gnss-sdr-0.0.6/0000755000175000017500000000000012577075512012574 5ustar carlescarlesgnss-sdr-0.0.6/firmware/0000755000175000017500000000000012576764164014417 5ustar carlescarlesgnss-sdr-0.0.6/firmware/GN3S_v2/0000755000175000017500000000000012576764164015540 5ustar carlescarlesgnss-sdr-0.0.6/firmware/GN3S_v2/include/0000755000175000017500000000000012576764164017163 5ustar carlescarlesgnss-sdr-0.0.6/firmware/GN3S_v2/include/isr.h0000644000175000017500000001050212576764164020127 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _ISR_H_ #define _ISR_H_ /* * ---------------------------------------------------------------- * routines for managing interrupt services routines * ---------------------------------------------------------------- */ /* * The FX2 has three discrete sets of interrupt vectors. * The first set is the standard 8051 vector (13 8-byte entries). * The second set is USB interrupt autovector (32 4-byte entries). * The third set is the FIFO/GPIF autovector (14 4-byte entries). * * Since all the code we're running in the FX2 is ram based, we * forego the typical "initialize the interrupt vectors at link time" * strategy, in favor of calls at run time that install the correct * pointers to functions. */ /* * Standard Vector numbers */ #define SV_INT_0 0x03 #define SV_TIMER_0 0x0b #define SV_INT_1 0x13 #define SV_TIMER_1 0x1b #define SV_SERIAL_0 0x23 #define SV_TIMER_2 0x2b #define SV_RESUME 0x33 #define SV_SERIAL_1 0x3b #define SV_INT_2 0x43 // (INT_2) points at USB autovector #define SV_I2C 0x4b #define SV_INT_4 0x53 // (INT_4) points at FIFO/GPIF autovector #define SV_INT_5 0x5b #define SV_INT_6 0x63 #define SV_MIN SV_INT_0 #define SV_MAX SV_INT_6 /* * USB Auto Vector numbers */ #define UV_SUDAV 0x00 #define UV_SOF 0x04 #define UV_SUTOK 0x08 #define UV_SUSPEND 0x0c #define UV_USBRESET 0x10 #define UV_HIGHSPEED 0x14 #define UV_EP0ACK 0x18 #define UV_SPARE_1C 0x1c #define UV_EP0IN 0x20 #define UV_EP0OUT 0x24 #define UV_EP1IN 0x28 #define UV_EP1OUT 0x2c #define UV_EP2 0x30 #define UV_EP4 0x34 #define UV_EP6 0x38 #define UV_EP8 0x3c #define UV_IBN 0x40 #define UV_SPARE_44 0x44 #define UV_EP0PINGNAK 0x48 #define UV_EP1PINGNAK 0x4c #define UV_EP2PINGNAK 0x50 #define UV_EP4PINGNAK 0x54 #define UV_EP6PINGNAK 0x58 #define UV_EP8PINGNAK 0x5c #define UV_ERRLIMIT 0x60 #define UV_SPARE_64 0x64 #define UV_SPARE_68 0x68 #define UV_SPARE_6C 0x6c #define UV_EP2ISOERR 0x70 #define UV_EP4ISOERR 0x74 #define UV_EP6ISOERR 0x78 #define UV_EP8ISOERR 0x7c #define UV_MIN UV_SUDAV #define UV_MAX UV_EP8ISOERR /* * FIFO/GPIF Auto Vector numbers */ #define FGV_EP2PF 0x80 #define FGV_EP4PF 0x84 #define FGV_EP6PF 0x88 #define FGV_EP8PF 0x8c #define FGV_EP2EF 0x90 #define FGV_EP4EF 0x94 #define FGV_EP6EF 0x98 #define FGV_EP8EF 0x9c #define FGV_EP2FF 0xa0 #define FGV_EP4FF 0xa4 #define FGV_EP6FF 0xa8 #define FGV_EP8FF 0xac #define FGV_GPIFDONE 0xb0 #define FGV_GPIFWF 0xb4 #define FGV_MIN FGV_EP2PF #define FGV_MAX FGV_GPIFWF /* * Hook standard interrupt vector. * * vector_number is from the SV_ list above. * addr is the address of the interrupt service routine. */ void hook_sv (unsigned char vector_number, unsigned short addr); /* * Hook usb interrupt vector. * * vector_number is from the UV_ list above. * addr is the address of the interrupt service routine. */ void hook_uv (unsigned char vector_number, unsigned short addr); /* * Hook fifo/gpif interrupt vector. * * vector_number is from the FGV_ list above. * addr is the address of the interrupt service routine. */ void hook_fgv (unsigned char vector_number, unsigned short addr); /* * One time call to enable autovectoring for both USB and FIFO/GPIF */ void setup_autovectors (void); /* * Must be called in each usb interrupt handler */ #define clear_usb_irq() \ EXIF &= ~bmEXIF_USBINT; \ INT2CLR = 0 /* * Must be calledin each fifo/gpif interrupt handler */ #define clear_fifo_gpif_irq() \ EXIF &= ~bmEXIF_IE4; \ INT4CLR = 0 #endif /* _ISR_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/timer.h0000644000175000017500000000207312576764164020456 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _TIMER_H_ #define _TIMER_H_ /* * Arrange to have isr_tick_handler called at 100 Hz */ void hook_timer_tick (unsigned short isr_tick_handler); #define clear_timer_irq() \ TF2 = 0 /* clear overflow flag */ #endif /* _TIMER_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/gn3s_main.h0000644000175000017500000000556112576764164021221 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * * http://ccar.colorado.edu/gnss * * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GN3S_MAIN_ #define _GN3S_MAIN_ #include "usrp_common.h" #include "fx2regs.h" #include "gn3s_regs.h" #include "gpif_inline.h" #include "timer.h" #include "isr.h" #include "usb_common.h" #include "fx2utils.h" #include "gn3s_se4110.h" #include "eeprom.h" #include // ---------------------------------------------------------------- // Vendor bmRequestType's // ---------------------------------------------------------------- #define VRT_VENDOR_IN 0xC0 #define VRT_VENDOR_OUT 0x40 // IN commands #define VRQ_GET_STATUS 0x80 #define GS_TX_UNDERRUN 0 // wIndexL // returns 1 byte #define GS_RX_OVERRUN 1 // wIndexL // returns 1 byte // OUT commands #define VRQ_XFER 0x01 #define VRQ_XFER_TX 0x02 #define bRequestType SETUPDAT[0] #define bRequest SETUPDAT[1] #define wValueL SETUPDAT[2] #define wValueH SETUPDAT[3] #define wIndexL SETUPDAT[4] #define wIndexH SETUPDAT[5] #define wLengthL SETUPDAT[6] #define wLengthH SETUPDAT[7] #define GUARD 4073 #undef wordwide // A9 specific #define VRQ_EEPROM 0xa2 // loads (uploads) EEPROM #define VRQ_RAM 0xa3 // loads (uploads) external ram #define VRQ_DB_FX 0xa9 // Force use of double byte address EEPROM #define EP0BUFF_SIZE 0x40 // Prototypes static void get_ep0_data(void); unsigned char app_vendor_cmd(void); void guardC(void) interrupt; static void main_loop(void); void TD_Init(); #endif gnss-sdr-0.0.6/firmware/GN3S_v2/include/fx2utils.h0000644000175000017500000000175612576764164021125 0ustar carlescarles/* -*- c -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _FX2UTILS_H_ #define _FX2UTILS_H_ void fx2_stall_ep0 (void); void fx2_reset_data_toggle (unsigned char ep); void fx2_renumerate (void); #endif /* _FX2UTILS_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/usrp_commands.h0000644000175000017500000000634512576764164022216 0ustar carlescarles/* * USRP - Universal Software Radio Peripheral * * Copyright (C) 2003,2004 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _USRP_COMMANDS_H_ #define _USRP_COMMANDS_H_ #define MAX_EP0_PKTSIZE 64 // max size of EP0 packet on FX2 // ---------------------------------------------------------------- // Vendor bmRequestType's // ---------------------------------------------------------------- #define VRT_VENDOR_IN 0xC0 #define VRT_VENDOR_OUT 0x40 // ---------------------------------------------------------------- // USRP Vendor Requests // // Note that Cypress reserves [0xA0,0xAF]. // 0xA0 is the firmware load function. // ---------------------------------------------------------------- // IN commands #define VRQ_GET_STATUS 0x80 #define GS_TX_UNDERRUN 0 // wIndexL // returns 1 byte #define GS_RX_OVERRUN 1 // wIndexL // returns 1 byte #define VRQ_I2C_READ 0x81 // wValueL: i2c address; length: how much to read #define VRQ_SPI_READ 0x82 // wValue: optional header bytes // wIndexH: enables // wIndexL: format // len: how much to read // OUT commands #define VRQ_SET_LED 0x01 // wValueL off/on {0,1}; wIndexL: which {0,1} #define VRQ_FPGA_LOAD 0x02 # define FL_BEGIN 0 // wIndexL: begin fpga programming cycle. stalls if trouble. # define FL_XFER 1 // wIndexL: xfer up to 64 bytes of data # define FL_END 2 // wIndexL: end programming cycle, check for success. // stalls endpoint if trouble. #define VRQ_FPGA_WRITE_REG 0x03 // wIndexL: regno; data: 32-bit regval MSB first #define VRQ_FPGA_SET_RESET 0x04 // wValueL: {0,1} #define VRQ_FPGA_SET_TX_ENABLE 0x05 // wValueL: {0,1} #define VRQ_FPGA_SET_RX_ENABLE 0x06 // wValueL: {0,1} // see below VRQ_FPGA_SET_{TX,RX}_RESET #define VRQ_SET_SLEEP_BITS 0x07 // wValueH: mask; wValueL: bits. set bits given by mask to bits # define SLEEP_ADC0 0x01 # define SLEEP_ADC1 0x02 # define SLEEP_DAC0 0x04 # define SLEEP_DAC1 0x08 #define VRQ_I2C_WRITE 0x08 // wValueL: i2c address; data: data #define VRQ_SPI_WRITE 0x09 // wValue: optional header bytes // wIndexH: enables // wIndexL: format // len: how much to write #define VRQ_FPGA_SET_TX_RESET 0x0a // wValueL: {0, 1} #define VRQ_FPGA_SET_RX_RESET 0x0b // wValueL: {0, 1} // ------------------------------------------------------------------- // we store the hashes at fixed addresses in the FX2 internal memory #define USRP_HASH_SLOT_0_ADDR 0xe1e0 #define USRP_HASH_SLOT_1_ADDR 0xe1f0 #endif /* _USRP_COMMANDS_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/usb_common.h0000644000175000017500000000233712576764164021502 0ustar carlescarles/* -*- c -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _USB_COMMON_H_ #define _USB_COMMON_H_ extern volatile bit _usb_got_SUDAV; extern volatile bit _usb_rx_overrun; // Provided by user application to handle VENDOR commands. // returns non-zero if it handled the command. unsigned char app_vendor_cmd (void); void usb_install_handlers (void); void usb_handle_setup_packet (void); #define usb_setup_packet_avail() _usb_got_SUDAV #endif /* _USB_COMMON_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/usrp_common.h0000644000175000017500000000377112576764164021705 0ustar carlescarles/* * USRP - Universal Software Radio Peripheral * * Copyright (C) 2003 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * common defines and prototypes for USRP * * In comments below "TRM" refers to the EZ-USB FX2 Technical Reference Manual */ #ifndef _USRPCOMMON_H_ #define _USRPCOMMON_H_ #include "gn3s_regs.h" #include "fx2regs.h" #include "syncdelay.h" /* * From TRM page 15-105: * * Under certain conditions, some read and write access to the FX2 * registers must be separated by a "synchronization delay". The * delay is necessary only under the following conditions: * * - between a write to any register in the 0xE600 - 0xE6FF range * and a write to one of the registers listed below. * * - between a write to one of the registers listed below and a read * from any register in the 0xE600 - 0xE6FF range. * * Registers which require a synchronization delay: * * FIFORESET FIFOPINPOLAR * INPKTEND EPxBCH:L * EPxFIFOPFH:L EPxAUTOINLENH:L * EPxFIFOCFG EPxGPIFFLGSEL * PINFLAGSAB PINFLAGSCD * EPxFIFOIE EPxFIFOIRQ * GPIFIE GPIFIRQ * UDMACRCH:L GPIFADRH:L * GPIFTRIG EPxGPIFTRIG * OUTPKTEND REVCTL * GPIFTCB3 GPIFTCB2 * GPIFTCB1 GPIFTCB0 */ #define TRUE 1 #define FALSE 0 void init_usrp (void); void init_gpif (void); #endif /* _USRPCOMMON_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/gn3s_regs.h0000644000175000017500000000357312576764164021236 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * * http://ccar.colorado.edu/gnss * * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GN3S_REGS_H_ #define _GN3S_REGS_H_ /* Port A (bit addressable): */ #define bmPORT_A_OUTPUTS 0 /* All inputs */ #define bmPORT_A_INITIAL 0 /* Port B: GPIF FD[7:0] */ // FIFO Input /* Port C */ #define bmPORT_C_OUTPUTS 0 #define bmPORT_C_INITIAL 0 /* Port D: GPIF FD[15:8] */ #define bmPORT_D_OUTPUTS 0 #define bmPORT_D_INITIAL 0 /* Port E: not bit addressible */ #define bmPORT_E_OUTPUTS 0 #define bmPORT_E_INITIAL 0 #endif gnss-sdr-0.0.6/firmware/GN3S_v2/include/gpif_inline.h0000644000175000017500000000103212576764164021613 0ustar carlescarles/* * Machine generated by "edit-gpif". Do not edit by hand. */ #define setup_flowstate_common() \ do { \ FLOWSTATE = 0x80; \ FLOWLOGIC = 0xed; \ FLOWEQ0CTL = 0x00; \ FLOWEQ1CTL = 0x00; \ FLOWHOLDOFF = 0x00; \ FLOWSTB = 0x00; \ FLOWSTBEDGE = 0x03; \ FLOWSTBHPERIOD = 0x02; \ GPIFHOLDAMOUNT = 0x00; \ } while (0) #define setup_flowstate_read() \ do { \ FLOWLOGIC = 0xed; \ } while (0) #define setup_flowstate_write() \ do { \ FLOWLOGIC = 0xee; \ } while (0) gnss-sdr-0.0.6/firmware/GN3S_v2/include/gn3s_se4110.h0000644000175000017500000000325312576764164021206 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * * http://ccar.colorado.edu/gnss * * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _GN3S_SE4110_ #define _GN3S_SE4110_ #include "fx2regs.h" #include "delay.h" /* Prototypes */ char init_se4110(void); char enable_se4110(void); char disable_se4110(void); char reset_se4110(void); char program_3w(void); #endif gnss-sdr-0.0.6/firmware/GN3S_v2/include/usb_requests.h0000644000175000017500000000446412576764164022070 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ // Standard USB requests. // These are contained in end point 0 setup packets #ifndef _USB_REQUESTS_H_ #define _USB_REQUESTS_H_ // format of bmRequestType byte #define bmRT_DIR_MASK (0x1 << 7) #define bmRT_DIR_IN (1 << 7) #define bmRT_DIR_OUT (0 << 7) #define bmRT_TYPE_MASK (0x3 << 5) #define bmRT_TYPE_STD (0 << 5) #define bmRT_TYPE_CLASS (1 << 5) #define bmRT_TYPE_VENDOR (2 << 5) #define bmRT_TYPE_RESERVED (3 << 5) #define bmRT_RECIP_MASK (0x1f << 0) #define bmRT_RECIP_DEVICE (0 << 0) #define bmRT_RECIP_INTERFACE (1 << 0) #define bmRT_RECIP_ENDPOINT (2 << 0) #define bmRT_RECIP_OTHER (3 << 0) // standard request codes (bRequest) #define RQ_GET_STATUS 0 #define RQ_CLEAR_FEATURE 1 #define RQ_RESERVED_2 2 #define RQ_SET_FEATURE 3 #define RQ_RESERVED_4 4 #define RQ_SET_ADDRESS 5 #define RQ_GET_DESCR 6 #define RQ_SET_DESCR 7 #define RQ_GET_CONFIG 8 #define RQ_SET_CONFIG 9 #define RQ_GET_INTERFACE 10 #define RQ_SET_INTERFACE 11 #define RQ_SYNCH_FRAME 12 // standard descriptor types #define DT_DEVICE 1 #define DT_CONFIG 2 #define DT_STRING 3 #define DT_INTERFACE 4 #define DT_ENDPOINT 5 #define DT_DEVQUAL 6 #define DT_OTHER_SPEED 7 #define DT_INTERFACE_POWER 8 // standard feature selectors #define FS_ENDPOINT_HALT 0 // recip: endpoint #define FS_DEV_REMOTE_WAKEUP 1 // recip: device #define FS_TEST_MODE 2 // recip: device // Get Status device attributes #define bmGSDA_SELF_POWERED 0x01 #define bmGSDA_REM_WAKEUP 0x02 #endif /* _USB_REQUESTS_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/syncdelay.h0000644000175000017500000000407412576764164021334 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _SYNCDELAY_H_ #define _SYNCDELAY_H_ /* * Magic delay required between access to certain xdata registers (TRM page 15-106). * For our configuration, 48 MHz FX2 / 48 MHz IFCLK, we need three cycles. Each * NOP is a single cycle.... * * From TRM page 15-105: * * Under certain conditions, some read and write access to the FX2 registers must * be separated by a "synchronization delay". The delay is necessary only under the * following conditions: * * - between a write to any register in the 0xE600 - 0xE6FF range and a write to one * of the registers listed below. * * - between a write to one of the registers listed below and a read from any register * in the 0xE600 - 0xE6FF range. * * Registers which require a synchronization delay: * * FIFORESET FIFOPINPOLAR * INPKTEND EPxBCH:L * EPxFIFOPFH:L EPxAUTOINLENH:L * EPxFIFOCFG EPxGPIFFLGSEL * PINFLAGSAB PINFLAGSCD * EPxFIFOIE EPxFIFOIRQ * GPIFIE GPIFIRQ * UDMACRCH:L GPIFADRH:L * GPIFTRIG EPxGPIFTRIG * OUTPKTEND REVCTL * GPIFTCB3 GPIFTCB2 * GPIFTCB1 GPIFTCB0 */ /* * FIXME ensure that the peep hole optimizer isn't screwing us */ #define SYNCDELAY _asm nop; nop; nop; _endasm #define NOP _asm nop; _endasm #endif /* _SYNCDELAY_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/usb_descriptors.h0000644000175000017500000000233112576764164022545 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ extern xdata const char high_speed_device_descr[]; extern xdata const char high_speed_devqual_descr[]; extern xdata const char high_speed_config_descr[]; extern xdata const char full_speed_device_descr[]; extern xdata const char full_speed_devqual_descr[]; extern xdata const char full_speed_config_descr[]; extern xdata unsigned char nstring_descriptors; extern xdata char * xdata string_descriptors[]; gnss-sdr-0.0.6/firmware/GN3S_v2/include/delay.h0000644000175000017500000000216512576764164020436 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _DELAY_H_ #define _DELAY_H_ /* * delay for approximately usecs microseconds * Note limit of 255 usecs. */ void udelay (unsigned char usecs); /* * delay for approximately msecs milliseconds */ void mdelay (unsigned short msecs); #endif /* _DELAY_H_ */ gnss-sdr-0.0.6/firmware/GN3S_v2/include/eeprom.h0000644000175000017500000000353712576764164020633 0ustar carlescarles#define EEPROM_ADDR 0x51 //----------------------------------------------------------------------------- // Macros //----------------------------------------------------------------------------- // the 3684 DVK board uses port pin PA7 as an EEPROM write-protect enable/disable. // If your design uses a different pin, modify the following macros accordingly. #define EEPROM_ENABLE_WRITE_PROTECT() OEA &= ~0x80 // float PA7 #define EEPROM_DISABLE_WRITE_PROTECT() PA7 = 0; OEA |= 0x80 // drive PA7 low #define MSB(word) (BYTE)(((WORD)(word) >> 8) & 0xff) #define LSB(word) (BYTE)((WORD)(word) & 0xff) #define SWAP_ENDIAN(word) ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1];\ ((BYTE*)&word)[1] ^= ((BYTE*)&word)[0];\ ((BYTE*)&word)[0] ^= ((BYTE*)&word)[1] //----------------------------------------------------------------------------- // Function Prototypes //----------------------------------------------------------------------------- void EEWaitForStop(); BYTE EEWaitForAck(); static void EEStartAndAddr(); extern void WaitForEEPROMWrite(); BYTE EEPROMWritePage(WORD addr, BYTE xdata * ptr, BYTE len); BYTE EEPROMRead(WORD addr, BYTE length, BYTE xdata *buf); void WaitForEEPROMWrite2(); BYTE EEWaitForDone(); BYTE EEPROMGetPageSize(); //----------------------------------------------------------------------------- // Global Variables //----------------------------------------------------------------------------- extern BYTE DB_Addr; // Dual Byte Address stat extern BYTE I2C_Addr; // I2C address extern BYTE EE_Page_Size; // EEPROM page size //----------------------------------------------------------------------------- // Global Constants //----------------------------------------------------------------------------- #define SERIAL_ADDR 0x50 gnss-sdr-0.0.6/firmware/GN3S_v2/include/fx2regs.h0000644000175000017500000010033112576764164020712 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* //----------------------------------------------------------------------------- // File: FX2regs.h // Contents: EZ-USB FX2 register declarations and bit mask definitions. // // $Archive: /USB/Target/Inc/fx2regs.h $ // $Date: 2003/12/08 03:26:57 $ // $Revision: 1.4 $ // // // Copyright (c) 2000 Cypress Semiconductor, All rights reserved //----------------------------------------------------------------------------- */ #ifndef FX2REGS_H /* Header Sentry */ #define FX2REGS_H #define ALLOCATE_EXTERN // required for "right thing to happen" with fx2regs.h /* //----------------------------------------------------------------------------- // FX2 Related Register Assignments //----------------------------------------------------------------------------- // The Ez-USB FX2 registers are defined here. We use FX2regs.h for register // address allocation by using "#define ALLOCATE_EXTERN". // When using "#define ALLOCATE_EXTERN", you get (for instance): // xdata volatile BYTE OUT7BUF[64] _at_ 0x7B40; // Such lines are created from FX2.h by using the preprocessor. // Incidently, these lines will not generate any space in the resulting hex // file; they just bind the symbols to the addresses for compilation. // You just need to put "#define ALLOCATE_EXTERN" in your main program file; // i.e. fw.c or a stand-alone C source file. // Without "#define ALLOCATE_EXTERN", you just get the external reference: // extern xdata volatile BYTE OUT7BUF[64] ;// 0x7B40; // This uses the concatenation operator "##" to insert a comment "//" // to cut off the end of the line, "_at_ 0x7B40;", which is not wanted. */ #ifdef ALLOCATE_EXTERN #define EXTERN #define _AT_(a) at a #else #define EXTERN extern #define _AT_ ;/ ## / #endif typedef unsigned char BYTE; typedef unsigned short WORD; EXTERN xdata _AT_(0xE400) volatile BYTE GPIF_WAVE_DATA[128]; EXTERN xdata _AT_(0xE480) volatile BYTE RES_WAVEDATA_END ; // General Configuration EXTERN xdata _AT_(0xE600) volatile BYTE CPUCS ; // Control & Status EXTERN xdata _AT_(0xE601) volatile BYTE IFCONFIG ; // Interface Configuration EXTERN xdata _AT_(0xE602) volatile BYTE PINFLAGSAB ; // FIFO FLAGA and FLAGB Assignments EXTERN xdata _AT_(0xE603) volatile BYTE PINFLAGSCD ; // FIFO FLAGC and FLAGD Assignments EXTERN xdata _AT_(0xE604) volatile BYTE FIFORESET ; // Restore FIFOS to default state EXTERN xdata _AT_(0xE605) volatile BYTE BREAKPT ; // Breakpoint EXTERN xdata _AT_(0xE606) volatile BYTE BPADDRH ; // Breakpoint Address H EXTERN xdata _AT_(0xE607) volatile BYTE BPADDRL ; // Breakpoint Address L EXTERN xdata _AT_(0xE608) volatile BYTE UART230 ; // 230 Kbaud clock for T0,T1,T2 EXTERN xdata _AT_(0xE609) volatile BYTE FIFOPINPOLAR ; // FIFO polarities EXTERN xdata _AT_(0xE60A) volatile BYTE REVID ; // Chip Revision EXTERN xdata _AT_(0xE60B) volatile BYTE REVCTL ; // Chip Revision Control // Endpoint Configuration EXTERN xdata _AT_(0xE610) volatile BYTE EP1OUTCFG ; // Endpoint 1-OUT Configuration EXTERN xdata _AT_(0xE611) volatile BYTE EP1INCFG ; // Endpoint 1-IN Configuration EXTERN xdata _AT_(0xE612) volatile BYTE EP2CFG ; // Endpoint 2 Configuration EXTERN xdata _AT_(0xE613) volatile BYTE EP4CFG ; // Endpoint 4 Configuration EXTERN xdata _AT_(0xE614) volatile BYTE EP6CFG ; // Endpoint 6 Configuration EXTERN xdata _AT_(0xE615) volatile BYTE EP8CFG ; // Endpoint 8 Configuration EXTERN xdata _AT_(0xE618) volatile BYTE EP2FIFOCFG ; // Endpoint 2 FIFO configuration EXTERN xdata _AT_(0xE619) volatile BYTE EP4FIFOCFG ; // Endpoint 4 FIFO configuration EXTERN xdata _AT_(0xE61A) volatile BYTE EP6FIFOCFG ; // Endpoint 6 FIFO configuration EXTERN xdata _AT_(0xE61B) volatile BYTE EP8FIFOCFG ; // Endpoint 8 FIFO configuration EXTERN xdata _AT_(0xE620) volatile BYTE EP2AUTOINLENH ; // Endpoint 2 Packet Length H (IN only) EXTERN xdata _AT_(0xE621) volatile BYTE EP2AUTOINLENL ; // Endpoint 2 Packet Length L (IN only) EXTERN xdata _AT_(0xE622) volatile BYTE EP4AUTOINLENH ; // Endpoint 4 Packet Length H (IN only) EXTERN xdata _AT_(0xE623) volatile BYTE EP4AUTOINLENL ; // Endpoint 4 Packet Length L (IN only) EXTERN xdata _AT_(0xE624) volatile BYTE EP6AUTOINLENH ; // Endpoint 6 Packet Length H (IN only) EXTERN xdata _AT_(0xE625) volatile BYTE EP6AUTOINLENL ; // Endpoint 6 Packet Length L (IN only) EXTERN xdata _AT_(0xE626) volatile BYTE EP8AUTOINLENH ; // Endpoint 8 Packet Length H (IN only) EXTERN xdata _AT_(0xE627) volatile BYTE EP8AUTOINLENL ; // Endpoint 8 Packet Length L (IN only) EXTERN xdata _AT_(0xE630) volatile BYTE EP2FIFOPFH ; // EP2 Programmable Flag trigger H EXTERN xdata _AT_(0xE631) volatile BYTE EP2FIFOPFL ; // EP2 Programmable Flag trigger L EXTERN xdata _AT_(0xE632) volatile BYTE EP4FIFOPFH ; // EP4 Programmable Flag trigger H EXTERN xdata _AT_(0xE633) volatile BYTE EP4FIFOPFL ; // EP4 Programmable Flag trigger L EXTERN xdata _AT_(0xE634) volatile BYTE EP6FIFOPFH ; // EP6 Programmable Flag trigger H EXTERN xdata _AT_(0xE635) volatile BYTE EP6FIFOPFL ; // EP6 Programmable Flag trigger L EXTERN xdata _AT_(0xE636) volatile BYTE EP8FIFOPFH ; // EP8 Programmable Flag trigger H EXTERN xdata _AT_(0xE637) volatile BYTE EP8FIFOPFL ; // EP8 Programmable Flag trigger L EXTERN xdata _AT_(0xE640) volatile BYTE EP2ISOINPKTS ; // EP2 (if ISO) IN Packets per frame (1-3) EXTERN xdata _AT_(0xE641) volatile BYTE EP4ISOINPKTS ; // EP4 (if ISO) IN Packets per frame (1-3) EXTERN xdata _AT_(0xE642) volatile BYTE EP6ISOINPKTS ; // EP6 (if ISO) IN Packets per frame (1-3) EXTERN xdata _AT_(0xE643) volatile BYTE EP8ISOINPKTS ; // EP8 (if ISO) IN Packets per frame (1-3) EXTERN xdata _AT_(0xE648) volatile BYTE INPKTEND ; // Force IN Packet End EXTERN xdata _AT_(0xE649) volatile BYTE OUTPKTEND ; // Force OUT Packet End // Interrupts EXTERN xdata _AT_(0xE650) volatile BYTE EP2FIFOIE ; // Endpoint 2 Flag Interrupt Enable EXTERN xdata _AT_(0xE651) volatile BYTE EP2FIFOIRQ ; // Endpoint 2 Flag Interrupt Request EXTERN xdata _AT_(0xE652) volatile BYTE EP4FIFOIE ; // Endpoint 4 Flag Interrupt Enable EXTERN xdata _AT_(0xE653) volatile BYTE EP4FIFOIRQ ; // Endpoint 4 Flag Interrupt Request EXTERN xdata _AT_(0xE654) volatile BYTE EP6FIFOIE ; // Endpoint 6 Flag Interrupt Enable EXTERN xdata _AT_(0xE655) volatile BYTE EP6FIFOIRQ ; // Endpoint 6 Flag Interrupt Request EXTERN xdata _AT_(0xE656) volatile BYTE EP8FIFOIE ; // Endpoint 8 Flag Interrupt Enable EXTERN xdata _AT_(0xE657) volatile BYTE EP8FIFOIRQ ; // Endpoint 8 Flag Interrupt Request EXTERN xdata _AT_(0xE658) volatile BYTE IBNIE ; // IN-BULK-NAK Interrupt Enable EXTERN xdata _AT_(0xE659) volatile BYTE IBNIRQ ; // IN-BULK-NAK interrupt Request EXTERN xdata _AT_(0xE65A) volatile BYTE NAKIE ; // Endpoint Ping NAK interrupt Enable EXTERN xdata _AT_(0xE65B) volatile BYTE NAKIRQ ; // Endpoint Ping NAK interrupt Request EXTERN xdata _AT_(0xE65C) volatile BYTE USBIE ; // USB Int Enables EXTERN xdata _AT_(0xE65D) volatile BYTE USBIRQ ; // USB Interrupt Requests EXTERN xdata _AT_(0xE65E) volatile BYTE EPIE ; // Endpoint Interrupt Enables EXTERN xdata _AT_(0xE65F) volatile BYTE EPIRQ ; // Endpoint Interrupt Requests EXTERN xdata _AT_(0xE660) volatile BYTE GPIFIE ; // GPIF Interrupt Enable EXTERN xdata _AT_(0xE661) volatile BYTE GPIFIRQ ; // GPIF Interrupt Request EXTERN xdata _AT_(0xE662) volatile BYTE USBERRIE ; // USB Error Interrupt Enables EXTERN xdata _AT_(0xE663) volatile BYTE USBERRIRQ ; // USB Error Interrupt Requests EXTERN xdata _AT_(0xE664) volatile BYTE ERRCNTLIM ; // USB Error counter and limit EXTERN xdata _AT_(0xE665) volatile BYTE CLRERRCNT ; // Clear Error Counter EC[3..0] EXTERN xdata _AT_(0xE666) volatile BYTE INT2IVEC ; // Interupt 2 (USB) Autovector EXTERN xdata _AT_(0xE667) volatile BYTE INT4IVEC ; // Interupt 4 (FIFOS & GPIF) Autovector EXTERN xdata _AT_(0xE668) volatile BYTE INTSETUP ; // Interrupt 2&4 Setup // Input/Output EXTERN xdata _AT_(0xE670) volatile BYTE PORTACFG ; // I/O PORTA Alternate Configuration EXTERN xdata _AT_(0xE671) volatile BYTE PORTCCFG ; // I/O PORTC Alternate Configuration EXTERN xdata _AT_(0xE672) volatile BYTE PORTECFG ; // I/O PORTE Alternate Configuration EXTERN xdata _AT_(0xE678) volatile BYTE I2CS ; // Control & Status EXTERN xdata _AT_(0xE679) volatile BYTE I2DAT ; // Data EXTERN xdata _AT_(0xE67A) volatile BYTE I2CTL ; // I2C Control EXTERN xdata _AT_(0xE67B) volatile BYTE XAUTODAT1 ; // Autoptr1 MOVX access EXTERN xdata _AT_(0xE67C) volatile BYTE XAUTODAT2 ; // Autoptr2 MOVX access #define EXTAUTODAT1 XAUTODAT1 #define EXTAUTODAT2 XAUTODAT2 // USB Control EXTERN xdata _AT_(0xE680) volatile BYTE USBCS ; // USB Control & Status EXTERN xdata _AT_(0xE681) volatile BYTE SUSPEND ; // Put chip into suspend EXTERN xdata _AT_(0xE682) volatile BYTE WAKEUPCS ; // Wakeup source and polarity EXTERN xdata _AT_(0xE683) volatile BYTE TOGCTL ; // Toggle Control EXTERN xdata _AT_(0xE684) volatile BYTE USBFRAMEH ; // USB Frame count H EXTERN xdata _AT_(0xE685) volatile BYTE USBFRAMEL ; // USB Frame count L EXTERN xdata _AT_(0xE686) volatile BYTE MICROFRAME ; // Microframe count, 0-7 EXTERN xdata _AT_(0xE687) volatile BYTE FNADDR ; // USB Function address // Endpoints EXTERN xdata _AT_(0xE68A) volatile BYTE EP0BCH ; // Endpoint 0 Byte Count H EXTERN xdata _AT_(0xE68B) volatile BYTE EP0BCL ; // Endpoint 0 Byte Count L EXTERN xdata _AT_(0xE68D) volatile BYTE EP1OUTBC ; // Endpoint 1 OUT Byte Count EXTERN xdata _AT_(0xE68F) volatile BYTE EP1INBC ; // Endpoint 1 IN Byte Count EXTERN xdata _AT_(0xE690) volatile BYTE EP2BCH ; // Endpoint 2 Byte Count H EXTERN xdata _AT_(0xE691) volatile BYTE EP2BCL ; // Endpoint 2 Byte Count L EXTERN xdata _AT_(0xE694) volatile BYTE EP4BCH ; // Endpoint 4 Byte Count H EXTERN xdata _AT_(0xE695) volatile BYTE EP4BCL ; // Endpoint 4 Byte Count L EXTERN xdata _AT_(0xE698) volatile BYTE EP6BCH ; // Endpoint 6 Byte Count H EXTERN xdata _AT_(0xE699) volatile BYTE EP6BCL ; // Endpoint 6 Byte Count L EXTERN xdata _AT_(0xE69C) volatile BYTE EP8BCH ; // Endpoint 8 Byte Count H EXTERN xdata _AT_(0xE69D) volatile BYTE EP8BCL ; // Endpoint 8 Byte Count L EXTERN xdata _AT_(0xE6A0) volatile BYTE EP0CS ; // Endpoint Control and Status EXTERN xdata _AT_(0xE6A1) volatile BYTE EP1OUTCS ; // Endpoint 1 OUT Control and Status EXTERN xdata _AT_(0xE6A2) volatile BYTE EP1INCS ; // Endpoint 1 IN Control and Status EXTERN xdata _AT_(0xE6A3) volatile BYTE EP2CS ; // Endpoint 2 Control and Status EXTERN xdata _AT_(0xE6A4) volatile BYTE EP4CS ; // Endpoint 4 Control and Status EXTERN xdata _AT_(0xE6A5) volatile BYTE EP6CS ; // Endpoint 6 Control and Status EXTERN xdata _AT_(0xE6A6) volatile BYTE EP8CS ; // Endpoint 8 Control and Status EXTERN xdata _AT_(0xE6A7) volatile BYTE EP2FIFOFLGS ; // Endpoint 2 Flags EXTERN xdata _AT_(0xE6A8) volatile BYTE EP4FIFOFLGS ; // Endpoint 4 Flags EXTERN xdata _AT_(0xE6A9) volatile BYTE EP6FIFOFLGS ; // Endpoint 6 Flags EXTERN xdata _AT_(0xE6AA) volatile BYTE EP8FIFOFLGS ; // Endpoint 8 Flags EXTERN xdata _AT_(0xE6AB) volatile BYTE EP2FIFOBCH ; // EP2 FIFO total byte count H EXTERN xdata _AT_(0xE6AC) volatile BYTE EP2FIFOBCL ; // EP2 FIFO total byte count L EXTERN xdata _AT_(0xE6AD) volatile BYTE EP4FIFOBCH ; // EP4 FIFO total byte count H EXTERN xdata _AT_(0xE6AE) volatile BYTE EP4FIFOBCL ; // EP4 FIFO total byte count L EXTERN xdata _AT_(0xE6AF) volatile BYTE EP6FIFOBCH ; // EP6 FIFO total byte count H EXTERN xdata _AT_(0xE6B0) volatile BYTE EP6FIFOBCL ; // EP6 FIFO total byte count L EXTERN xdata _AT_(0xE6B1) volatile BYTE EP8FIFOBCH ; // EP8 FIFO total byte count H EXTERN xdata _AT_(0xE6B2) volatile BYTE EP8FIFOBCL ; // EP8 FIFO total byte count L EXTERN xdata _AT_(0xE6B3) volatile BYTE SUDPTRH ; // Setup Data Pointer high address byte EXTERN xdata _AT_(0xE6B4) volatile BYTE SUDPTRL ; // Setup Data Pointer low address byte EXTERN xdata _AT_(0xE6B5) volatile BYTE SUDPTRCTL ; // Setup Data Pointer Auto Mode EXTERN xdata _AT_(0xE6B8) volatile BYTE SETUPDAT[8] ; // 8 bytes of SETUP data // GPIF EXTERN xdata _AT_(0xE6C0) volatile BYTE GPIFWFSELECT ; // Waveform Selector EXTERN xdata _AT_(0xE6C1) volatile BYTE GPIFIDLECS ; // GPIF Done, GPIF IDLE drive mode EXTERN xdata _AT_(0xE6C2) volatile BYTE GPIFIDLECTL ; // Inactive Bus, CTL states EXTERN xdata _AT_(0xE6C3) volatile BYTE GPIFCTLCFG ; // CTL OUT pin drive EXTERN xdata _AT_(0xE6C4) volatile BYTE GPIFADRH ; // GPIF Address H EXTERN xdata _AT_(0xE6C5) volatile BYTE GPIFADRL ; // GPIF Address L EXTERN xdata _AT_(0xE6CE) volatile BYTE GPIFTCB3 ; // GPIF Transaction Count Byte 3 EXTERN xdata _AT_(0xE6CF) volatile BYTE GPIFTCB2 ; // GPIF Transaction Count Byte 2 EXTERN xdata _AT_(0xE6D0) volatile BYTE GPIFTCB1 ; // GPIF Transaction Count Byte 1 EXTERN xdata _AT_(0xE6D1) volatile BYTE GPIFTCB0 ; // GPIF Transaction Count Byte 0 #define EP2GPIFTCH GPIFTCB1 // these are here for backwards compatibility #define EP2GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) #define EP4GPIFTCH GPIFTCB1 // these are here for backwards compatibility #define EP4GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) #define EP6GPIFTCH GPIFTCB1 // these are here for backwards compatibility #define EP6GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) #define EP8GPIFTCH GPIFTCB1 // these are here for backwards compatibility #define EP8GPIFTCL GPIFTCB0 // before REVE silicon (ie. REVB and REVD) // EXTERN xdata volatile BYTE EP2GPIFTCH _AT_ 0xE6D0; // EP2 GPIF Transaction Count High // EXTERN xdata volatile BYTE EP2GPIFTCL _AT_ 0xE6D1; // EP2 GPIF Transaction Count Low EXTERN xdata _AT_(0xE6D2) volatile BYTE EP2GPIFFLGSEL ; // EP2 GPIF Flag select EXTERN xdata _AT_(0xE6D3) volatile BYTE EP2GPIFPFSTOP ; // Stop GPIF EP2 transaction on prog. flag EXTERN xdata _AT_(0xE6D4) volatile BYTE EP2GPIFTRIG ; // EP2 FIFO Trigger // EXTERN xdata volatile BYTE EP4GPIFTCH _AT_ 0xE6D8; // EP4 GPIF Transaction Count High // EXTERN xdata volatile BYTE EP4GPIFTCL _AT_ 0xE6D9; // EP4 GPIF Transactionr Count Low EXTERN xdata _AT_(0xE6DA) volatile BYTE EP4GPIFFLGSEL ; // EP4 GPIF Flag select EXTERN xdata _AT_(0xE6DB) volatile BYTE EP4GPIFPFSTOP ; // Stop GPIF EP4 transaction on prog. flag EXTERN xdata _AT_(0xE6DC) volatile BYTE EP4GPIFTRIG ; // EP4 FIFO Trigger // EXTERN xdata volatile BYTE EP6GPIFTCH _AT_ 0xE6E0; // EP6 GPIF Transaction Count High // EXTERN xdata volatile BYTE EP6GPIFTCL _AT_ 0xE6E1; // EP6 GPIF Transaction Count Low EXTERN xdata _AT_(0xE6E2) volatile BYTE EP6GPIFFLGSEL ; // EP6 GPIF Flag select EXTERN xdata _AT_(0xE6E3) volatile BYTE EP6GPIFPFSTOP ; // Stop GPIF EP6 transaction on prog. flag EXTERN xdata _AT_(0xE6E4) volatile BYTE EP6GPIFTRIG ; // EP6 FIFO Trigger // EXTERN xdata volatile BYTE EP8GPIFTCH _AT_ 0xE6E8; // EP8 GPIF Transaction Count High // EXTERN xdata volatile BYTE EP8GPIFTCL _AT_ 0xE6E9; // EP8GPIF Transaction Count Low EXTERN xdata _AT_(0xE6EA) volatile BYTE EP8GPIFFLGSEL ; // EP8 GPIF Flag select EXTERN xdata _AT_(0xE6EB) volatile BYTE EP8GPIFPFSTOP ; // Stop GPIF EP8 transaction on prog. flag EXTERN xdata _AT_(0xE6EC) volatile BYTE EP8GPIFTRIG ; // EP8 FIFO Trigger EXTERN xdata _AT_(0xE6F0) volatile BYTE XGPIFSGLDATH ; // GPIF Data H (16-bit mode only) EXTERN xdata _AT_(0xE6F1) volatile BYTE XGPIFSGLDATLX ; // Read/Write GPIF Data L & trigger transac EXTERN xdata _AT_(0xE6F2) volatile BYTE XGPIFSGLDATLNOX ; // Read GPIF Data L, no transac trigger EXTERN xdata _AT_(0xE6F3) volatile BYTE GPIFREADYCFG ; // Internal RDY,Sync/Async, RDY5CFG EXTERN xdata _AT_(0xE6F4) volatile BYTE GPIFREADYSTAT ; // RDY pin states EXTERN xdata _AT_(0xE6F5) volatile BYTE GPIFABORT ; // Abort GPIF cycles // UDMA EXTERN xdata _AT_(0xE6C6) volatile BYTE FLOWSTATE ; //Defines GPIF flow state EXTERN xdata _AT_(0xE6C7) volatile BYTE FLOWLOGIC ; //Defines flow/hold decision criteria EXTERN xdata _AT_(0xE6C8) volatile BYTE FLOWEQ0CTL ; //CTL states during active flow state EXTERN xdata _AT_(0xE6C9) volatile BYTE FLOWEQ1CTL ; //CTL states during hold flow state EXTERN xdata _AT_(0xE6CA) volatile BYTE FLOWHOLDOFF ; EXTERN xdata _AT_(0xE6CB) volatile BYTE FLOWSTB ; //CTL/RDY Signal to use as master data strobe EXTERN xdata _AT_(0xE6CC) volatile BYTE FLOWSTBEDGE ; //Defines active master strobe edge EXTERN xdata _AT_(0xE6CD) volatile BYTE FLOWSTBHPERIOD ; //Half Period of output master strobe EXTERN xdata _AT_(0xE60C) volatile BYTE GPIFHOLDAMOUNT ; //Data delay shift EXTERN xdata _AT_(0xE67D) volatile BYTE UDMACRCH ; //CRC Upper byte EXTERN xdata _AT_(0xE67E) volatile BYTE UDMACRCL ; //CRC Lower byte EXTERN xdata _AT_(0xE67F) volatile BYTE UDMACRCQUAL ; //UDMA In only, host terminated use only // Debug/Test EXTERN xdata _AT_(0xE6F8) volatile BYTE DBUG ; // Debug EXTERN xdata _AT_(0xE6F9) volatile BYTE TESTCFG ; // Test configuration EXTERN xdata _AT_(0xE6FA) volatile BYTE USBTEST ; // USB Test Modes EXTERN xdata _AT_(0xE6FB) volatile BYTE CT1 ; // Chirp Test--Override EXTERN xdata _AT_(0xE6FC) volatile BYTE CT2 ; // Chirp Test--FSM EXTERN xdata _AT_(0xE6FD) volatile BYTE CT3 ; // Chirp Test--Control Signals EXTERN xdata _AT_(0xE6FE) volatile BYTE CT4 ; // Chirp Test--Inputs // Endpoint Buffers EXTERN xdata _AT_(0xE740) volatile BYTE EP0BUF[64] ; // EP0 IN-OUT buffer EXTERN xdata _AT_(0xE780) volatile BYTE EP1OUTBUF[64] ; // EP1-OUT buffer EXTERN xdata _AT_(0xE7C0) volatile BYTE EP1INBUF[64] ; // EP1-IN buffer EXTERN xdata _AT_(0xF000) volatile BYTE EP2FIFOBUF[1024] ; // 512/1024-byte EP2 buffer (IN or OUT) EXTERN xdata _AT_(0xF400) volatile BYTE EP4FIFOBUF[1024] ; // 512 byte EP4 buffer (IN or OUT) EXTERN xdata _AT_(0xF800) volatile BYTE EP6FIFOBUF[1024] ; // 512/1024-byte EP6 buffer (IN or OUT) EXTERN xdata _AT_(0xFC00) volatile BYTE EP8FIFOBUF[1024] ; // 512 byte EP8 buffer (IN or OUT) #undef EXTERN #undef _AT_ /*----------------------------------------------------------------------------- Special Function Registers (SFRs) The byte registers and bits defined in the following list are based on the Synopsis definition of the 8051 Special Function Registers for EZ-USB. If you modify the register definitions below, please regenerate the file "ezregs.inc" which includes the same basic information for assembly inclusion. -----------------------------------------------------------------------------*/ // Port A sfr at 0x80 IOA; // Bit addressing on Port A sbit at 0x80+0 A0; sbit at 0x80+1 A1; sbit at 0x80+2 A2; sbit at 0x80+3 A3; sbit at 0x80+4 A4; sbit at 0x80+5 A5; sbit at 0x80+6 A6; sbit at 0x80+7 A7; sfr at 0x81 SP; sfr at 0x82 DPL; sfr at 0x83 DPH; sfr at 0x84 DPL1; sfr at 0x85 DPH1; sfr at 0x86 DPS; /* DPS */ sbit at 0x86+0 SEL; sfr at 0x87 PCON; /* PCON */ //sbit IDLE = 0x87+0; //sbit STOP = 0x87+1; //sbit GF0 = 0x87+2; //sbit GF1 = 0x87+3; //sbit SMOD0 = 0x87+7; sfr at 0x88 TCON; /* TCON */ sbit at 0x88+0 IT0; sbit at 0x88+1 IE0; sbit at 0x88+2 IT1; sbit at 0x88+3 IE1; sbit at 0x88+4 TR0; sbit at 0x88+5 TF0; sbit at 0x88+6 TR1; sbit at 0x88+7 TF1; sfr at 0x89 TMOD; /* TMOD */ //sbit M00 = 0x89+0; //sbit M10 = 0x89+1; //sbit CT0 = 0x89+2; //sbit GATE0 = 0x89+3; //sbit M01 = 0x89+4; //sbit M11 = 0x89+5; //sbit CT1 = 0x89+6; //sbit GATE1 = 0x89+7; sfr at 0x8A TL0; sfr at 0x8B TL1; sfr at 0x8C TH0; sfr at 0x8D TH1; sfr at 0x8E CKCON; /* CKCON */ //sbit MD0 = 0x89+0; //sbit MD1 = 0x89+1; //sbit MD2 = 0x89+2; //sbit T0M = 0x89+3; //sbit T1M = 0x89+4; //sbit T2M = 0x89+5; // sfr at 0x8F SPC_FNC; // Was WRS in Reg320 /* CKCON */ //sbit WRS = 0x8F+0; sfr at 0x90 IOB; sfr at 0x91 EXIF; // EXIF Bit Values differ from Reg320 /* EXIF */ //sbit USBINT = 0x91+4; //sbit I2CINT = 0x91+5; //sbit IE4 = 0x91+6; //sbit IE5 = 0x91+7; sfr at 0x92 MPAGE; sfr at 0x98 SCON0; /* SCON0 */ sbit at 0x98+0 RI; sbit at 0x98+1 TI; sbit at 0x98+2 RB8; sbit at 0x98+3 TB8; sbit at 0x98+4 REN; sbit at 0x98+5 SM2; sbit at 0x98+6 SM1; sbit at 0x98+7 SM0; sfr at 0x99 SBUF0; sfr at 0x9A APTR1H; sfr at 0x9B APTR1L; sfr at 0x9C AUTODAT1; sfr at 0x9D AUTOPTRH2; sfr at 0x9E AUTOPTRL2; sfr at 0x9F AUTODAT2; sfr at 0xA0 IOC; sfr at 0xA1 INT2CLR; sfr at 0xA2 INT4CLR; #define AUTOPTRH1 APTR1H #define AUTOPTRL1 APTR1L sfr at 0xA8 IE; /* IE */ sbit at 0xA8+0 EX0; sbit at 0xA8+1 ET0; sbit at 0xA8+2 EX1; sbit at 0xA8+3 ET1; sbit at 0xA8+4 ES0; sbit at 0xA8+5 ET2; sbit at 0xA8+6 ES1; sbit at 0xA8+7 EA; sfr at 0xAA EP2468STAT; /* EP2468STAT */ //sbit EP2E = 0xAA+0; //sbit EP2F = 0xAA+1; //sbit EP4E = 0xAA+2; //sbit EP4F = 0xAA+3; //sbit EP6E = 0xAA+4; //sbit EP6F = 0xAA+5; //sbit EP8E = 0xAA+6; //sbit EP8F = 0xAA+7; sfr at 0xAB EP24FIFOFLGS; sfr at 0xAC EP68FIFOFLGS; sfr at 0xAF AUTOPTRSETUP; /* AUTOPTRSETUP */ // sbit EXTACC = 0xAF+0; // sbit APTR1FZ = 0xAF+1; // sbit APTR2FZ = 0xAF+2; // Port D sfr at 0xB0 IOD; // Bit addressing on Port D sbit at 0xB0+0 D0; sbit at 0xB0+1 D1; sbit at 0xB0+2 D2; sbit at 0xB0+3 D3; sbit at 0xB0+4 D4; sbit at 0xB0+5 D5; sbit at 0xB0+6 D6; sbit at 0xB0+7 D7; sfr at 0xB1 IOE; sfr at 0xB2 OEA; sfr at 0xB3 OEB; sfr at 0xB4 OEC; sfr at 0xB5 OED; sfr at 0xB6 OEE; sfr at 0xB8 IP; /* IP */ sbit at 0xB8+0 PX0; sbit at 0xB8+1 PT0; sbit at 0xB8+2 PX1; sbit at 0xB8+3 PT1; sbit at 0xB8+4 PS0; sbit at 0xB8+5 PT2; sbit at 0xB8+6 PS1; sfr at 0xBA EP01STAT; sfr at 0xBB GPIFTRIG; sfr at 0xBD GPIFSGLDATH; sfr at 0xBE GPIFSGLDATLX; sfr at 0xBF GPIFSGLDATLNOX; sfr at 0xC0 SCON1; /* SCON1 */ sbit at 0xC0+0 RI1; sbit at 0xC0+1 TI1; sbit at 0xC0+2 RB81; sbit at 0xC0+3 TB81; sbit at 0xC0+4 REN1; sbit at 0xC0+5 SM21; sbit at 0xC0+6 SM11; sbit at 0xC0+7 SM01; sfr at 0xC1 SBUF1; sfr at 0xC8 T2CON; /* T2CON */ sbit at 0xC8+0 CP_RL2; sbit at 0xC8+1 C_T2; sbit at 0xC8+2 TR2; sbit at 0xC8+3 EXEN2; sbit at 0xC8+4 TCLK; sbit at 0xC8+5 RCLK; sbit at 0xC8+6 EXF2; sbit at 0xC8+7 TF2; sfr at 0xCA RCAP2L; sfr at 0xCB RCAP2H; sfr at 0xCC TL2; sfr at 0xCD TH2; sfr at 0xD0 PSW; /* PSW */ sbit at 0xD0+0 P; sbit at 0xD0+1 FL; sbit at 0xD0+2 OV; sbit at 0xD0+3 RS0; sbit at 0xD0+4 RS1; sbit at 0xD0+5 F0; sbit at 0xD0+6 AC; sbit at 0xD0+7 CY; sfr at 0xD8 EICON; // Was WDCON in DS80C320 EICON; Bit Values differ from Reg320 /* EICON */ sbit at 0xD8+3 INT6; sbit at 0xD8+4 RESI; sbit at 0xD8+5 ERESI; sbit at 0xD8+7 SMOD1; sfr at 0xE0 ACC; sfr at 0xE8 EIE; // EIE Bit Values differ from Reg320 /* EIE */ sbit at 0xE8+0 EIUSB; sbit at 0xE8+1 EI2C; sbit at 0xE8+2 EIEX4; sbit at 0xE8+3 EIEX5; sbit at 0xE8+4 EIEX6; sfr at 0xF0 B; sfr at 0xF8 EIP; // EIP Bit Values differ from Reg320 /* EIP */ sbit at 0xF8+0 PUSB; sbit at 0xF8+1 PI2C; sbit at 0xF8+2 EIPX4; sbit at 0xF8+3 EIPX5; sbit at 0xF8+4 EIPX6; /*----------------------------------------------------------------------------- Bit Masks -----------------------------------------------------------------------------*/ #define bmBIT0 1 #define bmBIT1 2 #define bmBIT2 4 #define bmBIT3 8 #define bmBIT4 16 #define bmBIT5 32 #define bmBIT6 64 #define bmBIT7 128 /* CPU Control & Status Register (CPUCS) */ #define bmPRTCSTB bmBIT5 #define bmCLKSPD (bmBIT4 | bmBIT3) #define bmCLKSPD1 bmBIT4 #define bmCLKSPD0 bmBIT3 #define bmCLKINV bmBIT2 #define bmCLKOE bmBIT1 #define bm8051RES bmBIT0 /* Port Alternate Configuration Registers */ /* Port A (PORTACFG) */ #define bmFLAGD bmBIT7 #define bmINT1 bmBIT1 #define bmINT0 bmBIT0 /* Port C (PORTCCFG) */ #define bmGPIFA7 bmBIT7 #define bmGPIFA6 bmBIT6 #define bmGPIFA5 bmBIT5 #define bmGPIFA4 bmBIT4 #define bmGPIFA3 bmBIT3 #define bmGPIFA2 bmBIT2 #define bmGPIFA1 bmBIT1 #define bmGPIFA0 bmBIT0 /* Port E (PORTECFG) */ #define bmGPIFA8 bmBIT7 #define bmT2EX bmBIT6 #define bmINT6 bmBIT5 #define bmRXD1OUT bmBIT4 #define bmRXD0OUT bmBIT3 #define bmT2OUT bmBIT2 #define bmT1OUT bmBIT1 #define bmT0OUT bmBIT0 /* I2C Control & Status Register (I2CS) */ #define bmSTART bmBIT7 #define bmSTOP bmBIT6 #define bmLASTRD bmBIT5 #define bmID (bmBIT4 | bmBIT3) #define bmBERR bmBIT2 #define bmACK bmBIT1 #define bmDONE bmBIT0 /* I2C Control Register (I2CTL) */ #define bmSTOPIE bmBIT1 #define bm400KHZ bmBIT0 /* Interrupt 2 (USB) Autovector Register (INT2IVEC) */ #define bmIV4 bmBIT6 #define bmIV3 bmBIT5 #define bmIV2 bmBIT4 #define bmIV1 bmBIT3 #define bmIV0 bmBIT2 /* USB Interrupt Request & Enable Registers (USBIE/USBIRQ) */ #define bmEP0ACK bmBIT6 #define bmHSGRANT bmBIT5 #define bmURES bmBIT4 #define bmSUSP bmBIT3 #define bmSUTOK bmBIT2 #define bmSOF bmBIT1 #define bmSUDAV bmBIT0 /* Breakpoint register (BREAKPT) */ #define bmBREAK bmBIT3 #define bmBPPULSE bmBIT2 #define bmBPEN bmBIT1 /* Interrupt 2 & 4 Setup (INTSETUP) */ #define bmAV2EN bmBIT3 #define bmINT4IN bmBIT1 #define bmAV4EN bmBIT0 /* USB Control & Status Register (USBCS) */ #define bmHSM bmBIT7 #define bmDISCON bmBIT3 #define bmNOSYNSOF bmBIT2 #define bmRENUM bmBIT1 #define bmSIGRESUME bmBIT0 /* Wakeup Control and Status Register (WAKEUPCS) */ #define bmWU2 bmBIT7 #define bmWU bmBIT6 #define bmWU2POL bmBIT5 #define bmWUPOL bmBIT4 #define bmDPEN bmBIT2 #define bmWU2EN bmBIT1 #define bmWUEN bmBIT0 /* End Point 0 Control & Status Register (EP0CS) */ #define bmHSNAK bmBIT7 /* End Point 0-1 Control & Status Registers (EP0CS/EP1OUTCS/EP1INCS) */ #define bmEPBUSY bmBIT1 #define bmEPSTALL bmBIT0 /* End Point 2-8 Control & Status Registers (EP2CS/EP4CS/EP6CS/EP8CS) */ #define bmNPAK (bmBIT6 | bmBIT5 | bmBIT4) #define bmEPFULL bmBIT3 #define bmEPEMPTY bmBIT2 /* Endpoint Status (EP2468STAT) SFR bits */ #define bmEP8FULL bmBIT7 #define bmEP8EMPTY bmBIT6 #define bmEP6FULL bmBIT5 #define bmEP6EMPTY bmBIT4 #define bmEP4FULL bmBIT3 #define bmEP4EMPTY bmBIT2 #define bmEP2FULL bmBIT1 #define bmEP2EMPTY bmBIT0 /* SETUP Data Pointer Auto Mode (SUDPTRCTL) */ #define bmSDPAUTO bmBIT0 /* Endpoint Data Toggle Control (TOGCTL) */ #define bmQUERYTOGGLE bmBIT7 #define bmSETTOGGLE bmBIT6 #define bmRESETTOGGLE bmBIT5 #define bmTOGCTLEPMASK bmBIT3 | bmBIT2 | bmBIT1 | bmBIT0 /* IBN (In Bulk Nak) enable and request bits (IBNIE/IBNIRQ) */ #define bmEP8IBN bmBIT5 #define bmEP6IBN bmBIT4 #define bmEP4IBN bmBIT3 #define bmEP2IBN bmBIT2 #define bmEP1IBN bmBIT1 #define bmEP0IBN bmBIT0 /* PING-NAK enable and request bits (NAKIE/NAKIRQ) */ #define bmEP8PING bmBIT7 #define bmEP6PING bmBIT6 #define bmEP4PING bmBIT5 #define bmEP2PING bmBIT4 #define bmEP1PING bmBIT3 #define bmEP0PING bmBIT2 #define bmIBN bmBIT0 /* Interface Configuration bits (IFCONFIG) */ #define bmIFCLKSRC bmBIT7 // set == INTERNAL #define bm3048MHZ bmBIT6 // set == 48 MHz #define bmIFCLKOE bmBIT5 #define bmIFCLKPOL bmBIT4 #define bmASYNC bmBIT3 #define bmGSTATE bmBIT2 #define bmIFCFG1 bmBIT1 #define bmIFCFG0 bmBIT0 #define bmIFCFGMASK (bmIFCFG0 | bmIFCFG1) #define bmIFGPIF bmIFCFG1 /* EP 2468 FIFO Configuration bits (EP2FIFOCFG,EP4FIFOCFG,EP6FIFOCFG,EP8FIFOCFG) */ #define bmINFM bmBIT6 #define bmOEP bmBIT5 #define bmAUTOOUT bmBIT4 #define bmAUTOIN bmBIT3 #define bmZEROLENIN bmBIT2 // must be zero bmBIT1 #define bmWORDWIDE bmBIT0 /* * Chip Revision Control Bits (REVCTL) - used to ebable/disable revision specific features */ #define bmNOAUTOARM bmBIT1 // these don't match the docs #define bmSKIPCOMMIT bmBIT0 // these don't match the docs #define bmDYN_OUT bmBIT1 // these do... #define bmENH_PKT bmBIT0 /* Fifo Reset bits (FIFORESET) */ #define bmNAKALL bmBIT7 /* Endpoint Configuration (EPxCFG) */ #define bmVALID bmBIT7 #define bmIN bmBIT6 #define bmTYPE1 bmBIT5 #define bmTYPE0 bmBIT4 #define bmISOCHRONOUS bmTYPE0 #define bmBULK bmTYPE1 #define bmINTERRUPT (bmTYPE1 | bmTYPE0) #define bm1KBUF bmBIT3 #define bmBUF1 bmBIT1 #define bmBUF0 bmBIT0 #define bmQUADBUF 0 #define bmINVALIDBUF bmBUF0 #define bmDOUBLEBUF bmBUF1 #define bmTRIPLEBUF (bmBUF1 | bmBUF0) /* OUTPKTEND */ #define bmSKIP bmBIT7 // low 4 bits specify which end point /* GPIFTRIG defs */ #define bmGPIF_IDLE bmBIT7 // status bit #define bmGPIF_EP2_START 0 #define bmGPIF_EP4_START 1 #define bmGPIF_EP6_START 2 #define bmGPIF_EP8_START 3 #define bmGPIF_READ bmBIT2 #define bmGPIF_WRITE 0 /* EXIF bits */ #define bmEXIF_USBINT bmBIT4 #define bmEXIF_I2CINT bmBIT5 #define bmEXIF_IE4 bmBIT6 #define bmEXIF_IE5 bmBIT7 #endif /* FX2REGS_H */ gnss-sdr-0.0.6/firmware/GN3S_v2/bin/0000755000175000017500000000000012576764164016310 5ustar carlescarlesgnss-sdr-0.0.6/firmware/GN3S_v2/bin/gn3s_firmware.ihx0000644000175000017500000003610612576764164021576 0ustar carlescarles:06000000020FE002006B9C :03000B0002006B85 :0300130002006B7D :03001B0002006B75 :0300230002006B6D :03002B0002006B65 :0300330002006B5D :03003B0002006B55 :0300430002006B4D :03004B0002006B45 :0300530002006B3D :03005B0002006B35 :0300630002006B2D :01006B003262 :0900800002006B0002006B00029B :08008900006B0002006B000295 :08009100006B0002006B00028D :08009900006B0002006B000285 :0800A100006B0002006B00027D :0800A900006B0002006B000275 :0700B100006B0002006B0070 :0901000002006B0002006B00021A :08010900006B0002006B000214 :08011100006B0002006B00020C :08011900006B0002006B000204 :08012100006B0002006B0002FC :08012900006B0002006B0002F4 :08013100006B0002006B0002EC :08013900006B0002006B0002E4 :08014100006B0002006B0002DC :08014900006B0002006B0002D4 :08015100006B0002006B0002CC :08015900006B0002006B0002C4 :08016100006B0002006B0002BC :08016900006B0002006B0002B4 :08017100006B0002006B0002AC :07017900006B0002006B00A7 :030FF800021000E4 :070FE000E4F50AF50BE4F54E :040FE7000CF50D7583 :020FEB000E00F6 :03101300020FFBCE :050FFB0012018080FEE0 :0701800012059512061D1285 :08018700067012057CC2AF12E4 :0A018F000F13120AB2D2EAD2AF1227 :0601990009C112069202EA :02019F00054316 :0501A10090E68BE4F084 :0901A60090E6A0E0FA20E1F82245 :0A01AF0090E6B8E0FABAC00280033F :0301B9000203102E :0A01BC0090E6B9E0FABA8002801262 :0501C600BAA202805501 :0501CB00BAA302805000 :0501D000BAA902804500 :0301D50002030C16 :0E01D80090E6BCE0FA601DBA013490E6C1E08A :0E01E600235401FA90E740F090E68AE4F0908E :0801F400E68B7401F002052CFA :0D01FC0090E6C1E0235401FA90E740F09036 :0D020900E68AE4F090E68B7401F002052C0B :0402160075820022CB :06021A0075080143090113 :0A02200090E6BAE0FA8A0F751000AC :0A022A0090E6BBE0FDE4420FED4258 :090234001090E6BEE0FC8C11758F :0A023D00120090E6BFE0FFE4FE426D :0402470011EF42125F :07024B00E5114512700302EA :02025200052C79 :0C02540090E6A0E0FE20E1F8C3E5119464 :0A02600040E51294005006AE11AF05 :03026A00128004FB :04026D007E407F0050 :0C02710090E6B9E0F8B8A337E4F513F507 :01027D00146C :0A027E00C3E5139EE5149F5063E5ED :0A028800132440FCE51434E7FDA840 :040292000FA910E5BB :0A0296001328F582E51439F583E022 :0A02A000F88C828D83F00513E4B59D :0602AA0013D2051480CE02 :0402B0007C007D0051 :0E02B400C3EC9EED9F5014EC2440F582ED3417 :0D02C200E7F58374CDF00CBC00E80D80E57D :0902CF008E1B7C407DE78C1C8D28 :0502D8001D850F828569 :0C02DD001083C006C0071207B3D007D082 :0102E900060E :0C02EA0090E68AE4F090E68BEEF0EE2542 :0502F6000FF50FEF35CC :0402FB0010F510E505 :0602FF0011C39EF511E59C :05030500129FF5120239 :02030A00024BA4 :04030C0075820022D4 :0A03100090E6B8E0FCBC4002800358 :03031A00020528B1 :0A031D0090E6B9E0FCBC0102801577 :06032700BCA2030203DF8B :06032D00BCA3030203DF84 :06033300BCA9030203D97E :0303390002052496 :0D033C0090E6BAE0606990E6C67480F0902B :0E034900E6C774EDF090E6C8E4F090E6C9F067 :0E03570090E6CAF090E6CBF090E6CC7403F08E :0D03650090E6CD7402F090E60CE4F00090FC :0E037200E6F574FFF00075BB000090E6C7745E :0E038000EDF00090E6047480F00090E6047446 :0E038E0002F00090E6047406F00090E604E42D :0A039C00F00075BB0600750CE97552 :0503A6000D0F02052C03 :0E03AB0075BB000090E6F574FFF00090E604CC :0E03B9007480F00090E6047402F00090E604F8 :0C03C7007406F00090E604E4F000E4F599 :0403D3000CF50D0216 :0203D700052CF3 :0603D90075080143090153 :0A03DF0090E6BAE0FC8C0F751000E8 :0A03E90090E6BBE0FDE4420FED4298 :0903F3001090E6BEE0FC8C1175CF :0A03FC00120090E6BFE0FDE4FC42B1 :0504060011ED4212E5BA :08040B000E70061208DE858266 :010413000EDA :07041400E51145127003021F :02041B00052CAE :09041D0090E68AE4F090E68BF011 :0E04260090E6A0E0FC20E1F890E68BE0FE7F7F :0C0434000090E6B9E0FCBCA33AE4F5132C :02044000F514B1 :0A044200C3E5139EE5149F4003027A :02044C00050C9D :05044E00A80FA910E554 :080453001328F8E51439F9E55E :0A045B00132440F582E51434E7F5A0 :0C04650083E0FC88828983F00513E4B575 :0604710013CF051480CB3F :040477007C007D0088 :0A047B00C3EC9EED9F400302050C48 :06048500850E157401B59F :04048B000E02804697 :09048F00EC250FF9ED3510F8AA77 :080498000E7B001ABAFF011BE4 :0C04A000EA5201EB5200E9486010AA0F7C :0A04AC00ECFB2AFAE50E145AD39572 :0404B6000EF4F51536 :0C04BA00EEC39CFAEF9DFBA8157900C36F :0E04C600EA98EB9950098E028C03EAC39BF56D :0104D4001512 :0A04D500EC250FF582ED3510F583DC :0A04DF00EC2440F518ED34E7F519A0 :0A04E90085151AC004C005C006C046 :0D04F300071206EED007D006D005D004A8F1 :0C050000157A00E82CFCEA3DFD02047BAB :07050C00EE250FF50FEF359E :0405130010F510E5EA :0605170011C39EF511E581 :05051D00129FF512021F :020522000414BF :0405240075820022BA :0405280075820022B6 :04052C0075820122B1 :09053000C0E0E50C450D60067504 :050539000A01E4F50BCE :05053E00C2CFD0E03245 :0D05430090E6C67480F090E6C774EDF0906D :0D055000E6C8E4F090E6C9F090E6CAF0902D :0E055D00E6CBF090E6CC7403F090E6CD74028D :07056B00F090E60CE4F00043 :070572003000FD120B48C22E :030579000080F609 :0C057C00750E0090E678E05410C4540F97 :0A058800FA74504AF5097401550990 :03059200F5082247 :0E05950090E6007410F0758E0090E60174027E :0E05A300F00090E61074A0F00090E61174E0F5 :0E05B100F00090E612E4F00090E613E4F00093 :0E05BF0090E61474E0F00090E615E4F0009071 :0E05CD00E6047480F00090E6047406F00090DE :0E05DB00E604E4F00090E618E4F090E619F073 :0D05E90090E61A740CF090E61BE4F0009010 :0E05F600E68AE4F00090E68DE4F00090E6E284 :0E0604007402F00090E6E37401F00090E6242A :0B0612007402F00090E625E4F00022E6 :0D061D0090E6F574FFF0009010BAE49390A1 :0D062A00E6F3F09010BBE49390E6C3F0906F :0E06370010BCE49390E6C1F09010BDE49390E7 :0E064500E6C2F09010BFE49390E6C0F07A0099 :03065300BA80006A :0E06560050128A037CE4EA90101693FD8B820A :060664008C83F00A80E91E :06066A0090E6C6E4F02258 :0E1016000101010101010107000000000000BE :0E1024000000000000000000000000000000BE :0E1032000000003F0101010101010107000063 :0E1040000000000000000000000000000000A2 :0E104E00000000000000003F38010101010118 :0E105C0001070302020202020200000000006F :0E106A0000000000360000000000003F3801CA :0E10780001010101010703020202020202004F :0E108600000000000000000036000000000026 :02109400003F1B :0E10960000000000000000000000000000004C :0E10A4000000000080ED00000000030200804C :0810B200EE0000000003020043 :0710BA00A0000000AE4E0093 :050FED00E4F516F51704 :0E06700075B0FF75B5FFD280C281C282D28301 :0D067E00C284C285D28775B2BF758200228A :07068B00851682851783220A :0906920075B2FFC283C2807A0731 :0E069B00EA20E71E8AF005F074A43392D274B0 :0306A900A4800327 :0306AC00A2D213C4 :0E06AF00D5F0FAFB139281D282C2821A80DE4D :0606BD00D280C2807A0722 :0E06C300EA20E71E8AF005F074183392D27414 :0306D1001880038B :0306D400A2D2139C :0E06D700D5F0FAFB139281D282C2821A80DE25 :0906E500D28075B2B975820022C1 :0E06EE00AA82AB83C002C0031207AA12077FC4 :0E06FC001208C1E582D003D00260047C0180A8 :01070A006E80 :0C070B00E508601890E679EBF0C002C031 :0E071700031208C1E582D003D00260047C0109 :02072500805200 :0E07270090E679EAF01208C1E58260047C01D8 :02073500804200 :06073700AA18AB197D00B9 :0C073D00C3ED951A502A8A828B83E0FEDF :0E074900A3AA82AB8390E679EEF0C002C00353 :0E075700C0051208ACE582D005D003D00260C8 :05076500047C01800F7F :03076A000D80D02F :0C076D0090E678E04440F012078E7C001B :0607790053B27F8C8222C6 :0A077F0090E6787480F0E509250982 :0507890090E679F0226A :03078E001207AAA5 :0E07910012077F1208AC90E678E04440F012A8 :0B079F0007AA90E678E0FA30E1E822BB :0907AA0090E678E0FA20E6F8225E :0E07B300AA82AB83C002C0031207AA12077FFE :0E07C1001208C1E582D003D0026004758201E7 :0107CF002207 :0C07D000E508601890E679EBF0C002C06C :0E07DC00031208C1E582D003D00260047582CA :0207EA000122EA :0E07EC0090E679EAF01208C1E5826004758299 :0207FA000122DA :0A07FC0090E6787480F0E509250905 :0E080600FA90E67974014AF01208ACE58260BF :050814000475820122C1 :0E08190090E679E01208ACE582600475820179 :0108270022AE :040828007A007B00D7 :09082C00AC1B7D001CBCFF011D8A :0E0835008B067F00C3EE9CEF64808DF063F0B5 :0B0843008095F05025EB251CFCE435EF :0C084E001DFD90E679E08C828D83F0C0E7 :0E085A00031208ACE582D0036004758201220F :050868000B8B0280BFB4 :0E086D0090E6787420F0C0021208ACE582D04C :07087B0002600475820122F6 :09088200EA251CFAE4351DFB9087 :0E088B00E679E08A828B83F01208ACE5826089 :0508990004758201223C :0E089E0090E6787440F090E679E075820022D2 :0E08AC0090E678E0FAFB30E0F7EB30E20475FE :0308BA0082012296 :0408BD00758200221E :0E08C10090E678E0FAFB30E0F7EB30E20475E9 :0308CF0082012281 :0808D200EB20E1047582012214 :0408DA007582002201 :0808DE00E50870047582012297 :0408E600751C4075C8 :0308EA001D187561 :0A08ED001B409000001207B37A00D0 :0308F700BA400004 :0A08FA00500FEA2400F582E43418E0 :07090400F583EAF00A80EC24 :04090B0075180075E6 :03090F001918753F :0A0912001A409000001206EE7A0071 :03091C00BA4000DE :0A091F005011EA2400F582E43418B8 :09092900F583EAF4FBF00A80EA10 :05093200751B40751C5F :0309370000751D2B :08093A00189000001207B390B1 :0B0942001800E0FA30E0047B018006A2 :06094D0063023F0A8A0369 :020953007A0028 :03095500BA4000A5 :0A09580050208A047D0075184075D8 :0309620019188BD6 :0C0965001A8C828D83C002C0031206EEC3 :09097100D003D002EB2AFA80DB6E :03097A008B82224B :0EE0000012010002FFFFFF40C0162F070201B1 :04E00E000102060104 :0AE012000A060002FFFFFF400100B4 :0EE01C0009023200030100C0000904000000E8 :0EE02A00FFFFFF030904010001FFFFFF0407D1 :0EE038000502020002000904020001FFFFFFC2 :08E04600050705860200020037 :0EE04E0012010002FFFFFF40C0162F07020163 :04E05C0001020001BC :0AE060000A060002FFFFFF40010066 :0EE06A0009021200010100C0000904000000BC :04E07800FFFFFF03A4 :01E07C00079C :02E07D008CE035 :02E07F0092E02D :02E08100ACE011 :02E08300DCE0DF :02E08500FEE0BB :02E087001AE19C :02E0890034E180 :06E08C0006030000090478 :0EE092001A0347004E003300530020005000D8 :0CE0A00072006F006A00650063007400ED :0EE0AC003003430055002000410041005500A4 :0EE0BA0020005300690047006500200053005D :0EE0C800450034003100310030004C002D00C6 :06E0D60045004B00330081 :0EE0DC00220343006F006D006D0061006E00B6 :0EE0EA00640020002600200053007400610036 :06E0F800740075007300C6 :0EE0FE001C035400720061006E0073006D0080 :0EE10C0069007400200050006100740068007B :0EE11A001A035200650063006500690076007C :0CE12800650020005000610074006800D9 :0CE134000C0331003000300030003000DF :08097D007880E84400600C7969 :0C09850001901800E4F0A3D8FCD9FAD0CF :0E09910083D082F6D8FDC082C083758200221A :08099F0090E6A0E04401F02203 :0E09A700AA8274805AC423541FFB740F5A9006 :0C09B500E6834BF090E683E04420F02243 :0E09C10090E680E0440AF09000FA120FCF900A :0E09CF00E65D74FFF090E65F74FFF05391EF69 :0809DD0090E680E054F7F022DF :06100D00E478FFF6D8FDB7 :060FF200752200752300CA :0A09E50090E680E0FA30E71975246F :0309EF000075256B :0309F200E0752687 :0309F50012752751 :0309F800E075287F :0309FB001C75293F :0309FE00E0752A77 :030A01006A752BE8 :020A0400E022EE :040A060075244E7590 :030A0A0025E0756F :030A0D00266075EB :030A100027E07567 :030A1300286A75D9 :030A160029E0755F :030A19002A1C751F :030A1C002BE022AA :090A1F005391EF75A100D20032E1 :0C0A2800C021C0E0C0F0C082C083C0024A :0E0A3400C003C004C005C006C007C000C0015A :0E0A4200C0D075D0005391EF75A1001209E5E8 :0E0A5000D0D0D001D000D007D006D005D00401 :0D0A5E00D003D002D083D082D0F0D0E0D001 :020A6B00213236 :0C0A6D00C021C0E0C0F0C082C083C00205 :0E0A7900C003C004C005C006C007C000C00115 :0E0A8700C0D075D0005391EF75A1001209E5A3 :0E0A9500D0D0D001D000D007D006D005D004BC :0D0AA300D003D002D083D082D0F0D0E0D0BC :020AB0002132F1 :050AB2001209E5751EAC :030AB7001F751F89 :080ABA000A758200120E6C7532 :030AC2001E287576 :060AC5001F0A75821012E9 :040ACB000E6C751E1A :030ACF006D751F23 :0C0AD2000A758214120E6C90E65C743100 :020ADE00F02204 :0D0AE000E582547FFA24F75004758200224D :070AED00BA01047582012229 :080AF400530201E4BA00010401 :030AFC00F582225E :0E0AFF00AA82BA010C90E6A1E0FB7C008B827B :030B0D008C8322B4 :0E0B1000BA810C90E6A2E0FB7C008B828C8305 :010B1E0022B4 :0E0B1F0053027FEA700C90E6A0E0FB7C008B96 :040B2D00828C832211 :0E0B310090E6A3E0FB7C00EAC313FA7D00EA25 :090B3F002BFBED3C8B82F58322B7 :0C0B4800C20090E6B8E0FA530260BA0068 :030B5400028028F4 :050B5700BA2002800D30 :050B5C00BA4002800E0A :050B6100BA60028003F0 :030B6600020E017B :060B690012099F020E01BB :0A0B6F001201AFE5826003020E01DF :060B790012099F020E01AB :0D0B7F0090E6B8E0FA530280BA80028003CD :030B8C00020D0255 :0B0B8F0090E6B9E0FABA0003020C8007 :050B9A00BA06028035DF :050B9F00BA0802800805 :050BA400BA0A028017EF :030BA900020CFC3F :0C0BAC0090E740E522F090E68AE4F0902B :080BB800E68B7401F0020E014E :0C0BC00090E740E523F090E68AE4F09016 :080BCC00E68B7401F0020E013A :0A0BD40090E6BBE0FABA01028017B8 :050BDE00BA020280389C :050BE300BA0302805975 :050BE800BA0602801BAB :050BED00BA0702803C84 :030BF200020C7A78 :0A0BF500AA24AB2590E6B3EBF07BD9 :090BFF000090E6B4EAF0020E01D8 :0A0C0800AA26AB2790E6B3EBF07BC1 :090C12000090E6B4EAF0020E01C4 :0A0C1B00AA28AB2990E6B3EBF07BAA :090C25000090E6B4EAF0020E01B1 :0A0C2E00AA2AAB2B90E6B3EBF07B93 :090C38000090E6B4EAF0020E019E :0E0C410090E6BAE0FA90E07CE0FBC3EA9B404C :070C4F000612099F020E01CD :0C0C560090E6BAE075F002A4247DF5825F :0B0C620074E035F0F583E0FAA3E090A9 :0D0C6D00E6B3F07B0090E6B4EAF0020E0161 :060C7A0012099F020E01A9 :0D0C800090E6B8E0FA53021FBA0002800AA5 :050C8D00BA0102801C09 :050C9200BA0264802C91 :0E0C970090E7407401F090E741E4F090E68AA7 :090CA500F090E68B7402F0804E21 :0E0CAE0090E740E4F090E741F090E68AF09085 :070CBC00E68B7402F08039A1 :0E0CC30090E6BCE0F582120AE0E58260249023 :0E0CD100E6BCE0F582120AFFE0FA5302019041 :0E0CDF00E740EAF090E741E4F090E68AF090FA :070CED00E68B7402F08008A1 :050CF40012099F8003BE :030CF90012099F3E :060CFC0012099F020E0127 :0C0D020090E6B9E0FA24F45003020DFE64 :070D0E00EA2A2A900D15737B :070D1500020DFE020D4B026E :060D1C000DC6020DA70246 :060D22000DFE020DFE02B1 :060D28000DFE020DFE02AB :060D2E000DFE020D39026A :050D34000DFE020D425E :090D390090E6BAE0F522020E0179 :090D420090E6BAE0F523020E016F :0D0D4B0090E6B8E0FA53021FBA00028005DE :050D5800BA0247800A09 :0A0D5D0090E6BAE012099F020E01B1 :0D0D670090E6BAE0703090E6BCE0F5821234 :0D0D74000AE0E582602390E6BCE0F5821203 :0E0D81000AFFAA82AB83E0FC5304FE8A828B39 :0E0D8F0083ECF090E6BCE0F5821209A78064C8 :050D9D0012099F805FB8 :050DA20012099F805AB8 :0E0DA70090E6B8E0FA53021FBA004F90E6BA89 :070DB500E0FABA010280051B :050DBC00BA02028040B4 :050DC10012099F803BB8 :0E0DC60090E6BAE0FA702C90E6BCE0F58212DE :0D0DD4000AE0E582601A90E6BCE0F58212AC :0E0DE1000AFFAA82AB83E0FC4304018A828BE6 :050DEF0083ECF0800D13 :050DF40012099F8008B8 :050DF90012099F8003B8 :030DFE0012099F38 :080E010090E6A0E04480F0221D :050E0900AA82BA0300FB :070E0E004005EA249C50019D :010E150022BA :090E1600740F5AFBBB03028007B4 :070E1F00740F5AFBBB0B45E9 :0A0E2600A2AF9202C2AFEA2400F569 :0C0E300082E43400F5837402F07B00744F :0C0E3C00012AFCE43BFDEC2400F582EDF3 :0A0E48003400F583E51FFCF074028E :0C0E52002AFAE43BFBEA2400F582EB34B2 :0A0E5E0000F583AA1E7B00EAF0A253 :030E68000292AF44 :010E6B002264 :080E6C00E582FA248350012203 :060E7400EA5403600122B4 :0A0E7A00A2AF9203C2AFEA2400F514 :0C0E840082E43401F5837402F07B0074FA :0C0E9000012AFCE43BFDEC2400F582ED9F :0A0E9C003401F583E51FF074022A0B :0B0EA600FAE43BFBEA2400F582EB3489 :080EB10001F583AA1EEAF0A27C :040EB9000392AF22CF :050EBD00AA82BA8000CA :070EC2004005EA244B50013A :010EC9002206 :060ECA00EA54036001225E :0A0ED000A2AF9204C2AFEA2480F53D :0C0EDA0082E43400F5837402F07B0074A5 :0C0EE600012AFCE43BFDEC2480F582EDC9 :0A0EF2003400F583E51FF074022AB6 :0B0EFC00FAE43BFBEA2480F582EB34B3 :080F070000F583AA1EEAF0A226 :040F0F000492AF2277 :080F1300C2E8C2EA751E007578 :060F1B001F017582431264 :040F21000E09751E22 :030F250080751FB5 :0C0F280000758253120E090090E650E4A0 :0E0F3400F00090E652E4F00090E654E4F00085 :0E0F420090E656E4F00090E65174FFF0009047 :0E0F5000E65374FFF00090E65574FFF0009039 :0E0F5E00E65774FFF00090E658E4F090E65974 :0E0F6C0074FFF090E65AE4F090E65B74FFF03C :0E0F7A0090E65CE4F090E65D74FFF090E65EB9 :0E0F8800E4F090E65F74FFF00090E660E4F0A5 :0D0F96000090E66174FFF090E662E4F090D8 :0E0FA300E66374FFF090E665E4F090E6687493 :0A0FB1000BF05391AFD2E8D2EA2210 :010FBB002213 :020FBC00AA8207 :060FBE00120FBBDAFB225A :030FC40090FB504F :080FC700A3E582458370F922C5 :040FCF00AA82AB83C4 :080FD300120FC41ABAFF011B42 :050FDB00EA4B70F42256 :0310000075812BCC :0A10030012097DE5826003020FFB75 :00000001FF gnss-sdr-0.0.6/firmware/GN3S_v2/COPYING_GPL.txt0000644000175000017500000004365112576764164020124 0ustar carlescarles GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. gnss-sdr-0.0.6/firmware/GN3S_v2/src/0000755000175000017500000000000012576764164016327 5ustar carlescarlesgnss-sdr-0.0.6/firmware/GN3S_v2/src/tags0000644000175000017500000052512112576764164017216 0ustar carlescarles!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ !_TAG_PROGRAM_VERSION 5.5.4 // AC ../include/fx2regs.h /^ sbit at 0xD0+6 AC;$/;" v ACC ../include/fx2regs.h /^sfr at 0xE0 ACC;$/;" v ALLOCATE_EXTERN ../include/fx2regs.h 41;" d ALLOCATE_EXTERN ../include/radar_rev1_regs.h 31;" d APTR1H ../include/fx2regs.h /^sfr at 0x9A APTR1H;$/;" v APTR1L ../include/fx2regs.h /^sfr at 0x9B APTR1L;$/;" v AUTODAT1 ../include/fx2regs.h /^sfr at 0x9C AUTODAT1; $/;" v AUTODAT2 ../include/fx2regs.h /^sfr at 0x9F AUTODAT2;$/;" v AUTOPTRH1 ../include/fx2regs.h 396;" d AUTOPTRH2 ../include/fx2regs.h /^sfr at 0x9D AUTOPTRH2;$/;" v AUTOPTRL1 ../include/fx2regs.h 397;" d AUTOPTRL2 ../include/fx2regs.h /^sfr at 0x9E AUTOPTRL2; $/;" v AUTOPTRSETUP ../include/fx2regs.h /^sfr at 0xAF AUTOPTRSETUP;$/;" v B ../include/fx2regs.h /^sfr at 0xF0 B;$/;" v BPADDRH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE606) volatile BYTE BPADDRH ; \/\/ Breakpoint Address H$/;" v BPADDRL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE607) volatile BYTE BPADDRL ; \/\/ Breakpoint Address L$/;" v BREAKPT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE605) volatile BYTE BREAKPT ; \/\/ Breakpoint$/;" v BYTE ../include/fx2regs.h /^typedef unsigned char BYTE;$/;" t CC ../lib/Makefile /^CC=sdcc -mmcs51 --no-xinit-opt$/;" m CC ../src/Makefile /^CC=sdcc -mmcs51 --no-xinit-opt$/;" m CKCON ../include/fx2regs.h /^sfr at 0x8E CKCON;$/;" v CLRERRCNT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE665) volatile BYTE CLRERRCNT ; \/\/ Clear Error Counter EC[3..0]$/;" v CPUCS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE600) volatile BYTE CPUCS ; \/\/ Control & Status$/;" v CP_RL2 ../include/fx2regs.h /^ sbit at 0xC8+0 CP_RL2;$/;" v CT1 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6FB) volatile BYTE CT1 ; \/\/ Chirp Test--Override$/;" v CT2 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6FC) volatile BYTE CT2 ; \/\/ Chirp Test--FSM$/;" v CT3 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6FD) volatile BYTE CT3 ; \/\/ Chirp Test--Control Signals$/;" v CT4 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6FE) volatile BYTE CT4 ; \/\/ Chirp Test--Inputs$/;" v CY ../include/fx2regs.h /^ sbit at 0xD0+7 CY;$/;" v C_T2 ../include/fx2regs.h /^ sbit at 0xC8+1 C_T2;$/;" v DBUG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F8) volatile BYTE DBUG ; \/\/ Debug$/;" v DPH ../include/fx2regs.h /^sfr at 0x83 DPH;$/;" v DPH1 ../include/fx2regs.h /^sfr at 0x85 DPH1;$/;" v DPL ../include/fx2regs.h /^sfr at 0x82 DPL;$/;" v DPL1 ../include/fx2regs.h /^sfr at 0x84 DPL1;$/;" v DPS ../include/fx2regs.h /^sfr at 0x86 DPS;$/;" v DT_CONFIG ../include/usb_requests.h 68;" d DT_DEVICE ../include/usb_requests.h 67;" d DT_DEVQUAL ../include/usb_requests.h 72;" d DT_ENDPOINT ../include/usb_requests.h 71;" d DT_INTERFACE ../include/usb_requests.h 70;" d DT_INTERFACE_POWER ../include/usb_requests.h 74;" d DT_OTHER_SPEED ../include/usb_requests.h 73;" d DT_STRING ../include/usb_requests.h 69;" d EA ../include/fx2regs.h /^ sbit at 0xA8+7 EA;$/;" v EI2C ../include/fx2regs.h /^ sbit at 0xE8+1 EI2C;$/;" v EICON ../include/fx2regs.h /^sfr at 0xD8 EICON; \/\/ Was WDCON in DS80C320 EICON; Bit Values differ from Reg320$/;" v EIE ../include/fx2regs.h /^sfr at 0xE8 EIE; \/\/ EIE Bit Values differ from Reg320$/;" v EIEX4 ../include/fx2regs.h /^ sbit at 0xE8+2 EIEX4;$/;" v EIEX5 ../include/fx2regs.h /^ sbit at 0xE8+3 EIEX5;$/;" v EIEX6 ../include/fx2regs.h /^ sbit at 0xE8+4 EIEX6;$/;" v EIP ../include/fx2regs.h /^sfr at 0xF8 EIP; \/\/ EIP Bit Values differ from Reg320$/;" v EIPX4 ../include/fx2regs.h /^ sbit at 0xF8+2 EIPX4;$/;" v EIPX5 ../include/fx2regs.h /^ sbit at 0xF8+3 EIPX5;$/;" v EIPX6 ../include/fx2regs.h /^ sbit at 0xF8+4 EIPX6;$/;" v EIUSB ../include/fx2regs.h /^ sbit at 0xE8+0 EIUSB;$/;" v EP01STAT ../include/fx2regs.h /^sfr at 0xBA EP01STAT;$/;" v EP0BCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE68A) volatile BYTE EP0BCH ; \/\/ Endpoint 0 Byte Count H$/;" v EP0BCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE68B) volatile BYTE EP0BCL ; \/\/ Endpoint 0 Byte Count L$/;" v EP0BUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xE740) volatile BYTE EP0BUF[64] ; \/\/ EP0 IN-OUT buffer$/;" v EP0CS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A0) volatile BYTE EP0CS ; \/\/ Endpoint Control and Status$/;" v EP1INBC ../include/fx2regs.h /^EXTERN xdata _AT_(0xE68F) volatile BYTE EP1INBC ; \/\/ Endpoint 1 IN Byte Count$/;" v EP1INBUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xE7C0) volatile BYTE EP1INBUF[64] ; \/\/ EP1-IN buffer$/;" v EP1INCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE611) volatile BYTE EP1INCFG ; \/\/ Endpoint 1-IN Configuration$/;" v EP1INCS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A2) volatile BYTE EP1INCS ; \/\/ Endpoint 1 IN Control and Status$/;" v EP1OUTBC ../include/fx2regs.h /^EXTERN xdata _AT_(0xE68D) volatile BYTE EP1OUTBC ; \/\/ Endpoint 1 OUT Byte Count$/;" v EP1OUTBUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xE780) volatile BYTE EP1OUTBUF[64] ; \/\/ EP1-OUT buffer$/;" v EP1OUTCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE610) volatile BYTE EP1OUTCFG ; \/\/ Endpoint 1-OUT Configuration$/;" v EP1OUTCS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A1) volatile BYTE EP1OUTCS ; \/\/ Endpoint 1 OUT Control and Status$/;" v EP2468STAT ../include/fx2regs.h /^sfr at 0xAA EP2468STAT;$/;" v EP24FIFOFLGS ../include/fx2regs.h /^sfr at 0xAB EP24FIFOFLGS;$/;" v EP2AUTOINLENH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE620) volatile BYTE EP2AUTOINLENH ; \/\/ Endpoint 2 Packet Length H (IN only)$/;" v EP2AUTOINLENL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE621) volatile BYTE EP2AUTOINLENL ; \/\/ Endpoint 2 Packet Length L (IN only)$/;" v EP2BCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE690) volatile BYTE EP2BCH ; \/\/ Endpoint 2 Byte Count H$/;" v EP2BCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE691) volatile BYTE EP2BCL ; \/\/ Endpoint 2 Byte Count L$/;" v EP2CFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE612) volatile BYTE EP2CFG ; \/\/ Endpoint 2 Configuration$/;" v EP2CS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A3) volatile BYTE EP2CS ; \/\/ Endpoint 2 Control and Status$/;" v EP2FIFOBCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6AB) volatile BYTE EP2FIFOBCH ; \/\/ EP2 FIFO total byte count H$/;" v EP2FIFOBCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6AC) volatile BYTE EP2FIFOBCL ; \/\/ EP2 FIFO total byte count L$/;" v EP2FIFOBUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xF000) volatile BYTE EP2FIFOBUF[1024] ; \/\/ 512\/1024-byte EP2 buffer (IN or OUT)$/;" v EP2FIFOCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE618) volatile BYTE EP2FIFOCFG ; \/\/ Endpoint 2 FIFO configuration$/;" v EP2FIFOFLGS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A7) volatile BYTE EP2FIFOFLGS ; \/\/ Endpoint 2 Flags$/;" v EP2FIFOIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE650) volatile BYTE EP2FIFOIE ; \/\/ Endpoint 2 Flag Interrupt Enable$/;" v EP2FIFOIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE651) volatile BYTE EP2FIFOIRQ ; \/\/ Endpoint 2 Flag Interrupt Request$/;" v EP2FIFOPFH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE630) volatile BYTE EP2FIFOPFH ; \/\/ EP2 Programmable Flag trigger H$/;" v EP2FIFOPFL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE631) volatile BYTE EP2FIFOPFL ; \/\/ EP2 Programmable Flag trigger L$/;" v EP2GPIFFLGSEL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6D2) volatile BYTE EP2GPIFFLGSEL ; \/\/ EP2 GPIF Flag select$/;" v EP2GPIFPFSTOP ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6D3) volatile BYTE EP2GPIFPFSTOP ; \/\/ Stop GPIF EP2 transaction on prog. flag$/;" v EP2GPIFTCH ../include/fx2regs.h 233;" d EP2GPIFTCL ../include/fx2regs.h 234;" d EP2GPIFTRIG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6D4) volatile BYTE EP2GPIFTRIG ; \/\/ EP2 FIFO Trigger$/;" v EP2ISOINPKTS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE640) volatile BYTE EP2ISOINPKTS ; \/\/ EP2 (if ISO) IN Packets per frame (1-3)$/;" v EP4AUTOINLENH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE622) volatile BYTE EP4AUTOINLENH ; \/\/ Endpoint 4 Packet Length H (IN only)$/;" v EP4AUTOINLENL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE623) volatile BYTE EP4AUTOINLENL ; \/\/ Endpoint 4 Packet Length L (IN only)$/;" v EP4BCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE694) volatile BYTE EP4BCH ; \/\/ Endpoint 4 Byte Count H$/;" v EP4BCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE695) volatile BYTE EP4BCL ; \/\/ Endpoint 4 Byte Count L$/;" v EP4CFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE613) volatile BYTE EP4CFG ; \/\/ Endpoint 4 Configuration$/;" v EP4CS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A4) volatile BYTE EP4CS ; \/\/ Endpoint 4 Control and Status$/;" v EP4FIFOBCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6AD) volatile BYTE EP4FIFOBCH ; \/\/ EP4 FIFO total byte count H$/;" v EP4FIFOBCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6AE) volatile BYTE EP4FIFOBCL ; \/\/ EP4 FIFO total byte count L$/;" v EP4FIFOBUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xF400) volatile BYTE EP4FIFOBUF[1024] ; \/\/ 512 byte EP4 buffer (IN or OUT)$/;" v EP4FIFOCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE619) volatile BYTE EP4FIFOCFG ; \/\/ Endpoint 4 FIFO configuration$/;" v EP4FIFOFLGS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A8) volatile BYTE EP4FIFOFLGS ; \/\/ Endpoint 4 Flags$/;" v EP4FIFOIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE652) volatile BYTE EP4FIFOIE ; \/\/ Endpoint 4 Flag Interrupt Enable$/;" v EP4FIFOIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE653) volatile BYTE EP4FIFOIRQ ; \/\/ Endpoint 4 Flag Interrupt Request$/;" v EP4FIFOPFH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE632) volatile BYTE EP4FIFOPFH ; \/\/ EP4 Programmable Flag trigger H$/;" v EP4FIFOPFL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE633) volatile BYTE EP4FIFOPFL ; \/\/ EP4 Programmable Flag trigger L$/;" v EP4GPIFFLGSEL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6DA) volatile BYTE EP4GPIFFLGSEL ; \/\/ EP4 GPIF Flag select$/;" v EP4GPIFPFSTOP ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6DB) volatile BYTE EP4GPIFPFSTOP ; \/\/ Stop GPIF EP4 transaction on prog. flag$/;" v EP4GPIFTCH ../include/fx2regs.h 235;" d EP4GPIFTCL ../include/fx2regs.h 236;" d EP4GPIFTRIG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6DC) volatile BYTE EP4GPIFTRIG ; \/\/ EP4 FIFO Trigger$/;" v EP4ISOINPKTS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE641) volatile BYTE EP4ISOINPKTS ; \/\/ EP4 (if ISO) IN Packets per frame (1-3)$/;" v EP68FIFOFLGS ../include/fx2regs.h /^sfr at 0xAC EP68FIFOFLGS;$/;" v EP6AUTOINLENH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE624) volatile BYTE EP6AUTOINLENH ; \/\/ Endpoint 6 Packet Length H (IN only)$/;" v EP6AUTOINLENL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE625) volatile BYTE EP6AUTOINLENL ; \/\/ Endpoint 6 Packet Length L (IN only)$/;" v EP6BCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE698) volatile BYTE EP6BCH ; \/\/ Endpoint 6 Byte Count H$/;" v EP6BCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE699) volatile BYTE EP6BCL ; \/\/ Endpoint 6 Byte Count L$/;" v EP6CFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE614) volatile BYTE EP6CFG ; \/\/ Endpoint 6 Configuration$/;" v EP6CS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A5) volatile BYTE EP6CS ; \/\/ Endpoint 6 Control and Status$/;" v EP6FIFOBCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6AF) volatile BYTE EP6FIFOBCH ; \/\/ EP6 FIFO total byte count H$/;" v EP6FIFOBCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B0) volatile BYTE EP6FIFOBCL ; \/\/ EP6 FIFO total byte count L$/;" v EP6FIFOBUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xF800) volatile BYTE EP6FIFOBUF[1024] ; \/\/ 512\/1024-byte EP6 buffer (IN or OUT)$/;" v EP6FIFOCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE61A) volatile BYTE EP6FIFOCFG ; \/\/ Endpoint 6 FIFO configuration$/;" v EP6FIFOFLGS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A9) volatile BYTE EP6FIFOFLGS ; \/\/ Endpoint 6 Flags$/;" v EP6FIFOIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE654) volatile BYTE EP6FIFOIE ; \/\/ Endpoint 6 Flag Interrupt Enable$/;" v EP6FIFOIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE655) volatile BYTE EP6FIFOIRQ ; \/\/ Endpoint 6 Flag Interrupt Request$/;" v EP6FIFOPFH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE634) volatile BYTE EP6FIFOPFH ; \/\/ EP6 Programmable Flag trigger H$/;" v EP6FIFOPFL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE635) volatile BYTE EP6FIFOPFL ; \/\/ EP6 Programmable Flag trigger L$/;" v EP6GPIFFLGSEL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6E2) volatile BYTE EP6GPIFFLGSEL ; \/\/ EP6 GPIF Flag select$/;" v EP6GPIFPFSTOP ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6E3) volatile BYTE EP6GPIFPFSTOP ; \/\/ Stop GPIF EP6 transaction on prog. flag$/;" v EP6GPIFTCH ../include/fx2regs.h 237;" d EP6GPIFTCL ../include/fx2regs.h 238;" d EP6GPIFTRIG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6E4) volatile BYTE EP6GPIFTRIG ; \/\/ EP6 FIFO Trigger$/;" v EP6ISOINPKTS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE642) volatile BYTE EP6ISOINPKTS ; \/\/ EP6 (if ISO) IN Packets per frame (1-3)$/;" v EP8AUTOINLENH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE626) volatile BYTE EP8AUTOINLENH ; \/\/ Endpoint 8 Packet Length H (IN only)$/;" v EP8AUTOINLENL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE627) volatile BYTE EP8AUTOINLENL ; \/\/ Endpoint 8 Packet Length L (IN only)$/;" v EP8BCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE69C) volatile BYTE EP8BCH ; \/\/ Endpoint 8 Byte Count H$/;" v EP8BCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE69D) volatile BYTE EP8BCL ; \/\/ Endpoint 8 Byte Count L$/;" v EP8CFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE615) volatile BYTE EP8CFG ; \/\/ Endpoint 8 Configuration$/;" v EP8CS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6A6) volatile BYTE EP8CS ; \/\/ Endpoint 8 Control and Status$/;" v EP8FIFOBCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B1) volatile BYTE EP8FIFOBCH ; \/\/ EP8 FIFO total byte count H$/;" v EP8FIFOBCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B2) volatile BYTE EP8FIFOBCL ; \/\/ EP8 FIFO total byte count L$/;" v EP8FIFOBUF ../include/fx2regs.h /^EXTERN xdata _AT_(0xFC00) volatile BYTE EP8FIFOBUF[1024] ; \/\/ 512 byte EP8 buffer (IN or OUT)$/;" v EP8FIFOCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE61B) volatile BYTE EP8FIFOCFG ; \/\/ Endpoint 8 FIFO configuration$/;" v EP8FIFOFLGS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6AA) volatile BYTE EP8FIFOFLGS ; \/\/ Endpoint 8 Flags$/;" v EP8FIFOIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE656) volatile BYTE EP8FIFOIE ; \/\/ Endpoint 8 Flag Interrupt Enable$/;" v EP8FIFOIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE657) volatile BYTE EP8FIFOIRQ ; \/\/ Endpoint 8 Flag Interrupt Request$/;" v EP8FIFOPFH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE636) volatile BYTE EP8FIFOPFH ; \/\/ EP8 Programmable Flag trigger H$/;" v EP8FIFOPFL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE637) volatile BYTE EP8FIFOPFL ; \/\/ EP8 Programmable Flag trigger L$/;" v EP8GPIFFLGSEL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6EA) volatile BYTE EP8GPIFFLGSEL ; \/\/ EP8 GPIF Flag select$/;" v EP8GPIFPFSTOP ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6EB) volatile BYTE EP8GPIFPFSTOP ; \/\/ Stop GPIF EP8 transaction on prog. flag$/;" v EP8GPIFTCH ../include/fx2regs.h 239;" d EP8GPIFTCL ../include/fx2regs.h 240;" d EP8GPIFTRIG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6EC) volatile BYTE EP8GPIFTRIG ; \/\/ EP8 FIFO Trigger$/;" v EP8ISOINPKTS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE643) volatile BYTE EP8ISOINPKTS ; \/\/ EP8 (if ISO) IN Packets per frame (1-3)$/;" v EPIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE65E) volatile BYTE EPIE ; \/\/ Endpoint Interrupt Enables$/;" v EPIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE65F) volatile BYTE EPIRQ ; \/\/ Endpoint Interrupt Requests$/;" v ERESI ../include/fx2regs.h /^ sbit at 0xD8+5 ERESI;$/;" v ERRCNTLIM ../include/fx2regs.h /^EXTERN xdata _AT_(0xE664) volatile BYTE ERRCNTLIM ; \/\/ USB Error counter and limit$/;" v ES0 ../include/fx2regs.h /^ sbit at 0xA8+4 ES0;$/;" v ES1 ../include/fx2regs.h /^ sbit at 0xA8+6 ES1;$/;" v ET0 ../include/fx2regs.h /^ sbit at 0xA8+1 ET0;$/;" v ET1 ../include/fx2regs.h /^ sbit at 0xA8+3 ET1;$/;" v ET2 ../include/fx2regs.h /^ sbit at 0xA8+5 ET2;$/;" v EX0 ../include/fx2regs.h /^ sbit at 0xA8+0 EX0;$/;" v EX1 ../include/fx2regs.h /^ sbit at 0xA8+2 EX1;$/;" v EXEN2 ../include/fx2regs.h /^ sbit at 0xC8+3 EXEN2;$/;" v EXF2 ../include/fx2regs.h /^ sbit at 0xC8+6 EXF2;$/;" v EXIF ../include/fx2regs.h /^sfr at 0x91 EXIF; \/\/ EXIF Bit Values differ from Reg320$/;" v EXTAUTODAT1 ../include/fx2regs.h 167;" d EXTAUTODAT2 ../include/fx2regs.h 168;" d EXTERN ../include/fx2regs.h 305;" d EXTERN ../include/fx2regs.h 65;" d EXTERN ../include/fx2regs.h 68;" d EXTERN ../include/radar_rev1_regs.h 34;" d EXTERN ../include/radar_rev1_regs.h 37;" d F0 ../include/fx2regs.h /^ sbit at 0xD0+5 F0;$/;" v FALSE ../include/usrp_common.h 63;" d FGV_EP2EF ../include/isr.h 113;" d FGV_EP2FF ../include/isr.h 117;" d FGV_EP2PF ../include/isr.h 109;" d FGV_EP4EF ../include/isr.h 114;" d FGV_EP4FF ../include/isr.h 118;" d FGV_EP4PF ../include/isr.h 110;" d FGV_EP6EF ../include/isr.h 115;" d FGV_EP6FF ../include/isr.h 119;" d FGV_EP6PF ../include/isr.h 111;" d FGV_EP8EF ../include/isr.h 116;" d FGV_EP8FF ../include/isr.h 120;" d FGV_EP8PF ../include/isr.h 112;" d FGV_GPIFDONE ../include/isr.h 121;" d FGV_GPIFWF ../include/isr.h 122;" d FGV_MAX ../include/isr.h 125;" d FGV_MIN ../include/isr.h 124;" d FIFOPINPOLAR ../include/fx2regs.h /^EXTERN xdata _AT_(0xE609) volatile BYTE FIFOPINPOLAR ; \/\/ FIFO polarities$/;" v FIFORESET ../include/fx2regs.h /^EXTERN xdata _AT_(0xE604) volatile BYTE FIFORESET ; \/\/ Restore FIFOS to default state$/;" v FL ../include/fx2regs.h /^ sbit at 0xD0+1 FL;$/;" v FLOWEQ0CTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C8) volatile BYTE FLOWEQ0CTL ; \/\/CTL states during active flow state$/;" v FLOWEQ1CTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C9) volatile BYTE FLOWEQ1CTL ; \/\/CTL states during hold flow state$/;" v FLOWHOLDOFF ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6CA) volatile BYTE FLOWHOLDOFF ;$/;" v FLOWLOGIC ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C7) volatile BYTE FLOWLOGIC ; \/\/Defines flow\/hold decision criteria$/;" v FLOWSTATE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C6) volatile BYTE FLOWSTATE ; \/\/Defines GPIF flow state$/;" v FLOWSTB ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6CB) volatile BYTE FLOWSTB ; \/\/CTL\/RDY Signal to use as master data strobe $/;" v FLOWSTBEDGE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6CC) volatile BYTE FLOWSTBEDGE ; \/\/Defines active master strobe edge$/;" v FLOWSTBHPERIOD ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6CD) volatile BYTE FLOWSTBHPERIOD ; \/\/Half Period of output master strobe$/;" v FL_BEGIN ../include/usrp_commands.h 60;" d FL_END ../include/usrp_commands.h 62;" d FL_XFER ../include/usrp_commands.h 61;" d FNADDR ../include/fx2regs.h /^EXTERN xdata _AT_(0xE687) volatile BYTE FNADDR ; \/\/ USB Function address$/;" v FS_DEV_REMOTE_WAKEUP ../include/usb_requests.h 79;" d FS_ENDPOINT_HALT ../include/usb_requests.h 78;" d FS_TEST_MODE ../include/usb_requests.h 80;" d FX2REGS_H ../include/fx2regs.h 39;" d FlowStates ../src/gpif.c /^const char xdata FlowStates[36] = $/;" v FlowStates ../src/gpif2.c /^const char xdata FlowStates[36] = $/;" v FlowStates ../src/radar_gpif.c /^const char FlowStates[36] =$/;" v FlowStates ../src/radar_gpif2.c /^const char FlowStates[36] =$/;" v GPIFABORT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F5) volatile BYTE GPIFABORT ; \/\/ Abort GPIF cycles$/;" v GPIFADRH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C4) volatile BYTE GPIFADRH ; \/\/ GPIF Address H$/;" v GPIFADRL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C5) volatile BYTE GPIFADRL ; \/\/ GPIF Address L$/;" v GPIFCTLCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C3) volatile BYTE GPIFCTLCFG ; \/\/ CTL OUT pin drive$/;" v GPIFHOLDAMOUNT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE60C) volatile BYTE GPIFHOLDAMOUNT ; \/\/Data delay shift $/;" v GPIFIDLECS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C1) volatile BYTE GPIFIDLECS ; \/\/ GPIF Done, GPIF IDLE drive mode$/;" v GPIFIDLECTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C2) volatile BYTE GPIFIDLECTL ; \/\/ Inactive Bus, CTL states$/;" v GPIFIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE660) volatile BYTE GPIFIE ; \/\/ GPIF Interrupt Enable$/;" v GPIFIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE661) volatile BYTE GPIFIRQ ; \/\/ GPIF Interrupt Request$/;" v GPIFREADYCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F3) volatile BYTE GPIFREADYCFG ; \/\/ Internal RDY,Sync\/Async, RDY5CFG$/;" v GPIFREADYSTAT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F4) volatile BYTE GPIFREADYSTAT ; \/\/ RDY pin states$/;" v GPIFSGLDATH ../include/fx2regs.h /^sfr at 0xBD GPIFSGLDATH;$/;" v GPIFSGLDATLNOX ../include/fx2regs.h /^sfr at 0xBF GPIFSGLDATLNOX;$/;" v GPIFSGLDATLX ../include/fx2regs.h /^sfr at 0xBE GPIFSGLDATLX;$/;" v GPIFTCB0 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6D1) volatile BYTE GPIFTCB0 ; \/\/ GPIF Transaction Count Byte 0$/;" v GPIFTCB1 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6D0) volatile BYTE GPIFTCB1 ; \/\/ GPIF Transaction Count Byte 1$/;" v GPIFTCB2 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6CF) volatile BYTE GPIFTCB2 ; \/\/ GPIF Transaction Count Byte 2$/;" v GPIFTCB3 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6CE) volatile BYTE GPIFTCB3 ; \/\/ GPIF Transaction Count Byte 3$/;" v GPIFTRIG ../include/fx2regs.h /^sfr at 0xBB GPIFTRIG;$/;" v GPIFWFSELECT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6C0) volatile BYTE GPIFWFSELECT ; \/\/ Waveform Selector$/;" v GPIF_WAVE_DATA ../include/fx2regs.h /^EXTERN xdata _AT_(0xE400) volatile BYTE GPIF_WAVE_DATA[128];$/;" v GS_RX_OVERRUN ../include/usrp_commands.h 46;" d GS_TX_UNDERRUN ../include/usrp_commands.h 45;" d GpifInit ../src/gpif.c /^void GpifInit( void )$/;" f GpifInit ../src/gpif2.c /^void GpifInit( void )$/;" f I2CS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE678) volatile BYTE I2CS ; \/\/ Control & Status$/;" v I2CTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE67A) volatile BYTE I2CTL ; \/\/ I2C Control$/;" v I2DAT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE679) volatile BYTE I2DAT ; \/\/ Data$/;" v IBNIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE658) volatile BYTE IBNIE ; \/\/ IN-BULK-NAK Interrupt Enable$/;" v IBNIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE659) volatile BYTE IBNIRQ ; \/\/ IN-BULK-NAK interrupt Request$/;" v IE ../include/fx2regs.h /^sfr at 0xA8 IE;$/;" v IE0 ../include/fx2regs.h /^ sbit at 0x88+1 IE0;$/;" v IE1 ../include/fx2regs.h /^ sbit at 0x88+3 IE1;$/;" v IFCONFIG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE601) volatile BYTE IFCONFIG ; \/\/ Interface Configuration$/;" v INCLUDES ../lib/Makefile /^INCLUDES=-I..\/include\/$/;" m INCLUDES ../src/Makefile /^INCLUDES=-I..\/include\/$/;" m INPKTEND ../include/fx2regs.h /^EXTERN xdata _AT_(0xE648) volatile BYTE INPKTEND ; \/\/ Force IN Packet End$/;" v INT2CLR ../include/fx2regs.h /^sfr at 0xA1 INT2CLR;$/;" v INT2IVEC ../include/fx2regs.h /^EXTERN xdata _AT_(0xE666) volatile BYTE INT2IVEC ; \/\/ Interupt 2 (USB) Autovector$/;" v INT4CLR ../include/fx2regs.h /^sfr at 0xA2 INT4CLR;$/;" v INT4IVEC ../include/fx2regs.h /^EXTERN xdata _AT_(0xE667) volatile BYTE INT4IVEC ; \/\/ Interupt 4 (FIFOS & GPIF) Autovector$/;" v INT6 ../include/fx2regs.h /^ sbit at 0xD8+3 INT6;$/;" v INTSETUP ../include/fx2regs.h /^EXTERN xdata _AT_(0xE668) volatile BYTE INTSETUP ; \/\/ Interrupt 2&4 Setup$/;" v IOA ../include/fx2regs.h /^sfr at 0x80 IOA;$/;" v IOB ../include/fx2regs.h /^sfr at 0x90 IOB;$/;" v IOC ../include/fx2regs.h /^sfr at 0xA0 IOC;$/;" v IOD ../include/fx2regs.h /^sfr at 0xB0 IOD;$/;" v IOE ../include/fx2regs.h /^sfr at 0xB1 IOE;$/;" v IP ../include/fx2regs.h /^sfr at 0xB8 IP;$/;" v IT0 ../include/fx2regs.h /^ sbit at 0x88+0 IT0;$/;" v IT1 ../include/fx2regs.h /^ sbit at 0x88+2 IT1;$/;" v InitData ../src/gpif.c /^const char xdata InitData[7] = $/;" v InitData ../src/gpif2.c /^const char xdata InitData[7] = $/;" v InitData ../src/radar_gpif.c /^const char InitData[7] =$/;" v InitData ../src/radar_gpif2.c /^const char InitData[7] =$/;" v LED0_OFF ../include/radar_rev1_regs.h /^xdata _AT_(0x8100) volatile unsigned char LED0_OFF;$/;" v LED0_ON ../include/radar_rev1_regs.h /^xdata _AT_(0x8000) volatile unsigned char LED0_ON;$/;" v LED1_OFF ../include/radar_rev1_regs.h /^xdata _AT_(0x9100) volatile unsigned char LED1_OFF;$/;" v LED1_ON ../include/radar_rev1_regs.h /^xdata _AT_(0x9000) volatile unsigned char LED1_ON;$/;" v LED2_OFF ../include/radar_rev1_regs.h /^xdata _AT_(0xA100) volatile unsigned char LED2_OFF;$/;" v LED2_ON ../include/radar_rev1_regs.h /^xdata _AT_(0xA000) volatile unsigned char LED2_ON;$/;" v LED3_OFF ../include/radar_rev1_regs.h /^xdata _AT_(0xB100) volatile unsigned char LED3_OFF;$/;" v LED3_ON ../include/radar_rev1_regs.h /^xdata _AT_(0xB000) volatile unsigned char LED3_ON;$/;" v LJMP_OPCODE ../lib/isr.c 31;" d file: LSB ../lib/usb_common.c 49;" d file: MAX_EP0_PKTSIZE ../include/usrp_commands.h 25;" d MICROFRAME ../include/fx2regs.h /^EXTERN xdata _AT_(0xE686) volatile BYTE MICROFRAME ; \/\/ Microframe count, 0-7$/;" v MPAGE ../include/fx2regs.h /^sfr at 0x92 MPAGE;$/;" v MSB ../lib/usb_common.c 48;" d file: NAKIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE65A) volatile BYTE NAKIE ; \/\/ Endpoint Ping NAK interrupt Enable$/;" v NAKIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE65B) volatile BYTE NAKIRQ ; \/\/ Endpoint Ping NAK interrupt Request$/;" v NOP ../include/syncdelay.h 62;" d OEA ../include/fx2regs.h /^sfr at 0xB2 OEA;$/;" v OEB ../include/fx2regs.h /^sfr at 0xB3 OEB;$/;" v OEC ../include/fx2regs.h /^sfr at 0xB4 OEC;$/;" v OED ../include/fx2regs.h /^sfr at 0xB5 OED;$/;" v OEE ../include/fx2regs.h /^sfr at 0xB6 OEE;$/;" v OUTPKTEND ../include/fx2regs.h /^EXTERN xdata _AT_(0xE649) volatile BYTE OUTPKTEND ; \/\/ Force OUT Packet End$/;" v OV ../include/fx2regs.h /^ sbit at 0xD0+2 OV;$/;" v P ../include/fx2regs.h /^ sbit at 0xD0+0 P;$/;" v PCON ../include/fx2regs.h /^sfr at 0x87 PCON; \/* PCON *\/$/;" v PI2C ../include/fx2regs.h /^ sbit at 0xF8+1 PI2C;$/;" v PINFLAGSAB ../include/fx2regs.h /^EXTERN xdata _AT_(0xE602) volatile BYTE PINFLAGSAB ; \/\/ FIFO FLAGA and FLAGB Assignments$/;" v PINFLAGSCD ../include/fx2regs.h /^EXTERN xdata _AT_(0xE603) volatile BYTE PINFLAGSCD ; \/\/ FIFO FLAGC and FLAGD Assignments$/;" v PORTACFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE670) volatile BYTE PORTACFG ; \/\/ I\/O PORTA Alternate Configuration$/;" v PORTCCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE671) volatile BYTE PORTCCFG ; \/\/ I\/O PORTC Alternate Configuration$/;" v PORTECFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE672) volatile BYTE PORTECFG ; \/\/ I\/O PORTE Alternate Configuration$/;" v PS0 ../include/fx2regs.h /^ sbit at 0xB8+4 PS0;$/;" v PS1 ../include/fx2regs.h /^ sbit at 0xB8+6 PS1;$/;" v PSW ../include/fx2regs.h /^sfr at 0xD0 PSW;$/;" v PT0 ../include/fx2regs.h /^ sbit at 0xB8+1 PT0;$/;" v PT1 ../include/fx2regs.h /^ sbit at 0xB8+3 PT1;$/;" v PT2 ../include/fx2regs.h /^ sbit at 0xB8+5 PT2;$/;" v PUSB ../include/fx2regs.h /^ sbit at 0xF8+0 PUSB;$/;" v PX0 ../include/fx2regs.h /^ sbit at 0xB8+0 PX0;$/;" v PX1 ../include/fx2regs.h /^ sbit at 0xB8+2 PX1;$/;" v RB8 ../include/fx2regs.h /^ sbit at 0x98+2 RB8;$/;" v RB81 ../include/fx2regs.h /^ sbit at 0xC0+2 RB81;$/;" v RCAP2H ../include/fx2regs.h /^sfr at 0xCB RCAP2H;$/;" v RCAP2L ../include/fx2regs.h /^sfr at 0xCA RCAP2L;$/;" v RCLK ../include/fx2regs.h /^ sbit at 0xC8+5 RCLK;$/;" v RELOAD_VALUE ../lib/timer.c 36;" d file: REN ../include/fx2regs.h /^ sbit at 0x98+4 REN;$/;" v REN1 ../include/fx2regs.h /^ sbit at 0xC0+4 REN1;$/;" v RESI ../include/fx2regs.h /^ sbit at 0xD8+4 RESI;$/;" v RES_WAVEDATA_END ../include/fx2regs.h /^EXTERN xdata _AT_(0xE480) volatile BYTE RES_WAVEDATA_END ;$/;" v REVCTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE60B) volatile BYTE REVCTL ; \/\/ Chip Revision Control$/;" v REVID ../include/fx2regs.h /^EXTERN xdata _AT_(0xE60A) volatile BYTE REVID ; \/\/ Chip Revision$/;" v RI ../include/fx2regs.h /^ sbit at 0x98+0 RI;$/;" v RI1 ../include/fx2regs.h /^ sbit at 0xC0+0 RI1;$/;" v RQ_CLEAR_FEATURE ../include/usb_requests.h 52;" d RQ_GET_CONFIG ../include/usb_requests.h 59;" d RQ_GET_DESCR ../include/usb_requests.h 57;" d RQ_GET_INTERFACE ../include/usb_requests.h 61;" d RQ_GET_STATUS ../include/usb_requests.h 51;" d RQ_RESERVED_2 ../include/usb_requests.h 53;" d RQ_RESERVED_4 ../include/usb_requests.h 55;" d RQ_SET_ADDRESS ../include/usb_requests.h 56;" d RQ_SET_CONFIG ../include/usb_requests.h 60;" d RQ_SET_DESCR ../include/usb_requests.h 58;" d RQ_SET_FEATURE ../include/usb_requests.h 54;" d RQ_SET_INTERFACE ../include/usb_requests.h 62;" d RQ_SYNCH_FRAME ../include/usb_requests.h 63;" d RS0 ../include/fx2regs.h /^ sbit at 0xD0+3 RS0;$/;" v RS1 ../include/fx2regs.h /^ sbit at 0xD0+4 RS1;$/;" v SBUF0 ../include/fx2regs.h /^sfr at 0x99 SBUF0;$/;" v SBUF1 ../include/fx2regs.h /^sfr at 0xC1 SBUF1;$/;" v SCON0 ../include/fx2regs.h /^sfr at 0x98 SCON0;$/;" v SCON1 ../include/fx2regs.h /^sfr at 0xC0 SCON1;$/;" v SEL ../include/fx2regs.h /^ sbit at 0x86+0 SEL;$/;" v SETUPDAT ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B8) volatile BYTE SETUPDAT[8] ; \/\/ 8 bytes of SETUP data$/;" v SLEEP_ADC0 ../include/usrp_commands.h 73;" d SLEEP_ADC1 ../include/usrp_commands.h 74;" d SLEEP_DAC0 ../include/usrp_commands.h 75;" d SLEEP_DAC1 ../include/usrp_commands.h 76;" d SM0 ../include/fx2regs.h /^ sbit at 0x98+7 SM0;$/;" v SM01 ../include/fx2regs.h /^ sbit at 0xC0+7 SM01;$/;" v SM1 ../include/fx2regs.h /^ sbit at 0x98+6 SM1;$/;" v SM11 ../include/fx2regs.h /^ sbit at 0xC0+6 SM11;$/;" v SM2 ../include/fx2regs.h /^ sbit at 0x98+5 SM2;$/;" v SM21 ../include/fx2regs.h /^ sbit at 0xC0+5 SM21;$/;" v SMOD1 ../include/fx2regs.h /^ sbit at 0xD8+7 SMOD1;$/;" v SP ../include/fx2regs.h /^sfr at 0x81 SP;$/;" v SUDPTRCTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B5) volatile BYTE SUDPTRCTL ; \/\/ Setup Data Pointer Auto Mode$/;" v SUDPTRH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B3) volatile BYTE SUDPTRH ; \/\/ Setup Data Pointer high address byte$/;" v SUDPTRL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6B4) volatile BYTE SUDPTRL ; \/\/ Setup Data Pointer low address byte$/;" v SUSPEND ../include/fx2regs.h /^EXTERN xdata _AT_(0xE681) volatile BYTE SUSPEND ; \/\/ Put chip into suspend$/;" v SV_I2C ../include/isr.h 57;" d SV_INT_0 ../include/isr.h 48;" d SV_INT_1 ../include/isr.h 50;" d SV_INT_2 ../include/isr.h 56;" d SV_INT_4 ../include/isr.h 58;" d SV_INT_5 ../include/isr.h 59;" d SV_INT_6 ../include/isr.h 60;" d SV_MAX ../include/isr.h 63;" d SV_MIN ../include/isr.h 62;" d SV_RESUME ../include/isr.h 54;" d SV_SERIAL_0 ../include/isr.h 52;" d SV_SERIAL_1 ../include/isr.h 55;" d SV_TIMER_0 ../include/isr.h 49;" d SV_TIMER_1 ../include/isr.h 51;" d SV_TIMER_2 ../include/isr.h 53;" d SYNCDELAY ../include/syncdelay.h 61;" d T2CON ../include/fx2regs.h /^sfr at 0xC8 T2CON;$/;" v TB8 ../include/fx2regs.h /^ sbit at 0x98+3 TB8;$/;" v TB81 ../include/fx2regs.h /^ sbit at 0xC0+3 TB81;$/;" v TCLK ../include/fx2regs.h /^ sbit at 0xC8+4 TCLK;$/;" v TCON ../include/fx2regs.h /^sfr at 0x88 TCON;$/;" v TESTCFG ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F9) volatile BYTE TESTCFG ; \/\/ Test configuration$/;" v TF0 ../include/fx2regs.h /^ sbit at 0x88+5 TF0;$/;" v TF1 ../include/fx2regs.h /^ sbit at 0x88+7 TF1;$/;" v TF2 ../include/fx2regs.h /^ sbit at 0xC8+7 TF2;$/;" v TH0 ../include/fx2regs.h /^sfr at 0x8C TH0;$/;" v TH1 ../include/fx2regs.h /^sfr at 0x8D TH1;$/;" v TH2 ../include/fx2regs.h /^sfr at 0xCD TH2;$/;" v TI ../include/fx2regs.h /^ sbit at 0x98+1 TI;$/;" v TI1 ../include/fx2regs.h /^ sbit at 0xC0+1 TI1;$/;" v TL0 ../include/fx2regs.h /^sfr at 0x8A TL0;$/;" v TL1 ../include/fx2regs.h /^sfr at 0x8B TL1;$/;" v TL2 ../include/fx2regs.h /^sfr at 0xCC TL2;$/;" v TMOD ../include/fx2regs.h /^sfr at 0x89 TMOD;$/;" v TOGCTL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE683) volatile BYTE TOGCTL ; \/\/ Toggle Control$/;" v TR0 ../include/fx2regs.h /^ sbit at 0x88+4 TR0;$/;" v TR1 ../include/fx2regs.h /^ sbit at 0x88+6 TR1;$/;" v TR2 ../include/fx2regs.h /^ sbit at 0xC8+2 TR2;$/;" v TRUE ../include/usrp_common.h 62;" d UART230 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE608) volatile BYTE UART230 ; \/\/ 230 Kbaud clock for T0,T1,T2$/;" v UDMACRCH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE67D) volatile BYTE UDMACRCH ; \/\/CRC Upper byte$/;" v UDMACRCL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE67E) volatile BYTE UDMACRCL ; \/\/CRC Lower byte$/;" v UDMACRCQUAL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE67F) volatile BYTE UDMACRCQUAL ; \/\/UDMA In only, host terminated use only$/;" v USBCS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE680) volatile BYTE USBCS ; \/\/ USB Control & Status$/;" v USBDESCSEG ../src/Makefile /^ $(CC) $(INCLUDES) --code-loc 0x0000 --code-size 0x1800 --xram-loc 0x1800 --xram-size 0x0800 -Wl '-b USBDESCSEG = 0xE000' -L ..\/lib libfx2.lib -o radar_firmware.ihx vectors.rel radar_main.rel usrp_common.rel init_gpif.rel radar_gpif2.rel usb_descriptors.rel _startup.rel$/;" m USBERRIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE662) volatile BYTE USBERRIE ; \/\/ USB Error Interrupt Enables$/;" v USBERRIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE663) volatile BYTE USBERRIRQ ; \/\/ USB Error Interrupt Requests$/;" v USBFRAMEH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE684) volatile BYTE USBFRAMEH ; \/\/ USB Frame count H$/;" v USBFRAMEL ../include/fx2regs.h /^EXTERN xdata _AT_(0xE685) volatile BYTE USBFRAMEL ; \/\/ USB Frame count L$/;" v USBIE ../include/fx2regs.h /^EXTERN xdata _AT_(0xE65C) volatile BYTE USBIE ; \/\/ USB Int Enables$/;" v USBIRQ ../include/fx2regs.h /^EXTERN xdata _AT_(0xE65D) volatile BYTE USBIRQ ; \/\/ USB Interrupt Requests$/;" v USBTEST ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6FA) volatile BYTE USBTEST ; \/\/ USB Test Modes$/;" v USRP_HASH_SLOT_0_ADDR ../include/usrp_commands.h 92;" d USRP_HASH_SLOT_1_ADDR ../include/usrp_commands.h 93;" d USRP_LED_REG ../include/radar_rev1_regs.h 74;" d UV_EP0ACK ../include/isr.h 75;" d UV_EP0IN ../include/isr.h 77;" d UV_EP0OUT ../include/isr.h 78;" d UV_EP0PINGNAK ../include/isr.h 87;" d UV_EP1IN ../include/isr.h 79;" d UV_EP1OUT ../include/isr.h 80;" d UV_EP1PINGNAK ../include/isr.h 88;" d UV_EP2 ../include/isr.h 81;" d UV_EP2ISOERR ../include/isr.h 97;" d UV_EP2PINGNAK ../include/isr.h 89;" d UV_EP4 ../include/isr.h 82;" d UV_EP4ISOERR ../include/isr.h 98;" d UV_EP4PINGNAK ../include/isr.h 90;" d UV_EP6 ../include/isr.h 83;" d UV_EP6ISOERR ../include/isr.h 99;" d UV_EP6PINGNAK ../include/isr.h 91;" d UV_EP8 ../include/isr.h 84;" d UV_EP8ISOERR ../include/isr.h 100;" d UV_EP8PINGNAK ../include/isr.h 92;" d UV_ERRLIMIT ../include/isr.h 93;" d UV_HIGHSPEED ../include/isr.h 74;" d UV_IBN ../include/isr.h 85;" d UV_MAX ../include/isr.h 103;" d UV_MIN ../include/isr.h 102;" d UV_SOF ../include/isr.h 70;" d UV_SPARE_1C ../include/isr.h 76;" d UV_SPARE_44 ../include/isr.h 86;" d UV_SPARE_64 ../include/isr.h 94;" d UV_SPARE_68 ../include/isr.h 95;" d UV_SPARE_6C ../include/isr.h 96;" d UV_SUDAV ../include/isr.h 69;" d UV_SUSPEND ../include/isr.h 72;" d UV_SUTOK ../include/isr.h 71;" d UV_USBRESET ../include/isr.h 73;" d VRQ_FPGA_LOAD ../include/usrp_commands.h 59;" d VRQ_FPGA_SET_RESET ../include/usrp_commands.h 66;" d VRQ_FPGA_SET_RX_ENABLE ../include/usrp_commands.h 68;" d VRQ_FPGA_SET_RX_RESET ../include/usrp_commands.h 86;" d VRQ_FPGA_SET_TX_ENABLE ../include/usrp_commands.h 67;" d VRQ_FPGA_SET_TX_RESET ../include/usrp_commands.h 85;" d VRQ_FPGA_WRITE_REG ../include/usrp_commands.h 65;" d VRQ_GET_STATUS ../include/usrp_commands.h 44;" d VRQ_I2C_READ ../include/usrp_commands.h 48;" d VRQ_I2C_WRITE ../include/usrp_commands.h 78;" d VRQ_SET_LED ../include/usrp_commands.h 57;" d VRQ_SET_SLEEP_BITS ../include/usrp_commands.h 71;" d VRQ_SPI_READ ../include/usrp_commands.h 50;" d VRQ_SPI_WRITE ../include/usrp_commands.h 80;" d VRT_VENDOR_IN ../include/usrp_commands.h 31;" d VRT_VENDOR_OUT ../include/usrp_commands.h 32;" d WAKEUPCS ../include/fx2regs.h /^EXTERN xdata _AT_(0xE682) volatile BYTE WAKEUPCS ; \/\/ Wakeup source and polarity$/;" v WORD ../include/fx2regs.h /^typedef unsigned short WORD;$/;" t WaveData ../src/gpif.c /^const char xdata WaveData[128] = $/;" v WaveData ../src/gpif2.c /^const char xdata WaveData[128] = $/;" v WaveData ../src/radar_gpif.c /^const char WaveData[128] =$/;" v WaveData ../src/radar_gpif2.c /^const char WaveData[128] =$/;" v XAUTODAT1 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE67B) volatile BYTE XAUTODAT1 ; \/\/ Autoptr1 MOVX access$/;" v XAUTODAT2 ../include/fx2regs.h /^EXTERN xdata _AT_(0xE67C) volatile BYTE XAUTODAT2 ; \/\/ Autoptr2 MOVX access$/;" v XGPIFSGLDATH ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F0) volatile BYTE XGPIFSGLDATH ; \/\/ GPIF Data H (16-bit mode only)$/;" v XGPIFSGLDATLNOX ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F2) volatile BYTE XGPIFSGLDATLNOX ; \/\/ Read GPIF Data L, no transac trigger$/;" v XGPIFSGLDATLX ../include/fx2regs.h /^EXTERN xdata _AT_(0xE6F1) volatile BYTE XGPIFSGLDATLX ; \/\/ Read\/Write GPIF Data L & trigger transac$/;" v _AC ../lib/fx2utils.asm /^_AC = 0x00d6$/;" d _AC ../lib/isr.asm /^_AC = 0x00d6$/;" d _AC ../lib/timer.asm /^_AC = 0x00d6$/;" d _AC ../lib/usb_common.asm /^_AC = 0x00d6$/;" d _AC ../src/init_gpif.asm /^_AC = 0x00d6$/;" d _AC ../src/radar_main.asm /^_AC = 0x00d6$/;" d _AC ../src/usrp_common.asm /^_AC = 0x00d6$/;" d _ACC ../lib/fx2utils.asm /^_ACC = 0x00e0$/;" d _ACC ../lib/isr.asm /^_ACC = 0x00e0$/;" d _ACC ../lib/timer.asm /^_ACC = 0x00e0$/;" d _ACC ../lib/usb_common.asm /^_ACC = 0x00e0$/;" d _ACC ../src/init_gpif.asm /^_ACC = 0x00e0$/;" d _ACC ../src/radar_main.asm /^_ACC = 0x00e0$/;" d _ACC ../src/usrp_common.asm /^_ACC = 0x00e0$/;" d _APTR1H ../lib/fx2utils.asm /^_APTR1H = 0x009a$/;" d _APTR1H ../lib/isr.asm /^_APTR1H = 0x009a$/;" d _APTR1H ../lib/timer.asm /^_APTR1H = 0x009a$/;" d _APTR1H ../lib/usb_common.asm /^_APTR1H = 0x009a$/;" d _APTR1H ../src/init_gpif.asm /^_APTR1H = 0x009a$/;" d _APTR1H ../src/radar_main.asm /^_APTR1H = 0x009a$/;" d _APTR1H ../src/usrp_common.asm /^_APTR1H = 0x009a$/;" d _APTR1L ../lib/fx2utils.asm /^_APTR1L = 0x009b$/;" d _APTR1L ../lib/isr.asm /^_APTR1L = 0x009b$/;" d _APTR1L ../lib/timer.asm /^_APTR1L = 0x009b$/;" d _APTR1L ../lib/usb_common.asm /^_APTR1L = 0x009b$/;" d _APTR1L ../src/init_gpif.asm /^_APTR1L = 0x009b$/;" d _APTR1L ../src/radar_main.asm /^_APTR1L = 0x009b$/;" d _APTR1L ../src/usrp_common.asm /^_APTR1L = 0x009b$/;" d _AT_ ../include/fx2regs.h 306;" d _AT_ ../include/fx2regs.h 66;" d _AT_ ../include/fx2regs.h 69;" d _AT_ ../include/radar_rev1_regs.h 35;" d _AT_ ../include/radar_rev1_regs.h 38;" d _AUTODAT1 ../lib/fx2utils.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT1 ../lib/isr.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT1 ../lib/timer.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT1 ../lib/usb_common.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT1 ../src/init_gpif.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT1 ../src/radar_main.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT1 ../src/usrp_common.asm /^_AUTODAT1 = 0x009c$/;" d _AUTODAT2 ../lib/fx2utils.asm /^_AUTODAT2 = 0x009f$/;" d _AUTODAT2 ../lib/isr.asm /^_AUTODAT2 = 0x009f$/;" d _AUTODAT2 ../lib/timer.asm /^_AUTODAT2 = 0x009f$/;" d _AUTODAT2 ../lib/usb_common.asm /^_AUTODAT2 = 0x009f$/;" d _AUTODAT2 ../src/init_gpif.asm /^_AUTODAT2 = 0x009f$/;" d _AUTODAT2 ../src/radar_main.asm /^_AUTODAT2 = 0x009f$/;" d _AUTODAT2 ../src/usrp_common.asm /^_AUTODAT2 = 0x009f$/;" d _AUTOPTRH2 ../lib/fx2utils.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRH2 ../lib/isr.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRH2 ../lib/timer.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRH2 ../lib/usb_common.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRH2 ../src/init_gpif.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRH2 ../src/radar_main.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRH2 ../src/usrp_common.asm /^_AUTOPTRH2 = 0x009d$/;" d _AUTOPTRL2 ../lib/fx2utils.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRL2 ../lib/isr.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRL2 ../lib/timer.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRL2 ../lib/usb_common.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRL2 ../src/init_gpif.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRL2 ../src/radar_main.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRL2 ../src/usrp_common.asm /^_AUTOPTRL2 = 0x009e$/;" d _AUTOPTRSETUP ../lib/fx2utils.asm /^_AUTOPTRSETUP = 0x00af$/;" d _AUTOPTRSETUP ../lib/isr.asm /^_AUTOPTRSETUP = 0x00af$/;" d _AUTOPTRSETUP ../lib/timer.asm /^_AUTOPTRSETUP = 0x00af$/;" d _AUTOPTRSETUP ../lib/usb_common.asm /^_AUTOPTRSETUP = 0x00af$/;" d _AUTOPTRSETUP ../src/init_gpif.asm /^_AUTOPTRSETUP = 0x00af$/;" d _AUTOPTRSETUP ../src/radar_main.asm /^_AUTOPTRSETUP = 0x00af$/;" d _AUTOPTRSETUP ../src/usrp_common.asm /^_AUTOPTRSETUP = 0x00af$/;" d _B ../lib/fx2utils.asm /^_B = 0x00f0$/;" d _B ../lib/isr.asm /^_B = 0x00f0$/;" d _B ../lib/timer.asm /^_B = 0x00f0$/;" d _B ../lib/usb_common.asm /^_B = 0x00f0$/;" d _B ../src/init_gpif.asm /^_B = 0x00f0$/;" d _B ../src/radar_main.asm /^_B = 0x00f0$/;" d _B ../src/usrp_common.asm /^_B = 0x00f0$/;" d _BPADDRH ../lib/fx2utils.asm /^_BPADDRH = 0xe606$/;" d _BPADDRH ../lib/isr.asm /^_BPADDRH = 0xe606$/;" d _BPADDRH ../lib/timer.asm /^_BPADDRH = 0xe606$/;" d _BPADDRH ../lib/usb_common.asm /^_BPADDRH = 0xe606$/;" d _BPADDRH ../src/init_gpif.asm /^_BPADDRH = 0xe606$/;" d _BPADDRH ../src/radar_main.asm /^_BPADDRH = 0xe606$/;" d _BPADDRH ../src/usrp_common.asm /^_BPADDRH = 0xe606$/;" d _BPADDRL ../lib/fx2utils.asm /^_BPADDRL = 0xe607$/;" d _BPADDRL ../lib/isr.asm /^_BPADDRL = 0xe607$/;" d _BPADDRL ../lib/timer.asm /^_BPADDRL = 0xe607$/;" d _BPADDRL ../lib/usb_common.asm /^_BPADDRL = 0xe607$/;" d _BPADDRL ../src/init_gpif.asm /^_BPADDRL = 0xe607$/;" d _BPADDRL ../src/radar_main.asm /^_BPADDRL = 0xe607$/;" d _BPADDRL ../src/usrp_common.asm /^_BPADDRL = 0xe607$/;" d _BREAKPT ../lib/fx2utils.asm /^_BREAKPT = 0xe605$/;" d _BREAKPT ../lib/isr.asm /^_BREAKPT = 0xe605$/;" d _BREAKPT ../lib/timer.asm /^_BREAKPT = 0xe605$/;" d _BREAKPT ../lib/usb_common.asm /^_BREAKPT = 0xe605$/;" d _BREAKPT ../src/init_gpif.asm /^_BREAKPT = 0xe605$/;" d _BREAKPT ../src/radar_main.asm /^_BREAKPT = 0xe605$/;" d _BREAKPT ../src/usrp_common.asm /^_BREAKPT = 0xe605$/;" d _CKCON ../lib/fx2utils.asm /^_CKCON = 0x008e$/;" d _CKCON ../lib/isr.asm /^_CKCON = 0x008e$/;" d _CKCON ../lib/timer.asm /^_CKCON = 0x008e$/;" d _CKCON ../lib/usb_common.asm /^_CKCON = 0x008e$/;" d _CKCON ../src/init_gpif.asm /^_CKCON = 0x008e$/;" d _CKCON ../src/radar_main.asm /^_CKCON = 0x008e$/;" d _CKCON ../src/usrp_common.asm /^_CKCON = 0x008e$/;" d _CLRERRCNT ../lib/fx2utils.asm /^_CLRERRCNT = 0xe665$/;" d _CLRERRCNT ../lib/isr.asm /^_CLRERRCNT = 0xe665$/;" d _CLRERRCNT ../lib/timer.asm /^_CLRERRCNT = 0xe665$/;" d _CLRERRCNT ../lib/usb_common.asm /^_CLRERRCNT = 0xe665$/;" d _CLRERRCNT ../src/init_gpif.asm /^_CLRERRCNT = 0xe665$/;" d _CLRERRCNT ../src/radar_main.asm /^_CLRERRCNT = 0xe665$/;" d _CLRERRCNT ../src/usrp_common.asm /^_CLRERRCNT = 0xe665$/;" d _CPUCS ../lib/fx2utils.asm /^_CPUCS = 0xe600$/;" d _CPUCS ../lib/isr.asm /^_CPUCS = 0xe600$/;" d _CPUCS ../lib/timer.asm /^_CPUCS = 0xe600$/;" d _CPUCS ../lib/usb_common.asm /^_CPUCS = 0xe600$/;" d _CPUCS ../src/init_gpif.asm /^_CPUCS = 0xe600$/;" d _CPUCS ../src/radar_main.asm /^_CPUCS = 0xe600$/;" d _CPUCS ../src/usrp_common.asm /^_CPUCS = 0xe600$/;" d _CP_RL2 ../lib/fx2utils.asm /^_CP_RL2 = 0x00c8$/;" d _CP_RL2 ../lib/isr.asm /^_CP_RL2 = 0x00c8$/;" d _CP_RL2 ../lib/timer.asm /^_CP_RL2 = 0x00c8$/;" d _CP_RL2 ../lib/usb_common.asm /^_CP_RL2 = 0x00c8$/;" d _CP_RL2 ../src/init_gpif.asm /^_CP_RL2 = 0x00c8$/;" d _CP_RL2 ../src/radar_main.asm /^_CP_RL2 = 0x00c8$/;" d _CP_RL2 ../src/usrp_common.asm /^_CP_RL2 = 0x00c8$/;" d _CT1 ../lib/fx2utils.asm /^_CT1 = 0xe6fb$/;" d _CT1 ../lib/isr.asm /^_CT1 = 0xe6fb$/;" d _CT1 ../lib/timer.asm /^_CT1 = 0xe6fb$/;" d _CT1 ../lib/usb_common.asm /^_CT1 = 0xe6fb$/;" d _CT1 ../src/init_gpif.asm /^_CT1 = 0xe6fb$/;" d _CT1 ../src/radar_main.asm /^_CT1 = 0xe6fb$/;" d _CT1 ../src/usrp_common.asm /^_CT1 = 0xe6fb$/;" d _CT2 ../lib/fx2utils.asm /^_CT2 = 0xe6fc$/;" d _CT2 ../lib/isr.asm /^_CT2 = 0xe6fc$/;" d _CT2 ../lib/timer.asm /^_CT2 = 0xe6fc$/;" d _CT2 ../lib/usb_common.asm /^_CT2 = 0xe6fc$/;" d _CT2 ../src/init_gpif.asm /^_CT2 = 0xe6fc$/;" d _CT2 ../src/radar_main.asm /^_CT2 = 0xe6fc$/;" d _CT2 ../src/usrp_common.asm /^_CT2 = 0xe6fc$/;" d _CT3 ../lib/fx2utils.asm /^_CT3 = 0xe6fd$/;" d _CT3 ../lib/isr.asm /^_CT3 = 0xe6fd$/;" d _CT3 ../lib/timer.asm /^_CT3 = 0xe6fd$/;" d _CT3 ../lib/usb_common.asm /^_CT3 = 0xe6fd$/;" d _CT3 ../src/init_gpif.asm /^_CT3 = 0xe6fd$/;" d _CT3 ../src/radar_main.asm /^_CT3 = 0xe6fd$/;" d _CT3 ../src/usrp_common.asm /^_CT3 = 0xe6fd$/;" d _CT4 ../lib/fx2utils.asm /^_CT4 = 0xe6fe$/;" d _CT4 ../lib/isr.asm /^_CT4 = 0xe6fe$/;" d _CT4 ../lib/timer.asm /^_CT4 = 0xe6fe$/;" d _CT4 ../lib/usb_common.asm /^_CT4 = 0xe6fe$/;" d _CT4 ../src/init_gpif.asm /^_CT4 = 0xe6fe$/;" d _CT4 ../src/radar_main.asm /^_CT4 = 0xe6fe$/;" d _CT4 ../src/usrp_common.asm /^_CT4 = 0xe6fe$/;" d _CY ../lib/fx2utils.asm /^_CY = 0x00d7$/;" d _CY ../lib/isr.asm /^_CY = 0x00d7$/;" d _CY ../lib/timer.asm /^_CY = 0x00d7$/;" d _CY ../lib/usb_common.asm /^_CY = 0x00d7$/;" d _CY ../src/init_gpif.asm /^_CY = 0x00d7$/;" d _CY ../src/radar_main.asm /^_CY = 0x00d7$/;" d _CY ../src/usrp_common.asm /^_CY = 0x00d7$/;" d _C_T2 ../lib/fx2utils.asm /^_C_T2 = 0x00c9$/;" d _C_T2 ../lib/isr.asm /^_C_T2 = 0x00c9$/;" d _C_T2 ../lib/timer.asm /^_C_T2 = 0x00c9$/;" d _C_T2 ../lib/usb_common.asm /^_C_T2 = 0x00c9$/;" d _C_T2 ../src/init_gpif.asm /^_C_T2 = 0x00c9$/;" d _C_T2 ../src/radar_main.asm /^_C_T2 = 0x00c9$/;" d _C_T2 ../src/usrp_common.asm /^_C_T2 = 0x00c9$/;" d _DBUG ../lib/fx2utils.asm /^_DBUG = 0xe6f8$/;" d _DBUG ../lib/isr.asm /^_DBUG = 0xe6f8$/;" d _DBUG ../lib/timer.asm /^_DBUG = 0xe6f8$/;" d _DBUG ../lib/usb_common.asm /^_DBUG = 0xe6f8$/;" d _DBUG ../src/init_gpif.asm /^_DBUG = 0xe6f8$/;" d _DBUG ../src/radar_main.asm /^_DBUG = 0xe6f8$/;" d _DBUG ../src/usrp_common.asm /^_DBUG = 0xe6f8$/;" d _DELAY_H_ ../include/delay.h 24;" d _DPH ../lib/fx2utils.asm /^_DPH = 0x0083$/;" d _DPH ../lib/isr.asm /^_DPH = 0x0083$/;" d _DPH ../lib/timer.asm /^_DPH = 0x0083$/;" d _DPH ../lib/usb_common.asm /^_DPH = 0x0083$/;" d _DPH ../src/init_gpif.asm /^_DPH = 0x0083$/;" d _DPH ../src/radar_main.asm /^_DPH = 0x0083$/;" d _DPH ../src/usrp_common.asm /^_DPH = 0x0083$/;" d _DPH1 ../lib/fx2utils.asm /^_DPH1 = 0x0085$/;" d _DPH1 ../lib/isr.asm /^_DPH1 = 0x0085$/;" d _DPH1 ../lib/timer.asm /^_DPH1 = 0x0085$/;" d _DPH1 ../lib/usb_common.asm /^_DPH1 = 0x0085$/;" d _DPH1 ../src/init_gpif.asm /^_DPH1 = 0x0085$/;" d _DPH1 ../src/radar_main.asm /^_DPH1 = 0x0085$/;" d _DPH1 ../src/usrp_common.asm /^_DPH1 = 0x0085$/;" d _DPL ../lib/fx2utils.asm /^_DPL = 0x0082$/;" d _DPL ../lib/isr.asm /^_DPL = 0x0082$/;" d _DPL ../lib/timer.asm /^_DPL = 0x0082$/;" d _DPL ../lib/usb_common.asm /^_DPL = 0x0082$/;" d _DPL ../src/init_gpif.asm /^_DPL = 0x0082$/;" d _DPL ../src/radar_main.asm /^_DPL = 0x0082$/;" d _DPL ../src/usrp_common.asm /^_DPL = 0x0082$/;" d _DPL1 ../lib/fx2utils.asm /^_DPL1 = 0x0084$/;" d _DPL1 ../lib/isr.asm /^_DPL1 = 0x0084$/;" d _DPL1 ../lib/timer.asm /^_DPL1 = 0x0084$/;" d _DPL1 ../lib/usb_common.asm /^_DPL1 = 0x0084$/;" d _DPL1 ../src/init_gpif.asm /^_DPL1 = 0x0084$/;" d _DPL1 ../src/radar_main.asm /^_DPL1 = 0x0084$/;" d _DPL1 ../src/usrp_common.asm /^_DPL1 = 0x0084$/;" d _DPS ../lib/fx2utils.asm /^_DPS = 0x0086$/;" d _DPS ../lib/isr.asm /^_DPS = 0x0086$/;" d _DPS ../lib/timer.asm /^_DPS = 0x0086$/;" d _DPS ../lib/usb_common.asm /^_DPS = 0x0086$/;" d _DPS ../src/init_gpif.asm /^_DPS = 0x0086$/;" d _DPS ../src/radar_main.asm /^_DPS = 0x0086$/;" d _DPS ../src/usrp_common.asm /^_DPS = 0x0086$/;" d _EA ../lib/fx2utils.asm /^_EA = 0x00af$/;" d _EA ../lib/isr.asm /^_EA = 0x00af$/;" d _EA ../lib/timer.asm /^_EA = 0x00af$/;" d _EA ../lib/usb_common.asm /^_EA = 0x00af$/;" d _EA ../src/init_gpif.asm /^_EA = 0x00af$/;" d _EA ../src/radar_main.asm /^_EA = 0x00af$/;" d _EA ../src/usrp_common.asm /^_EA = 0x00af$/;" d _EI2C ../lib/fx2utils.asm /^_EI2C = 0x00e9$/;" d _EI2C ../lib/isr.asm /^_EI2C = 0x00e9$/;" d _EI2C ../lib/timer.asm /^_EI2C = 0x00e9$/;" d _EI2C ../lib/usb_common.asm /^_EI2C = 0x00e9$/;" d _EI2C ../src/init_gpif.asm /^_EI2C = 0x00e9$/;" d _EI2C ../src/radar_main.asm /^_EI2C = 0x00e9$/;" d _EI2C ../src/usrp_common.asm /^_EI2C = 0x00e9$/;" d _EICON ../lib/fx2utils.asm /^_EICON = 0x00d8$/;" d _EICON ../lib/isr.asm /^_EICON = 0x00d8$/;" d _EICON ../lib/timer.asm /^_EICON = 0x00d8$/;" d _EICON ../lib/usb_common.asm /^_EICON = 0x00d8$/;" d _EICON ../src/init_gpif.asm /^_EICON = 0x00d8$/;" d _EICON ../src/radar_main.asm /^_EICON = 0x00d8$/;" d _EICON ../src/usrp_common.asm /^_EICON = 0x00d8$/;" d _EIE ../lib/fx2utils.asm /^_EIE = 0x00e8$/;" d _EIE ../lib/isr.asm /^_EIE = 0x00e8$/;" d _EIE ../lib/timer.asm /^_EIE = 0x00e8$/;" d _EIE ../lib/usb_common.asm /^_EIE = 0x00e8$/;" d _EIE ../src/init_gpif.asm /^_EIE = 0x00e8$/;" d _EIE ../src/radar_main.asm /^_EIE = 0x00e8$/;" d _EIE ../src/usrp_common.asm /^_EIE = 0x00e8$/;" d _EIEX4 ../lib/fx2utils.asm /^_EIEX4 = 0x00ea$/;" d _EIEX4 ../lib/isr.asm /^_EIEX4 = 0x00ea$/;" d _EIEX4 ../lib/timer.asm /^_EIEX4 = 0x00ea$/;" d _EIEX4 ../lib/usb_common.asm /^_EIEX4 = 0x00ea$/;" d _EIEX4 ../src/init_gpif.asm /^_EIEX4 = 0x00ea$/;" d _EIEX4 ../src/radar_main.asm /^_EIEX4 = 0x00ea$/;" d _EIEX4 ../src/usrp_common.asm /^_EIEX4 = 0x00ea$/;" d _EIEX5 ../lib/fx2utils.asm /^_EIEX5 = 0x00eb$/;" d _EIEX5 ../lib/isr.asm /^_EIEX5 = 0x00eb$/;" d _EIEX5 ../lib/timer.asm /^_EIEX5 = 0x00eb$/;" d _EIEX5 ../lib/usb_common.asm /^_EIEX5 = 0x00eb$/;" d _EIEX5 ../src/init_gpif.asm /^_EIEX5 = 0x00eb$/;" d _EIEX5 ../src/radar_main.asm /^_EIEX5 = 0x00eb$/;" d _EIEX5 ../src/usrp_common.asm /^_EIEX5 = 0x00eb$/;" d _EIEX6 ../lib/fx2utils.asm /^_EIEX6 = 0x00ec$/;" d _EIEX6 ../lib/isr.asm /^_EIEX6 = 0x00ec$/;" d _EIEX6 ../lib/timer.asm /^_EIEX6 = 0x00ec$/;" d _EIEX6 ../lib/usb_common.asm /^_EIEX6 = 0x00ec$/;" d _EIEX6 ../src/init_gpif.asm /^_EIEX6 = 0x00ec$/;" d _EIEX6 ../src/radar_main.asm /^_EIEX6 = 0x00ec$/;" d _EIEX6 ../src/usrp_common.asm /^_EIEX6 = 0x00ec$/;" d _EIP ../lib/fx2utils.asm /^_EIP = 0x00f8$/;" d _EIP ../lib/isr.asm /^_EIP = 0x00f8$/;" d _EIP ../lib/timer.asm /^_EIP = 0x00f8$/;" d _EIP ../lib/usb_common.asm /^_EIP = 0x00f8$/;" d _EIP ../src/init_gpif.asm /^_EIP = 0x00f8$/;" d _EIP ../src/radar_main.asm /^_EIP = 0x00f8$/;" d _EIP ../src/usrp_common.asm /^_EIP = 0x00f8$/;" d _EIPX4 ../lib/fx2utils.asm /^_EIPX4 = 0x00fa$/;" d _EIPX4 ../lib/isr.asm /^_EIPX4 = 0x00fa$/;" d _EIPX4 ../lib/timer.asm /^_EIPX4 = 0x00fa$/;" d _EIPX4 ../lib/usb_common.asm /^_EIPX4 = 0x00fa$/;" d _EIPX4 ../src/init_gpif.asm /^_EIPX4 = 0x00fa$/;" d _EIPX4 ../src/radar_main.asm /^_EIPX4 = 0x00fa$/;" d _EIPX4 ../src/usrp_common.asm /^_EIPX4 = 0x00fa$/;" d _EIPX5 ../lib/fx2utils.asm /^_EIPX5 = 0x00fb$/;" d _EIPX5 ../lib/isr.asm /^_EIPX5 = 0x00fb$/;" d _EIPX5 ../lib/timer.asm /^_EIPX5 = 0x00fb$/;" d _EIPX5 ../lib/usb_common.asm /^_EIPX5 = 0x00fb$/;" d _EIPX5 ../src/init_gpif.asm /^_EIPX5 = 0x00fb$/;" d _EIPX5 ../src/radar_main.asm /^_EIPX5 = 0x00fb$/;" d _EIPX5 ../src/usrp_common.asm /^_EIPX5 = 0x00fb$/;" d _EIPX6 ../lib/fx2utils.asm /^_EIPX6 = 0x00fc$/;" d _EIPX6 ../lib/isr.asm /^_EIPX6 = 0x00fc$/;" d _EIPX6 ../lib/timer.asm /^_EIPX6 = 0x00fc$/;" d _EIPX6 ../lib/usb_common.asm /^_EIPX6 = 0x00fc$/;" d _EIPX6 ../src/init_gpif.asm /^_EIPX6 = 0x00fc$/;" d _EIPX6 ../src/radar_main.asm /^_EIPX6 = 0x00fc$/;" d _EIPX6 ../src/usrp_common.asm /^_EIPX6 = 0x00fc$/;" d _EIUSB ../lib/fx2utils.asm /^_EIUSB = 0x00e8$/;" d _EIUSB ../lib/isr.asm /^_EIUSB = 0x00e8$/;" d _EIUSB ../lib/timer.asm /^_EIUSB = 0x00e8$/;" d _EIUSB ../lib/usb_common.asm /^_EIUSB = 0x00e8$/;" d _EIUSB ../src/init_gpif.asm /^_EIUSB = 0x00e8$/;" d _EIUSB ../src/radar_main.asm /^_EIUSB = 0x00e8$/;" d _EIUSB ../src/usrp_common.asm /^_EIUSB = 0x00e8$/;" d _EP01STAT ../lib/fx2utils.asm /^_EP01STAT = 0x00ba$/;" d _EP01STAT ../lib/isr.asm /^_EP01STAT = 0x00ba$/;" d _EP01STAT ../lib/timer.asm /^_EP01STAT = 0x00ba$/;" d _EP01STAT ../lib/usb_common.asm /^_EP01STAT = 0x00ba$/;" d _EP01STAT ../src/init_gpif.asm /^_EP01STAT = 0x00ba$/;" d _EP01STAT ../src/radar_main.asm /^_EP01STAT = 0x00ba$/;" d _EP01STAT ../src/usrp_common.asm /^_EP01STAT = 0x00ba$/;" d _EP0BCH ../lib/fx2utils.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCH ../lib/isr.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCH ../lib/timer.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCH ../lib/usb_common.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCH ../src/init_gpif.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCH ../src/radar_main.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCH ../src/usrp_common.asm /^_EP0BCH = 0xe68a$/;" d _EP0BCL ../lib/fx2utils.asm /^_EP0BCL = 0xe68b$/;" d _EP0BCL ../lib/isr.asm /^_EP0BCL = 0xe68b$/;" d _EP0BCL ../lib/timer.asm /^_EP0BCL = 0xe68b$/;" d _EP0BCL ../lib/usb_common.asm /^_EP0BCL = 0xe68b$/;" d _EP0BCL ../src/init_gpif.asm /^_EP0BCL = 0xe68b$/;" d _EP0BCL ../src/radar_main.asm /^_EP0BCL = 0xe68b$/;" d _EP0BCL ../src/usrp_common.asm /^_EP0BCL = 0xe68b$/;" d _EP0BUF ../lib/fx2utils.asm /^_EP0BUF = 0xe740$/;" d _EP0BUF ../lib/isr.asm /^_EP0BUF = 0xe740$/;" d _EP0BUF ../lib/timer.asm /^_EP0BUF = 0xe740$/;" d _EP0BUF ../lib/usb_common.asm /^_EP0BUF = 0xe740$/;" d _EP0BUF ../src/init_gpif.asm /^_EP0BUF = 0xe740$/;" d _EP0BUF ../src/radar_main.asm /^_EP0BUF = 0xe740$/;" d _EP0BUF ../src/usrp_common.asm /^_EP0BUF = 0xe740$/;" d _EP0CS ../lib/fx2utils.asm /^_EP0CS = 0xe6a0$/;" d _EP0CS ../lib/isr.asm /^_EP0CS = 0xe6a0$/;" d _EP0CS ../lib/timer.asm /^_EP0CS = 0xe6a0$/;" d _EP0CS ../lib/usb_common.asm /^_EP0CS = 0xe6a0$/;" d _EP0CS ../src/init_gpif.asm /^_EP0CS = 0xe6a0$/;" d _EP0CS ../src/radar_main.asm /^_EP0CS = 0xe6a0$/;" d _EP0CS ../src/usrp_common.asm /^_EP0CS = 0xe6a0$/;" d _EP1INBC ../lib/fx2utils.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBC ../lib/isr.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBC ../lib/timer.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBC ../lib/usb_common.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBC ../src/init_gpif.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBC ../src/radar_main.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBC ../src/usrp_common.asm /^_EP1INBC = 0xe68f$/;" d _EP1INBUF ../lib/fx2utils.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INBUF ../lib/isr.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INBUF ../lib/timer.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INBUF ../lib/usb_common.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INBUF ../src/init_gpif.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INBUF ../src/radar_main.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INBUF ../src/usrp_common.asm /^_EP1INBUF = 0xe7c0$/;" d _EP1INCFG ../lib/fx2utils.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCFG ../lib/isr.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCFG ../lib/timer.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCFG ../lib/usb_common.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCFG ../src/init_gpif.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCFG ../src/radar_main.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCFG ../src/usrp_common.asm /^_EP1INCFG = 0xe611$/;" d _EP1INCS ../lib/fx2utils.asm /^_EP1INCS = 0xe6a2$/;" d _EP1INCS ../lib/isr.asm /^_EP1INCS = 0xe6a2$/;" d _EP1INCS ../lib/timer.asm /^_EP1INCS = 0xe6a2$/;" d _EP1INCS ../lib/usb_common.asm /^_EP1INCS = 0xe6a2$/;" d _EP1INCS ../src/init_gpif.asm /^_EP1INCS = 0xe6a2$/;" d _EP1INCS ../src/radar_main.asm /^_EP1INCS = 0xe6a2$/;" d _EP1INCS ../src/usrp_common.asm /^_EP1INCS = 0xe6a2$/;" d _EP1OUTBC ../lib/fx2utils.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBC ../lib/isr.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBC ../lib/timer.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBC ../lib/usb_common.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBC ../src/init_gpif.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBC ../src/radar_main.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBC ../src/usrp_common.asm /^_EP1OUTBC = 0xe68d$/;" d _EP1OUTBUF ../lib/fx2utils.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTBUF ../lib/isr.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTBUF ../lib/timer.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTBUF ../lib/usb_common.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTBUF ../src/init_gpif.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTBUF ../src/radar_main.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTBUF ../src/usrp_common.asm /^_EP1OUTBUF = 0xe780$/;" d _EP1OUTCFG ../lib/fx2utils.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCFG ../lib/isr.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCFG ../lib/timer.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCFG ../lib/usb_common.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCFG ../src/init_gpif.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCFG ../src/radar_main.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCFG ../src/usrp_common.asm /^_EP1OUTCFG = 0xe610$/;" d _EP1OUTCS ../lib/fx2utils.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP1OUTCS ../lib/isr.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP1OUTCS ../lib/timer.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP1OUTCS ../lib/usb_common.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP1OUTCS ../src/init_gpif.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP1OUTCS ../src/radar_main.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP1OUTCS ../src/usrp_common.asm /^_EP1OUTCS = 0xe6a1$/;" d _EP2468STAT ../lib/fx2utils.asm /^_EP2468STAT = 0x00aa$/;" d _EP2468STAT ../lib/isr.asm /^_EP2468STAT = 0x00aa$/;" d _EP2468STAT ../lib/timer.asm /^_EP2468STAT = 0x00aa$/;" d _EP2468STAT ../lib/usb_common.asm /^_EP2468STAT = 0x00aa$/;" d _EP2468STAT ../src/init_gpif.asm /^_EP2468STAT = 0x00aa$/;" d _EP2468STAT ../src/radar_main.asm /^_EP2468STAT = 0x00aa$/;" d _EP2468STAT ../src/usrp_common.asm /^_EP2468STAT = 0x00aa$/;" d _EP24FIFOFLGS ../lib/fx2utils.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP24FIFOFLGS ../lib/isr.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP24FIFOFLGS ../lib/timer.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP24FIFOFLGS ../lib/usb_common.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP24FIFOFLGS ../src/init_gpif.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP24FIFOFLGS ../src/radar_main.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP24FIFOFLGS ../src/usrp_common.asm /^_EP24FIFOFLGS = 0x00ab$/;" d _EP2AUTOINLENH ../lib/fx2utils.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENH ../lib/isr.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENH ../lib/timer.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENH ../lib/usb_common.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENH ../src/init_gpif.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENH ../src/radar_main.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENH ../src/usrp_common.asm /^_EP2AUTOINLENH = 0xe620$/;" d _EP2AUTOINLENL ../lib/fx2utils.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2AUTOINLENL ../lib/isr.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2AUTOINLENL ../lib/timer.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2AUTOINLENL ../lib/usb_common.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2AUTOINLENL ../src/init_gpif.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2AUTOINLENL ../src/radar_main.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2AUTOINLENL ../src/usrp_common.asm /^_EP2AUTOINLENL = 0xe621$/;" d _EP2BCH ../lib/fx2utils.asm /^_EP2BCH = 0xe690$/;" d _EP2BCH ../lib/isr.asm /^_EP2BCH = 0xe690$/;" d _EP2BCH ../lib/timer.asm /^_EP2BCH = 0xe690$/;" d _EP2BCH ../lib/usb_common.asm /^_EP2BCH = 0xe690$/;" d _EP2BCH ../src/init_gpif.asm /^_EP2BCH = 0xe690$/;" d _EP2BCH ../src/radar_main.asm /^_EP2BCH = 0xe690$/;" d _EP2BCH ../src/usrp_common.asm /^_EP2BCH = 0xe690$/;" d _EP2BCL ../lib/fx2utils.asm /^_EP2BCL = 0xe691$/;" d _EP2BCL ../lib/isr.asm /^_EP2BCL = 0xe691$/;" d _EP2BCL ../lib/timer.asm /^_EP2BCL = 0xe691$/;" d _EP2BCL ../lib/usb_common.asm /^_EP2BCL = 0xe691$/;" d _EP2BCL ../src/init_gpif.asm /^_EP2BCL = 0xe691$/;" d _EP2BCL ../src/radar_main.asm /^_EP2BCL = 0xe691$/;" d _EP2BCL ../src/usrp_common.asm /^_EP2BCL = 0xe691$/;" d _EP2CFG ../lib/fx2utils.asm /^_EP2CFG = 0xe612$/;" d _EP2CFG ../lib/isr.asm /^_EP2CFG = 0xe612$/;" d _EP2CFG ../lib/timer.asm /^_EP2CFG = 0xe612$/;" d _EP2CFG ../lib/usb_common.asm /^_EP2CFG = 0xe612$/;" d _EP2CFG ../src/init_gpif.asm /^_EP2CFG = 0xe612$/;" d _EP2CFG ../src/radar_main.asm /^_EP2CFG = 0xe612$/;" d _EP2CFG ../src/usrp_common.asm /^_EP2CFG = 0xe612$/;" d _EP2CS ../lib/fx2utils.asm /^_EP2CS = 0xe6a3$/;" d _EP2CS ../lib/isr.asm /^_EP2CS = 0xe6a3$/;" d _EP2CS ../lib/timer.asm /^_EP2CS = 0xe6a3$/;" d _EP2CS ../lib/usb_common.asm /^_EP2CS = 0xe6a3$/;" d _EP2CS ../src/init_gpif.asm /^_EP2CS = 0xe6a3$/;" d _EP2CS ../src/radar_main.asm /^_EP2CS = 0xe6a3$/;" d _EP2CS ../src/usrp_common.asm /^_EP2CS = 0xe6a3$/;" d _EP2FIFOBCH ../lib/fx2utils.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCH ../lib/isr.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCH ../lib/timer.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCH ../lib/usb_common.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCH ../src/init_gpif.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCH ../src/radar_main.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCH ../src/usrp_common.asm /^_EP2FIFOBCH = 0xe6ab$/;" d _EP2FIFOBCL ../lib/fx2utils.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBCL ../lib/isr.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBCL ../lib/timer.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBCL ../lib/usb_common.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBCL ../src/init_gpif.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBCL ../src/radar_main.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBCL ../src/usrp_common.asm /^_EP2FIFOBCL = 0xe6ac$/;" d _EP2FIFOBUF ../lib/fx2utils.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOBUF ../lib/isr.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOBUF ../lib/timer.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOBUF ../lib/usb_common.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOBUF ../src/init_gpif.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOBUF ../src/radar_main.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOBUF ../src/usrp_common.asm /^_EP2FIFOBUF = 0xf000$/;" d _EP2FIFOCFG ../lib/fx2utils.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOCFG ../lib/isr.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOCFG ../lib/timer.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOCFG ../lib/usb_common.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOCFG ../src/init_gpif.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOCFG ../src/radar_main.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOCFG ../src/usrp_common.asm /^_EP2FIFOCFG = 0xe618$/;" d _EP2FIFOFLGS ../lib/fx2utils.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOFLGS ../lib/isr.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOFLGS ../lib/timer.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOFLGS ../lib/usb_common.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOFLGS ../src/init_gpif.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOFLGS ../src/radar_main.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOFLGS ../src/usrp_common.asm /^_EP2FIFOFLGS = 0xe6a7$/;" d _EP2FIFOIE ../lib/fx2utils.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIE ../lib/isr.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIE ../lib/timer.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIE ../lib/usb_common.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIE ../src/init_gpif.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIE ../src/radar_main.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIE ../src/usrp_common.asm /^_EP2FIFOIE = 0xe650$/;" d _EP2FIFOIRQ ../lib/fx2utils.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOIRQ ../lib/isr.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOIRQ ../lib/timer.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOIRQ ../lib/usb_common.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOIRQ ../src/init_gpif.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOIRQ ../src/radar_main.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOIRQ ../src/usrp_common.asm /^_EP2FIFOIRQ = 0xe651$/;" d _EP2FIFOPFH ../lib/fx2utils.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFH ../lib/isr.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFH ../lib/timer.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFH ../lib/usb_common.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFH ../src/init_gpif.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFH ../src/radar_main.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFH ../src/usrp_common.asm /^_EP2FIFOPFH = 0xe630$/;" d _EP2FIFOPFL ../lib/fx2utils.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2FIFOPFL ../lib/isr.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2FIFOPFL ../lib/timer.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2FIFOPFL ../lib/usb_common.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2FIFOPFL ../src/init_gpif.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2FIFOPFL ../src/radar_main.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2FIFOPFL ../src/usrp_common.asm /^_EP2FIFOPFL = 0xe631$/;" d _EP2GPIFFLGSEL ../lib/fx2utils.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFFLGSEL ../lib/isr.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFFLGSEL ../lib/timer.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFFLGSEL ../lib/usb_common.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFFLGSEL ../src/init_gpif.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFFLGSEL ../src/radar_main.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFFLGSEL ../src/usrp_common.asm /^_EP2GPIFFLGSEL = 0xe6d2$/;" d _EP2GPIFPFSTOP ../lib/fx2utils.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFPFSTOP ../lib/isr.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFPFSTOP ../lib/timer.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFPFSTOP ../lib/usb_common.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFPFSTOP ../src/init_gpif.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFPFSTOP ../src/radar_main.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFPFSTOP ../src/usrp_common.asm /^_EP2GPIFPFSTOP = 0xe6d3$/;" d _EP2GPIFTRIG ../lib/fx2utils.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2GPIFTRIG ../lib/isr.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2GPIFTRIG ../lib/timer.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2GPIFTRIG ../lib/usb_common.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2GPIFTRIG ../src/init_gpif.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2GPIFTRIG ../src/radar_main.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2GPIFTRIG ../src/usrp_common.asm /^_EP2GPIFTRIG = 0xe6d4$/;" d _EP2ISOINPKTS ../lib/fx2utils.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP2ISOINPKTS ../lib/isr.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP2ISOINPKTS ../lib/timer.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP2ISOINPKTS ../lib/usb_common.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP2ISOINPKTS ../src/init_gpif.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP2ISOINPKTS ../src/radar_main.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP2ISOINPKTS ../src/usrp_common.asm /^_EP2ISOINPKTS = 0xe640$/;" d _EP4AUTOINLENH ../lib/fx2utils.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENH ../lib/isr.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENH ../lib/timer.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENH ../lib/usb_common.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENH ../src/init_gpif.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENH ../src/radar_main.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENH ../src/usrp_common.asm /^_EP4AUTOINLENH = 0xe622$/;" d _EP4AUTOINLENL ../lib/fx2utils.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4AUTOINLENL ../lib/isr.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4AUTOINLENL ../lib/timer.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4AUTOINLENL ../lib/usb_common.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4AUTOINLENL ../src/init_gpif.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4AUTOINLENL ../src/radar_main.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4AUTOINLENL ../src/usrp_common.asm /^_EP4AUTOINLENL = 0xe623$/;" d _EP4BCH ../lib/fx2utils.asm /^_EP4BCH = 0xe694$/;" d _EP4BCH ../lib/isr.asm /^_EP4BCH = 0xe694$/;" d _EP4BCH ../lib/timer.asm /^_EP4BCH = 0xe694$/;" d _EP4BCH ../lib/usb_common.asm /^_EP4BCH = 0xe694$/;" d _EP4BCH ../src/init_gpif.asm /^_EP4BCH = 0xe694$/;" d _EP4BCH ../src/radar_main.asm /^_EP4BCH = 0xe694$/;" d _EP4BCH ../src/usrp_common.asm /^_EP4BCH = 0xe694$/;" d _EP4BCL ../lib/fx2utils.asm /^_EP4BCL = 0xe695$/;" d _EP4BCL ../lib/isr.asm /^_EP4BCL = 0xe695$/;" d _EP4BCL ../lib/timer.asm /^_EP4BCL = 0xe695$/;" d _EP4BCL ../lib/usb_common.asm /^_EP4BCL = 0xe695$/;" d _EP4BCL ../src/init_gpif.asm /^_EP4BCL = 0xe695$/;" d _EP4BCL ../src/radar_main.asm /^_EP4BCL = 0xe695$/;" d _EP4BCL ../src/usrp_common.asm /^_EP4BCL = 0xe695$/;" d _EP4CFG ../lib/fx2utils.asm /^_EP4CFG = 0xe613$/;" d _EP4CFG ../lib/isr.asm /^_EP4CFG = 0xe613$/;" d _EP4CFG ../lib/timer.asm /^_EP4CFG = 0xe613$/;" d _EP4CFG ../lib/usb_common.asm /^_EP4CFG = 0xe613$/;" d _EP4CFG ../src/init_gpif.asm /^_EP4CFG = 0xe613$/;" d _EP4CFG ../src/radar_main.asm /^_EP4CFG = 0xe613$/;" d _EP4CFG ../src/usrp_common.asm /^_EP4CFG = 0xe613$/;" d _EP4CS ../lib/fx2utils.asm /^_EP4CS = 0xe6a4$/;" d _EP4CS ../lib/isr.asm /^_EP4CS = 0xe6a4$/;" d _EP4CS ../lib/timer.asm /^_EP4CS = 0xe6a4$/;" d _EP4CS ../lib/usb_common.asm /^_EP4CS = 0xe6a4$/;" d _EP4CS ../src/init_gpif.asm /^_EP4CS = 0xe6a4$/;" d _EP4CS ../src/radar_main.asm /^_EP4CS = 0xe6a4$/;" d _EP4CS ../src/usrp_common.asm /^_EP4CS = 0xe6a4$/;" d _EP4FIFOBCH ../lib/fx2utils.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCH ../lib/isr.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCH ../lib/timer.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCH ../lib/usb_common.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCH ../src/init_gpif.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCH ../src/radar_main.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCH ../src/usrp_common.asm /^_EP4FIFOBCH = 0xe6ad$/;" d _EP4FIFOBCL ../lib/fx2utils.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBCL ../lib/isr.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBCL ../lib/timer.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBCL ../lib/usb_common.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBCL ../src/init_gpif.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBCL ../src/radar_main.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBCL ../src/usrp_common.asm /^_EP4FIFOBCL = 0xe6ae$/;" d _EP4FIFOBUF ../lib/fx2utils.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOBUF ../lib/isr.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOBUF ../lib/timer.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOBUF ../lib/usb_common.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOBUF ../src/init_gpif.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOBUF ../src/radar_main.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOBUF ../src/usrp_common.asm /^_EP4FIFOBUF = 0xf400$/;" d _EP4FIFOCFG ../lib/fx2utils.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOCFG ../lib/isr.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOCFG ../lib/timer.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOCFG ../lib/usb_common.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOCFG ../src/init_gpif.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOCFG ../src/radar_main.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOCFG ../src/usrp_common.asm /^_EP4FIFOCFG = 0xe619$/;" d _EP4FIFOFLGS ../lib/fx2utils.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOFLGS ../lib/isr.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOFLGS ../lib/timer.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOFLGS ../lib/usb_common.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOFLGS ../src/init_gpif.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOFLGS ../src/radar_main.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOFLGS ../src/usrp_common.asm /^_EP4FIFOFLGS = 0xe6a8$/;" d _EP4FIFOIE ../lib/fx2utils.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIE ../lib/isr.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIE ../lib/timer.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIE ../lib/usb_common.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIE ../src/init_gpif.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIE ../src/radar_main.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIE ../src/usrp_common.asm /^_EP4FIFOIE = 0xe652$/;" d _EP4FIFOIRQ ../lib/fx2utils.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOIRQ ../lib/isr.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOIRQ ../lib/timer.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOIRQ ../lib/usb_common.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOIRQ ../src/init_gpif.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOIRQ ../src/radar_main.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOIRQ ../src/usrp_common.asm /^_EP4FIFOIRQ = 0xe653$/;" d _EP4FIFOPFH ../lib/fx2utils.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFH ../lib/isr.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFH ../lib/timer.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFH ../lib/usb_common.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFH ../src/init_gpif.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFH ../src/radar_main.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFH ../src/usrp_common.asm /^_EP4FIFOPFH = 0xe632$/;" d _EP4FIFOPFL ../lib/fx2utils.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4FIFOPFL ../lib/isr.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4FIFOPFL ../lib/timer.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4FIFOPFL ../lib/usb_common.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4FIFOPFL ../src/init_gpif.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4FIFOPFL ../src/radar_main.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4FIFOPFL ../src/usrp_common.asm /^_EP4FIFOPFL = 0xe633$/;" d _EP4GPIFFLGSEL ../lib/fx2utils.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFFLGSEL ../lib/isr.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFFLGSEL ../lib/timer.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFFLGSEL ../lib/usb_common.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFFLGSEL ../src/init_gpif.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFFLGSEL ../src/radar_main.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFFLGSEL ../src/usrp_common.asm /^_EP4GPIFFLGSEL = 0xe6da$/;" d _EP4GPIFPFSTOP ../lib/fx2utils.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFPFSTOP ../lib/isr.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFPFSTOP ../lib/timer.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFPFSTOP ../lib/usb_common.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFPFSTOP ../src/init_gpif.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFPFSTOP ../src/radar_main.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFPFSTOP ../src/usrp_common.asm /^_EP4GPIFPFSTOP = 0xe6db$/;" d _EP4GPIFTRIG ../lib/fx2utils.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4GPIFTRIG ../lib/isr.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4GPIFTRIG ../lib/timer.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4GPIFTRIG ../lib/usb_common.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4GPIFTRIG ../src/init_gpif.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4GPIFTRIG ../src/radar_main.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4GPIFTRIG ../src/usrp_common.asm /^_EP4GPIFTRIG = 0xe6dc$/;" d _EP4ISOINPKTS ../lib/fx2utils.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP4ISOINPKTS ../lib/isr.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP4ISOINPKTS ../lib/timer.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP4ISOINPKTS ../lib/usb_common.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP4ISOINPKTS ../src/init_gpif.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP4ISOINPKTS ../src/radar_main.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP4ISOINPKTS ../src/usrp_common.asm /^_EP4ISOINPKTS = 0xe641$/;" d _EP68FIFOFLGS ../lib/fx2utils.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP68FIFOFLGS ../lib/isr.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP68FIFOFLGS ../lib/timer.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP68FIFOFLGS ../lib/usb_common.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP68FIFOFLGS ../src/init_gpif.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP68FIFOFLGS ../src/radar_main.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP68FIFOFLGS ../src/usrp_common.asm /^_EP68FIFOFLGS = 0x00ac$/;" d _EP6AUTOINLENH ../lib/fx2utils.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENH ../lib/isr.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENH ../lib/timer.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENH ../lib/usb_common.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENH ../src/init_gpif.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENH ../src/radar_main.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENH ../src/usrp_common.asm /^_EP6AUTOINLENH = 0xe624$/;" d _EP6AUTOINLENL ../lib/fx2utils.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6AUTOINLENL ../lib/isr.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6AUTOINLENL ../lib/timer.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6AUTOINLENL ../lib/usb_common.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6AUTOINLENL ../src/init_gpif.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6AUTOINLENL ../src/radar_main.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6AUTOINLENL ../src/usrp_common.asm /^_EP6AUTOINLENL = 0xe625$/;" d _EP6BCH ../lib/fx2utils.asm /^_EP6BCH = 0xe698$/;" d _EP6BCH ../lib/isr.asm /^_EP6BCH = 0xe698$/;" d _EP6BCH ../lib/timer.asm /^_EP6BCH = 0xe698$/;" d _EP6BCH ../lib/usb_common.asm /^_EP6BCH = 0xe698$/;" d _EP6BCH ../src/init_gpif.asm /^_EP6BCH = 0xe698$/;" d _EP6BCH ../src/radar_main.asm /^_EP6BCH = 0xe698$/;" d _EP6BCH ../src/usrp_common.asm /^_EP6BCH = 0xe698$/;" d _EP6BCL ../lib/fx2utils.asm /^_EP6BCL = 0xe699$/;" d _EP6BCL ../lib/isr.asm /^_EP6BCL = 0xe699$/;" d _EP6BCL ../lib/timer.asm /^_EP6BCL = 0xe699$/;" d _EP6BCL ../lib/usb_common.asm /^_EP6BCL = 0xe699$/;" d _EP6BCL ../src/init_gpif.asm /^_EP6BCL = 0xe699$/;" d _EP6BCL ../src/radar_main.asm /^_EP6BCL = 0xe699$/;" d _EP6BCL ../src/usrp_common.asm /^_EP6BCL = 0xe699$/;" d _EP6CFG ../lib/fx2utils.asm /^_EP6CFG = 0xe614$/;" d _EP6CFG ../lib/isr.asm /^_EP6CFG = 0xe614$/;" d _EP6CFG ../lib/timer.asm /^_EP6CFG = 0xe614$/;" d _EP6CFG ../lib/usb_common.asm /^_EP6CFG = 0xe614$/;" d _EP6CFG ../src/init_gpif.asm /^_EP6CFG = 0xe614$/;" d _EP6CFG ../src/radar_main.asm /^_EP6CFG = 0xe614$/;" d _EP6CFG ../src/usrp_common.asm /^_EP6CFG = 0xe614$/;" d _EP6CS ../lib/fx2utils.asm /^_EP6CS = 0xe6a5$/;" d _EP6CS ../lib/isr.asm /^_EP6CS = 0xe6a5$/;" d _EP6CS ../lib/timer.asm /^_EP6CS = 0xe6a5$/;" d _EP6CS ../lib/usb_common.asm /^_EP6CS = 0xe6a5$/;" d _EP6CS ../src/init_gpif.asm /^_EP6CS = 0xe6a5$/;" d _EP6CS ../src/radar_main.asm /^_EP6CS = 0xe6a5$/;" d _EP6CS ../src/usrp_common.asm /^_EP6CS = 0xe6a5$/;" d _EP6FIFOBCH ../lib/fx2utils.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCH ../lib/isr.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCH ../lib/timer.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCH ../lib/usb_common.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCH ../src/init_gpif.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCH ../src/radar_main.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCH ../src/usrp_common.asm /^_EP6FIFOBCH = 0xe6af$/;" d _EP6FIFOBCL ../lib/fx2utils.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBCL ../lib/isr.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBCL ../lib/timer.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBCL ../lib/usb_common.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBCL ../src/init_gpif.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBCL ../src/radar_main.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBCL ../src/usrp_common.asm /^_EP6FIFOBCL = 0xe6b0$/;" d _EP6FIFOBUF ../lib/fx2utils.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOBUF ../lib/isr.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOBUF ../lib/timer.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOBUF ../lib/usb_common.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOBUF ../src/init_gpif.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOBUF ../src/radar_main.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOBUF ../src/usrp_common.asm /^_EP6FIFOBUF = 0xf800$/;" d _EP6FIFOCFG ../lib/fx2utils.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOCFG ../lib/isr.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOCFG ../lib/timer.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOCFG ../lib/usb_common.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOCFG ../src/init_gpif.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOCFG ../src/radar_main.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOCFG ../src/usrp_common.asm /^_EP6FIFOCFG = 0xe61a$/;" d _EP6FIFOFLGS ../lib/fx2utils.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOFLGS ../lib/isr.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOFLGS ../lib/timer.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOFLGS ../lib/usb_common.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOFLGS ../src/init_gpif.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOFLGS ../src/radar_main.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOFLGS ../src/usrp_common.asm /^_EP6FIFOFLGS = 0xe6a9$/;" d _EP6FIFOIE ../lib/fx2utils.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIE ../lib/isr.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIE ../lib/timer.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIE ../lib/usb_common.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIE ../src/init_gpif.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIE ../src/radar_main.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIE ../src/usrp_common.asm /^_EP6FIFOIE = 0xe654$/;" d _EP6FIFOIRQ ../lib/fx2utils.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOIRQ ../lib/isr.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOIRQ ../lib/timer.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOIRQ ../lib/usb_common.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOIRQ ../src/init_gpif.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOIRQ ../src/radar_main.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOIRQ ../src/usrp_common.asm /^_EP6FIFOIRQ = 0xe655$/;" d _EP6FIFOPFH ../lib/fx2utils.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFH ../lib/isr.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFH ../lib/timer.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFH ../lib/usb_common.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFH ../src/init_gpif.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFH ../src/radar_main.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFH ../src/usrp_common.asm /^_EP6FIFOPFH = 0xe634$/;" d _EP6FIFOPFL ../lib/fx2utils.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6FIFOPFL ../lib/isr.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6FIFOPFL ../lib/timer.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6FIFOPFL ../lib/usb_common.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6FIFOPFL ../src/init_gpif.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6FIFOPFL ../src/radar_main.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6FIFOPFL ../src/usrp_common.asm /^_EP6FIFOPFL = 0xe635$/;" d _EP6GPIFFLGSEL ../lib/fx2utils.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFFLGSEL ../lib/isr.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFFLGSEL ../lib/timer.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFFLGSEL ../lib/usb_common.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFFLGSEL ../src/init_gpif.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFFLGSEL ../src/radar_main.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFFLGSEL ../src/usrp_common.asm /^_EP6GPIFFLGSEL = 0xe6e2$/;" d _EP6GPIFPFSTOP ../lib/fx2utils.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFPFSTOP ../lib/isr.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFPFSTOP ../lib/timer.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFPFSTOP ../lib/usb_common.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFPFSTOP ../src/init_gpif.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFPFSTOP ../src/radar_main.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFPFSTOP ../src/usrp_common.asm /^_EP6GPIFPFSTOP = 0xe6e3$/;" d _EP6GPIFTRIG ../lib/fx2utils.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6GPIFTRIG ../lib/isr.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6GPIFTRIG ../lib/timer.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6GPIFTRIG ../lib/usb_common.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6GPIFTRIG ../src/init_gpif.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6GPIFTRIG ../src/radar_main.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6GPIFTRIG ../src/usrp_common.asm /^_EP6GPIFTRIG = 0xe6e4$/;" d _EP6ISOINPKTS ../lib/fx2utils.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP6ISOINPKTS ../lib/isr.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP6ISOINPKTS ../lib/timer.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP6ISOINPKTS ../lib/usb_common.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP6ISOINPKTS ../src/init_gpif.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP6ISOINPKTS ../src/radar_main.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP6ISOINPKTS ../src/usrp_common.asm /^_EP6ISOINPKTS = 0xe642$/;" d _EP8AUTOINLENH ../lib/fx2utils.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENH ../lib/isr.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENH ../lib/timer.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENH ../lib/usb_common.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENH ../src/init_gpif.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENH ../src/radar_main.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENH ../src/usrp_common.asm /^_EP8AUTOINLENH = 0xe626$/;" d _EP8AUTOINLENL ../lib/fx2utils.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8AUTOINLENL ../lib/isr.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8AUTOINLENL ../lib/timer.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8AUTOINLENL ../lib/usb_common.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8AUTOINLENL ../src/init_gpif.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8AUTOINLENL ../src/radar_main.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8AUTOINLENL ../src/usrp_common.asm /^_EP8AUTOINLENL = 0xe627$/;" d _EP8BCH ../lib/fx2utils.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCH ../lib/isr.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCH ../lib/timer.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCH ../lib/usb_common.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCH ../src/init_gpif.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCH ../src/radar_main.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCH ../src/usrp_common.asm /^_EP8BCH = 0xe69c$/;" d _EP8BCL ../lib/fx2utils.asm /^_EP8BCL = 0xe69d$/;" d _EP8BCL ../lib/isr.asm /^_EP8BCL = 0xe69d$/;" d _EP8BCL ../lib/timer.asm /^_EP8BCL = 0xe69d$/;" d _EP8BCL ../lib/usb_common.asm /^_EP8BCL = 0xe69d$/;" d _EP8BCL ../src/init_gpif.asm /^_EP8BCL = 0xe69d$/;" d _EP8BCL ../src/radar_main.asm /^_EP8BCL = 0xe69d$/;" d _EP8BCL ../src/usrp_common.asm /^_EP8BCL = 0xe69d$/;" d _EP8CFG ../lib/fx2utils.asm /^_EP8CFG = 0xe615$/;" d _EP8CFG ../lib/isr.asm /^_EP8CFG = 0xe615$/;" d _EP8CFG ../lib/timer.asm /^_EP8CFG = 0xe615$/;" d _EP8CFG ../lib/usb_common.asm /^_EP8CFG = 0xe615$/;" d _EP8CFG ../src/init_gpif.asm /^_EP8CFG = 0xe615$/;" d _EP8CFG ../src/radar_main.asm /^_EP8CFG = 0xe615$/;" d _EP8CFG ../src/usrp_common.asm /^_EP8CFG = 0xe615$/;" d _EP8CS ../lib/fx2utils.asm /^_EP8CS = 0xe6a6$/;" d _EP8CS ../lib/isr.asm /^_EP8CS = 0xe6a6$/;" d _EP8CS ../lib/timer.asm /^_EP8CS = 0xe6a6$/;" d _EP8CS ../lib/usb_common.asm /^_EP8CS = 0xe6a6$/;" d _EP8CS ../src/init_gpif.asm /^_EP8CS = 0xe6a6$/;" d _EP8CS ../src/radar_main.asm /^_EP8CS = 0xe6a6$/;" d _EP8CS ../src/usrp_common.asm /^_EP8CS = 0xe6a6$/;" d _EP8FIFOBCH ../lib/fx2utils.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCH ../lib/isr.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCH ../lib/timer.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCH ../lib/usb_common.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCH ../src/init_gpif.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCH ../src/radar_main.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCH ../src/usrp_common.asm /^_EP8FIFOBCH = 0xe6b1$/;" d _EP8FIFOBCL ../lib/fx2utils.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBCL ../lib/isr.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBCL ../lib/timer.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBCL ../lib/usb_common.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBCL ../src/init_gpif.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBCL ../src/radar_main.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBCL ../src/usrp_common.asm /^_EP8FIFOBCL = 0xe6b2$/;" d _EP8FIFOBUF ../lib/fx2utils.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOBUF ../lib/isr.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOBUF ../lib/timer.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOBUF ../lib/usb_common.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOBUF ../src/init_gpif.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOBUF ../src/radar_main.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOBUF ../src/usrp_common.asm /^_EP8FIFOBUF = 0xfc00$/;" d _EP8FIFOCFG ../lib/fx2utils.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOCFG ../lib/isr.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOCFG ../lib/timer.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOCFG ../lib/usb_common.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOCFG ../src/init_gpif.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOCFG ../src/radar_main.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOCFG ../src/usrp_common.asm /^_EP8FIFOCFG = 0xe61b$/;" d _EP8FIFOFLGS ../lib/fx2utils.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOFLGS ../lib/isr.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOFLGS ../lib/timer.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOFLGS ../lib/usb_common.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOFLGS ../src/init_gpif.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOFLGS ../src/radar_main.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOFLGS ../src/usrp_common.asm /^_EP8FIFOFLGS = 0xe6aa$/;" d _EP8FIFOIE ../lib/fx2utils.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIE ../lib/isr.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIE ../lib/timer.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIE ../lib/usb_common.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIE ../src/init_gpif.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIE ../src/radar_main.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIE ../src/usrp_common.asm /^_EP8FIFOIE = 0xe656$/;" d _EP8FIFOIRQ ../lib/fx2utils.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOIRQ ../lib/isr.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOIRQ ../lib/timer.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOIRQ ../lib/usb_common.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOIRQ ../src/init_gpif.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOIRQ ../src/radar_main.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOIRQ ../src/usrp_common.asm /^_EP8FIFOIRQ = 0xe657$/;" d _EP8FIFOPFH ../lib/fx2utils.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFH ../lib/isr.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFH ../lib/timer.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFH ../lib/usb_common.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFH ../src/init_gpif.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFH ../src/radar_main.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFH ../src/usrp_common.asm /^_EP8FIFOPFH = 0xe636$/;" d _EP8FIFOPFL ../lib/fx2utils.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8FIFOPFL ../lib/isr.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8FIFOPFL ../lib/timer.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8FIFOPFL ../lib/usb_common.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8FIFOPFL ../src/init_gpif.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8FIFOPFL ../src/radar_main.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8FIFOPFL ../src/usrp_common.asm /^_EP8FIFOPFL = 0xe637$/;" d _EP8GPIFFLGSEL ../lib/fx2utils.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFFLGSEL ../lib/isr.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFFLGSEL ../lib/timer.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFFLGSEL ../lib/usb_common.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFFLGSEL ../src/init_gpif.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFFLGSEL ../src/radar_main.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFFLGSEL ../src/usrp_common.asm /^_EP8GPIFFLGSEL = 0xe6ea$/;" d _EP8GPIFPFSTOP ../lib/fx2utils.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFPFSTOP ../lib/isr.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFPFSTOP ../lib/timer.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFPFSTOP ../lib/usb_common.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFPFSTOP ../src/init_gpif.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFPFSTOP ../src/radar_main.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFPFSTOP ../src/usrp_common.asm /^_EP8GPIFPFSTOP = 0xe6eb$/;" d _EP8GPIFTRIG ../lib/fx2utils.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8GPIFTRIG ../lib/isr.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8GPIFTRIG ../lib/timer.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8GPIFTRIG ../lib/usb_common.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8GPIFTRIG ../src/init_gpif.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8GPIFTRIG ../src/radar_main.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8GPIFTRIG ../src/usrp_common.asm /^_EP8GPIFTRIG = 0xe6ec$/;" d _EP8ISOINPKTS ../lib/fx2utils.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EP8ISOINPKTS ../lib/isr.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EP8ISOINPKTS ../lib/timer.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EP8ISOINPKTS ../lib/usb_common.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EP8ISOINPKTS ../src/init_gpif.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EP8ISOINPKTS ../src/radar_main.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EP8ISOINPKTS ../src/usrp_common.asm /^_EP8ISOINPKTS = 0xe643$/;" d _EPIE ../lib/fx2utils.asm /^_EPIE = 0xe65e$/;" d _EPIE ../lib/isr.asm /^_EPIE = 0xe65e$/;" d _EPIE ../lib/timer.asm /^_EPIE = 0xe65e$/;" d _EPIE ../lib/usb_common.asm /^_EPIE = 0xe65e$/;" d _EPIE ../src/init_gpif.asm /^_EPIE = 0xe65e$/;" d _EPIE ../src/radar_main.asm /^_EPIE = 0xe65e$/;" d _EPIE ../src/usrp_common.asm /^_EPIE = 0xe65e$/;" d _EPIRQ ../lib/fx2utils.asm /^_EPIRQ = 0xe65f$/;" d _EPIRQ ../lib/isr.asm /^_EPIRQ = 0xe65f$/;" d _EPIRQ ../lib/timer.asm /^_EPIRQ = 0xe65f$/;" d _EPIRQ ../lib/usb_common.asm /^_EPIRQ = 0xe65f$/;" d _EPIRQ ../src/init_gpif.asm /^_EPIRQ = 0xe65f$/;" d _EPIRQ ../src/radar_main.asm /^_EPIRQ = 0xe65f$/;" d _EPIRQ ../src/usrp_common.asm /^_EPIRQ = 0xe65f$/;" d _ERESI ../lib/fx2utils.asm /^_ERESI = 0x00dd$/;" d _ERESI ../lib/isr.asm /^_ERESI = 0x00dd$/;" d _ERESI ../lib/timer.asm /^_ERESI = 0x00dd$/;" d _ERESI ../lib/usb_common.asm /^_ERESI = 0x00dd$/;" d _ERESI ../src/init_gpif.asm /^_ERESI = 0x00dd$/;" d _ERESI ../src/radar_main.asm /^_ERESI = 0x00dd$/;" d _ERESI ../src/usrp_common.asm /^_ERESI = 0x00dd$/;" d _ERRCNTLIM ../lib/fx2utils.asm /^_ERRCNTLIM = 0xe664$/;" d _ERRCNTLIM ../lib/isr.asm /^_ERRCNTLIM = 0xe664$/;" d _ERRCNTLIM ../lib/timer.asm /^_ERRCNTLIM = 0xe664$/;" d _ERRCNTLIM ../lib/usb_common.asm /^_ERRCNTLIM = 0xe664$/;" d _ERRCNTLIM ../src/init_gpif.asm /^_ERRCNTLIM = 0xe664$/;" d _ERRCNTLIM ../src/radar_main.asm /^_ERRCNTLIM = 0xe664$/;" d _ERRCNTLIM ../src/usrp_common.asm /^_ERRCNTLIM = 0xe664$/;" d _ES0 ../lib/fx2utils.asm /^_ES0 = 0x00ac$/;" d _ES0 ../lib/isr.asm /^_ES0 = 0x00ac$/;" d _ES0 ../lib/timer.asm /^_ES0 = 0x00ac$/;" d _ES0 ../lib/usb_common.asm /^_ES0 = 0x00ac$/;" d _ES0 ../src/init_gpif.asm /^_ES0 = 0x00ac$/;" d _ES0 ../src/radar_main.asm /^_ES0 = 0x00ac$/;" d _ES0 ../src/usrp_common.asm /^_ES0 = 0x00ac$/;" d _ES1 ../lib/fx2utils.asm /^_ES1 = 0x00ae$/;" d _ES1 ../lib/isr.asm /^_ES1 = 0x00ae$/;" d _ES1 ../lib/timer.asm /^_ES1 = 0x00ae$/;" d _ES1 ../lib/usb_common.asm /^_ES1 = 0x00ae$/;" d _ES1 ../src/init_gpif.asm /^_ES1 = 0x00ae$/;" d _ES1 ../src/radar_main.asm /^_ES1 = 0x00ae$/;" d _ES1 ../src/usrp_common.asm /^_ES1 = 0x00ae$/;" d _ET0 ../lib/fx2utils.asm /^_ET0 = 0x00a9$/;" d _ET0 ../lib/isr.asm /^_ET0 = 0x00a9$/;" d _ET0 ../lib/timer.asm /^_ET0 = 0x00a9$/;" d _ET0 ../lib/usb_common.asm /^_ET0 = 0x00a9$/;" d _ET0 ../src/init_gpif.asm /^_ET0 = 0x00a9$/;" d _ET0 ../src/radar_main.asm /^_ET0 = 0x00a9$/;" d _ET0 ../src/usrp_common.asm /^_ET0 = 0x00a9$/;" d _ET1 ../lib/fx2utils.asm /^_ET1 = 0x00ab$/;" d _ET1 ../lib/isr.asm /^_ET1 = 0x00ab$/;" d _ET1 ../lib/timer.asm /^_ET1 = 0x00ab$/;" d _ET1 ../lib/usb_common.asm /^_ET1 = 0x00ab$/;" d _ET1 ../src/init_gpif.asm /^_ET1 = 0x00ab$/;" d _ET1 ../src/radar_main.asm /^_ET1 = 0x00ab$/;" d _ET1 ../src/usrp_common.asm /^_ET1 = 0x00ab$/;" d _ET2 ../lib/fx2utils.asm /^_ET2 = 0x00ad$/;" d _ET2 ../lib/isr.asm /^_ET2 = 0x00ad$/;" d _ET2 ../lib/timer.asm /^_ET2 = 0x00ad$/;" d _ET2 ../lib/usb_common.asm /^_ET2 = 0x00ad$/;" d _ET2 ../src/init_gpif.asm /^_ET2 = 0x00ad$/;" d _ET2 ../src/radar_main.asm /^_ET2 = 0x00ad$/;" d _ET2 ../src/usrp_common.asm /^_ET2 = 0x00ad$/;" d _EX0 ../lib/fx2utils.asm /^_EX0 = 0x00a8$/;" d _EX0 ../lib/isr.asm /^_EX0 = 0x00a8$/;" d _EX0 ../lib/timer.asm /^_EX0 = 0x00a8$/;" d _EX0 ../lib/usb_common.asm /^_EX0 = 0x00a8$/;" d _EX0 ../src/init_gpif.asm /^_EX0 = 0x00a8$/;" d _EX0 ../src/radar_main.asm /^_EX0 = 0x00a8$/;" d _EX0 ../src/usrp_common.asm /^_EX0 = 0x00a8$/;" d _EX1 ../lib/fx2utils.asm /^_EX1 = 0x00aa$/;" d _EX1 ../lib/isr.asm /^_EX1 = 0x00aa$/;" d _EX1 ../lib/timer.asm /^_EX1 = 0x00aa$/;" d _EX1 ../lib/usb_common.asm /^_EX1 = 0x00aa$/;" d _EX1 ../src/init_gpif.asm /^_EX1 = 0x00aa$/;" d _EX1 ../src/radar_main.asm /^_EX1 = 0x00aa$/;" d _EX1 ../src/usrp_common.asm /^_EX1 = 0x00aa$/;" d _EXEN2 ../lib/fx2utils.asm /^_EXEN2 = 0x00cb$/;" d _EXEN2 ../lib/isr.asm /^_EXEN2 = 0x00cb$/;" d _EXEN2 ../lib/timer.asm /^_EXEN2 = 0x00cb$/;" d _EXEN2 ../lib/usb_common.asm /^_EXEN2 = 0x00cb$/;" d _EXEN2 ../src/init_gpif.asm /^_EXEN2 = 0x00cb$/;" d _EXEN2 ../src/radar_main.asm /^_EXEN2 = 0x00cb$/;" d _EXEN2 ../src/usrp_common.asm /^_EXEN2 = 0x00cb$/;" d _EXF2 ../lib/fx2utils.asm /^_EXF2 = 0x00ce$/;" d _EXF2 ../lib/isr.asm /^_EXF2 = 0x00ce$/;" d _EXF2 ../lib/timer.asm /^_EXF2 = 0x00ce$/;" d _EXF2 ../lib/usb_common.asm /^_EXF2 = 0x00ce$/;" d _EXF2 ../src/init_gpif.asm /^_EXF2 = 0x00ce$/;" d _EXF2 ../src/radar_main.asm /^_EXF2 = 0x00ce$/;" d _EXF2 ../src/usrp_common.asm /^_EXF2 = 0x00ce$/;" d _EXIF ../lib/fx2utils.asm /^_EXIF = 0x0091$/;" d _EXIF ../lib/isr.asm /^_EXIF = 0x0091$/;" d _EXIF ../lib/timer.asm /^_EXIF = 0x0091$/;" d _EXIF ../lib/usb_common.asm /^_EXIF = 0x0091$/;" d _EXIF ../src/init_gpif.asm /^_EXIF = 0x0091$/;" d _EXIF ../src/radar_main.asm /^_EXIF = 0x0091$/;" d _EXIF ../src/usrp_common.asm /^_EXIF = 0x0091$/;" d _F0 ../lib/fx2utils.asm /^_F0 = 0x00d5$/;" d _F0 ../lib/isr.asm /^_F0 = 0x00d5$/;" d _F0 ../lib/timer.asm /^_F0 = 0x00d5$/;" d _F0 ../lib/usb_common.asm /^_F0 = 0x00d5$/;" d _F0 ../src/init_gpif.asm /^_F0 = 0x00d5$/;" d _F0 ../src/radar_main.asm /^_F0 = 0x00d5$/;" d _F0 ../src/usrp_common.asm /^_F0 = 0x00d5$/;" d _FIFOPINPOLAR ../lib/fx2utils.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFOPINPOLAR ../lib/isr.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFOPINPOLAR ../lib/timer.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFOPINPOLAR ../lib/usb_common.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFOPINPOLAR ../src/init_gpif.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFOPINPOLAR ../src/radar_main.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFOPINPOLAR ../src/usrp_common.asm /^_FIFOPINPOLAR = 0xe609$/;" d _FIFORESET ../lib/fx2utils.asm /^_FIFORESET = 0xe604$/;" d _FIFORESET ../lib/isr.asm /^_FIFORESET = 0xe604$/;" d _FIFORESET ../lib/timer.asm /^_FIFORESET = 0xe604$/;" d _FIFORESET ../lib/usb_common.asm /^_FIFORESET = 0xe604$/;" d _FIFORESET ../src/init_gpif.asm /^_FIFORESET = 0xe604$/;" d _FIFORESET ../src/radar_main.asm /^_FIFORESET = 0xe604$/;" d _FIFORESET ../src/usrp_common.asm /^_FIFORESET = 0xe604$/;" d _FL ../lib/fx2utils.asm /^_FL = 0x00d1$/;" d _FL ../lib/isr.asm /^_FL = 0x00d1$/;" d _FL ../lib/timer.asm /^_FL = 0x00d1$/;" d _FL ../lib/usb_common.asm /^_FL = 0x00d1$/;" d _FL ../src/init_gpif.asm /^_FL = 0x00d1$/;" d _FL ../src/radar_main.asm /^_FL = 0x00d1$/;" d _FL ../src/usrp_common.asm /^_FL = 0x00d1$/;" d _FLOWEQ0CTL ../lib/fx2utils.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ0CTL ../lib/isr.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ0CTL ../lib/timer.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ0CTL ../lib/usb_common.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ0CTL ../src/init_gpif.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ0CTL ../src/radar_main.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ0CTL ../src/usrp_common.asm /^_FLOWEQ0CTL = 0xe6c8$/;" d _FLOWEQ1CTL ../lib/fx2utils.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWEQ1CTL ../lib/isr.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWEQ1CTL ../lib/timer.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWEQ1CTL ../lib/usb_common.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWEQ1CTL ../src/init_gpif.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWEQ1CTL ../src/radar_main.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWEQ1CTL ../src/usrp_common.asm /^_FLOWEQ1CTL = 0xe6c9$/;" d _FLOWHOLDOFF ../lib/fx2utils.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWHOLDOFF ../lib/isr.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWHOLDOFF ../lib/timer.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWHOLDOFF ../lib/usb_common.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWHOLDOFF ../src/init_gpif.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWHOLDOFF ../src/radar_main.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWHOLDOFF ../src/usrp_common.asm /^_FLOWHOLDOFF = 0xe6ca$/;" d _FLOWLOGIC ../lib/fx2utils.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWLOGIC ../lib/isr.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWLOGIC ../lib/timer.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWLOGIC ../lib/usb_common.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWLOGIC ../src/init_gpif.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWLOGIC ../src/radar_main.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWLOGIC ../src/usrp_common.asm /^_FLOWLOGIC = 0xe6c7$/;" d _FLOWSTATE ../lib/fx2utils.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTATE ../lib/isr.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTATE ../lib/timer.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTATE ../lib/usb_common.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTATE ../src/init_gpif.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTATE ../src/radar_main.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTATE ../src/usrp_common.asm /^_FLOWSTATE = 0xe6c6$/;" d _FLOWSTB ../lib/fx2utils.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTB ../lib/isr.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTB ../lib/timer.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTB ../lib/usb_common.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTB ../src/init_gpif.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTB ../src/radar_main.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTB ../src/usrp_common.asm /^_FLOWSTB = 0xe6cb$/;" d _FLOWSTBEDGE ../lib/fx2utils.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBEDGE ../lib/isr.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBEDGE ../lib/timer.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBEDGE ../lib/usb_common.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBEDGE ../src/init_gpif.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBEDGE ../src/radar_main.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBEDGE ../src/usrp_common.asm /^_FLOWSTBEDGE = 0xe6cc$/;" d _FLOWSTBHPERIOD ../lib/fx2utils.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FLOWSTBHPERIOD ../lib/isr.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FLOWSTBHPERIOD ../lib/timer.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FLOWSTBHPERIOD ../lib/usb_common.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FLOWSTBHPERIOD ../src/init_gpif.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FLOWSTBHPERIOD ../src/radar_main.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FLOWSTBHPERIOD ../src/usrp_common.asm /^_FLOWSTBHPERIOD = 0xe6cd$/;" d _FNADDR ../lib/fx2utils.asm /^_FNADDR = 0xe687$/;" d _FNADDR ../lib/isr.asm /^_FNADDR = 0xe687$/;" d _FNADDR ../lib/timer.asm /^_FNADDR = 0xe687$/;" d _FNADDR ../lib/usb_common.asm /^_FNADDR = 0xe687$/;" d _FNADDR ../src/init_gpif.asm /^_FNADDR = 0xe687$/;" d _FNADDR ../src/radar_main.asm /^_FNADDR = 0xe687$/;" d _FNADDR ../src/usrp_common.asm /^_FNADDR = 0xe687$/;" d _FX2UTILS_H_ ../include/fx2utils.h 23;" d _FlowStates ../src/radar_gpif2.asm /^_FlowStates:$/;" l _GPIFABORT ../lib/fx2utils.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFABORT ../lib/isr.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFABORT ../lib/timer.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFABORT ../lib/usb_common.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFABORT ../src/init_gpif.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFABORT ../src/radar_main.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFABORT ../src/usrp_common.asm /^_GPIFABORT = 0xe6f5$/;" d _GPIFADRH ../lib/fx2utils.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRH ../lib/isr.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRH ../lib/timer.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRH ../lib/usb_common.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRH ../src/init_gpif.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRH ../src/radar_main.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRH ../src/usrp_common.asm /^_GPIFADRH = 0xe6c4$/;" d _GPIFADRL ../lib/fx2utils.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFADRL ../lib/isr.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFADRL ../lib/timer.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFADRL ../lib/usb_common.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFADRL ../src/init_gpif.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFADRL ../src/radar_main.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFADRL ../src/usrp_common.asm /^_GPIFADRL = 0xe6c5$/;" d _GPIFCTLCFG ../lib/fx2utils.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFCTLCFG ../lib/isr.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFCTLCFG ../lib/timer.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFCTLCFG ../lib/usb_common.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFCTLCFG ../src/init_gpif.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFCTLCFG ../src/radar_main.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFCTLCFG ../src/usrp_common.asm /^_GPIFCTLCFG = 0xe6c3$/;" d _GPIFHOLDAMOUNT ../lib/fx2utils.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFHOLDAMOUNT ../lib/isr.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFHOLDAMOUNT ../lib/timer.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFHOLDAMOUNT ../lib/usb_common.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFHOLDAMOUNT ../src/init_gpif.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFHOLDAMOUNT ../src/radar_main.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFHOLDAMOUNT ../src/usrp_common.asm /^_GPIFHOLDAMOUNT = 0xe60c$/;" d _GPIFIDLECS ../lib/fx2utils.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECS ../lib/isr.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECS ../lib/timer.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECS ../lib/usb_common.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECS ../src/init_gpif.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECS ../src/radar_main.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECS ../src/usrp_common.asm /^_GPIFIDLECS = 0xe6c1$/;" d _GPIFIDLECTL ../lib/fx2utils.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIDLECTL ../lib/isr.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIDLECTL ../lib/timer.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIDLECTL ../lib/usb_common.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIDLECTL ../src/init_gpif.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIDLECTL ../src/radar_main.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIDLECTL ../src/usrp_common.asm /^_GPIFIDLECTL = 0xe6c2$/;" d _GPIFIE ../lib/fx2utils.asm /^_GPIFIE = 0xe660$/;" d _GPIFIE ../lib/isr.asm /^_GPIFIE = 0xe660$/;" d _GPIFIE ../lib/timer.asm /^_GPIFIE = 0xe660$/;" d _GPIFIE ../lib/usb_common.asm /^_GPIFIE = 0xe660$/;" d _GPIFIE ../src/init_gpif.asm /^_GPIFIE = 0xe660$/;" d _GPIFIE ../src/radar_main.asm /^_GPIFIE = 0xe660$/;" d _GPIFIE ../src/usrp_common.asm /^_GPIFIE = 0xe660$/;" d _GPIFIRQ ../lib/fx2utils.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFIRQ ../lib/isr.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFIRQ ../lib/timer.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFIRQ ../lib/usb_common.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFIRQ ../src/init_gpif.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFIRQ ../src/radar_main.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFIRQ ../src/usrp_common.asm /^_GPIFIRQ = 0xe661$/;" d _GPIFREADYCFG ../lib/fx2utils.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYCFG ../lib/isr.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYCFG ../lib/timer.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYCFG ../lib/usb_common.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYCFG ../src/init_gpif.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYCFG ../src/radar_main.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYCFG ../src/usrp_common.asm /^_GPIFREADYCFG = 0xe6f3$/;" d _GPIFREADYSTAT ../lib/fx2utils.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFREADYSTAT ../lib/isr.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFREADYSTAT ../lib/timer.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFREADYSTAT ../lib/usb_common.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFREADYSTAT ../src/init_gpif.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFREADYSTAT ../src/radar_main.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFREADYSTAT ../src/usrp_common.asm /^_GPIFREADYSTAT = 0xe6f4$/;" d _GPIFSGLDATH ../lib/fx2utils.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATH ../lib/isr.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATH ../lib/timer.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATH ../lib/usb_common.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATH ../src/init_gpif.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATH ../src/radar_main.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATH ../src/usrp_common.asm /^_GPIFSGLDATH = 0x00bd$/;" d _GPIFSGLDATLNOX ../lib/fx2utils.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLNOX ../lib/isr.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLNOX ../lib/timer.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLNOX ../lib/usb_common.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLNOX ../src/init_gpif.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLNOX ../src/radar_main.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLNOX ../src/usrp_common.asm /^_GPIFSGLDATLNOX = 0x00bf$/;" d _GPIFSGLDATLX ../lib/fx2utils.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFSGLDATLX ../lib/isr.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFSGLDATLX ../lib/timer.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFSGLDATLX ../lib/usb_common.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFSGLDATLX ../src/init_gpif.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFSGLDATLX ../src/radar_main.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFSGLDATLX ../src/usrp_common.asm /^_GPIFSGLDATLX = 0x00be$/;" d _GPIFTCB0 ../lib/fx2utils.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB0 ../lib/isr.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB0 ../lib/timer.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB0 ../lib/usb_common.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB0 ../src/init_gpif.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB0 ../src/radar_main.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB0 ../src/usrp_common.asm /^_GPIFTCB0 = 0xe6d1$/;" d _GPIFTCB1 ../lib/fx2utils.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB1 ../lib/isr.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB1 ../lib/timer.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB1 ../lib/usb_common.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB1 ../src/init_gpif.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB1 ../src/radar_main.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB1 ../src/usrp_common.asm /^_GPIFTCB1 = 0xe6d0$/;" d _GPIFTCB2 ../lib/fx2utils.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB2 ../lib/isr.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB2 ../lib/timer.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB2 ../lib/usb_common.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB2 ../src/init_gpif.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB2 ../src/radar_main.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB2 ../src/usrp_common.asm /^_GPIFTCB2 = 0xe6cf$/;" d _GPIFTCB3 ../lib/fx2utils.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTCB3 ../lib/isr.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTCB3 ../lib/timer.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTCB3 ../lib/usb_common.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTCB3 ../src/init_gpif.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTCB3 ../src/radar_main.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTCB3 ../src/usrp_common.asm /^_GPIFTCB3 = 0xe6ce$/;" d _GPIFTRIG ../lib/fx2utils.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFTRIG ../lib/isr.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFTRIG ../lib/timer.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFTRIG ../lib/usb_common.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFTRIG ../src/init_gpif.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFTRIG ../src/radar_main.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFTRIG ../src/usrp_common.asm /^_GPIFTRIG = 0x00bb$/;" d _GPIFWFSELECT ../lib/fx2utils.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIFWFSELECT ../lib/isr.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIFWFSELECT ../lib/timer.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIFWFSELECT ../lib/usb_common.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIFWFSELECT ../src/init_gpif.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIFWFSELECT ../src/radar_main.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIFWFSELECT ../src/usrp_common.asm /^_GPIFWFSELECT = 0xe6c0$/;" d _GPIF_WAVE_DATA ../lib/fx2utils.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _GPIF_WAVE_DATA ../lib/isr.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _GPIF_WAVE_DATA ../lib/timer.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _GPIF_WAVE_DATA ../lib/usb_common.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _GPIF_WAVE_DATA ../src/init_gpif.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _GPIF_WAVE_DATA ../src/radar_main.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _GPIF_WAVE_DATA ../src/usrp_common.asm /^_GPIF_WAVE_DATA = 0xe400$/;" d _I2CS ../lib/fx2utils.asm /^_I2CS = 0xe678$/;" d _I2CS ../lib/isr.asm /^_I2CS = 0xe678$/;" d _I2CS ../lib/timer.asm /^_I2CS = 0xe678$/;" d _I2CS ../lib/usb_common.asm /^_I2CS = 0xe678$/;" d _I2CS ../src/init_gpif.asm /^_I2CS = 0xe678$/;" d _I2CS ../src/radar_main.asm /^_I2CS = 0xe678$/;" d _I2CS ../src/usrp_common.asm /^_I2CS = 0xe678$/;" d _I2CTL ../lib/fx2utils.asm /^_I2CTL = 0xe67a$/;" d _I2CTL ../lib/isr.asm /^_I2CTL = 0xe67a$/;" d _I2CTL ../lib/timer.asm /^_I2CTL = 0xe67a$/;" d _I2CTL ../lib/usb_common.asm /^_I2CTL = 0xe67a$/;" d _I2CTL ../src/init_gpif.asm /^_I2CTL = 0xe67a$/;" d _I2CTL ../src/radar_main.asm /^_I2CTL = 0xe67a$/;" d _I2CTL ../src/usrp_common.asm /^_I2CTL = 0xe67a$/;" d _I2DAT ../lib/fx2utils.asm /^_I2DAT = 0xe679$/;" d _I2DAT ../lib/isr.asm /^_I2DAT = 0xe679$/;" d _I2DAT ../lib/timer.asm /^_I2DAT = 0xe679$/;" d _I2DAT ../lib/usb_common.asm /^_I2DAT = 0xe679$/;" d _I2DAT ../src/init_gpif.asm /^_I2DAT = 0xe679$/;" d _I2DAT ../src/radar_main.asm /^_I2DAT = 0xe679$/;" d _I2DAT ../src/usrp_common.asm /^_I2DAT = 0xe679$/;" d _IBNIE ../lib/fx2utils.asm /^_IBNIE = 0xe658$/;" d _IBNIE ../lib/isr.asm /^_IBNIE = 0xe658$/;" d _IBNIE ../lib/timer.asm /^_IBNIE = 0xe658$/;" d _IBNIE ../lib/usb_common.asm /^_IBNIE = 0xe658$/;" d _IBNIE ../src/init_gpif.asm /^_IBNIE = 0xe658$/;" d _IBNIE ../src/radar_main.asm /^_IBNIE = 0xe658$/;" d _IBNIE ../src/usrp_common.asm /^_IBNIE = 0xe658$/;" d _IBNIRQ ../lib/fx2utils.asm /^_IBNIRQ = 0xe659$/;" d _IBNIRQ ../lib/isr.asm /^_IBNIRQ = 0xe659$/;" d _IBNIRQ ../lib/timer.asm /^_IBNIRQ = 0xe659$/;" d _IBNIRQ ../lib/usb_common.asm /^_IBNIRQ = 0xe659$/;" d _IBNIRQ ../src/init_gpif.asm /^_IBNIRQ = 0xe659$/;" d _IBNIRQ ../src/radar_main.asm /^_IBNIRQ = 0xe659$/;" d _IBNIRQ ../src/usrp_common.asm /^_IBNIRQ = 0xe659$/;" d _IE ../lib/fx2utils.asm /^_IE = 0x00a8$/;" d _IE ../lib/isr.asm /^_IE = 0x00a8$/;" d _IE ../lib/timer.asm /^_IE = 0x00a8$/;" d _IE ../lib/usb_common.asm /^_IE = 0x00a8$/;" d _IE ../src/init_gpif.asm /^_IE = 0x00a8$/;" d _IE ../src/radar_main.asm /^_IE = 0x00a8$/;" d _IE ../src/usrp_common.asm /^_IE = 0x00a8$/;" d _IE0 ../lib/fx2utils.asm /^_IE0 = 0x0089$/;" d _IE0 ../lib/isr.asm /^_IE0 = 0x0089$/;" d _IE0 ../lib/timer.asm /^_IE0 = 0x0089$/;" d _IE0 ../lib/usb_common.asm /^_IE0 = 0x0089$/;" d _IE0 ../src/init_gpif.asm /^_IE0 = 0x0089$/;" d _IE0 ../src/radar_main.asm /^_IE0 = 0x0089$/;" d _IE0 ../src/usrp_common.asm /^_IE0 = 0x0089$/;" d _IE1 ../lib/fx2utils.asm /^_IE1 = 0x008b$/;" d _IE1 ../lib/isr.asm /^_IE1 = 0x008b$/;" d _IE1 ../lib/timer.asm /^_IE1 = 0x008b$/;" d _IE1 ../lib/usb_common.asm /^_IE1 = 0x008b$/;" d _IE1 ../src/init_gpif.asm /^_IE1 = 0x008b$/;" d _IE1 ../src/radar_main.asm /^_IE1 = 0x008b$/;" d _IE1 ../src/usrp_common.asm /^_IE1 = 0x008b$/;" d _IFCONFIG ../lib/fx2utils.asm /^_IFCONFIG = 0xe601$/;" d _IFCONFIG ../lib/isr.asm /^_IFCONFIG = 0xe601$/;" d _IFCONFIG ../lib/timer.asm /^_IFCONFIG = 0xe601$/;" d _IFCONFIG ../lib/usb_common.asm /^_IFCONFIG = 0xe601$/;" d _IFCONFIG ../src/init_gpif.asm /^_IFCONFIG = 0xe601$/;" d _IFCONFIG ../src/radar_main.asm /^_IFCONFIG = 0xe601$/;" d _IFCONFIG ../src/usrp_common.asm /^_IFCONFIG = 0xe601$/;" d _INPKTEND ../lib/fx2utils.asm /^_INPKTEND = 0xe648$/;" d _INPKTEND ../lib/isr.asm /^_INPKTEND = 0xe648$/;" d _INPKTEND ../lib/timer.asm /^_INPKTEND = 0xe648$/;" d _INPKTEND ../lib/usb_common.asm /^_INPKTEND = 0xe648$/;" d _INPKTEND ../src/init_gpif.asm /^_INPKTEND = 0xe648$/;" d _INPKTEND ../src/radar_main.asm /^_INPKTEND = 0xe648$/;" d _INPKTEND ../src/usrp_common.asm /^_INPKTEND = 0xe648$/;" d _INT2CLR ../lib/fx2utils.asm /^_INT2CLR = 0x00a1$/;" d _INT2CLR ../lib/isr.asm /^_INT2CLR = 0x00a1$/;" d _INT2CLR ../lib/timer.asm /^_INT2CLR = 0x00a1$/;" d _INT2CLR ../lib/usb_common.asm /^_INT2CLR = 0x00a1$/;" d _INT2CLR ../src/init_gpif.asm /^_INT2CLR = 0x00a1$/;" d _INT2CLR ../src/radar_main.asm /^_INT2CLR = 0x00a1$/;" d _INT2CLR ../src/usrp_common.asm /^_INT2CLR = 0x00a1$/;" d _INT2IVEC ../lib/fx2utils.asm /^_INT2IVEC = 0xe666$/;" d _INT2IVEC ../lib/isr.asm /^_INT2IVEC = 0xe666$/;" d _INT2IVEC ../lib/timer.asm /^_INT2IVEC = 0xe666$/;" d _INT2IVEC ../lib/usb_common.asm /^_INT2IVEC = 0xe666$/;" d _INT2IVEC ../src/init_gpif.asm /^_INT2IVEC = 0xe666$/;" d _INT2IVEC ../src/radar_main.asm /^_INT2IVEC = 0xe666$/;" d _INT2IVEC ../src/usrp_common.asm /^_INT2IVEC = 0xe666$/;" d _INT4CLR ../lib/fx2utils.asm /^_INT4CLR = 0x00a2$/;" d _INT4CLR ../lib/isr.asm /^_INT4CLR = 0x00a2$/;" d _INT4CLR ../lib/timer.asm /^_INT4CLR = 0x00a2$/;" d _INT4CLR ../lib/usb_common.asm /^_INT4CLR = 0x00a2$/;" d _INT4CLR ../src/init_gpif.asm /^_INT4CLR = 0x00a2$/;" d _INT4CLR ../src/radar_main.asm /^_INT4CLR = 0x00a2$/;" d _INT4CLR ../src/usrp_common.asm /^_INT4CLR = 0x00a2$/;" d _INT4IVEC ../lib/fx2utils.asm /^_INT4IVEC = 0xe667$/;" d _INT4IVEC ../lib/isr.asm /^_INT4IVEC = 0xe667$/;" d _INT4IVEC ../lib/timer.asm /^_INT4IVEC = 0xe667$/;" d _INT4IVEC ../lib/usb_common.asm /^_INT4IVEC = 0xe667$/;" d _INT4IVEC ../src/init_gpif.asm /^_INT4IVEC = 0xe667$/;" d _INT4IVEC ../src/radar_main.asm /^_INT4IVEC = 0xe667$/;" d _INT4IVEC ../src/usrp_common.asm /^_INT4IVEC = 0xe667$/;" d _INT6 ../lib/fx2utils.asm /^_INT6 = 0x00db$/;" d _INT6 ../lib/isr.asm /^_INT6 = 0x00db$/;" d _INT6 ../lib/timer.asm /^_INT6 = 0x00db$/;" d _INT6 ../lib/usb_common.asm /^_INT6 = 0x00db$/;" d _INT6 ../src/init_gpif.asm /^_INT6 = 0x00db$/;" d _INT6 ../src/radar_main.asm /^_INT6 = 0x00db$/;" d _INT6 ../src/usrp_common.asm /^_INT6 = 0x00db$/;" d _INTSETUP ../lib/fx2utils.asm /^_INTSETUP = 0xe668$/;" d _INTSETUP ../lib/isr.asm /^_INTSETUP = 0xe668$/;" d _INTSETUP ../lib/timer.asm /^_INTSETUP = 0xe668$/;" d _INTSETUP ../lib/usb_common.asm /^_INTSETUP = 0xe668$/;" d _INTSETUP ../src/init_gpif.asm /^_INTSETUP = 0xe668$/;" d _INTSETUP ../src/radar_main.asm /^_INTSETUP = 0xe668$/;" d _INTSETUP ../src/usrp_common.asm /^_INTSETUP = 0xe668$/;" d _IOA ../lib/fx2utils.asm /^_IOA = 0x0080$/;" d _IOA ../lib/isr.asm /^_IOA = 0x0080$/;" d _IOA ../lib/timer.asm /^_IOA = 0x0080$/;" d _IOA ../lib/usb_common.asm /^_IOA = 0x0080$/;" d _IOA ../src/init_gpif.asm /^_IOA = 0x0080$/;" d _IOA ../src/radar_main.asm /^_IOA = 0x0080$/;" d _IOA ../src/usrp_common.asm /^_IOA = 0x0080$/;" d _IOB ../lib/fx2utils.asm /^_IOB = 0x0090$/;" d _IOB ../lib/isr.asm /^_IOB = 0x0090$/;" d _IOB ../lib/timer.asm /^_IOB = 0x0090$/;" d _IOB ../lib/usb_common.asm /^_IOB = 0x0090$/;" d _IOB ../src/init_gpif.asm /^_IOB = 0x0090$/;" d _IOB ../src/radar_main.asm /^_IOB = 0x0090$/;" d _IOB ../src/usrp_common.asm /^_IOB = 0x0090$/;" d _IOC ../lib/fx2utils.asm /^_IOC = 0x00a0$/;" d _IOC ../lib/isr.asm /^_IOC = 0x00a0$/;" d _IOC ../lib/timer.asm /^_IOC = 0x00a0$/;" d _IOC ../lib/usb_common.asm /^_IOC = 0x00a0$/;" d _IOC ../src/init_gpif.asm /^_IOC = 0x00a0$/;" d _IOC ../src/radar_main.asm /^_IOC = 0x00a0$/;" d _IOC ../src/usrp_common.asm /^_IOC = 0x00a0$/;" d _IOD ../lib/fx2utils.asm /^_IOD = 0x00b0$/;" d _IOD ../lib/isr.asm /^_IOD = 0x00b0$/;" d _IOD ../lib/timer.asm /^_IOD = 0x00b0$/;" d _IOD ../lib/usb_common.asm /^_IOD = 0x00b0$/;" d _IOD ../src/init_gpif.asm /^_IOD = 0x00b0$/;" d _IOD ../src/radar_main.asm /^_IOD = 0x00b0$/;" d _IOD ../src/usrp_common.asm /^_IOD = 0x00b0$/;" d _IOE ../lib/fx2utils.asm /^_IOE = 0x00b1$/;" d _IOE ../lib/isr.asm /^_IOE = 0x00b1$/;" d _IOE ../lib/timer.asm /^_IOE = 0x00b1$/;" d _IOE ../lib/usb_common.asm /^_IOE = 0x00b1$/;" d _IOE ../src/init_gpif.asm /^_IOE = 0x00b1$/;" d _IOE ../src/radar_main.asm /^_IOE = 0x00b1$/;" d _IOE ../src/usrp_common.asm /^_IOE = 0x00b1$/;" d _IP ../lib/fx2utils.asm /^_IP = 0x00b8$/;" d _IP ../lib/isr.asm /^_IP = 0x00b8$/;" d _IP ../lib/timer.asm /^_IP = 0x00b8$/;" d _IP ../lib/usb_common.asm /^_IP = 0x00b8$/;" d _IP ../src/init_gpif.asm /^_IP = 0x00b8$/;" d _IP ../src/radar_main.asm /^_IP = 0x00b8$/;" d _IP ../src/usrp_common.asm /^_IP = 0x00b8$/;" d _ISR_H_ ../include/isr.h 24;" d _IT0 ../lib/fx2utils.asm /^_IT0 = 0x0088$/;" d _IT0 ../lib/isr.asm /^_IT0 = 0x0088$/;" d _IT0 ../lib/timer.asm /^_IT0 = 0x0088$/;" d _IT0 ../lib/usb_common.asm /^_IT0 = 0x0088$/;" d _IT0 ../src/init_gpif.asm /^_IT0 = 0x0088$/;" d _IT0 ../src/radar_main.asm /^_IT0 = 0x0088$/;" d _IT0 ../src/usrp_common.asm /^_IT0 = 0x0088$/;" d _IT1 ../lib/fx2utils.asm /^_IT1 = 0x008a$/;" d _IT1 ../lib/isr.asm /^_IT1 = 0x008a$/;" d _IT1 ../lib/timer.asm /^_IT1 = 0x008a$/;" d _IT1 ../lib/usb_common.asm /^_IT1 = 0x008a$/;" d _IT1 ../src/init_gpif.asm /^_IT1 = 0x008a$/;" d _IT1 ../src/radar_main.asm /^_IT1 = 0x008a$/;" d _IT1 ../src/usrp_common.asm /^_IT1 = 0x008a$/;" d _InitData ../src/radar_gpif2.asm /^_InitData:$/;" l _LED0_OFF ../src/init_gpif.asm /^_LED0_OFF = 0x8100$/;" d _LED0_OFF ../src/radar_main.asm /^_LED0_OFF = 0x8100$/;" d _LED0_OFF ../src/usrp_common.asm /^_LED0_OFF = 0x8100$/;" d _LED0_ON ../src/init_gpif.asm /^_LED0_ON = 0x8000$/;" d _LED0_ON ../src/radar_main.asm /^_LED0_ON = 0x8000$/;" d _LED0_ON ../src/usrp_common.asm /^_LED0_ON = 0x8000$/;" d _LED1_OFF ../src/init_gpif.asm /^_LED1_OFF = 0x9100$/;" d _LED1_OFF ../src/radar_main.asm /^_LED1_OFF = 0x9100$/;" d _LED1_OFF ../src/usrp_common.asm /^_LED1_OFF = 0x9100$/;" d _LED1_ON ../src/init_gpif.asm /^_LED1_ON = 0x9000$/;" d _LED1_ON ../src/radar_main.asm /^_LED1_ON = 0x9000$/;" d _LED1_ON ../src/usrp_common.asm /^_LED1_ON = 0x9000$/;" d _LED2_OFF ../src/init_gpif.asm /^_LED2_OFF = 0xa100$/;" d _LED2_OFF ../src/radar_main.asm /^_LED2_OFF = 0xa100$/;" d _LED2_OFF ../src/usrp_common.asm /^_LED2_OFF = 0xa100$/;" d _LED2_ON ../src/init_gpif.asm /^_LED2_ON = 0xa000$/;" d _LED2_ON ../src/radar_main.asm /^_LED2_ON = 0xa000$/;" d _LED2_ON ../src/usrp_common.asm /^_LED2_ON = 0xa000$/;" d _LED3_OFF ../src/init_gpif.asm /^_LED3_OFF = 0xb100$/;" d _LED3_OFF ../src/radar_main.asm /^_LED3_OFF = 0xb100$/;" d _LED3_OFF ../src/usrp_common.asm /^_LED3_OFF = 0xb100$/;" d _LED3_ON ../src/init_gpif.asm /^_LED3_ON = 0xb000$/;" d _LED3_ON ../src/radar_main.asm /^_LED3_ON = 0xb000$/;" d _LED3_ON ../src/usrp_common.asm /^_LED3_ON = 0xb000$/;" d _MICROFRAME ../lib/fx2utils.asm /^_MICROFRAME = 0xe686$/;" d _MICROFRAME ../lib/isr.asm /^_MICROFRAME = 0xe686$/;" d _MICROFRAME ../lib/timer.asm /^_MICROFRAME = 0xe686$/;" d _MICROFRAME ../lib/usb_common.asm /^_MICROFRAME = 0xe686$/;" d _MICROFRAME ../src/init_gpif.asm /^_MICROFRAME = 0xe686$/;" d _MICROFRAME ../src/radar_main.asm /^_MICROFRAME = 0xe686$/;" d _MICROFRAME ../src/usrp_common.asm /^_MICROFRAME = 0xe686$/;" d _MPAGE ../lib/fx2utils.asm /^_MPAGE = 0x0092$/;" d _MPAGE ../lib/isr.asm /^_MPAGE = 0x0092$/;" d _MPAGE ../lib/timer.asm /^_MPAGE = 0x0092$/;" d _MPAGE ../lib/usb_common.asm /^_MPAGE = 0x0092$/;" d _MPAGE ../src/init_gpif.asm /^_MPAGE = 0x0092$/;" d _MPAGE ../src/radar_main.asm /^_MPAGE = 0x0092$/;" d _MPAGE ../src/usrp_common.asm /^_MPAGE = 0x0092$/;" d _NAKIE ../lib/fx2utils.asm /^_NAKIE = 0xe65a$/;" d _NAKIE ../lib/isr.asm /^_NAKIE = 0xe65a$/;" d _NAKIE ../lib/timer.asm /^_NAKIE = 0xe65a$/;" d _NAKIE ../lib/usb_common.asm /^_NAKIE = 0xe65a$/;" d _NAKIE ../src/init_gpif.asm /^_NAKIE = 0xe65a$/;" d _NAKIE ../src/radar_main.asm /^_NAKIE = 0xe65a$/;" d _NAKIE ../src/usrp_common.asm /^_NAKIE = 0xe65a$/;" d _NAKIRQ ../lib/fx2utils.asm /^_NAKIRQ = 0xe65b$/;" d _NAKIRQ ../lib/isr.asm /^_NAKIRQ = 0xe65b$/;" d _NAKIRQ ../lib/timer.asm /^_NAKIRQ = 0xe65b$/;" d _NAKIRQ ../lib/usb_common.asm /^_NAKIRQ = 0xe65b$/;" d _NAKIRQ ../src/init_gpif.asm /^_NAKIRQ = 0xe65b$/;" d _NAKIRQ ../src/radar_main.asm /^_NAKIRQ = 0xe65b$/;" d _NAKIRQ ../src/usrp_common.asm /^_NAKIRQ = 0xe65b$/;" d _OEA ../lib/fx2utils.asm /^_OEA = 0x00b2$/;" d _OEA ../lib/isr.asm /^_OEA = 0x00b2$/;" d _OEA ../lib/timer.asm /^_OEA = 0x00b2$/;" d _OEA ../lib/usb_common.asm /^_OEA = 0x00b2$/;" d _OEA ../src/init_gpif.asm /^_OEA = 0x00b2$/;" d _OEA ../src/radar_main.asm /^_OEA = 0x00b2$/;" d _OEA ../src/usrp_common.asm /^_OEA = 0x00b2$/;" d _OEB ../lib/fx2utils.asm /^_OEB = 0x00b3$/;" d _OEB ../lib/isr.asm /^_OEB = 0x00b3$/;" d _OEB ../lib/timer.asm /^_OEB = 0x00b3$/;" d _OEB ../lib/usb_common.asm /^_OEB = 0x00b3$/;" d _OEB ../src/init_gpif.asm /^_OEB = 0x00b3$/;" d _OEB ../src/radar_main.asm /^_OEB = 0x00b3$/;" d _OEB ../src/usrp_common.asm /^_OEB = 0x00b3$/;" d _OEC ../lib/fx2utils.asm /^_OEC = 0x00b4$/;" d _OEC ../lib/isr.asm /^_OEC = 0x00b4$/;" d _OEC ../lib/timer.asm /^_OEC = 0x00b4$/;" d _OEC ../lib/usb_common.asm /^_OEC = 0x00b4$/;" d _OEC ../src/init_gpif.asm /^_OEC = 0x00b4$/;" d _OEC ../src/radar_main.asm /^_OEC = 0x00b4$/;" d _OEC ../src/usrp_common.asm /^_OEC = 0x00b4$/;" d _OED ../lib/fx2utils.asm /^_OED = 0x00b5$/;" d _OED ../lib/isr.asm /^_OED = 0x00b5$/;" d _OED ../lib/timer.asm /^_OED = 0x00b5$/;" d _OED ../lib/usb_common.asm /^_OED = 0x00b5$/;" d _OED ../src/init_gpif.asm /^_OED = 0x00b5$/;" d _OED ../src/radar_main.asm /^_OED = 0x00b5$/;" d _OED ../src/usrp_common.asm /^_OED = 0x00b5$/;" d _OEE ../lib/fx2utils.asm /^_OEE = 0x00b6$/;" d _OEE ../lib/isr.asm /^_OEE = 0x00b6$/;" d _OEE ../lib/timer.asm /^_OEE = 0x00b6$/;" d _OEE ../lib/usb_common.asm /^_OEE = 0x00b6$/;" d _OEE ../src/init_gpif.asm /^_OEE = 0x00b6$/;" d _OEE ../src/radar_main.asm /^_OEE = 0x00b6$/;" d _OEE ../src/usrp_common.asm /^_OEE = 0x00b6$/;" d _OUTPKTEND ../lib/fx2utils.asm /^_OUTPKTEND = 0xe649$/;" d _OUTPKTEND ../lib/isr.asm /^_OUTPKTEND = 0xe649$/;" d _OUTPKTEND ../lib/timer.asm /^_OUTPKTEND = 0xe649$/;" d _OUTPKTEND ../lib/usb_common.asm /^_OUTPKTEND = 0xe649$/;" d _OUTPKTEND ../src/init_gpif.asm /^_OUTPKTEND = 0xe649$/;" d _OUTPKTEND ../src/radar_main.asm /^_OUTPKTEND = 0xe649$/;" d _OUTPKTEND ../src/usrp_common.asm /^_OUTPKTEND = 0xe649$/;" d _OV ../lib/fx2utils.asm /^_OV = 0x00d2$/;" d _OV ../lib/isr.asm /^_OV = 0x00d2$/;" d _OV ../lib/timer.asm /^_OV = 0x00d2$/;" d _OV ../lib/usb_common.asm /^_OV = 0x00d2$/;" d _OV ../src/init_gpif.asm /^_OV = 0x00d2$/;" d _OV ../src/radar_main.asm /^_OV = 0x00d2$/;" d _OV ../src/usrp_common.asm /^_OV = 0x00d2$/;" d _P ../lib/fx2utils.asm /^_P = 0x00d0$/;" d _P ../lib/isr.asm /^_P = 0x00d0$/;" d _P ../lib/timer.asm /^_P = 0x00d0$/;" d _P ../lib/usb_common.asm /^_P = 0x00d0$/;" d _P ../src/init_gpif.asm /^_P = 0x00d0$/;" d _P ../src/radar_main.asm /^_P = 0x00d0$/;" d _P ../src/usrp_common.asm /^_P = 0x00d0$/;" d _PCON ../lib/fx2utils.asm /^_PCON = 0x0087$/;" d _PCON ../lib/isr.asm /^_PCON = 0x0087$/;" d _PCON ../lib/timer.asm /^_PCON = 0x0087$/;" d _PCON ../lib/usb_common.asm /^_PCON = 0x0087$/;" d _PCON ../src/init_gpif.asm /^_PCON = 0x0087$/;" d _PCON ../src/radar_main.asm /^_PCON = 0x0087$/;" d _PCON ../src/usrp_common.asm /^_PCON = 0x0087$/;" d _PI2C ../lib/fx2utils.asm /^_PI2C = 0x00f9$/;" d _PI2C ../lib/isr.asm /^_PI2C = 0x00f9$/;" d _PI2C ../lib/timer.asm /^_PI2C = 0x00f9$/;" d _PI2C ../lib/usb_common.asm /^_PI2C = 0x00f9$/;" d _PI2C ../src/init_gpif.asm /^_PI2C = 0x00f9$/;" d _PI2C ../src/radar_main.asm /^_PI2C = 0x00f9$/;" d _PI2C ../src/usrp_common.asm /^_PI2C = 0x00f9$/;" d _PINFLAGSAB ../lib/fx2utils.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSAB ../lib/isr.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSAB ../lib/timer.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSAB ../lib/usb_common.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSAB ../src/init_gpif.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSAB ../src/radar_main.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSAB ../src/usrp_common.asm /^_PINFLAGSAB = 0xe602$/;" d _PINFLAGSCD ../lib/fx2utils.asm /^_PINFLAGSCD = 0xe603$/;" d _PINFLAGSCD ../lib/isr.asm /^_PINFLAGSCD = 0xe603$/;" d _PINFLAGSCD ../lib/timer.asm /^_PINFLAGSCD = 0xe603$/;" d _PINFLAGSCD ../lib/usb_common.asm /^_PINFLAGSCD = 0xe603$/;" d _PINFLAGSCD ../src/init_gpif.asm /^_PINFLAGSCD = 0xe603$/;" d _PINFLAGSCD ../src/radar_main.asm /^_PINFLAGSCD = 0xe603$/;" d _PINFLAGSCD ../src/usrp_common.asm /^_PINFLAGSCD = 0xe603$/;" d _PORTACFG ../lib/fx2utils.asm /^_PORTACFG = 0xe670$/;" d _PORTACFG ../lib/isr.asm /^_PORTACFG = 0xe670$/;" d _PORTACFG ../lib/timer.asm /^_PORTACFG = 0xe670$/;" d _PORTACFG ../lib/usb_common.asm /^_PORTACFG = 0xe670$/;" d _PORTACFG ../src/init_gpif.asm /^_PORTACFG = 0xe670$/;" d _PORTACFG ../src/radar_main.asm /^_PORTACFG = 0xe670$/;" d _PORTACFG ../src/usrp_common.asm /^_PORTACFG = 0xe670$/;" d _PORTCCFG ../lib/fx2utils.asm /^_PORTCCFG = 0xe671$/;" d _PORTCCFG ../lib/isr.asm /^_PORTCCFG = 0xe671$/;" d _PORTCCFG ../lib/timer.asm /^_PORTCCFG = 0xe671$/;" d _PORTCCFG ../lib/usb_common.asm /^_PORTCCFG = 0xe671$/;" d _PORTCCFG ../src/init_gpif.asm /^_PORTCCFG = 0xe671$/;" d _PORTCCFG ../src/radar_main.asm /^_PORTCCFG = 0xe671$/;" d _PORTCCFG ../src/usrp_common.asm /^_PORTCCFG = 0xe671$/;" d _PORTECFG ../lib/fx2utils.asm /^_PORTECFG = 0xe672$/;" d _PORTECFG ../lib/isr.asm /^_PORTECFG = 0xe672$/;" d _PORTECFG ../lib/timer.asm /^_PORTECFG = 0xe672$/;" d _PORTECFG ../lib/usb_common.asm /^_PORTECFG = 0xe672$/;" d _PORTECFG ../src/init_gpif.asm /^_PORTECFG = 0xe672$/;" d _PORTECFG ../src/radar_main.asm /^_PORTECFG = 0xe672$/;" d _PORTECFG ../src/usrp_common.asm /^_PORTECFG = 0xe672$/;" d _PS0 ../lib/fx2utils.asm /^_PS0 = 0x00bc$/;" d _PS0 ../lib/isr.asm /^_PS0 = 0x00bc$/;" d _PS0 ../lib/timer.asm /^_PS0 = 0x00bc$/;" d _PS0 ../lib/usb_common.asm /^_PS0 = 0x00bc$/;" d _PS0 ../src/init_gpif.asm /^_PS0 = 0x00bc$/;" d _PS0 ../src/radar_main.asm /^_PS0 = 0x00bc$/;" d _PS0 ../src/usrp_common.asm /^_PS0 = 0x00bc$/;" d _PS1 ../lib/fx2utils.asm /^_PS1 = 0x00be$/;" d _PS1 ../lib/isr.asm /^_PS1 = 0x00be$/;" d _PS1 ../lib/timer.asm /^_PS1 = 0x00be$/;" d _PS1 ../lib/usb_common.asm /^_PS1 = 0x00be$/;" d _PS1 ../src/init_gpif.asm /^_PS1 = 0x00be$/;" d _PS1 ../src/radar_main.asm /^_PS1 = 0x00be$/;" d _PS1 ../src/usrp_common.asm /^_PS1 = 0x00be$/;" d _PSW ../lib/fx2utils.asm /^_PSW = 0x00d0$/;" d _PSW ../lib/isr.asm /^_PSW = 0x00d0$/;" d _PSW ../lib/timer.asm /^_PSW = 0x00d0$/;" d _PSW ../lib/usb_common.asm /^_PSW = 0x00d0$/;" d _PSW ../src/init_gpif.asm /^_PSW = 0x00d0$/;" d _PSW ../src/radar_main.asm /^_PSW = 0x00d0$/;" d _PSW ../src/usrp_common.asm /^_PSW = 0x00d0$/;" d _PT0 ../lib/fx2utils.asm /^_PT0 = 0x00b9$/;" d _PT0 ../lib/isr.asm /^_PT0 = 0x00b9$/;" d _PT0 ../lib/timer.asm /^_PT0 = 0x00b9$/;" d _PT0 ../lib/usb_common.asm /^_PT0 = 0x00b9$/;" d _PT0 ../src/init_gpif.asm /^_PT0 = 0x00b9$/;" d _PT0 ../src/radar_main.asm /^_PT0 = 0x00b9$/;" d _PT0 ../src/usrp_common.asm /^_PT0 = 0x00b9$/;" d _PT1 ../lib/fx2utils.asm /^_PT1 = 0x00bb$/;" d _PT1 ../lib/isr.asm /^_PT1 = 0x00bb$/;" d _PT1 ../lib/timer.asm /^_PT1 = 0x00bb$/;" d _PT1 ../lib/usb_common.asm /^_PT1 = 0x00bb$/;" d _PT1 ../src/init_gpif.asm /^_PT1 = 0x00bb$/;" d _PT1 ../src/radar_main.asm /^_PT1 = 0x00bb$/;" d _PT1 ../src/usrp_common.asm /^_PT1 = 0x00bb$/;" d _PT2 ../lib/fx2utils.asm /^_PT2 = 0x00bd$/;" d _PT2 ../lib/isr.asm /^_PT2 = 0x00bd$/;" d _PT2 ../lib/timer.asm /^_PT2 = 0x00bd$/;" d _PT2 ../lib/usb_common.asm /^_PT2 = 0x00bd$/;" d _PT2 ../src/init_gpif.asm /^_PT2 = 0x00bd$/;" d _PT2 ../src/radar_main.asm /^_PT2 = 0x00bd$/;" d _PT2 ../src/usrp_common.asm /^_PT2 = 0x00bd$/;" d _PUSB ../lib/fx2utils.asm /^_PUSB = 0x00f8$/;" d _PUSB ../lib/isr.asm /^_PUSB = 0x00f8$/;" d _PUSB ../lib/timer.asm /^_PUSB = 0x00f8$/;" d _PUSB ../lib/usb_common.asm /^_PUSB = 0x00f8$/;" d _PUSB ../src/init_gpif.asm /^_PUSB = 0x00f8$/;" d _PUSB ../src/radar_main.asm /^_PUSB = 0x00f8$/;" d _PUSB ../src/usrp_common.asm /^_PUSB = 0x00f8$/;" d _PX0 ../lib/fx2utils.asm /^_PX0 = 0x00b8$/;" d _PX0 ../lib/isr.asm /^_PX0 = 0x00b8$/;" d _PX0 ../lib/timer.asm /^_PX0 = 0x00b8$/;" d _PX0 ../lib/usb_common.asm /^_PX0 = 0x00b8$/;" d _PX0 ../src/init_gpif.asm /^_PX0 = 0x00b8$/;" d _PX0 ../src/radar_main.asm /^_PX0 = 0x00b8$/;" d _PX0 ../src/usrp_common.asm /^_PX0 = 0x00b8$/;" d _PX1 ../lib/fx2utils.asm /^_PX1 = 0x00ba$/;" d _PX1 ../lib/isr.asm /^_PX1 = 0x00ba$/;" d _PX1 ../lib/timer.asm /^_PX1 = 0x00ba$/;" d _PX1 ../lib/usb_common.asm /^_PX1 = 0x00ba$/;" d _PX1 ../src/init_gpif.asm /^_PX1 = 0x00ba$/;" d _PX1 ../src/radar_main.asm /^_PX1 = 0x00ba$/;" d _PX1 ../src/usrp_common.asm /^_PX1 = 0x00ba$/;" d _RADAR_REV1_REGS_H_ ../include/radar_rev1_regs.h 27;" d _RB8 ../lib/fx2utils.asm /^_RB8 = 0x009a$/;" d _RB8 ../lib/isr.asm /^_RB8 = 0x009a$/;" d _RB8 ../lib/timer.asm /^_RB8 = 0x009a$/;" d _RB8 ../lib/usb_common.asm /^_RB8 = 0x009a$/;" d _RB8 ../src/init_gpif.asm /^_RB8 = 0x009a$/;" d _RB8 ../src/radar_main.asm /^_RB8 = 0x009a$/;" d _RB8 ../src/usrp_common.asm /^_RB8 = 0x009a$/;" d _RB81 ../lib/fx2utils.asm /^_RB81 = 0x00c2$/;" d _RB81 ../lib/isr.asm /^_RB81 = 0x00c2$/;" d _RB81 ../lib/timer.asm /^_RB81 = 0x00c2$/;" d _RB81 ../lib/usb_common.asm /^_RB81 = 0x00c2$/;" d _RB81 ../src/init_gpif.asm /^_RB81 = 0x00c2$/;" d _RB81 ../src/radar_main.asm /^_RB81 = 0x00c2$/;" d _RB81 ../src/usrp_common.asm /^_RB81 = 0x00c2$/;" d _RCAP2H ../lib/fx2utils.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2H ../lib/isr.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2H ../lib/timer.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2H ../lib/usb_common.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2H ../src/init_gpif.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2H ../src/radar_main.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2H ../src/usrp_common.asm /^_RCAP2H = 0x00cb$/;" d _RCAP2L ../lib/fx2utils.asm /^_RCAP2L = 0x00ca$/;" d _RCAP2L ../lib/isr.asm /^_RCAP2L = 0x00ca$/;" d _RCAP2L ../lib/timer.asm /^_RCAP2L = 0x00ca$/;" d _RCAP2L ../lib/usb_common.asm /^_RCAP2L = 0x00ca$/;" d _RCAP2L ../src/init_gpif.asm /^_RCAP2L = 0x00ca$/;" d _RCAP2L ../src/radar_main.asm /^_RCAP2L = 0x00ca$/;" d _RCAP2L ../src/usrp_common.asm /^_RCAP2L = 0x00ca$/;" d _RCLK ../lib/fx2utils.asm /^_RCLK = 0x00cd$/;" d _RCLK ../lib/isr.asm /^_RCLK = 0x00cd$/;" d _RCLK ../lib/timer.asm /^_RCLK = 0x00cd$/;" d _RCLK ../lib/usb_common.asm /^_RCLK = 0x00cd$/;" d _RCLK ../src/init_gpif.asm /^_RCLK = 0x00cd$/;" d _RCLK ../src/radar_main.asm /^_RCLK = 0x00cd$/;" d _RCLK ../src/usrp_common.asm /^_RCLK = 0x00cd$/;" d _REN ../lib/fx2utils.asm /^_REN = 0x009c$/;" d _REN ../lib/isr.asm /^_REN = 0x009c$/;" d _REN ../lib/timer.asm /^_REN = 0x009c$/;" d _REN ../lib/usb_common.asm /^_REN = 0x009c$/;" d _REN ../src/init_gpif.asm /^_REN = 0x009c$/;" d _REN ../src/radar_main.asm /^_REN = 0x009c$/;" d _REN ../src/usrp_common.asm /^_REN = 0x009c$/;" d _REN1 ../lib/fx2utils.asm /^_REN1 = 0x00c4$/;" d _REN1 ../lib/isr.asm /^_REN1 = 0x00c4$/;" d _REN1 ../lib/timer.asm /^_REN1 = 0x00c4$/;" d _REN1 ../lib/usb_common.asm /^_REN1 = 0x00c4$/;" d _REN1 ../src/init_gpif.asm /^_REN1 = 0x00c4$/;" d _REN1 ../src/radar_main.asm /^_REN1 = 0x00c4$/;" d _REN1 ../src/usrp_common.asm /^_REN1 = 0x00c4$/;" d _RESI ../lib/fx2utils.asm /^_RESI = 0x00dc$/;" d _RESI ../lib/isr.asm /^_RESI = 0x00dc$/;" d _RESI ../lib/timer.asm /^_RESI = 0x00dc$/;" d _RESI ../lib/usb_common.asm /^_RESI = 0x00dc$/;" d _RESI ../src/init_gpif.asm /^_RESI = 0x00dc$/;" d _RESI ../src/radar_main.asm /^_RESI = 0x00dc$/;" d _RESI ../src/usrp_common.asm /^_RESI = 0x00dc$/;" d _RES_WAVEDATA_END ../lib/fx2utils.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _RES_WAVEDATA_END ../lib/isr.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _RES_WAVEDATA_END ../lib/timer.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _RES_WAVEDATA_END ../lib/usb_common.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _RES_WAVEDATA_END ../src/init_gpif.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _RES_WAVEDATA_END ../src/radar_main.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _RES_WAVEDATA_END ../src/usrp_common.asm /^_RES_WAVEDATA_END = 0xe480$/;" d _REVCTL ../lib/fx2utils.asm /^_REVCTL = 0xe60b$/;" d _REVCTL ../lib/isr.asm /^_REVCTL = 0xe60b$/;" d _REVCTL ../lib/timer.asm /^_REVCTL = 0xe60b$/;" d _REVCTL ../lib/usb_common.asm /^_REVCTL = 0xe60b$/;" d _REVCTL ../src/init_gpif.asm /^_REVCTL = 0xe60b$/;" d _REVCTL ../src/radar_main.asm /^_REVCTL = 0xe60b$/;" d _REVCTL ../src/usrp_common.asm /^_REVCTL = 0xe60b$/;" d _REVID ../lib/fx2utils.asm /^_REVID = 0xe60a$/;" d _REVID ../lib/isr.asm /^_REVID = 0xe60a$/;" d _REVID ../lib/timer.asm /^_REVID = 0xe60a$/;" d _REVID ../lib/usb_common.asm /^_REVID = 0xe60a$/;" d _REVID ../src/init_gpif.asm /^_REVID = 0xe60a$/;" d _REVID ../src/radar_main.asm /^_REVID = 0xe60a$/;" d _REVID ../src/usrp_common.asm /^_REVID = 0xe60a$/;" d _RI ../lib/fx2utils.asm /^_RI = 0x0098$/;" d _RI ../lib/isr.asm /^_RI = 0x0098$/;" d _RI ../lib/timer.asm /^_RI = 0x0098$/;" d _RI ../lib/usb_common.asm /^_RI = 0x0098$/;" d _RI ../src/init_gpif.asm /^_RI = 0x0098$/;" d _RI ../src/radar_main.asm /^_RI = 0x0098$/;" d _RI ../src/usrp_common.asm /^_RI = 0x0098$/;" d _RI1 ../lib/fx2utils.asm /^_RI1 = 0x00c0$/;" d _RI1 ../lib/isr.asm /^_RI1 = 0x00c0$/;" d _RI1 ../lib/timer.asm /^_RI1 = 0x00c0$/;" d _RI1 ../lib/usb_common.asm /^_RI1 = 0x00c0$/;" d _RI1 ../src/init_gpif.asm /^_RI1 = 0x00c0$/;" d _RI1 ../src/radar_main.asm /^_RI1 = 0x00c0$/;" d _RI1 ../src/usrp_common.asm /^_RI1 = 0x00c0$/;" d _RS0 ../lib/fx2utils.asm /^_RS0 = 0x00d3$/;" d _RS0 ../lib/isr.asm /^_RS0 = 0x00d3$/;" d _RS0 ../lib/timer.asm /^_RS0 = 0x00d3$/;" d _RS0 ../lib/usb_common.asm /^_RS0 = 0x00d3$/;" d _RS0 ../src/init_gpif.asm /^_RS0 = 0x00d3$/;" d _RS0 ../src/radar_main.asm /^_RS0 = 0x00d3$/;" d _RS0 ../src/usrp_common.asm /^_RS0 = 0x00d3$/;" d _RS1 ../lib/fx2utils.asm /^_RS1 = 0x00d4$/;" d _RS1 ../lib/isr.asm /^_RS1 = 0x00d4$/;" d _RS1 ../lib/timer.asm /^_RS1 = 0x00d4$/;" d _RS1 ../lib/usb_common.asm /^_RS1 = 0x00d4$/;" d _RS1 ../src/init_gpif.asm /^_RS1 = 0x00d4$/;" d _RS1 ../src/radar_main.asm /^_RS1 = 0x00d4$/;" d _RS1 ../src/usrp_common.asm /^_RS1 = 0x00d4$/;" d _SBUF0 ../lib/fx2utils.asm /^_SBUF0 = 0x0099$/;" d _SBUF0 ../lib/isr.asm /^_SBUF0 = 0x0099$/;" d _SBUF0 ../lib/timer.asm /^_SBUF0 = 0x0099$/;" d _SBUF0 ../lib/usb_common.asm /^_SBUF0 = 0x0099$/;" d _SBUF0 ../src/init_gpif.asm /^_SBUF0 = 0x0099$/;" d _SBUF0 ../src/radar_main.asm /^_SBUF0 = 0x0099$/;" d _SBUF0 ../src/usrp_common.asm /^_SBUF0 = 0x0099$/;" d _SBUF1 ../lib/fx2utils.asm /^_SBUF1 = 0x00c1$/;" d _SBUF1 ../lib/isr.asm /^_SBUF1 = 0x00c1$/;" d _SBUF1 ../lib/timer.asm /^_SBUF1 = 0x00c1$/;" d _SBUF1 ../lib/usb_common.asm /^_SBUF1 = 0x00c1$/;" d _SBUF1 ../src/init_gpif.asm /^_SBUF1 = 0x00c1$/;" d _SBUF1 ../src/radar_main.asm /^_SBUF1 = 0x00c1$/;" d _SBUF1 ../src/usrp_common.asm /^_SBUF1 = 0x00c1$/;" d _SCON0 ../lib/fx2utils.asm /^_SCON0 = 0x0098$/;" d _SCON0 ../lib/isr.asm /^_SCON0 = 0x0098$/;" d _SCON0 ../lib/timer.asm /^_SCON0 = 0x0098$/;" d _SCON0 ../lib/usb_common.asm /^_SCON0 = 0x0098$/;" d _SCON0 ../src/init_gpif.asm /^_SCON0 = 0x0098$/;" d _SCON0 ../src/radar_main.asm /^_SCON0 = 0x0098$/;" d _SCON0 ../src/usrp_common.asm /^_SCON0 = 0x0098$/;" d _SCON1 ../lib/fx2utils.asm /^_SCON1 = 0x00c0$/;" d _SCON1 ../lib/isr.asm /^_SCON1 = 0x00c0$/;" d _SCON1 ../lib/timer.asm /^_SCON1 = 0x00c0$/;" d _SCON1 ../lib/usb_common.asm /^_SCON1 = 0x00c0$/;" d _SCON1 ../src/init_gpif.asm /^_SCON1 = 0x00c0$/;" d _SCON1 ../src/radar_main.asm /^_SCON1 = 0x00c0$/;" d _SCON1 ../src/usrp_common.asm /^_SCON1 = 0x00c0$/;" d _SEL ../lib/fx2utils.asm /^_SEL = 0x0086$/;" d _SEL ../lib/isr.asm /^_SEL = 0x0086$/;" d _SEL ../lib/timer.asm /^_SEL = 0x0086$/;" d _SEL ../lib/usb_common.asm /^_SEL = 0x0086$/;" d _SEL ../src/init_gpif.asm /^_SEL = 0x0086$/;" d _SEL ../src/radar_main.asm /^_SEL = 0x0086$/;" d _SEL ../src/usrp_common.asm /^_SEL = 0x0086$/;" d _SETUPDAT ../lib/fx2utils.asm /^_SETUPDAT = 0xe6b8$/;" d _SETUPDAT ../lib/isr.asm /^_SETUPDAT = 0xe6b8$/;" d _SETUPDAT ../lib/timer.asm /^_SETUPDAT = 0xe6b8$/;" d _SETUPDAT ../lib/usb_common.asm /^_SETUPDAT = 0xe6b8$/;" d _SETUPDAT ../src/init_gpif.asm /^_SETUPDAT = 0xe6b8$/;" d _SETUPDAT ../src/radar_main.asm /^_SETUPDAT = 0xe6b8$/;" d _SETUPDAT ../src/usrp_common.asm /^_SETUPDAT = 0xe6b8$/;" d _SM0 ../lib/fx2utils.asm /^_SM0 = 0x009f$/;" d _SM0 ../lib/isr.asm /^_SM0 = 0x009f$/;" d _SM0 ../lib/timer.asm /^_SM0 = 0x009f$/;" d _SM0 ../lib/usb_common.asm /^_SM0 = 0x009f$/;" d _SM0 ../src/init_gpif.asm /^_SM0 = 0x009f$/;" d _SM0 ../src/radar_main.asm /^_SM0 = 0x009f$/;" d _SM0 ../src/usrp_common.asm /^_SM0 = 0x009f$/;" d _SM01 ../lib/fx2utils.asm /^_SM01 = 0x00c7$/;" d _SM01 ../lib/isr.asm /^_SM01 = 0x00c7$/;" d _SM01 ../lib/timer.asm /^_SM01 = 0x00c7$/;" d _SM01 ../lib/usb_common.asm /^_SM01 = 0x00c7$/;" d _SM01 ../src/init_gpif.asm /^_SM01 = 0x00c7$/;" d _SM01 ../src/radar_main.asm /^_SM01 = 0x00c7$/;" d _SM01 ../src/usrp_common.asm /^_SM01 = 0x00c7$/;" d _SM1 ../lib/fx2utils.asm /^_SM1 = 0x009e$/;" d _SM1 ../lib/isr.asm /^_SM1 = 0x009e$/;" d _SM1 ../lib/timer.asm /^_SM1 = 0x009e$/;" d _SM1 ../lib/usb_common.asm /^_SM1 = 0x009e$/;" d _SM1 ../src/init_gpif.asm /^_SM1 = 0x009e$/;" d _SM1 ../src/radar_main.asm /^_SM1 = 0x009e$/;" d _SM1 ../src/usrp_common.asm /^_SM1 = 0x009e$/;" d _SM11 ../lib/fx2utils.asm /^_SM11 = 0x00c6$/;" d _SM11 ../lib/isr.asm /^_SM11 = 0x00c6$/;" d _SM11 ../lib/timer.asm /^_SM11 = 0x00c6$/;" d _SM11 ../lib/usb_common.asm /^_SM11 = 0x00c6$/;" d _SM11 ../src/init_gpif.asm /^_SM11 = 0x00c6$/;" d _SM11 ../src/radar_main.asm /^_SM11 = 0x00c6$/;" d _SM11 ../src/usrp_common.asm /^_SM11 = 0x00c6$/;" d _SM2 ../lib/fx2utils.asm /^_SM2 = 0x009d$/;" d _SM2 ../lib/isr.asm /^_SM2 = 0x009d$/;" d _SM2 ../lib/timer.asm /^_SM2 = 0x009d$/;" d _SM2 ../lib/usb_common.asm /^_SM2 = 0x009d$/;" d _SM2 ../src/init_gpif.asm /^_SM2 = 0x009d$/;" d _SM2 ../src/radar_main.asm /^_SM2 = 0x009d$/;" d _SM2 ../src/usrp_common.asm /^_SM2 = 0x009d$/;" d _SM21 ../lib/fx2utils.asm /^_SM21 = 0x00c5$/;" d _SM21 ../lib/isr.asm /^_SM21 = 0x00c5$/;" d _SM21 ../lib/timer.asm /^_SM21 = 0x00c5$/;" d _SM21 ../lib/usb_common.asm /^_SM21 = 0x00c5$/;" d _SM21 ../src/init_gpif.asm /^_SM21 = 0x00c5$/;" d _SM21 ../src/radar_main.asm /^_SM21 = 0x00c5$/;" d _SM21 ../src/usrp_common.asm /^_SM21 = 0x00c5$/;" d _SMOD1 ../lib/fx2utils.asm /^_SMOD1 = 0x00df$/;" d _SMOD1 ../lib/isr.asm /^_SMOD1 = 0x00df$/;" d _SMOD1 ../lib/timer.asm /^_SMOD1 = 0x00df$/;" d _SMOD1 ../lib/usb_common.asm /^_SMOD1 = 0x00df$/;" d _SMOD1 ../src/init_gpif.asm /^_SMOD1 = 0x00df$/;" d _SMOD1 ../src/radar_main.asm /^_SMOD1 = 0x00df$/;" d _SMOD1 ../src/usrp_common.asm /^_SMOD1 = 0x00df$/;" d _SP ../lib/fx2utils.asm /^_SP = 0x0081$/;" d _SP ../lib/isr.asm /^_SP = 0x0081$/;" d _SP ../lib/timer.asm /^_SP = 0x0081$/;" d _SP ../lib/usb_common.asm /^_SP = 0x0081$/;" d _SP ../src/init_gpif.asm /^_SP = 0x0081$/;" d _SP ../src/radar_main.asm /^_SP = 0x0081$/;" d _SP ../src/usrp_common.asm /^_SP = 0x0081$/;" d _SUDPTRCTL ../lib/fx2utils.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRCTL ../lib/isr.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRCTL ../lib/timer.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRCTL ../lib/usb_common.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRCTL ../src/init_gpif.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRCTL ../src/radar_main.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRCTL ../src/usrp_common.asm /^_SUDPTRCTL = 0xe6b5$/;" d _SUDPTRH ../lib/fx2utils.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRH ../lib/isr.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRH ../lib/timer.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRH ../lib/usb_common.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRH ../src/init_gpif.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRH ../src/radar_main.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRH ../src/usrp_common.asm /^_SUDPTRH = 0xe6b3$/;" d _SUDPTRL ../lib/fx2utils.asm /^_SUDPTRL = 0xe6b4$/;" d _SUDPTRL ../lib/isr.asm /^_SUDPTRL = 0xe6b4$/;" d _SUDPTRL ../lib/timer.asm /^_SUDPTRL = 0xe6b4$/;" d _SUDPTRL ../lib/usb_common.asm /^_SUDPTRL = 0xe6b4$/;" d _SUDPTRL ../src/init_gpif.asm /^_SUDPTRL = 0xe6b4$/;" d _SUDPTRL ../src/radar_main.asm /^_SUDPTRL = 0xe6b4$/;" d _SUDPTRL ../src/usrp_common.asm /^_SUDPTRL = 0xe6b4$/;" d _SUSPEND ../lib/fx2utils.asm /^_SUSPEND = 0xe681$/;" d _SUSPEND ../lib/isr.asm /^_SUSPEND = 0xe681$/;" d _SUSPEND ../lib/timer.asm /^_SUSPEND = 0xe681$/;" d _SUSPEND ../lib/usb_common.asm /^_SUSPEND = 0xe681$/;" d _SUSPEND ../src/init_gpif.asm /^_SUSPEND = 0xe681$/;" d _SUSPEND ../src/radar_main.asm /^_SUSPEND = 0xe681$/;" d _SUSPEND ../src/usrp_common.asm /^_SUSPEND = 0xe681$/;" d _SYNCDELAY_H_ ../include/syncdelay.h 23;" d _T2CON ../lib/fx2utils.asm /^_T2CON = 0x00c8$/;" d _T2CON ../lib/isr.asm /^_T2CON = 0x00c8$/;" d _T2CON ../lib/timer.asm /^_T2CON = 0x00c8$/;" d _T2CON ../lib/usb_common.asm /^_T2CON = 0x00c8$/;" d _T2CON ../src/init_gpif.asm /^_T2CON = 0x00c8$/;" d _T2CON ../src/radar_main.asm /^_T2CON = 0x00c8$/;" d _T2CON ../src/usrp_common.asm /^_T2CON = 0x00c8$/;" d _TB8 ../lib/fx2utils.asm /^_TB8 = 0x009b$/;" d _TB8 ../lib/isr.asm /^_TB8 = 0x009b$/;" d _TB8 ../lib/timer.asm /^_TB8 = 0x009b$/;" d _TB8 ../lib/usb_common.asm /^_TB8 = 0x009b$/;" d _TB8 ../src/init_gpif.asm /^_TB8 = 0x009b$/;" d _TB8 ../src/radar_main.asm /^_TB8 = 0x009b$/;" d _TB8 ../src/usrp_common.asm /^_TB8 = 0x009b$/;" d _TB81 ../lib/fx2utils.asm /^_TB81 = 0x00c3$/;" d _TB81 ../lib/isr.asm /^_TB81 = 0x00c3$/;" d _TB81 ../lib/timer.asm /^_TB81 = 0x00c3$/;" d _TB81 ../lib/usb_common.asm /^_TB81 = 0x00c3$/;" d _TB81 ../src/init_gpif.asm /^_TB81 = 0x00c3$/;" d _TB81 ../src/radar_main.asm /^_TB81 = 0x00c3$/;" d _TB81 ../src/usrp_common.asm /^_TB81 = 0x00c3$/;" d _TCLK ../lib/fx2utils.asm /^_TCLK = 0x00cc$/;" d _TCLK ../lib/isr.asm /^_TCLK = 0x00cc$/;" d _TCLK ../lib/timer.asm /^_TCLK = 0x00cc$/;" d _TCLK ../lib/usb_common.asm /^_TCLK = 0x00cc$/;" d _TCLK ../src/init_gpif.asm /^_TCLK = 0x00cc$/;" d _TCLK ../src/radar_main.asm /^_TCLK = 0x00cc$/;" d _TCLK ../src/usrp_common.asm /^_TCLK = 0x00cc$/;" d _TCON ../lib/fx2utils.asm /^_TCON = 0x0088$/;" d _TCON ../lib/isr.asm /^_TCON = 0x0088$/;" d _TCON ../lib/timer.asm /^_TCON = 0x0088$/;" d _TCON ../lib/usb_common.asm /^_TCON = 0x0088$/;" d _TCON ../src/init_gpif.asm /^_TCON = 0x0088$/;" d _TCON ../src/radar_main.asm /^_TCON = 0x0088$/;" d _TCON ../src/usrp_common.asm /^_TCON = 0x0088$/;" d _TESTCFG ../lib/fx2utils.asm /^_TESTCFG = 0xe6f9$/;" d _TESTCFG ../lib/isr.asm /^_TESTCFG = 0xe6f9$/;" d _TESTCFG ../lib/timer.asm /^_TESTCFG = 0xe6f9$/;" d _TESTCFG ../lib/usb_common.asm /^_TESTCFG = 0xe6f9$/;" d _TESTCFG ../src/init_gpif.asm /^_TESTCFG = 0xe6f9$/;" d _TESTCFG ../src/radar_main.asm /^_TESTCFG = 0xe6f9$/;" d _TESTCFG ../src/usrp_common.asm /^_TESTCFG = 0xe6f9$/;" d _TF0 ../lib/fx2utils.asm /^_TF0 = 0x008d$/;" d _TF0 ../lib/isr.asm /^_TF0 = 0x008d$/;" d _TF0 ../lib/timer.asm /^_TF0 = 0x008d$/;" d _TF0 ../lib/usb_common.asm /^_TF0 = 0x008d$/;" d _TF0 ../src/init_gpif.asm /^_TF0 = 0x008d$/;" d _TF0 ../src/radar_main.asm /^_TF0 = 0x008d$/;" d _TF0 ../src/usrp_common.asm /^_TF0 = 0x008d$/;" d _TF1 ../lib/fx2utils.asm /^_TF1 = 0x008f$/;" d _TF1 ../lib/isr.asm /^_TF1 = 0x008f$/;" d _TF1 ../lib/timer.asm /^_TF1 = 0x008f$/;" d _TF1 ../lib/usb_common.asm /^_TF1 = 0x008f$/;" d _TF1 ../src/init_gpif.asm /^_TF1 = 0x008f$/;" d _TF1 ../src/radar_main.asm /^_TF1 = 0x008f$/;" d _TF1 ../src/usrp_common.asm /^_TF1 = 0x008f$/;" d _TF2 ../lib/fx2utils.asm /^_TF2 = 0x00cf$/;" d _TF2 ../lib/isr.asm /^_TF2 = 0x00cf$/;" d _TF2 ../lib/timer.asm /^_TF2 = 0x00cf$/;" d _TF2 ../lib/usb_common.asm /^_TF2 = 0x00cf$/;" d _TF2 ../src/init_gpif.asm /^_TF2 = 0x00cf$/;" d _TF2 ../src/radar_main.asm /^_TF2 = 0x00cf$/;" d _TF2 ../src/usrp_common.asm /^_TF2 = 0x00cf$/;" d _TH0 ../lib/fx2utils.asm /^_TH0 = 0x008c$/;" d _TH0 ../lib/isr.asm /^_TH0 = 0x008c$/;" d _TH0 ../lib/timer.asm /^_TH0 = 0x008c$/;" d _TH0 ../lib/usb_common.asm /^_TH0 = 0x008c$/;" d _TH0 ../src/init_gpif.asm /^_TH0 = 0x008c$/;" d _TH0 ../src/radar_main.asm /^_TH0 = 0x008c$/;" d _TH0 ../src/usrp_common.asm /^_TH0 = 0x008c$/;" d _TH1 ../lib/fx2utils.asm /^_TH1 = 0x008d$/;" d _TH1 ../lib/isr.asm /^_TH1 = 0x008d$/;" d _TH1 ../lib/timer.asm /^_TH1 = 0x008d$/;" d _TH1 ../lib/usb_common.asm /^_TH1 = 0x008d$/;" d _TH1 ../src/init_gpif.asm /^_TH1 = 0x008d$/;" d _TH1 ../src/radar_main.asm /^_TH1 = 0x008d$/;" d _TH1 ../src/usrp_common.asm /^_TH1 = 0x008d$/;" d _TH2 ../lib/fx2utils.asm /^_TH2 = 0x00cd$/;" d _TH2 ../lib/isr.asm /^_TH2 = 0x00cd$/;" d _TH2 ../lib/timer.asm /^_TH2 = 0x00cd$/;" d _TH2 ../lib/usb_common.asm /^_TH2 = 0x00cd$/;" d _TH2 ../src/init_gpif.asm /^_TH2 = 0x00cd$/;" d _TH2 ../src/radar_main.asm /^_TH2 = 0x00cd$/;" d _TH2 ../src/usrp_common.asm /^_TH2 = 0x00cd$/;" d _TI ../lib/fx2utils.asm /^_TI = 0x0099$/;" d _TI ../lib/isr.asm /^_TI = 0x0099$/;" d _TI ../lib/timer.asm /^_TI = 0x0099$/;" d _TI ../lib/usb_common.asm /^_TI = 0x0099$/;" d _TI ../src/init_gpif.asm /^_TI = 0x0099$/;" d _TI ../src/radar_main.asm /^_TI = 0x0099$/;" d _TI ../src/usrp_common.asm /^_TI = 0x0099$/;" d _TI1 ../lib/fx2utils.asm /^_TI1 = 0x00c1$/;" d _TI1 ../lib/isr.asm /^_TI1 = 0x00c1$/;" d _TI1 ../lib/timer.asm /^_TI1 = 0x00c1$/;" d _TI1 ../lib/usb_common.asm /^_TI1 = 0x00c1$/;" d _TI1 ../src/init_gpif.asm /^_TI1 = 0x00c1$/;" d _TI1 ../src/radar_main.asm /^_TI1 = 0x00c1$/;" d _TI1 ../src/usrp_common.asm /^_TI1 = 0x00c1$/;" d _TIMER_H_ ../include/timer.h 24;" d _TL0 ../lib/fx2utils.asm /^_TL0 = 0x008a$/;" d _TL0 ../lib/isr.asm /^_TL0 = 0x008a$/;" d _TL0 ../lib/timer.asm /^_TL0 = 0x008a$/;" d _TL0 ../lib/usb_common.asm /^_TL0 = 0x008a$/;" d _TL0 ../src/init_gpif.asm /^_TL0 = 0x008a$/;" d _TL0 ../src/radar_main.asm /^_TL0 = 0x008a$/;" d _TL0 ../src/usrp_common.asm /^_TL0 = 0x008a$/;" d _TL1 ../lib/fx2utils.asm /^_TL1 = 0x008b$/;" d _TL1 ../lib/isr.asm /^_TL1 = 0x008b$/;" d _TL1 ../lib/timer.asm /^_TL1 = 0x008b$/;" d _TL1 ../lib/usb_common.asm /^_TL1 = 0x008b$/;" d _TL1 ../src/init_gpif.asm /^_TL1 = 0x008b$/;" d _TL1 ../src/radar_main.asm /^_TL1 = 0x008b$/;" d _TL1 ../src/usrp_common.asm /^_TL1 = 0x008b$/;" d _TL2 ../lib/fx2utils.asm /^_TL2 = 0x00cc$/;" d _TL2 ../lib/isr.asm /^_TL2 = 0x00cc$/;" d _TL2 ../lib/timer.asm /^_TL2 = 0x00cc$/;" d _TL2 ../lib/usb_common.asm /^_TL2 = 0x00cc$/;" d _TL2 ../src/init_gpif.asm /^_TL2 = 0x00cc$/;" d _TL2 ../src/radar_main.asm /^_TL2 = 0x00cc$/;" d _TL2 ../src/usrp_common.asm /^_TL2 = 0x00cc$/;" d _TMOD ../lib/fx2utils.asm /^_TMOD = 0x0089$/;" d _TMOD ../lib/isr.asm /^_TMOD = 0x0089$/;" d _TMOD ../lib/timer.asm /^_TMOD = 0x0089$/;" d _TMOD ../lib/usb_common.asm /^_TMOD = 0x0089$/;" d _TMOD ../src/init_gpif.asm /^_TMOD = 0x0089$/;" d _TMOD ../src/radar_main.asm /^_TMOD = 0x0089$/;" d _TMOD ../src/usrp_common.asm /^_TMOD = 0x0089$/;" d _TOGCTL ../lib/fx2utils.asm /^_TOGCTL = 0xe683$/;" d _TOGCTL ../lib/isr.asm /^_TOGCTL = 0xe683$/;" d _TOGCTL ../lib/timer.asm /^_TOGCTL = 0xe683$/;" d _TOGCTL ../lib/usb_common.asm /^_TOGCTL = 0xe683$/;" d _TOGCTL ../src/init_gpif.asm /^_TOGCTL = 0xe683$/;" d _TOGCTL ../src/radar_main.asm /^_TOGCTL = 0xe683$/;" d _TOGCTL ../src/usrp_common.asm /^_TOGCTL = 0xe683$/;" d _TR0 ../lib/fx2utils.asm /^_TR0 = 0x008c$/;" d _TR0 ../lib/isr.asm /^_TR0 = 0x008c$/;" d _TR0 ../lib/timer.asm /^_TR0 = 0x008c$/;" d _TR0 ../lib/usb_common.asm /^_TR0 = 0x008c$/;" d _TR0 ../src/init_gpif.asm /^_TR0 = 0x008c$/;" d _TR0 ../src/radar_main.asm /^_TR0 = 0x008c$/;" d _TR0 ../src/usrp_common.asm /^_TR0 = 0x008c$/;" d _TR1 ../lib/fx2utils.asm /^_TR1 = 0x008e$/;" d _TR1 ../lib/isr.asm /^_TR1 = 0x008e$/;" d _TR1 ../lib/timer.asm /^_TR1 = 0x008e$/;" d _TR1 ../lib/usb_common.asm /^_TR1 = 0x008e$/;" d _TR1 ../src/init_gpif.asm /^_TR1 = 0x008e$/;" d _TR1 ../src/radar_main.asm /^_TR1 = 0x008e$/;" d _TR1 ../src/usrp_common.asm /^_TR1 = 0x008e$/;" d _TR2 ../lib/fx2utils.asm /^_TR2 = 0x00ca$/;" d _TR2 ../lib/isr.asm /^_TR2 = 0x00ca$/;" d _TR2 ../lib/timer.asm /^_TR2 = 0x00ca$/;" d _TR2 ../lib/usb_common.asm /^_TR2 = 0x00ca$/;" d _TR2 ../src/init_gpif.asm /^_TR2 = 0x00ca$/;" d _TR2 ../src/radar_main.asm /^_TR2 = 0x00ca$/;" d _TR2 ../src/usrp_common.asm /^_TR2 = 0x00ca$/;" d _UART230 ../lib/fx2utils.asm /^_UART230 = 0xe608$/;" d _UART230 ../lib/isr.asm /^_UART230 = 0xe608$/;" d _UART230 ../lib/timer.asm /^_UART230 = 0xe608$/;" d _UART230 ../lib/usb_common.asm /^_UART230 = 0xe608$/;" d _UART230 ../src/init_gpif.asm /^_UART230 = 0xe608$/;" d _UART230 ../src/radar_main.asm /^_UART230 = 0xe608$/;" d _UART230 ../src/usrp_common.asm /^_UART230 = 0xe608$/;" d _UDMACRCH ../lib/fx2utils.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCH ../lib/isr.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCH ../lib/timer.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCH ../lib/usb_common.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCH ../src/init_gpif.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCH ../src/radar_main.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCH ../src/usrp_common.asm /^_UDMACRCH = 0xe67d$/;" d _UDMACRCL ../lib/fx2utils.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCL ../lib/isr.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCL ../lib/timer.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCL ../lib/usb_common.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCL ../src/init_gpif.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCL ../src/radar_main.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCL ../src/usrp_common.asm /^_UDMACRCL = 0xe67e$/;" d _UDMACRCQUAL ../lib/fx2utils.asm /^_UDMACRCQUAL = 0xe67f$/;" d _UDMACRCQUAL ../lib/isr.asm /^_UDMACRCQUAL = 0xe67f$/;" d _UDMACRCQUAL ../lib/timer.asm /^_UDMACRCQUAL = 0xe67f$/;" d _UDMACRCQUAL ../lib/usb_common.asm /^_UDMACRCQUAL = 0xe67f$/;" d _UDMACRCQUAL ../src/init_gpif.asm /^_UDMACRCQUAL = 0xe67f$/;" d _UDMACRCQUAL ../src/radar_main.asm /^_UDMACRCQUAL = 0xe67f$/;" d _UDMACRCQUAL ../src/usrp_common.asm /^_UDMACRCQUAL = 0xe67f$/;" d _USBCS ../lib/fx2utils.asm /^_USBCS = 0xe680$/;" d _USBCS ../lib/isr.asm /^_USBCS = 0xe680$/;" d _USBCS ../lib/timer.asm /^_USBCS = 0xe680$/;" d _USBCS ../lib/usb_common.asm /^_USBCS = 0xe680$/;" d _USBCS ../src/init_gpif.asm /^_USBCS = 0xe680$/;" d _USBCS ../src/radar_main.asm /^_USBCS = 0xe680$/;" d _USBCS ../src/usrp_common.asm /^_USBCS = 0xe680$/;" d _USBERRIE ../lib/fx2utils.asm /^_USBERRIE = 0xe662$/;" d _USBERRIE ../lib/isr.asm /^_USBERRIE = 0xe662$/;" d _USBERRIE ../lib/timer.asm /^_USBERRIE = 0xe662$/;" d _USBERRIE ../lib/usb_common.asm /^_USBERRIE = 0xe662$/;" d _USBERRIE ../src/init_gpif.asm /^_USBERRIE = 0xe662$/;" d _USBERRIE ../src/radar_main.asm /^_USBERRIE = 0xe662$/;" d _USBERRIE ../src/usrp_common.asm /^_USBERRIE = 0xe662$/;" d _USBERRIRQ ../lib/fx2utils.asm /^_USBERRIRQ = 0xe663$/;" d _USBERRIRQ ../lib/isr.asm /^_USBERRIRQ = 0xe663$/;" d _USBERRIRQ ../lib/timer.asm /^_USBERRIRQ = 0xe663$/;" d _USBERRIRQ ../lib/usb_common.asm /^_USBERRIRQ = 0xe663$/;" d _USBERRIRQ ../src/init_gpif.asm /^_USBERRIRQ = 0xe663$/;" d _USBERRIRQ ../src/radar_main.asm /^_USBERRIRQ = 0xe663$/;" d _USBERRIRQ ../src/usrp_common.asm /^_USBERRIRQ = 0xe663$/;" d _USBFRAMEH ../lib/fx2utils.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEH ../lib/isr.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEH ../lib/timer.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEH ../lib/usb_common.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEH ../src/init_gpif.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEH ../src/radar_main.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEH ../src/usrp_common.asm /^_USBFRAMEH = 0xe684$/;" d _USBFRAMEL ../lib/fx2utils.asm /^_USBFRAMEL = 0xe685$/;" d _USBFRAMEL ../lib/isr.asm /^_USBFRAMEL = 0xe685$/;" d _USBFRAMEL ../lib/timer.asm /^_USBFRAMEL = 0xe685$/;" d _USBFRAMEL ../lib/usb_common.asm /^_USBFRAMEL = 0xe685$/;" d _USBFRAMEL ../src/init_gpif.asm /^_USBFRAMEL = 0xe685$/;" d _USBFRAMEL ../src/radar_main.asm /^_USBFRAMEL = 0xe685$/;" d _USBFRAMEL ../src/usrp_common.asm /^_USBFRAMEL = 0xe685$/;" d _USBIE ../lib/fx2utils.asm /^_USBIE = 0xe65c$/;" d _USBIE ../lib/isr.asm /^_USBIE = 0xe65c$/;" d _USBIE ../lib/timer.asm /^_USBIE = 0xe65c$/;" d _USBIE ../lib/usb_common.asm /^_USBIE = 0xe65c$/;" d _USBIE ../src/init_gpif.asm /^_USBIE = 0xe65c$/;" d _USBIE ../src/radar_main.asm /^_USBIE = 0xe65c$/;" d _USBIE ../src/usrp_common.asm /^_USBIE = 0xe65c$/;" d _USBIRQ ../lib/fx2utils.asm /^_USBIRQ = 0xe65d$/;" d _USBIRQ ../lib/isr.asm /^_USBIRQ = 0xe65d$/;" d _USBIRQ ../lib/timer.asm /^_USBIRQ = 0xe65d$/;" d _USBIRQ ../lib/usb_common.asm /^_USBIRQ = 0xe65d$/;" d _USBIRQ ../src/init_gpif.asm /^_USBIRQ = 0xe65d$/;" d _USBIRQ ../src/radar_main.asm /^_USBIRQ = 0xe65d$/;" d _USBIRQ ../src/usrp_common.asm /^_USBIRQ = 0xe65d$/;" d _USBTEST ../lib/fx2utils.asm /^_USBTEST = 0xe6fa$/;" d _USBTEST ../lib/isr.asm /^_USBTEST = 0xe6fa$/;" d _USBTEST ../lib/timer.asm /^_USBTEST = 0xe6fa$/;" d _USBTEST ../lib/usb_common.asm /^_USBTEST = 0xe6fa$/;" d _USBTEST ../src/init_gpif.asm /^_USBTEST = 0xe6fa$/;" d _USBTEST ../src/radar_main.asm /^_USBTEST = 0xe6fa$/;" d _USBTEST ../src/usrp_common.asm /^_USBTEST = 0xe6fa$/;" d _USB_COMMON_H_ ../include/usb_common.h 24;" d _USB_REQUESTS_H_ ../include/usb_requests.h 28;" d _USRPCOMMON_H_ ../include/usrp_common.h 28;" d _USRP_COMMANDS_H_ ../include/usrp_commands.h 22;" d _WAKEUPCS ../lib/fx2utils.asm /^_WAKEUPCS = 0xe682$/;" d _WAKEUPCS ../lib/isr.asm /^_WAKEUPCS = 0xe682$/;" d _WAKEUPCS ../lib/timer.asm /^_WAKEUPCS = 0xe682$/;" d _WAKEUPCS ../lib/usb_common.asm /^_WAKEUPCS = 0xe682$/;" d _WAKEUPCS ../src/init_gpif.asm /^_WAKEUPCS = 0xe682$/;" d _WAKEUPCS ../src/radar_main.asm /^_WAKEUPCS = 0xe682$/;" d _WAKEUPCS ../src/usrp_common.asm /^_WAKEUPCS = 0xe682$/;" d _WaveData ../src/radar_gpif2.asm /^_WaveData:$/;" l _XAUTODAT1 ../lib/fx2utils.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT1 ../lib/isr.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT1 ../lib/timer.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT1 ../lib/usb_common.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT1 ../src/init_gpif.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT1 ../src/radar_main.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT1 ../src/usrp_common.asm /^_XAUTODAT1 = 0xe67b$/;" d _XAUTODAT2 ../lib/fx2utils.asm /^_XAUTODAT2 = 0xe67c$/;" d _XAUTODAT2 ../lib/isr.asm /^_XAUTODAT2 = 0xe67c$/;" d _XAUTODAT2 ../lib/timer.asm /^_XAUTODAT2 = 0xe67c$/;" d _XAUTODAT2 ../lib/usb_common.asm /^_XAUTODAT2 = 0xe67c$/;" d _XAUTODAT2 ../src/init_gpif.asm /^_XAUTODAT2 = 0xe67c$/;" d _XAUTODAT2 ../src/radar_main.asm /^_XAUTODAT2 = 0xe67c$/;" d _XAUTODAT2 ../src/usrp_common.asm /^_XAUTODAT2 = 0xe67c$/;" d _XGPIFSGLDATH ../lib/fx2utils.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATH ../lib/isr.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATH ../lib/timer.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATH ../lib/usb_common.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATH ../src/init_gpif.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATH ../src/radar_main.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATH ../src/usrp_common.asm /^_XGPIFSGLDATH = 0xe6f0$/;" d _XGPIFSGLDATLNOX ../lib/fx2utils.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLNOX ../lib/isr.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLNOX ../lib/timer.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLNOX ../lib/usb_common.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLNOX ../src/init_gpif.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLNOX ../src/radar_main.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLNOX ../src/usrp_common.asm /^_XGPIFSGLDATLNOX = 0xe6f2$/;" d _XGPIFSGLDATLX ../lib/fx2utils.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d _XGPIFSGLDATLX ../lib/isr.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d _XGPIFSGLDATLX ../lib/timer.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d _XGPIFSGLDATLX ../lib/usb_common.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d _XGPIFSGLDATLX ../src/init_gpif.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d _XGPIFSGLDATLX ../src/radar_main.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d _XGPIFSGLDATLX ../src/usrp_common.asm /^_XGPIFSGLDATLX = 0xe6f1$/;" d __interrupt_vect ../src/radar_main.asm /^__interrupt_vect:$/;" l __sdcc_program_startup ../src/radar_main.asm /^__sdcc_program_startup:$/;" l __start__stack ../src/radar_main.asm /^__start__stack:$/;" l _app_vendor_cmd ../src/radar_main.asm /^_app_vendor_cmd:$/;" l _epcs ../lib/usb_common.asm /^_epcs:$/;" l _fx2_renumerate ../lib/fx2utils.asm /^_fx2_renumerate:$/;" l _fx2_reset_data_toggle ../lib/fx2utils.asm /^_fx2_reset_data_toggle:$/;" l _fx2_stall_ep0 ../lib/fx2utils.asm /^_fx2_stall_ep0:$/;" l _get_ep0_data ../src/radar_main.asm /^_get_ep0_data:$/;" l _hook_fgv ../lib/isr.asm /^_hook_fgv:$/;" l _hook_sv ../lib/isr.asm /^_hook_sv:$/;" l _hook_timer_tick ../lib/timer.asm /^_hook_timer_tick:$/;" l _hook_uv ../lib/isr.asm /^_hook_uv:$/;" l _init_gpif ../src/init_gpif.asm /^_init_gpif:$/;" l _init_usrp ../src/usrp_common.asm /^_init_usrp:$/;" l _isr_HIGHSPEED ../lib/usb_common.asm /^_isr_HIGHSPEED:$/;" l _isr_SUDAV ../lib/usb_common.asm /^_isr_SUDAV:$/;" l _isr_USBRESET ../lib/usb_common.asm /^_isr_USBRESET:$/;" l _isr_tick ../src/radar_main.asm /^_isr_tick:$/;" l _isr_tick_count_1_1 ../src/radar_main.asm /^_isr_tick_count_1_1:$/;" l _isr_tick_state_1_1 ../src/radar_main.asm /^_isr_tick_state_1_1:$/;" l _main ../src/radar_main.asm /^_main:$/;" l _main_loop ../src/radar_main.asm /^_main_loop:$/;" l _mdelay ../lib/delay.asm /^_mdelay:$/;" l _mdelay1 ../lib/delay.asm /^_mdelay1:$/;" l _plausible_endpoint ../lib/usb_common.asm /^_plausible_endpoint:$/;" l _setup_autovectors ../lib/isr.asm /^_setup_autovectors:$/;" l _setup_descriptors ../lib/usb_common.asm /^_setup_descriptors:$/;" l _udelay ../lib/delay.asm /^_udelay:$/;" l _udelay1 ../lib/delay.asm /^_udelay1:$/;" l _usb_alt_setting ../lib/usb_common.c /^unsigned char _usb_alt_setting = 0; \/\/ FIXME really 1\/interface$/;" v _usb_config ../lib/usb_common.c /^unsigned char _usb_config = 0;$/;" v _usb_got_SUDAV ../lib/usb_common.c /^volatile bit _usb_got_SUDAV;$/;" v _usb_handle_setup_packet ../lib/usb_common.asm /^_usb_handle_setup_packet:$/;" l _usb_install_handlers ../lib/usb_common.asm /^_usb_install_handlers:$/;" l app_vendor_cmd ../src/radar_main.c /^app_vendor_cmd(void)$/;" f ar0 ../lib/delay.asm /^ ar0 = 0x00$/;" d ar0 ../lib/fx2utils.asm /^ ar0 = 0x00$/;" d ar0 ../lib/isr.asm /^ ar0 = 0x00$/;" d ar0 ../lib/timer.asm /^ ar0 = 0x00$/;" d ar0 ../lib/usb_common.asm /^ ar0 = 0x00$/;" d ar0 ../src/init_gpif.asm /^ ar0 = 0x00$/;" d ar0 ../src/radar_main.asm /^ ar0 = 0x00$/;" d ar0 ../src/usrp_common.asm /^ ar0 = 0x00$/;" d ar1 ../lib/delay.asm /^ ar1 = 0x01$/;" d ar1 ../lib/fx2utils.asm /^ ar1 = 0x01$/;" d ar1 ../lib/isr.asm /^ ar1 = 0x01$/;" d ar1 ../lib/timer.asm /^ ar1 = 0x01$/;" d ar1 ../lib/usb_common.asm /^ ar1 = 0x01$/;" d ar1 ../src/init_gpif.asm /^ ar1 = 0x01$/;" d ar1 ../src/radar_main.asm /^ ar1 = 0x01$/;" d ar1 ../src/usrp_common.asm /^ ar1 = 0x01$/;" d ar2 ../lib/delay.asm /^ ar2 = 0x02$/;" d ar2 ../lib/fx2utils.asm /^ ar2 = 0x02$/;" d ar2 ../lib/isr.asm /^ ar2 = 0x02$/;" d ar2 ../lib/timer.asm /^ ar2 = 0x02$/;" d ar2 ../lib/usb_common.asm /^ ar2 = 0x02$/;" d ar2 ../src/init_gpif.asm /^ ar2 = 0x02$/;" d ar2 ../src/radar_main.asm /^ ar2 = 0x02$/;" d ar2 ../src/usrp_common.asm /^ ar2 = 0x02$/;" d ar3 ../lib/delay.asm /^ ar3 = 0x03$/;" d ar3 ../lib/fx2utils.asm /^ ar3 = 0x03$/;" d ar3 ../lib/isr.asm /^ ar3 = 0x03$/;" d ar3 ../lib/timer.asm /^ ar3 = 0x03$/;" d ar3 ../lib/usb_common.asm /^ ar3 = 0x03$/;" d ar3 ../src/init_gpif.asm /^ ar3 = 0x03$/;" d ar3 ../src/radar_main.asm /^ ar3 = 0x03$/;" d ar3 ../src/usrp_common.asm /^ ar3 = 0x03$/;" d ar4 ../lib/delay.asm /^ ar4 = 0x04$/;" d ar4 ../lib/fx2utils.asm /^ ar4 = 0x04$/;" d ar4 ../lib/isr.asm /^ ar4 = 0x04$/;" d ar4 ../lib/timer.asm /^ ar4 = 0x04$/;" d ar4 ../lib/usb_common.asm /^ ar4 = 0x04$/;" d ar4 ../src/init_gpif.asm /^ ar4 = 0x04$/;" d ar4 ../src/radar_main.asm /^ ar4 = 0x04$/;" d ar4 ../src/usrp_common.asm /^ ar4 = 0x04$/;" d ar5 ../lib/delay.asm /^ ar5 = 0x05$/;" d ar5 ../lib/fx2utils.asm /^ ar5 = 0x05$/;" d ar5 ../lib/isr.asm /^ ar5 = 0x05$/;" d ar5 ../lib/timer.asm /^ ar5 = 0x05$/;" d ar5 ../lib/usb_common.asm /^ ar5 = 0x05$/;" d ar5 ../src/init_gpif.asm /^ ar5 = 0x05$/;" d ar5 ../src/radar_main.asm /^ ar5 = 0x05$/;" d ar5 ../src/usrp_common.asm /^ ar5 = 0x05$/;" d ar6 ../lib/delay.asm /^ ar6 = 0x06$/;" d ar6 ../lib/fx2utils.asm /^ ar6 = 0x06$/;" d ar6 ../lib/isr.asm /^ ar6 = 0x06$/;" d ar6 ../lib/timer.asm /^ ar6 = 0x06$/;" d ar6 ../lib/usb_common.asm /^ ar6 = 0x06$/;" d ar6 ../src/init_gpif.asm /^ ar6 = 0x06$/;" d ar6 ../src/radar_main.asm /^ ar6 = 0x06$/;" d ar6 ../src/usrp_common.asm /^ ar6 = 0x06$/;" d ar7 ../lib/delay.asm /^ ar7 = 0x07$/;" d ar7 ../lib/fx2utils.asm /^ ar7 = 0x07$/;" d ar7 ../lib/isr.asm /^ ar7 = 0x07$/;" d ar7 ../lib/timer.asm /^ ar7 = 0x07$/;" d ar7 ../lib/usb_common.asm /^ ar7 = 0x07$/;" d ar7 ../src/init_gpif.asm /^ ar7 = 0x07$/;" d ar7 ../src/radar_main.asm /^ ar7 = 0x07$/;" d ar7 ../src/usrp_common.asm /^ ar7 = 0x07$/;" d bRequest ../lib/usb_common.c 40;" d file: bRequest ../src/radar_main.c 35;" d file: bRequestType ../lib/usb_common.c 39;" d file: bRequestType ../src/radar_main.c 34;" d file: bm1KBUF ../include/fx2regs.h 688;" d bm3048MHZ ../include/fx2regs.h 648;" d bm400KHZ ../include/fx2regs.h 567;" d bm8051RES ../include/fx2regs.h 532;" d bmACK ../include/fx2regs.h 563;" d bmASYNC ../include/fx2regs.h 651;" d bmAUTOIN ../include/fx2regs.h 662;" d bmAUTOOUT ../include/fx2regs.h 661;" d bmAV2EN ../include/fx2regs.h 587;" d bmAV4EN ../include/fx2regs.h 589;" d bmBERR ../include/fx2regs.h 562;" d bmBIT0 ../include/fx2regs.h 516;" d bmBIT1 ../include/fx2regs.h 517;" d bmBIT2 ../include/fx2regs.h 518;" d bmBIT3 ../include/fx2regs.h 519;" d bmBIT4 ../include/fx2regs.h 520;" d bmBIT5 ../include/fx2regs.h 521;" d bmBIT6 ../include/fx2regs.h 522;" d bmBIT7 ../include/fx2regs.h 523;" d bmBPEN ../include/fx2regs.h 585;" d bmBPPULSE ../include/fx2regs.h 584;" d bmBREAK ../include/fx2regs.h 583;" d bmBUF0 ../include/fx2regs.h 690;" d bmBUF1 ../include/fx2regs.h 689;" d bmBULK ../include/fx2regs.h 686;" d bmCLKINV ../include/fx2regs.h 530;" d bmCLKOE ../include/fx2regs.h 531;" d bmCLKSPD ../include/fx2regs.h 527;" d bmCLKSPD0 ../include/fx2regs.h 529;" d bmCLKSPD1 ../include/fx2regs.h 528;" d bmDISCON ../include/fx2regs.h 592;" d bmDONE ../include/fx2regs.h 564;" d bmDOUBLEBUF ../include/fx2regs.h 693;" d bmDPEN ../include/fx2regs.h 601;" d bmDYN_OUT ../include/fx2regs.h 673;" d bmENH_PKT ../include/fx2regs.h 674;" d bmEP0ACK ../include/fx2regs.h 575;" d bmEP0IBN ../include/fx2regs.h 635;" d bmEP0PING ../include/fx2regs.h 643;" d bmEP1IBN ../include/fx2regs.h 634;" d bmEP1PING ../include/fx2regs.h 642;" d bmEP2EMPTY ../include/fx2regs.h 621;" d bmEP2FULL ../include/fx2regs.h 620;" d bmEP2IBN ../include/fx2regs.h 633;" d bmEP2PING ../include/fx2regs.h 641;" d bmEP4EMPTY ../include/fx2regs.h 619;" d bmEP4FULL ../include/fx2regs.h 618;" d bmEP4IBN ../include/fx2regs.h 632;" d bmEP4PING ../include/fx2regs.h 640;" d bmEP6EMPTY ../include/fx2regs.h 617;" d bmEP6FULL ../include/fx2regs.h 616;" d bmEP6IBN ../include/fx2regs.h 631;" d bmEP6PING ../include/fx2regs.h 639;" d bmEP8EMPTY ../include/fx2regs.h 615;" d bmEP8FULL ../include/fx2regs.h 614;" d bmEP8IBN ../include/fx2regs.h 630;" d bmEP8PING ../include/fx2regs.h 638;" d bmEPBUSY ../include/fx2regs.h 607;" d bmEPEMPTY ../include/fx2regs.h 612;" d bmEPFULL ../include/fx2regs.h 611;" d bmEPSTALL ../include/fx2regs.h 608;" d bmEXIF_I2CINT ../include/fx2regs.h 711;" d bmEXIF_IE4 ../include/fx2regs.h 712;" d bmEXIF_IE5 ../include/fx2regs.h 713;" d bmEXIF_USBINT ../include/fx2regs.h 710;" d bmFLAGD ../include/fx2regs.h 535;" d bmGPIFA0 ../include/fx2regs.h 546;" d bmGPIFA1 ../include/fx2regs.h 545;" d bmGPIFA2 ../include/fx2regs.h 544;" d bmGPIFA3 ../include/fx2regs.h 543;" d bmGPIFA4 ../include/fx2regs.h 542;" d bmGPIFA5 ../include/fx2regs.h 541;" d bmGPIFA6 ../include/fx2regs.h 540;" d bmGPIFA7 ../include/fx2regs.h 539;" d bmGPIFA8 ../include/fx2regs.h 548;" d bmGPIF_EP2_START ../include/fx2regs.h 702;" d bmGPIF_EP4_START ../include/fx2regs.h 703;" d bmGPIF_EP6_START ../include/fx2regs.h 704;" d bmGPIF_EP8_START ../include/fx2regs.h 705;" d bmGPIF_IDLE ../include/fx2regs.h 700;" d bmGPIF_READ ../include/fx2regs.h 706;" d bmGPIF_WRITE ../include/fx2regs.h 707;" d bmGSDA_REM_WAKEUP ../include/usb_requests.h 85;" d bmGSDA_SELF_POWERED ../include/usb_requests.h 84;" d bmGSTATE ../include/fx2regs.h 652;" d bmHSGRANT ../include/fx2regs.h 576;" d bmHSM ../include/fx2regs.h 591;" d bmHSNAK ../include/fx2regs.h 605;" d bmIBN ../include/fx2regs.h 644;" d bmID ../include/fx2regs.h 561;" d bmIFCFG0 ../include/fx2regs.h 654;" d bmIFCFG1 ../include/fx2regs.h 653;" d bmIFCFGMASK ../include/fx2regs.h 655;" d bmIFCLKOE ../include/fx2regs.h 649;" d bmIFCLKPOL ../include/fx2regs.h 650;" d bmIFCLKSRC ../include/fx2regs.h 647;" d bmIFGPIF ../include/fx2regs.h 656;" d bmIN ../include/fx2regs.h 682;" d bmINFM ../include/fx2regs.h 659;" d bmINT0 ../include/fx2regs.h 537;" d bmINT1 ../include/fx2regs.h 536;" d bmINT4IN ../include/fx2regs.h 588;" d bmINT6 ../include/fx2regs.h 550;" d bmINTERRUPT ../include/fx2regs.h 687;" d bmINVALIDBUF ../include/fx2regs.h 692;" d bmISOCHRONOUS ../include/fx2regs.h 685;" d bmIV0 ../include/fx2regs.h 573;" d bmIV1 ../include/fx2regs.h 572;" d bmIV2 ../include/fx2regs.h 571;" d bmIV3 ../include/fx2regs.h 570;" d bmIV4 ../include/fx2regs.h 569;" d bmLASTRD ../include/fx2regs.h 560;" d bmLED0 ../include/radar_rev1_regs.h 75;" d bmLED1 ../include/radar_rev1_regs.h 76;" d bmNAKALL ../include/fx2regs.h 678;" d bmNOAUTOARM ../include/fx2regs.h 670;" d bmNOSYNSOF ../include/fx2regs.h 593;" d bmNPAK ../include/fx2regs.h 610;" d bmOEP ../include/fx2regs.h 660;" d bmPORT_A_INITIAL ../include/radar_rev1_regs.h 61;" d bmPORT_A_OUTPUTS ../include/radar_rev1_regs.h 60;" d bmPORT_C_INITIAL ../include/radar_rev1_regs.h 72;" d bmPORT_C_OUTPUTS ../include/radar_rev1_regs.h 70;" d bmPORT_E_INITIAL ../include/radar_rev1_regs.h 84;" d bmPORT_E_OUTPUTS ../include/radar_rev1_regs.h 83;" d bmPRTCSTB ../include/fx2regs.h 526;" d bmQUADBUF ../include/fx2regs.h 691;" d bmQUERYTOGGLE ../include/fx2regs.h 625;" d bmRENUM ../include/fx2regs.h 594;" d bmRESETTOGGLE ../include/fx2regs.h 627;" d bmRT_DIR_IN ../include/usb_requests.h 33;" d bmRT_DIR_MASK ../include/usb_requests.h 32;" d bmRT_DIR_OUT ../include/usb_requests.h 34;" d bmRT_RECIP_DEVICE ../include/usb_requests.h 43;" d bmRT_RECIP_ENDPOINT ../include/usb_requests.h 45;" d bmRT_RECIP_INTERFACE ../include/usb_requests.h 44;" d bmRT_RECIP_MASK ../include/usb_requests.h 42;" d bmRT_RECIP_OTHER ../include/usb_requests.h 46;" d bmRT_TYPE_CLASS ../include/usb_requests.h 38;" d bmRT_TYPE_MASK ../include/usb_requests.h 36;" d bmRT_TYPE_RESERVED ../include/usb_requests.h 40;" d bmRT_TYPE_STD ../include/usb_requests.h 37;" d bmRT_TYPE_VENDOR ../include/usb_requests.h 39;" d bmRXD0OUT ../include/fx2regs.h 552;" d bmRXD1OUT ../include/fx2regs.h 551;" d bmSDPAUTO ../include/fx2regs.h 623;" d bmSETTOGGLE ../include/fx2regs.h 626;" d bmSIGRESUME ../include/fx2regs.h 595;" d bmSKIP ../include/fx2regs.h 697;" d bmSKIPCOMMIT ../include/fx2regs.h 671;" d bmSOF ../include/fx2regs.h 580;" d bmSTART ../include/fx2regs.h 558;" d bmSTOP ../include/fx2regs.h 559;" d bmSTOPIE ../include/fx2regs.h 566;" d bmSUDAV ../include/fx2regs.h 581;" d bmSUSP ../include/fx2regs.h 578;" d bmSUTOK ../include/fx2regs.h 579;" d bmT0OUT ../include/fx2regs.h 555;" d bmT1OUT ../include/fx2regs.h 554;" d bmT2EX ../include/fx2regs.h 549;" d bmT2OUT ../include/fx2regs.h 553;" d bmTOGCTLEPMASK ../include/fx2regs.h 628;" d bmTRIPLEBUF ../include/fx2regs.h 694;" d bmTYPE0 ../include/fx2regs.h 684;" d bmTYPE1 ../include/fx2regs.h 683;" d bmURES ../include/fx2regs.h 577;" d bmVALID ../include/fx2regs.h 681;" d bmWORDWIDE ../include/fx2regs.h 665;" d bmWU ../include/fx2regs.h 598;" d bmWU2 ../include/fx2regs.h 597;" d bmWU2EN ../include/fx2regs.h 602;" d bmWU2POL ../include/fx2regs.h 599;" d bmWUEN ../include/fx2regs.h 603;" d bmWUPOL ../include/fx2regs.h 600;" d bmZEROLENIN ../include/fx2regs.h 663;" d check_flow_state ../src/edit-gpif /^def check_flow_state (line, flow_state_dict):$/;" f clear_fifo_gpif_irq ../include/isr.h 168;" d clear_timer_irq ../include/timer.h 31;" d clear_usb_irq ../include/isr.h 161;" d current_config_descr ../lib/usb_common.c /^xdata unsigned char *current_config_descr;$/;" v current_device_descr ../lib/usb_common.c /^xdata unsigned char *current_device_descr;$/;" v current_devqual_descr ../lib/usb_common.c /^xdata unsigned char *current_devqual_descr;$/;" v delta ../src/edit-gpif /^def delta (xseq, yseq):$/;" f edit_gpif ../src/edit-gpif /^def edit_gpif (input_name, output_name, inline_name):$/;" f epcs ../lib/usb_common.c /^epcs (unsigned char ep)$/;" f fx2_renumerate ../lib/fx2utils.c /^fx2_renumerate (void)$/;" f fx2_reset_data_toggle ../lib/fx2utils.c /^fx2_reset_data_toggle (unsigned char ep)$/;" f fx2_stall_ep0 ../lib/fx2utils.c /^fx2_stall_ep0 (void)$/;" f get_ep0_data ../src/radar_main.c /^static void get_ep0_data(void)$/;" f file: hook_fgv ../lib/isr.c /^hook_fgv (unsigned char vector_number, unsigned short addr)$/;" f hook_sv ../lib/isr.c /^hook_sv (unsigned char vector_number, unsigned short addr)$/;" f hook_timer_tick ../lib/timer.c /^hook_timer_tick (unsigned short isr_tick_handler)$/;" f hook_uv ../lib/isr.c /^hook_uv (unsigned char vector_number, unsigned short addr)$/;" f i2c_read ../lib/i2c.c /^i2c_read (unsigned char addr, xdata unsigned char *buf, unsigned char len)$/;" f i2c_write ../lib/i2c.c /^i2c_write (unsigned char addr, xdata const unsigned char *buf, unsigned char len)$/;" f init_gpif ../src/init_gpif.c /^init_gpif(void)$/;" f init_usrp ../src/usrp_common.c /^void init_usrp(void)$/;" f main ../src/radar_main.c /^void main(void) {$/;" f main_loop ../src/radar_main.c /^static void main_loop(void) $/;" f file: mdelay ../lib/delay.c /^mdelay (unsigned int msecs)$/;" f other_config_descr ../lib/usb_common.c /^xdata unsigned char *other_config_descr;$/;" v plausible_endpoint ../lib/usb_common.c /^plausible_endpoint (unsigned char ep)$/;" f setup_autovectors ../lib/isr.c /^setup_autovectors (void)$/;" f setup_descriptors ../lib/usb_common.c /^setup_descriptors (void)$/;" f file: setup_flowstate_common ../include/radar_gpif_inline.h 5;" d setup_flowstate_common ../include/radar_gpif_inline2.h 5;" d setup_flowstate_read ../include/radar_gpif_inline.h 18;" d setup_flowstate_read ../include/radar_gpif_inline2.h 18;" d setup_flowstate_write ../include/radar_gpif_inline.h 26;" d setup_flowstate_write ../include/radar_gpif_inline2.h 26;" d udelay ../lib/delay.c /^udelay (unsigned char usecs)$/;" f usb_handle_setup_packet ../lib/usb_common.c /^usb_handle_setup_packet (void)$/;" f usb_install_handlers ../lib/usb_common.c /^usb_install_handlers (void)$/;" f usb_setup_packet_avail ../include/usb_common.h 35;" d wIndexH ../lib/usb_common.c 44;" d file: wIndexH ../src/radar_main.c 39;" d file: wIndexL ../lib/usb_common.c 43;" d file: wIndexL ../src/radar_main.c 38;" d file: wLengthH ../lib/usb_common.c 46;" d file: wLengthH ../src/radar_main.c 41;" d file: wLengthL ../lib/usb_common.c 45;" d file: wLengthL ../src/radar_main.c 40;" d file: wValueH ../lib/usb_common.c 42;" d file: wValueH ../src/radar_main.c 37;" d file: wValueL ../lib/usb_common.c 41;" d file: wValueL ../src/radar_main.c 36;" d file: wordwide ../src/usrp_common.c 29;" d file: write_define ../src/edit-gpif /^def write_define (output, name, pairs):$/;" f write_inlines ../src/edit-gpif /^def write_inlines (output, dict):$/;" f gnss-sdr-0.0.6/firmware/GN3S_v2/src/gn3s_main.adb0000644000175000017500000000001412576764164020650 0ustar carlescarlesM:gn3s_main gnss-sdr-0.0.6/firmware/GN3S_v2/src/_startup.a510000644000175000017500000000460412576764164020504 0ustar carlescarles;;; -*- asm -*- ;;; ;;; Copyright 2003,2004 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Radio ;;; ;;; GNU Radio is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Radio is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Radio; see the file COPYING. If not, write to ;;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;; The default external memory initialization provided by sdcc is not ;;; appropriate to the FX2. This is derived from the sdcc code, but uses ;;; the FX2 specific _MPAGE sfr. ;; .area XISEG (XDATA) ; the initialized external data area ;; .area XINIT (CODE) ; the code space consts to init XISEG .area XSEG (XDATA) ; zero initialized xdata .area USBDESCSEG (XDATA) ; usb descriptors .area CSEG (CODE) ;; sfr that sets upper address byte of MOVX using @r0 or @r1 _MPAGE = 0x0092 __sdcc_external_startup:: ;; This system is now compiled with the --no-xinit-opt ;; which means that any initialized XDATA is handled ;; inline by code in the GSINIT segs emitted for each file. ;; ;; We zero XSEG and all of the internal ram to ensure ;; a known good state for uninitialized variables. ; _mcs51_genRAMCLEAR() start mov r0,#l_XSEG mov a,r0 orl a,#(l_XSEG >> 8) jz 00002$ mov r1,#((l_XSEG + 255) >> 8) mov dptr,#s_XSEG clr a 00001$: movx @dptr,a inc dptr djnz r0,00001$ djnz r1,00001$ ;; We're about to clear internal memory. This will overwrite ;; the stack which contains our return address. ;; Pop our return address into DPH, DPL 00002$: pop dph pop dpl ;; R0 and A contain 0. This loop will execute 256 times. ;; ;; FWIW the first iteration writes direct address 0x00, ;; which is the location of r0. We get lucky, we're ;; writing the correct value (0) 00003$: mov @r0,a djnz r0,00003$ push dpl ; restore our return address push dph mov dpl,#0 ; indicate that data init is still required ret gnss-sdr-0.0.6/firmware/GN3S_v2/src/Makefile0000644000175000017500000000176712576764164020002 0ustar carlescarlesINCLUDES=-I../include CC=sdcc -mmcs51 --no-xinit-opt all: firmware install clean firmware: gn3s_main.c usrp_common.c init_gpif.c gn3s_gpif.c gn3s_se4120.c $(CC) $(INCLUDES) -c gn3s_main.c -o gn3s_main.rel $(CC) $(INCLUDES) -c usrp_common.c -o usrp_common.rel $(CC) $(INCLUDES) -c init_gpif.c -o init_gpif.rel $(CC) $(INCLUDES) -c gn3s_gpif.c -o gn3s_gpif.rel $(CC) $(INCLUDES) -c gn3s_se4120.c -o gn3s_se4110.rel $(CC) $(INCLUDES) -c eeprom.c -o eeprom.rel asx8051 -plosgff vectors.a51 asx8051 -plosgff usb_descriptors.a51 asx8051 -plosgff _startup.a51 $(CC) $(INCLUDES) --code-loc 0x0000 --code-size 0x1800 --xram-loc 0x1800 --xram-size 0x0800 -Wl '-b USBDESCSEG = 0xE000' -L ../lib libfx2.lib -o gn3s_firmware.ihx vectors.rel gn3s_main.rel usrp_common.rel init_gpif.rel gn3s_gpif.rel gn3s_se4110.rel eeprom.rel usb_descriptors.rel _startup.rel install: cp gn3s_firmware.ihx ../bin/ @rm gn3s_firmware.ihx clean: rm -f *.ihx *.rel *.rst *.lnk *.lst *.map *.asm *.sym *.mem gnss-sdr-0.0.6/firmware/GN3S_v2/src/gn3s_main.c0000644000175000017500000001743212576764164020360 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * * http://ccar.colorado.edu/gnss * * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "gn3s_main.h" BYTE DB_Addr; // Dual Byte Address stat BYTE I2C_Addr; // I2C address volatile WORD guardTick = 0; volatile WORD guardCnt = 0; // Set the page size to 0, so we know to calculate it on an EEPROM write BYTE EE_Page_Size = 0; void main(void) { init_usrp(); init_gpif(); init_se4110(); TD_Init(); // Init fucntion for A9 vendor commands EA = 0; // disable all interrupts setup_autovectors(); usb_install_handlers(); EIEX4 = 1; // disable INT4 FIXME EA = 1; // global interrupt enable fx2_renumerate(); // simulates disconnect / reconnect // enable_se4110(); program_3w(); //Javi: disable capture filesize limitation //hook_timer_tick((unsigned int)guardC); main_loop(); } static void get_ep0_data(void) { EP0BCL = 0; // arm EP0 for OUT xfer. This sets the // busy bit // wait for busy to clear while (EP0CS & bmEPBUSY); } /* * Handle our "Vendor Extension" commands on endpoint 0. * If we handle this one, return non-zero. */ unsigned char app_vendor_cmd(void) { WORD addr, len, bc; WORD i; if (bRequestType == VRT_VENDOR_IN) { // /////////////////////////////// // handle the IN requests // /////////////////////////////// switch (bRequest) { case VRQ_GET_STATUS: switch (wIndexL) { case GS_RX_OVERRUN: EP0BUF[0] = GPIFIDLECS>>7; EP0BCH = 0; EP0BCL = 1; break; case GS_TX_UNDERRUN: EP0BUF[0] = GPIFIDLECS>>7; EP0BCH = 0; EP0BCL = 1; break; default: return 0; } break; case VRQ_DB_FX: DB_Addr = 0x01; //TPM: need to assert double byte I2C_Addr |= 0x01; //TPM: need to assert double byte // NOTE: This case falls through ! case VRQ_RAM: case VRQ_EEPROM: addr = SETUPDAT[2]; // Get address and length addr |= SETUPDAT[3] << 8; len = SETUPDAT[6]; len |= SETUPDAT[7] << 8; while(len) // Move requested data through EP0IN { // one packet at a time. while(EP0CS & bmEPBUSY); if(len < EP0BUFF_SIZE) bc = len; else bc = EP0BUFF_SIZE; // Is this a RAM upload ? if(SETUPDAT[1] == VRQ_RAM) { for(i=0; i> 4); // addr=0x01 for 16 bit addr eeprom (LC65) // Indicate if it is a dual byte address part (BOOL) DB_Addr = (I2C_Addr & 0x01); // ID1 is 16 bit addr bit - set by rocker sw or jumper } gnss-sdr-0.0.6/firmware/GN3S_v2/src/usrp_common.c0000644000175000017500000000674112576764164021044 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * * http://ccar.colorado.edu/gnss * * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "usrp_common.h" /* If wordwide is defined, will grab 16 bits, otherwise only * bits 7-0 is used */ #undef wordwide void init_usrp(void) { CPUCS = bmCLKSPD1; // CPU runs @ 48 MHz CKCON = 0; // MOVX takes 2 cycles IFCONFIG = bmIFGPIF; //IFCONFIG = bmIFGPIF|bmIFCLKSRC|bmIFCLKOE;//|bm3048MHZ; //IFCONFIG = bmIFGPIF|bmIFCLKSRC; SYNCDELAY; //REVCTL = bmDYN_OUT | bmENH_PKT; // highly recommended by docs //SYNCDELAY; // configure end points EP1OUTCFG = bmVALID | bmBULK; SYNCDELAY; EP1INCFG = bmVALID | bmBULK | bmIN; SYNCDELAY; // 512 quad bulk OUT //EP2CFG = bmVALID | bmBULK ; //| bmQUADBUF; EP2CFG = 0; SYNCDELAY; // disabled EP4CFG = 0; SYNCDELAY; // 512 quad bulk IN EP6CFG = bmVALID | bmBULK | bmQUADBUF | bmIN; SYNCDELAY; // disabled EP8CFG = 0; SYNCDELAY; // reset FIFOs FIFORESET = bmNAKALL; SYNCDELAY; //FIFORESET = 2; //SYNCDELAY; // FIFORESET = 4; SYNCDELAY; FIFORESET = 6; SYNCDELAY; // FIFORESET = 8; SYNCDELAY; FIFORESET = 0; SYNCDELAY; // configure end point FIFOs // let core see 0 to 1 transistion of autoout bit #ifdef wordwide EP2FIFOCFG = 0x00; EP6FIFOCFG = bmZEROLENIN | bmAUTOIN | bmWORDWIDE; #else EP2FIFOCFG = 0x00; EP4FIFOCFG = 0x00; EP6FIFOCFG = bmZEROLENIN | bmAUTOIN; EP8FIFOCFG = 0x00; #endif SYNCDELAY; EP0BCH = 0; SYNCDELAY; // arm EP1OUT so we can receive "out" packets (TRM pg 8-8) EP1OUTBC = 0; SYNCDELAY; //EP2GPIFFLGSEL = 0x01; //SYNCDELAY; // For EP2OUT, GPIF uses EF flag EP6GPIFFLGSEL = 0x02; SYNCDELAY; // For EP6IN, GPIF uses FF flag /* waveform DONE when FF/EF flags get set */ EP6GPIFPFSTOP=0x01; SYNCDELAY; //EP2GPIFPFSTOP=0x01; SYNCDELAY; EP6AUTOINLENH = (512) >> 8; SYNCDELAY; // this is the length for high speed EP6AUTOINLENL = (512) & 0xff; SYNCDELAY; } gnss-sdr-0.0.6/firmware/GN3S_v2/src/gn3s_gpif.c0000644000175000017500000002100412576764164020347 0ustar carlescarles/* * Machine generated by "edit-gpif". Do not edit by hand. */ // This program configures the General Programmable Interface (GPIF) for FX2. // Please do not modify sections of text which are marked as "DO NOT EDIT ...". // // DO NOT EDIT ... // GPIF Initialization // Interface Timing Async // Internal Ready Init IntRdy=1 // CTL Out Tristate-able Binary // SingleWrite WF Select 1 // SingleRead WF Select 0 // FifoWrite WF Select 3 // FifoRead WF Select 2 // Data Bus Idle Drive Tristate // END DO NOT EDIT // DO NOT EDIT ... // GPIF Wave Names // Wave 0 = Single R // Wave 1 = Single W // Wave 2 = FIFO Rea // Wave 3 = FIFO Wri // GPIF Ctrl Outputs Level // CTL 0 = BOGUS CMOS // CTL 1 = CTL1 CMOS // CTL 2 = CTL2 CMOS // CTL 3 = CTL3 CMOS // CTL 4 = CTL4 CMOS // CTL 5 = CTL5 CMOS // GPIF Rdy Inputs // RDY0 = ADC_CLK // RDY1 = RDY1 // RDY2 = RDY2 // RDY3 = RDY3 // RDY4 = RDY4 // RDY5 = TCXpire // FIFOFlag = FIFOFlag // IntReady = IntReady // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 0: Single R // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 1: Single W // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 2: FIFO Rea // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode Activate Activate Activate Activate Activate Activate Activate // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A FIFOFlag // LFunc AND // Term B FIFOFlag // Branch1 ThenIdle // Branch0 Else 0 // Re-Exec No // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 3: FIFO Wri // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode Activate Activate Activate Activate Activate Activate Activate // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A FIFOFlag // LFunc AND // Term B FIFOFlag // Branch1 ThenIdle // Branch0 Else 0 // Re-Exec No // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // GPIF Program Code // DO NOT EDIT ... // #include "fx2.h" // #include "fx2regs.h" // #include "fx2sdly.h" // SYNCDELAY macro // END DO NOT EDIT // DO NOT EDIT ... const char WaveData[128] = { // Wave 0 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 1 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 2 /* LenBr */ 0x38, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 3 /* LenBr */ 0x38, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, }; // END DO NOT EDIT // DO NOT EDIT ... const char FlowStates[36] = { /* Wave 0 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Wave 1 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Wave 2 FlowStates */ 0x80,0xED,0x00,0x00,0x00,0x00,0x03,0x02,0x00, /* Wave 3 FlowStates */ 0x80,0xEE,0x00,0x00,0x00,0x00,0x03,0x02,0x00, }; // END DO NOT EDIT // DO NOT EDIT ... const char InitData[7] = { /* Regs */ 0xA0,0x00,0x00,0x00,0xAE,0x4E,0x00 }; // END DO NOT EDIT // TO DO: You may add additional code below. gnss-sdr-0.0.6/firmware/GN3S_v2/src/usrp_gpif.c0000644000175000017500000002072412576764164020476 0ustar carlescarles/* * Machine generated by "edit-gpif". Do not edit by hand. */ // This program configures the General Programmable Interface (GPIF) for FX2. // Please do not modify sections of text which are marked as "DO NOT EDIT ...". // // DO NOT EDIT ... // GPIF Initialization // Interface Timing Async // Internal Ready Init IntRdy=1 // CTL Out Tristate-able Binary // SingleWrite WF Select 1 // SingleRead WF Select 0 // FifoWrite WF Select 3 // FifoRead WF Select 2 // Data Bus Idle Drive Tristate // END DO NOT EDIT // DO NOT EDIT ... // GPIF Wave Names // Wave 0 = Single R // Wave 1 = Single W // Wave 2 = FIFO Rea // Wave 3 = FIFO Wri // GPIF Ctrl Outputs Level // CTL 0 = BOGUS CMOS // CTL 1 = CTL1 CMOS // CTL 2 = CTL2 CMOS // CTL 3 = CTL3 CMOS // CTL 4 = CTL4 CMOS // CTL 5 = CTL5 CMOS // GPIF Rdy Inputs // RDY0 = ADC_CLK // RDY1 = RDY1 // RDY2 = RDY2 // RDY3 = RDY3 // RDY4 = RDY4 // RDY5 = TCXpire // FIFOFlag = FIFOFlag // IntReady = IntReady // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 0: Single R // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 1: Single W // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 2: FIFO Rea // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode Activate Activate Activate Activate Activate Activate Activate // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A TCXpire // LFunc AND // Term B TCXpire // Branch1 ThenIdle // Branch0 Else 0 // Re-Exec No // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 3: FIFO Wri // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // GPIF Program Code // DO NOT EDIT ... // #include "fx2.h" // #include "fx2regs.h" // #include "fx2sdly.h" // SYNCDELAY macro // END DO NOT EDIT // DO NOT EDIT ... const char WaveData[128] = { // Wave 0 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 1 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 2 /* LenBr */ 0x38, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 3 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, }; // END DO NOT EDIT // DO NOT EDIT ... const char FlowStates[36] = { /* Wave 0 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Wave 1 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Wave 2 FlowStates */ 0x80,0x2D,0x00,0x00,0x00,0x00,0x03,0x02,0x00, /* Wave 3 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; // END DO NOT EDIT // DO NOT EDIT ... const char InitData[7] = { /* Regs */ 0xA0,0x00,0x00,0x00,0x46,0x4E,0x00 }; // END DO NOT EDIT // TO DO: You may add additional code below. gnss-sdr-0.0.6/firmware/GN3S_v2/src/readme.txt0000644000175000017500000000015312576764164020324 0ustar carlescarles - please note that modifying/enabling firmware can result in an inoperable board, proceed with caution gnss-sdr-0.0.6/firmware/GN3S_v2/src/init_gpif.c0000644000175000017500000000355712576764164020455 0ustar carlescarles/* * USRP - Universal Software Radio Peripheral * * Copyright (C) 2003 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "usrp_common.h" // These are the tables generated by the Cypress GPIF Designer extern const char WaveData[128]; extern const char FlowStates[36]; extern const char InitData[7]; // The tool is kind of screwed up, in that it doesn't configure some // of the ports correctly. We just use their tables and handle the // initialization ourselves. They also declare that their static // initialized data is in xdata, which screws us too. void init_gpif(void) { // we've already setup IFCONFIG before calling this... GPIFABORT = 0xFF; // abort any waveforms pending SYNCDELAY; GPIFREADYCFG = InitData[0]; GPIFCTLCFG = InitData[1]; GPIFIDLECS = InitData[2]; GPIFIDLECTL = InitData[3]; // Hmmm, what's InitData[ 4 ] ... GPIFWFSELECT = InitData[5]; // GPIFREADYSTAT = InitData[ 6 ]; // I think this register is read // only... { BYTE i; for (i = 0; i < 128; i++) { GPIF_WAVE_DATA[i] = WaveData[i]; } } FLOWSTATE = 0; /* ensure it's off */ } gnss-sdr-0.0.6/firmware/GN3S_v2/src/usb_descriptors.a510000644000175000017500000002666512576764164022070 0ustar carlescarles;;; ;;; Code from: USRP - Universal Software Radio Peripheral (GNU Radio) ;;; ;;; Initial modifications by: ;;; ;;; Stephan Esterhuizen, Aerospace Engineering Sciences ;;; University of Colorado at Boulder ;;; Boulder CO, USA ;;; ;;; Further modifications for use with the SiGe USB module to accompany ;;; the textbook: "A Software-Defined GPS and Galileo Receiver: A ;;; Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: ;;; ;;; Marcus Junered, GNSS Research Group ;;; Lulea University of Technology ;;; Lulea, Sweden ;;; junered@ltu.se ;;; ;;; --------------------------------------------------------------------- ;;; ;;; GN3S - GNSS IF Streamer for Cypress FX2LP ;;; Copyright (C) 2006 Marcus Junered ;;; ;;; This program is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2 of the License, or ;;; (at your option) any later version. ;;; ;;; This program is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with this program; if not, write to the Free Software ;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ;;; ;;; USB Descriptor table for the USRP ;;; ;;; We're a high-speed only device (480 Mb/sec) with 1 configuration ;;; and 3 interfaces. ;;; ;;; interface 0: command and status (ep0 COMMAND) ;;; interface 1: Transmit path (ep2 OUT BULK) ;;; interface 2: Receive path (ep6 IN BULK) .module usb_descriptors ;;VID_FREE = 0x1781 ; GN3S Project ;;PID_USRP = 0x0B39 ; CU AAU SE4120L-EK3 VID_FREE = 0x16C0 ; GN3S Modified driver Project PID_USRP = 0x072F ; CU AAU SE4120L-EK3 ;; We distinguish configured from unconfigured USRPs using the Device ID. ;; If the MSB of the DID is 0, the device is unconfigured. ;; The LSB of the DID is reserved for hardware revs. DID_USRP1 = 0x0102 ; Device ID (bcd) DSCR_DEVICE = 1 ; Descriptor type: Device DSCR_CONFIG = 2 ; Descriptor type: Configuration DSCR_STRING = 3 ; Descriptor type: String DSCR_INTRFC = 4 ; Descriptor type: Interface DSCR_ENDPNT = 5 ; Descriptor type: Endpoint DSCR_DEVQUAL = 6 ; Descriptor type: Device Qualifier DSCR_DEVICE_LEN = 18 DSCR_CONFIG_LEN = 9 DSCR_INTRFC_LEN = 9 DSCR_ENDPNT_LEN = 7 DSCR_DEVQUAL_LEN = 10 ET_CONTROL = 0 ; Endpoint type: Control ET_ISO = 1 ; Endpoint type: Isochronous ET_BULK = 2 ; Endpoint type: Bulk ET_INT = 3 ; Endpoint type: Interrupt ;; configuration attributes bmSELF_POWERED = 1 << 6 ;;; -------------------------------------------------------- ;;; external ram data ;;;-------------------------------------------------------- .area USBDESCSEG (XDATA) ;;; ---------------------------------------------------------------- ;;; descriptors used when operating at high speed (480Mb/sec) ;;; ---------------------------------------------------------------- .even ; descriptors must be 2-byte aligned for SUDPTR{H,L} to work ;; The .even directive isn't really honored by the linker. Bummer! ;; (There's no way to specify an alignment requirement for a given area, ;; hence when they're concatenated together, even doesn't work.) ;; ;; We work around this by telling the linker to put USBDESCSEG ;; at 0xE000 absolute. This means that the maximimum length of this ;; segment is 480 bytes, leaving room for the two hash slots ;; at 0xE1EO to 0xE1FF. ;; ;; As of July 7, 2004, this segment is 326 bytes long _high_speed_device_descr:: .db DSCR_DEVICE_LEN .db DSCR_DEVICE .db <0x0200 ; Specification version (LSB) .db >0x0200 ; Specification version (MSB) .db 0xff ; device class (vendor specific) .db 0xff ; device subclass (vendor specific) .db 0xff ; device protocol (vendor specific) .db 64 ; bMaxPacketSize0 for endpoint 0 .db VID_FREE ; idVendor .db PID_USRP ; idProduct .db DID_USRP1 ; bcdDevice .db SI_VENDOR ; iManufacturer (string index) .db SI_PRODUCT ; iProduct (string index) .db SI_SERIAL ; iSerial number (string index) .db 1 ; bNumConfigurations ;;; describes the other speed (12Mb/sec) .even _high_speed_devqual_descr:: .db DSCR_DEVQUAL_LEN .db DSCR_DEVQUAL .db <0x0200 ; bcdUSB (LSB) .db >0x0200 ; bcdUSB (MSB) .db 0xff ; bDeviceClass .db 0xff ; bDeviceSubClass .db 0xff ; bDeviceProtocol .db 64 ; bMaxPacketSize0 .db 1 ; bNumConfigurations (one config at 12Mb/sec) .db 0 ; bReserved .even _high_speed_config_descr:: .db DSCR_CONFIG_LEN .db DSCR_CONFIG .db <(_high_speed_config_descr_end - _high_speed_config_descr) ; LSB .db >(_high_speed_config_descr_end - _high_speed_config_descr) ; MSB .db 3 ; bNumInterfaces .db 1 ; bConfigurationValue .db 0 ; iConfiguration .db 0x80 | bmSELF_POWERED ; bmAttributes .db 0 ; bMaxPower ;; interface descriptor 0 (command & status, ep0 COMMAND) .db DSCR_INTRFC_LEN .db DSCR_INTRFC .db 0 ; bInterfaceNumber (zero based) .db 0 ; bAlternateSetting .db 0 ; bNumEndpoints .db 0xff ; bInterfaceClass (vendor specific) .db 0xff ; bInterfaceSubClass (vendor specific) .db 0xff ; bInterfaceProtocol (vendor specific) .db SI_COMMAND_AND_STATUS ; iInterface (description) ;; interface descriptor 1 (transmit path, ep2 OUT BULK) .db DSCR_INTRFC_LEN .db DSCR_INTRFC .db 1 ; bInterfaceNumber (zero based) .db 0 ; bAlternateSetting .db 1 ; bNumEndpoints .db 0xff ; bInterfaceClass (vendor specific) .db 0xff ; bInterfaceSubClass (vendor specific) .db 0xff ; bInterfaceProtocol (vendor specific) .db SI_TX_PATH ; iInterface (description) ;; interface 1's end point .db DSCR_ENDPNT_LEN .db DSCR_ENDPNT .db 0x02 ; bEndpointAddress (ep 2 OUT) .db ET_BULK ; bmAttributes .db <512 ; wMaxPacketSize (LSB) .db >512 ; wMaxPacketSize (MSB) .db 0 ; bInterval (iso only) ;; interface descriptor 2 (receive path, ep6 IN BULK) .db DSCR_INTRFC_LEN .db DSCR_INTRFC .db 2 ; bInterfaceNumber (zero based) .db 0 ; bAlternateSetting .db 1 ; bNumEndpoints .db 0xff ; bInterfaceClass (vendor specific) .db 0xff ; bInterfaceSubClass (vendor specific) .db 0xff ; bInterfaceProtocol (vendor specific) .db SI_RX_PATH ; iInterface (description) ;; interface 2's end point .db DSCR_ENDPNT_LEN .db DSCR_ENDPNT .db 0x86 ; bEndpointAddress (ep 6 IN) .db ET_BULK ; bmAttributes .db <512 ; wMaxPacketSize (LSB) .db >512 ; wMaxPacketSize (MSB) .db 0 ; bInterval (iso only) _high_speed_config_descr_end: ;;; ---------------------------------------------------------------- ;;; descriptors used when operating at full speed (12Mb/sec) ;;; ---------------------------------------------------------------- .even _full_speed_device_descr:: .db DSCR_DEVICE_LEN .db DSCR_DEVICE .db <0x0200 ; Specification version (LSB) .db >0x0200 ; Specification version (MSB) .db 0xff ; device class (vendor specific) .db 0xff ; device subclass (vendor specific) .db 0xff ; device protocol (vendor specific) .db 64 ; bMaxPacketSize0 for endpoint 0 .db VID_FREE ; idVendor .db PID_USRP ; idProduct .db DID_USRP1 ; bcdDevice .db SI_VENDOR ; iManufacturer (string index) .db SI_PRODUCT ; iProduct (string index) .db SI_NONE ; iSerial number (None) .db 1 ; bNumConfigurations ;;; describes the other speed (480Mb/sec) .even _full_speed_devqual_descr:: .db DSCR_DEVQUAL_LEN .db DSCR_DEVQUAL .db <0x0200 ; bcdUSB .db >0x0200 ; bcdUSB .db 0xff ; bDeviceClass .db 0xff ; bDeviceSubClass .db 0xff ; bDeviceProtocol .db 64 ; bMaxPacketSize0 .db 1 ; bNumConfigurations (one config at 480Mb/sec) .db 0 ; bReserved .even _full_speed_config_descr:: .db DSCR_CONFIG_LEN .db DSCR_CONFIG .db <(_full_speed_config_descr_end - _full_speed_config_descr) ; LSB .db >(_full_speed_config_descr_end - _full_speed_config_descr) ; MSB .db 1 ; bNumInterfaces .db 1 ; bConfigurationValue .db 0 ; iConfiguration .db 0x80 | bmSELF_POWERED ; bmAttributes .db 0 ; bMaxPower ;; interface descriptor 0 (command & status, ep0 COMMAND) .db DSCR_INTRFC_LEN .db DSCR_INTRFC .db 0 ; bInterfaceNumber (zero based) .db 0 ; bAlternateSetting .db 0 ; bNumEndpoints .db 0xff ; bInterfaceClass (vendor specific) .db 0xff ; bInterfaceSubClass (vendor specific) .db 0xff ; bInterfaceProtocol (vendor specific) .db SI_COMMAND_AND_STATUS ; iInterface (description) _full_speed_config_descr_end: ;;; ---------------------------------------------------------------- ;;; string descriptors ;;; ---------------------------------------------------------------- _nstring_descriptors:: .db (_string_descriptors_end - _string_descriptors) / 2 _string_descriptors:: .db str0 .db str1 .db str2 .db str3 .db str4 .db str5 .db str6 _string_descriptors_end: SI_NONE = 0 ;; str0 contains the language ID's. .even str0: .db str0_end - str0 .db DSCR_STRING .db 0 .db 0 .db <0x0409 ; magic code for US English (LSB) .db >0x0409 ; magic code for US English (MSB) str0_end: SI_VENDOR = 1 .even str1: .db str1_end - str1 .db DSCR_STRING .db 'G, 0 ; 16-bit unicode .db 'N, 0 .db '3, 0 .db 'S, 0 .db ' , 0 .db 'P, 0 .db 'r, 0 .db 'o, 0 .db 'j, 0 .db 'e, 0 .db 'c, 0 .db 't, 0 str1_end: SI_PRODUCT = 2 .even str2: .db str2_end - str2 .db DSCR_STRING .db 'C, 0 .db 'U, 0 .db ' , 0 .db 'A, 0 .db 'A, 0 .db 'U, 0 .db ' , 0 .db 'S, 0 .db 'i, 0 .db 'G, 0 .db 'e, 0 .db ' , 0 .db 'S, 0 .db 'E, 0 .db '4, 0 .db '1, 0 .db '1, 0 .db '0, 0 .db 'L, 0 .db '-, 0 .db 'E, 0 .db 'K, 0 .db '3, 0 str2_end: SI_COMMAND_AND_STATUS = 3 .even str3: .db str3_end - str3 .db DSCR_STRING .db 'C, 0 .db 'o, 0 .db 'm, 0 .db 'm, 0 .db 'a, 0 .db 'n, 0 .db 'd, 0 .db ' , 0 .db '&, 0 .db ' , 0 .db 'S, 0 .db 't, 0 .db 'a, 0 .db 't, 0 .db 'u, 0 .db 's, 0 str3_end: SI_TX_PATH = 4 .even str4: .db str4_end - str4 .db DSCR_STRING .db 'T, 0 .db 'r, 0 .db 'a, 0 .db 'n, 0 .db 's, 0 .db 'm, 0 .db 'i, 0 .db 't, 0 .db ' , 0 .db 'P, 0 .db 'a, 0 .db 't, 0 .db 'h, 0 str4_end: SI_RX_PATH = 5 .even str5: .db str5_end - str5 .db DSCR_STRING .db 'R, 0 .db 'e, 0 .db 'c, 0 .db 'e, 0 .db 'i, 0 .db 'v, 0 .db 'e, 0 .db ' , 0 .db 'P, 0 .db 'a, 0 .db 't, 0 .db 'h, 0 str5_end: SI_SERIAL = 6 .even _serial_number_descriptor:: str6: .db str6_end - str6 .db DSCR_STRING .db '1, 0 .db '0, 0 .db '0, 0 .db '0, 0 .db '0, 0 str6_end: gnss-sdr-0.0.6/firmware/GN3S_v2/src/gpif.c0000644000175000017500000004117112576764164017424 0ustar carlescarles// This program configures the General Programmable Interface (GPIF) for FX2. // Please do not modify sections of text which are marked as "DO NOT EDIT ...". // // DO NOT EDIT ... // GPIF Initialization // Interface Timing Async // Internal Ready Init IntRdy=1 // CTL Out Tristate-able Binary // SingleWrite WF Select 1 // SingleRead WF Select 0 // FifoWrite WF Select 3 // FifoRead WF Select 2 // Data Bus Idle Drive Tristate // END DO NOT EDIT // DO NOT EDIT ... // GPIF Wave Names // Wave 0 = Single R // Wave 1 = Single W // Wave 2 = FIFO Rea // Wave 3 = FIFO Wri // GPIF Ctrl Outputs Level // CTL 0 = BOGUS CMOS // CTL 1 = CTL1 CMOS // CTL 2 = CTL2 CMOS // CTL 3 = CTL3 CMOS // CTL 4 = CTL4 CMOS // CTL 5 = CTL5 CMOS // GPIF Rdy Inputs // RDY0 = ADC_CLK // RDY1 = RDY1 // RDY2 = RDY2 // RDY3 = RDY3 // RDY4 = RDY4 // RDY5 = TCXpire // FIFOFlag = FIFOFlag // IntReady = IntReady // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 0: Single R // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 1: Single W // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode NO Data NO Data NO Data NO Data NO Data NO Data NO Data // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A // LFunc // Term B // Branch1 // Branch0 // Re-Exec // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 2: FIFO Rea // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode Activate Activate Activate Activate Activate Activate Activate // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A FIFOFlag // LFunc AND // Term B FIFOFlag // Branch1 ThenIdle // Branch0 Else 0 // Re-Exec No // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // DO NOT EDIT ... // // GPIF Waveform 3: FIFO Wri // // Interval 0 1 2 3 4 5 6 Idle (7) // _________ _________ _________ _________ _________ _________ _________ _________ // // AddrMode Same Val Same Val Same Val Same Val Same Val Same Val Same Val // DataMode Activate Activate Activate Activate Activate Activate Activate // NextData SameData SameData SameData SameData SameData SameData SameData // Int Trig No Int No Int No Int No Int No Int No Int No Int // IF/Wait IF Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 Wait 1 // Term A FIFOFlag // LFunc AND // Term B FIFOFlag // Branch1 ThenIdle // Branch0 Else 0 // Re-Exec No // Sngl/CRC Default Default Default Default Default Default Default // BOGUS 0 0 0 0 0 0 0 0 // CTL1 0 0 0 0 0 0 0 0 // CTL2 0 0 0 0 0 0 0 0 // CTL3 0 0 0 0 0 0 0 0 // CTL4 0 0 0 0 0 0 0 0 // CTL5 0 0 0 0 0 0 0 0 // // END DO NOT EDIT // GPIF Program Code // DO NOT EDIT ... #include "fx2.h" #include "fx2regs.h" #include "fx2sdly.h" // SYNCDELAY macro // END DO NOT EDIT // DO NOT EDIT ... const char xdata WaveData[128] = { // Wave 0 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 1 /* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 2 /* LenBr */ 0x38, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, // Wave 3 /* LenBr */ 0x38, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, /* Opcode*/ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* LFun */ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, }; // END DO NOT EDIT // DO NOT EDIT ... const char xdata FlowStates[36] = { /* Wave 0 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Wave 1 FlowStates */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* Wave 2 FlowStates */ 0x80,0xED,0x00,0x00,0x00,0x00,0x03,0x02,0x00, /* Wave 3 FlowStates */ 0x80,0xEE,0x00,0x00,0x00,0x00,0x03,0x02,0x00, }; // END DO NOT EDIT // DO NOT EDIT ... const char xdata InitData[7] = { /* Regs */ 0xA0,0x00,0x00,0x00,0xAE,0x4E,0x00 }; // END DO NOT EDIT // TO DO: You may add additional code below. void GpifInit( void ) { BYTE i; // Registers which require a synchronization delay, see section 15.14 // FIFORESET FIFOPINPOLAR // INPKTEND OUTPKTEND // EPxBCH:L REVCTL // GPIFTCB3 GPIFTCB2 // GPIFTCB1 GPIFTCB0 // EPxFIFOPFH:L EPxAUTOINLENH:L // EPxFIFOCFG EPxGPIFFLGSEL // PINFLAGSxx EPxFIFOIRQ // EPxFIFOIE GPIFIRQ // GPIFIE GPIFADRH:L // UDMACRCH:L EPxGPIFTRIG // GPIFTRIG // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well... // ...these have been replaced by GPIFTC[B3:B0] registers // 8051 doesn't have access to waveform memories 'til // the part is in GPIF mode. IFCONFIG = 0xAE; // IFCLKSRC=1 , FIFOs executes on internal clk source // xMHz=1 , 48MHz internal clk rate // IFCLKOE=0 , Don't drive IFCLK pin signal at 48MHz // IFCLKPOL=0 , Don't invert IFCLK pin signal from internal clk // ASYNC=1 , master samples asynchronous // GSTATE=1 , Drive GPIF states out on PORTE[2:0], debug WF // IFCFG[1:0]=10, FX2 in GPIF master mode GPIFABORT = 0xFF; // abort any waveforms pending GPIFREADYCFG = InitData[ 0 ]; GPIFCTLCFG = InitData[ 1 ]; GPIFIDLECS = InitData[ 2 ]; GPIFIDLECTL = InitData[ 3 ]; GPIFWFSELECT = InitData[ 5 ]; GPIFREADYSTAT = InitData[ 6 ]; // use dual autopointer feature... AUTOPTRSETUP = 0x07; // inc both pointers, // ...warning: this introduces pdata hole(s) // ...at E67B (XAUTODAT1) and E67C (XAUTODAT2) // source AUTOPTRH1 = MSB( &WaveData ); AUTOPTRL1 = LSB( &WaveData ); // destination AUTOPTRH2 = 0xE4; AUTOPTRL2 = 0x00; // transfer for ( i = 0x00; i < 128; i++ ) { EXTAUTODAT2 = EXTAUTODAT1; } // Configure GPIF Address pins, output initial value, PORTCCFG = 0xFF; // [7:0] as alt. func. GPIFADR[7:0] OEC = 0xFF; // and as outputs PORTECFG |= 0x80; // [8] as alt. func. GPIFADR[8] OEE |= 0x80; // and as output // ...OR... tri-state GPIFADR[8:0] pins // PORTCCFG = 0x00; // [7:0] as port I/O // OEC = 0x00; // and as inputs // PORTECFG &= 0x7F; // [8] as port I/O // OEE &= 0x7F; // and as input // GPIF address pins update when GPIFADRH/L written SYNCDELAY; // GPIFADRH = 0x00; // bits[7:1] always 0 SYNCDELAY; // GPIFADRL = 0x00; // point to PERIPHERAL address 0x0000 // Configure GPIF FlowStates registers for Wave 0 of WaveData FLOWSTATE = FlowStates[ 0 ]; FLOWLOGIC = FlowStates[ 1 ]; FLOWEQ0CTL = FlowStates[ 2 ]; FLOWEQ1CTL = FlowStates[ 3 ]; FLOWHOLDOFF = FlowStates[ 4 ]; FLOWSTB = FlowStates[ 5 ]; FLOWSTBEDGE = FlowStates[ 6 ]; FLOWSTBHPERIOD = FlowStates[ 7 ]; } gnss-sdr-0.0.6/firmware/GN3S_v2/src/gpif.gpf0000644000175000017500000001011212576764164017745 0ustar carlescarlesAD9245 ADC_CLK RDY1 RDY2 RDY3 RDY4 TCXpire FIFOFlag IntReady BOGUS CTL1 CTL2 CTL3 CTL4 CTL5 Single Read VDbRNAbRNbRNbRNbRNbRNbRN0Single Write VDbRNAbRNbRNbRNbRNbRNbRN0FIFO Read Vs'bRNAbRkAbRN|bRNbRNbRNbRNbRNbRN0FIFO Write Vs'bRNAbRkAbRN|bRNbRNbRNbRNbRNbRN0Single Read Single Write FIFO Read FIFO Write Single Read Single Write FIFO Read FIFO Write Single Read Single Write FIFO Read FIFO Write Single Read Single Write FIFO Read FIFO Write Single Read Single Write FIFO Read FIFO Write Single Read Single Write FIFO Read FIFO Write Single Read Single Write FIFO Read FIFO Write gnss-sdr-0.0.6/firmware/GN3S_v2/src/eeprom.c0000644000175000017500000001223212576764164017762 0ustar carlescarles//----------------------------------------------------------------------------- // File: eeprom.c // Contents: EEPROM update firmware source. (Write only) // // indent 3. NO TABS! // // Copyright (c) 2002 Cypress Semiconductor // // $Workfile: eeprom.c $ // $Date: 9/07/05 2:54p $ // $Revision: 1 $ //----------------------------------------------------------------------------- //#include "fx2.h" #include "fx2regs.h" #include "eeprom.h" /////////////////////////////////////////////////////////////////////////////////////// // Write up to one page of data to the EEPROM. // Returns 0 on success, 1 on failure // Normally called within a while() loop so that errors are retried: // while (EEPROMWritePage(....)) // ; BYTE EEPROMWritePage(WORD addr, BYTE xdata * ptr, BYTE len) { BYTE i; BYTE retval; //EEPROM_DISABLE_WRITE_PROTECT(); // Make sure the i2c interface is idle EEWaitForStop(); // write the START bit and i2c device address EEStartAndAddr(); if(EEWaitForAck()) { retval = 1; goto EXIT_WP; } // write the eeprom offset if (DB_Addr) { I2DAT = MSB(addr); if(EEWaitForAck()) { retval = 1; goto EXIT_WP; } } I2DAT = LSB(addr); if(EEWaitForAck()) { retval = 1; goto EXIT_WP; } // Write the data Page for (i = 0; i < len; i++) { I2DAT = *ptr++; if(EEWaitForDone()) { retval = 1; goto EXIT_WP; } } I2CS |= bmSTOP; WaitForEEPROMWrite(); retval = 0; EXIT_WP: EEPROM_ENABLE_WRITE_PROTECT(); return(retval); } void EEStartAndAddr() { I2CS = bmSTART; I2DAT = I2C_Addr << 1; } // 0x2e in assembly, less than 0x20 with compiler optimization!! void WaitForEEPROMWrite() { EEWaitForStop(); waitForBusy: EEStartAndAddr(); EEWaitForDone(); I2CS |= bmSTOP; // ; Set the STOP bit EEWaitForStop(); if (!(I2CS & bmACK)) // If no ACK, try again. goto waitForBusy; } void EEWaitForStop() { // Data should not be written to I2CS or I2DAT until the STOP bit returns low. while (I2CS & bmSTOP) ; } // Returns 0 on success, 1 on failure BYTE EEPROMRead(WORD addr, BYTE length, BYTE xdata *buf) { BYTE i; // Make sure the i2c interface is idle EEWaitForStop(); // write the START bit and i2c device address EEStartAndAddr(); if(EEWaitForAck()) return(1); // write the eeprom offset if (DB_Addr) { I2DAT = MSB(addr); if(EEWaitForAck()) return(1); } I2DAT = LSB(addr); if(EEWaitForAck()) return(1); I2CS = bmSTART; // send the read command I2DAT = (I2C_Addr << 1) | 1; if(EEWaitForDone()) return(1); // read dummy byte i = I2DAT; if(EEWaitForDone()) return(1); for (i=0; i < (length - 1); i++) { *(buf+i) = I2DAT; if(EEWaitForDone()) return(1); } I2CS = bmLASTRD; if(EEWaitForDone()) return(1); *(buf+i) = I2DAT; if(EEWaitForDone()) return(1); I2CS = bmSTOP; i = I2DAT; return(0); } // Return 0 for ok, 1 for error BYTE EEWaitForDone() { BYTE i; while (!((i = I2CS) & 1)) // Poll the done bit ; if (i & bmBERR) return 1; else return 0; } // Return 0 for ok, 1 for error // Same as wait for done, but checks for ACK as well BYTE EEWaitForAck() { BYTE i; while (!((i = I2CS) & 1)) // Poll the done bit ; if (i & bmBERR) return 1; else if (!(i & bmACK)) return 1; else return 0; } // Determine the page size supported by the EEPROM. All of the EEPROMS we use // (Atmel, Xicor and Microchip) will wrap their page address pointer if the page // buffer is overrun. We write 128 incrementing bytes to the EEPROM. We then // read the block back. If location 0 is right, the page size is 128. // If location 0 is wrong, it directly provides a mask for the page size. // For example, if the page size is 4, location 0 will contain 0x7c BYTE EEPROMGetPageSize() { #define MAX_PAGE_SIZE 64 BYTE xdata testData[MAX_PAGE_SIZE]; BYTE xdata saveData[MAX_PAGE_SIZE]; BYTE i; BYTE retval; if (!DB_Addr) return(1); EEPROMRead(0, MAX_PAGE_SIZE, saveData); for (i = 0; i < MAX_PAGE_SIZE; i++) { testData[i] = i; } EEPROMWritePage(0, testData, MAX_PAGE_SIZE); for (i = 0; i < MAX_PAGE_SIZE; i++) { testData[i] = ~i; } EEPROMRead(0, MAX_PAGE_SIZE, testData); i = testData[0]; if (i & 1) retval = 1; // Couldn't read back large EEPROM. Assume page size 1. else { i = (MAX_PAGE_SIZE-1) ^ i; i++; retval = i; } for (i = 0; i < MAX_PAGE_SIZE; i+= retval) EEPROMWritePage(i, saveData, retval); return(retval); } gnss-sdr-0.0.6/firmware/GN3S_v2/src/vectors.a510000644000175000017500000000622512576764164020331 0ustar carlescarles;;; -*- asm -*- ;;; ;;; Copyright 2003 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Radio ;;; ;;; GNU Radio is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Radio is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Radio; see the file COPYING. If not, write to ;;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;; ;;; Interrupt vectors. ;;; N.B. This object module must come first in the list of modules .module vectors ;;; ---------------------------------------------------------------- ;;; standard FX2 interrupt vectors ;;; ---------------------------------------------------------------- .area CSEG (CODE) .area GSINIT (CODE) .area CSEG (CODE) __standard_interrupt_vector:: __reset_vector:: ljmp s_GSINIT ;; 13 8-byte entries. We point them all at __isr_nop ljmp __isr_nop ; 3 bytes .ds 5 ; + 5 = 8 bytes for vector slot ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 ljmp __isr_nop .ds 5 __isr_nop:: reti ;;; ---------------------------------------------------------------- ;;; the FIFO/GPIF autovector. 14 4-byte entries. ;;; must start on a 128 byte boundary. ;;; ---------------------------------------------------------------- . = __reset_vector + 0x0080 __fifo_gpif_autovector:: ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ;;; ---------------------------------------------------------------- ;;; the USB autovector. 32 4-byte entries. ;;; must start on a 256 byte boundary. ;;; ---------------------------------------------------------------- . = __reset_vector + 0x0100 __usb_autovector:: ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop ljmp __isr_nop nop gnss-sdr-0.0.6/firmware/GN3S_v2/src/edit-gpif0000644000175000017500000000643212576764164020127 0ustar carlescarles#!/usr/bin/env python # -*- Python -*- # # Copyright 2003 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # # Edit the gpif.c file generated by the Cypress GPIF Designer Tool and # produce usrp_gpif.c, and usrp_gpif_inline.h, files suitable for our # uses. import re import string import sys def check_flow_state (line, flow_state_dict): mo = re.match (r'/\* Wave (\d) FlowStates \*/ (.*),', line) if mo: wave = int (mo.group (1)) data = mo.group (2) split = data.split (',', 8) v = map (lambda x : int (x, 16), split) # print "%s, %s" % (wave, data) # print "split: ", split # print "v : ", v flow_state_dict[wave] = v def delta (xseq, yseq): # set subtraction z = [] for x in xseq: if x not in yseq: z.append (x) return z def write_define (output, name, pairs): output.write ('#define %s()\t\\\n' % name) output.write ('do {\t\t\t\t\t\\\n') for reg, val in pairs: output.write ('%14s = 0x%02x;\t\t\t\\\n' % (reg, val)) output.write ('} while (0)\n\n') def write_inlines (output, dict): regs = ['FLOWSTATE', 'FLOWLOGIC', 'FLOWEQ0CTL', 'FLOWEQ1CTL', 'FLOWHOLDOFF', 'FLOWSTB', 'FLOWSTBEDGE', 'FLOWSTBHPERIOD', 'GPIFHOLDAMOUNT'] READ_FLOW_STATE = 2 WRITE_FLOW_STATE = 3 read_info = zip (regs, dict[READ_FLOW_STATE]) write_info = zip (regs, dict[WRITE_FLOW_STATE]) output.write ('''/* * Machine generated by "edit-gpif". Do not edit by hand. */ ''') write_define (output, 'setup_flowstate_common', read_info) write_define (output, 'setup_flowstate_read', delta (read_info, write_info)) write_define (output, 'setup_flowstate_write', delta (write_info, read_info)) def edit_gpif (input_name, output_name, inline_name): input = open (input_name, 'r') output = open (output_name, 'w') inline = open (inline_name, 'w') flow_state_dict = {} output.write ('''/* * Machine generated by "edit-gpif". Do not edit by hand. */ ''') while 1: line = input.readline () line = string.replace (line, '\r','') line = re.sub (r' *$', r'', line) check_flow_state (line, flow_state_dict) line = re.sub (r'#include', r'// #include', line) line = re.sub (r'xdata ', r'', line) if re.search (r'GpifInit', line): break output.write (line) output.close () write_inlines (inline, flow_state_dict) inline.close () # gpif.c usrp_gpif.c usrp_gpif_inline.h edit_gpif (sys.argv[1], sys.argv[2], sys.argv[3]) gnss-sdr-0.0.6/firmware/GN3S_v2/src/gn3s_se4120.c0000644000175000017500000000455512576764164020354 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * junered@ltu.se * *Futher modified for usage with a new frontend PCB * by Oscar Isoz GNSS Research Group * Lulea University of Technology * Lulea, Sweden * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "gn3s_se4110.h" static unsigned short idx = 0; char init_se4110(void) { /* D1,D5-D7 are inputs */ IOD = 0xff; OED = 0xff; // OED = 0x1D; // Set Port D as outputs, except ADC_DOUT /* Set all "config" ports */ A0 = 1; A1 = 0; A2 = 0; A3 = 1; A4 = 0; A5 = 0; A7 = 1; OEA = 0xBF; // Set Port A as output return 0; } short fifo_status() { return idx; } char program_3w(void) { char i; char by0, by1; by0 =0x18; by1 =0xA4; OEA = 0xFF; A3 = 0; A0 = 0; for (i=7; i>=0; i--) { A1 = (by1 >> i) & 0x1; A2 = 1; A2 = 0; } /* Latch Enable */ A0 = 1; A0 = 0; for (i=7; i>=0; i--) { A1 = (by0 >> i) & 0x1; A2 = 1; A2 = 0; } /* Latch Enable */ A0 = 1; OEA = 0xB9; return 0; } gnss-sdr-0.0.6/firmware/GN3S_v2/README0000644000175000017500000000130412576764164016416 0ustar carlescarlesSiGe GN3S v2 CUSTOM FIRMWARE FOR GNSS-SDR ----------------------------------------- Source maintainer: Javier Arribas jarribas@cttc.es Here can be found a modified version of the SiGe GN3S v2 firmware. This device was once available at https://www.sparkfun.com/products/8238 The target is the 8051 MCU used in the Cypress FX2 USB 2.0 microcontroller. Basically, the main modifications are: - Disabled the capture filesize limit in order to allow real-time processing - USB VID and PID changed ;; Original one ;;VID_FREE = 0x1781 ; GN3S Project ;;PID_USRP = 0x0B39 ; CU AAU SE4120L-EK3 ;; New one VID_FREE = 0x16C0 ; GN3S Modified driver Project PID_USRP = 0x072F ; CU AAU SE4120L-EK3 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/0000755000175000017500000000000012576764164016306 5ustar carlescarlesgnss-sdr-0.0.6/firmware/GN3S_v2/lib/isr.c0000644000175000017500000000772412576764164017261 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "isr.h" #include "fx2regs.h" #include "syncdelay.h" extern xdata unsigned char _standard_interrupt_vector[]; extern xdata unsigned char _usb_autovector[]; extern xdata unsigned char _fifo_gpif_autovector[]; #define LJMP_OPCODE 0x02 /* * Hook standard interrupt vector. * * vector_number is from the SV_ list. * addr is the address of the interrupt service routine. */ void hook_sv (unsigned char vector_number, unsigned short addr) { bit t; // sanity checks if (vector_number < SV_MIN || vector_number > SV_MAX) return; if ((vector_number & 0x0f) != 0x03 && (vector_number & 0x0f) != 0x0b) return; t = EA; EA = 0; _standard_interrupt_vector[vector_number] = LJMP_OPCODE; _standard_interrupt_vector[vector_number + 1] = addr >> 8; _standard_interrupt_vector[vector_number + 2] = addr & 0xff; EA = t; } /* * Hook usb interrupt vector. * * vector_number is from the UV_ list. * addr is the address of the interrupt service routine. */ void hook_uv (unsigned char vector_number, unsigned short addr) { bit t; // sanity checks if (vector_number < UV_MIN || vector_number > UV_MAX) return; if ((vector_number & 0x3) != 0) return; t = EA; EA = 0; _usb_autovector[vector_number] = LJMP_OPCODE; _usb_autovector[vector_number + 1] = addr >> 8; _usb_autovector[vector_number + 2] = addr & 0xff; EA = t; } /* * Hook fifo/gpif interrupt vector. * * vector_number is from the FGV_ list. * addr is the address of the interrupt service routine. */ void hook_fgv (unsigned char vector_number, unsigned short addr) { bit t; // sanity checks if (vector_number < FGV_MIN || vector_number > FGV_MAX) return; if ((vector_number & 0x3) != 0) return; t = EA; EA = 0; _fifo_gpif_autovector[vector_number] = LJMP_OPCODE; _fifo_gpif_autovector[vector_number + 1] = addr >> 8; _fifo_gpif_autovector[vector_number + 2] = addr & 0xff; EA = t; } /* * One time call to enable autovectoring for both USB and FIFO/GPIF. * * This disables all USB and FIFO/GPIF interrupts and clears * any pending interrupts too. It leaves the master USB and FIFO/GPIF * interrupts enabled. */ void setup_autovectors (void) { // disable master usb and fifo/gpif interrupt enables EIUSB = 0; EIEX4 = 0; hook_sv (SV_INT_2, (unsigned short) _usb_autovector); hook_sv (SV_INT_4, (unsigned short) _fifo_gpif_autovector); // disable all fifo interrupt enables SYNCDELAY; EP2FIFOIE = 0; SYNCDELAY; EP4FIFOIE = 0; SYNCDELAY; EP6FIFOIE = 0; SYNCDELAY; EP8FIFOIE = 0; SYNCDELAY; // clear all pending fifo irqs EP2FIFOIRQ = 0xff; SYNCDELAY; EP4FIFOIRQ = 0xff; SYNCDELAY; EP6FIFOIRQ = 0xff; SYNCDELAY; EP8FIFOIRQ = 0xff; SYNCDELAY; IBNIE = 0; IBNIRQ = 0xff; NAKIE = 0; NAKIRQ = 0xff; USBIE = 0; USBIRQ = 0xff; EPIE = 0; EPIRQ = 0xff; SYNCDELAY; GPIFIE = 0; SYNCDELAY; GPIFIRQ = 0xff; USBERRIE = 0; USBERRIRQ = 0xff; CLRERRCNT = 0; INTSETUP = bmAV2EN | bmAV4EN | bmINT4IN; // clear master irq's for usb and fifo/gpif EXIF &= ~bmEXIF_USBINT; EXIF &= ~bmEXIF_IE4; // enable master usb and fifo/gpif interrrupts EIUSB = 1; EIEX4 = 1; } gnss-sdr-0.0.6/firmware/GN3S_v2/lib/usb_common.rel0000644000175000017500000004314712576764164021164 0ustar carlescarlesXH H 18 areas 15B global symbols M usb_common O -mmcs51 --model-small S _EP8FIFOCFG DefE61B S _EPIRQ DefE65F S _USBERRIE DefE662 S _EP6CS DefE6A5 S _GPIFHOLDAMOUNT DefE60C S _SBUF1 Def00C1 S _EIEX6 Def00EC S _full_speed_device_descr Ref0000 S _EP1INBC DefE68F S _EP8FIFOBCL DefE6B2 S _DBUG DefE6F8 S _B Def00F0 S _EXEN2 Def00CB S _EPIE DefE65E S _WAKEUPCS DefE682 S _EP1OUTBC DefE68D S _EP8CS DefE6A6 S _EP2GPIFTRIG DefE6D4 S _SP Def0081 S _SCON0 Def0098 S _AUTODAT1 Def009C S _EI2C Def00E9 S _full_speed_devqual_descr Ref0000 S _INT2IVEC DefE666 S _AUTODAT2 Def009F S _SCON1 Def00C0 S _SMOD1 Def00DF S _MICROFRAME DefE686 S _SUDPTRCTL DefE6B5 S _EP4GPIFTRIG DefE6DC S _EP2468STAT Def00AA S _OV Def00D2 S _INT4IVEC DefE667 S _GPIFSGLDATLNOX Def00BF S _T2CON Def00C8 S _EP6GPIFTRIG DefE6E4 S _ACC Def00E0 S _string_descriptors Ref0000 S _full_speed_config_descr Ref0000 S _EP2FIFOBUF DefF000 S _C_T2 Def00C9 S _BREAKPT DefE605 S _EP2FIFOPFH DefE630 S _EP8GPIFTRIG DefE6EC S _AUTOPTRH2 Def009D S _SETUPDAT DefE6B8 S _EP2GPIFFLGSEL DefE6D2 S _EP4FIFOBUF DefF400 S _EIPX4 Def00FA S _EP4FIFOPFH DefE632 S _EP2ISOINPKTS DefE640 S _GPIFREADYCFG DefE6F3 S _EIPX5 Def00FB S _fx2_reset_data_toggle Ref0000 S _EP4GPIFFLGSEL DefE6DA S _FLOWSTBHPERIOD DefE6CD S _EP6FIFOBUF DefF800 S _EXIF Def0091 S _RCLK Def00CD S _EIPX6 Def00FC S _EP2FIFOPFL DefE631 S _EP6FIFOPFH DefE634 S _EP4ISOINPKTS DefE641 S _DPH1 Def0085 S _AUTOPTRL2 Def009E S _EP6GPIFFLGSEL DefE6E2 S _EP8FIFOBUF DefFC00 S _TCLK Def00CC S _PI2C Def00F9 S _EP4FIFOPFL DefE633 S _EP8FIFOPFH DefE636 S _EP6ISOINPKTS DefE642 S _FNADDR DefE687 S _EP8GPIFFLGSEL DefE6EA S _TESTCFG DefE6F9 S _PCON Def0087 S _P Def00D0 S _GPIF_WAVE_DATA DefE400 S _EP6FIFOPFL DefE635 S _EP8ISOINPKTS DefE643 S _I2CS DefE678 S _DPL1 Def0084 S _GPIFIRQ DefE661 S _EP0BCH DefE68A S _EP01STAT Def00BA S _fx2_stall_ep0 Ref0000 S _EP8FIFOPFL DefE637 S _EP1INCS DefE6A2 S _EIE Def00E8 S _RESI Def00DC S _GPIFIE DefE660 S _EP2BCH DefE690 S _EP1OUTCS DefE6A1 S _TCON Def0088 S _TMOD Def0089 S _OEA Def00B2 S _EXF2 Def00CE S _EP0BCL DefE68B S _EP4BCH DefE694 S _OEB Def00B3 S _REN1 Def00C4 S _EP2CFG DefE612 S _EP2FIFOIRQ DefE651 S _GPIFREADYSTAT DefE6F4 S _OEC Def00B4 S _EP2BCL DefE691 S _EP6BCH DefE698 S _OED Def00B5 S _EP4CFG DefE613 S _EP2FIFOIE DefE650 S _EP4FIFOIRQ DefE653 S _IOA Def0080 S _OEE Def00B6 S _EP4BCL DefE695 S _EP8BCH DefE69C S _IOB Def0090 S _PUSB Def00F8 S _hook_uv Ref0000 S _EP6CFG DefE614 S _EP4FIFOIE DefE652 S _EP6FIFOIRQ DefE655 S _IOC Def00A0 S _INTSETUP DefE668 S _EP6BCL DefE699 S _DPH Def0083 S _IOD Def00B0 S _EP8CFG DefE615 S _EP6FIFOIE DefE654 S _EP8FIFOIRQ DefE657 S _USBFRAMEH DefE684 S _IOE Def00B1 S _RB81 Def00C2 S _EP2AUTOINLENH DefE620 S _EP8BCL DefE69D S _GPIFABORT DefE6F5 S _INT2CLR Def00A1 S _EIP Def00F8 S _IE0 Def0089 S _EP8FIFOIE DefE656 S _IE1 Def008B S _TB81 Def00C3 S _EP4AUTOINLENH DefE622 S _DPL Def0082 S _INT4CLR Def00A2 S _AUTOPTRSETUP Def00AF S _RCAP2H Def00CB S _app_vendor_cmd Ref0000 S _USBFRAMEL DefE685 S _XGPIFSGLDATLX DefE6F1 S _FLOWEQ0CTL DefE6C8 S _FLOWSTB DefE6CB S _SM01 Def00C7 S _INT6 Def00DB S _EP2AUTOINLENL DefE621 S _EP6AUTOINLENH DefE624 S _SUSPEND DefE681 S _FLOWEQ1CTL DefE6C9 S _EP0BUF DefE740 S _SM11 Def00C6 S _CP_RL2 Def00C8 S _GPIFWFSELECT DefE6C0 S _SM21 Def00C5 S _EP4AUTOINLENL DefE623 S _EP8AUTOINLENH DefE626 S _RCAP2L Def00CA S _SEL Def0086 S _AC Def00D6 S _IFCONFIG DefE601 S _IBNIRQ DefE659 S _GPIFADRH DefE6C4 S _XGPIFSGLDATH DefE6F0 S _REN Def009C S _EP6AUTOINLENL DefE625 S _NAKIRQ DefE65B S _FLOWLOGIC DefE6C7 S _EA Def00AF S _FIFORESET DefE604 S _IBNIE DefE658 S _GPIFIDLECTL DefE6C2 S _UDMACRCH DefE67D S _DPS Def0086 S _EP8AUTOINLENL DefE627 S _NAKIE DefE65A S _CT1 DefE6FB S _ES0 Def00AC S _FIFOPINPOLAR DefE609 S _GPIFADRL DefE6C5 S _EP2GPIFPFSTOP DefE6D3 S _CT2 DefE6FC S _GPIFSGLDATLX Def00BE S _ET0 Def00A9 S _ES1 Def00AE S _SUDPTRH DefE6B3 S _USBTEST DefE6FA S _CT3 DefE6FD S _MPAGE Def0092 S _TF0 Def008D S _ET1 Def00AB S _EP4GPIFPFSTOP DefE6DB S _UDMACRCL DefE67E S _CT4 DefE6FE S _EP24FIFOFLGS Def00AB S _TF1 Def008F S _ET2 Def00AD S _RES_WAVEDATA_END DefE480 S _TH0 Def008C S _RB8 Def009A S _RI1 Def00C0 S _TF2 Def00CF S _EP1INCFG DefE611 S _TOGCTL DefE683 S _EP6GPIFPFSTOP DefE6E3 S _TH1 Def008D S _GPIFSGLDATH Def00BD S _IT0 Def0088 S _EX0 Def00A8 S _EP1OUTCFG DefE610 S _SUDPTRL DefE6B4 S _CKCON Def008E S _IE Def00A8 S _TH2 Def00CD S _EICON Def00D8 S _IT1 Def008A S _TB8 Def009B S _EX1 Def00AA S _TI1 Def00C1 S _high_speed_device_descr Ref0000 S _CLRERRCNT DefE665 S _GPIFTCB0 DefE6D1 S _EP8GPIFPFSTOP DefE6EB S _REVCTL DefE60B S _ERRCNTLIM DefE664 S _GPIFTCB1 DefE6D0 S _TL0 Def008A S _APTR1H Def009A S _SM0 Def009F S _high_speed_devqual_descr Ref0000 S _UART230 DefE608 S _GPIFTCB2 DefE6CF S _TL1 Def008B S _A0 Def0080 S _SM1 Def009E S _GPIFTCB3 DefE6CE S _UDMACRCQUAL DefE67F S _TL2 Def00CC S _A1 Def0081 S _SM2 Def009D S _FL Def00D1 S _EP68FIFOFLGS Def00AC S _A2 Def0082 S _PS0 Def00BC S _I2DAT DefE679 S _APTR1L Def009B S _A3 Def0083 S _D0 Def00B0 S _PT0 Def00B9 S _PS1 Def00BE S _high_speed_config_descr Ref0000 S _BPADDRH DefE606 S _A4 Def0084 S _D1 Def00B1 S _PT1 Def00BB S _RS0 Def00D3 S _nstring_descriptors Ref0000 S _USBIRQ DefE65D S _PORTACFG DefE670 S _FLOWSTBEDGE DefE6CC S _A5 Def0085 S _TR0 Def008C S _D2 Def00B2 S _PT2 Def00BD S _RS1 Def00D4 S _F0 Def00D5 S _PINFLAGSAB DefE602 S _EP2FIFOFLGS DefE6A7 S _A6 Def0086 S _TR1 Def008E S _D3 Def00B3 S _USBIE DefE65C S _PORTCCFG DefE671 S _EP2FIFOBCH DefE6AB S _A7 Def0087 S _D4 Def00B4 S _PX0 Def00B8 S _TR2 Def00CA S _ERESI Def00DD S _EIUSB Def00E8 S _BPADDRL DefE607 S _EP4FIFOFLGS DefE6A8 S _GPIFCTLCFG DefE6C3 S _FLOWSTATE DefE6C6 S _IP Def00B8 S _D5 Def00B5 S _PX1 Def00BA S _REVID DefE60A S _PORTECFG DefE672 S _EP4FIFOBCH DefE6AD S _GPIFIDLECS DefE6C1 S _FLOWHOLDOFF DefE6CA S _EP1INBUF DefE7C0 S _PSW Def00D0 S _D6 Def00B6 S _hook_uv_PARM_2 Ref0000 S _PINFLAGSCD DefE603 S _EP2FIFOCFG DefE618 S _XAUTODAT1 DefE67B S _EP0CS DefE6A0 S _EP6FIFOFLGS DefE6A9 S _EP1OUTBUF DefE780 S _RI Def0098 S _D7 Def00B7 S _XAUTODAT2 DefE67C S _EP2FIFOBCL DefE6AC S _EP6FIFOBCH DefE6AF S _GPIFTRIG Def00BB S _CY Def00D7 S _EP4FIFOCFG DefE619 S _INPKTEND DefE648 S _EP2CS DefE6A3 S _EP8FIFOFLGS DefE6AA S _TI Def0099 S _CPUCS DefE600 S _OUTPKTEND DefE649 S _I2CTL DefE67A S _EP4FIFOBCL DefE6AE S _EP8FIFOBCH DefE6B1 S _XGPIFSGLDATLNOX DefE6F2 S _EP6FIFOCFG DefE61A S _USBERRIRQ DefE663 S _EP4CS DefE6A4 S _EIEX4 Def00EA S _USBCS DefE680 S _EP6FIFOBCL DefE6B0 S _SBUF0 Def0099 S _EIEX5 Def00EB A _CODE size 0 flags 0 addr 0 A RSEG size 0 flags 0 addr 0 A REG_BANK_0 size 8 flags 4 addr 0 A BIT_BANK size 1 flags 4 addr 0 A DSEG size A flags 0 addr 0 S __usb_alt_setting Def0001 S _other_config_descr Def0008 S __usb_config Def0000 S _current_device_descr Def0002 S _current_devqual_descr Def0004 S _current_config_descr Def0006 A OSEG size 0 flags 4 addr 0 A ISEG size 0 flags 0 addr 0 A IABS size 0 flags 8 addr 0 A BSEG size 2 flags 80 addr 0 S __usb_rx_overrun Def0001 S __usb_got_SUDAV Def0000 A PSEG size 0 flags 50 addr 0 A XSEG size 0 flags 40 addr 0 A XABS size 0 flags 48 addr 0 A HOME size 0 flags 20 addr 0 A GSINIT0 size 0 flags 20 addr 0 A GSINIT1 size 0 flags 20 addr 0 A GSINIT2 size 0 flags 20 addr 0 A GSINIT3 size 0 flags 20 addr 0 A GSINIT4 size 0 flags 20 addr 0 A GSINIT5 size 0 flags 20 addr 0 A GSINIT size 6 flags 20 addr 0 A GSFINAL size 0 flags 20 addr 0 A CSEG size 424 flags 20 addr 0 S _epcs Def011A S _usb_handle_setup_packet Def0163 S _plausible_endpoint Def00FB S _usb_install_handlers Def00CD A CONST size 0 flags 20 addr 0 A CABS size 0 flags 28 addr 0 T 00 00 R 00 00 00 02 T 00 00 R 00 00 00 03 T 00 00 R 00 00 00 03 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 04 T 00 01 R 00 00 00 04 T 00 01 R 00 00 00 04 T 00 02 R 00 00 00 04 T 00 02 R 00 00 00 04 T 00 04 R 00 00 00 04 T 00 04 R 00 00 00 04 T 00 06 R 00 00 00 04 T 00 06 R 00 00 00 04 T 00 08 R 00 00 00 04 T 00 08 R 00 00 00 04 T 00 00 R 00 00 00 08 T 00 00 R 00 00 00 08 T 00 01 R 00 00 00 08 T 00 01 R 00 00 00 08 T 00 00 75 00 00 00 00 75 00 00 01 00 R 00 00 00 13 F1 21 03 00 04 F1 21 08 00 04 T 00 00 R 00 00 00 15 T 00 00 90 E6 80 E0 FA 30 E7 19 75 00 00 02 R 00 00 00 15 F1 21 0B 00 04 T 00 0A 00 00 00 75 00 00 03 R 00 00 00 15 F1 03 02 00 E2 F1 21 06 00 04 T 00 0D 00 00 00 75 00 00 04 R 00 00 00 15 F1 83 02 00 E2 F1 21 06 00 04 T 00 10 00 00 00 75 00 00 05 R 00 00 00 15 F1 03 02 00 EC F1 21 06 00 04 T 00 13 00 00 00 75 00 00 06 R 00 00 00 15 F1 83 02 00 EC F1 21 06 00 04 T 00 16 00 00 00 75 00 00 07 R 00 00 00 15 F1 03 02 01 01 F1 21 06 00 04 T 00 19 00 00 00 75 00 00 08 R 00 00 00 15 F1 83 02 01 01 F1 21 06 00 04 T 00 1C 00 00 00 75 00 00 09 R 00 00 00 15 F1 03 02 00 26 F1 21 06 00 04 T 00 1F 00 00 00 22 R 00 00 00 15 F1 83 02 00 26 T 00 21 R 00 00 00 15 T 00 21 75 00 00 02 00 00 00 75 R 00 00 00 15 F1 21 03 00 04 F1 03 06 00 07 T 00 25 00 00 03 00 00 00 75 R 00 00 00 15 F1 21 02 00 04 F1 83 05 00 07 T 00 28 00 00 04 00 00 00 75 R 00 00 00 15 F1 21 02 00 04 F1 03 05 00 16 T 00 2B 00 00 05 00 00 00 75 R 00 00 00 15 F1 21 02 00 04 F1 83 05 00 16 T 00 2E 00 00 06 00 00 00 75 R 00 00 00 15 F1 21 02 00 04 F1 03 05 00 26 T 00 31 00 00 07 00 00 00 75 R 00 00 00 15 F1 21 02 00 04 F1 83 05 00 26 T 00 34 00 00 08 00 00 00 75 R 00 00 00 15 F1 21 02 00 04 F1 03 05 01 01 T 00 37 00 00 09 00 00 00 22 R 00 00 00 15 F1 21 02 00 04 F1 83 05 01 01 T 00 3A R 00 00 00 15 T 00 3A 53 91 EF 75 A1 00 D2 00 00 00 32 R 00 00 00 15 F1 21 09 00 08 T 00 43 R 00 00 00 15 T 00 43 C0 00 00 00 C0 E0 C0 F0 C0 82 C0 83 C0 02 R 00 00 00 15 F1 21 03 00 03 T 00 4F C0 03 C0 04 C0 05 C0 06 C0 07 C0 00 C0 01 R 00 00 00 15 T 00 5D C0 D0 75 D0 00 53 91 EF 75 A1 00 12 00 00 R 00 00 00 15 00 0E 00 15 T 00 6B D0 D0 D0 01 D0 00 D0 07 D0 06 D0 05 D0 04 R 00 00 00 15 T 00 79 D0 03 D0 02 D0 83 D0 82 D0 F0 D0 E0 D0 R 00 00 00 15 T 00 86 00 00 00 32 R 00 00 00 15 F1 21 02 00 03 T 00 88 R 00 00 00 15 T 00 88 C0 00 00 00 C0 E0 C0 F0 C0 82 C0 83 C0 02 R 00 00 00 15 F1 21 03 00 03 T 00 94 C0 03 C0 04 C0 05 C0 06 C0 07 C0 00 C0 01 R 00 00 00 15 T 00 A2 C0 D0 75 D0 00 53 91 EF 75 A1 00 12 00 00 R 00 00 00 15 00 0E 00 15 T 00 B0 D0 D0 D0 01 D0 00 D0 07 D0 06 D0 05 D0 04 R 00 00 00 15 T 00 BE D0 03 D0 02 D0 83 D0 82 D0 F0 D0 E0 D0 R 00 00 00 15 T 00 CB 00 00 00 32 R 00 00 00 15 F1 21 02 00 03 T 00 CD R 00 00 00 15 T 00 CD 12 00 00 75 00 00 00 R 00 00 00 15 00 03 00 15 F1 23 06 01 2E T 00 D2 00 00 3A 75 00 00 01 R 00 00 00 15 F1 01 02 00 15 F1 23 06 01 2E T 00 D5 00 00 3A 75 82 00 12 00 00 75 R 00 00 00 15 F1 81 02 00 15 02 09 00 75 T 00 DD 00 00 00 00 00 43 75 R 00 00 00 15 F1 23 02 01 2E F1 01 05 00 15 T 00 E0 00 00 01 00 00 43 75 82 10 12 R 00 00 00 15 F1 23 02 01 2E F1 81 05 00 15 T 00 E6 00 00 75 00 00 00 R 00 00 00 15 02 02 00 75 F1 23 05 01 2E T 00 EA 00 00 88 75 00 00 01 R 00 00 00 15 F1 01 02 00 15 F1 23 06 01 2E T 00 ED 00 00 88 75 82 14 12 00 00 90 E6 5C 74 31 R 00 00 00 15 F1 81 02 00 15 02 09 00 75 T 00 F9 F0 22 R 00 00 00 15 T 00 FB R 00 00 00 15 T 00 FB E5 82 54 7F FA 24 F7 50 04 75 82 00 22 R 00 00 00 15 T 01 08 R 00 00 00 15 T 01 08 BA 01 04 75 82 01 22 R 00 00 00 15 T 01 0F R 00 00 00 15 T 01 0F 53 02 01 E4 BA 00 01 04 R 00 00 00 15 T 01 17 R 00 00 00 15 T 01 17 F5 82 22 R 00 00 00 15 T 01 1A R 00 00 00 15 T 01 1A AA 82 BA 01 0C 90 E6 A1 E0 FB 7C 00 8B 82 R 00 00 00 15 T 01 28 8C 83 22 R 00 00 00 15 T 01 2B R 00 00 00 15 T 01 2B BA 81 0C 90 E6 A2 E0 FB 7C 00 8B 82 8C 83 R 00 00 00 15 T 01 39 22 R 00 00 00 15 T 01 3A R 00 00 00 15 T 01 3A 53 02 7F EA 70 0C 90 E6 A0 E0 FB 7C 00 8B R 00 00 00 15 T 01 48 82 8C 83 22 R 00 00 00 15 T 01 4C R 00 00 00 15 T 01 4C 90 E6 A3 E0 FB 7C 00 EA C3 13 FA 7D 00 EA R 00 00 00 15 T 01 5A 2B FB ED 3C 8B 82 F5 83 22 R 00 00 00 15 T 01 63 R 00 00 00 15 T 01 63 C2 00 00 00 90 E6 B8 E0 FA 53 02 60 BA 00 R 00 00 00 15 F1 21 03 00 08 T 01 6F 02 80 28 R 00 00 00 15 T 01 72 R 00 00 00 15 T 01 72 BA 20 02 80 0D R 00 00 00 15 T 01 77 R 00 00 00 15 T 01 77 BA 40 02 80 0E R 00 00 00 15 T 01 7C R 00 00 00 15 T 01 7C BA 60 02 80 03 R 00 00 00 15 T 01 81 R 00 00 00 15 T 01 81 02 04 1C R 00 00 00 15 00 03 00 15 T 01 84 R 00 00 00 15 T 01 84 R 00 00 00 15 T 01 84 12 00 00 02 04 1C R 00 00 00 15 02 03 00 55 00 06 00 15 T 01 8A R 00 00 00 15 T 01 8A 12 00 00 E5 82 60 03 02 04 1C R 00 00 00 15 02 03 00 92 00 0A 00 15 T 01 94 R 00 00 00 15 T 01 94 12 00 00 02 04 1C R 00 00 00 15 02 03 00 55 00 06 00 15 T 01 9A R 00 00 00 15 T 01 9A 90 E6 B8 E0 FA 53 02 80 BA 80 02 80 03 R 00 00 00 15 T 01 A7 R 00 00 00 15 T 01 A7 02 03 1D R 00 00 00 15 00 03 00 15 T 01 AA R 00 00 00 15 T 01 AA 90 E6 B9 E0 FA BA 00 03 02 02 9B R 00 00 00 15 00 0B 00 15 T 01 B5 R 00 00 00 15 T 01 B5 BA 06 02 80 35 R 00 00 00 15 T 01 BA R 00 00 00 15 T 01 BA BA 08 02 80 08 R 00 00 00 15 T 01 BF R 00 00 00 15 T 01 BF BA 0A 02 80 17 R 00 00 00 15 T 01 C4 R 00 00 00 15 T 01 C4 02 03 17 R 00 00 00 15 00 03 00 15 T 01 C7 R 00 00 00 15 T 01 C7 90 E7 40 E5 00 00 00 F0 90 E6 8A E4 F0 90 R 00 00 00 15 F1 21 06 00 04 T 01 D3 E6 8B 74 01 F0 02 04 1C R 00 00 00 15 00 08 00 15 T 01 DB R 00 00 00 15 T 01 DB 90 E7 40 E5 00 00 01 F0 90 E6 8A E4 F0 90 R 00 00 00 15 F1 21 06 00 04 T 01 E7 E6 8B 74 01 F0 02 04 1C R 00 00 00 15 00 08 00 15 T 01 EF R 00 00 00 15 T 01 EF 90 E6 BB E0 FA BA 01 02 80 17 R 00 00 00 15 T 01 F9 R 00 00 00 15 T 01 F9 BA 02 02 80 38 R 00 00 00 15 T 01 FE R 00 00 00 15 T 01 FE BA 03 02 80 59 R 00 00 00 15 T 02 03 R 00 00 00 15 T 02 03 BA 06 02 80 1B R 00 00 00 15 T 02 08 R 00 00 00 15 T 02 08 BA 07 02 80 3C R 00 00 00 15 T 02 0D R 00 00 00 15 T 02 0D 02 02 95 R 00 00 00 15 00 03 00 15 T 02 10 R 00 00 00 15 T 02 10 AA 00 00 02 AB 00 00 03 90 E6 B3 EB F0 7B R 00 00 00 15 F1 21 03 00 04 F1 21 07 00 04 T 02 1A 00 90 E6 B4 EA F0 02 04 1C R 00 00 00 15 00 09 00 15 T 02 23 R 00 00 00 15 T 02 23 AA 00 00 04 AB 00 00 05 90 E6 B3 EB F0 7B R 00 00 00 15 F1 21 03 00 04 F1 21 07 00 04 T 02 2D 00 90 E6 B4 EA F0 02 04 1C R 00 00 00 15 00 09 00 15 T 02 36 R 00 00 00 15 T 02 36 AA 00 00 06 AB 00 00 07 90 E6 B3 EB F0 7B R 00 00 00 15 F1 21 03 00 04 F1 21 07 00 04 T 02 40 00 90 E6 B4 EA F0 02 04 1C R 00 00 00 15 00 09 00 15 T 02 49 R 00 00 00 15 T 02 49 AA 00 00 08 AB 00 00 09 90 E6 B3 EB F0 7B R 00 00 00 15 F1 21 03 00 04 F1 21 07 00 04 T 02 53 00 90 E6 B4 EA F0 02 04 1C R 00 00 00 15 00 09 00 15 T 02 5C R 00 00 00 15 T 02 5C 90 E6 BA E0 FA 90 00 00 E0 FB C3 EA 9B 40 R 00 00 00 15 02 08 01 07 T 02 6A 06 12 00 00 02 04 1C R 00 00 00 15 02 04 00 55 00 07 00 15 T 02 71 R 00 00 00 15 T 02 71 90 E6 BA E0 75 F0 02 A4 24 00 00 00 F5 82 R 00 00 00 15 F1 03 0B 00 25 T 02 7D 74 00 00 00 35 F0 F5 83 E0 FA A3 E0 90 R 00 00 00 15 F1 83 03 00 25 T 02 88 E6 B3 F0 7B 00 90 E6 B4 EA F0 02 04 1C R 00 00 00 15 00 0D 00 15 T 02 95 R 00 00 00 15 T 02 95 12 00 00 02 04 1C R 00 00 00 15 02 03 00 55 00 06 00 15 T 02 9B R 00 00 00 15 T 02 9B 90 E6 B8 E0 FA 53 02 1F BA 00 02 80 0A R 00 00 00 15 T 02 A8 R 00 00 00 15 T 02 A8 BA 01 02 80 1C R 00 00 00 15 T 02 AD R 00 00 00 15 T 02 AD BA 02 64 80 2C R 00 00 00 15 T 02 B2 R 00 00 00 15 T 02 B2 90 E7 40 74 01 F0 90 E7 41 E4 F0 90 E6 8A R 00 00 00 15 T 02 C0 F0 90 E6 8B 74 02 F0 80 4E R 00 00 00 15 T 02 C9 R 00 00 00 15 T 02 C9 90 E7 40 E4 F0 90 E7 41 F0 90 E6 8A F0 90 R 00 00 00 15 T 02 D7 E6 8B 74 02 F0 80 39 R 00 00 00 15 T 02 DE R 00 00 00 15 T 02 DE 90 E6 BC E0 F5 82 12 00 FB E5 82 60 24 90 R 00 00 00 15 00 09 00 15 T 02 EC E6 BC E0 F5 82 12 01 1A E0 FA 53 02 01 90 R 00 00 00 15 00 08 00 15 T 02 FA E7 40 EA F0 90 E7 41 E4 F0 90 E6 8A F0 90 R 00 00 00 15 T 03 08 E6 8B 74 02 F0 80 08 R 00 00 00 15 T 03 0F R 00 00 00 15 T 03 0F 12 00 00 80 03 R 00 00 00 15 02 03 00 55 T 03 14 R 00 00 00 15 T 03 14 12 00 00 R 00 00 00 15 02 03 00 55 T 03 17 R 00 00 00 15 T 03 17 12 00 00 02 04 1C R 00 00 00 15 02 03 00 55 00 06 00 15 T 03 1D R 00 00 00 15 T 03 1D 90 E6 B9 E0 FA 24 F4 50 03 02 04 19 R 00 00 00 15 00 0C 00 15 T 03 29 R 00 00 00 15 T 03 29 EA 2A 2A 90 03 30 73 R 00 00 00 15 00 06 00 15 T 03 30 R 00 00 00 15 T 03 30 02 04 19 02 03 66 02 R 00 00 00 15 00 03 00 15 00 06 00 15 T 03 37 03 E1 02 03 C2 02 R 00 00 00 15 00 02 00 15 00 05 00 15 T 03 3D 04 19 02 04 19 02 R 00 00 00 15 00 02 00 15 00 05 00 15 T 03 43 04 19 02 04 19 02 R 00 00 00 15 00 02 00 15 00 05 00 15 T 03 49 04 19 02 03 54 02 R 00 00 00 15 00 02 00 15 00 05 00 15 T 03 4F 04 19 02 03 5D R 00 00 00 15 00 02 00 15 00 05 00 15 T 03 54 R 00 00 00 15 T 03 54 90 E6 BA E0 F5 00 00 00 02 04 1C R 00 00 00 15 F1 21 07 00 04 00 0B 00 15 T 03 5D R 00 00 00 15 T 03 5D 90 E6 BA E0 F5 00 00 01 02 04 1C R 00 00 00 15 F1 21 07 00 04 00 0B 00 15 T 03 66 R 00 00 00 15 T 03 66 90 E6 B8 E0 FA 53 02 1F BA 00 02 80 05 R 00 00 00 15 T 03 73 R 00 00 00 15 T 03 73 BA 02 47 80 0A R 00 00 00 15 T 03 78 R 00 00 00 15 T 03 78 90 E6 BA E0 12 00 00 02 04 1C R 00 00 00 15 02 07 00 55 00 0A 00 15 T 03 82 R 00 00 00 15 T 03 82 90 E6 BA E0 70 30 90 E6 BC E0 F5 82 12 R 00 00 00 15 T 03 8F 00 FB E5 82 60 23 90 E6 BC E0 F5 82 12 R 00 00 00 15 00 02 00 15 T 03 9C 01 1A AA 82 AB 83 E0 FC 53 04 FE 8A 82 8B R 00 00 00 15 00 02 00 15 T 03 AA 83 EC F0 90 E6 BC E0 F5 82 12 00 00 80 64 R 00 00 00 15 02 0C 00 35 T 03 B8 R 00 00 00 15 T 03 B8 12 00 00 80 5F R 00 00 00 15 02 03 00 55 T 03 BD R 00 00 00 15 T 03 BD 12 00 00 80 5A R 00 00 00 15 02 03 00 55 T 03 C2 R 00 00 00 15 T 03 C2 90 E6 B8 E0 FA 53 02 1F BA 00 4F 90 E6 BA R 00 00 00 15 T 03 D0 E0 FA BA 01 02 80 05 R 00 00 00 15 T 03 D7 R 00 00 00 15 T 03 D7 BA 02 02 80 40 R 00 00 00 15 T 03 DC R 00 00 00 15 T 03 DC R 00 00 00 15 T 03 DC 12 00 00 80 3B R 00 00 00 15 02 03 00 55 T 03 E1 R 00 00 00 15 T 03 E1 90 E6 BA E0 FA 70 2C 90 E6 BC E0 F5 82 12 R 00 00 00 15 T 03 EF 00 FB E5 82 60 1A 90 E6 BC E0 F5 82 12 R 00 00 00 15 00 02 00 15 T 03 FC 01 1A AA 82 AB 83 E0 FC 43 04 01 8A 82 8B R 00 00 00 15 00 02 00 15 T 04 0A 83 EC F0 80 0D R 00 00 00 15 T 04 0F R 00 00 00 15 T 04 0F 12 00 00 80 08 R 00 00 00 15 02 03 00 55 T 04 14 R 00 00 00 15 T 04 14 12 00 00 80 03 R 00 00 00 15 02 03 00 55 T 04 19 R 00 00 00 15 T 04 19 R 00 00 00 15 T 04 19 R 00 00 00 15 T 04 19 12 00 00 R 00 00 00 15 02 03 00 55 T 04 1C R 00 00 00 15 T 04 1C 90 E6 A0 E0 44 80 F0 22 R 00 00 00 15 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/isr.sym0000644000175000017500000014660512576764164017651 0ustar carlescarles ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1. Symbol Table A 00D6 AC 00D6 ACC 00E0 ACC.0 00E0 ACC.1 00E1 ACC.2 00E2 ACC.3 00E3 ACC.4 00E4 ACC.5 00E5 ACC.6 00E6 ACC.7 00E7 B 00F0 B.0 00F0 B.1 00F1 B.2 00F2 B.3 00F3 B.4 00F4 B.5 00F5 B.6 00F6 B.7 00F7 CPRL2 00C8 CT2 00C9 CY 00D7 DPH 0083 DPL 0082 EA 00AF ES 00AC ET0 00A9 ET1 00AB ET2 00AD EX0 00A8 EX1 00AA EXEN2 00CB EXF2 00CE F0 00D5 IE 00A8 IE.0 00A8 IE.1 00A9 IE.2 00AA IE.3 00AB IE.4 00AC IE.5 00AD IE.7 00AF IE0 0089 IE1 008B INT0 00B2 INT1 00B3 IP 00B8 IP.0 00B8 IP.1 00B9 IP.2 00BA IP.3 00BB IP.4 00BC IP.5 00BD IT0 0088 IT1 008A OV 00D2 P 00D0 P0 0080 P0.0 0080 P0.1 0081 P0.2 0082 P0.3 0083 P0.4 0084 P0.5 0085 P0.6 0086 P0.7 0087 P1 0090 P1.0 0090 P1.1 0091 P1.2 0092 P1.3 0093 P1.4 0094 P1.5 0095 P1.6 0096 P1.7 0097 P2 00A0 P2.0 00A0 P2.1 00A1 P2.2 00A2 P2.3 00A3 P2.4 00A4 P2.5 00A5 P2.6 00A6 P2.7 00A7 P3 00B0 P3.0 00B0 P3.1 00B1 P3.2 00B2 P3.3 00B3 P3.4 00B4 P3.5 00B5 P3.6 00B6 P3.7 00B7 PCON 0087 PS 00BC PSW 00D0 PSW.0 00D0 PSW.1 00D1 PSW.2 00D2 PSW.3 00D3 PSW.4 00D4 PSW.5 00D5 PSW.6 00D6 PSW.7 00D7 PT0 00B9 PT1 00BB PT2 00BD PX0 00B8 PX1 00BA RB8 009A RCAP2H 00CB RCAP2L 00CA RCLK 00CD REN 009C RI 0098 RS0 00D3 RS1 00D4 RXD 00B0 SBUF 0099 SCON 0098 SCON.0 0098 SCON.1 0099 SCON.2 009A SCON.3 009B SCON.4 009C SCON.5 009D SCON.6 009E SCON.7 009F SM0 009F SM1 009E SM2 009D SP 0081 T2CON 00C8 T2CON.0 00C8 T2CON.1 00C9 T2CON.2 00CA T2CON.3 00CB T2CON.4 00CC T2CON.5 00CD T2CON.6 00CE T2CON.7 00CF TB8 009B TCLK 00CC TCON 0088 TCON.0 0088 TCON.1 0089 TCON.2 008A TCON.3 008B TCON.4 008C TCON.5 008D TCON.6 008E TCON.7 008F TF0 008D TF1 008F TF2 00CF TH0 008C TH1 008D TH2 00CD TI 0099 TL0 008A TL1 008B TL2 00CC TMOD 0089 TR0 008C TR1 008E TR2 00CA TXD 00B1 _A0 = 0080 G _A1 = 0081 G _A2 = 0082 G _A3 = 0083 G _A4 = 0084 G _A5 = 0085 G _A6 = 0086 G _A7 = 0087 G _AC = 00D6 G _ACC = 00E0 G _APTR1H = 009A G _APTR1L = 009B G _AUTODAT1 = 009C G _AUTODAT2 = 009F G _AUTOPTRH2 = 009D G _AUTOPTRL2 = 009E G _AUTOPTRSETUP = 00AF G _B = 00F0 G _BPADDRH = E606 G _BPADDRL = E607 G _BREAKPT = E605 G _CKCON = 008E G _CLRERRCNT = E665 G _CPUCS = E600 G _CP_RL2 = 00C8 G _CT1 = E6FB G _CT2 = E6FC G _CT3 = E6FD G _CT4 = E6FE G _CY = 00D7 G _C_T2 = 00C9 G _D0 = 00B0 G _D1 = 00B1 G _D2 = 00B2 G _D3 = 00B3 G _D4 = 00B4 G _D5 = 00B5 G _D6 = 00B6 G _D7 = 00B7 G _DBUG = E6F8 G _DPH = 0083 G _DPH1 = 0085 G _DPL = 0082 G _DPL1 = 0084 G _DPS = 0086 G _EA = 00AF G _EI2C = 00E9 G _EICON = 00D8 G _EIE = 00E8 G _EIEX4 = 00EA G _EIEX5 = 00EB G _EIEX6 = 00EC G _EIP = 00F8 G _EIPX4 = 00FA G _EIPX5 = 00FB G _EIPX6 = 00FC G _EIUSB = 00E8 G _EP01STAT = 00BA G _EP0BCH = E68A G _EP0BCL = E68B G _EP0BUF = E740 G _EP0CS = E6A0 G _EP1INBC = E68F G _EP1INBUF = E7C0 G _EP1INCFG = E611 G _EP1INCS = E6A2 G _EP1OUTBC = E68D G _EP1OUTBUF = E780 G _EP1OUTCFG = E610 G _EP1OUTCS = E6A1 G _EP2468STAT = 00AA G _EP24FIFOFLGS = 00AB G _EP2AUTOINLENH = E620 G _EP2AUTOINLENL = E621 G _EP2BCH = E690 G _EP2BCL = E691 G _EP2CFG = E612 G _EP2CS = E6A3 G _EP2FIFOBCH = E6AB G _EP2FIFOBCL = E6AC G _EP2FIFOBUF = F000 G _EP2FIFOCFG = E618 G _EP2FIFOFLGS = E6A7 G _EP2FIFOIE = E650 G _EP2FIFOIRQ = E651 G _EP2FIFOPFH = E630 G _EP2FIFOPFL = E631 G _EP2GPIFFLGSEL = E6D2 G _EP2GPIFPFSTOP = E6D3 G _EP2GPIFTRIG = E6D4 G _EP2ISOINPKTS = E640 G _EP4AUTOINLENH = E622 G _EP4AUTOINLENL = E623 G _EP4BCH = E694 G _EP4BCL = E695 G _EP4CFG = E613 G _EP4CS = E6A4 G _EP4FIFOBCH = E6AD G _EP4FIFOBCL = E6AE G _EP4FIFOBUF = F400 G _EP4FIFOCFG = E619 G _EP4FIFOFLGS = E6A8 G _EP4FIFOIE = E652 G _EP4FIFOIRQ = E653 G _EP4FIFOPFH = E632 G _EP4FIFOPFL = E633 G _EP4GPIFFLGSEL = E6DA G _EP4GPIFPFSTOP = E6DB G _EP4GPIFTRIG = E6DC G _EP4ISOINPKTS = E641 G _EP68FIFOFLGS = 00AC G _EP6AUTOINLENH = E624 G _EP6AUTOINLENL = E625 G _EP6BCH = E698 G _EP6BCL = E699 G _EP6CFG = E614 G _EP6CS = E6A5 G _EP6FIFOBCH = E6AF G _EP6FIFOBCL = E6B0 G _EP6FIFOBUF = F800 G _EP6FIFOCFG = E61A G _EP6FIFOFLGS = E6A9 G _EP6FIFOIE = E654 G _EP6FIFOIRQ = E655 G _EP6FIFOPFH = E634 G _EP6FIFOPFL = E635 G _EP6GPIFFLGSEL = E6E2 G _EP6GPIFPFSTOP = E6E3 G _EP6GPIFTRIG = E6E4 G _EP6ISOINPKTS = E642 G _EP8AUTOINLENH = E626 G _EP8AUTOINLENL = E627 G _EP8BCH = E69C G _EP8BCL = E69D G _EP8CFG = E615 G _EP8CS = E6A6 G _EP8FIFOBCH = E6B1 G _EP8FIFOBCL = E6B2 G _EP8FIFOBUF = FC00 G _EP8FIFOCFG = E61B G _EP8FIFOFLGS = E6AA G _EP8FIFOIE = E656 G _EP8FIFOIRQ = E657 G _EP8FIFOPFH = E636 G _EP8FIFOPFL = E637 G _EP8GPIFFLGSEL = E6EA G _EP8GPIFPFSTOP = E6EB G _EP8GPIFTRIG = E6EC G _EP8ISOINPKTS = E643 G _EPIE = E65E G _EPIRQ = E65F G _ERESI = 00DD G _ERRCNTLIM = E664 G _ES0 = 00AC G _ES1 = 00AE G _ET0 = 00A9 G _ET1 = 00AB G _ET2 = 00AD G _EX0 = 00A8 G _EX1 = 00AA G _EXEN2 = 00CB G _EXF2 = 00CE G _EXIF = 0091 G _F0 = 00D5 G _FIFOPINPOLAR = E609 G _FIFORESET = E604 G _FL = 00D1 G _FLOWEQ0CTL = E6C8 G _FLOWEQ1CTL = E6C9 G _FLOWHOLDOFF = E6CA G _FLOWLOGIC = E6C7 G _FLOWSTATE = E6C6 G _FLOWSTB = E6CB G _FLOWSTBEDGE = E6CC G _FLOWSTBHPERIOD = E6CD G _FNADDR = E687 G _GPIFABORT = E6F5 G _GPIFADRH = E6C4 G _GPIFADRL = E6C5 G _GPIFCTLCFG = E6C3 G _GPIFHOLDAMOUNT = E60C G _GPIFIDLECS = E6C1 G _GPIFIDLECTL = E6C2 G _GPIFIE = E660 G _GPIFIRQ = E661 G _GPIFREADYCFG = E6F3 G _GPIFREADYSTAT = E6F4 G _GPIFSGLDATH = 00BD G _GPIFSGLDATLNOX = 00BF G _GPIFSGLDATLX = 00BE G _GPIFTCB0 = E6D1 G _GPIFTCB1 = E6D0 G _GPIFTCB2 = E6CF G _GPIFTCB3 = E6CE G _GPIFTRIG = 00BB G _GPIFWFSELECT = E6C0 G _GPIF_WAVE_DATA = E400 G _I2CS = E678 G _I2CTL = E67A G _I2DAT = E679 G _IBNIE = E658 G _IBNIRQ = E659 G _IE = 00A8 G _IE0 = 0089 G _IE1 = 008B G _IFCONFIG = E601 G _INPKTEND = E648 G _INT2CLR = 00A1 G _INT2IVEC = E666 G _INT4CLR = 00A2 G _INT4IVEC = E667 G _INT6 = 00DB G _INTSETUP = E668 G _IOA = 0080 G _IOB = 0090 G _IOC = 00A0 G _IOD = 00B0 G _IOE = 00B1 G _IP = 00B8 G _IT0 = 0088 G _IT1 = 008A G _MICROFRAME = E686 G _MPAGE = 0092 G _NAKIE = E65A G _NAKIRQ = E65B G _OEA = 00B2 G _OEB = 00B3 G _OEC = 00B4 G _OED = 00B5 G _OEE = 00B6 G _OUTPKTEND = E649 G _OV = 00D2 G _P = 00D0 G _PCON = 0087 G _PI2C = 00F9 G _PINFLAGSAB = E602 G _PINFLAGSCD = E603 G _PORTACFG = E670 G _PORTCCFG = E671 G _PORTECFG = E672 G _PS0 = 00BC G _PS1 = 00BE G _PSW = 00D0 G _PT0 = 00B9 G _PT1 = 00BB G _PT2 = 00BD G _PUSB = 00F8 G _PX0 = 00B8 G _PX1 = 00BA G _RB8 = 009A G _RB81 = 00C2 G _RCAP2H = 00CB G _RCAP2L = 00CA G _RCLK = 00CD G _REN = 009C G _REN1 = 00C4 G _RESI = 00DC G _RES_WAVEDATA_END = E480 G _REVCTL = E60B G _REVID = E60A G _RI = 0098 G _RI1 = 00C0 G _RS0 = 00D3 G _RS1 = 00D4 G _SBUF0 = 0099 G _SBUF1 = 00C1 G _SCON0 = 0098 G _SCON1 = 00C0 G _SEL = 0086 G _SETUPDAT = E6B8 G _SM0 = 009F G _SM01 = 00C7 G _SM1 = 009E G _SM11 = 00C6 G _SM2 = 009D G _SM21 = 00C5 G _SMOD1 = 00DF G _SP = 0081 G _SUDPTRCTL = E6B5 G _SUDPTRH = E6B3 G _SUDPTRL = E6B4 G _SUSPEND = E681 G _T2CON = 00C8 G _TB8 = 009B G _TB81 = 00C3 G _TCLK = 00CC G _TCON = 0088 G _TESTCFG = E6F9 G _TF0 = 008D G _TF1 = 008F G _TF2 = 00CF G _TH0 = 008C G _TH1 = 008D G _TH2 = 00CD G _TI = 0099 G _TI1 = 00C1 G _TL0 = 008A G _TL1 = 008B G _TL2 = 00CC G _TMOD = 0089 G _TOGCTL = E683 G _TR0 = 008C G _TR1 = 008E G _TR2 = 00CA G _UART230 = E608 G _UDMACRCH = E67D G _UDMACRCL = E67E G _UDMACRCQUAL = E67F G _USBCS = E680 G _USBERRIE = E662 G _USBERRIRQ = E663 G _USBFRAMEH = E684 G _USBFRAMEL = E685 G _USBIE = E65C G _USBIRQ = E65D G _USBTEST = E6FA G _WAKEUPCS = E682 G _XAUTODAT1 = E67B G _XAUTODAT2 = E67C G _XGPIFSGLDATH = E6F0 G _XGPIFSGLDATLNOX = E6F2 G _XGPIFSGLDATLX = E6F1 G __fifo_gpif_autovector **** GX __standard_interrupt_vector **** GX __usb_autovector **** GX 14 _hook_fgv 00B4 GR 4 _hook_fgv_PARM_2 0000 GR 7 _hook_fgv_t_1_1 0002 R 14 _hook_sv 0000 GR 4 _hook_sv_PARM_2 0000 GR 7 _hook_sv_t_1_1 0000 R 14 _hook_uv 0063 GR 4 _hook_uv_PARM_2 0000 GR 7 _hook_uv_t_1_1 0001 R 14 _setup_autovectors 010A GR a 00D6 ac 00D6 acc 00E0 acc.0 00E0 acc.1 00E1 acc.2 00E2 acc.3 00E3 acc.4 00E4 acc.5 00E5 acc.6 00E6 acc.7 00E7 ar0 = 0000 ar1 = 0001 ar2 = 0002 ar3 = 0003 ar4 = 0004 ar5 = 0005 ar6 = 0006 ar7 = 0007 b 00F0 b.0 00F0 b.1 00F1 b.2 00F2 b.3 00F3 b.4 00F4 b.5 00F5 b.6 00F6 b.7 00F7 cprl2 00C8 ct2 00C9 cy 00D7 dph 0083 dpl 0082 ea 00AF es 00AC et0 00A9 et1 00AB et2 00AD ex0 00A8 ex1 00AA exen2 00CB exf2 00CE f0 00D5 ie 00A8 ie.0 00A8 ie.1 00A9 ie.2 00AA ie.3 00AB ie.4 00AC ie.5 00AD ie.7 00AF ie0 0089 ie1 008B int0 00B2 int1 00B3 ip 00B8 ip.0 00B8 ip.1 00B9 ip.2 00BA ip.3 00BB ip.4 00BC ip.5 00BD it0 0088 it1 008A ov 00D2 p 00D0 p0 0080 p0.0 0080 p0.1 0081 p0.2 0082 p0.3 0083 p0.4 0084 p0.5 0085 p0.6 0086 p0.7 0087 p1 0090 p1.0 0090 p1.1 0091 p1.2 0092 p1.3 0093 p1.4 0094 p1.5 0095 p1.6 0096 p1.7 0097 p2 00A0 p2.0 00A0 p2.1 00A1 p2.2 00A2 p2.3 00A3 p2.4 00A4 p2.5 00A5 p2.6 00A6 p2.7 00A7 p3 00B0 p3.0 00B0 p3.1 00B1 p3.2 00B2 p3.3 00B3 p3.4 00B4 p3.5 00B5 p3.6 00B6 p3.7 00B7 pcon 0087 ps 00BC psw 00D0 psw.0 00D0 psw.1 00D1 psw.2 00D2 psw.3 00D3 psw.4 00D4 psw.5 00D5 psw.6 00D6 psw.7 00D7 pt0 00B9 pt1 00BB pt2 00BD px0 00B8 px1 00BA rb8 009A rcap2h 00CB rcap2l 00CA rclk 00CD ren 009C ri 0098 rs0 00D3 rs1 00D4 rxd 00B0 sbuf 0099 scon 0098 scon.0 0098 scon.1 0099 scon.2 009A scon.3 009B scon.4 009C scon.5 009D scon.6 009E scon.7 009F sm0 009F sm1 009E sm2 009D sp 0081 t2con 00C8 t2con.0 00C8 t2con.1 00C9 t2con.2 00CA t2con.3 00CB t2con.4 00CC t2con.5 00CD t2con.6 00CE t2con.7 00CF tb8 009B tclk 00CC tcon 0088 tcon.0 0088 tcon.1 0089 tcon.2 008A tcon.3 008B tcon.4 008C tcon.5 008D tcon.6 008E tcon.7 008F tf0 008D tf1 008F tf2 00CF th0 008C th1 008D th2 00CD ti 0099 tl0 008A tl1 008B tl2 00CC tmod 0089 tr0 008C tr1 008E tr2 00CA txd 00B1 ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2. Area Table 0 _CODE size 0 flags 0 1 RSEG size 0 flags 0 2 REG_BANK_0 size 8 flags 4 3 DSEG size 0 flags 0 4 OSEG size 2 flags 4 5 ISEG size 0 flags 0 6 IABS size 0 flags 8 7 BSEG size 3 flags 80 8 PSEG size 0 flags 50 9 XSEG size 0 flags 40 A XABS size 0 flags 48 B HOME size 0 flags 20 C GSINIT0 size 0 flags 20 D GSINIT1 size 0 flags 20 E GSINIT2 size 0 flags 20 F GSINIT3 size 0 flags 20 10 GSINIT4 size 0 flags 20 11 GSINIT5 size 0 flags 20 12 GSINIT size 0 flags 20 13 GSFINAL size 0 flags 20 14 CSEG size 1B2 flags 20 15 CONST size 0 flags 20 16 CABS size 0 flags 28 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/Makefile0000644000175000017500000000063612576764164017753 0ustar carlescarlesINCLUDES=-I../include CC=sdcc -mmcs51 --no-xinit-opt all: delay.c fx2utils.c isr.c timer.c usb_common.c $(CC) $(INCLUDES) -c delay.c -o delay.rel $(CC) $(INCLUDES) -c fx2utils.c -o fx2utils.rel $(CC) $(INCLUDES) -c isr.c -o isr.rel $(CC) $(INCLUDES) -c timer.c -o timer.rel $(CC) $(INCLUDES) -c usb_common.c -o usb_common.rel clean: rm -f *.ihx *.rel *.rst *.lnk *.lst *.map *.asm *.sym gnss-sdr-0.0.6/firmware/GN3S_v2/lib/timer.c0000644000175000017500000000273012576764164017574 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "timer.h" #include "fx2regs.h" #include "isr.h" /* * Arrange to have isr_tick_handler called at 100 Hz. * * The cpu clock is running at 48e6. The input to the timer * is 48e6 / 12 = 4e6. * * We arrange to have the timer overflow every 40000 clocks == 100 Hz */ #define RELOAD_VALUE ((unsigned short) -40000) void hook_timer_tick (unsigned short isr_tick_handler) { ET2 = 0; // disable timer 2 interrupts hook_sv (SV_TIMER_2, isr_tick_handler); RCAP2H = RELOAD_VALUE >> 8; // setup the auto reload value RCAP2L = RELOAD_VALUE; T2CON = 0x04; // interrupt on overflow; reload; run ET2 = 1; // enable timer 2 interrupts } gnss-sdr-0.0.6/firmware/GN3S_v2/lib/fx2utils.c0000644000175000017500000000246712576764164020243 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "fx2utils.h" #include "fx2regs.h" #include "delay.h" void fx2_stall_ep0 (void) { EP0CS |= bmEPSTALL; } void fx2_reset_data_toggle (unsigned char ep) { TOGCTL = ((ep & 0x80) >> 3 | (ep & 0x0f)); TOGCTL |= bmRESETTOGGLE; } void fx2_renumerate (void) { USBCS |= bmDISCON | bmRENUM; mdelay (250); USBIRQ = 0xff; // clear any pending USB irqs... EPIRQ = 0xff; // they're from before the renumeration EXIF &= ~bmEXIF_USBINT; USBCS &= ~bmDISCON; // reconnect USB } gnss-sdr-0.0.6/firmware/GN3S_v2/lib/usb_common.c0000644000175000017500000002151612576764164020620 0ustar carlescarles/* * Code from: USRP - Universal Software Radio Peripheral (GNU Radio) * * Initial modifications by: * * Stephan Esterhuizen, Aerospace Engineering Sciences * University of Colorado at Boulder * Boulder CO, USA * * Further modifications for use with the SiGe USB module to accompany * the textbook: "A Software-Defined GPS and Galileo Receiver: A * Single-Frequency Approach" by Kai Borre, Dennis Akos, et.al. by: * * Marcus Junered, GNSS Research Group * Lulea University of Technology * Lulea, Sweden * * http://ccar.colorado.edu/gnss * * --------------------------------------------------------------------- * * GN3S - GNSS IF Streamer for Windows * Copyright (C) 2006 Marcus Junered * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "usb_common.h" #include "fx2regs.h" #include "syncdelay.h" #include "fx2utils.h" #include "isr.h" #include "usb_descriptors.h" #include "usb_requests.h" #include "gn3s_regs.h" extern xdata char str0[]; extern xdata char str1[]; extern xdata char str2[]; extern xdata char str3[]; extern xdata char str4[]; extern xdata char str5[]; #define bRequestType SETUPDAT[0] #define bRequest SETUPDAT[1] #define wValueL SETUPDAT[2] #define wValueH SETUPDAT[3] #define wIndexL SETUPDAT[4] #define wIndexH SETUPDAT[5] #define wLengthL SETUPDAT[6] #define wLengthH SETUPDAT[7] #define MSB(x) (((unsigned short) x) >> 8) #define LSB(x) (((unsigned short) x) & 0xff) volatile bit _usb_got_SUDAV; volatile bit _usb_rx_overrun; unsigned char _usb_config = 0; unsigned char _usb_alt_setting = 0; // FIXME really 1/interface xdata unsigned char *current_device_descr; xdata unsigned char *current_devqual_descr; xdata unsigned char *current_config_descr; xdata unsigned char *other_config_descr; static void setup_descriptors (void) { if (USBCS & bmHSM){ // high speed mode current_device_descr = high_speed_device_descr; current_devqual_descr = high_speed_devqual_descr; current_config_descr = high_speed_config_descr; other_config_descr = full_speed_config_descr; } else { current_device_descr = full_speed_device_descr; current_devqual_descr = full_speed_devqual_descr; current_config_descr = full_speed_config_descr; other_config_descr = high_speed_config_descr; } // whack the type fields // FIXME, may not be required. // current_config_descr[1] = DT_CONFIG; // other_config_descr[1] = DT_OTHER_SPEED; } static void isr_SUDAV (void) interrupt { clear_usb_irq (); _usb_got_SUDAV = 1; //usb_handle_setup_packet(); } static void isr_USBRESET (void) interrupt { clear_usb_irq (); setup_descriptors (); } static void isr_HIGHSPEED (void) interrupt { clear_usb_irq (); setup_descriptors (); } void usb_install_handlers (void) { setup_descriptors (); // ensure that they're set before use hook_uv (UV_SUDAV, (unsigned short) isr_SUDAV); hook_uv (UV_USBRESET, (unsigned short) isr_USBRESET); hook_uv (UV_HIGHSPEED, (unsigned short) isr_HIGHSPEED); USBIE = bmSUDAV | bmURES | bmHSGRANT; } // On the FX2 the only plausible endpoints are 0, 1, 2, 4, 6, 8 // This doesn't check to see that they're enabled unsigned char plausible_endpoint (unsigned char ep) { ep &= ~0x80; // ignore direction bit if (ep > 8) return 0; if (ep == 1) return 1; return (ep & 0x1) == 0; // must be even } // return pointer to control and status register for endpoint. // only called with plausible_endpoints xdata volatile unsigned char * epcs (unsigned char ep) { if (ep == 0x01) // ep1 has different in and out CS regs return EP1OUTCS; if (ep == 0x81) return EP1INCS; ep &= ~0x80; // ignore direction bit if (ep == 0x00) // ep0 return EP0CS; return EP2CS + (ep >> 1); // 2, 4, 6, 8 are consecutive } void usb_handle_setup_packet (void) { _usb_got_SUDAV = 0; // handle the standard requests... switch (bRequestType & bmRT_TYPE_MASK){ case bmRT_TYPE_CLASS: case bmRT_TYPE_RESERVED: fx2_stall_ep0 (); // we don't handle these. indicate error break; case bmRT_TYPE_VENDOR: // call the application code. // If it handles the command it returns non-zero if (!app_vendor_cmd ()) fx2_stall_ep0 (); break; case bmRT_TYPE_STD: // these are the standard requests... if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_IN){ //////////////////////////////////// // handle the IN requests //////////////////////////////////// switch (bRequest){ case RQ_GET_CONFIG: EP0BUF[0] = _usb_config; // FIXME app should handle EP0BCH = 0; EP0BCL = 1; break; // -------------------------------- case RQ_GET_INTERFACE: EP0BUF[0] = _usb_alt_setting; // FIXME app should handle EP0BCH = 0; EP0BCL = 1; break; // -------------------------------- case RQ_GET_DESCR: switch (wValueH){ case DT_DEVICE: SUDPTRH = MSB (current_device_descr); SUDPTRL = LSB (current_device_descr); break; case DT_DEVQUAL: SUDPTRH = MSB (current_devqual_descr); SUDPTRL = LSB (current_devqual_descr); break; case DT_CONFIG: if (0 && wValueL != 1) // FIXME only a single configuration fx2_stall_ep0 (); else { SUDPTRH = MSB (current_config_descr); SUDPTRL = LSB (current_config_descr); } break; case DT_OTHER_SPEED: if (0 && wValueL != 1) // FIXME only a single configuration fx2_stall_ep0 (); else { SUDPTRH = MSB (other_config_descr); SUDPTRL = LSB (other_config_descr); } break; case DT_STRING: if (wValueL >= nstring_descriptors) fx2_stall_ep0 (); else { xdata char *p = string_descriptors[wValueL]; SUDPTRH = MSB (p); SUDPTRL = LSB (p); } break; default: fx2_stall_ep0 (); // invalid request break; } break; // -------------------------------- case RQ_GET_STATUS: switch (bRequestType & bmRT_RECIP_MASK){ case bmRT_RECIP_DEVICE: EP0BUF[0] = bmGSDA_SELF_POWERED; // FIXME app should handle EP0BUF[1] = 0; EP0BCH = 0; EP0BCL = 2; break; case bmRT_RECIP_INTERFACE: EP0BUF[0] = 0; EP0BUF[1] = 0; EP0BCH = 0; EP0BCL = 2; break; case bmRT_RECIP_ENDPOINT: if (plausible_endpoint (wIndexL)){ EP0BUF[0] = *epcs (wIndexL) & bmEPSTALL; EP0BUF[1] = 0; EP0BCH = 0; EP0BCL = 2; } else fx2_stall_ep0 (); break; default: fx2_stall_ep0 (); break; } // -------------------------------- case RQ_SYNCH_FRAME: // not implemented default: fx2_stall_ep0 (); break; } } else { //////////////////////////////////// // handle the OUT requests //////////////////////////////////// switch (bRequest){ case RQ_SET_CONFIG: _usb_config = wValueL; // FIXME app should handle break; case RQ_SET_INTERFACE: _usb_alt_setting = wValueL; // FIXME app should handle break; // -------------------------------- case RQ_CLEAR_FEATURE: switch (bRequestType & bmRT_RECIP_MASK){ case bmRT_RECIP_DEVICE: switch (wValueL){ case FS_DEV_REMOTE_WAKEUP: default: fx2_stall_ep0 (); } break; case bmRT_RECIP_ENDPOINT: if (wValueL == FS_ENDPOINT_HALT && plausible_endpoint (wIndexL)){ *epcs (wIndexL) &= ~bmEPSTALL; fx2_reset_data_toggle (wIndexL); } else fx2_stall_ep0 (); break; default: fx2_stall_ep0 (); break; } break; // -------------------------------- case RQ_SET_FEATURE: switch (bRequestType & bmRT_RECIP_MASK){ case bmRT_RECIP_DEVICE: switch (wValueL){ case FS_TEST_MODE: // hardware handles this after we complete SETUP phase handshake break; case FS_DEV_REMOTE_WAKEUP: default: fx2_stall_ep0 (); break; } } break; case bmRT_RECIP_ENDPOINT: switch (wValueL){ case FS_ENDPOINT_HALT: if (plausible_endpoint (wIndexL)) *epcs (wIndexL) |= bmEPSTALL; else fx2_stall_ep0 (); break; default: fx2_stall_ep0 (); break; } break; // -------------------------------- case RQ_SET_ADDRESS: // handled by fx2 hardware case RQ_SET_DESCR: // not implemented default: fx2_stall_ep0 (); } } break; } // bmRT_TYPE_MASK // ack handshake phase of device request EP0CS |= bmHSNAK; } gnss-sdr-0.0.6/firmware/GN3S_v2/lib/libfx2.lib0000644000175000017500000000004412576764164020162 0ustar carlescarlesdelay fx2utils isr timer usb_common gnss-sdr-0.0.6/firmware/GN3S_v2/lib/usb_common.lst0000644000175000017500000025062512576764164021205 0ustar carlescarles 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) 4 ; This file was generated Mon Jul 30 11:40:53 2012 5 ;-------------------------------------------------------- 6 .module usb_common 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _epcs 13 .globl _plausible_endpoint 14 .globl _EIPX6 15 .globl _EIPX5 16 .globl _EIPX4 17 .globl _PI2C 18 .globl _PUSB 19 .globl _EIEX6 20 .globl _EIEX5 21 .globl _EIEX4 22 .globl _EI2C 23 .globl _EIUSB 24 .globl _SMOD1 25 .globl _ERESI 26 .globl _RESI 27 .globl _INT6 28 .globl _CY 29 .globl _AC 30 .globl _F0 31 .globl _RS1 32 .globl _RS0 33 .globl _OV 34 .globl _FL 35 .globl _P 36 .globl _TF2 37 .globl _EXF2 38 .globl _RCLK 39 .globl _TCLK 40 .globl _EXEN2 41 .globl _TR2 42 .globl _C_T2 43 .globl _CP_RL2 44 .globl _SM01 45 .globl _SM11 46 .globl _SM21 47 .globl _REN1 48 .globl _TB81 49 .globl _RB81 50 .globl _TI1 51 .globl _RI1 52 .globl _PS1 53 .globl _PT2 54 .globl _PS0 55 .globl _PT1 56 .globl _PX1 57 .globl _PT0 58 .globl _PX0 59 .globl _D7 60 .globl _D6 61 .globl _D5 62 .globl _D4 63 .globl _D3 64 .globl _D2 65 .globl _D1 66 .globl _D0 67 .globl _EA 68 .globl _ES1 69 .globl _ET2 70 .globl _ES0 71 .globl _ET1 72 .globl _EX1 73 .globl _ET0 74 .globl _EX0 75 .globl _SM0 76 .globl _SM1 77 .globl _SM2 78 .globl _REN 79 .globl _TB8 80 .globl _RB8 81 .globl _TI 82 .globl _RI 83 .globl _TF1 84 .globl _TR1 85 .globl _TF0 86 .globl _TR0 87 .globl _IE1 88 .globl _IT1 89 .globl _IE0 90 .globl _IT0 91 .globl _SEL 92 .globl _A7 93 .globl _A6 94 .globl _A5 95 .globl _A4 96 .globl _A3 97 .globl _A2 98 .globl _A1 99 .globl _A0 100 .globl _EIP 101 .globl _B 102 .globl _EIE 103 .globl _ACC 104 .globl _EICON 105 .globl _PSW 106 .globl _TH2 107 .globl _TL2 108 .globl _RCAP2H 109 .globl _RCAP2L 110 .globl _T2CON 111 .globl _SBUF1 112 .globl _SCON1 113 .globl _GPIFSGLDATLNOX 114 .globl _GPIFSGLDATLX 115 .globl _GPIFSGLDATH 116 .globl _GPIFTRIG 117 .globl _EP01STAT 118 .globl _IP 119 .globl _OEE 120 .globl _OED 121 .globl _OEC 122 .globl _OEB 123 .globl _OEA 124 .globl _IOE 125 .globl _IOD 126 .globl _AUTOPTRSETUP 127 .globl _EP68FIFOFLGS 128 .globl _EP24FIFOFLGS 129 .globl _EP2468STAT 130 .globl _IE 131 .globl _INT4CLR 132 .globl _INT2CLR 133 .globl _IOC 134 .globl _AUTODAT2 135 .globl _AUTOPTRL2 136 .globl _AUTOPTRH2 137 .globl _AUTODAT1 138 .globl _APTR1L 139 .globl _APTR1H 140 .globl _SBUF0 141 .globl _SCON0 142 .globl _MPAGE 143 .globl _EXIF 144 .globl _IOB 145 .globl _CKCON 146 .globl _TH1 147 .globl _TH0 148 .globl _TL1 149 .globl _TL0 150 .globl _TMOD 151 .globl _TCON 152 .globl _PCON 153 .globl _DPS 154 .globl _DPH1 155 .globl _DPL1 156 .globl _DPH 157 .globl _DPL 158 .globl _SP 159 .globl _IOA 160 .globl _EP8FIFOBUF 161 .globl _EP6FIFOBUF 162 .globl _EP4FIFOBUF 163 .globl _EP2FIFOBUF 164 .globl _EP1INBUF 165 .globl _EP1OUTBUF 166 .globl _EP0BUF 167 .globl _CT4 168 .globl _CT3 169 .globl _CT2 170 .globl _CT1 171 .globl _USBTEST 172 .globl _TESTCFG 173 .globl _DBUG 174 .globl _UDMACRCQUAL 175 .globl _UDMACRCL 176 .globl _UDMACRCH 177 .globl _GPIFHOLDAMOUNT 178 .globl _FLOWSTBHPERIOD 179 .globl _FLOWSTBEDGE 180 .globl _FLOWSTB 181 .globl _FLOWHOLDOFF 182 .globl _FLOWEQ1CTL 183 .globl _FLOWEQ0CTL 184 .globl _FLOWLOGIC 185 .globl _FLOWSTATE 186 .globl _GPIFABORT 187 .globl _GPIFREADYSTAT 188 .globl _GPIFREADYCFG 189 .globl _XGPIFSGLDATLNOX 190 .globl _XGPIFSGLDATLX 191 .globl _XGPIFSGLDATH 192 .globl _EP8GPIFTRIG 193 .globl _EP8GPIFPFSTOP 194 .globl _EP8GPIFFLGSEL 195 .globl _EP6GPIFTRIG 196 .globl _EP6GPIFPFSTOP 197 .globl _EP6GPIFFLGSEL 198 .globl _EP4GPIFTRIG 199 .globl _EP4GPIFPFSTOP 200 .globl _EP4GPIFFLGSEL 201 .globl _EP2GPIFTRIG 202 .globl _EP2GPIFPFSTOP 203 .globl _EP2GPIFFLGSEL 204 .globl _GPIFTCB0 205 .globl _GPIFTCB1 206 .globl _GPIFTCB2 207 .globl _GPIFTCB3 208 .globl _GPIFADRL 209 .globl _GPIFADRH 210 .globl _GPIFCTLCFG 211 .globl _GPIFIDLECTL 212 .globl _GPIFIDLECS 213 .globl _GPIFWFSELECT 214 .globl _SETUPDAT 215 .globl _SUDPTRCTL 216 .globl _SUDPTRL 217 .globl _SUDPTRH 218 .globl _EP8FIFOBCL 219 .globl _EP8FIFOBCH 220 .globl _EP6FIFOBCL 221 .globl _EP6FIFOBCH 222 .globl _EP4FIFOBCL 223 .globl _EP4FIFOBCH 224 .globl _EP2FIFOBCL 225 .globl _EP2FIFOBCH 226 .globl _EP8FIFOFLGS 227 .globl _EP6FIFOFLGS 228 .globl _EP4FIFOFLGS 229 .globl _EP2FIFOFLGS 230 .globl _EP8CS 231 .globl _EP6CS 232 .globl _EP4CS 233 .globl _EP2CS 234 .globl _EP1INCS 235 .globl _EP1OUTCS 236 .globl _EP0CS 237 .globl _EP8BCL 238 .globl _EP8BCH 239 .globl _EP6BCL 240 .globl _EP6BCH 241 .globl _EP4BCL 242 .globl _EP4BCH 243 .globl _EP2BCL 244 .globl _EP2BCH 245 .globl _EP1INBC 246 .globl _EP1OUTBC 247 .globl _EP0BCL 248 .globl _EP0BCH 249 .globl _FNADDR 250 .globl _MICROFRAME 251 .globl _USBFRAMEL 252 .globl _USBFRAMEH 253 .globl _TOGCTL 254 .globl _WAKEUPCS 255 .globl _SUSPEND 256 .globl _USBCS 257 .globl _XAUTODAT2 258 .globl _XAUTODAT1 259 .globl _I2CTL 260 .globl _I2DAT 261 .globl _I2CS 262 .globl _PORTECFG 263 .globl _PORTCCFG 264 .globl _PORTACFG 265 .globl _INTSETUP 266 .globl _INT4IVEC 267 .globl _INT2IVEC 268 .globl _CLRERRCNT 269 .globl _ERRCNTLIM 270 .globl _USBERRIRQ 271 .globl _USBERRIE 272 .globl _GPIFIRQ 273 .globl _GPIFIE 274 .globl _EPIRQ 275 .globl _EPIE 276 .globl _USBIRQ 277 .globl _USBIE 278 .globl _NAKIRQ 279 .globl _NAKIE 280 .globl _IBNIRQ 281 .globl _IBNIE 282 .globl _EP8FIFOIRQ 283 .globl _EP8FIFOIE 284 .globl _EP6FIFOIRQ 285 .globl _EP6FIFOIE 286 .globl _EP4FIFOIRQ 287 .globl _EP4FIFOIE 288 .globl _EP2FIFOIRQ 289 .globl _EP2FIFOIE 290 .globl _OUTPKTEND 291 .globl _INPKTEND 292 .globl _EP8ISOINPKTS 293 .globl _EP6ISOINPKTS 294 .globl _EP4ISOINPKTS 295 .globl _EP2ISOINPKTS 296 .globl _EP8FIFOPFL 297 .globl _EP8FIFOPFH 298 .globl _EP6FIFOPFL 299 .globl _EP6FIFOPFH 300 .globl _EP4FIFOPFL 301 .globl _EP4FIFOPFH 302 .globl _EP2FIFOPFL 303 .globl _EP2FIFOPFH 304 .globl _EP8AUTOINLENL 305 .globl _EP8AUTOINLENH 306 .globl _EP6AUTOINLENL 307 .globl _EP6AUTOINLENH 308 .globl _EP4AUTOINLENL 309 .globl _EP4AUTOINLENH 310 .globl _EP2AUTOINLENL 311 .globl _EP2AUTOINLENH 312 .globl _EP8FIFOCFG 313 .globl _EP6FIFOCFG 314 .globl _EP4FIFOCFG 315 .globl _EP2FIFOCFG 316 .globl _EP8CFG 317 .globl _EP6CFG 318 .globl _EP4CFG 319 .globl _EP2CFG 320 .globl _EP1INCFG 321 .globl _EP1OUTCFG 322 .globl _REVCTL 323 .globl _REVID 324 .globl _FIFOPINPOLAR 325 .globl _UART230 326 .globl _BPADDRL 327 .globl _BPADDRH 328 .globl _BREAKPT 329 .globl _FIFORESET 330 .globl _PINFLAGSCD 331 .globl _PINFLAGSAB 332 .globl _IFCONFIG 333 .globl _CPUCS 334 .globl _RES_WAVEDATA_END 335 .globl _GPIF_WAVE_DATA 336 .globl __usb_rx_overrun 337 .globl __usb_got_SUDAV 338 .globl _other_config_descr 339 .globl _current_config_descr 340 .globl _current_devqual_descr 341 .globl _current_device_descr 342 .globl __usb_alt_setting 343 .globl __usb_config 344 .globl _usb_install_handlers 345 .globl _usb_handle_setup_packet 346 ;-------------------------------------------------------- 347 ; special function registers 348 ;-------------------------------------------------------- 349 .area RSEG (DATA) 0080 350 _IOA = 0x0080 0081 351 _SP = 0x0081 0082 352 _DPL = 0x0082 0083 353 _DPH = 0x0083 0084 354 _DPL1 = 0x0084 0085 355 _DPH1 = 0x0085 0086 356 _DPS = 0x0086 0087 357 _PCON = 0x0087 0088 358 _TCON = 0x0088 0089 359 _TMOD = 0x0089 008A 360 _TL0 = 0x008a 008B 361 _TL1 = 0x008b 008C 362 _TH0 = 0x008c 008D 363 _TH1 = 0x008d 008E 364 _CKCON = 0x008e 0090 365 _IOB = 0x0090 0091 366 _EXIF = 0x0091 0092 367 _MPAGE = 0x0092 0098 368 _SCON0 = 0x0098 0099 369 _SBUF0 = 0x0099 009A 370 _APTR1H = 0x009a 009B 371 _APTR1L = 0x009b 009C 372 _AUTODAT1 = 0x009c 009D 373 _AUTOPTRH2 = 0x009d 009E 374 _AUTOPTRL2 = 0x009e 009F 375 _AUTODAT2 = 0x009f 00A0 376 _IOC = 0x00a0 00A1 377 _INT2CLR = 0x00a1 00A2 378 _INT4CLR = 0x00a2 00A8 379 _IE = 0x00a8 00AA 380 _EP2468STAT = 0x00aa 00AB 381 _EP24FIFOFLGS = 0x00ab 00AC 382 _EP68FIFOFLGS = 0x00ac 00AF 383 _AUTOPTRSETUP = 0x00af 00B0 384 _IOD = 0x00b0 00B1 385 _IOE = 0x00b1 00B2 386 _OEA = 0x00b2 00B3 387 _OEB = 0x00b3 00B4 388 _OEC = 0x00b4 00B5 389 _OED = 0x00b5 00B6 390 _OEE = 0x00b6 00B8 391 _IP = 0x00b8 00BA 392 _EP01STAT = 0x00ba 00BB 393 _GPIFTRIG = 0x00bb 00BD 394 _GPIFSGLDATH = 0x00bd 00BE 395 _GPIFSGLDATLX = 0x00be 00BF 396 _GPIFSGLDATLNOX = 0x00bf 00C0 397 _SCON1 = 0x00c0 00C1 398 _SBUF1 = 0x00c1 00C8 399 _T2CON = 0x00c8 00CA 400 _RCAP2L = 0x00ca 00CB 401 _RCAP2H = 0x00cb 00CC 402 _TL2 = 0x00cc 00CD 403 _TH2 = 0x00cd 00D0 404 _PSW = 0x00d0 00D8 405 _EICON = 0x00d8 00E0 406 _ACC = 0x00e0 00E8 407 _EIE = 0x00e8 00F0 408 _B = 0x00f0 00F8 409 _EIP = 0x00f8 410 ;-------------------------------------------------------- 411 ; special function bits 412 ;-------------------------------------------------------- 413 .area RSEG (DATA) 0080 414 _A0 = 0x0080 0081 415 _A1 = 0x0081 0082 416 _A2 = 0x0082 0083 417 _A3 = 0x0083 0084 418 _A4 = 0x0084 0085 419 _A5 = 0x0085 0086 420 _A6 = 0x0086 0087 421 _A7 = 0x0087 0086 422 _SEL = 0x0086 0088 423 _IT0 = 0x0088 0089 424 _IE0 = 0x0089 008A 425 _IT1 = 0x008a 008B 426 _IE1 = 0x008b 008C 427 _TR0 = 0x008c 008D 428 _TF0 = 0x008d 008E 429 _TR1 = 0x008e 008F 430 _TF1 = 0x008f 0098 431 _RI = 0x0098 0099 432 _TI = 0x0099 009A 433 _RB8 = 0x009a 009B 434 _TB8 = 0x009b 009C 435 _REN = 0x009c 009D 436 _SM2 = 0x009d 009E 437 _SM1 = 0x009e 009F 438 _SM0 = 0x009f 00A8 439 _EX0 = 0x00a8 00A9 440 _ET0 = 0x00a9 00AA 441 _EX1 = 0x00aa 00AB 442 _ET1 = 0x00ab 00AC 443 _ES0 = 0x00ac 00AD 444 _ET2 = 0x00ad 00AE 445 _ES1 = 0x00ae 00AF 446 _EA = 0x00af 00B0 447 _D0 = 0x00b0 00B1 448 _D1 = 0x00b1 00B2 449 _D2 = 0x00b2 00B3 450 _D3 = 0x00b3 00B4 451 _D4 = 0x00b4 00B5 452 _D5 = 0x00b5 00B6 453 _D6 = 0x00b6 00B7 454 _D7 = 0x00b7 00B8 455 _PX0 = 0x00b8 00B9 456 _PT0 = 0x00b9 00BA 457 _PX1 = 0x00ba 00BB 458 _PT1 = 0x00bb 00BC 459 _PS0 = 0x00bc 00BD 460 _PT2 = 0x00bd 00BE 461 _PS1 = 0x00be 00C0 462 _RI1 = 0x00c0 00C1 463 _TI1 = 0x00c1 00C2 464 _RB81 = 0x00c2 00C3 465 _TB81 = 0x00c3 00C4 466 _REN1 = 0x00c4 00C5 467 _SM21 = 0x00c5 00C6 468 _SM11 = 0x00c6 00C7 469 _SM01 = 0x00c7 00C8 470 _CP_RL2 = 0x00c8 00C9 471 _C_T2 = 0x00c9 00CA 472 _TR2 = 0x00ca 00CB 473 _EXEN2 = 0x00cb 00CC 474 _TCLK = 0x00cc 00CD 475 _RCLK = 0x00cd 00CE 476 _EXF2 = 0x00ce 00CF 477 _TF2 = 0x00cf 00D0 478 _P = 0x00d0 00D1 479 _FL = 0x00d1 00D2 480 _OV = 0x00d2 00D3 481 _RS0 = 0x00d3 00D4 482 _RS1 = 0x00d4 00D5 483 _F0 = 0x00d5 00D6 484 _AC = 0x00d6 00D7 485 _CY = 0x00d7 00DB 486 _INT6 = 0x00db 00DC 487 _RESI = 0x00dc 00DD 488 _ERESI = 0x00dd 00DF 489 _SMOD1 = 0x00df 00E8 490 _EIUSB = 0x00e8 00E9 491 _EI2C = 0x00e9 00EA 492 _EIEX4 = 0x00ea 00EB 493 _EIEX5 = 0x00eb 00EC 494 _EIEX6 = 0x00ec 00F8 495 _PUSB = 0x00f8 00F9 496 _PI2C = 0x00f9 00FA 497 _EIPX4 = 0x00fa 00FB 498 _EIPX5 = 0x00fb 00FC 499 _EIPX6 = 0x00fc 500 ;-------------------------------------------------------- 501 ; overlayable register banks 502 ;-------------------------------------------------------- 503 .area REG_BANK_0 (REL,OVR,DATA) 0000 504 .ds 8 505 ;-------------------------------------------------------- 506 ; overlayable bit register bank 507 ;-------------------------------------------------------- 508 .area BIT_BANK (REL,OVR,DATA) 0000 509 bits: 0000 510 .ds 1 8000 511 b0 = bits[0] 8100 512 b1 = bits[1] 8200 513 b2 = bits[2] 8300 514 b3 = bits[3] 8400 515 b4 = bits[4] 8500 516 b5 = bits[5] 8600 517 b6 = bits[6] 8700 518 b7 = bits[7] 519 ;-------------------------------------------------------- 520 ; internal ram data 521 ;-------------------------------------------------------- 522 .area DSEG (DATA) 0000 523 __usb_config:: 0000 524 .ds 1 0001 525 __usb_alt_setting:: 0001 526 .ds 1 0002 527 _current_device_descr:: 0002 528 .ds 2 0004 529 _current_devqual_descr:: 0004 530 .ds 2 0006 531 _current_config_descr:: 0006 532 .ds 2 0008 533 _other_config_descr:: 0008 534 .ds 2 535 ;-------------------------------------------------------- 536 ; overlayable items in internal ram 537 ;-------------------------------------------------------- 538 .area OSEG (OVR,DATA) 539 .area OSEG (OVR,DATA) 540 ;-------------------------------------------------------- 541 ; indirectly addressable internal ram data 542 ;-------------------------------------------------------- 543 .area ISEG (DATA) 544 ;-------------------------------------------------------- 545 ; absolute internal ram data 546 ;-------------------------------------------------------- 547 .area IABS (ABS,DATA) 548 .area IABS (ABS,DATA) 549 ;-------------------------------------------------------- 550 ; bit data 551 ;-------------------------------------------------------- 552 .area BSEG (BIT) 0000 553 __usb_got_SUDAV:: 0000 554 .ds 1 0001 555 __usb_rx_overrun:: 0001 556 .ds 1 557 ;-------------------------------------------------------- 558 ; paged external ram data 559 ;-------------------------------------------------------- 560 .area PSEG (PAG,XDATA) 561 ;-------------------------------------------------------- 562 ; external ram data 563 ;-------------------------------------------------------- 564 .area XSEG (XDATA) E400 565 _GPIF_WAVE_DATA = 0xe400 E480 566 _RES_WAVEDATA_END = 0xe480 E600 567 _CPUCS = 0xe600 E601 568 _IFCONFIG = 0xe601 E602 569 _PINFLAGSAB = 0xe602 E603 570 _PINFLAGSCD = 0xe603 E604 571 _FIFORESET = 0xe604 E605 572 _BREAKPT = 0xe605 E606 573 _BPADDRH = 0xe606 E607 574 _BPADDRL = 0xe607 E608 575 _UART230 = 0xe608 E609 576 _FIFOPINPOLAR = 0xe609 E60A 577 _REVID = 0xe60a E60B 578 _REVCTL = 0xe60b E610 579 _EP1OUTCFG = 0xe610 E611 580 _EP1INCFG = 0xe611 E612 581 _EP2CFG = 0xe612 E613 582 _EP4CFG = 0xe613 E614 583 _EP6CFG = 0xe614 E615 584 _EP8CFG = 0xe615 E618 585 _EP2FIFOCFG = 0xe618 E619 586 _EP4FIFOCFG = 0xe619 E61A 587 _EP6FIFOCFG = 0xe61a E61B 588 _EP8FIFOCFG = 0xe61b E620 589 _EP2AUTOINLENH = 0xe620 E621 590 _EP2AUTOINLENL = 0xe621 E622 591 _EP4AUTOINLENH = 0xe622 E623 592 _EP4AUTOINLENL = 0xe623 E624 593 _EP6AUTOINLENH = 0xe624 E625 594 _EP6AUTOINLENL = 0xe625 E626 595 _EP8AUTOINLENH = 0xe626 E627 596 _EP8AUTOINLENL = 0xe627 E630 597 _EP2FIFOPFH = 0xe630 E631 598 _EP2FIFOPFL = 0xe631 E632 599 _EP4FIFOPFH = 0xe632 E633 600 _EP4FIFOPFL = 0xe633 E634 601 _EP6FIFOPFH = 0xe634 E635 602 _EP6FIFOPFL = 0xe635 E636 603 _EP8FIFOPFH = 0xe636 E637 604 _EP8FIFOPFL = 0xe637 E640 605 _EP2ISOINPKTS = 0xe640 E641 606 _EP4ISOINPKTS = 0xe641 E642 607 _EP6ISOINPKTS = 0xe642 E643 608 _EP8ISOINPKTS = 0xe643 E648 609 _INPKTEND = 0xe648 E649 610 _OUTPKTEND = 0xe649 E650 611 _EP2FIFOIE = 0xe650 E651 612 _EP2FIFOIRQ = 0xe651 E652 613 _EP4FIFOIE = 0xe652 E653 614 _EP4FIFOIRQ = 0xe653 E654 615 _EP6FIFOIE = 0xe654 E655 616 _EP6FIFOIRQ = 0xe655 E656 617 _EP8FIFOIE = 0xe656 E657 618 _EP8FIFOIRQ = 0xe657 E658 619 _IBNIE = 0xe658 E659 620 _IBNIRQ = 0xe659 E65A 621 _NAKIE = 0xe65a E65B 622 _NAKIRQ = 0xe65b E65C 623 _USBIE = 0xe65c E65D 624 _USBIRQ = 0xe65d E65E 625 _EPIE = 0xe65e E65F 626 _EPIRQ = 0xe65f E660 627 _GPIFIE = 0xe660 E661 628 _GPIFIRQ = 0xe661 E662 629 _USBERRIE = 0xe662 E663 630 _USBERRIRQ = 0xe663 E664 631 _ERRCNTLIM = 0xe664 E665 632 _CLRERRCNT = 0xe665 E666 633 _INT2IVEC = 0xe666 E667 634 _INT4IVEC = 0xe667 E668 635 _INTSETUP = 0xe668 E670 636 _PORTACFG = 0xe670 E671 637 _PORTCCFG = 0xe671 E672 638 _PORTECFG = 0xe672 E678 639 _I2CS = 0xe678 E679 640 _I2DAT = 0xe679 E67A 641 _I2CTL = 0xe67a E67B 642 _XAUTODAT1 = 0xe67b E67C 643 _XAUTODAT2 = 0xe67c E680 644 _USBCS = 0xe680 E681 645 _SUSPEND = 0xe681 E682 646 _WAKEUPCS = 0xe682 E683 647 _TOGCTL = 0xe683 E684 648 _USBFRAMEH = 0xe684 E685 649 _USBFRAMEL = 0xe685 E686 650 _MICROFRAME = 0xe686 E687 651 _FNADDR = 0xe687 E68A 652 _EP0BCH = 0xe68a E68B 653 _EP0BCL = 0xe68b E68D 654 _EP1OUTBC = 0xe68d E68F 655 _EP1INBC = 0xe68f E690 656 _EP2BCH = 0xe690 E691 657 _EP2BCL = 0xe691 E694 658 _EP4BCH = 0xe694 E695 659 _EP4BCL = 0xe695 E698 660 _EP6BCH = 0xe698 E699 661 _EP6BCL = 0xe699 E69C 662 _EP8BCH = 0xe69c E69D 663 _EP8BCL = 0xe69d E6A0 664 _EP0CS = 0xe6a0 E6A1 665 _EP1OUTCS = 0xe6a1 E6A2 666 _EP1INCS = 0xe6a2 E6A3 667 _EP2CS = 0xe6a3 E6A4 668 _EP4CS = 0xe6a4 E6A5 669 _EP6CS = 0xe6a5 E6A6 670 _EP8CS = 0xe6a6 E6A7 671 _EP2FIFOFLGS = 0xe6a7 E6A8 672 _EP4FIFOFLGS = 0xe6a8 E6A9 673 _EP6FIFOFLGS = 0xe6a9 E6AA 674 _EP8FIFOFLGS = 0xe6aa E6AB 675 _EP2FIFOBCH = 0xe6ab E6AC 676 _EP2FIFOBCL = 0xe6ac E6AD 677 _EP4FIFOBCH = 0xe6ad E6AE 678 _EP4FIFOBCL = 0xe6ae E6AF 679 _EP6FIFOBCH = 0xe6af E6B0 680 _EP6FIFOBCL = 0xe6b0 E6B1 681 _EP8FIFOBCH = 0xe6b1 E6B2 682 _EP8FIFOBCL = 0xe6b2 E6B3 683 _SUDPTRH = 0xe6b3 E6B4 684 _SUDPTRL = 0xe6b4 E6B5 685 _SUDPTRCTL = 0xe6b5 E6B8 686 _SETUPDAT = 0xe6b8 E6C0 687 _GPIFWFSELECT = 0xe6c0 E6C1 688 _GPIFIDLECS = 0xe6c1 E6C2 689 _GPIFIDLECTL = 0xe6c2 E6C3 690 _GPIFCTLCFG = 0xe6c3 E6C4 691 _GPIFADRH = 0xe6c4 E6C5 692 _GPIFADRL = 0xe6c5 E6CE 693 _GPIFTCB3 = 0xe6ce E6CF 694 _GPIFTCB2 = 0xe6cf E6D0 695 _GPIFTCB1 = 0xe6d0 E6D1 696 _GPIFTCB0 = 0xe6d1 E6D2 697 _EP2GPIFFLGSEL = 0xe6d2 E6D3 698 _EP2GPIFPFSTOP = 0xe6d3 E6D4 699 _EP2GPIFTRIG = 0xe6d4 E6DA 700 _EP4GPIFFLGSEL = 0xe6da E6DB 701 _EP4GPIFPFSTOP = 0xe6db E6DC 702 _EP4GPIFTRIG = 0xe6dc E6E2 703 _EP6GPIFFLGSEL = 0xe6e2 E6E3 704 _EP6GPIFPFSTOP = 0xe6e3 E6E4 705 _EP6GPIFTRIG = 0xe6e4 E6EA 706 _EP8GPIFFLGSEL = 0xe6ea E6EB 707 _EP8GPIFPFSTOP = 0xe6eb E6EC 708 _EP8GPIFTRIG = 0xe6ec E6F0 709 _XGPIFSGLDATH = 0xe6f0 E6F1 710 _XGPIFSGLDATLX = 0xe6f1 E6F2 711 _XGPIFSGLDATLNOX = 0xe6f2 E6F3 712 _GPIFREADYCFG = 0xe6f3 E6F4 713 _GPIFREADYSTAT = 0xe6f4 E6F5 714 _GPIFABORT = 0xe6f5 E6C6 715 _FLOWSTATE = 0xe6c6 E6C7 716 _FLOWLOGIC = 0xe6c7 E6C8 717 _FLOWEQ0CTL = 0xe6c8 E6C9 718 _FLOWEQ1CTL = 0xe6c9 E6CA 719 _FLOWHOLDOFF = 0xe6ca E6CB 720 _FLOWSTB = 0xe6cb E6CC 721 _FLOWSTBEDGE = 0xe6cc E6CD 722 _FLOWSTBHPERIOD = 0xe6cd E60C 723 _GPIFHOLDAMOUNT = 0xe60c E67D 724 _UDMACRCH = 0xe67d E67E 725 _UDMACRCL = 0xe67e E67F 726 _UDMACRCQUAL = 0xe67f E6F8 727 _DBUG = 0xe6f8 E6F9 728 _TESTCFG = 0xe6f9 E6FA 729 _USBTEST = 0xe6fa E6FB 730 _CT1 = 0xe6fb E6FC 731 _CT2 = 0xe6fc E6FD 732 _CT3 = 0xe6fd E6FE 733 _CT4 = 0xe6fe E740 734 _EP0BUF = 0xe740 E780 735 _EP1OUTBUF = 0xe780 E7C0 736 _EP1INBUF = 0xe7c0 F000 737 _EP2FIFOBUF = 0xf000 F400 738 _EP4FIFOBUF = 0xf400 F800 739 _EP6FIFOBUF = 0xf800 FC00 740 _EP8FIFOBUF = 0xfc00 741 ;-------------------------------------------------------- 742 ; absolute external ram data 743 ;-------------------------------------------------------- 744 .area XABS (ABS,XDATA) 745 ;-------------------------------------------------------- 746 ; external initialized ram data 747 ;-------------------------------------------------------- 748 .area HOME (CODE) 749 .area GSINIT0 (CODE) 750 .area GSINIT1 (CODE) 751 .area GSINIT2 (CODE) 752 .area GSINIT3 (CODE) 753 .area GSINIT4 (CODE) 754 .area GSINIT5 (CODE) 755 .area GSINIT (CODE) 756 .area GSFINAL (CODE) 757 .area CSEG (CODE) 758 ;-------------------------------------------------------- 759 ; global & static initialisations 760 ;-------------------------------------------------------- 761 .area HOME (CODE) 762 .area GSINIT (CODE) 763 .area GSFINAL (CODE) 764 .area GSINIT (CODE) 765 ; usb_common.c:72: unsigned char _usb_config = 0; 0000 75*00 00 766 mov __usb_config,#0x00 767 ; usb_common.c:73: unsigned char _usb_alt_setting = 0; // FIXME really 1/interface 0003 75*01 00 768 mov __usb_alt_setting,#0x00 769 ;-------------------------------------------------------- 770 ; Home 771 ;-------------------------------------------------------- 772 .area HOME (CODE) 773 .area HOME (CODE) 774 ;-------------------------------------------------------- 775 ; code 776 ;-------------------------------------------------------- 777 .area CSEG (CODE) 778 ;------------------------------------------------------------ 779 ;Allocation info for local variables in function 'setup_descriptors' 780 ;------------------------------------------------------------ 781 ;------------------------------------------------------------ 782 ; usb_common.c:81: setup_descriptors (void) 783 ; ----------------------------------------- 784 ; function setup_descriptors 785 ; ----------------------------------------- 0000 786 _setup_descriptors: 0002 787 ar2 = 0x02 0003 788 ar3 = 0x03 0004 789 ar4 = 0x04 0005 790 ar5 = 0x05 0006 791 ar6 = 0x06 0007 792 ar7 = 0x07 0000 793 ar0 = 0x00 0001 794 ar1 = 0x01 795 ; usb_common.c:83: if (USBCS & bmHSM){ // high speed mode 0000 90 E6 80 796 mov dptr,#_USBCS 0003 E0 797 movx a,@dptr 0004 FA 798 mov r2,a 0005 30 E7 19 799 jnb acc.7,00102$ 800 ; usb_common.c:84: current_device_descr = high_speed_device_descr; 0008 75*02r00 801 mov _current_device_descr,#_high_speed_device_descr 000B 75*03s00 802 mov (_current_device_descr + 1),#(_high_speed_device_descr >> 8) 803 ; usb_common.c:85: current_devqual_descr = high_speed_devqual_descr; 000E 75*04r00 804 mov _current_devqual_descr,#_high_speed_devqual_descr 0011 75*05s00 805 mov (_current_devqual_descr + 1),#(_high_speed_devqual_descr >> 8) 806 ; usb_common.c:86: current_config_descr = high_speed_config_descr; 0014 75*06r00 807 mov _current_config_descr,#_high_speed_config_descr 0017 75*07s00 808 mov (_current_config_descr + 1),#(_high_speed_config_descr >> 8) 809 ; usb_common.c:87: other_config_descr = full_speed_config_descr; 001A 75*08r00 810 mov _other_config_descr,#_full_speed_config_descr 001D 75*09s00 811 mov (_other_config_descr + 1),#(_full_speed_config_descr >> 8) 0020 22 812 ret 0021 813 00102$: 814 ; usb_common.c:90: current_device_descr = full_speed_device_descr; 0021 75*02r00 815 mov _current_device_descr,#_full_speed_device_descr 0024 75*03s00 816 mov (_current_device_descr + 1),#(_full_speed_device_descr >> 8) 817 ; usb_common.c:91: current_devqual_descr = full_speed_devqual_descr; 0027 75*04r00 818 mov _current_devqual_descr,#_full_speed_devqual_descr 002A 75*05s00 819 mov (_current_devqual_descr + 1),#(_full_speed_devqual_descr >> 8) 820 ; usb_common.c:92: current_config_descr = full_speed_config_descr; 002D 75*06r00 821 mov _current_config_descr,#_full_speed_config_descr 0030 75*07s00 822 mov (_current_config_descr + 1),#(_full_speed_config_descr >> 8) 823 ; usb_common.c:93: other_config_descr = high_speed_config_descr; 0033 75*08r00 824 mov _other_config_descr,#_high_speed_config_descr 0036 75*09s00 825 mov (_other_config_descr + 1),#(_high_speed_config_descr >> 8) 0039 22 826 ret 827 ;------------------------------------------------------------ 828 ;Allocation info for local variables in function 'isr_SUDAV' 829 ;------------------------------------------------------------ 830 ;------------------------------------------------------------ 831 ; usb_common.c:103: isr_SUDAV (void) interrupt 832 ; ----------------------------------------- 833 ; function isr_SUDAV 834 ; ----------------------------------------- 003A 835 _isr_SUDAV: 836 ; usb_common.c:105: clear_usb_irq (); 003A 53 91 EF 837 anl _EXIF,#0xEF 003D 75 A1 00 838 mov _INT2CLR,#0x00 839 ; usb_common.c:106: _usb_got_SUDAV = 1; 0040 D2*00 840 setb __usb_got_SUDAV 0042 32 841 reti 842 ; eliminated unneeded push/pop psw 843 ; eliminated unneeded push/pop dpl 844 ; eliminated unneeded push/pop dph 845 ; eliminated unneeded push/pop b 846 ; eliminated unneeded push/pop acc 847 ;------------------------------------------------------------ 848 ;Allocation info for local variables in function 'isr_USBRESET' 849 ;------------------------------------------------------------ 850 ;------------------------------------------------------------ 851 ; usb_common.c:111: isr_USBRESET (void) interrupt 852 ; ----------------------------------------- 853 ; function isr_USBRESET 854 ; ----------------------------------------- 0043 855 _isr_USBRESET: 0043 C0*00 856 push bits 0045 C0 E0 857 push acc 0047 C0 F0 858 push b 0049 C0 82 859 push dpl 004B C0 83 860 push dph 004D C0 02 861 push (0+2) 004F C0 03 862 push (0+3) 0051 C0 04 863 push (0+4) 0053 C0 05 864 push (0+5) 0055 C0 06 865 push (0+6) 0057 C0 07 866 push (0+7) 0059 C0 00 867 push (0+0) 005B C0 01 868 push (0+1) 005D C0 D0 869 push psw 005F 75 D0 00 870 mov psw,#0x00 871 ; usb_common.c:113: clear_usb_irq (); 0062 53 91 EF 872 anl _EXIF,#0xEF 0065 75 A1 00 873 mov _INT2CLR,#0x00 874 ; usb_common.c:114: setup_descriptors (); 0068 12s00r00 875 lcall _setup_descriptors 006B D0 D0 876 pop psw 006D D0 01 877 pop (0+1) 006F D0 00 878 pop (0+0) 0071 D0 07 879 pop (0+7) 0073 D0 06 880 pop (0+6) 0075 D0 05 881 pop (0+5) 0077 D0 04 882 pop (0+4) 0079 D0 03 883 pop (0+3) 007B D0 02 884 pop (0+2) 007D D0 83 885 pop dph 007F D0 82 886 pop dpl 0081 D0 F0 887 pop b 0083 D0 E0 888 pop acc 0085 D0*00 889 pop bits 0087 32 890 reti 891 ;------------------------------------------------------------ 892 ;Allocation info for local variables in function 'isr_HIGHSPEED' 893 ;------------------------------------------------------------ 894 ;------------------------------------------------------------ 895 ; usb_common.c:118: isr_HIGHSPEED (void) interrupt 896 ; ----------------------------------------- 897 ; function isr_HIGHSPEED 898 ; ----------------------------------------- 0088 899 _isr_HIGHSPEED: 0088 C0*00 900 push bits 008A C0 E0 901 push acc 008C C0 F0 902 push b 008E C0 82 903 push dpl 0090 C0 83 904 push dph 0092 C0 02 905 push (0+2) 0094 C0 03 906 push (0+3) 0096 C0 04 907 push (0+4) 0098 C0 05 908 push (0+5) 009A C0 06 909 push (0+6) 009C C0 07 910 push (0+7) 009E C0 00 911 push (0+0) 00A0 C0 01 912 push (0+1) 00A2 C0 D0 913 push psw 00A4 75 D0 00 914 mov psw,#0x00 915 ; usb_common.c:120: clear_usb_irq (); 00A7 53 91 EF 916 anl _EXIF,#0xEF 00AA 75 A1 00 917 mov _INT2CLR,#0x00 918 ; usb_common.c:121: setup_descriptors (); 00AD 12s00r00 919 lcall _setup_descriptors 00B0 D0 D0 920 pop psw 00B2 D0 01 921 pop (0+1) 00B4 D0 00 922 pop (0+0) 00B6 D0 07 923 pop (0+7) 00B8 D0 06 924 pop (0+6) 00BA D0 05 925 pop (0+5) 00BC D0 04 926 pop (0+4) 00BE D0 03 927 pop (0+3) 00C0 D0 02 928 pop (0+2) 00C2 D0 83 929 pop dph 00C4 D0 82 930 pop dpl 00C6 D0 F0 931 pop b 00C8 D0 E0 932 pop acc 00CA D0*00 933 pop bits 00CC 32 934 reti 935 ;------------------------------------------------------------ 936 ;Allocation info for local variables in function 'usb_install_handlers' 937 ;------------------------------------------------------------ 938 ;------------------------------------------------------------ 939 ; usb_common.c:125: usb_install_handlers (void) 940 ; ----------------------------------------- 941 ; function usb_install_handlers 942 ; ----------------------------------------- 00CD 943 _usb_install_handlers: 944 ; usb_common.c:127: setup_descriptors (); // ensure that they're set before use 00CD 12s00r00 945 lcall _setup_descriptors 946 ; usb_common.c:129: hook_uv (UV_SUDAV, (unsigned short) isr_SUDAV); 00D0 75*00r3A 947 mov _hook_uv_PARM_2,#_isr_SUDAV 00D3 75*01s00 948 mov (_hook_uv_PARM_2 + 1),#(_isr_SUDAV >> 8) 00D6 75 82 00 949 mov dpl,#0x00 00D9 12s00r00 950 lcall _hook_uv 951 ; usb_common.c:130: hook_uv (UV_USBRESET, (unsigned short) isr_USBRESET); 00DC 75*00r43 952 mov _hook_uv_PARM_2,#_isr_USBRESET 00DF 75*01s00 953 mov (_hook_uv_PARM_2 + 1),#(_isr_USBRESET >> 8) 00E2 75 82 10 954 mov dpl,#0x10 00E5 12s00r00 955 lcall _hook_uv 956 ; usb_common.c:131: hook_uv (UV_HIGHSPEED, (unsigned short) isr_HIGHSPEED); 00E8 75*00r88 957 mov _hook_uv_PARM_2,#_isr_HIGHSPEED 00EB 75*01s00 958 mov (_hook_uv_PARM_2 + 1),#(_isr_HIGHSPEED >> 8) 00EE 75 82 14 959 mov dpl,#0x14 00F1 12s00r00 960 lcall _hook_uv 961 ; usb_common.c:133: USBIE = bmSUDAV | bmURES | bmHSGRANT; 00F4 90 E6 5C 962 mov dptr,#_USBIE 00F7 74 31 963 mov a,#0x31 00F9 F0 964 movx @dptr,a 00FA 22 965 ret 966 ;------------------------------------------------------------ 967 ;Allocation info for local variables in function 'plausible_endpoint' 968 ;------------------------------------------------------------ 969 ;ep Allocated to registers r2 970 ;------------------------------------------------------------ 971 ; usb_common.c:140: plausible_endpoint (unsigned char ep) 972 ; ----------------------------------------- 973 ; function plausible_endpoint 974 ; ----------------------------------------- 00FB 975 _plausible_endpoint: 976 ; usb_common.c:142: ep &= ~0x80; // ignore direction bit 977 ; usb_common.c:144: if (ep > 8) 00FB E5 82 978 mov a,dpl 00FD 54 7F 979 anl a,#0x7F 00FF FA 980 mov r2,a 0100 24 F7 981 add a,#0xff - 0x08 0102 50 04 982 jnc 00102$ 983 ; usb_common.c:145: return 0; 0104 75 82 00 984 mov dpl,#0x00 0107 22 985 ret 0108 986 00102$: 987 ; usb_common.c:147: if (ep == 1) 0108 BA 01 04 988 cjne r2,#0x01,00104$ 989 ; usb_common.c:148: return 1; 010B 75 82 01 990 mov dpl,#0x01 010E 22 991 ret 010F 992 00104$: 993 ; usb_common.c:150: return (ep & 0x1) == 0; // must be even 010F 53 02 01 994 anl ar2,#0x01 0112 E4 995 clr a 0113 BA 00 01 996 cjne r2,#0x00,00112$ 0116 04 997 inc a 0117 998 00112$: 0117 F5 82 999 mov dpl,a 0119 22 1000 ret 1001 ;------------------------------------------------------------ 1002 ;Allocation info for local variables in function 'epcs' 1003 ;------------------------------------------------------------ 1004 ;ep Allocated to registers r2 1005 ;------------------------------------------------------------ 1006 ; usb_common.c:157: epcs (unsigned char ep) 1007 ; ----------------------------------------- 1008 ; function epcs 1009 ; ----------------------------------------- 011A 1010 _epcs: 011A AA 82 1011 mov r2,dpl 1012 ; usb_common.c:159: if (ep == 0x01) // ep1 has different in and out CS regs 011C BA 01 0C 1013 cjne r2,#0x01,00102$ 1014 ; usb_common.c:160: return EP1OUTCS; 011F 90 E6 A1 1015 mov dptr,#_EP1OUTCS 0122 E0 1016 movx a,@dptr 0123 FB 1017 mov r3,a 0124 7C 00 1018 mov r4,#0x00 0126 8B 82 1019 mov dpl,r3 0128 8C 83 1020 mov dph,r4 012A 22 1021 ret 012B 1022 00102$: 1023 ; usb_common.c:162: if (ep == 0x81) 012B BA 81 0C 1024 cjne r2,#0x81,00104$ 1025 ; usb_common.c:163: return EP1INCS; 012E 90 E6 A2 1026 mov dptr,#_EP1INCS 0131 E0 1027 movx a,@dptr 0132 FB 1028 mov r3,a 0133 7C 00 1029 mov r4,#0x00 0135 8B 82 1030 mov dpl,r3 0137 8C 83 1031 mov dph,r4 0139 22 1032 ret 013A 1033 00104$: 1034 ; usb_common.c:165: ep &= ~0x80; // ignore direction bit 013A 53 02 7F 1035 anl ar2,#0x7F 1036 ; usb_common.c:167: if (ep == 0x00) // ep0 013D EA 1037 mov a,r2 013E 70 0C 1038 jnz 00106$ 1039 ; usb_common.c:168: return EP0CS; 0140 90 E6 A0 1040 mov dptr,#_EP0CS 0143 E0 1041 movx a,@dptr 0144 FB 1042 mov r3,a 0145 7C 00 1043 mov r4,#0x00 0147 8B 82 1044 mov dpl,r3 0149 8C 83 1045 mov dph,r4 014B 22 1046 ret 014C 1047 00106$: 1048 ; usb_common.c:170: return EP2CS + (ep >> 1); // 2, 4, 6, 8 are consecutive 014C 90 E6 A3 1049 mov dptr,#_EP2CS 014F E0 1050 movx a,@dptr 0150 FB 1051 mov r3,a 0151 7C 00 1052 mov r4,#0x00 0153 EA 1053 mov a,r2 0154 C3 1054 clr c 0155 13 1055 rrc a 0156 FA 1056 mov r2,a 0157 7D 00 1057 mov r5,#0x00 0159 EA 1058 mov a,r2 015A 2B 1059 add a,r3 015B FB 1060 mov r3,a 015C ED 1061 mov a,r5 015D 3C 1062 addc a,r4 015E 8B 82 1063 mov dpl,r3 0160 F5 83 1064 mov dph,a 0162 22 1065 ret 1066 ;------------------------------------------------------------ 1067 ;Allocation info for local variables in function 'usb_handle_setup_packet' 1068 ;------------------------------------------------------------ 1069 ;p Allocated to registers r2 r3 1070 ;__00060000 Allocated to registers r2 r3 1071 ;__00050001 Allocated to registers r2 r3 1072 ;------------------------------------------------------------ 1073 ; usb_common.c:174: usb_handle_setup_packet (void) 1074 ; ----------------------------------------- 1075 ; function usb_handle_setup_packet 1076 ; ----------------------------------------- 0163 1077 _usb_handle_setup_packet: 1078 ; usb_common.c:176: _usb_got_SUDAV = 0; 0163 C2*00 1079 clr __usb_got_SUDAV 1080 ; usb_common.c:180: switch (bRequestType & bmRT_TYPE_MASK){ 0165 90 E6 B8 1081 mov dptr,#_SETUPDAT 0168 E0 1082 movx a,@dptr 0169 FA 1083 mov r2,a 016A 53 02 60 1084 anl ar2,#0x60 016D BA 00 02 1085 cjne r2,#0x00,00206$ 0170 80 28 1086 sjmp 00106$ 0172 1087 00206$: 0172 BA 20 02 1088 cjne r2,#0x20,00207$ 0175 80 0D 1089 sjmp 00102$ 0177 1090 00207$: 0177 BA 40 02 1091 cjne r2,#0x40,00208$ 017A 80 0E 1092 sjmp 00103$ 017C 1093 00208$: 017C BA 60 02 1094 cjne r2,#0x60,00209$ 017F 80 03 1095 sjmp 00210$ 0181 1096 00209$: 0181 02s04r1C 1097 ljmp 00175$ 0184 1098 00210$: 1099 ; usb_common.c:183: case bmRT_TYPE_RESERVED: 0184 1100 00102$: 1101 ; usb_common.c:184: fx2_stall_ep0 (); // we don't handle these. indicate error 0184 12s00r00 1102 lcall _fx2_stall_ep0 1103 ; usb_common.c:185: break; 0187 02s04r1C 1104 ljmp 00175$ 1105 ; usb_common.c:187: case bmRT_TYPE_VENDOR: 018A 1106 00103$: 1107 ; usb_common.c:191: if (!app_vendor_cmd ()) 018A 12s00r00 1108 lcall _app_vendor_cmd 018D E5 82 1109 mov a,dpl 018F 60 03 1110 jz 00211$ 0191 02s04r1C 1111 ljmp 00175$ 0194 1112 00211$: 1113 ; usb_common.c:192: fx2_stall_ep0 (); 0194 12s00r00 1114 lcall _fx2_stall_ep0 1115 ; usb_common.c:193: break; 0197 02s04r1C 1116 ljmp 00175$ 1117 ; usb_common.c:195: case bmRT_TYPE_STD: 019A 1118 00106$: 1119 ; usb_common.c:198: if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_IN){ 019A 90 E6 B8 1120 mov dptr,#_SETUPDAT 019D E0 1121 movx a,@dptr 019E FA 1122 mov r2,a 019F 53 02 80 1123 anl ar2,#0x80 01A2 BA 80 02 1124 cjne r2,#0x80,00212$ 01A5 80 03 1125 sjmp 00213$ 01A7 1126 00212$: 01A7 02s03r1D 1127 ljmp 00173$ 01AA 1128 00213$: 1129 ; usb_common.c:204: switch (bRequest){ 01AA 90 E6 B9 1130 mov dptr,#(_SETUPDAT + 0x0001) 01AD E0 1131 movx a,@dptr 01AE FA 1132 mov r2,a 01AF BA 00 03 1133 cjne r2,#0x00,00214$ 01B2 02s02r9B 1134 ljmp 00128$ 01B5 1135 00214$: 01B5 BA 06 02 1136 cjne r2,#0x06,00215$ 01B8 80 35 1137 sjmp 00109$ 01BA 1138 00215$: 01BA BA 08 02 1139 cjne r2,#0x08,00216$ 01BD 80 08 1140 sjmp 00107$ 01BF 1141 00216$: 01BF BA 0A 02 1142 cjne r2,#0x0A,00217$ 01C2 80 17 1143 sjmp 00108$ 01C4 1144 00217$: 01C4 02s03r17 1145 ljmp 00138$ 1146 ; usb_common.c:206: case RQ_GET_CONFIG: 01C7 1147 00107$: 1148 ; usb_common.c:207: EP0BUF[0] = _usb_config; // FIXME app should handle 01C7 90 E7 40 1149 mov dptr,#_EP0BUF 01CA E5*00 1150 mov a,__usb_config 01CC F0 1151 movx @dptr,a 1152 ; usb_common.c:208: EP0BCH = 0; 01CD 90 E6 8A 1153 mov dptr,#_EP0BCH 01D0 E4 1154 clr a 01D1 F0 1155 movx @dptr,a 1156 ; usb_common.c:209: EP0BCL = 1; 01D2 90 E6 8B 1157 mov dptr,#_EP0BCL 01D5 74 01 1158 mov a,#0x01 01D7 F0 1159 movx @dptr,a 1160 ; usb_common.c:210: break; 01D8 02s04r1C 1161 ljmp 00175$ 1162 ; usb_common.c:214: case RQ_GET_INTERFACE: 01DB 1163 00108$: 1164 ; usb_common.c:215: EP0BUF[0] = _usb_alt_setting; // FIXME app should handle 01DB 90 E7 40 1165 mov dptr,#_EP0BUF 01DE E5*01 1166 mov a,__usb_alt_setting 01E0 F0 1167 movx @dptr,a 1168 ; usb_common.c:216: EP0BCH = 0; 01E1 90 E6 8A 1169 mov dptr,#_EP0BCH 01E4 E4 1170 clr a 01E5 F0 1171 movx @dptr,a 1172 ; usb_common.c:217: EP0BCL = 1; 01E6 90 E6 8B 1173 mov dptr,#_EP0BCL 01E9 74 01 1174 mov a,#0x01 01EB F0 1175 movx @dptr,a 1176 ; usb_common.c:218: break; 01EC 02s04r1C 1177 ljmp 00175$ 1178 ; usb_common.c:222: case RQ_GET_DESCR: 01EF 1179 00109$: 1180 ; usb_common.c:223: switch (wValueH){ 01EF 90 E6 BB 1181 mov dptr,#(_SETUPDAT + 0x0003) 01F2 E0 1182 movx a,@dptr 01F3 FA 1183 mov r2,a 01F4 BA 01 02 1184 cjne r2,#0x01,00218$ 01F7 80 17 1185 sjmp 00110$ 01F9 1186 00218$: 01F9 BA 02 02 1187 cjne r2,#0x02,00219$ 01FC 80 38 1188 sjmp 00114$ 01FE 1189 00219$: 01FE BA 03 02 1190 cjne r2,#0x03,00220$ 0201 80 59 1191 sjmp 00122$ 0203 1192 00220$: 0203 BA 06 02 1193 cjne r2,#0x06,00221$ 0206 80 1B 1194 sjmp 00111$ 0208 1195 00221$: 0208 BA 07 02 1196 cjne r2,#0x07,00222$ 020B 80 3C 1197 sjmp 00119$ 020D 1198 00222$: 020D 02s02r95 1199 ljmp 00126$ 1200 ; usb_common.c:225: case DT_DEVICE: 0210 1201 00110$: 1202 ; usb_common.c:226: SUDPTRH = MSB (current_device_descr); 0210 AA*02 1203 mov r2,_current_device_descr 0212 AB*03 1204 mov r3,(_current_device_descr + 1) 0214 90 E6 B3 1205 mov dptr,#_SUDPTRH 0217 EB 1206 mov a,r3 0218 F0 1207 movx @dptr,a 1208 ; usb_common.c:227: SUDPTRL = LSB (current_device_descr); 0219 7B 00 1209 mov r3,#0x00 021B 90 E6 B4 1210 mov dptr,#_SUDPTRL 021E EA 1211 mov a,r2 021F F0 1212 movx @dptr,a 1213 ; usb_common.c:228: break; 0220 02s04r1C 1214 ljmp 00175$ 1215 ; usb_common.c:230: case DT_DEVQUAL: 0223 1216 00111$: 1217 ; usb_common.c:231: SUDPTRH = MSB (current_devqual_descr); 0223 AA*04 1218 mov r2,_current_devqual_descr 0225 AB*05 1219 mov r3,(_current_devqual_descr + 1) 0227 90 E6 B3 1220 mov dptr,#_SUDPTRH 022A EB 1221 mov a,r3 022B F0 1222 movx @dptr,a 1223 ; usb_common.c:232: SUDPTRL = LSB (current_devqual_descr); 022C 7B 00 1224 mov r3,#0x00 022E 90 E6 B4 1225 mov dptr,#_SUDPTRL 0231 EA 1226 mov a,r2 0232 F0 1227 movx @dptr,a 1228 ; usb_common.c:233: break; 0233 02s04r1C 1229 ljmp 00175$ 1230 ; usb_common.c:237: fx2_stall_ep0 (); 0236 1231 00114$: 1232 ; usb_common.c:239: SUDPTRH = MSB (current_config_descr); 0236 AA*06 1233 mov r2,_current_config_descr 0238 AB*07 1234 mov r3,(_current_config_descr + 1) 023A 90 E6 B3 1235 mov dptr,#_SUDPTRH 023D EB 1236 mov a,r3 023E F0 1237 movx @dptr,a 1238 ; usb_common.c:240: SUDPTRL = LSB (current_config_descr); 023F 7B 00 1239 mov r3,#0x00 0241 90 E6 B4 1240 mov dptr,#_SUDPTRL 0244 EA 1241 mov a,r2 0245 F0 1242 movx @dptr,a 1243 ; usb_common.c:242: break; 0246 02s04r1C 1244 ljmp 00175$ 1245 ; usb_common.c:246: fx2_stall_ep0 (); 0249 1246 00119$: 1247 ; usb_common.c:248: SUDPTRH = MSB (other_config_descr); 0249 AA*08 1248 mov r2,_other_config_descr 024B AB*09 1249 mov r3,(_other_config_descr + 1) 024D 90 E6 B3 1250 mov dptr,#_SUDPTRH 0250 EB 1251 mov a,r3 0251 F0 1252 movx @dptr,a 1253 ; usb_common.c:249: SUDPTRL = LSB (other_config_descr); 0252 7B 00 1254 mov r3,#0x00 0254 90 E6 B4 1255 mov dptr,#_SUDPTRL 0257 EA 1256 mov a,r2 0258 F0 1257 movx @dptr,a 1258 ; usb_common.c:251: break; 0259 02s04r1C 1259 ljmp 00175$ 1260 ; usb_common.c:253: case DT_STRING: 025C 1261 00122$: 1262 ; usb_common.c:254: if (wValueL >= nstring_descriptors) 025C 90 E6 BA 1263 mov dptr,#(_SETUPDAT + 0x0002) 025F E0 1264 movx a,@dptr 0260 FA 1265 mov r2,a 0261 90s00r00 1266 mov dptr,#_nstring_descriptors 0264 E0 1267 movx a,@dptr 0265 FB 1268 mov r3,a 0266 C3 1269 clr c 0267 EA 1270 mov a,r2 0268 9B 1271 subb a,r3 0269 40 06 1272 jc 00124$ 1273 ; usb_common.c:255: fx2_stall_ep0 (); 026B 12s00r00 1274 lcall _fx2_stall_ep0 026E 02s04r1C 1275 ljmp 00175$ 0271 1276 00124$: 1277 ; usb_common.c:257: xdata char *p = string_descriptors[wValueL]; 0271 90 E6 BA 1278 mov dptr,#(_SETUPDAT + 0x0002) 0274 E0 1279 movx a,@dptr 0275 75 F0 02 1280 mov b,#0x02 0278 A4 1281 mul ab 0279 24r00 1282 add a,#_string_descriptors 027B F5 82 1283 mov dpl,a 027D 74s00 1284 mov a,#(_string_descriptors >> 8) 027F 35 F0 1285 addc a,b 0281 F5 83 1286 mov dph,a 0283 E0 1287 movx a,@dptr 0284 FA 1288 mov r2,a 0285 A3 1289 inc dptr 0286 E0 1290 movx a,@dptr 1291 ; usb_common.c:258: SUDPTRH = MSB (p); 0287 90 E6 B3 1292 mov dptr,#_SUDPTRH 028A F0 1293 movx @dptr,a 1294 ; usb_common.c:259: SUDPTRL = LSB (p); 028B 7B 00 1295 mov r3,#0x00 028D 90 E6 B4 1296 mov dptr,#_SUDPTRL 0290 EA 1297 mov a,r2 0291 F0 1298 movx @dptr,a 1299 ; usb_common.c:261: break; 0292 02s04r1C 1300 ljmp 00175$ 1301 ; usb_common.c:263: default: 0295 1302 00126$: 1303 ; usb_common.c:264: fx2_stall_ep0 (); // invalid request 0295 12s00r00 1304 lcall _fx2_stall_ep0 1305 ; usb_common.c:267: break; 0298 02s04r1C 1306 ljmp 00175$ 1307 ; usb_common.c:271: case RQ_GET_STATUS: 029B 1308 00128$: 1309 ; usb_common.c:272: switch (bRequestType & bmRT_RECIP_MASK){ 029B 90 E6 B8 1310 mov dptr,#_SETUPDAT 029E E0 1311 movx a,@dptr 029F FA 1312 mov r2,a 02A0 53 02 1F 1313 anl ar2,#0x1F 02A3 BA 00 02 1314 cjne r2,#0x00,00224$ 02A6 80 0A 1315 sjmp 00129$ 02A8 1316 00224$: 02A8 BA 01 02 1317 cjne r2,#0x01,00225$ 02AB 80 1C 1318 sjmp 00130$ 02AD 1319 00225$: 1320 ; usb_common.c:273: case bmRT_RECIP_DEVICE: 02AD BA 02 64 1321 cjne r2,#0x02,00135$ 02B0 80 2C 1322 sjmp 00131$ 02B2 1323 00129$: 1324 ; usb_common.c:274: EP0BUF[0] = bmGSDA_SELF_POWERED; // FIXME app should handle 02B2 90 E7 40 1325 mov dptr,#_EP0BUF 02B5 74 01 1326 mov a,#0x01 02B7 F0 1327 movx @dptr,a 1328 ; usb_common.c:275: EP0BUF[1] = 0; 02B8 90 E7 41 1329 mov dptr,#(_EP0BUF + 0x0001) 1330 ; usb_common.c:276: EP0BCH = 0; 02BB E4 1331 clr a 02BC F0 1332 movx @dptr,a 02BD 90 E6 8A 1333 mov dptr,#_EP0BCH 02C0 F0 1334 movx @dptr,a 1335 ; usb_common.c:277: EP0BCL = 2; 02C1 90 E6 8B 1336 mov dptr,#_EP0BCL 02C4 74 02 1337 mov a,#0x02 02C6 F0 1338 movx @dptr,a 1339 ; usb_common.c:278: break; 1340 ; usb_common.c:280: case bmRT_RECIP_INTERFACE: 02C7 80 4E 1341 sjmp 00138$ 02C9 1342 00130$: 1343 ; usb_common.c:281: EP0BUF[0] = 0; 02C9 90 E7 40 1344 mov dptr,#_EP0BUF 1345 ; usb_common.c:282: EP0BUF[1] = 0; 1346 ; usb_common.c:283: EP0BCH = 0; 02CC E4 1347 clr a 02CD F0 1348 movx @dptr,a 02CE 90 E7 41 1349 mov dptr,#(_EP0BUF + 0x0001) 02D1 F0 1350 movx @dptr,a 02D2 90 E6 8A 1351 mov dptr,#_EP0BCH 02D5 F0 1352 movx @dptr,a 1353 ; usb_common.c:284: EP0BCL = 2; 02D6 90 E6 8B 1354 mov dptr,#_EP0BCL 02D9 74 02 1355 mov a,#0x02 02DB F0 1356 movx @dptr,a 1357 ; usb_common.c:285: break; 1358 ; usb_common.c:287: case bmRT_RECIP_ENDPOINT: 02DC 80 39 1359 sjmp 00138$ 02DE 1360 00131$: 1361 ; usb_common.c:288: if (plausible_endpoint (wIndexL)){ 02DE 90 E6 BC 1362 mov dptr,#(_SETUPDAT + 0x0004) 02E1 E0 1363 movx a,@dptr 02E2 F5 82 1364 mov dpl,a 02E4 12s00rFB 1365 lcall _plausible_endpoint 02E7 E5 82 1366 mov a,dpl 02E9 60 24 1367 jz 00133$ 1368 ; usb_common.c:289: EP0BUF[0] = *epcs (wIndexL) & bmEPSTALL; 02EB 90 E6 BC 1369 mov dptr,#(_SETUPDAT + 0x0004) 02EE E0 1370 movx a,@dptr 02EF F5 82 1371 mov dpl,a 02F1 12s01r1A 1372 lcall _epcs 02F4 E0 1373 movx a,@dptr 02F5 FA 1374 mov r2,a 02F6 53 02 01 1375 anl ar2,#0x01 02F9 90 E7 40 1376 mov dptr,#_EP0BUF 02FC EA 1377 mov a,r2 02FD F0 1378 movx @dptr,a 1379 ; usb_common.c:290: EP0BUF[1] = 0; 02FE 90 E7 41 1380 mov dptr,#(_EP0BUF + 0x0001) 1381 ; usb_common.c:291: EP0BCH = 0; 0301 E4 1382 clr a 0302 F0 1383 movx @dptr,a 0303 90 E6 8A 1384 mov dptr,#_EP0BCH 0306 F0 1385 movx @dptr,a 1386 ; usb_common.c:292: EP0BCL = 2; 0307 90 E6 8B 1387 mov dptr,#_EP0BCL 030A 74 02 1388 mov a,#0x02 030C F0 1389 movx @dptr,a 030D 80 08 1390 sjmp 00138$ 030F 1391 00133$: 1392 ; usb_common.c:295: fx2_stall_ep0 (); 030F 12s00r00 1393 lcall _fx2_stall_ep0 1394 ; usb_common.c:296: break; 1395 ; usb_common.c:298: default: 0312 80 03 1396 sjmp 00138$ 0314 1397 00135$: 1398 ; usb_common.c:299: fx2_stall_ep0 (); 0314 12s00r00 1399 lcall _fx2_stall_ep0 1400 ; usb_common.c:306: default: 0317 1401 00138$: 1402 ; usb_common.c:307: fx2_stall_ep0 (); 0317 12s00r00 1403 lcall _fx2_stall_ep0 1404 ; usb_common.c:309: } 031A 02s04r1C 1405 ljmp 00175$ 031D 1406 00173$: 1407 ; usb_common.c:318: switch (bRequest){ 031D 90 E6 B9 1408 mov dptr,#(_SETUPDAT + 0x0001) 0320 E0 1409 movx a,@dptr 0321 FA 1410 mov r2,a 0322 24 F4 1411 add a,#0xff - 0x0B 0324 50 03 1412 jnc 00228$ 0326 02s04r19 1413 ljmp 00170$ 0329 1414 00228$: 0329 EA 1415 mov a,r2 032A 2A 1416 add a,r2 032B 2A 1417 add a,r2 032C 90s03r30 1418 mov dptr,#00229$ 032F 73 1419 jmp @a+dptr 0330 1420 00229$: 0330 02s04r19 1421 ljmp 00170$ 0333 02s03r66 1422 ljmp 00142$ 0336 02s03rE1 1423 ljmp 00161$ 0339 02s03rC2 1424 ljmp 00154$ 033C 02s04r19 1425 ljmp 00170$ 033F 02s04r19 1426 ljmp 00168$ 0342 02s04r19 1427 ljmp 00170$ 0345 02s04r19 1428 ljmp 00169$ 0348 02s04r19 1429 ljmp 00170$ 034B 02s03r54 1430 ljmp 00140$ 034E 02s04r19 1431 ljmp 00170$ 0351 02s03r5D 1432 ljmp 00141$ 1433 ; usb_common.c:320: case RQ_SET_CONFIG: 0354 1434 00140$: 1435 ; usb_common.c:321: _usb_config = wValueL; // FIXME app should handle 0354 90 E6 BA 1436 mov dptr,#(_SETUPDAT + 0x0002) 0357 E0 1437 movx a,@dptr 0358 F5*00 1438 mov __usb_config,a 1439 ; usb_common.c:322: break; 035A 02s04r1C 1440 ljmp 00175$ 1441 ; usb_common.c:324: case RQ_SET_INTERFACE: 035D 1442 00141$: 1443 ; usb_common.c:325: _usb_alt_setting = wValueL; // FIXME app should handle 035D 90 E6 BA 1444 mov dptr,#(_SETUPDAT + 0x0002) 0360 E0 1445 movx a,@dptr 0361 F5*01 1446 mov __usb_alt_setting,a 1447 ; usb_common.c:326: break; 0363 02s04r1C 1448 ljmp 00175$ 1449 ; usb_common.c:330: case RQ_CLEAR_FEATURE: 0366 1450 00142$: 1451 ; usb_common.c:331: switch (bRequestType & bmRT_RECIP_MASK){ 0366 90 E6 B8 1452 mov dptr,#_SETUPDAT 0369 E0 1453 movx a,@dptr 036A FA 1454 mov r2,a 036B 53 02 1F 1455 anl ar2,#0x1F 036E BA 00 02 1456 cjne r2,#0x00,00230$ 0371 80 05 1457 sjmp 00143$ 0373 1458 00230$: 1459 ; usb_common.c:333: case bmRT_RECIP_DEVICE: 0373 BA 02 47 1460 cjne r2,#0x02,00152$ 0376 80 0A 1461 sjmp 00147$ 0378 1462 00143$: 1463 ; usb_common.c:334: switch (wValueL){ 0378 90 E6 BA 1464 mov dptr,#(_SETUPDAT + 0x0002) 037B E0 1465 movx a,@dptr 1466 ; usb_common.c:337: fx2_stall_ep0 (); 037C 12s00r00 1467 lcall _fx2_stall_ep0 1468 ; usb_common.c:339: break; 037F 02s04r1C 1469 ljmp 00175$ 1470 ; usb_common.c:341: case bmRT_RECIP_ENDPOINT: 0382 1471 00147$: 1472 ; usb_common.c:342: if (wValueL == FS_ENDPOINT_HALT && plausible_endpoint (wIndexL)){ 0382 90 E6 BA 1473 mov dptr,#(_SETUPDAT + 0x0002) 0385 E0 1474 movx a,@dptr 0386 70 30 1475 jnz 00149$ 0388 90 E6 BC 1476 mov dptr,#(_SETUPDAT + 0x0004) 038B E0 1477 movx a,@dptr 038C F5 82 1478 mov dpl,a 038E 12s00rFB 1479 lcall _plausible_endpoint 0391 E5 82 1480 mov a,dpl 0393 60 23 1481 jz 00149$ 1482 ; usb_common.c:343: *epcs (wIndexL) &= ~bmEPSTALL; 0395 90 E6 BC 1483 mov dptr,#(_SETUPDAT + 0x0004) 0398 E0 1484 movx a,@dptr 0399 F5 82 1485 mov dpl,a 039B 12s01r1A 1486 lcall _epcs 039E AA 82 1487 mov r2,dpl 03A0 AB 83 1488 mov r3,dph 03A2 E0 1489 movx a,@dptr 03A3 FC 1490 mov r4,a 03A4 53 04 FE 1491 anl ar4,#0xFE 03A7 8A 82 1492 mov dpl,r2 03A9 8B 83 1493 mov dph,r3 03AB EC 1494 mov a,r4 03AC F0 1495 movx @dptr,a 1496 ; usb_common.c:344: fx2_reset_data_toggle (wIndexL); 03AD 90 E6 BC 1497 mov dptr,#(_SETUPDAT + 0x0004) 03B0 E0 1498 movx a,@dptr 03B1 F5 82 1499 mov dpl,a 03B3 12s00r00 1500 lcall _fx2_reset_data_toggle 03B6 80 64 1501 sjmp 00175$ 03B8 1502 00149$: 1503 ; usb_common.c:347: fx2_stall_ep0 (); 03B8 12s00r00 1504 lcall _fx2_stall_ep0 1505 ; usb_common.c:348: break; 1506 ; usb_common.c:350: default: 03BB 80 5F 1507 sjmp 00175$ 03BD 1508 00152$: 1509 ; usb_common.c:351: fx2_stall_ep0 (); 03BD 12s00r00 1510 lcall _fx2_stall_ep0 1511 ; usb_common.c:354: break; 1512 ; usb_common.c:358: case RQ_SET_FEATURE: 03C0 80 5A 1513 sjmp 00175$ 03C2 1514 00154$: 1515 ; usb_common.c:359: switch (bRequestType & bmRT_RECIP_MASK){ 03C2 90 E6 B8 1516 mov dptr,#_SETUPDAT 03C5 E0 1517 movx a,@dptr 03C6 FA 1518 mov r2,a 03C7 53 02 1F 1519 anl ar2,#0x1F 03CA BA 00 4F 1520 cjne r2,#0x00,00175$ 1521 ; usb_common.c:362: switch (wValueL){ 03CD 90 E6 BA 1522 mov dptr,#(_SETUPDAT + 0x0002) 03D0 E0 1523 movx a,@dptr 03D1 FA 1524 mov r2,a 03D2 BA 01 02 1525 cjne r2,#0x01,00236$ 03D5 80 05 1526 sjmp 00158$ 03D7 1527 00236$: 03D7 BA 02 02 1528 cjne r2,#0x02,00237$ 03DA 80 40 1529 sjmp 00175$ 03DC 1530 00237$: 1531 ; usb_common.c:368: default: 03DC 1532 00158$: 1533 ; usb_common.c:369: fx2_stall_ep0 (); 03DC 12s00r00 1534 lcall _fx2_stall_ep0 1535 ; usb_common.c:373: break; 1536 ; usb_common.c:375: case bmRT_RECIP_ENDPOINT: 03DF 80 3B 1537 sjmp 00175$ 03E1 1538 00161$: 1539 ; usb_common.c:376: switch (wValueL){ 03E1 90 E6 BA 1540 mov dptr,#(_SETUPDAT + 0x0002) 03E4 E0 1541 movx a,@dptr 03E5 FA 1542 mov r2,a 03E6 70 2C 1543 jnz 00166$ 1544 ; usb_common.c:378: if (plausible_endpoint (wIndexL)) 03E8 90 E6 BC 1545 mov dptr,#(_SETUPDAT + 0x0004) 03EB E0 1546 movx a,@dptr 03EC F5 82 1547 mov dpl,a 03EE 12s00rFB 1548 lcall _plausible_endpoint 03F1 E5 82 1549 mov a,dpl 03F3 60 1A 1550 jz 00164$ 1551 ; usb_common.c:379: *epcs (wIndexL) |= bmEPSTALL; 03F5 90 E6 BC 1552 mov dptr,#(_SETUPDAT + 0x0004) 03F8 E0 1553 movx a,@dptr 03F9 F5 82 1554 mov dpl,a 03FB 12s01r1A 1555 lcall _epcs 03FE AA 82 1556 mov r2,dpl 0400 AB 83 1557 mov r3,dph 0402 E0 1558 movx a,@dptr 0403 FC 1559 mov r4,a 0404 43 04 01 1560 orl ar4,#0x01 0407 8A 82 1561 mov dpl,r2 0409 8B 83 1562 mov dph,r3 040B EC 1563 mov a,r4 040C F0 1564 movx @dptr,a 040D 80 0D 1565 sjmp 00175$ 040F 1566 00164$: 1567 ; usb_common.c:381: fx2_stall_ep0 (); 040F 12s00r00 1568 lcall _fx2_stall_ep0 1569 ; usb_common.c:382: break; 1570 ; usb_common.c:384: default: 0412 80 08 1571 sjmp 00175$ 0414 1572 00166$: 1573 ; usb_common.c:385: fx2_stall_ep0 (); 0414 12s00r00 1574 lcall _fx2_stall_ep0 1575 ; usb_common.c:388: break; 1576 ; usb_common.c:392: case RQ_SET_ADDRESS: // handled by fx2 hardware 0417 80 03 1577 sjmp 00175$ 0419 1578 00168$: 1579 ; usb_common.c:393: case RQ_SET_DESCR: // not implemented 0419 1580 00169$: 1581 ; usb_common.c:394: default: 0419 1582 00170$: 1583 ; usb_common.c:395: fx2_stall_ep0 (); 0419 12s00r00 1584 lcall _fx2_stall_ep0 1585 ; usb_common.c:401: } // bmRT_TYPE_MASK 041C 1586 00175$: 1587 ; usb_common.c:404: EP0CS |= bmHSNAK; 041C 90 E6 A0 1588 mov dptr,#_EP0CS 041F E0 1589 movx a,@dptr 0420 44 80 1590 orl a,#0x80 0422 F0 1591 movx @dptr,a 0423 22 1592 ret 1593 .area CSEG (CODE) 1594 .area CONST (CODE) 1595 .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/delay.lst0000644000175000017500000002660512576764164020141 0ustar carlescarles 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) 4 ; This file was generated Mon Jul 30 11:40:52 2012 5 ;-------------------------------------------------------- 6 .module delay 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _mdelay 13 .globl _udelay 14 ;-------------------------------------------------------- 15 ; special function registers 16 ;-------------------------------------------------------- 17 .area RSEG (DATA) 18 ;-------------------------------------------------------- 19 ; special function bits 20 ;-------------------------------------------------------- 21 .area RSEG (DATA) 22 ;-------------------------------------------------------- 23 ; overlayable register banks 24 ;-------------------------------------------------------- 25 .area REG_BANK_0 (REL,OVR,DATA) 0000 26 .ds 8 27 ;-------------------------------------------------------- 28 ; internal ram data 29 ;-------------------------------------------------------- 30 .area DSEG (DATA) 31 ;-------------------------------------------------------- 32 ; overlayable items in internal ram 33 ;-------------------------------------------------------- 34 .area OSEG (OVR,DATA) 35 ;-------------------------------------------------------- 36 ; indirectly addressable internal ram data 37 ;-------------------------------------------------------- 38 .area ISEG (DATA) 39 ;-------------------------------------------------------- 40 ; absolute internal ram data 41 ;-------------------------------------------------------- 42 .area IABS (ABS,DATA) 43 .area IABS (ABS,DATA) 44 ;-------------------------------------------------------- 45 ; bit data 46 ;-------------------------------------------------------- 47 .area BSEG (BIT) 48 ;-------------------------------------------------------- 49 ; paged external ram data 50 ;-------------------------------------------------------- 51 .area PSEG (PAG,XDATA) 52 ;-------------------------------------------------------- 53 ; external ram data 54 ;-------------------------------------------------------- 55 .area XSEG (XDATA) 56 ;-------------------------------------------------------- 57 ; absolute external ram data 58 ;-------------------------------------------------------- 59 .area XABS (ABS,XDATA) 60 ;-------------------------------------------------------- 61 ; external initialized ram data 62 ;-------------------------------------------------------- 63 .area HOME (CODE) 64 .area GSINIT0 (CODE) 65 .area GSINIT1 (CODE) 66 .area GSINIT2 (CODE) 67 .area GSINIT3 (CODE) 68 .area GSINIT4 (CODE) 69 .area GSINIT5 (CODE) 70 .area GSINIT (CODE) 71 .area GSFINAL (CODE) 72 .area CSEG (CODE) 73 ;-------------------------------------------------------- 74 ; global & static initialisations 75 ;-------------------------------------------------------- 76 .area HOME (CODE) 77 .area GSINIT (CODE) 78 .area GSFINAL (CODE) 79 .area GSINIT (CODE) 80 ;-------------------------------------------------------- 81 ; Home 82 ;-------------------------------------------------------- 83 .area HOME (CODE) 84 .area HOME (CODE) 85 ;-------------------------------------------------------- 86 ; code 87 ;-------------------------------------------------------- 88 .area CSEG (CODE) 89 ;------------------------------------------------------------ 90 ;Allocation info for local variables in function 'udelay1' 91 ;------------------------------------------------------------ 92 ;------------------------------------------------------------ 93 ; delay.c:27: udelay1 (void) _naked 94 ; ----------------------------------------- 95 ; function udelay1 96 ; ----------------------------------------- 0000 97 _udelay1: 98 ; naked function: no prologue. 99 ; delay.c:31: _endasm; 100 ; lcall that got us here took 4 bus cycles 0000 22 101 ret ; 4 bus cycles 102 103 ; naked function: no epilogue. 104 ;------------------------------------------------------------ 105 ;Allocation info for local variables in function 'udelay' 106 ;------------------------------------------------------------ 107 ;usecs Allocated to registers r2 108 ;------------------------------------------------------------ 109 ; delay.c:38: udelay (unsigned char usecs) 110 ; ----------------------------------------- 111 ; function udelay 112 ; ----------------------------------------- 0001 113 _udelay: 0002 114 ar2 = 0x02 0003 115 ar3 = 0x03 0004 116 ar4 = 0x04 0005 117 ar5 = 0x05 0006 118 ar6 = 0x06 0007 119 ar7 = 0x07 0000 120 ar0 = 0x00 0001 121 ar1 = 0x01 0001 AA 82 122 mov r2,dpl 123 ; delay.c:40: do { 0003 124 00101$: 125 ; delay.c:41: udelay1 (); 0003 12s00r00 126 lcall _udelay1 127 ; delay.c:42: } while (--usecs != 0); 0006 DA FB 128 djnz r2,00101$ 0008 22 129 ret 130 ;------------------------------------------------------------ 131 ;Allocation info for local variables in function 'mdelay1' 132 ;------------------------------------------------------------ 133 ;------------------------------------------------------------ 134 ; delay.c:54: mdelay1 (void) _naked 135 ; ----------------------------------------- 136 ; function mdelay1 137 ; ----------------------------------------- 0009 138 _mdelay1: 139 ; naked function: no prologue. 140 ; delay.c:65: _endasm; 141 0009 90 FB 50 142 mov dptr,#(-1200 & 0xffff) 000C 143 002$: 000C A3 144 inc dptr ; 3 bus cycles 000D E5 82 145 mov a, dpl ; 2 bus cycles 000F 45 83 146 orl a, dph ; 2 bus cycles 0011 70 F9 147 jnz 002$ ; 3 bus cycles 148 0013 22 149 ret 150 151 ; naked function: no epilogue. 152 ;------------------------------------------------------------ 153 ;Allocation info for local variables in function 'mdelay' 154 ;------------------------------------------------------------ 155 ;msecs Allocated to registers r2 r3 156 ;------------------------------------------------------------ 157 ; delay.c:69: mdelay (unsigned int msecs) 158 ; ----------------------------------------- 159 ; function mdelay 160 ; ----------------------------------------- 0014 161 _mdelay: 0014 AA 82 162 mov r2,dpl 0016 AB 83 163 mov r3,dph 164 ; delay.c:71: do { 0018 165 00101$: 166 ; delay.c:72: mdelay1 (); 0018 12s00r09 167 lcall _mdelay1 168 ; delay.c:73: } while (--msecs != 0); 001B 1A 169 dec r2 001C BA FF 01 170 cjne r2,#0xff,00108$ 001F 1B 171 dec r3 0020 172 00108$: 0020 EA 173 mov a,r2 0021 4B 174 orl a,r3 0022 70 F4 175 jnz 00101$ 0024 22 176 ret 177 .area CSEG (CODE) 178 .area CONST (CODE) 179 .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/timer.rel0000644000175000017500000001567612576764164020151 0ustar carlescarlesXH H 17 areas 145 global symbols M timer O -mmcs51 --model-small S _EP8FIFOCFG DefE61B S _EPIRQ DefE65F S _USBERRIE DefE662 S _EP6CS DefE6A5 S _GPIFHOLDAMOUNT DefE60C S _SBUF1 Def00C1 S _EIEX6 Def00EC S _EP1INBC DefE68F S _EP8FIFOBCL DefE6B2 S _DBUG DefE6F8 S _B Def00F0 S _EXEN2 Def00CB S _EPIE DefE65E S _WAKEUPCS DefE682 S _EP1OUTBC DefE68D S _EP8CS DefE6A6 S _EP2GPIFTRIG DefE6D4 S _SP Def0081 S _SCON0 Def0098 S _AUTODAT1 Def009C S _EI2C Def00E9 S _INT2IVEC DefE666 S _AUTODAT2 Def009F S _SCON1 Def00C0 S _SMOD1 Def00DF S _MICROFRAME DefE686 S _SUDPTRCTL DefE6B5 S _EP4GPIFTRIG DefE6DC S _EP2468STAT Def00AA S _OV Def00D2 S _INT4IVEC DefE667 S _GPIFSGLDATLNOX Def00BF S _T2CON Def00C8 S _EP6GPIFTRIG DefE6E4 S _ACC Def00E0 S _EP2FIFOBUF DefF000 S _C_T2 Def00C9 S _BREAKPT DefE605 S _EP2FIFOPFH DefE630 S _EP8GPIFTRIG DefE6EC S _AUTOPTRH2 Def009D S _SETUPDAT DefE6B8 S _EP2GPIFFLGSEL DefE6D2 S _EP4FIFOBUF DefF400 S _EIPX4 Def00FA S _EP4FIFOPFH DefE632 S _EP2ISOINPKTS DefE640 S _GPIFREADYCFG DefE6F3 S _EIPX5 Def00FB S _EP4GPIFFLGSEL DefE6DA S _FLOWSTBHPERIOD DefE6CD S _EP6FIFOBUF DefF800 S _EXIF Def0091 S _RCLK Def00CD S _EIPX6 Def00FC S _EP2FIFOPFL DefE631 S _EP6FIFOPFH DefE634 S _EP4ISOINPKTS DefE641 S _DPH1 Def0085 S _AUTOPTRL2 Def009E S _EP6GPIFFLGSEL DefE6E2 S _EP8FIFOBUF DefFC00 S _TCLK Def00CC S _PI2C Def00F9 S _EP4FIFOPFL DefE633 S _EP8FIFOPFH DefE636 S _EP6ISOINPKTS DefE642 S _FNADDR DefE687 S _EP8GPIFFLGSEL DefE6EA S _TESTCFG DefE6F9 S _PCON Def0087 S _P Def00D0 S _GPIF_WAVE_DATA DefE400 S _EP6FIFOPFL DefE635 S _EP8ISOINPKTS DefE643 S _I2CS DefE678 S _DPL1 Def0084 S _GPIFIRQ DefE661 S _EP0BCH DefE68A S _EP01STAT Def00BA S _EP8FIFOPFL DefE637 S _EP1INCS DefE6A2 S _EIE Def00E8 S _RESI Def00DC S _GPIFIE DefE660 S _EP2BCH DefE690 S _EP1OUTCS DefE6A1 S _TCON Def0088 S _TMOD Def0089 S _OEA Def00B2 S _EXF2 Def00CE S _EP0BCL DefE68B S _EP4BCH DefE694 S _OEB Def00B3 S _REN1 Def00C4 S _EP2CFG DefE612 S _EP2FIFOIRQ DefE651 S _GPIFREADYSTAT DefE6F4 S _OEC Def00B4 S _EP2BCL DefE691 S _EP6BCH DefE698 S _OED Def00B5 S _hook_sv Ref0000 S _EP4CFG DefE613 S _EP2FIFOIE DefE650 S _EP4FIFOIRQ DefE653 S _IOA Def0080 S _OEE Def00B6 S _EP4BCL DefE695 S _EP8BCH DefE69C S _IOB Def0090 S _PUSB Def00F8 S _EP6CFG DefE614 S _EP4FIFOIE DefE652 S _EP6FIFOIRQ DefE655 S _IOC Def00A0 S _INTSETUP DefE668 S _EP6BCL DefE699 S _DPH Def0083 S _IOD Def00B0 S _EP8CFG DefE615 S _EP6FIFOIE DefE654 S _EP8FIFOIRQ DefE657 S _USBFRAMEH DefE684 S _IOE Def00B1 S _RB81 Def00C2 S _EP2AUTOINLENH DefE620 S _EP8BCL DefE69D S _GPIFABORT DefE6F5 S _INT2CLR Def00A1 S _EIP Def00F8 S _IE0 Def0089 S _EP8FIFOIE DefE656 S _IE1 Def008B S _TB81 Def00C3 S _EP4AUTOINLENH DefE622 S _DPL Def0082 S _INT4CLR Def00A2 S _AUTOPTRSETUP Def00AF S _RCAP2H Def00CB S _USBFRAMEL DefE685 S _XGPIFSGLDATLX DefE6F1 S _FLOWEQ0CTL DefE6C8 S _FLOWSTB DefE6CB S _SM01 Def00C7 S _INT6 Def00DB S _EP2AUTOINLENL DefE621 S _EP6AUTOINLENH DefE624 S _SUSPEND DefE681 S _FLOWEQ1CTL DefE6C9 S _EP0BUF DefE740 S _SM11 Def00C6 S _CP_RL2 Def00C8 S _GPIFWFSELECT DefE6C0 S _SM21 Def00C5 S _EP4AUTOINLENL DefE623 S _EP8AUTOINLENH DefE626 S _RCAP2L Def00CA S _SEL Def0086 S _AC Def00D6 S _IFCONFIG DefE601 S _IBNIRQ DefE659 S _GPIFADRH DefE6C4 S _XGPIFSGLDATH DefE6F0 S _REN Def009C S _EP6AUTOINLENL DefE625 S _NAKIRQ DefE65B S _FLOWLOGIC DefE6C7 S _EA Def00AF S _FIFORESET DefE604 S _IBNIE DefE658 S _GPIFIDLECTL DefE6C2 S _UDMACRCH DefE67D S _DPS Def0086 S _EP8AUTOINLENL DefE627 S _NAKIE DefE65A S _CT1 DefE6FB S _ES0 Def00AC S _FIFOPINPOLAR DefE609 S _GPIFADRL DefE6C5 S _EP2GPIFPFSTOP DefE6D3 S _CT2 DefE6FC S _GPIFSGLDATLX Def00BE S _ET0 Def00A9 S _ES1 Def00AE S _SUDPTRH DefE6B3 S _USBTEST DefE6FA S _CT3 DefE6FD S _MPAGE Def0092 S _TF0 Def008D S _ET1 Def00AB S _EP4GPIFPFSTOP DefE6DB S _UDMACRCL DefE67E S _CT4 DefE6FE S _EP24FIFOFLGS Def00AB S _TF1 Def008F S _ET2 Def00AD S _RES_WAVEDATA_END DefE480 S _TH0 Def008C S _RB8 Def009A S _RI1 Def00C0 S _TF2 Def00CF S _EP1INCFG DefE611 S _TOGCTL DefE683 S _EP6GPIFPFSTOP DefE6E3 S _TH1 Def008D S _GPIFSGLDATH Def00BD S _IT0 Def0088 S _EX0 Def00A8 S _EP1OUTCFG DefE610 S _SUDPTRL DefE6B4 S _CKCON Def008E S _IE Def00A8 S _TH2 Def00CD S _EICON Def00D8 S _IT1 Def008A S _TB8 Def009B S _EX1 Def00AA S _TI1 Def00C1 S _CLRERRCNT DefE665 S _GPIFTCB0 DefE6D1 S _EP8GPIFPFSTOP DefE6EB S _REVCTL DefE60B S _ERRCNTLIM DefE664 S _GPIFTCB1 DefE6D0 S _TL0 Def008A S _APTR1H Def009A S _SM0 Def009F S _UART230 DefE608 S _GPIFTCB2 DefE6CF S _TL1 Def008B S _A0 Def0080 S _SM1 Def009E S _GPIFTCB3 DefE6CE S _UDMACRCQUAL DefE67F S _TL2 Def00CC S _A1 Def0081 S _SM2 Def009D S _FL Def00D1 S _EP68FIFOFLGS Def00AC S _A2 Def0082 S _PS0 Def00BC S _I2DAT DefE679 S _APTR1L Def009B S _A3 Def0083 S _D0 Def00B0 S _PT0 Def00B9 S _PS1 Def00BE S _BPADDRH DefE606 S _A4 Def0084 S _D1 Def00B1 S _PT1 Def00BB S _RS0 Def00D3 S _USBIRQ DefE65D S _PORTACFG DefE670 S _FLOWSTBEDGE DefE6CC S _A5 Def0085 S _TR0 Def008C S _D2 Def00B2 S _PT2 Def00BD S _RS1 Def00D4 S _F0 Def00D5 S _PINFLAGSAB DefE602 S _EP2FIFOFLGS DefE6A7 S _A6 Def0086 S _TR1 Def008E S _D3 Def00B3 S _USBIE DefE65C S _PORTCCFG DefE671 S _EP2FIFOBCH DefE6AB S _A7 Def0087 S _D4 Def00B4 S _PX0 Def00B8 S _TR2 Def00CA S _ERESI Def00DD S _EIUSB Def00E8 S _hook_sv_PARM_2 Ref0000 S _BPADDRL DefE607 S _EP4FIFOFLGS DefE6A8 S _GPIFCTLCFG DefE6C3 S _FLOWSTATE DefE6C6 S _IP Def00B8 S _D5 Def00B5 S _PX1 Def00BA S _REVID DefE60A S _PORTECFG DefE672 S _EP4FIFOBCH DefE6AD S _GPIFIDLECS DefE6C1 S _FLOWHOLDOFF DefE6CA S _EP1INBUF DefE7C0 S _PSW Def00D0 S _D6 Def00B6 S _PINFLAGSCD DefE603 S _EP2FIFOCFG DefE618 S _XAUTODAT1 DefE67B S _EP0CS DefE6A0 S _EP6FIFOFLGS DefE6A9 S _EP1OUTBUF DefE780 S _RI Def0098 S _D7 Def00B7 S _XAUTODAT2 DefE67C S _EP2FIFOBCL DefE6AC S _EP6FIFOBCH DefE6AF S _GPIFTRIG Def00BB S _CY Def00D7 S _EP4FIFOCFG DefE619 S _INPKTEND DefE648 S _EP2CS DefE6A3 S _EP8FIFOFLGS DefE6AA S _TI Def0099 S _CPUCS DefE600 S _OUTPKTEND DefE649 S _I2CTL DefE67A S _EP4FIFOBCL DefE6AE S _EP8FIFOBCH DefE6B1 S _XGPIFSGLDATLNOX DefE6F2 S _EP6FIFOCFG DefE61A S _USBERRIRQ DefE663 S _EP4CS DefE6A4 S _EIEX4 Def00EA S _USBCS DefE680 S _EP6FIFOBCL DefE6B0 S _SBUF0 Def0099 S _EIEX5 Def00EB A _CODE size 0 flags 0 addr 0 A RSEG size 0 flags 0 addr 0 A REG_BANK_0 size 8 flags 4 addr 0 A DSEG size 0 flags 0 addr 0 A OSEG size 0 flags 4 addr 0 A ISEG size 0 flags 0 addr 0 A IABS size 0 flags 8 addr 0 A BSEG size 0 flags 80 addr 0 A PSEG size 0 flags 50 addr 0 A XSEG size 0 flags 40 addr 0 A XABS size 0 flags 48 addr 0 A HOME size 0 flags 20 addr 0 A GSINIT0 size 0 flags 20 addr 0 A GSINIT1 size 0 flags 20 addr 0 A GSINIT2 size 0 flags 20 addr 0 A GSINIT3 size 0 flags 20 addr 0 A GSINIT4 size 0 flags 20 addr 0 A GSINIT5 size 0 flags 20 addr 0 A GSINIT size 0 flags 20 addr 0 A GSFINAL size 0 flags 20 addr 0 A CSEG size 1C flags 20 addr 0 S _hook_timer_tick Def0000 A CONST size 0 flags 20 addr 0 A CABS size 0 flags 28 addr 0 T 00 00 R 00 00 00 02 T 00 00 R 00 00 00 14 T 00 00 AA 82 AB 83 C2 AD 8A 00 00 00 8B 00 00 01 R 00 00 00 14 F1 23 09 01 14 F1 23 0D 01 14 T 00 0A 75 82 2B 12 00 00 75 CB 63 75 CA C0 75 C8 R 00 00 00 14 02 06 00 66 T 00 18 04 D2 AD 22 R 00 00 00 14 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/fx2utils.asm0000644000175000017500000004077212576764164020602 0ustar carlescarles;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) ; This file was generated Mon Jul 30 11:40:52 2012 ;-------------------------------------------------------- .module fx2utils .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _EIPX6 .globl _EIPX5 .globl _EIPX4 .globl _PI2C .globl _PUSB .globl _EIEX6 .globl _EIEX5 .globl _EIEX4 .globl _EI2C .globl _EIUSB .globl _SMOD1 .globl _ERESI .globl _RESI .globl _INT6 .globl _CY .globl _AC .globl _F0 .globl _RS1 .globl _RS0 .globl _OV .globl _FL .globl _P .globl _TF2 .globl _EXF2 .globl _RCLK .globl _TCLK .globl _EXEN2 .globl _TR2 .globl _C_T2 .globl _CP_RL2 .globl _SM01 .globl _SM11 .globl _SM21 .globl _REN1 .globl _TB81 .globl _RB81 .globl _TI1 .globl _RI1 .globl _PS1 .globl _PT2 .globl _PS0 .globl _PT1 .globl _PX1 .globl _PT0 .globl _PX0 .globl _D7 .globl _D6 .globl _D5 .globl _D4 .globl _D3 .globl _D2 .globl _D1 .globl _D0 .globl _EA .globl _ES1 .globl _ET2 .globl _ES0 .globl _ET1 .globl _EX1 .globl _ET0 .globl _EX0 .globl _SM0 .globl _SM1 .globl _SM2 .globl _REN .globl _TB8 .globl _RB8 .globl _TI .globl _RI .globl _TF1 .globl _TR1 .globl _TF0 .globl _TR0 .globl _IE1 .globl _IT1 .globl _IE0 .globl _IT0 .globl _SEL .globl _A7 .globl _A6 .globl _A5 .globl _A4 .globl _A3 .globl _A2 .globl _A1 .globl _A0 .globl _EIP .globl _B .globl _EIE .globl _ACC .globl _EICON .globl _PSW .globl _TH2 .globl _TL2 .globl _RCAP2H .globl _RCAP2L .globl _T2CON .globl _SBUF1 .globl _SCON1 .globl _GPIFSGLDATLNOX .globl _GPIFSGLDATLX .globl _GPIFSGLDATH .globl _GPIFTRIG .globl _EP01STAT .globl _IP .globl _OEE .globl _OED .globl _OEC .globl _OEB .globl _OEA .globl _IOE .globl _IOD .globl _AUTOPTRSETUP .globl _EP68FIFOFLGS .globl _EP24FIFOFLGS .globl _EP2468STAT .globl _IE .globl _INT4CLR .globl _INT2CLR .globl _IOC .globl _AUTODAT2 .globl _AUTOPTRL2 .globl _AUTOPTRH2 .globl _AUTODAT1 .globl _APTR1L .globl _APTR1H .globl _SBUF0 .globl _SCON0 .globl _MPAGE .globl _EXIF .globl _IOB .globl _CKCON .globl _TH1 .globl _TH0 .globl _TL1 .globl _TL0 .globl _TMOD .globl _TCON .globl _PCON .globl _DPS .globl _DPH1 .globl _DPL1 .globl _DPH .globl _DPL .globl _SP .globl _IOA .globl _EP8FIFOBUF .globl _EP6FIFOBUF .globl _EP4FIFOBUF .globl _EP2FIFOBUF .globl _EP1INBUF .globl _EP1OUTBUF .globl _EP0BUF .globl _CT4 .globl _CT3 .globl _CT2 .globl _CT1 .globl _USBTEST .globl _TESTCFG .globl _DBUG .globl _UDMACRCQUAL .globl _UDMACRCL .globl _UDMACRCH .globl _GPIFHOLDAMOUNT .globl _FLOWSTBHPERIOD .globl _FLOWSTBEDGE .globl _FLOWSTB .globl _FLOWHOLDOFF .globl _FLOWEQ1CTL .globl _FLOWEQ0CTL .globl _FLOWLOGIC .globl _FLOWSTATE .globl _GPIFABORT .globl _GPIFREADYSTAT .globl _GPIFREADYCFG .globl _XGPIFSGLDATLNOX .globl _XGPIFSGLDATLX .globl _XGPIFSGLDATH .globl _EP8GPIFTRIG .globl _EP8GPIFPFSTOP .globl _EP8GPIFFLGSEL .globl _EP6GPIFTRIG .globl _EP6GPIFPFSTOP .globl _EP6GPIFFLGSEL .globl _EP4GPIFTRIG .globl _EP4GPIFPFSTOP .globl _EP4GPIFFLGSEL .globl _EP2GPIFTRIG .globl _EP2GPIFPFSTOP .globl _EP2GPIFFLGSEL .globl _GPIFTCB0 .globl _GPIFTCB1 .globl _GPIFTCB2 .globl _GPIFTCB3 .globl _GPIFADRL .globl _GPIFADRH .globl _GPIFCTLCFG .globl _GPIFIDLECTL .globl _GPIFIDLECS .globl _GPIFWFSELECT .globl _SETUPDAT .globl _SUDPTRCTL .globl _SUDPTRL .globl _SUDPTRH .globl _EP8FIFOBCL .globl _EP8FIFOBCH .globl _EP6FIFOBCL .globl _EP6FIFOBCH .globl _EP4FIFOBCL .globl _EP4FIFOBCH .globl _EP2FIFOBCL .globl _EP2FIFOBCH .globl _EP8FIFOFLGS .globl _EP6FIFOFLGS .globl _EP4FIFOFLGS .globl _EP2FIFOFLGS .globl _EP8CS .globl _EP6CS .globl _EP4CS .globl _EP2CS .globl _EP1INCS .globl _EP1OUTCS .globl _EP0CS .globl _EP8BCL .globl _EP8BCH .globl _EP6BCL .globl _EP6BCH .globl _EP4BCL .globl _EP4BCH .globl _EP2BCL .globl _EP2BCH .globl _EP1INBC .globl _EP1OUTBC .globl _EP0BCL .globl _EP0BCH .globl _FNADDR .globl _MICROFRAME .globl _USBFRAMEL .globl _USBFRAMEH .globl _TOGCTL .globl _WAKEUPCS .globl _SUSPEND .globl _USBCS .globl _XAUTODAT2 .globl _XAUTODAT1 .globl _I2CTL .globl _I2DAT .globl _I2CS .globl _PORTECFG .globl _PORTCCFG .globl _PORTACFG .globl _INTSETUP .globl _INT4IVEC .globl _INT2IVEC .globl _CLRERRCNT .globl _ERRCNTLIM .globl _USBERRIRQ .globl _USBERRIE .globl _GPIFIRQ .globl _GPIFIE .globl _EPIRQ .globl _EPIE .globl _USBIRQ .globl _USBIE .globl _NAKIRQ .globl _NAKIE .globl _IBNIRQ .globl _IBNIE .globl _EP8FIFOIRQ .globl _EP8FIFOIE .globl _EP6FIFOIRQ .globl _EP6FIFOIE .globl _EP4FIFOIRQ .globl _EP4FIFOIE .globl _EP2FIFOIRQ .globl _EP2FIFOIE .globl _OUTPKTEND .globl _INPKTEND .globl _EP8ISOINPKTS .globl _EP6ISOINPKTS .globl _EP4ISOINPKTS .globl _EP2ISOINPKTS .globl _EP8FIFOPFL .globl _EP8FIFOPFH .globl _EP6FIFOPFL .globl _EP6FIFOPFH .globl _EP4FIFOPFL .globl _EP4FIFOPFH .globl _EP2FIFOPFL .globl _EP2FIFOPFH .globl _EP8AUTOINLENL .globl _EP8AUTOINLENH .globl _EP6AUTOINLENL .globl _EP6AUTOINLENH .globl _EP4AUTOINLENL .globl _EP4AUTOINLENH .globl _EP2AUTOINLENL .globl _EP2AUTOINLENH .globl _EP8FIFOCFG .globl _EP6FIFOCFG .globl _EP4FIFOCFG .globl _EP2FIFOCFG .globl _EP8CFG .globl _EP6CFG .globl _EP4CFG .globl _EP2CFG .globl _EP1INCFG .globl _EP1OUTCFG .globl _REVCTL .globl _REVID .globl _FIFOPINPOLAR .globl _UART230 .globl _BPADDRL .globl _BPADDRH .globl _BREAKPT .globl _FIFORESET .globl _PINFLAGSCD .globl _PINFLAGSAB .globl _IFCONFIG .globl _CPUCS .globl _RES_WAVEDATA_END .globl _GPIF_WAVE_DATA .globl _fx2_stall_ep0 .globl _fx2_reset_data_toggle .globl _fx2_renumerate ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (DATA) _IOA = 0x0080 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _DPL1 = 0x0084 _DPH1 = 0x0085 _DPS = 0x0086 _PCON = 0x0087 _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _CKCON = 0x008e _IOB = 0x0090 _EXIF = 0x0091 _MPAGE = 0x0092 _SCON0 = 0x0098 _SBUF0 = 0x0099 _APTR1H = 0x009a _APTR1L = 0x009b _AUTODAT1 = 0x009c _AUTOPTRH2 = 0x009d _AUTOPTRL2 = 0x009e _AUTODAT2 = 0x009f _IOC = 0x00a0 _INT2CLR = 0x00a1 _INT4CLR = 0x00a2 _IE = 0x00a8 _EP2468STAT = 0x00aa _EP24FIFOFLGS = 0x00ab _EP68FIFOFLGS = 0x00ac _AUTOPTRSETUP = 0x00af _IOD = 0x00b0 _IOE = 0x00b1 _OEA = 0x00b2 _OEB = 0x00b3 _OEC = 0x00b4 _OED = 0x00b5 _OEE = 0x00b6 _IP = 0x00b8 _EP01STAT = 0x00ba _GPIFTRIG = 0x00bb _GPIFSGLDATH = 0x00bd _GPIFSGLDATLX = 0x00be _GPIFSGLDATLNOX = 0x00bf _SCON1 = 0x00c0 _SBUF1 = 0x00c1 _T2CON = 0x00c8 _RCAP2L = 0x00ca _RCAP2H = 0x00cb _TL2 = 0x00cc _TH2 = 0x00cd _PSW = 0x00d0 _EICON = 0x00d8 _ACC = 0x00e0 _EIE = 0x00e8 _B = 0x00f0 _EIP = 0x00f8 ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (DATA) _A0 = 0x0080 _A1 = 0x0081 _A2 = 0x0082 _A3 = 0x0083 _A4 = 0x0084 _A5 = 0x0085 _A6 = 0x0086 _A7 = 0x0087 _SEL = 0x0086 _IT0 = 0x0088 _IE0 = 0x0089 _IT1 = 0x008a _IE1 = 0x008b _TR0 = 0x008c _TF0 = 0x008d _TR1 = 0x008e _TF1 = 0x008f _RI = 0x0098 _TI = 0x0099 _RB8 = 0x009a _TB8 = 0x009b _REN = 0x009c _SM2 = 0x009d _SM1 = 0x009e _SM0 = 0x009f _EX0 = 0x00a8 _ET0 = 0x00a9 _EX1 = 0x00aa _ET1 = 0x00ab _ES0 = 0x00ac _ET2 = 0x00ad _ES1 = 0x00ae _EA = 0x00af _D0 = 0x00b0 _D1 = 0x00b1 _D2 = 0x00b2 _D3 = 0x00b3 _D4 = 0x00b4 _D5 = 0x00b5 _D6 = 0x00b6 _D7 = 0x00b7 _PX0 = 0x00b8 _PT0 = 0x00b9 _PX1 = 0x00ba _PT1 = 0x00bb _PS0 = 0x00bc _PT2 = 0x00bd _PS1 = 0x00be _RI1 = 0x00c0 _TI1 = 0x00c1 _RB81 = 0x00c2 _TB81 = 0x00c3 _REN1 = 0x00c4 _SM21 = 0x00c5 _SM11 = 0x00c6 _SM01 = 0x00c7 _CP_RL2 = 0x00c8 _C_T2 = 0x00c9 _TR2 = 0x00ca _EXEN2 = 0x00cb _TCLK = 0x00cc _RCLK = 0x00cd _EXF2 = 0x00ce _TF2 = 0x00cf _P = 0x00d0 _FL = 0x00d1 _OV = 0x00d2 _RS0 = 0x00d3 _RS1 = 0x00d4 _F0 = 0x00d5 _AC = 0x00d6 _CY = 0x00d7 _INT6 = 0x00db _RESI = 0x00dc _ERESI = 0x00dd _SMOD1 = 0x00df _EIUSB = 0x00e8 _EI2C = 0x00e9 _EIEX4 = 0x00ea _EIEX5 = 0x00eb _EIEX6 = 0x00ec _PUSB = 0x00f8 _PI2C = 0x00f9 _EIPX4 = 0x00fa _EIPX5 = 0x00fb _EIPX6 = 0x00fc ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) _GPIF_WAVE_DATA = 0xe400 _RES_WAVEDATA_END = 0xe480 _CPUCS = 0xe600 _IFCONFIG = 0xe601 _PINFLAGSAB = 0xe602 _PINFLAGSCD = 0xe603 _FIFORESET = 0xe604 _BREAKPT = 0xe605 _BPADDRH = 0xe606 _BPADDRL = 0xe607 _UART230 = 0xe608 _FIFOPINPOLAR = 0xe609 _REVID = 0xe60a _REVCTL = 0xe60b _EP1OUTCFG = 0xe610 _EP1INCFG = 0xe611 _EP2CFG = 0xe612 _EP4CFG = 0xe613 _EP6CFG = 0xe614 _EP8CFG = 0xe615 _EP2FIFOCFG = 0xe618 _EP4FIFOCFG = 0xe619 _EP6FIFOCFG = 0xe61a _EP8FIFOCFG = 0xe61b _EP2AUTOINLENH = 0xe620 _EP2AUTOINLENL = 0xe621 _EP4AUTOINLENH = 0xe622 _EP4AUTOINLENL = 0xe623 _EP6AUTOINLENH = 0xe624 _EP6AUTOINLENL = 0xe625 _EP8AUTOINLENH = 0xe626 _EP8AUTOINLENL = 0xe627 _EP2FIFOPFH = 0xe630 _EP2FIFOPFL = 0xe631 _EP4FIFOPFH = 0xe632 _EP4FIFOPFL = 0xe633 _EP6FIFOPFH = 0xe634 _EP6FIFOPFL = 0xe635 _EP8FIFOPFH = 0xe636 _EP8FIFOPFL = 0xe637 _EP2ISOINPKTS = 0xe640 _EP4ISOINPKTS = 0xe641 _EP6ISOINPKTS = 0xe642 _EP8ISOINPKTS = 0xe643 _INPKTEND = 0xe648 _OUTPKTEND = 0xe649 _EP2FIFOIE = 0xe650 _EP2FIFOIRQ = 0xe651 _EP4FIFOIE = 0xe652 _EP4FIFOIRQ = 0xe653 _EP6FIFOIE = 0xe654 _EP6FIFOIRQ = 0xe655 _EP8FIFOIE = 0xe656 _EP8FIFOIRQ = 0xe657 _IBNIE = 0xe658 _IBNIRQ = 0xe659 _NAKIE = 0xe65a _NAKIRQ = 0xe65b _USBIE = 0xe65c _USBIRQ = 0xe65d _EPIE = 0xe65e _EPIRQ = 0xe65f _GPIFIE = 0xe660 _GPIFIRQ = 0xe661 _USBERRIE = 0xe662 _USBERRIRQ = 0xe663 _ERRCNTLIM = 0xe664 _CLRERRCNT = 0xe665 _INT2IVEC = 0xe666 _INT4IVEC = 0xe667 _INTSETUP = 0xe668 _PORTACFG = 0xe670 _PORTCCFG = 0xe671 _PORTECFG = 0xe672 _I2CS = 0xe678 _I2DAT = 0xe679 _I2CTL = 0xe67a _XAUTODAT1 = 0xe67b _XAUTODAT2 = 0xe67c _USBCS = 0xe680 _SUSPEND = 0xe681 _WAKEUPCS = 0xe682 _TOGCTL = 0xe683 _USBFRAMEH = 0xe684 _USBFRAMEL = 0xe685 _MICROFRAME = 0xe686 _FNADDR = 0xe687 _EP0BCH = 0xe68a _EP0BCL = 0xe68b _EP1OUTBC = 0xe68d _EP1INBC = 0xe68f _EP2BCH = 0xe690 _EP2BCL = 0xe691 _EP4BCH = 0xe694 _EP4BCL = 0xe695 _EP6BCH = 0xe698 _EP6BCL = 0xe699 _EP8BCH = 0xe69c _EP8BCL = 0xe69d _EP0CS = 0xe6a0 _EP1OUTCS = 0xe6a1 _EP1INCS = 0xe6a2 _EP2CS = 0xe6a3 _EP4CS = 0xe6a4 _EP6CS = 0xe6a5 _EP8CS = 0xe6a6 _EP2FIFOFLGS = 0xe6a7 _EP4FIFOFLGS = 0xe6a8 _EP6FIFOFLGS = 0xe6a9 _EP8FIFOFLGS = 0xe6aa _EP2FIFOBCH = 0xe6ab _EP2FIFOBCL = 0xe6ac _EP4FIFOBCH = 0xe6ad _EP4FIFOBCL = 0xe6ae _EP6FIFOBCH = 0xe6af _EP6FIFOBCL = 0xe6b0 _EP8FIFOBCH = 0xe6b1 _EP8FIFOBCL = 0xe6b2 _SUDPTRH = 0xe6b3 _SUDPTRL = 0xe6b4 _SUDPTRCTL = 0xe6b5 _SETUPDAT = 0xe6b8 _GPIFWFSELECT = 0xe6c0 _GPIFIDLECS = 0xe6c1 _GPIFIDLECTL = 0xe6c2 _GPIFCTLCFG = 0xe6c3 _GPIFADRH = 0xe6c4 _GPIFADRL = 0xe6c5 _GPIFTCB3 = 0xe6ce _GPIFTCB2 = 0xe6cf _GPIFTCB1 = 0xe6d0 _GPIFTCB0 = 0xe6d1 _EP2GPIFFLGSEL = 0xe6d2 _EP2GPIFPFSTOP = 0xe6d3 _EP2GPIFTRIG = 0xe6d4 _EP4GPIFFLGSEL = 0xe6da _EP4GPIFPFSTOP = 0xe6db _EP4GPIFTRIG = 0xe6dc _EP6GPIFFLGSEL = 0xe6e2 _EP6GPIFPFSTOP = 0xe6e3 _EP6GPIFTRIG = 0xe6e4 _EP8GPIFFLGSEL = 0xe6ea _EP8GPIFPFSTOP = 0xe6eb _EP8GPIFTRIG = 0xe6ec _XGPIFSGLDATH = 0xe6f0 _XGPIFSGLDATLX = 0xe6f1 _XGPIFSGLDATLNOX = 0xe6f2 _GPIFREADYCFG = 0xe6f3 _GPIFREADYSTAT = 0xe6f4 _GPIFABORT = 0xe6f5 _FLOWSTATE = 0xe6c6 _FLOWLOGIC = 0xe6c7 _FLOWEQ0CTL = 0xe6c8 _FLOWEQ1CTL = 0xe6c9 _FLOWHOLDOFF = 0xe6ca _FLOWSTB = 0xe6cb _FLOWSTBEDGE = 0xe6cc _FLOWSTBHPERIOD = 0xe6cd _GPIFHOLDAMOUNT = 0xe60c _UDMACRCH = 0xe67d _UDMACRCL = 0xe67e _UDMACRCQUAL = 0xe67f _DBUG = 0xe6f8 _TESTCFG = 0xe6f9 _USBTEST = 0xe6fa _CT1 = 0xe6fb _CT2 = 0xe6fc _CT3 = 0xe6fd _CT4 = 0xe6fe _EP0BUF = 0xe740 _EP1OUTBUF = 0xe780 _EP1INBUF = 0xe7c0 _EP2FIFOBUF = 0xf000 _EP4FIFOBUF = 0xf400 _EP6FIFOBUF = 0xf800 _EP8FIFOBUF = 0xfc00 ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'fx2_stall_ep0' ;------------------------------------------------------------ ;------------------------------------------------------------ ; fx2utils.c:28: fx2_stall_ep0 (void) ; ----------------------------------------- ; function fx2_stall_ep0 ; ----------------------------------------- _fx2_stall_ep0: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ; fx2utils.c:30: EP0CS |= bmEPSTALL; mov dptr,#_EP0CS movx a,@dptr orl a,#0x01 movx @dptr,a ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'fx2_reset_data_toggle' ;------------------------------------------------------------ ;ep Allocated to registers r2 ;------------------------------------------------------------ ; fx2utils.c:34: fx2_reset_data_toggle (unsigned char ep) ; ----------------------------------------- ; function fx2_reset_data_toggle ; ----------------------------------------- _fx2_reset_data_toggle: mov r2,dpl ; fx2utils.c:36: TOGCTL = ((ep & 0x80) >> 3 | (ep & 0x0f)); mov a,#0x80 anl a,r2 swap a rl a anl a,#0x1f mov r3,a mov a,#0x0F anl a,r2 mov dptr,#_TOGCTL orl a,r3 movx @dptr,a ; fx2utils.c:37: TOGCTL |= bmRESETTOGGLE; mov dptr,#_TOGCTL movx a,@dptr orl a,#0x20 movx @dptr,a ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'fx2_renumerate' ;------------------------------------------------------------ ;------------------------------------------------------------ ; fx2utils.c:41: fx2_renumerate (void) ; ----------------------------------------- ; function fx2_renumerate ; ----------------------------------------- _fx2_renumerate: ; fx2utils.c:43: USBCS |= bmDISCON | bmRENUM; mov dptr,#_USBCS movx a,@dptr orl a,#0x0A movx @dptr,a ; fx2utils.c:45: mdelay (250); mov dptr,#0x00FA lcall _mdelay ; fx2utils.c:47: USBIRQ = 0xff; // clear any pending USB irqs... mov dptr,#_USBIRQ mov a,#0xFF movx @dptr,a ; fx2utils.c:48: EPIRQ = 0xff; // they're from before the renumeration mov dptr,#_EPIRQ mov a,#0xFF movx @dptr,a ; fx2utils.c:50: EXIF &= ~bmEXIF_USBINT; anl _EXIF,#0xEF ; fx2utils.c:52: USBCS &= ~bmDISCON; // reconnect USB mov dptr,#_USBCS movx a,@dptr anl a,#0xF7 movx @dptr,a ret .area CSEG (CODE) .area CONST (CODE) .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/isr.lst0000644000175000017500000016455712576764164017651 0ustar carlescarles 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) 4 ; This file was generated Mon Jul 30 11:40:53 2012 5 ;-------------------------------------------------------- 6 .module isr 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _hook_fgv_PARM_2 13 .globl _hook_uv_PARM_2 14 .globl _hook_sv_PARM_2 15 .globl _EIPX6 16 .globl _EIPX5 17 .globl _EIPX4 18 .globl _PI2C 19 .globl _PUSB 20 .globl _EIEX6 21 .globl _EIEX5 22 .globl _EIEX4 23 .globl _EI2C 24 .globl _EIUSB 25 .globl _SMOD1 26 .globl _ERESI 27 .globl _RESI 28 .globl _INT6 29 .globl _CY 30 .globl _AC 31 .globl _F0 32 .globl _RS1 33 .globl _RS0 34 .globl _OV 35 .globl _FL 36 .globl _P 37 .globl _TF2 38 .globl _EXF2 39 .globl _RCLK 40 .globl _TCLK 41 .globl _EXEN2 42 .globl _TR2 43 .globl _C_T2 44 .globl _CP_RL2 45 .globl _SM01 46 .globl _SM11 47 .globl _SM21 48 .globl _REN1 49 .globl _TB81 50 .globl _RB81 51 .globl _TI1 52 .globl _RI1 53 .globl _PS1 54 .globl _PT2 55 .globl _PS0 56 .globl _PT1 57 .globl _PX1 58 .globl _PT0 59 .globl _PX0 60 .globl _D7 61 .globl _D6 62 .globl _D5 63 .globl _D4 64 .globl _D3 65 .globl _D2 66 .globl _D1 67 .globl _D0 68 .globl _EA 69 .globl _ES1 70 .globl _ET2 71 .globl _ES0 72 .globl _ET1 73 .globl _EX1 74 .globl _ET0 75 .globl _EX0 76 .globl _SM0 77 .globl _SM1 78 .globl _SM2 79 .globl _REN 80 .globl _TB8 81 .globl _RB8 82 .globl _TI 83 .globl _RI 84 .globl _TF1 85 .globl _TR1 86 .globl _TF0 87 .globl _TR0 88 .globl _IE1 89 .globl _IT1 90 .globl _IE0 91 .globl _IT0 92 .globl _SEL 93 .globl _A7 94 .globl _A6 95 .globl _A5 96 .globl _A4 97 .globl _A3 98 .globl _A2 99 .globl _A1 100 .globl _A0 101 .globl _EIP 102 .globl _B 103 .globl _EIE 104 .globl _ACC 105 .globl _EICON 106 .globl _PSW 107 .globl _TH2 108 .globl _TL2 109 .globl _RCAP2H 110 .globl _RCAP2L 111 .globl _T2CON 112 .globl _SBUF1 113 .globl _SCON1 114 .globl _GPIFSGLDATLNOX 115 .globl _GPIFSGLDATLX 116 .globl _GPIFSGLDATH 117 .globl _GPIFTRIG 118 .globl _EP01STAT 119 .globl _IP 120 .globl _OEE 121 .globl _OED 122 .globl _OEC 123 .globl _OEB 124 .globl _OEA 125 .globl _IOE 126 .globl _IOD 127 .globl _AUTOPTRSETUP 128 .globl _EP68FIFOFLGS 129 .globl _EP24FIFOFLGS 130 .globl _EP2468STAT 131 .globl _IE 132 .globl _INT4CLR 133 .globl _INT2CLR 134 .globl _IOC 135 .globl _AUTODAT2 136 .globl _AUTOPTRL2 137 .globl _AUTOPTRH2 138 .globl _AUTODAT1 139 .globl _APTR1L 140 .globl _APTR1H 141 .globl _SBUF0 142 .globl _SCON0 143 .globl _MPAGE 144 .globl _EXIF 145 .globl _IOB 146 .globl _CKCON 147 .globl _TH1 148 .globl _TH0 149 .globl _TL1 150 .globl _TL0 151 .globl _TMOD 152 .globl _TCON 153 .globl _PCON 154 .globl _DPS 155 .globl _DPH1 156 .globl _DPL1 157 .globl _DPH 158 .globl _DPL 159 .globl _SP 160 .globl _IOA 161 .globl _EP8FIFOBUF 162 .globl _EP6FIFOBUF 163 .globl _EP4FIFOBUF 164 .globl _EP2FIFOBUF 165 .globl _EP1INBUF 166 .globl _EP1OUTBUF 167 .globl _EP0BUF 168 .globl _CT4 169 .globl _CT3 170 .globl _CT2 171 .globl _CT1 172 .globl _USBTEST 173 .globl _TESTCFG 174 .globl _DBUG 175 .globl _UDMACRCQUAL 176 .globl _UDMACRCL 177 .globl _UDMACRCH 178 .globl _GPIFHOLDAMOUNT 179 .globl _FLOWSTBHPERIOD 180 .globl _FLOWSTBEDGE 181 .globl _FLOWSTB 182 .globl _FLOWHOLDOFF 183 .globl _FLOWEQ1CTL 184 .globl _FLOWEQ0CTL 185 .globl _FLOWLOGIC 186 .globl _FLOWSTATE 187 .globl _GPIFABORT 188 .globl _GPIFREADYSTAT 189 .globl _GPIFREADYCFG 190 .globl _XGPIFSGLDATLNOX 191 .globl _XGPIFSGLDATLX 192 .globl _XGPIFSGLDATH 193 .globl _EP8GPIFTRIG 194 .globl _EP8GPIFPFSTOP 195 .globl _EP8GPIFFLGSEL 196 .globl _EP6GPIFTRIG 197 .globl _EP6GPIFPFSTOP 198 .globl _EP6GPIFFLGSEL 199 .globl _EP4GPIFTRIG 200 .globl _EP4GPIFPFSTOP 201 .globl _EP4GPIFFLGSEL 202 .globl _EP2GPIFTRIG 203 .globl _EP2GPIFPFSTOP 204 .globl _EP2GPIFFLGSEL 205 .globl _GPIFTCB0 206 .globl _GPIFTCB1 207 .globl _GPIFTCB2 208 .globl _GPIFTCB3 209 .globl _GPIFADRL 210 .globl _GPIFADRH 211 .globl _GPIFCTLCFG 212 .globl _GPIFIDLECTL 213 .globl _GPIFIDLECS 214 .globl _GPIFWFSELECT 215 .globl _SETUPDAT 216 .globl _SUDPTRCTL 217 .globl _SUDPTRL 218 .globl _SUDPTRH 219 .globl _EP8FIFOBCL 220 .globl _EP8FIFOBCH 221 .globl _EP6FIFOBCL 222 .globl _EP6FIFOBCH 223 .globl _EP4FIFOBCL 224 .globl _EP4FIFOBCH 225 .globl _EP2FIFOBCL 226 .globl _EP2FIFOBCH 227 .globl _EP8FIFOFLGS 228 .globl _EP6FIFOFLGS 229 .globl _EP4FIFOFLGS 230 .globl _EP2FIFOFLGS 231 .globl _EP8CS 232 .globl _EP6CS 233 .globl _EP4CS 234 .globl _EP2CS 235 .globl _EP1INCS 236 .globl _EP1OUTCS 237 .globl _EP0CS 238 .globl _EP8BCL 239 .globl _EP8BCH 240 .globl _EP6BCL 241 .globl _EP6BCH 242 .globl _EP4BCL 243 .globl _EP4BCH 244 .globl _EP2BCL 245 .globl _EP2BCH 246 .globl _EP1INBC 247 .globl _EP1OUTBC 248 .globl _EP0BCL 249 .globl _EP0BCH 250 .globl _FNADDR 251 .globl _MICROFRAME 252 .globl _USBFRAMEL 253 .globl _USBFRAMEH 254 .globl _TOGCTL 255 .globl _WAKEUPCS 256 .globl _SUSPEND 257 .globl _USBCS 258 .globl _XAUTODAT2 259 .globl _XAUTODAT1 260 .globl _I2CTL 261 .globl _I2DAT 262 .globl _I2CS 263 .globl _PORTECFG 264 .globl _PORTCCFG 265 .globl _PORTACFG 266 .globl _INTSETUP 267 .globl _INT4IVEC 268 .globl _INT2IVEC 269 .globl _CLRERRCNT 270 .globl _ERRCNTLIM 271 .globl _USBERRIRQ 272 .globl _USBERRIE 273 .globl _GPIFIRQ 274 .globl _GPIFIE 275 .globl _EPIRQ 276 .globl _EPIE 277 .globl _USBIRQ 278 .globl _USBIE 279 .globl _NAKIRQ 280 .globl _NAKIE 281 .globl _IBNIRQ 282 .globl _IBNIE 283 .globl _EP8FIFOIRQ 284 .globl _EP8FIFOIE 285 .globl _EP6FIFOIRQ 286 .globl _EP6FIFOIE 287 .globl _EP4FIFOIRQ 288 .globl _EP4FIFOIE 289 .globl _EP2FIFOIRQ 290 .globl _EP2FIFOIE 291 .globl _OUTPKTEND 292 .globl _INPKTEND 293 .globl _EP8ISOINPKTS 294 .globl _EP6ISOINPKTS 295 .globl _EP4ISOINPKTS 296 .globl _EP2ISOINPKTS 297 .globl _EP8FIFOPFL 298 .globl _EP8FIFOPFH 299 .globl _EP6FIFOPFL 300 .globl _EP6FIFOPFH 301 .globl _EP4FIFOPFL 302 .globl _EP4FIFOPFH 303 .globl _EP2FIFOPFL 304 .globl _EP2FIFOPFH 305 .globl _EP8AUTOINLENL 306 .globl _EP8AUTOINLENH 307 .globl _EP6AUTOINLENL 308 .globl _EP6AUTOINLENH 309 .globl _EP4AUTOINLENL 310 .globl _EP4AUTOINLENH 311 .globl _EP2AUTOINLENL 312 .globl _EP2AUTOINLENH 313 .globl _EP8FIFOCFG 314 .globl _EP6FIFOCFG 315 .globl _EP4FIFOCFG 316 .globl _EP2FIFOCFG 317 .globl _EP8CFG 318 .globl _EP6CFG 319 .globl _EP4CFG 320 .globl _EP2CFG 321 .globl _EP1INCFG 322 .globl _EP1OUTCFG 323 .globl _REVCTL 324 .globl _REVID 325 .globl _FIFOPINPOLAR 326 .globl _UART230 327 .globl _BPADDRL 328 .globl _BPADDRH 329 .globl _BREAKPT 330 .globl _FIFORESET 331 .globl _PINFLAGSCD 332 .globl _PINFLAGSAB 333 .globl _IFCONFIG 334 .globl _CPUCS 335 .globl _RES_WAVEDATA_END 336 .globl _GPIF_WAVE_DATA 337 .globl _hook_sv 338 .globl _hook_uv 339 .globl _hook_fgv 340 .globl _setup_autovectors 341 ;-------------------------------------------------------- 342 ; special function registers 343 ;-------------------------------------------------------- 344 .area RSEG (DATA) 0080 345 _IOA = 0x0080 0081 346 _SP = 0x0081 0082 347 _DPL = 0x0082 0083 348 _DPH = 0x0083 0084 349 _DPL1 = 0x0084 0085 350 _DPH1 = 0x0085 0086 351 _DPS = 0x0086 0087 352 _PCON = 0x0087 0088 353 _TCON = 0x0088 0089 354 _TMOD = 0x0089 008A 355 _TL0 = 0x008a 008B 356 _TL1 = 0x008b 008C 357 _TH0 = 0x008c 008D 358 _TH1 = 0x008d 008E 359 _CKCON = 0x008e 0090 360 _IOB = 0x0090 0091 361 _EXIF = 0x0091 0092 362 _MPAGE = 0x0092 0098 363 _SCON0 = 0x0098 0099 364 _SBUF0 = 0x0099 009A 365 _APTR1H = 0x009a 009B 366 _APTR1L = 0x009b 009C 367 _AUTODAT1 = 0x009c 009D 368 _AUTOPTRH2 = 0x009d 009E 369 _AUTOPTRL2 = 0x009e 009F 370 _AUTODAT2 = 0x009f 00A0 371 _IOC = 0x00a0 00A1 372 _INT2CLR = 0x00a1 00A2 373 _INT4CLR = 0x00a2 00A8 374 _IE = 0x00a8 00AA 375 _EP2468STAT = 0x00aa 00AB 376 _EP24FIFOFLGS = 0x00ab 00AC 377 _EP68FIFOFLGS = 0x00ac 00AF 378 _AUTOPTRSETUP = 0x00af 00B0 379 _IOD = 0x00b0 00B1 380 _IOE = 0x00b1 00B2 381 _OEA = 0x00b2 00B3 382 _OEB = 0x00b3 00B4 383 _OEC = 0x00b4 00B5 384 _OED = 0x00b5 00B6 385 _OEE = 0x00b6 00B8 386 _IP = 0x00b8 00BA 387 _EP01STAT = 0x00ba 00BB 388 _GPIFTRIG = 0x00bb 00BD 389 _GPIFSGLDATH = 0x00bd 00BE 390 _GPIFSGLDATLX = 0x00be 00BF 391 _GPIFSGLDATLNOX = 0x00bf 00C0 392 _SCON1 = 0x00c0 00C1 393 _SBUF1 = 0x00c1 00C8 394 _T2CON = 0x00c8 00CA 395 _RCAP2L = 0x00ca 00CB 396 _RCAP2H = 0x00cb 00CC 397 _TL2 = 0x00cc 00CD 398 _TH2 = 0x00cd 00D0 399 _PSW = 0x00d0 00D8 400 _EICON = 0x00d8 00E0 401 _ACC = 0x00e0 00E8 402 _EIE = 0x00e8 00F0 403 _B = 0x00f0 00F8 404 _EIP = 0x00f8 405 ;-------------------------------------------------------- 406 ; special function bits 407 ;-------------------------------------------------------- 408 .area RSEG (DATA) 0080 409 _A0 = 0x0080 0081 410 _A1 = 0x0081 0082 411 _A2 = 0x0082 0083 412 _A3 = 0x0083 0084 413 _A4 = 0x0084 0085 414 _A5 = 0x0085 0086 415 _A6 = 0x0086 0087 416 _A7 = 0x0087 0086 417 _SEL = 0x0086 0088 418 _IT0 = 0x0088 0089 419 _IE0 = 0x0089 008A 420 _IT1 = 0x008a 008B 421 _IE1 = 0x008b 008C 422 _TR0 = 0x008c 008D 423 _TF0 = 0x008d 008E 424 _TR1 = 0x008e 008F 425 _TF1 = 0x008f 0098 426 _RI = 0x0098 0099 427 _TI = 0x0099 009A 428 _RB8 = 0x009a 009B 429 _TB8 = 0x009b 009C 430 _REN = 0x009c 009D 431 _SM2 = 0x009d 009E 432 _SM1 = 0x009e 009F 433 _SM0 = 0x009f 00A8 434 _EX0 = 0x00a8 00A9 435 _ET0 = 0x00a9 00AA 436 _EX1 = 0x00aa 00AB 437 _ET1 = 0x00ab 00AC 438 _ES0 = 0x00ac 00AD 439 _ET2 = 0x00ad 00AE 440 _ES1 = 0x00ae 00AF 441 _EA = 0x00af 00B0 442 _D0 = 0x00b0 00B1 443 _D1 = 0x00b1 00B2 444 _D2 = 0x00b2 00B3 445 _D3 = 0x00b3 00B4 446 _D4 = 0x00b4 00B5 447 _D5 = 0x00b5 00B6 448 _D6 = 0x00b6 00B7 449 _D7 = 0x00b7 00B8 450 _PX0 = 0x00b8 00B9 451 _PT0 = 0x00b9 00BA 452 _PX1 = 0x00ba 00BB 453 _PT1 = 0x00bb 00BC 454 _PS0 = 0x00bc 00BD 455 _PT2 = 0x00bd 00BE 456 _PS1 = 0x00be 00C0 457 _RI1 = 0x00c0 00C1 458 _TI1 = 0x00c1 00C2 459 _RB81 = 0x00c2 00C3 460 _TB81 = 0x00c3 00C4 461 _REN1 = 0x00c4 00C5 462 _SM21 = 0x00c5 00C6 463 _SM11 = 0x00c6 00C7 464 _SM01 = 0x00c7 00C8 465 _CP_RL2 = 0x00c8 00C9 466 _C_T2 = 0x00c9 00CA 467 _TR2 = 0x00ca 00CB 468 _EXEN2 = 0x00cb 00CC 469 _TCLK = 0x00cc 00CD 470 _RCLK = 0x00cd 00CE 471 _EXF2 = 0x00ce 00CF 472 _TF2 = 0x00cf 00D0 473 _P = 0x00d0 00D1 474 _FL = 0x00d1 00D2 475 _OV = 0x00d2 00D3 476 _RS0 = 0x00d3 00D4 477 _RS1 = 0x00d4 00D5 478 _F0 = 0x00d5 00D6 479 _AC = 0x00d6 00D7 480 _CY = 0x00d7 00DB 481 _INT6 = 0x00db 00DC 482 _RESI = 0x00dc 00DD 483 _ERESI = 0x00dd 00DF 484 _SMOD1 = 0x00df 00E8 485 _EIUSB = 0x00e8 00E9 486 _EI2C = 0x00e9 00EA 487 _EIEX4 = 0x00ea 00EB 488 _EIEX5 = 0x00eb 00EC 489 _EIEX6 = 0x00ec 00F8 490 _PUSB = 0x00f8 00F9 491 _PI2C = 0x00f9 00FA 492 _EIPX4 = 0x00fa 00FB 493 _EIPX5 = 0x00fb 00FC 494 _EIPX6 = 0x00fc 495 ;-------------------------------------------------------- 496 ; overlayable register banks 497 ;-------------------------------------------------------- 498 .area REG_BANK_0 (REL,OVR,DATA) 0000 499 .ds 8 500 ;-------------------------------------------------------- 501 ; internal ram data 502 ;-------------------------------------------------------- 503 .area DSEG (DATA) 504 ;-------------------------------------------------------- 505 ; overlayable items in internal ram 506 ;-------------------------------------------------------- 507 .area OSEG (OVR,DATA) 0000 508 _hook_sv_PARM_2:: 0000 509 .ds 2 510 .area OSEG (OVR,DATA) 0000 511 _hook_uv_PARM_2:: 0000 512 .ds 2 513 .area OSEG (OVR,DATA) 0000 514 _hook_fgv_PARM_2:: 0000 515 .ds 2 516 ;-------------------------------------------------------- 517 ; indirectly addressable internal ram data 518 ;-------------------------------------------------------- 519 .area ISEG (DATA) 520 ;-------------------------------------------------------- 521 ; absolute internal ram data 522 ;-------------------------------------------------------- 523 .area IABS (ABS,DATA) 524 .area IABS (ABS,DATA) 525 ;-------------------------------------------------------- 526 ; bit data 527 ;-------------------------------------------------------- 528 .area BSEG (BIT) 0000 529 _hook_sv_t_1_1: 0000 530 .ds 1 0001 531 _hook_uv_t_1_1: 0001 532 .ds 1 0002 533 _hook_fgv_t_1_1: 0002 534 .ds 1 535 ;-------------------------------------------------------- 536 ; paged external ram data 537 ;-------------------------------------------------------- 538 .area PSEG (PAG,XDATA) 539 ;-------------------------------------------------------- 540 ; external ram data 541 ;-------------------------------------------------------- 542 .area XSEG (XDATA) E400 543 _GPIF_WAVE_DATA = 0xe400 E480 544 _RES_WAVEDATA_END = 0xe480 E600 545 _CPUCS = 0xe600 E601 546 _IFCONFIG = 0xe601 E602 547 _PINFLAGSAB = 0xe602 E603 548 _PINFLAGSCD = 0xe603 E604 549 _FIFORESET = 0xe604 E605 550 _BREAKPT = 0xe605 E606 551 _BPADDRH = 0xe606 E607 552 _BPADDRL = 0xe607 E608 553 _UART230 = 0xe608 E609 554 _FIFOPINPOLAR = 0xe609 E60A 555 _REVID = 0xe60a E60B 556 _REVCTL = 0xe60b E610 557 _EP1OUTCFG = 0xe610 E611 558 _EP1INCFG = 0xe611 E612 559 _EP2CFG = 0xe612 E613 560 _EP4CFG = 0xe613 E614 561 _EP6CFG = 0xe614 E615 562 _EP8CFG = 0xe615 E618 563 _EP2FIFOCFG = 0xe618 E619 564 _EP4FIFOCFG = 0xe619 E61A 565 _EP6FIFOCFG = 0xe61a E61B 566 _EP8FIFOCFG = 0xe61b E620 567 _EP2AUTOINLENH = 0xe620 E621 568 _EP2AUTOINLENL = 0xe621 E622 569 _EP4AUTOINLENH = 0xe622 E623 570 _EP4AUTOINLENL = 0xe623 E624 571 _EP6AUTOINLENH = 0xe624 E625 572 _EP6AUTOINLENL = 0xe625 E626 573 _EP8AUTOINLENH = 0xe626 E627 574 _EP8AUTOINLENL = 0xe627 E630 575 _EP2FIFOPFH = 0xe630 E631 576 _EP2FIFOPFL = 0xe631 E632 577 _EP4FIFOPFH = 0xe632 E633 578 _EP4FIFOPFL = 0xe633 E634 579 _EP6FIFOPFH = 0xe634 E635 580 _EP6FIFOPFL = 0xe635 E636 581 _EP8FIFOPFH = 0xe636 E637 582 _EP8FIFOPFL = 0xe637 E640 583 _EP2ISOINPKTS = 0xe640 E641 584 _EP4ISOINPKTS = 0xe641 E642 585 _EP6ISOINPKTS = 0xe642 E643 586 _EP8ISOINPKTS = 0xe643 E648 587 _INPKTEND = 0xe648 E649 588 _OUTPKTEND = 0xe649 E650 589 _EP2FIFOIE = 0xe650 E651 590 _EP2FIFOIRQ = 0xe651 E652 591 _EP4FIFOIE = 0xe652 E653 592 _EP4FIFOIRQ = 0xe653 E654 593 _EP6FIFOIE = 0xe654 E655 594 _EP6FIFOIRQ = 0xe655 E656 595 _EP8FIFOIE = 0xe656 E657 596 _EP8FIFOIRQ = 0xe657 E658 597 _IBNIE = 0xe658 E659 598 _IBNIRQ = 0xe659 E65A 599 _NAKIE = 0xe65a E65B 600 _NAKIRQ = 0xe65b E65C 601 _USBIE = 0xe65c E65D 602 _USBIRQ = 0xe65d E65E 603 _EPIE = 0xe65e E65F 604 _EPIRQ = 0xe65f E660 605 _GPIFIE = 0xe660 E661 606 _GPIFIRQ = 0xe661 E662 607 _USBERRIE = 0xe662 E663 608 _USBERRIRQ = 0xe663 E664 609 _ERRCNTLIM = 0xe664 E665 610 _CLRERRCNT = 0xe665 E666 611 _INT2IVEC = 0xe666 E667 612 _INT4IVEC = 0xe667 E668 613 _INTSETUP = 0xe668 E670 614 _PORTACFG = 0xe670 E671 615 _PORTCCFG = 0xe671 E672 616 _PORTECFG = 0xe672 E678 617 _I2CS = 0xe678 E679 618 _I2DAT = 0xe679 E67A 619 _I2CTL = 0xe67a E67B 620 _XAUTODAT1 = 0xe67b E67C 621 _XAUTODAT2 = 0xe67c E680 622 _USBCS = 0xe680 E681 623 _SUSPEND = 0xe681 E682 624 _WAKEUPCS = 0xe682 E683 625 _TOGCTL = 0xe683 E684 626 _USBFRAMEH = 0xe684 E685 627 _USBFRAMEL = 0xe685 E686 628 _MICROFRAME = 0xe686 E687 629 _FNADDR = 0xe687 E68A 630 _EP0BCH = 0xe68a E68B 631 _EP0BCL = 0xe68b E68D 632 _EP1OUTBC = 0xe68d E68F 633 _EP1INBC = 0xe68f E690 634 _EP2BCH = 0xe690 E691 635 _EP2BCL = 0xe691 E694 636 _EP4BCH = 0xe694 E695 637 _EP4BCL = 0xe695 E698 638 _EP6BCH = 0xe698 E699 639 _EP6BCL = 0xe699 E69C 640 _EP8BCH = 0xe69c E69D 641 _EP8BCL = 0xe69d E6A0 642 _EP0CS = 0xe6a0 E6A1 643 _EP1OUTCS = 0xe6a1 E6A2 644 _EP1INCS = 0xe6a2 E6A3 645 _EP2CS = 0xe6a3 E6A4 646 _EP4CS = 0xe6a4 E6A5 647 _EP6CS = 0xe6a5 E6A6 648 _EP8CS = 0xe6a6 E6A7 649 _EP2FIFOFLGS = 0xe6a7 E6A8 650 _EP4FIFOFLGS = 0xe6a8 E6A9 651 _EP6FIFOFLGS = 0xe6a9 E6AA 652 _EP8FIFOFLGS = 0xe6aa E6AB 653 _EP2FIFOBCH = 0xe6ab E6AC 654 _EP2FIFOBCL = 0xe6ac E6AD 655 _EP4FIFOBCH = 0xe6ad E6AE 656 _EP4FIFOBCL = 0xe6ae E6AF 657 _EP6FIFOBCH = 0xe6af E6B0 658 _EP6FIFOBCL = 0xe6b0 E6B1 659 _EP8FIFOBCH = 0xe6b1 E6B2 660 _EP8FIFOBCL = 0xe6b2 E6B3 661 _SUDPTRH = 0xe6b3 E6B4 662 _SUDPTRL = 0xe6b4 E6B5 663 _SUDPTRCTL = 0xe6b5 E6B8 664 _SETUPDAT = 0xe6b8 E6C0 665 _GPIFWFSELECT = 0xe6c0 E6C1 666 _GPIFIDLECS = 0xe6c1 E6C2 667 _GPIFIDLECTL = 0xe6c2 E6C3 668 _GPIFCTLCFG = 0xe6c3 E6C4 669 _GPIFADRH = 0xe6c4 E6C5 670 _GPIFADRL = 0xe6c5 E6CE 671 _GPIFTCB3 = 0xe6ce E6CF 672 _GPIFTCB2 = 0xe6cf E6D0 673 _GPIFTCB1 = 0xe6d0 E6D1 674 _GPIFTCB0 = 0xe6d1 E6D2 675 _EP2GPIFFLGSEL = 0xe6d2 E6D3 676 _EP2GPIFPFSTOP = 0xe6d3 E6D4 677 _EP2GPIFTRIG = 0xe6d4 E6DA 678 _EP4GPIFFLGSEL = 0xe6da E6DB 679 _EP4GPIFPFSTOP = 0xe6db E6DC 680 _EP4GPIFTRIG = 0xe6dc E6E2 681 _EP6GPIFFLGSEL = 0xe6e2 E6E3 682 _EP6GPIFPFSTOP = 0xe6e3 E6E4 683 _EP6GPIFTRIG = 0xe6e4 E6EA 684 _EP8GPIFFLGSEL = 0xe6ea E6EB 685 _EP8GPIFPFSTOP = 0xe6eb E6EC 686 _EP8GPIFTRIG = 0xe6ec E6F0 687 _XGPIFSGLDATH = 0xe6f0 E6F1 688 _XGPIFSGLDATLX = 0xe6f1 E6F2 689 _XGPIFSGLDATLNOX = 0xe6f2 E6F3 690 _GPIFREADYCFG = 0xe6f3 E6F4 691 _GPIFREADYSTAT = 0xe6f4 E6F5 692 _GPIFABORT = 0xe6f5 E6C6 693 _FLOWSTATE = 0xe6c6 E6C7 694 _FLOWLOGIC = 0xe6c7 E6C8 695 _FLOWEQ0CTL = 0xe6c8 E6C9 696 _FLOWEQ1CTL = 0xe6c9 E6CA 697 _FLOWHOLDOFF = 0xe6ca E6CB 698 _FLOWSTB = 0xe6cb E6CC 699 _FLOWSTBEDGE = 0xe6cc E6CD 700 _FLOWSTBHPERIOD = 0xe6cd E60C 701 _GPIFHOLDAMOUNT = 0xe60c E67D 702 _UDMACRCH = 0xe67d E67E 703 _UDMACRCL = 0xe67e E67F 704 _UDMACRCQUAL = 0xe67f E6F8 705 _DBUG = 0xe6f8 E6F9 706 _TESTCFG = 0xe6f9 E6FA 707 _USBTEST = 0xe6fa E6FB 708 _CT1 = 0xe6fb E6FC 709 _CT2 = 0xe6fc E6FD 710 _CT3 = 0xe6fd E6FE 711 _CT4 = 0xe6fe E740 712 _EP0BUF = 0xe740 E780 713 _EP1OUTBUF = 0xe780 E7C0 714 _EP1INBUF = 0xe7c0 F000 715 _EP2FIFOBUF = 0xf000 F400 716 _EP4FIFOBUF = 0xf400 F800 717 _EP6FIFOBUF = 0xf800 FC00 718 _EP8FIFOBUF = 0xfc00 719 ;-------------------------------------------------------- 720 ; absolute external ram data 721 ;-------------------------------------------------------- 722 .area XABS (ABS,XDATA) 723 ;-------------------------------------------------------- 724 ; external initialized ram data 725 ;-------------------------------------------------------- 726 .area HOME (CODE) 727 .area GSINIT0 (CODE) 728 .area GSINIT1 (CODE) 729 .area GSINIT2 (CODE) 730 .area GSINIT3 (CODE) 731 .area GSINIT4 (CODE) 732 .area GSINIT5 (CODE) 733 .area GSINIT (CODE) 734 .area GSFINAL (CODE) 735 .area CSEG (CODE) 736 ;-------------------------------------------------------- 737 ; global & static initialisations 738 ;-------------------------------------------------------- 739 .area HOME (CODE) 740 .area GSINIT (CODE) 741 .area GSFINAL (CODE) 742 .area GSINIT (CODE) 743 ;-------------------------------------------------------- 744 ; Home 745 ;-------------------------------------------------------- 746 .area HOME (CODE) 747 .area HOME (CODE) 748 ;-------------------------------------------------------- 749 ; code 750 ;-------------------------------------------------------- 751 .area CSEG (CODE) 752 ;------------------------------------------------------------ 753 ;Allocation info for local variables in function 'hook_sv' 754 ;------------------------------------------------------------ 755 ;addr Allocated with name '_hook_sv_PARM_2' 756 ;vector_number Allocated to registers r2 757 ;------------------------------------------------------------ 758 ; isr.c:40: hook_sv (unsigned char vector_number, unsigned short addr) 759 ; ----------------------------------------- 760 ; function hook_sv 761 ; ----------------------------------------- 0000 762 _hook_sv: 0002 763 ar2 = 0x02 0003 764 ar3 = 0x03 0004 765 ar4 = 0x04 0005 766 ar5 = 0x05 0006 767 ar6 = 0x06 0007 768 ar7 = 0x07 0000 769 ar0 = 0x00 0001 770 ar1 = 0x01 0000 AA 82 771 mov r2,dpl 772 ; isr.c:46: if (vector_number < SV_MIN || vector_number > SV_MAX) 0002 BA 03 00 773 cjne r2,#0x03,00112$ 0005 774 00112$: 0005 40 05 775 jc 00101$ 0007 EA 776 mov a,r2 0008 24 9C 777 add a,#0xff - 0x63 000A 50 01 778 jnc 00102$ 000C 779 00101$: 780 ; isr.c:47: return; 000C 22 781 ret 000D 782 00102$: 783 ; isr.c:49: if ((vector_number & 0x0f) != 0x03 && (vector_number & 0x0f) != 0x0b) 000D 74 0F 784 mov a,#0x0F 000F 5A 785 anl a,r2 0010 FB 786 mov r3,a 0011 BB 03 02 787 cjne r3,#0x03,00115$ 0014 80 07 788 sjmp 00105$ 0016 789 00115$: 0016 74 0F 790 mov a,#0x0F 0018 5A 791 anl a,r2 0019 FB 792 mov r3,a 793 ; isr.c:50: return; 001A BB 0B 45 794 cjne r3,#0x0B,00107$ 001D 795 00105$: 796 ; isr.c:52: t = EA; 001D A2 AF 797 mov c,_EA 001F 92*00 798 mov _hook_sv_t_1_1,c 799 ; isr.c:53: EA = 0; 0021 C2 AF 800 clr _EA 801 ; isr.c:54: _standard_interrupt_vector[vector_number] = LJMP_OPCODE; 0023 EA 802 mov a,r2 0024 24r00 803 add a,#__standard_interrupt_vector 0026 F5 82 804 mov dpl,a 0028 E4 805 clr a 0029 34s00 806 addc a,#(__standard_interrupt_vector >> 8) 002B F5 83 807 mov dph,a 002D 74 02 808 mov a,#0x02 002F F0 809 movx @dptr,a 810 ; isr.c:55: _standard_interrupt_vector[vector_number + 1] = addr >> 8; 0030 7B 00 811 mov r3,#0x00 0032 74 01 812 mov a,#0x01 0034 2A 813 add a,r2 0035 FC 814 mov r4,a 0036 E4 815 clr a 0037 3B 816 addc a,r3 0038 FD 817 mov r5,a 0039 EC 818 mov a,r4 003A 24r00 819 add a,#__standard_interrupt_vector 003C F5 82 820 mov dpl,a 003E ED 821 mov a,r5 003F 34s00 822 addc a,#(__standard_interrupt_vector >> 8) 0041 F5 83 823 mov dph,a 0043 E5*01 824 mov a,(_hook_sv_PARM_2 + 1) 0045 FC 825 mov r4,a 0046 F0 826 movx @dptr,a 827 ; isr.c:56: _standard_interrupt_vector[vector_number + 2] = addr & 0xff; 0047 74 02 828 mov a,#0x02 0049 2A 829 add a,r2 004A FA 830 mov r2,a 004B E4 831 clr a 004C 3B 832 addc a,r3 004D FB 833 mov r3,a 004E EA 834 mov a,r2 004F 24r00 835 add a,#__standard_interrupt_vector 0051 F5 82 836 mov dpl,a 0053 EB 837 mov a,r3 0054 34s00 838 addc a,#(__standard_interrupt_vector >> 8) 0056 F5 83 839 mov dph,a 0058 AA*00 840 mov r2,_hook_sv_PARM_2 005A 7B 00 841 mov r3,#0x00 005C EA 842 mov a,r2 005D F0 843 movx @dptr,a 844 ; isr.c:57: EA = t; 005E A2*00 845 mov c,_hook_sv_t_1_1 0060 92 AF 846 mov _EA,c 0062 847 00107$: 0062 22 848 ret 849 ;------------------------------------------------------------ 850 ;Allocation info for local variables in function 'hook_uv' 851 ;------------------------------------------------------------ 852 ;addr Allocated with name '_hook_uv_PARM_2' 853 ;vector_number Allocated to registers r2 854 ;------------------------------------------------------------ 855 ; isr.c:67: hook_uv (unsigned char vector_number, unsigned short addr) 856 ; ----------------------------------------- 857 ; function hook_uv 858 ; ----------------------------------------- 0063 859 _hook_uv: 860 ; isr.c:73: if (vector_number < UV_MIN || vector_number > UV_MAX) 0063 E5 82 861 mov a,dpl 0065 FA 862 mov r2,a 0066 24 83 863 add a,#0xff - 0x7C 0068 50 01 864 jnc 00102$ 865 ; isr.c:74: return; 006A 22 866 ret 006B 867 00102$: 868 ; isr.c:76: if ((vector_number & 0x3) != 0) 006B EA 869 mov a,r2 006C 54 03 870 anl a,#0x03 006E 60 01 871 jz 00105$ 872 ; isr.c:77: return; 0070 22 873 ret 0071 874 00105$: 875 ; isr.c:79: t = EA; 0071 A2 AF 876 mov c,_EA 0073 92*01 877 mov _hook_uv_t_1_1,c 878 ; isr.c:80: EA = 0; 0075 C2 AF 879 clr _EA 880 ; isr.c:81: _usb_autovector[vector_number] = LJMP_OPCODE; 0077 EA 881 mov a,r2 0078 24r00 882 add a,#__usb_autovector 007A F5 82 883 mov dpl,a 007C E4 884 clr a 007D 34s00 885 addc a,#(__usb_autovector >> 8) 007F F5 83 886 mov dph,a 0081 74 02 887 mov a,#0x02 0083 F0 888 movx @dptr,a 889 ; isr.c:82: _usb_autovector[vector_number + 1] = addr >> 8; 0084 7B 00 890 mov r3,#0x00 0086 74 01 891 mov a,#0x01 0088 2A 892 add a,r2 0089 FC 893 mov r4,a 008A E4 894 clr a 008B 3B 895 addc a,r3 008C FD 896 mov r5,a 008D EC 897 mov a,r4 008E 24r00 898 add a,#__usb_autovector 0090 F5 82 899 mov dpl,a 0092 ED 900 mov a,r5 0093 34s00 901 addc a,#(__usb_autovector >> 8) 0095 F5 83 902 mov dph,a 0097 E5*01 903 mov a,(_hook_uv_PARM_2 + 1) 0099 F0 904 movx @dptr,a 905 ; isr.c:83: _usb_autovector[vector_number + 2] = addr & 0xff; 009A 74 02 906 mov a,#0x02 009C 2A 907 add a,r2 009D FA 908 mov r2,a 009E E4 909 clr a 009F 3B 910 addc a,r3 00A0 FB 911 mov r3,a 00A1 EA 912 mov a,r2 00A2 24r00 913 add a,#__usb_autovector 00A4 F5 82 914 mov dpl,a 00A6 EB 915 mov a,r3 00A7 34s00 916 addc a,#(__usb_autovector >> 8) 00A9 F5 83 917 mov dph,a 00AB AA*00 918 mov r2,_hook_uv_PARM_2 00AD EA 919 mov a,r2 00AE F0 920 movx @dptr,a 921 ; isr.c:84: EA = t; 00AF A2*01 922 mov c,_hook_uv_t_1_1 00B1 92 AF 923 mov _EA,c 00B3 22 924 ret 925 ;------------------------------------------------------------ 926 ;Allocation info for local variables in function 'hook_fgv' 927 ;------------------------------------------------------------ 928 ;addr Allocated with name '_hook_fgv_PARM_2' 929 ;vector_number Allocated to registers r2 930 ;------------------------------------------------------------ 931 ; isr.c:94: hook_fgv (unsigned char vector_number, unsigned short addr) 932 ; ----------------------------------------- 933 ; function hook_fgv 934 ; ----------------------------------------- 00B4 935 _hook_fgv: 00B4 AA 82 936 mov r2,dpl 937 ; isr.c:100: if (vector_number < FGV_MIN || vector_number > FGV_MAX) 00B6 BA 80 00 938 cjne r2,#0x80,00110$ 00B9 939 00110$: 00B9 40 05 940 jc 00101$ 00BB EA 941 mov a,r2 00BC 24 4B 942 add a,#0xff - 0xB4 00BE 50 01 943 jnc 00102$ 00C0 944 00101$: 945 ; isr.c:101: return; 00C0 22 946 ret 00C1 947 00102$: 948 ; isr.c:103: if ((vector_number & 0x3) != 0) 00C1 EA 949 mov a,r2 00C2 54 03 950 anl a,#0x03 00C4 60 01 951 jz 00105$ 952 ; isr.c:104: return; 00C6 22 953 ret 00C7 954 00105$: 955 ; isr.c:106: t = EA; 00C7 A2 AF 956 mov c,_EA 00C9 92*02 957 mov _hook_fgv_t_1_1,c 958 ; isr.c:107: EA = 0; 00CB C2 AF 959 clr _EA 960 ; isr.c:108: _fifo_gpif_autovector[vector_number] = LJMP_OPCODE; 00CD EA 961 mov a,r2 00CE 24r00 962 add a,#__fifo_gpif_autovector 00D0 F5 82 963 mov dpl,a 00D2 E4 964 clr a 00D3 34s00 965 addc a,#(__fifo_gpif_autovector >> 8) 00D5 F5 83 966 mov dph,a 00D7 74 02 967 mov a,#0x02 00D9 F0 968 movx @dptr,a 969 ; isr.c:109: _fifo_gpif_autovector[vector_number + 1] = addr >> 8; 00DA 7B 00 970 mov r3,#0x00 00DC 74 01 971 mov a,#0x01 00DE 2A 972 add a,r2 00DF FC 973 mov r4,a 00E0 E4 974 clr a 00E1 3B 975 addc a,r3 00E2 FD 976 mov r5,a 00E3 EC 977 mov a,r4 00E4 24r00 978 add a,#__fifo_gpif_autovector 00E6 F5 82 979 mov dpl,a 00E8 ED 980 mov a,r5 00E9 34s00 981 addc a,#(__fifo_gpif_autovector >> 8) 00EB F5 83 982 mov dph,a 00ED E5*01 983 mov a,(_hook_fgv_PARM_2 + 1) 00EF F0 984 movx @dptr,a 985 ; isr.c:110: _fifo_gpif_autovector[vector_number + 2] = addr & 0xff; 00F0 74 02 986 mov a,#0x02 00F2 2A 987 add a,r2 00F3 FA 988 mov r2,a 00F4 E4 989 clr a 00F5 3B 990 addc a,r3 00F6 FB 991 mov r3,a 00F7 EA 992 mov a,r2 00F8 24r00 993 add a,#__fifo_gpif_autovector 00FA F5 82 994 mov dpl,a 00FC EB 995 mov a,r3 00FD 34s00 996 addc a,#(__fifo_gpif_autovector >> 8) 00FF F5 83 997 mov dph,a 0101 AA*00 998 mov r2,_hook_fgv_PARM_2 0103 EA 999 mov a,r2 0104 F0 1000 movx @dptr,a 1001 ; isr.c:111: EA = t; 0105 A2*02 1002 mov c,_hook_fgv_t_1_1 0107 92 AF 1003 mov _EA,c 0109 22 1004 ret 1005 ;------------------------------------------------------------ 1006 ;Allocation info for local variables in function 'setup_autovectors' 1007 ;------------------------------------------------------------ 1008 ;------------------------------------------------------------ 1009 ; isr.c:122: setup_autovectors (void) 1010 ; ----------------------------------------- 1011 ; function setup_autovectors 1012 ; ----------------------------------------- 010A 1013 _setup_autovectors: 1014 ; isr.c:125: EIUSB = 0; 010A C2 E8 1015 clr _EIUSB 1016 ; isr.c:126: EIEX4 = 0; 010C C2 EA 1017 clr _EIEX4 1018 ; isr.c:128: hook_sv (SV_INT_2, (unsigned short) _usb_autovector); 010E 75*00r00 1019 mov _hook_sv_PARM_2,#__usb_autovector 0111 75*01s00 1020 mov (_hook_sv_PARM_2 + 1),#(__usb_autovector >> 8) 0114 75 82 43 1021 mov dpl,#0x43 0117 12s00r00 1022 lcall _hook_sv 1023 ; isr.c:129: hook_sv (SV_INT_4, (unsigned short) _fifo_gpif_autovector); 011A 75*00r00 1024 mov _hook_sv_PARM_2,#__fifo_gpif_autovector 011D 75*01s00 1025 mov (_hook_sv_PARM_2 + 1),#(__fifo_gpif_autovector >> 8) 0120 75 82 53 1026 mov dpl,#0x53 0123 12s00r00 1027 lcall _hook_sv 1028 ; isr.c:132: SYNCDELAY; 0126 00 1029 nop; nop; nop; 1030 ; isr.c:133: EP2FIFOIE = 0; SYNCDELAY; 0127 90 E6 50 1031 mov dptr,#_EP2FIFOIE 012A E4 1032 clr a 012B F0 1033 movx @dptr,a 012C 00 1034 nop; nop; nop; 1035 ; isr.c:134: EP4FIFOIE = 0; SYNCDELAY; 012D 90 E6 52 1036 mov dptr,#_EP4FIFOIE 0130 E4 1037 clr a 0131 F0 1038 movx @dptr,a 0132 00 1039 nop; nop; nop; 1040 ; isr.c:135: EP6FIFOIE = 0; SYNCDELAY; 0133 90 E6 54 1041 mov dptr,#_EP6FIFOIE 0136 E4 1042 clr a 0137 F0 1043 movx @dptr,a 0138 00 1044 nop; nop; nop; 1045 ; isr.c:136: EP8FIFOIE = 0; SYNCDELAY; 0139 90 E6 56 1046 mov dptr,#_EP8FIFOIE 013C E4 1047 clr a 013D F0 1048 movx @dptr,a 013E 00 1049 nop; nop; nop; 1050 ; isr.c:139: EP2FIFOIRQ = 0xff; SYNCDELAY; 013F 90 E6 51 1051 mov dptr,#_EP2FIFOIRQ 0142 74 FF 1052 mov a,#0xFF 0144 F0 1053 movx @dptr,a 0145 00 1054 nop; nop; nop; 1055 ; isr.c:140: EP4FIFOIRQ = 0xff; SYNCDELAY; 0146 90 E6 53 1056 mov dptr,#_EP4FIFOIRQ 0149 74 FF 1057 mov a,#0xFF 014B F0 1058 movx @dptr,a 014C 00 1059 nop; nop; nop; 1060 ; isr.c:141: EP6FIFOIRQ = 0xff; SYNCDELAY; 014D 90 E6 55 1061 mov dptr,#_EP6FIFOIRQ 0150 74 FF 1062 mov a,#0xFF 0152 F0 1063 movx @dptr,a 0153 00 1064 nop; nop; nop; 1065 ; isr.c:142: EP8FIFOIRQ = 0xff; SYNCDELAY; 0154 90 E6 57 1066 mov dptr,#_EP8FIFOIRQ 0157 74 FF 1067 mov a,#0xFF 0159 F0 1068 movx @dptr,a 015A 00 1069 nop; nop; nop; 1070 ; isr.c:144: IBNIE = 0; 015B 90 E6 58 1071 mov dptr,#_IBNIE 015E E4 1072 clr a 015F F0 1073 movx @dptr,a 1074 ; isr.c:145: IBNIRQ = 0xff; 0160 90 E6 59 1075 mov dptr,#_IBNIRQ 0163 74 FF 1076 mov a,#0xFF 0165 F0 1077 movx @dptr,a 1078 ; isr.c:146: NAKIE = 0; 0166 90 E6 5A 1079 mov dptr,#_NAKIE 0169 E4 1080 clr a 016A F0 1081 movx @dptr,a 1082 ; isr.c:147: NAKIRQ = 0xff; 016B 90 E6 5B 1083 mov dptr,#_NAKIRQ 016E 74 FF 1084 mov a,#0xFF 0170 F0 1085 movx @dptr,a 1086 ; isr.c:148: USBIE = 0; 0171 90 E6 5C 1087 mov dptr,#_USBIE 0174 E4 1088 clr a 0175 F0 1089 movx @dptr,a 1090 ; isr.c:149: USBIRQ = 0xff; 0176 90 E6 5D 1091 mov dptr,#_USBIRQ 0179 74 FF 1092 mov a,#0xFF 017B F0 1093 movx @dptr,a 1094 ; isr.c:150: EPIE = 0; 017C 90 E6 5E 1095 mov dptr,#_EPIE 017F E4 1096 clr a 0180 F0 1097 movx @dptr,a 1098 ; isr.c:151: EPIRQ = 0xff; 0181 90 E6 5F 1099 mov dptr,#_EPIRQ 0184 74 FF 1100 mov a,#0xFF 0186 F0 1101 movx @dptr,a 1102 ; isr.c:152: SYNCDELAY; GPIFIE = 0; 0187 00 1103 nop; nop; nop; 0188 90 E6 60 1104 mov dptr,#_GPIFIE 018B E4 1105 clr a 018C F0 1106 movx @dptr,a 1107 ; isr.c:153: SYNCDELAY; GPIFIRQ = 0xff; 018D 00 1108 nop; nop; nop; 018E 90 E6 61 1109 mov dptr,#_GPIFIRQ 0191 74 FF 1110 mov a,#0xFF 0193 F0 1111 movx @dptr,a 1112 ; isr.c:154: USBERRIE = 0; 0194 90 E6 62 1113 mov dptr,#_USBERRIE 0197 E4 1114 clr a 0198 F0 1115 movx @dptr,a 1116 ; isr.c:155: USBERRIRQ = 0xff; 0199 90 E6 63 1117 mov dptr,#_USBERRIRQ 019C 74 FF 1118 mov a,#0xFF 019E F0 1119 movx @dptr,a 1120 ; isr.c:156: CLRERRCNT = 0; 019F 90 E6 65 1121 mov dptr,#_CLRERRCNT 01A2 E4 1122 clr a 01A3 F0 1123 movx @dptr,a 1124 ; isr.c:158: INTSETUP = bmAV2EN | bmAV4EN | bmINT4IN; 01A4 90 E6 68 1125 mov dptr,#_INTSETUP 01A7 74 0B 1126 mov a,#0x0B 01A9 F0 1127 movx @dptr,a 1128 ; isr.c:161: EXIF &= ~bmEXIF_USBINT; 1129 ; isr.c:162: EXIF &= ~bmEXIF_IE4; 01AA 53 91 AF 1130 anl _EXIF,#(0xEF&0xBF) 1131 ; isr.c:165: EIUSB = 1; 01AD D2 E8 1132 setb _EIUSB 1133 ; isr.c:166: EIEX4 = 1; 01AF D2 EA 1134 setb _EIEX4 01B1 22 1135 ret 1136 .area CSEG (CODE) 1137 .area CONST (CODE) 1138 .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/delay.c0000644000175000017500000000324512576764164017554 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Delay approximately 1 microsecond (including overhead in udelay). */ static void udelay1 (void) _naked { _asm ; lcall that got us here took 4 bus cycles ret ; 4 bus cycles _endasm; } /* * delay for approximately usecs microseconds */ void udelay (unsigned char usecs) { do { udelay1 (); } while (--usecs != 0); } /* * Delay approximately 1 millisecond. * We're running at 48 MHz, so we need 48,000 clock cycles. * * Note however, that each bus cycle takes 4 clock cycles (not obvious, * but explains the factor of 4 problem below). */ static void mdelay1 (void) _naked { _asm mov dptr,#(-1200 & 0xffff) 002$: inc dptr ; 3 bus cycles mov a, dpl ; 2 bus cycles orl a, dph ; 2 bus cycles jnz 002$ ; 3 bus cycles ret _endasm; } void mdelay (unsigned int msecs) { do { mdelay1 (); } while (--msecs != 0); } gnss-sdr-0.0.6/firmware/GN3S_v2/lib/timer.sym0000644000175000017500000014523212576764164020167 0ustar carlescarles ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1. Symbol Table A 00D6 AC 00D6 ACC 00E0 ACC.0 00E0 ACC.1 00E1 ACC.2 00E2 ACC.3 00E3 ACC.4 00E4 ACC.5 00E5 ACC.6 00E6 ACC.7 00E7 B 00F0 B.0 00F0 B.1 00F1 B.2 00F2 B.3 00F3 B.4 00F4 B.5 00F5 B.6 00F6 B.7 00F7 CPRL2 00C8 CT2 00C9 CY 00D7 DPH 0083 DPL 0082 EA 00AF ES 00AC ET0 00A9 ET1 00AB ET2 00AD EX0 00A8 EX1 00AA EXEN2 00CB EXF2 00CE F0 00D5 IE 00A8 IE.0 00A8 IE.1 00A9 IE.2 00AA IE.3 00AB IE.4 00AC IE.5 00AD IE.7 00AF IE0 0089 IE1 008B INT0 00B2 INT1 00B3 IP 00B8 IP.0 00B8 IP.1 00B9 IP.2 00BA IP.3 00BB IP.4 00BC IP.5 00BD IT0 0088 IT1 008A OV 00D2 P 00D0 P0 0080 P0.0 0080 P0.1 0081 P0.2 0082 P0.3 0083 P0.4 0084 P0.5 0085 P0.6 0086 P0.7 0087 P1 0090 P1.0 0090 P1.1 0091 P1.2 0092 P1.3 0093 P1.4 0094 P1.5 0095 P1.6 0096 P1.7 0097 P2 00A0 P2.0 00A0 P2.1 00A1 P2.2 00A2 P2.3 00A3 P2.4 00A4 P2.5 00A5 P2.6 00A6 P2.7 00A7 P3 00B0 P3.0 00B0 P3.1 00B1 P3.2 00B2 P3.3 00B3 P3.4 00B4 P3.5 00B5 P3.6 00B6 P3.7 00B7 PCON 0087 PS 00BC PSW 00D0 PSW.0 00D0 PSW.1 00D1 PSW.2 00D2 PSW.3 00D3 PSW.4 00D4 PSW.5 00D5 PSW.6 00D6 PSW.7 00D7 PT0 00B9 PT1 00BB PT2 00BD PX0 00B8 PX1 00BA RB8 009A RCAP2H 00CB RCAP2L 00CA RCLK 00CD REN 009C RI 0098 RS0 00D3 RS1 00D4 RXD 00B0 SBUF 0099 SCON 0098 SCON.0 0098 SCON.1 0099 SCON.2 009A SCON.3 009B SCON.4 009C SCON.5 009D SCON.6 009E SCON.7 009F SM0 009F SM1 009E SM2 009D SP 0081 T2CON 00C8 T2CON.0 00C8 T2CON.1 00C9 T2CON.2 00CA T2CON.3 00CB T2CON.4 00CC T2CON.5 00CD T2CON.6 00CE T2CON.7 00CF TB8 009B TCLK 00CC TCON 0088 TCON.0 0088 TCON.1 0089 TCON.2 008A TCON.3 008B TCON.4 008C TCON.5 008D TCON.6 008E TCON.7 008F TF0 008D TF1 008F TF2 00CF TH0 008C TH1 008D TH2 00CD TI 0099 TL0 008A TL1 008B TL2 00CC TMOD 0089 TR0 008C TR1 008E TR2 00CA TXD 00B1 _A0 = 0080 G _A1 = 0081 G _A2 = 0082 G _A3 = 0083 G _A4 = 0084 G _A5 = 0085 G _A6 = 0086 G _A7 = 0087 G _AC = 00D6 G _ACC = 00E0 G _APTR1H = 009A G _APTR1L = 009B G _AUTODAT1 = 009C G _AUTODAT2 = 009F G _AUTOPTRH2 = 009D G _AUTOPTRL2 = 009E G _AUTOPTRSETUP = 00AF G _B = 00F0 G _BPADDRH = E606 G _BPADDRL = E607 G _BREAKPT = E605 G _CKCON = 008E G _CLRERRCNT = E665 G _CPUCS = E600 G _CP_RL2 = 00C8 G _CT1 = E6FB G _CT2 = E6FC G _CT3 = E6FD G _CT4 = E6FE G _CY = 00D7 G _C_T2 = 00C9 G _D0 = 00B0 G _D1 = 00B1 G _D2 = 00B2 G _D3 = 00B3 G _D4 = 00B4 G _D5 = 00B5 G _D6 = 00B6 G _D7 = 00B7 G _DBUG = E6F8 G _DPH = 0083 G _DPH1 = 0085 G _DPL = 0082 G _DPL1 = 0084 G _DPS = 0086 G _EA = 00AF G _EI2C = 00E9 G _EICON = 00D8 G _EIE = 00E8 G _EIEX4 = 00EA G _EIEX5 = 00EB G _EIEX6 = 00EC G _EIP = 00F8 G _EIPX4 = 00FA G _EIPX5 = 00FB G _EIPX6 = 00FC G _EIUSB = 00E8 G _EP01STAT = 00BA G _EP0BCH = E68A G _EP0BCL = E68B G _EP0BUF = E740 G _EP0CS = E6A0 G _EP1INBC = E68F G _EP1INBUF = E7C0 G _EP1INCFG = E611 G _EP1INCS = E6A2 G _EP1OUTBC = E68D G _EP1OUTBUF = E780 G _EP1OUTCFG = E610 G _EP1OUTCS = E6A1 G _EP2468STAT = 00AA G _EP24FIFOFLGS = 00AB G _EP2AUTOINLENH = E620 G _EP2AUTOINLENL = E621 G _EP2BCH = E690 G _EP2BCL = E691 G _EP2CFG = E612 G _EP2CS = E6A3 G _EP2FIFOBCH = E6AB G _EP2FIFOBCL = E6AC G _EP2FIFOBUF = F000 G _EP2FIFOCFG = E618 G _EP2FIFOFLGS = E6A7 G _EP2FIFOIE = E650 G _EP2FIFOIRQ = E651 G _EP2FIFOPFH = E630 G _EP2FIFOPFL = E631 G _EP2GPIFFLGSEL = E6D2 G _EP2GPIFPFSTOP = E6D3 G _EP2GPIFTRIG = E6D4 G _EP2ISOINPKTS = E640 G _EP4AUTOINLENH = E622 G _EP4AUTOINLENL = E623 G _EP4BCH = E694 G _EP4BCL = E695 G _EP4CFG = E613 G _EP4CS = E6A4 G _EP4FIFOBCH = E6AD G _EP4FIFOBCL = E6AE G _EP4FIFOBUF = F400 G _EP4FIFOCFG = E619 G _EP4FIFOFLGS = E6A8 G _EP4FIFOIE = E652 G _EP4FIFOIRQ = E653 G _EP4FIFOPFH = E632 G _EP4FIFOPFL = E633 G _EP4GPIFFLGSEL = E6DA G _EP4GPIFPFSTOP = E6DB G _EP4GPIFTRIG = E6DC G _EP4ISOINPKTS = E641 G _EP68FIFOFLGS = 00AC G _EP6AUTOINLENH = E624 G _EP6AUTOINLENL = E625 G _EP6BCH = E698 G _EP6BCL = E699 G _EP6CFG = E614 G _EP6CS = E6A5 G _EP6FIFOBCH = E6AF G _EP6FIFOBCL = E6B0 G _EP6FIFOBUF = F800 G _EP6FIFOCFG = E61A G _EP6FIFOFLGS = E6A9 G _EP6FIFOIE = E654 G _EP6FIFOIRQ = E655 G _EP6FIFOPFH = E634 G _EP6FIFOPFL = E635 G _EP6GPIFFLGSEL = E6E2 G _EP6GPIFPFSTOP = E6E3 G _EP6GPIFTRIG = E6E4 G _EP6ISOINPKTS = E642 G _EP8AUTOINLENH = E626 G _EP8AUTOINLENL = E627 G _EP8BCH = E69C G _EP8BCL = E69D G _EP8CFG = E615 G _EP8CS = E6A6 G _EP8FIFOBCH = E6B1 G _EP8FIFOBCL = E6B2 G _EP8FIFOBUF = FC00 G _EP8FIFOCFG = E61B G _EP8FIFOFLGS = E6AA G _EP8FIFOIE = E656 G _EP8FIFOIRQ = E657 G _EP8FIFOPFH = E636 G _EP8FIFOPFL = E637 G _EP8GPIFFLGSEL = E6EA G _EP8GPIFPFSTOP = E6EB G _EP8GPIFTRIG = E6EC G _EP8ISOINPKTS = E643 G _EPIE = E65E G _EPIRQ = E65F G _ERESI = 00DD G _ERRCNTLIM = E664 G _ES0 = 00AC G _ES1 = 00AE G _ET0 = 00A9 G _ET1 = 00AB G _ET2 = 00AD G _EX0 = 00A8 G _EX1 = 00AA G _EXEN2 = 00CB G _EXF2 = 00CE G _EXIF = 0091 G _F0 = 00D5 G _FIFOPINPOLAR = E609 G _FIFORESET = E604 G _FL = 00D1 G _FLOWEQ0CTL = E6C8 G _FLOWEQ1CTL = E6C9 G _FLOWHOLDOFF = E6CA G _FLOWLOGIC = E6C7 G _FLOWSTATE = E6C6 G _FLOWSTB = E6CB G _FLOWSTBEDGE = E6CC G _FLOWSTBHPERIOD = E6CD G _FNADDR = E687 G _GPIFABORT = E6F5 G _GPIFADRH = E6C4 G _GPIFADRL = E6C5 G _GPIFCTLCFG = E6C3 G _GPIFHOLDAMOUNT = E60C G _GPIFIDLECS = E6C1 G _GPIFIDLECTL = E6C2 G _GPIFIE = E660 G _GPIFIRQ = E661 G _GPIFREADYCFG = E6F3 G _GPIFREADYSTAT = E6F4 G _GPIFSGLDATH = 00BD G _GPIFSGLDATLNOX = 00BF G _GPIFSGLDATLX = 00BE G _GPIFTCB0 = E6D1 G _GPIFTCB1 = E6D0 G _GPIFTCB2 = E6CF G _GPIFTCB3 = E6CE G _GPIFTRIG = 00BB G _GPIFWFSELECT = E6C0 G _GPIF_WAVE_DATA = E400 G _I2CS = E678 G _I2CTL = E67A G _I2DAT = E679 G _IBNIE = E658 G _IBNIRQ = E659 G _IE = 00A8 G _IE0 = 0089 G _IE1 = 008B G _IFCONFIG = E601 G _INPKTEND = E648 G _INT2CLR = 00A1 G _INT2IVEC = E666 G _INT4CLR = 00A2 G _INT4IVEC = E667 G _INT6 = 00DB G _INTSETUP = E668 G _IOA = 0080 G _IOB = 0090 G _IOC = 00A0 G _IOD = 00B0 G _IOE = 00B1 G _IP = 00B8 G _IT0 = 0088 G _IT1 = 008A G _MICROFRAME = E686 G _MPAGE = 0092 G _NAKIE = E65A G _NAKIRQ = E65B G _OEA = 00B2 G _OEB = 00B3 G _OEC = 00B4 G _OED = 00B5 G _OEE = 00B6 G _OUTPKTEND = E649 G _OV = 00D2 G _P = 00D0 G _PCON = 0087 G _PI2C = 00F9 G _PINFLAGSAB = E602 G _PINFLAGSCD = E603 G _PORTACFG = E670 G _PORTCCFG = E671 G _PORTECFG = E672 G _PS0 = 00BC G _PS1 = 00BE G _PSW = 00D0 G _PT0 = 00B9 G _PT1 = 00BB G _PT2 = 00BD G _PUSB = 00F8 G _PX0 = 00B8 G _PX1 = 00BA G _RB8 = 009A G _RB81 = 00C2 G _RCAP2H = 00CB G _RCAP2L = 00CA G _RCLK = 00CD G _REN = 009C G _REN1 = 00C4 G _RESI = 00DC G _RES_WAVEDATA_END = E480 G _REVCTL = E60B G _REVID = E60A G _RI = 0098 G _RI1 = 00C0 G _RS0 = 00D3 G _RS1 = 00D4 G _SBUF0 = 0099 G _SBUF1 = 00C1 G _SCON0 = 0098 G _SCON1 = 00C0 G _SEL = 0086 G _SETUPDAT = E6B8 G _SM0 = 009F G _SM01 = 00C7 G _SM1 = 009E G _SM11 = 00C6 G _SM2 = 009D G _SM21 = 00C5 G _SMOD1 = 00DF G _SP = 0081 G _SUDPTRCTL = E6B5 G _SUDPTRH = E6B3 G _SUDPTRL = E6B4 G _SUSPEND = E681 G _T2CON = 00C8 G _TB8 = 009B G _TB81 = 00C3 G _TCLK = 00CC G _TCON = 0088 G _TESTCFG = E6F9 G _TF0 = 008D G _TF1 = 008F G _TF2 = 00CF G _TH0 = 008C G _TH1 = 008D G _TH2 = 00CD G _TI = 0099 G _TI1 = 00C1 G _TL0 = 008A G _TL1 = 008B G _TL2 = 00CC G _TMOD = 0089 G _TOGCTL = E683 G _TR0 = 008C G _TR1 = 008E G _TR2 = 00CA G _UART230 = E608 G _UDMACRCH = E67D G _UDMACRCL = E67E G _UDMACRCQUAL = E67F G _USBCS = E680 G _USBERRIE = E662 G _USBERRIRQ = E663 G _USBFRAMEH = E684 G _USBFRAMEL = E685 G _USBIE = E65C G _USBIRQ = E65D G _USBTEST = E6FA G _WAKEUPCS = E682 G _XAUTODAT1 = E67B G _XAUTODAT2 = E67C G _XGPIFSGLDATH = E6F0 G _XGPIFSGLDATLNOX = E6F2 G _XGPIFSGLDATLX = E6F1 G _hook_sv **** GX _hook_sv_PARM_2 **** GX 14 _hook_timer_tick 0000 GR a 00D6 ac 00D6 acc 00E0 acc.0 00E0 acc.1 00E1 acc.2 00E2 acc.3 00E3 acc.4 00E4 acc.5 00E5 acc.6 00E6 acc.7 00E7 ar0 = 0000 ar1 = 0001 ar2 = 0002 ar3 = 0003 ar4 = 0004 ar5 = 0005 ar6 = 0006 ar7 = 0007 b 00F0 b.0 00F0 b.1 00F1 b.2 00F2 b.3 00F3 b.4 00F4 b.5 00F5 b.6 00F6 b.7 00F7 cprl2 00C8 ct2 00C9 cy 00D7 dph 0083 dpl 0082 ea 00AF es 00AC et0 00A9 et1 00AB et2 00AD ex0 00A8 ex1 00AA exen2 00CB exf2 00CE f0 00D5 ie 00A8 ie.0 00A8 ie.1 00A9 ie.2 00AA ie.3 00AB ie.4 00AC ie.5 00AD ie.7 00AF ie0 0089 ie1 008B int0 00B2 int1 00B3 ip 00B8 ip.0 00B8 ip.1 00B9 ip.2 00BA ip.3 00BB ip.4 00BC ip.5 00BD it0 0088 it1 008A ov 00D2 p 00D0 p0 0080 p0.0 0080 p0.1 0081 p0.2 0082 p0.3 0083 p0.4 0084 p0.5 0085 p0.6 0086 p0.7 0087 p1 0090 p1.0 0090 p1.1 0091 p1.2 0092 p1.3 0093 p1.4 0094 p1.5 0095 p1.6 0096 p1.7 0097 p2 00A0 p2.0 00A0 p2.1 00A1 p2.2 00A2 p2.3 00A3 p2.4 00A4 p2.5 00A5 p2.6 00A6 p2.7 00A7 p3 00B0 p3.0 00B0 p3.1 00B1 p3.2 00B2 p3.3 00B3 p3.4 00B4 p3.5 00B5 p3.6 00B6 p3.7 00B7 pcon 0087 ps 00BC psw 00D0 psw.0 00D0 psw.1 00D1 psw.2 00D2 psw.3 00D3 psw.4 00D4 psw.5 00D5 psw.6 00D6 psw.7 00D7 pt0 00B9 pt1 00BB pt2 00BD px0 00B8 px1 00BA rb8 009A rcap2h 00CB rcap2l 00CA rclk 00CD ren 009C ri 0098 rs0 00D3 rs1 00D4 rxd 00B0 sbuf 0099 scon 0098 scon.0 0098 scon.1 0099 scon.2 009A scon.3 009B scon.4 009C scon.5 009D scon.6 009E scon.7 009F sm0 009F sm1 009E sm2 009D sp 0081 t2con 00C8 t2con.0 00C8 t2con.1 00C9 t2con.2 00CA t2con.3 00CB t2con.4 00CC t2con.5 00CD t2con.6 00CE t2con.7 00CF tb8 009B tclk 00CC tcon 0088 tcon.0 0088 tcon.1 0089 tcon.2 008A tcon.3 008B tcon.4 008C tcon.5 008D tcon.6 008E tcon.7 008F tf0 008D tf1 008F tf2 00CF th0 008C th1 008D th2 00CD ti 0099 tl0 008A tl1 008B tl2 00CC tmod 0089 tr0 008C tr1 008E tr2 00CA txd 00B1 ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2. Area Table 0 _CODE size 0 flags 0 1 RSEG size 0 flags 0 2 REG_BANK_0 size 8 flags 4 3 DSEG size 0 flags 0 4 OSEG size 0 flags 4 5 ISEG size 0 flags 0 6 IABS size 0 flags 8 7 BSEG size 0 flags 80 8 PSEG size 0 flags 50 9 XSEG size 0 flags 40 A XABS size 0 flags 48 B HOME size 0 flags 20 C GSINIT0 size 0 flags 20 D GSINIT1 size 0 flags 20 E GSINIT2 size 0 flags 20 F GSINIT3 size 0 flags 20 10 GSINIT4 size 0 flags 20 11 GSINIT5 size 0 flags 20 12 GSINIT size 0 flags 20 13 GSFINAL size 0 flags 20 14 CSEG size 1C flags 20 15 CONST size 0 flags 20 16 CABS size 0 flags 28 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/delay.rel0000644000175000017500000000245312576764164020114 0ustar carlescarlesXH H 17 areas 2 global symbols M delay O -mmcs51 --model-small A _CODE size 0 flags 0 addr 0 A RSEG size 0 flags 0 addr 0 A REG_BANK_0 size 8 flags 4 addr 0 A DSEG size 0 flags 0 addr 0 A OSEG size 0 flags 4 addr 0 A ISEG size 0 flags 0 addr 0 A IABS size 0 flags 8 addr 0 A BSEG size 0 flags 80 addr 0 A PSEG size 0 flags 50 addr 0 A XSEG size 0 flags 40 addr 0 A XABS size 0 flags 48 addr 0 A HOME size 0 flags 20 addr 0 A GSINIT0 size 0 flags 20 addr 0 A GSINIT1 size 0 flags 20 addr 0 A GSINIT2 size 0 flags 20 addr 0 A GSINIT3 size 0 flags 20 addr 0 A GSINIT4 size 0 flags 20 addr 0 A GSINIT5 size 0 flags 20 addr 0 A GSINIT size 0 flags 20 addr 0 A GSFINAL size 0 flags 20 addr 0 A CSEG size 25 flags 20 addr 0 S _mdelay Def0014 S _udelay Def0001 A CONST size 0 flags 20 addr 0 A CABS size 0 flags 28 addr 0 T 00 00 R 00 00 00 02 T 00 00 R 00 00 00 14 T 00 00 22 R 00 00 00 14 T 00 01 R 00 00 00 14 T 00 01 AA 82 R 00 00 00 14 T 00 03 R 00 00 00 14 T 00 03 12 00 00 DA FB 22 R 00 00 00 14 00 03 00 14 T 00 09 R 00 00 00 14 T 00 09 90 FB 50 R 00 00 00 14 T 00 0C R 00 00 00 14 T 00 0C A3 E5 82 45 83 70 F9 22 R 00 00 00 14 T 00 14 R 00 00 00 14 T 00 14 AA 82 AB 83 R 00 00 00 14 T 00 18 R 00 00 00 14 T 00 18 12 00 09 1A BA FF 01 1B R 00 00 00 14 00 03 00 14 T 00 20 R 00 00 00 14 T 00 20 EA 4B 70 F4 22 R 00 00 00 14 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/i2c.c0000644000175000017500000000512012576764164017125 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "i2c.h" #include "fx2regs.h" #include // issue a stop bus cycle and wait for completion // returns non-zero if successful, else 0 unsigned char i2c_read (unsigned char addr, xdata unsigned char *buf, unsigned char len) { volatile unsigned char junk; if (len == 0) // reading zero bytes always works return 1; while (I2CS & bmSTOP) // wait for stop to clear ; I2CS = bmSTART; I2DAT = (addr << 1) | 1; // write address and direction (1's the read bit) while ((I2CS & bmDONE) == 0) ; if ((I2CS & bmBERR) || (I2CS & bmACK) == 0) // no device answered... goto fail; if (len == 1) I2CS |= bmLASTRD; junk = I2DAT; // trigger the first read cycle while (--len != 0){ while ((I2CS & bmDONE) == 0) ; if (I2CS & bmBERR) goto fail; if (len == 1) I2CS |= bmLASTRD; *buf++ = I2DAT; // get data, trigger another read } // wait for final byte while ((I2CS & bmDONE) == 0) ; if (I2CS & bmBERR) goto fail; I2CS |= bmSTOP; *buf = I2DAT; return 1; fail: I2CS |= bmSTOP; return 0; } // returns non-zero if successful, else 0 unsigned char i2c_write (unsigned char addr, xdata const unsigned char *buf, unsigned char len) { while (I2CS & bmSTOP) // wait for stop to clear ; I2CS = bmSTART; I2DAT = (addr << 1) | 0; // write address and direction (0's the write bit) while ((I2CS & bmDONE) == 0) ; if ((I2CS & bmBERR) || (I2CS & bmACK) == 0) // no device answered... goto fail; while (len > 0){ I2DAT = *buf++; len--; while ((I2CS & bmDONE) == 0) ; if ((I2CS & bmBERR) || (I2CS & bmACK) == 0) // no device answered... goto fail; } I2CS |= bmSTOP; return 1; fail: I2CS |= bmSTOP; return 0; } gnss-sdr-0.0.6/firmware/GN3S_v2/lib/usb_common.sym0000644000175000017500000015247212576764164021214 0ustar carlescarles ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1. Symbol Table A 00D6 AC 00D6 ACC 00E0 ACC.0 00E0 ACC.1 00E1 ACC.2 00E2 ACC.3 00E3 ACC.4 00E4 ACC.5 00E5 ACC.6 00E6 ACC.7 00E7 B 00F0 B.0 00F0 B.1 00F1 B.2 00F2 B.3 00F3 B.4 00F4 B.5 00F5 B.6 00F6 B.7 00F7 CPRL2 00C8 CT2 00C9 CY 00D7 DPH 0083 DPL 0082 EA 00AF ES 00AC ET0 00A9 ET1 00AB ET2 00AD EX0 00A8 EX1 00AA EXEN2 00CB EXF2 00CE F0 00D5 IE 00A8 IE.0 00A8 IE.1 00A9 IE.2 00AA IE.3 00AB IE.4 00AC IE.5 00AD IE.7 00AF IE0 0089 IE1 008B INT0 00B2 INT1 00B3 IP 00B8 IP.0 00B8 IP.1 00B9 IP.2 00BA IP.3 00BB IP.4 00BC IP.5 00BD IT0 0088 IT1 008A OV 00D2 P 00D0 P0 0080 P0.0 0080 P0.1 0081 P0.2 0082 P0.3 0083 P0.4 0084 P0.5 0085 P0.6 0086 P0.7 0087 P1 0090 P1.0 0090 P1.1 0091 P1.2 0092 P1.3 0093 P1.4 0094 P1.5 0095 P1.6 0096 P1.7 0097 P2 00A0 P2.0 00A0 P2.1 00A1 P2.2 00A2 P2.3 00A3 P2.4 00A4 P2.5 00A5 P2.6 00A6 P2.7 00A7 P3 00B0 P3.0 00B0 P3.1 00B1 P3.2 00B2 P3.3 00B3 P3.4 00B4 P3.5 00B5 P3.6 00B6 P3.7 00B7 PCON 0087 PS 00BC PSW 00D0 PSW.0 00D0 PSW.1 00D1 PSW.2 00D2 PSW.3 00D3 PSW.4 00D4 PSW.5 00D5 PSW.6 00D6 PSW.7 00D7 PT0 00B9 PT1 00BB PT2 00BD PX0 00B8 PX1 00BA RB8 009A RCAP2H 00CB RCAP2L 00CA RCLK 00CD REN 009C RI 0098 RS0 00D3 RS1 00D4 RXD 00B0 SBUF 0099 SCON 0098 SCON.0 0098 SCON.1 0099 SCON.2 009A SCON.3 009B SCON.4 009C SCON.5 009D SCON.6 009E SCON.7 009F SM0 009F SM1 009E SM2 009D SP 0081 T2CON 00C8 T2CON.0 00C8 T2CON.1 00C9 T2CON.2 00CA T2CON.3 00CB T2CON.4 00CC T2CON.5 00CD T2CON.6 00CE T2CON.7 00CF TB8 009B TCLK 00CC TCON 0088 TCON.0 0088 TCON.1 0089 TCON.2 008A TCON.3 008B TCON.4 008C TCON.5 008D TCON.6 008E TCON.7 008F TF0 008D TF1 008F TF2 00CF TH0 008C TH1 008D TH2 00CD TI 0099 TL0 008A TL1 008B TL2 00CC TMOD 0089 TR0 008C TR1 008E TR2 00CA TXD 00B1 _A0 = 0080 G _A1 = 0081 G _A2 = 0082 G _A3 = 0083 G _A4 = 0084 G _A5 = 0085 G _A6 = 0086 G _A7 = 0087 G _AC = 00D6 G _ACC = 00E0 G _APTR1H = 009A G _APTR1L = 009B G _AUTODAT1 = 009C G _AUTODAT2 = 009F G _AUTOPTRH2 = 009D G _AUTOPTRL2 = 009E G _AUTOPTRSETUP = 00AF G _B = 00F0 G _BPADDRH = E606 G _BPADDRL = E607 G _BREAKPT = E605 G _CKCON = 008E G _CLRERRCNT = E665 G _CPUCS = E600 G _CP_RL2 = 00C8 G _CT1 = E6FB G _CT2 = E6FC G _CT3 = E6FD G _CT4 = E6FE G _CY = 00D7 G _C_T2 = 00C9 G _D0 = 00B0 G _D1 = 00B1 G _D2 = 00B2 G _D3 = 00B3 G _D4 = 00B4 G _D5 = 00B5 G _D6 = 00B6 G _D7 = 00B7 G _DBUG = E6F8 G _DPH = 0083 G _DPH1 = 0085 G _DPL = 0082 G _DPL1 = 0084 G _DPS = 0086 G _EA = 00AF G _EI2C = 00E9 G _EICON = 00D8 G _EIE = 00E8 G _EIEX4 = 00EA G _EIEX5 = 00EB G _EIEX6 = 00EC G _EIP = 00F8 G _EIPX4 = 00FA G _EIPX5 = 00FB G _EIPX6 = 00FC G _EIUSB = 00E8 G _EP01STAT = 00BA G _EP0BCH = E68A G _EP0BCL = E68B G _EP0BUF = E740 G _EP0CS = E6A0 G _EP1INBC = E68F G _EP1INBUF = E7C0 G _EP1INCFG = E611 G _EP1INCS = E6A2 G _EP1OUTBC = E68D G _EP1OUTBUF = E780 G _EP1OUTCFG = E610 G _EP1OUTCS = E6A1 G _EP2468STAT = 00AA G _EP24FIFOFLGS = 00AB G _EP2AUTOINLENH = E620 G _EP2AUTOINLENL = E621 G _EP2BCH = E690 G _EP2BCL = E691 G _EP2CFG = E612 G _EP2CS = E6A3 G _EP2FIFOBCH = E6AB G _EP2FIFOBCL = E6AC G _EP2FIFOBUF = F000 G _EP2FIFOCFG = E618 G _EP2FIFOFLGS = E6A7 G _EP2FIFOIE = E650 G _EP2FIFOIRQ = E651 G _EP2FIFOPFH = E630 G _EP2FIFOPFL = E631 G _EP2GPIFFLGSEL = E6D2 G _EP2GPIFPFSTOP = E6D3 G _EP2GPIFTRIG = E6D4 G _EP2ISOINPKTS = E640 G _EP4AUTOINLENH = E622 G _EP4AUTOINLENL = E623 G _EP4BCH = E694 G _EP4BCL = E695 G _EP4CFG = E613 G _EP4CS = E6A4 G _EP4FIFOBCH = E6AD G _EP4FIFOBCL = E6AE G _EP4FIFOBUF = F400 G _EP4FIFOCFG = E619 G _EP4FIFOFLGS = E6A8 G _EP4FIFOIE = E652 G _EP4FIFOIRQ = E653 G _EP4FIFOPFH = E632 G _EP4FIFOPFL = E633 G _EP4GPIFFLGSEL = E6DA G _EP4GPIFPFSTOP = E6DB G _EP4GPIFTRIG = E6DC G _EP4ISOINPKTS = E641 G _EP68FIFOFLGS = 00AC G _EP6AUTOINLENH = E624 G _EP6AUTOINLENL = E625 G _EP6BCH = E698 G _EP6BCL = E699 G _EP6CFG = E614 G _EP6CS = E6A5 G _EP6FIFOBCH = E6AF G _EP6FIFOBCL = E6B0 G _EP6FIFOBUF = F800 G _EP6FIFOCFG = E61A G _EP6FIFOFLGS = E6A9 G _EP6FIFOIE = E654 G _EP6FIFOIRQ = E655 G _EP6FIFOPFH = E634 G _EP6FIFOPFL = E635 G _EP6GPIFFLGSEL = E6E2 G _EP6GPIFPFSTOP = E6E3 G _EP6GPIFTRIG = E6E4 G _EP6ISOINPKTS = E642 G _EP8AUTOINLENH = E626 G _EP8AUTOINLENL = E627 G _EP8BCH = E69C G _EP8BCL = E69D G _EP8CFG = E615 G _EP8CS = E6A6 G _EP8FIFOBCH = E6B1 G _EP8FIFOBCL = E6B2 G _EP8FIFOBUF = FC00 G _EP8FIFOCFG = E61B G _EP8FIFOFLGS = E6AA G _EP8FIFOIE = E656 G _EP8FIFOIRQ = E657 G _EP8FIFOPFH = E636 G _EP8FIFOPFL = E637 G _EP8GPIFFLGSEL = E6EA G _EP8GPIFPFSTOP = E6EB G _EP8GPIFTRIG = E6EC G _EP8ISOINPKTS = E643 G _EPIE = E65E G _EPIRQ = E65F G _ERESI = 00DD G _ERRCNTLIM = E664 G _ES0 = 00AC G _ES1 = 00AE G _ET0 = 00A9 G _ET1 = 00AB G _ET2 = 00AD G _EX0 = 00A8 G _EX1 = 00AA G _EXEN2 = 00CB G _EXF2 = 00CE G _EXIF = 0091 G _F0 = 00D5 G _FIFOPINPOLAR = E609 G _FIFORESET = E604 G _FL = 00D1 G _FLOWEQ0CTL = E6C8 G _FLOWEQ1CTL = E6C9 G _FLOWHOLDOFF = E6CA G _FLOWLOGIC = E6C7 G _FLOWSTATE = E6C6 G _FLOWSTB = E6CB G _FLOWSTBEDGE = E6CC G _FLOWSTBHPERIOD = E6CD G _FNADDR = E687 G _GPIFABORT = E6F5 G _GPIFADRH = E6C4 G _GPIFADRL = E6C5 G _GPIFCTLCFG = E6C3 G _GPIFHOLDAMOUNT = E60C G _GPIFIDLECS = E6C1 G _GPIFIDLECTL = E6C2 G _GPIFIE = E660 G _GPIFIRQ = E661 G _GPIFREADYCFG = E6F3 G _GPIFREADYSTAT = E6F4 G _GPIFSGLDATH = 00BD G _GPIFSGLDATLNOX = 00BF G _GPIFSGLDATLX = 00BE G _GPIFTCB0 = E6D1 G _GPIFTCB1 = E6D0 G _GPIFTCB2 = E6CF G _GPIFTCB3 = E6CE G _GPIFTRIG = 00BB G _GPIFWFSELECT = E6C0 G _GPIF_WAVE_DATA = E400 G _I2CS = E678 G _I2CTL = E67A G _I2DAT = E679 G _IBNIE = E658 G _IBNIRQ = E659 G _IE = 00A8 G _IE0 = 0089 G _IE1 = 008B G _IFCONFIG = E601 G _INPKTEND = E648 G _INT2CLR = 00A1 G _INT2IVEC = E666 G _INT4CLR = 00A2 G _INT4IVEC = E667 G _INT6 = 00DB G _INTSETUP = E668 G _IOA = 0080 G _IOB = 0090 G _IOC = 00A0 G _IOD = 00B0 G _IOE = 00B1 G _IP = 00B8 G _IT0 = 0088 G _IT1 = 008A G _MICROFRAME = E686 G _MPAGE = 0092 G _NAKIE = E65A G _NAKIRQ = E65B G _OEA = 00B2 G _OEB = 00B3 G _OEC = 00B4 G _OED = 00B5 G _OEE = 00B6 G _OUTPKTEND = E649 G _OV = 00D2 G _P = 00D0 G _PCON = 0087 G _PI2C = 00F9 G _PINFLAGSAB = E602 G _PINFLAGSCD = E603 G _PORTACFG = E670 G _PORTCCFG = E671 G _PORTECFG = E672 G _PS0 = 00BC G _PS1 = 00BE G _PSW = 00D0 G _PT0 = 00B9 G _PT1 = 00BB G _PT2 = 00BD G _PUSB = 00F8 G _PX0 = 00B8 G _PX1 = 00BA G _RB8 = 009A G _RB81 = 00C2 G _RCAP2H = 00CB G _RCAP2L = 00CA G _RCLK = 00CD G _REN = 009C G _REN1 = 00C4 G _RESI = 00DC G _RES_WAVEDATA_END = E480 G _REVCTL = E60B G _REVID = E60A G _RI = 0098 G _RI1 = 00C0 G _RS0 = 00D3 G _RS1 = 00D4 G _SBUF0 = 0099 G _SBUF1 = 00C1 G _SCON0 = 0098 G _SCON1 = 00C0 G _SEL = 0086 G _SETUPDAT = E6B8 G _SM0 = 009F G _SM01 = 00C7 G _SM1 = 009E G _SM11 = 00C6 G _SM2 = 009D G _SM21 = 00C5 G _SMOD1 = 00DF G _SP = 0081 G _SUDPTRCTL = E6B5 G _SUDPTRH = E6B3 G _SUDPTRL = E6B4 G _SUSPEND = E681 G _T2CON = 00C8 G _TB8 = 009B G _TB81 = 00C3 G _TCLK = 00CC G _TCON = 0088 G _TESTCFG = E6F9 G _TF0 = 008D G _TF1 = 008F G _TF2 = 00CF G _TH0 = 008C G _TH1 = 008D G _TH2 = 00CD G _TI = 0099 G _TI1 = 00C1 G _TL0 = 008A G _TL1 = 008B G _TL2 = 00CC G _TMOD = 0089 G _TOGCTL = E683 G _TR0 = 008C G _TR1 = 008E G _TR2 = 00CA G _UART230 = E608 G _UDMACRCH = E67D G _UDMACRCL = E67E G _UDMACRCQUAL = E67F G _USBCS = E680 G _USBERRIE = E662 G _USBERRIRQ = E663 G _USBFRAMEH = E684 G _USBFRAMEL = E685 G _USBIE = E65C G _USBIRQ = E65D G _USBTEST = E6FA G _WAKEUPCS = E682 G _XAUTODAT1 = E67B G _XAUTODAT2 = E67C G _XGPIFSGLDATH = E6F0 G _XGPIFSGLDATLNOX = E6F2 G _XGPIFSGLDATLX = E6F1 G 4 __usb_alt_setting 0001 GR 4 __usb_config 0000 GR 8 __usb_got_SUDAV 0000 GR 8 __usb_rx_overrun 0001 GR _app_vendor_cmd **** GX 4 _current_config_descr 0006 GR 4 _current_device_descr 0002 GR 4 _current_devqual_descr 0004 GR 15 _epcs 011A GR _full_speed_config_descr **** GX _full_speed_device_descr **** GX _full_speed_devqual_descr **** GX _fx2_reset_data_toggle **** GX _fx2_stall_ep0 **** GX _high_speed_config_descr **** GX _high_speed_device_descr **** GX _high_speed_devqual_descr **** GX _hook_uv **** GX _hook_uv_PARM_2 **** GX 15 _isr_HIGHSPEED 0088 R 15 _isr_SUDAV 003A R 15 _isr_USBRESET 0043 R _nstring_descriptors **** GX 4 _other_config_descr 0008 GR 15 _plausible_endpoint 00FB GR 15 _setup_descriptors 0000 R _string_descriptors **** GX 15 _usb_handle_setup_packet 0163 GR 15 _usb_install_handlers 00CD GR a 00D6 ac 00D6 acc 00E0 acc.0 00E0 acc.1 00E1 acc.2 00E2 acc.3 00E3 acc.4 00E4 acc.5 00E5 acc.6 00E6 acc.7 00E7 ar0 = 0000 ar1 = 0001 ar2 = 0002 ar3 = 0003 ar4 = 0004 ar5 = 0005 ar6 = 0006 ar7 = 0007 b 00F0 b.0 00F0 b.1 00F1 b.2 00F2 b.3 00F3 b.4 00F4 b.5 00F5 b.6 00F6 b.7 00F7 3 b0 = 8000 R 3 b1 = 8100 R 3 b2 = 8200 R 3 b3 = 8300 R 3 b4 = 8400 R 3 b5 = 8500 R 3 b6 = 8600 R 3 b7 = 8700 R 3 bits 0000 R cprl2 00C8 ct2 00C9 cy 00D7 dph 0083 dpl 0082 ea 00AF es 00AC et0 00A9 et1 00AB et2 00AD ex0 00A8 ex1 00AA exen2 00CB exf2 00CE f0 00D5 ie 00A8 ie.0 00A8 ie.1 00A9 ie.2 00AA ie.3 00AB ie.4 00AC ie.5 00AD ie.7 00AF ie0 0089 ie1 008B int0 00B2 int1 00B3 ip 00B8 ip.0 00B8 ip.1 00B9 ip.2 00BA ip.3 00BB ip.4 00BC ip.5 00BD it0 0088 it1 008A ov 00D2 p 00D0 p0 0080 p0.0 0080 p0.1 0081 p0.2 0082 p0.3 0083 p0.4 0084 p0.5 0085 p0.6 0086 p0.7 0087 p1 0090 p1.0 0090 p1.1 0091 p1.2 0092 p1.3 0093 p1.4 0094 p1.5 0095 p1.6 0096 p1.7 0097 p2 00A0 p2.0 00A0 p2.1 00A1 p2.2 00A2 p2.3 00A3 p2.4 00A4 p2.5 00A5 p2.6 00A6 p2.7 00A7 p3 00B0 p3.0 00B0 p3.1 00B1 p3.2 00B2 p3.3 00B3 p3.4 00B4 p3.5 00B5 p3.6 00B6 p3.7 00B7 pcon 0087 ps 00BC psw 00D0 psw.0 00D0 psw.1 00D1 psw.2 00D2 psw.3 00D3 psw.4 00D4 psw.5 00D5 psw.6 00D6 psw.7 00D7 pt0 00B9 pt1 00BB pt2 00BD px0 00B8 px1 00BA rb8 009A rcap2h 00CB rcap2l 00CA rclk 00CD ren 009C ri 0098 rs0 00D3 rs1 00D4 rxd 00B0 sbuf 0099 scon 0098 scon.0 0098 scon.1 0099 scon.2 009A scon.3 009B scon.4 009C scon.5 009D scon.6 009E scon.7 009F sm0 009F sm1 009E sm2 009D sp 0081 t2con 00C8 t2con.0 00C8 t2con.1 00C9 t2con.2 00CA t2con.3 00CB t2con.4 00CC t2con.5 00CD t2con.6 00CE t2con.7 00CF tb8 009B tclk 00CC tcon 0088 tcon.0 0088 tcon.1 0089 tcon.2 008A tcon.3 008B tcon.4 008C tcon.5 008D tcon.6 008E tcon.7 008F tf0 008D tf1 008F tf2 00CF th0 008C th1 008D th2 00CD ti 0099 tl0 008A tl1 008B tl2 00CC tmod 0089 tr0 008C tr1 008E tr2 00CA txd 00B1 ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2. Area Table 0 _CODE size 0 flags 0 1 RSEG size 0 flags 0 2 REG_BANK_0 size 8 flags 4 3 BIT_BANK size 1 flags 4 4 DSEG size A flags 0 5 OSEG size 0 flags 4 6 ISEG size 0 flags 0 7 IABS size 0 flags 8 8 BSEG size 2 flags 80 9 PSEG size 0 flags 50 A XSEG size 0 flags 40 B XABS size 0 flags 48 C HOME size 0 flags 20 D GSINIT0 size 0 flags 20 E GSINIT1 size 0 flags 20 F GSINIT2 size 0 flags 20 10 GSINIT3 size 0 flags 20 11 GSINIT4 size 0 flags 20 12 GSINIT5 size 0 flags 20 13 GSINIT size 6 flags 20 14 GSFINAL size 0 flags 20 15 CSEG size 424 flags 20 16 CONST size 0 flags 20 17 CABS size 0 flags 28 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/fx2utils.rel0000644000175000017500000001624112576764164020576 0ustar carlescarlesXH H 17 areas 146 global symbols M fx2utils O -mmcs51 --model-small S _EP8FIFOCFG DefE61B S _EPIRQ DefE65F S _USBERRIE DefE662 S _EP6CS DefE6A5 S _GPIFHOLDAMOUNT DefE60C S _SBUF1 Def00C1 S _EIEX6 Def00EC S _EP1INBC DefE68F S _EP8FIFOBCL DefE6B2 S _DBUG DefE6F8 S _B Def00F0 S _EXEN2 Def00CB S _EPIE DefE65E S _WAKEUPCS DefE682 S _EP1OUTBC DefE68D S _EP8CS DefE6A6 S _EP2GPIFTRIG DefE6D4 S _SP Def0081 S _SCON0 Def0098 S _AUTODAT1 Def009C S _EI2C Def00E9 S _INT2IVEC DefE666 S _AUTODAT2 Def009F S _SCON1 Def00C0 S _SMOD1 Def00DF S _MICROFRAME DefE686 S _SUDPTRCTL DefE6B5 S _EP4GPIFTRIG DefE6DC S _EP2468STAT Def00AA S _OV Def00D2 S _INT4IVEC DefE667 S _GPIFSGLDATLNOX Def00BF S _T2CON Def00C8 S _EP6GPIFTRIG DefE6E4 S _ACC Def00E0 S _EP2FIFOBUF DefF000 S _C_T2 Def00C9 S _BREAKPT DefE605 S _EP2FIFOPFH DefE630 S _EP8GPIFTRIG DefE6EC S _AUTOPTRH2 Def009D S _SETUPDAT DefE6B8 S _EP2GPIFFLGSEL DefE6D2 S _EP4FIFOBUF DefF400 S _EIPX4 Def00FA S _EP4FIFOPFH DefE632 S _EP2ISOINPKTS DefE640 S _GPIFREADYCFG DefE6F3 S _EIPX5 Def00FB S _EP4GPIFFLGSEL DefE6DA S _FLOWSTBHPERIOD DefE6CD S _EP6FIFOBUF DefF800 S _EXIF Def0091 S _RCLK Def00CD S _EIPX6 Def00FC S _EP2FIFOPFL DefE631 S _EP6FIFOPFH DefE634 S _EP4ISOINPKTS DefE641 S _DPH1 Def0085 S _AUTOPTRL2 Def009E S _EP6GPIFFLGSEL DefE6E2 S _EP8FIFOBUF DefFC00 S _TCLK Def00CC S _PI2C Def00F9 S _EP4FIFOPFL DefE633 S _EP8FIFOPFH DefE636 S _EP6ISOINPKTS DefE642 S _FNADDR DefE687 S _EP8GPIFFLGSEL DefE6EA S _TESTCFG DefE6F9 S _PCON Def0087 S _P Def00D0 S _GPIF_WAVE_DATA DefE400 S _EP6FIFOPFL DefE635 S _EP8ISOINPKTS DefE643 S _I2CS DefE678 S _DPL1 Def0084 S _GPIFIRQ DefE661 S _EP0BCH DefE68A S _EP01STAT Def00BA S _EP8FIFOPFL DefE637 S _EP1INCS DefE6A2 S _EIE Def00E8 S _RESI Def00DC S _GPIFIE DefE660 S _EP2BCH DefE690 S _EP1OUTCS DefE6A1 S _TCON Def0088 S _TMOD Def0089 S _OEA Def00B2 S _EXF2 Def00CE S _EP0BCL DefE68B S _EP4BCH DefE694 S _OEB Def00B3 S _REN1 Def00C4 S _EP2CFG DefE612 S _EP2FIFOIRQ DefE651 S _GPIFREADYSTAT DefE6F4 S _OEC Def00B4 S _EP2BCL DefE691 S _EP6BCH DefE698 S _OED Def00B5 S _EP4CFG DefE613 S _EP2FIFOIE DefE650 S _EP4FIFOIRQ DefE653 S _IOA Def0080 S _OEE Def00B6 S _EP4BCL DefE695 S _EP8BCH DefE69C S _IOB Def0090 S _PUSB Def00F8 S _EP6CFG DefE614 S _EP4FIFOIE DefE652 S _EP6FIFOIRQ DefE655 S _IOC Def00A0 S _mdelay Ref0000 S _INTSETUP DefE668 S _EP6BCL DefE699 S _DPH Def0083 S _IOD Def00B0 S _EP8CFG DefE615 S _EP6FIFOIE DefE654 S _EP8FIFOIRQ DefE657 S _USBFRAMEH DefE684 S _IOE Def00B1 S _RB81 Def00C2 S _EP2AUTOINLENH DefE620 S _EP8BCL DefE69D S _GPIFABORT DefE6F5 S _INT2CLR Def00A1 S _EIP Def00F8 S _IE0 Def0089 S _EP8FIFOIE DefE656 S _IE1 Def008B S _TB81 Def00C3 S _EP4AUTOINLENH DefE622 S _DPL Def0082 S _INT4CLR Def00A2 S _AUTOPTRSETUP Def00AF S _RCAP2H Def00CB S _USBFRAMEL DefE685 S _XGPIFSGLDATLX DefE6F1 S _FLOWEQ0CTL DefE6C8 S _FLOWSTB DefE6CB S _SM01 Def00C7 S _INT6 Def00DB S _EP2AUTOINLENL DefE621 S _EP6AUTOINLENH DefE624 S _SUSPEND DefE681 S _FLOWEQ1CTL DefE6C9 S _EP0BUF DefE740 S _SM11 Def00C6 S _CP_RL2 Def00C8 S _GPIFWFSELECT DefE6C0 S _SM21 Def00C5 S _EP4AUTOINLENL DefE623 S _EP8AUTOINLENH DefE626 S _RCAP2L Def00CA S _SEL Def0086 S _AC Def00D6 S _IFCONFIG DefE601 S _IBNIRQ DefE659 S _GPIFADRH DefE6C4 S _XGPIFSGLDATH DefE6F0 S _REN Def009C S _EP6AUTOINLENL DefE625 S _NAKIRQ DefE65B S _FLOWLOGIC DefE6C7 S _EA Def00AF S _FIFORESET DefE604 S _IBNIE DefE658 S _GPIFIDLECTL DefE6C2 S _UDMACRCH DefE67D S _DPS Def0086 S _EP8AUTOINLENL DefE627 S _NAKIE DefE65A S _CT1 DefE6FB S _ES0 Def00AC S _FIFOPINPOLAR DefE609 S _GPIFADRL DefE6C5 S _EP2GPIFPFSTOP DefE6D3 S _CT2 DefE6FC S _GPIFSGLDATLX Def00BE S _ET0 Def00A9 S _ES1 Def00AE S _SUDPTRH DefE6B3 S _USBTEST DefE6FA S _CT3 DefE6FD S _MPAGE Def0092 S _TF0 Def008D S _ET1 Def00AB S _EP4GPIFPFSTOP DefE6DB S _UDMACRCL DefE67E S _CT4 DefE6FE S _EP24FIFOFLGS Def00AB S _TF1 Def008F S _ET2 Def00AD S _RES_WAVEDATA_END DefE480 S _TH0 Def008C S _RB8 Def009A S _RI1 Def00C0 S _TF2 Def00CF S _EP1INCFG DefE611 S _TOGCTL DefE683 S _EP6GPIFPFSTOP DefE6E3 S _TH1 Def008D S _GPIFSGLDATH Def00BD S _IT0 Def0088 S _EX0 Def00A8 S _EP1OUTCFG DefE610 S _SUDPTRL DefE6B4 S _CKCON Def008E S _IE Def00A8 S _TH2 Def00CD S _EICON Def00D8 S _IT1 Def008A S _TB8 Def009B S _EX1 Def00AA S _TI1 Def00C1 S _CLRERRCNT DefE665 S _GPIFTCB0 DefE6D1 S _EP8GPIFPFSTOP DefE6EB S _REVCTL DefE60B S _ERRCNTLIM DefE664 S _GPIFTCB1 DefE6D0 S _TL0 Def008A S _APTR1H Def009A S _SM0 Def009F S _UART230 DefE608 S _GPIFTCB2 DefE6CF S _TL1 Def008B S _A0 Def0080 S _SM1 Def009E S _GPIFTCB3 DefE6CE S _UDMACRCQUAL DefE67F S _TL2 Def00CC S _A1 Def0081 S _SM2 Def009D S _FL Def00D1 S _EP68FIFOFLGS Def00AC S _A2 Def0082 S _PS0 Def00BC S _I2DAT DefE679 S _APTR1L Def009B S _A3 Def0083 S _D0 Def00B0 S _PT0 Def00B9 S _PS1 Def00BE S _BPADDRH DefE606 S _A4 Def0084 S _D1 Def00B1 S _PT1 Def00BB S _RS0 Def00D3 S _USBIRQ DefE65D S _PORTACFG DefE670 S _FLOWSTBEDGE DefE6CC S _A5 Def0085 S _TR0 Def008C S _D2 Def00B2 S _PT2 Def00BD S _RS1 Def00D4 S _F0 Def00D5 S _PINFLAGSAB DefE602 S _EP2FIFOFLGS DefE6A7 S _A6 Def0086 S _TR1 Def008E S _D3 Def00B3 S _USBIE DefE65C S _PORTCCFG DefE671 S _EP2FIFOBCH DefE6AB S _A7 Def0087 S _D4 Def00B4 S _PX0 Def00B8 S _TR2 Def00CA S _ERESI Def00DD S _EIUSB Def00E8 S _BPADDRL DefE607 S _EP4FIFOFLGS DefE6A8 S _GPIFCTLCFG DefE6C3 S _FLOWSTATE DefE6C6 S _IP Def00B8 S _D5 Def00B5 S _PX1 Def00BA S _REVID DefE60A S _PORTECFG DefE672 S _EP4FIFOBCH DefE6AD S _GPIFIDLECS DefE6C1 S _FLOWHOLDOFF DefE6CA S _EP1INBUF DefE7C0 S _PSW Def00D0 S _D6 Def00B6 S _PINFLAGSCD DefE603 S _EP2FIFOCFG DefE618 S _XAUTODAT1 DefE67B S _EP0CS DefE6A0 S _EP6FIFOFLGS DefE6A9 S _EP1OUTBUF DefE780 S _RI Def0098 S _D7 Def00B7 S _XAUTODAT2 DefE67C S _EP2FIFOBCL DefE6AC S _EP6FIFOBCH DefE6AF S _GPIFTRIG Def00BB S _CY Def00D7 S _EP4FIFOCFG DefE619 S _INPKTEND DefE648 S _EP2CS DefE6A3 S _EP8FIFOFLGS DefE6AA S _TI Def0099 S _CPUCS DefE600 S _OUTPKTEND DefE649 S _I2CTL DefE67A S _EP4FIFOBCL DefE6AE S _EP8FIFOBCH DefE6B1 S _XGPIFSGLDATLNOX DefE6F2 S _EP6FIFOCFG DefE61A S _USBERRIRQ DefE663 S _EP4CS DefE6A4 S _EIEX4 Def00EA S _USBCS DefE680 S _EP6FIFOBCL DefE6B0 S _SBUF0 Def0099 S _EIEX5 Def00EB A _CODE size 0 flags 0 addr 0 A RSEG size 0 flags 0 addr 0 A REG_BANK_0 size 8 flags 4 addr 0 A DSEG size 0 flags 0 addr 0 A OSEG size 0 flags 4 addr 0 A ISEG size 0 flags 0 addr 0 A IABS size 0 flags 8 addr 0 A BSEG size 0 flags 80 addr 0 A PSEG size 0 flags 50 addr 0 A XSEG size 0 flags 40 addr 0 A XABS size 0 flags 48 addr 0 A HOME size 0 flags 20 addr 0 A GSINIT0 size 0 flags 20 addr 0 A GSINIT1 size 0 flags 20 addr 0 A GSINIT2 size 0 flags 20 addr 0 A GSINIT3 size 0 flags 20 addr 0 A GSINIT4 size 0 flags 20 addr 0 A GSINIT5 size 0 flags 20 addr 0 A GSINIT size 0 flags 20 addr 0 A GSFINAL size 0 flags 20 addr 0 A CSEG size 46 flags 20 addr 0 S _fx2_renumerate Def0022 S _fx2_reset_data_toggle Def0008 S _fx2_stall_ep0 Def0000 A CONST size 0 flags 20 addr 0 A CABS size 0 flags 28 addr 0 T 00 00 R 00 00 00 02 T 00 00 R 00 00 00 14 T 00 00 90 E6 A0 E0 44 01 F0 22 R 00 00 00 14 T 00 08 R 00 00 00 14 T 00 08 AA 82 74 80 5A C4 23 54 1F FB 74 0F 5A 90 R 00 00 00 14 T 00 16 E6 83 4B F0 90 E6 83 E0 44 20 F0 22 R 00 00 00 14 T 00 22 R 00 00 00 14 T 00 22 90 E6 80 E0 44 0A F0 90 00 FA 12 00 00 90 R 00 00 00 14 02 0D 00 73 T 00 30 E6 5D 74 FF F0 90 E6 5F 74 FF F0 53 91 EF R 00 00 00 14 T 00 3E 90 E6 80 E0 54 F7 F0 22 R 00 00 00 14 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/delay.asm0000644000175000017500000001344512576764164020115 0ustar carlescarles;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) ; This file was generated Mon Jul 30 11:40:52 2012 ;-------------------------------------------------------- .module delay .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _mdelay .globl _udelay ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (DATA) ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (DATA) ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'udelay1' ;------------------------------------------------------------ ;------------------------------------------------------------ ; delay.c:27: udelay1 (void) _naked ; ----------------------------------------- ; function udelay1 ; ----------------------------------------- _udelay1: ; naked function: no prologue. ; delay.c:31: _endasm; ; lcall that got us here took 4 bus cycles ret ; 4 bus cycles ; naked function: no epilogue. ;------------------------------------------------------------ ;Allocation info for local variables in function 'udelay' ;------------------------------------------------------------ ;usecs Allocated to registers r2 ;------------------------------------------------------------ ; delay.c:38: udelay (unsigned char usecs) ; ----------------------------------------- ; function udelay ; ----------------------------------------- _udelay: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 mov r2,dpl ; delay.c:40: do { 00101$: ; delay.c:41: udelay1 (); lcall _udelay1 ; delay.c:42: } while (--usecs != 0); djnz r2,00101$ ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'mdelay1' ;------------------------------------------------------------ ;------------------------------------------------------------ ; delay.c:54: mdelay1 (void) _naked ; ----------------------------------------- ; function mdelay1 ; ----------------------------------------- _mdelay1: ; naked function: no prologue. ; delay.c:65: _endasm; mov dptr,#(-1200 & 0xffff) 002$: inc dptr ; 3 bus cycles mov a, dpl ; 2 bus cycles orl a, dph ; 2 bus cycles jnz 002$ ; 3 bus cycles ret ; naked function: no epilogue. ;------------------------------------------------------------ ;Allocation info for local variables in function 'mdelay' ;------------------------------------------------------------ ;msecs Allocated to registers r2 r3 ;------------------------------------------------------------ ; delay.c:69: mdelay (unsigned int msecs) ; ----------------------------------------- ; function mdelay ; ----------------------------------------- _mdelay: mov r2,dpl mov r3,dph ; delay.c:71: do { 00101$: ; delay.c:72: mdelay1 (); lcall _mdelay1 ; delay.c:73: } while (--msecs != 0); dec r2 cjne r2,#0xff,00108$ dec r3 00108$: mov a,r2 orl a,r3 jnz 00101$ ret .area CSEG (CODE) .area CONST (CODE) .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/fx2utils.lst0000644000175000017500000012423212576764164020616 0ustar carlescarles 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) 4 ; This file was generated Mon Jul 30 11:40:52 2012 5 ;-------------------------------------------------------- 6 .module fx2utils 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _EIPX6 13 .globl _EIPX5 14 .globl _EIPX4 15 .globl _PI2C 16 .globl _PUSB 17 .globl _EIEX6 18 .globl _EIEX5 19 .globl _EIEX4 20 .globl _EI2C 21 .globl _EIUSB 22 .globl _SMOD1 23 .globl _ERESI 24 .globl _RESI 25 .globl _INT6 26 .globl _CY 27 .globl _AC 28 .globl _F0 29 .globl _RS1 30 .globl _RS0 31 .globl _OV 32 .globl _FL 33 .globl _P 34 .globl _TF2 35 .globl _EXF2 36 .globl _RCLK 37 .globl _TCLK 38 .globl _EXEN2 39 .globl _TR2 40 .globl _C_T2 41 .globl _CP_RL2 42 .globl _SM01 43 .globl _SM11 44 .globl _SM21 45 .globl _REN1 46 .globl _TB81 47 .globl _RB81 48 .globl _TI1 49 .globl _RI1 50 .globl _PS1 51 .globl _PT2 52 .globl _PS0 53 .globl _PT1 54 .globl _PX1 55 .globl _PT0 56 .globl _PX0 57 .globl _D7 58 .globl _D6 59 .globl _D5 60 .globl _D4 61 .globl _D3 62 .globl _D2 63 .globl _D1 64 .globl _D0 65 .globl _EA 66 .globl _ES1 67 .globl _ET2 68 .globl _ES0 69 .globl _ET1 70 .globl _EX1 71 .globl _ET0 72 .globl _EX0 73 .globl _SM0 74 .globl _SM1 75 .globl _SM2 76 .globl _REN 77 .globl _TB8 78 .globl _RB8 79 .globl _TI 80 .globl _RI 81 .globl _TF1 82 .globl _TR1 83 .globl _TF0 84 .globl _TR0 85 .globl _IE1 86 .globl _IT1 87 .globl _IE0 88 .globl _IT0 89 .globl _SEL 90 .globl _A7 91 .globl _A6 92 .globl _A5 93 .globl _A4 94 .globl _A3 95 .globl _A2 96 .globl _A1 97 .globl _A0 98 .globl _EIP 99 .globl _B 100 .globl _EIE 101 .globl _ACC 102 .globl _EICON 103 .globl _PSW 104 .globl _TH2 105 .globl _TL2 106 .globl _RCAP2H 107 .globl _RCAP2L 108 .globl _T2CON 109 .globl _SBUF1 110 .globl _SCON1 111 .globl _GPIFSGLDATLNOX 112 .globl _GPIFSGLDATLX 113 .globl _GPIFSGLDATH 114 .globl _GPIFTRIG 115 .globl _EP01STAT 116 .globl _IP 117 .globl _OEE 118 .globl _OED 119 .globl _OEC 120 .globl _OEB 121 .globl _OEA 122 .globl _IOE 123 .globl _IOD 124 .globl _AUTOPTRSETUP 125 .globl _EP68FIFOFLGS 126 .globl _EP24FIFOFLGS 127 .globl _EP2468STAT 128 .globl _IE 129 .globl _INT4CLR 130 .globl _INT2CLR 131 .globl _IOC 132 .globl _AUTODAT2 133 .globl _AUTOPTRL2 134 .globl _AUTOPTRH2 135 .globl _AUTODAT1 136 .globl _APTR1L 137 .globl _APTR1H 138 .globl _SBUF0 139 .globl _SCON0 140 .globl _MPAGE 141 .globl _EXIF 142 .globl _IOB 143 .globl _CKCON 144 .globl _TH1 145 .globl _TH0 146 .globl _TL1 147 .globl _TL0 148 .globl _TMOD 149 .globl _TCON 150 .globl _PCON 151 .globl _DPS 152 .globl _DPH1 153 .globl _DPL1 154 .globl _DPH 155 .globl _DPL 156 .globl _SP 157 .globl _IOA 158 .globl _EP8FIFOBUF 159 .globl _EP6FIFOBUF 160 .globl _EP4FIFOBUF 161 .globl _EP2FIFOBUF 162 .globl _EP1INBUF 163 .globl _EP1OUTBUF 164 .globl _EP0BUF 165 .globl _CT4 166 .globl _CT3 167 .globl _CT2 168 .globl _CT1 169 .globl _USBTEST 170 .globl _TESTCFG 171 .globl _DBUG 172 .globl _UDMACRCQUAL 173 .globl _UDMACRCL 174 .globl _UDMACRCH 175 .globl _GPIFHOLDAMOUNT 176 .globl _FLOWSTBHPERIOD 177 .globl _FLOWSTBEDGE 178 .globl _FLOWSTB 179 .globl _FLOWHOLDOFF 180 .globl _FLOWEQ1CTL 181 .globl _FLOWEQ0CTL 182 .globl _FLOWLOGIC 183 .globl _FLOWSTATE 184 .globl _GPIFABORT 185 .globl _GPIFREADYSTAT 186 .globl _GPIFREADYCFG 187 .globl _XGPIFSGLDATLNOX 188 .globl _XGPIFSGLDATLX 189 .globl _XGPIFSGLDATH 190 .globl _EP8GPIFTRIG 191 .globl _EP8GPIFPFSTOP 192 .globl _EP8GPIFFLGSEL 193 .globl _EP6GPIFTRIG 194 .globl _EP6GPIFPFSTOP 195 .globl _EP6GPIFFLGSEL 196 .globl _EP4GPIFTRIG 197 .globl _EP4GPIFPFSTOP 198 .globl _EP4GPIFFLGSEL 199 .globl _EP2GPIFTRIG 200 .globl _EP2GPIFPFSTOP 201 .globl _EP2GPIFFLGSEL 202 .globl _GPIFTCB0 203 .globl _GPIFTCB1 204 .globl _GPIFTCB2 205 .globl _GPIFTCB3 206 .globl _GPIFADRL 207 .globl _GPIFADRH 208 .globl _GPIFCTLCFG 209 .globl _GPIFIDLECTL 210 .globl _GPIFIDLECS 211 .globl _GPIFWFSELECT 212 .globl _SETUPDAT 213 .globl _SUDPTRCTL 214 .globl _SUDPTRL 215 .globl _SUDPTRH 216 .globl _EP8FIFOBCL 217 .globl _EP8FIFOBCH 218 .globl _EP6FIFOBCL 219 .globl _EP6FIFOBCH 220 .globl _EP4FIFOBCL 221 .globl _EP4FIFOBCH 222 .globl _EP2FIFOBCL 223 .globl _EP2FIFOBCH 224 .globl _EP8FIFOFLGS 225 .globl _EP6FIFOFLGS 226 .globl _EP4FIFOFLGS 227 .globl _EP2FIFOFLGS 228 .globl _EP8CS 229 .globl _EP6CS 230 .globl _EP4CS 231 .globl _EP2CS 232 .globl _EP1INCS 233 .globl _EP1OUTCS 234 .globl _EP0CS 235 .globl _EP8BCL 236 .globl _EP8BCH 237 .globl _EP6BCL 238 .globl _EP6BCH 239 .globl _EP4BCL 240 .globl _EP4BCH 241 .globl _EP2BCL 242 .globl _EP2BCH 243 .globl _EP1INBC 244 .globl _EP1OUTBC 245 .globl _EP0BCL 246 .globl _EP0BCH 247 .globl _FNADDR 248 .globl _MICROFRAME 249 .globl _USBFRAMEL 250 .globl _USBFRAMEH 251 .globl _TOGCTL 252 .globl _WAKEUPCS 253 .globl _SUSPEND 254 .globl _USBCS 255 .globl _XAUTODAT2 256 .globl _XAUTODAT1 257 .globl _I2CTL 258 .globl _I2DAT 259 .globl _I2CS 260 .globl _PORTECFG 261 .globl _PORTCCFG 262 .globl _PORTACFG 263 .globl _INTSETUP 264 .globl _INT4IVEC 265 .globl _INT2IVEC 266 .globl _CLRERRCNT 267 .globl _ERRCNTLIM 268 .globl _USBERRIRQ 269 .globl _USBERRIE 270 .globl _GPIFIRQ 271 .globl _GPIFIE 272 .globl _EPIRQ 273 .globl _EPIE 274 .globl _USBIRQ 275 .globl _USBIE 276 .globl _NAKIRQ 277 .globl _NAKIE 278 .globl _IBNIRQ 279 .globl _IBNIE 280 .globl _EP8FIFOIRQ 281 .globl _EP8FIFOIE 282 .globl _EP6FIFOIRQ 283 .globl _EP6FIFOIE 284 .globl _EP4FIFOIRQ 285 .globl _EP4FIFOIE 286 .globl _EP2FIFOIRQ 287 .globl _EP2FIFOIE 288 .globl _OUTPKTEND 289 .globl _INPKTEND 290 .globl _EP8ISOINPKTS 291 .globl _EP6ISOINPKTS 292 .globl _EP4ISOINPKTS 293 .globl _EP2ISOINPKTS 294 .globl _EP8FIFOPFL 295 .globl _EP8FIFOPFH 296 .globl _EP6FIFOPFL 297 .globl _EP6FIFOPFH 298 .globl _EP4FIFOPFL 299 .globl _EP4FIFOPFH 300 .globl _EP2FIFOPFL 301 .globl _EP2FIFOPFH 302 .globl _EP8AUTOINLENL 303 .globl _EP8AUTOINLENH 304 .globl _EP6AUTOINLENL 305 .globl _EP6AUTOINLENH 306 .globl _EP4AUTOINLENL 307 .globl _EP4AUTOINLENH 308 .globl _EP2AUTOINLENL 309 .globl _EP2AUTOINLENH 310 .globl _EP8FIFOCFG 311 .globl _EP6FIFOCFG 312 .globl _EP4FIFOCFG 313 .globl _EP2FIFOCFG 314 .globl _EP8CFG 315 .globl _EP6CFG 316 .globl _EP4CFG 317 .globl _EP2CFG 318 .globl _EP1INCFG 319 .globl _EP1OUTCFG 320 .globl _REVCTL 321 .globl _REVID 322 .globl _FIFOPINPOLAR 323 .globl _UART230 324 .globl _BPADDRL 325 .globl _BPADDRH 326 .globl _BREAKPT 327 .globl _FIFORESET 328 .globl _PINFLAGSCD 329 .globl _PINFLAGSAB 330 .globl _IFCONFIG 331 .globl _CPUCS 332 .globl _RES_WAVEDATA_END 333 .globl _GPIF_WAVE_DATA 334 .globl _fx2_stall_ep0 335 .globl _fx2_reset_data_toggle 336 .globl _fx2_renumerate 337 ;-------------------------------------------------------- 338 ; special function registers 339 ;-------------------------------------------------------- 340 .area RSEG (DATA) 0080 341 _IOA = 0x0080 0081 342 _SP = 0x0081 0082 343 _DPL = 0x0082 0083 344 _DPH = 0x0083 0084 345 _DPL1 = 0x0084 0085 346 _DPH1 = 0x0085 0086 347 _DPS = 0x0086 0087 348 _PCON = 0x0087 0088 349 _TCON = 0x0088 0089 350 _TMOD = 0x0089 008A 351 _TL0 = 0x008a 008B 352 _TL1 = 0x008b 008C 353 _TH0 = 0x008c 008D 354 _TH1 = 0x008d 008E 355 _CKCON = 0x008e 0090 356 _IOB = 0x0090 0091 357 _EXIF = 0x0091 0092 358 _MPAGE = 0x0092 0098 359 _SCON0 = 0x0098 0099 360 _SBUF0 = 0x0099 009A 361 _APTR1H = 0x009a 009B 362 _APTR1L = 0x009b 009C 363 _AUTODAT1 = 0x009c 009D 364 _AUTOPTRH2 = 0x009d 009E 365 _AUTOPTRL2 = 0x009e 009F 366 _AUTODAT2 = 0x009f 00A0 367 _IOC = 0x00a0 00A1 368 _INT2CLR = 0x00a1 00A2 369 _INT4CLR = 0x00a2 00A8 370 _IE = 0x00a8 00AA 371 _EP2468STAT = 0x00aa 00AB 372 _EP24FIFOFLGS = 0x00ab 00AC 373 _EP68FIFOFLGS = 0x00ac 00AF 374 _AUTOPTRSETUP = 0x00af 00B0 375 _IOD = 0x00b0 00B1 376 _IOE = 0x00b1 00B2 377 _OEA = 0x00b2 00B3 378 _OEB = 0x00b3 00B4 379 _OEC = 0x00b4 00B5 380 _OED = 0x00b5 00B6 381 _OEE = 0x00b6 00B8 382 _IP = 0x00b8 00BA 383 _EP01STAT = 0x00ba 00BB 384 _GPIFTRIG = 0x00bb 00BD 385 _GPIFSGLDATH = 0x00bd 00BE 386 _GPIFSGLDATLX = 0x00be 00BF 387 _GPIFSGLDATLNOX = 0x00bf 00C0 388 _SCON1 = 0x00c0 00C1 389 _SBUF1 = 0x00c1 00C8 390 _T2CON = 0x00c8 00CA 391 _RCAP2L = 0x00ca 00CB 392 _RCAP2H = 0x00cb 00CC 393 _TL2 = 0x00cc 00CD 394 _TH2 = 0x00cd 00D0 395 _PSW = 0x00d0 00D8 396 _EICON = 0x00d8 00E0 397 _ACC = 0x00e0 00E8 398 _EIE = 0x00e8 00F0 399 _B = 0x00f0 00F8 400 _EIP = 0x00f8 401 ;-------------------------------------------------------- 402 ; special function bits 403 ;-------------------------------------------------------- 404 .area RSEG (DATA) 0080 405 _A0 = 0x0080 0081 406 _A1 = 0x0081 0082 407 _A2 = 0x0082 0083 408 _A3 = 0x0083 0084 409 _A4 = 0x0084 0085 410 _A5 = 0x0085 0086 411 _A6 = 0x0086 0087 412 _A7 = 0x0087 0086 413 _SEL = 0x0086 0088 414 _IT0 = 0x0088 0089 415 _IE0 = 0x0089 008A 416 _IT1 = 0x008a 008B 417 _IE1 = 0x008b 008C 418 _TR0 = 0x008c 008D 419 _TF0 = 0x008d 008E 420 _TR1 = 0x008e 008F 421 _TF1 = 0x008f 0098 422 _RI = 0x0098 0099 423 _TI = 0x0099 009A 424 _RB8 = 0x009a 009B 425 _TB8 = 0x009b 009C 426 _REN = 0x009c 009D 427 _SM2 = 0x009d 009E 428 _SM1 = 0x009e 009F 429 _SM0 = 0x009f 00A8 430 _EX0 = 0x00a8 00A9 431 _ET0 = 0x00a9 00AA 432 _EX1 = 0x00aa 00AB 433 _ET1 = 0x00ab 00AC 434 _ES0 = 0x00ac 00AD 435 _ET2 = 0x00ad 00AE 436 _ES1 = 0x00ae 00AF 437 _EA = 0x00af 00B0 438 _D0 = 0x00b0 00B1 439 _D1 = 0x00b1 00B2 440 _D2 = 0x00b2 00B3 441 _D3 = 0x00b3 00B4 442 _D4 = 0x00b4 00B5 443 _D5 = 0x00b5 00B6 444 _D6 = 0x00b6 00B7 445 _D7 = 0x00b7 00B8 446 _PX0 = 0x00b8 00B9 447 _PT0 = 0x00b9 00BA 448 _PX1 = 0x00ba 00BB 449 _PT1 = 0x00bb 00BC 450 _PS0 = 0x00bc 00BD 451 _PT2 = 0x00bd 00BE 452 _PS1 = 0x00be 00C0 453 _RI1 = 0x00c0 00C1 454 _TI1 = 0x00c1 00C2 455 _RB81 = 0x00c2 00C3 456 _TB81 = 0x00c3 00C4 457 _REN1 = 0x00c4 00C5 458 _SM21 = 0x00c5 00C6 459 _SM11 = 0x00c6 00C7 460 _SM01 = 0x00c7 00C8 461 _CP_RL2 = 0x00c8 00C9 462 _C_T2 = 0x00c9 00CA 463 _TR2 = 0x00ca 00CB 464 _EXEN2 = 0x00cb 00CC 465 _TCLK = 0x00cc 00CD 466 _RCLK = 0x00cd 00CE 467 _EXF2 = 0x00ce 00CF 468 _TF2 = 0x00cf 00D0 469 _P = 0x00d0 00D1 470 _FL = 0x00d1 00D2 471 _OV = 0x00d2 00D3 472 _RS0 = 0x00d3 00D4 473 _RS1 = 0x00d4 00D5 474 _F0 = 0x00d5 00D6 475 _AC = 0x00d6 00D7 476 _CY = 0x00d7 00DB 477 _INT6 = 0x00db 00DC 478 _RESI = 0x00dc 00DD 479 _ERESI = 0x00dd 00DF 480 _SMOD1 = 0x00df 00E8 481 _EIUSB = 0x00e8 00E9 482 _EI2C = 0x00e9 00EA 483 _EIEX4 = 0x00ea 00EB 484 _EIEX5 = 0x00eb 00EC 485 _EIEX6 = 0x00ec 00F8 486 _PUSB = 0x00f8 00F9 487 _PI2C = 0x00f9 00FA 488 _EIPX4 = 0x00fa 00FB 489 _EIPX5 = 0x00fb 00FC 490 _EIPX6 = 0x00fc 491 ;-------------------------------------------------------- 492 ; overlayable register banks 493 ;-------------------------------------------------------- 494 .area REG_BANK_0 (REL,OVR,DATA) 0000 495 .ds 8 496 ;-------------------------------------------------------- 497 ; internal ram data 498 ;-------------------------------------------------------- 499 .area DSEG (DATA) 500 ;-------------------------------------------------------- 501 ; overlayable items in internal ram 502 ;-------------------------------------------------------- 503 .area OSEG (OVR,DATA) 504 ;-------------------------------------------------------- 505 ; indirectly addressable internal ram data 506 ;-------------------------------------------------------- 507 .area ISEG (DATA) 508 ;-------------------------------------------------------- 509 ; absolute internal ram data 510 ;-------------------------------------------------------- 511 .area IABS (ABS,DATA) 512 .area IABS (ABS,DATA) 513 ;-------------------------------------------------------- 514 ; bit data 515 ;-------------------------------------------------------- 516 .area BSEG (BIT) 517 ;-------------------------------------------------------- 518 ; paged external ram data 519 ;-------------------------------------------------------- 520 .area PSEG (PAG,XDATA) 521 ;-------------------------------------------------------- 522 ; external ram data 523 ;-------------------------------------------------------- 524 .area XSEG (XDATA) E400 525 _GPIF_WAVE_DATA = 0xe400 E480 526 _RES_WAVEDATA_END = 0xe480 E600 527 _CPUCS = 0xe600 E601 528 _IFCONFIG = 0xe601 E602 529 _PINFLAGSAB = 0xe602 E603 530 _PINFLAGSCD = 0xe603 E604 531 _FIFORESET = 0xe604 E605 532 _BREAKPT = 0xe605 E606 533 _BPADDRH = 0xe606 E607 534 _BPADDRL = 0xe607 E608 535 _UART230 = 0xe608 E609 536 _FIFOPINPOLAR = 0xe609 E60A 537 _REVID = 0xe60a E60B 538 _REVCTL = 0xe60b E610 539 _EP1OUTCFG = 0xe610 E611 540 _EP1INCFG = 0xe611 E612 541 _EP2CFG = 0xe612 E613 542 _EP4CFG = 0xe613 E614 543 _EP6CFG = 0xe614 E615 544 _EP8CFG = 0xe615 E618 545 _EP2FIFOCFG = 0xe618 E619 546 _EP4FIFOCFG = 0xe619 E61A 547 _EP6FIFOCFG = 0xe61a E61B 548 _EP8FIFOCFG = 0xe61b E620 549 _EP2AUTOINLENH = 0xe620 E621 550 _EP2AUTOINLENL = 0xe621 E622 551 _EP4AUTOINLENH = 0xe622 E623 552 _EP4AUTOINLENL = 0xe623 E624 553 _EP6AUTOINLENH = 0xe624 E625 554 _EP6AUTOINLENL = 0xe625 E626 555 _EP8AUTOINLENH = 0xe626 E627 556 _EP8AUTOINLENL = 0xe627 E630 557 _EP2FIFOPFH = 0xe630 E631 558 _EP2FIFOPFL = 0xe631 E632 559 _EP4FIFOPFH = 0xe632 E633 560 _EP4FIFOPFL = 0xe633 E634 561 _EP6FIFOPFH = 0xe634 E635 562 _EP6FIFOPFL = 0xe635 E636 563 _EP8FIFOPFH = 0xe636 E637 564 _EP8FIFOPFL = 0xe637 E640 565 _EP2ISOINPKTS = 0xe640 E641 566 _EP4ISOINPKTS = 0xe641 E642 567 _EP6ISOINPKTS = 0xe642 E643 568 _EP8ISOINPKTS = 0xe643 E648 569 _INPKTEND = 0xe648 E649 570 _OUTPKTEND = 0xe649 E650 571 _EP2FIFOIE = 0xe650 E651 572 _EP2FIFOIRQ = 0xe651 E652 573 _EP4FIFOIE = 0xe652 E653 574 _EP4FIFOIRQ = 0xe653 E654 575 _EP6FIFOIE = 0xe654 E655 576 _EP6FIFOIRQ = 0xe655 E656 577 _EP8FIFOIE = 0xe656 E657 578 _EP8FIFOIRQ = 0xe657 E658 579 _IBNIE = 0xe658 E659 580 _IBNIRQ = 0xe659 E65A 581 _NAKIE = 0xe65a E65B 582 _NAKIRQ = 0xe65b E65C 583 _USBIE = 0xe65c E65D 584 _USBIRQ = 0xe65d E65E 585 _EPIE = 0xe65e E65F 586 _EPIRQ = 0xe65f E660 587 _GPIFIE = 0xe660 E661 588 _GPIFIRQ = 0xe661 E662 589 _USBERRIE = 0xe662 E663 590 _USBERRIRQ = 0xe663 E664 591 _ERRCNTLIM = 0xe664 E665 592 _CLRERRCNT = 0xe665 E666 593 _INT2IVEC = 0xe666 E667 594 _INT4IVEC = 0xe667 E668 595 _INTSETUP = 0xe668 E670 596 _PORTACFG = 0xe670 E671 597 _PORTCCFG = 0xe671 E672 598 _PORTECFG = 0xe672 E678 599 _I2CS = 0xe678 E679 600 _I2DAT = 0xe679 E67A 601 _I2CTL = 0xe67a E67B 602 _XAUTODAT1 = 0xe67b E67C 603 _XAUTODAT2 = 0xe67c E680 604 _USBCS = 0xe680 E681 605 _SUSPEND = 0xe681 E682 606 _WAKEUPCS = 0xe682 E683 607 _TOGCTL = 0xe683 E684 608 _USBFRAMEH = 0xe684 E685 609 _USBFRAMEL = 0xe685 E686 610 _MICROFRAME = 0xe686 E687 611 _FNADDR = 0xe687 E68A 612 _EP0BCH = 0xe68a E68B 613 _EP0BCL = 0xe68b E68D 614 _EP1OUTBC = 0xe68d E68F 615 _EP1INBC = 0xe68f E690 616 _EP2BCH = 0xe690 E691 617 _EP2BCL = 0xe691 E694 618 _EP4BCH = 0xe694 E695 619 _EP4BCL = 0xe695 E698 620 _EP6BCH = 0xe698 E699 621 _EP6BCL = 0xe699 E69C 622 _EP8BCH = 0xe69c E69D 623 _EP8BCL = 0xe69d E6A0 624 _EP0CS = 0xe6a0 E6A1 625 _EP1OUTCS = 0xe6a1 E6A2 626 _EP1INCS = 0xe6a2 E6A3 627 _EP2CS = 0xe6a3 E6A4 628 _EP4CS = 0xe6a4 E6A5 629 _EP6CS = 0xe6a5 E6A6 630 _EP8CS = 0xe6a6 E6A7 631 _EP2FIFOFLGS = 0xe6a7 E6A8 632 _EP4FIFOFLGS = 0xe6a8 E6A9 633 _EP6FIFOFLGS = 0xe6a9 E6AA 634 _EP8FIFOFLGS = 0xe6aa E6AB 635 _EP2FIFOBCH = 0xe6ab E6AC 636 _EP2FIFOBCL = 0xe6ac E6AD 637 _EP4FIFOBCH = 0xe6ad E6AE 638 _EP4FIFOBCL = 0xe6ae E6AF 639 _EP6FIFOBCH = 0xe6af E6B0 640 _EP6FIFOBCL = 0xe6b0 E6B1 641 _EP8FIFOBCH = 0xe6b1 E6B2 642 _EP8FIFOBCL = 0xe6b2 E6B3 643 _SUDPTRH = 0xe6b3 E6B4 644 _SUDPTRL = 0xe6b4 E6B5 645 _SUDPTRCTL = 0xe6b5 E6B8 646 _SETUPDAT = 0xe6b8 E6C0 647 _GPIFWFSELECT = 0xe6c0 E6C1 648 _GPIFIDLECS = 0xe6c1 E6C2 649 _GPIFIDLECTL = 0xe6c2 E6C3 650 _GPIFCTLCFG = 0xe6c3 E6C4 651 _GPIFADRH = 0xe6c4 E6C5 652 _GPIFADRL = 0xe6c5 E6CE 653 _GPIFTCB3 = 0xe6ce E6CF 654 _GPIFTCB2 = 0xe6cf E6D0 655 _GPIFTCB1 = 0xe6d0 E6D1 656 _GPIFTCB0 = 0xe6d1 E6D2 657 _EP2GPIFFLGSEL = 0xe6d2 E6D3 658 _EP2GPIFPFSTOP = 0xe6d3 E6D4 659 _EP2GPIFTRIG = 0xe6d4 E6DA 660 _EP4GPIFFLGSEL = 0xe6da E6DB 661 _EP4GPIFPFSTOP = 0xe6db E6DC 662 _EP4GPIFTRIG = 0xe6dc E6E2 663 _EP6GPIFFLGSEL = 0xe6e2 E6E3 664 _EP6GPIFPFSTOP = 0xe6e3 E6E4 665 _EP6GPIFTRIG = 0xe6e4 E6EA 666 _EP8GPIFFLGSEL = 0xe6ea E6EB 667 _EP8GPIFPFSTOP = 0xe6eb E6EC 668 _EP8GPIFTRIG = 0xe6ec E6F0 669 _XGPIFSGLDATH = 0xe6f0 E6F1 670 _XGPIFSGLDATLX = 0xe6f1 E6F2 671 _XGPIFSGLDATLNOX = 0xe6f2 E6F3 672 _GPIFREADYCFG = 0xe6f3 E6F4 673 _GPIFREADYSTAT = 0xe6f4 E6F5 674 _GPIFABORT = 0xe6f5 E6C6 675 _FLOWSTATE = 0xe6c6 E6C7 676 _FLOWLOGIC = 0xe6c7 E6C8 677 _FLOWEQ0CTL = 0xe6c8 E6C9 678 _FLOWEQ1CTL = 0xe6c9 E6CA 679 _FLOWHOLDOFF = 0xe6ca E6CB 680 _FLOWSTB = 0xe6cb E6CC 681 _FLOWSTBEDGE = 0xe6cc E6CD 682 _FLOWSTBHPERIOD = 0xe6cd E60C 683 _GPIFHOLDAMOUNT = 0xe60c E67D 684 _UDMACRCH = 0xe67d E67E 685 _UDMACRCL = 0xe67e E67F 686 _UDMACRCQUAL = 0xe67f E6F8 687 _DBUG = 0xe6f8 E6F9 688 _TESTCFG = 0xe6f9 E6FA 689 _USBTEST = 0xe6fa E6FB 690 _CT1 = 0xe6fb E6FC 691 _CT2 = 0xe6fc E6FD 692 _CT3 = 0xe6fd E6FE 693 _CT4 = 0xe6fe E740 694 _EP0BUF = 0xe740 E780 695 _EP1OUTBUF = 0xe780 E7C0 696 _EP1INBUF = 0xe7c0 F000 697 _EP2FIFOBUF = 0xf000 F400 698 _EP4FIFOBUF = 0xf400 F800 699 _EP6FIFOBUF = 0xf800 FC00 700 _EP8FIFOBUF = 0xfc00 701 ;-------------------------------------------------------- 702 ; absolute external ram data 703 ;-------------------------------------------------------- 704 .area XABS (ABS,XDATA) 705 ;-------------------------------------------------------- 706 ; external initialized ram data 707 ;-------------------------------------------------------- 708 .area HOME (CODE) 709 .area GSINIT0 (CODE) 710 .area GSINIT1 (CODE) 711 .area GSINIT2 (CODE) 712 .area GSINIT3 (CODE) 713 .area GSINIT4 (CODE) 714 .area GSINIT5 (CODE) 715 .area GSINIT (CODE) 716 .area GSFINAL (CODE) 717 .area CSEG (CODE) 718 ;-------------------------------------------------------- 719 ; global & static initialisations 720 ;-------------------------------------------------------- 721 .area HOME (CODE) 722 .area GSINIT (CODE) 723 .area GSFINAL (CODE) 724 .area GSINIT (CODE) 725 ;-------------------------------------------------------- 726 ; Home 727 ;-------------------------------------------------------- 728 .area HOME (CODE) 729 .area HOME (CODE) 730 ;-------------------------------------------------------- 731 ; code 732 ;-------------------------------------------------------- 733 .area CSEG (CODE) 734 ;------------------------------------------------------------ 735 ;Allocation info for local variables in function 'fx2_stall_ep0' 736 ;------------------------------------------------------------ 737 ;------------------------------------------------------------ 738 ; fx2utils.c:28: fx2_stall_ep0 (void) 739 ; ----------------------------------------- 740 ; function fx2_stall_ep0 741 ; ----------------------------------------- 0000 742 _fx2_stall_ep0: 0002 743 ar2 = 0x02 0003 744 ar3 = 0x03 0004 745 ar4 = 0x04 0005 746 ar5 = 0x05 0006 747 ar6 = 0x06 0007 748 ar7 = 0x07 0000 749 ar0 = 0x00 0001 750 ar1 = 0x01 751 ; fx2utils.c:30: EP0CS |= bmEPSTALL; 0000 90 E6 A0 752 mov dptr,#_EP0CS 0003 E0 753 movx a,@dptr 0004 44 01 754 orl a,#0x01 0006 F0 755 movx @dptr,a 0007 22 756 ret 757 ;------------------------------------------------------------ 758 ;Allocation info for local variables in function 'fx2_reset_data_toggle' 759 ;------------------------------------------------------------ 760 ;ep Allocated to registers r2 761 ;------------------------------------------------------------ 762 ; fx2utils.c:34: fx2_reset_data_toggle (unsigned char ep) 763 ; ----------------------------------------- 764 ; function fx2_reset_data_toggle 765 ; ----------------------------------------- 0008 766 _fx2_reset_data_toggle: 0008 AA 82 767 mov r2,dpl 768 ; fx2utils.c:36: TOGCTL = ((ep & 0x80) >> 3 | (ep & 0x0f)); 000A 74 80 769 mov a,#0x80 000C 5A 770 anl a,r2 000D C4 771 swap a 000E 23 772 rl a 000F 54 1F 773 anl a,#0x1f 0011 FB 774 mov r3,a 0012 74 0F 775 mov a,#0x0F 0014 5A 776 anl a,r2 0015 90 E6 83 777 mov dptr,#_TOGCTL 0018 4B 778 orl a,r3 0019 F0 779 movx @dptr,a 780 ; fx2utils.c:37: TOGCTL |= bmRESETTOGGLE; 001A 90 E6 83 781 mov dptr,#_TOGCTL 001D E0 782 movx a,@dptr 001E 44 20 783 orl a,#0x20 0020 F0 784 movx @dptr,a 0021 22 785 ret 786 ;------------------------------------------------------------ 787 ;Allocation info for local variables in function 'fx2_renumerate' 788 ;------------------------------------------------------------ 789 ;------------------------------------------------------------ 790 ; fx2utils.c:41: fx2_renumerate (void) 791 ; ----------------------------------------- 792 ; function fx2_renumerate 793 ; ----------------------------------------- 0022 794 _fx2_renumerate: 795 ; fx2utils.c:43: USBCS |= bmDISCON | bmRENUM; 0022 90 E6 80 796 mov dptr,#_USBCS 0025 E0 797 movx a,@dptr 0026 44 0A 798 orl a,#0x0A 0028 F0 799 movx @dptr,a 800 ; fx2utils.c:45: mdelay (250); 0029 90 00 FA 801 mov dptr,#0x00FA 002C 12s00r00 802 lcall _mdelay 803 ; fx2utils.c:47: USBIRQ = 0xff; // clear any pending USB irqs... 002F 90 E6 5D 804 mov dptr,#_USBIRQ 0032 74 FF 805 mov a,#0xFF 0034 F0 806 movx @dptr,a 807 ; fx2utils.c:48: EPIRQ = 0xff; // they're from before the renumeration 0035 90 E6 5F 808 mov dptr,#_EPIRQ 0038 74 FF 809 mov a,#0xFF 003A F0 810 movx @dptr,a 811 ; fx2utils.c:50: EXIF &= ~bmEXIF_USBINT; 003B 53 91 EF 812 anl _EXIF,#0xEF 813 ; fx2utils.c:52: USBCS &= ~bmDISCON; // reconnect USB 003E 90 E6 80 814 mov dptr,#_USBCS 0041 E0 815 movx a,@dptr 0042 54 F7 816 anl a,#0xF7 0044 F0 817 movx @dptr,a 0045 22 818 ret 819 .area CSEG (CODE) 820 .area CONST (CODE) 821 .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/isr.rel0000644000175000017500000002515712576764164017621 0ustar carlescarlesXH H 17 areas 14C global symbols M isr O -mmcs51 --model-small S _EP8FIFOCFG DefE61B S _EPIRQ DefE65F S _USBERRIE DefE662 S _EP6CS DefE6A5 S _GPIFHOLDAMOUNT DefE60C S _SBUF1 Def00C1 S _EIEX6 Def00EC S _EP1INBC DefE68F S _EP8FIFOBCL DefE6B2 S _DBUG DefE6F8 S _B Def00F0 S _EXEN2 Def00CB S _EPIE DefE65E S _WAKEUPCS DefE682 S _EP1OUTBC DefE68D S _EP8CS DefE6A6 S _EP2GPIFTRIG DefE6D4 S _SP Def0081 S _SCON0 Def0098 S _AUTODAT1 Def009C S _EI2C Def00E9 S _INT2IVEC DefE666 S _AUTODAT2 Def009F S _SCON1 Def00C0 S _SMOD1 Def00DF S _MICROFRAME DefE686 S _SUDPTRCTL DefE6B5 S _EP4GPIFTRIG DefE6DC S _EP2468STAT Def00AA S _OV Def00D2 S _INT4IVEC DefE667 S _GPIFSGLDATLNOX Def00BF S _T2CON Def00C8 S _EP6GPIFTRIG DefE6E4 S _ACC Def00E0 S _EP2FIFOBUF DefF000 S _C_T2 Def00C9 S _BREAKPT DefE605 S _EP2FIFOPFH DefE630 S _EP8GPIFTRIG DefE6EC S _AUTOPTRH2 Def009D S _SETUPDAT DefE6B8 S _EP2GPIFFLGSEL DefE6D2 S _EP4FIFOBUF DefF400 S _EIPX4 Def00FA S _EP4FIFOPFH DefE632 S _EP2ISOINPKTS DefE640 S _GPIFREADYCFG DefE6F3 S _EIPX5 Def00FB S _EP4GPIFFLGSEL DefE6DA S _FLOWSTBHPERIOD DefE6CD S _EP6FIFOBUF DefF800 S _EXIF Def0091 S _RCLK Def00CD S _EIPX6 Def00FC S _EP2FIFOPFL DefE631 S _EP6FIFOPFH DefE634 S _EP4ISOINPKTS DefE641 S _DPH1 Def0085 S _AUTOPTRL2 Def009E S __standard_interrupt_vector Ref0000 S _EP6GPIFFLGSEL DefE6E2 S _EP8FIFOBUF DefFC00 S _TCLK Def00CC S _PI2C Def00F9 S _EP4FIFOPFL DefE633 S _EP8FIFOPFH DefE636 S _EP6ISOINPKTS DefE642 S _FNADDR DefE687 S _EP8GPIFFLGSEL DefE6EA S _TESTCFG DefE6F9 S _PCON Def0087 S _P Def00D0 S _GPIF_WAVE_DATA DefE400 S _EP6FIFOPFL DefE635 S _EP8ISOINPKTS DefE643 S _I2CS DefE678 S _DPL1 Def0084 S _GPIFIRQ DefE661 S _EP0BCH DefE68A S _EP01STAT Def00BA S __fifo_gpif_autovector Ref0000 S _EP8FIFOPFL DefE637 S _EP1INCS DefE6A2 S _EIE Def00E8 S _RESI Def00DC S _GPIFIE DefE660 S _EP2BCH DefE690 S _EP1OUTCS DefE6A1 S _TCON Def0088 S _TMOD Def0089 S _OEA Def00B2 S _EXF2 Def00CE S _EP0BCL DefE68B S _EP4BCH DefE694 S _OEB Def00B3 S _REN1 Def00C4 S _EP2CFG DefE612 S _EP2FIFOIRQ DefE651 S _GPIFREADYSTAT DefE6F4 S _OEC Def00B4 S _EP2BCL DefE691 S _EP6BCH DefE698 S _OED Def00B5 S _EP4CFG DefE613 S _EP2FIFOIE DefE650 S _EP4FIFOIRQ DefE653 S _IOA Def0080 S _OEE Def00B6 S _EP4BCL DefE695 S _EP8BCH DefE69C S _IOB Def0090 S _PUSB Def00F8 S _EP6CFG DefE614 S _EP4FIFOIE DefE652 S _EP6FIFOIRQ DefE655 S _IOC Def00A0 S _INTSETUP DefE668 S _EP6BCL DefE699 S _DPH Def0083 S _IOD Def00B0 S _EP8CFG DefE615 S _EP6FIFOIE DefE654 S _EP8FIFOIRQ DefE657 S _USBFRAMEH DefE684 S _IOE Def00B1 S _RB81 Def00C2 S _EP2AUTOINLENH DefE620 S _EP8BCL DefE69D S _GPIFABORT DefE6F5 S _INT2CLR Def00A1 S _EIP Def00F8 S _IE0 Def0089 S _EP8FIFOIE DefE656 S _IE1 Def008B S _TB81 Def00C3 S _EP4AUTOINLENH DefE622 S _DPL Def0082 S _INT4CLR Def00A2 S _AUTOPTRSETUP Def00AF S _RCAP2H Def00CB S _USBFRAMEL DefE685 S _XGPIFSGLDATLX DefE6F1 S _FLOWEQ0CTL DefE6C8 S _FLOWSTB DefE6CB S _SM01 Def00C7 S _INT6 Def00DB S _EP2AUTOINLENL DefE621 S _EP6AUTOINLENH DefE624 S _SUSPEND DefE681 S _FLOWEQ1CTL DefE6C9 S _EP0BUF DefE740 S _SM11 Def00C6 S _CP_RL2 Def00C8 S _GPIFWFSELECT DefE6C0 S _SM21 Def00C5 S _EP4AUTOINLENL DefE623 S _EP8AUTOINLENH DefE626 S _RCAP2L Def00CA S _SEL Def0086 S _AC Def00D6 S _IFCONFIG DefE601 S _IBNIRQ DefE659 S _GPIFADRH DefE6C4 S _XGPIFSGLDATH DefE6F0 S _REN Def009C S _EP6AUTOINLENL DefE625 S _NAKIRQ DefE65B S _FLOWLOGIC DefE6C7 S _EA Def00AF S _FIFORESET DefE604 S _IBNIE DefE658 S _GPIFIDLECTL DefE6C2 S _UDMACRCH DefE67D S _DPS Def0086 S _EP8AUTOINLENL DefE627 S _NAKIE DefE65A S _CT1 DefE6FB S _ES0 Def00AC S _FIFOPINPOLAR DefE609 S _GPIFADRL DefE6C5 S _EP2GPIFPFSTOP DefE6D3 S _CT2 DefE6FC S _GPIFSGLDATLX Def00BE S _ET0 Def00A9 S _ES1 Def00AE S _SUDPTRH DefE6B3 S _USBTEST DefE6FA S _CT3 DefE6FD S _MPAGE Def0092 S _TF0 Def008D S _ET1 Def00AB S _EP4GPIFPFSTOP DefE6DB S _UDMACRCL DefE67E S _CT4 DefE6FE S _EP24FIFOFLGS Def00AB S _TF1 Def008F S _ET2 Def00AD S _RES_WAVEDATA_END DefE480 S _TH0 Def008C S _RB8 Def009A S _RI1 Def00C0 S _TF2 Def00CF S _EP1INCFG DefE611 S _TOGCTL DefE683 S _EP6GPIFPFSTOP DefE6E3 S _TH1 Def008D S _GPIFSGLDATH Def00BD S _IT0 Def0088 S _EX0 Def00A8 S _EP1OUTCFG DefE610 S _SUDPTRL DefE6B4 S _CKCON Def008E S _IE Def00A8 S _TH2 Def00CD S _EICON Def00D8 S _IT1 Def008A S _TB8 Def009B S _EX1 Def00AA S _TI1 Def00C1 S _CLRERRCNT DefE665 S _GPIFTCB0 DefE6D1 S _EP8GPIFPFSTOP DefE6EB S _REVCTL DefE60B S _ERRCNTLIM DefE664 S _GPIFTCB1 DefE6D0 S _TL0 Def008A S _APTR1H Def009A S _SM0 Def009F S _UART230 DefE608 S _GPIFTCB2 DefE6CF S _TL1 Def008B S _A0 Def0080 S _SM1 Def009E S _GPIFTCB3 DefE6CE S _UDMACRCQUAL DefE67F S _TL2 Def00CC S _A1 Def0081 S _SM2 Def009D S _FL Def00D1 S _EP68FIFOFLGS Def00AC S _A2 Def0082 S _PS0 Def00BC S __usb_autovector Ref0000 S _I2DAT DefE679 S _APTR1L Def009B S _A3 Def0083 S _D0 Def00B0 S _PT0 Def00B9 S _PS1 Def00BE S _BPADDRH DefE606 S _A4 Def0084 S _D1 Def00B1 S _PT1 Def00BB S _RS0 Def00D3 S _USBIRQ DefE65D S _PORTACFG DefE670 S _FLOWSTBEDGE DefE6CC S _A5 Def0085 S _TR0 Def008C S _D2 Def00B2 S _PT2 Def00BD S _RS1 Def00D4 S _F0 Def00D5 S _PINFLAGSAB DefE602 S _EP2FIFOFLGS DefE6A7 S _A6 Def0086 S _TR1 Def008E S _D3 Def00B3 S _USBIE DefE65C S _PORTCCFG DefE671 S _EP2FIFOBCH DefE6AB S _A7 Def0087 S _D4 Def00B4 S _PX0 Def00B8 S _TR2 Def00CA S _ERESI Def00DD S _EIUSB Def00E8 S _BPADDRL DefE607 S _EP4FIFOFLGS DefE6A8 S _GPIFCTLCFG DefE6C3 S _FLOWSTATE DefE6C6 S _IP Def00B8 S _D5 Def00B5 S _PX1 Def00BA S _REVID DefE60A S _PORTECFG DefE672 S _EP4FIFOBCH DefE6AD S _GPIFIDLECS DefE6C1 S _FLOWHOLDOFF DefE6CA S _EP1INBUF DefE7C0 S _PSW Def00D0 S _D6 Def00B6 S _PINFLAGSCD DefE603 S _EP2FIFOCFG DefE618 S _XAUTODAT1 DefE67B S _EP0CS DefE6A0 S _EP6FIFOFLGS DefE6A9 S _EP1OUTBUF DefE780 S _RI Def0098 S _D7 Def00B7 S _XAUTODAT2 DefE67C S _EP2FIFOBCL DefE6AC S _EP6FIFOBCH DefE6AF S _GPIFTRIG Def00BB S _CY Def00D7 S _EP4FIFOCFG DefE619 S _INPKTEND DefE648 S _EP2CS DefE6A3 S _EP8FIFOFLGS DefE6AA S _TI Def0099 S _CPUCS DefE600 S _OUTPKTEND DefE649 S _I2CTL DefE67A S _EP4FIFOBCL DefE6AE S _EP8FIFOBCH DefE6B1 S _XGPIFSGLDATLNOX DefE6F2 S _EP6FIFOCFG DefE61A S _USBERRIRQ DefE663 S _EP4CS DefE6A4 S _EIEX4 Def00EA S _USBCS DefE680 S _EP6FIFOBCL DefE6B0 S _SBUF0 Def0099 S _EIEX5 Def00EB A _CODE size 0 flags 0 addr 0 A RSEG size 0 flags 0 addr 0 A REG_BANK_0 size 8 flags 4 addr 0 A DSEG size 0 flags 0 addr 0 A OSEG size 2 flags 4 addr 0 S _hook_fgv_PARM_2 Def0000 S _hook_sv_PARM_2 Def0000 S _hook_uv_PARM_2 Def0000 A ISEG size 0 flags 0 addr 0 A IABS size 0 flags 8 addr 0 A BSEG size 3 flags 80 addr 0 A PSEG size 0 flags 50 addr 0 A XSEG size 0 flags 40 addr 0 A XABS size 0 flags 48 addr 0 A HOME size 0 flags 20 addr 0 A GSINIT0 size 0 flags 20 addr 0 A GSINIT1 size 0 flags 20 addr 0 A GSINIT2 size 0 flags 20 addr 0 A GSINIT3 size 0 flags 20 addr 0 A GSINIT4 size 0 flags 20 addr 0 A GSINIT5 size 0 flags 20 addr 0 A GSINIT size 0 flags 20 addr 0 A GSFINAL size 0 flags 20 addr 0 A CSEG size 1B2 flags 20 addr 0 S _hook_sv Def0000 S _hook_uv Def0063 S _setup_autovectors Def010A S _hook_fgv Def00B4 A CONST size 0 flags 20 addr 0 A CABS size 0 flags 28 addr 0 T 00 00 R 00 00 00 02 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 04 T 00 00 R 00 00 00 07 T 00 00 R 00 00 00 07 T 00 01 R 00 00 00 07 T 00 01 R 00 00 00 07 T 00 02 R 00 00 00 07 T 00 02 R 00 00 00 07 T 00 00 R 00 00 00 14 T 00 00 AA 82 BA 03 00 R 00 00 00 14 T 00 05 R 00 00 00 14 T 00 05 40 05 EA 24 9C 50 01 R 00 00 00 14 T 00 0C R 00 00 00 14 T 00 0C 22 R 00 00 00 14 T 00 0D R 00 00 00 14 T 00 0D 74 0F 5A FB BB 03 02 80 07 R 00 00 00 14 T 00 16 R 00 00 00 14 T 00 16 74 0F 5A FB BB 0B 45 R 00 00 00 14 T 00 1D R 00 00 00 14 T 00 1D A2 AF 92 00 00 00 C2 AF EA 24 00 00 00 F5 R 00 00 00 14 F1 21 05 00 07 F1 03 0C 00 3C T 00 27 82 E4 34 00 00 00 F5 83 74 02 F0 7B 00 74 R 00 00 00 14 F1 83 05 00 3C T 00 33 01 2A FC E4 3B FD EC 24 00 00 00 F5 82 ED R 00 00 00 14 F1 03 0A 00 3C T 00 3F 34 00 00 00 F5 83 E5 00 00 01 FC F0 74 02 R 00 00 00 14 F1 83 03 00 3C F1 21 09 00 04 T 00 49 2A FA E4 3B FB EA 24 00 00 00 F5 82 EB 34 R 00 00 00 14 F1 03 09 00 3C T 00 55 00 00 00 F5 83 AA 00 00 00 7B 00 EA F0 A2 R 00 00 00 14 F1 83 02 00 3C F1 21 08 00 04 T 00 5F 00 00 00 92 AF R 00 00 00 14 F1 21 02 00 07 T 00 62 R 00 00 00 14 T 00 62 22 R 00 00 00 14 T 00 63 R 00 00 00 14 T 00 63 E5 82 FA 24 83 50 01 22 R 00 00 00 14 T 00 6B R 00 00 00 14 T 00 6B EA 54 03 60 01 22 R 00 00 00 14 T 00 71 R 00 00 00 14 T 00 71 A2 AF 92 00 00 01 C2 AF EA 24 00 00 00 F5 R 00 00 00 14 F1 21 05 00 07 F1 03 0C 00 F3 T 00 7B 82 E4 34 00 00 00 F5 83 74 02 F0 7B 00 74 R 00 00 00 14 F1 83 05 00 F3 T 00 87 01 2A FC E4 3B FD EC 24 00 00 00 F5 82 ED R 00 00 00 14 F1 03 0A 00 F3 T 00 93 34 00 00 00 F5 83 E5 00 00 01 F0 74 02 2A R 00 00 00 14 F1 83 03 00 F3 F1 21 09 00 04 T 00 9D FA E4 3B FB EA 24 00 00 00 F5 82 EB 34 R 00 00 00 14 F1 03 08 00 F3 T 00 A8 00 00 00 F5 83 AA 00 00 00 EA F0 A2 R 00 00 00 14 F1 83 02 00 F3 F1 21 08 00 04 T 00 B0 00 00 01 92 AF 22 R 00 00 00 14 F1 21 02 00 07 T 00 B4 R 00 00 00 14 T 00 B4 AA 82 BA 80 00 R 00 00 00 14 T 00 B9 R 00 00 00 14 T 00 B9 40 05 EA 24 4B 50 01 R 00 00 00 14 T 00 C0 R 00 00 00 14 T 00 C0 22 R 00 00 00 14 T 00 C1 R 00 00 00 14 T 00 C1 EA 54 03 60 01 22 R 00 00 00 14 T 00 C7 R 00 00 00 14 T 00 C7 A2 AF 92 00 00 02 C2 AF EA 24 00 00 00 F5 R 00 00 00 14 F1 21 05 00 07 F1 03 0C 00 51 T 00 D1 82 E4 34 00 00 00 F5 83 74 02 F0 7B 00 74 R 00 00 00 14 F1 83 05 00 51 T 00 DD 01 2A FC E4 3B FD EC 24 00 00 00 F5 82 ED R 00 00 00 14 F1 03 0A 00 51 T 00 E9 34 00 00 00 F5 83 E5 00 00 01 F0 74 02 2A R 00 00 00 14 F1 83 03 00 51 F1 21 09 00 04 T 00 F3 FA E4 3B FB EA 24 00 00 00 F5 82 EB 34 R 00 00 00 14 F1 03 08 00 51 T 00 FE 00 00 00 F5 83 AA 00 00 00 EA F0 A2 R 00 00 00 14 F1 83 02 00 51 F1 21 08 00 04 T 01 06 00 00 02 92 AF 22 R 00 00 00 14 F1 21 02 00 07 T 01 0A R 00 00 00 14 T 01 0A C2 E8 C2 EA 75 00 00 00 00 00 00 75 R 00 00 00 14 F1 21 07 00 04 F1 03 0A 00 F3 T 01 12 00 00 01 00 00 00 75 82 43 12 R 00 00 00 14 F1 21 02 00 04 F1 83 05 00 F3 T 01 18 00 00 75 00 00 00 R 00 00 00 14 00 02 00 14 F1 21 05 00 04 T 01 1C 00 00 00 75 00 00 01 R 00 00 00 14 F1 03 02 00 51 F1 21 06 00 04 T 01 1F 00 00 00 75 82 53 12 00 00 00 90 E6 50 E4 R 00 00 00 14 F1 83 02 00 51 00 09 00 14 T 01 2B F0 00 90 E6 52 E4 F0 00 90 E6 54 E4 F0 00 R 00 00 00 14 T 01 39 90 E6 56 E4 F0 00 90 E6 51 74 FF F0 00 90 R 00 00 00 14 T 01 47 E6 53 74 FF F0 00 90 E6 55 74 FF F0 00 90 R 00 00 00 14 T 01 55 E6 57 74 FF F0 00 90 E6 58 E4 F0 90 E6 59 R 00 00 00 14 T 01 63 74 FF F0 90 E6 5A E4 F0 90 E6 5B 74 FF F0 R 00 00 00 14 T 01 71 90 E6 5C E4 F0 90 E6 5D 74 FF F0 90 E6 5E R 00 00 00 14 T 01 7F E4 F0 90 E6 5F 74 FF F0 00 90 E6 60 E4 F0 R 00 00 00 14 T 01 8D 00 90 E6 61 74 FF F0 90 E6 62 E4 F0 90 R 00 00 00 14 T 01 9A E6 63 74 FF F0 90 E6 65 E4 F0 90 E6 68 74 R 00 00 00 14 T 01 A8 0B F0 53 91 AF D2 E8 D2 EA 22 R 00 00 00 14 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/usb_common.asm0000644000175000017500000010506512576764164021160 0ustar carlescarles;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) ; This file was generated Mon Jul 30 11:40:53 2012 ;-------------------------------------------------------- .module usb_common .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _epcs .globl _plausible_endpoint .globl _EIPX6 .globl _EIPX5 .globl _EIPX4 .globl _PI2C .globl _PUSB .globl _EIEX6 .globl _EIEX5 .globl _EIEX4 .globl _EI2C .globl _EIUSB .globl _SMOD1 .globl _ERESI .globl _RESI .globl _INT6 .globl _CY .globl _AC .globl _F0 .globl _RS1 .globl _RS0 .globl _OV .globl _FL .globl _P .globl _TF2 .globl _EXF2 .globl _RCLK .globl _TCLK .globl _EXEN2 .globl _TR2 .globl _C_T2 .globl _CP_RL2 .globl _SM01 .globl _SM11 .globl _SM21 .globl _REN1 .globl _TB81 .globl _RB81 .globl _TI1 .globl _RI1 .globl _PS1 .globl _PT2 .globl _PS0 .globl _PT1 .globl _PX1 .globl _PT0 .globl _PX0 .globl _D7 .globl _D6 .globl _D5 .globl _D4 .globl _D3 .globl _D2 .globl _D1 .globl _D0 .globl _EA .globl _ES1 .globl _ET2 .globl _ES0 .globl _ET1 .globl _EX1 .globl _ET0 .globl _EX0 .globl _SM0 .globl _SM1 .globl _SM2 .globl _REN .globl _TB8 .globl _RB8 .globl _TI .globl _RI .globl _TF1 .globl _TR1 .globl _TF0 .globl _TR0 .globl _IE1 .globl _IT1 .globl _IE0 .globl _IT0 .globl _SEL .globl _A7 .globl _A6 .globl _A5 .globl _A4 .globl _A3 .globl _A2 .globl _A1 .globl _A0 .globl _EIP .globl _B .globl _EIE .globl _ACC .globl _EICON .globl _PSW .globl _TH2 .globl _TL2 .globl _RCAP2H .globl _RCAP2L .globl _T2CON .globl _SBUF1 .globl _SCON1 .globl _GPIFSGLDATLNOX .globl _GPIFSGLDATLX .globl _GPIFSGLDATH .globl _GPIFTRIG .globl _EP01STAT .globl _IP .globl _OEE .globl _OED .globl _OEC .globl _OEB .globl _OEA .globl _IOE .globl _IOD .globl _AUTOPTRSETUP .globl _EP68FIFOFLGS .globl _EP24FIFOFLGS .globl _EP2468STAT .globl _IE .globl _INT4CLR .globl _INT2CLR .globl _IOC .globl _AUTODAT2 .globl _AUTOPTRL2 .globl _AUTOPTRH2 .globl _AUTODAT1 .globl _APTR1L .globl _APTR1H .globl _SBUF0 .globl _SCON0 .globl _MPAGE .globl _EXIF .globl _IOB .globl _CKCON .globl _TH1 .globl _TH0 .globl _TL1 .globl _TL0 .globl _TMOD .globl _TCON .globl _PCON .globl _DPS .globl _DPH1 .globl _DPL1 .globl _DPH .globl _DPL .globl _SP .globl _IOA .globl _EP8FIFOBUF .globl _EP6FIFOBUF .globl _EP4FIFOBUF .globl _EP2FIFOBUF .globl _EP1INBUF .globl _EP1OUTBUF .globl _EP0BUF .globl _CT4 .globl _CT3 .globl _CT2 .globl _CT1 .globl _USBTEST .globl _TESTCFG .globl _DBUG .globl _UDMACRCQUAL .globl _UDMACRCL .globl _UDMACRCH .globl _GPIFHOLDAMOUNT .globl _FLOWSTBHPERIOD .globl _FLOWSTBEDGE .globl _FLOWSTB .globl _FLOWHOLDOFF .globl _FLOWEQ1CTL .globl _FLOWEQ0CTL .globl _FLOWLOGIC .globl _FLOWSTATE .globl _GPIFABORT .globl _GPIFREADYSTAT .globl _GPIFREADYCFG .globl _XGPIFSGLDATLNOX .globl _XGPIFSGLDATLX .globl _XGPIFSGLDATH .globl _EP8GPIFTRIG .globl _EP8GPIFPFSTOP .globl _EP8GPIFFLGSEL .globl _EP6GPIFTRIG .globl _EP6GPIFPFSTOP .globl _EP6GPIFFLGSEL .globl _EP4GPIFTRIG .globl _EP4GPIFPFSTOP .globl _EP4GPIFFLGSEL .globl _EP2GPIFTRIG .globl _EP2GPIFPFSTOP .globl _EP2GPIFFLGSEL .globl _GPIFTCB0 .globl _GPIFTCB1 .globl _GPIFTCB2 .globl _GPIFTCB3 .globl _GPIFADRL .globl _GPIFADRH .globl _GPIFCTLCFG .globl _GPIFIDLECTL .globl _GPIFIDLECS .globl _GPIFWFSELECT .globl _SETUPDAT .globl _SUDPTRCTL .globl _SUDPTRL .globl _SUDPTRH .globl _EP8FIFOBCL .globl _EP8FIFOBCH .globl _EP6FIFOBCL .globl _EP6FIFOBCH .globl _EP4FIFOBCL .globl _EP4FIFOBCH .globl _EP2FIFOBCL .globl _EP2FIFOBCH .globl _EP8FIFOFLGS .globl _EP6FIFOFLGS .globl _EP4FIFOFLGS .globl _EP2FIFOFLGS .globl _EP8CS .globl _EP6CS .globl _EP4CS .globl _EP2CS .globl _EP1INCS .globl _EP1OUTCS .globl _EP0CS .globl _EP8BCL .globl _EP8BCH .globl _EP6BCL .globl _EP6BCH .globl _EP4BCL .globl _EP4BCH .globl _EP2BCL .globl _EP2BCH .globl _EP1INBC .globl _EP1OUTBC .globl _EP0BCL .globl _EP0BCH .globl _FNADDR .globl _MICROFRAME .globl _USBFRAMEL .globl _USBFRAMEH .globl _TOGCTL .globl _WAKEUPCS .globl _SUSPEND .globl _USBCS .globl _XAUTODAT2 .globl _XAUTODAT1 .globl _I2CTL .globl _I2DAT .globl _I2CS .globl _PORTECFG .globl _PORTCCFG .globl _PORTACFG .globl _INTSETUP .globl _INT4IVEC .globl _INT2IVEC .globl _CLRERRCNT .globl _ERRCNTLIM .globl _USBERRIRQ .globl _USBERRIE .globl _GPIFIRQ .globl _GPIFIE .globl _EPIRQ .globl _EPIE .globl _USBIRQ .globl _USBIE .globl _NAKIRQ .globl _NAKIE .globl _IBNIRQ .globl _IBNIE .globl _EP8FIFOIRQ .globl _EP8FIFOIE .globl _EP6FIFOIRQ .globl _EP6FIFOIE .globl _EP4FIFOIRQ .globl _EP4FIFOIE .globl _EP2FIFOIRQ .globl _EP2FIFOIE .globl _OUTPKTEND .globl _INPKTEND .globl _EP8ISOINPKTS .globl _EP6ISOINPKTS .globl _EP4ISOINPKTS .globl _EP2ISOINPKTS .globl _EP8FIFOPFL .globl _EP8FIFOPFH .globl _EP6FIFOPFL .globl _EP6FIFOPFH .globl _EP4FIFOPFL .globl _EP4FIFOPFH .globl _EP2FIFOPFL .globl _EP2FIFOPFH .globl _EP8AUTOINLENL .globl _EP8AUTOINLENH .globl _EP6AUTOINLENL .globl _EP6AUTOINLENH .globl _EP4AUTOINLENL .globl _EP4AUTOINLENH .globl _EP2AUTOINLENL .globl _EP2AUTOINLENH .globl _EP8FIFOCFG .globl _EP6FIFOCFG .globl _EP4FIFOCFG .globl _EP2FIFOCFG .globl _EP8CFG .globl _EP6CFG .globl _EP4CFG .globl _EP2CFG .globl _EP1INCFG .globl _EP1OUTCFG .globl _REVCTL .globl _REVID .globl _FIFOPINPOLAR .globl _UART230 .globl _BPADDRL .globl _BPADDRH .globl _BREAKPT .globl _FIFORESET .globl _PINFLAGSCD .globl _PINFLAGSAB .globl _IFCONFIG .globl _CPUCS .globl _RES_WAVEDATA_END .globl _GPIF_WAVE_DATA .globl __usb_rx_overrun .globl __usb_got_SUDAV .globl _other_config_descr .globl _current_config_descr .globl _current_devqual_descr .globl _current_device_descr .globl __usb_alt_setting .globl __usb_config .globl _usb_install_handlers .globl _usb_handle_setup_packet ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (DATA) _IOA = 0x0080 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _DPL1 = 0x0084 _DPH1 = 0x0085 _DPS = 0x0086 _PCON = 0x0087 _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _CKCON = 0x008e _IOB = 0x0090 _EXIF = 0x0091 _MPAGE = 0x0092 _SCON0 = 0x0098 _SBUF0 = 0x0099 _APTR1H = 0x009a _APTR1L = 0x009b _AUTODAT1 = 0x009c _AUTOPTRH2 = 0x009d _AUTOPTRL2 = 0x009e _AUTODAT2 = 0x009f _IOC = 0x00a0 _INT2CLR = 0x00a1 _INT4CLR = 0x00a2 _IE = 0x00a8 _EP2468STAT = 0x00aa _EP24FIFOFLGS = 0x00ab _EP68FIFOFLGS = 0x00ac _AUTOPTRSETUP = 0x00af _IOD = 0x00b0 _IOE = 0x00b1 _OEA = 0x00b2 _OEB = 0x00b3 _OEC = 0x00b4 _OED = 0x00b5 _OEE = 0x00b6 _IP = 0x00b8 _EP01STAT = 0x00ba _GPIFTRIG = 0x00bb _GPIFSGLDATH = 0x00bd _GPIFSGLDATLX = 0x00be _GPIFSGLDATLNOX = 0x00bf _SCON1 = 0x00c0 _SBUF1 = 0x00c1 _T2CON = 0x00c8 _RCAP2L = 0x00ca _RCAP2H = 0x00cb _TL2 = 0x00cc _TH2 = 0x00cd _PSW = 0x00d0 _EICON = 0x00d8 _ACC = 0x00e0 _EIE = 0x00e8 _B = 0x00f0 _EIP = 0x00f8 ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (DATA) _A0 = 0x0080 _A1 = 0x0081 _A2 = 0x0082 _A3 = 0x0083 _A4 = 0x0084 _A5 = 0x0085 _A6 = 0x0086 _A7 = 0x0087 _SEL = 0x0086 _IT0 = 0x0088 _IE0 = 0x0089 _IT1 = 0x008a _IE1 = 0x008b _TR0 = 0x008c _TF0 = 0x008d _TR1 = 0x008e _TF1 = 0x008f _RI = 0x0098 _TI = 0x0099 _RB8 = 0x009a _TB8 = 0x009b _REN = 0x009c _SM2 = 0x009d _SM1 = 0x009e _SM0 = 0x009f _EX0 = 0x00a8 _ET0 = 0x00a9 _EX1 = 0x00aa _ET1 = 0x00ab _ES0 = 0x00ac _ET2 = 0x00ad _ES1 = 0x00ae _EA = 0x00af _D0 = 0x00b0 _D1 = 0x00b1 _D2 = 0x00b2 _D3 = 0x00b3 _D4 = 0x00b4 _D5 = 0x00b5 _D6 = 0x00b6 _D7 = 0x00b7 _PX0 = 0x00b8 _PT0 = 0x00b9 _PX1 = 0x00ba _PT1 = 0x00bb _PS0 = 0x00bc _PT2 = 0x00bd _PS1 = 0x00be _RI1 = 0x00c0 _TI1 = 0x00c1 _RB81 = 0x00c2 _TB81 = 0x00c3 _REN1 = 0x00c4 _SM21 = 0x00c5 _SM11 = 0x00c6 _SM01 = 0x00c7 _CP_RL2 = 0x00c8 _C_T2 = 0x00c9 _TR2 = 0x00ca _EXEN2 = 0x00cb _TCLK = 0x00cc _RCLK = 0x00cd _EXF2 = 0x00ce _TF2 = 0x00cf _P = 0x00d0 _FL = 0x00d1 _OV = 0x00d2 _RS0 = 0x00d3 _RS1 = 0x00d4 _F0 = 0x00d5 _AC = 0x00d6 _CY = 0x00d7 _INT6 = 0x00db _RESI = 0x00dc _ERESI = 0x00dd _SMOD1 = 0x00df _EIUSB = 0x00e8 _EI2C = 0x00e9 _EIEX4 = 0x00ea _EIEX5 = 0x00eb _EIEX6 = 0x00ec _PUSB = 0x00f8 _PI2C = 0x00f9 _EIPX4 = 0x00fa _EIPX5 = 0x00fb _EIPX6 = 0x00fc ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; overlayable bit register bank ;-------------------------------------------------------- .area BIT_BANK (REL,OVR,DATA) bits: .ds 1 b0 = bits[0] b1 = bits[1] b2 = bits[2] b3 = bits[3] b4 = bits[4] b5 = bits[5] b6 = bits[6] b7 = bits[7] ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) __usb_config:: .ds 1 __usb_alt_setting:: .ds 1 _current_device_descr:: .ds 2 _current_devqual_descr:: .ds 2 _current_config_descr:: .ds 2 _other_config_descr:: .ds 2 ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) .area OSEG (OVR,DATA) ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) __usb_got_SUDAV:: .ds 1 __usb_rx_overrun:: .ds 1 ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) _GPIF_WAVE_DATA = 0xe400 _RES_WAVEDATA_END = 0xe480 _CPUCS = 0xe600 _IFCONFIG = 0xe601 _PINFLAGSAB = 0xe602 _PINFLAGSCD = 0xe603 _FIFORESET = 0xe604 _BREAKPT = 0xe605 _BPADDRH = 0xe606 _BPADDRL = 0xe607 _UART230 = 0xe608 _FIFOPINPOLAR = 0xe609 _REVID = 0xe60a _REVCTL = 0xe60b _EP1OUTCFG = 0xe610 _EP1INCFG = 0xe611 _EP2CFG = 0xe612 _EP4CFG = 0xe613 _EP6CFG = 0xe614 _EP8CFG = 0xe615 _EP2FIFOCFG = 0xe618 _EP4FIFOCFG = 0xe619 _EP6FIFOCFG = 0xe61a _EP8FIFOCFG = 0xe61b _EP2AUTOINLENH = 0xe620 _EP2AUTOINLENL = 0xe621 _EP4AUTOINLENH = 0xe622 _EP4AUTOINLENL = 0xe623 _EP6AUTOINLENH = 0xe624 _EP6AUTOINLENL = 0xe625 _EP8AUTOINLENH = 0xe626 _EP8AUTOINLENL = 0xe627 _EP2FIFOPFH = 0xe630 _EP2FIFOPFL = 0xe631 _EP4FIFOPFH = 0xe632 _EP4FIFOPFL = 0xe633 _EP6FIFOPFH = 0xe634 _EP6FIFOPFL = 0xe635 _EP8FIFOPFH = 0xe636 _EP8FIFOPFL = 0xe637 _EP2ISOINPKTS = 0xe640 _EP4ISOINPKTS = 0xe641 _EP6ISOINPKTS = 0xe642 _EP8ISOINPKTS = 0xe643 _INPKTEND = 0xe648 _OUTPKTEND = 0xe649 _EP2FIFOIE = 0xe650 _EP2FIFOIRQ = 0xe651 _EP4FIFOIE = 0xe652 _EP4FIFOIRQ = 0xe653 _EP6FIFOIE = 0xe654 _EP6FIFOIRQ = 0xe655 _EP8FIFOIE = 0xe656 _EP8FIFOIRQ = 0xe657 _IBNIE = 0xe658 _IBNIRQ = 0xe659 _NAKIE = 0xe65a _NAKIRQ = 0xe65b _USBIE = 0xe65c _USBIRQ = 0xe65d _EPIE = 0xe65e _EPIRQ = 0xe65f _GPIFIE = 0xe660 _GPIFIRQ = 0xe661 _USBERRIE = 0xe662 _USBERRIRQ = 0xe663 _ERRCNTLIM = 0xe664 _CLRERRCNT = 0xe665 _INT2IVEC = 0xe666 _INT4IVEC = 0xe667 _INTSETUP = 0xe668 _PORTACFG = 0xe670 _PORTCCFG = 0xe671 _PORTECFG = 0xe672 _I2CS = 0xe678 _I2DAT = 0xe679 _I2CTL = 0xe67a _XAUTODAT1 = 0xe67b _XAUTODAT2 = 0xe67c _USBCS = 0xe680 _SUSPEND = 0xe681 _WAKEUPCS = 0xe682 _TOGCTL = 0xe683 _USBFRAMEH = 0xe684 _USBFRAMEL = 0xe685 _MICROFRAME = 0xe686 _FNADDR = 0xe687 _EP0BCH = 0xe68a _EP0BCL = 0xe68b _EP1OUTBC = 0xe68d _EP1INBC = 0xe68f _EP2BCH = 0xe690 _EP2BCL = 0xe691 _EP4BCH = 0xe694 _EP4BCL = 0xe695 _EP6BCH = 0xe698 _EP6BCL = 0xe699 _EP8BCH = 0xe69c _EP8BCL = 0xe69d _EP0CS = 0xe6a0 _EP1OUTCS = 0xe6a1 _EP1INCS = 0xe6a2 _EP2CS = 0xe6a3 _EP4CS = 0xe6a4 _EP6CS = 0xe6a5 _EP8CS = 0xe6a6 _EP2FIFOFLGS = 0xe6a7 _EP4FIFOFLGS = 0xe6a8 _EP6FIFOFLGS = 0xe6a9 _EP8FIFOFLGS = 0xe6aa _EP2FIFOBCH = 0xe6ab _EP2FIFOBCL = 0xe6ac _EP4FIFOBCH = 0xe6ad _EP4FIFOBCL = 0xe6ae _EP6FIFOBCH = 0xe6af _EP6FIFOBCL = 0xe6b0 _EP8FIFOBCH = 0xe6b1 _EP8FIFOBCL = 0xe6b2 _SUDPTRH = 0xe6b3 _SUDPTRL = 0xe6b4 _SUDPTRCTL = 0xe6b5 _SETUPDAT = 0xe6b8 _GPIFWFSELECT = 0xe6c0 _GPIFIDLECS = 0xe6c1 _GPIFIDLECTL = 0xe6c2 _GPIFCTLCFG = 0xe6c3 _GPIFADRH = 0xe6c4 _GPIFADRL = 0xe6c5 _GPIFTCB3 = 0xe6ce _GPIFTCB2 = 0xe6cf _GPIFTCB1 = 0xe6d0 _GPIFTCB0 = 0xe6d1 _EP2GPIFFLGSEL = 0xe6d2 _EP2GPIFPFSTOP = 0xe6d3 _EP2GPIFTRIG = 0xe6d4 _EP4GPIFFLGSEL = 0xe6da _EP4GPIFPFSTOP = 0xe6db _EP4GPIFTRIG = 0xe6dc _EP6GPIFFLGSEL = 0xe6e2 _EP6GPIFPFSTOP = 0xe6e3 _EP6GPIFTRIG = 0xe6e4 _EP8GPIFFLGSEL = 0xe6ea _EP8GPIFPFSTOP = 0xe6eb _EP8GPIFTRIG = 0xe6ec _XGPIFSGLDATH = 0xe6f0 _XGPIFSGLDATLX = 0xe6f1 _XGPIFSGLDATLNOX = 0xe6f2 _GPIFREADYCFG = 0xe6f3 _GPIFREADYSTAT = 0xe6f4 _GPIFABORT = 0xe6f5 _FLOWSTATE = 0xe6c6 _FLOWLOGIC = 0xe6c7 _FLOWEQ0CTL = 0xe6c8 _FLOWEQ1CTL = 0xe6c9 _FLOWHOLDOFF = 0xe6ca _FLOWSTB = 0xe6cb _FLOWSTBEDGE = 0xe6cc _FLOWSTBHPERIOD = 0xe6cd _GPIFHOLDAMOUNT = 0xe60c _UDMACRCH = 0xe67d _UDMACRCL = 0xe67e _UDMACRCQUAL = 0xe67f _DBUG = 0xe6f8 _TESTCFG = 0xe6f9 _USBTEST = 0xe6fa _CT1 = 0xe6fb _CT2 = 0xe6fc _CT3 = 0xe6fd _CT4 = 0xe6fe _EP0BUF = 0xe740 _EP1OUTBUF = 0xe780 _EP1INBUF = 0xe7c0 _EP2FIFOBUF = 0xf000 _EP4FIFOBUF = 0xf400 _EP6FIFOBUF = 0xf800 _EP8FIFOBUF = 0xfc00 ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ; usb_common.c:72: unsigned char _usb_config = 0; mov __usb_config,#0x00 ; usb_common.c:73: unsigned char _usb_alt_setting = 0; // FIXME really 1/interface mov __usb_alt_setting,#0x00 ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'setup_descriptors' ;------------------------------------------------------------ ;------------------------------------------------------------ ; usb_common.c:81: setup_descriptors (void) ; ----------------------------------------- ; function setup_descriptors ; ----------------------------------------- _setup_descriptors: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 ; usb_common.c:83: if (USBCS & bmHSM){ // high speed mode mov dptr,#_USBCS movx a,@dptr mov r2,a jnb acc.7,00102$ ; usb_common.c:84: current_device_descr = high_speed_device_descr; mov _current_device_descr,#_high_speed_device_descr mov (_current_device_descr + 1),#(_high_speed_device_descr >> 8) ; usb_common.c:85: current_devqual_descr = high_speed_devqual_descr; mov _current_devqual_descr,#_high_speed_devqual_descr mov (_current_devqual_descr + 1),#(_high_speed_devqual_descr >> 8) ; usb_common.c:86: current_config_descr = high_speed_config_descr; mov _current_config_descr,#_high_speed_config_descr mov (_current_config_descr + 1),#(_high_speed_config_descr >> 8) ; usb_common.c:87: other_config_descr = full_speed_config_descr; mov _other_config_descr,#_full_speed_config_descr mov (_other_config_descr + 1),#(_full_speed_config_descr >> 8) ret 00102$: ; usb_common.c:90: current_device_descr = full_speed_device_descr; mov _current_device_descr,#_full_speed_device_descr mov (_current_device_descr + 1),#(_full_speed_device_descr >> 8) ; usb_common.c:91: current_devqual_descr = full_speed_devqual_descr; mov _current_devqual_descr,#_full_speed_devqual_descr mov (_current_devqual_descr + 1),#(_full_speed_devqual_descr >> 8) ; usb_common.c:92: current_config_descr = full_speed_config_descr; mov _current_config_descr,#_full_speed_config_descr mov (_current_config_descr + 1),#(_full_speed_config_descr >> 8) ; usb_common.c:93: other_config_descr = high_speed_config_descr; mov _other_config_descr,#_high_speed_config_descr mov (_other_config_descr + 1),#(_high_speed_config_descr >> 8) ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'isr_SUDAV' ;------------------------------------------------------------ ;------------------------------------------------------------ ; usb_common.c:103: isr_SUDAV (void) interrupt ; ----------------------------------------- ; function isr_SUDAV ; ----------------------------------------- _isr_SUDAV: ; usb_common.c:105: clear_usb_irq (); anl _EXIF,#0xEF mov _INT2CLR,#0x00 ; usb_common.c:106: _usb_got_SUDAV = 1; setb __usb_got_SUDAV reti ; eliminated unneeded push/pop psw ; eliminated unneeded push/pop dpl ; eliminated unneeded push/pop dph ; eliminated unneeded push/pop b ; eliminated unneeded push/pop acc ;------------------------------------------------------------ ;Allocation info for local variables in function 'isr_USBRESET' ;------------------------------------------------------------ ;------------------------------------------------------------ ; usb_common.c:111: isr_USBRESET (void) interrupt ; ----------------------------------------- ; function isr_USBRESET ; ----------------------------------------- _isr_USBRESET: push bits push acc push b push dpl push dph push (0+2) push (0+3) push (0+4) push (0+5) push (0+6) push (0+7) push (0+0) push (0+1) push psw mov psw,#0x00 ; usb_common.c:113: clear_usb_irq (); anl _EXIF,#0xEF mov _INT2CLR,#0x00 ; usb_common.c:114: setup_descriptors (); lcall _setup_descriptors pop psw pop (0+1) pop (0+0) pop (0+7) pop (0+6) pop (0+5) pop (0+4) pop (0+3) pop (0+2) pop dph pop dpl pop b pop acc pop bits reti ;------------------------------------------------------------ ;Allocation info for local variables in function 'isr_HIGHSPEED' ;------------------------------------------------------------ ;------------------------------------------------------------ ; usb_common.c:118: isr_HIGHSPEED (void) interrupt ; ----------------------------------------- ; function isr_HIGHSPEED ; ----------------------------------------- _isr_HIGHSPEED: push bits push acc push b push dpl push dph push (0+2) push (0+3) push (0+4) push (0+5) push (0+6) push (0+7) push (0+0) push (0+1) push psw mov psw,#0x00 ; usb_common.c:120: clear_usb_irq (); anl _EXIF,#0xEF mov _INT2CLR,#0x00 ; usb_common.c:121: setup_descriptors (); lcall _setup_descriptors pop psw pop (0+1) pop (0+0) pop (0+7) pop (0+6) pop (0+5) pop (0+4) pop (0+3) pop (0+2) pop dph pop dpl pop b pop acc pop bits reti ;------------------------------------------------------------ ;Allocation info for local variables in function 'usb_install_handlers' ;------------------------------------------------------------ ;------------------------------------------------------------ ; usb_common.c:125: usb_install_handlers (void) ; ----------------------------------------- ; function usb_install_handlers ; ----------------------------------------- _usb_install_handlers: ; usb_common.c:127: setup_descriptors (); // ensure that they're set before use lcall _setup_descriptors ; usb_common.c:129: hook_uv (UV_SUDAV, (unsigned short) isr_SUDAV); mov _hook_uv_PARM_2,#_isr_SUDAV mov (_hook_uv_PARM_2 + 1),#(_isr_SUDAV >> 8) mov dpl,#0x00 lcall _hook_uv ; usb_common.c:130: hook_uv (UV_USBRESET, (unsigned short) isr_USBRESET); mov _hook_uv_PARM_2,#_isr_USBRESET mov (_hook_uv_PARM_2 + 1),#(_isr_USBRESET >> 8) mov dpl,#0x10 lcall _hook_uv ; usb_common.c:131: hook_uv (UV_HIGHSPEED, (unsigned short) isr_HIGHSPEED); mov _hook_uv_PARM_2,#_isr_HIGHSPEED mov (_hook_uv_PARM_2 + 1),#(_isr_HIGHSPEED >> 8) mov dpl,#0x14 lcall _hook_uv ; usb_common.c:133: USBIE = bmSUDAV | bmURES | bmHSGRANT; mov dptr,#_USBIE mov a,#0x31 movx @dptr,a ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'plausible_endpoint' ;------------------------------------------------------------ ;ep Allocated to registers r2 ;------------------------------------------------------------ ; usb_common.c:140: plausible_endpoint (unsigned char ep) ; ----------------------------------------- ; function plausible_endpoint ; ----------------------------------------- _plausible_endpoint: ; usb_common.c:142: ep &= ~0x80; // ignore direction bit ; usb_common.c:144: if (ep > 8) mov a,dpl anl a,#0x7F mov r2,a add a,#0xff - 0x08 jnc 00102$ ; usb_common.c:145: return 0; mov dpl,#0x00 ret 00102$: ; usb_common.c:147: if (ep == 1) cjne r2,#0x01,00104$ ; usb_common.c:148: return 1; mov dpl,#0x01 ret 00104$: ; usb_common.c:150: return (ep & 0x1) == 0; // must be even anl ar2,#0x01 clr a cjne r2,#0x00,00112$ inc a 00112$: mov dpl,a ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'epcs' ;------------------------------------------------------------ ;ep Allocated to registers r2 ;------------------------------------------------------------ ; usb_common.c:157: epcs (unsigned char ep) ; ----------------------------------------- ; function epcs ; ----------------------------------------- _epcs: mov r2,dpl ; usb_common.c:159: if (ep == 0x01) // ep1 has different in and out CS regs cjne r2,#0x01,00102$ ; usb_common.c:160: return EP1OUTCS; mov dptr,#_EP1OUTCS movx a,@dptr mov r3,a mov r4,#0x00 mov dpl,r3 mov dph,r4 ret 00102$: ; usb_common.c:162: if (ep == 0x81) cjne r2,#0x81,00104$ ; usb_common.c:163: return EP1INCS; mov dptr,#_EP1INCS movx a,@dptr mov r3,a mov r4,#0x00 mov dpl,r3 mov dph,r4 ret 00104$: ; usb_common.c:165: ep &= ~0x80; // ignore direction bit anl ar2,#0x7F ; usb_common.c:167: if (ep == 0x00) // ep0 mov a,r2 jnz 00106$ ; usb_common.c:168: return EP0CS; mov dptr,#_EP0CS movx a,@dptr mov r3,a mov r4,#0x00 mov dpl,r3 mov dph,r4 ret 00106$: ; usb_common.c:170: return EP2CS + (ep >> 1); // 2, 4, 6, 8 are consecutive mov dptr,#_EP2CS movx a,@dptr mov r3,a mov r4,#0x00 mov a,r2 clr c rrc a mov r2,a mov r5,#0x00 mov a,r2 add a,r3 mov r3,a mov a,r5 addc a,r4 mov dpl,r3 mov dph,a ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'usb_handle_setup_packet' ;------------------------------------------------------------ ;p Allocated to registers r2 r3 ;__00060000 Allocated to registers r2 r3 ;__00050001 Allocated to registers r2 r3 ;------------------------------------------------------------ ; usb_common.c:174: usb_handle_setup_packet (void) ; ----------------------------------------- ; function usb_handle_setup_packet ; ----------------------------------------- _usb_handle_setup_packet: ; usb_common.c:176: _usb_got_SUDAV = 0; clr __usb_got_SUDAV ; usb_common.c:180: switch (bRequestType & bmRT_TYPE_MASK){ mov dptr,#_SETUPDAT movx a,@dptr mov r2,a anl ar2,#0x60 cjne r2,#0x00,00206$ sjmp 00106$ 00206$: cjne r2,#0x20,00207$ sjmp 00102$ 00207$: cjne r2,#0x40,00208$ sjmp 00103$ 00208$: cjne r2,#0x60,00209$ sjmp 00210$ 00209$: ljmp 00175$ 00210$: ; usb_common.c:183: case bmRT_TYPE_RESERVED: 00102$: ; usb_common.c:184: fx2_stall_ep0 (); // we don't handle these. indicate error lcall _fx2_stall_ep0 ; usb_common.c:185: break; ljmp 00175$ ; usb_common.c:187: case bmRT_TYPE_VENDOR: 00103$: ; usb_common.c:191: if (!app_vendor_cmd ()) lcall _app_vendor_cmd mov a,dpl jz 00211$ ljmp 00175$ 00211$: ; usb_common.c:192: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:193: break; ljmp 00175$ ; usb_common.c:195: case bmRT_TYPE_STD: 00106$: ; usb_common.c:198: if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_IN){ mov dptr,#_SETUPDAT movx a,@dptr mov r2,a anl ar2,#0x80 cjne r2,#0x80,00212$ sjmp 00213$ 00212$: ljmp 00173$ 00213$: ; usb_common.c:204: switch (bRequest){ mov dptr,#(_SETUPDAT + 0x0001) movx a,@dptr mov r2,a cjne r2,#0x00,00214$ ljmp 00128$ 00214$: cjne r2,#0x06,00215$ sjmp 00109$ 00215$: cjne r2,#0x08,00216$ sjmp 00107$ 00216$: cjne r2,#0x0A,00217$ sjmp 00108$ 00217$: ljmp 00138$ ; usb_common.c:206: case RQ_GET_CONFIG: 00107$: ; usb_common.c:207: EP0BUF[0] = _usb_config; // FIXME app should handle mov dptr,#_EP0BUF mov a,__usb_config movx @dptr,a ; usb_common.c:208: EP0BCH = 0; mov dptr,#_EP0BCH clr a movx @dptr,a ; usb_common.c:209: EP0BCL = 1; mov dptr,#_EP0BCL mov a,#0x01 movx @dptr,a ; usb_common.c:210: break; ljmp 00175$ ; usb_common.c:214: case RQ_GET_INTERFACE: 00108$: ; usb_common.c:215: EP0BUF[0] = _usb_alt_setting; // FIXME app should handle mov dptr,#_EP0BUF mov a,__usb_alt_setting movx @dptr,a ; usb_common.c:216: EP0BCH = 0; mov dptr,#_EP0BCH clr a movx @dptr,a ; usb_common.c:217: EP0BCL = 1; mov dptr,#_EP0BCL mov a,#0x01 movx @dptr,a ; usb_common.c:218: break; ljmp 00175$ ; usb_common.c:222: case RQ_GET_DESCR: 00109$: ; usb_common.c:223: switch (wValueH){ mov dptr,#(_SETUPDAT + 0x0003) movx a,@dptr mov r2,a cjne r2,#0x01,00218$ sjmp 00110$ 00218$: cjne r2,#0x02,00219$ sjmp 00114$ 00219$: cjne r2,#0x03,00220$ sjmp 00122$ 00220$: cjne r2,#0x06,00221$ sjmp 00111$ 00221$: cjne r2,#0x07,00222$ sjmp 00119$ 00222$: ljmp 00126$ ; usb_common.c:225: case DT_DEVICE: 00110$: ; usb_common.c:226: SUDPTRH = MSB (current_device_descr); mov r2,_current_device_descr mov r3,(_current_device_descr + 1) mov dptr,#_SUDPTRH mov a,r3 movx @dptr,a ; usb_common.c:227: SUDPTRL = LSB (current_device_descr); mov r3,#0x00 mov dptr,#_SUDPTRL mov a,r2 movx @dptr,a ; usb_common.c:228: break; ljmp 00175$ ; usb_common.c:230: case DT_DEVQUAL: 00111$: ; usb_common.c:231: SUDPTRH = MSB (current_devqual_descr); mov r2,_current_devqual_descr mov r3,(_current_devqual_descr + 1) mov dptr,#_SUDPTRH mov a,r3 movx @dptr,a ; usb_common.c:232: SUDPTRL = LSB (current_devqual_descr); mov r3,#0x00 mov dptr,#_SUDPTRL mov a,r2 movx @dptr,a ; usb_common.c:233: break; ljmp 00175$ ; usb_common.c:237: fx2_stall_ep0 (); 00114$: ; usb_common.c:239: SUDPTRH = MSB (current_config_descr); mov r2,_current_config_descr mov r3,(_current_config_descr + 1) mov dptr,#_SUDPTRH mov a,r3 movx @dptr,a ; usb_common.c:240: SUDPTRL = LSB (current_config_descr); mov r3,#0x00 mov dptr,#_SUDPTRL mov a,r2 movx @dptr,a ; usb_common.c:242: break; ljmp 00175$ ; usb_common.c:246: fx2_stall_ep0 (); 00119$: ; usb_common.c:248: SUDPTRH = MSB (other_config_descr); mov r2,_other_config_descr mov r3,(_other_config_descr + 1) mov dptr,#_SUDPTRH mov a,r3 movx @dptr,a ; usb_common.c:249: SUDPTRL = LSB (other_config_descr); mov r3,#0x00 mov dptr,#_SUDPTRL mov a,r2 movx @dptr,a ; usb_common.c:251: break; ljmp 00175$ ; usb_common.c:253: case DT_STRING: 00122$: ; usb_common.c:254: if (wValueL >= nstring_descriptors) mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr mov r2,a mov dptr,#_nstring_descriptors movx a,@dptr mov r3,a clr c mov a,r2 subb a,r3 jc 00124$ ; usb_common.c:255: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ljmp 00175$ 00124$: ; usb_common.c:257: xdata char *p = string_descriptors[wValueL]; mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr mov b,#0x02 mul ab add a,#_string_descriptors mov dpl,a mov a,#(_string_descriptors >> 8) addc a,b mov dph,a movx a,@dptr mov r2,a inc dptr movx a,@dptr ; usb_common.c:258: SUDPTRH = MSB (p); mov dptr,#_SUDPTRH movx @dptr,a ; usb_common.c:259: SUDPTRL = LSB (p); mov r3,#0x00 mov dptr,#_SUDPTRL mov a,r2 movx @dptr,a ; usb_common.c:261: break; ljmp 00175$ ; usb_common.c:263: default: 00126$: ; usb_common.c:264: fx2_stall_ep0 (); // invalid request lcall _fx2_stall_ep0 ; usb_common.c:267: break; ljmp 00175$ ; usb_common.c:271: case RQ_GET_STATUS: 00128$: ; usb_common.c:272: switch (bRequestType & bmRT_RECIP_MASK){ mov dptr,#_SETUPDAT movx a,@dptr mov r2,a anl ar2,#0x1F cjne r2,#0x00,00224$ sjmp 00129$ 00224$: cjne r2,#0x01,00225$ sjmp 00130$ 00225$: ; usb_common.c:273: case bmRT_RECIP_DEVICE: cjne r2,#0x02,00135$ sjmp 00131$ 00129$: ; usb_common.c:274: EP0BUF[0] = bmGSDA_SELF_POWERED; // FIXME app should handle mov dptr,#_EP0BUF mov a,#0x01 movx @dptr,a ; usb_common.c:275: EP0BUF[1] = 0; mov dptr,#(_EP0BUF + 0x0001) ; usb_common.c:276: EP0BCH = 0; clr a movx @dptr,a mov dptr,#_EP0BCH movx @dptr,a ; usb_common.c:277: EP0BCL = 2; mov dptr,#_EP0BCL mov a,#0x02 movx @dptr,a ; usb_common.c:278: break; ; usb_common.c:280: case bmRT_RECIP_INTERFACE: sjmp 00138$ 00130$: ; usb_common.c:281: EP0BUF[0] = 0; mov dptr,#_EP0BUF ; usb_common.c:282: EP0BUF[1] = 0; ; usb_common.c:283: EP0BCH = 0; clr a movx @dptr,a mov dptr,#(_EP0BUF + 0x0001) movx @dptr,a mov dptr,#_EP0BCH movx @dptr,a ; usb_common.c:284: EP0BCL = 2; mov dptr,#_EP0BCL mov a,#0x02 movx @dptr,a ; usb_common.c:285: break; ; usb_common.c:287: case bmRT_RECIP_ENDPOINT: sjmp 00138$ 00131$: ; usb_common.c:288: if (plausible_endpoint (wIndexL)){ mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _plausible_endpoint mov a,dpl jz 00133$ ; usb_common.c:289: EP0BUF[0] = *epcs (wIndexL) & bmEPSTALL; mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _epcs movx a,@dptr mov r2,a anl ar2,#0x01 mov dptr,#_EP0BUF mov a,r2 movx @dptr,a ; usb_common.c:290: EP0BUF[1] = 0; mov dptr,#(_EP0BUF + 0x0001) ; usb_common.c:291: EP0BCH = 0; clr a movx @dptr,a mov dptr,#_EP0BCH movx @dptr,a ; usb_common.c:292: EP0BCL = 2; mov dptr,#_EP0BCL mov a,#0x02 movx @dptr,a sjmp 00138$ 00133$: ; usb_common.c:295: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:296: break; ; usb_common.c:298: default: sjmp 00138$ 00135$: ; usb_common.c:299: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:306: default: 00138$: ; usb_common.c:307: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:309: } ljmp 00175$ 00173$: ; usb_common.c:318: switch (bRequest){ mov dptr,#(_SETUPDAT + 0x0001) movx a,@dptr mov r2,a add a,#0xff - 0x0B jnc 00228$ ljmp 00170$ 00228$: mov a,r2 add a,r2 add a,r2 mov dptr,#00229$ jmp @a+dptr 00229$: ljmp 00170$ ljmp 00142$ ljmp 00161$ ljmp 00154$ ljmp 00170$ ljmp 00168$ ljmp 00170$ ljmp 00169$ ljmp 00170$ ljmp 00140$ ljmp 00170$ ljmp 00141$ ; usb_common.c:320: case RQ_SET_CONFIG: 00140$: ; usb_common.c:321: _usb_config = wValueL; // FIXME app should handle mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr mov __usb_config,a ; usb_common.c:322: break; ljmp 00175$ ; usb_common.c:324: case RQ_SET_INTERFACE: 00141$: ; usb_common.c:325: _usb_alt_setting = wValueL; // FIXME app should handle mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr mov __usb_alt_setting,a ; usb_common.c:326: break; ljmp 00175$ ; usb_common.c:330: case RQ_CLEAR_FEATURE: 00142$: ; usb_common.c:331: switch (bRequestType & bmRT_RECIP_MASK){ mov dptr,#_SETUPDAT movx a,@dptr mov r2,a anl ar2,#0x1F cjne r2,#0x00,00230$ sjmp 00143$ 00230$: ; usb_common.c:333: case bmRT_RECIP_DEVICE: cjne r2,#0x02,00152$ sjmp 00147$ 00143$: ; usb_common.c:334: switch (wValueL){ mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr ; usb_common.c:337: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:339: break; ljmp 00175$ ; usb_common.c:341: case bmRT_RECIP_ENDPOINT: 00147$: ; usb_common.c:342: if (wValueL == FS_ENDPOINT_HALT && plausible_endpoint (wIndexL)){ mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr jnz 00149$ mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _plausible_endpoint mov a,dpl jz 00149$ ; usb_common.c:343: *epcs (wIndexL) &= ~bmEPSTALL; mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _epcs mov r2,dpl mov r3,dph movx a,@dptr mov r4,a anl ar4,#0xFE mov dpl,r2 mov dph,r3 mov a,r4 movx @dptr,a ; usb_common.c:344: fx2_reset_data_toggle (wIndexL); mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _fx2_reset_data_toggle sjmp 00175$ 00149$: ; usb_common.c:347: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:348: break; ; usb_common.c:350: default: sjmp 00175$ 00152$: ; usb_common.c:351: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:354: break; ; usb_common.c:358: case RQ_SET_FEATURE: sjmp 00175$ 00154$: ; usb_common.c:359: switch (bRequestType & bmRT_RECIP_MASK){ mov dptr,#_SETUPDAT movx a,@dptr mov r2,a anl ar2,#0x1F cjne r2,#0x00,00175$ ; usb_common.c:362: switch (wValueL){ mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr mov r2,a cjne r2,#0x01,00236$ sjmp 00158$ 00236$: cjne r2,#0x02,00237$ sjmp 00175$ 00237$: ; usb_common.c:368: default: 00158$: ; usb_common.c:369: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:373: break; ; usb_common.c:375: case bmRT_RECIP_ENDPOINT: sjmp 00175$ 00161$: ; usb_common.c:376: switch (wValueL){ mov dptr,#(_SETUPDAT + 0x0002) movx a,@dptr mov r2,a jnz 00166$ ; usb_common.c:378: if (plausible_endpoint (wIndexL)) mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _plausible_endpoint mov a,dpl jz 00164$ ; usb_common.c:379: *epcs (wIndexL) |= bmEPSTALL; mov dptr,#(_SETUPDAT + 0x0004) movx a,@dptr mov dpl,a lcall _epcs mov r2,dpl mov r3,dph movx a,@dptr mov r4,a orl ar4,#0x01 mov dpl,r2 mov dph,r3 mov a,r4 movx @dptr,a sjmp 00175$ 00164$: ; usb_common.c:381: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:382: break; ; usb_common.c:384: default: sjmp 00175$ 00166$: ; usb_common.c:385: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:388: break; ; usb_common.c:392: case RQ_SET_ADDRESS: // handled by fx2 hardware sjmp 00175$ 00168$: ; usb_common.c:393: case RQ_SET_DESCR: // not implemented 00169$: ; usb_common.c:394: default: 00170$: ; usb_common.c:395: fx2_stall_ep0 (); lcall _fx2_stall_ep0 ; usb_common.c:401: } // bmRT_TYPE_MASK 00175$: ; usb_common.c:404: EP0CS |= bmHSNAK; mov dptr,#_EP0CS movx a,@dptr orl a,#0x80 movx @dptr,a ret .area CSEG (CODE) .area CONST (CODE) .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/fx2utils.sym0000644000175000017500000014534512576764164020634 0ustar carlescarles ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1. Symbol Table A 00D6 AC 00D6 ACC 00E0 ACC.0 00E0 ACC.1 00E1 ACC.2 00E2 ACC.3 00E3 ACC.4 00E4 ACC.5 00E5 ACC.6 00E6 ACC.7 00E7 B 00F0 B.0 00F0 B.1 00F1 B.2 00F2 B.3 00F3 B.4 00F4 B.5 00F5 B.6 00F6 B.7 00F7 CPRL2 00C8 CT2 00C9 CY 00D7 DPH 0083 DPL 0082 EA 00AF ES 00AC ET0 00A9 ET1 00AB ET2 00AD EX0 00A8 EX1 00AA EXEN2 00CB EXF2 00CE F0 00D5 IE 00A8 IE.0 00A8 IE.1 00A9 IE.2 00AA IE.3 00AB IE.4 00AC IE.5 00AD IE.7 00AF IE0 0089 IE1 008B INT0 00B2 INT1 00B3 IP 00B8 IP.0 00B8 IP.1 00B9 IP.2 00BA IP.3 00BB IP.4 00BC IP.5 00BD IT0 0088 IT1 008A OV 00D2 P 00D0 P0 0080 P0.0 0080 P0.1 0081 P0.2 0082 P0.3 0083 P0.4 0084 P0.5 0085 P0.6 0086 P0.7 0087 P1 0090 P1.0 0090 P1.1 0091 P1.2 0092 P1.3 0093 P1.4 0094 P1.5 0095 P1.6 0096 P1.7 0097 P2 00A0 P2.0 00A0 P2.1 00A1 P2.2 00A2 P2.3 00A3 P2.4 00A4 P2.5 00A5 P2.6 00A6 P2.7 00A7 P3 00B0 P3.0 00B0 P3.1 00B1 P3.2 00B2 P3.3 00B3 P3.4 00B4 P3.5 00B5 P3.6 00B6 P3.7 00B7 PCON 0087 PS 00BC PSW 00D0 PSW.0 00D0 PSW.1 00D1 PSW.2 00D2 PSW.3 00D3 PSW.4 00D4 PSW.5 00D5 PSW.6 00D6 PSW.7 00D7 PT0 00B9 PT1 00BB PT2 00BD PX0 00B8 PX1 00BA RB8 009A RCAP2H 00CB RCAP2L 00CA RCLK 00CD REN 009C RI 0098 RS0 00D3 RS1 00D4 RXD 00B0 SBUF 0099 SCON 0098 SCON.0 0098 SCON.1 0099 SCON.2 009A SCON.3 009B SCON.4 009C SCON.5 009D SCON.6 009E SCON.7 009F SM0 009F SM1 009E SM2 009D SP 0081 T2CON 00C8 T2CON.0 00C8 T2CON.1 00C9 T2CON.2 00CA T2CON.3 00CB T2CON.4 00CC T2CON.5 00CD T2CON.6 00CE T2CON.7 00CF TB8 009B TCLK 00CC TCON 0088 TCON.0 0088 TCON.1 0089 TCON.2 008A TCON.3 008B TCON.4 008C TCON.5 008D TCON.6 008E TCON.7 008F TF0 008D TF1 008F TF2 00CF TH0 008C TH1 008D TH2 00CD TI 0099 TL0 008A TL1 008B TL2 00CC TMOD 0089 TR0 008C TR1 008E TR2 00CA TXD 00B1 _A0 = 0080 G _A1 = 0081 G _A2 = 0082 G _A3 = 0083 G _A4 = 0084 G _A5 = 0085 G _A6 = 0086 G _A7 = 0087 G _AC = 00D6 G _ACC = 00E0 G _APTR1H = 009A G _APTR1L = 009B G _AUTODAT1 = 009C G _AUTODAT2 = 009F G _AUTOPTRH2 = 009D G _AUTOPTRL2 = 009E G _AUTOPTRSETUP = 00AF G _B = 00F0 G _BPADDRH = E606 G _BPADDRL = E607 G _BREAKPT = E605 G _CKCON = 008E G _CLRERRCNT = E665 G _CPUCS = E600 G _CP_RL2 = 00C8 G _CT1 = E6FB G _CT2 = E6FC G _CT3 = E6FD G _CT4 = E6FE G _CY = 00D7 G _C_T2 = 00C9 G _D0 = 00B0 G _D1 = 00B1 G _D2 = 00B2 G _D3 = 00B3 G _D4 = 00B4 G _D5 = 00B5 G _D6 = 00B6 G _D7 = 00B7 G _DBUG = E6F8 G _DPH = 0083 G _DPH1 = 0085 G _DPL = 0082 G _DPL1 = 0084 G _DPS = 0086 G _EA = 00AF G _EI2C = 00E9 G _EICON = 00D8 G _EIE = 00E8 G _EIEX4 = 00EA G _EIEX5 = 00EB G _EIEX6 = 00EC G _EIP = 00F8 G _EIPX4 = 00FA G _EIPX5 = 00FB G _EIPX6 = 00FC G _EIUSB = 00E8 G _EP01STAT = 00BA G _EP0BCH = E68A G _EP0BCL = E68B G _EP0BUF = E740 G _EP0CS = E6A0 G _EP1INBC = E68F G _EP1INBUF = E7C0 G _EP1INCFG = E611 G _EP1INCS = E6A2 G _EP1OUTBC = E68D G _EP1OUTBUF = E780 G _EP1OUTCFG = E610 G _EP1OUTCS = E6A1 G _EP2468STAT = 00AA G _EP24FIFOFLGS = 00AB G _EP2AUTOINLENH = E620 G _EP2AUTOINLENL = E621 G _EP2BCH = E690 G _EP2BCL = E691 G _EP2CFG = E612 G _EP2CS = E6A3 G _EP2FIFOBCH = E6AB G _EP2FIFOBCL = E6AC G _EP2FIFOBUF = F000 G _EP2FIFOCFG = E618 G _EP2FIFOFLGS = E6A7 G _EP2FIFOIE = E650 G _EP2FIFOIRQ = E651 G _EP2FIFOPFH = E630 G _EP2FIFOPFL = E631 G _EP2GPIFFLGSEL = E6D2 G _EP2GPIFPFSTOP = E6D3 G _EP2GPIFTRIG = E6D4 G _EP2ISOINPKTS = E640 G _EP4AUTOINLENH = E622 G _EP4AUTOINLENL = E623 G _EP4BCH = E694 G _EP4BCL = E695 G _EP4CFG = E613 G _EP4CS = E6A4 G _EP4FIFOBCH = E6AD G _EP4FIFOBCL = E6AE G _EP4FIFOBUF = F400 G _EP4FIFOCFG = E619 G _EP4FIFOFLGS = E6A8 G _EP4FIFOIE = E652 G _EP4FIFOIRQ = E653 G _EP4FIFOPFH = E632 G _EP4FIFOPFL = E633 G _EP4GPIFFLGSEL = E6DA G _EP4GPIFPFSTOP = E6DB G _EP4GPIFTRIG = E6DC G _EP4ISOINPKTS = E641 G _EP68FIFOFLGS = 00AC G _EP6AUTOINLENH = E624 G _EP6AUTOINLENL = E625 G _EP6BCH = E698 G _EP6BCL = E699 G _EP6CFG = E614 G _EP6CS = E6A5 G _EP6FIFOBCH = E6AF G _EP6FIFOBCL = E6B0 G _EP6FIFOBUF = F800 G _EP6FIFOCFG = E61A G _EP6FIFOFLGS = E6A9 G _EP6FIFOIE = E654 G _EP6FIFOIRQ = E655 G _EP6FIFOPFH = E634 G _EP6FIFOPFL = E635 G _EP6GPIFFLGSEL = E6E2 G _EP6GPIFPFSTOP = E6E3 G _EP6GPIFTRIG = E6E4 G _EP6ISOINPKTS = E642 G _EP8AUTOINLENH = E626 G _EP8AUTOINLENL = E627 G _EP8BCH = E69C G _EP8BCL = E69D G _EP8CFG = E615 G _EP8CS = E6A6 G _EP8FIFOBCH = E6B1 G _EP8FIFOBCL = E6B2 G _EP8FIFOBUF = FC00 G _EP8FIFOCFG = E61B G _EP8FIFOFLGS = E6AA G _EP8FIFOIE = E656 G _EP8FIFOIRQ = E657 G _EP8FIFOPFH = E636 G _EP8FIFOPFL = E637 G _EP8GPIFFLGSEL = E6EA G _EP8GPIFPFSTOP = E6EB G _EP8GPIFTRIG = E6EC G _EP8ISOINPKTS = E643 G _EPIE = E65E G _EPIRQ = E65F G _ERESI = 00DD G _ERRCNTLIM = E664 G _ES0 = 00AC G _ES1 = 00AE G _ET0 = 00A9 G _ET1 = 00AB G _ET2 = 00AD G _EX0 = 00A8 G _EX1 = 00AA G _EXEN2 = 00CB G _EXF2 = 00CE G _EXIF = 0091 G _F0 = 00D5 G _FIFOPINPOLAR = E609 G _FIFORESET = E604 G _FL = 00D1 G _FLOWEQ0CTL = E6C8 G _FLOWEQ1CTL = E6C9 G _FLOWHOLDOFF = E6CA G _FLOWLOGIC = E6C7 G _FLOWSTATE = E6C6 G _FLOWSTB = E6CB G _FLOWSTBEDGE = E6CC G _FLOWSTBHPERIOD = E6CD G _FNADDR = E687 G _GPIFABORT = E6F5 G _GPIFADRH = E6C4 G _GPIFADRL = E6C5 G _GPIFCTLCFG = E6C3 G _GPIFHOLDAMOUNT = E60C G _GPIFIDLECS = E6C1 G _GPIFIDLECTL = E6C2 G _GPIFIE = E660 G _GPIFIRQ = E661 G _GPIFREADYCFG = E6F3 G _GPIFREADYSTAT = E6F4 G _GPIFSGLDATH = 00BD G _GPIFSGLDATLNOX = 00BF G _GPIFSGLDATLX = 00BE G _GPIFTCB0 = E6D1 G _GPIFTCB1 = E6D0 G _GPIFTCB2 = E6CF G _GPIFTCB3 = E6CE G _GPIFTRIG = 00BB G _GPIFWFSELECT = E6C0 G _GPIF_WAVE_DATA = E400 G _I2CS = E678 G _I2CTL = E67A G _I2DAT = E679 G _IBNIE = E658 G _IBNIRQ = E659 G _IE = 00A8 G _IE0 = 0089 G _IE1 = 008B G _IFCONFIG = E601 G _INPKTEND = E648 G _INT2CLR = 00A1 G _INT2IVEC = E666 G _INT4CLR = 00A2 G _INT4IVEC = E667 G _INT6 = 00DB G _INTSETUP = E668 G _IOA = 0080 G _IOB = 0090 G _IOC = 00A0 G _IOD = 00B0 G _IOE = 00B1 G _IP = 00B8 G _IT0 = 0088 G _IT1 = 008A G _MICROFRAME = E686 G _MPAGE = 0092 G _NAKIE = E65A G _NAKIRQ = E65B G _OEA = 00B2 G _OEB = 00B3 G _OEC = 00B4 G _OED = 00B5 G _OEE = 00B6 G _OUTPKTEND = E649 G _OV = 00D2 G _P = 00D0 G _PCON = 0087 G _PI2C = 00F9 G _PINFLAGSAB = E602 G _PINFLAGSCD = E603 G _PORTACFG = E670 G _PORTCCFG = E671 G _PORTECFG = E672 G _PS0 = 00BC G _PS1 = 00BE G _PSW = 00D0 G _PT0 = 00B9 G _PT1 = 00BB G _PT2 = 00BD G _PUSB = 00F8 G _PX0 = 00B8 G _PX1 = 00BA G _RB8 = 009A G _RB81 = 00C2 G _RCAP2H = 00CB G _RCAP2L = 00CA G _RCLK = 00CD G _REN = 009C G _REN1 = 00C4 G _RESI = 00DC G _RES_WAVEDATA_END = E480 G _REVCTL = E60B G _REVID = E60A G _RI = 0098 G _RI1 = 00C0 G _RS0 = 00D3 G _RS1 = 00D4 G _SBUF0 = 0099 G _SBUF1 = 00C1 G _SCON0 = 0098 G _SCON1 = 00C0 G _SEL = 0086 G _SETUPDAT = E6B8 G _SM0 = 009F G _SM01 = 00C7 G _SM1 = 009E G _SM11 = 00C6 G _SM2 = 009D G _SM21 = 00C5 G _SMOD1 = 00DF G _SP = 0081 G _SUDPTRCTL = E6B5 G _SUDPTRH = E6B3 G _SUDPTRL = E6B4 G _SUSPEND = E681 G _T2CON = 00C8 G _TB8 = 009B G _TB81 = 00C3 G _TCLK = 00CC G _TCON = 0088 G _TESTCFG = E6F9 G _TF0 = 008D G _TF1 = 008F G _TF2 = 00CF G _TH0 = 008C G _TH1 = 008D G _TH2 = 00CD G _TI = 0099 G _TI1 = 00C1 G _TL0 = 008A G _TL1 = 008B G _TL2 = 00CC G _TMOD = 0089 G _TOGCTL = E683 G _TR0 = 008C G _TR1 = 008E G _TR2 = 00CA G _UART230 = E608 G _UDMACRCH = E67D G _UDMACRCL = E67E G _UDMACRCQUAL = E67F G _USBCS = E680 G _USBERRIE = E662 G _USBERRIRQ = E663 G _USBFRAMEH = E684 G _USBFRAMEL = E685 G _USBIE = E65C G _USBIRQ = E65D G _USBTEST = E6FA G _WAKEUPCS = E682 G _XAUTODAT1 = E67B G _XAUTODAT2 = E67C G _XGPIFSGLDATH = E6F0 G _XGPIFSGLDATLNOX = E6F2 G _XGPIFSGLDATLX = E6F1 G 14 _fx2_renumerate 0022 GR 14 _fx2_reset_data_toggle 0008 GR 14 _fx2_stall_ep0 0000 GR _mdelay **** GX a 00D6 ac 00D6 acc 00E0 acc.0 00E0 acc.1 00E1 acc.2 00E2 acc.3 00E3 acc.4 00E4 acc.5 00E5 acc.6 00E6 acc.7 00E7 ar0 = 0000 ar1 = 0001 ar2 = 0002 ar3 = 0003 ar4 = 0004 ar5 = 0005 ar6 = 0006 ar7 = 0007 b 00F0 b.0 00F0 b.1 00F1 b.2 00F2 b.3 00F3 b.4 00F4 b.5 00F5 b.6 00F6 b.7 00F7 cprl2 00C8 ct2 00C9 cy 00D7 dph 0083 dpl 0082 ea 00AF es 00AC et0 00A9 et1 00AB et2 00AD ex0 00A8 ex1 00AA exen2 00CB exf2 00CE f0 00D5 ie 00A8 ie.0 00A8 ie.1 00A9 ie.2 00AA ie.3 00AB ie.4 00AC ie.5 00AD ie.7 00AF ie0 0089 ie1 008B int0 00B2 int1 00B3 ip 00B8 ip.0 00B8 ip.1 00B9 ip.2 00BA ip.3 00BB ip.4 00BC ip.5 00BD it0 0088 it1 008A ov 00D2 p 00D0 p0 0080 p0.0 0080 p0.1 0081 p0.2 0082 p0.3 0083 p0.4 0084 p0.5 0085 p0.6 0086 p0.7 0087 p1 0090 p1.0 0090 p1.1 0091 p1.2 0092 p1.3 0093 p1.4 0094 p1.5 0095 p1.6 0096 p1.7 0097 p2 00A0 p2.0 00A0 p2.1 00A1 p2.2 00A2 p2.3 00A3 p2.4 00A4 p2.5 00A5 p2.6 00A6 p2.7 00A7 p3 00B0 p3.0 00B0 p3.1 00B1 p3.2 00B2 p3.3 00B3 p3.4 00B4 p3.5 00B5 p3.6 00B6 p3.7 00B7 pcon 0087 ps 00BC psw 00D0 psw.0 00D0 psw.1 00D1 psw.2 00D2 psw.3 00D3 psw.4 00D4 psw.5 00D5 psw.6 00D6 psw.7 00D7 pt0 00B9 pt1 00BB pt2 00BD px0 00B8 px1 00BA rb8 009A rcap2h 00CB rcap2l 00CA rclk 00CD ren 009C ri 0098 rs0 00D3 rs1 00D4 rxd 00B0 sbuf 0099 scon 0098 scon.0 0098 scon.1 0099 scon.2 009A scon.3 009B scon.4 009C scon.5 009D scon.6 009E scon.7 009F sm0 009F sm1 009E sm2 009D sp 0081 t2con 00C8 t2con.0 00C8 t2con.1 00C9 t2con.2 00CA t2con.3 00CB t2con.4 00CC t2con.5 00CD t2con.6 00CE t2con.7 00CF tb8 009B tclk 00CC tcon 0088 tcon.0 0088 tcon.1 0089 tcon.2 008A tcon.3 008B tcon.4 008C tcon.5 008D tcon.6 008E tcon.7 008F tf0 008D tf1 008F tf2 00CF th0 008C th1 008D th2 00CD ti 0099 tl0 008A tl1 008B tl2 00CC tmod 0089 tr0 008C tr1 008E tr2 00CA txd 00B1 ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2. Area Table 0 _CODE size 0 flags 0 1 RSEG size 0 flags 0 2 REG_BANK_0 size 8 flags 4 3 DSEG size 0 flags 0 4 OSEG size 0 flags 4 5 ISEG size 0 flags 0 6 IABS size 0 flags 8 7 BSEG size 0 flags 80 8 PSEG size 0 flags 50 9 XSEG size 0 flags 40 A XABS size 0 flags 48 B HOME size 0 flags 20 C GSINIT0 size 0 flags 20 D GSINIT1 size 0 flags 20 E GSINIT2 size 0 flags 20 F GSINIT3 size 0 flags 20 10 GSINIT4 size 0 flags 20 11 GSINIT5 size 0 flags 20 12 GSINIT size 0 flags 20 13 GSFINAL size 0 flags 20 14 CSEG size 46 flags 20 15 CONST size 0 flags 20 16 CABS size 0 flags 28 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/isr.asm0000644000175000017500000005545712576764164017625 0ustar carlescarles;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) ; This file was generated Mon Jul 30 11:40:53 2012 ;-------------------------------------------------------- .module isr .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _hook_fgv_PARM_2 .globl _hook_uv_PARM_2 .globl _hook_sv_PARM_2 .globl _EIPX6 .globl _EIPX5 .globl _EIPX4 .globl _PI2C .globl _PUSB .globl _EIEX6 .globl _EIEX5 .globl _EIEX4 .globl _EI2C .globl _EIUSB .globl _SMOD1 .globl _ERESI .globl _RESI .globl _INT6 .globl _CY .globl _AC .globl _F0 .globl _RS1 .globl _RS0 .globl _OV .globl _FL .globl _P .globl _TF2 .globl _EXF2 .globl _RCLK .globl _TCLK .globl _EXEN2 .globl _TR2 .globl _C_T2 .globl _CP_RL2 .globl _SM01 .globl _SM11 .globl _SM21 .globl _REN1 .globl _TB81 .globl _RB81 .globl _TI1 .globl _RI1 .globl _PS1 .globl _PT2 .globl _PS0 .globl _PT1 .globl _PX1 .globl _PT0 .globl _PX0 .globl _D7 .globl _D6 .globl _D5 .globl _D4 .globl _D3 .globl _D2 .globl _D1 .globl _D0 .globl _EA .globl _ES1 .globl _ET2 .globl _ES0 .globl _ET1 .globl _EX1 .globl _ET0 .globl _EX0 .globl _SM0 .globl _SM1 .globl _SM2 .globl _REN .globl _TB8 .globl _RB8 .globl _TI .globl _RI .globl _TF1 .globl _TR1 .globl _TF0 .globl _TR0 .globl _IE1 .globl _IT1 .globl _IE0 .globl _IT0 .globl _SEL .globl _A7 .globl _A6 .globl _A5 .globl _A4 .globl _A3 .globl _A2 .globl _A1 .globl _A0 .globl _EIP .globl _B .globl _EIE .globl _ACC .globl _EICON .globl _PSW .globl _TH2 .globl _TL2 .globl _RCAP2H .globl _RCAP2L .globl _T2CON .globl _SBUF1 .globl _SCON1 .globl _GPIFSGLDATLNOX .globl _GPIFSGLDATLX .globl _GPIFSGLDATH .globl _GPIFTRIG .globl _EP01STAT .globl _IP .globl _OEE .globl _OED .globl _OEC .globl _OEB .globl _OEA .globl _IOE .globl _IOD .globl _AUTOPTRSETUP .globl _EP68FIFOFLGS .globl _EP24FIFOFLGS .globl _EP2468STAT .globl _IE .globl _INT4CLR .globl _INT2CLR .globl _IOC .globl _AUTODAT2 .globl _AUTOPTRL2 .globl _AUTOPTRH2 .globl _AUTODAT1 .globl _APTR1L .globl _APTR1H .globl _SBUF0 .globl _SCON0 .globl _MPAGE .globl _EXIF .globl _IOB .globl _CKCON .globl _TH1 .globl _TH0 .globl _TL1 .globl _TL0 .globl _TMOD .globl _TCON .globl _PCON .globl _DPS .globl _DPH1 .globl _DPL1 .globl _DPH .globl _DPL .globl _SP .globl _IOA .globl _EP8FIFOBUF .globl _EP6FIFOBUF .globl _EP4FIFOBUF .globl _EP2FIFOBUF .globl _EP1INBUF .globl _EP1OUTBUF .globl _EP0BUF .globl _CT4 .globl _CT3 .globl _CT2 .globl _CT1 .globl _USBTEST .globl _TESTCFG .globl _DBUG .globl _UDMACRCQUAL .globl _UDMACRCL .globl _UDMACRCH .globl _GPIFHOLDAMOUNT .globl _FLOWSTBHPERIOD .globl _FLOWSTBEDGE .globl _FLOWSTB .globl _FLOWHOLDOFF .globl _FLOWEQ1CTL .globl _FLOWEQ0CTL .globl _FLOWLOGIC .globl _FLOWSTATE .globl _GPIFABORT .globl _GPIFREADYSTAT .globl _GPIFREADYCFG .globl _XGPIFSGLDATLNOX .globl _XGPIFSGLDATLX .globl _XGPIFSGLDATH .globl _EP8GPIFTRIG .globl _EP8GPIFPFSTOP .globl _EP8GPIFFLGSEL .globl _EP6GPIFTRIG .globl _EP6GPIFPFSTOP .globl _EP6GPIFFLGSEL .globl _EP4GPIFTRIG .globl _EP4GPIFPFSTOP .globl _EP4GPIFFLGSEL .globl _EP2GPIFTRIG .globl _EP2GPIFPFSTOP .globl _EP2GPIFFLGSEL .globl _GPIFTCB0 .globl _GPIFTCB1 .globl _GPIFTCB2 .globl _GPIFTCB3 .globl _GPIFADRL .globl _GPIFADRH .globl _GPIFCTLCFG .globl _GPIFIDLECTL .globl _GPIFIDLECS .globl _GPIFWFSELECT .globl _SETUPDAT .globl _SUDPTRCTL .globl _SUDPTRL .globl _SUDPTRH .globl _EP8FIFOBCL .globl _EP8FIFOBCH .globl _EP6FIFOBCL .globl _EP6FIFOBCH .globl _EP4FIFOBCL .globl _EP4FIFOBCH .globl _EP2FIFOBCL .globl _EP2FIFOBCH .globl _EP8FIFOFLGS .globl _EP6FIFOFLGS .globl _EP4FIFOFLGS .globl _EP2FIFOFLGS .globl _EP8CS .globl _EP6CS .globl _EP4CS .globl _EP2CS .globl _EP1INCS .globl _EP1OUTCS .globl _EP0CS .globl _EP8BCL .globl _EP8BCH .globl _EP6BCL .globl _EP6BCH .globl _EP4BCL .globl _EP4BCH .globl _EP2BCL .globl _EP2BCH .globl _EP1INBC .globl _EP1OUTBC .globl _EP0BCL .globl _EP0BCH .globl _FNADDR .globl _MICROFRAME .globl _USBFRAMEL .globl _USBFRAMEH .globl _TOGCTL .globl _WAKEUPCS .globl _SUSPEND .globl _USBCS .globl _XAUTODAT2 .globl _XAUTODAT1 .globl _I2CTL .globl _I2DAT .globl _I2CS .globl _PORTECFG .globl _PORTCCFG .globl _PORTACFG .globl _INTSETUP .globl _INT4IVEC .globl _INT2IVEC .globl _CLRERRCNT .globl _ERRCNTLIM .globl _USBERRIRQ .globl _USBERRIE .globl _GPIFIRQ .globl _GPIFIE .globl _EPIRQ .globl _EPIE .globl _USBIRQ .globl _USBIE .globl _NAKIRQ .globl _NAKIE .globl _IBNIRQ .globl _IBNIE .globl _EP8FIFOIRQ .globl _EP8FIFOIE .globl _EP6FIFOIRQ .globl _EP6FIFOIE .globl _EP4FIFOIRQ .globl _EP4FIFOIE .globl _EP2FIFOIRQ .globl _EP2FIFOIE .globl _OUTPKTEND .globl _INPKTEND .globl _EP8ISOINPKTS .globl _EP6ISOINPKTS .globl _EP4ISOINPKTS .globl _EP2ISOINPKTS .globl _EP8FIFOPFL .globl _EP8FIFOPFH .globl _EP6FIFOPFL .globl _EP6FIFOPFH .globl _EP4FIFOPFL .globl _EP4FIFOPFH .globl _EP2FIFOPFL .globl _EP2FIFOPFH .globl _EP8AUTOINLENL .globl _EP8AUTOINLENH .globl _EP6AUTOINLENL .globl _EP6AUTOINLENH .globl _EP4AUTOINLENL .globl _EP4AUTOINLENH .globl _EP2AUTOINLENL .globl _EP2AUTOINLENH .globl _EP8FIFOCFG .globl _EP6FIFOCFG .globl _EP4FIFOCFG .globl _EP2FIFOCFG .globl _EP8CFG .globl _EP6CFG .globl _EP4CFG .globl _EP2CFG .globl _EP1INCFG .globl _EP1OUTCFG .globl _REVCTL .globl _REVID .globl _FIFOPINPOLAR .globl _UART230 .globl _BPADDRL .globl _BPADDRH .globl _BREAKPT .globl _FIFORESET .globl _PINFLAGSCD .globl _PINFLAGSAB .globl _IFCONFIG .globl _CPUCS .globl _RES_WAVEDATA_END .globl _GPIF_WAVE_DATA .globl _hook_sv .globl _hook_uv .globl _hook_fgv .globl _setup_autovectors ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (DATA) _IOA = 0x0080 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _DPL1 = 0x0084 _DPH1 = 0x0085 _DPS = 0x0086 _PCON = 0x0087 _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _CKCON = 0x008e _IOB = 0x0090 _EXIF = 0x0091 _MPAGE = 0x0092 _SCON0 = 0x0098 _SBUF0 = 0x0099 _APTR1H = 0x009a _APTR1L = 0x009b _AUTODAT1 = 0x009c _AUTOPTRH2 = 0x009d _AUTOPTRL2 = 0x009e _AUTODAT2 = 0x009f _IOC = 0x00a0 _INT2CLR = 0x00a1 _INT4CLR = 0x00a2 _IE = 0x00a8 _EP2468STAT = 0x00aa _EP24FIFOFLGS = 0x00ab _EP68FIFOFLGS = 0x00ac _AUTOPTRSETUP = 0x00af _IOD = 0x00b0 _IOE = 0x00b1 _OEA = 0x00b2 _OEB = 0x00b3 _OEC = 0x00b4 _OED = 0x00b5 _OEE = 0x00b6 _IP = 0x00b8 _EP01STAT = 0x00ba _GPIFTRIG = 0x00bb _GPIFSGLDATH = 0x00bd _GPIFSGLDATLX = 0x00be _GPIFSGLDATLNOX = 0x00bf _SCON1 = 0x00c0 _SBUF1 = 0x00c1 _T2CON = 0x00c8 _RCAP2L = 0x00ca _RCAP2H = 0x00cb _TL2 = 0x00cc _TH2 = 0x00cd _PSW = 0x00d0 _EICON = 0x00d8 _ACC = 0x00e0 _EIE = 0x00e8 _B = 0x00f0 _EIP = 0x00f8 ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (DATA) _A0 = 0x0080 _A1 = 0x0081 _A2 = 0x0082 _A3 = 0x0083 _A4 = 0x0084 _A5 = 0x0085 _A6 = 0x0086 _A7 = 0x0087 _SEL = 0x0086 _IT0 = 0x0088 _IE0 = 0x0089 _IT1 = 0x008a _IE1 = 0x008b _TR0 = 0x008c _TF0 = 0x008d _TR1 = 0x008e _TF1 = 0x008f _RI = 0x0098 _TI = 0x0099 _RB8 = 0x009a _TB8 = 0x009b _REN = 0x009c _SM2 = 0x009d _SM1 = 0x009e _SM0 = 0x009f _EX0 = 0x00a8 _ET0 = 0x00a9 _EX1 = 0x00aa _ET1 = 0x00ab _ES0 = 0x00ac _ET2 = 0x00ad _ES1 = 0x00ae _EA = 0x00af _D0 = 0x00b0 _D1 = 0x00b1 _D2 = 0x00b2 _D3 = 0x00b3 _D4 = 0x00b4 _D5 = 0x00b5 _D6 = 0x00b6 _D7 = 0x00b7 _PX0 = 0x00b8 _PT0 = 0x00b9 _PX1 = 0x00ba _PT1 = 0x00bb _PS0 = 0x00bc _PT2 = 0x00bd _PS1 = 0x00be _RI1 = 0x00c0 _TI1 = 0x00c1 _RB81 = 0x00c2 _TB81 = 0x00c3 _REN1 = 0x00c4 _SM21 = 0x00c5 _SM11 = 0x00c6 _SM01 = 0x00c7 _CP_RL2 = 0x00c8 _C_T2 = 0x00c9 _TR2 = 0x00ca _EXEN2 = 0x00cb _TCLK = 0x00cc _RCLK = 0x00cd _EXF2 = 0x00ce _TF2 = 0x00cf _P = 0x00d0 _FL = 0x00d1 _OV = 0x00d2 _RS0 = 0x00d3 _RS1 = 0x00d4 _F0 = 0x00d5 _AC = 0x00d6 _CY = 0x00d7 _INT6 = 0x00db _RESI = 0x00dc _ERESI = 0x00dd _SMOD1 = 0x00df _EIUSB = 0x00e8 _EI2C = 0x00e9 _EIEX4 = 0x00ea _EIEX5 = 0x00eb _EIEX6 = 0x00ec _PUSB = 0x00f8 _PI2C = 0x00f9 _EIPX4 = 0x00fa _EIPX5 = 0x00fb _EIPX6 = 0x00fc ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) _hook_sv_PARM_2:: .ds 2 .area OSEG (OVR,DATA) _hook_uv_PARM_2:: .ds 2 .area OSEG (OVR,DATA) _hook_fgv_PARM_2:: .ds 2 ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) _hook_sv_t_1_1: .ds 1 _hook_uv_t_1_1: .ds 1 _hook_fgv_t_1_1: .ds 1 ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) _GPIF_WAVE_DATA = 0xe400 _RES_WAVEDATA_END = 0xe480 _CPUCS = 0xe600 _IFCONFIG = 0xe601 _PINFLAGSAB = 0xe602 _PINFLAGSCD = 0xe603 _FIFORESET = 0xe604 _BREAKPT = 0xe605 _BPADDRH = 0xe606 _BPADDRL = 0xe607 _UART230 = 0xe608 _FIFOPINPOLAR = 0xe609 _REVID = 0xe60a _REVCTL = 0xe60b _EP1OUTCFG = 0xe610 _EP1INCFG = 0xe611 _EP2CFG = 0xe612 _EP4CFG = 0xe613 _EP6CFG = 0xe614 _EP8CFG = 0xe615 _EP2FIFOCFG = 0xe618 _EP4FIFOCFG = 0xe619 _EP6FIFOCFG = 0xe61a _EP8FIFOCFG = 0xe61b _EP2AUTOINLENH = 0xe620 _EP2AUTOINLENL = 0xe621 _EP4AUTOINLENH = 0xe622 _EP4AUTOINLENL = 0xe623 _EP6AUTOINLENH = 0xe624 _EP6AUTOINLENL = 0xe625 _EP8AUTOINLENH = 0xe626 _EP8AUTOINLENL = 0xe627 _EP2FIFOPFH = 0xe630 _EP2FIFOPFL = 0xe631 _EP4FIFOPFH = 0xe632 _EP4FIFOPFL = 0xe633 _EP6FIFOPFH = 0xe634 _EP6FIFOPFL = 0xe635 _EP8FIFOPFH = 0xe636 _EP8FIFOPFL = 0xe637 _EP2ISOINPKTS = 0xe640 _EP4ISOINPKTS = 0xe641 _EP6ISOINPKTS = 0xe642 _EP8ISOINPKTS = 0xe643 _INPKTEND = 0xe648 _OUTPKTEND = 0xe649 _EP2FIFOIE = 0xe650 _EP2FIFOIRQ = 0xe651 _EP4FIFOIE = 0xe652 _EP4FIFOIRQ = 0xe653 _EP6FIFOIE = 0xe654 _EP6FIFOIRQ = 0xe655 _EP8FIFOIE = 0xe656 _EP8FIFOIRQ = 0xe657 _IBNIE = 0xe658 _IBNIRQ = 0xe659 _NAKIE = 0xe65a _NAKIRQ = 0xe65b _USBIE = 0xe65c _USBIRQ = 0xe65d _EPIE = 0xe65e _EPIRQ = 0xe65f _GPIFIE = 0xe660 _GPIFIRQ = 0xe661 _USBERRIE = 0xe662 _USBERRIRQ = 0xe663 _ERRCNTLIM = 0xe664 _CLRERRCNT = 0xe665 _INT2IVEC = 0xe666 _INT4IVEC = 0xe667 _INTSETUP = 0xe668 _PORTACFG = 0xe670 _PORTCCFG = 0xe671 _PORTECFG = 0xe672 _I2CS = 0xe678 _I2DAT = 0xe679 _I2CTL = 0xe67a _XAUTODAT1 = 0xe67b _XAUTODAT2 = 0xe67c _USBCS = 0xe680 _SUSPEND = 0xe681 _WAKEUPCS = 0xe682 _TOGCTL = 0xe683 _USBFRAMEH = 0xe684 _USBFRAMEL = 0xe685 _MICROFRAME = 0xe686 _FNADDR = 0xe687 _EP0BCH = 0xe68a _EP0BCL = 0xe68b _EP1OUTBC = 0xe68d _EP1INBC = 0xe68f _EP2BCH = 0xe690 _EP2BCL = 0xe691 _EP4BCH = 0xe694 _EP4BCL = 0xe695 _EP6BCH = 0xe698 _EP6BCL = 0xe699 _EP8BCH = 0xe69c _EP8BCL = 0xe69d _EP0CS = 0xe6a0 _EP1OUTCS = 0xe6a1 _EP1INCS = 0xe6a2 _EP2CS = 0xe6a3 _EP4CS = 0xe6a4 _EP6CS = 0xe6a5 _EP8CS = 0xe6a6 _EP2FIFOFLGS = 0xe6a7 _EP4FIFOFLGS = 0xe6a8 _EP6FIFOFLGS = 0xe6a9 _EP8FIFOFLGS = 0xe6aa _EP2FIFOBCH = 0xe6ab _EP2FIFOBCL = 0xe6ac _EP4FIFOBCH = 0xe6ad _EP4FIFOBCL = 0xe6ae _EP6FIFOBCH = 0xe6af _EP6FIFOBCL = 0xe6b0 _EP8FIFOBCH = 0xe6b1 _EP8FIFOBCL = 0xe6b2 _SUDPTRH = 0xe6b3 _SUDPTRL = 0xe6b4 _SUDPTRCTL = 0xe6b5 _SETUPDAT = 0xe6b8 _GPIFWFSELECT = 0xe6c0 _GPIFIDLECS = 0xe6c1 _GPIFIDLECTL = 0xe6c2 _GPIFCTLCFG = 0xe6c3 _GPIFADRH = 0xe6c4 _GPIFADRL = 0xe6c5 _GPIFTCB3 = 0xe6ce _GPIFTCB2 = 0xe6cf _GPIFTCB1 = 0xe6d0 _GPIFTCB0 = 0xe6d1 _EP2GPIFFLGSEL = 0xe6d2 _EP2GPIFPFSTOP = 0xe6d3 _EP2GPIFTRIG = 0xe6d4 _EP4GPIFFLGSEL = 0xe6da _EP4GPIFPFSTOP = 0xe6db _EP4GPIFTRIG = 0xe6dc _EP6GPIFFLGSEL = 0xe6e2 _EP6GPIFPFSTOP = 0xe6e3 _EP6GPIFTRIG = 0xe6e4 _EP8GPIFFLGSEL = 0xe6ea _EP8GPIFPFSTOP = 0xe6eb _EP8GPIFTRIG = 0xe6ec _XGPIFSGLDATH = 0xe6f0 _XGPIFSGLDATLX = 0xe6f1 _XGPIFSGLDATLNOX = 0xe6f2 _GPIFREADYCFG = 0xe6f3 _GPIFREADYSTAT = 0xe6f4 _GPIFABORT = 0xe6f5 _FLOWSTATE = 0xe6c6 _FLOWLOGIC = 0xe6c7 _FLOWEQ0CTL = 0xe6c8 _FLOWEQ1CTL = 0xe6c9 _FLOWHOLDOFF = 0xe6ca _FLOWSTB = 0xe6cb _FLOWSTBEDGE = 0xe6cc _FLOWSTBHPERIOD = 0xe6cd _GPIFHOLDAMOUNT = 0xe60c _UDMACRCH = 0xe67d _UDMACRCL = 0xe67e _UDMACRCQUAL = 0xe67f _DBUG = 0xe6f8 _TESTCFG = 0xe6f9 _USBTEST = 0xe6fa _CT1 = 0xe6fb _CT2 = 0xe6fc _CT3 = 0xe6fd _CT4 = 0xe6fe _EP0BUF = 0xe740 _EP1OUTBUF = 0xe780 _EP1INBUF = 0xe7c0 _EP2FIFOBUF = 0xf000 _EP4FIFOBUF = 0xf400 _EP6FIFOBUF = 0xf800 _EP8FIFOBUF = 0xfc00 ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'hook_sv' ;------------------------------------------------------------ ;addr Allocated with name '_hook_sv_PARM_2' ;vector_number Allocated to registers r2 ;------------------------------------------------------------ ; isr.c:40: hook_sv (unsigned char vector_number, unsigned short addr) ; ----------------------------------------- ; function hook_sv ; ----------------------------------------- _hook_sv: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 mov r2,dpl ; isr.c:46: if (vector_number < SV_MIN || vector_number > SV_MAX) cjne r2,#0x03,00112$ 00112$: jc 00101$ mov a,r2 add a,#0xff - 0x63 jnc 00102$ 00101$: ; isr.c:47: return; ret 00102$: ; isr.c:49: if ((vector_number & 0x0f) != 0x03 && (vector_number & 0x0f) != 0x0b) mov a,#0x0F anl a,r2 mov r3,a cjne r3,#0x03,00115$ sjmp 00105$ 00115$: mov a,#0x0F anl a,r2 mov r3,a ; isr.c:50: return; cjne r3,#0x0B,00107$ 00105$: ; isr.c:52: t = EA; mov c,_EA mov _hook_sv_t_1_1,c ; isr.c:53: EA = 0; clr _EA ; isr.c:54: _standard_interrupt_vector[vector_number] = LJMP_OPCODE; mov a,r2 add a,#__standard_interrupt_vector mov dpl,a clr a addc a,#(__standard_interrupt_vector >> 8) mov dph,a mov a,#0x02 movx @dptr,a ; isr.c:55: _standard_interrupt_vector[vector_number + 1] = addr >> 8; mov r3,#0x00 mov a,#0x01 add a,r2 mov r4,a clr a addc a,r3 mov r5,a mov a,r4 add a,#__standard_interrupt_vector mov dpl,a mov a,r5 addc a,#(__standard_interrupt_vector >> 8) mov dph,a mov a,(_hook_sv_PARM_2 + 1) mov r4,a movx @dptr,a ; isr.c:56: _standard_interrupt_vector[vector_number + 2] = addr & 0xff; mov a,#0x02 add a,r2 mov r2,a clr a addc a,r3 mov r3,a mov a,r2 add a,#__standard_interrupt_vector mov dpl,a mov a,r3 addc a,#(__standard_interrupt_vector >> 8) mov dph,a mov r2,_hook_sv_PARM_2 mov r3,#0x00 mov a,r2 movx @dptr,a ; isr.c:57: EA = t; mov c,_hook_sv_t_1_1 mov _EA,c 00107$: ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'hook_uv' ;------------------------------------------------------------ ;addr Allocated with name '_hook_uv_PARM_2' ;vector_number Allocated to registers r2 ;------------------------------------------------------------ ; isr.c:67: hook_uv (unsigned char vector_number, unsigned short addr) ; ----------------------------------------- ; function hook_uv ; ----------------------------------------- _hook_uv: ; isr.c:73: if (vector_number < UV_MIN || vector_number > UV_MAX) mov a,dpl mov r2,a add a,#0xff - 0x7C jnc 00102$ ; isr.c:74: return; ret 00102$: ; isr.c:76: if ((vector_number & 0x3) != 0) mov a,r2 anl a,#0x03 jz 00105$ ; isr.c:77: return; ret 00105$: ; isr.c:79: t = EA; mov c,_EA mov _hook_uv_t_1_1,c ; isr.c:80: EA = 0; clr _EA ; isr.c:81: _usb_autovector[vector_number] = LJMP_OPCODE; mov a,r2 add a,#__usb_autovector mov dpl,a clr a addc a,#(__usb_autovector >> 8) mov dph,a mov a,#0x02 movx @dptr,a ; isr.c:82: _usb_autovector[vector_number + 1] = addr >> 8; mov r3,#0x00 mov a,#0x01 add a,r2 mov r4,a clr a addc a,r3 mov r5,a mov a,r4 add a,#__usb_autovector mov dpl,a mov a,r5 addc a,#(__usb_autovector >> 8) mov dph,a mov a,(_hook_uv_PARM_2 + 1) movx @dptr,a ; isr.c:83: _usb_autovector[vector_number + 2] = addr & 0xff; mov a,#0x02 add a,r2 mov r2,a clr a addc a,r3 mov r3,a mov a,r2 add a,#__usb_autovector mov dpl,a mov a,r3 addc a,#(__usb_autovector >> 8) mov dph,a mov r2,_hook_uv_PARM_2 mov a,r2 movx @dptr,a ; isr.c:84: EA = t; mov c,_hook_uv_t_1_1 mov _EA,c ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'hook_fgv' ;------------------------------------------------------------ ;addr Allocated with name '_hook_fgv_PARM_2' ;vector_number Allocated to registers r2 ;------------------------------------------------------------ ; isr.c:94: hook_fgv (unsigned char vector_number, unsigned short addr) ; ----------------------------------------- ; function hook_fgv ; ----------------------------------------- _hook_fgv: mov r2,dpl ; isr.c:100: if (vector_number < FGV_MIN || vector_number > FGV_MAX) cjne r2,#0x80,00110$ 00110$: jc 00101$ mov a,r2 add a,#0xff - 0xB4 jnc 00102$ 00101$: ; isr.c:101: return; ret 00102$: ; isr.c:103: if ((vector_number & 0x3) != 0) mov a,r2 anl a,#0x03 jz 00105$ ; isr.c:104: return; ret 00105$: ; isr.c:106: t = EA; mov c,_EA mov _hook_fgv_t_1_1,c ; isr.c:107: EA = 0; clr _EA ; isr.c:108: _fifo_gpif_autovector[vector_number] = LJMP_OPCODE; mov a,r2 add a,#__fifo_gpif_autovector mov dpl,a clr a addc a,#(__fifo_gpif_autovector >> 8) mov dph,a mov a,#0x02 movx @dptr,a ; isr.c:109: _fifo_gpif_autovector[vector_number + 1] = addr >> 8; mov r3,#0x00 mov a,#0x01 add a,r2 mov r4,a clr a addc a,r3 mov r5,a mov a,r4 add a,#__fifo_gpif_autovector mov dpl,a mov a,r5 addc a,#(__fifo_gpif_autovector >> 8) mov dph,a mov a,(_hook_fgv_PARM_2 + 1) movx @dptr,a ; isr.c:110: _fifo_gpif_autovector[vector_number + 2] = addr & 0xff; mov a,#0x02 add a,r2 mov r2,a clr a addc a,r3 mov r3,a mov a,r2 add a,#__fifo_gpif_autovector mov dpl,a mov a,r3 addc a,#(__fifo_gpif_autovector >> 8) mov dph,a mov r2,_hook_fgv_PARM_2 mov a,r2 movx @dptr,a ; isr.c:111: EA = t; mov c,_hook_fgv_t_1_1 mov _EA,c ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'setup_autovectors' ;------------------------------------------------------------ ;------------------------------------------------------------ ; isr.c:122: setup_autovectors (void) ; ----------------------------------------- ; function setup_autovectors ; ----------------------------------------- _setup_autovectors: ; isr.c:125: EIUSB = 0; clr _EIUSB ; isr.c:126: EIEX4 = 0; clr _EIEX4 ; isr.c:128: hook_sv (SV_INT_2, (unsigned short) _usb_autovector); mov _hook_sv_PARM_2,#__usb_autovector mov (_hook_sv_PARM_2 + 1),#(__usb_autovector >> 8) mov dpl,#0x43 lcall _hook_sv ; isr.c:129: hook_sv (SV_INT_4, (unsigned short) _fifo_gpif_autovector); mov _hook_sv_PARM_2,#__fifo_gpif_autovector mov (_hook_sv_PARM_2 + 1),#(__fifo_gpif_autovector >> 8) mov dpl,#0x53 lcall _hook_sv ; isr.c:132: SYNCDELAY; nop; nop; nop; ; isr.c:133: EP2FIFOIE = 0; SYNCDELAY; mov dptr,#_EP2FIFOIE clr a movx @dptr,a nop; nop; nop; ; isr.c:134: EP4FIFOIE = 0; SYNCDELAY; mov dptr,#_EP4FIFOIE clr a movx @dptr,a nop; nop; nop; ; isr.c:135: EP6FIFOIE = 0; SYNCDELAY; mov dptr,#_EP6FIFOIE clr a movx @dptr,a nop; nop; nop; ; isr.c:136: EP8FIFOIE = 0; SYNCDELAY; mov dptr,#_EP8FIFOIE clr a movx @dptr,a nop; nop; nop; ; isr.c:139: EP2FIFOIRQ = 0xff; SYNCDELAY; mov dptr,#_EP2FIFOIRQ mov a,#0xFF movx @dptr,a nop; nop; nop; ; isr.c:140: EP4FIFOIRQ = 0xff; SYNCDELAY; mov dptr,#_EP4FIFOIRQ mov a,#0xFF movx @dptr,a nop; nop; nop; ; isr.c:141: EP6FIFOIRQ = 0xff; SYNCDELAY; mov dptr,#_EP6FIFOIRQ mov a,#0xFF movx @dptr,a nop; nop; nop; ; isr.c:142: EP8FIFOIRQ = 0xff; SYNCDELAY; mov dptr,#_EP8FIFOIRQ mov a,#0xFF movx @dptr,a nop; nop; nop; ; isr.c:144: IBNIE = 0; mov dptr,#_IBNIE clr a movx @dptr,a ; isr.c:145: IBNIRQ = 0xff; mov dptr,#_IBNIRQ mov a,#0xFF movx @dptr,a ; isr.c:146: NAKIE = 0; mov dptr,#_NAKIE clr a movx @dptr,a ; isr.c:147: NAKIRQ = 0xff; mov dptr,#_NAKIRQ mov a,#0xFF movx @dptr,a ; isr.c:148: USBIE = 0; mov dptr,#_USBIE clr a movx @dptr,a ; isr.c:149: USBIRQ = 0xff; mov dptr,#_USBIRQ mov a,#0xFF movx @dptr,a ; isr.c:150: EPIE = 0; mov dptr,#_EPIE clr a movx @dptr,a ; isr.c:151: EPIRQ = 0xff; mov dptr,#_EPIRQ mov a,#0xFF movx @dptr,a ; isr.c:152: SYNCDELAY; GPIFIE = 0; nop; nop; nop; mov dptr,#_GPIFIE clr a movx @dptr,a ; isr.c:153: SYNCDELAY; GPIFIRQ = 0xff; nop; nop; nop; mov dptr,#_GPIFIRQ mov a,#0xFF movx @dptr,a ; isr.c:154: USBERRIE = 0; mov dptr,#_USBERRIE clr a movx @dptr,a ; isr.c:155: USBERRIRQ = 0xff; mov dptr,#_USBERRIRQ mov a,#0xFF movx @dptr,a ; isr.c:156: CLRERRCNT = 0; mov dptr,#_CLRERRCNT clr a movx @dptr,a ; isr.c:158: INTSETUP = bmAV2EN | bmAV4EN | bmINT4IN; mov dptr,#_INTSETUP mov a,#0x0B movx @dptr,a ; isr.c:161: EXIF &= ~bmEXIF_USBINT; ; isr.c:162: EXIF &= ~bmEXIF_IE4; anl _EXIF,#(0xEF&0xBF) ; isr.c:165: EIUSB = 1; setb _EIUSB ; isr.c:166: EIEX4 = 1; setb _EIEX4 ret .area CSEG (CODE) .area CONST (CODE) .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/delay.sym0000644000175000017500000006671712576764164020157 0ustar carlescarles ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 1. Symbol Table A 00D6 AC 00D6 ACC 00E0 ACC.0 00E0 ACC.1 00E1 ACC.2 00E2 ACC.3 00E3 ACC.4 00E4 ACC.5 00E5 ACC.6 00E6 ACC.7 00E7 B 00F0 B.0 00F0 B.1 00F1 B.2 00F2 B.3 00F3 B.4 00F4 B.5 00F5 B.6 00F6 B.7 00F7 CPRL2 00C8 CT2 00C9 CY 00D7 DPH 0083 DPL 0082 EA 00AF ES 00AC ET0 00A9 ET1 00AB ET2 00AD EX0 00A8 EX1 00AA EXEN2 00CB EXF2 00CE F0 00D5 IE 00A8 IE.0 00A8 IE.1 00A9 IE.2 00AA IE.3 00AB IE.4 00AC IE.5 00AD IE.7 00AF IE0 0089 IE1 008B INT0 00B2 INT1 00B3 IP 00B8 IP.0 00B8 IP.1 00B9 IP.2 00BA IP.3 00BB IP.4 00BC IP.5 00BD IT0 0088 IT1 008A OV 00D2 P 00D0 P0 0080 P0.0 0080 P0.1 0081 P0.2 0082 P0.3 0083 P0.4 0084 P0.5 0085 P0.6 0086 P0.7 0087 P1 0090 P1.0 0090 P1.1 0091 P1.2 0092 P1.3 0093 P1.4 0094 P1.5 0095 P1.6 0096 P1.7 0097 P2 00A0 P2.0 00A0 P2.1 00A1 P2.2 00A2 P2.3 00A3 P2.4 00A4 P2.5 00A5 P2.6 00A6 P2.7 00A7 P3 00B0 P3.0 00B0 P3.1 00B1 P3.2 00B2 P3.3 00B3 P3.4 00B4 P3.5 00B5 P3.6 00B6 P3.7 00B7 PCON 0087 PS 00BC PSW 00D0 PSW.0 00D0 PSW.1 00D1 PSW.2 00D2 PSW.3 00D3 PSW.4 00D4 PSW.5 00D5 PSW.6 00D6 PSW.7 00D7 PT0 00B9 PT1 00BB PT2 00BD PX0 00B8 PX1 00BA RB8 009A RCAP2H 00CB RCAP2L 00CA RCLK 00CD REN 009C RI 0098 RS0 00D3 RS1 00D4 RXD 00B0 SBUF 0099 SCON 0098 SCON.0 0098 SCON.1 0099 SCON.2 009A SCON.3 009B SCON.4 009C SCON.5 009D SCON.6 009E SCON.7 009F SM0 009F SM1 009E SM2 009D SP 0081 T2CON 00C8 T2CON.0 00C8 T2CON.1 00C9 T2CON.2 00CA T2CON.3 00CB T2CON.4 00CC T2CON.5 00CD T2CON.6 00CE T2CON.7 00CF TB8 009B TCLK 00CC TCON 0088 TCON.0 0088 TCON.1 0089 TCON.2 008A TCON.3 008B TCON.4 008C TCON.5 008D TCON.6 008E TCON.7 008F TF0 008D TF1 008F TF2 00CF TH0 008C TH1 008D TH2 00CD TI 0099 TL0 008A TL1 008B TL2 00CC TMOD 0089 TR0 008C TR1 008E TR2 00CA TXD 00B1 14 _mdelay 0014 GR 14 _mdelay1 0009 R 14 _udelay 0001 GR 14 _udelay1 0000 R a 00D6 ac 00D6 acc 00E0 acc.0 00E0 acc.1 00E1 acc.2 00E2 acc.3 00E3 acc.4 00E4 acc.5 00E5 acc.6 00E6 acc.7 00E7 ar0 = 0000 ar1 = 0001 ar2 = 0002 ar3 = 0003 ar4 = 0004 ar5 = 0005 ar6 = 0006 ar7 = 0007 b 00F0 b.0 00F0 b.1 00F1 b.2 00F2 b.3 00F3 b.4 00F4 b.5 00F5 b.6 00F6 b.7 00F7 cprl2 00C8 ct2 00C9 cy 00D7 dph 0083 dpl 0082 ea 00AF es 00AC et0 00A9 et1 00AB et2 00AD ex0 00A8 ex1 00AA exen2 00CB exf2 00CE f0 00D5 ie 00A8 ie.0 00A8 ie.1 00A9 ie.2 00AA ie.3 00AB ie.4 00AC ie.5 00AD ie.7 00AF ie0 0089 ie1 008B int0 00B2 int1 00B3 ip 00B8 ip.0 00B8 ip.1 00B9 ip.2 00BA ip.3 00BB ip.4 00BC ip.5 00BD it0 0088 it1 008A ov 00D2 p 00D0 p0 0080 p0.0 0080 p0.1 0081 p0.2 0082 p0.3 0083 p0.4 0084 p0.5 0085 p0.6 0086 p0.7 0087 p1 0090 p1.0 0090 p1.1 0091 p1.2 0092 p1.3 0093 p1.4 0094 p1.5 0095 p1.6 0096 p1.7 0097 p2 00A0 p2.0 00A0 p2.1 00A1 p2.2 00A2 p2.3 00A3 p2.4 00A4 p2.5 00A5 p2.6 00A6 p2.7 00A7 p3 00B0 p3.0 00B0 p3.1 00B1 p3.2 00B2 p3.3 00B3 p3.4 00B4 p3.5 00B5 p3.6 00B6 p3.7 00B7 pcon 0087 ps 00BC psw 00D0 psw.0 00D0 psw.1 00D1 psw.2 00D2 psw.3 00D3 psw.4 00D4 psw.5 00D5 psw.6 00D6 psw.7 00D7 pt0 00B9 pt1 00BB pt2 00BD px0 00B8 px1 00BA rb8 009A rcap2h 00CB rcap2l 00CA rclk 00CD ren 009C ri 0098 rs0 00D3 rs1 00D4 rxd 00B0 sbuf 0099 scon 0098 scon.0 0098 scon.1 0099 scon.2 009A scon.3 009B scon.4 009C scon.5 009D scon.6 009E scon.7 009F sm0 009F sm1 009E sm2 009D sp 0081 t2con 00C8 t2con.0 00C8 t2con.1 00C9 t2con.2 00CA t2con.3 00CB t2con.4 00CC t2con.5 00CD t2con.6 00CE t2con.7 00CF tb8 009B tclk 00CC tcon 0088 tcon.0 0088 tcon.1 0089 tcon.2 008A tcon.3 008B tcon.4 008C tcon.5 008D tcon.6 008E tcon.7 008F tf0 008D tf1 008F tf2 00CF th0 008C th1 008D th2 00CD ti 0099 tl0 008A tl1 008B tl2 00CC tmod 0089 tr0 008C tr1 008E tr2 00CA txd 00B1 ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051), page 2. Area Table 0 _CODE size 0 flags 0 1 RSEG size 0 flags 0 2 REG_BANK_0 size 8 flags 4 3 DSEG size 0 flags 0 4 OSEG size 0 flags 4 5 ISEG size 0 flags 0 6 IABS size 0 flags 8 7 BSEG size 0 flags 80 8 PSEG size 0 flags 50 9 XSEG size 0 flags 40 A XABS size 0 flags 48 B HOME size 0 flags 20 C GSINIT0 size 0 flags 20 D GSINIT1 size 0 flags 20 E GSINIT2 size 0 flags 20 F GSINIT3 size 0 flags 20 10 GSINIT4 size 0 flags 20 11 GSINIT5 size 0 flags 20 12 GSINIT size 0 flags 20 13 GSFINAL size 0 flags 20 14 CSEG size 25 flags 20 15 CONST size 0 flags 20 16 CABS size 0 flags 28 gnss-sdr-0.0.6/firmware/GN3S_v2/lib/timer.asm0000644000175000017500000003625312576764164020141 0ustar carlescarles;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) ; This file was generated Mon Jul 30 11:40:53 2012 ;-------------------------------------------------------- .module timer .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _EIPX6 .globl _EIPX5 .globl _EIPX4 .globl _PI2C .globl _PUSB .globl _EIEX6 .globl _EIEX5 .globl _EIEX4 .globl _EI2C .globl _EIUSB .globl _SMOD1 .globl _ERESI .globl _RESI .globl _INT6 .globl _CY .globl _AC .globl _F0 .globl _RS1 .globl _RS0 .globl _OV .globl _FL .globl _P .globl _TF2 .globl _EXF2 .globl _RCLK .globl _TCLK .globl _EXEN2 .globl _TR2 .globl _C_T2 .globl _CP_RL2 .globl _SM01 .globl _SM11 .globl _SM21 .globl _REN1 .globl _TB81 .globl _RB81 .globl _TI1 .globl _RI1 .globl _PS1 .globl _PT2 .globl _PS0 .globl _PT1 .globl _PX1 .globl _PT0 .globl _PX0 .globl _D7 .globl _D6 .globl _D5 .globl _D4 .globl _D3 .globl _D2 .globl _D1 .globl _D0 .globl _EA .globl _ES1 .globl _ET2 .globl _ES0 .globl _ET1 .globl _EX1 .globl _ET0 .globl _EX0 .globl _SM0 .globl _SM1 .globl _SM2 .globl _REN .globl _TB8 .globl _RB8 .globl _TI .globl _RI .globl _TF1 .globl _TR1 .globl _TF0 .globl _TR0 .globl _IE1 .globl _IT1 .globl _IE0 .globl _IT0 .globl _SEL .globl _A7 .globl _A6 .globl _A5 .globl _A4 .globl _A3 .globl _A2 .globl _A1 .globl _A0 .globl _EIP .globl _B .globl _EIE .globl _ACC .globl _EICON .globl _PSW .globl _TH2 .globl _TL2 .globl _RCAP2H .globl _RCAP2L .globl _T2CON .globl _SBUF1 .globl _SCON1 .globl _GPIFSGLDATLNOX .globl _GPIFSGLDATLX .globl _GPIFSGLDATH .globl _GPIFTRIG .globl _EP01STAT .globl _IP .globl _OEE .globl _OED .globl _OEC .globl _OEB .globl _OEA .globl _IOE .globl _IOD .globl _AUTOPTRSETUP .globl _EP68FIFOFLGS .globl _EP24FIFOFLGS .globl _EP2468STAT .globl _IE .globl _INT4CLR .globl _INT2CLR .globl _IOC .globl _AUTODAT2 .globl _AUTOPTRL2 .globl _AUTOPTRH2 .globl _AUTODAT1 .globl _APTR1L .globl _APTR1H .globl _SBUF0 .globl _SCON0 .globl _MPAGE .globl _EXIF .globl _IOB .globl _CKCON .globl _TH1 .globl _TH0 .globl _TL1 .globl _TL0 .globl _TMOD .globl _TCON .globl _PCON .globl _DPS .globl _DPH1 .globl _DPL1 .globl _DPH .globl _DPL .globl _SP .globl _IOA .globl _EP8FIFOBUF .globl _EP6FIFOBUF .globl _EP4FIFOBUF .globl _EP2FIFOBUF .globl _EP1INBUF .globl _EP1OUTBUF .globl _EP0BUF .globl _CT4 .globl _CT3 .globl _CT2 .globl _CT1 .globl _USBTEST .globl _TESTCFG .globl _DBUG .globl _UDMACRCQUAL .globl _UDMACRCL .globl _UDMACRCH .globl _GPIFHOLDAMOUNT .globl _FLOWSTBHPERIOD .globl _FLOWSTBEDGE .globl _FLOWSTB .globl _FLOWHOLDOFF .globl _FLOWEQ1CTL .globl _FLOWEQ0CTL .globl _FLOWLOGIC .globl _FLOWSTATE .globl _GPIFABORT .globl _GPIFREADYSTAT .globl _GPIFREADYCFG .globl _XGPIFSGLDATLNOX .globl _XGPIFSGLDATLX .globl _XGPIFSGLDATH .globl _EP8GPIFTRIG .globl _EP8GPIFPFSTOP .globl _EP8GPIFFLGSEL .globl _EP6GPIFTRIG .globl _EP6GPIFPFSTOP .globl _EP6GPIFFLGSEL .globl _EP4GPIFTRIG .globl _EP4GPIFPFSTOP .globl _EP4GPIFFLGSEL .globl _EP2GPIFTRIG .globl _EP2GPIFPFSTOP .globl _EP2GPIFFLGSEL .globl _GPIFTCB0 .globl _GPIFTCB1 .globl _GPIFTCB2 .globl _GPIFTCB3 .globl _GPIFADRL .globl _GPIFADRH .globl _GPIFCTLCFG .globl _GPIFIDLECTL .globl _GPIFIDLECS .globl _GPIFWFSELECT .globl _SETUPDAT .globl _SUDPTRCTL .globl _SUDPTRL .globl _SUDPTRH .globl _EP8FIFOBCL .globl _EP8FIFOBCH .globl _EP6FIFOBCL .globl _EP6FIFOBCH .globl _EP4FIFOBCL .globl _EP4FIFOBCH .globl _EP2FIFOBCL .globl _EP2FIFOBCH .globl _EP8FIFOFLGS .globl _EP6FIFOFLGS .globl _EP4FIFOFLGS .globl _EP2FIFOFLGS .globl _EP8CS .globl _EP6CS .globl _EP4CS .globl _EP2CS .globl _EP1INCS .globl _EP1OUTCS .globl _EP0CS .globl _EP8BCL .globl _EP8BCH .globl _EP6BCL .globl _EP6BCH .globl _EP4BCL .globl _EP4BCH .globl _EP2BCL .globl _EP2BCH .globl _EP1INBC .globl _EP1OUTBC .globl _EP0BCL .globl _EP0BCH .globl _FNADDR .globl _MICROFRAME .globl _USBFRAMEL .globl _USBFRAMEH .globl _TOGCTL .globl _WAKEUPCS .globl _SUSPEND .globl _USBCS .globl _XAUTODAT2 .globl _XAUTODAT1 .globl _I2CTL .globl _I2DAT .globl _I2CS .globl _PORTECFG .globl _PORTCCFG .globl _PORTACFG .globl _INTSETUP .globl _INT4IVEC .globl _INT2IVEC .globl _CLRERRCNT .globl _ERRCNTLIM .globl _USBERRIRQ .globl _USBERRIE .globl _GPIFIRQ .globl _GPIFIE .globl _EPIRQ .globl _EPIE .globl _USBIRQ .globl _USBIE .globl _NAKIRQ .globl _NAKIE .globl _IBNIRQ .globl _IBNIE .globl _EP8FIFOIRQ .globl _EP8FIFOIE .globl _EP6FIFOIRQ .globl _EP6FIFOIE .globl _EP4FIFOIRQ .globl _EP4FIFOIE .globl _EP2FIFOIRQ .globl _EP2FIFOIE .globl _OUTPKTEND .globl _INPKTEND .globl _EP8ISOINPKTS .globl _EP6ISOINPKTS .globl _EP4ISOINPKTS .globl _EP2ISOINPKTS .globl _EP8FIFOPFL .globl _EP8FIFOPFH .globl _EP6FIFOPFL .globl _EP6FIFOPFH .globl _EP4FIFOPFL .globl _EP4FIFOPFH .globl _EP2FIFOPFL .globl _EP2FIFOPFH .globl _EP8AUTOINLENL .globl _EP8AUTOINLENH .globl _EP6AUTOINLENL .globl _EP6AUTOINLENH .globl _EP4AUTOINLENL .globl _EP4AUTOINLENH .globl _EP2AUTOINLENL .globl _EP2AUTOINLENH .globl _EP8FIFOCFG .globl _EP6FIFOCFG .globl _EP4FIFOCFG .globl _EP2FIFOCFG .globl _EP8CFG .globl _EP6CFG .globl _EP4CFG .globl _EP2CFG .globl _EP1INCFG .globl _EP1OUTCFG .globl _REVCTL .globl _REVID .globl _FIFOPINPOLAR .globl _UART230 .globl _BPADDRL .globl _BPADDRH .globl _BREAKPT .globl _FIFORESET .globl _PINFLAGSCD .globl _PINFLAGSAB .globl _IFCONFIG .globl _CPUCS .globl _RES_WAVEDATA_END .globl _GPIF_WAVE_DATA .globl _hook_timer_tick ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (DATA) _IOA = 0x0080 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _DPL1 = 0x0084 _DPH1 = 0x0085 _DPS = 0x0086 _PCON = 0x0087 _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _CKCON = 0x008e _IOB = 0x0090 _EXIF = 0x0091 _MPAGE = 0x0092 _SCON0 = 0x0098 _SBUF0 = 0x0099 _APTR1H = 0x009a _APTR1L = 0x009b _AUTODAT1 = 0x009c _AUTOPTRH2 = 0x009d _AUTOPTRL2 = 0x009e _AUTODAT2 = 0x009f _IOC = 0x00a0 _INT2CLR = 0x00a1 _INT4CLR = 0x00a2 _IE = 0x00a8 _EP2468STAT = 0x00aa _EP24FIFOFLGS = 0x00ab _EP68FIFOFLGS = 0x00ac _AUTOPTRSETUP = 0x00af _IOD = 0x00b0 _IOE = 0x00b1 _OEA = 0x00b2 _OEB = 0x00b3 _OEC = 0x00b4 _OED = 0x00b5 _OEE = 0x00b6 _IP = 0x00b8 _EP01STAT = 0x00ba _GPIFTRIG = 0x00bb _GPIFSGLDATH = 0x00bd _GPIFSGLDATLX = 0x00be _GPIFSGLDATLNOX = 0x00bf _SCON1 = 0x00c0 _SBUF1 = 0x00c1 _T2CON = 0x00c8 _RCAP2L = 0x00ca _RCAP2H = 0x00cb _TL2 = 0x00cc _TH2 = 0x00cd _PSW = 0x00d0 _EICON = 0x00d8 _ACC = 0x00e0 _EIE = 0x00e8 _B = 0x00f0 _EIP = 0x00f8 ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (DATA) _A0 = 0x0080 _A1 = 0x0081 _A2 = 0x0082 _A3 = 0x0083 _A4 = 0x0084 _A5 = 0x0085 _A6 = 0x0086 _A7 = 0x0087 _SEL = 0x0086 _IT0 = 0x0088 _IE0 = 0x0089 _IT1 = 0x008a _IE1 = 0x008b _TR0 = 0x008c _TF0 = 0x008d _TR1 = 0x008e _TF1 = 0x008f _RI = 0x0098 _TI = 0x0099 _RB8 = 0x009a _TB8 = 0x009b _REN = 0x009c _SM2 = 0x009d _SM1 = 0x009e _SM0 = 0x009f _EX0 = 0x00a8 _ET0 = 0x00a9 _EX1 = 0x00aa _ET1 = 0x00ab _ES0 = 0x00ac _ET2 = 0x00ad _ES1 = 0x00ae _EA = 0x00af _D0 = 0x00b0 _D1 = 0x00b1 _D2 = 0x00b2 _D3 = 0x00b3 _D4 = 0x00b4 _D5 = 0x00b5 _D6 = 0x00b6 _D7 = 0x00b7 _PX0 = 0x00b8 _PT0 = 0x00b9 _PX1 = 0x00ba _PT1 = 0x00bb _PS0 = 0x00bc _PT2 = 0x00bd _PS1 = 0x00be _RI1 = 0x00c0 _TI1 = 0x00c1 _RB81 = 0x00c2 _TB81 = 0x00c3 _REN1 = 0x00c4 _SM21 = 0x00c5 _SM11 = 0x00c6 _SM01 = 0x00c7 _CP_RL2 = 0x00c8 _C_T2 = 0x00c9 _TR2 = 0x00ca _EXEN2 = 0x00cb _TCLK = 0x00cc _RCLK = 0x00cd _EXF2 = 0x00ce _TF2 = 0x00cf _P = 0x00d0 _FL = 0x00d1 _OV = 0x00d2 _RS0 = 0x00d3 _RS1 = 0x00d4 _F0 = 0x00d5 _AC = 0x00d6 _CY = 0x00d7 _INT6 = 0x00db _RESI = 0x00dc _ERESI = 0x00dd _SMOD1 = 0x00df _EIUSB = 0x00e8 _EI2C = 0x00e9 _EIEX4 = 0x00ea _EIEX5 = 0x00eb _EIEX6 = 0x00ec _PUSB = 0x00f8 _PI2C = 0x00f9 _EIPX4 = 0x00fa _EIPX5 = 0x00fb _EIPX6 = 0x00fc ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) _GPIF_WAVE_DATA = 0xe400 _RES_WAVEDATA_END = 0xe480 _CPUCS = 0xe600 _IFCONFIG = 0xe601 _PINFLAGSAB = 0xe602 _PINFLAGSCD = 0xe603 _FIFORESET = 0xe604 _BREAKPT = 0xe605 _BPADDRH = 0xe606 _BPADDRL = 0xe607 _UART230 = 0xe608 _FIFOPINPOLAR = 0xe609 _REVID = 0xe60a _REVCTL = 0xe60b _EP1OUTCFG = 0xe610 _EP1INCFG = 0xe611 _EP2CFG = 0xe612 _EP4CFG = 0xe613 _EP6CFG = 0xe614 _EP8CFG = 0xe615 _EP2FIFOCFG = 0xe618 _EP4FIFOCFG = 0xe619 _EP6FIFOCFG = 0xe61a _EP8FIFOCFG = 0xe61b _EP2AUTOINLENH = 0xe620 _EP2AUTOINLENL = 0xe621 _EP4AUTOINLENH = 0xe622 _EP4AUTOINLENL = 0xe623 _EP6AUTOINLENH = 0xe624 _EP6AUTOINLENL = 0xe625 _EP8AUTOINLENH = 0xe626 _EP8AUTOINLENL = 0xe627 _EP2FIFOPFH = 0xe630 _EP2FIFOPFL = 0xe631 _EP4FIFOPFH = 0xe632 _EP4FIFOPFL = 0xe633 _EP6FIFOPFH = 0xe634 _EP6FIFOPFL = 0xe635 _EP8FIFOPFH = 0xe636 _EP8FIFOPFL = 0xe637 _EP2ISOINPKTS = 0xe640 _EP4ISOINPKTS = 0xe641 _EP6ISOINPKTS = 0xe642 _EP8ISOINPKTS = 0xe643 _INPKTEND = 0xe648 _OUTPKTEND = 0xe649 _EP2FIFOIE = 0xe650 _EP2FIFOIRQ = 0xe651 _EP4FIFOIE = 0xe652 _EP4FIFOIRQ = 0xe653 _EP6FIFOIE = 0xe654 _EP6FIFOIRQ = 0xe655 _EP8FIFOIE = 0xe656 _EP8FIFOIRQ = 0xe657 _IBNIE = 0xe658 _IBNIRQ = 0xe659 _NAKIE = 0xe65a _NAKIRQ = 0xe65b _USBIE = 0xe65c _USBIRQ = 0xe65d _EPIE = 0xe65e _EPIRQ = 0xe65f _GPIFIE = 0xe660 _GPIFIRQ = 0xe661 _USBERRIE = 0xe662 _USBERRIRQ = 0xe663 _ERRCNTLIM = 0xe664 _CLRERRCNT = 0xe665 _INT2IVEC = 0xe666 _INT4IVEC = 0xe667 _INTSETUP = 0xe668 _PORTACFG = 0xe670 _PORTCCFG = 0xe671 _PORTECFG = 0xe672 _I2CS = 0xe678 _I2DAT = 0xe679 _I2CTL = 0xe67a _XAUTODAT1 = 0xe67b _XAUTODAT2 = 0xe67c _USBCS = 0xe680 _SUSPEND = 0xe681 _WAKEUPCS = 0xe682 _TOGCTL = 0xe683 _USBFRAMEH = 0xe684 _USBFRAMEL = 0xe685 _MICROFRAME = 0xe686 _FNADDR = 0xe687 _EP0BCH = 0xe68a _EP0BCL = 0xe68b _EP1OUTBC = 0xe68d _EP1INBC = 0xe68f _EP2BCH = 0xe690 _EP2BCL = 0xe691 _EP4BCH = 0xe694 _EP4BCL = 0xe695 _EP6BCH = 0xe698 _EP6BCL = 0xe699 _EP8BCH = 0xe69c _EP8BCL = 0xe69d _EP0CS = 0xe6a0 _EP1OUTCS = 0xe6a1 _EP1INCS = 0xe6a2 _EP2CS = 0xe6a3 _EP4CS = 0xe6a4 _EP6CS = 0xe6a5 _EP8CS = 0xe6a6 _EP2FIFOFLGS = 0xe6a7 _EP4FIFOFLGS = 0xe6a8 _EP6FIFOFLGS = 0xe6a9 _EP8FIFOFLGS = 0xe6aa _EP2FIFOBCH = 0xe6ab _EP2FIFOBCL = 0xe6ac _EP4FIFOBCH = 0xe6ad _EP4FIFOBCL = 0xe6ae _EP6FIFOBCH = 0xe6af _EP6FIFOBCL = 0xe6b0 _EP8FIFOBCH = 0xe6b1 _EP8FIFOBCL = 0xe6b2 _SUDPTRH = 0xe6b3 _SUDPTRL = 0xe6b4 _SUDPTRCTL = 0xe6b5 _SETUPDAT = 0xe6b8 _GPIFWFSELECT = 0xe6c0 _GPIFIDLECS = 0xe6c1 _GPIFIDLECTL = 0xe6c2 _GPIFCTLCFG = 0xe6c3 _GPIFADRH = 0xe6c4 _GPIFADRL = 0xe6c5 _GPIFTCB3 = 0xe6ce _GPIFTCB2 = 0xe6cf _GPIFTCB1 = 0xe6d0 _GPIFTCB0 = 0xe6d1 _EP2GPIFFLGSEL = 0xe6d2 _EP2GPIFPFSTOP = 0xe6d3 _EP2GPIFTRIG = 0xe6d4 _EP4GPIFFLGSEL = 0xe6da _EP4GPIFPFSTOP = 0xe6db _EP4GPIFTRIG = 0xe6dc _EP6GPIFFLGSEL = 0xe6e2 _EP6GPIFPFSTOP = 0xe6e3 _EP6GPIFTRIG = 0xe6e4 _EP8GPIFFLGSEL = 0xe6ea _EP8GPIFPFSTOP = 0xe6eb _EP8GPIFTRIG = 0xe6ec _XGPIFSGLDATH = 0xe6f0 _XGPIFSGLDATLX = 0xe6f1 _XGPIFSGLDATLNOX = 0xe6f2 _GPIFREADYCFG = 0xe6f3 _GPIFREADYSTAT = 0xe6f4 _GPIFABORT = 0xe6f5 _FLOWSTATE = 0xe6c6 _FLOWLOGIC = 0xe6c7 _FLOWEQ0CTL = 0xe6c8 _FLOWEQ1CTL = 0xe6c9 _FLOWHOLDOFF = 0xe6ca _FLOWSTB = 0xe6cb _FLOWSTBEDGE = 0xe6cc _FLOWSTBHPERIOD = 0xe6cd _GPIFHOLDAMOUNT = 0xe60c _UDMACRCH = 0xe67d _UDMACRCL = 0xe67e _UDMACRCQUAL = 0xe67f _DBUG = 0xe6f8 _TESTCFG = 0xe6f9 _USBTEST = 0xe6fa _CT1 = 0xe6fb _CT2 = 0xe6fc _CT3 = 0xe6fd _CT4 = 0xe6fe _EP0BUF = 0xe740 _EP1OUTBUF = 0xe780 _EP1INBUF = 0xe7c0 _EP2FIFOBUF = 0xf000 _EP4FIFOBUF = 0xf400 _EP6FIFOBUF = 0xf800 _EP8FIFOBUF = 0xfc00 ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'hook_timer_tick' ;------------------------------------------------------------ ;isr_tick_handler Allocated to registers r2 r3 ;------------------------------------------------------------ ; timer.c:39: hook_timer_tick (unsigned short isr_tick_handler) ; ----------------------------------------- ; function hook_timer_tick ; ----------------------------------------- _hook_timer_tick: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 mov r2,dpl mov r3,dph ; timer.c:41: ET2 = 0; // disable timer 2 interrupts clr _ET2 ; timer.c:42: hook_sv (SV_TIMER_2, isr_tick_handler); mov _hook_sv_PARM_2,r2 mov (_hook_sv_PARM_2 + 1),r3 mov dpl,#0x2B lcall _hook_sv ; timer.c:44: RCAP2H = RELOAD_VALUE >> 8; // setup the auto reload value mov _RCAP2H,#0x63 ; timer.c:45: RCAP2L = RELOAD_VALUE; mov _RCAP2L,#0xC0 ; timer.c:47: T2CON = 0x04; // interrupt on overflow; reload; run mov _T2CON,#0x04 ; timer.c:48: ET2 = 1; // enable timer 2 interrupts setb _ET2 ret .area CSEG (CODE) .area CONST (CODE) .area CABS (ABS,CODE) gnss-sdr-0.0.6/firmware/GN3S_v2/lib/timer.lst0000644000175000017500000011635312576764164020163 0ustar carlescarles 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Feb 3 2010) (UNIX) 4 ; This file was generated Mon Jul 30 11:40:53 2012 5 ;-------------------------------------------------------- 6 .module timer 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _EIPX6 13 .globl _EIPX5 14 .globl _EIPX4 15 .globl _PI2C 16 .globl _PUSB 17 .globl _EIEX6 18 .globl _EIEX5 19 .globl _EIEX4 20 .globl _EI2C 21 .globl _EIUSB 22 .globl _SMOD1 23 .globl _ERESI 24 .globl _RESI 25 .globl _INT6 26 .globl _CY 27 .globl _AC 28 .globl _F0 29 .globl _RS1 30 .globl _RS0 31 .globl _OV 32 .globl _FL 33 .globl _P 34 .globl _TF2 35 .globl _EXF2 36 .globl _RCLK 37 .globl _TCLK 38 .globl _EXEN2 39 .globl _TR2 40 .globl _C_T2 41 .globl _CP_RL2 42 .globl _SM01 43 .globl _SM11 44 .globl _SM21 45 .globl _REN1 46 .globl _TB81 47 .globl _RB81 48 .globl _TI1 49 .globl _RI1 50 .globl _PS1 51 .globl _PT2 52 .globl _PS0 53 .globl _PT1 54 .globl _PX1 55 .globl _PT0 56 .globl _PX0 57 .globl _D7 58 .globl _D6 59 .globl _D5 60 .globl _D4 61 .globl _D3 62 .globl _D2 63 .globl _D1 64 .globl _D0 65 .globl _EA 66 .globl _ES1 67 .globl _ET2 68 .globl _ES0 69 .globl _ET1 70 .globl _EX1 71 .globl _ET0 72 .globl _EX0 73 .globl _SM0 74 .globl _SM1 75 .globl _SM2 76 .globl _REN 77 .globl _TB8 78 .globl _RB8 79 .globl _TI 80 .globl _RI 81 .globl _TF1 82 .globl _TR1 83 .globl _TF0 84 .globl _TR0 85 .globl _IE1 86 .globl _IT1 87 .globl _IE0 88 .globl _IT0 89 .globl _SEL 90 .globl _A7 91 .globl _A6 92 .globl _A5 93 .globl _A4 94 .globl _A3 95 .globl _A2 96 .globl _A1 97 .globl _A0 98 .globl _EIP 99 .globl _B 100 .globl _EIE 101 .globl _ACC 102 .globl _EICON 103 .globl _PSW 104 .globl _TH2 105 .globl _TL2 106 .globl _RCAP2H 107 .globl _RCAP2L 108 .globl _T2CON 109 .globl _SBUF1 110 .globl _SCON1 111 .globl _GPIFSGLDATLNOX 112 .globl _GPIFSGLDATLX 113 .globl _GPIFSGLDATH 114 .globl _GPIFTRIG 115 .globl _EP01STAT 116 .globl _IP 117 .globl _OEE 118 .globl _OED 119 .globl _OEC 120 .globl _OEB 121 .globl _OEA 122 .globl _IOE 123 .globl _IOD 124 .globl _AUTOPTRSETUP 125 .globl _EP68FIFOFLGS 126 .globl _EP24FIFOFLGS 127 .globl _EP2468STAT 128 .globl _IE 129 .globl _INT4CLR 130 .globl _INT2CLR 131 .globl _IOC 132 .globl _AUTODAT2 133 .globl _AUTOPTRL2 134 .globl _AUTOPTRH2 135 .globl _AUTODAT1 136 .globl _APTR1L 137 .globl _APTR1H 138 .globl _SBUF0 139 .globl _SCON0 140 .globl _MPAGE 141 .globl _EXIF 142 .globl _IOB 143 .globl _CKCON 144 .globl _TH1 145 .globl _TH0 146 .globl _TL1 147 .globl _TL0 148 .globl _TMOD 149 .globl _TCON 150 .globl _PCON 151 .globl _DPS 152 .globl _DPH1 153 .globl _DPL1 154 .globl _DPH 155 .globl _DPL 156 .globl _SP 157 .globl _IOA 158 .globl _EP8FIFOBUF 159 .globl _EP6FIFOBUF 160 .globl _EP4FIFOBUF 161 .globl _EP2FIFOBUF 162 .globl _EP1INBUF 163 .globl _EP1OUTBUF 164 .globl _EP0BUF 165 .globl _CT4 166 .globl _CT3 167 .globl _CT2 168 .globl _CT1 169 .globl _USBTEST 170 .globl _TESTCFG 171 .globl _DBUG 172 .globl _UDMACRCQUAL 173 .globl _UDMACRCL 174 .globl _UDMACRCH 175 .globl _GPIFHOLDAMOUNT 176 .globl _FLOWSTBHPERIOD 177 .globl _FLOWSTBEDGE 178 .globl _FLOWSTB 179 .globl _FLOWHOLDOFF 180 .globl _FLOWEQ1CTL 181 .globl _FLOWEQ0CTL 182 .globl _FLOWLOGIC 183 .globl _FLOWSTATE 184 .globl _GPIFABORT 185 .globl _GPIFREADYSTAT 186 .globl _GPIFREADYCFG 187 .globl _XGPIFSGLDATLNOX 188 .globl _XGPIFSGLDATLX 189 .globl _XGPIFSGLDATH 190 .globl _EP8GPIFTRIG 191 .globl _EP8GPIFPFSTOP 192 .globl _EP8GPIFFLGSEL 193 .globl _EP6GPIFTRIG 194 .globl _EP6GPIFPFSTOP 195 .globl _EP6GPIFFLGSEL 196 .globl _EP4GPIFTRIG 197 .globl _EP4GPIFPFSTOP 198 .globl _EP4GPIFFLGSEL 199 .globl _EP2GPIFTRIG 200 .globl _EP2GPIFPFSTOP 201 .globl _EP2GPIFFLGSEL 202 .globl _GPIFTCB0 203 .globl _GPIFTCB1 204 .globl _GPIFTCB2 205 .globl _GPIFTCB3 206 .globl _GPIFADRL 207 .globl _GPIFADRH 208 .globl _GPIFCTLCFG 209 .globl _GPIFIDLECTL 210 .globl _GPIFIDLECS 211 .globl _GPIFWFSELECT 212 .globl _SETUPDAT 213 .globl _SUDPTRCTL 214 .globl _SUDPTRL 215 .globl _SUDPTRH 216 .globl _EP8FIFOBCL 217 .globl _EP8FIFOBCH 218 .globl _EP6FIFOBCL 219 .globl _EP6FIFOBCH 220 .globl _EP4FIFOBCL 221 .globl _EP4FIFOBCH 222 .globl _EP2FIFOBCL 223 .globl _EP2FIFOBCH 224 .globl _EP8FIFOFLGS 225 .globl _EP6FIFOFLGS 226 .globl _EP4FIFOFLGS 227 .globl _EP2FIFOFLGS 228 .globl _EP8CS 229 .globl _EP6CS 230 .globl _EP4CS 231 .globl _EP2CS 232 .globl _EP1INCS 233 .globl _EP1OUTCS 234 .globl _EP0CS 235 .globl _EP8BCL 236 .globl _EP8BCH 237 .globl _EP6BCL 238 .globl _EP6BCH 239 .globl _EP4BCL 240 .globl _EP4BCH 241 .globl _EP2BCL 242 .globl _EP2BCH 243 .globl _EP1INBC 244 .globl _EP1OUTBC 245 .globl _EP0BCL 246 .globl _EP0BCH 247 .globl _FNADDR 248 .globl _MICROFRAME 249 .globl _USBFRAMEL 250 .globl _USBFRAMEH 251 .globl _TOGCTL 252 .globl _WAKEUPCS 253 .globl _SUSPEND 254 .globl _USBCS 255 .globl _XAUTODAT2 256 .globl _XAUTODAT1 257 .globl _I2CTL 258 .globl _I2DAT 259 .globl _I2CS 260 .globl _PORTECFG 261 .globl _PORTCCFG 262 .globl _PORTACFG 263 .globl _INTSETUP 264 .globl _INT4IVEC 265 .globl _INT2IVEC 266 .globl _CLRERRCNT 267 .globl _ERRCNTLIM 268 .globl _USBERRIRQ 269 .globl _USBERRIE 270 .globl _GPIFIRQ 271 .globl _GPIFIE 272 .globl _EPIRQ 273 .globl _EPIE 274 .globl _USBIRQ 275 .globl _USBIE 276 .globl _NAKIRQ 277 .globl _NAKIE 278 .globl _IBNIRQ 279 .globl _IBNIE 280 .globl _EP8FIFOIRQ 281 .globl _EP8FIFOIE 282 .globl _EP6FIFOIRQ 283 .globl _EP6FIFOIE 284 .globl _EP4FIFOIRQ 285 .globl _EP4FIFOIE 286 .globl _EP2FIFOIRQ 287 .globl _EP2FIFOIE 288 .globl _OUTPKTEND 289 .globl _INPKTEND 290 .globl _EP8ISOINPKTS 291 .globl _EP6ISOINPKTS 292 .globl _EP4ISOINPKTS 293 .globl _EP2ISOINPKTS 294 .globl _EP8FIFOPFL 295 .globl _EP8FIFOPFH 296 .globl _EP6FIFOPFL 297 .globl _EP6FIFOPFH 298 .globl _EP4FIFOPFL 299 .globl _EP4FIFOPFH 300 .globl _EP2FIFOPFL 301 .globl _EP2FIFOPFH 302 .globl _EP8AUTOINLENL 303 .globl _EP8AUTOINLENH 304 .globl _EP6AUTOINLENL 305 .globl _EP6AUTOINLENH 306 .globl _EP4AUTOINLENL 307 .globl _EP4AUTOINLENH 308 .globl _EP2AUTOINLENL 309 .globl _EP2AUTOINLENH 310 .globl _EP8FIFOCFG 311 .globl _EP6FIFOCFG 312 .globl _EP4FIFOCFG 313 .globl _EP2FIFOCFG 314 .globl _EP8CFG 315 .globl _EP6CFG 316 .globl _EP4CFG 317 .globl _EP2CFG 318 .globl _EP1INCFG 319 .globl _EP1OUTCFG 320 .globl _REVCTL 321 .globl _REVID 322 .globl _FIFOPINPOLAR 323 .globl _UART230 324 .globl _BPADDRL 325 .globl _BPADDRH 326 .globl _BREAKPT 327 .globl _FIFORESET 328 .globl _PINFLAGSCD 329 .globl _PINFLAGSAB 330 .globl _IFCONFIG 331 .globl _CPUCS 332 .globl _RES_WAVEDATA_END 333 .globl _GPIF_WAVE_DATA 334 .globl _hook_timer_tick 335 ;-------------------------------------------------------- 336 ; special function registers 337 ;-------------------------------------------------------- 338 .area RSEG (DATA) 0080 339 _IOA = 0x0080 0081 340 _SP = 0x0081 0082 341 _DPL = 0x0082 0083 342 _DPH = 0x0083 0084 343 _DPL1 = 0x0084 0085 344 _DPH1 = 0x0085 0086 345 _DPS = 0x0086 0087 346 _PCON = 0x0087 0088 347 _TCON = 0x0088 0089 348 _TMOD = 0x0089 008A 349 _TL0 = 0x008a 008B 350 _TL1 = 0x008b 008C 351 _TH0 = 0x008c 008D 352 _TH1 = 0x008d 008E 353 _CKCON = 0x008e 0090 354 _IOB = 0x0090 0091 355 _EXIF = 0x0091 0092 356 _MPAGE = 0x0092 0098 357 _SCON0 = 0x0098 0099 358 _SBUF0 = 0x0099 009A 359 _APTR1H = 0x009a 009B 360 _APTR1L = 0x009b 009C 361 _AUTODAT1 = 0x009c 009D 362 _AUTOPTRH2 = 0x009d 009E 363 _AUTOPTRL2 = 0x009e 009F 364 _AUTODAT2 = 0x009f 00A0 365 _IOC = 0x00a0 00A1 366 _INT2CLR = 0x00a1 00A2 367 _INT4CLR = 0x00a2 00A8 368 _IE = 0x00a8 00AA 369 _EP2468STAT = 0x00aa 00AB 370 _EP24FIFOFLGS = 0x00ab 00AC 371 _EP68FIFOFLGS = 0x00ac 00AF 372 _AUTOPTRSETUP = 0x00af 00B0 373 _IOD = 0x00b0 00B1 374 _IOE = 0x00b1 00B2 375 _OEA = 0x00b2 00B3 376 _OEB = 0x00b3 00B4 377 _OEC = 0x00b4 00B5 378 _OED = 0x00b5 00B6 379 _OEE = 0x00b6 00B8 380 _IP = 0x00b8 00BA 381 _EP01STAT = 0x00ba 00BB 382 _GPIFTRIG = 0x00bb 00BD 383 _GPIFSGLDATH = 0x00bd 00BE 384 _GPIFSGLDATLX = 0x00be 00BF 385 _GPIFSGLDATLNOX = 0x00bf 00C0 386 _SCON1 = 0x00c0 00C1 387 _SBUF1 = 0x00c1 00C8 388 _T2CON = 0x00c8 00CA 389 _RCAP2L = 0x00ca 00CB 390 _RCAP2H = 0x00cb 00CC 391 _TL2 = 0x00cc 00CD 392 _TH2 = 0x00cd 00D0 393 _PSW = 0x00d0 00D8 394 _EICON = 0x00d8 00E0 395 _ACC = 0x00e0 00E8 396 _EIE = 0x00e8 00F0 397 _B = 0x00f0 00F8 398 _EIP = 0x00f8 399 ;-------------------------------------------------------- 400 ; special function bits 401 ;-------------------------------------------------------- 402 .area RSEG (DATA) 0080 403 _A0 = 0x0080 0081 404 _A1 = 0x0081 0082 405 _A2 = 0x0082 0083 406 _A3 = 0x0083 0084 407 _A4 = 0x0084 0085 408 _A5 = 0x0085 0086 409 _A6 = 0x0086 0087 410 _A7 = 0x0087 0086 411 _SEL = 0x0086 0088 412 _IT0 = 0x0088 0089 413 _IE0 = 0x0089 008A 414 _IT1 = 0x008a 008B 415 _IE1 = 0x008b 008C 416 _TR0 = 0x008c 008D 417 _TF0 = 0x008d 008E 418 _TR1 = 0x008e 008F 419 _TF1 = 0x008f 0098 420 _RI = 0x0098 0099 421 _TI = 0x0099 009A 422 _RB8 = 0x009a 009B 423 _TB8 = 0x009b 009C 424 _REN = 0x009c 009D 425 _SM2 = 0x009d 009E 426 _SM1 = 0x009e 009F 427 _SM0 = 0x009f 00A8 428 _EX0 = 0x00a8 00A9 429 _ET0 = 0x00a9 00AA 430 _EX1 = 0x00aa 00AB 431 _ET1 = 0x00ab 00AC 432 _ES0 = 0x00ac 00AD 433 _ET2 = 0x00ad 00AE 434 _ES1 = 0x00ae 00AF 435 _EA = 0x00af 00B0 436 _D0 = 0x00b0 00B1 437 _D1 = 0x00b1 00B2 438 _D2 = 0x00b2 00B3 439 _D3 = 0x00b3 00B4 440 _D4 = 0x00b4 00B5 441 _D5 = 0x00b5 00B6 442 _D6 = 0x00b6 00B7 443 _D7 = 0x00b7 00B8 444 _PX0 = 0x00b8 00B9 445 _PT0 = 0x00b9 00BA 446 _PX1 = 0x00ba 00BB 447 _PT1 = 0x00bb 00BC 448 _PS0 = 0x00bc 00BD 449 _PT2 = 0x00bd 00BE 450 _PS1 = 0x00be 00C0 451 _RI1 = 0x00c0 00C1 452 _TI1 = 0x00c1 00C2 453 _RB81 = 0x00c2 00C3 454 _TB81 = 0x00c3 00C4 455 _REN1 = 0x00c4 00C5 456 _SM21 = 0x00c5 00C6 457 _SM11 = 0x00c6 00C7 458 _SM01 = 0x00c7 00C8 459 _CP_RL2 = 0x00c8 00C9 460 _C_T2 = 0x00c9 00CA 461 _TR2 = 0x00ca 00CB 462 _EXEN2 = 0x00cb 00CC 463 _TCLK = 0x00cc 00CD 464 _RCLK = 0x00cd 00CE 465 _EXF2 = 0x00ce 00CF 466 _TF2 = 0x00cf 00D0 467 _P = 0x00d0 00D1 468 _FL = 0x00d1 00D2 469 _OV = 0x00d2 00D3 470 _RS0 = 0x00d3 00D4 471 _RS1 = 0x00d4 00D5 472 _F0 = 0x00d5 00D6 473 _AC = 0x00d6 00D7 474 _CY = 0x00d7 00DB 475 _INT6 = 0x00db 00DC 476 _RESI = 0x00dc 00DD 477 _ERESI = 0x00dd 00DF 478 _SMOD1 = 0x00df 00E8 479 _EIUSB = 0x00e8 00E9 480 _EI2C = 0x00e9 00EA 481 _EIEX4 = 0x00ea 00EB 482 _EIEX5 = 0x00eb 00EC 483 _EIEX6 = 0x00ec 00F8 484 _PUSB = 0x00f8 00F9 485 _PI2C = 0x00f9 00FA 486 _EIPX4 = 0x00fa 00FB 487 _EIPX5 = 0x00fb 00FC 488 _EIPX6 = 0x00fc 489 ;-------------------------------------------------------- 490 ; overlayable register banks 491 ;-------------------------------------------------------- 492 .area REG_BANK_0 (REL,OVR,DATA) 0000 493 .ds 8 494 ;-------------------------------------------------------- 495 ; internal ram data 496 ;-------------------------------------------------------- 497 .area DSEG (DATA) 498 ;-------------------------------------------------------- 499 ; overlayable items in internal ram 500 ;-------------------------------------------------------- 501 .area OSEG (OVR,DATA) 502 ;-------------------------------------------------------- 503 ; indirectly addressable internal ram data 504 ;-------------------------------------------------------- 505 .area ISEG (DATA) 506 ;-------------------------------------------------------- 507 ; absolute internal ram data 508 ;-------------------------------------------------------- 509 .area IABS (ABS,DATA) 510 .area IABS (ABS,DATA) 511 ;-------------------------------------------------------- 512 ; bit data 513 ;-------------------------------------------------------- 514 .area BSEG (BIT) 515 ;-------------------------------------------------------- 516 ; paged external ram data 517 ;-------------------------------------------------------- 518 .area PSEG (PAG,XDATA) 519 ;-------------------------------------------------------- 520 ; external ram data 521 ;-------------------------------------------------------- 522 .area XSEG (XDATA) E400 523 _GPIF_WAVE_DATA = 0xe400 E480 524 _RES_WAVEDATA_END = 0xe480 E600 525 _CPUCS = 0xe600 E601 526 _IFCONFIG = 0xe601 E602 527 _PINFLAGSAB = 0xe602 E603 528 _PINFLAGSCD = 0xe603 E604 529 _FIFORESET = 0xe604 E605 530 _BREAKPT = 0xe605 E606 531 _BPADDRH = 0xe606 E607 532 _BPADDRL = 0xe607 E608 533 _UART230 = 0xe608 E609 534 _FIFOPINPOLAR = 0xe609 E60A 535 _REVID = 0xe60a E60B 536 _REVCTL = 0xe60b E610 537 _EP1OUTCFG = 0xe610 E611 538 _EP1INCFG = 0xe611 E612 539 _EP2CFG = 0xe612 E613 540 _EP4CFG = 0xe613 E614 541 _EP6CFG = 0xe614 E615 542 _EP8CFG = 0xe615 E618 543 _EP2FIFOCFG = 0xe618 E619 544 _EP4FIFOCFG = 0xe619 E61A 545 _EP6FIFOCFG = 0xe61a E61B 546 _EP8FIFOCFG = 0xe61b E620 547 _EP2AUTOINLENH = 0xe620 E621 548 _EP2AUTOINLENL = 0xe621 E622 549 _EP4AUTOINLENH = 0xe622 E623 550 _EP4AUTOINLENL = 0xe623 E624 551 _EP6AUTOINLENH = 0xe624 E625 552 _EP6AUTOINLENL = 0xe625 E626 553 _EP8AUTOINLENH = 0xe626 E627 554 _EP8AUTOINLENL = 0xe627 E630 555 _EP2FIFOPFH = 0xe630 E631 556 _EP2FIFOPFL = 0xe631 E632 557 _EP4FIFOPFH = 0xe632 E633 558 _EP4FIFOPFL = 0xe633 E634 559 _EP6FIFOPFH = 0xe634 E635 560 _EP6FIFOPFL = 0xe635 E636 561 _EP8FIFOPFH = 0xe636 E637 562 _EP8FIFOPFL = 0xe637 E640 563 _EP2ISOINPKTS = 0xe640 E641 564 _EP4ISOINPKTS = 0xe641 E642 565 _EP6ISOINPKTS = 0xe642 E643 566 _EP8ISOINPKTS = 0xe643 E648 567 _INPKTEND = 0xe648 E649 568 _OUTPKTEND = 0xe649 E650 569 _EP2FIFOIE = 0xe650 E651 570 _EP2FIFOIRQ = 0xe651 E652 571 _EP4FIFOIE = 0xe652 E653 572 _EP4FIFOIRQ = 0xe653 E654 573 _EP6FIFOIE = 0xe654 E655 574 _EP6FIFOIRQ = 0xe655 E656 575 _EP8FIFOIE = 0xe656 E657 576 _EP8FIFOIRQ = 0xe657 E658 577 _IBNIE = 0xe658 E659 578 _IBNIRQ = 0xe659 E65A 579 _NAKIE = 0xe65a E65B 580 _NAKIRQ = 0xe65b E65C 581 _USBIE = 0xe65c E65D 582 _USBIRQ = 0xe65d E65E 583 _EPIE = 0xe65e E65F 584 _EPIRQ = 0xe65f E660 585 _GPIFIE = 0xe660 E661 586 _GPIFIRQ = 0xe661 E662 587 _USBERRIE = 0xe662 E663 588 _USBERRIRQ = 0xe663 E664 589 _ERRCNTLIM = 0xe664 E665 590 _CLRERRCNT = 0xe665 E666 591 _INT2IVEC = 0xe666 E667 592 _INT4IVEC = 0xe667 E668 593 _INTSETUP = 0xe668 E670 594 _PORTACFG = 0xe670 E671 595 _PORTCCFG = 0xe671 E672 596 _PORTECFG = 0xe672 E678 597 _I2CS = 0xe678 E679 598 _I2DAT = 0xe679 E67A 599 _I2CTL = 0xe67a E67B 600 _XAUTODAT1 = 0xe67b E67C 601 _XAUTODAT2 = 0xe67c E680 602 _USBCS = 0xe680 E681 603 _SUSPEND = 0xe681 E682 604 _WAKEUPCS = 0xe682 E683 605 _TOGCTL = 0xe683 E684 606 _USBFRAMEH = 0xe684 E685 607 _USBFRAMEL = 0xe685 E686 608 _MICROFRAME = 0xe686 E687 609 _FNADDR = 0xe687 E68A 610 _EP0BCH = 0xe68a E68B 611 _EP0BCL = 0xe68b E68D 612 _EP1OUTBC = 0xe68d E68F 613 _EP1INBC = 0xe68f E690 614 _EP2BCH = 0xe690 E691 615 _EP2BCL = 0xe691 E694 616 _EP4BCH = 0xe694 E695 617 _EP4BCL = 0xe695 E698 618 _EP6BCH = 0xe698 E699 619 _EP6BCL = 0xe699 E69C 620 _EP8BCH = 0xe69c E69D 621 _EP8BCL = 0xe69d E6A0 622 _EP0CS = 0xe6a0 E6A1 623 _EP1OUTCS = 0xe6a1 E6A2 624 _EP1INCS = 0xe6a2 E6A3 625 _EP2CS = 0xe6a3 E6A4 626 _EP4CS = 0xe6a4 E6A5 627 _EP6CS = 0xe6a5 E6A6 628 _EP8CS = 0xe6a6 E6A7 629 _EP2FIFOFLGS = 0xe6a7 E6A8 630 _EP4FIFOFLGS = 0xe6a8 E6A9 631 _EP6FIFOFLGS = 0xe6a9 E6AA 632 _EP8FIFOFLGS = 0xe6aa E6AB 633 _EP2FIFOBCH = 0xe6ab E6AC 634 _EP2FIFOBCL = 0xe6ac E6AD 635 _EP4FIFOBCH = 0xe6ad E6AE 636 _EP4FIFOBCL = 0xe6ae E6AF 637 _EP6FIFOBCH = 0xe6af E6B0 638 _EP6FIFOBCL = 0xe6b0 E6B1 639 _EP8FIFOBCH = 0xe6b1 E6B2 640 _EP8FIFOBCL = 0xe6b2 E6B3 641 _SUDPTRH = 0xe6b3 E6B4 642 _SUDPTRL = 0xe6b4 E6B5 643 _SUDPTRCTL = 0xe6b5 E6B8 644 _SETUPDAT = 0xe6b8 E6C0 645 _GPIFWFSELECT = 0xe6c0 E6C1 646 _GPIFIDLECS = 0xe6c1 E6C2 647 _GPIFIDLECTL = 0xe6c2 E6C3 648 _GPIFCTLCFG = 0xe6c3 E6C4 649 _GPIFADRH = 0xe6c4 E6C5 650 _GPIFADRL = 0xe6c5 E6CE 651 _GPIFTCB3 = 0xe6ce E6CF 652 _GPIFTCB2 = 0xe6cf E6D0 653 _GPIFTCB1 = 0xe6d0 E6D1 654 _GPIFTCB0 = 0xe6d1 E6D2 655 _EP2GPIFFLGSEL = 0xe6d2 E6D3 656 _EP2GPIFPFSTOP = 0xe6d3 E6D4 657 _EP2GPIFTRIG = 0xe6d4 E6DA 658 _EP4GPIFFLGSEL = 0xe6da E6DB 659 _EP4GPIFPFSTOP = 0xe6db E6DC 660 _EP4GPIFTRIG = 0xe6dc E6E2 661 _EP6GPIFFLGSEL = 0xe6e2 E6E3 662 _EP6GPIFPFSTOP = 0xe6e3 E6E4 663 _EP6GPIFTRIG = 0xe6e4 E6EA 664 _EP8GPIFFLGSEL = 0xe6ea E6EB 665 _EP8GPIFPFSTOP = 0xe6eb E6EC 666 _EP8GPIFTRIG = 0xe6ec E6F0 667 _XGPIFSGLDATH = 0xe6f0 E6F1 668 _XGPIFSGLDATLX = 0xe6f1 E6F2 669 _XGPIFSGLDATLNOX = 0xe6f2 E6F3 670 _GPIFREADYCFG = 0xe6f3 E6F4 671 _GPIFREADYSTAT = 0xe6f4 E6F5 672 _GPIFABORT = 0xe6f5 E6C6 673 _FLOWSTATE = 0xe6c6 E6C7 674 _FLOWLOGIC = 0xe6c7 E6C8 675 _FLOWEQ0CTL = 0xe6c8 E6C9 676 _FLOWEQ1CTL = 0xe6c9 E6CA 677 _FLOWHOLDOFF = 0xe6ca E6CB 678 _FLOWSTB = 0xe6cb E6CC 679 _FLOWSTBEDGE = 0xe6cc E6CD 680 _FLOWSTBHPERIOD = 0xe6cd E60C 681 _GPIFHOLDAMOUNT = 0xe60c E67D 682 _UDMACRCH = 0xe67d E67E 683 _UDMACRCL = 0xe67e E67F 684 _UDMACRCQUAL = 0xe67f E6F8 685 _DBUG = 0xe6f8 E6F9 686 _TESTCFG = 0xe6f9 E6FA 687 _USBTEST = 0xe6fa E6FB 688 _CT1 = 0xe6fb E6FC 689 _CT2 = 0xe6fc E6FD 690 _CT3 = 0xe6fd E6FE 691 _CT4 = 0xe6fe E740 692 _EP0BUF = 0xe740 E780 693 _EP1OUTBUF = 0xe780 E7C0 694 _EP1INBUF = 0xe7c0 F000 695 _EP2FIFOBUF = 0xf000 F400 696 _EP4FIFOBUF = 0xf400 F800 697 _EP6FIFOBUF = 0xf800 FC00 698 _EP8FIFOBUF = 0xfc00 699 ;-------------------------------------------------------- 700 ; absolute external ram data 701 ;-------------------------------------------------------- 702 .area XABS (ABS,XDATA) 703 ;-------------------------------------------------------- 704 ; external initialized ram data 705 ;-------------------------------------------------------- 706 .area HOME (CODE) 707 .area GSINIT0 (CODE) 708 .area GSINIT1 (CODE) 709 .area GSINIT2 (CODE) 710 .area GSINIT3 (CODE) 711 .area GSINIT4 (CODE) 712 .area GSINIT5 (CODE) 713 .area GSINIT (CODE) 714 .area GSFINAL (CODE) 715 .area CSEG (CODE) 716 ;-------------------------------------------------------- 717 ; global & static initialisations 718 ;-------------------------------------------------------- 719 .area HOME (CODE) 720 .area GSINIT (CODE) 721 .area GSFINAL (CODE) 722 .area GSINIT (CODE) 723 ;-------------------------------------------------------- 724 ; Home 725 ;-------------------------------------------------------- 726 .area HOME (CODE) 727 .area HOME (CODE) 728 ;-------------------------------------------------------- 729 ; code 730 ;-------------------------------------------------------- 731 .area CSEG (CODE) 732 ;------------------------------------------------------------ 733 ;Allocation info for local variables in function 'hook_timer_tick' 734 ;------------------------------------------------------------ 735 ;isr_tick_handler Allocated to registers r2 r3 736 ;------------------------------------------------------------ 737 ; timer.c:39: hook_timer_tick (unsigned short isr_tick_handler) 738 ; ----------------------------------------- 739 ; function hook_timer_tick 740 ; ----------------------------------------- 0000 741 _hook_timer_tick: 0002 742 ar2 = 0x02 0003 743 ar3 = 0x03 0004 744 ar4 = 0x04 0005 745 ar5 = 0x05 0006 746 ar6 = 0x06 0007 747 ar7 = 0x07 0000 748 ar0 = 0x00 0001 749 ar1 = 0x01 0000 AA 82 750 mov r2,dpl 0002 AB 83 751 mov r3,dph 752 ; timer.c:41: ET2 = 0; // disable timer 2 interrupts 0004 C2 AD 753 clr _ET2 754 ; timer.c:42: hook_sv (SV_TIMER_2, isr_tick_handler); 0006 8A*00 755 mov _hook_sv_PARM_2,r2 0008 8B*01 756 mov (_hook_sv_PARM_2 + 1),r3 000A 75 82 2B 757 mov dpl,#0x2B 000D 12s00r00 758 lcall _hook_sv 759 ; timer.c:44: RCAP2H = RELOAD_VALUE >> 8; // setup the auto reload value 0010 75 CB 63 760 mov _RCAP2H,#0x63 761 ; timer.c:45: RCAP2L = RELOAD_VALUE; 0013 75 CA C0 762 mov _RCAP2L,#0xC0 763 ; timer.c:47: T2CON = 0x04; // interrupt on overflow; reload; run 0016 75 C8 04 764 mov _T2CON,#0x04 765 ; timer.c:48: ET2 = 1; // enable timer 2 interrupts 0019 D2 AD 766 setb _ET2 001B 22 767 ret 768 .area CSEG (CODE) 769 .area CONST (CODE) 770 .area CABS (ABS,CODE) gnss-sdr-0.0.6/debian/0000755000175000017500000000000012577077370014022 5ustar carlescarlesgnss-sdr-0.0.6/debian/copyright0000644000175000017500000002510212577075340015750 0ustar carlescarlesFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: gnss-sdr Upstream-Contact: Carles Fernandez Source: git://github.com/gnss-sdr/gnss-sdr Comment: See the AUTHORS file for a more complete list of contributors. Copyright: (C) 2010-2015 Carles Fernandez (C) 2010-2015 Javier Arribas (C) 2010 Carlos Aviles (C) 2012-2015 Luis Esteve License: GPL-3+ Files: * Copyright: (C) 2010-2015 Carles Fernandez (C) 2010-2015 Javier Arribas (C) 2010 Carlos Aviles (C) 2012-2015 Luis Esteve License: GPL-3+ Files: src/core/libs/supl/supl.* Copyright: (C) 2007 Tatu Mannisto License: BSD-2-clause Files: src/core/libs/supl/asn-supl/* src/core/libs/supl/asn-rrlp/* Copyright: (C) 2004, 2006 Lev Walkin License: BSD-2-clause Files: src/core/libs/INIReader.* src/core/libs/ini.* Copyright: (C) 2009 Brush Technologies License: BSD-3-clause Files: drivers/gr-gn3s/include/gn3s_source.h drivers/gr-gn3s/include/gn3s.h Copyright: (C) 2009 Gregory W. Heckler License: GPL-2+ Files: firmware/* Copyright: (C) 2006 Marcus Junered (C) 2003 Free Software Foundation, Inc. License: GPL-2+ Files: src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/* Copyright: (C) 2014 Andres Cecilia License: GPL-3+ Files: src/algorithms/signal_source/adapters/rtl_tcp_signal_source.* Copyright: (C) 2015 Anthony Arnold License: GPL-3+ Files: drivers/gr-gn3s/cmake/* drivers/gr-gn3s/docs/* drivers/gr-gn3s/grc/* drivers/gr-gn3s/include/fusb* drivers/gr-gn3s/include/libusb_types.h Copyright: (C) 2009 Free Software Foundation, Inc. License: GPL-3+ Files: drivers/gr-dbfcttc/cmake/* drivers/gr-dbfcttc/docs/* drivers/gr-dbfcttc/grc/* drivers/gr-dbfcttc/python/* Copyright: (C) 2009 Free Software Foundation, Inc. License: GPL-3+ Files: debian/* Copyright: (C) 2015 Carles Fernandez License: GPL-3+ Files: cmake/Modules/CMakeParseArgumentsCopy.cmake Copyright: © 2010 Alexander Neundorf License: BSD-2-clause Files: src/algorithms/libs/cl.hpp Copyright: (C) 2008-2013 The Khronos Group Inc. License: Permissive Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Materials. . THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. Files: src/algorithms/libs/clFFT.h src/algorithms/libs/fft_execute.cc src/algorithms/libs/fft_base_kernels.h src/algorithms/libs/fft_internal.h src/algorithms/libs/fft_kernelstring.cc src/algorithms/libs/fft_setup.cc Copyright: (C) 2008 Apple Inc. License: Apple-Permissive This Apple software is supplied to you by Apple Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. . In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non - exclusive license, under Apple's copyrights in this original Apple software ( the "Apple Software" ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and / or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. . The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. . IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: GPL-3+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. License: BSD-2-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. gnss-sdr-0.0.6/debian/watch0000644000175000017500000000041412576765040015047 0ustar carlescarlesversion=3 https://github.com/gnss-sdr/gnss-sdr/tags .*/v?(\d.*)\.(?:tgz|tbz2|txz|tar\.(?:gz|bz2|xz)) # if tweaking of source is needed # \ # debian debian/get-orig-source # if you need to repack and choose +dfsg prefix # opts=dversionmangle=s/[~\+]dfsg[0-9]*// \ # gnss-sdr-0.0.6/debian/compat0000644000175000017500000000000212576765040015215 0ustar carlescarles9 gnss-sdr-0.0.6/debian/files0000644000175000017500000000005512577077201015040 0ustar carlescarlesgnss-sdr_0.0.6-1_amd64.deb hamradio optional gnss-sdr-0.0.6/debian/rules0000755000175000017500000000202412576765040015075 0ustar carlescarles#!/usr/bin/make -f # DH_VERBOSE := 1 # some helpful variables - uncomment them if needed # shamelessly stolen from http://jmtd.net/log/awk/ #DEBVERS := $(shell dpkg-parsechangelog | awk '/^Version:/ {print $$2}') #VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[0-9]*://' -e 's/-.*//') #DEBFLAVOR := $(shell dpkg-parsechangelog | awk '/^Distribution:/ {print $$2}') #DEBPKGNAME := $(shell dpkg-parsechangelog | awk '/^Source:/ {print $$2}') #DEBIAN_BRANCH := $(shell awk 'BEGIN{FS="[= ]+"} /debian-branch/ {print $$2}' debian/gbp.conf) #GIT_TAG := $(subst ~,_,$(VERSION)) # alternatively to manually set those variables you can # include /usr/share/cdbs/1/rules/buildvars.mk # and use what is set there. Any hint whether dh might set variables in # a similar manner are welcome. %: dh $@ --buildsystem=cmake --parallel --builddirectory=build override_dh_auto_configure: dh_auto_configure -- -DENABLE_PACKAGING=ON -DENABLE_OSMOSDR=ON override_dh_auto_test: #get-orig-source: # . debian/get-orig-source gnss-sdr-0.0.6/debian/source/0000755000175000017500000000000012576765040015317 5ustar carlescarlesgnss-sdr-0.0.6/debian/source/format0000644000175000017500000000001412576765040016525 0ustar carlescarles3.0 (quilt) gnss-sdr-0.0.6/debian/gnss-sdr.substvars0000644000175000017500000000112012577077201017523 0ustar carlescarlesshlibs:Depends=libarmadillo4, libboost-chrono1.55.0, libboost-date-time1.55.0, libboost-filesystem1.55.0, libboost-program-options1.55.0, libboost-serialization1.55.0, libboost-system1.55.0, libboost-test1.55.0, libboost-thread1.55.0, libc6 (>= 2.14), libgcc1 (>= 1:4.1.1), libgflags2, libgnuradio-blocks3.7.5, libgnuradio-fft3.7.5, libgnuradio-filter3.7.5, libgnuradio-osmosdr0.1.3, libgnuradio-pmt3.7.5, libgnuradio-runtime3.7.5, libgnuradio-uhd3.7.5, libgnutls-deb0-28 (>= 3.3.0), libgnutls-openssl27 (>= 3.0-0), libgoogle-glog0, libstdc++6 (>= 4.9), libuhd003, libvolk0.0.0 misc:Depends= gnss-sdr-0.0.6/debian/control0000644000175000017500000000377112576765040015432 0ustar carlescarlesSource: gnss-sdr Maintainer: Debian Hamradio Maintainers Uploaders: Carles Fernandez Section: hamradio Priority: optional Build-Depends: debhelper (>= 9), cmake, libboost-dev (>= 1.45), libboost-date-time-dev (>= 1.45), libboost-system-dev (>= 1.45), libboost-filesystem-dev (>= 1.45), libboost-thread-dev (>= 1.45), libboost-serialization-dev (>= 1.45), libboost-chrono-dev, libboost-program-options-dev (>= 1.45), libboost-test-dev (>= 1.45), libstdc++6 (>= 4.7), libc6 (>= 2.13), libuhd-dev (>= 3.7), gnuradio-dev (>= 3.7.3), gr-osmosdr, liblog4cpp5-dev, libarmadillo-dev (>= 1:4.200.0), liblapack-dev (>= 3.4), libblas-dev, libgnutls28-dev, libgflags-dev, libgoogle-glog-dev (>= 0.3.3), libgtest-dev (>= 1.7) Standards-Version: 3.9.6 Vcs-Browser: http://anonscm.debian.org/cgit/pkg-hamradio/gnss-sdr.git Vcs-Git: http://anonscm.debian.org/git/pkg-hamradio/gnss-sdr.git Homepage: http://gnss-sdr.org Package: gnss-sdr Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Global navigation satellite systems software defined receiver Global Navigation Satellite Systems receiver defined by software. It performs all the signal processing from raw signal samples up to the computation of the Position-Velocity-Time solution, including code and phase observables. It is able to work with raw data files or, if there is computational power enough, in real time with suitable radiofrequency front-ends. This software is mainly developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world. More info at http://gnss-sdr.org gnss-sdr-0.0.6/debian/changelog0000644000175000017500000000024612577077370015676 0ustar carlescarlesgnss-sdr (0.0.6-1) unstable; urgency=medium * Initial release. (Closes: #712838) -- Carles Fernandez Fri, 18 Sep 2015 23:15:29 +0200 gnss-sdr-0.0.6/debian/gbp.conf0000644000175000017500000000004512576765040015435 0ustar carlescarles[DEFAULT] upstream-tag=v%(version)s gnss-sdr-0.0.6/debian/gnss-sdr/0000755000175000017500000000000012577077174015564 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/DEBIAN/0000755000175000017500000000000012577077201016475 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/DEBIAN/md5sums0000644000175000017500000001231312577077201020015 0ustar carlescarles1a8073ffe98f21d61130a4a45afbde1f usr/bin/front-end-cal a92b6f802ff043117dad03d4ac298ef8 usr/bin/gnss-sdr 18827c886448bb37384ecf2d821e1e58 usr/bin/volk_gnsssdr_profile 87ca58b3186e558ef4fbc075eb8ae833 usr/share/doc/gnss-sdr/changelog.Debian.gz 01e745e71b5cb3f78409c64405438c3d usr/share/doc/gnss-sdr/changelog.gz 75215dfe2678cc71d6ae47f45828cea4 usr/share/doc/gnss-sdr/copyright b4688f0368d9e1edeed08ed25c6ea502 usr/share/gnss-sdr/conf/default.conf 59b314b0bce2f5aa13fb6a9649aa2eae usr/share/gnss-sdr/conf/front-end-cal.conf b4688f0368d9e1edeed08ed25c6ea502 usr/share/gnss-sdr/conf/gnss-sdr.conf 244f4c6ca5a4ec179bd6ddec4efd6c61 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf 20dfb9e329880face0b47b1e3d267661 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_SPIR.conf a222e5658c8563210dd69bf7bead1eeb usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf ba7c5c3469455ee6a12e5310df2b4552 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf afb57bd730d71fcc74ac6dece078fbe1 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_USRP_realtime.conf aa9298a5eb07818868ee368989cafb42 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf d4b09504178274294ce6b5df60b3e4bd usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_gr_complex.conf 5c396264ec0dd81cebb200cf6e1e16e7 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf ee095e2e48128a4d7454d94bb018da87 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf 5821c1b58ac39aace74780805ed2524d usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_nsr.conf ab03d2850c48202d00c237e5e5824b7c usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf 8d3d7e664fba9627c8f7551d353fcabe usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf f593e7818bce713caeda45d02019fa45 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf b69a3dc056dbf9af0a18fa71e6ba99e6 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf ef7781b7e95f9ba20ba13adcdf9fe077 usr/share/gnss-sdr/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf 41d2d54673494e8562a497b15e81b29c usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf 0e0aab52736972089e212e3bc6ef513d usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf d78be8f5b6ce1d1ccc9e418d91bea970 usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_nsr.conf b7bd00d0cf2d1e1b40247703ff929221 usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_short.conf b36fc94c97f38d257c0cf8e95c0fcbcd usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E5a.conf 2ef49a1191ded6a1fc718ec97f267d08 usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf 57b342accec6c625f78fac49620ecb67 usr/share/gnss-sdr/conf/gnss-sdr_Hybrid_byte.conf 8f1bbb18339d5be1e135e2919c15c522 usr/share/gnss-sdr/conf/gnss-sdr_Hybrid_nsr.conf 708fd85c0c68c5a4eebd8291d87f531a usr/share/gnss-sdr/conf/gnss-sdr_Hybrid_short.conf 68f74c0f93bc7f3a40c79b6fbe7bc17e usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf cda34e18f7daa219316e8925c77a709c usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf 9361b0a56dbae12cbeadfe9eac93dd2b usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf 2dca8e8d517ed93373f7827acd4db1aa usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf ad3ee21cf492fd1343b96817755da0e2 usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf 571a4f1cc4b50363c2c40f20a0bdce25 usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf 64b07b521f6d0bda2f901bc2458ac202 usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf 15be36f2df29187fbe223b0f94490944 usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf f545c6e76cb4032c4d86f43f589194e9 usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf 8ebd5b60f6e35bc58df5ef6e5fdbcc4f usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf f60cb889b11423b60ecfaf53543e5262 usr/share/gnss-sdr/conf/gnss-sdr_multisource_Hybrid_nsr.conf f7e70a7dbde076bf789b9fc00eeba200 usr/share/gnss-sdr/conf/gnss-sdr_multisource_Hybrid_short.conf ab25c4d5caa9c74925f13a80f77bdccb usr/share/gnss-sdr/conf/old/gnss-sdr_SBAS_short.conf 77d089785d3a06ec3269959a81828bb7 usr/share/gnss-sdr/conf/old/gnss-sdr_acq_CCCWSR.conf 03e2842b7cf74af1b582e0bc2d183775 usr/share/gnss-sdr/conf/old/gnss-sdr_acq_Tong.conf 7fb8ad93cb4e6cfc5640b65cd26aae6f usr/share/gnss-sdr/conf/old/gnss-sdr_acq_assistance_test.conf 35ce61fc9cb512e354c4dc3d246abccd usr/share/gnss-sdr/conf/old/gnss-sdr_array.conf ffd611363ab1814c22237eb0b66e932d usr/share/gnss-sdr/conf/old/gnss-sdr_galileo_e1_tcp_connector_tracking.conf 8d01420686dbdf4f4548df1dc6cf2c8d usr/share/gnss-sdr/conf/old/gnss-sdr_ishort_file_read.conf 73488b409fc801b6e0897bcc2686f769 usr/share/gnss-sdr/conf/old/gnss-sdr_nmea_tty_output.conf e6598432e5e8e60f9178ec7defa3119f usr/share/gnss-sdr/conf/old/gnss-sdr_tcp_connector_tracking.conf dcbba6fab24091b094a87be82aaa0722 usr/share/gnss-sdr/conf/old/master.conf 258d397e5f62ee0bb3157938cda1c550 usr/share/man/man1/front-end-cal.1.gz 08e4337663269ce15b64d14244dd0f30 usr/share/man/man1/gnss-sdr.1.gz b5346480a34671fba47d8d5e766c61e3 usr/share/man/man1/volk_gnsssdr_profile.1.gz gnss-sdr-0.0.6/debian/gnss-sdr/DEBIAN/control0000644000175000017500000000262312577077201020103 0ustar carlescarlesPackage: gnss-sdr Version: 0.0.6-1 Architecture: amd64 Maintainer: Debian Hamradio Maintainers Installed-Size: 12623 Depends: libarmadillo4, libboost-chrono1.55.0, libboost-date-time1.55.0, libboost-filesystem1.55.0, libboost-program-options1.55.0, libboost-serialization1.55.0, libboost-system1.55.0, libboost-test1.55.0, libboost-thread1.55.0, libc6 (>= 2.14), libgcc1 (>= 1:4.1.1), libgflags2, libgnuradio-blocks3.7.5, libgnuradio-fft3.7.5, libgnuradio-filter3.7.5, libgnuradio-osmosdr0.1.3, libgnuradio-pmt3.7.5, libgnuradio-runtime3.7.5, libgnuradio-uhd3.7.5, libgnutls-deb0-28 (>= 3.3.0), libgnutls-openssl27 (>= 3.0-0), libgoogle-glog0, libstdc++6 (>= 4.9), libuhd003, libvolk0.0.0 Section: hamradio Priority: optional Homepage: http://gnss-sdr.org Description: Global navigation satellite systems software defined receiver Global Navigation Satellite Systems receiver defined by software. It performs all the signal processing from raw signal samples up to the computation of the Position-Velocity-Time solution, including code and phase observables. It is able to work with raw data files or, if there is computational power enough, in real time with suitable radiofrequency front-ends. This software is mainly developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world. More info at http://gnss-sdr.org gnss-sdr-0.0.6/debian/gnss-sdr/usr/0000755000175000017500000000000012577077174016375 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/0000755000175000017500000000000012577077174017477 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/doc/0000755000175000017500000000000012577077174020244 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/doc/gnss-sdr/0000755000175000017500000000000012577077174022004 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/doc/gnss-sdr/copyright0000644000175000017500000002510212577075340023730 0ustar carlescarlesFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: gnss-sdr Upstream-Contact: Carles Fernandez Source: git://github.com/gnss-sdr/gnss-sdr Comment: See the AUTHORS file for a more complete list of contributors. Copyright: (C) 2010-2015 Carles Fernandez (C) 2010-2015 Javier Arribas (C) 2010 Carlos Aviles (C) 2012-2015 Luis Esteve License: GPL-3+ Files: * Copyright: (C) 2010-2015 Carles Fernandez (C) 2010-2015 Javier Arribas (C) 2010 Carlos Aviles (C) 2012-2015 Luis Esteve License: GPL-3+ Files: src/core/libs/supl/supl.* Copyright: (C) 2007 Tatu Mannisto License: BSD-2-clause Files: src/core/libs/supl/asn-supl/* src/core/libs/supl/asn-rrlp/* Copyright: (C) 2004, 2006 Lev Walkin License: BSD-2-clause Files: src/core/libs/INIReader.* src/core/libs/ini.* Copyright: (C) 2009 Brush Technologies License: BSD-3-clause Files: drivers/gr-gn3s/include/gn3s_source.h drivers/gr-gn3s/include/gn3s.h Copyright: (C) 2009 Gregory W. Heckler License: GPL-2+ Files: firmware/* Copyright: (C) 2006 Marcus Junered (C) 2003 Free Software Foundation, Inc. License: GPL-2+ Files: src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/* Copyright: (C) 2014 Andres Cecilia License: GPL-3+ Files: src/algorithms/signal_source/adapters/rtl_tcp_signal_source.* Copyright: (C) 2015 Anthony Arnold License: GPL-3+ Files: drivers/gr-gn3s/cmake/* drivers/gr-gn3s/docs/* drivers/gr-gn3s/grc/* drivers/gr-gn3s/include/fusb* drivers/gr-gn3s/include/libusb_types.h Copyright: (C) 2009 Free Software Foundation, Inc. License: GPL-3+ Files: drivers/gr-dbfcttc/cmake/* drivers/gr-dbfcttc/docs/* drivers/gr-dbfcttc/grc/* drivers/gr-dbfcttc/python/* Copyright: (C) 2009 Free Software Foundation, Inc. License: GPL-3+ Files: debian/* Copyright: (C) 2015 Carles Fernandez License: GPL-3+ Files: cmake/Modules/CMakeParseArgumentsCopy.cmake Copyright: © 2010 Alexander Neundorf License: BSD-2-clause Files: src/algorithms/libs/cl.hpp Copyright: (C) 2008-2013 The Khronos Group Inc. License: Permissive Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Materials. . THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. Files: src/algorithms/libs/clFFT.h src/algorithms/libs/fft_execute.cc src/algorithms/libs/fft_base_kernels.h src/algorithms/libs/fft_internal.h src/algorithms/libs/fft_kernelstring.cc src/algorithms/libs/fft_setup.cc Copyright: (C) 2008 Apple Inc. License: Apple-Permissive This Apple software is supplied to you by Apple Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. . In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non - exclusive license, under Apple's copyrights in this original Apple software ( the "Apple Software" ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and / or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. . The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. . IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: GPL-3+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. License: BSD-2-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/doc/gnss-sdr/changelog.gz0000644000175000017500000000035412576764164024300 0ustar carlescarles=MK1+[ڐV~ ="gq ]2 mb ;ۋj>k(ȷ(gq86$H(#nǨ4G*D1g5UL;,F] +swUH.Gs7UȈA =4EȊ-'ݾ&ܹc`>O osLUA!TOle)k}#o(32"Zc!_a~N:3zC:|Hw?V Ie=]|:;HӽSڧs(Ƴtud+RXtn+*τz_4H8dhr1y BW3MZ˴cS} E|5^\]~Ix۳p|֞hG;R 8S34O ^0ĕLSјUӏ/|R}Yt#k2]ON)7ͼ2KIUYR$9]*dp:-9+m7Uuִ f֨N1mݏhaY j 0KC$w*P =RDA:bov3vA<2 3 8:l& D1pdkہ0w02@@ W[F +'3]_$ 2^{Dvϑ5s=Nƀzt:k=3 wzt\@)7 ̕EQnUG~X[d"*o 2Y8m7toB M/m.YL2p%gb ȥt:CgrLu p3eqKfzv(7c$\LU$V gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/man/man1/volk_gnsssdr_profile.1.gz0000644000175000017500000000245612577077174026054 0ustar carlescarles}Vao6_q,9)}(֡i5^8RDɬ)R#;ʲ4+<{niD%^pgK Ŧ kiR:#L!CS)Xʭs{symOճNN_P&zqz fi~] CdfWt{~3yTɂ %[;P',K ?̯})f#Ry[pƳa%*w!Vn ҕ"Kʔ4mnZTåw\E?J[72WBw~:2;@W%!R=Jܩ5lKnpY0]lЎNm@dosUjYKvx<@'LFcHzhI~mE8&G`Nh-"jMն@+hxȉr>EvZX΅^-{!>wcM8#GiDI}O'l+ɣdgm > 5F4`)|33b+U~0^9Hp2⩾Hz0U~uyǚ>.z ʉ#5ݘZ*e)!2\YөZ(6T$S-I8jnQuri"!Kۦ.;] ߺw"L.S{% eW7Iz m5꒳uWGW|S_(ЏF.ńUPaJ1wMbmaހuV< 6H_D,7qQF$|m6fl݇b,uC!lx]ՀsYg)j8s>n gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/man/man1/gnss-sdr.1.gz0000644000175000017500000000206312577077174023350 0ustar carlescarlesUMo6W M')C-8ib`1,oѢ* ZID(R%);n}ndy|f(!|9BfxS'HEH_?%!$= u)}e=xp +0{=FD8=1<̣"tw)),1AEMgOh<NTΔƏg*xlY;5~䜿?-VBwt9kS$|T+OSSREqP}3Yxr[ɝSqr6uM}w+wǿobۇ+qy[qqu.xpk$GwN;Ysəuu<ЏJ7@C:LKG=|v [lQ2蚒79;>Dq5aR{ǂfԢe0-0y"zrͣXr'*Ceë헇hae]M:3 z#HayP/ǧ`ڼs NUAOJ%g~ipҭGǖFpE]@ܦΦ4H)tMPH\k)5^zvsөM3}Hgv0֩@ jgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/0000755000175000017500000000000012577077174021237 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/0000755000175000017500000000000012577077174022164 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf0000644000175000017500000002566612576764163032166 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=../data/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=250000000 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 _1C ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.008 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=true ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/front-end-cal.conf0000644000175000017500000001714712576764163025476 0ustar carlescarles; Default configuration file ; You can define your own front-end calibration tool configuration and invoke it by doing ; ./front-end-cal --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### INITIAL RECEIVER POSITIION ###### ; san francisco scenario ;GNSS-SDR.init_latitude_deg=40.74846557442795 ;GNSS-SDR.init_longitude_deg=-73.98593961814200 ;GNSS-SDR.init_altitude_m=329.11968943169342 ; Barcelona CTTC GNSS-SDR.init_latitude_deg=41.27719585553101 GNSS-SDR.init_longitude_deg=1.988782985790802 GNSS-SDR.init_altitude_m=10 ; Mozoncillo ;GNSS-SDR.init_latitude_deg=41.14534824586196 ;GNSS-SDR.init_longitude_deg=-4.187125019737464 ;GNSS-SDR.init_altitude_m=900 ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2000000 ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=true GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.nokia.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=217 GNSS-SDR.SUPL_MNS=7 GNSS-SDR.SUPL_LAC=861 GNSS-SDR.SUPL_CI=40184 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Osmosdr_Signal_Source] SignalSource.implementation=Osmosdr_Signal_Source SignalSource.AGC_enabled=false ;#filename: path to file with the captured GNSS signal samples to be processed ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/cap_-90dBm_IF15_RF40_EzCap.dat ;SignalSource.filename=/media/DATALOGGER_/signals/Agilent GPS Generator/New York/2msps.dat ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4_no_amp.dat SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4_no_amp_mini.dat ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/mozoncillo/cap_mozon_ezcap.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=2000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=2000000 InputFilter.IF=0 InputFilter.decimation_factor=1 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;#threshold: Acquisition threshold Acquisition.threshold=0.015 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=100000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_min=-100000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#maximum dwells Acquisition.max_dwells=15 gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf0000644000175000017500000002733212576764163031260 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ GNSS-SDR.internal_fs_hz=1200000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5_1C GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] [Osmosdr_Signal_Source] SignalSource.implementation=RtlTcp_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ SignalSource.sampling_frequency=1200000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end overall gain Gain in [dB] SignalSource.gain=40 ;#rf_gain: Front-end RF stage gain in [dB] SignalSource.rf_gain=40 ;#rf_gain: Front-end IF stage gain in [dB] SignalSource.if_gain=30 ;#AGC_enabled: Front-end AGC enabled or disabled SignalSource.AGC_enabled = false ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;#Address of the rtl_tcp server (IPv6 allowed) SignalSource.address=127.0.0.1 ;#Port of the rtl_tcp server SignalSource.port=1234 ;# Set to true if I/Q samples come swapped SignalSource.swap_iq=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter.sampling_frequency=1200000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter.IF=80558 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;# DISABLED IN THE RTL-SDR REALTIME ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=4 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.015 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=15 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] [GPS_L1_CA_DLL_PLL_Optim_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=true ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realti0000644000175000017500000004010512576764164032403 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_1C_enabled=false GNSS-SDR.SUPL_read_1C_assistance_xml=true GNSS-SDR.SUPL_1C_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_1C_ephemeris_port=7275 GNSS-SDR.SUPL_1C_acquisition_server=supl.google.com GNSS-SDR.SUPL_1C_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) SignalSource.device_address=192.168.40.2 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#RF_channels: Number of RF channels present in the frontend device (i.e. USRP with two frontends) SignalSource.RF_channels=2 ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#subdevice: UHD subdevice specification (for USRP dual frontend use A:0 or B:0 or A:0 B:0) SignalSource.subdevice=A:0 B:0 ;######### RF Channels specific settings ###### ;## RF CHANNEL 0 ## ;#freq: RF front-end center frequency in [Hz] SignalSource.freq0=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain0=50 ;#samples: Number of samples to be processed. Notice that 0 indicates no limit SignalSource.samples0=0 ;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version SignalSource.dump0=false SignalSource.dump_filename0=../data/signal_source0.dat ;## RF CHANNEL 1 ## ;#freq: RF front-end center frequency in [Hz] SignalSource.freq1=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain1=50 ;#samples: Number of samples to be processed. Notice that 0 indicates no limit SignalSource.samples1=0 ;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version SignalSource.dump1=false SignalSource.dump_filename1=../data/signal_source1.dat ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner0.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter0.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter0.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter0.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner1.implementation=Pass_Through ;######### INPUT_FILTER 1 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter1.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter1.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=4 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=1 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=8000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_nsr.conf0000644000175000017500000000774312576764163027451 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;GNSS-SDR.internal_fs_hz=6826700 GNSS-SDR.internal_fs_hz=2560000 ;GNSS-SDR.internal_fs_hz=4096000 ;GNSS-SDR.internal_fs_hz=5120000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.freq=1575420000 SignalSource.samples=0 ; 0 means the entire file SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=8 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat Acquisition_1B.item_type=gr_complex Acquisition_1B.if=0 Acquisition_1B.sampled_ms=4 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.pfa=0.0000008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.if=0 Tracking_1B.dump=false Tracking_1B.dump_filename=../data/veml_tracking_ch_ Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.fll_bw_hz=10.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Galileo_E1B_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GALILEO_E1_PVT PVT.averaging_depth=10 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump=true PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000020200000000000011575 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_F0000644000175000017500000005042112576764164032347 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/datalogger/L125_III1b_210s.usb #SignalSource.signal_file=/datalogger/captures/flexiband_III_1b_cap1.usb ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. ;#InputFilter0.IF=-205000 InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. ;#InputFilter1.IF=100000 InputFilter1.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels_1B.count=1 Channels_2S.count=1 ;#count: Number of available Galileo satellite channels. ;Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=0 Channel1.signal=1C Channel2.RF_channel_ID=0 Channel2.signal=1C Channel3.RF_channel_ID=0 Channel3.signal=1C Channel4.RF_channel_ID=0 Channel4.signal=1C Channel5.RF_channel_ID=0 Channel5.signal=1C Channel6.RF_channel_ID=0 Channel6.signal=1C Channel7.RF_channel_ID=0 Channel7.signal=1C Channel8.RF_channel_ID=0 Channel8.signal=1B Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S Channel16.RF_channel_ID=1 Channel16.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.008 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0005 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=30 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=false Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.fll_bw_hz=2.0; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; ;# GALILEO E1B ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000005 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=./veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=20; ;######### TELEMETRY DECODER GPS L2 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_2S.decimation_factor=1; ;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=5; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Mixed_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex././@LongLink0000644000000000000000000000016500000000000011605 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_0000644000175000017500000004251212576764164032704 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=false ;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=true ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter_ch0.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;#InputFilter0.IF=-205000 InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=4 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=true ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter1.IF=-100000 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=4 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=1 Channels_2S.count=1 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;# signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=1 Channel1.signal=2S ;Channel2.RF_channel_ID=0 ;Channel3.RF_channel_ID=0 ;Channel4.RF_channel_ID=0 ;Channel5.RF_channel_ID=0 ;Channel6.RF_channel_ID=0 ;Channel7.RF_channel_ID=0 ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C0.dump=false ;#filename: Log path and filename Acquisition_1C0.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C0.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C0.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C0.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: Acquisition_1C0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C0.threshold=0.002 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C0.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C0.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C0.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C0.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C0.max_dwells=1 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_2S1.dump=false ;#filename: Log path and filename Acquisition_2S1.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_2S1.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_2S1.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_2S1.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_2S1.threshold=0.0005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_2S1.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_2S1.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_2S1.doppler_step=100 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_2S1.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_2S1.max_dwells=1 ;######### TRACKING CONFIG ############ ;######### TRACKING CHANNEL 0 CONFIG ############ Tracking_1C0.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C0.item_type=gr_complex Tracking_1C0.if=0 Tracking_1C0.dump=false Tracking_1C0.dump_filename=./tracking_ch_ Tracking_1C0.pll_bw_hz=40.0; Tracking_1C0.dll_bw_hz=3.0; Tracking_1C0.fll_bw_hz=10.0; Tracking_1C0.order=3; Tracking_1C0.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 11 CONFIG ############ Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S1.item_type=gr_complex Tracking_2S1.if=0 Tracking_2S1.dump=false Tracking_2S1.dump_filename=./tracking_ch_ Tracking_2S1.pll_bw_hz=2.0; Tracking_2S1.dll_bw_hz=0.5; Tracking_2S1.fll_bw_hz=2.0; Tracking_2S1.order=2; Tracking_2S1.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C0.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C0.dump=false TelemetryDecoder_1C0.decimation_factor=20; TelemetryDecoder_2S1.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S1.dump=false TelemetryDecoder_2S1.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf0000644000175000017500000001242512576764163030343 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=50000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ;GNSS-SDR.SUPL_gps_enabled=false ;GNSS-SDR.SUPL_read_gps_assistance_xml=false ;GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com ;GNSS-SDR.SUPL_gps_ephemeris_port=7275 ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com ;GNSS-SDR.SUPL_gps_acquisition_port=7275 ;GNSS-SDR.SUPL_MCC=244 ;GNSS-SDR.SUPL_MNS=5 ;GNSS-SDR.SUPL_LAC=0x59e2 ;GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/captures/Galileo_E5ab_IFEN_CTTC_run1.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=50000000 SignalSource.freq=1176450000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=50000000 InputFilter.IF=-15345000 InputFilter.decimation_factor=1 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_5X.count=4 Channels.in_acquisition=1 Channel.signal=5X ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.signal=5X Channel0.satellite=19 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.signal=5X Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ Channel2.signal=5X Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ Channel3.signal=5X Channel3.satellite=20 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_5X.dump=false Acquisition_5X.dump_filename=./acq_dump.dat Acquisition_5X.item_type=gr_complex Acquisition_5X.if=0 Acquisition_5X.coherent_integration_time_ms=1 Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF Acquisition_5X.threshold=0.002 Acquisition_5X.doppler_max=10000 Acquisition_5X.doppler_step=250 Acquisition_5X.bit_transition_flag=false Acquisition_5X.max_dwells=1 Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. ;######### TRACKING GLOBAL CONFIG ############ Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking Tracking_5X.item_type=gr_complex Tracking_5X.if=0 Tracking_5X.dump=false Tracking_5X.dump_filename=./tracking_ch_ Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz] Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz] Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms] Tracking_5X.pll_bw_hz=20.0; Tracking_5X.dll_bw_hz=20.0; Tracking_5X.order=2; Tracking_5X.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Galileo_E1B_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GALILEO_E1_PVT PVT.averaging_depth=100 PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multisource_Hybrid_short.conf0000644000175000017500000004635012576764164031757 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 Receiver.sources_count=2 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE 0 CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource0.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource0.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource0.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource0.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource0.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource0.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource0.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource0.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource0.dump=false SignalSource0.dump_filename=../data/signal_source.dat ;######### SIGNAL_SOURCE 1 CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource1.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource1.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource1.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource1.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource1.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource1.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource1.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource1.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource1.dump=false SignalSource1.dump_filename=../data/signal_source.dat ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter0.implementation=Ishort_To_Complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter0.sampling_frequency=4000000 InputFilter0.IF=0 ;######### RESAMPLER 1 CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler1.dump=false ;#dump_filename: Log path and filename. Resampler1.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler1.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler1.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler1.sample_freq_out=4000000 ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter1.implementation=Ishort_To_Complex ;######### INPUT_FILTER 1 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter1.sampling_frequency=4000000 InputFilter1.IF=0 ;######### RESAMPLER 1 CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler1.dump=false ;#dump_filename: Log path and filename. Resampler1.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler1.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler1.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler1.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=2 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=2 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS, Galileo ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=1 Channel3.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_Galileo.dump=false ;#filename: Log path and filename Acquisition_Galileo.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_Galileo.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_Galileo.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_Galileo.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_Galileo.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_Galileo.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_Galileo.pfa=0.0000008 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_Galileo.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_Galileo.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_Galileo.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_Galileo.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_Galileo.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_Galileo.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_Galileo.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_Galileo.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_Galileo.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_Galileo.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_Galileo.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_Galileo.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_Galileo.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_Galileo.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_Galileo.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016600000000000011606 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_rea0000644000175000017500000004326012576764164032625 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. InputFilter0.IF=-205000 ;#InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. InputFilter1.IF=100000 ;#InputFilter1.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels_2S.count=8 ;#count: Number of available Galileo satellite channels. ;Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=0 Channel1.signal=1C Channel2.RF_channel_ID=0 Channel2.signal=1C Channel3.RF_channel_ID=0 Channel3.signal=1C Channel4.RF_channel_ID=0 Channel4.signal=1C Channel5.RF_channel_ID=0 Channel5.signal=1C Channel6.RF_channel_ID=0 Channel6.signal=1C Channel7.RF_channel_ID=0 Channel7.signal=1C Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.008 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0005 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=30 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.fll_bw_hz=2.0; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=20; ;######### TELEMETRY DECODER GPS L2 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/default.conf0000644000175000017500000003025612576764163024465 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ; Check http://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;DataTypeAdapter.implementation=Ibyte_To_Cbyte ;DataTypeAdapter.implementation=Pass_Through ;DataTypeAdapter.item_type=byte ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;Resampler.item_type=cbyte ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS L1 C/A satellite channels. Channels_1C.count=6 ;#count: Number of available Galileo E1B satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=5 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_nsr.conf0000644000175000017500000001027212576764163026524 0ustar carlescarles; Sample configuration file for IFEN SX-NSR software receiver front-end ; http://www.ifen.com/products/sx-scientific-gnss-solutions/nsr-software-receiver.html ; This sample configuration is able to process directly .sream binary files ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2560000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.freq=1575420000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.0075 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=true ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Hybrid_nsr.conf0000644000175000017500000003256612576764163026772 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;GNSS-SDR.internal_fs_hz=6826700 GNSS-SDR.internal_fs_hz=2560000 ;GNSS-SDR.internal_fs_hz=4096000 ;GNSS-SDR.internal_fs_hz=5120000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000002 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B_factor=4; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multisource_Hybrid_nsr.conf0000644000175000017500000004575612576764164031433 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] Receiver.sources_count=2 ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;GNSS-SDR.internal_fs_hz=6826700 GNSS-SDR.internal_fs_hz=2560000 ;GNSS-SDR.internal_fs_hz=4096000 ;GNSS-SDR.internal_fs_hz=5120000 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE 0 CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource0.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource0.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource0.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource0.freq=1575420000 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource0.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource0.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource0.dump=false SignalSource0.dump_filename=../data/signal_source.dat ;######### SIGNAL_SOURCE 1 CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource1.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource1.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource1.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource1.freq=1575420000 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource1.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource1.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource1.dump=false SignalSource1.dump_filename=../data/signal_source.dat ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=float ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter0.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter0.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=float ;######### INPUT_FILTER 1 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter1.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter1.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# SOURCE CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 Channel10.RF_channel_ID=1 Channel11.RF_channel_ID=1 Channel12.RF_channel_ID=1 Channel13.RF_channel_ID=1 Channel14.RF_channel_ID=1 Channel15.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1B Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000002 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=4; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E5a.conf0000644000175000017500000003340412576764163026725 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=32000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ;GNSS-SDR.SUPL_gps_enabled=false ;GNSS-SDR.SUPL_read_gps_assistance_xml=false ;GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com ;GNSS-SDR.SUPL_gps_ephemeris_port=7275 ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com ;GNSS-SDR.SUPL_gps_acquisition_port=7275 ;GNSS-SDR.SUPL_MCC=244 ;GNSS-SDR.SUPL_MNS=5 ;GNSS-SDR.SUPL_LAC=0x59e2 ;GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed ;SignalSource.filename=/home/marc/E5a_acquisitions/signal_source_5X_primary.dat ;SignalSource.filename=/home/marc/E5a_acquisitions/galileo_E5_8M_r2_upsampled_12.dat ;SignalSource.filename=/home/marc/E5a_acquisitions/Tiered_sim_4sat_stup4_2s_up.dat ;SignalSource.filename=/home/marc/E5a_acquisitions/signal_source_sec21M_long.dat SignalSource.filename=../data/32MS_complex.dat; ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=32000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1176450000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=32000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels_5X.count=1 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.signal=5X ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.signal=5X ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=19 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=Galileo ;Channel1.signal=5Q ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ ;Channel2.system=Galileo ;Channel2.signal=5Q ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ ;Channel3.system=Galileo ;Channel3.signal=5Q ;Channel3.satellite=20 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_5X.dump=true ;#filename: Log path and filename Acquisition_5X.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_5X.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_5X.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_5X.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_5X.threshold=0.001 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_5X.pfa=0.0003 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_5X.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_5X.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_5X.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_5X.max_dwells=1 ;#CAF filter: **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz Acquisition_5X.CAF_window_hz=0 ;#Zero_padding: **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. ;#If set to 1 it is ON, if set to 0 it is OFF. Acquisition_5X.Zero_padding=0 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_5X.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_5X.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_5X.dump=true ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_5X.dump_filename=./tracking_ch_ ;#pll_bw_hz_init: **Only for E5a** PLL loop filter bandwidth during initialization [Hz] Tracking_5X.pll_bw_hz_init=20.0; ;#dll_bw_hz_init: **Only for E5a** DLL loop filter bandwidth during initialization [Hz] Tracking_5X.dll_bw_hz_init=20.0; ;#dll_ti_ms: **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms] ;Tracking_5X.ti_ms=3; Tracking_5X.ti_ms=1; ;#pll_bw_hz: PLL loop filter bandwidth [Hz] ;Tracking.pll_bw_hz=5.0; Tracking_5X.pll_bw_hz=20.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] ;Tracking.dll_bw_hz=2.0; Tracking_5X.dll_bw_hz=20.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] ;Tracking_5X.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_5X.order=2; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_5X.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;Use [Galileo_E1B_Observables] for E5a also. Observables.implementation=Galileo_E1B_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. ;Use [GALILEO_E1_PVT] for E5a also. PVT.implementation=GALILEO_E1_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf0000644000175000017500000001222412576764163031115 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ GNSS-SDR.internal_fs_hz=1999898 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4.dat SignalSource.item_type=gr_complex ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.AGC_enabled = false SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter.sampling_frequency=1999898 InputFilter.IF=80558 ; IF deviation due to front-end LO inaccuracies [Hz] ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;# DISABLED IN THE RTL-SDR REALTIME ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.threshold=0.015 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_gr_complex.conf0000644000175000017500000000472512576764163030067 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.samples=250000000 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.005 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_short.conf0000644000175000017500000002652512576764163030005 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.000002 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition_1B0.repeat_satellite = true ;Acquisition_1B1.repeat_satellite = true ;Acquisition_1B2.repeat_satellite = true ;Acquisition_1B3.repeat_satellite = true ;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. ;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000 Acquisition_1B.cboc=false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Galileo_E1B_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GALILEO_E1_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf0000644000175000017500000000722612576764163030323 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ;#Notes for GN3S source: ; - The front-end sampling frequency is fixed to 8.1838 MSPS (8183800 Hz). ; - The baseband signal is shifted to an IF of 38400 Hz. It should be corrected with the signal conditioner block GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=GN3S_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=8183800 SignalSource.dump=false SignalSource.dump_filename=../signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=8183800 InputFilter.IF=38400 InputFilter.decimation_factor=3 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=5 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.008 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf0000644000175000017500000000471312576764163032026 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.device_address=192.168.40.2 SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.gain=50 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ###### Channels_1B.count=4 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat Acquisition_1B.item_type=gr_complex Acquisition_1B.if=0 Acquisition_1B.sampled_ms=4 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;Acquisition_1B.threshold=1 Acquisition_1B.pfa=0.000008 Acquisition_1B.doppler_max=6000 Acquisition_1B.doppler_step=250 Acquisition_1B.cboc=false ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.if=0 Tracking_1B.dump=false Tracking_1B.dump_filename=../data/veml_tracking_ch_ Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.fll_bw_hz=10.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Galileo_E1B_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GALILEO_E1_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.dump=false PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016300000000000011603 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realti0000644000175000017500000003224012576764164032775 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1a.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf0000644000175000017500000002604012576764163031373 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=./datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands #used for gps InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 #used for galileo InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels_1B.count=4 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.implementation=Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition ;#threshold: Acquisition threshold Acquisition_1B.threshold=0.05 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]; Acquisition_1B.coherent_integration_time_ms=8 Acquisition_1B.cboc=false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=true ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=20.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Galileo_E1B_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GALILEO_E1_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016300000000000011603 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realti0000644000175000017500000003223612576764164033002 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Hybrid_short.conf0000644000175000017500000003372312576764163027323 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signalq Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=3 ;#count: Number of available Galileo satellite channels. Channels_1B.count=3 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q Channel0.signal=1B Channel1.signal=1C Channel2.signal=1B Channel3.signal=1C Channel4.signal=1B Channel5.signal=1C ;Channel6.signal=1B ;Channel7.signal=1C ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000008 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_SPIR.conf0000644000175000017500000003056012576764163026501 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Spir_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/fabra/dd44068b-f808-4164-834c-35b550037514/CTTC/spir_file_20secs.dat ;SignalSource.filename=/Users/carlesfernandez/Documents/workspace/code2/trunk/data/20Secs/20Secs_L1.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=int ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=80000000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter InputFilter.implementation=Freq_Xlating_Fir_Filter ;InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=80000000 InputFilter.IF=10164 InputFilter.decimation_factor=20 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=80000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=10 ;#count: Number of available Galileo satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" Galileo E1B Channel.signal=1C ;Galileo FM3 -> PRN 19 ;Galileo FM4 -> PRN 20 ;######### CHANNEL 0 CONFIG ############ ;Channel0.signal=1B ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=20 ;######### CHANNEL 1 CONFIG ############ ;Channel1.signal=1B ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ ;Channel2.signal=1B ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ ;Channel3.signal=1B ;Channel3.satellite=19 ;######### ACQUISITION GLOBAL CONFIG ############ _1C ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=5 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = true ;Acquisition1.repeat_satellite = true ;Acquisition2.repeat_satellite = true ;Acquisition3.repeat_satellite = true ;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. ;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000 Acquisition0.cboc=false ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.cboc=false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=20.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=500 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016100000000000011601 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realti0000644000175000017500000003212412576764164032776 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_I-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=40000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=4 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 ;Channel4.RF_channel_ID=0 ;Channel5.RF_channel_ID=0 ;Channel6.RF_channel_ID=0 ;Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.011 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr.conf0000644000175000017500000003025612576764163024601 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ; Check http://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;DataTypeAdapter.implementation=Ibyte_To_Cbyte ;DataTypeAdapter.implementation=Pass_Through ;DataTypeAdapter.item_type=byte ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;Resampler.item_type=cbyte ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS L1 C/A satellite channels. Channels_1C.count=6 ;#count: Number of available Galileo E1B satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=5 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf0000644000175000017500000003451512576764163031115 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) SignalSource.device_address=192.168.40.2 ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=50 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resampled data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=12 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=GPS ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=6000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] ;Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=30.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016500000000000011605 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_0000644000175000017500000005614612576764164032714 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true #SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb SignalSource.signal_file=/datalogger/captures/test.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. InputFilter0.IF=-205000 ;#InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter1.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=1 Channels_2S.count=1 ;#count: Number of available Galileo satellite channels. ;Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=1 Channel1.signal=2S Channel2.RF_channel_ID=1 Channel2.signal=2S Channel3.RF_channel_ID=1 Channel3.signal=2S Channel4.RF_channel_ID=1 Channel4.signal=2S Channel5.RF_channel_ID=1 Channel5.signal=2S Channel6.RF_channel_ID=1 Channel6.signal=2S Channel7.RF_channel_ID=1 Channel7.signal=2S Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;# GPS L2C M Acquisition_2S1.dump=false Acquisition_2S1.dump_filename=./acq_dump.dat Acquisition_2S1.item_type=gr_complex Acquisition_2S1.if=0 Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S1.threshold=0.0001 ;Acquisition_2S1.pfa=0.001 Acquisition_2S1.doppler_max=5000 Acquisition_2S1.doppler_min=-5000 Acquisition_2S1.doppler_step=30 Acquisition_2S1.max_dwells=1 Acquisition_2S2.dump=false Acquisition_2S2.dump_filename=./acq_dump.dat Acquisition_2S2.item_type=gr_complex Acquisition_2S2.if=0 Acquisition_2S2.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S2.threshold=0.0003 ;Acquisition_2S2.pfa=0.001 Acquisition_2S2.doppler_max=5000 Acquisition_2S2.doppler_min=-5000 Acquisition_2S2.doppler_step=30 Acquisition_2S2.max_dwells=1 Acquisition_2S3.dump=false Acquisition_2S3.dump_filename=./acq_dump.dat Acquisition_2S3.item_type=gr_complex Acquisition_2S3.if=0 Acquisition_2S3.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S3.threshold=0.0003 ;Acquisition_2S3.pfa=0.001 Acquisition_2S3.doppler_max=5000 Acquisition_2S3.doppler_min=-5000 Acquisition_2S3.doppler_step=30 Acquisition_2S3.max_dwells=1 Acquisition_2S4.dump=false Acquisition_2S4.dump_filename=./acq_dump.dat Acquisition_2S4.item_type=gr_complex Acquisition_2S4.if=0 Acquisition_2S4.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S4.threshold=0.0003 ;Acquisition_2S4.pfa=0.001 Acquisition_2S4.doppler_max=5000 Acquisition_2S4.doppler_min=-5000 Acquisition_2S4.doppler_step=30 Acquisition_2S4.max_dwells=1 Acquisition_2S5.dump=false Acquisition_2S5.dump_filename=./acq_dump.dat Acquisition_2S5.item_type=gr_complex Acquisition_2S5.if=0 Acquisition_2S5.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S5.threshold=0.0003 ;Acquisition_2S5.pfa=0.001 Acquisition_2S5.doppler_max=5000 Acquisition_2S5.doppler_min=-5000 Acquisition_2S5.doppler_step=30 Acquisition_2S5.max_dwells=1 Acquisition_2S6.dump=false Acquisition_2S6.dump_filename=./acq_dump.dat Acquisition_2S6.item_type=gr_complex Acquisition_2S6.if=0 Acquisition_2S6.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S6.threshold=0.0003 ;Acquisition_2S6.pfa=0.001 Acquisition_2S6.doppler_max=5000 Acquisition_2S6.doppler_min=-5000 Acquisition_2S6.doppler_step=30 Acquisition_2S6.max_dwells=1 Acquisition_2S7.dump=false Acquisition_2S7.dump_filename=./acq_dump.dat Acquisition_2S7.item_type=gr_complex Acquisition_2S7.if=0 Acquisition_2S7.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S7.threshold=0.0003 ;Acquisition_2S7.pfa=0.001 Acquisition_2S7.doppler_max=5000 Acquisition_2S7.doppler_min=-5000 Acquisition_2S7.doppler_step=100 Acquisition_2S7.max_dwells=1 Acquisition_2S8.dump=false Acquisition_2S8.dump_filename=./acq_dump.dat Acquisition_2S8.item_type=gr_complex Acquisition_2S8.if=0 Acquisition_2S8.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S8.threshold=0.0003 ;Acquisition_2S8.pfa=0.001 Acquisition_2S8.doppler_max=5000 Acquisition_2S8.doppler_min=-5000 Acquisition_2S8.doppler_step=100 Acquisition_2S8.max_dwells=1 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 8 CONFIG ############ Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S1.item_type=gr_complex Tracking_2S1.if=0 Tracking_2S1.dump=true Tracking_2S1.dump_filename=./tracking_ch_ Tracking_2S1.pll_bw_hz=2.0; Tracking_2S1.dll_bw_hz=0.5; Tracking_2S1.fll_bw_hz=2.0; Tracking_2S1.order=3; Tracking_2S1.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 9 CONFIG ############ Tracking_2S2.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S2.item_type=gr_complex Tracking_2S2.if=0 Tracking_2S2.dump=true Tracking_2S2.dump_filename=./tracking_ch_ Tracking_2S2.pll_bw_hz=2.0; Tracking_2S2.dll_bw_hz=0.5; Tracking_2S2.fll_bw_hz=2.0; Tracking_2S2.order=3; Tracking_2S2.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 10 CONFIG ############ Tracking_2S3.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S3.item_type=gr_complex Tracking_2S3.if=0 Tracking_2S3.dump=true Tracking_2S3.dump_filename=./tracking_ch_ Tracking_2S3.pll_bw_hz=2.0; Tracking_2S3.dll_bw_hz=0.5; Tracking_2S3.fll_bw_hz=2.0; Tracking_2S3.order=3; Tracking_2S3.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 11 CONFIG ############ Tracking_2S4.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S4.item_type=gr_complex Tracking_2S4.if=0 Tracking_2S4.dump=true Tracking_2S4.dump_filename=./tracking_ch_ Tracking_2S4.pll_bw_hz=2.0; Tracking_2S4.dll_bw_hz=0.3; Tracking_2S4.fll_bw_hz=2.0; Tracking_2S4.order=3; Tracking_2S4.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 12 CONFIG ############ Tracking_2S5.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S5.item_type=gr_complex Tracking_2S5.if=0 Tracking_2S5.dump=true Tracking_2S5.dump_filename=./tracking_ch_ Tracking_2S5.pll_bw_hz=2.0; Tracking_2S5.dll_bw_hz=0.3; Tracking_2S5.fll_bw_hz=2.0; Tracking_2S5.order=3; Tracking_2S5.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 13 CONFIG ############ Tracking_2S6.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S6.item_type=gr_complex Tracking_2S6.if=0 Tracking_2S6.dump=true Tracking_2S6.dump_filename=./tracking_ch_ Tracking_2S6.pll_bw_hz=2.0; Tracking_2S6.dll_bw_hz=0.3; Tracking_2S6.fll_bw_hz=2.0; Tracking_2S6.order=3; Tracking_2S6.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 14 CONFIG ############ Tracking_2S7.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S7.item_type=gr_complex Tracking_2S7.if=0 Tracking_2S7.dump=true Tracking_2S7.dump_filename=./tracking_ch_ Tracking_2S7.pll_bw_hz=2.0; Tracking_2S7.dll_bw_hz=0.3; Tracking_2S7.fll_bw_hz=2.0; Tracking_2S7.order=3; Tracking_2S7.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 15 CONFIG ############ Tracking_2S8.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S8.item_type=gr_complex Tracking_2S8.if=0 Tracking_2S8.dump=true Tracking_2S8.dump_filename=./tracking_ch_ Tracking_2S8.pll_bw_hz=2.0; Tracking_2S8.dll_bw_hz=0.3; Tracking_2S8.fll_bw_hz=2.0; Tracking_2S8.order=3; Tracking_2S8.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=20; ;######### TELEMETRY DECODER GPS L2 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;#decimation factor TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf0000644000175000017500000002725612576764163030746 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/javier/signals/4msps.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=1 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=GPS ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=true ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=55.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=1.5 ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf0000644000175000017500000002630612576764163030464 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels_1C.count=5 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ Channel0.signal=1C Channel0.satellite=1 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.signal=1C Channel1.satellite=11 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.signal=1C Channel2.satellite=17 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.signal=1C Channel3.satellite=20 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.signal=1C Channel4.satellite=32 Channel4.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############_1C ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=true ;#filename: Log path and filename ;Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent-integration_time_ms=4 Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition ;######### ACQUISITION CHANNELS CONFIG ###### ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.4 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_Hybrid_byte.conf0000644000175000017500000003322712576764163027126 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=20000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/Users/javier/signals/fraunhofer/L125_III1b_210s_L1.bin ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=20000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ibyte_To_Complex ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=20000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=20000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=20000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0060 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000008 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/0000755000175000017500000000000012577077174022742 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_acq_CCCWSR.conf0000644000175000017500000003351712576764164027253 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=6 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.system=Galileo ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1B ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=Galileo Channel0.signal=1B ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ Channel1.system=Galileo Channel1.signal=1B Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.coherent_integration_time_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition] Acquisition.implementation=Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition ;#threshold: Acquisition threshold. Acquisition.threshold=0.0025 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition ;Acquisition0.threshold=0.0025 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition ;Acquisition1.threshold=0.0025 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_array.conf0000644000175000017500000003373512576764164026563 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] [Raw_Array_Signal_Source] SignalSource.implementation=Raw_Array_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=5000000 ;#gigabit ethernet device SignalSource.ethernet_dev=eth0 ;#active array channles SignalSource.channels=8 ;#Ethernet transport parameters SignalSource.snapshots_per_frame=80 SignalSource.inter_frame_delay=10 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Array_Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Beamformer_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=5000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=8 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition.pfa=0.0000000001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition0.threshold=0.005 ;Acquisition0.pfa=0.001 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition1.threshold=0.005 ;Acquisition1.pfa=0.001 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_acq_Tong.conf0000644000175000017500000003352112576764164027171 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=6 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=GPS Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Tong_Acquisition] or [Galileo_E1_PCPS_Tong_Ambiguous_Acquisition] Acquisition.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;#threshold: Acquisition threshold. Acquisition.threshold=0.004 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#tong_init_val: Initial value for the Tong counter. Acquisition.tong_init_val=5 ;#tong_max_val: Maximum value for the Tong counter. Acquisition.tong_max_val=10 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;Acquisition0.threshold=0.004 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;Acquisition1.threshold=0.004 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_SBAS_short.conf0000644000175000017500000003063512576764164027410 0ustar carlescarles; configuration file for SBAS ; invoke it by doing ; gnss-sdr --config_file=../conf/gnss-sdr_sbas.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;#internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#AGC_enabled: RTLSDR AGC enabled [true or false] SignalSource.AGC_enabled=true ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=6 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS, SBAS ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=SBAS Channel0.signal=1C Channel0.satellite=124 ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.system=SBAS Channel1.signal=1C Channel1.satellite=120 Channel1.repeat_satellite=true ;######### CHANNEL 2 CONFIG ############ Channel2.system=SBAS Channel2.signal=1C Channel2.satellite=126 Channel2.repeat_satellite=true ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=../data/acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=2; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=../data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_ishort_file_read.conf0000644000175000017500000003527012576764164030743 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER_/signals/CTTC captures/cap_fs_5MHz_antenna_suelta_and_front_end_tejado_cttc.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=5000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#AGC_enabled: RTLSDR AGC enabled [true or false] SignalSource.AGC_enabled=true ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=5000000 InputFilter.IF=14821 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=5000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=5000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=5 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=70 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition1.threshold=70 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition2.threshold=70 Acquisition2.doppler_max=10000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition3.threshold=70 Acquisition3.doppler_max=10000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition4.threshold=70 Acquisition4.doppler_max=10000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition5.threshold=50 Acquisition5.doppler_max=10000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition6.threshold=70 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition7.threshold=70 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition8.threshold=70 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_tcp_connector_tracking.conf0000644000175000017500000003253412576764164032163 0ustar carlescarles [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use File_Signal_Source or UHD_Signal_Source or GN3S_Signal_Source (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/engunit/workspace/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;SignalSource.sampling_frequency=100000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=50 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.dump_filename=../data/SignalSource.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Pass_Through disables this block SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Pass_Through disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Pass_Through disables this block ;InputFilter.implementation=Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Pass_Through disables this block Resampler.implementation=Direct_Resampler ;Resampler.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=4 Channels.in_acquisition=4 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=15 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C ;Channel1.satellite=18 ;Channel1.repeat_satellite=true ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C ;Channel2.satellite=16 ;Channel2.repeat_satellite=true ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C ;Channel3.satellite=23 ;Channel3.repeat_satellite=true ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C ;Channel4.satellite=3 ;Channel4.repeat_satellite=true ;######### CHANNEL 3 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=true ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=100 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition1.threshold=100 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition2.threshold=100 Acquisition2.doppler_max=10000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition3.threshold=100 Acquisition3.doppler_max=10000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition4.threshold=100 Acquisition4.doppler_max=10000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition5.threshold=100 Acquisition5.doppler_max=10000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition6.threshold=100 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition7.threshold=100 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition8.threshold=100 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementatiion: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking], [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] Tracking.implementation= GPS_L1_CA_TCP_CONNECTOR_Tracking ;Tracking.implementation=GPS_L1_CA_DLL_FLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=2; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;#port_ch0: local TCP port for channel 0 Tracking.port_ch0=2070; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm ;PVT.averaging_depth=100 PVT.averaging_depth=2 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_nmea_tty_output.conf0000644000175000017500000003607512576764164030705 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER_/signals/CTTC captures/cap_fs_5MHz_antenna_suelta_and_front_end_tejado_cttc.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=5000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#AGC_enabled: RTLSDR AGC enabled [true or false] SignalSource.AGC_enabled=true ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=5000000 InputFilter.IF=14821 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=5000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=5000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=5 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=70 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition1.threshold=70 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition2.threshold=70 Acquisition2.doppler_max=10000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition3.threshold=70 Acquisition3.doppler_max=10000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition4.threshold=70 Acquisition4.doppler_max=10000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition5.threshold=50 Acquisition5.doppler_max=10000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition6.threshold=70 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition7.threshold=70 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition8.threshold=70 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/master.conf0000644000175000017500000003440612576764164025114 0ustar carlescarles; MASTER configuration file ; This file should be updated with the latest changes in the configuration parameters, as a sample configuration file. ; use RELATIVE file path in this configuration file ; Sample for a configuration file for GNSS-SDR [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed ;SignalSource.filename=../data/my_capture.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=8 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_acq_assistance_test.conf0000644000175000017500000003645312576764164031465 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2045950 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=true GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=214 GNSS-SDR.SUPL_MNS=7 GNSS-SDR.SUPL_LAC=861 GNSS-SDR.SUPL_CI=40181 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ;SignalSource.implementation=UHD_Signal_Source SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/javier/signals/casa1_gn3s_d4.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=2045950 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=0 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) ;# FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz ; 8183800/5 = 1 636760 ; 8183800/4 = 2 045950 ; 8183800/3 = 2 727933.33333333 InputFilter.sampling_frequency=8183800 InputFilter.IF=-38400 InputFilter.decimation_factor=5 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=2045950 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=4 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 Acquisition.doppler_min=-5000; ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;#maximum dwells Acquisition.max_dwells=5 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=30 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=6000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition1.threshold=30 Acquisition1.doppler_max=6000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition2.threshold=30 Acquisition2.doppler_max=6000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition3.threshold=30 Acquisition3.doppler_max=6000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition4.threshold=20 Acquisition4.doppler_max=6000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition5.threshold=50 Acquisition5.doppler_max=6000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition6.threshold=15 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition7.threshold=15 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition8.threshold=15 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] ;Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_galileo_e1_tcp_connector_tracking.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/old/gnss-sdr_galileo_e1_tcp_connector_trackin0000644000175000017500000002435512576764164033153 0ustar carlescarles [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use File_Signal_Source or UHD_Signal_Source or GN3S_Signal_Source (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/engunit/workspace/cap2/cp_cttc_1_galileo_4Msps.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=50 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Pass_Through disables this block SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Pass_Through disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Pass_Through disables this block ;InputFilter.implementation=Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Pass_Through disables this block Resampler.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=1 Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ Channel0.system=Galileo Channel0.signal=1B Channel0.satellite=12 Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.system=Galileo Channel1.signal=1B Channel1.satellite=11 Channel1.repeat_satellite=true ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=4 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition0.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=50 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=125 ;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false] Acquisition0.cboc=true ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition1.threshold=50 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=125 Acquisition1.cboc=true ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] or [Galileo_E1_TCP_CONNECTOR_Tracking] Tracking.implementation=Galileo_E1_TCP_CONNECTOR_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=30.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking.very_early_late_space_chips=0.6; ;#port_ch0: local TCP port for channel 0 Tracking.port_ch0=2070; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf0000644000175000017500000003500212576764163031756 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) SignalSource.device_address=192.168.40.2 ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. ;SignalSource.item_type=gr_complex SignalSource.item_type=cshort ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=40 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=cshort ;DataTypeAdapter.item_type=cbyte ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter ;InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=cshort ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=11 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.48 InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resampled data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS ;Channel.system=GPS Channel.signal=1C ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A ;Channel0.signal=1C ;Channel1.signal=1C ;Channel2.signal=1C ;Channel3.signal=1C ;Channel4.signal=1C ;Channel5.signal=1C ;Channel6.signal=1C ;Channel7.signal=1C ;Channel8.signal=1C ;Channel9.signal=1C ;Channel10.signal=1C ;Channel11.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=GPS ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.00001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=8000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=30.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf0000644000175000017500000001535612576764163030572 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1227600000 SignalSource.gain=60 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=20000000 InputFilter.IF=-1600000 ;# Decimation factor after the frequency tranaslating block InputFilter.decimation_factor=1 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex Resampler.sample_freq_in=2000000 Resampler.sample_freq_out=2000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_2S.count=1 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=2S Channel0.signal=2S Channel1.signal=2S Channel2.signal=2S Channel3.signal=2S Channel4.signal=2S Channel5.signal=2S Channel6.signal=2S Channel7.signal=2S ;Channel8.signal=2S ;Channel9.signal=2S ;Channel10.signal=2S ;Channel11.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0013 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=10000 Acquisition_2S.doppler_min=-10000 Acquisition_2S.doppler_step=100 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.fll_bw_hz=2.0; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############. Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=10 PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf0000644000175000017500000001107712576764163031217 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.50.2 SignalSource.item_type=cshort SignalSource.sampling_frequency=4000000 SignalSource.freq=1227600000 ;### Options: internal, external, or MIMO SignalSource.clock_source=internal SignalSource.gain=35 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=cshort ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=cshort InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=11 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.48 InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_2S.count=1 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=2S Channel0.signal=2S Channel1.signal=2S Channel2.signal=2S Channel3.signal=2S Channel4.signal=2S Channel5.signal=2S Channel6.signal=2S Channel7.signal=2S ;Channel8.signal=2S ;Channel9.signal=2S ;Channel10.signal=2S ;Channel11.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0015 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.25; Tracking_2S.fll_bw_hz=0.0; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=true TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############. Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=10 PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016300000000000011603 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_fi0000644000175000017500000003234412576764163032747 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/datalogger/L125_III1b_210s.usb ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=8 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf0000644000175000017500000001000612576764163030421 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=3200000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Two_Bit_Cpx_File_Signal_Source SignalSource.filename=/datalogger/captures/ajith/test1_two_cpx_live.dat SignalSource.item_type=byte SignalSource.sampling_frequency=19200000 SignalSource.freq=1575420000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=19200000 InputFilter.IF=4024000 InputFilter.decimation_factor=6 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=6 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.threshold=0.007 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex ././@LongLink0000644000000000000000000000016200000000000011602 Lustar rootrootgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.confgnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realti0000644000175000017500000003227112576764164033001 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_II-3b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=40000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=16 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;# signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/share/gnss-sdr/conf/gnss-sdr_GPS_L1_USRP_realtime.conf0000644000175000017500000003405512576764163030402 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=2000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=2000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=2000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=6 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=GPS Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/debian/gnss-sdr/usr/bin/0000755000175000017500000000000012577077174017145 5ustar carlescarlesgnss-sdr-0.0.6/debian/gnss-sdr/usr/bin/front-end-cal0000755000175000017500002423562012577077174021542 0ustar carlescarlesELF>[N@P4Q@8 @@@@@@00pp@p@@@!XM!XM gMggpPs lMllPP@@DDgMggPtdEQtdRtdgMgg((/lib64/ld-linux-x86-64.so.2GNU GNUv$}>"D8/M#jn3Top4|>NEvb8oybz#T-A mQM]T ➣Ѝ2if _P< C/`EǢx%HZ)C +83 ӑ{!jBE칹O)z+JLN](CJ&۳{wrQG3"Ly{U̍I?I?zb"2AgeIPQr'e^f_Uҝa ss'I鿯E!u0\f:QP$ n% G*ea{)0[V>Q4$Q( LSLt Y ;HJ@ YnG^gR/""" kN?4w ZxIkeI>(Emε]s:+Iyn| v0P[%πREXO5_Jvw'jsb{Nt7%xETC Y@ìɴr ZMЩEXv}dT/D -$(¿OWoJACR?̌KoYޫtrf?L92K!u h-gaBð3֚U]k`C^˯t;o+{P .as[oGK[%WgaS}`kM QvBNunAG%j6'!ǾMB8[ta41NJorC1k$k tI?2}r:/ +@6lg4UKMwKV;o%m C[Bhʩs{wEL0&EΖ- @RMD QMfXEPvJ7| ab]#*EX0_xh7 aqŬbe?~!]$j CkNr M?S&$lY)-hdõ$r{UCj"[$p<6\MCjqſ)]$%yX2 '[4n31/ C|> $V8*n{MpB{; @"SgߍEbU| U|Hn e?SߥKI"Ȼ8}.\wM2s2X骓d={a~֑k&|f kgnN[(ACkW|IYIod:AyߥQIg7%|yO+g#60+[q+Ou()M.,VO־iBJZgRaz H/X`2vyz\R䫕qX'хfAK"6y'`J]kЯ>.zn7&^sqoU5WP^T^5/=VX[ZV6onVqQpsp.51\Xhoco]/8qGNnHZ^qKo)qpn.7Up#plwa]C!yKu!@zx0Ƒ" [4?" 0g(Y!@= l9v" S%SW!@<Pu 0kRAwe!@5[Y!dN" g EPh " @wNU `lR `k 6ȨYPDD" P 4 !{x(Y!`; kF!@{Hv&" ЏZDt!|B\S!8x]>`A" `P`!@d" U8" `hbA hAك" ^h9!>(u" @3b-klA)" 0bL" N* lM!}Bx!`8s!@H[!7( (lIt@" g[ k!mx8)" 0b- " 5WSL" Pg%& DV?" 0g" ] " 0N @!mxv" S%<0mA]" Z" g" ]hX4 !lx" N(" `hbo !l" S-ۦxD" P M! z8!" R" RG" PR l`y!|HY訯r" RB AjA[jpyA%" Ng!@6X-!9" R%y!|D!0qx" ]~ v)" N !zx(t" p3bv" 5bL @lڛ kk," p5b Q$" ]h~)V!4(" N_0qA;!P>ˈ" 0ReI" R!kx}zh+" 4b9H" @PA_!9XY&" ЎZM " N !@sxB [N!nx ` l9s覯,!8E" `P\" ZuYB" g " pNqeЅA{য" S%:!6(D" P4}" p`hӀpx?" gA!HJI" PRl!@X@YxA^J!`z=sRd\ū" RL!" Xp" be!A" gG" Igdئ" ЈN(!Pkxlt" @6b !" `_Z54w" 5bnu" SZf!8Dh kl!g(@D *~ `vpP&> Aw" b+" 4b\`!08 !PnxØ" [S" 4Wcy!F-!@B" PR7!`kx/ q= " N?J" NUA" `g T!hا8zH3 kBI" Pl " vNZ" @NA{" S%bpjA" UwE" P," @fSਯ L" 0g @l  0"l" ZSr" Y4" Nv0AR@4 D" 0}P !nx" QQd " 3Wq" ЈNQv" S j"A>{ ve!lxg!7('" =RN ,lIH" PJg8" 0R /l]BC" Pه8$@" g" S" N" [h" R%$sA !nxm!A(7R89+ kd" NCK" NUp =" bۙ" #VH" P " vN= kIͪPz kmF" P,S!`9 ҡ" 0eSL" g NF!`{(PRp7W PluA @%lBݖ kB! mx'" `3Wqw" O p1l" W|bwA+E!@{HEx" pbK!@Hz" Z~ lx!@{x(6n!D dD" @P " UX! h 6 lBƜ" S " R%ǥ0"" R%}!`lx2" NM" pbE!{8" N" Nu<ЂA<&" ЎZ6(" \/3xb7 ]!4Pg!='" u[LH" N5a!`B iA7m!g lBGp" Ж]8" `rNq" pCR0:" 7W0" `3WqJ" [> " qNq/F!mx l" @fS" 5O%>0A݂Ȧy" `ND" Uӟ l|" @[ۄ" g&" ZM" 0NgpAkU!hH/ lg 'lD" NN" g-!@yxy9!@@!uxGkkAM" [" 8Rځ kj!=(`{ @lRN" oN= Ц^!@9" NvC " N Z" +bYd!;(" yNo\iAof!@7(!As6 " xNݞ k R>Q" iO'" [" pbx@0iA B" @gmXЧ  +lP!|8&" ZM*" 0b-bm!<x" PKg " 0N$ @ ls" ZI" g%'!|xH\*" 0be jAJ!|8ȧc!:("A`!qx(F" `qNq{@'^!3(Kj!p>X " N RwAv !nx " yNߏ" Y" Ri!@8PR " xN-| pk&5F! |(" \8Ɍ" ZMcA" g" oAy!@|8}" Zu7,!yx(l'" u[ vmk@e" wNq" US`A !rx8i|" PR!@|H[!h!tx8-!Cr" gF" UOبVU!=(|" N҆x" dSp(" \8{ l" RLVPD" cS k9'S!8(" `P@" bxO!H@" gz" ZM$E! | 0M" p]U?" pRF! >0@" qbK%" нYq*" 3b6>8!" 8W Η" mN^!d A!lx4" N Шz" `] Ϛ" #V" `[M " N C!x8  l9) lF!mx/ " `pNq{(  plBIWAh!<;!`=(" wN۔( $le@:b-!8 l " N~|J$`yA pk9dPwAaA:~" cS:!d(" !;" pRq ! zx #!5<" N !0yx k?zH3cd4~dv*PBn~" @[I " 5W৯X" PP{&" pi)k 0kb," pbt(!Hws" YZ kK" Pg%"@AM @kIu!mx"Y!6!!?Bc!fxlibgnuradio-runtime.so.3.7.5_ZN5boost11this_thread18interruption_pointEv_ZN5boost6thread13native_handleEv_ZTIN5boost6detail16thread_data_baseE_ZN5boost6detail23get_current_thread_dataEv_ZN5boost6detail16thread_data_baseD2Ev_ZN5boost6thread6detachEv_ZN5boost6system15system_categoryEv_Jv_RegisterClasses_ZN5boost10filesystem6detail16create_directoryERKNS0_4pathEPNS_6system10error_codeE_ZN5boost6thread13join_noexceptEv_ZN5boost10filesystem6detail6statusERKNS0_4pathEPNS_6system10error_codeE_ZN5boost6system16generic_categoryEv_ZN5boost6thread21start_thread_noexceptEv_ZTVN5boost6detail16thread_data_baseE_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTable_ZTSN5boost16thread_exceptionE_ZTSN5boost15condition_errorE_ZTSN5boost16exception_detail19error_info_injectorINS_10lock_errorEEE_ZN5boost6system12system_errorC1ERKS1__ZTSN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEE_ZTIN5boost16exception_detail19error_info_injectorINS_15condition_errorEEE_ZTIN2gr5blockE_ZN5boost21thread_resource_errorD0Ev_ZTVN5boost6system12system_errorE_ZNK5boost6system12system_error4whatEv_ZTVN5boost16exception_detail10clone_baseE_ZN2gr14make_top_blockERKSs_ZN5boost21thread_resource_errorD1Ev_ZN5boost16thread_exceptionC1EiPKc_ZN5boost21thread_resource_errorD2Ev_ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEED0Ev_ZTIN5boost16thread_exceptionE_ZTIN5boost15condition_errorE_ZTSN5boost18thread_interruptedE_ZN5boost6system12system_errorC2ERKS1__ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEED1Ev_ZN5boost16thread_exceptionD0Ev_ZN2gr11hier_block27connectEN5boost10shared_ptrINS_11basic_blockEEEiS4_i_ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEED2Ev_ZN5boost16thread_exceptionD1Ev_ZTIN5boost9exceptionE_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED0Ev_ZN5boost16thread_exceptionD2Ev_ZTIN5boost16exception_detail10clone_baseE_ZTVN5boost16exception_detail19error_info_injectorINS_10lock_errorEEE_ZThn40_N5boost16exception_detail19error_info_injectorINS_15condition_errorEED0Ev_ZTIN2gr10sync_blockE_ZTIN5boost6system12system_errorE_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_15condition_errorEED1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED0Ev_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED2Ev_ZTIN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEE_ZN5boost10lock_errorD0Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED1Ev_ZTSN5boost6system12system_errorE_ZN5boost10lock_errorD1Ev_ZN5boost15condition_errorD0Ev_ZTIN5boost21thread_resource_errorE_ZN5boost6system12system_errorD0Ev_ZN5boost10lock_errorD2Ev_ZN5boost15condition_errorD1Ev_ZTSN5boost9exceptionE_ZTVN5boost15condition_errorE_ZTIN5boost16exception_detail19error_info_injectorINS_10lock_errorEEE_ZN5boost6detail16thread_data_base25notify_all_at_thread_exitEPNS_18condition_variableEPNS_5mutexE_ZN5boost6system12system_errorD1Ev_ZTSN5boost10lock_errorE_ZN5boost15condition_errorD2Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_10lock_errorEED0Ev_ZN5boost6system12system_errorD2Ev_ZTVN5boost10lock_errorE_ZThn40_N5boost16exception_detail19error_info_injectorINS_10lock_errorEED1Ev_ZN5boost16thread_exceptionC2EiPKc_ZTSN5boost21thread_resource_errorE_ZTVN5boost9exceptionE_ZTIN5boost18thread_interruptedE_ZTVN5boost16exception_detail19error_info_injectorINS_15condition_errorEEE_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED0Ev_ZTSN5boost16exception_detail19error_info_injectorINS_15condition_errorEEE_ZN2gr9msg_queue4makeEj_ZTIN5boost10lock_errorE_ZTVN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEE_ZTVN5boost21thread_resource_errorE_ZTVN5boost16thread_exceptionE_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED1Ev_ZTSN5boost16exception_detail10clone_baseE_ZN2gr9top_block3runEi_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED2Evlibgnuradio-blocks.so.3.7.5_ZN5boost6threadC1Ev_ZTSN2gr6blocks11file_sourceE_ZN2gr6blocks11file_source4makeEmPKcb_ZTIN2gr6blocks11file_sourceE_ZN2gr6blocks8skiphead4makeEmm_ZN2gr6blocks4head4makeEmm_ZN2gr6blocks9file_sink4makeEmPKcblibboost_date_time.so.1.55.0libboost_system.so.1.55.0libboost_filesystem.so.1.55.0libboost_thread.so.1.55.0libboost_serialization.so.1.55.0libboost_chrono.so.1.55.0libpthread.so.0pthread_cond_initpthread_mutex_destroypthread_self__pthread_key_createpthread_mutex_initpthread_cond_waitpthread_cond_destroypthread_mutex_lockpthread_cond_signalpthread_mutex_unlocklibgflags.so.2_ZN6google24ShutDownCommandLineFlagsEv_ZN6google15SetUsageMessageERKSs_ZN6google21ParseCommandLineFlagsEPiPPPcb_ZN6google14FlagRegistererC1EPKcS2_S2_S2_PvS3__ZN6google16SetVersionStringERKSslibglog.so.0_Unwind_Resume_ZN6google10LogMessage6streamEv_ZN6google10LogMessageC1EPKci_ZN6google17InitGoogleLoggingEPKc_ZN6google10LogMessageD1Ev_ZN3fLS13FLAGS_log_dirElibarmadillo.so.4_ZN6google10LogMessageC1EPKcii_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZN2gr6blocks4copy4makeEm_ZNKSt5ctypeIcE8do_widenEc_ZN2gr11hier_block210disconnectEN5boost10shared_ptrINS_11basic_blockEEEiS4_i_ZN2gr6blocks8throttle4makeEmdb_ZN6google15LogMessageFatalC1EPKci_ZN6google15LogMessageFatalD1Ev_ZNKSt5ctypeIcE9do_narrowEcc_ZSt4fillSt13_Bit_iteratorS_RKb_ZNSt6vectorIbSaIbEE14_M_fill_insertESt13_Bit_iteratormb_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPN5boost2io6detail11format_itemIcSt11char_traitsIcESaIcEEEmS9_EEvT_T0_RKT1__ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN5boost2io6detail11format_itemIcSt11char_traitsIcESaIcEEESA_EET0_T_SC_SB__ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZN2gr6blocks28interleaved_short_to_complex4makeEbb_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN2gr6blocks16float_to_complex4makeEm_ZN2gr6blocks14float_to_short4makeEmf_ZN2gr6blocks13float_to_char4makeEmf_ZN2gr6blocks16complex_to_float4makeEm_ZN2gr6blocks13char_to_short4makeEm_ZN2gr6blocks16stream_to_vector4makeEmm_ZN2gr11basic_block9setup_rpcEv_ZN2gr11basic_block14check_topologyEii_ZN3pmt3eqvERKN5boost13intrusive_ptrINS_8pmt_baseEEES5__ZN2gr11basic_block12has_msg_portEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN3pmt12dict_has_keyERKN5boost13intrusive_ptrINS_8pmt_baseEEES5__ZN2gr5block18processor_affinityEv_ZN2gr11basic_block23message_port_is_hier_inEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN2gr11basic_block24message_port_is_hier_outEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN2gr11basic_block20message_port_is_hierEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN2gr5blockD2Ev_ZN2gr12io_signature4makeEiii_ZN2gr5blockC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6_volk_get_alignmentvolk_32fc_conjugate_32fc_ZN2gr11basic_block15has_msg_handlerEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN3pmt21intrusive_ptr_add_refEPNS_8pmt_baseE_ZN3pmt21intrusive_ptr_releaseEPNS_8pmt_baseE_ZN2gr11basic_block12dispatch_msgEN5boost13intrusive_ptrIN3pmt8pmt_baseEEES5__ZN2gr5block12consume_eachEivolk_32fc_magnitude_squared_32fvolk_32fc_x2_multiply_32fc_ZN2gr12msg_accepter4postEN5boost13intrusive_ptrIN3pmt8pmt_baseEEES5__ZN2gr5block22set_processor_affinityERKSt6vectorIiSaIiEE_ZN2gr5block24unset_processor_affinityEv_ZN2gr5block8forecastEiRSt6vectorIiSaIiEE_ZN2gr5block5startEv_ZN2gr5block4stopEv_ZN2gr5block28fixed_rate_ninput_to_noutputEi_ZN2gr5block28fixed_rate_noutput_to_ninputEivolk_32f_x2_add_32fvolk_32f_s32f_multiply_32fvolk_32fc_s32fc_multiply_32fc_ZN2gr4fxpt2PIE_ZN2gr4fxpt13TWO_TO_THE_31E_ZN2gr4fxpt12s_sine_tableE_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE24_M_get_insert_unique_posERS1__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZNSt3mapISsSsSt4lessISsESaISt4pairIKSsSsEEEixERS3__ZN2gr5block17set_relative_rateEd_ZN2gr7message4makeElddm_ZTVN2gr10sync_blockE_ZN2gr9msg_queue6handleEN5boost10shared_ptrINS_7messageEEE_ZN2gr9msg_queue11insert_tailEN5boost10shared_ptrINS_7messageEEE_ZNK2gr12io_signature18sizeof_stream_itemEi_ZN2gr10sync_blockC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6__ZN2gr10sync_block8forecastEiRSt6vectorIiSaIiEE_ZN2gr10sync_block12general_workEiRSt6vectorIiSaIiEERS1_IPKvSaIS6_EERS1_IPvSaISA_EE_ZN2gr10sync_block28fixed_rate_ninput_to_noutputEi_ZN2gr10sync_block28fixed_rate_noutput_to_ninputEi_ZN2gr5block13set_alignmentEi_ZN2gr14sync_decimatorC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6_j_ZTIN2gr14sync_decimatorE_ZN2gr14sync_decimator8forecastEiRSt6vectorIiSaIiEE_ZN2gr14sync_decimator12general_workEiRSt6vectorIiSaIiEERS1_IPKvSaIS6_EERS1_IPvSaISA_EE_ZN2gr14sync_decimator28fixed_rate_ninput_to_noutputEi_ZN2gr14sync_decimator28fixed_rate_noutput_to_ninputEi_ZNK2gr5block7historyEv_ZN2gr5block19set_output_multipleEi_ZN5boost6chrono12steady_clock3nowEv_ZN5boost6chrono12system_clock3nowEv_ZN5boost6thread26do_try_join_until_noexceptERK8timespecRb_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE7_M_copyEPKSt13_Rb_tree_nodeIS2_EPSA__ZNSt6vectorIiSaIiEEC2ERKS1__ZNSt6vectorIiSaIiEEC1ERKS1__ZNSt6vectorIiSaIiEEaSERKS1__ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev_ZNSt6vectorIS_IiSaIiEESaIS1_EED1Ev_ZN6google21kLogSiteUninitializedE_ZN3fLI7FLAGS_vE_ZN6google11InitVLOG3__EPPiS0_PKci_ZNSt6vectorIhSaIhEEC2ERKS1__ZNSt6vectorIhSaIhEEC1ERKS1__ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEEC2ERKS3__ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEEC1ERKS3__ZNSt11logic_errorC2ERKS__ZNSt11logic_errorC1ERKS__ZNSt6vectorIhSaIhEEaSERKS1__ZNK5boost9gregorian10greg_month15as_short_stringEvwrapper_dgetrf_wrapper_dgetri_wrapper_dgemv_wrapper_dgemm_wrapper_dgels_wrapper_dgesv_wrapper_dsyrk__ZTVN5boost16exception_detail19error_info_injectorISt12out_of_rangeEE_ZN5boost16exception_detail19error_info_injectorISt13runtime_errorED0Ev_ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE_ZThn16_N5boost16exception_detail19error_info_injectorISt13runtime_errorED0Ev_ZN5boost16exception_detail19error_info_injectorISt12out_of_rangeED0Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12out_of_rangeED0Ev_ZN5boost16exception_detail19error_info_injectorISt12out_of_rangeED2Ev_ZN5boost16exception_detail19error_info_injectorISt12out_of_rangeED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12out_of_rangeED1Ev_ZN5boost16exception_detail19error_info_injectorISt13runtime_errorED2Ev_ZN5boost16exception_detail19error_info_injectorISt13runtime_errorED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt13runtime_errorED1Ev_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZNSt6vectorISsSaISsEE9push_backERKSs_ZNSt16invalid_argumentD1Ev_ZTIN5boost16exception_detail19error_info_injectorISt13runtime_errorEE_ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE_ZTIN5boost16exception_detail19error_info_injectorISt12out_of_rangeEE_ZTSN5boost16exception_detail19error_info_injectorISt12out_of_rangeEE_ZTISt16invalid_argumentfcntl_ZN2gr6blocks9null_sink4makeEm_ZN5boost7archive6detail17shared_ptr_helperD2Ev_ZN5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEED2Ev_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_13tracking_typeEi_ZN5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEE13load_overrideERNS0_15class_name_typeEi_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_13class_id_typeEi_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_14object_id_typeEi_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_12version_typeEi_ZN5boost7archive6detail17basic_iserializerD2Ev_ZNK5boost13serialization18extended_type_info14key_unregisterEv_ZN5boost13serialization13typeid_system27extended_type_info_typeid_015type_unregisterEv_ZN5boost13serialization13typeid_system27extended_type_info_typeid_0D2Ev_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEED2Ev_ZN5boost7archive21basic_text_oprimitiveISoED2Ev_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_13tracking_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_15class_name_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_23class_id_reference_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_22class_id_optional_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_13class_id_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_21object_reference_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_14object_id_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_12version_typeEi_ZN5boost7archive6detail17basic_oserializerD2Ev_ZN5boost7archive6detail17basic_oserializerC2ERKNS_13serialization18extended_type_infoE_ZN5boost13serialization13typeid_system27extended_type_info_typeid_0C2EPKc_ZN5boost13serialization13typeid_system27extended_type_info_typeid_013type_registerERKSt9type_info_ZNK5boost13serialization18extended_type_info12key_registerEv_ZN5boost7archive17xml_oarchive_implINS0_12xml_oarchiveEEC2ERSoj_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE10save_startEPKc_ZN5boost7archive6detail14basic_oarchive11save_objectEPKvRKNS1_17basic_oserializerE_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE8save_endEPKc_ZN5boost7archive6detail17basic_iserializerC2ERKNS_13serialization18extended_type_infoE_ZN5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEEC2ERSij_ZN5boost7archive6detail17shared_ptr_helperC2Ev_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE10load_startEPKc_ZN5boost7archive6detail14basic_iarchive11load_objectEPvRKNS1_17basic_iserializerE_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE8load_endEPKc_ZTVN5boost7archive17archive_exceptionE_ZTIN5boost7archive17archive_exceptionE_ZN5boost7archive17archive_exceptionD1Ev_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE12end_preambleEv_ZN5boost7archive17archive_exceptionC1ENS1_14exception_codeEPKcS4__ZTIN5boost7archive6detail14basic_iarchiveE_ZTIN5boost7archive6detail14basic_oarchiveE_ZNK5boost7archive6detail14basic_iarchive19get_library_versionEv_ZN5boost7archive6detail14basic_iarchive20reset_object_addressEPKvS4__ZTIN5boost7archive6detail17basic_oserializerE_ZTIN5boost7archive6detail17basic_iserializerE_ZTIN5boost13serialization13typeid_system27extended_type_info_typeid_0E_ZNK5boost13serialization13typeid_system27extended_type_info_typeid_012is_less_thanERKNS0_18extended_type_infoE_ZNK5boost13serialization13typeid_system27extended_type_info_typeid_08is_equalERKNS0_18extended_type_infoE__errno_locationlibgnutls-deb0.so.28libgnutls-openssl.so.27SSL_freeSSL_newSSL_CTX_freeSSLv23_client_methodSSL_set_fdSSL_load_error_stringsSSL_writeSSL_shutdownSSL_readSSL_library_initSSL_CTX_newSSL_connect_ZN2gr17sync_interpolatorC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6_j_ZTIN2gr17sync_interpolatorE_ZN2gr17sync_interpolator8forecastEiRSt6vectorIiSaIiEE_ZN2gr17sync_interpolator12general_workEiRSt6vectorIiSaIiEERS1_IPKvSaIS6_EERS1_IPvSaISA_EE_ZN2gr17sync_interpolator28fixed_rate_ninput_to_noutputEi_ZN2gr17sync_interpolator28fixed_rate_noutput_to_ninputEirecvmsg_ZN5boost15condition_errorC2EiPKc_ZN5boost15condition_errorC1EiPKc_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEC2ERKS3__ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEC1ERKS3__ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEEC2ERKS3__ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEEC1ERKS3__ZN5boost16exception_detail19error_info_injectorINS_6system12system_errorEED2Ev_ZTVN5boost16exception_detail19error_info_injectorINS_6system12system_errorEEE_ZN5boost16exception_detail19error_info_injectorINS_6system12system_errorEED1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_6system12system_errorEED1Ev_ZN5boost16exception_detail19error_info_injectorINS_6system12system_errorEED0Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_6system12system_errorEED0Ev_ZN8gnuradio6detail10sptr_magic18fetch_initial_sptrEPN2gr11basic_blockE_ZTIN2gr11basic_blockE_ZTIN5boost16exception_detail19error_info_injectorINS_6system12system_errorEEE_ZTSN5boost16exception_detail19error_info_injectorINS_6system12system_errorEEEsendmsglibgnuradio-pmt.so.3.7.5_ZThn24_N5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED0Ev_ZNK5boost16bad_lexical_cast4whatEv_ZN5boost16bad_lexical_castD1Ev_ZThn24_N5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED1Ev_ZN5boost16bad_lexical_castD2Ev_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED0Ev_ZTISs_ZTSN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED1Ev_ZTIN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZTSN5boost16bad_lexical_castE_ZTIN5boost16bad_lexical_castE_ZTVN5boost16bad_lexical_castE_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED2Ev_ZTSSs_ZTVN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZN5boost16bad_lexical_castD0Evlibgnuradio-osmosdr.so.0.1.3_ZN2gr3uhd11usrp_source4makeERKN3uhd13device_addr_tERKNS2_13stream_args_tE_ZN3uhd13device_addr_tC1ERKSs_ZN3uhd13stream_args_tD1Ev_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE24_M_get_insert_unique_posERS1__ZN7osmosdr6source4makeERKSs_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNSt4pairISsSsED2Ev_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZN3uhd13stream_args_tD2Ev_ZNSt10_List_baseISt4pairISsSsESaIS1_EE8_M_clearEv_ZNSt4pairISsSsED1Evlibuhd.so.003_ZN5boost16exception_detail19error_info_injectorISt8bad_castED1Ev_ZN5boost16exception_detail19error_info_injectorISt8bad_castED2Ev_ZNSt11_Deque_baseIiSaIiEED1Ev_ZTSN5boost16exception_detail19error_info_injectorISt8bad_castEE_ZNSt6vectorIdSaIdEEC1ERKS1__ZTIN5boost16exception_detail19error_info_injectorISt12length_errorEE_ZTVN5boost16exception_detail19error_info_injectorISt8bad_castEE_ZNSt11_Deque_baseIiSaIiEED2Ev_ZN5boost16exception_detail19error_info_injectorISt12length_errorED0Ev_ZN3uhd14tune_request_tC1Ed_ZN5boost16exception_detail19error_info_injectorISt12length_errorED1Ev_ZThn8_N5boost16exception_detail19error_info_injectorISt8bad_castED0Ev_ZN5boost16exception_detail19error_info_injectorISt12length_errorED2Ev_ZThn8_N5boost16exception_detail19error_info_injectorISt8bad_castED1Ev_ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEm_ZTSN5boost16exception_detail19error_info_injectorISt12length_errorEE_ZNK3uhd14sensor_value_t12to_pp_stringEv_ZNSt6vectorIdSaIdEEC2ERKS1__ZTIN5boost16exception_detail19error_info_injectorISt8bad_castEE_ZNSt11_Deque_baseIdSaIdEED1Ev_ZNSt11_Deque_baseIdSaIdEED2Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12length_errorED0Ev_ZNK3uhd14sensor_value_t7to_boolEv_ZThn16_N5boost16exception_detail19error_info_injectorISt12length_errorED1Ev_ZN5boost16exception_detail19error_info_injectorISt8bad_castED0Ev_ZTVN5boost16exception_detail19error_info_injectorISt12length_errorEElibgnuradio-uhd.so.3.7.5libgnuradio-filter.so.3.7.5volk_mallocvolk_free_ZN2gr3fft11fft_complexC1Eibi_ZN2gr3fft11fft_complex7executeEv_ZN2gr6filter8pm_remezEiRKSt6vectorIdSaIdEES5_S5_Ssi_ZN2gr6filter27freq_xlating_fir_filter_ccf4makeEiRKSt6vectorIfSaIfEEdd_ZN2gr6filter27freq_xlating_fir_filter_scf4makeEiRKSt6vectorIfSaIfEEdd_ZN2gr6filter14fir_filter_fff4makeEiRKSt6vectorIfSaIfEE_ZN2gr6filter27freq_xlating_fir_filter_fcf4makeEiRKSt6vectorIfSaIfEEdd_ZN2gr6filter14fir_filter_ccf4makeEiRKSt6vectorIfSaIfEElibgnuradio-fft.so.3.7.5_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tagacceptlibvolk.so.0.0.0cabsfsqrtfsincosfvolk_32f_accumulator_s32fvolk_32fc_x2_dot_prod_32fcvolk_32f_index_max_16uvolk_32f_index_max_16u_avolk_16ic_s32f_deinterleave_32f_x2volk_8ic_s32f_deinterleave_32f_x2rintflibstdc++.so.6__cxa_free_exception_ZNSs4_Rep10_M_destroyERKSaIcE_ZNKSs5rfindEPKcmm_ZNKSt13bad_exception4whatEv__cxa_pure_virtual_Znam_ZTISo_ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev_ZTVSt13basic_fstreamIcSt11char_traitsIcEE_ZNSo9_M_insertIlEERSoT__ZTTSt14basic_ofstreamIcSt11char_traitsIcEE_ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6__ZTINSt8ios_base7failureE_ZNKSt5ctypeIcE13_M_widen_initEv_ZNSt12length_errorC1ERKSs_ZNSsC1EPKcmRKSaIcE_ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale_ZNSo9_M_insertImEERSoT__ZSt17__throw_bad_allocv_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc_ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale_ZNSt16invalid_argumentC1ERKSs_ZTVSt12out_of_range_ZTISt14overflow_error_ZNSo5flushEv_ZSt16__throw_bad_castv__cxa_guard_acquire_ZdaPv_ZNKSt12__basic_fileIcE7is_openEv_ZNSt8bad_castD1Ev__cxa_get_exception_ptr_ZNSt13runtime_errorD1Ev_ZTVSt14overflow_error_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l_ZNKSs4findEPKcm_ZTISt12domain_error_ZNSt12out_of_rangeC1ERKSs_ZNSt13bad_exceptionD2Ev_ZNSt8bad_castD2Ev_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS___cxa_throw_ZNSsD1Ev_ZTVSt14basic_ifstreamIcSt11char_traitsIcEE_ZNSt13runtime_errorD2Ev_ZNSt12out_of_rangeC2ERKSs_ZTISt15basic_streambufIcSt11char_traitsIcEE_ZSt19__throw_logic_errorPKc_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode_ZNSo5writeEPKcl__cxa_rethrow_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEc_ZSt9terminatev_ZNSsC1ERKSsmm_ZNSs2atEm_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1__ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE_ZTId_ZTIi_ZNSt8__detail15_List_node_base7_M_hookEPS0__ZTIl_ZNSs14_M_replace_auxEmmmc_ZNSo9_M_insertIPKvEERSoT__ZNSt8ios_base4InitD1Ev_ZTIt_ZNSs6appendEPKc_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZNSt6localeD1Ev_ZNSs6appendEmc_ZNSt13runtime_errorC1ERKSs_ZNSsC1EPKcRKSaIcE_ZNKSs7compareEPKc_ZNSi10_M_extractIbEERSiRT__ZNSt6localeC1ERKS__ZTVSt16invalid_argument_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev_ZTVSt9exception_ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode_ZNSsC1EmcRKSaIcE_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale_ZTISt11logic_error_ZNSdD2Ev_ZNSt13runtime_errorC2ERKSs_ZNSt12domain_errorC1ERKSs_ZNSt8ios_baseC2Ev_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate__cxa_throw_bad_array_new_length_ZNSt9bad_allocD1Ev_ZNSs7replaceEmmPKcm_ZNSo9_M_insertIyEERSoT__ZNSs6insertEmPKcm_ZNSs6assignEPKc_ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv_ZSt3cin_ZTTSt13basic_fstreamIcSt11char_traitsIcEE__cxa_call_unexpected_ZSt20__throw_out_of_rangePKc_ZNKSs4findEcm_ZNSt8__detail15_List_node_base9_M_unhookEv_ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv_ZNSi10_M_extractIdEERSiRT__ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev_ZTVSt12domain_error_ZNSt9bad_allocD2Ev_ZNKSt8ios_base7failure4whatEv_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode_ZTIPKc_ZNSirsERi_ZNSt16invalid_argumentD2Ev_ZTISt12length_error_ZNSs6assignEPKcm_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strERKSs_ZTVN10__cxxabiv117__class_type_infoE_ZNKSs6substrEmm_ZSt24__throw_out_of_range_fmtPKcz_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode_ZTISt9exception_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev_ZTISt13runtime_error_ZNSt9exceptionD1Ev_ZNSt14overflow_errorC1ERKSs_ZNSs6insertEmPKc_ZNKSs7compareERKSs_ZNSi10_M_extractIfEERSiRT__ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base_ZNSt12length_errorD1Ev_ZNSs3endEv_ZNKSs4findEPKcmm__cxa_begin_catch_ZTTSt14basic_ifstreamIcSt11char_traitsIcEE_ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv_ZNSs4_Rep20_S_empty_rep_storageE_ZNSt13basic_filebufIcSt11char_traitsIcEEC1Ev_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv__gxx_personality_v0_ZNKSt9bad_alloc4whatEv_ZNSo5seekpElSt12_Ios_Seekdir_ZNSt9exceptionD2Ev_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4__ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSs12_M_leak_hardEv_ZNSt12length_errorD2Ev_ZNSt12domain_errorD1Ev_ZNSs6appendEPKcm_ZTVSt9bad_alloc_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKcl_ZSt24__throw_invalid_argumentPKc_ZNKSt11logic_error4whatEv_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev__cxa_bad_typeid_ZNSt14overflow_errorD1Ev_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv_ZNSs4swapERSs_ZTVNSt8ios_base7failureE_ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPcl_ZTVSt14basic_ofstreamIcSt11char_traitsIcEE_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZSt4cout_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPcl_ZNSolsEi_ZNKSs4copyEPcmm_ZNSt12domain_errorD2Ev_ZNSolsEs_Znwm_ZTISt12out_of_range_ZTVSt8bad_cast_ZNSo9_M_insertIbEERSoT__ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode_ZTVN10__cxxabiv121__vmi_class_type_infoE_ZNSt14overflow_errorD2Ev_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev_ZNSi10_M_extractIjEERSiRT__ZNSs9_M_mutateEmmm_ZNSs4_Rep9_S_createEmmRKSaIcE_ZNSt11logic_errorD1Ev_ZTVSt12length_error_ZNSt6locale7classicEv_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6__ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev_ZNSt11logic_errorC1ERKSs_ZNSt8__detail15_List_node_base4swapERS0_S1__ZTISt9bad_alloc_ZNSo9_M_insertIdEERSoT__ZNSt8ios_base7failureD1Ev_ZNSt8ios_baseD2Ev_ZNSs6assignERKSs__cxa_bad_cast__cxa_allocate_exception_ZNKSt6localeeqERKS__ZNSi10_M_extractImEERSiRT__ZNKSt8bad_cast4whatEv_ZNSo3putEc_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE__cxa_end_catch__cxa_guard_release_ZTVSt13runtime_error__cxa_guard_abort_ZNSi10_M_extractIlEERSiRT__ZTISt8bad_cast_ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv_ZNSt6localeaSERKS__ZNSolsEPSt15basic_streambufIcSt11char_traitsIcEE_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZSt4cerr_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode_ZNSo5tellpEv_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev_ZNSt12out_of_rangeD1Ev_ZNSt15basic_streambufIcSt11char_traitsIcEE5imbueERKSt6locale_ZNKSt13runtime_error4whatEv_ZTVN10__cxxabiv120__si_class_type_infoE_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode_ZNSs6resizeEmc_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZTVSt11logic_error_ZNSsC1ERKSs_ZNSs7reserveEm_ZSt20__throw_length_errorPKc_ZNSi5tellgEv_ZNSt8ios_base4InitC1Ev_ZTVSt13basic_filebufIcSt11char_traitsIcEE_ZTISt13bad_exception_ZNSt6localeC1Ev_ZNSs6appendERKSs_ZNSt12__basic_fileIcED1Ev_ZNSo5seekpESt4fposI11__mbstate_tE_ZNSt12out_of_rangeD2Ev_ZdlPv_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZNKSs7compareEmmPKc__dynamic_castlibm.so.6fmodtruncatan2log10roundflog1pasinatanceilsincosfloorsqrtceilfpowlog2roundlibgcc_s.so.1__popcountdi2__mulsc3libc.so.6epoll_createsocketfflushstrcpygmtime_r__printf_chkfopenstrncmptimerfd_createposix_memalignisalphapipe__isoc99_sscanfepoll_waitinet_ntopstrncpy__vsprintf_chk__stack_chk_faillistenreallocmemchrtolowerinet_pton__assert_faillocaltime_risspacestrtodgmtimestrtolfgetscallocstrlen__cxa_atexitgetaddrinfomemsettcsetattrbindmemcmpasctimeeventfdgetsockoptgetlogin_rpoll__fprintf_chkstdoutfputcmemcpyfclose__vsnprintf_chksetsockopttimegmremove__ctype_b_locgetenvstderrioctltimerfd_settime__snprintf_chkif_nametoindexif_indextonamefwritegettimeofdayepoll_ctl__memcpy_chklocaltimedifftimestrchrepoll_create1__vfprintf_chkmktimeqsorttcgetattr__sprintf_chkmemmove__strcat_chkstrcmpstrerror__libc_start_mainispunct_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE24_M_get_insert_unique_posERKSs_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISsERKSs_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7__ZTVN5boost16exception_detail19error_info_injectorISt16invalid_argumentEE_ZThn16_N5boost16exception_detail19error_info_injectorISt16invalid_argumentED0Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt16invalid_argumentED1Ev_ZN5boost16exception_detail19error_info_injectorISt14overflow_errorED0Ev_ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE7_M_copyEPKSt13_Rb_tree_nodeIS2_EPSA__ZThn16_N5boost16exception_detail19error_info_injectorISt14overflow_errorED0Ev_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentED0Ev_ZN5boost16exception_detail19error_info_injectorISt14overflow_errorED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt14overflow_errorED1Ev_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentED1Ev_ZN5boost16exception_detail19error_info_injectorISt14overflow_errorED2Ev_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentED2Ev_ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE24_M_get_insert_unique_posERS1__ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZTIN5boost16exception_detail19error_info_injectorISt16invalid_argumentEE_ZTSN5boost16exception_detail19error_info_injectorISt16invalid_argumentEE_ZTVN5boost16exception_detail19error_info_injectorISt14overflow_errorEE_ZTSN5boost16exception_detail19error_info_injectorISt14overflow_errorEE_ZTIN5boost16exception_detail19error_info_injectorISt14overflow_errorEE_edata__bss_start_endvolk_gnsssdr_8ic_conjugate_8ic_get_func_descvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE19_M_emplace_back_auxIIS3_EEEvDpOT__ZNSt11_Deque_baseIdSaIdEEC1Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_ZN5boost16exception_detail19error_info_injectorISt12domain_errorED2Evvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_avolk_gnsssdr_64f_accumulator_64f_avolk_gnsssdr_8u_x2_multiply_8u_manualvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_get_func_desc_ZN3uhd13stream_args_taSEOS0_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EE19_M_emplace_back_auxIIS3_EEEvDpOT__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEixEOi__libc_csu_fini_ZNSt6vectorIdSaIdEEC2ESt16initializer_listIdERKS0__ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EE19_M_emplace_back_auxIJS3_EEEvDpOT_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fcvolk_gnsssdr_32fc_s32f_convert_8ic_a_ZN5boost6threadC2INS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS2_5list1INS2_5valueIPS7_EEEEEEEEOT__ZNSt6vectorIbSaIbEE9push_backEbvolk_gnsssdr_32fc_convert_8ic_manualvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_avolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_Evolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3volk_gnsssdr_8i_x2_add_8i_manualvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_avolk_gnsssdr_8i_max_s8i_manual_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv_ZNSt6vectorISt4pairIiiESaIS1_EED2Evvolk_gnsssdr_8i_x2_add_8i_u__data_startvolk_gnsssdr_8ic_s8ic_multiply_8ic_avolk_gnsssdr_8i_max_s8i_get_func_descvolk_gnsssdr_8i_index_max_16u_avolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_get_func_descvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_ZStlsIcSt11char_traitsIcELm32EERSt13basic_ostreamIT_T0_ES6_RKSt6bitsetIXT1_EEvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_avolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_manual_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentEC1ERKS3_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_manualvolk_gnsssdr_8ic_s8ic_multiply_8ic_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE24_M_get_insert_unique_posERS1_volk_gnsssdr_get_machine_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOSsEESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT__ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEvvolk_gnsssdr_8ic_s8ic_multiply_8ic_manual_ZN5boost16exception_detail19error_info_injectorISt12domain_errorED0Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_uvolk_gnsssdr_8ic_x2_dot_prod_8ic_uvolk_gnsssdr_8i_max_s8i_avolk_gnsssdr_32fc_convert_16ic_u_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE15_M_add_ref_copyEvvolk_gnsssdr_32fc_convert_8ic_u_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE19_M_emplace_back_auxIJS3_EEEvDpOT_volk_gnsssdr_8ic_x2_dot_prod_8ic_get_func_descvolk_gnsssdr_8ic_conjugate_8icvolk_gnsssdr_8ic_magnitude_squared_8i_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_ZTIN5boost16exception_detail19error_info_injectorISt12domain_errorEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_manual_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIISsEEEvDpOT__ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E_ZNSt6vectorIlSaIlEE12emplace_backIIlEEEvDpOT__ZTVN5boost16exception_detail19error_info_injectorISt12domain_errorEE_ZNSt5dequeIdSaIdEE15_M_pop_back_auxEv_ZNSt6vectorISt4pairIiiESaIS1_EEC1ESt16initializer_listIS1_ERKS2__ZNSt6vectorIiSaIiEEC2ESt16initializer_listIiERKS0_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_uvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_manual_ZTISt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIIdEEEvDpOT_volk_gnsssdr_8i_index_max_16u_ZN5boost16exception_detail19error_info_injectorISt12domain_errorED1Evvolk_gnsssdr_32fc_s32f_convert_8ic_uvolk_gnsssdr_8i_accumulator_s8i_avolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_manualvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_uvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EED1Evvolk_gnsssdr_8ic_x2_multiply_8ic_get_func_desc_ZNSt6vectorIhSaIhEE17_M_default_appendEm_ZNSt6vectorIdSaIdEE13_M_assign_auxIPKdEEvT_S5_St20forward_iterator_tag_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIJRKSsEEEvDpOT__ZNSt6vectorISsSaISsEE12emplace_backIJSsEEEvDpOT__ZNSt6vectorIiSaIiEEC1ESt16initializer_listIiERKS0_volk_gnsssdr_8ic_conjugate_8ic_avolk_gnsssdr_8ic_x2_multiply_8icvolk_gnsssdr_32fc_s32f_convert_8ic_get_func_desc_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIIRKSt21piecewise_construct_tSt5tupleIIOSsEESD_IIEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE14_M_create_nodeIIRKS2_EEEPSt13_Rb_tree_nodeIS2_EDpOT_volk_gnsssdr_64f_accumulator_64f_get_func_desc_ZNSt5dequeIiSaIiEE16_M_push_back_auxIIRKiEEEvDpOT_volk_gnsssdr_load_preferences_ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EED1Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_manual_ZNSt4pairISsSsEC1IRA3_KcRA2_S2_vEEOT_OT0_volk_gnsssdr_64f_accumulator_64f_manual_ZNKSt3mapIiSsSt4lessIiESaISt4pairIKiSsEEE2atERS3__ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ESt16initializer_listIS1_ERKS2_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_manual_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIJSsEEEvDpOT__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE14_M_create_nodeIJRKS2_EEEPSt13_Rb_tree_nodeIS2_EDpOT_volk_gnsssdr_get_alignment_ZNSt5dequeIdSaIdEE2atEm_ZNSt6vectorIlSaIlEE19_M_emplace_back_auxIJlEEEvDpOT_volk_gnsssdr_8ic_s8ic_multiply_8ic_get_func_descvolk_gnsssdr_8ic_x2_dot_prod_8ic_avolk_gnsssdr_8ic_conjugate_8ic_manual_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIIRKdEEEvDpOT_volk_gnsssdr_s32f_x2_update_local_carrier_32fcvolk_gnsssdr_32fc_convert_16ic_avolk_gnsssdr_8i_max_s8i_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_32fc_convert_8ic_a_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_IRKSsEESt17_Rb_tree_iteratorISsEPSt18_Rb_tree_node_baseSC_OT__ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EED2Ev_ZNSt6vectorISt4pairIiiESaIS1_EEC2ESt16initializer_listIS1_ERKS2_volk_gnsssdr_32fc_s32f_convert_8ic_manualvolk_gnsssdr_8ic_magnitude_squared_8i_a_ZNSt12__shared_ptrI17FileConfigurationLN9__gnu_cxx12_Lock_policyE2EEC2ISaIS0_EJRSsEEESt19_Sp_make_shared_tagRKT_DpOT0_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_manual_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIIRKSsEEEvDpOT_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_manual__libc_csu_initvolk_gnsssdr_is_alignedvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_ZNSt6vectorISt4pairIiiESaIS1_EED1Ev_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIJdEEEvDpOT_volk_gnsssdr_32fc_convert_8ic_get_func_descvolk_gnsssdr_8ic_x2_dot_prod_8ic_manual_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE12emplace_backIIS3_EEEvDpOT__ZNSt6vectorIhSaIhEE9push_backERKhvolk_gnsssdr_8ic_x2_dot_prod_8ic_ZN3uhd13stream_args_tC2ERKSsS2__ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentEC2ERKS3__ZNSt11_Deque_baseIdSaIdEEC2Evvolk_gnsssdr_8ic_x2_multiply_8ic_avolk_gnsssdr_8i_accumulator_s8i_u_ZNSt6vectorImSaImEE19_M_emplace_back_auxIIRKmEEEvDpOT__ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZNSt6vectorIfSaIfEE19_M_emplace_back_auxIIfEEEvDpOT__ZNSt6vectorImSaImEE19_M_emplace_back_auxIJRKmEEEvDpOT__ZNSt6vectorIlSaIlEE12emplace_backIJlEEEvDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_manual_ZNSt6vectorISsSaISsEE12emplace_backIISsEEEvDpOT__ZTISt19_Sp_make_shared_tagvolk_gnsssdr_32fc_convert_16icvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_manualvolk_gnsssdr_8ic_conjugate_8ic_uvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_avolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_uvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_get_func_desc_ZThn16_N5boost16exception_detail19error_info_injectorISt12domain_errorED1Ev_ZTSSt19_Sp_make_shared_tagvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_64f_accumulator_64fvolk_gnsssdr_8u_x2_multiply_8u_u_ZTSSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EED2Evvolk_gnsssdr_8ic_magnitude_squared_8i_get_func_descvolk_gnsssdr_8ic_x2_multiply_8ic_manualvolk_gnsssdr_8i_max_s8ivolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_get_func_desc_ZNSt5dequeIdSaIdEE10push_frontERKdvolk_gnsssdr_8i_x2_add_8ivolk_gnsssdr_8u_x2_multiply_8uvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_get_func_descvolk_gnsssdr_32fc_convert_16ic_manualvolk_gnsssdr_8u_x2_multiply_8u_get_func_descvolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_get_func_descvolk_gnsssdr_8i_accumulator_s8ivolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_32fc_convert_8icvolk_gnsssdr_32fc_convert_16ic_get_func_descvolk_gnsssdr_64f_accumulator_64f_uvolk_gnsssdr_8i_index_max_16u_manualvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EOS6_S7__ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIIRKiEEEvDpOT__ZNSt4pairISsSsEC1IRA2_KcS4_vEEOT_OT0__ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIJRKdEEEvDpOT__ZNSt12__shared_ptrI17FileConfigurationLN9__gnu_cxx12_Lock_policyE2EEC1ISaIS0_EJRSsEEESt19_Sp_make_shared_tagRKT_DpOT0_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_get_func_desc_ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorIdSaIdEE12emplace_backIJdEEEvDpOT_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_avolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_ZTSN5boost16exception_detail19error_info_injectorISt12domain_errorEEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_ZNSt6vectorISt4pairIiiESaIS1_EEC1ERKS3__ZNSt6vectorIlSaIlEE19_M_emplace_back_auxIIlEEEvDpOT__ZNSt6vectorIdSaIdEEC1ESt16initializer_listIdERKS0__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE16_M_insert_uniqueIS0_ISsSsEEES0_ISt17_Rb_tree_iteratorIS2_EbEOT__ZThn16_N5boost16exception_detail19error_info_injectorISt12domain_errorED0Evvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_get_func_descvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_get_func_descvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE12emplace_backIJS3_EEEvDpOT_volk_gnsssdr_8ic_x2_multiply_8ic_u_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE16_M_insert_uniqueIS0_IidEEES0_ISt17_Rb_tree_iteratorIS2_EbEOT_volk_gnsssdr_32fc_s32f_convert_8icvolk_gnsssdr_8ic_magnitude_squared_8i_manualvolk_gnsssdr_8i_accumulator_s8i_get_func_descvolk_gnsssdr_8ic_s8ic_multiply_8ic_uvolk_gnsssdr_get_config_path_ZN5boost6threadC1INS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS2_5list1INS2_5valueIPS7_EEEEEEEEOT_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_manual_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIIRKSt21piecewise_construct_tSt5tupleIIRS1_EESD_IIEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT__ZNSt6vectorIfSaIfEE19_M_emplace_back_auxIJfEEEvDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_Evolk_gnsssdr_8i_x2_add_8i_a_ZNSt3mapISsSsSt4lessISsESaISt4pairIKSsSsEEEixEOSsvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_ZNSt6vectorImSaImEE19_M_emplace_back_auxIImEEEvDpOT_volk_gnsssdr_8i_accumulator_s8i_manualvolk_gnsssdr_8ic_magnitude_squared_8i_IO_stdin_usedvolk_gnsssdr_8i_index_max_16u_u_ZNSt6vectorIdSaIdEE12emplace_backIIdEEEvDpOT_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_ZNSt6vectorIS_IiSaIiEESaIS1_EEC1ESt16initializer_listIS1_ERKS2__ZN3uhd13stream_args_tC1ERKSsS2_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_manual_ZTSSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE4findERS1__ZNSt6vectorImSaImEE19_M_emplace_back_auxIJmEEEvDpOT_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3__ZNSt3mapIiSsSt4lessIiESaISt4pairIKiSsEEEixEOi_ZNSt5dequeIiSaIiEE16_M_push_back_auxIJRKiEEEvDpOT__ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIJRKiEEEvDpOT_volk_gnsssdr_list_machinesvolk_gnsssdr_8u_x2_multiply_8u_avolk_gnsssdr_8i_x2_add_8i_get_func_descvolk_gnsssdr_8i_index_max_16u_get_func_desc_ZNSt3mapIidSt4lessIiESaISt4pairIKidEEEixEOivolk_gnsssdr_s32f_x2_update_local_carrier_32fc_get_func_descGCC_3.4GCC_3.0GCC_4.0.0GLIBC_2.2.5GLIBC_2.3.2GLIBC_2.8GLIBC_2.9GLIBC_2.4GLIBC_2.3.4GLIBC_2.3GLIBC_2.7GLIBC_2.14GLIBCXX_3.4.13CXXABI_1.3.1CXXABI_1.3.8GLIBCXX_3.4.11GLIBCXX_3.4.9CXXABI_1.3GLIBCXX_3.4.20GLIBCXX_3.4.15GLIBCXX_3.4                                                                        n@T&y P&y `Z' n ui %0ri ui  oii ii ii (ti 2ii >ui ii HRri  Rc]qѯ lxѯ ya) ӯkpet)̯o3P3:4 @4445@555G6=@6667@7p777808b@8D8W889@9`99+9:3@:`;;;;@<<<(= =@=`==l=v= >> >P>#p>;>>??@D@@VAMAABPB`BB BD D@D[@dddddHdd@eifggWgZ h@hPhhphphp p(p0p8p@pHpPpXp `p hp pp xp ppppppppppppppppq qq0q q(q0q 8qx@q!Hq"Pq#Xq$`q%hq&pq'xq(q)q*q+q,q-q.q/q0q1q2q3q4q5q6q7qr8r9r:r; r<(r=0r>8r?@r@HrAPrXrB`rChrDprExrFrGrHrrrIrJrKrrLrMrNrOrPrQrRrSsTsUsVsW sX(sY0sZ8s[@s\Hs]Ps^Xs_`s`hsapsbxscsbsdsesfsgshsisjskslsmsnsospsqsrtstttutv tw(tx0ty8tz@t{Ht|Pt}Xt~`thtptxttttt"ttttttttttttuuuu u(u0u8u@uHuPuXu`uhupuxuuuuuuuuuuuuuuuuuvvvv v(v0v8v@vHvPvXv`vhvQpvxvvvvvvvvvvvvvvvvvwwww w(w0w8w@wHwPwXw`whwpwxwwwwwwwwwwwwww=wwwxxxx x(x0x8x@xHxPxXx`xhxFpxxxxxxxxxxx xxxxxxxxy y y y  y (y0y8y@yHyPyXy`yhypyxyyyyyyyyy y!y"y#y$y%y&y'y(z)zz*z+ z,(z-0z.8z/@z0Hz1PzXz2`z3hz4pz5xz6z7z8z9z:z;z<zz=z>z?z@zAzBzCzDzE{F{G{H{I {J({K0{L8{M@{NH{OP{PX{Q`{Rh{Sp{Tx{U{V{W{X{Y{Z{[{{\{]{^{_{`{a{b{c{d|e|f|g| |h(|i0|l8|j@|H|kP|X|l`|mh|np|ox|p|q|r|s|t|u|v|w|x|y||z|{|||}|~|}}}} }(}0}8}@}H}P}X}`}h}p}x}}}}}}}}}}}}}}}}}~~~_~ ~(~0~8~@~H~P~X~`~h~p~x~~~~ ~~~~~~~~~~~:~~4HHlHt[ H5l%l@%lh%lh%lh%lh%lh%lh%lh%lhp%lh`%lh P%lh @%lh 0%lh %zlh %rlh%jlh%blh%Zlh%Rlh%Jlh%Blh%:lh%2lh%*lhp%"lh`%lhP%lh@% lh0%lh %lh%lh%lh%lh %lh!%lh"%lh#%lh$%lh%%lh&%lh'p%lh(`%lh)P%lh*@%lh+0%lh, %zlh-%rlh.%jlh/%blh0%Zlh1%Rlh2%Jlh3%Blh4%:lh5%2lh6%*lh7p%"lh8`%lh9P%lh:@% lh;0%lh< %lh=%lh>%lh?%lh@%lhA%lhB%lhC%lhD%lhE%lhF%lhGp%lhH`%lhIP%lhJ@%lhK0%lhL %zlhM%rlhN%jlhO%blhP%ZlhQ%RlhR%JlhS%BlhT%:lhU%2lhV%*lhWp%"lhX`%lhYP%lhZ@% lh[0%lh\ %lh]%lh^%lh_%lh`%lha%lhb%lhc%lhd%lhe%lhf%lhgp%lhh`%lhiP%lhj@%lhk0%lhl %zlhm%rlhn%jlho%blhp%Zlhq%Rlhr%Jlhs%Blht%:lhu%2lhv%*lhwp%"lhx`%lhyP%lhz@% lh{0%lh| %lh}%lh~%lh%lh%lh%lh%lh%lh%lh%lh%lhp%lh`%lhP%lh@%lh0%lh %zlh%rlh%jlh%blh%Zlh%Rlh%Jlh%Blh%:lh%2lh%*lhp%"lh`%lhP%lh@% lh0%lh %lh%lh%lh%lh%lh%lh%lh%lh%lh%lh%lhp%lh`%lhP%lh@%lh0%lh %zlh%rlh%jlh%blh%Zlh%Rlh%Jlh%Blh%:lh%2lh%*lhp%"lh`%lhP%lh@% lh0%lh %lh%lh%lh%lh%lh%lh%lh%lh%lh%lh%lhp%lh`%lhP%lh@%lh0%lh %zlh%rlh%jlh%blh%Zlh%Rlh%Jlh%Blh%:lh%2lh%*lhp%"lh`%lhP%lh@% lh0%lh %lh%lh%lh%lh%lh%lh%lh%lh%lh%lh%lhp%lh`%lhP%lh@%lh0%lh %zlh%rlh%jlh%blh%Zlh%Rlh%Jlh%Blh%:lh%2lh%*lhp%"lh`%lhP%lh@% lh0%lh %kh%kh%kh%kh%kh%kh%kh%kh%kh%kh%khp%kh`%kh P%kh @%kh 0%kh  %zkh %rkh%jkh%bkh%Zkh%Rkh%Jkh%Bkh%:kh%2kh%*khp%"kh`%khP%kh@% kh0%kh %kh%kh%kh%kh %kh!%kh"%kh#%kh$%kh%%kh&%kh'p%kh(`%kh)P%kh*@%kh+0%kh, %zkh-%rkh.%jkh/%bkh0%Zkh1%Rkh2%Jkh3%Bkh4%:kh5%2kh6%*kh7p%"kh8`%kh9P%kh:@% kh;0%kh< %kh=%kh>%kh?%kh@%khA%khB%khC%khD%khE%khF%khGp%khH`%khIP%khJ@%khK0%khL %zkhM%rkhN%jkhO%bkhP%ZkhQ%RkhR%JkhS%BkhT%:khU%2khV%*khWp%"khX`%khYP%khZ@% kh[0%kh\ %kh]%kh^%kh_%kh`%kha%khb%khc%khd%khe%khf%khgp%khh`%khiP%khj@%khk0%khl %zkhm%rkhn%jkho%bkhp%Zkhq%Rkhr%Jkhs%Bkht%:khu%2khv%*khwp%"khx`%khyP%khz@% kh{0%kh| %kh}%kh~%kh%kh%kh%kh%kh%kh%kh%kh%khp%kh`%khP%kh@%kh0%kh %zkh%rkh%jkh%bkh%Zkh%Rkh%Jkh%Bkh%:kh%2kh%*khp%"kh`%khP%kh@% kh0%kh %kh%kh%kh%kh%kh%kh%kh%kh%kh%kh%khp%kh`%khP%kh@%kh0%kh %zkh%rkh%jkh%bkh%Zkh%Rkh%Jkh%Bkh%:kh%2kh%*khp%"kh`%khP%kh@% kh0%kh %kh%kh%kh%kh%kh%kh%kh%kh%kh%kh%khp%kh`%khP%kh@%kh0%kh %zkh%rkh%jkh%bkh%Zkh%Rkh%Jkh%Bkh%:kh%2kh%*khp%"kh`%khP%kh@% kh0%kh %kh%kh%khAHt G GPWÐAHt G GPWÐSHHkdH%(HD$1H Ht$HD$ |H{H{Ht$HD$ Ht$HD$ mH;iAH:<HAUATIUSI͉HH|$dH%(H$19HD$LHx{HHHt$HD$xH}|HHfHt$HD$xHBHD$LHpH|$7H$dH3 %(LtHH|$HwHĘ[]A\A]ÐATUHSH HkdH%(HD$1H>Ht$ HD$ LeH߾|HLHt$ HD$ Ht$HD$ HkHuHT$ H|$H5Ht$HHD$HxH7t Ht$#pAhHHHD$HxH7tHt$#HH~HFHHH${dH%(HD$1USHH(HkdH%(HD$1HHt$ HD$ H߾|vHuHHVHt$ HD$ oHt$HD$ XH&H|$HH&Ht$HHD$HxH7t Ht$"pAhHHHD$HxH7tHt$"HH?HP@|vWxP"|vWxP-|vWxP>|vWxP9|vWxP@]|vWxjP@O|vWxPPY|vpE|H|6P|vpE|H|P@|vWxP|vWxP|vWxP|vWxP@|vWxP|vWxP|vWxfP|vWxLP@|vWx2P|vpE|H|P|vWxP|vWxP|vpE|H|P|vWxP|vWxP}vWx|P@}vWxbP }vpE|H|HP,}vWx.P@}vWxP&}vpE|H|PD}vWxP@6}vWxP>}vpE|H|P[}vWxP@M}vWxxPU}vpE|H|^Pk}vWxDPh}vWx*P@}vWxPx}vWxP@}vpE|H|P}vWxP}vWxP}vpE|H|P}vWxtP@}vWxZP}vpE|H|@P@}vWx&P}vpE|H| P}vWxP@}vWxP@~vWxP@~vWxP~vWxP&~vWxpP1~vWxVP9~vWxP@a$P@a P8hP8hPSvWxP@^vWxPjvWxP@uvWxnP|vWxTP@O:P8 PSxWxP` Tx7YxPOPրa8POP8P@р0WxjPr8PP@486P,8P@#8P8P8P8P@8P8P8fP8LP@ـ82P@o0WxPmaPaP;aPAaPGaPMa|PSabPYaHP_a.PeaPkaPaPzaP@aPaPaxP0Wx^P@(0WxDP0Wx*P0WxP 0WxP@0WxP0WxP0WxP0WxP@ހ0WxtPՀ0WxZPҀa@P&a&P@a PaP aPaP@aPaPapP܀aVPӀaHt$HD$ 'H_HuHT$ H|$HHt$HbHD$HxH7t Ht$ pAhHTHHD$HxH7tHt$U HHHUSHH(HkdH%(HD$1HHt$ HD$ QH߾|$HuHHV4Ht$ HD$ Ht$HD$ H>H|$HHHt$HGHD$HxH7t Ht$kpAhH9HHD$HxH7tHt$:HHHHHH$h|dH%(HD$1USH(H;kdH%(HD$1HkHt$ HD$ H߾|QHHt$ HD$ Ht$ HD$ HHT$H|$QHcHt$HHD$HxH7t Ht$*`}A@dHHHD$HxH7tHt$HHHtUSH(HkdH%(HD$1HOHt$ HD$ H߾|HHt$ HD$ Ht$ HD$ H~HT$H|$HGHt$HjHD$HxH7t Ht$`}A@dHHHD$HxH7tHt$HHHXSHHkdH%(HD$1H4Ht$HD$ |H{HHt$HD$ Ht$HD$ HciAH:<HAWAVAAUATIUSMAԉHDH|$dH%(H$1VHD$LHx{HDHHt$HD$xDH|HHHt$HD$xHcHD$LHp"H|$XH$dH3 %(Lt HH|$0HHĘ[]A\A]A^A_ATUHSH H4kdH%(HD$1H\Ht$ HD$ LeH߾|HLHt$ HD$ Ht$HD$ HHuHT$ H|$HSHt$HHD$HxH7t Ht$wpAhHHHD$HxH7tHt$YwHHHdUSHH(HkdH%(HD$1HvHHHIHHH$h|dH%(HD$1USH(HkdH%(HD$1HHt$ HD$ H߾|{QHnHt$ HD$ wHt$ HD$ `H.HT$H|$QHHt$HHD$HxH7t Ht$.u`}A@dHHHD$HxH7tHt$tHH@HUSH(HkdH%(HD$1HHt$ HD$ H߾|_HRHt$ HD$ [Ht$ HD$ DH|HT$H|$HHt$HHD$HxH7t Ht$t`}A@dHpHHD$HxH7tHt$sHH$HSHHkdH%(HD$1HHt$HD$ q|HD{H7Ht$HD$ @Ht$HD$ )HaiAH:<HPւvWx$P@ق3Ƃ~˂ P@݂vWxAHt G GPWjÐAHt G GPWBÐPn膹PnlPjRPd8PZPQPHPhиP@i趸P@_蜸P`肸P@VhPWNPM4PMPCPDP,̷P?買P?蘷P@:~P;dP5JP@60P0P1P'P&ȶP&讶P@%蔶P@+zP,`P$FP qSxWx,PkP Tx7YxPo;]@[Pk ^N[޵H>HtHH8Ht;SHdH%HtH@HtH8u H8胿H[øAHt G GPWÐAHt G GPWÐAHt G GPWÐAHt G GPWÐP8pдPڄ8p趴AHt G GPW0ÐAHt G GPWÐP;]@[Lf.fSH dH%(HD$1HxAHHoHL$ix HmNHL$ixX HmNHL$ixp+ HpmN跿HL$ixP HPmN芿HL$ix0 H0mN]HL$ix HmN0HL$ixw HmNHL$ixМJ HМmN־HL$xix HmN詾HL$pix HmN|HL$`ixp HpmNOHL$XixP HPmN"HL$Pix0i H0mNHL$Hix< HmNȽHL$@ix HmN蛽HL$8ixЛ HЛmNnHL$0ix赿 HmNAHL$(ix舿 HmNHL$ ixp[ HpmNHL$ixP. HPmN躼HL$ix0 H0mN荼HL$ixԾ HmN`HL$ix觾 HmN3HL$hxКz HКmNHL$hxM HmNٻHL$hx HmN謻HL$hxp HpmNHL$hxPƽ HPmNRHL$hx0虽 H0mN%HL$hxl HmNHL$hx? HmN˺HL$hxЙ HЙmN螺HL$hx HmNqHL$hx踼 HmNDHL$hxp苼 HpmNHL$hxP^ HPmNHL$hx01 H0mN轹HL$hx HmN萹HL$hx׻ HmNcHL$xhxИ誻 HИmN6HL$phx} HmN HL$hhxP HmNܸHL$`hxp# HpmN诸HL$XhxP HPmN肸HL$Phx0ɺ H0mNUHL$Hhx蜺 HmN(HL$@hxo HmNHL$8hxЗB HЗmNηHL$0hx HmN衷HL$(hx HmNtHL$ hxp軹 HpmNGHL$hxP莹 HPmNHL$hx0a H0mNHL$hx4 HmNHL$hx HmN蓶HL$gxЖڸ HЖmNfHL$gx譸 HmN9HL$gx耸 HmN HL$gxpS HpmNߵHL$gxP& HPmN貵HL$gx0 H0mN腵HL$gx̷ HmNXHL$gx蟷 HmN+HL$gxЕr HЕmNHL$gxE HmNѴHL$gx HmN褴HL$gxp HpmNwHL$gxP辶 HPmNJHL$gx0葶 H0mNHL$gxd HmNHL$gx7 HmNóHL$xgxД HДmN薳HL$pgxݵ HmNiHL$hgx谵 HmN HPmNʝHL$cx0 H0mN蝝HL$cx HmNpHL$cx跟 HmNCHL$xcxЄ芟 HЄmNHL$pcx] HmNHL$hcx0 HmN輜HL$`cxp HpmN菜HL$XcxP֞ HPmNbHL$Pcx0詞 H0mN5HL$Hcx| HmNHL$@cxO HmNۛHL$8cxЃ" HЃmN讛HT$hv@*HT$hvHHT$hvPHT$hvXHT$hv`ڡHT$hvhơHT$hvp財HT$hvx螡HT$hv芡HT$hvvHT$hvbHT$hvNHT$hv:HT$hv&HT$hvHT$hvHT$hwHT$hwȂ֠HT$hwЂ HT$h w؂讠HT$hw蚠HT$hw肱膠HT$hwrHT$hw^HT$h wJHT$h$w6HT$h(w"HT$h,wHT$h0w HT$h4w(HT$h8w0ҟHT$hHEHjoHx, H0HxH7H=joHP`H=joH5joHPXH=jo@iHHrjoLH`H@XxHHXhIH@@IRfH@LAZH=&joH@HxH7RHjoLH`HPXxHHXpIH@(I'HPLA։H=ioHPHxH7HioLH`H`XxHHXxIH@(IyH`LA׉H=NioH`HxH7H1ɺ:XxHDžHDž~HHfHHBHHHHHDžHDžHMHEHEHHx~ HHx} H=hoHHP(HHEHHHEt@HuHEHx} H5JhoHHP8HHEHHHEt@HHHHuE11~HEHxL} HHx<} HHDžHDžHDžAHDžHDžHHHHDž(HHH vH1 rHi@BHDžHHHHH@H5foH=foFHPXH=foHH=foHgoiLh0H@H@H0>H@HH@ H@(L LsXL舭 LL Hm HHHPxƃ0ƃ1ƃ2Hǃ8ǃHHǃPHǃhHXH`HǃpHǃxHǃHǃHǃHǃHǃHǃƃƃHǃ^NHHDžHDžgHHHPx@@ HXHHz H{HtGugHH]HHEgLmH{@HEI9HHCt&MtAE HtG TLkHEHxz H,dHHHHUHEt @HUHEHHHHHEHXHMHUHy HHHDžHEHHDžHEuy HIeH]y HHkEHcoH+coH.袋.HHHqރ@:{H@:nރHpH XcoHYcoH9fHȐX@HH9uHH.袋H)HHHH!HHHBH.袋.HHHH<fH*^HuHEE H@EHDž@iƅḪ H coHboHQH9 HUtHHboH@ igtisIirfHt H@ HgHqrH9H|HHaoHHaoHqxAyHHHEHHUH}BHH11HEHxv @:lHE1HH!JZx@:{nH3zH1kHi@BfTx@:HH+H*^a{6$nHrSYxHnHyH`HDž`zƅhѬ H`Hkro ht H`i HTx@:mHYyH=b`oHtHPH=H`olc Ux@:gmHyHcaHHxsu HH HH͕ HHx=u H - HHxH7y HHx u Ht HHtH HP轣HHxH7 1HMdH3 %(He[A\A]A^A_]Ð3Yx@:al[@Sx@:IlHx1Yx@:2l#DHEHE\xvWx_aH*HfHH H*XfHH[E1Hu@ij HHPHkNwPff(YSx@:mk@Sx@:YkVH}HX^H}1mgXx@:%kH3HHV6vHvHEHxH7JH`Q 9H`H0DžhHDžpHEHHDž0zƅ8HxHE臩 HEH5 ooEHEHEHPHHUHUtGH\ HEHHHQHuHM fDHHPHuHEHnoHEH0Q 8t H0謧 HpH`Y H`HDžpHEHPHEHxHUHtFHMHpHxHMHMHPHEHEHHEHEHEHEHEH}1 HxH=(0o^Yxx0H,i: HH=H@1`HxH=/ooYx1n`fH=/oHٺYxH*Yu6?`H@tH=|/oHYx1`Tx@:hHYmH1tHpH` HH`HpYxHHX@wpu6HpHHpHxH7LH`HYxIHX@vu6HLHHxH7RLH`HYxIHX(`vdHLf*HHxH7PUx@:8gHrYx@:!gHkYxHgHrZx@:fHkYxHfHrZx@:fHkZxHfHTrHuwUx@:{fH@'@Zx@:NfH3HHV_qSxH2fHqH}1?eH0HDžXHEHEZx@:HDž8HDž@HHHPH`DžhHDžpHEHEHxHEHEHHEHEH_)oH@H@:HH@TeH qUx@:=eHpHHL`L9f.s HPQC k(ރ@:AdDH]ރHdHoiރHIoLJiH"pfH0H HHPK(*(C  H@H0H@ C H@H`H@ C 0H@H}H@藌 HnL9HH0HHLXfL`L9f(t~DXC(HC H`HIx= H}LXx( HXx(mL9HufH&oVx@:A*H@H@:HH@^^^vbH.n8Zx@:_bH/gMZxHBbHmSZx@:+bHfMZxHbHmpZx@:aHfZxHaHmH%o@Vx@:H@H@:HH@aH^m`Vx@:aHGmHHHH9Ifs HPC ރC(@:f(A\`DH0ZރHIkLeރH`HeHflHkL9H2H=[SoHtHPH=ASo_V Ux@:``HlHuH} HpH` H@H0Ո H)THuF HuF pHuF HuF HuF HuuF \1H]F HuOF HuAF Hu3F CHu%F HuF yHu F HuE HuE 8E `]x Tx7YxzTbxSxWxaTHpYx g HpHDžpP{x蔖 HpHIHDžpzx_ Hf HLHHcQH Pxm`H qj8WxHd^H 8isc!H`Tx#f HHDžP{x HHIHDžzx^ HLHaHPH0Px_H0ihWxH]H0hb{H HxhbHQHHxe HH HH HHxqe H E HHxH7t HC HHx5e H)e HHtH5 HPHHxH7t HiC H_H0HgHHHHPHxH7*HuC HH@HxH7HHEHx`d H0HxH7HHHHxH7HuB HHHt\HHNVx@:[Hkg`H}HIHt݃ HLH`CNVx@:d[Hgw`HHHH@ޘ HA`#LHaZHHHxH7HuA HHHEHxH7t HkA H`HxH7t HuNA H0HxH7Hu-A LHHc HHILHMc HLHc HIH{ Fb H{HtG uHPHBYLLBIIIIHHHxH7Hua@ HHIHaLHHPS_HHEHxH7H`@ HuhHLHHRWx@:H1YHH&YHd9^HHEIHx1a HLH^HHH`HxH7YaxSxWx NHHEIHx` HHx` HL#zHI]H` HLHHHÀ8t H0ޕ HpH` HuH}Hv HHHxH7VHu> HHHHxH7-HHHHHHuH}= HpH`* H@H0 HH HHuJHHRZx@:I%WHLWHb-\bIHHRZx@:IVHLVHb[$H[$IC(C ރ@:\AVDHOރHuVHE[ZxHXVHb9IWx@:7VHaZUHC {(ރ@:AUDH.OރHUHZZxHUH|aHWx@:UH[aGNHQHHHpHxH7nhHH` HHEHxV] H H}HHT} f.DS ֱH dH%(HD$1`H ֱxA ]XcHyoLcHeoQ=oHJoQ=oYQP=oHo Q=ooHo`P=OoHܳoXqPHL${ձHoP^ HձmNN\HL${ձ^ HձmN!\HL${ձh^ HձmN[HL${pձ;^ HpձmN[HL${Pձ^ HPձmN[HL${0ձ] H0ձmNm[HL${ձ] HձmN@[HL${Ա] HԱmN[HL${ԱZ] HԱmNZHL${Ա-] HԱmNZHL${Ա] HԱmNZHL${pԱ\ HpԱmN_ZHL${PԱ\ HPԱmN2ZHL$x{0Աy\ H0ԱmNZHL$p{ԱL\ HԱmNYHL$h{ӱ\ HӱmNYHL$`{ӱ[ HӱmN~YHL$X{ӱ[ HӱmNQYHL$P{ӱ[ HӱmN$YHL$@{pӱk[ HpӱmNXHL$0{Pӱ>[ HPӱmNXHL$ {0ӱ[ H0ӱmNXHL${ӱZ HӱmNpXHL${ұZ HұmNCXHL${ұZ HұmNXHL${ұ]Z HұmNWHL${ұ0Z HұmNWHL${pұZ HpұmNWHL${PұY HPұmNbWHL${0ұY H0ұmN5WHL${ұ|Y HұmNWHL${ѱOY HѱmNVHL${ѱ"Y HѱmNVHL${ѱX HѱmNVHL${ѱX HѱmNTVHL$x{pѱX HpѱmN'VHL$p{PѱnX HPѱmNUHL$h{0ѱAX H0ѱmNUHL$`{ѱX HѱmNUHL$X{бW HбmNsUHL$P{бW HбmNFUHL$H{бW HбmNUHL$@{б`W HбmNTHL$8{pб3W HpбmNTHL$0{PбW HPбmNTHL$({0бV H0бmNeTHL$ {бV HбmN8THL${ϱV HϱmN THL${ϱRV HϱmNSHL${ϱ%V HϱmNSHL${ϱU HϱmNSHL${pϱU HpϱmNWSHL${PϱU HPϱmN*SHL${0ϱqU H0ϱmNRHL${ϱDU HϱmNRHL${αU HαmNRHL${αT HαmNvRHL${αT HαmNIRHL${αT HαmNRHL${pαcT HpαmNQHL${Pα6T HPαmNQHL${0α T H0αmNQHL${αS HαmNhQHL${ͱS HͱmN;QHL${ͱS HͱmNQHL$x{ͱUS HͱmNPHL$p{ͱ(S HͱmNPHL$h{pͱR HpͱmNPHL$`{PͱR HPͱmNZPHL$X{0ͱR H0ͱmN-PHL$P{ͱtR HͱmNPHL$H{̱GR H̱mNOHL$@{̱R H̱mNOHL$8{̱Q H̱mNyOHL$0{̱Q H̱mNLOHL$({p̱Q Hp̱mNOHL$ {P̱fQ HP̱mNNHL${0̱9Q H0̱mNNHL${̱ Q H̱mNNHL${˱P H˱mNkNHL${˱P H˱mN>NHL${˱P H˱mNNHL${˱XP H˱mNMHL${p˱+P Hp˱mNMHL${P˱O HP˱mNMHL${0˱O H0˱mN]MHL${˱O H˱mN0MHL${ʱwO HʱmNMHL${ʱJO HʱmNLHL${ʱO HʱmNLHL${ʱN HʱmN|LHL${pʱN HpʱmNOLHL${PʱN HPʱmN"LHL${0ʱiN H0ʱmNKHL${ʱHL$@{:A HmN>HL$8{ A HmN>HL$0{@ HmNl>HL$({p@ HpmN?>HL$ {P@ HPmN>HL${0Y@ H0mN=HL${,@ HmN=HL${? HmN=HL${п? HпmN^=HL${? HmN1=HL${x? HmN=HL${pK? HpmN H0mN} HmNP HmN# HоmN;HL${=> HmN;HL${> HmN;HL${p= HpmNo;HL${P= HPmNB;HL${0= H0mN;HL${\= HmN:HL${/= HmN:HL${н= HнmN:HL$x{< HmNa:HL$p{< HmN4:HL$h{p{< HpmN:HL$`{PN< HPmN9HL$X{0!< H0mN9HL$P{; HmN9HL$H{; HmNS9HL$@{м; HмmN&9HL$8{m; HmN8HL$0{@; HmN8HL$({p; HpmN8HL$ {P: HPmNr8HL${0: H0mNE8HL${: HmN8HL${_: HmN7HL${л2: HлmN7HL${: HmN7HL${9 HmNd7HL${p9 HpmN77HL${P~9 HPmN 7HL${0Q9 H0mN6HL${$9 HmN6HL${8 HmN6HL${к8 HкmNV6HL${8 HmN)6HL${p8 HmN5HL${pC8 HpmN5HL${P8 HPmN5HL${07 H0mNu5HL${7 HmNH5HL${7 HmN5HL${йb7 HйmN4HL$x{57 HmN4HL$p{7 HmN4HL$h{p6 HpmNg4HL$`{P6 HPmN:4HL$X{06 H0mN 4HL$P{T6 HmN3HL$H{'6 HmN3HL$@{и5 HиmN3HL$8{5 HmNY3HL$0{5 HmN,3HL$({ps5 HpmN2HL$ {PF5 HPmN2HL${05 H0mN2HL${4 HmNx2HL${4 HmNK2HL${з4 HзmN2HL${e4 HmN1HL${84 HmN1HL${p 4 HpmN1HL${P3 HPmNj1HT$hv7HT$hvȵ7HT$hvе7HT$hvص7HT$hv൱7HT$hv赱7HT$hvn7HT$hvZ7HT$hvF7HT$hv27HT$hv7HT$hv 7HT$hv 6HT$hv(6HT$hv06HT$hv86HT$hw@6HT$hwH6HT$hwP~6HT$h wXj6HT$hw`V6HT$hwhB6HT$hwp.6HT$hwx6HT$h w6HT$h$w5HT$h(w5HT$h,w5HT$h0w5HT$h4w5HT$h8w5HT$h5HT$hLwض*5HT$hPwන5HT$hTw趱5HT$hXw4HT$h\w4HT$h`w4HT$hdw4HT$hhw4HT$hlw4HT$hpw v4HT$htw(b4HT$hxw0N4HT$h|w8:4HT$hw@&4HT$hwH4H18Oq-HT$hw3HT$hw3HT$hw3HT$hw3HT$hw 3HT$hw(3HT$hw0u3HT$hw8a3HT$hw@M3HT$hwH93HT$hwP%3HT$hwX3HT$hw`2HT$hwh2HT$hwp2HT$hwx2HT$hw2HT$hw2HT$hw2HT$hwq2HT$hw]2HT$hwI2HT$hw52HT$hw!2HT$hw 2HT$hwȴ1HT$hwд1HT$hwش1HT$hwറ1HT$hw贱1HT$hx1HT$hx1HT$hxm1HT$h xY1HT$hxE1HT$hx11HT$hx 1HT$hx( 1HT$h x00HT$h$x80HT$h(x@0HT$h,xH0HT$h0xP0HT$h4xX0HT$h8x`}0HT$hHT$xz*HT$xzHT$xz HT$xz(HT$xz0HT$xz8HT$xz@HT$xzHHT$xzPHT$xzXvHT$xz`bHT$x{hNHT$x {p:HT$x{x&HT$x {HT$x*{HT$x4{HT$x>{HT$xH{HT$xR{HT$x\{HT$xf{HT$xp{rHT$xz{ȥ^HT$x{ХJHT$x{إ6HT$x{ॱ"HT$x{襱HT$x{HT$x{HT$xyHT$xyHT$xyHT$xyHT$xy HT$xy(nHT$xz0ZHT$xz8FHT$xz@2HT$x&zHHT$x0zP HT$x:zXHT$xDz`HT$xNzhHT$xXzpHT$xbzxHT$xlzHT$xvz~H1`7OHT${ФYHФAHT$x{@1HT${HHT$H{P HT${XHT${`HT${hHT${pHT$P{xHT${HT$ {}HT${iHT${UHT$X{AHT${-HT$({HT${HT${HT$`{ȣHT${УHT$0{أHT${ࣱHT${裱HT$h{yHT${eHT$8{QHT${=HT${)HT$p{HT${ HT$@{(HT${0HT${8HT$x{@HT${HHT$H{PHT${XuHT${`aHT${hMHT${p9HT$P{x%HT${HT$ {HT${HT${HT$X{HT${HT$({1H6OH 3o7H3o7H3o7 =xdoB1o41o&1o1o 1o0o0o0o=do=co^=co1=couHPֱ}Pco/ HD$dH3%(yH [ÿXֱ}XֱHPp}P Z`ֱv0`ֱTHX}P hֱAhֱH`}P{ z/o7 H~NQ }ТX/o 4 HТ~N' FHQֱ}Pbo HRֱ}Pbo HSֱ}Plbo UHTֱ}PTbo ( #1H)HHt8HH3H~H7tHt$HD$\ HD$ͺ$붺%HO&렺'뙺(뒺)닺*넺+z,p-f.\/R0H1>1ҹ1H)HHpHH3H~H7tHt$HD$ HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A'1H)HHHH3H~H7tHt$HD$п HD$ɺ(벺)뫺*뤺+띺,떺-돺.눺11wmcYOE;1'     !"A 7!-"##$%&)-*#+,-./0yoe[1H)H@H@HH3H~H7tHt$HD$ּ HD$ɺ벺 뫺 뤺 띺 떺 돺눺끺wmcYOE;1'  !"#$%&'()}*s+i,_-U.K/A071-1ҹ1H)HHHH3H~H7tHt$HD$ HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ukaWMC9 / %   MC9//+0!1ۢf.HֱHֱxA9HWo-HWo=#oHWot1=#otXÿ#o+ YH~NТ#oO( HТ~NkfS HH\$dH%(HD$1H xA(hoho~hophobhoThoFho8ho#H$hoHhoHپ |Hgo HmNHپ | HmN^Hپ | HmN3Hپx |p| HpmNHپp |PQ HPmNHپh |0& H0mNHپ` | HmNHپX | HmN\HپP | HmN1HپH |z HmNHپ@ |O HmNHپ0 |p$ HpmNHپ |P HPmNHپ |0 H0mNZHپ | HmN/Hپ |x HmNHپ |M HmNHپ |" HmNHپ | HmNHپ |p HpmNXHپ |P HPmN-Hپ |0v H0mNHپ |K HmNHپ | HmNHپ | HmNHپ | HmNVHپ | HmN+Hپ |pt HpmNHپp |PI HPmNHپ` |0 H0mNHپP | HmNHپ@ | HmNTHپ0 | HmN)Hپ( |r HmNHپ |G HmNHپ |p HpmNHپ |P HPmN}Hپ |0 H0mNRHپ | HmN'Hپ |p HmNHپ |E HmNHپ | HmNHپ | HmN{Hپ |p HpmNPHپ |P HPmN%Hپ |0n H0mNHپ |C HmNHپ | HmNHپ | HmNyHپ | HmNNHپ | HmN#Hپ |pl HpmNHپ |PA HPmNHپx |0 H0mNHپp | HmNwHپh | HmNLHپ` | HmN!HپX |j HmNHپP |? HmNHپH |p HpmNHپ@ |P HPmNuHپ8 |0 H0mNJHپ0 | HmNHپ( |߱h H߱mNHپ |߱= H߱mNHپ |߱ H߱mNHپ |߱ H߱mNsHپ |p߱ Hp߱mNHHپ |P߱ HP߱mNHپ |0߱f H0߱mNHپ |߱; H߱mNHپ |ޱ HޱmNHپ |ޱ HޱmNqHپ |ޱ HޱmNFHپ |ޱ HޱmNHپ |pޱd HpޱmNHپ |Pޱ9 HPޱmNHپ |0ޱ H0ޱmNHپ |ޱ HޱmNoHپ |ݱ HݱmNDHپ |ݱ HݱmNHپ |ݱb HݱmNHپ |ݱ7 HݱmNHپ |pݱ HpݱmNHپ |Pݱ HPݱmNmHپx |0ݱ H0ݱmNBHپp |ݱ HݱmNHپh |ܱ` HܱmNHپ` |ܱ5 HܱmNHپX |ܱ HܱmNHپP |ܱ HܱmNkHپH |pܱ HpܱmN@Hپ@ |Pܱ HPܱmNHپ8 |0ܱ^ H0ܱmNHپ0 |ܱ3 HܱmNHپ( |۱ H۱mNHپ |۱ H۱mNiHپ |۱ H۱mN>Hپ |۱ H۱mNHپ |p۱\ Hp۱mNHپ |P۱1 HP۱mNHپ|0۱ H0۱mNHپ|۱ H۱mNgHپ|ڱ HڱmN H`mNʧHL$p|@ H@mN蝧HL$`|  H mNpHL$P|跩 HmNCHL$H|芩 HmNHL$@|] HmNHL$8|0 HmN輦HL$0| HmN菦HL$(|`֨ H`mNbHL$ |@詨 H@mN5HL$| | H mNHL$|O HmNۥHL$|" HmN讥HL$| HmN聥HL$|ȧ HmNTHL$|蛧 HmN'HL$|`n H`mNHL$|@A H@mNͤHL$|  H mN蠤HL$| HmNsHL$|躦 HmNFHL$|荦 HmNHL$|` HmNHL$|3 HmN迣HL$|` H`mN蒣HL$|@٥ H@mNeHL$| 謥 H mN8HL$| HmN HL$x|R HmNޢHL$p|% HmN豢HL$h| HmN脢HL$`|ˤ HmNWHL$X|`螤 H`mN*HL$P|@q H@mNHL$H| D H mNСHL$@| HmN裡HL$8| H mNvHL$0| 轣 H mNIHL$(| 萣 H mNHL$ | c H mNHL$|` 6 H` mN HL$|@ H@ mN蕠HL$| ܢ H mNhHL$| 询 H mN;HL$| 肢 H mNHL$| U H mNHL$| ( H mN负HL$| H mN臟HL$|` Ρ H` mNZHL$|@ 衡 H@ mN-HL$| t H mNHL$| G H mNӞHL$|  H mN覞HL$| H mNyHL$| H mNLHL$| 蓠 H mNHL$|` f H` mNHL$|@ 9 H@ mNŝHL$| H mN蘝HD$dH3%(uYHÿТnB HТ~N^<]nh H~N4蚍f.HP!dH%(HD$1蒠HP!xA9H?o-Hv?o=nH[?o=nHL$p| ! H !mN胜HL$h|!ʞ H!mNVHL$`| 蝞 H mN)HL$X| p H mNHL$P| C H mNϛHL$H|  H mN袛HL$@|` H` mNuHL$8|@ 輝 H@ mNHHL$0| 菝 H mNHL$(| b H mNHL$ |5 HmNHL$| HmN蔚HL$|ۜ HmNgHL$|讜 HmN:HL$|`聜 H`mN HL$|@T H@mNHL$| ' H mN賙HL$| HmN膙HL$|͛ HmNYHL$|蠛 HmN,HL$|s HmNHL$|F HmNҘHL$|` H`mN襘HL$|@ H@mNxHL$x| 迚 H mNKHL$p|蒚 HmNHL$h|e HmNHL$`|8 HmNėHL$P| HmN藗HL$@|ޙ HmNjHL$0|`豙 H`mN=HL$ |@脙 H@mNHL$| W H mNHL$|* HmN趖HL$| HmN艖HL$|И HmN\HL$|裘 HmN/HL$|v HmNHL$|`I H`mNՕHL$|@ H@mN訕HL$|  H mN{HL$|— HmNNHL$|蕗 HmN!HL$|h HmNHL$|; HmNǔHL$| HmN蚔HL$|` H`mNmHL$|@贖 H@mN@HL$| 臖 H mNHL$x|Z HmNHL$p|- HmN蹓HL$h| HmN茓HL$`|ӕ HmN_HL$X|覕 HmN2HL$P|`y H`mNHL$H|@L H@mNؒHL$@|  H mN諒HL$8| HmN~HL$0|Ŕ HmNQHL$(|蘔 HmN$HL$ |k HmNHL$|> HmNʑHL$|` H`mN蝑HL$|@ H@mNpHL$| 跓 H mNCHL$|芓 HmNHL$|] HmNHL$|0 HmN輐HL$| HmN菐HL$|֒ HmNbHL$|`詒 H`mN5HL$|@| H@mNHL$| O H mNۏHL$|" HmN讏HL$| HmN聏HL$|ȑ HmNTHL$|蛑 HmN'HL$|n HmNHL$|`A H`mN͎HL$|@ H@mN蠎HL$|  H mNsHL$x|躐 HmNFHL$p|荐 HmNHL$h|` HmNHL$`|3 HmN迍HL$X| HmN蒍HL$P|`ُ H`mNeHL$H|@謏 H@mN8HD$dH3%(uYHÿТ/n HТ~N<n H~NԌ:}f.Hp,dH%(HD$12Hp,xA莌ْHJ:o͒H6:o聀=nH:o=fnHL$p|@,藎 H@,mN#HL$h| ,j H ,mNHL$`|,= H,mNɋHL$X|+ H+mN蜋HL$P|+ H+mNoHL$H|+趍 H+mNBHL$@|+艍 H+mNHL$8|`+\ H`+mNHL$0|@+/ H@+mN車HL$(| + H +mN莊HL$ |+Ռ H+mNaHL$|*訌 H*mN4HL$|*{ H*mNHL$|*N H*mNډHL$|*! H*mN證HL$|`* H`*mN耉HL$|@*Nj H@*mNSHL$| *蚋 H *mN&HL$|*m H*mNHL$|)@ H)mN̈HL$|) H)mN蟈HL$|) H)mNrHL$|)蹊 H)mNEHL$|`)茊 H`)mNHL$x|@)_ H@)mNHL$p| )2 H )mN辇HL$h|) H)mN葇HL$`|(؉ H(mNdHL$P|(諉 H(mN7HL$@|(~ H(mN HL$0|(Q H(mN݆HL$ |`($ H`(mN谆HL$|@( H@(mN胆HL$| (ʈ H (mNVHL$|(蝈 H(mN)HL$|'p H'mNHL$|'C H'mNυHL$|' H'mN袅HL$|' H'mNuHL$|`'輇 H`'mNHHL$|@'菇 H@'mNHL$| 'b H 'mNHL$|'5 H'mNHL$|& H&mN蔄HL$|&ۆ H&mNgHL$|&讆 H&mN:HL$|&聆 H&mN HL$|`&T H`&mNHL$|@&' H@&mN賃HL$x| & H &mN膃HL$p|&ͅ H&mNYHL$h|%蠅 H%mN,HL$`|%s H%mNHL$X|%F H%mN҂HL$P|% H%mN襂HL$H|`% H`%mNxHL$@|@%迄 H@%mNKHL$8| %蒄 H %mNHL$0|%e H%mNHL$(|$8 H$mNāHL$ |$ H$mN藁HL$|$ރ H$mNjHL$|$豃 H$mN=HL$|`$脃 H`$mNHL$|@$W H@$mNHL$| $* H $mN趀HL$|$ H$mN艀HL$|#Ђ H#mN\HL$|#裂 H#mN/HL$|#v H#mNHL$|#I H#mNHL$|`# H`#mNHL$|@# H@#mN{HL$| # H #mNNHL$|#蕁 H#mN!HL$|"h H"mN~HL$|"; H"mN~HL$|" H"mN~HL$|" H"mNm~HL$|`"贀 H`"mN@~HL$|@"臀 H@"mN~HL$x| "Z H "mN}HL$p|"- H"mN}HL$h|! H!mN}HL$`|! H!mN_}HL$X|! H!mN2}HL$P|!y H!mN}HL$H|`!L H`!mN|HD$dH3%(uYHÿТϠn肥 HТ~N|<n訨 H~Nt|lf.H7dH%(HD$1H7xA.|yH 5omH4o!p="nH4o=nHL$p}`77~ H`7mN{HL$h}@7 ~ H@7mN{HL$`} 7} H 7mNi{HL$X}7} H7mN<{HL$P}6} H6mN{HL$H}6V} H6mNzHL$@}6)} H6mNzHL$8}6| H6mNzHL$0}`6| H`6mN[zHL$(}@6| H@6mN.zHL$ } 6u| H 6mNzHL$}6H| H6mNyHL$}5| H5mNyHL$}5{ H5mNzyHL$}5{ H5mNMyHL$}5{ H5mN yHL$}`5g{ H`5mNxHL$}@5:{ H@5mNxHL$} 5 { H 5mNxHL$}5z H5mNlxHL$}4z H4mN?xHL$}4z H4mNxHL$}4Yz H4mNwHL$}4,z H4mNwHL$x}`4y H`4mNwHL$p}@4y H@4mN^wHL$h} 4y H 4mN1wHL$`}4xy H4mNwHL$P}3Ky H3mNvHL$@}3y H3mNvHL$0}3x H3mN}vHL$ }3x H3mNPvHL$}`3x H`3mN#vHL$}@3jx H@3mNuHL$} 3=x H 3mNuHL$|3x H3mNuHL$|2w H2mNouHL$|2w H2mNBuHL$|2w H2mNuHL$|2\w H2mNtHL$|`2/w H`2mNtHL$|@2w H@2mNtHL$| 2v H 2mNatHL$|2v H2mN4tHL$|1{v H1mNtHL$|1Nv H1mNsHL$|1!v H1mNsHL$|1u H1mNsHL$|`1u H`1mNSsHL$x|@1u H@1mN&sHL$p| 1mu H 1mNrHL$h|1@u H1mNrHL$`|0u H0mNrHL$X|0t H0mNrrHL$P|0t H0mNErHL$H|0t H0mNrHL$@|`0_t H`0mNqHL$8|@02t H@0mNqHL$0| 0t H 0mNqHL$(|0s H0mNdqHL$ |/s H/mN7qHL$|/~s H/mN qHL$|/Qs H/mNpHL$|/$s H/mNpHL$|`/r H`/mNpHL$|@/r H@/mNVpHL$| /r H /mN)pHL$|/pr H/mNoHL$|.Cr H.mNoHL$|.r H.mNoHL$|.q H.mNuoHL$|.q H.mNHoHL$|`.q H`.mNoHL$|@.bq H@.mNnHL$| .5q H .mNnHL$|.q H.mNnHL$|-p H-mNgnHL$|-p H-mN:nHL$|-p H-mN nHL$|-Tp H-mNmHL$|`-'p H`-mNmHL$x|@-o H@-mNmHL$p| -o H -mNYmHL$h|-o H-mN,mHL$`|,so H,mNlHL$X|,Fo H,mNlHL$P|,o H,mNlHL$H|,n H,mNxlHD$dH3%(uYHÿТon" HТ~N>l<=nH H~Nlz\f.HBdH%(HD$1roHBxAkrH/o rH/o_=nH/o=nHL$}Bm HBmNckHL$}`Bm H`BmN6kHL$}@B}m H@BmN kHL$} BPm H BmNjHL$}B#m HBmNjHL$}Al HAmNjHL$}Al HAmNUjHL$x}Al HAmN(jHL$p}Aol HAmNiHL$h}`ABl H`AmNiHL$`}@Al H@AmNiHL$P} Ak H AmNtiHL$@}Ak HAmNGiHL$8}@k H@mNiHL$0}@ak H@mNhHL$(}@4k H@mNhHL$ }@k H@mNhHL$}`@j H`@mNfhHL$}@@j H@@mN9hHL$} @j H @mN hHL$}@Sj H@mNgHL$}?&j H?mNgHL$}?i H?mNgHL$}?i H?mNXgHL$}?i H?mN+gHL$}`?ri H`?mNfHL$}@?Ei H@?mNfHL$} ?i H ?mNfHL$}?h H?mNwfHL$}>h H>mNJfHL$p}>h H>mNfHL$`}>dh H>mNeHL$P}>7h H>mNeHL$H}`> h H`>mNeHL$@}@>g H@>mNieHL$8} >g H >mNg H>mNeHL$(}=Vg H=mNdHL$ }=)g H=mNdHL$}=f H=mNdHL$}=f H=mN[dHL$}`=f H`=mN.dHL$}@=uf H@=mNdHL$} =Hf H =mNcHL$}=f H=mNcHL$}<e H<mNzcHL$}<e H<mNMcHL$}<e H<mN cHL$}<ge H<mNbHL$}`<:e H`<mNbHL$}@< e H@<mNbHL$} <d H <mNlbHL$}<d H<mN?bHL$};d H;mNbHL$};Yd H;mNaHL$};,d H;mNaHL$};c H;mNaHL$x}`;c H`;mN^aHL$p}@;c H@;mN1aHL$h} ;xc H ;mNaHL$`};Kc H;mN`HL$X}:c H:mN`HL$P}:b H:mN}`HL$H}:b H:mNP`HL$@}:b H:mN#`HL$8}`:jb H`:mN_HL$0}@:=b H@:mN_HL$(} :b H :mN_HL$ }:a H:mNo_HL$}9a H9mNB_HL$}9a H9mN_HL$}9\a H9mN^HL$}9/a H9mN^HL$}`9a H`9mN^HL$}@9` H@9mNa^HL$} 9` H 9mN4^HL$}9{` H9mN^HL$}8N` H8mN]HL$}8!` H8mN]HL$}8_ H8mN]HL$}8_ H8mNS]HL$}`8_ H`8mN&]HL$}@8m_ H@8mN\HL$} 8@_ H 8mN\HL$}8_ H8mN\HL$}7^ H7mNr\HL$}7^ H7mNE\HL$}7^ H7mN\HD$dH3%(uYHÿТn„ HТ~N[<n H~N[Lf.HMdH%(HD$1_HMxAn[aH*oaHv*oaO=bnH[*o=FnHL$2}Mw] HMmN[HL$2}MJ] HMmNZHL$2}`M] H`MmNZHL$2}@M\ H@MmN|ZHL$2} M\ H MmNOZHL$2}M\ HMmN"ZHL$2}Li\ HLmNYHL$x2}L<\ HLmNYHL$p2}L\ HLmNYHL$h2}L[ HLmNnYHL$`2}`L[ H`LmNAYHL$P2}@L[ H@LmNYHL$@2} L[[ H LmNXHL$82}L.[ HLmNXHL$02}K[ HKmNXHL$(2}KZ HKmN`XHL$ 2}KZ HKmN3XHL$2}KzZ HKmNXHL$2}`KMZ H`KmNWHL$2}@K Z H@KmNWHL$1} KY H KmNWHL$1}KY HKmNRWHL$1}JY HJmN%WHL$1}JlY HJmNVHL$1}J?Y HJmNVHL$1}JY HJmNVHL$1}`JX H`JmNqVHL$1}@JX H@JmNDVHL$1} JX H JmNVHL$1}J^X HJmNUHL$p1}I1X HImNUHL$`1}IX HImNUHL$P1}IW HImNcUHL$H1}IW HImN6UHL$@1}`I}W H`ImN UHL$81}@IPW H@ImNTHL$01} I#W H ImNTHL$(1}IV HImNTHL$ 1}HV HHmNUTHL$1}HV HHmN(THL$1}HoV HHmNSHL$1}HBV HHmNSHL$1}`HV H`HmNSHL$0}@HU H@HmNtSHL$0} HU H HmNGSHL$0}HU HHmNSHL$0}GaU HGmNRHL$0}G4U HGmNRHL$0}GU HGmNRHL$0}GT HGmNfRHL$0}`GT H`GmN9RHL$0}@GT H@GmN RHL$0} GST H GmNQHL$0}G&T HGmNQHL$0}FS HFmNQHL$0}FS HFmNXQHL$0}FS HFmN+QHL$x0}FrS HFmNPHL$p0}`FES H`FmNPHL$h0}@FS H@FmNPHL$`0} FR H FmNwPHL$X0}FR HFmNJPHL$P0}ER HEmNPHL$H0}EdR HEmNOHL$@0}E7R HEmNOHL$80}E R HEmNOHL$00}`EQ H`EmNiOHL$(0}@EQ H@EmNFHL$HH}PH HPmNFHL$@H}PXH HPmNEHL$8H}P+H HPmNEHL$0H}PG HPmNEHL$(H}`PG H`PmN]EHL$ H}@PG H@PmN0EHL$H} PwG H PmNEHL$H}PJG HPmNDHL$H}OG HOmNDHL$H}OF HOmN|DHL$G}OF HOmNODHL$G}OF HOmN"DHL$G}`OiF H`OmNCHL$G}@OHL$d}pnA HpnmN>HL$d}Pn@ HPnmNy>HL$d}0n@ H0nmNL>HL$d}n@ HnmN>HL$d}mf@ HmmN=HL$xd}m9@ HmmN=HL$pd}m @ HmmN=HL$hd}m? HmmNk=HL$`d}pm? HpmmN>=HL$Xd}Pm? HPmmN=HL$Pd}0mX? H0mmN HlmN HlmN] HlmN0 HlmN HplmN;HL$d}Pl> HPlmN;HL$d}0l= H0lmN|;HL$d}l= HlmNO;HL$d}k= HkmN";HL$c}ki= HkmN:HL$c}k<= HkmN:HL$c}k= HkmN:HL$c}pk< HpkmNn:HL$c}Pk< HPkmNA:HL$c}0k< H0kmN:HL$c}k[< HkmN9HL$c}j.< HjmN9HL$c}j< HjmN9HL$c}j; HjmN`9HL$c}j; HjmN39HL$c}pjz; HpjmN9HL$c}PjM; HPjmN8HL$c}0j ; H0jmN8HL$c}j: HjmN8HL$c}i: HimNR8HL$xc}i: HimN%8HL$pc}il: HimN7HL$hc}i?: HimN7HL$`c}pi: HpimN7HL$Xc}Pi9 HPimNq7HL$Pc}0i9 H0imND7HL$Hc}i9 HimN7HL$@c}h^9 HhmN6HL$8c}h19 HhmN6HL$0c}h9 HhmN6HL$(c}h8 HhmNc6HL$ c}ph8 HphmN66HL$c}Ph}8 HPhmN 6HL$c}0hP8 H0hmN5HL$c}h#8 HhmN5HL$c}g7 HgmN5HL$b}g7 HgmNU5HL$b}g7 HgmN(5HL$b}go7 HgmN4HL$b}pgB7 HpgmN4HL$b}Pg7 HPgmN4HL$b}0g6 H0gmNt4HL$b}g6 HgmNG4HL$b}f6 HfmN4HL$b}fa6 HfmN3HL$b}f46 HfmN3HL$b}f6 HfmN3HL$b}pf5 HpfmNf3HL$b}Pf5 HPfmN93HL$b}0f5 H0fmN 3HL$b}fS5 HfmN2HL$b}e&5 HemN2HL$xb}e4 HemN2HL$pb}e4 HemNX2HL$hb}e4 HemN+2HL$`b}per4 HpemN1HL$Xb}PeE4 HPemN1HL$Pb}0e4 H0emN1HL$Hb}e3 HemNw1HL$@b}d3 HdmNJ1HL$8b}d3 HdmN1HL$0b}dd3 HdmN0HL$(b}d73 HdmN0HL$ b}pd 3 HpdmN0HL$b}Pd2 HPdmNi0HL$b}0d2 H0dmN<0HL$b}d2 HdmN0HL$b}cV2 HcmN/HL$a}c)2 HcmN/HL$a}c1 HcmN/HL$a}c1 HcmN[/HL$a}pc1 HpcmN./HL$a}Pcu1 HPcmN/HL$a}0cH1 H0cmN.HL$a}c1 HcmN.HL$a}b0 HbmNz.HL$a}b0 HbmNM.HT$hv@a4HT$hvHa4HT$hvPa4HT$hvXa4HT$hv`ay4HT$hvhae4HT$hvpaQ4HT$hvxa=4HT$hva)4HT$hva4HT$hva4HT$hva3HT$hva3HT$hva3HT$hva3HT$hva3HT$hwa3HT$hwau3HT$hwaa3HT$h waM3HT$hwa93HT$hwa%3HT$hwa3HT$hwa2HT$h wb2HT$h$wb2HT$h(wb2HT$h,wb2HT$h0w b2HT$h4w(b2HT$h8w0bq2HT$h4*   !"#v$l11H)H@aH@aHH3H~H7tHt$HD$>HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1aHxAHoHo=5nHo*=5nJ*HL$u} HmNRHL$t} HmN%HL$t}pl HpmNHL$t}P? HPmNHL$t}0 H0mNHL$t} HmNqHL$t} HmNDHL$t}Њ HЊmNHL$t}^ HmNHL$t}1 HmNHL$t}p HpmNHL$t}P HPmNcHL$t}0 H0mN6HL$t}} HmN HL$t}P HmNHL$t}Љ# HЉmNHL$t} HmNHL$xt} HmNUHL$pt}p HpmN(HL$ht}Po HPmN HL$`t}0B H0mN HL$Xt} HmN HL$Pt} HmNt HL$Ht}Ј HЈmNG HL$@t} HmN HL$8t}a HmN HL$0t}p4 HpmN HL$(t}P HPmN HL$ t}0 H0mNf HL$t} HmN9 HL$t} HmN HL$t}ЇS HЇmN HL$t}& HmN HL$s} HmN HL$s}p HpmNX HL$s}P HPmN+ HL$s}0r H0mN HL$s}E HmN HL$s} HmN HL$s}І HІmNw HL$s} HmNJ HL$s} HmN HL$s}pd HpmN HL$s}P7 HPmN HL$s}0 H0mN HL$s} HmNi HL$s} HmN< HL$s}Ѕ HЅmN HL$s}V HmNHL$xs}) HmNHL$ps}p HpmNHL$hs}P HPmN[HL$`s}0 H0mN.HL$Xs}u HmNHL$Ps}H HmNHL$Hs}Є HЄmNHL$@s} HmNzHL$8s} HmNMHL$0s}p HpmN HL$(s}Pg HPmNHL$ s}0: H0mNHL$s} HmNHL$s} HmNlHL$s}Ѓ HЃmN?HL$s} HmNHL$r}Y HmNHL$r}p, HpmNHL$r}P HPmNHL$r}0 H0mN^HL$r} HmN1HL$r}x HmNHL$r}ЂK HЂmNHL$r} HmNHL$r} HmN}HL$r}p HpmNPHL$r}P HPmN#HL$r}0j H0mNHL$r}= HmNHL$r} HmNHL$r}Ё HЁmNoHL$r} HmNBHL$xr} HmNHL$pr}p\ HpmNHL$hr}P/ HPmNHL$`r}0 H0mNHL$Xr} HmNaHL$Pr} HmN4HL$Hr}Ѐ{ HЀmNHL$@r}N HmNHL$8r}! HmNHL$0r}p HpmNHL$(r}P HPmNSHL$ r}0 H0mN&HL$r}m HmNHL$r}@ HmNHL$r} HmNHL$r} HmNrHL$q} HmNEHL$q}p HpmNHL$q}P_ HPmNHL$q}02 H0mNHL$q} HmNHL$q}~ H~mNdHL$q}~ H~mN7HL$q}~~ H~mN HL$q}~Q H~mNHT$hv}YHT$hv}EHT$hv}1HT$hv}HT$hv } HT$hv(}HT$hv0}HT$hv8}HT$hv@}HT$hvH}HT$hvP}HT$hvX}}HT$hv`}iHT$hvh}UHT$hvp}AHT$hvx}-HT$hw}HT$hw}HT$hw}HT$h w}HT$hw}HT$hw}HT$hw}HT$hw}HT$h w}yHT$h$w}eHT$h(w}QHT$h,w}=HT$h0w})HT$h4w}HT$h8w}HT$h4*   !"#v$l11H)H}H}HH3H~H7tHt$HD$,HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1HxAMH9 oH% o@=AnH o*=%nJ*HL$}pV HpmNHL$x}P) HPmNHL$p}0 H0mNHL$h} HmN[HL$`} HmN.HL$X}Цu HЦmNHL$P}H HmNHL$H} HmNHL$@}p HpmNzHL$8}P HPmNMHL$0}0 H0mN HL$(}g HmNHL$ }: HmNHL$}Х HХmNHL$} HmNlHL$} HmN?HL$}p HpmNHL$}PY HPmNHL$}0, H0mNHL$} HmNHL$} HmN^HL$؏}Ф HФmN1HL$Џ}x HmNHL$ȏ}K HmNHL$}p HpmNHL$}P HPmN}HL$}0 H0mNPHL$} HmN#HL$}j HmNHL$}У= HУmNHL$} HmNHL$} HmNoHL$}p HpmNBHL$x}P HPmNHL$p}0\ H0mNHL$h}/ HmNHL$`} HmNHL$X}Т HТmNaHL$P} HmN4HL$H}{ HmNHL$@}pN HpmNHL$8}P! HPmNHL$0}0 H0mNHL$(} HmNSHL$ } HmN&HL$}Сm HСmNHL$}@ HmNHL$} HmNHL$}p HpmNrHL$}P HPmNEHL$}0 H0mNHL$}_ HmNHL$}2 HmNHL$؎}Р HРmNHL$Ў} HmNdHL$Ȏ} HmN7HL$}p~ HpmN HL$}PQ HPmNHL$}0$ H0mNHL$} HmNHL$} HmNVHL$}П HПmN)HL$}p HmNHL$}C HmNHL$}p HpmNHL$x}P HPmNuHL$p}0 H0mNHHL$h} HmNHL$`}b HmNHL$X}О5 HОmNHL$P} HmNHL$H} HmNgHL$@}p HpmN:HL$8}P HPmN HL$0}0T H0mNHL$(}' HmNHL$ } HmNHL$}Н HНmNYHL$} HmN,HL$}s HmNHL$}pF HpmNHL$}P HPmNHL$}0 H0mNxHL$} HmNKHL$} HmNHL$؍}Мe HМmNHL$Ѝ}8 HmNHL$ȍ} HmNHL$}p HpmNjHL$}P HPmN=HL$}0 H0mNHL$}W HmNHL$}* HmNHL$}Л HЛmNHL$} HmN\HL$} HmN/HL$}pv HpmNHL$x}PI HPmNHL$p}0 H0mNHL$h} HmN{HL$`} HmNNHL$X}К HКmN!HL$P}h HmNHL$H}; HmNHL$@}p HpmNHL$8}P HPmNmHT$hvHT$hvȘHT$hvИHT$hvؘHT$hvHT$hv蘲HT$hvqHT$hv]HT$hvIHT$hv5HT$hv!HT$hv HT$hv HT$hv(HT$hv0HT$hv8HT$hw@HT$hwHHT$hwPHT$h wXmHT$hw`YHT$hwhEHT$hwp1HT$hwxHT$h w HT$h$wHT$h(wHT$h,wHT$h0wHT$h4wHT$h8wHT$h H`mNʹHL$X}@ H@mN蝹HL$P} H mNpHL$H}跻 HmNCHL$@}芻 HmNHL$8}] HmNHL$0}0 HmN輸HL$(} HmN菸HL$ }`ֺ H`mNbHL$}@詺 H@mN5HL$} | H mNHL$}O HmN۷HD$dH3%(uZH [ÿm H~N蠷ТmZ HТ~NvUܧ1H)HHt1HH3H~H7tHt$HD$HD$ͺH%맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)HHHH3H~H7tHt$HD$NHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S`òH dH%(HD$1聶H`òxAݲ(HnHunЦ=mHZn*=mJ*HL$}0ò H0òmNrHL$}ò蹴 HòmNEHL$}²茴 H²mNHL$}²_ H²mNHL$}²2 H²mN辱HL$}² H²mN葱HL$}p²س Hp²mNdHL$}P²諳 HP²mN7HL$}0²~ H0²mN HL$x}²Q H²mNݰHL$p}$ HmN谰HL$h} HmN胰HL$`}ʲ HmNVHL$X}蝲 HmN)HL$P}pp HpmNHL$H}PC HPmNϯHL$@}0 H0mN袯HL$8} HmNuHL$0}輱 HmNHHL$(}菱 HmNHL$ }b HmNHL$}5 HmNHL$}p HpmN蔮HL$}P۰ HPmNgHL$}0记 H0mN:HL$}聰 HmN HL$}T HmNHL$}п' HпmN賭HL$} HmN膭HL$ت}ͯ HmNYHL$Ъ}p蠯 HpmN,HL$Ȫ}Ps HPmNHL$}0F H0mNҬHL$} HmN襬HL$} HmNxHL$}о迮 HоmNKHL$}蒮 HmNHL$}e HmNHL$}p8 HpmNīHL$}P HPmN藫HL$}0ޭ H0mNjHL$x}豭 HmN=HL$p}脭 HmNHL$h}нW HнmNHL$`}* HmN趪HL$X} HmN艪HL$P}pЬ HpmN\HL$H}P裬 HPmN/HL$@}0v H0mNHL$8}I HmNթHL$0} HmN訩HL$(}м HмmN{HL$ }« HmNNHL$}蕫 HmN!HL$}ph HpmNHL$}P; HPmNǨHL$}0 H0mN蚨HL$} HmNmHL$}贪 HmN@HL$}л自 HлmNHL$}Z HmNHL$ة}- HmN蹧HL$Щ}p HpmN茧HL$ȩ}Pө HPmN_HL$}0覩 H0mN2HL$}y HmNHL$}L HmNئHL$}к HкmN諦HL$} HmN~HL$}Ũ HmNQHL$}p蘨 HpmN$HL$}Pk HPmNHL$}0> H0mNʥHL$x} HmN蝥HL$p} HmNpHL$h}й跧 HйmNCHL$`}芧 HmNHL$X}] HmNHL$P}p0 HpmN輤HL$H}P HPmN菤HL$@}0֦ H0mNbHL$8}試 HmN5HL$0}| HmNHL$(}иO HиmNۣHL$ }" HmN讣HL$} HmN聣HL$}pȥ HpmNTHL$}P蛥 HPmN'HL$}0n H0mNHL$}A HmN͢HL$} HmN蠢HL$}з HзmNsHL$}躤 HmNFHL$ب}荤 HmNHL$Ш}p` HpmNHL$Ȩ}P3 HPmN迡HL$}0 H0mN蒡HL$}٣ HmNeHL$}謣 HmN8HL$}ж HжmN HL$}R HmNޠHL$}% HmN豠HL$}p HpmN脠HL$}Pˢ HPmNWHL$}0螢 H0mN*HL$x}q HmNHT$hvyHT$hveHT$hvQHT$hv=HT$hv)HT$hvHT$hvHT$hvHT$hv٥HT$hvȴťHT$hvд豥HT$hvش蝥HT$hvല艥HT$hv贲uHT$hvaHT$hvMHT$hw9HT$hw%HT$hwHT$h wHT$hw HT$hw(դHT$hw0HT$hw8譤HT$h w@虤HT$h$wH腤HT$h(wPqHT$h,wX]HT$h0w`IHT$h4wh5HT$h8wp!HT$h H mNʒHL$@} HmN蝒HL$0}ல HலmNpHL$ }跔 HmNCHL$}芔 HmNHL$}] HmNHL$}`0 H`mN輑HL$}@ H@mN菑HL$} ֓ H mNbHL$}詓 HmN5HL$}୲| H୲mNHL$ئ}O HmNېHL$Ц}" HmN讐HL$Ȧ} HmN聐HL$}`Ȓ H`mNTHL$}@蛒 H@mN'HL$} n H mNHL$}A HmN͏HL$}ଲ HଲmN蠏HL$} HmNsHL$}躑 HmNFHL$x}荑 HmNHL$p}`` H`mNHL$h}@3 H@mN迎HL$`}  H mN蒎HL$X}ِ HmNeHL$P}૲謐 H૲mN8HL$H} HmN HL$@}R HmNލHL$8}% HmN豍HL$0}` H`mN脍HL$(}@ˏ H@mNWHL$ } 螏 H mN*HL$}q HmNHL$}લD HલmNЌHL$} HmN裌HL$} HmNvHL$}轎 HmNIHL$}`萎 H`mNHL$}@c H@mNHL$} 6 H mN‹HL$إ} HmN蕋HL$Х}ੲ܍ HੲmNhHL$ȥ}词 HmN;HL$}肍 HmNHL$}U HmNHL$}`( H`mN贊HL$}@ H@mN臊HL$} Ό H mNZHL$}行 HmN-HL$}ਲt HਲmNHL$}G HmNӉHL$} HmN覉HL$x} HmNyHL$p}` H`mNLHL$h}@蓋 H@mNHL$`} f H mNHL$X}9 HmNňHL$P}৲ H৲mN蘈HL$H}ߊ HmNkHD$dH3%(uZH [ÿYmd H~N0Т7m HТ~NUlx1H)HHt1HH3H~H7tHt$HD$HD$ͺH赁맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H̀HHH3H~H7tHt$HD$^HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S ߲H dH%(HD$1H ߲xAm踉Hn謉Hn`w=amHn*=EmJ*HL$}޲v H޲mNHL$}޲I H޲mNՂHL$}޲ H޲mN訂HL$}޲ H޲mN{HL$}p޲„ Hp޲mNNHL$}P޲蕄 HP޲mN!HL$}0޲h H0޲mNHL$}޲; H޲mNǁHL$}ݲ HݲmN蚁HL$}ݲ HݲmNmHL$}ݲ贃 HݲmN@HL$}ݲ臃 HݲmNHL$}pݲZ HpݲmNHL$}Pݲ- HPݲmN蹀HL$}0ݲ H0ݲmN茀HL$}ݲӂ HݲmN_HL$}ܲ覂 HܲmN2HL$x}ܲy HܲmNHL$p}ܲL HܲmNHL$h}ܲ HܲmNHL$`}pܲ HpܲmN~HL$X}PܲŁ HPܲmNQHL$P}0ܲ蘁 H0ܲmN$HL$H}ܲk HܲmN~HL$@}۲> H۲mN~HL$8}۲ H۲mN~HL$0}۲ H۲mNp~HL$(}۲跀 H۲mNC~HL$ }p۲芀 Hp۲mN~HL$}P۲] HP۲mN}HL$}0۲0 H0۲mN}HL$}۲ H۲mN}HL$}ڲ HڲmNb}HL$}ڲ HڲmN5}HL$}ڲ| HڲmN}HL$}ڲO HڲmN|HL$}pڲ" HpڲmN|HL$}Pڲ~ HPڲmN|HL$}0ڲ~ H0ڲmNT|HL$}ڲ~ HڲmN'|HL$}ٲn~ HٲmN{HL$}ٲA~ HٲmN{HL$}ٲ~ HٲmN{HL$}ٲ} HٲmNs{HL$}pٲ} HpٲmNF{HL$}Pٲ} HPٲmN{HL$}0ٲ`} H0ٲmNzHL$}ٲ3} HٲmNzHL$}ز} HزmNzHL$x}ز| HزmNezHL$p}ز| HزmN8zHL$h}ز| HزmN zHL$`}pزR| HpزmNyHL$X}Pز%| HPزmNyHL$P}0ز{ H0زmNyHL$H}ز{ HزmNWyHL$@}ײ{ HײmN*yHL$8}ײq{ HײmNxHL$0}ײD{ HײmNxHL$(}ײ{ HײmNxHL$ }pײz HpײmNvxHL$}Pײz HPײmNIxHL$}0ײz H0ײmNxHL$}ײcz HײmNwHL$}ֲ6z HֲmNwHL$}ֲ z HֲmNwHL$}ֲy HֲmNhwHL$}ֲy HֲmN;wHL$}pֲy HpֲmNwHL$}PֲUy HPֲmNvHL$}0ֲ(y H0ֲmNvHL$}ֲx HֲmNvHL$}ղx HղmNZvHL$}ղx HղmN-vHL$}ղtx HղmNvHL$}ղGx HղmNuHL$}pղx HpղmNuHL$}Pղw HPղmNyuHL$}0ղw H0ղmNLuHL$}ղw HղmNuHL$}Բfw HԲmNtHL$x}Բ9w HԲmNtHL$p}Բ w HԲmNtHL$h}Բv HԲmNktHL$`}pԲv HpԲmN>tHL$X}PԲv HPԲmNtHL$P}0ԲXv H0ԲmNsHL$H}Բ+v HԲmNsHL$@}Ӳu HӲmNsHL$8}Ӳu HӲmN]sHL$0}Ӳu HӲmN0sHL$(}Ӳwu HӲmNsHL$ }pӲJu HpӲmNrHL$}PӲu HPӲmNrHL$}0Ӳt H0ӲmN|rHL$}Ӳt HӲmNOrHL$}Ҳt HҲmN"rHL$}Ҳit HҲmNqHL$}ҲaHL$}@ɲc H@ɲmNaHL$} ɲXc H ɲmN`HL$}ɲ+c HɲmN`HL$}Ȳb HȲmN`HL$}Ȳb HȲmN]`HL$}Ȳb HȲmN0`HL$}Ȳwb HȲmN`HL$}`ȲJb H`ȲmN_HL$}@Ȳb H@ȲmN_HL$} Ȳa H ȲmN|_HL$}Ȳa HȲmNO_HL$}Dza HDzmN"_HL$}Dzia HDzmN^HL$}Dz4*   !"#v$l11H)H@вH@вHH3H~H7tHt$HD$NHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1WHxASHZHQn,=wm,HT${;ZHASHL$}U HmNjSHL$}U HmN=SHL$}U HmNSHL$}pWU HpmNRHL$x}P*U HPmNRHL$p}0T H0mNRHL$h}T HmN\RHL$`}T HmN/RHL$X}vT HmNRHL$P}IT HmNQHL$H}T HmNQHL$@}pS HpmN{QHL$8}PS HPmNNQHL$0}0S H0mN!QHL$(}hS HmNPHL$ };S HmNPHL$}S HmNPHL$}R HmNmPHL$}R HmN@PHL$}pR HpmNPHL$}PZR HPmNOHL$}0-R H0mNOHL$}R HmNOHL$}Q HmN_OHL$}Q HmN2OHL$}yQ HmNOHL$}LQ HmNNHL$}pQ HpmNNHL$}PP HPmN~NHL$}0P H0mNQNHL$}P HmN$NHL$}kP HmNMHL$}>P HmNMHL$}P HmNMHL$}O HmNpMHL$}pO HpmNCMHL$x}PO HPmNMHL$p}0]O H0mNLHL$h}0O HmNLHL$`}O HmNLHL$X}N HmNbLHL$P}N HmN5LHL$H}|N HmNLHL$@}pON HpmNKHL$8}P"N HPmNKHL$0}0M H0mNKHL$(}M HmNTKHL$ }M HmN'KHL$}nM HmNJHL$}AM HmNJHL$}M HmNJHL$}pL HpmNsJHL$}PL HPmNFJHL$}0L H0mNJHL$}`L HmNIHL$}3L HmNIHL$}L HmNIHL$}K HmNeIHL$}K HmN8IHL$}pK HpmN IHL$}PRK HPmNHHL$}0%K H0mNHHL$}J HmNHHL$}J HmNWHHL$}J HmN*HHL$}qJ HmNGHL$}DJ HmNGHL$}pJ HpmNGHL$x}PI HPmNvGHL$p}0I H0mNIGHL$h}I HmNGHL$`}cI HmNFHL$X}6I HmNFHL$P} I HmNFHL$H}H HmNhFHL$@}pH HpmN;FHL$8}PH HPmNFHL$0}0UH H0mNEHL$(}(H HmNEHL$ }G HmNEHL$}G HmNZEHL$}G HmN-EHL$}tG HmNEHL$}pGG HpmNDHL$}PG HPmNDHL$}0F H0mNyDHL$}F HmNLDHL$}F HmNDHL$}fF HmNCHL$}9F HmNCHL$} F HmNCHL$}pE HpmNkCHL$}PE HPmN>CHT$xxIHT$xxIHT$xxIHT$xx~IHT$xxjIHT$xxVIHT$xxBIHT$xx.IHT$xxIHT$xxIHT$xxHHT$xxHHT$xy HHT$xy(HHT$xy0HHT$x"y8HHT$x,y@zHHT$x6yHfHHT$x@yPRHHT$xJyX>HHT$xTy`*HHT$x^yhHHT$xhypHHT$xryxGHT$x|yGHT$xyGHT$xyGHT$xyGHT$xyGHT$xyvGHT$xybGHT$xyNGHT$xy:GHT$xy&GHT$xyGHT$xyFHT$xyFHT$xyFHT$xzFHT$xzFHT$xzFHT$x&zFHT$x0zrFHT$x:z^FHT$xDz JFHT$xNz(6FHT$xXz0"FHT$xbz8FHT$xlz@EHT$xvzHEH1p>UE?HT$xzEHT$xzEHT$xzEHT$xzEHT$xz qEHT$xz(]EHT$xz0IEHT$xz85EHT$xz@!EHT$xzH EHT$xzPDHT$xzXDHT$xz`DHT$x{hDHT$x {pDHT$x{xDHT$x {DHT$x*{mDHT$x4{YDHT$x>{EDHT$xH{1DHT$xR{DHT$x\{ DHT$xf{CHT$xp{CHT$xz{CHT$x{CHT$x{CHT$x{CHT$x{}CHT$x{iCHT$x{UCHT$xyACHT$xy-CHT$xyCHT$xyCHT$xy BHT$xy(BHT$xz0BHT$xz8BHT$xz@BHT$x&zHBHT$x0zPyBHT$x:zXeBHT$xDz`QBHT$xNzh=BHT$xXzp)BHT$xbzxBHT$xlzBHT$xvzAH1=UL;HT${AHA$;HT$x{@AHT${HAHT$H{PxAHT${XdAHT${`PAHT${hHT${X>HT${`>HT${h>HT${p>HT$P{x>HT${>HT$ {l>HT${X>HT${D>HT$X{0>HT${>HT$({>1H=UHyn7Hvn7Hsn7F7HL$} 9 H mN7HL$}`9 HmN6HL$}39 HmN6HL$}9 HmN6HL$}8 HmNe6HL$}8 HmN86HL$}`8 H`mN 6HL$x}@R8 H@mN5HL$p} %8 H mN5HL$h}7 HmN5HL$`}7 HmNW5HL$P}7 HmN*5HL$@}q7 HmN4HL$8}D7 HmN4HL$0}`7 H`mN4HL$(}@6 H@mNv4HL$ } 6 H mNI4HL$}6 HmN4HL$}c6 HmN3HL$}66 HmN3HL$} 6 HmN3HL$}5 HmNh3HL$}`5 H`mN;3HL$}@5 H@mN3HL$} U5 H mN2HL$}(5 HmN2HL$}4 HmN2HL$}4 HmNZ2HL$}4 HmN-2HL$}t4 HmN2HL$p}`G4 H`mN1HL$`}@4 H@mN1HL$P} 3 H mNy1HL$H}3 HmNL1HL$@}3 HmN1HL$8}f3 HmN0HL$0}93 HmN0HL$(} 3 HmN0HL$ }`2 H`mNk0HL$}@2 H@mN>0HL$} 2 H mN0HL$}X2 HmN/HL$}+2 HmN/HL$}1 HmN/HL$}1 HmN]/HL$}1 HmN0/HL$}`w1 H`mN/HL$}@J1 H@mN.HL$} 1 H mN.HL$}0 HmN|.HL$}0 HmNO.HL$}0 HmN".HL$}i0 HmN-HL$}<0 HmN-HL$}`0 H`mN-HL$}@/ H@mNn-HL$} / H mNA-HL$x}/ HmN-HL$p}[/ HmN,HL$h}./ HmN,HL$`}/ HmN,HL$X}. HmN`,HL$P}`. H`mN3,HL$H}@z. H@mN,HL$@} M. H mN+HL$8} . HmN+HL$0}- HmN+HL$(}- HmNR+HL$ }- HmN%+HL$}l- HmN*HL$}`?- H`mN*HL$}@- H@mN*HL$} , H mNq*HL$}, HmND*HL$}, HmN*HL$}^, HmN)HL$}1, HmN)HL$}, HmN)HL$}`+ H`mNc)HL$}@+ H@mN6)HL$} }+ H mN )HL$}P+ HmN(HL$}߲#+ H߲mN(HL$}߲* H߲mN(HL$}߲* H߲mNU(HL$}߲* H߲mN((HL$}`߲o* H`߲mN'HL$}@߲B* H@߲mN'HD$dH3%(uZH [ÿKmS H~N'ТKmMP HТ~Ni'11H)HHt8HH3H~H7tHt$HD$HD$ͺ/붺0H!1H)H@H@tHH3H~H7tHt$HD$@HD$ͺ붺 믺 먺 롺 뚺 듺댺녺{qg]SI?5+!+,-.#$}%s&i'_(U)K*A7-# !"%1H)HHHH3H~H7tHt$HD$6HD$ɺ&벺'뫺(뤺)띺*떺+돺,눺-끺.w/m0c1Y1 v lbXND:zpf\RH> 4!*" #$ %&'()*+,-./011ukaWMC9 / %   {qg]S I!?"5#+$!f.S H dH%(HD$1q$H xA 'H9n 'H%n=DmH n*=DmJ*HL$@}" HmNb HL$8}" HmN5 HL$0}|" HmN HL$(}O" HmNHL$ }p"" HpmNHL$}P! HPmNHL$}0! H0mNTHL$}! HmN'HL$}n! HmNHL$}A! HmNHL$}! HmNHL$} HmNsHL$}p HpmNFHL$}P HPmNHL$}0` H0mNHL$}3 HmNHL$} HmNHL$} HmNeHL$} HmN8HL$} HmN HL$}pR HpmNHL$p}P% HPmNHL$`}0 H0mNHL$P} HmNWHL$H} HmN*HL$@}q HmNHL$8}D HmNHL$0} HmNHL$ }p HpmNvHL$}P HPmNIHL$}0 H0mNHL$}c HmNHL$}6 HmNHL$}  HmNHL$} HmNhHL$} HmN;HL$}p HpmNHL$}PU HPmNHL$}0( H0mNHL$} HmNHL$} HmNZHL$} HmN-HL$}t HmNHL$}G HmNHL$}p HpmNHL$x}P HPmNyHL$p}0 H0mNLHL$`} HmNHL$P}f HmNHL$H}9 HmNHL$@}  HmNHL$8} HmNkHL$0}p HpmN>HL$(}P HPmNHL$ }0X H0mNHL$}+ HmNHL$} HmNHL$} HmN]HL$} HmN0HL$}w HmNHL$}pJ HpmNHL$}P HPmNHL$}0 H0mN|HL$} HmNOHL$} HmN"HL$}i HmNHL$}< HmNHL$} HmNHL$}p HpmNnHL$}P HPmNAHL$}0 H0mNHL$}[ HmNHL$} . H mNHL$}  H mNHL$}  H mN`HL$x}  H mN3HL$p}p z Hp mNHL$h}P M HP mNHL$`}0  H0 mNHL$X}  H mNHL$P}  H mNRHL$H}  H mN%HL$@} l H mNHL$8} ? H mNHL$0}p  Hp mNHL$(}P  HP mNqHL$ }0  H0 mNDHL$}  H mNHL$} ^ H mNHL$} 1 H mNHL$}  H mNHL$}  H mNcHL$}p  Hp mN6HL$}P } HP mN HL$}0 P H0 mNHL$} # H mNHL$}  H mNHL$}  H mNUHL$}  H mN(HL$} o H mNHL$}p B Hp mNHL$}P  HP mNHL$}0  H0 mNtHL$}  H mNGHL$}  H mNHL$} a H mN HL$} 4 H mN HL$x}  H mN HL$p}p  Hp mNf HL$h}P  HP mN9 HL$`}0  H0 mN HL$X} S H mN HL$P}& HmN HL$H} HmN HL$@} HmNX HL$8} HmN+ HL$0}pr HpmN HL$(}PE HPmN HL$ }0 H0mN HL$} HmNw HL$} HmNJ HL$} HmN HL$}d HmN HL$}7 HmN HL$}p HpmN HL$}P HPmNi HL$}0 H0mN< HL$} HmN HL$}V HmN HL$}) HmN HL$} HmN HL$} HmN[ HL$}p HpmN. HL$}Pu HPmN HL$}0H H0mNHL$} HmNHL$} HmNzHL$} HmNMHL$} HmN HL$x}g HmNHL$p}p: HpmNHL$h}P HPmNHL$`}0 H0mNlHL$X} HmN?HL$P} HmNHL$H}Y HmNHL$@}, HmNHL$8} HmNHL$0}p HpmN^HL$(}P HPmN1HL$ }0x H0mNHL$}K HmNHL$} HmNHL$} HmN}HL$} HmNPHL$} HmN#HL$}pj HpmNHL$}P= HPmNHL$}0 H0mNHL$} HmNoHL$} HmNBHL$} HmNHL$}\ HmNHL$}/ HmNHL$}p HpmNHL$}P HPmNaHL$}0 H0mN4HL$}{ HmNHL$}N HmNHL$}! HmNHL$} HmNHL$x} HmNSHL$p}p HpmN&HL$h}Pm HPmNHL$`}0@ H0mNHL$X} HmNHL$P} HmNrHL$H} HmNEHL$@} HmNHL$8}_ HmNHL$0}p2 HpmNHL$(}P HPmNHL$ }0 H0mNdHL$} HmN7HL$}~ HmN HL$}Q HmNHL$}$ HmNHL$} HmNHL$}p HpmNVHL$}P HPmN)HL$}0p H0mNHL$}C HmNHL$} HmNHL$} HmNuHT$hv@HT$hvHHT$hvPHT$hvXHT$hv`HT$hvhHT$hvpyHT$hvxeHT$hvQHT$hv=HT$hv)HT$hvHT$hvHT$hvHT$hvHT$hvHT$hwHT$hwHT$hwHT$h wuHT$hwaHT$hwMHT$hw9HT$hw%HT$h wHT$h$wHT$h(wHT$h,wHT$h0w HT$h4w(HT$h8w0HT$h4*   !"#v$l11H)H@H@HH3H~H7tHt$HD$>HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S 3H dH%(HD$1H 3xA]HɥnHnP=QmHn*=5mJ*HL$}2f H2mNHL$x}29 H2mNHL$p}2 H2mNHL$h}2 H2mNkHL$`}p2 Hp2mN>HL$X}P2 HP2mNHL$P}02X H02mNHL$H}2+ H2mNHL$@}1 H1mNHL$8}1 H1mN]HL$0}1 H1mN0HL$ }1w H1mNHL$}p1J Hp1mNHL$}P1 HP1mNHL$}01 H01mN|HL$}1 H1mNOHL$}0 H0mN"HL$}0i H0mNHL$}0< H0mNHL$}0 H0mNHL$}p0 Hp0mNnHL$}P0 HP0mNAHL$}00 H00mNHL$}0[ H0mNHL$}/. H/mNHL$}/ H/mNHL$x}/ H/mN`HL$p}/ H/mN3HL$`}p/z Hp/mNHL$P}P/M HP/mNHL$@}0/ H0/mNHL$0}/ H/mNHL$ }. H.mNRHL$}. H.mN%HL$}.l H.mNHL$}.? H.mNHL$}p. Hp.mNHL$}P. HP.mNqHL$}0. H0.mNDHL$}. H.mNHL$}-^ H-mNHL$}-1 H-mNHL$}- H-mNHL$}- H-mNcHL$}p- Hp-mN6HL$}P-} HP-mN HL$}0-P H0-mNHL$}-# H-mNHL$}, H,mNHL$}, H,mNUHL$}, H,mN(HL$x},o H,mNHL$p}p,B Hp,mNHL$h}P, HP,mNHL$`}0, H0,mNtHL$X}, H,mNGHL$P}+ H+mNHL$H}+a H+mNHL$@}+4 H+mNHL$8}+ H+mNHL$0}p+ Hp+mNfHL$(}P+ HP+mN9HL$ }0+ H0+mN HL$}+S H+mNHL$}*& H*mNHL$}* H*mNHL$}* H*mNXHL$}* H*mN+HL$}p*r Hp*mNHL$}P*E HP*mNHL$}0* H0*mNHL$}* H*mNwHL$}) H)mNJHL$}) H)mNHL$})d H)mNHL$})7 H)mNHL$}p) Hp)mNHL$}P) HP)mNiHL$}0) H0)mN4*   !"#v$l11H)H@H@HH3H~H7tHt$HD$~HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S@OH dH%(HD$1H@OxA8Hyn,Hen=lHJn+=l+躵=kmHnK+=OmHn`*=/mHܑnX*HL$ ~NHnP HNmN.HL$x ~Nu HNmNHL$p ~NH HNmNHL$h ~N HNmNHL$` ~pN HpNmNzHL$X ~PN HPNmNMHL$P ~0N H0NmN HL$H ~Ng HNmNHL$@ ~M: HMmNƿHL$8 ~M HMmN虿HL$0 ~M HMmNlHL$ ~M HMmN?HL$ ~pM HpMmNHL$ ~PMY HPMmNHL$ ~0M, H0MmN踾HL$ ~M HMmN苾HL$ ~L HLmN^HL$ ~L HLmN1HL$ ~Lx HLmNHL$ ~LK HLmN׽HL$ ~pL HpLmN誽HL$ ~PL HPLmN}HL$ ~0LĿ H0LmNPHL$ ~L藿 HLmN#HL$ ~Kj HKmNHL$ ~K= HKmNɼHL$x ~K HKmN蜼HL$p ~K HKmNoHL$` ~pK趾 HpKmNBHL$P ~PK艾 HPKmNHL$@ ~0K\ H0KmNHL$0 ~K/ HKmN軻HL$ ~J HJmN莻HL$ ~Jս HJmNaHL$ ~J訽 HJmN4HL$ ~J{ HJmNHL$ ~pJN HpJmNںHL$ ~PJ! HPJmN譺HL$ ~0J H0JmN耺HL$ ~JǼ HJmNSHL$ ~I蚼 HImN&HL$ ~Im HImNHL$ ~I@ HImN̹HL$ ~I HImN蟹HL$ ~pI HpImNrHL$ ~PI蹻 HPImNEHL$ ~0I茻 H0ImNHL$ ~I_ HImNHL$ ~H2 HHmN辸HL$ ~H HHmN葸HL$ ~Hغ HHmNdHL$x ~H諺 HHmN7HL$p ~pH~ HpHmN HL$h ~PHQ HPHmNݷHL$` ~0H$ H0HmN谷HL$X ~H HHmN胷HL$P ~Gʹ HGmNVHL$H ~G蝹 HGmN)HL$@ ~Gp HGmNHL$8 ~GC HGmN϶HL$0 ~pG HpGmN袶HL$( ~PG HPGmNuHL$ ~0G輸 H0GmNHHL$ ~G菸 HGmNHL$ ~Fb HFmNHL$ ~F5 HFmNHL$ ~F HFmN蔵HL$ ~F۷ HFmNgHL$ ~pF讷 HpFmN:HL$ ~PF職 HPFmN HL$ ~0FT H0FmNHL$ ~F' HFmN賴HL$ ~E HEmN膴HL$ ~EͶ HEmNYHL$ ~E蠶 HEmN,HL$ ~Es HEmNHL$ ~pEF HpEmNҳHL$ ~PE HPEmN襳HL$ ~0E H0EmNxHL$ ~E迵 HEmNKHL$ ~D蒵 HDmNHL$ ~De HDmNHL$ ~D8 HDmNIJHL$x ~D HDmN藲HL$p ~pD޴ HpDmNjHL$h ~PD豴 HPDmN=HL$` ~0D脴 H0DmNHL$X ~DW HDmNHL$P ~C* HCmN趱HL$H ~C HCmN艱HL$@ ~Cг HCmN\HL$8 ~C裳 HCmN/HL$0 ~pCv HpCmNHL$( ~PCI HPCmNհHL$ ~0C H0CmN訰HL$ ~C HCmN{HL$ ~B² HBmNNHL$ ~B蕲 HBmN!HL$ ~Bh HBmNHL$~B; HBmNǯHL$~pB HpBmN蚯HL$~PB HPBmNmHL$~0B贱 H0BmN@HL$~B臱 HBmNHL$~AZ HAmNHL$~A- HAmN蹮HL$~A HAmN茮HL$~AӰ HAmN_HL$~pA覰 HpAmN2HL$~PAy HPAmNHL$~0AL H0AmNحHL$~A HAmN諭HL$~@ H@mN~HL$~@ů H@mNQHL$~@蘯 H@mN$HL$x~@k H@mNHL$p~p@> Hp@mNʬHL$h~P@ HP@mN蝬HL$`~0@ H0@mNpHL$X~@跮 H@mNCHL$P~?芮 H?mNHL$H~?] H?mNHL$@~?0 H?mN輫HL$8~? H?mN菫HL$0~p?֭ Hp?mNbHL$(~P?詭 HP?mN5HL$ ~0?| H0?mNHL$~?O H?mN۪HL$~>" H>mN讪HL$~> H>mN聪HL$~>Ȭ H>mNTHL$~>蛬 H>mN'HL$~p>n Hp>mNHL$~P>A HP>mNͩHL$~0> H0>mN蠩HL$~> H>mNsHL$~=身 H=mNFHL$~=荫 H=mNHL$~=` H=mNHL$~=3 H=mN迨HL$~p= Hp=mN蒨HL$~P=٪ HP=mNeHL$~0=謪 H0=mN8HL$~= H=mN HL$~<R H<mNާHL$~<% H<mN豧HL$~< H<mN脧HL$x~<˩ H<mNWHL$p~p<螩 Hp<mN*HL$h~P<q HP<mNHL$`~0<D H0<mNЦHL$X~< H<mN裦HL$P~; H;mNvHL$H~;轨 H;mNIHL$@~;萨 H;mNHL$8~;c H;mNHL$0~p;6 Hp;mN¥HL$(~P; HP;mN蕥HL$ ~0;ܧ H0;mNhHL$~;诧 H;mN;HL$~:肧 H:mNHL$~:U H:mNHL$~:( H:mN贤HL$~: H:mN臤HL$~p:Φ Hp:mNZHL$~P:衦 HP:mN-HL$~0:t H0:mNHL$~:G H:mNӣHL$~9 H9mN覣HL$~9 H9mNyHL$~9 H9mNLHL$~9蓥 H9mNHL$~p9f Hp9mNHL$~P99 HP9mNŢHL$~09 H09mN蘢HL$~9ߤ H9mNkHL$~8貤 H8mN>HL$~8腤 H8mNHL$~8X H8mNHL$x~8+ H8mN跡HL$p~p8 Hp8mN芡HL$h~P8ѣ HP8mN]HL$`~08褣 H08mN0HL$X~8w H8mNHL$P~7J H7mN֠HL$H~7 H7mN詠HL$@~7 H7mN|HL$8~7â H7mNOHL$0~p7薢 Hp7mN"HL$(~P7i HP7mNHL$ ~07< H07mNȟHL$~7 H7mN蛟HL$~6 H6mNnHL$~6赡 H6mNAHT$hv@5轥HT$hvH5詥HT$hvP5蕥HT$hvX5聥HT$hv`5mHT$hvh5YHT$hvp5EHT$hvx51HT$hv5HT$hv5 HT$hv5HT$hv5HT$hv5ͤHT$hv5蹤HT$hv5襤HT$hv5葤HT$hw5}HT$hw5iHT$hw5UHT$h w5AHT$hw5-HT$hw5HT$hw5HT$hw5HT$h w6ݣHT$h$w6ɣHT$h(w6赣HT$h,w6衣HT$h0w 6荣HT$h4w(6yHT$h8w06eHT$h HPmNʂHL$P~pP HpPmN蝂HL$H~PP HPPmNpHL$@~0P跄 H0PmNCHL$8~P芄 HPmNHL$0~O] HOmNHL$(~O0 HOmN輁HL$ ~O HOmN菁HL$~Oփ HOmNbHL$~pO詃 HpOmN5HL$~PO| HPOmNHD$dH3%(uYHÿТl販 HТ~N΀<ͤlج H~N褀 qf.HedH%(HD$1HexA^詆H*gn蝆HgnQt=RlHfn=6lHL$p!~Peg HPemNHL$h!~0e: H0emNHL$`!~e HemNHL$X!~d HdmNlHL$P!~d賁 HdmN?HL$H!~d膁 HdmNHL$@!~dY HdmN~HL$8!~pd, HpdmN~HL$0!~Pd HPdmN~HL$(!~0dҀ H0dmN^~HL$ !~d襀 HdmN1~HL$!~cx HcmN~HL$!~cK HcmN}HL$ ~c HcmN}HL$ ~c HcmN}}HL$ ~pc HpcmNP}HL$ ~Pc HPcmN#}HL$ ~0cj H0cmN|HL$ ~c= HcmN|HL$ ~b HbmN|HL$ ~b~ HbmNo|HL$ ~b~ HbmNB|HL$ ~b~ HbmN|HL$ ~pb\~ HpbmN{HL$x ~Pb/~ HPbmN{HL$p ~0b~ H0bmN{HL$h ~b} HbmNa{HL$` ~a} HamN4{HL$P ~a{} HamN{HL$@ ~aN} HamNzHL$0 ~a!} HamNzHL$ ~pa| HpamNzHL$ ~Pa| HPamNSzHL$ ~0a| H0amN&zHL$ ~am| HamNyHL$~`@| H`mNyHL$~`| H`mNyHL$~`{ H`mNryHL$~`{ H`mNEyHL$~p`{ Hp`mNyHL$~P`_{ HP`mNxHL$~0`2{ H0`mNxHL$~`{ H`mNxHL$~_z H_mNdxHL$~_z H_mN7xHL$~_~z H_mN xHL$~_Qz H_mNwHL$~p_$z Hp_mNwHL$~P_y HP_mNwHL$x~0_y H0_mNVwHL$p~_y H_mN)wHL$h~^py H^mNvHL$`~^Cy H^mNvHL$X~^y H^mNvHL$P~^x H^mNuvHL$H~p^x Hp^mNHvHL$@~P^x HP^mNvHL$8~0^bx H0^mNuHL$0~^5x H^mNuHL$(~]x H]mNuHL$ ~]w H]mNguHL$~]w H]mN:uHL$~]w H]mN uHL$~p]Tw Hp]mNtHL$~P]'w HP]mNtHL$~0]v H0]mNtHL$~]v H]mNYtHL$~\v H\mN,tHL$~\sv H\mNsHL$~\Fv H\mNsHL$~\v H\mNsHL$~p\u Hp\mNxsHL$~P\u HP\mNKsHL$~0\u H0\mNsHL$~\eu H\mNrHL$~[8u H[mNrHL$~[ u H[mNrHL$~[t H[mNjrHL$~[t H[mN=rHL$~p[t Hp[mNrHL$~P[Wt HP[mNqHL$x~0[*t H0[mNqHL$p~[s H[mNqHL$h~Zs HZmN\qHL$`~Zs HZmN/qHL$X~Zvs HZmNqHL$P~ZIs HZmNpHL$H~pZs HpZmNpHD$dH3%(uYHÿТlR HТ~Nnp<mlx H~NDp`f.HpdH%(HD$1sHpxAoIvHan=vHanc=lHan=֓lHL$+~ppr HppmNoHL$+~Ppq HPpmNfoHL$+~0pq H0pmN9oHL$+~pq HpmN oHL$+~oSq HomNnHL$+~o&q HomNnHL$+~op HomNnHL$x+~op HomNXnHL$p+~pop HpomN+nHL$h+~Porp HPomNmHL$`+~0oEp H0omNmHL$P+~op HomNmHL$@+~no HnmNwmHL$8+~no HnmNJmHL$0+~no HnmNmHL$(+~ndo HnmNlHL$ +~pn7o HpnmNlHL$+~Pn o HPnmNlHL$+~0nn H0nmNilHL$+~nn HnmNf.DSH dH%(HD$1QHxAmMSHyfnSHefn`A=aqlHJfn>,=Eql,HL$PC~vO HmNMHL$HC~pIO HpmNLHL$@C~PO HPmNLHL$8C~0N H0mN{LHL$0C~N HmNNLHL$(C~N HmN!LHL$ C~ЖhN HЖmNKHL$C~;N HmNKHL$C~N HmNKHL$C~pM HpmNmKHL$C~PM HPmN@KHL$B~0M H0mNKHL$B~ZM HmNJHL$B~-M HmNJHL$B~ЕM HЕmNJHL$B~L HmN_JHL$B~L HmN2JHL$B~pyL HpmNJHL$B~PLL HPmNIHL$B~0L H0mNIHL$B~K HmN~IHL$B~K HmNQIHL$pB~ДK HДmN$IHL$`B~kK HmNHHL$XB~>K HmNHHL$PB~pK HpmNHHL$HB~PJ HPmNpHHL$@B~0J H0mNCHHL$0B~J HmNHHL$ B~]J HmNGHL$B~Г0J HГmNGHL$B~J HmNGHL$A~I HmNbGHL$A~pI HpmN5GHL$A~P|I HPmNGHL$A~0OI H0mNFHL$A~"I HmNFHL$A~H HmNFHL$A~ВH HВmNTFHL$A~H HmN'FHL$A~nH HmNEHL$A~pAH HpmNEHL$A~PH HPmNEHL$A~0G H0mNsEHL$A~G HmNFEHL$A~G HmNEHL$A~Б`G HБmNDHL$pA~3G HmNDHL$hA~G HmNDHL$`A~pF HpmNeDHL$XA~PF HPmN8DHL$PA~0F H0mN DHL$HA~RF HmNCHL$@A~%F HmNCHL$8A~АE HАmNCHL$0A~E HmNWCHL$(A~E HmN*CHL$ A~pqE HpmNBHL$A~PDE HPmNBHL$A~0E H0mNBHL$A~D HmNvBHL$A~D HmNIBHL$@~ЏD HЏmNBHL$@~cD HmNAHL$@~6D HmNAHL$@~p D HpmNAHL$@~PC HPmNhAHL$@~0C H0mN;AHL$@~C HmNAHL$@~UC HmN@HL$@~Ў(C HЎmN@HL$@~B HmN@HL$@~B HmNZ@HL$@~pB HpmN-@HL$@~PtB HPmN@HL$@~0GB H0mN?HL$@~B HmN?HL$@~A HmNy?HL$x@~ЍA HЍmNL?HL$p@~A HmN?HL$h@~fA HmN>HL$`@~p9A HpmN>HL$X@~P A HPmN>HL$P@~0@ H0mNk>HL$H@~@ HmN>>HL$@@~@ HmN>HL$8@~ЌX@ HЌmN=HL$0@~+@ HmN=HT${3DHA=HL$(@~? HmNb=HL$ @~p? HpmN5=HL$@~P|? HPmN=HL$@~0O? H0mN HmN HЋmNT HmN' HmN;HL$?~pA> HpmN;HL$?~P> HPmN;HL$?~0= H0mNs;HL$?~= HmNF;HL$?~= HmN;HL$?~Њ`= HЊmN:HL$?~3= HmN:HL$?~= HmN:HL$?~p< HpmNe:HL$?~P< HPmN8:HL$?~0< H0mN :HL$?~R< HmN9HL$?~%< HmN9HL$x?~Љ; HЉmN9HL$p?~; HmNW9HL$h?~; HmN*9HL$`?~pq; HpmN8HL$X?~PD; HPmN8HL$P?~0; H0mN8HL$H?~: HmNv8HL$@?~: HmNI8HL$8?~Ј: HЈmN8HL$0?~c: HmN7HL$(?~6: HmN7HL$ ?~p : HpmN7HL$?~P9 HPmNh7HL$?~09 H0mN;7HL$?~9 HmN7HL$?~U9 HmN6HL$>~Ї(9 HЇmN6HL$>~8 HmN6HL$>~8 HmNZ6HL$>~p8 HpmN-6HL$>~Pt8 HPmN6HL$>~0G8 H0mN5HL$>~8 HmN5HL$>~7 HmNy5HL$>~І7 HІmNL5HL$>~7 HmN5HL$>~f7 HmN4HL$>~p97 HpmN4HL$>~P 7 HPmN4HL$>~06 H0mNk4HL$>~6 HmN>4HL$>~6 HmN4HL$x>~ЅX6 HЅmN3HL$p>~+6 HmN3HL$h>~5 HmN3HL$`>~p5 HpmN]3HL$X>~P5 HPmN03HL$P>~0w5 H0mN3HL$H>~J5 HmN2HL$@>~5 HmN2HL$8>~Є4 HЄmN|2HL$0>~4 HmNO2HL$(>~4 HmN"2HL$ >~pi4 HpmN1HL$>~P<4 HPmN1HL$>~04 H0mN1HL$>~3 HmNn1HL$>~3 HmNA1HL$=~Ѓ3 HЃmN1HL$=~[3 HmN0HL$=~.3 HmN0HL$=~p3 HpmN0HL$=~P2 HPmN`0HL$=~02 H0mN30HL$=~z2 HmN0HL$=~M2 HmN/HL$=~Ђ 2 HЂmN/HL$=~1 HmN/HL$=~1 HmNR/HL$=~p1 HpmN%/HL$=~Pl1 HPmN.HL$=~0?1 H0mN.HL$=~1 HmN.HL$=~0 HmNq.HL$x=~Ё0 HЁmND.HL$p=~0 HmN.HL$h=~^0 HmN-HL$`=~p10 HpmN-HL$X=~P0 HPmN-HL$P=~0/ H0mNc-HL$H=~/ HmN6-HT$xx3HT$xx3HT$xx3HT$xxv3HT$xxb3HT$xxN3HT$xx:3HT$xx&3HT$xx3HT$xx2HT$xx2HT$xx2HT$xy2HT$xy2HT$xy2HT$x"y2HT$x,yr2HT$x6y^2HT$x@yJ2HT$xJy62HT$xTy "2HT$x^y(2HT$xhy01HT$xry81HT$x|y@1HT$xyH1HT$xyP1HT$xyX1HT$xy`1HT$xyhn1HT$xypZ1HT$xyxF1HT$xy21HT$xy1HT$xy 1HT$xy0HT$xy0HT$xy0HT$xz0HT$xz0HT$xz0HT$x&zȀ~0HT$x0zЀj0HT$x:z؀V0HT$xDzB0HT$xNz耳.0HT$xXz0HT$xbz0HT$xlz/HT$xvz/H1U=)HT$xz}/HT$xz}/HT$xz}/HT$xz}}/HT$xz}i/HT$xz}U/HT$xz}A/HT$xz}-/HT$xz~/HT$xz~/HT$xz~.HT$xz~.HT$xz ~.HT$x{(~.HT$x {0~.HT$x{8~.HT$x {@~y.HT$x*{H~e.HT$x4{P~Q.HT$x>{X~=.HT$xH{`~).HT$xR{h~.HT$x\{p~.HT$xf{x~-HT$xp{~-HT$xz{~-HT$x{~-HT$x{~-HT$x{~-HT$x{~u-HT$x{~a-HT$x{~M-HT$xy~9-HT$xy~%-HT$xy~-HT$xy~,HT$xy~,HT$xy~,HT$xz~,HT$xz~,HT$xz,HT$x&z,HT$x0zq,HT$x:z],HT$xDz I,HT$xNz(5,HT$xXz0!,HT$xbz8 ,HT$xlz@+HT$xvzH+H1UD%HT${}+H}A%HT$x{|+HT${|+HT$H{|p+HT${|\+HT${ |H+HT${(|4+HT${0| +HT$P{8| +HT${@|*HT$ {H|*HT${P|*HT${X|*HT$X{`|*HT${h|*HT$({p|*HT${x|l*HT${|X*HT$`{|D*HT${|0*HT$0{|*HT${|*HT${|)HT$h{|)HT${|)HT$8{|)HT${|)HT${|)HT$p{||)HT${|h)HT$@{|T)HT${|@)HT${|,)HT$x{})HT${})HT$H{}(HT${}(HT${ }(HT${(}(HT${0}(HT$P{8}(HT${@}x(HT$ {H}d(HT${P}P(HT${X}<(HT$X{`}((HT${h}(HT$({p}(1HUH1 n7H. n7H+ n7>!HD$dH3%(uZH [ÿ,El7M H~N!Т ElI HТ~N ?11H)H̀Ht8HH3H~H7tHt$HD$.[HD$ͺ/붺0H1H)H|H|tHH3H~H7tHt$HD$ZHD$ͺ붺 믺 먺 롺 뚺 듺댺녺{qg]SI?5+!+,-.#$}%s&i'_(U)K*A7-# !"%1H)H}H}HH3H~H7tHt$HD$XHD$ɺ&벺'뫺(뤺)띺*떺+돺,눺-끺.w/m0c1Y1 v lbXND:zpf\RH> 4!*" #$ %&'()*+,-./011ukaWMC9 / %   {qg]S I!?"5#+$!f.H@dH%(HD$1H@xA> H9n} H9n1=2>lH9n =>l6 HL$XL~G HmNHL$PL~ HmNHL$HL~Н HНmNyHL$@L~ HmNLHL$8L~ HmNHL$0L~pf HpmNHL$(L~P9 HPmNHL$ L~0  H0mNHL$L~ HmNkHL$L~ HmN>HL$L~М HМmNHL$L~X HmNHL$K~+ HmNHL$K~p HpmNHL$K~P HPmN]HL$K~0 H0mN0HL$K~w HmNHL$K~J HmNHL$K~Л HЛmNHL$K~ HmN|HL$K~ HmNOHL$K~p HpmN"HL$K~Pi HPmNHL$K~0< H0mNHL$K~ HmNHL$K~ HmNnHL$K~К HКmNAHL$K~ HmNHL$xK~[ HmNHL$pK~p. HpmNHL$hK~P HPmNHL$`K~0 H0mN`HL$XK~ HmN3HL$PK~z HmNHL$HK~ЙM HЙmNHL$@K~  HmNHL$8K~ HmNHL$0K~p HpmNRHL$(K~P HPmN%HL$ K~0l H0mNHL$K~? HmNHL$K~ HmNHL$K~И HИmNqHL$K~ HmNDHL$J~ HmNHL$J~p^ HpmNHL$J~P1 HPmNHL$J~0 H0mNHL$J~ HmNcHL$J~ HmN6HL$J~З} HЗmN HD$dH3%(uYHÿТ5l9 HТ~N4l< H~N f.H`dH%(HD$1H`xA^H ;nH:nQ=R4lH:n=64lHL$W~0g H0mNHL$W~: HmNHL$W~  HmNHL$W~Ш HШmNlHL$W~ HmN?HL$xW~ HmNHL$pW~pY HpmNHL$hW~P, HPmNHL$`W~0 H0mNHL$XW~ HmN^HL$PW~ HmN1HL$@W~Чx HЧmNHL$0W~K HmN HL$(W~ HmN HL$ W~p HpmN} HL$W~P HPmNP HL$W~0 H0mN# HL$W~j HmN HL$W~= HmN HL$V~Ц HЦmN HL$V~ HmNo HL$V~ HmNB HL$V~p HpmN HL$V~P\ HPmN HL$V~0/ H0mN HL$V~ HmN HL$V~ HmNa HL$V~Х HХmN4 HL$V~{ HmN HL$pV~N HmN HL$`V~p! HpmN HL$PV~P HPmN HL$@V~0 H0mNS HL$8V~ HmN& HL$0V~m HmN HL$(V~Ф@ HФmN HL$ V~ HmN HL$V~ HmNr HL$V~p HpmNE HL$V~P HPmN HL$V~0_ H0mNHL$U~2 HmNHL$U~ HmNHL$U~У HУmNdHL$U~ HmN7HL$U~~ HmN HL$U~pQ HpmNHL$U~P$ HPmNHL$U~0 H0mNHL$U~ HmNVHL$U~ HmN)HL$U~Тp HТmNHL$U~C HmNHL$U~ HmNHL$U~p HpmNuHL$xU~P HPmNHHL$pU~0 H0mNHL$hU~b HmNHL$`U~5 HmNHL$XU~С HСmNHL$PU~ HmNgHL$HU~ HmN:HL$@U~p HpmN HL$8U~PT HPmNHL$0U~0' H0mNHL$(U~ HmNHL$ U~ HmNYHL$U~Р HРmN,HL$U~s HmNHL$U~F HmNHL$U~p HpmNHL$T~P HPmNxHL$T~0 H0mNKHL$T~ HmNHL$T~e HmNHL$T~П8 HПmNHL$T~  HmNHL$T~ HmNjHL$T~p HpmN=HL$T~P HPmNHL$T~0W H0mNHL$T~* HmNHL$T~ HmNHL$T~О HОmN\HL$T~ HmN/HL$T~v HmNHL$T~pI HpmNHL$xT~P HPmNHD$dH3%(uYHÿТ$lR) HТ~Nn<m$lx, H~NDf.HdH%(HD$1HxAIH5n=H5n=#lH5n=#lHL$e~P HPmNHL$e~0 H0mNfHL$e~ HmN9HL$e~ HmN HL$e~гS HгmNHL$e~& HmNHL$e~ HmNHL$e~p HpmNXHL$e~P HPmN+HL$e~0r H0mNHL$e~E HmNHL$e~ HmNHL$pe~вHвmNwHL$he~HmNJHL$`e~HmNHL$Xe~pdHpmNHL$Pe~P7HPmNHL$He~0 H0mNHL$@e~HmNiHL$0e~HmNHJ+n}H6+n1=2lH+n=lHL$ ~ʳGHʳmNHL$~pʳHpʳmNHL$~PʳHPʳmNyHL$~0ʳH0ʳmNLHL$~ʳHʳmNHL$~~ɳfHɳmNHL$~~ɳ9HɳmNHL$~~ɳ HɳmNHL$~~ɳHɳmNkHL$~~pɳHpɳmN>HL$~~PɳHPɳmNHL$~~0ɳXH0ɳmNHL$~~ɳ+HɳmNHL$~~ȳHȳmNHL$~~ȳHȳmN]HL$~~ȳHȳmN0HL$~~ȳwHȳmNHL$~~pȳJHpȳmNHL$~~PȳHPȳmNHL$p~~0ȳH0ȳmN|HL$`~~ȳHȳmNOHL$P~~dzHdzmN"HL$@~~dziHdzmNHL$0~~dz<HdzmNHL$(~~dzHdzmNHL$ ~~pdzHpdzmNnHL$~~PdzHPdzmNAHL$~~0dzH0dzmNHL$~~dz[HdzmNHL$}~Ƴ.HƳmNHL$}~ƳHƳmNHL$}~ƳHƳmN`HL$}~ƳHƳmN3HL$}~pƳzHpƳmNHL$}~PƳMHPƳmNHL$}~0Ƴ H0ƳmNHL$}~ƳHƳmNHL$}~ųHųmNRHL$}~ųHųmN%HL$}~ųlHųmNHL$}~ų?HųmNHL$x}~pųHpųmNHL$p}~PųHPųmNqHL$h}~0ųH0ųmNDHL$`}~ųHųmNHL$X}~ij^HijmNHL$P}~ij1HijmNHL$@}~ijHijmNHL$0}~ijHijmNcHL$(}~pijHpijmN6HL$ }~Pij}HPijmN HL$}~0ijPH0ijmNHL$}~ij#HijmNHL$}~óHómNHL$}~óHómNUHL$|~óHómN(HL$|~óoHómNHL$|~póBHpómNHL$|~PóHPómNHL$|~0óH0ómNtHL$|~óHómNGHL$|~³H³mNHL$|~³aH³mNHL$|~³4H³mNHL$|~³H³mNHL$|~p³Hp³mNfHL$|~P³HP³mN9HL$|~0³H0³mN HL$|~³SH³mNHL$|~&HmNHL$|~HmNHL$x|~HmNXHL$p|~HmN+HL$h|~prHpmNHL$`|~PEHPmNHL$X|~0H0mNHL$P|~HmNwHL$H|~HmNJHL$@|~HmNHL$8|~dHmNHL$0|~7HmNHL$(|~p HpmNHL$ |~PHPmNiHL$|~0H0mNHL$p~pгHpгmNHL$h~PгXHPгmNHL$`~0г+H0гmNHL$X~гHгmNHL$P~ϳHϳmN]HL$@~ϳHϳmN0HL$0~ϳwHϳmNHL$(~ϳJHϳmNHL$ ~pϳHpϳmNHL$~PϳHPϳmN|HL$~0ϳH0ϳmNOHL$~ϳHϳmN"HL$~γiHγmNHL$~γ<HγmNHL$~γHγmNHL$~γHγmNnHL$~pγHpγmNAHL$؇~PγHPγmNHL$Ї~0γ[H0γmNHL$ȇ~γ.HγmNHL$~ͳHͳmNHL$~ͳHͳmN`HL$~ͳHͳmN3HL$~ͳzHͳmNHL$~pͳMHpͳmNHL$~Pͳ HPͳmNHL$~0ͳH0ͳmNHL$~ͳHͳmNRHL$~̳H̳mN%HL$x~̳lH̳mNHL$p~̳?H̳mNHL$h~̳H̳mNHL$`~p̳Hp̳mNqHL$X~P̳HP̳mNDHL$P~0̳H0̳mNHL$H~̳^H̳mNHL$@~˳1H˳mNHL$8~˳H˳mNHL$0~˳H˳mNcHL$(~˳H˳mN6HL$ ~p˳}Hp˳mN HL$~P˳PHP˳mNܿHL$~0˳#H0˳mN诿HL$~˳H˳mN肿HL$~ʳHʳmNUHL$~ʳHʳmN(HD$dH3%(uYHÿТkHТ~N<kH~Nľ*f.HdH%(HD$1"HxA~H nH nq=rkH n=VkHL$~HmNHL$ؔ~ZHmNHL$Д~-HmN蹽HL$Ȕ~pHpmN茽HL$~PӿHPmN_HL$~0覿H0mN2HL$~yHmNHL$~߳LH߳mNؼHL$~߳H߳mN諼HL$~߳H߳mN~HL$~߳žH߳mNQHL$~p߳蘾Hp߳mN$HL$p~P߳kHP߳mNHL$h~0߳>H0߳mNʻHL$`~߳H߳mN蝻HL$X~޳H޳mNpHL$P~޳跽H޳mNCHL$H~޳芽H޳mNHL$@~޳]H޳mNHL$0~p޳0Hp޳mN輺HL$ ~P޳HP޳mN菺HL$~0޳ּH0޳mNbHL$~޳詼H޳mN5HL$~ݳ|HݳmNHL$~ݳOHݳmN۹HL$~ݳ"HݳmN讹HL$ؓ~ݳHݳmN聹HL$Г~pݳȻHpݳmNTHL$~Pݳ蛻HPݳmN'HL$~0ݳnH0ݳmNHL$~ݳAHݳmN͸HL$~ܳHܳmN蠸HL$~ܳHܳmNsHL$x~ܳ躺HܳmNFHL$p~ܳ荺HܳmNHL$h~pܳ`HpܳmNHL$`~Pܳ3HPܳmN迷HL$X~0ܳH0ܳmN蒷HL$P~ܳٹHܳmNeHL$H~۳謹H۳mN8HL$@~۳H۳mN HL$8~۳RH۳mN޶HL$0~۳%H۳mN豶HL$(~p۳Hp۳mN脶HL$ ~P۳˸HP۳mNWHL$~0۳螸H0۳mN*HL$~۳qH۳mNHL$~ڳDHڳmNеHL$~ڳHڳmN裵HL$~ڳHڳmNvHL$~ڳ轷HڳmNIHL$ؒ~pڳ萷HpڳmNHL$В~PڳcHPڳmNHL$Ȓ~0ڳ6H0ڳmN´HL$~ڳ HڳmN蕴HL$~ٳܶHٳmNhHL$~ٳ诶HٳmN;HL$~ٳ肶HٳmNHL$~ٳUHٳmNHL$~pٳ(HpٳmN贳HL$~PٳHPٳmN至HL$~0ٳεH0ٳmNZHL$~ٳ衵HٳmN-HL$x~سtHسmNHL$p~سGHسmNӲHL$h~سHسmN覲HL$`~سHسmNyHL$X~pسHpسmNLHL$P~Pس蓴HPسmNHL$H~0سfH0سmNHL$@~س9HسmNűHL$8~׳ H׳mN蘱HL$0~׳߳H׳mNkHL$(~׳貳H׳mN>HL$ ~׳腳H׳mNHL$~p׳XHp׳mNHL$~P׳+HP׳mN跰HL$~0׳H0׳mN芰HL$~׳ѲH׳mN]HL$~ֳ褲HֳmN0HL$~ֳwHֳmNHL$~ֳJHֳmN֯HL$~ֳHֳmN詯HL$ؑ~pֳHpֳmN|HL$Б~PֳñHPֳmNOHL$ȑ~0ֳ薱H0ֳmN"HL$~ֳiHֳmNHL$~ճ<HճmNȮHD$dH3%(uYHÿТkrHТ~N莮<kH~Ndʞf.H dH%(HD$1±H xAiHn]Hvn=kH[n=kHL$~'HmN賭HL$ؠ~HmN膭HL$Р~ͯHmNYHL$Ƞ~蠯HmN,HL$~psHpmNHL$~PFHPmNҬHL$~0H0mN襬HL$~HmNxHL$~迮HmNKHL$~蒮HmNHL$~eHmNHL$~8HmNīHL$p~p HpmN藫HL$h~PޭHPmNjHL$`~0豭H0mN=HL$X~脭HmNHL$P~WHmNHL$H~*HmN趪HL$@~HmN艪HL$0~ЬHmN\HL$ ~p裬HpmN/HL$~PvHPmNHL$~0IH0mNթHL$~HmN訩HL$~HmN{HL$~«HmNNHL$؟~蕫HmN!HL$П~hHmNHL$~p;HpmNǨHL$~PHPmN蚨HL$~0H0mNmHL$~贪HmN@HL$~自HmNHL$x~ZHmNHL$p~-HmN蹧HL$h~HmN茧HL$`~pөHpmN_HL$X~P覩HPmN2HL$P~0yH0mNHL$H~LHmNئHL$@~HmN諦HL$8~HmN~HL$0~ŨHmNQHL$(~蘨HmN$HL$ ~pkHpmNHL$~P>HPmNʥHL$~0H0mN蝥HL$~HmNpHL$~跧HmNCHL$~芧HmNHL$~]HmNHL$؞~0HmN輤HL$О~pHpmN菤HL$Ȟ~P֦HPmNbHL$~0試H0mN5HL$~|HmNHL$~OHmNۣHL$~"HmN讣HL$~HmN聣HL$~ȥHmNTHL$~p蛥HpmN'HL$~PnHPmNHL$~0AH0mN͢HL$x~HmN蠢HL$p~HmNsHL$h~躤HmNFHL$`~荤HmNHL$X~`HmNHL$P~p3HpmN迡HL$H~PHPmN蒡HL$@~0٣H0mNeHL$8~謣HmN8HL$0~HmN HL$(~RHmNޠHL$ ~%HmN豠HL$~HmN脠HL$~pˢHpmNWHL$~P螢HPmN*HL$~0qH0mNHL$~DHmNПHL$~HmN裟HL$~HmNvHL$~轡HmNIHL$؝~萡HmNHL$Н~pcHpmNHL$ȝ~P6HPmNžHL$~0 H0mN蕞HL$~ܠHmNhHD$dH3%(uYHÿТ_kHТ~N.<-k8H~Njf.H@dH%(HD$1bH@xA辝 HJnH6n豑=kHn=kHL$~ǟHmNSHL$ث~蚟HmN&HL$Ы~mHmNHL$ȫ~@HmN̜HL$~HmN蟜HL$~pHpmNrHL$~P蹞HPmNEHL$~0茞H0mNHL$~_HmNHL$~2HmN辛HL$~HmN葛HL$~؝HmNdHL$p~諝HmN7HL$h~p~HpmN HL$`~PQHPmNݚHL$X~0$H0mN谚HL$P~HmN胚HL$H~ʜHmNVHL$@~蝜HmN)HL$0~pHmNHL$ ~CHmNϙHL$~pHpmN袙HL$~PHPmNuHL$~0輛H0mNHHL$~菛HmNHL$~bHmNHL$ت~5HmNHL$Ъ~HmN蔘HL$~ۚHmNgHL$~p讚HpmN:HL$~P聚HPmN HL$~0TH0mNHL$~'HmN賗HL$x~HmN膗HL$p~͙HmNYHL$h~蠙HmN,HL$`~sHmNHL$X~pFHpmNҖHL$P~PHPmN襖HL$H~0H0mNxHL$@~还HmNKHL$8~蒘HmNHL$0~eHmNHL$(~8HmNĕHL$ ~ HmN藕HL$~pޗHpmNjHL$~P豗HPmN=HL$~0脗H0mNHL$~WHmNHL$~*HmN趔HL$~HmN艔HL$ة~ЖHmN\HL$Щ~裖HmN/HL$ȩ~pvHpmNHL$~PIHPmNՓHL$~0H0mN訓HL$~HmN{HL$~•HmNNHL$~蕕HmN!HL$~hHmNHL$~;HmNǒHL$~pHpmN蚒HL$~PHPmNmHL$x~0贔H0mN@HL$p~臔HmNHL$h~ZHmNHL$`~-HmN蹑HL$X~HmN茑HL$P~ӓHmN_HL$H~p覓HpmN2HL$@~PyHPmNHL$8~0LH0mNؐHL$0~HmN諐HL$(~HmN~HL$ ~ŒHmNQHL$~蘒HmN$HL$~kHmNHL$~p>HpmNʏHL$~PHPmN蝏HL$~0H0mNpHL$~跑HmNCHL$~芑HmNHL$~]HmNHL$ب~0HmN輎HL$Ш~HmN菎HL$Ȩ~p֐HpmNbHL$~P詐HPmN5HL$~0|H0mNHD$dH3%(uYHÿТk貶HТ~N΍<ͱkعH~N褍 ~f.H`dH%(HD$1H`xA^詓H n蝓HnQ=RkHn=6kHL$`~0gH0mNHL$X~:HmNƌHL$P~ HmN虌HL$H~HmNlHL$@~賎HmN?HL$8~膎HmNHL$0~pYHpmNHL$(~P,HPmN踋HL$ ~0H0mN苋HL$~ҍHmN^HL$~襍HmN1HL$~xHmNHL$~KHmN׊HL$~HmN誊HL$~pHpmN}HL$ض~PČHPmNPHL$ж~0藌H0mN#HL$ȶ~jHmNHL$~=HmNɉHL$~HmN蜉HL$~HmNoHL$~趋HmNBHL$~p艋HpmNHL$p~P\HPmNHL$h~0/H0mN軈HL$`~HmN莈HL$X~ՊHmNaHL$P~訊HmN4HL$@~{HmNHL$0~NHmNڇHL$ ~p!HpmN譇HL$~PHPmN耇HL$~0ljH0mNSHL$~蚉HmN&HL$~mHmNHL$~@HmN̆HL$~HmN蟆HL$ص~HmNrHL$е~p蹈HpmNEHL$ȵ~P茈HPmNHL$~0_H0mNHL$~2HmN辅HL$~HmN葅HL$~؇HmNdHL$~談HmN7HL$~~HmN HL$~pQHpmN݄HL$~P$HPmN谄HL$p~0H0mN胄HL$h~ʆHmNVHL$`~蝆HmN)HL$X~pHmNHL$P~CHmNσHL$H~HmN袃HL$@~pHpmNuHL$8~P輅HPmNHHL$0~0菅H0mNHL$(~bHmNHL$ ~5HmNHL$~HmN蔂HL$~ۄHmNgHL$~讄HmN:HL$~p聄HpmN HL$~PTHPmNHL$~0'H0mN賁HL$~HmN膁HL$~̓HmNYHL$ش~蠃HmN,HL$д~sHmNHL$ȴ~FHmNҀHL$~pHpmN襀HL$~PHPmNxHL$~0迂H0mNKHL$~蒂HmNHL$~eHmNHL$~8HmNHL$~ HmNHL$~ށHmNjHL$~p豁HpmN=HL$x~P脁HPmNHL$p~0WH0mN~HL$h~*HmN~HL$`~HmN~HL$X~ЀHmN\~HL$P~裀HmN/~HL$H~vHmN~HL$@~pIHpmN}HL$8~PHPmN}HD$dH3%(uYHÿТkRHТ~Nn}<mkxH~ND}mf.S H dH%(HD$1血H xA|HHinvHL$H~PxHPmNvHL$@~0XxH0mNuHL$8~+xHmNuHL$0~wHmNuHL$(~wHmN]uHL$ ~wHmN0uHL$~wwHmNuHL$~pJwHpmNtHL$~PwHPmNtHL$~0vH0mN|tHL$~vHmNOtHL$~vHmN"tHL$~ivHmNsHL$~4*   !"#v$l11H)H@H@HH3H~H7tHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S9H dH%(HD$11QH9xAMSHnSHnA=qkHn*=eqkJ*HL$0~9OH9mN"MHL$(~9iOH9mNLHL$ ~p9HL$~p/,AHp/mN>HL$~P/@HP/mN>HL$~0/@H0/mN^>HL$~/@H/mN1>HL$~.x@H.mN>HL$x~.K@H.mN=HL$p~.@H.mN=HL$h~.?H.mN}=HL$`~p.?Hp.mNP=HL$X~P.?HP.mN#=HL$P~0.j?H0.mNH-mNoH-mNBH-mNHp-mN;HL$~P-/>HP-mN;HL$~0->H0-mN;HL$~-=H-mNa;HL$~,=H,mN4;HL$~,{=H,mN;HL$~,N=H,mN:HL$~,!=H,mN:HT$hv+)AHT$hv+AHT$hv+AHT$hv+@HT$hv +@HT$hv(+@HT$hv0+@HT$hv8+@HT$hv@+@HT$hvH+u@HT$hvP+a@HT$hvX+M@HT$hv`+9@HT$hvh+%@HT$hvp+@HT$hvx+?HT$hw+?HT$hw+?HT$hw+?HT$h w+?HT$hw+?HT$hw+?HT$hw+q?HT$hw+]?HT$h w+I?HT$h$w+5?HT$h(w+!?HT$h,w+ ?HT$h0w+>HT$h4w+>HT$h8w+>HT$hHT$h@w,>HT$hDw,>HT$hHw,>HT$hLw,m>HT$hPw ,Y>HT$hTw(,E>HT$hXw0,1>HT$h\w8,>HT$h`w@, >HT$hdwH,=HT$hhwP,=HT$hlwX,=HT$hpw`,=HT$htwh,=HT$hxwp,=HT$h|wx,}=HT$hw,i=HT$hw,U=H1:W6HT$hw@)0=HT$hwH)=HT$hwP)=HT$hwX)4*   !"#v$l11H)H+H+HH3H~H7tHt$HD$.HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SUH dH%(HD$1!HUxAh$H)m\$Hm=BkHm+=Ak+=ukHmK+=ukHm`*=_ukHmX*HL$~pUH_mPHpUmN^HL$~PUHPUmN1HL$~0UxH0UmNHL$~UKHUmNHL$~THTmNHL$~THTmN}HL$~THTmNPHL$x~THTmN#HL$p~pTjHpTmNHL$h~PT=HPTmNHL$`~0TH0TmNHL$X~THTmNoHL$P~SHSmNBHL$H~SHSmNHL$@~S\HSmNHL$8~S/HSmNHL$0~pSHpSmNHL$(~PSHPSmNaHL$ ~0SH0SmN4HL$~S{HSmNHL$~RNHRmNHL$~R!HRmNHL$~RHRmNHL$~RHRmNSHL$~pRHpRmN&HL$~PRmHPRmNHL$~0R@H0RmNHL$~RHRmNHL$~QHQmNrHL$~QHQmNEHL$~QHQmNHL$~Q_HQmNHL$~pQ2HpQmNHL$~PQHPQmNHL$~0QH0QmNdHL$~QHQmN7HL$~P~HPmN HL$~PQHPmNHL$~P$HPmNHL$x~PHPmNHL$p~pPHpPmNVHL$h~PPHPPmN)HL$`~0PpH0PmNHL$X~PCHPmNHL$P~OHOmNHL$H~OHOmNuHL$@~OHOmNHHL$8~OHOmNHL$0~pObHpOmNHL$(~PO5HPOmNHL$ ~0OH0OmNHL$~OHOmNgHL$~NHNmN:HL$~NHNmN HL$~NTHNmNHL$~N'HNmNHL$~pNHpNmNHL$~PNHPNmNYHL$~0NH0NmN,HL$~NsHNmNHL$~MFHMmNHL$~MHMmNHL$~MHMmNxHL$~MHMmNKHL$~pMHpMmNHL$~PMeHPMmNHL$~0M8H0MmNHL$~M HMmNHL$~LHLmNjHL$~LHLmN=HL$~LHLmNHL$x~LWHLmNHL$p~pL*HpLmNHL$h~PLHPLmNHL$`~0LH0LmN\HL$X~LHLmN/HL$P~KvHKmNHL$H~KIHKmNHL$@~KHKmNHL$8~KHKmN{HL$0~pKHpKmNNHL$(~PKHPKmN!HL$ ~0KhH0KmNHL$~K;HKmNHL$~JHJmNHL$~JHJmNmHL$~JHJmN@HL$~JHJmNHL$~pJZHpJmN HL$~PJ-HPJmN HL$~0JH0JmN HL$~JHJmN_ HL$~IHImN2 HL$~IyHImN HL$~ILHImN HL$~IHImN HL$~pIHpImN~ HL$~PIHPImNQ HL$~0IH0ImN$ HL$~IkHImN HL$~H>HHmN HL$~HHHmN HL$~H HHmNp HL$x~H HHmNC HL$p~pH HpHmN HL$h~PH] HPHmN HT$hvFeHT$hvFQHT$hvF=HT$hvF)HT$hvFHT$hvFHT$hvFHT$hvFHT$hvGHT$hvGHT$hvGHT$hvGHT$hv GuHT$hv(GaHT$hv0GMHT$hv8G9HT$hw@G%HT$hwHGHT$hwPGHT$h wXGHT$hw`GHT$hwhGHT$hwpGHT$hwxGHT$h wGHT$h$wGqHT$h(wG]HT$h,wGIHT$h0wG5HT$h4wG!HT$h8wG HT$hH>mN2HL$h~>yH>mNHL$`~>LH>mNHL$X~>H>mNHL$P~`>H`>mN~HL$H~@>H@>mNQHL$@~ >H >mN$HL$8~>kH>mNHL$0~=>H=mNHL$(~=H=mNHL$ ~=H=mNpHL$~=H=mNCHL$~`=H`=mNHL$~@=]H@=mNHL$~ =0H =mNHL$~=H=mNHL$~<H<mNbHL$~<H<mN5HL$~<|H<mNHL$~<OH<mNHL$~`<"H`<mNHL$~@<H@<mNHL$~ <H <mNTHL$~<H<mN'HL$~;nH;mNHL$~;AH;mNHL$~;H;mNHL$~;H;mNsHL$~`;H`;mNFHL$~@;H@;mNHL$~ ;`H ;mNHL$x~;3H;mNHL$p~:H:mNHL$h~:H:mNeHL$`~:H:mN8HL$X~:H:mN HL$P~`:RH`:mNHL$H~@:%H@:mNHL$@~ :H :mNHL$8~:H:mNW=Jk=Jk=Jk^=Jk=JkuHPֱ}PJkHD$dH3%(yH [ÿXֱ{=XֱYHPp}P`ֱF`ֱ$HX}PhֱhֱH`}PKHQֱ}PIk+*k5H~NТkHТ~NHRֱ}PTIkHSֱ}PHYmNHL$~XHXmNHL$~XHXmNpHL$~XHXmNCHL$~XHXmNHL$~pX]HpXmNHL$~PX0HPXmNHL$~0XH0XmNHL$~XHXmNbHL$~WHWmN5HL$~W|HWmNHL$~WOHWmNHL$~W"HWmNHL$~pWHpWmNHL$~PWHPWmNTHL$~0WH0WmN'HL$~WnHWmNHL$~VAHVmNHL$x~VHVmNHL$p~VHVmNsHL$h~VHVmNFHL$`~pVHpVmNHL$X~PV`HPVmNHL$P~0V3H0VmNHL$H~VHVmNHL$@~UHUmNeHL$8~UHUmN8HD$dH3%(uYHÿТ/kHТ~N<k H~N:f.HldH%(HD$12HlxAHmHm=kHm=fkHL$~kHkmN#HL$~kjHkmNHL$~k=HkmNHL$~pkHpkmNHL$~PkHPkmNoHL$~0kH0kmNBHL$~kHkmNHL$~j\HjmNHL$~j/HjmNHL$~jHjmNHL$~jHjmNaHL$~pjHpjmN4HL$p~Pj{HPjmNHL$h~0jNH0jmNHL$`~j!HjmNHL$X~iHimNHL$P~iHimNSHL$H~iHimN&HL$@~imHimNHL$0~pi@HpimNHL$ ~PiHPimNHL$~0iH0imNrHL$~iHimNEHL$~hHhmNHL$~h_HhmNHL$~h2HhmNHL$~hHhmNHL$~phHphmNdHL$~PhHPhmN7HL$~0h~H0hmN HL$~hQHhmNHL$~g$HgmNHL$~gHgmNHL$x~gHgmNVHL$p~gHgmN)HL$h~pgpHpgmNHL$`~PgCHPgmNHL$X~0gH0gmNHL$P~gHgmNuHL$H~fHfmNHHL$@~fHfmNHL$8~fbHfmNHL$0~f5HfmNHL$(~pfHpfmNHL$ ~PfHPfmNgHL$~0fH0fmN:HL$~fHfmN HL$~eTHemNHL$~e'HemNHL$~eHemNHL$~eHemNYHL$~peHpemN,HL$~PesHPemNHL$~0eFH0emNHL$~eHemNHL$~dHdmNxHL$~dHdmNKHL$~dHdmNHL$~deHdmNHL$~pd8HpdmNHL$~Pd HPdmNHL$~0dH0dmNjHL$~dHdmN=HL$x~cHcmNHL$p~cWHcmNHL$h~c*HcmNHL$`~cHcmNHL$X~pcHpcmN\HL$P~PcHPcmN/HL$H~0cvH0cmNHL$@~cIHcmNHL$8~bHbmNHL$0~bHbmN{HL$(~bHbmNNHL$ ~bHbmN!HL$~pbhHpbmNHL$~Pb;HPbmNHL$~0bH0bmNHL$~bHbmNmHL$~aHamN@HL$~aHamNHL$~aZHamNHL$~a-HamNHL$~paHpamNHL$~PaHPamN_HL$~0aH0amN2HL$~ayHamNHL$~`LH`mNHD$dH3%(uYHÿТjHТ~N<jH~Ntڼf.H wdH%(HD$1H wxA.yHmmHm!="jHkm=jHL$ v7HvmNHL$v HvmNHL$vHvmNiHL$vHvmN<=jHH~Nzf.H`dH%(HD$1rH`xAλHzm Hfm=jHKm/=jHL$` 0׽H0mNcHL$X 誽HmN6HL$P }HmN HL$H ЁPHЁmNܺHL$@ #HmN诺HL$8 HmN肺HL$0 pɼHpmNUHL$( P蜼HPmN(HL$ 0oH0mNHL$ BHmNιHL$ HmN衹HL$ ЀHЀmNtHL$ 軻HmNGHL$ 莻HmNHL$ paHpmNHL$ P4HPmNHL$ 0H0mN蓸HL$ ںHmNfHL$ 譺HmN9HL$ 耺HmN HL$ SHmN߷HL$ &HmN買HL$ pHpmN腷HL$p P̹HPmNXHL$h 0蟹H0mN+HL$` rHmNHL$X ~EH~mNѶHL$P ~H~mN褶HL$@ ~H~mNwHL$0 ~辸H~mNJHL$ p~葸Hp~mNHL$ P~dHP~mNHL$ 0~7H0~mNõHL$ ~ H~mN薵HL$ }ݷH}mNiHL$ }谷H}mNHЩmNʡHL$XHmN蝡HL$PHmNpHL$Hp跣HpmNCHL$@P芣HPmNHL$00]H0mNHL$(0HmN輠HL$ HmN菠HL$Ш֢HШmNbHL$詢HmN5HL$|HmNHL$pOHpmN۟HL$P"HPmN讟HL$0H0mN聟HL$ȡHmNTHL$蛡HmN'HL$ЧnHЧmNHL$AHmN͞HL$HmN蠞HL$pHpmNsHL$P躠HPmNFHL$0荠H0mNHL$`HmNHL$3HmN违HL$ЦHЦmN蒝HL$ٟHmNeHL$謟HmN8HL$pHpmN HL$xPRHPmNޜHL$p0%H0mN豜HL$hHmN脜HL$`˞HmNWHL$XХ螞HХmN*HL$PqHmNHL$HDHmNЛHL$@pHpmN裛HL$8PHPmNvHL$00轝H0mNIHL$(萝HmNHL$ cHmNHL$Ф6HФmNšHL$ HmN蕚HL$ܜHmNhHL$p诜HpmN;HL$P肜HPmNHL$0UH0mNHT${(]H(A蹙HL$HmN茙HL$ӛHmN_HL$У覛HУmN2HL$yHmNHL$LHmNؘHL$pHpmN諘HL$PHPmN~HL$0ŚH0mNQHL$蘚HmN$HL$kHmNHL$Т>HТmNʗHL$HmN蝗HL$HmNpHL$p跙HpmNCHL$xP芙HPmNHL$p0]H0mNHL$h0HmN輖HL$`HmN菖HL$XС֘HСmNbHL$P詘HmN5HL$H|HmNHL$@pOHpmNەHL$8P"HPmN讕HL$00H0mN聕HL$(ȗHmNTHL$ 蛗HmN'HL$РnHРmNHL$AHmN͔HL$HmN蠔HL$pHpmNsHL$P躖HPmNFHL$0荖H0mNHL$`HmNHL$3HmN迓HL$ПHПmN蒓HL$ٕHmNeHL$謕HmN8Hپp聕HpmN HپPVHPmNHپ0+H0mN跒HپHmN茒HپՔHmNaHپО誔HОmN6HپHmN HپTHmNHپp)HpmN赑HپxPHPmN芑Hپp0ӓH0mN_Hپh訓HmN4Hپ`}HmN HپXНRHНmNސHپP'HmN賐HپHHmN舐Hپ@pђHpmN]Hپ8P覒HPmN2Hپ00{H0mNHپ(PHmN܏Hپ %HmN豏HپМHМmN膏HپϑHmN[Hپ褑HmN0HپpyHpmNHپPNHPmNڎHپ0#H0mN诎HپHmN脎Hپ͐HmNYHپЛ袐HЛmN.HپwHmNHپLHmN؍Hپp!HpmN譍HپPHPmN肍Hپ0ˏH0mNWHپ蠏HmN,HپuHmNHپКJHКmN֌HپHmN諌HپHmN而HپpɎHpmNUHپxP螎HPmN*Hپp0sH0mNHپhHHmNԋHپ`HmN詋HپXЙHЙmN~HپPǍHmNSHپH蜍HmN(Hپ@pqHpmNHپ8PFHPmNҊHپ00H0mN觊Hپ(HmN|Hپ ŌHmNQHپИ蚌HИmN&HپoHmNHپDHmNЉHھxxNHھxx{ؕcHھxH{QHھxR{蕴?Hھx\{-Hھxf{Hھxp{ Hھxz{Hھx{Hھx{ӊHھx{ Hھx{(诊Hھx{0蝊Hھx{8苊Hھxy@yHھxyHgHھxyPUHھxyXCHھxy`1HھxyhHھxzp HھxzxHھxzHھx&z׉Hھx0zʼnHھx:z賉HھxDz衉HھxNz菉HھxXz}HھxbzkHھxlzYHھxvzȖGH1JX覂Hھ{$HA耂Hھx{Hھ{HھH{ڈHھ{ȈHھ{趈Hھ{褈Hھ{蒈HھP{耈Hھ{nHھ {ȓ\Hھ{ГJHھ{ؓ8HھX{&Hھ{蓴Hھ({Hھ{Hھ{އHھ`{̇Hھ{躇Hھ0{訇Hھ{ 薇Hھ{(脇Hھh{0rHھ{8`Hھ8{@NHھ{HoHھhw(,oHھhw0oHھhw8oHھhw@nHھhwHnHھhwPnHھhwXnHھhw`nHھhwhnHھhwpnHھhwxxnHھhwfnHھhwTnHھhwBnHھhw0nHھhwnHھhw nHھhxmHھhxmHھhxmHھh xȃmHھhxЃmHھhx؃mHھhxmHھhx胴|mHھh xjmHھh$xXmHھh(xFmHھh,x4mHھh0x"mHھh4xmHھh8x lHھhТj[HТ~NweU11H)H,Ht7HHMHyH7tHHD$0HD$κ/뷺0H _+롺,뚺-듺.댺1H)H,HtHHMHyH7tHHD$40HD$κ 뷺 밺 멺 뢺 뛺딺덺놺|rh^TJ@6," !"#$%&'()*+x,n-d.Z/P0F1<1ҹ1H)H,̀HHHMHyH7tHHD$j.HD$ʺ볺묺륺랺뗺됺뉺낺 x n d Z PF<2(  !"~#t$j%`&V'L(B)8*.+$,-./011H)H,̀HHHMHyH7tHHD$M,HD$ʺ볺묺륺랺뗺 됺 뉺 낺 x ndZPF<2(1*  #a$W%M&C'9(/)%* !"{%1H)H,@H@HHMHyH7tHHD$*HD$ʺ&볺'묺(륺)랺*뗺+됺,뉺-낺.x/n0d1Z1y o e [ Q G=3)g]SI?5+! !"#$%&'()*+,-./w0m1c1vlbXND: 0 &   |rh^T J!@"6#,$"+f.HdH%(HD$1b^HxAZ aHʑm`HmN=~jHm =~j6 HL$&\HmNSZHL$&p\HpmN&ZHL$x&Pm\HPmNYHL$p&0@\H0mNYHL$h&\HmNYHL$`&[HmNrYHL$X&д[HдmNEYHL$P&[HmNYHL$H&_[HmNXHL$@&p2[HpmNXHL$8&P[HPmNXHL$0&0ZH0mNdXHL$(&ZHmN7XHL$ &~ZHmN XHL$&гQZHгmNWHL$&$ZHmNWHL$&YHmNWHL$&pYHpmNVWHL$%PYHPmN)WHL$%0pYH0mNVHL$%CYHmNVHL$%YHmNVHL$%вXHвmNuVHL$%XHmNHVHL$%XHmNVHL$%pbXHpmNUHL$%P5XHPmNUHL$%0XH0mNUHL$%WHmNgUHL$%WHmN:UHL$%бWHбmN UHL$%TWHmNTHL$%'WHmNTHL$%pVHpmNTHL$x%PVHPmNYTHL$p%0VH0mN,THL$h%sVHmNSHL$`%FVHmNSHL$X%аVHаmNSHL$P%UHmNxSHL$H%UHmNKSHL$@%pUHpmNSHL$8%PeUHPmNRHL$0%08UH0mNRHL$(% UHmNRHL$ %THmNjRHL$%ЯTHЯmN=RHL$%THmNRHL$%WTHmNQHL$%p*THpmNQHL$$PSHPmNQHD$dH3%(uYHÿТuj3zHТ~NOQNujY}H~N%QAf.HTHxAHPf.H(dH%(HD$1RTH(xAPHL$P.RHmNPHL$H.RHmNTPHL$@.лRHлmN'PHL$8.nRHmNOHL$0.ARHmNOHL$(.pRHpmNOHL$ .PQHPmNsOHL$.0QH0mNFOHL$.QHmNOHL$.`QHmNNHL$.к3QHкmNNHL$-QHmNNHL$-PHmNeNHL$-pPHpmN8NHL$-PPHPmN NHL$-0RPH0mNMHL$-%PHmNMHL$-OHmNMHL$-йOHйmNWMHL$-OHmN*MHL$-qOHmNLHL$-pDOHpmNLHL$-POHPmNLHL$-0NH0mNvLHL$-NHmNILHL$-NHmNLHL$-иcNHиmNKHL$x-6NHmNKHL$p- NHmNKHL$h-pMHpmNhKHL$`-PMHPmN;KHL$X-0MH0mNKHL$P-UMHmNJHL$H-(MHmNJHL$@-зLHзmNJHL$8-LHmNZJHL$0-LHmN-JHL$(-ptLHpmNJHL$ -PGLHPmNIHL$-0LH0mNIHL$-KHmNyIHL$-KHmNLIHL$-жKHжmNIHL$,fKHmNHHL$,9KHmNHHL$,p KHpmNHHL$,PJHPmNkHHL$,0JH0mN>HHL$,JHmNHHL$,XJHmNGHL$,е+JHеmNGHD$dH3%(uH 8f.S״H dH%(HD$1KH״xA]GHL$6״IH״mN0GHL$6״wIH״mNGHL$6p״JIHp״mNFHL$6P״IHP״mNFHL$60״HH0״mN|FHL$6״HH״mNOFHL$6ִHHִmN"FHL$6ִiHHִmNEHL$6ִHL$P5Ѵ4AHѴmN>HL$H5ѴAHѴmN>HL$@5pѴ@HpѴmNf>HL$85PѴ@HPѴmN9>HL$050Ѵ@H0ѴmN >HL$(5ѴS@HѴmN=HL$ 5д&@HдmN=HL$5д?HдmN=HL$5д?HдmNX=HL$5д?HдmN+=HL$5pдr?HpдmNHдmNwHϴmNJHϴmNHϴmN;HL$4ϴ7>HϴmN;HL$4pϴ >HpϴmN;HL$4Pϴ=HPϴmNi;HL$40ϴ=H0ϴmN<;HL$4ϴ=HϴmN;HL$4δV=HδmN:HL$4δ)=HδmN:HL$4δ<HδmN:HL$4δ<HδmN[:HL$4pδ<HpδmN.:HL$x4Pδu<HPδmN:HL$p40δH<H0δmN9HL$h4δ<HδmN9HL$`4ʹ;HʹmNz9HL$X4ʹ;HʹmNM9HL$P4ʹ;HʹmN 9HL$H4ʹg;HʹmN8HL$@4pʹ:;HpʹmN8HL$84Pʹ ;HPʹmN8HL$040ʹ:H0ʹmNl8HL$(4ʹ:HʹmN?8HL$ 4̴:H̴mN8HL$4̴Y:H̴mN7HL$4̴,:H̴mN7HL$4̴9H̴mN7HL$4p̴9Hp̴mN^7HL$3P̴9HP̴mN17HL$30̴x9H0̴mN7HL$3̴K9H̴mN6HL$3˴9H˴mN6HL$3˴8H˴mN}6HL$3˴8H˴mNP6HL$3˴8H˴mN#6HL$3p˴j8Hp˴mN5HL$3P˴=8HP˴mN5HL$30˴8H0˴mN5HL$3˴7H˴mNo5HL$3ʴ7HʴmNB5HL$3ʴ7HʴmN5HL$3ʴ\7HʴmN4HL$3ʴ/7HʴmN4HT$hvɴ7;HT$hvɴ#;HT$hvɴ;HT$hvɴ:HT$hv ɴ:HT$hv(ɴ:HT$hv0ɴ:HT$hv8ɴ:HT$hv@ɴ:HT$hvHɴ:HT$hvPɴo:HT$hvXɴ[:HT$hv`ɴG:HT$hvhɴ3:HT$hvpɴ:HT$hvxɴ :HT$hwɴ9HT$hwɴ9HT$hwɴ9HT$h wɴ9HT$hwɴ9HT$hwɴ9HT$hwɴ9HT$hwɴk9HT$h wɴW9HT$h$wɴC9HT$h(wɴ/9HT$h,wɴ9HT$h0wɴ9HT$h4wɴ8HT$h8wɴ8HT$h7HT$hwHǴ*7HT$hwPǴ7HT$hwXǴ7HT$hw`Ǵ6HT$hwhǴ6HT$hwpǴ6HT$hwxǴ6HT$hwǴ6HT$hwǴ6HT$hwǴv6HT$hwǴb6HT$hwǴN6HT$hwǴ:6HT$hwǴ&6HT$hwǴ6HT$hwǴ5HT$hwǴ5HT$hwǴ5HT$hwǴ5HT$hwǴ5HT$hwǴ5HT$hwǴ5HT$hwǴr5HT$hwȴ^5HT$hwȴJ5HT$hwȴ65HT$hwȴ"5HT$hw ȴ5HT$hw(ȴ4HT$hx0ȴ4HT$hx8ȴ4HT$hx@ȴ4HT$h xHȴ4HT$hxPȴ4HT$hxXȴ4HT$hx`ȴn4HT$hxhȴZ4HT$h xpȴF4HT$h$xxȴ24HT$h(xȴ4HT$h,xȴ 4HT$h0xȴ3HT$h4xȴ3HT$h8xȴ3HT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)HɴHɴ HH3H~H7tHt$HD$,HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01;f.H״BH״xAHqmHqm =HL$@޴H޴mNHL$@޴XH޴mNHL$@޴+H޴mNHL$@p޴Hp޴mNHL$@P޴HP޴mN]HL$@0޴H0޴mN0HL$@޴wH޴mNHL$@ݴJHݴmNHL$@ݴHݴmNHL$x@ݴHݴmN|HL$p@ݴHݴmNOHL$h@pݴHpݴmN"HL$`@PݴiHPݴmNHL$X@0ݴ<H0ݴmNHL$P@ݴHݴmNHL$@@ܴHܴmNnHL$0@ܴHܴmNAHL$(@ܴHܴmNHL$ @ܴ[HܴmNHL$@pܴ.HpܴmNHL$@PܴHPܴmNHL$@0ܴH0ܴmN`HL$@ܴHܴmN3HL$?۴zH۴mNHL$?۴MH۴mN HL$?۴ H۴mN HL$?۴H۴mN HL$?p۴Hp۴mNR HL$?P۴HP۴mN% HL$?0۴lH0۴mN HL$?۴?H۴mN HL$?ڴHڴmN HL$?ڴHڴmNq HL$?ڴHڴmND HL$?ڴHڴmN HL$?pڴ^HpڴmN HL$?Pڴ1HPڴmN HL$?0ڴH0ڴmN HL$?ڴ HڴmNc HL$x?ٴ HٴmN6 HL$p?ٴ} HٴmN HL$h?ٴP HٴmN HL$`?ٴ# HٴmN HL$X?pٴ HpٴmN HL$P?Pٴ HPٴmNU HL$H?0ٴ H0ٴmN( HL$@?ٴo HٴmN HL$8?شB HشmN HL$0?ش HشmN HL$(?ش HشmNt HL$ ?ش HشmNG HL$?pش HpشmN HL$?Pشa HPشmNHL$?0ش4 H0شmNHL$?ش HشmNHL$>״ H״mNfHD$dH3%(uHf.fHdH%(HD$1 HxAHL$PFU HmNHL$HF( HmNHL$@F HmNHL$8Fp HpmNZHL$0FP HPmN-HL$(F0t H0mNHL$ FG HmNHL$F HmNHL$FHmNyHL$FHmNLHL$FHmNHL$EpfHpmNHL$EP9HPmNHL$E0 H0mNHL$EHmNkHL$EHmN>HL$EHmNHL$EXHmNHL$E+HmNHL$EpHpmNHL$EPHPmN]HL$E0H0mN0HL$pEwHmNHL$`EJHmNHL$XEHmNHL$PEHmN|HL$HEHmNOHL$@EpHpmN"HL$0EPiHPmNHL$ E0<H0mNHL$EHmNHL$EHmNnHL$DHmNAHL$DHmNHL$D[HmNHL$Dp.HpmNHL$DPHPmNHL$D0H0mN`HL$DHmN3HL$DzHmNHL$DMHmNHL$D HmNHL$DHmNHL$DpHpmNRHL$DPHPmN%HL$D0lH0mNHL$D?HmNHL$pDHmNHL$\DHmNqHL$TDHmNDHL$LDHmNHL$DDp^HpmNHL${XHT$xH{`HT$xR{hkHT$x\{pWHT$xf{xCHT$xp{/HT$xz{HT$x{HT$x{HT$x{HT$x{HT$x{HT$x{HT$xyHT$xy{HT$xygHT$xySHT$xy?HT$xy+HT$xzHT$xzHT$xzHT$x&zHT$x0zHT$x:zHT$xDz HT$xNz(HT$xXz0wHT$xbz8cHT$xlz@OHT$xvzH;H1XHT${HArHT$x{HT${HT$H{HT${HT${ HT${(HT${0vHT$P{8bHT${@NHT$ {H:HT${P&HT${XHT$X{`HT${hHT$({pHT${xHT${HT$`{HT${HT$0{rHT${^HT${JHT$h{6HT${"HT$8{HT${HT${HT$p{HT${HT$@{HT${HT${HT$x{nHT${ZHT$H{FHT${2HT${ HT${( HT${0HT$P{8HT${@HT$ {HHT${PHT${XHT$X{`~HT${hjHT$({pV1HXHWm7HWm7HWm7HL$IHmNgHL$IHmN:HL$IHmN HL$xITHmNHL$pI`'H`mNHL$hI@H@mNHL$`I H mNYHL$XIHmN,HL$PIsHmNHL$HIFHmNHL$@IHmNHL$0IHmNxHL$ I`H`mNKHL$I@H@mNHL$I eH mNHL$I8HmNHL$I HmNHL$HHmNjHL$HHmN=HL$HHmNHL$H`WH`mNHL$H@*H@mNHL$H H mNHL$HHmN\HL$HHmN/HL$HvHmNHL$HIHmNHL$HHmNHL$pH`H`mN{HL$`H@H@mNNHL$PH H mN!HL$@HhHmNHL$0H;HmNHL$(HHmNHL$ HHmNmHL$HHmN@HL$H`H`mNHL$H@ZH@mNHL$H -H mNHL$GHmNHL$GHmN_HL$GHmN2HL$GyHmNHL$GLHmNHL$G`H`mNHL$G@H@mN~HL$G H mNQHL$GHmN$HL$GkHmNHL$G>HmNHL$GHmNHL$GHmNpHL$G`H`mNCHL$xG@H@mNHL$pG ]H mNHL$hG0HmNHL$`GHmNHL$XGHmNbHL$PGHmN5HL$HG|HmNHL$@G`OH`mNHL$8G@"H@mNHL$0G H mNHL$(GHmNTHL$ GHmN'HL$GnHmNHL$GAHmNHL$GHmNHL$G`H`mNsHL$F@H@mNFHL$F H mNHL$F`HmNHL$F3HmNHL$FHmNHL$FHmNeHL$FHmN8HL$F`H`mN HL$F@RH@mNHL$F %H mNHL$FHmNHL$FHmNWHL$FHmN*HL$FqHmNHL$FDHmNHL$F`H`mNHL$xF@H@mNvHL$pF H mNIHL$hFHmNHD$dH3%(uH [q1H)HHt8HH3H~H7tHt$HD$$HD$ͺ붺H렺뙺뒺 닺 넺 z p f\RH>4*   !"#$%v&l'b(X)N*D+:,0-&./011ҹ1H)HH0HH3H~H7tHt$HD$HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)H̀HHH3H~H7tHt$HD$HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01@{f.H 2H xAHPmHPm聹=iH{Pmt1=jitXÿZieYH~N0ТHTm}HTm1HL$ HTmaH mNHL$4HmNHL$HmN蓼HL$ھHmNfHL$譾HmN9HL$耾HmN HL$`SH`mN߻HL$x@&H@mN費HL$p H mN腻HL$h̽HmNXHL$`蟽HmN+HL$PrHmNHL$@EHmNѺHL$8HmN褺HL$0`H`mNwHL$(@込H@mNJHL$  葼H mNHL$dHmNHL$7HmNùHL$ HmN薹HL$ݻHmNiHL$谻HmNHL$腪HmNHL$XHmNHL$+HmN跧HL$`H`mN芧HL$Ъ@ѩH@mN]HL$Ȫ 褩H mN0HL$wHmNHL$JHmN֦HL$HmN試HL$HmN|HL$èHmNOHL$`薨H`mN"HL$@iH@mNHL$ <H mNȥHL$HmN蛥HL$xHmNnHL$p赧HmNAHL$h舧HmNHL$`[HmNHL$P`.H`mN躤HL$@@H@mN荤HL$8 ԦH mN`HL$0触HmN3HL$(zHmNHL$ MHmN٣HL$ HmN謣HL$HmNHL$`ƥH`mNRHL$@虥H@mN%HL$ lH mNHL$?HmNˢHL$HmN螢HL$HmNqHL$ة踤HmNDHL$Щ苤HmNHL$ȩ`^H`mNHL$@1H@mN轡HL$ H mN萡HL$ףHmNcHL$誣HmN6HL$}HmN HL$PHmNܠHL$#HmN诠HL$`H`mN肠HL$@ɢH@mNUHL$x 蜢H mN(HL$poHmNHL$hBHmNΟHL$`HmN衟HL$XHmNtHL$P軡HmNGHL$H`莡H`mNHL$@@aH@mNHL$8 4H mNHL$0HmN蓞HL$(ڠHmNfHL$ 譠HmN9HL$耠HmN HL$SHmNߝHL$`&H`mN貝HD$dH3%(uHH!H!xAn蹣HJ@m譣H6@ma=biH@mt1=JitXÿ:iEYH~NТiHТ~NfH!bH!xA辜 H?mH?m豐=iH?mt1=itXÿiYH~N`ТliHТ~N;fH!貟H!xAYH*?mMH?m=iH>mt1=itXÿڿiYH~N鰛ТioHТ~N苛fH!H!xA^詡H>m蝡H>mQ=RiHk>mt1=:itXÿ*i5YH~NТ iHТ~NۚfH-dH%(HD$1BH-xA螚HHmݠHHm葎=iHHm=viHL$0,觜H,mN3HL$(,zH,mNHL$ ,MH,mNٙHL$, H,mN謙HL$`,H`,mNHL$@,ƛH@,mNRHL$ ,虛H ,mN%HL$,lH,mNHL$+?H+mN˘HL$+H+mN螘HL$+H+mNqHL$+踚H+mNDHL$`+苚H`+mNHL$@+^H@+mNHL$ +1H +mN轗HL$+H+mN萗HL$*יH*mNcHL$*誙H*mN6HL$*}H*mN HL$*PH*mNܖHL$p`*#H`*mN诖HL$`@*H@*mN肖HL$P *ɘH *mNUHL$@*蜘H*mN(HL$8)oH)mNHL$0)BH)mNΕHL$()H)mN衕HL$ )H)mNtHL$`)軗H`)mNGHL$@)莗H@)mNHL$ )aH )mNHL$)4H)mNHL$(H(mN蓔HL$(ږH(mNfHL$(譖H(mN9HL$(耖H(mN HL$`(SH`(mNߓHL$@(&H@(mN貓HL$ (H (mN腓HL$(̕H(mNXHL$'蟕H'mN+HL$'rH'mNHL$'EH'mNђHL$x'H'mN褒HL$p`'H`'mNwHL$h@'辔H@'mNJHL$` '葔H 'mNHL$P'dH'mNHL$@&7H&mNÑHL$8& H&mN薑HL$0&ݓH&mNiHL$(&谓H&mNxHپdIzHImNxHپdI\zHImNwHپdpI1zHpImNwHپdPIzHPImNwHپd0IyH0ImNgwHپdIyHImNlH>mNiHپa>kH>mNviHپa>kH>mNKiHپa>kH>mN iHپxap>ikHp>mNhHپpaP>>kHP>mNhHپha0>kH0>mNhHپ`a>jH>mNthHپPa=jH=mNIhHپ@a=jH=mNhHپ8a=gjH=mNgHپ0a=WHL$mTYHTmNWHL$mpTXYHpTmNVHL$mPT+YHPTmNVHL$m0TXH0TmNVHL$mTXHTmN]VHL$mSXHSmN0VHL$mSwXHSmNVHL$mSJXHSmNUHL$mSXHSmNUHL$mpSWHpSmN|UHL$mPSWHPSmNOUHL$m0SWH0SmN"UHL$mSiWHSmNTHL$mR4*   !"#v$l11H)H̀LHLHH3H~H7tHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^@H[DH[xA@IGHm=GHm4=diHmt1=ditXÿdilYH~N@Тdi_iHТ~N{@fS}H dH%(HD$1CH}xA=@FH?m|FH>m04=1diH>m7=diK7HT${h}{FHh}A?HL$P}BHP}mN?HL$0}AH0}mN}?HL$}AH}mNP?HL$|AH|mN#?HL$|jAH|mN>HL$|=AH|mN>HL$|AH|mN>HL$p|@Hp|mNo>HL$xP|@HP|mNB>HL$p0|@H0|mN>HL$h|\@H|mN=HL$`{/@H{mN=HL$X{@H{mN=HL$P{?H{mNa=HL$H{?H{mN4=HL$@p{{?Hp{mN=HL$8P{N?HP{mNH{mNHzmNSHzmN&HzmN;HL$z@>HzmN;HL$pz>HpzmN;HL$Pz=HPzmNr;HL$0z=H0zmNE;HL$胀z=HzmN;HL$y_=HymN:HL$؃y2=HymN:HL$Ѓy=HymN:HL$ȃy<HymNd:HL$py<HpymN7:HL$Py~<HPymN :HL$0yQ<H0ymN9HL$y$<HymN9HL$x;HxmN9HL$x;HxmNV9HL$x;HxmN)9HL$xp;HxmN8HL$pxC;HpxmN8HL$xPx;HPxmN8HL$p0x:H0xmNu8HL$hx:HxmNH8HL$`w:HwmN8HL$Xwb:HwmN7HL$Pw5:HwmN7HL$Hw:HwmN7HL$@pw9HpwmNg7HL$8Pw9HPwmN:7HL$00w9H0wmN 7HL$(wT9HwmN6HL$ v'9HvmN6HL$v8HvmN6HL$v8HvmNY6HL$v8HvmN,6HL$pvs8HpvmN5HL$PvF8HPvmN5HL$0v8H0vmN5HL$肀v7HvmNx5HL$u7HumNK5HL$؂u7HumN5HL$Ђue7HumN4HL$Ȃu87HumN4HL$pu 7HpumN4HL$Pu6HPumNj4HL$0u6H0umN=4HL$u6HumN4HL$tW6HtmN3HL$t*6HtmN3HL$t5HtmN3HL$t5HtmN\3HL$pt5HptmN/3HL$xPtv5HPtmN3HL$p0tI5H0tmN2HL$ht5HtmN2HL$`s4HsmN{2HL$Xs4HsmNN2HL$Ps4HsmN!2HL$Hsh4HsmN1HL$@ps;4HpsmN1HL$8Ps4HPsmN1HL$00s3H0smNm1HL$(s3HsmN@1HL$ r3HrmN1HL$rZ3HrmN0HL$r-3HrmN0HL$r3HrmN0HL$pr2HprmN_0HL$Pr2HPrmN20HL$0ry2H0rmN0HL$聀rL2HrmN/HL$q2HqmN/HL$؁q1HqmN~/HT$xx@p5HT$xxHp5HT$xxPp5HT$xxXp5HT$xx`p5HT$xxhp5HT$xxpp5HT$xxxpn5HT$xxpZ5HT$xxpF5HT$xxp25HT$xxp5HT$xyp 5HT$xyp4HT$xyp4HT$x"yp4HT$x,yp4HT$x6yp4HT$x@yp4HT$xJyp~4HT$xTypj4HT$x^ypV4HT$xhypB4HT$xryp.4HT$x|yq4HT$xyq4HT$xyq3HT$xyq3HT$xy q3HT$xy(q3HT$xy0q3HT$xy8q3HT$xy@qz3HT$xyHqf3HT$xyPqR3HT$xyXq>3HT$xy`q*3HT$xyhq3HT$xzpq3HT$xzxq2HT$xzq2HT$x&zq2HT$x0zq2HT$x:zq2HT$xDzq2HT$xNzqv2HT$xXzqb2HT$xbzqN2HT$xlzq:2HT$xvzq&2H14Z+HT$xzn2HT$xzn1HT$xzn1HT$xzn1HT$xzn1HT$xzn1HT$xzn1HT$xznu1HT$xzna1HT$xznM1HT$xzn91HT$xzn%1HT$xzn1HT$x{n0HT$x {n0HT$x{n0HT$x {o0HT$x*{o0HT$x4{o0HT$x>{o0HT$xH{ oq0HT$xR{(o]0HT$x\{0oI0HT$xf{8o50HT$xp{@o!0HT$xz{Ho 0HT$x{Po/HT$x{Xo/HT$x{`o/HT$x{ho/HT$x{po/HT$x{xo/HT$xyo/HT$xyom/HT$xyoY/HT$xyoE/HT$xyo1/HT$xyo/HT$xzo /HT$xzo.HT$xzo.HT$x&zo.HT$x0zo.HT$x:zo.HT$xDzo.HT$xNzo}.HT$xXzoi.HT$xbzoU.HT$xlzpA.HT$xvzp-.H1 4Z'HT${Pn.HPnAd'HT$x{l-HT${l-HT$H{l-HT${l-HT${l-HT${l|-HT${lh-HT$P{lT-HT${m@-HT$ {m,-HT${m-HT${m-HT$X{ m,HT${(m,HT$({0m,HT${8m,HT${@m,HT$`{Hm,HT${Pmx,HT$0{Xmd,HT${`mP,HT${hm<,HT$h{pm(,HT${xm,HT$8{m,HT${m+HT${m+HT$p{m+HT${m+HT$@{m+HT${m+HT${mt+HT$x{m`+HT${mL+HT$H{m8+HT${m$+HT${m+HT${m*HT${m*HT$P{m*HT${n*HT$ {n*HT${n*HT${n*HT$X{ np*HT${(n\*HT$({0nH*1H3ZH9m7H6m7H3m7#HL$Ёpl%HplmNY#HL$ȁPl%HPlmN,#HL$0ls%H0lmN"HL$lF%HlmN"HL$k%HkmN"HL$k$HkmNx"HL$k$HkmNK"HL$k$HkmN"HL$pke$HpkmN!HL$Pk8$HPkmN!HL$0k $H0kmN!HL$xk#HkmNj!HL$pj#HjmN=!HL$hj#HjmN!HL$`jW#HjmN HL$Xj*#HjmN HL$Ppj"HpjmN HL$HPj"HPjmN\ HL$@0j"H0jmN/ HL$8jv"HjmN HL$0iI"HimNHL$(i"HimNHL$ i!HimN{HL$i!HimNNHL$pi!HpimN!HL$Pih!HPimNHL$0i;!H0imNHL$i!HimNHL$h HhmNmHL$耀h HhmN@HL$h HhmNHL$؀hZ HhmNHL$Ѐph- HphmNHL$ȀPh HPhmNHL$0hH0hmN_HL$hHhmN2HL$gyHgmNHL$gLHgmNHL$gHgmNHL$gHgmN~HL$pgHpgmNQHL$PgHPgmN$HL$0gkH0gmNHL$xg>HgmNHL$pfHfmNHL$hfHfmNpHL$`fHfmNCHL$XfHfmNHL$Ppf]HpfmNHL$HPf0HPfmNHL$@0fH0fmNHL$8fHfmNbHL$0eHemN5HL$(e|HemNHL$ eOHemNHL$e"HemNHL$peHpemNHL$PeHPemNTHL$0eH0emN'HL$enHemNHL$dAHdmNHL$dHdmNHL$dHdmNsHL$dHdmNFHL$pdHpdmNHL$Pd`HPdmNHL$0d3H0dmNHL$dHdmNHL$cHcmNeHL$cHcmN8HL$cHcmN HL$cRHcmNHL$pc%HpcmNHL$PcHPcmNHL$0cH0cmNWHL$xcHcmN*HL$pbqHbmNHL$hbDHbmNHL$`bHbmNHL$XbHbmNvHL$PpbHpbmNIHL$HPbHPbmNHL$@0bcH0bmNHL$8b6HbmNHL$0a HamNHL$(aHamNhHL$ aHamN;HL$aHamNHL$paUHpamNHL$Pa(HPamNHL$0aH0amNHL$~aHamNZHL$~`H`mN-HL$~`tH`mNHL$~`GH`mNHL$~`H`mNHL$~p`Hp`mNyHL$~P`HP`mNLHL$~0`H0`mNHL$~`fH`mNHL$~_9H_mNHL$~_ H_mNHL$~_H_mNkHL$~_H_mN>HL$~p_Hp_mNHL$~P_XHP_mNHT$hv]`HT$hv]LHT$hv]8HT$hv]$HT$hv]HT$hv]HT$hv]HT$hv]HT$hv^HT$hv^HT$hv^HT$hv^HT$hv ^pHT$hv(^\HT$hv0^HHT$hv8^4HT$hw@^ HT$hwH^ HT$hwP^HT$h wX^HT$hw`^HT$hwh^HT$hwp^HT$hwx^HT$h w^HT$h$w^lHT$h(w^XHT$h,w^DHT$h0w^0HT$h4w^HT$h8w^HT$hHl}Hl1=2iH{l =i6 HL$GHmNHL$ЎHЎmNHL$HmNyHL$HmNLHL$pHpmNHL$PfHPmNHL$09H0mNHL$x HmNHL$pHmNkHL$hЍHЍmN>HL$`HmNHL$XXHmNHL$Pp+HpmNHL$HPHPmNHL$@0H0mN]HL$8HmN0HL$0wHmNHL$(ЌJHЌmNHL$ HmNHL$HmN|HL$pHpmNOHL$PHPmN"HL$0iH0mNHL$<HmNHL$HmNHL$蟀ЋHЋmNnHL$HmNAHL$؟HmNHL$Пp[HpmNHL$ȟP.HPmNHL$0H0mNHL$HmN`HL$HmN3HL$ЊzHЊmNHL$MHmNHL$ HmNHL$pHpmNHL$PHPmNRHL$0H0mN%HL$xlHmNHL$p?HmNHL$hЉHЉmNHL$`HmNqHL$XHmNDHL$PpHpmNHL$HP^HPmNHL$@01H0mNHL$8HmNHL$0HmNcHL$(ЈHЈmN6HL$ }HmN HD$dH3%(uYHÿТi HТ~NiH~N f.S H dH%(HD$1H xA]HmHmP=QiHm=5iHL$@fHmNHL$8У9HУmNHL$0 HmNHL$(HmNkHL$ pHpmN>HL$PHPmNHL$0XH0mNHL$+HmNHL$HmNHL$ТHТmN]HL$HmN0HL$謀wHmNHL$଀pJHpmNHL$جPHPmNHL$Ь0H0mN|HL$ȬHmNOHL$HmN"HL$СiHСmNHL$<HmNHL$HmNHL$pHpmNnHL$PHPmNAHL$0H0mNHL$[HmNHL$.HmNHL$xРHРmNHL$pHmN`HL$hHmN3HL$`pzHpmNHL$XPMHPmNHL$P0 H0mNHL$HHmNHL$@HmNRHL$8ПHПmN%HL$0lHmNHL$(?HmNHL$ pHpmNHL$PHPmNqHL$0H0mNDHL$HmNHL$^HmNHL$О1HОmNHL$HmNHL$諀HmNcHL$ીpHpmN6HL$ثP}HPmN HL$Ы0PH0mNHL$ȫ#HmNHL$HmNHL$НHНmNUHL$HmN(HL$oHmNHL$pBHpmNHL$PHPmNHL$0H0mNtHL$HmNGHL$HmNHL$xМaHМmNHL$p4HmNHL$hHmNHL$`pHpmNfHL$XPHPmN9HL$P0H0mN HL$HSHmNHL$@&HmNHL$8ЛHЛmNHL$0HmNXHL$(HmN+HL$ prHpmNHL$PEHPmNHL$0H0mNHL$HmNwHL$HmNJHL$КHКmNHL$dHmNHL$誀7HmNHL$઀p HpmNHL$تPHPmNiHL$Ъ0H0mN4*   !"#v$l11H)H@H@HH3H~H7tHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^@H@2H@xAHlHl職=hHlt1=jhtXÿZheYH~N0ТHmNʹHL$ ŀHmN蝹HL$ŀпHпmNpHL$ŀ跻HmNCHL$ŀ芻HmNHL$ŀp]HpmNHL$ĀP0HPmN輸HL$Ā0H0mN菸HL$ĀֺHmNbHL$Ā詺HmN5HL$Āо|HоmNHL$ĀOHmN۷HL$Ā"HmN讷HL$ĀpHpmN職HL$ĀPȹHPmNTHL$Ā0蛹H0mN'HL$ĀnHmNHL$ĀAHmNͶHL$ĀнHнmN蠶HL$ĀHmNsHL$Ā躸HmNFHL$Āp荸HpmNHL$xĀP`HPmNHL$pĀ03H0mN迵HL$hĀHmN蒵HL$`ĀٷHmNeHL$XĀм謷HмmN8HL$PĀHmN HL$HĀRHmN޴HL$@Āp%HpmN豴HL$8ĀPHPmN脴HL$0Ā0˶H0mNWHL$(Ā螶HmN*HL$ ĀqHmNHL$ĀлDHлmNгHL$ĀHmN裳HL$ĀHmNvHL$Āp轵HpmNIHL$ÀP萵HPmNHL$À0cH0mNHL$À6HmN²HL$À HmN蕲HL$ÀкܴHкmNhHL$À说HmN;HL$À肴HmNHT$xx芸HT$xxvHT$xxbHT$xxNHT$xx :HT$xx(&HT$xx0HT$xx8HT$xx@HT$xxHַHT$xxP·HT$xxX讷HT$xy`蚷HT$xyh膷HT$xyprHT$x"yx^HT$x,yJHT$x6y6HT$x@y"HT$xJyHT$xTyHT$x^yHT$xhyҶHT$xry辶HT$x|y誶HT$xyȹ薶HT$xyй肶HT$xyعnHT$xy๵ZHT$xy蹵FHT$xy2HT$xyHT$xy HT$xyHT$xyHT$xyεHT$xy 躵HT$xy(覵HT$xz0蒵HT$xz8~HT$xz@jHT$x&zHVHT$x0zPBHT$x:zX.HT$xDz`HT$xNzhHT$xXzpHT$xbzx޴HT$xlzʴHT$xvz趴H1[HT$xz@葴HT$xzH}HT$xzPiHT$xzXUHT$xz`AHT$xzh-HT$xzpHT$xzxHT$xzHT$xzݳHT$xzɳHT$xz赳HT$xz衳HT$x{荳HT$x {yHT$x{eHT$x {QHT$x*{ȷ=HT$x4{з)HT$x>{طHT$xH{෵HT$xR{践HT$x\{ٲHT$xf{ŲHT$xp{豲HT$xz{蝲HT$x{色HT$x{uHT$x{ aHT$x{(MHT$x{09HT$x{8%HT$xy@HT$xyHHT$xyPHT$xyXձHT$xy`HT$xyh譱HT$xzp虱HT$xzx腱HT$xzqHT$x&z]HT$x0zIHT$x:z5HT$xDz!HT$xNz HT$xXzHT$xbzHT$xlzѰHT$xvzȸ轰H1[HT${蘰HAHT$x{pHT${\HT$H{HHT${4HT${ HT${ HT${HT$P{HT${ЯHT$ {ȵ輯HT${е訯HT${ص蔯HT$X{൵耯HT${赵lHT$({XHT${DHT${0HT$`{HT${HT$0{HT${ HT${(̮HT$h{0踮HT${8褮HT$8{@萮HT${H|HT${PhHT$p{XTHT${`@HT$@{h,HT${pHT${xHT$x{HT${ܭHT$H{ȭHT${购HT${蠭HT${茭HT${xHT$P{dHT${PHT$ {ȶHL$€0腞H0mNHL$XHmNHL$+HmN跛HL$ЭHЭmN芛HL$ѝHmN]HL$褝HmN0HL$pwHpmNHL$PJHPmN֚HL$0H0mN詚HL$HmN|HL$ÜHmNOHL$Ь薜HЬmN"HL$iHmNHL$<HmNșHL$pHpmN蛙HL$PHPmNnHL$0赛H0mNAHL$x舛HmNHL$p[HmNHL$hЫ.HЫmN躘HL$`HmN荘HL$XԚHmN`HL$Pp觚HpmN3HL$HPzHPmNHL$@0MH0mNٗHL$8 HmN謗HL$0HmNHL$(ЪƙHЪmNRHL$ 虙HmN%HL$lHmNHL$p?HpmN˖HL$PHPmN螖HL$0H0mNqHL$踘HmNDHL$苘HmNHL$Щ^HЩmNHL$1HmN轕HL$HmN萕HL$pחHpmNcHL$P誗HPmN6HL$0}H0mN HL$PHmNܔHL$#HmN诔HL$ШHШmN肔HL$ɖHmNUHL$蜖HmN(HL$poHpmNHL$PBHPmNΓHL$0H0mN術HL$xHmNtHT$hvHT$hvܙHT$hvșHT$hv贙HT$hv蠙HT$hv茙HT$hvxHT$hvdHT$hvPHT$hvȦp<=hHH~Npz`f.H`ҵsH`ҵxAHof.S`H dH%(HD$1AsH`xAouHIluH5lc=hHl*=uhJ*HL$с0qH0mN2oHL$ЁyqHmNoHL$ЁLqHmNnHL$ЁqHmNnHL$ЁpHmN~nHL$ЁpHmNQnHL$ЁppHpmN$nHL$ЁPkpHPmNmHL$Ё0>pH0mNmHL$ЁpHmNmHL$ЁoHmNpmHL$ЁoHmNCmHL$ЁoHmNmHL$Ё]oHmNlHL$Ёp0oHpmNlHL$xЁPoHPmNlHL$pЁ0nH0mNblHL$hЁnHmN5lHL$`Ё|nHmNlHL$PЁOnHmNkHL$@Ё"nHmNkHL$0ЁmHmNkHL$ ЁpmHpmNTkHL$ЁPmHPmN'kHL$Ё0nmH0mNjHL$ЁAmHmNjHL$ρmHmNjHL$ρlHmNsjHL$ρlHmNFjHL$ρlHmNjHL$ρp`lHpmNiHL$ρP3lHPmNiHL$ρ0lH0mNiHL$ρkHmNeiHL$ρkHmN8iHL$ρkHmN iHL$ρRkHmNhHL$xρ%kHmNhHL$pρpjHpmNhHL$hρPjHPmNWhHL$`ρ0jH0mN*hHL$XρqjHmNgHL$PρDjHmNgHL$HρjHmNgHL$@ρiHmNvgHL$8ρiHmNIgHL$0ρpiHpmNgHL$ ρPciHPmNfHL$ρ06iH0mNfHL$ρ iHmNfHL$ρhHmNhfHL$΁hHmN;fHL$΁hHmNfHL$΁UhHmNeHL$΁p(hHpmNeHL$΁PgHPmNeHL$΁0gH0mNZeHL$΁gHmN-eHL$΁tgHmNeHL$΁GgHmNdHL$΁gHmNdHL$΁fHmNydHL$΁pfHpmNLdHL$΁PfHPmNdHL$΁0ffH0mNcHL$΁9fHmNcHL$΁ fHmNcHL$x΁eHmNkcHL$p΁eHmN>cHL$h΁eHmNcHL$`΁pXeHpmNbHL$X΁P+eHPmNbHL$P΁0dH0mNbHL$H΁dHmN]bHL$@΁dHmN0bHL$8΁wdHmNbHL$0΁JdHmNaHL$(΁dHmNaHL$ ΁pcHpmN|aHL$΁PcHPmNOaHL$΁0cH0mN"aHL$΁icHmN`HL$΁맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H̀ԵHԵHH3H~H7tHt$HD$>HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S H dH%(HD$1CH xA-@xFHllFHl 4=!dhHjl*=dhJ*HL$߁ 6BH mN?HL$ށ BH mN?HL$ށ AH mNh?HL$ށ AH mN;?HL$ށp AHp mN?HL$ށP UAHP mN>HL$ށ0 (AH0 mN>HL$ށ @H mN>HL$ށ@HmNZ>HL$ށ@HmN->HL$ށt@HmN>HL$ށG@HmN=HL$ށp@HpmN=HL$ށP?HPmNy=HL$ށ0?H0mNL=HL$ށ?HmN=HL$ށf?HmNHmNkHpmN>HPmNH0mN;HL$Hށ+>HmN;HL$@ށ=HmN;HL$8ށ=HmN];HL$0ށ=HmN0;HL$(ށw=HmN;HL$ ށpJ=HpmN:HL$ށP=HPmN:HL$ށ0<H0mN|:HL$ށ<HmNO:HL$ށ<HmN":HL$݁i<HmN9HL$݁<<HmN9HL$݁<HmN9HL$݁p;HpmNn9HL$݁P;HPmNA9HL$݁0;H0mN9HL$݁[;HmN8HL$݁.;HmN8HL$݁;HmN8HL$݁:HmN`8HL$݁:HmN38HL$݁pz:HpmN8HL$݁PM:HPmN7HL$݁0 :H0mN7HL$݁9HmN7HL$݁9HmNR7HL$x݁9HmN%7HL$p݁l9HmN6HL$h݁?9HmN6HL$`݁p9HpmN6HL$X݁P8HPmNq6HL$P݁08H0mND6HL$H݁8HmN6HL$@݁^8HmN5HL$8݁18HmN5HL$0݁8HmN5HL$(݁7HmNc5HL$ ݁p7HpmN65HL$݁P}7HPmN 5HL$݁0P7H0mN4HL$݁#7HmN4HL$݁6HmN4HL$܁6HmNU4HL$܁6HmN(4HL$܁o6HmN3HL$܁pB6HpmN3HL$܁P6HPmN3HL$܁05H0mNt3HL$܁5HmNG3HL$܁5HmN3HL$܁a5HmN2HL$܁45HmN2HL$܁5HmN2HL$܁p4HpmNf2HL$܁P4HPmN92HL$܁04H0mN 2HL$܁S4HmN1HL$܁&4HmN1HL$x܁3HmN1HL$p܁3HmNX1HL$h܁3HmN+1HL$`܁pr3HpmN0HL$X܁PE3HPmN0HL$P܁03H0mN0HL$H܁2HmNw0HL$@܁2HmNJ0HL$8܁2HmN0HL$0܁d2HmN/HL$(܁72HmN/HL$ ܁p 2HpmN/HL$܁P1HPmNi/HL$܁01H0mNHТ~NVU1H)H̀Ht1HH3H~H7tHt$HD$[HD$ͺH맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H@H@HH3H~H7tHt$HD$辈HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S%H dH%(HD$1aH%xAHlHշl=4hHl*=4hJ*HL$%H%mNRHL$%H%mN%HL$p%lHp%mNHL$P%?HP%mNHL$0%H0%mNHL$%H%mNqHL$$H$mNDHL$$H$mNHL$$^H$mNHL$x$1H$mNHL$pp$Hp$mNHL$hP$HP$mNcHL$`0$H0$mN6HL$X$}H$mN HL$P#PH#mN HL$H##H#mN HL$@#H#mN HL$8#H#mNU HL$0p#Hp#mN( HL$(P#oHP#mN HL$ 0#BH0#mN HL$#H#mN HL$"H"mNt HL$"H"mNG HL$"H"mN HL$"aH"mN HL$p"4Hp"mN HL$P"HP"mN HL$0" H0"mNf HL$" H"mN9 HL$! H!mN HL$!S H!mN HL$!& H!mN HL$! H!mN HL$p! Hp!mNX HL$P! HP!mN+ HL$0!r H0!mN HL$!E H!mN HL$  H mN HL$ H mNw HL$ H mNJ HL$x H mN HL$pp d Hp mNHL$hP 7 HP mNHL$`0 H0 mNHL$X H mNiHL$P HmN<HL$H HmNHL$@V HmNHL$8) HmNHL$0p HpmNHL$(P HPmN[HL$ 0 H0mN.HL$u HmNHL$H HmNHL$ HmNHL$HmNzHL$HmNMHL$pHpmN HL$PgHPmNHL$0:H0mNHL$ HmNHL$HmNlHL$HmN?HL$HmNHL$YHmNHL$p,HpmNHL$PHPmNHL$0H0mN^HL$HmN1HL$xHmNHL$KHmNHL$HmNHL$xHmN}HL$ppHpmNPHL$hPHPmN#HL$`0jH0mNHL$X=HmNHL$PHmNHL$HHmNoHL$@HmNBHL$8HmNHL$0p\HpmNHL$(P/HPmNHL$ 0H0mNHL$HmNaHL$HmN4HL${HmNHL$NHmNHL$!HmNHL$pHpmNHL$PHPmNSHL$0H0mN&HL$mHmNHL$@HmNHL$HmNHL$HmNrHL$HmNEHL$pHpmNHL$P_HPmNHL$02H0mNHL$HmNHL$HmNdHL$HmN7HL$~HmN HL$xQHmNHT$hvYHT$hvEHT$hv1HT$hvHT$hv  HT$hv(HT$hv0HT$hv8HT$hv@HT$hvHHT$hvPHT$hvX}HT$hv`iHT$hvhUHT$hvpAHT$hvx-HT$hwHT$hwHT$hwHT$h wHT$hwHT$hwHT$hwHT$hwHT$h wyHT$h$weHT$h(wQHT$h,w=HT$h0w)HT$h4wHT$h8wHT$h4*   !"#v$l11H)HHHH3H~H7tHt$HD$>cHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SAH dH%(HD$1HAxAMHylHel@=AhHJl*=%hJ*HL$AVHAmNHL$xA)HAmNHL$ppAHpAmNHL$hPAHPAmN[HL$`0AH0AmN.HL$XAuHAmNHL$P@HH@mNHL$H@H@mNHL$@@H@mNzHL$8@H@mNMHL$0p@Hp@mN HL$ P@gHP@mNHL$0@:H0@mNHL$@ H@mNHL$?H?mNlHL$?H?mN?HL$?H?mNHL$?YH?mNHL$p?,Hp?mNHL$P?HP?mNHL$0?H0?mN^HL$?H?mN1HL$>xH>mNHL$>KH>mNHL$>H>mNHL$>H>mN}HL$xp>Hp>mNPHL$pP>HP>mN#HL$`0>jH0>mNHL$P>=H>mNHL$@=H=mNHL$0=H=mNoHL$ =H=mNBHL$=H=mNHL$p=\Hp=mNHL$P=/HP=mNHL$0=H0=mNHL$=H=mNaHL$<H<mN4HL$<{H<mNHL$<NH<mNHL$<!H<mNHL$p<Hp<mNHL$P<HP<mNSHL$0<H0<mN&HL$<mH<mNHL$;@H;mNHL$;H;mNHL$;H;mNrHL$;H;mNEHL$p;Hp;mNHL$xP;_HP;mNHL$p0;2H0;mNHL$h;H;mNHL$`:H:mNdHL$X:H:mN7HL$P:~H:mN HL$H:QH:mNHL$@p:$Hp:mNHL$8P:HP:mNHL$00:H0:mNVHL$(:H:mN)HL$ 9pH9mNHL$9CH9mNHL$9H9mNHL$9H9mNuHL$p9Hp9mNHHL$P9HP9mNHL$09bH09mNHL$95H9mNHL$8H8mNHL$8H8mNgHL$8H8mN:HL$8H8mN HL$p8THp8mNHL$P8'HP8mNHL$08H08mNHL$8H8mNYHL$7H7mN,HL$7sH7mNHL$7FH7mNHL$7H7mNHL$p7Hp7mNxHL$xP7HP7mNKHL$p07H07mNHL$h7eH7mNHL$`68H6mNHL$X6 H6mNHL$P6H6mNjHL$H6H6mN=HL$@p6Hp6mNHL$8P6WHP6mNHL$006*H06mNHL$(6H6mNHL$ 5H5mN\HL$5H5mN/HL$5vH5mNHL$5IH5mNHL$p5Hp5mNHL$P5HP5mN{HL$05H05mNNHL$5H5mN!HL$4hH4mNHL$4;H4mNHL$4H4mNHL$4H4mNmHL$p4Hp4mN@HL$P4HP4mNHL$04ZH04mNHL$4-H4mNHL$3H3mNHL$3H3mN_HL$3H3mN2HL$3yH3mNHL$p3LHp3mNHL$xP3HP3mNHL$p03H03mN~HL$h3H3mNQHL$`2H2mN$HL$X2kH2mNHL$P2>H2mNHL$H2H2mNHL$@p2Hp2mNpHL$8P2HP2mNCHL$002H02mNHL$(2]H2mNHL$ 10H1mNHL$1H1mNHL$1H1mNbHL$1H1mN5HL$p1|Hp1mNHL$P1OHP1mNHL$01"H01mNHL$1H1mNHL$0H0mNTHL$0H0mN'HL$0nH0mNHL$0AH0mNHL$p0Hp0mNHL$P0HP0mNsHL$00H00mNFHL$0H0mNHL$/`H/mNHL$/3H/mNHL$/H/mNHL$/H/mNeHL$p/Hp/mN8HL$xP/HP/mN HL$p0/RH0/mNHL$h/%H/mNHL$`.H.mNHL$X.H.mNWHL$P.H.mN*HL$H.qH.mNHL$@p.DHp.mNHL$8P.HP.mNHL$00.H0.mNvHL$(.H.mNIHL$ -H-mNHL$-cH-mNHL$-6H-mNHL$- H-mNHL$p-Hp-mNhHL$P-HP-mN;HL$0-H0-mNHL$-UH-mNHL$,(H,mNHL$,H,mNHL$,H,mNZHL$,H,mN-HL$p,tHp,mNHL$P,GHP,mNHL$0,H0,mNHL$,H,mNyHL$+H+mNLHL$+H+mNHL$+fH+mNHL$+9H+mNHL$p+ Hp+mNHL$xP+HP+mNkHL$p0+H0+mN>HL$h+H+mNHL$`*XH*mNHL$X*+H*mNHL$P*H*mNHL$H*H*mN]HL$@p*Hp*mN0HL$8P*wHP*mNHL$00*JH0*mNֿHL$(*H*mN詿HL$ )H)mN|HL$)H)mNOHL$)H)mN"HL$)iH)mNHT$hv(qHT$hv(]HT$hv(IHT$hv(5HT$hv (!HT$hv(( HT$hv0(HT$hv8(HT$hv@(HT$hvH(HT$hvP(HT$hvX(HT$hv`(HT$hvh(mHT$hvp(YHT$hvx(EHT$hw(1HT$hw(HT$hw( HT$h w(HT$hw(HT$hw(HT$hw(HT$hw(HT$h w(HT$h$w(}HT$h(w(iHT$h,w(UHT$h0w(AHT$h4w(-HT$h8w(HT$h4*   !"#v$l11H)H(H(HH3H~H7tHt$HD$=HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S]H dH%(HD$1聵H]xAݱ(H lHlХ=gHڐl*=gJ*HL$]H]mNrHL$]蹳H]mNEHL$p]茳Hp]mNHL$P]_HP]mNHL$0]2H0]mN辰HL$]H]mN葰HL$\زH\mNdHL$\諲H\mN7HL$\~H\mN HL$\QH\mNݯHL$p\$Hp\mN谯HL$P\HP\mN胯HL$0\ʱH0\mNVHL$x\蝱H\mN)HL$p[pH[mNHL$h[CH[mNϮHL$`[H[mN袮HL$X[H[mNuHL$Pp[輰Hp[mNHHL$@P[菰HP[mNHL$00[bH0[mNHL$ [5H[mNHL$ZHZmN蔭HL$ZۯHZmNgHL$Z讯HZmN:HL$Z聯HZmN HL$pZTHpZmNHL$PZ'HPZmN賬HL$0ZH0ZmN膬HL$ZͮHZmNYHL$Y蠮HYmN,HL$YsHYmNHL$YFHYmNҫHL$YHYmN襫HL$pYHpYmNxHL$xPY迭HPYmNKHL$p0Y蒭H0YmNHL$hYeHYmNHL$`X8HXmNĪHL$XX HXmN藪HL$PXެHXmNjHL$HX豬HXmN=HL$@pX脬HpXmNHL$8PXWHPXmNHL$00X*H0XmN趩HL$(XHXmN艩HL$ WЫHWmN\HL$W裫HWmN/HL$WvHWmNHL$WIHWmNըHL$pWHpWmN訨HL$PWHPWmN{HL$0WªH0WmNNHL$W蕪HWmN!HL$VhHVmNHL$V;HVmNǧHL$VHVmN蚧HL$VHVmNmHL$pV贩HpVmN@HL$PV臩HPVmNHL$0VZH0VmNHL$V-HVmN蹦HL$UHUmN茦HL$UӨHUmN_HL$U覨HUmN2HL$xUyHUmNHL$ppULHpUmNإHL$hPUHPUmN諥HL$`0UH0UmN~HL$XUŧHUmNQHL$PT蘧HTmN$HL$HTkHTmNHL$@T>HTmNʤHL$8THTmN蝤HL$0pTHpTmNpHL$(PT跦HPTmNCHL$ 0T芦H0TmNHL$T]HTmNHL$S0HSmN輣HL$SHSmN菣HL$S֥HSmNbHL$S詥HSmN5HL$pS|HpSmNHL$PSOHPSmNۢHL$0S"H0SmN订HL$SHSmN聢HL$RȤHRmNTHL$R蛤HRmN'HL$RnHRmNHL$RAHRmN͡HL$pRHpRmN蠡HL$PRHPRmNsHL$0R躣H0RmNFHL$R荣HRmNHL$Q`HQmNHL$Q3HQmN迠HL$QHQmN蒠HL$xQ٢HQmNeHL$ppQ謢HpQmN8HL$hPQHPQmN HL$`0QRH0QmNޟHL$XQ%HQmN豟HL$PPHPmN脟HL$HPˡHPmNWHL$@P螡HPmN*HL$8PqHPmNHL$0pPDHpPmNОHL$(PPHPPmN裞HL$ 0PH0PmNvHL$P轠HPmNIHL$O萠HOmNHL$OcHOmNHL$O6HOmNHL$O HOmN蕝HL$pOܟHpOmNhHL$PO诟HPOmN;HL$0O肟H0OmNHL$OUHOmNHL$N(HNmN贜HL$NHNmN臜HL$NΞHNmNZHL$N衞HNmN-HL$pNtHpNmNHL$PNGHPNmNӛHL$0NH0NmN覛HL$NHNmNyHL$MHMmNLHL$M蓝HMmNHL$MfHMmNHL$xM9HMmNŚHL$ppM HpMmN蘚HL$hPMߜHPMmNkHL$`0M貜H0MmN>HL$XM腜HMmNHL$PLXHLmNHL$HL+HLmN跙HL$@LHLmN芙HL$8LћHLmN]HL$0pL褛HpLmN0HL$(PLwHPLmNHL$ 0LJH0LmN֘HL$LHLmN詘HL$KHKmN|HL$KÚHKmNOHL$K薚HKmN"HL$KiHKmNHL$pK<HpKmNȗHL$PKHPKmN蛗HL$0KH0KmNnHL$K赙HKmNAHL$J舙HJmNHL$J[HJmNHL$J.HJmN躖HL$JHJmN荖HL$pJԘHpJmN`HL$PJ觘HPJmN3HL$0JzH0JmNHL$JMHJmNٕHL$I HImN謕HL$IHImNHL$IƗHImNRHL$xI虗HImN%HL$ppIlHpImNHL$hPI?HPImN˔HL$`0IH0ImN螔HL$XIHImNqHL$PH踖HHmNDHL$HH苖HHmNHL$@H^HHmNHL$8H1HHmN轓HL$0pHHpHmN萓HL$(PHוHPHmNcHL$ 0H誕H0HmN6HL$H}HHmN HL$GPHGmNܒHL$G#HGmN诒HL$GHGmN肒HL$GɔHGmNUHL$pG蜔HpGmN(HL$PGoHPGmNHL$0GBH0GmNΑHL$GHGmN衑HL$FHFmNtHL$F軓HFmNGHL$F莓HFmNHL$FaHFmNHL$pF4HpFmNHL$PFHPFmN蓐HL$0FڒH0FmNfHL$F譒HFmN9HL$E耒HEmN HL$ESHEmNߏHL$E&HEmN貏HL$xEHEmN腏HT$hvDHT$hvDHT$hvDٕHT$hvDŕHT$hv D豕HT$hv(D蝕HT$hv0D艕HT$hv8DuHT$hv@DaHT$hvHDMHT$hvPD9HT$hvXD%HT$hv`DHT$hvhDHT$hvpDHT$hvxDՔHT$hwDHT$hwD譔HT$hwD虔HT$h wD腔HT$hwDqHT$hwD]HT$hwDIHT$hwD5HT$h wD!HT$h$wD HT$h(wDHT$h,wDHT$h0wDѓHT$h4wD轓HT$h8wD詓HT$h4*   !"#v$l11H)HDHDHH3H~H7tHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SyH dH%(HD$1HyxAm踈HY}l謈HE}l`v=agH*}l*=EgJ*HL$pyvHpymNHL$PyIHPymNՁHL$0yH0ymN訁HL$yHymN{HL$xƒHxmNNHL$x蕃HxmN!HL$xhHxmNHL$x;HxmNǀHL$pxHpxmN蚀HL$PxHPxmNmHL$0x贂H0xmN@HL$x臂HxmNHL$wZHwmNHL$w-HwmNHL$wHwmNHL$xwӁHwmN_HL$ppw要HpwmN2HL$hPwyHPwmNHL$`0wLH0wmN~HL$XwHwmN~HL$PvHvmN~~HL$HvŀHvmNQ~HL$@v蘀HvmN$~HL$8vkHvmN}HL$0pv>HpvmN}HL$(PvHPvmN}HL$ 0vH0vmNp}HL$vHvmNC}HL$uHumN}HL$u]HumN|HL$u0HumN|HL$uHumN|HL$pu~HpumNb|HL$Pu~HPumN5|HL$0u|~H0umN|HL$uO~HumN{HL$t"~HtmN{HL$t}HtmN{HL$t}HtmNT{HL$t}HtmN'{HL$ptn}HptmNzHL$PtA}HPtmNzHL$0t}H0tmNzHL$t|HtmNszHL$s|HsmNFzHL$s|HsmNzHL$s`|HsmNyHL$xs3|HsmNyHL$pps|HpsmNyHL$hPs{HPsmNeyHL$`0s{H0smN8yHL$Xs{HsmN yHL$PrR{HrmNxHL$Hr%{HrmNxHL$@rzHrmNxHL$8rzHrmNWxHL$0przHprmN*xHL$(PrqzHPrmNwHL$ 0rDzH0rmNwHL$rzHrmNwHL$qyHqmNvwHL$qyHqmNIwHL$qyHqmNwHL$qcyHqmNvHL$pq6yHpqmNvHL$Pq yHPqmNvHL$0qxH0qmNhvHL$qxHqmN;vHL$pxHpmNvHL$pUxHpmNuHL$p(xHpmNuHL$pwHpmNuHL$ppwHppmNZuHL$PpwHPpmN-uHL$0ptwH0pmNuHL$pGwHpmNtHL$owHomNtHL$ovHomNytHL$ovHomNLtHL$xovHomNtHL$ppofvHpomNsHL$hPo9vHPomNsHL$`0o vH0omNsHL$XouHomNksHL$PnuHnmN>sHL$HnuHnmNsHL$@nXuHnmNrHL$8n+uHnmNrHL$0pntHpnmNrHL$(PntHPnmN]rHL$ 0ntH0nmN0rHL$nwtHnmNrHL$mJtHmmNqHL$mtHmmNqHL$msHmmN|qHL$msHmmNOqHL$pmsHpmmN"qHL$PmisHPmmNpHL$0m`HL$cbHcmN`HL$cXbHcmN_HL$c+bHcmN_HL$`caH`cmN_HL$@caH@cmN]_HL$ caH cmN0_HL$cwaHcmN_HL$bJaHbmN^HL$baHbmN^HL$b`HbmN|^HL$b`HbmNO^HL$`b`H`bmN"^HL$@bi`H@bmN]HL$ b<`H bmN]HL$xb`HbmN]HL$pa_HamNn]HL$ha_HamNA]HL$`a_HamN]HL$Xa[_HamN\HL$P`a._H`amN\HL$H@a_H@amN\HL$@ a^H amN`\HL$8a^HamN3\HL$0`z^H`mN\HL$(`M^H`mN[HL$ ` ^H`mN[HL$`]H`mN[HL$``]H``mNR[HL$@`]H@`mN%[HL$ `l]H `mNZHL$ `?]H`mNZHL$ _]H_mNZHL$ _\H_mNqZHL$ _\H_mNDZHL$ _\H_mNZHL$ `_^\H`_mNYHL$ @_1\H@_mNYHL$  _\H _mNYHL$ _[H_mNcYHL$ ^[H^mN6YHL$ ^}[H^mN YHL$ ^P[H^mNXHL$ ^#[H^mNXHL$ `^ZH`^mNXHL$ @^ZH@^mNUXHL$  ^ZH ^mN(XHL$x ^oZH^mNWHD$dH3%(uZH [ÿ{gH~NWТ{gzHТ~NWUG1H)HiHit1HH3H~H7tHt$HD$HD$ͺHEQ맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)HjHjHH3H~H7tHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S`H dH%(HD$1VH`xARHYHilLHL$ NHmNLHL$ pXNHpmNKHL$ P+NHPmNKHL$ 0MH0mNKHL$ MHmN]KHL$ MHmN0KHL$ ЏwMHЏmNKHL$ JMHmNJHL$ MHmNJHL$ pLHpmN|JHL$x PLHPmNOJHL$p 0LH0mN"JHL$h iLHmNIHL$` HT$hHx@>HT$hLxH>1H@6\+8HT$Wx>HA8HL$J:HmN7HL$:HmN7HL$`9H`mN|7HL$@9H@mNO7HL$ 9H mN"7HL$xi9HmN6HL$p<9HmN6HL$h9HmN6HL$`8HmNn6HL$X8HmNA6HL$P`8H`mN6HL$@@[8H@mN5HL$0 .8H mN5HL$(8HmN5HL$ 7HmN`5HL$7HmN35HL$z7HmN5HL$M7HmN4HL$` 7H`mN4HL$@6H@mN4HL$ 6H mNR4HL$6HmN%4HL$l6HmN3HL$?6HmN3HL$6HmN3HL$5HmNq3HL$`5H`mND3HL$@5H@mN3HL$ ^5H mN2HL$p15HmN2HL$`5HmN2HL$P4HmNc2HL$@4HmN62HL$8}4HmN 2HL$0`P4H`mN1HL$(@#4H@mN1HL$  3H mN1HL$3HmNU1HL$3HmN(1HL$o3HmN0HL$B3HmN0HL$3HmN0HL$`2H`mNt0HL$@2H@mNG0HL$ 2H mN0HL$a2HmN/HL$~42H~mN/HL$~2H~mN/HL$~1H~mNf/HL$~1H~mN9/HL$`~1H`~mN /HL$@~S1H@~mN.HL$ ~&1H ~mN.HL$~0H~mN.HL$}0H}mNX.HL$x}0H}mN+.HL$p}r0H}mN-HL$h}E0H}mN-HL$``}0H`}mN-HL$X@}/H@}mNw-HL$P }/H }mNJ-HL$H}/H}mN-HL$@|d/H|mN,HL$8|7/H|mN,HL$0| /H|mN,HL$(|.H|mNi,HL$ `|.H`|mN<,HL$@|.H@|mN,HL$ |V.H |mN+HL$|).H|mN+HL${-H{mN+HL${-H{mN[+HL${-H{mN.+HL${u-H{mN+HL$`{H-H`{mN*HL$@{-H@{mN*HL$ {,H {mNz*HL${,H{mNM*HL$z,HzmN *HL$zg,HzmN)HL$z:,HzmN)HL$z ,HzmN)HL$`z+H`zmNl)HL$@z+H@zmN?)HL$ z+H zmN)HL$zY+HzmN(HL$y,+HymN(HL$xy*HymN(HD$dH3%(uZH [ÿyLgTH~NP(ТWLg QHТ~N&(U1H)HHt1HH3H~H7tHt$HD$HD$ͺH!맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H̀HHH3H~H7tHt$HD$~HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S`H dH%(HD$11'H`xA#)H9Vl)H%Vl=GgH Vl*=eGgJ*HL$.0%H0mN"#HL$.i%HmN"HL$.<%HmN"HL$.а%HаmN"HL$.$HmNn"HL$.$HmNA"HL$.p$HpmN"HL$x.P[$HPmN!HL$p.0.$H0mN!HL$h.$HmN!HL$`.#HmN`!HL$P.Я#HЯmN3!HL$@.z#HmN!HL$8.M#HmN HL$0.p #HpmN HL$(.P"HPmN HL$ .0"H0mNR HL$."HmN% HL$.l"HmNHL$.Ю?"HЮmNHL$-"HmNHL$-!HmNqHL$-p!HpmNDHL$-P!HPmNHL$-0^!H0mNHL$-1!HmNHL$-!HmNHL$-Э HЭmNcHL$- HmN6HL$-} HmN HL$p-pP HpmNHL$`-P# HPmNHL$P-0H0mNHL$H-HmNUHL$@-HmN(HL$8-ЬoHЬmNHL$0-BHmNHL$(-HmNHL$ -pHpmNtHL$-PHPmNGHL$-0H0mNHL$-aHmNHL$-4HmNHL$,ЫHЫmNHL$,HmNfHL$,HmN9HL$,pHpmN HL$,PSHPmNHL$,0&H0mNHL$,HmNHL$,HmNXHL$,ЪHЪmN+HL$,rHmNHL$,EHmNHL$,pHpmNHL$,PHPmNwHL$,0H0mNJHL$x,HmNHL$p,dHmNHL$h,Щ7HЩmNHL$`, HmNHL$X,HmNiHL$P,pHpmN<HL$H,PHPmNHL$@,0VH0mNHL$8,)HmNHL$0,HmNHL$(,ШHШmN[HL$ ,HmN.HL$,uHmNHL$,pHHpmNHL$,PHPmNHL$,0H0mNzHL$+HmNMHL$+HmN HL$+ЧgHЧmNHL$+:HmNHL$+ HmNHL$+pHpmNlHL$+PHPmN?HL$+0H0mNHL$+YHmNHL$+,HmNHL$+ЦHЦmNHL$+HmN^HL$+HmN1HL$+pxHpmNHL$+PKHPmNHL$+0H0mNHL$x+HmN}HL$p+HmNPHL$h+ХHХmN#HL$`+jHmNHL$X+=HmNHL$P+pHpmNHL$H+PHPmNoHL$@+0H0mNBHL$8+HmNHL$0+\HmNHL$(+Ф/HФmNHL$ +HmNHL$+HmNaHL$+pHpmN4HL$+P{HPmNHL$+0NH0mNHL$*!HmNHL$*HmNHL$*УHУmNSHL$*HmN&HL$*mHmNHL$*p@HpmNHL$*PHPmNHL$*0H0mNrHL$*HmNEHL$*HmNHL$*Т_HТmNHL$*2HmNHL$*HmNHL$*pHpmNdHL$*PHPmN7HL$*0~H0mN HL$x*QHmN HL$p*$HmN HL$h*СHСmN HL$`*HmNV HL$X*HmN) HL$P*ppHpmN HL$H*PCHPmN HL$@*0H0mN HL$8*HmNu HL$0*HmNH HL$(*РHРmN HL$ *bHmN HL$*5HmN HL$*pHpmN HL$*P HPmNg HL$*0 H0mN: HL$) HmN HL$)T HmN HL$)П' HПmN HL$) HmN HL$) HmNY HL$)p HpmN, HL$)Ps HPmN HL$)0F H0mN HL$) HmN HL$) HmNx HL$)О HОmNK HL$) HmN HL$)e HmNHL$)p8 HpmNHL$)P HPmNHL$)0 H0mNjHL$x) HmN=HL$p) HmNHL$h)НW HНmNHL$`)* HmNHL$X) HmNHL$P)p HpmN\HL$H)P HPmN/HL$@)0v H0mNHL$8)I HmNHL$0) HmNHL$()МHМmN{HL$ )HmNNHL$)HmN!HL$)phHpmNHL$)P;HPmNHL$)0H0mNHL$(HmNmHL$(HmN@HL$(ЛHЛmNHL$(ZHmNHL$(-HmNHL$(pHpmNHL$(PHPmN_HL$(0H0mN2HL$(yHmNHL$(LHmNHL$(КHКmNHL$(HmN~HL$(HmNQHL$(pHpmN$HL$(PkHPmNHL$(0>H0mNHL$x(HmNHL$p(HmNpHL$h(ЙHЙmNCHL$`(HmNHL$X(]HmNHL$P(p0HpmNHL$H(PHPmNHL$@(0H0mNbHL$8(HmN5HT$hvHT$hvHT$hvHT$hvuHT$hvaHT$hvMHT$hv9HT$hv%HT$hvHT$hvȗHT$hvЗHT$hvؗHT$hvHT$hv藶HT$hvHT$hvHT$hwqHT$hw]HT$hwIHT$h w5HT$hw !HT$hw( HT$hw0HT$hw8HT$h w@HT$h$wHHT$h(wPHT$h,wXHT$h0w`HT$h4whmHT$h8wpYHT$h4*   !"#v$l11H)H̀HHH3H~H7tHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SͶH dH%(HD$1HͶxAhHBl\HBl=gHBl*=g*HL$=PͶ&HPͶmNHL$x=0ͶH0ͶmNHL$p=ͶHͶmNXHL$h=̶H̶mN+HL$`=̶rH̶mNHL$X=̶EH̶mNHL$P=̶H̶mNHL$H=p̶Hp̶mNwHL$@=P̶HP̶mNJHL$8=0̶H0̶mNHL$0=̶dH̶mNHL$ =˶7H˶mNHL$=˶ H˶mNHL$=˶H˶mNiHL$=˶H˶mN4*   !"#v$l11H)H̀HHH3H~H7tHt$HD$^HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SH dH%(HD$1HxA]HI/lH5/lP=QfH/l*=5f*HL$KpfHpmNHL$JP9HPmNHL$J0 H0mNHL$JHmNkHL$JHmN>HL$JHmNHL$JXHmNHL$J+HmNHL$JpHpmNHL$JPHPmN]HL$J0H0mN0HL$JwHmNHL$JJHmNHL$JHmNHL$JHmN|HL$JHmNOHL$JpHpmN"HL$xJPiHPmNHL$pJ0<H0mNHL$hJHmNHL$`JHmNnHL$XJHmNAHL$PJHmNHL$HJ[HmNHL$@Jp.HpmN躿HL$8JPHPmN荿HL$0J0H0mN`HL$(JHmN3HL$ JzHmNHL$JMHmNپHL$J HmN謾HL$JHmNHL$JpHpmNRHL$IPHPmN%HL$I0lH0mNHL$I?HmN˽HL$IHmN螽HL$IHmNqHL$I踿HmNDHL$I苿HmNHL$Ip^HpmNHL$IP1HPmN轼HL$I0H0mN萼HL$I׾HmNcHL$I誾HmN6HL$I}HmN HL$IPHmNܻHL$I#HmN读HL$IpHpmN肻HL$xIPɽHPmNUHL$pI0蜽H0mN(HL$hIoHmNHL$`IBHmNκHL$XIHmN衺HL$PIHmNtHL$HI軼HmNGHL$@Ip莼HpmNHL$8IPaHPmNHL$0I04H0mNHL$(IHmN蓹HL$ IڻHmNfHL$I譻HmN9HL$I耻HmN HL$ISHmN߸HL$Ip&HpmN貸HL$HPHPmN腸HL$H0̺H0mNXHL$H蟺HmN+HL$HrHmNHL$HEHmNѷHL$HHmN褷HL$HHmNwHL$Hp边HpmNJHL$HP葹HPmNHL$H0dH0mNHL$H7HmNöHL$H߶ H߶mN薶HL$H߶ݸH߶mNiHL$H߶谸H߶mNH ׶mNʦHL$8G׶H׶mN蝦HL$0GֶHֶmNpHL$(Gֶ跨HֶmNCHL$ Gֶ芨HֶmNHL$Gֶ]HֶmNHL$G`ֶ0H`ֶmN輥HL$G@ֶH@ֶmN菥HL$F ֶ֧H ֶmNbHL$Fֶ詧HֶmN5HL$Fն|HնmNHL$FնOHնmNۤHL$Fն"HնmN认HL$FնHնmN聤HL$F`նȦH`նmNTHL$F@ն蛦H@նmN'HL$F նnH նmNHL$FնAHնmNͣHL$pFԶHԶmN蠣HL$`FԶHԶmNsHL$PFԶ躥HԶmNFHL$HFԶ荥HԶmNHL$@F`Զ`H`ԶmNHL$8F@Զ3H@ԶmN迢HL$0F ԶH ԶmN蒢HL$(FԶ٤HԶmNeHL$ FӶ謤HӶmN8HL$FӶHӶmN HL$FӶRHӶmNޡHL$FӶ%HӶmN象HL$F`ӶH`ӶmN脡HL$E@ӶˣH@ӶmNWHL$E Ӷ螣H ӶmN*HL$EӶqHӶmNHL$EҶDHҶmNРHL$EҶHҶmN裠HL$EҶHҶmNvHL$EҶ轢HҶmNIHL$E`Ҷ萢H`ҶmNHL$E@ҶcH@ҶmNHL$E Ҷ6H ҶmNŸHL$EҶ HҶmN蕟HL$EѶܡHѶmNhHL$EѶ诡HѶmN;HL$EѶ股HѶmNHL$xEѶUHѶmNHL$pE`Ѷ(H`ѶmN贞HL$hE@ѶH@ѶmN臞HL$`E ѶΠH ѶmNZHL$XEѶ衠HѶmN-HL$PEжtHжmNHL$HEжGHжmNӝHL$@EжHжmN覝HL$8EжHжmNyHL$0E`жH`жmNLHL$(E@ж蓟H@жmNHL$ E жfH жmNHL$Eж9HжmNŜHL$E϶ H϶mN蘜HL$E϶ߞH϶mNkHL$E϶貞H϶mN>HL$D϶腞H϶mNHL$D`϶XH`϶mNHL$D@϶+H@϶mN跛HL$D ϶H ϶mN芛HL$D϶ѝH϶mN]HL$Dζ褝HζmN0HL$DζwHζmNHL$DζJHζmN֚HL$DζHζmN詚HL$D`ζH`ζmN|HL$D@ζÜH@ζmNOHL$D ζ薜H ζmN"HL$DζiHζmNHL$DͶ<HͶmNșHL$DͶHͶmN蛙HD$dH3%(uZH [ÿfH~N`<ТgfHТ~N6蜉1H)HٶHٶt1HH3H~H7tHt$HD$kHD$ͺH맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)HڶHڶHH3H~H7tHt$HD$΂HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SH dH%(HD$1AHxA蝔HlܚHul萈=fHZl*=uf*HL$Xp視HpmN2HL$WPyHPmNHL$W0LH0mNؓHL$WHmN諓HL$WHmN~HL$WŕHmNQHL$W蘕HmN$HL$WkHmNHL$Wp>HpmNʒHL$WPHPmN蝒HL$W0H0mNpHL$W跔HmNCHL$W芔HmNHL$W]HmNHL$W0HmN輑HL$WHmN菑HL$Wp֓HpmNbHL$xWP詓HPmN5HL$pW0|H0mNHL$hWOHmNېHL$`W"HmN讐HL$XWHmN聐HL$PWȒHmNTHL$HW蛒HmN'HL$@WpnHpmNHL$8WPAHPmN͏HL$0W0H0mN蠏HL$(WHmNsHL$ W躑HmNFHL$W荑HmNHL$W`HmNHL$W3HmN迎HL$WpHpmN蒎HL$VPِHPmNeHL$V0謐H0mN8HL$VHmN HL$VRHmNލHL$V%HmN豍HL$VHmN脍HL$VˏHmNWHL$Vp螏HpmN*HL$VPqHPmNHL$V0DH0mNЌHL$VHmN裌HL$VHmNvHL$V轎HmNIHL$V萎HmNHL$VcHmNHL$Vp6HpmN‹HL$xVP HPmN蕋HL$pV0܍H0mNhHL$hV词HmN;HL$`V肍HmNHL$XVUHmNHL$PV(HmN贊HL$HVHmN臊HL$@VpΌHpmNZHL$8VP行HPmN-HL$0V0tH0mNHL$(VGHmNӉHL$ VHmN覉HL$VHmNyHL$VHmNLHL$V蓋HmNHL$VpfHpmNHL$UP9HPmNňHL$U0 H0mN蘈HL$UߊHmNkHL$U貊HmN>HL$U腊HmNHL$UXHmNHL$U+HmN跇HL$UpHpmN芇HL$UPщHPmN]HL$U0褉H0mN0HL$UwHmNHL$UJHmNֆHL$UHmN詆HL$UHmN|HL$UÈHmNOHL$Up薈HpmN"HL$xUPiHPmNHL$pU0<H0mNȅHL$hUHmN蛅HL$`UHmNnHL$XU赇HmNAHL$PU與HmNHL$HU[HmNHL$@Up.HpmN躄HL$8UPHPmN荄HL$0U0ԆH0mN`HL$(U视HmN3HL$ UzHmNHL$UMHmNكHL$U HmN謃HL$UHmNHL$UpƅHpmNRHL$TP虅HPmN%HL$T0lH0mNHL$T?HmN˂HL$THmN螂HL$THmNqHL$T踄HmNDHL$T苄HmNHL$Tp^HpmNHL$TP1HPmN轁HT$hv9HT$hv%HT$hvHT$hvHT$hvHT$hvՇHT$hvHT$hv譇HT$hv虇HT$hv腇HT$hvqHT$hv]HT$hv IHT$hv(5HT$hv0!HT$hv8 HT$hw@HT$hwHHT$hwPцHT$h wX轆HT$hw`詆HT$hwh蕆HT$hwp聆HT$hwxmHT$h wYHT$h$wEHT$h(w1HT$h,wHT$h0w HT$h4wHT$h8wHT$huHL$SwHmNuHL$SXwHmNtHL$S`+wH`mNtHL$S@vH@mNtHL$S vH mN]tHL$pSvHmN0tHL$`SwvHmNtHL$PSJvHmNsHL$HSvHmNsHL$@SuHmN|sHL$8S`uH`mNOsHL$0S@uH@mN"sHL$(S iuH mNrHL$ S4*   !"#v$l11H)HHHH3H~H7tHt$HD$>cHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.S!H dH%(HD$1hH!xAd(kHlkHlX=шfHl*=f*HL$f!fH!mNrdHL$fp!fHp!mNEdHL$fP!fHP!mNdHL$f0!_fH0!mNcHL$f!2fH!mNcHL$f fH mNcHL$f eH mNdcHL$xf eH mN7cHL$pf ~eH mN cHL$hfp QeHp mNbHL$`fP $eHP mNbHL$Pf0 dH0 mNbHL$@f dH mNVbHL$8fdHmN)bHL$0fpdHmNaHL$(fCdHmNaHL$ fdHmNaHL$fpcHpmNuaHL$fPcHPmNHaHL$f0cH0mNaHL$ebcHmN`HL$e5cHmN`HL$ecHmN`HL$ebHmNg`HL$ebHmN:`HL$epbHpmN `HL$ePTbHPmN_HL$e0'bH0mN_HL$eaHmN_HL$eaHmNY_HL$peaHmN,_HL$`esaHmN^HL$PeFaHmN^HL$HepaHpmN^HL$@eP`HPmNx^HL$8e0`H0mNK^HL$0e`HmN^HL$(ee`HmN]HL$ e8`HmN]HL$e `HmN]HL$e_HmNj]HL$ep_HpmN=]HL$eP_HPmN]HL$d0W_H0mN\HL$d*_HmN\HL$d^HmN\HL$d^HmN\\HL$d^HmN/\HL$dv^HmN\HL$dpI^HpmN[HL$dP^HPmN[HL$d0]H0mN{[HL$d]HmNN[HL$d]HmN![HL$dh]HmNZHL$d;]HmNZHL$d]HmNZHL$xdp\HpmNmZHL$pdP\HPmN@ZHL$hd0\H0mNZHL$`dZ\HmNYHL$Xd-\HmNYHL$Pd\HmNYHL$Hd[HmN_YHL$@d[HmN2YHL$8dpy[HpmNYHL$0dPL[HPmNXHL$(d0[H0mNXHL$ dZHmN~XHL$dZHmNQXHL$dZHmN$XHL$dkZHmNWHL$d>ZHmNWHL$cpZHpmNWHL$cPYHPmNpWHL$c0YH0mNCWHL$cYHmNWHL$c]YHmNVHL$c0YHmNVHL$cYHmNVHL$cXHmNbVHL$cpXHpmN5VHL$cP|XHPmNVHL$c0OXH0mNUHL$c"XHmNUHL$cWHmNUHL$cWHmNTUHL$cWHmN'UHL$cp kkkkkkkkWHpmNTHL$xcPVHPmN}THL$pc0VH0mNPTHL$hcVHmN#THL$`cjVHmNSHL$Xc=VHmNSHL$PcVHmNSHL$HcUHmNoSHL$@cpUHpmNBSHL$8cPUHPmNSHL$0c0\UH0mNRHL$(c/UHmNRHL$ cUHmNRHL$cTHmNaRHL$cTHmN4RHL$c{THmNRHL$cpNTHpmNQHL$bP!THPmNQHL$b0SH0mNQHL$bSHmNSQHL$bSHmN&QHL$bmSHmNPHL$b@SHmNPHL$bSHmNPHL$bpRHpmNrPHL$bPRHPmNEPHL$b0RH0mNPHL$b_RHmNOHL$b2RHmNOHL$bRHmNOHL$bQHmNdOHL$bQHmN7OHL$bp~QHpmN OHL$xbPQQHPmNNHL$pb0$QH0mNNHL$hbPHmNNHL$`bPHmNVNHL$XbPHmN)NHL$PbpPHmNMHL$HbCPHmNMHL$@bpPHpmNMHL$8bPOHPmNuMHL$0b0OH0mNHMHL$(bOHmNMHL$ bbOHmNLHL$b5OHmNLHL$bOHmNLHL$bNHmNgLHL$bpNHpmN:LHL$aPNHPmN LHL$a0TNH0mNKHL$a'NHmNKHL$aMHmNKHL$aMHmNYKHL$aMHmN,KHL$asMHmNJHL$apFMHpmNJHL$aPMHPmNJHL$a0LH0mNxJHL$aLHmNKJHL$aLHmNJHL$aeLHmNIHL$a8LHmNIHL$a LHmNIHL$apKHpmNjIHL$xaPKHPmN=IHL$pa0KH0mNIHL$haWKHmNHHL$`a *KH mNHHL$Xa JH mNHHL$Pa JH mN\HHL$Ha JH mN/HHL$@ap vJHp mNHHL$8aP IJHP mNGHL$0a0 JH0 mNGHL$(a IH mN{GHL$ a IH mNNGHL$a IH mN!GHL$a hIH mNFHL$a ;IH mNFHL$ap IHp mNFHL$`P HHP mNmFHL$`0 HH0 mN@FHL$` HH mNFHL$` ZHH mNEHL$` -HH mNEHL$` HH mNEHL$` GH mN_EHL$`p GHp mN2EHL$`P yGHP mNEHL$`0 LGH0 mNDHL$` GH mNDHL$` FH mN~DHL$` FH mNQDHL$` FH mN$DHL$` kFH mNCHL$`p >FHp mNCHL$x`P FHP mNCHL$p`0 EH0 mNpCHL$h` EH mNCCHL$`` EH mNCHL$X` ]EH mNBHL$P` 0EH mNBHL$H` EH mNBHL$@`p DHp mNbBHL$8`P DHP mN5BHT$hvHHT$hvHHT$hvHHT$hvuHHT$hvaHHT$hvMHHT$hv9HHT$hv%HHT$hvHHT$hvGHT$hvGHT$hvGHT$hv GHT$hv(GHT$hv0GHT$hv8GHT$hw@qGHT$hwH]GHT$hwPIGHT$h wX5GHT$hw`!GHT$hwh GHT$hwpFHT$hwxFHT$h wFHT$h$wFHT$h(wFHT$h,wFHT$h0wFHT$h4wmFHT$h8wYFHT$hHT$hwDHT$hwDHT$hwDHT$hw|DHT$hw hDHT$hw(TDHT$hw0@DHT$hw8,DHT$hw@DHT$hwHDHT$hwPCHT$hwXCHT$hw`CHT$hwhCHT$hwpCHT$hwxCHT$hwxCHT$hwdCHT$hwPCHT$hw4*   !"#v$l11H)HHHH3H~H7tHt$HD$CHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.S=H dH%(HD$18H=xA5h;HIk\;H5k)=YfHk*=Xf*HL$p=&7H=mN4HL$h=6H=mN4HL$`p=6Hp=mNX4HL$XP=6HP=mN+4HL$P0=r6H0=mN3HL$H=E6H=mN3HL$@<6H<mN3HL$8<5H<mNw3HL$0<5H<mNJ3HL$(<5H<mN3HL$ p<d5Hp<mN2HL$P<75HP<mN2HL$0< 5H0<mN2HL$<4H<mNi2HL$;4H;mN<2HL$;4H;mN2HL$;V4H;mN1HL$;)4H;mN1HL$p;3Hp;mN1HL$P;3HP;mN[1HL$0;3H0;mN.1HL$;u3H;mN1HL$:H3H:mN0HL$:3H:mN0HL$:2H:mNz0HL$:2H:mNM0HL$p:2Hp:mN 0HL$P:g2HP:mN/HL$0::2H0:mN/HL$: 2H:mN/HL$91H9mNl/HL$x91H9mN?/HL$p91H9mN/HL$h9Y1H9mN.HL$`p9,1Hp9mN.HL$XP90HP9mN.HL$P090H09mN^.HL$H90H9mN1.HL$@8x0H8mN.HL$88K0H8mN-HL$080H8mN-HL$(8/H8mN}-HL$ p8/Hp8mNP-HL$P8/HP8mN#-HL$08j/H08mN,HL$8=/H8mN,HL$7/H7mN,HL$~7.H7mNo,HL$~7.H7mNB,HL$~7.H7mN,HL$~p7\.Hp7mN+HL$~P7/.HP7mN+HL$~07.H07mN+HL$~7-H7mNa+HL$~6-H6mN4+HL$~6{-H6mN+HL$~6N-H6mN*HL$~6!-H6mN*HL$~p6,Hp6mN*HL$~P6,HP6mNS*HL$~06,H06mN&*HL$~6m,H6mN)HL$~5@,H5mN)HL$x~5,H5mN)HL$p~5+H5mNr)HL$h~5+H5mNE)HL$`~p5+Hp5mN)HL$X~P5_+HP5mN(HL$P~052+H05mN(HL$H~5+H5mN(HL$@~4*H4mNd(HL$8~4*H4mN7(HL$0~4~*H4mN (HL$(~4Q*H4mN'HL$ ~p4$*Hp4mN'HL$~P4)HP4mN'HL$~04)H04mNV'HL$~4)H4mN)'HL$~3p)H3mN&HL$}3C)H3mN&HL$}3)H3mN&HL$}3(H3mNu&HL$}p3(Hp3mNH&HL$}P3(HP3mN&HL$}03b(H03mN%HL$}35(H3mN%HL$}2(H2mN%HL$}2'H2mNg%HL$}2'H2mN:%HL$}2'H2mN %HL$}p2T'Hp2mN$HL$}P2''HP2mN$HL$}02&H02mN$HL$}2&H2mNY$HL$}1&H1mN,$HL$x}1s&H1mN#HL$p}1F&H1mN#HL$h}1&H1mN#HL$`}p1%Hp1mNx#HL$X}P1%HP1mNK#HL$P}01%H01mN#HL$H}1e%H1mN"HL$@}08%H0mN"HL$8}0 %H0mN"HL$0}0$H0mNj"HL$(}0$H0mN="HT$hv/(HT$hv/(HT$hv/(HT$hv/}(HT$hv /i(HT$hv(/U(HT$hv0/A(HT$hv8/-(HT$hv@/(HT$hvH/(HT$hvP/'HT$hvX/'HT$hv`/'HT$hvh/'HT$hvp/'HT$hvx/'HT$hw/y'HT$hw/e'HT$hw/Q'HT$h w/='HT$hw/)'HT$hw/'HT$hw/'HT$hw/&HT$h w/&HT$h$w/&HT$h(w/&HT$h,w/&HT$h0w/&HT$h4w/u&HT$h8w/a&HT$hHL$|+H+mNHL$|+XH+mNHL$|++H+mNHL$|`+H`+mNHL$|@+H@+mN]HL$| +H +mN0HL$|+wH+mNHL$|*JH*mNHL$|*H*mNHL$|*H*mN|HL$p|*H*mNOHL$`|`*H`*mN"HL$P|@*iH@*mNHL$@| *<H *mNHL$0|*H*mNHL$(|)H)mNnHL$ |)H)mNAHL$|)H)mNHL$|)[H)mNHL$|`).H`)mNHL${@)H@)mNHL${ )H )mN`HL${)H)mN3HL${(zH(mNHL${(MH(mNHL${( H(mNHL${(H(mNHL${`(H`(mNRHL${@(H@(mN%HL${ (lH (mNHL${(?H(mNHL${'H'mNHL$x{'H'mNqHL$p{'H'mNDHL$h{'H'mNHL$`{`'^H`'mNHL$X{@'1H@'mNHL$P{ 'H 'mNHL$@{'H'mNcHL$0{&H&mN6HL$({&}H&mN HL$ {&PH&mNHL${&#H&mNHL${`&H`&mNHL${@&H@&mNUHL${ &H &mN(HL$z&oH&mNHL$z%BH%mNHL$z%H%mNHL$z%H%mNtHL$z%H%mNGHL$z`%H`%mNHL$z@%aH@%mNHL$z %4H %mNHL$z%H%mNHL$z$H$mNfHL$z$H$mN9HL$z$H$mN HL$z$SH$mN HL$z`$&H`$mN HL$z@$H@$mN HL$z $H $mNX HL$xz$H$mN+ HL$pz#rH#mN HL$hz#EH#mN HL$`z#H#mN HL$Xz#H#mNw HL$Pz`#H`#mNJ HL$Hz@#H@#mN HL$@z #dH #mN HL$8z#7H#mN HL$0z" H"mN HL$(z" H"mNi HL$ z" H"mN< HL$z" H"mN HL$z`"V H`"mN HL$z@") H@"mN HL$z " H "mN HL$y" H"mN[ HD$dH3%(uZH [ÿI.fT6H~N <Т'.f2HТ~N \1H)H@-H@-t1HH3H~H7tHt$HD$xHD$ͺH맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H/H/HH3H~H7tHt$HD$vHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SYH dH%(HD$1 HYxA] Hk HukP=Q)fHZk*=5)f*HL$0YfHYmNHL$(Y9HYmNHL$ pY HpYmNHL$PYHPYmNkHL$0YH0YmN>HL$YHYmNHL$XXHXmNHL$X+HXmNHL$XHXmNHL$荂XHXmN]HL$pXHpXmN0HL$؍PXwHPXmNHL$Ѝ0XJH0XmNHL$ȍXHXmNHL$WHWmN|HL$WHWmNOHL$WHWmN"HL$WiHWmNHL$pW<HpWmNHL$PWHPWmNHL$0WH0WmNnHL$WHWmNAHL$VHVmNHL$xV[HVmNHL$pV.HVmNHL$hVHVmNHL$`pVHpVmN`HL$XPVHPVmN3HL$P0VzH0VmNHL$HVMHVmNHL$@U HUmNHL$8UHUmNHL$0UHUmNRHL$(UHUmN%HL$ pUlHpUmNHL$PU?HPUmNHL$0UH0UmNHL$UHUmNqHL$THTmNDHL$THTmNHL$T^HTmNHL$茂T1HTmNHL$pTHpTmNHL$،PTHPTmNcHL$Ќ0TH0TmN6HL$ȌT}HTmN HL$SPHSmNHL$S#HSmNHL$SHSmNHL$SHSmNUHL$pSHpSmN(HL$PSoHPSmNHL$0SBH0SmNHL$SHSmNHL$RHRmNtHL$xRHRmNGHL$pRHRmNHL$hRaHRmNHL$`pR4HpRmNHL$XPRHPRmNHL$P0RH0RmNfHL$HRHRmN9HL$@QHQmN HL$8QSHQmNHL$0Q&HQmNHL$(QHQmNHL$ pQHpQmNXHL$PQHPQmN+HL$0QrH0QmNHL$QEHQmNHL$PHPmNHL$PHPmNwHL$PHPmNJHL$苂PHPmNHL$pPdHpPmNHL$؋PP7HPPmNHL$Ћ0P H0PmNHL$ȋPHPmNiHL$OHOmNmH>mNHL$>@H>mNHL$؇>H>mNHL$Ї>H>mNrHL$ȇ`>H`>mNEHL$@>H@>mNHL$ >_H >mNHD$dH3%(OkAk3k%kk kkkuZH [ÿeH~N`<ТgeHТ~N61H)H@IH@It1HH3H~H7tHt$HD$nHD$ͺH맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)HKHKHH3H~H7tHt$HD$lHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.H(edH%(HD$1BH(exAHL$ dkkkڻk̻kkkkHdmN!HL$dhHdmNHL$d;HdmNHL$dHdmNHL$pdHpdmNmHL$PdHPdmN@HL$0dH0dmNHL$螂dZHdmNHL$c-HcmNHL$؞cHcmNHL$ОcHcmN_HL$cHcmN2HL$pcyHpcmNHL$PcLHPcmNHL$0cH0cmNHL$cHcmN~HL$bHbmNQHL$bHbmN$HL$bkHbmNHL$pb>HbmNHL$`pbHpbmNHL$PPbHPbmNpHL$@0bH0bmNCHL$0bHbmNHL$(a]HamNHL$ a0HamNHL$aHamNHL$aHamNbHL$paHpamN5HL$Pa|HPamNHL$0aOH0amNHL$Нa"HamNHL$`H`mNHL$`H`mNTHL$`H`mN'HL$`nH`mNHL$p`AHp`mNHL$P`HP`mNHL$0`H0`mNsHL$`H`mNFHL$_H_mNHL$x_`H_mNHL$p_3H_mNHL$h_H_mNHL$`p_Hp_mNeHL$XP_HP_mN8HL$P0_H0_mN HL$@_RH_mNHL$0^%H^mNHL$(^H^mNHL$ ^H^mNWHL$^H^mN*HL$p^qHp^mNHL$P^DHP^mNHL$0^H0^mNHL$^H^mNvHL$]H]mNIHL$蜂]H]mNHL$]cH]mNHL$؜]6H]mNHL$Мp] Hp]mNHL$ȜP]HP]mNhHL$0]H0]mN;HL$]H]mNHL$\UH\mNHL$\(H\mNHL$\H\mNHL$\H\mNZHL$p\Hp\mN-HL$P\tHP\mNHL$0\GH0\mNHL$x\H\mNHL$p[H[mNyHL$h[H[mNLHL$`[H[mNHL$X[fH[mNHL$Pp[9Hp[mNHL$HP[ HP[mNHL$@0[H0[mNkHL$8[H[mN>HL$0ZHZmNHL$(ZXHZmNHL$ Z+HZmNHL$ZHZmNHL$pZHpZmN]HL$PZHPZmN0HL$0ZwH0ZmNHL$ZJHZmN!H2kHkɹ=eHktN=etlHtAhAVyY2XZHD$dH3%(uVHÿТgeHТ~N6닿8eCH~NjuDS(H dH%(HD$1qH(xAHL$`3k%kk kkkkkHmNPHL$XЀHЀmN#HL$PjHmNHL$H=HmNHL$@pHpmNHL$8PHPmNoHL$00H0mNBHL$(HmNHL$ \HmNHL$/HmNHL$HmNHL$HmNaHL$pHpmN4HL$讂P{HPmNHL$ஂ0NH0mNHL$خ!HmNHL$Ю~H~mNHL$Ȯ~H~mNSHL$~H~mN&HL$~mH~mNHL$p~@Hp~mNHL$P~HP~mNHL$0~H0~mNrHL$p~H~mNEHL$h}H}mNHL$`}_H}mNHL$X}2H}mN辿HL$P}H}mN葿HL$@p}Hp}mNdHL$0P}HP}mN7HL$ 0}~H0}mN HL$}QH}mNݾHL$|$H|mN谾HL$|H|mN胾HL$|H|mNVHL$譂|H|mN)HL$ୂp|pHp|mNHL$حP|CHP|mNϽHL$Э0|H0|mN袽HL$ȭ|H|mNuHL${輿H{mNHHL${菿H{mNHL${bH{mNHL${5H{mNHL$p{Hp{mN蔼HL$P{۾HP{mNgHL$0{设H0{mN:HL${聾H{mN HL$xzTHzmNHL$pz'HzmN賻HL$hzHzmN膻HL$`zͽHzmNYHL$Xpz蠽HpzmN,HL$PPzsHPzmNHL$H0zFH0zmNҺHL$@zHzmN襺HL$8yHymNxHL$0y迼HymNKHL$(y蒼HymNHL$ yeHymNHL$py8HpymNĹHL$Py HPymN藹HL$0y޻H0ymNjHL$y豻HymN=HL$x脻HxmNHL$xWHxmNHL$謂x*HxmN趸HL$ଂxHxmN艸HL$جpxкHpxmN\HL$ЬPx裺HPxmN/HL$Ȭ0xvH0xmNHL$xIHxmNշHL$wHwmN訷HL$wHwmN{HL$w¹HwmNNHL$w蕹HwmN!HL$pwhHpwmNHL$Pw;HPwmNǶHL$0wH0wmN蚶HL$wHwmNmHL$xv贸HvmN@HL$pv臸HvmNHL$hvZHvmNHL$`v-HvmN蹵HL$XpvHpvmN茵HL$PPvӷHPvmN_HL$H0v覷H0vmN2HL$@vyHvmNHL$8uLHumNشHL$0uHumN諴HL$(uHumN~HL$ uŶHumNQHL$pu蘶HpumN$HL$PukHPumNHL$0u>H0umNʳHL$uHumN蝳HL$tHtmNpHL$t践HtmNCHL$諂t芵HtmNHL$ૂt]HtmNHL$ثpt0HptmN輲HL$ЫPtHPtmN菲HL$ȫ0tִH0tmNbHL$t詴HtmN5HL$s|HsmNHL$sOHsmN۱HL$s"HsmN讱HL$sHsmN聱HL$psȳHpsmNTHL$Ps蛳HPsmN'HL$0snH0smNHL$sAHsmNͰHL$xrHrmN蠰HL$prHrmNsHL$hr躲HrmNFHL$`r荲HrmNHL$Xpr`HprmNHL$PPr3HPrmN迯HL$H0rH0rmN蒯HL$@rٱHrmNeHL$8q謱HqmN8HL$0qHqmN HL$(qRHqmNޮHL$ q%HqmN豮HL$pqHpqmN脮HL$Pq˰HPqmNWHL$0q螰H0qmN*HL$qqHqmNHL$pDHpmNЭHL$pHpmN裭HL$誂pHpmNvHL$ંp软HpmNIHL$تpp萯HppmNHL$ЪPpcHPpmNHL$Ȫ0p6H0pmN¬HL$p HpmN蕬HL$oܮHomNhHL$o诮HomN;HL$o肮HomNHL$oUHomNHL$po(HpomN贫HL$PoHPomN臫HL$0oέH0omNZHL$o衭HomN-HL$xntHnmNHL$pnGHnmNӪHL$hnHnmN親HL$`nHnmNyHL$XpnHpnmNLHL$PPn蓬HPnmNHL$H0nfH0nmNHL$@n9HnmNũHL$8m HmmN蘩HL$0m߫HmmNkHL$(m貫HmmN>HL$ m腫HmmNHL$pmXHpmmNHL$Pm+HPmmN跨HL$0mH0mmN芨HL$mѪHmmN]HL$l褪HlmN0HL$lwHlmNHL$詂lJHlmN֧HL$ੂlHlmN詧HL$ةplHplmN|HL$ЩPléHPlmNOHL$ȩ0l薩H0lmN"HL$liHlmNHL$k<HkmNȦHL$kHkmN蛦HL$kHkmNnHL$k赨HkmNAHL$pk舨HpkmNHL$Pk[HPkmNHL$0k.H0kmN躥HL$kHkmN荥HL$xjԧHjmN`HL$pj觧HjmN3HL$hjzHjmNHL$`jMHjmN٤HL$Xpj HpjmN謤HL$PPjHPjmNHL$H0jƦH0jmNRHL$@j虦HjmN%HL$8ilHimNHL$0i?HimNˣHL$(iHimN螣HL$ iHimNqHL$pi踥HpimNDHL$Pi若HPimNHL$0i^H0imNHL$i1HimN轢HL$hHhmN萢HL$hפHhmNcHT$hv@gߨHT$hvHg˨HT$hvPg跨HT$hvXg裨HT$hv`g菨HT$hvhg{HT$hvpggHT$hvxgSHT$hvg?HT$hvg+HT$hvgHT$hvgHT$hvgHT$hvgۧHT$hvgǧHT$hvg賧HT$hwg蟧HT$hwg苧HT$hwgwHT$h wgcHT$hwgOHT$hwg;HT$hwg'HT$hwgHT$h whHT$h$whHT$h(whצHT$h,whæHT$h0w h详HT$h4w(h蛦HT$h8w0h臦HT$hHT$hxf*HT$hxfHT$hxfHT$h xfHT$h$xfڡHT$h(xfơHT$h,xf財HT$h0xf螡HT$h4xf芡HT$h8xfvHT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H@gH@g HH3H~H7tHt$HD$JHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01f.S(H dH%(HD$1QH(xA譕HL$kkkk۳kͳkkk褗HmN0HL$МwHМmNHL$JHmN֔HL$HmN詔HL$pHpmN|HL$xPÖHPmNOHL$p0薖H0mN"HL$hiHmNHL$`<HmNȓHL$XЛHЛmN蛓HL$PHmNnHL$@赕HmNAHL$0p舕HpmNHL$(P[HPmNHL$ 0.H0mN躒HL$HmN荒HL$ԔHmN`HL$К觔HКmN3HL$zHmNHL$MHmNّHL$ෂp HpmN謑HL$зPHPmNHL$0ƓH0mNRHL$虓HmN%HL$lHmNHL$Й?HЙmNːHL$HmN螐HL$HmNqHL$p踒HpmNDHL$pP苒HPmNHL$`0^H0mNHL$P1HmN轏HL$@HmN萏HL$8ИבHИmNcHL$0誑HmN6HL$(}HmN HL$ pPHpmN܎HL$P#HPmN诎HL$0H0mN肎HL$ɐHmNUHL$蜐HmN(HL$ЗoHЗmNHL$BHmN΍HL$趂HmN衍HL$ංpHpmNtHL$ضP軏HPmNGHL$ж0莏H0mNHL$aHmNHL$4HmNHL$ЖHЖmN蓌HL$ڎHmNfHL$譎HmN9HL$p耎HpmN HL$PSHPmNߋHL$0&H0mN貋HL$HmN腋HL$x̍HmNXHL$pЕ蟍HЕmN+HL$hrHmNHL$`EHmNъHL$XpHpmN褊HL$PPHPmNwHL$H0辌H0mNJHL$@葌HmNHL$8dHmNHL$0Д7HДmNÉHL$( HmN薉HL$ ݋HmNiHL$p谋HpmNvH0mNsHL$@vHmNsHL$8uHmNpsHL$0ЄuHЄmNCsHT$hv@yHT$hvHyHT$hvPyHT$hvXyHT$hv`oyHT$hvh[yHT$hvpGyHT$hvx3yHT$hvyHT$hv yHT$hvxHT$hvxHT$hvxHT$hvxHT$hvxHT$hvxHT$hwxHT$hwȃkxHT$hwЃWxHT$h w؃CxHT$hw/xHT$hw胷xHT$hwxHT$hwwHT$h wwHT$h$wwHT$h(wwHT$h,wwHT$h0w wHT$h4w({wHT$h8w0gwHT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H@H@ HH3H~H7tHt$HD$HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01f.S8H dH%(HD$11jH8xAfHL$pƂkkk٠kˠkkkkhHmNfHL$hƂืWhHืmNeHL$`Ƃ*hHmNeHL$XƂgHmNeHL$PƂgHmN\eHL$HƂ`gH`mN/eHL$@Ƃ@vgH@mNeHL$8Ƃ IgH mNdHL$0ƂgHmNdHL$(Ƃ෷fH෷mN{dHL$ ƂfHmNNdHL$ƂfHmN!dHL$ƂhfHmNcHL$ł`;fH`mNcHL$ł@fH@mNcHL$ł eH mNmcHL$łeHmN@cHL$łභeHභmNcHL$łZeHmNbHL$ł-eHmNbHL$łeHmNbHL$ł`dH`mN_bHL$ł@dH@mN2bHL$ł ydH mNbHL$xłLdHmNaHL$pł൷dH൷mNaHL$hłcHmN~aHL$`łcHmNQaHL$PłcHmN$aHL$@ł`kcH`mN`HL$0ł@>cH@mN`HL$ ł cH mN`HL$łbHmNp`HL$łഷbHഷmNC`HL$łbHmN`HL$Ă]bHmN_HL$Ă0bHmN_HL$Ă`bH`mN_HL$Ă@aH@mNb_HL$Ă aH mN5_HL$Ă|aHmN_HL$Ă೷OaH೷mN^HL$Ă"aHmN^HL$Ă`HmN^HL$Ă`HmNT^HL$Ă``H`mN'^HL$Ă@n`H@mN]HL$Ă A`H mN]HL$Ă`HmN]HL$xĂಷ_HಷmNs]HL$pĂ_HmNF]HL$hĂ_HmN]HL$`Ă`_HmN\HL$XĂ`3_H`mN\HL$PĂ@_H@mN\HL$HĂ ^H mNe\HL$@Ă^HmN8\HL$8Ă౷^H౷mN \HL$0ĂR^HmN[HL$(Ă%^HmN[HL$ Ă]HmN[HL$Ă`]H`mNW[HL$Ă@]H@mN*[HL$Ă q]H mNZHL$ĂD]HmNZHL$Âష]HషmNZHL$Â\HmNvZHL$Â\HmNIZHL$Â\HmNZHL$Â`c\H`mNYHL$Â@6\H@mNYHL$ \H mNYHL$Â[HmNhYHL$Â௷[H௷mN;YHL$Â[HmNYHL$ÂU[HmNXHL$Â([HmNXHL$Â`ZH`mNXHL$Â@ZH@mNZXHL$ ZH mN-XHL$ÂtZHmNXHL$xÂஷGZHஷmNWHL$pÂZHmNWHL$hÂYHmNyWHL$`ÂYHmNLWHL$XÂ`YH`mNWHL$PÂ@fYH@mNVHL$H 9YH mNV]H1k]HkJ=zeHk =zeHL$@ÂXHmNZVHL$8ÂЭXHЭmN-VHL$0ÂtXHmNVHL$(ÂGXHmNUHL$ ÂpXHpmNUHL$ÂPWHPmNyUHL$Â0WH0mNLUHL$ÂWHmNUHL$ÂfWHmNTHL$‚Ь9WHЬmNTHL$‚ WHmNTHL$‚VHmNkTHL$‚pVHpmN>THL$‚PVHPmNTHL$‚0XVH0mNSHL$‚+VHmNSHL$‚UHmNSHL$‚ЫUHЫmN]SHL$‚UHmN0SHL$‚wUHmNSHL$‚pJUHpmNRHL$‚PUHPmNRHL$‚0TH0mN|RHL$‚THmNORHL$‚THmN"RHL$x‚ЪiTHЪmNQHL$p‚4*   !"#v$l11H)H@H@HH3H~H7tHt$HD$>@HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SHշH dH%(HD$1q:HHշxA6HL$0շ9H0շmN6HL$շ8HշmNs6HL$Է8HԷmNF6HL$Է8HԷmN6HL$Է`8HԷmN5HL$Է38HԷmN5HL$pԷ8HpԷmN5HL$xPԷ7HPԷmNe5HL$p0Է7H0ԷmN85HL$hԷ7HԷmN 5HL$`ӷR7HӷmN4HL$Pӷ%7HӷmN4HL$@ӷ6HӷmN4HL$8ӷ6HӷmNW4HL$0pӷ6HpӷmN*4HL$(Pӷq6HPӷmN3HL$ 0ӷD6H0ӷmN3HL$ӷ6HӷmN3HL$ҷ5HҷmNv3HL$ҷ5HҷmNI3HL$ҷ5HҷmN3HL$ҷc5HҷmN2HL$pҷ65HpҷmN2HL$Pҷ 5HPҷmN2HL$0ҷ4H0ҷmNh2HL$ҷ4HҷmN;2HL$ѷ4HѷmN2HL$ѷU4HѷmN1HL$ѷ(4HѷmN1HL$ѷ3HѷmN1HL$ppѷ3HpѷmNZ1HL$`Pѷ3HPѷmN-1HL$P0ѷt3H0ѷmN1HL$HѷG3HѷmN0HL$@з3HзmN0HL$8з2HзmNy0HL$0з2HзmNL0HL$(з2HзmN0HL$ pзf2HpзmN/HL$Pз92HPзmN/HL$0з 2H0зmN/HL$з1HзmNk/HL$Ϸ1HϷmN>/HL$Ϸ1HϷmN/HL$ϷX1HϷmN.HL$Ϸ+1HϷmN.HL$pϷ0HpϷmN.HL$PϷ0HPϷmN].HL$0Ϸ0H0ϷmN0.HL$Ϸw0HϷmN.HL$ηJ0HηmN-HL$η0HηmN-HL$η/HηmN|-HL$η/HηmNO-HL$pη/HpηmN"-HL$Pηi/HPηmN,HL$0ηHT$h$x*HT$h(xHT$h,xHT$h0xHT$h4xHT$h8x HT$hGk=q0eHT$)̂``hHFk`PhhPǂXxA`AƂ.̂HZYHFkHFkHD$dH3%(uZH [ÿТ/e4HТ~N J/e7H~N -1H)HHt1HH3H~H7tHt$HD$HD$ͺ H<!맺"렺#뙺$뒺%닺&넺'z(p)f*\+R,H->.4/*0 11ҹ1H)H̀HAHH3H~H7tHt$HD$HD$ɺ벺 뫺 뤺 띺 떺dZPF<2(2(  ~tj`VLB8111 }si_U K!A"7#-$#%&'()*+,-./0ffff.+f.HdH%(HD$1 HxAHL$` Phkhkhkhk|hknhk`hkRhkHPmNqHL$X 0H0mNDHL$P HmNHL$H ߷^H߷mNHL$@ ߷1H߷mNHL$8 ߷H߷mNHL$0 ߷H߷mNcHL$( p߷Hp߷mN6HL$ P߷}HP߷mN HL$ 0߷PH0߷mNHL$ ߷#H߷mNHL$ ޷H޷mNHL$ ޷H޷mNUHL$ ޷H޷mN(HL$ ޷oH޷mNHL$ p޷BHp޷mNHL$ P޷HP޷mNHL$ 0޷H0޷mNtHL$ ޷H޷mNGHL$ ݷHݷmNHL$ ݷaHݷmNHL$ ݷ4HݷmNHL$ ݷHݷmNHL$p pݷHpݷmNfHL$h PݷHPݷmN9HL$` 0ݷH0ݷmN HL$X ݷSHݷmNHL$P ܷ&HܷmNHL$@ ܷHܷmNHL$0 ܷHܷmNXHL$ ܷHܷmN+HL$ pܷrHpܷmNHL$ PܷEHPܷmNHL$ 0ܷH0ܷmNHL$ ܷHܷmNwHL$ ۷H۷mNJHL$ ۷H۷mNHL$ ۷dH۷mNHL$ ۷7H۷mNHL$ p۷ Hp۷mNHL$ P۷HP۷mNiHL$ 0۷H0۷mNXkQ=ReH#Xkt1=:etXÿ*e5"YH~NТ eHТ~NfHRHxAHWkHWk=eHWkt1=etXÿze!YH~NPТ\eHТ~N+fHHxAHf.HdH%(HD$1bHxAHL$rHmNHL$rHmNdHL$rpHpmN7HL$xrP~HPmN HL$pr0QH0mNHL$hr$HmNHL$`rHmNHL$XrHmNVHL$PrHmN)HL$HrpHmNHL$@rpCHpmNHL$0rPHPmNHL$ r0H0mNuHL$rHmNHHL$rHmNHL$rbHmNHL$r5HmNHL$qHmNHL$qpHpmNgHL$qPHPmN:HL$q0H0mN HL$qTHmNHL$q'HmNHL$qHmNHL$qHmNYHL$qHmN,HL$qpsHpmNHL$qPFHPmNHL$pq0H0mNHL$`qHmNxHL$PqHmNKHL$@qHmNHL$0qeHmNHL$(q8HmNHL$ qp HpmNHL$qPHPmNjHL$q0H0mN=HL$qHmNHL$qWHmNHL$p*HmNHL$pHmNHL$pHmN\HL$ppHpmN/HL$pPvHPmNHL$p0IH0mNHL$pHmNHL$pHmN{HL$pHmNNHL$pHmN!HL$phHmNHL$pp;HpmNHL$pPHPmNHL$p0H0mNmHL$|pHmN@HL$tpHmNHL$lpZHmNHL$dp-HmNHL$\pHmNHL$TppHpmN_HL$LpPHPmN2HL$Dp0yH0mNHL$HPmNHL$p0H0mNHL$oHmNpHL$oHmNCHL$oHmNHL$o]HmNHL$o0HmNHL$opHpmNHL$oPHPmNbHL$o0H0mN5HL$o|HmNHL$oOHmNHL$o"HmNHL$oHmNHL$oHmNTHL$opHpmN'HL$oPnHPmNHL$o0AH0mNHL$|oHmNHL$toHmNsHL$loHmNF=/Zk2=Zk =Zk=Yk=Yk=Yky=YkT=Yk/=Yk =rYk=]Yk=HYk=3Ykv=YkQ= Yk,=Xk=Xk=Xk=Xk=Xks=XkN=vXk)=aXk=LXk=7Xk="Xk= Xkp=WkK=Wk&=Wk=Wk=Wk=Wkt~=~Wkt`=mWk=XWkt5=GWku>WkyHZXkHD$dH3%(_HWk}H6XkWkH1XkWkH$XkjVk HWkhVkc~HWk1Vk}HWk VkzHWkVk[wHWkVkStHWkVkKqHWkxVkgHWkSpVkkfHWk.`VksPH|Wk PVk+OHlWk@VkMH\Wk0VkLHLWk VkSKHHlVk@UkS=H\Vko0Uk;HLVkJ Uk:He=4e=4e=4e_=4e2=u4e=Ukt7XÿhֱrYhֱPH`}P6@UkHHYf`ֱ! `ֱHX}P[ТbeHТ~N1HTֱ}P3eeH~NHPֱ}PT3eHQֱ}P<3eHRֱ}P$3eHSֱ}P 3egTfHHxA>HTk}HSk1HSk%=2eHSkt\=2eHSk`=2eHSkXt}=z2eHwSkP=Z2e=E2et3Xÿhֱ?thֱ!H`}P}s 2eHRֱY}P\XֱqXֱHPp}P,N`ֱ(`ֱHX}PHSֱ}P|1eHTֱ}Pd1efH2HxAHRkHRkHzRku=&1eH_Rkt\=1eHCRk`=0eH#RkXt}=0eHRkP=0e=0et3XÿhֱthֱqH`}PsY0eHRֱY}PXֱBqXֱ HPp}P|N`ֱ (`ֱHX}PGHSֱ}P/e'HTֱ}P/efHHxA)HQkHPk=dHPkt1=dtXÿdYH~NТd?HТ~N[fHHxAH*f.HHxAHf.HdH%(HD$1bHxAHL$HmNHL$蕄HmNdHL$HmN7HL$ؕp~HpmN HL$ЕPQHPmNHL$ȕ0$H0mNHL$HmNHL$HmNVHL$HmN)HL$pHmNHL$CHmNHL$pHpmNHL$PHPmNuHL$x0H0mNHHL$pHmNHL$hbHmNHL$`5HmNHL$XHmNHL$PHmNgHL$@pHpmN:HL$0PHPmN HL$ 0TH0mNHL$'HmNHL$HmNHL$HmNYHL$HmN,HL$蔄sHmNHL$pFHpmNHL$ДPHPmNHL$0H0mNxHL$HmNKHL$HmNHL$eHmNHL$8HmNHL$ HmNHL$xpHpmNjHL$pPHPmN=HL$h0H0mNHL$`WHmNHL$X*HmNHL$PHmNHL$HHmN\HL$@HmN/HL$8pvHpmNHL$0PIHPmNHL$(0H0mNHL$ HmN{HL$HmNNHL$HmN!HL$hHmNHL$;HmNHL$pHpmNHL$蓄PHPmNmHL$0H0mN@HL$ؓHmNHL$ГZHmNHL$ȓ-HmNHL$HmNHL$HmN_HL$pHpmN2HL$PyHPmNHL$0LH0mNHL$HmNHL$HmN~HL$HmNQHL$HmN$HL$xkHmNHL$pp>HpmNHL$hPHPmNHL$`0H0mNpHL$XHmNCHL$PHmNHL$H]HmNHL$@0HmNHL$8HmNHL$0pHpmNbHL$(PHPmN5HL$ 0|H0mNHL$OHmNHL$"HmNHL$HmNHL$HmNTHL$HmN'HL$pnHpmNHL$蒄PAHPmNHL$0H0mNHL$ؒHmNsHL$ВHmNFHD$dH3%(uH蜷f.fH dH%(HD$1H xAHL$P 5H mNHL$H H mNHL$@ H mNgHL$8p Hp mN:HL$0P HP mN HL$(0 TH0 mNHL$  'H mNHL$ H mNHL$ H mNYHL$ H mN,HL$ sH mNHL$p FHp mNHL$P HP mNHL$ؘ0 H0 mNxHL$И H mNKHL$Ș H mNHL$ eH mNHL$ 8H mNHL$ H mNHL$p Hp mNjHL$P HP mN=HL$0 H0 mNHL$p WH mNHL$` *H mNHL$X H mNHL$P H mN\HL$H H mN/HL$@p vHp mNHL$0P IHP mNHL$ 0 H0 mNHL$ H mN{HL$ H mNNHL$ H mN!HL$藄 hH mNHL$ ;H mNHL$ؗp Hp mNHL$ЗP HP mNmHL$ȗ0 H0 mN@HL$ H mNHL$ZHmNHL$-HmN蹿HL$HmN茿HL$HmN_HL$pHpmN2HL$PyHPmNHL$0LH0mNؾHL$HmN諾HL$pHmN~HL$hHmNQHL$`HmN$HL$XkHmNHL$Pp>HpmNʽHL$HPHPmN蝽HL$@0H0mNpHL$8跿HmNCHL$0芿HmNHL$(]HmNHL$ 0HmN輼HL$HmN菼HL$p־HpmNbHL$P詾HPmN5HL$0|H0mNHL$OHmNۻHL$"HmN讻HL$薄HmN聻HL$ȽHmNTHL$ؖ蛽HmN'HL$ЖpnHpmNHL$ȖPAHPmNͺHL$0H0mN蠺HL$HmNsHL$躼HmNFHL$荼HmNHL$`HmNHL$3HmN迹HL$pHpmN蒹HL$PٻHPmNeHL$0謻H0mN8HL$xHmN HL$pRHmN޸HL$h%HmN豸HL$`HmN脸HL$X˺HmNWHL$Pp螺HpmN*HL$HPqHPmNHL$@0DH0mNзHL$8HmN裷HL$0HmNvHD$dH3%(uḨf.fHdH%(HD$1ºHxAHL$eHmNHL$x8HmNĶHL$p HmN藶HL$hp޸HpmNjHL$`P豸HPmN=HL$X0脸H0mNHL$PWHmNHL$H*HmN趵HL$@HmN艵HL$8зHmN\HL$0裷HmN/HL$ pvHpmNHL$PIHPmNմHL$0H0mN訴HL$HmN{HL$¶HmNNHL$蕶HmN!HL$蛄hHmNHL$;HmNdzHL$ЛpHpmN蚳HL$PHPmNmHL$0贵H0mN@HL$臵HmNHL$ZHmNHL$-HmN蹲HL$HmN茲HL$xӴHmN_HL$pp覴HpmN2HL$`PyHPmNHL$P0LH0mNرHL$@HmN諱HL$0HmN~HL$ ųHmNQHL$蘳HmN$HL$kHmNHL$p>HpmNʰHL$PHPmN蝰HL$0H0mNpHL$跲HmNCHL$蚄芲HmNHL$]HmNHL$ؚ0HmN輯HL$КHmN華HL$ȚpֱHpmNbHL$P話HPmN5HL$0|H0mNHL$OHmNۮHL$"HmN议HL$HmN聮HL$ȰHmNTHL$蛰HmN'HL$pnHpmNHL$xPAHPmNͭHL$p0H0mN蠭HL$hHmNsHL$`躯HmNFHL$X药HmNHL$P`HmNHL$H3HmN迬HL$@pHpmN蒬HL$8PٮHPmNeHL$00謮H0mN8HL$(HmN HL$ RHmNޫHL$%HmN豫HL$HmN脫HL$˭HmNWHL$p螭HpmN*HL$PqHPmNHL$0DH0mNЪHL$虄HmN裪HL$HmNvHL$ؙ转HmNIHL$Й萬HmNHL$șcHmNHL$p6HpmN©HL$P HPmN蕩HL$0ܫH0mNhHL$诫HmN;HL$肫HmNHL$UHmNHL$(HmN质HL$HmN臨HL$pΪHpmNZHL$xP衪HPmN-HL$p0tH0mNHL$hGHmNӧHL$` H mN覧HD$dH3%(uHf.fH#dH%(HD$1H#xANHL$#蕩H#mN!HL$#hH#mNHL$#;H#mNǦHL$p#Hp#mN蚦HL$P#HP#mNmHL$0#质H0#mN@HL$#臨H#mNHL$x"ZH"mNHL$p"-H"mN蹥HL$h"H"mN茥HL$`"ӧH"mN_HL$Pp"覧Hp"mN2HL$@P"yHP"mNHL$80"LH0"mNؤHL$0"H"mN諤HL$(!H!mN~HL$ !ŦH!mNQHL$!蘦H!mN$HL$!kH!mNHL$p!>Hp!mNʣHL$P!HP!mN蝣HL$0!H0!mNpHL$О!跥H!mNCHL$ 芥H mNHL$ ]H mNHL$ 0H mN輢HL$ H mN菢HL$p ֤Hp mNbHL$P 詤HP mN5HL$0 |H0 mNHL$p OH mNۡHL$`"HmN计HL$PHmN聡HL$HȣHmNTHL$@蛣HmN'HL$8pnHpmNHL$0PAHPmN͠HL$(0H0mN蠠HL$ HmNsHL$躢HmNFHL$荢HmNHL$`HmNHL$3HmN迟HL$pHpmN蒟HL$P١HPmNeHL$蝄0謡H0mN8HL$HmN HL$НRHmNޞHL$ȝ%HmN豞HL$HmN脞HL$ˠHmNWHL$p螠HpmN*HL$PqHPmNHL$0DH0mNНHL$HmN裝HL$HmNvHL$轟HmNIHL$萟HmNHL$xcHmNHL$pp6HpmNœHL$hP HPmN蕜HL$`0ܞH0mNhHL$X诞HmN;HL$P肞HmNHL$HUHmNHL$@(HmN贛HL$8HmN臛HL$0pΝHpmNZHL$(P衝HPmN-HL$ 0tH0mNHL$GHmNӚHL$HmN覚HL$HmNyHL$HmNLHL$蓜HmNHL$pfHpmNHL$蜄P9HPmNřHL$0 H0mN蘙HL$؜ߛHmNkHL$М貛HmN>HL$Ȝ腛HmNHL$XHmNHL$+HmN跘HL$pHpmN芘HL$PњHPmN]HL$0褚H0mN0HL$wHmNHL$JHmN֗HD$dH3%(uH,f.fH.dH%(HD$1"H.xA~HL$ࢄ.řH.mNQHL$آ.蘙H.mN$HL$Т.kH.mNHL$Ȣp.>Hp.mNʖHL$P.HP.mN蝖HL$0.H0.mNpHL$.跘H.mNCHL$-芘H-mNHL$-]H-mNHL$-0H-mN輕HL$-H-mN菕HL$p-֗Hp-mNbHL$pP-詗HP-mN5HL$h0-|H0-mNHL$`-OH-mN۔HL$X,"H,mN讔HL$P,H,mN联HL$H,ȖH,mNTHL$@,蛖H,mN'HL$0p,nHp,mNHL$ P,AHP,mN͓HL$0,H0,mN蠓HL$,H,mNsHL$+躕H+mNFHL$衄+荕H+mNHL$ࡄ+`H+mNHL$ء+3H+mN迒HL$Сp+Hp+mN蒒HL$P+ٔHP+mNeHL$0+謔H0+mN8HL$+H+mN HL$*RH*mNޑHL$*%H*mN豑HL$x*H*mN脑HL$p*˓H*mNWHL$hp*螓Hp*mN*HL$`P*qHP*mNHL$X0*DH0*mNАHL$P*H*mN裐HL$H)H)mNvHL$@)轒H)mNIHL$8)萒H)mNHL$0)cH)mNHL$(p)6Hp)mNHL$ P) HP)mN蕏HL$0)ܑH0)mNhHL$)译H)mN;HL$(肑H(mNHL$(UH(mNHL$((H(mN贎HL$蠄(H(mN臎HL$ࠄp(ΐHp(mNZHL$ؠP(衐HP(mN-HL$Р0(tH0(mNHL$Ƞ(GH(mNӍHL$'H'mN覍HL$'H'mNyHL$'H'mNLHL$'蓏H'mNHL$p'fHp'mNHL$P'9HP'mNŌHL$0' H0'mN蘌HL$'ߎH'mNkHL$&貎H&mN>HL$x&腎H&mNHL$p&XH&mNHL$h&+H&mN跋HL$`p&Hp&mN芋HL$XP&эHP&mN]HL$P0&褍H0&mN0HL$H&wH&mNHL$@%JH%mN֊HL$8%H%mN詊HL$0%H%mN|HL$(%ÌH%mNOHL$ p%薌Hp%mN"HL$P%iHP%mNHL$0%<H0%mNȉHL$%H%mN蛉HL$$H$mNnHL$$赋H$mNAHL$$舋H$mNHL$蟄$[H$mNHL$p$.Hp$mN躈HL$؟P$HP$mN荈HL$П0$ԊH0$mN`HL$ȟ$觊H$mN3HL$#zH#mNHD$dH3%(uH\xf.fH9dH%(HD$1RH9xA讇HL$9H9mN聇HL$9ȉH9mNTHL$9蛉H9mN'HL$p9nHp9mNHL$P9AHP9mN͆HL$襄09H09mN蠆HL$ॄ9H9mNsHL$إ8躈H8mNFHL$Х8荈H8mNHL$ȥ8`H8mNHL$83H8mN迅HL$p8Hp8mN蒅HL$P8هHP8mNeHL$08謇H08mN8HL$8H8mN HL$7RH7mNބHL$7%H7mN豄HL$x7H7mN脄HL$p7ˆH7mNWHL$`p7螆Hp7mN*HL$PP7qHP7mNHL$@07DH07mNЃHL$07H7mN裃HL$ 6H6mNvHL$6轅H6mNIHL$6萅H6mNHL$6cH6mNHL$p66Hp6mN‚HL$P6 HP6mN蕂HL$ऄ06܄H06mNhHL$Ф6评H6mN;HL$5肄H5mNHL$5UH5mNHL$5(H5mN贁HL$5H5mN臁HL$p5΃Hp5mNZHL$P5衃HP5mN-HL$05tH05mNHL$5GH5mNӀHL$x4H4mN覀HL$p4H4mNyHL$h4H4mNLHL$`4蓂H4mNHL$Xp4fHp4mNHL$PP49HP4mNHL$H04 H04mNHL$@4߁H4mNkHL$03貁H3mN>HL$(3腁H3mNHL$ 3XH3mN~HL$3+H3mN~HL$p3Hp3mN~HL$P3рHP3mN]~HL$03褀H03mN0~HL$3wH3mN~HL$2JH2mN}HL$裄2H2mN}HL$ࣄ2H2mN|}HL$أ2H2mNO}HL$Уp2Hp2mN"}HL$ȣP2iHP2mN|HL$02<H02mN|HL$2H2mN|HL$1~H1mNn|HL$1~H1mNA|HL$1~H1mN|HL$1[~H1mN{HL$p1.~Hp1mN{HL$P1~HP1mN{HL$01}H01mN`{HL$x1}H1mN3{HL$p0z}H0mN{HL$h0M}H0mNzHL$`0 }H0mNzHL$X0|H0mNzHL$Pp0|Hp0mNRzHL$HP0|HP0mN%zHL$@00l|H00mNyHL$80?|H0mNyHL$0/|H/mNyHL$(/{H/mNqyHL$ /{H/mNDyHL$/{H/mNyHL$p/^{Hp/mNxHL$P/1{HP/mNxHL$0/{H0/mNxHL$/zH/mNcxHL$.zH.mN6xHD$dH3%(uHhf.fHDdH%(HD$1{HDxAwHL$@D%zHDmNwHL$8DyHDmNwHL$0DyHDmNWwHL$(pDyHpDmN*wHL$ PDqyHPDmNvHL$0DDyH0DmNvHL$DyHDmNvHL$CxHCmNvvHL$CxHCmNIvHL$CxHCmNvHL$CcxHCmNuHL$਄pC6xHpCmNuHL$ШPC xHPCmNuHL$Ȩ0CwH0CmNhuHL$CwHCmN;uHL$BwHBmNuHL$BUwHBmNtHL$B(wHBmNtHL$BvHBmNtHL$pBvHpBmNZtHL$PBvHPBmN-tHL$p0BtvH0BmNtHL$`BGvHBmNsHL$PAvHAmNsHL$HAuHAmNysHL$@AuHAmNLsHL$8AuHAmNsHL$0pAfuHpAmNrHL$ PA9uHPAmNrHL$0A uH0AmNrHL$AtHAmNkrHL$@tH@mN>rHL$ৄ@tH@mNrHL$ا@XtH@mNqHL$Ч@+tH@mNqHL$ȧp@sHp@mNqHL$P@sHP@mN]qHL$0@sH0@mN0qHL$@wsH@mNqHL$?JsH?mNpHL$?sH?mNpHL$?rH?mN|pHL$?rH?mNOpHL$p?rHp?mN"pHL$P?irHP?mNoHL$x0?qH>mNnoHL$X>qH>mNAoHL$P>qH>mNoHL$H>[qH>mNnHL$@p>.qHp>mNnHL$8P>qHP>mNnHL$00>pH0>mN`nHL$(>pH>mN3nHL$ =zpH=mNnHL$=MpH=mNmHL$= pH=mNmHL$=oH=mNmHL$p=oHp=mNRmHL$P=oHP=mN%mHL$0=loH0=mNlHL$覄=?oH=mNlHL$঄<oH<mNlHL$ئ<nH<mNqlHL$Ц<nH<mNDlHL$Ȧ<nH<mNlHL$p<^nHp<mNkHL$P<1nHP<mNkHL$0<nH0<mNkHL$<mH<mNckHL$;mH;mN6kHL$;}mH;mN kHL$;PmH;mNjHL$;#mH;mNjHL$p;lHp;mNjHL$xP;lHP;mNUjHL$p0;lH0;mN(jHL$h;olH;mNiHL$`:BlH:mNiHL$X:lH:mNiHL$P:kH:mNtiHL$H:kH:mNGiHL$@p:kHp:mNiHL$8P:akHP:mNhHL$00:4kH0:mNhHL$(:kH:mNhHL$ 9jH9mNfhHD$dH3%(uHXf.fHOdH%(HD$1kHOxAhHL$pOUjHOmNgHL$hO(jHOmNgHL$`OiHOmNgHL$XpOiHpOmNZgHL$PPOiHPOmN-gHL$H0OtiH0OmNgHL$@OGiHOmNfHL$8NiHNmNfHL$0NhHNmNyfHL$(NhHNmNLfHL$ NhHNmNfHL$pNfhHpNmNeHL$PN9hHPNmNeHL$0N hH0NmNeHL$NgHNmNkeHL$諄MgHMmN>eHL$ૄMgHMmNeHL$ثMXgHMmNdHL$ЫM+gHMmNdHL$pMfHpMmNdHL$PMfHPMmN]dHL$0MfH0MmN0dHL$MwfHMmNdHL$LJfHLmNcHL$xLfHLmNcHL$pLeHLmN|cHL$hLeHLmNOcHL$`pLeHpLmN"cHL$PPLieHPLmNbHL$@0LUH\mNRHL$Ȯ\UH\mNRHL$\TH\mNpRHL$\TH\mNCRHL$p\THp\mNRHL$P\]THP\mNQHL$0\0TH0\mNQHL$\TH\mNQHL$[SH[mNbQHL$[SH[mN5QHL$[|SH[mNQHL$x[OSH[mNPHL$pp["SHp[mNPHL$hP[RHP[mNPHL$`0[RH0[mNTPHL$X[RH[mN'PHL$PZnRHZmNOHL$HZARHZmNOHL$@ZRHZmNOHL$8ZQHZmNsOHL$0pZQHpZmNFOHL$(PZQHPZmNOHL$ 0Z`QH0ZmNNHL$Z3QHZmNNHL$YQHYmNNHL$YPHYmNeNHL$YPHYmN8NHL$YPHYmN NHL$pYRPHpYmNMHL$譄PY%PHPYmNMHL$ୄ0YOH0YmNMHL$حYOHYmNWMHL$ЭXOHXmN*MHL$ȭXqOHXmNLHL$XDOHXmNLHL$XOHXmNLHL$pXNHpXmNvLHL$PXNHPXmNILHL$0XNH0XmNLHL$XcNHXmNKHL$W6NHWmNKHL$W NHWmNKHL$WMHWmNhKHL$xWMHWmN;KHL$ppWMHpWmNKHL$hPWUMHPWmNJHL$`0W(MH0WmNJHL$XWLHWmNJHL$PVLHVmNZJHL$HVLHVmN-JHL$@VtLHVmNJHL$8VGLHVmNIHL$0pVLHpVmNIHL$(PVKHPVmNyIHL$ 0VKH0VmNLIHL$VKHVmNIHL$UfKHUmNHHL$U9KHUmNHHL$U KHUmNHHL$UJHUmNkHHL$pUJHpUmN>HHL$謄PUJHPUmNHHL$଄0UXJH0UmNGHL$جU+JHUmNGHL$ЬTIHTmNGHL$ȬTIHTmN]GHL$TIHTmN0GHL$TwIHTmNGHL$pTJIHpTmNFHL$PTIHPTmNFHL$0THH0TmN|FHL$THHTmNOFHL$SHHSmN"FHL$SiHHSmNEHL$SFHT$hwQ*FHT$hwQFHT$hwQFHT$hw QEHT$hw(QEHT$hx0QEHT$hx8QEHT$hx@QEHT$h xHQEHT$hxPQvEHT$hxXQbEHT$hx`QNEHT$hxhQ:EHT$h xpQ&EHT$h$xxQEHT$h(xQDHT$h,xQDHT$h0xQDHT$h4xQDHT$h8xQDHT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)HRHR HH3H~H7tHt$HD$rHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01fSqH dH%(HD$1'HT$hwa*'HT$hwa'HT$hwa'HT$hwb&HT$hwb&HT$hwb&HT$hwb&HT$hw b&HT$hw(b&HT$hx0bv&HT$hx8bb&HT$hx@bN&HT$h xHb:&HT$hxPb&&HT$hxXb&HT$hx`b%HT$hxhb%HT$h xpb%HT$h$xxb%HT$h(xb%HT$h,xb%HT$h0xb%HT$h4xbr%HT$h8xb^%HT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)HcHc HH3H~H7tHt$HD$SHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01fSȂH dH%(HD$1AHȂxAHL$(„HmNpHL$ „HmNCHL$„pHpmNHL$„P]HPmNHL$„00H0mNHL$„HmNHL$HmNbHL$ЁHЁmN5HL$|HmNHL$OHmNHL$p"HpmNHL$PHPmNHL$0H0mNTHL$HmN'HL$nHmNHL$ЀAHЀmNHL$HmNHL$HmNsHL$pHpmNFHL$PHPmNHL$0`H0mNHL$3HmNHL$xHmNHL$pHmNeHL$hHmN8HL$`HmN HL$XpRHpmNHL$PP%HPmNHL$H0H0mNHL$@HmNWHL$8~H~mN*HL$0~qH~mNHL$(~DH~mNHL$ ~H~mNHL$p~Hp~mNvHL$P~HP~mNIHL$0~H0~mNHL$~cH~mNHL$}6H}mNHL$} H}mNHL$}H}mNhHL$}H}mN;HL$p}Hp}mNHL$P}UHP}mNHL$0}(H0}mNHL$}H}mNHL$|H|mNZHL$|H|mN-HL$|tH|mNHL$|GH|mNHL$p|Hp|mNHL$P|HP|mNyHL$0|H0|mNLHL$|H|mNHL$x{fH{mNHL$p{9H{mNHL$h{ H{mNHL$`{H{mNkHL$Xp{Hp{mN>HL$PP{HP{mNHL$H0{XH0{mNHL$@{+H{mNHL$8zHzmNHL$0zHzmN]HL$(zHzmN0HL$ zwHzmNHL$pzJHpzmN HL$PzHPzmN HL$0zH0zmN| HL$zHzmNO HL$yHymN" HL$yiHymN HL$迄y<HymN HL$࿄yHymN HL$ؿpyHpymNn HL$пPyHPymNA HL$ȿ0yH0ymN HL$y[HymN HL$x.HxmN HL$xHxmN HL$x HxmN` HL$x HxmN3 HL$pxz HpxmN HL$PxM HPxmN HL$0x H0xmN HL$x HxmN HL$xw HwmNR HL$pw HwmN% HL$hwl HwmN HL$`w? HwmN HL$Xpw HpwmN HL$PPw HPwmNq HL$H0w H0wmND HL$@w HwmN HL$8v^ HvmNHL$0v1 HvmNHL$(v HvmNHL$ v HvmNcHL$pv HpvmN6HL$Pv} HPvmN HL$0vP H0vmNHL$v# HvmNHL$u HumNHL$u HumNUHL$辄u HumN(HL$྄uo HumNHT$hvtw HT$hvtc HT$hvtO HT$hvt; HT$hv t' HT$hv(t HT$hv0t HT$hv8t HT$hv@t HT$hvHt HT$hvPt HT$hvXt HT$hv`t HT$hvhts HT$hvpt_ HT$hvxtK HT$hwt7 HT$hwt# HT$hwt HT$h wt HT$hwt HT$hwt HT$hwt HT$hwt HT$h wt HT$h$wt HT$h(wto HT$h,wt[ HT$h0wtG HT$h4wt3 HT$h8wt HT$hHT$hwr*HT$hwrHT$hwrHT$hwrHT$hwrHT$hwrHT$hwrHT$hwsHT$hwsHT$hwsvHT$hwsbHT$hw sNHT$hw(s:HT$hx0s&HT$hx8sHT$hx@sHT$h xHsHT$hxPsHT$hxXsHT$hx`sHT$hxhsHT$h xpsHT$h$xxsrHT$h(xs^HT$h,xsJHT$h0xs6HT$h4xs"HT$h8xsHT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)HtHt HH3H~H7tHt$HD$r!HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01fH肸H肸xA^HjH~jQ=RdHcjt1=:dtXÿ*d5&YH~NТ d"HТ~NfSHH dH%(HD$1AHHxAHL$X0H0mNpHL$PHmNCHL$HHmNHL$@У]HУmNHL$80HmNHL$0HmNHL$(pHpmNbHL$ PHPmN5HL$0|H0mNHL$OHmNHL$"HmNHL$ТHТmNHL$HmNTHL$HmN'HL$pnHpmNHL$PAHPmNHL$0H0mNHL$HmNsHL$HmNFHL$СHСmNHL$`HmNHL$3HmNHL$pHpmNHL$PHPmNeHL$0H0mN8HL$HmN HL$RHmNHL$Р%HРmNHL$xHmNHL$pHmNWHL$hpHpmN*HL$`PqHPmNHL$X0DH0mNHL$PHmNHL$HHmNvHL$@ПHПmNIHL$8HmNHL$0cHmNHL$(p6HpmNHL$ P HPmNHL$0H0mNhHL$HmN;HL$HmNHL$ОUHОmNHL$(HmNHL$HmNHL$pHpmNZHL$PHPmN-HL$0tH0mNHL$GHmNHL$HmNHL$НHНmNyHL$HmNLHL$HmNHL$pfHpmNHL$P9HPmNHL$0 H0mNHL$HmNkHL$HmN>HL$МHМmNHL$xXHmNHL$p+HmNHL$hpHpmNHL$`PHPmN]HL$X0H0mN0HL$PwHmNHL$HJHmNHL$@ЛHЛmNHL$8HmN|HL$0HmNOHL$(pHpmN"HL$ PiHPmNHL$0<H0mNHL$HmNHL$HmNnHL$КHКmNAHL$HmNHL$[HmNHL$p.HpmNHL$PHPmNHL$0H0mN`HL$HmN3HL$zHmNHL$ЙMHЙmNHL$ HmNHL$HmNHL$pHpmNRHL$PHPmN%HL$0lH0mNHL$?HmNHL$HmNHL$ИHИmNqHL$xHmNDHL$pHmNHL$hp^HpmNHL$`P1HPmNHL$X0H0mNHL$PHmNcHL$HHmN6HL$@З}HЗmN HL$8PHmNHL$0#HmNHL$(pHpmNHL$ PHPmNUHL$0H0mN(HL$oHmNHT$hvwHT$hvcHT$hvOHT$hv;HT$hv'HT$hvHT$hvHT$hvHT$hvHT$hvȕHT$hvЕHT$hvؕHT$hvHT$hv蕸sHT$hv_HT$hvKHT$hw7HT$hw#HT$hwHT$h wHT$hw HT$hw(HT$hw0HT$hw8HT$h w@HT$h$wHHT$h(wPoHT$h,wX[HT$h0w`GHT$h4wh3HT$h8wpHT$hHT$hwH*HT$hwPHT$hwXHT$hw`HT$hwhHT$hwpHT$hwxHT$hwHT$hwHT$hwvHT$hwbHT$hwNHT$hw:HT$hx&HT$hxHT$hxHT$h xȔHT$hxДHT$hxؔHT$hxHT$hx蔸HT$h xHT$h$xrHT$h(x^HT$h,xJHT$h0x6HT$h4x"HT$h8x HT$hHPmNHL$0H0mNHL$HmNpHL$HmNCHL$БHБmNHL$]HmNHL$0HmNHL$pHpmNHL$xPHPmNbHL$p0H0mN5HL$h|HmNHL$`OHmNHL$XА"HАmNHL$PHmNHL$HHmNTHL$@pHpmN'HL$8PnHPmNHL$00AH0mNHL$(HmNHL$ HmNsHL$ЏHЏmNFHL$HmNHL$`HmNHL$p3HpmNHL$PHPmNHL$0H0mNeHL$HmN8HL$HmN HL$ЎRHЎmNHL$%HmNHL$HmNHL$pHpmNWHL$PHPmN*HL$0qH0mNHL$DHmNHL$HmNHL$ЍHЍmNvHL$HmNIHL$HmNHL$pcHpmNHL$xP6HPmNHL$p0 H0mNHL$hHmNhHL$`HmN;HL$XЌHЌmNHL$PUHmNHL$H(HmNHL$@pHpmNHL$8PHPmNZHL$00H0mN-HL$(tHmNHL$ GHmNHL$ЋHЋmNHL$HmNyHL$HmNLHL$pHpmNHL$߄PfHPmNHL$߄09H0mNHL$߄ HmNHL$߄HmNkHL$߄ЊHЊmN>HL$߄HmNHL$߄XHmNHL$߄p+HpmNHL$߄PHPmNHL$߄0H0mN]HL$߄HmN0HL$߄wHmNHL$߄ЉJHЉmNHL$߄HmNHL$߄HmN|HL$߄pHpmNOHL$x߄PHPmN"HL$p߄0iH0mNHL$h߄<HmNHL$`߄HmNHL$X߄ЈHЈmNnHL$P߄HmNAHL$H߄HmNHL$@߄p[HpmNHL$8߄P.HPmNHL$0߄0H0mNHL$(߄HmN`HT$xxHT$xxHT$xxHT$xxHT$xxHT$xxxHT$xxdHT$xxPHT$xx{XgHT$xH{`SHT$xR{h?HT$x\{p+HT$xf{xHT$xp{HT$xz{HT$x{HT$x{HT$x{HT$x{HT$x{HT$x{wHT$xycHT$xyȅOHT$xyЅ;HT$xy؅'HT$xyHT$xy腸HT$xzHT$xzHT$xzHT$x&zHT$x0zHT$x:zHT$xDz sHT$xNz(_HT$xXz0KHT$xbz87HT$xlz@#HT$xvzHH1pinHT${HAFHT$x{HT${HT$H{HT${HT${ rHT${(^HT${0JHT$P{86HT${@"HT$ {HHT${PHT${XHT$X{`HT${hHT$({pHT${xHT${HT$`{nHT${ZHT$0{FHT${2HT${HT$h{ HT${HT$8{HT${ȃHT${ЃHT$p{؃HT${HT$@{胸~HT${jHT${VHT$x{BHT${.HT$H{HT${HT${ HT${(HT${0HT$P{8HT${@HT$ {HHT${PzHT${XfHT$X{`RHT${h>HT$({p*1H iH[j7HXj7HUj7hHD$dH3%(uH [轲1H)HHt8HH3H~H7tHt$HD$<1HD$ͺ붺H렺뙺뒺 닺 넺 z p f\RH>4*   !"#$%v&l'b(X)N*D+:,0-&./011ҹ1H)HH0HH3H~H7tHt$HD$4/HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)H̀HHH3H~H7tHt$HD$-HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)HHHH3H~H7tHt$HD$*HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)H̀HHH3H~H7tHt$HD$(HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01f.f.HdH%(HD$12HxA获HL$չHmNaHL$p訹HpmN4HL$P{HPmNHL$0NH0mNڶHL$!HmN譶HL$HmN耶HL$ЩǸHЩmNSHL$蚸HmN&HL$mHmNHL$p@HpmN̵HL$PHPmN蟵HL$0H0mNrHL$蹷HmNEHL$茷HmNHL$Ш_HШmNHL$2HmN辴HL$HmN葴HL$pضHpmNdHL$P諶HPmN7HL$x0~H0mN HL$pQHmNݳHL$h$HmN谳HL$`ЧHЧmN胳HL$XʵHmNVHL$P蝵HmN)HL$HppHpmNHL$@PCHPmNϲHL$80H0mN袲HL$0HmNuHL$(輴HmNHHL$ Ц菴HЦmNHL$bHmNHL$5HmNHL$pHpmN蔱HL$P۳HPmNgHL$0讳H0mN:HL$聳HmN HL$THmNHL$Х'HХmN賰HL$HmN膰HL$ͲHmNYHL$p蠲HpmN,HL$PsHPmNHL$0FH0mNүHL$HmN襯HL$HmNxHL$Ф迱HФmNKHL$蒱HmNHL$eHmNHL$p8HpmNĮHL$P HPmN藮HD$dH3%(uHf.HdH%(HD$1HxA>HL$腰HmNHL$аXHаmNHL$+HmN跭HL$HmN芭HL$pѯHpmN]HL$P褯HPmN0HL$0wH0mNHL$JHmN֬HL$HmN詬HL$ЯHЯmN|HL$îHmNOHL$x薮HmN"HL$ppiHpmNHL$hP<HPmNȫHL$`0H0mN蛫HL$XHmNnHL$P赭HmNAHL$HЮ舭HЮmNHL$@[HmNHL$8.HmN躪HL$0pHpmN荪HL$(PԬHPmN`HL$ 0觬H0mN3HL$zHmNHL$MHmN٩HL$Э HЭmN謩HL$HmNHL$ƫHmNRHL$p虫HpmN%HL$PlHPmNHL$0?H0mN˨HL$HmN螨HL$HmNqHL$Ь踪HЬmNDHL$苪HmNHL$^HmNHL$p1HpmN轧HL$PHPmN萧HL$0שH0mNcHL$誩HmN6HL$}HmN HL$ЫPHЫmNܦHL$#HmN详HL$xHmN肦HL$ppɨHpmNUHL$hP蜨HPmN(HL$`0oH0mNHL$XBHmNΥHL$PHmN补HL$HЪHЪmNtHL$@軧HmNGHD$dH3%(uH蝕f.HhdH%(HD$1蒨HhxAHL$hP5HPmNHL$`0H0mN蔤HL$XۦHmNgHL$P讦HmN:HL$Hж聦HжmN HL$@THmNHL$8'HmN賣HL$0pHpmN膣HL$(PͥHPmNYHL$ 0蠥H0mN,HL$sHmNHL$FHmNҢHL$еHеmN襢HL$HmNxHL$迤HmNKHL$p蒤HpmNHL$PeHPmNHL$08H0mNġHL$ HmN藡HL$ޣHmNjHL$д豣HдmN=HL$脣HmNHL$WHmNHL$p*HpmN趠HL$PHPmN艠HL$0ТH0mN\HL$裢HmN/HL$vHmNHL$гIHгmN՟HL$HmN訟HL$xHmN{HL$pp¡HpmNNHL$hP蕡HPmN!HL$`0hH0mNHL$X;HmNǞHL$PHmN蚞HL$HвHвmNmHL$@贠HmN@HL$8臠HmNHL$0pZHpmNHL$(P-HPmN蹝HL$ 0H0mN茝HL$ӟHmN_HL$覟HmN2HL$бyHбmNHL$LHmN؜HL$HmN諜HL$pHpmN~HL$PŞHPmNQHL$0蘞H0mN$HL$kHmNHD$dH3%(uHMf.HiRHixAH骛f.Hj"HjxAHzf.HkHkxAHJf.HȽdH%(HD$1貞HȽxAHL$UHmNHL$(HmN贚HL$pHpmN臚HL$PΜHPmNZHL$0衜H0mN-HL$tHmNHL$GHmNәHL$мHмmN覙HL$HmNyHL$HmNLHL$p蓛HpmNHL$PfHPmNHL$09H0mNŘHL$ HmN蘘HL$ߚHmNkHL$xл貚HлmN>HL$p腚HmNHL$hXHmNHL$`p+HpmN跗HL$XPHPmN芗HL$P0љH0mN]HL$H褙HmN0HL$@wHmNHL$8кJHкmN֖HL$0HmN詖HL$(HmN|HL$ pØHpmNOHL$P薘HPmN"HL$0iH0mNHL$<HmNȕHL$HmN蛕HL$йHйmNnHL$赗HmNAHL$舗HmNHL$p[HpmNHL$P.HPmN躔HL$0H0mN荔HL$ԖHmN`HL$觖HmN3HL$иzHиmNHL$MHmNٓHL$ HmN謓HL$pHpmNHL$PƕHPmNRHL$0處H0mN%HL$lHmNHL$?HmN˒HL$xзHзmN螒HL$pHmNqHL$h踔HmNDHL$`p苔HpmNHD$dH3%(uHmf.HɽrHɽxAHʑf.SٸH dH%(HD$11HٸxA荑HL$pٸԓHٸmN`HL$hٸ觓HٸmN3HL$`pٸzHpٸmNHL$XPٸMHPٸmNِHL$P0ٸ H0ٸmN謐HL$HٸHٸmNHL$@ظƒHظmNRHL$8ظ虒HظmN%HL$0ظlHظmNHL$(ظ?HظmNˏHL$ pظHpظmN螏HL$PظHPظmNqHL$0ظ踑H0ظmNDHL$ظ苑HظmNHL$׸^H׸mNHL$׸1H׸mN轎HL$׸H׸mN萎HL$׸אH׸mNcHL$p׸誐Hp׸mN6HL$P׸}HP׸mN HL$0׸PH0׸mN܍HL$׸#H׸mN词HL$ָHָmN肍HL$ָɏHָmNUHL$xָ蜏HָmN(HL$pָoHָmNHL$hpָBHpָmNΌHL$`PָHPָmN行HL$P0ָH0ָmNtHL$@ָ軎HָmNGHL$0ո莎HոmNHL$ ոaHոmNHL$ո4HոmNHL$ոHոmN蓋HL$pոڍHpոmNfHL$Pո譍HPոmN9HL$0ո耍H0ոmN HL$ոSHոmNߊHL$Ը&HԸmN貊HL$ԸHԸmN腊HL$Ը̌HԸmNXHL$Ը蟌HԸmN+HL$pԸrHpԸmNHL$PԸEHPԸmNщHL$0ԸH0ԸmN褉HL$ԸHԸmNwHL$Ӹ辋HӸmNJHL$Ӹ葋HӸmNHL$ӸdHӸmNHL$Ӹ7HӸmNÈHL$xpӸ HpӸmN薈HL$pPӸ݊HPӸmNiHL$h0Ӹ谊H0ӸmNuHømNrHL$øuHømNrHL$øtHømNprHL$øtHømNCrHL$xpøtHpømNrHL$pPø]tHPømNqHL$h0ø0tH0ømNqHL$`øtHømNqHL$X¸sH¸mNbqHL$P¸sH¸mN5qHL$H¸|sH¸mNqHL$@¸OsH¸mNpHL$8p¸"sHp¸mNpHL$0P¸rHP¸mNpHL$(0¸rH0¸mNTpHL$ ¸rH¸mN'pHL$nrHmNoHL$ArHmNoHL$rHmNoHL$qHmNsoHT$hvuHT$hvuHT$hvuHT$hvuHT$hv uHT$hv(uHT$hv0wuHT$hv8cuHT$hv@OuHT$hvH;uHT$hvP'uHT$hvXuHT$hv`tHT$hvhtHT$hvptHT$hvxtHT$hwtHT$hwtHT$hwtHT$h wstHT$hw_tHT$hwKtHT$hw7tHT$hw#tHT$h wtHT$h$wsHT$h(wsHT$h,wsHT$h0wsHT$h4wsHT$h8wsHT$hpHT$hw*pHT$hwpHT$hwpHT$hwoHT$hwoHT$hw oHT$hw(oHT$hx0oHT$hx8oHT$hx@voHT$h xHboHT$hxPNoHT$hxX:oHT$hx`&oHT$hxhoHT$h xpnHT$h$xxnHT$h(xnHT$h,xnHT$h0xnHT$h4xnHT$h8xnHT$h4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)HH HH3H~H7tHt$HD$\HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01;f.HڸrfHڸxAbiH"j iHjVHjV=fcH߽j=JcHj`=*cHjX=cHjP'=c=͹c=c`=c3=~j=it7XÿhֱSZhֱqYH`}Pa7aiHHYfaXֱBS9Xֱ YHPp}P|a`ֱ S`ֱXHX}PGaHSֱ}P̸c'aHTֱ}PcaHڸk\j`HPֱ}PTc`HQֱ}P-f(1# +-f('f(d$H<$Hd$H<$f( $H $CHWDGHHHHFHpA5EH1ADHHfD XDX D HH9uCD A9XHAHHHFHpEH1ADHHD XDX D HH9u{@AvXEH1ADHH@ DX XD DHH9u#ffD1HFkRx`(YYJBpX`HYYhYX`hYYX`0YX`PYX`pYX`8YYP XhXYYH@XXhxYY@`XwXXgJhX YYB`XX8YYYXX(YYHX`@YY@0XoXX_uSYfD BXPYYYY@XXWffDfDAWAVHAUATUSHjdH%(H$1HËH|$([Ht$ D$HT$0L$D$8ى\$9ȋ9u9D$D$PH|$pH|$`D$8HD$0fHD$LPHD$(f(LhD$AƍDID$DAWAVAUATIUSHHXA $RdH%(HD$H1v9sHCEAT$8{<$A|$L90K0BE$D$9$D9T$D9|$t}D$t<ID$CRHfQ-HЋE @HEHH$HHHBH$HL$@H$HD$@HD$HHDŽ$HDŽ$HT$HH$H$eH$XMmH$H|$`JXxIELx( @Ht$`LAAHD$`HxH7$fA*Gl^*,H$k2HcH$HHHBHD$PH$H$IcվHD$XvH$HeHHBHD$`H$HD$hIHP(HD$ H$HD$(HH$t@H$LH$(I$HP(HD$ H$HD$(HH$t@H$LH$I$LH$P8ILH|$pP@H|$ HH$Ht$pE11H|$xH$HD$`H$HD$hHH$t@I$LH$P@H|$ HnH$H$E11zH$H$HD$PH$HD$XHH$t@HD$`H$HD$hHH$t@H|$ HH$H$E11H$H$HD$@H$HD$HHH$t@HD$PH$HD$XHH$t@H|$ H^H$H$E11jH$ H$H|$ H AH|$hH|$XH|$HH6H6H|$8HH|$(H$dH3%(DH[]A\A]A^A_@@@C@E@1d1f1SfH$s fDH$[1\H|$PHIHtHPH$Ht5H$I5H%H8 lN@Qx@:HDH@- @HqH4E1H$II)H$LLHIurHHHRxQx@:I HL HgE1HH|$8HH|$(HIH|$hH|$XH|$H}H4HL4HHIJIHIIHD$`HxH7tH$H|$@HHHtHPH$Ht4H$HuHH8 lNQx@:HDH HH8E1IIgIHIHH`HHHIH$IIEH$8LLH$IIH$ LLIIH|$xIIH$LLHHD$HxH7H$,IIf.Ht HH@ff.@G@f.Hf.fHt HH@ff.@f.@f.@f.@f.@HHH@Hf.@HHtHH@fDfD1f.1f.1f.1f.HHtHH@fDfD1f.1f.H;f.+f.f. f.H?Htf.@f.H?Htf.@f.f.HPxd@SHHPxPH[gS1HHdH%(HD$1HFHp>*HHT$HL$dH3 %(u HH[}f.HvIH@yxt 1>*t@yxt fI@f.HvIHkxt 1>*tkx)t fI@f.ATUSHH dH%(HD$1HG Hxt*HHL$dH3 %(HH []A\Hk 'IHLHHN HC HxuCHsSH|$HPHt$H HD$HxH7u*HC ofbH@Ht$"HHD$HxH7t Ht$HHHcH+ HHtXSHHHyxdH%(HD$1HG HxH7u0HHHD$dH3%(uH[f.Ht$6?f.DSHHHyxdH%(HD$1HG HxH7u0HHHD$dH3%(uH[f.Ht$f.DSHHHyxdH%(HD$1HG HxH7u0HHHD$dH3%(uH[f.Ht$6?f.DSHHHyxdH%(HD$1HG HxH7u0HHHD$dH3%(uH[f.Ht$f.DSHHHyxdH%(HD$1HG HxH7u0HHHD$dH3%(uH[f.Ht$6?f.DAVAULvATUISH^HHMHhIH[Ht+HC Hx?*H „tH[HuM9}*ID$ HpHe I\$(HHH@HxH9tD?*t H/ t3`xcvvfH9€}*]eID$0I]HIEt@[L]A\A]A^fD[LIEIE]A\A]A^@H9>*4:ATUISHHdH%(H$1HH|$0H|$0HI\$ Il$H9u_HFHT$H|$Hp1>*HnHt$H|$0HV HD$HxH7u9H H9HtIHs(H4HHH=@nNtH|$DHt$ H^ H9HufDHD$0H|$ I\$8HpH|$ HHD$ HxH7H$HD$0X8HDŽ$8HD$8P5HxH7u{H|$pHD$8A H`bHabH$HD$0H@HT0HDŽ$DH$dH3 %(ID$8ujHĠ[]A\Ht$RHt$ vHHHD$HxH7t Ht$ H|$0H=HHD$ HxH7tHt$gDSHHHyxdH%(HD$1HG HxH7u HXHD$dH3%(uEH[fAHt&PЅHt$< f.PJHf.@SHHHyxdH%(HD$1HG HxH7u HHD$dH3%(uEH[fAHt&PЅHt$ f.PJH>f.@SHHHyxdH%(HD$1HG HxH7u HHD$dH3%(uEH[fAHt&PЅHt$f.PJHf.@SHHHyxdH%(HD$1HG HxH7u HxHD$dH3%(uEH[fAHt&PЅHt$\f.PJHf.@SHHHyxdH%(HD$1HG HxH7u HHD$dH3%(uEH[fAHt&PЅHt$f.PJH^f.@USH8H}H}HH@0PzxH0zxHHxtHHRHlNuCG@HENvxHHxHC(ȁxHC0xHCHEHCE C HHHT@LIzT@USH8HH}HH@0PzxH0zxHHxtHHRHlNuCG@HEN vxHH؀xHC(xHC0HxHCHEHCE C HHH@LIzT@USHXHHuHxH@PPzxH=HHEHUHu H{ HyxHCHSH}0HzxHC(0zxHH{0tHH@H=lNuCG@HE8pN`uxHHxHC(PxHCPxHC8HE@HC@EHCHH H$H)HHzx:HHHHfDLIz@USHXHHuHxH@PPzxH=HHEHUHu H{ HyxHCHSH}0H{xHC(0zxHH{0tHH@H=lNuCG@HE8NsxHH~xHC(~xHCPxHC8HE@HC@EHCHH H$H)HHzxHHzHHfDLIz@USHXHHuHxH@PPzxH=HHEHUHu H{ HyxHCHSH}0HP{xHC(0zxHH{0tHH@H=lNuCG@HE8N rxHHX}xHC(}xHCP}xHC8HE@HC@EHCHH H$H)HHzxHHZHHfDLIz@USHHHtCtH[]f.HHPk uHHPHkNuH@HH[]HH[]HAUATIUSAHH(dH%(HD$1H|$HT$LHHt$H&HD$HxH7u4HD$dH3%(DcHkHC 7HzxuH([]A\A]fHt$foHHD$HxH7t Ht$@HSH@Hptu[ù0axl(vXvf.fSH@H0tuH(Htu[ù`axQvWxT`axVvWx;f.USHHHvHHHG=HEHUHu H{ HyxHCHSH[]HHHbHHBHf.AUL,ATUS1LHIHHJ.HHHGHGu_II9HELmt7LHfHtLLHHH9uIL)HHDHEH[]A\A]fHH9w LHH}HtHfAWAVIAUATUSH(HG0HW(HO Lo8LgHD$HGHHjHL$HT$H9H$v4LuIDI~(HtZI@L9uHH9,$wHt$H94$L;d$t;I|$(Ht!I@L9d$uL9l$t I}(HtI@L9l$uI?HtiIGHI_(HhH9vfDH;HH9wI?H([]A\A]A^A_L;d$tfI|$(HtI@L9d$uI?HuH([]A\A]A^A_f.DSHHxH{PzH[AWAVAUATUSH8Hw0HG(HOHH|$ Lw8LoHt$Hw HD$(HHL$H9H$Ht$vdH$H(LfDH]L}L9tI?HtIL9uH]HtHHI9uH$H$H9D$wHt$(H9t$L;l$tDI]ImH9t@H}HtZHH9uI]HtH@IL9l$uL9t$t?InIH9tfH;HtHH9uI.HtHIL9t$uHD$ H8HHD$ HpHHX(HnH4$H9vH;HH9wHD$ H8H8[]A\A]A^A_L;l$tImI]H9tH;HtwHH9uImHtH]IL9l$uHD$ H8HcH8[]A\A]A^A_fSHHxH{PJH[HATIUSHt*HsLHkH{0HHHu[]A\fSHHdH%(HD$1G@P1҉W@u2HG8H{xHxH7u1HsH{tH|HL$dH3 %(uH[ÐHt$f.DUSHHHdH%(HD$1HtJHH@ H=ЅNuXk@u5HC8H{xHxH7uJHsH{HHEHD$dH3%(u)H[]fDHЄtDHt$SHHP|xHG(p|xH(tH0zxH{[#H(SHH{xHG({xH(H0zxH{[H(SHH0HHG~xHG0zxdH%(HD$1HC HyxHxH7u'HOHD$dH3%(uH[fHt$f.DH(gSHH0HHG|xHG0zxdH%(HD$1HC HyxHxH7u'HHD$dH3%(uH[fHt$V_f.DH(gSHH0HHGАxHG0zxdH%(HD$1_HC HyxHxH7u'HHD$dH3%(uH[fHt$f.DH(gSHH0HHG xHGАxHG0zxdH%(HD$1HC HyxHxH7uHgHD$dH3%(uH[ÐHt$ffffff.H(gLIzT@SHH0HHGАxHG0zxdH%(HD$1HC HyxHxH7u'HH'HD$dH3%(uH[ÐHt$foffffff.H(gSHH0HHG xHGАxHG0zxdH%(HD$1gHC HyxHxH7u/HHHD$dH3%(uH[fHt$ffffff.H(WLIzD@SHHG0HxH{xHG({xH(H0zxH{[ff.H(f.LIzSHHG0xHP|xHG(p|xH(H0zxH{[Kff.H(f.LIzSHH{xHG({xH(H{H0zxH[+ff.H(f.SHHP|xHG(p|xH(H{H0zxH[ff.H(f.SHH0HHG xHG~xHG0zxdH%(HD$1GHC HyxHxH7uHHD$dH3%(uH[ÐHt$ffffff.H(gLIzT@SHH0HHG }xHG|xHG0zxdH%(HD$1HC HyxHxH7uHGHD$dH3%(uH[ÐHt$ffffff.H(gLIzT@SHHG0xHP|xHG(p|xH(H~NH|$p&$HHS=H|$C袱HD$P؀xHD$xxHDŽ$HxH|$PH|$ H/HH莾HEHPHH{f.USHHHt$ H|$PHD$(dH%(H$1HD$0HD$8D$@HD$ P|xHD$Hp|xHD$XHD$`HD$hD$pHD$PxHD$xȁxHDŽ$x\=ubHD$`[xHD$hvD$pHbHHbHHStBH|$xHDŽ$xHD$PP|xHD$xp|xH|$XHD$P0zx|H|$HHD$ P|xHD$Hp|xH|$(HD$ 0zxMH$dH3 %(HBHĘ[]fࢱ98H0zxH|$XHH@0PzxHHxtHH@H=lNG@HD$`HE(ȁxHE0xHEHD$hHED$pHExHD$H$E HE0HD$舾HT$HЂxH@@ HhHD$H$iHD$HmbHD$HHfbt@ࢱH~NJH|$ &$HHSH|$ࢱ9HD$PxHD$xȁxHDŽ$xH|$PQH|$ GHHH>HEHP/HH{f.USHXHhdH%(HD$X1HHH?Ht$H{HD$0HD$8HD$@D$HH$|xHD$(|xHCPPzxH=κHD$HT$Ht$ H{ HyxHCHS觺H|$0HP{xHC(0zxHH{0tHH@H=lNu\G@HD$8Ht$(H{(HX}xHC(}xHCP}xHC8HD$@HC@D$HCHHN rxHHH@H!H@H'HHzxHHcH+HHH蟹f.S1H0dH%(HD$(1DuHD$(dH3%(u*H0[Hv HH$P{x HHH$zx!HfUS1HHXdH%(HD$H1H{(1}uHD$HdH3%(HX[]@HulH|$HT$vHHt$H|$ 豷HD$HxH7uOH|$ l$0H\$8HD$@7HD$ P{xf.]xEvv藺H>fHt$֫H|$ 0vH|$ HD$ P{x蹽HH|$ HD$ zxH9HD$HxH7tHt$mf.USH1H8GHGdH%(HD$(1HGHG(H0HGHG)uHD$(dH3%(u+H8[]úvHHH$P{xH HHH$zxHsHTH\f.fUSHXHhdH%(HD$X1;HHHHt$H{HD$0HD$8HD$@D$HH$~xHD$(8~xHCPPzxH=~HD$HT$Ht$ H{ HyxHCHSWH|$0H{xHC(0zxHH{0tHH@H=lNu\G@HD$8Ht$(H{(H~xHC(~xHCPxHC8HD$@HC@D$HCHIHNsxHoHH@H!H@H'HHzxHHHHHIHOf.SHH0dH%(HD$(1H(tuHD$(dH3%(u%H0[HvHH${x襺HHH$zxH*f.SHH0H?dH%(HD$(1Ht%{tKEHD$(dH3%(Cu-H0[HHvHH${xiH)HhvHH${x=HH$zx HsUSHH8HdH%(HD$(1Ht;|DHtuGHD$(dH3%(Eu)H8[]HHvRHH${xMHAHv)HH${xyH纐v#HH${xWHH$zx'Hf.USHH8dH%(HD$(1HtmHEHX0HtulHEHHǀpHǀx]HD$(dH3%(u5H8[]fD苶tڹ^xvWxδfD#HvHH${xT^xvWx苴HH$zx &fDUSHXHhdH%(HD$X1HHHHt$H{HD$0HD$8HD$@D$HH$xHD$(xHCPPzxH=螱HD$HT$Ht$ H{ HyxHCHSwH|$0HzxHC(0zxHH{0tHH@H=lNu\G@HD$8Ht$(H{(HxHC(PxHCPxHC8HD$@HC@D$HCHiHqpN`uxH菿HH@H!H@H'HHzx裾H+H3HHHiHof.AUATIUSHLg(HhdH%(HD$X1HHD$Hl$t HD$ ^LNfDHL轻t|$ H|$HD$Hh0HtHD$HHǀpHǀxHMtL{V=HD$XdH3%($Hh[]A\A]St^xvWx薱fDHX0D$ HXtu7HD$uMHpLxH|$)uQHH|$0vwH|$0HD$0{xƀ裶1ҾnxHD_xvWx۰HHH|$0HD$0zxNH趽HH覽蜷H|$HT$(vHHt$H|$06HD$HxH7t Ht$誡H|$0\$@Hl$HHD$P7HD$0zxH)H|$0voH|$0HD$0{xH&HD$HxH7t Ht$;HH|$0HD$0zx^H|$0HD$0zxId^xvWx蛯HH9_xvWxxH|$MzLmE1USH8HH}HH@0PzxH0zxHHxtHH@H=lNuOG@HEHHHCHEHCE HxHC(ȁxHC0xC HHXHH[]fH HH H蔸H蜻fff.LIz4@USH8H-H}HH@0PzxH0zxHHxtHH@H=lNuOG@HEHHHCHEHCE H؀xHC(xHC0HxC HHXHH[]fH HH|HķH̺fff.LIz4@USHXH]HuHxH@PPzxH=H.HEHUHu H{ HyxHCHS H}0HzxHC(0zxHH{0tHH@H=lNuOG@HE8Hu(H{(HC8HE@HC@EHHxHC(PxHCPxCHHHXHH[]HHHzxHSH諶H賹H+HH H'Hff.LIz@USHXHHuHxH@PPzxH=HHEHUHu H{ HyxHCHSʩH}0H{xHC(0zxHH{0tHH@H=lNuOG@HE8Hu(H{(HC8HE@HC@EHH~xHC(~xHCPxCHHHXHH[]HHHzxHHkHsHHH HH-ff.LIz@USHXHݪHuHxH@PPzxH=H讨HEHUHu H{ HyxHCHS芨H}0HP{xHC(0zxHH{0tHH@H=lNuOG@HE8Hu(H{(HC8HE@HC@EHHX}xHC(}xHCP}xCHHHXHH[]HHHzxHӵH+H3H諰HH H觧Hff.LIz@AUATIUSH^HHHHHwH9H<mIT$I$H)HL,IlI9sLDx>HHH9wMl$(IUHxIT$ID$ HEID$HHEIT$HxID$8ID$0IL$@H[]A\A]DHG@\HqL9vI}I߲L9wUH蝸HEI<$輲I$ID$&HnH覵fDHH$I$I$AVHHAUATUISIH)HHHHZHHHHWH9H<IT$I$H)HL4I,I9sLDΧHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@H$I$I$HLH)HHHHH)I)KDHID$0A\A]A^ÐHG@-IHѤL9vI>I@L9w趷HH覤I<$I$ID$臷H϶HATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHTH\H{xHD$XdH3%(u H`[]A\蕨I HHHL;HH HHf.AVAUIATIHHUSH_HHHI|$H9HhIT$I$H)HL4I,I9s"Lf6HHH9wMt$(IAI[HIT$ID$ HEID$HHE]IT$HID$8LID$0IL$@A\A]A^DID$@PءH`L9vI>IϭL9wEH荳H5I<$謭I$ID$H^H薰fDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHdHH{xcHD$XdH3%(u H`[]A\%I HHHL˵HH蛮HH苮f.HHAVHAUATUSIIHHZHHHHWH9H<IT$I$H)HL4I,I9s"Lf趠HHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHI)KDmHHID$0A\A]A^fHG@19HL9vI>I0L9w覰HH薝I<$ I$ID$wH迯HATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHDHLH{xHD$XdH3%(u H`[]A\腡I HHHL+HHHHf.HHAVHAUATUSIIHHZHHHHWH9H<HIT$I$H)HL4I,I9s"LfHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHI)KDIDEHID$0A\A]A^HG@1虚H!L9vI>I萦L9wHNHI<$mI$ID$׬HHWATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH$HH{x#HD$XdH3%(u H`[]A\I HHHL苮HH[HHKf.AUATIUSH^HHHHHwH9H<轙IT$I$H)HL,IlI9sLD`莙HHH9wMl$(IUH`IT$ID$ HEID$HHEIT$H`ID$8ID$0IL$@H[]A\A]DHG@\9HL9vI}I/L9w襩HH蕖I<$ I$ID$vH辨HfDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H2HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHHLH{xHD$XdH3%(u H`[]A\腚I HHHL+HsHHcHf.AUATIUSH^HHHHHwH9H<]IT$I$H)HL,IlI9sLD@.HHH9wMl$(IUH@IT$ID$ HEID$HHEIT$H@ID$8ID$0IL$@H[]A\A]DHG@\ٓHaL9vI}IϟL9wEH荥H5I<$謟I$ID$H^H薢fDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H2HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHDHH{xcHD$XdH3%(u H`[]A\%I HHHL˧HH蛠HH苠f.HHAVHAUATUSIIHHZHHHBHWH<IT$I$H)HL4I,I9s"LfƒHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHHI)KDmHHID$0A\A]A^HL9vI>I]L9wӢHHÏI<$:I$ID$褢HH$@ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHTH|H{xHD$XdH3%(u H`[]A\赓I HHHL[HH+HHf.HH$I$I$AVHHAUATUISIH)HHHHZHHHHWH9H<lIT$I$H)HL4I,I9sLD>HHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@H$I$I$HLH)HHHHH)I)KDHID$0A\A]A^ÐHG@-蹌HAL9vI>I谘L9w&HnHI<$荘I$ID$H?HwATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH$HH{xCHD$XdH3%(u H`[]A\I HHHL諠HӸH{HøHkf.AUATIUSH^HHHHHwH9H<݋IT$I$H)HL,IlI9sLD讋HHH9wMl$(IUHIT$ID$ HEID$HHEIT$HID$8ID$0IL$@H[]A\A]DHG@\YHL9vI}IOL9wśH H赈I<$,I$ID$薛HޚHfDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H2HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHDHlH{xHD$XdH3%(u H`[]A\襌I HHHLKHHHH f.AVAUIATIHHUSH_HHHI|$H9HxIT$I$H)HL4I,I9s"LfFHHH9wMt$(IAI[HIT$ID$ HEID$HHE]IT$HID$8LID$0IL$@A\A]A^DID$@PHpL9vI>IߑL9wUH蝗HEI<$輑I$ID$&HnH覔fDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH4HH{xsHD$XdH3%(u H`[]A\5I HHHLۙHH諒HӛH蛒f.HHaaAVHHAUATUISIH)HH¸HHZHHHBHWH<IT$I$H)HL4I,I9sLD΄HHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HaaHLH)HHHHHI)KDmHID$0A\A]A^HL9vI>I[L9wєHHI<$8I$ID$袔HH"fATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH4H|H{xHD$XdH3%(u H`[]A\赅I HHHL[HH+HәHf.HHAVHAUATUSIIHHZHHHHWH9H<yIT$I$H)HL4I,I9s#Lf.FHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHRI)KDIDHID$0A\A]A^HG@0~HQ~L9vI>IL9w6H~H&~I<$蝊I$ID$HOH臍ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH购HH{xSHD$XdH3%(u H`[]A\I HHHL軒HcH苋HSH{f.AVAUIATIHHUSH_HHHI|$H9H}IT$I$H)HL4I,I9s"Lf}HHH9wMt$(IA[HIT$ID$ HEID$HHEIT$LIHHI)ID$8L]IL$@ID$0A\A]A^ID$@HP{HzL9vI>IGL9w轍HHzI<$$I$ID$莍H֌Hf.@ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH贪H\H{xӿHD$XdH3%(u H`[]A\~I HHHL;HcH HSHf.AVAUATIHHUSH_HIHHBI|$HxzIT$I$H)HL4I,I9s"LfFzHHH9wMt$(IA[HIT$ID$ HEID$HHE]IT$ID$8HJIL$@ID$0A\A]A^HwL9vI>IL9wuH轉HewI<$܃I$ID$FH莉HƆfDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HRHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHdHH{x蓼HD$XdH3%(u H`[]A\U{I HHHLHH˄HH軄f.AWAVAUATIUSIHLwMHHX+IFHt.IIF @*LxtaLHvuIF1Hu҄LuUA?*tHLL1LHEHEH[]A\A]A^A_fI9A?*uLwfD1M9t$LtLL~IUIHZHP LzA?*uL9;*rAWHGAVAUATIUSIHHH9LHHhHF D}LpA*LHsA*HLAX]I9\$ BH誋IH@ EHpNHH{HHIEIEH[]A\A]A^A_f.I9\$HHtOH[}IH@ Hx?*u H9A*t H视|I~HHHEIDH[]A\A]A^A_DA>*L9rAH(t)H_ HC HxH?*Hptq,u%DLLEH[]A\A]A^A_fD1HrfDHH1[]A\A]A^A_@H9>*@H9>*uAUATIUSH8IH3tHIELHS HHHC(HC0HC Ht1HHMtPHHE(HH[]A\A]H{0H$ӆH}H$H[]A\A]@H9tHC HxHB ?*Hpt&HL$H$HL$H$y@H9>*uf.AWAVIAUATUSHHL.dH%(HD$81H$MLHGIHHD$M_H$HHXfDLMMt)IG Hx?*H+tMMuH9l$t$;*HE HpHH$H\$ I|$LD$HHkxHHD$ M.HIFLl$ HHD$(t@Ll$ HD$(HU(H{HT$ HU0Lm(HE0HT$(.ID$8I|$811HP|HD$8dH3%(u]HH[]A\A]A^A_H9;*@H\$ \fDH9>* Hl$ 5ubxVvqf.fATUHSIH HHGPdH%(HD$19qH|$@@ HPxLHoH{Ht$8HD$HxH7u4HH]0yxHP HEHD$dH3%(uH []A\DHt$FbOtHHD$HxH7t Ht$bHH1nHz$HlH}@AWAVAUATIUSHHHoHHHWHH)HHH)HvS!pHEHC0A$HtHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9H<oHIHs(L)HL4HCHHPH)HHHH;yL;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLIo뛽BfDLnkHUIH)HHH`LH)LnMlf.AWAVIAUATLwUSIHHHTALnHËEEC EC0EC8C(E C@E(CHE0CPE8CXE@C`EHChEPCpEXCxE`EhEpEx(  ) 08 *Hx@(H0P8X@`HHǃHHH`hǃxHǃHt`HHhHHpHHFHXHDž`HhHpHxHHDžxLLHD6ID$(HH[]A\A]A^A_fDL9E1B 9Af.@USHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHRrHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HrD;` H~HxHHEHEH[]A\A]fD~nHW 1H9tHD;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDATUISHHdH%(HD$1HuSHHMsHt@HsLHC(HkHxH7tHt$}ZHHsHuDHD$dH3%(u H[]A\Zlf.HATIUSHt4HsLHHkHp-HHrHu[]A\SHH0|HsH[fDAWAVAUATIUSHHG HoHLg0H_8LH$HG(LpHD$L9v$DI>IHXHHL9wH;l$L;<$tBIXIHIxfL9<$uI9t"HXHHHx>I9uI}HtpIEHI](HhH9vH;HqH9wI}H[]A\A]A^A_pqM9tIXIHIxM9uI}HuH[]A\A]A^A_ÐSHHx{H{PJ{H[ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H貼HHC1HCHCHHC HC(HC0HC8HC@HCHYH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHH|H{xHD$XdH3%(u H`[]A\hI HHHL[yHH+rHHrf.AVAUIATU0SHHdIƋC Hs(I~(AF bIFHsIFInAHtLLIFHkMHtc0VdHËE Hu(H{(C 0bEHCHuHCI\$HLctHL>HCHmIHu[L]A\A]A^2HaL ntHaHmrtsHHbaLLWRtH HH sHpsHpfUSHH]cHËEEHxHpC EC0EC8C(E C@E(CHE0CPE8CXE@C`EHChEPCpEXCxE`EhEpEx(  ) 08 *@(H0P8X@`HHǃHHH`hǃxHǃHtJHHHHQHuHHHPHuHHxHHH[]H]HmjpH0pHhmAVAUIATUHSHHv IƋIFHsIFInAHtLLIFHkMHif_HËE E0HxHpC E(C0E8C8C(E@C@EHCHEPCPEXCXE`C`EhChEpCpExCx( () 0)*088@*@HHPPXX``hHǃHHHhǃxHǃHtOHHDHHQHuHHHHHuHHHEHCHuHCI\$HLctHLMHCHmIH[L]A\A]A^ DlHHYLL~lHYHIflHHlH=if.ATUISHH0H_ dH%(HD$(1H|$ HHhHYH|$LYHT$ Ht$HHD$HxH7u/HD$ HxH7uMHD$(dH3%(H0[]A\úAHtfPЅHt$qf.AHt&PЅHt$pf.PJHPJH~^HHD$HxH7t Ht$uHD$ HxH7t Ht$cuHgHfDUS=xHH(HPxHdH%(HD$1.gH6qxHDpHoH{0HtHPHk(HtAHtZmHkHtAHtdmHCHxH7upHD$dH3%(H([]DEPUuHEHPE PU jDEPUuHEHPE PU lDAHtvPЅrH*oeHEHPE HEHP HEHPE HEHPPJH~\fffff.SH7H[bfffff.AWAVIAUATIUSHHIHXH|$@dH%(HD$H1iVI|$ Ht$@ZHT$@HzH7,H\$0Md$ H|$@LI$LxVLHVHL$@HLHAHD$0HxH7HD$@HxH7-HL$HdH3 %(HHX[]A\A]A^A_H|$@LULHUHT$H|$ %xLqIt$LD$@HT$ HH7HD$ HxH7KAHPЅ)Ht$mAHJʅH\$0HވD$lD$AHtnPЅHt$ lAHt^PЅHrlDPJH6PJHJqrBPJHYHHD$0HxH7t Ht$ pHD$@HxH7t Ht$ pH;cHHHD$@HxH7tHt$0pHHD$@HxH7tHt$vpHHD$ HxH7t Ht$UpHD$0HxH7tHt$9pHfAUATIUSHHhH|$PdH%(HD$X14SH} Ht$P&HT$PHzH7Xt\Hm H|$PLHELhRHt$PHAHT$PHzH7HL$XdH3 %(Hh[]A\A]H|$ HT$PT~inHEHt$ H|$@LhRH|$0LuRHL$@HT$0HH|$PAH}0Ht$P>HT$PHzH7HT$0HzH7HT$@HzH7HT$ HzH7)AHzJʅHt$PD$iD$fDAH*JʅHt$@D$xiD$fDAHJʅHt$D$8iD$fDAHJʅHt$PD$hD$fDAHJʅHt$PD$hD$fDAHt~JʅHt$@D$|hD$rfJqrJqrJqr2JqrJqrRJqr~UHHD$PHxH7t Ht$@lHD_HHD$ HxH7tHt$lHHD$0HxH7t Ht$lHD$@HxH7tHt$hlHHHD$PHxH7tHt$BlPf.ATUHSHH`H|$P$dH%(HD$X13OH{ Ht$P%HT$PHzH7Wt[H[ H|$PHHL`@N$Ht$PHAHD$PHxH7HD$XdH3%(H`[]A\H|$ HT$PT~ljHHt$ H|$@L`NH|$0HyNHL$@HT$0HH|$PAH{0$Ht$PA;HD$PHxH7HD$0HxH7HD$@HxH7HD$ HxH7,AH{PЅ Ht$P$e$fDAH*PЅHt$@$we$DAHPЅHt$$7e$DAHPЅHt$P$d$DAHPЅHt$P$d$DAHt~JʅHt$@D$|dD$sfPJHPJHPJH2PJHPJHRJqr~QHHD$PHxH7t Ht$@hHD[HHD$ HxH7tHt$hHHD$0HxH7t Ht$hHD$@HxH7tHt$hhHHHD$PHxH7tHt$BhPf.AUATAUSHHHhH|$PdH%(HD$X13KH{ Ht$P%HL$PHyH7Ot[H[ H|$PHHLh(JDHt$PHAHT$PHzH7HL$XdH3 %(Hh[]A\A]H|$ HT$PT~lfHHt$ H|$@LhJH|$0HyJHL$@HT$0HH|$PAH{0Ht$PD>HT$PHzH7HT$0HzH7HT$@HzH7HT$ HzH7,AH}Jʅ Ht$PD$ aD$ fAH2JʅHt$@D$ aD$ AH"Jʅ!Ht$D$ @aD$ AHJʅHt$PD$ aD$ AHJʅHt$PD$ `D$ AHQHt$@D$ `D$ yJqrJqrJqr*JqrJqrJQrqzMHHD$PHxH7t Ht$@dHFWHHD$ HxH7tHt$dHHD$0HxH7t Ht$dHD$@HxH7tHt$jdHHHD$PHxH7tHt$DdPfff.ATUHSHH`H|$PD$dH%(HD$X12GH{ Ht$P${HT$PHzH7^tbH[ H|$PHHL`8FD$Ht$PHAHD$PHxH7HD$XdH3%(H`[]A\fDH|$ HT$PT~dbHHt$ H|$@L`~FH|$0HqFHL$@HT$0HH|$PAH{0Ht$PD$=HD$PHxH7HD$0HxH7HD$@HxH7HD$ HxH7%AHPЅHt$PD$]D$AH2PЅHt$@D$n]D$AH"PЅHt$D$.]D$AHPЅHt$PD$\D$AHPЅHt$PD$\D$AHJʅHt$@D$p\D$hfDPJHPJHzPJH*PJHPJHJJqrzIHHD$PHxH7t Ht$@`H4SHHD$ HxH7tHt$`HHD$0HxH7t Ht$t`HD$@HxH7tHt$X`HHHD$PHxH7tHt$2`Pf.AUATAUSHHHhH|$PdH%(HD$X1#CH{ Ht$PwHL$PHyH7Ot[H[ H|$PHHLh0BDHt$PHAHT$PHzH7HL$XdH3 %(Hh[]A\A]H|$ HT$PT~\^HHt$ H|$@LhvBH|$0HiBHL$@HT$0HH|$PAH{0Ht$PD2HT$PHzH7HT$0HzH7HT$@HzH7HT$ HzH7,AH}Jʅ Ht$PD$ YD$ fAH2JʅHt$@D$ pYD$ AH"Jʅ!Ht$D$ 0YD$ AHJʅHt$PD$ XD$ AHJʅHt$PD$ XD$ AHQHt$@D$ rXD$ yJqrJqrJqr*JqrJqrJQrqzEHHD$PHxH7t Ht$@\H6OHHD$ HxH7tHt$\HHD$0HxH7t Ht$v\HD$@HxH7tHt$Z\HHHD$PHxH7tHt$4\Pfff.AUATIUSHHHhH|$PdH%(HD$X1#?H{ Ht$PsHL$PHyH7Ot[H[ H|$PHHLh >LHt$PHAHT$PHzH7HL$XdH3 %(Hh[]A\A]H|$ HT$PT~\ZHHt$ H|$@Lhv>H|$0Hi>HL$@HT$0HH|$PAH{0Ht$PL9HT$PHzH7HT$0HzH7HT$@HzH7HT$ HzH7,AH}Jʅ Ht$PHD$UHD$AH2JʅHt$@HD$oUHD$DAH"Jʅ!Ht$HD$/UHD$DAHJʅHt$PHD$THD$DAHJʅHt$PHD$THD$DAHQHt$@D$rTD$yJqrJqrJqr*JqrJqrJQrqzAHHD$PHxH7t Ht$@XH6KHHD$ HxH7tHt$XHHD$0HxH7t Ht$vXHD$@HxH7tHt$ZXHHHD$PHxH7tHt$4XPfff.AUATUSHHXdH%(HD$H19=HI'P$=Hx@@ HxHjHE0yxHP Lk(HC Hk(MtAHuAmHLk<@@ LHxHH:H}H|H$HxH7HE0yxHP LkHCHkMAHAmH{ʼnC8OH|$ x3?H|$ R.xHIQHsLHVQYxHHQH?H|$ kQI$LPHD$HdH3%(HX[]A\A]fAUJAMXH/@AEPAUIELPAE PAU fH|$xGH|$Q.xHHPHsHHVPBxHPH|$P!@H|$0x=H|$0Q"xHHPHsHHVPH|$0;PfDAHPЅHt$0$PIELPAE ZIELPKIELPAE PAU IELPH{PJHzk=H|$0H~OI$LPHFH|$ H_OH|$HPOHLCHFH#7HCJHH 7HCIIELPAE 5H,IiHH$HxH7t Ht$0SHHH9fDUSHHHHGPxH7HGHGHGHG HG(dH%(HD$1IH/HD$dH3%(uH[]*t@yxt fI@f.HvIH@yxt 1>*t@yxt fI@f.ATUISHHdH%(HD$1Hu2HC HxH7u_HH4@HHsLHC(HkHxH7tAHPЅHt$K됹AHtVHȅHt$lKHH?H}HD$dH3%(u0H[]A\HqpPJHp8f.Hw(Hfffff.+?f.H{vWx5fAHtG~fDGPW~Jfffff.SȤHdH%(HD$1@HH8t+HHxH7tHt$HuH8u@HD$dH3%(uH[7ffff.SHdH%(HD$1@HHt+HHxH7tHt$HHu@HD$dH3%(uH[=7ffff.SHHdH%(HD$1@HHt+HHxH7tHt$HuHu@HD$dH3%(uH[6ffff.SHdH%(HD$1@HHt+HHxH7tHt$HHu@HD$dH3%(uH[=6ffff.SHHdH%(HD$1@HHt+HHxH7tHt$HuHu@HD$dH3%(uH[5fff.H0{AWAV:{AUATIUSLIHMHxEdH%(HD$h1H$IuzH\$PHM7H/@1D$DHLHHgHD$PHxH7 HL$hdH3 %(I,$LHx[]A\A]A^A_Ðc{L#IHHM7 /HHD$PHCHHD$Xt@0H\$PD$DHLHIH5H{CH$HxH7LH?f.G{LHpxLnH&H|$ HM7V.HHD$PHCHHD$Xt@B0H\$PD$HT$ DLHIH茨H{#CHD$ HxH7H%H|$HM7-HHD$PHCHHD$Xt@/H\$PD$HT$DLHIH0H{BHD$HxH7 Hf.Ht$@^{L3Gv{LGLt$@HM?L-HHD$PHCHHD$Xt@.H\$PD$DLLHIHKH{AHD$@HxH7AH4H|$0HM7x,HHD$PHCHHD$Xt@d.H\$PD$HT$0DLHIHbH{EAHD$0HxH7HGf{LELt$@HM?L+HHD$PHCHHD$Xt@x-H\$PD$DLLHIH )H{@HD$@HxH7H {LWELt$@HM?L<+HHD$PHCHHD$Xt@(-H\$PD$DLLHIHħH{ @HD$@HxH7zH m{LDLt$@HM?L*HHD$PHCHHD$Xt@p,H\$PD$DLLHIH H{o?HD$@HxH7Hq{LDLt$@HM?L*HHD$PHCHHD$Xt@p+H\$PD$DLLHIH H{>HD$@HxH7BH5{LCLt$@HM?Lh)HHD$PHCHHD$Xt@T+H\$PD$DLLHIH H{7>HD$@HxH7H9{LBLt$@HM?L(HHD$PHCHHD$Xt@p*H\$PD$DLLHIH H{=HD$@HxH7 H.{LFBLt$@HM?L+(HHD$PHCHHD$Xt@p*H\$PD$DLLHIH H{d5HH1HD$PHxH7t Ht$@H4H}7H;.{LY?H\$PHM7H>%hD'D$DHLHH& HD$PHxH7Ht$@8IHL%1H{9HD$@HxH7tHH@HH\$P;?{L>Lt$@HM?L~$HHD$PHCHHD$Xt@j&H\$PD$DLLHIH&H{M9HD$@HxH7HOxL=Lt$@HM?L#HHD$PHCHHD$Xt@%H\$PD$DLLHIHH{8HD$@HxH7 HxLa=Lt$@HM?LF#HHD$PHCHHD$Xt@2%H\$PD$DLLHIHH{8HD$@HxH7Hw؈xL<Lt$@HM?L"HHD$PHCHHD$Xt@$H\$PD$DLLHIHH{y7HD$@HxH7H{xL)<Lt$@HM?L"HHD$PHCHHD$Xt@#H\$PD$DLLHIHfH{6HD$@HxH7LH?(xL;Lt$@HM?Lr!HHD$PHCHHD$Xt@^#H\$PD$DLLHIH H{A6HD$@HxH7HCPxL:Lt$@HM?L HHD$PHCHHD$Xt@"H\$PD$DLLHIHNfH{5HD$@HxH7HxxLU:Lt$@HM?L: HHD$PHCHHD$Xt@&"H\$PD$DLLHIHH{ 5HD$@HxH7xH kxL9Lt$@HM?LHHD$PHCHHD$Xt@!H\$PD$DLLHIH趺H{m4HD$@HxH7Ho؉xL9Lt$@HM?LHHD$PHCHHD$Xt@ H\$PD$DLLHIHzH{3HD$@HxH7@H3xL8Lt$@HM?LfHHD$PHCHHD$Xt@R H\$PD$DLLHIHH{53HD$@HxH7H78xL7Lt$@HM?LHHD$PHCHHD$Xt@H\$PD$DLLHIH蒘H{2HD$@HxH7HZ{LI7Lt$@HM?L.HHD$PHCHHD$Xt@PH\$PD$DLLHIHFSH{1HD$@HxH7lH_hxL6Lt$@HM?LHHD$PHCHHD$Xt@P~H\$PD$DLLHIHJEH{a1HD$@HxH7HcxL6Lt$@HM?LHHD$PHCHHD$Xt@PH\$PD$DLLHIH>6H{0HD$@HxH74H'xLu5Lt$@HM?LZHHD$PHCHHD$Xt@PFH\$PD$DLLHIH^H{)0HD$@HxH7H+؊xL4Lt$@HM?LHHD$PHCHHD$Xt@PH\$PD$DLLHIHf H{/HD$@HxH7HxL=4Lt$@HM?L"HHD$PHCHHD$Xt@PH\$PD$DLLHIHzH{.HD$@HxH7`HS(xL3Lt$@HM?LHHD$PHCHHD$Xt@PrH\$PD$DLLHIH%H{U.HD$@HxH7HWu{L3Lt$@HM?LHHD$PHCHHD$Xt@PH\$PD$DLLHIHbkH{-HD$@HxH7(H{Li2Lt$@HM?LNHHD$PHCHHD$Xt@:H\$PD$DLLHIH薥 H{-HD$@HxH7H{L1Lt$@HM?LHHD$PHCHHD$Xt@H\$PD$DLLHIH H{,HD$@HxH7H{L11Lt$@HM?LHHD$PHCHHD$Xt@H\$PD$DLLHIH H{+HD$@HxH7THG{L0Lt$@HM?LzHHD$PHCHHD$Xt@fH\$PD$DLLHIH H{I+HD$@HxH7HK{L/Lt$@HM?LHHD$PHCHHD$Xt@HH\$PD$DLLHIH趘 H{*HD$@HxH7H{L]/Lt$@HM?LBHHD$PHCHHD$Xt@H.H\$PD$DLLHIH H{*HD$@HxH7Hs2{L.Lt$@HM?LHHD$PHCHHD$Xt@HH\$PD$DLLHIH^ H{u)HD$@HxH7HwE{L%.Lt$@HM?L HHD$PHCHHD$Xt@HH\$PD$DLLHIH貴 H{(HD$@HxH7HH;W{L-Lt$@HM?LnHHD$PHCHHD$Xt@HZH\$PD$DLLHIH6 H{=(HD$@HxH7H?e{L,Lt$@HM?LHHD$PHCHHD$Xt@HH\$PD$DLLHIH H{'HD$@HxH7Ht{LQ,Lt$@HM?L6HHD$PHCHHD$Xt@H"H\$PD$DLLHIH^% H{'HD$@HxH7tHg{L+urH\$PHM7H8D$DHLHHHD$PHxH7Ht$@[{L2+u|H\$PHM7H@!D$DHLHHHD$PHxH7Ht$@uGH\$PPxHH~)HuHHV()t|HaI6HHVr(xHEH1(NI}?s5idHH'LJ @6,"vlbXNDx:n0dIIHLMJH{!$HD$ HxH7tH'HLH]{@:Hk'HH/d{@:H='H HIIHLMH{y#HD$0HxH7tHHLH {@: H&`HIH\$PtHIIHLM#H{"HD$HxH7tHHLH6k {@:HD&IIHLMH{"HD$@HxH7tHHLHIH\$PHIH\$P!HBzHAHIH\$P =3)HIH\$PHAWAV?{AUATIUSLIHMH8EdH%(HD$(1H\$xQ&HHM?; HIHD$HCHHD$t@$H\$DD$pDLLHIH{H{ !H$HxH7HL$(dH3 %(I,$LH8[]A\A]A^A_xL%u_HHM? HIHD$HCHHD$t@r H\$DD$pDLLHIHI@xL+%tw؈xL%HHM? HIHD$HCHHD$t@ H\$DD$pDLLHIHܹHHM? HIHD$HCHHD$t@ H\$DD$pDLLHIHbDHnxL3$tw(xL"$HHM? HIHD$HCHHD$t@ H\$DD$pDLLHIH4 HHM? HIHD$HCHHD$t@ H\$DD$pDLLHIHjD{LK#u[HHM?9 HIHD$HCHHD$t@" H\$DD$pDLLHIHA3PxL"u[HHM?HIHD$HCHHD$t@ H\$DD$pDLLHIHENxxLs"u[HHM?aHIHD$HCHHD$t@J H\$DD$pDLLHIH!xL"u[HHM?HIHD$HCHHD$t@ H\$DD$pDLLHIH ؉xL!u[HHM?HIHD$HCHHD$t@r H\$DD$pDLLHIHkI8xL/!u`HHM?HIHD$HCHHD$t@ H\$DD$pDLLHIH{ xL u[HHM?HIHD$HCHHD$t@H\$DD$pDLLHIHTlH\$PxH H+HuHHV;)t|HIuHHVxHH1IHL$H{H$HxH7tHH HH\$HHu빐fAWAVZ{AUATIUSLIHMH8EdH%(HD$(1H\$x1HHM?HIHD$HCHHD$t@PH\$DD$pDLLHIH3;H{H$HxH7HL$(dH3 %(I,$LH8[]A\A]A^A_hxL{u_HHM?iHIHD$HCHHD$t@PRH\$DD$pDLLHIH!-I@xL twxLHHM?HIHD$HCHHD$t@PH\$DD$pDLLHIH\GHHM?HIHD$HCHHD$t@PkH\$DD$pDLLHIHbDHhn؊xLtwȋxLHHM?HIHD$HCHHD$t@PH\$DD$pDLLHIHDHHM?HIHD$HCHHD$t@PsH\$DD$pDLLHIH2jD(xL+u[HHM?HIHD$HCHHD$t@PH\$DD$pDLLHIH!u{Lu[HHM?HIHD$HCHHD$t@PH\$DD$pDLLHIH%TxLSu[HHM?AHIHD$HCHHD$t@P*H\$DD$pDLLHIH!{Lu[HHM?HIHD$HCHHD$t@PH\$DD$pDLLHIH-bH\$]PxHHTHuHHVd)t|H7 IuHHVGxH H1fIHLH H{H$HxH7tH&H.HH\$HHu뽐fAWAV{AUATIUSHLIMH8EdH%(HD$(1H\$xaLHM?KHIHD$HCHHD$t@4H\$DD$pDLLHII蓌 H{H$HxH7HL$(dH3 %(LeHeH8[]A\A]A^A_{Lu_LHM?HIHD$HCHHD$t@H\$DD$pDLLHII聬 I@{L;tw{L*LHM?HIHD$HCHHD$t@H\$DD$pDLLHII LHM?HIHD$HCHHD$t@H\$DD$pDLLHIIZ bDHn{LCtH\$PxHcH I4$HHV)t|HIIuLHV$xHHE1@LHM?HIHD$HCHHD$t@H\$DD$pDLLHII誚 bH\$HH{oH$HxH7tHvH~ LHcHH@UHAWAVAUATISHHUHHHH{dH%(HE1L#HH I$LpHUH{QH HLHAHHxH7H HxH7H}Px H} (xHIHLHVH}L#HUH0,{I$Lp(1H0LAAH0HxH7EuJL#HUH@C{I$Lp(J1H@LAAH@HxH7L3HUHPU{ILx(1HPLADHPHxH7QL#HUH`g{I$Lp(1H`LAAH`HxH7gEuJL#HUHpz{I$Lp(b1HpLAAHpHxH7L3HUH}{ILx(1HuLAHMHyH7IUHUIUHHUtBDHH}AHpH}{HHEHCHHEtAH@HEHHLEHMHUPATEH}XZHt-HEHxH7HEHxH7HEHxl HHxH7HHxH7H]dH3%(HHe[A\A]A^A_]@+HujfHurfHuYfHufHu$fHuNfHuVfHu+fDHufHuwfHugfHuWsH}HHHxH7t H !HHxH7t HH HHH@HxH7tHuHHPHxH7vH}HHt+HEHxH7t HuHEHxH7t HupHEHxC HHpHxH7aHH`HxH7AHHEHxH7$HHHxH7t HuH HxH7HuHHH0HxH7ZHmHHfffff.UHAWAVAUATISHHUHHHH:{dH%(HE1L#HH I$LpHUH{H HLHAHHxH7H HxH7H}Px3H}: xHIE HLHV2 H} L#HUH0,{I$Lp(1H0LAAH0HxH7EuJL#HUH@C{I$Lp(z1H@LAAH@HxH7L3HUHPU{ILx(11HPLADHPHxH7QL#HUH`g{I$Lp(1H`LAAH`HxH7gEuJL#HUHpz{I$Lp(1HpLAAHpHxH7L3HUH}{ILx(L1HuLAHMHyH7IUHUIUHHUtBDHH}A(HpH}p{ HSHHHEHUtAHBHEHHLEHMHUPjEH}XZHt&HEHxH7HEHxH7HEHxHHxH7HHxH7H]dH3%(HHe[A\A]A^A_]B+HuGjfHu7rfHu'YfHufHu$fHuNfHuVfHuѽ+fDHu跽fHu觽fHu藽fHu臽sH}HHHxH7t H QHHxH7t H1H9HHH@HxH7tHuHHPHxH7vH}HHt$HEHxH7t Hu躼HEHxH7t Hu蠼HEHxsHHpHxH7aHH`HxH7AHHEHxH7$HHHxH7t HuH HxH7HuHHH0HxH7ZHmHHfffff.UHAWAVAUATISH]HPIIHH8H0{HdH%(HE1 M7HPH}ILxHUHp{ HMHpLH`AHpHxH7HEHxH7PxHhHp)HxHI{H`LHVhH IEHEIEHHEt@H`H}'HpH}{H0HHEHAHHEtAH@H8SLEjHMHUALмH}XZHt!HEHxH7HEHxH7ujH{H`HxH7u}HPHxH7uyH]dH3%(LHe[A\A]A^A_]@@CHuWDHHTH8YH(vHzHu'mH}IHt HEHxH7t HuҸHEHxH7t Hu踸H{LH`HxH7t Hu菸HPHxH7t HOoHwHIHLHIHpHxH7tH.HEHxH7tHLII1ICf.UHAWAVAUATISH]H0IIHHHc{DdH%(HE1.H@Hھ{HHP*HP {1HH@HHUH7HEHxHEH7HHPHxH7M4$HH0IH@HH@HpHp{HHpLH`HHpHxH7HEHxH7PxHH){HIH`LHVHIEHEIEHHEt@H`H}H@H}I$HEID$HHEtAH@HHLESHMjE1LaH}XZHtHEHxH7HEHxH7H{.H`HxH7H@HxH7H0HxH7HMdH3 %(LHe[A\A]A^A_]Ð@"HEHH贴XH蠴%H萴*H耴EHpMH`UHLH8H(&HH`HxH7t HH@HxH7t H/۳H0HxH7t H/軳HIHEHxH7t Hu薳HPHxH7uLIHEHxH7tHaIHpHxH7tH@IH{LIHLIHEHxH7tHHH}IHtHEHxH7tH轲HIf.UHAWAVAUATISH]H(HHHH:{HDdH%(HE1HHھ {H Hھ{H0Hھ+{H@Hھ5{HHPHP {1>HHHHUH7AHEHxH7LHPHxH7LHH`!H`{1HH HHUH7HEHxH7H`HxH7HHpHp +{1THH0HHUH7WHEHxH7:HpHxH7:LHL4 5{1LHH@HHUH7HEHxH7vHHxH7vHHHL(IELpHHH{HHLHAHHxH7HHxH7H:{HDž7HDž7HDž7  L :{LjH :{TH :{>PxHH?{HIHLHV{HIwHLHVd {HIOHLHVHHxH7HEHxH7HEHxH7$HHxH7tHHxH7lH0O҂HDž7HuLHLHEHxH7pHHEHCHHEt@HUH:{;HUH{&HHHEHAHHEtAH@HAVLjHHAL H}AYAZHt(HHxH7`HHxH7XI~HHEHCHHEt@HH HH{lHHHEHAHHEtAH@HAVL jHHAL耷_H}AXHt?HHxH7H HxH7wI~HHEHCHHEt@HHPHH@{HHHEHAHHEtAH@HAVLPjH@H0AL跽H}Y^HtWH@HxH7OHPHxH7GI~HHEHCHHEt@HH}HHp{HHHEHAHHEtAH@HAVLEjHpH`ALH}XZHtuHpHxH7MHEHxH7HI~HHU{LLLHDžHDžHHH0HDž0HH`HDž`HWHH}ӂrHHEHCHHEt@h`HHELUHMAVPLAWH HI~H H(HEHxH7HEHxH7H`HHPH0HtHPHHtHPHHtHPHHxH7jHHxH7bH@HxH7ZH0HxH7RH]dH3%(HHe[A\A]A^A_]fH0H45H1ҾT~U8H1ҾT~=H@1ҾT~HHfD@*@1@7@L而Lp&L`LPL@L0Huf.HufLLL؋LȋL踋L訋L蘋Hu臋fHuwfLh0LX5LHL8L(LLLHpzLЊ{LL谊L蠊tL萊|HHEHxH7t HpfHEHxH7t HuLHEHxH7t Hu2HEHxH7t HuH HHHH}HHtHpHxH7tLԉHEHxH7tL軉I~H0HtHPHHtHPHHtHPHHxH7t H\HHxH7t HpuH{"HsH肝H@PxH詠H豪P{HI輩HLHV詩"H{HI蔩I7LHV腩g{HIpI6LHVa$p{HILH`LH0HV6HMuHHO҂ILxˬHuHH{1蓡HL0{LH0H79HHLHH@H7HAH@HxH7 H0HxH7 HHxH79 HHxH71 HO҂HDž7m HuHHH躝HHxH7 MuHHO҂ILxoHuH菭H/{17H{LH0H7HHLHH@H7HAHHHHxH7 H@HxH7 H0HxH7 HHxH7 HHxH7 HO҂HDž7腨HuHmHH:HHxH7" MuHH0O҂ILxHuH H @{1跞H{LH0H7dHH0LH@H@H7HAH@HyH@HxH79 H@HxH79 H0HxH79 H HxH71 H0HxH7HO҂HDž@75HuHPHPH@躚HPHxH7HxHH@HAHHHt@L H:{LRHHp{:IEH0IEHH8tAH@HpSLjHpH`AL\H8AYAZHt:HpHxH7zHHxH7rH{HxHH@HAHHHt@HXH艋HH{qIEH0IEHH8tAH@HpSLjHHAL~_H8AXHtBHHxH7HHxH7zH{HxHH@HAHHHt@HPH葊HH/{yIEH0IEHH8tAH@HpSLjHHAL讄H8Y^HtKHHxH7kHHxH7cH{HxHH@HAHHHt@H`H蚉H@H@{股IEH0IEHH8tAH@HpSLjHHAL臉H8XZHtTHHxH7tHHxH7lH{IEH{LLLHDžHDžHpH`HDž`HXHHDžH`6H8{L"HxHH@HAHHHt@h3L`HXMUHpHSATAVAWIHx HhH{H L9H0HxH7H HxH7HHHPHHtHPHHtHPH`HtHPH@HxH7\HHxH7THHxH7LHHxH7DHHxH7<HHDžPfHDžfHDž`fHDžhP5HxH7HPHDžhAHxP՞HaHDŽaH@HPHaHaH`H@H`HsaHtaHPH@HPHPHDžDHxhnH]dH3%(HhHe[A\A]A^A_]DHHJKH@1ҾT~5H1ҾT~VH1ҾT~@$@ @ @HhRaHXRHHRAH8RH(RHRHR"H QFHQJHQjLQLQLQyLQH |Q6H dQ6HPQ:H@Q;H0QCH QHQHQHPHPHPLPLPLPqLPyH |PH dPHPPH@P覈IHHxH7HHxH7tHOHHxH7LHHxH7t HOHPXHIH@HxH7t H OH0HxH7tHqOHHxH7tHUOHHxH7VH5OIIHHxH7H OIH@HxH7t H NH@HxH7t H NH0HxH7tHNH HxH7tHNH0HxH7BHmN5IHPHxH7tHINH@HxH7IIHHxH7tL NH{IHHxH7tLMH{踕HHtHPH`HmHPbIHHxH7tLMH{cIIHHxH7FGI9IHHxH7IGI_IsII+H8IHtHHxH78LL+H8IHt迴HHxH7tLLHHxH7tLLH{^HHHPIPHxIMIH{ H0HxH7tH$LH HxH7tHLHHzHPoIIIH8IHtʳHHxH7LKH8IHt葳HpHxH7RLqKEIIIHHxH7t H 9KH@HxH7t H KH0HxH7tHJHHxH7HJIIII4IHI\IH6LHHfffff.UHAWAVAUATISIMHH]HhHPHpHXLPHxL`dH%(H]1HPuH{HsHRH@PxHyH聕P{HI茔HLHVy"H{HIdI7LHVUg{HI@I6LHV1$p{HIH`LH0HVH输MuHHO҂ILx蛗HuH軙HY{1cHL0{LH0H7 HHLHH@H7HAH@HxH7 H0HxH7 HHxH79 HHxH71 HO҂HDž7Քm HuH轘HH芈HHxH7 MuHHO҂ILx?HuH_H h{1H{LH0H7贇HHLHH@H7HAHHɇHHxH7 H@HxH7 H0HxH7 HHxH7 HHxH7 HO҂HDž7UHuH=HH HHxH7" MuHH0O҂ILx返HuH ߖH t{1臉H{LH0H74HH0LH@H@H7HAH@HIH@HxH79 H@HxH79 H0HxH79 H HxH71 H0HxH7HO҂HDž@7Ց5HuHP轕HPH@芅HPHxH7HxHH@HAHHHt@L H:{L"HHp{ IEH0IEHH8tAH@HpSLjHpH`ALFH8AYAZHt HpHxH7zHHxH7rH{豋HxHH@HAHHHt@HXHYvHHY{AIEH0IEHH8tAH@HpSLjHHALVi_H8AXHtHHxH7HHxH7zH{蹊HxHH@HAHHHt@HPHauHHh{IIEH0IEHH8tAH@HpSLjHHAL~oH8Y^HtHHxH7kHHxH7cH{‰HxHH@HAHHHt@H`HjtH@Ht{RIEH0IEHH8tAH@HpSLjHHALWtH8XZHt$HHxH7tHHxH7lH{ˈIEH{LLLHDžHDžHpH`HDž`HXHHDžH`Hq{L"HxHH@HAHHHt@huL`HXMUHpHSAVATAWIHx迮 HhH{H L9ȇH HxH7H0HxH7HHHPHHtHPHHtHPH`HtHPH@HxH7\HHxH7THHxH7LHHxH7DHHxH7<HHDžPfHDžfHDž`fHDžhP5HxH7HPHDžhAHxP襉HvoaHoaH@HPHtoaHuoaH`H@H`HCoaHDoaHPH@HPHPHDžDHxh>H]dH3%(HhHe[A\A]A^A_]DHHJKH@1ҾT~H1ҾT~VH1ҾT~͂@$@ @ @H8=aH(=H=AH=H<H<H<"H HUg{L8IL`(k1H LAԉPH HxH7BDPEuSHhHUH0z{L8IL`(Uk1H0LAԉPH0HxH7AH}Px%^H},h{H\PHY{H\H}fHhHHPL8IL`NHUH@{jHPH@LH`AH`H\H`HxH7BH@HxH7BHPHxH7BHHWHhHHL8IL`NHUHp{iHHpLHAHH[HHxH7n@HpHxH7c@HHxH7X@HhHHL8IL`nMHUH{)iHHLHAHH [HHxH7AHHxH7AHHxH7AHHVHhHHL8IL`LHUH{_hHHLHAHHAZHHxH7?HHxH7?HHxH7?HhHHL8IL`KHUH{gHHLH AH HYH HxH7>HHxH7>HHxH7>HHUZ<dHDžP7Dž`d9PHY@HpH]AHhHHL8IH@HPJH`HiiH {1a[HH}{HUH7UZHHLH}HUH7HHPHEHxH7 HEHxH73 HHxH7 HHxH7 HH}S[ HuHk\AHhHH`L8IH@HPIH`HPGhHP{1?ZHH}{HUH73YHH`LH}HUH7HHPHEHxH7 HEHxH7 HPHxH7 H`HxH7 HH}RHuHI[AHhHUHg{L8IH@(HPVd1HLHPЅHAE!HxH7 EbIEHEIEHHEt@HHD`HHHHHHGHhHyHHHEH}taHXSLAWLHHUH|IY^HHR`H)HH9=?HHHDžH8HHtHPHHtHPH}Htv|HHxH7~ HHxH7V HHxH7. H{\HhHUHz{L8IH@(HPb1HLHPЅA!HHxH7c EbIEHEIEHHEt@HH D`GFHH4FHH!FHhHyHHHEH}t`HXSL ATLHHUH0XZI`HHRH)HH9>HH0HDž0H8HHtHPH0HtHPH}HtzHHxH7HHxH7H HxH7H{8ZHEHxH7HEHxH7HpHxH7`9d`[ HhHpHpO҂L I$Lxa`HUH*{L`HpHLHAH`H`bH`{1[OHH}1{HUH7SHHLHHUH7HALPHLQHHxH7HEHxH7HEHxH7H`HxH7HHxH7zHHxH7RHpHxH7*{L5]HAHHDEHhL8IH@HPBH`HaH{1MHH}{HUH7RHHLHpHUH7HHPHEHxH7HEHxH7HHxH7HHxH7HHpKHhHHL8IH@HPAH`H`H{1LHH}{HUH7xQHHLHHUH7HHPHHpJOHHxH7RHEHxH7-HEHxH7HHxH7HHxH7HHpJHhHHL8IH@HP@H`HpB_Hp{1KHH}{HUH73PHHLHHUH7HHPHH}NHHxH7XHEHxH7+HEHxH7HpHxH7HHxH7fHH}VIfHhHH0L8IH@HPe?H`H ^H {1_JHH}{HUH7NHH0LH@HUH7HHPH@H}LH@HxH7`HEHxH7;HEHxH7H HxH7H0HxH76HH}HnfH 2Hx 0HPd HP H@ H0 yH QH )Hu f.Hu fH cH ;H Hu fHu fH mHx EHh HX HH H8 H( H H sHu fHu fHu tfHu IfHu !fHu AfH [H Hx Hh HX HuG fHu7 fH( H HP HPHHHufHufHhHUH@{L8IL`( W1H@LAԉ`H@HxH7.H}PxIH}S{HG`HE9{HGH}RHhHH`L8IL`:HUHPO{WVH`HPLHpAHpH9HHpHxH7-HPHxH7-H`HxH7-HhHHL8IL`9HUHX{UHHLHAHHGHHxH7\-HHxH7Q-HHxH7F-HhHHL8IL`>9HUHj{THHLHAHHFHHxH7,HHxH7,HHxH7,dDž`{`9dHEr`dIEHEIEHHEt@HHD`68HH#8HH8HhHyHHHEH}tQHXSLATLHHUH聒I`A\A_HHRH)HH91HHHDžH8HHtHPHHtHPH}HtlHHxH7HHxH7HHxH7H{%LHEHxH7HEHxH7sHpHxH7K`9d`HhHpHO҂L I$LxNRHUH*{9RHHLHAH`HTH{1HAHH}1{HUH7EHHLH HUH7HALPH LCH HxH7YHEHxH74HEHxH7HHxH7HHxH7HHxH7HHxH7o{L"OHAHH@DEHhL I$H@HP4H`H0SH0{1?HH}{HUH7qDHH@LHpHUH7HHPHEHxH7HEHxH7lH0HxH7DH@HxH7HHp=tHpHFAHhHH`L I$H@HP3H`HP]RHP{1>HH}{HUH7NCHH`LH}HUH7HHPHEHxH7)HEHxH7HPHxH7H`HxH7HH}H}H{HAHhHHL8IH@HP_+H`HIH@{1Y6HH}{HUH7:HHLH}HUH7HHPHEHxH7 HEHxH7 HHxH7 HHxH7 HH};4HuH=AHhHUHP,{L8IH@(HPF1HPLHPЅHPAE!HxH7z EdIEHEIEHHEt@HHD`)HHp)HH`)HhHyHHHEH}tCHXSLAWLpH`HUHI`AYAZHHPH)HH9.HHHDžH8HHtHPHHtHPH}Ht.^H`HxH7v HpHxH7N HHxH7& H{=HhHUHC{L8IH@(HP@D1HLHPЅA!HHxH7[ EcIEHEIEHHEt@HHD`'HH'HH'HhHyHHHEH}tAHXSLATLHHUHJI`_AXHHRH)HH9HHHDžH8HHtHPHHtHPH}Ht`\HHxH7HHxH7HHxH7H{;HEHxH7HEHxH7HpHxH7}`9d`R HhHpH O҂L I$LxBHUH0*{BH H0LH@AH`HDH{11HH}1{HUH75HH@LHPHUH7HALPHPL{3HPHxH7HEHxH7HEHxH7HHxH7H@HxH7qH0HxH7IH HxH7!q{L>HAHHpDEHhL8IH@HP$H`H`KCH`{1/HH}{HUH7<4HHpLHpHUH7HHPHEHxH7HEHxH7H`HxH7HpHxH7HHp- HhHHL8IH@HP#H`H>BHY{1.HH}{HUH7/3HHLHHUH7HHPHHp1HHxH7IHEHxH7$HEHxH7HHxH7HHxH7HHpL,HhHH0L8IH@HP]"H`H @H t{1W-HH}{HUH71HH0LH@HUH7HHPH@H}/H@HxH7PHEHxH7#HEHxH7H HxH7H0HxH7^HH}+HhHHL8IH@HP%!H`H?Hh{1,HH}{HUH70HHLHHUH7HHPHH}.HHxH7`HEHxH7;HEHxH7HHxH7HHxH76HH})yfHH8H8;HP$HHHHZH2Hu f.HufHlHDHxHugfHuWfHHvH8NH()HHHHHHyHufHufHu|fHuRfHuw*fHugJfHXdHHH8H(HHufHufHHHPHPHHHuwfHugfHhHUHU{L8IL`(81HLAԉ`HHxH7DPxH+H5{H)`Hh'@{H{)HS4HhHHL8IL`_HUH{8HHLH AH H)H HxH7HHxH7HHxH7HhHH@L8IL`HUH0h{k7H@H0LHPAHPHM)HPHxH7=H0HxH72H@HxH7'HhHHpL8IL`HUH`{6HpH`LHAHH(HHxH7H`HxH7HpHxH7dDž~`9dHfDEp`bIEHEIEHHEt@HH`DHHPHH@HhHyHHHEH}t3HXSL`ATLPH@HUHpqXZIHHRH)HH9HHpHDžpH8HHtHPHpHtHPH}HtXNH@HxH7HPHxH7H`HxH7H{-HEHxH7HEHxH7}HHxH7U9dHhHpHO҂L I$Lx4HUH*{3HHLHAHH6H{1 #HH}1{HUH7'HHLHHUH7HALPHLs%HHxH7[HEHxH76HEHxH7HHxH7HHxH7HHxH7HHxH7q{L0HAHHDEHhL I$H@HPHHB5H{1:'HH}{HUH7.&HHLHHUH7HHPHEHxH7HEHxH7iHHxH7AHHxH7HHvtHH?(AHhHHL I$H@HP}HH4H{1w HH}{HUH7 %HHLH}HUH7HHPHEHxH7.HEHxH7 HHxH7HHxH7HH}YtHuH%'AHhHH0L I$H@HPcHH 3H {1]HH}{HUH7#HH0LH}HUH7HHPHEHxH7HEHxH7u{H HxH7uWH0HxH7u3HH}KSHuH&GfDHfDHfDHxHp|SHhHXvHHQH8:H(HHufHHHHudfHHZH2H HxHugfHuWfHuG2fHu7 fHu'fHPHxH7HHxH7HHxH7HHxH7HHxH7H]dH3%(L!He[A\A]A^A_]HhHUHO҂L I$H@HP,HUH{,HHLHHPHHHHxH7BHHxH7QHHxH7H@HhHUH O҂L I$H@HP,HUH0{+H H0LH@HPH@HH@HxH7H0HxH7gH HxH7 H@HhHUHC{L8IL`(J+1HLAAHHxH7H|JHHP<HPIIGHIWHtHHIuHhHH@L8IH@HHHUH0 {*LPH@H0LHHLHLbHPHxH7/H0HxH71H@HxH7HrHhHUHO҂L I$H@HP)HUH{)HHLHHPHHHHxH7HHxH7XHHxH7yHlHH酿H鐿Hr雿HeHXHKH>H1RH$]HhH HHHH(H3H7HBHPHHH{%HnHaHTHGH:*H-5H HHHHHHHHH HFHQH\HwiHj9H]DHPHCH6H)>HIHTHHH HH!HHkHHHgHHsHfHYHLi{1[ HIHtHPH}Ht?H`HxH7t HuHpHxH7t HuHHxH7H{HEHxH7_HEHxH7HpHxH7|LHPHxH7t Hu[IHItH0HxH7tH"H HxH7IIIII IHPHxH7HIIHEHxH7t HPHEHxH7tH}HHxH7tHaHHxH7HAIIHEHxH7t HuHEHxH7tHHHxH7tHHHxH77&III6IJI IIIHEHxH7t HuyHEHxH7tH`H`HxH7tHDHpHxH7(IIIIHEHxH7t HuHEHxH7tHHHxH7tHHHxH7HITIwIIH HxH7dIH0HxH7tHDIEIVIjI IHEHxH7t HuHEHxH7tHHHxH7tHHHxH7=IIIIHPHxH7tHH`HxH7iIIHHxH7tHDHHxH7u\LIIHHxH7tHHHxH7tHHHxH7tHIbIvIHPHxH7t HuHEHxH7Hu|IIHEHxH7tHVHpHxH7tH:HHxH7eRIIIIHHxH7]LIHEHxH7tHHHxH7tHIIH@HxH7aIH0HxH7tHmIHPHxH7tHLLH? -IHHxH7IHHxH7tHIH@HxH7~HqIHHxH7;IH`HxH7HPIHEHxH7t HuoHEHxH7tHVHHxH7tH:HHxH7~IIH@HxH7tHHPHxH7IIHHxH7tHHpHxH7%IIHEHxH7t HuyHEHxH7tH`H`HxH7tHDHHxH7XH$KIIIII]IHEHxH7t HuHEHxH7tHHHxH7tHHHxH7IIIIHHxH7HuYIHHxH75IHHxH7tHIHHxH7tHIHHxH7HIIIIIH HxH7tHH0HxH7%IIHHxH7t HPFHEHxH7HP%IIHHxH7t HuHEHxH7t HuHEHxH7tHHHxH7tHHHxH7tHHHxH7tHtHHxH7XITIfIwII`IHHxH7LIHHxH7tHHHxH7tHHHxH7tHHHxH7tHHHxH7tH{HHxH7tH_LJIHHxH7tH8HHxH7tHHHxH7+HIIHpHxH7tHHPHxH7tHH`HxH7!H}HIIIH@HxH7]IH@HxH7t HuJʅHt$PD$D$fJqrRJqrJqrrJqr;HHD$PHxH7t Ht$dHD$0HxH7t Ht$HHD$@HxH7t Ht$,HD$ HxH7t Ht$H`HHH뱐AUATIUSHHT~HhH|$ HT$PdH%(HD$X1HHt$ H|$@L`H|$0LHL$@HT$0HH|$PAH{8Ht$PHHT$PHzH7ufHT$0HzH7HT$@HzH7HT$ HzH7H\$XdH3%(HHh[]A\A]DAHJʅxHt$HD$HD$_DAHJʅNHt$PHD$HD$5DAHJʅ$Ht$PHD$GHD$ DAHt>JʅHt$PHD$ HD$JqrRJqrJqrrJqr{HHD$PHxH7t Ht$HD$0HxH7t Ht$HD$@HxH7t Ht$lHD$ HxH7t Ht$PHHHH뱐AUATIUSHT~HhH|$ HT$PdH%(HD$X1HHt$ H|$@L`H|$0LHL$@HT$0HH|$PAH{8Ht$PHT$PHzH7uhHT$0HzH7HT$@HzH7HT$ HzH7H\$XdH3%(JHh[]A\A]AHJʅvHt$D$ D$ _AHJʅLHt$PD$ D$ 5AHJʅ"Ht$PD$ D$ AHt>JʅHt$PD$ LD$ JqrRJqrJqrrJqrHHD$PHxH7t Ht$HD$0HxH7t Ht$HD$@HxH7t Ht$HD$ HxH7t Ht$HHHH뱐AUATIUSHT~HhH|$ HT$PdH%(HD$X1HHt$ H|$@L`4H|$0L'HL$@HT$0HH|$PAH{8Ht$PHT$PHzH7uhHT$0HzH7HT$@HzH7HT$ HzH7H\$XdH3%(JHh[]A\A]AHJʅvHt$D$ HD$ _AHJʅLHt$PD$ D$ 5AHJʅ"Ht$PD$ D$ AHt>JʅHt$PD$ D$ JqrRJqrJqrrJqrHHD$PHxH7t Ht$$HD$0HxH7t Ht$HD$@HxH7t Ht$HD$ HxH7t Ht$H HHH뱐ATUISHT~H`H|$ HT$PD$ dH%(HD$X1XHHt$ H|$@HhrH|$0LeHL$@HT$0HH|$PH{8Ht$PD$ HD$PHxH7ucHD$0HxH7HD$@HxH7HD$ HxH7HD$XdH3%(UH`[]A\@AH*PЅ{Ht$D$ D$ `AHPЅQHt$PD$ FD$ 6AHPЅ'Ht$PD$ D$ AHtNPЅHt$PD$ D$ PJHJPJHPJHbPJH+HHD$PHxH7t Ht$THD$0HxH7t Ht$8HD$@HxH7t Ht$HD$ HxH7t Ht$HPHHH뱐ATUISHT~H`H|$ HT$PD$dH%(HD$X1HHt$ H|$@HhH|$0LHL$@HT$0HH|$PH{8D$Ht$P]HD$PHxH7ucHD$0HxH7HD$@HxH7HD$ HxH7HD$XdH3%(UH`[]A\@AH*PЅ{Ht$D$D$`AHPЅQHt$PD$vD$6AHPЅ'Ht$PD$6D$ AHtNPЅHt$PD$D$PJHJPJHPJHbPJH[HHD$PHxH7t Ht$HD$0HxH7t Ht$hHD$@HxH7t Ht$LHD$ HxH7t Ht$0HHHH뱐HGH{GHGHG0HG HG(HG8Ðfff.AWAVAUATUSHHHH<$H|$ dH%(HD$81HD$ HHxH$HXHHD$HLd$ Mt$'f.H=|yCHCHt@HLk LLM}LM9IFHuLL)H=~HC1Hu@H*LLugM)I~OHD$(HxH70HD$ HxH7GHD$8dH3%(HH[]A\A]A^A_I|DyHtH9\$KH|$ Hs LgL~LM9IFuM)1II|Dſ0>HHD$ HL$@HHD$ 7HF HD$(HD$(7HF(H$H@0H\$H$H;X GHLd$ Lh Mt$M}M9LIFAHt]PЅHt$qAHt#PЅHt$DPJH܋PJH뢽HHD$ HxH7t Ht$HOH|$ HUSHoHHHwH{H萘H{8HCHCHC0HC HC(HtHRHsHH[]SHH1[]@SHH[fffff.ATUHSH~HHHICH9tHp(H2H[]A\f.I$HEHI$7[]A\SHHHH9[SHHdH%(HD$1HGHxH7u/HHxH7uGHD$dH3%(H[DAHt^PЅHt$TfAHt&PЅHt$,f.PJHPJHf.@AWAVLwAUATUSHHoHL&MM|$@؅x?IHmHtfffff.H?*tHf.H9>*ufH{vWxCfSq{H HdH%(HD$1H0{HHwHD$dH3%(uH [H${DŽ$T&H$|HH$軻6|@:@:}L$T$H$t$Ea H$p&L$`&L9DfuCLԯH輭KpH${DL$#H$&'{HH1D$H8|HHDH#H$趺s(HS(zQH譺L9H|H${Dc 膱H$艻$|HH蔺DH詨H$<$|@:k e@:yIHH@IH}8H HE H@0H=@PHzL1H$HxH7 H$HxH7 HD$@HxH7 HD$0HxH7 H$葧H$脧H$'dH3 %(TH'[]A\A]A^A_1IIvH$HL`*H$H$p0|HݼH$H$pHH$ AH$pHxH7P H$HxH7 H$PH$h&DŽ$XHDŽ$`HDŽ$xHPHH$hH$ptUHYBH$`H@HHQHuH$hfHHPHuH$pH$&H$xH$ H$H$PH$H$H$HxH7< H$`H$P9H$ HxH7 H${DŽ$T&WH$Z|HMH$ L$T$H$t$EH$H$&LL9f.H${Dc ŭH$ȷ"`|HHӶDHH${"`|@:k 褶@:踤IHH@IHj}8uCL跪H蟨k @pynt3H`HHyf.HH@Ht;h ~H@HuHHyi;j `HC(HB(HC0HB0HC8HB8HC@HB@HCHHBHHCPHBPHCXHBXHC`HB`HChHBhHCpHBpHCxHBxHHf.pyVtH1L9HE$&$('@H$P{DŽ$TH$P|HݩH$P谴?|@:ܴ@:rL$T$H$t$EVH$H$HH9@H$`{Dk =H$`@1|HIKDL`H$`1|@:Dc D@:.IHH@MM, A|$8/At$CL)HH$p{芪H$p荴0|H蛳H$pNDc(f.x薠tHª`HxfHHRHtD;b ~HRHuH=xD;` HS(HP(HS0HP0HS8HP8HS@HP@HSHHPHHSPHPPHSXHPXHS`HP`HShHPhHSpHPpHSxHPxx薞tHqH9H $PHC(H$P@yH$XHC0H$`HC8H$hHC@H$pHCHH$xHCPH$HCXH$HC`H$HChH$HCpH$HCxH$HH$2_H谣HE H@0H=@PHH;H${cH$fP|HYH$,D$PHC(H$PxH$XHC0H$`HC8H$hHC@H$pHCHH$xHCPH$HCXH$HC`H$HChH$HCpH$HCxH$9DL萢I$ H@0H=@PLH$PD$)D$H$@{胝H$@&|HHOH$@|@:H諰H${H$轰x|H谤HH$y|@:芤HBH${豜H$TP|HGH}H$|@:!Hٯ8H$PqH$PxH$PH$PH$PH$PD$yD$sH$Pb2H$PP9H$P>@H$P,H$PH$PH$PH$PH$PHH$PH$PH$0{貤H$0赮|H訢H$0{|@:茢HDH$1yHh)4KH$ {=H$ @|H3H$ |@:HϭH$1@zH0H$PH$PMH$P%H$P|H$PjH$PXHKH$P9H$H4H$HxH7t H$H$HxH7t H$HD$@HxH7t Ht$/HD$0HxH7t Ht$/H$H$ޙHH$@H膫MHÿxD;H$ v+H$ HDŽ$ {xrH$H2H$ HxH7HH$vHŨHHDŽ${xH$pHѪHHHDŽ$zxŠ|HvH$ HHDŽ$ zx蜠 H$`Hr9H$PH]$HH6聤D$Y+HHHD$pHxH7t H$PHD$PHxH7t H$PHD$`HxH7H$PHHH$`HxH7nH$P\HTHHH$PHHxH7t H$PKH$0HxH7t H$P)H$@HxH7t H$PHHHwHA14HHHHHH$ HHxH7t H$PH$HxH7t H$PH$HxH7t H$PaHHHnH$0HNH$H9H$ H$誖HH$pHxH7t H$PH$HxH75貕H$H§H$H譧tHÿpykbHH$`H$P)GHH$HxH7tHIHHH$H7H$H"H H9H$H@HH$HxH7$H$PHH$HxH7HH$HxH7HH$HxH7|HH$HxH7[qHH$HxH7t H$PH$HxH7.HHH>HHUH$Hإ^H$v芣H$HDŽ${xH$v]H$HDŽ${xHH$HxH7H$P;H$HHDŽ$zx:H$HHDŽ$zx_@ATU |SHH@H/dH%(HD$81HT$H|$ HEL`ƨ1Ht$ HAHT$ HzH7c;)|@:ǤH]`H@H0;H}8uC@:H̖H|$ {HH|$ N)|H\H|$ H8Q|@:.H\`H@H0;H}8uC@:KH3H|$ {诚H|$ 赤Q|HãH|$ yHfD,|@:茣HU\`H@H0;H_}8uC@:詗H葕H|$ { H|$ ,|H!H|$ עH/HL$8dH3 %(H@[]A\DHHE H@0H=@P)Hf.H舔HE H@0H=@P,HfAHtnJʅHt$D$4D$gf.HHE H@0H=@PH ]DJqr薏H|$ H詡H!HHD$ HxH7tHt$rfff.AWAVAUATUSH(|HdH%(H$1H$P1H$f$D$L$DŽ$DŽ$T$DŽ$\$0HDŽ$f$ѤH$H$HHD$ $+H$HxH7$$H|$p(|DŽ$`DŽ$dDŽ$hHDŽ$p$$f$HT$N1f$nf$lH$`Ht$pHHD$(p*HD$pHxH7?$d$`$`$h$df$lgH$p|$83|$x|$0HT$(H$@HxH|$ H$@f$Nu$HH H$H$PDŽ$HDŽ$HDŽ$H$H$HDŽ$PzƄ$XH$H5m`DŽ$HDŽ$HDŽ$HPHH$H$tTH(H$H@HHQHuH$fHHPHuH$H`H$H$P$Xt H$PH$H$H$H$HDŽ$HDŽ$H$H$HtlH$H$H$H$H$HPH$HDŽ$H$H$H$HDŽ$H$H$1H$H$$pHH$H9HT$OH$E1A(|DŽ$DŽ$DŽ$fD$HDŽ$fD$ 轠H$H$HHD$0'H$HxH7l$$AD(+$f(fD$ $E1\$X|$\XD,H$DŽ$DŽ$DŽ$f$fD$HDŽ$D_$H$: H1ELm(L$1ېD$L}$ H$@ HA 9$PAM $$H$9L<D DOfH$1ADf(Hf(H@L\\LHH9YYXXuCD 9v \ YXXQf. f.zt &+D&+fTf.$$11DŽ$f$f$HDŽ$$=$dL$L@vH$H$E@;DI1AEIIfD D\ \D DHL9uCD 9v\ǃDIHW %+EHADHHt7XHPH9fT7%+fT/%+__f(uCD9fT%+_f(f.z f(HWDIAHDf(HHTXHPH9^^YYXXuCD 9v^YXXQf. YIt$HA9AX5 $+t$$AD$E1ADŽ$@DŽ$DDŽ$HfD$L9fD$NHDŽ$PH$HDŽ$|蹞fH*.#+H$HDŽ$h|艞H$H$ODI1AEII D\ \D DHL9uf.Hf(>D$踁D$H$Hd$L$ H$L$d$H H$v{DI1AEII D\ \D DHL9ut4fT I"+f. !"+< !+f(11 !+f(H$P賀PH$DDŽ$XDŽ$\H$PH$$`DŽ$d$hH$p9H$H9H$@H$PDŽ$(H$ H$ DŽ$,$0DŽ$4$8H$H$#H$= +H$@H$$b H$H$@1$@H$@4 H$P$H1vM~HA +HHTfHHfWfW@HH9u܍D?9sH 8 +fW$@E1f$H$DŽ$DŽ$DŽ$fD$HDŽ$M H$$@"1vaDFH$P1w+At+DHHD ^^YYD HH9uCD9s"H$P^+Y+DžWNfHGf(Hf(HTDX@HXHH9uD 9vXXfɉ+H*^ +fTf.FHfDfɉHBH*\čH^fH*XB9\^XwFd$D9v)ƒ\f(fH*^Xd$f$u v|f$Nu$Hv H$P|f$u$v H$o|f$u$v H$M|H$H$f$nu$hv H$p|f$u$v H${H$dH3%(D$ HĘ[]A\A]A^A_H$HDŽ$|~HA+HHTHHfWfW@HH9u܍D?9kNH$P!DFL+L+1ADHHD ^^YYD HH9uCD9D$f(d$Yd$bDF++1ADHHD ^^YYD HH9uh$H|HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHJf1f(f(AHPЅ"H$ ЎAHPЅH$蜎AHt`PЅH$l101f(ʼnL$<L$H|$葀L$<L$H|$PJH럋PJH+PJHO1JH$HDŽ${ؔH|$P%|诓H|$PH$HDŽ${覔H$HDŽ${荔H$HDŽ${t@HH$hH|$0^H$H$H|$(?H|$ 5H荄HH$@H|$PH辐7zH|$`%|ђH|$`'H$HHHDŽ$ @|軓H|$`Hf7HHD$pHxH7MH$Y;H$HDŽ${cH$HDŽ${JHH$HxH7H$ HH$HD$ HH$`HD$(H$@HHH$HDŽ${輒HH$HxH7@H$k.HH$HD$0w{1@=HH$H$H $XH$P߽HHf.f.fuwÐHuHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAUATAUSHHdH%(HD$197VSs H{fHD@fD fz1f@E1D@ECDD9fpfu AHC HC1+DcDkfCHD$dH3%('H[]A\A]A{@v@fDH*fH*Y.r+@{HH $?A뱐ftfut߹{9W@f+Dc3DH{sDHHuMH$HtDHCA1+oBv藐訍AWAVAUATUSHHHdH%(HD$1H9G D&f;F DvDnD~WtA6f,fjD;#fH{HE@fDD fDE1fAE1fD@ECED9f-fuv H{'rAH{ H{D#Dk1DsUfCHuH[oHD$dH3%(H[]A\A]A^A_f.fuA{@AfDEH*DfH*Y.+{HH $薍fDA@fE@@u fAvnf1fHHE1D#DsDkfD{HCEEEfUHEDEAHfDH*f@A!f($8|fFxGxFpGpFhGhF`G`FXGXFPGPFHGHF@G@F8G8F0G0F(G(F G FGFGFGDD;sH{DfD#DkH{UDAt*{1H!_@A+AAfAE1fEA]rrDHHduH<$Ht H{YfAWAVAUATUSHXH/dH%(HD$H1HH]H9t;E<-w<+HHCH9Dc11AL$Ѐ vTu(H|$0HD$0p{HD$8 |HD$@@=ÆHL$HdH3 %(UHX[]A\A]A^A_DE1H|$ A0H}lH|$ HAKp1ɄD$}H9$AA;fD19DA9HEAH9C4;AA9׉AEȃ00ADր DuA9vH|$ EEt[D$A"T$4fDHCHH9DcE11AAD$< D||$uQD1jfDH|$ EsEt1f.H|$ VEtAEfDDH11E11sDH|$ oIHH|$0LP H|$0LwM? ILPH|$0AH9D@IFA1EE1IlfC4A9DEDA0Eރ0D< wlEDt\1A9u[DA9wQuMEAAHH9EuD:H9t#AL9sAADA9vHH7u`H|$ EHE1AHH7*Ht$L$L$D$EHt$mH H7H|$0HD$0p{H]wHD$0HxH7t Ht$豫H|$ 7H/wf.DAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIl1$H$tHNH|$1hHD$`HxH7Ll$hE1&f.HSD$hAADH|$pLGgHHRD tHEAMgL;`H|$ t/|$/t(HD$ HHxHD$H7H|$ ,eH$HD$pfHDŽ$fHDŽ$fHDŽ$P5HzH7H$HDŽ$ApHV`H V`H$H@HLpHV`H V`H$H@HHuV`H vV`HD$pH@HLpHDŽ$DhHD$@HxH7VH$dH3%(4H[]A\A]A^A_HELhIdHELxIAHtSPЅHt$hoAHt3PЅLl$hLOoPJH묋PJH̿FYLHHD$ &WHD$ HPx[L|$ L:`IHHHhx L!`IH9u!HH9t8,u HH9uHl$ WHHhHt$hiAHOHHt$hgnH HdH|$ bHeH$HDŽ$P5HzH7H$HDŽ$AcnH|$pgeH$HDŽ$DKfHD$@HxH7t Ht$?菙HeH S`HHL$pHQH S`HLpHMD$D$H^L|@{1TAHOHtK%Ht$h7mHD$PHxH7t Ht$hH|$pU,BHJHH|$hHD$hx{sL|@{1@TH"Ht$h葘BHJ5iZHD$`HxH7trfAVAUATUISHHHpHMt$rAHT$mVHËEEC EC0EC8C(E C@E(CHE0CPE8CXE@C`EHChEPCpEXCxE`EhEpExHT$(  ) 08 *Hx@(H0P8X@`HHǃHHH`hǃxHǃHt`HHhHHpHHAHXHDž`HhHpHxHHDžxLHDUkID$(HHغ[]A\A]A^f.H1[]A\A]A^ÐL9E1B 9EAyDAUATIUSIHHdH%(H$1I0t$ wfLUt Ht$ LHIEH9^CLpE0CE(E8CE@C EHC(EPC0EXC8E`C@EhCHEpCPExCXC`ChCpCx ()08*HH@I9 H(P0X8`@hHLHxHDžHDžHHHXHtZLHH fDHHQHuHHHPHuHHpHL8Qt0H$dH3%(=H[]A\A]fDCD$ H$D$PCD$@D$XCD$HD$`C D$hC(D$pC0D$xC8$C@$CH$CP$CX$C`$Ch$Cp$Cx$$$$$$$$$$$$$$$ $$($0HXDŽ$HDŽ$$8HHDŽ$$H$@H$H$$P$I$X$JHD$@$` $h($p0$x8$@$t^HPOH$HfHHQHuH$ f.HHPHuH$HpH$Ht$@LH$H$[LM:BH$H|$@v_H|$@HD$@{x\H$H$LߓHXHWH|$@Hv^H|$@HD$@{x H|$v^H|$HD${xNHH|$@HD$@zxVHXHH|$HD$zxV^DAVAUIATULgSHHHH9fDHS LH)HdHI9vE1B 9C AƿHT$BJK C0H K(@0C8@8H(C@@@CH@HCP@PCX@XC`@`Ch@hCp@pCx@x(HT$ () 0)*088@*Hx@HHPPXX``hHǀHHHhǀxHǀHt`HHHHHHNHxHǃHHHHHǃLHD!_HE(H\I9HpH[]A\A]A^Af.H~HtHVXHHV`HHWtB@t/HVxHtVH HQHHHHPuf.HVHHtH HQHHVPHHPufD1@1fff.AHtG~fDGPW[fffff.H|vWxFfSHP|H HdH%(HD$1HHy\5|H[H?[H|$HHCH$HD$eXHL$dH3 %(HuH [HHHZHdR@ATUISHHdH%(H$1HYHGxHHHBHD$HHHD$t@HCHHiHHBH$HCPHHD$t@I<$HHL$E11HXH|$H$kWH|$aWH|QH[|H OHYHCXHD$0HC`HHD$8t@HCxHHHBHD$ HHHD$(t@I<$HHL$0Ht$ E11XH|$(VH|$8VH|bPHjZh |H]NH5Y{)HChH^HHBHD$PHCpHHD$Xt@HCXHD$@HC`HHD$Ht@I<$H_HL$PHt$@E11dWH|$H VH|$XVH|OHY |HMHXH$dH3%(H[]A\DHGxHNHHBH$HHH$t@HCHH*HHBH$HCPHH$t@I<$H`H$H$E11_VH$H$TH$TH|NHX|HLHnW{)HChHHHBH$HCpHH$t@HCHHHHBH$HCPHH$t@I<$H|H$H$E11{UH$TH$TH|MHW |HKD)HGhHHHBH$HCpHH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11HTH$=SH}4SH |LHV |HJHU0HGXHD$pHG`HHD$xt@HCHHXHHBHD$`HCPHHD$ht@I<$HHL$pHt$`E11SH|$hH$RH|$x}RH|+LH3V@|H&JHT{)tHChHHHBH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11SH$QH$QH|_KHgU |HZIxD1f1ff1yf1f1f1f1f1f1hf1zf19f1\OAHHdSHJH$HPH$PHJH$HwPH}nPHJH$HVPH$IPHqJH|$HH2PH|$X(PHPJH$HPH$PH+J72H|$HOH|$OHJH|$(HOH|$8OHIH|$hHOH|$xOHIATUISHHdH%(H$1HYHGxHHHBHD$HHHD$t@HCHHiHHBH$HCPHHD$t@I<$HHL$E11HMH|$H$NH|$NH|_HHgR`|HZFH2QHCXHD$0HC`HHD$8t@HCxHHHBHD$ HHHD$(t@I<$HHL$0Ht$ E11LH|$(NH|$8NH!|GHQ|HEHP{)HChH^HHBHD$PHCpHHD$Xt@HCXHD$@HC`HHD$Ht@I<$H_HL$PHt$@E114LH|$HZMH|$XPMH%|FHQ|HDHOH$dH3%(H[]A\DHGxHNHHBH$HHH$t@HCHH*HHBH$HCPHH$t@I<$H`H$H$E11/KH$H$JLH$=LH8|EHO`|HCHN{)HChHHHBH$HCpHH$t@HCHHHHBH$HCPHH$t@I<$H|H$H$E11KJH$nKH$aKH<|EHO|H CD)HGhHHHBH$HCpHH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11HjIH$JH}JHD|2DH:N|H-BHM0HGXHD$pHG`HHD$xt@HCHHXHHBHD$`HCPHHD$ht@I<$HHL$pHt$`E11HH|$hH$IH|$xIH+|{CHM|HvAHNL{)tHChHHHBH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11GH$IH$IH/|BHL|H@xD1f1ff1yf1f1f1f1f1f1hf1zf19f1>T8HHJH,BH$HGH$GHBH$HGH}GHAH$HGH$GHAH|$HHGH|$XxGHAH$H`GH$SGH{A72H|$H4GH|$*GHRAH|$(HGH|$8GH.AH|$hHFH|$xFHASHHHHLJp|dH%(HD$1FHFH{pFH{`FH{PzFHC8HxH7uIHC0HxH7uHHC HxH7uGH{HH7uFHD$dH3%(uBH[Ht$@Ht$@Ht$@Ht$o6fffff.SHH[H$>>H$x1>HCXH H$|H7H$A|H5HH10,|H5H$w@{)H$|Y7H$\A|HO5HsHHV_@H$@H$ |Hk7H$  A|H4HH(H$ ?H$0|Hk6H$0@|H4HH%/H$0x?H$@|q6H$@t@|Hg4Hs HHVw?H$@*?H$P|H6H$P@!|H4HH1H$P>H$`|k(5H$`?,|H3@H /H$`>H$p|k)5H$p?4|Hw3@H.H$p>>H$|75H$:?:|H-3Hs0HHV=>H$=HD$PHxH7HD$@HxH7HD$0HxH7^HD$ HxH7`H$dH3%(HĨ[]A\A]A^A_fHH$H*C@H$H$H$HKxHDŽ$HDŽ$HCxHHH$H$::H$-:x{L>HǃfDHsH$*$H$ >H|@:Hk1HHw1H/=H$|Hk)H$B=H|H51HH*1H$1;f<$H_l|@:H@HǀH:0HsHHV;}|H0$H5|H0Hn3HH$HxH7t H$$H$HxH7H$HH$H2OHoHHt$ L$|@e'Hq3@|H'H\3|H'HG3|Hz'H23H$`|HkG)H$`J3H|H='HH2'c|H%'H$`1"tAH708H(HHH$`H1++H |@e&Ho2`|H&HZ2|H&HE2|Hx&H02|Hc&H2|HN&H2I|H9&HHD$pHxH7HHD$`HxH7|HoHHH$HxH7vH$dHH$HxH7t H$H$HxH7t H$cH$HxH7:HHHH$0HxH7HH$HxH7t H$H$HxH7t H$H$ HxH7IHHHH$HxH7HH$HxH7^HH$HA/f.fHSH8HCH[f.@Sc{HHHT$dH%(HD$12HL$dH3 %(u HH[f.H~HtHVhHHVpHHWtB@t/HHtCH HQHHHHPuHVXHHV`HHWuf.1fff.AHtG~fDGPW.fffff.H"|vWxCfSH2@|H HdH%(HD$1H.5|H-Ho-H|$HHCH$HD$*HL$dH3 %(HuH [HH-H$@ATUISHHdH%(H$1HHGXHD$HG`HHD$t@HCHHHHBH$HCPHHD$t@I<$HHL$E11H+H|$)H|$)HH\HHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$HzHL$0Ht$ E11*H|$(H$p-)H|$8#)Hﺿ@|"H,|H H+HChHD$PHCpHHD$Xt@HHAHHBHD$@HHHD$Ht@I<$HHL$PHt$@E11)H|$H}(H|$Xs(H@|!"H),h |H H*{)HCxHMHHBHD$pHHHD$xt@HChHD$`HCpHHD$ht@I<$H HL$pHt$`E11 )H|$h'H|$x'H@|j!Hr+ |HeH=*DH$dH3%(HĐ[]A\DKHGXH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11*(H$&H$&HH@HHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11'H$H$p,&H$&H@|H)|HH({)^HCxHHHBH$0HHH$8t@HHrHHBH$ HHH$(t@I<$HH$0H$ E11&H$(G%H$8:%H@|H( |H_fD)vHGXH$PHG`HH$Xt@HCHHHHBH$@HCPHH$Ht@I<$HH$PH$@E11%H$Hx$H$Xk$HCxH^HHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$H0H$pH$`E11H<%H$h#H}#H@|H' |HHW&fH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HlH$H$E11{$H$#H$#HChH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11#H$H$p"H$"H@|4H<&@|H/H%{)HCxH0HHBH$HHH$t@HChH$HCpHH$t@I<$HH$H$E11!#H$!H$!H@|eHm% |H`11[f1f1f1Tf1f1f1Gf1f1f1 f1-_HHt#HH$hH H} HH$H H$| HH$H` H$S H{H$H; H$. HVH$HH H$X H1H|$hHH|$xHH$(HH$8HH|$HH|$HH|$(HH|$8HH$HjH$]HH$H@H$3H[WH|$HHH|$XH73fATUISHHdH%(H$1HHGXHD$HG`HHD$t@HCHH< HHBH$HCPHHD$t@I<$H HL$E11H0H|$H$pNH|$DH@|H!|HH HHHHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$HHL$0Ht$ E11H|$(H|$8H@|BHJ!|H=H HChHD$PHCpHHD$Xt@HHHHBHD$@HHHD$Ht@I<$H3HL$PHt$@E11H|$HH|$XH@|H |HHe{)HCxHHHBHD$pHHHD$xt@HChHD$`HCpHHD$ht@I<$H|HL$pHt$`E11H|$h7H|$x-H@|H|HHfDH$dH3%( HĐ[]A\DcHGXH$HG`HH$t@HCHHeHHBH$HCPHH$t@I<$HH$H$E11H$H$p5H$(H@|H|HHHHiHHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11JH$mH$`H@|H(|H H{)/HCxHHHBH$0HHH$8t@HCXH$ HC`HH$(t@I<$HH$0H$ E11{H$(H$8H@|?HGP|H:D)^HGXH$PHG`HH$Xt@HCHH8HHBH$@HCPHH$Ht@I<$HH$PH$@E11H$HH$pH$XH$@|iHq|HdH<HCxHHHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$HQH$`E1H1H$hH}H&@|Hx|HHH$HG`HH$t@HCHH.HHBH$HCPHH$t@I<$HH$H$E11#H$H$p>H$1H@|H|HHHChH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11iH$H$H @|-H5|H(H{)NHCxH)HHBH$HHH$t@HChH$HCpHH$t@I<$H H$H$E11H$H$H @|^Hf|HY @1f1f1f1Kf1f1f1f1f1f1f1B!_HHtHH$HH$HH|$(HH|$8~HH|$HHeH|$X[HH$HCH$6H^H$(HH$8H950H$hHH}H H$HHH$XH H$HH$H H|$hHnH|$xdH H$HLH$?Hg H$H'H$HB H|$HH|$H# fffff.SHHHHLJ`P)|dH%(HD$1HHH{pH{`H{P~HC8HxH7uMHC0HxH7uLHC HxH7uKH{HH7uJHD$dH3%(uFH[@Ht$@Ht$@Ht$@Ht$vofffff.SHH[fffff.AWAVAAUATEUSHH8HHHHGP)|HG7HG7HG7IMdH%(H$1.IEHCPHC`HCpHǃHǃHIED{@DsDHCHHCXHHChHCxHǃHt@H$H|$ |gH$H|$0{PH$H|$@|9HEH|$P |LLh(?>1Ht$PHAHHCHD$PHxH7HEH|$` |LLh(=1Ht$`HAHHCHD$`HxH7 HEHt$ H$LhH$|L=H$H$HH|$pALkHt$pLhHD$pHxH7H$HxH7H$HxH7H=Yy`ӂ/tH5Dy`L HEHt$0H$LhH$|{LH,HCH$HkHTH$@| H$|Hr|HeH$(HS0H$1ɾH$H$H$HKxHDŽ$HDŽ$HCxHHH$H$ H$HCxHHH$@|HRHH$|HHH,|HkH$>fH$fHHH*H,$fH*$$^f(wH$~@|D$H$P|HD$HH$HHfHH H*XR\H,HCHH1C\HH,H1[DH$ fDH$HfDH$%fDH$fDH$fDH${fDH$cfDH$fDH$fDH$fDH$fDH$fDH$HfDH$fDH$sfDHfHH H*XNf.HfHH H*XfHfHH H*X)'|vWx@&|vWxk@%|vWxRH$HH$0HD$@HxH7t Ht$tHD$0HxH7t Ht$XHD$ HxH7t Ht$C|H1HH,|HH$pHkHH fH*fH$\f*)|H*S^Y $H$|HHHr|H$HX|HkH$>|@:O$H"|H5HHH$pHHH$xt@HSH$pH$(H$H$H$HKhHDŽ$HDŽ$HChHCpHSpH$H$H$H$xHChH H$)|H>H$A|H4HH,|HH${)H$)|H$|HHsHHVH$H$ )|HkH$ |HuHHJH$ =H$0)|Hk2H$05|H(HHH$0H$@)|H$@|HHs HHVH$@H$P)|HH$P!|HHH_H$PRH$`)|k(GH$`J,|H=@HH$`H$p)|k)H$p4|H@H3H$pH$)|H$:|HHs0HHVH$hHD$@HxH7HD$0HxH7HD$ HxH7H$dH3%(-HĨ[]A\A]A^A_DfH$H*CH$H$H$HHDŽ$HDŽ$HHHH$H$H$@H$0N)|H$0WHs HHVg8+|H:H$0 HsH$芼H$mH|@:HkHHHH$)|HkH$H|HHHH$1[f4$H[_l|@:H@HǀH:MHsHHV]}|H0$H|HHHHHfH*$^f(J$fH*CY[p*Vp* $f.H,HYfH*\f.f(6H,HCH$ȺHkH\H$)|H$7|H*|HH$HS0H$1ɾH$H$H$HKxHDŽ$HDŽ$HCxHHH$H$H$HCxHHH$)|HRHMH$P|HCHH,|H+H$fH$SfHHH*H,$fH*$$^f(7H$})|D$H$P|HD$HbH$UHHfHH H*Xb\H,HCHH1C\HH,H1cDH$fDH$XfDH$5fDH$fDH$fDH$fDH$sLfDH$[MfDH$CNfDH$+fDH$fDH$fDH$fDH$fDH$XfDH$fDH$fDHfHH H*X^f.HfHH H*XfHfHH H*X)轼2|vWxD@1|vWx+@0|vWxH$H}H$HD$@HxH7t Ht$HD$0HxH7t Ht$hHD$ HxH7t Ht$LH`HTHHH{p?H{`6H{P-HC8HxH7t Ht$@HC0HxH7t Ht$@HC HxH7t Ht$@H{HH7t Ht$@HH$HYHHH$HxH7t H$WH$HxH7H$1HH$HxH7pHHH$HxH7t H$H$HxH7t H$H$HxH7 fHHHH$HxH7;HH$HxH7HHD$`HxH7HHD$PHxH7H$PHgH$@HRH$0H=H$ H(H$HH$0HsH$H^HH7 |@eXH`|HCH|H.H|HH|HH|HHI|HڿHH$`i)|HkH$`H|H蘿HH荿c|H耿H$`SitAH708HHHHHH$HxH7H$HH$ HxH7^H$pHDH$H/H$HHH$HxH7%H$H$pHLH$`H7HhH$HH$xHUHHD$pHxH7H$ HyHPH$`Hf.@HSH8H賰H[f.@S^{HHHT$dH%(HD$1IHL$dH3 %(u HH[ f.H~hHt&HHHHHWtBfDHHHHHWu@AHtG~fDGPWfffff.H@;|vWxfSH5|H HdH%(HD$1豴HY'`6|HgHHL$dH3 %(HHCHuH [ҴHHH_fffff.ATUISHHpdH%(HD$h1HhHHD$HHHD$t@HH$HHHD$t@I<$HHL$E11HH|$Hl$PH|$~Hﺗ5|,H4!6|HBH{pHHHHBHD$0HHHD$8t@HHD$ HHHD$(t@I<$H=HL$0Ht$ E11H|$(H|$8Hﺚ5|gHo |H}H5HD$hdH3%(Hp[]A\ptHHHHBHD$PHHHD$Xt@HHD$@HHHD$Ht@I<$Ht[Hl$PHt$@E11H8H|$HH}Hﺟ5|胻H%6|H11N1`H|$(HwH|$8mH蕻HH H肻H|$HHCH}:HbH|$H#H|$HAUSHHHxdH%(HD$h1Hh)HHD$HHHD$t@HH$HHHD$t@H}HeHL$E11HYH|$H|$u{pHH3HHBHD$0HHHD$8t@HHD$ HHHD$(t@H}HHL$0Ht$ E11ȾH|$(H|$8HD$hdH3%(Hx[]fptHHt~HHBHD$PHHHD$Xt@HHD$@HHHD$Ht@H}Ht-HL$PHt$@E11H|$HEH|$X;R1@1謯H|$HH|$H-H|$(HH|$8HH|$HHѾH|$XǾHfffff.SHHHHLJHC|dH%(HD$1聾HuHiH]HCxHxH7uLHCXHxH7uKHCHxH7uJH{HH7uIHD$dH3%(uEH[Ht$@Ht$@Ht$@Ht$Offfff.SHH[龴fffff.AWAVAAUATMUSHHHHHHGC|EdH%(H$1I&IEHǃHǃHǃHC7D{,HIEDs0HCX7HCx7HǃHHǃHǃHt@H$pH|$ T~^H$pH|$05|GH$pH|$@N{0HEH|$` |LLh(61Ht$`HAHHChHD$`HxH7m HEH|$p|LLh1Ht$pHAՈCpHD$pHxH7E HEHt$0H$LhæH$|LH$H$HH$AH{xH$_H$HxH76 H$HxH7 H$HxH7 H$pH|$P'5|HEH$15|LLhH$HAՈCH$HxH7 HEH$>5|LLh@tI*H$HAH$C8HxH7p HEH$D5|LLh@S#*H$HAH$C@HxH77 HEH$J5|LLh@*H$HAH$CPHxH7 HEH$S5|LLh@*H$HAH$CHHxH7 HEH$ |LLh@`8*H$HAH$C HxH7<HEHt$@H$0Lh"H$ |{LH$0H$ HH$ALkXH$L軱H$HxH7H$ HxH7H$0HxH7HEHt$PH$`LpvH$P\5|LQH$`H$PHH$@ALsH$@LH$@HxH7vH$PHxH7uH$`HxH7tHEH$pe5|LLx(H$pHAfCH$pHxH7?HEH$k5|LLxj1H$HA׈C(H$HxH76{LAHC`HkhH{pHD$PHxH7HD$@HxH7HD$0HxH7pHD$ HxH7rH$dH3%(R HĘ[]A\A]A^A_fN{L胻HC`t5|@:kPHsHHV`ÄH3H9HH$T5|kH$t5|HHsHHVÄHϭHիH$蘸K(SH$L@ H$H$H$xHHDŽ$HDŽ$HHHH$pH$xoH$b,s HHH,s8HHH4{5|@:ˬH胸H$h5|蜮H$蟸5|H蒬H$eHH1EfDH$P5|9H$P<5|H/HsxHHV?H$PH$`HSxHs`1H蘴H$`H$hH$xHHDŽ$hHDŽ$`HHHH$pH$xdzH}辳HH?HH$p5|HRHHH$pK|H>HH賥,|H&H$p @H$ 5|H$ It|HߪHHT5|HǪH$ 蚵HH$`HHH$ht@H$`HShHs`H$0H#H$0H$8H$xHHDŽ$8HDŽ$0HHHH$pH$xBH$85H},HHH$@5|H辫H$@|H贩HH),|H蜩H$@ovf.H$|5|贡H$WHsXHHVgP7|H:H$ H$p#fDH$p fDH$pfDH$pfDH$pfDH$pfDH$pxfDH$p{yfDH$pczfDH$pKfDH$p3fDH$pEfDH$p~fDH$pfDH$pfDH$p)fDH$pfDH$pfDH$ps!fDH$p[~fDH$pC|fDH$p+"fDH$p fD5|@:H衲H$n5|躨H$轲5|H谦H$胱HHO1K@5|@:L$rD$HDHS@H$r5|T$*H$-5|H D$HH$,s@HH[H5|@:\$ѥD$H裪H{cHH$v5|d$艧H$茱5|HD$HQH$D,sHHHt~(<|vWx膚=|vWxmH$HݯHD$PHxH7t H$HD$@HxH7t Ht$HD$0HxH7t Ht$HD$ HxH7t Ht$H讬H袬H薬H芬HCxHxH7t Ht$POHCXHxH7t Ht$P4HCHxH7t Ht$PH{HH7t Ht$PHFH$H趮H$HI螮HLHHvHH1H$AHHkH$Y5|贲H$W5|HJH$HHVVH$lHH$HxH7t H$p HHH$H趭H$H衭HH$pHxH7H$pH$PH^|HH$PHxH7t H$pdH$`HxH7>HH$HxH7 xHH$ HxH7t H$pH$0HxH75HHH$HxH7tH$pH$@HyH8H}IL譩{HH$HxH7_H$pH'EH$ H0HH$@HxH7H$pH$HϫHH$HxH7)HH$HxH7t H$pH$HxH7t H$pH$HxH7H$plyHHHD$pHxH7[HH$HxH7vHH$HxH7UHH$HxH74HBHH$HxH7 H!HHD$`HxH7HHHf.HG`f.SHHSH[f.@Sv{HHHT$dH%(HD$1HL$dH3 %(u HH[諗f.1f.ATUISH_HHtHLHHta[]A\H趓HH{x@H@H@0H@H}HC87C@HC HC(H돹@<|a6|4|蓓HF1rf.DAWAVIAUATIUSHHdH%(H$1HM҉ErMAA ILPHHHD$1HH9H\$@H諝EH}HE1҃} wHtIH0H7D} At4Ht$HD$(6DHKaH4|HHuHHҜHt$HD$ ۧHEH@H@1H|$ 4|8*L<HT$oHt$ HHV螧LHsHt$HD$ |HD$ HxH7EttEto4|H/Ht$H"Ht$HD$ +5|LLh@`$*H$HAH$C(HxH7 HEH$D5|LLh@?[*H$HAH$C0HxH7s HEH$J5|LLh@Z*H$HAH$C@HxH7: HEH$S5|LLh@mZ*H$HAH$C8HxH7 HEH$ |LLh@L$Z*H$HAH$CHxH7 HEHt$0H$LhH$|{LH$H$HH$ALkHH$L觌H$HxH7 H$HxH7 H$HxH7 HEH$0I|LLpHDŽ$07CH$0H$0HH$ AHH$ HH$ HxH7 H$0HxH7 H$0HxH7 {LƗHCPHkXH{`:HD$0HxH71 HD$ HxH7 HD$HxH7 H$dH3%(c H[]A\A]A^A_@N{L# HHCPHxH$`H豃H$`H$hH$8HKpHDŽ$hHDŽ$`HCpHCxHSxH$0H$8輑H$h译H{pH HCPH{pH HP H$@3I|$0)iH$0H$@JHƿ@:w(HϔH$@b"H{pH HP H$3I|$0hH$0H$JH$_E|H蕊H$蘔HH'H$`H$!H{pH H1C(P0H{pHt H1P8H$OI|$0hH$0H$IHƿ@:g'H迓H$R!H{pH H1P8H$OI|$0gH$0H$}IH$dE|H胉H$膓HH&H$NH$ H{pH|H1P8\C(H$H|$0gH$0H$HHƿ@:j&H$] H{pHH1P8\C(H$PH|$0fH$0H$PHH$hE|H艈H$茒HH%H$TH$P{H{pHxH11PhH{pHaH1C0PxH{pHGH1C@H{pH*H1C8H{pH H1H$ jI|$0eH$0H$ zGHƿ@:$HUH$ H{pHH1H$jI|$0EeH$0H$GH$xE|HH$HHn$H$H$THkXHNH$E|蹆H$輐It|H评HH$5|H藄H$jHH$ HHH$(t@H$ HSXHsPH$HH$H$H$8HHDŽ$HDŽ$HHHH$0H$8H$H}HHH$E|H莅H$葏|H脃HH},|HlH$?{`H$E|.H$15|H$HshHHV4H$H$ ߍHShHsP1H荋H$ H$(H$8HHDŽ$(HDŽ$ HHHH$0H$8輊H}賊HHHH$0E|HRH=H$0@|H3HH|,|HH$0zfI|@:HHHVH薍H$PSE|诃H$P貍I|H襁HHHV貌H$PeHH1ҾPh5|@:[HH$oE|,H$/5|H"H$jH$0fDH$0fDH$0fDH$0k fDH$0SBfDH$0;{fDH$0#fDH$0 fDH$0&fDH$0VfDH$0~fDH$ fDH$ fDH$ {fDH$0cfDH$0KfDH$03fDH$0fDH$0fDH$0fDH$}E|dwH$HsHHHVP7|H~H$轉*诓wQ|vWxtP|vWxsH$HlHD$0HxH7t Ht$ HD$ HxH7t Ht$HD$HxH7t Ht$H\HPHDHHxH7t Ht$0H{xHChHxH7t Ht$0HCHHxH7t Ht$0gH{HH7t Ht$0LHH$HdH$H$PHI?HLHHpHH1ZH$@AHH H$pYE|UH$p5|H|H$@HHVH$p蚅H6HH$@HxH7t H$0K趁HHHH$0HxH7t H$ H$0HxH7H$ HHHD$PHxH7H$0xHHD$@HxH7_HHD$`HxH7t H$0wHD$pHxH7t H$0XH$HxH7tH$HZH$HEH$HH$ HH$H H$HH$gvH$HRaHaHH$HxH7=H$H#HH$PHH$HxH7cHH$HxH7BH$H(H$HH$0HHHH_HH$HxH7_HH$HxH7>H$H蕄$H}ILсH$@HHkH#H7HH$HxH7t H$0H$HxH7t H$0H$HxH7HH$ HxH7mH$ [HHHH$HxH7*f.8D|f.hD|f.D|f.D|f.HGPf.f.ff.@f.@HGf.HdH%(HD$1HG(HH;G@t`LGMtWLOLL)HI0I9H;W@w~HcIЃLGtvHtqI)McLHG(btSHO HH)HH0H9w,H;W@w&HcHHG(!ftLGMWfDHH1HL$dH3 %(ujHHG@t;H1HW@HO H)HpDHW@LOL)HDuLO]of.HWHtFH;Wr-GLt&HO(HtH9Hw@sH9vHO@HHwfDH9røf.HWHtH;WvGLu9t@8rt,@fDHBHGt @r@1DHBHGfDSHHhH[f.@S{HHHT$dH%(HD$1iHL$dH3 %(u HH[+nf.HLG(dH%(HD$1HMt L;G@HtGLOMt>HxaLWHW@L)H9QM)DHcL΃HwtCMt>L)HcLHw(/MtHxHWHO@H)H9~>fDH1HL$dH3 %(uJHf.LG@QL)HcI4Hw(뽹[|@E|˂imsf.Hi|$g@SHHi|gH[gsHi|f@SHHi|fH[7sHi|f@SHHi|fH[sHi|f@SHHi|fH[rHvIHb|t 1>*tb|Dt fI@f.AWAV1AUATAUSH@HG(HHLg0L97GLL}M)LHH=HFHHL9HuLE1LLLe}HoLHU LL)HE@HE(HuEHHMH]0H)L)LmLHHELHU HE(3H)HPHcIHULmIS@HLE1Mi}HLELEHLm@Lm(Lm H]0LmuUHELmI9EuHE(DH[]A\A]A^A_D@0HG(H[]A\A]A^A_IELmHEfJ HfIS@LpUGLtSLE1HEAHPhDff.LpLmHEI&1DUSHHHkHH@@PzxHj|HEH} HC0zxHCHEHH{ HCtHH@H=lNuCG@HE( Rg|HHo|HCPo|HC@o|HC(HE0HC0E8C8$rHHHi|NcHxHrfffff.LIz$@USHHHkHH@@PzxHpj|HEH} HC0zxHCHEHH{ HCtHH@H=lNuCG@HE( R`f|HHm|HCn|HC@Hn|HC(HE0HC0E8C8DqHHHi|nbHxHqfffff.LIz$@USHHH=jHH@@PzxH0j|HEH} HC0zxHCHEHH{ HCtHH@H=lNuCG@HE( Rd|HHl|HCl|HC@m|HC(HE0HC0E8C8dpHHHi|aH&wHpfffff.LIz$@SHHvHCDH{[qLIzSHHcvH{HCDqH[imfLIzH9Ht$HL$AHwHAH9HctDHHH9uL$AHH!?AtH9t+LHEtH ?AuH0H9uf.uDL$Hֿ1HH!@tH9t%HHEtH @uHfA9uEL$HDL$fHH!?At!H9tHHEtH A9uH0fATUISHHoHdH%(HD$1H9u4cHCHxH7uwHCHxH7uHXH9t-{8tH{@w@Ht$HXH9uDI,$HtHwkHD$dH3%(uH[]A\fDHt$zd@SHHn|HG0zxH {Hi|H[^@HSHHPm|HG0zxH {Hi|H[t^@HSHHl|HG0zxH d{Hi|H[4^@HSHHG@Hn|HPm|HG0zxH {Hi|H[]fff.Hf.LIzSHHG@m|Hl|HG0zxH zHi|H[]fff.Hf.LIzSHHG@o|Hn|HG0zxH \zHi|H[,]fff.Hf.LIzSHHn|HG0zxH zHHi|\H[,ifff.Hf.SHHl|HG0zxH yHHi|\H[hfff.Hf.SHHPm|HG0zxH dyHHi|5\H[hfff.Hf.SHHG@Hn|HPm|HG0zxH yHHi|[H[4h@Hf.LIzSHHG@o|Hn|HG0zxH xHHi|}[H[g@Hf.LIzSHHG@m|Hl|HG0zxH LxHHi|[H[tg@Hf.LIzSHHdH%(HD$18uBHCHxH7uQH{HH7u0HD$dH3%(uHH9t|DLI0CDQtnAVAUEATUISHXHIfDEG49EAtJHUFH9HHHPHEHt IT$0HDJu[]A\A]A^fDAI$AHH@HQuEtG49I}1LA֐AWAVIAUATIUSHH8HMeLD$DL$HL)LI9HT$+y8HE<$D:,LD$SiHA89Hs0HD~I6H9t[D8B;9L L$ՈI|fM,fIEHIEI6H9uL)|$Ht$HT$H8[]A\A]A^A_ÐMPf.M,f.MPf.MPf.M, wM,d@HHJ@HQtB;9f{8IED8FCcA8!IEI6H9HS0DJtHULHL!IEI6H9{8D8D:{gD$ @{8D8D:mIED8DD8tD8A8ufUSHHHXdH%(HD$H1GHUHHEHt$H{HD$ HD$(HD$0HT$HD$D$8H$n|HD$n|HSHCHC HC(HC0C8Ho|HCPo|HC@o|zHp Rg|HMHHSHKHTHNf.AUATIUSHHHdH%(HD$1HHtHFHCHtHEDcEupCsHEYCu HEY{ QH~HS(HHJHVHD$dH3%(ueH[]A\A]@tD{HHt78u DƅDIMLzCxDAWAVAUATEUSH1HH(Ht$1HL$DL$Dd$`D|$h'FHL$H9HEHHAH)HAH)HD$\ZHD$EII?IIL)HtAHH=EHMucH([]A\A]A^A_@EHAAHYEuUHtHt$H(HH[]A\A]A^A_JfD$ uE1sH(AL[H]A\A]A^A_S=AԾH?=Hc@Ht$HH0JCAԾH=!fSHHdH%(HD$1HG(H;G tHu9HCH;CtHtH11HP(HD$dH3%(uH[fH11P(Af.UHAWAVAUATISIHMHHhdH%(HE1HHxS HDžDHDžpƅxƅyHDžHDžHDžHDžLHDž^=Hp|@@ LhHHHHDžo|HDžp|Hx!BHCHLHDžXp|HDžp|HHHXDHHhAHHH1!ˆ`1B`HH~ HDžAH-LCPMu IU(LE11H[HH)H)H9HGy`Hx`HHEHhDHVAWLY^L^HHxNHHDžDHxJHEdH3%(He[A\A]A^A_]ÐL9t{HE>H8t!D:d D8fuaCPIU(IM +FA8tHE>H8u-A8tHH18DY1ECP@IU(IM HH8FGYxƅyAH_JIE(Me HL)CPH@L9tEA$HH`8$`:GdGf8`ƅ`H@HhLJLHHxP HDžDHEEEHEHEHEHELHDž9Hp|@@ LhHHHHDžo|HDžp|Hxm>HHXLHDžXp|HDžp|Hp`HDžAHHMe IE(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E<xHh~?HhHF:<0H;PHhLHC`HHLHL+PMC}EHhLb6LPHhI4LH)UCML9HHhHHHH;pHHxJHHDžDHxEf.H@H9Hƅ`&HHH;CHHhHLG7DH~Hƅ~ M@HhLaGB@CPHHƅ LMe IE(ƅ`LHH;X@f. fH}H8tqGYEEI 3D9HB+8`A$HH`tY8- ҨH`o9@S|G|H|5:99H HH3CFHHxHHHDžDHxCHHBH HH@EHHx>HHHDžDHxcCHKBH H2EH[H /9*9D99@S|G|G|4@S|G|0G|4AWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_67H|$HD$j|HD$HT$ 9HH|$HD$i|31H@f.SHHLHLKHC(s0SDL)ȍJH4ƋC KDH9t<{H9~5HcIHIKtHNA9uSDHH[fDHMЃHIHMuΉCDHH[fHt$&Ht$Nf.fAWAVIAUATIUSHXHHt$ HT$(DD$HLOHWL] OLH)I)HfDHt$L3&fDImH.袋.HI+MHHH\$LHHIH)IMH.袋.HI+EHHI)KIDHIEHD$8dH3%(nHH[]A\A]A^A_HT$ImHHBHH9Iu0aID$HxH7u^ID$HxH7u$IXI9t3A|$8tI|$@a?Ht$ IX蚛I9uDI]MHt$ v@11HHD$ HD$(HD$0udHt$HLH|$ H|$(H\$0HT$ IMH|$ HD$0IUIUIEHL$ HT$(IUIEHT$0DH袋.H9w&HT$HHBHH0(Hl+>&HH|$ Ht<2HD5@AUATIUSHIHHdH%(HD$1H9HtqEHuH{%HuH{%HEHCHE HC E(C(E,C,E0C0E4C8}8C4tHu@H{@6C8HEHHCHEPCPHXHXI9yHL$dH3 %(Hu H[]A\A]&*HHCHxH7t Ht$薙HH$I9tLIXI9u7H6H4AWAVAUATIUSHdH%(HD$x1H?HGHWIH.袋.IHH)HHI9<HH袋.HH)HHH)I9L9LHCHr H9HHH袋.H)HHH.袋.HHHL$H$%H$IILLHH$I}LHKIuHITL4LMeI]II9tHHXtI9uMeMtL/HDM}MuHDEIIEHD$xdH3%(HĈ[]A\A]A^A_fDAIvH|$(D$ #HD$ IvHx#IFA~8D$XHD$8IF HD$@AF(D$HAF,D$LAF0D$PAF4D$TIFHImHD$hAFPII)LHD$pH.袋.HI9KIM$DJI)H$I9MI@MAA$IVIT$IVIF7IT$IVIF7IT$IV IT$ AV(AT$(AV,AT$,AV0AT$0AV4AD$8A~8AT$4tIv@I|$@D3AD$8IVHIT$HAVPAT$PIXIXL9SIEH$LH)HHIEH.袋.MHI)HA@A8H}@9E8IGHM9HEHAGPEPIXAHXIwH}E.IwH}.IG}8HEIG HE AG(E(AG,E,AG0E0AG4E4iA8tIw@H}@52E8l@Iv@H|$`2D$XIw@H}@#,>fDL$$HD$ Hk@Ll$(LpLx@IL9uJ|$XH8EfHD$hHED$pEHEXHI9HŋD$ H}LE2H}L2HD$8}HEHD$@HED$HED$LED$PED$TEd|$XyLH1EeDLH%+PMMufH|$ fI)HT$ HL}KH9IDIELH|$PD!Ts|HR H|$P HHH)H‹H)H9HڸHHHhC9Ep4HHHH)HH9<H<HHH)HH)H9H߸HHHtHPHXH)HH9HHHHHH0HFHD$PHAHHD$Xt@HEHbHHAHD$@HE HHD$Ht@I<$HHL$PHt$@E1LLC9EpfHD$hdH3%(Hx[]A\A]A^A_DHPHXH)HH9LHHH HQH@HT$0HHD$8t@H8H@H)HH9IIHD$ IGHHD$(t@I<$HL|$0Ht$ E11LH|$(IfD1f1f1Ef1SHH޿{1HH޿q|1H޿{1L|$0HI`HH|$PHHsH|$HH6H|$X,HTH|$(H11f H|$HH|$HATUHSHpHHLJЍ|dH%(HD$1LXHPI9tH{HI9uLPMtLL@H8I9t H{HKI9uL8MtLRL(H I9u<DHI9t'HHxH7tHt$HI9u@L MtLHHtHHtHHtHHtHHtHHxH7urHHxH7ujHExHxH7ueHE`HxH7u`H}(<H} #H}HH7uIHD$dH3%(uEH[]A\Ht$Ht$Ht$Ht$Ht$HSHH[fffff.UHAWAVAUATASHHIEMHhHGЍ|HHdH%(HE1#H0HD{DsHCT~HC HH@T~HC(HH@HHxZ<H@HxH7%HHxH7%IEHC`7HCx7Hǃ7Hǃ7HǃHhIEHǃHǃHǃHǃHHǃHǃHǃHǃHǃHǃHǃHǃǃHǃǃHǃHǃ Hǃ(Hǃ0Hǃ8Hǃ@HǃHHǃPHǃXHǃ`Hpt@HpHT~HpH5|HpH^H0HT~HH@&HHxH79#LHHILh}Hs|LYBHHLHALk`HL HHxH7"HHxH7"HHxH7"HLtNH0H s|H H@4LH:H HxH7r!HHHPHLhqH@s|LMAHPH@HH0AHH0HH H0HxH7!H@HxH7!HPHxH7!HH0Hs|HLhHps|L@HHpHH`AHH`HHC H`HxH7]!HpHxH7V!HHxH7O!HHs|LHLh(?HHAՉCpHHxH7 !HH |LHLh@?f!*HHAHChHxH7HHHHLhOH|{L+?HHHHAL{xHL HHxH77HHxH70HHxH7)CpDž0 L HpHxH7HHxH7HH0HHLh?H|L>HHH31HHAH:HHxH7HHxH7HHxH7HHHHLhH0HsH|LO=HHH%3HHHHAHL=HHxH7HHxH7HHxH7wHHxH7GHHxH7HH0H0HLh@~H >5|LZ5|LHLh@5Ɩ)H0HAHHpp7H0HxH7%HH@D5|LHLh@5`*H@HAHHpp7H@HxH7=%)HHPs|LYChHLh@5HPHAHHpp6HPHxH7t Hp{L H0HHǃT~Y HHs|A HHHp+HxHp4-Hp(+HHxH7HHxH7{pE1LcH/OHtL0HHCPLDH9CpI~"HCPH;CXLpuHpL5HxH@H`H`HKHhHDž`HDžhHCHC HS HpHxHpHx]H`HxMH{H9H1HPH{HH1HH{HHChP(H{HHP0Hhr|pHpH[Hƿ@:ޛH6HʕH{HHP0Hhr|p.HpHHpq|IHpHL[HpHCspHDžHDžHDž  E1@s|@:D@: s|HIL2HHH)HI9@ LkJ BIM_IEHpLp@LHpLHPAHpHx(K'H{HHLPHHPr|pHpHP艼Hƿ@: HdHPH{HHLPHH r|pYHpH &Hq|I-H1HL膙HH nH{H*HLPHHHH)HI9!B\8HH|pHpHxHƿ@:HSHH{HHLPHHHH)HI9WB\8HH|p$HpHHq|IHHLQHH9H{HHHHHXHH)HI9\B8LH{HHLPhHr|p]HpH*Hƿ@:譗HH虑H{HUHLPhH`r|pHpH`ǹHq|IHHL'HH`HHH)HI9H0N,> s|l|' H0L<LHHX`tL)ƒH ыPtH9tWx9~MHcпIHIKL H(L)HH9 Hq|MHLL8L LPIIHHxH7tHp6IIHHxH7tsIHHxH7t HpHHxH7t HpHHxH71jIIHI^LL8HHL zHѹv|vWxH{1L8LPH{1kHILL8LPbH{1/HHο{1HIL8LPnLaH{H11FHI}H0HxH7t H0GHHxH7t H0'HxHxH7t H0HpHxH7H0IoIIH HxH7Źw|vWxH{1L8IHpLPHxLH{1HILPLHq|1ob]XSNBL{1.H0IL8LP|L%toIHL8HxLHC>9HpI*H{IIHHpIHHxH7t HpHHxH7]II0+IL L8LPIL L8LPCIL L8LPFIH HxH7 IHHxH7t Hp%ML8L LPIL L8LPIH0HxH7t HpH@HxH7t HpHPHxH7IIHHxH7t HphHHxH7t HpHHHxH7IIIHHx)IHpHxH7t HpHHxH7uRLL8LP3IIHHxH7t HpHHxH7tHpoIIH`HxH7GHp<6IHHxH7t HpHHxH7t HpHHxH7t HpHHxH7t HpHHxH7I{IIIIHHxH7HpOIpIIHpHxH7t HpHHxH7t HpHHxH7PII*IH@HxH7t Hp虿HPHxH7t HpyH`HxH7IIIHHxH7t Hp*H HxH7t Hp H0HxH7%rIIL{14HIH`L8LPuLHIL8LPuLID?:5I+L{1HI HL8LPsuLIL{1]HIL8LP&uLJL{1HIqH L8LPtLIHHxH7IHHxH7tHp7HIL{1uIHpL8LPHx(*L^IHHxH7Hp趼I IH@HxH7tHp聼JEHPIL8LPsLI IHPHxH7L}HpIH@HxH7cGHpͻIH0HxH7-Hp藻jHp膻AHpuIHHxH7t HpMHHxH7t Hp-H HxH7HIL IL ZHpIHHxH7G$Hp豺vIHHxH7JHp{2HIWHHxH7t HpGHHxH7IIHpH0IHHxH7t Hp۹HHxH7C|IIHPIL8LPbLL HSHHcH[f.@S{HHHT$dH%(HD$1HL$dH3 %(u HH[f.AVAUIATUISH HdH%(HD$1H9tVL&Il$ @HI9t@H{H;ouHL+uHCHL$dH3 %(~H []A\A]A^fHLu HD$7rH$HHH@LH$7HPHT$HD$7HPvH>IEHnHH!HIfATUISHHoHdH%(HD$1H9u;HH9t'HHxH7tHt$H虷H9u@I,$HtHHD$dH3%(u H[]A\AVAUATUSLgH/I9tgIA HI9tOH]HtDCuHHPDC uHHHPHkNu1HPI9u@M&Mt[L]A\A]A^[]A\A]A^AVAUATUSLgH/I9tgIA HI9tOH]HtDCuHHPDC uHHHPHkNu1HPI9u@M&Mt[L]A\A]A^p[]A\A]A^SLHHHHIHHHrI;pvH;rv!HHHH7H[L1HfATUISHHdH%(HD$1H9u&kHCHxH7u7HHL9tGHCH+HxH7tHt$YHt$FHH{L9ufDHD$dH3%(u H[]A\fSHHH dH%(HD$1Ht*H{!HCHxH7u0H;HH7u@HD$dH3%(utI IA1HE0밃?LEuIM!:IT$AL$H)LL+D$M~sA#HH!?StRӃ?Pt@ItHLMHIMtH HH|$LI<$M :H0I0HIt$AD$tH\$HD$AD$HI$ID$ Ir1$LAls|0H9HHFH?HHHD$HWH;W tFO?At#GH@u HH!@H @HBGHGHG@H։D$HT$Hf.DAUATUSHHLEH?LH)HHHHH9HHHt$5LEH}IHt$Ml$LH)LHtHL9t2HL@HH2tH1HHI9uHGI)IOl HtLLeLmH]H[]A\A]@dHH9JHHDAE1^HGH;GtHHtHHHGff.AWAVIAUATUSH(LoLdH%(HD$1LL)HHHHT-H9HHHt$MnMIHt$MgLL)Lt HHH7M9LLfDHt H2H1H7HHL9uIXLH)HNd8@L9It0HIHzH7tHt$2L9Iuf.I>HtSLM>MfHD$dH3%(Inu$H([]A\A]A^A_fDL|HH9HHAE1f.@HGH;GtHt HHH7HHG3AUATUSHHLEH?LH)HHHHH9HHHt$%LEH}IHt$Ml$LH)LtL9t2HLfHtHHI9uHGI)IOl HtLLeLmH]H[]A\A]fdHH9JHHDAE1^HGH;GtHtHHGf.AUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LHtHL9t2HL@HH2tH1HHI9uHGI)IOl HtLLeLmH]H[]A\A]@dHH9JHHDAE1^AVAUII)ATILIUHMSIHL~@HkLHtMHkLHt:HkLHt'H It-LHuH[]A\A]A^f[H]A\A]A^@LH)HHt+HtHt2[L]A\A]A^LH=tHLH*tHLHu냐AWAVAUATUSHHH]H?HH)IIM K$I9ILHt$ѺH]H}IHt$MuHH)Lt%HH@HHVHFHPHH9tqHLfHt%HHAHHBHBHAHHHH9uLHL)HMt @IH3I9LuH}Ht=MLmLuLeH[]A\A]A^A_AHH9IHAE1f.DAWAVAUATUSHHH]H?HH)IIM K$I9ILHt$QH]H}IHt$MuHH)Lt%HH@HHVHFHPHH9tqHLfHt%HHAHHBHBHAHHHH9uLHL)HMt @IHI9LuH}HtMLmLuLeH[]A\A]A^A_AHH9IHAE1f.DATUHoSIHHHCDHǃ ƃƃHǃHǃHǃHǃLcHC觷Hp|L`HHs@@ HCHo|HCp|HXp|HCp|[]A\I HH{NHHCD~LfIf.fUHAWAVAUATISHHMIHHhdH%(HE1HHHCHLHHHXguDHHhAHHH1!@`1誼`HH~ HDžAHCPMo IW(LE11H[HH)H)H9HGy`Rx`HHEHhDLRAVHuY^L(wHHxHHDžDHxHEdH3%(*He[A\A]A^A_]L9HEuH^8t$D:wdD:wfudCPIW(IO @+覢A8tHEuH8u-|A8tHH8DwY1ECP@IW(IO HHm8GYxƅyAHIG(Mg HL)CPH@PL9tEA$HH`/8d`:GdGf8`ƅ`H@HhLILAuHLHHXLHphr`HDžAH?Mg IG(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E4xHhHhHF:4(H;PHhLHC`HLHL+PMy}EHhLLPHhI4LH)սML9HwHhHHHH;HCHHx*HHDžDHxO:f.H@H9Hƅ`HHH;CHHhHL"DH~Hƅ~ @HhLB@CPHHƅ ?Mg IG(ƅ`LHH;X@f. 膞oH}H8tuGYEEI SDHG+88`A$HH`8q-f H`HHHLHLHcni~|G|H|@KFA<7~|G|G|~|G|0G|DAWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_VH|$HD$j|HD$HT$ YlHH|$HD$i|SH軻f.UHAWAVAUATISHHIMHHhdH%(HE1HHHHCLHqHHXlDHHhAHHH1!@`1 `HH~ HDžI6HHVCPMo IW(LE11H[HH)H)H9HGy`Px`HHEHhDLRAVHmY^LnHHxHHDžDHx;HEdH3%((He[A\A]A^A_]fL9t{HEuHZ8t D:wdD:wfu`CPIW(IO +A8tHEuH8u-ܙA8tHH8DwY1ECP@IW(IO HHm8GYxƅyI6HHVIG(Mg HL)CPH@NL9tEA$HH`-8b`:GdGf8`ƅ`H@HhL觻LlHLHHXLHpi`HDžI6HHVMg IG(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E4xHhVHhHF:4(H;PHhLHC`HqLHL+PMq}EHhL:LPHhI4LH)-ML9HoHhHHHH;H;HHx肼HHDžDHx觷4fH@H9Hƅ`HHH;CHHhHL肹DH~Hƅ~ @HhLAJ@CPHHƅ 蟾Mg IG(ƅ`LHH;XHf. oH}H8tuGYEEQ 賕DHK+蘕8`A$HH`8s-]h NH`KHHHDHCHôΫɫy|G|H|蠧諫覫衫蜫藫y|G|G|ny|G|0G|UDAWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_趩H|$HD$j|HD$HT$ cHH|$HD$i|賣Hf.H~Ht&HVxHHHHWtBft/HHt;H HQHHHHPuHVXHHV`HHWuf1fff.AHtG~fDGPWfffff.H|vWx#fSH68|H HdH%(HD$1H艻5|H藺HOH|$HHCH$HD$uHL$dH3 %(HuH [HHHt@ATUISHHdH%(H$1HyHGXpHD$HG`HHD$t@HCHH HHBH$HCPHHD$t@I<$H HL$E11HH|$薶H|$茶HChH/ HHBHD$0HCpHHD$8t@HCXHD$ HC`HHD$(t@I<$H HL$0Ht$ E11uH|$(H|$8HH HHBHD$PHHHD$Xt@HChH HHBHD$@HCpHHD$Ht@I<$H HL$PHt$@E11H|$HH$肵H|$XxH8|&H.|H!HHCxHD$pHHHD$xt@HHS HHBHD$`HHHD$ht@I<$HT HL$pHt$`E11)H|$hϴH|$xŴH8|sH{h |HnHF{)HH HHBH$HHH$t@HCxH$HHH$t@I<$H H$H$E11ZH$H$H8|螭H覷 |H虫HqH$dH3%( H[]A\DHGXH$0HG`HH$8t@HCHHHHBH$ HCPHH$(t@I<$HH$0H$ E11bH$(H$8HChH;HHBH$PHCpHH$Xt@HCXH$@HC`HH$Ht@I<$HH$PH$@E11ϳH$HrH$XeHHHHBH$pHHH$xt@HChHHHBH$`HCpHH$ht@I<$HWH$pH$`E11&H$hH$H$x贱H8|bHj|H]H5{)HHHHBH$HHH$t@HHHHBH$HHH$t@I<$HgH$H$E116H$ٰH$̰H8|zH肴 |Hu)HGXH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11mH$H$HChHHHBH$HCpHH$t@HCXH$HC`HH$t@I<$H H$H$E11ڰH$}H$pHH`HHBH$HHH$t@HChHHHBH$HCpHH$t@I<$HbH$H$E11H.H$ѮH}ȮH8|vH~ |HqHI@H$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11kH$H$HChHtHHBH$HCpHH$t@HCXH$HC`HH$t@I<$H H$H$E11خH${H$nHCxH$HHH$t@HChHHHBH$HCpHH$t@I<$HsH$H$E11BH$H$ݬH$ЬH8|~H膰@|HyHQ{)HHHHBH$HHH$t@HCxH$HHH$t@I<$HH$H$E11eH$H$H8|詥H豯 |H褣.11cf1f1Kf1of1f13f1f1f1?f1]f1Df1f1f1f1xf1Tf19f1|f15訷H|$(H肪H|$8xH蠤H|$HHcH|$XYH聤HHHnH$H.H$!HIH$H H$H$H|$HH|$ݩHH|$hHȩH|$x辩H`[H$hH蜩H$x菩H跣H$(HwH$8jH蒣H$HHRH$XEHmH$H-H$ HHH$HH$HH$H٨H$̨HnH$H诨H}覨H΢H$H莨H$聨H詢#H$HdH$WHH$H:H$-HU@ATUISHHdH%(H$1H HGXHD$HG`HHD$t@HCHH\ HHBH$HCPHHD$t@I<$H HL$E11HPH|$H$pnH|$dH8|H|H HHHHHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$H HL$0Ht$ E11H|$(辦H|$8账H8|bHj|H]H5HCxHD$PHHHD$Xt@HHHHBHD$@HHHD$Ht@I<$HPHL$PHt$@E11H|$H H|$XH8|诟H跩|H誝H肨{)HHHHBHD$pHHHD$xt@HCxHD$`HHHD$ht@I<$HHL$pHt$`E11(H|$hNH|$xDH8|H|HHŧDH$dH3%(%HĐ[]A\DkHGXH$HG`HH$t@HCHH}HHBH$HCPHH$t@I<$HH$H$E112H$H$pMH$@H8|H|HHHHHHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11bH$腣H$xH8|&H.(|H!H{)/HHHHBH$0HHH$8t@HCXH$ HC`HH$(t@I<$HH$0H$ E11萡H$(賢H$8覢H 8|TH\P|HOf.)VHGXH$PHG`HH$Xt@HCHHHHHBH$@HCPHH$Ht@I<$H.H$PH$@E11轠H$HH$pءH$XˡH(8|yH聥|HtHLHHHHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$H^H$`E1H1H$hH} H*8|躚H¤x|H赘H荣H$HG`HH$t@HCHH6HHBH$HCPHH$t@I<$HH$H$E11+H$H$pFH$9H 8|H|HH躢HCxH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11nH$葟H$脟H 8|2H:|H-H{);HH+HHBH$HHH$t@HCxH$HHH$t@I<$H H$H$E11虝H$輞H$诞H8|]He|HX1f1f1f1+f1f1f1f1f1tf1f1(_HHtHH$H誝H$蝝HŗH|$(H舝H|$8~H覗H|$HHeH|$X[H胗H$HCH$6H^H$(HH$8H950H$hHH}H H$HHɜH$X輜HH$H蟜H$蒜H躖H|$hHnH|$xdH茖H$HLH$?HgH$H'H$HBH|$HH|$H#fffff.SHHHHLJP|dH%(HD$1豛H襛H虛H荛H{p脛H{`{H{PrHC8HxH7uQHC0HxH7uPHC HxH7uOH{HH7uNHD$dH3%(uJH[Ht$@Ht$@Ht$@Ht$_fffff.SHH[Αfffff.AWAVAAUATEUSHH8HHHHGȐ|HG7HG7HG7IMdH%(H$1IEHCPHC`HCpHǃHǃHǃHIED{@DsDHCHHCXHChHHCxHǃHǃHt@H$H|$ |AH$H|$0{*H$H|$@|HEH|$P |LLh(1Ht$PHAHHCHD$PHxH7hHEH|$` |LLh(1Ht$`HAHHCHD$`HxH7eHEHt$ H$Lh裃H$|L~H$H$HH|$pAH{Ht$pEHD$pHxH7H$HxH7H$HxH7 HEHt$0H$LhH$|{LH$H$HH$ALk H$L蜐H$HxH7H$HxH7H$HxH7HEH$ |LLpD1H$HAֈC(H$HxH7xHEH$|LLp1H$HAֈC)H$HxH7' HEHt$@H$LpŁH$|LH$H$HH$AH{0H$aH$HxH7 H$HxH7 H$HxH7f HEH$ *|LLp 1H$ HAֈH$ HxH7J {Lݚ}K(HSH$@HǃPH$@H$HH$HKHHDŽ$HHDŽ$@HCHHCPHSPH$H${H$HnH$PH$PH$XH$HKXHDŽ$XHDŽ$PHCXHC`HS`H$H$ H$XH$`1KH$`H$hH$HKhHDŽ$hHDŽ$`HChHCpHSpH$H$薔H$h艔HCHH HH$8|HRHoH$C|H HH聆,|HH$ǖHkHH fH*fH$7")8|H*S^Y $肍H$腗|HxHHM|H`$H3|HFH$|@:*$H|HHȖHH$HHH$t@HSH$H$sH$H$H$HKxHDŽ$HDŽ$HCxHHH$H$蘒H$苒H$~HCxH H$8|HH$|H HH~,|HH$Ĕ{)H$ 8|見H$ 評|H蜉HsHHV謔H$ _H$08|LcTH$0W|HHbLH}H$0 H$@8|HkH$@|HHHjH$@轓H$P8|越H$P蹔|H謈Hs HHV輓H$PoH$`8|HaH$`d!|HWHH,H$`H$p8|k(H$p,|H @HNH$pђH$8|k)ƉH$ɓ4|H輇@HH$胒H$8||H$:|HrHs0HHV肒H$5HD$@HxH7HD$0HxH7HD$ HxH7H$dH3%(:Hĸ[]A\A]A^A_f.fH$H*COH$H$H$HHDŽ$HDŽ$HHHH$H$莎H$聎@H$0N8||~H$0Hs HHV/|HH$0Ր+HsH$ZxH$=H|@:Hk貅HH觅H_H$8|Hk}H$rH|HeHHZH$1+f4$H+I^l|@:H@HǀH:HsHHV-}|H$HӉ|HH螐HHHfH*$^f(y$fH*CY+,) $!,)Xf.H,HefH*\f.f(BH,HCH$vHkHMH$8|`H$|H|HH$謌@HS0H$1ɾ`H$H$H$HHDŽ$HDŽ$HHHH$H$菋H$肋HHHH$8|HRH H$|HHHw},|HH$轍H$wfHHH*H,$fH*$$^f(vH$~8|D$ZH$]P|HPD$H"H$HHfHH H*XG\H,HCHH1C\HH,H1WDH$fDH${fDH$cfDH$KfDH$3fDH$fDH$fDH$fDH$fDH$CfDH$DfDH$EfDH$svfDH$[fDH$CKfDH$+fDH$fDHfHH H*XNf.HfHH H*XfHfHH H*X)}x@|vWxu|vWxt|vWxtH$H=H$qHD$@HxH7t Ht$HD$0HxH7t Ht$HD$ HxH7t Ht$H HHHH{pH{`H{PHC8HxH7t Ht$@vHC0HxH7t Ht$@[HC HxH7t Ht$@@H{HH7t Ht$@%H蝀H$H HHH$HxH7t H$H$HxH7H$HH$HxH7dHHH$HxH7t H$hH$HxH7t H$FH$HxH7fHHHH$HxH7;HH$HxH7HHD$`HxH7HHD$PHxH7uH$`H萇[H$PH{FH$@Hf1H$0HQH$ H<H$0H'H$HHHn |@e |Hć`|H{H诇|H{H蚇|H{H腇|H{Hp|H{H[I|H{HFH$pj8|HksH$pYH|HL{HHA{c|H4{H$pvtAH708H|HHHHH$HxH7H$HH$ HxH7RH$Hm8H$HX#H$HCHH$HxH7%H$H$HH$pHHhH$H΄H$H HHD$pHxH7H$HmH~DH$pHdfHSH8HslH[f.@SpxHHHT$dH%(HD$1 HL$dH3 %(u HH[qf.ATUISH^@H{Htq{H{Hυ{H躅{H襅-HEHE I|$0N{qxI|$8N{ZaID$HtHHBHEID$HHEH[]A\I|$0^-I|$8^I$HEI$HHEuUWI|$0{I|$8{誄I$HEI$HHEt D@H[]A\@I|$0^aI|$8N{JPDI|$0{)ZI|$8N{h>@ATUISH^@H{Htq{Hԃ{H迃{H誃{H蕃-HEHE I|$0N{axI|$8N{JaID$HtHHBHEID$HHEH[]A\I|$0^-I|$8^I$0HEI$8HHEuUWI|$0{豂I|$8{蚂I$HEI$HHEt D@H[]A\@I|$0^QI|$8N{:I$HtHHBHEI$HHEuI|$0{2I|$8N{ځtAHtG~fDGPWfffff.H|vWxifATUHo@SIH{HH0dH%(H$(1;{H&V{H{H{Ho H$|HlH|HsHp~ H{0N{芀OH{8N{t9{  HH HHBHD$HHHD$t@HCH HHBH$HCHHD$t@I<$HHL$E11HX|H|$zH|$z7 H{0^H{8^~HHtHHBHD$0HHHD$8t@HHD$ HHHD$(t@I<$H1HL$0Ht$ E11{H|$(CzH|$89zHH HHBHD$PHHHD$Xt@HHD$@HHHD$Ht@I<$HHL$PHt$@E1{H|$HyH|$XyHH/ HHBHD$pHHHD$xt@HH HHBHD$`HHHD$ht@I<$HHL$pHt$`E11|zH|$h"yH|$xyH Hx HHBH$H(HH$t@HH1 HHBH$HHH$t@I<$HmH$H$E11yH$vxH$ixH0H$H8HH$t@HH HHBH$HHH$t@I<$HH$H$E114yH$wH$wH0H$H8HH$t@H HC HHBH$H(HH$t@I<$H/H$H$A1xH$5wH$(w{ fHHn HHBH$HHH$t@H0H$H8HH$t@I<$H H$H$E11wH$vH$vf.H{0{B{FH{8{,{0HHtHHBH$HHH$t@HH$HHH$t@I<$H H$H$E11wH$uH$uHH8 HHBH$HHH$t@HH$HHH$t@I<$H H$H$E1qvH$uH$uHH HHBH$HHH$t@HH{ HHBH$HHH$t@I<$H\ H$H$E11uH$etH$XtHH HHBH$HHH$t@HH HHBH$HHH$t@I<$H H$H$E11uH$sH$sHH$0HHH$8t@HH HHBH$ HHH$(t@I<$H H$0H$ E11ttH$(sH$8 sHH$PHHH$Xt@HHk HHBH$@HHH$Ht@I<$Ho H$PH$@A1sH$HurH$Xhr{ HH HHBH$pHHH$xt@HH$`HHH$ht@I<$HH$pH$`E11)sH$hqH$xqH$(dH3%(H0[]A\DH{0^bv{H{8N{LveHHtHHBH$HHH$t@HH$HHH$t@I<$HH$H$E113rH$pH$pHHHHBH$HHH$t@HH$HHH$t@I<$H.H$H$E1qH$4pH$'pHHHHBH$HHH$t@HHHHBH$HHH$t@I<$H|H$H$E11pH$oH$xoHHDHHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$A10pH$nH$n{ HHHHBH$HHH$t@HHtHHBH$HHH$t@I<$HH$H$E11HtoH$nH{nQfH$|HgHq|Hp1|f1>f1f1f1f1f17f1f1fH{0{rH{8N{qHHtHHBH$HHH$t@HH$HHH$t@I<$HmH$H$E11mH$vlH$ilHHHHBH$0HHH$8t@HH$ HHH$(t@I<$HH$0H$ E11mH$(kH$8kHH%HHBH$PHHH$Xt@HHHHBH$@HHH$Ht@I<$HH$PH$@E11lH$H%kH$XkHHHHBH$pHHH$xt@HHMHHBH$`HHH$ht@I<$HmH$pH$`A1kH$hsjH$xfj{ HHHHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11kH$iH$i1111211u1a1#1111B111G1sv111=11V1\1YH$HhH$hHcH$HhH$hHbH|$HhH|$hHbH$H|hH$ohHbH$HWhH$JhHrbH$H2hH$%hHMbH$H hH$hH(bH|$hHgH|$xgH bH|$HHgH|$XgHaH|$(HgH|$8gHaH$HgH$~gHaHHjHaH$HSgH$FgHnaH$(H.gH$8!gHIaH$H gH$fH$aH$HHfH$XfH`H$hHfH$xfH`H$HfH$fH`H$HufH$hfH`H$HPfH$CfHk`H$H&fH$fHA`H$HfH{eH `H$HHeH$XeH_H$hHeH$xeH_H$(HeH$8eH_H$HqeH$deH_fff.ATUHo@SIH{HH0dH%(H$(1i{HiV{Hii {Hit{Hi? H$ |HTHhh|H[\H3gfDH{0N{JiOH{8N{4i9{ HHR HHBHD$HHHD$t@HCH HHBH$HCHHD$t@I<$HHL$E11HbH|$cH|$cH{0{zhH{8N{dh~HHtHHBHD$0HHHD$8t@HH HHBHD$ HHHD$(t@I<$HHL$0Ht$ A1aH|$(bH|$8bHH6 HHBHD$PHHHD$Xt@HH HHBHD$@HHHD$Ht@I<$HhHL$PHt$@E113aH|$HYbH|$XObHH HHBHD$pHHHD$xt@HHD$`HHHD$ht@I<$HHL$pHt$`E1`H|$haH|$xaHH HHBH$HHH$t@HH$HHH$t@I<$HKH$H$E11`H$3aH$&a{ tHH\HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11W_H$z`H$m`H{0{2evH{8{e`HH$HHH$t@HH HHBH$HHH$t@I<$H H$H$A1|^H$_H$_HH$HHH$t@HH HHBH$HHH$t@I<$H H$H$E11]H$_H$^HH HHBH$HHH$t@HHP HHBH$HHH$t@I<$Hi H$H$E11.]H$Q^H$D^HH HHBH$HHH$t@HH HHBH$HHH$t@I<$H H$H$E11\H$]H$]HHE HHBH$0HHH$8t@HH$ HHH$(t@I<$H H$0H$ E11[H$(]H$8\HH HHBH$PHHH$Xt@HH$@HHH$Ht@I<$H| H$PH$@E1>[H$Ha\H$XT\{ HH HHBH$pHHH$xt@HH$`HHH$ht@I<$H H$pH$`E11ZH$h[H$x[H$(dH3%( H0[]A\DH{0^R`H{8N{<`HHtHHBH$HHH$t@HH$HHH$t@I<$HH$H$E11YH$ZH$ZHHHHBH$HHH$t@HH$HHH$t@I<$H?H$H$E1YH$$ZH$ZHHHHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11RXH$uYH$hYHH-HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$A1WH$XH$X{ HHHHBH$HHH$t@HH[HHBH$HHH$t@I<$H"H$H$E11HVH$XH{WQf1f1f1f1f1 f1f1QfH{0^R\H{8^<\kHHtHHBH$HHH$t@HH$HHH$t@I<$HH$H$E11UH$VH$VHHHHBH$HHH$t@HH$HHH$t@I<$H?H$H$E1UH$$VH$VHHeHHBH$HHH$t@HH'HHBH$HHH$t@I<$HH$H$E11RTH$uUH$hUH HHHBH$0H(HH$8t@HHHHBH$ HHH$(t@I<$HH$0H$ E11SH$(TH$8TH0H$PH8HH$Xt@HHHHBH$@HHH$Ht@I<$H?H$PH$@E11SH$H'TH$XTH0H$pH8HH$xt@H HOHHBH$`H(HH$ht@I<$HH$pH$`A1bRH$hSH$xxS{ HHHHBH$HHH$t@H0H$H8HH$t@I<$HH$H$E11QH$RH$R"f.1f111111 1e1'11t1m1/11r11a11111T11mR_11gBH$hHQH$xQHLH$HQH$QHKH$HQH$QHKH$HxQH$kQHKH$HSQH$FQHnKH|$H1QH|$'QHOKH$HQH$QH*KH$hHPH$xPHKH$HHPH$XPHJH$(HPH$8PHJH$H{PH$nPHJH$HVPH$IPHqJH$H1PH$$PHLJH$H PH$OH'JH|$HHOH|$XOHJH|$(HOH|$8OHIH$HOH{OHIH|$hHOH|$xOHIH$HiOH$\OHIH$HDOH$7OH_IHHQHLIH$H OH$NH'IH$HHNH$XNHIH$(HNH$8NHHH$HNH$NHHH$HxNH$kNHHfSHH8HHLJ|dH%(HD$11NH(%NHNH NHNHMHMHMHMHMHMHMH{xMHC`HxH7usH{HHtDHC@HxH7udHC8HxH7ucHC0HxH7ubHC(HxH7uaH{8MHD$dH3%(uTH[fHt$&@Ht$@Ht$@Ht$@Ht$_=fffff.SHWH[Cfffff.UN{HAWAVAUATHUSHHH(dH%(HE1SHUHN{SHUH{RHUH$|RHMH|l1HMH|R1HMH0Р|81HUH =|sRH}||pEH}wOF|HjCHs`HHVzNH}1NHCHH@HH@I@6Lk`H0Y{LyHsH@H0HPAH{0HPCHPHxH7H0HxH7H@HxH7HCHHpHH@I5H`j{LoxHsHpH`HAH{8H3CHHxH7VH`HxH7LHpHxH7BHCHHHH@I4HL|LwHsHHHAH{@HBHHxH7HHxH7HHxH7HCH|LHH@I0wH{1HAֈC HHxH7HCHHHH@I3H|LvHsHHHAH{(HAHHxH7HHxH7HHxH7HCHP\|LHH@(I:vH{HPA։HPHxH7HCHpl|LHH@0IuH{HpA։HpHxH7{HDžPHDžXHDž`HDžpHDžxHEHEHEHEHDž7& E1DžL<DHHxH7HHxH7pHCHHLHLx@HB 2-H{HAHHxH7,HXH;`8HtHHXH LPH }|1AHH|HH7>HHuHHUH7>HEHxH7/HHxH7H HxH7HCHH0LHLx@HB +H{H0AH0HxH7;HXH;`GHtHHXH@LNH@|1@HH|HH7I=HHuHHUH7{=HEHxH7fHHxH7>H@HxH7HCHHPLHLx@HB *H{HPAHPHxH7rHxH;EHtHHxH`LRMH`|1J?HH|HH7;HHuHHUH7%2HHHxH7t HuHHxH7t HuHHxH7HuHHPHxH7t Hu蛺H0HxH7t Hu~H@HxH7mHHH}H9PHHH`H 'HHHLHUH^HvHHHxH7t HuܹHHxH7HHxH7t H褹H}Ht-HpHt-HPH|-rHHEHxH7t HKHHxH7t Hu.H`HxH7RHu DH$H4HHpHxH7HHHPHxH7HHHHxH7t Hu舸HHxH7UHHHHxH70HHEHxH7t H&HHxH7t Hu HHxH7-HHHHpHxH7|-HHHxH7tL虷HHxH7HuHHHxH7tHuPHHHHxH7t Hu)H HxH7MHHHHxH7(HHEHxH7HöHkHHHPHxH7xHHEHxH7t HnHHxH7t HuQH@HxH7uHHHH0HxH7KH}HHa*WHHHxH7t HuеHHxH7t Hu賵HHxH7HHHHxH7}HHHHxH7#HuHHHEHxH7Hf.AUATAUSHH`ELHHwHG|HGHGHHG7HG7HG7HG7HGHGHGdH%(H$1THEDkhDclHCpHEHHCxt@HǃHǃHHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃ Hǃ(Hǃ0Hǃ8Hk@{H5{H4{H4p{H4 {H4 H$|HH3|Hr'HJ2f.H$dH3%(Hĸ[]A\A]H{0N{:4(H{8N{$4HSHH|$0HD$HT$H$HKHD$H}HD$HCHCHSH$H$.H|$.HCH)HH|$ |HRL6b(H|$ h2 ˜|HIs1LL ,|HV1H|$ 1{ H|$09|'H|$025|H%Hs(HHV1H|$00HS(H|$@1ɾh.HD$@HT$HH}HHD$HHD$@HHHH$H$-H|$H-H{0^b2zH{8N{L2dH$解H$H$H$HHDŽ$LcHH}HDŽ$HHHH$H$,H$,H$L,H$HH$,H$LHH$rH$u,HH HH$ |HRLV%H$ 0|H#LHj,|H#H$ .HHO HH$0|HRLW%H$0/И|H#LH,|Hh#H$0;.H$@+H$@H$HH}HHDŽ$HHDŽ$@HHHH$H$+H$H+{ uH$P[|$H$P.5|H"Hs(HHV-H$Pg-HS(H$`1ɾ+HH$` H$h~*fH{0^B/EH{8^,//H|$P芠HD$PHT$XH$HHD$XLcHH}HD$PHHHH$H$)H|$X)H|$`L!HD$`HT$hH}HHD$hHD$`HHHH$H$p)H|$hf)H|$pLHD$pHT$xH}HHD$xHD$pHHHH$H$)H|$x(HHH HH$|HRLD"H$,|HI+LL,|Ht+H$'+HH HH$|HRLE"H$,И|HI+LLd,|H*H$*H$Ŷ(H$H$H}HHDŽ$HDŽ$HHHH$H$~'H$q'H$A('H$H$H}H HDŽ$HDŽ$H H(H(H$H$&H$&H$谡H$H$H}H0HDŽ$HDŽ$H0H8H8H$H$&H$v&{ H$K| H$*5|H Hs(HHV)H$(HS(H$1ɾv&HH$r H$%PH{0{*H{8N{*H$pH$pH$xH$HHDŽ$xLcHH}HDŽ$pHHHH$H$>%H$x1%H$L|H$H H$$H$LFHH$ H$$HHHH$|HRLhOH$R(|HELH,|H-H$'HHHH$|HRLiH$'И|HLHE,|HH$&H$#H$H$H}HHDŽ$HDŽ$HHHH$H$l#H$_#{ H$o|H$'5|HHs(HHV&H$%HS(H$1ɾ_#HH$[H$"9fH{0{'H{8{|'H$H$H$H$HHDŽ$LcHH}HDŽ$HHHH$H$"H$"H$L\H$HH$!H$L&HH$H$!HHHH$ |HRL{/H$ 2%|H%LH,|H H$ #HHHH$0|HRL|H$0$И|HLH%,|HH$0k#H$@(q&H$@H$HH}HHDŽ$HHDŽ$@HHHH$H$D H$H7 H$P(%H$PH$XH}HHDŽ$XHDŽ$PHHHH$H$H$XH$`膑H$`H$hH}HHDŽ$hHDŽ$`HHHH$H$IH$h<{ H$p|H$p"5|HHs(HHV!H$p!HS(H$1ɾ<HH$8H$1+|vWx H|$ H&!H8jH(^HRHFH:H.H"HH HHHH{xHC`HxH7t Ht$ҠH{HHtHC@HxH7t Ht$詠HC8HxH7t Ht$莠HC0HxH7t Ht$sHC(HxH7t Ht$XH{?HgH$HH$HHCH|$0H}H$HhH$H~SH$Hi>H$HT)H!H$PH7 H$0H"H$ H IHLH$pHH$0HH$ HfD1f.SH`HH[f.@S{HHHT$dH%(HD$1Y"HL$dH3 %(u HH[ f.SHH HVHFdH%(HD$1HHHHHGHWH|$H $HD$1HT$dH3%(u H H[ SHH HVHFdH%(HD$1HHHHHGHWH|$H $HD$HT$dH3%(u H H[3 AUATL$US1LHIHHJ&HHHGHGu_II9HELet9LHfHtHHH9uIL)HHDHEH[]A\A]HH9w LHH}HtHfUSHHHdH%(HD$1HHTHL$dH3 %(HuH[] HHHzH7t Ht$hHAUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LtL9t2HLfHtHHI9uHGI)IOl HtLLeLmH]H[]A\A]fdHH9JHHDAE1^AUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LtL9t2HLfHtHHI9uHGI)IOl HtLLeLmH]H[]A\A]fdH?H9JHHDAE1^ATUISH^hH{H{H{H{H{HQ{HHEHEI|$PN{YdI|$`N{BMID$HtHHBHEID$HHEH[]A\I|$P{I|$`N{ID$HtHHBHEID$ HHEu_aDI|$P{I|$`^ID$(HtHHBHEID$0HHEt @H[]A\@I|$P{9I|$`N{"I$HtHHBHEI$HHEuI|$P{I|$`N{8I|$P{I|$`{mfATUISH^hH{He{HP{H;{H&{HI{HHEHEI|$PN{dI|$`N{MID$HtHHBHEID$HHEH[]A\I|$P{iI|$`N{RID$HtHHBHEID$ HHEuWYDI|$P{I|$`^I$HEI$HHEt D@H[]A\@I|$P{I|$`N{ID$(HtHHBHEID$0HHEuDI|$P{YI|$`N{BtI|$P{*.I|$`{I$HEI$ HHE@AHtG~fDGPWfffff.H|vWxfATUHohSIH{HHdH%(H$1K{H6n{H! {H {H/{HH$8|HH|HHnfH{PN{7H{`N{l!{@rHH*HHBHD$HHHD$t@HCHHHBH$HCHHD$t@I<$H9 HL$E11HPH|$H|$H{P{|H{`N{f{@HH:HHBHD$0HHHD$8t@HCHHHBHD$ HC HHD$(t@I<$Hh HL$0Ht$ E11}H|$(#H|$8 @H{P{H{`^HHtHHBHD$pHHHD$xt@HC(HsHHBHD$`HC0HHD$ht@I<$HHL$pHt$`E11H|$haH|$xWHH3HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11H$ H$ HHvHHBH$HHH$t@HH8HHBH$HHH$t@I<$HTH$H$E1`H$ H$ HH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11 H$d H$W HH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11" H$ H$ {@HHHHBH$HHH$t@HH$HHH$t@I<$HjH$H$E11y H$ H$ H$dH3%(H[]A\DH{P{H{`N{HC(HtHHBH$0HC0HH$8t@HHqHHBH$ HHH$(t@I<$HjH$0H$ E11y H$( H$8 {@HH HHBH$PHHH$Xt@HC(HHHBH$@HC0HH$Ht@I<$HH$PH$@E11 H$Hi H$X\ O1f1fH{P{H{`N{ {@HHHHBHD$PHHHD$Xt@HC(Ht~HHBHD$@HC0HHD$Ht@I<$HHL$PHt$@E11 H|$HwH|$Xm`1f11_1111q111 11o1H{P{ H{`{ HC(HtHHBH$pHC0HH$xt@HHHHBH$`HHH$ht@I<$HH$pH$`E11H$h;H$x.HH$H HH$t@HC(H&HHBH$HC0HH$t@I<$HH$H$E11H$H${@HHHHBH$HHH$t@HH$H HH$t@I<$HtKH$H$E11HWH$H{11$iP1171KH$HH$HH$HHH$X}HH|$HHhH|$X^HH$HFH$9HaH$hH!H$xHH@HxH7HC8HHPLHLx@HB pH{8HPAHPHxH7rHxH;EHtHHxH`LBH`|1:HH|HH7HHuHHUH7HEHxH7HHxH7xH`HxH7PHC8HHpLHLx@HB$ H{8HpAHpHxH7HxH;EHtHHxHLH}|1HH*YxHH7HHuHHUH7HEHxH7HHxH7HHxH7HC8HHLHLx@HB, H{8HAHHxH7HEH;EHtHHEI9HLH}|1wHH|HH7 HHuHHUH7RHEHxH75Hq$@Hu_HEH;EHH}Hu/pf.Hu@fHHuHxH;EKfDHHpuIHufHuzfHOHuHxH;EfDHHpHuGfHu7fH$HuHXH;`HHPHufHufHHuf.HuRfHuwHXH;`HHPHC8HHHH@IH|LHs8HHHAHHxH7HHxH7HC8L|LLHH@(IjH{8LAAHHxH7nHH=HLAWLEHpHPH}XHZHxH7HUHELkpIHI)H?II9LcpHIL)HI9I9u,fDHtHHCxLHH9EItGfLZHCxH;uHL(LHH9EIuH}HtbHHxH7HHxH7H}Ht$HpHtHPHtHHxH7xH0HtHHtHHtHHxH7;HHxH71HHxH7'HHxH7HEdH3%(qHe[A\A]A^A_]HCxIHM)MILH{pL;Ht'HA$tHIL9uHtHHIIHCpHEL{xLHUILs\Hue6HuW@HuIzHu;Hu-HuHuHu`HujHutHuHuHuHu^HuhHurHuHuwHui&Hu[0HuMvHu?Hu1Hu#JHu9HuCHuL1LH}HHHxH7t HH0HtHHtHHtHHxH7t HcHHxH7t HCHHxH7t H#HHxH7t HH+HH5HHHxH7HuHHHxH7HH`HxH7t HuH@HxH7t HuhHPHxH7z{HHHHxH7UVHHHxH756HHHxH7t HuHpHxH7HuHHK>HcH{HHHHHHHxH7t Hu^H@HxH7HHxH7t H&H}Ht8HpHt'HPH!HHEHxH7t HHHxH7t HuHHxH7RHuDH$HH0HxH7!HHEHxH7t HEHHxH7t Hu(H HxH7sHHHHHxH7IHHPHxH7HHHxH7HHHxH7t HuHHxH7FHu`8HHHHHHpHxH7MN|HHHxH7tLHHxH7HHHHxH7tHuHHHHxH7t HuHHxH7'HHHHxH7HHEHxH7t H#HHxH7t HuHHxH7QHHHHpHxH7~'HHEHxH7t HHHxH7t HuH`HxH7$HH}HH[kQHH0HxH7t Hu&HHxH7t Hu H HxH7HHHXHHPHxH7y"HHEHxH7'HAVAUAATUHSHEMHHw8H|HGHGHHGHG HG(HG0HGH7HGP7HG`7HGh7HGpHGxHLJHdH%(H$1I$DDHID$HHt@HǃHǃHHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃ HC8H|$|HHL`(H{8Ht$AAHD$HxH7cHkh{H{H}{Hh{HS#{H>f {H))H$Pn8|EH$P|HH$PAHCXH{PN{(H{`N{HSpH|$ HCXDHD$ HT$(H$xHKHD$(HD$ HCHCHSH$pH$xJH|$(@HCH HH|$08|HRL;H|$0 ˜|HHLH6,|HH|$0At{@tH$pu8|H`Hh5|HIsHsHLHVcH5|@:GHsH@:HV5IHH@MM A|$8At$CLPH8HSHH$`1LbH$`H$hH}HHDŽ$hHDŽ$`HHHH$pH$xH$h=H{P{RH{`N{<HSpH|$`HCXD諽H{(Ht$`] H|$hHC(H HH|$p8|HRLKH|$p ˜|HHLH ,|H|H|$pALGH{P{bH{`N{LHSpH|$@HCXD;HD$@HT$HH$xHKHD$HHD$@HCHC HS H$pH$xH|$HHCHHH|$P8|HRLCxH|$P~ ˜|HHLH,|HlH|$PAH$pSfDH{P{H{`^HSpH$HCXDpH{(H$ H$HC(HHHH$8|HRHS_H$b˜|HUHH,|H=H$H$H$H$H$pHHDŽ$H}HDŽ$HHHH$pH$xH$H$^(H$H$H}HHDŽ$HDŽ$HHHH$pH$xeH$XH$(^(H$H$H}HHDŽ$HDŽ$HHHH$pH$xH$H$IH$H$H}HHDŽ$AHDŽ$HHHH$pH$xdH$W{@H$dH3%(HĐ[]A\A]A^H{P{H{`{H$HCXҷH$H$H$pHHDŽ$H}HDŽ$HHHH$pH$xmH$`HSpH$ D輷H{(H$ kH$(HC(HHH$08|HRLiH$0˜|HLH,|HH$0\H$@KH$@H$HH}HHDŽ$HAHDŽ$@HH H H$pH$x*ufH@|vWx賳fUSH8dH%(HD$(10HGPHD$HGXHHD$t@HG@H$HGHHHD$t@H>HH\$E11HHZH|$H{HߺU|西H(|HHsHD$(dH3%(u>H8[]@H\$Y|HQHY0{HgHHH舿H|$HKH{BHjSH0dH%(HD$(10tcHGPHD$HGXHHD$t@HG@H$HGHHHD$t@H>HtAHL$E11HH|$H|$HD$(dH3%(uH0['BH|$HH|${H裾fSHHXHHG|dH%(HD$1GH{H>HC8HxH7u=HCHxH7u|脮H$'HsHHV7|H H${0HC SHD$ HC(HxH7HD$HxH7H$(dH3%(H8[]A\A]A^A_fDH$(fDH$&fDH$k$fDH$SDc0JfH$3fDH$fDH$fDH$fDH$of1~THHD$@HxH7t H$HD$PHxH7HD$ HxH7t Ht$`HD$HxH7t Ht$DH{XKH{HBHC8HxH7t Ht$ HCHxH7t Ht$ H{HH7t Ht$ HHH$HxH7AH$/HHWH$HK H$H6HHD$`HxH7HHD$0HxH7H$0zH$H۽H$HƽH}HHHD$pHxH7t H$H$HxH7H$HH$HOH$H:DHG f.SHHCH[f.@S{HHHT$dH%(HD$1HL$dH3 %(u HH[蛪f.HVHHHVHHWtBÐfAHtG~fDGPW~fffff.H@|vWx賦fHGw|HtP1fDHGHt0P@HGHt4P@HGHHtHPfHGHHtHxPfHGHt H,PfDSHHHt^HH[HcATUHS_tH<1HI i(e(tA ADHH9uH1L1ۋpt.@UtHLHH<9wH}HHt9[L]A\HGHtƀPsUSHH`HH@0H=@PuH[]H@H[]ATLfhUSHHN{LH dH%(HD$1uMHU HttHHPHE(HHHCt@HL$dH3 %(HH []A\f^L賻u'HE@HHEHHHCuf1@{L{u'HEPHHEXHHCrqf.Hlh|yH!HuhHHV1д|HH׸HHC 螦HH賸H+f.ATLghUSHHN{LH0dH%(H$(1蛺HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11H蟶H|$EH|$;H$(dH3%(H0[]A\^L+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11H|$(芴H|$8耴HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@AcH|$H H|$XHC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E11شH|$h~H|$xtHCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11KH$H$@1M{L裷HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11蒳H$5H$(HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$AH$蜱H$菱HC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11VH$H$HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11HH$cH}ZD1bf1f1if1.f1fH$7h|HH詳HshHHV蹲д|H觲H_o11R11z1f H$HmH$`H舩H$HHH}?HgH$H'H$HBH$HH$HH|$HHH|$X֮HHHsHH$H諮H$螮HƨH|$hH艮H|$xH觨H|$(HjH|$8`H舨H|$HKH|$AHiATLghUSHHN{LH0dH%(H$(1۲HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11H_H|$腭H|${H$(dH3%(H0[]A\^L#+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11褫H|$(ʬH|$8HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@A#H|$HIH|$X?HC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E11蘪H|$h辫H|$x贫HCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11 H$.H$!@1M{LHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11RH$uH$hHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$A蹨H$ܩH$ϩHC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11H$9H$,HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11H耧H$裨H}蚨D1bf1f1if1.f1fH$Wh|HAHHshHHVд|HH蟪o11R11z1覵MH$H譧H$蠧HȡH$H舧H}H觡H$HgH$ZH股H$HBH$5H]H|$HH H|$XH>HH賩H+H$HH$ަHH|$hHɦH|$x迦HH|$(H誦H|$8蠦HȠH|$H苦H|$聦H詠SHHHP|HdH%(HD$1Ht`H4HHxH7upHHxH7ulHChHxH7ukH{XH{HH{8H{(ץH{ΥHD$dH3%(u:H[Ht$@Ht$@Ht$fffff.SHH[~fffff.HHt"Pfff.UHAWAVAUATISHHHAEHHLJ8P|HLJHHLJPHLJXMHLJ`HLJhHLJpHLJxHGHGHGHG7HG7HdH%(HE1HI$DDHID$HHt@HUH0LkN{ѪHUH@"K}輪H0;h|趝H0躧F|HIŦLLI7HV详H0cHCH0HpHL`uH`|{LQHsHpH`HPALkhHPLHPHxH7.H`HxH7$HpHxH7HCLeHJXxLHLp(藩H{@HAHHHHxH7HCHH|HLp(`H{1HAHHHHxH7HCHH|HLp H{1HAֈHHxH7HCHHXxHLp(H{HA։HHxH7hHCHH|HLp(gH{HA։HHxH7"HCHH|HLpH{1HAHCxHyH7ǃHCH@HHLpȋHH|HsHHHALHL^HHxH7HHxH7HHxH7fH*^9$̠H,CtH<CpI蚔1M ( (t DHI9uH HHC`L變HHEHHHEt@L CtARW{xLLATWH@PP&H@HKH0HHHDž@HDžHHCHCHSHMHEHEHxH@Hx I|$H HxH7KSpHs`HP蔎HPHK HXHDžPHDžXHC HC(HS(HMHEHEHx苞HPHx{HC HHH`h|HRLc H` ϶|HILLm,|HH`诠HCH6H}dh|L蘗H}蟡 |HI誠LL,|H荠H}D^LgHpHpHK@HxHDžpHDžxHC@HCHHSHHMHEHEHx*HpHxH}HEHK0HUHEHEHC0HC8HS8HMHEHEHxϜHEHxœ{L蕡H@C|ǃǃǃHǃHxHǃH7H0HxH7HEdH3%(He[A\A]A^A_]HCHHö|HLp(H{HA։HHxH7HufDH} HEHKPHUHEHEHCPHCXHSXHMHEHEHxrHEHxeLhHEHK0HUHEHEHC0HC8HS8HMHEHEHxI|$_Hu#HuHuHu!HugHu2HuHuHuCxHHuwDHuiHu[IHHxH73H@HxH7t H/H0HxH7t H/HϙHHxH7t H@HHxH7t H@HChHxH7t H@H{XiH{H`H{8WH{(NH{ELmIHPHxH7t Hu=H`HxH7t Hu HpHxH7HuIHHxH7I|$I谘H HxH7}IHHxH7t HuHHxH7t HuyHHxH7&TIIIHHxH7*蝈IHHxH7IHHxH7H}Iq聥H`IX|vWx躄IeIHHxH7LzIHHxH7,ZI_II*H0I˙II fDAUATUSHHhdH%(HD$X1D$9b1ȃ9~H|$@h|De|_H|$@e^{HIpDL%A}HIPfLZt$f(t$H|$@]pf=$(z$(\D$H*^f(EpffD$(H*f.L$0sX-$(f(d$(fTf.r:f.H=YL$8s?f.r9f.w f.#(v?HT$(|B$fHT$0||,$@HT$8|$1fTf.rf.zt{f.#(z#((fWf.D$@wQf.ztg)T$L$踓L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X||k#|!||!H|$@HEH轎ATUSHHpdH%(HD$h1HG|D$HHD$ 7Hh@HD$PHp:HT$ LD$dH|$ H1I)HR}HH|$ 1HJ裏HH|$0.|HT$0H7PHH{Ht$@fHT$@H7HD$@ZHxH7hHD$0HxH7rHD$ HxH7|.e(zHeD$H|$@h|k|H|$@^{HILLj 3|HHfHZD$蠏H|$@薕HCH HD$hdH3%(Hp[]A\@HCHH|$@.|HHh@WH{fHt$@HD$@HxH7uT$Ht$0f@Ht$D$ PD$ }DHt$@D$ 0D$ sDHt$@D$ D$ ip襟HHD$@HxH7t Ht$HD$0HxH7t Ht$@HD$ HxH7t Ht$@H謋HHD$@HxH7tHt$0}H|$@HHHHG`f.SHH|H[f.S?{HHHT$dH%(HD$1虗HL$dH3 %(u HH[[f.USH@H}HuHxH@8PzxHgHn{H}H3HC0zxHH{tHH@H=lNuCG@HE PS`|HH|HC|HC8H|HC HE(HC(E0C0蠉HHH {HbH*HzLIz$@USH@H蝂HuHxH@8PzxH=HzH}H4HC0zxHH{tHH@H=lNuCG@HE S|HH|HC|HC8|HC HE(HC(E0C0HHHxH肏HJHyLIz$@SHHP|HG0zxHĖH[yf.HSHH|HG0zxH脖H[kxf.HSHHG8|H|HG0zxHHH[HySwLHH8N{puHCSLHt[yfffff.SwTHH8N{KpuHCSTHt0[fyfffff.SwXHH8N{ puHCSXHt4[&yfffff.SHHH8N{ouHCHHt H[x@SHHH8N{ouHCHHt Hx[x@SHH8N{NouHCHtH,[fD1[_xfDATUHSH8N{ o]DH<^1HI ((tfA ADHH9uHUh1L1ۋpQE`t1f.UDHLHH<~T;]`rH}HHt[L]A\[[]A\nwfDSHH8N{nuHCHt ƀ[;wfUSHH]HH@0H=@PuH[]H@H[]USHH8HN{H8dH%(HD$(1mupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HiH|$LhH|$BhHD$(dH3%(uH8[]1XLvH|$H hH|$hH+bf.USHH8HN{H8dH%(HD$(1lupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H6fH|$\gH|$RgHD$(dH3%(uH8[]1W\uH|$HgH|$gH;af.SHHH|HdH%(HD$1HtXHfHHxH7uPHHxH7uLHC8HxH7uKH{(fH{yfHD$dH3%(u5H[Ht$@Ht$@Ht$Vfffff.SHH[.]fffff.UHAWAVAUATISHHHAEHHLJh|HLJxHGHGMHGHG7HG7HHdH%(HE1ZPI$DDHID$HHt@HUH`LkN{kHUHp"K}kH`7x|^H`hF|HIgLHLI7HVgH`ugHCH`HHL`OH|{LcHsHHHALc8HL$]HHxH7!HHxH7HHxH7 HCHUHJXxHLh(jH{@HAHHChHHxH7HCHHH|HLh(xH{1HAHHCpHHxH7HCHHH|HLh'H{1HAՈCxHHxH7GHCHHHXxHLh(ِH{HAՉC\HHxH7HCHHH|HLh(舐H{HAՉC`HHxH7HCHUH|HLhiH{1HAHCHHyH7GCdHCHpH@HLhLHHH0|ʏHsH@H0H ALH LZH HxH7IH0HxH7?H@HxH75fH*Ch^ff$aH,CDC`H<C@IIU1M ((t DHI9uHN{LeHPHC0LKH{xHEHHHEt@LPCDK\Sds`ARWH}LKhLCpW{HWHpPPPHpHKH0HxHDžpHDžxHCHCHSHMHEHEHxC`HpHx3`HEHx&`HPHxH7}S@Hs0H}OHEHK HUHEHEHC HC(HS(HMHEHEHx_HEHx_HC HkHH}x|HRLaEYH}Lc϶|HIWbLLQ,|H:bH}aHCH"H}cx|LXH}b |HIaLLAQ,|HaH}aHpHǃCPCTCXHǃHxCLH7 H`HxH7HEdH3%(He[A\A]A^A_]fH}HC0ix|PNH}aHs8HHVaд|H`H}`!HCHHHö|HLh(蝋H{HAՉCdHHxH7oHuFaHu8uHu*HuHuHuHuHuCHHuHuHuHu(HukHuHu~Hup1IHHxH7HpHxH7t H_0H`HxH7t H_HT\HHxH7t HpHHxH7t HpHC8HxH7t HpH{([H{[L VIHHxH7t HumHHxH7t HuPHHxH7Hu/IHHxH7IIHHxH7IHHxH7IHHxH7cvIHHxH7CVIHEHxZHPHxH7)IH HxH7t HuAH0HxH7t Hu$H@HxH7IIH}I\|vWxSGH}I\r%hIeH`I\QIIIaIyIH}Iu\ KJIHHxH7f.AUATUSHHhWTdH%(HD$X1D$9mOX1fȃ9~H|$@x|DeLRH|$@\^{HI\DLNA}HI[fLZt$f(t$UH|$@z[]@f=' '\D$H*^f(RE@ffD$(H*f.L$0\-<'f('fTf.r>f.H=CYYL$8sCf.r=f.w f.'vCHT$(|fDHT$0||@HT$8|1fTf.rf.zt{f.('z'(fWf.D$@wQf.ztg)T$L$@VL$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X|||y||jH|$@HYHEQGATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHp]HT$ LD$dH|$ H1I)HRj@HH|$ 1HJ3RHH|$0.|HT$0H7NHH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHeD$CPH|$@x|kLOH|$@Y^{HIXLZK 3|HHXfHZD$3RH|$@)XH{8N{KZuHCCPH$HD$hdH3%(Hp[]A\HCHH|$@.|HHh@߂H{fHt$@HD$@ZHxH7f.L$KPHt$@D$ `D$ DHt$D$ @D$ MDHt$@D$ D$ CDHt$0D$ D$ _DSbHHD$ HxH7t Ht$@HDNHHD$@HxH7tHt$0H|$@HVHHD$0HxH7tHt$@uHHD$@HxH7tHt$RHG0f.SHƘH`>H[f.S؈xHHHT$dH%(HD$1YHL$dH3 %(u HH[Cf.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPW^Ufffff.H?*tPHf.H9>*ufH|vWxc?fHGw,HtP}`fDHGG0Ht (PY`fHGw4Ht8P=`fDw8HHt_P`HGHHtHP_fHGHwpHtHP_@HGHt H,P_fDSHHHt~HH[H_SHGpHSHHh1ɋp藭H{HshHt[U_fffff.HGHtƀP/_SHHH|HhdH%(HD$1HtBHPHCxHxH7uFHC`HxH7uEHC HxH7uDH{KPHD$dH3%(u7H[DHt$f@Ht$V@Ht$F@fffff.SH'H[Ffffff.UHAWAVAUATISHHxAEMHhHG|HGHGHG7HG7HxHdH%(HE1C:I$DDHID$HHt@HUHN{UHUH"K}UH}7|HH}RF|HIQIuLHVQH}qQLxHHIL`9H|{L\|HHLHALc HLGHHxH7HHxH7HHxH7LxHUHJXxILp(T@HLAHHCHHHxH7LxH|LILp(q{1HLAHHCPHHxH7LxH|LILp"{1HLAֈCXHHxH7QLxHXxLILp(zHLA։C4HHxH7LxH '|LILp(zxH LA։C*ufH|vWx1fHGw,HtPGRfDHGG0Ht (P#RfHGw4Ht8PRfDw8HHtPQHGHHtHPQfHGHwpHtHPQ@HGHt H,PQfDSHHHt>HH[HYQSHGpHSHHh1ɋpGH{HshHt[Qfffff.HGHtƀPPSHHH}HhdH%(HD$1Htc4H7BHCxHxH7uFHC`HxH7uEHC HxH7uDH{AHD$dH3%(u7H[DHt$f@Ht$V@Ht$F?2fffff.SH'H[8fffff.UHAWAVAUATISHHxAEMHhHG}HGHGHG7HG7HxHdH%(HE1+I$DDHID$HHt@HUHN{GHUH"K}kGH}8|h:H}oDF|HIzCIuLHVjCH}!CLxHHIL`0+H|{L nHHLHALc HL8HHxH7HHxH7HHxH7 LxHUHJXxILp(SF@HLAHHCHHHxH7LxH|LILp(!m1HLAHHCPHHxH7LxH|LILpl1HLAֈCXHHxH7ILxHXxLILp(lHLA։C4HHxH7LxH '|LILp(7lxH LA։CHs HHV=д|H=H}|=+HuNHu@Hu2*Hu$kHuHuHu+HulHuHuEHuOHuHuHuHuHu|IHHxH7 HHxH7t Hfff.UHAWAVAUATISHHHAEHHLJ`}HLJpHLJxHGMHGHG7HG7HHdH%(HE1I$DDHID$HHt@HUH`LkN{p5HUHp"K}[5H`7}U(H`Y2F|HId1LHLI7HVN1H`1HCH`HHL`H|{L[HsHHHALc8HL&HHxH7HHxH7HHxH7HCHUHJXxHLp(94H{@HAHHCpHHxH7aHCHHH|HLp([H{1HAHHCxHHxH7HCHHH|HLpZH{1HAֈHHxH7HCHHHXxHLp(cZH{HA։C\HHxH7HCHHH|HLp(ZH{HA։C`HHxH7UIEHHH#}Lp(YHLA։CdHHxH7@IEHHH2}Lp(wYHLA։ChHHxH7HCHpH@HLh<HHH0|YHsH@H0H ALH L#H HxH7H0HxH7H@HxH75fH*Cp^/$C+H,CDC`H<C@II1M ((tf. DHI9uHN{L(/HPHC0L HHEHHHEt@HPDKDHKxS\s`PHEWLCpHpPChPCdPAQ}HpHKH0HxHDžpHDžxHCHCHSHMHEHEHx)HpHxp)HEHxc)HPHxH7S@Hs0H}HEHK HUHEHEHC HC(HS(HMHEHEHx(HEHx(HC HHH}}HRLY"H},϶|HI+LL,|Hw+H}.+HCHjH}[}L"H}, |HI)+LL~,|H +H}*HpHǃCPCTCXHǃHxCLCHH7H`HxH7 HEdH3%(iHe[A\A]A^A_]H}HC0a}H}/+Hs8HHV?*д|H-*H})HuHu:HuDHuNHuHuHuHuZHuHuxHujHu\HuNHu@Hu2cHu$mIHHxH7HpHxH7t H_H`HxH7t H_H%HHxH7t HpHHxH7t HpxHC8HxH7t Hp[H{(%H{y%LIHHxH7t Hu!HHxH7t HuHHxH7HuIHHxH7IHHxH7I{IHEHx$HPHxH7pIHHxH7SfIHHxH73FIHHxH7&H}I&}vWxHH}I&2IH@HxH7IHHxH7IH HxH7t HurH0HxH7tHuUIIBH`I&.I&I>IVIzH}I%fff.AUATUSHHhWTdH%(HD$X1D$9mOX1fȃ9~H|$@}DeLH|$@&^{HI%DLE @}HIp%fLZt$f(t$H|$@ %]@f=''\D$H*^f(:E@ffD$(H*f.L$0\-̰'f('fTf.r>f.H="YL$8sCf.r=f.w f.'vCHT$(|^fDHT$0||D@HT$8|11fTf.rf.zt{f.'z'0w(fWf.D$@wQf.ztg)T$L$L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X||胯| ||H|$@H]#H0ATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHpZ'HT$ LD$dH|$ H1I)HR HH|$ 1HJHH|$0.|HT$0H7pHH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHeD$CPH|$@}kL#H|$@)#^{HI4"L 3|HH"fHZD$H|$@!H{8N{#uHCCPH$HD$hdH3%(Hp[]A\HCHH|$@.|HHh@oLH{fHt$@HD$@ZHxH7f.L$KPHt$@D$ D$ DHt$D$ D$ MDHt$@D$ D$ CDHt$0D$ D$ _`e,HHD$ HxH7t Ht$@|HHHD$@HxH7tHt$0UH|$@H& HHD$0HxH7tHt$@%HHD$@HxH7tHt$HG0f.SHƠHH[f.SxHHHT$dH%(HD$1#HL$dH3 %(u HH[K f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfAHtG~fDGPWfffff.H@*}vWx# fSHHHt>HHH[H*SwLHH8N{ uHCSLHt[v*fffff.SwTHH8N{K uHCSTHtx[6*fffff.SwXHH8N{ uHCSXHt|[)fffff.SHHH8N{uHCHHt H[)@SHHH8N{uHCHHt H[m)@SHH8N{NuHCHtH,[fD1[/)fDATUN{SHH8 kDH<1HI ((tfA ADHH9uHSp1L1pQvC`1sht3DSDHLHH<~C`1sh9rH{HHt E[L]A\ []A\>(fDSHH8N{uHCHt ƀ[ (fUSHH HH@0H=@PuH[]H@H[]USHH8HN{H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HH|$LH|$BHD$(dH3%(uH8[]1'H|$H H|$H+f.USHH8HN{H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H6H|$\H|$RHD$(dH3%(uH8[]1,&H|$HH|$H;f.SHHHP3}HdH%(HD$1HtHHHxH7uPHHxH7uLHC8HxH7uKH{(H{yHD$dH3%(u5H[Ht$@Ht$@Ht$fffff.SHH[. fffff.USHH8N{HuH{HtH[]CDH[]$fff.UHAWAVAUATISHHHAEHHLJ`P3}HLJpHLJxHGMHGHG7HG7HdH%(HE1I$DDHID$HHt@HUHLkN{HUH "K}{H0:}uH0yF|HILLI7HVnH0"HCHHPHL`4H@|{LBHsHPH@H0ALk8H0L H0HxH7 H@HxH7x HPHxH7 HCHUH`JXxHL`(YH{ =H`AHHCpH`HxH7 HCHHp|HL`(%AH{1HpAHHCxHpHxH7\ HCHH|HL`@H{1HAԈHHxH7 HCHHXxHL`(@H{HAԉC\HHxH7HCHH|HL`(2@H{HAԉC`HHxH7fH*Cp^$H,fCDH* Qf.f(HCHH}L,HLp0?H{DHAAƉChHHxH7~Dc`1DAH@O}H@,(}H }H DH}HDH}HH@C`DchD96HPDc`[}HPh}HDHc}HvHPJDc`DcDHCHH|HDc@L`:>H{1HAHCHHyH7FCdHCH HHL`HH|=HsHHHALHLHHxH7HHxH7HHxH7YDcDfI*,J<1M J(F(t DHL9uHCDHH(xDc@C`ChH`p}H`r{HIHLHV}HIDL4}HI_Lq}HI<L}HIL}HILH`HHxH7N{LHC0L LLHHEHHHEt@HEHKdATWHpPCHS`shLKxDC\PCDPPsp36HpHKH@HxHDžpHDžxHCHCHSHMHEHEHx HpHx HEHx H HxH7pShHs0H}SDmHEHK HUHEHEHC HC(HS(HMHEHEHxp HEHxc HC HHH}}HRHIH}.}HLH`,|HH}HCH[HH}}IH}|HLH,|HrH}IH HǃCPCTCXHǃHxCLH7 HHxH7HEdH3%(He[A\A]A^A_]DH}}H}Hs8HHV д|HH}y +@1ADfHCHHö|HL`(]8H{HAԉCdHHxH7/Hu!HuHuHuHuHuDshpHu%HuCHHuHuSHurHudHuVHuH_Hu:Hu,HupHuzvf(VH0I H HxH7t HHHxH7t HHHHxH7t H HHxH7t H bHC8HxH7t H EH{(H{LI5IMIeIH}I IHHxH7HuHPI IHEHxH HxH7H@I H}Iq ~-}vWxH}IG TIHPHxH79EIHHxH7%IHHxH7IHHxH7IHHxH7IHpHxH7IH`HxH7yIHHxH7YeuIH0HxH7t HuH@HxH7HuIH`IHHxH7IIHHxH7IHHxH7t HuHHxH7Hu`IfDAUATUSHHhdH%(HD$X1GTD$9OX1fʃ9~H|$@.}DeLH|$@ ^{HIDLA}HIfLZt$f(t$H|$@ED1f=!'uh'\D$H*^f(EDffD$(H*ȋEhH*^ff.L$0]-5'f('fTf.r?f.H=<YL$8sDf.r>f.w f.'vDHT$(|ǒHT$0||謒@HT$8|虒1fTf.rf.zt{f. 'zx'Y(fWf.D$@wQf.ztg)T$L$8L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X|||q||bH|$@HH=ATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHp HT$ LD$dH|$ H1I)HRZHH|$ 1HJ#HH|$0.|HT$0H7HH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHED$CPH|$@}kLH|$@^{HILJ 3|HHufHZD$#H|$@H{8N{;uHCCPHlHD$hdH3%(Hp[]A\HCHH|$@.|HHh@.H{fHt$@HD$@ZHxH7f.L$KPHt$@D$ PD$ DHt$D$ 0D$ MDHt$@D$ D$ CDHt$0D$ D$ _HHD$ HxH7t Ht$@H4HHD$@HxH7tHt$0H|$@HHHD$0HxH7tHt$@eHHD$@HxH7tHt$BHG0f.SHƠHPH[f.S(xHHHT$dH%(HD$1HL$dH3 %(u HH[f.HVHHHVHHWtBÐfAHtG~fDGPWfffff.H@B}vWxfHGw|HtP fDHGHt0P @HGHt4Pj @HGHHtHPH fHGHHtHxP( fHGHt H,P fDSHHHtn_HH[H SHHHp`=H{HHt[^ @HGHtƀP USHHHH@0H=@PuH[]H@H[]ATLfhUSHHN{LH dH%(HD$1uMHU HttHHPHE(HHHCt@HL$dH3 %(HH []A\f^LSu'HE@HHEHHHCuf1@{Lu'HEPHHEXHHCrqf.Hs3}HHuhHHVд|HHwHHC >HHSHf.ATLghUSHHN{LH0dH%(H$(1;HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11H?H|$H|$H$(dH3%(H0[]A\^L+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11H|$(*H|$8 HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@AH|$HH|$XHC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E11xH|$hH|$xHCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11H$H$@1M{LCHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E112H$H$HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$AH$3}HHIHshHHVYд|HGHo11R11z1rH$H H$H(H$HH}HH$HH$HH$HH$HH|$HHH|$XvHHHHH$HKH$>HfH|$hH)H|$xHGH|$(H H|$8H(H|$HH|$H ATLghUSHHN{LH0dH%(H$(1{HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11HH|$%H|$H$(dH3%(H0[]A\^L+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11DH|$(jH|$8`HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@AH|$HH|$XHC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E118H|$h^H|$xTHCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11H$H$@1M{LHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11H$H$HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$AYH$|H$oHC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11H$H$HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11H H$CH}:D1bf1f1if1.f1fH$^3}HHHshHHVд|HH?o11R11z1H$HMH$@HhH$H(H}HGH$HH$H"H$HH$HH|$HHH|$XHHHSHH$HH$~HH|$hHiH|$x_HH|$(HJH|$8@HhH|$H+H|$!HISHHHI}HdH%(HD$1HtHHHxH7upHHxH7ulHChHxH7ukH{XH{HH{8H{(wH{nHD$dH3%(u:H[Ht$V@Ht$F@Ht$6fffff.SHH[fffff.HHtMPfff.UHAWAVAUATISHHHAEHHLJ8I}HLJHHLJPHLJXMHLJ`HLJhHLJpHLJxHGHGHGHG7HG7H(dH%(HE1I$DDHID$HHt@HUH@LkN{qHUHP"K}\H0:3}VH0ZF|HIeL(LI7HVOH0HCH@HHL`Hp|{LHsHHpH`ALkhH`LH`HxH7HpHxH7HHxH7HCLeHJXxLHLp(7H{@HAHHHHxH7HCH(H|HLp(H{1HAHHHHxH7;HCH(H|HLpH{1HAֈHHxH7^HCH(HXxHLp([H{HA։HHxH7HCH(H|HLpH{1HAHCxHyH7ǃHCHPHHLpH(H|HsHHHALHLRHHxH7HHxH7HHxH7fH*^'H,CtCpH<I1M ((t@ DHI9uH HHC`LHHEHHHEt@H CtLWVH@sxLATVPP DH@HKH0HHHDž@HDžHHCHCHSHMHEHEHxH@HxI|$H HxH7USpHs`HPHPHK HXHDžPHDžXHC HC(HS(HMHEHEHxHPHxuHC H%HH`3}HRLdH`϶|HILLg,|HH`HCHH}e3}LH} |HILL,|HH}>^LaHpYHpHK@HxHDžpHDžxHC@HCHHSHHMHEHEHx$HpHxH}HEHK0HUHEHEHC0HC8HS8HMHEHEHxHEHx{LHPHǃǃǃǃHǃHxC|H7H@HxH7HEdH3%(?He[A\A]A^A_]f.HCH(Hö|HLp(H{HA։HHxH7HufDH}NHEHKPHUHEHEHCPHCXHSXHMHEHEHxbHEHxULXHEHK0HUHEHEHC0HC8HS8HMHEHEHx I|$UHuHuHu(HuqHuHu.Hu8HuBHuHu4HuwHuiCxDHuWHuIIHHxH7t Hu$HHxH73HPHxH7t H?H@HxH7t H?HHHxH7t HPHHxH7t HPHChHxH7t HPcH{XJH{HAH{88H{(/H{&LNIH`HxH7t HuHpHxH7t HuHHxH7HuIIHHxH7gHuYIHHxH7sH}I`H`IGE}vWxZIHHxH7AIHHxH7!uI|$IH HxH7IIH0ILIIIIIHHxH7`IHHxH7@nIHHxH7 NfDAUATUSHHhdH%(HD$X1D$9b1ȃ9~H|$@3}De|oH|$@u^{HIDL5A}HI`fLZt$f(t$H|$@]pf=j'j'\D$H*^f(*EpffD$(H*f.L$0sX-j'f(tj'fTf.r:f.H=XL$8s?f.r9f.w f. j'v?HT$(|RjfHT$0||uHCHtH,[fD1[fDSHH8N{uHCHt ƀ[fUSHHHH@0H=@PuH[]H@H[]SbHdH%(HD$1@HH8atCHHxH7t㺠AHtIPЅHt$H+H8aufHD$dH3%(uH[f.PJHfffff.SaHdH%(HD$1@HHx_tCHHxH7t㺠AHtIPЅHt$H{Hx_ufHD$dH3%(uH[f.PJHfffff.USHH8HN{H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H&H|$H|$HD$(dH3%(uH8[]1/8H|$HH|$Hf.USHH8HN{H8dH%(HD$(1&upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HH|$H|$HD$(dH3%(uH8[]1?HH|$HH|$Hf.SHHHe}HdH%(HD$1HtpHDHHxH7uPHHxH7uLHC8HxH7uKH{(H{HD$dH3%(u5H[Ht$@Ht$@Ht$v?fffff.SHH[fffff.HHtR2Pfff.UHAWAVAUATISHHHAEHHLJhe}HLJxHGHGMHGHG7HG7H8dH%(HE1躹I$DDHID$HHt@HUHPLkN{CHUH`!K}.HP58J}(HP,F|HI7L8LI7HV!HPHCHPHHL`H|{LHsHHHpALk8HpLHpHxH7HHxH7HHxH7HCHUHJXxHL`( H{ =HAHHChHHxH7zHCH8H|HL`(H{1HAHHCpHHxH77HCH8H|HL`H{1HAԈCxHHxH7HCH8HXxHL`(9H{HAԉC\HHxH7HCH8H|HL`(H{HAHC`HyH7qH`C`C8J}A޻H`0J}HI8J}L{IcL09K}H^H`HCH8H|HL`H{1HAHCHHyH7lCdHCH`H0HL`ǵH8H |HsH0H HALHL]HHxH7H HxH7:H0HxH7^fH*Ch^(H,fCDH*Y(D,DC`H<C@I1M ((t DHI9uHN{LH@HC0LyH{xHEHHHEt@H@K\Sds`LKhPHEWLCpHpPCHPCDPAT(HpHKH0HxHDžpHDžxHCHCHSHMHEHEHxHpHxHEHxH@HxH7}S@Hs0H}nHEHK HUHEHEHC HC(HS(HMHEHEHxqHEHxdHC HHH}8J}HRLmH}϶|HILL\,|HH}HCHH}n8J}LH} |HILL,|HH}6H`HǃCPCTCXHǃHxCLH7)HPHxH7HEdH3%(He[A\A]A^A_]fH}HC0s8J}H}Hs8HHVд|HH}\!HCH8Hö|HL`(MH{HAԉCdHHxH7JHu>Hu0C`~IHHxH7H`HxH7t HOHPHxH7t HOHHHxH7t H`HHxH7t H`HC8HxH7t H`dH{(H{L躾IHpHxH7t Hu*HHxH7t Hu HHxH7HuIHHxH7IHHxH7I{IHEHxH@HxH7pH`I\ZIHHxH7?RIHHxH72H}I \}vWxmH}IIH0HxH7IHHxH7IHHxH7t HuH HxH7tHujIINHPI<:I2IJIbIH}I IHHxH7AUATN{USHH8HhdH%(HD$X1t!HD$XdH3%(Hh[]A\A]fHC{LHHD$7HhHD$@HpHT$LD$TH|$H1I)HR[H|$ N{1%HH|$ KK}HT$ H7ҹHH{Ht$0HT$0H71AHD$0HxH7HD$ HxH7HD$HxH7kDH<q1HI (ݍ(tA ADHH9uHHDChAE1L1NjH! C`ZYt1DSDHLHHf.H=CXL$8sCf.r=f.w f.L'vCHT$(|LfDHT$0||L@HT$8|L1fTf.rf.zt{f.(L'zL'(fWf.D$@wQf.ztg)T$L$@L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X||K|yJ||jJH|$@HͿHE蠭ATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHpHT$ LD$dH|$ H1I)HRjHH|$ 1HJ3HH|$0.|HT$0H7HH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHeD$CPH|$@8J}kL蓵H|$@虿^{HI褾LZ 3|HH腾fHZD$3H|$@)H{8N{KuHCCPH HD$hdH3%(Hp[]A\HCHH|$@.|HHh@H{fHt$@HD$@ZHxH7f.L$KPHt$@D$ pD$ DHt$D$ PD$ MDHt$@D$ 0D$ CDHt$0D$ D$ _ЪHHD$ HxH7t Ht$@HDHHD$@HxH7tHt$0H|$@H薼HHD$0HxH7tHt$@HHD$@HxH7tHt$bHG0f.SHƘH`H[f.SPxHHHT$dH%(HD$1HL$dH3 %(u HH[軩f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfAHtG~fDGPW^fffff.S|HdH%(HD$1@HH8{t+HHxH7tHt$HuH8{u@HD$dH3%(uH[蝨ffff.S~HdH%(HD$1@HH|t+HHxH7tHt$HH|u@HD$dH3%(uH[fff.H@i}vWx蓤fSHHHt>HH[H SwHHH8N{uHCSHHt[fffff.SwPHH8N{軻uHCSPHt0[fffff.SwTHH8N{{uHCSTHt4[Pfffff.SHHH8N{7uHCHHt H[@SHHH8N{uHCHHt H[@SHH8N{辺uHCHtH,[fD1[fDSHH8N{~uHCHt ƀ[UfATUSHHf}H0CLoHH|$D$ dH%(HD$(1H|$ ^{HILʪ 3|HHfHZD$ 裱H|$虷H{8N{軹uHCCLHt&$HD$(dH3%(u H0[]A\3pH|$HAH蹮USHH8HN{H8dH%(HD$(16upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HFH|$H|$HD$(dH3%(uH8[]1OH|$H譳H|$裳H˭f.USHH8HN{H8dH%(HD$(1FupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HֱH|$H|$HD$(dH3%(uH8[]1_H|$H轲H|$賲H۬f.SHHHu}HdH%(HD$1Ht萤HHtHSHHxH7uOHHxH7uKHC8HxH7uJH{(H{HD$dH3%(u4H[fHt$&@Ht$@Ht$Offfff.SHH[龨fffff.HHtPNfff.fÐf.UHAWAVAUATISHHHAEHHLJ`u}HLJpHLJxHGMHGHG7HG7HHdH%(HE1跛I$DDHID$HHt@HUH`LkN{@HUHp!K}+HP6Hf}%HP)F|HI4LHLI7HVHPҲHCH`HHL`H|{LHsHHHALc8HL聨HHxH7 HHxH7HHxH7 HCHUHJXxHLh( H{ =HAHHChHHxH7HCHHH|HLh(H{1HAHHCpHHxH7HCHHH|HLhH{1HAՈCxHHxH7FHCHHHXxHLh(6H{HAՉCXHHxH7HCHHH|HLh(H{HAHC\HyH7t{H`C\DHf}AߝH`胱0J}HI莰8J}L|IcL19K}HDH`HCHHHö|HLh(H{HAՉC`HHxH7HCHpH0HLhٗHHH |HsH0H HALHLoHHxH7H HxH7H0HxH7{fH*Ch^ (H,Ds\ADCDIJ<Ds@訠1M [(W(t DHI9uDs@HJ<d1M ((tD DHI9uHN{L耰L@HC0LL^H{xHEHHHEt@HEHKXATWHpPCDS`s\LKhLCpPDP׶HpHKH0HxHDžpHDžxHCHCHSHMHEHEHxڪHpHxʪHEHx轪H@HxH7S@Hs0H}UHEHK HUHEHEHC HC(HS(HMHEHEHxXHEHxKHC HHH}Hf}HRLcܣH}϶|HILLC,|H趡H}荬HCHH}eHf}LvH}} |HI般LLݛ,|HPH}'HpHǃCLCPCTHǃHxCHH7OH`HxH7EHEdH3%(@He[A\A]A^A_]H}HC0kHf}H}藬Hs8HHV觫д|H蕫H}L HuHuHuHuHu)HulHuzHulHu^C\/HuMHu?cHu1mHu#wHuHuMIHHxH7HpHxH7t H_H`HxH7t H_HVHHxH7t HpvHHxH7t HpVHC8HxH7t Hp9H{(H{LIHHxH7t HuHHxH7t HuHHxH7HuIIHHxH7H`IIHHxH7IHHxH7lIHEHxH@HxH7BUIHHxH7t HuH HxH7t HuH0HxH7IIH}Il}vWx聒H}I IIHHxH7vIHHxH7ViIH}I菧8HPI{$II4ILfffff.USHH8N{HxdH%(HD$h1Yt%HD$hdH3%(Hx[]f.HC{HHHD$ 7HhHD$PHp+HT$ LD$dH|$ H1I)HRˍH|$ N{1蕟HH|$0KK}HT$0H7BHH{Ht$@HT$@H71HL$@HyH7HL$0HyH7HL$ HyH7H1BfT$PD$RHHDChE1ɋHjHt$`H1CD$bfL$`HHt$`DChE1ɉH$H{HAXHHAYl`DHt$D$D$Ht$@D$D$Ht$@D$D$@HHD$ HxH7t Ht$@HwHHD$0HxH7tHt$@fHHD$@HxH7tHt$EHG0f.SHƠHH[f.S؉xHHHT$dH%(HD$1YHL$dH3 %(u HH[f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfAHtG~fDGPW龣fffff.H}vWxfSHHHtHH[H蟰SwLHH8N{[uHCSLHt[dfffff.SwTHH8N{uHCSTHtx[$fffff.SwXHH8N{ۤuHCSXHt|[fffff.SHHH8N{藤uHCHHt H[蛯@SHHH8N{WuHCHHt H[[@SHH8N{uHCHtH,[fD1[fDSHH8N{ޣuHCHt ƀ[fUSHH蠓HH@0H=@PuH[]H@H[]SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H HufHD$dH3%(uH[f.PJH莎fffff.SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H[HufHD$dH3%(uH[f.PJHލfffff.USHH8HN{H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HH|$謜H|$袜HD$(dH3%(uH8[]1蚬H|$HmH|$cH苖f.USHH8HN{H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H薚H|$輛H|$貛HD$(dH3%(uH8[]1誫H|$H}H|$sH蛕f.SHHH}HdH%(HD$1HtPH$HHxH7uPHHxH7uLHC8HxH7uKH{(H{ٚHD$dH3%(u5H[Ht$@Ht$@Ht$vfffff.SHH[鎑fffff.USHH8N{H'uH{HtH[]DH[]"fff.UHAWAVAUATISHHHAIHHLJ`}HLJpHLJxHGEHGHG7HG7LdH %(HM1gHDDHHHAHHt@HUH LkN{HUH0!K}֟H068v}ВH0ԜF|HIߛI4$LHVϛH0胛HCH H`HH@I蒃HP|{LnHsH`HPH@ALk8H@L/H@HxH7k HPHxH7 H`HxH7 HCHUHpJXxHH@(I贞H{ =HpAHHCpHpHxH7 HCH|LHH@(IH{1HAHHCxHHxH7Q HCH|LHH@I1H{1HA׈HHxH7 HCHXxLHH@(IH{HA։C\HHxH7HCH|LHH@(IH{HA׉C`HHxH7fH*Cp^9~( H,fCDH*Y!~(,H}L扅HCHLp(H{HAHChHyH7|Ds`D<1DA9H@U8v}H@蒙8(}HH虘H }胘HD4}HI_DL}HBH@KhC`D4D9HPDs`a8v}0HPԘ0J}HIߗ8J}L͗DL肊9K}H谗HPdDs`DHCH|LHDs@LpUH{1HAHCHHyH72CdHCH0HHLp H|LHsHHHALHL觌HHxH7eHHxH7HHxH7'DcDJ<1M ((t DHL9uHCDH`w8v}Dc@C`ChH`}HIDL褈}HIϕL}HI謕L^}HI艕L;}HIfLH` N{L/HC0L LL }HHEHHHEt@HEHKdATWHpPCHS`shLKxDC\PCDPPsp軺HpHKH@HxHDžpHDžxHCHCHSHMHEHEHx~HpHxnHEHxaH HxH7S@Hs0H}HEHK HUHEHEHC HC(HS(HMHEHEHxHEHxHC HHH}8v}HRL耊H}臔.}HI蒓LL,|HuH},HCH:H}8v}LH}v}HI'LL|,|H H}H0HǃCPCTCXHǃHxCLH7H HxH7HEdH3%(bHe[A\A]A^A_]DH}8v}H}7Hs8HHVGд|H5H}&1ADfHCHö|LHLp(ѼH{HA։CdHHxH7HuzHunHuHuCH=HunHu`ChsHuOHuAHu3Hu%Hu_Hu HuHu%HugHu%HuIHHxH7H0HxH7t HH HxH7t HcHwHHxH7t H07HHxH7t H0HC8HxH7t H0H{(H{L0IHPHxH7t HuH`HxH7HuIHHxH7IHHxH7IHHxH7t Hu@HHxH7tHu#IH`IݎeH@IɎQH}I踎@IHHxH7%IHHxH7IHHxH7IHpHxH7IH@HxH7kHu?]IHHxH7|r{6HPIэYIHEHx H HxH71'H}I蓍@}vWxwIH0I^IIII2H}I-IHHxH7AUATN{USHH8HhdH%(HD$X1t!HD$XdH3%(Hh[]A\A]fHC{LHHD$7HhHD$@HpېHT$LD$TH|$H1I)HR{sH|$ N{1EHH|$ KK}HT$ H7HH{Ht$0HT$0H71AHD$0HxH7HD$ HxH7HD$HxH7 DcDJ<}1MH (|(tfDLDHI9uHHDCpAE1HE1NjHACh1ҍ C`ZYtDf.SDDHHAHH<\sCh1ҍ C`D9wH{HHtDHYzHt$ Ht$0Ht$0xHHD$HxH7t Ht$0HHHD$ HxH7tHt$0HHD$0HxH7tHt$tfAUATUSHHhdH%(HD$X1GTD$9OX1fʃ9~H|$@A8v}DeLH|$@^{HIDL|A}HIfLZt$f(t$脃H|$@zED1f='uh'\D$H*^f(裀EDffD$(H*ȋEhH*^ff.L$0]-%'f('fTf.r?f.H=,XL$8sDf.r>f.w f.p'vDHT$(|HT$0||@HT$8|1fTf.rf.zt{f.'zh''fWf.D$@wQf.ztg)T$L$(L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X|||a||RH|$@H赇H-uATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHp誋HT$ LD$dH|$ H1I)HRJnHH|$ 1HJHH|$0.|HT$0H7|HH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHED$CPH|$@8v}kLs}H|$@y^{HI脆L:y 3|HHefHZD$H|$@ H{8N{+uHCCPHlHD$hdH3%(Hp[]A\HCHH|$@.|HHh@述H{fHt$@HD$@ZHxH7f.L$KPHt$@D$ pD$ DHt$D$ PD$ MDHt$@D$ 0D$ CDHt$0D$ D$ _r!HHD$ HxH7t Ht$@H$|HHD$@HxH7tHt$0H|$@HvHHD$0HxH7tHt$@HHD$@HxH7tHt$bHG0f.SHƠH@lH[f.S8xHHHT$dH%(HD$1هHL$dH3 %(u HH[qf.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfAHtG~fDGPW>fffff.H}vWxsmfSHHHtqHH[HmSwLHH8N{ۄuHCSLHt[2fffff.SwTHH8N{蛄uHCSTHt0[fffff.SwXHH8N{[uHCSXHt4[貏fffff.SHHH8N{uHCHHt H[i@SHHH8N{׃uHCHHt H[)@SHH8N{螃uHCHtH,[fD1[fDSHH8N{^uHCHt ƀ[跎fUSHH sHH@0H=@PuH[]H@H[]SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H苀HxufHD$dH3%(uH[f.PJHnfffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HHufHD$dH3%(uH[f.PJH^mfffff.USHH8HN{H8dH%(HD$(1vupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H}H|$,|H|$"|HD$(dH3%(uH8[]1lhH|$H{H|${H vf.USHH8HN{H8dH%(HD$(1膀upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HzH|$<{H|$2{HD$(dH3%(uH8[]1kxH|$HzH|$zHuf.SHHHP}HdH%(HD$1HtlHzHHxH7uPHHxH7uLHC8HxH7uKH{(bzH{YzHD$dH3%(u5H[Ht$@Ht$@Ht$vjfffff.SHH[qfffff.HHtmP fff.UHAWAVAUATISHHHAEHHLJ`P}HLJpHLJxHGMHGHG7HG7H8dH%(HE1dI$DDHID$HHt@HUHPLsN{HUH`!K}HP5}rHP|F|HI{L8LI7HV~{HP2{HCHPHHL`DcH|{L HsHHHpALk8HpLpHpHxH7@HHxH76HHxH7,HCHUHJXxHL`(i~H{ =HAHHCpHHxH7HCH8H|HL`(5H{1HAHHCxHHxH7HCH8H|HL`H{1HAԈHHxH7cHCH8HXxHL`(蓤H{HAԉC\HHxH7 HCH8H|HL`(BH{HAHC`HyH7H`C`C}A8fH`y0J}HIx8J}LxIcLk9K}HxH`lxIH8H#}L`(mHLAԉCdHHxH7RIH8H2}L`(!HLAԉChHHxH7HCH`H0HL`_H8H |辢HsH0H HALHL|mHHxH7H HxH7RH0HxH7HfH*Cp^\(tL,C`ADcDH<C@Ih1M ((t DHI9uHN{LxH@HC0L^HHEHHHEt@H@HKxS\s`LCpEPHEWHpAPChPCdPCDP(bHpHKH0HxHDžpHDžxHCHCHSHMHEHEHx+sHpHxsHEHxsH@HxH7S@Hs0H}bHEHK HUHEHEHC HC(HS(HMHEHEHxrHEHxrHC HPHH}}HRLd-lH}4v϶|HI?uLLd,|H"uH}tHCHH}f}LkH}u |HItLL)d,|HtH}ntH`HǃCPCTCXHǃHxCLCHH7HPHxH7HEdH3%(QHe[A\A]A^A_]fDH}HC0l}0aH}tHs8HHVsд|HsH}sHu.Hu HuHuHu HuLHuHuHuC`HuHuHuHuHuuHugHuYP`IHHxH7t Hu/HHxH7H`HxH7t HOHPHxH7t HOHkoHHxH7t H`HHxH7t H`HC8HxH7t H`nH{(oH{nL$iIHHxH7t Hu4H HxH7t HuH0HxH7HuH`I2qIHHxH7H}Iq~IHHxH7xIHHxH7[nIHHxH7;NIHHxH7.IHEHxmH@HxH7IIIHHxH7IHHxH7H}Io}vWxVZIOHPIoSIKIcI{IH}Io"IHpHxH7HuAUATN{USHH8HhdH%(HD$X1eqt!HD$XdH3%(Hh[]A\A]fHC{LHHD$7HhHD$@Hp;sHT$LD$TH|$H1I)HRUH|$ N{1gHH|$ KK}HT$ H7RdHH{Ht$0HT$0H71AHD$0HxH7HD$ HxH7HD$HxH7kDH<_1HI !((tA ADHH9uHHDCpAE1L1NjH衳C`ZYt1DSDHLHHf.H=iXL$8sCf.r=f.w f.&vCHT$(|NfDHT$0||4@HT$8|!1fTf.rf.zt{f.&z& 'fWf.D$@wQf.ztg)T$L$fL$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X||s|||H|$@HMjHa XATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHpJnHT$ LD$dH|$ H1I)HRPHH|$ 1HJbHH|$0.|HT$0H7`_HH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHeD$CPH|$@}kL`H|$@j^{HI$iL[ 3|HHifHZD$bH|$@hH{8N{juHCCPH$HD$hdH3%(Hp[]A\HCHH|$@.|HHh@_H{fHt$@HD$@ZHxH7f.L$KPHt$@D$ D$ DHt$D$ pD$ MDHt$@D$ PD$ CDHt$0D$ 0D$ _PUuHHD$ HxH7t Ht$@H^HHD$@HxH7tHt$0H|$@HgHHD$0HxH7tHt$@HHD$@HxH7tHt$HG0f.SHƠHNH[f.SxHHHT$dH%(HD$1yjHL$dH3 %(u HH[;Tf.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfAHtG~fDGPWefffff.H@}vWxPfSHHHt讯HH[H[sSwHHH8N{{guHCSHHt[ sfffff.SwPHH8N{;guHCSPHt0[rfffff.SwTHH8N{fuHCSTHt4[rfffff.SHHH8N{fuHCHHt H[Wr@SHHH8N{wfuHCHHt H[r@SHH8N{>fuHCHtH,[fD1[qfDSHH8N{euHCHt ƀ[qfUSHHUHH@0H=@PuH[]H@H[]SвHdH%(HD$1@HHxβtCHHxH7t㺠AHtIPЅHt$H+cHxβufHD$dH3%(uH[f.PJHPfffff.SѲHdH%(HD$1@HH8вtCHHxH7t㺠AHtIPЅHt$H{bH8вufHD$dH3%(uH[f.PJHOfffff.USHH8HN{H8dH%(HD$(1dupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H&`H|$^H|$^HD$(dH3%(uH8[]1/OVoH|$H^H|$^HXf.USHH8HN{H8dH%(HD$(1&cupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H\H|$]H|$]HD$(dH3%(uH8[]1?NfnH|$H]H|$]HWf.SHHH}HdH%(HD$1HtpOHD]HHxH7uPHHxH7uLHC8HxH7uKH{(]H{\HD$dH3%(u5H[Ht$@Ht$@Ht$v?Mfffff.SHH[Sfffff.UHAWAVAUATISHHHAEHHLJh}HLJxHGHGMHGHG7HG7HHdH%(HE1FI$DDHID$HHt@HUH`LkN{cbHUHp!K}NbHP6}HUHPL_F|HIW^LHLI7HVA^HP]HCH`HHL`FH|{LHsHHHALk8HLSHHxH7HHxH7HHxH7HCHUHJXxHL`(,aH{ =HAHHChHHxH7HCHHH|HL`(H{1HAHHCpHHxH7YHCHHH|HL`觇H{1HAԈCxHHxH7HCHHHXxHL`(YH{HAԉCXHHxH7HCHHH|HL`(H{HAHC\HyH7H`C\D}AHH`\0J}HI[8J}L[IcLPN9K}H~[H`2[HCHHHö|HL`(/H{HAԉC`HHxH7HCHpH0HL`BHHH |˅HsH0H HALHLPHHxH7YH HxH7OH0HxH7EfH*Ch^'?(WL,C\ADcDH<C@IK1M 7(3(tD DHI9uHN{L[H@HC0LAH{xHEHHHEt@H@HAKXS`PHEWs\LKhHpPCDLCpPATHpHKH0HxHDžpHDžxHCHCHSHMHEHEHx8VHpHx(VHEHxVH@HxH7S@Hs0H}EHEHK HUHEHEHC HC(HS(HMHEHEHxUHEHxUHC HHH}}HRLc:OH}AY϶|HILXLLG,|H/XH}WHCHH}e}LNH}X |HIWLL6G,|HWH}{WHpHǃCLCPCTHǃHxCHH7SH`HxH7IHEdH3%(DHe[A\A]A^A_]H}HC0k}@DH}WHs8HHVVд|HVH}VHuHuHu HutHufVHuXHuJHu<Hu.C\\Hu'HuHuHuHuHuCIHHxH7HpHxH7t H_H`HxH7t H_rHRHHxH7t HpFHHxH7t Hp&HC8HxH7t Hp H{(@RH{7RL_LIHHxH7t HuHHxH7t HuHHxH7HuIIHHxH7H`IKTIHHxH7IHHxH7lIHEHxLQH@HxH7BUIHHxH7t HuH HxH7t HuH0HxH7IIH}IoS}vWx=H}IES-aIIHHxH7vIHHxH7ViIH}IR8HPIR$II4ILfffff.AUATN{USHH8HhdH%(HD$X1Tt!HD$XdH3%(Hh[]A\A]fHC{HHHD$7HhHD$@Hp{VHT$LD$TH|$H1I)HR9H|$ N{1JHH|$ KK}HT$ H7GHH{Ht$0HT$0H71AHD$0HxH7HD$ HxH7HD$HxH7kDH<1C1HI }(}(tA ADHH9uHHDChAE1L1NjHC\ZYt1DSDHLHH<9S\9wH{HHtDL@1Ht$Ht$0Ht$0P>]^HHD$HxH7t Ht$0\HGHHD$ HxH7tHt$03HHD$0HxH7tHt$AUATUSHHhWPdH%(HD$X1D$9mOT1fȃ9~H|$@}DeHFH|$@P^{HIODLuBA}HIOfLZt$f(t$DIH|$@:O]@f=&&\D$H*^f(jFE@ffD$(H*f.L$0\-&f(&fTf.r>f.H=MXL$8sCf.r=f.w f.G&vCHT$(|fDHT$0||t@HT$8|a1fTf.rf.zt{f.&z@&`'fWf.D$@wQf.ztg)T$L$JL$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X|||9||*H|$@HMHE`;ATUSHHpdH%(HD$h1HGHD$HHD$ 7Hh@HD$PHpQHT$ LD$dH|$ H1I)HR*4HH|$ 1HJEHH|$0.|HT$0H7BHH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7\f.zHeD$CLH|$@}kHSCH|$@YM^{HIdLL? 3|HHELfHZD$EH|$@KH{8N{ NuHCCLH%$HD$hdH3%(Hp[]A\HCHH|$@HHh@3H|$@.|0AH{fHt$@HD$@ZHxH7f.L$KL@Ht$@D$ D$ DHt$D$ D$ =DHt$@D$ D$ 3DHt$0D$ D$ ^8XH|$@HJHBHHD$@HxH7tHt$0wHHD$0HxH7t Ht$@THD$ HxH7tHt$@8HHHD$@HxH7tHt$f.@HG0f.SHƘH2H[f.SxxHHHT$dH%(HD$1MHL$dH3 %(u HH[[7f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWHfffff.H@}vWx33fSHHHt>HH[HVSwLHH8N{JuHCSLHt([Vfffff.SwTHH8N{[JuHCSTHt8[NVfffff.SwXHH8N{JuHCSXHt<[Vfffff.SHHH8N{IuHCHHt H[U@SHHH8N{IuHCHHt H[U@SHH8N{^IuHCHtH,[fD1[GUfDAUATN{USHH8HdH%(HD$1ImkDH<81HI ((tA ADHH9ukDH<J81HI z(v(tALADHH9uH%=5XVKhHE1Lˬ&C`tn1 f;k`s`SDHLHH<.H5Xu‹SDHLHH<-;k`rH{HHHxL4L4HD$dH3%(H[]A\A]Ð5ID$Vf $KhE1HLΫHD$5QKhf4$E1HLP襫SDHLH-H%=5X SDHLH,x2RfSHH8N{FuHCHt ƀ[RfUSHHp6HH@0H=@PuH[]H@H[]SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HCHufHD$dH3%(uH[f.PJH^1fffff.SHdH%(HD$1@HH8tCHHxH7t㺠AHtIPЅHt$H+CH8ufHD$dH3%(uH[f.PJH0fffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H{BHufHD$dH3%(uH[f.PJH/fffff.SHHHP}HdH%(HD$1HtP1HHt?1H?HHxH7uOHHxH7uKHC8HxH7uJH{(>H{>HD$dH3%(u4H[fHt$F@Ht$6@Ht$&/fffff.SHH[~5fffff.HHtBP,Offf.UHAWAVAUATISHHHAIHHLJPP}HLJ`HLJhHLJpEHLJxHG7HG7LdH %(HM1(HDDHHHAHHt@HUH0LkN{DHUH@!K}CHp=8}6Hp@F|HI?I4$LHV?Hp?HCH0HHH@I'Hp|{LjHsHHpH`AHC8H`HIF5H`HxH7# HpHxH7`HHxH7VHCHUHJXxHLh(BH{HHAHHChHHxH7HCH|LHLh(iH{1HAHHCpHHxH7HCH|LHLhQiH{1HAՈCxHHxH7HCHXxLHLh(iH{HAՉC\HHxH7YHCH}LHLh(hH{1HAՉHHxH7HCH }LHLh(mhH{1HAՉHHxH7HCH|LHLh( hH{HAHC`HyH79H}C`R8}3H}=@0}HHUH@*{9>HsHPH@HPAH@HxH7 HPHxH7HPHxPxHP(+HP85N{L;HC0H`LDDD!H{xHEHHHEt@L`HCDAWAVAUARWH}K\Sds`W{HLKhLCpWH}PPVHEHKHPHUHEHEHCHCHSHMHEHEHx%6HEHx6HEHx 6H`HxH7tHPHǃCPCTCXHǃHxCLCHH7LH@HxH7H0HxH7HEdH3%(QHe[A\A]A^A_]H}s8}X%H}8Hs8HHV8д|H7H}7  >YfH}C`L8}.H}8B}H7H}R73}@:~7@:8fHu~HP#8XNƃBHuHuHunHuxHuHutHuHuHuqHucHuUZHuGHu9Hu+HuHuHuC`7HuHuIHHxH7t HPHC8HxH7t HPH{(2H{2L-IHHxH7H@HxH7t H/HH0HxH7t H/(H|2HHxH7*HPIH`HxH7t HuHpHxH7t HuHHxH76Hu(IHHxH7 IHHxH7IHHxH7IH0HxH7{IHHxH7[IHHxH7v;IHHxH7VIHEHx 1H`HxH7t HuHPHxH7 HukIHHxH7IHHxH7t Hu&H HxH7HuIIH@HxH7t HuHPHxH7[ II% IIHpI2 II0IHH}It2H}Ic2H}IR211}1 AUATUSHHhWTdH%(HD$X1D$9eOX1fȃ9~H|$@08}DeL(H|$@2^{HI1DL$A}HI1fLZt$f(t$t+H|$@j1]@f=&&\D$H*^f((E@ffD$(H*f.L$0sX-0&f(&fTf.r:f.H=7/XL$8s?f.r9f.w f.{&v?HT$(|¼fHT$0||謼@HT$8|虼1fTf.rf.zt{f. &zx&'fWf.D$@wQf.ztg)T$L$8,L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@X|||q||bH|$@H/H='ATUSHHpdH%(HD$h1HGLD$HHD$ 7Hh@HD$PHp3HT$ LD$dH|$ H1I)HRZHH|$ 1HJ#(HH|$0.|HT$0H7$HH{Ht$@fHT$@H7HD$@ZHxH7HD$0HxH7HD$ HxH7Lf.zHeD$CPH|$@8}kL%H|$@/^{HI.LJ! 3|HHu.fHZD$#(H|$@.H{8N{;0uHCCPH(HD$hdH3%(Hp[]A\HCHH|$@.|HHh@XH{fHt$@HD$@ZHxH7f.L$KPHt$@D$ @D$ DHt$D$ D$ MDHt$@D$ D$ CDHt$0D$ D$ _;HHD$ HxH7t Ht$@H4$HHD$@HxH7tHt$0H|$@H,HHD$0HxH7tHt$@UHHD$@HxH7tHt$2HG0f.SHưHPH[f.SxHHHT$dH%(HD$1/HL$dH3 %(u HH[f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWN+fffff.SHdH%(HD$1@HHxt+HHxH7tHt$HuHxu@HD$dH3%(uH[ffff.SHdH%(HD$1@HH8t+HHxH7tHt$HH8u@HD$dH3%(uH[ fff.H}vWxfHHt¸P`8fff.w HHtOP=8HwHHHtP8HHtP8fff.SHH@HHG}dH%(HD$1&HC(HxH7u&H{&HD$dH3%(uH[Ht$fffff.SHwH[^fffff.UHAWAVAUATASHHIEMHH}HGHGHXH(dH %(HM1HXIEHA8IEDy0Dq4HHA@t@H}5}YH}`)F|HIk(I4$LHV[(H}(HUHN{HDžp7HDž7+HHHLhH|{LRHHHHAHHHHxH7HHxH7HHxH7HHUHJXxLh('+@HHAAHHxH7zHHq}LLp(Q1HHA։PHHxH7BHH|LLpQ1HHAAHHxH7 HHu}LLx@rQJ3'HHAHHHxH7HH}LLx@"Qb(#HHAH@HxH7HH }LLx@P(H HAH 8HxH7HH0}LLx@P(H0HAH00HxH7mHUH}})HHuH`Lx4 HP|LPH`HPHH@AH@HpH@HxH7HPHxH7H`HxH7fA*^q (D"HN{({&LXHpHpHIGN IG8EHEIG@HHEt@HcPHLEfS,(fH}fIcfZHZ0Z8Z@mXHXHEZHUHEHKHCHCHEHSHMHEHEHx HEHx HEHx HpHxH7mHX@ H@HH@HpH}j}LH}$ }HH#LHo,|H"H}"HEHxH7oHHxH7gHHxH7_HpHxH7WHEdH3%(He[A\A]A^A_]DHXH}d}H@yH} #HHHV-"}H"H}!DHu_f.HuG/fHu77fHu'?fHuxfHufHufHu%fHuefHufHufHufHufHuPfHuwXfHugEfHuWfHuG/xH}H HEHxH7t H0HHxH7t HoHHxH7t HoHpHxH7t HLXI~@OIF(HxH7t HHXH"HJH}H-HHHHHxH7%Hu+HHH`HxH7HuHHHxH7HHPHxH7tHuHHH HxH7ZHH0HxH7d:HHEHxHpHxH7>HH@HxH7QHuCH!H}HdPHHHxH7HHHxH7HHHxH7t HuHHxH7;Hu~-HHHHxH7J HHHxH7*@HGf.SH(HH[f.@S؊xHHHT$dH%(HD$19!HL$dH3 %(u HH[ f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWfffff.SHdH%(HD$1@HHxt+HHxH7tHt$HuHxu@HD$dH3%(uH[ ffff.SHdH%(HD$1@HH8t+HHxH7tHt$HH8u@HD$dH3%(uH[] fff.H}vWxfHHtP)fff.w HHtP)HwHHHtNP)HHtBPj)fff.SHH@HHG}dH%(HD$1HC(HxH7u&H{HD$dH3%(uH[Ht$?fffff.SHwH[fffff.UHAWAVAUATASHHIEMHH}HGHGHXH(dH %(HM1HXIEHA8IEDy0Dq4HHA@t@H}5}H}F|HII4$LHVH}bHUHN{HDžp7HDž77HHHLhMH|{L)DHHHHAHHHHxH7HHxH7HHxH7HHUHJXxLh(w@HHAAHHxH7zHHq}LLp(OC1HHA։PHHxH7BHH|LLpC1HHAAHHxH7 HHu}LLx@B$'HHAHHHxH7HH}LLx@rB#HHAH@HxH7HH }LLx@"BR(H HAH 8HxH7HH0}LLx@A (H0HAH00HxH7mHUH}}kHHuH`LxHP|L`AH`HPHH@AH@Hp" H@HxH7HPHxH7H`HxH7fA*^'HN{(LXHpHpHIGIG8EHEIG@HHEt@HcPHLEfS,(fH}fIcfZHZ0Z8Z@XHXHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxH7mHX@ H@HH@HpH}j}LX H}_ }HHjLH,|HMH}HEHxH7oHHxH7gHHxH7_HpHxH7WHEdH3%(He[A\A]A^A_]DHXH}d}H@H}pHHHV}}HkH}"DHu_f.HuG/fHu77fHu'?fHuxfHufHufHu%fHuefHufHufHufHufHuPfHuwXfHugEfHuWfHuG{ H}HHEHxH7t H0HHxH7t HoHHxH7t HoHpHxH7t HLXI~@IF(HxH7t HHXHrHH}H-HHHHHxH7%Hu+HHH`HxH7HuHHHxH7HHPHxH7tHuHHH HxH7ZHH0HxH7d:HHEHx^ HpHxH7>HH@HxH7QHuCH!H}HPHHHxH7HHHxH7HHHxH7t HuHHxH7;Hu~-HHHHxH7J HHHxH7*@HGf.SH(HH[f.@SxHHHT$dH%(HD$1HL$dH3 %(u HH[Kf.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPW fffff.S5HdH%(HD$1@HHx3t+HHxH7tHt$HuHx3u@HD$dH3%(uH[-ffff.S6HdH%(HD$1@HH85t+HHxH7tHt$HH85u@HD$dH3%(uH[fff.H~vWx#fHHtBP4fff.w HHtPHwHHHtnPHHtbPfff.SHH@HHG ~dH%(HD$1G HC(HxH7u&H{- HD$dH3%(uH[Ht$fffff.SHwH[fffff.UHAWAVAUATASHHIEMHH ~HGHGHHH(dH %(HM1THHIEHA8IEDy0Dq4HHA@t@H}6}H} F|HI I4$LHV H} HUHN{HDž`7HDžp7HHHLhH|{Ly5HHHHAHHp;HHxH7HHxH7 HHxH7HHUHJXxLh( @HHAAHHxH7HHq}LLp(41HHA։@HHxH7HH|LLpW41HHAAHHxH7]HHu}LLx@4'HHAH8HxH7HH}LLx@3 #HHAH0HxH7HH}LLx@r3x(HHAH(HxH7 HH }LLx@"3Zx(H HAH  HxH7HH0}LLx(2 H0HA׉H0HxH7HUH}}p HHuH`LxHP|Le2H`HPHH@AH@H`'H@HxH7HPHxH7H`HxH7fA*^'HpN{LHHpH`HIGIG8EHEIG@HHEt@HcHc@LEfH},fIcffPSZ8Z Z(Z0XHHHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxH7nHH@ H@HH@HH}i}LYH}` }HHkLH,|HNH}HEHxH7pHHxH7hHpHxH7`H`HxH7XHEdH3%(He[A\A]A^A_]fDHHH}e}H@H}pHpHHV}}HkH}"DHuf.HufHufHufHu(fHu`fHufHufHufHuwfHugfHuWfHuGfHu73fHu';fHuCfHufHu%fHu`HH`HxH7HEHxH7t H0HHxH7t H_HpHxH7t H_`H`HxH7t Hp@LHI~@IF(HxH7t HHHHSH{HHEHx;HpHxH7HuHHHPHxH7HuH}HH;H`HHHxH7HuOHHH}H.HHHxH7nHHHxH7QHHHxH7t HuHHxH7GHu9HHH@HxH7HuHHHxH7HHHxH7HHHxH7HHHxH7`H}H-HH0HxH7/rHH HxH7Rf.HGf.SH(HH[f.@S(xHHHT$dH%(HD$1IHL$dH3 %(u HH[ f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWfffff.H~vWxfHHt2P fff.w HHt<P HwHHHtP HHtP fff.SHH@HHG~dH%(HD$1HC(HxH7u&H{HD$dH3%(uH[Ht$Offfff.SHwH[fffff.UHAWAVAUATASHHIEMHH~HGHGHHH(dH %(HM1HHIEHA8IEDy0Dq4HHA@t@H}9 ~H}F|HII4$LHVH}rHUHN{HDž`7HDžp7GHHHLh]H|{L9'HHHHAHHpHHxH7HHxH7 HHxH7HHUHJXxLh(@HHAAHHxH7HHq}LLp(_&1HHA։@HHxH7HH|LLp&1HHAֈ?HHxH7ZHH ~LLp(%HHAAHHxH7"HHu}LLp@%_'HHAH0HxH7HH ~LLp@7%(HHAH(HxH7HH }LLp@$'"H HAH  HxH7HH0}LLp@$W&H0HAH0HxH7HUH}}0HHuH`LpIHP|L%$H`HPHH@AH@H`H@HxH7HPHxH7H`HxH7fA*^"YHpN{LHHpH`HIFcIF8D?HEIF@HHEt@Hc@f,fAWfSfLEZ(H}IcZZ Z0`3XHHHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxH7pHH@ H@HH@HH}o ~LH}" }HH-LH,|HH}HEHxH7rHHxH7jHpHxH7bH`HxH7ZHEdH3%(He[A\A]A^A_]HHH}j ~H@H}0HpHHV=}H+H}DHuf.HufHufHufHu(fHu`fHufHufHufHuwfHugfHuWfHuGfHu73fHu';fHuCfHufHu fHu`}ZHH`HxH7HEHxH7t H0HHxH7t H_HpHxH7t H_`H`HxH7t Hp@LHI@@IG(HxH7t HHHHH;HHEHxHpHxH7HuHHHPHxH7HuH}HHH;H`HHHxH7HuOHHH}HHHHxH7nHHHxH7QHHHxH7t HuHHxH7GHu9HHH@HxH7HuHHHxH7HHHxH7HHHxH7HHHxH7`H}H-HH0HxH7/rHH HxH7Rf.HGf.SH(HsH[f.@SxHHHT$dH%(HD$1 HL$dH3 %(u HH[f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWnfffff.H?*tHf.H9>*ufH~vWxsfHHt8Pfff.w HHtYPHwHHHt5PtHHt5PXfff.SHH@HHG!~dH%(HD$1HC(HxH7u&H{}HD$dH3%(uH[Ht$fffff.SHwH[Nfffff.UHAWAVAUATASHHIEMHH!~HGHGHhH(dH %(HM1HhIEHA8IEDy0Dq4HHA@t@H}7~IH}PF|HI[I4$LHVKH}HUHN{HDž7HDž7HHHLhH|{LHHHHAHHHHxH7cHHxH7[HHxH7SHHUHJXxLh(@HHAAHHxH7HHq}LLp(1HHA։`HHxH7HH|LLp1HHAAHHxH7HHu}LLx@b:&HHAHXHxH7mHH }LLx@R"H HAH PHxH7-HH0}LLx@w&H0HAH0HHxH7HUH}}[HHuH`LxtHP|LPH`HPHH@AH@HH@HxH7zHPHxH7rH`HxH7jfA*^"HN{@LhHpHHIGIG8EHEIG@HHEt@Hc`HLEfS,@fH}fIcZXZHZP)QXHhHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxH7iHh@ H@HH@H\H}f~LTH}[ }HHfLH,|HIH}HEHxH7HHxH7HHxH7HHxH7HEdH3%(He[A\A]A^A_]ÐHhH}a~H@H}pHHHV}}HkH}"DHuf.HuwfHugfHuWfHuGfHu7fHu'EfHufHufHufHuxfHufHufHuGfHuOfHuWfHu_H}HLhI~@,IF(HxH7t H?HhHH'HH@HxH7t HuHPHxH7t HuH`HxH7HEHxH7t H0HHxH7t HHHxH7t HuHHxH7HQHHEHx HpHxH7RHuDHHH,HHHxH7t HuHHxH7HuHqHHHH}HHHH0HxH7HHHxH7HHHxH7xbHHHxH7XBHHHxH78"HHHxH7HuH}H3HH HxH7f.@HGf.SH(HH[f.@ShxHHHT$dH%(HD$1HL$dH3 %(u HH[kf.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWfffff.H?*trHf.H9>*ufH@$~vWxfHHt2VPrfff.w HHtwPOHwHHHtSP.HHtSPfff.SHH@HHG,~dH%(HD$17HC(HxH7u&H{HD$dH3%(uH[Ht$fffff.SHwH[fffff.UHAWAVAUATASHHIEMHH,~HGHGHhH(dH %(HM1DHhIEHA8IEDy0Dq4HHA@t@H}6H"~H}F|HII4$LHVH}HUHN{HDž7HDž7wHHHLhH|{Li HHHHAHH+HHxH7cHHxH7[HHxH7SHHUHJXxLh(@HHAAHHxH7HHq}LLp( 1HHA։`HHxH7HH|LLpG 1HHAAHHxH7HHu}LLx@ &HHAHXHxH7mHH }LLx@ "H HAH PHxH7-HH0}LLx@b "j&H0HAH0HHxH7HUH}}HHuH`LxHP|LH`HPHH@AH@HH@HxH7zHPHxH7rH`HxH7jfA*^"$HN{@[LhHpHHIG.IG8EHEIG@HHEt@Hc`HLEfS,@fH}fIcZXZHZP9oXHhHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxH7iHh@ H@HH@H\H}eH"~LH} }HHLH[,|HH}HEHxH7HHxH7HHxH7HHxH7HEdH3%(He[A\A]A^A_]ÐHhH}aH"~H@iH}HHHV}H H}DHuf.HuwfHugfHuWfHuGfHu7fHu'EfHufHufHufHuxfHufHufHuGfHuOfHuWfHu_xH}HLhI~@IF(HxH7t H?HhHHHH@HxH7t HuHPHxH7t HuH`HxH7HEHxH7t H0HHxH7t HHHxH7t HuHHxH7HQHHEHxHpHxH7RHuDHHH,HHHxH7t HuHHxH7HuHqHHHH}HHHH0HxH7HHHxH7HHHxH7xbHHHxH7XBHHHxH78"HHHxH7HuH}HHH HxH7f.@HGf.SH(H賾H[f.@SZ{HHHT$dH%(HD$1IHL$dH3 %(u HH[ f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWfffff.H?*tHf.H9>*ufH.~vWx賿fHHt"tP,fff.w HHt鿙P HwHHHt^qPHHtRqPfff.SHH@HHGP6~dH%(HD$1HC(HxH7u&H{HD$dH3%(uH[Ht$fffff.SHwH[fffff.UHAWAVAUATASHHIEMHHP6~HGHGHXH(dH %(HM1HXIEHA8IEDy0Dq4HHA@t@H}5,~H}F|HII4$LHVH}BHUHN{HDžp7HDž7HHHLh-H|{L HHHHAHHHHxH7HHxH7HHxH7HHUHJXxLh(W@HHAAHHxH7jHHq}LLp(/1HHA։PHHxH72HH|LLp1HHAAHHxH7HHu}LLx@z&HHAHHHxH7HH}LLx@R"HHAH@HxH7}HH }LLx@\&H HAH 8HxH7HH0}LLx( H0HA׉4H0HxH7bHUH}}PHHuH`LxiHP|LEH`HPHH@AH@HpH@HxH7HPHxH7H`HxH7fA*^"yHN{(LXHpHpHIG胷IG8EHEIG@HHEt@Hc4HcPLEfH},(fIcfPSZHZ8Z@XHXHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxH7jHX@ H@HH@HmH}g,~LEH}L }HHWLH謽,|H:H}HEHxH7lHHxH7dHHxH7\HpHxH7THEdH3%(He[A\A]A^A_]fHXH}b,~H@蹺H}`HHHVm}H[H}DHu?f.Hu'?fHuGfHuOfHufHufHufHu5fHuufHufHufHufHuwfHug[fHuWcfHuGUfHu7fHu'踹H}HHEHxH7t H0HHxH7t HoHHxH7t HoHpHxH7t HLXI~@IF(HxH7t HbHXHbHH}H-HHHHHxH7%Hu HHH`HxH7HuHHHxH7HHPHxH7tHuHHH HxH7ZHH0HxH7d:HHEHxNHpHxH7>HH@HxH7QHuCH!H}HPHHHxH7HHHxH7HHHxH7t HuHHxH7;Hu^-HHHHxH7J HHHxH7*@HGf.SH(HH[f.@SxHHHT$dH%(HD$1yHL$dH3 %(u HH[;f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWfffff.S}HdH%(HD$1@HH{t+HHxH7tHt$HuH{u@HD$dH3%(uH[ffff.SHHdH%(HD$1@HH}t+HHxH7tHt$HH}u@HD$dH3%(uH[蝴ffff.SHdH%(HD$1@HHxt+HHxH7tHt$HuHxu@HD$dH3%(uH[fff.HHtrP`fff.w HHtP=HwHHHtΗPHHt—Pfff.SHH@HHGC~dH%(HD$1HC(HxH7u&H{HD$dH3%(uH[Ht$Vfffff.SHwH[鎹fffff.UHAWAVAUATASHHIEMHHC~HGHGH8H(dH %(HM1H8IEHA8IEDy0Dq4HHA@t@H}66~艻H}F|HII4$LHVH}BHUHpN{HDžP7HDž`7HHpHLh-H|{L HHHHAHH`˹HHxH7cHHxH7[HHxH7SHHUHJXxLh(WHHAAHHxH7HHq}LLp(/1HHA։0HHxH7HH|LLp1HHAֈ/HHxH7HHu}LLp@ON&HHAH HxH7jHH}LLp@O"HHAHHxH7*HH6~LLp@(HHAHHxH7JHH6~LLp@(HHAHHxH7 HH 6~LLp(_H HAAH HxH7HH0}LLp@L&H0HAH0HxH7HUH}}HHuH`LpɨHP|LH`HPHH@AH@HPgH@HxH7HPHxH7H`HxH7fA*^F"ٽH`N{ L8HpHPHIFIF8D/HEIF@HHEt@Hc0f,fAWfSfLEZ fH}ZIcZZZXH8HEZHUHEHKHCHCHEHSHMHEHEHx>HEHx1HEHx$HpHxH7lH8@ H@HH@HH}o6~L菵H}薿 }HH衾LH,|H脾H};HEHxH7fHpHxH7^H`HxH7VHPHxH7NHEdH3%(He[A\A]A^A_]@H8H}k6~H@H}訾H`HHV赽}H製H}ZDHuWfHuGfHu7fHu'fHufHufHuHfHufHufHufHufHufHufHuKfHuwSfHugfHuWfHuG fHu7`fHu'QHHHxH7HpHxH7t HOH`HxH7t HOHPHxH7t H`L8I@͸IG(HxH7t HppH8H蠸HȲHHHxH7@Hu42HHHxH7HHHxH7HHHxH7H}H輺HEHxH7H0H}H芺HHH0HxH7x3HHHxH7XH|HH HxH70HHHxH7HHH}HܹJHHEHxHpHxH7HuHH@HxH7t HuHPHxH7t HutH`HxH7HHHHxH7Hu1HHHxH7HHHxH7tHuHnHjf.HGf.SH(HӠH[f.@Su{HHHT$dH%(HD$1iHL$dH3 %(u HH[+f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWηfffff.H?*t2Hf.H9>*ufHF~vWxӡfHHtRPfff.w HHtPwHwHHHtPVHHtP:fff.SHH@HHGL~dH%(HD$1HC(HxH7u&H{ݳHD$dH3%(uH[Ht$?fffff.SHwH[鮪fffff.UHAWAVAUATASHHIEMHHL~HGHGHhH(dH %(HM1HhIEHA8IEDy0Dq4HHA@t@H}5pD~詬H}谶F|HI軵I4$LHV諵H}bHUHN{HDž7HDž77HHHLhMH|{L)HHHHAHHHHxH7cHHxH7[HHxH7SHHUHJXxLh(w@HHAAHHxH7HHq}LLp(O1HHA։`HHxH7HH|LLp1HHAAHHxH7HHu}LLx@&HHAHXHxH7mHH }LLx@r"H HAH PHxH7-HH0}LLx@">&H0HAH0HHxH7HUH}}軶HHuH`LxԚHP|LH`HPHH@AH@HrH@HxH7zHPHxH7rH`HxH7jfA*^ &HN{@LhHpHHIGIG8EHEIG@HHEt@Hc`HLEfS,@fH}fIcZXZHZPXHhHEZHUHEHKHCHCHEHSHMHEHEHxcHEHxVHEHxIHpHxH7iHh@ H@HH@H\H}cpD~L货H}軱 }HHưLH,|H詰H}`HEHxH7HHxH7HHxH7HHxH7HEdH3%(He[A\A]A^A_]ÐHhH}_pD~H@)H}аHHHVݯ}H˯H}肯DHuf.HuwfHugfHuWfHuGfHu7fHu'EfHufHufHufHuxfHufHufHuGfHuOfHuWfHu_軽8H}HLLhI~@茫IF(HxH7t H?HhH_H臥HH@HxH7t HuHPHxH7t HuH`HxH7HEHxH7t H0HHxH7t HHHxH7t HuHHxH7HQHHEHxlHpHxH7RHuDHHH,HHHxH7t HuHHxH7HuHqHHHH}HoHHH0HxH7HHHxH7HHHxH7xbHHHxH7XBHHHxH78"HHHxH7HuH}H蓫HH HxH7f.@HGf.SH(HsH[f.@SPD~HHHT$dH%(HD$1 HL$dH3 %(u HH[˘f.AHtG~fDGPWΪfffff.HR~vWxfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUSHHHPZ~dH%(HD$1Xt21fHPH<9XwHPHtBH`HHpHtHPHhHtHPLHHHxH7HHǃBHǃ@BHǃgZH0螜HHǃA藩HHa[HIa[HH@IHǃDzH.H(HxH7uZHHD$dH3%(uaH[]A\fH踓HHLHxw 膫Ht$@Ht$v,fff.SHH[鞜fffff.AWAVMAUATD,USH1MHx$H|$PT$D$L$ 1L$D$$D$H$DHD$dH%(HD$h12H|$@DHT$.H|$0jM~wHL$PHT$@Ht$0H HD$0HxH7zH|$HL艤H|$XHPZ~Hǃ(7LHǃHǃ诒ID$I$Hǃ7HǃHƃǃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$Xң$8$LL$ǃ@ǃǃǃXD$Dǃ ǃ4ǃ<D$ ǃǃǃ0D$讗DHHlH`萗DHHNH(轏DHH¡Hh(葏D1HH虡D$Ht$HHp֟HD$hdH3%(HǃxHǃHǃPu$Hx[]A\A]A^A_fDHt$/w蜒IHLHHxH7t Ht$PLH̡H(HxH7t Ht$P~H薟HΛHHHHD$0HxH7t Ht$/CH|$HiH|$X_H臛HHffff.UHAWAVAUATMSMHxE pdH%(H]1ۉtHxhHE(lDe0Hu8HH@HHUHEt@LmL訋讍HhEAUATLelpMATtMPEHPEP LxH0HEIIFEIVH}@@ HP\~HXIFHU'H{HtGugHxH]H@HHELmH{@HEL9HHCt"MtAE HtG tyLkHEHx谟HEHxH7u/I|$蕟HudH34%(HxuVHe[A\A]A^A_]Hu7DHH[tE1HHPHkNuPoh贏IHL6HEHxH7t HuI|$HHLeHyHHPkHLeH誛HxH語SHHhDHxHrHhHhDH`[HpHT[@AUATUSHfHHxfH@H@H@ 0LJLJ*4H*^H,XHRXHP1fHPAN,=DHHIE4HfDf+0H*HH)HPH*J<9XwH[]A\A]f.SH dH%(HD$1t`uHD$dH3%(H [fHN~H葠O~H蟟HWDHxH@H@H@ LJ@LJLJLJXߌHHHlfff.AWAVAUATUSHHdH%(H$1t$,D$8HU<Ll$P|N~L|L脟N~HwLOHxL}N~D`D0>LF3H9Ht$@HDt$@BރHDHLL~N~LHٔL$N~HԒLH詐L衝LN~d$葔L虞2N~H茒fHZD$ZLR LﺀN~l$BLJIN~H=fHZD$ LHxLﺁN~X\$LdN~HD$H輖L贜HxLﺂN~pt$蠓L訝pN~H蛑D$HmLeLﺃN~|$UL]yN~HPfHZD$LLﺄN~d$LN~HfHZD$ϕLǛHEǃHƃ0DHH訓HHt$8D$8OH$dH3 %(D$, H[]A\A]A^A_fLl$PcN~LILQN~HDLHxLdN~D`D0 L3HHt$<HDt$<ރHDH跍L诚LeN~LH覑L讛$N~H衏LHvLnLfN~t$^Lf2N~HYfHZD$'L LgN~|$LIN~H fHZD$ؓLЙHxLhN~`d$輐LĚdN~H跎D$H艓L聙HxLiN~hl$mLupN~HhD$H:L2LjN~t$"L*yN~HfHZD$LLkN~|$ӏLۙN~H΍fHZD$蜒L蔘HEǃHƃ0DHHuHHt$8D$8tQHxH@H@H@ LJ@LJLJLJLJHEHߋ0DHHЏ<DfH0Ll$PD$< Dl$(H*L04HH@LJLJt$N~D$HxHHLPD T$(Y\$ #L+M~HDH8O~HH|$6Dd$6HH ރHߋt$H賉M~HƋHH蛉M~H讋fHZD$(|M~H菋t$HcM~Hvt$HJLBDHLS[DHHy[DfH*HX^\$ H$1(HD$ Yd$f.9XDHPD4LHHhDD+0HxV[Hh<HhDH`HpHpHxV[HpHpDHHpQ[DHH|$<R[L$HHD$@HxH7tLHHL菐H^~f.@f.@f.f.@1f.1f.kf.HZ~@SHHZ~ЀH[7AVAULATUISHHMHuef.HEH9C vH[HtH{ H葌tIH[HuM9t'It$ Hot []A\A]A^fID$ H9Ev[I8H]A\A]A^}ATUISHHH+HHGHGHHHueHHHCHkM$I$I9t0HH@Hɋ2t1HHI9uHI)IIDHCH[]A\fDH?H9w HxvfH HM~@:x1HÐH TM~@:X1HÐHaM~@:81HÐUSH@H}HuHxH@8PzxH=HuH}HZ~HC0zxHH{tHH@H=lNuCG@HE 0UX~HH[~HC[~HC8\~HC HE(HC(E0C0 HHHHZ~3~HۊH裄H+ufLIz@SH_Ht&HHH@H=UuH[FfD[fD[DATUHSH_HIH&H9Ht(Hp L貉tH[]A\fDHE I9$vH[]A\f.@SHHH H9[SHH[~HG0zxHTHZ~H[}@HSHHG8\~H[~HG0zxH HZ~H[|fff.Hf.LIzSHH[~HG0zxH贐HHZ~u|H[fff.Hf.SHHG8\~H[~HG0zxH\HHZ~|H[@Hf.LIzUSH@HHdH%(HD$81zHuH|$HH$=rHt$H{HD$HD$ HD$(D$0H$[~HD$8[~HC8PzxH=rH|$HZ~HC0zxHH{tHH@H=lNu\G@HD$ Ht$H{H[~HC[~HC8\~HC HD$(HC(D$0C0腭H0UX~H諀HH'HHZ~zHvH^H&HqHH HqH@f.@USH@HsHuHxH@8PzxH=HnqH}HZ~HC0zxHH{tHH@H=lNuSG@HE HuH{HC HE(HC(E0H[~HC[~HC8\~C0eHHXHH[]@H H$H)HZ~HyH}HHpHHL`H|$@txIULl$@H{Lc L^I9AH|$@HthpELeMtLxL{ H{(LL[I9HtHp Lu,HE I9v#H{LD$HL$W~HLt$jHHE(HHMHXLd$ tLxH}0Ht$ H|$ HtoMtLoHD$XdH3%(u/Hh[]A\A]A^A_f.Ll$@HLAApHT$H|$0~M~Ht$0L$jHD$0HxH7uLHD$@Z~HHt$ H&LHD$@Z~sMtLnHzHD$0HxH7tHt$ HH HHH|$ HtnH|$@Htn뤐USHHHxdH%(HD$h1HGPHD$H$HK@HC0HQH9HUtHHC0H<$H|$苴HkxD$H oufHJzHm|$uHD$hdH3%(uDHx[]@H<$'DHH%hQ~SxWxkoH|$hv~H|$HD${x+HcH|$@Hv~H|$@HD$@{xHbP~ Tx7Yx1k Q~SxWxkHH|$HD$zxv|$t H<$@HwH|$@HD$@zxevAHtG~fDGPW>fffff.H?*t{Hf.H9>*ufH@`~vWxCjfATIUHSHHt#H{ H|uHEH9C vH[HuL[]A\IH[ǐfDAWAV\~AUATUSHfH@HdH%(H$1D$LHDl$ L,HD$,H*HH ы0LJLJ@4$HL$D$HxH|$@hD0(Y\$uH|$@M~HsDHqq8O~HsHt$*HDt$*~ރH`sH6qM~HIsLHqM~H1sfHZD$ wM~Hs4$HpM~Hrt$HpH|$@}DHL:[DHH$a[DfH*HX^\$H$1(HD$Yd$@9XsDHPD4LHHhDD+0Hx@>[HhfHhDH`HpHpHx >[HpfHpDHHpi9[DHH|$,1:[L$,HH^D$.v`^.w u>1fHxH*HD$HA IfA*IH|$PKxDHT$)H|$0T~HH$Ht$0H|$HVVv1$H$tHNHD$P1HxrHD$0HxH7XHxM~HLpD8HD$PHxL$ _pHt$+HD|$+h{˂H;pLH0pM~H#pt$ HmN~H pDH?i~HoHD$PH|$@HpnLHt$@LLzHLH<Hx1}HD$@HxH7kHpH$LHplLleH H$HD$PfHDŽ$fHD$`fHD$hP5HxH7H$HD$hAjzH|$Pg qH$HDŽ$DRr9X.$<9@H$dH3%(ƃH[]A\A]A^A_fHxw Q|@HLHxw /|f.Ht$@Ht$0Ht$@<9@L.$wǃ,ǃH|$@HxH pefHHD$@HxH7t Ht$0H|$PlaHoHHD$0HxH7tHt$@Hfffff.ATUSHHXHh~dH%(HD$1t21fHPH< _9XwHPHt2g<1t#fDHH<^9<wHHtfH`^H^HpHtHPHhHtHPLHHHtkHHxH7HHǃBHǃ@BHǃgaH0=jHHǃA6wH.[H.[HH@IHǃDoHsH(HxH7uXHqHD$dH3%(u[H[]A\HXaHHLHxw &yHt$Ht$cSHH[Njfffff.AWAVAAUATD,USH1҉1HxMNj$H|$PL$D$LL$L$D$$D$H$DHD$dH%(HD$h1eH|$@DeHT$.H|$0\~&yHL$PHT$@Ht$0HaHD$0HxH7H|$HL8rH|$X.rHh~Hǃ(7LHǃHǃ^`ID$I$Hǃ7HǃHǃHǃHHǃHƃǃƃHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$XYqHD$8D$LD<HH$ǃ@ǃǃǃX$DǃD$0D$>e<Ht@1fHL$.eDHHa9<I$weDHHaH`dDHHaH(]DHHoHh(\D1HHnD$Ht$HHp0mHD$hdH3%(ǃ ǃ$ǃ4HǃPHǃxǃǃǃHǃǃHx[]A\A]A^A_Ht$/HHoH(HxH7t Ht$PZHlHiHHD$0HxH7t Ht$/+H|$HnH|$XnHhHH0_IHLeHHteHHxH7t Ht$PLkk2Hffffff.UHAWAVAUATMSMHxE pdH%(H]1ۉtHxhHE(lDe0Hu8HH@HHUHEt@LmLXZHhEAUATLelpMATtMPEHPEP]LxH0HEIIFEZIVH}@@ HPi~HXIFHU'mH{HtGugHxH]H@HHELmH{@HEL9HHCt"MtAE HtG tyLkHEHxlHEHxH7u/I|$lHudH34%(HxuVHe[A\A]A^A_]HuDHH[tE1HHPHkNuPoh\IHL6cHEHxH7t Hu\I|$kHfHLeHyVHHPkiHLeHhHxHkAUATUSHHHx0H@H@H@ LJLJLJX94 W9~XH_XHPt}1HPAN,_DHHK\IE4fDf+0H*HHH*HPJ<09XwH[]A\A]1[fDSHHhDHxHBUHhVHhDH`[HpHv [@SH dH%(HD$1t`uHD$dH3%(H [fHN\~YHmO~HlHWlDHxH@H@H@ HLJ@LJLJLJLJH@YHHkHTc@AWAVAUATAUSHHHdH%(H$1D$,&5Ll$`\~LmbLulN~Hh`L@kHxLﺾ\~DpD8/bL7l3H*`Ht$0HD|$03kރH`DH]LjLﺿ\~LHaLk$N~H_LH]LjL\~<$aLk2N~H~_fHZ$MdLEj$L\~$6aL>kIN~H1_fHZ$dLiHxL\~`$$`LjdN~H^$HcLiHxL\~H $`LjpN~H^$HfcL^iL\~$O`LWjyN~HJ^fHZ$cLiL\~$$`L jN~H]fHZ$bLhHEǃƃD$,DHHHHt$,VHE0H`H$dH3 %(DHĘ[]A\A]A^A_@Ll$`\~LA_LIiN~H<]LhHxLﺦ\~DpD8_L i3H\Ht$+HD|$+hރH\DHZLgLﺧ\~LH^Lh$N~H\LHnZLfgLﺨ\~ $W^L_h2N~HR\fHZ$!aLg$Lﺩ\~$ ^LhIN~H\fHZ$`LfHxLﺪ\~X$]LgdN~H[$H`LfHxLﺫ\~`$$l]LtgpN~Hg[$H:`L2fLﺬ\~,$#]L+gyN~H[fHZ$_LeLﺭ\~4$\LfN~HZfHZ$_LeHEǃƃD$,DHHfDtiHxH@H@H@ HLJ@LJLJLJLJHLJHE0DHHKD<D9r>H DHH9@su 52fDHA)IDt$`D4$2A94$t$ tHHE1HL$HHL$ $DiIII7HDHDJ46HH@H@0H@H@1HH$R"M~XLM1LRI‘IHAƆ0AƆ1AƆ2Idž8AdžHIdžPIdžhIXI`IdžpIdžxIdžIdžIdžIdžIdžIdžAƆAƆIi~IdžVIdžILt$0HD$8HD$`KHi~LpLl$`HT$8@@ LHD$8HT$`^IFHt@u[HD$8Lt$`HHD$ht@HD$`IFL|$hM;~t&MtAG I~HtG tKM~I}l^L|$0LHL/JIF^HE0kD$ \fffff.Hm~vWxsFfATIUHSHHt#H{ HXuHEH9C vH[HuL[]A\IH[ǐfDATUSHHHt~H`dH%(HD$1BHhBHHtHPHHtHPLHHHxH7HHǃBHǃ@BHǃgFH0JNHHǃAC[H[H[HH@IHǃD&SHWH0HxH7ufHUHD$dH3%(uZH[]A\DHhEHHLHxw 6]Ht$Ht$Gfffff.SHGH[NNfffff.AWAVAAUATUSH1EHxMϋ$H|$Pt$1L$D$ H$HD$dH%(HD$h1IH|$@IHT$.H|$0j~@]HL$PHT$@Ht$0HEHD$0HxH7H|$HYVH|$XOVHHt~Hǃ07HǃHǃHHD$sDID$I$Hǃ7HǃXƃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$XUH$PLD@DDǃH$ǃƃ艃D$T$ITHHFHhITHHmFH`(ATHHSH(AT1HHSD$ Ht$HHQHD$hdH3%(ǃ ǃ(ǃ8ǃ<ǃHǃLHǃpHǃxHǃǃǃǃHǃǃǃu"Hx[]A\A]A^A_@Ht$/VDDIHLJHHxH7t Ht$PH|$PHrSH0HxH7t Ht$PHE1E1 fDHpTLAIHBHHcHD9HH9;H<E1E1zBHxHe:(a:(DLffTT$ A<\$H*H<*Y D(^L$A1HL$\$T$ tTHH9uHxTT$f\$AJ*HxJ<(ID9H\$T$*H[]A\A]Ë@D8<Jfff.AWAVAUATUSHHdH%(H$1HfHp1E1E1t$fH4؋TH|$[Hpt$H .D$vB,LcAl$SH9HfI*̋TfD$fH*H‹LH*HA<YY^f*YY^Jf*HXHB Ju6H$dH3%(Z H[]A\A]A^A_fH|$@aJTHT$H|$ T~HQHt$ HD$@Hx`HVlH1$H$tHNHD$@1HxDHD$ HxH7PHM~xD`LpD8HD$@|$HxmBHt$HD|$vM˂HIBLH>BM~H1BDH@N~HBD$HF~HAHD$@H|$0Hp@LHt$0LLLHLHGHx1OHD$0HxH7XHpHLJ4>Ly7HH$HD$@fHDŽ$fHD$PfHD$XP5HxH7H$HD$XAzLHK2[Hl2[H$H@HT@HD2[HE2[HD$PH@HTPH2[H2[HD$@H@HT@HDŽ$D"DOfE1f|$HLHxw fNHxw RNHt$0Ht$0Ht$ 8HH|$@4HvBHHD$ HxH7tHt$0HHD$0HxH7tHt$ f@ATUSHHdH%(HD$1HL zDHt<8O~H>H|$D|$HHIރH`>DH5LHfHZD$ BM~H>t$HE7M~H=t$H,7H|$ E1E1H:THHe7IƋH@HxTHAJ HHx [H;2HTHhHpHHx [H2HTLHp[HpTLJ< IH[D9HNL/HL$8dH3 %(Tu$HH[]A\A]A^A_H|$ HGH?w5fDATUHSHpH|$dH%(HD$h1[HHXH$xD$\{H>[H xDHH@Ht;X ~H@HuHx;Z HB(HHD$HB0HD$HB8HD$ HB@HD$(HBHHD$0HBPHD$8HBXHD$@HB`HD$HHBhHD$PHBpHD$XHBxHD$`y|$t H<$UyL$0H"D$ f.f(Hƅ\ºj~Xʿ@:,D,ቝ<D8h`F@:9Hžj~H?FHDT4HžHFH54Hþ,|HFHH@HH}8tBuCH&:H8HD$hdH3%(Hp[]A\Ðf(XHx7HE H@0H=@PtHfHx|$u>Hƅj~@:X?H@j~L$.6H6@N~H)4fHZD$8H>ƃD$ t LJIEHHcHXH6  HHIEHHcHXH6ǃHHQ;| ǃHcHXH36fDH`HZ.(v;ǃ@3fDLJftǃHj~@:ƃh2Hljf0H>>ǃ*+HH?=H4ff.@1f.1f.K1f.SH_Ht&HHH@H=@'VuH[1fD[fD[D$H@AHtG~fDGPWnfffff.AWAVMAUATAUSH1҉MHx$H|$PL$L$D$ H$HD$dH%(HD$h11$D$D$H|$@HT$.H|$0~HL$PHT$@Ht$0HHD$0HxH7H|$H8H|$X.HH~Hǃ(7HǃHǃHHD$RID$I$Hǃ7HǃHƃǃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$Xu$8$LL$D<ǃ@ǃǃD$DǃX0DHHYH`}DHH;Hh_DHHHADHHH#DHHHDHHHDHHH(DHHHp(D1HHD$ Ht$HHx-HD$hdH3%(ǃ ǃ$ǃ4HǃPHǃǃǃǃHǃǃu%Hx[]A\A]A^A_Ht$/IHL.HHxH7t Ht$PH|$HH(HxH7t Ht$PHHHHHHD$0HxH7t Ht$/qH|$HwH|$XmHHHff.UHAWAVAUATMSMHxHE pdH%(H]1ۉtHxHH@lDe(Hu0HHUHEt@LmLHHEEAUMATLelptMATPHߋEPLxH0HEIIFbIVH}@@ HЖ~HXIFHUDH{HtGugHxH]H@HHELmH{@HEL9HHCt"MtAE HtG t~LkHEHxHEHxH7u4I|$HudH34%(Hxu[He[A\A]A^A_]DHuoDHH[tE1zHHPHkNuPjcIHLNHEHxH7t HuI|$ H2HLeHHHPHLeHHxHUSHHHHpHxDHHpHpDH`HpZHpHHxDH;HpHpDHhHpHpZH[]AUATUSHHH0H@H@H@ LJLJLJX94 W9~XHXHPt}1HPAN,DHHIE4fDf+0H*HHH*HPJH 2H(&H@HtLHH HxH7HHǃBHǃ@BHǃgiHHPHǃAHWZHXZHH@IHǃDH=HpHxH7uYHHD$dH3%(u`H[]A\HHHLHxw Ht$@Ht$HHHpHxH7t Ht$PHHHHD$0HxH7t Ht$/H|$HH|$XwHHHIHLrH HxH7t Ht$PTLHpDH`HpiZHcHpD$D$ ~D$HHHt=Hx&ZHpڟHpDHhHpH{iZH[]fAUATUSHHH0H@H@H@ LJLJLJX94 W9~XHXHPt}1HPAN, DHHˣIE4fDf+0H*HHH*HPJ<9XwH[]A\A]1[fDSH dH%(HD$1t`uHD$dH3%(H [fH ~蹡HaO~HoH'DHH@H@H@ LJ@LJLJLJX诡HHijHLs ~t$.L62N~H)fHZD$L$Lt ~|$ߥLIN~HڣfHZD$訨L蠮HLu ~`d$茥L蔯dN~H臣D$HYLQHLv ~hl$=LEpN~H8D$H LLw ~t$LyN~HfHZD$軧L賭Lx ~|$裤L諮N~H螢fHZD$lLdHEǃHƃ0DHHEHHt$4D$4*tQHH@H@H@ LJ@LJLJLJLJHEHߋ0DHH蠤<DfH0Ll$PD$<$DD$8l$(H*L04HH@LJLJt$ ~D$HHHLPD T$(Y\$ LM~HDH軞8O~HΠH|$2Dd$2HHԫރH觠t$H{M~H莠HHcM~HvfHZD$(DM~HWt$H+M~H>t$HL DHLgZDHHjZDfH*HX^{\$ H$1(HD$ Yd$f9X>DHPD4LHHpDD+0HxkZHp HpDH`HpHxHxSkZHxדHxDHHpfZDHH|$8ygZT$8HD Hp^L$HhHpHxHxL$jZHxPHxDHHp*fZDHH|$<fZL$fffff.H~vWxsfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUSHH`H~dH%(HD$1t21fHXH<苊9`wHXHt貒HfHhZHN y~%Hp,H  ~%HH tHHtHPHHtHPLHH0HxH7UHHǃBHǃ@BHǃgTHp蘕H@HǃA葢HBZZHCZZHH@IHǃDtH(H0HxH7HHD$dH3%(H[]A\Hx輈H谈jH萌HHLHxw ^fH d{HLH@(Ht$fHt$!輎fff.SH'H[.fffff.AWAVMAUATMUSH1Hx$H|$P$L$1ҹL$D$D$H$HD$$D$dH%(HD$h1ʐH|$@豐HT$.H|$0~ HL$PHT$@Ht$0H趌HD$0HxH7@H|$H&H|$XHH~Hǃ07HǃHǃHHD$@ID$I$Hǃ07HǃPƃǃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$Xc$LLǃDǃǃ$ǃ`ǃ8 $@D$8$NʼnD$$D$H $ IHHHH+HHHHh HHHˌ HHǃxHǃ迏HHH}Hp衏HHH_ HHǃHǃ(談HHH谙H(H1HH臙Ht$H0HDȗHD$hdH3%(ǃ$ǃ(ǃ<HǃXHǃǃǃǃHǃHǃHǃHǃ ǃ(ǃ<Hx[]A\A]A^A_HǃpHǃDHHHيHxHHH車HӍHHH葊H赍HHHsH2Ht$/FlIHLH0HxH7t Ht$PH|$趕H蚘H0HxH7t Ht$PHdH蜒HHHHD$0HxH7t Ht$/H|$H9H|$X/HWHAHUHAWAVAUATMSMHxE ptu0dH%(H]1ۉhHE(dHxlHu8HH@De@HHUHEt@LmLo@uHËEPHE䋍lptMMPEHHPdATAULePhATPEPEP0LxHPHEIIFIVH}@@ HP~HXIFHUږH{HtGugHxH]H@HHELmH{@HEL9HHCt"MtAE HtG t|LkHEHxcHEHxH7u2I|$HHUdH3%(HxuYHe[A\A]A^A_]HuwDHH[tE1|HHPHkNuPledIHLHEHxH7t Hu I|$袕HʏHLeH)HHPHLeHZHxHZATUISHHHHHxHHH襁HHHhHpGKZ ~cHD$HD$ ~D$Hx~ZH5HHHpHpJZ uH[]A\DH$LD$ ~$Hx~ZHƀHHHHpHgJZH[]A\DHHLHxH~HoHHHxHpJZfff.AUATUSHHH8H@H@H@ LJLJLJ`9E< W9~`H覇`HXt}1HXAN,蝇HHH[IE<fHf+8H*HHH*HXJ<@9`w ~E)`HHH `HHɃ HuH[]A\A]fDӆ`HH葃H H[]A\A]1SH dH%(HD$1t`uHD$dH3%(H [fHM@~ɁHqO~HH7DHH@H@H@ LJDLJLJLJX迁HHԓHLfff.AWAVAUATUSHHdH%(H$1t$,D$8H$~L|$`@~LiLqN~HdLCIHh HhBHHHHIHhHHD$`HxH7t Ht$PH|$xARH$4RH\LHH|wrmhc^YTOJE@;61,'" fUHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmL;=HLeHhHpAUEXM\D`HdH#XLxHEZIIF}=IVH}@@ HP~HXIFHU_PH{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG }LkHEHxOHEHxH7u3I|$OHUdH3%(HxuZHe[A\A]A^A_]@Hu'DHH[tE1wHHPHkNuPkd?IHLfFHEHxH7t HuI|$"OHJIHLeH9HHPLHLeHKHxHNAUATIUSHHh0~H|$0dH%(HD$X1WHH|$0]Rw~HIhQLDH|$0Q$tHRt#HD$XdH3%(~Hh[]A\A]@0Ht$TH$7UH$LD$TH1HI)HR7H`HHLH$HxH7~H*FH`ǃ|^SH`HpHhPHHHhHx1!SH|$U~L`0GH|$Q!~HIPLB [HHOLHDH|$OHxw Rk@Ht$0ND=H|$0HWOHFHH$IHxH7t Ht$0LHHtFVNH|$(HpHD$ ;/7H6H|$ PH|$0Y~Hŋ0;HL$H$f.AWAVAUATIUSIHLwMH.L}#fDH=|y=IFHt:IIv LHH^L9HFiNuLH)H=~IF1HuƄLu5H{ Li=1҅HHIHHH[]A\A]A^A_Lw1M9uLtL}=HAWHGAVAUATIUSIHHH9 H L~ LqIoHLH $L9MLFLLD$MH $LD$LH)H=~MLHLoMuL)HHH1H[]A\A]A^A_@H=}XI9\$HHtHH,Hf>HN@:1~HH>Ht$`Hd+HH$L* PHI >L0H|$@=H$RH|$Pdxƃƃ~\$d$ |4H|$P>~HH=fHZD$ ;7~HHf=fHZD$7H|$P =HD$ HxH7u@H$hdH3%(uZH?ZH$H@HH ZH ZH$H@HHDŽ$D.$UHHHED$8EHD$D$<~D$*HD$@HHD$~D$*HED$DHHD$~D$k*HD$HHHD$~D$K*HD$LHHD$~D$+*Ht$@HD$P'Ht$DH&Ht$HH&Ht$LH&Ht$PH&Ht$8H&Ht$<H&HH&HHo&HxH[&HpHG&Ht$(H5&Ht$,H#&Ht$0H&Ht$4H%HH%HH%fHt$THZ l$T%HcHfH*Ht$XHD$X~%H +HcHnH+ff**ZZ0f(f*\ZXd/",ƃHHcH*H$dH3 %(8H([]A\A]A^A_@H$H.H1H@HfH**f*4f.ztD,苃0D4H 7z'3z'H(@H@H@I$ƆHHHH}HDŽ$fHDŽ$fHDŽ$fHネg(H}hHDŽ$D)fH},~R&DH|H:&H1H#Hu@:Ht#H},~%DH/|H%H1H2#Hu@:H#Hw'Lǃ H.ww'.2fH H*@wHfHH H*X{fHfHH H*X0fHfHH H*XLfHfHH H*X9fC,@D0~@:J$HDLd$p":t|H-$H/L~D0%L0~H#DH!:t|H#L.HIRbLMt9I0LLH@HD$4bLLHD$I|$+IǃLƃP/HH>H%HL"H%HL.H%HHHtEm%LH2CI|$H#+ILPHB%HLH-wLl$`,I}HpHD$`;HLd$ppLX/j~LHLv.8~Hi"HH^"H.L.-LF(a'L$?0LH-L(7'Ho$Hf.AWAVMAUATAUSHHH$H$H4$HT$DL$D$ HD$L$$T$(\$,dH%(H$1H|$pHT$OH|$` ~70H$HT$pHt$`HHD$`HxH7rH|$xL,F)H$9)HP~HǃLHǃLHLHlHHD$0HHǃ7HHD$82fD$HǃHǃHH*HǃHHHǃ7^IFIHH$H$t@H$H$HHH$HHH$H$ (D$Ht$HD $H$H8HD$H@?%H|$pq'mHD$pH|$pH,HD$xH4H$H<$DH$q'H$H$HHH$HPH$HX$`D$$LD$ Lt$(|$,HLHƿIHPm Hƍ< H(HXL Hƍ< HH`+ Hƍ< HHh  Hƍ< HHp Hƍ< HHx Hƍ< HH Hƍ< HbH Hƍ< HAHe Hƍ< H HD Hƍ< HH# Hƍ< HH Hƍ< HH Hƍ< HH Hƍ< H|H Hƍ< H\H Hƍ< H<H` Hƍ< HH@ Hƍ< HH  Hƍ< HH Hƍ< HHHƿHHƿHHƿqHHƿXH|Hƿ?Hm' Hǃ pǃ(HǃHǃƃƃǃ4ǃHH%@n'H-8n'bjH9uHT$pH|$`Hǃ?ǃ8{ǃǃY?)HT$OH|$P~)LIMuzf.MMvMtI~ Ht$P&yMvMuL9@Iu H|$P*I}(Ht$`HD$PHxH7pHD$`HxH7lH!m'5m'(((pHpH(pH8HHXHǃHǃ(H$dH3%(ǃ0ǃdǃhǃxHǃHǃH[]A\A]A^A_0HIHD$PLIV HIF HD$P7IF(7sHItILLH I{Ht$P[H$I~H$7IF(HxH7uIF HxH7uLH$H$IHD$PHxH7t H$HD$`HxH7t H$LHHyH7tHt$OH$H$HHH$H|$8H$HHHxH7t Ht$O9H|$0菚LgLHH{HIH IHHHD$`HxH7t Ht$PH|$x7H$*HRHHH{HHHHUHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmL HLeHhHpAUEXM\D`HdHcXLxHEZIIF] IVH}@@ H~HXIFHU?H{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG }LkHEHxHEHxH7u3I|$HUdH3%(HxuZHe[A\A]A^A_]@HuDHH[tE1wHHPHkNuPkd IHLFHEHxH7t HuI|$H*HLeHHHP{HLeHHxHAUATxUSHHh0~H|$0dH%(HD$X17H|$0=w~HIHLH|$0$tHHot#HD$XdH3%(~Hh[]A\A]@0Ht$TH$7!H$LD$TH1HI)HRHHHH$HxH7~H Hǃ> HHHHHHHx1 H|$~L0H|$!~HIL [HHLHH|$}Hxw qk@Ht$0$ H|$0H7HHH$IHxH7t Ht$0LHHt}6H|$(HpHD$ ;HH|$ H|$0~Hŋ0 H|$0#~HH~HHHHJH|$0`H|$ vqH9H|$HI4!H|$0H"H|$ 8SHHH|$ 'f.@1f.1f.+f.SH_Ht&HHH@H=@WuH[fD[fD[D HfAHtG~fDGPWNfffff.SFHdH%(HD$1@HHDt+HHxH7tHt$HuHDu@HD$dH3%(uH[ffff.SHHHdH%(HD$1@HHFt+HHxH7tHt$HHFu@HD$dH3%(uH[ fff.H~vWxfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAWAVIAUATUSfH(H*@f(X^^\$f(D$fYZZ^$fWfT$AZH^D,fAL\$ $Z^,Ic0 $T$Dd-B")E1HALIXf($Z\ ^'|X!IPI9IX$XT$,HB1DBD1uIc0I`HD)HcHH4sIc0IXIhH4HQIc0IXDD)IpMcHH4H$IXIc0IxH([J4]A\A]A^A_HIXWUfSH(0H*@ 'Y^D$ ~pHH,H@fHt$H|$L$HZffL$XL$ ZD$W&'ZT$SCH9uH([]f.HH(ATLUSHxHHH~LdH%(HD$1HHXH`HhHpHxsHgH[HOHCH7H+HPHPHtNHHHHHxH7HHxLHǃxBHǃp@BHǃgHHHǃAHYHYHpH@HxHǃpD HpHxH7u|HTH(H<H$HD$dH3%(uSH[]A\HxHHxw +f.Ht$6Ht$&u\fff.SHH[fffff.AVAUE1ATUA08SffHHpH(1dH%(H$h1HF ZNZVNHH@HPHx5]HPH(H$H|$ @@@ @@@@ ǃdHǃǃǃǃ0Ht$ H|$01 LHt$0LHD$0HxH7H(LxLLhSH|$`Hd3Һ~@:0@:n~HHHt$`HLH$H|$`&H(LL0DpH$DH2H|$@X~H|$@ ~HIH$L PHILH|$@H$%H|$PƃiƃhX~\$d$ dH|$Pj~HHufHZD$ # ~HHNfHZD$ H|$PHD$ HxH7u@H$hdH3%(uf0ffA*H8+@*ZZf(fA*\ZX,ƃiHHcH8nHHMdH3 %( He[A\A]A^A_]HPHH}H81H@HfH*ff*4f.ztD,苃0D4H y]'u]'H(Dž?Dž?H@Dž?Dž?@HDž ?Dž$?Dž(?Dž,?@HDž0?Dž4?Dž8?Dž<?Dž@@I$ƆHHHHHHH$HHD$H HD$H(HD$H0HD$ H8HD$(@D$0·HH@HDžPfHDžfHDž`fHDžhP5HxH7fLHDžhAI~PH\YH}YI~hH@HPHVYHWYH`H@H`H%YH&YHPH@HPHDžD+$HDžI@HHH~HHH~IH~nHHH~HHHH~"HxHHIIHLHLHLHLHLHLqH8L]HLIHL5HL!LLL HLLLHLH\LHXLfLLZHc0H8fH*HPLPM0HHc0H8n@H@HfH**f*4f.z,HHx\4H(D` HDHHI$LX~D0L2L:H-DHI~HLHH~HfHZn~HLL L,~I~DH|HHKHIv@:UHHPH'ǃHLzHP\{`.XwTH'.\dd2fH0H*@uHfHH H*XyfHfHH H*XIfHfHH H*XGfdcdL@HfHH H*XfHfHH H*X#f~@:D0DH:t|HHzHX~D0H~HDHY:t|HlH@vHI2LMt>I0HLLx2HLAHHx1IEǃdLƃhPHTHIt9HHRH HH{HPHHHpHHDž;HxInL&LHKX~IH$8~HHL HLLH3 HHHxIELPHLHLHHHHsHHOHH;LSnHL,GfDAWAVIAUATUSHA̹MHEH$H|$`H$T$\$HD$dH%(HD$x1:H|$P!HT$>H|$@~}HL$`HT$PHt$@H&HD$@HxH7H|$XH|$hHH~HǃHǃHHD$+tHHHD$ gHxHǃp7HHD$(fDq$HǃHǃHH*HǃHHHǃ7^HIEIUHHT$`HD$ht@HT$`HD$hHHH|$hHHHL$`HT$hsH$Ht$HpD$L8D H@H$d$l$HǃHǃǃLHHƿVHPz Hƍ< H5HXY Hƍ< HH`8 Hƍ< HHh Hƍ< HHp Hƍ< HHx Hƍ< HHHƿwHHƿ^HHƿEHiHƿ,HPHƿH5@' HǃǃHǃ8Hǃ@ƃhƃiǃ40ǃHHH N'N' HBH9uHT$?H|$`HPǃX?ǃ\8{ǃdǃ`Y?cHT$>H|$POLIMuMMmMtI} Ht$PyMmMuL9It$ H|$PI|$(Ht$`HD$PHxH7HD$`HxH7HD$xdH3%(HǃHǃ(ǃ0ǃǃǃǃǃǃǃ4ǃEHĈ[]A\A]A^A_ÿ0HxOIHD$PLIU HIE HD$P7IE(7裫HItCLLH=IHt$?[fHt$@LHt$P=IE(HxH7uIE HxH7uLxHt$@Ht$@HxHHyH7tHt$@H$H$HHH$H|$(gH$HHpHxH7t Ht$@H|$ (qH|$mHHH2\WHHHCHH|$XH|$hHHxIHD$`HxH7t Ht$@LHxIHD$PHxH7tHt$@IHHHD$@HxH7kHt$?\~ytoje`[VQLGB=83.)$UHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmL LeHhHpuAUEXM\D`HdHXLxHEZIIFIVH}@@ H~HXIFHUH{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG ~LkHEHxHEHxH7u4I|$HUdH3%(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHPHkNuPjcIHLHEHxH7t HuI|$RHzHLeHHHPHLeH HxH AUATXUSHHh0X~H|$0dH%(HD$X1H|$0w~HILNH|$0D$tHt3nHD$XdH3%(Hh[]A\A]0Ht$TH$70H$LD$TH1HI)HRHpHHH$HxH74~HJHpǃ~HpHHx/HHHxHx1AH|$dX~Lp0 H|$&!~HI1L [HHLHH|$0HHHH tdfHxw ;@Ht$04H|$HIDLHHtDHHH$IHxH7tHt$0H|$0HHv/H|$(HpHD$ ;HH|$ H|$0hX~Iċ0H|$0#~HH~HHLH|$0aH|$ w"H|$ SnH|$0H1H|$ GbHHDf.@1f.1f.Kf.SH_Ht&HHH@H=mWuH[fD[fD[D(HfAHtG~fDGPWnfffff.H~vWxfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAVAUIATUSH ^@L$x$f(D$YfWf(^T$RD,IcL$T$G,$B,*1HAHf(T$\ eY'@Xw$IHH9IPT$XT$,HDDuIcI`McHJ4McIPIcIXH [J4]A\A]A^HIPATUISH w$Y^@D$~fHhH,Hf(Ht$H|$$Hff$ZL$W &Z\$[XT$KH9uf($ vv$$A$AX$ A$ H []A\Ðfff.H HATUHSLHHH~HdH%(HD$1HHHHCH`7HX+HPHhHpHxHHhHtHHxH7&HHsHHǃBHǃ@BHǃgzHHHǃAHhYHiYHH@HHǃDHHxH7H0BH6H`HHHD$dH3%(uUH[]A\DHLHxw [f.Ht$Ht$c,fff.SHH[fffff.AVAUATUSffHHHPdH%(H$1Hs$@`PH@ f(XH)HXd$(H*L$ ^^Y.'Z s$^t$T'YYT$f(l$!T',T$f(L$ \fd$(ZT$^ӉYYYXf(fl$f.zH\ZL$耋H1ǃpHHHxJ>HHHH$H|$@@@ @  ǃI'HǃHǃI'HǃHǃ Ht$@H|$P1LHt$PLHD$PHxH7QHLLLh%H$H3Һ~@:0@:=~HHhH$HHH$SHLL0Dp藜H$DHH|$`~H|$`~HIH$L PHILrH|$`hH$H|$pƃƃ~|$t$-H|$p3~HH>D$H!8~HHD$H`~HHD$HHH|$pHD$@HxH7u6H$dH3%(uEHĐ[]A\A]A^X}H$뻐H$ H$HiHD$@HxH7t Ht$?}HuH|$pHH|$`HH$HHHD$PHxH7tH$#Hfff.AWAVAUATMUSHHxM dH%(H$h1HL8Hx@HH$HHHhH,$,HP+Xff**f(T$T$\X,ƃHHcHPHPH4 fH*^@I$HDŽ$ HDŽ$(HDŽ$04$$8HDŽ$@HDŽ$H$PƄ$XHƄ$HHH$hdH3 %(zHx[]A\A]A^A_HIHMHhHxLpXL`LPUHxH .3 @.% HpHH~ H$~$RH0D$~D$f*^@Hx~ffZ~\$  k$ZHx^@ǃHL$H$~$VL$HZT$ ^ff($fZZIf`8Zf(t$XX V&'Y^j$X HxHhHcȃFD`0HPH fH*\$ @D$ \$(^f*4f.2 \$(&  i$f\$8^Zd$f(d$dK'fd$0YZl$l$YYYfYZ(ZX(f(XXf(L$(,HxffHf Z2Zjd$0\$8L$(*ЉI$$@HDŽ$HD$ Ƅ$X$ Ƅ$X$(H^\x$0$8$PH,HHcHPH$HHPH fH*^@f*4f.ztD,0D4'Hp ?'?'H@Hx@H@IEƆHHHHDŽ$fHDŽ$XfHDŽ$fHDŽ$P5H$PHxH7VH}PHDŽ$AHYHYH}hH@HHYHYH$H@HHYHYH$H@HHDŽ$XD,f|$<$|$|$HpHxHED$@HD$ ED$D~D$ HED$HHHD$ ~D$ HD$LHHD$ ~D$ Ht$HHD$PHt$LHHt$PHHt$@HpHt$DH^HPHJfHt$THZ \$T&fHt$THZl$TfHt$THZt$TfHt$THZ$\$TfHt$THZt$t$TfHt$THZ\$\$TyfHt$THZt$t$TWfHt$THZx\$T3fHt$THZpl$TfHt$THZt$THcHPfH*Ht$XHD$XfHxZHǃ c$l$ ~H},~DHO|HHHRHu@:H<HfH*l$ @D$ \$(^ f*4f.z \$(,HHxLl$pd$ 4HDpҎLHDLt$` ~LD0LHDHI~HLHH~HD$ Hn~HLLHP@HfH*t$ f.HfHH H*XfILl$p~LLc0MLPLPmL~HLHLDHHPHbfH*$$I$^@HDŽ$ HDŽ$(HDŽ$0$81fDHfHH H*Xf.HhB'H,@ǃ`NfHhZxOZf.pE2 D0~@:HDLl$p:t|HHbL~D0yL~HtDHI:t|H\L4jHILMt8I0LLH@HD$ LLHD$ I}+IǃLƃP @HfHH H*X,f.@'f.xfDHfHH H*Xf.Ht$pD,,~@:D4%DHLl$pU|HHHxHHt$ DpdLHDLt$`q~LD0LHDHhI~H{LHPH~HcD$ H5n~HHL LhHP@HxtfH*l$ HfHH H*f(X\$ 0HfHH H*f(X\$ HfHH H*f(Xd$ "CHHhHHLHHL2HI}HnILPHHLHLEHmHHHHuLt$`I~HpHD$`;HLl$p蟸L~LHL8~HHHHJLbLzLH@LXsHHL.I "fffff.AWAVEAUATMUSHHH(H$`H$HT$L$D$ HD$L$$T$(\$,dH%(H$1H$H$H$~PH$H$H$HH$HxH7"H$ZH$MH52'=2'H~HǃHǃHHD$0FLLtL0LmHHǃ7HHD$8HIǃHǃHǃHHIFHǃ7H$HH$t@H$H$HHH$HHH$H$fD$fHt$HD,HǃH*ʼn(ZT$,8fH*D$@#$hL$$D$ LqH$:'3lH$H$H0H$H8H$H@$HLlD$(LkɾHƿ 茻HH谾(Hƍ< HkHP菾(Hƍ< HJH`n(Hƍ< H)HXM(Hƍ< HHh,HƿHpHƿֺHxHƿ轺H(HǃPHǃXǃ4Hǃƃǃ`tHHf.%X/'H-P/'bjH9u W$H$58'H|$`pHhHǃxǃӂH$H|$P ΂HHt$PH? Ht$`HHD$PHxH7HD$`HxH7H$H$~H$H|$p ӂHt$pH H$HxHD$pHxH7H$HxH7H$H$͂H$H$H$HE H$HH$HxH71H$HxH7*H$H$8{H$H$H$H H$HoH$HxH7H$HxH7H$H$~H$H${H$H9 H$HH$HxH7mH$HxH7fH$dH3%(Hǃ ǃ0HǃHǃHǃHǃHǃHǃHǃ Hǃ(Hǃƃǃ1H([]A\A]A^A_H$hH$VH$D H$2[H$ bH$H$H$H$&H$H$HHpHXH萾IH$HxH7LHHyH7tHt$OHD$NHD$HHHD$zH|$8 HD$HHHxH7t Ht$OLeLlH|$0>:IH$HxH7t H$H$HxH74H$"IH$HxH7t H$qH$HxH7IIIH$HxH7IHD$PHxH7t H$HD$`HxH7}DIHHcHHH$bH芼HH$HxH7t H$eH$(豲IH$HxH7H$(IHD$pHxH7H$HHHUHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmL HËELeHhHpEXMPAUD\H`dXLxHEZIIF蝭IVH}@@ HP~HXIFHUH{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG }LkHEHxHEHxH7u3I|$HUdH3%(HxuZHe[A\A]A^A_]@HuDHH[tE1wHHPHkNuPkdIHL膶HEHxH7t Hu|I|$BHjHLeHɩHHP軼HLeHHxHAUATUSHHh0~H|$0dH%(HD$X1wH|$0}w~HIL>H|$04,tHt#HD$XdH3%(~Hh[]A\A]@0Ht$TH$70H$LD$TH1HI)HRӧHHHH$HxH7~HJHǃ~HHH/HHHHx1AH|$~L0 H|$&!~HI1L [HHLHH|$轿Hxw k@Ht$0dH|$0HwHHH$IHxH7t Ht$0LHHt轶vH|$(HpHD$ ;OHH|$ H|$0~Hŋ0[H|$0#~HHʱ~HݳHHҳH|$0訾H|$ 边ٸyHAH|$HI|)H|$0HjH|$ 耹蛸HӵHH|$ Tof.Df.@1f.1f.kf.SH_Ht&HHH@H=WuoH[6fD[fD[DAWAVIAUATUSH(LodH %(HL$1HOH|$MH $L&HM|$؅x?LMmMt&YH*@Hp^@HH(ATUHHSL@HHH~HdH%(HD$1舤HHh胠H`wHXkHp_HxSHGH;HPHtjHHtYHpHxH7!HPH@lHHǃ@BHǃ8@BHǃHg赣HHHǃHAHpYHpYH8H@H@Hǃ8DѰH8HxH7HM0H!YHeWHIH1HD$dH3%(uPH[]A\H@LHxw ǺSfHt$Ht$vhlfff.SHH[ޫfffff.AVAUATU~SffHHHdH%(H$x1H(Z`ZhH@ HH$H)H$4 ~HIHLYH$謶fB$@B$ZfXH*@^(d$ZZY &^ZY.'Y\$(t$貥-#'(\$d$\f,(fH*YZɉ^^YYXZft$Zf.YH\D$UHTH(1ҋpHPHx+ HP@@ @  fH*@^f(L$Hf(L$^òD,HcL$G,$B,*E1Hf HIf(T$\ !'蹱dX$@$HPI9HXT$XT$,HB1DBD1uHcHhMcHJ4Mc^HcHXH`J4H<H(H$H|$0ǃ,Hǃǃǃ誷Ht$0H|$@1贵LpHt$@L萩HD$@HxH7"H(L@LLhjH|$pHҺ~@:0e@:~H,Ht$pHH׳H|$p=H(LL0DpjH$DHH|$P ~躩H|$P~H賧H$H胟PH薧HlH|$PbH$H|$`ƃ5ƃ4~t$d$'H|$`-~H fHZD$8~HfHZD$ϫ~HfHZD$谫H舲H|$`螱HD$0HxH7u5H$xdH3%(HĀ[]A\A]A^DXH$*H$HXH|$pHmHD$0HxH7t Ht$/HyH$HHa輞H|$`HϰH|$PHH$HHD$@HxH7{H$kiHaH빐UHAWAVAUATISHHMHdH%(HE1裬4F 5HPH(IEM$$HHHL(HpHLx`LhLX$HH HH~eQ^ͣ&HOX &ffZZY^ !;$X y& :$YY]'XZfZXZZfHxHZH~ H~PH3ML@ZfY'I*^&ZXZY 9$^Y W'YXXf(ʫ,HHHcBDffZ*ZbHHZ fH*XffH*I$^HDžZƅ1H\ffZZ$HHH@HfH*"f*4f.z,0AƉ4H,~HxzDH诚|HbHH@:Hp%H0~H0#HHHqH0H(HpH@$@ATcH`DHb0AHHx蔠DHiI~H|H`HMV~H`fHZ,a~H?fHZ n~HH֫H`:H@~H@HHHq赕H@詪$(HI@Hx HH~˟IH~謟H HH~膟H@H0HIIMH L9H0L%HLH LHLHL՛HLHL譛HL虛HL腛HLqHL]H$LIH L5fH@LZ@ HcHfH*H`L`ԚHvHcHxfDffA*H+*ZZMf(fA*\ZX{,ƃ5HHcHH@HDžfHDžHfHDžfHDžP5HxH7jHHDžAHxPHЍYHYH@HH΍YHύYHH@HHYHYHH@HHHDžHDHxh蘟HMdH3 %(He[A\A]A^A_]ÐHPHH5H1H@HfH*f*4f.ztD,苃0D48Hx ''H(@H@H@I$ƆHHHHDžPfHDžfHDž`fHDžhP5HHxH7lLHDžhAI~P1HYH#YI~hH@HPHYHYH`H@H`HˋYH̋YHPH@HPHDžDѝ@L,~I~CDHx|H+HH{Iv@:HepH!'ǃLZH$Q(. w&.$,,2fHH*@H`HfHH H*Xf.HfHH H*X+fHfHH H*X"fHfHH H*Xf,#, @~@:D0zDHO:t|HbHH~D0-H1~H$DH:t|H HHI{LMt>I0H LLx^H LAH HxџIEǃ,Lƃ4PH`4*HHKH?H觙HLH臖HHHH HxAIELPHH@HѡH`HH0H诡oHyH舉HHRHPP~IHP腢8~HxHLmHPA|HoHPHAWAVEAUATIUSHIHH$H|$pMD$$L$(HD$T$,dH%(H$13H|$`HT$NH|$PU~vHL$pHT$`Ht$PHHD$PHxH7)H|$h菝H|$x腝HH~HǃHǃHHD$4?HHHD$@HHHD$0H@Hǃ87HHD$8mHHIǃHHǃPHǃhH$HXH`IFHǃp7HT$pHHD$xt@HT$pHD$xHHH|$xHHHL$pHT$xuHt$ H8D$L8L@0豙H|$D$(=H|$D$$>fZ\$,H誐Hƿ mHP葐 Hƍ< HLHXp Hƍ< H+HhO <6HH H`. Hƍ< HHp HƿЌHxHƿ跌HۏHƿ螌H-'& HǃǃHǃHǃƃ4ƃ5ǃ4ǃ4HH ' 'f. HBH9uHT$OH|$pHǃ ?ǃ$ӂǃ,ǃ(Y?HT$NH|$` ΂נLPMHLt$`H,$MnDxALMd$Mt>I|$ LLLM9IF1uM)II}Md$MuH9,$Hu H|$`&H}(Ht$p@HD$`HxH7 HD$pHxH7H$dH3%(HǃHǃ(ǃ0ǃǃǃǃǃǃHĘ[]A\A]A^A_H,$0L@誅IHD$`HIV LIF HD$`7IF(7OHHtCHLLNHHt$OHt$PHt$`IF(HxH7uIF HxH7uL9Ht$PHt$PHH|$9HH˕HHHD$PHxH7t Ht$ODH|$h誗H|$x蠗HȑL@HpHyH7tHt$PH$H$HPLH$MH|$8^H$HH8HxH7t Ht$PH|$0H|$:HHD$`HxH7t Ht$PHD$pHxH7t Ht$PeHH&HD$dH3%(uUH[]A\DH@LHxw 迏[f.Ht$&Ht$c\zfff.SHH[΀fffff.AVAUATU~SfHHpHdH%(H$h1H(ZxfZxH@ HH$H)H$4 ~HIHLI{H$蜋f$0$ZfXH*@^(d$ ZZY &^ZY 'Y\$(t$z-&(\$d$ \f,(fH*YZɉ^^YYXZft$Zf.aH\D$*H)H(1ҋpHPHxHPH(H$H|$ @@ @  ǃ,Hǃǃǃǃ赍Ht$ H|$01迋LpHt$0LHD$0HxH7UH(L@LLh AH|$`HҺ~@:0p@:$|~HHOHt$`HvHډH|$`@H(LL0Dp@H$DH葪H|$@~H|$@É~HIΈH$L~u PHI詈L_{H|$@UH$蘝H|$Pƃ1ƃ0~l$|$ H|$P ~HH+fHZD$ ف!8~HHfHZD$貁~HH݇fHZD$苁H|$P聇HD$ HxH7u7H$hdH3%(uNHp[]A\A]A^@XH$fH$tHH$IHD$ HxH7t Ht$mHU~H|$PHȆH|$`H HHD$0HxH7tH$%H$H胆H}H|$@HncHhAWAVAUATUSHHM dH%(H$1HH$HL810H>1H(HIxHHD(@hHH<$D$ HsHpHLx`LhLXHH . @. HH$~$*'^y&HD$ %D$$Xr&ff\$ZZf(Y^ $X $YY &XZfZXZZÁfHxHZH~ H$~$&HD$("D$,L@Zf\$Y&I*^$\$ZXZY $^Y '&YXXf(L$蜁,ȋ$\$P HHHcBDHffHZ*Zb fH*Xft$T$fI$*D$^$HDŽ$8Z$$HH$Ƅ$$ H\ffZZ$0$($@H0HҺH@H fH*zf*4f.z,,~@:Lt$`4HfHH H*X|HDHPHCBIw@::H-BxH@Hf(ǃxH.h2HX@H@HfH*zGf*4f.z,HH4H(D`ZHDHHIbpH9XD0EHOH|CDHQAI~HdCLH9;H~HLCfHZHn~H+CHMLGcfIHXLc(MLhLh.;HN~HBLH@HMDHEI$`HDžHDžHDžHDžHDžƅHƅHH.HfHH H*XfH&.vX6HHfHH H*XfHfHH H*XCf~@:D0JADH?:t|H2AHLHXD0BHM~H@DH>:t|H@HK5HIKLMtKI0HLH@H'HLHHHxHIǃLƃP9HHKHH}BHHJHHHx)HILPHLH.?HH3HHJL_HHItHkHcHIHpHHDž;HxIz2L22LLHXI7H0K8~H#?HL?HILEDHHIHP_HHHILDCHL1LfAWAVIAUATUSHMEHH$@H$HT$L$D$HD$L$ T$$dH%(H$19H$9H$H$LH$H$H$Hv5H$HxH7H$HEH$EH HǃHHǃLL(HHHD$(TH(HHD$0HHǃ7HHD$83HIUǃHǃHǃHHIEHǃ7H$HH$t@H$H$HHH$HHH$H$DHD$Ht$HD$L8H@D$ AD$ HDD$LfH$HHǃǃ ǃ$Z\$$HH8Hƿ t5HX8 Hƍ< HS5Hxw8 Hƍ< H25H`V8 Hƍ< H5Hp58 Hƍ< H4Hh8 Hƍ< H4Hx7Hƿ4H7Hƿ4H7Hƿ4H- & HǃǃHǃhHǃ`Hǃpƃƃǃ4Xǃx7HH &&D HBH9uH$H|$`Hǃ?ǃӂǃǃY?HH$H|$P ΂HLHt$PLHt$`H:HD$PHxH7HD$`HxH7H$H$~JHH$H|$p ӂ3HHt$pLvH$H&:HD$pHxH7H$HxH7xH$H$͂GH$H$GH$LH$H9H$HxH7H$HxH7H$H$8{GGH$H$-GH$LmH$H9H$HxH7H$HxH7H$H$~FH$H${FH$LH$H8H$HxH7YH$HxH7RH$dH3%(HǃHǃ(ǃ0HǃǃǃHǃHǃHǃǃ\HǃPH[]A\A]A^A_H$H$H$H$oH$vH$H$H$|3H$j:H$XH$FHH2>H'IVH}@@ HP HXIFHU :H{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG ~LkHEHx9HEHxH7u4I|$9HUdH3%(Hxu[He[A\A]A^A_]DHuWDHH[tE1vHHPHkNuPjc)IHL&0HEHxH7t HuI|$8H 3HLeHi#HHP[6HLeH5HxH8AUATUSHHh0XH|$0dH%(HD$X12H|$0<w~HI(;L-H|$0:$tHOH$LD$TH1HI)HRc!HHHQ6H$HxH74~H/Hǃ=HHH9HHHHx1&H|$HI8LHHtDC0HHH$IHxH7tHt$0H|$0H8H07H|$(HpHD$ ; HP H|$ 6:H|$0XIċ0%H|$0J9#~H=-H+~H&-HL-H|$07H|$ 3"2"H|$ :H|$0H7H|$ 21H*/HDf.@1f.1f.+f.SH_Ht&HHH@H= XuH[+fD[fD[D HfAHtG~fDGPW6fffff.H@vWx3!fATIUHSHHt#H{ H3uHEH9C vH[HuL[]A\IH[SȖHdH%(HD$1@HH8tCHHxH7t㺠AHtIPЅHt$H6H8ufHD$dH3%(uH[f.PJH#fffff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$Hk5HxufHD$dH3%(uH[f.PJH"fffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H4HufHD$dH3%(uH[f.PJH>"fffff.SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H 4HufHD$dH3%(uH[f.PJH!fffff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H[3HxufHD$dH3%(uH[f.PJH fffff.H1dH%(H$1H0@HŀHJH91<20DDPHHduHPf1A1.THHPuE1E1AQfD1E1A4 Akd)֋DPHA)HuDA1A)E9~ DpEAAduAu.pQƇmH)kd)щpH$dH3%(uHH}1/zf.AVAUIATUSffH ZH*H^fH*HT$^ Q#YZfWPD$f(L$^.,Ic0L$Dd-B"-E1HfAPID$\ %-. %D$D$-y.T$IhX,#IxI9X#Ip,H B )L,IBL)HB*DBD*D$XD$D$0Ic0IHcHH4Mc/IxIc0IH [J4]A\A]A^HIxUfSHHH*H #&Y*YT$^/&YL$ ^ZX>#,fT$L$ *Y\7/&Y X^,YL$ ^ZXݺ#,fT$L$ *0Y\Y NX^,H.&L A@DID@ffɉ։*HcHcH*Y@DY @DAXDAXLAWIL9uH[]Ðfff.HH0ATUHSLHHHPHdH%(HD$1HHHHxHHHpHtHhHtHPHtHHxH7(HHHHǃBHǃx@BHǃg HP HHǃAI-HXHXHxH@HHǃxD(%HxHxH7H褤HxHH)H'HD$dH3%(uWH[]A\HLHxw /[f.Ht$Ht$afff.SHH[. fffff.AVAUATU SfHHpH8dH%(H$h1H0Zx fZxH@ H@H$H)F"H$I,4 ~HIT+HLH$*f&#fZXH*H^(d$ ZY &^Y&Y\$(t$ -&(\$d$ \f,(fH*YZɉ0^^YYX Z\'ft$Zf. H\ D$+Ho5QƄ$bH$`f$`H0pHhHx踋Hh5I?f$`H$`?@Ƅ$b@?@ ?H0pHpHxGHpH0H$H|$ ??@@?@ ?ǃd ǃ$ǃǃ ǃ(,Ht$ H|$01*LHt$0LxHD$0HxH7RH0LLLhH|$`HIҺ~@:8M(@:~HH,(Ht$`HH(H|$`=H0LL8DpaH$DHnIH|$@ H|$@(~HI'H$L[ PHI'L<H|$@2'H$u<H|$P ǃh$ l$|$ H|$P(~HH 'fHZD$ !8~HH&fHZD$ ~HH&fHZD$l H|$Pb&HD$ HxH7u8H$hdH3%(uOHp[]A\A]A^DXH$fH$HH$);HD$ HxH7t Ht$H5H|$PH%H|$`H:HHD$0HxH7tH$eH$Hc%HH|$@HN%cHhAWAVAUATIUSHHʹHxM L0dH%(H$h1hH$@AxHLEH<$HQ H,$9t$$O HHHHHHHH$HH$HrH8H^H HJHH6HH"Ht$xHHt$|HH$HH$HH\HHXHH$H$Hc0H8b fH*H$H$KpQHߍH)Hc0kdH8)HƉpH$hdH3 %(Hx[]A\A]A^A_DL$LH81HHH fH*f*<f.zt,苳8<  &H0&I$ƆHHHDŽ$fHDŽ$XfHDŽ$fHDŽ$P5H$PHxH7I}PHDŽ$A!HYHYI}hH@HHYHYH$H@HH^YH_YH$H@HHDŽ$XDb,mHL85լ#t$t;$   & &Ht$H$0H$L$$$$PH$PH$PH$PLLxfH0$T$$;fD$hfT$XD$h$L$lX$fD$`f$d$`XT$$d$l$dXl$ fD$Xt$(XL$XL$\Xf5fD$PD$PD$Ttd$.䉃t l$ . ;$: fZ ^&fYfZ Y&XZfZX ZZ%f$9tZ ,(fXLHZfZf(8#I*^ZT$YY=%YXXf(L$2,fL$fT$*0HcH\ZHPHcȃDHm=pgfff)9| lfH8fZHZd$t$fH*fɋ81ff*0XffZ ZZZ\X|$ ,$d$^D$(| IHOfH*Rf*<f.zkD,,~@:D<DHL$ |HHWH0HH\Dx|$0t$4DHL<x@:D89DHI~H!LHH~H fHZD$4HX~HfHZD$0MZxHHvL/:fH8+@D0ffA**ZZ~f(fA*L$\ZX  D,L IcH8LPHI&DL;LH8ǃhHifH*fI$HDŽ$p4$HDŽ$xHDŽ$HDŽ$HH*H^$HDŽ$Ƅ$HƄ$$HDH/of.A@HcpHŀHHPH9 <05&t$t=#|$gfff))H,\HcHPH92 <005&5#HfHH H*XfHfHH H*XfD$LL$H~D$Hy D$DL$@~D$@J D$<L$8~D$8 fDH8HfH*^L$LD$(H81HHHwfH*f*<f.ztD,8D<{I}HDŽ$fHDŽ$XfHDŽ$fH/XHPXI}hH@HH)XH*XH$H@HHXHXH$H@HHDŽ$XDf\$ \$\$\$l$Hd$I$$pHDŽ$$xƄ$D$t$<$Hl$ d$($$$$H,fDHfHH H*XfHPmDi$'fL*HP\ُ`.Xx\&.\{d~2dlLHfǃHI*fǃtHt$H& &t$DI},~mI}|H5 HHIu@:Hof.Hma@:LHL(fL*$Y߀&ZfL*$Y&Z~XL~\Lafƃl@m~趴^*&XD$xHHD$|X t%fZf(Y^°&XZODIEL$ LLc8D|$L8L8Lw~HjLH?L7t$H; H8H+fH*fI$HDŽ$p,$HDŽ$xHDŽ$HDŽ$H*H^$HDŽ$Ƅ$HD$H$Hd@IHfH* f*<f.z,HHL$<H0DxLHD2x@:D8 DHI~HLHH~HD$H HX~H$H MZxHHPH$KfD+^o&XD$x@@~~;H$趮f$ZY E}&^ q%Z, @HfHH H*XtfHfHH H*XfI},~DH|HIL:HIu@:DH|,@:AHd2d)D8~@: HDL$:t|HHLﺁ D8L~HDH:t|HLuHIBHHt?HD$HL8LHHHL$ALH|$HL$I}e IǃdLǃhPHfHH H*XfHHfHH H*XTHfHH H*X6HfHH H*XD8~@:}HDL$J:t|H]HLﺞ D8,L4~H'DH:t|HL HI@HHHD$HL8LHHHL$[@LH|$HL$ibHHH HpH$HDŽ$;Hx|HL$,H$4 LHL- 8~H HHL H$I}H ILPH9HHL H!HLHHLHHL H}1Hο}1jLH/ H$B]HH$3Hfffff.AWAVEAUATAUSHHIHH$H$MD$,L$0HD$ T$4\$8d$HxHHHHHHx1H|$M Lx8H|$!~HIL [HHMtELLHHHOH|$eHxw a[@HEHHxw BHt$0H|$0HHHH$IHxH7t Ht$0LHHtUH|$(HpHD$ ;HH|$ H|$0Q Hŋ8H|$0#~HHb~HuHHjH"H|$08H|$ NiIH9H|$HI !H|$0HH|$ +HcHH|$ f.Df.@1f.1f.f.SH_Ht&HHH@H=`UXuoH[fD[fD[D HfAHtG~fDGPWfffff.H"vWxSfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAVAUIATUSfH H*@d#^Yf(L$HfWL$f(^T$D,IcL$T$G,$B,*1HfAHHf(T$\ Y%XS#IPH9IXT$XT$,HDDuIcIhMcHJ4McIXIcI`H [J4]A\A]A^HaIXUfSH(H*@?%Y^D$ ~pHpH,H@fHt$H|$L$HZffL$XL$ ZD$W%ZT$SCH9uH([]f.HH(ATUHHSL@HHH'HdH%(HD$1HHhH`HXHpHxHHHPHHtHpHxH7&HPH@CHHǃ@BHǃ8@BHǃHgJHHHǃHAH8XH9XH8H@H@Hǃ8DfH8HxH7HlH趕HHHHD$dH3%(uUH[]A\DH@LHxw _[f.Ht$Ht$cfff.SHH[nfffff.AVAUATU`SfHHpHdH%(H$h1H(ZxfZxH@ HH$H)H$ ~H|HHH$Df&~#ZfXH*@^(d$ ZZY R&^ZY&Y\$(t$J-*&(\$d$ \f,(fH*YZɉ^^YYXZft$Zf.qH\D$sH跐H(pHPHx}.HPH(H$H|$ ??@@?@ ?ǃ,HǃǃǃǃgHt$ H|$01qLpHt$0LMHD$0HxH7gH(L@LLl$h譨H|$`HҺ~@:0@:~HHt$`H HfHZD$MZxHHHRH|$`H(LL0DpH$DH H|$@`5H|$@;~HIFH$LPH HH|$@H$H|$Pƃ1ƃ0`|$d$ H|$P~HfHZD$ a8~HtfHZD$B~HUfHZD$#H|$PHD$ HxH7u7H$hdH3%(uFHp[]A\A]A^@XH$뺐H$HH$HD$ HxH7t Ht$MHH|$PHhH|$`HHHD$0HxH7tH$H$H#HH|$@HcHhAWAVAUATIUSHHʹHM H$D$ D$$dH%(H$1H0D$(HHD$,L81H(HxHHHH|$DH5HpHLx`LhLXCbHH . @. HHD$~D$誎^%HD$ D$$X&ff\$ZZf(Y^ &X x#YY&XZfZXZZCfHxHZH~ HD$~D$HD$(|D$,L@Zf\$Y &I*^T$\$ZXZY w#^Y $M%YXXf(L$,ȋT$\$ $ HHHcBDHffHZ*Zb fH*Xft$I$f$*HDŽ$(^H$Z$Ƅ$8D$xH$\ffZZ$ $$0H0HҺH@HH fH*Zf*4f.z,,~@:Ll$P4H|HHeH(HpH@$h|$t$HL ] @:0JH I~H3LHH~HfHZD$HX~HfHZD$MZxHHLDffAD+*A*ZZfZ\L$D,' @:ƃ1IcH?DHtH@:%L$HWZHB @:d$fHZD$HD@:HDHXP@:DHH6H(HI$Hh8H`@XHƄ$8PPHHXH@`$xp0$$$$$ $($0HDHH$dH3 %(8 H[]A\A]A^A_fDH$H1H@HfH*f*4f.ztD,苃0D4QHx &&H@H@H@I$HHHDŽ$fHDŽ$fHDŽ$fHDŽ$P5H$HxH7H$HDŽ$AHXHXH$H@HHXHXH$H@HHrXHsXH$H@HHDŽ$Dv$HxHHED$0EHD$D$4~D$HED$8H@HD$~D$HD$*t@yxt fI@f.HvIH@yxt 1>*t@yxt fI@f.AVAUATUSLgH_I9toIAAmHI9tLHkHtMuދEPUuHEHPE PU uHEHHPI9uDMfMt[L]A\A]A^闺[]A\A]A^HEHPE f.AWAVIAUATUSHLoLLL)IIMzK$I9H$H<$Ht$߯MnML`Ht$LL)Ht%H>HBH:H~HFHzHM9LHHt%H2HAH1HrHBHqHHHL9uIXLAAH)HLd fDmL9IteHIhHtMuۋUruuHUHD$HRU HD$ru uHUHD$HRL9HD$IuI>HtHD$޸HD$IH$MfIFH[]A\A]A^A_H$LfDHUHD$HRU HD$eHH9EIHL$$*ufH:vWxsfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAUATUSHH8HdH%(HD$(1HH9HcH)H9HFHHHIIHH|$HD$t H|$@H1ڤIUH:HcI$HH0@H|$FHHL$(dH3 %(H8[]A\A]fD1@HH[HHHE1ɺHHL`AIXuXH$HD$HD$HHD$t@Ht$H迭H|$蕰H|$苰HHP;HHA8vWxw@9vWx^HH|$!HIH|$H H|$HH%HH HfAUATIUSHIHHXH|$0dH%(HD$H1H|$ D͢HT$H|$~ |)HL$0HT$ Ht$H貜HD$HxH7upH|$(FH|$8H$HD$HD$ HT$H|$ @@ H>HXHD$HT$ ̭H{HtGubHD$H\$ HHD$(Ll$(H{@HD$ L9HHCt"MtAE HtG txLkH|$(ZH}QHT$H$HI$IT$tBH|$,Ht$8dH34%(LuHH@[]A\A]A^@HH[tE1f.HHHHkNuPpi\Hl$HH}軬HHKHHP=IH貣LHuH|${ff.@HHtHH@fDfD1f.1f.;f.SHHP=H H?H[٩fSHHP=H ɫHH?誩H[ѢSH dH%(HD$1HH$HFHHD$t@H蚨H|$pHD$dH3%(uH [HH|$HHpUSHHHvHHHG=H}HZ~HC0zxHH{tHH@H=lNu4G@HE HC HE(HC(E0H[~HC8[~C0H[]@HHHHZ~SHˤHSH軤f.USHHY8#XT$^fZ(L$ Y%^ZX8#m,fT$L$ *Y\Y AbX^D,H1LA@DIf@ffɉщ*HcHcH*DY@DY @DAXDAXLGOL9uH[]USHHY7#8#fWXT$^fZ(L$ Y֫%^ZX7#A,fT$L$ *Y\Y aX^D,~|H1LA@DIڐ@ffɉщ*HcHcH*DY@DY @DAXDAXLGOL9uH[]0@w*@$@>@GGG GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG fff.4#((^^(tnIE1@EPIMfI*Y^XH,AADAAA9uIBDBDE1f.DUSI@BH hdH<%(H$1H|$ HHG31DHH uLD$LL$1fD$DT$t$L$$AD$@<<2\$AD$DDA1AfA A4L@4HH uH\$ DT$HzHch&+t h& h&h&Hi@H ) ))ΉA@A ACPIHHi@H ) ))9tEHi@H ) )щʉ)щ8 uAASH$dH3%(u H [] fff.USH׉H dH%(H$ 1L$ HD$ g&g&H@L9uf 1#(L$ *^,f*H|$^T$]~mM1j&HcL$ H4T$ffB*Y^XH,9t>HDDDH9H$ dH3%(u'H []$ $ F轒f.ATUAS(HHǤ%YSXL$T$ \$^ZXq0#,f\$~%YD$T$ ^*ZX40#Y\YYX^,迍,f\$d$E*Y\YXY^D,AANHA@DIڍ@ffɉщ*HcHcH*DY@DY @DAXDAXLGOL9uH[]A\DATUIS(ЉHX%YXL$T$ \$^ZX/#襌,f\$%YD$T$ ^*ZX.#Y\Y]XX^,P,f\$d$*Y\$XXY^,؃AH IT$A@DI<fȉHHc*@DY@DAXDHcBf*Y@DAXDBH9uH[]A\ffff.AUATAUSH(IHҡ%Y^XL$T$ \$^ZX|-#,f\$%YD$T$ ^*ZX?-#Y\YVX^,ʊ,f\$d$E*Y\VXY^D,}AE1ٺ@DfɉAAMcf*ȍ@DBY @DBXLA*AMcBY@DBXDBDC IE9H[]A\A]fUSHL$~`(H,HH@(Ht$H|$ $H蝌L$ W @%D$C$XT$KH9uH[]fSHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H諟HxufHD$dH3%(uH[f.PJH.fffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HHufHD$dH3%(uH[f.PJH~fffff.SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HKHufHD$dH3%(uH[f.PJH΋fffff.AVAUATUSH0dH%(HD$(11w:5t'HD$(dH3%(BH0[]A\A]A^fDBH*ufH@NvWxsfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1H|$ HT$H|$LAHL$0HT$ Ht$HʀHD$HxH7uPH|$(^H|$8THQHH߅O袚HD$HdH3%(uHX[]Ht$>藃HHH?HHH|$(H|$8֒HHHD$HxH7tHt$HATUHSH dH%(HD$1kHHH]HEH$BHU@H@ HPRHXHEH$%H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$蹑HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuPH{HHPHHaHiH!H}(HPf.@HHtHH@fDfD1f.1f.f.H?餎@SHH?萎H[鷇HL HrHH 1҅~"E<DQ@|QH9@AHtG~fDGPWfffff.H?*tRHf.H9>*ufH@TvWx|fATIUHSHHt#H{ HouHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1~H|$ eHT$H|$RHL$0HT$ Ht$HJ|HD$HxH7uPH|$(ގH|$8ԎHWhHH߅O#HD$HdH3%(uHX[]@Ht$>HHH?eH蝈HH|$(`H|$8VH~HHD$HxH7tHt$HATUHSH dH%(HD$1zHHH]HEH$zHU@H@ HPXHXHEH$襍H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$9HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuPr}HzwHHPlHHHH衉H}訌HІf.@HHtHH@fDfD1f.1f.kf.H?$@SHH?H[7SHH#HpH8HDX[ÐAHtG~fDGPW~fffff.H?*tHf.H9>*ufH@ZvWxxfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1~H|$ }HT$H|$XQHL$0HT$ Ht$HwHD$HxH7uPH|$(nH|$8dH]~HH߅O貑HD$HdH3%(uHX[]Ht$>zHHH?H-HH|$(H|$8HHHD$HxH7tHt$HATUHSH dH%(HD$1{vHHH]HEH$RvHU@H@ HP^HXHEH$5H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$ɈHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuPyH sHHPHHqHyH1H}8H`f.@HHtHH@fDfD1f.1f.~f.H?鴅@SHH?蠅H[~HL HrHH 1҅~#EQ*ufH@`vWxtfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1yH|$ uyHT$H|$^ьHL$0HT$ Ht$HZsHD$HxH7uPH|$(H|$8HcxzHH߅O2HD$HdH3%(uHX[]Ht$>'vHHH?uHHH|$(pH|$8fHHHD$HxH7tHt$HATUHSH dH%(HD$1qHHH]HEH$qHU@H@ HPdHXHEH$资H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$IHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuPtHnHHP|HHzH}H豀H}踃H}f.@HHtHH@fDfD1f.1f.{zf.H?4@SHH? H[GzSHH2H8H6V[Ð@AHtG~fDGPW鞅fffff.H?*tHf.H9>*ufH@fvWxofATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1.uH|$ uHT$H|$dqHL$0HT$ Ht$HnHD$HxH7uPH|$(莁H|$8脁HivHH߅OӈHD$HdH3%(uHX[]@Ht$>qHHH?HM{HH|$(H|$8H.{HHD$HxH7tHt$HATUHSH dH%(HD$1mHHH]HEH$rmHU@H@ HjHXHEH$UH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuP"pH*jHHP}HHvHyHQ|H}XHyf.@HHtHH@fDfD1f.1f.vf.H?|@SHH?|H[uHVHHt$H HQHHVHHPtB1fff.HVHHt$H HQHHVHHPtB1fff.AHtG~fDGPWހfffff.H?*tB|Hf.H9>*ufHmvWxjfUSH8dH%(HD$(1 HG`HHHBHD$HGhHHD$t@HGHHHBH$HGHHD$t@H>HH\$E11HHj~H|$}H{}HD$(dH3%(u^H8[]H\$TjHvH血|HHgD1Xf1$m;H|$H|H{y|HvHHHvfffff.SH0dH%(HD$(1 tHG`HHHBHD$HGhHHD$t@HGHtqHHBH$HGHHD$t@H>HtUHL$E11HzH|${H|${HD$(dH3%(uH0[1xf1l.H|$Hu{H|$k{HufSHHhHHGrdH%(HD$17{H{X.{HC@HxH7uUHC8HxH7uTHC0HxH7uSHC(HxH7uRH{zHD$dH3%(uEH[Ht$~@Ht$n@Ht$^@Ht$NkfDSHH[qfffff.AVAUAATUHo@SHEMHHwHrHGHGHHG(7HG07HG87HdH%(H$1dI$DsHDkLHCPID$HHCXt@H$H|$HC`HCh{WH$H|$ {@H$H|$0$|)H$0j"sH$%}F|HI0|Hs@LHV |H${HCHt$H|$`HL`cH|$PY{HǦHsHL$`HT$PH|$@AH{0Ht$@qHD$@HxH7HD$PHxH7HD$`HxH7HCH|$p|HHL`DH{1Ht$pAԈC HD$pHxH7HCHt$0H$HL`cH$|HHsH$H$H$AH{(H$pH$HxH7*H$HxH7)H$HxH78H$aH$H$H$HKHDŽ$HDŽ$HCHCHSH$H$9wH$,wHCHHH$jHRL=pH$zjHHyLHi,|HyH$]y{ uoHD$0HxH7AHD$ HxH7CHD$HxH7EH$dH3%(H[]A\A]A^fDH$AjoH$y5|HmHs(HHVxH$xHS(H$1ɾBvH$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$}uH$puH$fDH$fDH$fDH$fDH$9fDH$7fDH$5fDH$safDH$[fDH$CpvWxadH$HwHD$0HxH7t Ht$HD$ HxH7t Ht$HD$HxH7t Ht$H{hsH{XsHC@HxH7t Ht$0HC8HxH7t Ht$0tHC0HxH7t Ht$0YHC(HxH7t Ht$0>H{usHmHH$HvHHD$@HxH7t H$HD$PHxH7t H$HD$`HxH7H$HHHHHH$HxH7t H$bH$HxH7t H$@H$HxH7iHHD$pHxH7KHHHHH$HtD1f.SH@H\H[f.@S{HHHT$dH%(HD$1ixHL$dH3 %(u HH[+bf.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWsfffff.H?*tRoHf.H9>*ufH@uvWx]fSH0dH%(HD$(1 toHG`Ht|HHBHD$HGhHHD$t@HGH$HGHHD$t@H>HtEHL$E11HqH|$@pH|$6pHD$(dH3%(u H0[1`؂H|$HpH|$oH#jfSH0dH%(HD$(1 toHG`Ht|HHBHD$HGhHHD$t@HGH$HGHHD$t@H>HtEHL$E11HJnH|$poH|$foHD$(dH3%(u H0[1_H|$H5oH|$+oHSifSHHhHHGydH%(HD$1nH{XnHC@HxH7uUHC8HxH7uTHC0HxH7uSHC(HxH7uRH{nHD$dH3%(uEH[Ht$.@Ht$@Ht$@Ht$^fDSHH[Nefffff.AVAUAATUHo@SHEMHHwHyHGHGHHG(7HG07HG87HdH%(H$1XI$DsHDkLHCPID$HHCXt@H$H|$HC`HCh{tH$H|$ hrtH$H|$0$|sH$1xrfH$pF|HIoHs@LHVoH$oHCHt$H|$`HL`WH|$PY{H臚HsHL$`HT$PH|$@AH{0Ht$@SeHD$@HxH7HD$PHxH7HD$`HxH7HCH|$p|HHL`H{1Ht$pAԈC HD$pHxH7HCHt$0H$HL`VH$|H諙HsH$H$H$AH{(H$kdH$HxH7"H$HxH7!H$HxH70H$2H$H$H$HKHDŽ$HDŽ$HCHCHSH$H$jH$jHCHH$<xrLdH$njHHmLH\,|HwmH$*m{ ulHD$0HxH7FHD$ HxH7HHD$HxH7JH$dH3%(H[]A\A]A^H$@xrcH$m5|HHlHs(HHVlH$blHS(H$1ɾ jH$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$EiH$8iH$fDH$fDH$fDH$fDH$sAfDH$[?fDH$C=fDH$+ifDH$fDH$wvWx]UXH$HjHD$0HxH7t Ht$HD$ HxH7t Ht$HD$HxH7t Ht$tH{hgH{XgHC@HxH7t Ht$0GHC8HxH7t Ht$0,HC0HxH7t Ht$0HC(HxH7t Ht$0H{=gHeaHH$HiHHD$@HxH7t H$HD$PHxH7t H$HD$`HxH7H$dHHHHHH$HxH7t H$H$HxH7t H$H$HxH7iHHD$pHxH7KHHHHH$Hhf.1f.SH@HPH[f.@S{HHHT$dH%(HD$1)lHL$dH3 %(u HH[Uf.HVHHt$H HQHHV HHPtB1fff.HVHHt$H HQHHVHHPtB1fff.AHtG~fDGPWngfffff.H?*tbHf.H9>*ufH}vWxsQfUSHHHXdH%(HD$H1HGH'HHBHD$HCHHD$t@HCH HHBH$HC HHD$t@H}H HL$E11HeH|$cH|$c{0HCpHHHBHD$0HCxHHD$8t@HCHHHBHD$ HCHHD$(t@H}HtzHL$0Ht$ E11odH|$(cH|$8 cHD$HdH3%(uGHX[]@1f1f1vf1;u?SH|$(HbH|$8bH\H|$HbH|$ybH\USHHHXdH%(HD$H1HGH'HHBHD$HCHHD$t@HCH HHBH$HC HHD$t@H}H HL$E11H`H|$aH|$a{0HCpHHHBHD$0HCxHHD$8t@HCHHHBHD$ HCHHD$(t@H}HtzHL$0Ht$ E11`H|$(EaH|$8;aHD$HdH3%(uGHX[]@1f1f1vf1;soQH|$(H`H|$8`HZH|$H`H|$`HZSHHxHHGЂdH%(HD$1w`H{hn`HCPHxH7u]HCHHxH7u\HC@HxH7u[HC8HxH7uZH{ !`H{`HD$dH3%(uDH[fHt$&@Ht$@Ht$@Ht$OPfffff.SHH[Vfffff.AVAUAATUHoPSHEMH0Hw(HЂHGHGHHGHG HG87HG@7HGH7HdH%(H$(1II$DsXDk\HC`ID$HHCht@H$H|$HCpHCx{weH$H|$ N{`eH$H|$0$|IeH$0(zBXH$EbF|HIPaHsPLHV@aH$`HC(Ht$H|$`HL` IH|$PY{HHs(HL$`HT$PH|$@AH{@Ht$@VHD$@HxH7]HD$PHxH7_HD$`HxH7aHC(H|$p|HHL`dH{(1Ht$pAԈC0HD$pHxH75HC(Ht$0H$HL`0HH$|H Hs(H$H$H$AH{8H$UH$HxH7H$HxH7H$HxH7(H$11_H$H$H$HKHDŽ$HDŽ$HCHCHSH$H$Z\H$M\H$;FH$H$H$HKHDŽ$HDŽ$HCHC HS H$H$[H$[HCH<HH$(zHRL>fUH$i_jHHt^LHM,|HW^H$ ^HCHHH$(zHRL?TH$^jHH]LHJM,|H]H$]{0umHD$0HxH7HD$ HxH7HD$HxH7H$(dH3%(H0[]A\A]A^@H$C(zTH$^5|HRHs8HHV]H$\HS8H$1ɾrZH$H$H$HKpHDŽ$HDŽ$HCpHCxHSxH$H$YH$YH$fDH$fDH$fDH$sfDH$[fDH$CfDH$+fDH$5fDH$3fDH$9IvWxEvWxEHHD$pHxH7*HD$0HxH7t Ht$rHD$ HxH7t Ht$VHD$HxH7t Ht$:H{xXH{hWHCPHxH7t Ht$0 HCHHxH7t Ht$0HC@HxH7t Ht$0HC8HxH7t Ht$0H{ WH{zWHQHH$HxH7t H$}H$HxH7H$WH=H$HYH$HYHH$HxH7eH$SHHH]HHD$PHxH7t H$HD$`HxH79HH$HYHHH$HXHHD$@HxH7nH$8\1f.SHPH@H[f.@S{HHHT$dH%(HD$1Y\HL$dH3 %(u HH[Ff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWWfffff.H?*tBSHf.H9>*ufHvWxAfUSH8dH%(HD$(1 HG`HHHBHD$HGhHHD$t@HGH$HGHHD$t@H>HH\$E11HHzUH|$ TH{THD$(dH3%(uNH8[]H\$V(HMHW|HVHwVD1=DDfH|$HSH{SHMHH6VHMfffff.SH0dH%(HD$(1 toHG`Ht|HHBHD$HGhHHD$t@HGH$HGHHD$t@H>HtEHL$E11HQH|$RH|$RHD$(dH3%(u H0[1WCeH|$HRH|$RHLfSHHhHHGЊdH%(HD$1wRH{XnRHC@HxH7uUHC8HxH7uTHC0HxH7uSHC(HxH7uRH{!RHD$dH3%(uEH[Ht$@Ht$@Ht$@Ht$WBfDSHH[Hfffff.AVAUAATUHo@SHEMHHwHЊHGHGHHG(7HG07HG87HdH%(H$1HD$ HxH7@HD$HxH7BH$dH3%(H[]A\A]A^H$C(1GH$4Q5|H'EHs(HHV7PH$OHS(H$1ɾMH$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$LH$LH$kfDH$SfDH$;fDH$#fDH$ IfDH$GfDH$EfDH$qfDH$fDH$vWx8@HD$PHxH7t H$HD$`HxH7H$HHHHHH$HxH7t H$H$HxH7t H$H$HxH7iHHD$pHxH7KHHHHH$HLD1f.SH@H#4H[f.@S{HHHT$dH%(HD$1OHL$dH3 %(u HH[{9f.HVHHt$H HQHHVHHPtB1fff.HVHHt$H HQHHVHHPtB1fff.AHtG~fDGPWJfffff.H?*tbFHf.H9>*ufHvWx5fUSH8dH%(HD$(1 HG`HHHBHD$HGhHHD$t@HGHHHBH$HGHHD$t@H>HH\$E11HHHH|$0GH{'GHD$(dH3%(u^H8[]H\$T(H@HJ|HIHID1Xf1D7YH|$HFH{FH@HH6IH@fffff.SH0dH%(HD$(1 tHG`HHHBHD$HGhHHD$t@HGHtqHHBH$HGHHD$t@H>HtUHL$E11HDH|$EH|$EHD$(dH3%(uH0[1xf176XH|$HEH|$EH?fSHHhHHGВdH%(HD$1WEH{XNEHC@HxH7uUHC8HxH7uTHC0HxH7uSHC(HxH7uRH{EHD$dH3%(uEH[Ht$~@Ht$n@Ht$^@Ht$N75fDSHH[;fffff.AVAUAATUHo@SHEMHHwHВHGHGHHG(7HG07HG87HdH%(H$1.I$DsHDkLHCPID$HHCXt@H$H|$HC`HCh{wJH$H|$ N{`JH$H|$0$|IJH$0(B=H$EGF|HIPFHs@LHV@FH$EHCHt$H|$`HL` .H|$PY{HpHsHL$`HT$PH|$@AH{0Ht$@;HD$@HxH7HD$PHxH7HD$`HxH7HCH|$p|HHL`dpH{1Ht$pAԈC HD$pHxH7HCHt$0H$HL`0-H$|H pHsH$H$H$AH{(H$:H$HxH7*H$HxH7)H$HxH78H$11DH$H$H$HKHDŽ$HDŽ$HCHCHSH$H$ZAH$MAHCHHH$(HRL=:H$DjHHCLH=3,|HCH$~C{ upHD$0HxH7BHD$ HxH7DHD$HxH7FH$dH3%(H[]A\A]A^H$A(:H$D5|H7Hs(HHVCH$BHS(H$1ɾb@H$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$?H$?H$fDH$fDH$fDH$fDH$9fDH$7fDH$5fDH$safDH$[fDH$CvWx+/H$H AHD$0HxH7t Ht$HD$ HxH7t Ht$HD$HxH7t Ht$H{h>H{X >HC@HxH7t Ht$0HC8HxH7t Ht$0tHC0HxH7t Ht$0YHC(HxH7t Ht$0>H{=H7HH$H%@HHD$@HxH7t H$HD$PHxH7t H$HD$`HxH7H$HHHHHH$HxH7t H$bH$HxH7t H$@H$HxH7iHHD$pHxH7KHHHHH$H>D1f.SH@H&H[f.@S{HHHT$dH%(HD$1BHL$dH3 %(u HH[K,f.HH <6HH ~(LL?IDHHzL9DA@yuÐAHtG~fDGPW>fffff.H?*tr9Hf.H9>*ufHvWx(fATIUHSHHt#H{ H:uHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1-H|$ -HT$H|$(@HL$0HT$ Ht$AHD;HD$HxH7uRH|$(9H|$89H.HH߅O=AHD$HdH3%(uHX[]fDHt$6/*HHH?}7H3HH|$(x9H|$8n9H3HHD$HxH7tHt$HATUHSH dH%(HD$1 &HHH]HEH$%HU@H@ HPHXHEH$8H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$Y8HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuP(H"HHP5HH/H 2H4H}7H1f.@HHtHH@fDfD1f.1f..f.H?D5@SHH?05H[W.HH <6HH ~1L IDDHHzL9fDAfyuAHtG~fDGPW~9fffff.H?*t4Hf.H9>*ufH@vWx#fATIUHSHHt#H{ H5uHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1)H|$ (HT$H|$Q'fffff.AUATUSHHXdH%(HD$H10iHIHHP(HHD$0HFHHD$8t@H\$0HLl$8MtAEH}HHP(I$HD$0ID$HHD$8t@HLl$8MtAEH}HHP(I$HD$0ID$HHD$8t@HLl$8MtAEHuH|$HP8HuHHP@I<$HHL$E11H0Ll$MtAELLl$MtAEHߺP<(HD2!pHR1H 1HuHHP8HuH|$ HP@I<$HHt$ E1H1o/Ld$(MtAD$Ld$8MtAD$!HߺS'H1H0H]0E0HD$HdH3%(HX[]A\A]f.H\$0GHH,1/@H:0H/IEH@H=mNI}HtHPAE IELHPHkNPfIEH@H=mNlI}HtHPAE IELHPHkNKPfIEH@H=mNI}HtHPAE IELHPHkNPfI$H@H=mNI|$HtHPAD$ I$LHPHkNPI$H@H=mNI|$HtHPAD$ I$LHPHkN0PIEH@H=mNI}HtHPAE }IELHPHkNP]fIEH@H=mNuHI}HtHPAE ?IELHPHkNPDLLYfDLfDLfDLjfDLfDL)W*if=HH{)H'$HH,H$H|$H)H|$)H#HH|$(H)럐fDAUATUSHHXdH%(HD$H10u]Hl$0\HH)-2H7,H+HD$HdH3%(&HX[]A\A]IHwH|$HP8HsHHP@I<$HGHL$E11H'Hl$HtEHl$HtEhHsHl$0HHP8HsH|$ HP@I<$HHt$ E1H18'Ll$(MtAEJLl$8MtAEH{HHP0I$HD$0ID$HHD$8t@HLl$8MtAE"H{HHP0I$HD$0ID$HHD$8t@HLl$8MtAExH{HHP0I$HD$0ID$HHD$8t@HHl$8HtEC0fDHEH@H=mNH}HtHPE bHEHHPHkNPBf.HEH@H=mN|H}HtHPE HEHHPHkNjPf.HEH@H=mN H}HtHPE HEHHPHkNPf.IEH@H=mNI}HtHPAE QIELHPHkNP1fIEH@H=mN,I}HtHPAE IELHPHkN^PfIEH@H=mNI}HtHPAE IELHPHkNPfIEH@H=mNuPI}HtHPAE IELHPHkNPc7LfLIfDLfDLifDHfDHfDH\*mHH}#HH|$H#H|$#HHH|$(H#HHX&HATULSHH HHGHWHOLGLd$0Hl$8dH%(HD$1;H{(L/HEHC8HEHHC@t@HD$dH3%(C0u H[]A\HS HHzH7t Ht$$6Hf.@1f.SH H H[f.@S={HHHT$dH%(HD$19)HL$dH3 %(u HH[f.SHvHHP8H[Ðfff.SHvHHP@H[Ðfff.USHHHoHdH%(HD$1Ht$HEHH@H=^Y HHkHt$HEHH@H=^YHHkHt$HEHH@H=^YaHHk@HtEtIHC(HxH7HC HxH7HD$dH3%('H[]@HEH@H=mNH}HtHPE uHEHHPHkNPefDff fAHtfPЅ;Ht$8#,AHtFPЅHt$#H1fDPJHPJHfDSHH[fffff.AUATUSHH8dH%(HD$(10iHIHHP(HHD$HFHHD$t@H\$HLl$MtAEH}HHP(I$HD$ID$HHD$t@HLl$MtAEHuHHP8HuHHP@I<$HE1H1H( Ld$MtAD$Ld$MtAD$ZHߺWhHHP"H^!H!E0HD$(dH3%(H8[]A\A]H\$IhHDH!5ЦH H IEH@H=mNI}HtHPAE IELHPHkNiPfIEH@H=mNI}HtHPAE IELHPHkNPfI$H@H=mNI|$HtHPAD$ mI$LHPHkNPMI$H@H=mNuHI|$HtHPAD$ I$LHPHkNuVPLLZfDLfDLy2 /HH{$HLHHH9H|$H@AUATUSHH8dH%(HD$(10u]H\$bhH Hy8(HH?HD$(dH3%(H8[]A\A]IHwH\$HHP8HuHHP@I<$H@E1H1HLl$MtAELl$MtAEEH}HHP0I$HD$ID$HHD$t@HLl$MtAEH}HHP0I$HD$ID$HHD$t@HH\$HtCtE0DHH@H=mNuH{HtHPC uHHHPHkN_PIEH@H=mNI}HtHPAE &IELHPHkNPIEH@H=mNI}HtHPAE IELHPHkNPdfIEH@H=mNuHI}HtHPAE  IELHPHkNuCP,@LLYfDLfDHD5 HH{HHH6HH|$HqƐf.ATULSHH HHGHWHOLGLd$0Hl$8dH%(HD$1H{(LHEHC8HEHHC@t@HD$dH3%(C0u H[]A\dHS HHzH7t Ht$&+Hf.@1f.SH HcH[f.@S7{HHHT$dH%(HD$1HL$dH3 %(u HH[f.HVHHHHVPHHWtBÐfHVHHHHVPHHWtBÐfAHtG~fDGPW~fffff.H?*tHf.H9>*ufHvWxfUSH8dH%(HD$(1(HGXHD$HG`HHD$t@HGHH$HGPHHD$t@H>HH\$E11HH*H|$H{Hߺl8uH} HHCHD$(dH3%(u>H8[]@H\$p8H!H)0{H7)HHHXH|$HH{H:SH0dH%(HD$(1(tcHGXHD$HG`HHD$t@HGHH$HGPHHD$t@H>HtAHL$E11HfH|$H|$HD$(dH3%(uH0[.(H|$HUH|$KHsfSHH`HHGдdH%(HD$1H{PHC0HxH7u=HCHxH7uH$H$HH$AH{0H$S H$HxH7H$HxH7H$HxH7N{LKK@H$HC C8H$H$H$HKHHDŽ$HDŽ$HCHHCPHSPH$H$H$S8H$>8T$P H$S'HFD$H H$ [@H$?8\$H$HD$H H$H$@8Hk H$!|HHHtH$gHCHHH$ A8HLH$ Or|HBHH,|H*H$ {(`HD$0HxH7HD$ HxH7H$dH3%(H([]A\A]A^A_fD^L;K@H$0HC C8dH$0H$8H$HKHHDŽ$8HDŽ$0HCHHCPHSPH$H$_ H$8R c8H$@G8d$H$@'HD$H H$@k@H$PH8l$H$PHD$Ha H$PTH$`I8Hk IH$`L!|H?HHH$`HCHH$H$pJ8HH$pr|HHHW,|HH$p{(H$\8H$5|HHs0HHVH$EHS0Hs H$1 H$HMHHBH$HKXH$HCXHC`HDŽ$HDŽ$HS`H$H$ H$ HCXHH$^8HH$|HHH ,|HH$R ZD{LkK@H$HC C8H$H$H$HKHHDŽ$HDŽ$HCHHCPHSPH$H$ H$ s8H$P8t$H$ 'HD$HhH$[ {@H$Q8|$IH$L H?D$HH$ H$R8Hk H$ !|HHHH$ HCHHH$S8HH$ r|HHH,|HzH$M KH$W8H$7 HsHHVG ȭHH$ HC H$CfDH$+fDH$8fDH$6fDH$7fDH$=fDH$Dc(NfH$fDH${fDH$cfDH$K1H$H HD$0HxH7t Ht$HD$ HxH7t Ht$H{`H{PHC0HxH7t Ht$0HCHxH7t Ht$0H{HH7t Ht$0HH$H HH$H3HH$HxH7H$.H$HHHD$PHxH7HHD$@HxH7HHHH$HFHHD$pHxH7t H$H$HxH7R6H$H8H$H#HH$HxH7H$HH$PHH$`H|H$pHgH$HRH$H=HH$HxH7t H$H$HxH7H$]HHHHD$`HxH7H$%rH$HH$ HH$@HvHG f.SHHH[f.@S.{HHHT$dH%(HD$1 HL$dH3 %(u HH[f.H$@SHHH[7fDUSfHfHH,*H*H,YfH*^,HuH}LDH)1HtfD H9wH[]fDATUSHD$dH%(HD$1Hf.LIH&HȍND E1HEHfBLDD9Aȉw AID\$AHA@AA@H9uH0A9ANuHT$dH3%(H[]A\fD~|DAD 1 fDAA9wHcAAADC IEDT$A9DD|QE11@AHtG~fDGPWfffff.H?*tHf.H9>*ufHvWxfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHhH|$@$L$dH%(HD$X1#H|$0 HT$H|$ 0fHL$@HT$0Ht$ HHD$ HxH7H|$8H|$Hu$H\$ǃǃǃ$f.r_'<&Y^ZH, D$H^$|H/HD$XdH3%(uFHh[]$Y;&^D$H, Ht$$HHyHHH|$8tH|$HjHHHD$ HxH7tHt$CHfff.ATUHS(H0D$ $dH%(HD$(1 $HD$HH]HEHD$HUH|$@@ HPHXHEHT$H{HtGu^HEH\$HHD$thLd$H{@HD$L9HHCt#MtAD$ HtG t;LcH|$-HL$(dH3 %(Hu3H0[]A\ÐHH[tE1fHHPHkNuPrHzHHPlHHHHH}Hf.@HHtHH@fDfD1f.1f.kf.H$@SHHH[7fDUSfHfHH,*H*H,YfH*^,HuH}LDH)1HtfD H9wH[]fDATUSHD$dH%(HD$1Hf.LILLDF E1JAHfDD DE9DDw AID\$EHDPH9EuʼnH0A9ANHT$dH3%(H[]A\~lAD 1 9w EHcŃEB!IEDT$A9|gf.E11SAHtG~fDGPWfffff.H?*t"Hf.H9>*ufH@vWxfATIUHSHHt#H{ H?uHEH9C vH[HuL[]A\IH[ǐfDUSHHhH|$@$L$dH%(HD$X1CH|$0*HT$H|$ HL$@HT$0Ht$ H/HD$ HxH7H|$8H|$H$H\$ǃǃǃ$f.r_G5&Y^zH, D$H^$HOHD$XdH3%(uFHh[]$Y4&^D$H, Ht$DHHHHH|$8H|$HHHHD$ HxH7tHt$CHfff.ATUHS(H0D$ $dH%(HD$(1 $HD$HH]HEHD$HUH|$@@ HHXHEHT$H{HtGu^HEH\$HHD$thLd$H{@HD$L9HHCt#MtAD$ HtG t;LcH|$MHL$(dH3 %(Hu3H0[]A\ÐHH[tE1fHHPHkNuPHHHPHHH HH}Hf.@HHtHH@fDfD1f.1f.f.HD@SHH0H[WfDUSfHfHH,*H*H,YfH*^,HuH}LDH)1HtfD H9wH[]fDUSHD$dH%(HD$1Hf.LIHHȍN1LT ID AȉD9Dr I\$A HfHL9u‰H09NHT$dH3%(H[]@~lDDA1J@EHcŃfDADD IDDD$ADE9DjE9sE11WfAHtG~fDGPWfffff.H?*tRHf.H9>*ufHvWxfATIUHSHHt#H{ HouHEH9C vH[HuL[]A\IH[ǐfDUSHHhH|$@$L$dH%(HD$X1sH|$0ZHT$H|$ HL$@HT$0Ht$ H_HD$ HxH7H|$8H|$H$H\$ǃǃǃ$f.r_w.&Y^H, D$H^$HHD$XdH3%(uFHh[]$Y.&^D$HH, Ht$tHHHHH|$8H|$HHHHD$ HxH7tHt$CHfff.ATUHS(H0D$ $dH%(HD$(1@ $HD$HH]HEHD$ HUH|$@@ HHXHEHT$H{HtGu^HEH\$HHD$thLd$H{@HD$L9HHCt#MtAD$ HtG t;LcH|$}HL$(dH3 %(Hu3H0[]A\ÐHH[tE1fHHPHkNuPHHHPHH1H9HH}H f.@HHtHH@fDfD1f.1f.f.SHvHHP8H[Ðfff.SHv HHP@H[Ðfff.HLj<@HLj$?@AHtG~fDGPWfffff.HvWxfATUHSHpdH%(HD$h1xHIHHP(HHD$PHFHHD$Xt@H\$PHH{mH}HHP(I$HD$PID$HHD$Xt@HH{8H}HHP(I$HD$PID$HHD$Xt@HH{H} HHP(I$HD$PID$HHD$Xt@HH{HuH|$HP8HuHHP@I<$HHL$E11HH|$H|$Hߺp-H5HCHHuH|$0HP8HuH|$ HP@I<$H;HL$0Ht$ E11\H|$(H|$8HߺpHHHtHu HHP8HuH|$@HP@I<$HHt$@E1H1H|$HH{vHߺp$H,H:HƅxHD$hdH3%(uKHp[]A\fH\$P|pH$HHHkHH|$8HHHkHH|$HHH{HHHH|$HH|$(HlH|$HS뺐fffff.ATUHSHpdH%(HD$h1xu\H\$PpH H'HHHD$hdH3%(Hp[]A\ÐIHwH|$HP8HuHHP@I<$HHL$E11HRH|$xH|$nHuH|$0HP8HuH|$ HP@I<$H[HL$0Ht$ E11H|$(H\$P H|$8Hu HHP8HuH|$@HP@I<$HHt$@E1H1H|$HH{H}HHP0I$HD$PID$HHD$Xt@HH{H}HHP0I$HD$PID$HHD$Xt@HH{^H}HHP0I$HD$PID$HHD$Xt@HH{)H} HHP0I$HD$PID$HHD$Xt@HH{ƅx nHH|$HHHnHH|$HHH|$8HH|$(HHH{wHH|$HHbAWAVAUATUSHH8dH%(HD$(1|tcHl$pHHHHHD$(dH3%(H8[]A\A]A^A_fHl$_8pHVH^ HIiLDHl$DgDD@Do8 pHH ^{HIDL'HIHt$LD|$ރHIDLHxH?3f.Hl$DgDD@Do8pHHH@H@ LH@(gLsXLH1HHHHƃ0ƃ1ƃ2Hǃ8ǃHHǃPHǃhHXH`HǃpHǃxHǃHǃHǃHǃHǃHǃƃƃH0HǃYHǃLH$HD$HD$0HHXHl$0HT$@@ HHD$HT$0H{HtGufHD$H\$0HHD$8"Ld$8H{@HD$0L9HHCt'MtAD$ HtG LcH}tHIHD$H$HHT$0HD$8t@HT$0HD$8IXIXHI`HI`HL$0HT$8 H$HH$HD$0HD$HD$HD$8LI|$HD$XdH3%(H`[]A\A]A^f.HH[E1HHPHkNuPHl$0vHHHD$0P{xIHHD$0zxLLLmH{ H{HtG uHPHHvHIVHH$P{xVLHH$zxs<Yx HHHD$0P{xHHHD$0zx5I|$kHH.HH1IHLHHHPHHH|$ H3fATUSHH dH%(HD$1yLHf.HL$$D$oDHHHH9tH|HQH9tEHH|$t H<$HytHD$dH3%(udH []A\HDHHPHH@HHHH놀|$Ht H<$]H`AVAUATUHSHH@dH%(HD$81HH|$$D$HD$HHHHVH94H$tHHH|$^HHOlH(?Ha|$ƃyI& .HXHoI@HH)H~ZLHHIHH?HH)H$Hiʚ;H)HL$II9t`HT$HHt|$tHD$8dH3%(H@[]A\A]A^DH|$1HHYH|$`Tx#H|$HD$P{x H|$HHD$zxH  Tx7YxSxWxSxWx|$HtH|$fffff.ATUHSHvHHLHdH%(H$1FGHEI9HL賒HHǃHǃ(HH Hu HtML'HHHHQHuHHHPHuH HE8H(Hu@H0L@EH8HEPI9HPLHHHǃPHǃhHXH`Hu`HtPLZHPH fDHHQHuHXHHPHuH`HExHhHHpL(H|$L+HD$H|$0LCCfCA H|$0 H|$0CDw H$L H$H|$ H|$ HH7C@H$, H{HHC H$0LHHh`d H{ H$0H$0 HD$HxH7u?H$dH3%(u;H[]A\H$0sefDH$0[H$0Ht HD$HxH7t Ht$(HHH$H; H|$0H, f.AWAVAUATAUSHHH(HLc0HGؐdH%(H$x1H$L$H$HOLGLOHGL$LLHDk8HHD$LL*IHxIFHHt@HH$1HDŽ$HDŽ$IHD$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$JHǃHǃ1HǃHǃLHǃHǃHǃHǃHǃHǃIH$H$L$HHHHLL$H$HH$HLL$H$HLL$H$HLL$H$LL$H$LL$H$LL$H$HLHHH$H$H$HH$~H1HHD$( HHHD$8HXHHD$0(H{ƃys8HP`H{s8HPhH{ s8HPhC8H{Ls@LCHHPXH{LHP`HEH|$pLp(HC8HHD$H|$`LX&HT$pHt$`H|$PH|$P XxHH$HH$H71AAH$HxH7HD$PHxH7HD$`HxH7HD$pHxH7EC8H$@KpD$$7H$@:^{HIEt$$LeHI$DLH$@H{DHPpHEHt$H$Lp(H$LXH$H$H$H$ YxHH$HH$H71AAH$HxH7H$HxH7H$HxH7H$HxH7EC8H$PQpD$$H$P^{HIt$$L~uHDHfH$PYH{DHPxHEHt$H$Lp@H$LXMH$H$H$H$ XxHfH$HH$H7AH$ZHxH7H$HxH7H$HxH7H$HxH7=.'#zH{HPhH{HHEHt$H$0LpH$ LX8H$0H$ H$H$HH$HH$H71AֈH$HxH7CH$HxH7BH$ HxH7H$0HxH7H$`]pDc86H$`9^{H,DHHI,@LPH$`H{L|$HLH{LHPpHsLHsLs8LnHxH$HHH$t@H$LH$H$ƃxǃ| H|$H$:H$pHpH$) H$xdH3%(HĈ[]A\A]A^A_HEH$LXLp(H$YxHH$HH$H7AAH$HxH7 H$HxH7}H$ZkDHEH$LXLp(CH$XxHH$HH$H71AAH$HxH7H$HxH7eH$SHEH$LXLp@H$XxaHfH$HH$H7AH$ZHxH7H$HxH7H$D$$D$$fH$mfDH$nfDH$D$$D$$fH$D$$D$$fH$D$$}D$$fH$cfDH$KfDH$D$$-D$$fH$fDH$fDH$fDH$fDH$fDH$fDH$fDH$kfDH$SfDH$D$$5D$$f.H$+H$pvH$pHDŽ$pP{xH$pHHDŽ$pzxH|$[HHhHǃPLH|$ HC0HxH7t Ht$OkH{(HH7t Ht$OPHH$`HH|$09H`MH|$8H|$( t7pl(vXvCHH$HxH7t H$H$HxH7rH$`H$HKHHH$HxH7t H$QH$HxH7t H$/H$ HxH7t H$ H$0HxH7JHHH$HxH7t H$H$HxH7t H$H$HxH7WH$HHH$HxH7!HH$HxH7tH$*HbHHD$pHxH7]HH|$(Hm#H$@HHH$HxH7H$HH*H$H MHHH$PH@(HH$HxH7t H$6H$HxH7t H$H$HxH7t H$H$HxH7/HHHHH$HxH7t H$HD$PHxH7t H$HD$`HxH7NH$^N@0Wx5DSHH[f.@SHHPHɸH[SHHPH詸HqH[鸯AHtG~fDGPW.fffff.H?*t蒶Hf.H9>*ufHvWx3fATUHn(SHHHN8H9thLMtI@LILAMtMAMIMMAHHHH HF8HHF8HHH[]A\fHT$aHT$IHH@HHID$tH@HLHT$hHT$HHtL` fDHHH(HdH%(HD$1HFH$HHD$t @H$HD$HHHHH|$H $HT$苶HD$dH3%(uH(ÐHHHfff.AUATUSHH8HdH%(HD$(1HPXHHaH|$1eLLd$H|$ߵM9ttLMI$HHLhIXucH$HD$HD$HHD$t@Ht$L蚲H|$pH|$fHHPHD$(dH3%(uH8[]A\A]fHLAyHH|$HHPH=HH"H*H|$HHfDAUATUSHH8dH%(HD$(1詡HHH|$1LLd$H|$茴M9tqLMI$1HHLhIXucH$HD$HD$HHD$t@Ht$LJH|$ H|$HHPHD$(dH3%(uH8[]A\A]fHLAp)HH|$γHHPHHHҪHڭH|$H蝳HfDATUHSH HD$HD$-dH%(HD$1H$KHt,HHD$dH3%(H []A\0D$t<D$LeHH@LHXH 1ɺ;;H4H9u5襟HT$@HKHPPHHHH袬fATUHSH HD$HD$-dH%(HD$1H$JHt,HHD$dH3%(H []A\0D$t<D$Le˞HH@LHXH1ɺ9@9HH9u5腞HT$@HJHPPHHHH肫fATUHSH HD$HD$-dH%(HD$1H$PJHt,HHD$dH3%(H []A\0D$t<D$Le諝HH@LHXH͞1ɺ606HH9u5eHT$@HPJHPPHڠHHjHbfATUHSH HD$HD$-dH%(HD$1H$JHt,HHD$dH3%(H []A\0D$t<D$Le苜HH@LHXH譝1ɺ@87HԱH9u5EHT$@HJHPPH躟{HHJHBfATUHSH HD$HD$-dH%(HD$1H$PKHt,HHD$dH3%(H []A\0D$t<D$LekHH@LHXH荜1ɺP=<H贰H9u5%HT$@HPKHPPH蚞 HH* H"fUHGSHHHGHGHGHG@GHHGPGYHGHG HG(GhHGpHG(HG0HG8HGhHLJLJHLJHGxHHHLJHLJHHHPHLJHLJHLJHLJLJH[]HHHHfDUHGSHHHGHGHGHG@GHHGPGYHGHG HG(GhHGpHG(HG0HG8HGhHLJLJHLJHGxHHHLJHLJHHHPHHLJHLJHLJLJH[]HHʫHHf.ATUHS0IH dH%(HD$1xHHH@H@`-@H@ H@(HLHHh(HE@HL1ɺ@H蕭H9HHHCHT$LHH\$HHCH|$HtL A|$HtBI|$PAD$HHQH<$Ht# H+HD$dH3%(uSH []A\I|$PtH<$Hu̹a8薗ɾ8hxӚH|$HHt HHQHHLH_H'H/f.Df.@f.@f.@f.@f.@1f.f.@f.@f.@f.@f.@1f.1f.1f.+f.f. f.f.f.۟f.˟f.黟f.髟f.雟f.HHL@LHG MHHxLHIxHxHt$HG HHxHpHtHH@(Hf.fHG(HMHt0t2HpHPHHH9t!SHH]HC(H@@[fDH@@f.DSHH[龞f.@SHHNpH[闞HNT@SHHN@H[gHG(HKHt0t2HpHPHHH9t!SHH荜HC(H@@[fDH@@f.DSHH[f.@SHHKpH[ǝSHHKPH[駝HG(HMHt0t2HpHPHHH9t!SHH͛HC(H@@[fDH@@f.DSHH[.f.@SHHPMpH[HPMT@SHHPM@H[לHG(HPLHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DSHH[^f.@SHHLpH[7HLT@SHHL@H[USHHHHt1ɺ@87H+H9u8蜑HS@HJHPHEPHH[]ϺfUSHHHHt1ɺ606H軦H9u8,HS@HPJHPHEPHH[]yfUSHHHHt1ɺP=<HKH9u8輐HS@HPKHPHEPHH[]衹fUSHHHHt1ɺ;;HۥH9u8LHS@HKHPHEPHH[]KfUSHHHHt1ɺ9@9HkH9u8܏HS@HJHPHEPHH[]fHG(HKHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HKHt0t2HpHPHHH9t!SHH蝗HC(H@@[fDH@@f.DHG(HPLHt0t2HpHPHHH9t!SHH=HC(H@@[fDH@@f.DHG(HMHt0t2HpHPHHH9t!SHHݖHC(H@@[fDH@@f.DHG(HMHt0t2HpHPHHH9t!SHH}HC(H@@[fDH@@f.D1G~'GuHtHH@P̴HHGH~HHHGt HHHPIGHtnHHWPH@ H=YHG8HpHw8IB LNL@LHLFHpHHF HG8HxHpHHH@(HHG8HHHG(H9HO8t[LO(L9t|E1HII9uIt`IHw8L@ HHWPHG8LHAHw8HLHpH@HtLHWPHM@(HA)`>]f.USHHHw@GYHtHkHHkHkHkHHspH{`HkHk [HChHHHCpHǃHCxH&HHǃHǃHHH[]@ATUHStHEHUH[]A\HHs@CYHt 1HLcLLcLcLcLHspH{`LcLc yHChHHHCpHǃHCxHDHHǃHǃHH1@HSHt1ɺ@֟H9uH[迱AUATIUSHH8dH%(HD$(1HPHH|$D$ IHD$LfH_(I;]8tRH{Ht]HLHPHtD$ H|$D$ jHL$(dH3 %(D$ uTH8[]A\A]LD$ 뼹0Wx諉@i`蒉HH|$HxAVAULoATUISHGLwL9u_CIl$HQH}Ht#H HLt[HID$L9HXHuI\$HH{HtH蹒@0Wx谈fHH@HXSLH~nf[]A\A]A^HH\HT@USHH(dH%(HD$1HHH@HT$HHHHD$H|$Ht?{HuYH}HCPHH$HtHPHHHHPtSHD$dH3%(u~H([]H$HKPCHHt/H@HHCPtHQH~MHHHQufDHHCPu듐H$CHHt"H@HCP]R苊蒮]HCPVHH|$HtBHf.SHGHH~6HHHGt[@1ɺ@>H9uHH[H@HHHtHBHHHtHPH~HHHPt HHͭf.fUSHHHdH%(HD$81HHLJH|$ D$0HD$(HT$(HD$ 1ɾ@HHHHǃH\$ D$0HD$(H90sHHH@H@p-@H@ H@(HKHT$HX(HHC@HHLH@HD$ H|$Ht{HtVH{PCHHH<$Ht]H%HD$ HT$(HHHD$8dH3%(uHH[]H{PtH<$Hu.HHH|$HtHH|$ H菑f.DHSHt1ɺCB覙H9uH[SHGHH~6HHHGt[@1ɺIH_H9uHH[H@t諭SHGHH~6HHHGt[@1ɺFEH9uHH[H@$uSHGHH~6HHHGt[@1ɺCB还H9uHH[H@Ԫ?USHHHdH%(HD$1Htw1ɺFEnH91H-FEHDH9H-HL$dH3 %(H[]fDH-uHk(HUYHH 0EHNHH@p-@H@ Hh(HHE@HLH@H$H<$HtVS@sH9r诪DHt1ɺFEHGH9uHk(Ht*UYHHZEHHH4HH<$HtH贎@USHHHHt1ɺ@>ΖH9ueH-t H[]@Ht1ɺ@>H藖H9u.Hk(Ht*UYHHEHHHKݩ 8hfDUSHHHHt1ɺIHH9ueH-t H[]@Ht1ɺIHHH9u.Hk(Ht*UYHHEHHHߨ#8hVfDHHtHFHH7HtHPH~HHHPt HH耧蕧f.DHATIUHSHt1ɺCBH9HCH}HEHtHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺCBH誔H9uSHH[]A\H@DI$HI<$tH[]A\}D1L軧~f.HATIUHSHt1ɺ@>H9HCI $I$HtHAHHHHAHCHtvHuH9]tRHC[]A\DH~wHHHCu1ɺ@>H蒓H9u`HH[]A\H@DHEHhH}tH[]A\D1Hc谦s>HATIUHSHt1ɺIHH9HCI $I$HtHAHHHHAHCHtvHuH9]tRHC[]A\DH~wHHHCu1ɺIHHrH9u`HH[]A\H@DHEHHH}tH[]A\D1HCBSpHATIUHSHt1ɺFEݑH9HCH}HEHtHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺFEHjH9uSHH[]A\H@DI$H@I<$tH[]A\D1La>菥f.USHH(dH%(HD$1HHH@HT$HHHHD$NH|$Ht{HuYH}HCPHH$HtHPHHHHPtSHD$dH3%(H([]H$HKPCHHt/H@HHCPtHQH~aHHHQu\fDHHCPu듐H$CHHt6H@HCP]0Wxz}ףHCPBHH|$HtHVfDATUHSHH dH%(HD$1H1ɺCBXH9(H-tv1ɺCBH2H9H-HTH-HǸHL$dH3 %(H []A\fH-uHHh(HUYHH0EHyHH@H@@-@H@ HHh(HHE@HPN%oHH\$HCHt$H@H|$Ht(膡f[HX(HSYHH/CHHHfD#Hh(HUYHHEH09xHH@H@P-@H@ HHh(HE@HM1ɺ@HnH9HHCHT$H\$HHHHCH|$Ht-}Hu"H}PtH<$HtHH}PEHHH<$Hu{H8hwH|$HtHpHhH薞HHPMH7H?HHH|$HtHHHNHH@8hvfffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWfffff.HQvWx3vfSgNH HdH%(HD$1虂H行0{H诋HgHD$dH3%(uH [,yHHAH蹂SHHHHLJ0YdH%(HD$1QHHxH7uUHHxH7uQHHxH7uMH{ H{HD$dH3%(u7H[DHt$~@Ht$n@Ht$^GxfDSH'H[~fffff.UHAWAVAUATASHIEMHHYHGdH%(HE1HGHGHHHH@轪 HHǃ7Hǃ7LqIEDDHIEHHt@H@H`N{sH@HpN[H?NUHYF|HIdI4$LHVTHH@NDHNHI DL{H賈LHHNLILh(豳HLAՉHHxH7ALHH|LILh_1HLAՈHHxH7 LHHpHILh!pH|LHHLHAHH}HHxH7HHxH7HHxH7LHH0HJXxILh(A@HLAHHyH7oHDH HHH(tBH@H@HDH8g HL H8AVH@HME1^XHHKZHHDžHCHCH0HDžHSH8H0Hx蔃HHx脃H@x I}oHCHHNLL }LNHILLqu,|HL跅HCHkHǀ@HCHSHǀ@~HCH;Hǀ@|HCH#LHHǀ@}H|LILh(UHLAHHyH7H{HQHCHH0RNL{H0?8OHILLAt,|HτH0胄HpǃHxH7H`HxH7HEdH3%(He[A\A]A^A_]H@H@H@HH@HH@HH@88tH@HfH`H@LH@4qIHvHHxH7t HpHHxH7t HpHHxH7t HpH@ H{L)zIIH`HxH7WH_mFIHHxH7u>HpHxH7tH_1IIHHxH7tH@IHHxH7tIHHxH7tHIԁnHIZIIHHxH77pIHHxH7t H@`HHxH7FH@<5H@I舖 I}~IL LIH0II념@ATUHSHHHdH%(H$1j H|$HAj Ht$H|$ Dr D$ H{ HkCHD$ HpE{Lc(HD$0I9txHs8L[4Ht$@HS0HC8HCPHS@HSHHtFLݼHC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@zD$hLchC`HD$pI9HsxL踹H$HSpHCxHǃHHHtPLHCxHDHHQHuHHHPHuHH$HH|$ 茔 HD$HxH7H|$ HH{HHt$ "KH|$ H H|$ _NuH|$ $8fHHHHk H|$ ~H$dH3%(u!Hİ[]A\ÐHt$ v[&WlH|$ Hj~HuHHD$HxH7t Ht$3HuH|$ H~ H|$ Ho f.f.@1f.SHƸHfH[f.S{HHHT$dH%(HD$1詁HL$dH3 %(u HH[kkf.HHtLPf.fATUHSHvHHLcHdH%(HD$1FG[eHSHC CHC8HS(HS0Hu HtGL藹HC H fDHHQHuHK( fDHHPHuHC0HE8HC8Hu@H{@dHSXEHHC`H{PCXHCxHShHSpHu`CHHtEHC`H HHQHuHKh fDHHPHuHCpHExHCxHD$dH3%(uH[]A\H,iHC@HxH7t Ht$Hs L/H{HH7t Ht$HCsHHffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWN{fffff.H[vWxefSgYH HdH%(HD$1qH{0{HzHzHD$dH3%(uH [|hHHzH rSHHHHLJ0PedH%(HD$1wHHxH7uUHHxH7uQHHxH7uMH{\ H{SwHD$dH3%(u7H[DHt$~@Ht$n@Ht$^gfDSH'H[nfffff.UHAWAVAUATASHIEMHHPeHGdH%(HE1HGHGHHHH@ HHǃ7Hǃ7L8aIEDDHIEHHt@H@H`N{|H@HpN|H?YoHyF|HIxI4$LHVxHXxH@YDKoHOyNHIZxDLkHxLHHNLILh(HLAՉHHxH71LHH|LILh询1HLAՈHHxH7LHHpHILhq_H|LMHHLHAHHmHHxH7HHxH7HHxH7LHH0HJXxILh(z@HLAHHyH7_HDH HHH(tBH@H@HDH8HL H8AVH@HME1{XHHKZHHDžHCHCH0HDžHSH8H0HxrHHxrH@Ȋ I}rHCHHYLLYlLavNHIluLLd,|HOuLuH{H[w]H{HD@v]LHH|LILh(ןHLAHHyH7H{H WHCHH0RYL_kH0cu?8OHIntLLc,|HINtF|LH@\H@D^u`IHoHHxH7t HpHHxH7t HpHHxH7t HpH@j H{aoLiIIH`HxH7WH_}FIHHxH7u>HpHxH7tH_AIIHHxH7tH@IHHxH7tIHHxH7tHI4qnHI qZIIHHxH77pIHHxH7t H@pHHxH7FH@L5H@I I}mIL LIspH0I_pI념@ATUHSHHHdH%(H$1tY H|$HAtY Ht$H|$ Dґ D$ H{ HkCHD$ HpjLc(HD$0I9txHs8L#Ht$@HS0HC8HCPHS@HSHHtFL=HC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@ jD$hLchC`HD$pI9HsxLH$HSpHCxHǃHHHtPL~HCxHDHHQHuHHHPHuHH$HH|$ HD$HxH7H|$ HH{HHt$ rxH|$ 訃 H|$ _YTeH|$ Zo$8fHHenHH[ H|$ nH$dH3%(u!Hİ[]A\ÐHt$ [蠂[H|$ HmHBeHHD$HxH7t Ht$CHeH|$ Hނ H|$ Hς f.f.@1f.SHƸHpUH[f.SYHHHT$dH%(HD$1 qHL$dH3 %(u HH[Zf.HHtrOP萁f.ffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPW^lfffff.SHLHdH%(HD$1@HHJt+HHxH7tHt$HuHJu@HD$dH3%(uH[Yffff.SNHdH%(HD$1@HHxLt+HHxH7tHt$HHxLu@HD$dH3%(uH[Yfff.HhvWxUfSheH HdH%(HD$1aHl0{HkHjHD$dH3%(uH [XHHjHbSHHHHLJ0pdH%(HD$1gHHxH7uUHHxH7uQHHxH7uMH{l H{cgHD$dH3%(u7H[DHt$~@Ht$n@Ht$^WfDSH'H[^fffff.UHAWAVAULoATSHIEMHHpHGHGLHXPdH%(HU1! HHǃ7Hǃ7LLQPDIHIFHHt@H@HpN{lH@HNlH@e_HiF|HIhI4$LHVhHhhH AeD[_H _iNHIjhDL[H hLXHNLILp(HLA։HHxH7LXH|LILp迒1HLAֈHHxH7LXHHILpOH|L]HHLHAHH]HHxH77HHxH77HHxH77LXH0HJXxILp(j@HLAHHyH7HDH HHH(tBH@HLDHPHHPL AVH@HE1XHHKZHHDžHCHCH0HDžHSH8H0HxbHHxbH@z H HxbHCHcH0IeLe\H0ifNHIteLLT,|HWeH0 eH{HtH{HsH{HqH{HrLXH|LILp(譏HLAHHyH7#H{HGOHǃHxH7 HpHxH7HEdH3%(He[A\A]A^A_]H@tH@\UH@DH@,H@H@PPH@2H@XXH@wPIH HxB`HHxH7t HobHpHxH7t HoBH_HHxH7t HHHxH7t HHHxH7t HLw H{_LYISIkIHHxH7H@H@I2w HIaII{IHHxH7IIHHxH7t H@HHxH7t H@HHxH7G2IHHxH7'IIIHHxH7H0I`H I`fATUHSHHHdH%(H$1I H|$HAI Ht$H|$ DB D$ H{ HkCHD$ Hp[Lc(HD$0I9txHs8L+Ht$@HS0HC8HCPHS@HSHHtFL譜HC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@}ZD$hLchC`HD$pI9HsxL舙H$HSpHCxHǃHHHtPLHCxHDHHQHuHHHPHuHH$HH|$ \t HD$HxH7H|$ HH{HHt$ ҝH|$ t H|$ `eUH|$ _,0fHH^HHK H|$ ^H$dH3%(u!Hİ[]A\ÐHt$ [*s'LH|$ H:^HUHHD$HxH7t Ht$HUH|$ HNs H|$ H?s f.f.@1f.SHƸHEH[f.S{HHHT$dH%(HD$1yaHL$dH3 %(u HH[;Kf.HHtbPrf.ffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPW\fffff.H?*t2XHf.H9>*ufHrvWxFfSbpH HdH%(HD$19SHA]0{HO\H\HD$dH3%(uH [IHH[HYSSHHHHLJ0wdH%(HD$1XHHxH7uUHHxH7uQHHxH7uMH{p H{XHD$dH3%(u7H[DHt$N@Ht$>@Ht$.HfDSH'H[^Offfff.UHAWAVAULoATSHIEMHxHwHGHGLHhddH%(HU1a{ HHǃ7Hǃ7LBdDIHIFHHt@H@HN{^H@HN]H?pPHZF|HIZI4$LHVYHYH @pDPH ZNHIYDL_LH SYLhHNLILp(QHLA։HHxH7iLhH|LILp1HLAֈHHxH72LhHHILp@H|L蝃HHLHAHH_NHHxH7HHxH7HHxH7LhH0HJXxIL`([@HLAHHyH7HDH HHH(tBH@HLDIHL H@ATHEL1XHHKZHHDžHCHCH0HDžHSH8H0HxCTHHx3TH@'l H HxTHCǃHH0IpLMH0WNHIVLLF,|HVH0IVH{HenH{HNmH{H7lH{H kHHxH7HHxH7HEdH3%(He[A\A]A^A_]H@H@H@| H@d H@L H@h.hLH@2H@iBIHHxH7t HHQHHxH7t HHHxH7t H~HHxH7t H^Li H{}QLKIH HxbQHHxH70HI7H0ISH ISHISIIkIHHxH7t H@HHxH7t H@~HHxH74H@Z#IHHxH7IIIHHxH7IHHxH7H@Ih I:ATUHSHHHdH%(H$1; H|$HA; Ht$H|$ D2t D$ H{ HkCHD$ HpMLc(HD$0I9txHs8LHt$@HS0HC8HCPHS@HSHHtFL蝎HC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@mLD$hLchC`HD$pI9HsxLxH$HSpHCxHǃHHHtPLދHCxHDHHQHuHHHPHuHH$HH|$ Lf HD$HxH7H|$ HyH{HHt$ RH|$ f H|$ ZpGH|$ Q)pHHPHHz= H|$ pPH$dH3%(u!Hİ[]A\ÐHt$ f[4e>H|$ H*PHGHHD$HxH7t Ht$#H{GH|$ H>e H|$ H/e f.f.@1f.SHƸH7H[f.S{HHHT$dH%(HD$1iSHL$dH3 %(u HH[+=f.HHt2P$df.ffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWNfffff.S]HdH%(HD$1@HH[t+HHxH7tHt$HuH[u@HD$dH3%(uH[;ffff.SH_HdH%(HD$1@HH]t+HHxH7tHt$HH]u@HD$dH3%(uH[};ffff.SHnHdH%(HD$1@HHlt+HHxH7tHt$HuHlu@HD$dH3%(uH[:ffff.SpHdH%(HD$1@HHxnt+HHxH7tHt$HHxnu@HD$dH3%(uH[}:ffff.SqHdH%(HD$1@HH8pt+HHxH7tHt$HuH8pu@HD$dH3%(uH[9fff.H@zvWxs6fSi xH HdH%(HD$1BHL0{HKHKHD$dH3%(uH [l9HHKHBSHHHHLJ0PdH%(HD$1HHHxH7uUHHxH7uQHHxH7uMH{L` H{CHHD$dH3%(u7H[DHt$@Ht$@Ht$8fDSH'H[>fffff.UHAWAVAULoATSHIEMHHPHGHGLHXTdH%(HU1k HHǃ7Hǃ7L,2TDIHIFHHt@H@HpN{MH@HNMHD x@HJF|HIII4$LHVIHHIHE xD;@H?JNHIJIDL;HHLXHLILp(1HN>HLA։HHxH7LXHLILp0H|>1HLAֈHHxH7LXHHILp?0HL00H|=HHLHAHH=HHxH7DHHxH7DHHxH7DLXH0HJXxIL`(NK@HLAHHyH7 HDH HHH(tBH@LDLc~H HH@AVHEIL1HXIXHHKZHHDžHCHCH0HDžHSH8H0HxCHHxCH@[ I~CHCHTLXM xLL=LGNHI&FLL{5,|H FLEH{HtH{HsH{HqH{HrHCHH0T xLKHR6HHD$HxH7t Ht$H+6H|$ HS H|$ HS f.f.@1f.SHƸH&H[f.SxHHHT$dH%(HD$1BHL$dH3 %(u HH[+f.HHt2PRf.f H P PÐAHtG~fDGPW=fffff.HvWx'fATIUHSHHt#H{ H?:uHEH9C vH[HuL[]A\IH[ǐfD%‰%1Љ1Љ1Љ1Љ1Љ?01Љ 1ʉ111Ѓ?9Ð@AWAVAUATUSHHM8H)dH%(H$1H(LP L(D EL]AA1HIH41IS0fD HH°H9tff.v+ HH°H9uƃU1)~88RH@P4ƇUfD8HL]EA@PD =H HHHfAXD0fH@RHL$3DUHEHl$PL$HEHHYf.Q&CX Q& f(D$  @`\$f(Yd$  E1<tTtD Y D$\P1;`\uuI|$l$ǃ\t$ D$\$H$D$$H$$$HH$dH34%(HH[]A\A]A^A_DȦ$ X  l$t$ D$ @`@H Ll$@l$LHHD$(l$@c+H|$(Lt$t$@E+H|$(L D$@%+f.O&LpLJ1Hǃ@fHffJ) :LMƃ @HLl$@L 0H(LH0 /L(9ˆHI38LL$ L7 fǃ8fJ 9HHPHHEX@0fH@qED+0AqLl$@L L[.Lc8HV,LH+$ )H>,DHs%L 7ǃ8ƃ<ƃ H @L]DWD+0Ap%HL]<H(ƃUAk`H0l$ H @WD1fJPt @Lt L@t ?LHuAH 08ƃTLǃLPL 7LHf(L$ Y  aƃTL$Ll$@ƃ<L L],Le6熀HX*LH-" H@*D$H/|H%*L4HL4He,HHD$(H|$( 4H|$8HpHD$0;H|$(H|$06`LHD$(!L58H)Ht$(H)L[4H|$0q/.""LH74H|$0M/h.H+HH|$0!<7H|$(+`ÐATUHSHHHdH%(H$1 H|$HA Ht$H|$ DbU D$ H H  HD$ Hp,.L HD$0I9H0 L8Ht$@H( Hǃ0 HǃH H8 H@ HtRLoH0 H HHQHuH8 HHPHuH@ HD$XHH HD$ HP Hp@l-D$hL` X HD$pI9Hp LnlH$Hh Hǃp Hǃ Hx H HtPLlHp HfHHQHuHx HHPHuH H$H H|$ 0 tH8 1t%HD$XdH3%(Hh[]A\A]fDH rH*D H$7DD1)HD$@Hp 4E$H$LD$UH1HI)HRHH+H$HxH7~H%% H ǃ Y2H H H /HHH Hx12H|$L D %H|$0*HH /DH  [HH.LH#H|$.l@-HHxw 1`@Ht$04HHHtT%HH$IHxH7t Ht$0LH|$HI .H|$0H-Hv%/-HpHD$ HD$ ;HxHH|$ /H|$0Hŋ H|$0.#~H"H~H"HH"H|$0]-H|$ s('$H|$ Oj0H|$0H--H|$ C(^'H$HAWAVAUATIUSHEMHH|$`HL$D$0dH%(H$1JH|$@1HT$.H|$0|0HL$`HT$@Ht$0H6HD$0HxH7 H|$H)H|$h)HpH HHHD$H Hǃ Hǃ HL H Hǃ 7HHD$IEIUHHT$`HD$ht@HT$`HD$hH H H|$hH H HL$`HT$h(D L H|$@LA Ht$@H|$`D+M Ht$`HniH|$`@ HD$@HxH7HD$11E1ft$Rf|$TfL$PAHhfDD$VE1HD$PAfl$^fDL$XfDT$ZfD\$\HHHD$XD ǃ H(HPPHHHHBHH9tfuHH9uHPHH9u11Hǃ(fHǃ8H$dH3%(Hǃ0Hǃ@fJHǃ ƃ<ǃLǃPƃTHǃ Hǃ ƃ ǃ\ƃUǃXǃ`ǃ Hǃ H[]A\A]A^A_Ht$/Ht$` H|$`Iz> HD$@HxH7t Ht$0nH|$d#H HxH7t Ht$0FHL+> H &H|$ HH袩HHH#H HHD$0HxH7t Ht$/H|$H%H|$h%HHH%I9HZHhHII UHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@HxH@Hs DžXHDž`HDžxHPHHhHptNHxdH`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@>CHHs`EHEHEEH@HHPXHUHUtEHxP\aHEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@ HL EHATH@MELHH%XLHDž0ZIIFLIVH0@@ HPHXIFH0(#H{HtGuwHH0H@HH8L8H{@H0I9HHCt#MtAD$ HtG t`LcH0Hx"I"H@: H]dH3%(HHe[A\A]A^A_]HH[tE1HHPHkNuPH HHPIHL8I"H@: H+HL HHH!HHEHxH7t H0H@H`Hx>HHHxH7tH0vHHf.ATUSHH L HHHdH%(HD$1DHHKHHǃ BHǃ @BHǃ gH8 H Hǃ A#HVHVH H@H Hǃ DH HxH7H r8 H f H H HǃPHXHHգH(HH6HH裣HHHHD$dH3%(uGH[]A\H LHxw o%f.Ht$fff.SHH[f.@f.@1f.1f.Kf.HATIUSHt!HsLHkHHHu[]A\f.AVAUATUSHH0GYH@HtH{PCHRHHSPHs81P LcLkHk`LLwbLLcLcgbHspHLkLk bHChHLHCpHǃHCxHbH1LHǃHǃHHbHspHbHSPHtHBHHHHBH{(H(H9t<DHOH/HtHQHHHHQH9HuLia[L]A\A]A^YafHC8L@HC(I9LC8t @0Wx DSHH[f.@SHHHPHHhHXH8H(,H[cSHHHPHŸHhHX诟H8H(HH[ f.SH_Ht&HHH@H=_Zu_H[fD[fD[DH Hz1H)Htf.4H9wÐfAHtG~fDGPWfffff.HvWxCfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDÐUS$H(@HdH%(HD$1@HHHHSHi HHD$dH3%(uH([] HHHRfUSHHdH%(HD$1$yD$[HHHs`HkHHHP`HD$dH3%(HkHCuH[] HHHfUSHHH_HtH&[HnH]HtH [HH[]OH[]ÐSHHGH[aH{[QaAWAVAUATUSHHHGLg(LwL HD$HGHMl$HXL9vI}IL9wHD$Lu8L}@LeHHE0H[]A\A]A^A_f.fffff.AWAVAUATE1USHH.H;nLjLzs~HE1IHH9nv^HH]H)HHуD AuM9t[Mt A]LjLzIE1HLjH9nwM9MtEeLjILjH[]A\A]A^A_L+*IyMAt O|-M9MGLHT$H4$^HT$IH4$MMl$LRHLH)LLRH:I9t*HMMD tEHIL9uH)H:Ml HtHT$H4$HT$H4$L"LjE1LzL+*IMtKD-HI9HFHH$H$HHLhLJH LH)HteD LJH:I9t,HHfHDtDHHL9uH)H:Ll Ht H$^ H$H*LjHZxHH렿fAWAVAUATUSH(H.H~H9svEAHI DHAH9sK]DуD ÃuHJH;Jt3HtHJH1HJH~fH([]A\A]A^A_H+ HHAt L, L9MGLHT$Ht$,HT$IJ(Ht$MoHD$HJLHL)LtxHzLI9t1LM@MD tEHIH9uHH:L)MlHtHT$Ht$ HT$Ht$HD$L:LjHB1H~H댿 HHATUHSLHHHСHdH%(HD$1HHxHh謗Hp2HHHt HHǃBHǃ@BHǃgH( HHǃAHxVHyVHH@HHǃDHHxH7uRH(F+ H.HD$dH3%(u:H[]A\DHLHxw fHt$fffff.SHwH[ fffff.AWAVIAUATIUSHHXHNdH%(HD$H1HD$HD,HH)HHHHH7H9HT$tDHtHHH9uIwH|$0HD$0HD$8HD$@IVM&HBI9u*SHA$tHIHD$8HBI9t+HD$8H;D$@uH|$0LrIVIHBI9u֐LcHI9ILLHD$IHL$LL$,Ht$ADIHD$kjIHt$0LL$,ALD$JjD$,1D$Ll$~GD $HE.L$H;EHAUtHHEII9\$,IFH|$@AGH|$$H|$0.\$HtHD$HtHHt$HdH34%(uuHX[]A\A]A^A_@H;Et"HA$\YLHu#QLHe#AHH9w INHD$I H|$0HHt HD$HtHH AWAVAUATIUSHH|$ HT$0dH%(H$1HD$h|HX IHD$`H¸H\$pHҋt HHH= uH\$hHD$@HD$HHD$P LpHD$@ HLt$PHH@H@HP I9HEHEHUt3LHHɋ2t1HHH9uIT$H)HHHDHELLt$HI]I;]HD$H@0r"UHtH|$HHHG0I9]v5H|$H@HWH|$H9uL|$HLيHI9]IG0wH\$D$,E1H{ Lk(H[H|$H$H|$8H|$HwHH+G8HHt$L)HHHHHHT$H)HHH=+HD$@H9D$HHD$fHD$LLPHD$M9LxILʽM)ILD$ @;4 AEH;1ADHI9vtHы2L)HHLHvHHHIILIIM)B;4HAEHH}IILIL)H ;1ADHI9w@Lt$ ur@HT$HueHD$H|$H;|$HH\$HT$Lk(HHHHH_fDHHHHqI޽M)II,HDŽ$HDŽ$IHDŽ$HH€v0LHM\HHI)M|HH€KL)L|$HHMI)IIM~H11H$H$H9HtHHL9H$Iu@t/H$H$H9tD01҅HPH9uD$,H|$8H$$H|$0H$L!H$Ht:H$Ht(H|$HGHW *fDH$HHL9>I]IL'LHHHHT$HHJD$,H9t$HXHD$HT$Lh(HXHD$H@0cH\$H{HC(HLhLk(HXLH_H_L L|$HH|$@HPH|$@H$dH3%(uyH[]A\A]A^A_H$HHtH$HtH`[HH|$@HtLHHH@AWAVIAUATIUSHHXHnH+.H|$ @dH%(HD$H1H|$ H ɗHޗHHHH|$ ImI;mHD$ Lxf.LeHHH$HD$LHD$DH<$Ht$1H9HskH2Q3@H9uީt?HtH I9mwHD$HdH3%(HX[]A\A]A^A_@ELLD$ nHt$ L1H|$(Ht"@: HVH@L0;MA|$8t+At$C@:HH<$;f.LhI$ H@0H=@PtLH|$ H HHH<$HtsH{H|$(HHtTmfff.AWAVAUATLUSHHdH%(H$1HHHHD$IHHD$HH;HA0tHHH_HHHH)HH9HD$xhLLt6HHH9t#fHfW!@H9uHT$PLLHD$PHD$XHD$`+HT$pHt$PLHD$pHD$xHDŽ$HhH$Ht$pHDŽ$HDŽ$HDŽ$H$H+$HH:H$8Hl$xL|$pL9t%fIHt2I L9uHl$pHtHH|$PHtL$Ht$LHHt$Np^x1P1;uX@$P$Q$@ǃ$H$XH|$L$`$hHH$dH3 %(sH[]A\A]A^A_1H)fH*Y٭$HD$1 fYH`Xf(L$HƃHLHpHXx1H|$ @HDŽ$HDŽ$HDŽ$DH|$ HHHDHH|$ wH$H$H)HHH$A1L$LpH$)fH$H$DH)HH9AIH<$IJt2H4$LLLmH$Ht;H$H$ƃH)HH9B0LD$ <LL<'@:$@:ZH2HH|$0D$8HEPHD$0C8HM@HE0HH9Ht,HLHH`HE0H|$0T7LuxLHHL|$8t H|$0{6L;kLL<H( (@@:@:bH:HH|$@D$HHEPHD$@K7HM@HE0HQH9HtkH$HH$HPH$HPH$HPH$HP H$HP(H$HP0H$HP8H$HP@HHHE0H|$@6H}x|$H`H|$@V5QLHfsH$@HIH$ZLbHUHL1!D$ H$\H|$pRH|$PHtcHL$Ht$LHHHt$Np^xW@toHcD$ H YN`H)fH*Xf(Y$1ɾ\"&\Xf(HHcD$ pLHMH$HPHD$LHp0iHfHH H*XGHfHH H*XHH$HtH$H|$pH|$PHtHHHHH<$H&밀|$HHtH|$@2i~SxWxk|$8HWH|$02HH{1OH$HH%D$ 1H|$ HAWAVAUATIUSHIιHH|$@D$dH%(H$1H|$0HT$H|$ HL$@HT$0Ht$ HHD$ HxH7MH|$8L(H|$H HСL HHǃ7HH$@HHǃHǃHǃHHD$HǃHǃ(@Hǃ0Hǃ8Hǃ@HǃHHǃPHǃXHǃ`Hǃ #H HHHH,HEH@E1HUH`= [HH0H8HEH(ǃhHHPHHHXfHpC7D L H|$ L Ht$ H|$@ Ht$@L';H|$@M HD$ HxH7MH|$0K@H|$0*pHHLH H|$0H$dH3%(LHǃǃǃƃƃǃHǃHǃƃHǃHǃH[]A\A]A^A_DIcAA@tCDǹ15LtƁ@EƩu [KHt$@pHt$aHHHxH7t Ht$;L HHHHxHh|HH|$HHtvH<$]HHH|$@H, HD$ HxH7tHt$0{H|$0HiHHHHǃHǃ bHHH|$8H|$HHHH H"HHHD$ HxH7tHt$HCfffff.UHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@HxH@Hs DžXHDž`HDžxHPHHhHptNHx5H`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@CHHs`EHEHEEH@HHPXHUHUtEHxP<3HEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@HL EHATH@MELHHXLHDž0ZIIF,IVH0@@ HHXIFH0H{HtGuwHH0H@HH8L8H{@H0I9HHCt#MtAD$ HtG t`LcH0HxIxH@l H]dH3%(HHe[A\A]A^A_]HH[tE1HHPHkNuPHHHPIHLIH@ H HL HHHHHEHxH7t H0%H@H`HxHHHxH7tH0vHHf.ATUHSHHHdH%(H$1 H|$HA Ht$H|$ Dr D$ H0H((HD$ HpvHHf.ATUHSHHHdH%(H$1$ H|$HA$ Ht$H|$ D D$ HHHD$ HpLL HD$0I9H0LXtHt$@H(Hǃ0HǃHH8H@HtRLH0H HHQHuH8HHPHuH@HD$XHHHD$ HPHp@茺D$hL`XHD$pI9HpLH$HhHǃpHǃHxHHtPLHpHfHHQHuHxHHPHuHH$HH|$ \ HD$HxH7H|$ ȢH|$ 2hHHHH踫 H|$ 设H|$ Ȣ誵H|$ 谿:HH軾HHp H|$ fH$dH3%(u"Hİ[]A\Ht$ V; HHD$HxH7t Ht$-H腵H|$ HH|$ H9 @AUATUSHAHXȢH|$ dH%(HD$H1趴H|$ 輾WHHǽDHܫH|$ r tHHt)HD$HdH3%(HX[]A\A]f.H rHǷDH$7DD1)HD$0Hp=E$H$LD$EH1HI)HRףHH̸H$HxH7~HUHǃ艿HHH:HHHHx1LH|$#ȢLD*H|$0*HH;DHP [HHLHH|$ƻh@-HHxw 豾`@Ht$ dHHtWHH$IHxH7t Ht$ uHLH|$HI=H|$ H.H覲HHRH|$ 'ȢHŋdH|$ #~HH3~HHHۯH|$ 豺NHߴHH|$ H芺f.@1f.1f.黮f.SH_Ht&HHH@H=ZuH[醮fD[fD[DAWAVAUATIUSHHHoHHHWHH)HHH)Hv[@HEHC0Ht(HLHHCHHPHSHH@H@HC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9 H<_HIHs(L)HL4HCHHPH)HHHH;XL;HkILs(IKl.HkHHCH@HC HEHC8H@HC@L)HL4L9vAHUH)HHHtLIҢ듽:fDL踢cHUIH)HHHXLH)L臢E}f.AWAVAUATUSHHHLgHHHWLH)HHH)Hv{ID$HC0Ht/HUHHUHPHUHPHUHPHU HP HU(HP(HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fHw(LH)HLpLhK6H9HLdHI9J<OLIHs(L)HL4HCHHPH)HHHH;HL;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLIA1DL蠠[IT$IH)HHHOLH)Ln<4@AWAVAUATIUSHHHoHHHWHH)HHH)Hv[ѝHEHC0Ht3HLHHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9 H</HIHs(L)HL4HCHHPH)HHHH;(L;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLI袜듽:fDL舜cHUIH)HHHXLH)LWEMf.AHtG~fDGPWαfffff.HvWxfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUISH H HjdH%(HD$1H)HtH9wHR8~H= DH`ӧH۱ HIL԰L4HH走HHjHbHD$dH3%(u8H []A\ù5谜tIl$I+,$HEHH H肧fUSH(HdH%(HD$1HHHH H衯HD$dH3%(uH([]eHHzHff %G OG(GGÐ@fffff.fG G(GGUSHHdH%(HD$1$yD$[HHHHkHHHHD$dH3%(HkHCuH[]XHHݢHfUSHHH_HtHfH订H]HtHMHH[]鏢H[]ÐSHHGHH{[AWAVAUATUSHHHGLg(LwL HD$HGHMl$HXL9vI}IL9wHD$Lu8L}@LeHHE0H[]A\A]A^A_f.fffff.AWAVIAUATUSIHH|$pdH%(H$1藩HR8~XH= DH|$@ H|$@0HHt$HD$ H|$@ìI.E1I;nAAHI9nuDHD$pуHxD AӚDuIGI;GiHtIGHIGHR8H= DHD$pH|$ HpH|$PH|$PHt$ HHV)HIH0LHPIDHxIELLHPBൃB薞H|$P茫HD$ HxH78HT$PH|$0T~bHt$0HD$pHx`HV1$H$tHNHD$p1HxcHD$0HxH7 E1AHI9nbH9R8H= DH|$` СH|$`֫HɟHH0HHPHDHx赔HHAHHPBൃBcHH HHx|HH|$`HXc7H|$p=H$dH3%(H[]A\A]A^A_@Ht$`I+H'HAtHIH9LFLMGI?J(LhHT$LH)Ht MGI?I9t-HH@H2t@1HHL9uH)I?LlHt H$ǝH$IHD$MoIGHt$`T5薕5p 5JHHD$0HxH7u6H|$p褑H HH|$PHzHD$ HxH7tHt$`~H|$`HOH|$@H@HfHp锲@Hp锲@Hp锲@Hp锲@AWAVAUATIUSIHH|$`dH%(H$1'H(RD$8~Y1H= DH|$0蔞H|$0蚨XH荜Ht$HLj\$藧H|$0MI,$I9l$HfHI9l$I$HuH)HىуD$HD$`HxSuIEI;E|HT$tIEHIEH.R8H= D HD$`H|$Dt$Hp`H|$@茝H|$@蒧Ht$HHV衦HtHH0HHPHDHx`HHAHHPBൃBH|$@HD$HxH7@HT$@H|$ T~کHt$ HD$`Hx`HVs1$H$tHNHD$`1HxۜHD$ HxH7HI9l$D$PHt$L;HģR8H= DH|$Pl$>H|$PDH7HH0HHPHDHx#HH@HHPBൃBїHH HHxHH|$PHXc襤H|$`諍H$dH3%(H[]A\A]A^A_fHt$PI+EHHtHHH9HFHoIUMEIHLxL$HL)LI}MEI9t1LL@H2t@1HHH9uHI}L)M|Ht/MuM}I]Ht$P55 \$5赏H!HHD$HxH7u'H|$`HyHHD$ HxH7tHt$P賐H|$0H輢HH|$PH訢H|$@H藢ufATUHSLHHHHdH%(HD$1xHHp#HHHHt芖HHǃBHǃ@BHǃgHUHHǃANHYVHZVHH@HHǃD-HHxH7uYHͶ H赜HD$dH3%(uAH[]A\@HLHxw Of.Ht$Ffffff.SHwH[nfffff.UHAWAVAUATISIHHdH%(HE1HcHHH)HcRI8H= DIs(H}MouHE{H}股˯HuۯHhEH;ꯀHNLH+uHHH}IWMHL)HHE1D ~LCD-Lx)fC(HB9tt4HAB9uCC AT$f( *+!cY\ȄAY$AY\$YYKYXXf([\CfT W+!M +!LYf.ME}u f.C H%AXIFI;FU HtHIFH~R8H= D}C H}k}{pExAt$A|$A,$h`X_H}fHHHRHDIHXHHRHD ރHHH`HHRHDϗރH HՒHhHHRHD蕗S~H訒H蛒HpHHRHD [S~Hn!HaHxHHRHD !S~H42H'HEHHRHD S~H>HHuHHRHD$S~HǑIH躑HuHHRHDS~H葑UH脑HEHHRHD GS~HZH}1IWMAMIHL)HHH9BC C(H]dH3%(He[A\A]A^A_]DYf.MEHuL5^5WH}H]HՒ.fffff.AWAVIAUATIUSHHxH^H+dH%(HD$h1H|$0HD$Hk-IwH|$PHD$PHD$XHD$`~IVM.HBI9u'PHAEtHIHD$XHBI9t+HD$XH;D$`uH|$PL~IVIHBI9u֐LcHI9ILLHD$IHL$LL$,Ht$0ADIHD${IHt$PLL$,ALDD$LVD$,I1D$ Ll$~IfDL$HE.L$ H;EHAUtHHEII9\$,IFH|$@AGH|$\$H|$P.\$ HtōH|$0Ht趍HL$hdH3 %(u}Hx[]A\A]A^A_DH;Et*HA$]ZLHuJLHe:H|$PHHt>H|$0Ht/H7蒆fff.AWAVAUATUSHHH<$H$@H$HT$ dH%(H$1ƔHL$p@H,H}H$ +H}0H$+H$H$H,LeHII<$HtFI9uHrR8H= D H<$HkwH++HGHH+G(Lg0L+g8HHHIHLLg L+gH|$pIIpH|$pvmHiH\LH1HDHHH|$pH$@HxH+E1H9kL$P6Hut0uH<$HHG0LAHH9kvcH<$HG0H@HWH|$H9uH<$HcuLeHHII<$HtՊI9uHH$@^HƍHߔR8H= DQH$@H|$@HpH$ H$Ht$@HHVHDH'ǰHڊH$譕HD$@HxH7t H$H$D$,Hx L`(HXH$HD$0H$H|$HD$8H<$HGHHW0H+W8HD$L)HHHHHHT$H)HHH=RL$L;$/MM^H$M9Lx"ILҽM)E1ILt$LL$#f.;4 AEH;1ADHI9vnHы2L)HHLHvHHHII IIM)B;4HAEHH~zII IL)H ;1ADHI9w@Lt$uu@HT$HuhIL9$H<$HT$HLg(HHHHgfDHHHHtHؽL)HHD$HT$HDŽ$HHDŽ$HDŽ$IŀHHv/HHHH HH)M< HLiIL)L|$HLMI)IIM~G11H$H$H9HtHHL9H$Iu@t/H$H$H9tD01҅HPH9uD$,H|$0H$$H|$ HGH;GHH$tt$H@1H@H@H$HPH$HDŽ$HPH$HDŽ$HPHD$ HDŽ$H@Ht$ H HFHtCH$H|$PT~輕Ht$PH|$8HVY1$H$tHNH$@1Hx辈HD$PHxH7@e[HDLH+$HΰHHH$@HxDHH蹀HH.ذH!H$H;$H$Ps3H6HH9$wHYR8~zH= DZH$@H|$`HpjH$蓇H$薑Ht$`HHV襐H$XHD$`HxH7H$Ht蠄IL9$H<$HGHW HJD$,H9HXH$HT$HXL`(fDH$HPHL9I\$ILHHHHCH$H|$ H$H$H${5{H$H{蓃HC(HL`Lc(HXLH_H_L L|$HH$HtNH$qHT$HH$袞H$@wH$dH3%(ujH[]A\A]A^A_HHD$PHxH7wH$zeH$HEHD$`HxH7?5|HH$HHD$@HxH7H$ HH5@z%й5z|H|$pH~H$HHuЁkf.AWAVIAUATUSH8H$Ht$dH%(H$(1HT$}HR8~lH= DHD$H|$PH(HXH|$PɗHށޗHсHHH)HH|$P蕌HD$HH9HH $<H$HD$fH$H|$pHD$PHD$XHD$`HpHT$PHt$pLAH|$pHt蒀HT$PHL$X1AH9s4f.H2BA3@H9Au܁HWR8H= DHD$H|$0H(讂H|$0贌H觀H4$HH)H{H臀HHHHJQⵃQG~HH HHx`uHEH|$0Hhe"H$H|$Ht$P$HL$HAH;AlHH$tt$H@1H@H@H$HPH$HDŽ$HPH$HDŽ$HPHD$HDŽ$H@HL$H HAHt~H$HxUH$&H$HxTH$Hxax JH/H\$PH;\$XL$rBfDAƄ$0LHP@LBൃB|HH9\$XH$+MHPHDŽL`A$uM$MA~8tAƄ$vfDLX{IH@0H=@PH$HR8H= D9H$H|$ Hp|H|$@H|$@Ht$ HHVHH HHxrHHHHHajH|$@耈HD$ HxH7H|$PHt|HL$H$ H$H9AH$FqH$(dH3%((H8[]A\A]A^A_D LfH$5Hx|H$Y5*t35t]H|$H$u!H$uHH|$PHt{H$DpH~HHD$ HxH7tH$(H|$@HtH$HHtM{당5Bs HlH|$PH蠆ZH|$0H莆9H|$pHHu'fDAWAVAUATMUSHHHdH%(H$1HRt$$8H= DI MuH$hM<$A$HEHD$HEHD$IEMl$HD$|H$THzHzt$$HteHzLHL)Hx~HzHt$HL)HhxH{zHt$H+t$HHExHXz4$HsH$ HET$$HHHD$0I$Y`HH\$HD$8RHi0HLH HJHLfH9HEtHHHŰL9uH+HH;LT$0LL$81D\$$E1DAI<I4HHAƄHE9D|$$HD2|H$dH3%(DIH[]A\A]A^A_fDHLgH?HH+LHH;rH$LHD$`HD$hHD$pHHT$`H$|H$D$HtwHt$`H$HDŽ$HDŽ$HDŽ$HH$H$H$D$Ht^wH$H$HDŽ$HDŽ$HDŽ$UH$HH$HHD$HH$HtvL$H$E1HDŽ$HDŽ$HDŽ$HDŽ$ MHDŽ$(HDŽ$0I)LHHLML9L$ L$0L$(Mt*MtEHuI|$A$nH I I9uH$HhH$ L$(HHD$@EH$ ؏H$H9$HDŽ$@HDŽ$HHDŽ$P|$D$L$EAAA)H$@HD$(HtNH$H(LHGH$HGH$HGH$HG$GH$HH@H$HH$HtuH H9$DefH>RG,8A*^XD$$H= DuH|$PIwH|$POHBu$HzұH(uD$HyⱀH ut$HPpHtt$H6pHtDHn"HtDHm,|HtH|$PHuH$`>Hh $H$`LDŽ$HDŽ$$DŽ$$H$`HtysH$HH;$PH|$(H$+@5?k8DeafDH$@H9$HrL$LpfDAuCLrHpHEHu(LH$HEH$HEH$HEH$E $H$LH$HtkrH@H9$HHE(:@:Dm D`A~D@:l MHI}DLk WHI}I$H@MMA}8LvoIE H@0H=@PLH$@HD$(HH|$(HH|$@.H|$HDH$HtRqH|$`HtCqD$$QHH9LfIL$H$5hNIjHH|$(H|$@}H|$H蓊H$HtpH|$`HtpHsHH$HD$@cdHH|$PH{H$ H/H$HHh4p^iHmH$HHWpMH$H{YHccM9tI~HtoI M9uBvHH$HD$HHuuH$ H oH$HHqoH$`HHfAWAVAUATIUSHIιHH|$@D$dH%(H$1"kH|$0 kHT$H|$ ae~HL$@HT$0Ht$ HgHD$ HxH7=H|$8LwwH|$HmwHL HHǃ7HH$e8%HHǃHǃHǃǃHǃHǃHHǃƃHD$iHǃHǃ(@Hǃ0Hǃ8Hǃ@HǃHHǃPHǃXHǃ`Hǃ AcH HHHH,cHEH@E1HUH`=ZHH0H8HEH(ǃhHHPHHHXHpHDLa H|$ LAa Ht$ H|$@D Ht$@L@H|$@f HD$ HxH7H|$0KnH|$0yHlLHd H|$0wLHǃxǃH'qH$dH3%(H[]A\A]A^A_fDIcAA@t;Dǹ15LtljƁ@EƩuZHt$@ Ht$HHHxH7t Ht$L HqH3nIHL腥HYH|$/HHtjH<$pHHV^QqH|$@I褋 HD$ HxH7tHt$0XH|$0I)vtH\pH^HxjHǃHǃ pIHH|$8+sH|$H!sHImHH#H%HHHD$ HxH7tHt$fcHofUHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@HxB]H@Hs DžXHDž`HDžxHPHHhHptNHxgH`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@\CHHs`EHEHEEH@HHPXHUHUtEHxP輮HEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@^HL EHATH@MELHHXLHDž0ZIIF]IVH0@@ HPHXIFH0pH{HtGuwHH0H@HH8L8H{@H0I9HHCt#MtAD$ HtG t`LcH0HxpIoH@ H]dH3%(HHe[A\A]A^A_]HH[tE1HHPHkNuPH4ZHHP&mIHLfIooH@c HiHL H7lHH7oHHEHxH7t H0H@H`Hx%HHHxH7tH0访vHHZ_f.ATUHSHHHdH%(H$1Z H|$HAZ Ht$H|$ D D$ H HHD$ HpkL(HD$0I9H8L$Ht$@H0Hǃ8HǃPH@HHHtRL;H8H HHQHuH@HHPHuHHHD$XHPHD$ HXHp@jD$hLh`HD$pI9HxLH$HpHǃxHǃHHHtPL^HxHfHHQHuHHHPHuHH$HH|$ ̄ HD$HxH7H|$ D[fH|$ ap"HHloDH]-HHLoHH\ H|$ nH$dH3%(u#Hİ[]A\Ht$ [\H|$ H HD$HxH7t Ht$購H fHH|$ Hynf.@1f.1f.bf.US1HHHnH+.HHGHGHuRHHHCHkLFH>I9t&HHfH2t@1HHL9uH)HHCH[]HHt$WHt$f.fATUISHnHH+.HHGHGHHHudHHHCHkMD$I4$I9t:HHf.HtHHI9uHI)IIDHC[]A\DHH9w H!W:Uf.ATUISHoHH9t DH{HtaH H9uI,$Ht[H]A\`@[]A\ATUISHoHH9t DH{(Ht`H@H9uI,$Ht[H]A\`@[]A\AUL,ATUS1LHIHHJ.HHHGHGu_II9HELmt7LHfHDtDHHH9uIL)HHDHEH[]A\A]fH?H9w LUSHH}Ht_HbfAWAVHAUATIUSHRIHHHHHGHGHL,HD$HHHD$HM9II_HI?DHt}Il$I+,$HHCHCHHHuwHHHCHkI|$M$L9t1LHDHɋ2t1HHH9uIL)HHDHCIHM9mI_H[]A\A]A^A_fL9HOTsH H9wuH3THD$H\$HdI?Ht9^HAaHQH;\$t"HD$H8Ht^HD$HD$H9u{dQQHf.fHGH;GtHtHGHHGAUATUSHHHH+HHAtHIH9LFLFSLCH;IULH)Lt LCH;I9tYHLfH2t@1HHL9uH)H;IlHHt]ML+HkLcH[]A\A]LԿ^SH_Ht&HHH@H= ZuH[\fD[fD[DAWAVAUATUSHHLuH?LH)HHHH H9HIHt$RLuH}IHt$LH)Lt9HHx(H(HHVHPHVHPHVHPVP ^LuH}I9HLHtlHHHAHBHAHBHAHBA HB0HB8HB(B HA(HB(HA(Hq0HB0Hr0HA0Hq8HB8Hr8HA8H@H@I9uH@H]I)IO5LuI9tfH{(Ht2[H@I9uLuMtL[ILmL}MLmH[]A\A]A^A_fDHIH@M}@IL9vHcHuE1E1qHNMt LZ aHEH+EHx(HtuZH;`Hs]AWAVAUATUSHHLuH?LH)IIMrK$I9pILHt$OLuH}IHt$M} LH)LtTH@H@H@HVHPHFHNHPHHHVHNHPHHHVLuH}L9HLHtLHBHBHBHAHBHAHqHBHrHAHqHBHrHAH H L9uH H]I)IO|5@LuI9t DH{HtXH I9uLuMtLXMLmL}LeH[]A\A]A^A_fA HH9}IHwA E1HfDAHtG~fDGPWcfffff.HvWx#NfATIUHSHHt#H{ H`uHEH9C vH[HuL[]A\IH[SȸHdH%(HD$1@HH8tCHHxH7t㺠AHtIPЅHt$H cH8ufHD$dH3%(uH[f.PJHPfffff.SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H[bHufHD$dH3%(uH[f.PJHOfffff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$HaHxufHD$dH3%(uH[f.PJH.Offfff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H`HxufHD$dH3%(uH[f.PJH~Nfffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HK`HufHD$dH3%(uH[f.PJHMfffff.ATUHPSLHHHHǀHdH%(HD$1JHHHǃHBHǃ@@BHǃPgJHRHHǃPA_HVHVH@H@HHHǃ@DWH@HxH7unHRt HF\HPHxH7uRHZHD$dH3%(uFH[]A\ÐHHLHxw afHt$@Ht$_Lfffff.SHH[Rfffff.AWAV@AUATIUSH8HT$Z@HD$Z@HD$Z@H$ZLT$LL$IL$1DAy1f1uDڍ4 [1f1كuAA EHH@u1f1Ƀ@yAAD1كuɻ[1fAAD1ڃuAAD$HC|H>LI7HHul1HHRFLHD$(6LJ8H>Ht$(H|>LTICCHL?IH@LH,IgCH@HfDAWAVAUATIUSHMH$ H|$PHL$DD$D$dH%(H$1E9H|$@,9HT$.H|$0LHL$PHT$@Ht$0H15HD$0HxH7H|$HEH|$XEHxHǀ蔻HHǃxHǃHh L@HHHǃ@7LIHD$6HHVƃ LHǃ@DHǃ1ƃ!Hǃ(HxHHHUHǃ0Hǃ8Hǃ@H6LPHǃHBHǃ@@BLCLL6IFIHHT$PHD$Xt@HT$PHD$XHxHxH|$XHHHL$PHT$XHI:HH|$H @H|$X@H*:ILHǃ@DM!;`HIHD$0HxH78Ht$@d)HHD$0HxH7tHt$/@uH|$@I.BH|$PIlW /HQILr@LH 0UIHQH *UHH6HUHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@Hx)H@Hs DžXHDž`HDžxHPHHhHptNHx}H`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@(CHHs`EHEHEEH@HHPXHUHUtEHxP{HEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@Hh*HL EHATH@MELHHXLHDž0ZIIF *IVH0@@ HȀHXIFH0E4H$LD$EH1HI)HR HH5H$HxH7?~H%/`H@ǃ\YH.D$(D$ HPHHCD$0CD$8CD$@C D$HC(D$PC0D$XC8D$`C@D$hCHD$pCPD$xCX$C`$Ch$Cp$Cx$$$$$$$$$$$$$$$$$$$ $$!$($"$0$8$@ $H($P0$X8$`HǃXH`HhH$x@ǃPHǃpHtSHHXH@HHQHuH`HHPHuHhH$HpH]0HxH]0H|$_H}x9|$t H|$+_H$xH$h6H|$ Lo HH|$D$HCPHD$$`HK@HC0HQH9jHtGHT$ HHT$(HPHT$0HPHT$8HPHT$@HP HT$HHP(HT$PHP0HT$XHP8H@HC0H|$_H{x8|$ H|$S^fDHt$ fH|$ L#n HH|$D$HEPHD$D_HM@HE0HQH9HtPHT$ HHT$(HPHT$0HPHT$8HPHT$@HP HT$HHP(HT$PHP0HT$XHP8HT$`HP@HHHE0H|$^H}x7|$*H|$j]Ht$ H'Ht$ H)Ht$ HD%=H|$ H? HD$HxH7t Ht$H!HHH$xH$hـ|$HtH|$\À|$HtH|$\뭀|$HtH|$\fDATUIS0HH dH%(HD$1MHH@H@ ҵ@H@ H@(HкHT$L`(HID$@HHH@HD$DH|$Ht}HtsH}PEHHH<$HtHCH~|HHHCtHD$dH3%(uZH []A\f1ɺppH|(H9u@HHPH}PtH<$Hu뙹oa8\?>?H|$HHt H,HUSHHHHHG@GHdH%(HD$81HGHGPGYGhHGpHGHGHGHLJLJHGHG HG(HLJHLJHG(HG0HG8HGhHLJHPHGxHHHHHH Hp H8 HH9 Hx8 H HǃǃHǃHHǃHǃHǃHǃHǃH\$ HD$(D$0HT$(HD$ HH$D$HHHǃHD$HHHT$H$HH+ HD$8dH3%(uHH[]/HHHH!HhHXH8H(;HsH{H|$ H~HHHf.f.@f.@f.@1f.f.@f.@f.@1f.1f.1f.1f.1f.1f.1f.1f.1f.1f.1f.f. f.f.f.f.f.HG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DSHH[f.@SHHPpH[SHHPPH[HG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHHmHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HоHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DSHHH[HG(HPHt0t2HpHPHHH9t!SHH-HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DSHHнH['HG(HHt0t2HpHPHHH9t!SHHMHC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DSHHH[GHG(HлHt0t2HpHPHHH9t!SHHmHC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DUSHHHHt1ɺ`HH9u8 HS@HHPHEPHH[]}7fUSHHHHt1ɺ H;H9u8HS@HйHPHEPHH[]'7fUSHHHHt1ɺ0HH9u8<HS@HPHPHEPHH[]6fHG(HHt0t2HpHPHHH9t!SHH]HC(H@@[fDH@@f.DHG(HлHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HоHt0t2HpHPHHH9t!SHH=HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH}HC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHH] HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HоHt0t2HpHPHHH9t!SHH= HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH} HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH] HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHH HC(H@@[fDH@@f.DHG(HPHt0t2HpHPHHH9t!SHH= HC(H@@[fDH@@f.DHG(HлHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHH}HC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DHG(HHt0t2HpHPHHH9t!SHHHC(H@@[fDH@@f.DSHG(HHPHt(tHpHPHxH9t `HC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[f.SHG(HHлHt(tHpHPHxH9t HC(H@@H[Kf.SHG(HHHt(tHpHPHxH9t pHC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[f.SHG(HHоHt(tHpHPHxH9t HC(H@@H[[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[ f.SHG(HHHt(tHpHPHxH9t 0HC(H@@H[f.SHG(HHPHt(tHpHPHxH9t HC(H@@H[kf.SHG(HHPHt(tHpHPHxH9t HC(H@@H[f.SHG(HHHt(tHpHPHxH9t @HC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[{f.SHG(HHHt(tHpHPHxH9t HC(H@@H[+f.SHG(HHPHt(tHpHPHxH9t PHC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[f.SHG(HHлHt(tHpHPHxH9t HC(H@@H[;f.SHG(HHHt(tHpHPHxH9t `HC(H@@H[f.SHG(HHPHt(tHpHPHxH9t HC(H@@H[f.SHG(HHоHt(tHpHPHxH9t HC(H@@H[Kf.SHG(HHPHt(tHpHPHxH9t pHC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[[f.SHG(HHлHt(tHpHPHxH9t HC(H@@H[ f.SHG(HHHt(tHpHPHxH9t 0HC(H@@H[f.SHG(HHPHt(tHpHPHxH9t HC(H@@H[kf.SHG(HHHt(tHpHPHxH9t HC(H@@H[f.SHG(HHHt(tHpHPHxH9t @HC(H@@H[f.SHG(HHHt(tHpHPHxH9t HC(H@@H[{f.SHG(HHHt(tHpHPHxH9t HC(H@@H[+f.SHG(HHPHt(tHpHPHxH9t PHC(H@@H[f.USHHHvHHHG=oHEHUHu H{ HyxHCHSKH}0H{xHC(0zxHH{0tHH@H=lNu0G@HE8HC8HE@HC@EHH~xHC(8~xCHH[]H HH'HHzxHHHHHfDHHPIGHtnHHWPH@ H=YHG8HpHw8IB LNL@LHLFHpHHF HG8HxHpHHH@(HHG8HHHG(H9HO8t[LO(L9t|E1HII9uIt`IHw8L@ HHWPHG8LHAHw8HLHpH@HtLHWPHM@(HAR@`>f.USHHHw@GYHtHkHDJHkHkHkH0JHspH{`HkHk JHChHHHCpHǃHCxHJHHǃHǃHHH[]@ATUHStHEHUH[]A\HHs@CYHt 1HLcLbILcLcLcLNIHspH{`LcLc IHChHHHCpHǃHCxHIHHǃHǃHH1@HSHt1ɺ@6H9uH[ù/aAUATIUSHH8dH%(HD$(1HPHH|$D$ IHD$LfH_(I;]8tRH{Ht]HLHPHtD$ H|$D$ ZHL$(dH3 %(D$ uTH8[]A\A]LD$  뼹΀0Wx΀i`=HH|$HAVAULoATUISHGLwL9u_CIl$HH}HtsbH[HLt[HSbID$L9HXHuI\$HOH{Ht!bH Ѐ0WxHH@HXSLHnf[]A\A]A^HHaH@AWAVAUATUSHHHLgHHHWLH)HHH)HID$HC0HtGHUHHUHPHUHPHUHPHU HP HU(HP(HU0HP0HU8HP8HU@HP@HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fDHw(LH)HLpLhK6H9HLdHI9J<?LIHs(L)HL4HCHHPH)HHHH;8L;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLIA1DL[IT$IH)HHHOLH)L^D4@AWAVAUATIUSHHH_HHHWHH)HHH)HGxHCI\$0HEEHPHHCECECE C E(C(E0C0E8C8E@C@EHCHEPCPEXCXE`C`EhChEpCpExCx  ((0088@HǃXH`HhHX@ǃPHǃpHtTFHXH f.HHQHuH`HHPHuHhHpHpID$HHPIT$HH@HxID$8ID$0IT$@H[]A\A]A^A_It$(HH)HLpLhK6H9HH\HH9H<>HIIt$(L)HL4ID$HHPH)HHHI<$4M<$I\$IMt$(IK\.I\$HID$HxID$ HID$8HxID$@DL)HL4L9v@HSH)HHHtLI+L\HSIH)HHHWLH)L`DVHID$HHxPHHKf.SHGHH~6HHHGt[@1ɺppOH9uHH[H@@HSHt1ɺppH9uH[HSHt1ɺppH9uH[HSHt1ɺppH9uH[HSHt1ɺppH9uH[HSHt1ɺppVH9uH[HSHt1ɺpp&H9uH[HSHt1ɺppH9uH[yHSHt1ɺppH9uH[cHSHt1ɺppH9uH[MSHGHH~6HHHGt[@1ɺppOH9uHH[H@@USHHH(dH%(HD$1Hto1ɺppH91H@ҵppHH9}HPҵt}HL$dH3 %(H([]fH@ҵuHk(HmUYHHDEHHHfDSH9t%fHt1ɺppH'H9uHk(HUYHH0EHxHH@H@pѵ@H@ HHh(HHE@HiH{(HKHHCHT$HHH\$HHCH|$HtcT}Hu"H}PtH<$HtHTHH}PEHHK[H<$Hu;HH|$HtTHzHH08hHHPHmHuDSHGHH~6HHHGt[@1ɺppH9uHH[H@p USHHH(dH%(HD$1Hto1ɺpp.H9H@ҵt\1ɺppHH9u}HPҵtuHL$dH3 %(QH([]f.H@ҵuHHX(H SYHHlCHHH w HHHh(HUYHH,0EHHH@H@ѵ@H@ HHh(HHE@HHHH\$HCHT$HHC2H|$HtQ}Hu"H}PtH<$HtQHH}PEHHXH<$Hu$H(8h(H|$HtYQHH fSHGHH~6HHHGt[@1ɺppH9uHH[H@ USHHH(dH%(HD$1Hto1ɺppH9H@ҵt\1ɺppHH9u}HPҵtuHL$dH3 %(QH([]f.H@ҵuHHHX(H SYHHCHHH! HHh(HUYHH0EH^HH@H@ѵ@H@ HHh(HHE@HPOHHH\$HCHT$HHC¼H|$HtcO}Hu"H}PtH<$HtHOHH}PEHHKVH<$Hu; H8hH|$HtNHHfSHGHH~6HHHGt[@1ɺppH9uHH[H@7 USHHH(dH%(HD$1Hto1ɺppNH9H@ҵt\1ɺppH(H9u}HPҵtuHL$dH3 %(QH([]f.H@ҵuHHX(H SYHHCHHH-HHh(HUYHHL0EHHH@H@ѵ@H@ HHh(HHE@HпHHH\$HCHT$HHCRH|$HtL}Hu"H}PtH<$HtLHH}PEHHSH<$Hux H@8hHH|$HtyLHH)fSHGHH~6HHHGt[@1ɺpp/H9uHH[H@  USHHH(dH%(HD$1Hto1ɺppH9H@ҵt\1ɺppHH9u}HPҵtuHL$dH3 %(QH([]f.H@ҵuHHX(H SYHHCHHHuHHh(HUYHH0EH~HH@H@ѵ@H@ HHh(HHE@HPoHHH\$HCHT$HHCH|$HtJ}Hu"H}PtH<$HthJHH}PEHHkQH<$Hu[" H 8hH|$Ht JHHfSHGHH~6HHHGt[@1ɺppH9uHH[H@USHHH(dH%(HD$1Hto1ɺppnH9H@ҵt\1ɺppHHH9u}HPҵtuHL$dH3 %(QH([]f.H@ҵuHHX(H SYHHCHHHMHHHh(HUYHHl0EHHH@H@ѵ@H@ HHh(HHE@HHHH\$HCHT$HHCrH|$HtH}Hu"H}PtH<$HtGHH}PEHHNH<$HuH8hhH|$HtGHHIfSHGHH~6HHHGt[@1ɺppOH9uHH[H@@5USHHH(dH%(HD$1Hto1ɺppH9H@ҵt\1ɺppHH9u}HPҵtuHL$dH3 %(QH([]f.H@ҵuHHHX(H SYHH}Hu"H}PtH<$Ht8>HH}PEHH;EH<$Hu+tHހ8hH|$Ht=HHfSHGHH~6HHHGt[@1ɺppH9uHH[H@HATIUHSHt1ɺppMH9HCH}HEHt)=HCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺppHH9uSHH[]A\H@D1L&JfDI<$tH[]A\]D1LI}f.HATIUHSHt1ɺppMH9HCH}HEHt)g%f.USHH(dH%(HD$1HH}H@HT$HHHHD$~H|$Ht1{Ht9H{PCHH)8H<$Ht0HD$dH3%(u6H([]@H}HCPt%Hu뵹ր0WxuHH|$Ht0HQUSHHHdH%(HD$1Ht1ɺpp^H9H0ҵtHL$dH3 %(H[]@Ht1ɺppHH9uxHk(Ht~UYHH0EHdHH@ҵ@H@ Hh(HHE@HH@H$:H<$HtKOH8h*H<$HtH@USHHHdH%(HD$1Ht1ɺppH9H0ҵtHL$dH3 %(H[]@Ht1ɺppHH9uxHk(Ht~UYHH0EH$HH@ҵ@H@ Hh(HHE@HH@H$H<$HtK-hHu8hH<$Ht\H@AUATIUSHH(dH%(HD$1HAQ8H= D!HH! HH%LHIHH@IH {8sCL9H!HH]hHHL]`HMPH)HIHt@HEpH+ExHHH4LH)HHHLL9HFL+EXHH,ILH*ILLHHLH?HH)HHLHHHMHHHOHL H@HH)1L$I5HIH9@H9t7@tA;}]HcHAH(L9ًtUI vLMMH9@H9uL9@@uH\$dH3%(H([]A\A]ÐH(1L9uHNHL@H8H H@0H=@POHB5HZ4証HHH5@~THcHH)H fZ Hl#(u(YHHH9XufÐfAWAVAUATIԉAIUSDt$8AFHMʼnT$E1H4LD\$E1E~uM1fAD?D!E~G11Dǃ1D9uIA<I9uAB|GID9[]A\A]A^A_I1I9A<u1ː@AIS|$1~a1HLA8!E~1E1E1fDAA1E9uIDI9u[E1IDI9u1[f1~119ufff.USHHH7HcH9ƉWw|H,HpHHCdHHCXHC躶HC 1HcH{H螺HcH{1H茺HcH{H[]1Htfffff.ATUSHH HVdH%(HD$1HF HG nHWoHVHWHVHWHQ:H DHD H3ÁHHHHH軹,|HHHtDH艹H!HD$dH3%(u:H []A\5gtHC k貸HHH?fffff.AUATUSHHH(dH%(HD$1H9HW HE HUHC DeHSHUDcHSHUHSH!Q:H DHD(&H.3ÁHH9H'HDH*,|HHÁHDHHHL$dH3 %(HuwH([]A\A]fHHtҸH{HtĸH{Ht趸H{ 譽5藵tHC DcHHHnfffff.ATUHSH dH%(HD$1HG 0^HQ8H= D1HDe菿HHž2ÁHHH~HD蓶Hž,|H^'HHLHbHHD$dH3%(ujH []A\ÐHHtBH}Ht4H}Ht&H} 5tHE [f.197~ HGHcfffff.197~ HGHcfffff.97f~ HGHcf.Gfff.97~ HGHc97~ HGHc97~ HGHcfffff.AWAVAUATUSHHxdH%(HD$h1HcG T$$HH9H<IDHŋC ~ HHHHH9ut$$D$ S~4t$ H1 fHcAZ,,H9KE1E1f.LHHf~PHcʃHH)ѺH fHfDDQ uc#Y@HH9XuHQ8H= DL$H|$@^&\$d$8H|$@>9ÁHIIDL^ MÁHI)fLZD$׾HIfLZD$谾?HIfLZD$艾H|$@AID9k~MS贿@5XǰtHHB0\$D$ s H|$@‰D$:C Ht$PHD$H1L{ Ls0LLkHt$Ht$XLK8L[(Ld$(IHt$IctfAA (AAA,4*HcH|X.v69L$@~&A;L$@}H|$;L$@} H|$ AIc fA, *HcHtX.v0;D$@}&E;D$@}Ht$;D$@} HD$ BH9C /Ld$(H{PH;{XwH(tHt$@HCPHxH{PS J%^&d$HH HfDH_D$H9D$uHQ8~H= DH|$0 [H|$0a WÁHIlt$ L耰bHIKfLZD$H|$0S ~)HK81fD\D$DH9H|$@t$$9t$tvD$D$ hJ&\$5P vH{@Ht$@wHH|$@eH轸D$$H蝰H\$hdH3%(D$$uHx[]A\A]A^A_H|$0H֮H|$@HHaATUHSHPHdH%(HD$H1Ht'H}(HtH} Ht H}0HtH}8HtHHtޯHHtͯHHuPHU`LMxLHMXHEhLUpH|$Ht$ H}@Ht$ HT$0HL$LL$LD$HL$(HD$8H}@Ht0HH]hL`I9vfH;HDI9wH}@6HD$HdH3%(u HP[]A\舭AWAVAUATUSHHdH%(H$1t0H8HtҮHHtHHt谮Hc{ HH9HH|$P1HC8HD$PHD$XHD$`HD$hHD$pHD$xHDŽ$HDŽ$HDŽ$HDŽ$*HCPHHspLchLsXL{`HHD$HKxHHt$Ht$0HT$ H|$0HT$H{@HL$Lt$8HD$(L|$@Ml$Ld$HHHhL9I}I胲L9wH|$`HsPHKXHS`HChLL$H{PH|$hLD$PHt$`HL$hH{XH|$pHT$pH{`H|$xHD$xH{hH$L$H{pH$L$H{xH$L$HH$L$HH{@LC@H|$PH{HLD$XHt$0Ht$0HT$@HT$LL$H|$XH|$PLt$LCHL|$ Ld$(HL$8HD$HH|$PHt5H$Hl$xL`I9vH}HKI9wH|$PIߘL9wUH蝞HEI<$輘I$ID$&HnH覛fDAVAUIHVIEIATUSLbI9s3I$HDHH(H9uIEIL9wIVH9tSInIH9tDHH(H9uImI]H9tf.HH(H9u[]A\A]A^ImIH9tf.HH(tH9u[]A\A]A^fDATUHSHPHuLO8LG@HU HHHMdH%(HD$H1LU0HE(Ht$ Ht$ H|$HT$0HHL$LL$LD$HL$(HD$8H}Ht/HEHH](L`I9v@H;HI9wH}HD$HdH3%(u HP[]A\XAWAVAUATUSHL*dH%(H$1HH|$`Ht$I9H$ HD$LPM9t HD$LH0HAL|$MHHD$@HBIHD$ HAIHD$(HBHHD$8HL)HHHt@H$L)MG(HHH4HI_ L)HHHHIHD$hHBL)HHHD$0LL)M_HHHT@LH)Io8HHHHLH)HHHD$XLHL)HHD@HIHL)HH9D$XTM92 HD$XH$ HL$@IHL$8HL$(H|$(HL$@fLH+l$0H$H+\$@HD$(LHHHHHHl$H\$HD$ H@HHD$H HH|$HL$8A HIHHL$HL9HIIOL9LNKHH)H)HHHt$(I)H~!fH(H(HHML9uHl$LHL)H HMlH\$L)H %H<$HHH$M)MHD$HxHX L@(IHD$HpHI)IILHHL$hH iHD$hLIIHLfffff.UHAWAVAUATASHH(IEMHHGؐ߁HGHGHG7HHdH%(HE1rIED{0Ds4HC8IEHHC@t@LH LILh(MrH ÁH LAAH HxH7JHUH ÁōH}50ҁ€H}ɊF|HIԉI4$LHVĉH}{LH0LILpqH0 ā1H0LADH0HxH7HH@LHHLx-qH@|H~1H@HA׈CH@HxH7FHH HpHHLxpH`LpH`|-~HpH`HHPAHC HPHIH~HPHxH7H`HxH7HpHxH7H}LpHS@HC8KHHEHUtBHs0LEAVHUH}E2XHEHKZHUHEHCHCHMHEHSHEHEHx軄HEHx讄HEHx衄HEHxH7 HCH"H};0ҁL%~H}, āHI7LLv,|HH}цH HxH7HEdH3%(He[A\A]A^A_]HuGfHu7UfHu'fHu2fHu:fHuBfHufHuYsցvWxtpIHpHxH7H HxH7t HyH{@HC(HxH7t HSHC HxH7t H6H{轂L|IH@HxH7qHucI[IH HxH7`HuRIpIHPHxH7t HuH`HxH7HuIIHEHxHEHxH7B"NIIH0HxH7H}ILnH}I;]fDf.@f.SH(H3lH[f.@S{HHHT$dH%(HD$1ɇHL$dH3 %(u HH[qf.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPW>fffff.SHdH%(HD$1@HH8t+HHxH7tHt$HuH8u@HD$dH3%(uH[}pffff.SHdH%(HD$1@HHt+HHxH7tHt$HHu@HD$dH3%(uH[offf.SK߁H HdH%(HD$1xH0{HHǁHD$dH3%(uH [oHH衁HySHH@HHGPdH%(HD$1~HC(HxH7u6HC HxH7u5H{~HD$dH3%(u(H[fDHt$@Ht$nfffff.SHWH[Nufffff.UHAWAVAUATASHH(IEMHHGPHGHGHG7HHdH%(HE1hIED{0Ds4HC8IEHHC@t@LH LILh(]hH ÁuH LAAH HxH7JHUH ÁՃH}5߁vH}ـF|HII4$LHVH}LH0LILpgH0 āu1H0LADH0HxH7HH@LHHLx=gH@|Ht1H@HA׈CH@HxH7FHH HpHHLxfH`LfH`|=tHpH`HHPAHC HPHIXtHPHxH7H`HxH7HpHxH7H}L$fHS@HC8KHHEHUtBHs0LEAVHUH}E9XHEHKZHUHEHCHCHMHEHSHEHEHxzHEHxzHEHxzHEHxH7 HCH"H};߁L5tH}<~ āHIG}LLl,|H*}H}|H HxH7HEdH3%(He[A\A]A^A_]HuGfHu7UfHu'fHu2fHu:fHuBfHufHuYivWxfIHpHxH7H HxH7t HyH{@yHC(HxH7t HSHC HxH7t H6H{xLrIH@HxH7qHucI[IH HxH7`HuRIpIHPHxH7t HuH`HxH7HuIIHEHxxHEHxH7B"NIIH0HxH7H}I\znH}IKz]fDf.@f.SH(HCbH[f.@S2{HHHT$dH%(HD$1}HL$dH3 %(u HH[gf.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfAHtG~fDGPWNyfffff.S'HdH%(HD$1@HH8&t+HHxH7tHt$HuH8&u@HD$dH3%(uH[fffff.S)HdH%(HD$1@HH't+HHxH7tHt$HH'u@HD$dH3%(uH[ ffff.SHH HdH%(HD$1 oHy0{HxHwHD$dH3%(uH [eHHwH)oSHH@HHGdH%(HD$1tHC(HxH7u6HC HxH7u5H{tHD$dH3%(u(H[fDHt$@Ht$dfffff.SHWH[^kfffff.UHAWAVAUATASHH(IEMHHGHGHGHG7HHdH%(HE1^IED{0Ds4HC8IEHHC@t@LH LILh(m^H ÁkH LAAH HxH7JHUH ÁyH}5lH}vF|HIuI4$LHVuH}uLH0LILp]H0 ā(k1H0LADH0HxH7HH@LHHLxM]H@|Hj1H@HA׈CH@HxH7FHH HpHHLx\H`L\H`|MjHpH`HHPAHC HPHIhjHPHxH7H`HxH7HpHxH7H}L4\HS@HC8KHHEHUtBHs0LEAVHUH}EDXHEHKZHUHEHCHCHMHEHSHEHEHxpHEHxpHEHxpHEHxH7 HCH"H}=LEjH}Lt āHIWsLLb,|H:sH}rH HxH7HEdH3%(He[A\A]A^A_]HuGfHu7UfHu'fHu2fHu:fHuBfHufHuY `@vWx\IHpHxH7H HxH7t HyH{@ oHC(HxH7t HSHC HxH7t H6H{nLiIH@HxH7qHucI[IH HxH7`HuRIpIHPHxH7t HuH`HxH7HuIIHEHxnHEHxH7B"NIIH0HxH7H}IlpnH}I[p]fDf.@f.SH(HSXH[f.@SE{HHHT$dH%(HD$1sHL$dH3 %(u HH[]f.f.fff.AHtG~fDGPWofffff.HvWxYfATIUHSHHt#H{ H?luHEH9C vH[HuL[]A\IH[SEHdH%(HD$1@HHCtCHHxH7t㺠AHtIPЅHt$HnHCufHD$dH3%(uH[f.PJH.\fffff.SCHdH%(HD$1@HH8BtCHHxH7t㺠AHtIPЅHt$HmH8BufHD$dH3%(uH[f.PJH~[fffff.ATUH8SL0HHHHdH%(HD$1xXHHHǃ0BHǃ(@BHǃ8gFXH`HpHǃ8AmH4%UH5%UH(H@H0Hǃ(DbeH(HxH7uNHjHgHD$dH3%(u6H[]A\ÐH0LHxw o#fHt$?Zfffff.SHH[`fffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h1p\H|$@]\HT$.H|$0poHL$PHT$@Ht$0HbXHD$0HxH7lH|$HL(L0hH|$XhLHHǃHǃHǃ(7kHk#UƃLHǃ(DHǃ1ƃ HǃHxH0H-#UHǃHǃ Hǃ(HZL8Hǃ0BHǃ(@BLfLLYIEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$XgD$ Ht$H(D$ dD$tHkt'HD$hdH3%(Hx[]A\A]A^A_@HǃDLlH(L|iHLH0t}Hx1lH|$0KL(w`H|$0}j#HHiLH]^HjH|$0+i7fDHt$/vHxw lzVHH|$X:fHb`HL7cH(HxH7t Ht$@HeHcH`HHǃ(DLaHHuHgHpHD$@HD$@;HxPHAPH|$@'jH|$POHUH|$PAi(H4]HH)]HhH|$PgH|$@ c(bH|$0IHgLIH|$PHgH|$@baHH|$@OjLHeHUH UH@H0HHHD$0HxH7t Ht$/H|$HdEH@UHAWAVAUATASAEHhHxDmdH%(HE1HHEHBHHEt@H}LO0QHAELeAULEEDHLHtXLxHEZIIFPIVH}@@ HHXIFHUcH{HtWukHxH]HPHHULmH{BHUL9HHSt&MtAE HtW ~LkHEHx%cHEHxH7u4I|$ cHMdH3 %(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHJHkNuRjc$SIHLYHEHxH7t Hu|I|$bbH\HLeHLHHP_HLeH_HxHbFxf.GxfUHAWAVAUATISHL1Dž(dH%(HE1IHDž0HDžHHH HHHHHHHH)H IHH8H@1AA9vvLHI4HBHMILHBHAtA@HLLHHH A9wHHA0A!M0E1DHHLHCHA{UHHLHCHADpLUHHLHCHAUHfHLHCHA*THfHLHCHADH*TAE9L=ZA1At;f.HЃL H H4HLLHLHA9wH0H HMdH3 %(He[A\A]A^A_]H8H HH9IIHSAE Iu(HHIv(HXAF PHHHPnMEL0aH;IuAKcAAY^^cH LhXP%HcC0Hs( b\H HHLYHM\LHIHAXX%Y%A5`L9HiMHuqHGHHRHHJMH`8HTHHTH`H_Y^HH0H HVHYHHa_f.Df.@1f.1f.Sf.SH_Ht&HHH@H=\u_H[VSfD[fD[DHATIUSHt!HsLHkHSHHu[]A\f.AWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HI,PE $D@ H1HE9}L9taE1AF A9$Aǿ HHA$It$H{(LC HHHD_IE(HHغ[]A\A]A^A_Aff.fff.AHtG~fDGPW>]fffff.H vWxsGfATIUHSHHt#H{ HYuHEH9C vH[HuL[]A\IH[SHlHdH%(HD$1@HHjtCHHxH7t㺠AHtIPЅHt$H[\HjufHD$dH3%(uH[f.PJHIfffff.SjHdH%(HD$1@HHhtCHHxH7t㺠AHtIPЅHt$H[HhufHD$dH3%(uH[f.PJH.Ifffff.ATUH8SL0HHHHdH%(HD$1(FHHHǃ0BHǃ(@BHǃ8gEH:NHpHǃ8A3[HUHUH(H@H0Hǃ(DSH(HxH7uNHWHUHD$dH3%(u6H[]A\ÐH0LHxw 7]#fHt$Gfffff.SHH[^Nfffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h1 JH|$@ JHT$.H|$0i]HL$PHT$@Ht$0HFHD$0HxH7|H|$HL(L0tVH|$XjVLHHǃHǃHǃ(7:YHUƃLHǃ(DHǃ1ƃ HǃHxH0HUHǃHǃ Hǃ(HGL8Hǃ0BHǃ(@BLTLLGIEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$X?UD$ Ht$H(D$ RD$tH3Yt'HD$hdH3%(Hx[]A\A]A^A_@HǃDLpZH(L,WHLH0Hx1>ZH|$0MH(#NH|$0)X#HI4WHt?H7GHHLWH|$0V+f.Ht$/fuI$LHxw YHxw YNWDHLPH(HxH7t Ht$@HSHzQHMHHǃ(DLNLHTH@UH AUH@H0H|$0IHULHbHUHpHD$@HD$@;Hx=H=H|$@WH|$PQHBH|$PV(HJHHJH|$PYUH|$@oPOHH|$XRHLH|$PH#UH|$@9PTOHH|$@=+XHHHD$0HxH7t Ht$/H|$HRHHff.UHAWAVAUATASAEHhHxDmdH%(HE1HHEHBHHEt@H}L<0>HAELeAULEEDHLHDXLxHEZIIF>>IVH}@@ HHXIFHU QH{HtWukHxH]HPHHULmH{BHUL9HHSt&MtAE HtW ~LkHEHxPHEHxH7u4I|$PHMdH3 %(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHJHkNuRjc@IHL&GHEHxH7t HuLI|$OH JHLeHi:HHP[MHLeHLHxHOFxf.GxfUHAWAVAUATISHL1Dž(dH%(HE1IHDž0HDžHHH HHHHHHHH)H IHH8H@1AA9vvLHI4HBHMILHBHAtA@HLLHHH A9wHHA0A!M0E1DHHLHCHABHHLHCHADpBHHLHCHABHfHLHCHA*aBHfHLHCHADH*+BAE9LGA1At;f.HЃL H H4HLLHLHA9wH0H |HMdH3 %(He[A\A]A^A_]L8H HI9MLHRC Hs(HHIv(HXAF PHHHP?LEHNH;HuAPAYBL^PH HXX%IcE0L iPA\H HHYHAI\AXXo%Yo%AMH9Ix;HuiH5HHRHH:HN8HxBHHmBHAM|G}HH0H QHDHQGHHMf.@f.@1f.1f.+Af.SH_Ht&HHH@H=0'\uOH[@fD[fD[Df.fff.AHtG~fDGPW>Lfffff.HvWxs6fATIUHSHHt#H{ HHuHEH9C vH[HuL[]A\IH[SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H[KHxufHD$dH3%(uH[f.PJH8fffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HJHufHD$dH3%(uH[f.PJH.8fffff.ATUH8SL0HHH"HdH%(HD$1(5HHHǃ0BHǃ(@BHǃ8g4H:=HpHǃ8A3JHUHUH(H@H0Hǃ(DBH(HxH7uNHFHDHD$dH3%(u6H[]A\ÐH0LHxw 7L#fHt$6fffff.SHH[^=fffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h1 9H|$@ 9HT$.H|$0iLHL$PHT$@Ht$0H5HD$0HxH7dH|$HL(L0tEH|$XjELH"HǃHǃHǃ(7:HHUƃLHǃ(DHǃ1ƃ HǃHxH0HTHǃHǃ Hǃ(H6L8Hǃ0BHǃ(@BLCLL6IEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$X?DD$ Ht$H(D$ AD$tH3Ht'HD$hdH3%(Hx[]A\A]A^A_@HǃDLpIH(L,FHLH0t}Hx1BIH|$0MxL('=H|$0-G#HH8FLH ;H|$0E?fDHt$/~fHxw Hz3HH|$XBH=HL?H(HxH7t Ht$@HBH@HH|$0IHDLQH|$PHvDH|$@?>HH|$@c,~GLHBHtTH uTH@H0HHHD$0HxH7t Ht$/H|$HFAMHfff.UHAWAVAUATASAEHhHxDmdH%(HE1HHEHBHHEt@H}L+0-HAELeAULEEDHLHtXLxHEZIIFn-IVH}@@ H#HXIFHUP@H{HtWukHxH]HPHHULmH{BHUL9HHSt&MtAE HtW ~LkHEHx?HEHxH7u4I|$?HMdH3 %(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHJHkNuRjc/IHLV6HEHxH7t Hu|I|$?H:9HLeH)HHPFxf.Gxff.fff.UHAWAVAUATISHDžHDždH%(HE1HHDžDž(HDž0HDžHHIH0H HHHHHHHH)HHHHHH HH8H@PE1AE9EHKIDJ4HL,HLHBHtAEHLHHHGA}GlLHHHH  AE9;f.LHxs6Hw@HI?LL72H+?HAaARM0E1fDEHKLIDH1KHLIDH0KHLIDHDp0KHLIDH0KfHLIDH*T0KfHLIDHDH*0AE9L5A1At7fDH0ЃL H H4HLLHHHA9wH0H tHHaHMdH3 %(NHe[A\A]A^A_]HLLpM9tmMXfDAD$ It$(HHIu(HXAE PHHHP,MELx@YP[3H_=HR1PH"6HdH%(HD$1"HC(HxH7u6HC HxH7u5H{|"HD$dH3%(u(H[fDHt$@Ht$fffff.SHWH[>fffff.UHAWAVAUATASHH(IEMHHG>HGHGHG7H(HdH%(HE1 IED{0Ds4HC8IEHHC@t@HUH@0%(HUHP0(HUH`0'H}71H}$F|HI $I4$LHV#H}#L(Hp|LILhN1HpLAՈCHpHxH7L(H@HILht H|LPNHHLHALk HLHHxH7HHxH7HHxH7L(H0LILp(M HLA։$HHxH7XL(H āLILxfM1HLADHHxH7H(HÁLHHLx(MHH(A׉ HHxH7H(H0LHHLx(LHH(A׉HHxH7H(H0LHHLxdL1HH(A׈HHxH7CH(HPH HDž7HHLx H0LKH HH(HAHHHHxH7HHxH7H HxH7H(H`HPHDž 7HHLxWH@0L3KHPH@H(H0AH0H H0HxH79H@HxH71HPHxH7)L}H LLpHLH`L(HC8KHEHC@HHEt@(AWL`ATs0HUD$H}PP PAV^5HEHKH0HUHEHEHCHCHSHMHEHEHx HEHxHEHxH`HxH7+HpHxH7#HEHxH7HCHoH}N1LGH}N1HIYLL ,|H<H}H HxH7HHxH7H`HxH7HPHxH7H@HxH7HEdH3%(He[A\A]A^A_]fHufHuHfHuPfHuXfHufHufHu fHuifHufHuw,fHug4fHuWH HdH%(HD$1 H0{HHHD$dH3%(uH [LHHaH SHH@HHGPKdH%(HD$1wHC(HxH7u6HC HxH7u5H{LHD$dH3%(u(H[fDHt$@Ht$fffff.SHWH[ fffff.UHAWAVAUATASHH(IEMHHGPKHGHGHG7H(HdH%(HE1[IED{0Ds4HC8IEHHC@t@HUH@0HUHP0HUH`0H}8p> H}F|HII4$LHVH}L(Hp|LILh>1HpLAՈCHpHxH7L(H@HILhDH|L >HHLHALk HLHHxH7HHxH7HHxH7L(H0LILp(= HLA։$HHxH7XL(H āLILx6=1HLADHHxH7H(HÁLHHLx(<HH(A׉ HHxH7H(H0LHHLx(<HH(A׉HHxH7H(H0LHHLx4<1HH(A׈HHxH7CH(HPH HDž7HHLxH0L;H HH(HAHH~HHxH7HHxH7H HxH7H(H`HPHDž 7HHLx'H@0L;HPH@H(H0AH0H H0HxH79H@HxH71HPHxH7)L}H LLpHLpH`L(THC8KHEHC@HHEt@(AWL`ATs0HUD$H}PP PAV辇HEHKH0HUHEHEHCHCHSHMHEHEHx HEHx HEHx H`HxH7+HpHxH7#HEHxH7HCHoH}Op>LH}1HI)LL~,|H H} H HxH7HHxH7H`HxH7HPHxH7H@HxH7HEdH3%(He[A\A]A^A_]fHufHuHfHuPfHuXfHufHufHu fHuifHufHuw,fHug4fHuWHEHxH7umHEHxH7ulHpHxH7u8I|$HudH34%(HXuHe[A\A]A^A_]fHuDHuDHuDHH[HE1)HHPHkNuP!HHHPLeHI|$=HeHHXHHEHxH7t Ho HEHxH7t HoHpHxH7tHowIHLHLeHLeHLe밐fAWAVAAUATUSH1HHP0dH%(H$1H$t$DŽ$HDŽ$L$XHDŽ$H$H$L)ui90v[MdI4$tFLLHH$PH$$PنI$90wH$HDŽ$zƄ$9H$H5TDŽ$HDŽ$HDŽ$HPHH$H$taHnH$H fHHQHuH$ f.HHPHuH$H=TH$H$$t H$)HHHpeH$HxHǃHǃHHHthH$HHH$HHBH$HDŽ$H$H$H$HDŽ$HH$1 eH$HDŽ$yƄ$H$HT$t H$1HLu@0H9t$HtHyH-H$HDŽ$pzƄ$H$HT#$t H$|1HLu80H9t$HtH@zHx.H$HDŽ$pkƄ$WH$HpT$t H$HH$HHDŽ$pkƄ$HTHtKHkHH@Htp yH@HuHHktJ Hr(H(tIH$$H$HDŽ$jƄ$hH$H5TDŽ$HDŽ$HDŽ$HPHH$H$t`HE?H$H HHQHuH$ f.HHPHuH$HmTH$H$$t H$YHHPH@oH$HHHǃPHǃhHXH`HthH$HPHXH$H`HBH$HDŽ$H$H$H$HDŽ$HhH$1H$HDŽ$pjƄ$H$H5TDŽ$HDŽ$ HDŽ$8HPHH$(H$0tWH>H$ H HHQHuH$(fHHPHuH$0H=TH$8H$P$t H$HHHpHxHǃHǃHHH$ HthHH$(HH$0HHBH$HDŽ$ H$(H$0H$8HHDŽ$8H$1L$`L$x`DŽ$ HDŽ$(HDŽ$HDŽ$8HDŽ$@HDŽ$HDŽ$DŽ$0H$0HDŽ$0oƄ$8H5TH951THH(H$HFH$HFH$ HFH$(F$0H$Hx("H THTHQHx(H9Ht dHTH@HT$8t H$0$H$HHHH$C0C($$C8\$$ C@d$$(CH$0CP$8CX$@C`$HCh$PCp$XCx$`$h$p$xD$$$$$$D$$$$$$$$$$$($$$ $)$0$*$8$ @$$(H$0P$8X$@`$HhDŽ$`HDŽ$h$PHDŽ$L$pL$xHHtuH$LHH^H$hH fDHHQHuH$p f.HHPHuH$xHD$H$L$H8P\L$8L$~pH= DH$9XH$XZHDH[HD$HdH$W$6([@eGHH$hH$XX$\@H H$H =8$8t H$0 H$tHHfHH$8HtH$H$xH$dH3 %(D$ HĘ[]A\A]A^A_H H ;ƅKfH$`$l$H$@HpLD$@$HƄ$P$hDŽ$`H$`H$H$hH$H$pH$ H$xH$(D[@eq%@H$XAH$DZH7H$ DHtfH=TZHTHPHTH@HHnTH_THhTHPHcH1HHHHcL1HHHHHH|$0|$t$|$ M/@:>Ht$0HHVM[H D$ H[HD$H[HD$HZxHHHD$0HxH7fHH|$@H|$t$l$ o.H|$`6(YKH|$`QHDHt$@HHVS[H&D$ H[H D$H[HD$HZxHH|$`HD$@HxH7HH|$PH|$t$l$ \$(e-H|$p:(YAH|$pG\H:Ht$PHHVIHD$(H!\HD$ H*\HD$H3\HD$HH|$pHD$PHxH7=0L@L$L1f.غLIDL$xLLHDŽ$\LLL90wLH$QL$H$DDŽ$IVHDŽ$ HDŽ$8Ht$H$(H$0tdL$H$ H@HHQHuH$( f.HHHHuH$0H$HH$8D$LH$ Lru2HP?X5:VDHH`HDHpHZuhHHHxH9tH HP(HnHH HHHƅHPH+XH=oHHHxH9t#H HP(H$HsHff.zH HHd1HH HHHƅaL$LL$LL$LvlH HHHp =HPHXHHD$PHxH7uNH$8HtH$H$oH H|$`H|HD$@HxH7tH$HHD$0HxH7tH$H$H,$xH$f$HUH$CH$H$HaO$H$ HHHpH|$pHH$ LHnHH$HZH$hH$X5NH$H0HHiHYI~HpHDŽ$;0HLH$O(YHAH$8HHHH$LhH$HxLHLiH$8HH$0q$HrH$`H$ H$HN$:H$($HH$HH$HH$Pf.f.@f.@f.@f.@f.@1f.1f.kf.[f.Kf.;f.+f.f. f.f.f.Hpo$@SHHpoH[鷾H0o@SHH0oH[釾Hn@SHHnH[WHHHwHjHvIH@yxt 1>*t@yxt fI@f.HvIH@yxt 1>*t@yxt fI@f.HvIH@yxt 1>*t@yxt fI@f.HvIH@yxt 1>*t@yxt fI@f.USH@H譸HuHxH@8PzxHgH螰H}HpoHC0zxHH{tHH@H=lNuCG@HE \ lHHsHCtHC8HtHC HE(HC(E0C0оHHHHpoHHSHۯfLIz@USH@H轷HuHxH@8PzxHgH讯H}H0oHC0zxHH{tHH@H=lNuCG@HE `\jHHrHCrHC8sHC HE(HC(E0C0HHHH0o賿HHcHfLIz@USH@HͶHuHxH@8PzxHgH辮H}HnHC0zxHH{tHH@H=lNuCG@HE \hHHqHCPqHC8qHC HE(HC(E0C0HHHHnþHHsHfLIz@AUATIUSIHH8WD$XdH%(HD$(1f($,Mnf$)iЀ: E*ʉ\AUA$HP$8H= DH|$AX,H|$2"YHI=D$L I[HIL0 T[HH$H设H|$H\$(dH3%(EuAH8[]A\A]DX5tA]A$$*HH|$=H赻DUSHHHHHGgBH[]HHHxAVAUATUISHHH|$dH%(H$x1HEHHHHH9HHHH),Ll$HHH?H HH)É1)HD$HPHD LhAH|$Aƅ0wÄHEHuH)צC9c*Ll$HHH 2H?HHH)HHHH?HHH)HHHH)É1)HD$HPHD LhAH|$Aƅ0ͰÄHHMH4ׂCLl$HH?HHH)HHHHHH?HHH)HHHH)É1)HD$HPHD LhAH|$Aƅ0$H]H4ׂCHHHH?HH)Hi@BH)HH?H1H)HD$LHpDHD$`HD$X8HD$h8HD$P5HxH7H|$PHD$AH!TH"TH|$hHD$H@HTHD$hD葹H$xdH34%(LaHĀ[]A\A]A^HH9 H|$n[ε$fH|$^[豵@MMA~8MAƅMMA~8Aƅ MMA~8Aƅ0H|$)t|HHIHPHDLhAAƅ0HHV,H|$x[@Ht$FfL蘱IH@0H=@PP LAfDLhIH@0H=@P LfDL8IH@0H=@P LfDMMtwA~8t AƅLIH@0H=@Ptܾ LDHt$H|$D$-ϾHMa HH|$.HֵfDSHHPsHG0zxHdHpoH[@HSHHrHG0zxH$H0oH[餶@HSHHpHG0zxHHnH[d@HSHHG8qHpHG0zxHHnH[fff.Hf.LIzSHHG8HtHPsHG0zxH )ЍӂAIf wH”u u&fDfA9wzHD$8dH3%(ueH@[@@u؉fi{f9ufi> )fЃhH|$HT$YtHt$H|$ H|$ HD$ nbHHH|$ HD$ nHD$HxH7t Ht$艾H葬ATUISHՉH dH%(HD$1HG0HD$H$ID$IT$HHHH@Ht9X }H@HuH9}9Y xHA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(HAXHE0HA`HE8|$t H<$ Ht$dH34%(uH []A\Hx1H|$t H<$HrfATUISHՉH dH%(HD$1HG0HD$H$ID$IT$HHHH@Ht9X }H@HuH99Y HA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(HAXHE0HA`HE8HAhHE@|$t H<$Ht$dH34%(uH []A\@HH1H躠|$t H<$HBfUSH@HHuHxH@8PzxHgH辚H}HpoHC0zxHH{tHH@H=lNuSG@HE HuH{HC HE(HC(E0HsHCtHC8HtC0HHXHH[]@H H$H)HpoH讪HVH^HH|f.LIz@USH@HݛHuHxH@8PzxHgH讙H}H0oHC0zxHH{tHH@H=lNuSG@HE HuH{HC HE(HC(E0HrHCrHC8sC0HHXHH[]@H H$H)H0oH螩HFHNH֘Hf.LIz@USH@H͚HuHxH@8PzxHgH螘H}HnHC0zxHH{tHH@H=lNuSG@HE HuH{HC HE(HC(E0HqHCPqHC8qC0HHXHH[]@H H$H)HnH莨H6H>HƗHf.LIz@AVAUATUISHH|$@Ht$dH%(H$1跤貘H$H|$ HH|$ 賯t$H|$@$H|$ 蚩HD$@HT$ H|$0HpX貢H|$0xH|$ nHt$H|$@D$-H|$ ˕HHHH|$@HHHt$H|$@D$-ήH$l$ H{8DkiHT$@H\$@HBHDPHZ耻 H|$@D-HD$@LHpH$HD$@X8HDŽ$8HD$HP5HxH7%H$HD$HAOHTHTH$HD$@H@HT@HDŽ$D*H$dH3 %(LHİ[]A\A]A^H舟HA0H@0H=@P0HADLMA~8tƃDL(IH@0H=@Ptؾ LDHD$@H|$@Hxw ߯#f.Ht$0&?111r11dxDAUATIUSHHHHhdH%(HD$X1HHH9LHV?2HLH?H"H)H@HHHHfD$PA*fA)fL$RH DAf|$TD))֍RLgfffiəimffi{i> )0ӂ@H1H9@߃dHHfD$PHH Ll$ fL$RfT$THt$PLfD$fL$fT$HHI9 HI9t/LHV?2HLH?H"H)H`HI)Ht$0H|$@Ld$0H|$PL H|$P vHT$PHD$@HJHHpH;rH;pH|$@1聜HHUH7HD$PHxH7HD$@HxH7H|$ HH7t9Ht$P諬-fHD$ 7HD$ 7HH7HEuH\$XdH3%(HHh[]A\A]f.Ll$ HT$P^[Lɦn@Ht$@H|$P@Ll$ HT$Px[L葦6@Ll$ HT$Pn[Lq@Ht$ΫfHt$P趫HHD$PHxH7t Ht$艫HD$@HxH7t Ht$mHD$ HxH7t Ht$0QHYHHf.DAWAVIAUATUSHHHߋIHx Hs HIGHsAIGIoHtLLIGHkMAHtffvHHx Hu ELHHCHuHCI\$LcHtHL3HCHmIHuHL[]A\A]A^A_H蹈LL辻詛HH)fAVAUIATUSHHŊIHC IF HC(IF(HC0IF0HC8IF8HC@IF@HCHIFHHCPIFPHCXIFXHC`IF`HChIFhHCpIFpHCxIFxHIHIHIIFAIFHsInHtLL+IFHkMHHHE HC HE(HC(HE0HC0HE8HC8HE@HC@HEHHCHHEPHCPHEXHCXHE`HC`HEhHChHEpHCpHExHCxHHHHHHEHCHCHuI\$LcHtHLGHCHmIH#[L]A\A]A^H识LL蟙HHf.DUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHBHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HD;` H~HxHHEHEH[]A\A]fD~nHW 1H9tH苝D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAWAVIAUATLoUSHIHH9twI\$ LHHHtOHusI9tnE1B A9D$ AǿHT$HHx HHT$LHDΞHE(L聜I9IuH[]A\A]A^A_f.AUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*H裍D;` H~HxHHEHEH[]A\A]fD~nHW 1H9tH;D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAVAUIATULgSHHHH9fDHS LHHHI9E1B 9C AƿHT$肄HK HT$HDHH HK(HH(HK0HH0HK8HH8HK@HH@HKHHHHHKPHHPHKXHHXHK`HH`HKhHHhHKpHHpHKxHHxHHHHHHLHE(H訙I9HH[]A\A]A^Af.H9AVAUATIUSHtdHVL6HHGHL)H)IHII9wfHHH)HHI9v8HI4H)HHHHHkH[]A\A]A^DMtHLH%H+E1Mt#HI9~H݂MIuH;HtLL#Hk@HHLʂH;Hu軂H+fHHL袂H{H M4$IT$HH) 肀fAWAVIAUATIUSHH9LnHHL?LH)HH$HGHHL)HHH9HoHL)HHHH9wpHH$M$HLI!HM9uL9tI<$HtҋIL9uL<$M>M~HL[]A\A]A^A_@H;HLIHI9uINIMl$I$HIH)L$LM9uWfDHH HKHkI4$Il$H)HHHtHHHHHkIHM9;HtIl$I+,$1HHCHCHHHtHH9~H膀H^fDH%H H9SH<$SHD$L9Hl$IuRDJ!HMHMHUH3LcI)LHHtHLHILeHHI9tPHtLcL+#1HEHEHELHHtL9LHmDInIH9t@H;Ht諉HH9uI.HtH蒉HD$IL<$IM~HD$M|LIL<$I8}fD+}/$}H|H\$H9tH;HtH芏H|L9tI?HtLHI_HH$蠎HH|H|$t H|$趈1|H贋HlH褋@HwvWx~fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAHtG~fDGPW鞓fffff.S.HdH%(HD$1@HH8-t+HHxH7tHt$HuH8-u@HD$dH3%(uH[݀ffff.S0HdH%(HD$1@HH.t+HHxH7tHt$HH.u@HD$dH3%(uH[]fff.f.fff.SHHHЁHdH%(HD$1Ht萯HxHtHhHtnHHHǃ@BHǃ8@BHǃHg|H5HHǃHA.HITHITH8H@H@Hǃ8D H8HxH7uAH(HtȮH蜎H脌HD$dH3%(uH[fDHt$n~fDSHH[nfffff.AWAVAAUATUSHIվHMċ$H$EΉD$$D$H$ H$H$(HD$dH%(H$1H$HT$`H$uCH$H$H$H|H$HxH7zH$MH$@H@HЁHǃHǃHǃ Hǃ(Hǃ87HHD$N{$IUHǃ`HǃhHǃpHǃxH$HǃHǃH$LIEHH$t@H$H$HHH$HL8HH$H$!D0LLyH|$0LvH|$@LHD$@7VH|$@[BxHx@@ HtIGI$L0yxP HhH`LhHt虫Ht$@H|$PJvH`Ht$PٓHD$PHxH7s8)xH4$H|$p@@ HtIuHt$H|$`uT$I|$HL$`Ht$p0HD$`HxH75HD$pHxH77I$L0yxP HxHpLxHt豪[LH|$0 [ۂD$D@ D?wHt$0H$@@ HЂILhuH$LH$HxH77I$L0yxP HHLHݩH@HǃPHǃX( HǃƃƃbvHx@@ HPuHHEH0yxP H(H H(HtCtHNtjHD$@HxH7HD$0HxH7H$dH3%(QH[]A\A]A^A_DHXH8ǃTDH8H|$H$kxuH8H$[HHHH$ΊfH$ fDH$fDHt$pwH${fDH$fDH$fDH${xH$HIHLHKHqHHRH$oxuH>wH$YH~HH~H$蜉׃H$H耉軃HD$@HxH7t Ht$/HD$0HxH7t Ht$@HHt袦HxHt葦HhHt耦H|$fH8HxH7t Ht$@8H(HtGHHH;H3H0HHD$`HxH7t H$HD$pHxH7t H$HHOpL|BHH腂HHD$PHxH7H$jHoLu|HH0pHoHK|ƂHH$H>H6HH$HxH7t H$HHqoL{dH誁HRHH$HxH7t Ht$pH$yQHffffff.UHAWAVAUATESAHEHXTLu0H]8PE(LdH%(HE1HHEHBHHEt@HpLnLmLLnLuHLnpHLAVAUA̋TLeLpEHPE LPEPPP?LXH0HEIIGGpIWH}@@ HHXIGHU)H{HtGukHXH]H@HHELmH{@HEI9HHCt&MtAE HtG LkHEHx讂HEHxH7umHEHxH7ulHpHxH7u8I|$nHudH34%(HXuHe[A\A]A^A_]fHu7DHu'DHuDHH[HE1)HHPHkNuP!drHllHHP^LeHI|$譁H{H~HXH荁HEHxH7t HopHEHxH7t HoSHpHxH7tHo3wIHCxLHLeHLeHLe밐fAWAVAAUATUS1HH(0HPdH%(H$1H$DŽ$HDŽ$HDŽ$L$hH$H$L)um90v[MdI4$tFLLHH$`H$$`I$I$90wH$HDŽ$pqƄ$詶H$HrT$t H$>HH$HDŽ$pqƄ$TH$H5UrTDŽ$HDŽ$HDŽ$(HPHH$H$ t\H1H$H@HHQHuH$ f.HHPHuH$ HqTH$(H$$HHHp8H$HxHǃHǃHHHthH$HHH$ HHBH$HDŽ$H$H$ H$(HDŽ$(HH$1艘H$HDŽ$ppƄ$訴H$HoT$t H$=1HLu90H9t$HtH@pH8 H$HDŽ$pƄ$H$HoTS$t H$謲1HLu80H9t$HtHpH H$HDŽ$oƄ$至H$H nTò$t H$Ht?L10H9t$HtHoHX H$tHHuT@HvH$H$1H$dH3 %(H([]A\A]A^A_HPHcH1HHHHcL1HHHHHH|$ $\$d$3@:$sHt$ HHV3~[HsD$Hw[HrD$Hw[Hr$HwZxHrHn~HD$ HxH7rHH|$0H$\$d$WH|$Pxu3tH|$P9~H,rHt$0HHV;}[HrD$Hv[HqD$Hv[Hq$HvZxHqH|$P|HD$0HxH7cHH|$@H,$t$|$L$OH|$`xu+sH|$`1}\H$qHt$@HHV3|HqD$Hu!\HpD$Hu*\HpD$Hu3\Hp$HuH|$`~{HD$@HxH7s0eL@L$0L1DغLIDL$0hmLLHDŽ$0LmLL-HPHXL$0L[L$0LFyHHD$ HxH7u]H$H$H?oHHÀ$tH$pH|$`HwHD$@HxH7tH$0HH|$PH^wHD$0HxH7lHH$@LH^MH`H_HHRH|$p+xuHbdH|$px8HkHHkH|$pvq$HH$n$HH$KH|$pHivpHH$H$H$HPH$>c$H(H$Ǩff.@f.@1f.1f.jf. jf.if.HHvIH@yxt 1>*t@yxt fI@f.SH_Ht&HHH@H= \uH[vifD[fD[DATUISHՉH dH%(HD$1HG0HD$H$˨ID$IT$HHHH@Ht9X }H@HuH99Y HA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(HAXHE0HA`HE8AhE@腧|$t H<$Ht$dH34%(uH []A\DHH1Ha|$t H<$蚦HBkfATUISHՉH dH%(HD$1HG0HD$H$蛧ID$IT$HHHH@Ht9X }H@HuH9tq9Y lHA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(t|$t H<$ϥHt$dH34%(uH []A\@H81H`|$t H<$芥H2jfATUHSIԉH dH%(HD$1HG0HD$H$苦HEHMHt~HfHH@Ht9X }H@HuH9tQ9^ LH(3LHH腥|$t H<$HT$dH3%(uH []A\DHH1H_|$t H<$蚤HBifAWAVIAUAThUSHHH[IHx Hs )HIGHsAIGIoHtLLIGHkMA)Htffhv[HHx Hu ELHHCHuHCI\$LcHtHL3HCHmIHuHL[]A\A]A^A_HXLL莈kHjH)hfUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHRbHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HbD;` H~HxHHEHEH[]A\A]fD~nHW 1H9tHoD;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAWAVIAUATLoUSHIHH9twI\$ LHHHtOHusI9tnE1B A9D$ AǿhHT$XHHx )HHT$LHDpHE(LnI9IuH[]A\A]A^A_f.AH@vWxXfATIUHSHHt#H{ H/kuHEH9C vH[HuL[]A\IH[ǐfDAHtG~fDGPWmfffff.SJHdH%(HD$1@HH8It+HHxH7tHt$HuH8Iu@HD$dH3%(uH[ [ffff.SLHdH%(HD$1@HHJt+HHxH7tHt$HHJu@HD$dH3%(uH[Zfff.f.fff.SHHHHdH%(HD$1HtHxHt诉HhHt螉HHHǃ@BHǃ8@BHǃHg!WHe_HHǃHA^lH$TH$TH8H@H@Hǃ8D=dH8HxH7uAH(HtHhHfHD$dH3%(uH[fDHt$n'YfDSHH[_fffff.AWAVAAUATUSHIվHMċ$H$EΉD$$D$H$ H$H$(HD$dH%(H$10[H$[HT$`H$PsnH$H$H$HWH$HxH7H$}gH$pgH@HHǃHǃHǃ Hǃ(Hǃ87HHD$~U$IUHǃ`HǃhHǃpHǃxH$HǃHǃH$LIEHH$t@H$H$HHH$HL8HH$H$QfD0LLcH|$0L QH|$@LHD$@7cH|$@[r^RHx@@ HtIwsI$L0yxP HhH`LhHtɅHt$@H|$PzPH`Ht$P nHD$PHxH78YRH4$H|$p@@ HtI#PHt$H|$`PT$I|$HL$`Ht$pK HD$`HxH7EHD$pHxH7GI$L0yxP HxHpLxHt[L]H|$0 [ ]D$D@ DoQHt$0H$@@ HILh1OH$Lx H$HxH7GI$L0yxP HHLH" H@ HǃPHǃX( HǃHǃƃƃPHx@@ HPuHְHEH0yxP H(H H(HthtHsgtoHD$@HxH7HD$0HxH7H$dH3%(VH[]A\A]A^A_f.HXH8ǃTdhH8H|$gH$pH80\H$3f[H&ZHHZH$d fH$fDH$fDHt$pgH$kfDH$fDH$fDH$k!RH$HI.dHLHKHLHHRH$tH^QH$eYHXHHXH$c]H$Hc]HD$@HxH7t Ht$/HD$0HxH7t Ht$@HHt€HxHt豀HhHt蠀H|$]H8HxH7t Ht$@(H(HtgH;`H#^H[ZH3H0HHD$`HxH7t H$HD$pHxH7t H$HHoJLVb]HH\HHD$PHxH7H$ZHJLV]HHP\pHIHkV\HH$6_H^YH\6HH$HxH7t H$HHIL V\H[HRHH$HxH7t Ht$pvH$^QHffffff.UHAWAVAUATESAHEHXTLu0H]8PE(LdH%(HE1HHEHBHHEt@HpLHLmLLHLuHLHJHLAVAUA̋TLeLpEHPE LPEPPP/LXH0HEIIGgJIWH}@@ HPHXIGHUI]H{HtGukHXH]H@HHELmH{@HEI9HHCt&MtAE HtG LkHEHx\HEHxH7umHEHxH7ulHpHxH7u8I|$\HudH34%(HXuHe[A\A]A^A_]fHu'DHuDHuDHH[HE1)HHPHkNuP!LHFHHP~YLeHI|$[HUHXHXH[HEHxH7t Ho`HEHxH7t HoCHpHxH7tHo#wIHcRLHLeHLeHLe밐fUHAWAVAUATLSAHHD0HPdH%(HE1HPTDžXHDž`HEHDžxHhHpL)DžX@XX90vkXMdI4$tӋFLLHHHPNI$HHDžpqƅ袐HLTHI܏t H7MHHDžpqƅPHH5RLTDžHDžHDžHPHHHtTH3HH HHQHuHHHPHuHHKTHH HHHIAsHLILJHILJIIHtdHIIHIHBHHDžHHHHHDžIH1rHHDžppƅ踎HITHIt HM1MLu90H9t$HtH@pHHHHDžpƅ*HITHIdt H迌1MLu;0H9t$HtHpH(HHDžoƅ蚍HL%4HT׌t H2E1MLu'fDHANj09xHtHLHDžoƅHGTH oHH@HtD9x }H@HuHoH D9z > I$XHr(3HHAHHDžzƅmHL%RT誋t HMH HDž zƅ(HH5QTDžHDžHDžHPHHHtRHHHDHHQHuHHHPHuHH6QTHH ˊ(LI$I$HI$IDŽ$IDŽ$I$I$HthHI$I$HI$HBHHDžHHHHHDžI$H1 H0HDž0yƅ8肊H0L%OT迉8t H01MLu>fD0H9t$HtHyHH@HDž@pzƅHH@L% OT/Ht H@芈MtEL1fD0H9t$HtH@zH0耡Hx]HPHcH1HHHHcL1HHH{HgHHH`AXH@@:IH`HHVT^HIDHBjHI@HwN[HIHHZN[HmIXH=NZxHPIHUH`HxH7HHpHHAXH@HOJHTHHHpHHVS^HHDHAjHyH@HIM[H\HHH,M[H?HXHMZxH"HHRHpHxH7CHHHHpAXH@8螬\@:GHHHVR^HoGDH@HWG8H'L!\H:G@H L*\HGHHK3\HGXHKHRHHxH70L@LLDžXfDXLLIDCLLHDžCLLzCXX90wHIH`HPH]dH3%(T]He[A\A]A^A_]DE15LH`DDDžIVHDžHDžHXHHtTLۣHH HHQHuHHHPHuHHxHHXDL/HALEu?HPH 膂SHuHdDH`HX HPH+XH=oHHHHH9H LPH(H(H4(Hff.z H HH走HH HLXHH0H@LAPL(2ZYƃ@HāE1HHHHH9iE`HH9QH H(H(HmHH HLXHH0H@LAPL(=^_ƃGLLLLLLcHH HHH@5HPHXHH9!HHHxH7u2H`HP*HrDHH`HxH7tHHHLHpHxH7tHHHH(sH DbJ:HHMH@<H,H~HHH~HH~HH~8HH0q~HHHVclH=~[H6HF3HHRHjI8HCL8H6@HL+@HJ:EHH}HHJEHHHj}HHHLHaf.@f.@f.@1f.1f.>f.{>f.k>f.HHvIH@yxt 1>*t@yxt fI@f.SH_Ht&HHH@H=]uH[=fD[fD[DAHtG~fDGPWNIfffff.HvWx3fÐUSf(HHf(5*l%-*l%t$pl$x5l%-n$$5 l%$-k%=k%$$-k%5k%D$f(T$0dH%(H$1$$$\$6HcD$P^Jf(\tp\\$d$YY|$8^^X|$@Qf.YYYXt$HQf.d$Xf(o5eL$\YYl$0^f(KF%j%L$d$DYYD$@XQf.Nl$Hf(f.^l$J|$D$T$8Xd$0YL$ ^X\Y^f({JL$ D$f.f( D$L$(T$ ET$ L$(^\T$T$t$f(\T$t$fTGf.i% i%D$i%YYL$Pl$H$dH3%(^^LH[]L$8L$f(D$XL$7L$f(D$X7L$ f(f(H|$`\d$d$2H|$`KF0H>:D$H?H|$`Ef(L$T$l$V7L$T$l$_\$(d$ t$T$l$7\$(f(d$ t$T$l$H|$`HxDH;K2f.ATUISHf(HĀ-g%dH%(HD$x1f.d$fD$!d$w" nF^\^D$fD(f(DYYfA(XQf. $4$f.HL$4$f(f(YYXQf.f.v d$^f(l$8T$0|$(d$ >ET$0l$8d$ f.|$(kY ^=\|$\YD$|$ \A$E4Ht$PH|$XE?d$XD$5YYL$PY\Qf.f(=t$f(A<$^f(,$T$XY\D$ YXYY\f(YYYYYXXXf( e%\f.f(A<$X^XEE Ye%EHD$xdH3%(jH[]A\I$fDf(l$8f(d$0|$(HT$ |/YP%$\$Y= P% +P%XXf(t$^f(,#d$0l$(Y%P%Y-O% O%Y$$Yd$XD$hf(^"fT$8DL$@YfA.$%efAWD$`O%L$E1O%^\$DL$( ^\$ f(T$0\d$f(d$^M"\$ HD$xDL$(Y$fA(T$0AYY^\D$P O%XD$\$Xf(DYYDL$(YL$ XN%fY\T$ f(fTQf.\D$(AE1DŽ$DŽ$1DŽ$fD$fD$L$HDŽ$HDŽ$HDŽ$HDŽ$$HDŽ$HDŽ$HDŽ$HDŽ$$9H$f$H,؍CH* HEuM%d$l$`YD$X^^f(l$pf(Xf($\$HY-v%nM%Yf(f(T$8Y|$Xf(l$@f(^8M%Xd$0Y$X $f(|$1^Sf$>H$0f(AHDŽ$HDŽ$DŽ$0DŽ$4DŽ$8HDŽ$@fD$<\$Hd$0YT$8 kL%l$@YYY->#Y^AL%t$0XYYX 3L%Y3L%$YX$$ H$@H$L$0f. K%1$8{@% K%H$@D$zYD$p1$8{@YC0 _H$@D$4^lK%C81H$H$f$H$01DŽ$DŽ$DŽ$f$HDŽ$$$H$$EXYD$PYq(XD$xD$x|$AJ%J%^^\J%^X/_#Y7J% G\$0^f($\d$f(d$^\$0H$Y\$hY\$P蠚H$0蓚H$膚$@H$HDŽ${aC=@I%fE|$`l$xH$A.(H$0H$H$xdH3%(u~HĀ[]A\A]A^H$HؙH$0˙H$辙HfDf(9H$HDŽ${BHH8AWAVE1AUATAUSHHIH8 dH%(H$( 1BH$GGfD_HGfDo H$Ht$(|LD$8D$('H$H)H$HxH7+S11f$t$(f$H$`1ɉCfC 11f$lH$f$nE1E1E1HD$0H$DŽ$`DŽ$dHD$HH$@DŽ$hHDŽ$pDŽ$DŽ$DŽ$f$ HDŽ$DŽ$DŽ$DŽ$fD$HDŽ$DŽ$@DŽ$DDŽ$HfD$LfD$NHDŽ$PHD$@FH$Dt$(H$HL$HH$@HDHD$0HL$@ H$H$@DHHD$HHL$@H$@DHHD$@EH$HDŽ$$E$E$1f$1f$4UHuH$H E1E1E1f$1DŽ$DŽ$DŽ$f$fD$HDŽ$HDŽ$DŽ$ DŽ$$DŽ$(fD$,fD$.HDŽ$0DŽ$DŽ$DŽ$f$HDŽ$D$,L$( HD$E1HhHD$D\$,DED$Et1D9$@Ǿ{H$DK$1{E@44$ҾHC4$D$\0E4$t 1;$@Ǿ{藾sH$$1{@<|$eHCD$\$Y$$=;$01H${{ L$@HCT$$\PT$v 1;$@Ǿ{Ƚ$1H${Ń{\$ @蔽HCD$ $\@YD$X$$v 1;$@Ǿ{O$1H${Ń{$d$@HCd$$\`d$v 1;$@Ǿ{$1H${Ń{<|$ @謼HCD$ \@YD$X$Qf. ^ |;$ $ $H$H$H$H$`DŽ$H$1ɉ$$ $(DŽ$$DŽ$`DŽ$dDŽ$hf$nHDŽ$pHºf$lH$0(6Ht$H$`H$$H$H$Df$u7$w-DŽ$DŽ$DŽ$HDŽ$H$eH$`X;wCH$HDŽ$|<:f.H$HDŽ${:HC$H$DŽ$DŽ$DŽ$ H$0H$DŽ$$DŽ$(H$H$H$ DŽ$@DŽ$Df$L1DŽ$Hf$NH$@HDŽ$PH9H螐H$H$@);wH$HDŽ$|8HCH$H$1H$DŽ$DŽ$DŽ$H$DŽ$DŽ$DŽ$DŽ$DŽ$f$f$HDŽ$3HD$H|$L$@L$HHHH$H$@ |$(EPt"=%f.$19${@蠸N41{ML$A9l$@xID$;B$$$w#H$HDŽ$||7f.HC$H$DŽ$DŽ$DŽ$ H$0H$DŽ$$DŽ$(H$H$H$H$H$$.H$1G,$1{{\@,$uHC$9$`\@\$AvD$d1E@Ǿ{0D$1ML$p{E@ H$DK1{E@$HC1{$A9l$\@fWݣ$賶ID$$9$`B^0Av1$d@Ǿ{x1$`$H$p{L<@K1H${{h@,$%HC1{$A9l$\@@fW$ID$$9$`B^0Av1$d@Ǿ{躵$`1${TEH$p@L<苵1H${{P@$eHC1{$A9l$\@@fW_$5ID$$9$`B^0Av1$d@Ǿ{$`IHD$=@D9l$(H$p<HD$81HL$0f$ H$H$ E1DŽ$ DŽ$ H$H$H$`H$DŽ$ H$fD$ HDŽ$ $ 9$ H$H$ H$kJeH$ H$$H$H$ 9HXH$H訾$H$H$t/H$1 V8%f.wD$,D$, H$`Hl$H$1H$H$HH$H$`HH$VH$+H$ H$H$H|$@H|$HH|$0H$`وH$( dH3 %(H H8 []A\A]A^A_Df$H$DŽ$DŽ$HDŽ$$1f$1f$&H$H$BH$H$@譊H$1{{@ı1HC{{H@ $袱HC1{hCl$@~HCLt$H$$$H$\$H$L K6% HD$5%Y^5%X$H$fL^ Pf(f(%6%6%#$f.HDŽ$&f(JH$H$ H$1TOlH$H$HDŽ$l/D9$}$H$H$H$H$DŽ$H$D$$ $(ADŽ$$HH$0,*H|$`A%|A-H|$`/H|$PA%|A{-H|$P/HH$者H$ sH$fH$YH|$@OH|$HEH|$0;H$`.H&H~fDHH$@vH|$PHdH|$`HRH$HDŽ$-H$(0H$ H褄ZH( 1pH$Hx^H=H$H[AHHHM H|$pAA+H|$p#.H eH|$pHSH$HЃH$`Ã1H*HQHH$HxH7`H$Nfff.AWAVIAUAT1USHHHn(1dH%(H$1H$D$HT$\艬$$f$f$HDŽ$$Q!$H$a H1$$9Ft,L$11@ 9A u1H$Pf$^DŽ$PDŽ$TDŽ$Xf$\HDŽ$`蟂$XH$`H1(H$`H$DŽ$`$pD$\HkAHCH9HD$8IxfE1D$E1H$It$Pt$HD$@f.IH U H$HH@Ht9P }H@HuH9$9S $ED9xD9$jAH$L{(%T$HLD$^\f(T$V T$LD$\f(T$0 $D;$DH$@HrD;$XPH$H$`HcT$YD$Dk(JHуL$XElEhPA֨6H(@l$t$|$ \$(H$ HI DLEHIp D$(L"HIM D$ LœHI* D$L ͓HI D$LZxH H$ DH|$@D$0Dp D$HI~ H;D$8H\$H$NA^QH$T HGH}H$ AƆ1H$~H$P~H$}H$dH3 %(H[]A\A]A^A_H$HDŽ${&H$HDŽ${&H$HDŽ${q&H$HDŽ${X&fDD;$Ds1D;$@Ǿ{$1H${;$XH@æH$`-kH$E] B,H$ړHHH$rH$Sf$1DŽ$DŽ$H$DŽ$f$HDŽ$H$HH$H;#H$H$H$TH$ՓHH$PH"H$H$kH$UdH$gHZH$H"H$H$L$H$PH$H$0LH$H$0H}f$>u7$8w-DŽ$0DŽ$4DŽ$8HDŽ$@H$0H$ zWHwHHrD$HHD0HWHH!H1${@1H$${X@$ͣH$1{x$|$@衣H$$L$L蝻Af.L)%-AƆ1Hyb$ؖ$`HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHHGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHfA*Y1#XD$H,U HHi@BH|$`H$@LD$`Ht$pH$`H$@D$pH$`AAH$AI4$|$\$\H$@fH$@DHH$HHV[H_D$H1[HDD$H[H)$HZxHH$@H$HxH7c L$H$`DŽ$`DŽ$pL$t$1@Ǿ{bA^YfW\D$H$Et1$@Ǿ{AD$^Y $A^Y- $H$DEfW Yt1$@Ǿ{zAD$^!Y!$A^YY$H$CD-AvD$1E@Ǿ{AY^F$H$@v1$@Ǿ{袞bD$AY^A$7AY^ $H$AUAfW WYv1$@Ǿ{ԊD$AY^^$AYf(^Y$H$CT-AvD$1E@Ǿ{芝$H$H@v1$@Ǿ{SD$AY^H$AUAv1$@Ǿ{AY^$AH$DAIL$p1DŽ$hDŽ$lH$`L1DŽ$pDŽ$tDŽ$x DŽ$pDŽ$tDŽ$x f$|f$~HDŽ$H$`L`H$`H$DŽ$`DŽ$p H$`H$@H$L$`L$(H$ H$@L$H$;$pD$PH$ 1ҹD6f(AуBXD D9BX wPT9vH$ XXQf. D$AEtD$1E@Ǿ{ϚH$ $ $v1$@Ǿ{藚$H$ $HX$v1$@Ǿ{T$H$ $DXQf.D$AEt$1@Ǿ{H$ $$v1$@Ǿ{轙$H$ $XQf.$Av1$@Ǿ{c$H$ DQf.AAv1A@Ǿ{AT@IQf.\AA|$\IhI+HIPIXAHHHH)HHHI@I+0HHH9II 1 II IIp AAƆ1AAAAAH$nLnLn}H$HDŽ$HHiAƆ릐HH$mH$PHmH$mHHLmHmH$`HH$HH$7H$@H%H$HxH7tH$`裮HD$P1f(H$HDŽ$ȒHuWH JAAAAAHLlHH$lIt$HH$`H$`$1{@H$H$`H$`U1${@͕H$H$`H@$`1${@芕H$H$`H@$`1${@GH$H$`H@$`AH$`H$`eAH$`H$`>AH$`H$`HH3HHpH$@HDŽ$@;HxHdH$@GH$`HH$`[HNHHCH$`H$@)DI H9H$HIPIHD$II;HIIpHD$II;HIH<$I:H|$I)H|$IIhI+HIPI+X|$PHAHHAHAHI@I+0HH|$1E1A|$H|$HD$H<$AHXt$Avt$H|$AHX0L$AGL$IPI+XAoXIhI+HIHHHf(HAHI@I+0HHH9AAfAƆA*^^A^AA 5f(f(1f(GHH$@lH$@E`H$`H ff(f(#H|$tH|$:H<$H$HH$TH$HH$7fD$E1\$P\$'H$HwH$HbH$HDŽ${fHH$PHLfH$HeIHLH$0H fuDSHHdH%(HD$1F1fw ‰GщW1f{HC=wwHC HCwN$ՀfDHHH<$HSH{H1oHD$dH3%(H[DffH*H*Y.'|^HH@xH@pH@hH@`H@XH@PH@HH@@H@8H@0H@(H@ H@H@H@H-7Hf.HGH;GtHHt@HWAWAVAUATUSHHHLg(HLH)HHt^$ID$HC(EHPHS(H@HHCHS HHHStH[]A\A]A^A_@HOHHGIM)IMuIKt-H9vtL)HL,IM9HQL)HHHILk(IEMHCHHC KD5HCHHHC8HHC@HtkLdHI9J<LIHs(L)HL,IHCHHPH)HHHuH;L;LcMALLLI+HQIL)HHHLLH)Lf.fLG(HGHHW0H+W8LOL)HHHHHHG L)HHH9sRLH+WIHHH?w fHHH~HIHH)HÐHHHHP1@SHHdH%(HD$1Gw=v$ffH*H*Y.kxv Sw(HC HCHD$dH3%(u4H[f.HH/uH$Ht HCfUSHHHHGHGHG HG(HG0HG8HG@HGHHG@HSHHHH,HEHk(HUHkHHHSHC HEHSHHC8HC0HK@H[]HH7HH;WHHCH HCATIUSH?HtAID$HI\$(HhH9vfDH;HH9wI<$[]A\f.[]A\f.SHH8HCHHPHSHH@HHC8HHC0HS@[SHHHHdH%(HD$15u)H$tHt"HL$dH3 %(uH[fD1ty AWAVAUATUSHn^}%AE1IIIu!H[]A\A]A^A_ÐɍAA9tIAF DHRAFH4DIGAHt9Vv[HHH$dH3 %(Hu`Hĸ[]F1HfT$HD$$FD$FD$1fD$ HHRHH]H[HHZHUDAUATIUSHHHHHheƅ 3A$ ]| f.; %f.ff.v%' %f.f.v f. %s}ID$H%,#-%5%I 1f.H9Ⱥf.s&f.s f.vf.sHf.vf.%rHHXCHC CH []A\A]LMA}8ƅfHHHxGHG GH []A\A]f.CH9+tHHHxGHG GH []A\A]f.LT$ IET$ H@0H=@PG LЋT$ 44@AWAVIAUATIUSHHHdH%(HD$81HT$HXCD$(HCHD$HCHD$ ҉D$,IH@M|AUAEA]҉D$)MD$f1$$fE1LAA9twAEI6AH~M|>I}f.$zuǀ|$ftLHFLfAHpH@Ht$lIHt$A9H@ItufDHt$4LD$4 v;l$tPAEGmL:t$HHt$7HD$7x7H|HLXILL$(Lt$,HPJHL$HJHL$ HPILHxHD$8dH3%(HH[]A\A]A^A_DHH}8t7MYȉL$,҈ƃAUIuLcIH$@HED$, $LH0 I@Pt HAȋ$L$,됅fE11,$u5fDLHt$5LD$5 9tjAEIUDf.$zu|$ftILLfHHHQHAHT$LIHT$H@ITfAEIUDf.$z u |$fu@LHt$6LD$6 A&D;|$1AE71ILLfHHHiHAIH@Iltf.DSHUSH{vH1H[$ոHGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHH[f.fHFHO @`DH@Dh(f(fA(AYf(AYfE(DpH`h\$fA(p l$f(hYYDYYAY\$YD$x0f(DL$DYfE(Yt$f(T$DYf(f(AYDxYD@PAYDL$DPpAYPDX8Y\l$DYAYAYAYEYAYDHXt$px\f(D$AYAYXl$AYAYXl$AYDYf(A\D|$\f(\$AYAYAXfE(EYAYEYAX\f(\$AYY\L$fD(AYEYAYXL$\$YYAXAYYfD(D\fA(fE(D|$DYfA(Dd$AYEY\f(f(fA(YAYAYYXfA(AYAYXfA(AY\D$YYT$YY\D$YXYX\D$AY\-gYXf(fTf. $ fA(f(YAYAYEYAYAYAYDYfA(EYYAYA\YXA\\X^ DHHDPhD@PfE(`pfA(DhDYAYXDXXEYAYDYpAYA\YEYxxAYAYA\YYXX\^QDP(`hDH0fE(D@pfD(DpEYEYxDX8EYEYYpAYE\DYAYXxAYEYAXYYA\\X^YDX(xHDP0fE(pPfD(DxDYEY`Dh8EYEYYD@AYAYE\AYDHXEYAYD\f(fA(EYYAXXA\^ad$DH`D`PDh@fA(ppfE(AYDx8DY`0AYDYEYDpXD@ EYAYA\AYDXxEYA\DYAYEYDXAXA\^a Dh@``D`PfE(D@pfD(DxEYEYxDpXEYEYY0AYDYE\AYDXxAYEYDXAYDYE\D\EXD^DI(Dh DH`D`0fE(ppfA(DxDYAY`Dp8EYAYDYDAYAYA\EYDXxEYDYA\AYEYDXAXA\^a0Dh `@DxfE(D@PfD(D`0EYEYxDp8EYEYY0AYDYE\AYDXXAYEYDXAYDYE\D\EXD^DI8Dh@``D`HfE(D@hfD(Dx8EYEYx(DpXEYEYYp AYDYE\AYDXxAYEYDXAYDYE\D\EXD^DI@Dh@DH`D`HfE(phfA(DxDYAY`DpXEYAYDYDAYAYA\EYDXxEYDYA\AYEYDXAXA\^aHDh ``D`(fE(D@hfD(DxEYEYxDp8EYEYY0AYDYE\AYDXxAYEYDXAYDYE\D\EXD^DIPDh DH@D`(fE(pHfA(DxDYAY`Dp8EYAYDYDAYAYA\EYDXXEYDYA\AYEYDXAXA\^aXDh@DH`D`HfE(phfA(Dx0DYAY`(DpPEYAYDYD@ AYAYA\EYDXpEYDYA\AYEYDXAXA\^a`Dh@``D`HfE(D@hfD(DxEYEYxDpPEYEYY0AYDYE\AYDXpAYEYDXAYDYE\D\EXD^DIhDH`Dh D`(fA(phfE(AYDxDY`AYDYEYDp0DEYAYA\AYDXpEYA\DYAYEYDXAXA\^apDh `@D@HfE(D`(fD(EYDxEYxEYYEYDp00AYDYE\AYDXPAYDXEYAYDYE\D\EXD^D$DIxYYP YX@Y@`XXX]\fTf.-$p(x@h f(@8f(`0YYYYH\P5]YY\\YYPY\Xf(fTf. H$^=^]H@PYHYP8\fW^IP(`YPY` \^Qh@`(YhY`0\fW^i`@hY Yh0\^a h(`Y(Y`\fW^i(`8h Y`Yh0\^a0`8Y hYh0\fW^a8` hY Yh\^[a@YYHYP0XX\fTf.5$@ PHf(hf(YY\[fTf.$s31Ãu[[^Df.[^fWfW^)^a^QIUHSHHHDGdH%(HE1EDžDžHH@H`HPHHSLLHHϿa@/HMdH3 %(pH]fDžHHe3HH#HHHHsHLL@PDžHY^u6,@9fD1H/HPfHHHsHLPHPLHLXZ^ʺHMHHuMHHtAHPHÃ@v HPcv HNH-AUATDaUSAHE1E1f.AmDD9LljvBD҉AB D BLAȃC Aу9Cw9vABAADA9Au[]A\A]f.SH0dH%(HD$(1~d%/WD$ TD$Hd$ HD$(D$FD$HD$PWHL$8QPRLFLL$HMdH3 %(1He[A\A]A^A_]E9Dƅ[NAMD\D`DDdDhDl <@Džtp H0HtHLdHlH\H[RHpRPHhH`PLCEH01IEuODlD9t8HH4ЉIGAAHHDž@x;04FEL$EtD8EAt$Lp5AFI~gH1H04H4fDH4HHLML@$ءfL4fH0JHLDl?HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGH@$`HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGH踫HHDž@HHDž@HH H02H2H0v H@;HHfAUATAUSHHHHdH %(H$1H2HPH9H9fbv+;kJD8w^=&>\|$\YD$|$ \A$E4Ht$PH|$X赮d$XD$5=YL$PY\Qf.f(=t$f(A<$^f(,$T$XY\D$ YXYY\f(YYYYYXXXf( D$\f.f(A<$X^XEE Y $EHD$xdH3%(jH[]A\I$fDf(l$8f(d$0|$(HT$ Y$d$0HT$ |$(l$8f.vX<fDL$0d$(L$0f(d$(l$HHT$ d$@\$8T$0|$(l$H$HT$ d$@\$8T$0|$(l$0d$(|$ 螢l$0f(d$(|$ H|$`jH|$`pHH|$`ٯEu誝H|$`H软H5@AULATUSHHLHdH%(HD$1蝚HHhHL`LI HI)IL9tjI$HL9htPHCIHxH7tܺAHNPЅHt$H L9hu@I|$FLHDžBHDž@BHDžg͙HXH(HDžA HfSHfSHH@HHDžDHHxH7fu wVHbH0VHJHHpHD$dH3%(ufH[]A\A]@H 蜘f.PJHHHXs H߃觰fHt$v@\fff.SH"SH{vH1萛H[$ЦHGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHH[fff.fD(AVAUATID\USHD$@DY$L$$T$8dH%(H$1l$(d$0DX|$ t$\$fA(DX]$\Y I$D\"A^jt$|$ Y5.$$\$Y=$ $XXf(t$^f(d$0l$(Y%$Y-$ $Y$$Yd$XD$hf(^ҢfT$8DL$@YfA.$ U7fAWD$`$L$E1$^\$DL$( S^\$ f(T$0\d$f(d$^=\$ HD$xDL$(Y$fA(T$0AYYN6\D$P$XD$\$Xf(DYYDL$(YL$ X$fY\T$ f(fTQf.\D$(AE1DŽ$DŽ$1DŽ$fD$fD$L$HDŽ$HDŽ$HDŽ$HDŽ$$HDŽ$HDŽ$HDŽ$HDŽ$$9H$f$H,؍CH*謠HEu$d$l$`YD$X^^f(l$pf(Xf($\$HY-fQ%^$Yf(f(T$8Y|$Xf(l$@f(^($Xd$0Y$X Q$f(۟|$1^C4f$NH$@f(AHDŽ$HDŽ$DŽ$@DŽ$DDŽ$HHDŽ$PfD$L\$Hd$0YT$8 [$l$@YYY"Y^1$t$0XYYX #$Y#$$YX$$H$PH$KL$0f. $vr$H $H$PD$xYD$p$HY2C0 gOH$PD$<^t$C81H$H$f$H$@1DŽ$DŽ$DŽ$f$HDŽ$!p$$H$$EXYD$PYyXD$xD$x|$A$$^^\$^X7"Y?$ ON\$0^f($\d$f(d$^ \$0H$Y\$hY\$PH$@H$$@H$HDŽ${=H$fE|$`l$xH$A.0H$@#H$H$dH3%(HĐ[]A\A]A^H$HH$@H$HfDf(IH$HDŽ${HH$HDŽ${H$HDŽ${HrfAWAVAAUATLcUSHHhLJxHLJdH%(HD$X1HxHLJHHT$HGHG H Ha H|$0HT$@Ht$ HD$ HD$@vHD$0Hǃ@HǃHǃHǃHǃHHǃHǃHǃ Hǃ(Hǃ2HHHHH, HEH@HUH(HHHHEHHǃ0Hǃ@HǃHHHHHǃPHǃXH Hǃ`HǃhHǃpHǃxHǃ8@H8H0HHH,HEHX@HUHxHHHHPHEH@HǃHǃHǃHHhH`HǃHǃHpHǃHǃHǃHǃHǃNHHHHH,&HEHHUHHHHHEH1ǃǃǃHHH1fHǃ fHHHǃ7HHD$H$D+HI9wLLHH H)HבImL(IH@HHD$ItL HIĀHuHD$Ht$HHhrEDǃHǃƃtHXHD$XdH3%(CHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃƃ9Hh[]A\A]A^A_ Hǃ蜡HHTHH|$HtWHx1hH|$ :HMH|$ SHFHH;H|$ Hxw  H|$ IHLHHHpHD$0HD$0;HxH装H|$0艟H|$@>HH|$@裞H薒HH苒H|$@aH|$0w蒗H|$ItLI)Ht$LI HI)J.H9t)HHEHxH7t Ht$@H9l$uLL[H|$AHHxH7t Ht$0HHH0߱HӱHHpPHH|$0~號H|$@H\H|$0r荖]HHPHRHHsHVHHrHǃHǃזHσʖH3H HH襃H0Hǃ0Hǃ8~Hvq\HH謕HwH藕H?H賏HǃHǃH`f.ATU1SH1IH`Y$Hl$H|$dH%(H$X1HE ft$HD$D$D$ fL$HD$ #L$E1&fL$HfWI9$%&T$0CCD$`f{ fDCL$8HCT$PD$hD$@D$Xd$ptXH9tSLHH^f|$u|$w&H$XdH3 %(HH`[]A\H|$ 薄@f1H$1f$HLDŽ$DŽ$DŽ$f$HDŽ$8^H$Hf$D$6H$$IH9H1L艐H$I֐fDAUATUSHdH%(H$1AxiI@ $q$HIHt$@HT$8`IXHL$HL{$Ht$ H|$(YD$8^$Ht$ \$ H|$(YD$@L$(\$L$豔L$1d$(1)$1f(f$\$H$fWf$.fWH$T$ H$ $f$f(YYHDŽ$YDŽ$DŽ$ H$$HDŽ$$f$DŽ$ $f($DŽ$$Y$DŽ$(f$,HDŽ$0$^$(vH$0"NJf(f(jYYXQf.f(?$f.=$HfA<$f.(EnHUf(YRYXJYXQf.f$.AEu $(wNf$u $w)H$dH3%(;H[]A\A]@H$sȐH$0c룐f(T$l$k^s$T$l$f(f(F^N$fA$f.X f(茇l$L$d$pl$f(L$d$NH|$hHD$h{`H$ H H$ H-H|$`HD$`{(H|$pHD$p{bH|$XHD$X{H|$PHD$P{H|$xHD$x{׸H|$xHD$x{ĸfDAWAVIAUATUSHHHX dH%(H$H 1B1fWGH$`GHGfO H$Ht$(|LD$HD$,譗H$H H$HxH7}SAt$,H$E1E1fDc DŽ$C1f$1f$1DŽ$f$,1DŽ$f$.1fD$f$1fD$f$H$HDŽ$DŽ$DŽ$HD$@H$ DŽ$HDŽ$DŽ$ HD$8H$DŽ$$DŽ$(HDŽ$0DŽ$DŽ$DŽ$HDŽ$HD$0H$ D|$,H$HL$8H$HDHD$@HL$0~H$ H$DHHD$8HL$0TH$DHHD$07EH$`E1E1fD$lHDŽ$pfD$n$`E$dE$hؤUHuH$p Hwy111AE1L$DŽ$DŽ$DŽ$f$ f$HDŽ$HD$xDŽ$DŽ$DŽ$f$f$HDŽ$DŽ$@DŽ$DDŽ$HfD$LfD$NHDŽ$PD$(L$,-HD$E1HhHD$ @D$($`5D9$dD$sH$pAͅ  HS\ f(Y+DAB \Rf(YX_ \BYXQf.% ^Z;$dD$ $`H$`H$DŽ$H$H$p։$$DŽ$$DŽ$DŽ$HкDŽ$HDŽ$H$f$1f$6H$H$Ht$H$H$D$aH$H$ f$u7$w-DŽ$DŽ$DŽ$HDŽ$H$-H$ ;w{H$HDŽ$|pfH$HDŽ${UH$HDŽ${5H$HDŽ${HC$H$DŽ$DŽ$DŽ$H$H$DŽ$DŽ$H$@H$H$P{ DŽ$DŽ$f$1L9DŽ$f$HDŽ$xL6H$@L1;w!H$HDŽ$|HCL$ 1H$`DŽ$hL9DŽ$lDŽ$pH$DŽ$tDŽ$xDŽ$ DŽ$$DŽ$(f$,f$.HDŽ$0 LNH$`LHD$ H|$MMHHHLL$f.D$v |$,=9$mN$LH$A9nHD$2IF;B<|$wH$HDŽ$|莯HC$H$DŽ$DŽ$DŽ$H$H$DŽ$DŽ$H$`H$H$p8D$H$`H$@EH$@10l${\f(HC$HL$\@9\D$xF$7D$L$EK< kH$A9n\fW0MfA^$A|5AHI<A\@fWA^$|5AHI<A\@fW]A^$IHD$ D9l$,AHD$H1HL$@f$ H$`H$ E1DŽ$ DŽ$ H$H$`H$H$DŽ$ H$hfD$ HDŽ$ A$ 9$ OH$H$ H$@H$ bH$@$@H$H$9HH$H1$HH$@H$t/H$1b( $f.wD$(D$( aH$Hl$H$`1H$H$HH$`H$HH$hUH$@oH$bH$UH$`HH|$0>H|$84H|$@*H$HH$H dH3%(HX []A\A]A^A_ÐH$HDŽ${EH$8HDŽ$8{%H$HDŽ${H$(HDŽ$({f$H$` E1DŽ$` DŽ$d fD$l HDŽ$p $h 1f$n mH$@H$` +H$` LxH$` fDH$ E1E1DŽ$ DŽ$ DŽ$ fD$ fD$ HDŽ$ ޘH$`H$ 虛H$ LH$ Ly{HCLd$H$ $H$H$`LXHD$ j$Y^V$s$Ht$xfL^ ܆f(f(%<$<$D$xf.aHD$xf(vz(H$H$ H$@1H$@qDHH$@H$H$H$`H|$0H|$8H|$@H$HHzfDHL{H$HDŽ${էH$HDŽ$輧H$HDŽ${裧H$HDŽ${芧H$HDŽ${qH$HDŽ${XH$`HDŽ$`{?H$0HDŽ$0{&H$ HDŽ$ { H$HDŽ${H$HDŽ${ۦH|$`A%|A藥H|$`ӧH|$`H$D9$dD$`H$pH$`H$H$DŽ$H$D$$$ADŽ$HH$/H|$PA%|AԤH|$PH|$PH#afDH$HDŽ${轥H$HDŽ$褥H$ H&LH$` H oHHHH$HxH7+H$@HHH$H|$pAAգH|$pHgH?hHxzH$@VmH$ H,H/H|$pH轃H$H7/QHzfff.AWAVAUATIUSH8H^(H$ Ht$PD$8dH %(H$(1ɉ؉T$\É$ $$HDŽ$0$(1f$,1f$.诒$(H$07 H1Hm$ $$9Ft*L$011f- 9A,uH$f$1DŽ$DŽ$DŽ$f$HDŽ$$H$p H1lH$H$`DŽ$$AD$\AHD$PL`HHD$HI9Ip1D$E1HD$IxHD$@9$$ L$H$0L{(5S T$8L4A$^v \f(T$ ә T$ LD$(\f( $`L$;$dT$H$p0Ѓ8rwD$;$@HLL$`YD$(HD$ H$H|$AX$HcATAD$hD,AŨȃD$rfHx(L$8A*Z ID諒 H,HHi@BH|$`H$$D$`H$H$H$$ܓH$H$IH$ BrH$ |HI{H$LHV{H$ f{H$HxH7D$;$HL$ H$H$0@F80`,t$ l$|$(\$0qH$0{HIzLmHHzD$0HtHHzD$(HktœHHzD$ HHt ͓HHszD$H%tZxHSzH$0zLH zH;D$HIMt$ H|$LH;D$@H$ l$9H$HDŽ${.H$HDŽ${H$HDŽ${H$HDŽ${՝HHi $ 9;$$H$0;$HH$=H$@QEt$ H$H_f.SHYH H|$HT$dH%(HD$1dcHt$HGHD$HxH7u%HD$dH3%(HnuKH [AHt&PЅHt$_f.PJHLHHD$HxH7t Ht$诤H7VSHZH H|$HT$dH%(HD$1bHt$HFHD$HxH7u%HD$dH3%(H0ouKH [AHt&PЅHt$<^f.PJHKHHD$HxH7t Ht$ϣHWUSH0ZH H|$HT$dH%(HD$1aHt$HFHD$HxH7u%HD$dH3%(HpouKH [AHt&PЅHt$\]f.PJHJHHD$HxH7t Ht$HwTHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAHtG~fDGPW\fffff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H\HxufHD$dH3%(uH[f.PJHIfffff.SȄHdH%(HD$1@HH8tCHHxH7t㺠AHtIPЅHt$Hk[H8ufHD$dH3%(uH[f.PJHHfffff.ÐUSf(HHf(5*~$-*~$t$pl$x5~$-n$$5 ~$$-}$=}$$$-}$5}$D$f(T$0dH%(H$1$$$\$HHcD$P^\f(\tp\\$d$YY|$8^^X|$@Qf.YYYXt$HQf.d$Xf(o5eL$\YYl$0^f(]X%|$L$d$DYYD$@XQf.Nl$Hf(f.^l$J|$D$T$8Xd$0YL$ ^X\Y^f({\L$ D$f.f( D$L$(T$ WT$ L$(^\T$T$t$f(\T$t$fTGf.{$ {$D${$YYL$Pl$H$dH3%(^^LH[]L$JL$f(D$XL$IL$f(D$XIL$ f(f(H|$`sh\d$d$DH|$`KX0H>LD$HQH|$`Wf(L$T$l$VIL$T$l$_\$(d$ t$T$l$I\$(f(d$ t$T$l$H|$`HxVHMKDf.ATUISHf(HĀ-y$dH%(HD$x1f.d$fD$!d$w" nX^\^D$fD(f(DYYfA(XQf. $4$f.HL$4$f(f(YYXQf.f.v d$^f(l$8T$0|$(d$ PET$0l$8d$ f.|$(kY ^=\|$\YD$|$ \A$E4Ht$PH|$XEQd$XD$5YYL$PY\Qf.f(=t$f(A<$^f(,$T$XY\D$ YXYY\f(YYYYYXXXf( w$\f.f(A<$X^XEE Yw$EHD$xdH3%(jH[]A\I$fDf(l$8f(d$0|$(HT$ |AYfDf(G9IH$HDŽ${qHH$HDŽ${qH$HDŽ${|qHrS4fAWAVLcAUATUSHHhLJHLJdH%(HD$X1HHLJLJHLJHLJHHHHHT$L$ HGHG\ H(h HX{f H_W H0V H|$0HT$@Ht$ HD$ HD$@x]HD$0Hǃ@HǃHǃHǃHǃHHǃHǃHǃHǃHǃ4/HHHHH, /HEH@HUHHHHHEHHǃHǃHǃHHHHǃHǃ HHǃ(Hǃ0Hǃ8Hǃ@HǃB.HHHHH,.HEH @HUH@HHHHEHHǃHHǃXHǃ`HH0H(HǃhHǃpH8HǃxHǃHǃHǃHǃPP-HPHHHHH,(-HEHpHUHHH`HhHEHX1ǃǃǃHHHx1fHǃfHHHǃ7HHD$-H$D3HI9wLLHH H)H3InL0IH@HIH$ItLi IIŀIuH$HHpH3I9w KHpHD$0HD$0;Hxs'H+'H|$0AH|$@RhH,H|$@+@H4HH4H|$@>H|$099MItJI)KHII9t2HHxHh苿HHH8I9uLL-]H<$HtKM)H $LI HI)N1L9t)IID$HxH7t Ht$@L9$$uL-H|$o8HHxH7t Ht$0QHHHSH SHSHH>HHkUH5HrHtH|$@Hv=H|$087IH|$0h%@HH6%18H`Hq7H%HH1HǃHHǃP7H$7H H%7H7H$H41HǃHǃ7H$7w*HH6H H6HZ$H0HǃHǃ37H{6ufDATU1SH1IH`Y`$Hl$H|$dH%(H$X1HE ft$HD$D$D$ fL$HD$ C8L$E1fL$HfWI9$%7T$0CCD$`f{ fDCL$8HCT$PD$hD$@D$Xd$ptXH9tSLHHf|$u|$w&H$XdH3 %(HH`[]A\H|$ %@f1H$1f$HLDŽ$DŽ$DŽ$f$HDŽ$XH$H(f$D$6H$%$$(IHYHQL1H$I9֐fDAUATUSHdH%(H$1AxiI@ ]$HIHt$@HT$8`IXHL$HLC]$Ht$ H|$(YD$86~]$Ht$ \$ H|$(YD$@L$(\$L$5L$1d$(1I1f(f$\$H$fWf$.fWH$T$ H$ $f$f(YYHDŽ$YDŽ$DŽ$ H$$HDŽ$$f$DŽ$ $f($DŽ$$Y$DŽ$(f$,HDŽ$0$$(vH$0"NJf(f(jYYXQf.f(_[$f.=[$HfA<$f.(EnHUf(YRYXJYXQf.f$.AEu $(wNf$u $w)H$dH3%(;H[]A\A]@H$!ȐH$0!룐f(T$l$$^Z$T$l$f(f(f$^nZ$fA$f.Xf((l$L$d$(l$f(L$d$NH|$hHD$h{`H$ HH$HM-H|$`HD$`{`H|$pHD$p{`#H|$XHD$X{`H|$PHD$P{v`H|$xHD$x{c`H|$xHD$x{P`fDAWAVIAUATUSHHHX dH%(H$H 1B1fWGH$`GHGfO H$Ht$(|LD$HD$,8H$H-H$HxH7}SAt$,H$E1E1fDc DŽ$C1f$1f$1DŽ$f$,1DŽ$f$.1fD$f$1fD$f$H$HDŽ$DŽ$DŽ$HD$@H$ DŽ$HDŽ$DŽ$ HD$8H$DŽ$$DŽ$(HDŽ$0DŽ$DŽ$DŽ$HDŽ$HD$0H$ D|$,H$HL$8H$HDHD$@HL$0NH$ H$DHHD$8HL$0$H$DHHD$0EH$`E1E1fD$lHDŽ$pfD$n$`E$dE$hEUHuH$p H111AE1L$DŽ$DŽ$DŽ$f$ f$HDŽ$HD$xDŽ$DŽ$DŽ$f$f$HDŽ$DŽ$@DŽ$DDŽ$HfD$LfD$NHDŽ$PD$(L$,-HD$E1HpHD$ @D$($`5D9$dD$sH$pAͅ  HS\ f(Y+DAB \Rf(YX_ \BYXQf.% ^z;$dD$ $`H$`H$DŽ$H$H$p։$$DŽ$$DŽ$DŽ$HкDŽ$HDŽ$H$f$1f$VH$H$FHt$H$H$D$aH$H$,f$u7$w-DŽ$DŽ$DŽ$HDŽ$H$MH$@;w{H$HDŽ$|YfH$HDŽ${YH$HDŽ${YH$HDŽ${YHC$H$DŽ$DŽ$DŽ$H$H$DŽ$DŽ$H$@H$H$P{ DŽ$DŽ$f$1L9DŽ$f$HDŽ$xLVH$@L;w!H$HDŽ$|XHCL$ 1H$`DŽ$hL9DŽ$lDŽ$pH$DŽ$tDŽ$xDŽ$ DŽ$$DŽ$(f$,f$.HDŽ$0 LnH$`LCHD$ H|$MMHHHLL踡O$f.D$v |$,=9$mN$LH$A9nHD$2IF;B<|$wH$HDŽ$|WHC$H$DŽ$DŽ$DŽ$H$H$DŽ$DŽ$H$`H$H$p8D$H$`H$@EH$@1l${\f(HC$HL$\@9\D$xF$7D$L$EK< kH$A9n\fW0MfA^$A|5AHI<A\@fWA^$|5AHI<A\@fW}A^$IHD$ D9l$,AHD$H1HL$@f$ H$`H$ E1DŽ$ DŽ$ H$H$`H$H$DŽ$ H$hfD$ HDŽ$ .$ 9$ OH$H$ H$@7_H$ 肞H$@$@H$H$9H輞H$H $HH$@H$t/H$1 L$f.wD$(D$( aH$Hl$H$`1H$H$HH$`H$HH$h4kUH$@菝H$肝H$uH$`hH|$0^H|$8TH|$@JH$=HH$H dH3%(HX []A\A]A^A_ÐH$HDŽ${RH$8HDŽ$8{RH$HDŽ${RH$(HDŽ$({qRf$H$` E1DŽ$` DŽ$d fD$l HDŽ$p $h 1f$n :H$@H$` (H$` L蘞H$` fDH$ E1E1DŽ$ DŽ$ DŽ$ fD$ fD$ HDŽ$ 9H$`H$ H$` H)oHHHH$HxH7+H$@,HHH$ϖH|$pAAaKH|$pMHgH_ HH$@v:NH$ HLHO:OH|$pH$H$H7/QH!fff.AWAVAUATIUSHH^(H$T$l1dH %(H$1ɉHt$`D$@É$$f$HDŽ$$1f$3$H$H1h$$9Ft*L$11f%9A$uH$ f$,1DŽ$ DŽ$$DŽ$(f$.HDŽ$0$(H$0H1 H$0H$DŽ$0$@a.D$lAHD$`HXHHD$H9 E1D$TD$h1D$D$(H$xdH3%(Lu$HĈ[]A\A]f.Ht$OH|$H2HH|$I}HCH\$LHlH|$hHD$hDHHfff.AUATIUSIHH|$xD$dH%(H$1*HRƄ$XH|$ H-RHD$xD1HDŽ$PƄ$YH{HDŽ$`HDŽ$hHDŽ$pHDŽ$xH\$ H/H|$`HD$ X8HD$x8HD$(AHD$0HD$8HD$@HD$HHD$PHD$XHD$ Ht$(HD$(P5D$hHD$p7HxX'HD$ HL$ McD$H|$ HHQLiQHD$ LHpbHD$pHD$ X8HD$x8HD$(P5HxH7u]H|$`HD$(AHCH|$xH\$ Hl HD$xDH$dH3 %(LuHĘ[]A\A]DHt$H|$ HHbH|$(IHCH\$ LHl H|$xHD$xDAH)H@AWAVAUATIUSHHH|$ H$pdH%(H$1H$ps HxH$pރHxU;kC0L$PH$ LBH$H$pHxHV%H$HxH7 H$pރHxH$p˂HxH$pރHxHs0LC(E11HL)ML98 LHfHtHHH9uL)HT D)Ht$ H$A !H$H$pHxHVDH$HxH7 HtHNH$pރHxH$p˂HxH$pރHxH$p˂HxH$L #H$H$pHxHVH$HxH7/ H$pH$HpH|$ H$H$HxH7 H$pH$HpH$IEHHD$(HVHH$HxH7H$H$ރHxHC(p !H$ރHxmHC(pH$HxH$L WH$H$HxHV:H$HxH7Hs0LC(E1E1HL)L9LLHt HHH9uL)LL)HD$HD$L$LLHD$IGHD$f.H;\$tgH$LHhUⵃUQƅ0H@LHDŽ3oރH=HH;\$uH$L H$H$HxHVH$HxH7H$H$HpYH|$ H$H$HxH7H$H$ HpH$ H|$(HVoHH$ HxH7H$PlH$0L "H$0H$PHxHVH$0HxH7gL$`H;\$soH$`LLHHHhQⵃQƅ0H@LHDŽpA4ރHlHH$uH$@L HH$@H$PHxHV+H$@HxH7,H$PLHpH|$ LQH$PL$`HxH7H$PLHpLH$`H|$(HVH>H$`HxH7H$PHMtLH$.H$p!H$dH3%(H[]A\A]A^A_LM6A}8t9ƅDLMHA~8t9ƅ3DLIEH@0H=@Pu8H$fDLIH@0H=@Pu!H$` L@ L_HIHs0LC(GIIHs0LC(-Y&"f(^ s&"f(L$L,HfL$*\L$L$hAVL$`ATH$XPL|$@L$PL$@H$0LfH H$*$`XD$/H$H$A LLp$PH|$pA0L$@H|$`A0L$0H|$PA0L$ H|$@A0L$H|$0A0LHt$0H$pHxHVރHzHt$@HHVރH\Ht$PHHVkރH>Ht$`HHVMރH Ht$pHHV/ރHH$HHVHD$0HxH7HD$@HxH7HD$PHxH7HD$`HxH7HD$pHxH7H$HxH7H$HxH7bH$APL$`L,L$`LL$`LL$`L-L$`LLaL$`LLL$`LL$`LL$`Lj7L$`LU1HD$L$`L+:H$H|$0Ƃ8H|$0> ̂H1H|$0fI 4H|$0ƂH|$0 ̂HH|$0fI H|$0ƂH|$0 ̂HH|$0gRfIH|$Hxw UIELHxw :DI H|$ Hxw I0H|$(Hxw Ht$0Ht$0Ht$0Ht$0 Ht$0Ht$0\fff.SÂH@H|$HT$dH%(HD$81GHt$H|$ 踷HD$HxH7uH|$ HD$ PHt$)H|$ HHD$ PHiHHD$HxH7tHt$ !HYXYH,HiHHw H[xHfDfə%)H*Y !XYH,HiHHw H[xHÐfSFHH fH*Y 9!XYH,HiHHw H[xH[ÐAWAV̂AUATIUSH H$H|$H|$0dH%(H$ 1mH$H$H$蛷HP fD@APfDf Hlf=wyf='`*f,D)Ή))эRADgfffiЉfimfH|$ i{i> )ӂD$ H$c?H$Hx蔺H$H|$@HpH$HT$H$̂DŽ$HDŽ$HDŽ$H$H$H$H$HxH$H$ɱH$HT$H$̂uH$H$]HxWH$H$rH$HT$H$ ̂H$ H$HxH$ H$H$ .HT$H$0 ͂H$0H$ ΂HxH$0H$İH$0HT$H$@%͂pH$@H$v΂HxRH$@H$mH$@HT$H$P=͂H$PH$͂HxH$PH$H$P)HT$H$`W͂H$`H$3тHxH$`H$迯H$`HT$H$po͂kH$pH$r{HxMH$pH$hH$p{HT$H$͂H$H${HxH$H$H$$HT$H$͂H$H$HxH$H$躮H$H$H$H$諲HHʼHt$PH$@HD$PH$p$HH$pHxgH$H$˂DŽ$HDŽ$HDŽ$H$H$bH$H$ЭH$H$4VbH$H$藭H$H$\ZbH$H$^H$qH$CJbH$H$%H$8H$s|NbH$H$H$H$F͂aH$H$賬H$H$?̂\̂aH$H$zH$H$}TfaH$H$AH$TH$ h͂-aH$ H$H$ H$0 ͂`H$0H$ϫH$0H$@Aт;aH$@H$薫H$@H$PkтaH$PH$]H$PpH$`Yx_`H$`H$$H$`7H$p]f`H$pH$H$pH$>͂W`H$H$貪H$H$͂`H$H$yH$H$us|_H$H$@H$SH$s|͂_H$H$H$H$Yx͂s_H$H$ΩH$H$=͂:_H$H$蕩H$H$N͂_H$H$\H$oH$4͂^H$H$#H$6H$'͂^H$H$H$H$͂V^H$H$豨H$H$pH|$pHp.Ht$pH$H|$`HoHD$pHxH7[H$$D耾 H$HxTH$H$Hp諵$TH$PX/H$PHx H$PH$HpcL$M=MeH$Mt$؅x?LMMtH$LD$H$H$HL$tfDH$˂Hx H$˂HxH$0HH'H3H?HXHnH$H$oH$]YHPeHCqHH$`HxH7u}H$H$pHD$@HxH7t H$H$եHD$0HxH7t Ht$H!HH$HxH7tH$qHH$HxH7t H$0rH$HxH7t H$0PH$HxH7t H$0.H$HxH7t H$0 H$HxH7t H$0H$PͤH$HxH7t H$0H$螤HD$`HxH7uDH$H$WoH$pjOHHHD$pHxH7tH$0KHH$HaH$HOH$H=lH$H(WH$HBH$H-H$HH$pHH$`HH$PHH$@HH$0HH$ HkH$HVH$HApH$H,[HHHHH$HHH$HxH7H$HfHH$HxH7JH$PH0HH$PHxH7H$@HUHH$@HxH7VH$0HH$H 9H$H$H$Hx1ҿxDο~11p11HT$H$ǂH$H$ 5H$ ӥH]HH$0HxH7t H$H$ HxH79H$0'mH$ H足H$HxH7H$HH@HHH$0HxH7'H$ Hh HH$ HxH7iH$H2aH$HLH$H7H$H"H$H HHHT$H$ǂbH$0H$HzHbH$H'HHHOH$HxH7H$@HH$H/HH$HxH70H$pHHHHHH$pHxH7jH$`HPfDAWAVAUATUSHHxdH%(H$h1dHHHD$PH HHD$H$@H$%͂LP uH$H$HH H$HHD$ QH$HxH7H$HxH7H$@H$=͂LP H$H$H&H H$HHD$(ʧH$HxH7H$HxH7H|$HLP ?LH/Ht$H|$Ht$ L Ht$(LH$@H$ӂ H$LM ΂HЛH$HxH7H$@H$~轴H$L ӂH耛H$HxH7H$@H$͂mH$LH0H$HxH7H$@H$8{H$L]HH$HxH7H$@H$ ͂ͳH$ L {H萚H$ HxH7H$@H$0͂}H$0LH@H$0HxH7H$@H$@͂-H H$@Hf{HH$@HxH7HH$@H$Pֲ͂H$PH͂H虙H$PHxH7H$@H$`͂膲H$`H ΂HIH$`HxH7H$@H$p΂6H$pHv΂HH$pHxH7H$@H$΂H$H&&΂H詘H$HxH7hH$@H$)΂薱H$H9΂HYH$HxH70H$@H$<΂FH$HF΂H H$HxH7H$@H$I΂H$H6Z΂H蹗H$HxH7H$@H$]΂覰H$H{HiH$HxH7H$@H$i΂VH$Hu΂HH$HxH7PH$@H$x΂H$HF΂HɖH$HxH7H$@H$΂趯H$H΂HyH$HxH7H$@H$΂fH$H΂H)H$HxH7H$@H$΂H$HV΂HٕH$HxH7pH$@H$ ΂ƮH$ H΂H艕H$ HxH78H$@H$0΂vH$0H΂H9H$0HxH7H$@H$@΂&H$@Hf΂HH$@HxH7H$@H$P΂֭H$PH΂H虔H$PHxH7H$@H$`΂膭H$`H{HIH$`HxH7XH$@H$p΂6H$pHv{HH$pHxH7 H$@H$ςH$H&͂H詓H$HxH7H$@H$ς薬H$HF΂HYH$HxH7H$@H$ςFH$H΂H H$HxH7xH$@H$,ςH$H69ςH蹒H$HxH7@H$@H$<ς覫H$Hq{HiH$HxH7H$@H$IςVH$H{HH$HxH7H$@H$VςH$HFdςHɑH$HxH7H$@H$gς趪H$HvςHyH$HxH7`H$@H$yςfH$H΂H)H$HxH7(H$@H$ςH$HV΂HِH$HxH7H$@H$ ςƩH$ H{H艐H$ HxH78 H$@H$0ςvH$0HςH9H$0HxH7 H$@H$@ς&H$@HfςHH$@HxH7 H$@H$Pς֨H$PHςH虏H$PHxH7 H$@H$`ς膨H$`HςHIH$`HxH7X H$@H$pς6H$pHvςHH$pHxH7 H$@H$ςH$H&ЂH詎H$HxH7 H$@H$Ђ薧H$HЂHYH$HxH7 H$@H$ЂFH$H'ЂH H$HxH7x H$@H$ЂH$H6*ЂH蹍H$HxH7@ H$@H$-Ђ覦H$H<ЂHiH$HxH7 H$@H$?ЂVH$HOЂHH$HxH7 H$@H$RЂH$HF{HɌH$HxH7 H$@H$]Ђ趥H$H΂HyH$HxH7` H$@H$gЂfH$H΂H)H$HxH7( H$@H$qЂH$HV{HًH$HxH7 H$@H$ |ЂƤH$ HЂH艋H$ HxH7p H$@H$0ЂvH$0HЂH9H$0HxH78 H$@H$@Ђ&H$@Hf΂HH$@HxH7 H$@H$PЂ֣H$PHςH虊H$PHxH7 H$@H$`Ђ膣H$`HςHIH$`HxH7 H$@H$pЂ6H$pHvςHH$pHxH7X H$@H$ЂH$H&ЂH詉H$HxH7 H$@H$Ђ薢H$HЂHYH$HxH7 H$@H$ЂFH$H<ЂH H$HxH7 H$@H$тL H$L/{H貈H$HxH7q H$@H$т蟡H$Lv΂HbH$HxH79 H$@H$тOH$L[΂HH$HxH7 H$@H$%тH$L?H‡H$HxH7H$@H$5т诠H$L{HrH$HxH7H$@H$Gт_H$L͂H"H$HxH7YH$@H$XтH$LOv΂H҆H$HxH7!H$@H$ lт迟H$ L[΂H肆H$ HxH7H$@H$0wтoH$0LH2H$0HxH7H$0H$@тH$@H_VHH$@HxH7yH=XтuTH ǃ т虅H$hdH3%(ǃ  Hx[]A\A]A^A_fDH=X)̂蟜H=pX膜H=WXтm]H=>XтTlH=%XZ;+H$PƂH-XPH$PтHHuHHVȂHɎH$P蜙@H ǃ )̂]H$P胨~fDH$PkfDH$PSfDH$P;&fDH$P#^fDH$P fDH$PfDH$PۧfDH$Pç>fDH$P諧vfDH$P蓧fDH$P{fDH$PcfDH$PKVfDH$P3fDH$PfDH$PfDH$P/fDH$PӦgfDH$P軦fDH$P裦fDH$P苦fDH$PsNfDH$P[fDH$PCfDH$P+fDH$P.fDH$PffDH$PfDH$P˥fDH$P賥fDH$P蛥FfDH$P胥fDH$PkfDH$PSfDH$P;fDH$P#]fDH$P ^fDH$PfDH$Pۤ/fDH$PägfDH$P諤fDH$P蓤fDH$P{#fDH$Pc!fDH$PKFfDH$P3~fDH$PfDH$PfDH$P&fDH$Pӣ^fDH$P軣fDH$P裣fDH$P苣fDH$Ps>fDH$P[}fDH$PCfDH$P+fDH$P%fDH$P]fDH$PfDH$PˢfDH$P賢fDH$P蛢=fDH$P胢ufDH$PkfDH$PSfDH$P;&fDH$P#^fDH$P fDH$PfDH$PۡfDH$Pá>fDH$P諡vfDH$P蓡fDH$P{fDH$PcfDH$PKVfDH$P3fDH$PfDH$PfDH ǃ т|H ǃ тu|kHH$ HxH7t H$P膠H HxH7t Ht$?hH HxH7t Ht$?JH HxH7t Ht$?,H HxH7t Ht$?H HxH7t Ht$?H HxH7t Ht$?ҟH H DH H |DH` LmDLLH|$H|$ٍHэHɇHH$@HxH7H$P@HH$0HxH7H$PHH$HxH7kH$PYHH$pHxH7=H$P趞+HH$`HxH7H$P舞HH$PHxH7H$PZHH$HxH7H$P,HH$HxH7H$PsHxH\H^HHD$@HxH7t H$P违HD$PHxH7t H$P蠝LP HHHHH$HxH7t H$PZH$HxH7t H$P8LP HHHD$`HxH7t H$PHD$pHxH7t H$PLP THHH$ HxH73H$P謜!HH$HxH7H$P~HH$@HxH7H$PPHH$HxH7H$P"HH$HxH7{H$PiHH$HxH7MH$Pƛ;HH$HxH7H$P蘛 HH$HxH7H$PjHH$HxH7H$PH$P跙,HH$HxH7H$P艙HH$HxH7H$P[HH$HxH7H$P-HH$HxH7H$PtHH$HxH7t H$P՘H$HxH7t H$P賘LP !HHH$HxH7t H$P}H$HxH7t H$P[LP HHH$HxH7H$P!HH$HxH7zH$PhHH$pHxH7LH$Pŗ:HH$`HxH7H$P藗 HH$PHxH7H$PiHH$@HxH7H$P;HH$0HxH7H$P HH$ HxH7fH$PߖTHH$HxH78H$P豖&HH$0HxH7 H$P胖HH$HxH7H$PUHH$HxH7H$P'HH$HxH7H$PnHH$HxH7RH$P˕@HH$ HxH7$H$P蝕HH$HxH7H$PoHH$@HxH7H$PAHH$0HxH7H$PHH$`HxH7lH$PZHH$PHxH7>H$P跔,HH$HxH7H$P艔HH$pHxH7H$P[HH$HxH7H$P-HH$HxH7H$PtHH$HxH7XH$PѓFHH$HxH7*H$P裓HH$pHxH7H$PuHH$`HxH7H$PGHH$PHxH7H$PHH$@HxH7rH$P`HH$0HxH7DH$P轒2HH$ HxH7H$P菒HH$HxH7H$PaHH$HxH7H$P3HH$HxH7H$PzHH$HxH7^H$PבLHH$HxH70H$P詑HH$HxH7H$P{HH$HxH7H$PMHH$HxH7H$PHH$HxH7xH$Pffff.AWAVAUATUSHHHdH%(H$x1HFH$HL$LD$ HDŽ$`HHDŽ$hHDŽ$pHD$@7IHD$7l11LHD$(fzL$`H$hE1L[H$`L$hHD$P7HD$DHH@D CLMA|$8AT$CHt$PHpE=HD$@H|$@11HPuH|$P1Ҿтp}H~H|$P;тM}H[L$@H|$`тL9Ht$`H|$@:|HD$`HxH7$H|$pL =vHt$pH|$@{HD$pHxH7H$H$AA H H$H$A HH$H|$@{H$HxH7H$HxH7H$H$AA HHPC H$H$A H0H$H|$@zH$HxH7UH$HxH7$H$H$AA HHPH$H$A HH$H|$@nzH$L$PHxH7 H$HxH7H$AA LHHDŽ$PH$H$A HH$H|$@yH$HxH7v H$HxH7M L$0H$ LsH$H|$@iyH$HxH7 H$Lт+H$H$ A H H$ H|$@yH$ HxH7 H$HxH7 H|$Ht$@腙HH@D H;jH 0HHT|H|$11uH$`H$hE1E1H)H~E@J4*H|$HV~|H}H$`H$hAIH)HD9HiHH{Ht$(H|$1u8Ȃ@:pH|HD$PHxH7HD$@HxH7H|$ٚH$xdH3%(HĈ[]A\A]A^A_H$hH;$pJ HtHt$P{cH$hHH$h:fLHmI$ H@0H=@PL L:DH|$P1Ҿ҂wH`H|$P;тwH=L$@H$0҂L~H$0H|$@vH$0HxH7 HT$H$@AAHgH$@H$PA HT H$PH|$@"vH$PHxH7 H$@HxH7 HD$H$`AAHHPH$`H$pA H H$pH|$@uH$pHxH7X H$`HxH7' HD$H$Hp9hH$H$A HF H$H|$@uH$HxH7 H$HxH7z HD$H$Hp gH$H$A H H$H|$@tH$HxH7H$HxH7H$L {nH$H|$@9tH$HxH7pH$Lт{H$H$A HH$H|$@sH$HxH7H$HxH7L$PL褆H|$P1Ҿ҂RtHhH|$P;тlHJL$@H$҂L{H$H|$@sH$HxH7 HD$ H$AAHHxH$H$A HH$H|$@rH$HxH7H$HxH7SHD$ H$ AAHHQH$ H$0A H>H$0H|$@ rH$0HxH7H$ HxH7HD$ H$@HdH$@H$PA HH$PH|$@qH$PHxH7H$@HxH7HD$ H$`H1dH$`H$pA H>H$pH|$@ qH$pHxH7oH$`HxH7AH$L jH$H|$@pH$HxH7H$LтpxH$H$A H=H$H|$@KpH$HxH7oH$HxH7EL$PL0@H|$P;тhHHD$H$HpbH$H$A HH$H|$@oH$HxH7IH$HxH7HD$H$Hp8?bH$H$A HLH$H|$@oH$HxH7H$HxH7}HD$H$Hp(aH$H$A HH$H|$@nH$HxH7H$HxH7HD$H$Hp0EaH$H$ A HRH$ H|$@ nH$ HxH7GH$HxH7L$@L$0 $LLgH|$@LmH$0HxH7&H$ тL~uL$PA LHLMH|$@L`mH$PHxH7H$@HxH7ZL6MH|$Ht$PAfDL$PLL$PL^L$PLL^L$PLL$PLL$PLxLhLXLH}L8L(?LH|$P;тdHHt$PH|$蓌fDL$PL~L$PL~{L$PL~L$PL~L$PLh~qL$PLP~@L$PL8~L$PL ~L$PL~L$PL}L$PL}FL$PL}|L$PL}L$PL}L$PL}|L$PLo}L$PLZ}L$PLE}VL$PL0}(L$PL}L$PL}jL$PL|藊H$P|H$P|H$P|1H$P|L|6H$P|H$Pn|qH$P\|FH$PJ|H$P8|H$P&|^H$P|6z[HHD$PHxH7t Ht$?{HD$@HxH7t Ht$P{H|$HdHH$ HxH7t H$P{H$HxH7xH$Pr{fHH$HxH7t H$PH{H$HxH7(HHH$HxH7HH$HxH7jHH$HxH7IHH$HxH7t H$PzH$HxH7HH$PHxH7tLezH$@HxH7ELDz8HHHH$HxH7H$P zHH$HxH7gXHH$HxH7LyHH$HxH7t H$PyH$HxH7sHHH$HxH7MHH$pHxH7t H$P*yH$`HxH7 HHH$PHxH7t H$PxH$@HxH7EHHH$0HxH7HHH$HxH7H$PmxHH$0HxH7t H$PCxH$ HxH7#HHH$HxH7H$PwHH$0HxH7RHH$ HxH7tLwH$HxH7HHH$HxH7kHH$HxH7t H$PHwH$HxH7(HHH$HxH7t H$PwH$HxH7cHHHD$pHxH7@HH$HxH7t H$PvH$HxH7zHHH$HxH7THH$HxH7t H$P1vH$HxH7HHH$HxH7t H$PuH$HxH7LHHH$pHxH7t H$PuH$`HxH7HHH$PHxH7t H$PYuH$@HxH79HHH$`HD$6HHD$`HxH7HH$HxH7 Ltf.AWL~AVAUATIUSIH11HLdH%(H$1HDŽ$HDŽ$HDŽ$HD$ 7v^H$H$E1HkH$H$HD$07HD$DHEH@D {HH{8SCHt$0H)TE`HD$ H|$ 11HPYH|$0; ҂aHH$H;$HtHt$0LH$HH$IuH|$@?SHT$@H|$PA LRHt$PH|$ #`HD$PHxH7HD$@HxH7WIu8H|$`RHT$`H|$pA LHt$pH|$ _HD$pHxH7HD$`HxH7Iu(H$pRH$H$A L}H$H|$ K_H$HxH7RH$HxH7!Iu0H$QH$H$A LH$H|$ ^H$HxH7H$HxH7yH$H$ $XH$H|$ p^H$HxH7H$H$т-fH$H$A LH$H|$ ^H$HxH7H$HxH7fH$H;$@HtHt$ IH$HEHH$H@D HOI 0HL+a11LZH$H$E11H)H~CfDJ4*LHVXaHaH$H$IH)H9HNLH`1LT^HD$0HxH7RHD$ HxH7NH|$H$dH3%(%H[]A\A]A^A_DH$H;$HHt$0gHfHHRH H@0H=@P: H(fDH|$0 ;т\HHt$0H|$t|A|fDH$nfDH$nfDH$nifDH$snfDH$[nWfDH$CnfDH$+nufDH$nDfDH$mfDH$mfDH$m%fDH|$Ht$0Qy@H|$Ht$09y'@H|$Ht$ !yTH$omH$]mLHHD$0HxH7t Ht$4mHD$ HxH7t Ht$0mH|$.}HfUHH$HxH7t H$lH$HxH7xH$lfHHH$HxH7EH$l3HH$HxH7t H$^lH$HxH7HHH$HxH7t H$lH$HxH7fHHHD$pHxH7t H$kHD$`HxH7n$HHD$@HxH7PHHHD$PHxH7tH$tk-JHH$HD$$AWAVAUATUSHHHHt$ HD$(HL$HD$@7dH%(H$81xH|$PHXHt$PH|$`]Ht$PH|$p]Ht$PH$ ]Ht$PH$ ] H$HxH7H$HxH7HD$pHxH7HD$`HxH7HD$PHxH7HD$@HxH7H$8dH3%(HH[]A\A]A^A_fDHD$@Lt$@11LHPOL$ Ht$PL\L$H$ LPH$LEVH$HxH7{LL!VH$L 7PH$LUH$HxH7H|$`˂1UH$L OH$LUH$HxH75Ht$`H$XH$LQUH$HxH7H$L NOH$LUH$HxH7H|$p˂1TH$L NH$LTH$HxH7Ht$pH$(WH$LhTH$HxH7H$L eNH$L%TH$HxH7H$LSH$ L NH$ LSH$ HxH7H$LSH$0L MH$0LSH$0HxH7L ^#D$(sTf(D$ɞ!f.vCH$@L QMH$@LSH$@HxH7D$H$PlH$PLRH$PHxH7H$`L LH$`LRH$`HxH70H$pL0LH$pLJRH$pHxH7HL$DŽ$HAHHL$H9t#f.Hlj$>TH;D$uH$L[H$H$A HH$LQH$HxH7H$HxH7HD$L$HhH;l$>LP f.E FH$L0NKH$LQH$HxH7E H$0H$$0ZH$LPH$HxH7uqHRH;D$HH$LӂvXH$L趖HLkPH$HxH7H$0UcLHcfDH$03c)fDHD$@PH$L H+p%JH$LOH$HxH74LHQdHt$@HD$ HVHHHD$SHjTHD$L`L;d$H$0fA$H$4iH$H$A HQH$H!OH$HxH7H$HxH7H$H$ IH$HNH$HxH7AD$hHeH$ AfH$ H$0A HH$0HSNH$0HxH7JH$ HxH7AD$xH$@^gH$@H$PA HH$PHMH$PHxH7H$@HxH7[H$H$` GH$`HlMH$`HxH7H$pDdH$pH$A H@H$HMH$HxH7H$pHxH7nAD$pH$fH$H$A HH$HLH$HxH7H$HxH7H$H$ qFH$H1LH$HxH7xH$DcH$H$A HH$HKH$HxH7 H$HxH7AD$hH$jeH$H$A HH$HWKH$HxH7^H$HxH7eH$0HVHOwUL$PH$H)ֺ LELHJH$HxH7H$0HVH|$NH|OH$0HxH7LLH;D$IH6R11HHDŽ$07^CHD$@11LHPICH$H$ ZDH$LJH$HxH7L ]@L\PL\L\ L\L\L\{L\#L\Lx\Lh\\LX\LH\L8\oL(\L\L\L[L[,L[H$ HxH7 /L$Ht$P1LNL$ H$>LBLt$@H$L=HH$HxH7bH$ L :BH$ LGH$ HxH7 LLGH$0L AH$0LGH$0HxH7 Ht$`LGH$@L AH$@L\GH$@HxH7B Ht$pL6GH$PL LAH$PL GH$PHxH7 H$LFH$`L @H$`LFH$`HxH7u H$LFH$pL @H$pLfFH$pHxH7  E#D$(ZGf(D$!f.vCH$L08@H$LEH$HxH7 D$H$_H$LEH$HxH7I H$L ?H$LtEH$HxH7 H$L0q?H$L1EH$HxH7 HL$DŽ$HALyL9tfDHlj$.GL9uH$H$NH$H$A HH$LDH$HxH7 H$HxH7 HD$@PH$L H+pl>H$L,DH$HxH7U LHXHt$@Lt$ HVILHHHHD$HhL9WE KH$L0=H$H$CH$HxH7E H$0H$$0yMH$H$DCH$HxH7KH$ \H$ H$0A HH$0H$BH$0HxH7H$ HxH7H$@L H$0HxH7H$HVLBH,CH$HxH7H@I9HHQH$11HDŽ$7 7H$LӂEHP H$"H$H=H$HxH7H$0PH$0PH?I9HPH$HxH7H$0bPDH$0KPafDH$03P0fDH$0PfDH$0PfDH$0OfDH$0OfDH$0OfDH$0OfDH$0OfDH$0sOYfDH$0[OfDH$0COfDH$0+O@fDH$0OfDH$0N&fDLNH$0N_fDH$0NfDLNH$0NfDH$0{NfDH$0cNfDH$0KNfDH$03NfDH$0NfDH$0NfDHt$`L:fDHt$pL:oH$0HMH$0HM5H$0HMH$0HMRH$0HjMH$0HUMH$0H@MH$0H+MvH$0HMH$0HMH$0HLDH$0HLH$0HLH$0HLH$0HLH$0HLH$0HnLH$0HYLH$0HDLH$0H/LcH$0HLH$0HL7H$0HKH$0HKH$0HKH$0HKpH$0HKH$0HK#H$0HrKeH$0H]KH$0HHKH$0H3K?)HH$HxH7H$ HxH7t H$0JH$HxH7t Ht$?JH$HxH7t Ht$?JHD$pHxH7t Ht$?JHD$`HxH7t Ht$?uJHD$PHxH7t Ht$?YJHD$@HxH7t Ht$?=JH2HH$HxH7t H$0JH$HxH7H$0IHH$@HxH7HH$pHxH7HH$`HxH7HH$HxH7uKH$HxH7oH$MI]HHH$HxH7tH$0IHHHHH%H%H$H|$ +H$HxH7H$H$ %H$H|$ i+H$HxH7xH$H|$ >+H$H$ O%H$H|$ +H$HxH7.Ht$@H|$ *H$H$ $H$H|$ *H$HxH7 Ht$PH|$ *H$H$ $H$H|$ [*H$HxH7 Ht$`H|$ 3*H$H$ D$H$H|$ *H$HxH7Y Ht$pH|$ )H$H$ #H$H|$ )H$HxH7  #D$*f(D$t!f.vJH$H$0v#H$H|$ 4)H$HxH75 D$H$BH$H|$ (H$HxH7 H$H$  "H$ H|$ (H$ HxH7 H$H$00"H$0H|$ ](H$0HxH7 IFMfD$L9tf.Hlj\$a*L9uHt$H$@2H$@H$PA HH$PH|$ 'H$PHxH7 H$@HxH7 HD$ PH$H$` H+p!H$`H|$ Y'H$`HxH7 Ht$ H;Ht$ ILHVN+H+I^L9|@C PH$H$0 !H$H$`&H$HxH7C H$H$$0H$H$`w&H$HxH7H$$@H$H$A HAH$H$` &H$HxH7SH$HxH7"H$H$ H$H$`%H$HxH7ChHH$H$A HH$H$`$H$HxH7<H$HxH7 H$H$ H$H$`G$H$HxH7FH$ D;H$ H$0A HH$0H$`#H$0HxH7H$ HxH7CpH$@}=H$@H$PA H蚹H$PH$`e#H$PHxH7H$@HxH7H$H$` DH$`H$`"H$`HxH7VH$pDf:H$pH$A HӸH$H$`"H$HxH7H$pHxH7ChH$5H$/vH$/H$/H$/NH$/H$/HH$`HxH7t H$PW/H$HxH7t Ht$8/HD$pHxH7t Ht$/HD$`HxH7t Ht$/HD$PHxH7t Ht$.HD$@HxH7t Ht$.HD$0HxH7t Ht$.HD$ HxH7t Ht$.HHH$HxH7H$_.HH$HxH7HH$HxH7HHH$HxH7HH$HxH7kHH$HxH7dJHH$HxH7C)HH$HxH7"/ HHHH3HGH[HH$HxH7H$-HH$HxH7t H$,H$pHxH7ZHHH$`HxH77HH$PHxH7t H$,H$@HxH7HHHH$0HxH7t H$A,H$ HxH7HHH$HxH7HH$HxH7t H$+H$HxH7FHHH$HxH7t H$+H$HxH7OHHH$HxH7)HH$HxH7t H$'+H$HxH7HHH$ HxH7wHH$HxH7pVHH$HxH7-H$*HH$HxH7H$H|$ cH$HxH7H$H$ [H$H|$ H$HxH7zH$H|$ H$H$ H$H|$ H$HxH70Ht$@H|$ H$H$ H$H|$ dH$HxH7Ht$PH|$ <H$H$ MH$H|$ H$HxH7Ht$`H|$ H$H$  H$H|$ H$HxH7[Ht$pH|$ H$H$  H$H|$ YH$HxH7 8#D$Mf(D$^!f.vJH$H$0& H$H|$ H$HxH7% D$H$,H$H|$ H$HxH7 H$H$   H$ H|$ WH$ HxH7 H$H$00O H$0H|$ H$0HxH7 IFMfD$L9tf.Hlj\$L9uHt$H$@H$@H$PA H觧H$PH|$ uH$PHxH7 H$@HxH7 HD$ PH$H$` H+pK H$`H|$ H$`HxH7 Ht$ Hs%Ht$ ILHVHI^HDŽ$P7L9 C PH$H$0 H$H$`dH$HxH7 C H$H$$LH$H$`H$HxH7H$)H$H$A HH$H$`H$HxH7sH$HxH7BH$H$  H$H$`FH$HxH7ChH&H$A&H$H$A H H$H$`H$HxH7UH$HxH7$CxH$^2e(H$H$A H肤H$H$`MH$HxH7H$HxH7kH$H$  ,H$ H$` H$ HxH7H$0DN%H$0H$@A H軣H$@H$` H$@HxH7H$0HxH7\CpH$P'H$PH$`A H:H$`H$` H$`HxH7H$PHxH7H$H$p H$pH$` H$pHxH7FH$D$H$H$A HsH$H$`> H$HxH7H$HxH7ChH$%H$H$A HH$H$` H$HxH7H$HxH7H$`HVHOw\PH$H$H)ֺ H$H$`B H$HxH7AH$`HVLEHH$`HxH7H< L9HHQH$`11HDŽ$`7H$PDC(H$P1HPH$P ΂uWH$H$pӂWHP H$pPH$`HC H$pHxH7ZH$P8pH$H$8{HP H$"PH$`H H$HxH7H$H$fDH$fDH$sRfDH$[!fDH$CfDH$+CfDH$fDH$fDH$afDH$fDH$fDH$RfDH$fDH$kfDH$SfDH$;fDH$#{fDH$ fDH$H+ L9HH$PHH7H$HxH7HD$pHxH7|HD$`HxH7xHD$PHxH7tHD$@HxH7pHD$0HxH7lHD$ HxH7hH$dH3%(H[]A\A]A^H$fDH$fDH$[H$H$H$2H$sjH$aH$OH$=8H$+gH$nH$rH$vH$zH$~H$H$H$H$ HxH7IW(H$0AA HH$0H$@A HH$@H|$@H$@HxH7H$0HxH7IW0H$PAA H脔H$PH$`A HqH$`H|$@?H$`HxH7H$PHxH7IW8H$pAA HH$pH$A HH$H|$@H$HxH7+H$pHxH7'IW@H$AA HlH$H$A HYH$H|$@'H$HxH7H$HxH7H$L H$H|$@H$HxH70H$L)҂H$H$A HXH$H|$@fH$HxH7y H$HxH7H$H4H|$P;2҂HL$H$ LH$H|$@H$HxH7HD$H$AAHHP蚑H$H$A H臂H$H|$@UH$HxH7H$HxH7HD$H$AAHHP H$H$ A HH$ H|$@H$ HxH7H$HxH7HD$H$0HplH$0H$@A HyH$@H|$@GH$@HxH$H7HD$ <H$0HxH7 HD$Ht$ H$P@ D$,$H$PH$`A HۀH$`H|$@H$`HxH7 H$PHxH7 H$pL H$pH|$@KH$pHxH7n H$L<҂ H$H$A H~H$H|$@H$HxH7 H$HxH7-Ht$ H|$P1Ҿ[҂?HL$H$[҂LXH$H|$@VH$HxH7 HD$H$AAHHP#H$H$A HH$H|$@H$HxH7 H$HxH7 HD$H$AAHHP蒍H$H$A H~H$H|$@MH$HxH7 H$HxH7 HD$H$HpH$H$A H~H$H|$@H$HxH$H7HD$  H$HxH7 HD$Ht$ H$@ D$,$H$H$A Hd}H$H|$@2H$HxH7] H$HxH7 H$ L H$ H|$@H$ HxH7H$0LтH$0H$@A Hc{H$@H|$@qH$@HxH7vH$0HxH7Ht$ EH$H0yH$HGH$HH$HH$HH$HH$HH$H&H$HH$HsH$HH$HSH$HwH$HbqH|$P;тHHD$H$Hp( H$H$A HzH$H|$@H$HxH7&H$HxH77L$H$ 6LH$H|$@~H$HxH7H$Lт@H$H$A H xH$H|$@H$HxH76H$HxH7`@H|$P;т|HBHD$H$PHp(H$PH$`A HxH$`H|$@wH$`HxH7H$PHxH7HD$H$pHp8H$pH$A H,xH$H|$@H$HxH7H$pHxH7HD$H$Hp0H$H$A HwH$H|$@}H$HxH7H$HxH7HD$H$Hp4UH$H$A H2wH$H|$@H$HxH7 H$HxH7L$H$ $LH$H|$@H$HxH7H$тL\H$LA HHHD$ I#uH|$@L6H$HxH7 H$HxH7^H$_H$7H$HrH$HH$HH$HH$HH$HkAH$HVEH$HAH$H,H$HH$HH$H7H$H;H$HH$HH$H^H$HbH$HoH$HZH$HE"H$H0&H$HH$HHt$ 'Ht$ {Ht$ Ht$ L1L H|$P;т7HHt$PH|$ . AHt$ cFH$HNH$H9H$H$[H$HhH$H:HSHHD$PHxH7t Ht$?HD$@HxH7t Ht$PH|$HfDH|$P;тHHt$PH|$LVAH$HAH$H,H$HH$HAH$HHt$ 8HLjH$HH$HH$H{!H$_H$MH$;^H$)3H$H$oH$H$H$HH$`H$5HH$HxH7t H$~H$HxH7H$XsHHH$HxH7t H$)H$pHxH70H$HH$HxH7t H$H$HxH7H$HH$HxH7t H$H$HxH7H$c~HHH$HxH7t H$4H$pHxH7;H$)HHH$`HxH7t H$H$PHxH7H$HHH$HxH7H$HH$HxH7H$XsHH$ HxH7WHt$ -HHH$pHxH7,Ht$ HH$HxH7t H$H$HxH7H$HH$HxH7H$HH$HxH7t H$ZH$HxH7aH$4OHHH$HxH7tL H$HxH7LHHHH$HxH7H$HH$HxH7t H$H$HxH7H$^yHHH$@HxH7t Ht$ 2H$0HxH79Ht$ *HHH$HxH7t Ht$ H$HxH7Ht$ HHHH$`HxH7t H$H$PHxH7H$c~H}HH$HxH7ZH$-HHH$HxH7H$|HH$HxH74H$"HH$`HxH7tLH$PHxH7LHHH$HxH7t H$\H$HxH7cH$6QHHH$HxH7t H$H$HxH7H$HHH$ HxH7t H$H$HxH7H$HHH$@HxH7t H$]H$0HxH7dH$7RHHHH$HxH7)H$HH$HxH7t H$H$HxH7H$HHH$HxH7t H$}H$HxH7H$WrHHHD$`HxH7TH$'BHH$HxH7&H$HH$HxH7t H$H$HxH7H$HHH$ HxH7H$vHH$`HxH7uH$HcHH$HxH7t H$H$pHxH7%H$HHH$HxH7t H$HD$pHxH7H$HHH$HxH7t H$wH$HxH7~H$QlHHH$@HxH7t H$"H$0HxH7)H$HHH$HxH7H$HH$HD$HH$HxH7t H$H$HxH7H$dHHH$ HxH7t H$5H$HxH7YH$H|$P H$HxH7H$HxH7HD$H$AA HHPgH$H$A HXH$H|$P{H$L$HxH7H$HxH7H$AA LHHDŽ$!gH$H$A HXH$H|$PH$HxH7jH$HxH7DH$H$ HHD$賻H$H|$PqH$HxH7HT$H$т1H$H$A HUH$H|$P H$HxH7sH$HxH7JL=DH|$`1ҾV҂gHH|$`;тIHL$H$V҂LbH$H|$P`H$HxH7CH$ L ]H$ H|$PH$ HxH7IU(H$0AA HdH$0H$@A HUH$@H|$P訿H$@HxH7H$0HxH7IU0H$PAA HadH$PH$`A HNUH$`H|$PH$`HxH7SH$PHxH7OIU8H$pAA HcH$pH$A HTH$H|$P萾H$HxH7H$pHxH7IU@H$AA HIcH$H$A H6TH$H|$PH$HxH7H$HxH7H$L H$H|$P覽H$HxH7 H$LтhH$H$A H5RH$H|$PCH$HxH7H$HxH7L$LkH|$`1Ҿ[҂藵HH|$`;тyHL$H$[҂LH$H|$P萼H$HxH7HD$ H$AAHHP]aH$H$A HJRH$H|$PH$HxH7H$HxH7HD$ H$AAHHP`H$H$ A HQH$ H|$P臻H$ HxH7 H$HxH7HD$ H$0Hp/H$0H$@A H HD$(H$AAHHP\H$H$A HLH$H|$PöH$HxH7 H$HxH7/ HD$(H$HpkH$H$A HxLH$H|$PFH$HxH7 H$HxH7 HD$(H$Hp H$H$ A HKH$ H|$PɵH$ HxH7 H$HxH7 H$0L 譯H$0H|$PkH$0HxH7 H$@Lт-H$@H$PA HIH$PH|$PH$PHxH7N H$@HxH7FH|$`1Ҿ҂oHUH|$`;тQH7L$H$`҂LjH$`H|$PhH$`HxH7 HD$8H$pAAHHx2YH$pH$A HJH$H|$PH$HxH7, H$pHxH7 HD$8H$AAHHXH$H$A HIH$H|$PYH$HxH7n H$HxH7@ HD$8H$HH$H$A H IH$H|$PٲH$HxH7H$HxH7HD$8H$H~H$H$A HHH$H|$PYH$HxH7H$HxH7H$L =H$H|$PH$HxH7H$Lт轹H$H$A HFH$H|$P蘱H$HxH7H$HxH7QH|$`;тHHD$ H$ Hp(H$ H$0A H)GH$0H|$PH$0HxH7H$ HxH7HD$ H$@Hp8蟣H$@H$PA HFH$PH|$PzH$PHxH7^H$@HxH73HD$ H$`Hp0RH$`H$pA H/FH$pH|$PH$pHxH7H$`HxH7HD$ H$Hp4չH$H$A HEH$H|$P耯H$HxH7H$HxH7H$L$ $LHIHD$QH|$PLH$HxH7H$тLֶL$A LHLCH|$PL踮H$HxH7!H$HxH7LL{LnLaLTLGL$L2CL$LL$LL$LZL$LL$LwH|$`;тPHHt$`H|$GAL$LL$Lm.L$LXL$LCL$L..L$L2L$LL$LL$Lڿ6L$Lſ:L$L谿L$L蛿H$艿H$wL$LbL$LML@BL3NL&LL LQL$LL$LվL$L4fL$L衾L$L茾L$LwL$LbL$LM L$L8L$L#^L$LJL$LL$LL$LϽL$L躽& HHD$`HxH7t Ht$O葽HD$PHxH7t Ht$`uH|$HåL$LPYL$L;L$L&L$LUL$L'L$LL$LҼ}L$L轼L$L証L$L蓼/Ht$脼H$rbH$`H$NH$<\H$*1H$H$H$H$HH$@HxH7H$贻HH$0HxH7t H$芻H$ HxH7H$dHH$`HxH7H$6HH$PHxH7;H$)HH$HxH7:H$ں(HH$pHxH7]H$謺KHH$HxH7H$~HH$HxH7]H$PKHH$HxH7t H$&H$HxH7`H$NHHH$HxH7t H$ѹH$HxH7 H$諹HHH$HxH7t Ht$H$HxH7Ht$\HHH$HxH7t H$-H$HxH7gH$UHHH$HxH74H$Ը"HH$`HxH7H$覸HH$HxH7t H$|H$pHxH7H$VHHH$HxH7t H$'H$HxH7aH$OHHH$HxH7.H$ηHH$HxH7t H$褷H$HxH7H$~HHH$HxH7H$KHHD$pHxH7H$ nHH$HxH7t H$H$HxH70H$жH9HH$`HxH7tL裶H$PHxH7L肶HHH$HD$HH$HxH7t H$9H$HxH7sH$aHHH$HxH7@H$.HH$HxH7H$貵HH$HxH7t H$舵H$HxH7H$bHHH$HxH7t H$3H$pHxH7mH$ [HHH$`HxH7t H$޴H$PHxH7H$踴HHH$HxH7H$腴HH$HxH7H$WHH$HxH7tH$-HH$HxH7tL H$HxH7EL8HH$ HxH7LH$輳:HHH$HxH7t H$芳H$HxH7H$dHHH$ HxH7H$1HH$HxH7cH$QHH$@HxH7t H$ٲH$0HxH7H$賲HHH$HxH7L腲HH$HxH7H$WHH$HxH7H$)wHH$HxH7tH$HH$HxH74H$Ա"HH$HxH7tH$誱HH$HxH7H$HH$HxH7tH$UHH$HxH7H$*xHH$ HxH7tH$HH$@HxH7t H$ٰH$0HxH7H$賰HHHH$pHxH7L}HH$@HxH7H$OHH$PHxH7tH$%HH$0HxH7ZH$HHH$HxH7tLկH$HxH7L贯HH$HxH7tL華H$HxH7LnHHH$`HxH7H$;HH$PHxH7mH$ [HH$HxH7?H$߮-HH$pHxH7]H$豮KHH$HxH7H$胮HH$HxH7]H$UKHsHH$HxH7tH$#uHH$@HxH7UH$CHH$0HxH7t H$˭H$ HxH7H$襭HHH$HxH7H$rHH$HxH7H$Dfffff.AWAVLvAUATIUSHI11HhLdH%(H$X1HDŽ$@HDŽ$HHDŽ$PHD$ 7֖H$@L$HI9HuD@HI9t7H HyH7tH$0HHD$yI9HD$uH$HH$@HD$07E1HD$HEH@D ]HH}{8SCHt$0HAEXHD$ H|$ 11HPёA uH|$0; ҂胙HH|$Ht$0JIw(H$iH$H$A Lv.H$H|$ DH$HxH7XH$HxH7-Iw8H$H$H$A L-H$H|$ ̗H$HxH7(H$HxH7Iw0H$詡H$H$A L-H$H|$ TH$HxH7H$HxH7aIw4H$1H$H$A L-H$H|$ ܖH$HxH7H$HxH7H$ H$ $H踐H$H|$ vH$HxH7>H$тH8H$0A HL +H$0H|$ H$0HxH7H$ HxH7H|$Ht$ 藶HEH@D @LeLĄHM 0HLT11L訒H$@H$HE11H)H~DJ4*LHV耙HH$@H$HIH)H9L+HVLH˜1LsHD$0HxH7<HD$ HxH7H|$H$XdH3%(Hh[]A\A]A^A_@H$HH;$PHtHt$0苀H$HHH$H"fHXH H@0H=@P2 H fDH|$0; ҂ߔHH|$Ht$0覴Iw(H|$@ȆHT$@H|$PA L)Ht$PH|$ 謓HD$PHxH7AHD$@HxH7H$ H|$` 6H葍Ht$`H|$ RHD$`HxH7H|$pHھтHT$pH$A L'H$H|$ H$HxH7HD$pHxH7H|$Ht$ zA fDH|$Ht$0IA^fDH|$0;т$HHt$0H|$tGDH|$0;тHHt$0H|$t!A A\زβOH$0 .H$0H$0H$0֤H$0ĤH$0貤bH$0蠤H$0莤H$0|+H$0jH$0XH$0FKH$4 H$0"H$0QH$0&H$0HEHHxw HEHHxw 覗H$0褣 HHD$0HxH7t Ht${HD$ HxH7t Ht$0_H|$uH譋HH$HxH7tH$0(HH$HxH7t H$0H$HxH7QHHH$HxH7t H$0輢HD$pHxH7lHHHD$PHxH7t H$0zHD$@HxH7*HH$HxH7t H$0:H$HxH7HҀHH$@HD$HH$HxH7H$0ԡHMHH$HxH7t H$0袡H$HxH7OHHHD$`HxH7,HH$HxH7 HH$0HxH7t H$H$ HxH7kH$YHАf.AWAVAUATUSHHLbdH%(H$1HBHt$HD$07I9HD$;DID$(AD$xHHHD$H|$@H臍Ht$@H|$PNHt$@H|$`5Ht$@H|$p Ht$@H$ Ht$@H$  H\$0HH,H$L gH$H'H$HxH7+IT$@H$AAH/H$H؊H$HxH7+H$L ՄH$H蕊H$HxH7*+IT$HH$AAHf/H$HFH$HxH7C( 0HH襞Ht$0LHV4H̎HD$011HHP xIT$PH$AAH.H$H虉H$HxH7'H$L 薃H$HVH$HxH7'IT$XH$AAH'.H$HH$HxH7.'H$ L H$ HĈH$ HxH7&IT$`H$0AAH-H$0HuH$0HxH7(H$@L rH$@H2H$@HxH7(IT$hH$PAAH-H$PHH$PHxH7' -HHBHt$0LHVыHiHD$011HHP脀 =%|IT$pH$AAHV,H$H6H$HxH7(H$L 3H$HH$HxH7d(I$H$AAH+H$H衆H$HxH7'H$L 螀H$H^H$HxH7'I$H$AAH,+H$H H$HxH7>'H$L  H$HɅH$HxH7&I$H$AAH*H$HwH$HxH7% 1HH֙Ht$0LHVeHHD$011HHP~ 9!I$H$0AAH)H$0HDŽH$0HxH75$H$@L ~H$@H脄H$@HxH7#I$H$PAAHR)H$PH2H$PHxH7v#H$`L /~H$`HH$`HxH7#I$H$pAAH(H$pH蝃H$pHxH7"H$L }H$HZH$HxH7!I$H$AAH((H$HH$HxH7! HHgHt$0LHVH莇HD$011HHP{ QI$H$AAHx'H$HXH$HxH7!H$L U|H$HH$L$HxH7!fH$AALHA*$$&H$H詁H$HxH7!H$L {H$HfH$HxH7!A$fH$H$AAH*$&H$HH$HxH7-!H$ L zH$ H賀H$ HxH7 fH$0AALHA*$$o%H$0HOH$0HxH7 HH讔Ht$0LHV=HՄHD$011HHPx fH$pAALHA*$$$H$pHH$pHxH7H$L yH$HJH$HxH7ZfH$AALHA*$$$H$H~H$HxH7H$L xH$H~H$HxH7I$H$AAHq#H$HQ~H$HxH7:H$L NxH$H~H$HxH7I$H$AAH"H$H}H$HxH7 fHHHt$0LHV誁HBHD$011HHP]v  IT$0H$AAH/"H$H}H$HxH7H$ L  wH$ H|H$ HxH7I$x )AT$(HHD$I$$HuHH@Ht;P ~H@HuH;|$;W H(k҂\A$f.*#v (#f.v=z#$f.# #f.Q#$f.#v #f.v50#$f.#v #f.vw$f.# #@f.6%#$f.zu5#$I$AT$(HnH|$HH@Ht;P ~H@HuH;|$;;W 2H(o҂A$f.#v #f.v%#$f.# #f.q-#$f.#z #f.h=#$H$0AALH#H$0HzH$0HxH7L$H$@ LsH$@HyH$@HxH7]H$PL sH$PHuyH$PHxH7H$`L rsH$`H2yH$`HxH7:H$pL /sH$pHxH$pHxH7 9HHNHt$0LHV|Hu}HD$011HHPqH$HxH7H$HxH7zHD$pHxH7WHD$`HxH74HD$PHxH70HD$@HxH7 LNzH;D$IpH|$0HH7ZH$dH3%(0H[]A\A]A^A_Ð̂rfD̂rfDL$ƂLhLy|ȂHlpLD{df.h"jS_f.`"f.("{f."fDf.8" 2"f.xI$pHt$(HHD$AD$(D$(%%`҂H|AD$(H|$Ht$,D$,$f҂H{|AD$(H|$L$$j҂HM|TL$H$@ӂL}HP H$@/H\$0HHuH$@HxH7A|$( w>H$PL˂}H$PHuH$PHxH7gHt$H$`>H$`H^uH$`L$HxH7Ht$@1L9{L$H$p L7oH$pHtH$pHxH7ULHtH$L nH$HtH$HxH7Ht$PHtH$L nH$HYtH$HxH7Ht$`H3tH$L InH$H tH$HxH7@Ht$pHsH$L mH$HsH$HxH7H$HsH$L mH$HfsH$HxH7H$H=sH$L SmH$HsH$HxH7#I$H$AAHH$HrH$HxH7`H$L lH$H~rH$HxH7I$H$AAHLH$H,rH$HxH7H$L )lH$HqH$HxH7aI$ H$ AAHH$ HqH$ HxH7XH$HxH7LmH$L fkH$H&qH$HxH7>L$L )H$L kH$HpH$HxH7L$L譃xH$p LjLHkpH$HxH7LZ|DH$L VjH$HpH$HxH7LH$L jH$HoH$HxH7AL$L譂,H$`L iH$`HfoH$`HxH7L$LM{H$L FiH$HoH$HxH7WLJH$`L hH$`HnH$`HxH7L襁H$@L hH$@HfnH$@HxH7$LUH$L VhH$HnH$HxH7lL$LWH$L gH$HmH$HxH7L$L蝀H$ L gH$ HVmH$ HxH7=L$L=(H$L 6gH$HlH$HxH7L$LwH$H$@ fH$@HlH$@HxH7L$LxH$L vfH$H6lH$HxH7 :fHt$H$vH$H$A HH\$0H$HkH$HxH7H$HxH7DL$H$ LeH$HbkH$HxH7L$Ht$@L:qLHkH$L 5eH$HjH$HxH7H|$P  H$L dH$HjH$HxH7Ht$PH$zpH$HZjH$HxH7H$L WdH$HjH$HxH7H|$`  H$L dH$HiH$HxH7Ht$`H$ oH$ H|iH$ HxH7H$0L ycH$0H9iH$0HxH7 H|$p  H$@L #cH$@HhH$@HxH7 Ht$pH$PnH$PHhH$PHxH7 H$`L bH$`H[hH$`HxH7 H$%  H$pL BbH$pHhH$pHxH7 H$H$mH$HgH$HxH7 H$L aH$HwgH$HxH7 H$A H$L ^aH$HgH$HxH7 H$H$lH$HfH$HxH7x H$L.`H$HfH$L$HxH7a L˂LRnHD$@Hxv0Ht$@LOlH$HxH7 LHfL$H$ L)`H$HeH$HxH7< I$H$AAH H$HeH$HxH7H$L _H$HTeH$HxH7I$H$AAH" H$HeH$HxH7.H$L ^H$HdH$HxH7I$ H$ AAH H$ HmdH$ HxH7H$0L j^H$0H*dH$0HxH7/H$HxH7 H$HxH7 @H$L ]H$HcH$HxH7 yfH$L ]H$HVcH$HxH7 fH$L F]H$HcH$HxH75 fH$PL \H$PHbH$PHxH7+ fH$H$0 \H$0HabH$0HxH7" DH$pL N\H$pHbH$pHxH7 uL$LtL$LtL$LtL$LtYL$LtL$Lt+L$LltL$LWtSLJtL=t>L0thL#tL$LtYLtLsLsLsiLsL$LsL$LsuL$LsL$LysLlscL$LWsL$LBsL$L-sNL shLs LsLrZLr LrLrILrLrLrILrL$Lr[L$LtrLgrL$LRrL$L=riL$L(rL$LrLrLqLqyLqSL$LqL$LqL$LqFL$LqL$LvqL$Laq/H$H<^zH$H'^Ht$pH^Ht$`H^Ht$PH]L$LpLpLppLpLpLpVLpLpLp2LwpLjpBL]pLPpL$L;p`L.pL$LpL$LpBLoLoLotLoLoLofLoLoL$LoULzoL$LeoL$LPoL$L;oL$L&oLoL$LobL$LnL$LnLnLnL$Ln8L$Ln?L$LnLL$LlnYH$ZnL$LEnsL$L0nL$LneL$LnL$LmWL$LmL$LmOL$LmL$LmGL$LmHH$HxH7t Ht$'^mH$HxH7t Ht$'?mHD$pHxH7t Ht$'#mHD$`HxH7t Ht$'mHD$PHxH7t Ht$'lHD$@HxH7t Ht$'lHD$0HxH7t H$lHUHH$lHH$HxH7u>H$HxH7LElHH$HxH7tL lHH$HxH7tHH$HxH7tHH$HxH7hHH$HxH7JHH$HxH7,eHH$HxH7 DHH$HxH7#HH$ HxH7HH$HxH7H$kHH$HxH7cH$jQHH$HxH75Lj(HH$HxH7 LjHH$HxH7H$SjHH$`HxH7H$%jHH$HxH7LizHH$`HxH7^LiQHH$@HxH75Li(HH$HxH7 H$|iHH$HxH7H$NiHH$ HxH7H$ iHH$HxH7H$hpHH$@HxH7TH$hBHH$HxH7&H$hHH$HxH7H$hhHH$HxH7tH$>hHH$HxH7H$hHH$HxH7uH$gcHH$HxH7tH$gHH$HxH7tHH$HxH7u>H$HxH7cLfgVHH$HxH7tLAgHH$HxH7tHH$ HxH7tHH$HxH7hHH$HxH7JH@LHW:HHHHtHH$HxH7pHH$HxH7OHH$HxH7.lHH$HxH7 KHH$0HxH7pHH$HxH7YH$eGHH$HxH7+H$eHH$HxH7LreHH$PHxH7LIeHH$0HxH7H$eHH$pHxH7}H$dk7HH$pHxH7HH$HxH7HH$HxH7uHH$ HxH7THH$0HxH73qHH$@HxH7PHH$PHxH7/HH$`HxH7HH$PHxH7=H$c+HH$`HxH7H$cHH$pHxH7H$QcHH$HxH7H$#cHH$HxH7H$bsHH$HxH7WH$bEHH$HxH7)H$bHH$HxH7H$kbHH$HxH7H$=bHH$HxH7H$bHH$ HxH7qH$a_HH$0HxH7CH$a1HH$@HxH7H$aHH$PHxH7H$WaHH$HxH7H$)aHH$HxH7H$`yHH$HxH7]H$`KHH$HxH7/H$`HH$HxH7H$q`HH$HxH7H$C`HH$HxH7H$`HH$0HxH7wH$_eHH$@HxH7IH$_7HH$PHxH7H$_ HH$`HxH7H$]_HH$pHxH7H$/_HH$HxH7H$_HH$HxH7cH$^QHH$HxH75H$^#HH$HxH7H$w^HH$HxH7LN^HH$HxH7L%^HH$HxH7L]zHH$ HxH7^L]QHH$0HxH75L](HH$pHxH7 L]HH$HxH7LX]HH$HxH7L/]HH$HxH7L]HH$HxH7hL\[HH$HxH7?L\2HH$HxH7L\ HH$HxH7Lb\HH$ HxH7L9\HH$0HxH7L \HH$@HxH7mL[`HH$PHxH7DL[7 HH$@HxH7 H$|[HH$PHxH7H$N[HH$`HxH7H$ [HHH$pHxH7MHHHzHH$`HxH7?LZ2HH$pHxH7LZ HH$HxH7_HH$HxH7>|HH$HxH78fffff.AWAV1AUATUSHHHHQH|$0Ht$1dH%(H$1HD$07?LcHCHD$I9DIt$(A$H{H|$@HFHt$@H|$PkLHt$@H|$`RLHt$@H|$p 9LHt$@H$ LHt$@H$ LH$H$8{MHP H$H|$0HEH$HxH72%A$` wEH$H$˂hMH$H|$0fEH$HxH7$I$`H$PH$H|$0&EH$HxH7$Ht$@H$1KH$H$ ?H$H|$0DH$HxH7$H$H|$0DH$H$ >H$H|$0gDH$HxH7#Ht$PH|$0?DH$H$ P>H$H|$0DH$HxH76#Ht$`H|$0CH$H$ =H$H|$0CH$HxH7"Ht$pH|$0CH$H$  =H$ H|$0\CH$ HxH7Z"H$H|$01CH$H$0 B=H$0H|$0CH$0HxH7!H$H|$0BH$H$@ H$HxH7H$H$ 8H$H|$0>H$HxH7IT$8H$AAHcH$H|$0A>H$HxH7?Ht$0HRHt$0H<$HV9BHBHD$0H|$011HP6H$H$  7H$ H|$0=H$ HxH7I$H$0AAHH$0H|$0e=H$0HxH7IH$H$@ ]7H$@H|$0=H$@HxH7IT$HH$PAAHH$PH|$0A$H$PA$bH$PтA$JH$@A$H$@тA$H$@тvA$H$@тNL8Lt8Lg8cLZ8LM8aL@88L38)L&8L8tL 8L7-H$7L7cL7L7HL7L7L7L5L5L5L5hL5L5L5cL5 L5L5TLs5Lf5^LY5LL5nL?5L25L%5_L5L 5L4IL4L4VL4L4L4JL4H$4L4L$L|4lL$Lg4L$LR4L$L=4;L$L(4L$L4sL$L3L$L3L$L3#L$L3L$L3GL$L3L$L3^L$Lk3L$LV3H$D3hHHD$0HxH7t H$3HpHHD$@HxH7tHt$/2HHD$PHxH7tHt$/2HHD$`HxH7tHt$/2HHD$pHxH7tHt$/2HH$HxH7tHt$/j2HH$HxH7tHt$/F2HH$HxH7tH$2HH$HxH7tHH$HxH7tHH$HxH7hH$1VHH$HxH7tH$1HH$HxH7tHH$HxH7xHH$HxH7ZHH$ HxH7 A ))Ѻ$I)))1ffD$0&H|$@$H$HDŽ$$ܼH$PH),IHHHH?HHHH)HT$$H)צC9c*HH 2HH)HIHH?L$ H4ׂCII)LN$HI)HHDd$D$HHH)H$HIHH?H 2HH)HHHH)Љ$nH$$ |$ H$t$HxH$ I ^H$t$HxiA iH$`HDŽ$fHDŽ$hfHDŽ$fHDŽ$P5HxH7 H$PHDŽ$AL5PL-PH$hL=PH PL%PIFLIEL$HID$H PL$HHDŽ$hDH$HDŽ$fHDŽ$fHDŽ$fHDŽ$P5HxH7 H$HDŽ$A4IFH !PH$LIEL$HID$H PL$HHDŽ$DH$  H$ H$HxH7 HH$dH3%( H[]A\A]A^A_fH$ WH$p̂@H$˂Hx H$˂Hx 1H$0H$HH$0HHHLH$PH$4H$H$HDŽ$ #H$pŝ@H$GH$PHWH$PHHH$@HL$Hf+ $*)L$RADf,)ѺgfffiimЉffDi{i> )ӂcHHfD$pHH H$`fL$rfT$tHt$pf$f$f$H$`HH$`HxH7L$H$p LH$pH[H$pHxH7pH$H$HpH$HH$HxH7!H$H$HpH$HH$HxH7H$p D$A H$pDHxH$pH$Hp-H$H]H$HxH71H$L ZH$HH$HxH7H$L8҂ H$HH$HxH7H$L H$HH$HxH7H$psnfDH$p̂#ILMH$pHxH7tH1LH$ QH$DH$HxH7t H$H;HH7t Ht$,H0H$p˂Hx DD$H$H$$ H$H$A L}H$HMH$HxH7H$HxH7L$H$ӂL H$HH$HxH7HELHDŽ$XHDŽ$`HDŽ$xH$hH$pDŽ$ӂHKLHDŽ$ӂH(LHDŽ$rӂHLHDŽ$O ӂHLHDŽ$,ӂHLHDŽ$ ӂHLHDŽ$ӂHyLHDŽ$ӂHVLHDŽ$ ӂH3LHDŽ$ }$ӂHLHDŽ$ Z(ӂHLHDŽ$ 7,ӂHH$`HHMT$HH@Ht ;P ~H@HEHL$H9t D$;A }W0HD$Ht$HQ HA(7HHL$A HHD$HL$KHt$HHD$Ht$HH(AH$H$ӂHHD$H$HH$HxH7$H$Ld$ H$HH$HxH7BHL$H$ H$HH$HxH7H$H$ HpH$ H>H$ HxH7HT$H$0ÄH$0HH$0HxH7TH$H$@HpH$@HH$@HxH7HL$H$P H$PHwH$PHxH7H$`H.A 9fHHH8lH(6HH6HH!HHH+H+L@LLLRLHt$pLcXHVlHIH<HEHD$pHA(HxH7iH\$111XHD*IHT$-H$ǂH$H$HIHD$LH|$HH$HxH7aH$PhOxDV1ҿx8V4$6XHT$.H$ǂH$H$H$H$HH$HxH7t H$H$11GLHL$HL$OH|$0/HLI$HH$pRH$EH$8IH$HxH7u"LHIH$HxH7tHHH$HxH7H$P HHHEHPHHIHLH$HxH7o HH$IH$HxH7t Ht$E H$`HLIH$HxH7uMIH$ HxH7tL IH$HxH7tIH$@HxH7tIH$0HxH7tIH$PHxH7oHHIH$HxH7+HIH$HxH7 'IH$HxH7H IIH$HxH7tH H$HxH7IIH$pHxH7nIH$`HxH7PlHIH$HxH7'CIH$HxH7"HH$HxH7(2Hqfff.AWL AVAUATIUSHH)̂LHIMdH%(H$1HD$7pH$H|$ ǃ  Ht$ H|$kHD$ HxH7-H|$LHH$H|$0 \Ht$0H|$HD$0HxH7H$H|$@0ӂHt$@H|$HD$@HxH7H$H|$P Ht$PH|$HD$PHxH7H$H|$`AӂcHt$`H|$dHD$`HxH7H$H|$p bHt$pH|$#HD$pHxH7]H$H$LӂH$H|$H$HxH70Ht$HK Ht$HHHVHnHD$H|$11HPH$HGH$H|$eH$HxH7H$H$aӂ"H$H|$ H$HxH7H$H$ H$H|$H$HxH7mHt$H@ Ht$HHVHgHD$H|$11HPH$H$ɂVH$H$A <H#H$H|$1H$HxH7H$HxH7H$H$uӂH$H$A H袈H$H|$H$HxH7H$HxH7Ht$HHt$HHVH(HD$H|$11HPAH$H$}ӂH|$ӂH$ +HyH|$HH$H$uӂH$H$ A H菇H$ H|$H$ HxH7H$HxH7Ht$HHt$HHV}HHD$H|$11HP.H$H$0ӂH$0H$@A <HцH$@H|$H$@HxH7H$0HxH7H$H$PuӂH$PH$`A HPH$`H|$^H$`HxH7H$PHxH7Ht$HHt$HHV>HHD$H|$11HPH$H$pтH$pH|$H$pHxH7bH$H$ H$H|$yH$HxH70H$AA LHLH$H$A H9H$H|$H$HxH7H$HxH7IVH$AA HH$H$A H譅H$H|${H$HxH7zH$HxH7yIVH$AA H4H$H$A H!H$H|$H$HxH7H$HxH7H$H$AA HHDŽ$蘓H$H$A H腄H$H|$SH$HxH7H$HxH7H$H$ 2H$H|$H$HxH7H$H$ тH$ H$0A HzH$0H|$H$0HxH7/H$ HxH7.Ht$HHt$HHVhHHD$H|$11HPH$H$@҂H$@H|$H$@HxH7 H$PAALHH$PH$`A H譂H$`H|${H$`HxH7j H$PHxH7i IT$H$pAAH3H$pH$A H H$H|$H$HxH7 H$pHxH7 It$H$H$H$A H见H$H|$uH$HxH7 H$HxH7 It$ H$!H$H$A H.H$H|$H$HxH7{ H$HxH7z H$H$ H$H|$H$HxH7H H$H$тVH$H$A H#H$H|$1H$HxH7 H$HxH7 Ht$HHt$HHVHHD$H|$11HPH$H$҂H$H|$H$HxH7 IxH$AAHeH$H$ A HRH$ H|$ H$ HxH7/ H$HxH7. IH$0AAH֍H$0H$@A H~H$@H|$H$@HxH7 H$0HxH7 IH$P;H$PH$`A HH~H$`H|$H$`HxH7 H$PHxH7 IH$pH$pH$A H}H$H|$H$HxH7: H$pHxH79 H$H$ zH$H|$8H$HxH7 H$H$тH$H$A H{H$H|$H$HxH7 H$HxH7 Ht$H!Ht$HHVHHHD$H|$11HPaIt$H$?H$H$A HL|H$H|$H$HxH71 H$HxH70 It$8H$H$H$A H{H$H|$H$HxH7H$HxH7It$(H$MH$H$A HZ{H$H|$(H$HxH7H$HxH7It$0H$ H$ H$0A HzH$0H|$H$0HxH7VH$ HxH7UH$H$@ $H$@H|$LH$@HxH7#H$H$Pт H$PH$`A HxH$`H|$H$`HxH7H$PHxH7Ht$H5Ht$HHVH\HD$H|$11HPuH$H$p <H$pH|$DH$pHxH7cH$`H$тH$H$A HwH$H|$H$HxH7H$HxH7Ht$H-Ht$HHVHTH$HxH7HD$HxH7H$dH3%(Hĸ[]A\A]A^A_@H$+fDH$fDH$fDH$DfDH$hfDH$fDH$fDH$"fDH$kOfDH$SfDH$;fDH$#fDH$ _fDH$`fDH$BfDH$CfDH$fDH$fDH${!fDH$c"fDH$KfDH$3fDH$fDH$fDH$tfDH$ufDH$fDH$fDH$H$pHxH7=IUH$AA HhaH$H$A HURH$H|$#H$HxH7H$HxH7IUH$AA H`H$H$A HQH$H|$藻H$HxH7H$HxH7IU H$AA HP`H$H$A H=QH$H|$ H$HxH7BH$HxH7AH$H$ H$H|$診H$HxH7H$H$тeH$H$A H2OH$H|$@H$HxH7H$HxH7H$@H$H$  H$H|$ǹH$HxH7IUH$AA H^H$H$A HOH$H|$TH$HxH7H$HxH7IUH$AA H ^H$H$A HNH$H|$ȸH$HxH7H$HxH7IUH$AA H]H$H$A HnNH$H|$fDH$@fDH$@fDH$0Ӆ fDH$0軅 fDH$0装fDH$0?fDH$0qfDH$0fDH$0fDH$01fDH$fDH$0fDH$0sfDH$0[^HH$HxH7H$HxH7t H$HD$ HxH7t Ht$~HOgHH$ HxH7t H$0~H$HxH7tH$0~nHH$HxH7t H$@~~H$HxH70H$@X~HH$ HxH7HH$HxH7H$0 ~HHD$@HxH7H$@}HH$0HxH7t H$}H$ HxH7iH$}WHHD$0HxH7`HVHH$HxH7t H$0D}H$HxH7qHHbHH$HxH7CHH$HxH7"HH$HxH7t H$0|H$HxH7dHH$HxH7CHH$HxH7bH$0J|PHH$HxH7oHH$pHxH7t H$0{H$`HxH7,H'HH$HxH7{H$0{iHH$HxH7t H$0{H$HxH78HHH$HxH7t H$0>{H$HxH7kHHH$HxH7EHH$pHxH7$HH$HxH7HH$HxH7tH$0zvHH$@HxH7=HH$0HxH7HEHH$PHxH7tH$0zHH$HxH7t H$0yH$HxH7%HHH$ HxH7t H$ yH$HxH7bH$ yPHHH$HxH7t H$0[yH$HxH7 HHH$HxH7t H$0yH$HxH7@HHH$HxH7t H$0xH$pHxH7}HHH$HxH7t H$0xH$HxH75HHH$@HxH7t H$0;xH$0HxH7hHHH$`HxH7t H$0wH$PHxH7 HHH$HxH7HH$HxH7^HH$ HxH7=HH$HxH7tH$0HwvHH$HxH7mHH$HxH7LHH$HxH7+HH$HxH7tH$0vvHH$HxH7t H$0vH$pHxH7CHHH$HxH7t H$0IvH$HxH7vHHH$@HxH7t H$0vH$0HxH7.HHH$`HxH7t H$0uH$PHxH7kHHH$ HxH7EH8HH$HxH7t H$@HuH$HxH7\H$HxH7='Ht$ HpHt$ HHHV3`H`HD$ H|$ 11HPT ]&<H$H$uӂcH$H$A HoH$H|$ }[H$HxH74,H$HxH73,Ht$ HoHt$ HHV]_H_HD$ H|$ 11HPTH$HGH$H|$ ZH$HxH7+H$H$aӂbH$H|$ ZH$HxH7+H$H$  TH$ H|$ ]ZH$ HxH7t+Ht$ HnHt$ HHVV^H^HD$ H|$ 11HPSH$H$0ʂaH$0H$@A <HH$@H|$ YH$@HxH7*H$0HxH7*H$H$Puӂ\aH$PH$`A H)H$`H|$ 7YH$`HxH7*H$PHxH7*Ht$ HmHt$ HHV]H]HD$ H|$ 11HPQH$H$p}ӂ`H|$ ӂJRH$p +HH|$ HsXH$H$uӂI`H$H$A HH$H|$ $XH$HxH7)H$HxH7)Ht$ HulHt$ HHV\H\HD$ H|$ 11HPPH$H$ӂ_H$H$A <HXH$H|$ fWH$HxH7%)H$HxH7$)H$H$uӂ _H$H$A HH$H|$ VH$HxH7(H$HxH7(Ht$ H6kHt$ HHVZH][HD$ H|$ 11HPvOH$H$ӂL^H$H$A <HH$H|$ 'VH$HxH7F(H$HxH7E(H$H$ӂ]H$H$A HH$H|$ UH$HxH7'H$HxH7'Ht$ HiHt$ HHVYHZHD$ H|$ 11HP7NH$ HDŽ$7HDŽ$ HDŽ$ DŽ$ 6K>H$ H$CH$ H?H|$ HTH$H$ ӂ\H$ H$0A (HUH$0H|$ cTH$0HxH7"H$ HxH7"H$H$@ӂ\H$@H$PA HH$PH|$ SH$PHxH7!H$@HxH7!Ht$ H3hHt$ HHVWHZXHD$ H|$ 11HPsLH$H$`%xI[H$`H$pA HH$pH|$ $SH$pHxH7;!H$`HxH7:!H$H$ԂZH$H$A HH$H|$ RH$HxH7 H$HxH7 H$pHxvH$p FH$p HH|$ H$RH$H$!ԂYH$H$A HH$H|$ QH$HxH7L H$HxH7K Ht$ H&fHt$ HHVUHMVHD$ H|$ 11HPfJH$H$5ԂH$H|$ LMH$HxH7CH$HxH7BHt$ HaHt$ HHV,QHQHD$ H|$ 11HPEfH$fH$H$A HH$H|$ LH$HxH7H$HxH7fH$*fH$H$A HGH$H|$ LH$HxH7dH$HxH7cfH$eH$H$A HH$H|$ KH$HxH7H$HxH7H$H$  wEH$ H|$ 5KH$ HxH7H$H$0rԂRH$0H$@A HH$@H|$ JH$@HxH7H$0HxH7Ht$ H_Ht$ HHVNHEO nHD$ H|$ 11HPFCD$LHH$HUJH$H$ 1PH$H$0OH$H$@OH$H$P OH$H$` O !D$JH$  HD$H|$ HMIH$0 HH|$ H&IH$@ H\H|$ HHH$P H5H|$ HHH$` HH|$ HHD$H$pybH$pH$A HH$H|$ dHH$HxH7H$pHxH7H$H$ӂPH$H$A HH$H|$ GH$HxH7jH$HxH7iH$H$ AH$H|$ GH$HxH7H$H$ ҂=OH$H$A H H$H|$ GH$HxH7'H$HxH7&Ht$ Hi[Ht$ HHVJHKHD$ H|$ 11HP?H$H$ <@H$H|$ xFH$HxH7H$H$т5NH$H$A HH$H|$ FH$HxH7gH$HxH7fHt$ HaZHt$ HHVIHJH$`HxH7?H$PHxH7>H$@HxH7H$0HxH7H$ HxH7H$HxH7H$HxH7H$pHxH7HD$ HxH7H$ dH3%(HĨ []A\A]A^A_ÐH$҂n3fH$H$hʂfLH$H$A <H3H$H|$ ADH$HxH7H$HxH7CH$W1DHD$ H|$ 11HPH$pHxH7H$H$тeFH$L襄H|$ HX>H$HxH7?HD$ <H$H$ H+pG8H$H|$ >H$HxH7H$H$ԂEH$H$A HH$H|$ =H$HxH7TH$HxH7#Ht$ HQHt$ HHV}AHBL=* HD$ H|$ 11HP6H$H$ԂDH$H$A HH$H|$ H$L|H|$ H6H$HxH7 HD$ <H$H$ H+p0H$H|$ X6H$HxH77 H$H$Ԃ>H$H$A HH$H|$ 5H$HxH7 H$HxH7 Ht$ HAJHt$ HHV9Hh:L" J@H$H$(ʂN=H$H$A <HH$H|$ )5H$HxH7 H$HxH7 @H$GfDH$GMfDH$GfDH$GfDH$GfDH$sGfDH$[GfDH$CGfDH$+GfDH$GfDH$FfDH$FfDH$FfDH$F7fDH$FfDH$FfDH$kFfDH$SFfDH$;F fDH$#FZfDH$ F[fDH$EtfDH$EfDH$EfDH$E7fDH$EfDH${EfDH$cEfDH$KEfDH$3EfDH$EfDH$E%fDH$D&fDH$DfDH$DfDH$DfDH$DfDH$sDfDH$[DfDH$CD0fDH$+D1fDH$DfDH$CfDH$CfDH$CfDH$CfDH$CfDH$CfDH$kCfDH$SCfDH$;C(fDH$#C)fDH$ C[fDH$BfDH$BfDH$B5fDH$B6fDH$B3fDH${B4fDH$cBfDH$KBfDH$3BfDH$BfDH$BfDH$AHfDH$AzfDH$AfDH$AfDH$AXfDH$sAYfDH$[A;fDH$CAGfDH$>fDH$>bfDH$>fDH$>}fDH$s>fDH$[>fDH$C> fDH$+>fDH$>fDH$=fDH$=9fDH$=fDH$=fDH$=&fDH$=fDH$k=_fDH$S=.fDH$;=hfDH$#=7fDH$ =fDH$ H$H$ _H$H|$ H$HxH7 H$H$LӂH$H|$ H$HxH7Ht$ HB)Ht$ HHHVHeHD$ H|$ 11HP~ H$H$hʂTH$H$A <H!H$H|$ /H$HxH7NH$HxH7MH$H$uӂH$H$A H蠨H$H|$ H$HxH7H$HxH7Ht$ H'Ht$ HHVH&HD$ H|$ 11HP? H$HH$H|$ H$HxH7H$H$aӂH$H|$ H$HxH7oH$H$  H$H|$ H$HxH7=Ht$ H&Ht$ HHVHHD$ H|$ 11HP8 H$H$ʂH$H$ A <HۦH$ H|$ H$ HxH7H$HxH7H$H$0uӂH$0H$@A HZH$@H|$ hH$@HxH7_H$0HxH7^Ht$ H%Ht$ HHVHHHD$ H|$ 11HP H$H$P}ӂH|$ ӂ H$P +H6H|$ HH$H$`uӂH$`H$pA HLH$pH|$ ZH$pHxH7H$`HxH7Ht$ H$Ht$ HHV:HHD$ H|$ 11HPH$H$ӂH$H$A <H莤H$H|$ H$HxH7H$HxH7H$H$uӂ@H$H$A H H$H|$ H$HxH7H$HxH7Ht$ Hl#Ht$ HHVHHD$ H|$ 11HPH$H$ӂH$H$A <HOH$H|$ ]H$HxH7H$HxH7H$H$ӂH$H$A H΢H$H|$ H$HxH7H$HxH7Ht$ H-"Ht$ HHVHTHD$ H|$ 11HPmH$HDŽ$7HDŽ$HDŽ$DŽ$lH$H$H$ HuH|$ H H$H$ӂH$H$A (H苡H$H|$ H$HxH7H$HxH7H$H$ ӂ=H$ H$0A H H$0H|$  H$0HxH7_H$ HxH7^Ht$ Hi Ht$ HHVHHD$ H|$ 11HPH$H$@%xH$@H$PA HLH$PH|$ Z H$PHxH7H$@HxH7H$H$`ԂH$`H$pA H˟H$pH|$ H$pHxH7H$`HxH7H$PHxvH$P H$P HH|$ HZ H$H$!Ԃ0H$H$A HH$H|$ H$HxH7H$HxH7Ht$ H\Ht$ HHV HHD$ H|$ 11HPH$H$5ԂrH$H$A H?H$H|$ M H$HxH7TH$HxH7SH$H$DԂH$H$A H辝H$H|$ H$HxH7H$HxH7H$H$ H$H|$ iH$HxH7H$H$QԂ&H$H$A HH$H|$ H$HxH7H$HxH7Ht$ HRHt$ HHV Hy HD$ H|$ 11HPfH$\!H$H$ A HyH$ H|$ GH$ HxH7H$HxH7fH$0 H$0H$@A HH$@H|$ H$@HxH7H$0HxH7fH$Pb H$PH$`A HH$`H|$ MH$`HxH7\H$PHxH7[H$H$p ,H$pH|$ H$pHxH7)H$H$^Ԃ H$H$A HtH$H|$ H$HxH7H$HxH7Ht$ HHt$ HHVb H HD$ H|$ 11HPfH$H$H$A HH$H|$ H$HxH7OH$HxH7NfH$`H$H$A H}H$H|$ KH$HxH7H$HxH7fH$H$H$A HH$H|$ H$HxH7H$HxH7H$H$ H$H|$ kH$HxH7H$H$rԂ( H$H$ A HH$ H|$ H$ HxH72H$HxH71Ht$ HTHt$ HHVH{HD$ H|$ 11HPH$H$08{j H$0LHH|$ H]H$0HxH7H$H$@ UH$@H|$ H$@HxH7H$H$PN H$PH$`A HݗH$`H|$ H$`HxH7:H$PHxH79H$H$p H$pH|$ HH$pHxH7H$H$т L H$L>GH|$ HH$HxH7H$H$<ςL H$LFH|$ HH$HxH7H$H$ H$H|$ PH$HxH7WH$H$т H$LMFH|$ HH$HxH7H$H$<ςH$LEH|$ HH$HxH7H$H$ H$H|$ fH$HxH7H$H$т#H$LcEH|$ HH$HxH7}H$H$<ςH$LEH|$ HH$HxH7EH$H$ H$H|$ |H$HxH7H$H$%т9H$LyDH|$ H,H$HxH7H$H$ <ςH$ L)DH|$ HH$ HxH7HD$ <H$H$0 H+pH$0H|$ H$0HxH7hH$H$@ԂFH$@H$PA HH$PH|$ !H$PHxH7H$@HxH7Ht$ HrHt$ HHVHHD$ H|$ 11HPH$H$`ԂH$`H$pA HUH$pH|$ cH$pHxH7H$`HxH7H$H$ (BH$H|$ H$HxH7WH$H$ԂH$H$A H芐H$H|$ H$HxH7H$HxH7Ht$ HHt$ HHVxHHD$ H|$ 11HP)D$LHH0H$H8H$H$1H$H$H$H$H$H$ H$H$  h!D$}H$ HD$荒H|$ H0H$ HfH|$ H H$ H?H|$ HH$ HH|$ HH$ HH|$ HD$H$\H$H$ A HyH$ H|$ GH$ HxH7 H$HxH7 H$H$0тH$0H$@A HH$@H|$ H$@HxH7 H$0HxH7 H$H$P H$PH|$ cH$PHxH7b H$H$` ҂ H$`H$pA HH$pH|$ H$pHxH7 H$`HxH7 Ht$ HL Ht$ HHVHsHD$ H|$ 11HPH$H$ <H$H|$ [H$HxH7 H$pH$тH$H$A HH$H|$ H$HxH7R H$HxH7Q Ht$ HD Ht$ HHVHkH$HxH7* H$HxH7) H$HxH7( H$HxH7' H$HxH7& H$HxH7% H$HxH7$ H$PHxH7# HD$ HxH7% H$dH3%( H[]A\A]A^fDH$҂NjfH$sfDH$[;fDH$C|fDH$+zfDH$fDH$fDH$fDH$fDH$fDH$fDH$fDH$kRfDH$SfDH$;fDH$#>fDH$ ?fDH$fDH$fDH$mfDH$nfDH$fDH${fDH$cLfDH$KMfDH$3fDH$fDH$+fDH$,fDH$>fDH$?fDH$fDH$fDH$sfDH$[fDH$CnfDH$+ofDH$ fDH$ fDH$fDH$fDH$fDH$fDH$fDH$knfDH$SofDH$;fDH$#fDH$ EfDH$FfDH$fDH$fDH$fDH$fDH${fDH$cfDH$KfDH$3fDH$fDH$9fDH$:fDH$lfDH$fDH$fDH$2fDH$sdfDH$[fDH$CfDH$+fDH$&fDH$efDH$fDH$fDH$fDH$9fDH$qfDH$kfDH$SfDH$;fDH$#KfDH$ fDH$fDH$fDH$dfDH$efDH$fDH${fDH$cfDH$KfDH$3 fDH$YfDH$ZfDH$fDH$fDH$fDH$LfDH$fDH$sfDH$[fDH$CfDH$+fDH$fDH$fDH$fDH$fDH$fDH$QHH$HxH7t H$lH$HxH7H$HxH7t H$1H$PHxH7t H$@HD$ HxH7t Ht$HKHH$HxH7t H$H$HxH7ZH$HH'HH$pHxH7t H$nH$`HxH7HHH$`HxH7H$%HHH$@HxH7t H$H$0HxH7H$HHH$ HxH7t H$H$HxH7vHHH$HxH7SHH$HxH75eHH$HxH7HH$HxH7t H$H$HxH7HH$HxH7HH$HxH7bH$PHH$HxH7?9HH$pHxH7H$BHHt$0H|$ HD$0HxH7&H|$ )̂H$H|$@ Ht$@H|$ HD$@HxH7&H$H|$PӂrHT$PH|$`A HEpHt$`H|$ VHD$`HxH7&HD$PHxH7&H$H|$p͂LP Ht$pL?!H|$ HHD$pHxH7L&H$H$ H$H|$ H$HxH7&H$H$LӂhH$H|$ fH$HxH7%Ht$ HHt$ HHHV[HHD$ H|$ 11HP H$H$hʂH$H$A <HnH$H|$ H$HxH7\%H$HxH7[%H$H$uӂaH$H$A H.nH$H|$ fDH$?fDH$fDH$fDH$fDH$kfDH$S0fDH$;1fDH$#fDH$ fDH$fDH$fDH$`fDH$afDH$fDH${fDH$cfDH$KfDH$3fDH$fDH$fDH$`fDH$afDH$fDH$fDH$7fDH$s8fDH$[fDH$CfDH$+fDH$fDH$fDH$fDH$fDH$fDH$fDH$+fDH$k,fDH$S^fDH$;fDH$#fDH$ $fDH$VfDH$fDH$fDH$fDH$AfDH${fDH$cfDH$KfDH$3"fDH$TfDH$fDH$fDH$fDH$.fDH$ffDH$fDH$sfDH$[fDH$CgfDH$+fDH$fDH$fDH$fDH$˿TfDH$賿fDH$蛿fDH$胿fDH$k.fDH$S`fDH$;fDH$#fDH$ fDH$:fDH$۾rfDH$þfDH$諾fDH$蓾fDH${fDH$cfDH$KfDH$3fDH$fDH$/fDH$0fDH$ӽfDH$軽fDH$製fDH$苽fDH$sfDH$[sfDH$CfDH$+fDH$fDH$fDH$fDH$˼fDH$購fDH$蛼fDH$胼fDH$kfDH$S HH$HxH7u^HD$ HxH7t Ht$HmHH$@HxH7t H$H$0HxH7tH$ƻHH$HxH7wHHD$pHxH7\HH$ HxH7t H$fH$HxH7uHHH$HxH7OHH$HxH7.HH$HxH7t H$ܺH$HxH7HHH$HxH7t H$蔺H$HxH7JHHH$HxH7t H$LH$PHxH7H$@&HH$HxH7t H$H$HxH7tH$ڹHH$HxH7t H$賹H$HxH7,H$荹HHH$HxH7{HH$HxH7t H$=H$HxH78HHH$HxH7{H$iHH$HxH7HH$pHxH7t H$裸H$`HxH7>H@HH$HxH7{H$TiHHHRHH$HxH7u*H$HH$pHxH7tH$HH$HxH7t H$ķH$HxH7= HHH$HxH7t H$|H$HxH7HHH$HxH7t H$4H$HxH7|HHH$@HxH7t H$H$0HxH7e4HHH$ HxH7t H$褶H$HxH7HHH$HxH7t H$\H$HxH7HHH$`HxH7t H$H$PHxH7\HHH$pHxH7g6HH$HxH7FHH$HxH7t H$芵H$HxH7HHH$HxH7t H$BH$HxH7HHH$HxH7t H$H$HxH7sBHHH$HxH7t H$貴H$HxH7+HHH$pHxH7t H$jH$`HxH7HHH$PHxH7t H$"H$@HxH7jHHH$0HxH7t H$ڳH$ HxH7S"HHHD$@HxH7mH`HHD$0HxH7GHH$HxH7t H$NH$HxH7t H$,H$0HxH7t H$ H$ HxH7t H$H$HxH7t H$ƲH$HxH7t H$褲H$HxH7t H$育H$HxH7GH$\5HH$HxH7t H$2H$HxH7H$ HHHH$HxH7HH$`HxH7HH$PHxH7t H$虱H$@HxH7TbHH$HxH73AHH$pHxH7eH$1SHHH H'HH$HxH7HH$HxH7HH$HxH7t H$訰H$HxH7mHHHHHH$HxH7EH$D3HH$@HxH7&HH$0HxH7HH$ HxH7HH$HxH7HH$HxH7t H$薯H$pHxH7[HHH$`HxH75ZHH$PHxH79HH$HxH7HH$HxH7HH$HxH7HH$HxH7t H$詮H$HxH7nHH$HxH7MrHH$HxH7,QHH$HxH7 0HH$HxH7HH$@HxH7HH$0HxH7HH$ HxH7HH$HxH7fHHH$pHxH7=bHH$`HxH7AHH$PHxH7H$HH$HxH7HH$HxH7HH$HxH7HH$HxH7jHH$HxH7InHH$HxH7(MHH$HxH7,HH$HxH7 HH$0HxH7yHHH$HxH7X'HH$ HxH7t H$蜫H$HxH7HHH$`HxH7t H$TH$PHxH7>HHD$PHxH7EHH$HxH7$HHD$`HxH7tH$ժHHH$@HxH7AHNfAWAV1AUATUSHH1H H.QOH$HDŽ$7dH%(H$ 1BH$H$ SH$H$H$HxH7H$H$т˞H$H$ƖH$HxH7H$H$ 辐H$H$yH$HxH7H$H$Ԃ6H$H$A H+H$H$H$HxH7]H$HxH7\H$H$ H$H$訕H$HxH7'H$H$LӂeH$H$`H$HxH7H$HǩH$HHHVOHH$H$11HPH$H$%xМH$H$A H)H$H$訔H$HxH7WH$HxH7VH$ HDŽ$7HDŽ$ HDŽ$ DŽ$ uH$ H$H$ H~+H$HH$H$ 8҂ě`H$ HIL$HDŽ$HDŽ$轁H$H$H@@ L`H$L$ H$臔H$ HxH7&H$H$ H$HH$(t@H$L赎I|$+H$H$H$ّ‰D$ @vkL$HT$^̂L葚D$ <ĈL! @H$҂&91LHHH|$ HH fD$`fT$bfL$d-lɉ$4$0$,HHIHfD$pAƿ*I A)fDL$tEDAft$rD))ЍRDEAffAtEC Ei{AD)Ai> A ))Ѻ$I)))1ffD$H|$ $8芝H$$<HHH HH9 HHV?2IHHH4ׂCH?H"H)HH`HH)H),HHIHHI?L$ H)צC9c*HIE)H 2HL)HIHH?L, II)LN,HI)HHEHHL)HIHH?H 2HH)HHH)H$D$(D$$$ DŽ$@H$`$@H$蚎CHfD$0HfT$2H0H$`H fT$4Hx蜁H$蚏H$=IfD$@H IfD$DfD|$BEA H$˂HxH$DHx'H$@%H$ȍqHfD$PH DHfD$TA fT$RH$@˂Hx臇H$@DHx賀H$豎A H$˂HxEH$DHxqH$ oI H$ ˂HxH$ DHx/H$@H$0HDŽ$7HpzL$H$0L袍H$0HxH71 ӂL'H$H$@HpH$@LNH$@HxH7 ӂLӆH$`H$PHpʄH$PLH$PHxH7Y ރLH$H$`HpvH$`L覌H$`HxH7 H$ H$pHp4H$pLdH$pHxH7 LH#H$H&H$H$aӂH$H$A H H$H$ԋH$HxH7 H$HxH7 H$H"H$HHV讏HFH$H$11HPYH$H$ <jH$H$%H$HxH7 H$H$ԂH$H$A HH$H$躊H$HxH7 H$HxH7X H$HH$HHV蔎H,H$H$11HP?H$H$H˂H$H$A <HH$H$H$HxH7H$HxH7[H$H$uӂ葑H$H$A H^H$H$iH$HxH7H$HxH7H$H距H$HHVCHۍH$H$11HPL$H$}ӂLH$ӂjH$ +H H$H萈H$H$ uӂfH$ H$0A H3H$0H$>H$0HxH7H$ HxH7\H$H茜H$HHVH谌H$H$11HPÀH$H$@ӂ虏H$@H$PA <HfH$PH$qH$PHxH7H$@HxH7oH$H$`uӂH$`H$pA HH$pH$H$pHxH7H$`HxH7H$H;H$HHVNJH_H$H$11HPrH$H$ <胀H$H$>H$HxH7%H$H$тH$H$A HH$H$ӅH$HxH7H$HxH7H$H!H$HHV證HEH$HxH7,H$HxH7H$ 6rH$)rH$@rH$rH$`rH$5H$(H$HxH7wH$HxH7FH$ dH3%(nHĸ []A\A]A^A_D̂L&~L$LLcLeŝL}@̂L}@6A,E1E1+fH6H9A,@JgDDDDL$ LL$ LȖL$ L谖;L$ L蘖L$ L耖L$ LhL$ LPL$ L8L$ L LLH萃H$HxH7tLH$H$H$HxH7t H$觕H$HxH7t Ht$舕H}H$sfDH$[wfDLHL8L(rLILL(LLؔLȔ[L踔L訔nH$蓔GfDH${fDH$cfDH$KbfDH$3fDH$efDH$fDH$4fDH$ӓfDH$軓[fDH$裓fDH$苓fDH$s)fDH$[H|$蹴H^qLHxH$ HxH7OH$  =HHkI$LP~HH}H$HH$HxH7t H$ 覒H$HxH7H$ 耒HHH$HxH7HHH$HxH7HH$HxH7oHH$HxH7t H$ H$HxH7/DHHH$HxH7 HH$HxH7I|$HHH$HxH7tLXH$HxH7H$HxH7tL"H$HxH7t H$H$ jH$jH$@jH$jH$`jHH$pHxH7tL蚐H$`HxH7BLy5HH$0HxH76H$K$H>HHH$HxH7HvHH$HxH7t H$H$HxH7uHHH$HxH7t H$裏H$HxH7h-HHH$PHxH7tL`H$@HxH7HHH$ HxH7HHH$PHxH7HH$@HxH7zHHHHHHHH$0HxH7LL~?HH$HxH7;HH$HxH7t H$3H$HxH7HHH$pHxH7HH$`HxH7vHH$HxH7t H$詍H$HxH7n3HfDf.@f.@f.@f.@f.@f.@f.@HHtHH@fDfD1f.1f.HHtHH@fDfD1f.1f.1f.1f.G(f.HV0HHDHV8HHDqf.{qf.kqf.[qf.Kqf.;qf.+qf.SH HdH[f.@SHHdH[f.@SHHdH[f.@SHHsdH[f.@HPt@SHHPtH[wpHt@SHHtH[GpHt@SHHptH[pHTt@SHH@tH[oS(tiHHPHPHP pAHKHwSHHHwxHH9H`HH[HOHAHHHw.HH9At|DH[@AtjHH9tkHH9uAHvHHiAHUEHuAH[@EHu[AsH[z@S(tiHHPHPHPpAHK@wSHHHwxHH9H`HH[HO@AHHHw.HH9At|DH[@AtjHH9tkHH9uAHvHHiAHUEHuAH[@EHu[AsH[ @ATUSHHHoXHPdH%(HD$1HtADEtrHC HxH7HCHxH7HCHxH7H{HH7HD$dH3%(H[]A\ÐHEHPDe AtHEHHPHkNuQPXf.Ht$趆THt$覆YHt$薆^Ht$膆c5eDATUSHHHoXHPdH%(HD$1HtADE~HC HxH7HCHxH7HCHxH7HCHxH7H"kHD$dH3%(H[]A\DHEHPDe AhHEHHPHkNuQPLf.Ht$fHHt$VMHt$FRHt$6WcDATUSHH_dH%(HD$1HHH@H= bHkXHPHtADEtuHC HxH7HCHxH7HCHxH7HCHxH7uuHiHD$dH3%(H[]A\HEHPDe AqHEHHPHkNuaPUf.HfHt$|Ht$1Ht$փ6Ht$ƃ;ubDUSH@HdHuHxH@8PzxHgH\H}HHC0zxHH{tHH@H=lNuCG@HE .bHHHCPHC8HC HE(HC(E0C0jHHHHlH{qHCkH[fLIz@USH@HcHuHxH@8PzxHgH[H}HPHC0zxHH{tHH@H=lNuCG@HE 0.b`HHHCHC8HHC HE(HC(E0C0iHHHHPkHpHSjHZfLIz@USH@HbHuHxH@8PzxHgHZH}HHC0zxHH{tHH@H=lNuCG@HE ;b HHXHCHC8HC HE(HC(E0C0hHHHHjHoHciHYfLIz@USH@HaHuHxH@8PzxHgHYH}HHC0zxHH{tHH@H=lNuCG@HE HH7t Ht$9nHVH\$ HSHiEOH\ HHHH|$ G뮐AVAUIATUISHAHdH%(HD$1fExfA~hEAt`HAMSALLHXZAML1HLHL$dH3 %(HuH[]A\A]A^MLHHUHzH7t Ht$7mHUf.DAWAVEAUATIUSA։HH$dH%(H$1^HDOƄ$xH|$@HDOHDŽ$D1HDŽ$pƄ$yH{HDŽ$HDŽ$HDŽ$HDŽ$H\$@HLH$HD$@X8HDŽ$8HD$HAHD$PHD$XHD$`HD$hHD$pHD$xeWHD$@Ht$HHD$HP5DŽ$HDŽ$7HxXLHD$@Ld$@L`A$UE$H@H|$@LcDLdPJHD$@H|$0Hp1PHD$0H|$ HhHD$@HpL)PHD$ HHH9Ht$ HHL9^HD$ HxH7HD$0HxH7H$HD$@X8HDŽ$8HD$HP5HxH7H$HD$HA \HCHBOH$H\$@HT@HDŽ$DTH$dH3 %(LHĸ[]A\A]A^A_fDI$HHT$HL$y8tAƄ$|H(MHD$HH@0H=@PuDHD$@DHt$ifHt$ iHt$0i H|$H|@{1BHdHIH8HD$ HxH7t Ht$~iHD$0HxH7t Ht$biH|$@DHQH HH"H|$HG H\$@HCHAOH\@HH$HDŽ$DvRH^Qf.@AWAVAUATIUSHHH|$hdH%(H$x1YH@OƄ$HH|$L%@OHD$hD1HDŽ$@Ƅ$IH{HDŽ$PHDŽ$XHDŽ$`HDŽ$hH\$L'qHH|$PHD$X8HD$h8HD$AHD$ HD$(HD$0HD$8HD$@HD$HFSHD$Ht$HD$P5D$XHD$`7HxXGHt$ H|$DuD} D$ MmXHFHt$ HD$ .XDHFHt$HD$.pXDHFHD$LHpKHD$`HD$X8HD$h8HD$P5HxH7u_H|$PHD$ATXHCH|$hH\$LdHD$hDCPH$xdH3 %(Lu!HĈ[]A\A]A^A_Ht$fWEH HH-H|$.AHNH|$| HCH\$HLdH|$hHD$hDOHNSH HCH[f.@SHH#H[f.@SHH˂H H|$dH%(HD$1VHt$H)?HD$HxH7u'HD$dH3%(HuH [f.Ht$e?DHHD$HxH7t Ht$`eHMSHHdH%(HD$1HGHxH7uOHCHxH7uNHCHxH7uMH;HH7u]HD$dH3%(uYH[Ht$d@Ht$d@Ht$dH;HH7tfDHt$dGCHHWLGHt3LHHRHt9J }HRHuI9t9H ~ ̂KfH(HHHL Iw)IL9tJHHHw L9t HDHHH9tHH9uHH9u=HDHH9tIwH9tH9uH9tHfDuWuNuEHH?u:HcHcHiHHH)HcHHHi@BHf1)HcHHHHƉ1)HcHiH1)HcH)HHi@BH?H1H)H)fHHHHwIHH9t/HHV?2HHH?H"H)H`HH)HH@HH9HEHHSHHG8HHPHG0zxH XHPH[Kfff.Hf.LIzSHHG8HHG0zxHWHH[,Kfff.Hf.LIzSHHG8HHG0zxHLWH[JHf.LIzSHHPHG0zxHWHHPJH[,Ffff.Hf.SHHHG0zxHVHH5JH[Efff.Hf.SHHHG0zxHdVHHIH[Efff.Hf.SHHHG0zxHVHHIH[HHCHD$dH3%(u(H[]DHfHt$FY7f.DH'USHHHoHPdH%(HD$1HG0zxHtDHEH@ H=ЅNu_m@u.HE8HE{xHxH7uPHuH}MH=HPH!@IHHD$zHD$x8AƇjH|$0^[L>Ht$H|$0D$-'>I$fDIHHD$HD$x8AƇIHHD$HD$x8AƇH|$0)t|=HD$0Ld$0HPHD@L`A$H|$0AƄ$0H,H|$0 x[4=Ht$ KfH|$.HD$HH@0H=@P H|$DH|$.HD$HH@0H=@P H|$DH|$v.HD$HH@0H=@P H|$DM$MA8tAƄ$fL.IH@0H=@Ptپ L)c*HY*T*H*H|$0%H-3H|$8HEHl$0Ll0H$HDŽ$D 4H2H)f.ATUHSHHcH dH%(HD$1HHHw4HH9tHHL$dH3 %(H []A\@Ht$HD$EAăuEtHfHHH$ uuHHH$uu Ht$HHD$uEtH=fDH((f.fAWAVAUATIUSHHH$dH%(H$x1T/$I HƄ$H0HDŽ$HDŽ$H@H=bS HsH|$ !Ht$ H$HV9HD$ HxH7iHHhHHb HC0Ll$0HD$0H$LHDŽ$ Hb HC0H$H$H),Ht$H$D$+HHH, H?HH)9HHHRHD'HL@HIb0 HC0HD$PHt$PH)צC9c*HHH 2H?HHH)HHHH?HHH)HHHH9& Ib HC0H$H$H)צC9c*H$D$:HHH 2H?HHH)Ht$HHHH?HHH)HH,HH)7HHHRHD&HH@HH=b HC0HD$`HL$`H4ׂCHH?HHH)HHHHHH?HHH)HHHH9 H$H9CPHH@H=b` Hs H|$p*Ht$pH$HV$7HD$pHxH7 HHhPHb* HC8L$H$H$LHDŽ$y HbL HC8H$H$H),Ht$H$D$+HHH, H?HH)e6HHHRHDk$HL@PIb/ HC8H$H$H)צC9c*HHH 2H?HHH)HHHH?HHH)HHHH9IbJ HC8H$H$H)צC9c*H$D$:HHH 2H?HHH)Ht$HHHH?HHH)HH,HH)D5HHHRHDJ#HH@PH=b HC8H$H$H4ׂCHH?HHH)HHHHHH?HHH)HHHH9$HH@PH=b HC8H$H$H4ׂCHt$H$D$:HH?HHH)HHHHHH?HHH)HH,HH) 4HHHRHD&"x@IbHC8H$H$H4ׂCHH?HHH)HHHHHH?HHH)HHHH9 Hs@H)צC9c*H),HHHH?H 2HHH)HHHH?HHH)HHHH)HHT$HH,2HsPHH)H HH$PNL$L$HDŽ$7M}xL#ML11LHt$H$D$,2H$HHV2Ht$HD$/q2HHHRHDw Ht$HD$:@2Ht$HHRHDD H$HxH7H$HxH7HK@H4ׂCHH?HHH)HHHHHH?HHH)HHHH)HPHsHH)צC9c*H),HHHH?H 2HHH)HHHH?HHH)HHHH)HHT$HH,2HsPHH)HHH$P(NL$HDŽ$7M}x H$!H$ML11Ht$H$D$,0H$HHV0Ht$HD$/{0HHHRHDHt$HD$:J0Ht$HHRHDNH$HxH7UH$HxH7$HKHH4ׂCHH?HHH)HHHHHH?H HH)HHHH)t6Ht$H$D$:/HHHRHDH$LHp"H$a,H$`HDŽ$X8HDŽ$h8HDŽ$P5HxH7H$PHDŽ$A;/HOHOH$hH$H@HHDŽ$hD'H$xdH3%(LHĈ[]A\A]A^A_@H$XH}8Ƅ$IBIbcHC0HD$@HL$@H4ׂCHH?HHH)HHHHHH?HHH)HHHH9HL@H`fDHbHC0HL$HH$HH,H9t$HH),HHHH?H, H)Ht$H$D$-T-9HbHC8H$H$}H),HHt$HH$D$-H, H?HH),xDLl$0HLHHhH(HH|$PAHL@HHH|$ HH$ADHH$ADHH$AfDHt$H$D$:,,HHHRHD2uDHH$AHL@PfDHH|$pfL$HLHHhP@HHEH@0H=@P HDHH$fDHH$fDH$#:fDH$ :fDH$9fDH$9fDH$9fDH$9fDL9HH@HH=buHC0H$H$H4ׂCHt$H$D$:HH?HHH)HHHHHH?HHH)HH,HH) *HHHRHD&HH|$`,HH|$@AL$HLH$HHH H$LHDŽ$,H$LHDŽ$@JgDHH$;fDHH$fDHH$fDHH$m/Y?HHL@PHH$%H$QHHHH!HD$ HxH7tH$g7HD$pHxH7tHH$HxH7tL-7H$HxH7YL 7LHH$HxH7t H$6H$HxH7 LAVAUATUHSHH|$0Ht$dH%(H$1HL$0H|$HHqXH|$'t$H|$03H|$!HD$0HT$H|$ HpXH|$ 'H|$}'HL$0HT$0Dd$ HQHH{8_[iHBLl$0LiAtH|$0AAH$xDd$ Hn{8DkiHT$0H\$0HBHD@HZ耻9H|$0DA4HD$0HHpH$HD$0X8HDŽ$8HD$8P5HxH7H|$pHD$8AY&H OH OH$HD$0H@HT0HDŽ$D4H$dH3 %(HiHĠ[]A\A]A^f.HHH@0H=@PHL$0HT$00HQrDMM A~8tqAƅh@LMA~8tyƃDHHA0H@0H=@PV0HADDLIH@0H=@Pt LefDLIH@0H=@Pl L]fDHt$ f3U0HHL$0HT$0HQVHH|$y$H|$0 HgHfUSH@HHdH%(HD$81HuH|$HH$= Ht$H{HD$HD$ HD$(D$0H$HD$HC8PzxH= H|$HC0zxHH{tHH@H=lNu\G@HD$ Ht$H{HXHCHC8HC HD$(HC(D$0C0|FHd9b HHH HH4H\ H$H HH H Hf.fUSH@HHdH%(HD$81mHHH^Ht$H{HD$HD$ HD$(D$0H$HD$8HC8PzxHg H|$H=HC0zxHH{tHH@H=lNu\G@HD$ Ht$H{HHCHC8HC HD$(HC(D$0C0EH(.bH6HH HHHHH@ HHHf.fUSH@H= HuHxH@8PzxHgH H}HHC0zxHH{tHH@H=lNuSG@HE HuH{HC HE(HC(E0HHCPHC8C0DHHXHH[]@H H$H)HHHHH6HHHXHH[]@H HH"HHmHuHHܐLIz@USH@HHuHxH@8PzxH=HH}HC0zxHH{tHH@H=lNuRG@HE HuH{HC HE(HC(E0HXHCHC8C0=HHXHH[]H HH"H HuH}HHkfLIz@AWAVAUATIUSHHI1Mt\HMt$tcA0HHELLHDHC HEHE7HC(HE7ID$(HغH[]A\A]A^A_fM9tH}Iu H_L~HI9IFuL)HHZxE1T0A!HIfUSHHHvHHHGgH}H;HC0zxHH{tHH@H=lNu4G@HE HC HE(HC(E0HPHCxC0H[]@HHHJHH:HfUSH@H-HH@8PzxHH':b HHHCHC8HHHsH;ff.LIzUSH@HHdH%(HD$81HHH?SHt$H{HD$HD$ HD$(D$0H$HD$HC8PzxHgNH|$HHC0zxHH{tHH@H=lNu\G@HD$ Ht$H{HHCPHC8HC HD$(HC(D$0C0@:H H|$ Hf.fUSHHXH7dH%(HD$H1f. fTf. vlfPЃuSHl$ IinA@fIfA@7HPI)H1HHL$HdH3 %(HHX[]ÐHl$ D$ -LEHl$ A<̂HYLcII9HH$p{HD$6HD$ |HfPЃt/Hl$ D$ -LEnaA@nIfAP)H@Hl$ IHH$p{H;HH7tHHHHf.fUSHHHOHHt#HHC(HH[]H9t1B 9E @DUSH@HHdH%(HD$81 HHHJHt$H{HD$HD$ HD$(D$0H$PHD$xHC8PzxHgH|$HPHC0zxHH{tHH@H=lNu\G@HD$ Ht$H{HHCHC8HHC HD$(HC(D$0C01H0.b`HHH'HHPHH HQHHHHDATUHSA$IH0WH|$dH%(HD$(1V|$ fD|$Gw 1lj|$]fHIH HHAƿ*A)DADD))ЍRDDAffAtEDEi{AD)Ai> A ))щA)))1ff$f9u D$Af.Pǃw @ADǃ9u|$eHfD$ H Hf;UfD$$fT$"tD$Pw PE‰D$H\$(dH3%(D$uH0[]A\Ë|$Ha  )fփ{HeDֿ'Q11Qx^1ҿx^D޿`11`HH|$ HD$ nHD$HxH7t Ht$ZHfATUHSHHpH|$dH%(HD$h1hHt$0H|$HIfH f,@Pf-f AD$lfwWf'iH|$ PIcT$IcD$Ic $׉@@HiH4HH)H‹D$ HHi@BHN6HH9H`HHHEHMHHL$0HD$8@HD$8HHT$0HHCHSt@H|$8HH\$hdH3%(Hp[]A\1)HcHHHH1)HHiH1)D$ HcH)Hi@BHHH9uSHH9uDHHEfHHKHC/@HuHH Nu11]H|$HT$ǂs Ht$H|$ H|$ zHA11M1҉ƿxI[J]ƿx)[H H|$ :HD$HxH7t Ht$HffDHHHHHH9HHV?2H?HHH"HH)\]HHH HI*f)H)A)֍RLgfffiəimffi{i> )0ӂHH9f.f.AWAVAUATUSHHHH4$dH%(H$1<\H|$pIIII IfD$ fDd$"fDl$$HL$pH\$`HHqXHHH|$pAHLt$PzHD$pHLHpXL^HVHT$pHD$pHBLMA~8ME~iH@Lt$pLrAH|$pEAtL$MGA|$8Et$iHD$pLd$pHPHDŽL`A$lH|$pE$AHD$pLd$0HpLH$HD$pX8HDŽ$8HD$xP5HxH7QH$HD$xA+HNHNH$HD$pH@HTpHDŽ$DH$HHH3HH9 H|$@HLt$P趭Ht$@L艾LHNTHHT$`HD$PHJHHpH;rLHHHUH7HD$`HxH7HD$PHxH7hH|$0HH7H$dH3 %(HWH[]A\A]A^A_fDLxIH@0H=@PHT$pHD$pA0HB@HD$07HD$07HH7HEnHaIHHD$HD$x8AƆ6M$MA8thAƄ$nfLI$A0H@0H=@P0LA @H;pa1L4]LPIH@0H=@P} LnfDH|$HD$HH@0H=@P H|$ DH\$`Ld$0x[HL;H\$`Ld$0n[HLH\$`Ld$0^[HLvH 0LHT$pAHD$pHBHX Ht$F cHHHHuH|$pHcHHHD$`HxH7t Ht$ HD$PHxH7t Ht$ HD$0HxH7t Ht$@ HHAWAVAUATUSH8dH%(HD$(1HHxwIH|$IHHH|$yHD$HxH7AfDf DwWHH੔ujH҃9|wHA)A u T~;A)A uD~A)A c륐IEHxtH|$HLHH|$xAHD$HxH7fDf AwOHH੔ubHD9}vHA)Ń u SA~BA)Ń uDA~"A)Ń kfFf-A0fA(ZHH@fXfhIH@fDh fDp"H$HD$HD$HLxH|$HT$@@ HD$HT$H$HT$H|$IL$PHD$H$ID$PID$XIT$XHL$HD$H|$HD$(dH3%(H8[]A\A]A^A_HE H8 HoB11aBHD$HxH7tHHO1ɺ|@{1EHILPHH|$HUSH@HHdH%(HD$81}HHH5Ht$H{HD$HD$ HD$(D$0H$HD$HC8PzxHg.H|$HHC0zxHH{tHH@H=lNu\G@HD$ Ht$H{HHCPHC8HC HD$(HC(D$0C0 H設.bHFHH'HHHqHHHIHHHGDSǂH@H|$HT$dH%(HD$81Ht$H|$ hHD$HxH7uH|$ HD$ CHt$HHH|$ HD$ ZHHD$HxH7tHt$@SHH?1PfЉfimfɍ 3i{)ʉi> ӂt=pvMt0ts t"w}txta)ȃt titQ@@t.}w)ȃtf=nwH[t11]DH[f.USHHHHXdH%(HD$H1\‰D$@vNHT$0H|$ ^̂D$H|$ ̂1HHNHHfD$ HH |$fT$"҃-lfL$$ɉSCK \NHHIHfD$0Aƿ*I A)fDD$4EDAft$2D))эRAȍtffAi{i> A)D))Ѻ$I)))1ff$H|$KJHuCHHHHH9HHV?2IHHH?H"HH`H)HH),H)HHHHII?H42H)צC9c*HHD)H< HL)HIHH?HHH)HH@HL9tPHE;Hx.} }E@M$/}H1[]A\A]A^A_DHIHEA8HD$HEHxuxf.}tu@HEM<$HxA?}MIM9M$HEA8Hxt@H|$1Hf}M<$HUAHz=}t"AMMt IXI$IHEM9MHD$t6HEA8Hx(}M$EM@1HHM$fI$L@M$Ek@1HHM$CM9L;;@1HHfDHUM<$HzA}/MIM9M$HEA8Hx@H|$1+HHEM$HxE8u?}ALD$LD$utDM1IEE1HPWH}A1HM<$EM$M=1HHM$MMH}1dHM$@ATUHSHvHH@H|$dH%(HD$81HD$HuHxE Ht$HLeD$ E!D$!E$D$$E(HmD$(HD$H{HpD$ Lc Hk(C0HC87CD$!CD$$CD$(C1L9tHK8Hs HHOC0HD$HxH7u2HD$HxH7u0HT$8dH3%(Hu)H@[]A\@Ht$@Ht$HH8HC8HxH7t Ht$HxHH|$xHH;HH7tHt$HHHD$HxH7tHt$uAWAVAUATUSHH8dH%(H$(1HH|$HxH$H$ Ƅ$$Ƅ$ -Ƅ$!:Ƅ$",Ƅ$#.HD$07D$HD$0HxHHt$0D$@D$AD$DD$HHD$pH@HD$xHD$pHxHD$pHt$8HxD$@Ht$pH$$D$A$D$D$D$H$!11HD$fD$HD$pD$E1L$LpHD$PL`AD$r1H$H9$H$HxH7qH$HxH7@H$HxH7@&ui$H$HhH$Hp8H|$ 19H|$ oHD$HD$ HxH7@$KH$H$H$Hp H$H|$PLLL$Ht$PH$Hl$xD$`$D$a$D$d$D$hH$LHxrD$`H$H$HDŽ$7Ƅ$$D$a$D$d$D$h$HD$XHxH7HD$PHxH7$$8@$H$Hx8yTD$1@$H$Hx8ifD$O$H$Hx89A!Ht$ &>Ht$ Ht$P@gDH$t|$-At$HL$|$iH\$HH$sH|$0sH$(dH3%(HD$\H8[]A\A]A^A_@Ht$PnfHt$PVHx81ɺ)f9uHcHHT$H$H9$@ H$耂H$H$FH\$HHH711}1HD$0HxH7t H$vHHD$ HxH7H$rH$^rH|$0TrHHHHH$HxH7tH$H$H.H$HxH7t Ht$ H|$PqeHD$PHxH7OH$=HAUATIUSHHH$H$ H$@dH%(H$11f$#H$fHNƄ$H$`L%NHDŽ$D1HDŽ$Ƅ$H{HDŽ$HDŽ$HDŽ$HDŽ$H$`L'H$HDŽ$`X8HDŽ$8HDŽ$hAHDŽ$pHDŽ$xHDŽ$HDŽ$HDŽ$HDŽ$H$@H$H$0HDŽ$hP5DŽ$HVH$H$h11DŽ$H$`H$hHxXH$@HxH79H]ILcHD$7HD$ 7$@Ht$ H$`H@l$ ;込uH$hH|$0Ht$0H|$)HD$0HxH7H$0H$H|$@Ht$@H$HV1$H$tHNH$h1HD$@HxH7hI9u.@Ht$ H$`H@l$ I9t;ٻtH$hH|$PHt$PH|$`HD$`IE0HD$PHxH78H$0H$H|$pHt$pH$HV1$H$tHNH$h1HD$pHxH7Im0H$@HPH$@HH$0H HH$0跍I9AE(;趺t%Ht$ H$`H@l$ RI9uH$hH$H$H|$ H$HxH7H$0H$H$H$H$HVG1$H$tHNH$h1H$HxH7VL9fD;边u%Ht$H$`H@l$ZI9uH$hH$H$H$H$IE8H$HxH7H$0H$H$H$H$HV@1$H$tHNH$h1H$HxH7I]8H$@H(H$@H芋IE8H$H$H$ H$H$҂H$H$0QH$HxH7H$0HDŽ$0_H$0H`HH$0֊LHt$H$@苶H$HHt$yH$PHt$ gH$XHt$ UI}H$@$H$HI}H$PI}H$XI} H$@wHD$ HxH7uaHD$HxH7u@H$`sH$dH3%(H[]A\A]øIE8 H$@H$@tH$0eH$@S+H$@AI9H$@&4H$@H$@5H$@H$@H$@WIE0H$H$H$H$H$ uH$ 轴H$H$h{~HCH$`HL`H$HDŽ$DH$@HxH7t H$0HqHHHH$0HDŽ$0H$HxH7uxHD$ HxH7t Ht$HD$HxH7t Ht$ H$`9kH$ HDŽ$  H$HxH7tH$@IvH$@7ZH H H6H$HxH7H$(HxH7t H$0H$XH|$PX H$HxH7tH$0YHHFHHHHWHHzHD$pHxH7 HD$PHxH7H$0qH$pHxH7KH$pdX4H$pW"HHH$0WH$0HxH7H$[HH$WHHH$FWH$HxH7HH$WoH貢HHP褵HxHVH HVH+H$HxH78H$0&H$HxH7t H$0eH$xVHH$0VHH(HD$0HxH7H$0 #H|$()y@ATUISHH1HdH%(H$1H$H$pH$f$HDŽ$7HxƄ$/jI$H$Ƅ$Ƅ$DŽ$Ƅ$H$PH@H$XH$PHxFH$PH$Hx-$H$$p$$q$$t$$xHEH$H@H$H$HxH$H$Hx訠$H$$$$$$$$H$PHpTH$H$hHx;$pH$H$L$PH$X$$q$$t$$x$۟H$H$HxŸ$L$H$Ƅ$HDŽ$7$$$$$$$1L9tH$H$HHp HH$$9SH$H$HpH$H$Hx$H$H$L$H$$$$$$$$藞H$H$Hx~$L$H$Ƅ$ HDŽ$(7$$$$$$$1L9tH$H$(HHp HH$$ Q$H$HHp8ÝH$HxPx HզH$Hx(H7@Mk@J$ C$5H$Hx81AH$Hx81At$H$0HcuH$0Hc(HHH@$8H$HDŽ$HD$pfE$:HEfE$8fE $:fE"裞H$H|$pH@@ HhH$HT$p{H$H$H$xHKPHDŽ$HDŽ$HCPHCXHSXH$pH$x&H$$H$H$H$Hp H$ $H$H$H$(Hp Hn$ H$PH$HpnH$H$hHxU$pH$H$0H$X$ $q$!$t$$$x$(H$0H$Hx$ H$H$PH$XHDŽ$h7Ƅ$`$@$!$A$$$D$($HN$`$H$0N@HH'HC@Hk@H$pHDŽ$pHNn;H$0H`HH$0#nH$H$0HpљH$0H$Hx踙$H$0H$pH$$@$$A$$D$$H`H$pH$8HxG$@H$0H$H$HDŽ$7Ƅ$$$A$$D$$H$L$}$ tH$H9$]H$p@M$ jH$H|$0Hp8HD$0HCHHkHH$pHDŽ$pHl1H$0H`HH$0XlH$LH$LH$LH$`KH$KH$dH3%(H[]A\$tH$H9$PH$0+L$UH$H|$Hp8HD$HC@f$ H$pK@HH'HCH$ $H$H$(HHp8$ $H$H$(HHp8H$p{fDH$H9$XH$0J H$H9$H$pJsJɛHCHHt$`H|$@HD$`Ht$@H$VH$H&HC@Ht$PH|$ HD$PHt$ H$VH$ӕH11}1H HHHHH$HxH7utH$IH$IH$>IH$`1IH$$IH\H$HDŽ$胥HD$ HxH7tH$pĻzH$HxH7aH$HDŽ$+HD$@HxH70H$(HxH7t H$pQH$dHH$WHHHH4HdHH4H$pHxH7t H$0H$0GH$0HxH7yH+H$HxH7H$p莺H$0HxH7t H$pgH$zGHBHH$HxH7t H$p(H$;GH$.GHHH$HxH7tH$pݹHHH$HxH7H$p訹xHHxH$HxH7_H$ppMHH,HEHPH$HxH7H$p'H HH+H$.H$HxH7H$pӸH_HH$`HxH7H$p蝸ATUASHHHdH%(HD$1HcHHH)Hi@BHHH$eDHڅxHcHHH)Hi@BHcHHHHHHi@BHHH$$eDH\$dH3%(u;H[]A\fDHcHHHHHHi@BF@1GAWAVAUATIUSHH:dH%(H$1H4$HDŽ$HHDŽ$HH@0H=bG(H$3ImHHEH@PH=bHE8HD$`HEL`@zHf$Hf$HH Ibf$}(H}PHHR HUHD$HD$pHt$H$HT$pH1H$IJ!HHIH9t2LHV?2I?HH`H"L)ILL)IImHHELp@Hf$Hf$HH Ibf$}(H}PHHR HUHD$ HD$pHt$ H$HT$pH8H$HD$PH|$PAM}AM8IHh8Hf$Hf$HH H0bf$A(EIPHHQIW@D$0HD$pHt$0H$HT$pH艽H$HH)HHHH9t2HHV?2H?HH`H"H)HHH)HM}M?ILh8Hf$Hf$HH I0bf$A(\IPH HQIW@D$@HD$pHt$@H$HD$HT$pH苼H$HD$HT$pH葟D9HL$`sU9 D9DH$苡1H$dH3%(rHĨ[]A\A]A^A_9sD9w9wD9rHI),I)צC9c*IHII?H4 IHL)HHL)IHIHH?kfD'fDfDfDHLcHIHH?H *IHH)HHH)HIHH?kHT$0Ht$ H|$8QIuRH]HHLHh8HfD$0HHfT$2HH fT$4H9D$gE1_f.HH9HE?f.HIH9t IHHH9HD$0HH9EHH9rHH9OIw9HH9&HH9IHfLl$L×PwjfHA9fDE1:ILl$LlPaHH9tHH9ttHH9HH9u IB=H"Iv@H|$0@H]HkHLLp@褖MH‰fD$0HHfT$2HH fT$4AHuH#HHRPHbHV8HT$0HT$HHt$0H< HIL9HH L9HH9@fIHhI&HH9iHHH9IHHH9CH9:IL9L9IAL9u EH EmHH9 H@HHHiHH9@IHH9IHD$H|$0HD$<pHHHH9HDUHMeHH|$8bH芐HH f.fUSHH(HwdH%(HD$1HJHH@HH=b'HF0HD$HHHL$H4H~HH9kHHH9HHH$#HsHHH@PH=bHF8HD$H$HH HHHH9t3HHV?2HHH?H"H)H`HH)H, HH9HD$HHHtH9XHHH胒PH݃HwwHH9H`HHH$H$H|$dH3<%(jH([]@HH PvHH9>HH9+"HH9HH9u H^@H?fDHHH9t HHHH9-HD$HH9HH9HH9Hw1HH9HH9CHHÐHȐPHHbH|$@HQHuH|$/@HHHw-HH9DHHHH9hH9_HH9H9I@L9u @H@HH97H2@HHH9DHH9VHH6H9tHC\@HH9HDHH3THHyHH[HtH3H$fDUSHHHvHHHG0PzxHGgw{H}H;HC0zxHH{tHH@H=lNuLG@HE HuH{HC HE(HC(E0HHCHC8HC0nH[]H HH HłH-HzHHFH f.USH@HHdH%(HD$81}HHHyHHHF:b HH HHjFHH芉f.ATUISHHՉH@HdH%(HD$81HHD$H$PHD$xLd$ Hl$(\$0%HHEHfAUATIUSHoHHHPHH$dH%(H$1JH{H$4H{H$H{ H$1H$H$f$HD$`C(HC0HC8HxHC@HCHHCPHCXƄ$,HD$`7蛔I$Ht$`D$pD$qD$tD$xH$H@H$H$HxxH$Ht$hHxpxD$pH$$D$q$D$t$D$x$H$Hp(xH$H$Hxx$H$H$L$L$$$$$$$$wH$H$Hxw$L$L$Ƅ$ HDŽ$(7$$$$$$$1M9tH$H$(LHp H$ H$HxH7yH$HxH7xH$H$HpvH$H$Hxv$H$H$0L$$$$$$$$NvH$0H$Hx5v$L$PL$XHDŽ$h7Ƅ$`$@$$A$$D$$HH$HxH7uH$HxH7$`$ H$H$psuH$pH$HxZu$H$($$$$$$$H$H$H$H$$ $H$pHx8t$ +H$H$H$(Hp H腩$$ H$pHHp8ܶH$p){(5$`$  H$H$4tH$H$Hxt$H$($$$$$$$H$H$H$H$$ $H$Hx8s$ H$H$H$(Hp HF$$ H$H$Hp88sH$'$`tq$ [H$H9$Pu[H$H9$XuIH$pH|$ ҂討Ht$ H|$P)H|$Pq ɂڂ$ tH$H$Hp8rH$H$HuH$HxH7H$HxH7tH$*f.H$0&H$&H$HxH7H$HxH7HD$hHxH7HD$`HxH7H$dH3%(H[]A\A]$ D$ !H$H9$P H$H9$XH$pH|$`ɂHt$H|$@xH|$@m ɂڂH$H9$PZH$H9$XDH$pɂH臌H|$0H H|$0h ɂڂaH$sfDH$[ufDH$CvfDH$+yfDH$ffDH$ fDH$ fDH$˖fDH$p賖bfDIIIŷDuIpH|$@UvHD$HxH7ueH$0$H$#H$\#H|$`R#H{XYH0Ly~H|$0uH$HxH7tH$IrH|$PuHD$ HxH7t H$辕H$HxH7BH$p蘕0IIH$,#H$HxH7tH$pUInIIH$HxH7H$IIH$HxH7H$IH(HD$`HxH7H$讔wHCHxH7t H$苔HCHxH7t H$mH{HH7t H$OH|II|H$HxH7wIH$p!IIH$pHxH7zI'I4H$0HxH7t H$謓H$ DH$HxH7+H$tII"H$HxH7t H$CH$V HHII1H$(HxH7t H$H$ H$pqIInI'H$EUSH@HHdH%(HD$81}sHHHHHHD$HD$ HD$(D$0H$PHD$xHX7:b HyH HH67H莀HVzfDUSHDGdH%(H$1O fA>*)Eȉ) )f 0ӂv-fA9rH$dH3%(VHĨ[]fHHѺutufi{ f9ufi> )f҃W@f@thH|$0vH|$0ԂRvH't)t|H:vHD$0H|$HptHl$ Ht$H腅HmDfi{f9&fi> f9KHKqnH|$HT$YHl$ xHt$HhHHD$ njHEHQHHCoHD$HxH7t Ht$GH|$0iHwHHHD$ nxHD$HxH7tHt$ĐHHHf.@HHHf.@HvWxjfAHtG~fDGPWnfffff.SH H`H81dH %(HL$X1pt?1҉Ǿ1itEHt$qtHT$1D$D$#sHL$XdH3 %(u:H`[HhuHHsH~blHHw~Hufffff.tjfffff.AUATUSHHHztPI1E1 DLpoIUD2$H;ZsByD2$H;ZrHD[]A\A]E1fDAUfATUASHHdH%(H$1f.,fH|$ *\YD$r$$Y$/H|$ Ƅ$X0HDŽ$kD$H|$ HDŽ$HDŽ$vEH|$ "}HD$ HHppHD$pHD$ X8HD$x8HD$(P5HxH7H|$`HD$(A }H~cNHcNH|$xHD$ H@HT HD$xDtH$dH3 %(HHĘ[]A\A]fDH|$ a|:@L$hMtoA}8t,Ƅ$Y E1fWC@LmIEH@0H=@Pt L@Ht$&|i'jH|$ HZeHsfAUfATUASHHdH%(H$1f.,fH|$ *\Y7D$|p$HDŽ$$Y$#H|$ Ƅ$X07iD$H|$ HDŽ$HDŽ$tEH|$ N҂zHD$ HHpQnHD$pHD$ X8HD$x8HD$(P5HxH7H|$`HD$(AzH.aNH/aNH|$xHD$ H@HT HD$xDrH$dH3 %(HHĘ[]A\A]fDH|$ z:@L$hMtoA}8t,Ƅ$Y E1fWC@LkIEH@0H=@Pt L@Ht$,ggH|$ H cHpfAWAVIAUATUSHHH|$ dH%(H$1guHHHHH9=HHV?2HHHH?H"HH`H)HH4ׂCH)HHHHHH?HHHS㥛 HH)HiHH)H),HHL, H)צC9c*HIA)HHH)HHHH?L$ II)LN$HI)HHHDd$ H?H2HH)HHHH)AA HD$ ˂HxlHD$ DHxeI HD$ ˂HxlHD$ t$ HxeH HD$ ˂HxwlHD$ DHxeHD$ Hxc)t|AlHD$ HxqeHD$ LHpjH$HD$ fHDŽ$fHD$0fHD$8P5HxH7PH|$pHD$8A-wH\NH]NH$H@HT H\NH\NHD$0H@HT0H\NH\NHD$ H@HT HDŽ$DnH$dH3%(LHĨ[]A\A]A^A_f5|&kHA6H9Ż6A,DDHHDڽ@JgDDDD$ E1jpA66A,Ht$gHD^HH]HHD$pHxH7eHt$`Vfff.AWAVAUATIUSHdH%(H$x1HH|$H$@D$kH$kH|$0HD$07YfHD$@7*D$YSZq,D$ OH$`D$1HD$HT$pH|$PT~rHt$PH|$HV9i1$XH$`tHNH$1HxeHD$PHxH7Ht$0H$HxHVnnH$t$ Hxy\H$Hx#cH$t$HxN\H$HxbH$0HDŽ$xHxhWH$H$t$HHPBൃB[H$D}HXHb$IHDŽ$xILcƄ$H0HHBtH$HPBൃBy[H,b$IHDŽ$xIƄ$H0HHB,thH$HPBൃB[Ha$IHDŽ$x2IƄ$H0HHB,(H$HPBൃBZHia$IHDŽ$xIƄ$H0HHB,H$HPBൃBSZ;l$t D9gH$H|$`Hp_Ht$`H|$@aHD$`HxH7fHD$@HxHt$@H|$pHmHt$pL.HD$pHxH7H$KHx``H$0HDŽ$xHxhNUH$H$HHPBൃBSYH$Hx_H$H$Hp^H$H$HxHVjH$HxH7D$D$9D$ H$H|$Hp5^HD$@HxH7!HD$0HxH7H$ )D0ӂ,H1H9@ƃH|$ Dt$DKIfD$ HfD$"LDH fD$$&HfD$0DH HfT$2HfD$4IfD$@H fD$DH$IfDt$BHx KH$0HDŽ$xHxh@H$HxHH$0HDŽ$xHxh?H$AHxHH$pQH$H$AHHPBൃBUHH$pH$Hp IH$H$HSH$H$H$HHHQⵃQHV'UH$HxH7H$HxH7H$HxIH$HxIH$H$HDŽ$7Hp4HH$H$_JH$HxH7H$HxH$H$H"VH$HH$HxH7WH$KHxHH$0HDŽ$xHxh=H$H$HHHQⵃQAH$Hx~HH$LHpGH$HxH7H$p4HH$HxH7tH$qHH$HxH7tH$vHH$HxH7ZHH$HxH7D1H{HHDŽ$7(2H$H+.AH$1K0H$?HH?H$IH$=D[H$HIH$X=CHH$HIH$,=CHf.SHHdH%(HD$1t~<t u/t4tTHD$dH3%(uLH[fD1tѸu̹xH$,Q6f.fffff.HVHHt$H HQHHVHHPtB1fff.AHtG~fDGPW^Hfffff.H?*tCHf.H9>*ufHvWxc2fSR H HdH%(HD$1>HH0{HGHGHD$dH3%(uH [\5HHqGH>SHH HHGH|$H$HD$dH%(HD$1nDHT$dH3%(u H H[4SHHHdH%(HD$1HG0HxH7uHHC(HxH7uGHC HxH7uFH{CHD$dH3%(u9H[Ht$@Ht$@Ht$74fDSHGH[:fffff.AVAUAATUHSHH0HIEHHGАHGHGHG7HG7dH%(H$1-H$H|$Ds8DkHp8HHD$`HxH7t H$^HD$pHxH7t H$?H$HxH7HD$ HxH7t Ht$ HD$HxH7Ht$HHD$0HxH7t H$HD$@HxH7t H$HD$PHxH7hH$VHH$H?9HHHH$H?HrHfHHfHGf.SH0H'H[f.@S{HHHT$dH%(HD$1)CHL$dH3 %(u HH[,f.fffff.HVHHt$H HQHHVHHPtB1fff.AHtG~fDGPW>fffff.H?*t:Hf.H9>*ufH@vWx(fSPH HdH%(HD$1 5H?0{H>H=HD$dH3%(uH [+HH=H)5USHHfH(HdH%(HD$1*H>4`H=HK=HUHt:HHPHHUHHStBHL$dH3 %(HuH([]D1*HHH)HHD$@HxH7tHt$/{bHHD$0HxH7tHt$/ZbfAUATIUSHIT~HHhH|$PHT$dH%(HD$X15H|$@LH|$0LLD$PHL$@HT$0H|$ HHT$0HzH7u~HT$@HzH7HT$PHzH7H\$ Ht$P1H-HT$ H;\$PHzHCH7HL$XdH3 %(Hh[]A\A]øAHBbHt$0SAHBHHt$009AHB.Ht$@V0AHtVJʅ3Ht$@HD$#0HD$fBHJjfBHJ*fJqrBHJjHHD$PHxH7t Ht$`H'HHD$0HxH7t Ht$_HD$@HxH7tHt$_H@AWAVAUATIUSHHHXHT$H|$0H $dH%(HD$H13HT$H|$ H2HT$0Ht$ H|$@MuIEHD$M)Ld$@HM|$؅x?LMvMtPJHBPJH듋PJHVAHtIPЅHt$7,렺AHt0PЅqHt$ ,bPJH붋PJHHHD$ HxH7t Ht$?\HD$0HxH7t Ht$#\H #HaHHD$@HxH7tHt$[fffff.f.HUSHH߾iHH-tH2-EH[]Ðfffff.AWAVIAUATUSHH$D$dH%(H$1*HNƄ$hH|$ L-NHDŽ$D1HDŽ$`Ƅ$iHCHDŽ$pHDŽ$xHDŽ$HDŽ$H\$ Ll HD$(H{iH-N1HEHl$0H|0HsNHCL%DNL5eNH|$pID$Lt HD$ fHDŽ$fHD$0fHD$8AHD$@HD$HHD$PHD$XHD$`HD$h#I7HD$ HL$HD$8P5D$xHx`HVyHD$ H$11D$xHxg HD$ Ht$8HxhdHt$H|$ 5$D$uD$H$HD$ fHDŽ$fHD$0fHD$8P5HxH7H|$pD$HD$8A)ID$H NH$Lt HEHl$0HL0HCH\$ Ll HDŽ$D H$dH3%(D$udHĨ[]A\A]A^A_DAHt6PЅSHt$D$(D$8PJHH|$ HH9H|$8HH|$ gH$HDŽ$D HHH$HxH7t Ht$XH|$pHD$8A'HHSH\$ HLl HAWAVIAUATAUSHH|$xdH%(H$1<'HE NƄ$XH|$L59 NHD$xD1HDŽ$PƄ$YHCHDŽ$`HDŽ$hHDŽ$pHDŽ$xH\$LtHD$H{H- N1HEHl$ H| H NHL% NH NH|$`ID$HLHD$fHD$xfHD$ fHD$(AHD$0HD$8HD$@HD$HHD$PHD$X@ I7HD$HL$ HD$(P5D$hHx`HVHD$Ht$p11D$hHxHD$Ht$(HxhHt$ H|$HD$p$DDl$ HD$fHD$xfHD$ fHxHD$(P5H7H|$`HD$(Ay%ID$Hm NH|$xH Y NHTHEHl$ HL HCH\$LtHD$xDBH$dH3%(DuYHĘ[]A\A]A^A_f.AHt&PЅVHt$ x$GPJHH|$HA HH|$(HLH|$g=H|$xHD$xDHrHHD$pHxH7t Ht$ TH|$`HD$(A@$HHSH\$HLtH딐AWAVIAUATAUSHH|$xdH%(H$1#H NƄ$XH|$L5 NHD$xD1HDŽ$PƄ$YHCHDŽ$`HDŽ$hHDŽ$pHDŽ$xH\$LtHD$H{2H-K N1HEHl$ H| H< NH L% NH . NH|$`ID$HLHD$fHD$xfHD$ fHD$(AHD$0HD$8HD$@HD$HHD$PHD$XI7HD$HL$ HD$(P5D$hHx`HVEHD$Ht$p11D$hHx6HD$Ht$(Hxh3Ht$ H|$%HD$p$DDl$ HD$fHD$xfHD$ fHxHD$(P5H7H|$`HD$(A!ID$HNH|$xH NHTHEHl$ HL HCH\$LtHD$xDH$dH3%(DuYHĘ[]A\A]A^A_f.AHt&PЅVHt$ GPJHH|$H H)H|$(HH|$gH|$xHD$xD HHHD$pHxH7t Ht$ QH|$`HD$(A HHSH\$HLtH딐AWAVIAUATUSHH$D$ dH%(H$16 H?NƄ$hH|$ L-3NHDŽ$D1HDŽ$`Ƅ$iHCHDŽ$pHDŽ$xHDŽ$HDŽ$H\$ Ll HD$(H{H-N1HEHl$0H|0HNHL%NL5NH|$pID$Lt HD$ fHDŽ$fHD$0fHD$8AHD$@HD$HHD$PHD$XHD$`HD$h4I7HD$ HL$HD$8P5D$xHx`HVHD$ H$11D$xHxHD$ Ht$8Hxh Ht$H|$ $D$ uD$H$HD$ fHDŽ$fHD$0fHD$8P5HxH7H|$pD$ HD$8AVID$H BNH$Lt HEHl$0HL0HCH\$ Ll HDŽ$D H$dH3%(D$ udHĨ[]A\A]A^A_DAHt6PЅSHt$D$ RD$ 8PJH H|$ HHyH|$8HH|$ g H$HDŽ$DTH<HH$HxH7t Ht$RMH|$pHD$8AHHSH\$ HLl HAWAVIAUATIUSHH|$xdH%(H$1|HNƄ$XH|$L5yNHD$xD1HDŽ$PƄ$YHCHDŽ$`HDŽ$hHDŽ$pHDŽ$xH\$LtHD$H{ H- N1HEHl$ H| HNH L%NH NH|$`ID$HLHD$fHD$xfHD$ fHD$(AHD$0HD$8HD$@HD$HHD$PHD$XI7HD$HL$HD$(P5D$hHx`HVHD$Ht$p11D$hHxHD$Ht$(Hxh Ht$H|$HD$p$LDl$HD$fHD$xfHD$ fHxHD$(P5H7H|$`HD$(AID$HNH|$xH NHTHEHl$ HL HCH\$LtHD$xDH$dH3%(LuYHĘ[]A\A]A^A_f.AHt&PЅVHt$GPJH^H|$HHH|$(HH|$g}H|$xHD$xDHHHD$pHxH7t Ht$IH|$`HD$(AHHSH\$HLtH딐ATUHSk#t W|u []A\DH=bM1]|~HE1KDCVH=M1C HKH=MPPDK1DCXZK DC _H=M1dAHD9|"KDK1DH=Mf*AH=jMr1 E@H=IMw1H=)M1Et H E1KKH=MAH PCPDK1DCyCKH=M$CPCPDK1DCFH D9t @H=yM1,DEHE1fHH=8MAHLPPPPPPPD1DH8H=M2PPPD1DIHH=M2PPPD1DH H=6MPPD1DD9_AXbHH=MPPPPPD1DEH0@H={M@HH=0MPPPPPD1DH0-HHLLH=M1YAZA[f.USHHHLJ7LJdH%(HD$1HHLJHLJLJHLJHHHHLJHHGHG<$H@'Hh$H'HH{ǃHǃHǃHHCCC OH1HHD$dH3%(ǃǃuH[].HHH&HHU&HH袓HHxH7u Hv H빺AHOHtHt$΋PJHSHHHHwdH%(HD$1(&HH%HHHHxH7uHD$dH3%(uKH[AHt&PЅHt$<f.PJHfffff.AWAVAUATUSHH8dH%(H$(1t;Ƈf*tcfƅ@H*YHfH*PfH*XfH*`fƅh*Yl xf*Yl pf*f*f*Yf k ƅ*Yk f*Yk f*Yf*Yf* k Yqk  f*YZk (f*Y0f*Y8t 5LLH| E1L$ k H|$ vLL$HD$ H$HD$(H$HD$0H$HD$8H$HD$@H$HD$HH$HD$PH$HD$XH$HD$`H$HD$hH$HD$pH$HD$xH$ōLL$\ $fAH P(S*Yi @xSf*Yi Sf*Yi @0f*CY@`f*CY@XSfH*Yi @PSf*Y{i @hSf*Y*@8Sf*Yii @Hf*CD9t Y@@~1LL $$ZL9 $@rL$LLHE1I$XHD$I$PH$H$hHD$fHH*Y @0f h A-h HL%h P(h fۉ*f*Yf*Y@xf*Yff*Yg f*Yg  f*Yf*Y@@g *YHH }g *YXPfH*Yag XXf*YX`fH*Yf Xhf*Yfhpi҄*Yf*Yf*Yf*Yf*Yf`8*Yf*YD9f*Y~KLL$ ~I9A@ǀH@0D|LLHE1L$DfAH*@0fP(S*@8Sf*@@Sf*@HSf*@PSf*@XSf*@hSf*@pSf*@xSD9|f*@`LL$WL9H|$ LL$HD$ H$HD$(H$HD$0H$HD$8H$HD$@H$HD$HH$HD$PH$HD$XH$HD$`H$HD$hH$HD$pH$ϏLL$VUDH$(dH3%(pH8[]A\A]A^A_H|$ D$($D$0$$D$ D$8$$D$@$D$H$D$P$D$X$D$`$D$h$D$p$D$x$$$$$$$$$ $$$@$$($$D$$0$$8$$H$$X$$L$`$$$h$P$$$p$x$$$$$|$$$$ H$x$DŽ$HDŽ$$HHDŽ$$$$!$$($$$"$0$$8$HD$$$@H$$H$$H$$P$$X$$`$tfH<$H薈H$H fHHQHuH$ f.HHPHuH$H$H$LL!HtLHL.SH$H<$荃LL$wH$xH|$HD$]HD$HH$xH$h;HH$I$PH@AUATUHoSHH7WODG H軾KSHDC 37HHxHHHI!HLHCƾAu/HHLHD[]A\A]fHؽfDATUHSHdH%(H$x1Hz(lH6H|$p0rH\$Ht$p1Hn|HHD$(CVHHHU|HHD$pHxHAHHHHHHD$LH{H|$xHD$pBHDŽ$h@BHD$xgkH$H$HD$xAHYMHZMH$hHD$pH@HTpHDŽ$hDH$xdH3 %(uyHĀ[]A\H\$HH&HH1fDHD$pH|$pHxw w=HIHHD$H{HLH|$pHHHuj HH\$HRHHdH HHH1HHHHH2HHIHHpHHHH|HfDATUHSHdH%(H$x1Hz(lH6H|$p0H\$Ht$p1H~HHD$8THHHeHHD$pHxHAHHHHHHD$\H{H|$xHD$pBHDŽ$h@BHD$xg{H$H$HD$xAHiMHjMH$hHD$pH@HTpHDŽ$hDH$xdH3 %(uyHĀ[]A\H\$H,H'0HH1fDHD$pH|$pHxw MHIHHD$&H{HLH|$pHHHujHH\$HRHHtHHHH$1HHHHHBHHIHHpHHHHHfDATUHSHdH%(H$x1Hz(lH6H|$p0H\$Ht$p1HHHD$HRHHHuHHD$pHx HAHHHHHHD$lH{H|$xHD$pBHDŽ$h@BHD$xgH$H$HD$xAHyMHzMH$hHD$pH@HTpHDŽ$hDH$xdH3 %(uyHĀ[]A\H\$HHHHH$H$HDŽ$AxH)MH*MH$H$H@HHDŽ$DMH$dH3 %(HĘ[]A\A]SHƿ0|H\dTWH0c]fDH$H$Hxw )w $HIH{`HD$HHLH$WHHHHH\$HRzHH HHHWHIuHHVHb1HIHHLYHHH/jHHHIHHIHHH fff.ATUHSHdH%(H$x1Hz(dH6H|$p0H\$Ht$p1H&HHD$=fT=bTHH&HQHD$pHxCHHH ^H.HHHD$H{,H|$xHD$pBHDŽ$h@BHD$xgH$H$HD$xAHMHMH$hHD$pH@HTpHDŽ$hDBfH\$HH<&HJH1H$xdH3 %(HĀ[]A\DkPHƿHD`THc+fDHD$pH|$pHxw wHq 8HH6HH\$HRHHH6HH+H>1HIHHD$H{L4H|$p*HHjHHHH$HHHH HH밿HIHHIdnfffff.AUATIUSH HH6H$dH%(H$1H\$H$1HH{`e|HHD$Hh=QbTS=^THH|HH$HxHgHHwHHSH{`HD$!H H$HDŽ$X<HDŽ$<HDŽ$g(H$kH$HDŽ$AbHMHMH$H$H@HHDŽ$D7H$dH3 %(HĘ[]A\A]D~aPHƿdH\T?H`c[fDH$H$Hxw uHIH{`HD$HHLH$?HHHHH\$HRHHHHHWHI4$HHVHJ1HIHHLYHHHRHHHIHHIHHH @AUATIUSH HH6H$dH%(H$1%H\$H$1HH{`HHD$HH=^TS=i[THHHH$Hx HgHHH HH{`HD$HyH$HDŽ$X<HDŽ$<HDŽ$gH$H$HDŽ$AHMHMH$H$H@HHDŽ$DH$dH3 %(HĘ[]A\A]DMHƿHtXTƒHЮc [fDH$H$Hxw uKBHIH{`HD$*HHL H$HHH HH\$HRHHbH HHWHI4$HHVH1HIHpHLYHHHHHHIHHIMHHH @AUATIUSH HH6H$dH%(H$1H\$H$1H~H{`EHHD$H@=![TS=WT0HHnHqH$HxHgHeHmH{H3H{`HD$HH$HDŽ$X<HDŽ$<HDŽ$gH$KH$HDŽ$ABHMHMH$H$H@HHDŽ$DH$dH3 %(HĘ[]A\A]D^JHƿ0DH$TTÃH0@c{[fDH$H$Hxw uHIH{`HD$HHL|H$HHHzHH\$HRHHHzHHoWHbI4$HHVrH*e1HIHHLYHHH2HjH`HIpHHIHHH @AUATIUSH HH6H$dH%(H$1H\$H$1HH{`HHD$HŨ(=WTS=GTTpHHHH$HxHg&HHHHH{`HD$qHYH$HDŽ$X<HDŽ$<HDŽ$gxH$H$HDŽ$AHcMHdMH$H$H@HHDŽ$DH$dH3 %(HĘ[]A\A]DGHƿpHOTăHpc[fDH$H$Hxw au"HIH{`HD$ HHLH$HHHHH\$HR*HHBHHHWHI4$HHVH1HIHPHLYHHHgHHHIHHI-HHH @ATUHSO{HHdH%(H$1HLeH{HH@D u4I4$HuHH$dH3%(u8HĠ[]A\H11Ҿ OHgLHH\H?fffff.USHHHH6dH%(H$1&H{HuHH@D u.;HuHH$dH3%(u6HĨ[]H11ҾHKHHH6USHHHH6dH%(H$1H{HuHH@D u.HuHOH$dH3%(u6HĨ[]H11ҾHKHHHUSHHHH6dH%(H$1H{HuHH@D u.HuHH$dH3%(u6HĨ[]H11ҾaHyJHHnHQATUHSHHH6dH%(H$1tHLexH{HH@D u4A4$}HuH1H$dH3%(u8HĠ[]A\H11Ҿ HIHHHFATUHSHHH6dH%(H$1HLeH{A$HHHPB u8HBaHuHuH$dH3%(u8HĠ[]A\H11Ҿ H IHHH@ATUHSHHH6dH%(H$1HLeH{A4$HH@D u0HuHH$dH3%(u8HĠ[]A\H11Ҿ @HXHHHMH0ATUHS HHdH%(H$1RHLeVH{A$HHRD u2HuH H$dH3%(u8HĠ[]A\H11Ҿ HGHHH"}f.HGHtHP1:*H1f.HfDHfDHfDHfDHfDHfDHfDHfDHfDHfDHfDHfDHfDHfDHfDf.HHfD1f.f.H1f.f.H1f.f.H1f.f.H1f.f.H1f.f.HHfD1f.f.H1f.f.H1f.f.H1f.f.H1f.f.H1f.f.HHfD1f.f.HHfD1f.f.HHfD1f.f.HHfD1f.f.HHfD1f.f.H1f.f.H1f.f.H1f.f.H1f.f.H1f.f.@H8H(HHHHHHHHHHSHHH`H[SHHH`HH[;f.1yf1)f1 f1f1)fH4@SHH H[pDTHf.SODTHHH[pH@SHHH[GCTHf.SCTHHiH[HT@SHH@H[CTHf.SmCTHHH[H@SHHH[gCTHf.SBTHHH[ Ht@SHH`H[BTH=f.SBTHHH[Hу@SHHуH[-BTHуf.S BTHHуH[@H܃@SHH܃H[ATH܃]f.SATHH܃9H[SHH@HH[f.DSHHŃH踻H[f.DSHHƒH舻H[鿼f.DSHHƃ谹HXH[鏼f.DSHHÃ耹H(H[_f.DSHHƃPHH[/f.DSHHă HȺH[f.DSHHǃH蘺H[ϻf.DSHHŃHhH[韻f.DSHHу萸H8H[of.DSHH҃`HH[?f.DSHH҃0HعH[f.DSHHӃH訹H[ߺf.DSHHӃзHxH[鯺f.DSHH܃蠷HHH[f.DSHHPH{[fDSHH0H{H[f.@SHHH{[fDSHHH{gH[nf.@1Yf1)f1f1f19f1)f1If1fH$@SHHH[u=THf.ST=THHH[pH@SHHH[G=TH}f.SXZf.H(dH%(HD$1HD$0HD$$"A&(@&(B&(իB&(輫A&(裫CX芫f.H(dH%(HD$1HD$0HD$$#J&(7J&(L&(K&(K&(ӪLX躪f.H(dH%(HD$1HD$0HD$$(#S&(g@S&(N@U&(5T&(@T&(UXf.H(dH%(HD$1HD$0HD$$P#\&(藩@\&(~@^&(e]&(L@]&(3^Xf.H(dH%(HD$1HD$0HD$$x#f&(Ǩe&(讨g&(蕨g&(|f&(chXJf.H(dH%(HD$1HD$0HD$$#E&(@E&(ާ@G&(ŧF&(謧@F&(蓧GXzf.H(dH%(HD$1HD$0HD$$#O&('N&(P&(P&(ܦO&(æQX誦f.H(dH%(HD$1HD$0HD$$#@X&(WW&(>Y&(%@Y&( X&(@ZXڥf.H(dH%(HD$1HD$0HD$$$@a&(臥`&(nb&(U@b&(T HTƒHЮcDf`֑t1f H1Tƃ<R`HTʃ}H@cٟKCHH +`גH诙HD=TSt=CT0[ft܀=TtI= T0ݞHTÃ踖H0@cfX覐t16@HATƃ "XH"T˃MHc詞KGHH X豑觑HHD=QTSt=Tp[f֏t܀=TtI=T@p譝HTă舕HpcfPvt1@`@HQTǃܒ@PH2T˃H@cyKKHH @ˌP聐wHOHD=TSt=Tuv[fD覎t16ЙHAT "H"TǃMHc詜HH 贏H茖f.f=QTSt= Tuv [fDt1 v HTƒL bHTȃ荓H cHH >H̕f.f=TSt=_Tuv`[fD&t1`趟`H! TÃ茐`袋H Tȃ͒H`c)HH `~4H f.f=TSt=Tuv[fDxft1H Tă̏xH TɃ H ciTHH 辉xtHLf.f=TSt= Tuv[fDp見t16H! TŃ "pH TɃMHc詙HH p贌H茓f.f=1TSt= Tuv[fDht1vH TŃLbhH Tʃ荐HpcHH >hH̒f.f=iTSt=[ Tuv[fD`&t1趜 H Tƃ茍袈`Hb Tʃ͏H@c)|HH ~`4H f.f=TSt= Tuv[fDXft1@H Tƃ̌XHT˃ HciHH 辆XtHLf.f= TSt= Tuv@[fDP覈t1@6`@HTǃ @"PHbT˃MH@c詖dHH @P贉H茐f.f= TSt= T[fHt܀= TtI= T蝚HHT΃蘍H cf膇t1HTуHTԃ-Hc艕KHH ۄ葈H臈H_H;D= TSt=TP[f@趆t܀={ TtI=T Pm@HTσhHPcĔfVt1 HT҃載 ҄HTՃH 0cYKHH 諃a@WH/HYD= TSt=T[f8膅t܀=C TtI=T=8HTσ8Hc蔓f&t1趗ୃHT҃茈袃HbTՃ͊H`c)KHH {18'HH]D=i TSt=T[f0Vt܀= TtI=RT` 0HmTЃHpcdft1`膖`HTӃ\`rHTփ蝉H`cKHH `K0HϋHaD=1TSt=TT0[f(&t܀=TtI=!T0ݕ(HSЃ؈H0c4fƂt1V@HaSӃ,BHBSփmHcɐKHH у(ǃH蟊HeDSH"HSH@>HHPHSHPHSHPHS HP HS(HP(HS0HP0HS8HP8HS@HP@HSHHPHHSPHPPHSXHPXHS`HP`HShHPhHSpHPpHSxHPxHH mA'USH1HӾ6H( dH%(HD$1HHHCHHH$HD$KHCHHH$HD$/HCHHH$HD$HC HHH$HD$HC(HHH$HD$۲HC0HHH$HD$迲HC8HHH@H$ HD$蟲HHH$ H\$臲HD$dH3%(u H([]~fDUSHHH8dH%(HD$(1HH@(H=c9$1Hﺀd膐HH$HCHt$HHD$HD$۳HCHt$HHD$HD$輳HCHt$HHD$HD$蝳HC Ht$HHD$HD$~HC(Ht$HHD$HD$_HC0Ht$HHD$HD$@HC8Ht$HHD$ H@HD$Ht$HHD$ H\$HD$(dH3%(uH8[]HHv}A~USH1Hվ6H dH%(H$1HHHǾ# DH{HH@D HVz# H HEHHH$) HD$MHEHHHH$- HD$-HHH$:Hl$H$dH3%(uHĸ[]S}~|H|$11Ҿ[{H|$qHH|$dzHf.fUSH1Hվ6H dH%(H$1HHHǾ# H{HH@D H&y# HٍHEHHH$1 HD$HEHHH$7 HD$HEHHH H$> HD$HHH$G Hl$ɮH$dH3%(uHĸ[]|2{H|$11ҾzH|$%HH|$yH蠄USHHHdH%(H$1HH@(H=c$1Hߺd萌HHHǾ# xH}H{uHH@D }# H裊HEHt$HHD$) HD$褯HEHt$HHD$- HHD$聯Ht$HHD$:Hl$fH$dH3%(u H[]fHHyH|$ 11Ҿ xH|$ HwzH|$ wH5DUSHHHdH%(H$1HH@(H=c $1Hߺd HHHǾ# wwH|H{uHH@D {# H3HEHt$HHD$1 HD$4HEHt$HHD$7 HD$HEHt$HHD$> H HD$Ht$HHD$G Hl$׭H$dH3%(u!H[]f.HH>xH|$ 11Ҿ wH|$ 1HxH|$ vH襁DUSHHHdH%(H$1HH@(H=c$1Hߺd萉HHHǾ# uHzH{uHH@D ?z# H裇HEHt$HHD$Q HD$褬HEHt$HHD$V HD$腬HEHt$HHD$[ HD$fHE Ht$HHD$b HD$藫HE(Ht$HHD$i HD$(HE0Ht$HHD$u HD$YHE4Ht$HHD$~ H8HD$6Ht$HHD$ Hl$˫H$dH3%(uH[]fDHHw6vH|$ 11Ҿ uH|$ )HvH|$ tHf.ATUHS1Hվ6 HdH%(H$1蛇HHHǾ# {H{HH@D HLe r# H胇HEHHH$Q HD$ǨHEHHH$V HD$諨HEHHH$[ HD$菨H߾b 2{H{HH@D +LLe00b HHE(HHH$i HD$7H߾u zH{HH@D LLe4؊u H蛆H߾~ zH{HH@D uZLH8蠊~ HcHHH$ Hl$諧H$dH3%(uHİ[]A\ttH|$11ҾrH|$H]H|$11ҾrH|$H|$11ҾrH|$H|$11ҾrH|$H|$qH!}USHHHdH%(H$1HH@(H=0c+$1HߺdHH8HǾgqHovH{HH@D uHmsH (H#q=StR=SPHH=m(HH$dH3%(Hĸ[]stHƿPhHSڃcyHPc迁`f.HH買H|$11Ҿ pH|$HrqHH|$oHk{tHY{fUSHHHdH%(H$1HH@(H=@c+$1Hߺd@HH8HǾoHtH{HH@D uHqHP(HSo=StR=/S0HHmk(HH$dH3%(Hĸ[]qtuHƿ0蘄HSڃwH00c`f.HHH|$11Ҿ oH|$1HppHH|$nHyrHyfUSHHHdH%(H$1HH@(H=Pc+$1HߺdpHH8HǾmHrH{HH@D uHoH(Hm=StR=^SHHi(H@H$dH3%(Hĸ[]oteHƿȂHSۃuHc~`f.HHFH|$11Ҿ KmH|$aHoBnHH|$ClHwpHwfUSHHHdH%(H$1HH@(H=`c+$1HߺdHH8HǾkHpH{HH@D uHmH}(Hk=StR=SHHg(Hp}H$dH3%(Hĸ[].ntUHƿHSۃsHcO|`f.HH萲H|$11Ҿ {kH|$HGmrlHH|$sjHuoHuf=ISSt=sS[f Fmt܀=StI=ES{ HSԃrH cT{flt1vHSуLpbkHSԃrHczK HH ;jm mHtH蛯D=SSt=BSuv[fDlt1~H1Sу|ojHSԃqHczHH ni$mHsf.fATUHSHHPdH%(HD$H1HH@(H=Цco$1Hﺀd{HHZHC(Ht$0HD$HD$0O{HD$ HD$ HD$8כHD$Ht$0HHD$0 HD$8wHD$ H[HPHHT$ uH=SHHc HLyHT$ HBHHD$ txHH y HI|g=]SuHIjtHƿ}HHS΃pH cjxMDHD$HdH3%(u'HP[]A\HH>iihHÿHGkHrf.DAWAVAUATIUSHLHHvdH%(H$1ID$H|$HID$ID$(ID$ID$ H$HD$ gHO{nH}HH@D Ht$ iO{Hyf|$HD$ I\$HPHHT$ OHD$0Lt$8LP@LD$0(` Hm=tSF=SHt$0H?r HByHT$0HL2HIHH9$xB 9D$0D$McHËD$0D$@HxHpC D$8C0D$HC8C(D$PC@D$XCHD$`CPD$hCXD$pC`D$xCh$Cp$Cx$$$$$$$$$$$$$$$$$$$ $$$ $8$($0($9 $@)$:0$H8$P*@$XH$`P$hX$p`$xHǃHHH$hǃxHǃHtQzHH fDHHQHuHHHPHuHH$H|$H $LHwID$(Hs(LHumH$LuHD$ HPHHT$ H$dH3%(H[]A\A]A^A_DH >dHƿ$r HSԃiH c[rhH hH}HH@D uaHt$]o HtD$6Hrb (eH$H$cHkHH|$011Ҿ#aH|$09H|$011ҾaH|$0HH \HhnH|$0_H|kH4ngf.DSH1HӾ6 sHt HH['bbf=SSt=Suv [fDbt1 &u HQS҃e aH2SՃ=hH 0cp֥HH _cH|jf.fATUHSHHdH%(H$1HH@(H=c$1Hﺀd^rHHHC(Ht$ HHD$ O{HD$HD$HD$(Y H^HcH}HH@D *17e HJpHD$H[HPHHT$uKfD=)SPHH[Z HLoHT$HBHHD$txHH p HI]=Su@`tHƿPss@HSσnfHPcnMDH$dH3%(uH[]A\ÐHHq^H"H|$011Ҿ ]H|$0_@aH`hHH|$0\HKhf.=SSt=Suv[fD_t16rୃHS҃ c"^HSՃMeH`cmHH \`Hgf.fATUHSHHdH%(H$1HH@(H=c$1HﺀdnoHHHC(Ht$ HHD$ O{HD$HD$HD$(i H[H`H}HH@D *1Gb HZmHD$H[HPHHT$uKfD=8SHHkW HL mHT$HBHHD$txHH ,m HIZ=Su8]tHƿp8HCSσ~cHckMDH$dH3%(uH[]A\ÐHHq0 \H"H|$011Ҿ ZH|$0\8^HpeHH|$0YH[ef.=SSt=Suv`[fD\t1`Fo`HSӃ``2[HSփ]bH`cj^HH `Z]Hdf.fATUHSHHPdH%(HD$H1HH@(H=co$1HﺀdlHHZHC(Ht$0HD$HD$0O{HD$ HD$ HD$8wHD$Ht$0HHD$0 HD$8HD$ H[HPHHT$ uH=gSHHT HL;jHT$ HBHHD$ txHH \j HIX=Su0ZtHƿm0HSЃ`Hpc iMDHD$HdH3%(u'HP[]A\HH蔞 Z4YHÿ0[Hbf.D=SSt=>Suv[fDZt1l@HSӃ|]XHSփ_HchHH nW$[Haf.fATUHSHHdH%(H$1HH@(H=c$1HﺀdiHHHC(Ht$ HHD$ O{HD$HD$HD$(ى H VH[H}HH@D *1\ HgHD$H[HPHHT$uKfD=S0HHQ HL{gHT$HBHHD$txHH g HI\U=Su()XtHƿ0j(HSЃ]H0cJfMDH$dH3%(uH[]A\ÐHHqyVH"H|$011Ҿ QUH|$0g"W(YH_HH|$0CTH_f.=SSt=MS[f&Wt܀=StI=SiH]Sك\HPc4efVt1Vi@HS܃,ZBUHS݃m\HcdKUHH TWWH^HD=SSt=SP[fUt܀=StI=SPhHSڃ[HPcdfhUt1&hHSŃXThHSʃ=[HpccK裙HH RhVVHo]H{D=SSt=S0[fTt܀=StI=S0}gH}SڃxZH00cbf`fTt1f HSƃWR`HSʃ ZH@cibK荘HH Q`qUgUH?\HD=QSSt=S[fSt܀=StI=SMfH-SۃHYHcafX6St1e@HSƃVQXHS˃XHc9aKwHH PXAT7TH[H胕D=SSt=S[ffRt܀=kStI=lS@eHSۃXHct`fPRt1@d`@HSǃlU@PPHS˃WH@c `KaHH @[OPSSHYH臔D=SSt=XSuv[fD6Qt1c@HQS܃TOH2S݃VHc9_讕HH NDRHYf.fUSH1Hվ6H dH%(H$1aHHHǾDUH{HH@D HHBeHa(HU=StO=SHHY(H`H$dH3%(HĨ[]@OtMHƿ]H S݃{UHc]c}H11ҾMH4HNNHHLHWPHWf.@USHHHdH%(H$1HH@(H= c+$1Hߺdp_HH8HǾKHPH{HH@D uHMH](HK= StR=aSHHG(H@]H$dH3%(Hĸ[]MtHƿ`HHSكSHPc\`f.HH蔒H|$11Ҿ KKH|$aHMBLHH|$CJHUNHUfATUHSH HHdH%(H$1/JH7OH{HH@D ~uLeHP H[HEHHH$1 HD$HHHH$ HD$̀HHHH$ HD$讀HEHHH$ HD$蒀HEHHH$ HD$vHE HHH$ HD$ZHE(HHH$ HD$>HE0HHH$ HD$"HE8HHH$ HD$HE@HHH$ HD$HHH$ Ld$HHH$ Ld$HEXHHH$!HD$HE`HHH$ !HD$HEhHHH$!HD$fHEpHHH$!HD$JHExHHH$!HD$.HHHH$$!HD$HHHH$,!HD$~HHHH$8!HD$~HHHH$?!HD$~HHHH$L!HD$}HHHH$W!HD$4HHHH$h!HD$}HHHH$v!HD$}HHHH$!HD$~HHHH$!HD$}HHHH$!HD$)}HHHH$!HD$z~HHHH$!HD$}HHHH$!HD$|}HHHH$!HD$]}HHHH$!HD$>}HHHH$!HD$}HHHH$!HD$}HHHHH$!HD$}HHH$!Hl$}H$dH3%(u.Hİ[]A\H|$11Ҿ FH|$6HGH|$"EHPf.ATUHSHHdH%(HD$1HH@(H=pcuS$E11ɺdHXHtCHDHHD$dH3%(u H[]A\fHHD$$mF8G= SSt=S[ffGt܀=StI=[S=UHS݃MHctUfGt1Y@H!S܃lJEHS݃LHc UK诋HH [DHHHNHADATUHSH HHdH%(H$1KH{HH@D HLeHQ HVHEHHH$1 HD$$xHHHH$ HD$xHHHH$ HD$wHEHHH$ HD$wHEHHH$ HD$wHE HHH$ HD$wHE(HHH$ HD$vwHE0HHH$ HD$ZwHE8HHH$ HD$>wHE@HHH$ HD$"wHHLd$H$ wHHLd$H$ LvHEXHHH$!HD$vHE`HHH$ !HD$vHEhHHH$!HD$vHEpHHH$!HD${vHExHHH$!HD$_vHHHH$$!HD$@vHHHH$,!HD$!vHHHH$8!HD$vHHHH$?!HD$vHHHH$L!HD$dvHHHH$W!HD$uHHHH$h!HD$&vHHHH$v!HD$vHHHH$!HD$HuHHHH$!HD$)uHHHH$!HD$uHHHH$!HD$KtHHHH$!HD$tHHHH$!HD$tHHHH$!HD$tHHHH$!HD$otHHHH$!HD$PtHHHH$!HD$sH߾!FH{HH@D uzLH=!HRHHH$!Hl$>sH$dH3%(u.Hİ[]A\H|$11Ҿ,?H|$BH$(@H|$11Ҿ?H|$H|$>HIUSHHӉͺ H1ɾ6QHtHH[]H@@HATIUSHt!HsLHkHFHHu[]A\f.HtSHHvHH[Eff.@HATIUSHt!HsLHkHEHHu[]A\f.HtSHHvHH[rEff.@HtSHHvHKdH[BEff.@HtSHHvH{dH[Eff.@USHHHt#*:HDHH]tDX uHH[]fUSHH@H\H9s9HKHDJ uHH[]f.HH9uHH[]f.AWAVIAUATUSIs|HxdH%(H$h1H|$(HT$1HD$ HD$`HfH|$hH1fLSHIH$E11LHpFH'HH|$`t t H9][t8;tt=IueD=t[;t IAuEDD끐Hp@t<]<;tH<]<;tHuHADIHD$Ht"<;Hu@;H2@uHHL$L|$H|$`2LV8Ƅ$HL$Ll@L?DH$hdH3 %(uuHx[]A\A]A^A_HDH|$ 27D$QD$`gHT$`HHt$ H|$AD DD?=xh;HN(HCHHt!H0H@HwHGHHGHBHG HAHt x_HQ8HDB0HE D E1IcHR(D@HHJ 2ƀ @ Hrf Hzt$ƀ HrH6@ HrHv@ Hrf Hr @ Hr(@ Hr0f Hz8t# Hr8H6@HR8HRHQ8DID)Ic9r03D HA0HpD E1EH@IcAHH7JIDAD LHfD LHD LHfD LH fD LH0D H7 Hp8r Hp@rHpHrHpPH@XfrfBHA0DD)9P\D HAHPDW`E1Ic t@HADID)Ic;pqHH4DBLrJ0BtdpuH4HLH4rHHT7`fDZLDZLDZ LDZLHT7pDZLDZLDZ LDZLH7fDZLfDZLfDZLfDZ LfDZ LfDZLfDZLfDZLXH7fDZLXhfDZLDZLXxfDZ LXpBDZLDZLXDZLXDZH7H@rH@`BuDG`HA HtVHG@HA H@GAHA H@GBHA H@GCHA H@ GDHA H@(GEHA H@0GFHA H@8GGHA(HHPWHHH@WLGQHA(H@GRHA(H@ GPHA(H@(GSHA(H@0GTHA(H@8GU@H8D@HPffAHH?ED@E D IIHcL1HpH*P P *P Y@ H9HLG0G(Y O8f1DfSHH dH%(HD$1DLCHKHT$HHHD$H$Vu1Ht$dH34%(u!H [H|$v2Hs5AUATLgUSHA LH(HHfH4$HH}L1HEHDž H^HA H)H LcHLHHUL*H$H~&HH9uLmH(1[]A\A]fH([]A\A]H71ҿHNIffff.HHVH`H{BOHAVAUIATUHnSI HHH`dH%(HD$1=Hc؅BAHLNþ1HH$HcTH4$tH1ҿCMIIl$LEHL$dH3 %(uPH[]A\A]A^H9.~A H4$HcH;.}I}`DIt,)7=۸G3ATU1SHHdH%(HD$1{`tHT$dH3%(ueH[]A\f{huݿIALcCxHKp1HH$St1H4$sFI딐H$I$2ATUHSHHPdH%(HD$H1=8;I`=L1HHChHBHHC`HHT$1ރHHHL$HD$Fu}Ld$MtsA|$1Ҿ5AT$It$lj3uKkXtJHC`H51H{`L=HL$HdH3 %(u&HP[]A\CXfsXv1fDSHH`2H{`zAH{hqE{X[(/~t 1ff.HHHHAx1HH)HHHpHtSH-HCp1[1DAWAVAUATLoPUSHHx$dH%(H$h$1HHEHT$HGP&?H?HxLHHCIHCHCH@:HLc8HC@C`ClEEǃCt+HcEǃHHcEHHcE HHhcEH|$PHǃH\$P !H}`T$XHt$`o=1Ht$PHIHt$PHHt$P~`iHEpHV@HL$01 tHT$0HHExHUp1Ht$PfHI=H=HIƿs=I~HHCHCHCIAFLI9HMpLs8HLExHS@1\OHC`ClCEǃwAD$AD$ AD$AD$AD$AD$A$AD$ELHcUǃHǃ Hǃ(HHcU HHcUHHcUHH HH{D$@fc|$fELcELc{LIEM9Y @K?MHDL9IvLD$HL$H}HHHcUHL$LD$HED{H<LHLD$HL$LD$HEHL$BDEII)DMwALc{HcUM4EDt$M9jDK?MHDL9IvH}HHL$HHL$tjHcUHED{H<LLHL$JHEHL$B0SD$҉E@ L)cJ!+1A1HH$dH3<%( HĨ[]A\A]A^A_E1HCL@IH I9HINHAHcuHcSL 1EL9fHHHDL9HvH}HL\$LL$0HL$(LD$ HD$HL\$HT$HcuLD$ HL$(LL$0HESH<0HLLL$(LD$ L\$HL$LL$(HELD$ L\$HL$BDMIIHII)IH)IH fuCfHCHD$$MDLkHCE1HD$HD$H\$ L|$(Dt$MMLHLH"HI9IMFHHT$DLLAHHt HEH\Hu%fHO H H;HuHEt[]A\f.[H]A\@AWAVIAUATIUSL$IH(HcGH?L$ HHpHD$iHIcnIHM9LLt$EHHI9vs<&uLH)DDsA#;OHHc= HtXHH)HHHE&HI9wLt$I9H)tׅtHcɀ|;eD$ uLt$L)IIH)AnHcH9l$(LH([]A\A]A^A_t{xH{ Hc1HH9DHE1Df0<67$ŸAa {m{p E&HHf.AlAgE>{tHHYfDGDHH9tqEPD DDEVDGDDDGDDH{@EpHcHT$ t#IcNIqAv@,IcFI @H[]A\A]A^A_f.AWAVIAUATAUSLHAHLHEHD$PH<$L|$XLHHD$HH9E1D9~I9Er\@tkuAML9vCH<$D?XB8HcH9D$uAVAML9w@H1[]A\A]A^A_AVAAFAFzDMIHAw~I9rtCuAML9vH<$DWxcAWHxAủAFAfDAFAAVAVH[]A\A]A^A_@H[]A\A]A^A_@MqfH<$HD[L]A\A]A^A_1Yfffff.AWAVAUATMUSHH8dH%(HD$(1HHT$ЁHHDHL1H|$H_ H<$Pt,uWH<$2A |${fDH<$A|$TAF1HL$(dH3 %(H8[]A\A]A^A_fDuAD$1MbDCEI>|HCHHAFHcHITDCEubZHSt$LHD$I6pDD$,LHT_AX RIcFIT$HS1AFHD$HT$$DLXHHCIL|$I>LIcFIt~HIcvIt$LLHHD$pDD$,LHZYgAVt$$DAVDCWHPHIHƒt )AF IcFI>ItHIcvID1LHVLSyG1@H<$twA|${A~DD|$HEڅHD$D|$H$AD$AD$eA D$ EL$1HKLD$UD$ IcFIT$HSHCt AA)EF 1f.HL1HH\$H$fDIHc11\DHc0HL$ HL$HIHx%AWAVIAUATAUSHIAHLH(EHD$`H|$HT$L $HL|$hHHD$HH9H$D9_L|$L+<$L9v]t$tgtRH([]A\A]A^A_fDA6AF +4$xHcI9|H|$D@VuML9w1A6f.A6AF AF AF @MI@H9sBtztMJA>AW@:H|$DU#ML9wH<$1A>AF AF AF @A>AF H<$T$H|$H([L]AA\A]A^A_Wffff.AWAVIAUATIUSЁIMHHHHt$HHDMeMTI>bMqIm Ll$M@HHD$D$ t@D$ A^UA D$ CH/E%|$ I.Lt$8Lt$Ll$(L|$ H|$0AfLWHIxvEt$(AvDDD$MNHHLZYuEHD$0D)IHAL|$ pq.fDL|$ Lt$8fDHD$IMwIGHHL[]A\A]A^A_fuAFD$ AD$ AF )ËUHcH;EH;E+uLRjDD$ EAUHD$LI6pDD$L$0LH^_.fDIIGIG @HD$LDD$ SRUDD$ DDD$ T$ HLTLD)HHAKL|$ MDHD$D$ t@D$ AFD$ AHD$D$ t@D$ A^D$ AWL@ENEfDHD$DT$ I6LSkf1LTHXDD$ 1fff.AVAUЁATULSHIMHL!HHDHHDE1MI<$t7HcsHLt$Pt$PHLL$PHWY^H[]A\A]A^fDLD$H $HI$H $LD$uEtHL1릐Hc3H $LL$H $HIHtALD$Hfffff.HHHvhPdjAQMIHHH(fAWAVAUATUSH8HH|$Ht$(HT$ *L:M>HD$ HchLI90MgMHD$MfDAD$L>w}HHLcEthM|$M9t+LHL$D$L)HT$pLAՅLc$HL$HLL$HHT$pHAՅL$xsM)MML|$IH9hLd$MHL)II9tHT$pLAՅx3HD$L H@H@HD$H8[]A\A]A^A_HD$HT$(H|$ HHPHxŋBuE1@HHHvhPRdjAQMIHH'H(fHHHvhPddhhdAQMIHHH(ffffff.HHt/H>HtHcvLHfDFu 1DL¾ރHÐHAVAUATUSHHIu*u~H?6HC1[]A\A]A^DxDEHcHItYLcLHL`H;C4L#k1[]A\A]A^fHH@fDƐATUЁSHHAHHDHc0FHHtHtDHHuH[]A\H1>f.fATUISLMtVHcjHHM*M9sBL8@ti@tLID)Յt%)ZHcLI9sAIIABI9uHLt$(fXLZ[]A\ÐxyHL9t8@uxxHL9uHh dAQMIȹgHHtHH)L|$IELHAHLL1-LcM9!HULLAՅI EtMt AD$L9L}HHEL9@HAA:ރL9ރAAIAAtsIIM)I~HULLAՅbLeMfD~sHH9fS~QHH9uCfDL9IqLeL)IHULAՅH}dH3<%(LHe[A\A]A^A_]fHpLLIAxH1^_j1fMEtOtOAL$ugAT$ AptLDH}Iٹ  1L}A uAtLe11E1L}`hHHHt$H6HtPHE1HH?ÐL¾ރHHH?fDHATIUHSHtNH2HtFRI$LLD$ A(Hx#HHCHHC[]A\LcHkHH[]A\fHHHHHHcWHH<v'HOH9stPuxxKHH)Hw\H9tLHHH?H9rfHHH H9uH1HÀxxHH9uH1h"VfHHHLt}MtxHcOHviA8ITLt D@8u;HH9uI<1H9v HHH H9uH1H"HLfff.AWAVIAUATUSHHH8dH%(HD$(1HHHD$t\LciEtSHIMHt p Ht$Hu#A$tSHL$I9L$c HLsHkHL$(dH3 %(HhH8[]A\A]A^A_AT$cHt$I9t$I;t$AT$fDLM}MI9LD2LHI9@quD)H}HtbLe]1H\$dH3%(u^H []A\LD$IIHp>HLLI9Vl1?뙸fDAWAVAUATL$ USHH8L9H|$H4$|HIH]IIE1HD$HHQHc1HD$Aȃ <]w$@LL)HL_JH8[]A\A]A^A_ÃwΉ$uHD$HHtLcHEtI9Hv- 5kHHH@ HRI9tLLpE1K<HLILHIH9AH@ITv9D} A8HfDD8 A8HHH9u:LLILIAH@IHL0M|$IM9$(f.IM9S@vbLLT$,L)HHL$ HHL$ T$,=M|$teV%AKHL4PM8HI9 H|$IHD$f.H|$tHH4$L}IH>FHM9v.Hһt$HLApjHHH1AXZ[f.HһtHApLj1f.@ATUSHPdH%(HD$H1ALcT$pwAwEIH~,Mu'1H\$HdH3%(HP[]A\MI;t IIH$Ld$1IcLHJHl$H\$L)H9HD$ wCHFHHt:HM1LЅu9HL$Ht$HT$(H)H H)H9u@T@1҉Bf1҉7H$0uIY xV^fUSE1HLHjHHY_u@1҅uHtE1Ҁ;€;EHHH!H []fHHfDfUSHHLD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1HkH3HSH~\H$H{IIHHD$HD$ H$ D$0HD$kHH9~4HxGHSHCHD$dH3%(H[]DHCD(HHkDHHKHHOHks+uqt]uzHKHCy@H]HH|HtHqHHH)H)r1ɉσL:9L>r렋;]‹DHK늉fDHKs1ffff.1ffff.SHHH0dH %(HL$(1HH$HD$HT$t:HHHT$dP uHT$HH|$(dH3<%(u H0[@HD$HẠdP DHHdH4%(Ht$1Ht4H?uE1HP(Ht$dH34%(u"HH7HH4$@H$0uH~fffff.AWAVIAUATIUSEHHxH$HD$H$HD$dH%(HD$h1HjHH|$`t]HHtUHT$`HH)HH?H1H)H9~8Htfk1HL$hdH3 %(Hx[]A\A]A^A_DA.EAGhAu9A9qHD$THD$ HD$IcDt$(Dl$HtHHNAAEtHHHuH9r/LDHL9s@HHʀVL9u@>Hf.AWAVAUATIUSHHLdH%(HD$81Ht$ HL$(AG,"AG(X;HcID$HE1}LcQE1LT$ I:AÃD$EMt2D޺LHL$LT$D\$`'D\$LT$HL$u~EtH|$(uXH@A9$~oAG(9I$~A9_,~HmHcAALT$0HD$ HD$0cHq(HyIHL$(3tEt D$D1Ht$8dH34%(uHH[]A\A]A^A_f.AWAVIAUATIUSLHxL2dH%(HD$h1HH|$MHD$HHD$HD$HcXLD+fAAfAHKHD$(HHH9HT$\LHGsHI6HtyHsHH|$A$;G(H|$;G,f;H9H|$K/HFHA7L)@CHH]DHCHx H9HH#D$ HT$(HffEHCHIjLHPjLH|$0sHD$@H "HKHHIH)HxHHKE1HT$(ffDCE1~|$\HH#D$ HT$(HH|$hdH3<%(Hx[]A\A]A^A_D1HH#D$ DDkHKHD$(DfDA$D9Ld$0IEAIcHHL$D AHcAHT$`LHD$`HAI9DILGLH|$HP(HD$ LCIH)MxI)LCHT$(DkHD$0AAAfDkD9SLd$0Lf3KfDMuSHt$IcH|D9tH|$D9g(}1W,A9})9}% HHT$(f;H#D$ l@I9LHT$\HGLi|$\II#MbLCM5IcHHHT$zHT$8D|$@H|$0D|$@WD9KE1E9D}yHL$8|$\Q 94D AFHDHHD$,@p H9 DAH@D9|EA9&HD$8fKDHHcQL@HD$ .fDMLxL9H)HKHH#D$ H|$(HHHD$DL$0HT$(Hc0HT$(IDL$0H1MD)ET$Af.HsLIH)HxH)HsHD$(DIH) DA?H9HHFHdAHIHHD$(Hsf|@A?L9LHFHIcDHHHT$AHT$8*z|$@H|$0DHL$8DDD AfCDHD$E1LD$HHcHLXD$DL9Av=DJ HHHLڋ2AAE9LHL9wfDHD$t$@9p(HD$t$@9p,HCA7K/H|$H9HF@HL)=HHLCLIH)MxI)LCHD$(CDd$@DhAnfD9t$DtBI9H @D;b'HcBHcJ LD$HHHHHH9H;L$@DL$@1fDA9HNHH9rHD9~HHcND IHHL$fCD PAHL$8DDAfC) HT$(fHt$0zD|$@D9H|$D9g(`W,A9TA9Kff|$\'HD$8x AWAVIAUATIUSIHhL$DD$LL$1E11^@IHtoHLPHjE1D@ LH|$0AR0HT$0Ht$8HL$@AYHAZJHAH@E9~NHIHcPuLfDDXEuIEM}MeHhL[]A\A]A^A_1HL$H\$HDD$(T$ IH_AXtHL4(A1ۅLt$Ll$ML$IH\$TfDIHt4HLVNAVDF IH|$PLAR0HT$PXYHH)AWIA9~:LHIHcVuLfDIUIuIMMLt$Ll$HMuIEIEfLl$HD$HIEHD$PIUIEAWAVAUATIUSLLHxdH4%(Ht$h1H|$ I$HI$HL$(Ht$0H|$|L:MHD$LcPO4AFAAfIvI~HD$Ht$H|$8fuiIcHI$HcPLHT$`HT$`LPIIHH8H|$ LAR8HH)HT$AAfEfEnH|$HL$`HH.HHHu4HT$Ht$hdH34%(Hx[]A\A]A^A_D$`wlHL$AHH)fHT$fALuUAfEHT$oID$HD$(uHT$(H߉L$LHL$@fA>HL$@F}$@HD$HT$Hc0HT$IH1MfAfu#HH)HL$fA>fDAfE$E9yHD$0IcIIBtDFD9AOA9rDl$@Dl$\MD$XHL$PMIt$LHJT 8~,MHL$PDl$\E;$IcHt$0HD>H|$D9G(/H|$9G,!AHH)HL$@AfDIDA$9}5H\$0HcH|9t!H\$;s(S,99HT$fA1L>fA>DIE1fEfDHD$D;h(aD*f1NfHt$8ljD$P`!HL$@T$P8AfE$@f.D$@I@|$@;|$X#W@MHL$PDl$\JDl$@D9l$XfA6fEn'DHT$"IFfAEHL$PMffff.AWAVDAUATUSIHxHH|$(HT$L$DDD$9AH@D9H1H#D$AHcHHD$ H|$1DH. HD$ HD$@HcC HD$PH|$4@1f@҅LK {$OH|$ HxHxHD$ HeHHD$tLD$ H|$1HDLD$ uH|$p1HHD$L$HD$pC(DHMcIE;f.M,H|$pL\$(DL$ cDL$ L\$(IW(IwLLD$HL\$(DL$ HD$DL$ L\$(AI@E9~;C(A9I~D9K,~N<AIcGXLLl$0HD$0JtH|$pttHt$HOIH|$}~Hc3HL$.HL$HIHH|$ ;1q:H|$HT$HD$HT$Nfff.AWAVAUATIUSIHXLdH%(HD$H1HH|$wAw,MD$x(11LL1@LD$AO 119LH:uR1LpHA9o IGHcHI$HcPuLHT$0HT$0H@0HtH11@Hct$L u41LLL;D$u1LLL9D$4@HD$HL`LhHL$HdH3 %(HD$pHX[]A\A]A^A_@Aw(1HD$wHcMLH9HE0HtHH $1ЃH $t:HEHU(H|$0MH HPPHD$0HT$8HHD$HD$@HAw(HxJAG,9}K9I$~A;W,|HHHEYHcEHL$(LHD$(TA$9|D$HD$HL$H@HH@fDUaHHHGHpHL$H\$HQHHAw&fDHSIHtD~t6Hһt$HLAjHHH1AXZ[@1ۉ[fHһtHALj1f.@H5SHOA|HΉЃ)HW4SHHH)H@VQ@RHLOH1RHc4SH(HH@HGHcH9| H)wH)HGAUATAUSHHdH%(HD$81SHOHGHcHII)I9}r1H &DHS E)HDD H|$8dH3<%(HH[]A\A]f.HwrH7HSHHHSw1Et)1HvjHFFȹ)fD!c@HHH7H7HǃHH)HKnDNȹ)DHnfDfDHvjAHDHHT$H$HCHD$HCHD$HC HD$ HC(HD$(At$H$H N FFȹ )ҪfATUISHxft*@t.?HCHwQHA$H[]A\D[]A\HsH?HHH HHI[]A\fHATIUSHt ΃u:@L HSSCtNʉLxTt=)~-HSHS HZ [1]A\fڃ~Hې[]A\fDkxH4fxH=HHfDHXSHHdH%(HD$1u:HHHHHNHL$dH3 %(uCH[@Ht$HD$HxT$HHEH肨fUSHHm@u HH[]Ã?HHHHcH H%u(HtHHHfHBwfD1fDAWAVAUATAUSHHHGHHOMcH7J(H9AHUD)D߃Hc!HHHHH @">)؈^ lj@>FFH1[]A\A]A^A_@HOHHHHMcH7HGH)J(HOH9H7=L}HU@L)LLcLU8HEHt HUUL}HEITLuHL@">1)ڈ^ @>H[]A\A]A^A_fD@">D1) @>H[]A\A]A^A_É޺H.AT$H1@">)؈^ lj@>FH1[]A\A]A^A_øgfff.?fATUS~\~DAQHuH?vMHHHG؉@LuHH[.tH[ÐuH[H@SHw&Ht4[KH9[f.@9HQHqAfHHdH4%(Ht$1Htu/AHAAtIc|/Ht~ twMcIL9sl9ȉt 1HHL9 9ȉuu1@fDu,Nw$HHDJf.DȃfDFAa@DFHE~IcȀ|/A7f.:DuAWAVIAUATUSH8dH%(HD$(1f>Ll$pLt$x~/1H|$(dH3<%(5H8[]A\A]A^A_HFIH1H$H<$HL$$LLLL$LD$HIuHLD$LL$*D$$\MDHLL\$LL$LD$L\$0LD$LL$@MLL$LL\$LLD$LAՅL\$LD$LL$LfA?HfA1ffA?M9LL$LL\$LLD$LAHILD$LT$LL$tIHuTM9uOHPfA?u!L$11LAHL$u+@HMM)LBffA?tٺ1fAJDufA?uMM)LfAMM)褚@HH9sIHwMHu!7Hw%HHtHH9u߸f1ffff.HH~NOw@HDu"ut,HH1fHHHu1PY:SL@H yHS1[ffffff.AWAVMAUATE1USE11HxH<$Ht$HT$HL$dH%(HD$h1LfH,I9sN$LLxHIJ It1L5u%D$,tYHHT$,LHIyL41H|$hdH3<%(Hx[]A\A]A^A_f.Ld$01HT$H8TLMHHD$Hl$@Ll$0HL$HH<$PH- THHuHHt$@H+t$8Hw$LLtM舘1O@Lp17L\HHH!HH;HHH!H.fffff.AUATIUSH(HL$dH%(HD$1yvH~~Ld$H@HL}HHx5LLuIH)uH|$D$ 虗D$ H|$膗HL$dH3 %(uH([]A\A]øjf.HgHfH1IdH%(H$11HH$HD$Hd&H$dH3 %(uHĸf.fAWL<AVAUATIUSHH(L9?HMHt$f A$I-LKM9KL fDI-HCI9KHfDI-tHCI9DKHfDI-uHCI9KHf.I>tHcɃ<tHCI9ZKHԐIHc<t/k!HLKL)H^M9vAKL0DIA"A>YHL)HVLKM9w1M9LtsIE1M)tkLLLL$1LL$HI9LNL@IA= A>)A<HI9%L9t ttAE}LH+D$H([]A\A]A^A_DI>HL)H;HLHD$LL$HcI9$ DA@I<HCI9KHfD"IHI9D fHcɃ<HCI9KHAfIHCI9jKH fDHCI9XKHHL)HHLHD$LL$HcI9BLKMLfDIM)dHCI9KHFIM)tLLL$LLL$HI9IHfDHL)HoHLHD$LL$HcI9XE1AEHCI9nKHRL9HIAM)}LLLL$ LL$H1LHD$LT$HcLL$I9MLmHLHD$LL$HcI9E1AG<DLLL$1LLL$HI9E1M9L˿&1L9H" |rh ^IHt$QE1AE8E1AG<(Af.ATUSHPdH%(HD$H1HL'MtGՍP wrH|$0PHLH<$H|$2T$Hc"A<$5w3D$02D$10HHDHL$HdH3 %(u0HP[]A\D$01D$19@SHffffff.AWAVIAUATIUSII1H11LHHtH[]A\A]A^A_;tMtjGIhL1MLLAXZfAWAVAUATAUSIHHHxdH%(HD$h1AL$LL$DD$UHt$0HI:HDD$LL$11LL$DD$"HIHDHAVLL$LDD$H|$ L1ҿ@PHD$ HHD$(HCHD$0Y^HCfHAVřXZHL$hdH3 %(Hu+Hx[]A\A]A^A_ÐA?PHLcHk0AUATMUSHHHxdH%(HD$h1HH>%HHI HHAD$ PD$PD$ PD$,PD$8PD$DH|$pDl1PH0wsHcLH|$@HL$hdH3 %(uNHx[]A\A]A}kL BfLރp 莌fffff.S HHt*P~&H;BHc҉CHw2H[D1[ùdN+f.USHHHHEu:tfHHuHH}Ut u;EHH[]f.H(HHEH[]@HH[]fEHUSHHH]tH1H[]HHuHH}UtރuEH[]DH[]fAWAVIAUATMUSHHH(L*dH%(HD$1MH1HjHMLHD$ Pj蹲H HHukL|$I)M9|FIcE}I9AE1HL$dH3 %(H([]A\A]A^A_@H1H!HHDL$ H$PHIH$DL$ tH-IםHIEt6I4.LH诇IEHB8HHT$H!=@AE1(fAWAVIAUATMUSHHLHHcu1Lt$HAV/IIXZtTMtgH}HtfHcuLAԅx8HcUIDHCHCHHH[]A\A]A^A_f.HL{HkH}uHcUtn߈ffffff.Ht'Ht"USHHH>Htt H[]fHH[]fAUATIUSLHMHxdH%(HD$h1HL$ HH Hl$@HD$ HHD$(HD$0LHD$HLd$PD$XD$\hdh dL$HT$PHt$0IHՃY^rOuD$\tc1HHL!H H|$hdH3<%(Hx[]A\A]fDT$Xu1HT$Ht$HH|$@Aԃt1fD1@HH^HHοLD$H$JH$HLD$Hnf.@yy@fDfDIIMtHHH@uH9v9HVAHAȀDLL9sHHHH@rL9uH@HSIHtD1H>v.Hһt$HLAjHHH1AXZ[HһtHALj1f.@AWAVIAUATIUSLHHHL*LdH%(HD$81MH1HjILLHD$ PjbH HHD$H)H9IMD$(Ld$ t AF Ht$H|$ H$蒗H$HD$IEHT$HH!HL$8dH3 %(HH[]A\A]A^A_H1H!HHDL$ H$踔H$IDL$ H1M~@H1H!HbHt$H|$ H$荗H$芅f.AWAVIAUATIUSHH8dH%(HD$(1HLt$pHHML @ AptLD1  HxHcHEHv;HL{LcHL$(dH3 %(HufH8[]A\A]A^A_f.LHHAՅxH+HCHCAtlDHHsHGnfffff.HH ȅ8r H(ATUISHH@M$dH%(HD$81HD$0HT$`H\$/LPEIII9uH$D$HH\$RH|$ H腏HD$0ZYH|$t>HT$HD$ HL$8dH3 %(HEHHUHT$HUu3H@[]A\H9uL븹 bPUSHLH8dH%(HD$(1HHtxHLt`@ AptLD1 HcPwOHcHHHL$(dH3 %(uJH8[]fDAtL¾ރ뿹8#~fffff.AWAVAUATIUSHHXL"LHl$0dH%(HD$H1MHl$ HT$ HLHD$0HD$8}IIׅu9MHt$(Ht AF uZHD$(I$ E1HHHLL!H Ht$HdH34%(u~HX[]A\A]A^A_E1fDLL$LD$HL$H$H$IHL$LD$LL$H1M 3 fff.AWAVAUATUSHHHXL9LLl$0dH%(HD$H1MLl$(HL$(HHHD$0HD$8HIąu,MLLt AF 腑HEغLRHHHL!H Ht$HdH34%(ufHX[]A\A]A^A_þLD$HL$HT$ŽHL$HIHT$LD$H%1ÑY@AVAUATUISHHH0dH%(HD$(1HHHIMH1H$HHD$t @ )t0HLcHkHL$(dH3 %(Hu}H0[]A\A]A^ÐH|$MHLL誑HHHD$HHD$HCHD$ HCHHsHG蛚]~f.fAWAVAUATUSHhdH%(HD$X1HLMLcWA L\$ 1H͹LHA0 IՉD$4AQ0 BT$4AA0 wPT$4AA0 \P\$4AA0 AD$0AQJЃ ,I-I)IDE1I9GiT$ AAADIA 0T$$I9AA 0 Mq PM9։D$$t@AQ BU11AHHIgHHAD$ PD$PD$ PD$,PD$8PD$DH|$pDl1!PH0wnHcLH|$@H|$hdH3<%(uIHx[]A\A]f.A}hL B뼐Lރ7w`"x sfffff.USHHdH%(HD$1HD$HT$H7It$~dt`9 $~-)E1AgffffDAA)A9u9~1)f. 9u LDLH\$dH3%(uH[]110vAWAVIAUATUSHXdH%(HD$H1HIӉDD$ `HI:DD$ M~(ED$ t_MtZIH|$L|$8HD$IFD)|$HD$IFHD$ IFHD$(IF HD$0IF0HD$@sH|$8Lt$AHAVALPAFDlPAFPAF PAFP1虋H0AI}M]MMAE.M,gfff؃)ڃuAOMuHgfffffffADH0LHI?IqNHL)I9IM|E~wIHcHI I~|$ t{ZGAMAI<$HtqM,$Et$LH|$HdH3<%(`HX[]A\A]A^A_@IA 0t1.@LAE)|$ uLHW)QΠEHHLH?D)AAH HH|jYHH)HiɀQI)LLHLH?H IHI)IiH)HH?H1H)HH1HH?HH)HR茉ZYLo41(衁HILo1fDA1r@_x%oDAWAVMAUATIUSHHHL$DD$ dH%(HD$x1uHL$@HT$Ht$AHL$IwHL$T$Ht$@1AHIHHMAWDD$HL$H|$0UdI}nLnHD$0I$HD$8ID$HD$@ID$XZH\$xdH3%(Lu1HĈ[]A\A]A^A_A}XI$Il$I\$Lqfff.AWAVAAUATIUSIHDHdH%(HD$x1AL$LL$$HL$@HT$Ht$ALH$-HL$LL$L$T$Ht$@1ALL$kHH$HDAAWLL$LLH|$0xHD$1ҿ@HHHD$0HHD$8HCHD$@Y^HCf.HAWuxXZHL$xdH3 %(Hu3HĈ[]A\A]A^A_fDA:4HLkLcoA11@wf?w @Ðf.H9HHHGH.HHGH3HHG(H0HHG0H-HHG8H*HHG@H'HHGHH$HHGPt.HOHHJHHEHHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIILcNIAH=w@HIL9s.DEu#DB tHL9u1ۉ[ÐMһtHLAj?HH1LAXZ[fDHһtHALj21fDHcHt%tt t@DDfPfT@*gHcHt%tt t1@DPfB@*gAWAVIAUATIUSMHhH*LdH%(HD$X1HH|$HDL$HD$ 0Ic[Hf\~bfhfHs11HuHH#D$HHH|$XdH3<%(Hh[]A\A]A^A_@fwDT$EENhEHCHD$(HE1ffDCL9HT$LLIGL\$0uHIHHL\$0D$LIcKM{LT$0AD$<A1AfH9s;H9HHHL2AAE9HxH9rfA{(LT$0(|$HsI9HIFHv`A~yHFIIHHIHHsUII))@|$HHHLHEHHރLHHfDAVAUIATUISHMH HdH%(HD$1HH1MjHLLHD$ Pj[rH I|H|$I)I9|?1HHD u 0HH9 uHHL!H1L!HH\$dH3%(uNH []A\A]A^LDL$ H$[H$HDL$ H1H۸Lf.AWAVIAUATIUSH1ɾH LML|$XdH%(HD$1AWwHHZYtcMt"ALH|$؈D$AԅxLHHCHCH+HL$dH3 %(Hu3H[]A\A]A^A_HLkLsHLkLsLf.HhP$eAQMIȹHHtHt HH@fffff.SHHHtSL覞t2uH1[f.1H[LD$H $[H $H1HLD$H{fff.HSHt71LDž@HHHCHC[@HHHwHG[USHHHt:v.Hһt$HLAjHHH1AXZ[HһtHALj1fffff.HSIHtD1H>v.Hһt$HLAj6HHH1AXZ[HһtHALj*1fffff.HSIHtD1H>v.Hһt$HLAjOHHH1AXZ[f.HһtHALjC1fffff.HSIHtD1H> v.Hһt$HLAjhHHH1AXZ[f.HһtHALj\1f.@AWAVAUATMUSHHHBHH<$Ht$L$DD$E1E1E1HJ8Ht=HHE1jE1DE HH|$0P0HT$0Ht$8HL$@A[HXIAID9sHM$DD$,LT$ H|$rHIAYAZJ MHD$DCE1L$E~SHJHt8HHE1AWMDE HH|$0P0HT$0Ht$8HL$@XH_t?IAD$I9CL9t$t_IH$HL$L0HHHXf.H$HHpHHH$HH[]A\A]A^A_H$Ht$L0HpHX1HD$H$Ht$H@H0H@E1DAWAVHAUATIUSLHHHt$@HH|$0L$LDD$ H$D^Ht$PHD$EnLp8A>L0H|$ M|$$]EUEt$L1H$HD$Lt$ADHB HcHL$XIщL$H T$xHL$8HD$(HcH|$`IEH $Lv.Hһt$HLA`juHHH1AXZ[f.HһtHA`Lji1fffff.HSIHtD1H>v1Hһt'HLA`hHHH1AXZ[HһtHA`Lh1ff.HSIHtD1H>v1Hһt'HLA`hHHH1AXZ[@HһtHA`Lh1ff.HSIHtD1H>v1Hһt'HLA`hHHH1AXZ[@HһtHA`Lh1ff.HSIHtTH1LIv1Mһt'HLA`hHHH1AXZ[f.HһtHA`Lh1ff.HSIHtD1H>dv1Hһt'HLA`hHHH1AXZ[HһtHA`Lh1f.HHHG HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPtHHHHHHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtLLcF1IIv.Hһt$HLAjHHH1AXZ[HһtHALj1fDHSIHtLLcF1IIv.Hһt$HLAj8HHH1AXZ[HһtHALj,1fDHSIHtLLcF1IIv.Hһt$HLAjRHHH1AXZ[HһtHALjF1fDH HHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPt.HHHHHHHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF 1AD9t.Mһt$HLApj#HH1LAXZ[DHһtHApLj1f.@HSIHtD~t6Hһt$HLAjHHH1AXZ[@1ۉ[fHһtHALj1fffff.HSIHtD~t6Hһt$HLAj8HHH1AXZ[@1ۉ[fHһtHALj,1f.@HBHHG HBHHHGH~BHHGHBHHG(HBHHG0H}BHHG8HzBHHG@HwBHHGHHtBHHGPt.HBHHBHHBHHDHiBHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLAx jHHH1AXZ[HһtHAx Lj1fffff.HSIHtD1H>v.Hһt$HLAx j6HHH1AXZ[HһtHAx Lj*1fffff.HSIHtD1H>v.Hһt$HLAx jOHHH1AXZ[HһtHAx LjC1f.@USHHoH^H?H6H9HHF?u1H9ݺBH[]fATUSH_HnH?H6IH9LFL\?uH9t 1L9D[]A\fHJLL;Bw)USHHHHH HH$HkH1[]fAUATIUSHHHHJHBHH9s,HH<HLZ$Hk1H[]A\A]fL,H;L$Ht HLkHK붸AWAVAUATIUSLHH8L2LdH%(HD$(1H<$LMMcd$ME$fA[fAtD1fEHHL!H|$(dH3<%(2H8[]A\A]A^A_DID$1E1HyuH9HHFHH;LH)ڀ{t/H9HHFH;k{aHHHHL,ID$uL fA$5DID$DT$HjIHPjLH|$ LLH IDT$kMD$MLHH)IxIMD$1IfA$fAt$@ET$MD$E1ID$HD$AujMI9LHT$$HGHL\$UUHL\$FHMD$ML,AG t |$$9vfAL$IGI9ALGHHT$H<$HP(I!rIGL$1It$HPID$L$HLL!HID$Hx H9HLL!H@LIt$LL\$HT$yHT$L\$u;ID$MD$HH)MxI)MD$I1E1fAT$HLL!HLHL!HH@ID$HxH9H)ID$HLL!H@Ic4$L\$DL$HT$4HT$IDL$L\$H1M;qLHL!Ht ;RHHFfDHH)VD;L9LHFH^{fA$fAD$L% HLfA $L!L$(TA T$DAWAVIAUATUSHxLZH|$Ht$0L$DD$ID$LL$ H$Lp0E11IHHJHtDH1E1jED$ Ht$H|$`AHT$`Ht$hHL$pAZHA[HI9LBAUI9SHLIHH$LL$0DD$(T$H|$@?OHHD$(AXAYthHl$H|$ Hl$HtAounHD$HL$HH@HH@HD$Hx[]A\A]A^A_DHD$HHpHHfDHD$Ht$0HHpLxDHcH<@H3HHD$(tƅT1Lt$@E1Ld$8I@IJHHT$tHL$(KDmHH,i3HHE9HHEH]UHD$H1HT$Ht$ADeH|$`D@ HD$PHD$`HL$hHT$p^H_RHD$IAFIA;G^Ld$(ML De1E1L-MtRLLt$ !DAI<$HI!H9t!EuIt$H$I<$AAEH|$(HD$HHL$H9u$HuHD$H(H@H@Hڻ1Dt9HcЉHt$(H RH)HRHH,H@H;HdH9uH|$(UHD$HL$0HHHLxHt$(IcIH@IHHnDH;H H9uH|$(Ll$L$$HD$HL$H$HHHHP9H|$( De11+DAWAVAUATMUSLHHHLH|$HL$ dH<%(H|$81HL*MCIG88HD$u IGH@HD$LcS1OtAf8I~H|$I~H<$fH<$HL$4LH}HH HHHt$8dH34%(HH[]A\A]A^A_ÃT~HEHD$\DAffAfIGMIHL$HT$H|$HP8YIvLHT$(HT$(uWIFHI)HfA> D$4wTAHI)HfDfAHHFHD$ Of.HT$ HHL$(|wHL$($ fHc3H$?-H$IH1M}AfHI)H˹fA'@Af1H fA61@fA>u @HAWAVIAUATUSHHHL$hHH|$HDD$fDAE9t/HރӅyH([]A\A]A^A_HD$IHًT$Ht$H@HPuAEIA;F`HӅxE1AEt$$HAE9tHރӅySL¾ރH([]A\A]A^A_fffff.HHAVAUAATUISF1HL~+DHEH4Ht ID$1HPCH9EEHIHcXHHsHtID$1HPHCEt[]A\A]A^[H]A\A]A^AWAVIAUATIUSHHHLt}Mg MF~:1HEH4HtILLAԅu*CH9EI t1H[]A\A]A^A_@@IGL` Mg fHһtHHLhCAX 1L1AY^fDVIGL` LAWAVMAUATIUSHHHLLdH%(HD$81HL)D$$H|$0tVHHtNHt$0HH)HH?H1H)H9~11H\$8dH3%(HH[]A\A]A^A_MHvHj E@uIMMtZHD$IGIW(MHD$(HL$(HHPHHT$HD$uLHt$(LZu6HD$HD$L9uD$$H1H#D$@Ht$(HtIOD$1HQD$HH#T$H HT$LeLcMx8LeMHtuHT$$LhHID1z@Ldx1II$HtH xfIc0HL$HT$ HL$HIHT$H96fDHATUHStlHItdHcW;W tHJML$1[]A\u, H} Ht6HE] HcUHcH@#뢸ffffff.HtauXG9}Qt7Ht0LHcI HGHIHHt%HGHfDHHcGHHHHteSHH?HtJHSHt5KAɉCu&HSH;HH<ҋSB҉CuH; HCC [@HyHHG HYHHHGHNHHGHSHHG(HPHHG0HMHHG8HJHHG@HGHHGHHDHHGPtHoHHjHHIHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.USIHHHHHLcVIL9s(D IAA<^v"fEAA<^wIM9u1H[]MۻtHI)1jChh HAQHMH( LHAH H[]MۻtHHLjJH1HAh AXZH[]ÐHyHHG HYHHHGHNHHGHSHHG(HPHHG0HMHHG8HJHHG@HGHHGHHDHHGPtHoHHjHHIHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA juHHH1AXZ[HһtHA Lji1fffff.HSIHtD1H>v1Hһt'HLA hHHH1AXZ[HһtHA Lh1f.HY~HHG H9~HHHGH.~HHGH3~HHG(H0~HHG0H-~HHG8H*~HHG@H'~HHGHH$~HHGPtHO~HHJ~HH)~HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H)}HHHGH}HHGH#}HHG(H }HHG0H}HHG8H}HHG@H}HHGHH}HHGPt.H?}HH:}HH5}HHDH }HHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF ŀ1AD9t.Mһt$HLA j#HH1LAXZ[DHһtHA Lj1f.@ATUISHH@H)dH%(HD$81HD$(HHD$0tpHL$0LHIąt/HL!H Ht$8dH34%(uH@[]A\fDHt$(HHT$HT$HE@LD$HL$HT$HL$HHHT$LD$HT1qAVAUMATUISHHIHHHdH%(HD$1t6HLcHkHT$dH3%(Hu*H[]A\A]A^MHLLHEDHwHHHGHwHHGHwHHG(HwHHG0HwHHG8HwHHG@HwHHGHHwHHGPt.HxHH xHHxHHDHwHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF 1AD9t.Mһt$HLA` j#HH1LAXZ[DHһtHA` Lj1f.@AWAVAUATIUSHMHhdH%(HD$X1H0L6M$BD$HcFLI9HD$L|$LLH)ƒL9A}LՅx.T$1ۅNfD;\$t?LރՅyHL$XdH3 %((Hh[]A\A]A^A_@HD$LLH)HՅxL|$@AIIWރAAFAG L;t$ރAGt5IEI fLރRfHD$H9vtA}Mw~NLՅD$~/E1AD;l$tLރՅyHD$LLH)H1fDAWAVAAUATUSHL$PH|$0dH %(H$1HHt$HHT$L$0DD$8gL*M[HD$MHc@IDI9HD$L$PHD$(ID$<HHD$XHD$`HHD$ H$HHD$fDAm|$8AHL$LH+HD$ LH)HHt$@AօxVLAօxBL$<1ۅil$T݋\$<f9ELރAօyHD$0H|$HHT$HHxHPH$dH3%(HD$0H[]A\A]A^A_DH;t$AHHcIHFJFL;l$HT$8uHT$LH+&HD$ LH)HHAօ3H\$(L;l$rD$8HD$0HH@H@H\$ LH)HHt$(AօH-fl$THD$@HD$(HD$XHt$ HD$( fDHD$0HL$HH|$HHHHxLAօll$PHl$8E1u DAA9LރAօy)LAօD$Pl$8IE1ufAA9LރAօyH\$`HD$(H\$ GHD$A}D@ AyHT$ ApH1B9uD)HHLH|$ AօPH%HH HHD$(11:f.HSIHt\H>tVNt?~ vqMһt$HLAj9PHHH1AXZ[^ u[DMһtHALj?1f.fHSIHtDLcF1II1v.Hһt$HLAjHHH1AXZ[fHһtHALj1fffff.HSIHtDLcF1II1v.Hһt$HLAj8HHH1AXZ[fHһtHALj,1f.@HSIItTF~DF ŀ1AD9t.Mһt$HLAj#HH1LAXZ[DHһtHALj1fffff.HSIItTF~DF 1AD9t.Mһt$HLAjBHH1LAXZ[DHһtHALj11f.@HSIHtD1H>?v.Hһt$HLAPjHHH1AXZ[f.HһtHAPLj1fffff.HSIHtD1H>v.Hһt$HLAPj6HHH1AXZ[HһtHAPLj*1f.@HHHGHGDHHHGHGDSH1H1Ht$fHCHHCXHZ[fff.Hh@~eAQMIȹdHHHHRHÐH9t 11DSHHHt 11[øHHLt yHþރHf.fH9HHG HHHHGHHHGHHHG(HHHG0H HHG8H HHG@HHHGHHHHGPt.H/HH*HH%HHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]f.UHAWAVAUATISIHH(L}HdH%(HE1HH2MHHHPLHH1ALRH#HH)LֺL\$LUILL]HcHLUL]I9HHMLLAօHMx;H HCHCHudH34%(HuCHe[A\A]A^A_]HLkLcHHsHC?XMffff.HAVAUATUSLL)MHtFMLIuIsxUHZ>HcHAD$IcD$H9X[1]A\A]A^H>xgtAL$tH|BHxOA|$WHcHIcD$H9}HRI$H1HIE1[]A\A]A^HrfD[1]A\A]A^HHD)HIIDAWAVAUATIUSHIHHLMtTHHI4$Hx?IcN1IHH9v.L :f.IOINI;2t8IQH9wӐHELmLeHH[]A\A]A^A_fDI)‹SHIMLAFuUI9|[tLǺLD$\ALD$uAVwEDL)dCt+[HcI9}upDL A5HEHEHE(I9LI@uAF1EqD1LLD$@SLD$df.HHHHHuHGHSIHtD1H>v.Hһt$HLAjHHH1AXZ[HһtHALj1fffff.HSIHtD1H>v.Hһt$HLAj6HHH1AXZ[HһtHALj*1f.@H ^HHG H]HHHGH]HHGH]HHG(H]HHG0H]HHG8H]HHG@H]HHGHH]HHGPtH]HH]HH]HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPt.HHHHHHHDHyHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAjHHH1AXZ[HһtHALj1f.@HIWHHG H)WHHHGHWHHGH#WHHG(H WHHG0HWHHG8HWHHG@HWHHGHHWHHGPtH?WHH:WHHWHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H)THHG H THHHGHSHHGHTHHG(HTHHG0HSHHG8HSHHG@HSHHGHHSHHGPtHTHHTHHSHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H QHHG HPHHHGHPHHGHPHHG(HPHHG0HPHHG8HPHHG@HPHHGHHPHHGPtHPHHPHHPHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HMHHG HMHHHGHMHHGHMHHG(HMHHG0HMHHG8HMHHG@HMHHGHHMHHGPtHMHHMHHMHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLA@jHHH1AXZ[HһtHA@Lj1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGH GHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAjHHH1AXZ[f.HһtHALj1f.@HYGHHGHNGHGHSGHG(HPGHG0HMGHG8HJGHG@HGGHGHHDGHGPt.HoGHjGHeGHDH9GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAxjHHH1AXZ[f.HһtHAxLj1f.@HSIHtD1H>?v.Hһt$HLAjHHH1AXZ[f.HһtHALj1fffff.HSIHtD1H>v.Hһt$HLAj6HHH1AXZ[HһtHALj*1f.@HCHHHGHCHHGHCHHG(HCHHG0HCHHG8HCHHG@HCHHGHHCHHGPt.HDHH DHHDHHDHCHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF ŀ1AD9t.Mһt$HLAj#HH1LAXZ[DHһtHALj1f.@HSIHtD1H>v.Hһt$HLAjHHH1AXZ[HһtHALj1f.@H=HHG H=HHHGH=HHGH=HHG(H=HHG0H=HHG8H=HHG@H=HHGHH=HHGPtH=HH=HH=HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H:HHG H:HHHGH:HHGH:HHG(H:HHG0H:HHG8H:HHG@H:HHGHH:HHGPtH:HH:HH:HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLA@jHHH1AXZ[f.HһtHA@Lj1fffff.HSIHtD1H>v.Hһt$HLA@j6HHH1AXZ[f.HһtHA@Lj*1fffff.HSIHtD1H>v.Hһt$HLA@jOHHH1AXZ[HһtHA@LjC1fffff.HSIHtD1H>v.Hһt$HLA@jhHHH1AXZ[f.HһtHA@Lj\1f.@HSIItTF~DF 1AD9t.Mһt$HLAj#HH1LAXZ[DHһtHALj1fffff.HSIItTF~DF 1AD9t.Mһt$HLAjBHH1LAXZ[DHһtHALj11fffff.HSIItTF~DF 1AD9t.Mһt$HLAjaHH1LAXZ[DHһtHALjP1f.@H3HHG H3HHHGH3HHGH3HHG(H3HHG0H3HHG8H3HHG@H3HHGHH3HHGPtH3HH3HH3HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLAjHHH1AXZ[HһtHALj1fffff.HSIHtD1H>v.Hһt$HLAj6HHH1AXZ[HһtHALj*1fffff.HSIHtD1H>v.Hһt$HLAjOHHH1AXZ[HһtHALjC1fffff.HSIHtD1H>v.Hһt$HLAjhHHH1AXZ[HһtHALj\1fffff.HSIHtD1H>v1Hһt'HLAhHHH1AXZ[@HһtHALju1f.@HSIHtD~t6Hһt$HLA j+HHH1AXZ[@1ۉ[fHһtHA Lj1fffff.HSIHtD~t6Hһt$HLA jEHHH1AXZ[@1ۉ[fHһtHA Lj91fffff.HSIItTF~DF 1AD9t.Mһt$HLA jdHH1LAXZ[DHһtHA LjS1fffff.HSIHtD~t6Hһt$HLA j~HHH1AXZ[@1ۉ[fHһtHA Ljr1fffff.HSIIttLcFI@H=w"HIL9rOHL9t?8yMһt'HLA hHH1LAXZ[D1ۉ[fHһtHA Lh1f.H+HHG Hi+HHHGH^+HHGHc+HHG(H`+HHG0H]+HHG8HZ+HHG@HW+HHGHHT+HHGPtH+HHz+HHY+HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIItTF~DF 1AD9t.Mһt$HLA j#HH1LAXZ[DHһtHA Lj1fffff.HSIItTF~DF 1AD9t.Mһt$HLA jBHH1LAXZ[DHһtHA Lj11f.@HSIItTF~DF 1AD9t.Mһt$HLA j#HH1LAXZ[DHһtHA Lj1fffff.HSIItTF~DF 1AD9t.Mһt$HLA jBHH1LAXZ[DHһtHA Lj11fffff.HSIItTF~DF 1AD9t.Mһt$HLA jaHH1LAXZ[DHһtHA LjP1fffff.HSIItTF~DF 1AD9t1Mһt'HLA hHH1LAXZ[fHһtHA Ljo1f.@H %HHG H$HHHGH$HHGH$HHG(H$HHG0H$HHG8H$HHG@H$HHGHH$HHGPtH$HH$HH$HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIIHHtxHcFHH9s&D IEyfDEExII9u1ۉ[MһtHI)1j@h!HAQHMHp!LLAH [@MһtHHLjGH1A!LAXZ[f.@HSIItTF~DF 1AD9t.Mһt$HLA"j#HH1LAXZ[DHһtHA"Lj1fffff.HSIItTF~DF 1AD9t.Mһt$HLA"jBHH1LAXZ[DHһtHA"Lj11fffff.HSIItTF~DF 1AD9t.Mһt$HLA"jaHH1LAXZ[DHһtHA"LjP1fffff.HSIItTF~DF 1AD9t1Mһt'HLA"hHH1LAXZ[fHһtHA"Ljo1fffff.HSIItTF~DF 1AD9t1Mһt'HLA"hHH1LAXZ[fHһtHA"Lh1ff.HSIItTF~DF 1AD9t1Mһt'HLA"hHH1LAXZ[fHһtHA"Lh1f.HSIHtD1H>v.Hһt$HLA"jHHH1AXZ[HһtHA"Lj1fffff.HSIHtD1H>v.Hһt$HLA"j6HHH1AXZ[HһtHA"Lj*1fffff.HSIHtD1H>v.Hһt$HLA"jOHHH1AXZ[HһtHA"LjC1fffff.HSIHtD1H>v.Hһt$HLA"jhHHH1AXZ[HһtHA"Lj\1f.@HSIHtD1H>: v.Hһt$HLAH#jHHH1AXZ[HһtHAH#Lj1fffff.HSIHtD1H>v.Hһt$HLAH#j6HHH1AXZ[f.HһtHAH#Lj*1f.@HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPt.HHHHHHHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HHIItAHcFHHvSHt$HA#jLHH1LAXZHHtHA#j1LHG HfDHHHG HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPtHHH HHHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLAH$jHHH1AXZ[f.HһtHAH$Lj1f.@H HHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPt.HHHHHHHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1IIv.Hһt$HLA$jHHH1AXZ[fHһtHA$Lj1f.@HiGHHGH^GHGHcGHG(H`GHG0H]GHG8HZGHG@HWGHGHHTGHGPt.HGHzGHuGHDHIGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH>v6Hһt$HLA%jHHH1AXZ[@1ۉ[fHһtHA%Lj1f.@HSIHtLH1LIv.Mһt$HLA`%jHHH1AXZ[DHһtHA`%Lj1fDHSIItLAL1I9v.Hһt$HLA`%j6HH1LAXZ[DHһtHA`%Lj*1fDHSIHtD1H>v.Hһt$HLA`%jOHHH1AXZ[HһtHA`%LjC1fffff.HSIHtD1H>v.Hһt$HLA`%jhHHH1AXZ[HһtHA`%Lj\1fffff.HSIHtTH1LIv1Mһt'HLA`%hHHH1AXZ[f.HһtHA`%Lju1fffff.HSIHtD1H>v1Hһt'HLA`%hHHH1AXZ[@HһtHA`%Lh1ff.HSIHtTH1LIv1Mһt'HLA`%hHHH1AXZ[f.HһtHA`%Lh1ff.HSIHtTH1LIv1Mһt'HLA`%hHHH1AXZ[f.HһtHA`%Lh1f.HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHyGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA&jHHH1AXZ[f.HһtHA&Lj1f.@H9GHHGH.GHGH3GHG(H0GHG0H-GHG8H*GHG@H'GHGHH$GHGPt.HOGHJGHEGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1IIv.Hһt$HLA&jHHH1AXZ[fHһtHA&Lj1f.@HSIHtD1H>?v.Hһt$HLA 'jHHH1AXZ[f.HһtHA 'Lj1fffff.HSIHtD1H>'v.Hһt$HLA 'j6HHH1AXZ[HһtHA 'Lj*1fffff.HSIHtD1H>v.Hһt$HLA 'jOHHH1AXZ[f.HһtHA 'LjC1f.@HSIItTHHHv7Hһt$HLA'jHH1LAXZ[D1ۉ[f.HһtHA'Lj1fffff.HSIHtDH1LBIv.Mһt$HLA'j6HHH1AXZ[HһtHA'Lj*1f.@HɠGHHGHGHGHàGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HߠGHڠGHՠGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLA(jHHH1AXZ[f.HһtHA(Lj1f.@HyGHG HYGHHGHNGHGHSGHG(HPGHG0HMGHG8HJGHG@HGGHGHHDGHGPtHoGHjGHIGHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HIGHHGH>GHGHCGHG(H@GHG0H=GHG8H:GHG@H7GHGHH4GHGPt.H_GHZGHUGHDH)GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1II'v.Hһt$HLA*jHHH1AXZ[fHһtHA*Lj1f.@HSIHtD1H>v.Hһt$HLA*jHHH1AXZ[HһtHA*Lj1fffff.HSIHtD1H>v.Hһt$HLA*j6HHH1AXZ[HһtHA*Lj*1fffff.HSIHtLH1LIv.Mһt$HLA*jOHHH1AXZ[DHһtHA*LjC1fDHSIHtLH1LIv.Mһt$HLA*jhHHH1AXZ[DHһtHA*Lj\1fDHSIHtD1H>v1Hһt'HLA*hHHH1AXZ[@HһtHA*Lju1fffff.HSIHtD1H>v1Hһt'HLA*hHHH1AXZ[@HһtHA*Lh1ff.HSIHtTH1LIv1Mһt'HLA*hHHH1AXZ[f.HһtHA*Lh1ff.HSIHtTH1LIv1Mһt'HLA*hHHH1AXZ[f.HһtHA*Lh1ff.HSIHtTH1LIv1Mһt'HLA*hHHH1AXZ[f.HһtHA*Lh1ff.HSIHtTH1LIv1Mһt'HLA*hHHH1AXZ[f.HһtHA*Lh1ff.HSIHtTH1LIv1Mһt'HLA*hHHH1AXZ[f.HһtHA*Lh 1f.HSIHtD1H>v.Hһt$HLAp+jHHH1AXZ[HһtHAp+Lj1fffff.HSIHtD1H>v.Hһt$HLAp+j6HHH1AXZ[f.HһtHAp+Lj*1fffff.HSIHtLH1LIv.Mһt$HLAp+jOHHH1AXZ[DHһtHAp+LjC1fDHSIHtDH1LBIv.Mһt$HLAp+jhHHH1AXZ[HһtHAp+Lj\1fffff.HSIHtLH1LBIv1Mһt'HLAp+hHHH1AXZ[DHһtHAp+Lju1fDHSIHtDH1LBIv1Mһt'HLAp+hHHH1AXZ[HһtHAp+Lh1ff.HSIHtLH1LBIv1Mһt'HLAp+hHHH1AXZ[DHһtHAp+Lh1HSIHtDH1LBIv1Mһt'HLAp+hHHH1AXZ[HһtHAp+Lh1f.HGHG HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPtHGHGHGHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HGHG HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPtHGHGHGHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtLH1LIv.Mһt$HLA-jHHH1AXZ[DHһtHA-Lj1fDHSIHtLH1LIv.Mһt$HLA-j6HHH1AXZ[DHһtHA-Lj*1fDHSIHtLH1LIv.Mһt$HLA-jOHHH1AXZ[DHһtHA-LjC1fDHSIHtLH1LIv.Mһt$HLA-jhHHH1AXZ[DHһtHA-Lj\1fDHSIHtTH1LIv1Mһt'HLA-hHHH1AXZ[f.HһtHA-Lju1fffff.HSIHtTH1LIv1Mһt'HLA-hHHH1AXZ[f.HһtHA-Lh1ff.HSIHtTH1LIv1Mһt'HLA-hHHH1AXZ[f.HһtHA-Lh1ff.HSIHtTH1LIv1Mһt'HLA-hHHH1AXZ[f.HһtHA-Lh1f.HGHHGHGHGHGHG(HGHG0H GHG8H GHG@HGHGHHGHGPt.H/GH*GH%GHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAH.jHHH1AXZ[f.HһtHAH.Lj1f.@HSIHtLH1LIv.Mһt$HLA.jHHH1AXZ[DHһtHA.Lj1fDHSIHtD1H>v.Hһt$HLA.j6HHH1AXZ[HһtHA.Lj*1fffff.HSIHtD1H>v.Hһt$HLA.jOHHH1AXZ[f.HһtHA.LjC1fffff.HSIHtD1H>v.Hһt$HLA.jhHHH1AXZ[f.HһtHA.Lj\1fffff.HSIHtD1H>v1Hһt'HLA.hHHH1AXZ[HһtHA.Lju1f.@H9qGHHGH.qGHGH3qGHG(H0qGHG0H-qGHG8H*qGHG@H'qGHGHH$qGHGPt.HOqGHJqGHEqGHDHqGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1II'v.Hһt$HLAP/jHHH1AXZ[fHһtHAP/Lj1f.@HSIHtD1H>v.Hһt$HLA/jHHH1AXZ[HһtHA/Lj1f.@HwGHHGHwGHGHwGHG(HwGHG0HwGHG8HwGHG@HwGHGHHwGHGPt.HwGHwGHwGHDHwGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>3v.Hһt$HLAX0jHHH1AXZ[f.HһtHAX0Lj1f.@HSIHtD1H>?v.Hһt$HLA0jHHH1AXZ[f.HһtHA0Lj1fffff.HSIHtD1H>v.Hһt$HLA0j6HHH1AXZ[f.HһtHA0Lj*1f.@H9sGHHGH.sGHGH3sGHG(H0sGHG0H-sGHG8H*sGHG@H'sGHGHH$sGHGPt.HOsGHJsGHEsGHDHsGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAx1jHHH1AXZ[HһtHAx1Lj1f.@HSIHtD1H>v.Hһt$HLA1jHHH1AXZ[HһtHA1Lj1fffff.HSIHtD1H>v.Hһt$HLA1j6HHH1AXZ[HһtHA1Lj*1f.@HnGHHGHnGHGHnGHG(HnGHG0HnGHG8HnGHG@HnGHGHHnGHGPt.HnGHnGHnGHDHynGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA2jHHH1AXZ[HһtHA2Lj1f.@HSIHtD1H>v.Hһt$HLA2jHHH1AXZ[HһtHA2Lj1fffff.HSIHtD1H>v.Hһt$HLA2j6HHH1AXZ[HһtHA2Lj*1fffff.HSIHtD1H>v.Hһt$HLA2jOHHH1AXZ[HһtHA2LjC1fffff.HSIHtD1H>?v.Hһt$HLA2jhHHH1AXZ[HһtHA2Lj\1fffff.HSIHtD1H>v1Hһt'HLA2hHHH1AXZ[@HһtHA2Lju1fffff.HSIHtD1H>v1Hһt'HLA2hHHH1AXZ[@HһtHA2Lh1ff.HSIHtD1H>v1Hһt'HLA2hHHH1AXZ[@HһtHA2Lh1ff.HSIHtD1H>?v1Hһt'HLA2hHHH1AXZ[@HһtHA2Lh1f.HSIHtD1H>v.Hһt$HLA3jHHH1AXZ[HһtHA3Lj1fffff.HSIHtD1H>?v.Hһt$HLA3j6HHH1AXZ[f.HһtHA3Lj*1fffff.HSIHtD1H>?v.Hһt$HLA3jOHHH1AXZ[f.HһtHA3LjC1f.@HyeGHHGHneGHGHseGHG(HpeGHG0HmeGHG8HjeGHG@HgeGHGHHdeGHGPt.HeGHeGHeGHDHYeGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?[sv.Hһt$HLA4jHHH1AXZ[HһtHA4Lj1f.@HSIHtD1H>v.Hһt$HLA 5jHHH1AXZ[f.HһtHA 5Lj1fffff.HSIHtD1H>v.Hһt$HLA 5j6HHH1AXZ[f.HһtHA 5Lj*1f.@HSIHtD1H>v.Hһt$HLA5jHHH1AXZ[HһtHA5Lj1fffff.HSIHtD1H>v.Hһt$HLA5j6HHH1AXZ[HһtHA5Lj*1f.@H_GHHGH_GHGH_GHG(H_GHG0H_GHG8H_GHG@H_GHGHH_GHGPt.H_GH_GH_GHDH_GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA06jHHH1AXZ[f.HһtHA06Lj1f.@H9\GHHGH.\GHGH3\GHG(H0\GHG0H-\GHG8H*\GHG@H'\GHGHH$\GHGPt.HO\GHJ\GHE\GHDH\GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA6jHHH1AXZ[HһtHA6Lj1f.@HXGHHGHXGHGHXGHG(HXGHG0HXGHG8HXGHG@HXGHGHHXGHGPt.HXGHXGHXGHDHyXGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA7jHHH1AXZ[f.HһtHA7Lj1f.@HTGHHGHTGHGHTGHG(HTGHG0HTGHG8HTGHG@HTGHGHHTGHGPt.HUGH UGHUGHDHTGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA7jHHH1AXZ[HһtHA7Lj1f.@HYQGHHGHNQGHGHSQGHG(HPQGHG0HMQGHG8HJQGHG@HGQGHGHHDQGHGPt.HoQGHjQGHeQGHDH9QGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAh8jHHH1AXZ[HһtHAh8Lj1f.@HMGHHGHMGHGHMGHG(HMGHG0HMGHG8HMGHG@HMGHGHHMGHGPt.HMGHMGHMGHDHMGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA8jHHH1AXZ[f.HһtHA8Lj1f.@HJGHHGHJGHGHJGHG(HJGHG0H JGHG8H JGHG@HJGHGHHJGHGPt.H/JGH*JGH%JGHDHIGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA9jHHH1AXZ[HһtHA9Lj1f.@HyFGHHGHnFGHGHsFGHG(HpFGHG0HmFGHG8HjFGHG@HgFGHGHHdFGHGPt.HFGHFGHFGHDHYFGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA`9jHHH1AXZ[f.HһtHA`9Lj1f.@HBGHHGHBGHGHBGHG(HBGHG0HBGHG8HBGHG@HBGHGHHBGHGPt.HBGHBGHBGHDHBGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA:jHHH1AXZ[f.HһtHA:Lj1f.@H9?GHHGH.?GHGH3?GHG(H0?GHG0H-?GHG8H*?GHG@H'?GHGHH$?GHGPt.HO?GHJ?GHE?GHDH?GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtLH1LI@v.Mһt$HLA:jHHH1AXZ[DHһtHA:Lj1fDH;GHHGH;GHGH;GHG(H;GHG0H;GHG8H;GHG@H;GHGHH;GHGPt.H;GH;GH;GHDHy;GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH1LBIv.Mһt$HLA;jHHH1AXZ[HһtHA;Lj1f.@H7GHHGH7GHGH7GHG(H7GHG0H7GHG8H7GHG@H7GHGHH7GHGPt.H8GH 8GH8GHDH7GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA;jHHH1AXZ[HһtHA;Lj1f.@HY4GHHGHN4GHGHS4GHG(HP4GHG0HM4GHG8HJ4GHG@HG4GHGHHD4GHGPt.Ho4GHj4GHe4GHDH94GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH1LBIv.Mһt$HLA;jHHH1AXZ[HһtHA;Lj1f.@H0GHHGH0GHGH0GHG(H0GHG0H0GHG8H0GHG@H0GHGHH0GHGPt.H0GH0GH0GHDH0GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAh<jHHH1AXZ[HһtHAh<Lj1f.@H-GHHGH-GHGH-GHG(H-GHG0H -GHG8H -GHG@H-GHGHH-GHGPt.H/-GH*-GH%-GHDH,GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA<jHHH1AXZ[HһtHA<Lj1f.@Hy)GHHGHn)GHGHs)GHG(Hp)GHG0Hm)GHG8Hj)GHG@Hg)GHGHHd)GHGPt.H)GH)GH)GHDHY)GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLA=jHHH1AXZ[HһtHA=Lj1f.@HHHG HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPt.HHHHHHHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]f.H"GHHGH"GHGH"GHG(H"GHG0H"GHG8H"GHG@H"GHGHH"GHGPt.H"GH"GH"GHDH"GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA >jHHH1AXZ[f.HһtHA >Lj1f.@HSIHtD1H>?v.Hһt$HLA>jHHH1AXZ[f.HһtHA>Lj1fffff.HSIHtLH1LIv.Mһt$HLA>j6HHH1AXZ[DHһtHA>Lj*1fDHSIHtD1H>v.Hһt$HLA>jOHHH1AXZ[HһtHA>LjC1fffff.HSIHtD1H>v.Hһt$HLA>jhHHH1AXZ[HһtHA>Lj\1fffff.HSIHtD1H>?v1Hһt'HLA>hHHH1AXZ[HһtHA>Lju1f.@HGHHGH~GHGHGHG(HGHG0H}GHG8HzGHG@HwGHGHHtGHGPt.HGHGHGHDHiGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH>v6Hһt$HLA?jHHH1AXZ[@1ۉ[fHһtHA?Lj1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLA?jHHH1AXZ[HһtHA?Lj1f.@HIGHHGH>GHGHCGHG(H@GHG0H=GHG8H:GHG@H7GHGHH4GHGPt.H_GHZGHUGHDH)GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH>v6Hһt$HLA@jHHH1AXZ[@1ۉ[fHһtHA@Lj1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtLH1L@ Iv.Mһt$HLAp@jHHH1AXZ[DHһtHAp@Lj1fDHYhGHG H9hGHHGH.hGHGH3hGHG(H0hGHG0H-hGHG8H*hGHG@H'hGHGHH$hGHGPtHOhGHJhGH)hGHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H GHHGH GHGH GHG(H GHG0H GHG8H GHG@H GHGHH GHGPtH GH GH GHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]ff.HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPtHGHGHGHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]ff.S1Ht[@HһtHHIjHL1HAHA1AXZ[fS1Ht[@HһtHHIjsHL1HAHA1AXZ[fHSIHtD1H>v1Hһt'HLAHAhHHH1AXZ[HһtHAHALh1ff.HSIHtD1H>v1Hһt'HLAHAhHHH1AXZ[HһtHAHALh1ff.HSIHtD1H>?v1Hһt'HLAHAhHHH1AXZ[HһtHAHALh1ff.HSIHtD1H>v1Hһt'HLAHAh,HHH1AXZ[@HһtHAHALh 1ff.HSIHtTH>v>Hһt'HLAHAhEHHH1AXZ[f1ۉ[f.HһtHAHALh91ff.HSIHtTH1LIv1Mһt'HLAHAh^HHH1AXZ[f.HһtHAHALhR1ff.HSIHtD1H>v1Hһt'HLAHAhwHHH1AXZ[@HһtHAHALhk1ff.HSIHtTH1LIv1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIHtTH1L I?v1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIItTAL1I9v1Hһt'HLAHAh HH1LAXZ[f.HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAh&HHH1AXZ[f.HһtHAHALh1ff.S1Ht[@HһtHHIh3HL1HAHA1AXZ[fDHSIHtTH1LIv1Mһt'HLAHAhQHHH1AXZ[f.HһtHAHALhE1ff.S1Ht[@HһtHHIh^HL1HAHA1AXZ[fDHSIHtD1H>v1Hһt'HLAHAh|HHH1AXZ[@HһtHAHALhp1ff.HSIHtTH>v>Hһt'HLAHAhHHH1AXZ[f1ۉ[f.HһtHAHALh1ff.HSIHtD1H>v1Hһt'HLAHAhHHH1AXZ[HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIItTAL1I9v1Hһt'HLAHAhHH1LAXZ[f.HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAhHHH1AXZ[f.HһtHAHALh1ff.HSIItTAL1I9v1Hһt'HLAHAhHH1LAXZ[f.HһtHAHALh1ff.HSIHtTH1LIv1Mһt'HLAHAh+HHH1AXZ[f.HһtHAHALh1ff.HSIItTAL1I9v1Hһt'HLAHAhDHH1LAXZ[f.HһtHAHALh81ff.HSIHtTH1LIv1Mһt'HLAHAh]HHH1AXZ[f.HһtHAHALhQ1ff.HSIHtTH1L I?v1Mһt'HLAHAhvHHH1AXZ[f.HһtHAHALhj1f.HYFHHGHNFHGHSFHG(HPFHG0HMFHG8HJFHG@HGFHGHHDFHGPt.HoFHjFHeFHDH9FHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLABjHHH1AXZ[HһtHABLj1f.@HSIHtD1H>v.Hһt$HLA@CjHHH1AXZ[f.HһtHA@CLj1fffff.HSIHtD1H>v.Hһt$HLA@Cj6HHH1AXZ[f.HһtHA@CLj*1f.@HFHHGHFHGHFHG(HFHG0HFHG8HFHG@HFHGHHFHGPt.HFHFHFHDHFHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLACjHHH1AXZ[f.HһtHACLj1f.@HSIHtD1H>v.Hһt$HLA8DjHHH1AXZ[HһtHA8DLj1fffff.HSIHtD1H>v.Hһt$HLA8Dj6HHH1AXZ[HһtHA8DLj*1fffff.HSIHtD1H>v.Hһt$HLA8DjOHHH1AXZ[HһtHA8DLjC1fffff.HSIHtD1H>v.Hһt$HLA8DjhHHH1AXZ[HһtHA8DLj\1f.@HSIHtD1H>v.Hһt$HLADjHHH1AXZ[HһtHADLj1f.@HFHHGHFHGHFHG(HFHG0HFHG8HFHG@HFHGHHFHGPt.HFHFHFHDHyFHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLAEjHHH1AXZ[f.HһtHAELj1f.@HFHHGHFHGHFHG(HFHG0HFHG8HFHG@HFHGHHFHGPt.HFH FHFHDHFHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA@FjHHH1AXZ[f.HһtHA@FLj1f.@HYFHHGHNFHGHSFHG(HPFHG0HMFHG8HJFHG@HGFHGHHDFHGPt.HoFHjFHeFHDH9FHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAFjHHH1AXZ[f.HһtHAFLj1f.@HSIHtD1H>v.Hһt$HLAGjHHH1AXZ[HһtHAGLj1f.@H9FHHGH.FHGH3FHG(H0FHG0H-FHG8H*FHG@H'FHGHH$FHGPt.HOFHJFHEFHDHFHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH1LBIv.Mһt$HLAxGjHHH1AXZ[HһtHAxGLj1f.@HFHHGHFHGHFHG(HFHG0HFHG8HFHG@HFHGHHFHGPt.HFHFHFHDHyFHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAGjHHH1AXZ[f.HһtHAGLj1f.@HFHHGHFHGHFHG(HFHG0HFHG8HFHG@HFHGHHFHGPt.HFH FHFHDHFHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAHjHHH1AXZ[f.HһtHAHLj1f.@HYFHHGHNFHGHSFHG(HPFHG0HMFHG8HJFHG@HGFHGHHDFHGPt.HoFHjFHeFHDH9FHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAHjHHH1AXZ[f.HһtHAHLj1f.@HvIE1L HH:~lCfIH*Gf* Gf*Gf*GD9fH?@SHH?H[fDAHtG~fDGPWfffff.H?*tHf.H9>*ufHJvWx蓯fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1H|$ HT$H|$HbHL$0HT$ Ht$AHHD$HxH7u3H|$(yH|$8oHD$HdH3%(HMuHP[fHt$VϱHHD$HxH7t Ht$0H|$(H|$8 H4HHf.ATUHSH dH%(HD$1軭HHH]HEH$蒭HU@H@ HNHXHEH$uH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$ HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuPBHJHHP*ufHPvWxfATIUHSHHt#H{ HouHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1H|$ fHT$H|$NHL$0HT$ Ht$AHuHD$HxH7u3H|$(ټH|$8ϼHD$HdH3%(HTuHP[fHt$V/HHD$HxH7t Ht$0H|$(vH|$8lH蔶HHf.ATUHSH dH%(HD$1HHH]HEH$HU@H@ HTHXHEH$ջH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$iHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuP被H誥HHP蜸HHHHѷH}غHf.@HHtHH@fDfD1f.1f.雱f.HAAAL HAH:1E#G@Ft&DFHA9~&A uڃuDHA9ÐfH?@SHH?зH[fDAHtG~fDGPWnfffff.H?*tҷHf.H9>*ufHVvWxsfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1H|$ HT$H|$UBHL$0HT$ Ht$AHHD$HxH7u3H|$(YH|$8OHD$HdH3%(HPZuHP[fHt$V诨HHD$HxH7t Ht$0H|$(H|$8HHHf.ATUHSH dH%(HD$1蛤HHH]HEH$rHU@H@ H[HXHEH$UH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuP"H*HHPHH葭H虰HQH}XH耰f.@HHtHH@fDfD1f.1f.f.AHtG~fDGPW鎸fffff.H?*tHf.H9>*ufHrvWx蓢fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ATUASHHHdH%(HD$1HPHHtYH٧HHH軷Ht$HD$:褷DH蹥HL$dH3 %(Hu%H[]A\DHHHxw 3fff.SH(H dH%(HD$1tafHtWz[@:@:螷HP^H迷z[HͶH腶HD$dH3%(uH [JHH_H׭fDSH(H dH%(HD$1:tafHtW[@:H@:޶HP^WH[H HŵHD$dH3%(uH [芣HH蟵HfDAUATL(USLH(@dH%(HD$1ifHAŅt_EtZ[@:p@:HHP^|H$[H2H@LtZEtU[@:@:H菵HP^H谵[H裩H{HD$dH3%(u H([]A\A];HHPHȫfDSHHH dH%(HD$1|YH(H,tafHtW[@:@:貴HP^+HӴ[HH虳HD$dH3%(uH [^HHsHf.ATUHSH HPH dH%(HD$1-H@VHH@Htf.HH@HuH8H8Hh|HHHt;(H@tK,Hx(H0;$ (H,HHD$~5LMt[I\$8Ht?HHPH[ HuI|$8Ht@H_ HRHI\$8HuI|$/LwHE?H7HD$dH3%(u H []A\蹟SHgH[.fffff.US8HHdH%(HD$81谡Ht$HxH@H@H@ H@(H؂H@H@0HHD$HD$HD$ D$(H$PHD$xHmApgzH˧HHPAHHAH萮HXAWAVAUATAUSHHhL dH%(HD$X1HMn0LHEL補EHhHD$LLH$dHfH|$LL@pHLL H|$A H(EHtEZHHILhHzHI9LPLXAHN$L1LL)H>f.L9IHHHIL9lH9Ip|LH+HIHI)LHHA 1L9H9LLH+HIHI)LH`A1_L9 A_|$Hu\H4H\$XdH3%(Hh[]A\A]A^A_À|$uH41H<$7H{4t׉HH|$0_D23H|$08H|$0HHD$0zx"|$t H<$Hzf.HHHH|$HtHH1H藛fDAWAVAUATUSHdH %(HL$x1Ƀ H|$(t&HD$xdH3%(HĈ[]A\A]A^A_ÿ1荗IHtIMIHHILH)H)ƍHD$HHD$HHD$PHD$hHD$XHD$`Ht$0H|$@l$0vA$IufMA*|$ A}EfAEl$ f.|$l$@HT$hHD$$[T$݃9XT$T$}9CA9tHt$0H|$@݉\$08vL$HT$hX9L$|D$ t$\D$fT8f.D$"d$AEAXef.d$@IEEH|$hHl$(AfH(Ht$0H|$@\$0uHY, StVMtQ'\@:KHH|$0P^zH|$0 '\HH|$0CH;D$hH[Ht$PH|$@L1;藘Ht$0H|$@Dt$0t|$8|$|$HHt$PH|$@?LמHߡH|$0HRAWAVAAUATUSHHH$PH4$T$dH%(H$x1蒚H$111H$H$k\խH$PH$H$HUH$HxH7LH$ߦH$XҦHHPHHD$@L薓LhILWLM|$0xHx0H@H@LxH@ HHp@(LHEXHE`H$HEhHDžgHDžHDžLEpExHDžƅƅIl$8HEP{HEID$8H@ LID$8ǃ8HDŽ$HDŽ$~H H@ǃ(ƃ,HǃHHǃPHǃX9HxHHHLh1HHXHHǀH)1HD`LHXHPsLL|aLLmaH@Hǃ@Hǃh1HuHHHPH`HXHǃx@HǃHǃD$0|HD$8 1Df*\YHH=uH$HDŽ$0HDŽ$8HDŽ$@HHD$ 薧Ht$ H$0 HD$D$(ۗHL$HD$8L$(҉T$0xp貗D$0HD$8HDŽ$HDŽ$1L$0H$H$H$(fDŽ$HDŽ$H$8H$@H$H$ D$ T$H$H$0^1f$0H@H$PHy(HL$0$PH(HH$jT$0tX|$ tQ\@:EHH|$P\P^tH|$P\H H|$P(DŽ$Pl HD$H$PAaD$(HL$HD$8L$(ɉT$0?"D$ tb`@:耙HT$8t$0HH'H|$`bP^螑H|$`D@`H7H|$` (DŽ$PDŽ$T ,HD$H$P AyD$(0HL$HD$8L$(ɉT$0n"D$ tb\@:蘘HT$8t$0HH?H|$pgP^趐H|$p\\HOH|$p%H<$HT$0H$0FD$0|$ \@:D|$H$HXÄHDHŰHΗHT$8t$0H,|H谗HhH$pP^܏H$\HrH$HWÄHUDHZŰH=HT$8t$0HL,|HH$fH$xdH3%(HĈ[]A\A]A^A_ÅH|$ %HDŽ$@蔕HS$0tSHH 1H~HH$0H$8H$H$LH$$1uHHHHL$(蝤HL$(HH$@uw@HD$Ht$ H$PDŽ$PcD$ JHL$HD$8L$ ɉT$0 D$ t$ D$0HD$8DŽ$DŽ$HDŽ$HDŽ$ HDŽ$(fHD$ @D$ L<$@:I7HVW\H*HH|$@UP^YH|$@I7HHV\HH|$@蹟@Ƅui$PHDŽ$8HDŽ$@DŽ$$HDŽ$HDŽ$ HDŽ$(11踐D$0HD$8衐D$0HD$8D$]@:D$H$HTÄHt$HH覟H$uP^迕H$Ÿ]H赓H$HH2TÄH蕓t$H虑H$\(DŽ$P HD$H$PAڇD$葏HL$HD$8L$ɉT$0ta|$ tZh`@:H賞H${P^'H$ʞ]H轒H$萝H4$H|$RvD$0HT$8|$ ,]@:wH/H$P^裊H$FH]H9H$ HPHHH$H<$HDŽ$PfHDŽ$XH$`HH)H9кHDH$PH$H$S7H$PH$HDŽ$Pp6gHDŽ$XL$`NWH$葅H$褙_ʍD$0HD$8賍D$0 HD$8 'H$I H41H@HHH@H|$wH|$vc]@:HD$אHt$Hʐj]H轐HuH|$vH$P^HD$H$肜c]HuHt$Hhj]H[H$.LL L L讙HHHtm(H@tW,Hx(H0$DŽ$;(H,H$H$LMt\Ml$8Mt%IELPMm H$I^MI|$8HtLo HPMl$8I|$TL蜎HH?]H蕑H$IH$IƇH$I֙HH$XH9IHLLÂjHHH$HxH7t H$H$跖H`؊D$0 HD$8D$ I-H|$`I,H|$PI H|$@I~D$0 HD$8D$ \H|$pIژH9HHHH$PvqH$PHDŽ$PP{xhHLH$PHHDŽ$PzxtQHIH#HAVAUIATUASHH dH%(HD$1OALHIHLߎH<$HtV1ɺx?蕗Ht@HHD$HHCt@H|$Ht$dH34%(HuH []A\A]A^ÐHHCZHLߋHfDUHAWAVAUATISHHH8dH%(HE1fH]@:)HS3H;HӗHEP^IHEL]HHS3HL誖IhLEHEI I}t H}}f.@USH@H]HuHxH@8PzxHgHNwH}H7HC0zxHH{tHH@H=lNuCG@HE g`}HHXHCHC8ȄHC HE(HC(E0C0者HHHHBH HvLIz$@USH8H}~H}HH@0PzxHP7H@0zxHHxtHHRHlNuCG@HEpgzHH؂HCHC0HHCHE HC E(C(賄HHH|HD@LIzD@USHXH}HuHxH@PPzxH=HuHEHUHu H{ HyxHCHSuH}0HC(0zxHH{0tHH@H=lNuCG@HE8g`yHHHC(ЁHCPHC8HE@HC@EHCHÃH HH"HH耊HHH}Ht@LIz@=JtPÐHXֱ{tXֱtHPp}PЉPHfDAWAVIAUATUSHxHW@dH%(HD$h1HGHHl$0HT$IHD$HD$ G<D$GPD$G8D$ I1HHT$|$ HD$LAHD$HHD$@LBvI*}AMIG AWx}AGIG M"\$uu|I;G A u|I;G uA t|I;G tTMy[IG(fHt$hdH34%(uVHx[]A\A]A^A_cAGIG DA tMx_|AGIG Mg(x1f.AWAVIAUATLgUSILHHwI]8Hu rfH[ HtgHCHtHUHtH9t-HCHtHUHtHxHrH9t?*tׅuLKvHH[]A\A]A^A_fL(vI}0AHUIHELIFIVFwM}8MtmLH[ HtWHCHtHUHtH9t-HCHtHUHtHxHrH9t?*t'uILPBDM~ LMu8-SWH?t9tHÉu;u[[tfUSHHH_hHHFHfDHHP H[HHuH4ׂCHHH?HH)HHUt'Hi@BHH)HiHMH1[]fDHMH[]HF,1f.DAUATUSHHHhdH%(H$X1dK@؉}`Ht$P&~}dA…~zH}XHL$TH@LMdH4HD$PH/@L9t{LCQHMPtuIHCH H9t%HH9u̓}dDDH H9uEuDH$XdH3%(Hh[]A\A]fDAHCHLm0LtLehMtfI$HLP(Md$Mu}dt!Ht$H}dHL$0HT$LsZLo0t$ LEtt$ @tBLehMtIfDI$HLRMd$MuLL$ rL$ b1qtH LrH}USHHHWHB H~HHHWHkHB }tiHJHH@xt-HHt}HHJHHBHBHHHP`H@`Ht,HHH[]H}'sEHSDHHH[]Hz@UHo0SHH(HdH%(HD$1rHƃHt4HP(HxHH@(G0}HHuԀ{xu0HCXHt'HPXx`CxH$ HT$PXlHqHD$dH3%(uH([]rf.USHHHGHP H~iHHHHGHPH@ Ht7Hk}t[H HHtuHHPHH@H@H[]tH?HtHHCf.H}wqHCEH HPHtHHuHfDS뱐USHH(dH%(HD$1HHtS~HP(HH@(HhH>E0oCH2|HD$dH3%(uTH([]xu0HGXHt'HPXGxx`H$ HT$PXk{tH;DoCp肷@SH0HdH%(HD$(1Hta(HtzdH%Hujf.H@HtWH;uH@HtIHHHHHVHPHHFHD$(dH3%(H0[H{0Ht$H|$oHt$D$HHt)HHtPHHFHHHFHt$H5|$xH|$ niHPFHoSHH0dH%(HD$(1ut(unHt$HH{0H|$oHHt$D$HHH0HHt$H|$t^H|$ymRdH%HuH@HuH;uH@HcHPH@ HHt4H2HpHD$(dH3%(u'H0[HHe@HpHpnfAWAVIAUATIUSMH8HD$pT$ DL$D$dH%(HD$(1HH(AHmIEIcHUHH<HI$HHPhHL"L`hIG(HH.lHD$(dH3%(wH8[]A\A]A^A_fqHIl$ AD$fT$I(LHkD+qT$AD$ LID$ I(y|$tYEuHuPf.LAT$0t|HlkT$I(L[(fDL`hL``At2P\T$A`HL$T$ HD$fIEfDP\P\DAIEP\xA`HL$T$T$ HD${fIET$ P\=^lHHjHuf.USH0H8dH%(HD$(1}hH@H@`3gHhH@ HHH}HHD$H${EHC(Hh(H}0H<$@kD$uH}Xt+H<$iHL$(dH3 %(HH8[]@HEHt$`3gH8HD$HD${HHEXHE`HE`Ht,HHHHg|$zlHHjHH|$t H<$!iHiqHqtAVAUATUASHHdH%(HD$1t8Iuj}IDAEjh#nAUHC n1HCHL$dH3 %(H[]A\A]A^Dt$D$mAF}AH DIemI~m?fkmH;Cu; t[mH9CQ; HH!TD1$OeA&DAE[gmAUHCXiSHH0dH%(HD$(1?t-D$l;HL$Ht$HD$D$6HD$(dH3%(uH0[hf.AUATIUSAHH(dH%(HD$1XlH|$HT$LH~Ht$HaHD$HxH7u4HD$dH3%(DcHkHC 7HzxuH([]A\A]fHt$?hHHD$HxH7t Ht$HqSHGcuH{(hu[ùm Txv{dm Tx][bdfSH7guH{(zru'Heu [ùqSxWxdϭDATUHSH HdH%(HD$1Hu7KHLc$j1H1HD$HAH]HtHHHEuHEHD$dH3%(u H []A\ffSHHpHYH{0[af.DSHt(Ht1HH_HHx(H[DHH@(HH_H[AWAVIAUATUSHHdH%(HD$81HHT$L~(HAAuHLeHEHD$HD$ HD$(HD$AD$DIHIuuH\$HH\$(HHHD$LHcH|$1HT$HLSHD$8dH3%(HH[]A\A]A^A_H\$ H\$H]HaHS0SHEHtHHHUt.HHD$ HHtHH\$ H]HuHEHD$ -LcH|$?dHLbH|$H?nf.DAWAVAUATUSHH8L*dH%(HD$(1MpIE(IAHHD$cHj@~HD$HD$E1IcLeHIL(Ll$HN, Mt\gAE}IE HH HA`HtH0HHq`HIEHD$HuLl$Ll$AAnH|$Mgx@XƀaLH+bI;HE HtHUHPHEHtHU HP ILHE HEIRaHI(Ht$ H|$HD$(dH3%(uoH8[]A\A]A^A_@H|$a@HAhA`HL$DD$HD$\HSHEIobf.DSHHpHH{0]H[hUHo0SHH8HdH%(HD$(1aCpH?`HH$HD$HfDHB`HHHt)Ht$HHHHHL$HH@HH9uH;ƂHB HtHJHHHBHtHJ HH HHB HBHHH[H[hHtf.HHHP0H[HuH$HD$HD$Ht HD$HD$H$HD$HD$H|$VHNHD$(dH3%(u3H8[]H $HBHHv`HHjfDUSHHHvHHHG=ZHEHUHu H{ HyxHCHSkZH}0HP{xHC(0zxHH{0tHH@H=lNu0G@HE8HC8HE@HC@EHH|xHC(|xCHH[]H HH'HHzxgH6iHbH&iHYHifDUSHHHvHHHG=YHEHUHu H{ HyxHCHS{YH}0HzxHC(0zxHH{0tHH@H=lNu0G@HE8HC8HE@HC@EHHxHC(xCHH[]H HH'HHzxfHFhHaH6hHXH&hfDAVAUIATU@eSH^ILIHdH%(HD$1eLH{e[HneLHcelYxHVeLHKeHt$HD$(TpHH_aHeHHeHpdi@SHHЃHG0zxHtH[ sf.HSHHPHG0zxHtH[qf.HSHH0HHGHG0zxdH%(HD$1_tHC HyxHxH7u'H`HD$dH3%(uH[fHt$F\f.DH(gSHHG0HHPHG0zxHsH[pHf.LIzSHHG8ȄHЃHG0zxH|sH[qHf.LIzSHH0HHG HGHG0zxdH%(HD$1sHC HyxHxH7uH^HD$dH3%(uH[ÐHt$[ffffff.H(gLIzT@SHHЃHG0zxHrHpH[aHf.SHHPHG0zxHDrHoH[saHf.SHH0HHGHG0zxdH%(HD$1qHC HyxHxH7u'H]HaHD$dH3%(uH[ÐHt$ֳOZffffff.H(gSHHG8ȄHЃHG0zxH\qHtoH[`ff.Hf.LIzSHHG0HHPHG0zxHpHmH[+`ff.Hf.LIzSHH0HHG HGHG0zxdH%(HD$1pHC HyxHxH7u/H7\H_HD$dH3%(uH[fHt$fXffffff.H(WLIzD@SE1HH0dH%(HD$(1IfL;K(H{H1H$LH\$HD$H|$HHL@HH@Ht4HPHL$H9uHHHPHVH@HuDH$Ht$HL9u fHHBL9uHD$HBHCIHH;CHC;L;K(HCHC3H{Ht;^HD$(dH3%(HCHCHC HCu&H0[DHHRH IPHjPWUHAWAVAUATSHOdH%(HE1)D1HG LgEuL9_I)II9LGLoH7LOLWLvHEHG(HHHuLMLUMHEHG0HEHG8HE_H]1H{(@dH%HDžhHDžpH`HH@HHHH<HHHhDxHHCgCCDYHC HEHC(HC0fD{WHD$xdH3%(u7HĈ[]H0mH8 QHH|$Ht$躗HZAVAUIATUSH dH%(HD$1HLo`HDHH]Hu=YfHLc$)T1H1HD$HAH]HtHHHEuHEI9uI~(KLVHD$dH3%(u H []A\A]A^PAWAVAUATUSH8L'dH%(HT$(1H|$MMl$Il$`M$fDIIHu@Zf.HLsD$8S1H1HD$HT$AIHtHHIuIGL9uI|$(JLMUM]HD$HxHtH_/HHuHD$(dH3%(uH8[]A\A]A^A_NAWAVAUATUSH8HH|$`dH%(HT$(1҃tLHD$xdtLHD$HHtfDH_HHuHD$LMf.Ml$Il$`M$fDIIHu@Zf.HLsD$Q1H1HD$HT$AIHtHHIuIGL9uI|$(ILMVTM]H\$H{xH{\tMH\$CX9t vKCXtgKH|$H0HHD$(dH3%(uH8[]A\A]A^A_HD$@XKMf.SHGH[Sf.@USHXHhdH%(HD$X1=OHHH_^Ht$H{HD$0HD$8HD$@D$HH$HD$(8HCPPzxH=FHD$HT$Ht$ H{ HyxHCHSFH|$0HC(0zxHH{0tHH@H=lNu\G@HD$8Ht$(H{(HHC(ЁHCPHC8HD$@HC@D$HCHHg`yHTHH9HH9H HTHH[HYUHqHNHEf.USHX/H_HT$H|$dH%(HD$H1aHt$H|$ DHD$HxH7u%H|$ HD$ yxl$0H\$8HD$@7Ht$蕤HHH|$ /SHTHD$HxH7tHt$[fS1H dH%(HD$1LMNۉ$HD$t!fHt[Hf.HD$dH3%(uH [eJDAWAVAUATIUSHHHhdH%(HD$X1f>A>]DLIʼnKAMAUEHCmxMHCiMH;Cu ;sUMHS H9u {Ht$XdH34%(eHh[]A\A]A^A_@E1f>HGH$AF,\IƾDMALEEHCDLHCD|$0H$H@(HpxH$HHt$qHH<$HHHD$H9H@HHH(HD$H $H|$HHG HGHHtHx Ht$H$H|$HFHt$H|$HuGHEH $H|$HHPHEDxXƀFHEH $DD$@@\HD$Dy`HL$@Bt EED$0ED$0EK|$0HCt?E1D$D$@bK|$0HL$@Ht$/HD$HD$/D$EuDmtMfHtCHSf. KH;C; JiHCv@fA<$mA LD1Ҹl$@fT$FfD$D.ZH|$@IľGAyJA $EHCH‰ "^JHL$0LD$@HCA$D$0D$@qRJA $HC HIL$0HCH‰ DAD|$0AD$I|$0D$HCD.i@I HCIH;C ;slI HCH¹ DKIHC@AHH(HH@g@HD$HHL$HD$H@`H@hH@pH@xHǀHǀh!EHH H|$KH|$CCH|$0HNSH1H0dH%(HD$(1L[Ct"HD$(dH3%(H0[W8HRu^<$;@;1@|$1{w@{1c@lfDGHKWH\$҉T$FfH8H|$[[11_ZC?Ǻ1?;1?; CATUSH dH%(HD$1nHtHL$dH3 %(uxH []A\@sVHŋPu. N\GAtD1D=?FUHD$҉$tfHt\HMBAVAUATUSH`dH%(HD$X1t'HD$XdH3%(H`[]A\A]A^fDH`tX@E`}dE`t<@EdU{]dH]XHHE\EX&UX}`H$ H\$;}\Ht$0HD$0lUUd}`HEdH$ HD$;}dHt$H}dHL$0HT$QLmxAfL@HHufH[HC\SXH}`H\$$5;tDITTLt$8҉T$0tMtH|$0 \qUX}`HL$0D$0 H\$4:TfL?S8w1vS`Ǻ1H JfAWAVIAUATUSHHdH%(H$1Ht$CAIGLMH$1HDŽ$HDŽ$HDŽ$Ƅ$BoCl$0HD$8tfHtH|$0!\H$H{0L$Ls`HDŽ$HDŽ$H$dH%H\$0Ld$8H|$ HD$@HD$0dH%>D$(H$@Ml$fD{(HH|$(HP(HH@(LxH|$ AG0=LD$(IH{XHD$ @LH\$PHD$XLd$`QH|$PGLMt^IHHIH@M9@@kx"|$(oH|$ mHD$fl$HAƅt E`LcXL$C`ML{x1kdHChCpLl$ HD$(t EHǃHǃHL$ D$ Ld$$SX{`4{\Ht$HD$MSdt#HCdD$ HL$ HD$${`:4HL$8dH3 %(H|HH[]A\A]A^A_@;M81LAǺ16DH|$ [0H|$[!H.H9HL4LFL4H@HCHH@UST~HX/H_HT$H|$dH%(HD$H1POHt$H|$ 2HD$HxH7u%H|$ HD$ yxl$0H\$8HD$@7Ht$`HHH|$ @HbBHD$HxH7tHt$&@SHH dH%(HD$1$f.fSH@HHGHGGDdH%(HD$81Eu%fffWDEupFGED fffW>uAHFHVHNHD$ HT$(HD$HT$HGHWOHD$8dH3%(u'H@[H$P7}H$P7pH3H;H=@S1HH0dH%(HD$(15uyH{(16uHD$(dH3%(u{H0[H.t`n Txv 0HH_1ICHH$P{xIrH&H^%CHH$P{x%r3HH$zx>;HLvdH%(HD$h1Ln*/L`01H@H@H0>HH@H@ LH@(4eHCXHH$sH1HHD$\4 HhsHHƃ0ƃ1ƃ2Hǃ8ǃHHǃPLeHǃhHXH`HǃpHǃxHǃHǃHǃHǃHǃHǃƃƃHLLLH]HEHD$@-HULl$@@@ HHXLHEHT$@@H{HtWu`HUH\$@HHT$HLt$HH{BHT$@I9HHSt"MtAF HtW tXLsI}@H3*HD$hdH3%(Hx[]A\A]A^A_HH[tE1fHHJHkNuRLl$@vL#@LHD$@P{x"oHvH|$v?H|$HD$P{xnHYx L?LHD$@P{xnH/HHH LHD$@zx7H<$*tLL/tL@HH^H|$HD$zxm7H{ >H{HtG uHPH5H8mLHD$@zx"7LZ>H8@pVvWxi+@pQvWxP+H(HHP;H|$P?H:L=H8SHH0dH%(HD$(1H-tuHD$(dH3%(u%H0[Hv >HH${xZq.HHH$zx"6H7f.AUATIUSIHH9HHLct\tSHh0CH3HuRH{LpLx-u\HH[]A\A]Zrf.CL,uIH[]A\A]ÿƀt/1ҾnxH6H2pvWx)pvWx)HqH~6f.@AWAVAUATLg(USHHHHL$L$dH%(HD$81L$LHD$JH|$LHHqHL]2H|$ApsHtHsrN3Eutq=Jt8HCPHt$XdH34%(HHSHh[]A\A]A^A_ÿXֱ&)tXֱ/HPp}Pd7fI:DHD$+AC+HL$ED1HCD3k&+HCD|$0MuIFxHHD$&MMZIEIIE(HD$IIE IEIHtLh H|$MJ%LmLl$Ly&HELLpPHEDxXƀ%HED$@HL$@D@\HD$DA~` tHD$D0ED$0EE1D$0E*HCD$0t/D$@)|$0HL$@Ht$/HD$HD$/jEA$EDAD|$0t)D3HCD$0fDN"HH@gI@H@(HHD$IE`IEhIEpIExIDžIDžK%HHL,H|$#H|$0H.fDUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHH")HDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*H(D;` H~HxHHEHEH[]A\A]fD~nHW 1H9tHk6D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAVAULoATUSHHWHDLHHRHtD;B ~HRHuI9tD9C ~_HI0IHËEHS HC(LLC Ht:HuTI9tO1B 9C @LH7ID$(HHC([]A\A]A^fHHD$)HD$HLof.HXLdH%(HD$H1HD$(MLD$ tIHD$(HD$ ILHFHvHD$MHD$0L $Ht$8+IHD$I!L$HGHOL9HD$HL$L;T$ )H9tiH4Iz fHL$HH9tJHHtHHL$H;HH9uHD$HL$HH9uDMt(I HH9u ~fDHHAH9uHD$HAMt+IHt$ H9u XHHAH9uHD$(HAH|$HdH3<%(Hu}HXHHHL$YfE1HAIHAI뻹@b_@\@b_=\c_Q\{ fDUSH@HHdH%(HD$81"HuH|$HH$gHt$H{HD$HD$ HD$(D$0H$ЃHD$HC8PzxHgH|$H7HC0zxHH{tHH@H=lNu\G@HD$ Ht$H{HXHCHC8ȄHC HD$(HC(D$0C0UH g`}H(HH H5HHe/H-)HHH HHDSH@dH%(HD$81H?H9wJHt?HHHHھHtHT$8dH3%(uDH@[fD11H|$HT$[\4Ht$H|$ O,H|$ H H H|$ %HD$HxH7t Ht$xH((SHH0HWdH%(HD$(1H;H)LB(1MHH$HD$H"H;HT$HL$H;$rHCHHzH9II)LHzHLBL9L)HJH)HHH9HL$HH HzHH)HH9~cHRH)HH)HHH0HSHH\$(dH3%(H0[ÐHJII)LHzOfDHHtH@L)HJ:@HB QHzJ<HJJ fb_@\]fd_r]De)_=\+e(_@\fSHH0HWdH%(HD$(1H;aHHH$HD$ HHD$H"H;$HT$HD$<H;eLKLBHB(MI3HzLH)LI9H)HH9 H IH9uHHQL9uHD$HALKHSHBHL)HH9}0HIL9J LKtoH|$(dH3<%(HH0[fH+BHH)LH)HJatH@HD$HD$fHCHAHWjQ_@\q@h(_@\SjS_]:@h)_=\!AWAVIAUATUSHHdH%(HD$x1HGH+GHH9Hu(I1HHUH\$PL9Ld$IGHl$H]HHl$ HT$HD$(Ll$0Hl$PLd$XHl$`HD$hoHHD$8HHT$0tH Ll$0HL$8L*HPH@HD$HHD$PHT$@Ht"H8H9u{HHOH9uHD$XHGHD$HD$XHHD$Pt HHT$XHHD$ LLHHD$`HD$(HD$hfHHD$yHD$L}L}HL)HHU(KH9HUIDHE HD$PHt&HH9u @HHBH9uHD$XHBHD$0Ht&HL9u @HHBL9uHD$8HBHD$Ht&HL9u PHHBL9uHD$HBHD$xdH3%(uRHĈ[]A\A]A^A_fHE IT$HHSHVIUHzHSH@SHH0HOH+OHw(dH%(HD$(1HH9vPHuHfHH9wHHHHHH HH9Hs8HCH9HFHH$HH#H\$HHD$HD$HHxH9|$t]HPHHVH@HuH$Ht!HH9u7fHHBH9uHD$HBHD$(dH3%(u%H0[DHHQH1ҹ2AWAVAUATUSHHdH%(HD$x1@|$pt$q<D+HD$pDsHD$HD$ HD$A )HHD$0ADt$H$IĐH<$1@LL$$HHD$DHD$HHD$@%HHID;x:E1IHL$xdH3 %(DLHĈ[]A\A]A^A_|$u\A @L9u@uEL9u@t1ҸfT$6LDl$0fD$4ID;aA ID6fDGGÐf.AWAVAUATUSHHdH%(H$1H|$D+H$DsHD$( HD$0 HD$ AEA'AHHD$@ADt$HD$HD|$H|$11HHl$HHD$ DHD$XHD$PIMID3xMIE1Mu |$|$ugA AL9uEuL9uFEtA1ҸfT$FHDl$@fD$DALEID3y9EtDH$dH34%(DLHĨ[]A\A]A^A_DfDHL$$E1$ȉA$ȉAD=izJt$APArA I_Xֱ!tοXֱHPp}P_"WHwHՀfDHP]'HÐfUHSH8HEHEdH%(HE1GHEHH}кjaXZHUH}HH)HHHH9kt'Hf^*f.H9f(uE?EHEdH3%(H]ÐHH}кxjaf1fH*tuHH}к0j$DHH}кjgff(\%@\fTfTf(fTfUf(fVH}HHtPHXAUATIUSI)LHHHLHOHL)HH9HOHL)IIL9v^ML$HL9t3HLHtHHH9uIL)HH|;H}H[]A\A]HtLLx IMLEH[]A\A]E1HLt(HH9wwLHt$ H}Ht$IH9LtDHtHHH9uHt MLmLeLeH[]A\A]fL H} f.AWAVAUATUSH8Ht$$L(HHHMLHo@H|$HT$HD$fLt$L|$LL)(fHId$ A_IAWIl$I<fD$(I9d$ l$Xd$(Xl$,uA$$IAl$L;d$mD$$H8[]A\A]A^A_f.SHHPH H?H[ySHH[fffff.AHtG~fDGPWfffff.H?*tbHf.H9>*ufHvWx fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1H|$ vHT$H|$0"HL$0HT$ Ht$H[ HD$HxH7uyH|$(H|$8H@HP!H y%u%HP@DH@H9uHD$HdH3%(uHP[Ht$x HHD$HxH7t Ht$H|$(CH|$89HaHHATUHSH dH%(HD$1HHpH]HEH$HU@H@ HHXHEH$H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$9HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHkNuPr HzHHPlHHHHH}Hf.@1f.1f.f.SH_Ht&HHH@H=aguH[VfD[fD[DAWAVAUATIUSHHLw`dH%(HD$81HGXH4$MHD$H$Ld$H(L}؅x?MMvMtH纎@IHHN0H\HEӂL0ulAEw#DmHD$dH3%(H([]A\A]H纕@HHHHE롾)Lu?AEvH纡@tHHyHD͂LcuAztiAAxA|'A~H纲@HHH)f.Ez@8{LueAE#H纺@HHHEcE~WExKH@8HH=HIHHuLHV8H&@E|HHH=fÐfff.USHHHH7dH%(HD$17HL$dH3 %(HuH[]8HHHzH7t Ht$1KH AWAVIAUATIUSHHH|$0dH%(HD$81bH|$ LUL|$ Ld$0I_IL$LLH9HHL$HFxuHL$H)H~\IH7ukI|$H71u AEA9Ht$8dH34%(HH[]A\A]A^A_f.IHMH7tAHtjAG~kLd$0I|$H7w@AHt&AD$UHt$ FAD$PAT$אAGPAWHt$HHD$0HxH7t Ht$vIH AWAVHFAUATUSHL~ HD$MLfIHMt$؅x?LMMtH$H>H$HxH7t1AHKPЅH$fD͂L CH$w $Ő@H$@H$HH$HxH7t1AHrPЅH$uD8{Lsu w$H$pH$H$HH$HxH7t1AHSPЅH$fDH$dH3 %(HHĨ[]A\A]H$\~H$H~H$HxH7H$a>H$H>H$HxH7H$aH$HH$HxH7PH$aH$HH$HxH7EH$\~H$H~H$HxH7H$H$0w6H$0H6H$0HxH7MDAH PЅ&H$ @H$H$@H$@HH$@HxH7H$pH$nH$HnH$HxH78H$H$p&H$pH&H$pHxH7=H$H$gH$HH$HxH7H$H$ oH$ HH$ HxH7PH$H$`6H$`H6H$`HxH7MH$H$PH$PHH$PHxH7H$SH$HH$HxH7 AEHH$PNH$HNH$HxH7@AEH0H$V H$HH$HxH7AEHH$˂ H$HH$HxH7 AEHH$pM^ H$pH^H$pHxH7AEH@H$`V H$`HH$`HxH7AEHH$ H$HH$HxH7PAEHH$pYn H$pHnH$pHxH7AEHPH$`N H$`HH$`HxH7AEHH$PZ H$PHH$PHxH7AEHH$S~ H$H~H$HxH7AH7PЅH$FH$P H$HH$HxH7AHW PЅH$H$P\̂ H$PHH$PHxH7uHAEH@H$\̂V H$HVH$HxH7tAHS PЅH$&@H$͂ H$HH$HxH7AEHH$0Y H$0HH$0HxH70AHg PЅH$fH$ N. H$ H.H$ HxH7AH PЅH$H$0MH$0HH$0HxH7`AH PЅ>H$,H$ZNH$HNH$HxH7AH PЅ^H$LH$@͂H$@HH$@HxH7AH PЅH$H$@nH$@HnH$@HxH7AH PЅH$6|H$VH$HH$HxH7AH PЅH$H$˂H$HH$HxH7AH PЅH$VH$ VH$ HH$ HxH7AHPЅH$H|$0f҂Ht$0HHD$0HxH7fH$f҂nH$HnH$HxH7H$`o҂.H$`H.H$`HxH7PH$po҂H$pHH$pHxH7EH$Po҂H$PHH$PHxH7H$@o҂nH$@HnH$@HxH7H$o҂.H$H.H$HxH7PH$ o҂H$ HH$ HxH7EH$o҂H$HH$HxH7H$0o҂nH$0HnH$0HxH7H$`҂.H$H.H$HxH7PH$`҂H$HH$HxH7EH$o҂H$HH$HxH7H$f҂nH$HnH$HxH7H$f҂.H$H.H$HxH7PH$`҂H$HH$HxH7EH$o҂H$HH$HxH7H$k҂nH$HnH$HxH7H$H.H$H.H$HxH7PH|$ o҂Ht$ HHD$ HxH7NfH$k҂H$HH$HxH7H$f҂nH$HnH$HxH7H|$`f҂1Ht$`H4HD$`HxH7YfH$o҂H$HH$HxH7EH$f҂H$HH$HxH7H$`҂nH$HnH$HxH7H|$p`҂1Ht$pH4HD$pHxH7YfH|$f҂Ht$HHD$HxH7NfH$f҂H$HH$HxH7H$`҂nH$HnH$HxH7H|$P`҂1Ht$PH4HD$PHxH7YfPJHPJHH$@H$HH$HxH7%PJHPJHPJHPJHUPJHePJHPJHPJHePJH5PJHPJHPJHePJH5PJHPJHHH$HxH7t H$|-H}HH7t Ht$a-HHH$HxH7tH$4-HH$PHxH7tH$ -HH$HxH7sH$,aHH$@HxH7EH$,3HH$HxH7H$,HH$ HxH7H$X,HH$pHxH7H$*,HH$0HxH7H$+{HH$HxH7_H$+MHH$HxH71H$+HHH$HxH7H$j+HH$HxH7H$<+HH$ HxH7H$+HH$HxH7qH$*_HH$0HxH7CH$*1HH$`HxH7H$*HH$@HxH7H$V*HH$HxH7H$(*HH$HxH7H$)yHH$`HxH7]H$)KHHD$PHxH72H$) HHD$@HxH7H$v)HH$HxH7H$H)HH$HxH7H$)HH$HxH7}H$(kHHD$`HxH7RH$(@HH$HxH7$H$(HHD$pHxH7H$h(HH$HxH7H$:(HH$HxH7H$ (HH$HxH7oH$']HH$HxH7AH$'/HH$HxH7H$'HH$HxH7H$T'HHD$ HxH7H$)'HHD$HxH7H$&}HH$HxH7aH$&OHH$HxH73H$&!HH$HxH7H$t&HH$HxH7H$F&HH$pHxH7H$&HH$HxH7{H$%iHH$HxH7MH$%;HH$HxH7H$% HH$HxH7H$`%HH$PHxH7H$2%HH$HxH7H$%HH$HxH7gH$$UHHD$0HxH7PJHPJHPJHRPJHtPJH0PJHPJHHHD$ HxH7t Ht$HmI^(HHHHxH7t Ht$0^L9uHHHD$0HxH7tHt$ 2xsnUSHHHG7GdH%(HD$1HGHG HG8HG@7GXHG(HG0HGXHG`HGxHGhHGpHD$dH3%(uH[]pHs`H{PHpHC@HxH7t Ht$[Hs H{HHSHzH7t Ht$3H@ATUASHHHHG7GdH%(HD$1HGHG HG8HG@7GXHG(HG0HGXHG`HGxHGhHGpHHDHDHHHD$dH3%(u H[]A\RHs`H{PHRHC@HxH7t Ht$=Hs H{*HSHzH7t Ht$HAVAUIATUHS0IH dH%(HD$1!HIELHHHS HS H7HC(7uHItMHHMLHHE(HHt$dH34%(EH []A\A]A^HS(HzH7HS HzH7HHD$HD$fH9wHr H{ HL$LoLvLM9IFHL$u"M)1I=I+D#fDAHteJʅOHt$HD$HD$6AHt:Jʅ,Ht$HD$sHD$Jqr뚋Jqr f.AWAVIAUATIUSHHHtG(5Hx ILHK@LL#HC(HL[]A\A]A^A_@HGH9tHr H9L~LgM9LIFAuM)I1IDry(IHx df1JH1L$HlH@AWAVAUATUSHLH|$H4$MH$H(Lm$H=|yDIGHtAIMg LHMt$LM9IFHZuLL)H=~IG1Hu@HLubHL'u/M)I~L1H[]A\A]A^A_I|DyHH1[]A\A]A^A_LHD$L9xt1LL:H $L` IH)Mt$LmM9LIFb1Lxf.AWHGAVAUATIUSIHHH9DHN L:LqIoHLH $I9IMFLLD$,H $LD$HL)H=~MLLHuI)IIBD7H1H[]A\A]A^A_H=I9\$HHtHHx HLH$LwI9IFL$uI)II| DIxHHEIDHH[]A\A]A^A_fDgH(tQH_ H2H{ LvHoI9HIFuL)HHLLH[]A\A]A^A_fDI9\$ tiHHp HLH$LvI9IFsL$uL)HH|yH{HIEIEHaHH1[]A\A]A^A_f.fUSHHdH%(HD$1"HHǃ71ҾT~HD$dH3%(uH[]HHHxH7t Ht$ H/HWfDSHHdH%(HD$1HHxH7u$HHD$dH3%(uIH[fDAHt&PЅHt$|f.PJHfffff.SHHSH[fffff.AUATIUSHHHdH%(HD$1EHuH{Hǃ7LkHEI9tvHs L袈HSHC HC8HS(HS0Hu HtEL%HC H@HHQHuHK( fDHHHHuHC0HE8HC8Hu@H{@EHLkPCHHEPI9txHs`L HSXHC`HCxHShHSpHu`HtGLHC`H fDHHJHuHSh fDHHHHuHCpHExHCxHLaHD$dH3%(u H[]A\A]aHHHxH7t Ht$~HHATUHSHvHHLcHdH%(HD$1FGKHSHC CHC8HS(HS0Hu HtGLHC H fDHHQHuHK( fDHHPHuHC0HE8HC8Hu@H{@˺HSXEHHC`H{PCXHCxHShHSpHu`CHHtE HC`H HHQHuHKh fDHHPHuHCpHExHCxH|$dH3<%(Hu/H[]A\HH{HH7t Ht$H^蹿HHC@HxH7t Ht$Hs L蟅HUSHHHHH|$dH%(H$1蝹HsD$ HD$ Hx腹Hs HT$8D$8HD$@HD$XHD$ HT$HHT$PHtHHx HD$@HHHQHuHL$HDHHPHuHD$PHC8HD$XHD$ Hs@Hx@Hs`CHHT$xD$xHDŽ$HDŽ$H$HD$hH$HD$ tZHxP H$H@HHQHuH$ f.HHPHuH$HCxH$Ht$ HHH>Ht$HHV-H|$ 3HD$HxH7u)H$dH3%(HHĸ[]DAHtPЅHt$ 뱋PJHH|$ HHD$HxH7t Ht$jHHHD$`HxH7t Ht$CHt$@H|$0HD$(HxH7tHt$HHHļ@AVAUATUHSHvHH dH%(H$1FH$$ͶHu H$DŽ$HDŽ$HDŽ$H$H$H$HtQHx H$HHHQHuH$fHHPHuH$HE8H$H$Hu@Hx@Hu`EHH$DŽ$HDŽ$HDŽ$H$H$H$H$tUHxPH$H HHQHuH$fHHPHuH$HExH$HsD$HD$HxXHs HT$(D$(HD$0HD$HHD$HT$8HT$@HtKHx HD$0H fDHHQHuHL$8DHHPHuHD$@HC8HD$HHD$Hs@Hx@ĴHs`CHHT$hD$hHD$pHDŽ$HT$xHD$XH$HD$tPHxPHD$pHDHHQHuHL$xDHHPHuH$HCxH$H$H|$辵H|$A1/H$"Eu-H$dH3%(*H []A\A]A^@HH$H輳H|$H诳Ll$L$I]Mt$LLI9HIFu L)H~OI}H7uSI|$H7SAHtZAD$5Ht$&H|@렸AHt(AE~&L$AD$PAT$AEPAUHt$HH$HxH7t Ht$HH|$HH$HHD$HxH7tHt$MHHHt$0H|$ ~HHD$PHxH7tHt$HH$HxH7t Ht$H$H$}H$HxH71Ht$"HHeDAHtG~fDGPWnfffff.H,+HcHHHTfffff.USHHFH)H~xL[,H AH1DA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]Ðfffff.US,HHV+ H)HHcHHHtH؅~qL[,H AHA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]@f.w ~f.vXfD\Ðfffff.f(\f. 4wR2f.vX  YXYXX\\ hfffff.USHHX\Oxf(Yf.D$ d$(f(\%d$ l$(f(YY^Qf.XKPD$ Y dXCXXydf(D$ff(L$qShL$YXT$f(T$\ .dAfT)R=T$f.w f(uf(Ht$@H|$HYShlQYYl$Hd$@Y[x\Qf.YYf(d$0\Khf(aX ycf(Ht$@H|$HX\$L$@Ht$@T$HH|$Hf(L$\$YC`T$Xf(YCpXxd$HHt$@PH|$Hd$d$0L$YchT$YYt$@\t$8Y\$(XCHYYXD$ Y\$0XXX-?f(T$@\d$HYT$(d$l$YD$ X\ bXb"Ht$@H|$Hc\$0t$8T$(YY\$DD$@DL$Hd$f(l$AYfD(f(YEYYf(\fA(AY\fA(YXYYAXYAY\YYXf(fA(xYAY\XhpHX[]@f.D$ d$ X%d$ l$d$l$f(d$f(fDSff(HH \@8+H9X*Y XPXY0X\iQff(5*\ NfTd$f. f(=f(T$\<$t$f(\ҾX$L$X`,f\P*覾d$f(T$f.%N^$\$f(̪ $\$H Y[Xf(f(t$f(T$\f('d$5f(f.%4$T$v+HT$f`f(8*Xf(\@Y XL$Y0X\f(藽T$f(f(T$ &\f(a5!f(T$4$DX`f(T$X\ -f(T$,$}fff.USHHH?ECEHCEPCEXC E`C(EhC0EpC8ExC@CHCPCXC`ChCpCxE8E@ H (h0p8x@H[]Ðf.USHHHOƅCHCCC C(C0C8 C@H[]Ðfff.USHHH/(0ƅ(C8HC@C XCPC0\C(`C4C8HH[]Ðff.Gzt`f.GztWf.G ztNG8f.G@zBu@f.E„t%f.E„t Ð1Ðfff.S@:HdH%(HD$1蕻H@:H$•HKtIH@H0;Htf{8t5sC@:觯H菭HD$dH3%(u5H[fHH H@0H=@PtH襨PAWAVAAUATE1USHHHdH%(H$1HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$@uL15fDIHLHL!ɃJ԰tNHHL̰FIIIIA?IIDtIHLL ɃJ԰uIHItLHLİ`L:PH:P1HD$HD$HD$ MI)LHHEIL9Hl$Hl$Ld$ x>HHfDHtH1H2HHI9uHI)LHHD*HD$HH$$$$$Ht$@H0HItH8ApD$ŠH$H?HHH$$$$$fH0H$H*Ht 趬YHHHH$$$$$fH0H$H*Ht 8YhHCHHH$$$$$fH0H$H*Ht 身YHœHHH$$$$$fH0H$H*Ht <YtHGHHH$$$$$fH0H$H*Ht 辪YpHɒHHH$$$$$fH0H$H*Ht @YPHKHHH$$$$$ fH0H$H*Ht ©Y0H͑HHH$$$$$fH0H$H*H t D YH OHHH$$$$$ fH0H$H*H0t ƨ0YH0ѐHHH$$$$$fH0H$H*H8t H8YhH8SHHH$$$$$qH0H^fH*H$@Ht @Y5H@̏HHH$$$$$H0H$HHtNHqHHH$$$$$/fH0H$H*HPtpH HHH$$$$$)H0H$XHt荦PH谎HHH$$$$$H0H$\Ht20HUHHH$$$$$fH0H$H*H`t̥ƃƃ(H$dH3%(DZH[]A\A]A^A_HH9ZLGL(2PHH2PH52PH2P1HDŽ$pHDŽ$xHDŽ$II)LHH6IH9H$pH$xL$[HHHtH9H:HHH9uHH)HHHD*H$xHHL$x$$$$$LH0H@fH*HC0t HXC0 3H5\1P1HK1PYHH)HC0\HHC7H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHԀvH5g0PHX0PHH)HHH6H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHH԰赢H5/PHw/PHH)HHH5H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHH5*PH*PHH)HHH41H9t(HHtLLHHH9uHtH衡H52*PH#*PE1HDŽ$HDŽ$HDŽ$HH)HHH-4LH9L$L$H$SXHLHtH9H:HHH9uHH)HHJD"H$HHH$$$$$$H?H0MItL諠A3HĈHHH$$$$$H0HXWfH*H$(Ht 2(YZ.H(=HHH$$$$$[H0H$0Ht迟HHL@L8MHu;DIHRH;B HRH5,PH,P1HD$0HD$8HD$@II)LHH1IH9Hl$0Hl$8Ld$@PWHHHtH:H9HHH9uHH)HHD*HD$8HH$$$$$Ht$`8H0H:fH*HCt H萞C kH5+P1H+PYHH)HC\HHCw4H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHH讝H5*PH*PHH)HHH3H9HtHtLLHHH9uH$,+HH$H$HH$H$H$ H$H$(H$H$0HcHHH5)PH)PHH)HHH2H9HtHtLLHHH9uH$,+HH$@H$HH$HH$H$PH$H$XH$H$`HcHH@1*H5(PH(PHD$PHD$XHD$`II)LHH1IH9Hl$PHl$XLd$`SHHHtH9H:HHH9uHH)HHHD*HD$XHH$$$$$H$H0H퉃tHLH5'PH'P1HD$pHD$xHDŽ$II)LHH|0IH9Hl$pHl$xL$ SHHHtH:H9HHH9uHH)HHD*HD$xHH$$$$$H$H0H퉃tHiH5&PH&P1HDŽ$HDŽ$HDŽ$II)LHHb/IH9H$H$L$RHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$H0H퉃tHwH5%PHy%P1HH)HHHi.H9HtHtLLHHH9uH$,+HH$pH$HH$xH$H$H$H$H$H$HcHHp1貘H5#%PH%PHDŽ$HDŽ$HDŽ$II)LHHQ-IH9H$H$L$WPHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$YH0H퉃tH—H5#PH#P1HDŽ$HDŽ$HDŽ$II)LHH.,IH9H$H$L$]OHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$fH0HH*tHŖH5"PH"P1Y=HDŽ$HDŽ$HDŽ$II)LHH*IH9H$H$L$@NHHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$ OH0H0fH*HtH褕H5U!PHF!P1HDŽ$HDŽ$HDŽ$ II)LHH)IH9H$H$L$ /MHHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$@FH0H/fH*HtH蛔H5PHP1YHDŽ$0HDŽ$8HDŽ$@II)LHH\(IH9H$0H$8L$@LHHHtH:H9HHH9uHH)HHD*H$8HH$$$$$H$`fH0HH*tH膓H5PHP1YHDŽ$PHDŽ$XHDŽ$`II)LHH'IH9H$PH$XL$`JHHHtH:H9HHH9uHH)HHD*H$XHH$$$$$H$fH0HH*tHqH5PHP1YHDŽ$pHDŽ$xHDŽ$II)LHH%IH9H$pH$xL$IHHHtH9H:HHH9uHH)HHHD*H$xHH$$$$$H$fH0HH* tHY Y ~H5mPH^P1HDŽ$HDŽ$HDŽ$II)LHHg#IH9H$H$L$HHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$H0HJ+fH*HCt H9C H5=P1H,PYHH)HC\HHC*H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHԠWH5HPH9PHH)HHH)H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHH薎H5gPHXPHH)HHH(H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$ HcHH1ӍH5PHPHDŽ$HDŽ$HDŽ$II)LHH'IH9H$H$L$8EHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$zH0H(fH*HC8tHҌH5PHP1HDŽ$HDŽ$HDŽ$II)LHH&IH9H$H$L$-DHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$fH0HH*CHt H؋CHH5PHP1YsHDŽ$HDŽ$HDŽ$II)LHHCH^%IH9H$H$L$CHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$  fH0HH*CPt H̊CPH5PHP1YoHDŽ$HDŽ$HDŽ$ II)LHHCP!$IH9H$H$L$ BHHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$@fH0HH*CXt HCXH5lPH]P1YkHDŽ$0HDŽ$8HDŽ$@II)LHHCX"IH9H$0H$8L$@@HHHtH:H9HHH9uHH)HHD*H$8HH$$$$$H$`fH0HH*C`t H贈C`H5@PH1P1gHDŽ$PHDŽ$XHDŽ$`IY$I)LHHC`!IH9H$PH$XL$`?HHHtH9H:HHH9uHH)HHHD*H$XHH$$$$$H$;H0H:#fH*HCht H蓇ChH5PHP1YNHDŽ$pHDŽ$xHDŽ$II)LHHChU IH9H$pH$xL$>HHHtH9H:HHH9uHH)HHHD*H$xHH$$$$$H$fH0HH*Cpt H脆CpH5PHP1Y$HDŽ$HDŽ$HDŽ$II)LHHCpIH9H$H$L$=HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$H0Hs!fH*HCxt HrCxH5PHP1YHDŽ$HDŽ$HDŽ$II)LHHCxIH9H$H$L$<HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$H0H@ fH*HtHZH5cPHTP1YHH)HHHH9HtHtLLHHH9uH$,+HH$0H$HH$8H$H$@H$H$HH$H$PHcHH01}H5n PH_ PHDŽ$HDŽ$HDŽ$II)LHHyIH9H$H$L$:HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$$H0H‰tH苂i҄H5PHP1HDŽ$HDŽ$HDŽ$II)LHHIH9H$H$L$9HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$ H0HfH*HC t HnC  IH5rP1HaPYHH)HC \HHC^H9HtHtLLHHH9uH$,+HH$`H$HH$hH$H$pH$H$xH$H$HcHH`茀H5} PHn PHH)HHHrH9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHԐH5 PH PHH)HHHH9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHH1H5PHPHDŽ$HDŽ$HDŽ$ II)LHHnIH9H$H$L$ 6HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$@LfH0HH*tH ~H5PHP1HDŽ$0HDŽ$8HDŽ$@IY$I)LHHIH9H$0H$8L$@4HHHtH9H:HHH9uHH)HHHD*H$8HH$$$$$H$`+fH0HH*tH|H5rPHcP1YHDŽ$PHDŽ$XHDŽ$`II)LHHIH9H$PH$XL$`3HHHtH9H:HHH9uHH)HHHD*H$XHH$$$$$H$fH0HH*tH{H5:PH+P1Y$HDŽ$pHDŽ$xHDŽ$II)LHHIH9H$pH$xL$2HHHtH9H:HHH9uHH)HHHD*H$xHH$$$$$H$fH0HH*tHzH5PHP1YdHDŽ$HDŽ$HDŽ$II)LHHDIH9H$H$L$1HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$fH0HH*tHyH5PHP1Y<HDŽ$HDŽ$HDŽ$II)LHHIH9H$H$L$o0HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$λfH0HH*tHxH5PHP1Y4HDŽ$HDŽ$HDŽ$II)LHHIH9H$H$L$O/HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$趺fH0HH*tHtwH5]PHNP1YHDŽ$HDŽ$HDŽ$II)LHHi IH9H$H$L$/.HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$ H0HfH*HC@tHVvH5'OHO1HDŽ$HDŽ$HDŽ$ II)LHHIH9H$H$L$ !-HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$@蛸fH0HH*tHYuY ~H5mPH^P1HDŽ$0HDŽ$8HDŽ$@II)LHHIH9H$0H$8L$@+HHHtH9H:HHH9uHH)HHHD*H$8HH$$$$$H$`޶H0HmfH*HC(t H6tC( H5:P1H)PYHH)HC(\HHCwH9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHTsH5EPH6PHH)HHHH9HtHtLLHHH9uH$,+HH$ H$HH$(H$H$0H$H$8H$H$@HcHH rH5dOHUOHH)HHHH9HtHtLLHHH9uH$,+HH$PH$HH$XH$H$`H$H$hH$H$pHcHHPqH5OHtOHH)HHH1H9t(HHtLLHHH9uHtHqH5OHO1HDŽ$PHDŽ$XHDŽ$`II)LHHIH9H$PH$XL$`:(HHHtH9H:HHH9uHH)HHHD*H$XHH$$$$$H$!H0HItHpA8_A?L$pL8H$DŽ$pLL[HIlXHHH$$$$$芲H0H$A$HtoLLDŽ$pZHIWHHH$$$$$H0H$A$Ht~oHHL@MHu IH@H x H@HHH9?$LdH5OHHOHH9$dH5OHOH95PHH9#dH5OHzO6HH9#]dH5~OHoOJHH9}#2dH5sOHdO^HH9R#LdH5eOHHSO,HH9!#LcH54OHH"OHH9"LcH5OHHOHH9"LqcH5OHHOVHH9"L@cH5OHHOhHH9]"LcH5pOHH^OHH9,"HbH5OIHOHH9!bH5OHOH9@HH9!xbH5yOHjOHH9!MbH5nOH_OHH9m!"bH5cOHTO,HH9B!LaH5OHHOHH9!LaH5dOHHROHH9 LaH5OHHOsHH9 LaaH5BOHH0O!HH9~ L0aH51OHHOHH9M L`H5 OHHOHH9 L`H5oOHH]O~HH9`H5OHOlHH9Lr`H5OHHOmHH9LA`H5OHHOSHH9^L`H5OHHO?HH9-_H5OHO6HH9_H5OHOJHH9_H5OHO^HH9L^_H5OHHmOfHH9{L-_H5nOHH\OHH9JL^H5]OHHKOHH9L^H5LOHH:OHH9L^H5;OHH)OBHH9Li^H5*OHHOHH9L8^H5OHHOHH9UL^H5OHHOaHH9$]H5OHOOHH9]H5OHOcHH9]H5OHOwHH9LU]H5OHHOEHH9r']H5hOHYO(HH9GL\H5ZOHHHOHH9L\H5IOHH7OHH9L\H58OHH&OzHH9Lf\H5'OHHO1HH9L5\H5OHHOHH9RL\H5OHHOHH9!L[H5OHHOqHH9L[H5OHHO4HH9Lq[H5OHHOHH9C[H5DOH5OHH9c[H59OH*OHH98ZH5.OHOHfHH H*XHfHH H*XHfHH H*XHfHH H*X*HfHH H*XHfHH H*XHfHH H*XTHfHH H*XHfHH H*XxHfHH H*XHHH$$$$$fH0H$L$HA@$tULLDŽ$p @HH$=HHH$$$$$H0H$H$HtSULLDŽ$p @pHH$\=HHH$$$$$zH0H$H$HtTHHMHu)DIHRHt z HRM9tAx ~S(LD$eJLD$HP @ @$LH$L?>HIH $ LLD=IPHL$p<HHH$$$$$莖H0H$L$HA@$tSHHMHu+IHRHt z HRM9tAx ~S(LD$uILD$HP @ @$LH$LO=HIH $ LLT<I0HL$;HHH$$$$$螕H0H$L$HA@$tSHHMHu+IHRHt z HRM9tAx ~S(LD$HLD$HP @ @$LH$L_<HIH $LLd;IHL$:HHH$$$$$讔H0H$L$HA@$tRHHMHu+IHRHt z HRM9tAx ~S(LD$GLD$HP @ @$LH$Lo;HIH $ LLt:IHL$9HHH$$$$$输H0H$L$HA@$t QHHMHu+IHRHt z HRM9tAx ~S(LD$FLD$HP @ @$LH$L:HIH $LL9IHL$8HHH$$$$$ΒH0H$L$HA@$t0PHHMHu+IHRHt z HRM9tAx ~S(LD$ELD$HP @ @$LH$L9HIH $LL8IHL$7HHH$$$$$ޑH0H$L$HA@$t@OLLDŽ$p9HH$I7HHH$$$$$gH0H$H$HtNHHMHu.f.IHRHt z HRM9tAx ~S(LD$MDLD$HP @ @$LH$L'8HIH $LL,7IpHL$X6HHH$$$$$vH0H$L$HA@$tMHHMHu+IHRHt z HRM9tAx ~S(LD$]CLD$HP @ @$LH$L77HIH $LL<6IPHL$h5HHH$$$$$膏H0H$L$HA@$tLHHMHu+IHRHt z HRM9tAx ~S(LD$mBLD$HP @ @$LH$LG6HIH $hLLL5I0HL$x4HHH$$$$$薎H0H$L$HA@$tKLLDŽ$p6HI4HHH$$$$$ H0H$AHtKHHMHu*fDIH@Ht x H@M9tA ~C(AHP L@ @$LI4HIt:LLL3IǾHL$JL$>PDLJHL$JL$xHL$JL$sHL$JL$HL$JL$HL$vJL$HL$aJL$HL$LJL$HL$7JL$HL$"JL$HL$ JL$sHL$IL$oLIHL$IL$HIHL$IL$HIHL$IL$HIHL$pIL$H_IHL$NIL$H=IHnHL$$IL$HfHH H*X"HfHH H*X铨L֧HH*HHHHHHzH]H=HHHHHHuHUH5H!H HHHH]H=H HHHɰHϯHHH0H֨fDAWAVL8AUATL@USHHHGdH%(HD$1HGHGHG HG(HG0HG8HG@HGHHGPHGXHG`HGhHGpHGxHLJHLJHLJHLJHLJHLJHLJHLJHLJHLJcLJLJƇLJLJHLJLJƇHLJHLJHLJHLJHLJ HLJHLJHLJHLJHLJHLJLJLJHLJƇƇƇƇƇ(HLJHLJHLJHLJHLJHLJHLJHLJ HLJ0HLJ8HLJ@LJHHLJPLJXLJ\HLJ`HLJ(LJ0HHMHu-IHRHt9Z }HRHuM9tA9\$ ~C(P:HP LX @$LI4.HIXLLL:-IăAD$$ jHxHpHDžhHDžpHDžxIHu fDIHRHtz HRHuL9 A|$  I|$(k҂IIHxHu% IHRHtz HRHuL9 A|$  I|$(`҂IIHxHu; IHRHtz HRHuL9 A|$  I|$(k҂I)IHxHuQ IHRHtz HRHuL9% A|$  I|$(`҂IHHxHug IHRHtz HRHuL9; A|$ / I|$(k҂IiHHxHu} IHRHtz HRHuL9Q A|$ E I|$(o҂I HHxHu IHRHtz HRHuL9g A|$ [ I|$(f҂IGHxHu IHRHtz HRHuI9} A|$ t I|$(o҂LGHxH HHHRHtz HRHuH9I x  I|$(`҂IFHxHu IHRHtz HRHuL9 A|$  I|$(k҂FHxH HHHRHtz HRHuH9I x  I|$(`҂I(FHxHu IHRHtz HRHuL9 A|$  I|$(k҂IEHxHu IHRHtz HRHuL9 A|$  I|$(o҂IiEHxHu6 IHRHtz HRHuL9 A|$  I|$(`҂I EHxHuL IHRHtz HRHuL9 A|$  I|$(k҂DHxHf HHHRHtz HRHuH9I6 x , I|$(o҂IHDHxHuz IHRHtB HRHuL9N A|$ B I|$(f҂CHxH HfDHHRHtz HRHuH9Ie x [ I|$(o҂CHxH HfDHHRHtz HRHuH9I~ x t I|$(k҂I(CHxHu IHRHtz HRHuI9 A|$  I|$(o҂BHxH HHHRHtz HRHuH9I x  I|$(k҂IhBHxHu IHRHtz HRHuL9 A|$  I|$(o҂ BHxHHHHRHtz HRHuH9I x  I|$(o҂IAHxHu#IHRHtz HRHuL9 A|$  I|$(`҂IIAHxHu:IHRHtz HRHuL9A|$ I|$(o҂I@HxHuPIHRHtz HRHuL9$A|$ I|$(k҂I@HxHufIHRHtz HRHuL9:A|$ .I|$(k҂,@HxHHHHRHtz HRHuH9IPx FI|$(o҂I?HxHuIHRHtz HRHuL9iA|$ ]I|$(`҂l?HxHHHHRHtz HRHuH9Ix uI|$(o҂ ?HxHHfDHHRHtz HRHuH9Ix I|$(o҂I>HxHuIHRHtz HRHuI9A|$ I|$(k҂L>HD$dH3%(H[]A\A]A^A_ÿ0M-HhHP L@ H@(7I[HIMH91B A9D$ @HL`EH0M6-HhHP L@ H@(7I[HIMH9w1B A9D$ @HLDH0M,HhHP L@ H@(7IZHI@MH91B A9D$ @HLtDH0MJ,HhHP L@ H@(7I%ZHIXMH9w1B A9D$ @HLCHq0M+HhHP L@ H@(7IYHIMH91B A9D$ @HLCH[0M^+HhHP L@ H@(7I9YHIMH9w1B A9D$ @HLCHE0M*HhHP L@ H@(7IXHI8MH91B A9D$ @HLBH/Iܿ0Mo*HhHP L@ H@(7IJXHI M}H9t1B A9D$ @HL#BHIܿ0M)HhHP L@ H@(7IWHIMrH9i1B A9D$ @HLAH0M)HhHP L@ H@(7I[WHIBMH91B A9D$ @HL4AHIܿ0M)HhHP L@ H@(7IVHI MoH9f1B A9D$ @HL@H0M(HhHP L@ H@(7IlVHI MH91B A9D$ @HLE@H0M(HhHP L@ H@(7IUHI MH91B A9D$ @HL?H0M'HhHP L@ H@(7IUHIo M+H9"1B A9D$ @HLY?H0M/'HhHP L@ H@(7I UHI MH91B A9D$ @HL>HvIܿ0M&HhHP L@ H@(7ITHIM$H91B A9D$ @HLj>H^0M@&HhHP L@ H@(7ITHIMH91B A9D$ @HL=HHIܿ0M%HhHP L@ H@(7ISHIOM{H9r1B A9D$ @HL{=H/Iܿ0MN%HhHP L@ H@(7I)SHIMH91B A9D$ @HL=HIܿ0M$HhHP L@ H@(7IRHIMuH9l1B A9D$ @HL X Vif(Ht$@H|$HX\$L$@Ht$@T$HH|$Hf(L$\$YC(T$Xf(YC8XUd$HHt$@jH|$Hd$d$0L$Yc0CxT$YYKXt$@\t$8Y\$(XCYYShXD$ Y\$0XCpXX-(?f(T$@\d$HYKHT$(d$l$YD$ XC`\ XHt$@H|$HR\$0t$8T$(YY\$DD$@DL$Hd$f(l$AYfD(f(YEYY(f(\fA(AY\fA(YXYYAXYAY\Y YXf(fA(@YAY\X08HX[].f.D$ Kd$ X%Hd$ 2T$d$ T$f(d$ f(*fDAVAUATUHPSLHHH LJPHLJXHLJpH`HhHGHGHGHG HG(HG0HG8HG@HGHHGPHGXHG`HGhHGpHGxHLJHLJHLJLJLJdH%(HD$1ƇLJLJHLJHLJHLJHLJLJƇHLJHLJHLJHLJHLJƇƇƇ0HP @ H@(7HLI/HHH91B A9E @HLHpI}(k҂HXIHu+@IHRHtz HRHuL9tA} ~i0M<HP @ H@(7LLI/HH7%H9.%1B A9E @HLHpI}(`҂=HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLIc.HHu$H9l$1B A9E @HL@HpI}(k҂HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI-HH#H9#1B A9E @HLHpI}(`҂HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI,HzH"H9"1B A9E @HLHpI}(k҂HXIHu+@IHRHtz HRHuL9tA} ~i0M\HP @ H@(7LLI;,HH/"H9&"1B A9E @HLHpI}(o҂]HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI+HjHm!H9d!1B A9E @HL`HpI}(f҂ HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI*HH H9 1B A9E @HLHpI}(o҂ HXIHu+@IHRHtz HRHuL9tA} ~i0M4HP @ H@(7LLI*HzHH91B A9E @HLHpI}(`҂5 HXIHu/@IHRHtz HRHuI9A} ~i0MxHP @ H@(7LLIW)HH#H91B A9E @HL4HpI}(k҂y HXIHu/IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI(HrH]H9T1B A9E @HLxHpI}(`҂ HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI'HHH91B A9E @HLHpI}(k҂ HXIHu+@IHRHtz HRHuL9tA} ~i0MLHP @ H@(7LLI+'HHH91B A9E @HLHpI}(o҂M HXHHHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLIi&HH H91B A9E @HLFHpI}(`҂HXHHfDHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLI%H HCH9:1B A9E @HLHpI}(k҂HXH? HfDHHRHtz HRHuH9Itx ~i0M HP @ H@(7LLI$H HyH9p1B A9E @HLHpI}(o҂ HXIHu2f.IHRHtB HRHuL9tA} ~i0MKHP @ H@(7LLI*$H1 HH91B A9E @HLHpI}(f҂LHXH HHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLIi#H HH91B A9E @HLF HpI}(o҂HXIHu1f.IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI"H H H91B A9E @HL HpI}(k҂HXHY HHHRHtz HRHuH9Itx ~i0M HP @ H@(7LLI!H HAH981B A9E @HL HpI}(o҂ HXIHu1f.IHRHtz HRHuL9tA} ~i0MLHP @ H@(7LLI+!H HyH9p1B A9E @HL HpI}(k҂MHXHHHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLIi HHH91B A9E @HLF HpI}(o҂HXIHu5f.IHRHtz HRHuI9 A} ~i0MHP @ H@(7LLIHHH91B A9E @HL HpI}(o҂HXIHu/IHRHtz HRHuL9tA} ~i0M HP @ H@(7LLIHB HH91B A9E @HLHpI}(`҂ HXIHu+@IHRHtz HRHuL9tA} ~i0MTHP @ H@(7LLI3HHYH9P1B A9E @HLHpI}(o҂UHXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI{HHH91B A9E @HLXHpI}(k҂HXHHHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLIHHCH9:1B A9E @HLHpI}(k҂HXH7HfDHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLIHHyH9p1B A9E @HLHpI}(o҂HXHoHfDHHRHtz HRHuH9Itx ~i0MZHP @ H@(7LLI9HPHH91B A9E @HLHpI}(`҂[HXIHu1f.IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLI{HH#H91B A9E @HLXHpI}(o҂HXHHHHRHtz HRHuH9Itx ~i0MHP @ H@(7LLIHHWH9N1B A9E @HLHpI}(o҂HXIHu1f.IHRHtz HRHuL9tA} ~i0MHP @ H@(7LLIHHwH9n1B A9E @HLHpI}(k҂HD$dH3%(HǃHǃHǃHǃ Hǃ(Hǃ0Hǃ8Hǃ@H []A\A]A^IEIII-IuII%I]IIM@IU(HzH7 LHD$HD$IIU(HzH7y LHD$HD$IIU(HzH7! LHD$HD$IIU(HzH7ALHD$^HD$IIU(HzH7 LHD$.HD$ICIU(HzH7LHD$HD$IIU(HzH7u LHD$HD$IcIU(HzH7LHD$HD$IIU(HzH7c LHD$nHD$IIU(HzH7LHD$>HD$IIU(HzH7+ LHD$HD$IIU(HzH7KLHD$HD$I#IU(HzH7 LHD$HD$IIU(HzH7LHD$~HD$IIIU(HzH7LHD$NHD$IQIU(HzH7LHD$HD$IcIU(HzH7 LHD$HD$IIU(HzH7>LHD$HD$IAIU(HzH7LHD$HD$IIU(HzH7LHD$^HD$I1IU(HzH7rLHD$.HD$IIU(HzH7LHD$HD$IIU(HzH7:LHD$HD$IIU(HzH7ZLHD$HD$IIU(HzH7<LHD$nHD$IIU(HzH7HLHD$>HD$IiIU(HzH7LHD$HD$IIU(HzH7LHD$HD$IyIU(HzH7LHD$HD$IIU(HzH7LHD$~HD$IIU(HzH7LHD$NHD$IIU(HzH7u4LHD$"HD$IIIP AHJʅHt$HD$~HD$똹AHM JʅJHt$HD$FHD$1AHJʅ?Ht$HD$ HD$&AHW JʅHt$HD$HD$kAHJʅIHt$HD$HD$0AHJʅHt$HD$ZHD$AHJʅHt$HD$HD$zAHJʅHt$HD$HD$AHJʅHt$HD$HD$AHJʅBHt$HD$nHD$)AHJʅHt$HD$3HD$AHJʅLHt$HD$HD$3AH$JʅHt$HD$HD$AHJʅHt$HD$HD$}AH.Jʅ[Ht$HD$GHD$BAHJʅHt$HD$ HD$AHJʅeHt$HD$HD$LAHJʅ:Ht$HD$HD$!AHJʅ_Ht$HD$[HD$FAHJʅHt$HD$ HD$AH<JʅiHt$HD$HD$PAHJʅHt$HD$HD$AHFJʅHt$HD$oHD$AH JʅHt$HD$4HD$AHpJʅHt$HD$HD$AHJʅHt$HD$HD$AH:Jʅ'Ht$HD$HD$AHJʅlHt$HD$HHD$SAHJʅ1Ht$HD$ HD$AHIJʅ6Ht$HD$HD$AHJʅ{Ht$HD$HD$bAHcJʅHt$HD$\HD$\3q#aY+_7]JqrJqrkJqr,JqrJqr JqrJqrJqrJqrjJqr Jqr"JqrJqrJqrJqrJqrJqrJqrOJqrgJqrJqr[JqrJqrJqrJqrJqrEJqr]JqrJqrQJqrJqr JqrnHXHLoH]f.fGGGG G(G0G8G@fGHGGGG G(G0G8G@GPGXf.ffG G0G4GGGG(G8f.USfHH(+G 9w0f(Љ\G_*Y 7XG(XYOXG4iQff(*\ yfTd$f. zf(5`T$\f(t$f(\PXCL$XK8,f\K(*Zd$f(T$f.%w{^T$\$f(L$\$H(Y[]Xf(@f(T$=\f(|$f(d$f(T$f.%vC8+k [f( Xf\cf(T$*YCXL$YX\f(iT$f(f.f(T$=\f(|$f('T$f(X_8f(5T$t$X\f(T$f(fGGGG G(G0G8G@GHGPfGGGG @fGGGfSSHdH%(HD$1@HHQtCHHxH7t㺠AHtIPЅHt$HHQufHD$dH3%(uH[f.PJH^fffff.SQHdH%(HD$1@HH8PtCHHxH7t㺠AHtIPЅHt$H+H8PufHD$dH3%(uH[f.PJHfffff.fG@GGGG G(G0G8ÉfSHf(H @W()*\,…gWkY_0YY,f*\BufTf.\O f(W\_G5Xd$t$YOXYXf(\f(\L$XXK8\Kd$D$^d$f(YD$XD$H [D\O f(\_W=%Xd$|$YOXf(YX\f(7d$D$pfD\O f(7\_W85Xd$t$YOXf(YX\f(d$D$fDSdHdH%(HD$1@HHbtCHHxH7t㺠AHtIPЅHt$H;HbufHD$dH3%(uH[f.PJHfffff.SbHdH%(HD$1@HH8atCHHxH7t㺠AHtIPЅHt$HH8aufHD$dH3%(uH[f.PJHfffff.fGGG GGG G(G0G8G@GHGPGXG`GhGpGxLJ8 (0Ðf.YYXÐf.USHf(H(G(Yf(YY^Qf.\XEY XEXf(D$f.f(L$qU L$YXT$f(T$\ .AfT)p%T$f.w f(uf( YM YM(YH([]f(L$L$@Sf(HH\YYXYXT$XD$H[ÐUSHf(HXO(f(Yf(l$(YY^Qf.y\ XC\$ YXCXf(D$f.f(L$S L$YXT$f(T$\ fTn=T$f.w f(uf(Ht$@H|$HK mYd$@T$H\Qf.Yd$0f(f(\K XC@  f(Ht$@H|$HX\$?L$@Ht$@T$HH|$Hf(L$\$YCXT$Xf(YC`Xd$HHt$@ mH|$Hd$d$0L$Yc ChT$YYKxt$@\t$8Y\$(XCpYYXD$ YCP\$0XC8XXc-CHf(T$@\d$HYT$(d$l$YD$ XC0\ ~X~Ht$@H|$H\$0t$8T$(YY\$DD$@DL$Hd$f(l$AYfD(f(YEYY[Hf(\fA(AY\fA(YXYYAXYAY\YYXf(fA(0YAY\X (HX[]f(\$\$mT$d$T$f(d$7fGGXLJLJGGG G(G0G8G@GHGPG`GhGpGxLJLJ0 (8@HPX`hpxfDfGGGGGGGG G(f.DAHtG~fDGPWnfffff.SuHdH%(HD$1@HHstCHHxH7t㺠AHtIPЅHt$HHsufHD$dH3%(uH[f.PJH~fffff.SsHdH%(HD$1@HH8rtCHHxH7t㺠AHtIPЅHt$HKH8rufHD$dH3%(uH[f.PJHfffff.fGGGGGGG0GGG8GG@GGHGGXGG`GGhGGpGGG$G%G&G'G(G G,GPGxLJLJƇƇƇƇƇ (08@HPX`LJhLJpLJxLJ(LJ` 08@HPXhpLJxLJG (08@HPX`hpxÐHG7fUSHHAHt$HT$H)H~vL[H AH1A;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]ÐfDLHBL)H~dMJAH AI1fDA~,DA+I)fDLHHH!HH9uIM9u1ÐfDUSHHT$HQHt$+ H)HHcHHHtH؅~oL[H AHӐA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]fff.HHT$Ht$+HcHHHT@ATUS_t4_t,_t$_t_tG,1;GPtf.[]A\fWx;9 tHF@:HmHH@L0;MA|$8AD$C@:HDe,EEEEE@:De 2D@:EIHH@IHtW}8t8ECLIH1 LI$ LP0YHHE HP0fGt GtGf.GtGfGt0Gt(Gt GtGGGGG@fDUSHHHE8ECCE E@C CEHC(C 8EXHC0E`C8EhC@CHEpCPCXC`ChCpCxE0HP(08@ @H[]fff.USHHHOCCCCPC CHC(CCHH[]ÐfUSHHH`EhC@HCpCxCC C(C0C8H[]ÐfDUSHHHCCCC C(CX(C0C8C@CHCPC`ChCp Cx`08@HPXhpx 0H(8@HPX`hx H[]fAUATUSHHXH|$ H$0dH%(H$H1H|$ HD$(HD$0HD$8HwHH$0EHHDŽ$/HtTHA11HMHHH?IL T0HtHH)0uHHuLOL O1HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HItHH|$@سH|$@HHDH診H|$@>A lD$@LOL O1HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$|LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$sHfH*4$4$H(tH袿(<$H$@سH$@!ոHH,$HH$@1LQOL BOHDŽ$HDŽ$HDŽ$ MM)LHHIM9H$H$L$ CLHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$H/fH* $<$H0tHJ0$H$PسH$P޸HH$HH$P1xLٽOL ʽOHDŽ$0HDŽ$8HDŽ$@MM)LHHuIM9H$0H$8L$@LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8HfH*$ $H8tH8$$H$` سnH$`q帄HH|$H/H$`"H$p س[H$p 괄HH%HJH$pDHD$ HxH7H$HdH3%(D8HX[]A\A]f.fDHH9L蕱HLOL O3LOL O1HDŽ$HDŽ$HDŽ$MM)LHH3IM9H$H$L$LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HfH*D,HD`tHúD`H$سEH$H 巄HHSDHhH$1LOL OHDŽ$HDŽ$HDŽ$MM)LHHmIM9H$H$L$LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$CHfH* $,$HhtHrh$H$سH$ﷄHH$H课H$1L!OL OHDŽ$HDŽ$HDŽ$ MM)LHH$IM9H$H$L$ LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$HfH*HptH$pYH$سp$萺H$HH$HQH$1BLOL OHDŽ$0HDŽ$8HDŽ$@MM)LHH֓IM9H$0H$8L$@LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8fHH*xtHնx=uH$سY<$xD$7H$:HHED$HH$1L)OL OHDŽ$PHDŽ$XHDŽ$`MM)LHHLIM9H$PH$XL$`LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XSfHH*tHuYH$سD$H$HHD$H蠺H$1LOL OHDŽ$pHDŽ$xHDŽ$MM)LHHIM9H$pH$xL$mLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$xfHH*tHY}H$سD$舶H$HH薿D$HHH$19LOL OHDŽ$HDŽ$HDŽ$MM)LHH%IM9H$H$L$LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HߖfH*\$t$HtH賲d$H$س.H$1 HH<D$HH$1߽LOL OHDŽ$HDŽ$HDŽ$MM)LHHۉIM9H$H$L$LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$+H\fH*l$|$HtHXt$H$سӳH$ֽ HHD$H蓶H$1脼LEOL 6OHDŽ$HDŽ$HDŽ$MM)LHH`IM9H$H$L$pLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HfH*D,HDtH DH$س荲H$萼 "HH蛻DH谩H$1ALOL ӱOHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$=LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tHͮYH$ سD$8H$ ; ,HHFD$HH$ 1LjOL [OHDŽ$HDŽ$HDŽ$ MM)LHHIM9H$H$L$ ݔLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$6H+fH*HtHoY7H$0سD$گH$0ݹ8HHD$H蚲H$01苸LOL ݮOHDŽ$0HDŽ$8HDŽ$@MM)LHHKIM9H$0H$8L$@LHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8fHH*tHY$H$@س$脮H$@臸 >HH蒷$HEH$@16LwOL hOHDŽ$PHDŽ$XHDŽ$`MM)LHH}IM9H$PH$XL$`:LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XfHH*tHŪYH$Pس$1H$P4 HHH?$HH$PH$`Cس[֬H$`ٶ 괄HHH H$`茵LOL O1HDŽ$pHDŽ$xHDŽ$MM)LHH[IM9H$pH$xL$LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$xH!fH*D,HDtHDH$pس芫H$p荵 THH蘴DH譢H$p1>L?OL 0OHDŽ$HDŽ$HDŽ$MM)LHH?IM9H$H$L$LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tHͧ mH$سY $D$/H$2 _HH=D$HH$1LOL OHDŽ$HDŽ$HDŽ$MM)LHH}IM9H$H$L$LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$KfHH*tHmY5H$سD$بH$۲kHHD$H蘫H$1艱LJOL ;OHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$mLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tHY$H$س$脧H$臱zHH蒰$HEH$16LץOL ȥOHDŽ$HDŽ$HDŽ$MM)LHH}IM9H$H$L$ LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tHţY- H$س$1H$4HH?$HH$1LdOL UOHDŽ$HDŽ$HDŽ$ MM)LHHxvIM9H$H$L$ LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$SfHH*tHuY H$س$H$HH$H袧H$1蓭LOL OHDŽ$0HDŽ$8HDŽ$@MM)LHH|IM9H$0H$8L$@LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8H fH*<$$HtH $H$س莣H$葭 HH蜬$HOH$1@LOL rOHDŽ$PHDŽ$XHDŽ$`MM)LHH]uIM9H$PH$XL$`,LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XHfH*$$$HtH躟$H$س6H$9 HHD$HH$1L OL OHDŽ$pHDŽ$xHDŽ$MM)LHHwIM9H$pH$xL$LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$xSfHH*tHuYMH$C%س$ݠH$ HH$H螣H$1菩LOL OHDŽ$HDŽ$HDŽ$MM)LHHTzIM9H$H$L$LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tHYH$C&س$腟H$舩 HH蓨$HFH$17LOL OHDŽ$HDŽ$HDŽ$MM)LHHDnIM9H$H$L$3LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$H|fH*HtH輛YlH$C'س$$H$' HH2$HH$1֦LOL OHDŽ$HDŽ$HDŽ$MM)LHHpIM9H$H$L$LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$#H?{fH*$$,$H tHR ,$H$ C(سʜH$ ͦ ʸHHإ$H苟H$ ~H$0Cس[oH$0r 괄HH}H袕H$0%XLaOL RO1HDŽ$HDŽ$HDŽ$MM)LHHwIM9H$H$L$zLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$nHAʼnC,t H軘Dk,H|$PسCH|$PI ɴHHTDHiH|$P1LOL OHDŽ$HDŽ$HDŽ$ MM)LHH5oIM9H$H$L$ ~LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$NH%{fH*HC0t H芗C0Y%H|$`سC0$H|$`մHH$HÜH|$`1跢LOL OHDŽ$0HDŽ$8HDŽ$@MM)LHHpIM9H$0H$8L$@k}LHDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0HH$8&fHH*C8t HKC8YH|$pسC8$H|$pƢݴHHѡ$H脛H|$p1xLYOL JOHDŽ$PHDŽ$XHDŽ$`MM)LHHiIM9H$PH$XL$`|LHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$PHH$XHxfH*HC@t HC@YH$سC@$tH$w״HH肠$H5H$1&LOL ؠOHDŽ$pHDŽ$xHDŽ$MM)LHH>eIM9H$pH$xL$ {LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$pHH$xvHwfH*HCHt H貓CHYH$سCH$$H$'䴄HH2$HH$؞H$Cس[ɕH$̟ 괄HHמHH$L[OL LO1HDŽ$P HDŽ$X HDŽ$` MM)LHHpIM9H$P H$X L$` xLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$P HH$X HCufH*HtHYH$@"س$kH$@n׵HHy$H,H$@1LޚOL ϚOHDŽ$p HDŽ$x HDŽ$ MM)LHHPdIM9H$p H$x L$ yxLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x fHH*tH谐YHH$P%س$H$PߵHH*$HݕH$P1ΛLoOL `OHDŽ$ HDŽ$ HDŽ$ MM)LHHjIM9H$ H$ L$ 2wLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ >fHH*tH`YH$`(س$̑H$`ϛ組HHښ$H荔H$`耚LOHO1LH)HHHlI9HtfHtH2H1HHL9u蹀+HD$0HT$8H$HcH$HHHĀdH$p+سH$p﵄HI@LH$p蛙LOHO1LH)HHHxbL9HtDHtH2H1HHL9u蹀+HD$0HT$8H$HcH$HHHĐ|H$-سH$HI @L0H$賘LOHO1LH)HHHkL9HtDHtH2H1HHL9u蹀+HD$0HT$8H$HcH$HHHĠ蔌H$/سH$HI$@LHH$˗LOHݔO1LH)HHHcI9HtDHtH2H1HHI9u蹀+HD$0HT$8H$HcH$HHHİ謋H$1س.H$1"HI<@L`H$LOHՓO1LH)HHH,hL9HtDHtH2H1HHI9u蹀+HD$0HT$8H$HcH$HHHĊH$3سFH$I3HIT@LxH$1LڒOL ˒OHDŽ$ HDŽ$ HDŽ$ MM)LHH[IM9H$ H$ L$ uqLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ffHH*tH舉Y0H$6س$H$ DHH$H赎H$1覔LgOL XOHDŽ$ HDŽ$ HDŽ$ MM)LHHEdIM9H$ H$ L$ *pLH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ fHH* tH5 YH$9س $衊H$褔 RHH诓$HbH$1SLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH\IM9H$ H$ L$ nLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ 裺HifH*4$4$H(tH҆(<$H$;سNH$Q `HH\$HH$1LOL rOHDŽ$ HDŽ$ HDŽ$ MM)LHH^IM9H$ H$ L$ lmLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ NH}hfH* $<$H0tH}0$H$=سH$ kHH$H躊H$1諐L OL OHDŽ$0 HDŽ$8 HDŽ$@ MM)LHHWIM9H$0 H$8 L$@ GlLHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0 HH$8 HffH*$$H8tH"8$$H$?س螆H$衐 vHH謏$H_H$1PLOL OHDŽ$P HDŽ$X HDŽ$` MM)LHHg]IM9H$P H$X L$` jLHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$P HH$X 蛶H|efH*,$$H@tHʂ@4$H$AسFH$I HHT$HH$1LOL OHDŽ$p HDŽ$x HDŽ$ MM)LHHUIM9H$p H$x L$ iLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x FHdfH*<$$$HHtHuH $H$ DسH$ HH$H貆H$ 1裌LOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHWIM9H$ H$ L$ GhLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ HbfH*$,$HPtH"P$H$0Fس螂H$0行HH謋$H_H$01PL1OL "OCHDŽ$ HDŽ$ HDŽ$ MM)LHH3PIM9H$ H$ L$ fLHf.HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ 蓲H`fH*$$4$HXtH~X,$H$@Iس>H$@A HHL$HH$@H$PCCLسH$P 괄HHHzH$P藉LOL O1HDŽ$0 HDŽ$8 HDŽ$@ MM)LHHVQIM9H$0 H$8 L$@ ,dLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 ްHAʼnCxt H+}DkxH$سH$賉 *HH辈DHvH$1dLEOL 6OHDŽ$P HDŽ$X HDŽ$` MM)LHHKIM9H$P H$X L$` aLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$P HH$X ְfHH*tH{YH$ س$d~H$ g 6HHr$H%H$ 1L׆OL ȆOHDŽ$p HDŽ$x HDŽ$ MM)LHHHIM9H$p H$x L$ `LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x 膯fHH*tHzYXH$0س$}H$0 DHH"$HH$01ƅLgOL XOHDŽ$ HDŽ$ HDŽ$ MM)LHH;GIM9H$ H$ L$ aLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 6fHH*tHXy H$@سY $D${H$@轅PHHȄD$Hz~H$@1kLOL ݃OHDŽ$ HDŽ$ HDŽ$ MM)LHHFIM9H$ H$ L$ `LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ֬fHH*tHwY$H$Pس$gzH$PjYHHu$H(}H$P1LzOL kOHDŽ$ HDŽ$ HDŽ$ MM)LHHCIM9H$ H$ L$ 5_LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 膫fHH*tHvYPH$`س$yH$`bHH"$H{H$`1ƁLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHBIM9H$ H$ L$ ]LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 6fHH*tHXuYH$pس$wH$pǁkHHҀ$HzH$p1vLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH@IM9H$ H$ L$ YLH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ çHSfH*$$HtHs$H$سnvH$qtHH|$H/yH$"H$Cس[vH$ 괄HH!HFoH$~LeyOL VyO1HDŽ$ HDŽ$ HDŽ$MM)LHHQIM9H$ H$ L$VYLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ HSfH*D,HDtHKrDH$mسtH$~ HH}DHkH$1}LxOL wOHDŽ$HDŽ$HDŽ$ MM)LHHrJIM9H$H$L$ XLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$ΤH/RfH*$,$HtHp$H$oسysH$|}HH|$H:vH$1+|LvOL }vOHDŽ$0HDŽ$8HDŽ$@MM)LHHBIM9H$0H$8L$@/XLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0HH$8vHXQfH*HtHoYgH$ rس$rH$ |HH){$HtH$ 1zLuOL tOHDŽ$PHDŽ$XHDŽ$`MM)LHHFIIM9H$PH$XL$`ULHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$PHH$XHOfH*D,HDtHSnDH$0tسpH$0z HHyDHgH$01yLsOL sOHDŽ$pHDŽ$xHDŽ$MM)LHHAIM9H$pH$xL$TLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$pHH$xfHH*tHmYعH$@wس$oH$@y "HHx$HErH$@16xL7rOL (rOHDŽ$HDŽ$HDŽ$MM)LHHCIM9H$H$L$bSLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$膟H,MfH*HtHkYH$Pzس$+nH$P.x.HH9w$HpH$P1vLpOL pOHDŽ$HDŽ$HDŽ$MM)LHH&<IM9H$H$L$RLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$NfHH*tHpj-H$`}سY,$D$lH$`v 4HHuD$HoH$`1uLDoOL 5oOHDŽ$HDŽ$HDŽ$MM)LHHnGIM9H$H$L$PLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$fHH*tHiYH$pسD$kH$pu >HHtD$HCnH$p14tLmOL mOHDŽ$HDŽ$HDŽ$MM)LHHDIM9H$H$L$xOLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$覜fHH*tHgY$H$سD$6jH$9t JHHDsD$HlH$1rLhlOL YlOHDŽ$HDŽ$HDŽ$ MM)LHH*=IM9H$H$L$ 3NLHDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$VfHH*tHxfY@H$سD$hH$r UHHqD$HkH$1qLjOL jOHDŽ$0HDŽ$8HDŽ$@MM)LHH>IM9H$0H$8L$@LLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0HH$8fHH*tH(eY$H$س$gH$qcHHp$HXjH$KpH$Cس[eöHHId$H]H$1cL._OL _OHDŽ$P HDŽ$X HDŽ$` MM)LHHW&IM9H$P H$X L$`  =LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$P HH$X >H8fH*<$<$HtHmW $H$\سYH$c˶HHb$H\H$1bL]OL ]OHDŽ$p HDŽ$x HDŽ$ MM)LHH&IM9H$p H$x L$ ;LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x H6fH*$$HtHV$H$^سXH$b ԶHHa$HR[H$1CaLD\OL 5\OHDŽ$ HDŽ$ HDŽ$ MM)LHH$IM9H$ H$ L$ :LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ 蓈H5fH*$$$HtHT,$H$`س>WH$Aa߶HHL`$HYH$1_LZOL ZOHDŽ$ HDŽ$ HDŽ$ MM)LHH#IM9H$ H$ L$ 9LHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ^fHH*$$tH{S4$H$bسUH$_涄HH_$HXH$1^LjYOL [YOHDŽ$ HDŽ$ HDŽ$ MM)LHH IM9H$ H$ L$ 7LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ HU2fH*<$$$HtH"R $H$dسTH$^HH]$H_WH$R]H$CCChس?TH$B^ 괄HHM]HpMH$\&L[OL [O1HDŽ$0 HDŽ$8 HDŽ$@ MM)LHH:&IM9H$0 H$8 L$@ `7LHf.HtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 6HAʼntHPDH$سSH$] }HH\DH%JH$1[LZOL ZOHDŽ$P HDŽ$X HDŽ$` MM)LHHIM9H$P H$X L$`  8LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$P HH$X HAʼntHMODH$سQH$[ HHZDHHH$1ZLDYOL 5YOHDŽ$p HDŽ$x HDŽ$ MM)LHHIM9H$p H$x L$ 6LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x fHH*tHNضH$سY$D$zPH$}ZHHYD$H:SH$1+YLWOL WOHDŽ$ HDŽ$ HDŽ$ MM)LHH IM9H$ H$ L$ w5LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 薁fHH*tHLY$H$ س$'OH$*YHH5X$HQH$1WLZVOL KVOHDŽ$ HDŽ$ HDŽ$ MM)LHHIM9H$ H$ L$ 4LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ &H*fH*HtH_KYH$ س$MH$WHHV$HPH$1}VLTOL TOHDŽ$ HDŽ$ HDŽ$ MM)LHHjIM9H$ H$ L$ /LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ~fHH*tHJYH$س$|LH$VHHU$H=OH$1.ULoSOL `SOHDŽ$ HDŽ$ HDŽ$ MM)LHHIM9H$ H$ L$ .LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ }fHH*tHHYHH$س$,KH$/UHH:T$HMH$1SLQOL QOHDŽ$ HDŽ$ HDŽ$ MM)LHHiIM9H$ H$ L$ A-LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ N|fHH*tHpGYH$س$IH$SõHHR$HLH$1RLPOL POHDŽ$0 HDŽ$8 HDŽ$@ MM)LHHIM9H$0 H$8 L$@ .LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 yH_%fH*$$,$HtH F,$H$ سHH$ R ̵HHQ$HJKH$ =QH$0Cس[.HH$01R 괄HHH$1OLHOL HOHDŽ$pHDŽ$xHDŽ$MM)LHHY!IM9H$pH$xL$*LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$x xfHH*tH-CYH$س$EH$OtHHN$HZHH$1KNLLGOL =GOHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$6(LHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$vfHH*tHAY5H$س$ADH$DN|HHOM$HGH$1LLEOL EOHDŽ$HDŽ$HDŽ$MM)LHH%IM9H$H$L$&LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$CtHl%fH*$$$HtHr@,$H$سBH$L HHK$HEH$1KLaDOL RDOHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$%LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$rH#fH*4$$H tH? <$H$سAH$K HHJ$HWDH$1HJLBOL BOHDŽ$HDŽ$HDŽ$MM)LHHjIM9H$H$L$K$LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$qHw"fH*D,HD(tH=D(H$سJ@H$MJ HHXIDHm7H$1HLAOL pAOHDŽ$HDŽ$HDŽ$ MM)LHHIM9H$H$L$  #LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$kqfHH*0tH<0YMH$ س0$>H$ H HHH$HAH$ 1GL @OL ?OHDŽ$0HDŽ$8HDŽ$@MM)LHHUIM9H$0H$8L$@ LHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8nHC fH*H8tH,;8YH$0س8$=H$0GHHF$HY@H$01JFL>OL |>OHDŽ$PHDŽ$XHDŽ$`MM)LHHIM9H$PH$XL$` LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XnfHH*@tH9@5uH$@سY4$@D$7H$@1DL =OL OL 2>OHH9C%LR*HL0>OL !>OfHH9$L!*HL>OL >OHH9L)HL>OL =OeHH9&L)HL=OL =OHH9;L)HLl>OL ]>O HH9L])HL=OL =OHH9QL,)HLJ>OL ;>OHH9L(HLY=OL J=OHH9L(HL=OL =OHH9ZL(HL7=OL (=OHH9Lh(HL=OL =O锸HH9%L7(HLu=OL f=O龹HH9y#L(HL=OL u=OHH9#L'HLS8OL D8OHH9#L'HL=OL =OHH9%Ls'HLq8OL b8OxHH9M"LB'HL =OL =OXHH9:$L'HL7OL 7OHH9N"L&HL0OL 0OZsHH9$L&HL7OL 7OHH9!L~&HLqHH9#L%HL 7OL 6OHH9G!L%HL;OL ;OHH9#L%HLg6OL X6OHH9!LX%HLv;OL g;OHH9L'%HL6OL v6O;HH9L$HL6OL 6O霯HH9L$HLC;OL 4;O鑚HH9"L$HL24OL #4OHH9Lc$HL2OL 1O HH9wL2$HL6OL 6O+HH9L$HL0OL p0Oo}HH9L#HLn.OL _.O鋑HH9ZL#HL]2OL N2OFHH9+Ln#HL5OL }5O鵨HH9L=#HL;/OL ,/OHH9L #HL*3OL 3OӼHH9\L"HL1OL 1OHH9 L"HL(6OL 6OHH9(Ly"HLw/OL h/OvHH9NLH"HL-OL w-OWHH9L"HL7OL 7OyHH9/L!HL3OL 3OHH9L!HLS8OL D8O/HH9}L!HLb1OL S1OHH9jLS!HLQ/OL B/OHH9H"!HL@4OH14OWHH9RL HL-OL -OwHH9ML HL+OL +OrHH9*L HLM5OL >5OHH9aL^ HL2OL 2OHH9L- HLk,OL \,O6|HH9LHLz*OL k*OHH9LHLI.OL :.OHH9LHL.OL .OHH9LiHL,OL ,OboHH99L8HL*OL *OJHH9LHL*OL *OtHH9LHL0OL 0O%HH9LHL5OL t5O隐HH9LtHL2.OL #.O0HH9LCHL,OL +OHH9pHHL0OH0OHH9nLHL*OL p*OuHH9LHL(OL (O麈HH9LHL},OL n,OHH9LNHL/OL }/O@HH9LHL;)OL ,)OzHH9LHL*-OL -O]HH9LHL+OL +OeHH9LHL+OL +OHH9"LYHL)OL )OmHH98L(HL'OL w'OHH9LHLU&OL F&OeHH9LHL-OL -OhHH9]LHLS2OL D2OЎHH9LdHLb+OL S+O鉶HH9L3HLQ)OL B)OzHH9aLHL`.OL Q.O&HH9LLHL'OL 'O2pHH9hLHL%OL %OHH9LoHL0OL 0OvHH9pL>HL,OL ,O銛HH9L HLk&OL \&OtHH9LHL%OL %O{HH9LHLI(OL :(OHH9}LzHL(OL (O8HH9) LIHLg&OL X&OkHH9LHL#OL #O{HH9LLHLe&OL V&OgHH9-HHLt+OHe+O飗HH9LHLc&OL T&OHH96LTHL#OL #O|HH9 L#HL'OL &OvHH9LHLp'OL a'OaHH9LHL_+OL P+O;HH9"HHL*OH*OHH9L_HL(OL (O#HH9H.HL,*OH*OKHH9LHL-OL -OчHH9 LHL*'OL 'OPJHHfHH H*f(X4$HfHH H*XHfHH H*f(X,$^HfHH H*f(X $7cHfHH H*f(X$$aHfHH H*f(X$9`HfHH H*f(X4$HfHH H*f(X,$HfHH H*f(X $QHfHH H*f(X$$HfHH H*XWHfHH H*f(X$騄HfHH H*X%HfHH H*f(X<$鸭HfHH H*XMHfHH H*X鿲HfHH H*X HfHH H*X铮HfHH H*f(X<$\~HfHH H*f(X4$|HfHH H*XtHfHH H*f(X$HfHH H*f(X$aHfHH H*f(X<$HfHH H*f(X4$kHfHH H*f(X,$HfHH H*f(X $jHfHH H*f(X<$HfHH H*X騊HfHH H*XڈHfHH H*XlHfHH H*XƄHfHH H*XnHfHH H*XlHfHH H*f(Xl$jHfHH H*f(XL$iHfHH H*X`HfHH H*f(X$$bHfHH H*X:cHfHH H*XtHfHH H*f(X$HfHH H*f(X${HfHH H*XHlHHiH HHYHAHPЅZH IAHPЅHAHPЅHAHPЅHrAHPЅJH?9AH9PЅH AHPЅHAHPЅH AH PЅWHsFAH-PЅH@AHjPЅQH @H\"HPLHp`L}HH1zPJHPJHRPJHPJH0PJHTPJHPJHPJHVPJHzPJHPJHPJH}PJH;PJHPJHPJH PJHH!PJHPJHdLE1)11}1r|@{1HHHxH7t Hz HPHHxH7t HN HHxH7t H. HHxH7t H HHxH7t HHHxH7t HHpHxH7t HH`HxH7t HHPHxH7t HnH@HxH7t HNH0HxH7t H.H HxH7t HHHxH7t HHHxH7t HHHxH7t HHHxH7t HHHxH7t HnHfLBHHHxH7H+HHHxH7qH`HHHDžhP5HzH7ukHPHDžhAHxPHPg\HPHDžDHxhHmGIULPHPHAHOHtKxHgH뎺|@{14HHBHJH3HKHHHxH7HHKHHHxH7AA)DD)D9ʍGuÐD 1AD9}dA@z҉ID Hc<>AA)DD)D9ʍGuASwsD Ðfff.AUATUSHhD,&A$ND$ dH%(HD$X1D$$ D$(<D$,[D$0yD$4D$8D$<D$@D$DD$H1D$LOFV,DkA N(Ht$McT$f(L$imA$OT$,Ht$f,Bl AL$*|1!,VHHiQi\HcH,V kHDHD@@@DX1/ÄkH[]A\A]A^A_H1[]A\A]A^A_Ðfffff.AWAVDrAUATL~ USIՉ1H(Ht$HL$fPI 8Hc҃A))ωD9Zu1HÄL7}1ҾDAFEEAAIAAC HAAD)A)DA9PuHcHD$EL$Du:IBT \IčE/D$Dʹ LLDL$IfDLLA*Y`7AD$X|fDL$*A Y <AD$pD;L$uDʹ LLL$>fLt$IURLL*Y;C&fHt$HT *HEZgY6AD1CD&HPAAIAAB Hc҃AD)A)D94ruHH\$LHHT@LrBDXZÄ1H([]A\A]A^A_H(1[]A\A]A^A_Ðfffff.AUATIUS1ӾtÄHIHJCIu E$IHAL )ЃCgDKi1APAIAAB Hc҃D)EA)DD9ȍH$HHt$PH!Ą5舣'HHD$HxH7u`H|$P H$ߟHGH蝤HH貶H*H|$pH蘶HD$0HxH7tH$HHD$ HxH7xH|$pHHe趪[u$HEH$3HyEH|$@Hf.AWAVAUATUSHHHdH%(H$1HELd$`8~;H= DLhĄ觬L诶xDŽH袪LzEpU`EhT$D$D$ @e([UH HC(@ -Lk(LLFC H|$`CD$8HD$hD$0HpHH9tfHHH)H9Hc҈LZHH8$HLHD$(dH3%(}H8[]A\A]@T$hCXf(T$",ȺMnfT$)i€: T$`*HCSՃ8\T$SH= DLd$AXL>LF"YHIQ$L I[HI/LE T[HHD$H§L躭X5[X5tkkl$ -HL>H趤fDATUISHoHH9tDH;Ht{HH9uI,$Ht[H]A\]D[]A\AWAVAUATUSHHHH|$@dH%(H$1H8HIHD$!HHD$HEIHEIGHEIGHEIGHE IG HE(IG(HE0IG0HE8IG8E@AG@HHHCHGHCHGHCHGHC HG HC(HG(HC0HG0HC8HG8C@G@HD$@H|$0Hp謟HD$0HxH7lHD$@ƄHxӠHH覞ÄH蹠HÄH蟠HW1AH\$PDAƆ0AH|ÄHzHL$PHIHQBHBLiൃABAƅ0AH!ĄHAHCH諫HHHHD$ ÄHD,(HD$D$(E8DE˪HL$PHIHQBHBLqൃABIHHD$HD$x8t>AƆfMMA~8tAAƅ@H|$HD$HH@0H=@Pt H|$@LIH@0H=@Pt LDH|$fH|$\H|$@蒒H$dH3 %(Du1H[]A\A]A^A_Ht$/`֗H ˗H|$@AƆfMMA~8tAAƅ@H|$.HD$HH@0H=@Pt H|$@LIH@0H=@Pt LDH|$膐H|$|H|$@貎H$dH3 %(Du1H[]A\A]A^A_Ht$/耯H 6H|$@\HĜ@HATIUSHt!HsLHkH舙HHu[]A\f.HATIUSHt!HsLHkHHHHu[]A\f.AUATUSHHHH_H)HHHH IH9wHH9wpIE1IHuaLHtH>H8H~HxH~HxHvHpHHubHI\ t蛘LeMH]LeH[]A\A]ÐA LHt$=HUH]IHt$H)HHvfDHHL*H}@AWAVHAUATIUSHHLuH?LH)HHHHHH9HI 融LuH}ILH)LtrMwM+71HHCHCLHH8J1H HKHSI7MwI)LHHtHLHHIH}LsLuI9 HLHtDHBHBHHHHHqHBHrHAHqHBHrHAHHI9uHH]I)IO|&0LuI9tDH;Ht論HI9uLuMtL葖KDmLeL}IHEH[]A\A]A^A_DHHtHAWAVAUATIUSHHHoHHHWHH)HHH)Hv[qHEH{0HtLHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_f.Hw(HH)HLpLhK6H9HHlHH9 H<~HIHs(L)HL4HCHHPH)HHHH;ȈL;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLIB~듽:fDL(~cHUIH)HHHXLH)L}E{Hu{HCHHxcH諍HAHtG~fDGPWNfffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HےHufHD$dH3%(uH[f.PJH^fffff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$H+HxufHD$dH3%(uH[f.PJHfffff.SHHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H{HufHD$dH3%(uH[f.PJH~fffff.SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$HːHufHD$dH3%(uH[f.PJHN~fffff.SHdH%(HD$1@HHxtCHHxH7t㺠AHtIPЅHt$HHxufHD$dH3%(uH[f.PJH}fffff.fGGGGGGG GGG(G G0G G8G G@G GHG GPGGXGGhGGGG`GaGbGcGdGpGxLJLJLJ0 (8@HPX`hpxLJLJLJ LJHLJ(08@PX`hpxÐHLJ7USHHFH)H~xL[H AH1DA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]Ðfffff.USHHV+ H)HHcHHHtH؅~qL[H AHA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]@ATUS_tD_t<_t4_t,G1;u;09 u[]A\fHCpل@: HCGH@L0;MA|$8AD$C@:H}DeEEEE@:De蛊D@:xIHH@IHtW}8t8ECL~H|%L-|I$ LP0]H|HE HP0kxf.Gt G tGf.G tG fG tGt G GG fUSHHHOECCEC CEC(C 8HC0C8C@CHCPCXC`ChCp8Cx@E E(E0E8 (H[]ÐfUSHHHOE`EHEPCEaCEXCCEbC CEcExC(CEdCHH[]fffff.USHHHϝHE PC@HCXC`ChC pC(xC0C8H[]ÐfDUSHHH迧S CXCS( SS0KS8S@SHSPS`Sh(0H`0hH8px@P X(8@HPXpH[]AVAUATUHSHHH>dH%(H$1HD$HDŽ$HwHDŽ$HDŽ$HDŽ$HH$`fHHDŽ$@MHtUHA2D1mHMHHH?IL ԀHtHH)0uHHuL4NL %NE1HD$ HD$(HD$0MM)LHHMM9Ld$ Ld$(Ll$0WLLHtH2H1HHL9uIL)HJD"HD$($H$$$Ht$@H M‰Ct LtwS$لL2NL #NE1HDŽ$HDŽ$HDŽ$MM)LHH`MM9L$L$L$jLL@HtH2H1HHL9uIL)HJD"H$$H$$$H$H M䉃tLuvL$`PL^$$L$$H9H H4hfH*H$`Ht v0L,^$$L$$HH HgfH*H$`Ht uY]L]$$H$$LYH H$`Ht=uLNL NE1HDŽ$HDŽ$HDŽ$MM)LHH^MM9L$L$L$hLLHtH2H1HHL9uIL)HJD*H$$H$$$H$ fH MH*tLBtLkNL \NE1YHDŽ$ HDŽ$(HDŽ$0MM)LHH2`MM9L$ L$(L$0gLLDHtH2H1HHL9uIL)HJD*H$($H$$$H$@TH HefH*MtL)sL2NL #NE1YHDŽ$@HDŽ$HHDŽ$PMM)LHH^MM9L$@L$HL$PfLL@HtH2H1HHL9uIL)HJD*H$H$H$$$H$`fH MH*tLrLNL NE1-HDŽ$`HDŽ$hHDŽ$pMYl$M)LHH]MM9L$`L$hL$peLLHtH2H1HHL9uIL)HJD*H$h$H$$$H$fH MH*tLqYҽpL Y$$H$$LVfH H$`H*Ht pYD$PLX$$H$$LfH H$`H*Ht pY0L)X$$H$$LrfH H$`H*Ht oYD$LW$$H$$LfH H$`H*Ht :oLNL tNE1YHDŽ$HDŽ$HDŽ$MM)LHHZMM9L$L$L$cLLDHtH1H2HHI9uIM)LHJD*H$$H$$$H$fH MH*tL'nLPNL ANE1YvHDŽ$HDŽ$HDŽ$MM)LHHVMM9L$L$L$bLLf.HtH2H1HHL9uIL)HJD*H$$H$$$H$4H H\fH*MtL mLNL NE1HDŽ$HDŽ$HDŽ$MM)LHHUMM9L$L$L$aLL@HtH2H1HHL9uIL)HJD*H$$H$$$H$4H M퉃 tLlLNL NE1HDŽ$HDŽ$HDŽ$MM)LHHTMM9L$L$L$`LLHtH2H1HHL9uIL)HJD*H$$H$$$H$fH MH*(tL"k(LNL NE1YѷHDŽ$HDŽ$HDŽ$MM)LHH(>SMM9L$L$L$_LLDHtH2H1HHL9uIL)HJD*H$$H$$$H$ 4H H}YfH*M0tL j0L~NL ~NE1YHDŽ$ HDŽ$(HDŽ$0MM)LHH0QMM9L$ L$(L$0q^LL@HtH2H1HHL9uIL)HJD*H$($H$$$H$@fH MH*8tLh8L}NL t}NE1YD$HDŽ$@HDŽ$HHDŽ$PMM)LHH8PMM9L$@L$HL$P]LLHtH2H1HHL9uIL)HJD*H$H$H$$$H$`fH MH*@tLg@HEYHHH@]HLXuHL9iH$`HxH7YC @H$dH3%(\H[]A\A]A^ÐfDHH9&]L\LNIL NH5{NL q{NE1HDŽ$`HDŽ$hHDŽ$pIM)LHHQML9L$`L$hL$pZLLf.HtLLHHH9uIL)HJD.L$`H$h$$$H$L1H M퉃HtLfHEHHH \H$H sHH$ YH$H$ emH$ HDŽ$@HDŽ$HDŽ$HDŽ$HDŽ$HwHH$`CEHHDŽ$@*EHtRHA/f1ZHMHHH?IL ԠHtHH)0uHHuZHHgLuHDŽ$`HDŽ$hHDŽ$pHEZHPI9IH$`H$hH$p[WHEH$hHIE$$$$H$fH MH*PtL+dPH5txNHexNE15HDŽ$HDŽ$HDŽ$IYt$I)LHHPCMH9L$L$L$dVHL@HtLLHHH9uHH)HJD.H$$H$$$H$fH MH*XtLcXL;wNH,wNE1YHDŽ$HDŽ$HDŽ$MI)LHHXDML9L$L$L$jVHLDHtH2H1HHL9uHH)HJD*H$$H$$$H$fH MH*`tLb`H5 vNHuNE1YD$HDŽ$HDŽ$HDŽ$II)LHH`CMH9L$L$L$TUHLHtLLHHH9uHH)HJD.H$$H$$$H$fH MH*htL`hH5tNHtNE1YIHDŽ$HDŽ$HDŽ$II)LHHh[BMH9L$L$L$:THLDHtLLHHH9uHH)HJD.H$$H$$$H$fH MH*ptL_pLsNL sNE1Y1HDŽ$HDŽ$HDŽ$MM)LHHpAMM9L$L$L$"SLLDHtH2H1HHL9uIL)HJD2H$$H$$$H$ H H/MfH*MxtL^LzrNL krNE1HDŽ$ HDŽ$(HDŽ$0MM)LHH?MM9L$ L$(L$0 RLL@HtH2H1HHL9uIL)HJD2H$($H$$$H$@H MtL]LnqNH_qNE1HDŽ$@HDŽ$HHDŽ$PMI)LHH>ML9L$@L$HL$P-QHLHtH2H1HHL9uHH)HJD*H$H$H$$$H$`fH MH*tL\H5KpNL L YNL XN1YD$HDŽ$`HDŽ$hHDŽ$pMM)LHH%IM9H$`H$hL$pE2LHHtH2H1HHL9uIL)HHD*H$h$H$$$H$4fH HH*tHr=LWNL WN1YHDŽ$HDŽ$HDŽ$MM)LHH$IM9H$H$L$C1LHfDHtH2H1HHL9uIL)HHD*H$$H$$$H$脻H H5-fH*HtHY3NHL ,3NHH9LlL-3NHL 3NHH9lL;L3NHL 3NHH9;L L 3NHL 2NHH9 LL2NHL 2N\HH9LL)7NHL 7NHH9LwL87NHL &7N:HH9wLFLG7NHL 57NHH9FLL67NHL $7NMHH9LL%7NHL 7NHH9LL7NHL 7NHH9LL#7NHL 7NHH9LQL7NHL 7NbHH9QL L2NHL 2NHH9 LL2NHL 2NHH9LL2NHL 2NHH9LL2NHL 2NDHH9L\L2NHL 2NgHH9\L+L2NHL 2N5HH9+L L2NHL 2NHH9 L L2NHL 2NHH9 L LY,NIL G,NHH9 Lg LH,NIL 6,NۭHH9g L6 L7,NIL %,N鑬HH96 L L&,NIL ,NMHH9 L L,NIL ,N0HH9 L L,NIL +NHH9 Lr Ls2NHL a2N HH9r LA Lb2NHL P2NHH9A L L,NIL ,N8HH9 L L,NIL ,NHH9 L L0NHL /NvHH9 L} L~.NHL l.NHH9} LL L0NHL 0NHH9L L L3NHL 3N~HH9 L H5)NIL y)N@HH9 L L-NHL -NHH9 L L-NHL -NHH9 LW L-NHL -NaHH9W L& L-NHL -N!HH9& L Lv)NIL d)N8HH9 L L)NIL )N1HH9 L L)NIL )NHH9 Lb L)NIL )N靟HH9b L1 L2.NHL .NHH91 L La+NHL O+NsHH9 LLP+NHL >+N*HH9LL?+NHL -+NHH9LmL.+NHL +NHH9mL<L+NHL +NCHH9<L Ll/NHL Z/NH |@{1 HH$ HxH7tLH~ytoje@AWAVAUATUSHhdH%(HD$X1="Kt$HFH|$A01HD$7 HXHHHڃ?HHHԠt)AI)HD$PxH|$HD$B 1HHuHD$HD$HHD$0HD$8HD$@LhI1LA@HHH|$ Ll$HnH|$ H|$ IWA|$8PEt$jMtvM}1,A|$8AD$i@8]HL9tBHT$LH),D8uH9\$HH؉ٺHHD$0HL9uHT$HzH7Ld$8H\$0LH)H-1E1E1L9(MtAIHL9uM9t-ILM9v!fDAHIHAVL9rIuL1@2H3 @H9։w%9D$MtLHT$HуCH|$0HL$8HHt$@H)H)H9w1HHH9ڄh8f.L(I$HP00H@PP0LAIM)I{MAtO<6HM9LGLIIHP tAL9LHfH2t@1HHH9uL)LtMtLHD$HD$LIFH H|$0j(H҉HL$8HD$0H9m@qHE1Dǹ15Lt!Ɓ@EƩuuIcAA@uqKLI$A1H@0H=@P1LAHtH\$XdH3%(u]Hh[]A\A]A^A_øAHOHt5Ht$ E1(IyBHJHH|$0Ht'HD$HxH7t Ht$ ;|H>EHHD$HxH7tHt$0|ҹۄ~8H|$ Hr܄t88MHtLH|$0eU1HAVSHH}IHpdH%(HE1IHHHH}LH}HEHEHEHEHEHwHHuHHHE3HtPHA-1HMHHH?IL THtHH)0uHHuLEHEIxHH}H1A'fD1HLH?HH HtHH)A0uHHuuuHuuzH HEHxH7HEHxH7HEdH3%(He[A^]DfDHHEH1`fDHuH}HuH HEHxH7LAHPЅ*Hu AHt[PЅ!Huy AHt"PЅHuM PJH݋PJH뤋PJHadHHEHxH7t HuwxHEHxH7t Hu]xH5DHʺ|@{1fHHEHxH7tHu xs@fƇƇƇLJ@LJD(08HPXf.H,+HcHHHTfffff.USHHFH)H~xL[,H AH1DA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]Ðfffff.US,HHV+ H)HHcHHHtH؅~qL[,H AHA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]@AVAU1ATUASHHH6dH%(H$1HDŽ$HDŽ$HDŽ$HDŽ$HƬHDŽ$9MHHILHH!H=,HtAHHHHljH?>tMHHIL H=,HuL1NL 1NE1HD$HD$HD$ LL)HHHMLM9Ld$Ld$Hl$ =LLDHtH2H1HHL9uIL)HJD"HD$HH$$$$$Ht$@H0MHtL#L0NL 0NE1+HD$0HD$8HD$@MM)LHH=MM9Ld$0Ld$8Ll$@=LLfDHtH2H1HHL9uIL)HJD"HD$8HH$$$$$Ht$`'H0H3fH*MtL,L/NH/N1YLH)HHHI9HtfDHtH2H1HHL9uH$,+H$H$HH$H$H$H$H$H$H$ HcHHAE1FL/NL /NDHD$PHD$XHD$`MM)LHHMM9Ll$PLl$XLt$`4;LLHtH2H1HHL9uIL)HJD*HD$XHH$$$$$H$DH0MItL``@:D$@:"ꯂHHD$H HžeHAH HžrHHDIHH@IH<}8wuCLHA  %AAA t'H$dH3%(;HĐ[]A\A]A^L,NL ,N1HD$pHD$xHDŽ$MM)LHH4IM9Hl$pHl$xL$:LH@HtH2H1HHL9uIL)HHD*HD$xHH$$$$$H$TH0HCtHpL+NL +N1HDŽ$HDŽ$HDŽ$MM)LHH80IM9H$H$L$9LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$aH0HC tH}L*NL *N1HDŽ$HDŽ$HDŽ$MM)LHH/IM9H$H$L$r9LHfHtH2H1HHL9uIL)HHD*H$HH$$$$$H$iH0HE7fH*HCt HqCL})NL n)N1YfHDŽ$HDŽ$HDŽ$MM)LHHC1IM9H$H$L$8LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tH_LP(NL A(N1HDŽ$HDŽ$HDŽ$MM)LHH1IM9H$H$L$46LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ QH0H4fH*HCXt HYCXL%'NL 'N1YdHDŽ$HDŽ$HDŽ$ MM)LHHCX0IM9H$H$L$ $5LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@fH0HH*Ct HJCL%NL %N1Y>HDŽ$0HDŽ$8HDŽ$@MM)LHHC0/IM9H$0H$8L$@3LH@HtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`fH0HH*C t H:C L$NL $N1YYHDŽ$PHDŽ$XHDŽ$`MM)LHHC /IM9H$PH$XL$`2LH@HtH2H1HHL9uIL)HHD*H$XHH$$$$$H$fH0HH*C(t H*C(L#NL #N1YaHDŽ$pHDŽ$xHDŽ$MM)LHHC(-IM9H$pH$xL$1LH@HtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*C0t HC0Lf"NL W"N1Y`HDŽ$HDŽ$HDŽ$MM)LHHC0b,IM9H$H$L$0LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*C8t H C8L6!NL '!N1 :HDŽ$HDŽ$HDŽ$MYL$M)LHHC8y+IM9H$H$L$0LHf.HtH2H1HHL9uIL)HHD*H$HH$$$$$H$yfH0HH*C@t HC@LNL N1Y]9HDŽ$HDŽ$HDŽ$MM)LHHC@(IM9H$H$L$/LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$ifH0HH*CHt HCHLNHN1YD$LH)HHHCH'I9Ht@HtH2H1HHL9uH$,+HH$0H$HH$8H$H$@H$H$HH$H$PHcHH0LNHNLH)HHH#1I9HtDHtH2H1HHL9uH$,+H$`H$HH$hH$H$pH$H$xH$H$HcHH`>ƃHHE H@0H=@PlH_HH9a-LLNIL NHH90-HLINHH7NHH9,LWL8NIL &NHH9,H&LGNIL 5NLNL N1HDŽ$PHDŽ$XHDŽ$`MM)LHHH)IM9H$PH$XL$`,LH@HtH2H1HHL9uIL)HHD*H$XHH$$$$$H$1H0H)fH*HtH6L_NL PN1YYHDŽ$pHDŽ$xHDŽ$MM)LHH'IM9H$pH$xL$*LHf.HtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*tHL(NL N1HDŽ$HDŽ$HDŽ$MM)LHH&IM9H$H$L$)LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ H0H(fH*HtHLNL N1HDŽ$HDŽ$HDŽ$MM)LHH&IM9H$H$L$'LHf.HtH2H1HHL9uIL)HHD*H$HH$$$$$H$H0H&fH*HtHLNL N1HDŽ$HDŽ$HDŽ$MM)LHH%IM9H$H$L$ 'LHf.HtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHLNL qN1YgUHDŽ$HDŽ$HDŽ$MM)LHH$IM9H$H$L$%LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ qfH0HH*tHLHNL 9N1YWTHDŽ$HDŽ$HDŽ$ MM)LHH1#IM9H$H$L$ $LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@YfH0HH*tHLNL N1Y.HDŽ$0HDŽ$8HDŽ$@MM)LHH IM9H$0H$8L$@#LHHtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`AfH0HH*tHLNL N1Yw-HDŽ$PHDŽ$XHDŽ$`MM)LHHyIM9H$PH$XL$`|"LHHtH2H1HHL9uIL)HHD*H$XHH$$$$$H$)fH0HH*tHLNL N1Y_,HDŽ$pHDŽ$xHDŽ$MM)LHHIM9H$pH$xL$!LHHtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*tHLhNL YN1YG+HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$d LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHgL0 NL ! N1Y/*HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$DLHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHOL NL N1Y)HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$<LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*htH7hL NL N1YGCHDŽ$HDŽ$HDŽ$MM)LHHh=IM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ fH0HH*ptHpL NL y N1Y?BHDŽ$HDŽ$HDŽ$ MM)LHHpVIM9H$H$L$ LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@fH0HH*xtHxLPNL AN1Y/AHDŽ$0HDŽ$8HDŽ$@MM)LHHxIM9H$0H$8L$@lLHHtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`fH0HH*tHLNL N1Y@HDŽ$PHDŽ$XHDŽ$`MM)LHHIM9H$PH$XL$`dLHHtH2H1HHL9uIL)HHD*H$XHH$$$$$H$ifH0HH*tHLNL N1Y?HDŽ$pHDŽ$xHDŽ$MM)LHHIM9H$pH$xL$TLHHtH2H1HHL9uIL)HHD*H$xHH$$$$$H$QfH0HH*tHLNL N1Y=HDŽ$HDŽ$HDŽ$MM)LHH3IM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$9fH0HH*tHLpNL aN1Y<HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$!fH0HH*tHY;ƃLNL N1HDŽ$HDŽ$HDŽ$MM)LHHY IM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ YH0HqfH*HC`t HaC`LNL N1YCHDŽ$HDŽ$HDŽ$ MM)LHHC` IM9H$H$L$ LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@fH0HH*CPt HRCPLNL N1HDŽ$0HDŽ$8HDŽ$@MYT$M)LHHCP{ IM9H$0H$8L$@#LHfHtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`fH0HH*Cht H:ChLNL N1YAHDŽ$PHDŽ$XHDŽ$`MM)LHHCh< IM9H$PH$XL$`ULH@HtH2H1HHL9uIL)HHD*H$XHH$$$$$H$fH0HH*Cpt H*CpLVNL GN1YD$HDŽ$pHDŽ$xHDŽ$MM)LHHCp IM9H$pH$xL$LHfDHtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*Cxt HCxL&NL N1Y}?HDŽ$HDŽ$HDŽ$MM)LHHCx~ IM9H$H$L$LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHLML M1Y5HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHLML M1Y3HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ifH0HH*tHLML qM1Y_HDŽ$HDŽ$HDŽ$MM)LHH@IM9H$H$L$ LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ QfH0HH*tH_LHML 9M1HDŽ$YHDŽ$MHDŽ$ M)LHHIM9H$H$L$  LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@9fH0HH*tHLMHM1Y0HDŽ$0HDŽ$8HDŽ$@MI)LHHII9H$0H$8L$@L HHHtH2H1HHL9uHH)HHD*H$8HH$$$$$H$`!fH0HH*tHY/ƃHfHH H*X HH9 LMHHMBHH9| LԼL5MHL #MHH9K L裼L$MHL MHH9 LrLMHL MHH9 LALMHL MHH9 LLQMHL ?MHH9 L߻LMHL MHH9V L讻LoMHL ]MHH9% L}L^MHL LMvHH9LLLMMHL ;M!HH9LLMHL MHH9LLMHL MHH9aL蹺LMHL MFHH90L舺LMHL MHH9LWLMHL MHH9L&LMHL MTHH9LL6MHL $MQHH9lLĹL%MHL MHH9;薹LMHMHH9LhLMHL MHH9L7LMHL MAHH9LLMHHMHH9}LոLMHL MHH9LL褸LMHL MHH9LsLTMHL BMHH9LBLcMHL QMGHH9LLMHL MmHH9LLAMHL /MVHH9WL请LPMHL >MHH9&L~L?MHL -MHH9LMLMHL MHH9LLMHL MyHH9LLMHL MHH9bL躶LMHL MHH91L艶LMHL MVHH9LXLMHL M HH9L'LhMHL VM HH9LLMHL MHH9mLŵLMHL MHH9<L蔵LMHL MHH9 LcLdMHL RMHH9L2LMHL MHH9LLMHL MHH9xLдLMHL M6HH9GL蟴LMHL MLALLHfHH H*X8HfHH H*XHfHH H*X4HfHH H*XHfHH H*XHfHH H*XzH}H]HMH5HMHUHHHHuHHHH%H5HHUHHHH%H5HEH%HuHMHUHHHHH%HmHHHH%HEHmH5H=HH谶{fDt5t*GXf.G`zuƇƇD1fDfffff.H,H@tƇfff.H`HHHhHWHpHWHxHWHHW HHW(HHW0HHW8HHW@f.HHHHHWHHWHHWHHW HHW(HHW0HHW8Ð@S@:HdH%(HD$1H@:H$HFH@H0;Htf{8t5sC@:HϸHD$dH3%(u5H[fHHH H@0H=@PtH萴AWAVAUATIUSI$HdH%(H$17I$`I$H|$@ADŽ$IDŽ$IDŽ$ I$I$AƄ$AƄ$AƄ$IDŽ$(IDŽ$0IDŽ$8ADŽ$@ADŽ$DIDŽ$HIDŽ$PIDŽ$XIDŽ$M$HT$H|$0ӂHT$0Ht$@H|$ fI$IHu)@IHRHt;Z ~HRHuL9tA;_ }k0Ll$M詮HP X H@(7LLIH HzH9q1B A9G @HLiI$ I(Ht$ HD$ HxH7HD$0HxH7uH!H|$@AƄ$ H$dH3%(%H[]A\A]A^A_ùAHPЅHt$ 뎹AHtQPЅ^Ht$`OIW(HzH7u7LHD$芷HD$IPJH뮋PJHxAHt0JʅHt$HD$HD$뙿JqrHI$HD$H|$I$wCHZHI$HD$HD$ HxH7t Ht$HD$0HxH7t Ht$H|$@xHHI$HD$HI$HD$f.fGGGG G(G0G8G@fG G0G4GGGG(G8f.ATU SHHpH D'HHD貯ÄHDeH߾zjDHEHD$BD$HDe H߾DH3DeH߾HA M( U EHL$T$D$D$HoHIT$Lf(HHIsL$Lf(!,|HOM@ U8E0HL$T$D$D$HιHIT$Lf(觹HIҿL$Lf(耹,|H访MX UPEHHL$T$D${D$H-HIXT$Lf(HI1L$Lf(߸,|H E`HD$D$H袸EhHߺD$žD$H H[]A\of.DAWAVAUATUSHL/L;o[HILIf H^LHH)HIhHžÄH3HEH@LMA|$8At$CHPH8ImI;mzI-DAt$CHH HI9mLMe H覽HHL)H贫ÄH肽EHD$eD$HDeHADHVDe  H DH5DeHDHEHD$׼D$H艶HH@LMA|$8L}I$ H@0H=@PLIM9ntNL$LL$1~N@ŃBHL$HcL|$@fHMcH<IID$HȋL$HD$LcуIL$Ld$8@D$HcD$HL$MHt$8L H1ELf(~ HYHA9Xf.Yzt AYXHALIL9uIDD$IL;t$J[]A\A]A^A_1EHf(~f.AHYLA9XrEf(df(HL1HYLD9Xu21Ef("AYHA9X1~N@ŃUSHHH(Ht$H|$Eе\$Ht$d$H|$E\$$$襵L$'EHC0$$f(T$fWc@fWS\$+f(Y[8YYYC K(kSH([]ATUISHHHPHdH%(HD$H1ATUfALL$D%HXZHD$HdH3%(u HP[]A\fDSHH0FdH%(HD$(1f.c#w9fM#Ht CHD$(dH3%(H0[DHL$L$D$f(ff(YY-6XXf(f.vD$ T$T$sd$Ud$f(f.vXC&fDSHH$XL$`L$ht@)$p)$)$)$)$)$)$)$dH%(H$81H$LD$8H|$PHѾHD$@H$@D$8D$<0HD$HHD8H= DHT$Ht$PH|$SH|$ OH|$ U(HH`Ht$HHVOH|$ HD$HxH7u#H$8dH3%(uuH[AHtNPЅHt$ ̵f.5HDPJHFHHD$HxH7uHɬH|$ Hf(f(Y\Qf.zl^H@[]A\f(Ð XXML$$D$ $$YT$^f(,L$\AL$l$$f(|fffff.Hf %-5= $ T$\$d$l$ t$(|$0L$8%-5= dH%(HD$x1T$@\$Hd$Pl$Xt$`|$hL$pwHcHD$xdH3%(uHĈ:f.AWAVAUATUSHLH!HT$0/H|$8dH%(H$1YڸYVf(\$f(T$T$\$f.kr\q<f.T$8f.&f(\$^a<T$,f(^F<D$(D$,,fT$\$f(D$A*AD$Dd$TDd$PD$\D$X\f*D$(\^ ;f(^;MHD$PAHPtHH9tD AuLHH9uHD$8HH9XH\$ H$H-FHD$HD$HH;XL-FL|$pDD;t$,H$HD$`fHDŽ$fHD$pfHD$xP5HxH7H$HD$xAH 胯ID$HwFH hFH|$HT`IELl$pH>FHLpHEHl$`HT`HDŽ$DBHD$H9XLt$LƄ$H F1HEHDŽ$DHDŽ$Ƅ$HDŽ$HDŽ$HDŽ$HDŽ$Hl$`HL`HD$`HD$hHEH]LIELl$p1HHmFH=L%>FH _FH$ID$HL`HD$`fHDŽ$fHD$pfHD$xAHDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$٧HD$`LHD$xP5DŽ$HDŽ$7Hpx HLDsRDLgAC LDsD$ DL5HHD$ t$H|$ D;t$(=D$9D$PL$(9L$,D$9D$XHD$0HXDD$9D$Tt^D$9D$\HD$0HXfAHtFPЅHt$O8HD$0HHD$0HXfPJH9D$TtڋD$9D$XnHD$0HXafDH\$8HD$HD$H9CH$dH3%( H[]A\A]A^A_f(\$\;7^T$,f(^HD$,L$(踔,fT$\$f(D$EA*AD$ Dd$Tf.Dd$PD$\D$X\f*D$(^ gMf(\^ R r6f.v(^f(%,kZD$TZD$\f.rEf.v7\^f(^Zݓ,kZD`(D$XDd$P;f.7r3^%f(褓D,EkZDd$PDd$TDd$XDd$\f.\ضf(^WD,EkZA(Dd$PDd$TDd$XDd$\HH$HDŽ$DHXH|$`H{HH$HHD$xP5HzH7uGH$HD$xA謩H|$`gMzHyFHUHl$`H\`H]AHOHtHt$O뒋BHJAWAVIAUATIUSLHIHD$HD$0HD$8pHD$`_WHD$h FHD$pYHD$xYZHDŽ$YHDŽ$YNHDŽ$dH%(H$1HDŽ$HEHfA.E8ffA.n(HL$@ LLLLD$8HL$0H$Ht$@LD$HiD8PH= D,H$t$8|$0H|$P4$HD$ H$|$L$L$HD$(H|$PSHIoLLL賘xHIަLL蓘HI辦Ht$(LqHI蜦Ht$ LOHIzD$L,HIW$L H|$PH$HH$H$aH$rb1\$0f(L$8\\f(YYYYT$hL$xd$`D$pE1HtmB\,`pLL$f($\YPL$X$L$Yf(fT;1YKf(YXMMII tJ,HxII u@T$YYYUQf.f(U,(LK @H$dH3 %(Hĸ[]A\A]A^A_fT$8/L$0\fT$hL$p\f.D$`P YD$@LYL$H1_f.H$tH$tZ/L$8f(fL$x\T$0\T$`\f.D$paDH$M/L$0f(fL$x\T$8\T$`\f.D$h@5@fH$H$H$c.ff(f(\T$0\L$8\T$hL$p\f.D$x ff(GH|$PHZHҙfH8HI-Ht$5HYHD$ YYY^dH%(HD$(1^L$^T$^$l$HT$(dH3%(uH8蚏f.AWAVAUATUSHpH8GD?ODwW Do@_(DgDg0oHo8HL$D$$T$(\$d$,$~DH蓏ÄHaAHߺzED$HH%D$HךHD$H跚H$H蘚 H߾ƠDHێH߾詠DH辎H߾ 茠H8H[]A\A]A^A_锎@ H߾^t$$HrHI=D$(L,|HAUATUSHHXD/DgXo\wxpDGhGPHL$T$\$d$ l$(t$0|$8DD$@D$HsDH舍ÄHVHDD$HH H߾$DH9H߾H HDD$@HfA(藘HHž|$8Hf(pHH蛞t$0Hf(I,|Hw Hel$(Hf(HH>d$ Hf(HH\$Hf(ŗ,|H HT$Hf(菗Hߺ 轝L$HXH[]A\A]f(aAUAT(USHIHH|H蒋HþÄH]HH@LMthA|$8t9At$CH胑HkHL0HHL[]A\A]LI$ H@0H=@PtL,fff.@SHH$XL$`L$ht@)$p)$)$)$)$)$)$)$dH%(H$81H$LD$8H|$PHѾHD$@H$@D$8D$<0HD$H3HD8H= DHT$Ht$PH|$蓟H|$ 菒H|$ 蕜"HH蠛Ht$HHV菛H|$ EHD$HxH7u#H$8dH3%(uuH[AHtNPЅHt$ f.5PGDPJH膈HHD$HxH7uH H|$ H|H亠AHOHtHt$r뿋PJH@H   % - 5=~  $fT$\$d$l$ t$(|$0 I %A -59 =9 dH%(HD$x1 L$8T$@\$Hd$Pl$Xt$`|$hwHcHD$xdH3%(uHĈ@H H$  % - 5 = dH%(H$1FL$T$\$d$ l$(t$0|$8   % - 5 =  L$@T$H\$Pd$Xl$`t$h|$pD$xwHcH$dH3%(uHĘfff.ATUISHH)HĀdH%(HD$x1HGPwPHD$ HGXD$t$$$HD$(HG`HD$0HGhHD$8HGpHD$@HGxHD$HHHD$PHHD$XHHD$`HHD$hHHD$pl$1{\D$ 6#f(\\$fTf. Ht$8HL$P1YXDHHuY\$ `HX$A$Y"UMEHT$xdH3%(u7H[]A\Ðfm  H1fffff.USHHhHT$(Ht$@$dH%(HD$X1HD$@HD$HHD$PHD$(1҉XD@HHuHD:H DL$PH|$0rT$H\$@L$T$\$|H|$0肖8HH荕$H@>HHkD$HHHHD$HHH%D$H׎,|HH|$0軔HL$XdH3 %(u,Hh[]f5`XH|$0HkHfUSHHXHT$Ht$0D$dH%(HD$H1HD$0HD$8HD$@HD$H/DL$ $X:~zH DH|$ ؊H|$ ޔEHHD$H蛍GHHƓ$HyH|$ oHL$HdH3 %(u:HX[]fD5XtT$$GH|$ HH艊AWAV1AUATIUSI׾NHH8oHgDg@o(DoDw08D$d$l$t$(|$ fD$*f(\T$X fTf. AAED$ Yf.D$(YXD$ADHT$DHD$T$f(D$YYYXQf.A AH߸"H8[]A\A]A^A_fDl$A._ H߸H81[]A\A]A^A_fD ` T$范T$f(Mfff.USHHXHt$(D$HD$(dH%(HD$H1L$(HDL$X :L$ H DH|$0e葇H|$0藑,HH袐D$HTcHHD$H1 iHH\D$HH|$0HL$HdH3 %(uBHX[]5hO|t\$(T$\$}H|$0H螏HfDAUATIUSHIվtHHHdH%(HD$81D$HD$ HD$(HD$0HD$HD$HT$Ht$ HD$u*1HL$8dH3 %(HH[]A\A]fHt$D$LHt1DXD DHHud$ \$@^%xHT$0L$(f(XAXEAED$ A,$= |fGƇƇƇG8G@GXG`GPGpGHGx (08@HPXGG GGƇG G(G0GhfDHHHH HHH HHH HHH HHH HfDAWAVAUATUSHHL$H$L$ 84AAGMEA ABkL$HHIML $HHD$f.A]LT$HAUIKICI`fD$8d$8l$<((l$ A\$AT$d$)fD$0H$l$ A(XD$0d$AD$4AXGAG(X~fD$(l$ E(XD$(d$ED$,XEE(A^AV~LT$fD$ AXD$ AH$H;\$D$$AXBABHH[]A\A]A^A_AWAVIAUATMUSMH(Ht$xHL$HD$`HL$pLl$hHt$HL$H$k|HcHH,yHHljHT$LKFLHLU=FLHH|$B=FH|$H$H.=FH(H[]A\A]A^A_8qAWAVIAUATMUSMH8L$H$H$HL$(HD$pHL$xLT$ L$Ht$H\$HL$H${HcHHLxHHljHT$(LJFLHLu;FHT$HH|$();FH|$0HT$H;FHHH[]A\A]A^A_offfff.fffff.f.@SHdH%(HD$1@HHtCHHxH7t㺠AHtIPЅHt$H{HufHD$dH3%(uH[f.PJHtfffff.SȿHdH%(HD$1@HH8tCHHxH7t㺠AHtIPЅHt$HˆH8ufHD$dH3%(uH[f.PJHNtfffff.SHH D$Ff%H(HDH(YTXOYH9XXuf*^^Yf\^Z3yHD$H?fHHH*yfD$fZT$Zx%\$L$H YYY[Xf(\Zf(W~FfɃH(HXHXOH9uYY(\X^f(f.AHtG~fDGPWބfffff.USHH(wdH%(HD$1HG(t?OHWHx( $u{HsHHD$\H+HtSH]8Ht9HHPH[ HuH}8HtDH_ HRHH]8HuH}mHaxHD$dH3%(uH([]q@AVAUATUISHH0dH%(HD$(1D$!usHD$HC(tWKHx(HS DkAt3wDHoAtUEHD$T$tCC@:UL@:vHHH@HH{8t7sCHkwHSuHD$(dH3%(H0[]A\A]A^fHtH H@0H=@PtHf.sH;D$u|$ tsH;D$T$uQ uLHT$ !TD1D$ kcDEmAsUEHD$T$ҸfCHC!ЄH|$($cpofffff.AWAVAUATUSHHdH%(H$1HG$Ht$D$,L$ HD$D$PrDcHD$XH$D{HD$h$HD$`HD$p$AH$ALt$`*IHD|$ H1H@LDL$HDŽ$LvIFrMHD$XT$P-rH|$HD$@HHDŽ$H$'T$ .T$@ICHD$D$DD$H@D$L@H$dH3%(H[]A\A]A^A_f|$ upqH;D$Xu|$P tqH;D$XT$PuM uH1H|$0fT$6Dd$0fD$4mA9qEHD$XT$Py)ҸfH!ЄH|$P!pD$PHD$XapHD$XfD$P HH$uHHt*v mCo1HdHufHHR@eH tHHtHsHHt$,BނxiHxH$v@AWAVAUATUSHHdH%(H$1HG$Ht$D$,L$ HD$D$PoDcHD$XH$D{HD$h4HD$`HD$p4AH$ALt$` IHD|$ H1H@LDL$HDŽ$LsI&oMHD$XT$P oH|$HD$@HHDŽ$H$T$ .T$@ICHD$D$DD$H@D$L@H$dH3%(H[]A\A]A^A_f|$ uptnH;D$Xu|$P tanH;D$XT$PuM uH1H|$0fT$6Dd$0fD$4jAnEHD$XT$Py)ҸfH!ЄH|$PmD$PHD$XamHD$XfD$P HH$uHHt*si#l1HdHrcHHR@eHpHHpHpH|Ht$,BuiHuHs@AWAVAUATIUSHHI]HD$pf|$pdH%(H$1LcH4$fLHD$xHDŽ$DŽ$fD$rDŽ$YhHC8HASHAH@ HHPHtEtHrH@t>*tӿ@LuIL1fL$DŽ$Ƅ$D$Pkf|$pHD$XL$Ã$=XFD$PHD$XPfHAD $D$` zHL$`IA}c6kA$HD$XT$PD! f|$pD$HDA9 vzHt$pIDnxjAHD$XT$PD!g $zIľY|rjA$HD$XT$P]D! H9,$RD$`D$@.j$HD$HyHL$`HA/biUHD$HT$@tD! D$`i$HD$h-yHž h{iUHD$hT$`]D!D$PPiA}HD$XD$$DAD$fx11H.sAhUAHD$XT$PhA}HD$XD$PDd$ IE(=[FMD$PHD$XP|$ tAD$`h|$ HL$`Ht$@HD$hD$@D$PDt E@:vH4$@:iHHH@HH{8sCHkHh$H$tR$Hx(H$D$`g$H$HL$`HD$h1H$dH3 %(!H[]A\A]A^A_LaH{0H@H@LI cLC8MMHSf.Mv MtwINHttHqH@t>*tؿ@HuILPfDXֱ>dXֱjHPp}PxrMG ML{8\kfD$P HD$XfDSfH;D$Xu|$P t@fH;D$X|$P E1ɉ\$0fT$4fL$6uH|$0HqbAeUEHD$XT$PyffDeD$PHD$XeH;D$XT$Pu g_Gu|$VD=FD$PHD$XPDHeH H@0H=@P(HtIľ9eAdE$$EHD$XDd$PdD$PHD$XD|$L$I~(DIT$j AD$Ƅ$E1D$$|dHD$XD$D$Pt/D$`Yd|$HL$`Ht$@HD$hD$@t$PE$f dfDcH9,$.H@:rHf+FH@H0;Hw{8sC@:fHdZDcD$PHD$X{cD$PHD$XXfXֱ`XֱfHPp}P o~HcH H@0H=@PTHGbDd$PHD$XD$xHx(IUD EeAEPbHD$X$D$PAE PXֱ`#XֱeHPp}PXn[bfDAD|$ y@T$Pg|$gK bD$P HD$Xa\$PHD$XJaD$P HD$XDwaD$` HD$hDMaD$P HD$XDaD$@ HD$HDyaD$P HD$XDKH|$P%`^]V^HHu\WHHR@eHdHHdHjpivH|$P{HiHffL$HHH$LHx(JHHlH|$ HHH$H$Hx(HH8H|$HH{H|$`*H|$PH|$P H|$PH|$@HHtfAWAVAUATUSH@H8dH%(HD$(1XL`1IL4^_HD$f$HADžt E<Im0^XHx01H@H@HhHH@ Hp@(]Aa_EDt$HD$t EHCXHC`LHChHǃHǃHǃCpCxHǃƃƃI]8HCP{HCIE8H@ LmIE8E HEZIU8H~AQHA HR HtoHBHtEtHpHt>*t׿LuHLXHD$(dH3%(H](EETH8[]A\A]A^A_fDLXI}0'H@~H@LIYIU8Htc~HHQADH[ Ht?HsHtEtHvHt>*t׿HuILP-DIV LMu8[H3H|$[$H]IHtLHk8Ht2HEHPHm HuH{8HtHo HPHHk8HuH{TH_LbHLTL_Hb4YHH_HHf.Df.@f.@f.@k_f.AWAVAUATUSHH6dH%(HD$1t_KH?HS*\+t5Cu]kIĉA$FVA[EIE<$[HD$dH3%(H[]A\A]A^A_fD$D$[K3kAH ISAx[EZj[PD[[A AI9uEuD[I9REIH!T1$:ScA$GU[NWf.@AWAVAUATUSHHHdH%(HD$x1D$ZDuHD$HHCDmAHT$ HD$(HD$0HjHDHl$@AL|$ IDl$D$1HH1LDL|$PLHD$X)SIZ MHD$L$xYMD$HD$Mu |$|$YH;D$u|$ tYH;D$T$uh uc1ҸfT$FLDt$@fD$DVAmYEHD$T$xXYD$HD$fDҸfH!Єu~1Ht$xdH34%(HĈ[]A\A]A^A_fL$AqX1DL=qFtPfD$HD$PHtH|$m DXHD$fD$ HuMXֱUtXֱ[HPp}P;dT@AWAVLwxAUATAUSHLIH8dH%(HD$(1SHHHCLk(HHHC HCHHtHX LH\RLI$SI$LHhPI$DxXƀ1RI$}`HL$D$D@\HD$MtfHL$(dH3 %(H8[]A\A]A^A_fDOLh(1HH@g@HL_UD$ VT$ HD$҉T$tfHtH|$[@HC`HChHCpHCxHǃHǃH RH HHcYL QHc\AVAUATUSH0H0dH%(HD$(1NH@H@HHXH@ HL+MeLQIU8H{A;HAHR HHBHtEtHpH{t>*tӿ{LuHL*t׿{HuILP DIV LMu8HCHt$`3gH8HD$HD${@HHCXHC`HC`Ht,HHHH|$HHH HiP|$t H<$NHVHYffGGÐfff.f.@<YYfYYZXX0^(YZ^^Z"fff.O׶fYG YNYYZXX^(YZ^^ZgÐfff.fGGÐ'_(^O\GXXYW^X_YXO(ÐfDfGG333?OO OOÐfDfGo:G333?GG GGÐ@fffff.Gf.YYfYYZXX^(YZ^^Z"fff.O'fYG YYYZXX^~(YZ^^ZgÐfGGÐ'_(^O\GXXYW^X_YXO(ÐfDfGG333?OO OOÐfDfGo:G333?GG GGÐ@fffff.Gf.H(fD$fL$t$d$((T$ l$D$YY\$YYX\ZZaL\$T$ H(\Z^ZHffD$fZL$ZD$ LZH@HfD$fT$.L$ zt^fZaZHDH8fD$(fL$ D$(D$D$,D$T$ L$$~D$T$ L$ST$ L$T$L$D$~D$R\$H8(X\^(ffffff.HhfD$XfT$HD$XD$8D$\fL$Pf\$@D$<t$H|$Ll$Pd$Tt$|$t$@|$D~D$8l$d$t$ |$)Rl$d$l$0d$4D$~D$0RL$YYXQ.d$ l$d$(l$,\$~D$(Qt$|$t$ |$$D$ ~D$ Q(L$ Y\$YX(Q.z!(Hh\X^\(f\$l\\$(ɐ7t9ZYG?^ NGZO(YO fDZG$@Ǧ?ZG?^ ^Z(O(YYW ZGYOG f?tGGfDXGGÐfD?t[g YGY_YYfXXXWZ_Y_(YYZXZ@g_ YYoYo 5TfXfZZYYWYWZXgYfgZZYXfXYg$Yg(XYZZWZYXZÐffGGG GGGGG G$G(Ðff.@ZDAVAUE1ATE1US1fAJ@(1ЅuJ@D9vIAă;DrIU1L-MZH M[]HPA\A]H MHHMA^HMH% ffffff.AWAVAUATUSH(HT$HMH<$Ht$L$HLLL8HLPHALLLM E1HLMLLHcɎ H:MHcHHڨHDHH|DFkL$HT$Ht$H<$HkDH([]A\A]A^A_8KH̰MLH/HMLHHML8HuoH|MHHHHLMHبHH~DHLL8HDAWAVAUATUSH8T$,HMD$H|$L$Ht$ T$H\$(LXL`LH\L HALLLM E1HLMLLHc HfMHcHHxH}DHxH}DFkT$,Ht$ \$(H|$H}}DT$L$D$H8[]A\A]A^A_kHMLXHOHЮML`H 3HMLHuoHMH\HHHlMHxHH|D HL`LH\DAWAVAUATUSHxH$HT$HMH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d L L L H L HALLLML\$hފ L\$hE1HLLLHcM迊 H0MHcH,H HM{D\$dH HL$PHt$HH|$@L$$H\$XH$H$H$HzDH$H\$8HzD@GkLL$0LD$(HL$ H$HT$Ht$H|$Hx[]A\A]A^A_HlML HHPML HH4ML HuoHMH HHkHMH HHzDGHL L H 1DAWAVAUATUSHxH$HT$HMH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(LLLHHL`HALLLML\$h^ L\$hE1HLLLHcM? HMHcH4HڸHxDHHzxD HkL$LL$0LD$(HL$ HdxDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDcHMLHGHȩMLH+HMLHHuoHMHHH{HdMHظHHZwDHLLHH)ffff.AWAVAUATUSHXH$HT$HMH|$Ht$HL$ HD$8$HLD$(LL$0L$D$DLhLpLHlL0HALLLML\$H L\$HE1HLLLHcM HTMHcHHڈH)vDHHvDHkL$LL$0LD$(HL$ HuDD$DHT$Ht$H|$$HD$8H$HX[]A\A]A^A_vfD;HMLhHHMLpHHMLHuoHlMHlHHH L\$hE1HLLLHcM HMHcH4H8HoDH8HoDJkL$LL$0LD$(HL$ HoDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_.fDCHġMLH'HML H HMLHuoHtMHHH{HDMH8HHznDHL LH)ffff.AWAVAUATUSHxH$HT$H֠MH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(L L Lh!H!L"HALLLML\$h} L\$hE1HLLLHcM} HMHcH4H!HlDH!HlDpKkL$LL$0LD$(HL$ HlDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDH4ML HHML H{HMLh!HuocHMH!HGH{3HMH!HHkDHL Lh!H!)ffff.AWAVAUATUSH(T$HOMH|$Ht$HL"L"L8#H#LP$HALLLM{ E1HLMLLHcm{ HޝMHcHHڨ#HjDH#HjD LkT$Ht$H|$HjDH([]A\A]A^A_H|ML"HH`ML"H"HDML8#HuoH,MH#HH{HMHب#HHiD!WHL"L8#H#DAWAVAUATUSH(HT$HMH<$Ht$L$HLX$L`$L%H\%L &HALLLMy E1HLMLLHcy H*MHcHHx%HhDHx%HhDPLkL$HT$Ht$H<$HhDH([]A\A]A^A_ ;HMLX$HHML`$HHML%HuoHlMH\%HHH{MHcHH HCIDH H IDGkHt$H|$HIDT$H([]A\A]A^A_[HzML H?HzML H"#HzMLx Huv HzMH HHH\zMH HHjHD!HHUHD L Lx H fffff.AWAVAUATUSH(HT$HyMH<$Ht$L$HLLL8HLPHALLLM#W E1HLMLLHc W HzyMHcHHڨHGDHHGDFkL$Ht$H<$HGDHT$H([]A\A]A^A_HyMLHwHxMLH[HxML8HuvCHxMHH'HHxMHبHHGDHHFD LL8HfDAWAVAUATUSH(HT$H.xMH<$Ht$L$HLLL8HLPHALLLMcU E1HLMLLHcIU HwMHcHHڨHFDHHEDFkL$HT$Ht$H<$HEDH([]A\A]A^A_HTwMLHH8wMLHHwML8HuoHwMHHgHSHvMHبHHBED/HLL8Hffff.AWAVAUATUSH(LsvMH|$D$t$L$MI'M(M(I(M)HAHLLMS E1LHMHLLcS HuMHcHJ)HBDH)HqBD0Mkt$L$D$H|$H]BDH([]A\A]A^A_D LuMH'MLpuML(MLTuML(MuoLDHL`$L%H\%ffff.AWAVAUATUSH(HT$H.qMH<$Ht$L$HLLLXHLpHALLLMcN E1HLMLLHcIN HpMHcHHH/>DHH >DIkL$Ht$H<$H>DHT$H([]A\A]A^A_ӽHTpMLH跽H8pMLH蛽HpMLXHuv能HpMHHgHSHoMHHHR=D/HH==D LLXHfDAWAVAUATUSH(HT$HnoMH<$Ht$L$HLLLXHLpHALLLML E1HLMLLHcL HnMHcHHHoMH*HHe D2HHP DH)Lx*H* fAWAVAUATUSHxH$HT$Hf>MH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(L)L)Lx*H*L+HALLLML\$h> L\$hE1HLLLHcM H=MHcH4H*H DH*H D`MkL$LL$0LD$(HL$ H DD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDCH0M$H|$Ht$HL$ HLD$(LL$0L$L$D$<LhHpLLlL0LHALLL\$@MLT$HB LT$HL\$@E1LHLHcML H/MHcHHڈHdCH\$H% H0 L 뚐AWAVAUATUSH(T$H MH<$Ht$HL H Lx L LHALLLM E1LHMLLHc H_ MHcH[H HdCH HACGkT$Ht$H<$H5CH([]A\A]A^A_D{XH ML H/_XH MH H!CXH MLx HCHD$D$E1f.EJ@1hЅuJ @;D$v HL$D$AD;="CrHD$HPH. M1诲H MHBH% MHH ML ]fDkWH MH HHCGWHH% H Lx DAWAVAUATUSH(T$H MH<$Ht$HL"L"L8#H#LP$LAHLLM E1LLMHLHc H MLcHHڨ#J#HC LkHt$H<$HCHCT$H([]A\A]A^A_D;VHML"HVHML"H!VHML8#HUHhMH#HUHCHD$E1E1EJ@(1lfЅuJ4@D9vHt$AAD;5CrHD$HPHM1QHMHBHMHHMH% L"L8#H#"ff.AWAVAUATUSH8HT$H^MH|$Ht$L$$HLHLXLLpHALLLM E1LHMLLHcx HMHcH]HH^CHH;CIkL$$HT$Ht$H|$H)CH8[]A\A]A^A_VvfDSH|MLHSH`MHH"CHD$(E1E1EJ@1tdЅuJ @D9vHL$(AAD;=CrHD$(HPHM1YHMHBLXHMHHMLvfHMH% RHtMHHHCRHHLXAWAVAUATUSH(H#MH|$Ht$D$T$HLHLPLLLHALLLLIQ E1ILLLLHc7 HMHcHHhHCHhHCPJkT$D$Ht$H|$HCH([]A\A]A^A_tt@QLHH5MHCE11E1fDEJ@1TbЅuJ @9vI͉AD;5CrIU1L-MBHMHPLPHMHHMH% PHtMHhHHCPHLPLLLKffff.AWAVAUATUSH8T$+H MH|$Ht$ D$L$,HLLLHL HALLLM< E1HLMLLHc" HMHcH7H HCH H\$T$+H|C0KkL$,Ht$ HtCH|$H8[]A\A]A^A_DCE11E1fEJ@1\`ЅuJ@9vIԉAD;-CrIT$1L%MIHMHBLLLHMHHHMukNH~MHHNHH% NHDMH HHbCNHH>ff.AWAVAUATUSH(HMH|$D$t$L$HH'L(L(H(L)HAHLLM E1LHMHLLc HwMHcHJ)HCH)HC0Mkt$L$D$H|$HCH([]A\A]A^A_DMH'HMHCE1E11fDAJ@D(1#^DuJ @D9vIAƃ;-~CrIW1L=LHLHPL(HLHHlLH% DLHDLJ)HHCLHHCL(L(H(EfDAWAVAUATUSH(T$HLH|$Ht$HLLLhHLHALLLM E1HLMLLHc HnLHcH2HHCHHCPFkT$Ht$H|$HCH([]A\A]A^A_@jCE11E1f.EJ@1<\ЅuJ@9vIԉAD;-CrIT$1L%L)HLHBLLLhHLHHHtLukJH^LHHJHH% JH$LHHHCJHHCff.AWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$Hx\$ T$DL$L$H([H]A\A]A^A_fDK:fCHD$D$E1fDDH@D$1JЅD$uH@;D$v HT$D$AD;54CrHD$HPH@L1H2LHPH7LHH$LH% DAWAVAUATUSHHHLHH`HH\t.H HCHH3HKHSH[]A\A]A^A_fDzCE1E11f.AJ@D 1IDuJ@D9vIAŃ;-&CrIV1L55L踓H)LHBH`HH LHH LH\#H% AWAVAUATUSHXH|$H=LHt$HT$ HL$(LD$0HLL$8L$L$D$H$<H HH0 D$HkLHtVHc\$D$L$L$LL$8LD$0HL$(HT$ HH Ht$H|$HX[]A\A]A^A_CHD$@E11Ll$HAJ@(1,HЅuJ @D9vHL$@Aă;CrHD$@Ll$HHPHL1HLHPHLHHqL@H% fD"Ct1Hl$HHD$Ll$@AJ@D 1kGDuJ @9vHL$Ã;-ƷCrHD$Ll$@Hl$HHPHL1IH=LHGHLHHLAWAVAUATUSHHHLHH0 H H, t.H HCHH3HKHSH[]A\A]A^A_fD CE1E11f.AJ@D 1[FDuJ@D9vIAŃ;-CrIV1L5LHHLHBH0 H HLHHLH, #H% AWAVAUATUSHxH$H<$H=WLHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H H LLL$8LD$0 LcHLLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J HT$Ht$H<$Hx[]A\A]A^A_3LL$8LD$0x@ C11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@1 D$HLHtVHc\$D$L$L$LL$8LD$0HL$(HT$ H؈Ht$H|$HX[]A\A]A^A_CHD$@E11Ll$HAJ@(1:ЅuJ @D9vHL$@Aă;6CrHD$@Ll$HHPH=L1辄H/LHPH4LHH!L@H% fDҪCt1Hl$HHD$Ll$@AJ@D 1:DuJ @9vHL$Ã;-vCrHD$Ll$@Hl$HHPHxL1H=jLHGHoLHH\LAWAVAUATUSHHH0LHHpHHlt.H0HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@D 1 9DuJ@D9vIAŃ;-fCrIV1L5uLHiLHBHpHH`LHHMLHl#H% AWAVAUATUSLHHXH|$H=LHt$HT$L$L$HD$L$HH@LLL$ Ҷ LcHLLL$ HtND$L$IL$HT$HJXHt$H|$HX[]A\A]A^A_f&LL$ @C11Ld$@HD$ HL$(LD$0LL$8ALl$HEJ@1L7ЅuJ @9vHL$ AD;%CrHD$ LL$8H\$(Hl$0Ld$@Ll$HHPHL1LL$(H=LLL$(HGHHLHHlLH% ffff.AWAVAUATUSHHH0LHH@HH<t.HHCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@D 1 6DuJ@D9vIAŃ;-fCrIV1L5uLHiLHBH@HH`LHHMLH<#H% AWAVIAUATAUSHIHHLHtZHHL HcHLHt%H(HD[LH]A\A]A^A_@+$fzCHD$D$E1fDDH@$14Ѕ$uH@;D$v HT$D$AD;5CrHD$HPH"L1~HLHPHLHHLH% AWAVAUATUSHHHLHHHH t.HHCHH3HKHSH[]A\A]A^A_fDZCE1E11f.AJ@D 13DuJ@D9vIAŃ;-CrIV1L5L}H LHBHHHLHHLH #H% AWAVAUATAUSHHIH(H=LHtZHHL褱 LcHLHt%JH(DLHH[]A\A]A^A_!fCHD$D$E1fDELD$J@$1\2Ѕ$LD$uJ@;D$v HT$D$AD;=CrHD$L$HPHL15|H=LL$HGHHLHHLH% fffff.AWAVAUATUSHHHPLHHHHt.HHCHH3HKHSH[]A\A]A^A_fDڡCE1E11f.AJ@D 1+1DuJ@D9vIAŃ;-CrIV1L5L{HLHBHHHLHHmLH#H% AWAVAUATAUSHHIH(H='LHtZHpHǰL$ LcHLHt%JH(DLHH[]A\A]A^A_KfCHD$D$E1fDELD$J@$1/Ѕ$LD$uJ@;D$v HT$D$AD;=,CrHD$L$HPH4L1yH=&LL$HGHpH LHH LH% fffff.AWAVAUATUSHHHLHHHXHt.HpHCHH3HKHSH[]A\A]A^A_fDZCE1E11f.AJ@D 1.DuJ@D9vIAŃ;-CrIV1L5LxH LHBHHXHLHHLH#H% AWAVIAUATAUSHIHHLHtZH@HL褬 HcHLHt%HؘHD[LH]A\A]A^A_@fCHD$D$E1fDDH@$1a-Ѕ$uH@;D$v HT$D$AD;5CrHD$HPHL1CwHLHPHLHHLH% AWAVAUATUSHHHpLHHH(H|t.H@HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@D 1K,DuJ@D9vIAŃ;-CrIV1L5L8vHLHBHH(HLHHLH|#H% AWAVIAUATIUSIAH(H=GLD$HHLHP: D$ HLHt2Hc\$ D$DLLHhH([]A\A]A^A_fDCHD$D$E1fDDH@(1*ЅuH @;D$v HL$D$AD;=RCrHD$HPH^L1tHPLHPHULHHBL#DH% fDCtHD$D$1H@D$ 1A*ЅD$ uH@;D$v HT$D$;-CrHD$HPHL1$tH=LHGHLHHLBfAWAVAUATUSHHH`LHHPHHLt.HHCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@D 1;)DuJ@D9vIAŃ;-CrIV1L5L(sHLHBHPHHLHH}LHL#H% AWAVAUATUSHxH$H<$H=7LHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$HH LLL$8LD$0զ LcHLLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J8HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@C11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@1'ЅuJ @9vHL$0AD;%vCrHD$0LD$8LL$@H\$HHl$PLd$XHPHiL1LD$hLL$8Ll$`pH=LLLD$hLL$8HGHH@LHH-LJH% fffff.AWAVAUATUSHHHLHH HHt.HHCHH3HKHSH[]A\A]A^A_fDzCE1E11f.AJ@D 1%DuJ@D9vIAŃ;-&CrIV1L55LoH)LHBH HH LHH LH#H% AWAVIAUATUSAAH8H=LHt$D$HH HL跣 $HLHt8Hc$Ht$DDLH H\$H8[]A\A]A^A_*CHD$(D$$1AJ@(1t$ЅuJ @;D$$v HL$(D$$;̔CrHD$(HPHL1YnHLHPHLHHLH% fDjCtHD$(D$$1AL$J@1#L$uJ@;D$$v HT$(D$$;- CrHD$(L$HPHL1mH=LL$HGH HLHHL2AWAVAUATUSHHHLHHHHt.H HCHH3HKHSH[]A\A]A^A_fDJCE1E11f.AJ@D 1"DuJ@D9vIAŃ;-CrIV1L5LlHLHBHHHLHHLH#H% AWAVAUATUSHxH$H<$H=LHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H"H LLL$8LD$05 LcHLLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J!HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@JC11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@1| ЅuJ @9vHL$0AD;%֐CrHD$0LD$8LL$@H\$HHl$PLd$XHPHL1LD$hLL$8Ll$`;jH=LLD$hLL$8HGH"HLHHLJH% fffff.AWAVAUATUSHHHPLHH Hh!H!t.H"HCHH3HKHSH[]A\A]A^A_fDڏCE1E11f.AJ@D 1+DuJ@D9vIAŃ;-CrIV1L5LiHLHBH Hh!HLHHmLH!#H% AWAVIAUATAUSHIHH'LHtZHP$H"L$ HcHLHt%Hب#HD[LH]A\A]A^A_@K fCHD$D$E1fDDH@$1Ѕ$uH@;D$v HT$D$AD;56CrHD$HPHBL1gH4LHPH9LHH&LH% AWAVAUATUSHHHLHH"H8#H#t.HP$HCHH3HKHSH[]A\A]A^A_fDzCE1E11f.AJ@D 1DuJ@D9vIAŃ;-&CrIV1L55LfH)LHBH"H8#H LHH LH##H% AWAVAUATAUSHHIH(H=ǽLHtZH &H`$LĚ LcHLHt%Jx%H(DLHH[]A\A]A^A_ f:CHD$D$E1fDELD$J@$1|Ѕ$LD$uJ@;D$v HT$D$AD;=̋CrHD$L$HPHԼL1UeH=ƼLL$HGH &HLHHLH% fffff.AWAVAUATUSHHHpLHH`$H%H\%t.H &HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@D 1KDuJ@D9vIAŃ;-CrIV1L5L8dHLHBH`$H%HLHHLH\%#H% AWAVAUATUSHxH$H<$H=GLHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H'H0&LLL$8LD$0 LcHúLLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$JH'HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@C11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@1,ЅuJ @9vHL$0AD;%CrHD$0LD$8LL$@H\$HHl$PLd$XHPHyL1LD$hLL$8Ll$`aH=\LLD$hLL$8HGH'HPLHH=LJH% fffff.AWAVAUATUSHHHLHH0&H&H,'t.H'HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@D 1DuJ@D9vIAŃ;-6CrIV1L5EL`H9LHBH0&H&H0LHHLH,'#H% AWAVIAUATAUSIH(HڷLD$ L$HH)H(Lǔ HcHLHt0H)L$D$ H([DL]A\A]A^A_fDBCHD$D$E1fDEJ@(1ЅuJ @;D$v HL$D$AD;=CrHD$HPHL1o_HLHPHLHHҶL%DH% fDCtHD$D$1AJ@(1ЅuJ@;D$v HT$D$;,CrHD$HPH8L1^H*LHPH/LHHLJAWAVAUATUSHHHLHH(H(H(t.H)HCHH3HKHSH[]A\A]A^A_fDzCE1E11f.AJ@D 1DuJ@D9vIAŃ;-&CrIV1L55L]H)LHBH(H(H LHH LH(#H% AWAVAUATUSHxH$H<$H=ǴLHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H+H)LLL$8LD$0e LcHCLLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J*HT$Ht$H<$Hx[]A\A]A^A_3LL$8LD$0x@zC11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@1ЅuJ @9vHL$0AD;%CrHD$0LD$8LL$@H\$HHl$PLd$XHPHL1LD$hLL$8Ll$`k[H=ܲLLD$hLL$8HGH+HвLHHLJH% fffff.AWAVAUATUSHHHLHH)Hx*H*t.H+HCHH3HKHSH[]A\A]A^A_fD CE1E11f.AJ@D 1[DuJ@D9vIAŃ;-CrIV1L5űLHZHLHBH)Hx*HLHHLH*#H% AWAVAUATUSHXH|$H=^LHt$HT$ HL$(LD$0HLL$8L$L$D$H$<H`-HHǠ+ D$HLHtVHc\$D$L$L$LL$8LD$0HL$(HT$ Hظ,Ht$H|$HX[]A\A]A^A_rCHD$@E11Ll$HAJ@(1ЅuJ @D9vHL$@Aă;CrHD$@Ll$HHPHL1XHLHPHLHHL@H% fD~Ct1Hl$HHD$Ll$@AJ@D 1 DuJ @9vHL$Ã;-V~CrHD$Ll$@Hl$HHPHXL1WH=JLHGHOLHH,fD$XHt$\$D$\MXEXL$X$EMN+fD$PD$TAXD$A $XL$PH|$\$$AD$A $O+fD$HHT$\$D$LAMAXEXL$H$AEAMJh+LD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h ߮ۮH Ht$HT$CHL$LD$HG B AAA@H|$@IfHD²HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDrHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ ;7GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIQfD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ kgGF BnL$IHL$HHML $HHD$DA_HT$HAIKICIfD$8H$d$8l$<((l$ Hd$KfD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h 88Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h /6+6Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h 33Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H 00GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\B 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@iAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@)AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAG4fD$hd$hl$l((l$ANAF$$fD$`HD$ \$ D$dXL$`XC$ CH辉fD$XHt$\$D$\MXEXL$X$EMNzfD$PD$TAXD$A $XL$PH|$\$$AD$A $O0fD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ &"EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAG脇fD$hd$hl$l((l$ANAF$$PfD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNʆfD$PD$TAXD$A $XL$PH|$\$$AD$A $O耆fD$HHT$\$D$LAMAXEXL$H$AEAMJ8LD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHD HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h  H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDB HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ wsGF BnL$IHL$HHML $HHD$DA_HT$HAIKICI!wfD$8H$d$8l$<((l$ Hd$vfD$0l$ M(D$4XL$0XEd$(MEANAFvfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMSvHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIQufD$8H$d$8l$<((l$ Hd$ufD$0l$ M(D$4XL$0XEd$(MEANAFtfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMtHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h kgHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h ˒ǒHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H ($GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_;ff.AWAVAUATUSHdH%(HD$x1$ d{`{H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-&{H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_~fffff.AWAVAUATUSHHD$ qdH%(HD$81qH$DH$GF BfDP1fIfo%qI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_pAAEAfolIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDiD$L$dH%(HD$81L$DfDfDfDWDxfEfo%'iMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(H$1$ e eH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-dI@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ F\dH%(HD$812\H$DH$GF BDpffIIfID(N<1D(fo%"\IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_PUSH(L$ (H,HHfHt$H|$\$HZL$f\$fW aX\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZL$f\$fW w`X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(D*)HUDYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(OUL\(D(=RUfDo5YUfDo-`UfDo gUH ($AT(<$W(5fU((lUAYfo-@U[fAfA[YfoYYNUXfAff UfAfrW(6UfAvX(frX(YY(YXUYX#UY()UY\(UYX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZD$HffWD] $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZdD$HffW\ $fXL$<YXT$@ZcfZc uMfHt$@H|$HZL$HffW \fYXD$@Z{fZ{HD$XdH3%(uHh[]DUS(Hh(D%*%HQDYL$YXXdH%(HD$X1EXXJfEfEHGHD(ZQHHT(D(=YQfDo5`QfDowQ(D((=QH AT( QAXDWfo5SQA(AY[fAfQ[YfoYY%VQfAffQfAfrW(AQfAvXA(frXX(YY(YX$QYX*QY(0QY\(CQYX=)QXBQYYXEQYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ D$ffWYL$ fXL$YZCXT$Z3ofHt$H|$L$ ZD$ffW YL$ fXL$YXT$ZsfZs fHt$H|$ZCL$ffW XYXD$ZCfZCgDIHF(%$OLH(&OLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.BL,HHEL9t).Lw5L.v(@[]A\f.DIHF(%MLH(MLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.BK,HHEL9t).~Kw5K.v(@[]A\f.ATUSH9V^D$ DIHF(-LLH(%LLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=dJ_(<,HHEL9t ^D$ .'JvJH[]A\ffffff.ATUSHT^D$ DIHF(%VKLH(XKLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=I_(,HHEL9t ^D$ .HvHH[]A\ffffff.AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZAX \$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZX \$ X\$,HLDCKL9uH []A\SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [臯j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.ATUSH dH%(HD$1LD&fAnEf`fafp?hI1HHHAofofdfftK$EHA)f.tD E8~DEHAfufAnf`fafpII9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?ߥffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.ATUSH dH%(HD$1LD&fAnEf`fafp?hI1HHHfAofofdfftK)$EHA)f.tD E8~DEHAfufAnf`fafpII9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?ߢffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.ATUSH0dH%(H$(11f$D@fEfo55HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h kgHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h ˟ǟHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H ($GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\Bw @.v(@[]A\f.tpATUL$SHHI)fB ,HHEL9t).w .v(@[]A\f.t|ATUSL$HHHID$ 0d_(< ,HHEL9t ^D$ .'vH[]A\fffff.t|ATUSL$HHHID$ 0ԑ_( ,HHEL9t ^D$ .vH[]A\fffff.AUATAUSIHHtlHFrH(HH(HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%Ԑd(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%ԏd(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%Ԏd(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%ԍd(,fA\HA9v0D.w-.vD(H[]A\A]DAAEAfočI1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDjD$L$dH%(HD$81L$DfDfDfDWDxfEfo%׊MILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AADL$T$AD$Efo%*fnfafpfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoȄI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ d`H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ zdH%(HD$81zH$DH$GF BfDP1fIfo%yI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfotsIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDrD$L$dH%(HD$81L$DfDfDfDWDxfEfo%pMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_Kff.AWAVAUATUSHdH%(H$1$ n nH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-kI@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_d@AWAVAUATUSHHD$ FedH%(HD$812eH$DH$GF BDpffIIfID(N<1D(fo%cIMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_USH(L$ (H,HHfHt$H|$\$HZL$f\$fW wh X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZ_L$f\$fW g X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(D0H\DYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(\L\(D(=\fDo5\fDo-\fDo \H ($AT(<$W(5\((\AYfo-\[fAfA[YfoYY\XfAff j\fAfrW(\fAvX(frX(YY(YX}\YX\Y(\Y\(\YX5\X\YYX\YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $Z)D$HffWd  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZD$HffW?d  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZgL$HffW c fYXD$@Z{fZ{HD$XdH3%(uHh[]uDUS(Hh(D%,HXDYL$YXXdH%(HD$X1EXXJfEfEHGHD(XHHT(D(=XfDo5XfDoX(D((=XH AT( XAXDWfo5XA(AY[fAfzX[YfoYY%XfAffuXfAfrW(XfAvXA(frXX(YY(YXXYXXY(XY\(XYX=XXXYYXXYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ hD$ffW` L$ fXL$YZCXT$Z3ofHt$H|$L$ ZD$ffW` L$ fXL$YXT$ZsfZs fHt$H|$ZL$ffW !` YXD$ZCfZCAADT$T$AD$Efo%ZUfnfafpfoffsf A@IHHL AfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoRIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%TRLH(VRLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.BP,HHEL9t).Ow5O.v(@[]A\f.DIHF(%$QLH(&QLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.BN,HHEL9t).Nw5N.v(@[]A\f.ATUSHiY ^D$ DIHF(-OLH(%OLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=M_(l,HHEL9t ^D$ .WMvMMH[]A\ffffff.ATUSHX ^D$ DIHF(%NLH(NLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=DL_(,HHEL9t ^D$ .LvKH[]A\ffffff.H(dH%(HD$1HfHHHDHH9fu$D$$D$D$D$D$D$D$D$D$ D$ D$ D$ D$ D$D$trtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(Hf"d@H(dH%(HD$1VfɍHH) $HHfHfo$fFH9)$uH4$HD$AIfAIAEAAEII EII(EIH8I0EDAfADIIDAADII DII(DIH8I0DtrtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(fH)$Ե@AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@AWAVAUATUSH(D$H|$dH%(H$1Ht$HT$ AHL$(LD$0L$`L$hL$pL$xH$H$fAIIHILLO((L(L(EIHHHHHHIA(AYAȱYJD(YDAYXQYAYVXYAYWXYAYXAHM9YAYX+MMMMLL$$$$$$D$D$DX$D$DX$D$DX$D$DX$D$DX$$DX$$X$$X$$X$X$  d$ll$hA#Ak((l$A_A$$|$`DD$\DL$XDT$((d$0$$|$ îfք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$afք$L$0D$ $$5fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$حfք$L$0D$ $$謭fք$D$D$DX$]DX$U$L$DD$@DL$tDD$hLfք$L$0$$D$ fք$$$X$[X$L$|$`t$@$άfք$L$0D$ $$袬fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ffffff.D@fo:HIfo :IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo9H1fo 9Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z葳X \$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z6Xa \$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XXD$tXHD$dH3%(uH(fH)$ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf|fff.SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [觟j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [7j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$pATUSH0dH%(H$(11f$D@fEfo5"HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$D)T$XfDof8:fD8fE8fDo$ffof8%fEf8fDo)t$hf8fofAofD8fA8fD8fAfEoffo$fD8-fD8)d$xfof8fA8ffof85fAfA8fDo$fDfAofD8%NfDfof8 Lf8fA8fDfAofD8 f8ffofAofD85fA8fEfD)$fAofD8fA8fDoL$fEofD8fDfAofEofD8f8fE8fDfof8-f8fDfof8qfDfof8%ofA8f8ffAofD8Af8)$fof857fA8ffAofDffofA8D)$fD85f8 f8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85f8fD8ffAofDof8sfE8)\$XfAofAfEofD8-?fD855f8fDfAofD8%,D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8fDol$fE8fEfEofD8%fEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h KGHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_ÐAWAVIAUATUSD$h [WHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_Ð1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%=HHHE11fo7BofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fD1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%HHHE11foBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fDAWAVAUATUSHD$h ˛ǛHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h +'Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H HDGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\Bw8.vD(fDH[]A\A]ffff.AUATIUS1HHAu0]D ܇L(,fAD]HA9v/D.w.vD(fDH[]A\A]ffff.tpATUL$SHHI)fBB-,HHEL9t).w .v(@[]A\f.tpATUL$SHHI)fB†,HHEL9t).w .v(@[]A\f.t|ATUSL$HHHID$ 0D_(,HHEL9t ^D$ .vH[]A\fffff.t|ATUSL$HHHID$ 0_(,HHEL9t ^D$ .wvmH[]A\fffff.AUATAUSIHHtlHFrH(uHH(wHT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%d(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(uHH(wHT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%d(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(uHH(wHT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%d(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(uHH(wHT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%d(,fA\HA9v0D.w-.vD(H[]A\A]DAAEAfoI1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDWDxfEfo%~MILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_{ff.AADL$T$AD$Efo% {fnf8-m|foffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoxI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ xxH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-fvH)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ ndH%(HD$81nH$DH$GF BfDP1fIfo%lI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfoTgIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD:fD$L$dH%(HD$81L$DfDfDfDWDxfEfo%gdMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_+ff.AWAVAUATUSHdH%(H$1$ 1b-bH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-_I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_D@AWAVAUATUSHHD$ fYdH%(HD$81RYH$DH$GF BDpffIIfID(N<1D(fo%bWIMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_萾USH(L$ (H,HHfHt$H|$\$HZL$f\$fW W\ X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZ?L$f\$fW [ X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(Dj$HPDYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(PL\(D(=PfDo5PfDo-PfDo PH ($AT(<$W(5P((PAYfo-P[fAfA[YfoYYPXfAff JPfAfrW(vPfAvX(frX(YY(YX]PYXcPY(iPY\(|PYX5bPX{PYYX~PYX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $Z D$HffWX  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZD$HffWX  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZGL$HffW W fYXD$@Z{fZ{HD$XdH3%(uHh[]UDUS(Hh(D%j HLDYL$YXXdH%(HD$X1EXXJfEfEHGHD(LHHT(D(=LfDo5LfDoL(D((=LH AT( LAXDWfo5LA(AY[fAfZL[YfoYY%LfAffULfAfrW(LfAvXA(frXX(YY(YXdLYXjLY(pLY\(LYX=iLXLYYXLYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ HD$ffWT L$ fXL$YZCXT$Z3ofHt$H|$L$ ZD$ffW`T L$ fXL$YXT$ZsfZs fHt$H|$ZL$ffW T YXD$ZCfZC觵A։DT$T$DD$fo%LHfo%>LD0HfoHH Hfofhf`fffof8foHfofhf`fff8fofof8f8f)AL9uIIHHHHHƃ-DVDAADDNNDAADGD^NDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ 補fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$Afք$L$0D$ $$fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$踛fք$L$0D$ $$茛fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h,fք$L$0$$D$ fք$$$X$[X$L$|$`t$@$讚fք$L$0D$ $$肚fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ߓffffff.D@fo(HIfo (IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo'H1fo 'Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fD@fo w'HIIJ HHf8GH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo |&H1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z葟X\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z6Xa\$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XXD$tXHD$dH3%(uH(fH)$ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf|fff.SH dH%(HD$1ffnAf8tbDXfoIIIIAofofdfft+$Ht D E8ELHfufAnf8IM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [诋ffffff.ftHNUSZIIAA9DGۃ9AESA@D D8ALAHE9uD9D)DBDݍKE)AAAffnLD.1f8fAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA@DSH dH%(HD$1ffnAf8tbDXfoIIIIfAofofdfft+)$Ht D E8ELHfufAnf8IM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [Offffff.ftHNUSZIIAA9DGۃ9AESA@D D8ALAHE9uD9D)DBDݍKE)AAAffnLD.1f8fAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<${ATUSH0dH%(H$(11f$D@fEfo5 HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h yyHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h kvgvHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h ssHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H (q$qGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AADL$T$AD$Efo%jZfnfafpfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoXI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ dX`XH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-UH)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ NdH%(HD$81NH$DH$GF BfDP1fIfo%GLI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfoFIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDFD$L$dH%(HD$81L$DfDfDfDWDxfEfo%CMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_苬ff.AWAVAUATUSHdH%(H$1$ B BH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-7?I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_褣@AWAVAUATUSHHD$ F9dH%(HD$8129H$DH$GF BDpffIIfID(N<1D(fo%6IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_USH(L$ (H,HHfHt$H|$\$HZ?L$f\$fW ; X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZ蟫L$f\$fW ; X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(DH0DYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(/L\(D(=/fDo5/fDo-0fDo 0H ($AT(<$W(50(( 0AYfo-/[fAfA[YfoYY/XfAff /fAfrW(/fAvX(frX(YY(YX/YX/Y(/Y\(/YX5/X/YYX/YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZiD$HffW7  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZD$HffW7  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZ觧L$HffW %7 fYXD$@Z{fZ{HD$XdH3%(uHh[]赘DUS(Hh(D% H,DYL$YXXdH%(HD$X1EXXJfEfEHGHD(+HHT(D(=+fDo5,fDo,(D((=",H AT( #,AXDWfo5+A(AY[fAf+[YfoYY%+fAff+fAfrW(+fAvXA(frXX(YY(YX+YX+Y(+Y\(+YX=+X+YYX+YX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ 訤D$ffW#4 L$ fXL$YZCXT$Z3ofHt$H|$L$ ZED$ffW3 L$ fXL$YXT$ZsfZs fHt$H|$ZL$ffW a3 YXD$ZCfZCAADT$T$AD$Efo%(fnfafpfoffsf A@IHHL AfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfo$&IIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%%LH(%LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.BB#-,HHEL9t).#w5 #.v(@[]A\f.DIHF(%d$LH(f$LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.B",HHEL9t).!w5!.v(@[]A\f.ATUSH, ^D$ DIHF(-#LH(%#LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.= _(謘,HHEL9t ^D$ . v H[]A\ffffff.ATUSHY+ ^D$ DIHF(%!LH(!LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=_(\,HHEL9t ^D$ .Gv=H[]A\ffffff.H(dH%(HD$1HfHHHDHH9fu$D$$D$D$D$D$D$D$D$D$ D$ D$ D$ D$ D$D$trtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(Hf"褊@H(dH%(HD$1VfɍHH) $HHfHfo$fFH9)$uH4$HD$AIfAIAEAAEII EII(EIH8I0EDAfADIIDAADII DII(DIH8I0DtrtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(fH)$@AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@AWAVAUATUSH(D$H|$dH%(H$1Ht$HT$ AHL$(LD$0L$`L$hL$pL$xH$H$fAIIHILLO((L(L(EIHHHHHHIA(AYAȱYJD(YDAYXQYAYVXYAYWXYAYXAHM9YAYX+MMMMLL$$$$$$D$D$DX$D$DX$D$DX$D$DX$D$DX$$DX$$X$$X$$X$X$  d$ll$hA#Ak((l$A_A$$|$`DD$\DL$XDT$((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$衁fք$L$0D$ $$ufք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$fք$L$0D$ $$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h茀fք$L$0$$D$ `fք$$$X$[X$L$|$`t$@$fք$L$0D$ $$fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$?yffffff.D@fo7HIfo 8IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo< H1fo > Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z&цXQ\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Zv!X\$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XXD$tXHD$dH3%(uH(fH)$Ouffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hftfff.SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [rj|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [wnj|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$@gAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$bATUSH0dH%(H$(11f$D@fEfo5*HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$:EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAG$NfD$hd$hl$l((l$ANAF$$MfD$`HD$ \$ D$dXL$`XC$ CHMfD$XHt$\$D$\MXEXL$X$EMNjMfD$PD$TAXD$A $XL$PH|$\$$AD$A $O MfD$HHT$\$D$LAMAXEXL$H$AEAMJLLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9TKJffo=E1E1Ƀfo5fo-fo% ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9TKJffo=DE1E1Ƀfo5@fo-Ffo%KABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ okGF BnL$IHL$HHML $HHD$DA_HT$HAIKICI=fD$8H$d$8l$<((l$ Hd$k=fD$0l$ M(D$4XL$0XEd$(MEANAF"=fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h mlHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h cj_jHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h ggHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H eeGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_軺ff.AADL$T$AD$Efo%JNfnf8-OfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoKI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ \LXLH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-IH)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ BdH%(HD$81BH$DH$GF BfDP1fIfo%'@I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfo-:I1fo:Iffofo foffofsfffsfoffofffffffsf8) HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [fAWAVAUATUSHHD":D$L$dH%(HD$81L$DfDfDfDGDxffo7MILLIfoN9fofoLfDofDof.fDoHHHHIfoPfEofDfofAsfDfoKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAffoUfDfEfDofEfEofoffsffDffDfAffAoL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofo6fAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD) $MM1)T$)d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_苠ff.AWAVAUATUSHdH%(HD$x1$ ,6(6H|$`H4$HT$GL$H$FH$ L$BL$ L$AAA@MfP1Hfo{3H)l$P)l$@)l$0)l$ )l$fo-V3fDfAo4fAofoffofsfffofsfffoffo$ffffofffofsffofffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$fodfo)\$foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$ fAo$fo)\$ foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$0fAodfo)\$0foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$@fo)\$@fAoHH9foffsffffffffsf8f8!fsf8!fsff8!fsf8!ff[XL$P)L$P4IIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`L$Pt$PHfnD$PH XHHt$PXH4$HL$PT$PLH fnD$PXNXNHT$PHT$L$PD|$PIfnD$PXJI L|$PMXI JL$P|$PH|$hfnD$PL|$PXIXII IL$PDT$PfnD$PAXHL|$PAXAHL$P|$PAfnD$PXHXHHD$H|$ fnD$LT$0H XH HD$PH|$L$PI HD$@XNH fnD$ NL$LT$XJXJfnD$0L$XIHD$XIfnD$@L$AXHAXAHA$LT$`HDLHD$fDIAQIA{EyHfHfIIljDAc)ƉAcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*L<$lje)lj@*AXGAGfAXAA|$Ad$fAljAljEA*L|$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;L$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_6fDAWAVAUATUSHHD$ -dH%(HD$81-H$DH$GF BVfDP1Ifok+I)d$ )d$)$$fo%Q+fo,fAofDoffofAsfDfAofsfffofEofofffDfofsfffAfAffofofffffffsf8f8!fsf8!fsf8!ffofsf8!ffofo,fof[X $foffsfff) $fofffffsf8f8!fsf8!fsf8!fsff8!ffofof[X\$foTHL9foffsf)\$fofffffffsf8f8!fsf8!fsf8!ffofsf8!ffof[XL$ )L$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA}AOdIDIEXHDyDiIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfod&IIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD%D$L$dH%(HD$81L$DfDfDfDWDxfEfo%w#MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_;ff.AWAVAUATUSHdH%(H$1$ !!H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_T@AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BDpffIIfID(N<1D(fo%rIMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_}AAEAfo-DIIHIfo.N f.HHIAHfoffofsfffsffofofffffffsf8OL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [I@AWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDGDxffoXMILLIfoN9fofoLfDofDof.DHHHHIPfEofDfofAsfDKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAfUfDfEfDofEfEofoffsffDffDfAfAL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofo fAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD $MM1T$d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_+wff.AWAVAUATUSHdH%(H$1$  H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo- HD$ LLHD$Ht$L(HD(ID(MD(fo fDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofg[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDof`[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofb[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[AXf8!fsf8!fDof[XYI9foffsfffDfAoffDffAfsf8f8!fsf8!fsf[Xf8!fsf8!f[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$fDIAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_Do@A։DT$T$DD$fo%fAnf8->foffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfodIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfAWAVAUATUSHdH%(H$1$ H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-HD$ LLHD$Ht$L(HD(ID(MD(fofDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfg[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf`[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfb[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf[XYfDoI9foffsfffDfAoffDffAfsf8f8!fsf8!fsff8!fsf8!ff[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$IAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_:H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_ AWAVAUATUSHXD$H4$dH%(HD$H1HT$L$DL${Xffo=MHLLH(H,(fDoжLfo5նDHHHHIHf8QfofafiffA8fffJfof8fA8fDofDafifDfffAfD8#fsf8#E[AX[XNf8fDofDafifDfffAfD8#fsf8#E[AX[XAJH9f8fDofDafifAffff8#fsf8#[X[X\$0IIIl$Id$ t$l$Xt$d$(Xl$\$,Xd$ T$0X\$$L$4XT$8XL$؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo H1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.AWAVAUATUSHdH%(H$1$ ɧŧH|$H $LD$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfDoHD$ LLHD$Ht$L(I(I(M(fo=foФIIIAOIHHHEYfDof8fE8fE8fA8fEofE8fD8fAsfE8EJfE8fEofD8fA8fE8fE8fDofDofE8fE8fEofDofDofE8fAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXEHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDIfEofD8fE8fE8fE8fE8fEofE8fAsfE8fE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDOI9fEofD8fE8fE8fE8fA8fsfE8fA8fD8!fsfD8!fsfEE[AXfD8!fsf8!fA[XHD$ Ht$(t$0H $l$@IHHd$PIII\$`T$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$(LT$HDLHD$IAIIECEyHfHfIIADAc)ljAcDADCcAljAADEA*AcA)EA*AXBABfAX A DEefAljAADEA*AeA)EA*XFFfXED$Ad$fAljAADEA*AAd$A)EA*XBBfX  EEAefAljAADEIA*L<$AAeA)EA*AXGAXAfAGE~fAAAfAAfEA*LD$ljA)L;L$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_ @AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-*HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%DIIHAGHHHHAYfof8f8f8f8fDof8f8fofsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_ffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%DIIHAGHHHHAYfof8f8f8f8fDof8f8foafsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_ffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$fPL$H$H$1L$H)$H)$)$)d$p)d$`)d$P)d$@)d$0)d$ )d$fo-Qfo%)foQfAo fAo4fof8f8f8f8fof8f8fsf8fof8fof8f8f8f8fof8f8fofof8fof8#fsf8#ff8#fsf8#[X|$f[X\$ )|$fo)\$ fo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$0f[X\$@)|$0fo)\$@fAofof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$Pf[X\$`)|$Pfo)\$`fAo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$pf[fAo4X$HH9)|$pfo)$fof8f8f8f8f8f8fof8#fsf8#ff8#fsf8#[X$f[X$)$)$KHLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$fL$t$ H fDnL$ T$ fDnl$ D$ H fDnT$ |$ DXfDnd$ H$DXDT$ DXH fDnD$ D|$ DXfDn\$ D\$ I fn|$ T$ DXfnT$ l$ DXfnt$ \$ XfnL$ Ht$ XHt$DXL$ I XH XH Ht$DXl$HD$LDXT$H|$H DXd$LT$DXD$HD$DX\$L\$II X|$H$L\$IH$XT$I Hl$Xt$L\$XL$LT$0D$L|$@H fn\$|$H fnl$HT$PDT$Ht$`DXDXfnl$D|$fnd$L\$pI T$DXI DXfnd$t$fn\$D\$H DXDXfn\$H$H$X\$H fn\$l$Xfn\$Dd$I Xfn\$H|$l$LT$DXT$L|$II d$LL|$XDXD$H Ht$\$HT$X|$H\$HAXH XT$H\$Xt$Ld$XL$HD$AXD(DXL$H$DYAXhA(EXDD(HD$DYAX((`A(YH$XX (QYYXX9AAH$4L$L$HDH$H$L$LHD$DIASIAyE{HfHfIIljDAa)ƉAaD{‰kAlj@Alj@EA*ljljk)lj*AXBABfAX A }mfAlj@Alj@EA*L|$ljm)lj*AXGAGfAXAA|$Al$fAlj@Alj@EA*L$ljAl$)lj*AXGAGfAXAA}f@AljAmAlj@EIA*ljljAm)lj*XAX  fAE~AnfljAljAn*ljƉA)L;L$*AX@A@AXA H$dH3%(uH[]A\A]A^A_DIHF(%ăLH(ƃLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.Br],HHEL9t).Nw5P.v(@[]A\f.DIHF(%LH(LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.BB-,HHEL9t).w5 .v(@[]A\f.ATUSHي ^D$ DIHF(-FLH(%HLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=_(,HHEL9t ^D$ .~v~H[]A\ffffff.ATUSH ^D$ DIHF(%LH(LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=}_(,HHEL9t ^D$ .w}vm}H[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1EfAHL$@IHT$HD$IHt$H<$)|$0O D()|$ D(LD(D(D(D(D(fo-~fo%fo5IHHCHHHHA_fof8f8f8f8fDof8f8foZ|fsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$ f[XD$0)T$ )D$0D$L$LT$M$f$Dt$pD$D$D$D$D$$$LT$XDT$pD$DX$DXX$X$$X$$DXT$tD$DX$$LT$LT$@X$X$HD$PX$XDXT$xXX$X$X$X$DXT$|X$XD(A~X$DYX$XDXDX$X$EX(X$X$YDX$X$EDX$hX$(X$YX$DX$X$DXXX$ X$DDX$u](HD$XYYPXAX HD$`HAsAfKDvD(ILD(HD$h((M(($fDffADDffADDf|$ xfADDIAAIAoAQAgffAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*AۉH\$PDD)AXFAXAFfAf**DDЉ|$MD)XCX Cf f*\$ D*A\$0Ht$`)AXEAXMAEfAMf**HL$XXXIfIL$LfɉA‰@‰A*A@A)EA*XFXL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$Ldf*Y\,HfA*Y\,D$ gfA*Y\,)fA*AYA\,fH$dH3%(uH([]A\A]A^A_fDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1fH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ fo-tfo%\uforfo5\u@fAo fAo<fof8f8f8f8fDof8f8fsfD8fofA8fof8ftffof8fDof8fDofDof8f8fDofDofD8fAofDofD8fAofE8#fsf8#fsf8#fDofDofDfA8#E[DXD$ fDof[X\$0D)D$ )\$0fofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$@f[X\$PD)D$@)\$Pfofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$`f[X\$pD)D$`)\$pfAofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DX$f[fAo<X$HH9D)$)$foftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[X$f[X$)$)$H\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$fL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH fDnL$PT$PH fDnl$PH$L$DL$ DXDXfDn\$0DL$PDL$@DXfDnT$Pt$PH fDnd$P|$PH fDnD$PDL$PDXfn|$PDT$PDXfnT$PD\$PDXfnt$P\$PXfnL$PHD$PXHD$ DXL$PHT$PXDXl$PH XHD$ DXT$ Ht$ DXd$ H|$ HD$0Ht$@DXD$ H$H H HD$ DX\$ Ht$ LH X|$ LT$`Ht$ LL\$pH XT$ Ht$ HH$H Xt$ Ht$ XL$ T$ H fn\$ l$ H fnl$ Dd$ I DXDXfnl$ Dl$ fnd$ Dt$ I DXI DXfnd$ DT$ fn\$ D\$ I DXI DXfn\$ \$ H Xfn\$ H$L$XӉD$ fn\$ DL$ I Xfn\$ Hl$ l$ Ld$ DXT$ Ll$ d$ Lt$ XDXD$ LT$ \$ L\$ AXX|$ H\$ HH XT$ H$H\$ AXXt$ LL$ XL$ HT$ hDXL$ D(AXA(DYEXDD(H$DY`A(AX((H$YX (XH$YYPXX8H$H$pfHDjMD(LD(H$((L$(L$(HL$03DfDffDffADDf|$ fADDIABIEhARA`ffADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$p)E*ωA*)މAXAXGAfAGf*ΉH$*H$XXGfGDDfD)|$ *D*ʉΉAt$`AXAXFAfAFf*ɉ|$PH$)‰*AXKKfX\$@f@‰A*A@A)EA*XAX L;$A  HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTf@*Y\,7fA*Y\,D$ UfA*Y\,f*AYA\,fH$dH3%(uH[]A\A]A^A_fDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hfHLt$HLHfo-hHD$@LLHD$8Lt$8H)|$ D(H)|$D(LD(MD(D(D(D(fo%;ifo5CiIIHAGHHHHAYfof8f8f8f8fDof8f8fo ffsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$f[XD$ )T$)D$ Dt$PHD$@Lt$HD$Dl$`IIH$fHD$II$D$D$$Dd$pDT$P|$`DX$XXDL$p$DXDXT$T$X|$d$X$$D$X$XXXDXXDXL$tX$X$X$X$DX$X$DXT$XX|$hHD$0X$DXL$xX$X$DXT$\X|$lX$DXL$|X$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$pH|$0HDLHD$@IARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_DIfHFfo-o`LHfo%P`LD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ Cfք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$fք$L$0D$ $$赺fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$Xfք$L$0D$ $$,fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h̹fք$L$0$$D$ 蠹fք$$$X$[X$L$|$`t$@$Nfք$L$0D$ $$"fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ffffff.D@fowGHIfo xGIJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo|FH1fo ~FHf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZfX\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z趾aX\$ X\$,HLDCKL9uH []A\ATUS((H@XH-BXY(dH%(HD$81XXX5 Y|$(DQHGD(EELHLL(f(H X\(^f: Y\f:AXf[)$$H4$HL$LcH B$BD@`$DHcH `@$D@`$D@`L9YIJHHσu!HD$8dH3%(H@[]A\@\$ HZL$L$I\$ f(L$T$H\D$$Z詼TX$T$X,H DEML9uOATUS((HPXH-@XY(dH%(HD$H1XXX5 Y|$(DAHGD(5CLHHt(f(H X\(^f: Y\f:AXf[D$ HcL$ $DHcL$$`@$DHcL$(`@$DHcL$,`@$D@`H9]IHHHσuHD$HdH3%(HP[]A\\$0HZL$L$I\$0f.(L$T$H\D$\$ Z蘺CXÿ\$ T$X,H DEML9uIH(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$X XD$tXHD$dH3%(uH(fH)$offffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hfܩfff.H(dH%(HD$1DffAnf8fot3HHHHH@ofoHfdH9f8fouffAn$f8f8<$fofsf8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DH(dH%(HD$1DffAnf8fot3HHHHH@fofoHfdH9f8fouffAn)$f8f8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$耙AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVAUATUSHdH%(HD$x11fD$^cD@ffo5k(HIIfoN oHHo@L9fofoffsfffsffofDofffDffAfffufLffsfl$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu HĈ[]A\A]A^A_E1E1HAWAVAUATUSHdH%(HD$x11fD$^kD@ffo5$HIIfoN HH@L9fofoffsfffsffofDofffDffAfffufo5$fsLf8d$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu'HĈ[]A\A]A^A_f.E1E1萍AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5 !IfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufHfHfsff:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)l$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu&HĈ[]A\A]A^A_fE1E1AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5iIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufofsHHf8f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)d$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu%HĈ[]A\A]A^A_E1E1PH(dH%(HD$1DffAnDf8DHI1foIIIIM9Afofdfofvf8r$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)fnIM9f8_A8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12offffff.ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHAofofdfftC$EHA)f.tD E8~DEHAfufAnf8II9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.USH(dH%(HD$1ffnˉf8DXfoI1IIIfAo fo)$$fd$fofvf8L$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)fnf8IM9<8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11{ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHfAofofdfftC)$EHA)f.tD E8~DEHAfufAnf8II9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?xtFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.US8LO HF L9AH9A HB L9AH9D A Afo5 E1E1fo- AfDo Afo= ABoBoTfofA8fof8FoLf8f8fBoffofAofA8f8fDof8fD8fD`ffAfDofhfD`fofhfDof`fEofDhfDofAofEffDofAofDofAfD8f8fD`f8fAfDofAf8fEfhfD8ffAofDffD8fAf8f8fEffAffofhf`BdB I A9DHHHHD9tUHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@US8LO HF L9AH9A HB L9AH9D A Afo5 E1E1fo- AfDo Afo=! ABoBoTfofA8fof8FoLf8f8fBoffofAofA8f8fDof8fD8fD`ffAfDofhfD`fofhfDof`fEofDhfDofAofEffDofAofDofAfD8f8fD`f8fAfDofAf8fEfhfD8ffAofDffD8fAf8f8fEffAffofhf`BdB I A9DHHHHD9tUHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@ AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ vrEGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGttfD$hd$hl$l((l$ANAF$$@tfD$`HD$ \$ D$dXL$`XC$ CHsfD$XHt$\$D$\MXEXL$X$EMNsfD$PD$TAXD$A $XL$PH|$\$$AD$A $OpsfD$HHT$\$D$LAMAXEXL$H$AEAMJ(sLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGqfD$hd$hl$l((l$ANAF$$qfD$`HD$ \$ D$dXL$`XC$ CHNqfD$XHt$\$D$\MXEXL$X$EMN qfD$PD$TAXD$A $XL$PH|$\$$AD$A $OpfD$HHT$\$D$LAMAXEXL$H$AEAMJxpLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9TKJffo=E1E1Ƀfo5fo-fo%ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9TKJffo=E1E1Ƀfo5fo-fo%ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h KGH Ht$HT$CHL$LD$HG B AAA@H|$@IfHDbHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIAafD$8H$d$8l$<((l$ Hd$ afD$0l$ M(D$4XL$0XEd$(MEANAF`fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMs`HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ '#GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIq_fD$8H$d$8l$<((l$ Hd$;_fD$0l$ M(D$4XL$0XEd$(MEANAF^fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAM^HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H XTGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BAo`fE8D)T$XfEofD8 fD8AopfE8fDfof8-AoYf8D)D$hfEfDofof8%AoQfA8fEffof8fA8AoAfDofof8{AoIf8fAffofof8 Vffof8fA8fDoT$xf8CfDo$ffofAoffAof8fA8fDo$fD8ffAofDo$f8 fAfEo)L$xfAofD8fA8fAfEofEofD8fD8fEfEofD8-fD8fEofEofD8wfE8fEfEofD8 MfD8D)$fEfEofDof856fE8fDod$fDfEfofDof8 f8%D)$fD8ffof8f8fDoL$XfA8)$fofof8 fAfA8ffAofD8 ffAofD8%xfA8f8fEfDod$hffEofAofD85YfA8fD8fDfAof8*fDfof8-f8fDofof8fA8ffAofAfDod$xfA8)l$fAof8ffAofEof8-fD8fD8fD8fDfAofD8-fA8fEfAfDof85nD)T$XfDof8jfD8fE8fDo$ffof8%3fEf8fDo)t$hf8fofAofD8fA8fD8fAfEoffo$fD8-fD8)d$xfof8fA8ffof85fAfA8fDo$fDfAofD8%~fDfof8 |f8fA8fDfAofD8 Mf8ffofAofD85AfA8fEfD)$fAofD8fA8fDoL$fEofD8fDfAofEofD8f8fE8fDfof8-f8fDfof8fDfof8%fA8f8ffAofD8qf8)$fof85gfA8ffAofDffofA8D)$fD852f8 f8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85f8fD8ffAofDof8fE8)\$XfAofAfEofD8-ofD85ef8fDfAofD8%\D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8fDol$fE8fEfEofD8%fEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAUATAUSH0-ALAAL9LAE\$L9AE0A&ET$AADw:ffEnIfDnfo=1H1fD8fDo=-fD8fAofAofAofAofA`fAhfA`fAh)l$)d$)t$)T$)l$)d$)t$)T$)l$)d$()t$8)T$HIHEoqEoiEoEoD)t$xD)$EoqEoiD)$fEoD)$fD8%ifEofD8jfD8Eo fE8fEfEoEo0fD8(fD8Eo@fED)d$fEofEofD8 AoPfEfDof85Ao`fE8D)T$XfEofD8fD8AopfE8fDfof8-AoYf8D)D$hfEfDofof8%{AoQfA8fEffof8YfA8AoAfDofof8+AoIf8fAffofof8 ffof8fA8fDoT$xf8fDo$ffofAoffAof8fA8fDo$fD8ffAofDo$f8 fAfEo)L$xfAofD8fA8fAfEofEofD8OfD8UfEfEofD8-1fD8fEofEofD8'fE8fEfEofD8 fD8D)$fEfEofDof85fE8fDod$fDfEfofDof8f8%D)$fD8ffof8f8fDoL$XfA8)$fofof8 ifAfA8ffAofD8 KffAofD8%(fA8f8fEfDod$hffEofAofD85 fA8fD8fDfAof8ڵfDfof8-ȵf8fDofof8fA8ffAofAfDod$xfA8)l$fAof8ffAofEof8-jfD8pfD8VfD8fDfAofD8-LfA8fEfAfDof85D)T$XfDof8fD8fE8fDo$ffof8%fEf8fDo)t$hf8ƴfofAofD8ôfA8fD8fAfEoffo$fD8-fD8)d$xfof8~fA8ffof85gfAfA8fDo$fDfAofD8%.fDfof8 ,f8fA8fDfAofD8 f8ffofAofD85fA8fEfD)$fAofD8ʳfA8fDoL$fEofD8fDfAofEofD8f8fE8fDfof8-hf8fDfof8QfDfof8%OfA8f8ffAofD8!f8)$fof85fA8ffAofDffofA8D)$fD85f8 ɲf8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85yf8`fD8ffAofDof8SfE8)\$XfAofAfEofD8-fD85f8fDfAofD8% D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8ȱfDol$fE8fEfEofD8%fEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h Ht$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_ÐAWAVIAUATUSD$h Ht$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_Ð1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%HHHE11foBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fD1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%͕HHHE11foǕBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fDAWAVAUATUSHD$h +'Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h KGHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_[ff.AADL$T$AD$Efo%qfnf8-MsfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfooI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ ppH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-FmH)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ 6gdH%(HD$81"gH$DH$GF BfDP1fIfo%cI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfo-4^I1fo&^Iffofo foffofsfffsfoffofffffffsf8) HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [fAWAVAUATUSHHD^D$L$dH%(HD$81L$DfDfDfDGDxffoX[MILLIfoN9fofoLfDofDof.fDoHHHHIfoPfEofDfofAsfDfoKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAffoUfDfEfDofEfEofoffsffDffDfAffAoL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofoYfAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD) $MM1)T$)d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_+ff.AWAVAUATUSHdH%(HD$x1$ ZZH|$`H4$HT$GL$H$FH$ L$BL$ L$AAA@MfP1HfoWH)l$P)l$@)l$0)l$ )l$fo-VfDfAo4fAofoffofsfffofsfffoffo$ffffofffofsffofffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$fodfo)\$foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$ fAo$fo)\$ foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$0fAodfo)\$0foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$@fo)\$@fAoHH9foffsffffffffsf8f8!fsf8!fsff8!fsf8!ff[XL$P)L$P4IIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`L$Pt$PHfnD$PH XHHt$PXH4$HL$PT$PLH fnD$PXNXNHT$PHT$L$PD|$PIfnD$PXJI L|$PMXI JL$P|$PH|$hfnD$PL|$PXIXII IL$PDT$PfnD$PAXHL|$PAXAHL$P|$PAfnD$PXHXHHD$H|$ fnD$LT$0H XH HD$PH|$L$PI HD$@XNH fnD$ NL$LT$XJXJfnD$0L$XIHD$XIfnD$@L$AXHAXAHA$LT$`HDLHD$fDIAQIA{EyHfHfIIljDAc)ƉAcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*L<$lje)lj@*AXGAGfAXAA|$Ad$fAljAljEA*L|$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;L$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_ֻfDAWAVAUATUSHHD$ vRdH%(HD$81bRH$DH$GF BVfDP1Ifo OI)d$ )d$)$$fo%Nfo,fAofDoffofAsfDfAofsfffofEofofffDfofsfffAfAffofofffffffsf8f8!fsf8!fsf8!ffofsf8!ffofo,fof[X $foffsfff) $fofffffsf8f8!fsf8!fsf8!fsff8!ffofof[X\$foTHL9foffsf)\$fofffffffsf8f8!fsf8!fsf8!ffofsf8!ffof[XL$ )L$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA}AOdIDIEXHDyDiIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_`AAEAfoJIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDjJD$L$dH%(HD$81L$DfDfDfDWDxfEfo%GMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_ۯff.AWAVAUATUSHdH%(H$1$ aF]FH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-BI@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ =dH%(HD$81=H$DH$GF BDpffIIfID(N<1D(fo%:IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_@AAEAfo-4IIHIfo4N f.HHIAHfoffofsfffsffofofffffffsf8OL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [I@AWAVAUATUSHHDJ5D$L$dH%(HD$81L$DfDfDfDGDxffo1MILLIfoN9fofoLfDofDof.DHHHHIPfEofDfofAsfDKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAfUfDfEfDofEfEofoffsffDffDfAfAL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofo\0fAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD $MM1T$d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_˚ff.AWAVAUATUSHdH%(H$1$ Q1M1H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo--HD$ LLHD$Ht$L(HD(ID(MD(fov-fDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofg[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDof`[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofb[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[AXf8!fsf8!fDof[XYI9foffsfffDfAoffDffAfsf8f8!fsf8!fsf[Xf8!fsf8!f[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$fDIAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@A։DT$T$DD$fo%|&fAnf8-'foffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfo$IIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfAWAVAUATUSHdH%(H$1$ A%=%H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-!HD$ LLHD$Ht$L(HD(ID(MD(fof!fDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfg[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf`[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfb[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf[XYfDoI9foffsfffDfAoffDffAfsf8f8!fsf8!fsff8!fsf8!ff[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$IAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_܆fff.AWAVAUATUSHHD$ vdH%(HD$81bH$DH$GF BDpfIIMIfoI(N<1(foLHHIDAIIxfEofDfDofAsfDARfAsfDfEofEoffofEfEfEoffsffDfAfEfDfAofEoffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAoED$fsf8!fffAofD[fAofsfXfAoffAfAffEfAfsf8fEof8!fsf8!fsff8!fsf8!fASf[XfAofoL9ffsfffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAofsf8!ff[X4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A|AOd-I@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_訁AWAVAUATUSHxD$ FBH$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ LMD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_|AWAVAUATUSHD$ L$dH%(H\$x1AH$EGF BfALYLMIHL)|$PL|0L)|$@)|$0)|$ )|$)<$fDI H H I I fAo[foSfofAoCfsfoKfofsf:Ufofsfof:Uf:Ufsfof:UfoffffofffoMffofofoUfofofsf:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[X$$f[fAoUXL$fofs)$$)L$fAoMfof:Ufsf:Ufffoffffofoff8#fofsf8#ff8#fsf8#[Xd$ f[XL$0)d$ )L$0fAod$fAoL$M9fofofsf:Ufsfof:Ufffofffofff8#fsf8#ff8#fsf8#[XT$@f[XD$P)T$@)D$PIL<$Hl$(ILl$ H\$LMMMLLt$L\$D<$I fLd$0fn,$Hl$ D4$Hl$@I fn$H\$hXD,$H\$PI L\$L\$8Xfn4$D$$I fn$,$fn$$L\$0X$L\$HXfn $L<$XX,$L4$L\$@X$L\$XL,$IX4$I L$$XLt$Hl$ X$L,$IH\$hI X$$L,$L|$0X $Ld$@$H fn<$D4$I Xfn<$,$H Xfn<$D<$Xfn<$D$$Xfn<$D$I Xfn<$L4$MX$H,$I X4$XL4$MI X$L4$X$$L$X $H$_X,$(YX/(VYYXX6JD$ASAN$IIAXEpHDiiIffIAEHDEE)EEqA\-AiEEDADAED)EErA**AjEEDADAED)EDpXOXEDOffA*Dh*DAADEA)L9XNEXNff*A*XJXJHD$xdH3%(uHĈ[]A\A]A^A_lufff.AWAVAUATUSHdH%(H$1$P  H<$Ht$HT$GL$ L$(FH$0 H$8BL$@ L$HAAA@fHHL$(LHHHHD$ LMHD$HL$L(M(((D(D(D(D(D(DE1I I I H H AAH fEoH fDofsfAsAOfE:UAWfEofDofofE:UfDofsfsf:UfD:UfAofAoffAfEoEnfDfAfAVfAfEofDofsfA:UfAsfDofE:UfDofEfDfEfE8#fAsfDfE8#ffAfEfD8#fsf8#E[EXDofA[DXWfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[EXDjfA[DXRfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[EXDhfA[XPfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[AXDnfA[XVfEoI9fDofAsfsfA:UfDofE:UfDofDffAff8#fEfsfEf8#fA8#fAsfE8#f[XfDE[AXDd$0fHD$ D\$@DT$PIIHDL$`HII$DD$p$$$$DT$0HL$(|$@DXXl$`XDL$Pt$pDXDXT$4$X|$D$$XD$X$XXDXXXl$dDXL$TXt$tX$X$X$DX$X$DXT$8X|$HH$Xl$hDXL$XX$X$DXT$<X|$LXl$lDXL$\X$X$X$D(x(DYXt$xYX$DX$X$EXDXXt$|X$DHD$DX$h(DHD$YX(YXYX0AXQ!AAH$PHLHD$DIErIABAyIAqffHEHIDDEsAsD)A׉EDD*H<$D)Ds*sADXGXGfDfDDAD)Du*H|$*uDXGXGfAfDDAD)Et$*H|$*At$EXGXGffDIDE}*ljD)Eu*ΉAAAAXA)X Af* f*AXHL;L$AXAHA!H$dH3%(uH[]A\A]A^A__lffffff.AWAVAUATUSHH$P H|$Ht$HT$H$H$XGH$hFL$pH$ H$`BL$x AH$AdH%(H$1$A@fL$HH$L$HH$MH$LI)$HLL)$HLH)$)$)t$p)t$`)t$P)t$@)t$0)t$ @I H H H I H I fAoafAoAfofofoHfsfsf:UfoPf:Ufofofofsfsf:Uf:UfofoffffoZfffoffofoRfofsfof:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[Xd$ f[fo^XT$0fofs)d$ )T$0foVfof:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[Xd$@f[fAo^XT$Pfofs)d$@)T$PfAoVfof:Ufsf:Uffffoffofofff8#fsf8#foff8#fsf8#[Xd$`f[fo_XT$pfofs)d$`)T$pfoWfof:Ufsf:Uffffoffofff8#fsf8#foff8#fsf8#[X$f[X$)$)$fAogfAoWI9fofofsf:Ufofsff:Uffofffff8#fsf8#ff8#fsf8#[X$f[X$)$)$uH$LLH|$8L|$XH$L$HHHHIIHD$ H$H$Lt$HH$H$H$HD$(H|$PHt$xL|$PH$L|$hH$H$L$HD$0H$L$H$Lt$`H$HD$ L|$`HD$@L|$pL$Ht$pL$H$T$ fHt$0H$L$L$t$@H fDnL$@T$@fDnl$@D$@H fDnT$@|$@DXfDnd$@H$DXDt$@DXH fDnD$@D|$@DXfDn\$@DT$@I fn|$@T$@DXfnT$@\$@DXfnt$@D\$@XfnL$@Ht$@XHt$ DXL$@I XH XH Ht$ DXl$ HD$ LDXT$ H|$ H DXd$ Lt$ DXD$ HD$ DX\$ LT$ II X|$ H$LT$ H$XT$ H\$ LH Xt$ L$H\$ L|$PXL$ D$ H fn\$ |$ H fnl$ HT$`Dt$ Ht$pDXDXfnl$ D|$ fnd$ T$ I DXI DXfnd$ t$ fn\$ L$H L$H$DXDXDT$ fn\$ D\$ I Xfn\$ \$ Xfn\$ H|$ l$ Lt$ DXT$ L|$ II d$ XL|$ fn\$0LDXD$ Ht$ H XHt$0\$ HT$ X|$ L\$ IAXI H XT$ L\$ Xt$ Ht$ XL$ HD$ AXD(DXL$ HD$DYAXEXDD(hA(DYHD$`A(AX((HD$YXX (QYYXX9AAH$L$L$HH$LHD$ IErIABAyIAqffHEHIDDEsAsD)ADADD*H|$D)Ds*sADXGXGfDfDDAD)Du*H|$*uDXGXGfAfDDAD)Et$*H|$*At$EXGXGffDIDE}*ljD)Eu*ΉAAAAXA)X Af* f*AXHL;L$ AXAHAH$dH3%(uH[]A\A]A^A_`ffff.AWAVAUATUSHxD$ 62H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0D(LD(DA[I H H I I SfoESfsKfEofAsfD:UfDofsfof:UfD:UfsfD:UfofAofAofEoffAfADUffofEfA]fAofDofDofsfsfA:UfDofD:UfDffAofEfEfffA8#fD8#fAsfE8#[DXfsE[A]E[EXf8#fDofs[fDoEXEUDXfAofA:UfDofsfD:UfDffAofEfEfffA8#fD8#fAsfs[XfE8#E[f8#AXE[fDo[AXET$XAT$fAoM9fDofsfA:UfDofsffD:UfDfAofAfEffAf8#fsf8#f8#fs[X[f8#[X[XXt$0fIDD$Id$PLMM|$ MLl$@D $\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AQAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_ZAWAVAUATE1USHD$H$ xL$lAHD$dH%(HD$x1EGF B}fAE(((D(D(VH\$AEEAIHFE9C fAofsAfDofsfA:UfDofsfDofD:Uf:UfAsfofE:UAffAfAfCfEofDofsfDofEf:UfAfAsfDofE:UfDofDfAoffEfEfEofffA8#fAsfE8#fDofDofDf8#fsf8#E[EXfA[DXCfDofsfDof:UfAsfE:UfDffEfAofEfEofffA8#fAsfE8#fDofDf8#fsf8#E[AXFf[XfAofDofsfsfA:UfDofD:UffDfAofAfEffAf8#fsf8#ff8#fsf8#[Xf[Xt$@fDD$ d$`|$0l$PDL$\$ T$@XXL$`Xt$l$0XX\$$d$PXT$DXXXL$dXt$Xl$4Xd$TX\$(XT$HXL$hXt$Xl$8Xd$XX\$,XT$LXL$lXt$Xl$<Xd$\_((YYYXXX7.VJD9$H@EfIfNAAEcOAkAEADDDK,E)]DeE߉EDDAA*K,LT$D)De*]DADDAXODD)AXOf*Ajf*AEDDDXNEA)ED;$EXNfA*fA*XJXJHD$xdH3%(uHĈ[]A\A]A^A_mUffff.AWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_OAWAVAUATUSHxD$ fbH$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_!JAWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_DAWAVAUATUSHXD$H4$dH%(HD$H1HT$L$DL${Xffo=MHLLH(H,(fDopLfo5uDHHHHIHf8QfofafiffA8fffJfof8fA8fDofDafifDfffAfD8#fsf8#E[AX[XNf8fDofDafifDfffAfD8#fsf8#E[AX[XAJH9f8fDofDafifAffff8#fsf8#[X[X\$0IIIl$Id$ t$l$Xt$d$(Xl$\$,Xd$ T$0X\$$L$4XT$8XL$؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo <H1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.AWAVAUATUSHdH%(H$1$ QMH|$H $LD$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfDoHD$ LLHD$Ht$L(I(I(M(fo=HfopIIIAOIHHHEYfDof8fE8fE8fA8fEofE8fD8fAsfE8EJfE8fEofD8fA8fE8fE8fDofDofE8fE8fEofDofDofE8fAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXEHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDIfEofD8fE8fE8fE8fE8fEofE8fAsfE8fE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDOI9fEofD8fE8fE8fE8fA8fsfE8fA8fD8!fsfD8!fsfEE[AXfD8!fsf8!fA[XHD$ Ht$(t$0H $l$@IHHd$PIII\$`T$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$(LT$HDLHD$IAIIECEyHfHfIIADAc)ljAcDADCcAljAADEA*AcA)EA*AXBABfAX A DEefAljAADEA*AeA)EA*XFFfXED$Ad$fAljAADEA*AAd$A)EA*XBBfX  EEAefAljAADEIA*L<$AAeA)EA*AXGAXAfAGE~fAAAfAAfEA*LD$ljA)L;L$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_-@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%]DIIHAGHHHHAYfof8f8f8f8fDof8f8fo1fsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_%ffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%-DIIHAGHHHHAYfof8f8f8f8fDof8f8fofsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A__ffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$fPL$H$H$1L$H)$H)$)$)d$p)d$`)d$P)d$@)d$0)d$ )d$fo-fo%ɲfofAo fAo4fof8f8f8f8fof8f8fsf8fof8fof8f8f8f8fof8f8fofof8fof8#fsf8#ff8#fsf8#[X|$f[X\$ )|$fo)\$ fo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$0f[X\$@)|$0fo)\$@fAofof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$Pf[X\$`)|$Pfo)\$`fAo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$pf[fAo4X$HH9)|$pfo)$fof8f8f8f8f8f8fof8#fsf8#ff8#fsf8#[X$f[X$)$)$KHLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$fL$t$ H fDnL$ T$ fDnl$ D$ H fDnT$ |$ DXfDnd$ H$DXDT$ DXH fDnD$ D|$ DXfDn\$ D\$ I fn|$ T$ DXfnT$ l$ DXfnt$ \$ XfnL$ Ht$ XHt$DXL$ I XH XH Ht$DXl$HD$LDXT$H|$H DXd$LT$DXD$HD$DX\$L\$II X|$H$L\$IH$XT$I Hl$Xt$L\$XL$LT$0D$L|$@H fn\$|$H fnl$HT$PDT$Ht$`DXDXfnl$D|$fnd$L\$pI T$DXI DXfnd$t$fn\$D\$H DXDXfn\$H$H$X\$H fn\$l$Xfn\$Dd$I Xfn\$H|$l$LT$DXT$L|$II d$LL|$XDXD$H Ht$\$HT$X|$H\$HAXH XT$H\$Xt$Ld$XL$HD$AXD(DXL$H$DYAXhA(EXDD(HD$DYAX((`A(YH$XX (QYYXX9AAH$4L$L$HDH$H$L$LHD$DIASIAyE{HfHfIIljDAa)ƉAaD{‰kAlj@Alj@EA*ljljk)lj*AXBABfAX A }mfAlj@Alj@EA*L|$ljm)lj*AXGAGfAXAA|$Al$fAlj@Alj@EA*L$ljAl$)lj*AXGAGfAXAA}f@AljAmAlj@EIA*ljljAm)lj*XAX  fAE~AnfljAljAn*ljƉA)L;L$*AX@A@AXA H$dH3%(uH[]A\A]A^A_DIHF(%dLH(fLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B,HHEL9t).w5.v(@[]A\f.DIHF(%4LH(6LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.B,HHEL9t).w5.v(@[]A\f.ATUSHy^D$ DIHF(-LH(%LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=_(|,HHEL9t ^D$ .gv]H[]A\ffffff.ATUSH)^D$ DIHF(%LH(LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=T_(,,HHEL9t ^D$ .v H[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1EfAHL$@IHT$HD$IHt$H<$)|$0O D()|$ D(LD(D(D(D(D(fo-Wfo%/fo57IHHCHHHHA_fof8f8f8f8fDof8f8fofsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$ f[XD$0)T$ )D$0D$L$LT$M$f$Dt$pD$D$D$D$D$$$LT$XDT$pD$DX$DXX$X$$X$$DXT$tD$DX$$LT$LT$@X$X$HD$PX$XDXT$xXX$X$X$X$DXT$|X$XD(A~X$DYX$XDXDX$X$EX(X$X$YDX$X$EDX$hX$(X$YX$DX$X$DXXX$ X$DDX$u](HD$XYYPXAX HD$`HAsAfKD^D(ILD(HD$h((M(($fDffADDffADDf|$ xfADDIAAIAoAQAgffAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*AۉH\$PDD)AXFAXAFfAf**DDЉ|$MD)XCX Cf f*\$ D*A\$0Ht$`)AXEAXMAEfAMf**HL$XXXIfIL$LfɉA‰@‰A*A@A)EA*XFXL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$Ldf*Y\,HfA*Y\,D$ gfA*Y\,)fA*AYA\,fH$dH3%(uH([]A\A]A^A_fDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1fH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ fo-$fo%fo$fo5@fAo fAo<fof8f8f8f8fDof8f8fsfD8fofA8fof8ftffof8fDof8fDofDof8f8fDofDofD8fAofDofD8fAofE8#fsf8#fsf8#fDofDofDfA8#E[DXD$ fDof[X\$0D)D$ )\$0fofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$@f[X\$PD)D$@)\$Pfofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$`f[X\$pD)D$`)\$pfAofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DX$f[fAo<X$HH9D)$)$foftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[X$f[X$)$)$H\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$fL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH fDnL$PT$PH fDnl$PH$L$DL$ DXDXfDn\$0DL$PDL$@DXfDnT$Pt$PH fDnd$P|$PH fDnD$PDL$PDXfn|$PDT$PDXfnT$PD\$PDXfnt$P\$PXfnL$PHD$PXHD$ DXL$PHT$PXDXl$PH XHD$ DXT$ Ht$ DXd$ H|$ HD$0Ht$@DXD$ H$H H HD$ DX\$ Ht$ LH X|$ LT$`Ht$ LL\$pH XT$ Ht$ HH$H Xt$ Ht$ XL$ T$ H fn\$ l$ H fnl$ Dd$ I DXDXfnl$ Dl$ fnd$ Dt$ I DXI DXfnd$ DT$ fn\$ D\$ I DXI DXfn\$ \$ H Xfn\$ H$L$XӉD$ fn\$ DL$ I Xfn\$ Hl$ l$ Ld$ DXT$ Ll$ d$ Lt$ XDXD$ LT$ \$ L\$ AXX|$ H\$ HH XT$ H$H\$ AXXt$ LL$ XL$ HT$ hDXL$ D(AXA(DYEXDD(H$DY`A(AX((H$YX (XH$YYPXX8H$H$pfHD)MD(LD(H$((L$(L$(HL$03DfDffDffADDf|$ fADDIABIEhARA`ffADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$p)E*ωA*)މAXAXGAfAGf*ΉH$*H$XXGfGDDfD)|$ *D*ʉΉAt$`AXAXFAfAFf*ɉ|$PH$)‰*AXKKfX\$@f@‰A*A@A)EA*XAX L;$A  HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTf@*Y\,7fA*Y\,D$ UfA*Y\,f*AYA\,fH$dH3%(uH[]A\A]A^A_6fDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hfHLt$HLHfo-JHD$@LLHD$8Lt$8H)|$ D(H)|$D(LD(MD(D(D(D(fo%یfo5IIHAGHHHHAYfof8f8f8f8fDof8f8fofsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$f[XD$ )T$)D$ Dt$PHD$@Lt$HD$Dl$`IIH$fHD$II$D$D$$Dd$pDT$P|$`DX$XXDL$p$DXDXT$T$X|$d$X$$D$X$XXXDXXDXL$tX$X$X$X$DX$X$DXT$XX|$hHD$0X$DXL$xX$X$DXT$\X|$lX$DXL$|X$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$pH|$0HDLHD$@IARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_DIfHFfo-LHfo%LD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$fք$L$0D$ $$Ufք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$fք$L$0D$ $$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$hlfք$L$0$$D$ @fք$$$X$[X$L$|$`t$@$fք$L$0D$ $$fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ffffff.D@fokHIfo kIJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfojH1fo jHf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZX1\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZVX\$ X\$,HLDCKL9uH []A\ATUS((H@XH-2fXY(dH%(HD$81XXX59 Y|$(DQHGD(hLHLL(f(H X\(^f: Y\f:AXf[)$$H4$HL$LcH B$BD@`$DHcH `@$D@`$D@`L9YIJHHσu!HD$8dH3%(H@[]A\@\$ HZL$L$I\$ f(L$T$H\D$$ZIXt$T$X,H DEML9uOATUS((HPXH-"dXY(dH%(HD$H1XXX57 Y|$(DAHGD(fLHHt(f(H X\(^f: Y\f:AXf[D$ HcL$ $DHcL$$`@$DHcL$(`@$DHcL$,`@$D@`H9]IHHHσuHD$HdH3%(HP[]A\\$0HZL$L$I\$0f.(L$T$H\D$\$ Z8Xc\$ T$X,H DEML9uIH(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$X XD$tXHD$dH3%(uH(fH)$ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf|fff.H(dH%(HD$1DffAnf8fot3HHHHH@ofoHfdH9f8fouffAn$f8f8<$fofsf8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DH(dH%(HD$1DffAnf8fot3HHHHH@fofoHfdH9f8fouffAn)$f8f8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$萸AWAVAUATUSHdH%(HD$x11fD$^cD@ffo5 LHIIfoN oHHo@L9fofoffsfffsffofDofffDffAfffufLffsfl$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu HĈ[]A\A]A^A_E1E1AWAVAUATUSHdH%(HD$x11fD$^kD@ffo5[HHIIfoN HH@L9fofoffsfffsffofDofffDffAfffufoGfsLf8d$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu'HĈ[]A\A]A^A_f.E1E10AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5DIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufHfHfsff:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)l$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu&HĈ[]A\A]A^A_fE1E1萭AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5 AIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufo@fsHHf8f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)d$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu%HĈ[]A\A]A^A_E1E1H(dH%(HD$1DffAnDf8DHI1foIIIIM9Afofdfofvf8r$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)fnIM9f8_A8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12ffffff.ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHAofofdfftC$EHA)f.tD E8~DEHAfufAnf8II9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?wtFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.USH(dH%(HD$1ffnˉf8DXfoI1IIIfAo fo)$$fd$fofvf8L$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)fnf8IM9<8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11 ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHfAofofdfftC)$EHA)f.tD E8~DEHAfufAnf8II9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?藜tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.Wt&WHHfDHXFH9uffff.Wt&WHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAo-m0E1E1o%l0Ao=n0Ao5r0AġzoġzoLbaq!zoqaġzoT1bi)ib)AqũA9hA1`9`A1hy`)b91ih9`hAiqaaab9yb!yiA AŹ`Źhġx ġxDI A9DHHHHD9t\f.HjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAo- .E1E1o% .Ao=.Ao5.AġzoġzoLbaq!zoqaġzoT1bi)ib)AqũA9hA1`9`A1hy`)b91ih9`hAiqaaab9yb!yiA AŹ`Źhġx ġxDI A9DHHHHD9t\f.HjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@a-AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@!,AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ **EGF B Azz@EIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(zOIzG贘D$hd$hl$l((l$zNzF$$~D$`HD$ \$ D$dXL$`XC$ CHQ)$I)L$x`Ah|$AŁ\$a`ht$Iit$B T$iIAo|$ot$Bx)$ayot$qqqa9`A9hx)$t$IqŹT$iyoqA9B9`hqyoD$iaAii)$yyot$YY`h)$qYyiyqy1`A1hia1iA1IB1)`yiA)hyoyai)$yũqA)yB)`hyqqqQQYix)$q!`A!h)$AqyqšB A!yyoD$HqB!9`A9hʼnia9y9iB9AqiYo$Ai`hx)$(QiyyoYiYo$`hqqyyyaQqoT$X`ho\$hd$YyIqIyI`ho$qiaYaao|$qh`aqAAoL$x`hAIB1qAyo|$qqűyoL$IIx)L$ũx)|$oL$(yoL$8yaa)L$x)L$o$o$Aa`ahAI`Iho$I`ho$AIh)l$XI`x)\$h)D$Ho$I`ho$I`ho$I`ho$(`h`)D$xAhoD$Hy`h `A hx)\$Ha`h)`x)$A)h)$yot$XyoT$x `ʼnhAQ`Qhyyot$h `ʼnhI`h1`A1hA`Ahy`h`hoT$H)D$X`ho$)D$Hi`Aih)D$ho$`)T$xhoD$Xʼn` h`hod$H `h@Ź`Źhh`px0PHol$hű`1hol$x@`AhxH@š`!hxP@`xX@D9AىINIA9ۍ,fIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH@[]A\A]ÉIIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h Ht$HT$HL$GF B Azz@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$WH\$WɉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvz*AzXGfDzGWE)EEr*ErXDDDEDEzz*WLT$E)AEzXBr*rX ADDzBWz EEWEz*LD$)zX@*rXDDd$DT$Dz@WzADWDED)*H|$*DXGXDEGWDWDIA*rXMHHHD$HD$)HD$HD$*zMzXEL;L$zE[]A\A]A^A_ÐAWAVIAUATUSD$h Ht$HT$HL$GF B Azz@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$WH\$WɉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvz*AzXGfDzGWE)EEr*ErXDDDEDEzz*WLT$E)AEzXBr*rX ADDzBWz EEWEz*LD$)zX@*rXDDd$DT$Dz@WzADWDED)*H|$*DXGXDEGWDWDIA*rXMHHHD$HD$)HD$HD$*zMzXEL;L$zE[]A\A]A^A_Ð"LOHFL9AH9A HBL9AH9D AIAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRG{BLG LN fA LR GkB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LG LN f A LR G +B LGLNf ALRG ;BLGLNfLRGADqDE)AEE)AAAvyo%QHHHE11oKġzoġyo``hhqyġxI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^@III1E1DBB$BID9wûfDfDfDfDfDfDvfDffDVfD FfD 6fD &fD fD fD"LOHFL9AH9A HBL9AH9D AIAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRG{BLG LN fA LR GkB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LG LN f A LR G +B LGLNf ALRG ;BLGLNfLRGADqDE)AEE)AAAvyo%HHHE11o ġzoġyo``hhqyġxI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^@III1E1DBB$BID9wûfDfDfDfDfDfDvfDffDVfD FfD 6fD &fD fD fDAWAVAUATUSHD$h Ht$HT$G C B Azz@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyWWɉljDAf)ƉAfDA}‰AmAlj@Alj@Ez*zXBljAmzBW)lj*rX z A<$W@AljAl$Alj@Ez*L|$ljAl$zXG)ljzG*rXWz}W@AljmAlj@Ez*L|$ljmzXG)ljzG*rXWz;W@AljkAlj@Ez*XAljk)lj*X  WAE{A+WljAljA+II*zX@IIHHIƉAz@)L;L$*rXz[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B Azz@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyWWɉljDAf)ƉAfDA}‰AmAlj@Alj@Ez*zXBljAmzBW)lj*rX z A<$W@AljAl$Alj@Ez*L|$ljAl$zXG)ljzG*rXWz}W@AljmAlj@Ez*L|$ljmzXG)ljzG*rXWz;W@AljkAlj@Ez*XAljk)lj*X  WAE{A+WljAljA+II*zX@IIHHIƉAz@)L;L$*rXz[]A\A]A^A_ffffff.AWAVAUATUSHD$h SOHt$HT$G C B Azz@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyWWɉljDAf)‰AfDA}ƉAeAljAljEz*zXBljAezBW)@*rX z A<$WɉAljAd$AljEz*L|$ljAd$zXG)@zG*rXWz}WɉAljeAljEz*L|$ljezXG)@zG*rXWz;WɉAljcAljEz*XAljc)lj@*X  WAE{A#WDljA#@II*zX@IIHHIDz@)L;L$*rXz []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B Azz@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyWWɉljDAf)‰AfDA}ƉAeAljAljEz*zXBljAezBW)@*rX z A<$WɉAljAd$AljEz*L|$ljAd$zXG)@zG*rXWz}WɉAljeAljEz*L|$ljezXG)@zG*rXWz;WɉAljcAljEz*XAljc)lj@*X  WAE{A#WDljA#@II*zX@IIHHIDz@)L;L$*rXz []A\A]A^A_AWAVIAUATIUSD$H  GF BQE1fDDYW1EPHA8WIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ AADL$T$AD$Eo%znQ-ݡstgAE1IIġyossġx)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEtpAo(I1IfDoo$sss)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGAWAVAUATUSHdH%(HD$x1$ H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$Azz@jWP1Ho%H)t$ )t$)4$)t$@)t$0yo<ossAo\ŹsqŹs`hairr[airrX\$0[Xyo)|$0sqŹs`hairr[airrX\$@[Xyo)|$@sqŹs`hairr[airrX$[Xyo\)<$sqŹs`hairr[airrX\$[XyoHH9s)|$qŹs`hairr[airrXL$ [X)L$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`t$@t$@HnD$@H XHHt$@XHt$Pt$@T$@LH HnD$@XNXNHT$@HT$Xt$@D|$@InD$@XJI L|$@MXt$@|$@I H|$hJnD$@L|$@IXII Xt$@DT$@InD$@JXHzXL|$@t$@|$@zHznD$@XHXHHD$0H<$nD$0LT$H XH HD$@H|$0t$@I HD$ XNt$0H n$L$NXJX4$H$JnD$XIX4$InD$ JXHzXzHz$LT$`HDLH$IAQH{EyHWIWIIljDc)ƉcD}‰eAljAljEz*zXBljezBW)lj@*rX z A|$Ad$WAljAljEz*L|$PljAd$zXG)lj@zG*rXWzA{AcWAljAljEz*L|$XljAczXG)lj@zG*rXWzA}AeWAljAljEIz*XAljAe)lj@*X  WAE~WAljljAfljAf@*zX@ƉAz@)L;$@*rXzHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ NdH%(HD$81:H$DH$GF B^WDP1IoǓI)d$ )d$)$$fDo yo<sqsŹqAyoAs9QAIAs`haiŹrrŹaa[iryrX $[yoX)<$As9QAIAs`haiŹrrŹaa[iryrXL$[X)|$o|HL9ŹsAiIQs`hairra[irrXL$ [X)t$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L$$D<$H n$XOH$LX$$D4$H On$H$LXNH X$$D,$Nn$XJXH$L$$H JXOD$$Lt$n$H$$$D$XLH On$H$XNX$$D4$Nn$XJXJA}AOdIDIEhHDyDYIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_AAE~Ao-I1o5Ifo$o sssyL`)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDRD$L$dH%(HD$81L$DfDfDfDDxo-MILLIyoN9yoyoLoyo@oHHHHIo`ssyo[řsyo]Y)sqy1šyo\$L9yosya9oo sissLd$Hl$CALCiLCyLH\$!x)$MMMx)L$M1x)D$ DOD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_#AWAVAUATUSHdH%(HD$x1$ ̋ȋH|$`H4$HT$GL$H$FH$ L$BL$ L$Azz@WP1Ho%H)l$P)l$@)l$0)l$ )l$o-yo4yossossaLPy!sy!sy!sy![X|$o\s)|$saLPy!sy!sy!sy![X|$ yos)|$ saLPy!sy!sy!sy![X|$0yo\s)|$0saLPy!sy!sy!sy![X|$@yoHH9s)|$@sqLPy!sy!sy!sy![X|$P)|$PlIIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`l$Pt$PHnD$PH XHHt$PXH4$l$PT$PLH HnD$PXNXNHT$PHT$l$PD|$PInD$PXJI L|$PMXl$P|$PI H|$hJnD$PL|$PIXII Xl$PDT$PInD$PRXHzXL|$Pl$P|$PzHznD$PXHXHHD$H|$ nD$LT$0H XH HD$PH|$l$PI HD$@XNl$LT$H nD$ NXJXl$HD$JnD$0XIXl$InD$@RXHzXzHz$LT$`HDLHD$fDIAQIA{EyHWHWIIljDAc)ƉAcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*L<$ljezXG)lj@zG*rXWzA|$Ad$WAljAljEz*L|$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*XAljAe)lj@*X  WAE~WAljljAfljAf@*zX@ƉAz@)L;L$@*rXzHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BWDP1Io;I)d$ )d$)$$o%fDoyo<sisŹyo4issiL@y!sy!sy!sy![X<$o4s)<$siL@y!sy!sy!sy![X|$oTHL9s)|$syL@y!sy!sy!sy![Xl$ )l$ YL<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L$$D<$H n$XOH$LX$$D4$H On$H$LXNH X$$D,$Nn$XJXH$L$$H JXOD$$Lt$n$H$$$D$XLH On$H$XNX$$D4$Nn$XJXJA{AOdIIEXHDyDiIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_AAElAo%t{IIHIN foHHIzohsssGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [Ifff.AWAVAUATUSHHD|D$L$dH%(HD$81L$DfDfDfDDxo-xMILLIoN9yoyoLyoyo@oHHHHIo`ssyo[řsyo]Y)1sqy9šzo\$L9yosyao1Ld$)Hl$9H\$!šM)sMMA1sM91sx $xD$t$ f.OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHdH%(H$1$ ixexH|$H $LD$GH$H$FL$ L$BL$ L$Azz@WHHt$(LHA!HD$ LLHD$Ht$(x(Lx(Mx(Io%wtI@IIIzoQIHHHAzogsasAYAiyzoRősqyAYsš`šhQairrAaAx[A(Xairr[(XzoPsqyAYsš`šhQairrAaAx[A0Xairr[0XoPsqyAYsš`šhQairrAaAx[A8Xairr[8XoQsqyAYsš`šhQairrAaAx[@Xairr[XoWI9sqyAAYsřš`šhairr[Xairr[XHD$ Ht$(xT$0H $xL$@HHIxD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$0LT$HDLHD$fIAIHDCEyHWIWIIADc)ljcDADEeAljAADEz*zXBAezBWA)Er*rX z ED$Ad$WAljAADEz*XFAAd$FWA)Er*XEEAeWAljAADEz*XBAAeBWA)Er*X  EFAfWAljAADEIz*L<$AAfzXGA)Er*rXzWzGE{WAAAcAAcEz*LD$zX@ljA)L;\$@z@*rXzH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ pdH%(HD$81zpH$DH$GF BDpWIII(N<1(olIMLfo HHIIIzoPsi9sAiiA!yqAzoZA)yq)sAiAi9A11A9A)is`haaiũrqraaiũx[@XryrAzo\$[)sAiAiX9A11A9A)is`haaiũrqraaiũx[HXAzoSL9ryr!sAi[AiX91A9A1A9is`haaiaa9rirAqAx[PXryr[X<$MMLt$Ll$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A|AOd-I@IEhHDYDyIWHWHDAADA`EEQA)DA`ADAE,EYDAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_AAEvAo-DhIIHIo5.hN f.{ HHIHsssyL`GL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDhD$L$dH%(HD$81L$DfDfDfDDxo-heMILLIyoN9yoyoLoyo@HHHHI`ssy[řsy]Y)sqy1š{\$L9yosya9oo 5dsissLd$Hl$CALCiLCyLH\$!x$MMMxL$M1xD$ DOD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHdH%(H$1$ IeEeH|$H$HL$GL$H$FH$ L$BL$ L$Azz@WHHt$(LHo%aHD$ LLHD$Ht$L(H(Ix(Mx(yoUaDIII{QHHHHA{_sasAYAi{ZyřšsAYqyAqřšsaLҠby!sy!s!y!sy!Ax[A0X_[šsAY0XqyAqřšsaLҠby!sy!s!y!sy!Ax[A8XX[šsAY8XqyAqřšsaLҠby!sy!s!y!sy!Ax[@XZ[šsAYXqyAqřšsaLҠby!sy!s!Ax[HXy!sy![XQI9sqyAsqLày!sy!s[Xy!sy![XSHD$ Ht$(xL$0H$HL$xD$@IHH|$PIIIt$`l$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AzD$tzX@XL$pz@zD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|zzX@XL$xz@z$LT$HDLHD$fIAQIA{EyHWHWIIljDAc)AcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*XFljeFW)lj@*XA|$Ad$WAljAljEz*L<$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*L|$ljAezXG)lj@*rXzWzGE~WAljljAfljAf@*zX@Az@)L;L$*rXzH$dH3%(uHĘ[]A\A]A^A_fff.A։DT$T$DD$o%ZynQ-\sIHHL f{HIssGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUDAAEAoTXIIHIN fHHI{`sssGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAI@AWAVAUATUSHdH%(H$1$ YYH|$H$HL$GL$H$FH$ L$BL$ L$Azz@jWHHt$(LHo%UHD$ LLHD$Ht$L(Hx(Ix(Mx(o-UDIII{QHHHHA{_sasAYAi{ZyřšsAYqyAqřšsaLPby!sy!sšby!sy!š_[(XšsAYqyAqřšsaLPby!sy!sšby!sy!šX[0XšsAYqyAqřšsaLPby!sy!sšby!sy!šZ[8XšsAYqyAqřšsaLPby!sy!sšby!sy!š[XQI9sqyAsqLPy!sy!sy!sy![XoHD$ Ht$(xT$0H$HL$xL$@IHHxD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AzD$tzX@XL$pz@zD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|zzX@XL$xz@z$LT$HDLHD$fDIAQIA{EyHWHWIIljDAc)AcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*XFljeFW)lj@*XA|$Ad$WAljAljEz*L<$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*L|$ljAezXG)lj@*rXzWzGE~WAljljAfljAf@*zX@Az@)L;L$*rXzH$dH3%(uHĘ[]A\A]A^A_褻@AWAVAUATUSHHD$ ^RdH%(HD$81JRH$DH$GF BDpWIIMIoNI(N<1(oNLfHHIyII{PisAi1siA!űA{JAqAAsAiyA99qAsAL0y!sby!sAby!sy!űA{L$[XAsAiyA99qAsAL0y!sby!sAby!sy!ű{{[XL9sy991qsyL0y!sy!sy!sy![XI4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A{AOd-IIEhHDyDYIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHxD$ ~MzMH$dH%(H\$h1AL$EGF BWALYLIMHL((x(L|0x(Lx(f.{KI H H I I {cšs{[is{kCaUsaUUYsYUšaš]ř{]YsaUsaUyqy#sy#A{]y#sy#[(XYs{][0XaUsaUyqy#sy#y#sy#[8X{d$[Xs{T$M9iUsiUqšy#sy#y#sy#[X[X3WIxL$It$@LMMx$LM|$0l$PxD$ Xt$X$Xl$0Xd$PXT$ XL$@Xt$X\$Xl$4Xd$TXT$$XL$DXt$X\$Xl$8Xd$XXT$(XL$HXt$X\$ Xl$ HTH|(%Q 4TH@4WA4XtHAWW8WYWX@Zc,X؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ffff.t5o lH1Hfoy)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G ff.AWAVAUATUSHdH%(H$1$ H|$H $LD$GL$H$FH$ L$BL$ L$Azz@TWHHt$(LHyoHD$ LLHD$Ht$L(I(I(Mx(youyo DIII{YIHHHA{gyBqiisaLɐ{ZyaaiayysaLҐby!sy!sAx[A8Xy!sy!{X[8XaaiayysaLҐby!sy!sAx[@Xy!sy!X[XaaiayysaLҐby!sy!sAx[HXy!sy!Y[XaaiayysaLҐby!sy!sAx[PXy!sy![XWI9iiaiyysqLÐy!sy!s[Xy!sy![XHD$ Ht$(xD$0H $|$@IHHt$PIIIl$`d$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$+LT$HDLHD$@IAIIECEyHWHWIIADAc)ljAcDADCcAljAADEz*zXBAczBWA)Er*rX z DEeWAljAADEz*XFAeFWA)Er*XED$Ad$WAljAADEz*XBAAd$BWA)Er*X  EEAeWAljAADEIz*L<$AAezXGA)Er*rXzWzGE~WAAAfAAfEz*LD$zX@ljA)L;L$@z@*rXzH$dH3%(uHĘ[]A\A]A^A_[@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XWHLt$8LHo%HD$0LLHD$(Lt$(H)l$(H(Lx(Mx(x(x(x(x(o+IIHA{yHHHHA{wy  qyiiosyL Wybiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXbiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xbiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xbiib iByBy# sBy#yAby#sy#Ax[@X Ax[HX{qM9 b i yyy#sby#y#sy#[Xʼn[XL$)L$WHD$0xl$@Lt$8xd$PIIH$HII$x\$`xT$px$x$$$XL$@X|$PXt$`Xl$pX$X$X$zX$zX$zX$XL$DX|$TXt$dXl$tX$X$X$*X$:X$2X$XL$HX|$XHD$ Xl$xXt$hX$X$XL$LX|$\Xl$|*X$2X$X$Xt$lBYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$`H|$ HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_Sffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XWHLt$8LHo% HD$0LLHD$(Lt$(H)l$(H(Lx(Mx(x(x(x(x(oIIHA{yHHHHA{wy  qyiiousyL Wybiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXbiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xbiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xbiib iByBy# sBy#yAby#sy#Ax[@X Ax[HX{qM9 b i yyy#sby#y#sy#[Xʼn[XL$)L$WHD$0xl$@Lt$8xd$PIIH$HII$x\$`xT$px$x$$$XL$@X|$PXt$`Xl$pX$X$X$zX$zX$zX$XL$DX|$TXt$dXl$tX$X$X$*X$:X$2X$XL$HX|$XHD$ Xl$xXt$hX$X$XL$LX|$\Xl$|*X$2X$X$Xt$lBYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$`H|$ HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_oLffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$0WPL$H$H$1L$H)$H)$)$)l$p)l$`)l$P)l$@)l$0)l$ )l$o%oo-yo4yo<yAAqAiiosILPiyiIiyy#sy#y[X|$y#sy#[)|$X|$ oTii)|$ Iiyy#sy#y[X|$0y#sy#[)|$0X|$@yoii)|$@Iiyy#sy#y[X|$Py#sy#[)|$PX|$`yoTii)|$`Iiyy#sy#y[X|$py#sy#[)|$pX$yoHH9ii)$Iiyyy#sy#y#sy#[X$[)$X$)$HLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$WL$t$ H nT$ T$ nt$ D$ H nl$ |$ Xnd$ H$XDT$ XH n\$ D|$ XnL$ D\$ I ynT$ T$ XynL$ l$ XynD$ \$ *Xn|$ Ht$ 2XHt$XT$ I :XH XH Ht$Xt$HD$LXl$H|$H Xd$LT$X\$HD$XL$L\$II *XT$H$L\$IH$2XL$I Hl$:XD$L\$X|$D$H yn\$LT$0|$L|$@H jXyn\$HT$PDT$Ht$`I JXyn\$D|$L\$pI RXyn\$T$ZXyn\$t$H bXyn\$D\$rXyn\$H$H$A*XӉ\$H yn\$l$A2Xyn\$Dd$I A:Xyn\$H|$Xt$LT$Xl$L|$II Xd$LL|$H BXX\$Ht$rX\$HT$*XT$H\$HH 2XL$YH\$:XD$Ld$X|$HD$XT$H$pXYXŢYHD$XŲY(Y`H$ŪXźXzXzI zzx$4L$L$HDH$H$L$LHD$DIASIAyE{HWHWIIljDAa)ƉAaD{‰kAlj@Alj@Ez*zXBljkzBW)lj*rX z }mWAlj@Alj@Ez*L|$ljmzXG)ljzG*rXWzA|$Al$WAlj@Alj@Ez*L$ljAl$zXG)ljzG*rXWzA}W@AljAmAlj@EIz*XAljAm)lj*X  WAE~AnWljAljAn*zX@ƉAz@)L;L$*rXz H$dH3%(uH[]A\A]A^A_'BDIHF(-LH(%LDPH@(PH@H(H](X](@]]___[_[k[[kc)AL9uIIHHHHHƃt{ATUL$SHHI,DBuL,HHEL9t1.ew5g.v(f[]A\f.DIHF(-LH(%LDPH@PH@HH]X]@]]___[_[k[[kcAL9uIIHHHHHƃt{ATUL$SHHI,DBJ5K,HHEL9t1.%w5'.v(f[]A\f.ATUSH%^D$ DIHF(5DLH(-ELDPHDYPH@HYHYXY@]]]]___[_[k[[kc)AL9uIIHHHHHƃt_HHL$I&=_I,HHEL9t#^D$ .vDH[]A\ffffff.ATUSH%^D$ DIHF(5LH(-LDPHDYPH@HYHYXY@]]]]___[_[k[[kcAL9uIIHHHHHƃt_HHL$I&=_H,HHEL9t#^D$ .yvoDH[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1E5WAHL$@IHT$HD$IHt$H<$)|$0O ()|$ x(Lx(x(x(x(x(o%oo-DIHH{GHHHH{sy b qb ohbiiWsqLityibiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXitibiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xitibiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xitibiib iByBy# sBy#yAby#sy#Ax[@X QAx[HXM9itibiib iByy# sBy#yby#sy#AqAx[ňXL$ Ax[)L$ ŀXL$0)L$0WL$LT$MLT$LT$x$LT$@$xl$px$$x$$x$x$(|$ XL$p$X$X$X$XL$tX$X$X$X$zX$zX$zX$X$HD$PX$X$XL$xX$X$*X$X$X$XL$|X$X$2X$BYX$z~X$X$*X$rX:X$X$X$2X$zYX$h*X$X$:X$XY2X$ X$XŪY0:X$ŲYXeHD$X]źXzPHD$`zHAuAWKD`x(ILx(HD$h((M(("DfDffADDffADDf|$ xfADDIAAIAoAQAgWWAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*rXzXFAۉzDH\$PzFWWD)*DX *XCDЉ WC\$ D)W*rXM|$M*DzXEzMW\$0zEA*WHL$XHt$`)XI*XIWL$LWA‰@‰A*XFA@A)Er*XL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$LdW*Y\,HWA*Y\,D$ gWA*Y\,)WA*zYz\,fH$dH3%(uH([]A\A]A^A_3fDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1!WH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ o%oo5o-fyo<Ayoy9b9q9iiosAL`tyiiAiyby#sy#y9y#sy#Ax[ŸX|$ [)|$ X|$0o)|$0tiiAiyby#sy#y9y#sy#Ax[[XT$PŸX|$@)T$P)|$@otiiAiyby#sy#y9y#sy#Ax[[XT$pŸX|$`)T$p)|$`yotiiAiyby#sy#y9y#sy#Ax[[X$ŸX$)$)$yoHH9tiiAiyyy#sy#y#sy#[X$[)$X$)$aH\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$WL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH nT$PT$PH nt$PH$L$DL$ XXnL$0DL$PDL$@Xnl$Pt$PH nd$P|$PH n\$PDL$PXynT$PDT$PXynL$PD\$PXynD$P\$P*Xn|$PHD$P2XHD$ XT$PHT$P:XXt$PH XHD$ Xl$ Ht$ Xd$ H|$ HD$0Ht$@X\$ H$H H HD$ XL$ Ht$ LH *XT$ LT$`Ht$ LL\$pH 2XL$ Ht$ HH$H :XD$ Ht$ X|$ T$ H yn\$ l$ H jXyn\$ Dd$ I JXyn\$ Dl$ I RXyn\$ Dt$ I ZXyn\$ DT$ I bXyn\$ D\$ I rXyn\$ \$ H A*Xyn\$ H$L$A2XˉD$ yn\$ DL$ I A:Xyn\$ Hl$ Xt$ Ld$ Xl$ Ll$ Xd$ Lt$ X\$ LT$ XL$ L\$ *XT$ H\$ HBXH JY2XL$ H\$ :XD$ LL$ H$X|$ HT$ XT$ pjXYH$`XYX(H$HŲYH$YzH*XźXzH$x$pWHDMx(Lx(H$((L$(L$(HL$05fDffDffADDf|$ fADDIABIEhARA`WWADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$pE)z*zXG*ωrXzGWz*WH$)މXG*XGH$DDWWD)|$ *DrX*zXFΉzWzFt$`W*ɉXK|$PH$A)‰K*XWA\$@W@‰A*XAA@A)Er*X L;$A HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTW@*Y\,7WA*Y\,D$ UWA*Y\,W*zYz\,f.H$dH3%(uH[]A\A]A^A_'fDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hWHLt$HLHo%HD$@LLHD$8Lt$8H)|$ (H)|$x(Lx(Mx(x(x(x(oo-IIH{AHHHHA{wy b qb ogbiiWsqLityibiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXitibiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xitibiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xitibiib iByBy# sBy#yAby#sy#Ax[@X QAx[HXM9itibiib iByy# syBy#by#sy#AqAx[ňXL$Ax[ŀXD$ )L$)D$ ~xl$PHD$@Lt$H$Wxd$`IIH$HII$x\$px$x$x$$XL$PX|$`Xt$pX$X$X$X$zX$zX$zX$XL$TX|$dXt$tX$X$X$X$*X$:X$2X$XL$XX|$hHD$0X$Xt$xX$X$XL$\X|$lX$*X$2X$X$Xt$|BYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$pH|$0HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_ ffffff.DIHFo-_LHo%@LD0HHH H`hPy`hyqqAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[f.tDoH1o Hf.)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.D@(HoIIJW H H o}}GH9uLwbN>ك@8HJN~ك@xH0N~ك@xHN~ك@xHN ~ك@xH N ~ ك@x H N ~ ك@x H N~ك@xHN~ك @xHt~N~ك @xHthN~ك @xHtRN~ك @xHt<N~ك @xHt&N~ك@xHuVNڈHPHLT$HArUHAWAVAUATARSHIHPHhHXdH<%(H}1HHAB0H`LHIRIZAMbMj AMr(EAWIMMLMHH((M<(|(Hf.| I H QH H I I I YɱYNбYY 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]E!AE@DH(dH%(HD$1{Dynyt0HHHHHoHH9dqL uynȃ)$qq 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]E!AE@DAWAVIAUATIUSIMH$H$dH%(H$1H$AAWAII)t$ )t$)4$@xYұYx( YYX$(LY)$Y(HL9Xl$YY)l$Xd$ )d$ GIHIHHLT$L$LD$H|$WHt$ HD$(D$I n$D$I yn $L$4$D$I AzXn$<$n<$LT$H L$JXD$,$H|$XXt$4$H 2Xn$$n,$H H4$XHD$:X$Xz$X$z$X$XD$$X$z!zix)x)d$\zYzl$Xt$T|$PzL$DzD$@zl$zvz/zgu,Hĸ[]A\A]A^A_W)d$ )d$)$$:f.AWAVIAUATIUSIMH$H$dH%(H$1H$AAWAII)t$ )t$)4$@(x(YұYx( YYX$(LY)$Y(HL9Xl$YY)l$Xd$ )d$ GIHIHHL$LT$LD$H|$WHt$ HD$(D$I n$D$I yn $L$4$D$I AzXn$<$n<$LT$H L$JXD$,$H|$XXt$4$H 2Xn$$n,$H H4$XHD$:X$Xz$X$z$X$XD$$X$z!zix)x)d$\zYzl$Xt$T|$PzD$DzL$@zl$zvz/zgu,Hĸ[]A\A]A^A_W)d$ )d$)$$f.AWAVAUATUSHdH%(H$11f$UD@o5jHIIoN foHHo@sL9siŹuLs$o$yyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyEDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAH$dH3%(D'DOu#H[]A\A]A^A_fDE1E1AWAVAUATUSHdH%(H$11f$UD@o5ufHIIoN fHH@sL9siŹuofsLYL$o$yyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyEDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAH$dH3%(D'DOu!H[]A\A]A^A_@E1E1`AWAVAUATUSHdH%(H$11f$MD@1o5bIoIoosHL9siŹuHHsyyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyE)$EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAH$dH3%(D'DGu$H[]A\A]A^A_E1E1AWAVAUATUSHdH%(H$11f$MD@1o53_IoIoosHL9siŹuo^sHHYLyyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyE)$EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAH$dH3%(D'DGu"H[]A\A]A^A_DE1E1(LT$HArUHAUATARSHPdH%(HE1nyDiIE1o%`IIIDI M9tq$}odd}}rL]LMH)AÉك EA8AME8DOуI9AunI M9iuwt$1@DAA8EMDOH9DwDHEdH3%(uHP[AZA\A]]IbE1DH(dH%(HD$1DynDyDHI1IIIIM9{dvyr$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)nIM9qfA8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12fDATUSH dH%(HD$1<D&ynEy3hI1HHHzodft?$EHA)DtD E8~DEHAfuynqII9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?offffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.LT$HArUHAUATARSHPdH%(HE1nyDio%pXIE1III}o$}odd}}rDL]LMH)AÉك @EA8AME8DOуI9AunqI M9uwt$1@DAA8EMDOH9DwDHEdH3%(uHP[AZA\A]]IbE1轾ffff.USH(dH%(HD$1nÉyDXI1IIIyo )$$d$vyL$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)nqIM9C8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11ǺATUSH dH%(HD$1<D&ynEy3hI1HHHyodft?)$EHA)DtD E8~DEHAfuynqII9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1??ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.DAUATIUSIHHMt811 fCL9Hs%I|H胵uH[]A\A]f1*AWAVAUATIUSHLH("BHT$HL$DL$,5A*AHtYHt<11fDHH9Hv%HtLLuH([]A\A]A^A_1_DL-!BE1L5!BMuDIIƀM9LLdu؀|$MILDHE11fAEH9IH|LuH(D[]A\A]A^A_Hڸf,!BH!BHAE1E1DE19~MII9t.HD$B::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]void boost::condition_variable::notify_one()boost::condition_variable::condition_variable()typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]boost::detail::interruption_checker::~interruption_checker()boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constboost::mutex::~mutex()boost::condition_variable::~condition_variable()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?    v bH= :72' tS!2!' !!!lRG B7 4' & ymga[MEykc[ME?=yM[=ky[E=S[MIG= 2109`kxSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EESt14default_deleteI18GNSSBlockInterfaceE@lxPkxSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EEN5boost6system12system_errorE@@lx@d9lxN5boost16exception_detail20error_info_containerE9lxN5boost9exceptionE9 mxN5boost16exception_detail10clone_baseE9`mxN5boost6detail15sp_counted_baseE@mxp>N5boost16bad_lexical_castE@mx`lxN5boost16thread_exceptionE@0nx`lxN5boost15condition_errorE@pnxmxN5boost10lock_errorE@nxmxN5boost21thread_resource_errorE9nxN5boost18thread_interruptedE@@oxlxN5boost16exception_detail25error_info_container_implEP6oxlx<(N5boost16exception_detail10bad_alloc_EP6@pxlx<(N5boost16exception_detail14bad_exception_E@px08N5boost2io12format_errorE@pxppxN5boost2io12too_few_argsEP60qx=N2gr6blocks11file_sourceE9`qxN5boost13exception_ptrEP6qxnxlx(N5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEEP6rxqxmxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_21thread_resource_errorEEEEEP6@sxPnxlx(N5boost16exception_detail19error_info_injectorINS_10lock_errorEEEP6txrxmxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEEE@txAN5boost6detail11thread_dataIPFvvEEEP6uxnxlx(N5boost16exception_detail19error_info_injectorINS_15condition_errorEEEP6uxtxmxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15condition_errorEEEEEP6`vxoxmxN5boost16exception_detail10clone_implINS0_10bad_alloc_EEEP6vxpxmxN5boost16exception_detail10clone_implINS0_14bad_exception_EEE@@wxPmxN5boost6detail17sp_counted_impl_pINS0_11thread_dataIPFvvEEEEE@wxPmxN5boost6detail17sp_counted_impl_pINS_16exception_detail10clone_implINS2_10bad_alloc_EEEEE@@xxPmxN5boost6detail17sp_counted_impl_pINS_16exception_detail10clone_implINS2_14bad_exception_EEEEE@xxkxSt19_Sp_counted_deleterIP18GNSSBlockInterfaceSt14default_deleteIS0_ESaIvELN9__gnu_cxx12_Lock_policyE2EE9@yxSt19_Sp_make_shared_tag@yxkxSt23_Sp_counted_ptr_inplaceI17FileConfigurationSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE`lx@wN`pN oNlx`A`Amx`A`AmxwN`qN oNnxvNpN oNPnxxNqN oNnx yN`rN oNox@tNrN NlNЅNNoxPN@NoxNNpjApxNNpx@NЌNwAqx0NN oNqxNNX}x}xP rxN N oNN`}N rx NN rxNp~N0NБNrxNN oNrx N0N~xxPsxNN oN@N@|NsxpNNsxpNP}NNN`txnN nNPmNNtxЈN N oNtx`NNxxP`uxpNN oNN {N`uxN`N`ux0N0|NNpN؀xHx0 vxNN0NpzN vxNNpjA vxN{NЋNNxx0vxN@N`NyNvx NNwAvx N`zN0NN wxplNmNmNkN0mN@mNwx`lNpmNNkNlNmN xxPlN`mN@NkNlNlNxxlNmNlNnNnN`yxlNmNlNmNnN@@.A{Gz?D@@/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/file_configuration.ccUnable to open configuration file Destructor calledGNSS-SDRConfiguration file opened with no errors contains errors in line ./default_config_file.txt9x22ConfigurationInterface17FileConfiguration@xx@@xkxSt23_Sp_counted_ptr_inplaceI21InMemoryConfigurationSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@xkxSt23_Sp_counted_ptr_inplaceI9INIReaderSaIS0_ELN9__gnu_cxx12_Lock_policyE2EExOOOO*OO&O"OOOx@4O`4OP4O4O4Ox04Op4OP6O4O4Obad lexical cast: source type value could not be interpreted as targetThe descriptor does not fit into the select call's fd_setHost not found (authoritative)Host not found (non-authoritative), try again laterThe query is valid, but it does not have associated dataA non-recoverable error occurred during database lookupTwo_Bit_Cpx_File_Signal_SourceGPS_L1_CA_PCPS_Assisted_AcquisitionGPS_L1_CA_PCPS_Tong_AcquisitionGPS_L1_CA_PCPS_Multithread_AcquisitionGPS_L1_CA_PCPS_Acquisition_Fine_DopplerGPS_L1_CA_PCPS_QuickSync_AcquisitionGalileo_E1_PCPS_Ambiguous_AcquisitionGalileo_E1_PCPS_8ms_Ambiguous_AcquisitionGalileo_E1_PCPS_Tong_Ambiguous_AcquisitionGalileo_E1_PCPS_CCCWSR_Ambiguous_AcquisitionGalileo_E5a_Noncoherent_IQ_Acquisition_CAFGalileo_E1_PCPS_QuickSync_Ambiguous_AcquisitionGPS_L1_CA_DLL_PLL_Optim_TrackingGPS_L1_CA_DLL_FLL_PLL_TrackingGPS_L1_CA_TCP_CONNECTOR_TrackingGalileo_E1_DLL_PLL_VEML_TrackingGalileo_volk_E1_DLL_PLL_VEML_TrackingGalileo_E1_TCP_CONNECTOR_Tracking/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/gnss_block_factory.cc: Undefined implementation for blockGalileo_Volk_E1_DLL_PLL_VEML_TrackingGetting Observables with implementation Getting PVT with implementation Getting OutputFilter with implementation 3CEA9DA7B07B13A6CC0AE53DAD1EE2A0FCC70009338C08AC0EE457F76A1690815C3C940AB722487CC8F3D1F4C428828E7FD2A21230E42A3BBDF1E792165F644D0E0335F95EBDC93D6005CC0C680DB7B0E1B8C4946B7974319F9816141DB9E01011E4F20DA8F1B8E15A6F618CF599C3F5C1A1B276D51318ED4119BCE0ACD0332F3DD8F88EC5215AB311C51FF4987DA93B09A43BA84CF08032F6CB28F43043C54586811D870AD6FA27AA63785345C8BCDD3DA26A0134738BC7E08461D5409FF0B791D8574CE797FC5EF7821055028CB4AF92AE1088F8806CD55F0E5FDFCD8D74ED801B2B44AD5D79D1924D41DDC6AB2070B5360CB64CCF487FE517420348CC39BF50BDF78BE7DA91542FEAB689457B3EE69E43C75FADC303F31032FD96B7DC70A88C3B7BAC7322B285D9CFB3A93AC8B890165F23848FAD8477DBDD3D0AA4CB3CD73A48000B6D134DA2DA70B56E590A101AEE78864DA0C64A7BCC6B37CD6F31E9AFF10CA4D47630752D253944632DF6EC60AECDCD223F29399CDA3B74D1DFA5471277EE6C814464A8C55D3C0B83B36B6AC9FA90CE876ACDF65E3EA3FD61D309EB71ED29A3D510B2F4C0B6D6C5B57EC9060CFBE48389DCB17CBB2284E7F578565B91503B06F49CF3E8534870AEB6AD9707265A9A1E6E2E5E6DF6DAA367239A96EF5B02C19A4543D537EB4D9D73966C09E9B52B4706F57B3E0987885EB84DEA26F7823D895F62015188ED38C04CC6714F797FDB0BC713E3D0208462F9A68E3872A167BF1BF9791AEE8BB73CF527C50975B55C4E5C2F2E95B677F833ECC878D1764839608CC1108A75EE9E58FFCFE4CB52884E7AF15EE0632E0729DA1CF5B7A227028CFE1E08F8B881E1A743D52DD27BED33DE0EE75DC031B4864CF192DFEAF64F726D73321363A233F81C57232432D2B0A5A4C44F4320847A9C143F378F204185D2B571482FE45D6BCA152E6EA7223BFC6DCE06CEF90CE9114623EAB9B1EC789B2051B4AB711DABF5B16FCD970F437B8860313B4F1F14D384EE3976B7E55D2FDCB7E1BD9BE18B722E37C853ADC7E1CC2870A02881F95B78487780E1D1C296415109CF07AB63D0782A9F451CBEB3E8B919917AEDBCA8A8E563AD3784639793E0F25CC9CC62240FA04B2F141E71BF5C84EAC56431159556B8BCE077A51469A87737D3D6F06D97DD479FCC35129F4499C19EF98BDCEA9D4941B3756CDE1997C3AFCAE62B6D9E23341E11CD05A7FFF52F5814011A84D737E1264109006BEF5F19E3C6A9C7521B44741A8282755A8F0DC2FA0E1F6CA4FB34D8CD5FAA27E18808868725B9634376137C1BBC46934F83958112D03082DDD6148F353BD1DD24B9F8FD7AD89C40DA0A92A8DBE3608038CD56FFC4ACA35241D76FAC4CAE1211AAD9D73D51C81C59BCE05F71C345730D3A2C670F8F533A950EF24B00EFE6A3F1354694ABCC6FD9EC4E74DDE1F287AD4F847A297ECCCC39AF029EFCDDDB19932D906B9CEDFCBE0D422CEE305DD05E407340F28EEEA866664D60AF293A45D5D6D5C0000B05F79463DB513ED488DE7BD4EC9EACFEF973B23CE4E9539EFCB797456CF5FD1EC54FDCEE80B39063C48B91A5C2D2BEBC81B9B46D0AD6503BE5AACED2BA5EBE81F630B4E07510356E8229F7FC5EA532B8729CDB819E066A15379AC6942CD4BC5E97C6791E098105C323A3A3DA3880D5EE5562ABBA2BDC9906F4486B51ACF8AA4405E9D7A63DB9E3058782DD9AF3995FFB3D34AEF98234A0B3DC62C339325B60706C068F0198BD8FA658396D06931B069155217690C7F88FD230CDB38E3E48530BD47722FC9D8CF144C4B667345D44F765622A956CAC4E097AB1CAB05CFBCC6BB68C709503AD9DB09C09C983D46A04A05B6F7EB26DB4D46F868C10E112828B1AEDB3C0074BE0DE3C9B7821BABB4F8B8E24F69869CCD981B09A783BF6A95F39ECFAF25DED6B16F89EA09D3A8413CCEBB545651B363DD385D12BB72420440C40E804FA27DE029A1E08629BAAB598C035DC58FDD309844F3BEBDE40FCC231F38605DED06572ADD85DC51D3D8B89B4480143D0B75283522354330E5CCF4DE1A6E68047D5B8D45D835A891F2D40C9DB8A76CEB1D18FE2BC38D080A8D97064CC87D692DF21184ABFDDA7642D0BD6F3209D06B4AE7600F7DDDB71DA751120599117ECCE645FD109CCA2EC7DB98F4177F14DB854FEB314B5D7CDC3385AD203464EADEAFF4AD08DFEF3D21240BFB8EFCAAC1356C72A0F5C61BE03CD2A21A7D756FA9003D562FC4A49A6BE788EC8D80054ACA881DFFF72C2966EECD09F185EDD11218C6696DB14E05FFF3644D11E508F4F1E9C5AB3074FB1C3FB21092A1C8D5AE05688FA4A9226C3C30D0BC3981933DC8648240F8CB67085F53AC5295428DC8447A1E5A46C2BA86796982C4C6CC647FD8079BC4024BB69E2B226E6F3D0F8A90B4D36DA2AED4C6BB60D318AA7479FDC2031143C67CB4381C27072E12935001524C7BECEDAA9954BCC2AA218E9EC2C95498FD8DF655C015896D9ED42CE7F91CBBA2CC4A7920038EBB5F5CE638F969F8B179E72AE252BE7E826E5CB53C2E85AAF1E1F1AD8D534F78A681928818AC3154651FFC583DEB0A6A1F40B98771ACC528AAF80D210ADAF83597869968D499ADE9A19BAF341E8CBA20F0E1473BDD898C24C7A5466F9924EC7EE992A2086AF295BEE1F6D0F8843D91180BF2C981C11FD978B23B6BAF7786BD526B458B76A87C31D7C52DFA43F3D362C8EEFFFB3FE5FB3F6E5F34B1FEC7EF1031146F3F609B32677F148F7DEBCF3526BB45582436A3092408193D6312626E46ECFA96FEAD12A234CACE10FAF9DE75EE2D238088146328E10E9ECDBB0B018ECDF2725415CF5A06AAB857403BBF6CBFC350903A982864827988BC805A3484A31FECF7A40D4FE251BC7E487613B9D3A48D3C7DAEFDC49C4B7E625F868DB53A798515A61050978552699EF2A5BF2F13BDD444EADC9B60B479FDD4633EB4C1062AA78BEF06692DED203819D3160310FD7F2343732156A9CBCB0B50BA9A8F93E339B702670E54BFA6DB2E2E773202C690FB71EB03671AB0B1B02B2F189BD99061ADD23F75F4914067AE638C9A29DD3661C28AE272CE692CBDE6AE880FBCF272E548342372CBAF6370C7E3AE9648341CE7310BE1C534B5702B0611AF65868F840B6B7613FDAEA21DEFB4F2024487023B02B8B58C9E9F27AA787EE775249EFC40913CBBD69C38538F239B203815F00F7B9CB30DC79E6A0C3E069D109E4A1BAEEE36D354C3D0121F1342F1F4AC504A68D69DEC158D54B04BE8164B48F31BC0827A0379C5237070B6F963741AD9ED4F3865698FB8233D7F49ED4E0EEF3AD927CBAF4FAE183252BC56AE4CDE3E329B1D9C87C6C11429B15B8EE589213CFAC208A12AA01B4F1F7CC35CD0AEAE217471B3DAC1C279F353DC61994FC45FEDBBE0005D8EC729385645864EF98A3A417E62F1EACA7E60D4E773BB2E4024D62830F103A7988733DD7BBCF3AB0CD0049006FE2F7EB3821724BEC37EAE44681A9699A025D212724CD98CA3415FE2BD09FADC02F1501FA38A6083427B662DDCBD0460E12A09072698EC8966C47B8A640AC79C1B7722E78A6C28680F4BB77BBA477BE0A6FAB959B9753217C570845D1C8FF162EE106CC87C3EBF6A837930F8CC797EC7A446E8A213ABD239582350636B19B5BE428A9C13F980B7AF5CD7F32630AFE8693CDF0EC0BC2C84F2472F5B86576E8C43136C14717A24705953D392BAC96C1055B782C7941D82FEA357E5FDEFF772FB9F3DF248455CADEAC4CBA2EBA9C91184006D1680E000D59E4BC8FBE2C2F7CC2E78BFA5B60EB292F244E6CF497D5A287432F2520B31B9D9FEC1210923299EDFF043CE077195509E92372F5959AAB4666AE486DEFA400D81463C388CD05C677BFD4953D2627105B0A776960FEE916C75D53981D30DC689581B7E8E0723D65949662ECFAA6FCC9F0CE8892E367721718F906207663F9AD450AE98D75DF004080FC15DC2CD7A1DCE013A0E547ADDC29A397ECB9E7FA02035327AC40240E2091098708D424563AB7C5867F3F2D78EE3EF5B658FDDBD49435060CA2EA3D559CDE957B7E48B98DB41CF875F7B3D9EBDF6547B4EDD98DF4B747B0793152FA8CC07C6D9EE5A2002464566D86466C2EDE54A2BF4BBE823049E57364C127A14BFE1B88ECF70EFB81EB831BBF50F6AE124E5F6A775F3F2620E91D489CCF24811C0890EF905E9E2ACD399E13DC81333A54BDD295B872EB74E412E2FB654A9874854FBC3A68C73434C5FC5CED27534B2B13C316205FF4E432FAFC13A7B5B7A7FFA9FEEDB5AE69036F8F2955DA124CE5856E8C53F24E609F7D3386DC5212B2E78B5AA23B59D45FE98AA08E9CFAA9D52ED260A36AF07522C047ED43808A39D7019E444EDF84D885A9AC84092A0F6BFED562F3E0D79FB5CF62F98E67EF219FA3F5AEB7D4E344642D3D4B1A7EEA18464F6CE8D4CB3181D9EBF6F4122751B54D0D7F3FC470A91B547148AAB1CA0DF59872120190640555A7561B0F2C11280768F74B1A56674FD5480B0F510491431810D99CECBC6DB85888BACBE2B020FB8B3D78039773229714156494EAEC3A2D0A59E718F72205747D69C05DDF1C678E2E154A1F84EF0CA2E24DC4A6A996F0850A396D2432596EAE84AEC0935B8C25D5C65B52A32722F01D281C4F753EE03EB10020E9FA02462CA303DA39560669637532D381EB78AE5EC0F6DBF6273EC979442E6243F65FC51F26C6C9554C6C0E3EFF33BC4EAB6A27CAB9383BE7DDDE4218C4998033B47919503E1C9A789711EBEAAD6C0298B3DC563F54D28675260F6D896F1B8D4FD0001C429210398E9544B3DAA12C31F7EE82EF4D2234E26F873610B76756DDACD24B6132BCFFE735FE75513ED527DD04D7DC6D24059F85706679DCD1474A9DB9571426BE17E6DEBA58B33B708567697F471CA8B78E8FA73B0E18CB6F88BF9E4F442F0FC21FAB89305484828F18B65F9D373A6A2B380D73F5924F80DA234C1DD87416D025E4E663C96F287B0C83DC92C2164D81830781B715209FD11A65E64962D805389BAAA91DFBB990D3511E506A8EC101131C5B7284252F861D047DB2C2027DBAAD487ABFE429CA21CBEA7671350618E441F4D62F2D579CAE29D97023A8873869B553293D9F54D4A929E252AF132325A6E3BCBF7B36D0DAFA1E56A39A5D801FD0D5A41111017BF62AAF8346C7D424FE007C32B437ADE60AAA9540AA5078FE6C3C3CCEA53EE863086646C976FE6C79434A0AA4F53B2E9E2C3B4CF9C9C4015391E27CDFF5C1FCCCC00BBF5B99715A1265F591E294D530DB14DFD485AD34BBCEA32E5B5D0EED15F88BF5D96D058E6D70BB1A232597E35A625E5E8C2EF5E7031A71F70309019A0591BA0A50E87C839498255A3602C0FAE53166BE5E49E29D24AEC47002B698F80FC49E718B66A8959259ACC5407A0133D5CC3754D6B259A2CC4EC0298111D098CDFB40549E5C40B36A2846CB4B256672BA189CD3A05293BB36B167508A7BECA3110BFF339BA06340585DE8EDA03AD244A77F54B7931610B6F9C5C54D688A0526A9B52605BD7D7BB01A63F3D1565CF78ED904BBE4AFA4A290EADFE9DC156E59BAC162A818B6CDF38D2BC715144D44A1578BFC727423777784D15ACFE80FACAB61F9E58B5D3FFDDB065A00C5D49DF0237EA6C488D7758F1A689DC59DBFF78261016A7C723FE52FFE571F5876FE0ED50FB00A90BB82B27BCAF5A67374284844E06BB1B2D84B1D20228F5C2208CA7E8EEC2E95027B09372A309223A15C132543FF3A89B7AFBA56AA7A8DBE70E0805D3A54191CC6884D75ED0FC00C06D9D488B0F4816E12D6C2A4324EF742AC8FF885E42100849DA05E3B7C451D43ADBEDDFDD13076CD8D22BDA101F665B5878E321A009B970D1F4C48503CE35365543B3F36786802E5C53FDD756C595784E4F130904044660784ECD9C9161477F5BCEFC98987540AD1E86CABD3EC7823D83877605FFC79820F1381DA29282C3C5B3443B6A67973F0622EA5DAA14FA239542EB140082F242958B39014486E5D5632C62C3EC8BE0E09E038C0ABD52B1322E0F7407FA53AE8D761858136CB371AED5E6FC9D32CADC8F870EE833B7120BC0278D9A05554D90DBEB24ED6F5A8861698D48B4BF7AFE7763C1401572643E246DC65853996B0480D38DB7302364409357137DCD0B416561B9511BA43CA34341FEF7954C28B2D9FF96EA110E0818309C32AD306DA077CC911299FAD6396C872F3F6AF7871395D7E67879EFED929E4C05AB4C09E8BB396048150A4161D7944CBD99C94DD16CD8E0D8BB73768B17EC02C0D4206AF623037D6F4257DAB4C07B4A6C0B4D2E0C9923FBADE3DFF7FDAB45F4E6BC5A895FAE4F5BB9EA247F2D4446E260F7988C452203EEA1DFA64DEC2DCC090BB3ABE13F6A8718F8DA2BE551407B59B8EF1806A65526B6B872CB8922BB929F09341554A71E69B41B60987FE3A5E7E3424D947455083A827FFE27FB5BC5365C80998DE01CCDB66213575FB61B3E6F877D0E2E4EFDE4467D9F07B6A28148FE2FD6EDC9202F55FC855D0DF8C49E244C40CC3D95FC06C6778D397461BD157F4A0FFD915799820D55F52C96AEC0CC5A3E7A2151A845EECEE78B82ED9A217E326CF6C49F7D31C4D8ACAFD827E6ABB760150203448C000819E7E0B6E424C43A5500164CF128D686B4810D9838480604A891792987FDC549D87F95BCA120AB84FCCD8C9F93F988C87E79599F3C1952BC0F7773BDFFC50B19BDF8E3D8F52D887E45B643297650044E80124BEA0ED60FEC4449BB3BBE394CDF7CC7AA39BC1A5023044F6A843186C01EE1BF5834EB5401AF7905FC04447AE00DAC50B051B432F831FE5AAA7506160CFD7D4639C489ECA447F4F993AF0503CE5EF68A837FCF85B85993ECC55A9A3673F8F2C5CB8D3DD4C60E8421E3417EA958EF87E0764B061A39C32ABD5E0E3A712B54B0A3E2D351A0E00F4E901521C63C1F4ED829F6E259A1F720FDE96EA9CBB8F7BD7485531A81A49CDEFCE725493A04B5EAAF7411DEACDE5A95AB6C2AA7BE3269F6AE4D166D8A5FD5264B135FF8361FF75B2FF22A61905A349C6B2C1DB2BD7B385B8FBDCB2768C7926F138D5F8107111563CE527322AC42E6BD42485668106B8CE91F157E0C94448869F7AABA255821DF981CD5298D40378FB0E33A3DF8A037BC21F0AE268E69F7CF61E7E117BB463EDE3C7D2EF95987C66AC3E5C7D79C44A7590BFCF998683701DAD7B98731DBCB455E6142864D4236F326627BC08E9B2B96C1A9E5BA2631DCCA3F7A5B63736E4EA8074056DCD6BF0E5D6DB8845D9271C0D706F972AF22E652E3B2A7CC482B125EF8BE005F25D5109F6F9DD84DF966E2E0B8950FE1C01E2DF15205EC48BECEFB32511DCC39678F9DB08ED0EFF64C7B5DAED1DFD202F63B6EDBCFB7E4FBB431718BBFA2B65594D78D3983B0457DDDB350AF2C1B9743AB9EFC260A78C3144622C50D528B7D47DDE46FB9DA33D1E7DE6D5829258C2F02D54085AD0121A1BC8339A2847F6F161CB6EEFC5E3FFB12E6C77E5FE10E0D4B02E58142DBE5BF900B7B64EA79D520A35506AF4987E67BCC80D00FF467A0889A14B85B4745888B09DF7B4D3316D9B4A9B17C4CEDFCB0A55E2AAC53B538705673B2A2EE4ABA914E20ECAED730E3D5E272A65A74C366177A711095624A679C9300FEC18E20E65DA3645F23AABEF7EB7C7FF49B289FD2F44661F6F5F689B6E06EFCC99F8A5EAF558E10F2236E002F7D97C316698D6833792C456F812A339166E9FB3B3F61734B98AD2DC9A484A14A6025114D072B68C47DDE97322E213F5D6A93762A45C4C73C7832BB31209C4B1F0094BD24BA23CA9378FB893AB078FA3BC4763704EB6A0C8EC965690CA5B858DAFE623AB88ED39154F46B9030462DEC9070DA9DC34063C1CAB3FB84D60337F1D6D95D1A173650C96128D3C036D0B72B4D2A298186CCA8E1F386E1F70C0716F0BE370A6B325CDFDEAD3CC67E021E9D4C839230708DCCB062096F32C4DBE3C4876A7D1A26072673A6CABDD8D65A5E91CC5E973F00FA67619F749930F9D40B767E434D0955D47FC17BB37E4B7CCE63B1D666AF5D67FCE5FE5469D3DF6B6855F9C308DDFDF6733FA7B8511B25193C27925F3619F5F836014A64A2C8B783A50C6B3001001D621CEC582FA4E52C2B916A418F49ECFDB5ABCA40E1A8D38FE400FC2D0C185009E85546A92E829DC1AD2A7AC3DD23EB77F3D80015BDA4135B1194B10ECFC87C1102B3D366C5460D20D83E778142F1A4EDFDECF3D0BC448CE24A49C609B035A99B64FABF071C58DF592BBC625359BC23A565F4BB077DCF879E14ACE87F709D276982A3D10B23A9538A6A3DEEBBF0B712DB4C16B0FF508F3E4AF4AA759738302D24C6D13037DC81B0394FE785FD14A322BC00ED95E0E9D527FE5316748DD893DB03D5C4149D471DE98C386A2E9DCFF05181E837A1814D54C9CA708CB5E7A10B0FF4F540338BE403E4B9713015A99260795DF5832CCE8D5F763C68BDA51133AF1D012C283E8F4B1DDBB4EE8C351C4AF86FB436571F53B2E80AC04BE26EA617EFA9C5578FBBD81DD1809EC5BCA5DF4A85B24970EBD88D9856B2136616F85A338771BEE80F20F6E5652FAD00F49F3C349061DE3052841992EAA04CE15DB6C48888BD3CC5EF4D6CEBF00431CCB7C5289D79E67FC6CF2DA88AB60CB65D0F687455A535C33547553966D197BAD9778542F6CC7182289AED366ED1CDB0C5EC1E9C0F0E21D4D2B8D01EF4BA394E0C6B05B8EF42D81F773D3D251D6264CA23DA5CA2D4884544FDB81A243974FEECB416D0748449BA0CDC69E56D666FCD24D9BD7C322CBC038CEC658B5253227D87C527473F34BBA3E2FC18784F864233FF8528A874A8503840AAD03B63F79FEAA6C07E4467C4A04366ACD35E32A142DD76A23417EDBB8004944A1E51880CAA97937493EA5BD5A41298863A71D33156CDB942C166748DF66B80ECAD27675A673C8692805B42E97F1B28DCC9BCB58FDF8BE55E2034E73E444A225DDDCA5B46BEBA51AE98A27990F622B32B2C337046E459B173D94BBE5FDAE31FFD423300D5D80ECA6A471DE5CBA1D29B7010240D95FE341A62FF8175ECAA9566011AEDE6EDA0EF2CFFA7BFF9F4C9AB2C97F6554BB182B23F2772090FE7C4ACB8BE7427E7A8535DA3A670341D88CFE694D1CF40156E9B0557EA317A0B3E21F3A629D1CA971482B1A54697BBC2020BBACBBB9D1E67DC33F52C4B446A36D4331FB02F19BF1A647D05714450E591C65853176A04DD561E0933CF3F24A2E4707C44FE29C5D7706723FF53ADDDC67A67C23769CA32876F0CF31D233D352FF6A7277E5A3A7578A6F2A76456C0AA876680CDF2702B114E02D22D9F59077B9DB2ABFED673158EFAE4C23A75FC8BE701D973169AA7015297BDCAD4870D4F152DC556A06BBBBAEDFFCE40E6BA4F0FEB154F32D8E1492F74EE7085937600EE176ABFD6B8638E983EAD26C63805B98745BA290813CB65CCE33DF6B98240E571DEC4BFB2430C4B8FEC23C1BD5C3E87E0E746BA8A7722A6A660C5095FEA8E1C4978B966F487376DF42C9668E5D3102F123FDCE7B8D80E8BC84AF0D91E9355FF6F7482BA74E0BBA7DACE85BC053F31074151566334B4DDA37C6C51BB947811F284B671FE53FC464CC30DDE59A3D9CAD26822183E96D2F4BE60905B94BB8B167B734A0F0B26AD0E5083A34E68A620151966D073293E5D430D0726C0FE35BA3F1F44D851D374ABD80E826DD84A665165B3B82D540CDED9EF60CE48E87802F16F5DD89163AEC8E9C523E9F99AACCC6F00126C4C8663A7D64D919EC41ACA337379496D0CC876199A86404CE5844F8E2CACFB00A985B92B7A393CE464DB19E0B5FD65BA92D8EC1164CB1ECD994F82396F6A52BE2B66C8780A5AEFC0293EE437E7FBF9BF8880B61C8313C3865561A4287BFCABABB90B3A11F6AA57C2B2A6047F1316AFE1DFE540C4F1D5270F3EE3E023E202AA530211DC51F8C2E87636C14EC8300271A6454A924A8093716756F79780D94DC6863C24C80A405D6F52DEE81810EB850C1F60732AB24209773F66B2D2AEDEDAD6FFF60902910D4858B0F706414F5779590F2DA7C249E5DC1484EC40EDBB01920A5175CB9D74EFF957A61FE3E08DD7C5DED5B299C03299F25E39B161E1DC1C586E39D0BAF38C09C2EC0B22589AC489C3199EA4E66611C45A68A7254D292C78C3978C381F297D7DCD8C0F7646E7AB6DCF155B67F10C3F915F9B3AD96C21379993D8C5D6957847EA81B3BB4BB0863F0CED12F5CC48A4325CDA65268110C1C156F845951AF3C3C90280F8883CE0236FF02DB0CB07721261432C7E0D479F859D8EB7C433F67721B06E001498656578F0E3CEF2A6B941519885BBBB03F33DEEA07802226AEBA473CFEA6EB894F45D1BB937ADF5180F5FE22857CE0EB75D251B02D89E5502560A0B6B012C191DE9D62FD28CF503375F2A1FA9EFE0E42DA81A6EB3A6DBA299726EACC6F3BE91ED51A25EAD5F3E7067720F7D4BB72F8BE2DF978C46E1DFB4B0EA17BFCEFEBBFE40C66ED1F288BE08D6CD0B097C7ED1205E43F8FFB7086120FD153C47272188799D0F4554E9A4131C6B1460077A99E8198B3717AFE5E7C95D3F49B3779EFF9E935FA63A6F881F039436EBDCA2EBE6FE00109B658BA5555BAAA4A401D1FFCBCE0369798BB3BF8B54FCEAA5FE25F31AA02208B0F070270F9E043BAEEDAD4432B1C2DAC9F7B4CDCB52965EC43C2E99764AD2613BCBE468C9477E64B8BDCB64CFCE01C06EB66A15FB034D1AAA507AFB6842AF66AC8C18807E98884C6A780805720718A3A4D1A7B094846C55B0808736199CF4EC3F66B713259CC715B22B92AFB1599B7AD539B188E99B39F9A92987D0ED15C9491CEF241899B4DD47BF31F3BBEF20F5BF13D9A98D3F133AE61F3E4A87A299A6B115B96DA6B2811414D204A49EDA0E1A763E1EAFB78CE05C181DD0947CD50276A10D62543A0ECBA57DAB5DC794AD7006A520B419533CE8519F4EE4194B58B2E36F9E9705266B6E304D1DBC6B73491045548637449E5C657B263CBD9577AD8DB7D5A5BB5DF43A869FF91BB8706D4E81A4F8243C214D9884104675F2BCB426CD785A28F4856E363E1ECC974325487DC40E7304D3D7CADA5DCCA6E60F4457DA181A39801D35F20E1DFA05BC09E7699FA289A87EAB311BA8700AEC0F90950E5FF740DAE7EAE7FCAE8B0D9FB82ABD25BF46FAA635F570C22A76C52F9733D5BE64BA67AEB5D826288D03D8A23C5BD3FD6DBA68082B7815044E24859865ED557C7DE8F866823CD4716E573BFF30067F0931D0AFED0146D55B0B2A3D6C57481D94F61279DC4D2C6DCA1CEE27DF24426E55AB4FFB87068AC8AA6F286151356CEB29D993B4FB26192319C373A1F0F58FF5949783E71671FB58A683DC1CFE166FE1AEFEC8A41C5FC06A31F4EFFFA3EB7C388E1BF99667A5D2697F7132409641AA812EE84EA8735BB46E5069A7BF1B2618B56ACB97C368AA7BDE1BE0F0BF286B6D08B42702F1EDEF408BC529B4158824F673B30E3D3247FA59DCB83D004459CC5EF87BD6C7D188FD91A2A7FFDB008244F8618ED46A73323E9C7F9D5A83298F8C81702FB4523AFEA589D4CC269BD226D04689F132F766770FF23C832EB5695713AB99B74035540031AD1D9D9047D72B1910BC320A65A9F63A40C02FAFE217BA0C51FFE24E96DACE57C1318351038FBB81E76EA34853484E7ECEB672A4180A3D24B6C692747E9D306DD0AF275EC0581A30AC2E80EC73B04B1EF83160FD88DC43406CD715EAB1677F1422FCAB85D1D1EAC64F698B9ED69FC9F2B5519AF9153D5AB722339434C780886B81DC2878B27177B4616450BC1DE99C49C965DC9257BC78ACA052E998493A0CBF7B6AC86EDBC2627E43E7521A9DE7824DFA7DE19AEEA5892685D50EB10128B3D14F3C670F639AF6F2B2F6168A1E551A65781A418ED697E6AB3CF91EA2470995A401B08380CA58B9439DDA7BDB7A92E91016567D57D57D5D0DC4D8E3C1490CA1BEC03FDE065C7B7F34DBC40BF704149A0573C55A0EE4C415533829EEE71BD8C392FD622572DE009044E937AEEDF672886CF4A36ECFE7B0F8BA9CD9EBDEAEC40BD74AD34CCD2C7DD07F7AA64EBF4DA9C8810C05F55619B808127CCA00D171BFEA3E1EC0895A22218DF1A0514FE5D16DC416D9FFEEA8EA3BC9FC650F678EB731E70A6110E138E059371D5A10BEF6420A0C8BD45F836B7D310E732BDD0FE57D93A6934317FD8E2449BA0F0C6E1B36821B62D1F80B9CB6A5B407B6755977C06BB2C3CEED0B14D4D73A3554FAA54EF2C350C388B230B30148605035E4F481A769564E2814A160A67E6F0DFFA7814D0C12772C0496737C52016A93C6753C82FA896BDFF3BCC72105D6EA5B52B3810004DDEDC266F1C90CACF49BA7DB5016A4E485F06355441CA204F7D589F2A3159541F991682E6AEAC0C7359B3282A04B2DC69BB0AD6CF49C48343C8A769D3EFBE8D0814E72934F7CDE698061EC68FAAB39016B96BDC5363D2B53363A548E6476647C10F55611469828564C189430D351CA01D2F1029CA3CE1D2853E8E595D46C9C3EE9F7D3EB9C72A25F7B2138063A0F9186FF41CA9C579DA61772FD60408668A877CCF6B65FC2B88935822A6DDABB97D19F7455A9725A8DF2B8E6B28D83ACDACC66F02370575831490B8D8838D4E56AF36ADF8AA82DC5072A45A21B7880DEA3E2691FCC22EFF3AC815A2576A7F480ADA6F8426EADB4A96A17EB949BC049A646D46926F0D69E0B3E1911D2CE652FF4D9CBFCFDC30065FF4F779DF896D38587B297BE8E224EFB1DFD04BC2D22832B2955A250B7D0448AD9C0A76DE7C33A4E2B5DA1B3A868852B7F04D848EA6495BE8D2501BB47F24E8DC4B254DC56BB5A4760DF62BDB229F3DF0E0C06274A63A28D11F928AE2DEA72A9974E3C55CE261943F78B771CAE7B5B98642A01DBC06111B137774898F0F113A4DB23BC240BFF147568493FCF0C3D767D3548A1C0EF7AA4B6B2DF566C3E94BF9A183264F63E4FBA58B517FC46C4F0017F8D763A54D044C644D6326677A425F0F5A2A7C8796B9C9F8CD0FC49A1F035BB6662C0CCC0E9508AF8D2B834B929D80096F9BFC922BBF1BFC6F101317EC08ECC1DB52404B30B153F43C266D3E64FC496CFBBD350668B2AB3B596B5E0F0A00757E0D4A771F5A386AE86F5105C1718F7E93CF00F588C722509A03597B95512CFC705F08D3B4D5A3E23C56EB461A719A955AFD3EDC8329BC97E3EC6BAB24D97E16A724ED2D4C02B2371FA3ACAF49175A441C3FDE53C2DDA440C18BDB8A6F27805F944EAA7991D404CA74544E2F3A669DCC4052B6770AAD9EE29A6EF7791C6DF93054D07A2B3CB2327B0EBE7D983624639961AC4C3CEC2A84DBB3A10A830DCAABA9600DED87FD5CBAF4D5F1DB357ED42374175257474BAC200AC1B6A5B87D2FB2092458F51185C380B8BFF682C5BA1D2CBF8BC02E5D485FD811797AED167DE6ACA66B927363D12EA405D75A2E9182B1FD30ABA700C5683611A24EC5DC453F523EAEA44C6E06261A98346328ED9E86CA8F7EA79EEC551F36836272127A45984EE165BEF8AED80D26DC45E34E1794F56C1265DD92B4078FD2AF2F13981C08FE27C55C3C9238BBDE193A956E3F834445D949CAD84D3FF0FCD511C6C598735D5B3B07BDD7D437ADED3ABD6EC3171F3735883C9F511A06F4C6C7D0B137DD0D57869B8FB1375FBFCF9C3D08CDCB12B8D01614AA3C965550E5862AF49B04410D25BA4BE86FA6B0B9D9142461AD3CB4BD6D902EFA49632A78F1463619E1309CC89452C2B453BF9F08A714D67ED90972C62C0468CE17006F9B60138D28DA6362670BA3048CD8D099AF193619AA8384A1758FDF4A04CE56ABE464A66E913DB7BBBFF7EB2ADBD47E6347D7054CCA13000DE13F550C6263AA4135A2E16F1A2A58BEF962113C209CF58CE514FB51EC162D05A4DF832697E544037CA18E62A267D81D539F879F50C654E74BA21B47FFA5C704FAD2147EB3DD8617DE98B3ED4859B605310A777F3DD161F4038486F0872AF55FA3610EE0D68C1D51E0F91EF7D9AF4ED01BFF53FDA16BA3197A518BAC0F82F8895A2BDD9FF4C3035379E870C49DA1AF18B3668792B6640E687BB71F13DF1650C4E1A2CC487C247D1D1356EE16DB8F97363465614E9E63F36C853FB63C12963A8A5D98B52BE8DB31F0954B35C3C749A62C2B34A690803FA66087015506225181C5D6FC101D1494C3A7961ACFB4D9B905323DAADABA1DCD2DDC1F9CBFED7D726E602578CFDC1519925F8DBF9AC5FB4E4CA723BB264B5D106B6206574C46C1A49309C22E1935904942C36148F764B59F10A5CBA0C9397F5798E200A606EFC75DEEA1FFB10A85398E5BFBBC6AA3619A0F611E591245D03B6ADC0C50440A1B1C236ADBA933B2BF84D2C60C807E9F52436904BC62B813FFF8B9C824819C760D0BD636B10572C781B112CC0C603A260AB87986B0280FB913A9E0BCCDEE347F0C744BF8299A9099B8F2A17D19ECA96F67ADACC0D83FDCF235F07832E8E78A44A53F9C4CD09C3F88DB226701963147EE0E1AD0F549E11BBA70053A105BD62C40DA810BA37BA72D999CC4FF9BA4D01FCFC670E0D7819871D06C4935C10B85594CB7202F037B25F85141A580AE1CB3E0CA91AD73C6947D2492B8FD2F889B1421E04FF0FB7866218A491D9EF6A35DCACC12CE098EC575C697F5F8D1BF9178B3B36C999EADFFB5CB3A41DB672165CF73A7874FF68B3B901C4E9B8112EF4FF9B9308742ED678DF30E2F7C40BF922099C1A95BE0C231E9F8332EBEEFD99C6DDEF25CA5EBB2985A9689912616815AEA022BFBB87353B8B799D64280A6922CB09044ECAFA51037AC2FCB11516E9E286F64B4CE3E30A55191F24AB53F2E10E5A8920FFBAED77FD4C476E9AEC751763D68409ED9BF7F435E53D401CAD787A50033BB8547C910D90DE100FDF6B904A1F529830E3A51919299FD4476F02C3600AD5D42E3E154AEDCD1C99C1C5B531FE179860EC1EAC69EA0381CD4DCDE8716F94D6510F10FD1915864BA968440CCA6D0D5AD8983C421079B033B56FC34481B9F27188F829F91DD73F27BE8E0456B0F75DBEF40A3C67F274F6A50CDBFFF9798F8DBF1A6CE7158B577550E40639D38861A3CC4E060C9E5BC1F0D3760FA9A89C2CF0A23505F4A642F5EB0A055B96843198CE20133DFE022AFEE043191007276427DC82E877BDE27E20D65DFF8232E9E4DD786C23D4E8B5E84637A22AE5562651BA45369947C159B641710C98494ACAD48B4AD6AD9828897437AFACEE442DF2330669D5F2C6A9893E08507ADBF104C62F6B4D568C5381B28D5162EF0FBECF396E7C622B54A7864F9B31CCB396A0DF82AB86D950B4657237FB769122BE6B783ECE3F798AF68E354C521C77735EDB97D580CC80877ED702231CE2F8B73262AE39EF94E84736949292E065515D40A16BAB13EB9437D30AEC44AD8C67E3AFCE9AB377753BDC481E8E79EB10F89A7C4F7AA24E6FA48A36DD1CFC02CF3FF6DFD0CC1C4030C312532A70B60F678FF2B3586D77DDE74167CFFA62C12F7D0086A6FA59B36C6A025DEA1EA0BFA9861BEFEBEC6B2601DF225E29F36AC97EBDDB21D7E8206E1EC42F3B9CB314E7AE6464D54ABD53D090DE83B466FAF5384E0FAAA6E67F2FBD6A72E00D9274C9B5C768DB4AA4281F25EB2DC6BBE0EA85CE1CD31B32BD1971D6AA20B6C68D66426F09C0C1128A679AF06CAD490DCE3A2DB50181278BC40DF9E094D1D09B281CD1EF1C369E5927407E04918BD21315E12583D7D845933AEF186DAF8B6609C3CA9452857DD2112E86227422491DC7821D7E41DF759BABE6ADD11A4C771CF16469F86262D169F221D97DAC9686B6DA29568B4A2D2579C76CBF948C321F5158EB3FF5F6D4D6D68FA255C81F62A8DD605507D0C6C9D82E6AD258B32DE4AB6FF8FCC4A8C237E270B9673C208E56AA6F4796867762399FC8549DBD232B2CD0F9957A8A24FCEC6E8B3DCCBC67085C542A134F3E80A3CCE8D3DBEF0528432F2BAB2F5DC89D6015BE7F24B2B1F378EE75222EF125A5645AE37AFE6ABDF84CCC3026507BAD9CD8C2EB4020E7763E0F85164734C851532FFE705C111CCB7D738BA8C0D29C5A0A50250D0BE53353A6C407D4F7EDD62F271F099528CCB520E5B6B5695D3FBE628FF65D67CC0D1B766149B9C89D3C770AA133FAE2BF3C9846B30C46584E9F93A8216627CFAD84C37AAD7986B8D69F83392FF8F98C828F8B136633A09718D375327B98A0CF8B7736D229499A52D91D19CBB896A5BF4131691682741797A25FFFE6AC60E30C79385DC778C903D84AE0F7756BCB2518300DB110A07EC46869AC35F1B02650A36C3CA0350356E2808B84A0D9A8A648F920B7D48AFBBF6CA9A37F673DE2B6FB15B189FBBF2444BDE8808118595AA995AE0DF53F5146B011A0AF5B7FCB4B3D3EC074F2DF15CC9708EC50EBEEAFE06F7A0235A50E2DF7F6C023B53819AEA87318C4E67C4742FDEACF57DC539FBD5BA01F64CB45322212C707923303D96E58EB95F7392292885391283DD9477218697698AD6D83AA96B06D68F58FC2B8FD9D61E75337C6815BBFA8B76833FE1856B714ACCB6FB1B5E957DD385658AC760AC5811E3BC079DDF2CE30BDC21AB8D2C7B56D2F6B384FECDE4EB0206A6C00282950C1B72B3E464570364A919812E86BBFD0E1CB2DC98D6FF42617355F2131F72A11F50618CF21A4C4961083FC6BFAB63F544677428BB9F10FE341B947C41AAC1B367E338CC2AA08D6CAD1067F02654794571FA4AA11E211F5E75D194197BE4AF6543009C40EA86F74AEADAAB134CA9E35D79F7CD062B53BE2AD86FA7C2E30D9222A494A25044153420AEB6C8FFC4E0D4C514B8D9F5DD922D8EA387003409539D0B40210B05C9209B008D3E47E8F84C376F46001FFE463F21A92E34D3345751E8E94205EA06FAC16292B8C6D4FA028867AD4C4E8DE0D51BB7AED59547707CFBC2CF3A9235C29EE3A3873B96FB75DD50E758CB2C7196BDC09336A97756DAB994C46D5BBB87F9D80008D09C603A68022BADB1D2F6B98B6B76CB3C0EDAEA07A23065B93DAD67BC59C9BDEF7BDCDEF39D9AC04C9CE8F6DB4A925F77BBF8150AD478E3C6D7D32512ED75BFBCB82C66D505CD8BC5A5679014B355BDC66F365BE9AAF15B76C0CFC0B51E53F86BB4763F0302B448E84B9792F34442743E2D979C5133514D4BB1DE5E8AF938C4CF158336D04B6723F9422161805D5EB059E55C86D0C461399073A705FD6E919D1760B2D6860D65665B486DC0AAD8F7B3ADA9BD681D7FAE4185350BAA543E9F8671F1B4BAEB6D18674516033B2E2E4E427521C290A6E44E1EAF9974BBB360FEA3535CF46D68193C0E208AE5B2F85C2049C906725C92F598E6C0B67DC5F8B7C48CD411E107F4860CFB3C4229A44694ADE0E31A4FD70AE5702C0A7710678763B035C5C6B4B9214D507313F5ED85C444B98278B40446C861057AB9B897638DE4739088FC28A577CBD52A3910885276A2DC8DA99EC74D30DF707BFC60663C869DA4C47BBF4D64A789425C5C894EC2B512C3296D0070DE4942113FFC0B13D03515F2B4EC07A0E3BB7AAF08DE24779F9EEBE26CE7C316EAF47396E538672BB646E1B2016356A407B8828DC25D8F8A8296B4F855290131734C94CB92CBA5689574CE95B60988C42558DAD978F36D67BDDDAA92FEF21282683EBF6D59763384781EB4D3431DF5BB909ADACB397D36D55D2ADEE537D7B1B942F3A815917A388B12285689B40C3B45C04A591672A2B957F924F1CF6049B96A38E304B8641DF6A079614C9F9984FD9C9F0A82ED6E440164AC484252B45147929A58B069E663663CEDF0FA44FD67580BFD23BF77C61B95B533107A25684FDBAA4C1285AB568C9FAB387C6FDDFD5EBDF5AF1CE094C59630E19F621CDED14E3847BDE9B0EEC64C159F23C779C4B80163554900393CD7F1B885F92F183839CDAD7801DC7FCFD08B7E08D23BE21BC80F8655A2F3BD0C483B2C1D23D447682CCD9CE098AECFD7BA7C48F5BDEAC8397220A7852077A8D7933FD353C25E37DAA473E996A5920DEDB80C26DE4FC3AFBD6ACEA16DD3208C9384021D9B1FC1C884319B59276D48D8BF5A0A37D84B8C579EE0D9BC446D385D09A3464D1ABDC6D6CCB015280BBE7DCF00078634371D7F327322DD720E8DBD7B8CD97FB9505A118B469762ACA10C4E135ED782FC905EF30F9FBA82F11AE679431F270351F70F0508BA998AD9A71D2BE05F55348B275A0E537C63699C96DD8AB8E0645CA2606E35805F66CE586C81B4A65E2EF036697A18DA49C36CB22404497577107924DC02FD87072490D7EC8D5B376D0C3370F9753E0E7C781952C03D844490370D6853FCA49E12139805C24FE9C9914E3CF91464D332C934570DCD5D1C3C609C6984E28C9BFCBA3669B75452478DA4099CFE0F6311FF782D1D0123A120F657CB536A3810984871B69D25913C305117A7E51D199A56387C2777E349748B9C2C40DECC03DE7235F7237CF43FD421039743CA72361DFEF2491953A3C3F0091FE3EE064B838BD73E9E6EDF8FD90235CDB374892BFC42759792E5636D031795C0DCC70D7DB86C161FE7059CE17B6926FE5D024D6B1B9DD5608839DF85C7802F5655525B633BDAD0803CE14649095C0A7F870F66888C072C410E0E0854238BA7FB259901CAFE3570D398B621518193BBDD75258BCB53AF2789EC66DBE2311DACDC1F9CDB6DBD4BCDCD15F9C2E77E0D2736CD191D2B83389A71B1804A0FB5F2480E38343CA48EC6D1830BA3466E53FC51C4EF05F4D10711A78AB215650462E9A26D9301EFDF15A3CD5EEE14DDAFEFA45171BA3A757CD6FAA5887A5D5A98045BEC7FEB331D01A997282910B6B946CADF0AEA57973520EF0561B233BCF798805B3B048751EA086FA71BCAAE15F8BEB837CD2974EB3E54D3B6D3F99A51F88313FB64218610CD1831E2E6E18EADCFCBE72BE5818B4AE4F3780BAA7D8C4A55DAFC10ACA3EE7AB7D1337506C485C83EB0C41748C668705B4D41D926221D33C31BE7D56B42BAC7E9240FE4C2287B5B41FE88F9B9E19970D0E4569DBFF167EC42BAA2566676EB055B69D159358D23DABFFC86A917490B4942A220038CDADBE24C335DEB895F3472F0D22778BC79B169D1EDA9FD18B31DA66F0246359DB3EBA36269EC5F92E5A1A89560C7DEEFA121A7035EC2501C553854724C5176AE60F87004F6FAEA907B91D1C58837C9FE25BD9C32F66257BD78169B1A4B8ADEBA72B5699D4C2D14F67BB347EC8A96B04278AD9F97A9B40DBB56E7593CF4B3C905108F10968F0AE6A2E7F1D214FC7B45637A256ADA5EEB70E03C02DA2ABF86C36E581A31032DFFEF4343C3E59EC7A2A715E9C199DAFD3BF8C9B43C1D016DCD33E2590A20EC8B657C08E5C0C0BB4F159A07206504780715A252D1F4F5DC65ACCC43E3CDC255123A77792685C9B68AF281863AC89ADBD5F778733E95050ACF781FFA386B3EBCD633D6E8E6D4A42EA85F005AA80A4597D40738A8E8823FE3C84B10CEF044E9651E45D1ECDF59C537AACA58D2BE42655259DFE6CFFFBDAED252254B732EDC93B4D610C50DC81B576C5A5C5BBCAC0BAFD7BDD7771EF1A19C29D7A82E448AFA07E7FAA8651C11D1BD550DDC69F4C9C6A44435034D80B47B512155E5141378A94CD277D4BE11B2A383B1539AC9731079624E81D3A3404F5325F5D2EFBC0929F510529C84B1BC3E7C08F661640E55AC49452C00256BEB49B7A52DA23EFFD85B8C303C6EEDD2202768ECABBFBEE87FBF1DAA992C8439602B1645C462D3297DDA1AD941617B508E481A28D1540212CB281B5388A3691A26AD7D3CEF52FEEE9F59F477EC98AFCFE38034B762B9D4B5DF3BB312758C4238EFFF94BD16D9C39655CF07263CD6DBA96D1C0EA425610C1FC81061FAAC5C0F8E6AA9591EDE2FAA1AAB8F76EE18C514F282EE4B5E02A90A2AE126DA52A9FF5274735ECAFA74CB36D607EF299E0227E94B6CC2B78B1F71D6B5FB8BB4C78C09B3A6E3ED6CD590AD526F74CBF869085F2BD3A9DF66D7DA9DD06FC6748D8FBB78D98A4D860B362BEC6295F34A6A16A58BB21C9632F8B3A64370B7A7547E329B39BCC82D17B82F6E4ADB514444F62AA800C97B748D73B0168ACF2FA898C262820F8981713D00CEB8453E3E9E452F5EF41452A9C8CD1F1260000C4CA9AF4E6E629B13DFF203187C0DEDA08315AF24181015D2E68D6AA4E7E938FC4FA9A8B80CBF49E3A9F27953A05FC7609146EE39F09FF485015168636D1F452FF311D4D8749C31AC8420865A87A707E540D7FDF0D25F63C7F3AC906E048281BFEA46263B4350BAFA8B5A27E0CFB23DE145622BC2FE34DCF4E1B4DCBF60ECD5426C27B3559B73A59CB1B71587C685542F5E6DF9FE3C5E75A8E9600E89217343D29C67A7AE80F9A8589D82AAE7B2A1B8D6546D3CE2482DDABCE7FFD3BEB2F1009297A77503E7155ABD4692F1244A49AB32628947A681388AD75A750AB92C81ADFBCED0AF166326FADAE6B79070473D67A8FCEBA7F21BBA932168CEC2A754247CA324081900636D87D001A605C4E5C31AEAA44A8DB9693617566726C7120AD15D96D917F5ADD0D86A5A9CDD7527644EED58A9BED014D9F4C0F62FCAD8D7D5DA2899D57C5510EF15B7482CB3E087493959AA12D73D55E194E48CD128FBA2788829AB4A86C325D60227074EA55BEB601128D5FF42371E74972B802D3117E1F2AF2018177D4E994903996DC365D3B52582AF2085EE5919DA7E84A2F3A200F4F6E76F11CC95F87BD2EE5935CDA0D52D9EE6FBA6D59E80427EEF4B80372091C65E059B566C38A6B3664974396BD0383A35EED0494C2BDDC167725C4160AFA58D408978D5A345EB03A55127C6BFB08FC0B4EF7037482EA724D9D121E26F2249C0C7A927946A846A67FB7C565E86C8C59A49265ECC4927A8FC88873DDEAEF6F8B629BAA1819807F38AFAC501EC9F206346581174A037B1D7EA56628C660E17BA0A97F2E189299A7844FEDC562BE678B0606CE18493F717559365F66201AA598C68F99A8F28AFD74AAB0E3619BC342AE9F36D3811EEB52C8DF6544C96B679CF434B9C64FCA0F43DA73B9BC8FEBD609678F5E691AA706E3586176ACDC25652BCB68D98417D3FEE12B23724EBDF496D6AC3B35EF706EAC11BB0090066F3C421C3E298B00821C90DDADE472331B9B2CA1F1E53E6D68BFB059EE0811EB7E7FDBEF394E3E35E59BCC4B63FA8E09851843F28CD941F9A97E5B72C8DCB9D32F37B79DFDD1B9D7C22C10E6F65DF07DBC7734430B811BCDD450A10F491B1E0DA3746868622E457774D0BCB1B29F9C1CB161DEFAE78354B7F718D18F07ED6672665D35562D6F05A2B3666B667A7C57D2617711F27DEC15D0A4079519D0ACC6B3591EBF0A61A12C42A6820CBA755C07FC531610C4192A0BE9BF241BBC5ADF758FAA4DE47C6B766AFAD728BB1D2C672EE0969303E42AF789FB295E766E90319D98F0618C1B4B8BD31CD2C5EBABEADA30C6E43D03F380F4C2B9C3AEA20BC89B852BFCD042AD3C9440AB395E9E251DA758D317E39792973083B20B79BA36A14057E1DFFADCF903B10F8D3D4D35222E4584D520D6FF675D3EBE9FB43ED1B79252648A5E0C2552E388AA3D1168790A09854F1151A94DB4E5AAF1C941FA61B196D869B16051B75F56AC1BC769C6E7A7EC173264A2E56BDE4BB9952A422855D65AF1C209D561F8210FFD7C2FD6A540BE788BE3D2822D49DBD2C6B33299604A835F07A340C0184CC1854C2013817663EBD9E23F3B78DB8009E761F1B38C2DA2036F26819D2DC68AC38C18FC15EB00BDBF5A11316C7B6075BF9DEAE9B0A651527DB3E3B3039BA01398B3923A2C40DC4706A0BC186D2F8FFB124EDE35E8C427FB6FF05A3C2ECB81E275D1AE370AFDFB6F731E27F4B22B877B1990FE479239526C655796BBB8545051527ED0E532E0440048912C64D0913227C2F6657B8B80FDA076E49B7E3DBA1D0E23C9D7F43280A324DF16BEE2A87B87C21692FEACBC3348C9186DC6C0BCB7C1DBEC60AFCF4F1D76FD3D45A24ACFAEB8E7C95145D07427CD67003019AB57DC233D566BB9A20AB82ED4130D9B4C0FAA6F2EFEDC8977498315FED436F67F3B170877040265EBA49415B1B2904C8277A11598432B973AA63F628456AF2320D3478FE669E2835C00D13EEC7B6ABC6BB94F1677C9A05B2D0CB87ED3E529AE1D2E3354B1E30C6634E10AB3BB0F39815049DD5321B11B80CF1D1F1426A413D0D11FAE969F3BA266F4F7B60684224A6279380D08D46FFBA2E1D684416405A02A2AB2E260ADB23498AF716EE58B03C8CC442DE0EA201C4DE39FA7038EA4E0E1544BB08F149F57F03FA910E09C27303038EDCA21A618A54DA87CA747763EE6D4D1DD4912AB7E3BBFC999939F82563B944CFC5F4460D41A47573DA92CBB28439BCDDBEBFF16491C404B356E5889D33A034680F8648F2CBB1888FEAFC410FD5A3C8ED85B90EC875D7D4466904F5D4A4048D8DAD848313232B80FEBAA09D4D86F70045C0C2499A93610DD088A6263DE5AD71067B9B3C82E20658AE98677889BDFEC65C2574E4AB7C9059F1C13CBEC17EC630F9E5B891DCDE1E81552738D4C8612F3BEBD570EB39B24EC94A153465D1326765D9B8F23D7E4AE3F2782F6F9738C189D0D20C4DFCCCD37D9A510250F0941423CB9055C7BFED84520AB119FF921CF81CBC6967E9CE1D759E5F4481ACCC5881F9328093B63ACB7D04404D8C0FAE8747D39A270399000CB690CDE17A46E81DC5CCED183BB863FD7A535CCBC592C25B059496C45DAD179B83EE02543B5EF93213E10E2BDD480F7C7D007CA2988942F65E46B886EBCEF05498C655048C4B32A081A059A28DCF4D84AAA586F0291F322B25D186FCB5ED2DE7AF7EBE58CD8314CF846AA39C67E2F284162524A14BD2765642B31F31EF4704548C13D5F5A132E983203EEB91795BCA934BA7EB26DAA5450745333446D2B86ADE99788476A3417DB7FE9E53F4906CAECBBA984657969B4592F9213612AE6812C215D5C6E28BC89BB76B9CCC937BA4D4C6368CD4C491BDF41B242BD8FCF9DE2D35907F08AB80BE71EF90F84BFDBC6777A020DC97BCA1E963050FF991A4F0E1E468813AE1CCF05B819012377334AD6B5A41A87A7D7C4F0AAD241FF7D3AFFFF40D7E6D5E62F9884B63E23C3A8B96260A6E9E3BCEC001D487E3E75DF4D35959633BE719FE592C4659970C0B67596E9CDA4EE3B05237C02CF2E36FFDB7CAE37F0BE993FAC46DA6F56B15FA74EB4511AEC2C861C2A9253259268A9BB95468FB02867394AA8D83EEB6464A65CD15DAB6A696FABAC4661F439F377560F3D2F3B668A7648BA4017DB5083BDD0D76B0DE99FBC06D7938D7D2F0566D3DDD036CF6A5E336359F0896B9B1E3B685D963A0EA70CAC175574C5AD41E20EA1332CF103BDE6B1C3B3F117C21E8FE7450866C5036C244856B5FAC176671270EF7225BE7CC36D24498C92E5306C2870FA7839DB1D7646A62AE0623EEF3199E8DBE32020B71F23FEF2F2BF3C9E0EBF0FDC629D97837B97D76C99398EAB044AFEEBD5BFBC35FD48767E0FD01FC0DFEFA6640DA0B47AB5B2B2CFD25C8943FDAE6AF46C3898AA1FD2E2DD0FE19D1A9BD0353A16ED03C448B7005D56D108FF2035E948E3C4FB8F0F928A5797D491389AC431F271DD1C8FDDA2B1FE623D410190FA81F74E042C0BE9F97F99120DDF442D5A4ECD1EC9789DBDFA8C8E577E0AC5A1BA7DD6D5A474CAC3C2C04E71A14DD2244A30D64B17E4C9B081EA8AF0175D7D0A6E039B6A289EFEEAA20763B1F106667745EE2795CC588721BFBCA6D659D81192A02FF2CE11CC878CDCE73CAC9B92A972CC9340ABA7A03C3384ECD28301103F347D35FCC9B12B85FFF170894F7D104F34D95B56A23C486CD9E7520EF8CC0BD928EACCFDC5D230D77EB9B19EE274113E1F8BFA79FCA93EF54B86900859BA6688FD29444E03E2F14033F076FF2F23711129099051C59E0126A907B57905A021F024D98736C3F5D1AA11C25F32319546F91DCFD4940FDC7C4428CE78A998694E6B19AA3CFF470AE4582666D350ACB02CFECD0E9EC39D1607912B892479EF94CC67797F443EE6BA4008F46C0E61C3819C5F82DE7A7802E62E7050C8AC506186878F08ADCA8A7674DC3D0D156060AB7BB08511D2F8DB46EAB9B46AF359135030A9EB46A6137A9419D97C7069147BF5065712B1F03BB8B328CBD1E583F59B662B64C0F06ECEC8B71AA2213EC29F8968E0F3093AD04E739F01DF51C644FD4CB65AEFC7073018DDAA81185627B613242260CA7A9270FDBAC3EBEF62865D0341B5392DD5FEA4827D60D5AD1C9AF0739CF5BFE0F658E72C436BFABEFCC403B87AD4B64F3143DBAE1D2CC25130E65D72ADECA1A8FDE09EDFD723072D538792F50A067BA78D7E4749F0344AB1AC1CC0E8EFA1A42515877C4539EDE35556D444516474628BE9D8B29DE428BEFA12EF99C985F1EED4F937BA4794776C63033C03EE356991607473835A50718E473D036F3C522A9DE2E49FEC2E686F17A5023FB7E82E94B26A4AC6236E0B656A938BD7A8575D734F53CA419836110DF78197D7DE4D45B6589CC31F5057759B8402F43ED9A423A7D69DB02EB9357B1E51207161E08FFEC8FE286722159C570ED4AF63EB554BBA582404C0E978CEAEC1CC1404CD15BA22EE6D8C98C4278C1714695927C2389D74BBAC72C2516AF1E5D0C52066A656170091B68A7E4C8399ADE63605E9DA1727C189C541A404B7335DA27843A32E470FB4DED8EB5EFCFD30BF15AAF37D7CFF4B545DD09DE3E7C8D0E77427B3C0764608912616E5DA2A3B885688F25E83DC8D632BC00015C2C8E6923A3D9E7C7344CDE87D6F0DEECA2006F644F7BDFA0A524759B2B16313501A1CB8D4D762D3E9D9C8D32154F69F0DBABEBD26AEDA947485FE0B40D1D7731D7F4E41D1EA5FC645DE31CD850273B6EF9C374CC8E8149960B349BA16FBDFAADFF12E86EF05AA38B6B17EEF7B55D27D7CE27FEC916DF99F0715F1DDFB93C7E1130EDFA44663CF19F4008D5CACA48262C1E8209D0C353ACD72A542B93EF18EC7E15FD4C9B1633161D94B285FE8CFAC30FBB1E140E9561A35715AF982370AB4DDF25BC30850E5F0509297289C0045BD3B3912843A9B0BB88CB7E961639849B8A0A75E3E903182F0CC6C7ECAD4A38081BEB18DA72EF9F9439DA7DB2B4D59AF6CB71808E604E56E1D4BFEF627226FC28875888BD486D0C8052068D12BBEC6B27E9DCDD73DBC93D33EE66AB63936C2273525A517280FB4BC33A724D20BB7D988B938018EAC4738D03D583A71C16671B87CD60BD6FDD101BF2AD07492A794FB8696E84CF24B9707D7706F0AEED606C3A7FB5B1DF7FCF86E65F6DEAA4CB8EFFE09FE09C622B34574E74D4B061C284F96FB7937481FA7C204F449BE9B2DB0957E428D177C5525C67BD75D75989EE98D97C4D0DEB5E72E2B0DD62E66EDBEF0D22D2EA97D42A3374B9B659804F1EEB01D7743DD9AEADDEF356C7C4FE94077411DE58DFA5035271015AF65FD1D78C0F17632C10EA02C537706A7C14E3A1D7124FCC11F579333A68A1AF70BD3E86F7B1D13A3B4EBCDE343F36A2B226DC53A0E1A084EE966272EE852A349D7A5606F1AFDBD81B8C3CB556DAE83D6A34ED4F9C06BBFFCD5953C51814FE0F4CF5A697EEF5559886D92F811004C04FB399E06DFA845DEF183160BEF8546F6E8995E403FE0E464008646330CEC4B4149DC464F229A47E0CD9F89C83A28FBD0C1E758D380C2A7C17A487191A46C04C23F7906418B69E2527F3293588952919D220EDC36BD9687C7347AEEEFC8CD24E91299900AE4ACF018FA2829E215CB13CDDECC918DC85BBFA317FEF7D2FFA9E3A30D9D1F1B9DFA0AD0D641E800850B43D7E0B187F2ACFA74FC5DBC99471A7511B838BEBD6E2744C3AA9AA9D46060C83FFF803C148C35209F840AC23D60FD046B461CC2D776AF51612DD166E1450B8A998052EBB25D1C8F426391A8571C88C2012A8940CB0B4DB3223CCB39021D20142FB5039A6ACB250994AD7A99B1A43494EFFBD8D3692F213B46C6CE9AF3477BD6061398CB19C099F27F48F4F785E9E741988412F070F39727FB8B74071E007210D939B0EC5D6148A5931D38A030374E5C0B575AE27D49DF49A77245BE310E49262C56A616C757A80C5989F27962303825EAA3AA014A4C9C9E5B3CF93F1A031F82D6A0C877277EC41356D1BE2154F03D807940A1CB2848A6A23B905BDE9A907F7C20E333586389014126765CBA8D5C8951CE09DF085B5F18A24E1E5D638651687CD2A2F75CBAF738F65A8B24E7C67E64FFD9CB8A34A473F11996E3663607A49EF663C4D87A0F65D92067132B5EF3CFCFA9B49FF66CB6E363BC1C7EAAC392605200A5EE704D1E754CBD1C9CDAB75355BCA41DC129722F855215220092CF6248609DE9EDC5603562F5C82B5414BA305CEFA60020E1CD93FC756241FE7A20CB4B550D980A7266E7B23B6FFCFFC4461F925A14EF6584B02005E1D795ECFEF93312B3369C52A8A2ABF99AB5255E8E09C05AC722F37A5E95AE46B226C7319411750562DBD0296F0CD1326055577BEAAF270E75F4433D5312038854C30AB23BD51F1246EC46599FEC1B628137A73A702606112CF61CEA7C3977BCA6701C8E5F63132C15EFF01CA1EDFA5CCA8FC0E3FAD392F21972F857B53F62CAF3BDB75D556E6857067015E11C5E217F5D1C1AB1D603571F9EDDE04499E23D39DCAAEF16263A5EBAB9BEAD8F61B0ED942EF261E0ACD309A903E73AC4E4569A65FE6490F6DD6842812DF61CD858D9AB54D3456C89CFEDF2621426E3F9D13FB94177104F6EB4E30B018C01F78CB4FA9C89F453B87FA7D4716B96B0BD2DC532D4AA7D8FB9D264B095BCE39BA017E8BB90D600DD2C58647B9D95F63783B4B90BDB83A175E5201784AE000A493A387E16F5F0C5CAEBF62A360A6A927B3FE4CBFD310A3163BFFF1836FBF9770583FA4F88E5A6E7BE5796145890A41FAE8BD1839110EC05C325012E19C69C3868C7507D04458C074DB3440A0E018A23CDD32ED35E7A28DC8AA8BD63C8CD0A9F4876B56C04D5D3D5CE52A0601ABE2AD3CF3106CFEA6D761335F420EE3D277DA358DF4F6813D543424653B256E325346F677EB7F69B2FAF9536DE80E8EB018D978484509804D600783708D48C4F7100E0AF891BDFC75352C93EBCDC22C36C3BDC8B579B31AD5F5C9B2B08218BCCD1B29829A365DF4A8D5259753381B6786877A5250DCE6A2B182734E363B39560D3DF44E88CD6394324765087DD1A77B3D8121CBA61F665F9B719E75B740BD930D6FEF316325B8B3A2FDD93AC488714AD9AB525248EF60B2649B70DDE6849BED793264062B38EE74270CC190C6A86AC4E106781BB3D09F0A6D7AA4DDBB0116D3452CE041BFF4247819FD8D78304088355D8DE741B1A6461C74A4832ACF4D4004BFB22F6C9BB397D7CADC6FC05AB74919CA346F9A54DBDA80F8E1303A1D43239C5DE043C2AC21E182CF49BEF9BCFC109BC884E41FE2D8669915701992200BCB938A745FB0994E6AD01187C4A24212DA421A178E42216287DB1F6A25E8370E4209E09057E16253BF477A061399AD1B3FE985D6A10D8B05FD94B67F878649862D68F285EC0BFC06B7006589A590AE7B116EFEFC871010993F4768197473BF22AD54B2A8FDB0BBF2B181A2A1CB9FF0D0989F2F68B339A8D8B27FE1781F3DD6F7CB972D73E3DD702FCD0CC3CBDF66A6237460E3B2F45DE273D2BCADB96C118DCC19F7C1E703BCBAA04DA5370A5CB3B78112B8E95B63328B43C51557AD84B3564749C2802B52EB33458394747C176E119E1774BC905119312963401C1DEE02964DC9F1D836069CFBB9B33791C908ADCC717B08FE3C0AE98C0D5DC0C22876595AF95A02AB33BCE3502A92E532E72D0E3455A3D7EE796B3CD5D61DB902B8C0057F2D47F2655E95DF55DA562F632A4F9A2CA8B1D2DB8F5745A71318C37043D3EB08F9950D06C1301F9E9FAF4EF560B238BEC483DF0E017E3CB27A251156221F183F3E9B0581838D04BEB5DFD9EFC26B979BCAC7DF631F1ECCB777E2617EE7386C8BE9834D26B96D80074BBEFE8CBBD203299AFAE8E6F90273B92182CE7EDCA9154E0A33AF9981B8CEC94E6A7C78C4716B47790EAFC771C3DFDE276E4E617CC0DA50F05099B9BF587127D1D18D5F892E0090C8D033F21E7382738F1EAACFBA493D776821DBDFCCBC24B1D5F877B157AE6BF6D307AE9BA54CD053E68594505D038747A7D8450EC3CB4F2E980C5D97A2AFB31147906CFD3E9000BF166EACA8D16A532BCF69526FB4B86B1F71D2C5F38958EB11F9ACC438CCE14E88A11DC431CE4E20B99DF0ABDD2B5AF358260A64012F4A408C6840D365AB95167B54FD479E8527B5FF662161F75FBA7CF790DBAA51613DE7C52A2A94E4AB78E051F32D10233161A4EBD8682389D091B5C4509171650ABA574F1FE954698268450E11D2FB52C1AB3E4DF426D26DC6D5319FB762CCCDD552F4B1BF4E82AD1F78606C644185AE87827F022C9508805472136DC48E71D1C45944413485EC1CC72BC092D6F9990148E12C2A3FFB3D8C9F91C18CC9086F176733A83F2CC9BAFFBBD810A99B66DC3B399891B2045BA402749B55E7E363F5D062427A9BFA8B599367F1D07A38DA16074F75A4E095A528C26DE4083B044055F73D207A6571196263D8BF5A53B7679791BDE49E869F0F58431829396A34415CDF4CB986281840BC48857361281CB4BADF8FF5B86ADC76FD3A812D7641C5FC88A21F137A6980B42FD3858E2A057BD4D3FF57A5ED3F5C41C71C70036E1762C0079DEDE282175072A073A90AB83C9DB447AC07E6BF99DB04BF276FD876F4E4816B0294333BF3403DACA2077BCAC3889B55E76D62F58DE7D1C49816D03DA2D492D1F3CDB2B6B186439CBBFAABB645E9745F404538BE8FC4C698765A3C67D01CB54D404D2A2E78098FC334F0A375EB41C3031F57FF9A773612445AD3D98BD09C949616D45D55CEF58C74B4C681E813564F1903FDB56BE053280D438BBE5E2480CF279CE47FBAFD179E270D838F764C2E7F496AEA9C0800056F2E0456EAA7E59CB20432B65875455975AB37186D6B06FC7D0BEE743CB974DF92B19F4D2EEE82F36598F8E400DCAACA4EEB110ABE352D3A0F58DEFF8D51DBDCE5C23E84D1166FFEE5428541ACA407B9578E4295C3F79F9376384B630D25F11271C6234B9AA9C1B4C8015AC2C73CF768B9EC30C61BBFEAE1426F72FFBC995A834C9D4FB8350C301133F123313370C33FCFD711D1847CFA84E782F4B39762A02F9476D5F45237A29E3E269D16DAD60033E0907D5431C1CE36D37BD388024A020B612E1DE42492A3759AB82AB393237F4A1AFEB8217D2733916B7B610342C0D182C17BFBD4556B071D82E6C6E554F2127654C15671FA1A843347BDFBF9498C7B5E7636318C3EDBAF7BC4BCE123698A05538DD5D42F01970A41A75F0A46E61520911D86A39D892700AA23A033EDC836EBC17CD2EA274252F53A4BFFD5CAD88F8066744C737B364A0DD0B5FFD96787F7D18357DF728FB66B212DD4DACAF7218292216808E7B81E3514BDA947E436A301C4181CE53A298250835AB98DC89D0A3D6240C57C699A5BC31EC4CBF8C111149CF6802942256520BC7FA22968556E2B390E63C9DB7D0AB79939924ABF068BC3D44264D607F088A38FA67F8E25933091BD3EB0A3590F3E62E63CC6C66AF66128F7C3F97B76E62F1AB82F24D8C147FB2C8BE207FBAD7E5CD355230EFD48DC9FDAA4FD1C970781674E901D35D7C651EEFEE2356F825ACD348FF0FF590E8CBFA0332F77A063581E6F19F53CDF1BFE952585E93EA13A83BBAD06070850EC824397A9FF13227F4C60D65B67AF810EF1BF5D5EA95A5512F95AECAEFA25BFBB24CBE6785E91A4874E81E465AB91B1F2E990F37AB145645F2681B47592990CA78264DF8902620E796D4DA9A260D1BA67DF9BB0292561FACCB2478AD7F7D7CAB3DF179897596604F2B0F1E3F10CF842C311F49C6B5EFD5D73DFEFF59127384D3B4D855F8C412E949E3A941782C186413946DF8AE33C9640704CB0D930C12F5FA1C4CEC5883CDA699E294019562948AB028548FA974D6C56AD667023F9C417F067810C4C7E4A712FC3417A92C075423A57C208AF683DDD695AAAA5F027CE535412DFE0029B292D32B2366DF978294FD263DAF8C6A6F7CC895BEB1437CA189C2AD9B6FD5BAC06DDC3D075DF55BAA6E75865CE375DBAE862EEB7A51D0DDB5DFE03234CC8F14EA99110DE78A3463546C6CCE5F7C623028134968C59E247E642CE17D8933B6701DB7952FBCDC6CAF7F2FD24A241D82D8BB1C0F5D55BF55E57BE4AFEB4200C1C57938F4A6B1BE9AA02FA86AA811577BCF1D6BE545D6F12046735AE963DC7FDAA9A2F7270B8BB37B3BCEF7C73F59013041B6CF9FE10FAAA86DE369E868FEE7A37F62E2E9CB1409DFF11FBB09A76AEEAD0F8E443582319F6F74ED0AA3229BB7A50043636E881BD139EB7442FA35F5DE1D6CC227B921A1343E34030D2F1F361D7651C487282C907577765161DB781C49655A5F87BBCB68D08C04290B4A2A94B61BD0C7CFA41821B7F5641B899E90DA026290FDCFA4FB956414523041E14ABD7B1AC7CDAA1148A03B6EA17C49503F01707BD3373EACFD4E248BA0F8D4B845251BAA35D41DB186E10464F6FCCD2CAFC9CB06FFE9DC97FF41E07084B00B7B31FADE0E093C8968D1CEEF9810986821F1741F11A71F5F20C809F54852307FBF33A6C33C6A230EC7CB2CC6C44A3A53AFA49477037E55BE691ABDF6D4A852799453930A4B19B7C4DE003906A0001E0DEEF57CFDD2B50514CDD6F57FAA2859061678DB9F8B5AAC67442D8B737F635DC297E3A46C34735AE4D2C607B06964D1FE264B7786B8B0604781D4814E2A81F3A0250D4EDDB77C121B962D0E7109A738630557F5AD47F95A0971A58704CB5B53AC378781B48D67FE5D5349440261C58C26D9370DF37255CFE845F7B0F735CAACF4921CC9D55B3431C6C888787D7C2B436C9DCF1DB94FF0D510BCF15DF0DE42AAC7640741B4893C960FADDCE4261E6284681BDBFB0F471C864FD560DFD87DDFEB4EE7A1267E285BBF2966F6A8BB408A105034220F2565E38F6A15A45B7FFA82DA63965BF44A182FB4672E90BA7933A0120A449323340D0368CF057DF299A8CF60035170D197104B394CA9F2A05983980A1BD93CF3AF8799E613BCEF26234DB2550A15BD53FFA306D3F616D78A6204AD1D50FF4F9972B0CFEB48B76516155791C14E0C9E18457900CE13F672882BF423400D2E6FF94CB16BF3071F44CF2DFE8317A9B761FDC8FDE90D7D05827521B070492AEAC90187EE48D93374B463C3381C7D80178F54C676479BC92470FEA7069CBA95BFDAF099A994AB8244CA786E7767B8400464BD08D5C560D61F27A96E3886A4E821E0087E7A56F96DC6F6E85F1FDFB5C82FD7BD48B63EA794BDE01439FE4C3D7F08864263A0A8B1C1ADAA5DDE86B99EB2A619A12A1A76A39D8B1F04AB55B67D15C7878651BA1F6621658757B890DB0D2BB533BA1C6A5E3226DB4FEE7D561842EFCB5B459598CF5AD3F98217CA720B6781E83C2297C96F4F51CBBBEFA708AD4B3F682FA0C67C82A5F5797030E0724AE9715A911CEE347E80F774EC780DF7E2279924F67ADF9D07FE4F56DE99E06B58099E1104DCE62CCA82D100D90BAF44F26F19ED7AEDEAE609C04C530CFBEBDD161A2C324A382FC8234D405BF900F0B6CE895F9BD534A6474680A7D63C0CF7B4AF1D1E93958CFC02FB379AC09B205708A68D11683B9282564C06290F5E6B57E3E7A75D30C9E21DF8F27F85E1FF347B32105A000BC613006BD7FA6D845C8E6D4053FF012D0D85F99737D045871BE017D672C8FDEB16F944E3020BA7FF0351A303A0D3280D71CBDE42F55657671A79CA30A7A33E744E74B34D27453654DCC8E87911B3701FBC27CD16C4D9D6C29D1BB9AFCCDAB28DB6C2B42C5D6BC1D1386AB26669985B626BD54791930CED4A13716BC9AF8F4DC37A04184FCF711EFF515B92C943E53879B5098BCC4E87B98000BD0BA2E1CA3C7A97AC95C1AD145EBA3950B154888272A0ED49289157091DB2C55D43AE77FA3384BCE92E5840459B405237E194B6F5788F16B217D8BF7539EF8809FC7AE1BA931DBDB2A7D15F139EF4FDA60F02FFF9462777647D675309AAB8201B5FCC1ED7AE066FC0E4F32D260DD9406BCEFE7DC5DFB38D66CFA08E5CEDBA636EFC23B3CB7AC38FF7C390542C9814A86D2D8F676720B7E2FD93217F916F10FF34A1AF34E3B8563319E92A3BAEE34258B4DD63FBFED854E08B1A2F4B560FFC40AA1048F081E66748E05EC3EA02837272FBD9CBF1A658B86B19B7DFC63436185D02C6411142291645692A92E3EA6A113B5436B0BB78990942146956795DFE003A4AB6D9ED875FE7E5B895EBD69C43BB7317CA5C97BCAEA97CFC6068431B24673FEA931EC1DC1A3F72625AD531CD89CBEB0E07F47B26971059FEEAE3986E23286D13BADEA3585D73F1092E41AD041D59120D3D25FD3BB0AAABABA738049C91B22649E715F3710EA51C41C1705C4F1FFB1DCEC85F0EE704240EA8A20526DC01C7C8389B21DA979B99FBF445805FC5E7042027201F3517AB8BA6F5C3BFB0BC7657337ECCC99CA480BA9C3D36033336AFAC0BE172AF430A98D8462D46453E935805E594C18C0EBF735D90D5027067006193854E7DB6424688BD715A7BE72EAF93C2F763F3BC340EF4BCF90B03AF20C28A59F72114F693848289873BE3869590A64658C0A3938A414BDE86BE8DBC25165217B1605EB0402FED48DC09139751DC1DCFF532CBF599E9AA13F3A72142E05A1D8E47A4044269A0B414976670094C9785811628718C6FE5201221A5822E29DAD564B6EECF025DE7783B7842DEA40D4F72D083D112C608C596F25E09EA85BC6CBDEA39300774301C1C36790D7D9C0B59741F6B53E16BCABF8120112C81D70F30E44561EBF3A3A4571F207305BB3A292C46C46E285C246EE9A7442F869711F52D921EF379DF7CFEC4CE64BAE4D7AE7DBA3CAF47EFCEEE78B477C02550D1DABE4FF4EC67A38A705F60706D948C017E333B645C0D80AAC1CEA393CF3ECF711CA3D59ADD7CA02DB6C5E3F259B4ABC138D24C47A650EFB96AAAE93E69F08077D0CF38B230F199C3B353229C529278DB1F5846086BC8F5F54F9631423105673FE92799FFBE5DE6ED167658BA5DB5AAAF921926FFC27956758CAE8B2367E3C5C5C6CC81DA875AEBC8F3460275C4EE6EF43570B4F571994C7690DFDA3DE311F2FB77057732B19E6FFC96221DE1DAAF9B8CCC21609160457365877519D2B332FA3A85B9801EF435D04DAEC3643CBB5413A036CC1AA0968A40F4EB5A76D2D0C3DFCC53C97BB3896E855957B1941FEF59048562171F6241AF278F6D6B580B4C94C5CED65CBC0F810D46E864C2B567BEC920F6D1DE42CDF32300805E6022EF184B43C1733F809F98B129C937930B984F5539F574AE144EDAF7BABBF379EF1A1AE69B7B4FF9212BA817A4F223FA8B182FEA231E7029F80DB126641725C36AB4AE950725435561C6FE37F960E37927585026B8ADD92E4ACA3B4500F0CBE078680D16DBB90ADF6A127FBC7F791B4F93D5463F8C71EEC1EBDEECA881FBDF3D2940C2EA0F8E4DEA1074EB5C0C9EB34534C9C3992E988DAF8979FD8AA90F540F028708BC6D0EBBFC00FA946DEE5E9D01CC272A4FE61E5B86FF1347340FE64F650996F65E5702A61FB53EADCD457A5ED66DCFE1B019A79104842C51B60142267392DC51F86F69367C25B999B3153C1B7895298B6B1B43EFCD8CEC3694F90BBF1A417C48E5CC4983782F874A7C64E05BBF462220950DA9E8F56BA324002E91D934469225E57309C7F562407DB900267553B85C4314A63351F20D57DED0B3D210269B09B976C07878C324F74758D9D507A4CCEB4AA30CC9CD05CEF32F1174C7B0F7AF93875F66E3A7B12F163920825885CBE5092CB7728A1B74B2F3FA9A01264214761DC5101BB0C18D65BF972A3587F95B3E13F52EB6D1F334B15220ADA5A59497558EAA0F4ED358A995F7444B633FEB900EFD9528B51FD82F5AA30699900D3EA3F3644E4FE3F6F2900ED45DFD997FA905D91521CD9C898AF4CE09B6EE00A15057C17DF4C656E00DD876529CD75A169977962DF3F6E4CB6950BCA37A79C98F108AA7B02AA488AA4ECE05F702B468C20C81630F51F884AD74A76491DA378DDB8290ECB8F5879F019BFB416BAF1D9361126F3514557403415F286C8E77C0BCE4FDF0F4EAA96D19F22F189971155F749EC19687657B245D392BDDA62935A44BF6C82E0AF3593BE06745099F06DC4A66C0768F17916AA360988D5E578D169CA84AD1A36B12CA4929223BCC52AA9B47FB138E999CD6423D1171AD3BF87B5D405A174B0398A689DB4F99EA1599DA410098772B05B5D7F9AFD485A04CA036BAA9C71AD5DAA3EA5F1C757BC83F3C0028DCB93DDEFFD157EFC2CB29C0F8146D6704D34091EAF1EAA29AB915E652309491F0BDE632172914C132CB9A533E97F89F567A7A9B0776B400FDBEE71B49AAAEAD156753F5BF564CACE2C1285C4E65B5D8B2803A11B22350ADF79645AB6E458B1C9E2031C4D4D6361F77B53329C3530F6EF727225DE668A960FEE1F6D7588BC126D0E2AD23C2ACDED06AA2331E9D0E7F99234A391926F0DBE610C600964E89BE1842CB1F1551D5CDD4AE3FE45B628E9A990C872622C9257BE40A8A124FFD6B135BDD2EBAC05E2DDE5B7DCC13C76C27C8A3E778063F3DBB3488CC52836E92A89641F4559F377273FD51FC45550C727689CA4D5CEBB26263F4268502658F40D4EC2BBC0DFD0E41F16A399F02711BCFA96C2456EB8A77FBEB852726B0DE4F927C13CCB329F8B9BDD760D1DD299863BABF42EA7D7F6204BF13F7355610527A38E89F66D3D73522B421AF013197D649D64EAD17F6A6BC8148D9989E786AAA94FA19077292015EF7CABA4B1545CA9CA20E5A816D6EFF7FCA31FDFABC611253FEE80FF0D75518001C2DD6C604387C2656E1362A3EFC1AB85461A5B55C6374733FB6B17090E6EC1186EDCE2C49EAFE84B139C66A2E8308CF2370095B0129B6CE7FF6E17D14F79258BB3E555EDDEF12E634A5AF748BA40735B90BA1E7DE7EA00D2F4A8B3BED32BFAC17D10050B420DA32EB6D14035CEEA1B7951592AD75FB751FCCF190452FA88AEF45080161C5544AF80FB0FF93C62B02B2E5D1966F77760D446F2625C3FFC91A07A5E852BE406F1638B521579FF299227769DC4B88A805E168F08ABE606B5D745433584BEED712453785B1C01D2B9F1020BDB7EF11936F0BC449EF26DBC2D5FB35A2131BE9C0DE2746DDB6D0356294D0E09076C9A77A076F6B659B7B4F54A06BE2F353A3A0EDC6A5123598DF9BA1CA852A5D1FA16877A78D88F0B367E6C4471758F0663A7498CB1C8F13B03F0E2A941DA89C717A15143F4ECF594B0DE2E43B657DD87E4BF536ECAF3820127B1FBBCC0BF2E53B9E0E1CF10191BA9B43D4D33FAA379B1B543C593F1BD5CC05E0B7511E8D4925BBFC5923AB0E2FA90D05ED580F56071A62A334408D3C454C892328AE1DAF16CBD530ADA7B858DA3763BACBC989F056EE1D46192CFF6DDD7F066D2EEDCEE5BC6B72551245EF8D10389984D3B3455A7B9664475CF6B837D72D42E49BA2F61298DE9BCC707209D7F1E56BCECE1B21FDE69293D2560B8940223E0AE966459C249751A2BAB98323F184532F4D6FA396D5C0AA2A4A41C75C638DC3DA5822AD7D3D7D51FE0811ED3673D875039D3625362D7D00356E8461FBFFC49FE1B0624F6D30D550FE1F5FE4211341B9D57D210237902BB7C62514AD872C1CA87976809717817AECE1E224733079478A5DDF5F2A067DDE111A3FF911D0B511A6AEE16046039B229C00D6D10317F66E1202449DF20CF28BBAB4112948C65DD7342D09059EE2701B36E2ACAA6A9948F818B61B9A3155729EEA670D4AEDD6F0AC314DB12E0DA62FBA01D419F7C48B09BEED87F7292FB0315A597CCCB7B51AF776509818A73A0BED7A656AEBD7ACA2646605797940CB737548E83653E204B6A7A5AFE2EF16EBBFD73484314C5699EC8D24E899BAA0E202F37E3C8D8B5F75ED34417E608EEE4B26B453C07DFC6E62FAC215B6122CB14A07739E86FCF816398DD49970AE8A216BDD8C4C478647A8D07EE8BBCE6631C22920474154B3C83942C842A728EDCE7466565D9A6BB030CE684B23CE558D0DE0D584768E83A066B9BF6A12C78D173AA3262866339B86EB8A8D5208159C5873CB29E9C4C0BE918CE4E8DA85C85E070CAC29850CDE48E2DC5E0609F419CFA46EF650B9022273AF14BD9EA28FA856B7BCB580D8949C1F732F87EB34BC1257205BCB6820FDF3BD1E7B9C99E114B3C7607D01235E111E3AB1F30E8A9311F0F30B601C833FB0D8C4D76AC1B02F85E93D4C3D0205F735E20223410CCF56317B6A12D07F3BCD42D2023BA0676A00E7268733C41C8C7DED2555FBD2BE09584B3063BE41BFE93340955788603F1D52190B35FFB8148CEC733CFC1BA49F609ECD3C4512A99308043F3C377EB65870535388376C2C748D18A748F5828B3362666C49F803828B4A019F26D6A9362726E32B650A85523484C4BB2ACFCABD16E754EECE0466D1B370175C37C8CE9DE236FC58ADFAB4FAEAAA12E048BF40CE084467C8835A1E209D2CD67C5BF01E0D62CC78A12130F5EF2E3CFCDEDF86D489C4C5D9AB99484CDD469F2F8EE5E14BE43B9EACB92E72237FB54F9615627EEEB193EFF888AA0A908327C61C50D20C613C933D736F6C3D7F60969A5D3770275081365BA8A57DF600F10A1652167AE3E18AD3715532B7C4BAD97980DFB0C4F69D9137EC7B21BC72AF16F0BEC30B94A4A5C2F55074ABC6233CDF4D8D347F4FA942944D9B2539D0211B24E2C7FCB56BA877371AD7701ED087269DD643C4B62E4B40D3F6572C0730E465C5ADE50FDDD11BD30C07EFF35AA6218D0B73B22095D320448E0671E1CA59BFD52A517A50932A06C4897BA6F7E7038A39C92C20F6DB18D6F6AFB3563D10BDF48BC194B79FEA6861F1CB9756281E969968B65161D3980C4CBD036467850EDE9397321913D57C1EBD7743A44A12E8C85F8D2D1EFE2A8754B5ED0E93EE9649C53F28129130DEEE66E58181787137B262E1EB3FDFEE0604ED1AFC798B198044DD5D0A3E87A754C7EBF0852953ACF3371BBFA0FD5979901252EFF69473FC5655709EA193DCA2A2BA63D706C84F49802684F80C576706FCF1BCEB2892B9179A72B7CD886AF36C7D3ED09270A4077C481736BB69A333AB4BD864AEC1EFA944A591608A2469C85AA6431C47F657AA9C2043F373A69323E735B56BC8177E1E37AB03BAE93A7B304EA1C5C52B244FC265EBD674FA7F1647E29CED527FCBC93CA7A56A4E771D7D2E576C40B2EC736DDBB4FD7411168C5C568C446D1E454249E6F7529AD83215EDB62F57D25272F351CB2C40965B1DB65EF5835923EC2D2FC7D8AD56B67980A3DBB77E6C4415F54F3FC00A790DBCF39A2FB699A20FC634F1B1C177C37898A81D7693B21020C6B592E5A6359AE395A841B434B675F1C30A9CDD0ECF987ABC2406178EB2DE941393AB4F96BCD43626978AEA548173413EC9DEAE7B53B175AFAAC5A1E02D6EF7E27AC41268C1FD8DD83D1AC55ED45D087083C0D136048B7F61EADB94C88CBA5503000A90F91A39A8C9E2DED567F7FA0DF605AD7870189600B941B99240A15310E7B3FCCF5ABDDB56D50CECC06B4303BA39EFCAB2F7E9F5CC8F542E96034145115AFE3788DE0A4985EE1929D4935EF975E760DF7FED8A257718DFDC5A0B4B87024C59DCC6FEF6F2715582023C3C80EAADBC7AA8712FFAF80CF5E159CF5418A1CB50845C97A7F19DF3CC5FA344562DFDD819DD736E9ECEB7BD57AF324256934CE6DB0CF295AA0ADC5931D339027CCCDE1441891067DEA40F69F6EE07187F9B78DDF6D59CE02EC3BA6DD68F06851B10AFE9672EF84020CD53ECA25B3D5E527405AAADF60593A8080373A387111EA898499F096FF46FC588515E8CF42FC33A8CEECBD6E1B65BE307A5BFEA9CA59FC51A382C24CCCF012C38DFAD3FF3DCA3180934DD6AA52D828439F1052A959DE23BDDC3EA3F2E8CD70F7A765F77549BDE6CF8E444762DE51CBA3431439D1F1E42F1773FCA2F90E48126A000E69C0964B1955F586CDE1895419083322FB4E6528F61768F8BE4CDCB37FE9D02B27193A0BD79D15F3CC9AC6DDDDC82B02201BEAB86D13EA560F7EB5328AC0B534C52BB9D266F291425EF1607A19AECB9AD681815EC4FD1888BF5449421D92E473C21BD44F2C419A0B3E0603EE3C5C82E56466C5A76B76F81A6C394BA693991A5808334EFF1E996AA1B1394A4DAAE00995F02E9518053FC744BA391214DF2464DB9F01A5A53870173B3E8FB6B9B698A8DEE80745D7F71B70B811867D3513197B32115882348FC704B2AF8BD6FB3BCCE30361C1198B84865162734719D88BB62B7431FA39D452E0A1B0A7E45534BF76B6AEC48DC25B7487FEB4B5FFA9C56CC7C83E39AC196987747D664943A600B106F0C3D6B2D0D4425073EAAF89AB33BF6AD76B151CAC32A670A2B03BA31FBDB48B949D3074CD9F56D39553708CB0EF2BC96170E2FCAA3CB2811EF1C67FEF6FE85CD450FEA37A04A07EA732A696EAE8E76D497F5C350CDF72F8970FAD94C03909F67FC895785D5DB6C3A68641D68895AC8544C6A1096DC4CCD45A68BFED7ED86961B5E035E61E9C126319A7B3C1468457C423C4A4E2DD1D42BB90C8BDE2A162F999A8C3A99BE998B9DB7A14C101CE78F08857ADD9A96059DC22592B90488D77D6F0A6D459CA65FC947D742714A42277A79745C73CB157BB825E65872D9BEF5066C444229ED1A097AF6B0308DF2793A2284F911C764BD1158742EF4109CD8AE6111DCF8A40BE03409FA6C430829D0C9BA28B466916C67311F8BAEA2D8CD2DF9C95094E4FC6D43F4491AC5FFBF05BA6B7DB9D7FE4A6DFC386D136B1710DA5F30E67C8DE97A981895476B8E4E0DB5E1AE630C8034F949AA4095DC81EAA0F645B0B440138AA7C5C7C5FAF3B57E1504A5FE477CD61A355D9AA66C39FF89E2DDCBC1862E19102205A9F343FAEA71D4C67192D4D5A1AB08BFADAF6753244BE5B14B1F911700B4A947D53645DCE170401135D0D7E968F03A9B19D2ABBDC94BEE623FB64C1DFC4AD9040197C319A79391016D6D44B8EBAAD5B2F1AAEA58AEFA21B5B3D9ECB66B3B70626AB31CEE5CA759499073B4FDD96457392E58C0EC871B95C7B77F74B81C4CF5B1B243BD35F4D540C1CE878E80AAFC635D363B9D72DFCDAFF62FA8339BAFF4DE1EB3E146DB93E7E444403E0D4290AF501C841B66302A345F5541B1C797D630B5B7E788A793192CE1F362B22B91A837184106D852391A241A903E3BECD192C4FE52586BA4044C4FBDB20B711D2624B6CC13E0C5EF62F2B2E00CA516991C7572732DB94DB809FA0535D2E8376685506186170E3702903A6D08996BDE20F74BEAD391245680A029FB439FFB96EB829F0BFE58A6446B00B4E1894BE1B5017F706156072E2DCFAB25A3BED2DB310DA1A7262ACF24A65F41FADAE3F81A32077BB9CB64AADCC2F92B95EE56F20CCBA24DEC9F5F75B36EF1A101D0F3FF6D730DC199869F8F26DEFC6F51451BFEA2C0EE77CB17422E2790A8B29573405F112EDD704E3F46C7CD8ACF0E495C6BA9ED448B0B89A9997850F09A813FB23788681D3CC04996E931CB00A879E2FFA1BA6A63F9D3BBFC20405244B0F838A040F125AC2B4999A197A2D53DEF8CB167FB7E37DA3862CE3ECB57B081DCFD98894E45C6019B9229315108E37DCFC57C9F80201486AEC4368224792A5CD4ACD64D6956A334DB4614EE5EF8F98EDE0B4A5CD3D06819A4858EE0037DE64ED93BCC7FDB47E90409638B3789BBC63134308B972765565651902A9CAF4F310E93BB08EF1E4B325D414DB5DD7CBF660A880642A27378A7427F2627BAB3444149181C54E9D3FB7967DE33BED89AAC255A47482835D17E329ACF3F08F23AA1DDEB730D9602243A6894989EE2D900FF6AC0579864C2361EA56CBCE2F39A75A12100670AF3FF1A36E98D1931D17CA68D8D031CC527EF7FFFB35AD6E046F4AF1B2B3F66210D978F8607039BBA99AFBC6A499A5A948C5C59055A140293CA97306BFFCEE37CE77C114478D0F73D1C8C9954780830D56878EB786967DDBC71951ECF815CC4266D66F84195CA1AE0375E90017FA5C66DB8329D668BE6C0BFD85742088B7A3256A3277AE2A1F4E72BBB82BB2A59B08FC59FE5F24EAD5DF43D95917A144B4DC6587C893314D5C2C427EA92D02E6922FB0B60ACA646092E0D4A127799FEE4B76587F26AC1EB89BE0BA46F2A212ACF50D93D3345AFE72AEDA1A0F855C45AFE14161E22DA3E223CAD6B47E591896F4283F10C4073AB524CF5D0ED88F979458BB928F1C179E2C5914B4CC52CC000383D154830A54332D4C0E652F98B91BC086370B04CCB1AACA56C9A33B9F0A65C33467BF45C74905B67607B83FEDA063857AC4E326B4293483C8841572174CC8A384014945F5C3072C5575A5BE322E3F2FE3A7E30F3F21118FDDAF23645A40E0A359A3572153F5C3ADBE1BBC4EBA5E063E9F73510C5D1D4326D3D7A20384724279C3B4795C68BA332EA706E8127672E41DE4BF1E8B5EA60B39CAE2C3B7B21A225115BAE051FB0401A69A7FC56AE4B7E31CE2CD575D82C8279E8B8499EEDFC134503E6798056324B17B8AB045FFDC2A35B190B39FF212C17C36537A1F99F2EC3A4CE693DCEC7DA80861FC6F3D064B82CE5581F9781289A085A300CCEFB6E80A86D961408250846A374ED00F5379F446FE6E551F608AC3D71346B738C75DCDF63E19EA79AFCADD5E1E07E2F7C0AC709F6428FEA1DCDD835E3F56B026CD8DC9D4629AFDA9015295C2CE55DFD9C83223821682B5AF876B1CE156343A0F4C1655448FEDBC992602BED5DA4B299B86EE2F86D02C757CB5696B32D60357B21F9DAAA06EB3BE2E9117D2C99DFBB5328B3636F41A06A020E3CB47851891AC3825369C037B0C0D8412204FC3D5FA9585F3218F01295375A09463AEC65F591A594551E19DD00D5738086A31712AE9FA7BABD4E9C10E9F4DA82C12EB2F3319E852B96E61EAD2F85BB6765DAF874FC8AF42746F14B8FA489DFAA9540B4D0470CB31F99B10C335F672C2E06E8A2378B9DD28E8F56BC7A4C017327404C79F1E8E67BCAEB5C4C793C176F0A3C1833007FC44103DCC6E273C9FD1909AEF1656E2B5756B7F4D69F4F2EA576228DD794777BEB2F34296691A1FC38AE44FE60A44AD894CE92DB77FC0246C779C13E8AA16648843BA68CFC5E4E02FB564B0ADF3163C5E167C275A8C15E58659E2F70A3AF792565422D3327CCE25C9D488EF3C32B195066BD27DBD44EF1A20AC6AA22250BC0592AEC734477E1112DC3913F6B7CE323FD1F7B3F8299B8C9BBAC23487F735070AFD5C3627506D4C96B0A1427F7EFC07EFCC62DDC5455A77B57D3FD0B8CAD30A346F8C34F42D87827FAFADD54264A323907A89334C0E7F98AFC9060D7767BC9D8D261BC0BF64FCA389BB192A9B4B00CB566D254CB0226FA17F3BF21E2926CA52CE5DDC401E74A92C7989552CA66675A9BB9E9C198BCFFC488BE1DD5E47DEDD94015BE09B4430F77B7E7E40E42A52452A26283CF3A29B02DE3398DE5179773F2CCA4978059495B9DB13069B00107462C0034064A024DF3AD33C063F9608783E79E38F706B92AB117029EBD6156CB5D278149875B95AFBE877A21AC3128BD6D0B11D31DE7A2BF7CCB68911309BBD2215F592D56AF0F700D962E49E4C6D089548C7587B0598374C3D7BE80F7F20D6855AA28A27AF668A8AD3552CFDE3CE0B35DCEFD5240C8FAAB89D013D0DDF5B66E60328AE32BF4EDB8021E43762E96E5999CF23BF2457B1CD75D1457D4926E7C2A324BCFF70A7CF59047DF3F08EAF2922CAE6A7BE1BBFA3BDDFB864AC965B7FF093CFE74B53DB332B411962DA01D4E6C62CE6731E893574A097328CA7606ECF373CC987F98C31AD74EB4A863084266869D28C07F9C5B5F10385EE44E463324A81D523DFCFBABEF20F3F71FDA33B7EC1B2A35A98F01D13693CECFF23E00CBDBA2A2D09C8A86A819E82D781AE88B9F207889EDA1EBC54CADE6A69A564ABF48F950FFBE7A86243C544A78362D9BFB6CCDF20CEDE386B9E3F8D7EE0E4A58596F095AC1B99E4F787472A734252D6C00B177FD2B99A85D49B9C0F32D728F7D9BA4DF96D1BF6C365F5F4EED7D38727B339A223263B58560ECA6778069DFCE48703AAD1BFAD59CE298C6BB464552408946265B1E19C1FFEE000771814FB5E4688140E1333B270F05EC9345E8BDFA7B412F295AE3DD4DBF33D6D2D62582887D4CBB9EB55F5FE3C1BC32DC689548B66893356704968C143AD3CC2E48BDC154620ECADF336E218FF1B22521D183EB2D13B15A15D39A42A25B46F1AEC07A14CB805AC382DAC8CF96829B8F1D241CF5CDE5D849DEB242295D7870432EBB642A45A6C6F1C2786B88C883B9B47343E822978155D079AD9F6C8CD4A21479B32B2112EB0121C3C74E7C23284812F74A2B413B9A18D6372AA3E09BB04A262E7FCFB6FABBB074C7C603C89FF607F83DA32DA50F2A19C38BA0965BEDC7A961966895E17A20A4D8028FAF7B6947A1964601DA45643C5FCECEBDEAAAA83EA5420F2984CB606E9F3191EF323D644635EDD801130893D84DFB19E661E04188C6CE596DD38C11D1CE5DE1EDE0D15D8FC427842085D300E6801CDE02768E44BAFBB302684FD945C9AC722561B0EDA92E8D845EEB99F6FB1889328C74D6D9CC6DAB59D55463A613AF33226660C0C034B896075D9EC2F51165A754A7D2393E15955BE327587943ECC1F3BB97180E751941728B94948B6648D2C606D66B9BA1898FA28EFA38A413B066D715F7DC5F0C755B6A3126AFCB606EC6B12E332FD71E386ACDDD1DEEF1533D6386AE5994BFD857380874B14ED836D9DED47DE4760ABB05E80DC622C8D7882CD74B2720884DA747BAC3ED9A6EFA2287D5F7D6AC7821E79C79EAFE7A68D2543D7CDDEDB63A13FBA4B894A6D0B3E14C44876364C9FCF93DC066CE953E89851A49B6EDB38661C9316C82ED902EEB894321C84331F6646A5C1AFEF832F38AFEAB89D181D3DD1338DAA236BE0E87A6381D00845CCFCF4DBEC3D41F8AE1E6F39167A499945DAFE77601147EB29804A8B98E7EEB31DE20C84E9148BCCB15CD02D1E3B519EE0A2E4F70F57A69281E651B189C08D575D52E997E3A435B4CC86F938BC79EF4961CD03DF8B92A8C507DFB2DE4D5EB0ECAC2F3D712A46CD3EE01B8D4DCB845D23E53A2E01DF3FFA100078F7B2467A45BBB4A18D14E0CFCD089433959F07F6F60F651DD7FD9828069D340D048FC079E4F8B92824D54322611A3698FAF181008DB5E3E327EDC431A8F6E481484BD5A429D0F5DC55AEA8A18F719A7865B0A7D629A25F82015CD70688CC461244E4AABDCBF2CFFC2D73A3247F4264101FEFBD5759FFB83E8ABE9EF5B6662DA3CF7196385C05D0E5BD50C71D3CED424AB805AD632F2C1930868ABEDF493BB4E3A9DE538D8E35146320EB9F5B71C40E6F32E9243E6A25F503B68EB484ECB73C436930F30E2776D17A2E5F9CAF157F368E0FD9C26A9E9AE30A30E15DDD8A56482C85B46F973D000292CFCF0021577E5DCE8220353E23DD8507D0F561BBCD96F6FAA451E9C595E00CE0F99C8C40359B103D621CE0C837A3D1598D814BE6E22B7A509DBF1ABD2EA60955364791A5910414646F9928B5676ED590F41BD128A55549170211A0630BF5C5BEFEA204896C7FBB40F0C72E40DF19C95F3A0ACD641834E5BCBD26E91315DA34708E2025E0B7D38F9513945DE44AEE57077C8CC32C707D9A39BF098E4928420B3FDE8C74F39F81790D827A628B8F2776251F51095C1193B2FFEE8C93F49DF6D4E3C2E1BDA52F7356394BD5A675543493E04D602F332761AA1D57DF3EF8213E4E9B8D4BF6C8BE8BCCF661507C394CC9D5E9DD4D81DEAEB6D638FB9225247818710E4724111F522610075AE757AB5ECF6FF32CF087DEC9A04A7DAD8C613B22F2AFD31466574AA87CF0B8545B38C53A8F4597D5F1BB6837AF26114D72C609B624252722DD867572D449ED7C170F99D4ECB995B76C8DBD14F50F3DEA077FBE4F838A03AF1DA6757C70C5F3394092D7EADB1E0A859A8487F70D9F7EE523AFCA08DAA5F8E9260D63330773FB7EBE01373C3719129E483DE3D132697EC4C108654256315A38D7060C6F52B4A444EF33E87946C2537A3FB3B5FACBB0F3292C7F2498F0A11509FD9678CC7C678D4623DC07D8F218E4B65F2EB844D24D696A31483E1EDD1063AED60D7A110F7992E3E46F8C7D5CB1AF02D598440D79D649AA415E5F3ED033A8FDCADF8DBAC48F9905BACB37E31ABB0174CC08A9584E25B94423BF395E097E2D0B7ED76B55C6231F180D1A7BD969F6B874B9255138A1C3A2847EBA159C7EA281433A39D2F88D724B6350E846B365BE838F25B904E7B02B12ABE543961D33D991D0DA93310CDDA1EF551D7B6A02765DCF0D870C2BBF578BF8457CA1B599D0FE445B1E9C39E9C8756EDAAC6A10F62C84F60A27268FC5B436A323AC5BF4A9ACFC55510558C5A354D96A5D74F69687385C123C497543EC14C40117ABE46C22FE54DC4D2D6F4823A7F3DBFD3A1FEED428B90945B8F6B2C9A162F9C0287C758603E2C7845A11DDFC37B815A62A1A665C3FC003DC9F064CD5D950DEE02F48505CBE1A1E515E6516E926FF6DC0123E1E4F94587F1F1568DFBACC3728BDC1D153196CD91D9F6DA84ED6B70D0DBA7E7DB4A71B224E5122328D1DCDB9FAA98E88E9823A49E7560DF822D67C908E9AFF7D429E84350163E49AFA4015337532B6E928BE2001CA202C5D975A3E54808AF8E110575AD5FCA28185B2A7D8A3019B97AFBA933BE2F9CD5F279266EBEF52E0B92114AACC30237B712FE53DB1B8596CA72DC82BEA99DF8FE845D390B8DE1C00F24D0D9C619651FB16A280102CA8BD7FC3F7868E4649C636064F4D0EB06D06595A0023E6C5D32654EAB9C8EB011186A32C3E5DB9BA6489895FD50A26CDF1BC27D599F7A8BD1922B30187E0DDC54AD369CC61E958661C4FA76054C2C6658AECAD7D0AE23A9F36DB1B0E1141ED6A1084A8EBF8975325A1DE4A679BBD0E022BC35A07B40C52FA1B0BCDFE17BB6EAD099088963D7937CFA5B51ACCF722FE4F9DF99DADA8CB05C17B6A6AE884F1C7DA09049027D6EA570BAA064736219CE1DBEA7DB09BFAC777848D427BC9D39876B843378E100DDB87ED269AA91097FA433CA7EEC7D6210E7F100C449876F83439E3E494941D8CFB3E11ED7AF04EDFFAD2729FF75A8FB14A9BCF386ED8D95C046A326A9A92D3F316C758F6939F14BC88789B17F3DFB5AA691A872CA44E908AB966D5F672FB90196D71136ED26591404202AF5858D44C8E0B0ADE3441F554040E458F5AA64AC3D5B32399E453FA1565F4E71FC9EE5BAAC97552AD75D0154FDE48AD914F6D59800A7FEF91BFB6465A296E217E554631FCAC48FB7FDE1244F00697C2155A3161169225109AF5AE218D51D70BFD452433BED94FAFA5920B35353013BE2CD0C32B8AACDFAC6C6B4CCCC2C222AE845FD76630E963CA22F5214033FEDEE3296112F9C127865137CE6182BBF09D1489A1DFFA82D9B391A5AFAE6C80414698703EF03BA42893786FB10C9DBD21E7292E197A2959D605EC466CD202BB4E7BB1E9D5B9B3F07F55FD8637314E3D68C763CBE79982FCCC0147AE6D4C96F7A1C251BC35D8EE3A4F6FDD9CEBF771878B80E3AE481619D80B7BB7EFCFA9C20F11A0FE18505299EF1BB195EC7A93263420D183BD89335411CDD66B4809BEB30AC649CF76552A6F08E9D77C2E9C5AE05FE469705E2E6F44485395C054F401DC6CB9F581E52978BD93CD927D47472DC52D81960F98D60A061C5ACBF9F5E4434B31BC3C55CCD71CC2F2DA6385A3D040DE8B8D5F5CAABB6FC301FE3D5DEB95A00F01772505201B33464F2BB1D45A2F55EC907E86803A94F9340960A5E99C727517C520D338A41320E7E8BAAD6C4470300DB904B1848AC84F67F67C6BDD6AB71E2531C5C662AA9DCC2E84634A5ACA48C5A5CD1CDA454C6689E2484274EB1A2D1CE2D94876F4978987331D16AFBA205E1D81CF287E5E59A6DE000FFFC99E50B0B124E718CAC8FB51A708B42C0FE669894383C01D020E45B301DB2FE85B177FCDD1A688264A0327614A4483BFB689DAA49E8F59BD2D3943BA06F39119D46E5DCD0DEF78BA40798384BEB03292F231A62F7B6E456F3542425599B2BCF96978626543266E8AC0426B3C4346AEAA1E2FE20B54F70273A5DEB9BDF92B8B4DE940C48963DDC569FEA89B4A6940B7644E33D105C5BDC61C3EB7D823D4CF3FA0AC7196D6004CF6654BB4E4602974FBFCF6E74FB58A83540254EAAA4ACFF41C5E1481B2C38E7084B944684B21B7C661F92A28508F449D8ADE8881D40AF4A161A08C5846C78FC5C562CBD36ACB83284223B2891F73947804B6AD40BB99A4E7D9ED1912448C99E5B572760E53DFC434D06DCCA06DDAD3BA09DE063378A98943EFA0CD3E75B1B860E8D1350CB920BD6FBE30D437B96290F49E37BEBCD2FF9F8A4BAC7CF8F4571DAA9E788A3A411AE231D369D35055EA48D03AF54D968EB71F7BD14E51A1E617F81B492FBC3AF3761C601CF108DEA9E198BD1B576F94DB9A15975CA55D356C209E5CE1D8329A5D353223AE3C5C9BC55468AD4C2756BB54B6FC66FCC3B0BBA3962EFB4ABA17B1B08B01C296A578D5AD63F605BAB75C90924AD456D53CB72436F3A2086EE61D7C3479E0381A52715292DCB8CD2833720572A40CFF97928D4EB54265F3110714C360A0479AE7D51126C5CCAC09372AE7139C20C46AE13E4C41E89AE12097C6A198A979DCE9FCBEC5D1AF9D9189059E5E317B77B6E98C29F38E29A35FCC3BEBE3ED0267C5503BAB0FDC46C7D89766475F2676C80CBA71110F815A84CA7EF91ACBA63AF7933056DDA345D527DCB5549C9CCBD5B201BF9D0C82683A8865DBB4DDD057002025D088B7121C118B3A6C901BFF83DC111418A25B1D741562F456B84CF500F138FBB34AE1D18E9BD6FBAD05D0AFA14BD1FFD10334E6AF3ACC7AC2698BA10465ED5EC26B13265E5ECD1C79359095F36B1B5333EF87E78FC44571ECC00F294243FE64C4BD7833FED71F3B6471ABDDBBBF4C374519D24DEB11A8D2EBDEFB8D2CB3BF517AD92CA598040D0F5F8E5607CD879C75E15755087EFF796EF432073AB647C9DCED072FCC9DC74D78326EEC1BDC9CD3272180E38DF556715CD1D37DEB8B6BA06B81F01C26A3E97B9475B688D32BB642EBBAFC4406B7625944603FC085B38E5E4C9ACF0D0F92A65EC9BAEC8AFD9A1C7805854B19EF516BCF65125603F131084CD13BA6E72201B13C1897D0ACCB8C4266884F3439F6833D22C08A68CA0EB7B636D866182E6F42B35EE9E255F3FD30014F4EF3484EF31FB1D17A6FC0913DCC1443439494BDA221336D05CEF0FF168A9C54830066A6E986672EB92B2CA01C7ECABD5B5B40049B2161F8F52445FC27379B0706866AF20800C521BD0DCAD90E8F4367929A9D21F1921049FBFFCB2BFFB69B27A2A4FC9E48256CE24302A57B69B04D6E51469D5D7C7E41DB6113693322E1DAD218FCBBFD47892E8BFDC28FE1461AFC769286C6F75165CF945E5CD3C9322955261922B6C00CA2C006070EF26141BD8B44798110A9F20E86C52CE88D6FAE122FD7208C9216011D7D91750A800576F575B8EDDA2545B3D60310D61F7351CA1C82C90E18641FCD747FE901351524B9D0B92CCBE86067EE5F126FF4B2C582B280CC1549CB3A18D5D9FD25A09A67DB83A8F3F7DABFAA3C09CDF00C6F16D722EBCE259723B97017885B70CEBBC1C164E1A5361738B1F3FA426D077AA97AFC56F4F147D3EC04E52AF0CC518AB4CE8B3ED66A1EDEA49E904B81DF00EEABBB5EA8437C18C0282EA1AEE445331C5B0414C2E3CEE637933753B30FBD2160E93C3E7956BC032FF839B81179DC5C41CC81E6B8A74EDADE4F6EA0FC2077D3AFEE342D75DDEC1539F5C00F640A56EBA718A77A88E2E8070AB9663037AD66D9B6314C268806C2856E233D37BA73E61B8CE393F9DE86DF5C76610766DAF68A8DADD37C3146F59115E8AC18330977D7BBF677C755B79C902A50DC457FEC314323927BFD45DD4A5AB7AF351228986F3B03E51581C8A8D5E4F8C24ED9E14FDB5D0D6BD2A6F563D66A31247D4EA17CF6C158BE7FDA81DBA14B9A1549D5092658BEE5542BCFD42C8DB540447AA13F208223DE36AEE06BCC2F280333D81964ED05A275EEF56C21F0BE0EAD9D6A8F2C70660C0CB04AF6D84E0D18D3EF56504CB18EA259BDA23AC1D8CAB42BC340448283D9CEF770872F3B94FE85A23CD9A864F76FA82EB637086D12244DBBB9E7B2951D3B0B6C345E513883F261D3EE312A31017BA33A08586F58084A8087144CDF634517F42AEDF185D53366FF728C0E7C0748A776F3932CA874D3C2C48B30D01A5F579DDB1A038AE1E20D986515309A13B369F644A856C995C2F6942B7E6BB624A0DF34FBF31CD9F96C486E530A2F3FF8A43D7DDD578D72B1E93338EAACC244650F8BB37AA9CDF721B1EDC334755B63CD34AAA832725A883333A4AF4ECE71416146A4F05232968680AD41C89872E14AE1CE2FA65B7A3BC099FE265173B0B7159662259FA64FB70902BA09988A30697F110B892D7D6C763EF80D6E904A2CE47BECED5E98AB2A3BB70A73D6AF7175BABF8CF8F38F2AADE3BAFBBEADF208415A2C2FD4A1ACC3140E185A2534AFFE6C01EB30FF0137503349EEDC1F9BB263C18F427E2B119BFC692D5FF44421208E8AF146FDE964C2DEC3E1C9D5699ED01A7D7869A39F2889ADC98D94B5C678A3D3D8736BC17256367EEE3FE8EF5AC6453A0691D894F1F3202CE84EA8BA5A341D1733C6BD0150CE9C0019168E67768B33B64DD4C9F0E2BCCCF2FF7E370C2BDE4F403C270F36937119950121A840913CC1D663F32F01B665840EC9E09E5A9C345EE001F84B2C1154359BC066D29E0405941476C5B7B11CFF124F5324D4D090E2BC49C3E8D83122DA9268FF58B523EAAAE4493217609FDD5A5C510038CF383B65FFC7671119556702F630404C0BC686975E853C86AB392D25C853964693AA7F4A63BEC12BF51762DB46295D2062FFF24000E4F9FDD21972D747ED2F37DBBA2D6DECE1009222EE06B846FB7D49E8014DACFAECBEF2560CCF5E06EAD04B113D1F8E341F200DD8CDB3F36AB99B566B16A84F8C040ED8827F0E9F0D4FA340B0ECCC98F5CA4B05A990F3B410CAEBAFB409E985A722E4C442F59AF3ECEB1AF0B148A3E8B958D9F6C0E45BA4EC8553332DF170872E60967E106BD27AAE4A6C15D391C1B4DF7D77357B4D4E8B29FC874947A75CDB1A1ACE512C5CD08405F2D9F21D50197DC151B5E5A735F759628BCB5A70B5CC9855A39188FBBA8E6BA0F5B6538ACCAF394A809C68F810441BB81CE71F7DBB2A11D3905225DC9B1F0F0D8B7E5268020039E03FD97D42204E503EF98C26B5D9DCCF5424573775E536C4AA26BF4B0351530857B8F640495377E9A08AE82F227BA487FA1D945EC233EB1B42C18FEC4BEC651D4CE1313C9574976F092A5E52D1B37B5D4B33800F5C3803BC6ED2759AE3F6888E7120D3AC2F24729A08B2B4C8D44EF807987C156DD3ED871B0A6217E9783A78BFE56C819F2C8FFC2D2D83945FE846833E5ADE3F840B53EE67E5D13BF0B7031B6C1D004D274F43C1982C43FB58011389D2C7E9111B8ADDD89C37756F1E4C4A931D828ADC3597429AF3A00C0C9A71A44A62F922102CABA479BDDF25A088BEFDF630E2AED4351A90B9567FB6DB5FECD6F168966DB2EB6161DA84479DBED9090026C3CACC19B91EF5680A40073FEAFCAE161E3A2F0DAC9C0A5A7AA31D93B425D5B5A7BF6D38FE797FB53793EED791C82DDFBB2D224455349F26F147FE0D59747AB091585DAE61A32B04DCEF19D907C1159FF69443843248D75E772B558E7AA0FFAE2A9D2B6B1E9F34B79DABBC98B2FAB34F76FEEC635E6E756F7724106D08F296019FDEC94FA7B7CBFD780F2C0B75B1D88EA0D5885237F4D09F03B2E8E1A98879656AA33AB23583DAFF96D8FCEF548302F323A8BA959710A78A803185D88A9C971D9491613E5BA2044D0B640FECF219CEFE377445E5256FD687A15C9F66475C0270C9C1A7189507E881DC6FD5B31FFF9949342586E24C7827F260CDAE356F874CC7C913ABCB40E892E495CD4388AFB84AADB45069F37ABF7DF966CBB8EC86C0CA5A86E79350DA5D6BC2B23EEB51B9C9C352FD9D3FFAE368891D8FD4E2861B8002BB16DA0C4A96E6A9B8D8FF553CA1E6D85B16F996FAB677FE58608BF58AC1AFA9482CA957B03924945B4260A4147625EE657C7763B4C9F4C00466394DB4F222DDC16B72C579FB80B3861D6B4364007FE856DD8D498F3732AF3A7041A2D71498ACB3793C250CEA60DE84FCD0C227A08F903A0B5ADC936FBDB7BC6AB8F7AF002266C8740AC3D75B0628EF6A05C0481CB283E3645F7D8A0ED7415EECD52E4BF70F00ADB11BAEB947F03140446AF31C2BD41F1D34D75FEAE64B91C6007CABC91A07DFE8AD753CE183C611178B8F63B822F03AFBD41AEF17F6A1D58F341D172D4682F38FED397FB01B396352C37397991D2E1473784900B439B27D6129F6C84173251B68B742EACD5A1BBD49DA6A4DE039831B66B054A9BB13299EE828282F1779AAB7FDFD82F4CC3296E9777A03C64AC4F08DC8882A9454B301264284F7226A4AABABBDC8336CA2BD1EC6517A9F54A776446C5A12FEAE387629FE5A66188C671C80A6C83B08322C2068ABBBC03261AAB8280F4E36507788CDAC4D3F0817327FC0D19B0BCA35D89819A9DC2D5C0CED08A87AF8DDD99304505EA08855CDB514357F8A9A7F3F4D062705E7B26632CA617F640F4D99417CE5C90D432D6B8955DE269460B9DB3C08432FB7BA08F5A658DD79DA8E9AE5B0751152847EA6ADA78D0BB4A8BD9F6E221990CEAF771B5AF603F463D2369DF9BF556A1CE60D1EA6172BD05EDCD166255810C1FEFE029EF21147DFE8EDD5B333F6C7274997E1BC61F253AA375B9CC6B5B64BE8DE11CA00C9530DDB1F218870611D4037BBB88F257614EB7F2A6FF395376C5DAEE4E83C5D11BD6600DEDA47D1CAD95B11E5BCE680D2F18CF92353A11840DB88C38B363BE8813E8004D2BC1DBF95E86C64E060F735C404E8945EAA3DB31A27C63AD818D96EDC6B0111CEE3B3E9F0E1B7DAAB22364FC1B36D25ACF77630DBD1E3CDB194FF8B8D1BE8ADABCF4D0760BF5CD406E982E0F743AFA2C4B333152A74177DD79E64566BF34A10515AC0E050CA135D7357E1F94F1653E9EFB0FBA0BEA1C2B09D6378E4E33EB98B5DB2A2DDA5D9F29CC68766AACBA09DE25B338BEE82700203628ACBDD4B828B34856910D0F2230260FF41EC371D08BE96EE2E821A1F3F328B631B53BECA81BBC74A92F608F2B040548BB5E805EAAB46815793F1D01D121D2E347ABF1FE62B4E00E31C8DAA01202340219430E88938D859D62B709D43934265B9DA9DBDA01537F54B439111126613FFF46ED0A39B2B19C22B8776618B065E15A515B752E1846F51F8469CE32FA076F47A5C49541A19D54CD63512DDE1126D7850B4300610E066AD53E094F26DDB40980B47D632DA9B4524EE5473B521A8F79A4B84CAE714B65E30824068305858CE9F39BB2EB06821C3C07EF2E030DA4BB3DC2D7A29A69DED7EF7B03825C663F5EF44B9A1A174ACFBB164FFFFF0419E13A8DDD108FCA9B2A8CF1A5A2E0471046FCFE32555E72D857ADFBC123B190B48CFC91CE8F0BF86CE2B439DCD3AF6F2CB26EEBF393FFB34290D2B7EC33FEE285547BDCC922312D36D9D25AE5DCB0A03EB0B603A6F75A5EE878266221C9B606B185250231E4B5C8B9470E5BAAA9859A963A51B83ECC111DA4779F012AC23AD2E2DF2965A39E52BD684A0E8D2406A173465B57BA6DC095298DD716BFE30E42CFDB0F2202D56E97772E3D64F1CA9B628B6EF2217A837165A1BA1A8612638C8387EC3854AC557C326CE88DA10F9DA027B204CFE634A695F2B59BC57F987C613131DF2F0F6A5F6081C96098DC03F82B3691AE9E4F14C32324CE495FC94EFCD1CBA88842223DDA27999E0B1762C581162FD1839352E8FB7E4FC143E8D3C774BE9BFD7BA4C3091A04D08EFCAA98B5D3AEBD1FBC65BF1CD7BEE784B58A877D8AE9DA9B3D459521A53010D42242DA0181F661F7CFECC2E74BF3C8E959D84F91904F4F8DE602B214A2E3C42B93BF904058FDBC37528D467E323039F101209D60C56BCEA60BF9C3714A05437A978F3601FA625B31562B5C9B5DE2C6B84F560FE35296E2715D905BCA71BAF6B577E7A03CA4A5DC816E79E21C9B688B0857887A25AB624E2233FE8C9A80C6FFE9AE77108F44A72AAE91885BA9541939A34519C457C41964D4FBD492E11B2890BE2BE0E069D274621FABEE609344545989EE35583C07E91C0FF1F5FD605F39D51A0485105A71ECAF9C7EC0748F7FE5FB5C4E90F1A59B1E31F74912BA831BCB9C95A315008F4C7C72D8AFF51DD09D9E4738E72C325B128E03F7D90915066AFC3FDDE335EBC4EB34895FB9807731EE6E123A28E815E5927BC9FEB02AA960308978D8DB5E131A22CD601D88069D145D4366FAF97FD7B71F4B39AB73A97C715BEE20A175931D7108AC1FCEF63CBE82D9CFA3569883A448220CD92C433ADD11A52F72303BB4A5D1DCBDCDEF605913D8D424F513EB8920EB864641B5833A39839822AB8ED011762756D6E16540D544B5CC8D9F8B671F19DE2BF7ED74CDF8EC9592CF1FF61095D0749A6404BE49AEB7434C75379DC02A87D213FDD6E0E6DA751657D7D221BC5EFFC8211F6C86B0F77096A81B1F60F51C23A5D525C3411DFF07CD5FCD54A60FE7AEA7E4C182885B2EF08BDE99995121FCDD5DDB0335DAC07DE1AEDBC9E988D7D90CD81D30E6C8E598BE6743D2853D975F236E6AED206846FE8F6AC9FF72C585606FDF6C25F5CBEC0C47567F389D5F317DA01F4A801FA2E2CA60344EAC2CCDEF9274608D8EA0A0D6323A1510FBE7BDF1EB8C0F580DBD3BAD17B268BB6E232B109504CFA3DBA305C7F273F8FBB7D8880303492CBED0B8AE374ACDF582A945A1B1D2000E71FCA445CAB59EDA8977E5595734A508495F2A742E30A006D383FBB6F83BFF1D0DA35805B6CC6A54BD1A7C3BFE81DCBF47021D6813B0E28000AEAA0654D085A9D5A0F0E0BEF802AFCEACE79FAB3F85E09E968BBED03B00AD50D079D9290F7E18904ACA46A2F0472E64CD16429547DA8A35CB1D9D532D4223483E7CDCDDD9E406B4920EFDD2E134B169A1DFC3F2AE54C3CE78A121F9F46F5D7BA6BFDD9CA25FEDAF0B2AD447902DAB3282AA9339C235FFD874C5E893E7E171CA838678C05936F9C9F794300DFBE63AA842A3B9541B07EF486C4823EF1EC56ADDA3143B89052D624EBCA9DC5A3A68E19F7E50E4DD71F4B111B24459EA8FB211053AC3CEE16F0D2C75B68E6F264A4E2874DFA99D6C6B3330B634A65D1B3617AFD7C32981D73C8607996F107211A7F37C6D6FD1D72B56432D66A8CE99E30E16847E549E54E7A3EFDEDD39741A55E94B1B735238093F856D8690A813E0ABCDB630747EC7A9D4729A6E0A70F001F5867E9AF613E9A0494BBBAA59CD1D75C83265E494530711F18313B0643890492BD13B49296827D7444876A98DBF99A6FDCFAF7883E02FD4ABFAD610FDD2BC8306377EDBEDA3EFE03041101A489051431B91BECD6E9DAA5633C8E99839DFE70F4C156FC2B1D27ED307757E0335EAA699C3FBC43CF47E520CA1404054F38D13CFE0339D87FC1440504AFE91AF4088820F7A1D8128ABA53DAD634250CB0C467592C27D1DDF7C64E7E5308567375FF73C02951DAE125866C53F845852C5008A69DEECA708E5A621FFC81C3C932319D15E867AFB67B1B1E07B261ECB56A013C441A7DB94523F103E93D95A7A0FD95141A6342922D1A7130ED95F4B1FED18F3FC61315A1FF0CFA66382BF10DD284AA4B54B80FC2415CB8AF7F3E686AD0664C21EE9F20070F99A8A44A5D51D8CB4BA010659C3070EB3374DAF2168562D89FEFB10100670663E71D029C2B09107611C41B202B0815DA2071256988918DCE69B35F46B8AA4F11DE63CE565AAA1172D7CAC8296B9334FAEA08D3BFFB34264D3487ACAE3C9781C1664E800732C387F9D65C152948FACFABD175C0FBA3B45F9892F8E98F2BAAC48E304EC9CB9D2A41487751B8E37F3B58F66710EA2A2CE02354B85E56EF7AEBE52388F2BC6298F0B96E3B736B5A6EFF22ED079C8AE2FF586E0F4D53ADFB17300D11CA7B8C2E79C0877970ADD0579DD90187CB8095278FEA5F4BD3D9123D300100AE63635463FB5019926B9B53BA7CC826A14EC4B5AA5E9B6C72685B4517A4564028FB6D5584994F8999F9AE7E59D4327FD95C2A45E83A63E9D9F04B554C8906E0E2095448F75DDB68C8057F54630BAFEF06232F7609282B1EC5D0AECFA93E8A7EF3E6FFED7F6E4A2EB8B82D22C5B9AA7B8617DC13B69386742C09C2055AE5C2E71E73EE0DDF1D23E4928D7120B8C171A4F4421DDDEE6229656295430B936F6AE18254A11612B9ECAED23869178CF6B1E6ED7430958039A7DA988C1DA03E0DF5E1D8EACB7C726A9108E5472329280184861ACFEB110ADAB5ED03ACF5EE7E806AB0C850AB7E2256F817883394177AC0E0EF5B74E27CF6B315D0F134B282EE527E32A762C1AD06991C733A7F2E23776B01EAD68363A361F28F381F6190635A6BB38CA9461749E8E3117CE4F767007E2C38FC0EFFA4AAA693664F30A5704D369C9BEE225890021DF8450EF25B28CC123EB178D113B07B99ADC4AA47FE0078EF3D750B2E600B09353CCCC8BACFF198EDD2B3C551C212D005CF33763875B3753E14B14F96847142410DAD4046C9C8340946D922B6EB6CF2D2BF3ADA92A492D2C43397716A4BFEACA01BF2051E029D5C664E4D9C3B7248A9142092DC25FD0DE44275AFFE90848463E7E68A7DC4ECDBD5325AEA355E111929BF700179AEBAE60E26AB2C6ADC3967AA55FC9A2BB1CAC49098C16CF85C569E2E4A146568C41C815C76629061A483AC30DD27ABAA1469C1AC6C527BBBA5BE8BB0541358FEAB34B1E3EDD7E37EAF307AC213055FCF44E65882CCC9A12AFE5F7FFFEF4262C19AC072C291ED636C3FB1D36D7B99F77E93A5DC2848B01595D8DD3C7DCB95075AC52168897126055E8EA8D1028AF2718DCDA34496ED6FD1D86B49BA42F77A714D65D594965A748EBE83501D963F7B8D3EF55804B4FD5462D12571B77384E3D23C77ADDBE7F4BF667CECE0717C7156623AA6FAED9C1D2ED3C46403F750951AD8BD192FCB1A7FF95A590D085E7A733DB1CA0A821631245100FF92A5B1F63F53A6D831EE041966571EBA5914D81F838FC3CC5C449BC39709A489CF31B7CB91ABDE6FC8BA6E4D41E048D5C59377EF4DE7BBFA2406C6F400232E6B502A10802B420A11316D93638A926FD0BE4A368A223FF767B11ED73E6DD1AFDA6508D4CA6EF3517CD3362CD1604CEC574DD35FABF6D5004208146C93BF179ECAE54D9794FD13C34053FEAE2E7286C964BF2B2371D9BA8AE3F0114BC138EB3C304102846E65E7908B40358BEF9F290038FC645979951AD82D98106440CFE2261C5BDB6BED587C19EBABC54469D6ECA9D9DD59A92DB30868297CECC90AA8228E28C4D1B074881B939C60D8A4530A193290C5E5399FADEBDFC42CEC5FC2738DB18FFE9FB20B7D443FA3F1FEEF91E65279460D27F6308B6B0F8B450452DA56E81D37851E8D589F9B0822ED525BAC86575FCBA54E67BEE4512A7F215820E1885F79A5406772A8241FF96533C644B1B5200FDDF4CD1F270E6EEC77324DEF0150183CBDE7D042C33DC0C27AC6F17D670D379AA778E6EF48D41DCB6C9F0F7C5E57BD0A7875D4B2D8E31AEBAA58AAF78947683E373AD517DEF236B037F29C2A09AA4D596609B7AB761FC8D7F566A6BC8840CA626BD36B1D50AF74342BE0B54475D0AE3E30CAE146306AA540E0D63AC325252DD66D5DF50AF7C1D3A651E5A145192E1F05FD31AD2F37719B62DBBFDEB84EDFE0D644909DDBC6F5221BD70BDA886C59D62F7A95BEB41276DC3B5B505D883DCC478B697388421D5C217C8DD2E56A4130A28BBD7176163980EB820899CF74F3074DD7E74A77B54677A35EEEAE93C32D44EC4D2E4196366E40FD0C2A4741575ECFB8FC927142229E63FAEA97C51E12809FFD336BCFDDEA3FC03A1FE99EA685DAAB6F27DA6BACACD5D432352FC6FCC323EA9BC72FAF2569A7C6D55E1260DF0963EDD6CD3CCF97A033F74201E4390F64F06F89080C830986F8D6E90AFED3BE6A54202A59ECCEF101E5DB790E997918DDBFA1B160D472490F3CCC2B0E1C10AEC61ACC1F36BB6A8735AA86C50D2AC986721C003A2A8F1056BB9910F5A8D62D358DDB31589280BD14319C27A13D847D84C02A039B869B52669DDAD47CBEE6892E2A881A020867405FC1756DF2AAF2E5706A16F53E1E459BCDC430C26403F60B979A4D74F78CCD34E48321E67A8B896A162C873CFDEE8D58BE234C34FA20FAD472F0EB570F5B2BDABEDEA0D0483176163E20E47EBF51262B19442016EE5867BD3345DAA7CADFB2BFBF14B4EAF986951B024D876150CD64B7B0A188CA79B122F274FFB39F1EF88D5B9D36437AE8BA43770DD69E3994F8CD673EC3E1F0A51E798271AA7793CACD7E53E27A325193A9B9FA33ADA3BDBDB9A916DC8BC6188C3D4C38848E3506E38621DB57C2B0FA80BE5CA34C295159163F23ADC249BFB1ACD94FF0A42054C1A2C304F3C515B8B44F2AB1A760E784B95D9FFA905EB5541D14D5F12B4489403645A15F004828AC8FD3D8B44C5C070E8A64BA086462E5CD447C58E0D96130E9BA3400CD7AC266AF3E3D33DF214D3E98C6B7585C552979738879552FC758F04B122889E81B887B653FD7D4A8A5CCECFB0850B58CFD4BE990FAE223803EAE972D0C65A97960421D3FF5B2B75079AEB42A92E0D0EC2F04967C91CCB84FE6E39B6B136CB64424686DC6CDC4AC39C26BFCE81478AB6429D4E9B4877EFFC8740FCB5D9968ACF8D69C771E9E48CB542BA5BBF0327A4C55CC83E466D6DE0E639A54576D85A44F305958A325CE98A45E2C227AA9E85BED652F3EA5CD31AB99E299930F5AE92B12E10D597F69272ACC8185C1E83412A67CCA39DB06A77329475A3A87A1D4586B191E2E8E7C3EC39171CE6E775E7B369C8EED0B2E74A7233CDB5905F6AAC099820A227B6FA0FE5057CDCE6C8175F4CF27D70EE76CC0D769A324AD66D013A3F699C7F024C22C03B353177C3D721EC56E472AD6B383A653FFCD078774C728258146BD8D928B209C0A6A8CC60069F160D33F673C139534362B58E065F7D1176FE95F4A6DB7CC75FAA408C4FB09B7026DD640BB08945B364646D9154D00CDF5BBE432390607904BC3D70A0207F696152CE6FC5A0BD79625E437197B929203CF028384558071B625E0F8801EC1B13F6DF17EB8135687F08071DFC3BB06C8EB4ED296C821CFDDB7F2779B0B913E623ACA6E3C5FF023C58EAAB547BF1A67EA020F317658E1328FC845F65464D2E06ABB63F678A94614E3EFE281E41ECD6C85FE10ACE427FB1960BDF06630B20CF0401F450D71D3FCF0C477682FE342F5511DE926AA24E776CB9C798058A7576E1F76ABFD2C86B8C741230D6D95ADE980ADEA22547B88E607AAA8C3462FA34114DFA46046848CB10482314D1240516AA7EC7160215A54F69EBC39FE4CC97EF710BB7E8B55F9AC158B7F9C87B738FD993D2F0E35E4E9969FE5FC4B301BFCBA8A28D7150602ABE7635A2FB48AC65EA29B829DAE037D8711127F80CE85BE003B4F94E958E493D7C2236DF970D7DFE8495CE083E79B777D44F96C6CD7554B01374AB97EE1246C2DA82B0AD5BBC76968B6E058A821418E0707D596E2A7E3AD9AFE623D18812F269C1D347A732BECE58260D2E8F1399AE5BB928716865B902611DA70761A4C3DB3EB0D332E58E081C08D4AF96B1A85DD68CE15A8EAA5B95F73CBA9975924F8F9A3CB57249A6A904A33F6471ED4F389168702EDA2054B4A523B6CE189B26C50900913CBC7693C4E447CAC4CA7B783106698CBB78F5E793284F27E182CE12BC792935FE38CEAA7F659967111AC2607C8316FD3CFF111DC5C2D58502555AA589010F9DE4F735D456CB9F0896FEB163984710BCA11C5D78D9ACE6CC9E2EAA70B177A9D33D8C59245FF9773AC181548BC82C751D59A350C65C895AA79E9B57FBFA2D17F53EFBE0C490B43C3369B71DE45B9AD67C88B2A8F1AEA2F5D871970FE9D4C6D63F81647DEA310F76DE6C050729DA4575087E3AE8F6804128FDA47C1867A6FB5065C4186C47D1199BEDED29D26BF9825676FFD9A98BF91E3921A07EFC949D7473CBF04E6647390E33CF765BBF73714E0AD38C4D1EFBC3BC4144CC9AEEBA0B9B4843F910A7F9CFDD347F6DC1017C010DF0EED1A71958CC5BB8D50BBEC164E186B6572FD09715C29611A3A5162496968C1DFBC1B6A8A4E617922D152FAF2B08BA40E47AA0E9F30515C9AFC74A5C2D87828BAE5243BB7988DED81731126E4C7E9609863929F943930FC72D0F3A4784990E08145485CA0FBCD69BAB2391C82E75BC2CB2DCAF0E94A3717B6A157070C77A8A3B5DD1E30AAB09F5368F46F66575599C04296982E6AE8F8C334ED24CC58449CAB0B7660E0F2BB9D96BE515245DF9654EAFB5060D21291DB8A2D820BF372E795957D59ADED6A72C265D19C852312BFDACCA65431B9AF4DA6AD56B97E9FDA9AE4650C9165037F353D9BE92322B4383C30404706D102F15D8D39B21D22E0B23FFB0AA0F58F477DEBC4F130BF501C765295A54913A7A0190FC907BF2420B329B97F30FA65A7429E7D71E572E1BE0AB0793B606F480A1526085637BBF89CABDBD9D19D808F230AE48505CDA9ADE68FDC826682BC406D4A7575EE913B60769C3BE4D81A073C05FE2BD6D7A1C3B52FD2F22875BE856CE0F6D7A3AEA1897FCDF951DF4A86184E717B4077A25D37935A82E073373ABBA58B0F5F744CE52284D96200CD90F0A7B4A03869A93C9371B7F946EAF2EDF35ADCE873407C7BEF0A750CEE48BE3A33CC47979648FBC5EA7E79DBC725C3901D4D05BC5B804007BD46E48B424665763F028E3777FC1A00F588D9A26F68DC7ADEEAF8214B747B409395016A05D8C72FC3E838DBF7C5A222D03699897E5606433CA760C6D67C8BECAE0FA8C312C9875AE26D61FCBD3A320829B615FED0587E4225E4B62264C9B37D2D2B45FDDCEFC060257960DF6A1AA2AC0544FC333914D192A1629061730213B1455E6FD7A712A08122C8BAD77EAB9CB9687AF97A3AFC02B8F413930DFEC10DB37C385B5643E91F3345C73EF353453F34A5EADC8EB41CB098E9243E57258AE608C9FE7BBEAC524B21A0734D8EE51EB30DD6974B87FDF3B0B1E1DB01FEF13061E4B072DAF927C99BDBB7691069E2493E86239A69BA33AF82998CC1D7B368A4343BC63EACEED280415FFF40B0B61221D7D1C098C6391E5C888228045494F86644F34AFB1B191BFCFD1A29C678956DB16D0BBEE458AC6DDBF00E738198C093170FB37F3F141619E65502AC57E9042CABC72372E5FAB9DFF5E42A00EB023E44B4E536706FD63BFEBCE1C0DD59E465A61DABF566EE7216973ABFF5D34A5A62518E12E8352C61BED9348E5826290EC0F84C4251265EB325D261D721A84F62224701C9F564298EFE0C2516330F7AA43CC3D7090581B74C69218D74C8C6563FE276F24F39BB7998CBFB9C49EC649106DFA51E45498DF0F347DE8A562341DB34E94F286F583832E49AB38C09DBCC3B2C307188A980574461CB3C41EDFB933938F89C88F61886B60097F272E511B49CAED645190E98C3AB8AB5CDDC021F76567AC1EAE9F4F8D782B91BDBA3037BFF8FF43879FB6598D84046CA06B3C8EFE275BC61E449853F979AD6BFDF27DF453E2551F09FC1916F4E9884012BD4B946E2A65C86C609CF8EDDEDCECBE9B1DD6715C1792E261A3A013D64F00118DDB1FDAC9900E8BCCCEF9246446D5248D5E3423D859E1AA9BC38F8697F8A4EA08632983F268BF7D0BE639ADFCE6625E00229FD510A41AEE418C3AB85F5D2256D8EA4E9AE47316BE6DCF792537F28514B99BD76D098C8B4CA16DE1A9ED0F2693DFBA9B460BD842452BF563B03874DCCCD3E18B76AA3E352978473A2E02C6398438A35639457DBA7316577B0863762FC177010E0FA0F7537420C0443D8D7F51AEE4F40A67E249D678E77F17503A0A6DBEC3C60FAD140DA592082C334E3B1D021E34104A9A724FB6EE3B5A22CE5D3BB9C5E896956B4C6F7B1F51A74A56A7232E027F706EBB999708BA8ECBF42F44E41EF63A7627C60E5E75C678B5B3F7846CBBECC9A1B6EF78D7912AFF0EA56B7E25C31784DF9D63398FEF53F6193554C4D8B7A96C170A89961D2654B9A663B39C76401A439CAEC482BF44F20DD12140D47D0580DDA48EA905D409BAF5BCADBB8394333B97C0FD9501AA4B4BCEB3F041520422530A09A9B24EC04206CE907A33D0A18CD5C1640CFEF970623B1AB2B7EA5342B6F38C717416C17545D27C21A8F37AC2B98991395D3D170FB2D03C6B152915DDF9CAA12B5EB19E45FAC4CFD4ABA726A723237A6488773C05D0D38D38D920C6E8F2D3476B06B40094463CDAF380026BC36B8EF3DED6A01CA89E015A0B75BDFB97D859C620D329C9B26B1DBE3A3C92D8510B060ADF4151AFEED125ABC0D6FD3FA9F7F3C67B6BAF14A672977F2052A84F0437027956AAED010F63471C5848781BEF8F2BAB9F8CB0DB00253E2C6FD30D2A0794FCEC489376261CDD407B4ACECA129D87FFA0C76E28B9483034A40F84EA21E06C37BBEF2987AC16E77E021D29CBBDF077A912B89CEF82FF0EA59F7FDA55EE99F4602B5437CE71B4183BF28BE79327483898C39D09DCAC59C3CE32333BEF4B0720B30944B9998A01CB3C135D53B4A76FCDAD1C321D39D4466F0BF95710FC975ABCA1181070A4A5741624CE9AB0FEF27A5BB1805BF295861D0208BEBE7DF92EEFA7FB123B6AD42541C1A1057DA2560469A680E3664B1455D6851E6C8DC8C4940281AFF025B2BAD2CBB53D1670641EBDE2AE91E71F7F69AFD0C1A0225351CB1290EE40F81560A52463FB04E1364F9F3E5C454C311240EDA5C6AD78A094A73DDC1463E19A8E12419DE4966A1F12872E566F178E256F257FD1890DAE6F84DE013C2490B57DC1DED2E705C0134E889EECBE5575587EDFC240DE938C6D2D9CE543D5BA3A4A3EADE1A6A5F0CFF996311F72B3C6761414E34342C3D1A48F5D3011D7BC7F936E8E086581AC256DC6A376F9C4ABAF87FFAAD67BAC64401F4D976129EFD57102A84E63DDFEF60CF13EAF8973881FEDEBFF8D4B356B2A03EE9FFBDFA99F77EF7251C11EB1D2514D5E657697EFC47FC42CF10FFA7F09765E2EC39E0A99E4FEEBD410BF4AFE51855341279F7E47DFF0066602618ED5BF70B2F6D002805F41E991C68D64ADEAB7374F25B60E0DAFB980D888AA2580DB37930D1942D6D088FDC706871A90D887B5F2CA6B21911BBB8BFEE1376F48428238607AF7CF82C3B3C9223746BA9A5F01523B20889ED8F139EA3D505D55D766BD056416193CACA6D5D6175C16C38BF44D7F89D4A5E3406C7944AD05D86C310E1EC78E0C8AD80FA0DB202AB1768AD446AC7FEC60B30D741114B45857FA5223E64AF32476319F16DE15C04F34F4730AB31F4F6BB13252D706F0B3BD5860BEB864618353CE62469E25CF4AED50D8BDE9633CF18F76AB1EA5552614D4AC3848A0CFFFDFD51F17A4E744533DC52979D7012AE53E9B08C4980AF8876ED2FD8A6F174B3AF651517BDDA1965264F1CCF0EEC8E3A9969D1359C5C9FD20CAD8698F3E28ACE77001F563BF456B5A46FC747E5D7EFED93314F7AA87CFA60405F968A4F9774E30E2266938BB19E9265FB71BE0D40FE6BF14FE02E36FE10FF110D63E02145C78B73217EED9DD87F70077E4229572E6547DD71828C773E46462E30B497F9F5F99D723D657E17A288DC98724B11AE87B7E56D33386A7FDEE0698353CD46409FE8D2236958B166B1C697BB8A42946D66E390A045775A6FE7DEE4BE260490B69C56476B894383091C827D02E960D9359E8D3E151F50EB87FABAEE8ACC6E325B36674D9C7CE249B879B3FDC6AF95E92FAE53047BC211757FD12564EDDA4DDB6AE8C94DD3305C21970E90BE05ABBAF912ACC52C77714F87C2B059A9E21005D8903A604D82EC22192C46CEB63C588A219CBF755B5D44CC0E918CA6705156CB497FAABFF63745C826FE16F65582D4820141DEBE3B949C29EEC6D99C2A4EF34DC878DD82D0FE6D5ACA302ADFB897DAE78EB0BD28A938D6FD5A3535CADEDD7C521E45AF4BA92FD40DDB009E35C21254A6DB959698303D56B59D8F319F18E688F9A20DAC8058E0496E0E46BD01880F3C78EEFE98A511768919116A288CD3CD28098BF5D4719EB64D548A6D791F1A9A9A3E9B08E7184AEFE60A3D7D7179CE47562E9133068789BBE0297FDA2B2D6F4248B288CD899BF3231EB360ED45F769C0167284319D2C2B11375C2B18E5B67594CF499A6AF2687E0C1AAF09F4161F3AA8369BDBA68AB022459A2DA9DEEA13E509AF3A68D011998D9C30BEBEBD04BC9983F36FA549BFF3E3D323722B2136AFCE0A2CC8E593B370C7B48635926B9575A77AD7C0DA18E94FF1C8FABFB57B25981288E1771465360E2D619272CF3F56268B7EE130FD07DE29215FBD5D0A72B73081869F60CB149A1E4871150778A2229F3C886200E0DC2C76AE049231FD3171E49FF44BDADE185883198D21629CE0AB252C7451398E0D411CB01A66BC5B141CB150BA9CFA9F9F46339625E1D5127998302AFD19D5B2D85F3F0B2B354C7CFAACA3D4E7C7B7DF44E22EC2C226178DDD480DF7787EB28F0285B1F973DC47B094491DDDC12BF1CAEB99E0E13781FE8A64DCB0A05A30763A055A6ADFE5434D7694A0F6A0366B5D74E73227F3D503E6B989C5BBF9E6D81EDA7C46D890FB2C5CB439C5B49FE16A9BEB14B12B08C47713331E8932D4AF6B85444E3F848C5AFDC095E984449F0D126EF711F8B43831755BC0FAE8D9FC79E894CEC183DC24B1E3C81FAF6A546E464AF8C0307263680CEAD9ED6E80217F98CA82458BEE59D2A4FA76BD7D4425E0C77164A50A2933972108661820C75EB51C8A0ABDDDEB30F31F2E575AB9DB723DD084656691096B72193C52053EBB8B72C6B30C49185166FC39F3D9F3497606D15E8D696CDC256DCBDB6D01DD2C33C0249D6069788DEC09802630597C13EB1AE152E8E84F6A4BF60BB09E049EECEF79F2E35DA357E9C076B00C6ACE7C50F865830698571E999E544F5025A99C36BCB025B7967846306FADCA22B8BED499BC9A80EFA7BDBDB83B15DC6D48AC4E3978D528DCE0A3E11C3E62B619EBA0C853EDB0EFA1DCE9EFB2E024FFC0B59A8AEC329FAAF418DF9BF70A250F2F6409A9FC0153161F6E8713005E53154DDBE15242AD801C216A1E5CE207757BFFBED75EE4C96CA0C3CF448966540EB434C68E9A4CCF3C5907DA216BA664B073D73B0779204EBCAEB55446AC6E2C40B8BDC666D4C9D33B7C644F867BCD8962274630191EADAEE7248398B9F02744AC5D4DEBDAB2D6D9F8D6C6392683FC1A795F70134E790718D56DB6D424725DF8AE7E11F02D684DA78ACB4B9C311806D082C1FADE4B31B8A6DC0E5F16618C47E03E8D78DDCCC6ED869F77CD39926945466369CC2371D3B51F58DFC6471D742C9C82B1B7A2B1B1BFAD15FEBE592AC0F41B19C126D923BF5944408506ACED28FBED161902EC5FF19CEED25D18F47A76860777A3D86B3E0BA7446C3F1EBDA88F8A8E182CC0938384842D42F41E0042C53C645DC87C88429E06BA9906A7A3C1F6A76671D69703496324406C7FDB20B9C3CE9BC273A743DCECC0016BDF85D82112DBD4C49E2A6A5DCA22738750EB8DD6AF15B27A0601970AD12660A51C560E5CD44B55960AA266A88B82E761B53A8B42E7332EF2FCCE093BCB06FD18D916FA10F4E9891B103DDE5D808963E6F71AE7479A5D0BFCDB8A2B2086308CFB7813EF6B7B5304225C2E9690E47CBFCD534570933541E8DC99227986C0CDE40924D64710A7FE28D248E667E18197B44D83FF1A0691E9049611AA1E04A1DB06595EC32A9B91C46F50096553C0B5716D2EA9C9E3D373C787783B50F28948EF96D21FB323CB69FBA26E8C869C745FF08AC0C71D2B656E42928D09AB4274C307FBB04AE41FE847721D95FDA55510893DF24F56522EE537F609FD54E4DAB4E98E9F3F8E8243C5D056B4CF6F2330408514C6CA22DBC79BE374E2B34B3E9A9B689B9375035F5E32013587C402C14997741654DF70FF5F74C0DC26D82AE7F036731AAE15D596E426EE2E7383EB540A48EF41FE2172F1565AD79202A016EF31255DBA5DE29C8C77B4704EF177C97DD507360FD01B44D612DCB18D7B5650032B1E768851C84EF794F833F9D5D198603224016D3FEA90F3C65DA465418750A69C43050A738A7EC4D415CC0B404B475936F8F675D49C67B875BD8BE2B2D65E05C49EDFE72163CF3F3BCAD87D8E956101964A1C1345F3978E144303FD1AEFA4675F521BBA59F0EF43DE19418993F444C1F75BEA24B295CDB73A51510B8B4B59DD20829466409444D4FF428B3B94164666A642FC2A187FDD7ADFE75E813BF64DE664B131F58B9CD825A19AC360F4F83E43FFBE0923494D978B1B2ECEEF07F2387E03B1D933008C0131A9ABB08DE1EADEF78291141D285EADFE1228554733CD927E9740D39EC9F539FAB960EA829552CFC36CD8BFD9092C821CE4FB4F29115BF533A56D7663CE9FAF2B9DA374B6E1CE5528A5B11ACB9FBE818BF4C41787F5E4FF4D517D46D2234B77F20ED3928BB38A32BBA350A66540E19B586C47EBB9EBF4E4A671CB41DA55BFBE5B39C025BF8F11A786D60C9DA6EE5299B17C0135689AC9D880B594EC51BB52398E78AC7DC2439D0C4BE7BBFB7F044661C9CD8D6D7EB16AFB943589C6210882557C65034BD7D044C6E957722C93537473E2EF1AF5A6D05D7404E274D2DA8B83F6D2AFF9EAA55D122F69F469927EB682977715FB1617B36368C22FD6A2A7B10412E9F202C6FC9BA1D7789311D018085D480B93B422C6BB24B09E05556F8298FCA307341877435D2D76B9DA1A1932F20D2903A63A0856D9C431FA3C4C591D606E0043B0C6BF277971588390BCAFFC01E14C6256290E1A01EB7BDC98611EB4E40BF72B04C21526D4139E3E75A13DC25C0691B67F24B195F57923684BAAF94C7E3CFF4830FB5E828B8F7A8692C1A0CFBB9FD3F021D3FCF12C7497021178A2AB8D3256E8606374D6D0E7FE11BB1F313BE2BDD4D977780C1A2053F6CB0F60F89671AE59C178FE33900FD11B4DEC25C698CE0FD4E451D6A3CEB4E41BDF08F05F556B4394858983D515266F25703C17B48B1AA13056ADB2AF9A865A0FD30BC4BAC0D7B1D185AA2903D1956DDA3D5541873EFE487E08E83613428B64D2A499BCF3783466079714FDC3D0B04ECDCED5C89F77F5E6E6F1141D47EE7A3C32382A89F512F9C9BD96AB24EBD4F77B911D8B8206CEE29ADC1E055B7BDFFEFF94AAFA750B857EC6FFCA693787C0E2817554717CE5DD5568DB1AE585B9BEED0C6E228FF47C43FD7565D3D5664BEBD73F97DCF73D8EBBA3FA092BF6EF21730EB909327313FE1493BFB44397567DFA30BDD7D090245057098AF775CE977528E91D9C3976A4D478A5695482E4EBC1FCB2F7FCF6E5F9B08BA8C7DF12E6F77C3B0362B1132F9209AC1D69579D5E9815535FF72820BE1414020694A3E2DE53BBE7DDB582C70455BCD18AA0A4E0A8BBD718217C616129F236487194B266F95E644D1FA79532D7AC13CD9C839BE14AD4BEC179923EFAC48965A8C915812C0F0886C11ABB0D2DD58FEE6AB2549AF9380B8699F3EBB0F96D295C22B940044819D7FBF2364610893457DDECED6113D1B14BDDDA8077BB32E70D19733CB795BC8964FD9788ED317B5E433CDFAC3CE3E0EA2A8359671F2ABF49946217358E92828AE32E6CE645C3C0E4D1CB64E5C8532DA7FC179CC7ACA241AE496D821EF7FB9E8D878B746C50DEB281604830360C8ABA336D1E8F444FD46A74F6B1A0F1F61EEC42C1DA2B6D88CD1AE94B3208866BD1757B1ACC09BC155DE4690A97D0244B819C0A66785EC764276BF39FCD6A1A172C777F2E9A44817D1B6B3C09AEB4436A3B115605A850AA9D11BE2E660F2B214C45B00134604EE395A77BAB321298ADE920BE3050CD2D7BAC4931C3E3687BC4FD7E2EFB536E26404E9950C928A3CFA8A11BE42D15EA8DB2037154F79C67860844D04DF51F5F21E90B8A16E7504947B90B655744758D97886E4860FBDF28FDE80B8F32C94D09F4F827F34E8FCE92B576A8809738D6227C9A31A43CEB3EDE56BF7306DC6F208D6229CC3E5C4B49AC54486ABA7F0079EDDBCA82C3C77F41C58A88C4ECF4DBEA754DFB3424BC3106A9FF280E8C6A7D086FA06C44ED23A82E23A03D3FD4CF62DE1AAF3A95747CB5CBCEEDA5B1929C13DF6CFDBA6A94A62AD3035C8CBEFA10AD9D37389B2EB90822E10B422BC165A3BA86F37C0A5B96D0EABCAA331FBF2806C65B376665A434A6D59B3BC9C339F4437F4598D0D6C62812A2083C32359B938D78390F9B4F86E42F297405069D350F86B089ADE021C1599FAA2460EF5904A6E25708032540A7747BB254679454A7B38C7491BDCC835033A76514869ADCFE268FE49CF38A9B844A97214E1E1ACE873FE051FAF282664552DC98618E35DBA4AD9B1FBE50700726091534091C631B54C944C28D97DA0961F8E4106408017CF1EC86456BCC1F4EE7118D0691F0F327A0436D3145E5FBF8FAC33E5179094FDB03D9DA0D9A2EEDDC221A21189B68EE1A94B13F062F21472DB5466B266562E2186FE01D028CD4AB5B6AC9F048D8D50CD8EB871C5F371648DC07E20BE84263CD676282D56EA5374E21B52752DBE416DB787BCE232226568621ED792A9135A59849451A4A4D8A1DCF3C804AF966881FE5156FB761B3736F4282240FC0BBE72F51F0122D96B3755109E7CDFC70F9DD04C58B4A51C00B4FC0EF252B05ED76440C97DABA04079C121351CD43BCDDD4AA2D2495B49B908A9AF815DEE1405C3CE9CEC7D5BA9919621E8C4E920E08061D228038F73F8E5DD66BAB806D2DD953C6FA5360487957912249DE009655658BE8CACF00E6E0621739648A7A75EA06E93946987E62EDC270B266BBBCEF61D7CC63013AD797589A7CA62B65D4127E701BC95D45C74DBCBFF498D3F87CBD1B288D6012EC392B901A3DDFF16EF1E1685EA1F92B1F32DFED2F9076EF9CB1ADD8B04953E5509B24C48977FFEE6044B8C5B80F9DED6FA7110C3A2EA42EEE8A83F4A28FE78B27E84AAE7B3FABA56C1A4D2414E0341C69C40A43D65E16583A151826F7C7CC0CF0A5999A1016BE6912F067913AEFB525EE41F1B9C82881054E9624C03DECE74976228B119974BC546F823A597C7486DD594F1FEB2B6D0330918936DCBC12E3752A7072C5FD7B145571DC4A22C770E00F24B8C91E27F2C727FB049D04BCA813948D2F7B531C906F2018F51C9EF8B7642C0F1CC06AD338BEDE17683E0BD2A90D4D4746189F792952037E4918D2D6E61C1C8A8B6C437075ABC38913C250BBE6EDDA5CD24B630AB8FE9123B08D5E8FB8B71BC95BDA4AF1A71D5E54BE98B16D7D3083AB1649CBBBF44B3D5DC33B77DC1171A66F6F40E75EB86801EAA36E02D138093F28ECC6DA4CE4B128DAFB8D49A17C683FFAA8E6910B8BB7B832B3A3D0765DE2ECDA9D7BFF0A822F5FD389A04B660F832687CD67F7E1E1C3F5257C6FEB27B763AC7327DE8FDB989413B6D002FDFFB1DE5A80F1C5E39F06E6D716A69ABEF37B2DA9783FC494574689948DB51F78C8812E09367E6C8D70F5FC4139C64B96C71ED851D171AFA69D2A646ABA85279B7D3D31D268A2E8A272C91902F12C49D07D74E82728AD61BBABDA333DE7138A976A2267DCAB1A02E19B0685F64B608E3DA41108D54A07D4BDD24D79D293830C04209C98F037283BAEC00B1923CF404E1F21584F515F9D59B53FA9B4774FA8D3B34B7C66907BA127A095CD8CBB23375CB188CF9DF22CFB4CEC528C581DB63598DDD9A53438409D72507D2CEB5BD45DB5C760415A5E3B3A909EEDA73B7FE122DF04CB1E9F29E7A5A7385F632AEF63771A4CA2164B9B3FAC3C13911DBE9668D1127DB02A94CDCE2C8C7B66F0C21601781552B384DF0FA002DE08892D0881174CA1F6DE80B98BAE545237C5CEF9E1655F9EF8F8293D644CB47963734197F1976600CF2767A59FD56B9B67659168ECD57C485E5726C150DEC6C302456AFD4F12B2F2D1F36B03E100E109827726020BDBA970A6B768C580E34116DD0011299B4DEAAB8B04DE1DCC5FFCCBE57254CA79743D6B00D119CBB2C0B0BBB2FB8FB0B0EC97204E1720F99D16A3257846D09BF8EAE02DB21FCABF03CB0989FB4D99B6D71D5E64C6FCACCABDE63B223A91D1278D676839E1A5CE6C5EE05AB4F10EEC511C366DBFD7AA1E139AF671CBEDB3160A775E5214C862E95C3A7993E508D8F8B7ABD68213A531B5C648C537FA2674346FA0B3AB43A7B58B4F83B36D58C506C188DAF72381DE53F83AD4D9E6C6B1F5D689AE24CD158BB2898F06AA28C8FFAB1703871A6A6FE41ABB6B8B9188C90EEF88E7DA3338F119770B31167E3AB541371FF7F98A2D59D3557438DEAD71C96B97F3839F5E28DA6227E5B40447B9C85642F3F8BEBD1CC7AB0D0E4D07CAFA93A26C75970C8B40443506AF8BB671F30867FE4225F576026F79010AED56CE915AD9AC001447CDCB7CC3846B0E291DE0E9E443984E0ABF7C1C1D2F6D073B0B77116A21C3C0B7F360439D11D2DE370CFF8FF73FFFBABFE4D52BCE58CB32612870B0EA23CDA21E3B6E851B063BC76FBF7BC394A7D3805D45616C6A313C887D2FDC51F065F8F3C05ABCF70F31EA5746A513D2DB3F4F3C61006F19420AA82107AF855649EA5D90ED0A8540D0A2CEC685D18EC8F4508A7D092E52DB2117C233A7BB542B61C26BB92491A88942A506ED60354EC1963ACC189A248E37C9367F3F6FE065EDF6A1205BC80B267C1062BE20950617FE0EB59BF8F1E69982F3E89E7EF85F3319A22A22B8BAA491BE76AC7257A2DF631A98477544E3E57C7D63616D22789968CA5E929B507AC394B6772096CC70B69ACDBADF900D055881FDD209AEF54CE6966767C07EB7A2B40A3410C3417D114FC9E293DA7262171325D8179262B2BF041F5A977E2D648900295B14950EDF245C7EEB663F8292625F804BB839BE3A5510036F7A50288C69F94434A03466701BF1313020A4DC4F87D272FB9D1B7676C195C0B7B4D3C2CC6B20D5C2066C7DE5DFB5C9FAD43D80FA43BA917F200A73F258BF21ED8BF3E39F69E501AB3EB115C9414C82C52CE91F6CAEF4A163E288A6FBAD4FA83477909FBC972E2EE2A5379456105E8EA02F92B0D8F79588E2282D1970C3A033F738011BF273EA65912D3ED09398A7F851BA2D6141F97843E90F5C66B38D71D70DB9D93FAEB07FE1AF5783D71CF50931C282CA8B483D1F2E5DC5AD5FF2B06C4355E46768AE5014A22E7CA26267A1E6CBFAB24C8C436535F23D419819D6D458551EE78AEA4779574BF86DE7960969B0635F0B2996F955D863E078DBF8689C142736BD5177DBFEA3CA8C58871B1FCCBFDFD67BB12AF82C3B8F935CCC507D510CAB63B831721E0ED9C258BA7A3FE245D42DDA1AD8A962847D7C724DD2418F72508FAC194EC43D17533AE522187B44D71B6E993F2CEFC6349141094C8CF935D90F2F238728D29E1F5AA09B46FA7CB651F688A8A06AB97FD2363486F61D3F42B9C015652A53B3CD66372849FD2EBA05CFB5AA28520B01FCBD9C835F98D15FE01C84D7FFBBA4B2DB93E44E4341AE95B8AAA4D59CB88F7E192E89954E22B1B8157FB0B89E3E1E3862BD4C2799F2D8C621064EC9BA1EC30E0F7F5FFD7013A7E1C102DBF01698322992EB05978A5A2878756BEABEDC660DA2D5370A98CA2C0A4C65141EA273EB787B2E7AF646DEF7DA77A93E45C37E69B474D04FBDC3B5982D8492FFC37FDE42385DDFE97A73B8575C1305A0B9AC0B0CE061A423556B6FDADB67D0A5BBA7435929D658FB0869BFFBE5D2FEC96051FE03CB7B0D944304C2D433459A97C43268E43951D4C1708C702FB9C0A0C6D82876057F4D043B21A92FA6D034B1DF5C2B463107AAA814C79022D96D1BD9D33DE5A1FF9E435D9607575856CE4DF5F1E9E90FEF5ACC4AAFBDBE0F982DBFE78C5ABE1D9C85E0452AAD7836D39591411B382BCCE72CA1702A20C9DF384F5BD539F53CEE8B9977AFB705D1D28680D1733BAF5F298282846EFA26B0DD7514422C0EF9088F796B38C15EDF6C8D88009B10CD0D6B4B2FD93679712BEFFC4D1F7A3898AD0CDC61D2FCDC360C66FDFE0AFF0E8A7B26359606CD4F47D28DE115261E6F98F323FBDF3E3046BCC2ACA0831D2BB4DDF1EF443632A229CFE6BBA5179079DC7FA50C56BE7FE5FEA0C5AD09D891895508722861E9EE8568F59616890C63708DE87744B81A0E21A62CD72148FC3782AB560CE136DC3A07F2D2E143EA0DD2ADAB9FF8AB39B2A3E8858DA593B6EF6C46BB5CFD252F6DE446D9165406B3DD18CAFCCE3DC7A6E6200D8F7591169A6AB9DB6665FB72140A416EF30B75EBABB6C284E73809DE2A3A26C7F4F188FEE0B401E9EFF6DA22EF3DBE0FAA6DDFFB5D8C265D1A1855CF7019D8659062AD7A705362D1510ED5013B96D6EE803E7C6418B05828243496753E8616F4075A08346038E3F3549C0AB1E761790E818C2B531F06805D92FE53D45B9A6FA5E30E3D6A2F467AECA07D29E1E9123247C69220E2B9D4501EE42E5BDAD07F0D092B33A938B8FC0EB7E435713E3E428E87DB24AC570E4EF64840A1B4D43C5026C80F321E537755366B16FAFF2423908FB74E9A5B08F0C1064815472AF48240F1C374F2AAF8ADE55117E0FB1D08AA40C4D8AEF35CE6A91E54A89BBE55BF5E78ED5F66B2FA1E8936342656C63263D4E7ABD70F7899DAC9A315E9508AE65287C6660A7D7F3FF408CD06F3B19E1238E6D5EF040B3E54F4469BEC17198AF3F78F660C6753157603138BC98AA9F01FE79036D4564A7396725E57F875FCDA4EAF80C5E2815862AD52340571A571B331CC8122C13CC58403B22B61BD404C6D94C36FEF187C712B524BAE9EF150A71CE32366AE536B5B94ECFA351EF0DE77E729C42BBB32C7D35F9A5BB29D2D84BFC91F510F9A1C907540AE3A80CB7023AE0635EA5C2EA0548D9D14CE4BDE142436521ED1637C7B7CF6CC1DA5F826B800AC6FFFB83509A81ACE30FD969495313F9E18CE4D8A2E1D5F9C7DA14A0A9D4C4D49BF00B622B6AA07FEBFF0A8B274C297C0B4AD1CBD64BB4941543FB63D9E15059E0C0FD250753B2AA664A677780C39A013E1AA6B8F786D677755ADA03E51ED55F936FFA1ABD0430DA8750575C37D1EEADEC5E17148DB9FA202F8748B0611EBB5015F1D26C0D810F1AA5A40D73C32C269EBA5CDA134267231FC3783D3D4CC639E567681275F423439A29118C6A0C1B07D08416537D4707E9CA3FCD3494F64B69E2AE9EDD0079CD428CEB8A00BE0FC9A791FE2DCFC10D7F813315E964828A4DCC2A2D42EB313CCF192F32AA9A17C984E0D3CF3A0BD86E0B751B30C096F5F0B08A0BC439294D2BE2CB387648F8119D8820D39F17C6AEC976A0B8C89C76D12AFF73059B49EE856B2591E8D2E817DC43793F20B2AFBBD49FD9A05F5B4CB69165420AB96F26A46861AD9423F7DAE8829FD392799EF967E1270563BCF3D46025CDBBAFD15DC23F33EE5B621DF6A12263CC0A506A5E9AB191F896D13382B3BC2D536442A62B09F3C2C2252D0BE377CFBD59097259ED243EFB36C9AC0AB01B3AADD502DAACCE17A49CC82FC9ADF67B4EDE81D9355CD8295DE21468FAAA25036B2DB6E24A3AF3E5FE59324867658EAD5198C47D362EF64B71179D107DA748F00400F15167E84B62588F6D81FA4B68A59A24BB3D27167D0720718BD24EE556FB72113FCBD37831251DCD538F6815382E119355CF3490DF0AD552ECAE0D00462C10CBA4011E95C7FEC968AF6E39E1FD15D1026879202C57E2CF7AB02B08B15373C13435D8A55ED6B9BDD98FCD5B4539428D90A2C73D37DB112D2025EC8A4AC8EB82C51C46FACE88AC0E1F161705801C781EA07F6914122E5DD6BFFA3812EE44E314BC09B785B344584AA8522B63FB34BAD2122F9FEE1245E6DC837DB032387EFF5036A021C8112CDF03BEEFD89EEFE1BB88A132CAE9E1E9EED3A855B364F2A4A2F81086172FEBC64614BC04D11E74AF00F54AF6B5D85EE4773644C3FA768532B1821EC6E5C0D1FA0561DE4DECF411AB73FF48D0810AA2149FE5F3C22E62E06C02F60189AB5690A991CB88DFA5C4FBED745FCFD63BE3ECD9CC599E35B5FA31AA11C62F3A33796A64EDD0B64F2E51E75C2481D3EC9DDF07DADB71448BB336C0DA9DBCD897F777E3C9DD97C7EBB08827C19316F61420D96F3D94EC395F8BF88F5927C71397F6C24901914826B1BE26E14FE93EED37141109CCD00C92772B96D9EFD74B3EAD3903854801B22DC3F98232023E1F9CDFD4B4C952A6D268DF9FD3FA83C707941F8F1ACDC195AD66E7AF48D7B06C62F3204E8D03D2C92920C589CC56A5C2B0A1F10401BBF747B60B9D2179BF9CD7DDF50B10823372CC4E24005D73B4C5AB918F22918B16D98F15C365FE69786C1ADE9FAD71516E389938D5D38420FC79F82C6C0AB1C6D93D1896FE8A2BEBA134C138EB1FB00115E50A8A676B9D9939E7375F4B7D62D449EB341B0C03EE3FB18564DA3CF64261055594E0F8D322EAA9B56B5328574AB323C4376464F3C27786DF7026BFD6C7757BAEDE7887217A2D3EA22AF7D6809BFE4985EDB32ED503C6034FECE55F4379920C73A515C7390B3405ABCC54F51F686903D5354468AC566D5A03C5AB536934A6CE698E06B9E2C815B15B4F8A1857FE7C0B5486759B150F48AE9745AFBCE856830078EFD7F4CB4A463587B7DDACC79FC9FBD9C2A0351D91DDF27A65CC79005DD24F1C26252BEB8C3F1D69DF79D386401EC5AD57BF2129D1E828D6D57CABEA84C7F77B16B919653C12AA7F770741E4AC11F0AD08507C3E7C4716F14F14C548A88DC4047EA96CF96BC0CF786EF7D02424314BC846682109A2F80044B51B12A0350DB9FE06E72581EE874665B9680EC118C86DB575F9E5F687CF35DB3CA83475051AFDABDC974B2991B47BEB4CB967E3CF20D2B7CA2BB50825EE33FBD7C6E87095DE8E36CA6143F673A8C18882D89F22C08971CC709F1518169123EE59EF50846C95C313F14F9472D4CCB8EB71301488901F27E895B5D44420F91D123E3EF5527121B9B0C9536CC3D4E5EA03F63BA8FED0FDF593AABC3E768962DA165CCACE066ED7D6E46DAE97EA08789C36BD3CA6888229D15714302A39EE4F39DB0751F0E99877237524ED8EAC5F7EE2CC40A69408DC43E2AD88A661D7E443D7E99A14484E3011A41912E2AD4F6B7D62D8D9F3332F79A5FE1E16E8064C91DE56B1F89A9A3A220165872128771745D086DD3F8DDB2C35AAF3DC6DA70684DF270ED50D188FAE62CE4C98B9019D308772EF036F9FB2775137377CE61529A40E03B388CFDA3BAD55FD62D7ECAC2A72FB68068BE08383CC36FB66CC252A0412CFB3C993803C038A1828E8893DB453D47C5727CF8BF80850346063AF4976610F984ACCA00BB5963D5DFD018E0790F4A6B14A9B5FB9517783EC1F16773C49A744D8576F7957D4CD4C4E35D1BD580FC76E2632D47661A6838344CCF6476BB793FB12F92143524E5A01DD5294B6528C5A18B24B0B75D017C4DB3663BCD561AA8F27E510A7C031ABD3708385B03294E3BD1A695C573701B9D4F60232DF767439E252B7DB10D4E3FACAC8C2E8D16F9500828826EA807C2C7C48C0EE8457E757854C1540EFE9BDCE7C09AF5BE09AEA54A4BB0D2A328092F3B8741A128D4BF588384A3848A5E4F55DACFA64F7FE081366330D16589991C52A1BB782364AE969E8A21260518662B00EDB117278170CA2C0D186B173F93879F6F702E03DE768CFEA1E39FF8453C7B3AB46E83FC90FC56D0EC0847DF16A4BF1ECBFE29D94CCBD49DABDCC5FB81B62A2CDE7D2DA3E67042944F33A007096DE5C79133C7F4C9FCF7D2DCE0A2341FBEAAFA64F6A50A93F3FAE3B55EB70ABF51A4C001E15A8C78DE54E50CCAEFF8C2421079F7333541018D5EB8045C3AE0F0489D13C593EED560CDACDAEA39BB49FE2FD9C956197967830A0886182D98B5051080DE887638F2E3E626B8941A58D2206B46FB410C155B94FD7D15956EAEC9F855B96A8F1C7202EE600C12DBAFC6E3DE5F075B05AFC037847BB521D1D3638135591B6E1A0137CA74E27ADA3FD673684A8A1330DFA46D449F8B63FF90E36881C09FAEDF61672AC32CBBF71F34367E7547C13BF08C4B688A397DD4D00D8B19212F85EF11C0FEA19C890D73DCAE9B532CAB7BB5931B2F648072F35FAA31C6A77FAF3F72F9F57D5AE65BBC7DFF1C2A5A2A2721AD5B50DBDA2CEBA27A3864A6628F24B0D24FC2450890E278C4599C1015C2B4AE61F2DB2A3A85F02882DCB57A7A471B5F8E51DDC284E0C1869D41EF25E260EDC53AF55BE8217FEADE6C74B9C0EAE7C3417156D671577E05A63E03052663F420B70E99DE068971C5CB8D9055864460D6B2C269E4E5D2585BB7A08E28B15851C6E8438EBC1272D517A076C08631A9890F4FB627D05B91ED2164355D7F20B32498E4773FFFD17F3B15E7F2BAF5EBDC98E617A7437BCF94B0EA1B2FD6F98F8BE6D64F769FEA28A5FED9DBF4B3700BFA8C0495772A14254D7AD9525B6ECDC028C43EEEBF91D2B17C9ADDC071CCC83EFC6401A22846500E0CCD3D4E5184A05AECBD92808AD2DA42C57621C66142784692D4F28662A2B37DA4D3CAE332A97D465D3E492ACC964AED603058CB6BA6972C83C2906CFCC813C0603B775E2DE8BC946DAFA510532CEFF2B2FC5E1F25540FA07B577003D67F8A3C63E9BC2B89EC7AEDD8C2E91CA426398BEC4D98FB6233832BCAB8F10E5DE6668F7DF8FE10AC0EA63B7D46837EE4D1D203D54615042203552430DB97C24FE0088334BA154FB2157DD2D12715ABC6D329A819A1A664727F40CC26204949926E78B0BB8947FDA9026813FCF19795F8BFF2F56DB70DB7EA9280A6C504134A1B653D336101A9C166883599477DB557406FAD495BA31B488D9EDEB783759EDA32968AE4B4B96A14C9DA960ECEF511D4102E1EC27E17AF2746DFEA54F42D2133281ECA9F5CA87F8A2DE4C937B5F9526591A583DD3211F78871BBEDDE79206F946B9CEC6EBD0DA4A25AF259E4B3EC2195578C74B7DF87963BF561D7F4C6755D4DB0F288341D5E525B15F2BDA314DA38D2B2C7CD7D64F6DE35EE782A076333941FC3505AEB1FA5783C6C2553D73AFD6AF896A5C2E1C15EDDC408B6D9D7EE2E7E9F706C2A6CDE36A41BFF88960612C46996A9E7D43511302F925351240B5B77A7183C45A1B66C8FCD34EB6EBF5F5FFEAC8441BD1103D2151689BFCF8D4E29B9C39B1BE4972186B099C2C35572DB1BE2A28D751D6857B7E4EF181B786C2A6FFA30A5D6E2E1120E7B1F313302ADD1012E43EC24E5E5B5D03950E009272452ADEB9DB626FF38F335A520B12CD981636BCFB882FC06B440E348512E6ACF980A1ECF360E33DCADFFF5A2B413DD214D5AD1070E88B63FC9765295BBC92C557F3AAAB6AEB293249761F95EE4338243D35AF883AC33832155AC758ED05AA1BFFF0E9FD58E03384704DA5A9237F1AAF52E12C821BB0F54C0820AF8124AE6D0F4BFECDA6500995B2B61ECB0628BFE2A9E6A05DC94A781137522E85A3BEF28B76E49B27BD05C113C9B3A9AB1285BFD926D65BCCD5CC3837490B21527A1E94544C4ACED0352BC84D378625E3655F74B039CD681D98579A190AB2B89104C83F46235757D2D22FEEF59A250B56448116D6CCE73D8BD1E1F45D9676B031D9B0E65684FB88A83D791CE8F5278D33EA9D3A6ADF04F29AE93123376D1CEF52F27E875EC0024A888E688EE2A21A4AAD0448103569C8A7CB2FB072E3D0D09115AD8A1C234F7765E77042156AACC4D4A8AC697E41B71F436ABA09C91E9E4F2C5B573CB1D0B291F915BF922FC75E6FC6AE332B42D7E51BA8EFB1CCA66EC849099834E48C7F79BC16C79B0C87A8EAC8F88D30EEE8FC0EEF8C89520E2602A7226BFAC0E8B30A117B718875687F81A6125D09EB3BD2B2F5209C386DEC5AFF7DA0FF5454FF0451F825E5AC55680EC7DEC56E72CAB953E5B822E0A1D95F3F948E95DA7078C850C43AF46B4EFEEAD6AF807CCFEB1B61CFCEFB770D1923B41BB354C81F340CFD851EDFD537C373CB9F29303A988635C5CD37AFA576D6E8A8C2B7C56DE2FD49E5DB970B50E04436B1F8B22A6DCEE3BC27EE1885CEEA23E12541554EB2EFE615A140831DE6C555804432CAC0A73DC2EE5CEC8ED139ABCA4D17B22BCBE60F05F5D7F526ECB29A51ED6ABB4DE4A2865AD1AEA64041EB0F505BE3CB8F351BA21A8D941902BA565039EFEEAFB87DC6DECEC1C091ACE228931A147C491C11169AC87884D5EE9DF128C98A084CC6EA0A50D494FF8E0B902A9EAA4B4F9D3BB2BA1FFD3DCC93C45133B9008E2B188F57A82B5DC01862D35F633CD6CC3FC12BD6F3A20C1EEE1F9018E41027788950DF09C4B482837677B33B15CE24EFE6797291C0DE291AC04F04AF975703BEFD3CB8E59C1496E547285E3F7A29F99C5F210327CB328B8A3094DB7C27CF7FA077791160A2287F44F92BA6F5346E48D4D4AE6C2C7185926526719537AAD530EEB3B0B4CD718C7BA38BDBA21671ECCE0AB4044B797B7D10797EB1BAA024B76D0B82BF25C94655545227B46DB2A038F87301BCBECE0C99A98AA5BCB648DE58B6CD59AC6471462BF5985C595B00A4DDF2948A84203890E2989D8DFC9864392E7E75262DF1CB78C1E2872CFCD22D561F8788F42A0323CDF3EE1588EFF2F7BEDACF5AF710CC7C6F9957D992A7FE39DB696DA414AC36CBDC99AF050023597734D94C2A8FCBF41D6004C21E4F4357C19ED09488797CA012F4BEF8F1743E396236E708D96A7DAAB07FE03D5483319241CB35F66F66D99D981DB4427C4C84A9EA24AEE4F7C4E023E0ED2FEDF59FEB6D8AC0FE87DD42580F7B0CC6339752230A69BE83AE13FC12AD4719D45CAEAC6E8695F6F403A0713ED37DC120B80DE82F7AC4991B4B9DADB31A304E16D03251CA140659CBF99E891DCBB764293A967DE1E96848B8F225D2F9D28EC2F428AFEBFB57AB79B126E6FC3D66102E3813347D7CDA5499F6AA5BA6AB5EA6F3A82D730EDF3FF74B9BC0F954BED21E77146A5591941962C49F6B2BEBD060A9C82D8FC780FB3AED527D40CC426988F042841250B4A85A3F3501FA3436103313C3C4CDEA772B6C840DB866B9730798B69D6AE12D24E4DDF31FA9B4C8DECF6CBCEA2E8A0F9CC67CCDCB64523725972D81ED2E6562283DE99297458452B94467B83F3111CBFF61006814CCB6550D19A1EC026996695D46C31BFA9BD371CCDF1B512C61CE7BDFBE419B477DAB1E7E1D012DA4BDB05F4C4CD39511D5071C0982F68D9C6F558D22940D541A3C67003D05306FFC070C2131832F737872114566ADF3074F7F6274AEF9B894D0AAD5ED60998A0363B92D841F4A441C39965FC1479E93C99B083CDE6CD6CB9E26D49E16B969A357E28A61B444AB0FA665B853FC89B64E02BB02C5273CC948B00041701459408C95E4BE49EDC7CB605BD2DF31C3C8BB2AA9FC780840BCC55474C2F66B7E16C6F527695D367F70F570B13C1ACB546D8439A1AE06F362C224FBD86441D82430A345B8458EB666BC93739E3D679754117C95100E8F00879B891C9E03788543C415AA964C3F861916BD7C141777A93B374943CC4CEDF928AEA3EB72F412DD8256227D7D7244E876955B13FB2EAD1C3980AF6F8F36B3E71FE3B189F8DC22C55E3720DA11C6AC4328DCF670CF948123FC7280D6891EEB356C195D2A79326299A684F5D68DC0ACF00B780CDCEFCD7CBE4140FB5B6DF896883D3C6FFC42BAA41E6A75713F8861C18A833C688C2BF6EED7F0CE66242B8196C7C254F9D48FD56AE5ADA9105A5C4AF28D0042E059A90979C6439BF6D498991CF64C68080B9B5392CC9FCA4397647A9AAC42C3810FA33BCF31C89A641D1078A0822D93EB773F418B9B3B20D5FEEE1067766AC561525F88F8F097BED0CBFF5BC498CDFC9A5B9D20F4D4A03CA190563CE543B2EAFD8DC6E4A5885DEA120DA7D157D00EB1329E500D41C7E6BD603E95BFAE227A9B613A71C7BEFC8449B668C59147E1DD5411CBD967CBBD46A9DDD76C547506A54A8245532FF9AA5312607F1AB99F4F9BCF85D93B58D76C5583856595AF5CA1AAC07C945400B35885071802620855E18E0A3B1EE92BB95241EFCAD82B3435BBB8916C4866471BD5715882F6BE508C7648A59B2AA91A69F60C78482197C04B31759054FFDAA254A143021E37874DE407690B9ECF8DB99CC16B004116F51DC7853370BD3538E14A0F02E7BF74D66FF898AEE93BF0697EB6E8E62B95C6C525A03E1A89CC2F56BAC591FA81BF6A1B3B9F1259F13AB45F2E9B0D93DA7B4984A9C71272CA261CC4EE4A44FBA4CD03C75D216672C18A60183A52B28796B356EC498F4926D833D94007E92EC190E9713354C7506BEA6B7B5DB2BE659E2A5BA92D00C01611347F67971478F2C71648E33F99EF201367CA3AC8814DE0F83B0BAFF34A192349C5DE87453167820C0EB0AC8349ECA683111776980FEBDC993314278B37B289B528DB319CF59B09B83342C71FD5E9F13EDF4F18783FF328BC67A03F1F62FD1A4631AFD76363DB1A79CD1EA95FD43934955AE211E00EF5AFC114BE00EAE2A7AB63042992E086810E61AEE3CE5CB0FE75C04969485899D552AD4B006D543BEB93C1E8578168C66667D62CBCB56F98DFBA248EECD891F9936382087F2AAD6F83FFE25E77F8BAB9C62675D4024E9BDCA5581126BD1ED6035994029BB54615E593D4CA81B31A5AE8CBEF8E1A81C32698FB7B4A339A7E4E575460F79C4F4C5F57F9E8DB459177067869E03E2E1681004EBBF62B4F60A9EFFE47921AD22C7236F25438AF46885E120825509D1E28652361EAC64AF1806317416E5550A39AA8DAE2C6B970D44F4F38D571F67E304AA57BA435C4E06CC97C848422216BA778B2736C30200527960A66D63280AF7DC691F9D0540AA47F0D26416B46A6D53B0B93F1B7C3D4DA8BF8AD2FE410ADDE00B0372E9E830C09B206A08D968AF2F716DD04D220E619FDE28FE70286E7EB9C2068F7A37413BD9E65F1B59C331D45AE914731A564D33875A0939A2185348C197CD14DAC59C5E2BEF09876353FB16D849EE67A774B05C51AA2480F18DE40051654DD2C7B9E3B753FEE5696B10BE40BFFE89487DA1E8B1C2000D53B2A98B4DE6C9DAF07F0B4DB72834361E520E45F5E958FE0760F229C16CCFE0BDBF07E186B28AA69231DDA8378DD6338A94D23541B9D8B63B85962C6304E1ACE2B56A3E433F7E9B2A88FBAD5FC71703231D38DFA8C378E15B6503A3B9959E1759EECCBFF14AA09E6BB8F2CC152004D3334E877FE21F773408369872718CDEE15BD489D97F606779A9A38398524E6560260980FABCF179ED91D699D52592AFB3269FFB8DED36AFE7DC79DB773DBA560E3ADF8E12FB8A08EB56BFC4692BEA05AA288012B580E43BE085CE583E9C9DC18A9D32567EA950D8165A2F8A443E7AB5E79F687690A8D8D92FBF877C5B84D26E6FCB3671073BD808A7E908130A845C95A2F5E360645611B4B55B03169CC1F50AE2FFFAAF50FED8CB782BF3C67775B613CF82A2D102199E49A329496C0FA24AAF6370A3636EAFEB992C663C308AD181DC308D81FFD713505916300732FB1F8DCE238CC4104D26C588F28FE7EE4F2B8C2024357D52C7AA29D339249086CB2202DC1C847210EAEBD3F06A39642711B4608638564B0DD2BFDF38CD79CC1CFCE1226CA835E6EE19E4089A6F18E7ECC3597CAD3FFFE13A5F77A58C2B079DA25B928396FFAEE81FBD9C6243CE0EB0872A187E6CF99F16B1511672821D11EF88884964BAC6686C2A7732035493FB9765B7A51E845C1C79FABD99438FD84C09642FBC7CF1740DEB012AD050F5E8FF03E859E85C51D2E87AC41185C67C33820EFFCF2D79D384B11B44A806ABB8247AF36E3972222C805EB9854D9FCCDC7E58A101A5239E60CF4836C38A6ADE67686E6487547933859D46D046BFC15AE95B8D0A42A57C401EBE78ABF495EB390B8922C97270C790C2FAB9849ADE48EA8F4F7C6996F6DB661500199BCFE1EAFA1ECCFAB1F674E0BEB1D03319E73126D7191A64A80FCBBB06B1CFB718275BDDB571E8F53FAF81DBBC0522263FCDFB537B3BE9078F2AD449423152BB9DCCEEE97003D1988540FAE39CAB62593A9EC909489415EEF4229358229BDDD45CC35EBDBA088C4BA097BB0E28814BF5048F4F64E6A587B0BDAAA8A1B3E3E69D3D7B6782FC42474773C61DE12B4C6F183F9E625E337EFDC97A79A5D2C0C939FA668F440688F7A3E0E28A33D36D331069294DBA8BF768010AD93A224E28964A780304F59B7994D972832728249934B5347580C16BCDBE9F84EB34EA7F7645635437B0F5422E3DA99EC2D53B22B1A55BC783CE86CC6B1BE7B11F837CF2BD09A514B12ED7CF0AFC2F70F1D6D08288524263B1129135D664A48B0596C4E880E4E01BA3889014C07ED1B7F172AB4F4A69FC8C04F0ACE8AD1329A4FB594E9EA30EFEF31BBE418CB5515CFF8A375CBE58515B32E799E8449101093A053EC99F9CF78122FA2D36DDFBD258EC81D7B4D18BF882663CBF24D2A35A93C00AE8EA81A3B0E8040C1E259515156D67DC76602924BA51507C4994221A3B1CAD674BECB11574212EBCCFDCAF6AFEE288BCE11B7FFF1D7191AB329B04A237F75B204634676932FB0842E2AB888E7D5A4A6B7F77EA04ABF4B9A567E5DA5267F35CBBC928B5F607E9C08359F0031A934152D77E65C937181C92EF4CF17F6EA45171DEBAB545755795097766318CB132ACD96CDD65777F41BA127CF251A4E9B3348927757A42AD8FA83F6CE7342D935CB54984E45886D888627F0228E50082B85E8E9DDBECAAF049C25C4D7B2EA919716271500D81EDF574C5AE91E5F0FAD7585EF69C5051473AF913F887B31BD730F67B4A44081BBD567B57C061AF465237374E0BF4753F3C6CA28D45220CCA3EE6F07F93A29982EB5AAD70763ACBFBE55015D1C52B64954D4855ABCC319DDCAEE75CDFE3B3C31C329A77C76131F18F3C3904B3EA4E691C03C32CA5E7A1F9460760231473115B5AB7E159013C96AE4885566065883CA3B9661C6773B77819BC68755D529FCE05E80E08A5097EB37BDDC1AF9BDFCD0A040D4897E7FB496EF0C6D62C034088E7E9B8DB52F232CDC9EA88429655ABE366C54CD534DC9038F45AC0D0362E31086CA2FC0FCAC3FE71B2D4EEE548F69CE4433601CD3431D01BA6F0C23D612807EB8E50BFCA736D917F67DD72631BEE8728006D2AE69D1A1BAEA8DE50852CEBF7491FFF989C37A54EAE31652230A0D3E4397B051222C4A22BF481BC52E2012188C7576A7ACE81185C85A2E841119B47B5429DF277A976F15D5652156445905EC797729A6647E1B593484ACF2724E81786A0C062DE87759E82202A561FD077D64FDD3226A1E290F660722040EC7AD4383431E195412DBAD0AE620BFE808D65D3937AC9C5AEFD6FA106C88A6B192D4FEC1FB1A06907B0796F724AAC6A5EFEBF50C168F990BDBD6B1D23E098858C07E8D2144532AFE040E45B25AD9AF7D92F9DCCBFF3DF25DF574A4B65A219289407EB63FF7152BF1E651C6F124BE32545B50E8E2CE37F1042A68A62AB70D9DB540D2B39293E008EBAA632B85EF1052FDA17A07B9B1D89A76FF7E7EDEB7090496855B29A9174780D504F7228F8B7436F4676F51975BCA614554FE6B3F946F5E0D1016371F9CEED4521477CE8E9CD0668643686D8482CEC0BB4D6A9E8678B1835F0952E2700FE0C85A8683DA91638D81A85231CA4C7B55C0C0DA57DE5E6553F22290CE7EE72867285D096C0FC16A60A664C6BAB048939FF9DA476024235DDDBF7F264C90ED44E953C4AC0FB50362FB2CB4C4FC2097F07B71772000D2C2A5DBDF0B6FB83B1BBD70CE9D6A8BF1F924AAC4DAEB6AADD891A8974C9BF46FC6038F6B77D6AC0D6107AE6AF5B93B186253AFFFD8CD21835097C4B764F3E0B2447776549D5045E4346FCD3B7880F1B3BA794ADD6B7F291D3534DF034F822D0A41DB2AF9F1E51F212D5631D2525B1804A75B50D8372B6A1C200B81AC1122AA3C13D7463C383FD123DF4029BDAF6C227B3C4B54F75C5315FE139F6A0A3E2E819D3062B3309E2630EE4A64D1E3DBF23B489B96E198BA98D8D3347217A5FDE4DE453012E8564BAEFBE3939E59C0A725A75CEDE373501F9103011FE0EAA40C583AC73C92F47BD528600C42E0029FB3A4F03A3CCE87E5AAF4FCCB47EA8BC62E0F542DBD455F7163A2A8803583896E3C803C0D01846EBD8BB1B3FD396A7C7BC3F72A9D0503C44FE30E5E77E0FC8B373EE931CBF4A9867406BC91972B946B9ADE62415CE2FFC71C2E64DEB7E6205D635977C778BC40C11E36BFC22A17FE641346C74DADD255D329AEFC2CE5B4AC5B195FE2DB453F1B41B3334D5C480BBF10FDE88C722091ABC85667F2B52A3505A142E4D1546CC41E154B345E8456B9CD0E241D70EB4876A70623DFF3FF43A8D66EF60488A7860485A8E518AF4A7056CD02C72E1BAEA3944781642A36932ABFAEE3B88B57B213F9B358CC3F05154DF8D2132A74DF27556DB6C5E45256481C09D18DA604CB91E6AB7AA29C0C1009A406F1B3AAE268564E04B07E4E9128FF02513AB8A8665BFE1E352F46DBDE7870EE027A6E84560014659888EB6AACF993D7C9F9FBC2974CAE290059802F5D224520CE445C404A2ECC57CE6FD5961EB20DC12D436F0B93614CFC844B476D449416F54459BAD09F886CE3C1C307A91E62FC736051E6F6F8F5AD3372398458299EFDC1809997FAAAFDE14B15566B381714E3522F629A5ED9DDA1EF4B9D4498DD55F8B0A48ABB2F9B1FCBD991B5465108147BB6125FFEA6B6D479DB6A9983A51C041375B39FE6546AB5B5E089DD7E228D5AB17127A3A1E3AE82A31E952E660F72A1F399ADEB4E1E11C390BB8652F2F7B6D05E9F4B6FC90AF6D254288BF564C4663014C7A70EB3739D28F1F17B8627FDF714E85B48EEFEB1FD456546328BF2E2EED112992AF78911A89E1248AEBF1F79906EA91D41CAFC6E541D2BB40A7050C5AE4B66547C9DDA88590AB8B0A4B01B5F8216447A310D1E52C155F92659835F1086D381F1F2995138856DEC6FF59380FD6C1B6EEA6E4061930CEF7217701DDFE17742721794DE824377392AF3D949ED9B0455C58F7395DE0FDA5485E310E8457A4270D603BA5AD1854811530FB7178525F4BB1E5DFF89F6FFE0C83C3E47E244D8F3F8AAD8374E3FDF996060E18D2A5397192823681CE6DA561816C0EEC0C0600732A37731ED13948439E8961BE44D32A3097C1AA5E19876ACD21DF812265181774580A8C04ED4FD1DE2FD5A1DFF9DCDF4D97C448BF9A4DACC22D4A55F588C87CCF5C9E178A8FFA032A454908BBE41E13D829FA98C066A7736577CDEFC6D5441656D0AC95C872861BCE0A28C2ED6E9420D4D167F37F96087F9E761F38B882CD41521DE8E2C40564C0E001EDBC04982669B82F05CD0411A6BADDCB704B545FCB19A286BFFAF0FB6DC889BCE75C5763BE1D70DCAD1D39F395A75E637E0663F3D5A855F53F700AF5F82124E72CC2A4E41A4B43FCBA41E55298A1B799368BD5F9B507FB11E8BD2D80FE517A5FA935006064278CDDC5EED43B7C2D309BECCCBB2C0AE3B8D09509315933E2DF91304B1DD3777EC9FA2415F7D18A96CD08095A30F7EB9BC12F8739E409EE7DC062703CB3EA591531F47F5D1C0431E9F1883C3BA249492EE619719C8B3BDFC1DECF7E3C4CE4CE032FB2882247D1D54566E3819464837C248D35647D273A87F8BE667760D26A7EA1FFA682A931A4D35F7407FBBBAD725BEA62449623AADE97A2789F2F8642F1CE12A06C93861DE9D27C5ACE0E4ECE40B58664176113ED6437B8AC8B4059653EA30F71A023544BFFA685343E278129DA12EEAADBDD5AB0E2CCA0B840E87AF0D0E859449893276B9B5894EB0C57C3222E01E7538FF7E91807C10CDB465A12CCD358151D96856C6143C9F8D25AF8E8086C83D4CAE37BD660D15C0C0707691E8366C4AFE6DC0AE1BFECEF9BEF46CFEA3356A3155E027D1C921ECB852BA4B8FE8E0C8C00829CEE4049A21A1C3424D2BE532B735232D12B81C3C9E5B02294701E6BCBC8607F2AFCFB2DD9B1142B4D261418C1B239B0B22451D7D3AC64636B0C7F96B41D7E775C1CFA2E277C957F0D59BD1FB02226A462533850E99E917E310A684E81634F3876D6AB32CB5B8FAE9E82224BD2A17A7C72CDACDC6B3438A083A6B0DB9FD91E05BF4C83A36916EF35C5D4871E94B1671493FDBC497BFA30328DD24D340A07A960828A855FA95EE33FE4FCD15B14B7929D338611239AC34CFDA6503E4DD9570EC339CFDC8D1C3D3536F5176901D012BABB133EBB4560484344E044F86A77C21183C82BB2B6632CF69F5A661C98EFDE5529F8FB965DCC6AF185CA8CDB4D01C5E8902966B063B8D1724AD18DAE495AD47416B61321DEEBF782EF7A6ADE3CD0D5B9ECA84DB5D50C2E5C7D8B8DB9E0F398376CDE3D7E8DC46F0D77D38D6CF6055D6D074CBA92A27C6F9018CAE87C97F1B3ACCEE495ED9DCE46DF4FA5255DB2C7F2669F5201058E90F7567672162E17D5B6D028C6AD23F2AEBA32061E6B33EA86915FAFA2344CC58162C032CE837D5C32F5993013314BD261DE6EBB35B94B8F690C5624A8CF5509BF50D3AF5FDAD77311B6D6F9398213AC1A267CAA0F52A262DA4F85F5ADC79947D2C5128B8E0B0C41B9FDEEF6AEC228EF97762CDBDB78273C16C39E446576D54A4FD04B7593A9ED7897766CACD515D3A55959FF99C1CE28A745DEC1D8F2565F24F4A1E14E9083AFF510F106D982A2911197338499CBE38CDF3D99463B13EE26B47D26A62CE45EAAA04A3E70850D5F23470FB94C42D3235D5FF9E6C37CEE8C93591CB69E0735B03EB262CE6BE6F0144DFD66BC089B36D66287EA588C78E39D9B6907EFE85C1211612952CF13C369C2AB3D921E4630ACC75F2AE99014776B26CD1F296F736A4616FF662D5C6E18C4EDA6D1791A71BE969556FF11E1192D3941F8020D2C731403ACD856A3AEE6ED7F23023BAD7BF138C702B6449E2601042D7990ADB988B650AE202F3433CF26EE132A7CB13650E86A6DBA6F7FA53B2354DEBF1268734D7120F721E18FEED2F93C268A2D3EA012F3D7F68DB0B18A5CDEBE13CE4A05683947DD985D4AED1E192FBD2719755846C9B758FC8FF28B9999D07E634645064C2C9DB4CFE50BB8A030B60F43AFBD588EC17102F614D3029FA811457568D7726C651C062391A2EC2843A95A3A48AF58A898BB65FB852F73E9A82C6AA9D406D80C072A3B426D8EBF261BF7AE0E9DC0C6DE9F4BEE880D775783F910AF19DFD8EC2656213FB9B74EEBD8E1BF860E4650D446683B7794086ECE1E2AA723024C219E3DCB371624C6D721BB60C797003D89096BA0F489D1CA60C57AD907BFC8E97F4E057B6D709414FB0A302D3057FB4635F70BB6A32CFD842DCD8D9C9D45FE082B3746951A862EA870D903382C138425DF936A505120D93FABB8F523C1D3946B85425FB338CA7DC4B2FB6512F0C8A67FA47A416284EAA943E1A9C0607A02D27F55F1DF2EB6090F94B64076FC2D3D3B3694DA5C7EB2A180DEA14AEC21156E1110DF75616685FD53C72252FB87E7D19EF5AE8D9E129D0984A06520C789DE22CBF6E2271801691E0C3CC672F6865A41559910D0279AB9E0112E66B2A1C2B22B6679CF70E3FF870084562ADB36F532E64D44C7264E44D488076F7714A1089526118D4655FFE16B02D803AC2601493CEC3AB27878CE95ED3F321913217DE12B8E5E8FB75A85707EAF6F1FF08CC86B91632ABC7CDC42D1C5D0F2F49D5F412B4AD0C5C46CFA74643C9333C5F3558DC3ABDBCBE23A3573146D648D540116136F3F29E42FF07E26C1504E47FCAD1FDAE63357E421E46440424921404ED02FD4BFA2FDE68CBE6CE49E4E120C141013DF5C0BDF776EE36FD5899C0FC057DAE2C9DAEF6D37BF8E85258BB36B54ED8374BDDD49B6AC2C8BF3105A194F76DD512336EAAFC7BD2054AF6A9606517DE03AF445CCA5FA65307D2E116E42A3676EB6033AA17D76A87F52D144CE25E3A8DAFD3E044289C4600BFAA9CCD963D14A19C5911C3DE649439440D11A21154EF25649F7DA295E0FDAE8C48351BC005C011A10D201B3062492A7CC933AB5D854B26232B7091CD0B7AA3135F28E3AE75E267C223C5E03B60FAC1BF78123C5AF76719191CB6BA277A5BE81E64117AB344D92837B6D600F36702F4BB4532C5EB1C9BAD8A111C540F52A225DACFAB37641898B1FF770A523F8BC8BB0DADB59235DE055810396F1993539A9CAAB622389607DCDFDD51FB67CBE89F0F868DB4D27A7A38542A076D158919DCB621BD325F23AA0DF694C444206FD42192FE7F9A05743CD54D8F111676AC35A3230E372A5A6D7E213C4584EEA1A4993067FD28DF6690BE9D3E94AC06BCF89BF1AA47496F8F6A18524187BE80D59A4E80193CFD757B706AD483A916AFBE2A56E0A69F3B1BBF9F4B239D05C6C556A8D22B00E9BB1FDAA620D949ECDE86EAA299BE93A7884C99FA782F2BB3BEEE86046489B3B8A593071BB1B2E833793D854F8A9A81E6A6947057B9571F2BA99380DDB25D878D6B48F09ED7DBFACE92B6B82F413E038128F6128AF3BC467E9A4DF2861DAAC674B6D948A10F28F7D43657FEE26577AF438A2F4422186930702EBC6C9173E661D59CE7594DF95B861F9D12EB060FCD3BA43159C9A1BDC1EF13E04893E411267331588CF4831978469FF569C1A738C54001BB5CF4FABD289075A165EDE0A58F6CF6D215D306A7840CBECD0E87E3AD186F7A67A967373551E13D2956E5C578A7F5BD50E2D570F9B914848D46A640913EBED2E2ABFB86916BC34EEB3E8A671AD771F6D3780B6FEC143E26F53B02977255314BAE9A2CD9E5BA2B49C73226FDC724A859F8BAD3A9FACA1B0E5F2DFE7E1E45DB6D4BE2B76535A817F94594A4541C01BB62AA83A690B6D84FC13B632972C61D940F2C9D32837413AF8E42045ECA3072CD044B2183400CE63C418879D13FD281A8D0835256DDD2BC3C9750C1D44CF1037FD7264B7716398FCF1D31CFFD0B7C52C6370E4CE6FC163B40436490A757465B20B8890C3B5C0AFB971ABFD01796569E3BC73C13D1E4B1FBC1CDCE59D21B6B110272E5770C589603FE67779A49AD0EC66910A2BF4D8C8ECC18A32EF92F502126A5DC3DE618233B9914A9608B2F17E5161115D9A3BEF1D5701A9D465A1437DE24371C9179800CB5728A7F3D734A2A706BC64D356BDF591389970B6CC139AC510A98E3C75F20120450CE45373AAEA6A279BBD17221BCD32ECF82C11B4C1CEE0A44792CF56978D3D2399F7ECDE9F8D9217F8BA22770E210D0F1AA852178B872E296762873765A73DEC08873C04ED69C995C5751B97DEC23B94CA674FE3F66211317B074D8203EC530A20B6E6DD21AB55895BEE1CBD0876183D652F4A0D2EFC95749F8F192F860BEA534598FD709B396C209CEAE4D9190980733E7E98C8ABE52A53C68D86053B56BA6FCAB5C827292D729CB8BFD1FC8CAFCDE15E4527B604018F28AA16C1E913F55461AF87C9A7BE1A742002E52B3A14EC30B259DDE7BB892CEAF77D25B7670B339B334878F697C00CE6740117AE7C67DF3F8A7BEAC89D4872682C47F368F835AFD7ECF0D8471AD01468B7BBB0A974EC469A8F79ECF8D379DC13685D2A8F6F19CE102C3DE34B11422AFB42E894C8D00F606296DABA7123FCE039ED27324D60E853BA94DC638454088281335D437A954333FF1A8D08E2A4D25CB3BA0D08BF6625E25EAD3C1EBFA2666AA49550578D3763ECDCE81303B53F18B00C8900AF4E0532C5ECBC94513DD9F50BE511CFE4D3DDBB3F112AE148DB062B2EADDB901CDA6AB6BF59D37F356AB34AF97D3DAAAA417642E87C9B95AA546C682ED641214605F82A4F486C9C72576106F76D7152615EC8E77187D4485071CFC6B0AE44880442790696E057A3AE20C860691353B3F6BEC5F1C2DA07563B423BC01E0334099571158A432441256D7C409B7B6EF26442075ED17E2BE37F8EBC049CFBE0FA89CDA7A58DD32C417B34E899FBE86E2FAB8D30846DA17144A6A66AAE1C24FCFABDA5B573FD2D6337226B5E49BB031B4D2B455B6DB871076F67AC03C3A73CEC01BD0B1EC42ABD177127E62A66FE8E475B982B4490F0877466EEFC7317A703C5C07937340ED4B53E5DE5325197FA31B8C8E05AA2222064EE5D7C06D4A1EB53151F75C94A2E259688CA0716548465C5C255D81FF10BACC2C13098ED8CF7F5B15193EE14FB5D258E95EDCC93E9796FA823892C705A5771D561787C12592D269D657FBB71F021F365B7453D50C35F748FB2B7F36DF28769B81EF12A26A237FB0239C17355954053DA0E7B84741AA9E225483630169ACBCC03EB8CDA28B7BDA685C756D66B14488A2D0AEF7E6CB2D80F2726327257B7284B93EA1B56AB80FAE668C04FA49FCD658D896A997685E1EDB4DDF85456B37F32FC8CDE50882EF0F09BE4ED4AB9A425806A49E8347A42A50B38FA8D1DA2FD2C9438618B6701DEE159060C186D50170F24F38E07B185E3272EAEA4A0A7CA41A69C69E9D95E271287D3AB8284146A58440EA131A7F47D73CB2BCF40FE3A58E1B998C2E5EF9CEEC8EA2F8467BB7757C03A99FC8F014EE933A7080CD46625A2A7A251B7A37E4208956A8C9BD35E6F8674BC06FCAA5DD04A2558C9665C7985014D3AD95ED256FAFA358962EF5BB26AE2FCE899392DF858F99303E2417BCA7672E991FEB891F5DFCA2D461148367C5C0DE1460BF557194533DAF01A5E8E0E43D57B825AF7EEFF163DAA23B9F95C063A26B3D213459D885AA96023715CD21DFA2A2250F7610B78A77123443BD06EFB7DC85D1F16D0019D2937C3DEC4DE6389485ABB21642B6E41ADD43CE96F228C08DF6288A647EC2FE96032B6DCD651FF950B72964EE08FC2030272E3F601DB7F7E770E655389CA6CFA2F9B87CE76FB0E0CDCA4EEE5E80FC756BE46CC09F84BDB34ADA2AFC024ABDE0066ED939F8EBC236CB3F577C1BFD741F9D101A038EC86AB0A85462BAFB2E484D6722499A6310FA449D979030B2A21206D44225800BE2228FA00AE6D92C8DA652E1B003BD2734D30557B735CC2A591E090394DB791245C22B4D29E706476593B6F90C694C5B87BBB0FA2C479E292A768A9687A713336A21D1199186F852C41F586E9BBC64004D8BB6814BFE739834C99923177AAF87B926D56A7AFC0879C027332A60951C84E9314380A5A78E1196D094F15D856AA36742825D2B397156BCAD8ABE7291FB41DB4365AAE49CA82CA066D3B4366D3122ABBC00F05559DAFEBA9F98361DDAEF068D60B18265E7184C4D6BC9C3619CFF5C758090FF6398CCCEB78176D2A8A2A4B9854C4ACF5CB614DC1CA0E15E7E85442241D48FD3D6E851A5D3947FA769560928948FA26FA16EFBD2159994BD92B3D6B0C62818C91D4724413A7F40B2A2D67F4FC97B5DF6A7E3CEC03158E201D6643F402D3DD6995A42900D46C2881198CAD28A27489F5116ECEC3E38D999B2020E0C381DB3B8230811270D75950D9BB61548802DBBCB68ED8C7BCCB50D606BE400BECF873498621E66ABD2AA179B3E90E055C3719CE2FE047F815B95B065BA086B467AF4124E276F8CEAD000BCA5499D36217B250009A7B43E81CB3F8B1A3238EE436FE61F2F942796DBCBE570BB4FC783B35C3CA31BDD432B33AD75B08107253E8F910EFE0D0B5453A8A055D884892278688B3ECA612452B590AF38DBDD9A7070C5610E7A3CA6C91D24438E7F45E7A2A330F164AEDFFF1789D5E875EEF121298DB79C77278ABFEC3FE3DF843C46F40E847272EB2669BABA808C38E31F13516D5066AF4DFCDE6EDB2FF0B0A4CE9FA9B4101F6F144B02384868617CD39175852E065473D6F566CD18D7403FFD24DD33ADDB52C7CC22167E49102C46DC369A92CE2D2FCB81B4D1F14B7CD2F80A65D8FBD20FDAA23219873ACB8CF934E68D6F8FED6B41193CFAB1F44CE4BFC7C67DE1E8804B47DFD7E8AE281E19846AEB6FF94AE7E7CF6FFAB46242843811E6C5BDB78157C76DF4F92FD3653D7FA5978316EB055059C6A2B6306C957418860A88F63355E76D96F4727128D9B3EB98501AF5B093F2C314F98EA2CDB89468E1BD51138CBF25E8B911C26B97DCCA47F1A1D6C1CD415A5079A756B8A8715DD3164515537AD5E5F4216C16046FB0AC50DCDBE5CEE7E3CBB51B6ABB4E87A407B90E0EFD49DE1DE5ED29184E7FF0DC31F75FBB94F46FF6586B36C7771E5A68D060A965ACCF8D640C6B6E4530FDF19DD2491BCAB69ACBCFD3EC7281CCC31253A471B652E21C4CB0B43613EC542266460F0A6199B436BEFD95572DEBEE920A915FD854D17FFD0DF8C74E23B21B28493A0927709709B07C65878C43B69DC501E9D0AA21061ECF173876CAE708C764435832D9D6FCFE62DDF2543016D6325A56D9BF1007886E62E8A832BC32063CB0717D723C5E8C5F0C0EB3960577D364C93060B64EE04A539B7601CC3113E0AEC53CF21AFAD0154DC5CCECF038474E0F4004A65B1EE2801F81968B88C3D35E87CBB126C02D770CC3D32A552883D351DEF47847391484F80646728221F993921BFC14126EE3D9527DE607152724C6D2DD305D3FEA0AAAEDF6509A2FE3248494A54FDA8E3CE7E6BBCE234E4686BA5A19724BA2CB78CFE71A6AF45532EFB286C5BB47BC3C1EEF4E4A8C757786AE974F30A86CD60EBCBFDF5502AA8F643819CBA4301E731ADBA1345B61C0B444FE7B817EA86F8DD749C451AE7D24A68D914F26C918238953E8AE61CC8553213DD6856C7863F9F6BAB1B4C84B225911E7B92BFFC12AC211B2B2CD905877FE976E07057963D47C437FE47D89648053F81AC39E8FD2F3A726866F6693E503CB6F0C3F0AA9B3EE2EA3BCDB16D726E1C6D8B073AA15F64EB68D53B1F8CDAC19C7AC33361226E81F1C793BF188755A3FE1BAC38B91ABBD4F077F7A28983EAFADC346CB941D49492625893453B364D07FE06FE42B160C16FE0462AB6366FFDEE54DC9CE4DCCA21E4E4AE5E92C872D1E4EC6FF6D3063C98A5AA5EE72481A0BDF15152E2A5425AB722101474D0E1EC8401273EA1BE1DAF7403190A94305BD1C7DFBE1F35F65D5CB97E82B7A297047507FFA0012FB73360FB8719C174E78A989A96E60A9184B3F3A8188DE100AB361921D38E8142859C8F0F7D441DB1B2E9687BBD1086643987C83DEE0BE8CED4C83BCC82B62B45311CE4F13ABC55BF5EB1ECDF15F5A07F8B2C42F07FACE0E299E87727E2D534FEBF7B9C3894CC3E2E4127A294B9FA2A671273B174DBB81D247CD2846116500A072DC3962C65FFECD0C0B46DC2AF52882058259C26FDE50BEB319AEECFA1FABA34C069680B9EBAA9D96EEBD7EA30E748213E1283396A2AFC63527624641D4E1F1022A973B1898BD4CEF4D712B49371A51D60E08F42ED1EA90AC49EEFBCC53E7F9E899DD1AA4056F11462DF1A4C81620A73C831CEB897430A22252B901EC3D6F3DF58EF26422F796EA31AA4E0E9CE5B4A9C312A22305E298FEB3B3628283D405EDF726937327D90C542434BA3B60684584A9DB244839D2ACBCD7EF147A541E35687B5B8F5F07764973112D20D1ED75DC31F6A938542B42EFAAEE0F11B0583AA4925C3132356200E8D6BDB3127B975F4115A7A8A1C471836E3C5450B501A24D4A1308BB319AA827222B550F253F64B6F7D2322C6A2D3012FEC265A66A60102A3340CBDAB900DFDB36693D41DAD8DDB8875F8C3BE76AD5355DD81D67AAEBFFFE9458E522BE0312E60F63DD92F25C0D7CF82F223AEC0BD7456752CBD5151FEB5368F8857EAFAA90E8C7499B75D46EC4CA20BA8A24C90C016B5BD2CD7864828C6140E98EDB9509AD1194F56D49675D077DE92CD481B469E3A37F7DF0D5392DA4CE4CB282530F1C73482CC0926B877B00B0CE49FAD21E4C26194C7E950E0078F3854EF88755E08E9380165C584A3DBF1ECEF6A31B224FC321326B93797BFE8D67539AFB80711A0BA3CD67D963BAD346BA813D35A2EEA104D36AAAB863C656A07AD61BA60598C07744D32ED01EFCE928346C09EAAC2D392E5655F0FEBC486815AE30A38014DD8520F73CCBB71D9D42636328A50998A2A3BED3E4B34D0DCD65B94807064E2EF0C420898DB96E3B99EA9A0AD91C63857DEAEDDA5E644E62212B23D72FEDBBAA78C6581C677B10689C4AF387626DAC55F4EBE1893D52D28D20EA365702448A64A0C553ED337C3BB911DDAE2A91727299D8064BEC880183064574B5E3631E70A0590210143F4079C572BD5E2F7634C2D53B1FB1DABE79C484799E7075EFF98F033F5B2EC66C373825335D883911CEC9CFBBE2E38129B7E03D9646A7E513D5069043BC62AF4C524F12D8F98D8C9DAC5D8642DFFF48CF6737AFBBCBE965925F55F03BBD5123C9DB47AAC780301DE91FBED3C01D03E6464C2C2915BFA187A4BD93E20C24574FB91F0358CBE0921DCC8D6B7E9976763A1D2158511861EFF5D1C0B71F608E7ADE91D9DCFF5640B55BC9BD1BB322C879C7EB5C06EB2601D06241D09CFB1BC1695DFA55FA044E0E2E4BC86EFBF6A55740C4640512DDD6CA069940BC0FE1738FD376C68BA8AF7CCBA7D89F7966B29355538836372EF418D149EBF3AC104919D91BCA2F13E79A7CF7684A4DC0AC556A2843E041A71F97C94B859FE009659F593EFFEBAA6F6C1C57A5BF22752613AFB26379C42AC25804AEDAE22D63B230FCB858F496B8EA6F37104D0890525DBDE06AD988BA0287B0938572F14A98EC9E60E973FD693DB1F2AFF671AB03FB12B729D0867938DF6B60EC69790C992C6C33A531FE56D0ECC1465F65E3E57FC9E45F0F65A1061CE6D3190B6C1B8708A8A5A47222369AE889D26499CDE8F0548B8D7071F2D4DF6C0F2418BE449552327981CB0B54F792F29A71E30DE257CE1B3A7553A22275E4C8B9FAC3B8D4E9912BB22B0A899E7337513C7ACBEDA15FAD3D6919FDDD941CA659D78B74FD39E2E2F622691B89CA82FFE602DB2578A20D4665184456F32DF4DD6CBC412EC7C6914CA427CEE02F6D9810AAE1406DD68ED3869BD8E3947A2B3A803E875FF82005D853E3F43A6BF936030744C34C8B71B7722BE0AD3F475E531C9249A42671D5F3A5C77C4C28DE29AE953EBFB572578B17B636F8365FC755C22871E7D53A1F1561C92909305C9FD36AAF79E8844B63370B800B25CC1355211D9919B830A988926829F808DD2C66400279E6AC14F8EECBBE8B6E9ABFA3BDBB38A49535F64F719EF48C5FE6B2738DC6F71AACD70274FD40A29BFCAA594AC3E7D0C3C522E406BA6392444C9F362339E8FF34BE330911DC7EB11A47FF3A62A46CDE961A40CD5B24020909E5B034F45FE96CB156FFE8E2FDBC12A7C12D60D24BFBE596544E4F03AF26F086A5A667496B7DF302E4DCFC568C7ABD665EA7EAD8A7F5A000DAD9F43E68C4D8A14742E050769B3CB270E3856D7E8F4E827046D3E55A52F0E02C883881914DE87AE3C24D93E61A94919B40398D3EABB1B5142431AB919208A9785962D05061EDC951C83C73FBF6AE8DD6FF839E631C9FCF6635FA053DBCF932E359F83FBB3EE310281569741E3A8975FAAD1E573E0EC3207F6DBCDB8CC90DCA1CE517C8DFC1D31AE4841F87A5157792738DAEE7C29240DAE26C6C3E9D8A899D2271B0C374BD2EE846C6625E31B2F8379A96F601323039D281608A01A1844E5D1D20CF1D92C52107CDA71BB3B7EC4DEA958CFD7A79F71868116CD1DD2B2E66BB94D1373B733F324BE489DA51BE72B01A8572880AE1E61650B839D03B0192D290D5B36A9CF93B30458B2E58A13D4D5F84F37A389E6B01DFA66DBC6A25338B2884EF08056BF0A9124DA29254AA79CDF1B0944DDED4BC7FE683EF7A3C7A1C359E61E959471E30F9D534F43EEF274AC6535C616ADC7455BFBFF43ABF268F7C995CE020CEC73BDBD04007562F2710498AD1A324F25A6233B2DF2D9A429F1C39943E45F934986D1979D293F90CFBEBE01665C98C0D72D09A382348136980B31F5D4696B85C3F42D5C445996804159CD4C4CE7547C4A3FB718AB62D9E9826D05C44C6BD21D708CABB01F46514F29FBE7352866EDBFABD0ADBB6093E1A519D0E11E27737239A07866752B6D864686AF1E308481C53C635046C0756E8008D3CD26DB970C5D6EF8CB9DE6BC4339EE9F88EA45D11B74A1525E2F1B9F91567A78E403F7ECD47A99E95C098870B928E1B0DAA984CCECA13C6857F350E808BBF66AB4EDFB0F369F6F009268D19DEEB377F7D0C4ED6414EF6D23A0A5F37A25AAD3CD62C2115CB70409049CF0CE6D4DBCC5C96767614C6FAF73E9A76C7550BB970AB3D3ACE0C07FAA9F36F1935DFCD5228427BBEB5FC7A2F951D9210A5BC32ACCA7E78AFD5FD460CE2A79348714E5542BF2D453680B070E85F3244E8A6B4EB6ED49F803E60B8A383C8BE6283B1C4DF79E0C4A23D5DAFCB26DFC5DF1D1520FB6CDA23A05A1513F751EBD0143C2B9F5494BAA74F9F95F189C5767C6F5623559D9F20CC9B9C9ADFE285FA4E1BBDA481A52ABAB36A5393370091A49A59B968CFAE89BEAF33BCA5C2A9BCC1758CEEFC2D0A175C8A5CAD5C7E3FA706C2FEA55F4971A7B8A0C5D1F22A26D7DA9A70603AC34566E4929AE78C8F1926239950EC0A6E1B37D919E24431E53FB08B2F7DCDCA2EF4177BD7D2F81BFC784FBEA0471831CDCBB9E11D60C53D0E062E8BB8D98B8EE5A40960EBE10FA642751B96E1407B38A024DC64D5C2005E71198EF394673A4A0097187D2475CF27B3EAA7955AD9F412A89B36AFB27FDF7FE699B2CC8C03F7FA40549178DF8A3C1A39441EAE869BBC89D583ECB18E310885F33B95B719045CA6955720CA75D5CF0B29E5F1B9E9EAC5EC92980B2D37EF6509CCA6E67544A8116494AC7EB9032E1E8CDB053B5AC0F60DE59BBFB78E3491D50C7ADED95042A8885FE284E90C04FFC0370B92B68379B2E7D52392A42FEB26B2419CC64412BFFC036C01109B9EAEC5FAF485F0D61C37A703EAD02127611F9D25E4EC515CABE21247156F0779CAB57C35581646BB71E87941AB5D06FB3C06C423E9E83E0C07E611C89CB000344AF49498EF5C30305DDC8958F45A45E1218837269DEEDBB0AE51D2AD8B41BE425EB7AB798856911B6F0DC721756A8154B9D1CCD61092D16A3E9E1CD5E1D7C2C45D236C9B21A0ED64AD4C0660FE42FC0B543A34FB545B0D88D42F696D53BF54A1A259486846E81B44C16EF146310AEFB3933BA9F9D4497E74AFE1449D69105B9F295DB24B4563C3FC0166CB70F104B3360BC0998EFEBABC6276F570F7679865036DB59B51AD2F91C0CCD3BCF5C07492765D480494AB5B87E83FD04B75A35F88656D3329AA5FD550DBF493B0CD2C19DEBE4358661C72A71FB17C812F75BEB61302AAAA1F757288C1D8626461F4162A2EC6296B3CCABE21B4F0695F2D2CB02B86035251FC9C5F2FB5BBF28237417DC56471629B3B4C25AFEDC4C9CD108ADAD9DB1330AB680E4998C5B3D99BCE8F08156B630A63EF36A51C813CE22A6B178683EDA389ACF58653582BC2AE8170ADEC4BE03C04CBA603C0E4572A74BD9599A8442E894EB504F7703F2353A8A3525EC5535E750303AC07E08D952755F97AF2360143059141DB31B84555DDC1C5F40372C50BEF6E82B433D87603BB7803FDE8FFD74DE06809357F11C1D6ABF02D4DB8EBE1D5ABE7F30C91A451EE3C1AA36735FAB9185C785F05D28BD470D433ED4ADDF36406487CA1710ACAB57EA0DD577A49C841F5E78B70FDE90BC1087E79E27E53A4B131C06BF33843BFEBDC0C2A207510590E52158C0855C40146AFCB75DEEEB872ADC5E77CD1DD6A66EA96CC223B3295C136E2766ECE9F2CB807C68C84FD04E0A5179D58473860962083DA8D68B70DB95C0EB91679CF5E1BA468786725EDFB179A2C5E7C28B396A53D89A98C7B79867E240176A9DF9FB0BECCC22A526B617CB8FC2B05A8DE411C8C5F9BE682459B487B26643FA894F9B3C97282EAE397A03DD15F07FBDF7432DD95D29E6D50CE95860BEC2649E482F40F7B83A13135A7C71D83ABA44A363C864BCD78050AC69A8DC0A9E601859087DBD49AA01A75053792F74D9A8EE726608D1F009D06363F6E5A463BC362178918737C5F3E71EBF130691A2048F07F3F8CDAB70C9D0F7B9A1180046076E1B894AFC620244B30A571DF359C7D60969A9436F05417DB5759B2D3ABDF6A238B5B5DCA8A0E4C27F7078DBB6600FC0105463E745A321884A4F6C5963B188919EC24C460F1B9CB9C063B2CD1FD5F49C06AC2E61EEA55056A6ED08B6C7C750E30EE66508FF243FE1B5C494E8EAEE5467AA0ADEA834523C536855D3BF5ACFFFC0802365B3889C31910A5E63B9457E46B4B7E29189F1BC21E7950BF9FB44BF5D76078D8602FFD986E1A1F1A74C677BD8811FC6992F39384CB3F9B2C91F381DC01D4E79D2E66E6D76796728E0C48F71817ED182759D8B10F7B5D361D7138CAFBECA3234B9F2F4A76FB00DEC05D67FA8E7217E488688CF87D59AB4FE7B13C793C1A1711C401B49C381F76B5CE120BDFDF30A858DE62A3F4331E4A3CC167030829906935FAC167A7327B5FC0527E014801A27FE0F2D40EC13C66235EFED070979576DA7268D1871E8487C4DFFC62D27B83488A73FDDEE1470832EAEFF621CE8E126267A47EC00773922BE480C7F26C8E4785D886BF8E6518DF13DA86BB2925A432D479E8B8FA9F92442891F71AC7C05C0BB0E4396158A492BD49E42AB4C4737A952D6B2B2780EAA73DEE13037D659A43DE1A8F0E525D7F96FDD1629FE51560F77E4A1CFE903DF0891B39F50B71E0F84965413DB34B1EE95CC1B6728AC3D1924B34D1BAD4A4E4F7D98D1B938C567B6F3C95770068775F78EFA147ACC619AFD0B6D8C66034C21B2991419217256D88F265922FD49B4BB38D2955305A8D01D01758B01134196C525315726D9BB6D77917A57F2C46A05DE91A3FF80DD2B5AAAD899D679EB55341FAC6D5C2E9C6B703806E342B2C11CF84B394BFDFCA378B26C7E0CD23C8A87B7CBEF6828D9E023B2B7060A0FEEE0D29CE59B379A02AAB7DFCC41A35CB9A94408A321BF78A54D2D4DB0E170101798F6622D8087A2022A993E85DEB5CBF0F4DC2A047877EEC9DD145471D57015DD59A37BA60C9BE39A4AFB92289562601BCE8102C83292E2ED842470D715D34F11981BCCB81ACB443FA732F792C5F11B7DA5D1BCDD84EB80820EB2BA3813F5E6EC5300E622DD81B1FDE8C786387864D78246A432CE245E0883745D9A1DE9D68253CCBFE7C00EA908E452DD3B9669F1E6812E40D9E2C423180BCA98F4591307CF8B8E98B7F828989CA7F3F0BEEA4D408898364C6DC160C94B89D879B1D07286EAA3FFBC6CD7FFE5700304AF3FC049098590DD7F6D4770ED66FF60DB2909C2DC6DC67ACFDB7CDEEF1B714BFE4CA04F2D5172137C4427106DF31EF72E43B6C75CB84BE5E375B6B6D4D21226D0FD689E8F14EBB81372B93F5455ACE6C168345234B378500BE6612FC10536607E85B884AEC780550F2A26FBF0445E0AE9C0F4CB95F01BBC76652A9E6FC457D6BA425EA8B9457A6F3C0AD2A0FE7BDD1C1CB19A9F1A8815D84EB5843AECA4DD005378111E9AFBA9C3CFD808C0C3CF2B39B1962EA44B0848452778168F7F60034A68E5980EB63B94E50D170C680FD6345F12CF30E9089A7C0A422661DB7B1BCF2480238AD043FA1D0DADEE998F7CD69FF04BC336BBD5985315D4E1CC78558D4E235CD7E05015A5734896597F16E65E45E0C819CB0B895A38883ABE4F439D10195D88366CD14F45947716AAFD770C27FAF6374CDEB53B118277906F7E61C583E8C7CE3FE733541882C511936076DBCF65094E37FE2FF54E0977595077EA26E03711FE9054E2D31AE7F99939B415F46C05BB55BA7BC4F31F337D624A94C9629526ED51A9B93B1B3C5551F9B92A30759D7A40025E98E50128232A706CF6C3F6734D00571F91307EFDBC9718D78B3B792909C1C56BB8526CF5B229D4DB47E61D962538BBB17E6CE8CFB7854EFEB5591CDFD5DD8BB22FCA50E4D97BFC4C36E2573C0B495FEC9830FAC229976FB651B82DBA34173F5635875B1460A023CDA65333138C89DC81275F7F3446472F5F8C5F93AB130009F5B797D9ED536ADF5A42ABF6345B1457D5C96CFCBFFBA56CF124E78FEBF8A8BCDFFA97831A589D177AD260499130EECF8247FA5C44B3C0C19AFE6BBB0A7B87080E14F3C3457C8424557BD9078DEC09A3A6704E1D77049A1A4431E423B28B9476EAB6292CA1B3B4B43E18EF929EFFCDD574417B15A4DC1269E593F884DF5D492A464AC3F2436B8C691B88658180E53228AD83C4FB843F8571D42A9BDEF37EC4926DCEE5002A12144600C9CE7AFE483F3A64E480CD09F8CAFEABC9710E01A8120E84BE5861D75705A8D18F02756D8FA78392F1C89D05F37CB9F768289B8CA99E22E86F8200770D6DD2D76951A45F73C0730162C363886282524436D029786E7CFA2EFBCD3D05169D362DC8BD472AB376C12097443080F3C83AF1EF7339D8FCB85FA098BBCB5EC3645A03902B758DB263A21C8CC4874F96D672EB192BC1A183A1B271BC1D6429CEAA8208F5CB240F451A71B6F884537ACD49471010ACDF28887F6A02A04E738CF9FB5B00E0C474C460EED1F791F4EAB3F9AEC225B40CCE223D23D07CF0B60846C111A07A86448B9CF119754935E8C350752CC60AACB55C71F4D5F5F2BDC3E412039D336ABC6F3D46EB0D1C2080CF260EE77F5C73A35C23396E2324998B7DD375537DD35B5F27C3B545492F682C4B89F13F65FC4F72539E4A7763BF4AE2443FE0A2F683A86274672FB9581668CD2B075C274B242536087C4DA1E69D0712161B868ABE86C98468FE43A42DD2AE30089ED92B7A750C73B19A6D70FBC0AC08299EE2A9BC94652B35D5B2D679220D34D3372AD756F842861470CC3A3F2BEE75112B138613A40FA585E449FADD6353A09363EB6025D4B81F9F224817FC2DEEAE01D797AA8A0F8C945FC69D5891355C28ACAB8997A0518C8F4465953819113914A7CB472EABDD1A8D943A82FA41315D006E54AEA4CAB21601A2ECF6CA0521579A6A92DFB6B77BEC6D5A05B0A72F16B0328C860FAB66A1D6113B7098FE50F3B09C2306D0B9D00987B351CB2BE099A7AA7EB7AA691A4E2D243DD7D0D864CF80A4D2FACBEC3C1CB222883CED667477D189100A5677CC3FF0DF31D1119D5F31ED2120E5DAAFB99E8F36E77B3B078C47B3D527DFD6521D7C593CF84751C21D591BB62FA0B0AB65E993408A016415D6296E0F080FA9149A4C31D8B2EA68CD7209E2FB0B4BCCF654B013D92AD7A4F6B1935995FD106663CD5760E63702196F63563DC994570C1B8E9B0A7705002ED56D335632ABE3ED8BC6CAF109F0588040DFD167DC364EA7F692D5F59C5616A6A7DA0C5EAA4D9FF017820225D5B164B6106CE9307B56EB08C563F123A05A4C93488DF63A6E4274BF5188475E8F7ABB8C3E7A8323F689DD93B043BD98BC948A567E8C6C95FD3788ABE728F7B7E299C460F9B35A59BA4429BF417B9F8C54F2DC475A7109B9C25C0843AA86ADAEF388A9915E65EA08C96C4C84022368E79A3A466B247EE6A37918CA0A8DC6AFE291CB9D360D727B6E7415D360AC414BD34DA40A1D995EE1303896465D52707A4F31A30C7B7DF936391435A5FD3F06E336CDA36E473E3D990A6F04FB5E6340581AE86D8EF81B9BA68979058BCFA1363D3F711D33EE9E3A8402A14AFEBF339BA7C34FA4EA2004FFD09129667646A79B6322CF00E1B46C1418557E0E62E106901176CA771979F4B6B299BEEFEF7B847F4E3ED99F56D44F5C73F00488E1DD862BFFE5290DBA737FAFA0C9D95C8307A10DD309C177BFC46A9F6D3BC86F598DC1AC69B070B9AF1CA2824F456E73747A0CED38631F9AC222914825CC3898F04F6AC09B01EF4CB09A63C9436625E2D0AC3C433A31D86948CE34663E5462652980B3B57C0920EB63879E28CA9565BEADC47F29C43F1718CE34CA5717D7AC2CEB6758A16F6D769CC277BDB483808CCA3A6DB99D1018888BB6A49D325891B5D6B4B77B18A5A4133AFD5E8AFA4542710483B52E3D51D8A4FB77D2458C4FBE2DEC1F6DD8C0FDD8FABE2130297D0606F07B305B2CEDB39204E2B8F8507ABD49C0FEFAD0332F8ED98736FEF5AE4FAF8515CD638E28F1555F54D7A64FB38D0B47734D0AEB8B55A792259427613733F237FC57DFC1AD49930D9844C9F44C3D6265BE3102D93E2B62D3B0D7760F613B1F5F5176E0C5EAE47970D30D211403477894B8D66D03CB3AE8992E16D52F6B2073DED09D504B36289644241EFD21018C570A2CEE6D59667F274CBA5733E41BE3370DFA47464AF850B14DCC32BCF1A5A8385314E8B38B2A642AA90B8A5647DF9B32B83D3B4B2AAA54472BFE84EF7DF68ABD0236DE171E5AEDE1770F63823EC143B30FFC69ECC464CD755F5AFD2B51AB5F05B74E96F6108810CDA94F99DF828EDE147BE061FEA46CF6A84CAC720717733A17677BF620C4963DD1A08512CDB6A96DD3ADA995D84A934C9825FA3B588D916CE1898F6C2F75B75481383B27204C343CCCE41E10DFAFBB42BC6BCCFBF7BA4C460147814014F9470ECC8B99D677EEC872172B72E5839D263F55B9FC91AE6143FCD1BC3AEDB12312ED10647E011A020B27C69E35CBA94623960543DB08D67B8CFD06760450A067E3F868386975793AF43AC4D0F3773AFF6C2CEFC8310C0701CB934098D842604E38370182BF05A401C38B6CFBD19CD7D4BA186A595ABAA48B8740DC321FC031D76F82B4F5FD6949AA101D70A702E18D8C2BC1283C2E2CB138699D507FAEC5B6A092E5AECB0AD9BF2E59F175DACE05DC18E485B04DDB963426A117CA0B761EF485B234971B6F681CE3CC5CE58A9BDAD9267E5C075D1BCEE2C88637E2A10AD441E9B1CF4A324B77C6623F4DF9FC6C4AACE068F66017BC82D562722FC93B02489DFBB5560BF60F57B736212DD8A0533071D10ABFCB4EEAD5AD9E36E856C8ADE0B9C4F6F5116EED43A39AF8FFCFA01BD558D7575AF0E36F2AFF74E29435778F4BA57A5D90214AD702A657F5A17A601D77E0F4C6A67B7B8C074514548FF89A781CF2E0B5225D95A944D1048338FF3AF206D331DBCB3F5E9E89C7E592A2295CB783F416C4160FCFD26983ADDDAC52BBFDD6A7125BA4426715F82AD9815F30B2DDA972A2E814D6BD231D453858749D65EE1B4C2025F61EFDF8E12E50A3719899C611682E7B2AE0CC85294542DDC04140ADDCCD5DCA315C22E5ACB196531A3B0071DC787C2753C3069F5D302A9FCF99B71317FF2749749C6E00B73F382983E1C91BC8115FEAEFF083434DEC7E8A22ECF2D1CDFC7B7ACB80FE0DD1EAF7510F694961E09882E50994169BF60C47B95BF37B5D6F13CFE48A9405637F87C157863C58E479488278B918DDF041214BCEE2ADEEF4242F55DE971E1A7F2EC566B362F89DABF163A690C8A8B808ABC1217C7D49933E30272A08689F7519B35FF8C1CE0F338D0B75332D163A5DCDE714B821AD3B8393A1740B6BE4AAC6008EBBBA30B8E5FA2253DDCF16B3F87B4FA47C1D36AC86E2FC39DE8BAFA79E7D58A3A6CD83FE09448EAB6020BF121234B23A72BB7DC02A2E235BB5DE3B2AA97D3931CB800165B93851EC81A1B4B7781F23E5C946F035026888C3D8C31170787F78333FFF8ECD8835AB5E9D165A8B1D97B19936940EC4C74D115A34120EAC800E8D680B36D9E29180BEAF5B3CFCC3913EE7FFDC37AC881C441F79A39F4A4161F3B403564F654B0E7D8D5415DEB9A6E11F845314421CC59C6A90826974B4CC477C280ADF4FBEB368BD848AF7F91D12E9BF4AD3E9587DCD7A280DEE9A7F2B6F2D2EBFF7EC9454173B748D2D90A6AA650D3BB97701EAD27D6AA1D05B817603EF1026E643C8816F183AECE863968664E01D6AC58C2A10AFB51B1A19A5B7BDBAD77D651B78C141AE70B074B9EF74BED349E58CF8A80A910F6DF8887202317BA36950F3B7EBAD45E6E940921043476B0FBC136EB397DB44445706F032FC47C454BA08DDBB8E71D1E7D9045655E1039C3C3D199EBA21596335BB04078DB6B39A4452662D282C7AC9B76D92E112B0027B711151C56A6459FFC70BFFC86941736EEF705E8DF5197B4D3AADCB31E421A90FD5179D9C3EA3EBC8FD7E9F4C29D736076723E2D4146EC325CFD616F6B0B70AE0DE179FA8F33A2536DBCAFAA2BC0A9740BBF41134655EA16438BAA5F8FC96256A6F9999CB1C57B69087C0612FEF4E6CF0BE5D1FB77258AF418EE0B90E8AF3DC38B7A15FF6B8D2BB739FE7D0099AA4694781E581A8F7A49BFCD102B7880E97B89880FC41D0890C33481B01D9BA991BD41B8D6501D34E0A401474CF89D089F3F6A189ED80C3006515CEB7F9DEA85D0766D2989B88280FD46F7BDC7C32C2294B2A1FD435102C2D92E85A03775CAF11D05F2367B57F651C7586FCD32FE920B1B94EB431AD2497E75F4E3C408A0FEF89907C6C830FA14402B1103DA4607F3DFAD625AEBC235D2392954B8D3BAE8A6D02CAE6D12EFC73EB46EC56E13D2729787CBB5C64910347AEE384972A5716B5DEDB99FCDDD5660E9453900DC1AF1B76D151C00E8E4BAD38E84830EDE92CC3099861C92BDBB59D8DE31AD9F4B889D480FC8DC70382E8494E1A25D2140740A5F327D51D0D3CA4259F1CF5DA3474FE28270C9B4E7F8A714F7C69D1F65B48D7C9C69A39CC58E2C77D7A750CC0B0E5D54B2F3450B66994DB524F15AF77CEBACD3CC611B2C95F6C93EDFEB652A70748DF1788E6FA2D45AF171C1AB59B0B2A160C075AA4A92272BC0F22631A24EC94C5D38664B08B46DC96B448C351C77F81051881055ACE0F364C80372EEE5BE7C660C7406B03C8F5345A04435EA61E7DE31409D04501BDF0CFA57A84C1387E0684538E8BB651C7CF4EFD6113EAF9383BFEFDEE4C702FD5A070FAA3DC7D644CB3D96C8FF65F18C88C43A2E66EB78FDD1EA91E9CB519CDA9EE1806F0F10653F3AACE782810776AF25C9CE1C580C381D00B95CB02AF3F9892B4D918FEEBB01E7E730079266C4FF0AF0EC305D3A168197158B5A0D4B1C1FBE4FCFBA947A5CD2E5324D0C4182069C6F328465EC2900B468E145C0F41D724D65547808BED468256EEBD76431E715A4ADAC80D5314ECDD03177AD9175EEA9D9149128DE8715534A648069F5EB9ADDE486029C69C81B1ACECE89FC468887962AE2C063C5EC7B594D88E56F2F3FA4A20963F3BC730E74923BC2DCAED6EF38412E9094326930D2D2E3A0FFAB2217E9059A88882E2AFD3E62FA4DFCB5B084D0CE53655539BD0931BC063CBD4E660A0B1BD9C7D6CF2836C947CEF2C07B859686424B57FFDD0DB6C34DEF824D835918505F36755C298A09F935A2F95328248B5E923E55AA4C91BBB0733E4940A34AF5226C21EEE9B0E0C3D15397A4D8C069B94C2C38F61FEA2077AEBC1F7C5E0875B9A7F2041BAEACE95807EE05A366016B6E0FA2E7E722BA34D3654DFECEE78DCAE199BB44E164E61729CC7A924CA6C7A6C061C6DA0936B4C70A02223EDA01D7B8C0D2E012F998C3B94D1387B6CC65DDA36360ED765F0A23EA562626E12145EB2FAC0F49BB0DD7D1ED3E9B2860DE1C54FEE8D60EF56D4382497C36181E864F92A95E76CC516E2E1396E2B0D880ED6CD14D2410C9BCA159F57DC9B763ED7CAB73F9EA5D42F4BEF91977C114900CB0F249B10DE8F4FBE220181D4FDB5D836AD2FB70F06869DD7F197F121FF748ADD6DF6C48ED9910F51BD7528DB60FC5A42CC0B72DCA6FA66B617F12FB2A9530247B1709DFA7729A6C9FF5B13D073FD7165033C45B5B7C7C66045D1735979132C49CA4442986760CF8F0FDEC0C0BD5E992641075C76168B8316057A993F513536FC917BFB783C28B2D4878D120889945FEBAB84BFE4840C61012043E96910A374CE33B45F461B5492E2F96F0EF91E42D7DC755F37117852C4FA99B106F5CB5C70BE5055ECEA5DF90B517B08252DAD6F20013FAD50F47A1682CEB37AA0DB64E4B699E126CEA7034969FC5468D19455A1F2BA4011AE5CFFC2544329E268326345C9970756F8712E7793301E9D3C92787FD10B7637F5511E27A16B8DDC21C116F13B0F27FA2E5B6DE60837F011937A986C00A4D9551D37E994DCA480493DCD5C4DE6F40D0E25349284131B9E0B3B6B9BEF6B9DB6DDBED89CA329D9F3B032E2C05BA9999CB02D7896258E3C4504643DBF49A155F96A69148A51F243CFCC3B2BEA7E8BD534308E752C675CF478A231CA99C2EE402EB5DD5BE2AF5F4FAAC783141BE8D2A3BA44156A3D1EE98763108B9EF4670B25569DFF3568FE0E183938FB150FB79F7F28D51C8CE40089C06D6A09F25845B50E64AD231B367C280883CB7FFCDD5E4C044BAFE6C0915A0C52BB14876088267EB84A01B9931C03DC799995B6969E65CCEC63697F1F0E146B75EB6987550C23DF2793FBA8F04D019C31AF4AA747F3BCF00D6FC86CAA707F1F27DCBE598B18ADD6BA048B2B174FFFCD20F93DD2F8E860885A15CBC2F06CB10537C205E143ADDAD33CE8CE5E6EB22C6A917172BF962080290AD6FB88A91C7B63B64047BBCB60309C01F15271CAAA73AD93DCF99400BEE17F6F771AFD156CF28B788586A18C21739AE5BFDF8F6B8FC94A9CF1EAB0399F9FB53FE70FE5E4278AB909B2A00F5A181F67CA7F7E046209A2394C5583CEF4C1A7D5578EE6929147D34AB5B29B97864F46686736A0966EE7298963AE27040F4598E0AEA235B562DE84BB1943891101155AFF6D185D9F66E5F9DD037B048914D7C1B55505455D08DB2E0C58716AA4C4E779EB7348D486F445CB8BF499DA3054F087ED95C2561770335DBA67F1EDEAC600071AB5918ABEAD7E55C5C6E609896ACE2426C47941C1FBDBC4804D8FF4C9290E8ED35C967D65837D6E2B153A3DD843712AA34BE1FD7CE0D829B04DDAF036D9D16063E28F627491C1C37018FBD1EA3D33899BEDE421C1910C2957C13B8CC4B8A06C8D3B2264E8E1B8FB5811622A9986B4B6F673994F6F5FA072ED8A8564C2AD450CF801C9992779F292994A98800AB12A9EF07F777F441F19FED6314404A9949218B2ED4E239EE677D8D1425D0547CBA99C1333FCB1620A8D11DA5CEFC51DEF5B3C4862E17A6BE3C194F88B7BBCED98325D638877757ACD448C0A970D63603B58E3F4B8A361D36EFCB6AAFF2858E14B1830F0FFFC4C5CB08BFC21FB091045B9A7F8DC0FAA02A62D1FDF7178B5DC90D2111A64CFAB0D83680196B21D75EB91A5B3E2568C7E8A6EDC65048C88EB34F6494CB697E44F895012AFCD7AA86DF341CB9C63A7EEE8E5F95E3D60213BC23C5A83CFFAD4225BC731F07B34FCA550DE26E0D6DA29F03A1D9C4233D9A0633D31AC5F55A11C1208C8B85306CAD41EDDE3FF5EC3A61194E724EE2D6A4C94FCDA217BD7C7FB328A9CEA8064D94FC66049B56AA1DB9F977216AB4242D0EFA59AD18540F1430A6F4EBEC5CA7EA81EE4BFC6E77F9EB6352B71275D450843304F073AA82D77EE5602B43DB62B9A733320A67B2727B21B705B86D5DC1459B5EB688D37236FD37A7163E78E8425C589DC600609DF3E9F36F9094D06C60731527B8ADF58A95E40C1390FF657D418D675F528B3B665FB5F3C56504DF40C1D3EAB6F3CB85F5C7954587F87744775382517B4C652B4259571A8AD219A6517E2D6D3212AC1684404DE7CF71478BEF7819DA24B09A11DDAD5717CC63995BF83DDA735C3A50F6B164F26D6A79E3B20A1488DE2AB44347694DB8EDD3D957B6B5510C4A266E514164D23F1594D84487757EE6F4353BD06CA7F90912AAF5188F217FCC11A62198E2DB04A016D36A583891D346C0D84241027DDE80090356ADEE1AAFE7CCDFF983FD7F8827BE286280BE118FD9FCAB26A10D19BCC63A9AD9D202036193CDA36321A5FA7252D0E65FC0D8E588D70C3B629D830CD1DE2798309A6B6113FC2A16B341BCA4271B5994ED767F2064FCA7DA335BD1D6B21F54CFA0DDCD47E2A38CA924DF85D2DA869F6DEA8FDDDBD20728A21034355728DDB4287FF0EB5A9DC113A71F7C69899EE76BE7D186B39C7C868E78C03E923FF199246908FEB48AE45261B3F7A8D6E4FD0C280545A9E3A578916364196E483F57EC37439B0FC9FC37C5CF56E21A5CAE0B70D25B928EEEE456F19821DBB974781C646E860EB3DDA8EF8577CB0E3B9E96245E14CF4E51A5D11F7AD9A77B932467808FF55E588455F810CD50367DB1621469AEE8BA6FCD52C75BB027521C530A918F9D646C69EF8DEA1F7B14354815F11E0187F01F677E2A0FBF78ECA2B1E51E898E26CE55693ABC8812F4CB4C10B9BBDF385C6AF0B340DF8DD2E957D877DC1AEC30D4A6195F40F09B4CF4010E810C764EBB57891652C156DD20584E427902DBE82AAA3CFA728059D31C36253649FDC00CCD29517AF2FFF4F5050B0FCBB73B2888C989761A7F0551375E4D3C54E0C9F8A4679E640A73476BCC6587195A82CF5E6F550B0A85D57A97E3E5D0B9A194EEC3E41C0F0E94A299789538824A90801AE02D93A78EA914B9A8F10FEA2D2A7D0812009C732665D48F6DD58CEE4CFC72513CBADCFE171F837E79B8776B392B2224C02766D0468E513D0BD1BFE6ADD6C04374604503A3EC8539CC707110D18FCDC8E000EC1A3DD03F7008D37C1FA02E419FD4FC7A6C81157E07E353F3C4882C2AEF4A0CCE1F7A5CB5EC753528152C521A2ACF7548F19862EC31D8783BEF406EB7F756E41CAC3FBAEB9A901F9268E78E06ED5D6CB19BF4606C9DB660C03A9D5B06BC235DD7936ADD74268577256F72C7F36CFD7D4D09D3726F1908BB3277AFA69C7166EA2F4CC9387B13AAA8131D9F21A5D97C13C7DABEBCE61D72556466093EE0F87E9EAA9CB42245E1BF55157013C4350F38596CD26D2819F98698CE98F5D4023BDB3C974B0E61FC6E6604CB1707BB22FF5689F3DB3AD4831BFFD3F93C702E0DDBEBCAF626FC2655447134570B7150E030A3524A6979579296CEE062D18CFAFFC4474490DA81268B27B60E9E9BAC2A9B7D2E2377A2006AA5C439C263E8F9EE360B42E217646F7C44EBBA6D9E3B98AD20B1BF7CB8CDFC62CA7AB139BC2DD1C85A837F51AC9BF08B3F36CEF176A03F358E2E37EB5DECD0DD2D544E58D203910613EB14744E914F92C5E9274FAB025CB6D8AF16EE03FC86AE3947F7A30FD8C1EA23EC7EDAED4054174E4E6DE048C563B1832F8839927ED3EA54B19BA41CC144C8D8A6D8FB66032BA6F4E16DC81C98D37129B3458C2F2A6517694FD8816E8C71E00D77189768C423702612D9863FC2DC1C4593809C74D0AA881DD7477BC584376DC6C177347EE17F3E17B524D0DFB315196035FE6AEE83675494E23BF2433310D4C72E84DC82BDCA9B791D5BFD620212172AB2562B5C36DCA28C5CB8078CF41F2BDFAEE651B04243326DCE0C51ED88699CFAE4DA3B478DBDB92DCFC8D2EDC4472691173B6C5B9E5E116C30DFFDCE7B0381E8E1013CB392056E3BC7442B2A2EBB631ACB65DE639B3CFD8EF3918531480A35314F3F23F9AA6CA41A9B8F6D08F6C589DD2584B6B8285230808EDBCBB99C0E918D4E73AE7B397328502F2D47078CA2FC0BBACBFC9D9E491EFA2A2DBD69D82E0D829F74D5ADEF4100E6195CF3D7AAD2041078AACAB8A8EA62FA42C6AAB6203D92794F77D4E30B84BD16518A9A0BD0AE4B372A537BEDE43B31A6FC1A58F9B43AABD485C55E630FFF8A4359DCD52552B8A090DFD5CEFD972551714E5F0A2A16442345B33DD9D232AC8431EBFBCC5D5165D12961D1E954D01C0379B5489AC0DC0357667325AA864D44269799DB710BC6A25D90AE8E0C9368BE911C91D68A49815850B4B29708BAD74B4BF3590E6488655622DAF3A7B52356C804487133223337679B33E583B622EF873962E8FE259DA8F5DF61748B6799A14ECC763A1B54542D67E57BB73E411AC023907E54BA0EA8B7F20E55739BEBD7F83E408238B73249CE69FD2DD593565141FDAF12BFAD3A43670935354ADA4067DF0AE4150AF306AAD3071EC4DC0AEDE6F568DCDDBABEC98E4D17AA99F8E881600D35B25CDBDBE5DE184180A9C35EE8B42F6890E068700F06E4829A742FFEBBB214D17BA925B5C0B41244DB5BC7AF49D9A24B2C135131E553CEDB2CF4E6E2EAB840AB37788323024123853A19CC04F6E344A175A4BF1A16776B7F84A17501DE4A594BC515E788FD0AA08ED4BA3602838A6D1D485B1CB80BD24D97905A9A7E2DE71A9A4CA32689C46AA9EE52A9EA985C85C9289ED1577B577C444FC73FD1BC3DE03F9FEFC10E6A17553A7E3FEA6D57AB71E2379C9C5F8904EC43E57D5FB119CDCA8C2390D6C3F0B9D01B9794A4207DE3F62F00A4D1188C727B2910153D9BC6337AA46D2D79D09DB7656C0B28654F1FBAC5C3DAA8A75B16BEB5FAD8A256E38EFD232E007A741028319EBA4A6DBD0AE1C1F8989246476AD4090F9F4F560D0CD72815FF6AAC29C8674B1D366120EB3213300E99DF390B3169A1CE03D2A5E471B9B8DCAA957259311B97817088B486CB680047359440DD39386DC2BC24AD2AC30436A08C335199F08861F93177640074A241D9C5884EED07EF0C0FCE8CCE08BA30221150C9EDC6562344CD3E14D3735B41DE2CBFAF4DE0F6D417299FEB38146625F3C70D8872103FDC6970D9D37D1CAE92375F81B26566A78A02139CFD83415BFAA5D328674797DE51E4AD9B3B9E1F9BD18A0FCA255CA8AE7E9E192ECAE5C60E9F5D578E59F7F7074A12FA75F9388CAC0A148CE9223681A93D62A679254AC2F41CDD871BD73BBC6C4E0CC9DA67633B61BFEE815F4E15ABDF639899DE105A5F4D74CCDA3EED32219BB447EA5C6411CEDB351DD76CF11456EA762C2F300671A12DD6ED8EE9AEFB4D0BD86D0CF35AEABC9B9E7822478A6DFEBB887DA0E2D3ED4C010E5031C4332FED83480C21ECF904B65925C4CF64595F20D072C7C6AF12DD3C76C682833CC6296DBDC73DC8C979004DE4ECD749BA45D9748DA728AF757FF5422B862223146AF86AD4AC4D4F407DC2025B8166E2CD64C8E1543E046ED91AB1AA5524E88AB6851752AE5A2F02F933DB3CB7EF48775017E000386805EFEB8CDCEEBABE613A87E0C554F99DF0C8FDE49FE73DFFD48379299FFCF738EE21B9AA1AE4DCE7BAB98A356241545B6F7D186AB544F77CB61B6492BE1F02C4B77DCD5083DE4319D1A1B792961D11D552F8AFA649EB5D2AD64227524722B0CC97260A8B3B6493B00D258A570CB238D3C2511C0582DCB478F878528B8A88A5B33F9FA6C41302DD1BFAC664C692001F7F7D207A8850D6FAF22ED887589405739EA5B5B9812BAE617889A225FB2E6F9EAF77D3B3758F9ECB89637D1FB20C428AE3420C3679B834EFB0F89A389FFD72D7420F2435D118045FF7B7361FFDA0BBB6934F81AD8513A626CC25D9A5E2A5FD1C51229E2D5FF803B8983B672E92A1FD72C16520531C694F44C9C99BC3385A610239F6963E0BB66ECDF4CA29E1C175E414A5D3F9E9F495F2D03A073965643186C46EE9BDB41876A41ECDA224719F5C76AFA6E955061805F023498AAE965184ADD6F6BA1DFE0BBEFC3D1EDCD40D8F55BB518C9B45CEDC95682B24F2818795CBE5D8E504F0885863C750524D9D238E4110AEAEE095E1C545C2989BD7E0BC0BE8AB750A7D319AE69CB080DA562F7DAA7068F38B14AD7282E041835B58E2A48A340F993D10FF4F805280C183A3FB45555B8D54EC145CB7B9BEE71D7BA652FC533ACE1BC8D621F7257422B363A5AD2798FB0E6E536854F2BD25914AA0B6DBEF1E2EF71FC7890E20FBCBDAF751CCB0DD16098D96FF22961B6141257AEAECACA339750950F6895107355F04F9BB3EEAAB3A9024E4CB79B19ED7947EDE79958B669077E6BE182020536F7F234AB2332C2F2790DD96F5816AE3FB5F2CCD72C6D177845DD0CACB44128F6EE6B1C2F673A8A50842E13C8FF0087CF71B8BA0715637A40021998652FEAEAF5719ADB71EEAAFC8093E525602599278B35600C743AEB41EA78CB0427D0894158DD4ED564C4742033324C58B01C15822B97C9634FC8F320C0B103F0A904D98C9AC529FA799B30F8B2C0888E47A3BACDAAE5A3DE6DF39A693A9AB3D95E7C973C7125C0F7D8C59B37EC924D7B9737724DD92818360F2C2EB63BA5756AF5865AE33947E311A5EED4A0CD056442E19888A2B8302ED8017085DD5D137A3769058F0AE0476AB202CAD822D6A781291C537120F316E90D2C3CAD13381EDBAD35505A5B7DDC41E46771F460E501B9BE17DF8D4DFFF631C365AAEBDCB7D5CFF7010BE2EBEAA0B99820E0BF3D290CF27DDACF397A5E4922EEB7D8BDFDEC96B87F8202BD409F31A200515EB6A05E25A5FA504093F1D82A83A777F5389B5C90E66C369BB654598CBF3F258E9E14DAE819837A86EA775A05EC829B4889B816154A2B7882EC7FF71BA7CDAFF873B5CA4F35011DCDED8C0CAAD101F7BDCE1CBE67E081D98EFAB71490AD12AB7BD9B4CB9331B6B04D6DA2C12311F96E01AEBBB350BBC7311E8AFC9A6F42CD541ED40E2D7BAB44BF7F1E4465CA942A0E8767A38D89D0231BB897A995627EFF71B3E4483ADDCAED084B402A3CB23D5F91872BAA49AB361281454AADA57AC838AE2B34B799A1B46595AAA02A9738019EC3644C63BFDC72F72CFC35D48D83B831E6EF397474C43CF665D64DC0376A437CC768862A92C941B9BCB8FABC6804C03BEF7BD2C5EEE4609870803A5E9BB2FBC42028C5619C3706F773426CEC39D096FAD267BF5E6C7C7510B0D1948FAC573C5716EB4D6AC6EEC492B347497B47C0D18C77E7C264E9A04A4C3DEB83B1101E40A0A8653D9495D4A7C13A5BFF3C6956E668DFA999926231811F3AE84195B65213FFB824478911230719E8EAF206DD99C7CD7D3D7661E9F39250793C1391033EA99A0E31D8CF83997ACA08C43B47240BF1E5E9D1D741CD9E6D3F5DC2043C9D3D68A2A689615D39014B75FB53B4866488C4B37B68B5DC5F9B9D6AB9AF190789CD610E939960ACF607A488964C33DF0091FA4EE86654142083F68436D9700B3B50949C0D97098D969BA25622C2EC15FBE7D7C7B78C1C49F671672971E38996C2D77A024919FC1A87BB9BFEFC951EB75326CE48D3837068F31B9592DDD8505AFF1E0E31911D1F4E311CB1B81DD8A03D68A5EC075D8ED7D69A1D595E7AAA70928DE93B979438315A4B98EABDC8B5E932257AAF79A9CCC74E6FF88C02C33217FCB3FA8DD72AFA1E549B9E5CF6099E2DABA07C91BD3BA6A9A4936556FFDAD89D5F080DD7F818EBC8ADAFB3D51D8BA7B48209AAFEAC184E1A869FC88BDF92E77C6D4B8B983F4B93A52C473F1BF27B4D7514DBA522ACA79463A0B9C2E0D9A2D47DB238AB9E2A1636B9AA825272F2B9C8D36D64614A4CCE2EF31B67682F328B46D31FAA31DF874FA15799B5D53E143C9E9127AF358BA1B43A9418FFDE00CB16D32AA137FC7A5A1CFC2070FDA112DE600F3C05BA0F50F8AE1703AA2CB64135C29FA621385C803673A4D77195B4B74E554B043FC07B106533D0B41F7D882FF3702692709A64052C4AAE51CDF8B733A92D86D507B6FF4CFF5F3BAE4D0D9F3F90AFFD774591E6E14539CAF99C833D2A1D9A12F7E9CB1CF74FCB353D11E22B8216FB91564DDA8F1D2C9865080422DF0E0D8AA47577F31A7682B54E36BC8344D5F5F725C819D3DD3A948F4E6F6C893491127267145DF1B286C18C4F3EFEF0BB61541883E413EC3EC3BBF99D83E3919501A3CD59341BDED35BC39B655D61686555CBAD7A1B033C2E326887249E6E30AB12E43793DD1B72EBE858B40ADF4400A59363BC56063115492E114688F47447132D606F2B99DB9CA4083A91E35AED045C513EAFB7A3F0040848C1DDEC0FB3C2CFF717BC4CA36C425EC3CA9BC51B3B3C1885FD8B4182AA22AD38CCF8FE3990DA75CDF5712B358BE866A6435329677CED89571C3877F9ACD0D3E668848F0A4621BCBCE418BF2A77BD47D671191216B230C276A0D081C4F79AEF839857586F9DBA52B4E35AEF22D86FBA66DAFE801C686F03342849B5C3A492280950C7F3B725DB4BD6984A6389CEC1AB86F29D653781EED847D7E69C99320F8584700E662070E9C43957F4DDAB28DD2427415FEC6F1503551D972DCF11BC4EC3B3FE745DA7F717F35832B8CE373A00AE6572D8DFBD7720E00517C50E2B634B6BC3942F9A8C035AC80161CDB45AFDD7E9C473F8EEB4F1FEE7A677E820874F03B546464939F3EFDDA157C9F478988F3ABF39BEC02B722C559CEAF997A13AF66BCC0BBB4DA7B68EB6C6E8498129A95D021B7C3A072683593C2990627FEDC52F66F3A16A8064018E6618BE5D7C63BC622DDD4A15A33EE19E4161A50EA38CF6626D5A088FBC5721F567145CCE30C66DE60CAD79D31B703B129D27627BB5AAFBD9BC7D43944B9B0D255D8F338C7CB7EC56D121C3F4E61FC0D46CB0E036262FC182E8F266741842DE923D276CED79D4A25FF7AB3D2571B1B589E01583371BC8D8196A1C991BEB90F7FE71B99EF9E100375D3E767637B2BB1FC907846C53550DC4E6C7B8AD7FFB9DBB65ACB30C9644FE9D59A74B0E81A5BA068CBAEC9D6B362BA05202260B1E86EBB67BAE2D74F60B7E1C0B510BCE4EDD8D71E342D5465A8032E87617790ADE2770D0DEB1ED26D62A863D030C781D2FB02490718A5B55D1BF6B3BD1E3B3C163361B2F13E616FFC87C1BDAA7D7C88A331511ACE5A45CB94DBA557EC47A670BFFE839069A546FEB7183C27697A56B65AD762735782FA009350ED52819C23AEAD72A7150DE845B899669EA37B4A12D63BA7D6DFDCA495A0957BDCCEE6BE11B8B296358E92E60A2317CF4B7542CDDFBADFD18C88F5AA4984614A113E992DEAA18FA172C998EE6FC8E936E69953EDDAA3FD233182C7B986DF90386B3661C649EB0F9A7E65B90572132408929968CDC39D18020C6D81A3665639CD2A3612FB2135A6E057F0F68B10D3CC1C35DDA2600AD1C0A6FCC0C5DD0D82F6218F2C1F8F5B714C47636CF68D5361D97DD1367681116F2A2A045894A85F5FAF1BAA27F93A3B8809404181040C24156433B3B87467B27D7C3ECE44EB763D14356D6EBC7542E21863700505B8A10D4B4B6E9D2A4C2EEC9653BBC0D9FC68DCB53AE7C8B6CF3120C921B824765E7641A3E9CDDA804CF341012964EACBF55D6430673B83C12CDC53100DD8BD6B18A56B5AB68D83EA484F48D4641B94AA2816BF06EC1D1285C11AD060735509367FDD0E300413911442846DB240612C1389CD4554DC8D7D7C7E4D4B79145D4684F1FB75759E2D506F9DFE7632CC553B945D91FE0F9A829AD6A9A18817B09B986B18FECD615414A0FD6B6070B15F2484AE8B3EC3DA36D7F8007A7BE336B749104C2695327A49D34741D76752DC943897B29C9651EA3C034BC4B8E1F380A9FB0F9D2C23B627D9DD8317894AA754B8998573F025A024F43E03EE86A1EF583CE02DC7EC2BF2A8EF9A3C7743DE2E6DE38D72B5E33BC5CDFCD12184C9664EE7A3F4FBE9498F59107BF8B6DF69DBD6732AA8013FF8B4525EA9E40FF6F96FDEA2AEC03311D6E8908D426293E369D52F818233FAE1C2BA2657B38FB82E7864CE1177D5E21EBC8AB773EE928EBC4A7EE9F4A9CD2D9F15146C08E4BE0A77CE272A98AEA05A6DC18D5B856EF1B402F9851BC84DC95FCE71320D2A5540D40BEF67EE2709147EAF3C3D5BABB0B21090BA4C94CF7242982BE35925F691847A7C296B973EF2172F83AC9ED5E0A0C91AA697305F79A3FC6A8EA4E7D1DA88A81D4DDBC1F604BB0896DD4C837F11BF155D4605D46411A63FECDCD64D7AAE873E1DE22DD62CC2F8982EAAA66BCAA8DE8DA687910A03200FE437BB87CD5E6D17C6F5B8CCFDA073F29183A1E12917C5D78CC1CCEC5C2B04040D39E1E74867B21192EFF2629AEEE22427EB5D2399515D892EEAD80934668BCA906109F6ED85AF29E702FE6C112992CBF851232A4C140BE6CA9C8DB383D1729B41BE939704297BCB41E4B8C7DA5B24B93FE7E7D2214287145A764D3263C9EE136457A2A270EBD03408ECB657B78CB8C0A5C1767521D75A8E12D9FCCB3CE8F6321B55C50A6102381E95C12644549A0E5AF29183316016B89F6797BD89BA8F1E932F4C91C0460F35EAE32F46D42D66F639A87C25AC6E9B9C4E475B7A4A94F10EE0C1043159CA71BA3FB4F794E766C5A7C6F7B85088CE1A2584D4A765D7888F1496ABE23ACA42FC001E2D30B3959AD7BD941916E27DA648833EC82004AA0937723CAEC0A8E7FE3C6742DF8E1CA797F13FCC4A07BA75874FDB6A66014C0EC688C5F5E0D1ACE231B32A1A14A2503155D412BDA98FBEB450D35797BDF96264D141EEAC77550408F6A63993DF3F89D1EDC90DD0885227C273546C2D86D3513AC3241AAF96C137B69970E273B73EEFBF8668B9946CBD118CD1977445F87557DA03668D4F3A6B5DE6D0088982F6C5DCF082207A99B376B155FDCBA8A5E47F2CA4A50D48DDFBE05F8C1D28A080147FE9FE04FD49C370DD9E4861D8E553A22B7DF7324C51C20F10BCFC18EB59BE931C69232419F5E037333B52FCE4A138617B08767506B793A430CB3EA0A4D9A2CCCF813625FBD2F471C39DEB2DFD0792F3374A980FA4B208185332FC68798DEA1728054F28771E0AC3FC065645B3E996EA729DC6A29CC23F872BABE6A84911B1B6C256C38C0A62331EB66E2F8B9A77ED79E323B4A96728F0ECAC851C3E9C15F2863CE6839D3752F4F206C72EF0BD60F087315E6AD3C7C836FA3C5CA6BF2B72D877E33C17EBEE283EFD62F395637E784A84A3E4EA174BB501D2CC216306673B06433A05ED052860666A3C3D7E7D7C991911A56100A31048BB81FF71110697C941CD0ADB08705A5A73CE66AA87008B08B51DABBBC3FCE66B11135844BCD8CCDF4D010D7B135AC764B678CF307154B5A96D1541B75FBA65D7A0D5C2BA2D1DA48BF0EFB9BEFB5141AA6D30A59695EF7FFAE250AB52DF0969FCC349E1C7B8D90099EF0410A861FB05E37D7156991FC65542B3495CCE223CCBD383DD4432113B817B0AC4000F9EEC55EB377CF48B0F51B8D02359449CBAAFD6AB69E3616D6A3806BF67069F2572D1AA0E7DE28042DCA01533E1C381449E22A68D901424498DEA67F0EE80FAB6FEEC56BE01950969550F01D62ADD52396E927962F209B262674D2F079D0E48D1C994864BA90CC4CCF3CEA06A5995072904CCD97313E82D3CF76F24E3B3946D11FFF45319DDFEE619D2B5D777795567A44767F12B41D84A4BF738A2C6AFC0DA08356DFAC343EF090176425CDDEBD1264871CB7AD526D9B4E469E866817A1ABC9973C598B1724C8C3185DA3C999636074C27320694F0BA758B0842D2D3EC93DA9A9CD3F65B321E378D95F003C744EBD7BCCD4712B6FBFD084D9EEF0C84C70651E3AD999D64BCFB5E8F7D9582C290CE59176072A5157B1CEBB5684D47271ED482B9FEB7FDDE78B424988E88627FB1299AB8B96CAA72239BE6930BBA4396118041D6F3CE51CEAD81DA54CFDC8BBEB0F6C8E9FAEF93E2C404D543A0F0026C291CE992CD71BCB0C6E9C459143D995C92A4A1C9A6AFD36E1CA87E1F8EEBD30EC9D209BB3F64100180245F1FF6639D3C45134190F729CD06608426830011170C357160EAF351BB00AAA61F254B939D89335881D5D15F3DAFAE92ADAB2B59DB7D3EBFF526D9A6F44E1D8DD779753433A9A32A541A798805AD307787C1832385D8B11DE57BC3ABA2A81B70AA2221C8C9247EFB3A40943D8A0677F1D4E6F9149D97D6D83173FD3D3114293D628AB97AA4CC0121E2A88BD5B5C290AE7E5EE4BCBCC1CE73017E3C58FBE575701C919ADE5E94208789CC2BCC330719F022C1F79880B1BAC4E377D486ED467BC58B13F2FF97454BF1B4F4DEFEB3B5998FFFF604EA0BCAFE859CABA133AF969827887AC252B9D21D8AEC49A0D77FC83B4D9A2930732E9A22B7B823E302E469B52537DB5341AA0979642F4505151AED71B690430AFBDB09A8454183A23F86F598719B86D1E3FCCB72DD6599C9895CF6AC28FC5B1D4A821A6F9DD9BB7AA63DCDA1678AD816D96B919E47D0D0E95756BFDDC71AE430C4F71E521701452709B6E670306A20C2F60F84D6009DF6D749C5E02D3DD5495DBCCBE9326D7D302E2A56032F4CA5C82A107E06A867D09A2E5DE7DB9C250E25B5279A4867657AACAE0E3D601DD3BE26C936BF527CA9EEBF3B247F75487A01694C7595619FE6E90AD78BEA799B0BB0C126ACF3DE54F805725CA01879BA5B8412D4FD3D3CBBB37AFA955CF90248CC521B0FBD0214A8D4C9E4A41705714C8DF5EBFBBF2FBDAB93707B0D779357E3DBBB20D5CCAE707BA7BC5D21D4C23D72AA231E83880867FFF3A6B587EDBF5485C516239028271B5462F78E3B226B057F01DE2D348C7D08108B990DE8484E839EDAA174B3CA0DD6D1338513B3D1E4ACABF9C14A9E03CB373D039645B6447D7853257F74665CE10EAF27DC1640C0AF88FF4C207994AA23EFA97D1CE707AB08E4A615C580E3AB971D64371715CF0BCB8421D8178D708E4D3DB24B2AD3143E2176B4BE37DBD8812116E134DC9B72E35E8811F7F404485ADD7321D3DFDCED23BC8209A9DAAA198307EF1BC0E204CA42D7274EBFA74C88251398D6E479D53C5C6E7528BEA5BEDC8677F6F5A81A07BF7CE58E4AC38387824300D14FFF131A54390711F95E03CA59DFECE3EA4696643A16874F98B76F6D280F7328AFADC455C51712BA748D33741998838D33F65F0166BD4D9788B129CF7F9F0802758631E5A718A5058C63B0D38D9E6877778FB8CD8BB7AF099ED442C52DDE7D3C0746BBCB8595C35C815E80C71E98425FDC629C7F8084BA2556CEC31E707408BA6FD7A2F0AB83286A93E565FDAA34B7344474EF48FE5C99017887C8086AE4C8916914142151550B0222C5FF617817EF86920F1FC00B9D9E5BD95C6047731373DB142398EB7E5F1B29EFDBE41ED1E9BE725C2748EAA2F7A1471AAB6C15BC4596B6C6CEA5CB3C9F1E57179F96B3C3017C2244B179C384ACB93557170F4E0CD387D1D3428A7030B4276F8D3FD38074E9348033E3BB3B4A05B3366064C68E0B25F36C2E45FB0AD4606CF5A6B8FEAD45CD9790BF5BA1B0AEB5C67196C05D637E878F6D3108B36ED2CBC007F6BDBC7D74362085D651ECFDAE47FFB069ACCC7C55B726C0C6ADCE2760DD3509649DC58189CD7195B11245D76F64DF2D61B07E0C172313F39961BBC410E4000C7F7BCC52593AB7915D5B5B3E746CE8F15AFD2AFEA8200687BD1E0D767ED297347A1B0634A4F006033322F787FD901E7F2492E1B491D4F5B901FF12CA88B2B2B2982D7EEC9DEC4538F8E946172AC82CD468812EB9E7062AED4075AF0A587A92E9BD971637B3222CDE1A8965DE1EF2CD4A36F2B7457D27CD328016FD2D92B0560EB01608B4B6324D02441F4094E82D3DC8ED644FD9D7FE96DC544276D7E02568453EBE375974990442B96B85A9DCF163A5974EE96274A6AAA9EEB0C83AF9A2E27C4A4174EE1D4A4035782AEF83774E93F67A5A7B91E7C8E05611BA6747FA9F83A788DA50C9D4EFA17BCABB0361E055CE6D07DADE204EF601AF3D1C7A54AE1011C2AD46C27FC060A27073781A221D182D4AF531D3056401D61024A29FBB0030B8340E91AE3A32468CA48183567199F34A76209F7846ACEE0B5DE327B3A381087204DBB6FF40E1463CC7BD38311DDB99FBD05BDAF3B84D9E64958F67421CFA09903400DC87E212FA320DB95DF83AD6A6E247E92151AEA0638D3755A6B409E5853E1A7FEB54FEC711D75AB9CAB21DDB34D7115174E01E9F0A3E650F852666D06A2A8E133C872FE9034BF9A61E29CC319255B09E40096B6D15809FCE4C8993A056E4133BA1FC05933B643B5D476D3987E7BD372412852D439D38600BE4A7F22BE1777CD86F70F05DF3B260B41DED95653243419C5BD9B6288697460A0FF7C0E2928D707BBA41E46D1AE11BF3751852DA1516941BF67E5C1775383A7F88CBA065BABD2235C155FC69D3C11F5658B019B089A9B3A983A2D2533BFF7694FC271597C42EF35F8AEF804E18AA37E3F42E49D23FB9171A312A562BBC9B093D92D45EB6A1A8A665257D596174E1FC44E117397AA7C4C77FC1BB176C8284DBF4558B5259FA69836B68322705CF783121E3C4513EC11B76329F1310731CEBD2CC8B7F49AE8D87BCAC07B1CEBABE872B5F83D71FD10F300F9FA30F4054C476F86EE75AC68F1F80E352D3F9753233E53F67C3917C26F4B0E8A61AC0299FEBEF95D9A46BBEC9F5C16B5EF127EA18BFA609B99B0B362036F4AE14D11BD7EC8ED2B02C8BCAEE2CFE409899E06DA304E23305DB1AC0A7746A72746C24E6D073F1FFFD3BFAEF300299C8009043FA392DE2054F237A098EA5FF0E537105F25B7D85355A44FAE707B0A3D1D6B30356CF1BD6EA3BE57B3A6147B943D1C96C4E2C871DB1AB64D9359F1F3D15F9DE5F45FE8E03269EBB9759AC78F47DA7B913F09402EE65271859D623908D464B1B5E59E4580BE30E01C553DCC79B190A809C71D8204A735350C75C3361EF3C89C07B84270502BAB82FF089793838B13B3041A17AB396C09C4BEF716329318B95C7C4779889956961F8D2200C163C86F45C1FBA0567C8615F4E815AE8CE2E05589C006B4560D66A67495C2B99E3A951500FECF953D9FA7FB5843F102FE0F82E72867A65C09318A52D4634A3FA28B032B92160CB2E7D6ED156586D071B8CB147D139212BC47774CE580E80791C14FE49DE7688B3A99E966A9F869B0A7421062F18705AD23AC238B52E6D80F43DCF2B43F66965F6075469E0E789B40687D104DDB5CE5A12C0B741EDBF1A3E57BDACC92265D592FDD63703E534B78DBE9F13CA04B9920EB740FB220E01DC176C09CA51EB905E32398E739C6A39C02043042C5FFBDC9BF959D56842DB894FC108AFCA51039A9B28D19D67127856E29FBA3812F764D31AD4E2FBA5F00A828F85087B4A5ACF24CFA79A3B60C954DCE40BA6BFAAE4466C88A60293AB46FA2FEEFA2E3B0DAF0CD72B0CF914848AE6A9BC26F6578D08E896479879D3469E0CF39E3EA6508A412853C83BD33D0B993678FA08DF14AB40F41CEF0E7A4B992DAE6F884E193B10E5136DE079BF85936D3B5A586323B08FAF8A39B24ADDC2D7E1EAE1F2F90A39F26B130F060ADED352AF085F9169C4E21093FB2256C4E17416F57D29CD37CDE3BBEC8CBAB280DB69643C86696C3A6D3517150ED28B364884EDCF3082EBC5FCD11FA0B0823DBD808FA19BFCDFB42BB1BE2B73D5D1434C95DD48DF1ACDFD7DD17C741A387F18E7D78B2A9A894266167897AF1C8FED13D463B6BACDD81BCC2F3BFB17D2DFC0D43DD04FEFE39C801C8917D52BFE8D2E6F8C0C5159E0185805BF9DF91194AC97F6448B9189028D50B274848B429AD4DE45194ABC458485617B59FC5B1F1606DB20283A73F41A6B36731F6F9E978B276B33B5DEA3BF87282D21F63787BEB1F6FCD3B21004E6FA79330A3345F2C01C8CD1FE661FF9AB5B484B3260F2332FDB00216DA42D2840D3180B6521B01281E6D0F09664675531EED14A5C1794F3ED1FE634EF3D6E9D1B6F4871A45A83DB56FE2BBC52FCBC1E05FDCA884F98DEB436A9A238E086FB339E1A7AFE8E04A5110737F021C89EC5DCA1168E5CCAF92A04C950154F6209CDD01B287FC360B93E2A5661E7809FF1BDF3F71B40BA756411894B340CBAFF9E0EDC8292E7C316ADF4F3B827F1B82A406B53AAD8D2D660FD0CD2D6A6C693A73511FBBB97612A8CD3F0E177EE38D46100E64C4C540C834DD87E062DA2C6C3BE8A0BBC46D2070FB8D9E1DC396423D2BD1DD22F1F4FEE0E24F48CAD9241990B5F48A50B3B178A9C1CA71F71321226E98D1F79DD7F3CB75E0B0C16915E34A92750BE9EA173C276421CD0E54319ADB0C4E5ACB4BD599842E5028F613067083522F0D2A891BFDB190855B9BF36A7F2EC81EA89AE11A37B6B89126DA7C51A4BD0C902D0DDA55A4286E36835D2EE95EB46AE7D6B919C05D42E543D96D22CD241A8E6985A18F29184586E6A7C10D4A955D0A1983EEBEDC5A9FDE306FC366F77A25CFC10E5B8732D8F40D068224177288E9A13408F06AEC841C2E8612E6C794DE216A2B758C676022D4C0B99A4A54166CA1153F43FF66AC03F183DC30E9C83E6EC3BA33F63F262F39838E5C044625B4CB1DBEB7ED957B8F7CCCA6C63B837ED93B2C260F276175F2F95B235D4D1DC0C9014192D72CFE014094F29A0AB8F0A9BE896067D74BE5489F7ABFBD7EF442579875CB1795669991438C0B6FF13E06D5BA805DD2D0DD06731ECA45FC8CB9D7CE568921A60E68E31F31392EB82A39982BDFE8D953DE2CE0AEFFBF0243E43ED202FD6FF9E075A90684FED84A4334A8E709979FD5B60BCD60D41907D1FC5D927F9CCAFF2DE85AE1350C8EF8D68EAE38EBD0DA0D252F0B5C82E1C3EF78CADF92CC78BD990B06461BD77B78635C406B4109FE58850D2A97A6C23CAA18B9AEA535D344E41E783B767A439DE0762A23D18244E76D3219A10100264EEFCA45F19022EFEE72B856FC34E59ADF6DFC78D31C8690CECFA45321AEE33DFD40943B158BCBEA764C3579FD5A06BE297D363994E6B959338A3B48F14A3C58CDAF1D91EA1711FB39CF78F04E72B293B80847516DA41D5024CEBFCBB399393E59FC4C89BA310377AF576105CDEB4F6DA314E990B1513BE9DF738AD35B1460DA23326D2FBD86722DEA5D37CE5E34C11408C01E1881BCDA250C7FCAEBA9DF85AA08FC9503546A55F2B4D6A7D0FAB2F50CA8667C7456DF6972273B62A0DAF38BBC7D38B5B62F2F1EA8476F300D0116598725C0903B0323779E02977F33AA8C45C2933B412490EC17FFC2AB2B4130CE8FED8D34419FD15971EEA5759EEAF9F3E8FB4FBB26615B4286AB4C2AC57A6E4BC80DDB396043251DBAE26ADB03767DC9EE4ED3E0FC7D74C58175BC1F393F0CE5D16589879C6D53645B861B079B298E056E4539B2E2E70920D3A273398B4E9247771B8A23B276DA9A06945DCF343E7A4C9E7B06960A1F624A75B1B48AF0CB9F5B3A549646C4555D2FBDAF2A79F9921C54C6FEA316D7713D64FD790325A87A30DEDBDF0ADE3B7BEA52A0E319A57084A79DD706228989642E78BF51B7F1246BEF6F1B8724C57B0A3633FCF4440E9D57DAEEB343283D642710266386DED8FFCFD68B32949FAC691E66FE9B8D736EBCA6F4551B39E79557154E9AF590B6F5CA1C6A0ACA82FF4B839B6F9C555CC57255F96B2C963536E48EC9B5BCBD270110EAF7C64AD9DAB53BC791CB111189117A34A74B4F23A8573A59886BF974528D17B31CA9B6A6B7EF7F923B8915B640C599D2453941CD16633383F36F9849C0165D94698D793A58A7869AAC8B4C007CB9E43D8DD100E9504B1942CEABBA733A242599D5B8C60AA42F4C8BE7F040877DA2648D083A2272A46A90D215D96DB2FF1ACA6CE24A2936C18B7A283615E8E6B729602D018174276E2ADCBC869C43879B6BD0CF22CC0601F7491862971F65D3E0BB2474549FA18964B14D9EF81429F08383F77E8880E858B3F350076B709046284A4BF500A6C7D9D694F03ADC9753852285075197FE5F30F5FEA91C7740AF38CBF5B984ED852C99FD27113F690CA7BD5CA46DCA330A7E30E7AA3AEE8CB62251DDDD62DDCC29C94D79759357FD92855279A8516ED0B07D8F2CF6509DEB6C180AFFE120B1C06A4DFB1CB76B9DF3113B08BE85A50BF76480D2FE05E75A4F77909E0D146EDF0D751A1099EB2BD019525048BA145C7E0B3FEBE21A13A41A9BACED48E1A4ED32A57FA061243EE840ECA69191B1BCDC0358A86DDC98920C45F1FD193D529C85B33E0135DCF2B81C7FEED32E07A2431755F3EF3EA685577A6884041C6600CCAEE0E4182CF54EEC1B078D74A18D8C81E0678A7D1309E494938083786C67436FE55FA955D3281F7F6C145B7C769D9019AE1B8666834B51AE95BEE2A8D606825C7609FD3F24057425B27D01573FF353771BD47902A9BBC41B2016086A3F9E366F96DA8AE3C62123DF05113980D8FDEAC5B2C828D44C69F2D1420BF8E7913E59FCB88845A7FA6A84AA296875CA6D2FA21A4FDF8E75B5CDF0E1C0D84FEE983A469FEC80F02923695640FA0858E9B91812DD4D91AF0DFD97655C7FDC60EFEB19DB5AD7D7D0A5F93FC88A2AC1205D1BB60DB2F3BCE203C802752350B5E8240B6FEF4A38D8F35AE5868498DCCF1BA047DC56D67F15E3C3807BD5638A9494DDC268378DDED39A910A6C7A59E6738DC68D1A531C7EFA68BE06AD20BAC86BC36083E45AB0A314ADAAB741C6E24A530B3E3FE318E4A1B3827057F944918664A96277528D185E821093D392012803ADB63A4DDB14983E844392542F2C5A978F1911A2720E201FBB862AE98C3CCDA720A244B5B58AE601C1ED814B0753FCE5F51E7ED797AAA98FCC833EA272D86A238524C07349F5DD0BA4A2F6281B2EC2D29EB546EF52F07B832053AA433A7E8BF81C6C9F562B603421787BCFF621A69ECA5CF07CE8512BEF945DC744AF403B9DF0FDD48AFFF264D4AAEDBD8702863B5A345A733328466B22FFEB20906543639F0F6F85F3F7DBBD28034019F4D517676C5D8C8CABD4118768B10158D83BFF569D3B71F30AB57B8337C50674E2290C950E9D48D6527E885A0F7CF580717CF467759CA0D41CD03A91B75648DFCEC5C5BDCEFC2EB2007AEF2F01651A328DE030546933C1BF88F34AF14D0C1F0F37FC8FF4E015DA5D25D4A1D52EEC44DA8E832F01BB1D9FF6D067021D4703E8F2D511E73ADCE564EB53A048864D191F21C759F0B629E0053845D7049900924832DB7831CCB80B36644BF23EC71847286C959BF54C6CF9EF075B1EB7F43898576592F533BF0DC0AC52CA27BF57894E407D8A264496F2196DEA6B4706CFDB4E108E07FD18F5B2253EC3BF1914BEA0E7B8EAC0EAD4C6A3D2E0162411811F8579262AB9F3411327C320D27C7DAEC764EC5277EDFC2635ED39B0C497365B8C3633626E66D83DBFFD8E24BDBBF09A97061D7F530F69D929DEB7AB12488951D753EFF9F8C8DA17F3F4B17ABB9A1955F40A4EDE9D058E6F48BF1B5533D91B55D333CE4AE379E124CFD375D82DD97B682D80704EFA3DDE799DC6F7D5E55B72A99DF2A89159CAC16B47F297A467358EC67A2EC72A01007C47D757DFE274893BB0E141337105C46B159B08A0414A7EF8DE0806F90B5C5A9362E837191DA4573B473C6E4354E62C5667F75721370F036BD6CA025A49C15BF63A8B30AA5DA01CCF9746222F2113AF119DA4370DCE98ABEA322483C127CFC4AB990496CB53BA7D20255E63368FFDA40BB7022A1FC115B91ADE56B2711DDBBDDB9FB00C5FBE928F3121420288CC9001F865D44ABB4D78B3A1F2BF6B1B2C251AB1075A65A233C4472A460FBC76ECF191313D700F73BAE29795EF9A5FBD0DDB5E2E04DD172C85E15CB0A63EFC2A4E317C5FF01965FEB3BCC81CBADFB201C670F4C8AAEE2E7E75F1AC4E4AE0B826FA9F87B300188546E42F3F142AF19A4F91192741ACA71EBF29A6E1BB0D00A4534095A8B9885267F27DB9B676009631114A2EFF9B2D4C10111195F0C178D2634EDE70B4C0C87613CC9344BF2F62E9BCB42C4CECE15AA61A0C7915E51A5645609620695B4D0C913337DEEFD9195CC9545A8B1AFEBFE5F21BBDFA2F140A4D146ACC25B8332861C2EA55BA75086FD948BD27923BD2590C62389CFBE89498C82279258D11689613C21CA8F1788C4926EADE381C9CDB41D09563890433AC4BF9421475EE42AE5735D1CD10653713BD62299F66F793FA095B2E04EEA1CF59EFA731143D5849032DA833E1660A95117A2ED97DBF4D22FC0BEC0B5CB8EC32B63BA18B63F737F3ED775B6D91E052FCDBC0C33A6F4498082542B039A26BCB25CFB1B23088D9BAB9DB12CD18BF2AE73C78792BA9096AF766114337FBC06CD63BA8D1C0A5E5C6BBF5AEAC38D6B4EC2922B8ABC930F58CFAF2C65C43422193F4AEB436C05AE3213CD19F58CC7623886525FDB77DAF08CEDBD5D48233D63F1D6BDA7DAD15E817775DB4C9DFE754F4AEB2A94DE6F883961DF23801A645906BEEF9128F3F6C9FDB57E6D7B5EB46326C4C39F2C0694230CC28852D54281417C4D24470B9EBB625AD1D144B4889D23EC975CAB65A855CDA704128A61CC7C50C5ACFD6355570E07CE55578E4453CEF4582C368E585CE0F08BF786CDC2C0158E1A10971AB769872C52DAEA5D7C8947A2B6300815B42125A7B8773E6E8C79239D32D7AF37CB9D4E8688CEDCD71A213795B0C1BD5ADB0AA337989ED3E4E65DAA164C26946978C9468EAF74617C47EE4328C51F41418F2D35BD33D47A9A1ADBB7C4F5A968946A7A900C293C65648C3127EF62D58BA9995B19B10D931C07D67164B2E685FB840A019EF4752602DC9317714D89F6D9318256EDBAF002C40D5721525AC0D2BD2B4FC64138F0FCC5EE648E84AB6908C1AF71408D51D31F7587F1BC8E19D1C045D8921B447CFA9287AD03B4EDFC3FB85C7792CB2C479BD5A14B72EB8D3077CC511B0A7364C80C32F11CD1EDB4B3A0806BBE9D7765B091E04F46620C23DB801A46C544A935FEE00F0A07927171D37D3FDAD3DFA81C40CE60F93EB65E667FE032A79DB745EBCD7EDE57FD51B647CE25624444199EE2D9647FAAF9F43554433B25CE78098BB33CF24A888113D9682BAFE58B278C036FC2EF41CF8C156C39D67C378E4E0EEBE750656D67250F8447C420E6EAEF139A11EC90B1B50CB582E5089694A4BFD843602382C022085141A7B8AA1DC5F68469A2C2AB04BBE91EBEDAFA2A19CF0538AE9D47421C3F98084073F340F0292B8946452251630987DDA49E56A79F1562C1EF57134F036A5DE932B2AF9ED5D24D28463DA55F4E7C29045DE9CFFC4372F7A6AEBDCBF35DFF2D952D90BD4650FDB3BD68F25B65A7876B65C5AFFE8B9CB06CF91B88A588136C80D9CD361AD83F25B6D1E17D161817E64CB06262AFED0417DF26B9B3C0AAB0A06B1310A7375352C46A410E167366AD768559A6DC618B416395F432C0CAAA8D10F88E9765F36B196B37EEF1F1C13C4AC08150C9E4CE45D9B1663FA317263672875E0BB5CFFAE2A132A6B431AA7099E47E7FC8349D04EFF0B84C3E8A743572C4B1EF38F760656E49FB1A4DF4E2D1F6B24090EC675D299B32FC5EBDE40BBC2B1DD44CC01D1935F1FC084749DF9713DE41365D8CC9AE5041D60967B25E16FF1941A9A7336DC2D46DF5AB88C14A4BDEF077EACFB1F08B834AAECFC75B5E3C1BBAFD3EBC73E187D862411AB97D694B2E557C47E5093FC15780805518758B4C5B548306F92B559DC58475464C6DCC18D2B3905FE5F60B4530F87716107A1A4EB40090C23527895582B02141386A726FFA11E9930B6099B22816DEEA2626E60F4B17C5E175A852A2E174D59FE8219C190D0D6C50C14A3C5215BB193FA56209CA4D14AB2DB5CEAC2B3B20CEE6DA1F798B681D2DADE8DD13674B9156E5C3C4AA09B1932CF69D62621DEEF990AD264996069B01E6F7A21F2E5996251D09FD955CCA7DAA902FA7D46E03AABD4FFC5A1A873711FBDFDEA0935C399A0178CF2516FD03746B86B5A80576A34119373EA7F059A0EDA3F0D18CF33ED63DC27C8157E0C43C537E86FD37E58EB5ABEB5524FE8E19B2298B9DF539C7C31FF0F7AE96A56FD3806B81088DC13224131998DF42066802ADC2A08AF6F69D36A7B9B518430C5532D3AEFB20BE0BD1BF4B2C968AA78331C614EE51B8E677B19A98E30756B39BB6A1AEF0E91915BC91D98E86FFE7584BA6ED8D6D51A132EBC124C056FBB9363B8610EB3D7A77A3E581C02E7D25184ECE47A688E718922E4672CA9567BBA9BAEC81CD8DE7FBB8CA04D20B51C850DA2A4AA63E87FFB27AC89D18FAC40AAFB21331AEDABFC3545333E57C73CB7D6B601B7180E4489269001A6786415F4D1ACD8EBC3CCD8E78F6577A9E107ECBA3EF5EFA242F80202C1EDAD26D9FDB8F43F70D250D899EAAC973042149B8F0BF7327D72A49222B5C403645BFDF3FBAF78F2AAC71B9FB582346CA456EC183867409C18E11A1BBFE6FF5B681B0F893778C87A9BE8A67E196919945F4F22D70FF5D85C55D23893E7EFD9D685C41B28B118EFC905C450A9E91112C5CEA2475EBD07DBEF0A125C298F467377E2BF8D4BBCCA25A2DCC4AC83AF877E1FC820D09F31888802B3226FB0129AB9E47FA65BAC527CE74BADAF59F95CAFCB6EFBDAC889EE8075CF7C71518535DA63E7BC9DC5668417123CF11DAB1070B050DEA01F46BD86E59C5B3175EC1C0C1244E0E7B5B6FB5D26979393E430C7B79893E3BF819380D206438174038764B7196DC0FD94D4A9CB8382CEED4490C43C19061D2BECABCDF386F1512EF3D635601E8E9CDECE9A452A0E6C6AE0D6BBBF3AFE226A46AB3285531C7AA9E0FCFDE0D9A557F20E9802139A7C8EC2B2872CBA3AAE87F0BC6DA226BE4AA5681B114E080A399BF7480E8583DF2505AEEE32E45C4112FC48DD364986DCF106EED4C8705C1A9FDDF9480D337BE5C61AA3F661C6968AA01E3E454698FFADF366C73599B987DE85005C9743A2416E637E4BBB67FFC4D35F26B7539C33256EDBF680939CC8986F5BF32D2ECE4905A4F6A1727BE1131771954856A1C66A402FDD0DB86B51E9C02E6BB136465FC4253C8D98FED1582EF8AD22828B6A35580FD58A0038A9D97FE2F661F312658041839969752C4ED321D4EC8229C5753F399029B0BD5F065D5A19CB4548C86CCC1F3A9873FFB9E4F421D033E4EEDD4ADBAF302E24371EA97D817AA33C72708C1EDAECBDE7C06AE0C95D8237517666D0FB43B2434BC50EC2BC8DF1E3CB46099BAEB869B251E79E9B175B75FF62F408A5FCAA4F6DEC90F97B926272389696B5E38D26B946E0575907C358DB17D046D58D061683E07F1B075C10934FC4260043AAC28928DC877D27DB9BAE618910564EC3EDE3C402E86BC3981203CB7DCB9940C37D948556A57A11488D1332B05F4E5757D470A22D0B86C88DC456CE014B673CF5FEECAAF26F4662C9B243F46969025692E445ABF375AECBAE50EC9E48AD25EE1D1D0C16624CC5BCD1BEA8C8FFE3579C50B732625A381002115A1D69DAFF5844731F41AFCDE42CCF1A13FC98A64FB9769F03CA631B1C3ADA6A98F40343BFEDCD80966652292B60DE83385FFEA9CBCBFF51450C768EC8C4FF6FDF2F76FDA7D5886148168CE2BF693BE0179DE250D41DAA80553488D4DDB01FF97329E94C7DB33005B498FA8408E13FD5BBFE079F6E40EC5C8B735EBF9914B932A82441D9D5136C662294956CB52939F4F7E335A3B9749CC1B9F374AAC89C9AD1E718BC469CA21D2CA467F5DED54C402BA0CEA000DCC878822EE3E1D329CE76E421305178FDB31F5DAC177838197C5B46A4F96721139695EBBCF39F04BC1BDBEAB567E8FD812C355CF72785CDB3A6909F801BD2F448B3EA0C7F96D09DBE4EFFB1CAAF2A47FE6BB830FDB937CC5ED2B485AA6B85DA799C1266562DF181005A345C62BF94004C1B8D85AC06D114C8F2C5E2D569C709251EB929237C76E9CCFB9CB39206BE3C391FCF5E814E42AC2BE1576B9F0664B20F03BDA1F6431D1D1CD4C0783CDAA2A7AD32281A06B2BEC53EF1568840277EA4341F5570388045526AB214B477EA23023C13F4327DD0C84CD1744677091B21D8F95F38A8904EC5D6542AD6E3A68B355D688B1F6CA50DB7181272B3D564B1DE41C14575217FEE44E5B631CA49995EC2CA787EEC4533657FFDDE7370329C9BCC301B8785F7A307F1D06F88F21F5BD19F94827C128F799A9C354A021146985256B3D3E8BE46AF6E370EE193BDA3494E0FCC7AA287C3A5B93B638AAF9BAEA46288DDF690A464017765FC2F769A5A930FD3E5A5F399B2F972EC286E81062B6BA85FC04DBBBC05B9971799225E2F0867B55CBCDCDD3B85D6D56C6948B03E91080FBCE3B2C5438491050BD2E81C41D5C2F6790AB1F327D2C7023FD891F8D6E13D6F69E7AB1604692F21ECC7794F028A8306657D72B5858301F5296A5FFDCBEC4863D0503749E9B483E4760AFC05682304EB17D67E016553FE9108895DF3EA98890172D795009AB414E4539C47200C56828919DBC1AFFE040FB3319A068264607CE51D387B9291B7483CE1C38C1F059AA86B68BC7F852D21BF759A56557AF5B4E8CAD60356AE1D9D11AB49CFB9F627DFB1AF5BF8A6D85A775B66767616FEFEF6488C383F5ABAD4E06DF0B6C82BD2582B284BC1D4B27168525C69FFE8117FCC38FE758B2DF09E38DCB1688789B2AF3A050142E50787EBF2098C229E6965FE134593AE47AF7FC4B59F424CE3388B73A01C7279251C7854C664803D834EBE840CF3851B922071026DC17B967F06E8467AD73F8F70440CF20178BD31F8CC315AD8B3D213029D08746BA9FC70AAFFAFE2F393D0339BBF28FC15B8581667E9B43E0A1534AB70BDE8954B30AFCD4BF10B91B8BE2AEDD6489D590E0947B6155A1E0B4E7DBB7D5DF08A340FE33DEF34330EC77E65B57FEBD4745B0A07CB8BCEF0ABA92E387E2C2F80230818DB1F70F65F872A2C5580A6C39B9EF600C797FF0C61641100903B5243D847C7243EADCB69F69D75F4B1D921C72A4B5B67D11B78F84BD9682963E075C76350BC301641E76BFAA23EFF0FDA33B1A41729AF935C09C1E5257F84A4AA0AA3A54525BDF1E3A51EDDA6A35A2C2B6DA82E5C7FC989475D99585A9DCB66325B98C20BD7550871BF66979BA3D58562C1125EFF230FDC77A3BE8A7A8CAEE2F83C62688E0EE5D72D4C858624C7362A57B7C0065670DD8776D1E97F67CDAE4110E53E78BC17793CD34F11089AF317407B5F43E26424A752DA5AD58470FB8FDC193D2B28FD4620C879BD22A24DE4EFCE4FC46D7A5A4350136F43D21698AEF1B4C318156D574E93BDEAC252675BB1F1819B651D08E637538DC14505779521CBA1C5695CE7C5F9BFA3A7E68E14ECDE399144E6D514CBEA519FFD2C677310214DF222CD79C9B9F763060C48D8FC4E02DBCF0D6396F6A28BED4ADB4F69FA44BF6F52E7516E77CAA981712F10E94DAE683DF1CD858492A6B7C1FDC92B3A8A4B121B1C8B8791E18062548BDD31DC544FD94DA7BD77A0BD18B3940760A3746ECAEFEDBB6B99562E836421F24C2F2A99F686DCF9C57E910748031521E359D21A69933D3B3173D520E7B8810035140A9F30DECF99A117B8C81990473378C58D1313E29A9824034B86D46BDF15479E8273BBFC4710958348B17C8EB8EBF8581AA9D1032AD591B7AB62B3E2DE12F36BF0ED71CB0DB342D5233243F466291DAFFD75971427F37549BC74CC8EA2C9D61C55FF4EEF46EC74F37E30AE9227F9A346A5A379A386E4706FC6DADCC80FC7CAAF6164673DF6B7505C1CF8C1A2C262F13A65CF1DA6D3CD277494735E5E0B4366804A816373AA0A33F3FB3566D9811D26380EF7E049F004E5540E3A984793553B866E364BF3ADE51ADEF86D37A9392B6D0D518C0F07F80E9BCF795C540BCF8BE8AE72C0A0A67160F296E30A0F5727391F82DF95DBF2376B82EE6DD6C87C05CA191AB8F32671C4E404734D6626DA299682D9A49788A7D961B737282CF16DBCB233124C5EF4800E1F25316763BDD92F090088218C071E91EF2D76D80BD05D23C6C06EE975279B0505CA18623A33A4D94EA882A6C0C5510986D537B49BAE93E363833A8571F91C47F022A6E05FC7673149128E3876AB6F423CA96A7F0F4D5AC1682DFC05BD4D3ED478218D40A42A894DAD908A587A83299D9CA685C4E25155760F53B27EC3F3E722E46E63BA2CA0D353C60DBF985F3E10893A0BC01539FBE6126215B090F1355D211E833BC019C7BB351B1A51E5286A178F70DB39D3A8DB65E510A0A93FD717FF30BB586B8FF49D62ABD56F0AA4B01D2A8E6A3BFEA54FF1D36C8ABA385D0974C7F29B25BF12B1036E4926F0E70E6CDC93233E211693F7B315C15594790BFF888ECE21352C8FDF906DEB1085408C877A98BC5B145BB1D0945E33409EB01E243D386492BD62847AA67D4EAEF5E8B84468F70457470C1FA15BBB44AE4D77BC401BC4128654B52B2B8CA48721DBB267EFA7F0B2ADAEF8C2BE9516A42BD2FC2C7AFB8D0D71FBB8A6D7034892078F4FE50A3B63105B31451A7910FF81F6EFB1CF3169B63C2F2544105BE42B20467E1FF2E4204601A486928A77571247AD40EF058003E423521B4196118088D773BD1694CC83C02219F5E16C31BBC7350A023E4FE0720DCA713444B455DA085653B539A555F37AEE9357BF538E3EA6A2C3B2BD30EFC32665B597A611EE9DDBDA9A9857FFA648CBB75677DAB55EE8528DB18C4A188C693A9DA0D7DD736401DA333DDA13F572D4652D23F9016CE9D39605B5E2F341F487980331D88511836C7560B9F3E8DF6FF4CDB7F74459BA199E081FA49BA205B368B4D519B2D0ABF92405409EDF1DF280A04F398758E5511B6E6325CE00C57186A0938974207E0059B2B8BC81156E2FC0A76E84C5BBADF4FDFABA379E6F960DFF5DB82FA306535F0A8C4D925246DF1D9B8C7A711554E9087A5FDEDD656CAE74357FC6AAE8EA0C72B74BDA7BD4898C6FC7BC50367FEDE6D5261B0B72E171043C89C8C2149D01466B226F6A1F3F3FF378E34A3956C660F0FC8022E15EA68DE5DAC57BC370B30F9DDCA6404C5A152831230DA9EC3662DE701767953AE8DDB9918598844202DC2AB41A0ED711D640F3C60A8CC69BD8D9340A32330F9D27E7A023CC99D173BFE6CA4F0604FF6E5B4C59EC2E1BD4FAEB3321F755B2494343BB6E647210041A1B96A02B7755EFB6B482B3C7122EEF9242FD64D0D7BE24D320FD33ED0D4DF2756BDB13BBFB622E7E928676D228DC395DC32465E0E3480B7ED2EDDE04101E9C0F8020D48F3D43A0F756622A3DD866B966B7B0BFC1F40B1D460D6A54A45ECCF5AFC93DAF8541FCC62A5FDBE907D2DA6397B3F7B535DD8E30D400610971E4960859DFBD4A441F209021E9E4B05D3EA0C80A738F0C4EE9B03492692C543968122FE39BE1F2E5D682C1FB8549B12D6F32AD5938FAF63C5F490EAFCDA9D7DB70681B5650081B098D0BEC87013C70F890666AE984C5FD92F6939419AB0C1E981FF6EB03B1A48D708438A8F6AF81515D8C42E0DA5E13DC07D22A0CE018105BA075A696BAB7CAF420A65E38EA1961B61ECA43AA0085BF2BA6244EDCB56EAC6DED736712045911D7724E9DDED1C05DC7205580FDF52143C07960AFAC71528C1B87BFD9D21EA5DA5F9649AB037CEFA5713647DBA70A2D0456A24AFB0B55B8C859F9C9617E83E12C0D963397DDCA09CB16E22A47EAD91206E8F3D925444AB85D76DE73A43AA45BD3B0412FBDF254CF273E5F20F6BD0D938E30ECDF159120BFB28FEFC0FEA1DB898D5D1E674452DA86C9AD4AAAAFA07AC6A304CEAADA8AC82870313BBD56E746E7C9C183EF5B53BFB5A374B955D053D1CD7E8EE25108BBB8F2A60663375832213D1B9064C9F12CA77835ADFE28D1A5E1E65FDBA45147F052948A507180EF21052D5FBAC2B3F4E46DBC4ECC7DE08D6FB3B6162432B25EEDA07911CDF4E98A219603E19FCAA8142621F546C898181E1761AE7907F624A5D01E36612F06ACAA157BBC316E9AA7568E359803A408B0C36B4593DA1B4D4D6D1E6AC290C90D19635394E10F0BE0B51165777517AF168F38B702DB2BB43ECB3DA55D9CF9E8166D99B971137F6845653B8CFBFADB778E16A8F64BEF8DBFC6DD4F6F9093FE629C99585D59445ABC30DCAD609903A26C181FDF481642043066E5B0561F13934247D19975F136C0E0F4CD41ED3F8E22739FE2D88358CAED503D7C36FE755ED34B9EF871F2323AB593A0AA8BFDA8DD3D86304E206E5B4FAA6B905751EAAB46FB576C3AAC9387E38A02A6AF8EC72BC953C4831FED1337EA65241E4D94F90A0E99018DA735E1CD4C835AD9F301A618395C8FD4C982CB5282256F8A4894CE812897E0C0F7BA13D73227DA8D57F576A25F233384DAC16B5F3AA455222CF8B1C3F0C69F6E1EA86C6BE0DF818820D7611EC41F6078EEA4461C336D02847EC3C5644B85EBA26B68C5927D67E36BD381F8100B6BA90852D529419EBC8118A5354706D2CC769C2402E517A86809687BA7E0B1940A88F0B2586484EB7D1B63E119D489A41691D0C1A88543D43D8962D17FCB8E91A6CBE2635F4D0814A8C9A4DCD7767CE7D62E8BF17117A6650E3E8933DABD4CCBA43F40ECDC46EFC541CAEF6271E87BE92E63DFB7C2E5B7D7D2ABCD56A0A19E3C9F75894860A850029ADA36F990DAAAAC5AF56B157475EB18943D7CCB8D99CD14813A27036ED1F4DE3234BE28FBA413046A26113124B5FEA24F4074E991E163AC879520669ABE6B1A0203FAD6E4082CD5ECE201A86EC87676E350021FB2A1E04AE9B19A03152F8244542B4D21B4173D05F159EDCE12BA12A5767363794DEF4D390F56208EAA7680AB527C2035B065DD58AC8182BD5660DF75511EE1E0F407F4EA72AB3FCB028C82D8FA3003B034EFF4DC1C179029C452BC4B4D75AD02CE9E393C15872F8D130AFFAAE9A95640EC68771EBE628C42DA59AE4AC2E9156534430D00164E3D2D28665BD2DE6AC1482EE3475F7E00F41078B672835B435711C560166CB4DF17B56884C8A66DCE5D4B42AE675335EF457AC20E4BE7FC32FEAAF7EF4CAD795ABA7F9A20C6703E7DADA30B63CD6CC214114242C81A9614712271CC05867595D9938ED557007713F36D1A44AD2285A564C9B242AF6BE9979F7C474385680FD574D9D33B8E2DBC1318EA71977FF83E8977B93BE3EAB2401A136E021DA182B1AE68007FB36067507FF6900AFC4743A9A8503B7A2CEE04A1BDBE9D661691E5E8C6E5568D16F70C15D156F45DC41199A9C67FAAA36D8CF67672717ED0124E996CE855392F5A8BD24EBCD644AE0CD5B1AD2711200130AA4F8D3B4599AE660A56EB6E192709CFB8890510CFB0195D7FE794B9EDBCCB25ABE6F3B6AAECF3FCAB9ADD6D270D3D5B934C46C8D6800CFCF99617AAB8192C28AB627EB0D6234F7C68F0F4241662A9F062B361FE89E92BF9254F823E4164AE54661C2991A56C4AF8884DEDCB20EAA02D3097F2D5BC45FAD616F2DE3F37FE2DA9CAC838ECB3BF649AB6CCC38675126381561D546B37C743241297476497184A861ED1FCC75BD508915AF39752866B39F1BF00799F3B254C6710D15F5F79E29766E3EB75B93CEEAD0F3D454A3A0A4B9B88534AA91B604424CA1F9801F7F16E0A5489CEA18CCF76537CE33481328C83F3205B59AB1BAC1467C56A28DA696DF2B08CD380049C5E0FABC6AC8C5C50F9481161C1D60B0976FF459B2C11679DF8239AF63C1379997A8CDD47954DA1A9ED1606A3D1D2700A2B9B0C9FEED839E011D52752CE543ED224E5241340CFE1219A1A0117E033F48B262A6C83FB13BAEBF036C2ADD4ACC5D1CD9C5C334F4EE7D964851D9A5B7CF5A38B3C1CCD6DFDB5D1AE3FEAEDFEB72A25C7CA779DC4602FA0E6D8C4B35900F634130D48BDB8291B7BA751256EF38FD6FF0D5662C1691B825714442F5B633B30514058C778C78BBD6A70A2096CC9A375AA99CE11E8FE4388ED8D403EFDA3E604EA77820D4D7A1FE7C51B73F286520D56DF828B659FC636DE3DEC09FFBEC46FC143D943A09634A91194D77F0A70DAED26ABD3F6B51457EEC61F9AB544F544B21A1284F0E70D75DAED0B9D0FD864CC73236CB64EFC7C696882B1B408B6B02F35EFC4B5DCAAFC600330C59B1338DC593BC22C86A1C4F16D72E7BD622A3561F60362F3612580DCD55CF8406A7CC9BA0A5224797D74777689C4FBC0D202DEA8B9773A0F20DB0438BEFD40A996EB2E3F49CBE2E475DEEF73F112FF742269A701AB43D8E47EF94DA4056086D86B1FAD636D89929C60238133A5B61DC4B7F8DFC765CF0C8C7206F3E0DD3DA13407CA75EA20F172AC38C42ACADC946B3B18BBB30DF871905777CFE0D3BE5363574D2545D0214D6A43E2D34B50D7FF7D9F2DAE7053736B71FAAECFC2C355C1DA645A995981E1D617BDDD14EB9AB230D10085DA1AE55D1C9E55C225997D128CC2393D6E5BE9F1BDE1543DCAE918B38AFD5FAE6031E105BA12EA4162F7E24572688C54291A61635C9DA26BB367348473D4DD4AEF9A5C4E8A6512AB149D62F625D8D45576FAA4CE28E5C3D52D293A0D5C48821E1F5CDAD7257C97B3C1A6DD83A4ABB55F780D09964D4B3940D36B6709D00094B89F319E1C2CBBB3EC33A6F0398880B8079E6A39DE697D76803B04C230EE980765604929D60733BBB6382B4CA4B13AD3FC48AC9F944B97133C5AE6C3B9D295A760D786DDBFF346C873C2DCF3D2591926116A318F63835783A33A17C452AA6C620284BA99DEAF023972082AD2B370CF3016F0739103A518B25AE8D59BB017C8199ECCAF3E908F9F144C778E0F5F47FA06FE8A22E3B2CE3493EAA8745478D653F8D3711F832D9212D060A7F0B0B62AB9A3C9BF012B61A9B5E6DBAF4B48D9031250419627E96076925AF95E2B238E8CD227A0F3D8C9C3BC68D5990952D6CB62803B8D193FB06120BCA9B195E92B995B86B92C455A6145D3F77898E457E1B938183E1D76FF61C163057A4D70697507BE020CC28BE6527CE306A5D2506B86152B5E3B954D5A660C79CDAABB2EEF0D135C0D4AACC7FC3EB5A3575D95070B168FCEF4F9B36FC3D55B84DDBEF10DF6BA659F70CB2AB82FA001D51ED0F040F9DAD4129C324BE8B44316C0E3E15B27C2A8D54A948585834C2DBD40337B61F58F3AB99B3303D56EC1D30ED82F29CF6A68208B07DA120AC4073F102F4D796E38628D344384551810998F6211A082BA225A1B7D63C9A3E8703DD945BE1D979677FEBE715396988A873B88EBCB10209E4DAFF939776AD14C5DC90BBE9C1A57581A145BE0D4BB47CF50721EFECCB50C96E824DF93D675B1A1B4D920CB1EE82B0369094DD84FAB4A3FA94F152F87525ED6D17A800EDB1BAA6C13A2EDB5C9B7C5A82AE5824AE9BA63156EDF78517AE2B357C1A1E8EF6CB12DA415A914FB69FA633527B8A1659292D079B580DEC210231BCA77465BC6A9516F2917226957DDDD9787313FA599BC2BDD14DEC9DCAF0F2520318A85C55DF40881FF65E4AC21F2C9EA3CC06651309E1F89982D45FD6EB5BD588B647A80D27433EF85080A7AB2FFDBFC7D2B54B215E7D27A333D4942CD23D53142F04976093CC0344C19F9CB3A5A4D522E26B7E2C1C85C1ABAE1B4A360945A46D097A1F3676A80E3BB9CBED0BD363CB70C2B250EA053B183CFD1EDF2F6A211CE618F70EA1AB535E96CDD0B2FAB7CB7F0396B6DEB59745C1BDBCD452FFD70C95E45B88325A82CF07EFEAD7176FAF04C8C3E0CC4458540BED99ABB9F52AFBE48E42C636DD076A37C07C8E4EB6830FAC011936EC047F6D5B5857AAF90F80B5D33B502A116828BD27E30B3A69F351E22D943A482BC6BC41BE7BF941F3AA7BF85A2BA5C38FC930680FDE5A4E174AEC4156A755E7650CE488620D6CC62BF9D085FE1782EADB11541A5C19C9061734513316B9CA608A6E48D333A110B57BA5128E9331E6266174B85F7B7D1DB264361B1C6C044A8274A7C8DB19C253BF8DAB819E85130E92079E4509D63EC15D4930F17DB3EF8E9ADCDE82C9F2308A0C9F77359575876D90A9CE5ABBBFFE09B8E145F35C7E91B141F66F74B3BA923D9ECF863A8A455086DAADC247872C953476A85772079783A6F37C964AB1788479175F7B4E9651C7DD5EDA94F8BCFA57B3542788FE9547E0A444D249976333F99710930CED2E93B1526A02BFCCCE416F0CFAA631B878BF23E41F95770315F1E169EF22B9DAF0E2F269E06B03B125CC6F20D2AA9A13B98CE23FE3A7FBC70CD05496ABD89ABA5BF58FBD8D88EB9653963F0452CA43CB964F7B145020D637905E8D26E8CCCE4EF892BC48381303161644FCAA1DB9C4775E8F0A6367F1A842C3101C9F94730F6724257F2EE1657CC93950C9C1F20832DCC11E0001AB347781F21DDCD4786234C908772B553D7BDF4795FE69D7D55E950D4C6E2A76C44995CCA5C9CD539ED235CC55DF6A004C1BCA852C2813DD17F333CF67711EB8A5DA439D73271272D0D62B34DD457C7412A26FE2F4F23E5F5AE8C2F91DDF86B7048A40872AB7C728B20DF7AE2A0E8E52B00899C565E68390DFC83344DBEB7257CF8031664FD93DB65738013BA234035F11B611DEA4F74B1000724B2682EDA9639C11F4F4580683DDCA2D9159F637976293FDF76AE2AC7EB5203766009577DF87D9DB654ACD64229495A5B4A94AB3AD8237B9CFA2B5AB6B7239A5146C777C4A3CCA9E1573D96A7C1B333F11D284AEB55DBABE6B4F12A421FF7BD442AB6B8A7FC33A2087886328B33037EA78D9A7015ADA2C8F463AC1FEA8FF3EA886823063992176C31152573C10516BE386CDF81A6568D8E3BA2FF195B23903C95B16277BD60D238F309A7DD6BDB4ACF4541A56DF5D3D4BA4078E58641C0453B1BC8DAAF6F1DB28836D6FBA3474D69870E07997DF4541BDA5C62291A3360F5C5840752A25CFE366186F7E4E21DA0704266B5C14ADC1541E463917D5DA677945574F800BF47FA028E82200F9E53C48C887355D9E3CE5FB778341A356423D00B18D3048C92A80279C2785AECAE9EA57F828766D6F953AACF93FBE8A4C32C7FC9843F466141DD018CBD05ED8A16E27B43C5C0EE16045D39CDCC7E4A27EF636408E968B4C99C895CE77288C819701EE7184DFCE889328E4CD2D8BA7BE5A1DAE50E36D562BF2441B56242EF9C4EE63022F88F0F77E6094AD7DA93F672C06B6BF4ED5523D1DBE7D8F13892BF90DFFD5D2A3BD0E9B56EEF03E560BB28650D873116C0CDD00148C90CFCECB6BE9C4BDD7603B5CE9FC458431C00B1D704702B552D847D0C89265D842FF6599A150854848B730AB33CCF2BA6533638860BA564540C6678061CD97BE3D00B103314894AF13999FCBDECAFB5A895671DD1ECDD95C0C94A250B014CBB657ABE3028C8D6CE436FAD8FB7BDD12AA2DA32FA6435889F1B8C16EA8488FD6AFDC7AFBF5358A31B23E0C05E315B60F180986BA17E26621D92CB639A0B815E65D140BA8A68F99BD42A2F428345AD3037274E515684EEEF018BA41A7B0138D7FF2C0B838823192FDEED577028052EE73D65E92812E4C33FA3CDC11234F47F702AD81F3829ACF1910B9D00167A3541372DB79996FC8F4B15F2A56B272B7DCBC4B074A36543B12B3A5396B0635068B62F81A56E33B40516A376D4ECF7BEA4F8ADBEAEACBDBE23F5F311A39D90D0B11BCAD30609F6CB4A657CC620CF8F727E30F77618E5870F72EDA78EB89399236F7F5432560049262E29A2979F832F2B57CEB25BBC2405A3098CBCD3CA0CDF631B37440A47D316F4860597AF78E5ACEA13E8B8B5420210D7BF54B1F07A433E7A2B193D7EEFDB2288B63460020483CDBB47DB98D8D720FAD57072D41EDB5FF2A2CF65DFB70ABF3524003842F7BCF9D36F8E187F86B864C5FE0181E5E3D33AE11A50E67F56DE93387F5CA7D1641CED92F7195F2ABCC7B32C6C7BD8AE561E36A6359BA6171726A2F9B00C7655C7E346310C6EBE10D2D470BD5BB7B4C88378DBE2352AA45EDD728F42A3DF3B5E80BB6B6BF55CD663203437F575F769CACE66809FD25933204387F8C51E0A6B2C4C6113DD45D31AD7567C9B924D5B10F124F6C1CAF3458B3B84E9E42DBA9AC879E2D711ED8681207374CCD299FDB7D7004678D56FFFE0CD34B4858CC0CF4F611D8EB5B47768D69AA69BB1875E9C397EE9453D37D4983359393A02941E772F912708085F2FC7211DB358EA5D4E00263E14A1CA3430A6E6FBCBA94CBC8281C356B4114B0E0B67B3265D3E1B9A64B1D4BA5501CC0F6E19F56A7B3B1BDEFD8018340ADF7640C58FB26ACE46B788FCA44BF228A737B02F160B0462846DBED0792B27FC6B55757BE01FEAD3655FA9E992485E2B29321816B04C2BF079BA5CD01CD7DC0CC8CFA471FAEC74C95041B7C62DC9BDFD11FBD4D3B7173A3A92044C793EDB6AF4DCF760D38D3D412B3B292C74E08EF4B4515B99A0D4A167D9103C3E776E213AC2C1614B432A8A7D243B0EB5E7AE82118DE996BB55329F49ED4A7EE738350B565F50CCC313DF274EA203757B372D542D451DB960DD8D7F0C5E532AFBA105C7963A39426732E2E30C68317C4CBB3C10802C5104923E9EAEC89C6F421B8EA3D5039D5175F1EA854971407C7B260BF57FA912DF3829BA91BEFC9A7A88E5A289366A88E7E6C5C4D4781D583CC15C827A4FC753F66C81B5095D51F3069AF2E3BCBF01362F118690C35D3E6B5C0F41F4A4964226E4646DBD948FE2D1AE837C0C0062F77A40DD02371EA4B69BFD02803AC3AB972CF450F59FFDE724F79DDB7D534D261A44DC4BED2A47E78289BEE615218D1F861896AE5B07729568508B0E35F82BAD9387B52E2243E456C2DAC3F82176E4859A8288FB8E2B86FFF4BEEF93D9F677CCACA1E760D045F28C819A44F5F678E61585B74D49B1F12A9B28D4056CEFB98845385FCA12A6AB0C86DAB01C7E8BF5D77618F797288706F18DD71B33F909CDB15A63047D0EC462BCC02AA7E6D4D4D5C3D0C5FA2C03502EC51D781E8CDBB63A2578CDD9116701F7840D6A268DB082223F3D42376C5D796557BDC568791BB3A5BB6A9F501837CAF0ABEFBCBB500868EBE0FA0184ABFB927A414A87BC3A1903DDFBAC369B77B5C9FA203C7F6CBAA7BA826867CBD37AFD20E32DBCDCBBE7C12E3974BA0133B9ACE768AD4652C3FFB01D7E2F4EA026D543B2292419B10DB09C47C110005D667EED5D066D4634175B58F4BEA53CC39F2D1A9623B7C9AF2ED29A37891F2BE24418746A233743BD340256801EE39E7C05932AA41B56F7DF4E479A365BA224E94D72A395741D3D8135208C96AF089FE2FAB29B9D7DDB02D149275727E12A2358F4CAF9DEF137397AAB54DF78F5CEB17CA323B696C3267A4D2A944C65B2E8F542A2F0AC3DA7A9D6F2AF073FDED7424942B700AABA291FB8672DF10AFDD154218C0B0088E84486EDA5F21615C06770A2607E93A2ABA60B864505434ACC6B6BB15BD00C3881E59F0B481653BE10929E7EAF4A90BC181DF76434C08F3ED37D862038232AE6A5C56F36F98574029AF4B4A280693551082BEE4CB6DD4B55E00AC4954F2A01129861DD2A70FC30FCD9073FD2F45B31CEF9724E673032D0C87B2A9FE7706040293B6DFC3A3197AA58A53997BE5A2A763B027D5E14152774E3FFB86D562B96C4DB6F8783C945E358693B3D99B7D8E77AD50B7FE9F5176AF257ACF63E037ECE9FC071CBA13080A08E1116AE09151BED458CD8BC9DFFE5744E0CD2365293B365A01D30E894F8616AFDB6115663FA15522C8CFED9E6644DAA1AE776E0BB2912CF584AD1DB53E90043B1F93D67D51B1B10179F0FED6EEB52A127BE857341CB5A223864C02E4AE3F3902C90BACAFBDE2A42D73DBE88577F871D9C2EB9885C7CEF0443EE4A1C449951B24764CCBE716487F2EBE474ED6DAA65E393F1AE17E52B75EAFC245A161AA30CC8250631DEDD2B233D202CDFD1C3DB64FEEB2F515F2568DD7C11DDCCFCDD77B9D1182A29AD5813791DD9987BA735082F8A669F38DDD84EE7C09334AC732849119D769DB8CD79375D1C8EB4E051777A057A4738FC4E06ABC70F8FBA6B52948F91FAC2F2E248F0C417E2E727C60872F905DB2CCDCF15B2363696424BA5B62E98D5E4B51ADAF38DC97144CA32BB6DF129EAB07313059C725051883475E30B25C8CEDC63BB517319ACDC1E0ED86D5BC5790F11CD2F4B2CD882345706A4CA5863C0395C3159AC3D7FF8F7B5F7B59907CCFAA53EDE296087B04FFDDB0B221B3DCD1A6C64A591729A039C230CA52C94ED2C3118794876F7478E7968F962004F01E8FD0546207A64C09A2292376F77D7789CE2CF04995C7EFDEC91B5F13EFF915E9158F6202D6A7B0B97BB1FB121FF99AB12F56732E9049A2C33597A308A47FBEEE3F530E357BA6B7C98D58114D89C0E9599C6B17BF409B3B63FCF67DE29FDEE152711B63C02F919FEEE1A31636E36ABB4F9BA607020529814E06AB2D8E4FDE4D6C1A0D709ACDD7E442B1EB65643FE7D9E8D89906915AA868E9DB2E070CE6511EDA0506A19A731C0DFE149788BCC155B829D52E2921430566F9DB82DB062023BA5FF61FD26F8209421EE8C2C22FAC9F58059D223B4659A23BE538BEE894015F8E137849280668B971AD628CC57ECB49701EA1F0CE2D07B2D7D8406FB1D2E010A51C02F6F8F04F38703326711B85ABF70D46D947A42855B7F13B79D39D222A3578D6336C9B8A69A12DD38184EBF9DCF787C0D7611AB4176294C239B60351B62309E5DBC92BE0C0EE1422D9074905131757F70343CA00ACF2CF9DE239D8C794AC868565FF9900A1B9D187580884D509642AB4F6331A89FCBDB367067712B7B4A7A32E266D7FE571E4474FEB5DE28CC0D480D4AD11D0CF6B599A56925D68C1B076CC57612290221AAA0F91C8F7D21EAB354310250A224BC0455C760F62B2981ED68F7E10619AEF954B79D0D0DCF039DF951BA2245DEC02E71968009ED5364774644E995DCB33A41D53B3C9C1BE952449CA8E671E15EA888789CCDFCDCC91E0ED093CBFF538909886E27972C9D262F5E1A481B8F483BFB311D1595F51FE1AC8CB43EBC92C0D17868986B6F2BA8127BF95E159776570E273393FEFE203FB079780E675BD62F475CC0D1DF76CCA50B5145565C3615498DEF9B7BD37887BC6988A9853B4E639C1BFB61E32954D1166156F944C722444C29AF577C12F567E568BB1BB44A9D0783F126D6A079345C3842AD6240F1740585102F558C5DB6C22A057EC2D902CBFED926BA5F9C298E6F9118B9D2B446A47E4DB2F4F1CC30E75B6A1B67FDA687E672E7136AED3E02F8CC346F520E5929526B6E9126450E708D30168D1A60B41D19949AA4BA5CB7A691DB90A7B5040B01518FDDB6035454280BEF79E019FB96D899FD97BA47D0A7EBB39A11A84036659598294B0B9A905CE2E0CBA0E3AFAC85FEF2CD3446057ED5DF2FC389D411CC3128A8DD23188F830D903A9010CF2726ED13F833686B6C7796E87CEEAF4A99B40BE702CF35774B6BBE4EDF528C39A8FCB1B04AB9D25FE6666535391A45D5DA45D8073F705184427C3C5C4225F66F041151A22423A1F5516C744FDA91305B2B70BC11569416ED456BCBE6C1A47A5805B464EF6A645682D88D75E7FCB458BA2F9C44E14589D2805A904AF02FD3693DE69D0CAC00E058B26277018C3339EDA876CF820AD6C99149BF76A8C47ABF795EEF76D55862F4A88B26A73385589048B2E22C542461AA9CBB41DA58C7A5A32047B9F85426119402E531B023E3C8C1EFC7AF70D3D553B50408AB568E4D2EF96E5FAD8BD3EDF830FF2B12829E97C5C57927E69A438737B1920553F2B921E62A3E25331BD3BBBF99C9FE1912E0A84B15EECAD16B03D059876B7B02908C7A7DDCCC51E01213B4829D21C9FE65AE129F3B58B51798C604C9A2D2BDF7376FBB50732D9694E199DC532623309CA43D837EBCE0EE9F3943BF57F9ECAB4D939B2AE599FF5CF5370C9B56B7B9800A651FA64F854962A6D84E1270EFE2A481D399DD3F35C9C43605FB03315259989C4F2EB41B83C62DC2F7EA15B315126D227A0CED8B626022F9F665B49B8C32A10BBCEB0AC7FA80335A255076BEEA7E5BEA0472531B22E07A6579F9726600E661B389A221D2A6D2AE9E0059D24874BA5AEF82B1B53734F0835FAC5732FF0AED0F092E06EA84B3B5191BE3D226A41A6BC39AE3064A789A8DD9CED68FC3B902249622576D4086D63B924CB0C309F75F1FE9A62071FD2629E927A3ECCF3B575961221C5C1E76D2D6F1D330028F262E671905340C7621150074C49D9D3D64563E4E6C8B3221EBDFAD5A369E25DCB2C95A1E19D05B4ECB8E605BBF49623F6C62383A4ABF25FF823CB5F924ACF6D6173BEB850C46E0CCF6AFA873096046B7CE53271A33D18BBEBD6452D1874E312B9DD2035E511FA43BCBDF3E3A9EA8C602EFF6051AC0062232BF8A2C1AAAE76F0C12ACF4A290AC376A0DFA55BCECCDDFC1702D38F74BCC3FDB3160C3F52518EF2B1E14CE9CF22AE5E4CF2DFD531057EC85896708C8BB9D810B7D258AE975D678F19139A760F5609F57E2558E1AC0B6AACA4636017083D25190CECF73D29E2F7B44393D274074A68570B720EE6CEA533AD788F9A7F127BDA09D43F96AB9863B5365C9361A9EADA698F5A616D5EA0EB9F83B0647698DAFFE659979F5A5F086FC8B59D53C737E2D38EBB4F74C5CC6429B526FEFC9D1426969AB14DBD3F54BEBF25A5A8846874562CB282B2BECBECEDAF015F41037486297B30C905572211F80727CEF292CB2DB118157E666B190809A10B177BC63158505BAB5C915D37626EF7CB011041B08B03FA92A40EC3E39BF9B4D7279A5D1E4CF38377BE6C00EE12CFB4549C036E75240D3DF9FF92B50954F461BC25BD155AF84316A1752B9F1834AC4DA1B1B5A4C84992141CCFB0CC6AC5672753F4877403FC3F4A52848786C976B18CE968509A4014F3C69A77F9CB4915A1E389C1EA74A05DC08B6A6BB1BE755365F1E96E06FCFDBC7210099601912F55F639C9C96F28460CFC392C855CB2D3986989FF85A0DC7889AA2F6AEBD3E1AA196F97A3C3A0FBB33ACD3BBEDFEE06606DDAC5DA26290149E6361E8BEEE7F2400588F3FF853EC85B5F5742DE3547F362B0A094D6F935DB0A2B5D1480DB2CEFB9D665887F6030358AB9E5B26DE8955B188C39D6B146063FA59D1BA260796A2DE8CDDE8560915F07087E84589340103CCF7E1B75AD5BFD209A99C429A52E8D4FE96EEB9A32A4CD24A7940B446003E1F8296EAC6653659CCC3C85E01F7A15459CD72F81F8FA04AACD73E9C815A312E8C02F1C1769FDA17C16350D9EBD4F8D10F248035EAFFB4FD67933279518E3BE9E1807288A9D63A6504F3A31E7DF322AA1B2A9ED3C23717C0C5B134D2758666CD04C2FA8C1EF5C1E58870C5EE1378619851845BA80DADBC37A764BA17E6DF285BB3DDFE31A56D4BAAB0FA622B8D3D24B7F91034D2F773FE578C874FAF5204F3DDB90B8533906AE05834BE67263447FB4485BA069EAACB68806028CFDAA8FC6DAC6383837F9A059EBD1529A92F98F44D55AC06083D6B751FF8F9FC5A6444C1A7D346025AD4B67EA12439242FC02D228CE537AC9044F6D193E0592684FAA4D259DFB00F5F98DCA9FAE4C0D5F0427C6936E501148C56EAD1817A81DA30989D0D9C85BF8D9972FFE67AE3DEB2A8959D63B3C3E7737A1851EDC8B313D75AA7838C6F7750280FFA6321CC9228ACC596431D72AC0302582CA56C6172599F30D0CA04E71F3FD7A03D467E37A8320CC0FE3AC72099CEF7C4265F7F18E2980168DACF9C058E39EC9FFE1EEBDCEA5F78D63BB18BF054465179401346D4CF8927580B9E0370B2D27E4C6BD4687CF0D4348B04BECE8424A42B2CECC668DF9809F580BBB3F3D59BFD96DC8C2E57EF5D2989D6DA54C04B15F85EFF639253DA3301FB6E6F92264FE48968C2C2CA6D40C54C327E0673BF769CF116DFD70CE374BC447AA1B121827E5BA510E387974B19B050D9909185A514BCD8CD374EFE2089290D3DF46D088D74F556A8E5F36B08AB17E54143B6FC374BEDD6FF88AE74E71C72297A31E13D1F668DDB455DF00DC91DBBDB2E96ACDB811ADF7E4C1C460D8FF1FB03BCF95EC489446A8DFC5D2220E58CC298FBB7A9B8EB33B61F6461D77CEBF9C36BBA32B34998B7B9B7950E7E98857371003F40279FC2623F716B808912651E55A04F9418989047331C454D2AB04FAA192938209261029FB3C070FA056D2AD52BF9C7A0535FE2868888BA55CB9389E358CEEC68D7A0E5505FF0DE4263C6E47406EEE83E8C797BF58EF49F2F8BB4EB3656A2636A5EC604A4990001190A8A7965A36BBB41019EE19C8EB45C10173B513F617B9688D7102ED82E60DDCD080233A7B3B43B641A3282C4AF6D3F01BE30DD78AA184B9D565F7B1F927EDE214E363A18547263412EBE35E939942C4B5EFE81E439B325902EDD4D2AC06340296D00DD5F0908F5C8AD88049D88282D0F2DEC28D133E1D4736869C352A7CD87D8A56687CC25D5517A62F0CA5A023E8709F181A0D96F1154B3D7517EC5B076B7C59DE90A223B96AF93F94B11EA0EB08A280379BE028DC494C296BC46659CF9C26A3F8BBB47E063AA4EBCBC9873CCA2866865CF45076E6E642B8E3BF9F4A3F9F057DCE71D4D5F3B621D8791CA5333398ADB31486D22F608E9A8745B9548EADDA654F1D4BC042DFF9B3C21B15AEBC37050864E4275D5C36F301D533552D119039242BCA25DFABB524C971821B2C0EEA602A4C02C6487DD113DA4DC5ADD7BBBC325CFC896C942682945A1BE921FF71E6D76FA1E3345589B53C549BD5056FA01BD688D0A9011497C0DFDEC20210BC7F8B713C46A100A396A9ABD9A2BB94E5455793BFA28E39E130645973C30FDCDE52F6C272576291F0130474DC2E3C30EAD54818E9F531A538028DD40FE01D993DFCFF82679DC3C66850528A173FBB534843AB540E21C7731C65044D697B42694A1654B3572FE321F61E98EA22171580F5DB90C997D0C9C7CF44D174E8D24F500832C158278CF62BBFC6DFC46AEE5DD3F8906A5770C3BB6CC3B731243974A76C0BCACD9EFE37E52CD9751894A68AE3596E0C0211AF7A94B37632C667AE5097F8B5992917210A515C3E48276A363A6F5696AFEF5B3919689CC8F21E077310FDFC5A58D6BD428B8FFC678299FD053E7C016EF3A154A41DE5FD3C3BC5070ED6EC8F16170C880F82EB0B7EDED047436E8FCD4E2290F450963133226D17D7BB99C71097978CEFE496032EC8C6E73B99B05A33C4F5373BB73CA93F7128A9818197E6FD2BD88451A4D8905214157C4259228DEB5F8B216FFB206E4EE1025D3E16987FB6064147D3E99CEED73112F62D513C8B6F19B582D0F6794B307E8AF97354573C758AA95AB0A926386E7D288D74F9C6B0E2C71EAEBB36422C2120511F5F3D2B308674AE355B1FA1E72DA55098AAE3C70CB1B85C902C103056E00EBB70D37F08FA4D90E860C74E841F4E99957B3097ABE602E65F07B8787DA172E8E9ABF9ACDCCDFF6FEE2F902082BDD49547EFD95B54C3B8F6C6D243D07F16819E03189F0A3F3E0D05B3AF3EC92CA08846FC909E809CE9C30F1F3AC6FECED9043245A00590CBBD83EFC41C9EE3CBD0E328426F821ECA32E0E84A8B64F200DFAA5F01B262F4E816A90AA33A2984AB8E269B8CCF61E65094FBB7D10E11F9E1022CD97F17011DA53455B24E4ECD0793486C1E6D4E3BEA94E6DC9C710CFFF30CCD48E43076D763957260D1ED4F7C41EFA0B7F78BFAB7A9274E932013E605246C36CA1FFA003A4B24DAED61D15327BCA1067ACE961E718DD5E57667F5F33411D17BE093A9D7C6675097FC551014545727BA3F19C5D5D23A0922B11C4BADBF285A17EE96C916238C1E1DE8A0D28FB79E72EAF5AC37710B4E6550CEECA2F22697DA18F858507CCB95BB7F25A0056FFA55EE9564782C6042686195BF56901D4ABB3398C557CD47D30EEB344B532E77566887693CFAE50CE8C0BBAA204465FF33456ECFBB1B4DE4F8D6E2F3E8A84E90410EE3A79ABB47D40F4691CEF37E0BDBE1BE386098181EE36051EFFEEB0F5898738E400D44ADA4B3348315E0BE88C4C43E8CF95CE8D56EEAEADE754A09F170D3ACC44DB101037E001DCFBE2C52DC32D040BC27C1A55C9EF5D65FE418F3B761284C461606ACC84D36B9A7A3C9353723BEEEC80CF75D84DA7B2533F844E81EB8835289487CC7EA4EB277A4BA4BD50B59953E3DF3EBB2BB69D7E148792DF55D429B2DAE9B40B00FB14A948F2797B7488EBBBEB4B11880F7D3062D3C0561D7F6FE715C3BA6BC703BAC33C29DD87EBB84C178BA09961F2C10D8CCA42BFC3977EA66D039FC24CBD2A7B3316EF37C0D0F98D3CB8D5E4708B4287FEE6B656F1E300260D5643E9AC323A7F0527A7B98174AFD3277D35D6EC63865BD4E816351B8492474116E2426A3298606039280AEB595293D18EEC671E1E139EFC7936CAE3056F9698BFE95568D050F281F17F2CD65B62B98BF36DE469474F440E27073613A121370C606D5729DDFA12C8C400D0364251D850D90804ABF000ACE57AB195F6EE24163E8C443C8AEB641AACABE70675ECF22A5B9DAB6DDF0078EC89F2354C27D296411041432AF390DC71CC6141B52C54FC778B5BCD31B55EDDEB62EE364983E97BBB65EE98863AFFD2310B482AFCC28A2FE9C7D8E3ED24D20FFAD1F5B0AADB344C77F89FB88BB2FDCD64A77203BC331FC23BF78E284ACE3016FF570E3AF32ACDD5BD5E7B59115950CE804C231AB1AB80276842FAF80A576C9A3148F527596252E2F9F76FD6B4C03EFCE924A4740EDED98B290FF138926811607CC553FFAD5ACE0FC24D7FA1D7F3701A8E0D7F614941C9FB9215389CC5EF6D3CAC193EB15798CB1FF2950E2E0EA96A6B9E672CC343A7FA9C28EB964EC60708D60D921BCA637AF0F0E19E127E0E563EEB30DB02F8FBF2848CEC8E351077A8294AD441049000D2A3BD101B691C2F1DF3741B8BE7DC57592C2D09C9F368010B4B3922A8A622887C37E959C9AC31DBE89C9EC9FFC26EFDD9C49362E3400E660928BDD7F67C6E45614ADFFB96622390AACC03F1186D18BD11333AF0348125A92EBB40370A32F5E383ED858F6720D43633A9A3E3559A0ACF5FCC326DF117AA495759FC12398B2E060F8C6DA823F3E58E1158B81AFEDE50B89F956D4F63619332928B4CDF5A16E0536FE7426518B1C50FBBEB4EF3830D77924BE1DB002BF2B0A9A8CD6FDF3BE7D7D1D7A3EB4E8CEFF8BEB9E2CEA9BCA74349D67413E7D05DEC014D1E6990062F0C4CF1E4720D45E23719D748D0C9BE3C3CA444E357F181E44EE841E35CB5207C3F993CF224A4A90EF5E3610254EEC4C2F2EAEFE041E1791518F93BE9080634AD5594B98C6D0161BAD23EF1403FEE6FF846D344BF0B42A65762804A33F00F12D769B3C58F123E14B4001CC631049F6E35013DF92AA50F89E71E78879A9B428341A738CA001E4233652802FC16AE2377C9C0B5650805205D31445EA0AC0F82A109E5F7C0758EBD5C737CF48D3D5D44816504D972CD2FBBF0AE566B8247F81E404D7DAB5A939AAE51375154A3125345C061CD479F8D7D9EB21C6ACD971F75D8430FAE557DE7A669C59E35DAC4E7686C53C34AF64A5AB7F6B5ADF48585417DBA3584D4552C241DEC336E5EBA84C4D295148B29FE824D3934F4D2A8EA2D27D29255988396A5C350421E2C2BD89B5D18155B20260DAED20E3DFF52F2E84E6D6CC2C040FA3D0B8726C63778A601CF95BCFD381FA520F95146292B8D854C5F057440833E78057D13FFFEEF4418E97986A064AC8DB74A001BCBF8B8E26CE9C68BACFCF4895C956666F92B5EADD27FF6FB032207FCD2100FE0DDEAAE8A860F89BDE341E59671BB0368B1C68B44B131139A44BB37EAB251A0339A79D358D73281325A594E2156E981C519419D925F0D6C8661F7C294D91F527454AE82EFF98344A6E39B2BB3E36431255E33DAA31B75E961FB306792510924C3E9B89150691BDDFB275B9128677DFEAFC89E6562FA245DEECEE2E788EFCD06C4BE744CA97693CC1AD7F0EE4C633D706AD278A46A8DBF2DAA0CCB69806912F8C081BF192ED7D17EC222392B6E84D6CD88FE66DB10B1EFB9CC7F3E4F3719338B8D6BBE47644009743829F288A194EB3F6F21FE7D7FF55F8FBFD1312AA603CBB0C011CEA377E6E2AD1541C5BF55AB73777BDC20DE77F701E7DF26728A44D881EC44E905608CEAFEDB670A261F2109DBFF79CE13E98A3519A9A86F3E01B7C3EBE2F01C657EE017F0740328B97392C6824FDF4D5820458F0DC9E999A4F878D09493D249D0B43268D44135C966B05AC8A69518BA5AA10423615DD3BD8B6E38D37D4E7ABAD0F8752A64736EB4D6656F6C3A6C6E1595AE0ADB31ADACFD6B4146F4496E739C4DC98835CE4C5E2F1FA899D4B896B02CE97822E90CABF5850321487D0C9DF07772031F1A438E9D63374373958DD9708C6BC38C3028C2C7DBC7B2A5A0CE8EBF87A72EA394FBC0046B62D60CFCC4256930BE65B22305C750B2A7483CBE0B3FC0824A011D274FCC289B8EEB9ADC5505426D8618369E0135FCA2FFF5456E480109952CFBBDA22758E14643AB48F11AB4F4EB475CEA238C6493166BF384B1DED53072D897E368C8BF8239DE53290766A4727CBBAB88691400E9FB9CD53442B91B5D421323A24571DBAB65B7EA7015775B6C8DE25247D0E7BF3DB7F2506B4384B32810000011111101101111011010011101100011110110111000010101010000010001111110111000110010011011000111000110011001010101100010111101001111001110000011000111011110010010111010000011001101010000010100100101010110011010000000100101101010011100000110101111000001100101000110110111011110011010100000111000000111010011101000110010011001000000011110000010111101111011000110001110010011011111011101010100101101111011100100011111110010101101011101110110000011000010000110001111101001011001001101001000101010010011101110101100011101111110100100110011101001110111100100010100000011110000100101001111101111111001100001010011011101111000010111011110001010000000100100100111110001101011010110001011101001100111011101101110111111001010101101001011011001011111001110000101001100011110110010100010001000100101011111100010011110011111100011001010111010000011100001000111010111101010010101011000010010111110111111001001101111001010010100010111000011111110101000111010100000010000111011000110000001101011011001100100100101000001111111000011001001000001000001100101001010100010110001001001101111011000010001011110010101100111111111100000101010011010011110101111110110101100010001001110010000101100101110010101110100100110000110110000001100000110001011011100001010110111000110011001010111010101101011011000101101111101101111101111011011000011100110001001100100111111010110011000111000101101111101000010001101011101001111010101000110111011001011111011100010110101101111110010010000111001010111000010111011110011110001011010000100101111100100100000011010000111110100100011100011001100011100000100011011101111011010101111110010010011010000010110001110001000011011111100010011101101011111110010101010010010111011111101101110111000011001101010100001110010110011100100011110000011001111111011001011011111110101010110001001011010110110011001110101011010011100000001011000101100100100100000101001001011101110011101111000011100101010001000000111010111000110111101011011100000011010011010011110101100110010111110110111000110011011001010101001100101010001010010010000000111010010101001111001100111100000001101101110011101001111101100011011000011001110010110101000010000000110111110110110101111011000100011110011111100010110111011001101111100001111010100101010110010000100011101111100110110111100100001000100011111001000010100000111001101001111011111111100100101111010101110011101100001011100111001001001100101101011110001010001011100000110011001010010010000100111100000011101010111110101110000110011011110001110001001000100000010101101011011100100111000010100110101010100100010110100010001100111110100000011000010010111111101101011101100110001110001101010110101010010011100000001001001000101010011011100000010011010110011100100001011011100001100110110111000110010011110011110110101001111110101010111110101101100001010000001011001011110110110000111000101111110100010010100101111000110101111100000010001010001000111011001100100100101001111011000100110000000100111011101111000111111010011110001101011101101001011101010100111101001011001110111100111010001010100000100101111111101010011110111101011110100000011111100011100100110100110001100110011010110010010101011000000100000111111001100010111010111111010011100100100011000111001000010011000010100100010100001001101100101000001110000111101110010101111001001110010000111011101101100011111110101110011101100111101100011110000101011010101010111011111010011111110100000010100111011011000100100001001010010111111000101101100100000111011110101110100011000101111011001001001100011100000001010000010101010001100001111011110000110101100011001101000000010001001101100001011010001011011001101010111100100100010110101101110001010100111011010001110010111110011010111111111110010001110000000010111100101100010010100110001000010100000011001100111010111101011001001110001111100101010000010011110101000011101100111110111100110010011110001100010000111010100101111101100100000011010000001010011010101110000001111010110001010011001100111101010110011110001110010011001000010000011110000001011010010100100000101111111011001100101101001111110101001000100000110111010101001001110101000001101000000010000011110001100010001101111001111010011000001000011111100100100110011011110101010111101011011110111100101010100001111100010111000111110100000100101010001100001011010111101100101101100111011111100101001100101000110101110010101001000001000110001101010000010111110011010000000011010000110011101101101011110000110110010001001100101110001111111100100001010000101101111010010011110110111100010101010100111000001101100100000110110010010100011101010011110101100001111000001001000000111011010000000011001100111010111111010101001100000010000101001111010100010011000100101100001001001100011101000001111011101001001111101010110Getting SignalSource with implementation Getting SignalConditioner with DataTypeAdapter implementation: , InputFilter implementation: , and Resampler implementation: with Acquisition Implementation: , Telemetry Decoder implementation: TelemetryDecoder_GPS.implementationTelemetryDecoder_1C.implementationAcquisition_GPS.implementationvector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)TelemetryDecoder_2S.implementation Galileo E1 B (I/NAV OS) channelsTracking_Galileo.implementationTelemetryDecoder_Galileo.implementationTelemetryDecoder_1B.implementationAcquisition_Galileo.implementation GALILEO E5a I (F/NAV OS) channelsTelemetryDecoder_5X.implementationasio.netdbasio.addrinfoasio.miscAlready openEnd of fileElement not foundasio.misc errorService not foundSocket type not supportedasio.addrinfo errorasio.netdb errorPass_ThroughNsr_File_Signal_SourceSpir_File_Signal_SourceRtlTcp_Signal_SourceUHD_Signal_SourceOsmosdr_Signal_SourceByte_To_ShortIbyte_To_CbyteIbyte_To_ComplexIshort_To_CshortIshort_To_ComplexFreq_Xlating_Fir_FilterBeamformer_FilterDirect_ResamplerGPS_L1_CA_PCPS_AcquisitionGPS_L1_CA_DLL_PLL_TrackingGalileo_E5a_DLL_PLL_TrackingGPS_L1_CA_Telemetry_DecoderGalileo_E1B_Telemetry_DecoderSBAS_L1_Telemetry_DecoderGalileo_E5a_Telemetry_DecoderGPS_L1_CA_ObservablesGalileo_E1B_ObservablesHybrid_ObservablesMixed_ObservablesGPS_L1_CA_PVTGALILEO_E1_PVTHybrid_PVTNull_Sink_Output_FilterFile_Output_FilterGNSS-SDR program ended.GPS_L2_M_PCPS_AcquisitionGPS_L2_M_DLL_PLL_TrackingGPS_L2_M_Telemetry_DecoderObservables.implementationChannels_Galileo.countChannels_1B.countChannels_5X.countChannels_GPS.countChannels_1C.countChannels_2S.countPVT.implementationOutputFilter.implementationOutputFilter10110111000010000100001011101001SignalSourceSignalConditionerDataTypeAdapterInputFilterArray_Signal_ConditionerInstantiating Channel , Tracking Implementation: Acquisition_GPSTracking_GPSTelemetryDecoder_GPSChannelAcquisition_1CTracking_1CTelemetryDecoder_1CAcquisition_2STracking_2STelemetryDecoder_2SAcquisition_GalileoTracking_GalileoTelemetryDecoder_GalileoAcquisition_1BTracking_1BTelemetryDecoder_1BAcquisition_5XTracking_5XTelemetryDecoder_5XGetting GPS L1 C/A channelsTracking_GPS.implementationTracking_1C.implementationAcquisition_1C.implementationChannel.signal GPS L2C (M) channelsTracking_2S.implementationAcquisition_2S.implementationTracking_1B.implementationAcquisition_1B.implementationTracking_5X.implementationAcquisition_5X.implementationboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?    v bH= :72' tS!2!' !!!lRG B7 4' & ymga[MEykc[ME?=yM[=ky[E=S[MIG= 2109 {N5boost12noncopyable_11noncopyableE@{{N5boost6system14error_categoryE16GNSSBlockFactory9{@{P{N5boost4asio5error6detail14netdb_categoryE@`{P{N5boost4asio5error6detail17addrinfo_categoryE@{P{N5boost4asio5error6detail13misc_categoryEP6@{mxlxN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEEP6{{mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEEmxP P0}P{}P~P@}P`P}P@P}P0{}P~PP}P~P}P@P}P{p}P ~P`}P0~P}P@P}P{`6Op6O{PP0}P{@PP{H{@{PPP0}PPP{P@P{pPPPPPP21InMemoryConfiguration@p{x{pPPPP`P PPPpPPRF_channel >= 0nothing to connect internallygr_complex.input_item_type.output_item_type.item_type.vector_sizefloatishortibytecbytekludge_copy(/home/carles/package/gnss-sdr-0.0.6/src/core/interfaces/gnss_block_interface.h/home/carles/package/gnss-sdr-0.0.6/src/algorithms/libs/pass_through.ccinput_item_type and output_item_type are different in a Pass_Through implementation! Taking , but item_size will supersede it. unrecognized item type. Using floatboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::copy; typename boost::detail::sp_member_access::type = gr::blocks::copy*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)9{18GNSSBlockInterface12Pass_Through@{{{PPPPpPpPPP`PP0PParma::memory::acquire(): out of memory: incompatible matrix dimensions: Mat::init(): mismatch between size of auxiliary memory and requested sizeMat::init(): size is fixed and hence cannot be changedMat::init(): requested size is not compatible with column vector layoutMat::init(): requested size is not compatible with row vector layoutMat::init(): requested size is too large%s: __pos (which is %zu) > this->size() (which is %zu)Mat::init(): inconsistent number of columns in given stringMat::operator(): index out of boundsSUPL: Trying to read GPS ephemeris from XML file /home/carles/package/gnss-sdr-0.0.6/src/utils/front-end-cal/front_end_cal.ccSUPL: Read XML Ephemeris for GPS SV New Ephemeris record inserted with Toe=ERROR: SUPL client error reading XMLSUPL RRLP GPS assistance enabled!GNSS-SDR.SUPL_gps_ephemeris_serverGNSS-SDR.SUPL_gps_acquisition_serverGNSS-SDR.SUPL_gps_ephemeris_portGNSS-SDR.SUPL_gps_acquisition_portGNSS-SDR.SUPL_read_gps_assistance_xmlSUPL: Trying to read GPS ephemeris from SUPL server...SUPL: Received Ephemeris for GPS SV GNSS-SDR.SUPL_gps_ephemeris_xmlSUPL: XML Ephemeris file created.ERROR: SUPL client for Ephemeris returned ERROR in SUPL client. Please check your Internet connection and SUPL server configurationSUPL: Try read Almanac, Iono, Utc Model, Ref Time and Ref Location from SUPL server...SUPL: Received Almanac for GPS SV ERROR: SUPL client for Almanac returned SUPL: Trying to read Acquisition assistance from SUPL server...SUPL: Received Acquisition assistance for GPS SV New acq assist record insertedERROR: SUPL client for Acquisition assistance returned Trying to read ephemeris from XML file...ERROR: Could not read Ephemeris file: Trying to get ephemeris from SUPL server...Trying to read ephemeris from SUPL server...mean(): given object has no elementsMat::init(): requested size is too large; suggest to enable ARMA_64BIT_WORDCol::subvec(): indices out of bounds or incorrectly usederror: and ./gps_ephemeris.xmlbasic_string::substr0.0 0.0 0.0 0.0 and GPS Week=GNSS-SDR.SUPL_gps_enabledsupl.nokia.comsupl.google.comGNSS-SDR.SUPL_MCCGNSS-SDR.SUPL_MNS0x59e20x31b0GNSS-SDR.SUPL_LACGNSS-SDR.SUPL_CISUPL: Received GPS IonoSUPL: Received GPS UTC ModelGNSS-SDR.read_eph_from_xmlsubtractionP6P,P"PPPPPPPPPPPPPPPPPPxPnPdPZPPPFP 0 GNSS signal duration= [s]valve(file_sink(File source filename Samples Sampling frequency Item type Item size Repeat Dump Dump filename /usr/share/gnss-sdr/conf/, exiting the program./home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/file_signal_source.ccLeft block of a signal source should not be retrievedconnected file source to throttleconnected file source to valvedisconnected file source to throttledisconnected throttle to valvedisconnected valve to file sinkdisconnected file source to valvedisconnected file source to sink unrecognized item type. Using gr_complex.file_signal_source: Unable to open the samples file File does not contain enough samples to process.Total number samples to be processed= GNSS signal recorded time to be processed: The configuration file has not been found.Please create a configuration file based on the examples at the 'conf/' folder and then generate your own GNSS Software Defined Receiver by doing:$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.confThe receiver was configured to work with a file signal source but the specified file is unreachable by GNSS-SDR.Please modify your configuration fileand point SignalSource.filename to a valid raw data file. Then:Examples of configuration files available at:If defined, path to the file containing the signal samples (overrides the configuration file)boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)16FileSignalSource@|{0|7Q8QRQ0RQRQP&Q/Q%Q$Q0PPMb`?C../data/my_capture.dat../data/my_capture_dump.datnsr_signal_source/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/nsr_file_signal_source.ccdisconnected file source to unpack_byte_disconnected unpack_byte_ to throttle_disconnected unpack_byte_ to valvedisconnected unpack_byte_ to throttledisconnected funpack_byte_ to sinkdisconnected unpack_byte_ to sink unrecognized item type. Using byte.If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)19NsrFileSignalSource@(|{(|kQlQ`QQPQ TQ_QpSQRQ0PP@intspir_signal_source/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/spir_file_signal_source.ccdisconnected file source to unpack_intspir_disconnected unpack_intspir_ to throttle_disconnected unpack_intspir_ to valvedisconnected unpack_intspir_ to throttledisconnected funpack_intspir_ to sinkdisconnected unpack_intspir_ to sink unrecognized item type. Using int.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)20SpirFileSignalSource@3|{3|QQQQQpQВQQЅQ0PPdi!=0Unknown exception.Throw in function Dynamic exception type: std::exception::what: (unknown)./data/signal_source.dat127.0.0.1.AGC_enabled.freq.gain.rf_gain.if_gain.address.port.flip_iqConnecting to AGC enabledAGC disabledSetting gain to Setting IF gain to samplesDumping output into file Boost exception: /home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.ccTrying to get signal source left block.connected rtl tcp source to valveconnected rtl tcp source to file sink/usr/include/boost/exception/diagnostic_information.hppThrow location unknown (consider using BOOST_THROW_EXCEPTION) unrecognized item type. Using short.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]const char* boost::exception_detail::get_diagnostic_information(const boost::exception&, const char*)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = rtl_tcp_signal_source_c; typename boost::detail::sp_member_access::type = rtl_tcp_signal_source_c*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21018RtlTcpSignalSource@C|{C|пQQQ QQ`QpQQQ0PPD@>Aboost::format_error: format generic failureboost::bad_format_string: format-string is ill-formedboost::too_few_args: format-string referred to more arguments than were passedboost::too_many_args: format-string referred to less arguments than were passed/usr/include/boost/format/alt_sstream_impl.hpp/usr/include/boost/optional/optional.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/osmosdr_signal_source.ccconnected osmosdr source to valveconnected osmosdr source to file sink/usr/include/boost/format/format_implementation.hppitem.pad_scheme_ & format_item_t::tabulationbound_.size()==0 || num_args_ == static_cast(bound_.size())/usr/include/boost/format/feed_args.hppi+(tmp_size-i)+(std::max)(d,(std::streamsize)0) == static_cast(w)res.size() == static_cast(w)/usr/include/boost/format/parsing.hppstatic_cast(cur_item) < items_.size() || cur_item==0/usr/include/boost/format/internals.hpp!(fmtstate_.flags_ &(std::ios_base::adjustfield ^std::ios_base::left))PLL Frequency tune error %f [Hz]...this->is_initialized()d>0vector::_M_fill_insertvector::_M_fill_insertcur_item == num_items.osmosdr_argsOsmoSdr arguments: Actual RX Rate: %f [SPS]...Actual RX Freq: %f [Hz]...Actual RX Gain: %f dB... R R RR R R RR R R Rp R R` R R RP R R R R R R R R R R R R R@ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R0 R R R R R R R R RR R R RR'R,&R'R,&R'R,&R,&R,&R,&R,&R,&R,&R,&R,&R,&R,&R&'RB'R,&R,&R,&R]'R,&R,&R,&R,&R,&R,&R,&R,&R,&R,&R'R'R'R'Rq'R,&R'R,&R,&R,&R,&R'R&R'R,&R,&R&'R&R'R,&R,&R'Rboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]const char* boost::exception_detail::get_diagnostic_information(const boost::exception&, const char*)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const double&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = osmosdr::source; typename boost::detail::sp_member_access::type = osmosdr::source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 2109@b|N5boost16base_from_memberINS_10shared_ptrINS_2io18basic_altstringbufIcSt11char_traitsIcESaIcEEEEELi0EEEN5boost2io22basic_oaltstringstreamIcSt11char_traitsIcESaIcEE5No_OpE@0c|ppxN5boost2io17bad_format_stringE@pc|ppxN5boost2io13too_many_argsE19OsmosdrSignalSource@c|{@d|@hN5boost2io18basic_altstringbufIcSt11char_traitsIcESaIcEEEP6d|c|lxN5boost16exception_detail19error_info_injectorINS_2io17bad_format_stringEEEP6@e|@d|mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_2io17bad_format_stringEEEEEP6f|pxlxN5boost16exception_detail19error_info_injectorINS_2io12too_few_argsEEEP6f|e|mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_2io12too_few_argsEEEEEP6g|Pc|lxN5boost16exception_detail19error_info_injectorINS_2io13too_many_argsEEEP6@h| g|mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_2io13too_many_argsEEEEEP6h|b|8N5boost2io22basic_oaltstringstreamIcSt11char_traitsIcESaIcEEE@@i|PmxN5boost6detail18sp_counted_impl_pdIPNS_2io18basic_altstringbufIcSt11char_traitsIcESaIcEEENS2_22basic_oaltstringstreamIcS5_S6_E5No_OpEEEppxR RQc|@RPRQpxRRQPc|pRRQc|PRRkAЅA@QRPwApyA jAQA R|ARc|QQRRQ@QQQQ0PP@d| R RQ@d| R Rl|m|@d| R RQRRd| R0Rd|RR R@Re| R RQe| R Rm|Hn|@`f| R0 RQR R`f|` Rp R`f|RRp R R g|` R@ RQ g| R Ro|o|@g| R RQR@Rg| R Rg|RR0 R R88Xp|o|p|p|h|RRh|R@R i|QR QkNR0Q/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/uhd_signal_source.ccconnected usrp source to valve RF Channel vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)connected valve to file sink RF Channel connected usrp source to file sink RF Channel unrecognized item type. Using cshort.Sampling Rate for the USRP device: %f [sps]...Actual USRP center freq.: %f [Hz]...Actual USRP center freq. set to: %f [Hz]...Actual daughterboard gain set to: %f dB...Setting RF bandpass filter bandwidth to: %f [Hz]...UHD source disconnectedvector::_M_insert_aux.device_addressaddr.subdeviceinternal.clock_source.RF_channels.IF_bandwidth_hzsc8sc16fc32UHD RF CHANNEL # SETTINGSlo_lockedCheck for front-end %s ...LockedUNLOCKED!RF_channel Send STOP signal after boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const std::basic_string&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::uhd::usrp_source; typename boost::detail::sp_member_access::type = gr::uhd::usrp_source*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = double&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const double&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21015UhdSignalSource@|{|dRfRRRRZR_RYR@XR0P@YRNAI@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)25TwoBitCpxFileSignalSource@|{0|RRRRR@R`RRR0PPNothing to connect internally Unknown item type conversion../data/input_filter.datbandpassrole .taps_item_type.number_of_taps.number_of_bands.band_begin_end.ampl.filter_type.grid_densityvector::reserveI input_filter(Q input_filter(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/fir_filter.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::fir_filter_fff; typename boost::detail::sp_member_access::type = gr::filter::fir_filter_fff*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::fir_filter_ccf; typename boost::detail::sp_member_access::type = gr::filter::fir_filter_ccf*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)?????333333??9FirFilter@!|{0| 0S1SbSbSbSS0SPR`R0PP.IF.decimation_factor Unknown input filter input/output item type conversion/home/carles/package/gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::freq_xlating_fir_filter_scf; typename boost::detail::sp_member_access::type = gr::filter::freq_xlating_fir_filter_scf*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::freq_xlating_fir_filter_fcf; typename boost::detail::sp_member_access::type = gr::filter::freq_xlating_fir_filter_fcf*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::freq_xlating_fir_filter_ccf; typename boost::detail::sp_member_access::type = gr::filter::freq_xlating_fir_filter_ccf*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)?????333333??20FreqXlatingFirFilter@|{Ы|S SPSpS@SlSzSPgSiS0PPdump_ is resampler(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/beamformer_filter.ccconnected beamformer output to file sink unrecognized item type for beamformerboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)16BeamformerFilter@|{|SкSS0SSSPS0SPS0PP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc unknown acquisition item typeUnknown function operating on type %1%Cause unknown: error caused by bad argument with value %1%log1p(x) requires x > -1, but got x = %1%.The scale parameter "lambda" must be > 0, but was: %1%.boost::math::exponential_distribution<%1%>::exponential_distributionProbability argument is %1%, but must be >= 0 and <= 1 !boost::math::quantile(const exponential_distribution<%1%>&, %1%).ifreq.coherent_integration_time_ms.bit_transition_flag.max_dwellsstream_to_vector(acquisition(Cause unknownError in function Overflow Errorlog1p<%1%>(%1%).pfa Threshold = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@|{20AcquisitionInterface22GpsL1CaPcpsAcquisition@||P6|hlxN5boost16exception_detail19error_info_injectorISt14overflow_errorEEP6@|@|mxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt14overflow_errorEEEEP6|5lxN5boost16exception_detail19error_info_injectorISt12domain_errorEEP6||mxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt12domain_errorEEEE |SSPSpS@SSPS SS0PPSSS S@S`SSSSS@|SSlA@|SS||8|S SlASS|0S`S|SpS@SpS|SSA|SS|H|8`|PSSASS`|SS`|SSSS/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_multithread_acquisition.ccAcquisition.bit_transition_flagboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_multithread_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_multithread_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21033GpsL1CaPcpsMultithreadAcquisition@|||T`T*T+T*TTTTT0PPTTp'TT@TTT@TT0T/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc.doppler_minboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_assisted_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_assisted_acquisition_cc*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21030GpsL1CaPcpsAssistedAcquisition@|||-T.T@9T`9T09T`+Tp+T+T+T0PP,TP,Tp,T,T,T,T0-T`-T-T-T/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_fine_doppler_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_fine_doppler_cc*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21033GpsL1CaPcpsAcquisitionFineDoppler@}|}::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_tong_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_tong_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21026GpsL1CaPcpsTongAcquisition@}|}MTNT`aTaTPaTKTLTGT0HT0PPITHT]T IT`ITITHT`JT JTPKT/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.ccQuickSync Algorithm requires a coherent_integration_time Coherent_integration_time of .folding_factor multiple of ms, Value entered ms ms will be used instead., Vector Length: , Samples per ms: , Folding factor: , Sampled ms: , Code Length: stream_to_vector_quicksync(boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_quicksync_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_quicksync_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031GpsL1CaPcpsQuickSyncAcquisition@2}|2}gT`hTT T~TeTfTaTbT0PPcTbT{TcT@cTcTbT@dTdT0eT/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int) v bH= :72' tS!2!' !!!lRG B7 4' & 21GpsL2MPcpsAcquisition@0I}|PI}pTpTpTT`TTTTpT0PPpTTTT0TPTTTT T/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cccoherent_integration_time should be multiple of Galileo code length (4 ms). coherent_integration_time = ../data/acquisition.dat ms will be used..cbocboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   33GalileoE1PcpsAmbiguousAcquisition@ e}|Pe}TTTTT TTT T0PPЩTШTpTTPTTTPTTPT@o@?/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_cccwsr_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_cccwsr_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   39GalileoE1PcpsCccwsrAmbiguousAcquisition@ u}|Pu}TTTTTTT`TT0PPPTPTTTTT TTTT/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.ccacquisition_quicksync(boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_quicksync_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_quicksync_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   42GalileoE1PcpsQuickSyncAmbiguousAcquisition@}|А} TTT0TT@T0TT@T0PPTTT0TpTTT0T0TpT/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_tong_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_tong_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   37GalileoE1PcpsTongAmbiguousAcquisition@}|}UUpUU`UUUTT0PPpTpTUTT0T@TUTT/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_pcps_8ms_acquisition_cc; typename boost::detail::sp_member_access::type = galileo_pcps_8ms_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   36GalileoE1Pcps8msAmbiguousAcquisition@ }|P}!U!UP7Up7U@7U U UU U0PPUU3UUPUUU.UUPU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.ccCoherent integration time should be 3 ms or less. Changing to 3ms Too high coherent integration time. Changing to 3msZero padding activated. Changing to 1ms code + 1ms zero padding Zero padding activated. Changing to 1ms code + 1ms zero paddingbasic_string::at: __n (which is %zu) >= this->size() (which is %zu).CAF_window_hz.Zero_paddingboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e5a_noncoherentIQ_acquisition_caf_cc; typename boost::detail::sp_member_access::type = galileo_e5a_noncoherentIQ_acquisition_caf_cc*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ 37GalileoE5aNoncoherentIQAcquisitionCaf@}|} ?U@UUU UUTU7U7U7U8U0PP9U8UQU8U09Up9U8U0:U9U::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1_dll_pll_veml_tracking_cc; typename boost::detail::sp_member_access::type = galileo_e1_dll_pll_veml_tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@p}{17TrackingInterface27GalileoE1DllPllVemlTracking@}P}}WU0XUcUcUcUpUUUUUUUU0PP0WUWUPWUpWU333333?333333?/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_volk_e1_dll_pll_veml_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_volk_e1_dll_pll_veml_tracking_cc; typename boost::detail::sp_member_access::type = galileo_volk_e1_dll_pll_veml_tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031GalileoVolkE1DllPllVemlTracking@}P}}`fUfU`rUrUPrU dU0dU@dU`dU0PPeU@fUfU fU.port_ch0/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Galileo_E1_Tcp_Connector_Tracking_cc; typename boost::detail::sp_member_access::type = Galileo_E1_Tcp_Connector_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21029GalileoE1TcpConnectorTracking@ ~P} ~uUuUUUUrUrUrUsU0PPtUtUtUtU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_fll_pll_tracking.cc.order.fll_bw_hzboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024GpsL1CaDllFllPllTracking@@~P}`~PUЃUUUЏUU U0UPU0PPЂU0UUUY@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_optim_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21026GpsL1CaDllPllOptimTracking@!~P}!~U@U@U`U0UPU`UpUU0PP@UU`UU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Dll_Pll_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Dll_Pll_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21021GpsL1CaDllPllTracking@+~P}+~ UUUUUUUНUU0PPUUUU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Tcp_Connector_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Tcp_Connector_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21027GpsL1CaTcpConnectorTracking@6~P} 6~UUpUU`UU U0UPU0PPU`U U@U.pll_bw_init_hz.dll_bw_init_hz.ti_ms/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Galileo_E5a_Dll_Pll_Tracking_cc; typename boost::detail::sp_member_access::type = Galileo_E5a_Dll_Pll_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024GalileoE5aDllPllTracking@`C~P}C~UUUUpUUUU U0PPU`U U@U4@gps_l2_m_dll_pll_tracking/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l2_m_dll_pll_tracking_cc; typename boost::detail::sp_member_access::type = gps_l2_m_dll_pll_tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int) v bH= :72' tS!2!' !!!lRG B7 4' & 20GpsL2MDllPllTracking@`L~P}L~`UUUUUUUU0U0PPU@UU Uis_hier_in is_hier_out is_hier pcps_acquisition_cccall to empty boost::functionChannel: ,sample stamp: , threshold: , doppler_max: , doppler_step: ../data/test_statistics__sat__doppler_positive acquisitionsample_stamp test statistics value test statistics threshold code phase doppler magnitude input signal power negative acquisition/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.ccState can only be set to 0 or 1 , doing acquisition of satellite: boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@W~@dN5boost17bad_function_callE19pcps_acquisition_cc@W~AP6X~W~lxN5boost16exception_detail19error_info_injectorINS_17bad_function_callEEEP6@Y~@X~mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEEE@Y~PmxN5boost6detail17sp_counted_impl_pI19pcps_acquisition_ccEEW~@UPUlAX~UUuAUU UUUpUUU0A0iA UAPUA0qAjA A@X~UUlA@X~ UU[~\~8X~0UUlAU@UX~pU UX~U UU0UY~U0U0UkNU U/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.ccpcps_multithread_acquisition_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()boost::condition_variable::condition_variable()boost::mutex::~mutex()boost::condition_variable::~condition_variable()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031pcps_multithread_acquisition_cc@f~A@f~PmxN5boost6detail17sp_counted_impl_pI31pcps_multithread_acquisition_ccEE@g~AN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv31pcps_multithread_acquisition_ccEENS2_5list1INS2_5valueIPS6_EEEEEEEE@g~PmxN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv31pcps_multithread_acquisition_ccEENS3_5list1INS3_5valueIPS7_EEEEEEEEEE0f~ V@ VuAUU UUUpUUU0A0iA UA`VA0qAjA APf~"V@#V#VkN"V"Vf~P#V`#V#VNg~"V0#V"VkN"V"Vpcps_assisted_acquisition_cc (Doppler max,Doppler min)=(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.ccAcq assist ENABLED for GPS SV Acq assist DISABLED for GPS SV XBVBVBVCVXCV::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21028pcps_assisted_acquisition_cc@ps~A@t~PmxN5boost6detail17sp_counted_impl_pI28pcps_assisted_acquisition_ccEEs~%V@'VuAUU UUUpUUU0A0iA U$V::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21032pcps_acquisition_fine_doppler_cc@@~A@~PmxN5boost6detail17sp_counted_impl_pI32pcps_acquisition_fine_doppler_ccEEp~LV`NVuAUU UUUpUUU0A0iA UDV`^VA0qAjA A~eVeVeVkNeVeV?pcps_tong_acquisition_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024pcps_tong_acquisition_cc@0~A@~PmxN5boost6detail17sp_counted_impl_pI24pcps_tong_acquisition_ccEEP~fVhVuAUU UUUpUUU0A0iA UAsVA0qAjA Ap~V V0VkNVVpcps_cccwsr_acquisition_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21026pcps_cccwsr_acquisition_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI26pcps_cccwsr_acquisition_ccEE~ VPVuAUU UUUpUUU0A0iA UAVA0qAjA A0~ VPV`VkN0V@Vpcps_quicksync_acquisition_cc ,folding factor: , Signal Size: folding factor magnitude folded possible delay corr output/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc ,algorithm: pcps_quicksync_acquisitionpossible delay correlation outputboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21029pcps_quicksync_acquisition_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI29pcps_quicksync_acquisition_ccEE ~VVuAUU UUUpUUU0A0iA UA0VA0qAjA A@~VVVkNVVgalileo_pcps_8ms_acquisition_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031galileo_pcps_8ms_acquisition_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI31galileo_pcps_8ms_acquisition_ccEE0~VVuAUU UUUpUUU0A0iA UAVA0qAjA AP~`VVVkNpVV_CAF.datgalileo_e5a_noncoherentIQ_acquisition_caf_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc../data/test_statistics_E5a_sat_VHVVVVboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21044galileo_e5a_noncoherentIQ_acquisition_caf_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI44galileo_e5a_noncoherentIQ_acquisition_caf_ccEE~V`VuAUU UUUpUUU0A0iA UApVA0qAjA Aз~WWWkNWW/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.ccStarting tracking of satellite PULL-IN Code Phase [samples]=Exception writing trk dump file galileo_e1_dll_pll_veml_tracking_ccTracking dump enabled on channel Exception opening trk dump file Tracking start on channel for satellite PULL-IN Doppler [Hz]=Loss of lock in channel Current input signal time = : Satellite , Doppler= [Hz] CN0 = [dB-Hz]Tracking Channel set to boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   35galileo_e1_dll_pll_veml_tracking_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI35galileo_e1_dll_pll_veml_tracking_ccEE~ WWuAUU UUUpUUU0A0iA UWpWA0qAjA A~ 3WP3W`4WkN03W@3W@08/AMbp?@Ao;/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_volk_e1_dll_pll_veml_tracking_cc.ccgalileo_volk_e1_dll_pll_veml_tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   40galileo_volk_e1_dll_pll_veml_tracking_cc@@~A@~PmxN5boost6detail17sp_counted_impl_pI40galileo_volk_e1_dll_pll_veml_tracking_ccEEp~=W@WuAUU UUUpUUU0A0iA U9W EWA0qAjA A~@fWpfWfWkNPfW`fWE@, CN0 = /home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.ccGalileo_E1_Tcp_Connector_Tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   36Galileo_E1_Tcp_Connector_Tracking_cc@~A@@~PmxN5boost6detail17sp_counted_impl_pI36Galileo_E1_Tcp_Connector_Tracking_ccEE~pkWmWuAUU UUUpUUU0A0iA UfW0rWA0qAjA A~ WPW`WkN0W@W/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc Code Phase correction [samples]= PULL-IN Code Phase [samples]= Detected NaN samples at sample number Gps_L1_Ca_Dll_Fll_Pll_Tracking_ccPULL-IN Doppler [Hz]= GLONASSCompassboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21033Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI33Gps_L1_Ca_Dll_Fll_Pll_Tracking_ccEE~ЖWWuAUU UUUpUUU0A0iA UWWA0qAjA A~W0W@WkNW W@MbP?9@333333?o:/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_optim_tracking_cc.ccNumber of samples between Acquisition and Tracking =Gps_L1_Ca_Dll_Pll_Tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21035Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc@~A@~PmxN5boost6detail17sp_counted_impl_pI35Gps_L1_Ca_Dll_Pll_Optim_Tracking_ccEE0~WWuAUU UUUpUUU0A0iA UWWA0qAjA AP~0W`WpWkN@WPWD/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.ccGPS L1 C/A Tracking CH boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21029Gps_L1_Ca_Dll_Pll_Tracking_cc@@A@PmxN5boost6detail17sp_counted_impl_pI29Gps_L1_Ca_Dll_Pll_Tracking_ccEE`WWuAUU UUUpUUU0A0iA UWWA0qAjA AX X0XkNXXacq_trk_diff_samples=/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.ccGps_L1_Ca_Tcp_Connector_Tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21035Gps_L1_Ca_Tcp_Connector_Tracking_cc@ A@ PmxN5boost6detail17sp_counted_impl_pI35Gps_L1_Ca_Tcp_Connector_Tracking_ccEE X XuAUU UUUpUUU0A0iA UpX%XA0qAjA A IXIXIXkNIXIX`!@3lgf>/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.ccSecondary code delay couldn't be resolved.Galileo_E5a_Dll_Pll_Tracking_cc samples_offset=Secondary code locked.Galileo E5 Tracking CH [dB-Hz] boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?     ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031Galileo_E5a_Dll_Pll_Tracking_cc@ A@PmxN5boost6detail17sp_counted_impl_pI31Galileo_E5a_Dll_Pll_Tracking_ccEEP@SX`UXuAUU UUUpUUU0A0iA UJX[XA0qAjA AppXXXkNXẊA(-DT!@KFI@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc acq_trk_shif_correction_samples= d_current_prn_length_samples= whith Doppler= acq_to_trk_delay_samples= d_acq_code_phase_samples=GPS L2C M Tracking CH gps_l2_m_dll_pll_tracking_ccd_vector_lengthboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&) v bH= :72' tS!2!' !!!lRG B7 4' & 28gps_l2_m_dll_pll_tracking_cc@&A@'PmxN5boost6detail17sp_counted_impl_pI28gps_l2_m_dll_pll_tracking_ccEE&X XuAUU UUUpUUU0A0iA UX0XA0qAjA A&@XpXXkNPX`X JA08A{Gz? ף</home/carles/package/gnss-sdr-0.0.6/src/core/receiver/control_message_factory.cc multiple of control message size Ignoring this queue message to prevent unexpected results.Queue message has size , which is nottypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::message; typename boost::detail::sp_member_access::type = gr::message*]21ControlMessageFactory9*@+kxSt23_Sp_counted_ptr_inplaceI15ControlMessage_SaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@+kxSt23_Sp_counted_ptr_inplaceISt6vectorISt10shared_ptrI15ControlMessage_ESaIS3_EESaIS5_ELN9__gnu_cxx12_Lock_policyE2EE*XдX*XXXXX`+XXpXйX0X v bH= :72' tS!2!' !!!lRG B7 4' & d k95 8R=Þ&2le.?RhEZcF#Hhţd$@['SǗ\xN!%7.r}/'T"[dJW{+{JvXH*Hl Lt^t,=ykkLeϞU 7=g?| [5@a&DZjNj-bbW=ͩCH}0ZR?9Sc+T w6M@>*2[boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::io_signature; typename boost::detail::sp_member_access::type = gr::io_signature*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)14gnss_sdr_valve@<=@<PmxN5boost6detail17sp_counted_impl_pI14gnss_sdr_valveEE<pXXuAUU UUUpUUU0A0iA UA@AA0qA|AAX<X`X XkN@XPXxXXXXXX8XXXxXXsXsXsXsXsXsXsXXXXX8XXXymga[MEykc[ME?=yM[=ky[E=S[MIG= 210[\]^4vzc[gSD?ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210;35ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ complex_byte_to_float_x2boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)24complex_byte_to_float_x2@P=@ QPmxN5boost6detail17sp_counted_impl_pI24complex_byte_to_float_x2EEPXXuAUU UUUpUUU0A0iA UA@AA0qA|AAXQ`XXpXkNXXbyte_x2_to_complex_byteboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)23byte_x2_to_complex_byte@V=@ WPmxN5boost6detail17sp_counted_impl_pI23byte_x2_to_complex_byteEEV@XPXuAUU UUUpUUU0A0iA UA@AA0qA|AAXWX0XXkNX Xcshort_to_float_x2boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)18cshort_to_float_x2@\=@ ]PmxN5boost6detail17sp_counted_impl_pI18cshort_to_float_x2EE\XXuAUU UUUpUUU0A0iA UA@AA0qA|AApX]PXX`XkNXXshort_x2_to_cshortboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)18short_x2_to_cshort@b=@ cPmxN5boost6detail17sp_counted_impl_pI18short_x2_to_cshortEEb0X@XuAUU UUUpUUU0A0iA UA@AA0qA|AAXcX XXkNXXcomplex_float_to_complex_byteboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)29complex_float_to_complex_byte@h=@@iPmxN5boost6detail17sp_counted_impl_pI29complex_float_to_complex_byteEEhXXuAUU UUUpUUU0A0iA UA@AA0qA|AA`Xi0XX@XkN`XpXdata_type_adapter_(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/byte_to_short.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::char_to_short; typename boost::detail::sp_member_access::type = gr::blocks::char_to_short*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)11ByteToShort@q{q YY Y Yp YY0YXY0PPlv_8sc_t/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = interleaved_byte_to_complex_byte; typename boost::detail::sp_member_access::type = interleaved_byte_to_complex_byte*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)12IbyteToCbyte@y{y`Y@YYYY YY Y Y0PP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::char_to_short; typename boost::detail::sp_member_access::type = gr::blocks::char_to_short*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::interleaved_short_to_complex; typename boost::detail::sp_member_access::type = gr::blocks::interleaved_short_to_complex*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)14IbyteToComplex@P{pYY(Y(Y(Y@YY0YpY0PP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = interleaved_short_to_complex_short; typename boost::detail::sp_member_access::type = interleaved_short_to_complex_short*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)14IshortToCshort@P{p+Y,Y05YP5Y 5Y)Y+Y)Y )Y0PP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_complex.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::interleaved_short_to_complex; typename boost::detail::sp_member_access::type = gr::blocks::interleaved_short_to_complex*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)15IshortToComplex@P{p9Y9Y`BYBYPBY6Y8Y5Y5Y0PPinterleaved_byte_to_complex_byteboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)32interleaved_byte_to_complex_byte@5@PmxN5boost6detail17sp_counted_impl_pI32interleaved_byte_to_complex_byteEE GY0GYuAUU UUUpUUU0A0iA UsA`yAA0qA tAPiABYЗFYGYFYkNFYGYinterleaved_short_to_complex_shortboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)34interleaved_short_to_complex_short@5@@PmxN5boost6detail17sp_counted_impl_pI34interleaved_short_to_complex_shortEEKYKYuAUU UUUpUUU0A0iA UsA`yAA0qA tAPiAPGYPKYKY`KYkNKYKYinput_filter -> resampler/home/carles/package/gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/signal_conditioner.ccSignal conditioner already connected internallydata_type_adapter -> input_filterSignal conditioner already disconnected internallytypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21017SignalConditioner@{ LYPNY[Y[Y[YpNYTYKYLY0PP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/array_signal_conditioner.ccArray Signal conditioner already connected internallyArray input_filter -> resamplerArray Signal conditioner already disconnected internallytypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21022ArraySignalConditioner@@{``\Y^YfYgYfY^YbY \Y@\Y0PP./data/signal_conditioner.dat.sample_freq_in.sample_freq_outsample_freq_in /home/carles/package/gnss-sdr-0.0.6/src/algorithms/resampler/adapters/direct_resampler_conditioner.ccconnected resampler to file sink unrecognized item type for resamplerboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)26DirectResamplerConditioner@P{p@jYkYzYzYzY0hYiY`gYgY0PP@?Adirect_resampler_conditioner_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)31direct_resampler_conditioner_cc@A@PmxN5boost6detail17sp_counted_impl_pI31direct_resampler_conditioner_ccEE@{YP{YuAUU UUUpUUU0A0iA Up{Y|YA0qAjA AйY0YYkNY YAdirect_resampler_make_conditioner_csboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)31direct_resampler_conditioner_cs@A@@PmxN5boost6detail17sp_counted_impl_pI31direct_resampler_conditioner_csEE@YPYuAUU UUUpUUU0A0iA UpYYA0qAjA AYYЈYkNYYdirect_resampler_make_conditioner_cbboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)31direct_resampler_conditioner_cb@A@PmxN5boost6detail17sp_counted_impl_pI31direct_resampler_conditioner_cbEE0 Y0YuAUU UUUpUUU0A0iA UPYYA0qAjA APYYYkNYЏY/usr/include/boost/statechart/detail/counted_base.hpp/usr/include/boost/statechart/detail/state_base.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/channel/adapters/channel.ccchannel already connected internallyChannel already disconnected internallyDefault case, invalid message./usr/include/boost/smart_ptr/intrusive_ptr.hpp/usr/include/boost/statechart/state_machine.hppbase_type::count_ > 0falsepass_through_ -> acquisitionpass_through_ -> trackingtracking -> telemetry_decoderStop channel ACQ SUCCESS satellite ACQ FAILED satellite currentStates_.size() > 1Acquisition_ Doppler_max = Doppler_step = .repeat_satellite satellite repeat = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = ChannelFsm; InitialState = channel_idle_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]boost::mutex::~mutex()boost::condition_variable::condition_variable()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constboost::condition_variable::~condition_variable()boost::detail::interruption_checker::~interruption_checker()boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210P6{N5boost10statechart13state_machineI10ChannelFsm19channel_idle_fsm_S0SaIvENS0_25null_exception_translatorEEE@@10ChannelFsm@@{16ChannelInterface7Channel@S @AN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv7ChannelEENS2_5list1INS2_5valueIPS6_EEEEEEEE@PmxN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv7ChannelEENS3_5list1INS3_5valueIPS7_EEEEEEEEEE@PYYYY`pYYYYYY@YYY0PPY0YYY@YYYYpYN0 YY0YkNPY`Y/usr/include/boost/cast.hppdynamic_cast(x) == xget_pointer( pContext ) != 0get_pointer( pContext_ ) != 0/usr/include/boost/statechart/simple_state.hppget_pointer( stt.pContext_ ) != 0get_pointer( pOutermostUnstableState_ ) == 0boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)T& boost::intrusive_ptr::operator*() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]boost::statechart::detail::reaction_result boost::statechart::state_machine::send_event(const event_base_type&) [with MostDerived = ChannelFsm; InitialState = channel_idle_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::event_base_type = boost::statechart::event_base]T& boost::intrusive_ptr::operator*() const [with T = const boost::statechart::event_base]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const channel_waiting_fsm_S3*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]Target boost::polymorphic_downcast(Source*) [with Target = const channel_acquiring_fsm_S1*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = channel_acquiring_fsm_S1]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = const channel_tracking_fsm_S2*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = channel_tracking_fsm_S2]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_tracking_fsm_S2; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_tracking_fsm_S2; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const channel_idle_fsm_S0*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = channel_idle_fsm_S0]T& boost::intrusive_ptr::operator*() const [with T = channel_idle_fsm_S0]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = channel_idle_fsm_S0; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_idle_fsm_S0; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_idle_fsm_S0; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = channel_idle_fsm_S0*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_tracking_fsm_S2; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = channel_tracking_fsm_S2*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T& boost::intrusive_ptr::operator*() const [with T = channel_waiting_fsm_S3]Target boost::polymorphic_downcast(Source*) [with Target = ChannelFsm*; Source = boost::statechart::state_machine]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_waiting_fsm_S3; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_waiting_fsm_S3; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = channel_acquiring_fsm_S1*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_waiting_fsm_S3; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]T* boost::intrusive_ptr::operator->() const [with T = channel_waiting_fsm_S3]Target boost::polymorphic_downcast(Source*) [with Target = channel_waiting_fsm_S3*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = ChannelFsm; InitialState = channel_idle_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_start_acquisition*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_valid_acquisition*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_failed_acquisition_repeat*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_failed_acquisition_no_repeat*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_failed_tracking_standby*; Source = const boost::statechart::event]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]91N5boost10statechart6detail10count_baseILb1EEE92N5boost10statechart6detail10count_baseILb0EEEP621N5boost10statechart6detail12counted_baseILb1EEEP631N5boost10statechart6detail12counted_baseILb0EEE@3@2N5boost10statechart6detail11rtti_policy14rtti_base_typeINS1_12counted_baseILb1EEEEE@42N5boost10statechart6detail11rtti_policy14rtti_base_typeINS1_12counted_baseILb0EEEEEP6403N5boost10statechart10event_baseEP6@5{3N5boost10statechart6detail10state_baseISaIvENS1_11rtti_policyEEE@5`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI28Ev_channel_start_acquisitionNS0_10event_baseEEE@65N5boost10statechart5eventI28Ev_channel_start_acquisitionSaIvEEE@60628Ev_channel_start_acquisition@@7`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI28Ev_channel_valid_acquisitionNS0_10event_baseEEE@87N5boost10statechart5eventI28Ev_channel_valid_acquisitionSaIvEEE@`8728Ev_channel_valid_acquisition@8`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI36Ev_channel_failed_acquisition_repeatNS0_10event_baseEEE@98N5boost10statechart5eventI36Ev_channel_failed_acquisition_repeatSaIvEEE@:@936Ev_channel_failed_acquisition_repeat@:`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI39Ev_channel_failed_acquisition_no_repeatNS0_10event_baseEEE@@;0:N5boost10statechart5eventI39Ev_channel_failed_acquisition_no_repeatSaIvEEE@;;39Ev_channel_failed_acquisition_no_repeat@@<`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI34Ev_channel_failed_tracking_standbyNS0_10event_baseEEE@=;N5boost10statechart5eventI34Ev_channel_failed_tracking_standbySaIvEEE@=<34Ev_channel_failed_tracking_standby@>4N5boost10statechart6detail10leaf_stateISaIvENS1_11rtti_policyEEE@>=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19channel_idle_fsm_S0NS1_10leaf_stateISaIvES2_EEEE@@?P>N5boost10statechart12simple_stateI19channel_idle_fsm_S010ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@@@>N5boost10statechart5stateI19channel_idle_fsm_S010ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@A?19channel_idle_fsm_S0@A=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI24channel_acquiring_fsm_S1NS1_10leaf_stateISaIvES2_EEEE@@B0AN5boost10statechart12simple_stateI24channel_acquiring_fsm_S110ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@@CBN5boost10statechart5stateI24channel_acquiring_fsm_S110ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@DC24channel_acquiring_fsm_S1@D=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI23channel_tracking_fsm_S2NS1_10leaf_stateISaIvES2_EEEE@@E0DN5boost10statechart12simple_stateI23channel_tracking_fsm_S210ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@@FEN5boost10statechart5stateI23channel_tracking_fsm_S210ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@GF23channel_tracking_fsm_S2@G=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI22channel_waiting_fsm_S3NS1_10leaf_stateISaIvES2_EEEE@@H0GN5boost10statechart12simple_stateI22channel_waiting_fsm_S310ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@@IHN5boost10statechart5stateI22channel_waiting_fsm_S310ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@JI22channel_waiting_fsm_S360YpYY@8 YYY9YY`Y;YYYP=YYY>Y@YYYYY?YYYYYY@Y0YYYYYB`YY0Y`YYYC`YYPY`YYYC`YpYY`YYYEPYY`YPYYYFPYYYPYYYFPYYYPYYYH@YpYYYYYI@YPYYYYYI@YY YYYY./navigation.datvector length .vector_lengthtelemetry_decoder(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.ccglobal navigation message queue assigned to telemetry_decoder (boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l1_ca_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = gps_l1_ca_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@X{25TelemetryDecoderInterface23GpsL1CaTelemetryDecoder@XXXYY@Z`Z0ZYYYY0PP Z@ZZgps_l2_m_telemetry_decoder/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l2_m_telemetry_decoder.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l2_m_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = gps_l2_m_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210 v bH= :72' tS!2!' !!!lRG B7 4' & 22GpsL2MTelemetryDecoder@dXeZZZZZ0ZZZZ0PPZZPZ/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.ccGALILEO TELEMETRY DECODER: satellite set to boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1b_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = galileo_e1b_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   26GalileoE1BTelemetryDecoder@oXoZpZp#Z#Z`#Z ZpZZZ0PPP#Zp Z#Z/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.ccSBAS TELEMETRY DECODER: satellite set to boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = sbas_l1_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = sbas_l1_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)22SbasL1TelemetryDecoder@wX0w`%Z0&Z1Z1Zp1Z$Z$Z$Z0$Z0PP`1Z.Z1ZGalileo_E5A_Telemetry_Decoder/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e5a_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = galileo_e5a_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?     ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ 26GalileoE5aTelemetryDecoder@ЄX5Z6ZBZBZBZ@5Z2Z 2Z@2Z0PPBZ?Z@CZ/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.ccException writing observables dump file Setting decoder Finite State Machine to satellite Telemetry decoder dump enabled on channel Preamble detection for SAT Frame sync SAT with preamble start at Lost of frame sync SAT preamble_diff= Navigation Satellite set to Navigation channel set to telemetrygps_navigation_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = GpsL1CaSubframeFsm; InitialState = gps_subframe_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210P6{N5boost10statechart13state_machineI18GpsL1CaSubframeFsm19gps_subframe_fsm_S0SaIvENS0_25null_exception_translatorEEE@ @18GpsL1CaSubframeFsm30gps_l1_ca_telemetry_decoder_cc@@A@PmxN5boost6detail17sp_counted_impl_pI30gps_l1_ca_telemetry_decoder_ccEE@_ZaZaZ@bZp ]Z_ZuAUU UUUpUUU0A0iA U`CZDZA0qAjA A _ZP_ZbZkN0_Z@_Z@GPS L2C CNAV channel set to vector::_M_emplace_back_auxget_valid_frames(): msg_candidates.size()=Valid CNAV message found!gps_l2_m_telemetry_decoder_cc set to satellite /home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2_m_telemetry_decoder_cc.ccDiscarting this buffer, no CNAV frames detected CH GOOD L2C CNAV FRAME DETECTED! CH New GPS CNAV Ephemeris received for SV New GPS CNAV IONO model received for SV GPS L2C M TELEMETRY PROCESSING: satellite GPS L2C CNAV telemetry decoder in channel boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&) v bH= :72' tS!2!' !!!lRG B7 4' & 29gps_l2_m_telemetry_decoder_cc@A@@PmxN5boost6detail17sp_counted_impl_pI29gps_l2_m_telemetry_decoder_ccEEࠀ jZkZuAUU UUUpUUU0A0iA UbZ`wZA0qAjA A@ZpZpZkNPZ`Z(@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.ccGalileo CRC correct on channel GPS_to_Galileo time conversion:Preamble detection for Galileo SAT Starting page decoder for Galileo SAT galileo_e1b_telemetry_decoder_ccInitializing GALILEO E1B TELEMETRY PROCESSING from satellite Galileo CRC error on channel Galileo almanac received!A0G=A1G=T0G=WN_0G_10=Current parameters:d_TOW_at_current_symbol=d_nav.WN_0=delta_t=delta_t = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   32galileo_e1b_telemetry_decoder_cc@`A@PmxN5boost6detail17sp_counted_impl_pI32galileo_e1b_telemetry_decoder_ccEEZZuAUU UUUpUUU0A0iA U@ZZA0qAjA AZZZkNZZP@u"Aforecast(): noutput_items=SBAS channel set to -> byte=get_symbols(): d_past_sample= samples size=smplp: smpl0: smpl1: d_corr_paired: d_corr_shifted: corr_diff: stand_by: d_aligned: sym: inverted normalget_frame_candidates(): d_buffer.size()= bits.size()=copy bits into working buffer ( bits)preamble detected! candidate=candidate : final crc remainder= Valid message found! Relbitoffset=Not a valid message. content=general_work(): output_items real size= ninput_items size= input_items real size= ninput_items[0]=message_sample_stamp= (sample_stamp= sample_alignment= symbol_alignment= relative_preamble_start= message_sample_offset=SBAS message type from PRN receivedsbas_l1_telemetry_decoder_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc ninput_items_required ninput_items_required.size()=zerropad_front_and_convert_to_bytes():zerropad_back_and_convert_to_bytes():SBAS L1 TELEMETRY PROCESSING: satellite SBAS telemetry decoder in channel boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)28sbas_l1_telemetry_decoder_cc@pA@PmxN5boost6detail17sp_counted_impl_pI28sbas_l1_telemetry_decoder_ccEEZ ZuAUU UUUpUUU0A0iA UZZA0qAjA A[[[kN[[?/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.ccgalileo_e5a_telemetry_decoder_ccGALILEO E5A TELEMETRY PROCESSING: satellite boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?     ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ 32galileo_e5a_telemetry_decoder_cc@ƀA@@ǀPmxN5boost6detail17sp_counted_impl_pI32galileo_e5a_telemetry_decoder_ccEEƀP!["[uAUU UUUpUUU0A0iA U [0/[A0qAjA AǀJ[@J[PJ[kN J[0J[{Gz$@$@NAV Message: received subframe boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvoid boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)T& boost::intrusive_ptr::operator*() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]boost::statechart::detail::reaction_result boost::statechart::state_machine::send_event(const event_base_type&) [with MostDerived = GpsL1CaSubframeFsm; InitialState = gps_subframe_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::event_base_type = boost::statechart::event_base]T& boost::intrusive_ptr::operator*() const [with T = const boost::statechart::event_base]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S11*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S1*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S1]T& boost::intrusive_ptr::operator*() const [with T = gps_subframe_fsm_S1]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = gps_subframe_fsm_S1; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S1; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S2*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S2]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S2; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S2; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S3*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S3]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S3; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S3; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S4*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S4]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S4; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S4; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S5*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S5]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S5; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S5; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S6*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S6]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S6; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S6; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S7*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S7]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S7; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S7; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S8*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S8]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S8; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S8; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S9*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S9]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S9; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S9; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S10*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S10]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S10; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S10; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = GpsL1CaSubframeFsm*; Source = boost::statechart::state_machine]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S11; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S11; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S10; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S10*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S9; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S9*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S8; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S8*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S7; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S7*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S6; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S6*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S5; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S5*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S4; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S4*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S3; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S3*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S2; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S2*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S0*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S0]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = gps_subframe_fsm_S0; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S0; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S0; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S0*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S1; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S1*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S11; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S11]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S11*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = GpsL1CaSubframeFsm; InitialState = gps_subframe_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_gps_word_valid*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_gps_word_invalid*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_gps_word_preamble*; Source = const boost::statechart::event]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@@`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI17Ev_gps_word_validNS0_10event_baseEEE@N5boost10statechart5eventI17Ev_gps_word_validSaIvEEE@@17Ev_gps_word_valid@`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19Ev_gps_word_invalidNS0_10event_baseEEE@ `N5boost10statechart5eventI19Ev_gps_word_invalidSaIvEEE@19Ev_gps_word_invalid@`4N5boost10statechart6detail11rtti_policy17rtti_derived_typeI20Ev_gps_word_preambleNS0_10event_baseEEE@`N5boost10statechart5eventI20Ev_gps_word_preambleSaIvEEE@020Ev_gps_word_preamble@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S0NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S0@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S1NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S1@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S2NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S218GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S218GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S2@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S3NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S318GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S318GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S3@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S4NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S418GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S418GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S4@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S5NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S518GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S518GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S5@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S6NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S618GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S618GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S6@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S7NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S718GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S718GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S7@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S8NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S818GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S818GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S8@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S9NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI19gps_subframe_fsm_S918GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI19gps_subframe_fsm_S918GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@19gps_subframe_fsm_S9@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI20gps_subframe_fsm_S10NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI20gps_subframe_fsm_S1018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI20gps_subframe_fsm_S1018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@20gps_subframe_fsm_S10@=N5boost10statechart6detail11rtti_policy17rtti_derived_typeI20gps_subframe_fsm_S11NS1_10leaf_stateISaIvES2_EEEE@N5boost10statechart12simple_stateI20gps_subframe_fsm_S1118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@pN5boost10statechart5stateI20gps_subframe_fsm_S1118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEE@20gps_subframe_fsm_S11 [[\[b[`[[\[ b[[[\[c[p[[\[m[[Y[[[pc[o[[Y[p[[g[t[[Y[pp\[a[n[[Y[pp\[0j[s[[Y[p`\[`a[m[[Y[p`\[j[Ps[[Y[pP\[`[@o[0[Y[P\[e[`r[0[Y[pP\[i[@a[0[Y[p@\[`[Pn[[Y[p@\[Pk[0u[[Y[p0\[`[o[P[Y[0\[d[s[P[Y[p0\[i[``[P[Y[p \[_[pl[[Y[p \[j[u[[Y[p\[ _[n[p[Y[\[d[r[p[Y[p\[g[_[p[Y[p\[^[`m[[Y[p\[pi[t[[Y[p[[`^[n[[Y[p[[h[@t[[Y[p[[^[l[[Y[p[[Ph[s[[Y[p[[@][][`[Y[[[k[][`[Y[p[[l[][`[Y[/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/viterbi_decoder.ccdo_traceback(): traceback_length= destructor after copy, new refcount = do_tb_and_decode(): requested_decoding_length=decode_continuous(): nbits_requested=decoding length mismatch (continuous decoding): ?, copy, new refcount = assignment, new refcount = ~Prev(metric for (tx_sym=|ry_sym=(max_val at t=decoding_length_mismatch=overstep_length=@t= b= sm= d=indicator metric: decode_block(): LL=decoding length mismatch: .output_rate_ms./observables.dat.flag_averagingpseudorange(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/gps_l1_ca_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l1_ca_observables_cc; typename boost::detail::sp_member_access::type = gps_l1_ca_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@0с{20ObservablesInterface18GpsL1CaObservables@Pссpс[`[0[P[ [@[[[[0PP[/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/galileo_e1_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1_observables_cc; typename boost::detail::sp_member_access::type = galileo_e1_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   20GalileoE1Observables@߁с0߁[P[ [@[[0[[[[0PP[/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/hybrid_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = hybrid_observables_cc; typename boost::detail::sp_member_access::type = hybrid_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   17HybridObservables@с[@\\0\\ [[[[0PP\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/mixed_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = mixed_observables_cc; typename boost::detail::sp_member_access::type = mixed_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21016MixedObservables@с \0 \\ \\ \\\\0PP\gps_l1_ca_observables_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/gps_l1_ca_observables_cc.ccObservables dump enabled Log file: Exception opening observables dump file boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024gps_l1_ca_observables_cc@A@`PmxN5boost6detail17sp_counted_impl_pI24gps_l1_ca_observables_ccEE \\uAUU UUUpUUU0A0iA UA\A0qAjA A@!\"\ "\kN!\"\>?S3Q@ALAgalileo_e1_observables_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/galileo_e1_observables_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   25galileo_e1_observables_cc@A@PmxN5boost6detail17sp_counted_impl_pI25galileo_e1_observables_ccEE %\0'\uAUU UUUpUUU0A0iA UA/\A0qAjA A@@4\p4\4\kNP4\`4\hybrid_observables_ccgnss_synchro set size=ref_PRN_rx_time_ms [ms] = tracking GNSS System has PRN start at= [ms], delta_rx_time_ms = [ms], travel_time = , pseudorange[m] = /home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.ccd_TOW_hybrid_reference [ms] = [ms], d_TOW_at_current_symbol = [ms], d_TOW_hybrid_at_current_symbol = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   21hybrid_observables_cc@"A@`"PmxN5boost6detail17sp_counted_impl_pI21hybrid_observables_ccEE "6\08\uAUU UUUpUUU0A0iA UA?\A0qAjA A@"@I\pI\I\kNPI\`I\mixed_observables_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21020mixed_observables_cc@.A@ /PmxN5boost6detail17sp_counted_impl_pI20mixed_observables_ccEE.K\M\uAUU UUUpUUU0A0iA UAT\A0qAjA A/ Y\PY\`Y\kN0Y\@Y\./pvt.dat./nmea_pvt.nmea/dev/tty1.averaging_depth.display_rate_ms.flag_nmea_tty_port.nmea_dump_filename.nmea_dump_devnamepvt(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/adapters/gps_l1_ca_pvt.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l1_ca_pvt_cc; typename boost::detail::sp_member_access::type = gps_l1_ca_pvt_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@={12PvtInterface10GpsL1CaPvt@===[\P\\`i\i\Pi\0[\Y\Y\Y\0PP@i\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/adapters/galileo_e1_pvt.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1_pvt_cc; typename boost::detail::sp_member_access::type = galileo_e1_pvt_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   12GalileoE1Pvt@ K= Kk\l\y\y\y\`k\i\i\j\0PPpy\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/adapters/hybrid_pvt.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = hybrid_pvt_cc; typename boost::detail::sp_member_access::type = hybrid_pvt_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   9HybridPvt@ X= X|\|\\\\{\z\z\0z\0PP\/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_time.h<> to gps time: time_stamp_sec=/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.ccException opening PVT dump file Day of month value is out of range 1..31Day of month is not valid for yearYear is out of valid range: 1400..10000Month number is out of range 1..12<> new time relation: i_gps_week=<> create RELATIVE time (invalid relation): time_stamp_sec=Relating an already related Sbas_Time object is not possibleSbas_Time object state undefinedSbas_Time object state not known gps_week= gps_sec=not-a-date-time+infinity-infinitygps_l1_ca_pvt_cc.kml_raw.dat_ls_pvt.datPVT dump enabled Log file: d_delta_sec= UTC is Lat = [deg], Long = [deg], Height= Dilution of Precision at VDOP = TDOP = GDOP = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@f8N5boost9gregorian16bad_day_of_monthE@0g8N5boost9gregorian8bad_yearE@pg8N5boost9gregorian9bad_monthE16gps_l1_ca_pvt_cc@gAP6@hflxN5boost16exception_detail19error_info_injectorINS_9gregorian16bad_day_of_monthEEEP6igmxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian16bad_day_of_monthEEEEE@iPmxN5boost6detail17sp_counted_impl_pI16gps_l1_ca_pvt_ccEEP6@jglxN5boost16exception_detail19error_info_injectorINS_9gregorian8bad_yearEEEP6kimxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian8bad_yearEEEEEP6kPglxN5boost16exception_detail19error_info_injectorINS_9gregorian9bad_monthEEEP6l`kmxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE@mkxSt23_Sp_counted_ptr_inplaceI11Kml_PrinterSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@mkxSt23_Sp_counted_ptr_inplaceI12Nmea_PrinterSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@nkxSt23_Sp_counted_ptr_inplaceI16gps_l1_ca_ls_pvtSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@nkxSt23_Sp_counted_ptr_inplaceI13Rinex_PrinterSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEf \0\Ag\\APg\ж\Ag\@\uAUU UUUpUUU0A0iA UA\A0qAjA Ag`\\Ag\\qq8h\\A\p\h\\h\P\\\pi\0\\kN\ \i \`\AiP\\rs8j`\p\A\\j\\j\`\\\`k\\A`k\P\sHt8 l\\Ap\\ l@\P\ lp\p\P\`\l\@\P\\P\Pm\P\\\\m\`\p\\\`nе\p\`\\з\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.ccgalileo_e1_pvt_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   17galileo_e1_pvt_cc@A@PmxN5boost6detail17sp_counted_impl_pI17galileo_e1_pvt_ccEE@@kxSt23_Sp_counted_ptr_inplaceI17galileo_e1_ls_pvtSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE\ \uAUU UUUpUUU0A0iA UA\A0qAjA A@ ] ] ]kN` ]p ] P ] ] ] ] ]/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cchybrid_pvt_cc UTC using observations is Lat = observations is HDOP = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   13hybrid_pvt_cc@@A@PmxN5boost6detail17sp_counted_impl_pI13hybrid_pvt_ccEE@kxSt23_Sp_counted_ptr_inplaceI13hybrid_ls_pvtSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEP]]uAUU UUUpUUU0A0iA UA`#]A0qAjA Ap6]7]7]kN6]7]6] 7]@7]07]P7]inv(): matrix appears to be singular/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.ccFailed to approximate h with desired precision. h-oldh= The computation of geodetic coordinates did not convergedeque::_M_range_check: __n (which is %zu)>= this->size() (which is %zu)PVT lib dump enabled Log file: Exception opening PVT lib dump file solve(): number of rows in the given objects must be the sameinv(): given matrix is not squareMat::col(): index out of boundstrace(): matrix must be square sizedException writing PVT LS dump file Mat::submat(): indices out of bounds or incorrectly usedsolve(): solution not found[matrix size: ] matrix multiplicationaddition(new)ECEF satellite SV ID= X= [m] Y= [m] Z= [m] PR_obs=No ephemeris data for SV (new)PVT: valid observations=satpos=(new)Position at TOW= in ECEF (X,Y,Z) = (new)Position at Apply tropospheric correctionbooltropo]ȑ]]]]]]]]]]x]p]h]`]X]P]PC]C]C]C]C]C]C]C]C]C]C]C]C]xC]pC]hC]`C] L]N]N]N]N]N]N]N]N]N]N]xN]pN]hN]`N]XN]PN]2N3Nw3No3Ng3N_3NW3NO3NG3N?3N73N/3N'3N3N3N3N3NHt]W}]O}]G}]?}]7}]/}]'}]}]}]}]}]|]|]|]|]|]s]}]}]}]}]}]}]}]}]}]}]}]}]{}]s}]k}]c}]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210V&NN&ND&N:&N0&N&&N&N&N&N%N%N%N%N%N%N%N%NС]X]P]H]@]8]0](] ]]]]]]]]]f6N7N7N7N7N7Nw7No7Ng7N_7NW7NO7NG7N?7N77N/7N'7N]]]]]߹]׹]Ϲ]ǹ]]]]]]]]]]]]}]u]m]e]]]U]M]E]=]5]-]%]]]]]]]]]]y]q]i]a]Y]Q]I]A]9]1]p]G]?]7]/]']]]]]]]]]]]]?Nb>NZ>NR>NJ>NB>N:>N2>N*>N">N>N>N >N>N=N=NFNGNGNGNGNGNwGNoGNgGN_GNWGNOGNGGN?GN7GN/GN'GNINOJNGJN?JN7JN/JN'JNJNJNJNJNININININININ?TXATXATXA#+k?8wk?v8gIwk?!6Zwk?(Zwk?-q=f@(-DT! @#B ;cܥL@|=Y-C6?-C6$>s[ק?mtr@DRFߑ?V@fffffq@@m@@әe4@*:H?әe@y`*BY?9;|F>n#@e'֌@333333@333333?-@6$I?z8"@>yX5?@cG_>@Pr@@j@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/galileo_e1_ls_pvt.ccGalileo PVT: valid observations=Galileo RX time at Galileo Position at TOW=Galileo Position at ]h]`]X]P]H]@]8]0](] ]]]]]]]OKN?NN7NN/NN'NNNNNNNNNNMNMNMNMNMNMNMNMN^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^w ^o ^g ^(^c^[^S^K^C^;^3^+^#^^^ ^^ ^ ^ ^ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/hybrid_ls_pvt.ccHYBRID PVT: valid observations=HYBRID Position at TOW=Hybrid Position at 1^2^2^2^2^1^1^1^1^1^1^1^1^1^1^1^1^SNVNVNVNVNVNVNVNwVNoVNgVN_VNWVNOVNGVN?VN7VNa^_r^Wr^Or^Gr^?r^7r^/r^'r^r^r^r^r^q^q^q^q^a^r^r^r^r^r^r^r^r^r^r^r^r^r^{r^sr^kr^ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/kml_printer.cc GNSS-SDR Receiver position log file created at GNSS-SDR PVT01boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210/usr/include/boost/token_iterator.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/rinex_printer.cc----|---1|0---|---2|0---|---3|0---|---4|0---|---5|0---|---6|0---|---7|0---|---8|Specifies the RINEX version (2.11 or 3.02)could not convert calendar time to UTC timeDay of year value is out of range 1..366could not convert calendar time to local time (must be 2.11 or 3.02). Using 3.02The RINEX Navigation file header has been updated with UTC and IONO info.Discontinued reception of Frame 2 and 3Signal Component currently in TestNavigation data without guaranteeCould not parse time zone name/usr/include/boost/date_time/local_time/posix_time_zone.hppCould not parse DST begin timeGALILEO NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDRGPS NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDRGNSS NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDRBLANK OR G = GPS, R = GLONASS, E = GALILEO, M = MIXEDG = GPS R = GLONASS E = GALILEO S = GEO M = MIXEDGPS OBSERVATION DATA FILE GENERATED BY GNSS-SDRGALILEO OBSERVATION DATA FILE GENERATED BY GNSS-SDRMIXED (GPS/GALILEO) OBSERVATION DATA FILE GENERATED BY GNSS-SDRBROADCAST DATA FILE FOR GEO SV, GENERATED BY GNSS-SDRvalid_basic_string::erase+basic_string::insertBad defined RINEX line: characters (must be 80)L1 0SBAOffset out of range: map::atError deleting temporary file3.02RINEX_version%.*gWeekday is out of range 0..6tm unable to handle not-a-date-time value-infinity date value+infinity date valuea special date valueGSDRRINEX_FILE_TYPE_OBSRINEX_FILE_TYPE_GPS_NAVRINEX_FILE_TYPE_METRINEX_FILE_TYPE_GLO_NAVRINEX_FILE_TYPE_GAL_NAVRINEX_FILE_TYPE_MIXED_NAVRINEX_FILE_TYPE_GEO_NAVRINEX_FILE_TYPE_SBASRINEX_FILE_TYPE_CLKRINEX_FILE_TYPE_SUMMARY141517181920212223SBAS payloadBeidouMixedGPS_L1_CAGPS_L1_P1PGPS_L1_Z_TRACKING1WGPS_L1_Y1YGPS_L1_M 1MGPS_L1_CODELESS1NGPS_L2_CA2CL2_SEMI_CODELESS2DGPS_L2_L2CMGPS_L2_L2CL2LGPS_L2_L2CML2XGPS_L2_P2PGPS_L2_Z_TRACKING2WGPS_L2_Y2YGPS_L2_M2MGPS_L2_codeless2NGPS_L5_I5IGPS_L5_Q5QGPS_L5_IQGLONASS_G1_CAGLONASS_G1_PGLONASS_G2_CAGLONASS_G2_PGALILEO_E1_A1AGALILEO_E1_BGALILEO_E1_CGALILEO_E1_BC1XGALILEO_E1_ABC1ZGALILEO_E5a_IGALILEO_E5a_QGALILEO_E5aIQGALILEO_E5b_I7IGALILEO_E5b_Q7QGALILEO_E5b_IQ7XGALILEO_E5_I8IGALILEO_E5_Q8QGALILEO_E5_IQ8XGALILEO_E56_A6AGALILEO_E56_B6B6CGALILEO_E56_BC6XGALILEO_E56_ABC6ZSBAS_L1_CASBAS_L5_ISBAS_L5_QSBAS_L5_IQCOMPASS_E2_I2ICOMPASS_E2_Q2QCOMPASS_E2_IQCOMPASS_E5b_ICOMPASS_E5b_QCOMPASS_E5b_IQCOMPASS_E6_I6ICOMPASS_E6_Q6QCOMPASS_E6_IQPSEUDORANGECARRIER_PHASEDOPPLERSIGNAL_STRENGTHPSEUDORANGE_CA_v2PSEUDORANGE_P_v2CARRIER_PHASE_CA_v2DOPPLER_v2SIGNAL_STRENGTH_v2GPS_L1_CA_v23.012.112.10Unknown RINEX version GALIONOSPHERIC CORRTIME SYSTEM CORRLEAP SECONDSEND OF HEADERGAL GAUTGPGATIME OF FIRST OBSION ALPHAION BETADELTA-UTCDELTA-UTC: A0,A1,T,WGPSAGPSBGPUTIIR-MIIFIIIAIIR1000000001Signal will be out of serviceSignal out of service000000000Adjustment out of range: Could not parse DST end timeUNKNOWN USERJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECN: GNSS NAV DATAE: GALILEORINEX VERSION / TYPEPGM / RUN BY / DATECOMMENT0.0.6.git--GNSS-SDR VERSION See http://gnss-sdr.orgN: GPS NAV DATAG: GPSM: MIXEDOBSERVATION DATADEFAULT MARKER NAMECTTCOBSERVER / AGENCYSoftware ReceiverREC # / TYPE / VERSAntenna numberAntenna typeANT # / TYPEAPPROX POSITION XYZANTENNA: DELTA H/E/NWAVELENGTH FACT L1/2SYS / # / OBS TYPES# / TYPES OF OBSERVDBHZSIGNAL STRENGTH UNITB SBAS DATAREC INDEX/TYPE/VERSNo Feb 29th in given year of boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = boost::date_time::time_zone_base; typename boost::detail::sp_member_access::type = boost::date_time::time_zone_base*]const Type& boost::token_iterator::dereference() const [with TokenizerFunc = boost::char_separator >; Iterator = __gnu_cxx::__normal_iterator >; Type = std::basic_string]void boost::token_iterator::increment() [with TokenizerFunc = boost::char_separator >; Iterator = __gnu_cxx::__normal_iterator >; Type = std::basic_string]boost::local_time::posix_time_zone_base::posix_time_zone_base(const string_type&) [with CharT = char; boost::local_time::posix_time_zone_base::string_type = std::basic_string]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) consttypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = boost::date_time::dst_day_calc_rule; typename boost::detail::sp_member_access::type = boost::date_time::dst_day_calc_rule*]virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210no-dststd_abbrevstd_name@8N5boost9gregorian11bad_weekdayE@@8N5boost9gregorian15bad_day_of_yearE9N5boost9date_time14time_zone_baseINS_10posix_time5ptimeEcEE9N5boost9date_time17dst_day_calc_ruleINS_9gregorian4dateEEE@@8N5boost10local_time10bad_offsetE@8N5boost10local_time14bad_adjustmentE9N5boost9date_time20year_based_generatorINS_9gregorian4dateEEE@@N5boost9date_time17nth_kday_of_monthINS_9gregorian4dateEEE@N5boost9date_time17day_calc_dst_ruleINS_10local_time18nth_kday_rule_specEEE@@N5boost9date_time12partial_dateINS_9gregorian4dateEEE@N5boost9date_time17day_calc_dst_ruleINS_10local_time22partial_date_rule_specEEE@@pN5boost10local_time20posix_time_zone_baseIcEEP6@dlxN5boost16exception_detail19error_info_injectorISt13runtime_errorEEP6mxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEEP6@8lxN5boost16exception_detail19error_info_injectorISt12out_of_rangeEEP6mxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt12out_of_rangeEEEEP69lxN5boost16exception_detail19error_info_injectorISt16invalid_argumentEEP6`mxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt16invalid_argumentEEEEP6@ lxN5boost16exception_detail19error_info_injectorINS_10local_time10bad_offsetEEEP6mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10local_time10bad_offsetEEEEEP6plxN5boost16exception_detail19error_info_injectorINS_10local_time14bad_adjustmentEEEP6mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10local_time14bad_adjustmentEEEEE@@PmxN5boost6detail17sp_counted_impl_pINS_10local_time20posix_time_zone_baseIcEEEEP6lxN5boost16exception_detail19error_info_injectorINS_9gregorian11bad_weekdayEEEP6mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian11bad_weekdayEEEEEP6 lxN5boost16exception_detail19error_info_injectorINS_9gregorian15bad_day_of_yearEEEP6@ mxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian15bad_day_of_yearEEEEE@PmxN5boost6detail17sp_counted_impl_pINS_9date_time17day_calc_dst_ruleINS_10local_time18nth_kday_rule_specEEEEE@PmxN5boost6detail17sp_counted_impl_pINS_9date_time17day_calc_dst_ruleINS_10local_time22partial_date_rule_specEEEEEbbA 0b@bA bbAp`bpbA bPbsb`'bbpbub0*bpub*bb@b`bbb`bpcpbPcPbb bbbbbb0bbbbGb4b0blAp5b0bX8 9b2blA`fb@b :b 3b Pgbb:b03b3b0bA4b0b8.b2bA`eb`b /b2bPfb0b0/b2b`5b@3bA`@6bp3bH8 :b3bA`dbib ;b3b Pebib;b3b8b/bA8b/b8::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210./output.datfile sink(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/file_output_filter.cc Unrecognized item type. Using short.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)16FileOutputFilter@{00:c:cAcAcAcP9cp8c8c9c0PPnull_sink(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/null_sink_output_filter.ccRight block of a signal sink should not be retrievedboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::null_sink; typename boost::detail::sp_member_access::type = gr::blocks::null_sink*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)20NullSinkOutputFilter@{PDcDc`IcIcPIcCc0Bc@BcCc0PPtrue15StringConverter9pUcUc/usr/include/boost/serialization/singleton.hpp! detail::singleton_wrapper< T >::m_is_destroyed/usr/include/boost/serialization/factory.hpp/usr/include/boost/serialization/extended_type_info_typeid.hppe %d %d %d %d %d %d %d %d %d %d/home/carles/package/gnss-sdr-0.0.6/src/core/libs/gnss_sdr_supl_client.ccFailed to save UTC model, map is emptyFailed to save IONO model, map is emptyFailed to save Ref Time, map is emptyFailed to save Ref Location, map is emptyFailed to save Ephemeris, map is emptyT %ld %ld %ld %ld U %d %d %d %d %d %d %d %d L %f %f %d I %d %d %d %d %d %d %d %d E %d %d %d %d %d %d %dA %d a %d %d %d %d %d Q %d %d q %d %d %d 0 0 0 0 GNSS-SDR_utc_mapSaved UTC Model dataGNSS-SDR_iono_mapSaved IONO Model dataGNSS-SDR_ref_time_mapSaved Ref Time dataGNSS-SDR_ref_location_mapSaved Ref Location dataGNSS-SDR_ephemeris_mapLoaded Ephemeris map dataFile: Saved Ephemeris map dataLoaded UTC model dataLoaded IONO model dataLoaded Ref Time dataLoaded Ref Location datad_alpha0d_alpha1d_alpha2d_alpha3d_beta0d_beta1d_beta2d_beta3item_versionvalidlatlond_TOWd_Weekd_tv_secd_tv_usecd_A1d_A0d_t_OTi_WN_Td_DeltaT_LSi_WN_LSFi_DNd_DeltaT_LSFitemi_satellite_PRNd_IODE_SF2d_IODE_SF3d_Crsd_Delta_nd_M_0d_Cucd_e_eccentricityd_Cusd_sqrt_Ad_Toed_Tocd_Cicd_OMEGA0d_Cisd_i_0d_Crcd_OMEGAd_OMEGA_DOTd_IDOTi_code_on_L2i_GPS_weekb_L2_P_data_flagi_SV_accuracyi_SV_healthd_TGDd_IODCi_AODOb_fit_interval_flagd_spare1d_spare2d_A_f0d_A_f1d_A_f2b_integrity_status_flagb_alert_flagb_antispoofing_flagc˻cccccccPcicRckcc c9c"c;cTcc cc c$ccپc¿cۿccccccc`cycbc{cc0cIc2cKcdccccc4cccccccccccpccrccc@cYcBc[ctcc)cc+cDcccstatic T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Ephemeris]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Ref_Location]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Ref_Time]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Iono]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Utc_Model]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer >]ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210@r{N5boost13serialization16singleton_moduleE@@srN5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi13Gps_EphemerisEEEEE@srN5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS4_EEEEEEE@trN5boost13serialization9singletonINS0_25extended_type_info_typeidI13Gps_Utc_ModelEEEE@urN5boost13serialization9singletonINS0_25extended_type_info_typeidI8Gps_IonoEEEE@urN5boost13serialization9singletonINS0_25extended_type_info_typeidI12Gps_Ref_TimeEEEE9vN5boost7archive6detail18interface_oarchiveINS0_12xml_oarchiveEEE@vrN5boost13serialization9singletonINS0_25extended_type_info_typeidI16Gps_Ref_LocationEEEE9wN5boost7archive21basic_text_oprimitiveISoEE@wrN5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi13Gps_Utc_ModelEEEEE@xrN5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi8Gps_IonoEEEEE@xrN5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS4_EEEEEEE@@yrN5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi12Gps_Ref_TimeEEEEE@yrN5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS4_EEEEEEE@zrN5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi16Gps_Ref_LocationEEEEE@@{rN5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS4_EEEEEEE@|rN5boost13serialization9singletonINS0_25extended_type_info_typeidI13Gps_EphemerisEEEE9|N5boost7archive6detail18interface_iarchiveINS0_12xml_iarchiveEEE@}rN5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS4_EEEEEEE9}N5boost7archive21basic_text_iprimitiveISiEE9}N5boost7archive6detail17shared_ptr_helperEP6`~duN5boost7archive6detail15common_oarchiveINS0_12xml_oarchiveEEE@~ ~N5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEEEP6@v~N5boost7archive17xml_oarchive_implINS0_12xml_oarchiveEEE@N5boost7archive12xml_oarchiveEP66`|N5boost7archive6detail15common_iarchiveINS0_12xml_iarchiveEEE@`N5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEEEP6}@N5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEEEP6`}`N5boost7archive12xml_iarchiveE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS5_EEEEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS5_EEEEE@@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS5_EEEEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS5_EEEEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS5_EEEEE@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS5_EEEEE@@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveE13Gps_Utc_ModelEE@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveE8Gps_IonoEE@@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveE12Gps_Ref_TimeEE@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveE16Gps_Ref_LocationEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS8_EEEEEEE@0N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS8_EEEEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS8_EEEEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS8_EEEEEEE@@pN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS8_EEEEEEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS8_EEEEEEEP6P>`x N5boost13serialization25extended_type_info_typeidISt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS3_EEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE13Gps_Utc_ModelEEEEP6P>y N5boost13serialization25extended_type_info_typeidISt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS3_EEEEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE8Gps_IonoEEEEP6P>z N5boost13serialization25extended_type_info_typeidISt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS3_EEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE12Gps_Ref_TimeEEEEP6P>| N5boost13serialization25extended_type_info_typeidISt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS3_EEEEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE16Gps_Ref_LocationEEEEP6P>s N5boost13serialization25extended_type_info_typeidISt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS3_EEEEEP6P>@t N5boost13serialization25extended_type_info_typeidI13Gps_Utc_ModelEEP6`P>t N5boost13serialization25extended_type_info_typeidI8Gps_IonoEEP6P>Pu N5boost13serialization25extended_type_info_typeidI12Gps_Ref_TimeEEP6P>Pv N5boost13serialization25extended_type_info_typeidI16Gps_Ref_LocationEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS5_EEEEEEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS5_EEEEEEE@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS5_EEEEEEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS5_EEEEEEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS5_EEEEEEE9St3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS0_EEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI13Gps_Utc_ModelEEEE9St3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS0_EEE@@ N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI8Gps_IonoEEEE9St3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS0_EEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI12Gps_Ref_TimeEEEE9St3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS0_EEE@@`N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI16Gps_Ref_LocationEEEE9St3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS0_EEE913Gps_Utc_Model908Gps_Iono9P12Gps_Ref_Time9p16Gps_Ref_Location@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi13Gps_EphemerisEEE@@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi13Gps_Utc_ModelEEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi8Gps_IonoEEE@@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi12Gps_Ref_TimeEEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi16Gps_Ref_LocationEEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi13Gps_EphemerisEEEEE@ N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi13Gps_Utc_ModelEEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi8Gps_IonoEEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi12Gps_Ref_TimeEEEEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi16Gps_Ref_LocationEEEEE@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveESt4pairIKi13Gps_EphemerisEEEP6P>r N5boost13serialization25extended_type_info_typeidISt4pairIKi13Gps_EphemerisEEEP6P>0w N5boost13serialization25extended_type_info_typeidISt4pairIKi13Gps_Utc_ModelEEEP6@P>w N5boost13serialization25extended_type_info_typeidISt4pairIKi8Gps_IonoEEEP6P>y N5boost13serialization25extended_type_info_typeidISt4pairIKi12Gps_Ref_TimeEEEP6P>@z N5boost13serialization25extended_type_info_typeidISt4pairIKi16Gps_Ref_LocationEEE@@ФN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveESt4pairIKi13Gps_EphemerisEEEEE@`N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi13Gps_EphemerisEEEEE@ N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi13Gps_Utc_ModelEEEEE@ঃN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi8Gps_IonoEEEEE@@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi12Gps_Ref_TimeEEEEE@`N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi16Gps_Ref_LocationEEEEE9St4pairIKi13Gps_EphemerisE9St4pairIKi13Gps_Utc_ModelE9St4pairIKi8Gps_IonoE9 St4pairIKi12Gps_Ref_TimeE9PSt4pairIKi16Gps_Ref_LocationE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveE13Gps_EphemerisEE@@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveE13Gps_Utc_ModelEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveE8Gps_IonoEE@@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveE12Gps_Ref_TimeEE@3N5boost7archive6detail11oserializerINS0_12xml_oarchiveE16Gps_Ref_LocationEE@@pN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE13Gps_EphemerisEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE13Gps_Utc_ModelEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE8Gps_IonoEEEE@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE12Gps_Ref_TimeEEEE@@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE16Gps_Ref_LocationEEEEP6P>{ N5boost13serialization25extended_type_info_typeidI13Gps_EphemerisEE@`=N5boost7archive6detail11iserializerINS0_12xml_iarchiveE13Gps_EphemerisEE@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI13Gps_EphemerisEEEE@PN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE13Gps_EphemerisEEEE9P13Gps_Ephemerisccccpc`cPc@cccccccpc`cPc@ccc cccPccpc c@ccдcd c0cЦc@c00c@c@dcccccc0dcЫcccc c dccccpccd`cpccc@cЭcP d c0c@cPc@c0c@c ccccccccccccЪccc cc`cpccccccc c0c@cPccccd c0cЦc@c`cc@dccccеcc0dcЫccc`@c`c dcccc cжcd`cpcccccP d c0c@cPc@c0mAЂAаccccpcp`cc cccccc@0mAЂA0ccccp0dЮccccccЪcc0mAЂAc`ccc@0dp@c`cc`cpcccc@0mAЂAccc@c0dcЯcc c0c@cPcc0mAЂAPcccpc/d0mAЂAcPcccc 0mAЂA`c0cccc0mAЂAccccЬc`0mAЂA ccc0cc0mAЂAccccpcЖ0mAЂAc@cccp0d0mAЂAcpccc@0dP0mAЂA ccc@c0d0mAЂAc`ccpc/d 0mAЂApccccc0mAЂA@ccccc0mAЂAc0cccЬc0mAЂAccc0cccc0!dcc cc `cpcccЩc0ccзcc`ccc@cc@cPc0c`cpcPccccd0c@c`cPc c@c0!dcc ccСccccЩc0ccc c`ccc@cc@pcc0c`cpcPccccd0c@c`cPcФccdccc cc`0mAЂAccc`cc 0mAЂAc@ccccঃ0mAЂAccccc0mAЂAccccpc`0mAЂA@cpcc c`c c@cdccc ccЩ0mAЂAc cc`ccp0mAЂA0ccccc00mAЂA`ccccc0mAЂAcPcccpc0mAЂAccc c`cp c0c(dcШcpccccccccccc c`cpcccpccc0c@ccPccccccc cPcpc(dcШcpccccccccc0cPc c`cpccc@ccc0c@ccPcc0ccccc c0mAЂApcccPccP`cpc /dcЧccc0cе0mAЂAcccPccpcc /dcЧccc0c><@>p>@@@>=>>@?>>0@?=<?-DT!Y=-DT!> >=7275>>ll@ll@0123456789ABCDEF st->size <= _nssel->left >= 0ctx->left >= 0ctx->context > 0val > 0 &<>OCTET STRINGOCTET_STRING/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OCTET_STRING.ctype_variant != ASN_OSUBV_ANY || tag_mode != -1!(maySave & 0x07) || !sizeinunitswQdwQdQdwQdwQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdwQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQd`Qd`Qd`Qd`Qd`Qd`Qdfdfdfdfdfdfdfdfdfdfd"ed@ed"ed"ed"ed"ed"edfdfdfdfdfdfd"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed"ed`fd`fd`fd`fd`fd`fdOCTET_STRING_encode_uperOCTET_STRING__convert_entrefsOCTET_STRING__convert_binaryOCTET_STRING__convert_hexadecimalOCTET_STRING_encode_derOCTET_STRING_decode_ber߃߃߃#߃*߃1߃8߃?߃F߃S~L߃R߃X߃Z߃`߃f߃m߃t߃{߃߃߃߃߃߃߃߃߃߃߃߃߃߃߃߃%lu%ld%ld (%s)<%s/>INTEGER/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/INTEGER.cret > 0 && (size_t)ret < scrsize0d0ddd0ddddddddddddddddddd0ddddddddddddddddsdsdsdsdsdsdsdsdsdsdddۆddddd͆d͆d͆d͆d͆d͆ddddddddddddddddddddddddddd͆d͆d͆d͆d͆d͆dPdPdddPdddddPddd~dINTEGER__dump/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PDU.c%s: value not given (%s:%d)%s: constraint failed (%s:%d)referenceNumbercomponent/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_decoder.crval.consumed == pd.moveduper_decode/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_decoder.ctagno < td->tags_counttagno >= 0ber_check_tags/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/der_encoder.cec.encoded == (ssize_t)(buffer_size - arg.left)der_encode_to_buffer[%s%u]UNIVERSAL APPLICATION PRIVATE T~Pd ddPdPdHdPdHdPdHddPdPdHdPdHd< 0dddddxer_skip_unknownxer_decode_generalxer_next_tokendPdddd dddddpd%s: Invalid time format: %s (%s:%d)/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTCTime.c%04d-%02d-%02d %02d:%02d:%02d (GMT)ret > 0 && ret < (int)sizeof(buf)gt->size >= 2UTCTimeasn_time2UTUTCTime_print/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_codecs_prim.cst->buf || st->size == 0der_encode_primitive/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ULP-PDU.cULP-PDUmessageerval.structure_ptr == &tmp/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NativeInteger.cret > 0 && (size_t)ret < sizeof(scratch)NativeInteger_printNativeInteger_encode_derdddddXdXdXdXdXdXdXdXdXdXddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddasn_time2GT_fracGeneralizedTime_print/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GeneralizedTime.c!((tm_s).tm_gmtoff)%04d%02d%02d%02d%02d%02d%+03ld%02ldGeneralizedTimeSLPAddressiPAddressfQDNUlpMessagemsSUPLINITmsSUPLSTARTmsSUPLRESPONSEmsSUPLPOSINITmsSUPLPOSmsSUPLENDmsDUMMY2msDUMMY3positionstatusCodesETCapabilitiesrequestedAssistDatalocationIdsUPLPOSRequestedAssistDataalmanacRequestedutcModelRequestedionosphericModelRequesteddgpsCorrectionsRequestedreferenceLocationRequestedreferenceTimeRequestedrealTimeIntegrityRequestednavigationModelRequestednavigationModelDataacquisitionAssistanceRequested/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FQDN.cFQDN-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_CHOICE.c%s: mandatory CHOICE element %s absent (%s:%d)%s: no CHOICE element given (%s:%d)_fetch_present_idx(st, specs->pres_offset, specs->pres_size) == 0pres_size != sizeof(int)tag_mode == 0tag == 0CHOICE_decode_xerCHOICE_outmost_tag_fetch_present_idx_set_present_idxFALSETRUEBOOLEANRRLP-ComponentmsrPositionReqmsrPositionRspassistanceDataassistanceDataAckprotocolErrorProtocolErrorerrorCauseextensionContainerrel-5-ProtocolError-Extension/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/XNavigationModel.cXNavigationModelgpsWeekgpsToenSATtoeLimitsatInfotimestamppositionEstimatevelocitySatelliteInfo/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PositionEstimate.cPositionEstimatelatitudeSignlatitudelongitudeconfidencealtitudeInfouncertaintySemiMajoruncertaintySemiMinororientationMajorAxisnorthsouthposPayLoadposMethodsLPAddresssETAuthKeykeyIdentity4StatusCodeunspecifiedsystemFailureunexpectedMessagedataMissingunexpectedDataValueposMethodFailureposMethodMismatchposProtocolMismatchtargetSETnotReachableversionNotSupportedresourceShortageinvalidSessionIdnonProxyModeNotSupportedproxyModeNotSupportedpositioningNotPermittedauthNetFailureauthSuplinitFailureconsentDeniedByUserconsentGrantedByUser/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosPayLoad.cPosPayLoadtia801payloadrrcPayloadrrlpPayload/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Ver.cVer/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IPAddress.cIPAddressipv4Addressipv6AddresssetSessionIDslpSessionIDnotificationqoPsLPModemACkeyIdentityDUMMY/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Version.cVersionmajservindcontrol_size == er.encodedPePeQePePepOePepOeSET_OF_encode_xer/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SET_OF.cPosMethodagpsSETassistedagpsSETbasedagpsSETassistedprefagpsSETbasedprefautonomousGPSaFLTeCIDeOTDoTDOAnoPosition%s: value byte %ld (%d) not in VisibleString alphabet (%s:%d)/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/VisibleString.cVisibleString/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/AltitudeInfo.cAltitudeInfoaltitudeDirectionaltitudealtUncertaintyheightSETCapabilitiesposTechnologyprefMethodposProtocolPrefMethodagpsSETassistedPreferredagpsSETBasedPreferrednoPreference/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity4.cKeyIdentity4LocationIdcellInfostatusENUMERATED/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MAC.cMAC001101000101011001111000101010111100110111101111BIT STRINGBIT_STRING/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/BIT_STRING.c%s: invalid padding byte (%s:%d)y҂ Xx { /home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Notification.cNotificationnotificationTypeencodingTyperequestorIdrequestorIdTypeclientNameclientNameType/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETAuthKey.cSETAuthKeyshortKeylongKeyRel-5-ProtocolError-Extensionextended-reference/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Extended-reference.cExtended-referencesmlc-codetransaction-IDMsrPosition-RspmultipleSetsreferenceIdentityotd-MeasureInfolocationInfogps-MeasureInfolocationErrorrel-98-MsrPosition-Rsp-Extensionrel-5-MsrPosition-Rsp-ExtensionRel-5-MsrPosition-Rsp-Extensionotd-MeasureInfo-5-ExtulPseudoSegIndreferenceAssistDatamsrAssistDatasystemInfoAssistDatagps-AssistDatamoreAssDataToBeSentrel5-AssistanceData-Extensionrel98-AssistanceData-ExtensionMsrPosition-ReqpositionInstructrel98-MsrPosition-Req-extensionrel5-MsrPosition-Req-extensionRel98-MsrPosition-Req-ExtensiongpsTimeAssistanceMeasurementRequestrel98-Ext-ExpOTDgpsReferenceTimeUncertaintyReferenceAssistDatabcchCarrierbsictimeSlotSchemebtsPositionNULLGPS-AssistDatacontrolHeaderRel5-AssistanceData-ExtensionReferenceIdentityrefBTSListExtensionContainerPositionInstructmethodTypepositionMethodmeasureResponseTimeuseMultipleSetsenvironmentCharacter/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NativeEnumerated.cer.encoded > 0 && (size_t)er.encoded < srcsizeNativeEnumerated_encode_xerLocationErrorlocErrorReasonadditionalAssistanceDataRel5-MsrPosition-Req-ExtensionMethodTypemsAssistedmsBasedmsBasedPrefmsAssistedPref/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocationInfo.cLocationInforefFramegpsTOWfixTypeposEstimateErrorCodesunDefinedmissingComponetincorrectDatamissingIEorComponentElementmessageTooShortunknowReferenceNumber/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BCCHCarrier.cBCCHCarrierRel98-AssistanceData-ExtensionUlPseudoSegIndfirstOfManysecondOfManyControlHeaderreferenceTimerefLocationdgpsCorrectionsnavigationModelionosphericModelutcModelalmanacacquisAssistrealTimeIntegrityAdditionalAssistanceDatagpsAssistanceDataganssAssistanceDataAcquisAssisttimeRelationacquisListEnvironmentCharacterbadAreanotBadAreamixedAreaGPS-MeasureInfogpsMsrSetListTimeSlotSchemeequalLengthvariousLengthLocErrorReasonnotEnoughBTSsnotEnoughSatseotdLocCalAssDataMissingeotdAssDataMissinggpsLocCalAssDataMissinggpsAssDataMissingmethodNotSupportednotProcessedrefBTSForGPSNotServingBTSrefBTSForEOTDNotServingBTSnotEnoughGANSSSatsganssAssDataMissingrefBTSForGANSSNotServingBTSRefLocationthreeDLocationRel-98-MsrPosition-Rsp-Extensionrel-98-Ext-MeasureInfotimeAssistanceMeasurementsotd-MeasureInfo-R98-Ext/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Almanac.cAlmanacalamanacWNaalmanacList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSReferenceTimeUncertainty.cGPSReferenceTimeUncertaintyRel98-Ext-ExpOTDmsrAssistData-R98-ExpOTDsystemInfoAssistData-R98-ExpOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Accuracy.cAccuracy/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SatelliteInfoElement.cSatelliteInfoElementsatIdiODEVelocityhorvelhorandvervelhorveluncerthorandveruncertCellInfogsmCellwcdmaCell/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity.cKeyIdentity/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SetSessionID.cSetSessionIDsessionIdsetIdSLPModeproxynonProxyPosProtocoltia801rrlprrcNotificationTypenoNotificationNoVerificationnotificationOnlyprivacyOverridenotificationAndVerficationAllowedNAnotificationAndVerficationDeniedNA/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/QoP.cQoPhoraccveraccmaxLocAgedelay/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horveluncert.cHorveluncertbearinghorspeedPosTechnologyagpsSETBasedFormatIndicatorlogicalNamee-mailAddressmsisdnurlsipUrlmdnimsPublicIdentity/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GsmCellInformation.cGsmCellInformationrefMCCrefMNCrefLACrefCInMRtA/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETId.cSETIdimsinaistalecurrentNMR/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horvel.cHorvel/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandvervel.cHorandvervelverdirectverspeedEncodingTypeucs2gsmDefaultutf8%s: value byte %ld out of range: %d > 127 (%s:%d)/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IA5String.cIA5String/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandveruncert.cHorandveruncerthoruncertspeedveruncertspeed/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/WcdmaCellInformation.cWcdmaCellInformationrefUCfrequencyInfoprimaryScramblingCodemeasuredResultsListMsrAssistDatamsrAssistList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/DGPSCorrections.cDGPSCorrectionssatList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo-5-Ext.cOTD-MeasureInfo-5-ExtPositionMethodeotdgpsgpsOrEOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BSIC.cBSICSeqOfAcquisElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BTSPosition.cBTSPosition/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FixType.cFixType/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UTCModel.cUTCModelutcA1utcA0utcTotutcWNtutcDeltaTlsutcWNlsfutcDNutcDeltaTlsfSeqOf-BadSatelliteSet/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MeasureResponseTime.cMeasureResponseTime/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Ext-GeographicalInformation.cExt-GeographicalInformationSeqOfOTD-MsrElementRestAccuracyOpt/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTimeAssistanceMeasurements.cGPSTimeAssistanceMeasurementsreferenceFrameMSBgpsTowSubmsdeltaTow/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultipleSets.cnbrOfSetsnbrOfReferenceBTSsreferenceRelationSystemInfoAssistDatasystemInfoAssistListnavModelList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatelliteID.cSatelliteIDOTD-MeasureInfootdMsrFirstSetsotdMsrRestSetsTimeRelationgsmTimeSeqOfReferenceIdentityTypeOTD-MeasureInfo-R98-ExtotdMsrFirstSets-R98-ExtMoreAssDataToBeSentnoMoreMessagesmoreMessagesOnTheWaySystemInfoAssistData-R98-ExpOTDsystemInfoAssistListR98-ExpOTDSeqOfMsrAssistBTSSeqOfAlmanacElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSAssistanceData.cGPSAssistanceDataSeqOfSatElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlmanacElement.csatelliteIDalmanacEalamanacToaalmanacKsiialmanacOmegaDotalmanacSVhealthalmanacAPowerHalfalmanacOmega0almanacWalmanacM0almanacAF0almanacAF1/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatElement.ciodeudrepseudoRangeCorrangeRateCordeltaPseudoRangeCor2deltaRangeRateCor2deltaPseudoRangeCor3deltaRangeRateCor3ReferenceRelationsecondBTSThirdSetsecondBTSSecondSetfirstBTSFirstSetUseMultipleSetsoneSetmultiFrameOffsetroughRTDcalcAssistanceBTSMsrAssistData-R98-ExpOTDmsrAssistList-R98-ExpOTDSeqOfMsrAssistBTS-R98-ExpOTDSeqOfNavModelElementSeqOfSystemInfoAssistBTSReferenceTimegpsTimegpsTowAssistGSMTimeframeNumbertimeSlotbitNumberSeqOfGPS-MsrSetElementSeqOfSystemInfoAssistBTS-R98-ExpOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/IonosphericModel.cIonosphericModelalfa0alfa1alfa2alfa3/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeSlot.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AcquisElement.csviddoppler0addionalDopplercodePhaseintCodePhasegpsBitNumbercodePhaseSearchWindowaddionalAngle/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAssistanceData.cGANSSAssistanceDataSystemInfoAssistBTS-R98-ExpOTDnotPresentpresent/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrSetElement.cgps-msrList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultiFrameOffset.cMultiFrameOffsetCalcAssistanceBTSfineRTDreferenceWGS84/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalDopplerFields.cAddionalDopplerFieldsdoppler1dopplerUncertainty/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BitNumber.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementRest.crefFrameNumberreferenceTimeSlottoaMeasurementsOfRefstdResolutiontaCorrectionotd-MsrsOfOtherSets/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RoughRTD.cRoughRTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CdmaCellInformation.cCdmaCellInformationrefNIDrefSIDrefBASEIDrefBASELATreBASELONGrefREFPNrefWeekNumberrefSeconds/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NMRelement.cNMRelementaRFCNbSICrxLevFrequencyInfofmodeSpecificInfofddtddbsicAndCarriercirequestIndexsystemInfoIndexciAndLACOTD-MsrElementFirst-R98-Extotd-FirstSetMsrs-R98-Ext/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW23b.cGPSTOW23bCellIDAndLACreferenceLACreferenceCI/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalAngleFields.cAddionalAngleFieldsazimuthelevationsatStatus/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementFirst.cOTD-MsrElementFirstotd-FirstSetMsrsGPSTOWAssist/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/StdResolution.cStdResolution/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FrameNumber.cBSICAndCarriercarrierSeqOfGPS-MsrElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ModuloTimeSlot.cModuloTimeSlotGPSTOWAssistElementtlmWordantiSpoofalerttlmRsvdBitsexpectedOTDexpOTDUncertaintyGPSTimegpsTOW23b/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpectedOTD.cExpectedOTDTOA-MeasurementsOfRefrefQualitynumOfMeasurements/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW24b.cGPSTOW24b/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RefQuality.cRefQuality/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LAC.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NumOfMeasurements.cNumOfMeasurementsReferenceWGS84relativeNorthrelativeEastrelativeAltSeqOfOTD-FirstSetMsrs/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpOTDUncertainty.cExpOTDUncertaintyAssistBTSData-R98-ExpOTDexpOTDuncertainty/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelativeAlt.cRelativeAlt/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoIndex.cSystemInfoIndexSeqOfOTD-MsrsOfOtherSets/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FineRTD.cFineRTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RequestIndex.cRequestIndexSeqOfOTD-FirstSetMsrs-R98-Ext/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CellID.cCellID/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSWeek.cGPSWeekSatStatusnewSatelliteAndModelUColdSatelliteAndModelnewNaviModelUCAssistBTSDataFrequencyInfoFDDuarfcn-ULuarfcn-DL/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UARFCN.cUARFCNFrequencyInfoTDDuarfcn-Ntutra-CarrierRSSIcellMeasuredResultsList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMReservedBits.cTLMReservedBits/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrElement.ccNodopplerwholeChipsfracChipsmpathIndicpseuRangeRMSErr/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AntiSpoofFlag.cAntiSpoofFlagOTD-MeasurementWithIDneighborIdentitynborTimeSloteotdQualityotdValue/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMWord.cTLMWord/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlertFlag.cAlertFlag/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelDistance.cRelDistanceidentityNotPresentidentityPresentOTD-MeasurementMpathIndicnotMeasuredlowmediumhighNeighborIdentitymultiFrameCarrier/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UncompressedEphemeris.cUncompressedEphemerisephemCodeOnL2ephemURAephemSVhealthephemIODCephemL2PflagephemSF1RsvdephemTgdephemTocephemAF2ephemAF1ephemAF0ephemCrsephemDeltaNephemM0ephemCucephemEephemCusephemAPowerHalfephemToeephemFitFlagephemAODAephemCicephemOmegaA0ephemCisephemI0ephemCrcephemWephemOmegaADotephemIDot/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTDValue.cOTDValue/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EOTDQuality.cEOTDQualitynbrOfMeasurementsstdOfEOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTRA-CarrierRSSI.cUTRA-CarrierRSSICellMeasuredResultsList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EphemerisSubframe1Reserved.cEphemerisSubframe1Reservedreserved1reserved2reserved3reserved4MultiFrameCarrier/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellMeasuredResults.cCellMeasuredResultscellIdentitycellParametersIDproposedTGSNprimaryCCPCH-RSCPpathlosstimeslotISCP-ListprimaryCPICH-Infocpich-Ec-N0cpich-RSCP/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-Ec-N0.cCPICH-Ec-N0/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellParametersID.cCellParametersID/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-RSCP.cCPICH-RSCP/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCPICH-Info.cPrimaryCPICH-InfoTimeslotISCP-List/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Pathloss.cPathloss/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TGSN.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCCPCH-RSCP.cPrimaryCCPCH-RSCP/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TimeslotISCP.cTimeslotISCPunpack_byte_2bit_samplesboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)24unpack_byte_2bit_samples@M;@`MPmxN5boost6detail17sp_counted_impl_pI24unpack_byte_2bit_samplesEE M`fpfuAUU UUUpUUU0A0iA U A`AA0qA0AoAкf@Mf`f fkN@fPfunpack_byte_2bit_cpx_samplesboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)28unpack_byte_2bit_cpx_samples@S;@SPmxN5boost6detail17sp_counted_impl_pI28unpack_byte_2bit_cpx_samplesEE SffuAUU UUUpUUU0A0iA U A`AA0qA0AoApf@SfffkNffunpack_intspir_1bit_samplesboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)27unpack_intspir_1bit_samples@@Y;@YPmxN5boost6detail17sp_counted_impl_pI27unpack_intspir_1bit_samplesEE`YffuAUU UUUpUUU0A0iA U A`AA0qA0AoAfY0ff@fkN`fpflock.locked()index < size()!pthread_cond_destroy(&cond)Failed to set frequencyFailed to set sample rateFailed to set gain modeFailed to set gain) failed in mutexeventfd_select_interrupterepollepoll re-registrationeventFailed to set if gainit.is_valid(m_buff)m_it != 0circular_bufferrtl_tcp_signal_source_c is not an IP addressFailed to open socket.Failed to set linger option: Failed to set linger optionFailed to connect to Connected to Failed to set no delay optionFailed to read dongle info.Failed to read dongle infoFound tuner.*this - m_buff->begin() >= nm_buff->end() - *this >= nError during read: /usr/include/boost/array.hppout of rangei < N/usr/include/boost/asio/detail/posix_event.hpp/usr/include/boost/circular_buffer/base.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc***** Internal Program Error - assertion (boost::condition_variable_any::condition_variable_any() failed in pthread_mutex_initboost::condition_variable_any::condition_variable_any() failed in pthread_cond_initboost::condition_variable_any::wait() failed in pthread_cond_wait/usr/include/boost/circular_buffer/details.hppFailed to set reuse address option: Failed to set reuse address optionFailed to set no delay option.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]bool boost::cb_details::iterator::operator!=(const boost::cb_details::iterator&) const [with Traits0 = boost::cb_details::nonconst_traits >; Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >]boost::cb_details::iterator::reference boost::cb_details::iterator::operator*() const [with Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::reference = float&]boost::cb_details::iterator::difference_type boost::cb_details::iterator::operator-(const boost::cb_details::iterator&) const [with Traits0 = boost::cb_details::const_traits >; Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::difference_type = long int]boost::cb_details::iterator& boost::cb_details::iterator::operator-=(boost::cb_details::iterator::difference_type) [with Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::difference_type = long int]boost::cb_details::iterator::difference_type boost::cb_details::iterator::operator-(const boost::cb_details::iterator&) const [with Traits0 = boost::cb_details::nonconst_traits >; Buff = boost::circular_buffer >; Traits = boost::cb_details::const_traits >; boost::cb_details::iterator::difference_type = long int]boost::cb_details::iterator& boost::cb_details::iterator::operator+=(boost::cb_details::iterator::difference_type) [with Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::difference_type = long int]void boost::condition_variable_any::notify_one()boost::circular_buffer::reference boost::circular_buffer::operator[](boost::circular_buffer::size_type) [with T = float; Alloc = std::allocator; boost::circular_buffer::reference = float&; boost::circular_buffer::size_type = long unsigned int]boost::condition_variable_any::~condition_variable_any()boost::condition_variable::condition_variable()T& boost::array::operator[](boost::array::size_type) [with T = float; long unsigned int N = 255ul; boost::array::reference = float&; boost::array::size_type = long unsigned int]boost::condition_variable_any::condition_variable_any()void boost::asio::detail::posix_event::clear(Lock&) [with Lock = boost::asio::detail::scoped_lock]void boost::asio::detail::posix_event::signal_and_unlock(Lock&) [with Lock = boost::asio::detail::scoped_lock]boost::mutex::~mutex()boost::condition_variable::~condition_variable()boost::detail::interruption_checker::~interruption_checker()boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)@"@"@@"@@@?@.@@@.@@9@uN5boost4asio6detail11noncopyableEP6u uN5boost4asio10io_service7serviceE@ vuN5boost4asio6detail12service_baseINS1_15task_io_serviceEEE@vuN5boost4asio6detail15task_io_serviceE@vuN5boost4asio6detail12service_baseINS1_13epoll_reactorEEE@@wvN5boost4asio6detail13epoll_reactorE@wuN5boost4asio6detail12service_baseINS0_21stream_socket_serviceINS0_2ip3tcpEEEEE@@xpwN5boost4asio21stream_socket_serviceINS0_2ip3tcpEEE23rtl_tcp_signal_source_c@x=P6y`lxlx(N5boost16exception_detail19error_info_injectorINS_6system12system_errorEEEP6yxmxN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_6system12system_errorEEEEEP6`zp>lxN5boost16exception_detail19error_info_injectorISt8bad_castEEP6{ zmxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt8bad_castEEEE9`{N5boost4asio6detail14typeid_wrapperINS1_15task_io_serviceEEE9{N5boost4asio6detail14typeid_wrapperINS1_13epoll_reactorEEE@@|AN5boost6detail11thread_dataINS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS2_5list1INS2_5valueIPS7_EEEEEEEEP6}@9lxN5boost16exception_detail19error_info_injectorISt12length_errorEEP6}|mxN5boost16exception_detail10clone_implINS0_19error_info_injectorISt12length_errorEEEE@@~PmxN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS3_5list1INS3_5valueIPS8_EEEEEEEEEE9N5boost4asio6detail14typeid_wrapperINS0_21stream_socket_serviceINS0_2ip3tcpEEEEE`v0g gff w g!g g@,gxff0ffxf`fuAUU UUUpUUU0A0iA UA@AA0qA|AA`fxg@g oNx`ggP`ygg oNpEgf`yg@g`yFgfgPg zggpmA zg0g؂H0zpg@gpmADgfzggz`Egpfgg|ff@fN|PggA|ggXȄ8`}ggACgf`}g g`}Dgfg0g ~fpffkNf fB::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)10beamformer@v=@PmxN5boost6detail17sp_counted_impl_pI10beamformerEE`gaguAUU UUUpUUU0A0iA UA@AA0qA|AA_gdgeg egkNdgeg/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/gnss_satellite.cc is not defined {GPS, GLONASS, SBAS, Galileo, Beidou}. Initialization?Trying to define PRN while system is not definedThis PRN is not definedGlonass PRN (Block UnknownIIA*-4-2-7-1-3WAASEGNOSIOV-PFMIOV-FM2IOV-FM3IOV-FM4FOC-FM1FOC-FM2FOC-FM3FOC-FM4Unknown(Simulated)Pg0g0gpgPpgggggpgpg0g0gpgpggg0g0gggpgg0ggggpgpgggggpgg`|g@}gzgxgwg0{gzgzgygpwg wgvgvg~g ~g{g{g}gPygygxg`xg|grgxqgsgxqg sgxqg`sgxqgxqgxqgxqgxqgxqgxqgrg@ugugrgugrgrgrg0vgsg`tgrgtgrgrgrgtg Signal Word =g%gdg,gdh?gymga[MEykc[ME?=yM[=ky[E=S[MIG= 210uAuP[fBzއ@@@ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   8@ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   @T[fBЯއ/usr/include/boost/dynamic_bitset/dynamic_bitset.hppsize() > 0 && num_blocks() > 0Ephemeris (1, 2, 3, 4) have been received and belong to the same batch/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/galileo_navigation_message.ccTr::eq(c, one) || Tr::eq(c, (fac.widen('0')))basic_string::_S_construct null not validBatch number: bitset::_M_copy_from_ptrPage number = IOD_nav_1= t0e_1= M0_1= A_1= flag_tow_setIOD_nav_2= OMEGA_0_2= i_0_2= omega_2= iDot_2= IOD_nav_3= OMEGA_dot_3= delta_n_3= C_uc_3= C_us_3= C_rc_3= C_rs_3= SISA_3= IOD_nav_4= SV_ID_PRN_4= C_ic_4= C_is_4= t0c_4= af0_4 = af1_4 = af2_4 = spare_4 = ai0_5= ai1_5= ai2_5= Region1_flag_5= Region2_flag_5= Region3_flag_5= Region4_flag_5= Region5_flag_5= BGD_E1E5a_5= BGD_E1E5b_5= E5b_HS_5= E1B_HS_5= E5b_DVS_5= E1B_DVS_5= WN_5= TOW_5= spare_5= A0_6= A1_6= Delta_tLS_6= t0t_6= WNot_6= WN_LSF_6= DN_6= Delta_tLSF_6= TOW_6= IOD_a_7= WN_a_7= t0a_7= SVID1_7= DELTA_A_7= e_7= omega_7= delta_i_7= Omega0_7= Omega_dot_7= M0_7= IOD_a_8= af0_8= af1_8= E5b_HS_8= E1B_HS_8= SVID2_8= DELTA_A_8= e_8= omega_8= delta_i_8= Omega0_8= Omega_dot_8= IOD_a_9= WN_a_9= t0a_9= M0_9= af0_9= af1_9= E1B_HS_9= SVID3_9= DELTA_A_9= e_9= omega_9= delta_i_9= IOD_a_10= Omega0_10= Omega_dot_10= M0_10= af0_10= af1_10= E5b_HS_10= E1B_HS_10= A_0G_10= A_1G_10= t_0G_10= WN_0G_10= Time_0= WN_0= TOW_0= m_check_invariants()vector::_M_default_appendpos < m_num_bitshhCihB$ihiliQ0ihhconst Block& boost::dynamic_bitset::m_highest_block() const [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset::~dynamic_bitset() [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset& boost::dynamic_bitset::set(boost::dynamic_bitset::size_type, bool) [with Block = unsigned char; Allocator = std::allocator; boost::dynamic_bitset::size_type = long unsigned int]void boost::dynamic_bitset::init_from_string(const std::basic_string<_CharT2, _Traits2, _Alloc>&, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, boost::dynamic_bitset::size_type) [with CharT = char; Traits = std::char_traits; Alloc = std::allocator; Block = unsigned char; Allocator = std::allocator; typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type = long unsigned int; boost::dynamic_bitset::size_type = long unsigned int]ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ==@<p?NB ?= @@`?>?=<<> decode_sbstype1:decode_sbstype2:decode_sbstype6:decode_sbstype7decode_sbstype9:decode_sbstype9: prn=%ddecode_sbstype18:decode_longcorr0:decode_longcorr0:sat=%2ddecode_longcorr1:decode_longcorr1: sat=%2ddecode_longcorrh:decode_sbstype24:decode_sbstype25:decode_sbstype26:sbsupdatecorr: type=%d (memcmp says is_equal=) :<> s1= s2= equal=<> sat= fastcorr.valid= lcorr.valid= fast_correction_updated=<> band= nigp=<> -> valid igps:<> RTKLIB parsing result: <> new invalid time relation: i_gps_week=/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_telemetry_data.ccdecode_sbstype1: nprn=%d iodp=%ddecode_sbstype2: type=%d iodf=%ddecode_sbstype6: iodf=%d %d %d %d<> no change in ephemeris -> won't parseinvalid prn in sbas type 9: prn=%3ddecode_sbstype18: band=%d nigp=%ddecode_sbstype26: band=%d block=%dunsupported sbas message: type=%dUnsupported SBAS message: type=%d<> extracted GPS time from MT12: gps_tow= <> compare objects of size=<> updated_sbas_ephemeris():<> updated_satellite_corrections(): long_term_correction_updated=<> received_iono_correction():<> Sbas_Telemetry_Data.update():message parsing problem for MTpiipipipipiiiiЩiHiiiiiiiiiiiiii i@i`iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiaiboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvoid boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)<@ׄHAքIlFքmKքUք@ׄHքIlքmքքL؄Q`؄3V ؄4N[`؄Oe` ؄fe`؄j ؄o`؄tׄy`؄3~ ؄4N`؄Oe ؄f`؄ ؄`؄ ؄`؄2؄3N`؄Oe ؄f`؄ ؄`؄ ؄`؄2ׄ3N`؄Oe ؄f`؄ ؄`؄ ؄`؄2 ؄3M`؄Nd؄e`؄ ؄`؄ ؄`؄2 ؄3M#`؄Nd(ׄe-`؄2 ؄7`؄< ؄A`؄2F ؄3MK`؄NdP ؄eU`؄Z؄_`؄d ؄i`؄2n ؄3Ms`؄Ndx ؄e}`؄ׄ`؄ ؄`؄2 ؄3M`؄Nd ؄e`؄ ؄`؄Vt (FdLj<ZxLV`jt~ (2<FPZdnxLQV[`ejoty~ #(-27<AFKPUZ_dinsx} #(-27AK #(-27AK #(-27 #(-27AKU@?@eeA2@?{GzD?-C6>Mb?=?7i6?>Ephemeris (1, 2, 3) have been received and belong to the same batch(j"j2jKjX:j?ijconst Block& boost::dynamic_bitset::m_highest_block() const [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset::~dynamic_bitset() [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset& boost::dynamic_bitset::set(boost::dynamic_bitset::size_type, bool) [with Block = unsigned char; Allocator = std::allocator; boost::dynamic_bitset::size_type = long unsigned int]void boost::dynamic_bitset::init_from_string(const std::basic_string<_CharT2, _Traits2, _Alloc>&, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, boost::dynamic_bitset::size_type) [with CharT = char; Traits = std::char_traits; Alloc = std::allocator; Block = unsigned char; Allocator = std::allocator; typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type = long unsigned int; boost::dynamic_bitset::size_type = long unsigned int]   ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   PRN= alert_flag= page_type=  v bH= :72' tS!2!' !!!lRG B7 4' & r@0=`<0<< v bH= :72' tS!2!' !!!lRG B7 4' &  v bH= :72' tS!2!' !!!lRG B7 4' & <> PRN d_t0= d_tof= i_sv_ura= b_sv_do_not_use= d_pos=(x=, y=, z= d_vel=(x= d_acc=(x= d_af0= d_af1=<> Band<> -IGP t0= lat= lon= give= delay=NN<> searchigp: pos=%.3f %.3fIGP: give=<> SBAS iono correction: igp[0]= igp[1]= igp[2]= igp[3]= x=/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_ionospheric_correction.ccsbsioncorr: pos=%.3f %.3f azel=%.3f %.3fsbsioncorr: dion=%7.2f sig=%7.2fno sbas iono correction: lat=%3.0f lon=%4.0f-DT!?@TX[A5?[A5-DT! @J4?镲 ?"lxz,?(~k ?Pkw?^)?Gz?d]K?Zd;O?S㥛?(?a4?S㥛 @x4@Tbg@cܥL@KK@R@@U@@URu@r"@v(x><> Fast PRN d_t0=(week=,sec= d_prc= d_rrc= d_dt= d_udre= d_ai= d_tlat=<> Long PRN d_trx= i_tapp= i_vel= d_dpos=(x= d_dvel=(x= d_daf0= d_daf1=<> sbslongcorr: prn=%2d drs=(x= ddts=sbsfastcorr: sat=%2d prc= corr. pr=sbssatcorr : sat=%2d<> Sbas satellite corrections for PRN/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_satellite_correction.ccsbas long-term correction expired: sat=%2d time_stamp=%5.0fsbslongcorr: sat=%2d drs=%7.2f%7.2f%7.2f ddts=%7.2f<> long term sv pos correction applied: sample_stamp=<> long term sv clock correction correction applied: sample_stamp=no sbas fast correction (expired): time_stamp=%f prn=%2dno sbas fast correction (not monitored): time_stamp=%f prn=%2dSV is marked as unhealthy: time_stamp=%f prn=%2dsbsfastcorr: sat=%3d prc=%7.2f sig=%7.2f t=%5.0f<> fast correction applied: sample_stamp=sbssatcorr: sat=%2d drs=%6.3f %6.3f %6.3f dclk=%.3f %.3f var=%.3f9v?&†?]m{?&1?8gDio?Dio?Zd;_@Dio@MJl@q= c=@w?-C6 ?9̗?iUMu?a2U0*#?-C6*?a2U0*3?H}=?a2U0*C?H}M?~jtX?J4a?_vOf?F%uk?HPsr? @>@ v bH= :72' tS!2!' !!!lRG B7 4' & ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210closeSocket closed on port read_somewrite_somePacket error!Exception: set_optionbindlistenacceptSocket accepted on port . Please press Ctrl+C to end the program.Server ready. Listening for TCP connections...void boost::asio::detail::posix_event::signal_and_unlock(Lock&) [with Lock = boost::asio::detail::scoped_lock]@@uN5boost4asio6detail12service_baseINS0_23socket_acceptor_serviceINS0_2ip3tcpEEEEE@ N5boost4asio23socket_acceptor_serviceINS0_2ip3tcpEEE9@N5boost4asio6detail14typeid_wrapperINS0_23socket_acceptor_serviceINS0_2ip3tcpEEEEEk0k kfA>v?(\?Using Volk machine: %s %s;volk_gnsssdr_8i_max_s8ia_genericvolk_gnsssdr_8i_index_max_16uvolk_gnsssdr_8i_x2_add_8ivolk_gnsssdr_32fc_convert_8icvolk_gnsssdr_8i_accumulator_s8ivolk_gnsssdr_64f_accumulator_64fvolk_gnsssdr_8ic_x2_multiply_8icvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fcvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_8ic_conjugate_8icvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3volk_gnsssdr_8ic_x2_dot_prod_8icvolk_gnsssdr_8ic_magnitude_squared_8ivolk_gnsssdr_32fc_s32f_convert_8icvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5volk_gnsssdr_8ic_s8ic_multiply_8icvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_8u_x2_multiply_8uvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5volk_gnsssdr_s32f_x2_update_local_carrier_32fcvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3volk_gnsssdr_32fc_convert_16icBFsse2_64_mmxu_sse2a_sse2u_ssea_sse@@FFFF????IIII}}}}i!"i!"i!"i!"7777*=*=*=*=????????LLLL<<<<****BBBBu_sse3a_sse3ssse3_64u_ssse3a_ssse3    sse4_a_64sse4_1_64u_sse4_1a_sse4_1u_sse4_1_firstu_sse4_1_secondu_sse4_1_thirdu_sse4_1_fourthu_sse4_1_fifthu_sse4_1_sixth       @@@@sse4_2_64avx_64_mmxu_avxa_avx@@@????????IIIIIIII}}}}}}}}i!"i!"i!"i!"i!"i!"i!"i!"77777777*=*=*=*=*=*=*=*=????????????????LLLLLLLL<<<<<<<<********Volk warning: no arch found, returning generic impl VOLK_GENERICHOMEAPPDATA%s %s %svolk_gnsssdr_/.volk_gnsssdr/volk_gnsssdr_config;B_h}}}~(ڀ4N"h@$X$p))Ђ)ꂼx:xCF8(FRJl JLLNԃOOX"`YpXrڊ  h!("B"\"v"#(#ċ@#ދX#p##,#F#`#z#$$Ȍ0$⌼H$`$x$0$J/d1~4`6`9̍;捼;p??4\N\h\\]]ЎP]ꎼ] ^X^8^R^l _x__`ԏ@`x``"`<`V`p`a a8aؐPaha a&a@aZataab‘(bܑ@bXbpb*bDb^bxbbcƒc0cHc`c.xcHcbc|cccʓd䓼 d8dPd2hdLdfddddΔd蔼؂68P8jh–䗼@$@\ h.Pl 8`ȡv8إ04X⨼0H0 X(@ΩX詼p6Pj0ҪH쪼`x :Tn ֫8P h$>Xr ڬ001(1B`1(L(Q歼pc@d6ePwj@஼@P@ uvv@@!p#P&x9pBŽDƽH0ǽKǽMȽ Wؽ8[P^` (epxi*xm40qd8r duXv(z¾0{þ~`p!!XUU`p೿` @ p([Л[eu@hز`x PX @(xP(WWxhPx@( %0%.p@]P]^m@}8}xP`pH(p г0 0@  00Xx@.Pp02(5475:0x:@x>FXL`U(XY8yh@p55eȃ eЅ(``p("P"@R0PRГp(00X@`X@8@pphp(0@@ 0X@`P??Xn(n@ h90 +,.@ HH`ILQR `ab@b`b0bc Pcd`8>>`>p>?@`?px???@x@@@AЫPA0ApAл BBHC`CCCC8D0`DPD@BPCp C8ExEE@E`@FF'F0)FP)HHCHYEZE ZEpZGZ0GP[XG0\G\G]H^0IPapIcI0dIPd8J0rxJJJ(K`hKHII0KKLpL LPLpL MHM@pM`MpK(LHL(NNPNpNNOмO0OHO0`O`O0OPO0PP QXQQQQVpVN@N`N0hPPPPQ R00R`PRphRRRRRRS@(SP@S`SxSSSS0S@TPT@HTP`T@TPTT0T08UpU@UU0HVpV@ XW pW W W X0 8Xp XX xX X0 Xp X Y @Y Y YY(ZPZpZ`ZZP"@W`"W"W"p["["[#[0#\p#0\#P\#\#\$\ $\@$\`$\$]$(]$H]%h]0%]&] &]0X[0[0[ 1@^01X^@1p^`1^1^1_1 _2P_02h_P2_p2_2_2_2_2_ 3``38`3P`P4x`p4`>(^>^?^`?a?(a?a@a @aP@a@b@0bAPbPApbAbAbBbBHc0Cc DcEcEdF(d`F`dRdPUdX`X@aX`a@Y`eYxeYeYeZ f0Z@fpZ`fZfZf0[fp[f[g\Hg\g]g^h^0h_Xh_xh@`hPphr8i`vHepveveviwj@w(j`wXjwpjwjwjwjxj xjPxkx(kxpkxk`zk lPlxll ll`8mОiiiPmm(n@npn@nnnn@o0oXoo0op0p`pppPppppXq`qqPm`mnмhrr0rpr spHsxsss@sst8t@`tptpt`uP0u@Xu`xuuuPvPrr rpvvww0Hw`hwww w`wx0xxPxxy8yhypyyyPz`zzppvvv`{0x{P{{ |@| `|`||| |`}X}}}0} ~@~h~~0~@  ``H{{{P0؀@8X@x0HpȂpP p@&( +H..H.h0/@/ЄP/p//`/x/ 0ȅ`000( 1H`1h14І@44@05h56777pFHȈ`LpLL8L8LPMh M@MMN NHNxNNO O؊OO [  [@[[[Ћ[[[`0\x\0]ȌP]p]](]@]XP^p^iii8@j8PjP`jhjjj`k kHlx l@l`ll؏m m y y0yyyАyyy` zx@z`zzؑzz@{0`{P@Pp8ȒЇ p`ؓЈ 08`Љ(ДH 0@(`@ؕ0 P8pPh0X0x(@XpЗ Pp8PhУpЯPX`ppp@hpؚв pHh@ؙ`p0H0Pp(@XpPp@P`p pH`Ƞ PXx`P`0pH`x@Pp؟0@`8Xp@P0H0p0@px ؤp0P8P0اXP  ( H إ0 @8PP`hpȦ00p@(PЪ8#ث%%(&X0&p&'0)-@.x1Э3;@;X;p;;X< <`<<0<`ACD EXE@FFذF@H0IpNȱNQHU]] ]Ю0]@]x]X]p]0^@```8d0gȴg0i(jP`ypyy(y@yy( z@@zXz||`0(ȵЕPp0ЖH xPpPP и 0йpи( X @ؼ0hнȻPо0h@@p 0px@0Xp0@ 8Pp 0``$ '8*****PP+x+,H,x`- /HP0`1p11 02H2p2 3445(5@8x 8<8KW@Z@]]]]]0^@^^(_P_x__bb8bPbh0ePei`{08Њ ` 8Ћh0 0@`H@(phHp00` (@p0XH 0hpP@Xp0P@@@@  8`p 8P0(P@p 0@PP /8:`=AA A0A@ApA(AAA@BB@ChPDEEGHHJxJJLLX`Smpxp@{~@~Xp `px  PH``pxHPХ@0ЫH`0@P`(` 00@HP``pд 8 PеxP(P0P (`@`xPp@p0`p`@0h`P( `P8  80P@h``x0P`(@p@PXx@ 0 PP0P hp@hPp(0`0Hx H`x0 p8 @0XpPp`0H08` 0`P8P `HPx@`  h p P h   !@!0"`P#0$P$,8,,-`P-x--. .@/pp0P1p19H99@:X: :8:X;p`;<0>p@>`>p>>>>>0?P??0?H?x@ABHB`BxCC C0CPC pC@ C E E( PLp PR S  S` @S S S@ S V  V( Zh ] P^ `^` ^ ^ ^0 _ P_ _ _`@ahpbb0r @rH `rh rrrpst@0uX`uxuuwPy0`yHy`yxyyyypz0{h|@|`||~ 0X@p`p0PX0p@0@P`0H  0 МX`(б@Xp0P`pp00@@p(X08` нX%&&&&&'H'`()H)))* *@+ 0@(P@`Xpp0H` x0@P`p 8 @X `x    !0(!PH!p!!!! !@0"P"p"""$$%`8%h%@%%&`0&P& p&`'''(p0(P(()0 *H*h**+ @+ph++p+ (,X, x, ,@-`P-`--@X.Pp.p../H/pp/@/`/00(.@... 0/@/00 0@P1h11 12 2P`20 0@ 0P 1p (1 1 2 3 (30 3p 3 3p 3 84`444422@3`3P 4p5556(60H6P6667%@7(P5(h5(5)5`)x6)7)7)8)h8*8*8+8+8, 9,H9,90-9.9 .(:@7h: :70:7@: 8`:@8:x9::;8;@;P;`;h;;;0<;D8<D<G<K=P=T@>pVx>V:V:V;V ;VP<W=@YH=`Yh=Y >Z>PZ>ZX?Z?Z?0[@@[ @[P@\@\@\@p] A]8A_ApaAaAaBc C0cC fhDplDnE yF~hFF>?Ѕ(?@??@B8B@pBB@C hC0DPDEhEGGGGG Hp0HhHH@II0IHIИ`IxIJK@KKKL G08G@PGPhG`HII0JJLL Mp@MxM0M`MpMM@ NXNxN0N@Np0OHO`OxO0QQQR`RRPS0S@T0T0T0 L@ LP L` Lp O O O (Pp `PP P0P0Qp@R@S@UUUUPV@VhV`VVV0WP`WWWWWX PX&X/X68Y:xY=YAXUApUAUAUA8WBP\@Bh\pB\B`lBlCnDPnEnFoN(pPP`pRZR(ZR@ZSXZSpZ SZ0SZ@SZPSZ`SZpS[S[S0[SH[S`[Sx[S[S[S[T[T[ T\0T \@T8\PT0]Th]U]0U]PU]pU^U8^0Vp^V^V^W_pW8_WX_W_PX_X_X `0YX`YeZ@epZpeZe@[e[e\f`\ f\@f ]`f]f]f@^f^f_g`_ g_@g ``g`g`g@agagbh`b hb@h c`hchch0dhdhdi e ipe@ie`ifi`fifigiPgjg jg@j@h`jhjhj0ijijik j kpj@kj`kkk`kkkklkPlll ll@l@mxl0nlpom0p@mqpmPqm`rmsnuow`o|p0}p`}p}p}p}q ~0qP~Pq~pq~q~q0qr0r `rprrrsP8sphsss0sPt@tptt0tt uHuuu vhvvv@wwwx`xxФxyPXyyPy yzЫ0z`zzz0{P({p@{X{p{{{|0}h}}@~Pp~@~{ `||`|0 ~ 0Pp@X000 @`p  @`pȁ(H(0@P Hp`pXx@X p@ІPxP`(p@ @ Ј`  ` @ hP p p@x(PX`pp0P0Hx`ȌH#`&؍p&++Ћ+++ 0,hP,,,-@-h`./ȏ/4h07@7`7А@@@@Ȏ@0ApAAؑAB0@CXDDؒI0LhL0LPHP`PxPPQ@ QX@Qp`QДQ RRP SxSS``(``@apPapaaaPb@bPccЗdp@pXq qؖpqqqИq0rHrpssؙ t@t p 0P(@pPЂP8p(Єpȣ`0@PК`p0H`xЭ؛ 0 @8`XppȜЮ؝@ 8`xбвpPPП(к@`xP`pȠл8 P0hpмء `0pH`н Т0@HȤ(`إ 80Pئ` HphЧ h``@P(X0p0جP`Phȫ 0p8 XȮH P @p X   ȱ  ` H pP@.P.`.p.Ȱ....(./h@//h// @4X`8: `;B8FK@PTPj` 0ЌX@XБ`xВh غP0`p8P о0p@(0h@(pp H@x@"`&()002p<(>hPCW|x|}}p~8h pP @@@H00hPphHP^u`Ph- aa|P pH]@ H@P`p(@Xp 0@P0`Hp`x @0`Pp(H`0`P@x 8`x   00 h  H`xp  0H!!!p"@#0#H`$` %x%%%&@&P&`&0&P&h&&'@'P'''('H'` (0(`(p(((( )@ )X0)pp))))))0*0@*HP*`*****0+@+ P+8,h ,,,--.@.Xp//P0`001@102` 2x0233 33 484P4456 @=xp>QT0VWXX(YXYpZZ[[\0\H]x]^^_(`X`a`bcg8@ihij0lhm mppst0{p 0@80`P0``HpPP0HЯо0(@`00 ` @ X`p@` 8p`0 0 )0/h/P/h00p000@1@1hP2p2 9809P99@9X90:`::;0;`P<p<@(@p@@A8PAPB0CF`IX@MPM`MpMM8QUX@@\_0'e(f@(g)v)@wh*0z* }(++,І,P-.p../P 0P000011P1@ P8`PphО(@X p0@P`p0H`Пx 0 @ P8 `P ph      Р  ( @ X  p 0 @ P ` p   0 H ` Сx      0 @ P8 `P ph      Т  ( @ X  p 0 @ P ` p 0H`Уx 0@ P8`Pph  80P@h`Х0 H@h`Ц( H@``pЧ( @@`pШ0` @` P @0``Ы 8P h0@`Ь(@` x@`Э @X x@`pЮ 8X p@Pp8P p0Pp0Ph0Pp0Hh0P`( @ `X 0p  ж  p @ !!0!H!P`! x!! !P!!"0"P"@p"p""""0#`0#P#p## #P##$0$P$@p$p$$$$0%`0%P%p%% %P%%&0&P&@p&p&&&&0'`'h(((@(p()() @)(*H*0*p+h++ +P,(,H,h,-`0- P-p--`- `..0/P/p/0/`//P0P11@ 2P222283h33p3@3p4084p4445H5h5 5 5p 60 6``6666 6P7 7P7p77 7P!8&X8&8'8@'8'9'(9'H9(9P(9(9 +8:0P:1x:1:2:02:@3@;3x;5;@5;`5;5<5 <>p<?<0?<@?<P?<`?<@0=@`=A=A=B=B>FX>PH>I>`K`?Y?0[ @[X@`@`@bApgApiXBmBnCn8CPpCpCpCqCq8D@rhDrDsDpsDvEw0EwhEpxE yEP|F}8F`FFЅ8GPhGGGH H8H`HHHIPI xIБI IДI0(JPJЕhJpJJ8K0KLhL L0M@MpM`HNN`NNO@HO0O`OOOPP`P (QPQpQQQQQHR`R`xRR`R (S0@S`SSS@TPTU0UxUUpVPpVV WW0W@xWWPW X pXPX0XXHYYYp0ZHZ ZpZP([[@\x\\\\\] @]px]] ]0^h^ ^^0^_p__(`@` ``Xaa aHbbbbbpcP chc`ccp8dXdpd`dd`d e`Pee`eP 0f%f`'fp'f(g0(@g(xg(g0)g)(h)hh0*h*h+i+8i,hi,i-i-i-j0.(j`.Xj.j/j`/k/@k0k`0k0k01 l1Pl02l2l3lP3m38m4xmP4m4m5(nP5`n5n`6n6o6o70o7`o8o`8o8p9Hpp9p9p:p:(q;Xq;q;q >X?P?? @8@P@@AAA0@BhBB@CCH`D`DD0EE@Ex@FFF(`GXHp0HHH0IPII0JJ8KhKK LpL L` MMM NHNx@OpOOP0pPpP QpQ QX@RRS`SS@T`TTU0`UhUVVWPWPWX`XX@YxY ZPZZ(Z`P[[\P\P\ ]0]]^P^P^_P__@`xP`` apa0ah bpbb  cXpccpdd pePepfg@gg0gh@hhh @iXijjj0kHkk0ll8lp0mmPnn nX ooo0pHppPqq r8prpr sps s`  t pt t u u0 u` v `v v wH pw w x x x@  yx py y  z( zh z  { { { 0|X||0}}H}0~~~PHxPЀ`@pp 0@`Ѕ`@ P @HЊx`8h@p p` pH@x@ `X`H``H`x`0 XЙ0H0М0 hpН XО @p@xp(  h p  @!8!`P!!!0!0"h"@""#`H#`#0##Ш$0@$x$$0$(%X%p%Ы% %p&ЬP& &&Э' 8'h'@'p'' (p`(( (p)H)@x)в* *@*@X*px****))))ж)H+p++,(,H,0`,,, `+0x+P+`+p+--- -`-.0.`. .0-H-п`-x--X0@p0p00116P66`87@<=AHCEPxF`F@G.//00/@H/P`/`x//////0 08000p1P1 2082`2x222P2 383@3p3030 4X4444585@5506(6ph66`777 7(8 x8P8 88(9X9x9 90 9@ 9 9 : (: @:0 X:` x:p : : : :0 ;` ;p 8; X; p;@ ;P ; ; ; < < 8< P< x< < <0(=P`===p(>x>@>`>?8? `?!?"?#@ &X@*@ -A-0AP.XA1A2A3 B8xB8B9B;C;C`D>xD0ADADBpECFE(F GPFHGJ@GLhGNGOHHPQHpQHS(IS@ITIUXI@WJ@XJpXJXJXKY0K YHKpYKZKP\XJ`\pJp\J\J\xK\@L _LaLbLpbM0dhM0eMeMPg N hNNPPPpPNOPOПO@@QТpQpQQPQ0RhR R`RS00SXS pSS SSpT8T`T T8VP%H`pR` SxT@UTV UPVPUVUWUX`XaPZ0aZXa0_aЉa(bP`bxbb@c`8cc0ccc XdБdddГde`(e`ee e`ef0fHf`fPfСfff0gP0g`Hg`ggggphahgxi0Xhxh8iijj j0j@jPj@k0kHkp`kk0kklPxlllPm m m`n`nНo0Ho@o0pp0pHpPqrPs 8u`vpvjHjpppq`pqq r`r`rs`ss@tpttpxu0u@w0w0Xwww@wwx(xXx`xxxx x(yPyxyyci8@mmmЂn0o(؈ H 0@мЊ 00Xp`0(PHP0@ `Hphp@(`PhH @HPp(ؓp  p Ȓ    X@ Ȕp@`pЖ@P0H` xPؗ 8PPh`ИH!ؙp#(%x(Ț*P,h.003X46 9H:`====0 >HP>`>`?О?@@8@XAx0A`AAA؟AB@BXCCCؠD(D@EE@FСpF0H8IKآPM(OxPȣ`R ThUWPYX[\^HP`bc8epgا@i(kxlȨnphrtwXy |~H0@8Ј`ج(xȭ h@X@0Hp P8 رд(жxPȲнhPX `Hp80ضpHз 8@ظ(xȹ hX pHp8Pؽp(PxpȾh0PX0H @ 8   (0xPh0XH p"8#%'((x** *0*@*(P*@`*X*0+++ , p,H,p,,0--- .@p.h//202`22 286h@9:;(p>x ACFJ@ OPR(pTp V`WXH] cg0jH0o@P@X0p0Hp  hPp Pp0@p0p(0@`Xp@pHP0H`P @P hP0 `p18NxpQ`TYp _a `dhgiPk@mnpqPq rr0s sXtuvw8`zXP~Hh0XУpp P8hЯ г80hp(`x8P0hpP@@(@PX8@0`px &0 CpFI`NhS`VY`[@^_8a`c eeH@ff@gg`hP`i`j`k`l0oPr`uv pP@ 0Лp0@H` P0 Pp `@Xp08pP pp0ph0p`@P@ pp0``P  Xp 88x`OPR@UHZ_b` eg`j8lmo@qXq`rr`s( s` t u v w@ xx  {    Ќh В p `( @x   0 0H x `  @ p@x@@h0Hxp@@x`P@0(@X0pp0Px` 0 H`(PxP0p$)h-p15R o`ru {X P`(`p p8p @ x   @ p p`    !p!0!!! "8"P"""`" #@#p`#x# #P#P0$PH$@`$$$@$%(%@`%%%@&`&& &0' '0X'p'''0'p' (0(x(P()`)p"x)0%)))- */p*p1* 3+4P+6+P7+|h>>?pX?pp?p??0???H@@@@@`(Ap`AA AAAP BXB`xB0BpB(CxC@CDhD0D DE(EXEEE EPEEF8F0hFpFF`HGGGGH0 XH H H@I0IpIJJ0J!K%K)`K0AKXKp[(L`^pLcLi@MkM@nMpNs`N0uNvNx8O`zOzO{O| P|PP}P}P~P0QhQQ@Q0R(R0@RRRS`PSS ST`TT@U UpUU UU@VVV 0W0WW X pXX`Y"`Y%Y&Y0'Z0+0Z.`Z/xZ0Z8ZA0[0I[S[U\@V0\Wh\X\c\Po@]w]z]}]]^^@0^p^p^p^`_0_`_Е___`0`X````Фa``aabPPbbbcHcp`c`ccPccd(d0@dpdd0dp0e0eeePfPfff@g`ggPh`hh0iHiP`iiiP*0j@-xj00jp5(k:kP=k? lBhl0ElFlH@mPJmLmLn0M@nMpn0NnNnPOo`PHopQoRoSo VpY`p\xp]peppk0qmPq`qqyq~@r@`rrsPsppssptС(tp@ttt0uu u0 vPpv0v0w0`w0wx(xPPx0xxx0yHy`y yz Pz`$z%z&{0(8{)p{3{>|F`|pIx|`L|M| O|P|Q}S}Yh}`}a}b}pd~kH~s~s~`t~pv0pxhyypz@{}(~PЀPX H`(H Ч؃P@X P@`г؅zRx *zRx $ FJ w?;*3$"DȐ\АtȐȐ4Ld|x  p$h<`TXlPXPXPH @AS~D4~D$LSAI  DA t~205X5zPLRxwA 4$`=BAA G@y  AABH $hqAG L AK $<qAG L AK $dqAG L AK $pqAG L AK $ȒqAG L AK L YBBF A(D0 (D BBBG A (T BBBE $,0}AI z AK $T}AI z AK <[BAD J  AABA $AG D AC $xAG D AC $ AG D AC $4hAG D AC $\AG D AC $XՎAAL И $ Ș鎊AAL @ $L8 AAL , $ AAL l $ 9AAL  D ؛mWAAD ] AAK k DAB DDA  <l[BBD A(JPt (A ABBC d4AY A eAq A ,vmAAR u AAA <H}BJA A(S0o (A ABBJ \ QBBE B(A0A8D` 8A0A(B BBBE o8A0A(B BBBt AYd BBB B(A0A8Dp 8A0A(B BBBE [8A0A(B BBB AY, >EDA pAB$L AG e AB ,t AAG0v AAG -Ag $-Ag $\AK Y AJ < $AK Y AJ | ` $XAK Y AJ  $AK a AB    $tAK a AB T x $pAK i AJ    أ5Ao  \ 5Ao4 L  5Ao  5Ao 0$ (AK a AB   $t AK a AB T l  ؤ=ďAw  =ȏAw  $l ̏AK a AB L` $ XЏAK a AB  , fԏAL K A G D, f؏AL K A G D$L 8܏AK i AJ , D $ AK i AJ   4UBDA w ABO AAB0AY4 0UBDA w ABO AABDXAY4dXUBDA w ABO AABAY4UBDA w ABO AABAY,5EDA gABDAT,d5EDA gABȧAT,ȧ5EDA gABاAT,ا5EDA gAB4AT4TUBDA w ABO AABAY,5EDA gAB AT4 UBDA w ABO AAB4HAY4THUBDA w ABO AABpAY4pUBDA w ABO AABAY4UBDA w ABO AAB<AY,\5EDA gABШAT,Ш5EDA gABAT,5EDA gAB,AT,L5EDA gAB|AT4UBDA w ABO AAB(AY4(UBDA w ABO AAB,PAY<LPEEB D(A0h(A BBBAT,5EDA gABAT,5EDA gAB,AT4LUBDA w ABO AABAY<'BBK A(G@ (A ABBB ت_FP J y,5EDA gABd4(BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA D<#BBA A(G@ (A ABBE ~D0] G D\h$䏊BBE A(F0 (D BBBA DP-BBB A(D0 (D BBBD L8BBB B(D0A8Gp 8A0A(B BBBK 4<C@AAJh AAJ 4tCpAAJh AAJ $ȷAAL$@wʐAF@m AA ,eڐAAIpF AAE ,,غAAIPT AAA $\hAAL$;AG@} AA $HLAG@{ AA ,нgAAGPP AAA , AAGP~ AAG $4pAAL<\}ÑBBD A(K (A ABBH $hf AD0 AG ,#AAL z DAC  , ;AAL z DAC  ,T%SAAL  DAA < ,%vAAL  DAA  ,%AAL  DAA  <,JBBD A(L0 (A ABBF Dl蒊OHB A(D0 (g LBBB <`BAC G  AABA D0Z8BBE K(A0 (_ `BBF <<HdBAC G  AABA D|OEB A(A0 (g |BBJ <`BAC G  AABA D0ԓOEB A(A0 (g ~BBH <LxBAC G  AABA <HJ$BBD A(L0 (A ABBF <XPBAC G  AABA < (JpBBD A(L0 (A ABBF <L8BAC G  AABA D\OEB A(A0w (g BBA < 䔊BAC G  AABA DOHB A(D0 (g LBBB <\H4BAC G  AABA <JTBBD A(L0 (A ABBF <(BAC G  AABA D ZBBE K(A0 (_ `BBF <d ̕BAC G  AABA D n않OHB A(D0y (g IBBA < BAC G  AABA D,!4OEB A(A0 (g }BBI <t! dBAC G  AABA D!bBBE K(A0~ (A LBBD <!BAC G  AABA D<"*ЖBBG K(A0l (_ aBBA <"BAC G  AABA L|& BBB B(D0A8G@ 8A0A(B BBBJ &` BFB B(D0A8J@ 8A0A(B BBBK ` 8A0A(B BBBF _ 8A0A(B BBBG T 8F0A(B BBBE Ld'BBD A(O@V (D ABBI ] (A ABBE L'BBE B(A0A8DL 8A0A(B BBBI 4L$ BAD G@  AABF L<(BBB B(D0A8G@e 8A0A(B BBBE L(BBE B(E0A8J@I 8D0A(B BBBG ,(AAD T AAA t )0BFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA 4)BAD G0~  AABA ,) HEDA zAB)@AT\ *@?BBB B(D0A8DP 8A0A(B BBBE t8A0A(B BBBl* AY<& @BAC G  AABA 4'ZA_AI048Q@m8A0P AA DL'WPBBE A(F0 (D BBBA ,'HAAL  DAA D'#BBE A(D0 (D BBBA +(T$(pY 蚊BBB B(D0A8G 8A0A(B BBBE <|(q(AC W.T. B t,,,,,,,,,,,,-,-,54-~'L-,54)8Z蝊BAD GP}  AABA ,)`AAQ@ AAF - ALL4* >BBE B(D0A8M 8A0A(B BBBH <* <BBD A(I (A ABBA 4*tBAD G  AABA <*hBBD A(J (A ABBA 4<+(䞊BAD G  AABG <t+BBD A(J (A ABBA <+TBBD A(J (A ABBA D+#iBBA A(L (A ABBC ,<,'AAK0h AAA ,l,H(AAU0h AAA 4T0)%BAD G0  AABH 0* 0xq0pq0xq0pq1hq1`q41H*L1@qd18q|10q1(q1 q1q1q1q 2q$2h)<2pT2pl2p$2pAG J AE $2PqvAG @ AG $2qAG J AE 20r 3(rAS43h(DL3r?A\ K Ql3P(2$3x(sAI b AA $3(sAI b AA $3()sAI b AA $3)sAI b AA $$4)sAI b AA $0PqAAL t4q 4)L0)W#$BBG B(D0A8P 8A0A(B BBBB L<1LģBBG B(D0A8Pp 8A0A(B BBBD L1SBBG B(D0A8Pp 8A0A(B BBBD L1HYqBBG B(D0A8Pp 8A0A(B BBBD <,2p祊BBD A(M@b (A ABBA l2q,AfD6q 2q4An|60q6(q 2 q4An6@q,38q<Av7Xq7Pq 47Hq430[-AC HDX. D 43aAC HDX. D 44`h3AC HD. E $<4],AI0Q AA ,d4pAAL  DAI L8@q $48q毊AALp<4rBBA A(I` (A ABBG ,5s AAGPq AAA 4D5jEAC HDJ. B t|5owrAC HD.H.o.H.f.o.t.k E S.x.J.o.I.f.n.t.z.\5AC DS.v.t.u.t.q.q..h.  J f.\T6`AC DS.v.t.u.t.q.q..h.  J f.\6ЮAC DS.v.t.u.t.q.q..h.  J f.\7@".AC HQ?..s..s..s..w.  F f.\t7"JAC HQ?..s..s..s..w.  F f.\7"fAC HQ?..s..s..s..w.  F f.,48@qAAJPV AAA ld8qfAC HD, ...A. .C.% ...B. .A. D <g<n'<9qBBD A(N (A ABBD <D9s3BBD A(O (A ABBF <9vTBBD A(N (A ABBH <9xuBBD A(N (A ABBH 4:{BAD L  AABE 4<:}BAD L  AABE ,>03$D>XAG I AF T:0BBB B(A0A8G$ 8A0A(B BBBA 4>ȂpAAK F DAH DFA>ALd?`BBF B(A0A8D@ 8D0A(B BBBB M 8D0A(B BBBF 4?XBAD k ABK TAB?AW??x @p4$@4<@`AP$\@`EAL n DA @x2@-DQ K @D@81X@`1X$L=wAN0N AA $,AAK S AH TAHAL$tAnAG P AG $A`nAG P AG , >{AAJ0B AAA L<>Ȅ,BBE A(D0W 0A(A BBBA 4DBCAAJ e AAE DDA$|B0aDU A R T BBhAD <$?niŠBBD A(S(A ABBC 2$|?0j"ŠBAD D@\C*k$D $?6k ÊAAG@$C AG S AD ,CȏBEA } ABH CxU D`,l@quĊAAP0~ AAA TD8D<lDpBBD A(I@ (A ABBD LDPGBBB B(A0A8JP9 8A0A(B BBBI LDAPQĊBBB B(A0A8D 8A0A(B BBBF dLE`|BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA dEx^BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA <dBp2ĊBBD A(L (A ABBE d\FpUBBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA < Ch ĊBBD A(L (A ABBE dGHpBBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA TCP  ŊBBD B(D0A8U 8A0A(B BBBA 4 DVŊAAD AAG TDD,|ŊBBE B(G0A8U> 8A0A(B BBBH TH\lHpBBB A(D0G@c 0I(A BBBK D 0C(A BBBB DE;PƊBBD A(M (A ABBG L\EvƊBBB A(A0G%f 0A(A BBBC TEHƊBBE B(A0A8GPh 8A0A(B BBBA 4FȊBAF G`>  AABF DIBBE A(E0J@ 0A(A BBBD TFsɊBBB B(A0A8Q U 8A0A(B BBBA $JY>AI - AA J`,JJ@,AP$ K@,EAL n DA 4K(2LKPDdKbdA$G@ɊAV0{ AA <GɊBAD Jm  AABF <,H8qʊBAD Jm  AABF $$LAN  AA LLALTH$,ˊBBE B(D0A8T  8A0A(B BBBH $LoJD (P0i(A T A L]M*M`]AP$ 8A0A(B BBBA <8~BAD D  AABB T ؅ BBB B(D0A8G 8A0A(B BBBI ׾VD  A < TXlPH@2@D,HIBDD r ABA T\h-ȀBBE B(F0A8N) 8A0A(B BBBE 4@ AC HK.0h. G ,rBAD \HB48BAA G0O  AABB  pAL$,;Ad K A G ATHLA~tx2j<NBBK A(G@+ (A ABBA <BBA A(K0 (D ABBE Tl<BBB B(A0A8JN 8A0A(B BBBD $|0AG v AA TypBBG B(A0A8G> 8A0A(B BBBA 4DAC HHv F T|H'sBBB B(D0A8G 8A0A(B BBBK VD  A `XPH 2$HD,<PIBDD r ABA 4p8BAA G0  AABH HAL$;Ad K A G AT4 5<BBE B(D0A8L1 8A0A(B BBBI 4AC HK.0h. D |`LA~<BBB A(A0 (A BBBA $$EAD0w AA TL({BBB B(A0A8Jo 8A0A(B BBBC \PVD  A |2D, IBDD r ABA 4$BAA G0  AABF tAL$;Ad K A G ATBBE B(D0A8N 8A0A(B BBBH 4\8ԉAC HK.0h. F $LAAJ AA<t*BBA A(G0 (A ABBA $AD0w AC T$όBBB B(A0A8Jo 8A0A(B BBBA 4VD  A THl@8020D8T,IBDD r ABA 4t$BAA G0  AABI dAL$X;Ad K A G ATpe䍋BBE B(I0A8M] 8A0A(B BBBA 4L0AC HK.@h. F ,<BAD HB<lTBBA A(G09 (A ABBA $\AD0w AC TxJ7BBB B(A0A8Ji 8A0A(B BBBA ,@ VD  A L0d(| p2D,IBDD r ABA 4T|BAA G0  AABF DAL$dX;Ad K A G AT`=BBE B(D0A8N8 8A0A(B BBBH 4,HĒAC HK.0h. F $AAJ0AA<D8*BBA A(G0 (A ABBA $(AD0w AC TBBB B(A0A8Jo 8A0A(B BBBC VD  A $x@<p@Th@l`@x2D,IBDD r ABA 4,ЖBAA G0  AABD `AL$<?;Ad K A G AT8ԖBBE B(D0A8K7 8A0A(B BBBD 4AC HK.Ph. D DX BAD J0  AABF ]  AABG L<!BBA A(G0^ (A ABBG b (A ABBA $#LAD0w AC T# 'BBB B(A0A8JQ 8A0A(B BBBA  'VD  A ,=Dh\hthh=2$=sAI b AA $>sAI b AA  `>D,$h>IBDD r ABA LT>BBE B(A0A8H` 8A0E(B BBBI ,H@AEG0AAAA$xgqAG L AK $,gqAG T AC 4XADhBAH N0  AABF pCAL$g;Ad K A G A$4T/(AI0* AA ,gcAAN0[ DAH L,hBBB B(D0A8G@ 8D0A(B BBBA ||hBFB B(D0A8JP 8A0A(B BBBE I 8D0A(B BBBJ  8A0A(B BBBG DDi0xBBE A(D0LPi 0A(A BBBE LDj BBB B(D0A8Dp 8A0A(B BBBA LAfBBB A(A0R 0A(A BBBF t,EvܟBBB B(D0A8J}FIFFFFF^ 8A0A(B BBBE TS `BBE B(D0A8O 8A0A(B BBBH 4X]lAC HN.f. E <4_iBBF A(I (A ABBE ,`Di\t`i2$isAI b AA $isAI b AA $8jD,<@jIBDD r ABA <l`jBBA A(KPb(A EBBk?kk4<kBAH N0}  AABF ,nAL$LP;Ad K A G A$^T/ĢAI0* AA L0nf4BBB A(A0R 0A(A BBBF t4Pr&xBBB B(D0A8J']FFFFFF_ 8A0A(B BBBE T BBE B(D0A8O 8A0A(B BBBH 4pAC HN.f. E <<iBBF A(I (A ABBE 4(Ldؾ|оȾ(2$PsAI b AA $sAI b AA ,D,DIBDD r ABA Lt(BBE B(A0A8H` 8A0E(B BBBI $AED@AAx4dpDDBHA N0  AABD TAL$t;Ad K A G A$Љ 1AI0_+ AA L 8NtBBE A(G0Rg 0A(A BBBF D\8AC HD.@/. D .@.THBBE B(F0A8U 8A0A(B BBBA 4(4AC HN.f. F <4|BBF A(I (A ABBH ,`Dx\t28D,@IBDD r ABA D``BBE A(A0DP3 0A(E BBBI ,dxBAD D@ AAB804 (ԯBAH N0  AABF AL$@;Ad K A G ALBBB A(A0R 0A(A BBBD d(䱋BBB B(D0A8J 8A0A(B BBBA mFIF^L|BBE B(A0A8D` 8A0A(B BBBA T pBBE B(D0A8R 8A0A(B BBBA 4HAC HN.f. E <$a̳BBF A(I (A ABBE VD  A < Tlx2D,IBDD r ABA DhBBE A(A0HP7 0A(E BBBI \;t4BAH N0  AABI AL$;Ad K A G ALl䵋BBG A(F0R 0A(A BBBF <hW4AH HD. b. B T?BBE B(D0A8Tb 8A0A(B BBBA 4Tp AC HN.f. E < ȷBBF A(I (A ABBE x¿VD  A (P:H:@:8:24D,LIBDD r ABA D|hBBE A(A0HP7 0A(E BBBI ,8AEG0AA 4lBAH N0  AABF \AL$|8;Ad K A G ALXܹBBG A(F0N 0A(A BBBE d<,BBB B(A0A8JFIF^ 8A0A(B BBBC T)BBE B(F0A8Pg 8A0A(B BBBA 481AC HN.f. E <43i介BBF A(I (A ABBE ,0ϿVD  A L@7dHf|@f8f0f627D,7IBDD r ABA D$ (7aBBB A(A0K@0 0A(E BBBI ,l P8BEA K@ AAB 09 (94 944BHA N0  AABH  (;AL$$ d;Ad K A G AL;BBG A(F0N 0A(A BBBC L`@@AC HD. .0. C u.0.T4Q ྋBBE B(F0A8P 8A0A(B BBBA 4]AC HN.f. F <_HBBF A(I (A ABBH  ܿ!D  A  Pc  $ < T b2l cD @A, cIBDD r ABA $  cAI z AK $ cAI z AK $ 0dAI z AK $D dAI z AK $l @eAI z AK  eVG: A D gBBE A(A0LP 0A(E BBBI , hAEG0AA,jDj4 jBAH N0  AABH kAL$;Ad K A G A,$ N`AAI@C AAA LT koxɋBBG A(F0NZ 0A(A BBBF l qBɋBBB B(D0A8R 8A0A(B BBBF ^IIIFF[T  ʋBBE B(D0A8U 8A0A(B BBBA 4l DˋAC HN.f. E < ˋBBF A(I (A ABBE  8Xx,2DD,\ IBDD r ABA D@hBBE A(A0HP7 0A(E BBBI $hAED@AA4tˋBAH N0  AABF d؟AL$;Ad K A G AL͋BBG A(F0N 0A(A BBBE dDP͋BBB B(D0A8RFIF^o 8A0A(B BBBG Tr l΋BBE B(D0A8Jp 8A0A(B BBBD 4TϋAC HN.f. E <<8&ϋBBF A(I (A ABBE 44 D w A Tl0( 8,AD5\5LtBBB A(A0 (D BBBL A (A BBBH 8D$0ϋBBE A(D0 (D BBBA L$8BBE B(A0A8DP 8A0A(B BBBD DϋBBB A(D0Gp 0A(A BBBG ;&D]:$AAN DAL,PvBBB B(D0A8OP 8D0A(B BBBE |`;C D 9 A \'$HAI z AK $AI z AK 4LX,ЋBAD K@S  AABG <D\4@ЋAAP/j AAA TyTЋBBE B(D0A8O 8A0A(B BBBA DE I$lC.wЋAI0q* AA Lqd|2-DQ K (D,,0IBDD r ABA \0'Aa|@/Ai$PpҋAD0O AA < ҋBBA A(G` (A ABBG <LVӋBBD A(R (A ABBJ D4ӋBBE A(D0GpV 0A(A BBBE ,tӋAAR e AAE $@oDU A R T ,8AAI0 AA,(AAI0 AAD\ t8oD  A ,AAV AAA ,hCAAN@ AAA ~D  A 4hkBAD J0U AAB4LsBAD I0^ AAB<nBBD A(M@Q(A ABB$wAAD0nAA`&D]'$@AI z AK $DAI z AK $lPAI z AK DBBE A(A0D`r 0A(A BBBG L BBE B(D0A8QPO 8A0A(B BBBA $tP|2MՋAI0., AA Tl0'Ae   AS< 2T -DQ K t D, IBDD r ABA ,H؋AAVp AAD 44؋BAD I@  AABF $$!DU A R T L!<d!|!!!!! !xAS"82,"`-DQ K L"pD,d"xIBDD r ABA ,HۋAAVp AAE 4 <ۋBAD I@  AABF $"DU A R T $#h'AeD#(\# t#(# ## #AS#2 $-DQ K ,$D,D$IBDD r ABA , (H\݋AAVp AAD 4 H݋BAD I@  AABF $$DU A R T %=%4%L%d%|%% %AS%p2%-DQ K &D,&IBDD r ABA ,"HߋAAVp AAD 4"ߋBAD I@  AABF $&hDU A R T &AY&P'H,'PD'H\'@t'8 '0AS'2'-DQ K '(D,'0IBDD r ABA ,t$PHAAVp AAE 4$pBAD I@  AABF $(8DU A R T ((4(04)AP$$)EAL n DA L)2d)8-DQ K )HD)A,%8R(AADP AAA $,&hBAD@ AA $ *0AK  AD 4*ALL&KyBBE A(E0P 0A(A BBBG $*ضDU A R T **(*0+AP$4+EAL n DA \+2t+-DQ K +(D+A$ (AD@ AA $4(AD@ AA $,hAK  AD <, ALL( CHBBE A(E0P 0A(A BBBD $,DU A R T , ,`4-4- AP$<- EAL n DA d-h2|--DQ K -D-ȈA,*AAJp= AAE ,D*0AAJp= AAE $,.AK  AC T.ALL* "BBE A(E0P 0A(A BBBE $.DU A R T .P+// 4/+AP$T/+EAL n DA |/2/-DQ K /D/ʆA,,,2AADP AAA $\, AD@ AA $<0 AK  AD d0x!ALL,x!;BBE A(E0P 0A(A BBBD $0DU A R T 0p61)4,1)4D186AP$d186EAL n DA 1)21)-DQ K 1)D1ԄA,<.)RAADP AAA $l.+AD@ AA $L2+AK  AD t2,ALL.,KBBE A(E0P 0A(A BBBH $2XDU A R T  34?$38<38T38l383838 38AS3X4234-DQ K  44D,$44IBDD r ABA ,04PlAAVp AAG 405BAD I@  AABF $40DU A R T 47H4p;5h;,5p;D5h;\5`;t5X; 5P;AS572587-DQ K 5H7D,5P7IBDD r ABA ,t2p7PAAVp AAF 428BAD I@  AABF $6DU A R T 6J6(:AQ6(:AQ7IAP$47IEAL n DA \7n't7~A,39)AAG0 AAE 7;ALD$4;iBBA A(Gr (A ABBK <l4AYBBA A(Gl (A ABBA 44GBAD K0p  AABA 8D  A 8@S8hHAQ8hHAQ9RAP$49REAL n DA \9}'t9}A,5G)AAG0 AAE 9IAL<$6IBBA A(G`y (A ABBD <d6M3BBA A(G`l (A ABBA 46PbBAD K0p  AABA :D  A :(e:Q:Q:dAP$;dEAL n DA D;xQ2\;Q-DQ K |;QD;{A;{A, 8QHAADP AAE $<8RAD@ AA $<@SAK m AF D<SALT8SBBE B(E0A8SC 8A0A(B BBBG $<pDU A R T <j<j=j,=jD=j\=c t=bAS$=bAAR sAA4=`cBAA D0  AABG =d2 >d-DQ K ,>dD,D>dIBDD r ABA 4:e@AAV- AAI 4:fdBAD IP   AABB $>DU A R T  ?n$?nBBB A(A0` (D BBBN TIHALtIH AZTE BBBB B(D0A8Q 8A0A(B BBBA I(Ab,TF}iAAG01 AAD  8A0A(B BBBG <~6AC HD.i. A <~P6BAD M  AABI $̂@]DU A R T H   $<Tl2D,IBDD r ABA $̃0AI z AK $AI z AK $@AI z AK $DAI z AK $lPAI z AK 4܀a6BAH N0  AABB ̄AL$;Ad K A G AL%BBG B(D0A8Ip8D0A(B BBBdZ|ą$$ZB,8AI07 AA 4L{M@AF Io A T@BBB B(A0A8Jm 8A0A(B BBBE T܂=\ABBG B(D0A8R{ 8A0A(B BBBA <4AAC HD.i. A <tPBBAD M  AABH <0DBBBF A(J (A ABBK ć܇ $<Tlxpḧ`XPH,@D8\0t( ԉ2-DQ K <1ATDl1A1A1A1Å1AQhXx1A@QhX<AL\AS|AS0AhQhXԋ0AQhX 0A$QhXD0A\QhX| ASb0AQhXԌD0A0QhX pAS,0ADXQhXd/A|QhXAS/AԍQhX/A QhX,n/ADp/A\r/Att/Av/Ax/Az/AԎ|/A~/A/A/A4/AL/Ad/A|/A/A/Aď/A܏/A/A /A$/A</AT/Al/A/A/A/A̐/A/A/A/A,/AD/A\/At/A/A/A/Aԑ/A/A/A/A4/AL/Ad/A|/A/A/A,ĒxgAAJ P DAA ,gAAJ P DAA ,$gAAJ P DAA T8QhXtxQhXQhXQhXԓ8QhXxQhXQhX4QhXT8QhXtxQhXQhXQhXԔ8QhXxQhXQhX4QhXT8QhXtxQhXQhXQhXԕ8QhXxQhXQhX4QhXT8EAthEAEAEAԖEA(EAXEA4EATEAtEAEAHEAԗxEAEAEA4EAT8EAthEAEAEAԘEA(EAXEA4EATEAtEAEAHEAԙxEAEA(,tBAAR  AAA <\BBE A(M0P (D ABBH ,@3Dy C Z F H H b C $̚PAAI AA,<BBAD V ABH $=D_ A <BBBD A(G` (A ABBD D̗BBBF A(D0 (A BBBA 4`BBAD D@Y  AABH 4LHBBAD D@Y  AABH 40BBAD D@Y  AABH Lt,BBB B(A0A8J@ 8A0A(B BBBG LĜBBB B(A0A8J@ 8A0A(B BBBG L\hTCBBB B(D0A8G@a 8A0A(B BBBA L(|CBIB A(H0MN 0A(A BBBG $ MAZ E ] F 4$pCBAD L@  AABC ,\sCAAN` AAA D )D_ A d )D_ A  )D_ A  )D_ A Ğ )D_ A  )D_ A  )D_ A $ )D_ A D )D_ A $d( MAZ E ] F ,ԛP {DAAJ@ AAC $MAZ E ] F ,,.DAAJ@w AAK $MAZ E ] F ,BDAAJ@w AAK $lMAZ E ] F ,ܜVDAAJ@w AAK $ĠMAZ E ] F ,4jDAAJ@w AAK $MAZ E ] F ,(~DAAJ@w AAK $tMAZ E ] F ,@DAAJ@w AAK $̡0MAZ E ] F ,<XDAAJ@w AAK $$HMAZ E ] F ,pDAAJ@w AAK $|` MAZ E ] F , DAAJ@w AAK $Ԣx"MAZ E ] F D"EDD Y ABG r ABK [ ABJ DDX#EDD Y ABG r ABK [ ABJ D$EDD Y ABG r ABK [ ABJ Dԣ$EDD Y ABG r ABK [ ABJ D%EDD Y ABG r ABK [ ABJ Dd8&EDD Y ABG r ABK [ ABJ D&EDD Y ABG r ABK [ ABJ D'EDD Y ABG r ABK [ ABJ D<`(EDD Y ABG r ABK [ ABJ D)EDD Y ABG r ABK [ ABJ D̥)EDD Y ABG r ABK [ ABJ D*EDD Y ABG r ABK [ ABJ ,@+DAAG@ AAE ,Ԣ+<DAAJ0U AAE ,-<EAAJ0U AAE p|VD  A <T-EBBD A(GP (A ABBB LP0]Dd0BBB B(J0A8 0A(B BBBA  1~G] A X̧1$,1AAQ | AAK 4\2a1EBAA G@  AABI <P3CEBBA A(JP' (A ABBC 4Ԥ4eWEBAD D@  AABB Ĩ6ܨ 6(6 06$(6< 6T6LUU\EBBB B(D0A8G@_ 8A0A(B BBBC T5EBBB B(A0A8G 8A0A(B BBBA D\VZEOEB A(A0w (g }BBA L\WBBP A(A0 (A BBBA h(A BBB4`XBAD Dp  AABA 4:8BAD Dp#  AABA L;BBB B(A0A8Je 8A0A(B BBBA L>EBBE E(A0$8Q@t8A0F (A BBBA 0@LԫX BBB B(A0A8G  8A0A(B BBBA Tl?EBBE B(D0A8M 8A0A(B BBBA LĨpN6FBBE B(D0A8J`) 8A0A(B BBBC LOSFBBE B(D0A8Mp, 8A0A(B BBBE &D]4jLjdha|`ahajAP$̭jEAL n DA (a2$ PasAI b AA $4asAI b AA \8A$awpFAN0N AA $@bAK \ AG ĮbAL<,bFAC HD.. H $lȄT/pHAI0* AA Ldr|r(i iį(iܯ`rAP$`rEAL n DA $h2$<isAI b AA $dhisAI b AA "A$iwKAN0N AA $̰jAK \ AG xjAL<\xjmKAC HD.. H $T/MAI0* AA |@xzpzıpܱpp  zAP$, zEAL n DA Tp2$lpsAI b AA $(qsAI b AA  A$hqwOAN0N AA $qAK \ AG $8rAL<8rPAC HD.. H $̯HT/QAI0* AA ij8ܳ0x x$x<AP$\EAL n DA hx2$xsAI b AA $ĴxsAI b AA  A$L(yw8TAN0N AA $,yAK \ AG TyAL<yTAC HD.. H $ T/8VAI0* AA ܵ; $<Tؐl@2hD,pIBDD r ABA $̶AI z AK $AI z AK 4d1XBAH N0  AABB TAL$tȏ;Ad K A G ATXBBB B(D0A8KA 8A0A(B BBBE 4<(h8YAC HNm.f. F ,`,D85EDA gABdtHBBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA 4$QYAC HK A $\8T/ZAI0* AA <gTl؟̹02XD,`IBDD r ABA $,AI z AK $TAI z AK 4Ķ1^BAH N0  AABB AL$ԺȞ;Ad K A G ATDp%^BBB B(D0A8KA 8A0A(B BBBE 4Hhp^AC HNm.f. F 4x2^AC HK A $$@eT/_AI0* AA x4(L d|h2D,ļIBDD r ABA $AI z AK $@AI z AK 4Ȟ1EBB D(A0m (A BBBF L5ąBBE B(D0A8DP 8D0A(B BBBE TxBBH B(A0A8L  8A0A(B BBBH pXWPW4HWL@Wd8W|0W(W W h8D,p8IBDD r ABA  82$$8sAI b AA $L9sAI b AA thV5P9$X99,AG  AG p:AL$0V;Ad K A G AT\H: 0BBE B(F0A8TZ 8A0A(B BBBF <C]AC HN.0h. J $/舌AI0* AA 4U.'BAD I@  AABF 4TV@BAD I@  AABE 4XWYBAD I@  AABF LXBBE B(F0A8J@ 8D0A(B BBBA ,XAAD T AAA t@YBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA LtYBBE B(E0A8JP 8A0A(B BBBK T D ܎BBH B(A0A8L 8A0A(B BBBD 4}L}d}|}}}}} YD, YIBDD r ABA <0Y2$TXYsAI b AA $|YsAI b AA |5Y$Y9AG  AG [AL$|;Ad K A G ATZ BBE B(F0A8Te 8A0A(B BBBK <d]PAC HN.0h. J $$P/HAI0* AA DLxgb엌AC HN F 1.^..r.LL$蘌BBE B(D0A8T8A0A(B BBB8{2$")BAD D@$<BAAG@{D4x$D $[AAD@$xtAAD@lAD z4zAAP) AAA <T~BAD K  AABA $L AG  AF TtjBB B(A0A8J@e 8A0A(B BBBE `$AG l AK ,Tp ȚAAG  AAA 4<PUBDA w ABO AAB<:BIA A(Q@ (A ABBA `?D i A xAc D D`\BBB A(A0D@. 0A(A BBBE $<aD  I b F Dd8dBBB A(A0D@ 0A(A BBBE @8Av$`hAR } AG d BBB B(A0A8D@v 8A0A(B BBBB  8A0A(B BBBE a 8C0A(B BBBK D 8C0A(B BBBI $TPBBE B(D0A8G 8A0A(B BBBH h,,tlAAMK AAD \ do$txeMAGu AB hod,BBD A(J@ (F ABBD Q (F ABBD z (F ABBK LBBE B(D0A8G 8A0A(B BBBF l`Ac D i4X#AC A J .Q.hLjBBE B(A0A8Gb 8A0A(B BBBA 4DLBE A( ABB|o4kAD@uH`PAXF`AhApd@X AH tqDBBA A(J` (A ABBD Mh~pExFFCFCb`hapAxFAAd`$tXAMG AJ <wkAC HF I .0~.<AI HKa.0Q. G 440AC G. K .lt瞌BBB B(D0A8G 8A0A(B BBBA YnCFFEFCbCFFa<HBBD A(Mz (A ABBJ L<zBBB A(A0J 0A(A BBBB D|4\pkAD@uH`PAXF`AhApd@X AH T~6BBA A(J`~hapAxFAAd`X (A ABBF L4JBBE A(D0L 0A(A BBBF 4oBAD G@}  AABA D^BBA A(G{ (A ABBB 4iBAD G@u  AABI L<hȟGBB I(A0G 0A(A BBBD T쟌BBE B(G0A8P 8A0A(B BBBF T`kBBE B(C0A8J 8A0A(B BBBD $D 0(P0[(A T A Ldڹ$BBE B(D0A8T8A0A(B BBBl2$V۹"áBAD D@$PܹܡAAG@Dݹ$D $4PݹAAD@$\D޹AAD@<8߹AD $\ AI z AK $AI z AK $VAL0Y AI $VAL0Y AI $DWAL0Y AI $4ƢAAP) AAA <ڢBAD K  AABA $/0AI0* AA <$4ABIA A(Q@ (A ABBE Ac D L}EBAD GPy  AABE iX``AhFpAxAdPVDLlGBB I(A0G 0A(A BBBH T<8 BBE B(D0A8GS 8A0A(B BBBD LL@BBE B(A0A8Gb 8A0A(B BBBA <]BAC O&  AABA D$BBA A(G( (A ABBE Tlt̩BBE B(F0A8M5 8A0A(B BBBB T 2 BBB B(D0A8G 8A0A(B BBBA L46۹$BBE B(D0A8T8A0A(B BBB<pT2$۹"ǫBAD D@$ܹૌAAG@ݹ$D $ݹAAD@$,޹AAD@ ߹AD $,SAI z AK $THTAI z AK |T4TʬAAP) AAA < YެBAD K  AABA $T/4AI0* AA <|\tEBIA A(Q@  (A ABBH t_Ac D L؀IBAD GPy  AABE iX``AhFpAxAdPL,h_pGBB I(A0G 0A(A BBBH T|g: BBE B(A0A8G 8A0A(B BBBC LpBBE B(A0A8Gb 8A0A(B BBBA <$@qmBAC O&  AABA Dd sBBA A(G( (A ABBE TwtܳBBE B(F0A8M5 8A0A(B BBBB T$BBB B(D0A8Gr 8A0A(B BBBA B,0DD82$\`AI z AK $AI z AK <pFൌBBD A(G`| (A ABBF ,AAG@ CAG <@BBE A(K0O (C ABBD LBBB B(A0H8G@ 8A0A(B BBBA tAn4AbBAD D@n  CABA 4LAqBAD D@n  CABA $@/0AI0* AA dHp|p+h+`+X+P+H+ @+$8+<@+T8+l0+8+0+(+ +++ + ,+D*\*t*****AP*AP*AP4*APT* l*AS* *AS* *AS* *AS482$L`sAI b AA $tsAI b AA DչADչAչA4)lAn A K E { E P H N A 4L+lAn A K E { E P H N A 48,;ȹBAA G0  AABB 4@-K̹BAA G0  AABF 4<X.kйBAA D0  AABA $t/ԹAAL TH0 $@0AAL 0 $0AAL 1 $41AAL X2 $tP28AAL T2 $2QAAL 3 43;jBAD MP  AABE 4,4RBAD MP  AABF $d5AJ0d AH $h6AG0 AA T07ǺBBE B(D0A8R 8A0A(B BBBH 4 (BAA G@  AABA ,D 8A0A(B BBBG 4 nYBBD A(V0f(J ABBd!XBBE B(D0A8JP 8F0A(B BBBF  8C0A(B BBBF 4ЦoBAD K`  AABE TXBBB B(A0A8J 8A0A(B BBBE DD BBD A(J (A ABBA T8BBB B(D0A8M 8A0A(B BBBA <XBAD O*  AABD 4" BAD J0  AABG T\BBB B(D0A8I/ 8A0A(B BBBA DPBBB A(D0Dq 0A(A BBBH ,#jAAG@ AAE ,, AAR  AAH $\ vAAL`$ nBAD L`D XBBD A(S  (A ABBD T j3BBB B(D0A8O 8A0A(B BBBJ TL!h&BIB B(D0A8U  8A0A(B BBBE D!>qBBD A(Ul (A ABBH T!(A4BBE B(D0A8T  8A0A(B BBBG TD" YGBBB B(D0A8W` 8A0A(B BBBB L"(en:BBE A(F0R! 0A(A BBBG T"HDBBE B(F0A8R)' 8A0A(B BBBI TD#BBD B(A0A8O 8A0A(B BBBF $#x AAL`,# AAI AAC 'DM'DM't'D (2$l$ ALpv AD L(<d(iBBA A(D0P (D ABBA D$N' BFA G(Jy (A ABBG D4%N; BFA G(Jy (A ABBG T|%O BBE B(F0A8J 8A0A(B BBBJ T%c BBE B(D0A8G, 8A0A(B BBBC T,&  BBB B(D0A8G` 8A0A(B BBBB D&0 BBA A(M (A ABBA <&a BBA E(G@ (A ABBJ T '| BBE B(H0A8N 8A0A(B BBBD $+1AG P AG L'! KBBE A(A0J  0A(A BBBH 4'+AAJj AAH +pD e A +:,1,144,:AP$T,:EAL n DA |,`12,1-DQ K ,1D$)1wHAN0N AA $,1`AG0N DA $-02AG g AH D-2ALL)2\BBE A(D0W 0A(A BBBG $-DU A R T -@-X9 .P94$.X@AP$D.X@EAL n DA l.092.X9-DQ K .h9D$+p9wAN0N AA ,,+9AAT@z AAF $/X:AG V AA ~BBA A(JP (A ABBA ,,8@`AEM r AAA T,h@BBB B(A0A8G) 8A0A(B BBBD <-C|BBD A(R (A ABBA TT-F"BBB B(D0A8Jy 8A0A(B BBBF d1I|1I1p'1`I$1XIAAAQ iCAT4.I@BBE B(A0A8G 8A0A(B BBBF T.LmBBE B(D0A8Gt 8A0A(B BBBK T.PBBE B(D0A8Gt 8A0A(B BBBK Tؔ >ДAS<>ДT>ؔ AZt>ؔ >ДAS>Д>ؔ AZ>ؔ >ДAS?Д4?ؔ AZT?ؔ l?ДAS?Д?ؔ AZ?ؔ ?ДAS?Д@ؔ AZ4@ؔ L@ДASl@Д@ؔ AZ@ؔ @ДAS@Д@ؔ AZ\=ؔ!!A[|=!%A[=!)A[=!-A[=!1A[=(!5A[>8!9A[<>H!=A[\>X!AA[|>h!EA[>x!IA[>!MA[>!QA[>!UA[?!YA[BȕATCȕ"A\4CؕATTCؕ"A\tCCCؕCЕCȕCDD4D LDASlDD AZD DASDD AZE ,EASLEdE AZE EASEE AZE  FAS,FDF AZdF |FASFF AZF FAS G$G AZDG \GAS|GG AZG GASGH AZ$H AN g AI V@"FSpBBB B(A0A8JJ 8A0A(B BBBH <WLBBA E(G0 (D ABBJ $T+HU C DT?HU C <dTLBAD G~  AABH T?HU C <T`O BAD G~  AABH U`?dHU C <$UQBAD G~  AABH dU@?HU C <UTBAD G~  AABH U +$HU C U0+>HU C V@+XHU C $VP+rHU C DV`+HU C dVpHQ G DVpVBBD A(O (A ABBD <VYqBAD G  AABF  WPHQ G ,W(cHQ G LWȭvHQ G lWhHQ G WHQ G DW\BBD A(O (A ABBF W`HQ G DX_BBD A(O (A ABBF \XLHQ G D|Xb`BBD A(O (A ABBF XHQ G DXfBBD A(O (A ABBF ,Yh+HU C LYx+HU C lY+0HU C Y+JHU C Y+dHU C ]A4Yh~BAD Oe  AABA ,Z(iAAM\ AAA ,LZiAAM\ AAA ,4^ȵ:AAQ@ AAA ,ZiAAM\ AAA 4ZHjBAD Jh  AABA 4[jBAD Jt  AABA ,_8AAJPV AAD 4|[kBAD Ji  AABA 4[kBAD Og  AABA ,[$AAT AAA ,\@*AAT AAA 4L\(k>AAM AAJ 4\`RAAM$ AAK 4\fAAM AAG <\ozBAD V  AABA ,4]AAM AAH ,d]`AAM AAH ,]AAM AAH ,] AAM AAH ]@+'HU C ^PAHQ G 44^TBAD Gp  AABH Tl^lBBB B(D0A8M& 8A0A(B BBBF |b.Ac E ^HQ G <_%BAD J  AABB D_HQ G <d_0%BAD J  AABB _ HQ G 4_1BAD Gp  AABH _hFHQ G <`%YBAD J  AABB \`+yHU C |`+HU C `+HU C `(+HU C `8+HU C `HHQ G ,aAAT AAE ,LaH,AAM AAH <|aJBAD R  AABA 4teBAD G0d  AABJ a +^HU C <b09xBAD R  AABA , f0<AAQ U FAH ,AAG oDA4dgVAAG g DAK PDALghBBE B(F0A8O 8A0A(B BBBA g^$h(AQ0Y AD L,hBBE A(UP (C ABBJ D(F ABB|hh)DdDh0 BBE A(E0O@ 0A(A BBBH 4hBAC D0o  AABC 4,i`*BAD Gp  AABI diX(Abihip)i+MSLi0 BBB B(E0A8JI 8A0A(B BBBH $jxrD^K TAC K NK 4u>>BAA DpP  AABD 4Tu?wAAM(B0L(A p GAJ ,u0@AAJ AAF uAuA$uAAJ@_ AE v8BbD { A L4vBBBE B(D0A8J 8A0A(B BBBF ,vF6LAM VAALvFBBE B(D0A8Jp 8A0A(B BBBC $wGAOB GDA4,wGAASX``VXAPA AAA ,dwHAAC HDq G w8J,wJTACM(L0b(A OCA$wKyALPI AI xXKDXx`KL4xKBBB B(D0A8De 8A0A(B BBBA dx(MBBE B(D0A8GkEGBVz 8A0A(B BBBF |xU@BBE B(D0A8GvIdFU 8D0A(B BBBA IO^BRIYALlypWSBBB B(D0A8J? 8A0A(B BBBH \y\SBBE B(D0A8G, 8A0A(B BBBC HI_Adz_!BBB B(A0A8Jp 8A0A(B BBBA  8D0A(B BBBA \zHaTBD A(L0z(A ABBI0D(D ABBtzaHBBE B(D0A8GPXM`UXAPI 8A0A(B BBBA D 8C0A(B BBBH IXN`L\{b$BBE B(A0A8Jy 8A0A(B BBBF L{pgBBB B(D0A8Ge 8A0A(B BBBE 4{jrD\K TAC E E C NK $4|Xj}D|A F(V0U\|j<t|j.BBD A(Dp (A ABBK D|lBAD x ABF A DBA j ABC <|lDDC  CBC Q FBG <}m(NI$T}mAL M AE ,|}0nyAAL O AAA }n}nBBB B(D0A8I@ 8C0A(B BBBE  8A0A(B BBBG U 8A0A(B BBBA M 8C0A(B BBBA <\~phAA @ ABK aFB<~ppDAC V ABG A CBB $~pyE{ H V B XHqBEg D Q$xq<qjD @ D 4\q0BAD O`  AABA r-LsBBE B(A0A8Dp| 8A0A(B BBBI 0vcvpW,v!A_LLvBBE B(D0A8I 8A0A(B BBBK <pxBBD A(DP (A ABBA ܀xDIxdGW A L8yBFB B(D0A8G` 8A0A(B BBBF 4d~BAA Dp  AABD TBBE B(D0A8L@d 8C0A(B BBBD UHHPWHA@l@BBB B(D0A8MH}ALBFAW 8A0A(B BBBB TdBBBD A(JOZEEEH^i (A ABBH $UAq F C A DȁAAM t AAK Y AAE D HAC <,nAAJ \ CAD f CAF ICA\l@nBBE B(D0A8J``hGpOxBI`N 8A0A(B BBBE T̃PBBE B(D0A8OHMPMHA@~ 8D0A(B BBBK <$؃>KAI UAAD DDALd؃BBD A(MrEcAJ (A ABBG ̄Dȅ1BBE A(C0JPo 0A(A BBBB ,,D8rDaK TAC H NK \tBBE B(D0A8JgGOBI 8A0A(B BBBD Lԅ؈BBE B(D0A8Gp 8A0A(B BBBK $(<<BAD G`JhFpShA`z  AABH ,|`AAJP{ AAG LdBBB B(D0A8G 8A0A(B BBBA L0<BBB B(A0A8J 8A0A(B BBBA DL BBB A(D0J` 0A(A BBBB LBBB B(A0A8D/ 8A0A(B BBBI 8T0BBE B(D0A8L@i 8C0A(B BBBG XHHPWHA@TTxBBBD A(JTZEEEH^i (A ABBK ,pAAG0 AAI |܈ BBE B(A0A8DXQEEHK& 8A0A(B BBBE wNA\\P4BBE B(D0A8MHEAZ 8A0A(B BBBA l0hBBE B(D0A8PHAATBFAZ 8A0A(B BBBG ,0 D(\0t8,%BAD YAB4ABBD A(M@W(M ABB4ؚLBBD A(P@l(A ABB<,VBBD A(P@RHJPW(D ABB4lJBBD A(P@j(A ABB<(VBBD A(P@RHJPW(D ABB4HBBBD A(P@b(A ABB4`EBBD A(P@b(D ABB4TxDZ B NK TCA G NK Mu8Mudp<BBE B(D0A8G 8A0A(B BBBE BGB^|$H0BBB B(D0A8JK 8D0A(B BBBA LNbEQeFZG\B4AAG T AAI \ FAA |܍BBB B(D0A8M@yHNPTHA@D 8D0A(B BBBI t 8D0D(B BBBL O HPPQ q HMPR L\BBE B(D0A8J 8A0A(B BBBB \ЪBBB B(D0A8J 8D0A(B BBBH R^AL XBBB B(D0A8Jpk 8A0A(B BBBD L\^BBE B(D0A8G` 8D0A(B BBBE L EEE A(D0R (D BBBP a(D BBB<RDD \ ABG A DBI <!A_\t+$}DU G D L hG A DԐ(EDD ~ ABB s ABJ WABZDp L VT<д&BBE A(D0JP`XG`OhBpIP~ 0A(A BBBA TBBE B(D0A8PX]`MXAPW 8A0A(B BBBD 0 DEB T 0",$HAD h HK K AD TXDw E W,tAAG0a AAD ,hrDaK TAC H NK ,ԒrDaK TAC H NK ,rD^K TAC K NK ,4XrD^K TAC K NK |dBBB B(D0A8GDHcE[O_B}HbEX 8A0A(B BBBA \BBE B(D0A8Js 8A0A(B BBBA PK`BLDxHBBE B(A0A8D 8A0A(B BBBD x p,Ĕ%BAD YAB4ABBD A(M@W(M ABB4,LBBD A(P@l(A ABB<dVBBD A(P@RHJPW(D ABB48JBBD A(P@j(A ABB<ܕPVBBD A(P@RHJPW(D ABB4pBBBD A(P@b(A ABB4TEBBD A(P@b(D ABB,rD^K TAC K NK ,uD^N TAC H NN ,@uDaN TAC E NN ,uDaN TAC E NN ,LDkN TAC K NN ,|@uD^N TAC H NN  ė,ܗ%BAD YAB4 ABBD A(M@W(M ABB4DLBBD A(P@l(A ABB<|0VBBD A(P@RHJPW(D ABB4PJBBD A(P@j(A ABB<hVBBD A(P@RHJPW(D ABB44BBBD A(P@b(A ABB4lEBBD A(P@b(D ABB,zDiK TAC H NK ,ԙzDiK TAC H NK ,XzDiK TAC H NK 4,L0%BAD YAB4|0ABBD A(M@W(M ABB4HLBBD A(P@l(A ABB<`VBBD A(P@RHJPW(D ABB4,JBBD A(P@j(A ABB<dVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4ܛEBBD A(P@b(D ABB,DsK TAC F NK 4DHrD\K TAC E E C NK 4|rD\K TAC E E C NK  ̜,X%BAD YAB4XABBD A(M@W(M ABB4LpLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4ĝJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4<BBBD A(P@b(A ABB4tEBBD A(P@b(D ABB,rDaK TAC H NK ,ܞ`rDaK TAC H NK , rDaK TAC H NK $<>AAD uAA,d>BAA vAB,(>TAM VCA<ğ8xBBD A(J0m (A ABBJ \xBBB B(D0A8Jp 8A0A(B BBBF xBGBTp|dBBE B(A0A8D_GcFjOcBB 8A0A(B BBBF MwELBBB B(D0A8G 8A0A(B BBBA \4BBE B(A0A8J 8A0A(B BBBH tU\AdBBE B(A0A8J` 8A0A(B BBBI 8D0A(B BBB\TBE A(D0(A BBBJ0A(D BBBT\0BBE B(D0A8G@` 8C0A(B BBBE fHKPVHA@LzBBE B(D0A8Gw 8A0A(B BBBH ,EAD c ABH 4hhLlFdl ,%BAD YAB4̣ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<<VBBD A(P@RHJPW(D ABB4|JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4, EBBD A(P@b(D ABB\d8AAJ O CAA N(G0E8E@Y F AAH N(H0W(A FAAĥ ܥ,(%BAD YAB4$(ABBD A(M@W(M ABB4\@LBBD A(P@l(A ABB<XVBBD A(P@RHJPW(D ABB4ԦxJBBD A(P@j(A ABB< VBBD A(P@RHJPW(D ABB4LBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rDaK TAC H NK ,0uD^N TAC H NN  4x,L%BAD YAB4|ABBD A(M@W(M ABB4LBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4,@JBBD A(P@j(A ABB<dXVBBD A(P@RHJPW(D ABB4xBBBD A(P@b(A ABB4ܩEBBD A(P@b(D ABB,,0%BAD YAB4\0ABBD A(M@W(M ABB4HLBBD A(P@l(A ABB<̪`VBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB<DVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,DsK TAC F NK 4$HBAD G`_  AABG D\BBE A(D0P@B 0A(A BBBH H,%BAD YAB4ABBD A(M@W(M ABB4$LBBD A(P@l(A ABB<\VBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB<ԭ8VBBD A(P@RHJPW(D ABB4XBBBD A(P@b(A ABB4LpEBBD A(P@b(D ABB,DsK TAC F NK L BBB B(D0A8J 8A0A(B BBBE LFBBF B(A0A8G 8A0A(B BBBF 4TDiK TAC H J F N K O ,rDfK TAC C NK ,`rDfK TAC C NK ,DsK TAC F NK ,DsK TAC F NK ,LprD^K TAC K NK ,|rDaK TAC H NK İ$ܰ 4APD YDA8 DEB T$8DT<@9Q` A \`4DX D P| x,%BAD YAB4ܱABBD A(M@W(M ABB4LBBD A(P@l(A ABB<L0VBBD A(P@RHJPW(D ABB4PJBBD A(P@j(A ABB<IJhVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4<EBBD A(P@b(D ABB,tSAC HG H dKEBB A(A0_ (H BBBH Y (A BBBH Q (H BBBI L  BBB B(D0A8JP} 8D0A(B BBBG ,\rDaK TAC H NK ,rDaK TAC H NK 0 Դ(,%BAD YAB4ABBD A(M@W(M ABB4TLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4̵JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4D(BBBD A(P@b(A ABB4|@EBBD A(P@b(D ABBX,̶%BAD YAB4ABBD A(M@W(M ABB44LBBD A(P@l(A ABB<lVBBD A(P@RHJPW(D ABB40JBBD A(P@j(A ABB<HVBBD A(P@RHJPW(D ABB4$hBBBD A(P@b(A ABB4\EBBD A(P@b(D ABB,rDaK TAC H NK ĸ ܸ,X%BAD YAB4$XABBD A(M@W(M ABB4\pLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4ԹJBBD A(P@j(A ABB< VBBD A(P@RHJPW(D ABB4LBBBD A(P@b(A ABB4EBBD A(P@b(D ABB Ժ,%BAD YAB4ABBD A(M@W(M ABB4TLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4̻JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4DBBBD A(P@b(A ABB4| EBBD A(P@b(D ABB8 ̼0,%BAD YAB4ABBD A(M@W(M ABB4LLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4ĽJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4<0BBBD A(P@b(A ABB4tHEBBD A(P@b(D ABB` ľX,ܾ%BAD YAB4 ABBD A(M@W(M ABB4DLBBD A(P@l(A ABB<|VBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB<8VBBD A(P@RHJPW(D ABB44XBBBD A(P@b(A ABB4lpEBBD A(P@b(D ABB,rDaK TAC H NK ,`%BAD YAB4`ABBD A(M@W(M ABB4TxLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4DBBBD A(P@b(A ABB4|EBBD A(P@b(D ABB,rD^K TAC K NK h,%BAD YAB4,ABBD A(M@W(M ABB4dLBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4@JBBD A(P@j(A ABB<XVBBD A(P@RHJPW(D ABB4TxBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rD^K TAC K NK ,rD^K TAC K NK ,$HrDaK TAC H NK T,l %BAD YAB4 ABBD A(M@W(M ABB48LBBD A(P@l(A ABB< PVBBD A(P@RHJPW(D ABB4LpJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,4DsK TAC F NK ,d8rDaK TAC H NK  ,%BAD YAB4ABBD A(M@W(M ABB4,LBBD A(P@l(A ABB<d(VBBD A(P@RHJPW(D ABB4HJBBD A(P@j(A ABB<`VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4TEBBD A(P@b(D ABB , %BAD YAB4 ABBD A(M@W(M ABB4$8LBBD A(P@l(A ABB<\PVBBD A(P@RHJPW(D ABB4pJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4LEBBD A(P@b(D ABB,rD^K TAC K NK ,(rD^K TAC K NK ,xrDaK TAC H NK ,rD^K TAC K NK ,D DsK TAC F NK ,tx DsK TAC F NK , DsK TAC F NK 8 0 , %BAD YAB44 ABBD A(M@W(M ABB4l LBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB< VBBD A(P@RHJPW(D ABB4\0 BBBD A(P@b(A ABB4H EBBD A(P@b(D ABB,` rDaK TAC H NK , rDaK TAC H NK ,, rDaK TAC H NK ,\P rDaK TAC H NK , rDaN TAC E NK 4 rD\K TAC E E C NK 48 rD\K TAC E E C NK ,, DsK TAC F NK 4\ rD\K TAC E E C NK 4(DHN TAC F E C NN  ,%BAD YAB4,ABBD A(M@W(M ABB4d(LBBD A(P@l(A ABB<@VBBD A(P@RHJPW(D ABB4`JBBD A(P@j(A ABB<xVBBD A(P@RHJPW(D ABB4TBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,DsK TAC F NK ,(DsK TAC F NK ,$DsK TAC F NK ,TDsK TAC F NK ,HDsK TAC F NK ,DsN TAC C NK  ,x%BAD YAB4DxABBD A(M@W(M ABB4|LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<,VBBD A(P@RHJPW(D ABB4lBBBD A(P@b(A ABB4EBBD A(P@b(D ABBD0DK A NG E(E0YC E NH WCA,$DsK TAC F NK ,TDsK TAC F NK ,xDsK TAC F NK ,DsN TAC C NK ,8DsN TAC C NN ,DsN TAC C NN ,DrDaK TAC H NK ,tHrDaK TAC H NK ,rDaK TAC H NK ,rDaK TAC H NK ,8rDaK TAC H NK ,4rD^K TAC K NK d,|`%BAD YAB4`ABBD A(M@W(M ABB4xLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4\JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4 EBBD A(P@b(D ABB4DzDbM RAI A I M J H|` X,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<LVBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB<8VBBD A(P@RHJPW(D ABB4XBBBD A(P@b(A ABB4<pEBBD A(P@b(D ABBt,%BAD YAB4ABBD A(M@W(M ABB4(LBBD A(P@l(A ABB<,@VBBD A(P@RHJPW(D ABB4l`JBBD A(P@j(A ABB<xVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,TrD^K TAC K NK ,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<<VBBD A(P@RHJPW(D ABB4|JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4(BBBD A(P@b(A ABB4,@EBBD A(P@b(D ABB,dXrDfK TAC C NK ,0%BAD YAB40ABBD A(M@W(M ABB4HLBBD A(P@l(A ABB<L`VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4<EBBD A(P@b(D ABB4trD\K TAC E E C NK ,0zDkK TAC F NK ,zDkK TAC F NK , rDaK TAC H NK ,< rDaK TAC H NK ,lp DkN TAC K NK , uDaN TAC E NN , !DkN TAC K NN ,!DkN TAC K NN ,!,Dh"%BAD YAB4th"ABBD A(M@W(M ABB4"LBBD A(P@l(A ABB<"VBBD A(P@RHJPW(D ABB4$"JBBD A(P@j(A ABB<\"VBBD A(P@RHJPW(D ABB4"BBBD A(P@b(A ABB4#EBBD A(P@b(D ABB,  #rD^K TAC K NK <p#,T#%BAD YAB4#ABBD A(M@W(M ABB4$LBBD A(P@l(A ABB<($VBBD A(P@RHJPW(D ABB44H$JBBD A(P@j(A ABB<l`$VBBD A(P@RHJPW(D ABB4$BBBD A(P@b(A ABB4$EBBD A(P@b(D ABB,$rDfK TAC C NK ,L%rD^K TAC K NK ,|P%rDaK TAC H NK ,%rD^K TAC K NK 4%DcK TAC F E K NK ,H&rDeK TAC D NK D&,\ '%BAD YAB4 'ABBD A(M@W(M ABB48'LBBD A(P@l(A ABB<P'VBBD A(P@RHJPW(D ABB4<p'JBBD A(P@j(A ABB<t'VBBD A(P@RHJPW(D ABB4'BBBD A(P@b(A ABB4'EBBD A(P@b(D ABB,$'rD^K TAC K NK T(( l (,(%BAD YAB4(ABBD A(M@W(M ABB4(LBBD A(P@l(A ABB<$(VBBD A(P@RHJPW(D ABB4d(JBBD A(P@j(A ABB<)VBBD A(P@RHJPW(D ABB4 )BBBD A(P@b(A ABB48)EBBD A(P@b(D ABBLP),d)%BAD YAB4)ABBD A(M@W(M ABB4)LBBD A(P@l(A ABB<*VBBD A(P@RHJPW(D ABB4D(*JBBD A(P@j(A ABB<|@*VBBD A(P@RHJPW(D ABB4`*BBBD A(P@b(A ABB4x*EBBD A(P@b(D ABB,,*rDfK TAC C NK ,\*rDaK TAC H NK ,0+rDaK TAC H NK ,+zDkK TAC F NK ,+zDkK TAC F NK , ,rDaN TAC E NK ,Lp,uDaN TAC E NN ,|,DkN TAC K NN , -DkN TAC K NN ,-DkN TAC K NN , -DkN TAC K NN ,<@.DkN TAC K NN ,l.rDaK TAC H NK ,.rD^K TAC K NK ,@/zDkK TAC F NK ,/rDhK TAC A NK ,,/zDhN TAC F NK ,\00uDeN TAC A NN ,0}DhN TAC F NN ,0uDeN TAC A NN  1 1,1%BAD YAB4L1ABBD A(M@W(M ABB41LBBD A(P@l(A ABB<1VBBD A(P@RHJPW(D ABB41JBBD A(P@j(A ABB<41VBBD A(P@RHJPW(D ABB4t2BBBD A(P@b(A ABB402EBBD A(P@b(D ABBH2 @2,2%BAD YAB4D2ABBD A(M@W(M ABB4|2LBBD A(P@l(A ABB<2VBBD A(P@RHJPW(D ABB43JBBD A(P@j(A ABB<, 3VBBD A(P@RHJPW(D ABB4l@3BBBD A(P@b(A ABB4X3EBBD A(P@b(D ABB,p3zDkK TAC F NK , 3zDkK TAC F NK ,<4zDkK TAC F NK ,l`4zDkK TAC F NK ,4DkN TAC K NK ,5DkN TAC K NN ,p5DkN TAC K NN ,,5DkN TAC K NN \06,t6%BAD YAB46ABBD A(M@W(M ABB46LBBD A(P@l(A ABB<6VBBD A(P@RHJPW(D ABB4T7JBBD A(P@j(A ABB< 7VBBD A(P@RHJPW(D ABB4@7BBBD A(P@b(A ABB4X7EBBD A(P@b(D ABB,<p7rD^K TAC K NK ,l7zDkK TAC F NK ,8rDaK TAC H NK ,`8rD^K TAC K NK ,8rD^K TAC K NK ,,9rD^N TAC H NK \P9,t9%BAD YAB49ABBD A(M@W(M ABB49LBBD A(P@l(A ABB<:VBBD A(P@RHJPW(D ABB4T(:JBBD A(P@j(A ABB<@:VBBD A(P@RHJPW(D ABB4`:BBBD A(P@b(A ABB4x:EBBD A(P@b(D ABB,<:rDfK TAC C NK ,l:rDaK TAC H NK 0;,;%BAD YAB4;ABBD A(M@W(M ABB4;LBBD A(P@l(A ABB<T;VBBD A(P@RHJPW(D ABB4LBBD A(P@l(A ABB<>VBBD A(P@RHJPW(D ABB48>JBBD A(P@j(A ABB<<P>VBBD A(P@RHJPW(D ABB4|p>BBBD A(P@b(A ABB4>EBBD A(P@b(D ABB,>rDaK TAC H NK ,>rDaK TAC H NK ,L@?rDaK TAC H NK |?,@%BAD YAB4@ABBD A(M@W(M ABB40@LBBD A(P@l(A ABB<4H@VBBD A(P@RHJPW(D ABB4th@JBBD A(P@j(A ABB<@VBBD A(P@RHJPW(D ABB4@BBBD A(P@b(A ABB4$@EBBD A(P@b(D ABB,\@rDaK TAC H NK , ArDaK TAC H NK ,pArDaK TAC H NK ,ArDaK TAC H NK ,BrDaK TAC H NK ,L`BrDaN TAC E NK ,|BuDaN TAC E NN ,CuDaN TAC E NN ,PCuDaN TAC E NN , CrDaK TAC H NK ,<CrD^K TAC K NK ,l@DrD^K TAC K NK D,E%BAD YAB4EABBD A(M@W(M ABB40ELBBD A(P@l(A ABB<THEVBBD A(P@RHJPW(D ABB4hEJBBD A(P@j(A ABB<EVBBD A(P@RHJPW(D ABB4 EBBBD A(P@b(A ABB4DEEBBD A(P@b(D ABB,|ErDaK TAC H NK , FrD^K TAC K NK ,pFrD^K TAC K NK , FrDaK TAC H NK ,< GrDaK TAC H NK l `G, G%BAD YAB4 GABBD A(M@W(M ABB4 HLBBD A(P@l(A ABB<$ HVBBD A(P@RHJPW(D ABB4d 8HJBBD A(P@j(A ABB< PHVBBD A(P@RHJPW(D ABB4 pHBBBD A(P@b(A ABB4 HEBBD A(P@b(D ABB,L HrD^K TAC K NK | H, xI%BAD YAB4 xIABBD A(M@W(M ABB4 ILBBD A(P@l(A ABB<4 IVBBD A(P@RHJPW(D ABB4t IJBBD A(P@j(A ABB< IVBBD A(P@RHJPW(D ABB4 JBBBD A(P@b(A ABB4$ JEBBD A(P@b(D ABB,\ 0JrDaK TAC H NK  J, K%BAD YAB4 KABBD A(M@W(M ABB4  KLBBD A(P@l(A ABB<D8KVBBD A(P@RHJPW(D ABB4XKJBBD A(P@j(A ABB<pKVBBD A(P@RHJPW(D ABB4KBBBD A(P@b(A ABB44KEBBD A(P@b(D ABB,lKrD^K TAC K NK L,L%BAD YAB4LABBD A(M@W(M ABB4LLBBD A(P@l(A ABB<TLVBBD A(P@RHJPW(D ABB4LJBBD A(P@j(A ABB<MVBBD A(P@RHJPW(D ABB4  MBBBD A(P@b(A ABB4D8MEBBD A(P@b(D ABB,|PMrDaK TAC H NK M,(N%BAD YAB4(NABBD A(M@W(M ABB4,@NLBBD A(P@l(A ABB<dXNVBBD A(P@RHJPW(D ABB4xNJBBD A(P@j(A ABB<NVBBD A(P@RHJPW(D ABB4NBBBD A(P@b(A ABB4TNEBBD A(P@b(D ABB,NrDaK TAC H NK 0O,O%BAD YAB4OABBD A(M@W(M ABB4<OLBBD A(P@l(A ABB<tOVBBD A(P@RHJPW(D ABB4PJBBD A(P@j(A ABB< PVBBD A(P@RHJPW(D ABB4,@PBBBD A(P@b(A ABB4dXPEBBD A(P@b(D ABB,pPrD^K TAC K NK P,HQ%BAD YAB4HQABBD A(M@W(M ABB4L`QLBBD A(P@l(A ABB<xQVBBD A(P@RHJPW(D ABB4QJBBD A(P@j(A ABB<QVBBD A(P@RHJPW(D ABB4<QBBBD A(P@b(A ABB4tQEBBD A(P@b(D ABB,RrDaK TAC H NK PR,R%BAD YAB4$RABBD A(M@W(M ABB4\RLBBD A(P@l(A ABB<SVBBD A(P@RHJPW(D ABB4(SJBBD A(P@j(A ABB< @SVBBD A(P@RHJPW(D ABB4L`SBBBD A(P@b(A ABB4xSEBBD A(P@b(D ABB,SrD^K TAC K NK S,hT%BAD YAB44hTABBD A(M@W(M ABB4lTLBBD A(P@l(A ABB<TVBBD A(P@RHJPW(D ABB4TJBBD A(P@j(A ABB<TVBBD A(P@RHJPW(D ABB4\TBBBD A(P@b(A ABB4UEBBD A(P@b(D ABB, UrD^K TAC K NK pU,U%BAD YAB4DUABBD A(M@W(M ABB4|VLBBD A(P@l(A ABB<(VVBBD A(P@RHJPW(D ABB4HVJBBD A(P@j(A ABB<,`VVBBD A(P@RHJPW(D ABB4lVBBBD A(P@b(A ABB4VEBBD A(P@b(D ABB,VzDkK TAC F NK  W,$W%BAD YAB4TWABBD A(M@W(M ABB4WLBBD A(P@l(A ABB<WVBBD A(P@RHJPW(D ABB4WJBBD A(P@j(A ABB<<WVBBD A(P@RHJPW(D ABB4|XBBBD A(P@b(A ABB4(XEBBD A(P@b(D ABB,@XrDeK TAC D NK  X,4 Y%BAD YAB4d YABBD A(M@W(M ABB4 0YLBBD A(P@l(A ABB< HYVBBD A(P@RHJPW(D ABB4!hYJBBD A(P@j(A ABB<L!YVBBD A(P@RHJPW(D ABB4!YBBBD A(P@b(A ABB4!YEBBD A(P@b(D ABB,!YrDaK TAC H NK ," Z,D"Z%BAD YAB4t"ZABBD A(M@W(M ABB4"ZLBBD A(P@l(A ABB<"ZVBBD A(P@RHJPW(D ABB4$#ZJBBD A(P@j(A ABB<\#[VBBD A(P@RHJPW(D ABB4#0[BBBD A(P@b(A ABB4#H[EBBD A(P@b(D ABB, $`[rDeK TAC D NK <$[,T$8\%BAD YAB4$8\ABBD A(M@W(M ABB4$P\LBBD A(P@l(A ABB<$h\VBBD A(P@RHJPW(D ABB44%\JBBD A(P@j(A ABB<l%\VBBD A(P@RHJPW(D ABB4%\BBBD A(P@b(A ABB4%\EBBD A(P@b(D ABB,&\rDaK TAC H NK L&@],d&]%BAD YAB4&]ABBD A(M@W(M ABB4&]LBBD A(P@l(A ABB<']VBBD A(P@RHJPW(D ABB4D'^JBBD A(P@j(A ABB<|'0^VBBD A(P@RHJPW(D ABB4'P^BBBD A(P@b(A ABB4'h^EBBD A(P@b(D ABB,,(^rDaK TAC H NK \(^,t(X_%BAD YAB4(X_ABBD A(M@W(M ABB4(p_LBBD A(P@l(A ABB<)_VBBD A(P@RHJPW(D ABB4T)_JBBD A(P@j(A ABB<)_VBBD A(P@RHJPW(D ABB4)_BBBD A(P@b(A ABB4*_EBBD A(P@b(D ABB,<*`rDaK TAC H NK l*`` *X`,*`%BAD YAB4*`ABBD A(M@W(M ABB4+`LBBD A(P@l(A ABB<<+aVBBD A(P@RHJPW(D ABB4|+0aJBBD A(P@j(A ABB<+HaVBBD A(P@RHJPW(D ABB4+haBBBD A(P@b(A ABB4,,aEBBD A(P@b(D ABBd,a,|, b%BAD YAB4, bABBD A(M@W(M ABB4,8bLBBD A(P@l(A ABB<-PbVBBD A(P@RHJPW(D ABB4\-pbJBBD A(P@j(A ABB<-bVBBD A(P@RHJPW(D ABB4-bBBBD A(P@b(A ABB4 .bEBBD A(P@b(D ABB,D.brD^K TAC K NK ,t.(crD^K TAC K NK ,.xczDkK TAC F NK ,.crDaK TAC H NK ,/drDaK TAC H NK ,4/hdrD^N TAC H NK d/d,|/@e%BAD YAB4/@eABBD A(M@W(M ABB4/XeLBBD A(P@l(A ABB<0peVBBD A(P@RHJPW(D ABB4\0eJBBD A(P@j(A ABB<0eVBBD A(P@RHJPW(D ABB40eBBBD A(P@b(A ABB4 1eEBBD A(P@b(D ABB4D1erD\K TAC E E C NK |1@f,1f%BAD YAB41fABBD A(M@W(M ABB41fLBBD A(P@l(A ABB<42fVBBD A(P@RHJPW(D ABB4t2gJBBD A(P@j(A ABB<20gVBBD A(P@RHJPW(D ABB42PgBBBD A(P@b(A ABB4$3hgEBBD A(P@b(D ABB,\3grDaK TAC H NK 3g,3Xh%BAD YAB43XhABBD A(M@W(M ABB4 4phLBBD A(P@l(A ABB<D4hVBBD A(P@RHJPW(D ABB44hJBBD A(P@j(A ABB<4hVBBD A(P@RHJPW(D ABB44hBBBD A(P@b(A ABB445hEBBD A(P@b(D ABB4l5irD\K TAC E E C NK 5Xi,5i%BAD YAB45iABBD A(M@W(M ABB4$6iLBBD A(P@l(A ABB<\6jVBBD A(P@RHJPW(D ABB460jJBBD A(P@j(A ABB<6HjVBBD A(P@RHJPW(D ABB47hjBBBD A(P@b(A ABB4L7jEBBD A(P@b(D ABB,7jzDkK TAC F NK 7j 7j,7Xk%BAD YAB48XkABBD A(M@W(M ABB4L8pkLBBD A(P@l(A ABB<8kVBBD A(P@RHJPW(D ABB48kJBBD A(P@j(A ABB<8kVBBD A(P@RHJPW(D ABB4<9kBBBD A(P@b(A ABB4t9kEBBD A(P@b(D ABB9l,9l%BAD YAB49lABBD A(M@W(M ABB4,:lLBBD A(P@l(A ABB<d:lVBBD A(P@RHJPW(D ABB4:lJBBD A(P@j(A ABB<:lVBBD A(P@RHJPW(D ABB4;mBBBD A(P@b(A ABB4T;(mEBBD A(P@b(D ABB;@m,;m%BAD YAB4;mABBD A(M@W(M ABB4 <mLBBD A(P@l(A ABB<D<mVBBD A(P@RHJPW(D ABB4<nJBBD A(P@j(A ABB<< nVBBD A(P@RHJPW(D ABB4<@nBBBD A(P@b(A ABB44=XnEBBD A(P@b(D ABB,l=pnGAJ E NH \CA,=nGAJ E NH \CA,=nuD^N TAC H NN ,=ouD^N TAC H NN ,,>PouD^N TAC H NN ,\>ouDaN TAC E NN 4>oD\N TAC J E K NN ,>HpDkN TAC K NN ,>puDaN TAC E NN ,$?pDkN TAC K NN ,T?XqDkN TAC K NN ,?qDkN TAC K NN ,?rDkN TAC K NN ,?xrDkN TAC K NN ,@rDkN TAC K NN ,D@8sDkN TAC K NN ,t@sJAJ E NK \CA,@sDkN TAC K NN ,@tJAJ E NK \CA,A8tuDaN TAC E NN 44AtD\N TAC J E K NN ,lAtuD^N TAC H NN ,A0uDkN TAC K NN ,AuDkN TAC K NN ,AuDkN TAC K NN ,,BPvDkN TAC K NN ,\BvDkN TAC K NN ,BwDkN TAC K NN ,BpwDkN TAC K NN ,BwDkN TAC K NN C0x,4Cx%BAD YAB4dCxABBD A(M@W(M ABB4CxLBBD A(P@l(A ABB<CxVBBD A(P@RHJPW(D ABB4DyJBBD A(P@j(A ABB<LD yVBBD A(P@RHJPW(D ABB4D@yBBBD A(P@b(A ABB4DXyEBBD A(P@b(D ABB,DpyrDaK TAC H NK ,,EyrD^K TAC K NK ,\EzrD^K TAC K NK E`z,Ez%BAD YAB4EzABBD A(M@W(M ABB4 F{LBBD A(P@l(A ABB<DF{VBBD A(P@RHJPW(D ABB4F8{JBBD A(P@j(A ABB<FP{VBBD A(P@RHJPW(D ABB4Fp{BBBD A(P@b(A ABB44G{EBBD A(P@b(D ABB,lG{rD^K TAC K NK ,G{rDaK TAC H NK ,G@|rDaK TAC H NK ,G|rDaK TAC H NK ,,H|rDaK TAC H NK ,\H0}rDaK TAC H NK H},H~%BAD YAB4H~ABBD A(M@W(M ABB4 I ~LBBD A(P@l(A ABB<DI8~VBBD A(P@RHJPW(D ABB4IX~JBBD A(P@j(A ABB<Ip~VBBD A(P@RHJPW(D ABB4I~BBBD A(P@b(A ABB44J~EBBD A(P@b(D ABB,lJ~rD^K TAC K NK J,J%BAD YAB4JABBD A(M@W(M ABB4KLBBD A(P@l(A ABB<TKVBBD A(P@RHJPW(D ABB4KJBBD A(P@j(A ABB<KVBBD A(P@RHJPW(D ABB4 L BBBD A(P@b(A ABB4DL8EBBD A(P@b(D ABB,|LPrD^K TAC K NK L,L(%BAD YAB4L(ABBD A(M@W(M ABB4,M@LBBD A(P@l(A ABB<dMXVBBD A(P@RHJPW(D ABB4MxJBBD A(P@j(A ABB<MVBBD A(P@RHJPW(D ABB4NBBBD A(P@b(A ABB4TNȁEBBD A(P@b(D ABB,NrD^K TAC K NK ,N0rDaK TAC H NK N,O%BAD YAB44OABBD A(M@W(M ABB4lO LBBD A(P@l(A ABB<O8VBBD A(P@RHJPW(D ABB4OXJBBD A(P@j(A ABB<PpVBBD A(P@RHJPW(D ABB4\PBBBD A(P@b(A ABB4PEBBD A(P@b(D ABB,PrDeK TAC D NK P,Q%BAD YAB4DQABBD A(M@W(M ABB4|QLBBD A(P@l(A ABB<QȄVBBD A(P@RHJPW(D ABB4QJBBD A(P@j(A ABB<,RVBBD A(P@RHJPW(D ABB4lR BBBD A(P@b(A ABB4R8EBBD A(P@b(D ABB,RPrD^K TAC K NK  S,$S(%BAD YAB4TS(ABBD A(M@W(M ABB4S@LBBD A(P@l(A ABB<SXVBBD A(P@RHJPW(D ABB4TxJBBD A(P@j(A ABB<=5AO0N AA $D|X?AK ` AC Dl|LBBE A(D0LP 0A(A BBBH LxxNP5BBE B(D0A8L@z 8D0A(B BBBE d}(OFBBB B(A0A8DP 8A0A(B BBBD T 8F0A(B BBBA l}PdBFB B(D0A8JP 8A0A(B BBBD  8D0A(B BBBG w 8A0A(B BBBG t8F0A(B BBBTLz> t5BBG B(A0A8O8 8A0A(B BBBH ,zH5AAG0 AAA 4zI6BAD J0  AABA ~M&D]~\',<{P6AAG0G AAA $$XQAG @ AG LQAP<{Q6BBD A(J@p (A ABBA 4{PS6BAD S0-  AABA 4,|T6AAT AAF Ld|PW[7BBB A(D0N 0A(A BBBE l0L&D]H\2p\",\AA AA CA$\AAA ]1$]r,<^yAAGp AAE $l`bAO0C EP ,dAAJ vAA$āXgAAJ AA$gAAJ uDA8hsLt~[7BBE B(A0A8Jp 8A0A(B BBBA $|PhAU o AJ ,HBAD  ABH ,ԂKAAN [ DAH ,AAD T AAA t4XBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA <BBE A(D0 (E ABBI gigBBH B(D0A8RJGGGGN}MGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGMHMGGGGIUMGGGGIiMGGGGMpMGGGGIiMGGGGIiMGGGGMN 8A0A(B BBBA RGGGGLRGGGGLkMGGGGIUMGGGGIJGGGGNJGGGGQJGGGGQJGGGGQ~JGGGGQJGGGGUJGGGGQJGGGGQJGGGGUJGGGGUJGGGGUJGGGGQ0JGGGGQJGGGGUJGGGGUJGGGGUJGGGGUJGGGGQJGGGGUJGGGGQJGGGGQJGGGGQJGGGGQ3JGGGGUJGGGGUJGGGGUJGGGGUJGGGGUJGGGGUJGGGGUJGGGGQJGGGGUJGGGGQJGGGGQeMGGGGI@MGGGGIH MGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIEMGGGGIMGGGGIEMGGGGICMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIMGGGGIEMGGGGIMGGGGIMGGGGIMGGGGIDMGGGGIL-BBI B(H0A8LP 8A0A(B BBBA ,p7AHG l AAA |P>D  A 1,aAAK@ AAG $AK i AJ , IAAGp AAD D*}7BBB A(H0NPV 0A(A BBBA MD  A '0\D  A ܏'DHlD  A '6,,(mAAM@ EAM \{D  A |0*=HD  A 8*̐D  A  *xD  A $nJ'$<)AI z AK $dx*AI z AK +0$+ JP0 AF $G7AI0 AA I'$ ,AI z AK $4H-AI z AK \-%t.,.,AAK@ AAA /WAK IA,ܒ00AAKp AAA $TG9AI0 AA 43zL@51dh52|fHA$x5AI z AK $6AI z AK 6P: ,H:AA AA CAD:y$\ ;AAA;,,;nBAA  ABJ ̔===:,8=AAJ AA$D>AAJ {DA$lP?AAJ zAA,?AAJ AAD XB]<BBA A(J) (A ABBK  D E Nd,`)KBE A(D0(A BBBK0O (A BBBJ TܒwCBBB B(A0A8D 8A0A(B BBBA <JAD N DBE PP Dt$CAC HK E ]._.. ._.$xGDAI0 AA 2D,]>GAAKP AAD <D^ZPGBBA A(G` (A ABBE <Txlph,`pGAG _ AH ̘ BXWt<BBA A(Dp (A ABBA TX.D e$lpnAK | IG ,BAD FBdęBBD B(A0A8Of 8A0A(B BBBE  8F0A(B BBBE D,BBD A(TP7XR`VXAPY (A ABBD 4t8!AAQ i AAB FAT"GBBE B(D0A8Q 8A0A(B BBBA <&BBD A(Q0C (A ABBE dD(BBF B(D0A8OP 8F0A(B BBBH D8C0A(B BBBd *BBF B(E0A8M`i 8F0A(B BBBI D8C0A(B BBBLx,sBBD A(R0/ (A ABBH D(G GBBdd-nBBD B(D0A8Q`[ 8C0A(B BBBI 8D0I(B BBB,̜.UBAC KABd. BBB B(D0A8SPz 8A0A(B BBBA U8F0A(B BBBLd0BBD A(R0z (C ABBC ` (A ABBJ (2D̝`2-x2><D2VGBBA A(N` (A ABBA 4<ZMBAD q DBJ AABTZGBBB B(A0A8R_ 8A0A(B BBBA T`^GBBB B(A0A8R 8A0A(B BBBA ,$a5EDA gAB,Ta5EDA gAB,̛x3#7HAEG  AAA x5AX<ԟaBBA A(G@ (A ABBB L\xb{HHBBL B(D0A8G@ 8A0A(B BBBF LdIBBB B(D0A8G@ 8A0A(B BBBE LgLBBB B(A0A8J@ 8A0A(B BBBG DLH4}$JBBD A(JI (A ABBF ,LhAAD T AAA t| iBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA ,iAAD T AAA t$jBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA LjBBB B(D0A8G@m 8A0A(B BBBE <47:pJAC HK. . A LtkJBBL B(D0A8GP 8A0A(B BBBF Lğ`m JBBB B(D0A8G@g 8A0A(B BBBK T@EFKBBB B(D0A8G 8A0A(B BBBE dl8L4KBBB B(A0A8Mu 8A0A(B BBBJ DGDDy$DU A R T 8n2̤07A$HnAI z AK $ nAI z AK $4XoAI z AK $\oAI z AK $hpAI z AK pĥs,ܥsAA AA CA$ PtAAA,4teBAA O ABJ dv| vv, v]AAJ NAA$ܦPwrAAJ `DA$wAAJ zAA,,xHAAJ 9AA$ALAI0r7 AA ̣zoRBBB A(D0JoJGGNJGGQoGJGL@GJGLXGJGLJGGUJGGQJGGUJGGUFGJGPIGJGPKGJGPIGJGPJGGUJGGQJGGQJGGUJGGQJGGUJGGU 0A(A BBBB GGJLGGGUJGGUJGGUJGGUJGGUJGGQJGGQJGGUJGGQJGGUJGGUJGGUJGGUJGGUJGGUJGGUJGJIJGGNJGGQJGGQJGGUJGGUJGGUJGGQJGGQJGGUEGJGPJGGQhGJGLJGGQhGJGLmGJGLJGGUJGGQxGJGL}GJGLJGGQJGGQoGJGLbGJGPKGJGLJGGQJGGUJGGUJGGQJGGQJGGQJGGQJGGQJGGQJGGQJGGUJGGQJGGQJGGQJGGQJGGUJGGQJGGUJGGUJGGQJGGQJGGQJGGUJGGUJGGQ[GJGPJGGUDGJGPJGGUJGGQJGGQJGGQIJGGUTܫRBBB B(A0A8D 8A0A(B BBBA 44`RAJ Cs. Y F C.$;<+'Tfl",AA AA CA$xAAA|ܰZABBD A(G0J _ J G G G G N  J G G G G N  J G G G G Q  0A(A BBBA  J G G G G Q  J G G G G Q  J G G G G Q  J G G G G U  J G G G G Q  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U ] J G G G G Q  J G G G G U  J G G G G Q  J G G G G Q  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G Q  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U \'Bt( ((fp([$Զ(AU o AJ TDP)RBBB B(D0A8OG 8A0A(B BBBA T4C D 9 A t,0=C D 9 A ,6ķFC D 9 A 4,BAF O@ DABO&D]L4/BBB B(A0A8DPl 8A0A(B BBBA 1FD02BBB B(A0A8= 0A(B BBBH $3AAJ@AA< 4zBAD JpZxAoxApT  AABA $L4AG@Q AF ,5;SAG _ AH 47BAD J`  AABF ܹ:G  A TD;-SBBB B(A0A8M 8A0A(B BBBA T8CnRSBBE B(D0A8PC 8A0A(B BBBC PID@ A ̺PM&D]LIBBG B(A0A8LpM 8F0A(B BBBI <4HKoBBF A(LF(D ABB<txMBBF A(O0j (G ABBH N,N;iSAG _ AH P G A Q$G A 4<RBAD To  AABB 4SSAAG AAC ,@UWSAAGp AAG dܼpVBBD B(D0A8Tp? 8F0A(B BBBG u 8C0A(B BBBG ,XjSAAGp  AAD <tHYPBBD A(Tp (A ABBJ J&D]̽@ZZJC D 9 A h[:L[BBB B(A0A8D8A0A(B BBBDl ]BBE B(D0A8I`8D0A(B BBBD]BBE B(D0A8Ip8D0A(B BBBL@^"BBE B(D0A8I8D0A(B BBBL _d_|PR&D]'$^AI z AK $Կh_AI z AK $_ AG0 MQ $`S$Q.SAI0q* AA dX|zzzz`2rAL PzBBB B(A0A8GP 8A0A(B BBBG ,@`(VAAG@ AAA D`BBB A(D0G` 0A(A BBBC L{BBB B(A0A8M 8A0A(B BBBC TlhbVBBB B(A0A8J 8A0A(B BBBC Lľ}VBBF B(D0A8Mp 8A0A(B BBBG TdWBBB B(A0A8J 8A0A(B BBBC DlH~wgWBBB A(A0L` 0A(A BBBB T`g WBBB B(D0A8Oz 8A0A(B BBBH L sQWBBB B(A0A8Lp 8A0A(B BBBG $|nD A G J <TlTcPHI)+,TDg\@t8Ip)+D0k,D g;D v48D@zLDpK M l ) =X|&D]<PBE D(A0b(A FBTL<@BBB B(A0A8D` 8A0A(B BBBM LBBB B(A0A8Dp 8A0A(B BBBE L@{BBB B(A0A8D 8A0A(B BBBC L,pBBB B(A0A8D 8A0A(B BBBK L|BBB B(A0A8D- 8A0A(B BBBK LBBB B(A0A8D` 8A0A(B BBBE LBBB B(A0A8D` 8A0A(B BBBE LlPBBB B(A0A8D 8A0A(B BBBK LBBB B(A0A8D 8A0A(B BBBK L ЖBBB B(A0A8D` 8A0A(B BBBE L\0BBB B(A0A8D` 8A0A(B BBBM L{BBB B(A0A8D 8A0A(B BBBC LЛBBB B(A0A8D` 8A0A(B BBBG LL@{BBB B(A0A8D 8A0A(B BBBC p))))П)ZDB J AL4(EBE A(D0r (A BBBF A(A BBB)LEBE A(D0r (A BBBF A(A BBBZDB J A @ZDB J A,)D)\)tȡ))LEBE A(D0r (A BBBF A(A BBBX1L EBE A(D0r (A BBBF A(A BBB\)t)LEBE A(D0r (A BBBF A(A BBBp!LEBE A(D0r (A BBBF A(A BBBDZDB J Ad(ZDB J Ah)LBBB B(A0A8D` 8A0A(B BBBE LBBB B(A0A8D` 8A0A(B BBBE L<PBBB B(A0A8D` 8A0A(B BBBE LBBB B(A0A8D` 8A0A(B BBBE L BBB B(A0A8D` 8A0A(B BBBE L,BBB B(A0A8D` 8A0A(B BBBE L|BBB B(A0A8D` 8A0A(B BBBE L@BBB B(A0A8D` 8A0A(B BBBE LBBB B(A0A8D` 8A0A(B BBBE LlBBB B(A0A8D` 8A0A(B BBBE LBBB B(A0A8D` 8A0A(B BBBE L BBB B(A0A8D` 8A0A(B BBBE L\`BBB B(A0A8D` 8A0A(B BBBG LжBBB B(A0A8D` 8A0A(B BBBE L@BBB B(A0A8D` 8A0A(B BBBE LLBBB B(A0A8D` 8A0A(B BBBE L BBB B(A0A8D` 8A0A(B BBBE LBBB B(A0A8D` 8A0A(B BBBE L<BBE B(A0A8Gp 8F0A(B BBBG LBBB B(A0A8D` 8A0A(B BBBI LBBB B(A0A8D` 8A0A(B BBBI L,BBE B(D0A8Dp 8A0A(B BBBK L|BBB B(A0A8Dp 8A0A(B BBBE LBBB B(A0A8Dp 8A0A(B BBBE L0BBB B(A0A8D- 8A0A(B BBBK Ll'BBB B(A0A8D, 8A0A(B BBBL LBBB B(A0A8D- 8A0A(B BBBK L BBB B(A0A8D 8A0A(B BBBD L\{BBB B(A0A8D 8A0A(B BBBC L BBB B(A0A8D 8A0A(B BBBD L`{BBB B(A0A8D 8A0A(B BBBC LLBBB B(A0A8D 8A0A(B BBBD L{BBB B(A0A8D 8A0A(B BBBC LBBB B(A0A8D 8A0A(B BBBK L<@BBB B(A0A8D 8A0A(B BBBD LBBB B(A0A8D 8A0A(B BBBD LBBB B(A0A8D 8A0A(B BBBK L,BBB B(A0A8D 8A0A(B BBBD L|@BBB B(A0A8D 8A0A(B BBBK LBBB B(A0A8D, 8A0A(B BBBL LBBB B(A0A8D` 8A0A(B BBBE Ll;BBB B(A0A8D` 8A0A(B BBBG LpBBB B(A0A8D` 8A0A(B BBBE L  BBB B(A0A8D- 8A0A(B BBBK L\BBB B(A0A8D- 8A0A(B BBBK L)BBB B(A0A8D` 8A0A(B BBBG L;BBB B(A0A8D` 8A0A(B BBBG LLBBB B(A0A8D+ 8A0A(B BBBM L0%BBB B(A0A8D` 8A0A(B BBBG LBBB B(A0A8D* 8A0A(B BBBF L<`(BBB B(A0A8D` 8A0A(B BBBE L@BBB B(A0A8D+ 8A0A(B BBBM LBBB B(A0A8D` 8A0A(B BBBK L,PsBBB B(A0A8D- 8A0A(B BBBK L|KBBB B(A0A8Dp 8A0A(B BBBK L%BBB B(A0A8D` 8A0A(B BBBG L` sBBB B(A0A8D- 8A0A(B BBBK Ll BBB B(A0A8D* 8A0A(B BBBF LBBB B(A0A8D, 8A0A(B BBBL L P;BBB B(A0A8D` 8A0A(B BBBG L\@%BBB B(A0A8D` 8A0A(B BBBG L 9BBB B(A0A8Dp 8A0A(B BBBK LBBB B(A0A8D` 8A0A(B BBBI LLBBE B(A0A8Dp 8C0A(B BBBG L BBB B(A0A8D` 8A0A(B BBBG L`BBB B(A0A8D` 8A0A(B BBBE L< sBBB B(A0A8D- 8A0A(B BBBK <P `BE D(A0b(A FBT, {HAA ]ABD !`BE D(A0G (L BBBA <Dh!hBE D(A0j(A FBM! L!9BBE B(D0A8JPz 8D0G(B BBBI L"BBB B(A0A8G@{ 8A0A(B BBBJ L<#9BBE B(D0A8JP} 8D0G(B BBBF L$BBB B(A0A8G@~ 8A0A(B BBBG Lp%BBE B(D0A8JPN 8A0A(B BBBF L,'BBB B(A0A8G@~ 8A0A(B BBBG L|'RBBB B(D0A8M`} 8M0A(B BBBC L(BBB B(A0A8G@~ 8A0A(B BBBG L)kBBE B(D0A8J`q 8A0D(B BBBH Ll*BBB B(A0A8G@~ 8A0A(B BBBG L+IBBB B(A0A8D 8A0A(B BBBE L -BBB B(A0A8G@~ 8A0A(B BBBG L\p.BBBB B(A0A8D 8A0A(B BBBI Lp0BBB B(A0A8G@~ 8A0A(B BBBG L@1BBE B(D0A8JPN 8A0A(B BBBF LL2BBB B(A0A8G@~ 8A0A(B BBBG L3BBBB B(A0A8D 8A0A(B BBBI L5BBB B(A0A8G@~ 8A0A(B BBBG L<p6IBBB B(A0A8D 8A0A(B BBBE Lp8BBB B(A0A8G@~ 8A0A(B BBBG L@9BBB B(A0A8J 8A0A(B BBBK L,:BBB B(A0A8G@~ 8A0A(B BBBG L|;9BBE B(D0A8JP} 8D0G(B BBBF L<BBB B(A0A8G@~ 8A0A(B BBBG L`=RBBB B(D0A8M`} 8M0A(B BBBC Llp>BBB B(A0A8G@~ 8A0A(B BBBG L@?RBBB B(D0A8M`} 8M0A(B BBBC L P@BBB B(A0A8G@~ 8A0A(B BBBG L\ A9BBE B(D0A8JP} 8D0G(B BBBF LBBBB B(A0A8G@~ 8A0A(B BBBG LBBBE B(D0A8J`\ 8A0A(B BBBH LLDBBB B(A0A8G@~ 8A0A(B BBBG LPEBBBB B(A0A8D 8A0A(B BBBI LPGBBB B(A0A8G@~ 8A0A(B BBBG L< HBBE B(D0A8Jpa 8C0A(B BBBI LIBBB B(A0A8G@~ 8A0A(B BBBG LJBBBB B(A0A8D 8A0A(B BBBI L,LBBB B(A0A8G@~ 8A0A(B BBBG L|M9BBE B(D0A8JP} 8D0G(B BBBF LpNBBB B(A0A8G@~ 8A0A(B BBBG L@ORBBB B(D0A8M`} 8M0A(B BBBC LlPPBBB B(A0A8G@~ 8A0A(B BBBG L QBBBB B(A0A8D 8A0A(B BBBI L  SBBB B(A0A8G@~ 8A0A(B BBBG L\SBBE B(D0A8G`Y 8A0G(B BBBH LUBBB B(A0A8G@~ 8A0A(B BBBG L`VBBBB B(A0A8D 8A0A(B BBBI LL`XBBB B(A0A8G@~ 8A0A(B BBBG L0YIBBB B(A0A8D 8A0A(B BBBE L0[BBB B(A0A8G@~ 8A0A(B BBBG L<\IBBB B(A0A8D 8A0A(B BBBE L^BBB B(A0A8G@~ 8A0A(B BBBG L^BBE B(D0A8JPN 8A0A(B BBBF L,``BBB B(A0A8G@~ 8A0A(B BBBG |0a(a aaaa$ ayAJ V AF $4XaNAD B AA $\aOAD C AA $aGAD { AA $aGAD { AA $aGAD { AA $ bGAD { AA $Hb<@b$T8bDAD x AA $|`bGAD { AA $bOAD C AA $bGAD { AA $bGAD { AA $cAD a AI Dhc,\@dAAF FA f#8f#Pf3xf3,f,CA AD bA,i,CA AD bADLl<IBB B(A0A8!0A(B BBBDm<IBB B(A0A8!0A(B BBBLnBBB B(A0A8D8A0A(B BBBL,pBBB B(A0A8D8A0A(B BBB|PsuDxKBBB B(A0A870A(B BBBD|KBBB B(A0A870A(B BBBL<BBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBDBBE B(D0A80A(B BBBD$BBE B(D0A80A(B BBBDl`8BDB B(D0A8 0A(B BBBA DX8BDB B(D0A8 0A(B BBBA dP;KBE A(E0(A BBBH0X`0dd(;KBE A(E0(A BBBH0X`0ȕDKBBB B(A0A870A(B BBB<DBBD A(JV (A ABBA <hBBD A(JV (A ABBA D8BBE B(A0A80A(B BBBD BBE B(A0A80A(B BBBdTZKBE A(E0(A BBBI0X`0dZKBE A(E0(A BBBI0X`0D$xBBB B(A0A8}0A(B BBBDlBBB B(A0A8}0A(B BBBD(BBB B(A0A80A(B BBBDBBB B(A0A80A(B BBBDDBBE B(D0A80A(B BBBD@BBE B(D0A80A(B BBBDBBB B(A0A80A(B BBBD BBB B(A0A80A(B BBB4dBBD A(I0j(A ABB4BBD A(I0j(A ABB,HvIAI ^AB,vIAI ^AB44FDA R0_ AAB4l@FDA R0_ AAB$AAD@AA$AAD@AA,EAA H@ AAB,$EAA H@ AAB4TYAUAHX4YAUAHXXQQ# #$3<@3,Th,CA AD bA,h,CA AD bADh<IBB B(A0A8!0A(B BBBD`<IBB B(A0A8!0A(B BBBLDXBBB B(A0A8D8A0A(B BBBL BBB B(A0A8D8A0A(B BBB DHKBBB B(A0A870A(B BBBD\PKBBB B(A0A870A(B BBBLXBBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBDD XBBE B(D0A80A(B BBBD BBE B(D0A80A(B BBBD (8BDB B(D0A8 0A(B BBBA D  8BDB B(D0A8 0A(B BBBA dd !;KBE A(E0(A BBBH0X`0d %;KBE A(E0(A BBBH0X`04 *L .Dd X2KBBB B(A0A870A(B BBB< `6BBD A(JV (A ABBA < 0SBBD A(JV (A ABBA D, pBBE B(A0A80A(B BBBDt rBBE B(A0A80A(B BBBd PuZKBE A(E0(A BBBI0X`0d$ HzZKBE A(E0(A BBBI0X`0D @BBB B(A0A8}0A(B BBBD BBB B(A0A8}0A(B BBBDBBB B(A0A80A(B BBBDdHBBB B(A0A80A(B BBBDBBE B(D0A80A(B BBBDBBE B(D0A80A(B BBBD<pBBB B(A0A80A(B BBBDBBB B(A0A80A(B BBB4`BBD A(I0j(A ABB4BBD A(I0j(A ABB,<vIAI ^AB,l`vIAI ^AB4FDA R0_ AAB4FDA R0_ AAB4 `BBD A(M0(A ABB4D(BBD A(M0(A ABB4|BBD A(M0(A ABB4BBD A(M0(A ABBL BBB B(A0A8D 8A0A(B BBBA L\ BBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA L@BBB B(A0A8D 8A0A(B BBBA LlBBB B(A0A8G 8A0A(B BBBA LpBBB B(A0A8D 8A0A(B BBBA $ мAAD@AA$4HAAD@AA,\AAL AAA ,AALg AAI ,&AI fAB,&AI fAB4ABAC G0/ AAB4T(ABAC G0/ AAB@l<,EAA H@ AAB,@EAA H@ AAB$AD0 AA 4DhYAUAHX$|AD0 AA 4xYAUAHX4BAA D@x  AABA HQ4,BAA D@x  AABA dQ4|@BAA G  AABE 4BAA G  AABB ##343,L,CA AD bA,|,CA AD bAD<IBB B(A0A8!0A(B BBBD<IBB B(A0A8!0A(B BBBL<BBB B(A0A8D8A0A(B BBBL`BBB B(A0A8D8A0A(B BBBXD KBBB B(A0A870A(B BBBDTKBBB B(A0A870A(B BBBLBBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBD<BBE B(D0A80A(B BBBDhBBE B(D0A80A(B BBBD8BDB B(D0A8 0A(B BBBA D8BDB B(D0A8 0A(B BBBA d\;KBE A(E0(A BBBH0X`0d;KBE A(E0(A BBBH0X`0,p D8D\KBBB B(A0A870A(B BBB<BBD A(JV (A ABBA <5BBD A(JV (A ABBA D$RBBE B(A0A80A(B BBBDlPUBBE B(A0A80A(B BBBdWZKBE A(E0(A BBBI0X`0d\ZKBE A(E0(A BBBI0X`0DaBBB B(A0A8}0A(B BBBD@dBBB B(A0A8}0A(B BBBD fBBB B(A0A80A(B BBBD\ hBBB B(A0A80A(B BBBD HkBBE B(D0A80A(B BBBD lBBE B(D0A80A(B BBBD4!nBBB B(A0A80A(B BBBD|!oBBB B(A0A80A(B BBB4!qBBD A(I0j(A ABB4!`qBBD A(I0j(A ABB,4"qvIAI ^AB,d"rvIAI ^AB4"XrFDA R0_ AAB4"rFDA R0_ AAB4#sBBD A(M0(A ABB4<#sBBD A(M0(A ABB4t#tBBD A(M0(A ABB4#`uBBD A(M0(A ABB#(vL$xBBB B(A0A8D 8A0A(B BBBA T$H|pl$~L$ BBB B(A0A8G 8A0A(B BBBA L$BBB B(A0A8D 8A0A(B BBBA $%8LD%BBB B(A0A8D 8A0A(B BBBA L%XBBB B(A0A8G 8A0A(B BBBA L%BBB B(A0A8D 8A0A(B BBBA $4&HAAD@AA$\&AAD@AA,&8AAL AAA ,&AALg AAI &r&,'&AI fAB,D'&AI fAB4t'ABAC G0/ AAB4'ABAC G0/ AAB',D0 A (ȴD0r A $(8l<(<LT('BBB B(A0A8G 8A0A(B BBBA L(BBE B(A0A8G 8A0A(B BBBA (H )0,$)EAA H@ AAB,T)EAA H@ AAB)D0z A )D0q A $)AD0 AA 4)YAUAHX$$*AD0 AA 4L*YAUAHXL*BBE B(D0A8ML 8A0A(B BBBA L*XBBE B(D0A8ML 8A0A(B BBBA 4$+BAA G  AABE 4\+PBAA G  AABB 4+BAA D@x  AABA +PQ4+BAA D@x  AABA ,Q4,H#L,`#d,x3|,3,,CA? AD bA,,HCA? AD bAD,<IBB B(A0A8!0A(B BBBD<-<IBB B(A0A8!0A(B BBBL-BBB B(A0A8D8A0A(B BBBL-BBB B(A0A8D8A0A(B BBB$.x<. DT.KBBB B(A0A870A(B BBBD.KBBB B(A0A870A(B BBBL.BBB B(A0A8D8A0A(B BBBL4/XBBB B(A0A8D8A0A(B BBBD/BBE B(D0A80A(B BBBD/@BBE B(D0A80A(B BBBD08BDB B(D0A8 0A(B BBBA D\08BDB B(D0A8 0A(B BBBA d0;KBE A(E0(A BBBH0X`0d 1p ;KBE A(E0(A BBBH0X`0t1H1D1xKBBB B(A0A870A(B BBB<1GBBD A(J (A ABBI <,23GBBD A(J (A ABBI Dl2JBBE B(A0A80A(B BBBD2HMBBE B(A0A80A(B BBBd2OJKBE A(E0(A BBBG0P`0dd3TJKBE A(E0(A BBBG0P`0D3YBBB B(A0A8}0A(B BBBD4\BBB B(A0A8}0A(B BBBD\4p^BBB B(A0A80A(B BBBD4`BBB B(A0A80A(B BBBD4 cBBE B(D0A80A(B BBBD45dBBE B(D0A80A(B BBBD|5eBBB B(A0A80A(B BBBD5hgBBB B(A0A80A(B BBB4 6hBBD A(I0j(A ABB4D68iBBD A(I0j(A ABB,|6ivIAI ^AB,6ivIAI ^AB460jFDA R0_ AAB47jFDA R0_ AAB4L7jBBD A(M0(A ABB47kBBD A(M0(A ABB47plBBD A(M0(A ABB478mBBD A(M0(A ABB,8nLL8pBBB B(A0A8D 8A0A(B BBBA 8 tp8xvL8w BBB B(A0A8G 8A0A(B BBBA L9`BBB B(A0A8D 8A0A(B BBBA l9L9BBB B(A0A8D 8A0A(B BBBA L90BBB B(A0A8G 8A0A(B BBBA L,:BBB B(A0A8D 8A0A(B BBBA $|: AAD@AA$:AAD@AA,:AAL AAA ,:AALg AAI ,;`rD;ȥ,\;`&AI fAB,;`&AI fAB4;`ABAC G0/ AAB4;xABAC G0/ AAB,<D<x\<`,D0 A |<pD0r A <l<8<L<`'BBB B(A0A8G 8A0A(B BBBA L=@BBE B(A0A8G 8A0A(B BBBA l====,=`EAA H@ AAB,=EAA H@ AAB,>`D0z A L>D0q A $l>PAD0 AA 4>YAQADX$>PAD0 AA 4>YAQADXL,?PBBE B(D0A8ML 8A0A(B BBBA L|?BBE B(D0A8ML 8A0A(B BBBA 4?BAA G  AABE 4@BAA G  AABB 4<@ BAA D@p  AABA t@xQ4@BAA D@p  AABA @Q@`#@x# A3$A3, BBE B(D0A8J 8A0A(B BBBA LllGJ BBB B(A0A8G) 8A0A(B BBBA LlSyBBE B(A0A8GU 8A0A(B BBBA  m\$m^D0 A $d@AD0 AA 4A;YAAKXLĎCBBE B(D0A8ML 8A0A(B BBBA LGBBE B(D0A8ML 8A0A(B BBBA Ld8LBBB B(A0A8Gy 8A0A(B BBBD LOBBB B(A0A8Gz 8A0A(B BBBK LRBBB B(A0A8Gk 8A0A(B BBBJ LTHVBBB B(A0A8Gl 8A0A(B BBBI YD0 A 4Đh]BAA D@p  AABA _Q,`AAD@ AAA 4DcBAA D@p  AABA | fQhf#f#đf3ܑf3,f\CA AD bA,$i\CA AD bADTHk<IBB B(A0A8!0A(B BBBD@l<IBB B(A0A8!0A(B BBBL8mBBB B(A0A8D8A0A(B BBBL4oBBB B(A0A8D8A0A(B BBBrtLHw_BBB B(A0A8Jh@8A0A(B BBBLX{_BBB B(A0A8Jh@8A0A(B BBBLThBBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBDhBBE B(D0A80A(B BBBD<ЃBBE B(D0A80A(B BBBD88BDB B(D0A8 0A(B BBBA D̕08BDB B(D0A8 0A(B BBBA d(;KBE A(E0(A BBBG0X`0d|;KBE A(E0(A BBBG0X`0ؐ`L_BBB B(A0A8Jh@8A0A(B BBB<dGBBD A(J (A ABBA <GBBD A(J (A ABBA DBBE B(A0A80A(B BBBD,BBE B(A0A80A(B BBBdth:KBE A(E0(A BBBF0P`0dܘ@:KBE A(E0(A BBBF0P`0DDBBB B(A0A8}0A(B BBBDpBBB B(A0A8}0A(B BBBDԙBBB B(A0A80A(B BBBD BBB B(A0A80A(B BBBDdxBBE B(D0A80A(B BBBDBBE B(D0A80A(B BBBDHBBB B(A0A80A(B BBBD<BBB B(A0A80A(B BBB48BBD A(I0r(A ABB4BBD A(I0r(A ABB,vIAI ^AB,$8vIAI ^AB4TFDA R0_ AAB4FDA R0_ AAB4Ĝ8BBD A(M0(A ABB4BBD A(M0(A ABB44BBD A(M0(A ABB4lBBD A(M0(A ABBLĝ}BBB B(A0A8D_ 8A0A(B BBBA 8Y,xLDbBBB B(A0A8GA 8A0A(B BBBA LxBBB B(A0A8DZ 8A0A(B BBBA 8LmBBB B(A0A8DO 8A0A(B BBBA LTBBB B(A0A8G 8A0A(B BBBA L0BBB B(A0A8D 8A0A(B BBBA h L}BBB B(A0A8D_ 8A0A(B BBBA LdBBB B(A0A8G 8A0A(B BBBA L0BBB B(A0A8D 8A0A(B BBBA L$ mBBB B(A0A8DO 8A0A(B BBBA Lt$BBB B(A0A8Gc 8A0A(B BBBA ġX+[ܡ-L(/lBBB B(A0A8GK 8A0A(B BBBA LDH6BBB B(A0A8D 8A0A(B BBBA L:BBB B(A0A8D 8A0A(B BBBA L?<BBB B(A0A8G 8A0A(B BBBA L4xEBBB B(A0A8G 8A0A(B BBBA LHM BBB B(A0A8G 8A0A(B BBBA LԣXBBB B(A0A8D 8A0A(B BBBA L$\BBB B(D0A8G 8A0A(B BBBA LthaBBB B(A0A8D 8A0A(B BBBA LĤfBBB B(A0A8D 8A0A(B BBBA LjBBB B(A0A8D 8A0A(B BBBA LdxoBBB B(A0A8D 8A0A(B BBBG $sAAD@AA$ܥsAAD@AA,sAAN AAA ,4wAANA AAE <d{E ZvGvp vxAvh G A <E ZvGvp vxAvhy G I x`L(lBBB B(A0A8GK 8A0A(B BBBA LdHBBE B(A0A8G] 8A0A(B BBBA LBBE B(A0A8G] 8A0A(B BBBA Lȟ9 BBB B(A0A8G 8A0A(B BBBA ,T6AI iAB,Ȫ6AI iAB4ثABAC G0/ AAB4ABAC G0/ AABL$z BBE B(D0A8JP 8A0A(B BBBA Lt8 BBB B(A0A8Gy 8A0A(B BBBA LĩBBE B(A0A8G 8A0A(B BBBA ,D-D0 A dD0s A Hi=L̪BBB B(A0A8G 8A0A(B BBBA LPBBE B(A0A8G 8A0A(B BBBA lDhjE IvMvXvxvp vh v`HvP M A LE IvKvxvp vh v`EvXHvP M A ,L`FAA D@ AAB,|FAA D@ AAB4`FAA T`C  AABE 48FAA Tp?  AABA D0 A ,<E IvEvx E A l D0n A ,E IvEvx E A 0D0 A $ܭAD0 AA 4x+YAALX<pD0 A $\AD0 AA 4+YAALXLBBE B(D0A8M? 8A0A(B BBBA L  BBE B(D0A8M? 8A0A(B BBBA L\0BBB B(A0A8Gn 8A0A(B BBBG LBBB B(A0A8Gp 8A0A(B BBBE LBBB B(A0A8Ge 8A0A(B BBBH LL BBB B(A0A8Gg 8A0A(B BBBF <pKE IvIvh vx vpEv` I A ܰD0 A 4@ BAA D@h  AABA 4"Q<L"CE IvIvh vx vpEv` I A ,#AAD@ AAA 4'BAA D@h  AABA *Q< P*hBBD A(J0r (C ABBC |L*+BBB B(D0A8J`g 8A0A(B BBBH  8D0A(B BBBI  8D0A(B BBBD $̲0,FrHSL,mBBE B(F0A8Gm 8A0A(B BBBH DD-eBEE E(H0H8M@l8A0A(B BBB-)m" } 7D>A-Q-Q-Q8E L@Qa  gy )a-#-#&,} @PUr {l|&,} Qak&1bg~$iy&,}E$]n&8Hxx-Q-Q-Q)>m}- _}y)Cu}y- S}y- S}y)>m}y)>m}y%Cu}y- _}y)>m}y)Cu}y%O}}y- R}y)Cu}y%3e}y%2We}yVWwW}W}W~W~W~X~X~X~X~X~X~Y~Y~Y~YYYYZZZZZZ[[[[[[~[Ђ\Ƃ\\\\\]]]]]]؁^΁^ā^^^^______`ـ`π`ŀ````a}a}a}a}a}a|b|b|b|b|b|b|b|c|c|c|c|c|c{d{d{d{d{d{d{e{e{e{e{e{e{ezfyfyfyfyfxghxhkxkxlzmzmynpyqzqzrwr_twt}u}uA6-Z }1&E%}<]         }{08PqxCTJvJEGGGEP$PC CCB4C 9D D D B B D cB B B A B IIHHI#AA G G G E G G ADI PAPGA"4A#D#C$P$G$4G%O&J&J(O*A*O+A+J+A+K,A.4G0$O1K5O8L9O=G == =A=?>I >> ?A?AAC CCPD DGI HHLMMMMBNN NNBOO O}}yws}}@=Pnxhnx08pxmx.;M52A~4'5hx4(6hz4(6hx4)7i|4(6hx4(6hxeZ"-7X2I<*6 T } ^ =^EzEEEEEAFFCBEDCCB FF F F E E F F F F EE FF FF   < AA AA AA AA AA AA AA AA @!@! "@"@" #@#@$ $@$@% %@&@& &@'@' (@(@( )@)@* *@*@+ +@,@, -@-@- .@.@/ /@/@0 0?1?1 1?2?2 3?3?3 4?4?5 5?5?6 6?7?7 8?8?8 9>9>9 :>:>; ;=;=<<=<===>=>>>>?B BB BBC CD E}08:w , ,                 ? :w    ,    ,              ? c:w,%L   CGe z   -                Ge z   -                7Mg|-gy )a-#-#WWWXXXXXXYYYYYYYZZZZZ˯Z[[[[[[\\\\\\٬\Ϭ]Ŭ]]]]]^^^^^^׫^ͫ_ë____```ݮ`Ӯ`ɮ``aaaaaabb۩bѩbǩbbcccccccdd٨dϨdŨddeeeeeeeffݧf֧fϧfȧfgggg!֦̦¦ЉȊ܊ۭѭԋǭ̌č߯؍կɹЎȏ۸܏ѸǸԐɑݑܷҷȷՒ͓ڶжƶŔٔѕصεĵɖݖ՗۴Դʹƴ͘™߳֙ճ˳ΚƛݲڛӲɲҜʝ۱ޝѱDZž֞Οݹӹ֣xx () 6-VMa      -    Ui%}%%31141101211221343d,},, - , - + ) 0 4 0 0 0 4 /-,,,--*+%40*,+,/332,0004,/0/3%iq%!$!%%%%! $ # $ $ #    "$$$!!! $! iq%!$!%%%%! $ # $ $ #    "$$$!!! $! iq%!$!%%%%! $ # $ $ #    "$$$!!! $! my**)*))) $$$!)))($%% % $ ! # " & # ( $ $%%#'((%'''&#$my**)*))) $$$!)))($%% % $ ! # " & # ( $ $%%#'((%'''&#$my**)*))) $$$!)))($%% % $ ! # " & # ( $ $%%#'((%'''&#$ *!jF2=575-Ĭȹ        ɵ      668ĿɬC   !"""ް"ְ"$$$$%%&'''''ķ////-0001122233ù335̼5ļ568899999:Ѻ;D<<<<ھ=7վ>о>˾>ƾ?׽@7ҽ@ͽ@Ƚ@ýAѼBEEFF*GGGGHHIIJJJKL6LMM۠MN6OOOOP8QRRRSTUUUVVYYYYYZZZ[C\ަ\֦\]^^^^__`aaaaaccccddkkll-lmmmnnnnooppqqrruuuuuٳvѳvɳvwDxxxyz7z{{ޣ{|7}}}}~Ƀރ̯҅Ϫ͈֩و܉Ǘ̗טܘ4KXo}2HUl{1GTky1GTky3IVm~3IVm~*; "*dr$RM$RM 2Vv}Hw8 7 ":Huxx-#-#gy 4E)m" }%n9#o9 M'-Qu,8E  3?l. Qak$iy _+ ?c$iy7Xl322I)-)   "Br  K A6-Z }E8(  }4V*>Re+%%HM/<4`4r5454520/.2768252526262..771 1 1 1 0 0 / 0 4 0 H3 40%3053-4404T0%70.t0%.f0-3 #0 - ,","b0#,#.0#*$.0$2%0(2(D0(2)(0,,,,--0--.070788388}mx/5DtTpy**+)++,,, + + ) (((3()!('('('7(()()())))*+,,*2                  $RM$RM 2Vv]2--//././00/2/**//1/1/110/0 / * + * ** :* D( '*(**2*")*)*)*")*)*)*(*"(*8((D(*'***^( '"*$"%'+g-,*---}08gy a -#-#xx*2                 $RM$RM 2Vv]/.-0-*-)-).02-('/-(-)-))(- . - t+ - *. - D/ '-0-*.-"+-*-*-"*-*-/-/-"/-"+-8''D'-%-*+^' %'+0-*0-0}08gy )a-#-#xx*2                 $RM$RM 2Vv]/--0-*-)-)-02-('/-(-)-))(- . - t+ - *. - D. '-/-*.-"*-*-*-"*-*-/-/-"/-"+-8''D'-$-*+^' %'+0-*0-0}08gy )a-#-#xx *2~)m" }8YC$RM$RM   2Vv fU  ' )     U 5  E++++++*++*)+$($'$*$*$*$&$'& ' $ ' % ( $ % $ + $O$9#$q$"'$"%$*($*('$*'$"($$%W$ $W$ $"#$#$$&$}lxgy #a-#-#xx *2~)m" }8XC   2Vv `  D '     U     gy )a-#-# (EJg (#j{ xx  (qg   O6   !Ye} 1!BO}A9(!2M; <    7E--'&(&'&,,(&,&,&+&+&*&.&..- ' ' . & , 1& -&-)3&*&*%#&*#&*+&)!&))&*,,&*)&"+&*+7,%%1&)"&""#%%'&&&&&}lx*2C %  %  %   p- u   2VvARgy )a-#-# (EJg (#j{ xx (  () 6-!tACd   O      ACd   O      ACd   O      !Ye} /!BO}A9(!2M; <    7Hxiii[[[\\[^^]\\bbb] R R R Q R R R R S S S R``_aaaaaa``eeddddccccb^_^`mmmmllllkkkj j j!b![!["["Z#X#X$Y$X%X%Z%Z%Z&Z&Z&Z&Z'Y'j'j'h(i(h(h)j)i)i)i*j*g*g+g+f+f,f,f,f-e-e-e.e.f.f.f/e/Y/Y1Y2Y4Y5U5W5W5W6U7+W:U:WU<W=X=;X?U?AT@TBTB*SDWDYDUE^EYEbEgFgFhFhGiGMG"oHoHoHoHnInInInJmQTTTUUXUZUUWXXXXXYYefffffgghj*2                 $RM$RM 2Vv]0..1.+.*.*/1.)(0.).*.**)./ . , . */ . D/'.1.*/.",.%+.+."+.+.0.0."0.",.8((D(.%.*,^( &(,1.*1.1}08gy )a-#-#xx0*')))' ) ( '  *,,+*++((*,,, .!-"-$-%('0,(**+) '  ' - -,,,&*++&+'() )"(#($*&   2Vv 'Kkgy )a-#-#xx) *!j6K+`+u++++**"****)**&4*443*4*.-)*- * - - 1 - 1 0 4-3-322-2-11,-/-//.-.--+1-..000/ 3)/3)*+*7&*")* *+ * ** *"**7)*7)*"********"**!*+"*"*+"*%"+&*)0     0     $RM$RM 2Vv   'Kkgy )a-#-#xx) *!j6K-`-u----**%(*665*-++**-,***,11*+ * 0 * 0 * 2 1 0 1 00/1/1/-716165514144313111.133323 2!5*25"7* 2  7** *  q# e$RM$RM 2VvB &2" *  ":Huxx-#-#gy *' 7D>A--U0     ' U0     '    2Vv0  Q   77\gy )a-#-# (EJg--xx)!7!7 (#  (!te[  OMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x*K%%   2Vv0 c  ~ 7  7'gy )a-#-# (EJg--xx)!7!7 (#  (!t4Cd   O   t ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Kah* c   'gy a-#-#xxh* c   'gy a-#-#xx%%   2Vv0 m  ~ 77'gy )a-#-# (EJg--xx)!7!7 (#  (!t5Cd  O   ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka%%   2Vv0O  *       n  '**"gy )a-#-# (EJg--xx)!7!7 (#  (!tACd  O  ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka*' 7D>A--U0     ' U0     '    2Vv0 R   7 7\gy )a-#-# (EJg--xx)!7!7 (#  (!tMCd  O  ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x*K%%   2Vv0I    k  ~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka8BKW%%$RM$RM   2Vv0D     ~22'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6 xx)!"p%%%   2Vv*u  I       s '~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tYP  O'48MD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka%%   2Vv0I     c  ~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka%%   2Vv0I    h  ~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV7A%x'K\*b        W'-gy )a-#-#!"Y"Z"Z"\"\"\"\#]#]#\#\#\#\$\$\$^$^$^$^$^%]%]%]%]%]%]&]&]&]&]&]&a'a'`'`'`'`'`'`(`(`(`(`(`(`)`)_)_)_)_)_*_*_*_*_*_*_+_+_+_+_+_+^+f,f,e,e,e,e,e-e-e-e-e-e-e.e.e.d.d.d.d.d/d/d/d/d/d/d0d0d0c0c0c0c0c1c1c1c1c12c2c2c2c2b2b3b3b3b3b3b3b4b4b4b4b4b4a5a5a5a5a5a5a5a6a6a6[6[6[6[7[7[7[7[7[7[7[8[8[8Z8Z8Z8\9\9[9[9  (EJg--xx)!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'KaW* 2   7  *gy )a-#-#DEYEZEZEZEZEZFZFZFZFZFZFZGZGZGZG\G\G[H[H[H[H[H[H[H[I[I[I[I[I[IZJ^J^J^J^J^J^J^K^K]K]K]K]K]L]L]L]L]L]L]M]M]M\M\M\M\N\N\N\N\N\N\O\OYOYOYOYOXOXPXPXPXPXPXPXQXQXQXQXQXQWQWRWRWRWRWRWRWSWSWSWSWSWSWTVTVTVTVTVTYUxxW* 2   7  *gy )a-#-#DEYEZEZEZEZEZFZFZFZFZFZFZGZGZGZG\G\G[H[H[H[H[H[H[H[I[I[I[I[I[IZJ^J^J^J^J^J^J^K^K]K]K]K]K]L]L]L]L]L]L]M]M]M\M\M\M\N\N\N\N\N\N\O\OYOYOYOYOXOXPXPXPXPXPXPXQXQXQXQXQXQWQWRWRWRWRWRWRWSWSWSWSWSWSWTVTVTVTVTVTYUxxW* 2   7*gy )a-#-#EE_F^F_F\F\F[F[F[G[G[G[G_G_G_H_H_H\H\H\H\H\I\I\I\I\I\I\J_JbJbJbJaJaKaKaKaKaKaKaKaLaLaLaLaL`L`M`M`M`M`M`M`N`N`N`N`N`N_O_OZOZOZOZOYO^P^P^P]P]P]P]Q]Q]Q]Q]Q]Q]R]R]R\R^R^R^R^S^S^S^S^S_S_T^T[T[TZTZTZTZUZUZU_UxxW* 2   7*gy a-#-#xxW*2   7  *gy a-#-#xxW*2   7  *gy a-#-#xxW* 2   7  *:Huxx-#-#gy W*    2   7*gy )a-#-#@@YAZAZA\A\A\A\B]B]B\B\B\B\B\C\C^C^C^C^C^D]D]D]D]D]D]E]E]E]E]E]EaEaF`F`F`F`F`F`G`G`G`G`G`G`G`H_H_H_H_H_I_I_I_I_I_I_I_J_J_J_J_J^JfKfKeKeKeKeKeLeLeLeLeLeLeLeMeMdMdMdMdMdNdNdNdNdNdNdNdOdOcOcOcOcOcPcPcPcPcPQcQcQcQcQbQbRbRbRbRbRbRbSbSbSbSbSbSaSaTaTaTaTaTaTaUaUaU[U[U[U[U[V[V[V[V[V[V[W[W[WZWZWZW\X\X[X[YxxW*2   7  *:Huxx-#-#gy -?yFL)!s}RZ$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$dA  $  $      $  $ -# <B - #    ;--Q-Q8E@z     @)!s}RZ L@Qa$RM$RM  gy a-#-#&,}&,} Qak&1bg~$iy!7-xx-Q-Q-$5KV=;]F,WnvA####ZA  #  #      #  #>^wFL)!jt0_-#  u$RM$RM  gy )a-#-#,7_ Qak&1bg~$iy% $!7-xx-Q-$5KV=;]F,WZbJ%$$  $uJ,  $      $ >^wdL)!jt0_ -  #   u$5L g  $RM$RM  gy )a-#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<ZbI$$  $ qA$ $    (  $   E?jFL)!kuPX$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$dA  $  $      $  $ -# <@n  L)!jtRZ$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$bA  $  $      $  $ -# ?Fz        . @  )!s}RZ$RM$RM  gy )a-#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<ow%@%%#%#%%%.%%%#&#&b &  @&  &  #&  #&  &  &  .&&&#&#%% % 0%!%#%#N%$?ndL)!jtRZ$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$dA  $  $      $  $ -# Aq         J-"|RZ$RM$RM  gy )a-#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<bj2A33#3#344#3#3b3A33#3  #3  3  3  #3  #3 3 2-3F2#3 2 *3*3+.3+3, 3,5-2.H03022gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6 !7-xx-$5KV=;]F*=@W;ISv|   CC*i%hw      -#)MC4>$"D7<}hgy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6 !7-xx-$5KV=;]F*=@W;IS}um  {  CC*i%hw                                 f-#)MC4>$"D7<}hgy )a-#-#&&_'^'_'\'\'['[([([([([(_(_(_)_)_)\)\)\)\*\*\*\*\*\*\*\+_+b+b+b+a+a,a,a,a,a,a,a-a-a-a-a-a-`-`.`.`.`.`.`/`/`/`/`/`/`/_0_0Z0Z0Z0Z0Y1^1^1^1]1]1]1]2]2]2]2]2]2]3]3]3\3^3^3^4^4^4^4^4^4_4_5^5[5[5Z5Z5Z6Z6Z6Z6_6#!7-xx-$5KV=;]F*=@v;IS3 # ! g V## ##c"C##*##"" " !#!#!#}haz     B-#)UH4>$"DB4}hgy )a-#-#!7-xx-$5KV=;]F*=A   >   I  v  #C"$]$$*""#"i # ]#"h#$#$$%$$hu             -#)MC4>$"D74}hgy )a-#-#!7-xx-$5KV=;]F*=Ku%    3   9  j t8     C*}hh      @-"y)I=4>$"D74}hgy )a-#-#!7-xx-$5KV=;]F*=Ku%    ;   I  z _ ! h! GK !h!)*!!!!! !  hk                       -"y)MC4>$"L7<}hgy )a-#-#!7-xx-$5KV=;]F*=@r   ;   I  u 6! # g" U!!!!C!!!c!! !* !!! "#"#"#}ho               -"y)UH4>$"DB4}hgy )a-#-#?@@@@Չ@Ή@lj@AÔAAAAAABBBٕBϕBŕBBCCCCCCCDDהD͔DɘDDDEEEEEEEFۗFїFǗFFFFFGGGGGGHۖHԖH͖HƖHHHIƝIIIIIIJJJJJ؜JΜJĜKKKKKKKLLLL֛L̛L›LMMMMMMMNNNNךN͚OÚOOOOOOOPPPߙPՙP˙PPQQQQQQQRRݘRӘRRRRSSSSS֒S̒S’TTTTTTTUUU#yyyyyzzzzzېzѐzǐ{{{{{{{||||ُ|Ϗ|ŏ|}}}}}}}~~~׎~͎~Î~~ŀ׀ߌÁՌՁˌӂ݋ӋɋуτۊԊ͊Ɗͅ߅܉ˆ݆ߓՓ˓ڇ!7-xx-$5KV=;]F*=Ku%    ;   I  z _13%3"C3"%3&(3)J+K3,|-*3--3.3.2/F0*400414131424243hx           -#)UI4>$"\7<}hgy a -#-#!7-xx-$5KV=;]F*=Ku    g   A  b _yp " !K"""*#  " # "!#!#"yhq        a-"y)I=4>$"L7<}hj.6Y,/P  %%]%]&]&]&]&]&\&\'\'\'\'\'\'\'\(\(\(\(\([([)[)[)[)[)[)[*[*[*[*[*Z*Z*Z+Z+Z+Z+Z+Z+Z,Z,Z,Z,Z,Z,Z,Y-Y-Y-Y-Y-Y.Y.X.X.X.X.X.X/X/X/X/X/X/X0X0W0W0W0W0W1W1W1W1W1W1W1W2W2V2V2V2V2V3V3V3V3V3V3V3V4V4U4U4U4U4U5U5U5U5 1[k'<7Nby%D]}$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F!!d!d!d!d"d"d"d"d"d"d#d#d#c#c#c#c$c$c$c$c$c$c$c%c%c%b%b%b%b&b&b&b&b&b&b&b'b'b'a'a'a'a(a(a(a(a(a(a)a)`)`)`)`)`*`*`*`*`*`*_+_+_+_+_+_+_+_,_,_,_,_,_,^-^-^-^-^-^-^.^.^.^.^.^.^.]/]/]/]/]/]/]0]0]0]0]0]0]0]1\11\1\2\2\2\2\2\2[2[3[3[3[3[3[3[4[4[4[4[4Z4Z5Z5Z5Z5Z5Z5Z5Z6Z6Z6Z6Z6Y6Y7Y7Y7Y7Y7Y7Y7Y8Y8Y8Y8Y8Y8X9-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F $RM$RM 2Vvk *    7  "  :Huxx-#-#gy  q q$RM$RM 2Vvk *    7  *  :Huxx-#-#gy $$$RM$RM 2Vv{*77  " :Huxx-#-#gy  q$RM$RM 2Vvk *    7  "  :Huxx-#-#gy  $RM$RM 2Vvk *    7  "  :Huxx-#-#gy -FZw$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZw$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]FYW          =B:B        Q@L  )m" }7W+:B@L  )m" } q# e$RM$RM 2VvD    *      *"*  *":Huxx-#-#gy 8Qe|$)+A`$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F8Qe|$)+A`$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F8Qe|$)+A`$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F{XRY;C_8E/T\$q8q3 L@Qa$RM$RM   Cgy a-#-#&,}]T$x    &,} Qak&1bg~$iy&,}?$Yf?L^xx-Q-Q-QA6,Y%}%3e}) *!j$C}!-c:^}9,)Y!} 3j.<!mx""%% !_!!&%$ ! F" ! $ $ $ # ! ># ! " "  "*!%% !>6!!"!%%!!!!!' :FN"-9K$RM$RM:Huxx-#-#gy  h [o:H:H:H:H:H =?r  #'; ='Kn "*dr$RM$RM   2Vvgy a-#-#xxA6,Y%}!-c:^}9,)Y!}0d^*%7   / 7*'If%, "*dr$RM$RM   2Vvgy a -#-#xxA6,Y%}!-c:^}9,)Y!}0d^ *%7 >  / \*'If%, "*dr$RM$RM   2Vvgy )a-#-#xxA6,Y%}!-c:^}9,)Y!}0dZ*% 7 l  *'If%,%&:&;&;&;&;';';';';';';';(;(;(;(=(=(=)<)<)<)<)<)<*<*<*<*<*<*<*;+?+?+?+?+?+?,?,?,?,>,>,>,>->->->->->->.>.>.>.=.=.=/=/=/=/=/=/=0=0:0:0:0:0:191919191919192929292929293838383838383848484848484858575757575;6 "*dr$RM$RM 2Vv:Huxx-#-#gy A6,Y%}!-c:^}9,)Y!}0dZ  *% 7 J *'If%, "*dr$RM$RM  gy )a-#-# !"p"p"p"q"q"p"p#{#{#{#{#{#{${${$}$}$}$|$|%|%|%|%|%|%|&|&|&|&|&|&'''''''((((((~)~)~)~)~)~)~*~*~*~*~*~*~+~+~+}+}+}+}+,,,߄,Մ,˄,------....݃.Ӄ.Ƀ.//////0000ۂ0т0ǂ011111222222܁3ҁ3ȁ33334444445ڀ5Ѐ5ƀ5555666z6z6z6z7z7z7z7z7z7z7y8y8y8y8y8y8y9y9y9x9$_x_x_x_x_x_x`x`x`x`x`x`wawawawawawawbwbwbwbwbwbwbvcvcvcvcvcvcvdvdvdvdvdvdvdueueueueueueufufufufufuftgtgtgtgtgtgthththshshshsisisisisisisisjsjsjrjrjrjrkrkrkrkrkrkrlrlrlrlrlqlqlqmqmqmqmqm{m{n{n{n{nznznzoxxA6,Y%}!-c:^}9,)Y!}0dZ*%  7 t 7*'If%,QIC%%  5 E#h$RM$RM  gy a -#-#!7-xxA6,Y%} (-$5KV=;]F!-c:^}9,)Y!}*'Io%%)UJ:D$+ER4}hCQj ~        @=3Y +3${3HVk$RM$RM  gy )a-#-#,7_ Qak&1bg~$iy!7-xx-QA6,Y%}A8?        '=K*u-$5KV=;]Fj|(   f  m!-c:^}9,)Y!}ulIb v         %     =3Y'IoE8E$RM$RM  gy )a-#-#,7_ Qak&1bg~$iy!7-xx-QA6,Y%} (-$5KV=;]FDDD  z  #   "  "  "  """/P550]U*E  Gh!-c:^}9,)Y!}IPi }        @=3Y*'Io%%)QD5?%+EU4}h%&:&;&;&;&;';';';';';';';(;(;(;(=(=(=)<)<)<)<)<)<*<*<*<*<*<*<*;+?+?+?+?+?+?,?,?,?,>,>,>,>->->->->->->.>.>.>.=.=.=/=/=/=/=/=/=0=0:0:0:0:0:191919191919192929292929293838383838383848484848484858575757575;6hpV3- +3${3HVkJ4` j)    i  -  o  $RM$RM  -#P4g q(    i  - : o    L  jQ@igy )a-#-#!7-xxA6,Y%}uE\;B{;  0S-]>v 1    i    C |     B      L-$5KV=;]F!-c:^}9,)Y!}}rIb v          =3Y'IoE8E  gy )a-#-# !"p"p"p"q"q"p"p#{#{#{#{#{#{${${$}$}$}$|$|%|%|%|%|%|%|&|&|&|&|&|&'''''''((((((~)~)~)~)~)~)~*~*~*~*~*~*~+~+~+}+}+}+}+,,,߄,Մ,˄,------....݃.Ӄ.Ƀ.//////0000ۂ0т0ǂ011111222222܁3ҁ3ȁ33334444445ڀ5Ѐ5ƀ5555666z6z6z6z7z7z7z7z7z7z7y8y8y8y8y8y8y9y9y9x9$_x_x_x_x_x_x`x`x`x`x`x`wawawawawawawbwbwbwbwbwbwbvcvcvcvcvcvcvdvdvdvdvdvdvdueueueueueueufufufufufuftgtgtgtgtgtgthththshshshsisisisisisisisjsjsjrjrjrjrkrkrkrkrkrkrlrlrlrlrlqlqlqmqmqmqmqm{m{n{n{n{nznznzo,7_ Qak&1bg~$iy!7-xx-QA6,Y%} (-$5KV=;]Fa = wD 5 *    E=UC  1 Eh!-c:^}9,)Y!}]Vo         %  $=3Y*'Io%%)QE5?%+4}h@% h [o:H:H:HA6-Z }%>   S6"dx h $  $#)%BSSSSSSSSS =IQ*u}z-{.%/j)G _ M a%Cu}sm}E11010&15&141 4 1 1 / 1 54535381 35s53 2"5"|/#5$1$/%5&.&1(12)5*1+3+5/232323}h{#5 >  9  }h9.rgy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'['['['['[([([(Z(\(\(\)\)\)\)\)\)\*\*[*[*[*[*[*[+_+_+_+^+^+^,^,^,^,^,^,^,^-^-^-^-]-]-].].].].].].]/]/]/]/]/\/\0\0Y0Y0Y0Y0Y1Y1Y1Y1Y1Y1Y1Y2X2X2X2X2X2X3X3X3X3X3X3X3X4W4W4W4W4W4W5W5W5W5W5V5Z6! ,}$3nXi,7_ Qak&1bg~$iy000!7---xx-Q-493\q ,}$3nXi ,}$3nXi.k-$5KV=;]F\qE&&  {   1}h{#5 I  9  }h9.rgy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'['['['['[([([(Z(\(\(\)\)\)\)\)\)\*\*[*[*[*[*[*[+_+_+_+^+^+^,^,^,^,^,^,^,^-^-^-^-]-]-].].].].].].]/]/]/]/]/\/\0\0Y0Y0Y0Y0Y1Y1Y1Y1Y1Y1Y1Y2X2X2X2X2X2X3X3X3X3X3X3X3X4W4W4W4W4W4W5W5W5W5W5V5Z6! ,}$3nXi,7_ Qak&1bg~$iy0000!7---xx-Q-493\q ,}$3nXi ,}$3nXi.k-$5KV=;]F\qA6-Z }1&E%}Q###&$#######& # % # # # & "#$##"#!#""#!0$#&#%#!%&%%}h?P)m" }%n9#o9 l9 l9 7D>A--- %32   $RM$RM%]~}}jb    T       }h493gy )a-#-# ,}$3nXi--xx-;n) ,  )   1 -f ,}$3nXi ,}$3nXi.kt66n'y   -@     ';  I#;!gf59-h 5 0  P >  )++'+++(')(+)')' *")"*"'%))&''('''(()') )) ****'**}08z::+9 D+ 9 + :+',+'8+'9+:+=:+,,++"-#,)+-*++,,.11827283-:+}{h08?P%n9#o9 l9 l9-Q'-Q'-Q''4'4'4 %3#      DE^E]E]E]E]F]F]F]F]F]F]G]G]G]G\G\G\H\H\H\H\H\H\H\I\I\I\I[I[I[J[J[J[J[J[J[J[K[K[KZKZKZKZLZLZLZLZLZLZMYMYMYMYMYMYNYNYNYNYNYNYOXOXOXOXOXOXOXPXPXPXPXPXPXQWQWQWQWQWQWQWRWRWRWRWRWRWSVSVSVSVSVSVTVTVTVTVTVTVTUU;O,}--Q-Q-Q>4V#    %;b  T      }h;n) -  )   1 ,}-  %;,}-  %;du;     (  % %Q;66n  'y     <'><:<=@<>><9<3&<';.<2334=8+<9[2;;=>=>?<}{h08?P%n9#o9 l9 l9-Q'-Q'-Q''4'4'4 %3#      DE^E]E]E]E]F]F]F]F]F]F]G]G]G]G\G\G\H\H\H\H\H\H\H\I\I\I\I[I[I[J[J[J[J[J[J[J[K[K[KZKZKZKZLZLZLZLZLZLZMYMYMYMYMYMYNYNYNYNYNYNYOXOXOXOXOXOXOXPXPXPXPXPXPXQWQWQWQWQWQWQWRWRWRWRWRWRWSVSVSVSVSVSVTVTVTVTVTVTVTUU;O,}--Q-Q-Q>4V#    %;     T   }h;n) -  )   1 ,}-  %;,}-  %;du;     (  % %Q;66n  'y     CA+BCDDDFFH=}{h08Dl  $RM$RM S Sgy a -#-#EEYEZFZFZFZFZFZF[G[G[G[G[G[G[HZH\H\H\H\H\H\I\I\I\I\I[I[J[J[J[J[J_J_J_K^K^K^K^K^K^L^L^L^L^L^L^M^M]M]M]M]M]N]N]N]N]N]N]O]O]O\O\O\OYOYPYPYPYPYPYPYQYQYQYQYQXQXQXRXRXRXRXRXRXSXSXSXSXSWSWTWTWTWTWTWTWTWUWUVUZUxx------)KZyK)\kb4AGAN^0{  2     >Fv !2Ss !2Ss%3  >>[s5iW<PN1a a <        ;     d; C%22   > z7#####$}$#$}###q####!#!#"##494gy )a-#-#DD\D_E_E_E_E_E_E^E^F^F^F^F^F^F^G^G^G^G^G^G]H]H]H]H]H]H]H]I]I]I]I]I]I\J\J\J\JYJYJYJYKZKZKZKZKZKZLZLYLXLXLXLXMXMXMXMXMXMXNXNWNWNWNWNWOWOWOWOVO[O[O[P[P[P[PZPZPZQZQZQZQYQYQYQYR\R[R[R[R[R[S[S[S\S\S\S\T\T\T\T ,}$3nXi!7 ,}-------xx---*=$RM ,} ,} (3|=| ,}$3Xi ,}$3nXi ,}$3nXifR.W4         [ E U i90CMuO ,}$3nXi&'s%;>'''(('(''--',)'))'(('!0'0/ ' / / ' " . 5' . . . . - . - . - . -.'.'.'.'.&.&.&.&.&.&.%.%.%.%.%.%.*.).).$+000',,%$",+0'$'"*g'+,+,.'././';LOM^LmMMMMMONMNMMXWMWVgMX M V M V M c M c M c M b M b M bMaMJMUMUMTMTMTMSMSMXMLMGMJMJMKMKMKMLMQMQMPMPMRMQMRMRM[MZMZ M Z M!Y!M!Y"M"Y"M"U#M#f$M$f$M$e%M%e%M&e&M&d'M'd'M'd(M(O)M)O)M)[*M*O*M+_+M+^,M,_,M,_-M-`.M.`.M.a/M/`/M0\0M0[1M1\1M1\2M2]3M3]3M3^4M4^4M6/R7MJK3at7)7)4)33)32)..)-7)2 ) 2 2 )1)76)66)65)55)4)44J)-).1)10)0/)//)+)+*%)+-)-,)+0)0* ) 0 ) - ,!)*xe) 6-PDiDDDD$DDEDE'DGDFDD'DFD@DEDE D F D B D F D C D C D P BDRDRDSDR,DQQVQVQVVQUUQUQUTQTTQSQSQQSSQPQRDPP P O P!O!P!P"P"O"P#H#P#G$P$G$P%C%P%G%P&H&P'D'I'P(I('P)I)N)I)I*I*N*N+I+N+I,N,M-I-M-L.I.L.I.L.L/I/L/K0I0K1I1K1J2I2J2J3I3H3sI4O:DBJ$c$|$$$$###$$#"$#"$##$##$#$###)#)#* # + + # * "#  ,  +  ) (  ( (( (' ' '& && % %% %* )x ,"J(c(|(''''&'&$'&$'&$''$''$'('''-',', ' , , ' . "' . - . $ . / ..+.++.+*.*.*).)).).)(.%%.".-'..$f^vC]CaC_^CffCfeCedC Y C Z Y CYC\[CXXCXWC^^CaCJJoC_C_CddCdcCcbCbbCZC[[1CZC]]CLKCK J C!]!\!C!`"C"`"`#1C#O$C$P$P%C%V%U&C&W&V'C(T(T(C(M)C)R)Q*,C*W+C+U+U,C,U,T-C-O-N.C.O/O/C/L0C0Q0P5%C5O5M6C6L6C7N7S7%C8W8R9C9R9I:C:H:H;C;L;S<C<R<C<R=IBCDDCO_ANAMAVUAUNAMMAWbAaA a a A`A^A^_A^_A_`A`\AWA^]JAVAVAWVASRARRAPPAQARQJAPASTASU A [ Z!A!O!O"A"["A#[#T&lA'L'A'X(X(A)X)Y)A*Y*Y*A+Z+Z+A+\,A,[,\-JA-K.A.L.K/A/J0J0A0I1H1A1H2H2A2J3A3L3L4%A4O4E5A5E5F6A6F6G7A7F7G8A8G8A9J9I;ABe}      *!j tttttfzfzfzf{f{f{f|qf|f| f } f } f ~ f ~ f ~ qf  f fffƀfftfЁfffڂffftffffffffffff߇ff  qf!ڈ!f!#f%'f'(f(ډ(f()f))f)*3f,h,*f,t....//f/0f00f01f1ŋ1͋1ŋ2h2ŋ2i3ŋ33ŋ4i4ŋ4i5ŋ5i5ŋ6j6ŋ6j7ŋ7j7ŋ7j8ŋ8k9f9k9f:k:f:l;f;l;f<l<f<m=f=m>f>m>f>n?f?n@f@n@f@oAfAoBfBoCfCpCfCpDpDfDqEfEqErE(qFrFqFڌGqGG(qHxHqHxIqIyI(qIyJqJyJqJyK(qKxLqLxLqLtL(qMtMqMuNqNuNqOKtOsPtPsPtPrQtQrQtRsRtRsStSuTfTuTfTvUfUvVfVvVfVwWfWw_PqhHDMNNNNOOOOOOPOPP$PP$PQ$PQ$PQ$PQ$PR P R P R P R P S P S aP S P SPTPTPTPUPUPUUPUPVPVPVPVPWPWPWUPWPXPXPXPXPYPYPYUPYPZPZPZP[ P [ P [!P![!UP"\#P#\#P#\$P$\$]%\%]&\&]'\']'\(^(\(^)U\)^*\*^*\+_,7_-`-%_-`.%_.`/_/ `/`/`0a0a0a1a1b1b2b3b4c5b5c5b5c6b6c7b7d7b7d8Ub8d9b9d:b:e:b:e;b;e;b;f<b<f<b=f=6b@bA_M'9mH           ,H%,*,   ,    ,    8g         Qa  M  ^     $% ,V7[Q% &V[iAWm          F0V006,6105/ /  , /01/10///L151515151///3/3/0//144 1 4!4&2&4&1'4'2'4'2(4(3(4(2)4)3,6,-3---#,.5.3../,//11K+DC!DCDCDLDKDCDBIDLDLDHODHHDKKOD FI I G OI I H I J J OIIIIIMLIKJI@@I@?IAIA@OI@IBBIBAIGGIB:I;I;;OI;I=<I<<I>= I = =!I!?!I"?">"GI#>#F$I$F$E%I%E%:&I&9&F'I'F'I'E(D(TI)D)I)D*M*I9Li[i!ijiiIihigigOihhiggOiFkkk Ok k f k _ l kljkklTkikiykivivimixkqrkuukuvkwkvk||kopkppkqqkxkwwkn k t!k!s!t"k"r"r#k#|#X$k$z$z%k%y%k&z&{'k'm'k'm(k(n(n)k)o)o*k*x*y+k+s,s,k,t-k-{-{.k.`/k/`/_0k0a0a1k1f1e2k2\2[3k3c3k4c4b5k5c5k5b6a6k7_7^7k8[8[8k9[9Z:k:Z:k:Y:Y;k;Y<k<^<]=k=]=]>k>]>\?k?e?e@k@dAkAdAcBiBdBiB`CkC_YY+PP!POPhPhPePdPdNPdPgPfOPffP`` OP F` ` e O` e f ` e b O`b`c`ba``a`aM`LN`N`ccO`d`c`YY`ZY`XX`YX`[`[\O`\`[Z`[[ ` ^ ]!`!^!^"`"\"`#\#]#O`$]$`%g%g&`&g&M'`'_'^(`(`(_)`)U)`)U*U*O`+U+`,T,S,`-U-T-`.W.W.`/X/W/`0V0`0V0V1G`2V2R2`3R3S3`4S4Q4`5Q5R5`5R6`6P6P7T`7Q8`8P8O9`M Sqbq!qqqrqqrqrqukqEqpqqOq ׊ q Ҋ  Oq F   O  pOpzzz5cz|{z{{Oz}|z||FzOz}}zzzKzzɍz č  z!!z!!lj"Kz#‰##z$y$x$z%x%w%z&w&z&v&u'nz(y(y(y)y)y)y+y+y,y,w,t-y-w-y.w.v.Ty/r/y0v0v0y3z3q334z555z66̓6z7ׂ7z778bz9ȃ99:ȃ:';ȃ;ׄ;ȃ<'<ȃ<=ȃ='>ȃ>ۅ>ȃ>'?ȃ?@ȃ@o@ȃAnAkAȃBzBnBnCzCnDzDmDmDTzElFzFoFzFoGnGmHoHoHoHoIoIlJoJlJoJjKoKKoLLoLMoM~MoM~NoN~NoO~OoO}PoPṔQoQqRǁRk[aja!a]attajajaiSasrarrEaia[aZOa Z Z a Z Y Oa FY Y ] OY\]Y][OY[\Y\k5YckllkkkOkkjkYXFkXVOkmmkmlkpkppKkooko n k r!q!k!o"k"q"p#Kk$t$s$k$s%s%k%h&g&k&f'k'g'f(Ok(f)k)h)k*i*h+k+h+k+g,k,g,k-m-k-m.k.n.k.n/k/d/k0c0k0d1k1d1k1c2k2b3k3c3c3Ok4f4e5k5e6k6e6X7Vk7e8e8b8b8b9b;b;b;b<b<_<b<d=b=a=`>Tb?^?b?a?a@bBkX ]wlw!wwwʈwgwgwfSwjiwihEwwhwhOw h g w n f Ow Fn n m OnmnnmlOnklnlj5ncjkkjwwOjvvjvuFjuuOjutjttjsjtsKjqqj q p j s!r!j!s"j"r"q#Kj$p$p$j%p%o%j%o&o&j&'j''(Oj()j))j**։*++n+,n,,؅----..//܆//000111܃2222333DŽ4O455666777788π89؂99::::;;;<<<~==~==>>????O@}@}AA}BB|B~CVC~D~D}D|D|E|G|G{G|H{H|H|H|I|IzIzJT|J{K|KzKxL|NjfI$0}0010100/0000\011f//./ 2 B. 4 / .U7m7l7+777477777979/7:9]78798X765755[7I767X7 6 6 7!5!3!]7"4#7#4#2#!7&4&)&4*..//,k%-0"x__4@s3      | /   RGYq0  vn:  |       %3  $RM$RMAT%Pgy a-#-# ,}$3nXi--xx- ,}$3nXi ,}$3nXiC`:1         |eY8 A    }08 "*drk`              7  " $RM$RM:Huxx-#-#gy  "*dr.6)m" }GXt7"$RM$RM:Huxx-#-#gy %9F:H[*=8EY5BOk5G[)B)<)<)B)<)A6-Z }NNA79McN0}08NA79McN0}08NA79McN0}08NA79McN0}08NNNNN5OE86MVh-}08I=9Mce}085O5O5O5O5OA76MVsh-}085OA76MVsh-}085OA76MVsh-}085OA76MVsh-}08NNNNN)h%Z%Z%Z'h't'i)jGGddd1Id|3d|3d|3d|3N5O+I@l          5O),5O),5O+5O),NNNNN5OGt1d|3,  N,    ,EYv) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F,EYv) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F,EYv) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F--QE  f8E!Hl!Hl2RFf L@Qa @%$RM@%$RM@%$RM$RM$RM  gy a-#-#&,}&5l}c   S$ '&+:q (,s4YP1+ ,s4 Qak Qak*&1bg~$iy,s4#[cnX-w!7--xx-Q-Q-Q-Q-$5KV=;]F^!74NI\ v$!##!!"!### " " 7" " 7"""e 3"!"M"> )" T":"s", a####,ALHR9    a      j)m"},EYp) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]FR?,D,M{G$L(<$Hh)6$Hh#3D\8E:59:54:5D25155555K5J5J5J 5 I 5 I 5 I 5 H 5 E 5 E 5 D 5 6 5B575:5358535@57525B5@5A5A545653545252575958565B5C 5 C 5 C!5!E!5!G"5"F"5"G#5#F#5#G$5$F$5$H%5%@%5%A&5&:&5&='5';'5'>(5(;(5(=)5)<)5)?*5*:*5*=+5+<+5+>,5,;,5,>-5-<-5-?.5.8.5/11%3!&5zBQ         > o w) 7XMA*:Gt&}A6,Y%}#@0d&.F+D>       M s .TU%%>%>&>&>&>&>&>&='='='='='='='=(=(=(=(=(<(<)<)<)<)<)<)<*<*<*<*<*<*;*;+;+;+;+;+;+;,;,;,;,;,;,;,;-:-:-:-:-:.:.:.9.9.9.9.9/9/9/9/9/9/909090808080818181818181818282827272727373737373737374747464646465656565%%>%>&>&>&>&>&>&='='='='='='='=(=(=(=(=(<(<)<)<)<)<)<)<*<*<*<*<*<*;*;+;+;+;+;+;+;,;,;,;,;,;,;,;-:-:-:-:-:.:.:.9.9.9.9.9/9/9/9/9/9/909090808080818181818181818282827272727373737373737374747464646465656565 0%' '  '  % %''(((  (""(%%%(((**(--'00'00%33%66(88(;;'>>'@@'CC'FF'HH'KK'NN'PP'QQ%ST%VV'XY'[['^^'^^%aa'dd'ff'hh&jj&ll&nn&op&rr'uu'ww'zz'}}''ʂׂ'''؈'%׍''(ԕ'''͝ڝ'%%£ϣ''%ī''(ų((ظ('%þ%''''%''''''''''%%(''''''%%''̈́ڄ''%Œό''(ؔ(''Қߚ%5   'Kk)QO  )     F5.R/..0021111100-. - - , . + / / /'+.'+/+#+& &'++'++-./+02000-00101111111121%%>%>&>&>&>&>&>&='='='='='='='=(=(=(=(=(<(<)<)<)<)<)<)<*<*<*<*<*<*;*;+;+;+;+;+;+;,;,;,;,;,;,;,;-:-:-:-:-:.:.:.9.9.9.9.9/9/9/9/9/9/909090808080818181818181818282827272727373737373737374747464646465656565[eG5v~'i^+1 $RM$RM)85O44 S]6gy )a-#-#,7_ Qak&1bg~$iyxx-Q%>HPX"          BQX`     -m f)!%:OT\ K          <     "  ]T\ 02     M!  3  * %%%&؃&΃&ă&&&'''''''(ւ(̂(‚((())))))*ށ*ԁ*ʁ****++++++,܀,Հ,΀,ǀ,,,-----......./~/~/~/~/~/~0~0~0~0~0~0~1}1}1}1}1}1}1}2}2}2}2}2}2}3|3|3|3|3|3|3|4|4|4|4|4|4|5|5|5{5!V{W{W{W{W{W{WzXzXzXzXzXzXzYzYzYzYzYzYzYyZyZyZyZyZyZy[y[y[y[y[y[y[x\x\x\x\x\x\x]x]x]x]x]x]x^x^w^w^w^w^w_w_w_v_v_v_v`v`v`v`v`v`v`vavavauauauaububububububucucucuctctctctdtdtdtdtdtdtetetetesesesesfsfsfsfsfgsgrgrgrgrgrhrhrhrhrhrhririqiqiqiqiqjqjqjqjqjqjqjqkqkpkpkpkpkplplplplplplplpmpmomomomomonononooi#$&&((^J6#vP)QO  )     -+U'/+C!lg +CLx)MKJ3-Rn>DD]D]E]E]E]E]E\E\E\F\F\F\F\F\F\G\G\G\G\G[G[H[H[H[H[H[H[H[I[I[I[IZIZIZJZJZJZJZJZJZJZKZKZKZKZKZKYLYLYLYLYLYLYMXMXMXMXMXMXNXNXNXNXNXNXOXOWOWOWOWOWOWPWPWPWPWPWPWQWQVQVQVQVQVQVRVRVRVRVRVRVSVSUSUSUSUSUTUTUTUT;O'7_'&5l}%4089&ED%408S-Qn$aU L  #}08$ &m \NA~B~B@BBИB BpBBB`BBBpB BBB@CC#C`3ClCCCC`*D]DDpDDDDpEE dE0dEnEp~EЎE0EEEPEEE0F@`FpFFF@FF#G#G-G-GeGeGfG`vG0GGGGPGGG`GGGpG GпGG0G GGGpG GG0GG@HH=HHЀH0HHH0H@HI0>ImIIII`+JZJ@JJJK@IKyKKШKKLGLpwLwL LЈLLLLpL LРL@LLLPLLLLPL LLLM`M0&MEMdM MMM0MMMM0M`MMNN Np\N{ %v<=C-GIaOzOfQQRnn o hA dvglo@x@@ د p-;A2A( o1Aoo(Al6hAFhAVhAfhAvhAhAhAhAhAhAhAhAhAiAiA&iA6iAFiAViAfiAviAiAiAiAiAiAiAiAiAjAjA&jA6jAFjAVjAfjAvjAjAjAjAjAjAjAjAjAkAkA&kA6kAFkAVkAfkAvkAkAkAkAkAkAkAkAkAlAlA&lA6lAFlAVlAflAvlAlAlAlAlAlAlAlAlAmAmA&mA6mAFmAVmAfmAvmAmAmAmAmAmAmAmAmAnAnA&nA6nAFnAVnAfnAvnAnAnAnAnAnAnAnAnAoAoA&oA6oAFoAVoAfoAvoAoAoAoAoAoAoAoAoApApA&pA6pAFpAVpAfpAvpApApApApApApApApAqAqA&qA6qAFqAVqAfqAvqAqAqAqAqAqAqAqAqArArA&rA6rAFrAVrAfrAvrArArArArArArArArAsAsA&sA6sAFsAVsAfsAvsAsAsAsAsAsAsAsAsAtAtA&tA6tAFtAVtAftAvtAtAtAtAtAtAtAtAtAuAuA&uA6uAFuAVuAfuAvuAuAuAuAuAuAuAuAuAvAvA&vA6vAFvAVvAfvAvvAvAvAvAvAvAvAvAvAwAwA&wA6wAFwAVwAfwAvwAwAwAwAwAwAwAwAwAxAxA&xA6xAFxAVxAfxAvxAxAxAxAxAxAxAxAxAyAyA&yA6yAFyAVyAfyAvyAyAyAyAyAyAyAyAyAzAzA&zA6zAFzAVzAfzAvzAzAzAzAzAzAzAzAzA{A{A&{A6{AF{AV{Af{Av{A{A{A{A{A{A{A{A{A|A|A&|A6|AF|AV|Af|Av|A|A|A|A|A|A|A|A|A}A}A&}A6}AF}AV}Af}Av}A}A}A}A}A}A}A}A}A~A~A&~A6~AF~AV~Af~Av~A~A~A~A~A~A~A~A~AAA&A6AFAVAfAvAAAAAAAAAAA&A6AFAVAfAvAAAAAƀAրAAAAA&A6AFAVAfAvAAAAAƁAցAAAAA&A6AFAVAfAvAAAAAƂAւAAAAA&A6AFAVAfAvAAAAAƃAփAAAAA&A6AFAVAfAvAAAAAƄAքAAAAA&A6AFAVAfAvAAAAAƅAօAAAAA&A{P{{@:@:H| D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D߃߃cd0OddSdad0wdpKdPkdrd܁܁Ё(dPdddzd{ddpddVVdddddd dиdd`@`d__dddddd dиdd@@dl(v\\cdddSdadyddPkdrdPP ~\hRRdddddd dиdd  @`dNЭ4̂8 ʭl`ZddddddddPd  cdddSddyddPkdrdPP ~`h`ee@ eeP ee`eePe e hP`ǭ(--`ee@ eeP ee`eePe e h @̭8ܭC O^lvϭϭxxdddddd dиdd 0` @@ @ƭԂ``dddddd dиdd `H @ޭ 08@@ƭԂdddddd dиdd  @ H0 $  "& @   .Gby "(&//0e`eeee`eee`e``h-zPdpd  !"#$%&'()*+,-./0123456789:;<=>?@ #e ed e "e#eeP#e#e`ee@ eeP ee`eePe e@`  "1CQQdddddd dиdd@8 ভ @_ j }dddddd dиddPP@(T @$e@p%e  %e@p&e !  $$dddddd dиddЭЭ`ԭ @@)(@3x @=DMMYeXepZe`Ee&ePNe(e`[e-ell`0@@:T~dddddd dиddభP8@ @@4e 5e @:(5e0ح::dddddd dиddPP೭0  @3e3e 4e&0e0e/e1e`1e1e2ep2e2e൭൭(@(;Adnndddddd dиdd@hPອ@@­GH@=DQQdddddd dиdd@`@( @ԭR\ g r6e6e 6e@7e7e7e@8e8e8eྭྭ(@      C    # 7 H Yrde==`ee@ eeP ee`eePe e@ĭí­H0 í @9eŭH9e@ŭV @:eĭa      `;e;e=e;e0eʭ >eɭ" bbdddddd dиdd˭˭˭ ˭(`˭˭@C. ; ::dddddd dиddͭͭέ̭`H@ͭͭ @ԭRH  \ LU (FY 8a @Be q q @eP@ep?e@e@ePAeAeBePBe`Э`Э dddddd dиddѭѭѭ ѭ0`ѭ @Beӭ  Ceӭ0| Ceҭ  `e0`e`_e`e`e0aeaeae0beԭԭ@֭ԭ(@խխ             cdPydbeSdadyd`wdPkdrd׭׭׭ ~h  dddddd dиdd٭٭@٭ح8 ح @ڭ$ feۭ6  ge@ۭ? $ $ de0de`cedede0eeeeee0feڭڭ@ܭڭ(ۭڭN 0EEdddddd dиddݭݭޭ`ݭH0ݭݭ @ޭ( LU U U dddddd dиdd߭߭`߭p߭ @Te 8s H G~ hePhegehehePieiejePje``@(   ' ' @kepkemekeleplele mepme`` 4 4 dddddd dиdd@@@? x@eH O O dPdddzd{ddPne@oe``( ppeperepe@qeqeqePrere  @ @@ cdseyeSdadxduePkdrdll`( OOdddddd dиdd@ P8 @I\pm ze@z @W({e0@W22`ee@ eeP ee`eePe e@`H0{e@|edddddd dиdd` @7dddddd dиdd@(@|e@ }e?dddddd dиddPP ``H `  "@ @  @ )(-0 j81@@"hdddddd dиdd@0 @7 g*g*dddddd dиddX@  @@~  ( j0H8'ggdddddd dиdd@@`P  @@ w @~ jdddddd dиdd 0` @7  @699dddddd dиdd @( @M@Y *^ m #e~ed e}e ~e}e`~e}edddddd dиdd`x`@dddddd dиdd @(@7dddddd dиdd  @  H0 @ee~ee`eeepee  dddddd dиdd    p@   @@@P @XƮ2h'BO O ddddddepee(dddddd dиdd`0@, #88dddddd dиdd`` @(P@7WW`ee@ eeP ee`eePe e`@( @b@9m @9u@9dddddd dиdd X@ @ІePe peeЇee@eeePee(@ % 5C_oeeee`eeepee  @ dddddd dиdd`0 @7  @60e`eeee`eee`e``(  "//dddddd dиdd!!! `H !  "@ @Ѯ=/K Wg ٮw(048%@"dddddd dиdd$$%`$0$$ @ j @dddddd dиdd&&'`&pX&@(PeeeВe eeГe0ee ( ()@(((h(1 9 DNNdddddd dиdd`*`** *H0P*@֮^llpeeДee@eeePee`+`+,+(++ { eeee`eeepee - -@/@-(--       ) 6 P k ~  dddddd dиdd000`0@(0@dddddd dиdd22@21@(12@2 dddddd dиdd333`3 3@@#dddddd dиdd55@54P84@e50e`eeee`eee`e667**dddddd dиdd888 8(`88@ˮ;@XПeePePeeePeee99:''dddddd dиdd;;; ;(`;@Тe<<Pe@<B?GG`ee@ eeP ee`eePe e?>=(@> hPkW Pd@sq`ee@ eeP ee`eePe eB@A@x`@ Y@y @peeee@eeePee C C@C OOdddddd dиddDDE`DpD@eE\@_flleШee epeЩe eeЪeFF@GF(GFtzdddddd dиddHHI`H(H @ ee e@eee@eee`J`JKJ(KJ#"dddddd dиdd@M@MML8 MDM @@ePeO @eOeNdddddd dиddQQQ Qx`Q @@eS(аeS P `eRt" dddddd dиddpUpUUT8 U @ #     00eeee`eeepeeWW@YX(X@X  @ LZae0|lpdddddd dиdd [ [@[`ZH0Z$[ @e^e@^ e]e@]  @g (e\   ` ` `ee@ eeP ee`eePe e@b`_hP@` edZe@dl ec0| e@cf rebk ǭ "" = =e ePepee epeмe eeeff(@f(fo u |} } YeXepZe`Ee&ePNe(e`[e-egg@hhg0@@T~ dddddd dиddiij`ihPi@pek(ej  '!'!dddddd dиddllm ll @eo4!( eoP en x@en>! G!G!peeee@eeePeeppqp(qpT! Y!d!!!cdPydeSdadyd`wdPkdrdssrXR"R"dddddd dиddttts@t @ex4!(Pe@xP ew xpe@w>!evb"e@vq" ""dddddd dиddzzzyH0@zz @ e}e@} e|"" e@|#(#   *#*#dddddd dиdd  @~H0@8###dddddd dиdd X@` @ eeH  #: $$ee@e@eee@eee  @&$&$`eeee0eee@ee(@(5$:$ >$$$eeeePeee`ee?$$YeXepZe`Ee&ePNe(e`[e-e,,@ 0@@T~$$ ePeeeePeeePeR%R%ee@e@eee@eee``%%dddddd dиddX@ @e@%@e% e@%@e% e@%(Pe%0e@%8`e% %%YeXepZe`Ee&ePNe(e`[e-ell`0@T~f&f&eeee`eeepee&&0e`eeee`eee`e  @&&YeXepZe`Ee&ePNe(e`[e-ell`0@@T~''dddddd dиdd  @ @@9m!''dddddd dиdd 8 ę @0e'e' 0e'@6'?~,~,dddddd dиdd 0` @e(@e!( Į4(F(F(dddddd dиdd`` H0P@Ϯ[(dddddd dиdd`H0@@ήp(((`eeee0eee@ee?((dddddd dиdd@@࣮hP D@@(H( ) )dddddd dиdd@(८@@Ӯ)))YeXepZe`Ee&ePNe(e`[e-ell`0@@ T~9)9)dddddd dиdd  @ਮ8 @ Q)i)i)e0e`eee0eee0e  @(h}))))dddddd dиdd  @૮H0@׮)))YeXepZe`Ee&ePNe(e`[e-e,,@ 0@@ȮT~))YeXepZe`Ee&ePNe(e`[e-e0@@@T~@d*d* ePeeeePeeePe  @(v*v*YeXepZe`Ee&ePNe(e`[e-ell`0@@T~))dddddd dиdd@ ಮx`@  "& * . @* e@* e* e@* e+( e@+0e&+8 e@8+@"eF+H&@e@O+P*eY+X.`e@d+  {*{*dddddd dиddPP ``H  "@*e@Į+ peî+e@î+ pe®+(e@®+0pe+8e@ ,@"pe , 3,3,eeef`fffpff`Ů`Ů@ƮŮ(ŮŮE,W,j,{,{,fff0fff0fff`Ǯ`ǮȮǮ(ǮǮ ,))dddddd dиddɮɮʮ ɮP8ɮɮ @M@Y ,*^(,0@,,,dddddd dиdd`̮`̮̮ ̮H0P̮@̮,,,YeXepZe`Ee&ePNe(e`[e-elͮlͮͮͮ`ͮ0@@'T~ - -YeXepZe`Ee&ePNe(e`[e-eήή@ϮϮή0@@T~"-"-YeXepZe`Ee&ePNe(e`[e-elЮlЮЮЮ`Ю0@T~ ;-;-dddddd dиddPҮPҮҮѮP8 ҮTҮ @@)I-(@Ӯ)0 @Q-^-^-dddddd dиddԮԮԮӮ@(@Ԯ @M@Y f-r- {---YeXepZe`Ee&ePNe(e`[e-e֮֮׮֮֮0@@T~--YeXepZe`Ee&ePNe(e`[e-e,خ,خخ@خ خ0@T~ ..dddddd dиddڮڮڮٮX@ڮ @0f@,.f߮2. 0f@߮8.fޮ>. 0f@ޮ(fݮ 0Pf@ݮ 8fܮ 5252 f@ f f f f@ f f f@ f``$$dddddd dиddX@ @. f. . f@/ f/(f@/0f*/8@/  //0f`ffff`fff`f(//`ee@ eeP ee`eePe e H0`/7/--dddddd dиdd X@` @0f. "L000Pffff fff0ff300dddddd dиdd@@P8 @=030@1@1dddddd dиdd@(@Pf@V1f_1? / /f fpfpff fpff f``&&dddddd dиdd``H0d @f2#,2 @,>2S2 pfa2(<n2 22ff ff`fffpff 6363dddddd dиddX@@  @ fJ3!fQ3 !fX3"fb3 "fm3(#fx30#f38$f3? ?33dddddd dиdd@0 @$f3%f3 %f4??  4 4dddddd dиdd`` `HP@444`ee@ eeP ee`eePe e@`H0@I)4@L-4 D DYeXepZe`Ee&ePNe(e`[e-el l  ` 0@@MT~#)#)`ee@ eeP ee`eePe e  H0@  @ 14A@4 >C4:P4`4i4i4dddddd dиdd``  P@@4'-'-`ee@ eeP ee`eePe e@`hP/F/44&f&f0)f0'f'f'f0(f(f(f``?[s44dddddd dиdd@(@05A5v5v5dddddd dиdd`(@)f50*f5--dddddd dиdd pX`@*D555dddddd dиddH0@ @*f2#,2 @,>2S2 0+f@a2(56 #6#6YeXepZe`Ee&ePNe(e`[e-e@0@@$T~ 66P,f,f.f,f -f-f-f0.f.f`` 2 2/f 0fp2fp0f0f 1fp1f1f 2f66dddddd dиdd@!@!! ( !@6@Y66YeXepZe`Ee&ePNe(e`[e-e""#""0@@QT~a7a73f3f6f4f`4f4f5fp5f5f $ $@$p7p7dddddd dиdd&&@&`%@(% @*[7 @W7@\7 @P7,,dddddd dиdd((( ((`(@+76777dddddd dиdd@*@**)( *@7B&8&807f`7f9f7f8f`8f8f9f`9f+++ 2828dddddd dиdd@-@--,( -@@/H81S888:f;fP=fP;f;ff>f@f>f@?f?f?fP@f@f//0||Bf@BfDfBfBf@CfCfCf@Df 1 1@199EfEf0Hf0FfFfFf0GfGfGf`2`2299dddddd dиdd44@43034 @]9]9 9999YeXepZe`Ee&ePNe(e`[e-e556550@@OT~ l:l:PIfIfKfIf JfJfJf0KfKf 7 7@7~:~:dddddd dиdd889`8(8@+76:::Lf MfpOfpMfMf NfpNfNf Of : :@: `b;b;PfPfSfQf`QfQfRfpRfRf`;`;; r;r;YeXepZe`Ee&ePNe(e`[e-e<<=<<0@^T~ ;;0Tf`TfVfTfUf`UfUfVf`Vf > >@>7<7<WfXfPZfPXfXfYfPYfYfZf`?`??D<D<YeXepZe`Ee&ePNe(e`[e-e@@A@@0@@OT~<<p[f[f]f[f@\f\f\fP]f]f B B@B==_f@_faf_f_f@`f`f`f@af`C`CC  = =`ee@ eeP ee`eePe eF@EDP8D @h=+= @h@=O=O=dddddd dиddGGH GH0GG @@Y, *^ ,(@,]=]=dddddd dиdd@J@JJI( J@Kn=Kx===bfbf0ef0cfcfcf0dfdfdfKKK?==dddddd dиdd M M@ML M@K=JEJEdddddd dиddNNN N0`NN @"= >::`ffffefff0gfgfgf@hfhf P P@r>r>ififlfjfPjfjfkf`kfkfPPQ66dddddd dиddRRS RX@R @*lfV> mf@V>mfU> nf@U>(b>8nfT??  ?h?h?ofof rf pfppfpf qfqfqfWWXv?v?dddddd dиddYYZ YY @d?H#?P ?x? @ @@sfpsfufsftfptftf ufpuf[[[?d@d@vfwf`yf`wfwfxf`xfxfyf\\]@@zfzf}f{fP{f{f|f`|f|f ^ ^@^@ w;w;`ee@ eeP ee`eePe e@`_`__`@X@@@dddddd dиddaab`aP8a @#??0 ?@@ ~fP~f}f~f~fPfffPf`c`c@dc(cc AAAA$A$A`ee@ eeP ee`eePe eg@f`eH0e @ 14A@4 5A>C4:P4`4AAdddddd dиddkk@kh0@i "& * . 2 6 :>BFJNRVZ^bfjnr@`fAfA `fAfA `fA(@A`fAhfBp"f~Bx&f~B* f}#B.f},B2@f|5B6Ѝf|AB:`f{IB>sf{RBB@fzYBFrЏfzbBJ fyrBNfy{BR0fxBVfxBZ@fwB^ВfwBb`fvBffvBjfuBnfuBrftBbBbB@fpffffpff fpf s s@sFRBRB0f`ffff`fff`f t t@t>       ?  3C3CЖffPfPfffPfff  @?CCdddddd dиdd`(@ЙfCPfC D Dpffff@fffPff  @DDYeXepZe`Ee&ePNe(e`[e-ell`0@@T~ DDdddddd dиdd8 @ @pf@DfD pf@DfDDDdddddd dиdd`(@M,FEFEdddddd dиdd x`@pfZE@444`ee@ eeP ee`eePe e@pX )4-4-4-4dddddd dиdd@`@(  @@gE@xE EE E)4)4dddddd dиdd P8ȗ @E E( E0E.F.Fffff`fffpff?FF0f`ffff`fff`fFFШffPfPfffPfff  @TGTGdddddd dиdd` @Ыf# fGfGYeXepZe`Ee&ePNe(e`[e-e,,@ 0@T~GGf fpfpff fpfЮf f.EEffff`fffpffࢯࢯlHlH0f`ffff`fff`f  @HHзffPfPfffPfff`` D D D D D D D D D D D D D D D D D D D DkWkkk0ykk@kkkkpCkkAkck kЎk0?k`kp=k gk`ek;k@Ykk09k@kkskk nk6k0kkkqkpkk\kZkkjkhkk4k`lk03kUk0k`k}kP{k1kЩk0k.kPkkk@k`^kk,kkk`kk *kPwk`uk`(kak `k0kPkOkТk0TkpRk`kkkگ @=nѰ@**(l`l*(:l:l*(:l0;l*(p;l>l*(l`l0*(AlClX*(PDlGl*(Il`Ll*(Ol`Sl*(WlYl*(P[l]l2*(l`l8*(^l_lP*(0alpfl`*(klol*(ll*psl*(wlДl*(lдlj*(ll8*(l lX*(l l*(l l*(l`l*(ll*(`l l@*(pllA|*(mm0mm*(ll*( l`l*(mlPml*(m`m0*(@mlm@lX*(l0l*(ll*(@ll*(ll*(m0m2*(m@mm@m8*(mm mmP*(m`m m m`*(mm*(`m{mm0{m*m*(m:m*(WmZmj*(mzmm0zm8*(\mPbmX*(gmPjm*(m`mmm*(0mlmmom*(0rmsm*(mummPwm@*(PmP~mymP}mP|mymA]*(npnnn*#(n`mnm*#(nmpnm*(@n@mtnpm*(nn0*(nmwnmX*#(n m nm*#( nm n0m*(m0m*#(nmnPm*( mm2*(`nn`nn8*(mnmnP*(@nmn@n`*(n` n*(0n`pnnon*@ n*#(Pnn{n.n*(KnNnj*(nPonnnn8*#(ЯnQn}nVnX*(P\n^n*(nnn`n*(Еnann0dn*(fnhn*(n0jn@nkn@*(snrn@nnqnpnmnA\*(opooo*#(o`non*#(onpon*(`o@non*(oo0*(ononX*#(o n@one*m#(0o@on0o@o@n*(oPo*#(`o oop o*(@ oo2*(@oo0op8*(ooopoP*(`o oo`o`*#(oooP!o*(Po|oo{o*%o*#(poP)oo@o*(WoZoj*(оop{oozo8*#(o]oo coX*(phoko*(o ooo*(omooPpo*(roto*(ЪoPvo`oxo@*(oo`zo~o}oyoA*(`p0ppq*#(@p pppPp*#(pp0pp*(ppp0p*(pp0*(p`pPp pX*#(p pp p*#(p@ppp*(pp*#(@q@pq p*(!p#p2*( qq qq8*(@%p` q&pPqP*(p'ppp-p`*(@2p 6p*(p ppp*:p*#(pP>p@p`[p*(pxp`{pj*(ppp@pp8*#(pP~pppX*(pp*(`pp`p p*(pPp@pp*(p@p*(ppppp@*(pppppppA*(@rrr rrr*#(r q0rPq*#(rqrq*(PqpqqЭq qq*(r@rrr0*(qq` qqpq!qX*#(pr"qr%qe*m#([rr@(q\rr+q*(r-q0r2q*#(r`6qr08q*(r:qr;q2*(rr@rrr r8*(`=q rr>qr rP*(r?q0r Eq`*#(r`JqrNq*(r@qprq/>*q\rerrQq*#(qVq`q`mq*(Prq`&rqj*(@r0qrq8*#(PrqжqqX*(0mr0q`urЗq*(`WrRr`Sr Rr*(rqpqq`qq/>N]*(0Nr 2r7rP=rBrHrq`q*( rqqq qФq@*(ЬqЫq qЪqЩqqA *(tpt@ttPt t*#(`trtr*#(trpt r*(ss`r0ssr*(`ttPtt0*(psPsrsЌsrX*#(Ћt@rtse*m#(p7ttsp8tt`s*(pat sktps*#(`tsts*(ps`sss2*( tttttt8*(st0tsttP*( t@st!s`*#(`t&s`tp*s*( `ts^ts/>*PsP9t`Atwt .s*#(0sp2ssIs*(sastdsj*(]tsp\ts8*#(sfs0s@lsX*(ItqsQt0ts*(3t /t/t.t*(`s@svssspys/>N]*(*tt0ttPt$t|s}s*(@s sps@ss0s@*(0s0ss0s0ssA *(Ѓvv`vvPv v*#(Tvt Vvt*#(vpv@tvvt*(@uput \utu t*(v@|v|v{v0*(uЉutvu^utX*#(mv0\vtptvPbvte*m#( kv@ v0ivt`Zv@ v0jv0t*(2vt;v@t*#(Pvtvpt*(Pu@tPut2*(v@v vvv`vPvv8*(tpvvtvPvP*(Wv t Yv`t`*#(OvuRv@u*(0vPWup/vVu/>*pu vv0Gv u*#(u@u0bu u*(u2uu5uj*(0.v@Vu,vUu8*#(`u8udu>uX*( v@Cu"vEu*(@vu@uPuuu*(uPuHuyufu Ku/>N]*(uuuuuuMupOu*(pu@u QuunuRu@*([uZu0UuXuWuTu.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.gcc_except_table.tbss.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss p@p@ !@$4o@> @pbFx@xدNo(A(4[o1A1j2A2(tB;A;- ~hAhy hA h0A0265dvd6 v6L@EڅEԳJggMggMllMllMllMPooMppM@@M@3H3Q@H3Qgnss-sdr-0.0.6/debian/gnss-sdr/usr/bin/volk_gnsssdr_profile0000755000175000017500000566502012577077174023347 0ustar carlescarlesELF>qD@c@8 @@@@@@88@8@@@RR uu( uuPPTT@T@DDPtdTT<7<7QtdRtduu/lib64/ld-linux-x86-64.so.2GNU GNU/6-pr J `E #,/SD&¥Q3%#b.*K)#ق1f1^c q 0,fVBCDJD2`LD@QT`%0,B @!:IPHlR<D@f#"3 "U@3!bR5qa ܀PD !* !kQQB L #A D2H4"P E8 6XI R5M6L,p 4 EH  E)b!ɔ9*V )QrQh}!B! =@89hPBXQ)\9p,τbT @ "UiY PdV?J " "!TܐXHP5H@YfC芘rSB L:Ld"Q 'P8(#&IVBh)4@ @!(Ud \$G@@s&@V^ N` D()JM D H$ZR Pj(D&X  5h#݀`-("H D"(Q,2P6H` 1+)$# @1@ U5O'JrL,1 @N 4Z  BbSE n}IE8(ґRT(4'KHF<(PBrB1j<"$1` Ĉ ȊpL1"`! BH A -r  5XE 2 CZpH  @P QDbbhU8 h H0 @!@@1A))5| 8-p\q HhP&   "#$%'*+-/124678:<@ADFIJMNPRTWX[\]^_`acefilnoquwy{   $&'+-12469;<>?@CDEGIJMNQRTXZ[\]^`acdegiknotuwy{} "$%',.0124568:;=>?AFGKLMNORSVXZ]^`aceghklmnqtwxz|}    #%'*+,-013468;=?BCDEHJMOPQTWY]^abcdghkmoprtuxy|~ !$%'(,-./2469;=?ACEHKNOPTVZ[\_`bcdegiklpqrtuwyz{}~     $()*+,./012458:<=?@ADFGHJKNOPQSTUVWY[\^abdfimoqstvyz{|}~[aV4WFA ZQҢ-;w$IJxԲmq@c`k|@6nd"9)4[%Ǵ9Pq s0wH/ ׈4bIMfn)rC,RV J/`waMǢxnnd*Ln$GPYE/Fϫd l9ilu\}V|?Ng1<[֜IgõltpA` EQRz*.;:;i] |$u(; CPn NXޫ?MguC9fRI{u*Q.pځ!/Y 9 NOK?s@NBFv̂ v0#@E&JU݀كL^vuG71Bm'dhE-W_PJ߁RKEcYU#֞ߣE*~(3KsIEXE.`G/~֚!jkHqZ<14=a(,^Q<ڏjʓ'`O8$ kىvKʹ{ǀxg PjLn5ID|>wfdA_3B'NS}Ho϶cD0pNg¡ֿCFNs:µ8DMk.Y^y8 ,5 Q[YuChhHƩQ n)ݜB= _& Pe4rn ?z^υŁ- O0^HE2;?%~qXff:r2cf4N]iCg=xg]$'۳#Q˜>DjQVZ\Z Tg#o^DFؤK`Q5EJNηL9j]$%y֡xYQ`m{n$jD2SlAJzmv(G^:/GLoH26{HѦ4C[!(ELך2ƴI7HZ/EOs2cvXBcaqŭ("ul&5ҧ3N@';8j 4g2Z77AV*_B;=Q9GAJӺ3. 8ND 7 &ڤ^ 0ǔ"y؅N퟽swIZkžT[eUI$JVDt}VV |)o yfprwe"2bv ]8sZpMQ#' M%sKNsbc}܌T?@Χ| U/vw;|rahyta;Lg!h’SNizJak\қEJw2OѬ8B4>%]hr}qz+Pj4fOxeIԪY} dMMѻEε19j- 'm(O^r믻Lqq_o!S,[pIJOn wKh)=Jlr})]LV#oHjTjOXتYxM4>oʪ! d.HK~bsYQV+2>!@|c9%BZǔ#4nrZdb:~-Y "lh'^4C(NVj dx6j*e:5.}=l)R#7%G3mA1.j9Jɔ8,nf6@S}\`i*!Vu OIn 4m{%Ѝ2mvM%Xnхwd̙ߥʗ֍< QqX{X88,Ixq GrDﯻ) LNOɁ ҠK@@B{ ;LXo[pK r.A{8NOu-]ڋQNgO9*ߥ ܪY^NAK\>KzZۯ22’ڴ )i#0 6D 6h'Iu.Nu(׃PQ+w2}= i@mE!<%$=,͔ g?jȆ `q](43!O܅j_tވ"D ^{%eITy=msUL8V`&z{X eNb ц󯻖rXF.} @@gEƓ!wQS-Hڴ6_\CjfY =K+IPO6}= ,GR-gajǰ ej&O Oh|T^%N0xܿW/5[cӊpNX^΄3eX3&?jiq'/xU<;tD.:01n[@ DfeImeM1FmWJ`LjE@("bN88F2Ϭ,T rT҃<s$z t;ȐO.҉ q}/"aHE{iS(^v[#/5lkr1I`dU}$ej,^b?fdizt;qxQ|? ?{ǜW3x@upCּrIT!/w+`X)$(Gg&+Wgy&7Fq㫕I$ &e3"Qǒi% }8AK"-+迯Mi\j*M䧸P 'ھ;Rbt7o-%X`@v(R%G"5-oWm\$jvz}EZ$m C4&3h\^z_+\~t;Jjk;Ie-{'vB? {ŷ΁b KYЕ/Smh}Db:* ͯYDκQm un6T" |c_Kg&0;I3eB*+qU2܈; j(Z wBѲ>fi3" 񮟴:|d>Έj{h79\y(Y6ʋ;Amŋ[ALh ]W3h }#d >h~@ Ǿ} a8h= Я myn@n$]p/#? e${`!x0zQD~,L: B#-U%?=c֬b*iUjW75/. ➒7Nm3"Iu0B#|eel7;t\xײ,nɬl9.py"pqFfŹ:O~@ |ed {x{L=9t<ڭQ@Ęvwr$Ķ(hqa%}uC=cr ? JD&il"__=xn}=p7Q|Ic1<~Qw@Jԉn#Bq\lT"ԥ [v{CuBm2lXk[ z*B:z΃ |. bzI9Qx,1e+;516*G6Y/`2H/..*O'_"6V.A..2 . 5V6+5*,6K,Y5>%?6H967)4t2/56+6wp-B 615 6-6^ x)@03N|/}.]-J-7Xg.y4*q5--<3+66,x+6*5,n62/Hy)7#3/0d)/.3+X,653+06f6[*6#7.02.3t*65,2L0>166$*041Y,59-*5Q31v1655 " D " @ES  =H90!@S@!S8!S@~u^" pD7 0H " DE J" LE " EuN+" E3!`S>cX" E|'!hSp7 P:D7 eH!S@-u" DE!hS" PFE-" LE " UE O" 0^Eu " BE " @4F ͙" @DI" D" E!S@vQ" vEfn)" {F!Ss!{S" Eg=" MEEY `,H" PF{!|S}'!S#" Eu" pFYhuȱuI" 0D " D`" E'" GP/!Si." pEF IH:" E!S`!S8" PEJ" PmF !S@9Hu6jws" BE d{" КEp" 0E ޞ" EKt" E1!Sq" JE`u " XEqVy" ER" F " @EF'[!gSq /Hfz!`S.k" Eg)" @Dj" Er!@S8y" E\" `@E  %HR&?@u!~Sa! S<" E) !@SH" }ER" CE " $F$Y " 0LE r LH!S[j" 0D! yS" `DE ڕ" E  PH{;Xu(" 0E" E|" YE! S8 !S" D$" @D @2!S8" 0G 0u:N" LE " F7+!@S@" UE xuw" F" =EW" `FE^6" `G !S8%!`wS8!PS!R8!S(" D/+" `YET" @Dd" D r" pEF," E" GP"fwv" pE!S8r8kwY!cS!@S0FA" EA!SU" UE+! S8+!pqS" EqpuOn!@S@L!PwS" КE!tS" pE" E" Eg" pD!" EL" P5G%" 0{F" p]EYz" E5z7" 4G%W " E3Xu+7bw*" E+!S8u!S8`>" EE!S@H" E)q" AE 0D?" E-g P%!S ui" Ee" 0Ef=u #H&" 7G%]3!cwPj!S@" JE?n!Sz!S" D; aG " `E" D " Eb+" "GK" E}" P$F> ^Ht" `EUjk!S$" E*!0SYpu" FE" Ef!S#" @DM 'Hk<" PjE7O" PDb" E*!SWA" D28!" 0DG" "G%N|" E!S4:D" F" FT" @EB" CEu!S8m" P8G%:"!S@/" ЛE)" PE%" P\EY!@zSoG" @EaE!S@!S,W!S@!SH" E|" XG!lSɓ!Sq!S@t!PS =" DE " F)!@S0!@SA " EG!S" `?E!S8ؐ" `BGy" @E5!@cw !@S@ %" D " KEX " ET$!S@C" PYF?" 2G u" ЎE !S8_ YHB" УE&!S@"'" !F7 @lHjx!S !S" D<" iF!@}Sj" E_" E&L" FFB!" D;" D8" ]G" E" FE%" @D:" DF\" 7G%" PE" AE1" D" `%Gu-" E*j1 `jH)" p=EPP!S@"n" F`" |E {" E27bwr!S@a!Sh" EE!aSݡ" CE C!@S8`]" Eq}l" E(!S" PE8Pu ]HR" Eq=1!S@" OE[!Sui" PF0!S'!S@~!S.p!@iSpb" F)" pDI" [E=" ;GC" `?E=" AEi" E" 0E!@|SIl" SFD'" ЎD !SHu+4Dtm" PAEӤ" pHF," E&" 0D4" ^FbuL!S!S !St!S`E" E" PBE" `Da" p{E 9!_S1!jw" E>]" >E|!S8S>" Eގ!S8" pE!!S@-9!S@" EeT!Ssp" E"a!S" D 03!@lSsX" pME " KE !SR![SE" $Gu UHՠ" @EC" `DGif" F6" F6" ЇD;" VE" Eo!@Se!@ST" pE " Etb" hF>" D8 V" Guv!eS!@SgZ!`S8!0R" AE E" ПEaJ" E>!@yS" pE " EQZ!S9!_Sy" `!G!`S85_" Eau" @CE )" Dl(!S!!@S4 "H!S^A" Fgu9_" 0;G? !Rs" pDIk" [El" sE{" PE ~" HG>7lw!ZS" @E l!@ST" E\" E DRA " 0E ?H!S(5u,u>" ЕE#" p:G" >E PHH!@SP" DF " D *" E/" D-" poF,3D*!S@!@S8" BEh!!S" FE=d!@S8g!}S!`R[" @ME i$R4!hwX" pEu+" E&>" Ekv" p6G%R" E;" BE%" E&" PE&!`S8e!S@" =E4" 6G%\! S8I!uSO" Ee " E" E8" E" \E?2$!mSc" Fé" #F"4u" `E" UEo!S" DW" E\>" HE7!Spb" @E9" pD " FE!S8S!S@ E!So " DJ" E" @D+ " DE," EE" PnF}!S;"!R " `E" pE\!SD=|" ПEaA" E3O" ^E[R qD!SWU" F" -F W" Ea" Ew" |F1" LE ! S(8" 0DE h!@S8" rFӛ!Sw#!RHN0" F!R!S@'kwX" ]EYN" `RFYV" G" *F}!S!S81" EO(uvY" @GM WHR0" PG" E" @yFPx!S8$" D !@gS~m" UEf" E)G !@R8!@S0" гEMBo" pE" PlF`!@SH@" E!" D Gu" E" IGi !0S" `7G%R" pE,f [HB." 0E\@" ?E_!PkS" %F!S!qSt u;u-" 5G%Β" E#" 1G" UE!S8" p?E(" 0D" @PE3" D1!bw1" ES~!0SԆ!@S8 \" @E " EEu!@SYB @iH>u|:" @GȽ" E" E+F" E!@S" E&!S(!Sm1" OF" Dۅ" `E1gw&" pE" (F  (HCu(" PD-" PD;" 0E" `TGC&" E" Db" LE " @Et" D !prS!@S@" GE_ :H!S8#!S@" MF!БSs!PS!S@ا!@mSWw!StF$" PE+" 'F!S8D" 0G%ѓ!sSE" VE>X" pE" EJ!S@e" Epkwc!S@" D " KE g!`S8" E)" ?EvK" 9G%S!S89" гEM" p-F b" AEs" E-" 0D !!pS P`GmB" KE!" Eu!]S![S" DR!@S8ԝ" pE2!SH>" Eq6" 0EF&" pD!Sr%w!`S" EM" `Du~" CF {" >E" p?E" CE !@S" PF," D.! hw !@S8}" ES9 sD~!PxS@" PME %!S" 5FQ! S6u!PsSKA" PUEP!@Re" `EB" 4G%$" +F!tSt@u" LF=!@SE" E{" @E*L" 0@E8" `D" E5!@{S!jS" E;7!xS9&" pF@!pS" @Ea" FH" Ea" DEu" PD " Etu," hESD!Sl:" EaQ" -FQ" D!Sn:" `EB8uk" ^G?e" 03G%vA" @pE_" dF" F&" KE *" mEX" E4" E&4D!S8g" =G !Q" pE*" 'Fݹ" FG"/!@fwXw" PD!nS" pFہ!S@t" `E " yEs" P(G8 " PD#%!kw(2!Se!R>" ?Ec" @FM 7!\Sw" E " (F  @H9\[ AH*0uA" Dp" E !S@a" @E, " 8G%" ЗEE1" D" D|" 4G%dg" ME ͖!S" DBT!S'" Dg" `D!S@Wa" @E!S8< u$!}S+v" >E " +F !SY" `FT" FELT" PQF I!S8t!S" =E" `EB" E&B!@S@B !S8d!@S8=" (F" VĖ" @E*6" @FU" EP-u!^S3" 5G%" D/" 7G%M8!S@!`fS/!fw" EQ!@oSE " @KE,  NH" Dc'uV!@Sc" ET" AE U" ,F /!@SD" AE, " =Ew0u !cSXHu!SB" 0WE2D" kE Re" E+!@S " D;]ui" pE*v" 0ME " 0BE" E !@vS" E #" @E" 0E#" D " `EhGPkw" @LE k" DK" QE, `bHM" 0FE" FFnq" E>! S(u(!0oS3" 0XE2o!@S9." *F N!pS " @DH?" `E" ЗE" SEHY" CE'" D:%W! S?" ЊD>" P@EN" 0Ee!bS " 'F " F" E." =E„" E" DFs" @FUw pXH !S" Dy" ИEj" 0lEI#" E!S@" FtD" )F " D3 !@Rh!S@Ύ" E&Ƀ!`S0u+R" kE9" pBE)" E* 3HBf!S@!S" 6G%" LEJ !@S\B" @9G%a" 0Er" BE f!SWQ " CF!S{" 8F @QHB^0jw R!@hS!0S/!S" E`!S{W!S@!@S@" |F" Fwf!vSj!SI!~Sz" 'F %3!S`<!S@ " ,F" BE T!@S3!dwPT" 0DM!Sg" E" DEҼ" GԚ" 0E" uH>" EE !S@" VF" 0'Gu!@S@" pKE,O!@S@ub!0S!`S" =EO!@SOz DW6o" }F" Ee" 5G%!RI" `D `!SH(" 0D" IGi !S8" PG JHB"Pu҄" G " =F% GHBU" E;D" @F!Ssm5" zERJ" =E|?" KE s!S(a&" D" `=EIxu" D" dE" EK!Sӫ" &G!S@ !S8J!@S@!S  *HI" СE-" Eq!S8r" E@!@S 9!Sn" 5G%O !S(/!S@@)"8DN%" E*P" WE2(" DE5!S8!@S/" 0E/" EEJ" D~!@S`" pE" ?E s" 0F{!S@̷" G!zS!S@" 0F " pWE2" =E!`S1H" F" ~Ex=uY" sFܔ" >G|!kSN! S8n !S[!@S " (F"" @E,^!So?q" 0FD!bS" 0DI9 fHIV" E,!dwd !`S8Y" [Gnkw'" D*" LE" `E_!S8" @E -!~S `HBv" vESe -HB3!S3,!@hw[7" F" `E+" #G" $Gv" pXEk" DqI 0@HR* HE" bE!S@" F)[" E'" oE#C!@S " D" D,!jw}J" 0E9" pE&" p@Ec!S" СE" Ea7!@So TH9k" \EY!`S(O!S" 0Eҏ" PCG 6x pFH" pAE 1" ]G " D[" D:Spu H!S8T `&HU^" ]EYr$" D>4 9HBB" `RFYq!S8q u_" `E" 04G%3" G" E&" IFF%!`S0;" @E zhu#u0" LE" `En!@S8!S@z!tS@!Sn! S$!@R\rA!S8" IE" Ef- ! S !Svur" E" D^" 9G!sSއ" Ft!oS&" F)u&4dw]!S" @E!S!S1 " DX!@S,9!S8" 6FNE" pDI" E  `bGP)" E" "G%j!S8!oS?" @F"" @6G%" F" PuE(I?" Ekw!`Sx" Ea" ME N!S!@S,!S8!S8k" PEK` `H!S|*" E8uMI" @D}!@S?4!S8;" pFQZ!@S8/-`uZ" 4G%I!Sk!@S@i R" tF" PE" @D@!Sna" E" @D0" Ge H" PE" 'G " PE" SE" F}*`!@S@ô" EV{!Sl!S8uH!@SZ!S@X" 0E&" ME1" )F s!@S@w" Ei" #F" PDB3" 0aE|!S0 " @EK SH!dSX" JE" PrEs!\S" `3G7" EF>" E" EOO" ZG#07DF!wS[!S8 2HRu !R'ru" pFo[ DH#5!@S@" ZF " UE !S8!S " E " /F.!S@<" BE" P&Fi" p9G%B" HE!" EO\" FC7!PaS$F" EP" 0E!S.o" 9G%^!S8A8!@S(" DE /`!SkS" Eam8! S862!iwX!S@0!@bwx" Dh" `5FTSJ!S&m" E!pSۿ!`S8" E6" PEz" 0E C" E)!pSc" EKs" 0IE" nE<" E " ME el" E" @EF' " =E" `cEO!S8=!ppSZ" Eg !S@r" EEl" 6G%_" E!S'" zFVM H9!@S9" D:libboost_filesystem.so.1.55.0__gmon_start___Jv_RegisterClasses_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable_ZN5boost6system15system_categoryEv_ZN5boost6system16generic_categoryEv_ZTSN5boost6system12system_errorE_ZTIN5boost6system12system_errorE_ZN5boost6detail12shared_countD1Ev_ZN5boost6detail15sp_counted_base7destroyEv_ZN5boost6system12system_errorD1Ev_ZNK5boost10filesystem4path11parent_pathEv_ZNK5boost6system12system_error4whatEv_ZN5boost10filesystem4path7codecvtEv_ZTIN5boost6detail15sp_counted_baseE_ZN5boost10filesystem6detail18create_directoriesERKNS0_4pathEPNS_6system10error_codeE_ZN5boost6detail12shared_countD2Ev_ZTSN5boost6detail15sp_counted_baseE_ZN5boost6system12system_errorD2Ev_ZTVN5boost6system12system_errorE_ZN5boost10filesystem6detail6statusERKNS0_4pathEPNS_6system10error_codeE_ZN5boost6system12system_errorD0Evlibboost_system.so.1.55.0libboost_unit_test_framework.so.1.55.0_ZN5boost16bad_lexical_castD1Ev_ZTIN5boost16bad_lexical_castE_ZN5boost16bad_lexical_castD2Ev_ZTVN5boost16exception_detail10clone_baseE_ZTISs_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEE_ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEE7rethrowEv_ZTIN5boost9exceptionE_ZTv0_n32_NK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEE7rethrowEv_ZTIN5boost16exception_detail10clone_baseE_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEED0Ev_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED0Ev_ZTSN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZTSN5boost16bad_lexical_castE_ZTIN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEED1Ev_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED1Ev_ZThn24_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEED0Ev_ZTVN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZTv0_n24_NK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEE5cloneEv_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED2Ev_ZN5boost16exception_detail12refcount_ptrINS0_20error_info_containerEE7releaseEv_ZThn24_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEED1Ev_ZThn24_N5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED0Ev_ZTIN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEE_ZNK5boost16bad_lexical_cast4whatEv_ZNKSt5ctypeIcE8do_widenEc_ZThn24_N5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED1Ev_ZTSN5boost9exceptionE_ZTSSs_ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEE5cloneEv_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEED0Ev_ZN5boost15throw_exceptionINS_16bad_lexical_castEEEvRKT__ZTVN5boost16bad_lexical_castE_ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEE_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEED1Ev_ZTVN5boost9exceptionE_ZTTN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEE_ZTSN5boost16exception_detail10clone_baseE_ZN5boost16bad_lexical_castD0Ev_ZN5boost16exception_detail20copy_boost_exceptionEPNS_9exceptionEPKS1_libboost_program_options.so.1.55.0_ZN5boost15program_options29options_description_easy_initclEPKcS3__ZN5boost15program_options13variables_mapD2Ev_ZNK5boost15program_options11typed_valueIbcE13apply_defaultERNS_3anyE_ZN5boost15program_options6detail7cmdline27get_canonical_option_prefixEv_ZN5boost15program_options8validateERNS_3anyERKSt6vectorISsSaISsEEPSsi_ZThn16_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED1Ev_ZN5boost15program_options6detail7cmdlineC2ERKSt6vectorISsSaISsEE_ZN5boost15program_optionslsERSoRKNS0_19options_descriptionE_ZN5boost14token_iteratorINS_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsED1Ev_ZN5boost15program_options5storeERKNS0_20basic_parsed_optionsIcEERNS0_13variables_mapEb_ZNK5boost15program_options22abstract_variables_mapixERKSs_ZNK5boost3any6holderIKbE5cloneEv_ZNK5boost15program_options11typed_valueIbcE10max_tokensEv_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED0Ev_ZTVN5boost15program_options11typed_valueIbcEE_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb_ZTSN5boost15program_options16typed_value_baseE_ZN5boost15throw_exceptionINS_17bad_function_callEEEvRKT__ZN5boost15program_options19options_description11add_optionsEv_ZN5boost14token_iteratorINS_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsED2Ev_ZN5boost15program_options6detail7cmdline23set_options_descriptionERKNS0_19options_descriptionE_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED1Ev_ZNK5boost15program_options11typed_valueIbcE10min_tokensEv_ZNK5boost15program_options11typed_valueIbcE12is_composingEv_ZN5boost14char_separatorIcSt11char_traitsIcEEclIN9__gnu_cxx17__normal_iteratorIPKcSsEESsEEbRT_SA_RT0__ZNKSt8_Rb_treeISsSt4pairIKSsN5boost15program_options14variable_valueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE4findERS1__ZN5boost3any6holderIKbED0Ev_ZN5boost15program_options12basic_optionIcED1Ev_ZTIN5boost15program_options11typed_valueIbcEE_ZN5boost16exception_detail19error_info_injectorINS_17bad_function_callEED0Ev_ZN5boost15program_options6detail7cmdline3runEv_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZN5boost17bad_function_callD0Ev_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEEE_ZN5boost3any6holderIKbED1Ev_ZN5boost15program_options12basic_optionIcED2Ev_ZTIN5boost15program_options5errorE_ZTIN5boost17bad_function_callE_ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEE7rethrowEv_ZN5boost16exception_detail19error_info_injectorINS_17bad_function_callEED1Ev_ZN5boost15program_options11to_internalERKSs_ZN5boost17bad_function_callD1Ev_ZNSt8_Rb_treeISsSt4pairIKSsN5boost15program_options14variable_valueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E_ZN5boost17bad_function_callC1Ev_ZN5boost15program_options6notifyERNS0_13variables_mapE_ZN5boost3any6holderIKbED2Ev_ZTIN5boost3any11placeholderE_ZN5boost16exception_detail19error_info_injectorINS_17bad_function_callEED2Ev_ZTIN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEEE_ZN5boost15program_options6detail7cmdline21set_additional_parserENS_9function1ISt4pairISsSsERKSsEE_ZN5boost15program_options19options_description21m_default_line_lengthE_ZN5boost15program_options6detail7cmdline5styleEi_ZTSN5boost3any6holderIKbEE_ZTv0_n32_NK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEE7rethrowEv_ZN5boost15program_options11typed_valueIbcED0Ev_ZN5boost17bad_function_callD2Ev_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZThn16_N5boost16exception_detail19error_info_injectorINS_17bad_function_callEED0Ev_ZN5boost17bad_function_callC2Ev_ZTIN5boost15program_options29value_semantic_codecvt_helperIcEE_ZTVN5boost17bad_function_callE_ZNK5boost15program_options11typed_valueIbcE6notifyERKNS_3anyE_ZNSt6vectorIN5boost15program_options12basic_optionIcEESaIS3_EED1Ev_ZThn8_NK5boost15program_options11typed_valueIbcE10value_typeEv_ZN5boost15program_options11typed_valueIbcED1Ev_ZNK5boost15program_options11typed_valueIbcE10value_typeEv_ZThn16_N5boost16exception_detail19error_info_injectorINS_17bad_function_callEED1Ev_ZTSN5boost16exception_detail19error_info_injectorINS_17bad_function_callEEE_ZN5boost15program_options19options_descriptionC1ERKSsjj_ZNK5boost15program_options11typed_valueIbcE4nameEv_ZTIN5boost16exception_detail19error_info_injectorINS_17bad_function_callEEE_ZTTN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEEE_ZNSt6vectorIN5boost15program_options12basic_optionIcEESaIS3_EED2Ev_ZN5boost15program_options11typed_valueIbcED2Ev_ZTIN5boost15program_options16typed_value_baseE_ZTSN5boost15program_options11typed_valueIbcEE_ZNK5boost3any6holderIKbE4typeEv_ZN5boost14char_separatorIcSt11char_traitsIcEED1Ev_ZN5boost15program_options3argE_ZTSN5boost15program_options5errorE_ZN5boost15program_options8validateERNS_3anyERKSt6vectorISsSaISsEEPbi_ZTv0_n24_NK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEE5cloneEv_ZNK5boost15program_options29value_semantic_codecvt_helperIcE5parseERNS_3anyERKSt6vectorISsSaISsEEb_ZTVN5boost16exception_detail19error_info_injectorINS_17bad_function_callEEE_ZNSt6vectorISsSaISsEED1Ev_ZN5boost14char_separatorIcSt11char_traitsIcEED2Ev_ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEEE_ZN5boost15program_options13variables_mapD0Ev_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED0Ev_ZThn8_N5boost15program_options11typed_valueIbcED0Ev_ZN5boost15program_options29options_description_easy_initclEPKcPKNS0_14value_semanticES3__ZTVN5boost3any6holderIKbEE_ZNSt6vectorISsSaISsEED2Ev_ZTVN5boost15program_options13variables_mapE_ZTIN5boost3any6holderIKbEE_ZN5boost15program_options13variables_mapD1Ev_ZNK5boost15program_options11typed_valueIbcE11is_requiredEv_ZN5boost9function1ISt4pairISsSsERKSsE5clearEv_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED1Ev_ZThn8_N5boost15program_options11typed_valueIbcED1Ev_ZN5boost15program_options13variables_mapC1Ev_ZTSN5boost3any11placeholderE_ZN5boost9function1IvRKbE5dummy7nonnullEv_ZNK5boost15program_options11typed_valueIbcE6xparseERNS_3anyERKSt6vectorISsSaISsEE_ZThn16_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED0Ev_ZTSN5boost17bad_function_callE_ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEE5cloneEv_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3_libdl.so.2__pthread_key_createlibstdc++.so.6__cxa_free_exception_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS__ZNSs4_Rep10_M_destroyERKSaIcE__cxa_pure_virtual_ZNKSs12find_last_ofEPKcmm_ZNKSt5ctypeIcE13_M_widen_initEv_ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale_ZNSo9_M_insertImEERSoT__ZSt17__throw_bad_allocv_ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale_ZNSo5flushEv_ZSt16__throw_bad_castv__cxa_guard_acquire_ZNKSt12__basic_fileIcE7is_openEv_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l_ZNSt8bad_castD2Ev_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS___cxa_throw_ZNSsD1Ev_ZNSt13runtime_errorD2Ev_ZSt19__throw_logic_errorPKc_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode__cxa_rethrow_ZNSsC1ERKSsmm_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE_ZTIb_ZTIi_ZNSs14_M_replace_auxEmmmc_ZNSt8ios_base4InitD1Ev_ZTIv_ZNSs6appendEPKc_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZNSt6localeD1Ev_ZNSsC1EPKcRKSaIcE_ZNKSs7compareEPKc_ZNSt6localeC1ERKS__ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv_ZNSsC1EmcRKSaIcE_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale_ZTISt11logic_error_ZNSdD2Ev_ZNSt13runtime_errorC2ERKSs_ZNSt8ios_baseC2Ev_ZNSs7replaceEmmPKcm_ZNSs6assignEPKc__cxa_call_unexpected_ZNKSs4findEcm_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode_ZTIPKc_ZNSirsERi_ZNSs6assignEPKcm_ZTVN10__cxxabiv117__class_type_infoE_ZNKSs6substrEmm_ZSt24__throw_out_of_range_fmtPKcz_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev_ZTISt13runtime_error_ZNKSs7compareERKSs_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base_ZNSs3endEv__cxa_begin_catch_ZNSs4_Rep20_S_empty_rep_storageE_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv__gxx_personality_v0_ZNSt9exceptionD2Ev_ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSs12_M_leak_hardEv_ZNSs6appendEPKcm_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev_ZNSs4swapERSs_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZSt4cout_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSolsEi_Znwm_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZTVN10__cxxabiv121__vmi_class_type_infoE_ZNSs9_M_mutateEmmm_ZNSs4_Rep9_S_createEmmRKSaIcE_ZNSt6locale7classicEv_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6__ZNSo9_M_insertIdEERSoT__ZNSt8ios_baseD2Ev_ZNSs6assignERKSs__cxa_allocate_exception_ZNKSt6localeeqERKS__ZNSo3putEc_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE__cxa_end_catch__cxa_guard_release_ZTVSt13runtime_error_ZTISt8bad_cast_ZNSt6localeaSERKS__ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZSt4cerr_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev_ZNKSt13runtime_error4whatEv_ZTVN10__cxxabiv120__si_class_type_infoE_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZNSsC1ERKSs_ZNSs7reserveEm_ZSt20__throw_length_errorPKc_ZNSt8ios_base4InitC1Ev_ZNSt6localeC1Ev_ZNSs6appendERKSs_ZdlPv_ZTVSt9basic_iosIcSt11char_traitsIcEElibm.so.6fmodrintfsqrtfsincossqrtroundlibgcc_s.so.1_Unwind_Resume__popcountdi2__mulsc3libc.so.6__printf_chkfopenstrncmpposix_memalign__isoc99_sscanfstrncpy__stack_chk_failreallocclockisspacefgetsstrlen__cxa_atexitmemsetmemcmp__fprintf_chkmemcpyfcloserandgetenvstderrmemmove__strcat_chkstrcmpstrerror__libc_start_mainispunct_edata__bss_start_end_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm1073741822ELb1EEEvolk_gnsssdr_32fc_convert_16ic_get_func_desc_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E4linkERNS1_16xpression_linkerIcEEvolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_manualvolk_gnsssdr_8i_index_max_16u_ZNSt6vectorIS_IPvSaIS0_EESaIS2_EED2Evvolk_gnsssdr_8ic_x2_multiply_8ic_a_Z10write_jsonRSt14basic_ofstreamIcSt11char_traitsIcEESt6vectorI27volk_gnsssdr_test_results_tSaIS5_EE_ZNK5boost15program_options11typed_valueISscE10value_typeEv_ZN5boost9xpressive11regex_errorC2ENS0_15regex_constants10error_typeEPKc_ZNK5boost16exception_detail10clone_implINS_9xpressive11regex_errorEE5cloneEv_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_ZN5boost10filesystem4pathC1IA1024_cEERKT_PNS_9enable_ifINS0_11path_traits11is_pathableINS_5decayIS4_E4typeEEEvE4typeE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISE_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE5valueEci_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost16exception_detail19error_info_injectorINS_12bad_any_castEED2Ev_ZNSt6vectorIN5boost9xpressive6detail16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEESaIS9_EE19_M_emplace_back_auxIJRKS9_EEEvDpOT__ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZNK5boost9xpressive16cpp_regex_traitsIcE16lookup_classnameIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEtT_S9_b_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNSt6vectorI27volk_gnsssdr_test_results_tSaIS0_EE19_M_emplace_back_auxIJS0_EEEvDpOT__ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEE_ZZNK5boost9xpressive6detail16sub_match_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEixEmE6s_null_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISG_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_ZN5boost8any_castIRKbEET_RNS_3anyEvolk_gnsssdr_8ic_x2_dot_prod_8ic_manual_ZThn8_N5boost15program_options11typed_valueISscED0Ev_ZTSN5boost9xpressive6detail16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEE_ZTSN5boost9xpressive6detail10actionableE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISN_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNSt6vectorIN5boost9xpressive6detail16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEESaIS9_EE19_M_emplace_back_auxIIRKS9_EEEvDpOT__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED2Ev_ZN5boost16exception_detail19error_info_injectorINS_12bad_any_castEED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED1Evvolk_gnsssdr_8ic_x2_dot_prod_8ic_a_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEE_ZTv0_n40_N5boost16exception_detail10clone_implINS_9xpressive11regex_errorEED0Evvolk_gnsssdr_8u_x2_multiply_8u_a_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_11any_matcherEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZTIN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8ic_x2_dot_prod_8ic_get_func_desc_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISK_EE_ZTSN5boost9xpressive6detail14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISC_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail13parse_charsetIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISB_EEEEvRT_SE_RNS1_16compound_charsetIT0_EERT1__ZNK5boost14char_separatorIcSt11char_traitsIcEE10is_droppedEc_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZNSt6vectorItSaItEE19_M_emplace_back_auxIJRKtEEEvDpOT__ZN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN27volk_gnsssdr_test_results_tD2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE11parse_quantIS6_EENS0_6detail8sequenceIS6_EERT_SI___libc_csu_fini_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZN5boost9xpressive6detail8sequenceIN9__gnu_cxx17__normal_iteratorIPKcSsEEEoRES8__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISI_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISN_EE_ZGVZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEvE11invalid_ptr_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Evvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISG_EEvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_Z8icompareIaEbPT_S1_jj_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISM_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_8ic_magnitude_squared_8i_get_func_desc_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_Z16lv_force_cast_hfif_ZTSN5boost9xpressive6detail18assert_bos_matcherEvolk_gnsssdr_8ic_x2_dot_prod_8ic_u_ZN5boost9xpressive13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTVN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZTIN5boost9xpressive6detail12counted_baseINS1_6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZTSN5boost9xpressive6detail18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNSt6vectorI27volk_gnsssdr_test_results_tSaIS0_EE19_M_emplace_back_auxIIS0_EEEvDpOT__ZTSN5boost9xpressive6detail18assert_eos_matcherE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_ZTIN5boost9xpressive6detail19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTIN5boost9xpressive6detail18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTSN5boost9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_32fc_convert_8ic_manualvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_manual_ZTSN5boost9xpressive6detail20repeat_begin_matcherE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED1Ev_ZTIN5boost15program_options11typed_valueISscEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE2ELm1073741822ELb0EEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSA_ILb0EEEEEEESB_EE_ZTSN5boost9xpressive6detail19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZN5boost9xpressive6detail16assert_line_baseINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEC1ERKS6_volk_gnsssdr_64f_accumulator_64f_get_func_desc_ZNSt6vectorIPvSaIS0_EE19_M_emplace_back_auxIJRKS0_EEEvDpOT_volk_gnsssdr_8i_index_max_16u_get_func_desc_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED0Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISI_EE_ZNSt8_Rb_treeIN5boost16exception_detail10type_info_ESt4pairIKS2_NS0_10shared_ptrINS1_15error_info_baseEEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS4__ZN5boost9xpressive15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE9get_name_IN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRT_SD_RSs_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISM_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail10actionable7executeEPSt3mapIPKSt9type_infoPvNS1_14type_info_lessESaISt4pairIKS6_S7_EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE10parse_atomIS6_EENS0_6detail8sequenceIS6_EERT_SI__ZN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Evvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_manual_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZTIN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZTIN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEE_ZN5boost9xpressive15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE17get_charset_tokenIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_15regex_constants19compiler_token_typeERT_SF__ZTSN5boost15program_options11typed_valueISscEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISI_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIIRKdEEEvDpOT__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISN_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISG_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_manual_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZN32volk_gnsssdr_qa_aligned_mem_poolD2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISI_EE_ZN5boost15program_options18parse_command_lineIcEENS0_20basic_parsed_optionsIT_EEiPKPKS3_RKNS0_19options_descriptionEiNS_9function1ISt4pairISsSsERKSsEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail30make_independent_end_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS1_8sequenceIT_EEb_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_get_func_desc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNSt6vectorI19volk_gnsssdr_type_tSaIS0_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS0_S2_EEEEvS7_T_S8_St20forward_iterator_tag_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZTIN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS6_EEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTIN5boost16exception_detail20error_info_containerE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost16exception_detail19error_info_injectorINS_12bad_any_castEED1Ev_ZN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE19get_untyped_deleterEv_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZTIN5boost9xpressive6detail9matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISN_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_Z8ccompareIfEbPT_S1_jf_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISI_EEvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEE_ZN5boost9xpressive6detail13make_optionalIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISM_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED2Ev_ZTIN5boost9xpressive6detail14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEE_Z8icompareIsEbPT_S1_jj_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSF_ILb0EEEEEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNSt8_Rb_treeISsSt4pairIKSsN5boost9xpressive11basic_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEESt10_Select1stISB_ESt4lessISsESaISB_EE24_M_get_insert_unique_posERS1__ZNK5boost16exception_detail10clone_implINS_9xpressive11regex_errorEE7rethrowEv_ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEE7rethrowEv_ZTIN5boost9xpressive6detail23quant_style_fixed_widthILm1EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNSt6vectorIS_IPvSaIS0_EESaIS2_EED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail25enable_reference_trackingINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE17track_dependency_ERSA__ZN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_free_ZN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE11get_deleterERKSt9type_info_ZN5boost15program_options5valueISsEEPNS0_11typed_valueIT_cEEPS3__ZTSN5boost9xpressive6detail17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail8sequenceIN9__gnu_cxx17__normal_iteratorIPKcSsEEEpLERKS8_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZThn8_NK5boost15program_options11typed_valueISscE10value_typeEv_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTIN5boost9xpressive6detail21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_Z8icompareIiEbPT_S1_jj_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNSt11_Deque_baseIPKvSaIS1_EED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost12bad_any_castE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE2ELm1073741822ELb1EEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_a_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EEvolk_gnsssdr_list_machinesvolk_gnsssdr_malloc_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZN5boost13intrusive_ptrINS_9xpressive6detail14results_extrasIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNSt6vectorItSaItEE19_M_emplace_back_auxIIRKtEEEvDpOT_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_a_ZTSN5boost9xpressive6detail11any_matcherE_ZN5boost9xpressive6detail11match_stateIN9__gnu_cxx17__normal_iteratorIPKcSsEEE5init_ERKNS1_10regex_implIS7_EERNS0_13match_resultsIS7_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EEvolk_gnsssdr_8ic_x2_multiply_8ic_ZTSN5boost9xpressive6detail21cpp_regex_traits_baseIcLm1EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive11regex_errorEvolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail25enable_reference_trackingINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISD_EE_ZTVN5boost15program_options11typed_valueISscEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost15program_options11typed_valueISscE10min_tokensEv_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive16lookup_classnameINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm6EEENT_15char_class_typeERKS6_RAT0__Kcb_ZNSt8_Rb_treeISsSt4pairIKSsN5boost9xpressive11basic_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEESt10_Select1stISB_ESt4lessISsESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS1__ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE2ELm1073741822ELb1EEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8ic_conjugate_8ic_manual_ZTSN5boost9xpressive6detail18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENS9_5bool_ILb0EEEEE_ZN5boost9xpressive6detail14common_compileIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEvRKNS_13intrusive_ptrIKNS1_12matchable_exIT_EEEERNS1_10regex_implISE_EERKT0__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZNSt8_Rb_treeIN5boost10shared_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE7_M_copyEPKSt13_Rb_tree_nodeISB_EPSJ__ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESB_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSA_ILb1EEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED0Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_EEvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_avolk_gnsssdr_32fc_s32f_convert_8ic_manual_ZN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_ED2Ev_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSA_ILb0EEEEEEESC_EE_ZTIN5boost9xpressive6detail21quant_style_assertionE_ZTSN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED2Ev_ZThn16_N5boost16exception_detail10clone_implINS_9xpressive11regex_errorEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISN_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISH_EE_ZTIN5boost9xpressive6detail14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEvolk_gnsssdr_load_preferencesvolk_gnsssdr_8ic_conjugate_8ic_ZTVN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEvolk_gnsssdr_32fc_convert_8ic_a_ZN5boost9xpressive6detail13weak_iteratorINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE8satisfy_Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNSt6vectorIS_IPvSaIS0_EESaIS2_EE19_M_emplace_back_auxIIRKS2_EEEvDpOT__ZN5boost6detail10weak_countD2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost15program_options6detail7cmdlineD2Evvolk_gnsssdr_32fc_convert_8ic_u_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail12true_matcherE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost15program_options11typed_valueISscE6notifyERKNS_3anyE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail16save_sub_matchesIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS1_7mementoIT_EERNS1_11match_stateIS9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_8ic_s8ic_multiply_8ic_ZTIN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS8_EEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_uvolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive11regex_errorE_ZTIN5boost9xpressive6detail10actionableE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost9xpressive6detail19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTv0_n32_NK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEE7rethrowEv_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSA_ILb1EEEEEEESB_EE_ZN5boost9xpressive12regex_searchISsN9__gnu_cxx17__normal_iteratorIPKcSsEEEEbRT_RKNS0_11basic_regexIT0_EENS0_15regex_constants15match_flag_typeEPNS_10disable_ifINS0_6detail11is_char_ptrIS7_EEvE4typeE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail25enable_reference_trackingINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE15track_referenceERSA__ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm0ELb0EEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED1Ev_ZTIN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS8_ILb0EEEEEvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISE_EEvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_ZN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED1Evvolk_gnsssdr_8ic_x2_dot_prod_8icvolk_gnsssdr_8ic_s8ic_multiply_8ic_a_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_ZNK5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE22ok_for_partial_matchesEv_ZNSt6vectorIN5boost9xpressive6detail10named_markIcEESaIS4_EE19_M_emplace_back_auxIJS4_EEEvDpOT__IO_stdin_used_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNSt8_Rb_treeISsSt4pairIKSsN5boost9xpressive11basic_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEESt10_Select1stISB_ESt4lessISsESaISB_EE22_M_emplace_hint_uniqueIIRKSt21piecewise_construct_tSt5tupleIIRS1_EESM_IIEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive12regex_traitsIcNS0_16cpp_regex_traitsIcEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_get_func_desc_ZNSt6vectorIPvSaIS0_EE19_M_emplace_back_auxIJS0_EEEvDpOT__ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_EE_ZNSt11_Deque_baseIPKvSaIS1_EED1Ev_ZN5boost9xpressive6detail19reclaim_sub_matchesIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_7mementoIT_EERNS1_11match_stateIS9_EEb_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISG_EEvolk_gnsssdr_8ic_conjugate_8ic_get_func_desc_ZTSN5boost9xpressive16cpp_regex_traitsIcEE_ZTIN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEEE_ZNK5boost15program_options11typed_valueISscE4nameEvvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSA_ILb0EEEEE_ZNSt8_Rb_treeIPKSt9type_infoSt4pairIKS2_PvESt10_Select1stIS6_EN5boost9xpressive6detail14type_info_lessESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_E5matchERNS1_11match_stateIS9_EEvolk_gnsssdr_64f_accumulator_64f_u_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNSt11_Deque_baseIPKvSaIS1_EE17_M_initialize_mapEm_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail12parse_escapeIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEENS1_12escape_valueINS_14iterator_valueIT_E4typeENT0_12regex_traits15char_class_typeEEERSG_SG_RSJ_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_get_func_desc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED1Ev_ZTSN5boost9xpressive6detail14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISC_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_E6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail21cpp_regex_traits_baseIcLm1EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISK_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_32fc_s32f_convert_8ic_a_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISH_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISM_EE__data_start_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZTIN5boost16exception_detail25error_info_container_implE_ZNK5boost16exception_detail25error_info_container_impl22diagnostic_informationEPKc_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZTSN5boost9xpressive6detail21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTIN5boost9xpressive16cpp_regex_traitsIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISM_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISM_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EEvolk_gnsssdr_8i_x2_add_8i_get_func_desc_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSA_ILb0EEEEEEESC_EE_ZNSt6vectorIN5boost9xpressive6detail10named_markIcEESaIS4_EE19_M_emplace_back_auxIIS4_EEEvDpOT__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEEvolk_gnsssdr_8ic_s8ic_multiply_8ic_u_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISM_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTTN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost14char_separatorIcSt11char_traitsIcEEC1ERKS3__ZTIN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail25enable_reference_trackingINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE13tracking_copyERKS9__ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8i_accumulator_s8i_get_func_desc_ZN24volk_gnsssdr_test_time_tD2Evvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_manual_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZTIN5boost16exception_detail19error_info_injectorINS_12bad_any_castEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNSt6vectorI19volk_gnsssdr_type_tSaIS0_EE19_M_emplace_back_auxIIRKS0_EEEvDpOT__ZN5boost16exception_detail16throw_exception_INS_9xpressive11regex_errorEEEvRKT_PKcS8_i_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost12bad_any_castD0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail13results_cacheIN9__gnu_cxx17__normal_iteratorIPKcSsEEE11reclaim_allERNS1_14nested_resultsIS7_EE_Z8fcompareIdEbPT_S1_jf_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail8sequenceIN9__gnu_cxx17__normal_iteratorIPKcSsEEEaSEOS8__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive6detail12counted_baseINS1_6traitsIcEEEE_ZTIN5boost9xpressive6detail12counted_baseINS1_12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZTIN5boost9xpressive6detail14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISF_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8i_max_s8i_u_ZNSt8_Rb_treeIN5boost16exception_detail10type_info_ESt4pairIKS2_NS0_10shared_ptrINS1_15error_info_baseEEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE24_M_get_insert_unique_posERS4__ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_32fc_s32f_convert_8ic_u_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESB_EE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESB_EEEESB_EE_ZTIN5boost9xpressive6detail18mark_begin_matcherE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_EEvolk_gnsssdr_8u_x2_multiply_8u_get_func_desc_ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISG_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EED2Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISK_EE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS8_EEEEEESB_EE_ZN5boost13intrusive_ptrIKNS_9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSA_ILb1EEEEEEESC_EE_Z16load_random_dataPv19volk_gnsssdr_type_tj_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_32fc_convert_16ic_ZTIN5boost9xpressive6detail19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEED0Evvolk_gnsssdr_32fc_convert_8ic_ZNK5boost16exception_detail25error_info_container_impl7add_refEv_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISI_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE8compile_IS6_EENS0_11basic_regexIS6_EET_SH_NS0_15regex_constants18syntax_option_typeESt20forward_iterator_tag_ZN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EED0Ev_ZN5boost9xpressive13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Evvolk_gnsssdr_8ic_conjugate_8ic_a_ZN5boost15throw_exceptionINS_9xpressive11regex_errorEEEvRKT__ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8i_index_max_16u_u_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS8_EEEEEENSA_ILb1EEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZN5boost9xpressive6detail12make_dynamicIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_18mark_begin_matcherEEENS1_8sequenceIT_EERKT0__ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_ZNSt8_Rb_treeIN5boost8weak_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE16_M_insert_uniqueINS0_15filter_iteratorINS3_11filter_selfISA_EENS3_13weak_iteratorISA_EEEEEEvT_SP__ZThn8_N5boost15program_options11typed_valueISscED1Evvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_manual_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZSt3hexRSt8ios_base_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS8_EEEEEENSA_ILb1EEEEE_ZNSt6vectorI19volk_gnsssdr_type_tSaIS0_EED2Ev_ZTIN5boost9xpressive6detail16mark_end_matcherE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_8i_accumulator_s8i_u_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISM_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED1Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSA_ILb1EEEEE_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIJSsEEEvDpOT__ZN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E4linkERNS1_16xpression_linkerIcEEvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_get_func_desc_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_ED1Ev_ZN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISG_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED2Ev_ZN5boost14token_iteratorINS_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsEC2ES4_S9_S9__ZN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTSN5boost9xpressive6detail19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E5matchERNS1_11match_stateIS9_EE_ZTv0_n40_N5boost16exception_detail10clone_implINS_9xpressive11regex_errorEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZTVN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_ZN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE7disposeEv_Z7uniformv_ZN5boost9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEEEC1ERKS7__ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_get_alignment_ZTIN5boost9xpressive6detail19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISK_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive11regex_errorE_ZThn16_N5boost9xpressive11regex_errorD0Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost13intrusive_ptrIKNS_9xpressive6detail6traitsIcEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE11parse_groupIS6_EENS0_6detail8sequenceIS6_EERT_SI_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_u_ZN5boost20make_filter_iteratorINS_9xpressive6detail11filter_selfINS2_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEENS2_13weak_iteratorISA_EEEENS_15filter_iteratorIT_T0_EESF_SG_SG__ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost15program_options11typed_valueISscE12is_composingEv_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_64f_accumulator_64f_avolk_gnsssdr_64f_accumulator_64f_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_E5matchERNS1_11match_stateIS8_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EEvolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_ZNK5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE7tolowerEc_ZN5boost9xpressive11regex_errorD2Ev_Z8fcompareIfEbPT_S1_jf_ZN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED1Ev_ZZN5boost9xpressive16cpp_regex_traitsIcE10char_classEmE16s_char_class_map_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISD_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTIN5boost9xpressive6detail18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_32fc_s32f_convert_8ic_get_func_desc_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_8ic_conjugate_8ic_u_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISI_EE_ZNSt8_Rb_treeISsSt4pairIKSs24volk_gnsssdr_test_time_tESt10_Select1stIS3_ESt4lessISsESaIS3_EE22_M_emplace_hint_uniqueIIRKSt21piecewise_construct_tSt5tupleIIRS1_EESE_IIEEEEESt17_Rb_tree_iteratorIS3_ESt23_Rb_tree_const_iteratorIS3_EDpOT__ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_manual_ZTIN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E4peekERNS1_16xpression_peekerIcEE_Z8icompareImEbPT_S1_jj_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEEE_ZTSN5boost9xpressive6detail23independent_end_matcherE_ZTSN5boost9xpressive6detail21quant_style_assertionE_ZTIN5boost9xpressive6detail23independent_end_matcherE_ZNSt8_Rb_treeIN5boost10shared_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE24_M_get_insert_unique_posERKSB__ZNK5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEclERNS1_11match_stateIS7_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Evvolk_gnsssdr_8i_accumulator_s8i_a_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZThn8_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEED1Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail12true_matcherE_ZTSN5boost16exception_detail25error_info_container_implE_ZN5boost9xpressive11regex_errorD0Ev_ZTSN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm1ELb1EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_E4linkERNS1_16xpression_linkerIcEE_ZThn8_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEED0Ev_ZN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED2Ev_ZNK5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EEclERNS1_11match_stateIS7_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS6_EEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESB_EEEENSA_ILb1EEEEE_ZTVN5boost16exception_detail25error_info_container_implE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost13intrusive_ptrINS_9xpressive6detail6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail16compound_charsetINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEC1ERKS7__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISK_EE__libc_csu_initvolk_gnsssdr_8i_max_s8i_a_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EEvolk_gnsssdr_8ic_x2_multiply_8ic_manual_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_Z8icompareIhEbPT_S1_jj_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEclERNS1_11match_stateIS7_EE_ZNK5boost15program_options11typed_valueISscE10max_tokensEv_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISG_EE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_get_func_desc_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISF_EE_ZThn8_N5boost16exception_detail19error_info_injectorINS_12bad_any_castEED1Ev_ZZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEvE17invalid_matchable_ZTSN5boost9xpressive6detail18mark_begin_matcherE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISC_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENS9_5bool_ILb1EEEEE_ZTSN5boost9xpressive6detail16assert_line_baseINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_EE_ZTIN5boost9xpressive6detail6traitsIcEE_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZTSN5boost9xpressive6detail21alternate_end_matcherE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS6_EEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E5matchERNS1_11match_stateIS9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EEvolk_gnsssdr_8i_x2_add_8i_manual_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost14token_iteratorINS_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsEC1ES4_S9_S9__ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZTSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEE_ZN5boost9xpressive6detail14optimize_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEENS_13intrusive_ptrINS1_6finderIT_EEEERKNS1_16xpression_peekerINS_14iterator_valueISE_E4typeEEERKT0_N4mpl_5bool_ILb0EEE_ZTIN5boost9xpressive6detail6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEE_ZN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNSt6vectorI27volk_gnsssdr_test_results_tSaIS0_EED2Evvolk_gnsssdr_8u_x2_multiply_8u_manual_ZNSt6vectorIN5boost9xpressive6detail16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEESaIS9_EED1Ev_ZTSN5boost9xpressive6detail19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED0Ev_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS8_EEEEEENSA_ILb0EEEEE_ZN5boost16exception_detail25error_info_container_impl3setERKNS_10shared_ptrINS0_15error_info_baseEEERKNS0_10type_info_E_ZNSt6vectorI19volk_gnsssdr_type_tSaIS0_EE19_M_emplace_back_auxIJRKS0_EEEvDpOT__ZTv0_n24_NK5boost16exception_detail10clone_implINS_9xpressive11regex_errorEE5cloneEv_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNSt8_Rb_treeISsSt4pairIKSs24volk_gnsssdr_test_time_tESt10_Select1stIS3_ESt4lessISsESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost16exception_detail25error_info_container_impl7releaseEv_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISN_EE_ZSt3octRSt8ios_base_ZGVZNK5boost9xpressive6detail16sub_match_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEixEmE6s_null_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost12bad_any_castE_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE14parse_sequenceIS6_EENS0_6detail8sequenceIS6_EERT_SI__ZTSN5boost9xpressive6detail6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNSt6vectorIN5boost9xpressive6detail16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEESaIS9_EED2Ev_ZN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISG_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E5matchERNS1_11match_stateIS9_EE_ZN5boost13intrusive_ptrINS_9xpressive6detail17dynamic_xpressionINS2_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZGVZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEvE17invalid_matchablevolk_gnsssdr_32fc_s32f_convert_8icvolk_gnsssdr_8ic_s8ic_multiply_8ic_manual_ZN5boost15program_options11typed_valueISscED2Ev_ZTIN5boost9xpressive6detail20repeat_begin_matcherE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E5matchERNS1_11match_stateIS9_EEvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_manual_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8ic_magnitude_squared_8i_ZN5boost13intrusive_ptrINS_9xpressive6detail14results_extrasIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Ev_ZTVN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS8_EEEEEESB_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSA_ILb0EEEEE_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE0ELm0ELb1EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESB_EEEESB_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail10actionableE_ZNK5boost9xpressive6detail11boyer_mooreIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE12find_nocase_ES7_S7_RKSB__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail16compound_charsetINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEC2ERKS7__ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_ZNSt12_Destroy_auxILb0EE9__destroyIP19volk_gnsssdr_type_tEEvT_S4__ZN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED1Ev_ZNSt6vectorIPvSaIS0_EE19_M_emplace_back_auxIIRKS0_EEEvDpOT__ZN5boost9xpressive11regex_errorD1Evvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_manual_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost16exception_detail20error_info_containerE_ZTIN5boost9xpressive6detail19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTSN5boost9xpressive6detail18repeat_end_matcherIN4mpl_5bool_ILb1EEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS8_ILb1EEEEEvolk_gnsssdr_8ic_magnitude_squared_8i_a_ZN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_ED1Ev_ZTSN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS8_ILb0EEEEE_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIISsEEEvDpOT__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISG_EE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSA_ILb0EEEEEEESB_EE_ZN5boost15program_options11typed_valueISscED1Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost15program_options11typed_valueISscED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISI_EE_ZTSN5boost9xpressive6detail19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISE_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISK_EE_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED1Ev_ZN5boost9xpressive6detail10actionableD2Ev_ZTIN5boost9xpressive6detail12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEE_ZTTN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail11end_matcherE_ZN5boost9xpressive6detail13make_optionalIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EEi_ZN5boost8any_castIRKSsEET_RNS_3anyEvolk_gnsssdr_32fc_convert_16ic_manual_ZThn16_N5boost16exception_detail10clone_implINS_9xpressive11regex_errorEED1Ev_ZNK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEE5cloneEv_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSA_ILb1EEEEEEESC_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISC_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISF_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED2Ev_ZTSN5boost9xpressive6detail23quant_style_fixed_widthILm1EEE_ZNSt6vectorIN5boost9xpressive6detail10named_markIcEESaIS4_EEaSERKS6_volk_gnsssdr_is_aligned_ZNSt8_Rb_treeIN5boost10shared_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E_ZGVZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEvE11invalid_xpr_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISK_EE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_avolk_gnsssdr_8i_x2_add_8i_u_ZN5boost9xpressive15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE14get_quant_specIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEbRT_SD_RNS0_6detail10quant_specE_ZNK5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEclERNS1_11match_stateIS7_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED1Evvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_uvolk_gnsssdr_8ic_x2_multiply_8ic_u_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISM_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail10actionableD0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISI_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISM_EEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_ZTIN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEES9_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E5matchERNS1_11match_stateIS9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTIN5boost9xpressive6detail18assert_eos_matcherE_ZNK5boost9xpressive6detail12tracking_ptrINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE3getEv_ZTIN5boost9xpressive12regex_traitsIcNS0_16cpp_regex_traitsIcEEEE_ZNK5boost16exception_detail25error_info_container_impl3getERKNS0_10type_info_E_ZN5boost10filesystem4pathC2IA1024_cEERKT_PNS_9enable_ifINS0_11path_traits11is_pathableINS_5decayIS4_E4typeEEEvE4typeE_ZTSN5boost9xpressive6detail9matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive11regex_errorC1ERKS1_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_get_func_desc_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSA_ILb1EEEEE_ZTIN5boost9xpressive6detail12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE7toupperEc_ZN27volk_gnsssdr_test_results_tD1Evvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost15program_options11typed_valueIbcE14implicit_valueERKbvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost16exception_detail25error_info_container_impl5cloneEv_ZN5boost15program_options19options_descriptionD2Ev_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm0ELb0EEE_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE0ELm0ELb1EEEvolk_gnsssdr_8ic_magnitude_squared_8i_u_ZNSt6vectorIS_IPvSaIS0_EESaIS2_EE19_M_emplace_back_auxIJRKS2_EEEvDpOT__ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive16lookup_classnameINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm2EEENT_15char_class_typeERKS6_RAT0__Kcb_ZNSt3mapISsN5boost9xpressive11basic_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEEEESt4lessISsESaISt4pairIKSsS8_EEEixERSC__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESG_EEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEEvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_get_func_desc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_ZTSN5boost16exception_detail19error_info_injectorINS_12bad_any_castEEE_ZNK5boost9xpressive6detail11boyer_mooreIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE5find_ES7_S7_RKSB__ZTIN5boost9xpressive6detail11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEE_ZNSt8_Rb_treeIN5boost10shared_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE4swapERSH__ZNK5boost12bad_any_cast4whatEvvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_manual_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKN5boost9xpressive6detail16shared_matchableINS1_IPKcSsEEEESt6vectorIS9_SaIS9_EEEENS0_5__ops10_Iter_predINS4_14alt_match_predIS8_NS4_12matchable_exIS8_EEEEEEET_SN_SN_T0_St26random_access_iterator_tag_ZTSN5boost9xpressive6detail14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail3toiIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEiRT_SC_RKT0_ii_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost6detail10weak_countD1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EEvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_get_func_desc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E5matchERNS1_11match_stateIS9_EEvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_get_func_desc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_Z8ccompareIdEbPT_S1_jf_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISM_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED2Ev_ZTSN5boost9xpressive6detail6traitsIcEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISF_EE_ZTv0_n32_NK5boost16exception_detail10clone_implINS_9xpressive11regex_errorEE7rethrowEv_ZN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZN5boost9xpressive6detail22make_charset_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEENS1_8sequenceIT_EERNS1_16compound_charsetIT0_EERKSG_NS0_15regex_constants18syntax_option_typeE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISM_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E5matchERNS1_11match_stateIS9_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZN5boost15program_options11typed_valueIbcE13default_valueERKbvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_get_func_desc_ZN5boost7numeric10convdetail21generic_range_checkerINS0_17conversion_traitsIhiEENS1_7LT_ZeroIS4_EENS1_6GT_HiTIS4_EENS_9xpressive6detail21char_overflow_handlerEE14validate_rangeEi_ZTIN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail18assert_bos_matcherE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE0ELm0ELb0EEEvolk_gnsssdr_8i_x2_add_8i_a_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EEvolk_gnsssdr_32fc_convert_8ic_get_func_desc_ZN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Evvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSF_ILb1EEEEEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Evvolk_gnsssdr_8ic_magnitude_squared_8i_manual_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNSt5dequeIPKvSaIS1_EE17_M_reallocate_mapEmb_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNSt8_Rb_treeIN5boost16exception_detail10type_info_ESt4pairIKS2_NS0_10shared_ptrINS1_15error_info_baseEEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E_ZN5boost12bad_any_castD1Ev_ZNSt8_Rb_treeIPKSt9type_infoSt4pairIKS2_PvESt10_Select1stIS6_EN5boost9xpressive6detail14type_info_lessESaIS6_EE7_M_copyEPKSt13_Rb_tree_nodeIS6_EPSG__ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISD_EE_ZTSN5boost9xpressive6detail16mark_end_matcherE_ZN5boost9xpressive13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEEEC2ERKS7__ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail16compound_charsetINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE9set_rangeEccRKS6_b_ZTSN5boost9xpressive6detail12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail11make_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEE_ZN5boost10filesystemlsIcSt11char_traitsIcEEERSt13basic_ostreamIT_T0_ES8_RKNS0_4pathE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail16compound_charsetINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE8set_charEcRKS6_b_ZN5boost9xpressive11regex_errorC2ERKS1__Z8icompareIlEbPT_S1_jj_ZN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_Z8icompareIjEbPT_S1_jj_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNK5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS7_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISI_EE_ZNK5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE8in_rangeEccc_ZN5boost9function1IvRKSsE5dummy7nonnullEvvolk_gnsssdr_8ic_x2_multiply_8ic_get_func_desc_ZNSs12_S_constructIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEPcT_S6_RKSaIcESt20forward_iterator_tag_ZN5boost15program_options19options_descriptionD1Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE0ELm0ELb0EEE_ZNK5boost9xpressive6detail12tracking_ptrINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE5fork_Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN24volk_gnsssdr_test_time_tD1Evvolk_gnsssdr_8i_x2_add_8i_ZN5boost13intrusive_ptrINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_Z29volk_gnsssdr_type_from_stringSs_ZTIN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateIS8_EE_ZN5boost14token_iteratorINS_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsEC2ERKSA__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_E4linkERNS1_16xpression_linkerIcEEvolk_gnsssdr_8u_x2_multiply_8u_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_ED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISH_EE_Z8icompareItEbPT_S1_jj_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail25enable_reference_trackingINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEE18update_dependents_Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTv0_n24_NK5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEE5cloneEv_ZTIN5boost9xpressive6detail21alternate_end_matcherE_ZN5boost6detail20lexical_cast_do_castIiSsE17lexical_cast_implERKSs_ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E5matchERNS1_11match_stateIS9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_Z22run_volk_gnsssdr_tests22volk_gnsssdr_func_descPFvvESsfSt7complexIfEiiPSt6vectorI27volk_gnsssdr_test_results_tSaIS5_EESsbSs_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS6_EEEEvolk_gnsssdr_8i_max_s8i_ZN5boost9xpressive6detail19restore_sub_matchesIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_7mementoIT_EERNS1_11match_stateIS9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNSt8_Rb_treeISsSt4pairIKSsN5boost9xpressive11basic_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEESt10_Select1stISB_ESt4lessISsESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNSt6vectorI19volk_gnsssdr_type_tSaIS0_EED1Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSA_ILb1EEEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_ED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED0Ev_ZN5boost9xpressive15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE9get_tokenIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_15regex_constants19compiler_token_typeERT_SF__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_manual_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNSt8_Rb_treeISsSt4pairIKSs24volk_gnsssdr_test_time_tESt10_Select1stIS3_ESt4lessISsESaIS3_EE7_M_copyEPKSt13_Rb_tree_nodeIS3_EPSB__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_8i_accumulator_s8i_manual_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESB_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EEvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSA_ILb1EEEEE_ZTVN5boost16exception_detail19error_info_injectorINS_12bad_any_castEEE_ZTSN5boost12bad_any_castE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZN5boost13intrusive_ptrIKNS_9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZNK5boost9xpressive16cpp_regex_traitsIcE5valueEcivolk_gnsssdr_s32f_x2_update_local_carrier_32fc_manual_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost15program_options6detail7cmdlineD1Ev_ZN5boost9xpressive11regex_errorC1ENS0_15regex_constants10error_typeEPKc_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISK_EEvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_ZTIN5boost9xpressive6detail11end_matcherE_ZThn16_N5boost9xpressive11regex_errorD1Ev_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSA_ILb0EEEEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEE_ZNSt8_Rb_treeIN5boost16exception_detail10type_info_ESt4pairIKS2_NS0_10shared_ptrINS1_15error_info_baseEEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG__ZN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZN5boost9xpressive15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE7eat_ws_IN9__gnu_cxx17__normal_iteratorIPKcSsEEEERT_SE_SD_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEvE11invalid_ptr_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKtSt6vectorItSaItEEEENS0_5__ops10_Iter_predIN5boost9xpressive6detail16compound_charsetINSB_12regex_traitsIcNSB_16cpp_regex_traitsIcEEEEE14not_posix_predEEEET_SL_SL_T0_St26random_access_iterator_tag_ZN5boost9xpressive6detail7ensure_EbNS0_15regex_constants10error_typeEPKcS5_S5_m_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISL_EE_ZTIN5boost9xpressive6detail17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED1Ev_ZNK5boost9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS7_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE2ELm1073741822ELb0EEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISG_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost15program_options11typed_valueISscE13apply_defaultERNS_3anyE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENS9_5bool_ILb1EEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_get_func_desc_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISI_EE_ZTSN5boost9xpressive6detail12counted_baseINS1_6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZN5boost9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEES9_EE_ZNK5boost9xpressive16cpp_regex_traitsIcE16lookup_classnameIPcEEtT_S5_b_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail18repeat_end_matcherIN4mpl_5bool_ILb0EEEEE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_ED0Ev_ZTSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm1073741822ELb1EEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Evvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_get_func_desc_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSA_ILb0EEEEE_ZNK5boost9xpressive6detail6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEE22ok_for_partial_matchesEv_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZN5boost14char_separatorIcSt11char_traitsIcEEC2ERKS3__ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_8i_accumulator_s8i_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost12bad_any_castD2Ev_ZTIN5boost9xpressive6detail18repeat_end_matcherIN4mpl_5bool_ILb1EEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_ED0Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISD_EE_ZTVN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISI_EE_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE16parse_alternatesIS6_EENS0_6detail8sequenceIS6_EERT_SI__ZN5boost9xpressive13match_resultsIN9__gnu_cxx17__normal_iteratorIPKcSsEEE18set_prefix_suffix_ES6_S6__ZTIN5boost9xpressive6detail19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENS9_5bool_ILb0EEEEE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTSN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_8i_index_max_16u_a_ZNSt8_Rb_treeISsSt4pairIKSs24volk_gnsssdr_test_time_tESt10_Select1stIS3_ESt4lessISsESaIS3_EE24_M_get_insert_unique_posERS1__ZN5boost13intrusive_ptrINS_9xpressive6detail6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISN_EE_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS8_EEEEEENSA_ILb0EEEEE_ZTIN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS8_ILb1EEEEEvolk_gnsssdr_8i_max_s8i_manual_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail22make_literal_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEENS1_8sequenceIT_EERKNT0_11string_typeENS0_15regex_constants18syntax_option_typeERKSF__ZN5boost9xpressive15compiler_traitsINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEE14get_group_typeIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_15regex_constants19compiler_token_typeERT_SF_RSs_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISK_EE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEE_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_E4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISH_EE_ZTIN5boost9xpressive6detail12counted_baseINS1_6traitsIcEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_manual_ZNSt6vectorIPvSaIS0_EE19_M_emplace_back_auxIIS0_EEEvDpOT__ZN5boost13intrusive_ptrIKNS_9xpressive6detail6traitsIcEEED1Ev_ZTSN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EEE_ZTSN5boost9xpressive6detail12counted_baseINS1_12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISK_EE_ZNSt12_Destroy_auxILb0EE9__destroyIPN5boost9xpressive6detail10named_markIcEEEEvT_S8__ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_get_config_path_ZTVN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E5matchERNS1_11match_stateIS9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED0Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZSt4copyIN5boost14token_iteratorINS0_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsEEPSsET0_T_SE_SD_volk_gnsssdr_get_machine_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISN_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNSt8_Rb_treeISsSt4pairIKSsN5boost9xpressive11basic_regexIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEESt10_Select1stISB_ESt4lessISsESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT__ZN5boost9xpressive6detail12make_dynamicIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_16mark_end_matcherEEENS1_8sequenceIT_EERKT0__ZNSt8_Rb_treeIN5boost8weak_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERKSB__ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEv_ZZN5boost9xpressive6detail21get_invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEERKNS1_16shared_matchableIT_EEvE11invalid_xpr_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTIN5boost9xpressive6detail11any_matcherEvolk_gnsssdr_8ic_s8ic_multiply_8ic_get_func_desc_ZN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED1Ev_ZNSt6vectorISsSaISsEE13_M_assign_auxIN5boost14token_iteratorINS3_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsEEEEvT_SF_St20forward_iterator_tag_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISD_EE_ZN5boost9xpressive14regex_compilerIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEENS0_15compiler_traitsISA_EEE13parse_literalIS6_EESsRT_SF__ZTSN5boost9xpressive6detail21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEEvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_avolk_gnsssdr_8i_index_max_16u_manual_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIJRKdEEEvDpOT__ZN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED2Ev_ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESB_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_E4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceISG_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost15program_options11typed_valueISscE11is_requiredEv_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED0Evvolk_gnsssdr_8i_max_s8i_get_func_desc_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISL_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE6repeatERKNS1_10quant_specERNS1_8sequenceIS8_EE_ZN5boost9xpressive6detail25enable_reference_trackingINS1_10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EE_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_ZN5boost9xpressive6detail10actionableD1Ev_ZTIN5boost9xpressive6detail18repeat_end_matcherIN4mpl_5bool_ILb0EEEEE_ZTIN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN32volk_gnsssdr_qa_aligned_mem_poolD1Ev_ZSt3decRSt8ios_base_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISE_EE_ZNSt8_Rb_treeISsSt4pairIKSs24volk_gnsssdr_test_time_tESt10_Select1stIS3_ESt4lessISsESaIS3_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS3_ERS1__ZTIN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESB_EEEENSA_ILb1EEEEE_ZTIN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm1ELb1EEE_ZNK5boost9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNSt6vectorI19volk_gnsssdr_type_tSaIS0_EE9push_backERKS0__ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Evvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_ED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZTVN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZN5boost13intrusive_ptrINS_9xpressive6detail17dynamic_xpressionINS2_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED2Ev_ZNSt8_Rb_treeIN5boost8weak_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_Evolk_gnsssdr_32fc_convert_16ic_u_ZN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZTSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail13merge_charsetIcNS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEvRNS1_11basic_chsetIT_EERKNS1_16compound_charsetIT0_EERKSC__ZN5boost14token_iteratorINS_14char_separatorIcSt11char_traitsIcEEEN9__gnu_cxx17__normal_iteratorIPKcSsEESsEC1ERKSA__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED1Ev_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEE_ZNSt6vectorI27volk_gnsssdr_test_results_tSaIS0_EED1Ev_ZN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEED0Ev_ZNSt8_Rb_treeIN5boost8weak_ptrINS0_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEESB_St9_IdentityISB_ESt4lessISB_ESaISB_EE24_M_get_insert_unique_posERKSB__ZN5boost13intrusive_ptrINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEED1Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost9xpressive6detail16assert_line_baseINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEC2ERKS6__ZTSN5boost9xpressive6detail18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4peekERNS1_16xpression_peekerIcEEvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_uvolk_gnsssdr_64f_accumulator_64f_manual_ZTSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS8_EEEEEESB_EE_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_ED2Ev_ZTIN5boost9xpressive6detail16assert_line_baseINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_E6repeatERKNS1_10quant_specERNS1_8sequenceIS9_EE_ZTVN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_EE_ZTSN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_12bad_any_castEEEED1Ev_ZTIN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE_ZN5boost9xpressive6detail11make_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EEi_ZN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED2Ev_ZThn8_N5boost16exception_detail19error_info_injectorINS_12bad_any_castEED0Ev_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZTSN5boost9xpressive6detail12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEvolk_gnsssdr_32fc_convert_16ic_a_ZN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEED1Evvolk_gnsssdr_8u_x2_multiply_8u_u_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISD_EE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZN5boost15program_options25basic_command_line_parserIcE3runEv_ZN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEED0Ev_ZN5boost9xpressive6detail18make_simple_repeatIN9__gnu_cxx17__normal_iteratorIPKcSsEENS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEEEEvRKNS1_10quant_specERNS1_8sequenceIT_EERKT0__ZTSN5boost9xpressive6detail17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEE_ZNK5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE4linkERNS1_16xpression_linkerIcEE_ZNSt8_Rb_treeISsSt4pairIKSs24volk_gnsssdr_test_time_tESt10_Select1stIS3_ESt4lessISsESaIS3_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESE_IJEEEEESt17_Rb_tree_iteratorIS3_ESt23_Rb_tree_const_iteratorIS3_EDpOT__ZNK5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEE5matchERNS1_11match_stateISG_EE_ZN5boost9xpressive6detail19make_char_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEcNS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEENS1_8sequenceIT_EET0_NS0_15regex_constants18syntax_option_typeERKT1_GCC_3.0GCC_4.0.0GCC_3.4GLIBC_2.2.5GLIBC_2.14GLIBC_2.4GLIBC_2.7GLIBC_2.3.4GLIBCXX_3.4.9GLIBCXX_3.4.11CXXABI_1.3GLIBCXX_3.4.20GLIBCXX_3.4          5@P&y tD`Z' |DT&y D5 ui D"6`Dii Dii Dti Dui DU)) DaDӯkDpDt)Du@bwqbw@cwQcwcwdwPdwdwEdwewfw@fw&fw fwhgw hw@hwS`hwhw@iwiwojwjwjwjwdkw/u u(u0u8u@uHuPuXu `u hu pu xu uuuuuuuuuuuuuuuuuu u!u" u#(u$0u%8u&@u'Hu(Pu)Xu*`u+hu,pu-xu.u/u0uu1u3u4u5u6u7uu8u9u;u<u=u>u?u@uAuB uC(uD0uE8uF@uGHuHPuIXuJ`uKhuLpuMxuNuOuuPuQuRuSuTuUuVuWuXuYuZu[u\u]u^u_u`ua ub(uc0ud8ue@ufHugPuhXuM`uihujpukxulumunuoupuqurusutuuuvuwuxuyuzu{u|u}u~uu u(u0u8u@uHumPuXu`uhupuxuuuuuuuuuu0uuHHm1Ht[H5b1%d1@%b1h%Z1h%R1h%J1h%B1h%:1h%21h%*1hp%"1h`%1h P%1h @% 1h 0%1h %1h %1h%1h%1h%ڞ1h%Ҟ1h%ʞ1h%ž1h%1h%1h%1hp%1h`%1hP%1h@%1h0%1h %z1h%r1h%j1h%b1h %Z1h!%R1h"%J1h#%B1h$%:1h%%21h&%*1h'p%"1h(`%1h)P%1h*@% 1h+0%1h, %1h-%1h.%1h/%1h0%ڝ1h1%ҝ1h2%ʝ1h3%1h4%1h5%1h6%1h7p%1h8`%1h9P%1h:@%1h;0%1h< %z1h=%r1h>%j1h?%b1h@%Z1hA%R1hB%J1hC%B1hD%:1hE%21hF%*1hGp%"1hH`%1hIP%1hJ@% 1hK0%1hL %1hM%1hN%1hO%1hP%ڜ1hQ%Ҝ1hR%ʜ1hS%œ1hT%1hU%1hV%1hWp%1hX`%1hYP%1hZ@%1h[0%1h\ %z1h]%r1h^%j1h_%b1h`%Z1ha%R1hb%J1hc%B1hd%:1he%21hf%*1hgp%"1hh`%1hiP%1hj@% 1hk0%1hl %1hm%1hn%1ho%1hp%ڛ1hq%қ1hr%ʛ1hs%›1ht%1hu%1hv%1hwp%1hx`%1hyP%1hz@%1h{0%1h| %z1h}%r1h~%j1h%b1h%Z1h%R1h%J1h%B1h%:1h%21h%*1hp%"1h`%1hP%1h@% 1h0%1h %1h%1h%1h%1h%ښ1h%Қ1h%ʚ1h%š1h%1h%1h%1hpPH8S1f.UHAWAVAUATASH0H IRH(HdH%(HE1l ,3,3H HH HxHjw6(1}1H}hIƅPƅ03HHSH@SH@H@jwHH@ H@(jwH@0H@8jw@@@B@C@DH@HhHPHiHIH RRH RLRHRLRHHHǹRRH HHDžjw0HHPIE1LDHDž0H HP1HPukH|H qHHRH HHx|H HQH9$&HHھRJHH HoD(HHxHjw%HHxHjw%HHھ)RH HHx@|HHyHjw%H HQH9HHھ)RHH H蕎LHLsHHxHjw"Rgw HƅHHھ8RH HHxr{HHyHjw$H HQH9=RgwHOHH0H8E1HHHxHjwo"H 赯HbHMdH3 %(DV+He[A\A]A^A_]HHھYR0H HHxzIHHxHjw!H HI9LPLHDžHDžHDž LLH@Hھ^RHH0RH0AVAUDžDžH0H L@MH纀>H03H~H0H0HxHjw H@HxHjw HPHxHjw LLL HpHھ^RHH`HRHPcAVAUDžDžHPH LpMH纀>H` YH~$H`H0HxHjwHpHxHjwhHHxHjwaLLLHHھ^RHHxRHp~ AVAUDžDžHpH LMH纀>H+JH~/HH0HxHjwHHxHjwHHxHjwLLL!HHھ^RHHRHi#AVAUDžDžHH LMH纀>H6cH~:HH0HxHjwHHxHjwHHxHjwLLL,HHھ^RHHRHAVAUDžxDž|HH LMH纀>HA`H~xEHH0HxHjw)HHxHjw"HHxHjwL@LL7H0Hھ^RHH RH?AVAUDžpDžtHH L0MH纀>H L@QH~pPH H0HxHjwgH0HxHjw`H@HxHjwYLpLLBH`Hھ^RHHP8RHAVAUDžhDžlHH L`MH纀>HPW-H~h[HPH0HxHjwH`HxHjwHpHxHjwLLLMHHھ^RHHhRH%AVAUDž`DždHH LMH纀>Hb*H~`fHH0HxHjwHHxHjwHHxHjwLLLXHHھ^RHHRH0"AVAUDžXDž\H0H LMH纀>HmfH~XqHH0HxHjwHHxHjwHHxHjwLLLcHHھ^RHHRHPAVAUDžPDžTHPH LMH纀>Hx:H~P|HH0HxHjw/HHxHjw(HHxHjw!L0LLnH Hھ^R HHRHpAVAUDžHDžLHpH L MH纀>H`7H~H臲HH0HxHjwmH HxHjwfH0HxHjw_L`LLyHPHھ^RHH@RH1"AVAUDž@DžDHH LPMH纀>H@`jH~@蒱H@H0HxHjwHPHxHjwH`HxHjwLLLHHھ^R HHpcRH AVAUDž8Dž<HH LMH纀>HpTH~8蝰HpH0HxHjwHHxHjwHHxHjwLLLHHھ^R+HH8RHAVAUDž0@Dž4HH LMH纀>HGH~0訯HH0HxHjw'HHxHjw HHxHjwLLLHHھ^R6HH`RHAVAUDž(Dž,HH LMH:HHf'~(豮HH0HxHjwcHHxHjw\HHxHjwUL LLHHھ^R?HHR'H+AVAUDž Dž$HH LMH:H=Hf~ 躭HH0HxHjwHHxHjwH HxHjwLPLLH@Hھ^RHHH0R0H0AVAUDžDžH0H L@MH:H0Ÿ@Hf~ìH0H0HxHjwH@HxHjwHPHxHjwLLLHpHھ^RQHH`R9HP=AVAUDžDžHPH LpMH:H`ʷBHf'~̫H`H0HxHjwHpHxHjw=HHxHjw6LLLHHھ^RZHHRBHpAVAUDžDž HpH LMH:HӶ0Hf~ժHH0HxHjwHHxHjwyHHxHjwrLLLHHھ^RcHHRKHAVAUDžDžHH LMH:Hܵ0EHf~ީHH0HxHjwHHxHjwHHxHjwLLLHHھ^RlHHRTHhAVAUDžDžHH LMH:HNHf~HH0HxHjwHHxHjwHHxHjwL@LLH0Hھ^RuHH R]HAVAUDžDžHH L0MH:H 0@Hf~H H0HxHjw4H0HxHjw-H@HxHjw&LpLLH`Hھ^R~HHPRfHAVAUDžDžHH L`MH:HP%Hf~HPH0HxHjwp H`HxHjwi HpHxHjw LLLHHھ^RHH@RoHAVAUDžDžHH LMH:HWHf~HH0HxHjwX HHxHjwQ HHxHjwJ HLHH^RHH`RwHOHDžDžHLPAUM>H HH"Hf~ HH0HxHjw HHxHjw HHxHjw EHWHH1rRHHH1HHHxHjw HHRgwHHSRHHHHxHjwt HHlH1nHHxHjw RgwwHHRRH[HHH0kHHxpu&RgwHH9RHHRHLI9H:HPHHHPLh LpHHHHPLHIt$AD$`AD$HDžxLLIt$(dDžpHDžHtOLL=sHxHHHQHuHHHPHuHID$@HHIt$HXHPIt$PHxPCHXHHV:SHHHHHVt:SHH_HHHVLHHHH@HH8{8sCHHhHHxHjwHHxHjwHxLi_HXHxHjwHPHxHjwIXL9H\HHHxHjwtEHP`7L5RL*ƅARgw/HLiHHHxHjwoH E1\HEH HھYRH H HoH0H0H HxHjwHPtHH H@0H=@DH8DHPЅH 8DHPЅ)H^8DHt}PЅH18DHtCPЅHPJHLPJHmPJH뺋PJHHP9JHP(HPHP HPHPHPHPHPHPHPDHP~KHPmRHP\HPK HP:HP)HPHPHPHPHPHPPHPWHP^HPHPHPn"HP]HPLHP;HP*BHPIHPPHPHP HPHPHPHPHPHPHPoHP^JHPMQHP<XHP+ HPHHP OHPVHP HHPHPHPHPHPfHPtmHPcHPRHPAHP0HPHPHPoHPvHP}HP3HP:HPAHPHPHPuHPdHPSHPBHP1HP HP'E1=HP!HPHHEHPHPHHHPfHPHPHdHHHxHjwLaHHHxHjwt HH xH=HtHHPHxHjwt HPH`HxHjwt HPHpHxHjwQHP@HP|HHHxHjwHPPHP?{HHHxHjwHHHxHjwHHHHxHjwt HP HHxHjwuHHHHxHjwt HP HHxHjw0HHHHxHjwt HPK HHxHjwHHH HxHjwt HP H0HxHjwt HP H@HxHjw0HHHxHjwHP HHHH HxHjw|HPl kIHIHxHjw*LLHHHHRRdwIHL HHHdwHMA]HH0HxHjwt HP H@HxHjwt HP HPHxHjw/H*HIHIHxHjwt HP7 HHxHjwHP HHHxHjwt HP HHxHjw5HIIHPII?HQLLYIIHXH|H-HHXHxHjwtHvHHPHxHxMHHpHxHjwt HP5HHxHjwHHH`HxHjwtHPHH HxHjwHPHHHxHjwt HPH HxHjwt HPH0HxHjwHHHxHjwt HP?HHxHjwt HPHHxHjwiHHHHHxHjwt HPHHxHjwuHH H$HHpHxHjwtHPHH@HxHjwt HP[HPHxHjwt HP;H`HxHjwHHHH@HxHjwt HPHPHxHjw;HHHHxHjwt HPHHxHjwLHHHHxHjwtHPgHHHxHjwt HPBHHxHjwt HP"HHxHjwlHHHH0HxHjwHPHHHxHjwt HPHHxHjwt HPH HxHjw,HHHHHxHjw;HP>*HH`HxHjwt HPHpHxHjwt HPHHxHjw@HHHHHxHjwCH2HHHxHjw#"fffff.HHkw"uHkw3DH2H2H2HDHIkwuIkw3DH1I^HHPTI RHRHP:DbwUH-bwHHvHt]bwf]fffff.bwUHbwHHHH?HHtHt ]bw]fD=2uUHn]2@uH?uHtUH]zf.8DHtG~ ËGPWVfDAWAVAUATIUSRHHdH%(H$1HH@HH }8h uCHIH&RH?HH@HHy }8 uCHLl$`HdI$ID$H.袋.HD$(HD$0H)HT$ HHHH9L$0HD$8HD$xHD$RHHH@HH }8( uCHfH RH\HD$ HH0HVHHž7RH3HEH@LMl A|$8 At$CHHXHD$ :RHߋhH߉Hž8RHHEH@LM A|$8At$CH|HHD$ FRHߋhjH߉耻Hž8RHKHEH@LM A|$8BAt$CHHpRRHHD$ HHpHHVHž7RHԿHEH@LM A|$8At$CHHfRH臿HD$ HHpPHVrHž7RH]HEH@LM A|$8At$CHH肿zRHHH@HHJ }8uCHE1H7HD$ HH Lp@H@0HL$HD$H9L$4L|$H|$pIw -H|$Iw(HD$@0Hp8HD$p$HxHt$H|$PHD$p$LHpD$X˻RH)Ht$PHHVRHHHEH@LMZA8oAwCHH*RH踽Ht$PHHV觽7RHH蒽HEH@LMA8.AwCHQH蹽L$X RH $<$H菿8RHHHEH@LMlA8AwCHHARHϼHt$`HHV込RHH詼HEH@LMA8AwCHhHмRH^IM9t8RHCHH@HH}8quCHHmHD$`HxHjwHD$PHxHjwaH$HxHjwHD$xHxHjwHD$pHxHjwH|$HL$HD$H9L$RHkHH@HH}8uCH-H蕻RH#HD$(HD$(H;D$8t8RHHH@HH9}8uCHH)HD$ XHL$ H9L$0RH衺HH@HH}8uCfDLضI H@0H=@DvLiL訶I H@0H=@DLLxI H@0H=@DLLHI H@0H=@D@L3HHE H@0H=@DrHef8DHtfPЅHt$Or8DHt&PЅ;Ht$O踷,PJHPJH뙺8DH&PЅ/Ht$Pg f8DHPЅHt$P48DHPЅHt$PHִHE H@0H=@DcHVL訴I$ H@0H=@DLLzI$ H@0H=@DHL;LLI$ H@0H=@DLLI$ H@0H=@DLLI$ H@0H=@D_LRH³HE H@0H=@DHH蔳HE HP0H@DHHeHE H@0H=@D{HnPJHPJH*PJH۱ֱHHE H@0H=@D HH踲HE H@0H=@DVHIHHD$`HxHjwHD$PHxHjwH$HzHjwHT$xHzHjwuJHT$pHzHjwu H>8DHOHHt$Pȸ8DHOHHt$P닺8DHOH=Ht$O足.8DHOHtj(Ht$P舳8DHOHtUHt$OZBHJ)BHJFBHJ딋PJHXPJHHHE H@0H=@DtHHHH谴RH>HH@HHx}8t>uCHHlH$dH3%(uHĨ[]A\A]A^A_rHJHE H@0H=@DtHHHD$PHxHjwHt$OHHHD$xHxHjwt Ht$P|HD$pHxHjwHt$P\HfS8HPdH%(HD$H1H|$HHXSH@SH@0SH@ @(H@H@HD$ HD$(HD$0D$8HD$SHD$SH$D SH_f.Df.Ht HH@ff.@HRf.f.@dwf.1Cu 1H0f.fB}tGCDG@f.GDf.0Sf.Hf.1Cu 1H0f.fB}tGCDG@f.GDf.dwf.Hf.f.@f.@SHbSHpSP[ff.HSt@SHHS`H[HS锫@SHHS耫H[鷬USHHHH H9JtH11[]H驯fHo0HtHHEH@H=Du4芳UHpSPH;HHtHH@H[]fHX[]DSHHSHG0SHHtHP HSH[鮪f.@HSHHRHG0SHHtHP HSH[f.@HSHHG8RHRHG0SHHtHP HSH[鶬fDHf.LIzSHHG0SHSHG0SHHtHP HSH[馩fDHf.LIzSHHSHG0SHHtHP HHSOH[醪fDHf.SHHRHG0SHHtHP HHS诫H[6fDHf.SHHG8RHRHG0SHHtHP HHSWH[ީfffff.Hf.LIzSHHG0SHSHG0SHHtHP HHS7H[nfffff.Hf.LIzUS1HHo HtAHEHH@H=Du<BUHpSPH;HHtHPH[]DHfUS1HHo HtAHEHH@H=Du<үUHpSPH;HHtHPH[]DHfUSHHHH H9JtH11[]HɧfHo0HtHHEH@H=Du4:UHpSPH;HHtHH@H[]fHX[]DSHHHSdH%(HD$1HG HxHjwu HHD$dH3%(uEH[f8DHt&PЅHt$謩f.PJH莫f.@SHHHSdH%(HD$1HG HxHjwu0HhHHD$dH3%(uMH[f.8DHt&PЅHt$f.PJHުf.@SHHHSHG@SdH%(HD$1HGHHtt|HC8HxHjwH{0HtHPHC(HxHjwH{ HtHPHCHxHjwuKHD$dH3%(H[fHHHtHPHaD8DHPЅHt$ЧfD8DHtfPЅ#Ht$蠧8DHt&PЅHt$pPJHPJHPJHZ3HWSHHHSHGSdH%(HD$1HGHHtt|HC8HxHjwH{0HtHPHC(HxHjwH{ HtHPHCHxHjwuKHD$dH3%(H[fHHHtHPHaD8DHPЅHt$ fD8DHtfPЅ#Ht$8DHt&PЅHt$PJHPJHPJHZ胧HWSHHHSHGSdH%(HD$1HGHHtt|HC8HxHjwH{0HtHPHC(HxHjwH{ HtHPHCHxHjwuKH苢HD$dH3%(H[ÐHHHtHPHaD8DHPЅHt$pfD8DHtfPЅ#Ht$@8DHt&PЅHt$PJHPJHPJHZӥHWSHHHSHG@SdH%(HD$1HGHHtt|HC8HxHjwH{0HtHPHC(HxHjwH{ HtHPHCHxHjwuKH۠HD$dH3%(H[ÐHHHtHPHaD8DHPЅHt$fD8DHtfPЅ#Ht$萢8DHt&PЅHt$`PJHPJHPJHZ#HWATUSHH dH%(HD$1HG Hxt*HHL$dH3 %(HH []A\Hk gIH茡LHHHC HxuCHsSH|$HPHt$HHD$HxHjwu*HC ofRH螝@8DHtPЅHt$밋PJH"HHD$HxHjwt Ht$_HH4H|H贤HHt豥茡f.fAUATIUSHnHHXdH%(HD$H1HFHxfwHDH~0HF8HxHEH|$ HD$ jwHpHH|$ R}H|$ H谥H|$ R\HLl$0Hs8LHT$0Hjw|HHl$@RHHT$@HjwHHT$HjwHD$@HxHjwYHD$0HxHjwHD$ HxHjweH{ HC(HpHHLHD$0jwRL肛Hs(L趤RLdHH|$HHT$@Hjw舤HD$@HxHjwHD$0HxHjwHD$I$fDH{ HC(HxLl$0HH(LzRLȚHLHHl$@RHHT$@Hjw藚HI$HjwHD$@HxHjwHD$0HxHjwt<8DHSPЅH۝fHLŜHL$HdH3 %(LHX[]A\A]ú8DHoPЅHy@8DHPЅ;Ht$ D,8DHPЅHt$ v8DHPЅyH֜l8DHtFPЅ7H誜*DPJHPJH*PJH빋PJH}PJH58DHt3PЅcHt$ +TPJHPJHHHD$@HxHjwt Ht$ aHD$0HxHjwtHGHD$HxHjwtH-H襠HHHD$@HxHjwt Ht$ HD$0HxHjwtHt$@HH(H?HHD$@HxHjwt Ht$HD$0HxHjwt Ht$@HD$ HxHjwNfAUATIUSHnHHXdH%(HD$H1HFHxfwHDH~0HF8HxHEH|$ HD$ jwHpHQH|$ R͖H|$ HH|$ R謖HLl$0Hs8LHT$0Hjw̟HHl$@RHHT$@HjwfHHT$HjwHD$@HxHjwYHD$0HxHjwHD$ HxHjweH{ HC(HpHHLHD$0jwTRLҕHs(LRL贕HH|$HHT$@Hjw؞HD$@HxHjwHD$0HxHjwHD$I$fDH{ HC(HxLl$0HH(LʗRLHLMHHl$@RHHT$@HjwHI$HjwHD$@HxHjwHD$0HxHjwt<8DHSPЅH+fHLHL$HdH3 %(LHX[]A\A]ú8DHoPЅHɗ@8DHPЅ;Ht$ 蔗,8DHPЅHt$\v8DHPЅyH&l8DHtFPЅ7H*DPJHPJH*PJH빋PJH}PJH58DHt3PЅcHt$ {TPJHPJHTHHD$@HxHjwt Ht$ HD$0HxHjwtHHD$HxHjwtH}HHHHD$@HxHjwt Ht$ OHD$0HxHjwtHt$@3HH(H?HHD$@HxHjwt Ht$HD$0HxHjwt Ht$@HD$ HxHjwNfUSH@H荗HuHxH@8PSHphwHH}HSHC0SHH{tHPHE DRHHXRHCRHC8RHC HE(HC(E0C0HHHH#H苙HHS蜓f.LIz$@USH8H譖H}HH@0PSHSH@0SHHxtHPHED SHHXSHCSHC0SHCHE HC E(C(!HHHS?HWH还ffffff.LIzD@SHRH H|$HT$dH%(HD$1$Ht$HHD$HxHjwu%HD$dH3%(HSuKH [8DHt&PЅHt$ f.PJHHHD$HxHjwt Ht$OHǗAVAUATUISHLoXHoPdH%(HD$1I9tiA @HI9tOH]HtDCuHHPDC uHHHPHPD HPI9uMl$PMtLΏI|$(Ht迏Ml$Il$I9tmAHI9tOH]HtDCuHHPDC uHHHPHPDu}HPI9u@Ml$MtL6I$HxHjwuHD$dH3%(uNH[]A\A]A^ú8DHt*PЅHt$44PJHfATUISHHoHdH%(HD$1H9t]8DHuf.HH9t7HHxHjwtHHt$H蛐H9ufDI,$HtH/HD$dH3%(uJH[]A\fDHqɉpHt$IfHH9tHHxHjwt USHHH8dH%(HD$(1ڔUHpSH{ HPHC tHPEH2HL$ H|$A1HD$jw0D$ H{(Ht$HD$HxHjwuHL$(dH3 %(HuAH8[]D8DHtPЅHt$DfPJH.HHD$HxHjwt Ht$HUSHHH8dH%(HD$(1躓UHpSH{0HPHC0tHPEH2HL$ H|$A1HD$jw0D$ H{8Ht$HD$HxHjwuHL$(dH3 %(HuAH8[]D8DHtPЅHt$$fPJHHHD$HxHjwt Ht$kHATUISHdH%(HD$1HGPHtuHHHtHXHID$0HtIl$I$H9tZ8DHuHH9t7HHxHjwtHHt$H3H9ufDI,$HtHNJHD$dH3%(ukH[]A\fDPJ҉H Ht$HH9tHHxHjwtDHHH$I|$8H藎AVAUATUISHHoL7dH%(HD$1L9Mn0I^(I9tW8DHuA@HI9t7HHxHjwtPHt$H I9ufDMn(MtL蟉MnI^I9tV8DHuHI9t7HHxHjwtPHt$H蛋I9ufDMnMtL/IHxHjwIHL9I,$HtHHD$dH3%(H[]A\A]A^@PJ҉H Ht$HI9HHxHjwtɐPJ҉HHt$يfHI93HHxHjwt8DHt#PЅ'Ht$舊PJHqUSHHH(HjwdH%(HD$1XHT$H|$HHL$LAMu(HyHjwu>HD$dH3%(ufH([]@H1HHp_HL$HyHjwt¸8DHt#AHt$軉fAPQ蠋HHHD$HxHjwt Ht$H;HHjwt Ht$HZf.ATUHSH H|$dH%(HD$1+Ht$ HD$ "脊H\$ILcL9u"QHt$T$HZHI9t1Ѓ<"uHt$HD$&.fHt$ HD$ " HD$HxHjwuHL$dH3 %(HuAH []A\ú8DHtPЅHt$ G뾋PJHH.HD$HxHjwt Ht$ H f.HH?HtSHHP tH[f.ATUHS8H dH%(HD$1苌H}HH@0PSHSH@0SHHxtHPHEHuE1HCHE HHC E(HXSHCSHC0SH$C(tFHH|$P(H<$Ld$HtHP ML$$t I$LPH|$HtHP L$$HE H{HC E(HC(HEHCtHP MLct I$LPH<$HtHP HHXHT$dH3%(Hu H []A\興H HH*H|$oHgHHHOHSH谂fffff.LIzT@ATUHS@H dH%(HD$1ۊHuHxH@8PSHphwH܄H}HSHC0SHH{tHPHE HuE1HC HE(HHC(E0HXRHCRHC8RH$C0tFHH|$P(H<$Ld$HtHP ML$$t I$LPH|$HtHP L$$HE(H{HC(E0HC0HE HC tHP MLct I$LPH<$HtHP HHXHT$dH3%(Hu H []A\ĆHH H|$HHHHH萉HHHSH藃Hff.LIz4@AWAVHAUATUSHHHdH %(HL$81HHt$(H@HHD$H@HHD$DH@HHD$H@HHD$ LxMMoM @MeMMt$M8DHu1IV HzHjwKLIHIvHIV(I^HzHjwtJHt$7&@JqɉrHt$7 fIV HzHjwLI萀HIvH{IV(I^HzHjwt@ID$(I\$HxHjwMID$ HxHjwL'HIfDID$(I\$HxHjwtPЅHt$7/DJHt$7 ID$(I\$HxHjwPPJH8DHPЅ/Ht$7褁LLH%IE(I]HxHjwIE HxHjwuvLHID8DHPJHf.Jqɉr$Ht$7PJH:8DHPЅhHt$7ĀLl~H^IW(I_HzHjwIW HzHjwL-~HtRI8DHt#PЅHt$7HPJH܋PJHPHD$ HP(HXHzHjwHD$ HP HzHjwH|$ }HH\$ H8DHOH &Ht$7@8DHOHt?Ht$7oHD$8dH3%(uHH[]A\A]A^A_ËBHJ;HD$HP(HXHzHjwHD$HP HzHjwutH|$|Ht H\$HHD$HP(HXHzHjw{HD$HP HzHjw3H|$Y|HH\$H8DHOHtNmHt$7j~^8DHOHt+)Ht$7<~BHJ밋BHJӸ8DHOHtRHt$7}8DHOHSHt$7}BHJHD$HP(HXHzHjwHD$HP HzHjwutH|$({Ht H\$HZHD$(HP(HXHzHjwaHD$(HP HzHjwH|$(zHH\$(H8DHOHtNmHt$7|^8DHOHt+)Ht$7|BHJ밋BHJӋBHJBHJ8DHOHtRHt$7W|8DHOHbHt$7%|SBHJ문8DHOHtNHt$7{8DHOHt9Ht$7{qBHJ밋BHJiBHJDSHhbHSH@@SHXH@jwH@ H@(jwH@0H@8jw@@@B@C@DH@H[f.HHt*SHuHHHtHHH[f.fAWAVLwAUATUSHHoHL&MM|$@؅x?IHmHt*Hu-HHt$HL$dH3 %(uH[DiH$SʵHHH$ScHlf.DAVAUIATU@SHHHdH%(HD$1!lHs Hx I1fHs(I~($fC0Hs8I~8AF0 fIFHsIFInAHtLLoIFHkMH@kHu Hx HeHu(H{(eE0Hu8H{8C0eEHCHuHCI\$HLctHLHCHmIHuHL$dH3 %(LuH[]A\A]A^>!hIF(HxHjwt Ht$膤IF HxHjwt Ht$kHH@jLccH HSHPHC(HxHjwt Ht$)HC HxHjwt Ht$HHiH+cc_iHgjHH7HJ9iHHiLLCNcHiHjf.@USHHHdH%(HD$1H9tO8DHuHH9t7HHxHjwtPHt$HdH9ufDHD$dH3%(uKH[]fPJ҉HHt$idfHH9tHHxHjwt@fATUISHHo0H_(dH%(HD$1H9t]8DHu&fHH9t7HHxHjwtHHt$HcH9ufDIl$(HtH^aIl$I\$H9tT8DHuHH9t7HHxHjwtHHt$H[cH9ufDIl$HtH`I$HxHjwHD$dH3%(H[]A\@PJ҉H Ht$bHH9#HHxHjwtɐPJ҉HHt$bfHH9SHHxHjwt8DHt#PЅIHt$hb:PJHQdAWAVAUATUSHHH|$HdH%(HD$x1`HSpH|$0HHD$PHD$XHD$`D$pHT$hZbHD$0Ld$PHl$XHD$0HD$PHD$8MI9HD$8HD$XHD$@HD$@HD$`Mn0I^(I9tW8DHu@HI9t7HHxHjwtPHt$/HCaI9ufDMn(MtL^MnI^I9tV8DHuXHI9t7HHxHjwtPHt$/H`I9ufDMnMtLg^IHxHjwIHL9MtL9^Hl$8Ll$0L9fDMe0I](I9tW8DHu@HI9t7HHxHjwtPHt$/H`I9ufDMe(MtL]MeI]I9tV8DHuHI9t7HHxHjwtPHt$/H_I9ufDMeMtL?]IEHxHjwQIHL9Hl$0HtH ]HD$XLl$PHL$HHD$H988L)HHAHHAHHHAHD$HD$HL$HL9l$HHAHYrIDM%LL]I]I+]E1AEID$ID$ID$ AD$HHH LM|$M|$I\$ MuLI]I9t Ht HHP]HHI9uIl$I]0E1I+](ID$(ID$0ID$8HHHhLM|$(M|$0I\$8Mu0LI](I9t#fDHt HH\HHI9uAE@Il$0AD$@AEAAD$AIHIHL9l$HL$HD$hHl$XLt$PHAD$pL9LaA8DA  DMn0I^(I9tWMuVfHI9t7HHxHjwtPHt$0H ]I9ufDMn(MtLZMnI^I9tVMu%HI9t7HHxHjwtPHt$0H\I9ufDMnMtL/ZIHxHjwIHI9Hl$PHtHYHL$xdH3 %(HD$ HĈ[]A\A]A^A_ËPJ҉HHt$/ \f.HI9HHxHjwtPJ҉HHt$/[f.HI9HHxHjwtPJ҉HHt$/[f.HI9cHHxHjwtPJ҉HHt$/J[f.HI9HHxHjwtPJ҉HHt$0 [f.HI9HHxHjwtPJ҉HHt$0Zf.HI9#HHxHjwtHH9OHe_IuDHH9,H=_IMPЅHt$0.Z8DHPЅHt$/Y~8DHtcPЅ7Ht$/Y(H88H9woH^HD$HD$XLl$PHD$PJHKPJH뜋PJH_HHD$hHl$HQHAD$pA H]PH9]4]nH%[HI|$I$HxHjwt Ht$0yHHN]L9d$tH\$HHHHL9HD$uVH]HLVHH\I|$(Hq:Vgp\HD$H8HtVH|$PH\]CH\HL-XVH \I|$HUAWAVAUATIUSH(HoLdH%(HD$1HL)IIMrK$I9xILHt$\ImMEIHt$M~HL)Lt HHHjwL9'LLfDHt H2H1HjwHHH9uIXHH)HN|08DHuH9It8HIHzHjwtBHt$VH9Iu@I}HtTMMuM}HD$dH3%(MeH([]A\A]A^A_PJ҉HHt$VfH9ItHIHxHjwtfAHiHH9uIHoAE1Xf.AWAVIAUATUSHHHdH%(H$81IH|$DD$HDŽ$Ht4H$IAH$IAH$IAH$HcHD$@HHD$HHD$PL$IHI9LA8DH$Ll$ Muf.HI9twH3HLUHD$HH;D$PHHT$ tHHD$ jwjwHHD$HHzHjwtBH$HTI9u@HT$@HD$HHD$`HD$hHD$pH)HH1M1Ld$0Ll$`"fHT$@HD$HKHH)HH9`H4L4UHD$hH;D$pHHT$0tHHD$0jwjwHHD$hHzHjwtBHSxBHJH$SfDHI9H3HLETHD$HH;D$PUH<HT$ HHD$ jwjwHHD$HHzHjwt{HD$@LHHD$#HT$ DfLLHT$0 H$HD$`HD$hHD$pLl$`LHQLd$hH\$`I9t[8DHuHI9t7HHxHjwtPH$HxRI9uLd$`MtLPLd$HH\$@I9tT8DHuHI9t7HHxHjwtPH$HRI9uLd$@MtLOLHH$Qt$HL$0H$QH$HDŽ$Ht@H$H$H$H$H$H$H$L$LHMH$Ht.H|$HH$H$HtuHHHtH}XHH$HtH$H$H9t\8DHujDHH9t7HHxHjwtPLHPH9uH$HtHNH$Ht"uHHHtH$HH$8dH3 %(HD$rHH[]A\A]A^A_fDPJ҉HH$OfDHI9kHHxHjwtfPJ҉HH$OfDHI9HHxHjwtPJ҉H LkOHH9HHxHjwtfHT$ fDHD$@LHHD$ HT$ HHHI|$H@HHHH}8HDHIy1H$L$H$H1It$H{f.8DLd$0Ll$`'HT$@HD$HKHH)HH9XH4L,OHD$hH;D$pt`HtKHT$0HHD$0jwjwHHD$hHzHjwtBHJHMHT$0fLLHT$0OH HLIZHD$0HxHjwtHHLH$]H|$@SH;HSRLIH$ HLUHHD$@HD$$HHD$ HxHjwt H$耋H|$H$޻HDAWAVA8DAUATIUSAHHdH%(HD$1Hu?fDH{(HtHPHC HxHjwupHL%JMHsLHk@LcHtDEuHEHPDE uHEHHPHPDuxPsMt[PЅwHt$KHLIMmfHD$dH3%(u$H[]A\A]A^A_ÐPJHMAWAVHAUATUSHHHdH %(HL$81HHt$(jH@HHD$"H@HHD$H@HHD$H@HHD$ SLxMtMoM@MeMMt$M8DHuLImHHtPIvHIV I^HzHjwtϹJHt$7JLI$HHuID$ I\$HxHjwPЅHt$7/JLGHfDIE I]HxHjw+LGHIfDJqɉr Ht$7ILInGHt:fIvHIV I^HzHjwuLI4GHuID$ I\$HxHjwt/PJHID$ I\$HxHjwuLFHI88DHPJHIW I_HzHjwLFHtBI8DHt#PЅHt$7HPJHHD$ HP HXHzHjwH|$ "FHH\$ HF8DHOHPHt$7/HAHD$(HP HXHzHjwu;H|$(EHt H\$(HHD$8dH3%(u6HH[]A\A]A^A_ø8DHOHtHt$7GIBHJBHJOHD$HP HXHzHjwuVH|$EHt H\$H HD$HP HXHzHjwuGH|$DHH\$H8DHOHtDHt$7F냸8DHOHHt$7F뎋BHJHD$HP HXHzHjwuNH|$ODHH\$Ha8DHOHtGHt$7`F8DHOHt2Ht$76F닋BHJ뷋BHJ=BHJSHHHkwHpHsPH{@XHs H{[f.SHHHkwHpeHsPH{@Hs H{H[BCfUSH@HhdH%(HD$X1GHHD$ HuHD$ phwHxODHD$ H{HD$8HD$@HD$HHpD$PHD$ RHD$0RHC8PSHphwCHt$8HSHC0SHHstHHPHt$8HD$@HHXRHCRHC8RH$HC HD$HHC(D$PC0tFHH|$P(H<$Hl$HtHP HH,$t HEHPH|$HtHP D$PH{C0foD$@H,$HC tHP HHkt HEHPH<$HtHP H|$ ߕDRH-GHH)HJH)HQH|$ JFHRFHHH|$谻H註H耕H|$ vHHSBHEfUSHHHHH>jwHtHHPdwHDuaHp1@S>*HuLHmHH{HtHEHCHHtDHtHH{PHPH[]@1f.fATUISHHHHr2I<$1*@HH4(tiHHIHDui1*@HDulI4$HHCHtHCHHtDHt HH{PPH[]A\Hx2@Ht$H@Ht$1@8DHtG~fDGPWAfffff.HHtHtH@H@fffff.HFf*YW Z\c HXZfffff.AVAUATUASIHH~DE>~Etg=A|$J,=H|$DsEfHf*YD$Z\D$XZ[H9uH[]A\A]A^@F HHfH*l$A|$tt$Y5Dt$EtE1HDf*AD$\+ZYYD$to~EtPusA|$u .FH,JDIE9w)f.u3,B3ِA|$tH,BfD,fBsDA1HpS hwHBH,BzfE-/Al$J,--Hl$@CfHf*YD$Z\D$XZZ{H9uH[]A\A]A^HfHH H*(Xt$Cf\H,JJ1,fDH~0 p.w HfD1ҾuSgwH?1ҾuSgwD$ ?D$ fAUATIUSHH(H|$PdH%(H$1 H|$HHt$PH$Ht$H$H$$LH$La VfDtH$H9$Ht HHnHAI9t$IEHxHjwt Ht$II9u:HH$(H|$HH?@H$SHPdH%(HD$H1@tH\$HdH3%(uTHP[H|$LD$H $XH $LD$H|$HD$88 SHL$0DD$@;H|$H-H@=AUATIUSHHHXHjwGGGGGdH%(HD$H1)>I$HxPx L@I$8s HSL9HxHXH|$@1LH?H|$@KEHt$@H~HjwPHI$EH;Zs6Bx L.@I$ ftQ~?itbuuUEHH;ZrHt$HdH34%(HHX[]A\A]DcuEDEf.k8EfH@EHHHcH|$ L ?Ht$ L?HD$ HxHjwHt$@Ht$0D$ D$ HH}HHjwt Ht$H>;HT$ H|$0SI2:H|$0L?HLj8HD$0HxHjwuC4D0SL<;HT$@ SHI94D0SLUxHhHTJ(HJ4"J< D~pHHIHHH)HH9HHȀ8nP2LuVxxHAljJ)J4 HhHPJ< ̥pNDHHH@gwHH1HXHV+SHIHXLH0HVH1AHHH)HHH;1HP S hwHsHHH)HH Ha1H( S hwH+HHH)HH-Hk1Hx S hwH1H S hwHHH9LEHHHHHH诲HIHLH6YSLHIH`HxHjwIHHxHjwIHHxHjwIHHxHjwIHHxHjwIH`HxHjwd~IHHxHjwD^IHpHxHjw$>IHPHxHjwIH@HxHjwfD軍XfDxxEHAJ (J4!HhHPJ< 褙xHhHTJ(HJ4"J< D@xxHAljJ)J4 HhHPJ< VsxxDHAJ (J4!HhHPJ< m*胇 xEHAJ (J4!HhHPJ< 5xHAljJ)J4 HhHPJ< 8xHAljJ)J4 HhHPJ< 蛏hxDHAJ (J4!HhHPJ< *pHH;(?AH@HH#HHH+IH0H0HH9H HSHH SHH1%EAHhH)HHLHHHHHH HU <EJ48H _HpB8Hhf.LHHHHHH LHHHHHHH)HH9%HhH ,If.pf(f.WHH !HFDžH@HHH菝f.p6pHH HxHjwt H,HHxHjwt H HH Sgw>HgwHV)HSgw H gwHVHH8txH^RH8H@HHx!HHH8HH@HxHH8H HxHH HxHjwt HHHxHjwHHteHHtTH~H H`Ht+H _~HxS~HG~H`zDpNH ChH HHE1HH0HyHH@HPHHpHxH@mHpHxxHxHHxHjwt H茼H0H`HHH@H yHPHHpHxgHPHLxHH@HHH@HxHHH@H`xHHH@H qxHHH@HRxIHExL{HIHI$wH`kLCIHHxHjwtH4LH8H]_HHPHI$HHHPHH@HPH8 HPHH$IH蓐LIH0HxHjw)CIH HxHjw #IHHxHjwIHHxHjwIHHxHjwIHHxHjwIHHxHjwd~HDžDžE1HDžDžHDžHHHHyoHHIHHxHjwtHLAHHHxHjw&HH HH0H`IHHxHjw^xHHyHjwtH H(tH(HHDGExHH?xt}yIHHxHjwt H HHxHjwt HηH`HxHjwtH買LIHHWHpH;VH`SfHH`Dž2HOHHH$Hh HHxHjwt H  Dž(toHxHxHpj((; uIHHxHjwH 艶qPHXHHp((; uH9=H,HHHyHjwcH H(H(DH׵IHµKHHPHHpHx IHHxHjwtHzHPLHHpHxHHPHHpHxzHHPHHpHx:f.@WHⵃWËWHⵃWËWHⵃ@WÃG@f.f.@f.@Sf.f.f.@HHHPHPHPHP ff.@AWAVHAUATH)USIHIH(HT$HD$HG8H9HD$}bILkM@IL9+tWIIA6LHP A8EtIA4$HP D9HD$HL$H;L$|HD$ HH([]A\A]A^A_fDO8AVATUHH)SH9}RL_HE#HDE8u-LM9tCLFL IL9t'HD1LE80tBL9HH9|HfD[]A\A^H@f.@f.@f.@f.@HPHH@HHHPHPHPHP fHPHH@HHHPHPHPHP fH0HH@H0HH@HHH@HHHPHPHPHP ff.HHH@HHHPHPHPHP fUSHHHHHPH} HHH@H[]@HHH@ USHHHHHPH}(HHH@H[]@HHHPHPHPHP fUSHHHHHPH} HHH@H[]@HHHPHPHPHP fHHH@HHHPHPHPHP fHHH@~<tn8HHH@ fH(HH@HHHPHPHPHP fHHH@HHH@HHH@HF`HH@f.DHHHPHPHPHP fHF`HH@f.DHHHPHPHPHP fHHH@HHHPHPHPHP fHHH@HHHPHPHPHP fHHH@HHHPHPHPHP fHHH@HHHPHPHPHP fHHH@HHHPHPHPHP fHHH@HF!HH@ f.DHHH@HHHPHPHPHP fHHH@HHHPHPHPHP fHHH@HHHPHPHPHP fH HH@H HH@HHH@HHHPHPHPHP fHHH@HHHPHPHPHP f1f.1f.HHHHVH9t\1LN H9H)L9tRD u,HQfDDHB| uL9HufDHHF*t1f.1f.1f.HHH@HHHPHPHPHP fHHH@HHHPHPHPHP fH@HH@ f.fH@HH@f.f8@8!fAUATUSHHcW HGHH HVHHSL+LckHHCHSHRu L+Lc@kH[]A\A]fUSHHcW HGHH HVHHHkHSHRuHkH[]HH;V HOtKDHFPBD@fGA1D8G t%SHHHHHPuH+[fDF11ÐHcG LWHHFH At^USHHLAH.L9t_LN L9tF8EuBHEf.HHHI9t1L9tH8tH.1H[]@F1H.1DIHLPuH+H[]DAWAVAUATUSHHcG LwHHFHBtTH*LbHL.L9ttL;n LtdHSP0HHR AHCPuHHP A8tL+1H[]A\A]A^A_HHHI9Ht H9C uC1ʐIHLPuL+H[]A\A]A^A_f.@HH;F Ht#HSHHHPuH+[F11fUSHHWHOLO H.H9tULF I9tm8EtDH.1H[]@HHHH9HtI9t88uHHH9HuIHLPuH+H[]F1f.AVAUATUISHoHH;oLw L.tiL;n LtSHSP0HHR :EtL+1[]A\A]A^fHHHI;l$HtH9C uC1IHLPuL+[]A\A]A^f.fSHFPHLG8H6HS HHHGHG@AHtHNDAH9C H[ÐHHHPHPHPHP fHHHPHPHPHP fHHHPHPHPHP fHHHPHPHPHP fUSHHHHHPH}0HHH@H[]@USHHHHHPH}0HHH@H[]@H8HH@H8HH@H8HH@H8HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@H0HH@HHHPHPHPHP fHn8HH@ f.DHHHPHPHPHP fHHHH@HHHH@HHHH@HHHH@HhHH@HhHH@HhHH@HhHH@ATUSHcW HGH HVHHHDck CC RuDc@k []A\f.AWAVIAUATIUS1HGLo0L6uEf.A;_s2ILHRu9fIT$ LHPT$ tIELLPu A;_SrM4$H[]A\A]A^A_@AWAVAUATIUSHHGLo0Lw L>uJ1ۀ(urfA9]Mcv~9]M4$IELLPtH[]A\A]A^A_1fDH}LHPt;]r}(tt9]wPM;|$ tZIGAMcI$9]vM<$H1[]A\A]A^A_DM<$H[]A\A]A^A_DI$I$/M$"fAVAUATUISoHLw0L.tRHN 1LI9ul@H9Ht0H9tUAt$@80uLHH;S tWA|$@8:t!HHIHLPu A;l$rL+[]A\A]A^C1L+1[]A\A]A^fDC1f.AVAUATUISoHLw0L.HN L1H9tzAt$@80tsH9HuA|$(tI9IEHDA9l$v_A9l$H+IHLPt[]A\A]A^DC1A|$(t,tH9sdA9l$HHvL+1[]A\A]A^f@(vHN TD1HfL+[]A\A]A^@(L5f.AVAUIATUSoHLw0L&t?HN 1LI9tfDH9tH9uC1L#1[]A\A]A^fDHIHLPuA;ms)HH;S t6IHHHLPuA;mrL#[]A\A]A^f.C1L#AUATUSHHN L&oLo0HL)H9s-G(tI9tIL1H[]A\A]HHLHH9HFLx(H3t%HtIH9sDHHH9t HHIEHLPtfDL#H[]A\A]fI9tID$HL@AVAUATUISoHLw0L.tRHN 1LI9}fAt$@80t]L+1[]A\A]A^HH;S t_A|$@8:u!HHIHLPuA;l$rL+[]A\A]A^H9HtH9uC1C1fAVAUATUISoHLw0L.HN L1H9At$@80tsA|$(9HH@A9l$vhA9l$H+IHLPt[]A\A]A^DH9HgA|$(tI9tmA9l$IEHvL+1[]A\A]A^ÐC1A|$(Pif(VHN 1@L+[]A\A]A^@L(HPSH-f.f.f.SHHPSHH[pkf.[f.Kf.;f.HS@SHHSH[HFH9Ht1HH@SHHH~0H;~8HVHt*HWHGHSHF0H{HH@H[HRHt$HHSHt$HFHHPHVHH@HHF8HHF0HV@USHHHHHRtH[]H}HHH@H[]fUSHHHoHHRt H[]fDHEHHH@H[]fGHH@H@H@H@ tÐf.@GHH@H@H@H@ tÐf.@GHH@H@H@H@ tÐf.@GPHH@H@H@H@ tÐf.@GPHH@H@H@H@ tÐf.@AUATUSHHHHcEH HHFL$HEl$AD$Pu&H}El$HHH@H[]A\A]H[]A\A]DAUATUSHHHLg HHRtH[]A\A]fDHcCHLHHEHI$DkCPuDkH[]A\A]f.DUSHHH^hHu4@H[Ht'HHuxH@H==EtHH[HufDH[]f.fAUATUSHHHn@L.LfHHMHV8H~HHFPHN8HMHN@HMHNHHMHNPH}HUHmHEHF8HPH@HFHHVPLEH{8Hs@HKHHSPLC8LELC@LELCHLELCPH}HuHMHUHS8HJHRHKHSuH1[]A\A]@ID$Ml$AD$I$H[]A\A]@~(tL;n uF1{.ujHkhID$Ml$AD$HI$u3HmHt'HEHsxH@H==EtHHmHuDH[]A\A]M;l$u3@HH;V HOt3S_ 18t[fDHHHHHPuH+[F11fHF H9Ht1HF1H@Gu)HH@H@H@H@ fHHH@ HH;V HOt+S_ 18tHHHHHPuH+[F11ÐHXtAGPHH@H@H@H@ t f.fDF8F8G`H tAGHH@H@H@H@ t f.fDF8F8G(H tAGHH@H@H@H@ t f.fDF8F8G(HXtAGPHH@H@H@H@ t f.fDF8F8G`H tAGHH@H@H@H@ t f.fDF8F8G(ATUSHH;V LgtWHFPHH2HHP 1:E t[]A\I$HHLPuH+[]A\fD1F1[]A\f.H t1Gu@HH@H@H@H@ F8F8GG(tHHH@ DHH;FHOt+DHLFPGDHfDG tD:OtHHH@~*uf1DH;F tW8uF1f.HH;F HOt3DLFPGDHLfDG t+:Wt.HHH@f.~+F1ufD1DH;FtW8Pu~)tHH;F LWtkHVPTJfW AHVH9t>DHHNPBLIfO H9F,uD8r1DILH@@N)tfDF1E1f.DHHV LOH9|DHNPBLAfO AH;Ft@D@HNPBLAfO ~-tH9t7A8r 1ILH@@~)u~-tH9uF1fF1E1AUATUSHHcGHO(HHFH,HDm HUEtH9t\H9‹EIE 9GHvg;CrDm H1[]A\A]ÐH{ LEHPu mH[]A\A]HHH@H[]A\A]f.HLHPuEf.AVAUATUSHcWLo(H HVH,HDu HMEtH9tnH9ыEIE 9GHv)H{ LEHPu2E;CEr@IELLPuDu 1[]A\A]A^[]A\A]A^fIEL[]A\A]A^H@f.HHN LWH9tpDHVPBTBfW HVAH9taDHLFPGDHfDG AH9„V,u~-tH9t E8t 1F1ILH@HVE1F1H9uDF)Et@HHN LWH9tpDHVPBTBfW HVAH9taDHLFPGDHfDG AH9„V,u&~-tH9tE8tILH@fF1@1DHVE1F1H9uDF)Et@AVAUIATUSDgHLw0H.E|Hv H9DODGHH{P1@HD9HtGH9tdfDDOD8uUHH;S t_2HKPLqfAMA8Mt!HAHIHLPu E;erH+[]A\A]A^C1H+1[]A\A]A^fDC1fAUATUSHHH;F LgHHDoHVPHsHK HH)IIM::C :C 6:Cte:Cu2!f.:Atk:B:B:BHIHQuHH)HHH1!F11H[]A\A]H@H91A8tI$HEHLPuHmH[]A\A]DHHR HH9@HH9@HH9:tH:tH1:laHHKHK f.AWAVIAUATUSHHDg(H{>H{Hc2H{Lc&H{ AIcIHcLHH=tdHtL3AIHLPtH[]A\A]A^A_@H+H1[]A\A]A^A_H+H[]A\A]A^A_LWLGE1HM9Hs H9t:A8tBfA}0H;tEE9HDE@C1f.LHGHI9HHt+f.H9tDHD8uHHHI9uAHE9M9SAHE9HE1EHDAVAUATUISo4HLwHL.@uJf.A9l$0vZA9l$0taH+IHLPt[]A\A]A^fH~ @I9A9l$0IEHvL+1[]A\A]A^L+[]A\A]A^@H~ L1AH9ttMH?IMLu+A|$@tCt_9vkHH*f.H9HuA|$@NfC1f.1!fLf.ATUSHH;F Ho0t_HVPIH0HHR ?HHITu 1[]A\HEHHHPuH+[]A\fF11[]A\DAWAVAUATUSHDo0LwHHEtjLN E1HAL9tJDMӉH?IL\uH1H[]A\A]A^A_AHE9HtI9uF1DHIAIHLPuE;l$4rH]H[]A\A]A^A_fHuH;u t.LH?HI|tHAHuE1fAVAUATU1SGIHLw0L.ujfA|$(tL;k IEHA;l$sA9l$H+IHLPt[]A\A]A^DLH;C t?HSP0HHR A:D$pHHA;l$HXH;C ufC1GA;l$EHHA;l$jL+1[]A\A]A^fL+[]A\A]A^LDO DG1H~(H6AfDGA8tHHMH?IL \HH=uf.AWAVAUATIUS1HHG4LHL6ut@A|$@tL;s IFHA9l$0vA9l$0H+IHLPtH[]A\A]A^A_LH;C AtYHSP0HHR L?HHITPHHA;l$4H8H;C uf.C1A9l$4HHA9l$0BL3H1[]A\A]A^A_@L3H[]A\A]A^A_Lf.Gu)HH@H@H@H@ fDODG1H~(H6AfDGA8tHHMH?IL \HH=uf.H t1Gu@HH@H@H@H@ F8F8GG(tDODG1H~(H6AffDGA8tHHMH?IL \HH=uf.G0u)HH@H@H@H@ fAVAUATUHSHH{H{Lc H{LcH{ LcMHcLIDH=t-Ht:;t5HCHCHCHC []A\A]A^fHEH CHEH CHE H CHE(H C []A\A]A^@G0u)HH@H@H@H@ fAVAUATUHSHH{)H{LcH{LcH{ LcMHcLIDH=t-Ht:;t5HCHCHCHC []A\A]A^fHEH CHEH CHE H CHE(H C []A\A]A^@H8t1G0u@HH@H@H@H@ F8F8G0G@tAVAUATUH.SHH}H}LcH}LcH} LcMHcLIDH=t/Ht<}t6EHEHEHEHE []A\A]A^fHCH EHCH EHC H EHC(H E E[]A\A]A^H8t1G0u@HH@H@H@H@ F8F8G0G@tAVAUATUH.SHH} H}LcH}LcH} LcMHcLIDH=t/Ht<}t6EHEHEHEHE []A\A]A^fHCH EHCH EHC H EHC(H E E[]A\A]A^AWAVAUATUSHHHHLo8HD$G HWE1fDL}I9tuHH;C t`fDHSP0HHR A:t'HD$E1HHD[]A\A]A^A_f.HIHL;}Ht H9C uC1빋E LAA9uIEHLPAuD;e$rHD$HfLuL;utGHH;C t8DHKP0HHQ A:uHIHL;uHt H9C uC1AyE1qf.@AVAUATUSHo H{H{LcܴH{LcдH{ LcMHcLIDH=t]Ht9;t4HCHCHCHC []A\A]A^HH?HH T[]A\A]A^AWAVAUATUSHHo Lf(H{H{LcH{LcH{ AIcIHcLIH=tsHt=;t8HCHCHCHC H[]A\A]A^A_fDI$@HP Hƒ?HHH tH[]A\A]A^A_AWAVIAUATUSHHHG(Lg8HD$Hw$H$uP10Dl$A9k Mcv9k M/I$LLPtH[]A\A]A^A_IHG1LkI9M9w LfDIwPH0LAP A:Et}M7{0kt ;k$H$I;G tHDl$IA9k McVH$IH1[]A\A]A^A_H$IH[]A\A]A^A_fIIHL;kItI9G JAG1[s$IL9BIIAWAVAUATUSHHLHt$H{A/虱H{Lc荱H{Lc聱H{ LcMrHcHt$LIDH=tQHt-;t(HCHCHCHC "HH?HH TL~MFL~H[]A\A]A^A_f.AWAVIAUATIUSH(HOHF(HHD$H{HL$D$觰H{Lc蛰H{Hc菰H{ LcL耰HHL$HIItlMt-;t(HCHCHCHC =HD$t$HHP Hƃ?HHINH |3IOHIAGIOH([]A\A]A^A_f.@AWAVIAUATIUSH8WHHo0HD$H;F  HGH_E1HHD$HH)IHD$ HD$IA~E~IUPM A:FtA:F A:FtkA:FLHt$)fD:Ft[:B:B:BHHHVuHH)HHH1HT$fDH9@A8t)IEAHE;fIEI9E  AE1HD$E1IEH8D[]A\A]A^A_DHLT$HR LT$fHH9@wHH9@gHHGH_E1HD$f.HH+D$IHD$IHELHPAUE;frHD$IEAIEI;E A~E^IUPMoA:F A:FjA:FtaA:F`LHt$+@:F:B:B:BHHHVuHH)HtfHtXHtb1DA89AIE :1H:tH1:"H9@AE1:tKH:t H1:uH9@HD\$/DT$ HR D\$/DT$ HT$H9@ZHH9@JHHH9@4Ht$ HT$HIvIvHt$HT$IvIvAVAULvATUISH^HHMHhIH[Ht'HC Hx?*tgH_„tH[HuM9th}*ID$ HptIH1uJID$(IEID$0HIEt@[L]A\A]A^H9€}*ufH9>*u[LIEIE]A\A]A^@AWAVAUATIUS1HH(GLw0L.A|$(tuTL;k "IEHA9l$vNfDA9l$tYH+IHLPtH([]A\A]A^A_A9l$vHHA9l$vL+H(1[]A\A]A^A_@L+H([]A\A]A^A_fDLGLOLMM)LHH9C A|$E|$HSPHXA:D$t~A:D$XA:D$tXA:D$?HL#:Ft[:B:B:BHHHVuLH)Ht\HtNHtX1C1L@I9@A8xHHA;l$H`:tH:tH1:uHHL$LT$LD$L $HR HL$LT$LD$L $DHI9@oHf.HL9@GLLLIt$It$f.Gu)HH@H@H@H@ fAWAVAUATUSHL&oH^(I|$-I|$Lc I|$LcI|$ AIcIHcLIH=t5HtIA<$tBA$ID$ID$ID$ID$ H[]A\A]A^A_f.H@A$HP Hƒ?HHI tH[]A\A]A^A_f.DGu)HH@H@H@H@ fAVAUATUH.S_H}H}LcH}LcH} LcMHcLIDH=t/Ht9}t3EHEHEHEHE []A\A]A^fDH؉ٺH?EHH T[]A\A]A^G u)HH@H@H@H@ fAWAVIAUATUSHH(HOHF(H.HD$H}HL$D$H}LcH}LcߥH} LcMХHHL$LIIt/MtM}tGEHEHEHEHE IOHIAGIOH([]A\A]A^A_HD$t$EHHP Hƃ?HHHKH |5f.G u)HH@H@H@H@ fAWAVAUATUSHHLH.AH}D$ǤH}Lc軤H}Lc诤H} LcM蠤HLIIt/MtR}tLEHEHEHEHE LIWL{CHSH[]A\A]A^A_fDL$EHȃ?HHH tH t1Gu@HH@H@H@H@ F8F8GG(tAWAVAUATUSHL&oH^(I|$蟣I|$Lc蒣I|$Lc腣I|$ AxIcIHcLIH=t5HtCA<$tHD$dH3%(uH[Ht$vL_f.DSHH8HHGSdH%(HD$1HCHxHjwu&H辋HD$dH3%(uH[Ht$Kߏf.DSHH8HHGPSdH%(HD$1HCHxHjwu&H>HD$dH3%(uH[Ht$vK_f.DSHH8HHGȐSdH%(HD$1HCHxHjwu&H辊HD$dH3%(uH[Ht$Jߎf.DSHH HHGSdH%(HD$1HCHxHjwu&H>HD$dH3%(uH[Ht$vJ_f.DSHH HHGPSdH%(HD$1HCHxHjwu&H辉HD$dH3%(uH[Ht$Iߍf.DATIUHPSHGS(Il$I\$H9tfHHH9uIl$Ht[H]A\)f[]A\f.ATIUHPSHGSIl$I\$H9tfHHH9uIl$HtH轈[L]A\鱈SHHHF0H;F8HVHt*HPHHW HF0H{(HH@H[HBHt$HHG H~8SHt$HFHHPHVHH@HHF8HHF0HV@SHHHF0H;F8HVHt*HPHHW HF0H{(HH@H[HBHt$HHG H~8ÇHt$HFHHPHVHH@HHF8HHF0HV@ATUISHHdH%(H$1H=H|$ tH|$ HI\$ Il$H9uffDH؉H9HtPHs(HHH4$H|$ HVŠH$HxHjwtHt$GGH菉H9HuHD$ H|$I\$8HpXH|$H{HD$HxHjwHD$pHD$ cwHD$xcwHD$(bwHxHjwusH|$`HD$(jwōH61H71H|$xHD$ H@HT HD$xPcw膊H$dH3 %(ID$8u\HĐ[]A\HZF`Ht$KFHHH$HxHjwt Ht$$FH|$ *HHHD$HxHjwtHEf.@USHHHHH@@PSHSHEH} HC0SHCHEHH{ HCtHH@H==EuCG@HE((FSHHSHCSHC@SHC(HE0HC0E8C8tHHHS莃H覉Hfffff.LIz$@H?HtG t HHPHPDuH@f.f.@USHHH(H|$HT$dH%(HD$1#Ht$HHD$HxHjwuLHD$dH3%(HCHC HC(C0HPSHCxSk4uH([]@Ht$DHHD$HxHjwt Ht$CHЊSHHdH%(HD$1HGHxHjwu'H;HHjwu7HD$dH3%(u3H[ÐHt$CH;HHjwtfDHt$fCOf.DSHHdH%(HD$1HG8HxHjwu7HCHxHjwu6H;HHjwuFHD$dH3%(uBH[Ht$B@Ht$BH;HHjwtfDHt$B蟆f.DUSHHHGH)HHt*H11HH9uI,$HtHO~HD$dH3%(u H[]A\聂ATUISHoHH9tDH;Ht ~HH9uI,$Ht[H]A\}D[]A\AWfAVAUAATUISH1ۺ 1ZHH5H<A)SAgwAEDL$(t$8l$0L$ T$\$D$޿gw1SHID$L>8SHIɀ\$Lf(<SHI袀T$Lf(8SHI{L$ Lf(ɂIžRHTLDL$(l$0t$8DʃA9DCHILl LN|MA]Af(f(\A\YYXQf.z]YYXQf.f.w^f.vDJ=DʸA9bHH[]A\A]A^A_t$0LD$ HL$l$(T$D$'A]f(At$0LD$ l$(HL$T$D$Mf(t$8l$0LD$ HL$d$(T$D$ǂt$8LD$ l$0HL$d$(T$D$1f. AWfAVAU1ATUjSIIZH1H8 dE-$EALf(fTf.L$Dr$p)Sgw)T$ l$\$~H޿gw1SHI}$LL>SHI}L$f(L%H荀\$Dl$f(T$ HH9Af(fTf.Adf(\fT^f.vd$Dr$~~)Sgw)T$ l$\$)}H޿gw,1SHI}$LZ>SHI|d$f( fDHDH9%H8[]A\A]A^A_1fAWAV1AUATAUSI(HH81ۺ 5CEAeA8)Sl$,gwDL$)t$ A7l$(t$|$d$|޿gw~1SHI{fLZD$:~8SHI{fLZD$~<SHI{fLZD$(}8SHIw{fLZD$}IžRHP{L~DL$t$ l$,DʃA9DCHILl LN|MA]A((\A\YYXQ.zfYYXQ.(fZf.w^.pDJ3DʸA9\H8[]A\A]A^A_l$ LD$HL$t$T$(D$~A](Al$ LD$t$HL$T$(D$El$,LD$HL$t$ T$(D$d$B~l$,(t$ d$LD$HL$T$(D$ 1fAWAV1AUATIUSj(IH8H1ۺ y@-)@@(T.T$DrL$()Sgwd$,)\$l$ ,yH޿gw/{1SHI yfLL$(ZT{>SHIxT$fLZ){H{l$ D(\$d$,HH9A (TZf.ATffZ\ZTZ^f.vD$DrT$(~y)Sgwd$,)\$l$ xH޿gwz1SHIwD$LLz>SHIwT$(@HDH9H8[]A\A]A^A_1ÐAWAV1AUATAUSZHIE1H(H )SgwTwLgwWy1SHHD$0wLD$LL$DL;r>SHHD$wHL$LD$LrHHH@HHz8trCHzHwDII9tCNDK D)ʉ1)D9vۅHL$LD$DIDI9uH([]A\A]A^A_HHL$HT$rHT$ HL$HH@0H=@DQHL$HHL$:1Mqf.AWAV1AUATAUSZHIE1H(H )SgwuLgww1SHHD$uLD$LL$DLp>SHHD$TuHL$LD$L`pHHH@HHz8trCHyHkuDII9tCNDK D)ʉ1)D9vۅHL$LD$DIDI9uH([]A\A]A^A_HHL$HT$pHT$ HL$HH@0H=@DQHL$HHL$:1of.AWAV1AUATAUSZHIE1H(H )SgwsLgwu1SHHD$sDD$LL$DLn>SHHD$sL$LD$LnHHH@HHz8|rCHPwHsDII9tBFDC D)ʉ1)D9vۅL$DD$DIDI9uH([]A\A]A^A_fDHHL$HT$NoHT$ HL$HH@0H=@DTHL$HHL$=1mf.AWAV1AUATAUSZHIE1H(H )SgwDrLgwGt1SHHD$ rDD$LL$DL+m>SHHD$qL$LD$LmHHH@HHz8|rCHuHrDII9tBFDC D)ʉ1)D9vۅL$DD$DIDI9uH([]A\A]A^A_fDHHL$HT$mHT$ HL$HH@0H=@DTHL$HHL$=1=lf.AWAV1AUATAUSZHIE1H(H )SgwpLgwr1SHHD$ppDD$LL$DL{k>SHHD$DpL$LD$LQkHHH@HHz8|rCHsHXpDII9tDFDuC tD)ʉ1)D9vمL$DD$D IDI9uH([]A\A]A^A_@HHL$HT$kHT$ HL$HH@0H=@DTHL$HHL$=1jf.AWAV1AUATAUSZHIE1H(H )SgwnLgwp1SHHD$nDD$LL$DLi>SHHD$nL$LD$LiHHH@HHz8|rCH@rHnDII9tDFDuC tD)ʉ1)D9vمL$DD$D IDI9uH([]A\A]A^A_@HHL$HT$>jHT$ HL$HH@0H=@DTHL$HHL$=1hf.AWAV1AUATAUSZHIE1H(H )Sgw4mLgw7o1SHHD$mDD$LL$DLh>SHHD$lL$LD$LgHHH@HHz8|rCHpHlDII9tDFD5C 4D)ʉ1)D9vمL$DD$D IDI9uH([]A\A]A^A_@HHL$HT$hHT$ HL$HH@0H=@DTHL$HHL$=1-gf.AWAV1AUATAUSZHIE1H(H )SgwkLgwm1SHHD$`kDD$LL$DLkf>SHHD$4kL$LD$LAfHHH@HHz8|rCHnHHkDII9tDFD5C 4D)ʉ1)D9vمL$DD$D IDI9uH([]A\A]A^A_@HHL$HT$fHT$ HL$HH@0H=@DTHL$HHL$=1}ef.AUATUSHHHWLHL)HHHH H9HHHt$EmHULMIHt$Ml$HL)LH~HHuH}H9t:HLHLtLHHH9uLOH}L)HNl&HteLLeLmH]H[]A\A]ûTfDLHHH9,HH&AE1@f.AWAVHAUATIUSHHL7HIM)LHHHHH9HI kH{L3HIM)IMwM+7IEIEIELHHNIIEIEMuIML9t3LHDHH2tH1HHH9uIL)HHDH{L3IEI9LHfDHtDHBHBHHHHHqHBHrHAHqHBHrHAHHH9uIL+L)LsHL|)0M9t fDI}HtcIM9uL3MtLycKdH+L{HDHCH[]A\A]A^A_fDH*L9rAH(t)H_ HC HxH?*HptqVu%DLLH[]A\A]A^A_fD1HrfDHH1[]A\A]A^A_@H9>*@H9>*uAVAUAaSATUISH1H0dH%(HD$(1@AI9t/A8Eu)L@H9tD8uIEHEuH9t8HHHLYSMuI9Mu[HtVS|U@HYSftτt €EH\$(dH3%(H0[]A\A]A^L{L)1IHT$L QIIHHaAEAFIjwkLiHL$ MtgE1RH|$ vWHD$ N4 @TH|$ XWLHD$ H0HR IAM9tHL$ QyN4!LH|$ QH|$ HŋOxH|$ VH|$ H9aSA1f1@tpEtk@87uHHH1H9t[@tV@82tHHHHYSHu1HHjw~Ht$D$ D$ gHD@uH9uHYSHLL[VHjwAFM&CD&RLHHD$ HxHjwt Ht$HoUf.DAVAUIATUASHHHD.dH%(HD$11${8fD$E{8Fl+9D,$DmE{8Fl+9Dl$DmE{8Fl+9Dl$DmE{8mFl+9Dl$l+9HT$HAL@l$4Ht$dH34%(qH[]A\A]A^H8MHH@0H=@DID,$Dm{80HMHH@0H=@DIDl$Dm{8HLHH@0H=@DIDl$Dm{8HLHH@0H=@DIDl$m{8HbLHH@0H=@D@HЉAHAAHAAHA=AHA[Of.AWAVHAUATUSHH8HHt$(H@HHD$^H@HHD$)H@HHD$H@HHD$ LxMMoMtmMeMtNMt$Mt&fDIvHTI^LJHIuI\$LJHtII]LJHtII_LJHtIqHD$ HXHJHt H\$ HAHD$HXHfJHt H\$H HD$HXHCJHt H\$HHD$HXH JHt H\$HHD$(HXHIHt H\$(HmH8[]A\A]A^A_f.fATUHSHLHdH%(HD$1I9u 7HI9t'HHxHjwtHt$H I9u@LMtL\IHHHHtGt^H}xLehaH]pL9t-HCH{HEpL ,HHH]pI9uHD$dH3%(uH[]A\fHPMATUSH/HtEt[]A\H]0Le(L9t(HCH{HE0L HtHH]0L9uHEHtjHXHu kHHHPHSHHuHH]HCHEHEHCHE H;Lc HHLHMLeu[H]A\GHHHPHUHUHPHU AUATIUSHIHHu =P1bH}tHEHI9@Hр1I9}(=1Le0HE8]@E(fH}HEH@L9}HuJHEPLmX]`EHH]pHhH9tH{LL)H[H9uH[]A\A]DHEPLmX]`=q1Le0HE8]@hkwFbH}B1HEH@L9ÄNkwEH}tHEH@(H1@kwEH}1txHEHI9ÄkwqEH}tHEHnfDH)1\@GH1L9~fDH~1I9ÄtfH~1L9ÄFfDkwH~1H~1~1GKkwH~1H~1~1GrkwHX~1HU~1V~1qGkwH,~1H)~1*~1EGTUSHHHdH%(HD$1H9u5DHH9t'HCHxHjwtHt$HH9uHD$dH3%(uH[]Hf.fAWAVAUATUSHH(L{H?dH%(HD$1LH)HHHRH H9kHHHt$ KL{H;IHt$LH)Lt4HxHVPVPVPVPDL{H;L9HLDHt0BABABABAHBHAHBjwHHL9uLwLL)HMl M9Lt(IHHHjwtHt$YM9LuِH;HtBHL#LkIHD$dH3%(Lcu0H([]A\A]A^A_fHHH@Ml$FHH9v1HHIMt,LLLOBBHu1E1vH$HCH+HxHHjwtHt$tMHHUIDHGH;GtFHSHt1HxHVPVPVPVPCHCHHC[fkf.AWAVIAUATIUSH8dH4%(Ht$(1H9H$yHIH)MgHHHHD$IGL)HH9LL)HD$HH9HD$RH$H\$H9LDHt.HsH}ECECECECE%BHHI9uIGHt$H+t$HHM9LIwHtF@Ht0 HJHJHJHJHHHJH@jwHHI9uHt$H|$Iw~WHD$H,$I^Nd0HEHHHHCECECECEC EL9uHD$(dH3%({H8[]A\A]A^A_LLH)I9HtIHt0 HJHJHJHJHHHJH@jwHHI9uIIGHL)H~VHnH)ILnEHLHIAD$E AD$ E AD$ E AD$ E AD$ FL9uH|$ L$$InJ\3IAD$LHHIEAD$EAD$EAD$EAD$ECH9uI7HHI)IL)H9D$HD$I9ICIr"I9wMHD$1(HHHD$UEI7HI9HHHt0 HJHJHJHJHHHJH@jwHHI9uHLH)HHDHD$HL$$Ht8A$It$H{AD$CAD$CAD$CAD$C>IHM9uMoILM9tgMt;A$PAT$PAT$PAT$PAT$HPIT$H@jwHII9uILL)HLdII9u9fDHI9t'HCHxHjwtHt$'HI9uM/MtLH77H=H>f.DHHGHxu!Gt@ =HfDH1@:HHDAWAVIAUATIUSHHGHL$HLgH9t3HUHz}t<}EII9HE;Hx })eHx5}+;M}pIM'E<@}(1H[]A\A]A^A_D@1HJ8HM'M9LHEIH]A<$Hxuvf.}t;HEA<$Hx4}t:IM9M'tHEA<$Hxt@1H7HM'f.M}A4$H&ILpM7MM9H]t,HEA<$Hxuo}t%:t EHUA$Hz}t9uIM9M'tHEA<$Hxt@1H6HM'@1H6HM'M'/@1Hr6HM'A4$Ht3EM'H|$EE1L1HHP 3M'1H 6HM'f.AUATIUSHHIHdH%(HD$154HuH{(4ECECECELk Lc(C0HC8jwC1M9tHK8Hs LHC0HD$dH3%(u H[]A\A]6HH+HC8HxHjwt Ht$H迮H9HHzHjwtHt$}f.AUATUSHHHH|$@dH%(H$1`Ht$@H$NH$H$HDŽ$jwH$H$HDŽ$jwH$$$$$$$$$H$H$H$H$$$H$HDŽ$jwH$HHxH$HhH$H$L$HDŽ$jwH$H$HDŽ$jwH$$$$$$$$$H$H$H$H$$$H$HDŽ$jwH$%H$@L腰H$@H$pH$H$HDŽ$jwH$H$HDŽ$jwH$$$$$$$$$H$H$H$H$$$H$HDŽ$jwH$5H$H$萯H$H${H$H$HDŽ$jwH$H$HDŽ$jwH$$$$$$$$$H$ H$H$(H$$0$H$8HDŽ$8jwH$@H$H$蛮H$H$@膮H$@$pH$xLa StH$`H9$HH2H$hH$@HLH$p$uuH$@芪H$}H$pH$cH$VH$@IH$HHH'H$@蹩H$謩H$蟩H$蒩H$腩H$@xH$kHcL[H|$@QH3HHHHL$HL$HV0HHf.@AWAVIAUATIUSHIHXH$dH%(H$H13H|$@L&H$H$Ht$@H$H$$1L$Hi GtH$H9$ ^H$H$LH$H$0uuH$ H$H|$@H$ImIEH)HH9IEH)HH9H$LH$L H$H$HeImIHH9u4@HH9t'HHxHjwtH$HH9uڐH$Me/H$"DLH}IEI]H)HHSHl$8Ld$ HT$(HLHHD$0uI]H$H'H|$@LH$H|$@HuH|$@苦H$~H$LI]کH$HʩH$H$HbH$IE1H$$HH$HdH3%(HX[]A\A]A^A_H$H9$(DH$L0H|$@L#HHH9H</IH$H$Ht$@H$ШH$H$LhH$;H$.H|$@$H$MeImI9u<HI9t'HEHxHjwtH$H%I9uMeMtL'IMuIEIEE1H-HY HH-HLHHnH~HJHHJH$DH$7H|$@-H$ HX.H$ H$HH..)+H$ܣH$ϣH.H{H H|$@谣H$裣HH$菣H$肣HH-MtLZ&&H,!USHHHdH%(HD$1HFHGFGHFHFHWHGHH$豈HE HU(HC HE(HC(HS(HtHxPt%HE0HL$dH3 %(HC0HuH[]3)f.fH?HtGt HH@USHHHdH%(HD$1HHFHt`HO H$PH$HHH$H踇HE HC HCH=?tdHUH?tWHЀ;HCu+SHt$dH34%(HH[]f}t1HH=?u;HC?t}ufDHFHGFGHFHH$tfPH$HWHCHH$ކHE HC HE(HH$tPH$HS(HHC(H$gHE0HC01!( HtVHH9tM1@#ubLAL9#t>L9t+DLfEtA0LfD wtLAL9LuHH9u@LH9tHHy u두DfEtfDwufUSHHHOH9(/t5H $fDHHH9H|$%IH9Mt-MtHLHCID$HIH9uInIH9u7@HH9t'HHxHjwtHt$'HH9u@I.HtHM.Ll$MnE1`Ll$Ij-"&$H|$LL,Hd$LLHH #H$#H0$MtLsH#H$f.@AWAVIAUATIUSHHHHFxLHM|$XIT$8MHD$I\$ID=IML$PMl$MHHD$IGHH4H0I;W Ht$HIWH|$t0HL$H@HHZH(BBHZBHuHMIHI\$t A@HLHtG"HD$HHELmH]HH[]A\A]A^A_fDIWIGHHJ HBHt$HAH+IHIH9D$>HBH+HHHHmfH*Y  f.~L,HD$(I9LBLl$ "IHD$ IHH|$0H H H|$8HHL$(f"HL$(HHH|$ t+HtHHZBBHZB H(H9uHT$H|$0Ht$8IEIMHI}Iu IULo Iu HtLnMoIGIWIO IMl$MfHHT$LT$IOHHQIWMHQIGLIW HfHHZH(BBHZBHuMHeHHt$PHt$\HL,I1lHL$(A(HHGD$LGLl$(HD$ H|$ I H|$(HH H fDHtHHZBBHZB H(H9uHT$HL$ IEIEIE HHIUIM~HfHH H*X~HLHZ f.H=R1=R1tn=oR1t hkwHkw6tH+R1HHR1t PkwuhkwEhkwHDkwtkwHQ1kwHt Q1kwupkwE?DkwQ1HyQ1StQ1kwbukw>E.fATIUSH?HtAID$HI\$(HhH9vfDH;HH9wI<$[]A\zf.[]A\f.AVAUIATUSHdH%(HD$1~!F8~PV@HSIEPHL$dH3 %(LsH[]A\A]A^fDHH{H{HcH{LcH{ AIcJ HcHHH=8H@HPSHPHSHPHSHP HSHP(HS HP0IEP6HӿcLHSH@H$A|$8A$A|$8$_A$A|$8D$A$A|$8D$A$A|$8D$A$A|$8D$;A$A|$8D$A$HT$1HH߈D$SHډHHڃfE fCE ;fCEfCEfCEfC EfC AEAAA)Afnffo-] HHEI9uZjAfATt\HHPLrL;pwH~LHHHPD<HH=jwu\HEHI9HEtD8A$fuLHLHHxt3HD$8dH3%(uWHH[]A\A]A^A_f@LpB0HSuHHD$ 1SHD$(x SD$0JUHHJHBfAUATIUSHIHHHdH%(HD$81H;(tH8?t(1HL$8dH3 %(HH[]A\A]HHHHLHH9Q߀Wp$ըSfDHHfHHHLH[1H9+SAAx S2S@"H!=HH#fHH HHHHHHHLHHHL1H9+SAAx S2S@OH:=hHHZAiC-:)SH~sx S/SHHHHLH1H9+SAAx S2S@H<=HLHHHL1H;+A Ax S2SS@9YHHASHrx S2SH'HADsxmEA$fA$H1AH9HAx S@ǹ/SSht H/ySHqx S2SH_3f.HH)SHvq x S2SHf.HLHHHLHHH9HP1H8>@AAx S2SSlfEA$thDE9AEA$t {EA$uc[SKC1PHSUpHHD$ 2SHD$(x SD$0HHf.@USHHHXdH%(HD$H1HUHHEHt$H{HD$ HD$(HD$0HT$HD$D$8H$SHD$8SHSHCHC HC(HC0C8HSHCSHC@S8H(FSHHHHHSHf.AWAVAUATUSHXH/dH%(HD$H1HH]H9t;E<-w<+HHCH9Dc11AL$Ѐ vTu(H|$0HD$0SHD$80SHD$@@hwsHL$HdH3 %(UHX[]A\A]A^A_DE1H|$ A0HnH|$ HA+1ɄD$}H9$AA;fD19DA9HEAH9C4;AA9׉AEȃ00ADր DuA9vH|$ E@Et[D$A"T$4fDHCHH9DcE11AAD$< D||$uQD1jfDH|$ EEt1f.H|$ EtAEfDDH11E11sDH|$ FIHH|$0LP H|$0LwM? ILPH|$0AH9D@IFA1EE1IlfC4A9DEDA0Eރ0D< wlEDt\1A9u[DA9wQuMEAAHH9EuD:H9t#AL9sAADA9vHHjwu`H|$ 9EHE1AHHjw*Ht$L$L$D$EHt$ɯH H7H|$0HD$0SHHD$0HxHjwt Ht$聯H|$ H_f.DUSHHHHH@@PSHSHEH} HCHEHHC0SH{ HCtHH@H==EuWG@HE(HuH{HC(HE0HC0E8HSHCSHC@SC8HHXHH[]HHHSHH+HsH;fLIz@USH@HHuHxH@8PSHphwHH}HC0SHH{tHH@H==EuZG@HE HuH{HC HE(HC(E0C0E4HXSHCSHC8SC4HHXHH[]DH HH"HH-HuHHcܐLIz@HATIUSHt*HsLHkH{(HHHu[]A\fSHHhcHs@H{0fHsH[fSH HdH%(HD$1HtCptHD$dH3%(uaH [fDHsHf.@AWAVIAUATIUSIH8LodH%(HD$(1HGMHH$HHhLMmMt)IE Hx?*H tMmMuH9$}*HC HpOHIFIHHT$HD$t@HT$HD$HK(HS(H|$HS0HC0HL$HT$ID$8I|$811HP HD$(dH3%(H8[]A\A]A^A_f.H9}*#8HHII|$HS HC(HC0HHC @HtsHH9$HC HxHB ?*HptlHT$HT$H $HID$0H9>*@H{0H${HH$HH9>*u뙿f.@AWAVAAUATIUSHH(dH%(HD$1HL|$u5HC HxHjwHL0MHsLHk(LcHtDEpuHuHHEHEHE(LHEHE HE`H$HEhHE`HEhHD$`[HHLMe@HD$dH3%(uH([]A\A]A^A_@ATUISHH0HHdH%(HD$(1H1JpHHt PpH]HEHtCp-@HH@H@(H@C8HC@HCXHCHC HC8HC`HChHCHHCPCpHCxHǃHǃHǃHǃHǃHǃHǃH$HD$HD$>HT$H|$@@ HSHXHD$HT$HD$H$HH\$HD$Ht@HT$HD$HK`H|$HL$HS`HShHChHT$?HC`Ht PpI$I$HtCpt@H|$Ht$(dH34%(HH0[]A\fDH7@HsHHCHCHC(H|$HCHC HC`HD$HChHC`HChHD$|gHsHHCHCHC(H|$HCHC HC`HD$HChHC`HChHD$zHH|$HHHHH$Hf.AWAVAUATIUSIHLwMH.L}#fDH=|y=IFHt:IIv LHH^L9HF uLH)H=~IF1HuƄLu5H{ L1҅HHIHHH[]A\A]A^A_Lw1M9uLtL=HAWHGAVAUATIUSIHHH9 H L~ LqIoHLH $L9MLFLLD$,HH7HHAWAVAUATIUSH8LwdH%(HD$(1HGH4$MHD$L&HM|$؅x?LMvMtx&HL$(dH3 %(HE(u:H8[]A\A]A^A_HH$LD$HL$ H6YSLHD$ AHAWAVAUATIUSHIl$H?HH)IIMKT-I9ILHt$Il$I<$IHt$M~HH)LtHHHtBIl$I<$H9tYHLfDHt H HHHHH9uH_HH)HN|0@HAH9HuI,$HtHMM4$M|$Ml$H[]A\A]A^A_fDAHH9IHAE1ATUISHHPdH%(HD$H1HG0H0H9pAHGI;D$?HEHGHC(H)Hl$D$HD$D$ H$HH $HHL$(tAHY@HC(HLHD$8HD$@HHD$0H}(H}@H{0HGH;G;HtIL$HHtAHGHHGHCH=?t ;t1HHt$HdH34%(SHHP[]A\fA$fDID$HGA$ H@@HHSHHHEt PHl$EHD$HS(Hl$HHC(HT$̶HC(D$HD$D$ HH$cHD$(vIt$fLf.fAWAVAUATAUSHHHHOdH%(HD$81HGLl$ ImHH9fDHD$HHQ H HHHSHCHD$HD$HL$ HT$( H|$H;L{LLsLHCIvHx(Ht DO tbH HCHKIn(HH9tlHQ(HD$HHT$tBt ru#HT$1)HHD$HqHPDu[QHD$|fDHI}HHD$ HCHCHD$(HD$8dH3%(uHH[]A\A]A^A_HD$"f.DSHHPdH%(HD$H1HHD$ HAHHD$(t@HAHD$0HAH HD$8HBH $HHD$HJHR@HD$HL$H $HT$HHCH @HD$HCHD$ HT$Hs HC(HD$(HSHHC0t@HD$0H{HT$8H9HC8HS@t HH9C t3H|$H|$(Ht$HdH34%(HuVHP[fDHHCH{H;{8uHBHD$HBH HCHD$;H3 fATUASHHdH%(HD$1HD` @HSeHHHEt PLeUHCCH,$UH$HHStBH:HEHC(HC0HC EtaHt$dH34%(HuXH[]A\DH@HP AHD` @HSLAVAUIATUISH0dH%(HD$(1HHx-Lt$LOzHD$HD$Hx!LHD$Px LHD$H@(HD$HxLH"HCH@CHSHC賽HHHC t PLcSHSAEHRAEH$IUSH$HIUtBHH 9HC IE(IE0IE CHD$HxHjwHL$(dH3 %(LH0[]A\A]A^+H\$HD${LzH\$sLbHl$HmH9t)@I$3HP HH9uHl$Hm(Hl$HxLHHCH@CHPSHCvfDHL踕0[H^DH HHHD$HxHjwtH(HHDAVAUATIHHUSH_HIHHBI|$HIT$I$H)HL4I,I9s"LfvHHH9wMt$(IA?[HIT$ID$ HEID$HHE]IT$ID$8HJIL$@ID$0A\A]A^HL9vI>IL9w5HHeI<$I$ID$HHfDUfHAVAUATSHH I1HIHDž dH%(HE1HDž()0)@)P)`bHp1HDžpHDžxHEHEHEHEHEHEHEHEH HL0H}HuHMHULEL8H0H}H8HuLEL@H@HMLELHHHHULELPHPLELXHXLEL`H`LELhHhHpLEHpHxH H(H(HxH H;LeHpHE@SEHPHH;HDž(HDž0LHH H EHDžP@SƅHDžHDžHDžHDž\Hƅ8ƅADžXP H0H9(BPI8H(H0A@IPSI@ IpIpI@(I@0YH)IxQHI@@I@8 >EHOHHʃHD)II@IIAHAPHtfDHATIIpuLA@LIHHDžHIt2WZHHtG+HHHtPHIVxLIFxH$2Hp蘷HEdH3%(He[A\A]A^]H)IxQHI@@I@8>EHOHHʃHD)II@IIAHAPHfHATIIpufDLHH jLL!XZf.HPDHRHHHpzHH fHnf.@HGHtgHVHHWHFHVHGHWHFHV HG HW HF HWHGHPHFHVHPHG(HV(HW(HF(fHFHtHGHVHWHV HW HWHPHFHFHFHF DHFHWHVHW HV HVHPHGHGHGHG qf.AWAVIAUATAUSAHH$D$ dH%(H$1>H0Ƅ$xH|$0H 0HDŽ$Pcw1HDŽ$pƄ$yHCHDŽ$HDŽ$HDŽ$HDŽ$H\$0HL0HD$8H{AH-j01HEHl$@H|@H[0HL%,0H M0H$ID$HL0HD$0XbwHDŽ$bwHD$@bwHD$HjwHD$PHD$XHD$`HD$hHD$pHD$xHD$0Ht$HHD$HbwDŽ$HDŽ$jwHxhfIH|$HD$0HT$H|$ HphMH|$ H|$A=EtA`=Ep=EHEHT$@HRH|@HD$0AHxHt$ H|$0H$$ADDl$ HD$0XbwHDŽ$bwHD$@bwHxHD$HbwHjwH$HD$HjwID$H 0H$HL0HEH 0Hl$@HL@HCH\$0H[0H\0HDŽ$PcwH$dH3 %(Du&Hĸ[]A\A]A^A_DHt$ VZ\9Ht$HT$L\$ hH|$dH3<%(u@H []A\HT$ $HET$ H@0H=@DtHЋT$ f.SH@HdH%(HD$81-<1w!$hS@HAH9t y]1H\$8dH3%(H@[ÐH HfH HfHAH9tA<=<.tu<:uH HDHyH9H>tybzH HlHHTH H<H@ S1S3HHD$ SHD$(x SD$0;H S1"3HHD$ SHD$(x SD$05萹HH葫H艾fSHu H?HH [@H@HP Hƒ?HHH 4[f.EAVAUATUHSu@@9&HHH?HH \9~[]A\A]A^fD@DID9Af.IރHP Hƒ?HLHH DA9}f.DF"AVUSfEtF1AHH=t)fDBtILI?HHJ H=uH^0Hn(H9tdH)Ht\E1ADFD]1fDHH=t)fDBuIMI?HIN 4H=uIL9u~ tHHWHWHW[]A^ATUHSHHLf0L+f(HHFHGHFHGHFHGF G F!G!F"HG(HG0HG8fG"LHub1IHC(HC0Lc8LE0H}(I9t4HHfDH2tf1HHI9uHI)IIDHC0[]A\Hx L蛻贺@AUATUSHHdH%(HD$x1#LLFH~HNLL$LD$H|$ HL$(LL$0LD$8H|$@HL$H H|$08HHD$0HEHD$8HEHD$@HE HD$HEHESHE(裚HHHE0t PLeUHCCH,$UH$HHStBHHE0HC HC(HC0ELsH>u#H~uH~uH~uH~(H9~0TLd$0LXHxLHwEHES裙HHHEPt PLeUHCCH,$UH$HHStBHHEPHC(HC0HC E#H|$XHt Ht$xdH34%(HHĈ[]A\A]~"fL^0Hn(I9tgI)It_1fDDL}E1DIIt,fF BuMDII?IIN l0IuHL9u~ tfvfoL$0ffD$@)L$0)D$@8hHHD$0HEHD$8HEHD$@HE HD$HEHEPSHE(UXHxLHEHES#1AHH=fH$H|$PH|$#HH$NH$H$IHt$`H|$Pzà H跢HH|$Hb{轜H@DAWAVAUATUSHHdH%(H$1HH5Hxx*L/H$8AHHDŽ$HDŽ$H$8H$@H$`AUHDŽ$Ƅ$Ƅ$Ƅ$HDŽ$HHDŽ$PDŽ$`HDŽ$hHDŽ$H$pH$xHDŽ$HDŽ$HDŽ$ݢL+AE~HƢL3H|$ HMv蒲Ht$ Ht&H}H\$ HtCpHEAHX`Ll$0HD$8HD$@Ll$HLt$PD$XD$YDAD$ZDD$[AH$HD$\D$]AD$aD$^AHD$hD$_AHD$pD$`HHD$xHDŽ$H$H$HDŽ$SHDŽ$HDŽ$H$H$XHDŽ$L$H$HVHtGHBHuHH HJHHHHuHFHHPH@HVHVHF H$H|$0H{H$H$8Hx(a;HD$hDd$^HD$D$`D$D$Yu HD$HH9D$0HD$Y|$_L0H\$8HD$0Ll$PHD$HC0IH|$I2IHt$0LPAt}HD$H;D$0tDd$^|$AHD$0Ht$0HCHEHxxHPD$aRHD$0H;D$PDd$^tHHt$0LHD$0IPuHD$E1H@H@H$ NH$dH3%(DHĸ[]A\A]A^A_AD$ZD$[16MHEHt$0HxxHPA|$WDt$aEHHD$8HPHHT$P@HPBf.HD$0Ht$0HCHEHxxHP|HD$0H;D$PDd$^HHt$0LHD$0IPuHsH贩HCHCHC(H|$8HCHC HC`HD$0HChHC`HChHD$8HPtDMf.Dt$aEHCI9$HHCHD$0Dd$^HEHt$0HxxHPtHt$H|$LANfDE1|$t(HCI9HHCHD$0Dd$^HEHt$0HxxHPtHt$H|$LMf8膜HP(H@H@H@HP(HP0H@ HD$ HD$ H$HH|$ HT$ H$H2LH$HHHT$8AHJH HL$PBHJH HH|$ H$JHޛf.@AWAVIAUATUSH(LgLdH%(HD$1LL)HHH"HT-H9(HHHt$PMfMIHt$MoLL)LtHHHVHjwHPM9LLfDHtHHrHHjwHqHHL9uIXLH)HMl @I9It0HIHzHjwtHt$SI9Iuf.I>HtSLM>MnHD$dH3%(Inu$H([]A\A]A^A_fDL\HH9HHAE1f.@SH@dH%(HD$81wHD$8dH3%(u9H@[Dp SH6?8 S@'SHϕH赖H譆H襙DAUATUSHHLEH?LH)HHHH9HHHt$9LEH}LhHt$ILH)LtfL9t7HLfH2tf1HHI9uHGI)IOl Ht螑LLeLmH]H[]A\A]@`HPHHJAE1cfH9t[ATUHSH1H)HDHIHHt'HHHHIjwu-[H]A\DEAD$DjwHAD$I$ADf.AVAUIATUAaSSHHH0dH%(HD$(1H9@1f.EE@D8u5HGIL9HEEHD8HtfHHHLYSMuHLjHT$/LhHD$0^_ME1VDH|$ 螗HD$ N4 @H|$ 耗LHD$ H0HR IAM9t{HD$ PyN4 LHDE?I96HYSf9@t €EH\$(dH3%(H0[]A\A]A^H|$ 臑LD$ HAHxH|$ 轖LD$ I9عaSA1f.1@|EtwA80u*IPfDHH9H1ta@t\H@8rtfHHHHYSHu1IxHjw$Ht$D$ ND$ LD@uH9uHYSLy|HHD$ HxHjwt Ht$mNHUDAVAUIATUISH@H7dH%(HD$81L91HHVHft7H1H H|$8dH3<%(H@[]A\A]A^I$H0Du?I$(HI$Uw$SfD@1AHLL=w1VfDp SH?8 S@'SH'H끐 vfD1I9Aw@ǹ'S SRI$1A~'S S߃A<@^RI$Ѓ)^I$@ fD fD fD1I9A@ǹ'S SQHLALM4$ljI$1A'SH SL)H@QG 6fD1I9A@ǹ'S SMQHLALM4$ljGI$1A'S SL)H@PH纰 SHHD$ 'SHD$(8 SD$0UH~HfAWAVIAUATIUSHHHdH%(H$1HHL$PHt$FMuIFH9IEHD$\LML`HL$0Ht$HLHD$0HD$8L|$@uHt$HLf5HD$H90 L莼~;HD$H|$ A LHHD$ u H|$;H|$LH_H IƅHEHx HHEHpEƹ1H袏DHUHBHt:rMuxH跐HEH@Hp1ɺHHE@H$dH3%(HHĘ[]A\A]A^A_@HD$HPHT$D0HEPx H;HEHpEƹ1HHEMu@HD$H9IEjH|$P*SH|$PHD$p*SHD$x SDŽ$?H EH H|$P6|H}HHjwt Ht$0+HHAWAVIAUAT1USIHHAH S"SdH%(H$1I;6@}MA$HD$ D$@D$DD$L$1I9fT$HIHt$ HLHD$ Z iID$H9t$IHt$ HLHD$ ,I1H9A@ǹ"S SE1E1LIHLLHD$ IH9T kE 9$ոSf.IHt$0HLHD$0I D$u#L|$0M>IHH9IHD$0ZHLLJtփ }HD$ AHPID(IH9HD$ ^HLLƒ%E|$tu H$dH3%(HĘ[]A\A]A^A_AAfLHLbHD$@HT$HD$L,Dl$@ATIAHPID(8E<$LDH?HH tiHLLHL$ HL$$(SfDIHAI1A8<$A9|)AfHLH?HH T9}E1pLHLBHD$@HT$HD$L <$HD$ ILDH?HփHE1H tIHHIHȃ?HHH T1AA@ǹ"SESI<$fAŃ6H‰HH?HH | uE1fDI$T$AHP Hƃ?HT$HH |5DE1-1ҾnSL4IHJIfA#TE!fD$Hf E"Ht$ H9<$H%IHȃ?HIL LHBH9HIu $HT$0LL1fA=@ǹ"S[SfD$PTH|$E!^D$PE1f E"=@I$AAHP Hƒ?I$HLHH DIHPIH0R Hƒ?MHE1IL DH $ALH]@ED9D$ I$AAHP Hƃ?HHH D5D9|$}E1@1D8l$@A "SES@E1GD$T$@ALHA HE0H;E8HT$PtfHHE0PHD$ D$IfDAf.I$2HP Hƒ?HLHH DIHPHD$ IH9u\EAfDI$DAHP Hƒ?HHH DA uE1HE0H;E8HT$HtfHE1HE0H|$P SZH|$PHD$p"SHD$x8 SDŽ$8ÁHH|$P SH|$PHD$p"SHD$x8 SDŽ$`}H|$P SH|$PHD$p"SHD$x8 SDŽ$=uH}(Ht$P~H}(Ht$HH|$PsHH|$PESTH|$PHD$p"SHD$x8 SDŽ$轀ȂAWAVIAUATIUHnSLHIHHL2HdH%(H$1Z/w$ňSDM7H|$ HCCHCHD$ HC HC(HC0H$dH3 %(H7Hĸ[]A\A]A^A_@A!踄H@HSkdHHHEt PLeUHCCHl$ UHT$ HHStBH|$ HEHC(HC0HC ELw=fA!JH@HS2fLLLHf.H1ҾtSA蔃HfD` @HPSfH1ҾtSATHfD` @HSfH1ҾtSAHfD` @HSYfH1ҾtSAAԂHfD` @HSfE H|$ LLLHt$ HDHHD$ HxHjwmHt$;^fDMA A|$8El$C/H@HPSaHHHEt PLeUHCCLIL90 H<~;ILt$ HA LLHD$ " A;EHLLHIH HLH AA HH1HT$`Lf$LHHD$`HD$hHD$pHD$xƄ$Ƅ$HDŽ$HDŽ$HDŽ$A Ht$`HHH$HSyIfA M7D$ MM9t/LLHU HLLLd$jLbHD$0HHXZT$ Ht$ 'HD$ HxHjwL8@H|$ vS H|$ 1 S-S{H|$ SH|$ @ S-Ss{1M9'AA SS*S@|ILhM/tM/HBf.H|$H蓺~HŋD$EHESE H|$H[~HŋD$EHESE LA bwI$H@0H=@D LA@HD$ IA T$ H~T$ H@HPSP ]HHHEt PLeUHC?CHl$ UHT$ HHStBLYIE1HPIA(ft fADUAĿg}HD` fDp@HSWC}H@ @HS8f}HDh @ @@@HSD|HDh @HS|T$ H@HSP yH|$ iH|HGH`Lt$ TH|$ *SH|$ HD$@*SHD$H SD$P\wH$Ht u?H#HD$ HxHjwxL@5kHD$ HxHjwUHt$5FfDAUATIUSHHIHhdH%(HD$X1HFH$HD$HD$H{tdM9,$t^StWH}HLLūtAD$uYH|$ LLHvHt$ HMH|$HNH|$8DHL$XdH3 %(HuHh[]A\A]fH{HHHP(xHH{(=NH{tHzf.fAWAVAAUATIUSHHIHHHGGHGHdH%(HD$81H$Lt$ID$ ID$(ID$0H9]uffDLH9]tRHHLHIH|$taLHMH|$(HtDGuHPLH9]uHT$8dH3%(Lu0HH[]A\A]A^A_fDH|$(MH|$H$=H$0LH>M9>tH<$LL!@h H$SHHD$H|$HDŽ$%SHDŽ$ SDŽ$tH<$LL?1@ApA S%SSH\$pL$fI8I0HH$H$t I0@ 0H$tiHH$HCH$HHCt@ H$CHPSHC IHHHC(t PLcSEHE?EH$pSH$pHHUtBH$pVHC(HE(HE0HE CcH$H\$pL$L@H$ SH\$pL$H$v S%Shd1M9>tH<$LL=1@AA S%SSH\$pL$dI@Ht$0H\$pL$HH\$pL$衾H0H$pH@HH$xt H$p@I0ݞH$xH$pHH$H$t H$p@ 0H$:gHH$HCH$HHCt@ H$CHPSHC FHHHC(t PLcSEHE?EH$0SH$0HHUtBH$0HC(HE(HE0HE C9 H$H\$pL$wH$xPf.I|$(v9I|$H{(c9H{HD$0HxHjwH$dH3 %(H3 H[]A\A]A^A_IEHHD$IEI0LLM)IM HD$01Hl$Ll$ HLt$(ML@HMfHIL9I<$L;ouLHjcuH$p@SH\$pL$H$pHDŽ$%SHDŽ$ SDŽ$_fD$ D$D$(H\$pD$L$f.IH<$Ht$@LHD$@7:xD$ D$H\$pD$(D$L$D$ {fD1M9>tH<$LL91@AA S%SSH\$pL$`I0HHH)HH HD$0H,$E1HLxIIHI9 H;L9uLLauA H,$Ls H\$pL$jcHDp @HPS CHHHCt PLcSEHE?EH$SH$HHUtBH$uHCHE(HE0HE CH\$pL$xD$ sfDHl$Ll$ Lt$(Ht$0H|$PH\$pL$\Ht$PH|$`v\HD$I0HD$hHH;AHH|$`tHL$`jwHHL$HD$`jwHHHHHH$HjwHD$HD$PHxHjwD$Ht$H$0H\$pL$$返H$0H\$pL$HH4H$X4H$HD$Ht$H$p$hL$H$pL3H$s4H$fD|$(|$:|$D$ A D$pEHD$xHE$EH$HDŽ$HEH$HE H$HDŽ$HE(H$HE0L@t$pH$膕H$H3H$3H$̻H$L$pHH$pt PD$ ($y$x_IH$pHIGt P$xAG$yAGISAG?HHIG t PMwAWƄ$HDŽ$DŽ$L$0AWH$0HH$tBH$0ĺIG H$HDŽ$HDŽ$AG|H$H|1H$/2H$bH$pUt$pH$ΓH$H2H$1H$H$t$pHT$xHH$pt HD$ 1H?@$yH$@A+A( S#Sp S$x[0^IH$pHIGt P$xAG$yAGH$AGIPSIG =HHIG(t PMwAWƄ$HDŽ$DŽ$L$0AWH$0HH$tBH$0ŸIG(@H$K"fDt$pH$0H$0Hn0H$X10H$HdH$L$pHH$pt P($x\IH$pHIGt P$xAGISAG1A_A S%S*SH\$pL$@zWkDLwH\$pL$YZHDp @HSLLLQHt$13H$H$#SH\$pL$KH$ S%SUHoVHHoH$H$xH\$pL$CI|$(,I|$H{(,H{۴HD$0HxHjwtLaHIYH$H\$pL$?HHhH$p胴H$pH\$pL$E_H"HHD$`HxHjwt H$HD$PHxHjwt H$H\$pL$faH$H\$pL$tEH|$eEHH$KEfAVAUATUHSHDoD7dH%(H$1HPLfHD$HBHD$HBHD$ HBHD$(>WHHD$HCHD$HCHD$ HC HD$(Ds0Dk4Lc8C@HC(CHPS?7HHHCHt PLcCC0D$P;C4 HD$X?D$`H$DSH$HHT$htBH色HCHHD$xHDŽ$HD$pCHt$PHK)H|$x*H|$h7H$dH3%(HĐ[]A\A]A^{VHHD$HCHD$HCHD$ HC HD$(Ds0Dk4Lc8C@HC(CHSHC8D$`H$HD$XDLx;Sf.@AVAUATUHSHDoD7dH%(H$1HPLfHD$HBHD$HBHD$ HBHD$(>UHHD$HCHD$HCHD$ HC HD$(Ds0Dk4Lc8C@HC(CHмS5HHHCHt PLcCC0D$P;C4 HD$X?D$`H$DSH$HHT$htBHYHCHHD$xHDŽ$HD$pCHt$PH'H|$x'H|$hH$dH3%(HĐ[]A\A]A^KTHHD$HCHD$HCHD$ HC HD$(Ds0Dk4Lc8C@HC(CHSHC8D$`H$HD$XDLH ;Pf.@AVAUIATUSHHpdH%(HD$h1S@HSHN3HHHCt PLsSD$0HD$8D$@H\$SHT$HHT$HtBLd$L襮HCHD$XHD$`HD$PCWHt$0HZ&H|$X &H|$HVA}HEHMAuA}HD$fHt P|$8t$HL$ D$({RHHD$HHCt PD$CD$CHD$ HC D$(CHSC(1HHHC0t PLkCCD$0;C9HD$8?D$@H$@SH$HHT$HtBHIHC0HD$XHD$`HD$PCHt$0H$H|$X$H|$HLHD$hdH3%(Hp[]A\A]A^ÐHt P|$8t$HL$ D$(QHHD$HHCt PD$CD$CHD$ HC D$(CHSC(HC D$@H$HD$8DL L MHLHPAWAVAUATUSHHh DodH%(HD$X1D78LfDzL$)PL$HfDxDpDhL` @(@HSH/HHHC0t PLcCCD$ ;CHD$(?D$0H\$fDSHT$HHT$8tBH|$HC0HD$HHD$PHD$@CHt$ H!H|$Hq"H|$8觪HD$XdH3%(Hh[]A\A]A^A_@NL$HfDxDpDhL` @(@HнSHHC D$0H\$HD$(@LKKf.@AWAVAUATUSHHXDoD7dH%(HD$H1Lf8D:,NHDxDpDhL` @(@HS-HHHC0t PLcCCD$;CHD$?D$ H$SH$HHT$(tBHHC0HD$8HD$@HD$0CHt$HH|$8 H|$(ʨHD$HdH3%(uwHX[]A\A]A^A_MHDxDpDhL` @(@HPSfHC D$ H$HD$DL(XIf.@AWAVAUATUSHHXDoD7dH%(HD$H1Lf8D:\LHDxDpDhL` @(@HS,HHHC0t PLcCCD$;CHD$?D$ H$SH$HHT$(tBHIHC0HD$8HD$@HD$0CHt$HH|$8H|$(HD$HdH3%(uwHX[]A\A]A^A_CKHDxDpDhL` @(@HоSfHC D$ H$HD$DLXXGf.@AVAUATUHSHPDoD7dH%(HD$H1Lf8JHDpDhL` @(@HS<*HHHC0t PLcCCD$;CHD$?D$ H$fSH$HHT$(tBH艥HC0HD$8HD$@HD$0CHt$HNH|$8H|$(:HD$HdH3%(uoHP[]A\A]A^DIHDpDhL` @(@HPSDHC D$ H$HD$DL`FFfDAVAUATUHSHpDoD7dH%(HD$h18LfD$1HDt$HHD$Dl$Ld$ D$(HCHD$Lc C(CHSHCh(HHHC0t PLcCCD$0;CHD$8?D$@H$fDSH$HHT$HtBH豣HC0HD$XHD$`HD$PCHt$0HvH|$X,H|$HbHD$hdH3%(Hp[]A\A]A^ÐGDt$HHD$Dl$Ld$ D$(HCHD$Lc C(CHпSHCHC D$@H$HD$8DL@NDf.@AWAVAUATUSHHXDoD7dH%(HD$H1Lf8D:FHDxDpDhL` @(@HS&HHHC0t PLcCCD$;CHD$?D$ H$SH$HHT$(tBHɡHC0HD$8HD$@HD$0CHt$HH|$8DH|$(zHD$HdH3%(uwHX[]A\A]A^A_EHDxDpDhL` @(@HPSfHC D$ H$HD$DLX~Bf.@AWAVAUATIUSHH(LnXL~H^IEO4IJ0I;U LIUHU81I$HrhHRpH9tHRHH9uHUhIL$HHHHHEhIT$HUpIL$ HI\$(HIT$HUhHUpHUHH4:~:fH H(H(HHHJHHJHJHHJHHJHH9uH(L[]A\A]A^A_fDIUIEHHJ HBHt"HAH+HHHI90HBH+HHHH,fH*Y   f.DH,L9(LCL<$CIH$I}HH|$H H4H|$HHt$_CHL$HHH<$t-DHtHHZBBHZB H(H9uH|$H\$IIMwIOI_ IL IW HtLzM}HUIEMuIM H4H<f.HIMMJ0HQIUHQIEIU HDHHZH(BBHZBIuX\HH,H1IL4$(1BH<$HD$#BK HH HtHHZBBHZB H(H9uH $H|$IHHLwHOHGHG I}H$(AgHfHH H*XHHLB:HAH|$0:HxAHF81L@hH@pI9tDH@HI9uH9Ot-u!HG HW(HHf.fDLFXLI@IH*HHH@LHHI@MHLHIHMH I9rM;P sMPLPAWAVAUATE1USIHHLv8IFpIVhH9tH@IH9uM+l$H]XL{(tT@IFhHpxH;t LWIFhHHHIHJHHHHS(LxHHS(HBHC(uH]XHEI $HUH@H0H(H(HrHpHrp@rprHpHrp@rH9uHCHS'@HPH@HpHHCHsHpHSHs H9rH;K sHKIT$(HHID$ HHH[]A\A]A^A_AUATUSHHHXLg L.dH%(HD$H1t3HHPH\$HdH3%(HX[]A\A]fH|$fH}HHPtUHD$(HT$ HLHShHCpHI$PH|$HވD$L+D$xfHT$(HL$ HSpHKh1HHS8HrhHRpH9t@HRHH9uH9L$Ht$0H|$8HH I$HLPL+HS81HrhHRpH9tDHRHH9uH9L$HsXLD$HVHN(DHJHRHzH HVH~HzHNH~ L9wL;F sLFLBdDHsXLD$HVHN(DHJHRHzH HVH~HzHNH~ I9rL;F sLFLB:AWAVAUATUSHHHHDgHO dH%(HD$81Lo(L6HHVHEtUH~oL)H9~m}IEHLPAHL$8dH3 %(DLHH[]A\A]A^A_H~RL)H9~PDeEtfDZL}HH}HHPE1 LHHH}H}D{1HHPHD$HT$HL3LHShHCpHIEPAYHH!D{1H}HHPAL3H}HHPAHD$HT$HLHShHCpHIEPAHHLrLH)H9@LH)H9*@HD$HT$HHHShHCpHHT$HD$HL3HHShHCp1HfL3HH1HHD{1-7D{1H!:AWAVAUATUSHHHHDgLo dH%(HD$81Et^L6HD~1HP2L3E1D{1HL$8dH3 %(DHH[]A\A]A^A_f.HL>}H}Ds1HHPHT$HD$HShHCpH0IEHLPAHC81HHhH@pH9tDH@HH9uH9T$HKXH<$HAHQ)fDHPH@HpHHAHqHpHQHq H9rH;y sHyHxDH}HHPAHD$HT$HL;LHShHCpHIEPAHH@HHPAsIEL3HLPA[HHML;Ds1AHD$HT$HCpHSh1HHC8HHhH@pH9t@H@HH9uH9T$tlHD$ HT$(HHIEHLPAHH1HHDs1fHKXH<$HAHQ)fDHPH@HpHHAHqHpHQHq H9wH;y sHyHxA3 Ds1H6D{1H6f.fATUIS HH`dH%(HD$X16H@@HHS:HHHCt PH$SH$D$ HD$(D$0HHT$JHT$HHT$8tBH|$臑H$HHD$HHD$PHHD$@ Ht$ HC H|$H H|$8?A|$HEH$;Ht P 5HH$HHCt PCHPS%HHHCt PLcSD$ HD$(?D$0H\$SHT$HHT$8tBH|$HCHD$HHD$PHD$@CHt$ HDH|$HH|$80H(HD$XdH3%(H`[]A\HD$8if.Ht P G4HH$HHCt PCHSf.LxB1HHH4AUATIUS HAHhdH%(HD$X13H@@HHSeHHHCt PH$SH$D$ HD$(D$0HHT$JHT$HHT$8tBH|$貎H$HHD$HHD$PHHD$@KHt$ HnH|$H4H|$8jA}HEHD$FHt P(Dd$2HHD$HHCt PD$CHSCCHHHC t PLcSD$ HD$(?D$0H$SH$HHT$8tBH衍HC HD$HHD$PHD$@CHt$ HfH|$HH|$8RH|$HHD$XdH3%(Hh[]A\A]fHD$8VfHt P(Dd$b1HHD$HHCt PD$CHSCDL86.HH|$蕌H1f.AWAVAAUATIUSHDwdH%(H$1Ht$AD'0EDDA},0DxD`HDpH@ @HS5HHHE(tXLeUD$HD$D$ H$UH$HHT$(tBH$H舋HE(HD$8HD$@HD$0EJ/Dx @HHPSvHHHEt PLeUD$PHD$X?D$`H$UH$HHT$htBH̊HEHD$xHDŽ$HD$pE{Lt$PHt$Ly$HPH$P$HPHH$t JHP H$HP(HH$t JH@0Hl$L$HLH$$HPH$P$HPHH$t JHP H$HP(HH$t JH@0H|$HH$H{(?H{vI|$(,I|$bI~(I~PH}(H}>AEuHt$DLH$dH3%(H[]A\A]A^A_Dc-DxD`HDpH@ @HS HHHE(tXLeUD$HD$D$ H$UH$HHT$(tBH$H\HE(HD$8HD$@HD$0Et2,LxLL)HH|$8H|$(ևH^,f.@AWAVIAUATIUSHdH%(H$1HGHLaL A+D` @HHS HHHCt PL{S$HD$D$H$SH$HHT$tBH$HHCHD$(HD$0HD$ CX+D` @HHS HHHCt PL{SD$@HD$HD$PH$SH$HHT$XtBH*HCHD$hHD$pHD$`CH|$@L$HPH$P$HPHH$t JHP H$HP(HH$t JH@0L$HHLH$[$HPH$P$HPHH$t JHP H$HP(HH$t JH@0HLH$H}(H}I(I΄H|$hH|$X躄H{(qH{訄DLLH$dH3%(uDH[]A\A]A^A_Du%L8L(G%HH|$(H|$'H(f.DSH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@HhܺS H蔜v SVSH-$H%H H(SH@dH%(HD$81Bt>Hz?Ht:u"HzHD$8dH3%(uBH@[@HܺS Hv SSSH#Hs$HkHc'SH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@H(ܺS HTv SNSH"H#HH&AUATIUSHHHXdH%(H$H1BHH9EPtYH{?t;u:HLH$HdH3%(}HX[]A\A]f.HLUHEHu@LM8HD$xHDŽ$HDŽ$HD$PHEIM)HD$XHE HD$`HE(HD$hE0D$pE1D$qE2fD$rLH`1II9HD$xH$L$t2LIMtfAHIH9uIL)HHDA|$El$Ht$PH$HkE$$H$hpD$D$H$Ƅ$$HxH$Hfh$EP$ETH$HEX$EHESE`gHHHEht PLeEEPD$;ETJHD$?D$ H,$DUH$HHT$(tBHHEhHD$8HD$@HD$0E+Ht$HvH|$8,H|$(bH$HtH|$xHc}YH$#gpD$0D$4H$8Ƅ$@i#HxH$Hf$0EP$4ETH$8HEX$@EHEPSE`HHHEht PLeEEPD$;ETHD$?D$ H,$@UH$HHT$(tBH1~HEhHD$8HD$@HD$0EHt$HH|$8H|$(}H$H||@Hx}L+"Hu@LM8fDHEXD$ H,$HD$DHEXD$ H,$HD$DL@XL0 H.HH;H H9H`H$HtNH|$xHt?H!H/H$HuAUATIUSHHHXdH%(H$H1HH9EPtYH{?t;u:HLH$HdH3%(}HX[]A\A]f.HLHEHu@LM8HD$xHDŽ$HDŽ$HD$PHEIM)HD$XHE HD$`HE(HD$hE0D$pE1D$qE2fD$rLH`1II9HD$xH$L$t2LIMtfAHIH9uIL)HHDA|$El$Ht$PH$HkE$$H$TcpD$D$H$Ƅ$HxH$Hc$EP$ETH$HEX$EHESE`HHHEht PLeEEPD$;ETJHD$?D$ H,$DUH$HHT$(tBHazHEhHD$8HD$@HD$0E+Ht$H&H|$8H|$(zH$Ht@H|$xHc-YH$apD$0D$4H$8Ƅ$@HxH$Ha$0EP$4ETH$8HEX$@EHEлSE`HHHEht PLeEEPD$;ETHD$?D$ H,$@UH$HHT$(tBHxHEhHD$8HD$@HD$0EHt$HH|$8\H|$(xH$H||@Hx}LHu@LM8fDHEXD$ H,$HD$DHEXD$ H,$HD$DLXLH.HH;H H9HH$HtH|$xHtH7HH$HuATUHSIHH0dH%(HD$(1HH9E0tAH{?HLt;u$HD$(dH3%(uJH0[]A\fDڐHEHHLH$HEHD$HE HD$HE(HD$?xATUHSIHH0dH%(HD$(1HH9E0tAH{?HLt;u$HD$(dH3%(uJH0[]A\fD#ڐHEHHLH$HEHD$HE HD$HE(HD$SH@dH%(HD$81Bt>Hz?Ht:u"H:HD$8dH3%(uBH@[@HܺS H贎v SMSHMH3H+H#Hz?HHt:t &fDf.SH@dH%(HD$81Bt>Hz?Ht:u"HjHD$8dH3%(uBH@[@HܺS Hv SKSH}HcH[HSSH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@HܺS HDv SISHHHHHz?HHt:t fD;f.ATUHSIHHdH%(HD$1 HH9EtAH{?HLt;u$HD$dH3%(u-H[]A\fD3ڐE HHL$|DATUHSIHHdH%(HD$1zHH9EtAH{?HLt;u$WHD$dH3%(u1H[]A\fDڐE HT$HLD$aATUHSIHHdH%(HD$1HH9EtAH{?HLt;u$HD$dH3%(u1H[]A\fDڐE HT$HLD$Hz?HHt:t fD[f.Hz?HHt:t fD+f.SH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@H8ܺS Hdv SGSHHHHSH@dH%(HD$81Bt>Hz?Ht:u"HJHD$8dH3%(uBH@[@HܺS Hĉv SESH]HCH;H3SH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@HܺS H$v SBSHHHHSH@dH%(HD$81Bt>Hz?Ht:u"H HD$8dH3%(uBH@[@HXܺS H脈v S@SHHHHSH@dH%(HD$81Bt>Hz?Ht:u"HjHD$8dH3%(uBH@[@H踿ܺS Hv S>SH}HcH[HSSH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@HܺS HDv SHz?Ht:u"HHD$8dH3%(uBH@[@H(ܺS HT{v S;SHHHHSH@dH%(HD$81Bt>Hz?Ht:u"H:HD$8dH3%(uBH@[@H舲ܺS Hzv S9SHMH3H+H#Hz?HHt:t &fDf.SH@dH%(HD$81Bt>Hz?Ht:u"HjHD$8dH3%(uBH@[@H踱ܺS Hyv S8SH}HcH[HSHz?HHt:t VfDf.Hz?HHt:t &fDf.Hz?HHt:t fD{f.Hz?HHt:t ưfDKf.Hz?HHt:t 閰fDf.Hz?HHt:t ffDf.Hz?HHt:t 6fDf.Hz?HHt:t fDf.Hz?HHt:t ֯fD[f.Hz?HHt:t 馯fD+f.Hz?HHt:t vfDf.Hz?HHt:t FfDf.Hz?HHt:t fDf.Hz?HHt:t fDkf.Hz?HHt:t 鶮fD;f.Hz?HHt:t 醮fD f.Hz?HHt:t VfDf.Hz?HHt:t &fDf.Hz?HHt:t fD{f.Hz?HHt:t ƭfDKf.Hz?HHt:t 閭fDf.Hz?HHt:t ffDf.Hz?HHt:t 6fDf.Hz?HHt:t fDf.Hz?HHt:t ֬fD[f.Hz?HHt:t 馬fD+f.Hz?HHt:t vfDf.Hz?HHt:t FfDf.Hz?HHt:t fDf.Hz?HHt:t fDkf.Hz?HHt:t 鶫fD;f.SH@dH%(HD$81Bt>Hz?Ht:u"HHD$8dH3%(uBH@[@HHܺS Htsv S@PSH HHHSH@dH%(HD$81Bt>Hz?Ht:u"HZHD$8dH3%(uBH@[@H訪ܺS Hrv SRSHmHSHKHCHH֋W Hf.DAUATIUI)SLIIHHMHHPDH{HHPH{HHPH{HHPH It'H;HHPtHH[]A\A]fLH)HHtCHt)HtKHL[]A\A]fDHHC[]A\A]H;HHPuHH;HHPuHH;HHPtm@HHC[]A\A]ÐHHC[]A\A]ÐUSHHHHH;F t;(HNPu^?HH1HHL0uH[]F1HkHH{jHVZYH9H[]HHT$HP HT$@III)MLIHM~qDAfDfDGfDGfDGN#@fEAtafD@tbfD@tcfD@tdIIAL9uHML)HHtHtNHt?HQfAt IfAuLfDIA IA IAQQfAtIHHGHGHG@AWAVE1AUATIUSHH(HwTLhH$A}`tECH$H;C tHHE9uPvCE9uPfH+AIHLPtH([]A\A]A^A_@ADDfAE2uOD\$@l$HME@jIL$T$I}8LLD$ ZYLD$D\$I9uE1DD8\$*HAHE;uTHH9C LcP(AE0I$@D$HP ?HAHITuE]1E"uDE9uTHHE9uPfH$HH(1[]A\A]A^A_C1dH$HH([]A\A]A^A_f.AWAVAUATE1USHHH8DEPHLhEHD$H;F A0LHSPDu0A?HH@HHLu!Dm1E@DBfE2tT@E8u#HD$E1HH8D[]A\A]A^A_fDHAHD;ePHstH9C jC1@LU@LL$ HH}8AjHJDLL\$(LT$ ^_LT$L\$LL$ I9gE1XAIHLPACD;eTr HD$H0HH;C LHsPDU0Aу?HHHHLueDM1EDFfE2uIDT$ DL$HT$0L]@HNH}8jT$8LL\$ ZYL\$DL$DT$ I9t0E8JAH f.C1*E1E8uAVAUATUSHH;V HoPDHLNPHHDg0ADAЃ?HHHtuDh1EttAATQfP2t4@1E8tHEHHHPuH+[]A\A]A^Lp@HHx81jIIDLI9ZYuf.E1F11[]A\A]A^fAWAVAUATUSHHH;F HoPL~PIDg0IIHP ?HAHITuEE1EADGfAE2t01E8tHEILHPuI.H[]A\A]A^A_ÐMM@DD$HI}81jIOLLL$ZYL $DD$I9uE1F1H1[]A\A]A^A_AWAVIAUATIUS1H8DGPHLohEHD$/I;G uMwP(AD$0I@D$&HP ?HAHITu-ET$1Ev@ADFfAD$2D8T$&HD$E1IH8D[]A\A]A^A_II;G #IoPHAD$0@t$D$&HP ?HAHITuE\$1EE1f.D8\$&t*IIELLPAPA;\$T_HD$I8fIHA;\$PIsI9G AG1DT$'@l$HM\$@jINT$ I|$8LL\$(^_L\$DT$'I9E1AG1gfDD$DEfAD$2D$D\$HMD$@I|$8HMD$0jLƋT$8LD$ GZYLD$D\$I9f.fAWAVAUATIUSH1H(L.wTLwhulA|$`tL;k IEHA9l$PvA9l$PmH+IHLPtH([]A\A]A^A_LH9C A}0LHSPET$0A?HH@HILu%EL$1E@DBfAD$2tuDE8#HHA;l$TH H9C uC1A9l$THHA9l$PL+H(1[]A\A]A^A_@M\$@DL$HDT$&I|$8AjHJDLLD$ L\$ZYL\$LD$DT$DL$I99E10L+H([]A\A]A^A_L[fAVAUIATU0SHH5IHC HS(IF IFHsIV(IFAInHtLLIFHkMHtdD0HHE HU(HC EHCHuHS(HCI\$HLctHLAHCHmIHu[L]A\A]A^HLL蒜HeHmf.AWAVHAUATIUSHHxdH%(HD$h1HHGHGxHLJHLJHHHGhHHGGHGhHGpHHD$HG(GHHD$LJHHLJtRH1HHDHHQHuHHHPHuHIHII+E1HǃHǃHǃHHHLLLHMMII9t-MtHLHEID$HII9uM~LMuRHD$hdH3%(Hx[]A\A]A^A_HH9HEIHD=0wIFxtLcxMKID$In L,J(I;T$ IT$Mt*LHH*HjH(BBHjBHuL{INHCIVH4HHHHHHH~?H H(H(HHHJHHJHJHHJHHJHH9uȀ{A~FC{(A~(C({HA~HCHDMfpIFhLl$@HD$Ll$@I9Ll$HtGM|$HxLHrHD$@LmHEHhMd$L9d$Hl$@uHt$H;spHD$PHD$PHD$Xt)HShHBHSpHHL$PHQHShHspHshHT$PL9l$Ht5HT$@Ht$HKhHrHT$HH HKhHQHT$@Ll$HLl$@HShH9D$XtaHD$PHT$@LhHD$XHHT$@HBHl$HHD$PL9HD$@t.HEH}HD$HL(軙HHl$HL9uIHt PHHHGHPfDA~{(IF CHC A~(IF0{HHC0IF8HC8IF@C(HC@A~HIFPHCPIFXHCXIF`CHHC`f.IT$ID$HHJ HBHHAH+HHHI9HIL$MJ(HQIT$HQID$LIT$ HH*HjH(BBHjBHuAIFPHCPIFXHCXAF`C`IF0HC0IF8HC8AF@C@IF HC HBH+HHHHfH*Y  f.H,I9ǿ(ICHD$ HD$HD$ It$HHt$(Hv HHHD$8Ht$0NHL$8HHH|$ t+HtH*HjBBHjB H(H9uHt$H|$(J(LD$0HHVHNH~LF Hw Hv HH|$H~HIt$ID$IT$IL$ kwKM~MjPkwd8HP(H@H@H@HP(HP0H@ HD$PHD$PHSxH|$PHCxHT$P5LcxM~\HH,H1gI((ICHD$ ICHD$(H|$ HD$Ht$(HH H ȐHtH*HjBBHjB H(H9uHL$ Ht$J(HHHVHNHFHF kwHg0Hd0e0HfHH H*XXHt$6HIHLLLM9t+IEHxHjwt Ht$PIM9uLMtLiHH|$踒HlH{x胕LcpL9d$t,ID$Lt$I|$HCpL0MLLcpM9uHTOHHH9H|$(HLLټ4HHH>>AVAUATUSH0Lg Lo(dH%(H$(1ID$xHHn8HH;EHC8HD$HC@HD$HCHHD$ HCPHD$(HCXHP(H9P0HP(HHJHHHJHHEhHBHEhHHEhHPHUhHLH葿HD$HI|$xLkHHHC@HCHPHPLk@t[IUHS8IMHK@IMHKHIMHKPHJHRHKHSH$(dH34%(:H0[]A\A]A^@I$HkXHsMuHHMHH)HU*HJHRHzH HUH}HzHMH} H9rH;u sHuHrLe(IVhHrxH;tLD$!~D$IVhH HrHqHrHHM(LbH HM(HQHU(f.HFH@H9(IELPH$HD$PHD$XHD$`H$H$H$D$hD$xƄ$HDŽ$HDŽ$DŽ$HDŽ$HDŽ$H$H$HDŽ$HDŽ$HDŽ$HxHt$PIHEhH|$PIFHEhILpLuh訐HUhH|$ZS VH|$HD$0@USHD$8 SD$@7wH}H|$sHkHHL H|$P/HGAWAVAAUATIUSHHHOHHw(HGHH)HHJT%H<H9vQH)IHELDM$L#L9HQH)HHHLH8I9HICLlHI9J<HT$IXHT$ILH)HELDHs(M$HCHMHPH)HHHH;L;LkHLc(I$HCHHC ID,HCHHHC8HHC@H[]A\A]A^A_HQHH)HHHtHH)L;fL(nf.@AUATUSHHHHN@HF0Lg HQH9t;HtL HF0HHC0H}HHPH} HHH@H[]A\A]LnHHNLH+HH)HvEIEHC0HtL HCHHPHSHH@HHC8HC0HS@|1ҾHLkHf.AUATIUSHHHN@HF0HoHQH9t;Ht.H(HF0HHHC0HHH@H[]A\A]DHLnHHNLH+HH)HvM IEHC0HtH(HCHI|$HPHSHH@HHC8HC0HS@{fD1ҾHLkHAWAVHW(AUATIUSIHXLwH_dH%(HD$H1HFPHoPI9H$HD$HD$D$D$!D$8D$<HD$(HD$0@SIL$@ID$0HQH9tyHtH(ID$0HID$0H;LHHRH{HHR I9uI}PHLPHD$HdH3%(HX[]A\A]A^A_fHM|$HIL$LI+$HH)HvJIGID$0HtH(ID$HHPIT$HH@HID$8ID$0IT$@7f1ҾLM|$HEDAUATUSHHHHN@HF0Lg HQH9t;HtL HF0HHC0H}HHPH} HHH@H[]A\A]LnHHNLH+HH)HvEIEHC0HtL HCHHPHSHH@HHC8HC0HS@|1ҾH1LkHf.AUATUSHHHHN@HF0LgHQH9t;HtL HF0HHC0H}HHPH}HHH@H[]A\A]LnHHNLH+HH)HvEIEHC0HtL HCHHPHSHH@HHC8HC0HS@|1ҾHQLkHf.AUATUSHHHHN@HF0LgHQH9t;HtL HF0HHC0H}HHPH}HHH@H[]A\A]LnHHNLH+HH)HvEIEHC0HtL HCHHPHSHH@HHC8HC0HS@|1ҾHqLkHf.HtsSHSHthHߺHHPHH/.volk_gHHnsssdr/vC"HCHolk_gnssHCHsdr_confHCigfC [fDSHu[ff.AWAVIAUATSUSHdH%(H$1_HHH&SH<$u6E1H$dH3%(LH[]A\A]A^A_SHHIt1E1fDH$LcHtfM|$HKHHHH$HžS1HLHuSH޹MD@L I.S6HSHdH%(HD$1Ht5HH:uDH$HL$dH3 %(uXH[f.HD$dH3%(u8H[fDH=b0Iٺ S1L1f.Ju.AVAUE1ATE1US1fAJu(1ЅuJuD9vIAă;t.rIU^S1L-0ZH0[]HPA\A]H0HH0A^H0H% ffffff.AWAVAUATUSH(HT$Hn0H<$Ht$L$HLLL8HLPHALLLM E1HLMLLHcɎ H0HcHHڨHos.HHLs.PGL$HT$Ht$H<$H;s.H([]A\A]A^A_8KH0LH/Hp0LHHT0L8HuoH<0HHHH 0HبHHr.HLL8HDAWAVAUATUSH8T$,H0D$H|$L$Ht$ T$H\$(LXL`LH\L HALLLM E1HLMLLHc H&0HcHHxHq.HxH`q.GT$,Ht$ \$(H|$HMq.T$L$D$H8[]A\A]A^A_kH0LXHOH0L`H 3Ht0LHuoH\0H\HHH,0HxHHp. HL`LH\DAWAVAUATUSHxH$HT$H0H|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d L L L H L HALLLML\$hފ L\$hE1HLLLHcM迊 H0HcH,H Ho.\$dH HL$PHt$HH|$@L$$H\$XH$H$H$Hn.H$H\$8Hn.GLL$0LD$(HL$ H$HT$Ht$H|$Hx[]A\A]A^A_H,0L HH0L HH0L HuoH0H HHkH0H HHm.GHL L H 1DAWAVAUATUSHxH$HT$HF0H|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(LLLHHL`HALLLML\$h^ L\$hE1HLLLHcM? Hp0HcH4HڸHml.HHJl.GL$LL$0LD$(HL$ H4l.D$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDcH0LHGH0LH+Hl0LHHuoHT0HHH{H$0HظHH*k.HLLHH)ffff.AWAVAUATUSHXH$HT$H/H|$Ht$HL$ HD$8$HLD$(LL$0L$D$DLhLpLHlL0HALLLML\$H L\$HE1HLLLHcM H/HcHHڈHi.HHi.GL$LL$0LD$(HL$ Hi.D$DHT$Ht$H|$$HD$8H$HX[]A\A]A^A_vfD;H|/LhHH`/LpHHD/LHuoH,/HlHHH/H؈HHh.HLpLHl]DAWAVAUATUSH(T$H/H|$Ht$HLLLH LHALLLM E1HLMLLHc H./HcHH(Hg.H(Hg.`GT$Ht$H|$Hg.H([]A\A]A^A_H/LHoH/LH"SH/LHuo;H|/H HH HL/H(HH g.!HLLH DAWAVAUATUSH(HT$H/H<$Ht$L$HLLLHLHALLLMc E1HLMLLHcI Hz/HcHHHf.HHe.GL$HT$Ht$H<$He.H([]A\A]A^A_H/LHH/LHH/LHuoH/HHgHSH/HHH:e./HLLHffff.AWAVAUATUSHxH$HT$H&/H|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(LL LHLHALLLML\$h> L\$hE1HLLLHcM HP/HcH4H8Hc.H8Hjc.PGL$LL$0LD$(HL$ HTc.D$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_.fDCH/LH'Hh/L H HL/LHuoH4/HHH{H/H8HHJb.HL LH)ffff.AWAVAUATUSHxH$HT$H/H|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(L L Lh!H!L"HALLLML\$h} L\$hE1HLLLHcM} H/HcH4H!H`.H!H`.@GL$LL$0LD$(HL$ H`.D$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDH/L HH/L H{H/Lh!HuocH/H!HGH{3Ht/H!HH_.HL Lh!H!)ffff.AWAVAUATUSH(T$H/H|$Ht$HL"L"L8#H#LP$HALLLM{ E1HLMLLHcm{ H/HcHHڨ#H^.H#Hp^.GT$Ht$H|$Hc^.H([]A\A]A^A_H. LL(H|fffff.AWAVAUATUSH(T$H/H|$Ht$HLxLL(H|L@HALLLMZ E1HLMLLHc}Z H/HcHHژH>.HH=.GT$Ht$H|$H=.H([]A\A]A^A_ HL/LxHH0/LH"H/L(HuoH/H|HHH/HؘHHB=.!gHLL(H|DAWAVAUATUSH(T$Ho/H|$Ht$HL L Lx H LHALLLMX E1HLMLLHcX H/HcHH H=.H H<.GHt$H|$H<.T$H([]A\A]A^A_[H/L H?H/L H"#Hd/Lx Huv HL/H HHH/H HH:<.!HH%<. L Lx H fffff.AWAVAUATUSH(HT$H/H<$Ht$L$HLLL8HLPHALLLM#W E1HLMLLHc W H:/HcHHڨH;.HH;.PGL$Ht$H<$H;.HT$H([]A\A]A^A_H/LHwH/LH[H/L8HuvCH/HH'HHT/HبHH:.HH:. LL8HfDAWAVAUATUSH(HT$H/H<$Ht$L$HLLL8HLPHALLLMcU E1HLMLLHcIU Hz/HcHHڨH9.HH9.PGL$HT$Ht$H<$H9.H([]A\A]A^A_H/LHH/LHH/L8HuoH/HHgHSH/HبHH9./HLL8Hffff.AWAVAUATUSH(L3/H|$D$t$L$MI'M(M(I(M)HAHLLMS E1LHMHLLcS H/HcHJ)Hd6.H)HA6.Gt$L$D$H|$H-6.H([]A\A]A^A_D LL/H'ML0/L(ML/L(MuoL/H(MIH/J)HH5.gH M(M(I(DAWAVAUATUSH(HT$Hn/H<$Ht$L$HLX$L`$L%H\%L &HALLLMQ E1HLMLLHcQ H/HcHHx%H4.Hx%H4. GL$Ht$H<$H4.HT$H([]A\A]A^A_SH/LX$H7Hx/L`$HH\/L%HuvHD/H\%HHH/Hx%HH3.HH3. L`$L%H\%fDAWAVAUATUSH(HT$H/H<$Ht$L$HLX$L`$L%H\%L &HALLLM#P E1HLMLLHc P H:/HcHHx%H3.Hx%H2. GL$HT$Ht$H<$H2.H([]A\A]A^A_蓿H/LX$HwH/L`$H[H/L%HuoCH/H\%H'HHT/Hx%HH:2.HL`$L%H\%ffff.AWAVAUATUSH(HT$H/H<$Ht$L$HLLLXHLpHALLLMcN E1HLMLLHcIN Hz/HcHHH1.HH1.GL$Ht$H<$H1.HT$H([]A\A]A^A_ӽH/LH跽H/LH蛽H/LXHuv能H/HHgHSH/HHH"1./HH 1. LLXHfDAWAVAUATUSH(HT$H./H<$Ht$L$HLLLXHLpHALLLML E1HLMLLHcL H/HcHHH?0.HH0.GL$HT$Ht$H<$H 0.H([]A\A]A^A_HT/LHH8/LHۻH/LXHuoûH/HH觻H蓻H/HHHb/.oHLLXHffff.AWAVAUATUSH(HT$Hn/H<$Ht$L$HLLLHLHALLLMJ E1HLMLLHcJ H/HcHHH..HHt..GL$Ht$H<$Hh..HT$H([]A\A]A^A_SH/LH7Hx/LHH\/LHuvHD/HHHӹH/HHH-.诹HH-. LLHfDAWAVAAUATUSH8H/H|$Ht$L$HLLLHL HALLLML\$ I L\$ HE1HLLLHD$(MH H*/HcHHD$(H HJ,.H H',.GL$Ht$H|$H,.H8D[]A\A]A^A_D{H/LH_H/LHCH/LHu{+Hl/HHHHL$(H7/H HHe+.ҷHHP+.LLHwfAWAVAUATUSH(T$H/D$H|$Ht$HLHLPLHLLHALLLMAG E1HLMLLHc'G HX/HcHHhH*.HhH*. GD$Ht$H|$H{*.T$H([]A\A]A^A_諶H/LHH菶Hп/LPHsH/LHuv[H/HLH?H+Hl/HhHH).HH).LPLHLfffff.AWAVAUATUSH(T$H/D$H|$Ht$HLHLPLHLLHALLLMqE E1HLMLLHcWE H/HcHHhH(.HhH(. GT$D$Ht$H|$H(.H([]A\A]A^A_۴H/LHH迴H/LPH裴H/LHuo苴H̽/HLHoH[H/HhHH'.7H LPLHLDAWAVAUATAUSH8H=/H<$Ht$D$L$$HLLLHL HALLLML\$(C L\$(E1HLLLHcMC H/HcHH H&.H H&.GDL$$Ht$H<$H&.HD$H8[]A\A]A^A_@ HL/LHH0/LH ӲH/LHuo軲H/HH蟲H苲H̻/H HH%.gHLLHDAWAVAUATUSH8T$,Ho/D$H|$L$Ht$ T$H\$(LXL`LH\L HALLLMA E1HLMLLHcA H/HcHHxHC&.HxH &.GHt$ \$(T$H|$H &.L$T$,D$H8[]A\A]A^A_+Hl/LXHHP/L`H H4/LHuv۰H/H\H述H諰H/HxHHR%. 臰HH=%.L`LH\~fffff.AWAVAUATUSH8T$,H/D$H|$L$Ht$ T$H\$(LXL`LH\L HALLLM? E1HLMLLHc? H/HcHHxHS$.HxH0$.GT$,Ht$ \$(H|$H$.T$L$D$H8[]A\A]A^A_;H|/LXHH`/L`H HD/LHuoH,/H\HϮH軮H/HxHHb#. 藮HL`LH\DAWAVAUATUSHXH$HT$H/H|$Ht$HL$ HD$8$HLD$(LL$0L$D$DLh-Lp-L.Hl.L0/HALLLML\$H= L\$HE1HLLLHcM= H/HcHHڈ.HY .\$DH.H2 .@GL$LL$0LD$($H\$8H .HL$ HT$Ht$H$H|$HX[]A\A]A^A_fH\/Lh-HH@/Lp-HH$/L.HuoˬH /Hl.H诬H蛬Hܵ/H؈.HHJ.wHLp-L.Hl.]DAWAVAUATUSHXHT$H~/$H|$Ht$HL$ HLD$(LL$0L$L$D$<L8H@LH<LHALHLML\$@; L\$@HE1HLHLHD$HM; Hմ/HcHHD$HHXH.HX\$ L\$hE1HLLLHcM HP/HcH4H*H-H*H-0GL$LL$0LD$(HL$ H-D$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDCH/L)H'Hh/L)H HL/Lx*HuoH4/H*H׉H{ÉH/H*HH-蟉HL)Lx*H*)ffff.AWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$?Hx/HBHx/HHx/ZH% L+HH,H,AWAVAUATUSH(T$HOx/H<$Ht$HLjHj LLLHALLLM E1LHMLLHc Hw/HcHQH8H-H8H-GT$Ht$H<$Hs-H([]A\A]A^A_CnHw/LhH**nHkw/Hh H)nHRw/LHD-HD$D$E1EJu1~ЅuJ u;D$v HL$D$AD;=-rHD$^SHPHv/1?=Hv/HBHv/HHv/LgfD;mH|v/H8HHB-mHH% Hj LAWAVAUATUSHXH$HT$Hv/H<$Ht$HL$HD$0$HLD$ LL$(L$D$<Lh-Lp-L.Hl.L0/LAHLLML\$@c L\$@E1LLHLHcMD Huu/LcHHڈ.LL$(H-@GLD$ HL$Ht$H-J.H<$L$HT$H-D$<$HD$0H$HX[]A\A]A^A_xkHt/Lh-HkHt/Lp-HckHt/L.HGkHt/Hl.H+kHj-HD$@E1E1H\$HfDDHu(1{ЅuH uD9vHL$@AAD;5 -rHD$@^SH\$HHPHs/1d:Hs/HBHs/HHs/QH% Lp-L.Hl.fffff.AWAVAUATUSH(T$Hos/H|$Ht$HLjLr LHLHALLLM E1HLMLLHc Hs/HcH0H8H-H8H-GT$Ht$H|$H-H([]A\A]A^A_鶇fD-E11E1f.EJu1 zЅuJu9vIԉAD;-X-rIT$1^SL%6r/8H*r/HBLjLr LH r/HHH r/uihHq/HHhHH% D{hHq/H8HH-WhHHEAWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$m/13H0m/HBH5m/HH"m/LSfDcHl/HHH-cHyH% HLDAWAVAUATUSH(T$Hl/H<$Ht$HLLLH LLAHLLM E1LLMHLHc H/l/LcHH(J(H-`GHt$H<$H-H-T$H([]A\A]A^A_DbHk/LHobHk/LH!SbHk/LH7bHxk/H HbHZ-HD$E1E1EJu(1rЅuJ4uD9vHt$AAD;5-rHD$^SHPHj/1a1Hj/HBHj/HHj/H% LLH "ff.AWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$,He/HBHe/HHe/ZH% Lp-H.Hl.AWAVAUATUSHhHT$HNe/$H|$Ht$HL$ HLD$(LL$0L$L$D$<L( H0 L H, L HAHLLML\$@ L\$@HE1LHHLHD$HMt Hd/HcHHD$HHH H-HH \$H% H0 L 뚐AWAVAUATUSH(T$Hb/H<$Ht$HL H Lx L LHALLLM E1LHMLLHc Hb/HcH[H H4-H H-GT$Ht$H<$H-H([]A\A]A^A_D{XHa/L H/_XHa/H H!CXHa/Lx Hv-HD$D$E1f.EJu1hЅuJ u;D$v HL$D$AD;=-rHD$^SHPH`/1o'H`/HBH`/HH`/L ]fDkWH`/H HH-GWHH% H Lx DAWAVAUATUSH(T$HO`/H<$Ht$HL"L"L8#H#LP$LAHLLM E1LLMHLHc H_/LcHHڨ#J#H-GHt$H<$H-H-T$H([]A\A]A^A_D;VH|_/L"HVH`_/L"H!VHD_/L8#HUH(_/H#HUH -HD$E1E1EJu(1lfЅuJ4uD9vHt$AAD;5-rHD$^SHPH^/1%H^/HBH^/HHt^/H% L"L8#H#"ff.AWAVAUATUSH8HT$H^/H|$Ht$L$$HLHLXLLpHALLLM E1LHMLLHcx H]/HcH]HH.-HH -GL$$HT$Ht$H|$H-H8[]A\A]A^A_VvfDSH<]/LHSH ]/HH-HD$(E1E1EJu1tdЅuJ uD9vHL$(AAD;=-rHD$(^SHPH\/1#H\/HBLXH\/HHu\/LvfHM\/H% RH4\/HHH-RHHLXAWAVAUATUSH(H[/H|$Ht$D$T$HLHLPLLLHALLLLIQ E1ILLLLHc7 Hh[/HcHHhH-HhH- GT$D$Ht$H|$H-H([]A\A]A^A_tt@QLHHZ/H-E11E1fDEJu1TbЅuJ u9vI͉AD;5-rIU^S1L-Z/!HsZ/HPLPHqZ/HH^Z/H% PH4Z/HhHH-PHLPLLLKffff.AWAVAUATUSH8T$+HY/H|$Ht$ D$L$,HLLLHL HALLLM< E1HLMLLHc" HSY/HcH7H Hx-H H\$T$+HL-GL$,Ht$ HD-H|$H8[]A\A]A^A_D-E11E1fEJu1\`ЅuJu9vIԉAD;--rIT$1^SL%X/ HzX/HBLLLHjX/HHHTX/ukNH>X/HHNHH% NHX/H HH2-NHH>ff.AWAVAUATUSH(HW/H|$D$t$L$HH'L(L(H(L)HAHLLM E1LHMHLLc H7W/HcHJ)H-H)H-Gt$L$D$H|$H-H([]A\A]A^A_DMH'HV/H-E1E11fDAJuD(1#^DuJ uD9vIAƃ;-n-rIW^S1L=MV/HAV/HPL(H?V/HH,V/H% DLHV/J)HH-LHH-L(L(H(EfDAWAVAUATUSH(T$HU/H|$Ht$HLLLhHLHALLLM E1HLMLLHc H.U/HcH2HH-HH- GT$Ht$H|$H-H([]A\A]A^A_@j-E11E1f.EJu1<\ЅuJu9vIԉAD;--rIT$1^SL%fT/HZT/HBLLLhHJT/HHH4T/ukJHT/HHJHH% JHS/HHHz-JHHCff.AWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$-HD$@1E1Ld$HEJu1YЅuJ u9vHL$@AD;--rHD$@^SLd$HHPHQ/1>HQ/HPL+HQ/HHQ/JH% 3HHtQ/Hظ,HH-HHL+LH,L,ffff.H!Q/Htf-AVAUE1ATE1US1fAJu(1|XЅuJuD9vIAă;ȼ-rIU^S1L-P/*HP/[]HPA\A]HP/HHP/A^H% f.j-ATUS1ۅuTfD9O-vCHuD 1WDuHuvSHP19 -w[]A\tS1uDHO/Ht H@һ-AVAUE1ATE1US1ۅtTfDAJu(14WЅuJuD9vIAă9-w[IEL-bO/]A\A]A^H% H=PO/tHWO/fDB-AVAUE1ATE1US1f.AJu(1VЅuJuD9vIAă;-rIU^S1L-N/JHN/[]H@A\A]HPHN/A^HN/H% f.H=N/DAWAVIAUATAUSHIHHWN/HtZHHx L HcH5N/Ht(H8HD[LH]A\A]A^A_Df-HD$D$E1fDDHu$1QUЅ$uHu;D$v HT$D$AD;5-rHD$^SHPHrM/1HdM/HPHiM/HHVM/H% AWAVAUATUSHHH M/HHr HHt1HHCHH3HKHSH[]A\A]A^A_fڸ-E1E11f.AJuD 1;TDuJuD9vIAŃ;--rIV^S1L5eL/HYL/HBHr HHSL/HH@L/H#H% f.AWAVIAUATAUSHIHHK/HtZHHL4 HcHK/Ht%HHD[LH]A\A]A^A_@[Bf-HD$D$E1fDDHu$1RЅ$uHu;D$v HT$D$AD;56-rHD$^SHPHK/1HK/HPH K/HHJ/H% AWAVAUATUSHHHJ/HHHHt.HHCHH3HKHSH[]A\A]A^A_fDz-E1E11f.AJuD 1QDuJuD9vIAŃ;-&-rIV^S1L5J/HI/HBHHHI/HHI/H#H% AWAVIAUATIUSIAHH=I/HHLH $HnI/Ht)Hc$DLLHH[]A\A]A^A_@B-HD$D$E1fDDHu(1PЅuH u;D$v HL$D$AD;=-rHD$^SHPHH/1?HH/HPHH/HHH/,DH% fD-tHD$D$1Hu$1OЅ$uHu;D$v HT$D$;-)-rHD$^SHPHH/1H=G/HGHG/HHG/N@AWAVAUATUSHHHG/HHHhHt.HHCHH3HKHSH[]A\A]A^A_fDz-E1E11f.AJuD 1NDuJuD9vIAŃ;-&-rIV^S1L5G/ HF/HBHHhHF/HHF/H#H% AWAVAUATAUSHHIH(H=F/HtZHPHǐL LcHrF/Ht%JH(DLHH[]A\A]A^A_Hx\$ T$DL$L$H([H]A\A]A^A_fDK:f-HD$D$E1fDDHuD$1JЅD$uHu;D$v HT$D$AD;5$-rHD$^SHPHC/1 HB/HPHB/HHB/H% DAWAVAUATUSHHHB/HH`HH\t.H HCHH3HKHSH[]A\A]A^A_fDj-E1E11f.AJuD 1IDuJuD9vIAŃ;--rIV^S1L5A/xHA/HBH`HHA/HHA/H\#H% AWAVAUATUSHXH|$H=A/Ht$HT$ HL$(LD$0HLL$8L$L$D$H$<H HH0 D$H+A/HtVHc\$D$L$L$LL$8LD$0HL$(HT$ HH Ht$H|$HX[]A\A]A^A_Ҭ-HD$@E11Ll$HAJu(1,HЅuJ uD9vHL$@Aă;v-rHD$@^SLl$HHPHM@/1H?@/HPHD@/HH1@/@H% fD-t1Hl$HHD$Ll$@AJuD 1kGDuJ u9vHL$Ã;--rHD$^SLl$@Hl$HHPH?/1 H=z?/HGH?/HHl?/AWAVAUATUSHHH@?/HH0 H H, t.H HCHH3HKHSH[]A\A]A^A_fD-E1E11f.AJuD 1[FDuJuD9vIAŃ;--rIV^S1L5>/Hy>/HBH0 H Hp>/HH]>/H, #H% AWAVAUATUSHxH$H<$H=>/Ht$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H H LLL$8LD$0 LcH=/LD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J HT$Ht$H<$Hx[]A\A]A^A_3LL$8LD$0x@-11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJu14/Ht$HT$ HL$(LD$0HLL$8L$L$D$H$<H0HHp> D$H3/HtVHc\$D$L$L$LL$8LD$0HL$(HT$ H؈Ht$H|$HX[]A\A]A^A_-HD$@E11Ll$HAJu(1:ЅuJ uD9vHL$@Aă;&-rHD$@^SLl$HHPH2/1~H2/HPH2/HH2/@H% fDž-t1Hl$HHD$Ll$@AJuD 1:DuJ u9vHL$Ã;-f-rHD$^SLl$@Hl$HHPH82/1H=*2/HGH/2/HH2/AWAVAUATUSHHH1/HHpHHlt.H0HCHH3HKHSH[]A\A]A^A_fD-E1E11f.AJuD 1 9DuJuD9vIAŃ;-V-rIV^S1L551/H)1/HBHpHH 1/HH 1/Hl#H% AWAVAUATUSLHHXH|$H=0/Ht$HT$L$L$HD$L$HH@LLL$ Ҷ LcHp0/LL$ HtND$L$IL$HT$HJXHt$H|$HX[]A\A]A^A_f&LL$ @ -11Ld$@HD$ HL$(LD$0LL$8ALl$HEJu1L7ЅuJ u9vHL$ AD;%-rHD$ LL$8^SH\$(Hl$0Ld$@Ll$HHPHY//1LL$(H=F//LL$(HGHH?//HH,//H% ffff.AWAVAUATUSHHH./HH@HH<t.HHCHH3HKHSH[]A\A]A^A_fD-E1E11f.AJuD 1 6DuJuD9vIAŃ;-V-rIV^S1L55./H)./HBH@HH ./HH ./H<#H% AWAVIAUATAUSHIHH-/HtZHHL HcH-/Ht%H(HD[LH]A\A]A^A_@+$fj-HD$D$E1fDDHu$14Ѕ$uHu;D$v HT$D$AD;5-rHD$^SHPH,/1cH,/HPH,/HH,/H% AWAVAUATUSHHH,/HHHH t.HHCHH3HKHSH[]A\A]A^A_fDJ-E1E11f.AJuD 13DuJuD9vIAŃ;--rIV^S1L5+/XH+/HBHHH+/HH+/H #H% AWAVAUATAUSHHIH(H=g+/HtZHHL褱 LcHB+/Ht%JH(DLHH[]A\A]A^A_!f -HD$D$E1fDELD$Ju$1\2Ѕ$LD$uJu;D$v HT$D$AD;=-rHD$^SL$HPHt*/1H=f*/L$HGHH`*/HHM*/H% fffff.AWAVAUATUSHHH*/HHHHt.HHCHH3HKHSH[]A\A]A^A_fDʕ-E1E11f.AJuD 1+1DuJuD9vIAŃ;-v-rIV^S1L5U)/HI)/HBHHH@)/HH-)/H#H% AWAVAUATAUSHHIH(H=(/HtZHpHǰL$ LcH(/Ht%JH(DLHH[]A\A]A^A_Kf-HD$D$E1fDELD$Ju$1/Ѕ$LD$uJu;D$v HT$D$AD;=-rHD$^SL$HPH'/1uH='/L$HGHpH'/HH'/H% fffff.AWAVAUATUSHHH'/HHHXHt.HpHCHH3HKHSH[]A\A]A^A_fDJ-E1E11f.AJuD 1.DuJuD9vIAŃ;--rIV^S1L5&/XH&/HBHHXH&/HH&/H#H% AWAVIAUATAUSHIHHg&/HtZH@HL褬 HcHB&/Ht%HؘHD[LH]A\A]A^A_@f -HD$D$E1fDDHu$1a-Ѕ$uHu;D$v HT$D$AD;5-rHD$^SHPH%/1Ht%/HPHy%/HHf%/H% AWAVAUATUSHHH0%/HHH(H|t.H@HCHH3HKHSH[]A\A]A^A_fD-E1E11f.AJuD 1K,DuJuD9vIAŃ;--rIV^S1L5u$/Hi$/HBHH(H`$/HHM$/H|#H% AWAVIAUATIUSIAH(H=$/D$HHLHP: D$ H#/Ht2Hc\$ D$DLLHhH([]A\A]A^A_fD-HD$D$E1fDDHu(1*ЅuH u;D$v HL$D$AD;=B-rHD$^SHPH#/1H#/HPH#/HH#/#DH% fD-tHD$D$1HuD$ 1A*ЅD$ uHu;D$v HT$D$;--rHD$^SHPHc"/1H=U"/HGHZ"/HHG"/BfAWAVAUATUSHHH "/HHPHHLt.HHCHH3HKHSH[]A\A]A^A_fDڍ-E1E11f.AJuD 1;)DuJuD9vIAŃ;--rIV^S1L5e!/HY!/HBHPHHP!/HH=!/HL#H% AWAVAUATUSHxH$H<$H= /Ht$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$HH LLL$8LD$0զ LcHs /LD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J8HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@ڋ-11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJu1'ЅuJ u9vHL$0AD;%f-rHD$0LD$8^SLL$@H\$HHl$PLd$XHPH)/1LD$hLL$8Ll$`H= /LD$hLL$8HGHH/HH/JH% fffff.AWAVAUATUSHHH/HH HHt.HHCHH3HKHSH[]A\A]A^A_fDj-E1E11f.AJuD 1%DuJuD9vIAŃ;--rIV^S1L5/xH/HBH HH/HH/H#H% AWAVIAUATUSAAH8H=/Ht$D$HH HL跣 $HU/Ht8Hc$Ht$DDLH H\$H8[]A\A]A^A_-HD$(D$$1AJu(1t$ЅuJ u;D$$v HL$(D$$;-rHD$(^SHPH/1H/HPH/HH|/H% fDZ-tHD$(D$$1AL$Ju1#L$uJu;D$$v HT$(D$$;--rHD$(^SL$HPH/1UH=/L$HGH H/HH/2AWAVAUATUSHHH/HHHHt.H HCHH3HKHSH[]A\A]A^A_fD:-E1E11f.AJuD 1"DuJuD9vIAŃ;--rIV^S1L5/HH/HBHHH/HH/H#H% AWAVAUATUSHxH$H<$H=W/Ht$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H"H LLL$8LD$05 LcH/LD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J!HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@:-11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJu1| ЅuJ u9vHL$0AD;%Ƅ-rHD$0LD$8^SLL$@H\$HHl$PLd$XHPH/1LD$hLL$8Ll$`H=l/LD$hLL$8HGH"H`/HHM/JH% fffff.AWAVAUATUSHHH/HH Hh!H!t.H"HCHH3HKHSH[]A\A]A^A_fDʃ-E1E11f.AJuD 1+DuJuD9vIAŃ;-v-rIV^S1L5U/HI/HBH Hh!H@/HH-/H!#H% AWAVIAUATAUSHIHH/HtZHP$H"L$ HcH/Ht%Hب#HD[LH]A\A]A^A_@K f-HD$D$E1fDDHu$1Ѕ$uHu;D$v HT$D$AD;5&-rHD$^SHPH/1H/HPH/HH/H% AWAVAUATUSHHH/HH"H8#H#t.HP$HCHH3HKHSH[]A\A]A^A_fDj-E1E11f.AJuD 1DuJuD9vIAŃ;--rIV^S1L5/xH/HBH"H8#H/HH/H##H% AWAVAUATAUSHHIH(H=/HtZH &H`$LĚ LcHb/Ht%Jx%H(DLHH[]A\A]A^A_ f*-HD$D$E1fDELD$Ju$1|Ѕ$LD$uJu;D$v HT$D$AD;=-rHD$^SL$HPH/1H=/L$HGH &H/HHm/H% fffff.AWAVAUATUSHHH0/HH`$H%H\%t.H &HCHH3HKHSH[]A\A]A^A_fD~-E1E11f.AJuD 1KDuJuD9vIAŃ;-~-rIV^S1L5u/Hi/HBH`$H%H`/HHM/H\%#H% AWAVAUATUSHxH$H<$H=/Ht$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H'H0&LLL$8LD$0 LcH/LD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$JH'HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@|-11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJu1,ЅuJ u9vHL$0AD;%v|-rHD$0LD$8^SLL$@H\$HHl$PLd$XHPH9/1LD$hLL$8Ll$`H=/LD$hLL$8HGH'H/HH/JH% fffff.AWAVAUATUSHHH/HH0&H&H,'t.H'HCHH3HKHSH[]A\A]A^A_fDz{-E1E11f.AJuD 1DuJuD9vIAŃ;-&{-rIV^S1L5/H/HBH0&H&H/HH/H,'#H% AWAVIAUATAUSIH(H/D$ L$HH)H(Lǔ HcHe/Ht0H)L$D$ H([DL]A\A]A^A_fD2z-HD$D$E1fDEJu(1ЅuJ u;D$v HL$D$AD;=y-rHD$^SHPH /1/H /HPH /HH /%DH% fDry-tHD$D$1AJu(1ЅuJu;D$v HT$D$;y-rHD$^SHPH /1yH /HPH /HH /JAWAVAUATUSHHH /HH(H(H(t.H)HCHH3HKHSH[]A\A]A^A_fDjx-E1E11f.AJuD 1DuJuD9vIAŃ;-x-rIV^S1L5 /xH /HBH(H(H /HH /H(#H% AWAVAUATUSHxH$H<$H= /Ht$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H+H)LLL$8LD$0e LcH /LD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J*HT$Ht$H<$Hx[]A\A]A^A_3LL$8LD$0x@jv-11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJu1ЅuJ u9vHL$0AD;%u-rHD$0LD$8^SLL$@H\$HHl$PLd$XHPH /1LD$hLL$8Ll$`+H= /LD$hLL$8HGH+H /HH} /JH% fffff.AWAVAUATUSHHH@ /HH)Hx*H*t.H+HCHH3HKHSH[]A\A]A^A_fDt-E1E11f.AJuD 1[DuJuD9vIAŃ;-t-rIV^S1L5/Hy/HBH)Hx*Hp/HH]/H*#H% AWAVAUATUSHXH|$H=/Ht$HT$ HL$(LD$0HLL$8L$L$D$H$<H`-HHǠ+ D$H/HtVHc\$D$L$L$LL$8LD$0HL$(HT$ Hظ,Ht$H|$HX[]A\A]A^A_bs-HD$@E11Ll$HAJu(1ЅuJ uD9vHL$@Aă;s-rHD$@^SLl$HHPH/1^H/HPH/HH/@H% fDr-t1Hl$HHD$Ll$@AJuD 1 DuJ u9vHL$Ã;-Fr-rHD$^SLl$@Hl$HHPH/1H= /HGH/HH/AWAVAUATUSHHH/HH+HH,H,t.H`-HCHH3HKHSH[]A\A]A^A_fDq-E1E11f.AJuD 1 DuJuD9vIAŃ;-6q-rIV^S1L5/H /HBH+HH,H/HH/H,#H% AWAVAUATUSHXH|$H=/Ht$HT$ HL$(LD$0HLL$8L$L$D$H$<H0/HHp-變 D$HK/HtVHc\$D$L$L$LL$8LD$0HL$(HT$ H؈.Ht$H|$HX[]A\A]A^A_o-HD$@E11Ll$HAJu(1L ЅuJ uD9vHL$@Aă;o-rHD$@^SLl$HHPHm/1H_/HPHd/HHQ/@H% fD2o-t1Hl$HHD$Ll$@AJuD 1 DuJ u9vHL$Ã;-n-rHD$^SLl$@Hl$HHPH/1)H=/HGH/HH/AWAVAUATUSHHH`/HHp-H.Hl.t.H0/HCHH3HKHSH[]A\A]A^A_fDn-E1E11f.AJuD 1{ DuJuD9vIAŃ;-m-rIV^S1L5/(H/HBHp-H.H/HH}/Hl.#H% AWAVIAUATIUSIAHH=7/HH1LH@/p $H/Ht)Hc$DLLHX0H[]A\A]A^A_@l-HD$D$E1fDDHu(1<ЅuH u;D$v HL$D$AD;=l-rHD$^SHPH^/1HP/HPHU/HHB/,DH% fD"l-tHD$D$1Hu$1Ѕ$uHu;D$v HT$D$;-k-rHD$^SHPH.1&H=.HGH.HH.N@AWAVAUATUSHHH`.HH@/H/H<0t.H1HCHH3HKHSH[]A\A]A^A_fDk-E1E11f.AJuD 1{DuJuD9vIAŃ;-j-rIV^S1L5.(H.HBH@/H/H.HH}.H<0#H% f.1ffff.f.f.1ffff.f.SAHdH%(HD$1DD9rD1v=w$DHt$dH34%(uH[DASHdH%(HD$1=v 1H|$dH3<%(uH[fSHdH%(HD$1=v ։H|$dH3<%(uH[qSHdH%(HD$1t ΉH|$dH3<%(uH[)fSHdH%(HD$1t ։H|$dH3<%(uH[fSHdH%(HD$1t ։H|$dH3<%(uH[fSHdH%(HD$1t ։H|$dH3<%(uH[9ff.f.SHdH%(HD$1t ΉH|$dH3<%(uH[fff.SHdH%(HD$1t Ή H|$dH3<%(uH[yfSHdH%(HD$1=v ΉH|$dH3<%(uH[!SHdH%(HD$1t ΉH|$dH3<%(uH[fSHdH%(HD$1t ΉH|$dH3<%(uH[fSHdH%(HD$1t ΁t$1u<t1ШD1H|$dH3<%(u!H[ρuH.`mHH.pmHH.mHH.mHH.mHH.mHH.mHH.@nHH}.nHHz.nHHw.0oHHt.oHHq.oHHn. pHHk.0pHHh.@pHHe.pHHb.pHH_.0qHH\.qHHY.qHUS1HH.`mHH.pmHH.mHH.mHH.mHH.mHH.mHH.@nHH.nHH.nHH.0oHH|.oHHy.oHHv. pHHs.0pHHp.@pHHm.pHHj.pHHg.0qHHd.qHHa.qH1#1*j1.1.1.1.1.1.1. 1. 1. 1. 1~. 1y.1t.1o.1j.1e.1`.1[.H[]f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@Ձ AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@ AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ B > EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGDfD$hd$hl$l((l$ANAF$$fD$`HD$ \$ D$dXL$`XC$ CHηfD$XHt$\$D$\MXEXL$X$EMN芷fD$PD$TAXD$A $XL$PH|$\$$AD$A $O@fD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ | | EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAG蔵fD$hd$hl$l((l$ANAF$$`fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNڴfD$PD$TAXD$A $XL$PH|$\$$AD$A $O萴fD$HHT$\$D$LAMAXEXL$H$AEAMJHLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h t t H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDt HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h 7p 3p H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDBp HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ k k GF BnL$IHL$HHML $HHD$DA_HT$HAIKICI1fD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAF貤fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMcHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ j j GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIafD$8H$d$8l$<((l$ Hd$+fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAM蓢HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H Dh @h GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h w s Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h  Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h 7 3 Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H  GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\B 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@Q AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@ AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$  EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGfD$hd$hl$l((l$ANAF$$fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNZfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$   EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGdfD$hd$hl$l((l$ANAF$$0fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $O`fD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h   H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDb HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h  H Ht$HT$CHL$LD$HG B AAA@H|$@IfHD HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ _ [ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIfD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAM3HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$  GF BnL$IHL$HHML $HHD$DA_HT$HAIKICI1fD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMcHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H  GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Y Y Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h SW OW Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h T T Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H R  R GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BJ w8J .vD(fDH[]A\A]ffff.tpATUL$SHHI)fBI =,HHEL9t).I w I .v(@[]A\f.tpATUL$SHHI)fBRI 轁,HHEL9t)..I w 0I .v(@[]A\f.t|ATUSL$HHHID$ 0H _(,,HHEL9t ^D$ .H vH H[]A\fffff.t|ATUSL$HHHID$ 0DH _(蜀,HHEL9t ^D$ .H vG H[]A\fffff.AUATAUSIHHtlHFrH(H HH(H HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%DG d(,fA\HA9v0D.G w-G .vD(H[]A\A]DAUATAUSIHHtlHFrH(G HH(G HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%DF d(~,fA\HA9v0D.F w-F .vD(H[]A\A]DAUATAUSIHHtlHFrH(F HH(F HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%DE d(},fA\HA9v0D.E w-E .vD(H[]A\A]DAUATAUSIHHtlHFrH(E HH(E HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%DD d(|,fA\HA9v0D.D w-D .vD(H[]A\A]DAAEAfoDD I1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDRA D$L$dH%(HD$81L$DfDfDfDWDxfEfo%WA MILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_tff.AWAVAUATUSHdH%(HD$x1$ L= H= H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-= H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_jfffff.AWAVAUATUSHHD$ 3 dH%(HD$813 H$DH$GF BfDP1fIfo%3 I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_dAAEAfo- IIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD+ D$L$dH%(HD$81L$DfDfDfDWDxfEfo%+ MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_[^ff.AWAVAUATUSHdH%(H$1$ & & H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-w& I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_tU@AWAVAUATUSHHD$ . dH%(HD$81 H$DH$GF BDpffIIfID(N<1D(fo% IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_OUSH(L$ (H,HHfHt$H|$\$HZOOL$f\$fW  X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZNL$f\$fW w X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(Dr H DYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(/ L\(D(=2 fDo59 fDo-@ fDo G H ($AT(<$W(5F ((L AYfo-  [fAfA[YfoYY. XfAff  fAfrW( fAvX(frX(YY(YX YX Y(  Y\( YX5 X YYX YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZyKD$HffWD  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZKD$HffW  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZJL$HffW  fYXD$@Z{fZ{HD$XdH3%(uHh[]JDUS(Hh(D%r H DYL$YXXdH%(HD$X1EXXJfEfEHGHD(: HHT(D(=9 fDo5@ fDoW (D((=b H AT( c AXDWfo53 A(AY[fAf [YfoYY%6 fAff fAfrW(! fAvXA(frXX(YY(YX YX  Y( Y\(# YX=  X" YYX% YX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ GD$ffW L$ fXL$YZCXT$Z3ofHt$H|$L$ ZUGD$ffW  L$ fXL$YXT$ZsfZs fHt$H|$ZFL$ffW  YXD$ZCfZCFDIHF(% LH( LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B G,HHEL9t).~ w5 .v(@[]A\f.DIHF(% LH( LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.Br E,HHEL9t).N w5P .v(@[]A\f.ATUSHY ^D$ DIHF(- LH(% LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=4 _(D,HHEL9t ^D$ . v H[]A\ffffff.ATUSH ^D$ DIHF(%6 LH(8 LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.= _( 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [7j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.ATUSH dH%(HD$1LD&fAnEf`fafp?hI1HHHAofofdfftK$EHA)f.tD E8~DEHAfufAnf`fafpII9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?O2ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.ATUSH dH%(HD$1LD&fAnEf`fafp?hI1HHHfAofofdfftK)$EHA)f.tD E8~DEHAfufAnf`fafpII9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?O/ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.ATUSH0dH%(H$(11f$D@fEfo5 HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h f f Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Kd Gd Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h a a Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H _ _ GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ ff.AADL$T$AD$Efo% I fnfafpfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoF I1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ DF @F H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-fD H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_Nrfffff.AWAVAUATUSHHD$ < dH%(HD$81< H$DH$GF BfDP1fIfo%: I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_@lAAEAfoT5 IIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD3 D$L$dH%(HD$81L$DfDfDfDWDxfEfo%g2 MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_eff.AWAVAUATUSHdH%(H$1$ / / H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-- I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_\@AWAVAUATUSHHD$ &' dH%(HD$81' H$DH$GF BDpffIIfID(N<1D(fo%b% IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_ WUSH(L$ (H,HHfHt$H|$\$HZVL$f\$fW w X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZVL$f\$fW  X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(D HW'DYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD( L\(D(= fDo5 fDo- fDo  H ($AT(<$W(5 (( AYfo- [fAfA[YfoYY XfAff J fAfrW(v fAvX(frX(YY(YX] YXc Y(i Y\(| YX5b X{ YYX~ YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZRD$HffW  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZtRD$HffW?  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZRL$HffW  fYXD$@Z{fZ{HD$XdH3%(uHh[]QDUS(Hh(D% HW#DYL$YXXdH%(HD$X1EXXJfEfEHGHD( HHT(D(= fDo5 fDo (D((= H AT(  AXDWfo5 A(AY[fAfZ [YfoYY% fAffU fAfrW( fAvXA(frXX(YY(YXd YXj Y(p Y\( YX=i X YYX YX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ OD$ffW L$ fXL$YZCXT$Z3ofHt$H|$L$ ZND$ffW L$ fXL$YXT$ZsfZs fHt$H|$ZSNL$ffW ! YXD$ZCfZC7NAADT$T$AD$Efo%: fnfafpfoffsf A@IHHL AfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfo IIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%4 LH(6 LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B =J,HHEL9t). w5 .v(@[]A\f.DIHF(% LH( LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.B I,HHEL9t).~ w5 .v(@[]A\f.ATUSH ^D$ DIHF(- LH(% LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=d _(G,HHEL9t ^D$ .' v H[]A\ffffff.ATUSH9 ^D$ DIHF(%f LH(h LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.= _(lF,HHEL9t ^D$ . v H[]A\ffffff.H(dH%(HD$1HfHHHDHH9fu$D$$D$D$D$D$D$D$D$D$ D$ D$ D$ D$ D$D$trtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(Hf"C@H(dH%(HD$1VfɍHH) $HHfHfo$fFH9)$uH4$HD$AIfAIAEAAEII EII(EIH8I0EDAfADIIDAADII DII(DIH8I0DtrtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(fH)$DB@AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@AWAVAUATUSH(D$H|$dH%(H$1Ht$HT$ AHL$(LD$0L$`L$hL$pL$xH$H$fAIIHILLO((L(L(EIHHHHHHIA(AYAȱYJD(YDAYXQYAYVXYAYWXYAYXAHM9YAYX+MMMMLL$$$$$$D$D$DX$D$DX$D$DX$D$DX$D$DX$$DX$$X$$X$$X$X$  d$ll$hA#Ak((l$A_A$$|$`DD$\DL$XDT$fք$A($A^($t$\$ h>fք$Dl$DDd$@DX$A]DX$AU$L$Dl$DDl$TDd$@Dd$P>fք$L$ D$$$=fք$D\$8DT$((d$0$$|$ 7fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$A7fք$L$0D$ $$7fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$6fք$L$0D$ $$6fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h,6fք$L$0$$D$ 6fք$$$X$[X$L$|$`t$@$5fք$L$0D$ $$5fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$o2ffffff.D@foHIfo IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfoH1fo Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z-!2X\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z,q1X\$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XFXD$tXHD$dH3%(uH(fH)$.ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf-fff.SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [,j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH ['j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$p AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$D\$D$A(fD$xA(D\$<\$|T$xDT$ fD$p|$Pt$TX|$p[Xt$t|$4$Dl$DDd$@A(A(D\$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ATUSH0dH%(H$(11f$D@fEfo5HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$fDfof8 <f8fA8fDfAofD8 f8ffofAofD85fA8fEfD)$fAofD8~fA8fDoL$fEofD8fDfAofEofD8~f8~fE8fDfof8-x~f8fDfof8a~fDfof8%_~fA8f8ffAofD81~f8)$fof85'~fA8ffAofDffofA8D)$fD85}f8 }f8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85}f8p}fD8ffAofDof8c}fE8)\$XfAofAfEofD8-/}fD85%}f8fDfAofD8%}D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8|fDol$fE8fEfEofD8%|fEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h ;n7nHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_ÐAWAVIAUATUSD$h KkGkHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_Ð1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%-fHHHE11fo'fBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fD1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%`HHHE11fo`BofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fDAWAVAUATUSHD$h ]]Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h [[Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h {XwXHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h UUHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H 8S4SGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_sff.AADL$T$AD$Efo%<fnf8-]>foffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{Afo:I1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ t:p:H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-F8H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_.ffffff.AWAVAUATUSHHD$ 0dH%(HD$810H$DH$GF BfDP1fIfo%.I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_ `AAEAfo4)IIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD*(D$L$dH%(HD$81L$DfDfDfDWDxfEfo%G&MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_Yff.AWAVAUATUSHdH%(H$1$ !$$H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-!I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_P@AWAVAUATUSHHD$ VdH%(HD$81BH$DH$GF BDpffIIfID(N<1D(fo%BIMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_KUSH(L$ (H,HHfHt$H|$\$HZJL$f\$fW WX\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZIL$f\$fW X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(DH7DYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(oL\(D(=rfDo5yfDo-fDo H ($AT(<$W(5((AYfo-`[fAfA[YfoYYnXfAff *fAfrW(VfAvX(frX(YY(YX=YXCY(IY\(\YX5BX[YYX^YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZFD$HffW $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZTFD$HffW $fXL$<YXT$@ZcfZc uMfHt$@H|$HZEL$HffW fYXD$@Z{fZ{HD$XdH3%(uHh[]EDUS(Hh(D%H7DYL$YXXdH%(HD$X1EXXJfEfEHGHD(zHHT(D(=yfDo5fDo(D((=H AT( AXDWfo5sA(AY[fAf:[YfoYY%vfAff5fAfrW(afAvXA(frXX(YY(YXDYXJY(PY\(cYX=IXbYYXeYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ BD$ffW L$ fXL$YZCXT$Z3ofHt$H|$L$ ZBD$ffW` L$ fXL$YXT$ZsfZs fHt$H|$Z3BL$ffW  YXD$ZCfZCBA։DT$T$DD$fo% fAnf8- foffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%LH(LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B>,HHEL9t).w5.v(@[]A\f.DIHF(%LH(LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.B<,HHEL9t).^w5`.v(@[]A\f.ATUSHi^D$ DIHF(-LH(%LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=D_(;,HHEL9t ^D$ .vH[]A\ffffff.ATUSH^D$ DIHF(%FLH(HLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=_(L:,HHEL9t ^D$ .vH[]A\ffffff.DIfHFfo-LHfo%LD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ %fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$!%fք$L$0D$ $$$fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$$fք$L$0D$ $$l$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h $fք$L$0$$D$ #fք$$$X$[X$L$|$`t$@$#fք$L$0D$ $$b#fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$O ffffff.D@foHIfo IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfoH1fo Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fD@fo gHIIJ HHf8GH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo lH1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z!X\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZqX\$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XFXD$tXHD$dH3%(uH(fH)$ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hffff.SH dH%(HD$1ffnAf8tbDXfoIIIIAofofdfft+$Ht D E8ELHfufAnf8IM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [ffffff.ftHNUSZIIAA9DGۃ9AESA@D D8ALAHE9uD9D)DBDݍKE)AAAffnLD.1f8fAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA@DSH dH%(HD$1ffnAf8tbDXfoIIIIfAofofdfft+)$Ht D E8ELHfufAnf8IM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [ffffff.ftHNUSZIIAA9DGۃ9AESA@D D8ALAHE9uD9D)DBDݍKE)AAAffnLD.1f8fAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ATUSH0dH%(H$(11f$D@fEfo5HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$fD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJhLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGfD$hd$hl$l((l$ANAF$$fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNJfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ gcGF BnL$IHL$HHML $HHD$DA_HT$HAIKICIfD$8H$d$8l$<((l$ Hd$kfD$0l$ M(D$4XL$0XEd$(MEANAF"fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIfD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFRfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H ȤĤGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h ::Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h [8W8Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h 55Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H 33GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_KSff.AADL$T$AD$Efo%JfnfafpfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ TPH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_Efffff.AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BfDP1fIfo%'I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_?AAEAfoIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD D$L$dH%(HD$81L$DfDfDfDWDxfEfo%MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_8ff.AWAVAUATUSHdH%(H$1$ H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_0@AWAVAUATUSHHD$ 6dH%(HD$81"H$DH$GF BDpffIIfID(N<1D(fo%IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_`*USH(L$ (H,HHfHt$H|$\$HZ)L$f\$fW X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZO)L$f\$fW X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(DHDYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(L\(D(=fDo5fDo-fDo H ($AT(<$W(5((AYfo-[fAfA[YfoYYXfAff fAfrW(fAvX(frX(YY(YXYXY(Y\(YX5XYYXYX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $Z&D$HffW $fXL$<YXT$@Z;fZ{fHt$@H|$H $Z%D$HffW $fXL$<YXT$@ZcfZc uMfHt$@H|$HZW%L$HffW %fYXD$@Z{fZ{HD$XdH3%(uHh[]%%DUS(Hh(D%HDYL$YXXdH%(HD$X1EXXJfEfEHGHD(HHT(D(=fDo5fDo(D((=H AT( AXDWfo5A(AY[fAf[YfoYY%fAfffAfrW(fAvXA(frXX(YY(YXYXY(Y\(YX=XYYXYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ X"D$ffW#L$ fXL$YZCXT$Z3ofHt$H|$L$ Z!D$ffWL$ fXL$YXT$ZsfZs fHt$H|$Z!L$ffW aYXD$ZCfZCw!AADT$T$AD$Efo%zfnfafpfoffsf A@IHHL AfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%tLH(vLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B},HHEL9t).w5.v(@[]A\f.DIHF(%DLH(FLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.BM,HHEL9t).w5.v(@[]A\f.ATUSH^D$ DIHF(-LH(%LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=_(,HHEL9t ^D$ .gv]H[]A\ffffff.ATUSHy^D$ DIHF(%LH(LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=T_(,HHEL9t ^D$ .v H[]A\ffffff.H(dH%(HD$1HfHHHDHH9fu$D$$D$D$D$D$D$D$D$D$ D$ D$ D$ D$ D$D$trtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(Hf"@H(dH%(HD$1VfɍHH) $HHfHfo$fFH9)$uH4$HD$AIfAIAEAAEII EII(EIH8I0EDAfADIIDAADII DII(DIH8I0DtrtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(fH)$@AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@AWAVAUATUSH(D$H|$dH%(H$1Ht$HT$ AHL$(LD$0L$`L$hL$pL$xH$H$fAIIHILLO((L(L(EIHHHHHHIA(AYAȱYJD(YDAYXQYAYVXYAYWXYAYXAHM9YAYX+MMMMLL$$$$$$D$D$DX$D$DX$D$DX$D$DX$D$DX$$DX$$X$$X$$X$X$  d$ll$hA#Ak((l$A_A$$|$`DD$\DL$XDT$((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$ fք$L$0D$ $$U fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$ fք$L$0D$ $$ fք$D$D$DX$]DX$U$L$DD$@DL$tDD$hl fք$L$0$$D$ @ fք$$$X$[X$L$|$`t$@$fք$L$0D$ $$fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ffffff.D@fo'HIfo (IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo,H1fo .Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZaX \$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z&XY\$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XXD$tXHD$dH3%(uH(fH)$ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf,fff.SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [Wj|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ ATUSH0dH%(H$(11f$D@fEfo5 HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$fD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJhLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ .*EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGfD$hd$hl$l((l$ANAF$$fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNJfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9TKJffo=E1E1Ƀfo5fo-fo%ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9TKJffo=4E1E1Ƀfo50fo-6fo%;ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ _[GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIfD$8H$d$8l$<((l$ Hd$KfD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIfD$8H$d$8l$<((l$ Hd${fD$0l$ M(D$4XL$0XEd$(MEANAF2fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BWAo`fE8D)T$XfEofD8 WfD8AopfE8fDfof8-VAoYf8D)D$hfEfDofof8%VAoQfA8fEffof8VfA8AoAfDofof8{VAoIf8fAffofof8 VVffof8fA8fDoT$xf8CVfDo$ffofAoffAof8fA8fDo$fD8VffAofDo$f8 UfAfEo)L$xfAofD8fA8fAfEofEofD8UfD8UfEfEofD8-UfD8fEofEofD8wUfE8fEfEofD8 MUfD8D)$fEfEofDof856UfE8fDod$fDfEfofDof8 Uf8%TD)$fD8ffof8Tf8fDoL$XfA8)$fofof8 TfAfA8ffAofD8 TffAofD8%xTfA8f8fEfDod$hffEofAofD85YTfA8fD8fDfAof8*TfDfof8-Tf8fDofof8TfA8ffAofAfDod$xfA8)l$fAof8ffAofEof8-SfD8SfD8SfD8fDfAofD8-SfA8fEfAfDof85nSD)T$XfDof8jSfD8fE8fDo$ffof8%3SfEf8fDo)t$hf8SfofAofD8SfA8fD8fAfEoffo$fD8-RfD8)d$xfof8RfA8ffof85RfAfA8fDo$fDfAofD8%~RfDfof8 |Rf8fA8fDfAofD8 MRf8ffofAofD85ARfA8fEfD)$fAofD8RfA8fDoL$fEofD8fDfAofEofD8Qf8QfE8fDfof8-Qf8fDfof8QfDfof8%QfA8f8ffAofD8qQf8)$fof85gQfA8ffAofDffofA8D)$fD852Qf8 Qf8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85Pf8PfD8ffAofDof8PfE8)\$XfAofAfEofD8-oPfD85ePf8fDfAofD8%\PD)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8PfDol$fE8fEfEofD8%OfEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h BBHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_ÐAWAVIAUATUSD$h #??Ht$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_Ð1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%m9HHHE11fog9BofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fD1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%4HHHE11fo4BofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fDAWAVAUATUSHD$h 11Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h ..Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h S,O,Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h ))Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H ' 'GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_+Gff.AADL$T$AD$Efo%*fnf8-foffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{Afo I1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ LHH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo- H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_n9fffff.AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BfDP1fIfo%I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_`3AAEAfo-tI1fofIffofo foffofsfffsfoffofffffffsf8) HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [fAWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDGDxffoMILLIfoN9fofoLfDofDof.fDoHHHHIfoPfEofDfofAsfDfoKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAffoUfDfEfDofEfEofoffsffDffDfAffAoL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofofAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD) $MM1)T$)d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_,ff.AWAVAUATUSHdH%(HD$x1$ H|$`H4$HT$GL$H$FH$ L$BL$ L$AAA@MfP1Hfo[H)l$P)l$@)l$0)l$ )l$fo-6fDfAo4fAofoffofsfffofsfffoffo$ffffofffofsffofffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$fodfo)\$foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$ fAo$fo)\$ foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$0fAodfo)\$0foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$@fo)\$@fAoHH9foffsffffffffsf8f8!fsf8!fsff8!fsf8!ff[XL$P)L$P4IIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`L$Pt$PHfnD$PH XHHt$PXH4$HL$PT$PLH fnD$PXNXNHT$PHT$L$PD|$PIfnD$PXJI L|$PMXI JL$P|$PH|$hfnD$PL|$PXIXII IL$PDT$PfnD$PAXHL|$PAXAHL$P|$PAfnD$PXHXHHD$H|$ fnD$LT$0H XH HD$PH|$L$PI HD$@XNH fnD$ NL$LT$XJXJfnD$0L$XIHD$XIfnD$@L$AXHAXAHA$LT$`HDLHD$fDIAQIA{EyHfHfIIljDAc)ƉAcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*L<$lje)lj@*AXGAGfAXAA|$Ad$fAljAljEA*L|$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;L$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_$fDAWAVAUATUSHHD$ dH%(HD$81H$DH$GF BVfDP1IfoKI)d$ )d$)$$fo%1fo,fAofDoffofAsfDfAofsfffofEofofffDfofsfffAfAffofofffffffsf8f8!fsf8!fsf8!ffofsf8!ffofo,fof[X $foffsfff) $fofffffsf8f8!fsf8!fsf8!fsff8!ffofof[X\$foTHL9foffsf)\$fofffffffsf8f8!fsf8!fsf8!ffofsf8!ffof[XL$ )L$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA}AOdIDIEXHDyDiIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_0AAEAfoDIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDWDxfEfo%WMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(H$1$ H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BDpffIIfID(N<1D(fo%RIMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_ AAEAfo-$IIHIfoN f.HHIAHfoffofsfffsffofofffffffsf8OL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [I@AWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDGDxffo8MILLIfoN9fofoLfDofDof.DHHHHIPfEofDfofAsfDKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAfUfDfEfDofEfEofoffsffDffDfAfAL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofofAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD $MM1T$d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(H$1$ H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-HD$ LLHD$Ht$L(HD(ID(MD(fofDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofg[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDof`[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofb[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[AXf8!fsf8!fDof[XYI9foffsfffDfAoffDffAfsf8f8!fsf8!fsf[Xf8!fsf8!f[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$fDIAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@A։DT$T$DD$fo%fAnf8-.foffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoDIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfAWAVAUATUSHdH%(H$1$ H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-޿HD$ LLHD$Ht$L(HD(ID(MD(fofDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfg[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf`[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfb[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf[XYfDoI9foffsfffDfAoffDffAfsf8f8!fsf8!fsff8!fsf8!ff[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$IAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_fff.AWAVAUATUSHHD$ ޺dH%(HD$81ʺH$DH$GF BDpfIIMIfoDI(N<1(fo.LHHIDAIIxfEofDfDofAsfDARfAsfDfEofEoffofEfEfEoffsffDfAfEfDfAofEoffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAoED$fsf8!fffAofD[fAofsfXfAoffAfAffEfAfsf8fEof8!fsf8!fsff8!fsf8!fASf[XfAofoL9ffsfffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAofsf8!ff[X4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A|AOd-I@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_xAWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ LMD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_AWAVAUATUSHD$ L$dH%(H\$x1AH$EGF BfALYLMIHL)|$PL|0L)|$@)|$0)|$ )|$)<$fDI H H I I fAo[foSfofAoCfsfoKfofsf:Ufofsfof:Uf:Ufsfof:UfoffffofffoMffofofoUfofofsf:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[X$$f[fAoUXL$fofs)$$)L$fAoMfof:Ufsf:Ufffoffffofoff8#fofsf8#ff8#fsf8#[Xd$ f[XL$0)d$ )L$0fAod$fAoL$M9fofofsf:Ufsfof:Ufffofffofff8#fsf8#ff8#fsf8#[XT$@f[XD$P)T$@)D$PIL<$Hl$(ILl$ H\$LMMMLLt$L\$D<$I fLd$0fn,$Hl$ D4$Hl$@I fn$H\$hXD,$H\$PI L\$L\$8Xfn4$D$$I fn$,$fn$$L\$0X$L\$HXfn $L<$XX,$L4$L\$@X$L\$XL,$IX4$I L$$XLt$Hl$ X$L,$IH\$hI X$$L,$L|$0X $Ld$@$H fn<$D4$I Xfn<$,$H Xfn<$D<$Xfn<$D$$Xfn<$D$I Xfn<$L4$MX$H,$I X4$XL4$MI X$L4$X$$L$X $H$_X,$(YX/(VYYXX6JD$ASAN$IIAXEpHDiiIffIAEHDEE)EEqA\-AiEEDADAED)EErA**AjEEDADAED)EDpXOXEDOffA*Dh*DAADEA)L9XNEXNff*A*XJXJHD$xdH3%(uHĈ[]A\A]A^A_؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo jH1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.AWAVAUATUSHdH%(H$1$ iiH|$H $LD$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfDohHD$ LLHD$Ht$L(I(I(M(fo=ifofIIIAOIHHHEYfDof8fE8fE8fA8fEofE8fD8fAsfE8EJfE8fEofD8fA8fE8fE8fDofDofE8fE8fEofDofDofE8fAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXEHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDIfEofD8fE8fE8fE8fE8fEofE8fAsfE8fE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDOI9fEofD8fE8fE8fE8fA8fsfE8fA8fD8!fsfD8!fsfEE[AXfD8!fsf8!fA[XHD$ Ht$(t$0H $l$@IHHd$PIII\$`T$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$(LT$HDLHD$IAIIECEyHfHfIIADAc)ljAcDADCcAljAADEA*AcA)EA*AXBABfAX A DEefAljAADEA*AeA)EA*XFFfXED$Ad$fAljAADEA*AAd$A)EA*XBBfX  EEAefAljAADEIA*L<$AAeA)EA*AXGAXAfAGE~fAAAfAAfEA*LD$ljA)L;L$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_脖@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-aHD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%aDIIHAGHHHHAYfof8f8f8f8fDof8f8foq^fsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A__ffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-XHD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%}YDIIHAGHHHHAYfof8f8f8f8fDof8f8foAVfsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_/ffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$fPL$H$H$1L$H)$H)$)$)d$p)d$`)d$P)d$@)d$0)d$ )d$fo-APfo%Qfo1NfAo fAo4fof8f8f8f8fof8f8fsf8fof8fof8f8f8f8fof8f8fofof8fof8#fsf8#ff8#fsf8#[X|$f[X\$ )|$fo)\$ fo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$0f[X\$@)|$0fo)\$@fAofof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$Pf[X\$`)|$Pfo)\$`fAo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$pf[fAo4X$HH9)|$pfo)$fof8f8f8f8f8f8fof8#fsf8#ff8#fsf8#[X$f[X$)$)$KHLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$fL$t$ H fDnL$ T$ fDnl$ D$ H fDnT$ |$ DXfDnd$ H$DXDT$ DXH fDnD$ D|$ DXfDn\$ D\$ I fn|$ T$ DXfnT$ l$ DXfnt$ \$ XfnL$ Ht$ XHt$DXL$ I XH XH Ht$DXl$HD$LDXT$H|$H DXd$LT$DXD$HD$DX\$L\$II X|$H$L\$IH$XT$I Hl$Xt$L\$XL$LT$0D$L|$@H fn\$|$H fnl$HT$PDT$Ht$`DXDXfnl$D|$fnd$L\$pI T$DXI DXfnd$t$fn\$D\$H DXDXfn\$H$H$X\$H fn\$l$Xfn\$Dd$I Xfn\$H|$l$LT$DXT$L|$II d$LL|$XDXD$H Ht$\$HT$X|$H\$HAXH XT$H\$Xt$Ld$XL$HD$AXD(DXL$H$DYAXhA(EXDD(HD$DYAX((`A(YH$XX (QYYXX9AAH$4L$L$HDH$H$L$LHD$DIASIAyE{HfHfIIljDAa)ƉAaD{‰kAlj@Alj@EA*ljljk)lj*AXBABfAX A }mfAlj@Alj@EA*L|$ljm)lj*AXGAGfAXAA|$Al$fAlj@Alj@EA*L$ljAl$)lj*AXGAGfAXAA}f@AljAmAlj@EIA*ljljAm)lj*XAX  fAE~AnfljAljAn*ljƉA)L;L$*AX@A@AXA H$dH3%(uH[]A\A]A^A_w{DIHF(%ELH(ELDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.BBC{,HHEL9t).Cw5 C.v(@[]A\f.DIHF(%tDLH(vDLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.BB}z,HHEL9t).Aw5A.v(@[]A\f.ATUSH>^D$ DIHF(-&CLH(%(CLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=@_(,y,HHEL9t ^D$ .@v@H[]A\ffffff.ATUSH=^D$ DIHF(%ALH(ALDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=?_(w,HHEL9t ^D$ .G?v=?H[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1EfAHL$@IHT$HD$IHt$H<$)|$0O D()|$ D(LD(D(D(D(D(fo-@fo%Afo5AIHHCHHHHA_fof8f8f8f8fDof8f8fo:>fsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$ f[XD$0)T$ )D$0D$L$LT$M$f$Dt$pD$D$D$D$D$$$LT$XDT$pD$DX$DXX$X$$X$$DXT$tD$DX$$LT$LT$@X$X$HD$PX$XDXT$xXX$X$X$X$DXT$|X$XD(A~X$DYX$XDXDX$X$EX(X$X$YDX$X$EDX$hX$(X$YX$DX$X$DXXX$ X$DDX$u](HD$XYYPXAX HD$`HAsAfKD8D(ILD(HD$h((M(($fDffADDffADDf|$ xfADDIAAIAoAQAgffAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*AۉH\$PDD)AXFAXAFfAf**DDЉ|$MD)XCX Cf f*\$ D*A\$0Ht$`)AXEAXMAEfAMf**HL$XXXIfIL$LfɉA‰@‰A*A@A)EA*XFXL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$Ldf*Y\,HfA*Y\,D$ gfA*Y\,)fA*AYA\,fH$dH3%(uH([]A\A]A^A_VlfDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1fH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ fo-t6fo%L7fod4fo5L7@fAo fAo<fof8f8f8f8fDof8f8fsfD8fofA8fof8ftffof8fDof8fDofDof8f8fDofDofD8fAofDofD8fAofE8#fsf8#fsf8#fDofDofDfA8#E[DXD$ fDof[X\$0D)D$ )\$0fofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$@f[X\$PD)D$@)\$Pfofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$`f[X\$pD)D$`)\$pfAofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DX$f[fAo<X$HH9D)$)$foftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[X$f[X$)$)$H\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$fL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH fDnL$PT$PH fDnl$PH$L$DL$ DXDXfDn\$0DL$PDL$@DXfDnT$Pt$PH fDnd$P|$PH fDnD$PDL$PDXfn|$PDT$PDXfnT$PD\$PDXfnt$P\$PXfnL$PHD$PXHD$ DXL$PHT$PXDXl$PH XHD$ DXT$ Ht$ DXd$ H|$ HD$0Ht$@DXD$ H$H H HD$ DX\$ Ht$ LH X|$ LT$`Ht$ LL\$pH XT$ Ht$ HH$H Xt$ Ht$ XL$ T$ H fn\$ l$ H fnl$ Dd$ I DXDXfnl$ Dl$ fnd$ Dt$ I DXI DXfnd$ DT$ fn\$ D\$ I DXI DXfn\$ \$ H Xfn\$ H$L$XӉD$ fn\$ DL$ I Xfn\$ Hl$ l$ Ld$ DXT$ Ll$ d$ Lt$ XDXD$ LT$ \$ L\$ AXX|$ H\$ HH XT$ H$H\$ AXXt$ LL$ XL$ HT$ hDXL$ D(AXA(DYEXDD(H$DY`A(AX((H$YX (XH$YYPXX8H$H$pfHDY,MD(LD(H$((L$(L$(HL$03DfDffDffADDf|$ fADDIABIEhARA`ffADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$p)E*ωA*)މAXAXGAfAGf*ΉH$*H$XXGfGDDfD)|$ *D*ʉΉAt$`AXAXFAfAFf*ɉ|$PH$)‰*AXKKfX\$@f@‰A*A@A)EA*XAX L;$A  HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTf@*Y\,7fA*Y\,D$ UfA*Y\,f*AYA\,fH$dH3%(uH[]A\A]A^A_`fDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hfHLt$HLHfo-*HD$@LLHD$8Lt$8H)|$ D(H)|$D(LD(MD(D(D(D(fo%++fo53+IIHAGHHHHAYfof8f8f8f8fDof8f8fo'fsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$f[XD$ )T$)D$ Dt$PHD$@Lt$HD$Dl$`IIH$fHD$II$D$D$$Dd$pDT$P|$`DX$XXDL$p$DXDXT$T$X|$d$X$$D$X$XXXDXXDXL$tX$X$X$X$DX$X$DXT$XX|$hHD$0X$DXL$xX$X$DXT$\X|$lX$DXL$|X$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$pH|$0HDLHD$@IARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_WDIfHFfo-_"LHfo%@"LD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ #Dfք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$Cfք$L$0D$ $$Cfք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$8Cfք$L$0D$ $$ Cfք$D$D$DX$]DX$U$L$DD$@DL$tDD$hBfք$L$0$$D$ Bfք$$$X$[X$L$|$`t$@$.Bfք$L$0D$ $$Bfք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$>ffffff.D@fog HIfo h IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfolH1fo nHf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z:>XI\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Zf9=X\$ X\$,HLDCKL9uH []A\ATUS((H@XH- XY(dH%(HD$81XXX5FY|$(DQHGD(5LHLL(f(H X\(^f: Y\f:AXf[)$$H4$HL$LcH B$BD@`$DHcH `@$D@`$D@`L9YIJHHσu!HD$8dH3%(H@[]A\@\$ HZL$L$I\$ f(L$T$H\D$$ZY7;X$T$X,H DEML9uO9ATUS((HPXH- XY(dH%(HD$H1XXX56Y|$(DAHGD(%LHHt(f(H X\(^f: Y\f:AXf[D$ HcL$ $DHcL$$`@$DHcL$(`@$DHcL$,`@$D@`H9]IHHHσuHD$HdH3%(HP[]A\\$0HZL$L$I\$0f.(L$T$H\D$\$ ZH59X{\$ T$X,H DEML9uIq7H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XXD$tXHD$dH3%(uH(fH)$6ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(HfL6fff.H(dH%(HD$1DffAnf8fot3HHHHH@ofoHfdH9f8fouffAn$f8f8<$fofsf8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DH(dH%(HD$1DffAnf8fot3HHHHH@fofoHfdH9f8fouffAn)$f8f8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$%AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$`!AWAVAUATUSHdH%(HD$x11fD$^cD@ffo5KHIIfoN oHHo@L9fofoffsfffsffofDofffDffAfffufLffsfl$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu HĈ[]A\A]A^A_E1E1AWAVAUATUSHdH%(HD$x11fD$^kD@ffo5HIIfoN HH@L9fofoffsfffsffofDofffDffAfffufofsLf8d$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu'HĈ[]A\A]A^A_f.E1E1AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5IfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufHfHfsff:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)l$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu&HĈ[]A\A]A^A_fE1E1`AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5IIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufofsHHf8f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)d$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu%HĈ[]A\A]A^A_E1E1H(dH%(HD$1DffAnDf8DHI1foIIIIM9Afofdfofvf8r$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)fnIM9f8_A8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12ffffff.ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHAofofdfftC$EHA)f.tD E8~DEHAfufAnf8II9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?G tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.USH(dH%(HD$1ffnˉf8DXfoI1IIIfAo fo)$$fd$fofvf8L$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)fnf8IM9<8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHfAofofdfftC)$EHA)f.tD E8~DEHAfufAnf8II9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?gtFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.US8LO HF L9AH9A HB L9AH9D A Afo5E1E1fo-AfDoAfo=ABoBoTfofA8fof8FoLf8f8fBoffofAofA8f8fDof8fD8fD`ffAfDofhfD`fofhfDof`fEofDhfDofAofEffDofAofDofAfD8f8fD`f8fAfDofAf8fEfhfD8ffAofDffD8fAf8f8fEffAffofhf`BdB I A9DHHHHD9tUHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@US8LO HF L9AH9A HB L9AH9D A Afo5 E1E1fo- AfDo Afo=ABoBoTfofA8fof8FoLf8f8fBoffofAofA8f8fDof8fD8fD`ffAfDofhfD`fofhfDof`fEofDhfDofAofEffDofAofDofAfD8f8fD`f8fAfDofAf8fEfhfD8ffAofDffD8fAf8f8fEffAffofhf`BdB I A9DHHHHD9tUHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ fbEGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGTfD$hd$hl$l((l$ANAF$$ fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $OPfD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGfD$hd$hl$l((l$ANAF$$pfD$`HD$ \$ D$dXL$`XC$ CH.fD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJXLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9TKJffo=E1E1Ƀfo5fo-fo%ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9TKJffo=ԾE1E1Ƀfo5оfo-־fo%۾ABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h ;7H Ht$HT$CHL$LD$HG B AAA@H|$@IfHD2HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICI!fD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMSHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIQfD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H HDGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h {SwSHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h PPHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h ;N7NHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H KKGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BH:HLd$8Ll$@GF Bg1DfADyIEpfHIDADAA)DAADAYEEqAADAAljAEA*ljDA)*XGGfXAlEtlfɉAADAAljAEA*ljDA)*XFFfXEtmA\mfHDAAljAADAEA*A‰AA)9l$HEA*XJJX[]A\A]A^A_AWAVAUATUSD$H ~FzFLd$8Ll$@GF Bg1DfADyIEpfHIDADAA)DAADAYEEqAADAAljAEA*ljDA)*XGGfXAlEtlfɉAADAAljAEA*ljDA)*XFFfXEtmA\mfHDAAljAADAEA*A‰AA)9l$HEA*XJJX[]A\A]A^A_AUATIUS1HHAu0]D AL(zy,fAD]HA9v/D.@w@.vD(fDH[]A\A]ffff.AUATIUS1HHAu0]D @L(x,fAD]HA9v/D.^@wX@.vD(fDH[]A\A]ffff.tpATUL$SHHI)fB?]x,HHEL9t).?w ?.v(@[]A\f.tpATUL$SHHI)fBr?w,HHEL9t).N?w P?.v(@[]A\f.t|ATUSL$HHHID$ 0>_(Lw,HHEL9t ^D$ .>v>H[]A\fffff.t|ATUSL$HHHID$ 0d>_(v,HHEL9t ^D$ .'>v>H[]A\fffff.AUATAUSIHHtlHFrH(5>HH(7>HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%d=d(u,fA\HA9v0D.7=w-1=.vD(H[]A\A]DAUATAUSIHHtlHFrH(5=HH(7=HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%d<d(t,fA\HA9v0D.7<w-1<.vD(H[]A\A]DAUATAUSIHHtlHFrH(5<HH(7<HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%d;d(s,fA\HA9v0D.7;w-1;.vD(H[]A\A]DAUATAUSIHHtlHFrH(5;HH(7;HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%d:d(r,fA\HA9v0D.7:w-1:.vD(H[]A\A]DAAEAfod:I1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHD:D$L$dH%(HD$81L$DfDfDfDWDxfEfo%w7MILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_jff.AADL$T$AD$Efo%3fnf8-=5foffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{Afoh1I1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ 22H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-&/H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_]fffff.AWAVAUATUSHHD$ &)dH%(HD$81)H$DH$GF BfDP1fIfo%%I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_WAAEAfo- I1fo Iffofo foffofsfffsfoffofffffffsf8) HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [fAWAVAUATUSHHD D$L$dH%(HD$81L$DfDfDfDGDxffo8MILLIfoN9fofoLfDofDof.fDoHHHHIfoPfEofDfofAsfDfoKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAffoUfDfEfDofEfEofoffsffDffDfAffAoL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofofAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD) $MM1)T$)d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_Pff.AWAVAUATUSHdH%(HD$x1$ H|$`H4$HT$GL$H$FH$ L$BL$ L$AAA@MfP1HfoH)l$P)l$@)l$0)l$ )l$fo-fDfAo4fAofoffofsfffofsfffoffo$ffffofffofsffofffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$fodfo)\$foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$ fAo$fo)\$ foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$0fAodfo)\$0foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$@fo)\$@fAoHH9foffsffffffffsf8f8!fsf8!fsff8!fsf8!ff[XL$P)L$P4IIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`L$Pt$PHfnD$PH XHHt$PXH4$HL$PT$PLH fnD$PXNXNHT$PHT$L$PD|$PIfnD$PXJI L|$PMXI JL$P|$PH|$hfnD$PL|$PXIXII IL$PDT$PfnD$PAXHL|$PAXAHL$P|$PAfnD$PXHXHHD$H|$ fnD$LT$0H XH HD$PH|$L$PI HD$@XNH fnD$ NL$LT$XJXJfnD$0L$XIHD$XIfnD$@L$AXHAXAHA$LT$`HDLHD$fDIAQIA{EyHfHfIIljDAc)ƉAcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*L<$lje)lj@*AXGAGfAXAA|$Ad$fAljAljEA*L|$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;L$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_FHfDAWAVAUATUSHHD$ fdH%(HD$81RH$DH$GF BVfDP1IfoI)d$ )d$)$$fo%fo,fAofDoffofAsfDfAofsfffofEofofffDfofsfffAfAffofofffffffsf8f8!fsf8!fsf8!ffofsf8!ffofo,fof[X $foffsfff) $fofffffsf8f8!fsf8!fsf8!fsff8!ffofof[X\$foTHL9foffsf)\$fofffffffsf8f8!fsf8!fsf8!ffofsf8!ffof[XL$ )L$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA}AOdIDIEXHDyDiIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_BAAEAfo IIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDZ D$L$dH%(HD$81L$DfDfDfDWDxfEfo%MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_KHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_;'ff.AWAVAUATUSHdH%(H$1$ A=H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-HD$ LLHD$Ht$L(HD(ID(MD(foVfDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofg[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDof`[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofb[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[AXf8!fsf8!fDof[XYI9foffsfffDfAoffDffAfsf8f8!fsf8!fsf[Xf8!fsf8!f[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$fDIAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_T@A։DT$T$DD$fo%\fAnf8-foffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfAWAVAUATUSHdH%(H$1$ 1-H|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-~HD$ LLHD$Ht$L(HD(ID(MD(foFfDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfg[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf`[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfb[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf[XYfDoI9foffsfffDfAoffDffAfsf8f8!fsf8!fsff8!fsf8!ff[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$IAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_Lfff.AWAVAUATUSHHD$ fdH%(HD$81RH$DH$GF BDpfIIMIfoI(N<1(foLHHIDAIIxfEofDfDofAsfDARfAsfDfEofEoffofEfEfEoffsffDfAfEfDfAofEoffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAoED$fsf8!fffAofD[fAofsfXfAoffAfAffEfAfsf8fEof8!fsf8!fsff8!fsf8!fASf[XfAofoL9ffsfffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAofsf8!ff[X4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A|AOd-I@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHxD$ 62H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ LMD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_qAWAVAUATUSHD$ L$dH%(H\$x1AH$EGF BfALYLMIHL)|$PL|0L)|$@)|$0)|$ )|$)<$fDI H H I I fAo[foSfofAoCfsfoKfofsf:Ufofsfof:Uf:Ufsfof:UfoffffofffoMffofofoUfofofsf:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[X$$f[fAoUXL$fofs)$$)L$fAoMfof:Ufsf:Ufffoffffofoff8#fofsf8#ff8#fsf8#[Xd$ f[XL$0)d$ )L$0fAod$fAoL$M9fofofsf:Ufsfof:Ufffofffofff8#fsf8#ff8#fsf8#[XT$@f[XD$P)T$@)D$PIL<$Hl$(ILl$ H\$LMMMLLt$L\$D<$I fLd$0fn,$Hl$ D4$Hl$@I fn$H\$hXD,$H\$PI L\$L\$8Xfn4$D$$I fn$,$fn$$L\$0X$L\$HXfn $L<$XX,$L4$L\$@X$L\$XL,$IX4$I L$$XLt$Hl$ X$L,$IH\$hI X$$L,$L|$0X $Ld$@$H fn<$D4$I Xfn<$,$H Xfn<$D<$Xfn<$D$$Xfn<$D$I Xfn<$L4$MX$H,$I X4$XL4$MI X$L4$X$$L$X $H$_X,$(YX/(VYYXX6JD$ASAN$IIAXEpHDiiIffIAEHDEE)EEqA\-AiEEDADAED)EErA**AjEEDADAED)EDpXOXEDOffA*Dh*DAADEA)L9XNEXNff*A*XJXJHD$xdH3%(uHĈ[]A\A]A^A_fff.AWAVAUATUSHdH%(H$1$P H<$Ht$HT$GL$ L$(FH$0 H$8BL$@ L$HAAA@fHHL$(LHHHHD$ LMHD$HL$L(M(((D(D(D(D(D(DE1I I I H H AAH fEoH fDofsfAsAOfE:UAWfEofDofofE:UfDofsfsf:UfD:UfAofAoffAfEoEnfDfAfAVfAfEofDofsfA:UfAsfDofE:UfDofEfDfEfE8#fAsfDfE8#ffAfEfD8#fsf8#E[EXDofA[DXWfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[EXDjfA[DXRfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[EXDhfA[XPfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[AXDnfA[XVfEoI9fDofAsfsfA:UfDofE:UfDofDffAff8#fEfsfEf8#fA8#fAsfE8#f[XfDE[AXDd$0fHD$ D\$@DT$PIIHDL$`HII$DD$p$$$$DT$0HL$(|$@DXXl$`XDL$Pt$pDXDXT$4$X|$D$$XD$X$XXDXXXl$dDXL$TXt$tX$X$X$DX$X$DXT$8X|$HH$Xl$hDXL$XX$X$DXT$<X|$LXl$lDXL$\X$X$X$D(x(DYXt$xYX$DX$X$EXDXXt$|X$DHD$DX$h(DHD$YX(YXYX0AXQ!AAH$PHLHD$DIErIABAyIAqffHEHIDDEsAsD)A׉EDD*H<$D)Ds*sADXGXGfDfDDAD)Du*H|$*uDXGXGfAfDDAD)Et$*H|$*At$EXGXGffDIDE}*ljD)Eu*ΉAAAAXA)X Af* f*AXHL;L$AXAHA!H$dH3%(uH[]A\A]A^A_ffffff.AWAVAUATUSHH$P H|$Ht$HT$H$H$XGH$hFL$pH$ H$`BL$x AH$AdH%(H$1$A@fL$HH$L$HH$MH$LI)$HLL)$HLH)$)$)t$p)t$`)t$P)t$@)t$0)t$ @I H H H I H I fAoafAoAfofofoHfsfsf:UfoPf:Ufofofofsfsf:Uf:UfofoffffoZfffoffofoRfofsfof:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[Xd$ f[fo^XT$0fofs)d$ )T$0foVfof:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[Xd$@f[fAo^XT$Pfofs)d$@)T$PfAoVfof:Ufsf:Uffffoffofofff8#fsf8#foff8#fsf8#[Xd$`f[fo_XT$pfofs)d$`)T$pfoWfof:Ufsf:Uffffoffofff8#fsf8#foff8#fsf8#[X$f[X$)$)$fAogfAoWI9fofofsf:Ufofsff:Uffofffff8#fsf8#ff8#fsf8#[X$f[X$)$)$uH$LLH|$8L|$XH$L$HHHHIIHD$ H$H$Lt$HH$H$H$HD$(H|$PHt$xL|$PH$L|$hH$H$L$HD$0H$L$H$Lt$`H$HD$ L|$`HD$@L|$pL$Ht$pL$H$T$ fHt$0H$L$L$t$@H fDnL$@T$@fDnl$@D$@H fDnT$@|$@DXfDnd$@H$DXDt$@DXH fDnD$@D|$@DXfDn\$@DT$@I fn|$@T$@DXfnT$@\$@DXfnt$@D\$@XfnL$@Ht$@XHt$ DXL$@I XH XH Ht$ DXl$ HD$ LDXT$ H|$ H DXd$ Lt$ DXD$ HD$ DX\$ LT$ II X|$ H$LT$ H$XT$ H\$ LH Xt$ L$H\$ L|$PXL$ D$ H fn\$ |$ H fnl$ HT$`Dt$ Ht$pDXDXfnl$ D|$ fnd$ T$ I DXI DXfnd$ t$ fn\$ L$H L$H$DXDXDT$ fn\$ D\$ I Xfn\$ \$ Xfn\$ H|$ l$ Lt$ DXT$ L|$ II d$ XL|$ fn\$0LDXD$ Ht$ H XHt$0\$ HT$ X|$ L\$ IAXI H XT$ L\$ Xt$ Ht$ XL$ HD$ AXD(DXL$ HD$DYAXEXDD(hA(DYHD$`A(AX((HD$YXX (QYYXX9AAH$L$L$HH$LHD$ IErIABAyIAqffHEHIDDEsAsD)ADADD*H|$D)Ds*sADXGXGfDfDDAD)Du*H|$*uDXGXGfAfDDAD)Et$*H|$*At$EXGXGffDIDE}*ljD)Eu*ΉAAAAXA)X Af* f*AXHL;L$ AXAHAH$dH3%(uH[]A\A]A^A_ ffff.AWAVAUATUSHxD$ &"H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0D(LD(DA[I H H I I SfoESfsKfEofAsfD:UfDofsfof:UfD:UfsfD:UfofAofAofEoffAfADUffofEfA]fAofDofDofsfsfA:UfDofD:UfDffAofEfEfffA8#fD8#fAsfE8#[DXfsE[A]E[EXf8#fDofs[fDoEXEUDXfAofA:UfDofsfD:UfDffAofEfEfffA8#fD8#fAsfs[XfE8#E[f8#AXE[fDo[AXET$XAT$fAoM9fDofsfA:UfDofsffD:UfDfAofAfEffAf8#fsf8#f8#fs[X[f8#[X[XXt$0fIDD$Id$PLMM|$ MLl$@D $\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AQAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_QAWAVAUATE1USHD$H$ hL$\AHD$dH%(HD$x1EGF B}fAE(((D(D(VH\$AEEAIHFE9C fAofsAfDofsfA:UfDofsfDofD:Uf:UfAsfofE:UAffAfAfCfEofDofsfDofEf:UfAfAsfDofE:UfDofDfAoffEfEfEofffA8#fAsfE8#fDofDofDf8#fsf8#E[EXfA[DXCfDofsfDof:UfAsfE:UfDffEfAofEfEofffA8#fAsfE8#fDofDf8#fsf8#E[AXFf[XfAofDofsfsfA:UfDofD:UffDfAofAfEffAf8#fsf8#ff8#fsf8#[Xf[Xt$@fDD$ d$`|$0l$PDL$\$ T$@XXL$`Xt$l$0XX\$$d$PXT$DXXXL$dXt$Xl$4Xd$TX\$(XT$HXL$hXt$Xl$8Xd$XX\$,XT$LXL$lXt$Xl$<Xd$\_((YYYXXX7.VJD9$H@EfIfNAAEcOAkAEADDDK,E)]DeE߉EDDAA*K,LT$D)De*]DADDAXODD)AXOf*Ajf*AEDDDXNEA)ED;$EXNfA*fA*XJXJHD$xdH3%(uHĈ[]A\A]A^A_ffff.AWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_1AWAVAUATUSHxD$ VRH$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_AWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_AWAVAUATUSHXD$H4$dH%(HD$H1HT$L$DL${Xffo=tMHLLH(H,(fDo`Lfo5eDHHHHIHf8QfofafiffA8fffJfof8fA8fDofDafifDfffAfD8#fsf8#E[AX[XNf8fDofDafifDfffAfD8#fsf8#E[AX[XAJH9f8fDofDafifAffff8#fsf8#[X[X\$0IIIl$Id$ t$l$Xt$d$(Xl$\$,Xd$ T$0X\$$L$4XT$8XL$؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo ,H1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.AWAVAUATUSHdH%(H$1$ A=H|$H $LD$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfDoHD$ LLHD$Ht$L(I(I(M(fo=8foPIIIAOIHHHEYfDof8fE8fE8fA8fEofE8fD8fAsfE8EJfE8fEofD8fA8fE8fE8fDofDofE8fE8fEofDofDofE8fAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXEHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDIfEofD8fE8fE8fE8fE8fEofE8fAsfE8fE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDOI9fEofD8fE8fE8fE8fA8fsfE8fA8fD8!fsfD8!fsfEE[AXfD8!fsf8!fA[XHD$ Ht$(t$0H $l$@IHHd$PIII\$`T$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$(LT$HDLHD$IAIIECEyHfHfIIADAc)ljAcDADCcAljAADEA*AcA)EA*AXBABfAX A DEefAljAADEA*AeA)EA*XFFfXED$Ad$fAljAADEA*AAd$A)EA*XBBfX  EEAefAljAADEIA*L<$AAeA)EA*AXGAXAfAGE~fAAAfAAfEA*LD$ljA)L;L$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_$@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%MDIIHAGHHHHAYfof8f8f8f8fDof8f8fofsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_ffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-|HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%}DIIHAGHHHHAYfof8f8f8f8fDof8f8foyfsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_ϩffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$fPL$H$H$1L$H)$H)$)$)d$p)d$`)d$P)d$@)d$0)d$ )d$fo-sfo%tfoqfAo fAo4fof8f8f8f8fof8f8fsf8fof8fof8f8f8f8fof8f8fofof8fof8#fsf8#ff8#fsf8#[X|$f[X\$ )|$fo)\$ fo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$0f[X\$@)|$0fo)\$@fAofof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$Pf[X\$`)|$Pfo)\$`fAo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$pf[fAo4X$HH9)|$pfo)$fof8f8f8f8f8f8fof8#fsf8#ff8#fsf8#[X$f[X$)$)$KHLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$fL$t$ H fDnL$ T$ fDnl$ D$ H fDnT$ |$ DXfDnd$ H$DXDT$ DXH fDnD$ D|$ DXfDn\$ D\$ I fn|$ T$ DXfnT$ l$ DXfnt$ \$ XfnL$ Ht$ XHt$DXL$ I XH XH Ht$DXl$HD$LDXT$H|$H DXd$LT$DXD$HD$DX\$L\$II X|$H$L\$IH$XT$I Hl$Xt$L\$XL$LT$0D$L|$@H fn\$|$H fnl$HT$PDT$Ht$`DXDXfnl$D|$fnd$L\$pI T$DXI DXfnd$t$fn\$D\$H DXDXfn\$H$H$X\$H fn\$l$Xfn\$Dd$I Xfn\$H|$l$LT$DXT$L|$II d$LL|$XDXD$H Ht$\$HT$X|$H\$HAXH XT$H\$Xt$Ld$XL$HD$AXD(DXL$H$DYAXhA(EXDD(HD$DYAX((`A(YH$XX (QYYXX9AAH$4L$L$HDH$H$L$LHD$DIASIAyE{HfHfIIljDAa)ƉAaD{‰kAlj@Alj@EA*ljljk)lj*AXBABfAX A }mfAlj@Alj@EA*L|$ljm)lj*AXGAGfAXAA|$Al$fAlj@Alj@EA*L$ljAl$)lj*AXGAGfAXAA}f@AljAmAlj@EIA*ljljAm)lj*XAX  fAE~AnfljAljAn*ljƉA)L;L$*AX@A@AXA H$dH3%(uH[]A\A]A^A_DIHF(%DiLH(FiLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.BfM,HHEL9t).fw5f.v(@[]A\f.DIHF(%hLH(hLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.Be,HHEL9t).ew5e.v(@[]A\f.ATUSHb^D$ DIHF(-fLH(%fLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=td_(̜,HHEL9t ^D$ .7dv-dH[]A\ffffff.ATUSHIa^D$ DIHF(%veLH(xeLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=$c_(|,HHEL9t ^D$ .bvbH[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1EfAHL$@IHT$HD$IHt$H<$)|$0O D()|$ D(LD(D(D(D(D(fo-Gdfo%efo5'eIHHCHHHHA_fof8f8f8f8fDof8f8foafsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$ f[XD$0)T$ )D$0D$L$LT$M$f$Dt$pD$D$D$D$D$$$LT$XDT$pD$DX$DXX$X$$X$$DXT$tD$DX$$LT$LT$@X$X$HD$PX$XDXT$xXX$X$X$X$DXT$|X$XD(A~X$DYX$XDXDX$X$EX(X$X$YDX$X$EDX$hX$(X$YX$DX$X$DXXX$ X$DDX$u](HD$XYYPXAX HD$`HAsAfKD.\D(ILD(HD$h((M(($fDffADDffADDf|$ xfADDIAAIAoAQAgffAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*AۉH\$PDD)AXFAXAFfAf**DDЉ|$MD)XCX Cf f*\$ D*A\$0Ht$`)AXEAXMAEfAMf**HL$XXXIfIL$LfɉA‰@‰A*A@A)EA*XFXL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$Ldf*Y\,HfA*Y\,D$ gfA*Y\,)fA*AYA\,fH$dH3%(uH([]A\A]A^A_fDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1fH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ fo-Zfo%ZfoXfo5Z@fAo fAo<fof8f8f8f8fDof8f8fsfD8fofA8fof8ftffof8fDof8fDofDof8f8fDofDofD8fAofDofD8fAofE8#fsf8#fsf8#fDofDofDfA8#E[DXD$ fDof[X\$0D)D$ )\$0fofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$@f[X\$PD)D$@)\$Pfofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$`f[X\$pD)D$`)\$pfAofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DX$f[fAo<X$HH9D)$)$foftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[X$f[X$)$)$H\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$fL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH fDnL$PT$PH fDnl$PH$L$DL$ DXDXfDn\$0DL$PDL$@DXfDnT$Pt$PH fDnd$P|$PH fDnD$PDL$PDXfn|$PDT$PDXfnT$PD\$PDXfnt$P\$PXfnL$PHD$PXHD$ DXL$PHT$PXDXl$PH XHD$ DXT$ Ht$ DXd$ H|$ HD$0Ht$@DXD$ H$H H HD$ DX\$ Ht$ LH X|$ LT$`Ht$ LL\$pH XT$ Ht$ HH$H Xt$ Ht$ XL$ T$ H fn\$ l$ H fnl$ Dd$ I DXDXfnl$ Dl$ fnd$ Dt$ I DXI DXfnd$ DT$ fn\$ D\$ I DXI DXfn\$ \$ H Xfn\$ H$L$XӉD$ fn\$ DL$ I Xfn\$ Hl$ l$ Ld$ DXT$ Ll$ d$ Lt$ XDXD$ LT$ \$ L\$ AXX|$ H\$ HH XT$ H$H\$ AXXt$ LL$ XL$ HT$ hDXL$ D(AXA(DYEXDD(H$DY`A(AX((H$YX (XH$YYPXX8H$H$pfHDOMD(LD(H$((L$(L$(HL$03DfDffDffADDf|$ fADDIABIEhARA`ffADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$p)E*ωA*)މAXAXGAfAGf*ΉH$*H$XXGfGDDfD)|$ *D*ʉΉAt$`AXAXFAfAFf*ɉ|$PH$)‰*AXKKfX\$@f@‰A*A@A)EA*XAX L;$A  HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTf@*Y\,7fA*Y\,D$ UfA*Y\,f*AYA\,fH$dH3%(uH[]A\A]A^A_覃fDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hfHLt$HLHfo-:NHD$@LLHD$8Lt$8H)|$ D(H)|$D(LD(MD(D(D(D(fo%Nfo5NIIHAGHHHHAYfof8f8f8f8fDof8f8foKfsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$f[XD$ )T$)D$ Dt$PHD$@Lt$HD$Dl$`IIH$fHD$II$D$D$$Dd$pDT$P|$`DX$XXDL$p$DXDXT$T$X|$d$X$$D$X$XXXDXXDXL$tX$X$X$X$DX$X$DXT$XX|$hHD$0X$DXL$xX$X$DXT$\X|$lX$DXL$|X$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$pH|$0HDLHD$@IARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_'{DIfHFfo-ELHfo%ELD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ gfք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$agfք$L$0D$ $$5gfք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$ffք$L$0D$ $$ffք$D$D$DX$]DX$U$L$DD$@DL$tDD$hLffք$L$0$$D$ ffք$$$X$[X$L$|$`t$@$efք$L$0D$ $$efք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$bffffff.D@fo-HIfo -IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo ,H1fo ,Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z]AbX(\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z]aX9(\$ X\$,HLDCKL9uH []A\ATUS((H@XH-0XY(dH%(HD$81XXX5'Y|$(DQHGD(*LHLL(f(H X\(^f: Y\f:AXf[)$$H4$HL$LcH B$BD@`$DHcH `@$D@`$D@`L9YIJHHσu!HD$8dH3%(H@[]A\@\$ HZL$L$I\$ f(L$T$H\D$$ZZ_X,&$T$X,H DEML9uO#]ATUS((HPXH-.XY(dH%(HD$H1XXX5%Y|$(DAHGD((LHHt(f(H X\(^f: Y\f:AXf[D$ HcL$ $DHcL$$`@$DHcL$(`@$DHcL$,`@$D@`H9]IHHHσuHD$HdH3%(HP[]A\\$0HZL$L$I\$0f.(L$T$H\D$\$ ZXs]X$\$ T$X,H DEML9uI[H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XF%XD$tXHD$dH3%(uH(fH)$Zffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(HfYfff.H(dH%(HD$1DffAnf8fot3HHHHH@ofoHfdH9f8fouffAn$f8f8<$fofsf8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DH(dH%(HD$1DffAnf8fot3HHHHH@fofoHfdH9f8fouffAn)$f8f8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$IAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$EAWAVAUATUSHdH%(HD$x11fD$^cD@ffo5 HIIfoN oHHo@L9fofoffsfffsffofDofffDffAfffufLffsfl$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu HĈ[]A\A]A^A_E1E1XAAWAVAUATUSHdH%(HD$x11fD$^kD@ffo5; HIIfoN HH@L9fofoffsfffsffofDofffDffAfffufo fsLf8d$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu'HĈ[]A\A]A^A_f.E1E1=AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5IfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufHfHfsff:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)l$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu&HĈ[]A\A]A^A_fE1E1:AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5IfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufopfsHHf8f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)d$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu%HĈ[]A\A]A^A_E1E1`6H(dH%(HD$1DffAnDf8DHI1foIIIIM9Afofdfofvf8r$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)fnIM9f8_A8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(122ffffff.ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHAofofdfftC$EHA)f.tD E8~DEHAfufAnf8II9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?/tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.USH(dH%(HD$1ffnˉf8DXfoI1IIIfAo fo)$$fd$fofvf8L$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)fnf8IM9<8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11+ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHfAofofdfftC)$EHA)f.tD E8~DEHAfufAnf8II9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?)tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.Wt&WHHfDHXFH9uffff.Wt&WHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAo-]E1E1o%\Ao=^Ao5bAġzoġzoLbaq!zoqaġzoT1bi)ib)AqũA9hA1`9`A1hy`)b91ih9`hAiqaaab9yb!yiA AŹ`Źhġx ġxDI A9DHHHHD9t\f.HjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAo-E1E1o%Ao=Ao5AġzoġzoLbaq!zoqaġzoT1bi)ib)AqũA9hA1`9`A1hy`)b91ih9`hAiqaaab9yb!yiA AŹ`Źhġx ġxDI A9DHHHHD9t\f.HjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@QAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ EGF B Azz@EIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(zOIzG!D$hd$hl$l((l$zNzF$$^!D$`HD$ \$ D$dXL$`XC$ CH!D$XHt$\$D$\MXEXL$X$EMN D$PD$TzXD$z $XL$PH|$\$$zD$z $O D$HHT$\$D$LzMzXEXL$H$zEzMJF LD$0D$@HD$(HD$ HD$D$DzzX@HXL$@HD$z@zHD$L;|$8-Hx[]A\A]A^A_fffff.AWAVAUATUSHxD$ EGF B Azz@EIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(zOIzGD$hd$hl$l((l$zNzF$$D$`HD$ \$ D$dXL$`XC$ CH\D$XHt$\$D$\MXEXL$X$EMND$PD$TzXD$z $XL$PH|$\$$zD$z $OD$HHT$\$D$LzMzXEXL$H$zEzMJLD$0D$@HD$(HD$ HD$D$DzzX@HXL$@HD$z@zHD$L;|$8-Hx[]A\A]A^A_fffff.HG H9HF H9D;Jo=E1E1Ƀo5o-o%Aġzo ġzoDqbyqyi`hġx ġxDI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9{NDFDGOH9^N DFDGO H9AN DF DG O H9$N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vzNDFDGOH 9vaNDF9DGOvPFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9D;Jo=E1E1Ƀo5o-o% Aġzo ġzoDqbyqyi`hġx ġxDI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9{NDFDGOH9^N DFDGO H9AN DF DG O H9$N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vzNDFDGOH 9vaNDF9DGOvPFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHHH0$ Ht$ HT$HL$CLD$ HG B Azz@H|$pIWHDHH|$xHx(HD$(x(H<$H$Ix(x((H|$H$(((H|$H$H|$LLL$h+fADDffDf|$fDf|$fADDf|$ȀNAfADDEiWWɉ'Dg)D'fAʼnЉgAADfEAEЉD*zXGDE)Er*rXzGWЉAz*WHD$)X@*Xt$A@WAWHT$*Ht$XB)\$*X BWA AWEЉʘ*\$XFAD)ؘ*XAFW˘IWHIE*HD$ D)XH*XHH$HD$HD$HD$L;t$(%H$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$wWA*Y\z,Zf.WA*Y\,D$WA*Y\,D$OW*zYz\,D$fDW@*zYz\,fH0[]A\A]A^A_ÐAWAVAUATUSHHH0$ yuHt$ HT$HL$CLD$ HG B Azz@H|$pIWHD[HH|$xHx(HD$(x(H<$H$Ix(x((H|$H$(((H|$H$H|$LLL$h+fADDffDf|$fDf|$fADDf|$ȀNAfADDEiWWɉ'Dg)D'fAʼnЉgAADfEAEЉD*zXGDE)Er*rXzGWЉAz*WHD$)X@*Xt$A@WAWHT$*Ht$XB)\$*X BWA AWEЉʘ*\$XFAD)ؘ*XAFW˘IWHIE*HD$ D)XH*XHH$HD$HD$HD$L;t$(%H$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$wWA*Y\z,Zf.WA*Y\,D$WA*Y\,D$OW*zYz\,D$fDW@*zYz\,fH0[]A\A]A^A_ÐAWAVAUATUSHH$ GF BtL$IHL$HHML $HHD$Dz_HT$HzIKICIAD$8H$d$8l$<((l$ Hd$ D$0l$ M(D$4XL$0XEd$(MEzNzF D$(l$ D$,(z $zXD$XL$(d$(zD$z $zEzMm HT$D$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_DAWAVAUATUSHH$ OKGF BtL$IHL$HHML $HHD$Dz_HT$HzIKICIq D$8H$d$8l$<((l$ Hd$9 D$0l$ M(D$4XL$0XEd$(MEzNzF D$(l$ D$,(z $zXD$XL$(d$(zD$z $zEzM HT$D$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_DAWAVIAUATIUSD$H |GF BQE1fDDYW1EPHA8WIIDۉAA)H\$8AAfEQF\Bx)\$xB1b1 :A A)yot$XB9b9 x)$BAA=A)9II5x)$ByyǴ9o|$H BA)A5 =Bb=YY%ʼnBaia^ieʼnyot$hqq I)\$H !BQQ-!b!ʼnAQ9B1x)t$Xb1 ߳b9!1B)b))l$hII5BY9)ot$xaY%yo$a1x)$bI5^I)b)[y yo$y;B b 5) AA=b= qAAq x)|$xyo|$H5IJBii!b!Ai91b9b1 )A9b)xx)D$HBYY%T9Yyy=)$AA=6o|$XA)$yoL$h1b1 A5Iaa)|$Xo$bABAũBQ1ot$xQ-)\$h I=b 5)qq ~Q)$I)L$x`Ah|$AŁ\$a`ht$Iit$B T$iIAo|$ot$Bx)$ayot$qqqa9`A9hx)$t$IqŹT$iyoqA9B9`hqyoD$iaAii)$yyot$YY`h)$qYyiyqy1`A1hia1iA1IB1)`yiA)hyoyai)$yũqA)yB)`hyqqqQQYix)$q!`A!h)$AqyqšB A!yyoD$HqB!9`A9hʼnia9y9iB9AqiYo$Ai`hx)$(QiyyoYiYo$`hqqyyyaQqoT$X`ho\$hd$YyIqIyI`ho$qiaYaao|$qh`aqAAoL$x`hAIB1qAyo|$qqűyoL$IIx)L$ũx)|$oL$(yoL$8yaa)L$x)L$o$o$Aa`ahAI`Iho$I`ho$AIh)l$XI`x)\$h)D$Ho$I`ho$I`ho$I`ho$(`h`)D$xAhoD$Hy`h `A hx)\$Ha`h)`x)$A)h)$yot$XyoT$x `ʼnhAQ`Qhyyot$h `ʼnhI`h1`A1hA`Ahy`h`hoT$H)D$X`ho$)D$Hi`Aih)D$ho$`)T$xhoD$Xʼn` h`hod$H `h@Ź`Źhh`px0PHol$hű`1hol$x@`AhxH@š`!hxP@`xX@D9AىINIA9ۍ,fIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH@[]A\A]ÉIIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAUATAUSH@5ALAAL9LAE\$L9AE0A&ET$AADw:AAynInyo-QH1B)yo%OBy)`)h`h)l$)d$)\$)|$)l$)d$)\$)|$)l$)d$)\$()|$8IHzoAzoBAB!Azo b!ФA=Azo0AAzo@AB)zoPb))|$H1b1 !A)zo`IB9zopb9BI5IzoYBYx)|$XY%9QQ-zoIBaazoQqzoAq )iy9zoiyƣiQzoiQzoi1Q-zoIq )l$hzoIqzoIqzoIq-<zoIq = b 5)l$x!b!l$xA B)b)x)\$xB1b1 A A)yot$XB9b9x)$BAA=A)9II5x)$Byyw9o|$H BA)A5R =YBb=;YY%9ʼnBaiaiʼnyot$hqq )\$H ѡBQQ-á!b!ʼnAQ9B1x)t$Xb1 b9!1B)b)o)l$hII5kBY9)ot$xaY%:yo$a81x)$bI5I)b) y yo$yB b 5͠) AA=b=qAAq x)|$xyo|$H5tBiif!b!dAi91b98b1 ?)A9b)(x)D$HBYY%9Yyy)$AA=o|$XA)$yoL$h1b1 A5Iaa)|$Xo$bAnBAũBQ1ot$xQ-M)\$h I=9b 5@)qq .Q)$I)L$x`Ah|$AŁ\$a`ht$Iit$B T$iIAo|$ot$Bx)$ayot$qqqa9`A9hx)$t$IqŹT$iyoqA9B9`hqyoD$iaAii)$yyot$YY`h)$qYyiyqy1`A1hia1iA1IB1)`yiA)hyoyai)$yũqA)yB)`hyqqqQQYix)$q!`A!h)$AqyqšB A!yyoD$HqB!9`A9hʼnia9y9iB9AqiYo$Ai`hx)$(QiyyoYiYo$`hqqyyyaQqoT$X`ho\$hd$YyIqIyI`ho$qiaYaao|$qh`aqAAoL$x`hAIB1qAyo|$qqűyoL$IIx)L$ũx)|$oL$(yoL$8yaa)L$x)L$o$o$Aa`ahAI`Iho$I`ho$AIh)l$XI`x)\$h)D$Ho$I`ho$I`ho$I`ho$(`h`)D$xAhoD$Hy`h `A hx)\$Ha`h)`x)$A)h)$yot$XyoT$x `ʼnhAQ`Qhyyot$h `ʼnhI`h1`A1hA`Ahy`h`hoT$H)D$X`ho$)D$Hi`Aih)D$ho$`)T$xhoD$Xʼn` h`hod$H `h@Ź`Źhh`px0PHol$hű`1hol$x@`AhxH@š`!hxP@`xX@D9AىINIA9ۍ,fIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH@[]A\A]ÉIIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h ߔHt$HT$HL$GF B Azz@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$WH\$WɉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvz*AzXGfDzGWE)EEr*ErXDDDEDEzz*WLT$E)AEzXBr*rX ADDzBWz EEWEz*LD$)zX@*rXDDd$DT$Dz@WzADWDED)*H|$*DXGXDEGWDWDIA*rXMHHHD$HD$)HD$HD$*zMzXEL;L$zE[]A\A]A^A_ÐAWAVIAUATUSD$h Ht$HT$HL$GF B Azz@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$WH\$WɉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvz*AzXGfDzGWE)EEr*ErXDDDEDEzz*WLT$E)AEzXBr*rX ADDzBWz EEWEz*LD$)zX@*rXDDd$DT$Dz@WzADWDED)*H|$*DXGXDEGWDWDIA*rXMHHHD$HD$)HD$HD$*zMzXEL;L$zE[]A\A]A^A_Ð"LOHFL9AH9A HBL9AH9D AIAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRG{BLG LN fA LR GkB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LG LN f A LR G +B LGLNf ALRG ;BLGLNfLRGADqDE)AEE)AAAvyo%AHHHE11o;ġzoġyo``hhqyġxI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^@III1E1DBB$BID9wûfDfDfDfDfDfDvfDffDVfD FfD 6fD &fD fD fD"LOHFL9AH9A HBL9AH9D AIAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRG{BLG LN fA LR GkB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LG LN f A LR G +B LGLNf ALRG ;BLGLNfLRGADqDE)AEE)AAAvyo%HHHE11oġzoġyo``hhqyġxI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^@III1E1DBB$BID9wûfDfDfDfDfDfDvfDffDVfD FfD 6fD &fD fD fDAWAVAUATUSHD$h Ht$HT$G C B Azz@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyWWɉljDAf)ƉAfDA}‰AmAlj@Alj@Ez*zXBljAmzBW)lj*rX z A<$W@AljAl$Alj@Ez*L|$ljAl$zXG)ljzG*rXWz}W@AljmAlj@Ez*L|$ljmzXG)ljzG*rXWz;W@AljkAlj@Ez*XAljk)lj*X  WAE{A+WljAljA+II*zX@IIHHIƉAz@)L;L$*rXz[]A\A]A^A_ffffff.AWAVAUATUSHD$h ߁Ht$HT$G C B Azz@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyWWɉljDAf)ƉAfDA}‰AmAlj@Alj@Ez*zXBljAmzBW)lj*rX z A<$W@AljAl$Alj@Ez*L|$ljAl$zXG)ljzG*rXWz}W@AljmAlj@Ez*L|$ljmzXG)ljzG*rXWz;W@AljkAlj@Ez*XAljk)lj*X  WAE{A+WljAljA+II*zX@IIHHIƉAz@)L;L$*rXz[]A\A]A^A_ffffff.AWAVAUATUSHD$h C?Ht$HT$G C B Azz@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyWWɉljDAf)‰AfDA}ƉAeAljAljEz*zXBljAezBW)@*rX z A<$WɉAljAd$AljEz*L|$ljAd$zXG)@zG*rXWz}WɉAljeAljEz*L|$ljezXG)@zG*rXWz;WɉAljcAljEz*XAljc)lj@*X  WAE{A#WDljA#@II*zX@IIHHIDz@)L;L$*rXz []A\A]A^A_AWAVAUATUSHD$h ||Ht$HT$G C B Azz@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyWWɉljDAf)‰AfDA}ƉAeAljAljEz*zXBljAezBW)@*rX z A<$WɉAljAd$AljEz*L|$ljAd$zXG)@zG*rXWz}WɉAljeAljEz*L|$ljezXG)@zG*rXWz;WɉAljcAljEz*XAljc)lj@*X  WAE{A#WDljA#@II*zX@IIHHIDz@)L;L$*rXz []A\A]A^A_AWAVIAUATIUSD$H zyGF BQE1fDDYW1EPHA8WIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_SAADL$T$AD$Eo%ZbnQ-cstgAE1IIġyossġx)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEtpAo`I1IfDoo$sss)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGAWAVAUATUSHdH%(HD$x1$ aaH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$Azz@jWP1Ho%]H)t$ )t$)4$)t$@)t$0yo<ossAo\ŹsqŹs`hairr[airrX\$0[Xyo)|$0sqŹs`hairr[airrX\$@[Xyo)|$@sqŹs`hairr[airrX$[Xyo\)<$sqŹs`hairr[airrX\$[XyoHH9s)|$qŹs`hairr[airrXL$ [X)L$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`t$@t$@HnD$@H XHHt$@XHt$Pt$@T$@LH HnD$@XNXNHT$@HT$Xt$@D|$@InD$@XJI L|$@MXt$@|$@I H|$hJnD$@L|$@IXII Xt$@DT$@InD$@JXHzXL|$@t$@|$@zHznD$@XHXHHD$0H<$nD$0LT$H XH HD$@H|$0t$@I HD$ XNt$0H n$L$NXJX4$H$JnD$XIX4$InD$ JXHzXzHz$LT$`HDLH$IAQH{EyHWIWIIljDc)ƉcD}‰eAljAljEz*zXBljezBW)lj@*rX z A|$Ad$WAljAljEz*L|$PljAd$zXG)lj@zG*rXWzA{AcWAljAljEz*L|$XljAczXG)lj@zG*rXWzA}AeWAljAljEIz*XAljAe)lj@*X  WAE~WAljljAfljAf@*zX@ƉAz@)L;$@*rXzHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ >YdH%(HD$81*YH$DH$GF B^WDP1IoUI)d$ )d$)$$fDo yo<sqsŹqAyoAs9QAIAs`haiŹrrŹaa[iryrX $[yoX)<$As9QAIAs`haiŹrrŹaa[iryrXL$[X)|$o|HL9ŹsAiIQs`hairra[irrXL$ [X)t$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L$$D<$H n$XOH$LX$$D4$H On$H$LXNH X$$D,$Nn$XJXH$L$$H JXOD$$Lt$n$H$$$D$XLH On$H$XNX$$D4$Nn$XJXJA}AOdIDIEhHDyDYIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_與AAE~Ao-PI1o5PIfo$o sssyL`)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDBQD$L$dH%(HD$81L$DfDfDfDDxo-MMILLIyoN9yoyoLoyo@oHHHHIo`ssyo[řsyo]Y)sqy1šyo\$L9yosya9oo LsissLd$Hl$CALCiLCyLH\$!x)$MMMx)L$M1x)D$ DOD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_蓁AWAVAUATUSHdH%(HD$x1$ MMH|$`H4$HT$GL$H$FH$ L$BL$ L$Azz@WP1Ho%IH)l$P)l$@)l$0)l$ )l$o-Iyo4yossossaLPy!sy!sy!sy![X|$o\s)|$saLPy!sy!sy!sy![X|$ yos)|$ saLPy!sy!sy!sy![X|$0yo\s)|$0saLPy!sy!sy!sy![X|$@yoHH9s)|$@sqLPy!sy!sy!sy![X|$P)|$PlIIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`l$Pt$PHnD$PH XHHt$PXH4$l$PT$PLH HnD$PXNXNHT$PHT$l$PD|$PInD$PXJI L|$PMXl$P|$PI H|$hJnD$PL|$PIXII Xl$PDT$PInD$PRXHzXL|$Pl$P|$PzHznD$PXHXHHD$H|$ nD$LT$0H XH HD$PH|$l$PI HD$@XNl$LT$H nD$ NXJXl$HD$JnD$0XIXl$InD$@RXHzXzHz$LT$`HDLHD$fDIAQIA{EyHWHWIIljDAc)ƉAcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*L<$ljezXG)lj@zG*rXWzA|$Ad$WAljAljEz*L|$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*XAljAe)lj@*X  WAE~WAljljAfljAf@*zX@ƉAz@)L;L$@*rXzHD$xdH3%(uHĈ[]A\A]A^A_~yfffff.AWAVAUATUSHHD$ EdH%(HD$81EH$DH$GF BWDP1IoBI)d$ )d$)$$o%AfDoyo<sisŹyo4issiL@y!sy!sy!sy![X<$o4s)<$siL@y!sy!sy!sy![X|$oTHL9s)|$syL@y!sy!sy!sy![Xl$ )l$ YL<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L$$D<$H n$XOH$LX$$D4$H On$H$LXNH X$$D,$Nn$XJXH$L$$H JXOD$$Lt$n$H$$$D$XLH On$H$XNX$$D4$Nn$XJXJA{AOdIIEXHDyDiIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_@tAAElAo%T=IIHIN foHHIzohsssGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [Ifff.AWAVAUATUSHHD=D$L$dH%(HD$81L$DfDfDfDDxo-x:MILLIoN9yoyoLyoyo@oHHHHIo`ssyo[řsyo]Y)1sqy9šzo\$L9yosyao1Ld$)Hl$9H\$!šM)sMMA1sM91sx $xD$t$ f.OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_3nAWAVAUATUSHdH%(H$1$ Y:U:H|$H $LD$GH$H$FL$ L$BL$ L$Azz@WHHt$(LHA!HD$ LLHD$Ht$(x(Lx(Mx(Io%W6I@IIIzoQIHHHAzogsasAYAiyzoRősqyAYsš`šhQairrAaAx[A(Xairr[(XzoPsqyAYsš`šhQairrAaAx[A0Xairr[0XoPsqyAYsš`šhQairrAaAx[A8Xairr[8XoQsqyAYsš`šhQairrAaAx[@Xairr[XoWI9sqyAAYsřš`šhairr[Xairr[XHD$ Ht$(xT$0H $xL$@HHIxD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$0LT$HDLHD$fIAIHDCEyHWIWIIADc)ljcDADEeAljAADEz*zXBAezBWA)Er*rX z ED$Ad$WAljAADEz*XFAAd$FWA)Er*XEEAeWAljAADEz*XBAAeBWA)Er*X  EFAfWAljAADEIz*L<$AAfzXGA)Er*rXzWzGE{WAAAcAAcEz*LD$zX@ljA)L;\$@z@*rXzH$dH3%(uHĘ[]A\A]A^A_Df@AWAVAUATUSHHD$ ~2dH%(HD$81j2H$DH$GF BDpWIII(N<1(o.IMLfo HHIIIzoPsi9sAiiA!yqAzoZA)yq)sAiAi9A11A9A)is`haaiũrqraaiũx[@XryrAzo\$[)sAiAiX9A11A9A)is`haaiũrqraaiũx[HXAzoSL9ryr!sAi[AiX91A9A1A9is`haaiaa9rirAqAx[PXryr[X<$MMLt$Ll$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A|AOd-I@IEhHDYDyIWHWHDAADA`EEQA)DA`ADAE,EYDAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_aAAEvAo-$*IIHIo5*N f.{ HHIHsssyL`GL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD*D$L$dH%(HD$81L$DfDfDfDDxo-H'MILLIyoN9yoyoLoyo@HHHHI`ssy[řsy]Y)sqy1š{\$L9yosya9oo &sissLd$Hl$CALCiLCyLH\$!x$MMMxL$M1xD$ DOD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_[AWAVAUATUSHdH%(H$1$ 9'5'H|$H$HL$GL$H$FH$ L$BL$ L$Azz@WHHt$(LHo%n#HD$ LLHD$Ht$L(H(Ix(Mx(yo5#DIII{QHHHHA{_sasAYAi{ZyřšsAYqyAqřšsaLҠby!sy!s!y!sy!Ax[A0X_[šsAY0XqyAqřšsaLҠby!sy!s!y!sy!Ax[A8XX[šsAY8XqyAqřšsaLҠby!sy!s!y!sy!Ax[@XZ[šsAYXqyAqřšsaLҠby!sy!s!Ax[HXy!sy![XQI9sqyAsqLày!sy!s[Xy!sy![XSHD$ Ht$(xL$0H$HL$xD$@IHH|$PIIIt$`l$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AzD$tzX@XL$pz@zD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|zzX@XL$xz@z$LT$HDLHD$fIAQIA{EyHWHWIIljDAc)AcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*XFljeFW)lj@*XA|$Ad$WAljAljEz*L<$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*L|$ljAezXG)lj@*rXzWzGE~WAljljAfljAf@*zX@Az@)L;L$*rXzH$dH3%(uHĘ[]A\A]A^A_Sfff.A։DT$T$DD$o%ynQ-sIHHL f{HIssGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUDAAEAo4IIHIN fHHI{`sssGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAI@AWAVAUATUSHdH%(H$1$ H|$H$HL$GL$H$FH$ L$BL$ L$Azz@jWHHt$(LHo%HD$ LLHD$Ht$L(Hx(Ix(Mx(o-DIII{QHHHHA{_sasAYAi{ZyřšsAYqyAqřšsaLPby!sy!sšby!sy!š_[(XšsAYqyAqřšsaLPby!sy!sšby!sy!šX[0XšsAYqyAqřšsaLPby!sy!sšby!sy!šZ[8XšsAYqyAqřšsaLPby!sy!sšby!sy!š[XQI9sqyAsqLPy!sy!sy!sy![XoHD$ Ht$(xT$0H$HL$xL$@IHHxD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AzD$tzX@XL$pz@zD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|zzX@XL$xz@z$LT$HDLHD$fDIAQIA{EyHWHWIIljDAc)AcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*XFljeFW)lj@*XA|$Ad$WAljAljEz*L<$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*L|$ljAezXG)lj@*rXzWzGE~WAljljAfljAf@*zX@Az@)L;L$*rXzH$dH3%(uHĘ[]A\A]A^A_H@AWAVAUATUSHHD$ NdH%(HD$81:H$DH$GF BDpWIIMIoI(N<1(oLfHHIyII{PisAi1siA!űA{JAqAAsAiyA99qAsAL0y!sby!sAby!sy!űA{L$[XAsAiyA99qAsAL0y!sby!sAby!sy!ű{{[XL9sy991qsyL0y!sy!sy!sy![XI4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A{AOd-IIEhHDyDYIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_0CAWAVAUATUSHxD$ njH$dH%(H\$h1AL$EGF BWALYLIMHL((x(L|0x(Lx(f.{KI H H I I {cšs{[is{kCaUsaUUYsYUšaš]ř{]YsaUsaUyqy#sy#A{]y#sy#[(XYs{][0XaUsaUyqy#sy#y#sy#[8X{d$[Xs{T$M9iUsiUqšy#sy#y#sy#[X[X3WIxL$It$@LMMx$LM|$0l$PxD$ Xt$X$Xl$0Xd$PXT$ XL$@Xt$X\$Xl$4Xd$TXT$$XL$DXt$X\$Xl$8Xd$XXT$(XL$HXt$X\$ Xl$AWAVAUATUSHD$ k g L$dH%(H\$x1AH$EGF B?WALYLMIHL)t$PL|0L)t$@)t$0)t$ )t$)4$I H H I I yoSoKsocsyoCYUyUsyUsiUo]omsaUsaUy#sy#yomy#sy#[X<$s[yo]Xt$aUsaU)<$)t$y#sy#[Xt$ y#syod$y#[s)t$ Xt$0yoT$M9iUsiU)t$0y#sy#[Xt$@y#sy#[)t$@Xt$P)t$P IL<$Hl$(ILl$ H\$LMMMLLt$L\$D<$I WLd$0n4$Hl$ D4$Hl$@I n$H\$hXD,$H\$PI L\$L\$8Xn $D$$I n$,$n$$L\$0Xȉ$L\$HXn,$L<$XX4$L4$L\$@X$L\$XL,$IX $I L$$XLt$Hl$ X$L,$IH\$hI X$$L,$L|$0X,$Ld$@$H n<$D4$I Xn<$,$H Xn<$D<$Xn<$D$$Xn<$D$I Xn<$L4$MX$H,$I X $XL4$MI X$L4$X$$L$X,$H$_X4$YYYXXX7VjD$ASAN$IIAXEpHDiiIWWIAEHDEE)EEqA\-AiEDEAADD)ErEE*Ajr*XOXEEADDOWEWAEr*DhXND)Dp*XDAENWDEWDA*XJA)L9Ez*XJHD$xdH3%(uHĈ[]A\A]A^A_7@AWAVAUATUSHdH%(H$1$P H<$Ht$HT$GL$ L$(FH$0 H$8BL$@ L$HAzz@,WHHL$(LHHHHD$ LMHD$HL$L(M(((x(x(x(x(x(A{1I I I H H A{ysH H {WCUsCU{OsqUsqUő ő{VʼnŁA{nʼnsCUsUAyAqqAʼnBy#sBy#A by#sy#Ax[AX{oʼn[ XWʼnsCUsUAyAqqAʼnBy#sBy#A by#sy#Ax[A(X{jʼn[0XRʼnsCUsUAyAqqAʼnBy#sBy#A by#sy#Ax[A8X{hʼn[XPʼnsCUsUAyAqqAʼnBy#sBy#A by#sy#Ax[HX{nʼn[XVI9ŁsCUsUAyqqA y#y#ssBy#y#AqAx[[XXX.WHD$ xd$0HL$(x\$@IIH$HIIxT$PxL$`xD$p$$$$XL$0X|$@Xt$PXl$`Xd$pX$X$zX$zX$zX$XL$4X|$DXt$TXl$dXd$tX$X$*X$:X$2X$XL$8X|$HH$Xl$hXt$XX$Xd$xXL$HTH|(%Q4TH@4WA4X؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ffff.t5o \H1Hfoy)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G ff.AWAVAUATUSHdH%(H$1$ H|$H $LD$GL$H$FH$ L$BL$ L$Azz@TWHHt$(LHyoHD$ LLHD$Ht$L(I(I(Mx(yoeyo }DIII{YIHHHA{gyBqiisaLɐ{ZyaaiayysaLҐby!sy!sAx[A8Xy!sy!{X[8XaaiayysaLҐby!sy!sAx[@Xy!sy!X[XaaiayysaLҐby!sy!sAx[HXy!sy!Y[XaaiayysaLҐby!sy!sAx[PXy!sy![XWI9iiaiyysqLÐy!sy!s[Xy!sy![XHD$ Ht$(xD$0H $|$@IHHt$PIIIl$`d$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$+LT$HDLHD$@IAIIECEyHWHWIIADAc)ljAcDADCcAljAADEz*zXBAczBWA)Er*rX z DEeWAljAADEz*XFAeFWA)Er*XED$Ad$WAljAADEz*XBAAd$BWA)Er*X  EEAeWAljAADEIz*L<$AAezXGA)Er*rXzWzGE~WAAAfAAfEz*LD$zX@ljA)L;L$@z@*rXzH$dH3%(uHĘ[]A\A]A^A_@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XWHLt$8LHo%HD$0LLHD$(Lt$(H)l$(H(Lx(Mx(x(x(x(x(oIIHA{yHHHHA{wy  qyiiosyL Wybiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXbiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xbiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xbiib iByBy# sBy#yAby#sy#Ax[@X Ax[HX{qM9 b i yyy#sby#y#sy#[Xʼn[XL$)L$WHD$0xl$@Lt$8xd$PIIH$HII$x\$`xT$px$x$$$XL$@X|$PXt$`Xl$pX$X$X$zX$zX$zX$XL$DX|$TXt$dXl$tX$X$X$*X$:X$2X$XL$HX|$XHD$ Xl$xXt$hX$X$XL$LX|$\Xl$|*X$2X$X$Xt$lBYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$`H|$ HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_offffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XWHLt$8LHo%HD$0LLHD$(Lt$(H)l$(H(Lx(Mx(x(x(x(x(oIIHA{yHHHHA{wy  qyiioUsyL Wybiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXbiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xbiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xbiib iByBy# sBy#yAby#sy#Ax[@X Ax[HX{qM9 b i yyy#sby#y#sy#[Xʼn[XL$)L$WHD$0xl$@Lt$8xd$PIIH$HII$x\$`xT$px$x$$$XL$@X|$PXt$`Xl$pX$X$X$zX$zX$zX$XL$DX|$TXt$dXl$tX$X$X$*X$:X$2X$XL$HX|$XHD$ Xl$xXt$hX$X$XL$LX|$\Xl$|*X$2X$X$Xt$lBYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$`H|$ HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_ffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$0WPL$H$H$1L$H)$H)$)$)l$p)l$`)l$P)l$@)l$0)l$ )l$o%oo-נyo4yo<yAAqAiiosILPiyiIiyy#sy#y[X|$y#sy#[)|$X|$ oTii)|$ Iiyy#sy#y[X|$0y#sy#[)|$0X|$@yoii)|$@Iiyy#sy#y[X|$Py#sy#[)|$PX|$`yoTii)|$`Iiyy#sy#y[X|$py#sy#[)|$pX$yoHH9ii)$Iiyyy#sy#y#sy#[X$[)$X$)$HLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$WL$t$ H nT$ T$ nt$ D$ H nl$ |$ Xnd$ H$XDT$ XH n\$ D|$ XnL$ D\$ I ynT$ T$ XynL$ l$ XynD$ \$ *Xn|$ Ht$ 2XHt$XT$ I :XH XH Ht$Xt$HD$LXl$H|$H Xd$LT$X\$HD$XL$L\$II *XT$H$L\$IH$2XL$I Hl$:XD$L\$X|$D$H yn\$LT$0|$L|$@H jXyn\$HT$PDT$Ht$`I JXyn\$D|$L\$pI RXyn\$T$ZXyn\$t$H bXyn\$D\$rXyn\$H$H$A*XӉ\$H yn\$l$A2Xyn\$Dd$I A:Xyn\$H|$Xt$LT$Xl$L|$II Xd$LL|$H BXX\$Ht$rX\$HT$*XT$H\$HH 2XL$YH\$:XD$Ld$X|$HD$XT$H$pXYXŢYHD$XŲY(Y`H$ŪXźXzXzI zzx$4L$L$HDH$H$L$LHD$DIASIAyE{HWHWIIljDAa)ƉAaD{‰kAlj@Alj@Ez*zXBljkzBW)lj*rX z }mWAlj@Alj@Ez*L|$ljmzXG)ljzG*rXWzA|$Al$WAlj@Alj@Ez*L$ljAl$zXG)ljzG*rXWzA}W@AljAmAlj@EIz*XAljAm)lj*X  WAE~AnWljAljAn*zX@ƉAz@)L;L$*rXz H$dH3%(uH[]A\A]A^A_DIHF(-ØLH(%ĘLDPH@(PH@H(H](X](@]]___[_[k[[kc)AL9uIIHHHHHƃt{ATUL$SHHI,DBZ,HHEL9t1.5w57.v(f[]A\f.DIHF(-LH(%LDPH@PH@HH]X]@]]___[_[k[[kcAL9uIIHHHHHƃt{ATUL$SHHI,DB,HHEL9t1.w5.v(f[]A\f.ATUSH%^D$ DIHF(5$LH(-%LDPHDYPH@HYHYXY@]]]]___[_[k[[kc)AL9uIIHHHHHƃt_HHL$I&=ԓ_/,HHEL9t#^D$ .vDH[]A\ffffff.ATUSH%^D$ DIHF(5ԔLH(-ՔLDPHDYPH@HYHYXY@]]]]___[_[k[[kcAL9uIIHHHHHƃt_HHL$I&=_,HHEL9t#^D$ .Iv?DH[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1E5WAHL$@IHT$HD$IHt$H<$)|$0O ()|$ x(Lx(x(x(x(x(o%o}o-DIHH{GHHHH{sy b qb oHbiiWsqLityibiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXitibiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xitibiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xitibiib iByBy# sBy#yAby#sy#Ax[@X QAx[HXM9itibiib iByy# sBy#yby#sy#AqAx[ňXL$ Ax[)L$ ŀXL$0)L$0WL$LT$MLT$LT$x$LT$@$xl$px$$x$$x$x$(|$ XL$p$X$X$X$XL$tX$X$X$X$zX$zX$zX$X$HD$PX$X$XL$xX$X$*X$X$X$XL$|X$X$2X$BYX$z~X$X$*X$rX:X$X$X$2X$zYX$h*X$X$:X$XY2X$ X$XŪY0:X$ŲYXeHD$X]źXzPHD$`zHAuAWKD0x(ILx(HD$h((M(("DfDffADDffADDf|$ xfADDIAAIAoAQAgWWAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*rXzXFAۉzDH\$PzFWWD)*DX *XCDЉ WC\$ D)W*rXM|$M*DzXEzMW\$0zEA*WHL$XHt$`)XI*XIWL$LWA‰@‰A*XFA@A)Er*XL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$LdW*Y\,HWA*Y\,D$ gWA*Y\,)WA*zYz\,fH$dH3%(uH([]A\A]A^A_fDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1!WH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ o% oo5o-fyo<Ayoy9b9q9iiosAL`tyiiAiyby#sy#y9y#sy#Ax[ŸX|$ [)|$ X|$0o)|$0tiiAiyby#sy#y9y#sy#Ax[[XT$PŸX|$@)T$P)|$@otiiAiyby#sy#y9y#sy#Ax[[XT$pŸX|$`)T$p)|$`yotiiAiyby#sy#y9y#sy#Ax[[X$ŸX$)$)$yoHH9tiiAiyyy#sy#y#sy#[X$[)$X$)$aH\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$WL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH nT$PT$PH nt$PH$L$DL$ XXnL$0DL$PDL$@Xnl$Pt$PH nd$P|$PH n\$PDL$PXynT$PDT$PXynL$PD\$PXynD$P\$P*Xn|$PHD$P2XHD$ XT$PHT$P:XXt$PH XHD$ Xl$ Ht$ Xd$ H|$ HD$0Ht$@X\$ H$H H HD$ XL$ Ht$ LH *XT$ LT$`Ht$ LL\$pH 2XL$ Ht$ HH$H :XD$ Ht$ X|$ T$ H yn\$ l$ H jXyn\$ Dd$ I JXyn\$ Dl$ I RXyn\$ Dt$ I ZXyn\$ DT$ I bXyn\$ D\$ I rXyn\$ \$ H A*Xyn\$ H$L$A2XˉD$ yn\$ DL$ I A:Xyn\$ Hl$ Xt$ Ld$ Xl$ Ll$ Xd$ Lt$ X\$ LT$ XL$ L\$ *XT$ H\$ HBXH JY2XL$ H\$ :XD$ LL$ H$X|$ HT$ XT$ pjXYH$`XYX(H$HŲYH$YzH*XźXzH$x$pWHDMx(Lx(H$((L$(L$(HL$05fDffDffADDf|$ fADDIABIEhARA`WWADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$pE)z*zXG*ωrXzGWz*WH$)މXG*XGH$DDWWD)|$ *DrX*zXFΉzWzFt$`W*ɉXK|$PH$A)‰K*XWA\$@W@‰A*XAA@A)Er*X L;$A HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTW@*Y\,7WA*Y\,D$ UWA*Y\,W*zYz\,f.H$dH3%(uH[]A\A]A^A_VfDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hWHLt$HLHo%~HD$@LLHD$8Lt$8H)|$ (H)|$x(Lx(Mx(x(x(x(oyo-IIH{AHHHHA{wy b qb oG|biiWsqLityibiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXitibiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xitibiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xitibiib iByBy# sBy#yAby#sy#Ax[@X QAx[HXM9itibiib iByy# syBy#by#sy#AqAx[ňXL$Ax[ŀXD$ )L$)D$ ~xl$PHD$@Lt$H$Wxd$`IIH$HII$x\$px$x$x$$XL$PX|$`Xt$pX$X$X$X$zX$zX$zX$XL$TX|$dXt$tX$X$X$X$*X$:X$2X$XL$XX|$hHD$0X$Xt$xX$X$XL$\X|$lX$*X$2X$X$Xt$|BYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$pH|$0HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_ffffff.DIHFo-OwLHo%0wLD0HHH H`hPy`hyqqAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G tfffff.AWAVMAUATUSHHL$XHT$PdH %(H$1ɋ$L$PH$XL$`L$hH$pH$xBW1HH)|$@)|$0)|$ )|$)<$fx( x(YɱY( бYYX$$x(LYY)$$Xl$x( YY)l$Xd$ (LYY)d$ Xl$0( HH9YY)l$0Xd$@)d$@IIHIIHHH $HT$LT$L\$LD$0L$H H$ynl$HL$H $n$LT$`HT$ l$LT$(XH LD$ LD$HH $HL$`RX$$HT$hHT$8 $H yn$D$I n$H $HL$hL\$<$HT$0"XHT$@BXT$ $yn $H D$L\$0I n$H $HL$ ,$2XLT$RXD$ $H n$D$n<$H $L,$$H H Xn$D$I $HL$Xt$n,$H$LD$$$XXd$H$H$H$z)$(zy(X,$|$z$z$zT$tz\$hzd$`zl$@$$誗ք$z&zv((d$ $$t$0kք$zl$@zd$`X$z]X$zU$L$zd$@z$z$ք$L$0D$ $$ք$z\$hzT$t*X$z\$"X$zT$@z\$|zT$xz$$L$莖ք$L$0D$ $$bք$z$z$:X$]2X$U$L$zD$@zL$tzD$h ք$L$0$$D$ ݕք$$$X$[X$L$|$`t$@$苕ք$L$0D$ $$_ք$H$H$$$X$z$X$z$z\$|zT$xzL$tzD$h|$`t$@HD$Pz/zgzzVzz@HD$X8pH$dH3%(z/zgu8H[]A\A]A^A_W)|$@)|$0)|$ )|$)<$SD@o\HIo \IJ HHGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[f.tDo[H1o [Hf.)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.D@(w^HoZIIJW H H o}}GH9uLwbN>ك@8HJN~ك@xH0N~ك@xHN~ك@xHN ~ك@xH N ~ ك@x H N ~ ك@x H N~ك@xHN~ك @xHt~N~ك @xHthN~ك @xHtRN~ك @xHt<N~ك @xHt&N~ك@xHuVNڈHPHLT$HArUHAWAVAUATARSHIHPHhHXdH<%(H}1HHAB0H`LHIRIZAMbMj AMr(EAWIMMLMHH((M<(|(Hf.| I H QH H I I I YɱYNбYY 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]E!AE@DH(dH%(HD$1{Dynyt0HHHHHoHH9dqL uynȃ)$qq 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]E!AE@DAWAVIAUATIUSIMH$H$dH%(H$1H$AAWAII)t$ )t$)4$@xYұYx( YYX$(LY)$Y(HL9Xl$YY)l$Xd$ )d$ GIHIHHLT$L$LD$H|$WHt$ HD$(D$I n$D$I yn $L$4$D$I AzXn$<$n<$LT$H L$JXD$,$H|$XXt$4$H 2Xn$$n,$H H4$XHD$:X$Xz$X$z$X$XD$$X$z!zix)x)d$\zYzl$Xt$T|$PzL$DzD$@zl$zvz/zgu,Hĸ[]A\A]A^A_W)d$ )d$)$$gf.AWAVIAUATIUSIMH$H$dH%(H$1H$AAWAII)t$ )t$)4$@(x(YұYx( YYX$(LY)$Y(HL9Xl$YY)l$Xd$ )d$ GIHIHHL$LT$LD$H|$WHt$ HD$(D$I n$D$I yn $L$4$D$I AzXn$<$n<$LT$H L$JXD$,$H|$XXt$4$H 2Xn$$n,$H H4$XHD$:X$Xz$X$z$X$XD$$X$z!zix)x)d$\zYzl$Xt$T|$PzD$DzL$@zl$zvz/zgu,Hĸ[]A\A]A^A_W)d$ )d$)$$cf.AWAVAUATUSHdH%(H$11f$UD@o5+HIIoN foHHo@sL9siŹuLs$o$yyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyEDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAH$dH3%(D'DOu#H[]A\A]A^A_fDE1E1p_AWAVAUATUSHdH%(H$11f$UD@o5U(HIIoN fHH@sL9siŹuo'sLYL$o$yyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyEDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAH$dH3%(D'DOu!H[]A\A]A^A_@E1E1[AWAVAUATUSHdH%(H$11f$MD@1o5$IoIoosHL9siŹuHHsyyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyE)$EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAH$dH3%(D'DGu$H[]A\A]A^A_E1E18XAWAVAUATUSHdH%(H$11f$MD@1o5!IoIoosHL9siŹuo sHHYLyyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyE)$EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAH$dH3%(D'DGu"H[]A\A]A^A_DE1E1TLT$HArUHAUATARSHPdH%(HE1nyDiIE1o%~"IIIDI M9tq$}odd}}rL]LMH)AÉك EA8AME8DOуI9AunI M9iuwt$1@DAA8EMDOH9DwDHEdH3%(uHP[AZA\A]]IbE1ESDH(dH%(HD$1DynDyDHI1IIIIM9{dvyr$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)nIM9qfA8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12fOfDATUSH dH%(HD$1<D&ynEy3hI1HHHzodft?$EHA)DtD E8~DEHAfuynqII9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?Lffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.LT$HArUHAUATARSHPdH%(HE1nyDio%`IE1III}o$}odd}}rDL]LMH)AÉك @EA8AME8DOуI9AunqI M9uwt$1@DAA8EMDOH9DwDHEdH3%(uHP[AZA\A]]IbE1-Kffff.USH(dH%(HD$1nÉyDXI1IIIyo )$$d$vyL$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)nqIM9C8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]117GATUSH dH%(HD$1<D&ynEy3hI1HHHyodft?)$EHA)DtD E8~DEHAfuynqII9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?Dffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.DAUATIUSIHHMt811 fCL9Hs%I|Hc@uH[]A\A]fT1?SAWAVAUATIUSHLH(Cy$HT$HL$DL$,TASACHtYHt<11fDHH9Hv%HtLLuH([]A\A]A^A_T1?DL-x$E1L5x$MuDIIƀM9LLD?u؀|$MILDHE11fAEH9IH|L>uH(D[]A\A]A^A_kwflw$Hw$HAE1E1DE19~MII9t.HD$B= _Nb (which is %zu)load_random_data: no support for data size > 8 or < 1basic_string::_S_construct null not validexpression cannot be quantified/usr/include/boost/xpressive/detail/dynamic/matchable.hpp/usr/include/boost/xpressive/detail/dynamic/parse_charset.hpp/usr/include/boost/xpressive/detail/dynamic/parser_traits.hppname too short to be a datatype%s: __pos (which is %zu) > this->size() (which is %zu)equivalence classes are not yet supportedcollation sequences are not yet supportedcharacter escape too large to fit in target character typeunexpected end of pattern foundinvalid escape control letter; must be one of a-z or A-Zinvalid hex escape : must be \x HexDigit HexDigitinvalid Unicode escape : must be \u HexDigit HexDigit HexDigit HexDigit/usr/include/boost/xpressive/regex_compiler.hppfound quote-meta end without corresponding quote-meta beginno function handler for this signatureunsupported 1 arg function >1 scalarsunsupported 2 arg function >1 scalarsunsupported 3 arg function >1 scalarsunsupported 8 arg function >1 scalarsunsupported 12 arg function >1 scalarsrule assignments must be at the front of the regex/usr/include/boost/xpressive/detail/core/matcher/lookbehind_matcher.hppVariable-width look-behind assertions are not supported/usr/include/boost/xpressive/detail/dynamic/dynamic.hpp/usr/include/boost/xpressive/detail/core/matcher/regex_byref_matcher.hppoffset in1: + j in2: vector::_M_insert_auxalnumvector::_M_range_insertincomplete extensionunrecognized extensionunknown pattern modifierbasic_string::substr0123456789no size spec in type invalid quantifierinvalid quantification rangeincomplete escape sequenceinvalid charset rangeunknown class nameupperwquantifier not expectedmismatched parenthesisspaceRUN_VOLK_TESTS: ( completed in ms: fail on arch Best aligned arch: Best unaligned arch: no architectures to testinvalid named back-referencenamed mark already existsbad regex referencealphablankcntrlgraphlowernewlineprintpunctxdigitFFFFFF0F0FFF@FFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFPF`FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFfFFUFFFDF3FFF"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF`9F;Fx9F9F;F;F;F;F;F;F;F;F9F;F;F;F;F;F;F;F;F;F;F;F;F8F;F8F09FH9F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;FP:F;F:F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F9F;F;F;F9F;F;F;F;F;F9F;F;F;F;F9FyFyFyFyFyFyFyFyFyFyFyFyFyFpyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyF zFyFȤFФF`FФFHFPFФFФFФFФFФFФFФFFФFФFФFFФFFFFФFFȬFȬFFȬFȬFȬFȬFȬFFFFFFFPFԭFFԭFԭFԭFԭFԭFԭFSFSF0FFضFF`FFFF@FFFFFFFFFFFFFFFFFFFFFFFFFnF>F`F0FFF@FFFFFFFFFFEEEeEEEEEaEEEEEbool boost::xpressive::compiler_traits::get_quant_spec(FwdIter&, FwdIter, boost::xpressive::detail::quant_spec&) [with FwdIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >]boost::xpressive::regex_compiler::string_type boost::xpressive::regex_compiler::parse_quote_meta(FwdIter&, FwdIter) [with FwdIter = __gnu_cxx::__normal_iterator >; BidiIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; CompilerTraits = boost::xpressive::compiler_traits > >; boost::xpressive::regex_compiler::string_type = std::basic_string]boost::xpressive::regex_constants::compiler_token_type boost::xpressive::compiler_traits::get_charset_token(FwdIter&, FwdIter) [with FwdIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >]void boost::xpressive::detail::parse_charset(FwdIter&, FwdIter, boost::xpressive::detail::compound_charset&, CompilerTraits&) [with FwdIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; CompilerTraits = boost::xpressive::compiler_traits > >]boost::xpressive::detail::lookbehind_matcher::lookbehind_matcher(const Xpr&, std::size_t, bool, bool) [with Xpr = boost::xpressive::detail::shared_matchable<__gnu_cxx::__normal_iterator > >; std::size_t = long unsigned int]boost::xpressive::detail::sequence boost::xpressive::regex_compiler::parse_group(FwdIter&, FwdIter) [with FwdIter = __gnu_cxx::__normal_iterator >; BidiIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; CompilerTraits = boost::xpressive::compiler_traits > >]void boost::xpressive::detail::char_overflow_handler::operator()(boost::numeric::range_check_result) constboost::xpressive::detail::escape_value::type, typename CompilerTraits::regex_traits::char_class_type> boost::xpressive::detail::parse_escape(FwdIter&, FwdIter, CompilerTraits&) [with FwdIter = __gnu_cxx::__normal_iterator >; CompilerTraits = boost::xpressive::compiler_traits > >; typename CompilerTraits::regex_traits::char_class_type = short unsigned int; typename boost::iterator_value::type = char]boost::xpressive::regex_compiler::escape_value boost::xpressive::regex_compiler::parse_escape(FwdIter&, FwdIter) [with FwdIter = __gnu_cxx::__normal_iterator >; BidiIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; CompilerTraits = boost::xpressive::compiler_traits > >; boost::xpressive::regex_compiler::escape_value = boost::xpressive::detail::escape_value; typename RegexTraits::char_class_type = short unsigned int; typename boost::iterator_value::type = char]boost::xpressive::detail::sequence boost::xpressive::regex_compiler::parse_atom(FwdIter&, FwdIter) [with FwdIter = __gnu_cxx::__normal_iterator >; BidiIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; CompilerTraits = boost::xpressive::compiler_traits > >]boost::xpressive::regex_constants::compiler_token_type boost::xpressive::compiler_traits::parse_mods_(FwdIter&, FwdIter) [with FwdIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >]void boost::xpressive::compiler_traits::get_name_(FwdIter&, FwdIter, boost::xpressive::compiler_traits::string_type&) [with FwdIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; boost::xpressive::compiler_traits::string_type = std::basic_string]boost::xpressive::regex_constants::compiler_token_type boost::xpressive::compiler_traits::get_group_type(FwdIter&, FwdIter, boost::xpressive::compiler_traits::string_type&) [with FwdIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; boost::xpressive::compiler_traits::string_type = std::basic_string]boost::xpressive::basic_regex boost::xpressive::regex_compiler::compile_(FwdIter, FwdIter, boost::xpressive::regex_compiler::flag_type, std::forward_iterator_tag) [with FwdIter = __gnu_cxx::__normal_iterator >; BidiIter = __gnu_cxx::__normal_iterator >; RegexTraits = boost::xpressive::regex_traits >; CompilerTraits = boost::xpressive::compiler_traits > >; boost::xpressive::regex_compiler::flag_type = boost::xpressive::regex_constants::syntax_option_type]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::end_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_bos_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_eos_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_bol_matcher > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_eol_matcher > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_word_matcher >, boost::xpressive::regex_traits > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_word_matcher >, boost::xpressive::regex_traits > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_word_matcher > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::assert_word_matcher > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::lookahead_matcher > > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::lookbehind_matcher > > >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::independent_end_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::alternate_end_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::repeat_end_matcher >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::repeat_end_matcher >; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::mark_end_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]bool boost::xpressive::detail::regex_byref_matcher::match(boost::xpressive::detail::match_state&, const Next&) const [with Next = boost::xpressive::detail::matchable_ex<__gnu_cxx::__normal_iterator > >; BidiIter = __gnu_cxx::__normal_iterator >]void boost::xpressive::detail::dynamic_xpression::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&, mpl_::int_<0>, mpl_::false_) const [with Matcher = boost::xpressive::detail::true_matcher; BidiIter = __gnu_cxx::__normal_iterator >; mpl_::false_ = mpl_::bool_]void boost::xpressive::detail::matchable_ex::repeat(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence&) const [with BidiIter = __gnu_cxx::__normal_iterator >]FFPFFF(FF0FFFpFFaS nStS@zSRSS SS S@SS S nStS SPfw[SN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE0ELm0ELb1EEEPfw[SN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm1ELb1EEEhw\SjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSA_ILb1EEEEEhw]SjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESB_EEhw^SjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESB_EEhw_SjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSA_ILb0EEEEEhw`SPsSN5boost9xpressive6detail18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEhw`SvSN5boost9xpressive6detail20repeat_begin_matcherEhwaSPsSN5boost9xpressive6detail18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEPfwaSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm1073741822ELb1EEEhwbSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEhwcSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEhwdSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESB_EEEENSA_ILb1EEEEEhweSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESB_EEEESB_EEhwfSPxSN5boost9xpressive6detail16assert_line_baseINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwfSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSA_ILb0EEEEEEESB_EEhwgSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSA_ILb0EEEEEEESC_EEhwhSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEhw@iSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEhwjSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENS9_5bool_ILb1EEEEEPfwkSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE2ELm1073741822ELb1EEEhwkSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENS9_5bool_ILb0EEEEEhwlSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSA_ILb1EEEEEEESC_EEhwmSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSA_ILb1EEEEEEESB_EEhwnSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSA_ILb1EEEEEPfw@oSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE1ELm0ELb0EEEhwoSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESB_EEhwpSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESB_EEhwqSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSA_ILb0EEEEEhwrSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEEPfwsSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE0ELm0ELb0EEEhwtSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEEhwtSvSN5boost9xpressive6detail16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEEhwuSvSN5boost9xpressive6detail16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEEhw@vSvSN5boost9xpressive6detail21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEEPfwwSN5boost9xpressive6detail11quant_styleILNS1_10quant_enumE2ELm1073741822ELb0EEEPfw`wSN5boost9xpressive6detail21cpp_regex_traits_baseIcLm1EEEhwwSvSN5boost9xpressive6detail21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEEhwxSZSN5boost9xpressive6detail21quant_style_assertionEhwxSP[SN5boost9xpressive6detail23quant_style_fixed_widthILm1EEEhw@ySjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS8_EEEEEENSA_ILb1EEEEEhw@zSjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS8_EEEEEESB_EEhw@{SjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS8_EEEEEESB_EEhw@|SjSN5boost9xpressive6detail21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS8_EEEEEENSA_ILb0EEEEEhw@}SxSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEhw~SxSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS6_EEEEhw~SxSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS6_EEEEPfw`SN5boost9xpressive6detail18assert_bos_matcherEPfwSN5boost9xpressive6detail18assert_eos_matcherEhwSPaSN5boost9xpressive6detail14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEhwSPaSN5boost9xpressive6detail14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEhwSxSN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS8_ILb1EEEEEhw@SxSN5boost9xpressive6detail11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEPfwSN5boost9xpressive6detail11any_matcherEhw@SeSN5boost9xpressive6detail18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSeSN5boost9xpressive6detail18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhw@SPxSN5boost9xpressive6detail19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSPxSN5boost9xpressive6detail19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSPxSN5boost9xpressive6detail19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSPxSN5boost9xpressive6detail19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhw@SjSN5boost9xpressive6detail12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEhwSjSN5boost9xpressive6detail12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEhwSxSN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS8_ILb0EEEEEhwSxSN5boost9xpressive6detail15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEES9_EEhw@SxSN5boost9xpressive6detail21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSvSN5boost9xpressive6detail19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEhwS0oSN5boost9xpressive6detail18mark_begin_matcherEPfwSN5boost9xpressive6detail12counted_baseINS1_6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEhw@SPsSN5boost9xpressive6detail16mark_end_matcherEhwSPsSN5boost9xpressive6detail17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEPfw@SN5boost9xpressive6detail12counted_baseINS1_6traitsIcEEEEhwSPsSN5boost9xpressive6detail18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEhwSvSN5boost9xpressive6detail14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEPfwSN5boost9xpressive6detail12counted_baseINS1_12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEhwSPxSN5boost9xpressive6detail21alternate_end_matcherEhwSPxSN5boost9xpressive6detail11end_matcherEhwSvSN5boost9xpressive6detail17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhw@SPwSN5boost9xpressive16cpp_regex_traitsIcEEhwSPxSN5boost9xpressive6detail12true_matcherEhwSPxSN5boost9xpressive6detail23independent_end_matcherEhwSxSN5boost9xpressive6detail15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEiwS ySSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSzSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS{SSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS|SSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS9_EEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS[SSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS\SSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@S]SSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS^SSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS_SSN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSP`S SN5boost9xpressive6detail17dynamic_xpressionINS1_20repeat_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS`SSN5boost9xpressive6detail17dynamic_xpressionINS1_18repeat_end_matcherIN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSaSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSbSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@ScSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSdSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESC_EEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS`fSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS@gSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENSB_ILb0EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@S@hSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@ShSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11any_matcherEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SiSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSPkSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEEENSA_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS@lSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESD_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS@mSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENSB_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@S@nSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEENSB_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSoSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSppSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEESC_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSpqSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_15matcher_wrapperINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEEENSB_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SprSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EEiw@SsSSN5boost9xpressive6detail17dynamic_xpressionINS1_21simple_repeat_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EEiw@StSSN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EEiw@S@uSSN5boost9xpressive6detail17dynamic_xpressionINS1_16optional_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EEiw@SvSSN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb1EEEEES9_EEiw@SwSSN5boost9xpressive6detail17dynamic_xpressionINS1_21optional_mark_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEN4mpl_5bool_ILb0EEEEES9_EE SE`EFGpMEp]E9GS@EE@G`ME0XEp9G SpEPE >GPMEP\E@9GSEE`DG@MEWE9G SEEPrE0MEp{E8GSEEPtE MEzE8GSE EvEME|E8G@S@EPEoEMEyEP8GSEEbEELEp:GSEEMEZGLE 8GSEЕE0aEPELE9G`SЗEEhELExE7GSEEdELEPxE7GS`EpESEpLE E7G@SEE SE`LEE`7GSEEPuEPLEE07GS E0E nE@LEpE7GSEE@RE0LE\E6GS0E@EQE LEWE6GSEEELE]Ep6G@SEЛE ELEpWE@6GS E0E@PEKE]E6GSPE`EOEKE0WE5GSПEEpEKE0E5G@S@EE0lEKEЎE5GSEEEKE`EP5GS EE}EKEE 5GSEУEpNEpKE^E4GSE0EME@KE[E4GSСEEVE^G KE4GSEEVE]GKE`4GSEpEXE]GJE04GS0EPEpXEYGJE4GPfw`SN5boost16exception_detail20error_info_containerEPfwSN5boost6detail15sp_counted_baseEhw S@SN5boost16exception_detail25error_info_container_implEiwSfw0RN5boost9xpressive11regex_errorEPfwSN5boost9xpressive6detail10actionableEhw0SPdwN5boost16bad_lexical_castEiwS`S`RN5boost16exception_detail10clone_implINS_9xpressive11regex_errorEEEiwSSN5boost9xpressive6detail6finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SS0RN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEEiwSS`RN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEEiwS0SN5boost9xpressive6detail6traitsIcEEhwS`SN5boost9xpressive6detail13traits_holderINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEPfwSN5boost9xpressive6detail9matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@S`SSN5boost9xpressive6detail12matchable_exIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSpSSN5boost9xpressive6detail17dynamic_xpressionINS1_21alternate_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSSSN5boost9xpressive6detail17dynamic_xpressionINS1_11end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS0SSN5boost9xpressive6detail17dynamic_xpressionINS1_17alternate_matcherINS1_17alternates_vectorIN9__gnu_cxx17__normal_iteratorIPKcSsEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEES9_EEhw`S SN5boost9xpressive12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEhwS SN5boost9xpressive6detail18boyer_moore_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSSN5boost9xpressive6detail17invalid_xpressionIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEhwS SN5boost9xpressive6detail17line_start_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEELm1EEEhwS SN5boost9xpressive6detail28leading_simple_repeat_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEhw@S SN5boost9xpressive6detail16hash_peek_finderIN9__gnu_cxx17__normal_iteratorIPKcSsEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEhwSSN5boost6detail17sp_counted_impl_pINS_9xpressive6detail10regex_implIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEEiwSPSSN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSSSN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eos_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SSSN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SpSSN5boost9xpressive6detail17dynamic_xpressionINS1_14string_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@S0S SN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS9_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SS SN5boost9xpressive6detail17dynamic_xpressionINS1_11set_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_4int_ILi2EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SSSN5boost9xpressive6detail17dynamic_xpressionINS1_11any_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSS SN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_bol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSS SN5boost9xpressive6detail17dynamic_xpressionINS1_18assert_eol_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS S SN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb1EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@SЄS SN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_13word_boundaryIN4mpl_5bool_ILb0EEEEENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSS SN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_10word_beginENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS@S SN5boost9xpressive6detail17dynamic_xpressionINS1_19assert_word_matcherINS1_8word_endENS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSS SN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSS SN5boost9xpressive6detail17dynamic_xpressionINS1_12mark_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSpS SN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS9_ILb0EEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS@S SN5boost9xpressive6detail17dynamic_xpressionINS1_15literal_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEESA_EEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSS SN5boost9xpressive6detail17dynamic_xpressionINS1_21posix_charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSSSN5boost9xpressive6detail17dynamic_xpressionINS1_19regex_byref_matcherIN9__gnu_cxx17__normal_iteratorIPKcSsEEEES8_EEiw@S`S SN5boost9xpressive6detail17dynamic_xpressionINS1_18mark_begin_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS S SN5boost9xpressive6detail17dynamic_xpressionINS1_16mark_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSpSSN5boost9xpressive6detail17dynamic_xpressionINS1_17lookahead_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EEiwSSSN5boost9xpressive6detail17dynamic_xpressionINS1_18lookbehind_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EEiwS0SSN5boost9xpressive6detail17dynamic_xpressionINS1_14keeper_matcherINS1_16shared_matchableIN9__gnu_cxx17__normal_iteratorIPKcSsEEEEEES9_EEiwSpSSN5boost9xpressive6detail17dynamic_xpressionINS1_12true_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwSБSSN5boost9xpressive6detail17dynamic_xpressionINS1_23independent_end_matcherEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiw@S@SSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS}SSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_11basic_chsetIcEEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS}SSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb1EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEEiwS~SSN5boost9xpressive6detail17dynamic_xpressionINS1_15charset_matcherINS0_12regex_traitsIcNS0_16cpp_regex_traitsIcEEEEN4mpl_5bool_ILb0EEENS1_16compound_charsetIS7_EEEEN9__gnu_cxx17__normal_iteratorIPKcSsEEEESpEE FF=E%F-F`SP&F)F:D`S'F*FS=EPUE=ESUEUE=EXSS8`S(F+F:DDFpE`S)Fp,F`SDFE)F,FS 'F*F=ES'F+FSS@S(F,F=ECFES(Fp-FSCFPE(F-FS0UEpUEFE0FEPFEhFS E0EEE VEEEGSEEYEEEEE`3G@SEEpEUEEE=E=E5FS?EUE=EEES?EUE=EEE Sp?EUE=EPjES`?E`UE#FPDDEDESEEVEDEDE2G@SEE[EDEDE1GSEEIEpDEE -GSEE0IE`DE0EP(GSEE\E0DE@DE'GS`EpEdEDEDE0'GSКEEHECECE&GSEE_ECECE&GSpEE_EpCECE`%GS@EPE`cE@CEPCE$GSE EbECE CE $G SEE`EBEBE#G@SEE`EBEBE"G@SEEHEpBEBE"G@SPE`E`GE0BEPBE"G@SEИE0^E BEE!G@S0E@E`[EBE~E`!G@SEEGEBEvE G@SEE`TGAEAE GS`EpEFEAEAE;GS0E@E`FEpAEAEPGSPEE0F AEPAE G`SpEEPF@EAE`G`SEEF@E@E0G`SEEP@E`@Ep@EG@SpEE`YE @E0@EGSEEsE@EpgEG SPE`E@pE@E0hE0G`SE EPCG?E?EGSEE`BG?E?EG0?0_??AKH9?C?@@.A  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~HOMEAPPDATA%s %s %svolk_gnsssdr_/.volk_gnsssdr/volk_gnsssdr_configVOLK: Error allocating memory (posix_memalign: error %d: %s) Using Volk machine: %s %s;a_genericvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fcvolk_gnsssdr_s32f_x2_update_local_carrier_32fcBF@sse2_64_mmxu_sse2a_sse2u_ssea_sse@FFFF????IIII}}}}i!"i!"i!"i!"7777*=*=*=*=????????LLLL<<<<****BBBBu_sse3a_sse3ssse3_64u_ssse3a_ssse3    sse4_a_64sse4_1_64u_sse4_1a_sse4_1u_sse4_1_firstu_sse4_1_secondu_sse4_1_thirdu_sse4_1_fourthu_sse4_1_fifthu_sse4_1_sixth       @@@@sse4_2_64avx_64_mmxu_avxa_avxA@@@????????IIIIIIII}}}}}}}}i!"i!"i!"i!"i!"i!"i!"i!"77777777*=*=*=*=*=*=*=*=????????????????LLLLLLLL<<<<<<<<********Volk warning: no arch found, returning generic impl VOLK_GENERIC;<7+7(58[H5GXlhIlxlX7m :m@x}C8~7H~7h~7x~7~8~(8~@8~X8~p8~88888X8h9x909H9`9x99999(:H8:؀::(:h:x;(;ȁ@;؁X;x;(;8;x;;Ȃ<؂<(8<8P<Hh<<<<(<=(X=ȅ=x==(=ȉ>؉(>xP>h>(>8>>X(?p?ؚ????p@8@(@H AhPAAؤABH8BxXBB(BB8CC(ChCXDHhDXD8D EHE8EEE8PF8FhFHG8GxHHI0IX[ [P(8hX8Ih8Ix8I8I8I8I8J8(J8@J8XJ9pJ9J9JX:Kh: Kx:8K:PK:hK:K:K:K:K;K;K(;LH;(LX;@Lh;XL;pL;L;L;LN>N8>NH>Oh>(Ox>@O>XO>pO>O>O>O?O(?O8?PX?Ph?0Px?HP?`P?xP?P?P?P?P@P@Q@ Q@8Q@PQ@hQ@QAQ(AQHAQXAQARA@RXB`RCRCS(D SDXSxESESESESFT8F(ThFPTFxTFTFTFTFTFTFUG UG8U(GPU8GhUHGUXGUhGUxGUGUGUGVG(VG@VHXVHpV(HV8HVHHVXHVhHVxHWH0WhIxWxJW8KHXxLX8MYNPYNY(PZHP ZXP8ZhPPZPpZPZPZPZPZPZPP[Qh[Q[Q[(R\hR\R0\RH\(S`\hSx\S\XT]T@]XV]V]V]W]HW^W0^XH^hX`^Xx^(Y^Y^Z^xZ_Z _[8_(\P_\_]`X^(`^@`_`a`hb@a(cacaHeHbfb(gbxh8cipcjc8kdk0dHmdneHo`eHpexq0fqHfHsfsftfxuPghvgxwhxXhyhzh{Xi(}i~ jhjj؃khkkPlȉl؊mpm(mX nxnnnn(n8nXoh0oPohooȐoooo(pH0pXHpxhppppؑppq(q8HqH`qhqxqqqȒqؒr(r@r(`r8xrXrhrrrsȓ s@sXsxs(sHsXsxst t8tؔXtpttt8tHthuxu8uPuȕpuؕuuu(u8uXvh0vPvhvvȖvvvv(wH0wXHwxhwwwwؗwwxx8x`xHxhxxxؙy0y8PyhpyyȚy8yz(zPzpzȜzzz(zH{x0{P{؝p{{h{{Ȟ{|(8|XX|x||||H|x}@}xh}}x}}x~@~Hp~ؤ~h~xH(X@Xx(p(Ѐhج(@xp8Ȯ؁p pȺxP(ؿ080Xh(H@x pPX(8 (`8Ћ X@8`ȍ0pXx( Џ  P h @8hX(x`HȒ @H!h""""#(#@#X$$$%%&0&Hh'xx''h(ؕx((*P8/X0Ȗ011`389=>>?(?@8@ph@AhCDXGHJ`HLXMNHQR؜HTU8HXxYȝ^_cpcxdHg0HhhHihj؟jk8mnos88tpu(vvw(xXH}H~HppxȤ(@8h`8HxX``8hH8XЫhЬ H`(xH@8 8H ` (0h(ȰX0HXx xHpX !("H"H#(,8-`(.X..ȴ(/X///(/@0XH0px0001е81h11101H(2`X2x2223ضH3x33 384P84hh444h5ط6(6h789;X=H>HX?A CDXOHSTU(xVhXXY8ZH[\X]8h]P(^_a0Hdfh jphlnq`8stxwP8y{{| H|8x|P|h}}}~@~`XHH8`H0(H؃8Ȅ@80X xp(`h(Ph(@ȥ0X( pHh`xP@(H0h xp`XPx@Hx(0( (pH`Hx P @H PX(8x@0X! x"p#%X'`x(*+P-.81@X245078: (;p<=?`(@hABPxDEG@IK8L0NOP RphSTV`WY[PX]x^`@a8dXe08gXhhhxhhh0hHh`8iii(jxj(jPkx(k8kkk(l xlHlpXmHnXpppp(8q@htpwxz0|x(؄(HxH0ȒxxP8x X88P`Hx(Px((p 8 (H X X (Hx((0H`x(hPH!$8X'P*hX.2x4HH679(:p(<hA FJhNRo@،ȏxx(pXHXخ hXx( `    @ `  h hP p   ` (   x @ p ( x  (@pXh0hhhX( @X X p  8hHH0H`"H')@*,H. /h06H;(?CXGhd8xxhXp XhH@xP( X8XXHH(xx8(hh8PHhx H8 xX x x   H!`!x!!8!!h"8@"x" "H "(#hx#X#(# $( 8$"p$(#$X#$#$#$$$&%h)H%*%+%.(&H1x&4&6&;&h?8'8A'C'D (hFh(G(H((N`)hS)W)Z)_@*hv**+P++8 ,ؠh,x,,@-h--ح.`.(..8/0/Hh/ز/س/ش0صH0ض0x0h0ؿ1h 1(p1(11022H22 3P3833h334H4h4h4h44(45 5 p55556 6P6866h686 7H7( 7$7H) 88-X8183838696097H9H7`97x979:9(>9h?8:@:XC:F ;H8;hKP;O;T;U0<W<XY<[=H\X=]=b>hp>k>o>t>((?8h?(??x`@ؾ@xAXAAXA0BxBxB8C@CXxCCXCDxHDxDxDxDx(EHEExEEFhFhFXF8(GxGG(G( G(HX@HXH8HhHH(I8HIhI8IxI$I+8J,PJ-hJH.J.J/J(0K10K4hKh6K9K=L(BhLFLILLML(MO`MOxMPMHPMPMPMxSN(V8NhWNXNX[O^hO`OcOgO(l(PmxPoPxqQ(sXQhtQuQzPR(R؃RR؋0S(pSxShSX@TTUXU8UUx0V(xVVWXPWWxWWx XXXXXY8YpY8Y(YY(Z`ZZxZX [ p[[[0\!\8'\)\-@]5]8]9]A^F`^xL^S_(\P_g_m_s@`x`X~`0aaa(a(bؐ0bؑHb`bȚbc(Pcصcc8d8dغpddHe`exeeeee8fhPfhfhfXfg0ghggxggh(h`hhhhX 0iiiH jpjjx"j%kh%0kX)`k+kH,kx,k,k,k(-l/@l2pl3l5m7Pmh:m(=m?m8DnH`nXJn(LoMHoOoPoR pHWp\p8`qc q8hhqqؖqș0rxrrXHsss8 tرhtt8t@uuHuعuX(vغXvhvvw8wpwwwx0xHxHxHxyXyyxyzhzz{8({ x{{x{({H|8#|(|x/8}8}HD}I(~xOx~U~ZX`hHddei88mh8no(wX88؁h8p8XH(((ȃXX 8؄h8h(8؅h88`H(hHXHhPhHЉ H 0 H xH8H؋ Xh$8&(H)h+؍, -h(3Ўh88Ax$dؠUAAL,ТAAJ  AAD 4PBAD G0  AABH "KDF,D\tDBBE B(D0A8M`8A0A(B BBB4d|FBA G(a  ABBA H@80(  ,( D \( t   $,AAJ \AA, $D,AAJ \AAl$ ,AAJ \AA(0 (0  ($0 <(T0 l(   (08 0,8 D0\8 t08 08 08 08 40L8 d0|8 08 0 (   ( $ <(T luxph `h `,hDp\x4tp^BBA A(D0M(A ABB$=AAD tAA_l\<]AD VAAF gAA\4`BBB B(A0A8D@t 8A0A(B BBBD w8A0A(B BBB7RU4AAD s AAE F AAH LhBBB A(D0D (A BBBJ |(A BBB<?Az\t$,AAJ \AA$,AAJ \AA  $ < T l        , D \ t     4 L d |x ,pEBAA }ABDBBE B(D0A8FPy8C0A(B BBB| BBB B(D0A8G@Q 8A0A(B BBBA V 8C0A(B BBBF H 8A0A(B BBBF L xBBB A(D0~ (A BBBH J (A BBBG d 3BBB A(D0 (A BBBF n (A BBBC t (A BBBE LD!BBE A(A0 (A BBBG F (A BBBK L!0BBA A(D0w (A ABBI g (A ABBC L!BBB A(D0v (A BBBH y (A BBBH d4"0HBBB A(D0 (A BBBF w (A BBBB | (A BBBE "" "" AZ##4#L#d# |#AS#H2#p"#A#$#AG m AJ 4$$>AAJ R AAH RAA4\$>AAG V AAG RAA$ 2$H2$p2$2$2L %kBBA A(J0A (A ABBI D(A ABBL\%qBBA A(J0V (F ABBG r(A ABB$%8TAAG CFA\%pBBA A(G0 (C ABBE X (F ABBE t (F ABBI $4&GNK G \\&t&=&?Nf&(Y&pY&Y&Y 'HYD$'uBAA o CBH ^ ABG IABl'['f'hx''H\'BBA A(D0L (C ABBB d (F ABBA N (A ABBL \D(@BBB A(A0 (A BBBA A (F BBBC H(A BBB(((L(BBE A(A0 (A BBBA J (A BBBG L$)@BBA A(D0 (A ABBA s (A ABBF \t)BBE B(A0A8D@ 8A0A(B BBBF g8A0A(B BBBL) BBE A(A0w (A BBBG d(A BBBL$*BBE A(A0w (A BBBG d(A BBBdt*SBBB A(D0U (A BBBI i (A BBBH D (A BBBE d*7BBB B(A0A8D@l 8A0A(B BBBD  8A0A(B BBBJ 4D+BAD D0  AABA L|+8IBBE A(A0K (A BBBA ^ (A BBBE 4+8BAD D0  AABA L,BBB B(D0A8G@A 8D0A(B BBBF LT,@#BBE B(A0A8G@c 8D0A(B BBBD , _j\|,`BBB B(D0A8G@m 8A0A(B BBBE G 8C0A(B BBBA G 8A0A(B BBBA dD-sBBB A(D0T (A BBBJ i (A BBBH D (A BBBE D- {BAA E ABD Z ABC GABd- BBB B(A0A8D@L 8A0A(B BBBD K 8A0A(B BBBC d\.x (BBB A(C0q (A BBBF ~ (A BBBC D (A BBBA .@ S|. fBBB B(D0A8I@p 8A0A(B BBBH  8C0A(B BBBE G 8A0A(B BBBA \/x t/ T/ rBB A(D0t (A BBBJ d(A BBBT/ rBB A(D0t (A BBBJ d(A BBBT<0 PBB A(D0v (A BBBJ e(A BBBT0p PBB A(D0v (A BBBJ e(A BBBL0(RBBB B(A0A8JPd 8D0A(B BBBK L<18BBB A(A0x (A BBBI `(A BBB\1BBB B(A0A8D@ 8A0A(B BBBG u8A0A(B BBB|1(BBE B(A0A8GP` 8A0A(B BBBA  8C0A(B BBBA K 8A0A(B BBBJ Dl2HBBB B(A0A8DP8A0A(B BBBD2BBE B(D0A8D`8A0A(B BBBL2BBE B(D0A8DpA 8D0A(B BBBF LL3(BBF A(D0 (D BBBD a(T BBB|3BBB B(D0A8I`d 8A0A(B BBBD _ 8C0A(B BBBE G 8A0A(B BBBG l4!rBB B(A0A8D@ 8A0A(B BBBK v8A0A(B BBBT4rBB A(D0w (A BBBG a(A BBBT405rBE B(A0A8G` 8A0A(B BBBD T<5 rBB B(A0A8GP 8A0A(B BBBG l59PBB B(A0A8D@ 8A0A(B BBBE v8A0A(B BBBT6 PBB A(A0| (A BBBG a(A BBBT\6X%PBB B(A0A8GP 8A0A(B BBBA T60 UPBE B(A0A8G` 8A0A(B BBBF  78!)$7P!<7H!T7@!AWt7@!78!AW78!70!AW70!7(!AW8(!48 !AWT8 !l8!AW8!8!AW8!8!AW8!9!AW49!L9 AWl9 9 AW9 9 AW9 9 AW: ,: AWL: d: AW: : AW: : AW:  ; AW,; D; AWd; |; AW; ; AW; ; AW < $< AWD< \< AW|< < AW< <x AW<x =p AW$=p <=h AW\=h t=` AW=` =X AW=X =P AW>P >H AW<>H T>@ AWt>@ >8 AW>8 >0 AW>0 >( AW?( 4? AWT? l? AW? ? AW? ? AW? @ AW4@ L@AWl@@AW$@aAK B AA $@8 aAK B AA ,= S@UAl C Q O A$A AXDA AXdA AXA *A] J AA *A] J AA *A] J AA *A] J AB *A] J A$B!*A] J A$DB!aAK B AA $lBX!aAK B AA $B!aAK B AA $B!aAK B AA B0"AXC0"AX$C0"AXDC0"AXdC0"AXC0"AXC0"&A`C@"&A`CP"&A`D`"&A`$Ap"\DUAo H W I LD"&A`lD"&A`D"&A`D"&A`D"&A`D"+Ae E#+Ae,E#+AeLE(#+AelE8#+AeEH#+Ae$EX#qAK J AI $E#qAK J AI $E$qAK J AI $$F`$qAK J AI $LF$qAK J AI $tF%qAK J AI 4Fh%eBDE A DBN AAB,F%_BDE IDB$G%AG m AJ $,G8&AG m AJ <LD&HUBAD Jx  AABA $Dp(lUAAL G) D)BU,DH)UAAL@ AAE H8n2De\4H`nBBE A(D0J@ 0A(A BBBE  0A(A BBBA $Hp)AG E AB $H)AG V AA HppWD U G P H 4E@*gUAAD F DAO DAA$JBD B(D0A8P` 8A0A(B BBBE KC`<O?&BBA A(G@ (A ABBA LL@UBBL B(D0A8G@ 8A0A(B BBBG <PBBBA A(G@ (A ABBC dTPCBBB B(D0A8Lp 8A0A(B BBBI f 8A0A(B BBBA PF)LPGKBBB B(A0A8D28A0A(B BBBL$QKBBL B(A0A8G`9 8A0A(B BBBB <tQN&BBA A(G@ (A ABBA LQO@BBE B(D0A8D@ 8A0A(B BBBC RpP BFB B(D0A8J@ 8A0A(B BBBK ` 8A0A(B BBBF _ 8A0A(B BBBG T 8F0A(B BBBE DOQUBBH A(D0K` 0A(A BBBA DRTfBBE A(D0G@ 0A(A BBBD L,SVBBE B(A0A8Gp8A0A(B BBB4|S8X BAD D0  AABC <SYBAA X ABA  DBE <SYBBD A(J0 (A ABBF ,4T\tAAJ0` AAA L\Q\;UBBB B(A0A8G`r 8A0A(B BBBC T^UNLQ_8UBBE B(D0A8Dp 8A0A(B BBBD L$UdBBB B(D0A8G@ 8D0A(B BBBA |tU0eBFB B(D0A8JP 8A0A(B BBBE I 8D0A(B BBBJ  8A0A(B BBBG DRpfxUBBE A(D0LP 0A(A BBBA EDA pABDX$HUBBE A(F0 (D BBBA $[pAG e AB ,X؍hUAAG0 AAG ,\h ,EDA pABb'Aa$$bЦAD0{ AG LLbXBBBE B(D0A8Gp 8A0A(B BBBK LbX,BBH B(D0A8G` 8A0A(B BBBA 4_8F$UBAD GP  AABG L$cPBBB B(D0A8G@ 8D0A(B BBBA |tcBFB B(D0A8JP 8A0A(B BBBE I 8D0A(B BBBJ  8A0A(B BBBG D` HUBBE A(D0L`y 0A(A BBBE L 8A0A(B BBBG $j{LUADPl AF <m`BBA A(G@ (A ABBE <n GAD x DBF PP TLkp\UBBE A(G0L`hEpThA` 0A(A BBBA DkgqUBBE A(D0Dpf 0A(A BBBH TkUBBE B(D0A8M 8A0A(B BBBE TDlxM UBBE B(C0A8V 8A0A(B BBBA dlp ۾UBBE B(D0E8P 8A0A(B BBBE MTA<m$UBBD A(M (A ABBC LDmL6UBBH B(D0A8M 8A0A(B BBBG Tm;EUBBE B(D0A8M 8A0A(B BBBC TmrUBBE B(D0A8N 8A0A(B BBBE Dn8NRAUAC HU.h...T A ..V.Pa.|.@R.\.@T.x.PH.T.@I..0S.l.0N.p. N.P. c.m. w.Tn wLUBBE B(D0A8P 8A0A(B BBBI DLrH2"BBB A(D0G 0A(A BBBA Dr04"BBB A(D0G 0A(A BBBA Lo6YUBBE A(F0G_ 0A(A BBBB L,s(9BBB B(A0A8GP 8A0A(B BBBE L|s:BBB B(A0A8G9 8A0A(B BBBD LsH<BBB B(A0A8G9 8A0A(B BBBD Dt=BBB A(D0D+ 0A(A BBBF Ddt0?BBB A(D0DW 0A(A BBBB Lt@BBB B(A0A8G9 8A0A(B BBBD LqhBUBBB B(D0A8G` 8D0A(B BBBG LuFLduF}BBB B(D0A8J@[8A0A(B BBB<uG8BBA A(JG (A ABBC LrI#UBBB B(A0A8Jr 8A0A(B BBBH L;KBE A(E0(A BBBH0X`0C4FDLJKBBB B(A0A870A(B BBB<NBBD A(JV (A ABBA <kBBD A(JV (A ABBA DPBBE B(A0A80A(B BBBD\BBE B(A0A80A(B BBBdZKBE A(E0(A BBBI0X`0d ZKBE A(E0(A BBBI0X`0DtBBB B(A0A8}0A(B BBBDBBB B(A0A8}0A(B BBBD@BBB B(A0A80A(B BBBDLBBB B(A0A80A(B BBBDBBE B(D0A80A(B BBBDXBBE B(D0A80A(B BBBD$BBB B(A0A80A(B BBBDl8BBB B(A0A80A(B BBB4BBD A(I0j(A ABB4BBD A(I0j(A ABB,$`vIAI ^AB,TvIAI ^AB4FDA R0_ AAB4XFDA R0_ AAB4BBD A(M0(A ABB4,xBBD A(M0(A ABB4d@BBD A(M0(A ABB4BBD A(M0(A ABBЫLPBBB B(A0A8D 8A0A(B BBBA LD BBB B(A0A8G 8A0A(B BBBA L`BBB B(A0A8D 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA LT0BBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA $ AAD@AA$AAD@AA,DAAL AAA ,tAALg AAI ,`&AI fAB,`&AI fAB4`ABAC G0/ AAB4<xABAC G0/ AABtl<,EAA H@ AAB,EAA H@ AAB$AD0 AA 4,YAUAHX$d AD0 AA 4YAUAHX40BAA D@x  AABA Q4BAA D@x  AABA LHQ4dBAA G  AABE 4HBAA G  AABB ##383,4`,CA AD bA,d`,CA AD bAD`<IBB B(A0A8!0A(B BBBDX<IBB B(A0A8!0A(B BBBL$PBBB B(A0A8D8A0A(B BBBLtBBB B(A0A8D8A0A(B BBB D@ KBBB B(A0A870A(B BBBD<HKBBB B(A0A870A(B BBBLPBBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBD$PBBE B(D0A80A(B BBBDlBBE B(D0A80A(B BBBD 8BDB B(D0A8 0A(B BBBA D8BDB B(D0A8 0A(B BBBA dD;KBE A(E0(A BBBH0X`0d ;KBE A(E0(A BBBH0X`0%,)DDP-KBBB B(A0A870A(B BBB<X1BBD A(JV (A ABBA <(NBBD A(JV (A ABBA D jBBE B(A0A80A(B BBBDTmBBE B(A0A80A(B BBBdHpZKBE A(E0(A BBBI0X`0d@uZKBE A(E0(A BBBI0X`0Dl8zBBB B(A0A8}0A(B BBBD|BBB B(A0A8}0A(B BBBD~BBB B(A0A80A(B BBBDD@BBB B(A0A80A(B BBBDBBE B(D0A80A(B BBBDBBE B(D0A80A(B BBBDhBBB B(A0A80A(B BBBDdBBB B(A0A80A(B BBB4XBBD A(I0j(A ABB4BBD A(I0j(A ABB,vIAI ^AB,LXvIAI ^AB4|FDA R0_ AAB4FDA R0_ AAB4XBBD A(M0(A ABB4$ BBD A(M0(A ABB4\BBD A(M0(A ABB4BBD A(M0(A ABBxLBBB B(A0A8D 8A0A(B BBBA <pTLlh BBB B(A0A8G 8A0A(B BBBA LءBBB B(A0A8D 8A0A(B BBBA  L,BBB B(A0A8D 8A0A(B BBBA L|BBB B(A0A8G 8A0A(B BBBA L8BBB B(A0A8D 8A0A(B BBBA $AAD@AA$DAAD@AA,lAAL AAA ,XAALg AAI r@,&AI fAB,,&AI fAB4\ABAC G0/ AAB4ABAC G0/ AAB,D0 A D0r A  l$<L<'BBB B(A0A8G 8A0A(B BBBA LBBE B(A0A8G 8A0A(B BBBA , XEAA H@ AAB,<EAA H@ AABlXD0z A D0q A $HAD0 AA 4YAUAHX$ XAD0 AA 44YAUAHXLlhBBE B(D0A8ML 8A0A(B BBBA LBBE B(D0A8ML 8A0A(B BBBA 4 BAA G  AABE 4DBAA G  AABB 4|8BAA D@x  AABA Q4BAA D@x  AABA PQ#4#L3d3,|CA? AD bA,CA? AD bAD<IBB B(A0A8!0A(B BBBD$<IBB B(A0A8!0A(B BBBLlBBB B(A0A8D8A0A(B BBBLhBBB B(A0A8D8A0A(B BBB $p D<KBBB B(A0A870A(B BBBD KBBB B(A0A870A(B BBBL(BBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBDl(BBE B(D0A80A(B BBBDBBE B(D0A80A(B BBBD8BDB B(D0A8 0A(B BBBA DD8BDB B(D0A8 0A(B BBBA d;KBE A(E0(A BBBH0X`0d$;KBE A(E0(A BBBH0X`0\)t0-D0KBBB B(A0A870A(B BBB<4GBBD A(J (A ABBI <KGBBD A(J (A ABBI DTbBBE B(A0A80A(B BBBDeBBE B(A0A80A(B BBBd@hJKBE A(E0(A BBBG0P`0dL(mJKBE A(E0(A BBBG0P`0DrBBB B(A0A8}0A(B BBBDhtBBB B(A0A8}0A(B BBBDDvBBB B(A0A80A(B BBBDyBBB B(A0A80A(B BBBDp{BBE B(D0A80A(B BBBD|BBE B(D0A80A(B BBBDd@~BBB B(A0A80A(B BBBDBBB B(A0A80A(B BBB40BBD A(I0j(A ABB4,BBD A(I0j(A ABB,dvIAI ^AB,0vIAI ^AB4FDA R0_ AAB4؂FDA R0_ AAB440BBD A(M0(A ABB4lBBD A(M0(A ABB4BBD A(M0(A ABB4BBD A(M0(A ABBPL4ЈBBB B(A0A8D 8A0A(B BBBA ppȎL@ BBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA T`LtBBB B(A0A8D 8A0A(B BBBA LBBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA $dpAAD@AA$AAD@AA,`AAL AAA ,0AALg AAI r,,D&AI fAB,t&AI fAB4ABAC G0/ AAB4ABAC G0/ AAB,D,D0 A dD0r A 0l<L'BBB B(A0A8G 8A0A(B BBBA LBBE B(A0A8G 8A0A(B BBBA T@l(,EAA H@ AAB,0EAA H@ AABD0z A 40D0q A $TAD0 AA 4|HYAQADX$AD0 AA 4HYAQADXLBBE B(D0A8ML 8A0A(B BBBA LdBBE B(D0A8ML 8A0A(B BBBA 4 BAA G  AABE 4BAA G  AABB 4$pBAA D@p  AABA \Q4tBAA D@p  AABA hQ##3 3,$0,CA AD bA,T0,CA AD bAD0<IBB B(A0A8!0A(B BBBD(<IBB B(A0A8!0A(B BBBL BBB B(A0A8D8A0A(B BBBLdBBB B(A0A8D8A0A(B BBB x DKBBB B(A0A870A(B BBBD,KBBB B(A0A870A(B BBBLt BBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBBD BBE B(D0A80A(B BBBD\BBE B(D0A80A(B BBBD8BDB B(D0A8 0A(B BBBA D8BDB B(D0A8 0A(B BBBA d4;KBE A(E0(A BBBH0X`0d$;KBE A(E0(A BBBH0X`0)X-D4 1KBBB B(A0A870A(B BBB<|(5BBD A(JV (A ABBA <QBBD A(JV (A ABBA DnBBE B(A0A80A(B BBBDDpqBBE B(A0A80A(B BBBdtZKBE A(E0(A BBBI0X`0dyZKBE A(E0(A BBBI0X`0D\ ~BBB B(A0A8}0A(B BBBD `BBB B(A0A8}0A(B BBBD BBB B(A0A80A(B BBBD4 BBB B(A0A80A(B BBBD| hBBE B(D0A80A(B BBBD ЈBBE B(D0A80A(B BBBD 8BBB B(A0A80A(B BBBDT BBB B(A0A80A(B BBB4 (BBD A(I0j(A ABB4 BBD A(I0j(A ABB, ؍vIAI ^AB,< (vIAI ^AB4l xFDA R0_ AAB4 ЎFDA R0_ AAB4 (BBD A(M0(A ABB4 BBD A(M0(A ABB4L BBD A(M0(A ABB4 BBD A(M0(A ABB HL ȔBBB B(A0A8D 8A0A(B BBBA ,hpDL\8 BBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA XLحBBB B(A0A8D 8A0A(B BBBA LlxBBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA $ hAAD@AA$4AAD@AA,\XAAL AAA ,(AALg AAI r,&AI fAB,&AI fAB4LABAC G0/ AAB4ABAC G0/ AAB,D0 A D0r A Xl<L,'BBB B(A0A8G 8A0A(B BBBA L|BBE B(A0A8G 8A0A(B BBBA hP,(EAA H@ AAB,,EAA H@ AAB\(D0z A |D0q A $AD0 AA 4YAUAHX$(AD0 AA 4$YAUAHXL\8BBE B(D0A8ML 8A0A(B BBBA LxBBE B(D0A8ML 8A0A(B BBBA 4BAA G  AABE 44pBAA G  AABB 4lBAA D@x  AABA pQ4BAA D@x  AABA  Q h#$#<3T3,lCA? AD bA,hCA? AD bAD<IBB B(A0A8!0A(B BBBD<IBB B(A0A8!0A(B BBBL\ BBB B(A0A8D8A0A(B BBBL8 BBB B(A0A8D8A0A(B BBB@D,KBBB B(A0A870A(B BBBDtKBBB B(A0A870A(B BBBLBBB B(A0A8D8A0A(B BBBL xBBB B(A0A8D8A0A(B BBBD\BBE B(D0A80A(B BBBD` BBE B(D0A80A(B BBBD!8BDB B(D0A8 0A(B BBBA D4"8BDB B(D0A8 0A(B BBBA d|#;KBE A(E0(A BBBH0X`0d(;KBE A(E0(A BBBH0X`0Lh-d1D|4KBBB B(A0A870A(B BBB<8GBBD A(J (A ABBI <OGBBD A(J (A ABBI DDfBBE B(A0A80A(B BBBDhiBBE B(A0A80A(B BBBdlJKBE A(E0(A BBBG0P`0d<pJKBE A(E0(A BBBG0P`0DuBBB B(A0A8}0A(B BBBD8xBBB B(A0A8}0A(B BBBD4zBBB B(A0A80A(B BBBD||BBB B(A0A80A(B BBBD@BBE B(D0A80A(B BBBD BBE B(D0A80A(B BBBDTBBB B(A0A80A(B BBBDBBB B(A0A80A(B BBB4BBD A(I0j(A ABB4 XBBD A(I0j(A ABB,T vIAI ^AB, vIAI ^AB4 PFDA R0_ AAB4 FDA R0_ AAB4$!BBD A(M0(A ABB4\!ȇBBD A(M0(A ABB4!BBD A(M0(A ABB4!XBBD A(M0(A ABB" L$"BBB B(A0A8D 8A0A(B BBBA t"@p"L" BBB B(A0A8G 8A0A(B BBBA L"BBB B(A0A8D 8A0A(B BBBA D#0Ld#BBB B(A0A8D 8A0A(B BBBA L#0JBBB B(A0A8G) 8A0A(B BBBA L$0pBBB B(A0A8DR 8A0A(B BBBA T$PLt$иBBB B(A0A8D 8A0A(B BBBA L$pBBB B(A0A8G 8A0A(B BBBA L%BBB B(A0A8D 8A0A(B BBBA d%`L%BBB B(A0A8D 8A0A(B BBBA L%pBBB B(A0A8G 8A0A(B BBBA $&r<&hLT&BBB B(A0A8G 8A0A(B BBBA L&(BBB B(A0A8D  8A0A(B BBBA L&pBBB B(A0A8D 8A0A(B BBBA LD'BBB B(A0A8Gs 8A0A(B BBBA L' BBB B(A0A8G 8A0A(B BBBA L' BBB B(A0A8G 8A0A(B BBBA L4(@BBB B(A0A8D 8A0A(B BBBA L( sBBB B(D0A8GO 8A0A(B BBBA L(BBB B(A0A8D 8A0A(B BBBA L$) BBB B(A0A8D 8A0A(B BBBA Lt)pBBB B(A0A8D 8A0A(B BBBA L)"BBB B(A0A8D 8A0A(B BBBG $*`&AAD@AA$<*&AAD@AA,d*P'AAL AAA ,* +AALg AAI *.*/L*P0 BBB B(A0A8G 8A0A(B BBBA LD+8!BBE B(A0A8G 8A0A(B BBBA L+?!BBE B(A0A8G 8A0A(B BBBA L+G BBB B(A0A8G 8A0A(B BBBA ,4,0R&AI fAB,d,0S&AI fAB4,0TABAC G0/ AAB4,HUABAC G0/ AABL-`V BBE B(D0A8J 8A0A(B BBBA LT-0`J BBB B(A0A8G) 8A0A(B BBBA L-0lyBBE B(A0A8GU 8A0A(B BBBA -`t .Hw$.0z,D0 A D.@{D0r A d.|l|.~<L.0'BBB B(A0A8G 8A0A(B BBBA L.BBE B(A0A8G 8A0A(B BBBA 4/L/,d/EAA H@ AAB,/EAA H@ AAB4/ BAC M`\  AABE 4/XBAC MpX  AABA 400D0z A T0D0q A t0 D0 A $0ДAD0 AA 40x;YAAKX0D0 A $10AD0 AA 4<1؛;YAAKXLt1BBE B(D0A8ML 8A0A(B BBBA L1 BBE B(D0A8ML 8A0A(B BBBA L2`BBB B(A0A8Gy 8A0A(B BBBD Ld2BBB B(A0A8Gz 8A0A(B BBBK L2 BBB B(A0A8Gk 8A0A(B BBBJ L3pBBB B(A0A8Gl 8A0A(B BBBI T3D0 A 4t3BAA D@p  AABA 3Q,30AAD@ AAA 43BAA D@p  AABA ,4HQD4#\4#t4343,4CA? AD bA,4CA? AD bAD5<IBB B(A0A8!0A(B BBBDL5<IBB B(A0A8!0A(B BBBL5BBB B(A0A8D8A0A(B BBBL5`BBB B(A0A8D8A0A(B BBB46L6hDd6KBBB B(A0A870A(B BBBD6KBBB B(A0A870A(B BBBL6 BBB B(A0A8D8A0A(B BBBLD7BBB B(A0A8D8A0A(B BBBD7 BBE B(D0A80A(B BBBD7BBE B(D0A80A(B BBBD$88BDB B(D0A8 0A(B BBBA Dl88BDB B(D0A8 0A(B BBBA d8;KBE A(E0(A BBBH0X`0d9;KBE A(E0(A BBBH0X`099(D9KBBB B(A0A870A(B BBB<9GBBD A(J (A ABBI <<: GBBD A(J (A ABBI D|:$BBE B(A0A80A(B BBBD:'BBE B(A0A80A(B BBBd ;8*JKBE A(E0(A BBBG0P`0dt; /JKBE A(E0(A BBBG0P`0D;4BBB B(A0A8}0A(B BBBD$<`6BBB B(A0A8}0A(B BBBDl<8BBB B(A0A80A(B BBBD<;BBB B(A0A80A(B BBBD<h=BBE B(D0A80A(B BBBDD=>BBE B(D0A80A(B BBBD=8@BBB B(A0A80A(B BBBD=ABBB B(A0A80A(B BBB4>(CBBD A(I0j(A ABB4T>CBBD A(I0j(A ABB,>CvIAI ^AB,>(DvIAI ^AB4>xDFDA R0_ AAB4$?DFDA R0_ AAB4\?(EBBD A(M0(A ABB4?EBBD A(M0(A ABB4?FBBD A(M0(A ABB4@GBBD A(M0(A ABB<@HHL\@JBBB B(A0A8D 8A0A(B BBBA @hNp@PL@8R BBB B(A0A8G 8A0A(B BBBA L,A[BBB B(A0A8D 8A0A(B BBBA |AXaLAcBBB B(A0A8D 8A0A(B BBBA LAXgJBBB B(A0A8G) 8A0A(B BBBA Lc?d?m?RAcB[B \CZC!eD RSX9Z}R(<8 7D8(5$RM )e)h]2fa=3         }*=&3|D+=         $ -$+8J\ 8E Z l   #         V  E8}5   gy .)\   ,I &<AO "9>L Iqv Cin~=?7   (3;Bih-!x*=1A^@P%3e}i  ##sD _q(}E   -"   8  5-/       0 E\avDE,NCE        @fz )     : ,      u#vwvwrvǁrstttuuuq||{ʀ|{|{!{"yz${$z'y,*y.c</c07<1a4<7r:<;;y<a=><?c@<AcA<BcC<D{D<EdE3<GyG<HxH<IxJ<JxK<KxL<MwN<NwO<PbP<QbQ<RbR<S`T<U`U<VaW<WbX<Y`Z<Z`[<\a\<]a]<^a_<_`drjrkxnmrnnvvwvyy|||}}X|~t|(#(&(# 8( % '(#('('(((('!(#'$(%%&'e4 K1{#(\ 8 J1;~1;~1;~.L?      .L?      1;~1;~1;~1;~1;~1;~1;~1;~1;~-LP -LP 1;~1;~1;~1;~1;~ViQH  ")rD`qDqDrDb|55)U)55"6 0D $Ruuo@h@.@ E u@@"DD oDoopDu0D0D0D0D0D1D1D&1D61DF1DV1Df1Dv1D1D1D1D1D1D1D1D1D2D2D&2D62DF2DV2Df2Dv2D2D2D2D2D2D2D2D2D3D3D&3D63DF3DV3Df3Dv3D3D3D3D3D3D3D3D3D4D4D&4D64DF4DV4Df4Dv4D4D4D4D4D4D4D4D4D5D5D&5D65DF5DV5Df5Dv5D5D5D5D5D5D5D5D5D6D6D&6D66DF6DV6Df6Dv6D6D6D6D6D6D6D6D6D7D7D&7D67DF7DV7Df7Dv7D7D7D7D7D7D7D7D7D8D8D&8D68DF8DV8Df8Dv8D8D8D8D8D8D8D8D8D9D9D&9D69DF9DV9Df9Dv9D9D9D9D9D9D9D9D9D:D:D&:DG`GGGGHHGGpG@~GG|GpGHGzG0G@xGG0GvGGP HtGGG`GHGpqGGpGHGЪGGGG HpGGGoG0GnGGG0HPG GkGGGPiG GG`G H0GPGfGGG0GPHdG G0G0cGGGHGЉGGG@G0GPGG@u v:vlv@vvv1wSRSSI0I`RSS`uHuH`RSSuHvHRSS@vHpyHSSSI0IhRSS|H}H8RSS HЁHRSSH0HRSSH0HRSSHPHRSS HЗHRSSI0IRSSHHRSSH@HRSSH`H8RSS`IIxRS@HRSSHHRSSHHcRSSPII@RSSHHHRSSPHHSSSIIRSSI0IRSSI IRSS0 I IRSS@IIA4SR@SSGSSI`III`RSSII`RSSI0IR@SSGSSpIpI IISSSI0IhR@SSGSSI!II#I8RSSP$I'IRSS)I`,IRSS/I`3IRSS7I9IRSSP;I=IR@SSGSSpJJpJJRS@SSGS>IpJ?I` JR@SSGSSI0AIIpFIRSSKIOI8R@SSGSS0IIIIxRSpSIRSSWItIRSSIДIcR@SSGSSIIII@RSSI IHRSSI IS@SSGSSI0IIIR@SSGSSIII`IRSSIIR@SSGSSI`IpI IR@SNSSGSTSS I IpI I IIATR@SSGSSpK@ K KK`RTSTSPJ0JJ`J`RTSTSKJ@KJR@SSGSSJJJ@JSSSKKhR@SSGSSJpJ`JJ8RTSTSJJJJRTSTSKPJK!JRSS#J(JRTSTSPKP,JK .JRSS/J1JR@SSGSS0"K$K0%K'KRS@SSGSP3JpK4J`KR@SSGSSJ5JJ;JRSSP@J0DJ8R@SSGSSJ0JJJxRSHJRTSTS J`LJPJpiJRSSJpJcR@SSGSSJ JPJJ@RTSTSJ`JJJHRSS JJS@SSGSSpJJpJ0JR@SSGSSJ`JPJJRSSJPJR@SSGSSJJJJR@SNSSGSTSSJJJJJJATR@SSGSSpL@L L"L`RTSTSpL0(KL`(K`RTSTSL(K@L(KR@SSGSS0K)KK+KSSSLLhR@SSGSSKp.KK/K8RTSTSL0KL3KR%TTS-TTSLLP6KLL9KRSS;K @KRTSTS0%LpDK)L@FKRSSHKIKR@SSGSS6L8L9L;LRS@SSGSpKKP.LLK@2LR@SSGSS0LMKL0SKRTSTSpKpXKpL \K8R@SSGSS KPKKKxRS_KRTSTS@K dKpKp{KRSSKKcR@SSGSSK@KpKK@RTSTSKKKKHRSS@KKS@SSGSSKKKPKR@SSGSSKKpK KRSSKpKR@SSGSSK K0KKR@SNSSGSTSSKK0KKKKATR@SSGSS05M7M9Mp;M`RTSTSM;L@M MYLBMZLRSS\L`^LR@SSGSSNMQMQMTMRS@SSGS`L0GMPaL KMR@SSGSS MbL@"MgLRSSmLpL8R@SSGSSMLpM`LxRStLRTSTSM yLL0LRSS@L0LcR@SSGSS@MLM`L@RTSTS`M LLLHRSSLLS@SSGSS0M M0 M MR@SSGSS`L LLLRSS`LLR@SSGSS@MLLLR@SNSSGSTSSLLLLL@LATRT@SSTGSSOOOOO O`RTSTSNTMN UM`RTSTSNPUMNUMR@STSGSTS N@,NUMMNXMSTSTSNNN`NhRT@SSTGSS.NN0[MN@Mp\M8RTSTS@N]MpN``MR%TTS-TTSNpNcMNpNeMRTSTSNhMNlMRTSTS O0qM`OsMRTSTSKNtMQNvMRT@SSTGSS#O'O*Op*O`.O0ORS@STSGST0xMOOpyMPOOR@SSGSSNzMNMRTSTSN0MNM8R@SSGSSNM@NMxRTTTTS2NNПNPNMRTSTS:NM0M0MRTSTS XNM0aNpMcR@SSGSSNMNM@RTSTS =N`MMMHRTSTSNM0NMS@SSGSS0NN0NNRT@SSTGSS>NN@M` N0MMRTTTTTTSSNlNrN xN}N`NM0MRT@SSTGSSFN&NMNMMR@SNSSGSTSSMMMMM`MA TRT@SSTGSSpP@PPPP PP`RTSTS0PP1O`P1O`RTSTSP1O@P1OR@STSGSTSOP02OOPO4OSTSTS0PpP PPhRT@SSTGSS@ P O7OOO8O8RTSTSP:OPR3R/R 7R/Rp.RRT@SSTGSSQ QPQQQQRTTTTTTSS*RRRR R%RQ@QRT@SSTGSS@QQQQPQQR@SNSSGSTSSQДQQQQpQ.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.gcc_except_table.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss 8@8T@T !t@t$4o@ ,> .@.Fh@hENopDp$ [oD jDtB@"D@"@ ~0D0y0D0 0:D0:$R$ @R@@T<7HaN@PdR@8 @@@@@@00pp@p@@@NN ЗNЗЗx NPP@@DDЗNЗЗPtdh Fh h QtdRtdЗNЗЗ00/lib64/ld-linux-x86-64.so.2GNU GNU"o߾uH @ L% ,c B!jDC@fl l A@ "b}""`@@ $ϐ KHFtd22~$(0:P   )@HE A0%ɀ(,Tn$DUpd4"fDH!X1j՝nP @J)KD0e $(H""B B33B$!9:À%2 @B @"@I`D"AB ,g$0QD!$j2!\H@X(aD)"@ J@@!A"@ D`@"4Q0BL@PH@"&BD u8BASc1  (by    !"$&')+,-.1479:=>?ABCDFGIJKLNPRTVXZ[]_`abcdejlmoprsuxz|   "#&'*,-/012345679:;<>?@ABFGJLNOPRSTUV[\^`bcefghklmpqrstwx{~     v KmFރؐDV4ku(5amF[:H[rkrʓvaMё3O&7+2?>}>"D8/M#jn3Top4|>NEvb8oybz#T-A mQM]T ➣Ѝ2if _P< C/`EǢx%HZ)C +83 ӑ{!jBE칹O+JLN](CJ&۳{wrQG3"Ly{U̍I?I?zb"2AgeIPQr'e^f_Uҝa ss'I鿯E!u0\f:QP$ n% G*ea{)0[V>Q4$Q( LSLt Y ;HJ@ YnG^gR/""" kN?4w ZxIkeI>(Emε]s:!+Iyn| v0P[%πREXO5_Jvw'jsb{Nt7%xETC Y@ìɴr ZMЩEXv}dTj$/D -$(¿OWoJACR?̌Jo@8ʪm%Yޫtrf?L93Kh-gaBð3֚U]k`C^˯t;o+{P .as[oGK[%WgaS}`kM Qv?U7JBNunAG%j6'!ǾMB8[ta41NJorC1k$k tI?2}r:/ +@6lg4UKMwKV;o%m C[Bhʩs{wEL0&EΖ- @RMD QMfXEPvJ7| ab]#*EX0_xh7 aqŬbe?~!]$j CkNr M?S&$lY)-hdõ$sj"[$p<6\MCjqſ)]$%yX2 '[4n31/ C|> $V8*n{MpB{; @"SgߍEbU| U|Hn e?SߥKI"Ȼ8}.\wM2s2X骓d={a~֑k&|f kgnN[(ACkW|IYIod:AyߥQIg7%|yO+g#60+[q+Ou()M.,VO־iBJZgRaz H/X`2vyR]qX'+#хfAK"6y'`J]kЯ>.zn7&^sq51%|R|.p4q0#"B-9frn!,iE6Ep BJ^I>Op$o/qU_p_foWbE#VriP$)`" Q4;Vi>o^fZcOV0o0T^oEEd_iGr pogm#jx)>eVqXop\l0A0d\Wo qN oSa=$ZoT!m_T$qXYoV=qoWY*r@pGoqpq=v9 \) -Yo-d`pB7q{BoZY_^roqq 6Up+xqrmbN!K!by0" p\G" hY!@m l9v" T%W!@lPޠ @lR&Af!@eY!}I" h 'P" lN plR pl ΢ذ~Pװ.P" vO ( !y(OZ!`k lw !@yH-" `[D!@}BS!hxBFA" RFa!@"" 0V" `hc kA-" ZiA!n(؁ְLv" @3c-loA1" 0cy-" Z* lO!B[y! 8`t!H[!g( lIYH"  h l!^y1" 0c-)" 0XH" h%H. t[ذ;G" hA" ^>" O @!P\yzw" T%C@pA" P[" Пh" Yi$d!0\yÒ" V" `hcء lq" T-zxװNP" vO N!8Z" S." S" `SY ly!@}Hذr" S%r='@A'mAj|Aȋ" qNg!@fX5!ip" S%" O7z!}D{" p^ wY" O !y(t" p3c/w" 5c[ PlC lk3" p5c ذ3" YiװV!d(" O_&@tAC!Pnn" @S" S٤!y {hذ3" 4crHذ" P_!iX-" `[7" ~O j!@yB aNv!y pl9ְ4!@8w" PŞذ" 0[uM" @h " pxOqװeA{ְR" T%eB!f(" O4"" \i'pװ]G" h&K!H" `Sl!pX{@ذ<" P%7Z|AO! = SДְ " SL|" ODA " |Op;" `cSf!qj" hP" pEhְ" ~Oˌ!@yt" @6c u" Z[5w" 5cu" Tf!hhװ lQm!('@t O w$pְװ F0Arx" Oi3" 4c`!0h ذ!@y," P\" /Xcְy!F5!B" `S7I!`y/qm" @pNZ-" ZUK" h T!4װzHc@ lBb" 0P~ " wOa{" T%DcpmA!" V " ~O,i" P_TذL" hG PlC @l" @[r" P " }Ov[&`AR@d P" tOs!^y" RRh(" .Xq" ~Ov" T "ЃA%nr Pwe! \yzh!g(a" 6SNۄ 0lIQ" Fhq" @S l]rְ" ЀO|8ذ H"  h" TZ" @pN" `Wi," S%,vA!yM!q(R8iʨ l" PO;-" ZUBq m " `cD" WM" 0P_ " wOa lI(װz l* " ~O,3T!`i j" @^TJ" 0 h @ ! y(װRpg `l&xAl PlBԘ 0lBw!`\y'3(" P.Xqx" N6 lo" pX|/cPzA!yHx" O J!Hװ3{" P[ذ\ lR!`dy(n!t ŀ" P%" 0~O r#" 0VY!  lB/" T " S%0װSװ}" S%4!P^y" yN\" cs!y8" @~O" qNZDA-" `[/" @]/xذbg ]!dPi*!m^/" `q\)Q" h5Gb!`r װ&Am!" P9 lBpذ" ^8?" iNq" `װڥذ." 0iNq|@װ^!c(j!pn" vN S{ANwװ !^y N" gNa" 0Z" S[!k(߭" p\L" 0h-g" pO s" hdϫ" @ZiK,PlA" S" ^ !yH!" V,@wAe!rPSX!@?W!eLu" T-|" [i" lNbL" `hˬ" PSԮ" PSv" S-" ZhfG" hlְnP" vOcذA0pAv" uOTװ " @^TjpAu" OW!yd0A!0^yף" PSW" `gc6+A"" V+0AdAkװ l l{ " \E!k" Sq!`by +!e! y" P5 lzHc'ؔ " PPYķw~'Pr" \(" 0X]װ XװK" PR{Ɏ" j) @lذG4" ct0!Ht" @PZ 0l6I" h%*`AD PlI3!p^yY!f)!oc!xlibboost_date_time.so.1.55.0__gmon_start___Jv_RegisterClasses_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable_ZTSN5boost16exception_detail10clone_baseE_ZTIN5boost9exceptionE_ZTSN5boost9exceptionE_ZTIN5boost16exception_detail10clone_baseE_ZTVN5boost9exceptionE_ZTVN5boost16exception_detail10clone_baseElibboost_system.so.1.55.0_ZN5boost6system15system_categoryEv_ZN5boost6system16generic_categoryEvlibboost_filesystem.so.1.55.0_ZTSN5boost6system12system_errorE_ZN5boost10filesystem6detail16create_directoryERKNS0_4pathEPNS_6system10error_codeE_ZTIN5boost6system12system_errorE_ZN5boost10filesystem6detail19temp_directory_pathEPNS_6system10error_codeE_ZN5boost6system12system_errorD1Ev_ZNK5boost6system12system_error4whatEv_ZN5boost6system12system_errorD2Ev_ZTVN5boost6system12system_errorE_ZN5boost10filesystem6detail6statusERKNS0_4pathEPNS_6system10error_codeE_ZN5boost6system12system_errorD0Evlibboost_thread.so.1.55.0_ZN5boost21thread_resource_errorD1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED1Ev_ZTIN5boost16thread_exceptionE_ZTVN5boost21thread_resource_errorE_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED1Ev_ZN5boost16thread_exceptionC2EiPKc_ZTVN5boost16thread_exceptionE_ZTSN5boost21thread_resource_errorE_ZN5boost16thread_exceptionD0Ev_ZN5boost21thread_resource_errorD2Ev_ZTIN5boost21thread_resource_errorE_ZTIN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEE_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED2Ev_ZN5boost16thread_exceptionD1Ev_ZN5boost16thread_exceptionC1EiPKc_ZN5boost16thread_exceptionD2Ev_ZTSN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEE_ZTVN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEE_ZN5boost21thread_resource_errorD0Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED0Ev_ZTSN5boost16thread_exceptionE_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEED0Evlibboost_serialization.so.1.55.0libboost_chrono.so.1.55.0libpthread.so.0pthread_cond_initpthread_mutex_destroy__pthread_key_createpthread_mutex_initpthread_cond_destroylibgnuradio-runtime.so.3.7.5libgnuradio-blocks.so.3.7.5libgnuradio-fft.so.3.7.5libgnuradio-filter.so.3.7.5libgflags.so.2_ZN6google24ShutDownCommandLineFlagsEv_ZN6google15SetUsageMessageERKSs_ZN6google21ParseCommandLineFlagsEPiPPPcb_ZN6google16SetVersionStringERKSslibglog.so.0_Unwind_Resume_ZN6google15LogMessageFatalD1Ev_ZN6google10LogMessage6streamEv_ZN6google10LogMessageC1EPKci_ZN6google17InitGoogleLoggingEPKc_ZN6google10LogMessageD1Ev_ZN6google15LogMessageFatalC1EPKci_ZN3fLS13FLAGS_log_dirElibarmadillo.so.4libuhd.so.003libgnuradio-uhd.so.3.7.5_ZN5boost6detail16thread_data_baseD2Ev_ZTVN5boost16bad_lexical_castE_ZN5boost15condition_errorD2Ev_ZN5boost15condition_errorD1Ev_ZN5boost10lock_errorD2Ev_ZN5boost10lock_errorD1Ev_ZN5boost15condition_errorD0Ev_ZN5boost10lock_errorD0Ev_ZTVN5boost15condition_errorE_ZTVN5boost10lock_errorE_ZN2gr9msg_queue6handleEN5boost10shared_ptrINS_7messageEEE_ZN2gr9msg_queue11insert_tailEN5boost10shared_ptrINS_7messageEEE_ZN6google10LogMessageC1EPKcii_ZN5boost6system12system_errorC2ERKS1__ZN5boost6system12system_errorC1ERKS1__ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED2Ev_ZTVN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED1Ev_ZThn24_N5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED1Ev_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED2Ev_ZTVN5boost16exception_detail19error_info_injectorINS_10lock_errorEEE_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_10lock_errorEED1Ev_ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEED2Ev_ZTVN5boost16exception_detail19error_info_injectorINS_15condition_errorEEE_ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEED1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_15condition_errorEED1Ev_ZN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED0Ev_ZThn24_N5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEED0Ev_ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEED0Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_15condition_errorEED0Ev_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED0Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_10lock_errorEED0Ev_ZN2gr9msg_queue11delete_headEv_ZN5boost6detail16thread_data_base25notify_all_at_thread_exitEPNS_18condition_variableEPNS_5mutexE_ZN6google14FlagRegistererC1EPKcS2_S2_S2_PvS3__ZN5boost6chrono12system_clock3nowEv_ZN5boost6chrono12steady_clock3nowEv_ZN5boost6thread13native_handleEvpthread_self_ZN5boost6thread26do_try_join_until_noexceptERK8timespecRb_ZTVN5boost6detail16thread_data_baseE_ZN5boost6thread21start_thread_noexceptEv_ZN5boost6thread6detachEvpthread_mutex_unlockpthread_mutex_lock_ZN5boost6detail23get_current_thread_dataEvpthread_cond_wait_ZN5boost11this_thread18interruption_pointEv_ZTIN5boost18thread_interruptedE_ZTISspthread_cond_signal_ZN2gr9msg_queue4makeEj_ZTIN5boost16bad_lexical_castE_ZN5boost6threadC1Ev_ZTIN5boost15condition_errorE_ZTSN5boost15condition_errorE_ZTIN5boost10lock_errorE_ZTSN5boost10lock_errorE_ZTSN5boost18thread_interruptedE_ZTSN5boost16bad_lexical_castE_ZTIN5boost16exception_detail19error_info_injectorINS_10lock_errorEEE_ZTSN5boost16exception_detail19error_info_injectorINS_10lock_errorEEE_ZTIN5boost16exception_detail19error_info_injectorINS_15condition_errorEEE_ZTSN5boost16exception_detail19error_info_injectorINS_15condition_errorEEE_ZTSSs_ZTIN5boost6detail16thread_data_baseE_ZTIN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZTSN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEE_ZN2gr7message4makeElddm_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNKSt5ctypeIcE8do_widenEc_ZN2gr9top_block5startEi_ZN2gr9top_block4stopEv_ZN2gr9top_block4waitEv_ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE8_M_eraseEPSt13_Rb_tree_nodeIjE_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE7_M_copyEPKSt13_Rb_tree_nodeIS2_EPSA__ZN2gr11hier_block27connectEN5boost10shared_ptrINS_11basic_blockEEEiS4_i_ZN2gr9top_block4dumpEv_ZN2gr11hier_block214disconnect_allEv_ZN2gr14make_top_blockERKSs_ZNSt4pairISsSsED2Ev_ZNSt4pairISsSsED1Ev_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1__ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6__ZN2gr11hier_block210disconnectEN5boost10shared_ptrINS_11basic_blockEEEiS4_i_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_PKS3__ZN2gr6blocks11file_source4makeEmPKcb_ZN2gr6blocks8throttle4makeEmdb_ZN2gr6blocks9file_sink4makeEmPKcb_ZNKSt5ctypeIcE9do_narrowEcc_ZSt4fillSt13_Bit_iteratorS_RKb_ZNSt6vectorIbSaIbEE14_M_fill_insertESt13_Bit_iteratormb_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPN5boost2io6detail11format_itemIcSt11char_traitsIcESaIcEEEmS9_EEvT_T0_RKT1__ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPN5boost2io6detail11format_itemIcSt11char_traitsIcESaIcEEESA_EET0_T_SC_SB__ZNSt6vectorISsSaISsEED2Ev_ZNSt6vectorISsSaISsEED1Ev_ZNSt10_List_baseISt4pairISsSsESaIS1_EE8_M_clearEv_ZN3uhd13stream_args_tD2Ev_ZN3uhd13stream_args_tD1Ev_ZN3uhd13device_addr_tC1ERKSs_ZN2gr3uhd11usrp_source4makeERKN3uhd13device_addr_tERKNS2_13stream_args_tE_ZN3uhd14tune_request_tC1Ed_ZNK3uhd14sensor_value_t12to_pp_stringEv_ZNK3uhd14sensor_value_t7to_boolEv_ZN2gr6blocks28interleaved_short_to_complex4makeEbb_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8__ZN2gr6filter8pm_remezEiRKSt6vectorIdSaIdEES5_S5_Ssi_ZN2gr6filter14fir_filter_ccf4makeEiRKSt6vectorIfSaIfEE_ZN2gr6filter14fir_filter_fff4makeEiRKSt6vectorIfSaIfEE_ZN2gr6blocks16float_to_complex4makeEm_ZN2gr6blocks14float_to_short4makeEmf_ZN2gr6blocks13float_to_char4makeEmf_ZN2gr6filter27freq_xlating_fir_filter_ccf4makeEiRKSt6vectorIfSaIfEEdd_ZN2gr6filter27freq_xlating_fir_filter_scf4makeEiRKSt6vectorIfSaIfEEdd_ZN2gr6filter27freq_xlating_fir_filter_fcf4makeEiRKSt6vectorIfSaIfEEdd_ZN2gr6blocks16complex_to_float4makeEm_ZN2gr6blocks13char_to_short4makeEm_ZN2gr6blocks16stream_to_vector4makeEmm_ZN2gr11basic_block9setup_rpcEv_ZN2gr11basic_block14check_topologyEii_ZN3pmt3eqvERKN5boost13intrusive_ptrINS_8pmt_baseEEES5__ZN2gr11basic_block12has_msg_portEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN3pmt12dict_has_keyERKN5boost13intrusive_ptrINS_8pmt_baseEEES5__ZN2gr5block18processor_affinityEv_ZN2gr11basic_block23message_port_is_hier_inEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN2gr11basic_block24message_port_is_hier_outEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN2gr11basic_block20message_port_is_hierEN5boost13intrusive_ptrIN3pmt8pmt_baseEEEvolk_free_ZN2gr5blockD2Ev_ZN2gr12io_signature4makeEiii_ZN2gr5blockC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6_volk_get_alignmentvolk_malloc_ZN2gr3fft11fft_complexC1Eibi_ZN2gr3fft11fft_complex7executeEvvolk_32fc_conjugate_32fc_ZN2gr11basic_block15has_msg_handlerEN5boost13intrusive_ptrIN3pmt8pmt_baseEEE_ZN3pmt21intrusive_ptr_add_refEPNS_8pmt_baseE_ZN3pmt21intrusive_ptr_releaseEPNS_8pmt_baseE_ZN2gr11basic_block12dispatch_msgEN5boost13intrusive_ptrIN3pmt8pmt_baseEEES5__ZN2gr5block12consume_eachEivolk_32fc_magnitude_squared_32fvolk_32fc_x2_multiply_32fc_ZTIN2gr5blockE_ZN2gr12msg_accepter4postEN5boost13intrusive_ptrIN3pmt8pmt_baseEEES5__ZN2gr5block22set_processor_affinityERKSt6vectorIiSaIiEE_ZN2gr5block24unset_processor_affinityEv_ZN2gr5block8forecastEiRSt6vectorIiSaIiEE_ZN2gr5block5startEv_ZN2gr5block4stopEv_ZN2gr5block28fixed_rate_ninput_to_noutputEi_ZN2gr5block28fixed_rate_noutput_to_ninputEivolk_32f_x2_add_32fvolk_32f_s32f_multiply_32fvolk_32fc_s32fc_multiply_32fc_ZN2gr4fxpt2PIE_ZN2gr4fxpt13TWO_TO_THE_31E_ZN2gr4fxpt12s_sine_tableE_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE24_M_get_insert_unique_posERS1__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZNSt3mapISsSsSt4lessISsESaISt4pairIKSsSsEEEixERS3__ZN2gr5block17set_relative_rateEd_ZTVN2gr10sync_blockE_ZNK2gr12io_signature18sizeof_stream_itemEi_ZN2gr10sync_blockC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6__ZTIN2gr10sync_blockE_ZN2gr10sync_block8forecastEiRSt6vectorIiSaIiEE_ZN2gr10sync_block12general_workEiRSt6vectorIiSaIiEERS1_IPKvSaIS6_EERS1_IPvSaISA_EE_ZN2gr10sync_block28fixed_rate_ninput_to_noutputEi_ZN2gr10sync_block28fixed_rate_noutput_to_ninputEi_ZN2gr6blocks4copy4makeEm_ZN2gr5block13set_alignmentEi_ZN2gr14sync_decimatorC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6_j_ZTIN2gr14sync_decimatorE_ZN2gr14sync_decimator8forecastEiRSt6vectorIiSaIiEE_ZN2gr14sync_decimator12general_workEiRSt6vectorIiSaIiEERS1_IPKvSaIS6_EERS1_IPvSaISA_EE_ZN2gr14sync_decimator28fixed_rate_ninput_to_noutputEi_ZN2gr14sync_decimator28fixed_rate_noutput_to_ninputEi_ZNK2gr5block7historyEv_ZN2gr5block19set_output_multipleEi_ZNSt11_Deque_baseIiSaIiEED2Ev_ZNSt11_Deque_baseIiSaIiEED1Ev_ZNSt11_Deque_baseIiSaIiEE17_M_initialize_mapEm_ZNSt6vectorIiSaIiEEC2ERKS1__ZNSt6vectorIiSaIiEEC1ERKS1__ZNSt6vectorIiSaIiEEaSERKS1__ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev_ZNSt6vectorIS_IiSaIiEESaIS1_EED1Ev_ZN6google21kLogSiteUninitializedE_ZN3fLI7FLAGS_vE_ZN6google11InitVLOG3__EPPiS0_PKci_ZNSt6vectorIhSaIhEEC2ERKS1__ZNSt6vectorIhSaIhEEC1ERKS1__ZNSt6vectorIdSaIdEEC2ERKS1__ZNSt6vectorIdSaIdEEC1ERKS1__ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEEC2ERKS3__ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEEC1ERKS3__ZNSt11logic_errorC2ERKS__ZNSt11logic_errorC1ERKS__ZNSt6vectorIhSaIhEEaSERKS1__ZNK5boost9gregorian10greg_month15as_short_stringEv_ZNSt11_Deque_baseIdSaIdEED2Ev_ZNSt11_Deque_baseIdSaIdEED1Evwrapper_dgetrf_wrapper_dgetri_wrapper_dgemv_wrapper_dgemm_wrapper_dgels_wrapper_dgesv_wrapper_dsyrk__ZTVN5boost16exception_detail19error_info_injectorISt12out_of_rangeEE_ZN5boost16exception_detail19error_info_injectorISt13runtime_errorED0Ev_ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE_ZThn16_N5boost16exception_detail19error_info_injectorISt13runtime_errorED0Ev_ZN5boost16exception_detail19error_info_injectorISt12out_of_rangeED0Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12out_of_rangeED0Ev_ZN5boost16exception_detail19error_info_injectorISt12out_of_rangeED2Ev_ZN5boost16exception_detail19error_info_injectorISt12out_of_rangeED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12out_of_rangeED1Ev_ZN5boost16exception_detail19error_info_injectorISt13runtime_errorED2Ev_ZN5boost16exception_detail19error_info_injectorISt13runtime_errorED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt13runtime_errorED1Ev_ZNSt12_Destroy_auxILb0EE9__destroyIPSsEEvT_S3__ZNSt6vectorISsSaISsEE9push_backERKSs_ZNSt16invalid_argumentD1Ev_ZTIN5boost16exception_detail19error_info_injectorISt13runtime_errorEE_ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE_ZTIN5boost16exception_detail19error_info_injectorISt12out_of_rangeEE_ZTSN5boost16exception_detail19error_info_injectorISt12out_of_rangeEE_ZTISt16invalid_argumentfcntl_ZN2gr6blocks9null_sink4makeEm_ZN5boost7archive6detail17shared_ptr_helperD2Ev_ZN5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEED2Ev_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_13tracking_typeEi_ZN5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEE13load_overrideERNS0_15class_name_typeEi_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_13class_id_typeEi_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_14object_id_typeEi_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE13load_overrideERNS0_12version_typeEi_ZN5boost7archive6detail17basic_iserializerD2Ev_ZNK5boost13serialization18extended_type_info14key_unregisterEv_ZN5boost13serialization13typeid_system27extended_type_info_typeid_015type_unregisterEv_ZN5boost13serialization13typeid_system27extended_type_info_typeid_0D2Ev_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEED2Ev_ZN5boost7archive21basic_text_oprimitiveISoED2Ev_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_13tracking_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_15class_name_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_23class_id_reference_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_22class_id_optional_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_13class_id_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_21object_reference_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_14object_id_typeEi_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE13save_overrideERKNS0_12version_typeEi_ZN5boost7archive6detail17basic_oserializerD2Ev_ZN5boost7archive6detail17basic_oserializerC2ERKNS_13serialization18extended_type_infoE_ZN5boost13serialization13typeid_system27extended_type_info_typeid_0C2EPKc_ZN5boost13serialization13typeid_system27extended_type_info_typeid_013type_registerERKSt9type_info_ZNK5boost13serialization18extended_type_info12key_registerEv_ZN5boost7archive17xml_oarchive_implINS0_12xml_oarchiveEEC2ERSoj_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE10save_startEPKc_ZN5boost7archive6detail14basic_oarchive11save_objectEPKvRKNS1_17basic_oserializerE_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE8save_endEPKc_ZN5boost7archive6detail17basic_iserializerC2ERKNS_13serialization18extended_type_infoE_ZN5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEEC2ERSij_ZN5boost7archive6detail17shared_ptr_helperC2Ev_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE10load_startEPKc_ZN5boost7archive6detail14basic_iarchive11load_objectEPvRKNS1_17basic_iserializerE_ZN5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEE8load_endEPKc_ZTVN5boost7archive17archive_exceptionE_ZTIN5boost7archive17archive_exceptionE_ZN5boost7archive17archive_exceptionD1Ev_ZN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEE12end_preambleEv_ZN5boost7archive17archive_exceptionC1ENS1_14exception_codeEPKcS4__ZTIN5boost7archive6detail14basic_iarchiveE_ZTIN5boost7archive6detail14basic_oarchiveE_ZNK5boost7archive6detail14basic_iarchive19get_library_versionEv_ZN5boost7archive6detail14basic_iarchive20reset_object_addressEPKvS4__ZTIN5boost7archive6detail17basic_oserializerE_ZTIN5boost7archive6detail17basic_iserializerE_ZTIN5boost13serialization13typeid_system27extended_type_info_typeid_0E_ZNK5boost13serialization13typeid_system27extended_type_info_typeid_012is_less_thanERKNS0_18extended_type_infoE_ZNK5boost13serialization13typeid_system27extended_type_info_typeid_08is_equalERKNS0_18extended_type_infoE__errno_locationlibgnutls-deb0.so.28libgnutls-openssl.so.27SSL_freeSSL_newSSL_CTX_freeSSLv23_client_methodSSL_set_fdSSL_load_error_stringsSSL_writeSSL_shutdownSSL_readSSL_library_initSSL_CTX_newSSL_connect_ZN2gr17sync_interpolatorC2ERKSsN5boost10shared_ptrINS_12io_signatureEEES6_j_ZTIN2gr17sync_interpolatorE_ZN2gr17sync_interpolator8forecastEiRSt6vectorIiSaIiEE_ZN2gr17sync_interpolator12general_workEiRSt6vectorIiSaIiEERS1_IPKvSaIS6_EERS1_IPvSaISA_EE_ZN2gr17sync_interpolator28fixed_rate_ninput_to_noutputEi_ZN2gr17sync_interpolator28fixed_rate_noutput_to_ninputEirecvmsg_ZN5boost15condition_errorC2EiPKc_ZN5boost15condition_errorC1EiPKc_ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEC2ERKS3__ZN5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEC1ERKS3__ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEEC2ERKS3__ZN5boost16exception_detail19error_info_injectorINS_15condition_errorEEC1ERKS3__ZN5boost16exception_detail19error_info_injectorISt12length_errorED2Ev_ZTVN5boost16exception_detail19error_info_injectorISt12length_errorEE_ZN5boost16exception_detail19error_info_injectorISt12length_errorED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12length_errorED1Ev_ZN5boost16exception_detail19error_info_injectorISt8bad_castED2Ev_ZTVN5boost16exception_detail19error_info_injectorISt8bad_castEE_ZN5boost16exception_detail19error_info_injectorISt8bad_castED1Ev_ZThn8_N5boost16exception_detail19error_info_injectorISt8bad_castED1Ev_ZN5boost16exception_detail19error_info_injectorINS_6system12system_errorEED2Ev_ZTVN5boost16exception_detail19error_info_injectorINS_6system12system_errorEEE_ZN5boost16exception_detail19error_info_injectorINS_6system12system_errorEED1Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_6system12system_errorEED1Ev_ZN5boost16exception_detail19error_info_injectorISt12length_errorED0Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt12length_errorED0Ev_ZN5boost16exception_detail19error_info_injectorISt8bad_castED0Ev_ZThn8_N5boost16exception_detail19error_info_injectorISt8bad_castED0Ev_ZN5boost16exception_detail19error_info_injectorINS_6system12system_errorEED0Ev_ZThn40_N5boost16exception_detail19error_info_injectorINS_6system12system_errorEED0Ev_ZN8gnuradio6detail10sptr_magic18fetch_initial_sptrEPN2gr11basic_blockE_ZTIN2gr11basic_blockE_ZTIN5boost16exception_detail19error_info_injectorINS_6system12system_errorEEE_ZTSN5boost16exception_detail19error_info_injectorINS_6system12system_errorEEE_ZTIN5boost16exception_detail19error_info_injectorISt8bad_castEE_ZTSN5boost16exception_detail19error_info_injectorISt8bad_castEE_ZTIN5boost16exception_detail19error_info_injectorISt12length_errorEE_ZTSN5boost16exception_detail19error_info_injectorISt12length_errorEEsendmsglibgnuradio-pmt.so.3.7.5_ZNK5boost16bad_lexical_cast4whatEv_ZN5boost16bad_lexical_castD1Ev_ZN5boost16bad_lexical_castD2Ev_ZN5boost16bad_lexical_castD0Evlibgnuradio-osmosdr.so.0.1.3_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE24_M_get_insert_unique_posERS1__ZN7osmosdr6source4makeERKSs_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNSt8_Rb_treeIiSt4pairIKidESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tagacceptlibvolk.so.0.0.0cabsfrintfsqrtfsincosfvolk_32f_accumulator_s32fvolk_32fc_x2_dot_prod_32fcvolk_32f_index_max_16uvolk_32f_index_max_16u_avolk_16ic_s32f_deinterleave_32f_x2volk_8ic_s32f_deinterleave_32f_x2libstdc++.so.6__cxa_free_exception_ZNSs4_Rep10_M_destroyERKSaIcE_ZNKSs5rfindEPKcmm_ZNKSt13bad_exception4whatEv__cxa_pure_virtual_Znam_ZTISo_ZNSt13basic_filebufIcSt11char_traitsIcEED1Ev_ZTVSt13basic_fstreamIcSt11char_traitsIcEE_ZNSo9_M_insertIlEERSoT__ZTTSt14basic_ofstreamIcSt11char_traitsIcEE_ZSt5flushIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6__ZTINSt8ios_base7failureE_ZNKSt5ctypeIcE13_M_widen_initEv_ZNSt12length_errorC1ERKSs_ZNSsC1EPKcmRKSaIcE_ZNSt9basic_iosIcSt11char_traitsIcEE5imbueERKSt6locale_ZNSo9_M_insertImEERSoT__ZSt17__throw_bad_allocv_ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc_ZSt9use_facetISt8numpunctIcEERKT_RKSt6locale_ZNSt16invalid_argumentC1ERKSs_ZTVSt12out_of_range_ZTISt14overflow_error_ZNSo5flushEv_ZSt16__throw_bad_castv__cxa_guard_acquire_ZdaPv_ZNKSt12__basic_fileIcE7is_openEv_ZNSt8bad_castD1Ev__cxa_get_exception_ptr_ZNSt13runtime_errorD1Ev_ZNSi3getERc_ZTVSt14overflow_error_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l_ZNKSs4findEPKcm_ZTISt12domain_error_ZNSt12out_of_rangeC1ERKSs_ZNSt13bad_exceptionD2Ev_ZNSt8bad_castD2Ev_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS___cxa_throw_ZNSsD1Ev_ZTVSt14basic_ifstreamIcSt11char_traitsIcEE_ZNSt13runtime_errorD2Ev_ZNSt12out_of_rangeC2ERKSs_ZTISt15basic_streambufIcSt11char_traitsIcEE_ZSt19__throw_logic_errorPKc_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode_ZNSo5writeEPKcl__cxa_rethrow_ZNSt9basic_iosIcSt11char_traitsIcEE4fillEc_ZSt9terminatev_ZNSsC1ERKSsmm_ZNSs2atEm_ZNSt8__detail15_List_node_base11_M_transferEPS0_S1__ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE_ZTId_ZTIi_ZNSt8__detail15_List_node_base7_M_hookEPS0__ZTIl_ZNSs14_M_replace_auxEmmmc_ZNSo9_M_insertIPKvEERSoT__ZNSt8ios_base4InitD1Ev_ZTIt_ZNSs6appendEPKc_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZNSt6localeD1Ev_ZNSs6appendEmc_ZNSt13runtime_errorC1ERKSs_ZNSsC1EPKcRKSaIcE_ZNKSs7compareEPKc_ZNSi10_M_extractIbEERSiRT__ZNSt6localeC1ERKS__ZTVSt16invalid_argument_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv_ZNSt13basic_fstreamIcSt11char_traitsIcEEC1Ev_ZTVSt9exception_ZNSt13basic_filebufIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode_ZNSsC1EmcRKSaIcE_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale_ZTISt11logic_error_ZNSdD2Ev_ZNSt13runtime_errorC2ERKSs_ZNSt12domain_errorC1ERKSs_ZNSt8ios_baseC2Ev_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate__cxa_throw_bad_array_new_length_ZNSt9bad_allocD1Ev_ZNSs7replaceEmmPKcm_ZNSo9_M_insertIyEERSoT__ZNSs6insertEmPKcm_ZNSs6assignEPKc_ZNSt13basic_filebufIcSt11char_traitsIcEE5closeEv_ZSt3cin_ZTTSt13basic_fstreamIcSt11char_traitsIcEE__cxa_call_unexpected_ZSt20__throw_out_of_rangePKc_ZNKSs4findEcm_ZNSt8__detail15_List_node_base9_M_unhookEv_ZNSt13basic_fstreamIcSt11char_traitsIcEE5closeEv_ZNSi10_M_extractIdEERSiRT__ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev_ZTVSt12domain_error_ZNSt9bad_allocD2Ev_ZNKSt8ios_base7failure4whatEv_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode_ZTIPKc_ZNSirsERi_ZNSt16invalid_argumentD2Ev_ZTISt12length_error_ZNSs6assignEPKcm_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strERKSs_ZTVN10__cxxabiv117__class_type_infoE_ZNKSs6substrEmm_ZSt24__throw_out_of_range_fmtPKcz_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E_ZNSt13basic_fstreamIcSt11char_traitsIcEE4openERKSsSt13_Ios_Openmode_ZTISt9exception_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev_ZTISt13runtime_error_ZNSt9exceptionD1Ev_ZNSt14overflow_errorC1ERKSs_ZNSs6insertEmPKc_ZNKSs7compareERKSs_ZNSi10_M_extractIfEERSiRT__ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base_ZNSt12length_errorD1Ev_ZNSs3endEv_ZNKSs4findEPKcmm__cxa_begin_catch_ZTTSt14basic_ifstreamIcSt11char_traitsIcEE_ZNSt15basic_streambufIcSt11char_traitsIcEE5uflowEv_ZNSs4_Rep20_S_empty_rep_storageE_ZNSt13basic_filebufIcSt11char_traitsIcEEC1Ev_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv__gxx_personality_v0_ZNKSt9bad_alloc4whatEv_ZNSo5seekpElSt12_Ios_Seekdir_ZNSt9exceptionD2Ev_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_ES4__ZTVSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZNSs12_M_leak_hardEv_ZNSt12length_errorD2Ev_ZNSt12domain_errorD1Ev_ZNSs6appendEPKcm_ZTVSt9bad_alloc_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsputnEPKcl_ZSt24__throw_invalid_argumentPKc_ZNKSt11logic_error4whatEv_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev__cxa_bad_typeid_ZNSt14overflow_errorD1Ev_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv_ZNSs4swapERSs_ZTVNSt8ios_base7failureE_ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPcl_ZTVSt14basic_ofstreamIcSt11char_traitsIcEE_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE_ZSt4cout_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt15basic_streambufIcSt11char_traitsIcEE6xsgetnEPcl_ZNSolsEi_ZNSt12domain_errorD2Ev_ZNSolsEs_Znwm_ZTISt12out_of_range_ZTVSt8bad_cast_ZNSo9_M_insertIbEERSoT__ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode_ZTVN10__cxxabiv121__vmi_class_type_infoE_ZNSt14overflow_errorD2Ev_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev_ZNSi10_M_extractIjEERSiRT__ZNSs9_M_mutateEmmm_ZNSs4_Rep9_S_createEmmRKSaIcE_ZNSt11logic_errorD1Ev_ZTVSt12length_error_ZNSt6locale7classicEv_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6__ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev_ZNSt11logic_errorC1ERKSs_ZNSt8__detail15_List_node_base4swapERS0_S1__ZTISt9bad_alloc_ZNSo9_M_insertIdEERSoT__ZNSt8ios_base7failureD1Ev_ZNSt8ios_baseD2Ev_ZNSs6assignERKSs__cxa_bad_cast__cxa_allocate_exception_ZNKSt6localeeqERKS__ZNSi10_M_extractImEERSiRT__ZNKSt8bad_cast4whatEv_ZNSo3putEc_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE__cxa_end_catch__cxa_guard_release_ZTVSt13runtime_error__cxa_guard_abort_ZNSi10_M_extractIlEERSiRT__ZTISt8bad_cast_ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv_ZNSt6localeaSERKS__ZNSolsEPSt15basic_streambufIcSt11char_traitsIcEE_ZTTSt18basic_stringstreamIcSt11char_traitsIcESaIcEE_ZSt4cerr_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode_ZNSo5tellpEv_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev_ZNSt12out_of_rangeD1Ev_ZNSt15basic_streambufIcSt11char_traitsIcEE5imbueERKSt6locale_ZNKSt13runtime_error4whatEv_ZTVN10__cxxabiv120__si_class_type_infoE_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode_ZNSs6resizeEmc_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base_ZTVSt11logic_error_ZNSsC1ERKSs_ZNSs7reserveEm_ZSt20__throw_length_errorPKc_ZNSi5tellgEv_ZNSt8ios_base4InitC1Ev_ZTVSt13basic_filebufIcSt11char_traitsIcEE_ZTISt13bad_exception_ZNSt6localeC1Ev_ZNSs6appendERKSs_ZNSt12__basic_fileIcED1Ev_ZNSo5seekpESt4fposI11__mbstate_tE_ZNSt12out_of_rangeD2Ev_ZdlPv_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcmm_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZNKSs7compareEmmPKc__dynamic_castlibm.so.6fmodtruncatan2log10roundflog1pasinatanceilsincosfloorsqrtceilfpowlog2roundlibgcc_s.so.1__popcountdi2__mulsc3libc.so.6epoll_createsocketfflushstrcpygmtime_r__printf_chkfopenstrncmptimerfd_createposix_memalignisalphapipe__isoc99_sscanfepoll_waitinet_ntopstrncpy__vsprintf_chk__stack_chk_faillistenreallocmemchrtolowerinet_pton__assert_faillocaltime_risspacestrtodgmtimestrtolfgetscallocstrlen__cxa_atexitgetaddrinfomemsettcsetattrbindmemcmpasctimeeventfdgetsockoptgetlogin_rpoll__fprintf_chkstdoutfputcmemcpyfclose__vsnprintf_chksetsockopttimegmremove__ctype_b_locgetenvstderrioctltimerfd_settime__snprintf_chkif_nametoindexif_indextonamefwritegettimeofdayepoll_ctl__memcpy_chklocaltimedifftimestrchrepoll_create1__vfprintf_chkmktimeqsorttcgetattr__sprintf_chkmemmove__strcat_chkstrcmpstrerror__libc_start_mainispunct_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE8_M_eraseEPSt13_Rb_tree_nodeISsE_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE24_M_get_insert_unique_posERKSs_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISsERKSs_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE7_M_copyEPKSt13_Rb_tree_nodeISsEPS7__ZTVN5boost16exception_detail19error_info_injectorISt16invalid_argumentEE_ZThn16_N5boost16exception_detail19error_info_injectorISt16invalid_argumentED0Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt16invalid_argumentED1Ev_ZN5boost16exception_detail19error_info_injectorISt14overflow_errorED0Ev_ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE7_M_copyEPKSt13_Rb_tree_nodeIS2_EPSA__ZThn16_N5boost16exception_detail19error_info_injectorISt14overflow_errorED0Ev_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentED0Ev_ZN5boost16exception_detail19error_info_injectorISt14overflow_errorED1Ev_ZThn16_N5boost16exception_detail19error_info_injectorISt14overflow_errorED1Ev_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentED1Ev_ZN5boost16exception_detail19error_info_injectorISt14overflow_errorED2Ev_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentED2Ev_ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E_ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE24_M_get_insert_unique_posERS1__ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZTIN5boost16exception_detail19error_info_injectorISt16invalid_argumentEE_ZTSN5boost16exception_detail19error_info_injectorISt16invalid_argumentEE_ZTVN5boost16exception_detail19error_info_injectorISt14overflow_errorEE_ZTSN5boost16exception_detail19error_info_injectorISt14overflow_errorEE_ZTIN5boost16exception_detail19error_info_injectorISt14overflow_errorEE_edata__bss_start_endvolk_gnsssdr_8ic_conjugate_8ic_get_func_descvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE19_M_emplace_back_auxIIS3_EEEvDpOT__ZNSt11_Deque_baseIdSaIdEEC1Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_ZN5boost16exception_detail19error_info_injectorISt12domain_errorED2Evvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_avolk_gnsssdr_64f_accumulator_64f_avolk_gnsssdr_8u_x2_multiply_8u_manualvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_ZN5boost6threadC1IM13ControlThreadFvvEPS2_EET_T0_NS_10disable_ifINS_13thread_detail14is_convertibleIRS6_NS_17thread_attributesEEEPNS0_5dummyEE4typeEvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_get_func_desc_ZN3uhd13stream_args_taSEOS0_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EE19_M_emplace_back_auxIIS3_EEEvDpOT__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEixEOi__libc_csu_fini_ZNSt6vectorIdSaIdEEC2ESt16initializer_listIdERKS0__ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EE19_M_emplace_back_auxIJS3_EEEvDpOT_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fcvolk_gnsssdr_32fc_s32f_convert_8ic_a_ZN5boost6threadC2INS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS2_5list1INS2_5valueIPS7_EEEEEEEEOT__ZNSt6vectorIbSaIbEE9push_backEb_ZNSt6vectorIjSaIjEE12emplace_backIIjEEEvDpOT_volk_gnsssdr_32fc_convert_8ic_manualvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_avolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_Evolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3volk_gnsssdr_8i_x2_add_8i_manualvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_avolk_gnsssdr_8i_max_s8i_manual_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv_ZNSt6vectorISt4pairIiiESaIS1_EED2Evvolk_gnsssdr_8i_x2_add_8i_u__data_startvolk_gnsssdr_8ic_s8ic_multiply_8ic_avolk_gnsssdr_8i_max_s8i_get_func_descvolk_gnsssdr_8i_index_max_16u_avolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_get_func_descvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_ZStlsIcSt11char_traitsIcELm32EERSt13basic_ostreamIT_T0_ES6_RKSt6bitsetIXT1_EEvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_avolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_manual_ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentEC1ERKS3_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_manualvolk_gnsssdr_8ic_s8ic_multiply_8ic_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE24_M_get_insert_unique_posERS1_volk_gnsssdr_get_machine_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOSsEESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT__ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEvvolk_gnsssdr_8ic_s8ic_multiply_8ic_manual_ZN5boost16exception_detail19error_info_injectorISt12domain_errorED0Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE24_M_get_insert_unique_posERKjvolk_gnsssdr_8ic_x2_dot_prod_8ic_uvolk_gnsssdr_8i_max_s8i_avolk_gnsssdr_32fc_convert_16ic_u_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE15_M_add_ref_copyEvvolk_gnsssdr_32fc_convert_8ic_u_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE19_M_emplace_back_auxIJS3_EEEvDpOT_volk_gnsssdr_8ic_x2_dot_prod_8ic_get_func_descvolk_gnsssdr_8ic_conjugate_8icvolk_gnsssdr_8ic_magnitude_squared_8i_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_ZTIN5boost16exception_detail19error_info_injectorISt12domain_errorEEvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_manual_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIISsEEEvDpOT__ZNSt8_Rb_treeIiSt4pairIKiSsESt10_Select1stIS2_ESt4lessIiESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E_ZNSt6vectorIlSaIlEE12emplace_backIIlEEEvDpOT__ZTVN5boost16exception_detail19error_info_injectorISt12domain_errorEE_ZNSt5dequeIdSaIdEE15_M_pop_back_auxEv_ZNSt6vectorISt4pairIiiESaIS1_EEC1ESt16initializer_listIS1_ERKS2__ZNSt6vectorIiSaIiEEC2ESt16initializer_listIiERKS0_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_uvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_manual_ZTISt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIIdEEEvDpOT_volk_gnsssdr_8i_index_max_16u_ZN5boost16exception_detail19error_info_injectorISt12domain_errorED1Evvolk_gnsssdr_32fc_s32f_convert_8ic_uvolk_gnsssdr_8i_accumulator_s8i_avolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_manualvolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_uvolk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EED1Evvolk_gnsssdr_8ic_x2_multiply_8ic_get_func_desc_ZNSt6vectorIhSaIhEE17_M_default_appendEm_ZNSt6vectorIdSaIdEE13_M_assign_auxIPKdEEvT_S5_St20forward_iterator_tag_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIJRKSsEEEvDpOT__ZNSt6vectorISsSaISsEE12emplace_backIJSsEEEvDpOT__ZNSt6vectorIiSaIiEEC1ESt16initializer_listIiERKS0__ZN5boost6threadC2IM13ControlThreadFvvEPS2_EET_T0_NS_10disable_ifINS_13thread_detail14is_convertibleIRS6_NS_17thread_attributesEEEPNS0_5dummyEE4typeEvolk_gnsssdr_8ic_conjugate_8ic_avolk_gnsssdr_8ic_x2_multiply_8icvolk_gnsssdr_32fc_s32f_convert_8ic_get_func_desc_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIIRKSt21piecewise_construct_tSt5tupleIIOSsEESD_IIEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE14_M_create_nodeIIRKS2_EEEPSt13_Rb_tree_nodeIS2_EDpOT_volk_gnsssdr_64f_accumulator_64f_get_func_desc_ZNSt5dequeIiSaIiEE16_M_push_back_auxIIRKiEEEvDpOT_volk_gnsssdr_load_preferences_ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EED1Evvolk_gnsssdr_s32f_x2_update_local_carrier_32fc_manual_ZNSt4pairISsSsEC1IRA3_KcRA2_S2_vEEOT_OT0_volk_gnsssdr_64f_accumulator_64f_manual_ZNKSt3mapIiSsSt4lessIiESaISt4pairIKiSsEEE2atERS3__ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ESt16initializer_listIS1_ERKS2_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_manual_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIJSsEEEvDpOT__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE14_M_create_nodeIJRKS2_EEEPSt13_Rb_tree_nodeIS2_EDpOT_volk_gnsssdr_get_alignment_ZNSt5dequeIdSaIdEE2atEm_ZNSt6vectorIlSaIlEE19_M_emplace_back_auxIJlEEEvDpOT_volk_gnsssdr_8ic_s8ic_multiply_8ic_get_func_descvolk_gnsssdr_8ic_x2_dot_prod_8ic_avolk_gnsssdr_8ic_conjugate_8ic_manual_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIIRKdEEEvDpOT_volk_gnsssdr_s32f_x2_update_local_carrier_32fcvolk_gnsssdr_32fc_convert_16ic_avolk_gnsssdr_8i_max_s8i_u_ZNSt6vectorIjSaIjEE19_M_emplace_back_auxIJjEEEvDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_32fc_convert_8ic_a_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_IRKSsEESt17_Rb_tree_iteratorISsEPSt18_Rb_tree_node_baseSC_OT__ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EED2Ev_ZNSt6vectorISt4pairIiiESaIS1_EEC2ESt16initializer_listIS1_ERKS2_volk_gnsssdr_32fc_s32f_convert_8ic_manualvolk_gnsssdr_8ic_magnitude_squared_8i_avolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_manual_ZNSt6vectorISsSaISsEE19_M_emplace_back_auxIIRKSsEEEvDpOT_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_manual__libc_csu_initvolk_gnsssdr_is_alignedvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_ZNSt6vectorISt4pairIiiESaIS1_EED1Ev_ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIJdEEEvDpOT__ZNSt8_Rb_treeIjjSt9_IdentityIjESt4lessIjESaIjEE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIjERKjvolk_gnsssdr_32fc_convert_8ic_get_func_descvolk_gnsssdr_8ic_x2_dot_prod_8ic_manual_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE12emplace_backIIS3_EEEvDpOT__ZNSt6vectorIhSaIhEE9push_backERKhvolk_gnsssdr_8ic_x2_dot_prod_8ic_ZN3uhd13stream_args_tC2ERKSsS2__ZN5boost16exception_detail19error_info_injectorISt16invalid_argumentEC2ERKS3__ZNSt11_Deque_baseIdSaIdEEC2Evvolk_gnsssdr_8ic_x2_multiply_8ic_avolk_gnsssdr_8i_accumulator_s8i_u_ZNSt6vectorImSaImEE19_M_emplace_back_auxIIRKmEEEvDpOT__ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1__ZNSt6vectorIfSaIfEE19_M_emplace_back_auxIIfEEEvDpOT__ZNSt6vectorImSaImEE19_M_emplace_back_auxIJRKmEEEvDpOT__ZNSt6vectorIlSaIlEE12emplace_backIJlEEEvDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_manual_ZNSt6vectorISsSaISsEE12emplace_backIISsEEEvDpOT__ZTISt19_Sp_make_shared_tagvolk_gnsssdr_32fc_convert_16icvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_manualvolk_gnsssdr_8ic_conjugate_8ic_uvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_avolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_uvolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_get_func_desc_ZThn16_N5boost16exception_detail19error_info_injectorISt12domain_errorED1Ev_ZTSSt19_Sp_make_shared_tagvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_get_func_descvolk_gnsssdr_64f_accumulator_64fvolk_gnsssdr_8u_x2_multiply_8u_u_ZTSSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorISt4pairIiS_IhSaIhEEESaIS3_EED2Evvolk_gnsssdr_8ic_magnitude_squared_8i_get_func_descvolk_gnsssdr_8ic_x2_multiply_8ic_manualvolk_gnsssdr_8i_max_s8ivolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_get_func_desc_ZNSt5dequeIdSaIdEE10push_frontERKdvolk_gnsssdr_8i_x2_add_8ivolk_gnsssdr_8u_x2_multiply_8uvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_get_func_descvolk_gnsssdr_32fc_convert_16ic_manual_ZNSt6vectorIjSaIjEE12emplace_backIJjEEEvDpOT_volk_gnsssdr_8u_x2_multiply_8u_get_func_descvolk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_get_func_descvolk_gnsssdr_8i_accumulator_s8ivolk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_32fc_convert_8icvolk_gnsssdr_32fc_convert_16ic_get_func_descvolk_gnsssdr_64f_accumulator_64f_uvolk_gnsssdr_8i_index_max_16u_manualvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EOS6_S7__ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIIRKiEEEvDpOT__ZNSt4pairISsSsEC1IRA2_KcS4_vEEOT_OT0__ZNSt6vectorIdSaIdEE19_M_emplace_back_auxIJRKdEEEvDpOT_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_get_func_desc_ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorIdSaIdEE12emplace_backIJdEEEvDpOT_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_avolk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_ZTSN5boost16exception_detail19error_info_injectorISt12domain_errorEEvolk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_ZNSt6vectorISt4pairIiiESaIS1_EEC1ERKS3__ZNSt6vectorIlSaIlEE19_M_emplace_back_auxIIlEEEvDpOT__ZNSt6vectorIdSaIdEEC1ESt16initializer_listIdERKS0__ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE16_M_insert_uniqueIS0_ISsSsEEES0_ISt17_Rb_tree_iteratorIS2_EbEOT__ZThn16_N5boost16exception_detail19error_info_injectorISt12domain_errorED0Evvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_get_func_descvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_get_func_descvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_ZNSt6vectorISt4pairIiS_IiSaIiEEESaIS3_EE12emplace_backIJS3_EEEvDpOT_volk_gnsssdr_8ic_x2_multiply_8ic_uvolk_gnsssdr_32fc_s32f_convert_8icvolk_gnsssdr_8ic_magnitude_squared_8i_manualvolk_gnsssdr_8i_accumulator_s8i_get_func_desc_ZN5boost6thread14try_join_untilINS_6chrono12steady_clockENS2_8durationIlNS_5ratioILl1ELl1000000000EEEEEEEbRKNS2_10time_pointIT_T0_EEvolk_gnsssdr_8ic_s8ic_multiply_8ic_uvolk_gnsssdr_get_config_path_ZN5boost6threadC1INS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS2_5list1INS2_5valueIPS7_EEEEEEEEOT__ZNSt6vectorIjSaIjEE19_M_emplace_back_auxIIjEEEvDpOT_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_manual_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE22_M_emplace_hint_uniqueIIRKSt21piecewise_construct_tSt5tupleIIRS1_EESD_IIEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT__ZNSt6vectorIfSaIfEE19_M_emplace_back_auxIJfEEEvDpOT_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_Evolk_gnsssdr_8i_x2_add_8i_a_ZNSt3mapISsSsSt4lessISsESaISt4pairIKSsSsEEEixEOSsvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_ZNSt6vectorImSaImEE19_M_emplace_back_auxIImEEEvDpOT_volk_gnsssdr_8i_accumulator_s8i_manualvolk_gnsssdr_8ic_magnitude_squared_8i_IO_stdin_usedvolk_gnsssdr_8i_index_max_16u_u_ZNSt6vectorIdSaIdEE12emplace_backIIdEEEvDpOT_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_ZNSt6vectorIS_IiSaIiEESaIS1_EEC1ESt16initializer_listIS1_ERKS2__ZN3uhd13stream_args_tC1ERKSsS2_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_uvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_manual_ZTSSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE_ZNSt6vectorImSaImEE19_M_emplace_back_auxIJmEEEvDpOT_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3__ZNSt3mapIiSsSt4lessIiESaISt4pairIKiSsEEEixEOi_ZNSt5dequeIiSaIiEE16_M_push_back_auxIJRKiEEEvDpOT__ZNSt6vectorIiSaIiEE19_M_emplace_back_auxIJRKiEEEvDpOT_volk_gnsssdr_list_machinesvolk_gnsssdr_8u_x2_multiply_8u_avolk_gnsssdr_8i_x2_add_8i_get_func_descvolk_gnsssdr_8i_index_max_16u_get_func_desc_ZNSt3mapIidSt4lessIiESaISt4pairIKidEEEixEOivolk_gnsssdr_s32f_x2_update_local_carrier_32fc_get_func_descGCC_3.4GCC_3.0GCC_4.0.0GLIBC_2.2.5GLIBC_2.3.2GLIBC_2.8GLIBC_2.9GLIBC_2.4GLIBC_2.3.4GLIBC_2.3GLIBC_2.7GLIBC_2.14GLIBCXX_3.4.13CXXABI_1.3.1CXXABI_1.3.8GLIBCXX_3.4.11GLIBCXX_3.4.9CXXABI_1.3GLIBCXX_3.4.20GLIBCXX_3.4.15GLIBCXX_3.4                                                                        so@T&y P&y `Z' o ui h0ri ui  oii #ii -ii 7ti Aii Mui ii Wari  .Sclqѯ {xѯ a) ӯkpe̱t)۱cVc@d"@ddde@eeeMf?@fffg@gpgggh0hf@hJh[h8i@i`ii-ij:@j`kkkk@lll/m m@m`mmpm|mnn nPn%pnAnn"oopFpp\qQqqrPr `rr rt t@t_@ДKؔ @o]^ @Ptv (08@HPX ` h p x &ȠРؠ࠮蠮7 (0 8{@!H"P#X$`%h&p'x()*+,-./01ȡ2С3ء4࡮5衮678 9:; <(=0>8?@@HAPBX`ChDpExFGHIJKLȢMТNآOࢮP袮QRSTUVW X(Y0Z8[@\H]P^X_``hapbxcdhefghijkȣlУmأn࣮o裮pqrstuv w(x0y8z@{H|P}X~`hpx$ȤФؤम褮 (08@HPX`hpxȥХإ८襮 (08@HPX`hpxWȦЦئম覮 (08@HPX`hpxȧЧا৮觮C (08@HPX`hpxIȨШبਮ訮      (08@HPX`hpx !ȩ"Щ#ة$੮%詮&'()*+ ,(-0.8/@0H1P2X`3h4p5x6789:;<=>Ȫ?Ъ@تAમB誮CDEFGHI J(K0L8M@NHOPPXQ`RhSpTxUVWXYZ[\]^ȫЫ_ث`૮a諮bcdefgh i(j08k@lHrPmX`nhpoxpqrstuvwxyȬzЬ{ج|ମ謮}~ (08@HPX`hpxȭЭح୮譮c (08@HPX`hpx ȮЮخம议<; (HH4mHtk H54m%4m@%4mh%4mh%4mh%4mh%4mh%4mh%4mh%4mhp%4mh`%4mh P%4mh @%4mh 0%4mh %z4mh %r4mh%j4mh%b4mh%Z4mh%R4mh%J4mh%B4mh%:4mh%24mh%*4mhp%"4mh`%4mhP%4mh@% 4mh0%4mh %3mh%3mh%3mh%3mh %3mh!%3mh"%3mh#%3mh$%3mh%%3mh&%3mh'p%3mh(`%3mh)P%3mh*@%3mh+0%3mh, %z3mh-%r3mh.%j3mh/%b3mh0%Z3mh1%R3mh2%J3mh3%B3mh4%:3mh5%23mh6%*3mh7p%"3mh8`%3mh9P%3mh:@% 3mh;0%3mh< %2mh=%2mh>%2mh?%2mh@%2mhA%2mhB%2mhC%2mhD%2mhE%2mhF%2mhGp%2mhH`%2mhIP%2mhJ@%2mhK0%2mhL %z2mhM%r2mhN%j2mhO%b2mhP%Z2mhQ%R2mhR%J2mhS%B2mhT%:2mhU%22mhV%*2mhWp%"2mhX`%2mhYP%2mhZ@% 2mh[0%2mh\ %1mh]%1mh^%1mh_%1mh`%1mha%1mhb%1mhc%1mhd%1mhe%1mhf%1mhgp%1mhh`%1mhiP%1mhj@%1mhk0%1mhl %z1mhm%r1mhn%j1mho%b1mhp%Z1mhq%R1mhr%J1mhs%B1mht%:1mhu%21mhv%*1mhwp%"1mhx`%1mhyP%1mhz@% 1mh{0%1mh| %0mh}%0mh~%0mh%0mh%0mh%0mh%0mh%0mh%0mh%0mh%0mhp%0mh`%0mhP%0mh@%0mh0%0mh %z0mh%r0mh%j0mh%b0mh%Z0mh%R0mh%J0mh%B0mh%:0mh%20mh%*0mhp%"0mh`%0mhP%0mh@% 0mh0%0mh %/mh%/mh%/mh%/mh%/mh%/mh%/mh%/mh%/mh%/mh%/mhp%/mh`%/mhP%/mh@%/mh0%/mh %z/mh%r/mh%j/mh%b/mh%Z/mh%R/mh%J/mh%B/mh%:/mh%2/mh%*/mhp%"/mh`%/mhP%/mh@% /mh0%/mh %.mh%.mh%.mh%.mh%.mh%.mh%.mh%.mh%.mh%.mh%.mhp%.mh`%.mhP%.mh@%.mh0%.mh %z.mh%r.mh%j.mh%b.mh%Z.mh%R.mh%J.mh%B.mh%:.mh%2.mh%*.mhp%".mh`%.mhP%.mh@% .mh0%.mh %-mh%-mh%-mh%-mh%-mh%-mh%-mh%-mh%-mh%-mh%-mhp%-mh`%-mhP%-mh@%-mh0%-mh %z-mh%r-mh%j-mh%b-mh%Z-mh%R-mh%J-mh%B-mh%:-mh%2-mh%*-mhp%"-mh`%-mhP%-mh@% -mh0%-mh %,mh%,mh%,mh%,mh%,mh%,mh%,mh%,mh%,mh%,mh%,mhp%,mh`%,mh P%,mh @%,mh 0%,mh  %z,mh %r,mh%j,mh%b,mh%Z,mh%R,mh%J,mh%B,mh%:,mh%2,mh%*,mhp%",mh`%,mhP%,mh@% ,mh0%,mh %+mh%+mh%+mh%+mh %+mh!%+mh"%+mh#%+mh$%+mh%%+mh&%+mh'p%+mh(`%+mh)P%+mh*@%+mh+0%+mh, %z+mh-%r+mh.%j+mh/%b+mh0%Z+mh1%R+mh2%J+mh3%B+mh4%:+mh5%2+mh6%*+mh7p%"+mh8`%+mh9P%+mh:@% +mh;0%+mh< %*mh=%*mh>%*mh?%*mh@%*mhA%*mhB%*mhC%*mhD%*mhE%*mhF%*mhGp%*mhH`%*mhIP%*mhJ@%*mhK0%*mhL %z*mhM%r*mhN%j*mhO%b*mhP%Z*mhQ%R*mhR%J*mhS%B*mhT%:*mhU%2*mhV%**mhWp%"*mhX`%*mhYP%*mhZ@% *mh[0%*mh\ %)mh]%)mh^%)mh_%)mh`%)mha%)mhb%)mhc%)mhd%)mhe%)mhf%)mhgp%)mhh`%)mhiP%)mhj@%)mhk0%)mhl %z)mhm%r)mhn%j)mho%b)mhp%Z)mhq%R)mhr%J)mhs%B)mht%:)mhu%2)mhv%*)mhwp%")mhx`%)mhyP%)mhz@% )mh{0%)mh| %(mh}%(mh~%(mh%(mh%(mh%(mh%(mh%(mh%(mh%(mh%(mhp%(mh`%(mhP%(mh@%(mh0%(mh %z(mh%r(mh%j(mh%b(mh%Z(mh%R(mh%J(mh%B(mh%:(mh%2(mh%*(mhp%"(mh`%(mhP%(mh@% (mh0%(mh %'mh%'mh%'mh%'mh%'mh%'mh%'mh%'mh%'mh%'mh%'mhp%'mh`%'mhP%'mh@%'mh0%'mh %z'mh%r'mh%j'mh%b'mh%Z'mh%R'mh%J'mh%B'mh%:'mh%2'mh%*'mhp%"'mh`%'mhP%'mh@% 'mh0%'mh %&mh%&mh%&mh%&mh%&mh%&mh%&mh%&mh%&mh%&mh%&mhp%&mh`%&mhP%&mh@%&mh0%&mh %z&mh%r&mh%j&mh%b&mh%Z&mh%R&mh%J&mh%B&mh%:&mh%2&mh%*&mhp%"&mh`%&mhP%&mh@% &mh0%&mh %%mh%%mh%%mh%%mh%%mh%%mhP`yPhyyyFPyhyyy,PywLyPywLyЃAHt G GPWÐЃAHt G GPWjÐP@'}wLyP3}wLytP>}wLyZPN}wLy@P@I}wLy&Pm}wLy P_}wLyPj}vU}X}P}vU}X}P}wLyP}wLyP}wLypP}wLyVP@}wLy~wLyP/~wLyP@8~vU}X}P@V~wLyPG~wLyhP@P~vU}X}NP@m~wLy4P^~wLyP@g~vU}X}P@}~wLyPz~wLyP~wLyP@~wLyP~vU}X}~P~wLydP~wLyJP~vU}X}0P@~wLyP~wLyP@~vU}X}P~wLyP@~vU}X}P~wLyPwLyzPwLy`P#wLyFP.wLy,P@8wLyPBwLyPJwLyPMwLyPZwLyP"wLyЃAHt G GPW*ÐЃAHt G GPWÐPwLy&P@wLy PwLyPwLyPwLyЃAHt G GPWXÐPwLy|ЃAHt G GPWÐP@wLy:PŀwLy P@ĀwLyP@wLyPO܀PހP܀fހP@DO܀PހPwLyP*a@\jPayPPDO܀Pހ6P@E܀fހP@݀LyP@.P@PPP݀LyP݀LyfPa@\LP@<a@\2P'a@\P5a@\P!a@\PCa@\PBa@\PBa@\P@Aa@\|P@a@\bP;݀LyHP ݀Ly.P݀LyPa@\P a@\Pa@\P#P1PhwLyxPrwLy^PwLyDPwLy*P@wLyPO܀PހP@܀fހP PhyyyPுhyyyPO܀PހPaytPO܀PހZP܀fހ@P݀Ly&P PHPAP7P.P@%PpPVP AWAVAAUATIUSMAԉHDH|$dH%(H$1HD$LHxxHDHaHt$HD$xDH?٪HbH(Ht$HD$xaHHD$LHpH|$H$dH3 %(LtHH|$HLHĘ[]A\A]A^A_ATUHSH HmdH%(HD$1HHt$ HD$ LeH߾ߪHL}Ht$ HD$ Ht$HD$ oHHuHT$ H|$HHt$HHD$HxHgt Ht$讏AHHHD$HxHgtHt$}HH0HUSHH(HmdH%(HD$1HHt$ HD$ H߾ߪlHuHHV|Ht$ HD$ eHt$HD$ NHvH|$HHHt$HHD$HxHgt Ht$蓎AHHHD$HxHgtHt$bHHHHHH$dH%(HD$1USH(H{mdH%(HD$1HHt$ HD$ \H߾ߪ/窃H"Ht$ HD$ +Ht$ HD$ H<HT$H|$窃HHt$HHD$HxHgt Ht$RpA@HPHHD$HxHgtHt$!HHHUSH(H_mdH%(HD$1HHt$ HD$ @H߾ߪHHt$ HD$ Ht$ HD$ H HT$H|$HHt$HHD$HxHgt Ht$6pA@H4HHD$HxHgtHt$HHHSHHD mdH%(HD$1HlHt$HD$ %ߪHHHt$HD$ Ht$HD$ HlAHjlHRAWAVAAUATIUSMAԉHDH|$dH%(H$1~HD$LHx=xH0DHHt$HD$x.DH٪HHHt$HD$xHHD$LHpZH|$pH$dH3 %(Lt5HH|$HHHĘ[]A\A]A^A_ATUHSH Ht mdH%(HD$1HHt$ HD$ MLeH߾ߪHLHt$ HD$ Ht$HD$ H+HuHT$ H|$HHt$H.HD$HxHgt Ht$!AH@HHD$HxHgtHt$Q!HHHUSHH(HT mdH%(HD$1HtHt$ HD$ -H߾ߪHuHHVHt$ HD$ Ht$HD$ H H|$HHHt$HHD$HxHgt Ht$g AH%HHD$HxHgtHt$6 HHHHHH$dH%(HD$1USH(H mdH%(HD$1H7Ht$ HD$ H߾ߪ窃HHt$ HD$ Ht$ HD$ HVHT$H|$窃H/Ht$HbHD$HxHgt Ht$&pA@HHHD$HxHgtHt$HHhHPUSH(HmdH%(HD$1HHt$ HD$ H߾ߪHHt$ HD$ Ht$ HD$ H:HT$H|$HHt$HFHD$HxHgt Ht$ pA@HHHD$HxHgtHt$HHLH4SHHmdH%(HD$1HHt$HD$ ߪHHHt$HD$ Ht$HD$ qHlAHjlHAWAVAAUATIUSMAԉHDH|$dH%(H$1HD$LHxxHDHHt$HD$xDHg٪HHPHt$HD$xH/HD$LHpH|$H$dH3 %(LtHH|$HtHĘ[]A\A]A^A_ATUHSH HmdH%(HD$1H(Ht$ HD$ LeH߾ߪHLHt$ HD$ Ht$HD$ HEHuHT$ H|$HHt$HHD$HxHgt Ht$6xAHHHD$HxHgtHt$xHHXH@USHH(HmdH%(HD$1HHt$ HD$ H߾ߪHuHHVHt$ HD$ Ht$HD$ vH$H|$HHHt$HHD$HxHgt Ht$wAHHHD$HxHgtHt$vHH=H%HHH$dH%(HD$1USH(HmdH%(HD$1HHt$ HD$ H߾ߪW窃HJHt$ HD$ SHt$ HD$ ƽPwLy謽ЃAHt G GPWFÐЃAHt G GPWÐP33BP33(P33P{33Pr33ڼPi33P@`33覼P@33茼P33rPw33XPw33>Pn33$Pn33 Pd33Pe33ֻP[33輻P@\33袻PD33舻PV33nPW33TPR33:PR33 P@M33PN33PH33ҺP@I33踺P@?33螺P>33脺P=33jP=33PPC336PC33P@<33PPhyyyP@PhyyyιP@;us费Pus蚹H>HtHH8Ht;SHdH%HtH@HtH8u H8OH[øЃAHt G GPWÐЃAHt G GPWÐЃAHt G GPWÐЃAHt G GPWhÐPхʅ ˅茸Pʅ ˅rЃAHt G GPW ÐЃAHt G GPWÐP;usATUSH|$HT$pH$Ht$wdH%(H$1RH$wPHH$@wH$Hg,HH$xwH$HgHHT$0HgH$HxHg}H$HxHgvH$HxHgoH$H|$@CMyH|$0轳H|$@sHt$H|$OMy@jHt$@HHVgMyHbHHD$H8-HpHHx3H|$P1yMy@jHt$PH|$pHHt$-HD$-"H\$pILcL9Ht$,HD$,"HD$pHxHgHjwHHUHD$PHxHg8%uHH: H$1۽Hi$@BHH$o7 H$1谽Hi$@BfMy@jH$H)H*^~7D$D$HMyHؿH۵My@j輿HtH謘 HHD$@HxHgHD$0HxHg1H$dH3 %(H[]A\Ht$/HD$/&YHt$.T$.H@HI94Ѓ<"uH$HձH$1vQMy@jҾH3HHVH{H$HxHg#H$5 0Ny@j聾H3HHVwHeHDŽ$蝺H$H$H$@$AdNH3My@jH3HHV wHH1H$h 5ЃAHtlPЅH$H$( H$ qH$ xH$ PJH۵HH$HxHgt H$趥 H$HxHgt H$蔥 H$HxHgt H$r H*HHD$@HxHgt Ht$+K HD$0HxHgtHt$+/ HHjHHH$HxHgtH$ HHI HH~rHHHu|HHRH$HwH>H$NyHHHٻH$HHHHYEH$Hw莽H$NyHtH$GrHH1 H|$`AHH` H$HwYH$ MyHHt$`HHVH$H$HܿvHHD$pHxHgt H$E HD$PHxHg'HHHHD$`HxHgH$ fffff.SԲH dH%(HD$1HԲ|A==q:=q:~H_qrHKq&HL$[yӲH#q HӲdNHL$[yӲɱ HӲdNHL$[yӲ蜱 HӲdNxHL$[ypӲo HpӲdNKHL$[yPӲB HPӲdNHL$[y0Ӳ H0ӲdNHL$[yӲ HӲdNHL$x[yҲ軰 HҲdNHL$p[yҲ莰 HҲdNjHL$h[yҲa HҲdN=HL$`[yҲ4 HҲdNHL$P[ypҲ HpҲdNHL$@[yPҲگ HPҲdN趿HL$8[y0Ҳ譯 H0ҲdN艿HL$0[yҲ耯 HҲdN\HL$([yѲS HѲdN/HL$ [yѲ& HѲdNHL$[yѲ HѲdNվHL$[yѲ̮ HѲdN訾HL$[ypѲ蟮 HpѲdN{HL$ZyPѲr HPѲdNNHL$Zy0ѲE H0ѲdN!HL$ZyѲ HѲdNHL$Zyв HвdNǽHL$Zyв辭 HвdN蚽HL$Zyв葭 HвdNmHL$Zyвd HвdN@HL$Zypв7 HpвdNHL$ZyPв HPвdNHL$Zy0вݬ H0вdN蹼HL$pZyв谬 HвdN茼HL$`Zyϲ胬 HϲdN_HL$PZyϲV HϲdN2HL$HZyϲ) HϲdNHL$@Zyϲ HϲdNػHL$8Zypϲϫ HpϲdN諻HL$0ZyPϲ被 HPϲdN~HL$(Zy0ϲu H0ϲdNQHL$ ZyϲH HϲdN$HL$Zyβ HβdNHL$Zyβ HβdNʺHL$Zyβ HβdN蝺HL$Zyβ蔪 HβdNpHL$Yypβg HpβdNCHL$YyPβ: HPβdNHL$Yy0β H0βdNHL$Yyβ HβdN輹HL$YyͲ賩 HͲdN菹HL$YyͲ膩 HͲdNbHL$YyͲY HͲdN5HL$YyͲ, HͲdNHL$YypͲ HpͲdN۸HL$YyPͲҨ HPͲdN许HL$Yy0Ͳ襨 H0ͲdN聸HL$YyͲx HͲdNTHL$Yy̲K H̲dN'HL$Yy̲ H̲dNHL$Yy̲ H̲dNͷHL$xYy̲ħ H̲dN蠷HL$pYyp̲藧 Hp̲dNsHL$hYyP̲j HP̲dNFHL$`Yy0̲= H0̲dNHL$XYy̲ H̲dNHL$PYy˲ H˲dN迶HL$HYy˲趦 H˲dN蒶HL$@Yy˲艦 H˲dNeHL$8Yy˲\ H˲dN8HL$0Yyp˲/ Hp˲dN HL$(YyP˲ HP˲dN޵HL$ Yy0˲ե H0˲dN豵HL$Yy˲訥 H˲dN脵HL$Yyʲ{ HʲdNWHL$YyʲN HʲdN*HL$Yyʲ! HʲdNHL$Xyʲ HʲdNдHL$XypʲǤ HpʲdN裴HL$XyPʲ蚤 HPʲdNvHL$Xy0ʲm H0ʲdNIHL$Xyʲ@ HʲdNHL$Xyɲ HɲdNHL$Xyɲ HɲdN³HL$Xyɲ蹣 HɲdN蕳HL$Xyɲ茣 HɲdNhHL$Xypɲ_ HpɲdN;HL$XyPɲ2 HPɲdNHL$Xy0ɲ H0ɲdNHL$Xyɲآ HɲdN贲HL$XyȲ諢 HȲdN臲HL$XyȲ~ HȲdNZHL$XyȲQ HȲdN-HL$xXyȲ$ HȲdNHL$pXypȲ HpȲdNӱHL$hXyPȲʡ HPȲdN覱HL$`Xy0Ȳ蝡 H0ȲdNyHL$XXyȲp HȲdNLHL$PXyDzC HDzdNHL$HXyDz HDzdNHL$@XyDz HDzdNŰHL$8XyDz輠 HDzdN蘰HL$0XypDz菠 HpDzdNkHL$(XyPDzb HPDzdN>HL$ Xy0Dz5 H0DzdNHL$XyDz HDzdNHL$XyƲ۟ HƲdN路HL$XyƲ讟 HƲdN芯HL$XyƲ聟 HƲdN]HL$WyƲT HƲdN0HL$WypƲ' HpƲdNHL$WyPƲ HPƲdN֮HL$Wy0Ʋ͞ H0ƲdN詮HL$WyƲ蠞 HƲdN|HL$WyŲs HŲdNOHL$WyŲF HŲdN"HL$WyŲ HŲdNHL$WyŲ HŲdNȭHL$WypŲ违 HpŲdN蛭HL$WyPŲ蒝 HPŲdNnHL$Wy0Ųe H0ŲdNAHL$WyŲ8 HŲdNHL$WyIJ HIJdNHL$WyIJޜ HIJdN躬HL$WyIJ豜 HIJdN荬HL$xWyIJ脜 HIJdN`HL$pWypIJW HpIJdN3HL$hWyPIJ* HPIJdNHL$`Wy0IJ H0IJdN٫HL$XWyIJЛ HIJdN謫HL$PWyò裛 HòdNHL$HWyòv HòdNRHL$@WyòI HòdN%HL$8Wyò HòdNHL$0Wypò HpòdN˪HL$(WyPòš HPòdN螪HL$ Wy0ò蕚 H0òdNqHL$Wyòh HòdNDHL$Wy²; H²dNHL$Wy² H²dNHL$Wy² H²dN轩HL$Vy²贙 H²dN萩HL$Vyp²臙 Hp²dNcHL$VyP²Z HP²dN6HL$Vy0²- H0²dN HL$Vy² H²dNܨHL$VyӘ HdN诨HL$Vy覘 HdN肨HL$Vyy HdNUHL$VyL HdN(HL$Vyp HpdNHL$VyP HPdNΧHL$Vy0ŗ H0dN衧HL$Vy蘗 HdNtHL$Vyk HdNGHL$Vy> HdNHL$Vy HdNHL$xVy HdNHL$pVyp跖 HpdN蓦HL$hVyP芖 HPdNfHL$`Vy0] H0dN9HL$XVy0 HdN HL$PVy HdNߥHL$HVyп֕ HпdN貥HL$@Vy評 HdN腥HL$8Vy| HdNXHL$0VypO HpdN+HL$(VyP" HPdNHL$ Vy0 H0dNѤHL$VyȔ HdN褤HL$Vy蛔 HdNwHL$Vyоn HоdNJHL$VyA HdNHL$Uy HdNHL$Uyp HpdNãHL$UyP躓 HPdN薣HL$Uy0荓 H0dNiHL$Uy` HdNHT$wೲ*HT$w賲HT$wHT$wHT$wڜHT$wƜHT$w貜HT$w螜HT$w 芜HT$w(vHT$w0bHT$w8NHT$w@:HT$xH&HT$xPHT$xXHT$ x`HT$xh֛HT$xp›HT$xx讛HT$x蚛HT$ x膛HT$$xrHT$(x^HT$,xJHT$0x6HT$4x"HT$8xHT$ H0N NH˶pHȶpHնpHpHpb pNH讍0pHpHpHpHp NHZ#pH pH-pHpHp躩 pNH0OpHLpHYpH>pH;pf ЇNH貌{pHxpHpHjpHgp 0NH^0pHpHpHpHp辨 NH ӱpHбpHݱpH±pHpj HN趋 pNH蘋0pHޯpHpHЯpHͯp HЉND PNH&pHpHpHޭpHۭp膧 HNҊ H0N贊J HN薊 H0Nx NHZ0pHpHpHpHp躦 NHϧpḨpH٧pHpHpf pNH貉0pHpHpHpHp ЍNH^'pH$pH1pHpHp辥 H0N HtN HPNΈ HN谈V 0NH蒈0۠pHؠpHpHʠpHǠp NH>pHpHpHpHp螤 @NH03pH0pH=pH"pHpJ HN薇HD$dH3%(uZH [ÿPԲp菛 HPԲkN[&@Բp赞 H@ԲkN1 wH5pHÿc H;H5dpHÿ藔 HH5ȣpHÿ HH5,pHÿ蟒 HH5pHÿ# HˀH5pHÿ觑 H诀H5XpHÿ+ H蓀H5pHÿ/ HwH5 pHÿ3 H[H5pHÿ跌 H?H5pHÿ; H#H5LpHÿ迋 HH5pHÿC HH5pHÿNJ HH5xpHÿ H1ҹ1H)HHtFHH3H~HgtHt$HD$e HD$ͺ붺믺먺HJ뒺닺넺z p f \ R H>4*   !"v#l$b11H)HHHH3H~HgtHt$HD$d HD$H5pHÿ3 H}/떺0돺+눺,끺-w.m#c$Y%O&E';(1)'*  !"}%&'()*+,-.v/l0b1X1 | rh^TJ@fffff.雾f.S`H0dH%(HD$(1葄H`|À(HipHUpt=1pH:p+=p*HL$ 0y0p H0dNbHL$ (yYp HdN5HL$ y,p HdNHL$ yo HdNHL$ yo HdNHL$ yo HdNHL$ ypxo HpdNTHL$ yPKo HPdN'HL$ y0o H0dN~HL$ yn HdN~HL$ yn HdN~HL$ Њyn HdNs~HL$ yjn HdNF~HL$ y=n HdN~HL$ ypn HpdN}HL$ yPm HPdN}HL$ y0m H0dN}HL$ ym HdNe}HL$ y\m HdN8}HL$ y/m HdN }HL$ pym HdN|HL$ `yl HdN|HL$ Pypl HpdN|HL$ @yP{l HPdNW|HL$ 8y0Nl H0dN*|HL$ 0y!l HdN{HL$ (yk HdN{HL$ yk HdN{HL$ yk HdNv{HL$ ymk HdNI{HL$ yp@k HpdN{HL$ yPk HPdNzHL$ Љy0j H0dNzHL$ ȉyj HdNzHL$ yj HdNhzHL$ y_j HdN;zHL$ y2j HdNzHL$ yj HdNyHL$ ypi HpdNyHL$ yPi HPdNyHL$ y0~i H0dNZyHL$ yQi HdN-yHL$ y$i HdNyHL$ xyh HdNxHL$ pyh HdNxHL$ hyh HdNyxHL$ `ypph HpdNLxHL$ PyPCh HPdNxHL$ @y0h H0dNwHL$ 8yg HdNwHL$ 0yg HdNwHL$ (yg HdNkwHL$ ybg HdN>wHL$ y5g HdNwHL$ ypg HpdNvHL$ yPf HPdNvHL$ y0f H0dNvHL$ yf HdN]vHL$ yTf HdN0vHL$ y'f HdNvHL$ ye HdNuHL$ ؈ye HdNuHL$ Јype HpdN|uHL$ ȈyPse HPdNOuHL$ y0Fe H0dN"uHL$ ye HdNtHL$ yd HdNtHL$ yd HdNtHL$ yd HdNntHL$ yed HdNAtHL$ yp8d HpdNtHL$ yP d HPdNsHL$ y0c H0dNsHL$ xyc HdNsHL$ pyc HdN`sHL$ hyWc HdN3sHL$ `y*c HdNsHL$ Xyb HdNrHL$ Pypb HpdNrHL$ HyPb HPdNrHL$ @y0vb H0dNRrHL$ 8yIb HdN%rHL$ 0yb HdNqHL$ (ya HdNqHL$ ya HdNqHL$ ya HdNqqHL$ ypha HpdNDqHL$ yP;a HPdNqHL$ y0a H0dNpHL$ y` HdNpHL$ y` HdNpHL$ y` HdNcpHL$ yZ` HdN6pHL$ ؇y-` HdN pHL$ Їyp` HpdNoHL$ ȇyP_ HPdNoHL$ y0_ H0dNoHL$ yy_ HdNUoHL$ yL_ HdN(oHL$ y_ HdNnHL$ y^ HdNnHL$ y^ HdNnHL$ yp^ HpdNtnHL$ yPk^ HPdNGnHL$ y0>^ H0dNnHL$ xy^ HdNmHL$ py] HdNmHL$ hy] HdNmHL$ `y] HdNfmHL$ Xy]] HdN9mHL$ Pyp0] HpdN mHL$ HyP] HPdNlHL$ @y0\ H0dNlHL$ 8y\ HdNlHL$ 0y|\ HdNXlHL$ (yO\ HdN+lHL$ y"\ HdNkHL$ y[ HdNkHL$ yp[ HpdNkHL$ yP[ HPdNwkHL$ y0n[ H0dNJkHL$ yA[ HdNkHL$ y[ HdNjHL$ yZ HdNjHL$ yZ HdNjHL$ ؆yZ HdNijHL$ Іyp`Z HpdN HPdNNHL$ذy0> H0dNNHL$аy> HdN[NHL$yR> HdN.NHL$y%> HdNNHL$y= HdNMHL$y= HdNMHL$yp= HpdNzMHL$yPq= HPdNMMHL$y0D= H0dN MHL$y= HdNLHL$py< HdNLHL$`y< HdNLHL$Py< HdNlLHL$@yc< HdN?LHL$0yp6< HpdNLHL$(yP < HPdNKHL$ y0; H0dNKHL$y; HdNKHL$y; HdN^KHL$yU; HdN1KHL$y(; HdNKHL$y: HdNJHL$Яyp: HpdNJHL$yP: HPdN}JHL$y0t: H0dNPJHL$yG: HdN#JHL$y: HdNIHL$y9 HdNIHL$y9 HdNIHL$y9 HdNoIHL$ypf9 HpdNBIHL$yP99 HPdNIHL$xy0 9 H0dNHHL$py8 HdNHHL$hy8 HdNHHL$`y8 HdNaHHL$XyX8 HdN4HHL$Py+8 HdNHHL$@yp7 HpdNGHL$8yP7 HPdNGHL$0y07 H0dNGHL$(yw7 HdNSGHL$ yJ7 HdN&GHL$y7 HdNFHL$y6 HdNFHL$y6 HdNFHL$yp6 HpdNrFHL$yPi6 HPdNEFHL$y0<6 H0dNFHL$y6 HdNEHL$y5 HdNEHL$خy5 HdNEHL$Юy5 HdNdEHL$Ȯy[5 HdN7EHL$yp.5 HpdN EHL$yP5 HPdNDHL$y04 H0dNDHL$y4 HdNDHL$yz4 HdNVDHL$yM4 HdN)DHL$y 4 HdNCHL$y3 HdNCHL$yp3 HpdNCHL$xyP3 HPdNuCHL$py0l3 H0dNHCHL$hy?3 HdNCHL$`y3 HdNBHL$Xy2 HdNBHL$Py2 HdNBHL$Hy2 HdNgBHL$@yp^2 HpdN:BHL$8yP12 HPdN BHL$0y02 H0dNAHL$(y1 HdNAHL$ y1 HdNAHL$y}1 HdNYAHL$yP1 HdN,AHL$y#1 HdN@HL$yp0 HpdN@HD$dH3%(uH(1S.H dH%(HD$1ADH.|A}@FHpFHp4=pHjpQ=ŒpYQZ4=pHHL$}-. H-dN>HL$x}-. H-dN>HL$p}-z. H-dNV>HL$h}p-M. Hp-dN)>HL$`}P- . HP-dN=HL$P}0-- H0-dN=HL$@}-- H-dN=HL$8},- H,dNu=HL$0},l- H,dNH=HL$(},?- H,dN=HL$ },- H,dN)HL$8}p5 HpdN)HL$0}P HPdN(HL$(}0 H0dN(HL$ } HdN(HL$} HdN](HL$}T HdN0(HL$}' HdN(HL$} HdN'HL$}p HpdN'HL$}P HPdN|'HL$}0s H0dNO'HL$}F HdN"'HL$} HdN&HL$} HdN&HL$} HdN&HL$} HdNn&HL$}pe HpdNA&HL$}P8 HPdN&HL$}0  H0dN%HL$} HdN%HL$} HdN%HL$} HdN`%HL$}W HdN3%HL$}* HdN%HL$x}p HpdN$HL$p}P HPdN$HL$h}0 H0dN$HL$`}v HdNR$HL$X}I HdN%$HL$P} HdN#HL$H} HdN#HL$@} HdN#HL$8}p HpdNq#HL$0}Ph HPdND#HL$(}0; H0dN#HL$ } HdN"HL$} HdN"HL$} HdN"HL$} HdNc"HL$}Z HdN6"HL$}p- HpdN "HL$}P HPdN!HL$}0 H0dN!HL$} HdN!HL$}y HdNU!HL$}L HdN(!HL$} HdN HL$} HdN HL$}p HpdN HL$}P HPdNt HL$}0k H0dNG HL$}> HdN HL$} HdNHL$} HdNHL$} HdNHL$} HdNfHL$x}p] HpdN9HL$p}P0 HPdN HL$h}0 H0dNHL$`} HdNHL$X} HdNHL$P}| HdNXHL$H}O HdN+HL$@}" HdNHL$8}p HpdNHL$0}P HPdNHL$(}0 H0dNwHL$ }n HdNJHL$}A HdNHL$} HdNHL$} HdNHL$} HdNHL$}p HpdNiHL$}P` HPdN<HL$}03 H0dNHL$} HdNHL$} HdNHL$} HdNHL$} HdN[HL$}R HdN.HL$}p% HpdNHL$}P HPdNHL$}0 H0dNHL$} HdNzHL$}q HdNMHL$}D HdN HL$} HdNHL$} HdNHL$x}p HpdNHL$p}P HPdNlHL$h}0c H0dN?HL$`}6 HdNHL$X} HdNHL$P} HdNHL$H} HdNHL$@} HdN^HL$8}pU HpdN1HL$0}P( HPdNHL$(}0 H0dNHL$ } HdNHL$} HdN}HL$}t HdNPHL$}G HdN#HL$} HdNHL$}p HpdNHL$}P HPdNHL$}0 H0dNoHL$}f HdNBHL$}9 HdNHL$}  HdNHL$} HdNHL$} HdNHL$}p HpdNaHL$}PX HPdN4HL$}0+ H0dNHL$} HdNHT$мwfHT$wRHT$w>HT$w*HT$wHT$wHT$wHT$wHT$wHT$wHT$wHT$wHT$wvHT$wbHT$wNHT$w:HT$w&HT$xHT$xHT$xHT$ x HT$x(HT$x0HT$x8HT$x@HT$ xHrHT$$xP^HT$(xXJHT$,x`6HT$0xh"HT$4xpHT$8xxHT$ HL$}P 5 HP dN HL$}0  H0 dN HL$x} H dN HL$p} H dN HL$h} H dN] HL$`} T H dN0 HL$X} ' H dN HL$P}p Hp dN HL$H}P HP dN HL$@}0 H0 dN| HL$8} s H dNO HL$0} F H dN" HL$(}  H dN HL$ } H dN HL$} H dN HL$}p Hp dNn HL$}P e HP dNA HL$}0 8 H0 dN HL$} H dNHL$} H dNHL$} H dNHL$} H dN`HL$} W H dN3HL$}p * Hp dNHL$}P HP dNHL$}0 H0 dNHL$} H dNHL$}v HdNRHL$}I HdN%HL$} HdNHL$} HdNHL$}p HpdNHL$}P HPdNqHL$}0h H0dNDHL$x}; HdNHL$p} HdNHL$h} HdNHL$`} HdNHL$X} HdNcHL$P}pZ HpdN6HL$H}P- HPdN HL$@}0 H0dNHL$8} HdNHL$0} HdNHL$(}y HdNUHL$ }L HdN(HL$} HdNHL$}p HpdNHL$}P HPdNHL$}0 H0dNtHL$}k HdNGHL$}> HdNHL$} HdNHL$} HdNHL$} HdNHL$}p HpdNfHL$}P] HPdN9HL$}00 H0dN HL$} HdNHL$} HdNHL$} HdNHL$}| HdNXHL$}O HdN+HL$}p" HpdNHL$}P HPdNHL$}0 H0dNHL$x} HdNwHL$p}n HdNJHL$h}A HdNHL$`} HdNHL$X} HdNHL$P}p HpdNHL$H}P HPdNiHL$@}0` H0dNHT${*HT${HT$"{HT$,{HT$6{HT$@{HT$J{HT$T{HT$^{HT$h{vHT$r{ bHT$|{(NHT${0:HT${8&HT${@HT${HH1PMHT$}H A%HT$|HT$`|HT$|HT$0|uHT$| aHT$|(MHT$h|09HT$|8%HT$8|@HT$|HHT$|PHT$p|XHT$|`HT$@|hHT$|pHT$|xHT$x|qHT$|]HT$H|IHT$|5HT$|!HT$| HT$|HT$P|HT$|HT$ |HT$|HT$|HT$X|HT$|mHT$(|YHT$|EHT$|1HT$`|HT$| HT$0|HT$| HT$|(HT$h|0HT$|8HT$8|@HT$|H}HT$}PiHT$p}XUHT$}`AHT$@}h-HT$}p1HPH*lpgH'lpgH$lpgG=pbjpTjpFjp8jp*jpjpjpjp=3p=p^= p1=puH/pRܜpHD$dH3%(yH [ÿ/+}/HPRUZ /0 /HXR (/(/H` R@ԲZApE H@ԲkN}PԲ8Ap HPԲkNFH/`RpwH/PRpWH/@Rp7UH/0Rtp(}#1H)H̀Ht8HH3H~HgtHt$HD$\BHD$ͺ$붺%H&렺'뙺(뒺)닺*넺+z,p-f.\/R0H1>1ҹ1H)H H pHH3H~HgtHt$HD$AHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A'1H)H̀HHH3H~HgtHt$HD$?HD$ɺ(벺)뫺*뤺+띺,떺-돺.눺11wmcYOE;1'     !"A 7!-"##$%&)-*#+,-./0yoe[1H)HHHH3H~HgtHt$HD$<HD$ɺ벺 뫺 뤺 띺 떺 돺눺끺wmcYOE;1'  !"#$%&'()}*s+i,_-U.K/A071-1ҹ1H)HHHH3H~HgtHt$HD$;HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ukaWMC9 / %   MC9//+0!1ۢf.Hx/dH%(HD$1Hx/|ANHpHpQ=5pHӐp=5pHT$MMyP/P/X/HwpP/HzyAP/hX/A }0%}:}8/H=pH&pXZHD$dH3%(uYHÿPԲ 5p HPԲkNjH@Բ4p H@ԲkN@+fDH/dH%(HD$1H/|AYHpMHp=b4pHӏp=F4pHT$MMy/L//Hwp/BHzyA/h/AP/}0};/}/DH=pH&pXZHD$dH3%(uYHÿPԲ3pN HPԲkNH@Բ3pt H@ԲkN+VfDH0dH%(HD$1rH0|A HpHp=3pHӎp=2pHT$MMy///Hwp/HzyA/h/A:}0}:}/H=pH&pXZHD$dH3%(uYHÿPԲk2p HPԲkNH@Բ92p$ H@ԲkN+fDHP;dH%(HD$1"HP;|A^HpH֘pa=1pHp3=1p;=pHp=ppHmp`A=PpHMpXHL$S};H pP H;dNHL$S}: H:dNrHL$S}:i H:dNEHL$S}:< H:dNHL$S}: H:dNHL$S}`: H`:dNHL$S}@: H@:dNHL$xS} : H :dNdHL$pS}:[ H:dN7HL$hS}9. H9dN HL$`S}9 H9dNHL$PS}9 H9dNHL$@S}9 H9dNHL$8S}`9z H`9dNVHL$0S}@9M H@9dN)HL$(S} 9 H 9dNHL$ S}9 H9dNHL$S}8 H8dNHL$S}8 H8dNuHL$S}8l H8dNHHL$R}8? H8dNHL$R}`8 H`8dNHL$R}@8 H@8dNHL$R} 8 H 8dNHL$R}8 H8dNgHL$R}7^ H7dN:HL$R}71 H7dN HL$R}7 H7dNHL$R}7 H7dNHL$R}`7 H`7dNHL$pR}@7} H@7dNYHL$`R} 7P H 7dN,HL$PR}7# H7dNHL$HR}6 H6dNHL$@R}6 H6dNHL$8R}6 H6dNxHL$0R}6o H6dNKHL$(R}`6B H`6dNHL$ R}@6 H@6dNHL$R} 6 H 6dNHL$R}6 H6dNHL$R}5 H5dNjHL$R}5a H5dN=HL$Q}54 H5dNHL$Q}5 H5dNHL$Q}`5 H`5dNHL$Q}@5 H@5dNHL$Q} 5 H 5dN\HL$Q}5S H5dN/HL$Q}4& H4dNHL$Q}4 H4dNHL$Q}4 H4dNHL$Q}4 H4dN{HL$Q}`4r H`4dNNHL$Q}@4E H@4dN!HL$Q} 4 H 4dNHL$Q}4 H4dNHL$xQ}3 H3dNHL$pQ}3 H3dNmHL$hQ}3d H3dN@HL$`Q}37 H3dNHL$XQ}`3 H`3dNHL$PQ}@3 H@3dNHL$HQ} 3 H 3dNHL$@Q}3 H3dN_HL$8Q}2V H2dN2HL$0Q}2) H2dNHL$(Q}2 H2dNHL$ Q}2 H2dNHL$Q}`2 H`2dN~HL$Q}@2u H@2dNQHL$Q} 2H H 2dN$HL$Q}2 H2dNHL$P}1 H1dNHL$P}1 H1dNHL$P}1 H1dNpHL$P}1g H1dNCHL$P}`1: H`1dNHL$P}@1 H@1dNHL$P} 1 H 1dNHL$P}1 H1dNHL$P}0 H0dNbHL$P}0Y H0dN5HL$P}0, H0dNHL$P}0 H0dNHL$P}`0ҿ H`0dNHL$P}@0西 H@0dNHL$P} 0x H 0dNT=|p=|p={|p]=f|p=Q|puH/pR9|pHD$dH3%(xHÿ//wHPR /T /BHXR~(/`(/ H` RI=H/`Rn{p)@Բ p H@ԲkNPԲv p HPԲkNH/PR{pH/@RzpVH/0Rzpu)۽f.HpFdH%(HD$1HpF|A.Hڑp}HƑp1=pHp=vpHL$0r}@F H@FdNHL$(r} F躼 H FdNHL$ r}F荼 HFdNiHL$r}E` HEdN舲 H>dNdHL$o}>[ H>dN7HL$o}>. H>dN HL$o}> H>dNHL$o}`>Ա H`>dNHL$o}@>觱 H@>dNHL$o} >z H >dNVHL$o}>M H>dN)HL$o}= H=dNHL$o}= H=dNHL$o}=ư H=dNHL$o}=虰 H=dNuHL$o}`=l H`=dNHHL$o}@=? H@=dNHL$xo} = H =dNHL$po}= H=dNHL$ho}<踯 H<dN蔿HL$`o}<苯 H<dNgHL$Xo}<^ H<dN:HL$Po}<1 H<dN HL$Ho}`< H`<dNHL$@o}@<׮ H@<dN賾HL$8o} <誮 H <dN膾HL$0o}<} H<dNYHL$(o};P H;dN,HL$ o};# H;dNHL$o}; H;dNҽHL$o};ɭ H;dN襽HL$o}`;蜭 H`;dNxHD$dH3%(uYHÿPԲpr HPԲkN><@Բp H@ԲkNzf.HQdH%(HD$1HQ|Aμ)HpHpѰ=2pHkp=pHL$0}`Q臬 H`QdNcHL$(}@QZ H@QdN6HL$ } Q- H QdN HL$}Q HQdNܻHL$}Pӫ HPdN读HL$}P覫 HPdN肻HL$}Py HPdNUHL$}PL HPdN(HL$}`P H`PdNHL$}@P H@PdNκHL$} PŪ H PdN衺HL$Н}P蘪 HPdNtHL$}Ok HOdNGHL$}O> HOdNHL$}O HOdNHL$}O HOdNHL$}`O跩 H`OdN蓹HL$}@O芩 H@OdNfHL$} O] H OdN9HL$}O0 HOdN HL$p}N HNdN߸HL$`}N֨ HNdN貸HL$P}N詨 HNdN腸HL$@}N| HNdNXHL$8}`NO H`NdN+HL$0}@N" H@NdNHL$(} N H NdNѷHL$ }Nȧ HNdN褷HL$}M蛧 HMdNwHL$}Mn HMdNJHL$}MA HMdNHL$}M HMdNHL$М}`M H`MdNöHL$Ȝ}@M躦 H@MdN薶HL$} M荦 H MdNiHL$}M` HMdNHL$}U5 HUdNHL$}U HUdNHL$}Uێ HUdN跞HL$}`U讎 H`UdN芞HL$}@U聎 H@UdN]HL$} UT H UdN0HL$}U' HUdNHL$x}T HTdN֝HL$p}T͍ HTdN詝HL$h}T蠍 HTdN|HL$`}Ts HTdNOHL$X}`TF H`TdN"HL$P}@T H@TdNHL$H} T H TdNȜHL$@}T迌 HTdN蛜HL$8}S蒌 HSdNnHL$0}Se HSdNAHL$(}S8 HSdNHL$ }S HSdNHL$}`Sދ H`SdN躛HL$}@S豋 H@SdN荛HL$} S脋 H SdN`HL$}SW HSdN3HL$}R* HRdNHL$}R HRdNٚHL$}RЊ HRdN謚HL$}R裊 HRdNHL$}`Rv H`RdNRHL$}@RI H@RdN%HL$} R H RdNHD$dH3%(uYHÿPԲ_o HPԲkN辙<@Բ-o H@ԲkN蔙f.HPhdH%(HD$1HPh|AN詟Hp蝟HpQ=oHp=oHL$} h H hdNHL$}hڈ HhdN趘HL$}g譈 HgdN艘HL$}g耈 HgdN\HL$}gS HgdN/HL$}g& HgdNHL$}`g H`gdN՗HL$}@ġ H@gdN託HL$} g蟇 H gdN{HL$}gr HgdNNHL$}fE HfdN!HL$}f HfdNHL$}f HfdNǖHL$x}f辆 HfdN蚖HL$p}`f葆 H`fdNmHL$h}@fd H@fdN@HL$`} f7 H fdNHL$X}f HfdNHL$P}e݅ HedN蹕HL$@}e谅 HedN茕HL$0}e胅 HedN_HL$ }eV HedN2HL$}`e) H`edNHL$}@e H@edNؔHL$} eτ H edN諔HL$}e袄 HedN~HL$}du HddNQHL$}dH HddN$HL$}d HddNHL$}d HddNʓHL$}`d H`ddN蝓HL$}@d蔃 H@ddNpHL$} dg H ddNCHL$}d: HddNHL$}c HcdNHL$x}c HcdN輒HL$p}c賂 HcdN菒HL$h}c膂 HcdNbHL$`}`cY H`cdN5HL$X}@c, H@cdNHL$P} c H cdNۑHL$H}cҁ HcdN讑HL$@}b襁 HbdN聑HL$8}bx HbdNTHL$0}bK HbdN'HL$(}b HbdNHL$ }`b H`bdN͐HL$}@bĀ H@bdN蠐HL$} b藀 H bdNsHL$}bj HbdNFHL$}a= HadNHL$}a HadNHL$}a HadN迏HL$}a HadN蒏HL$}`a H`adNeHL$}@a\ H@adN8HL$} a/ H adN HL$}a HadNގHL$}`~ H`dN豎HL$}`~ H`dN脎HL$}`{~ H`dNWHL$}`N~ H`dN*HL$}``!~ H``dNHL$}@`} H@`dNЍHL$} `} H `dN裍HL$x}`} H`dNvHL$p}_m} H_dNIHL$h}_@} H_dNHL$`}_} H_dNHL$X}_| H_dNŒHL$P}`_| H`_dN蕌HL$H}@_| H@_dNhHL$@} __| H _dN;HL$8}_2| H_dNHL$0}^| H^dNHL$(}^{ H^dN贋HL$ }^{ H^dN臋HL$}^~{ H^dNZHL$}`^Q{ H`^dN-HL$}@^${ H@^dNHL$} ^z H ^dNӊHL$}^z H^dN覊HL$}]z H]dNyHL$}]pz H]dNLHL$}]Cz H]dNHL$}]z H]dNHL$}`]y H`]dNʼnHL$}@]y H@]dN蘉HD$dH3%(uYHÿPԲo蒝 HPԲkN^<@Բo踠 H@ԲkN4yf.HpsdH%(HD$1貌Hps|AIHzp=Hzp|=RoHkzp=6oHL$~@sx H@sdN胈HL$~ szx H sdNVHL$~sMx HsdN)HL$~r x HrdNHL$~rw HrdNχHL$~rw HrdN袇HL$~rw HrdNuHL$~`rlw H`rdNHHL$~@r?w H@rdNHL$~ rw H rdNHL$~rv HrdNHL$~qv HqdN蔆HL$~qv HqdNgHL$x~q^v HqdN:HL$p~q1v HqdN HL$h~`qv H`qdNHL$`~@qu H@qdN賅HL$X~ qu H qdN膅HL$P~q}u HqdNYHL$@~pPu HpdN,HL$0~p#u HpdNHL$ ~pt HpdN҄HL$~pt HpdN襄HL$~`pt H`pdNxHL$~@pot H@pdNKHL$~ pBt H pdNHL$~pt HpdNHL$~os HodNăHL$~os HodN藃HL$~os HodNjHL$~oas HodN=HL$~`o4s H`odNHL$~@os H@odNHL$~ or H odN趂HL$~or HodN艂HL$x~nr HndN\HL$p~nSr HndN/HL$h~n&r HndNHL$`~nq HndNՁHL$X~`nq H`ndN訁HL$P~@nq H@ndN{HL$H~ nrq H ndNNHL$@~nEq HndN!HL$8~mq HmdNHL$0~mp HmdNǀHL$(~mp HmdN蚀HL$ ~mp HmdNmHL$~`mdp H`mdN@HL$~@m7p H@mdNHL$~ m p H mdNHL$~mo HmdNHL$~lo HldNHL$~lo HldN_HL$~lVo HldN2HL$~l)o HldNHL$~`ln H`ldN~HL$~@ln H@ldN~HL$~ ln H ldN~~HL$~lun HldNQ~HL$~kHn HkdN$~HL$~kn HkdN}HL$~km HkdN}HL$~km HkdN}HL$~`km H`kdNp}HL$~@kgm H@kdNC}HL$x~ k:m H kdN}HL$p~k m HkdN|HL$h~jl HjdN|HL$`~jl HjdN|HL$X~jl HjdNb|HL$P~jYl HjdN5|HL$H~`j,l H`jdN|HL$@~@jk H@jdN{HL$8~ jk H jdN{HL$0~jk HjdN{HL$(~ixk HidNT{HL$ ~iKk HidN'{HL$~ik HidNzHL$~ij HidNzHL$~`ij H`idNzHL$~@ij H@idNszHL$~ ijj H idNFzHL$~i=j HidNzHL$~hj HhdNyHL$~hi HhdNyHL$~hi HhdNyHL$~hi HhdNeyHL$~`h\i H`hdN8yHD$dH3%(uYHÿPԲo2 HPԲkNx<@ԲmoX H@ԲkNx:if.H~dH%(HD$1R|H~|Ax~HZup~HFupl=oH+up=oHL$~`~Gh H`~dN#xHL$~@~h H@~dNwHL$~ ~g H ~dNwHL$~~g H~dNwHL$~}g H}dNowHL$~}fg H}dNBwHL$~}9g H}dNwHL$~} g H}dNvHL$~`}f H`}dNvHL$~@}f H@}dNvHL$~ }f H }dNavHL$~}Xf H}dN4vHL$~|+f H|dNvHL$x~|e H|dNuHL$p~|e H|dNuHL$h~|e H|dNuHL$`~`|we H`|dNSuHL$X~@|Je H@|dN&uHL$P~ |e H |dNtHL$@~|d H|dNtHL$0~{d H{dNtHL$ ~{d H{dNrtHL$~{id H{dNEtHL$~{X<@Բoo H@ԲkNXzHf.HДdH%(HD$1[HД|AW)^Hjp^HjpK=2oHjp=oHL$0D~G HdNcWHL$(D~ZG HdN6WHL$ D~`-G H`dN WHL$D~@G H@dNVHL$D~ F H dNVHL$D~F HdNVHL$D~yF HdNUVHL$C~LF HdN(VHL$C~F HdNUHL$C~E HdNUHL$C~`E H`dNUHL$C~@E H@dNtUHL$C~ kE H dNGUHL$C~>E HdNUHL$C~E HdNTHL$C~D HdNTHL$C~D HdNTHL$C~D HdNfTHL$C~`]D H`dN9THL$C~@0D H@dN THL$pC~ D H dNSHL$`C~C HdNSHL$PC~C HdNSHL$@C~|C HdNXSHL$8C~OC HdN+SHL$0C~"C HdNRHL$(C~`B H`dNRHL$ C~@B H@dNRHL$C~ B H dNwRHL$C~nB HdNJRHL$B~AB HdNRHL$B~B HdNQHL$B~A HdNQHL$B~A HdNQHL$B~`A H`dNiQHL$B~@`A H@dN HdNNHL$0B~`> H`dNNHL$(B~@> H@dNlNHL$ B~ c> H dN?NHL$B~6> HdNNHL$B~ > HdNMHL$B~= HdNMHL$B~= HdNMHL$A~= HdN^MHL$A~`U= H`dN1MHL$A~@(= H@dNMHL$A~ < H dNLHL$A~< HdNLHL$A~< HdN}LHL$A~t< HdNPLHL$A~G< HdN#LHL$A~< HdNKHL$A~`; H`dNKHL$A~@; H@dNKHL$A~ ; H dNoKHL$A~f; HdNBKHL$A~9; HdNKHL$A~ ; HdNJHL$A~: HdNJHL$xA~: HdNJHL$pA~`: H`dNaJHL$hA~@X: H@dN4JHL$`A~ +: H dNJHL$XA~9 HdNIHL$PA~9 HdNIHL$HA~9 HdNIHL$@A~w9 HdNSIHL$8A~J9 HdN&IHL$0A~`9 H`dNHHL$(A~@8 H@dNHHL$ A~ 8 H dNHHL$A~8 HdNrHHL$A~i8 HdNEHHL$A~<8 HdNHHD$dH3%(uYHÿPԲo\ HPԲkNG<@ԲMo8_ H@ԲkNG8f.HPdH%(HD$12KHP|AnGMH`pMH`pq;=ҙoH`p =o6 HL$Z~ '7 H dNGHL$Z~6 HdNFHL$Z~6 HdNFHL$Z~6 HdN|FHL$xZ~s6 HdNOFHL$pZ~F6 HdN"FHL$hZ~`6 H`dNEHL$`Z~@5 H@dNEHL$XZ~ 5 H dNEHL$PZ~5 HdNnEHL$HZ~e5 HdNAEHL$@Z~85 HdNEHL$8Z~ 5 HdNDHL$0Z~4 HdNDHL$(Z~`4 H`dNDHL$ Z~@4 H@dN`DHL$Z~ W4 H dN3DHL$Z~*4 HdNDHL$Z~3 HdNCHL$Z~3 HdNCHL$Y~3 HdNCHL$Y~v3 HdNRCHL$Y~`I3 H`dN%CHL$Y~@3 H@dNBHL$Y~ 2 H dNBHL$Y~2 HdNBHL$Y~2 HdNqBHL$Y~h2 HdNDBHL$Y~;2 HdNBHL$Y~2 HdNAHL$Y~`1 H`dNAHL$Y~@1 H@dNAHL$Y~ 1 H dNcAHL$Y~Z1 HdN6AHL$Y~-1 HdN AHL$Y~1 HdN@HL$xY~0 HdN@HL$pY~0 HdN@HL$hY~`y0 H`dNU@HL$`Y~@L0 H@dN(@HL$XY~ 0 H dN?HL$PY~/ HdN?HL$HY~/ HdN?HL$@Y~/ HdNt?HL$8Y~k/ HdNG?HL$0Y~>/ HdN?HL$(Y~`/ H`dN>HL$ Y~@. H@dN>HL$Y~ . H dN>HL$Y~. HdNf>HL$Y~]. HdN9>HD$dH3%(uYHÿPԲo3R HPԲkN=@ԲnoYU H@ԲkN=;.f.S H dH%(HD$1QAH |A=CHrpCHrp1=oHrp*=ՏoJ*HL$v~F- HdN"=HL$xv~ж- HжdN& HdN6HL$8u~б& HбdN5HL$0u~% HdN5HL$(u~% HdN5HL$ u~p% HpdNf5HL$u~P]% HPdN95HL$u~00% H0dN 5HL$u~% HdN4HL$u~$ HdN4HL$t~а$ HаdN4HL$t~|$ HdNX4HL$t~O$ HdN+4HL$t~p"$ HpdN3HL$t~P# HPdN3HL$t~0# H0dN3HL$t~# HdNw3HL$t~n# HdNJ3HL$t~ЯA# HЯdN3HL$t~# HdN2HL$t~" HdN2HL$t~p" HpdN2HL$t~P" HPdNi2HL$t~0`" H0dN<2HL$t~3" HdN2HL$t~" HdN1HL$xt~Ю! HЮdN1HL$pt~! HdN1HL$ht~! HdN[1HL$`t~pR! HpdN.1HL$Xt~P%! HPdN1HL$Pt~0 H0dN0HL$Ht~ HdN0HL$@t~ HdNz0HL$8t~Эq HЭdNM0HL$0t~D HdN 0HL$(t~ HdN/HL$ t~p HpdN/HL$t~P HPdN/HL$t~0 H0dNl/HL$t~c HdN?/HL$t~6 HdN/HL$s~Ь  HЬdN.HL$s~ HdN.HL$s~ HdN.HL$s~p HpdN^.HL$s~PU HPdN1.HL$s~0( H0dN.HL$s~ HdN-HL$s~ HdN-HL$s~Ы HЫdN}-HL$s~t HdNP-HL$s~G HdN#-HL$s~p HpdN,HL$s~P HPdN,HL$s~0 H0dN,HL$s~ HdNo,HL$s~f HdNB,HL$xs~Ъ9 HЪdN,HL$ps~  HdN+HL$hs~ HdN+HL$`s~p HpdN+HL$Xs~P HPdNa+HL$Ps~0X H0dN4+HL$Hs~+ HdN+HL$@s~ HdN*HL$8s~Щ HЩdN*HT$мw@91HT$wH%1HT$wP1HT$wX0HT$w`0HT$wh0HT$wp0HT$wx0HT$w0HT$w0HT$wq0HT$w]0HT$wI0HT$w50HT$w!0HT$w 0HT$w/HT$xȨ/HT$xШ/HT$xب/HT$ xਲ਼/HT$x訳/HT$x/HT$xm/HT$xY/HT$ xE/HT$$x1/HT$(x/HT$,x /HT$0x(.HT$4x0.HT$8x8.HT$4*   !"#v$l11H)H@H@HH3H~HgtHt$HD$n0HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SҳH dH%(HD$1Hҳ|AxH9_plH%_p =`oH _p*=e`oJ*HL$~ҳ HҳdN HL$x~ҳ HҳdN HL$p~pҳ| HpҳdNX HL$h~PҳO HPҳdN+ HL$`~0ҳ" H0ҳdN HL$X~ҳ HҳdN HL$P~ѳ HѳdN HL$H~ѳ HѳdNw HL$@~ѳn HѳdNJ HL$8~ѳA HѳdN HL$0~pѳ HpѳdN HL$(~Pѳ HPѳdN HL$ ~0ѳ H0ѳdN HL$~ѳ HѳdNi HL$~г` HгdN< HL$~г3 HгdN HL$~г HгdN HL$~г HгdN HL$~pг HpгdN HL$~Pг HPгdN[ HL$~0гR H0гdN. HL$؅~г% HгdN HL$Ѕ~ϳ HϳdN HL$ȅ~ϳ HϳdN HL$~ϳ HϳdNz HL$~ϳq HϳdNM HL$~pϳD HpϳdN HL$~Pϳ HPϳdNHL$~0ϳ H0ϳdNHL$~ϳ HϳdNHL$~γ HγdNlHL$~γc HγdN?HL$~γ6 HγdNHL$x~γ HγdNHL$p~pγ HpγdNHL$h~Pγ HPγdNHL$`~0γ H0γdN^HL$X~γU HγdN1HL$P~ͳ( HͳdNHL$H~ͳ HͳdNHL$@~ͳ HͳdNHL$8~ͳ HͳdN}HL$0~pͳt HpͳdNPHL$(~PͳG HPͳdN#HL$ ~0ͳ H0ͳdNHL$~ͳ HͳdNHL$~̳ H̳dNHL$~̳ H̳dNoHL$~̳f H̳dNBHL$~̳9 H̳dNHL$~p̳ Hp̳dNHL$~P̳ HP̳dNHL$~0̳ H0̳dNHL$؄~̳ H̳dNaHL$Є~˳X H˳dN4HL$Ȅ~˳+ H˳dNHL$~˳ H˳dNHL$~˳ H˳dNHL$~p˳ Hp˳dNHL$~P˳w HP˳dNSHL$~0˳J H0˳dN&HL$~˳ H˳dNHL$~ʳ HʳdNHL$~ʳ HʳdNHL$~ʳ HʳdNrHL$x~ʳi HʳdNEHL$p~pʳ< HpʳdNHL$h~Pʳ HPʳdNHL$`~0ʳ H0ʳdNHL$X~ʳ HʳdNHL$P~ɳ HɳdNdHL$H~ɳ[ HɳdN7HL$@~ɳ. HɳdN HL$8~ɳ HɳdNHL$0~pɳ HpɳdNHL$(~Pɳ HPɳdNHL$ ~0ɳz H0ɳdNVHL$~ɳM HɳdN)HL$~ȳ HȳdNHL$~ȳ HȳdNHL$~ȳ HȳdNHL$~ȳ HȳdNuHL$~pȳl HpȳdNHHL$~Pȳ? HPȳdNHL$~0ȳ H0ȳdNHL$؃~ȳ HȳdNHL$Ѓ~dz HdzdNHL$ȃ~dz HdzdNgHL$~dz^ HdzdN:HL$~dz1 HdzdN HL$~pdz HpdzdNHL$~Pdz HPdzdNHL$~0dz H0dzdNHL$~dz} HdzdNYHL$~ƳP HƳdN,HL$~Ƴ# HƳdNHL$~Ƴ HƳdNHL$x~Ƴ HƳdNHL$p~pƳ HpƳdNxHL$h~PƳo HPƳdNKHL$`~0ƳB H0ƳdNHL$X~Ƴ HƳdNHL$P~ų HųdNHL$H~ų HųdNHL$@~ų HųdNjHL$8~ųa HųdN=HT$мwijHT$wijHT$wijHT$wijHT$w ijyHT$w(ijeHT$w0ijQHT$w8ij=HT$w@ij)HT$wHijHT$wPijHT$wXijHT$w`ijHT$whijHT$wpijHT$wxijHT$wijHT$xijuHT$xijaHT$xijMHT$ xij9HT$xij%HT$xijHT$xijHT$xijHT$ xijHT$$xijHT$(xijHT$,xijHT$0xijHT$4xijqHT$8xij]HT$4*   !"#v$l11H)HijHijHH3H~HgtHt$HD$~HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1qH|AHKpHuKp=1oHZKp*=0oJ*HL$~pf HpdNBHL$~P9 HPdNHL$~0 H0dNHL$~ HdNHL$~ HdNHL$ء~ HdNaHL$С~X HdN4HL$ȡ~+ HdNHL$~p HpdNHL$~P HPdNHL$~0 H0dNHL$~w HdNSHL$~J HdN&HL$~ HdNHL$~ HdNHL$~ HdNHL$~p HpdNrHL$x~Pi HPdNEHL$p~0< H0dNHL$h~ HdNHL$`~ HdNHL$X~ HdNHL$P~ HdNdHL$H~[ HdN7HL$@~p. HpdN HL$8~P HPdNHL$0~0 H0dNHL$(~ HdNHL$ ~z HdNVHL$~M HdN)HL$~ HdNHL$~ HdNHL$~p HpdNHL$~P HPdNuHL$~0l H0dNHHL$~? HdNHL$~ HdNHL$ؠ~ HdNHL$Р~ HdNHL$Ƞ~ HdNgHL$~p^ HpdN:HL$~P1 HPdN HL$~0 H0dNHL$~ HdNHL$~ HdNHL$~} HdNYHL$~P HdN,HL$~# HdNHL$~p HpdNHL$x~P HPdNHL$p~0 H0dNxHL$h~o HdNKHL$`~B HdNHL$X~ HdNHL$P~ HdNHL$H~ HdNHL$@~p HpdNjHL$8~Pa HPdN=HL$0~04 H0dNHL$(~ HdNHL$ ~ HdNHL$~ HdNHL$~ HdN\HL$~S HdN/HL$~p& HpdNHL$~P HPdNHL$~0 H0dNHL$~ HdN{HL$~r HdNNHL$؟~E HdN!HL$П~ HdNHL$ȟ~ HdNHL$~p HpdNHL$~P HPdNmHL$~0d H0dN@HL$~7 HdNHL$~ HdNHL$~ HdNHL$~ HdNHL$~ HdN_HL$~pV HpdN2HL$x~P) HPdNHL$p~0 H0dNHL$h~Ͽ HdNHL$`~袿 HdN~HL$X~u HdNQHL$P~H HdN$HL$H~ HdNHL$@~p HpdNHL$8~P HPdNHL$0~0蔾 H0dNpHL$(~g HdNCHL$ ~: HdNHL$~ HdNHL$~ HdNHL$~賽 HdNHL$~p膽 HpdNbHL$~PY HPdN5HL$~0, H0dNHL$~ HdNHL$~Ҽ HdNHL$؞~襼 HdNHL$О~x HdNTHL$Ȟ~K HdN'HL$~p HpdNHL$~P HPdNHT$мw߳YHT$w߳EHT$w߳1HT$w߳HT$w߳ HT$w߳HT$w߳HT$w߳HT$wHT$wHT$wHT$w}HT$w iHT$w(UHT$w0AHT$w8-HT$w@HT$xHHT$xPHT$xXHT$ x`HT$xhHT$xpHT$xxHT$xyHT$ xeHT$$xQHT$(x=HT$,x)HT$0xHT$4xHT$8xHT$4*   !"#v$l11H)H߳H߳HH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S` H dH%(HD$1H` |A=蘵H7p茵H7p@=oH7p*=oJ*HL$@~0 H0 dNҮHL$8~ ɞ H dN襮HL$0~ 蜞 H dNxHL$(~ o H dNKHL$ ~ B H dNHL$~  H dNHL$~p Hp dNĭHL$~P 軝 HP dN藭HL$~0 莝 H0 dNjHL$~ a H dN=HL$~4 HdNHL$~ HdNHL$~ڜ HdN趬HL$ؼ~譜 HdN艬HL$м~p耜 HpdN\HL$ȼ~PS HPdN/HL$~0& H0dNHL$~ HdNիHL$~̛ HdN訫HL$~蟛 HdN{HL$~r HdNNHL$~E HdN!HL$~p HpdNHL$~P HPdNǪHL$~0辚 H0dN蚪HL$x~葚 HdNmHL$p~d HdN@HL$h~7 HdNHL$`~ HdNHL$X~ݙ HdN蹩HL$P~p谙 HpdN茩HL$H~P胙 HPdN_HL$@~0V H0dN2HL$8~) HdNHL$0~ HdNبHL$(~Ϙ HdN諨HL$ ~袘 HdN~HL$~u HdNQHL$~pH HpdN$HL$~P HPdNHL$~0 H0dNʧHL$~ HdN蝧HL$~蔗 HdNpHL$~g HdNCHL$~: HdNHL$ػ~ HdNHL$л~p HpdN輦HL$Ȼ~P賖 HPdN菦HL$~0膖 H0dNbHL$~Y HdN5HL$~, HdNHL$~ HdNۥHL$~ҕ HdN讥HL$~襕 HdN聥HL$~px HpdNTHL$~PK HPdN'HL$~0 H0dNHL$x~ HdNͤHL$p~Ĕ HdN蠤HL$h~藔 HdNsHL$`~j HdNFHL$X~= HdNHL$P~p HpdNHL$H~P HPdN迣HL$@~0趓 H0dN蒣HL$8~艓 HdNeHL$0~\ HdN8HL$(~/ HdN HL$ ~ HdNޢHL$~Ւ HdN豢HL$~p訒 HpdN脢HL$~P{ HPdNWHL$~0N H0dN*HL$~! HdNHL$~ HdNСHL$~Ǒ HdN裡HL$~蚑 HdNvHL$غ~m HdNIHL$к~p@ HpdNHL$Ⱥ~P HPdNHL$~0 H0dN HL$~蹐 HdN蕠HL$~茐 HdNhHL$~_ HdN;HL$~2 HdNHL$~ HdNHL$~p؏ HpdN负HL$~P諏 HPdN臟HL$~0~ H0dNZHL$x~Q HdN-HL$p~$ HdNHL$h~ HdNӞHL$`~ʎ HdN覞HL$X~蝎 HdNyHL$P~pp HpdNLHL$H~PC HPdNHL$@~0 H0dNHL$8~ HdNŝHL$0~輍 HdN蘝HL$(~菍 HdNkHL$ ~b HdN>HL$~5 HdNHL$~p HpdNHL$~Pی HPdN跜HL$~0讌 H0dN芜HL$~职 HdN]HT$мwHT$wբHT$wHT$w譢HT$w虢HT$w腢HT$wqHT$w]HT$wIHT$w5HT$w!HT$w HT$wHT$wHT$wѡHT$w轡HT$w詡HT$x蕡HT$x聡HT$xmHT$ x YHT$x(EHT$x01HT$x8HT$x@ HT$ xHHT$$xPHT$(xX͠HT$,x`蹠HT$0xh襠HT$4xp葠HT$8xx}HT$HL$~5z HdNHL$~`z H`dNHL$~@y H@dN跉HL$~ y H dN芉HL$~y HdN]HL$~Ty HdN0HL$~'y HdNHL$~x HdNֈHL$x~x HdN詈HL$p~`x H`dN|HL$h~@sx H@dNOHL$`~ Fx H dN"HL$X~x HdNHL$P~w HdNȇHL$H~w HdN蛇HL$@~w HdNnHL$8~ew HdNAHL$0~`8w H`dNHL$(~@ w H@dNHL$ ~ v H dN躆HL$~v HdN荆HL$~v HdN`HL$~Wv HdN3HL$~*v HdNHL$~u HdNمHL$~`u H`dN謅HL$~@u H@dNHL$~ vu H dNRHL$ض~Iu HdN%HL$ж~u HdNHL$ȶ~t HdN˄HD$dH3%(uZH [ÿ@Բ)n H@ԲkN萄PԲn蚘 HPԲkNfUt1H)HHt1HH3H~HgtHt$HD$[HD$ͺH5~맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H̀HHH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S &H dH%(HD$1葃H &|A(H)$pH$ps=1nH#p*=nJ*HL$~%o H%dNbHL$x~%Yo H%dN5HL$p~%,o H%dNHL$h~%n H%dN~HL$`~p%n Hp%dN~HL$X~P%n HP%dN~HL$P~0%xn H0%dNT~HL$H~%Kn H%dN'~HL$@~$n H$dN}HL$8~$m H$dN}HL$0~$m H$dN}HL$(~$m H$dNs}HL$ ~p$jm Hp$dNF}HL$~P$=m HP$dN}HL$~0$m H0$dN|HL$~$l H$dN|HL$~#l H#dN|HL$~#l H#dNe|HL$~#\l H#dN8|HL$~#/l H#dN |HL$~p#l Hp#dN{HL$~P#k HP#dN{HL$~0#k H0#dN{HL$~#{k H#dNW{HL$~"Nk H"dN*{HL$~"!k H"dNzHL$~"j H"dNzHL$~"j H"dNzHL$~p"j Hp"dNvzHL$~P"mj HP"dNIzHL$~0"@j H0"dNzHL$~"j H"dNyHL$~!i H!dNyHL$x~!i H!dNyHL$p~!i H!dNhyHL$h~!_i H!dN;yHL$`~p!2i Hp!dNyHL$X~P!i HP!dNxHL$P~0!h H0!dNxHL$H~!h H!dNxHL$@~ ~h H dNZxHL$8~ Qh H dN-xHL$0~ $h H dNxHL$(~ g H dNwHL$ ~p g Hp dNwHL$~P g HP dNywHL$~0 pg H0 dNLwHL$~ Cg H dNwHL$~g HdNvHL$~f HdNvHL$~f HdNvHL$~f HdNkvHL$~pbf HpdN>vHL$~P5f HPdNvHL$~0f H0dNuHL$~e HdNuHL$~e HdNuHL$~e HdN]uHL$~Te HdN0uHL$~'e HdNuHL$~pd HpdNtHL$~Pd HPdNtHL$~0d H0dN|tHL$~sd HdNOtHL$~Fd HdN"tHL$x~d HdNsHL$p~c HdNsHL$h~c HdNsHL$`~pc HpdNnsHL$X~Pec HPdNAsHL$P~08c H0dNsHL$H~ c HdNrHL$@~b HdNrHL$8~b HdNrHL$0~b HdN`rHL$(~Wb HdN3rHL$ ~p*b HpdNrHL$~Pa HPdNqHL$~0a H0dNqHL$~a HdNqHL$~va HdNRqHL$~Ia HdN%qHL$~a HdNpHL$~` HdNpHL$~p` HpdNpHL$~P` HPdNqpHL$~0h` H0dNDpHL$~;` HdNpHL$~` HdNoHL$~_ HdNoHL$~_ HdNoHL$~_ HdNcoHL$~pZ_ HpdN6oHL$~P-_ HPdN oHL$~0_ H0dNnHL$~^ HdNnHL$~^ HdNnHL$x~y^ HdNUnHL$p~L^ HdN(nHL$h~^ HdNmHL$`~p] HpdNmHL$X~P] HPdNmHL$P~0] H0dNtmHL$H~k] HdNGmHL$@~>] HdNmHL$8~] HdNlHT$мw@ysHT$wHesHT$wPQsHT$wX=sHT$w`)sHT$whsHT$wpsHT$wxrHT$wrHT$wrHT$wrHT$wrHT$wrHT$wurHT$warHT$wMrHT$w9rHT$x%rHT$xrHT$xqHT$ xqHT$xqHT$xqHT$xqHT$xqHT$ xqHT$$xqqHT$(x]qHT$,x IqHT$0x(5qHT$4x0!qHT$8x8 qHT$cHL$~@5S H@dNcHL$~ S H dNbHL$~R HdNbHL$~R HdNbHL$~R HdN]bHL$~TR HdN0bHL$~'R HdNbHL$~`Q H`dNaHL$~@Q H@dNaHL$~ Q H dN|aHL$~sQ HdNOaHL$p~FQ HdN"aHL$`~Q HdN`HL$P~P HdN`HL$@~P HdN`HL$8~`P H`dNn`HL$0~@eP H@dNA`HL$(~ 8P H dN`HL$ ~ P HdN_HL$~O HdN_HL$~O HdN_HL$~O HdN`_HL$~WO HdN3_HL$~`*O H`dN_HL$~@N H@dN^HL$~ N H dN^HL$~N HdN^HL$~vN HdNR^HL$~IN HdN%^HL$~N HdN]HL$~M HdN]HL$~`M H`dN]HL$~@M H@dNq]HL$~ hM H dND]HL$x~;M HdN]HL$p~M HdN\HL$h~L HdN\HL$`~L HdN\HL$P~L HdNc\HL$@~`ZL H`dN6\HL$8~@-L H@dN \HL$0~ L H dN[HL$(~K HdN[HL$ ~K HdN[HL$~yK HdNU[HL$~LK HdN([HL$~K HdNZHL$~`J H`dNZHL$~@J H@dNZHL$~ J H dNtZHL$~kJ HdNGZHL$~ >J H dNZHL$~ J H dNYHL$~ I H dNYHL$~ I H dNYHL$~` I H` dNfYHL$~@ ]I H@ dN9YHL$~ 0I H dN YHL$~ I H dNXHL$~ H H dNXHL$~ H H dNXHL$~ |H H dNXXHL$~ OH H dN+XHL$~` "H H` dNWHL$x~@ G H@ dNWHL$p~ G H dNWHL$h~ G H dNwWHL$`~ nG H dNJWHL$X~ AG H dNWHL$P~ G H dNVHL$H~ F H dNVHL$@~` F H` dNVHL$8~@ F H@ dNiVHL$0~ `F H dN4*   !"#v$l11H)H@H@HH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SBH dH%(HD$1!THB|A]PVHpVHp`D=nHrp>,=n,HT$}AVHA AOHL$~A? HAdNOHL$~A? HAdNOHL$~A? HAdNpOHL$~pAg? HpAdNCOHL$~PA:? HPAdNOHL$~0A ? H0AdNNHL$~A> HAdNNHL$~@> H@dNNHL$~@> H@dNbNHL$~@Y> H@dN5NHL$~@,> H@dNNHL$~p@= Hp@dNMHL$~P@= HP@dNMHL$~0@= H0@dNMHL$~@x= H@dNTMHL$~?K= H?dN'MHL$~?= H?dNLHL$~?< H?dNLHL$~?< H?dNLHL$~p?< Hp?dNsLHL$x~P?j< HP?dNFLHL$p~0?=< H0?dNLHL$h~?< H?dNKHL$`~>; H>dNKHL$X~>; H>dNKHL$P~>; H>dNeKHL$H~>\; H>dN8KHL$@~p>/; Hp>dN KHL$8~P>; HP>dNJHL$0~0>: H0>dNJHL$(~>: H>dNJHL$ ~={: H=dNWJHL$~=N: H=dN*JHL$~=!: H=dNIHL$~=9 H=dNIHL$~p=9 Hp=dNIHL$~P=9 HP=dNvIHL$~0=m9 H0=dNIIHL$~=@9 H=dNIHL$~<9 H<dNHHL$~<8 H<dNHHL$~<8 H<dNHHL$~<8 H<dNhHHL$~p<_8 Hp<dN;HHL$~P<28 HP<dNHHL$~0<8 H0<dNGHL$~<7 H<dNGHL$~;7 H;dNGHL$~;~7 H;dNZGHL$~;Q7 H;dN-GHL$~;$7 H;dNGHL$~p;6 Hp;dNFHL$x~P;6 HP;dNFHL$p~0;6 H0;dNyFHL$h~;p6 H;dNLFHL$`~:C6 H:dNFHL$X~:6 H:dNEHL$P~:5 H:dNEHL$H~:5 H:dNEHL$@~p:5 Hp:dNkEHL$8~P:b5 HP:dN>EHL$0~0:55 H0:dNEHL$(~:5 H:dNDHL$ ~94 H9dNDHL$~94 H9dNDHL$~94 H9dN]DHL$~9T4 H9dN0DHL$~p9'4 Hp9dNDHL$~P93 HP9dNCHL$~093 H09dNCHL$~93 H9dN|CHL$~8s3 H8dNOCHL$~8F3 H8dN"CHL$~83 H8dNBHL$~82 H8dNBHL$~p82 Hp8dNBHL$~P82 HP8dNnBHL$~08e2 H08dNABHL$~882 H8dNBHL$~7 2 H7dNAHL$~71 H7dNAHL$~71 H7dNAHL$~71 H7dN`AHL$~p7W1 Hp7dN3AHL$x~P7*1 HP7dNAHL$p~070 H07dN@HL$h~70 H7dN@HL$`~60 H6dN@HL$X~6v0 H6dNR@HL$P~6I0 H6dN%@HL$H~60 H6dN?HL$@~p6/ Hp6dN?HL$8~P6/ HP6dN?HT$y4*FHT$y4FHT$y4FHT$y4EHT$y4EHT$y4EHT$y4EHT$z4EHT$ z5EHT$z5vEHT$z5bEHT$(z5NEHT$2z 5:EHT$HT$^{P4>HT$h{X4>HT$r{`4>HT$|{h4>HT${p4>HT${x4>HT${4q>HT${4]>H1 6V7HT$}28>H2 A7HT$|@1>HT$`|H1=HT$|P1=HT$0|X1=HT$|`1=HT$|h1=HT$h|p1=HT$|x1=HT$8|1p=HT$|1\=HT$|1H=HT$p|14=HT$|1 =HT$@|1 =HT$|12HL$~ 05" H 0dN2HL$~0" H0dN1HL$~/! H/dN1HL$~/! H/dN1HL$~/! H/dN]1HL$~/T! H/dN01HL$~`/'! H`/dN1HL$~@/ H@/dN0HL$~ / H /dN0HL$~/ H/dN|0HL$~.s H.dNO0HL$~.F H.dN"0HL$p~. H.dN/HL$`~. H.dN/HL$P~`. H`.dN/HL$@~@. H@.dNn/HL$8~ .e H .dNA/HL$0~.8 H.dN/HL$(~-  H-dN.HL$ ~- H-dN.HL$~- H-dN.HL$~- H-dN`.HL$~`-W H`-dN3.HL$~@-* H@-dN.HL$~ - H -dN-HL$~- H-dN-HL$~, H,dN-HL$~,v H,dNR-HL$~,I H,dN%-HL$~, H,dN,HL$~`, H`,dN,HL$~@, H@,dN,HL$~ , H ,dNq,HL$~,h H,dND,HL$~+; H+dN,HL$x~+ H+dN+HL$p~+ H+dN+HL$h~+ H+dN+HL$`~`+ H`+dNc+HL$P~@+Z H@+dN6+HL$@~ +- H +dN +HL$8~+ H+dN*HL$0~* H*dN*HL$(~* H*dN*HL$ ~*y H*dNU*HL$~*L H*dN(*HL$~`* H`*dN)HL$~@* H@*dN)HL$~ * H *dN)HL$~* H*dNt)HL$~)k H)dNG)HL$~)> H)dN)HL$~) H)dN(HL$~) H)dN(HL$~`) H`)dN(HL$~@) H@)dNf(HL$~ )] H )dN9(HL$~)0 H)dN (HL$~( H(dN'HL$~( H(dN'HL$~( H(dN'HL$~(| H(dNX'HL$~`(O H`(dN+'HL$~@(" H@(dN&HL$~ ( H (dN&HL$x~( H(dN&HL$p~' H'dNw&HL$h~'n H'dNJ&HL$`~'A H'dN&HL$X~' H'dN%HL$P~`' H`'dN%HL$H~@' H@'dN%HL$@~ ' H 'dNi%HL$8~'` H'dN<%HL$0~&3 H&dN%HL$(~& H&dN$HL$ ~& H&dN$HL$~& H&dN$HL$~`& H`&dN[$HL$~@&R H@&dN.$HD$dH3%(uZH [ÿ@Բvnw; H@ԲkN#PԲjvn7 HPԲkN#/11H)H4H4t8HH3H~HgtHt$HD$HD$ͺ/붺0H1H)H@1H@1tHH3H~HgtHt$HD$HD$ͺ붺 믺 먺 롺 뚺 듺댺녺{qg]SI?5+!+,-.#$}%s&i'_(U)K*A7-# !"%1H)H3H3HH3H~HgtHt$HD$HD$ɺ&벺'뫺(뤺)띺*떺+돺,눺-끺.w/m0c1Y1 v lbXND:zpf\RH> 4!*" #$ %&'()*+,-./011ukaWMC9 / %   {qg]S I!?"5#+$!f.S ^H dH%(HD$1 H ^|A-#Ho|#Huo0=onHZo*=uonJ*HL$] H]dNHL$] H]dNHL$] H]dNhHL$]_ H]dN;HL$p]2 Hp]dNHL$P] HP]dNHL$0] H0]dNHL$] H]dNHL$\~ H\dNZHL$x\Q H\dN-HL$p\$ H\dNHL$`\ H\dNHL$Pp\ Hp\dNHL$HP\ HP\dNyHL$@0\p H0\dNLHL$8\C H\dNHL$0[ H[dNHL$([ H[dNHL$ [ H[dNHL$[ H[dNkHL$p[b Hp[dN>HL$P[5 HP[dNHL$0[ H0[dNHL$[ H[dNHL$Z HZdNHL$Z HZdN]HL$ZT HZdN0HL$Z' HZdNHL$pZ HpZdNHL$PZ HPZdNHL$0Z H0ZdN|HL$pZs HZdNOHL$`YF HYdN"HL$XY HYdNHL$PY HYdNHL$HY HYdNHL$@pY HpYdNnHL$8PYe HPYdNAHL$00Y8 H0YdNHL$(Y  HYdNHL$ X HXdNHL$X HXdNHL$X HXdN`HL$XW HXdN3HL$pX* HpXdNHL$~PX HPXdNHL$~0X H0XdNHL$~X HXdNHL$~Wv HWdNRHL$~WI HWdN%HL$~W HWdNHL$~W HWdNHL$~pW HpWdNHL$~PW HPWdNqHL$~0Wh H0WdNDHL$~W; HWdNHL$~V HVdNHL$~V HVdNHL$~V HVdNHL$x~V HVdNcHL$p~pVZ HpVdN6HL$h~PV- HPVdN HL$`~0V H0VdNHL$X~V HVdNHL$P~U HUdNHL$H~Uy HUdNUHL$@~UL HUdN(HL$8~U HUdNHL$0~pU HpUdNHL$(~PU HPUdNHL$ ~0U H0UdNtHL$~Uk HUdNGHL$~T> HTdNHL$~T HTdNHL$~T HTdNHL$~T HTdNHL$~pT HpTdNfHL$~PT] HPTdN9HL$~0T0 H0TdN HL$~T HTdNHL$~S HSdNHL$~S HSdNHL$~S| HSdNXHL$~SO HSdN+HL$~pS" HpSdN HL$~PS HPSdN HL$~0S H0SdN HL$~S HSdNw HL$~Rn HRdNJ HL$~RA HRdN HL$~R HRdN HL$x~R HRdN HL$p~pR HpRdN HL$h~PR HPRdNi HL$`~0R` H0RdN< HL$X~R3 HRdN HL$P~Q HQdN HL$H~Q HQdN HL$@~Q HQdN HL$8~Q HQdN[ HL$0~pQR HpQdN. HL$(~PQ% HPQdN HL$ ~0Q H0QdN HL$~Q HQdN HL$~P HPdNz HL$~Pq HPdNM HL$~PD HPdN HL$~P HPdN HL$~pP HpPdN HL$~PP HPPdN HL$~0P H0PdNl HL$~Pc HPdN? HL$~O6 HOdN HL$~O HOdNHL$~O HOdNHL$~O HOdNHL$~pO HpOdN^HL$~POU HPOdN1HL$~0O( H0OdNHL$~O HOdNHL$~N HNdNHL$~N HNdN}HL$~Nt HNdNPHL$x~NG HNdN#HL$p~pN HpNdNHL$h~PN HPNdNHL$`~0N H0NdNHL$X~N HNdNoHL$P~Mf HMdNBHL$H~M9 HMdNHL$@~M HMdNHL$8~M HMdNHL$0~pM HpMdNHL$(~PM HPMdNaHL$ ~0MX H0MdN4HL$~M+ HMdNHL$~L HLdNHL$~L HLdNHL$~L HLdNHL$~Lw HLdNSHL$~pLJ HpLdN&HL$~PL HPLdNHL$~0L H0LdNHL$~L HLdNHL$~K HKdNrHL$~Ki HKdNEHL$~K< HKdNHL$~K HKdNHL$~pK HpKdNHL$~PK HPKdNHL$~0K H0KdNdHL$~K[ HKdN7HL$~J. HJdN HL$~J HJdNHL$~J HJdNHL$x~J HJdNHL$p~pJz HpJdNVHL$h~PJM HPJdN)HL$`~0J H0JdNHL$X~J HJdNHL$P~I HIdNHL$H~I HIdNuHL$@~Il HIdNHHL$8~I? HIdNHL$0~pI HpIdNHL$(~PI HPIdNHL$ ~0I H0IdNHL$~I HIdNgHL$~H^ HHdN:HL$~H1 HHdN HL$~H HHdNHL$~H HHdNHL$~pH HpHdNHL$~PH} HPHdNYHL$~0HP H0HdN,HL$~H# HHdNHL$~G HGdNHL$~G HGdNHL$~G HGdNxHL$~Go HGdNKHL$~pGB HpGdNHL$~PG HPGdNHL$~0G H0GdNHL$~G HGdNHL$~F HFdNjHL$~Fa HFdN=HL$~F4 HFdNHL$x~F HFdNHL$p~pF HpFdNHL$h~PF HPFdNHL$`~0F H0FdN\HL$X~FS HFdN/HL$P~E& HEdNHL$H~E HEdNHT$мw@DaHT$wHDMHT$wPD9HT$wXD%HT$w`DHT$whDHT$wpDHT$wxDHT$wDHT$wDHT$wDHT$wDHT$wDqHT$wD]HT$wDIHT$wD5HT$wD!HT$xD HT$xDHT$xDHT$ xDHT$xDHT$xDHT$xDHT$xEHT$ xEmHT$$xEYHT$(xEEHT$,x E1HT$0x(EHT$4x0E HT$8x8EHT$4*   !"#v$l11H)H@DH@DHH3H~HgtHt$HD$螽HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S zH dH%(HD$1H z|AHo Ho=!@nHo*=@nJ*HL$yv HydNRHL$yI HydN%HL$y HydNHL$y HydNHL$py HpydNHL$Py HPydNqHL$0yh H0ydNDHL$y; HydNHL$x HxdNHL$x HxdNHL$x HxdNHL$x HxdNcHL$pxZ HpxdN6HL$Px- HPxdN HL$0x H0xdNHL$xx HxdNHL$pw HwdNHL$hwy HwdNUHL$`wL HwdN(HL$Pw HwdNHL$@pw HpwdNHL$0Pw HPwdNHL$ 0w H0wdNtHL$wk HwdNGHL$v> HvdNHL$v HvdNHL$v HvdNHL$v HvdNHL$pv HpvdNfHL$Pv] HPvdN9HL$0v0 H0vdN HL$v HvdNHL$u HudNHL$u HudNHL$u| HudNXHL$uO HudN+HL$pu" HpudNHL$xPu HPudNHL$p0u H0udNHL$hu HudNwHL$`tn HtdNJHL$XtA HtdNHL$Pt HtdNHL$Ht HtdNHL$@pt HptdNHL$8Pt HPtdNiHL$00t` H0tdN4*   !"#v$l11H)H@`H@`HH3H~HgtHt$HD$ޜHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S@H dH%(HD$1H@|AMHoHoP=nHo+=n+*={knHloK+=_knHLo`*=?knH,oX*HL$HoP貭 HdN莽HL$Е腭 HЕdNaHL$X HdN4HL$+ HdNHL$p HpdNڼHL$PѬ HPdN譼HL$0褬 H0dN耼HL$w HdNSHL$J HdN&HL$Д HДdNHL$ HdN̻HL$ë HdN蟻HL$p薫 HpdNrHL$Pi HPdNEHL$0< H0dNHL$x HdNHL$p HdN辺HL$hГ赪 HГdN葺HL$`航 HdNdHL$P[ HdN7HL$@p. HpdN HL$0P HPdNݹHL$ 0ԩ H0dN谹HL$觩 HdN胹HL$z HdNVHL$ВM HВdN)HL$ HdNHL$ HdNϸHL$pƨ HpdN袸HL$P虨 HPdNuHL$0l H0dNHHL$? HdNHL$ HdNHL$Б HБdNHL$踧 HdN蔷HL$苧 HdNgHL$p^ HpdN:HL$xP1 HPdN HL$p0 H0dNHL$hצ HdN賶HL$`誦 HdN膶HL$XА} HАdNYHL$PP HdN,HL$H# HdNHL$@p HpdNҵHL$8Pɥ HPdN襵HL$00蜥 H0dNxHL$ o HdNKHL$B HdNHL$Џ HЏdNHL$ HdNĴHL$軤 HdN藴HL$p莤 HpdNjHL$Pa HPdN=HL$04 H0dNHL$ HdNHL$ڣ HdN足HL$Ў譣 HЎdN艳HL$耣 HdN\HL$S HdN/HL$p& HpdNHL$P HPdNղHL$0̢ H0dN訲HL$蟢 HdN{HL$r HdNNHL$ЍE HЍdN!HL$ HdNHL$x HdNDZHL$pp辡 HpdN蚱HL$hP葡 HPdNmHL$`0d H0dN@HL$X7 HdNHL$P HdNHL$HЌݠ HЌdN蹰HL$@谠 HdN茰HL$8胠 HdN_HL$0pV HpdN2HL$(P) HPdNHL$ 0 H0dNدHL$ϟ HdN諯HL$袟 HdN~HL$Ћu HЋdNQHL$H HdN$HL$ HdNHL$p HpdNʮHL$P HPdN蝮HL$0蔞 H0dNpHL$g HdNCHL$: HdNHL$Њ HЊdNHL$ HdN輭HL$賝 HdN菭HL$p膝 HpdNbHL$PY HPdN5HL$0, H0dNHL$ HdN۬HL$Ҝ HdN讬HL$Љ襜 HЉdN聬HL$x HdNTHL$xK HdN'HL$pp HpdNHL$hP HPdNͫHL$`0ě H0dN蠫HL$X藛 HdNsHL$Pj HdNFHL$HЈ= HЈdNHL$@ HdNHL$8 HdN迪HL$0p趚 HpdN蒪HL$(P艚 HPdNeHL$ 0\ H0dN8HL$/ HdN HL$ HdNީHL$Їՙ HЇdN豩HL$訙 HdN脩HL${ HdNWHL$pN HpdN*HL$P! HPdNHL$0 H0dNШHL$ǘ HdN裨HL$蚘 HdNvHL$Іm HІdNIHL$@ HdNHL$ HdNHL$p HpdN§HL$P蹗 HPdN蕧HL$0茗 H0dNhHL$_ HdN;HL$2 HdNHL$Ѕ HЅdNHL$ؖ HdN账HL$x論 HdN臦HL$pp~ HpdNZHL$hPQ HPdN-HL$`0$ H0dNHL$X HdNӥHL$Pʕ HdN覥HL$HЄ蝕 HЄdNyHL$@p HdNLHL$8C HdNHL$0p HpdNHL$(P HPdNŤHL$ 0輔 H0dN蘤HL$菔 HdNkHL$b HdN>HL$Ѓ5 HЃdNHL$ HdNHL$ۓ HdN跣HL$p讓 HpdN芣HL$P聓 HPdN]HL$0T H0dN0HL$' HdNHL$ HdN֢HL$Ђ͒ HЂdN詢HL$蠒 HdN|HL$s HdNOHL$pF HpdN"HL$P HPdNHL$0 H0dNȡHL$近 HdN蛡HL$蒑 HdNnHL$Ёe HЁdNAHL$8 HdNHL$x HdNHL$ppސ HpdN躠HL$hP豐 HPdN荠HL$`0脐 H0dN`HL$XW HdN3HL$P* HdNHL$HЀ HЀdNٟHL$@Џ HdN謟HL$8裏 HdNHL$0pv HpdNRHL$(PI HPdN%HL$ 0 H0dNHL$ HdN˞HL$Ž HdN螞HL$蕎 HdNqHL$h HdNDHL$; HdNHL$p HpdNHL$P HPdN轝HL$0贍 H0dN萝HL$臍 HdNcHL$~Z H~dN6HL$~- H~dN HL$~ H~dNܜHL$~ӌ H~dN诜HL$p~覌 Hp~dN肜HL$P~y HP~dNUHL$0~L H0~dN(HL$~ H~dNHL$} H}dNΛHL$}ŋ H}dN衛HT$мw@|-HT$wH|HT$wP|HT$wX|HT$w`|ݡHT$wh|ɡHT$wp|赡HT$wx|衡HT$w|荡HT$w|yHT$w|eHT$w|QHT$w|=HT$w|)HT$w|HT$w|HT$w|HT$x|٠HT$x|ŠHT$x|豠HT$ x|蝠HT$x|艠HT$x|uHT$x|aHT$x}MHT$ x}9HT$$x}%HT$(x}HT$,x }HT$0x(}HT$4x0}՟HT$8x8}HT$ HdNNHL$Dp> HpdNNHL$DP> HPdNdNHL$D0[> H0dN7NHL$D.> HdN NHL$D> HdNMHL$Dи= HиdNMHL$D= HdNMHL$xDz= HdNVMHL$pDpM= HpdN)MHL$hDP = HPdNLHL$`D0< H0dNLHL$XD< HdNLHL$PD< HdNuLHL$HDзl< HзdNHLc@=mHMo=mH-o`=xmH oXt|=TmHoP=4m=m]= m=muH/pRmKHD$dH3%(xHÿ/-=r/CHPRWKO /<) /BHXR"K(/<(/BH` RJH/`RmJ@Բ,=m,HL$T޴9 H޴dNbIHL$Tp޴Y9 Hp޴dN5IHL$TP޴,9 HP޴dNIHL$T0޴8 H0޴dNHHL$T޴8 H޴dNHHL$Tݴ8 HݴdNHHL$Tݴx8 HݴdNTHHL$TݴK8 HݴdN'HHL$Tݴ8 HݴdNGHL$Tpݴ7 HpݴdNGHL$TPݴ7 HPݴdNGHL$pT0ݴ7 H0ݴdNsGHL$`Tݴj7 HݴdNFGHL$XTܴ=7 HܴdNGHL$PTܴ7 HܴdNFHL$HTܴ6 HܴdNFHL$@Tܴ6 HܴdNFHL$8Tpܴ6 HpܴdNeFHL$0TPܴ\6 HPܴdN8FHL$ T0ܴ/6 H0ܴdN FHL$Tܴ6 HܴdNEHL$T۴5 H۴dNEHL$S۴5 H۴dNEHL$S۴{5 H۴dNWEHL$S۴N5 H۴dN*EHL$Sp۴!5 Hp۴dNDHL$SP۴4 HP۴dNDHL$S0۴4 H0۴dNDHL$S۴4 H۴dNvDHL$Sڴm4 HڴdNIDHL$Sڴ@4 HڴdNDHL$Sڴ4 HڴdNCHL$pSڴ3 HڴdNCHL$hSpڴ3 HpڴdNCHL$`SPڴ3 HPڴdNhCHL$XS0ڴ_3 H0ڴdN;CHL$PSڴ23 HڴdNCHL$HSٴ3 HٴdNBHL$@Sٴ2 HٴdNBHL$8Sٴ2 HٴdNBHL$0Sٴ~2 HٴdNZBHL$(SpٴQ2 HpٴdN-BHL$ SPٴ$2 HPٴdNBHL$S0ٴ1 H0ٴdNAHL$Sٴ1 HٴdNAHL$Sش1 HشdNyAHL$Sشp1 HشdNLAHL$RشC1 HشdNAHL$Rش1 HشdN@HL$Rpش0 HpشdN@HL$RPش0 HPشdN@HL$R0ش0 H0شdNk@HL$Rشb0 HشdN>@HL$R״50 H״dN@HL$R״0 H״dN?HL$R״/ H״dN?HL$R״/ H״dN?HL$Rp״/ Hp״dN]?HL$RP״T/ HP״dN0?HL$R0״'/ H0״dN?HL$R״. H״dN>HL$Rִ. HִdN>HL$xRִ. HִdN|>HL$pRִs. HִdNO>HL$hRִF. HִdN">HL$`Rpִ. HpִdN=HL$XRPִ- HPִdN=HL$PR0ִ- H0ִdN=HL$HRִ- HִdNn=HL$@Rմe- HմdNA=HL$8Rմ8- HմdN=HL$0Rմ - HմdN6HL$Qд5& HдdN6HL$Pд& HдdN5HL$Pд% HдdN5HL$Pд% HдdN5HL$Ppд% HpдdN]5HL$PPдT% HPдdN05HL$P0д'% H0дdN5HL$Pд$ HдdN4HL$Pϴ$ HϴdN4HL$Pϴ$ HϴdN|4HL$Pϴs$ HϴdNO4HL$PϴF$ HϴdN"4HL$Ppϴ$ HpϴdN3HL$PPϴ# HPϴdN3HL$P0ϴ# H0ϴdN3HL$Pϴ# HϴdNn3HL$Pδe# HδdNA3HL$xPδ8# HδdN3HL$pPδ # HδdN2HL$hPδ" HδdN2HL$`Ppδ" HpδdN2HL$XPPδ" HPδdN`2HL$PP0δW" H0δdN32HL$HPδ*" HδdN2HL$@Pʹ! HʹdN1HL$8Pʹ! HʹdN1HL$0Pʹ! HʹdN1HL$(Pʹv! HʹdNR1HL$ PpʹI! HpʹdN%1HL$PPʹ! HPʹdN0HL$P0ʹ H0ʹdN0HL$Pʹ HʹdN0HL$P̴ H̴dNq0HL$O̴h H̴dND0HL$O̴; H̴dN0HL$O̴ H̴dN/HL$Op̴ Hp̴dN/HL$OP̴ HP̴dN/HL$O0̴ H0̴dNc/HL$O̴Z H̴dN6/HL$O˴- H˴dN /HL$O˴ H˴dN.HL$O˴ H˴dN.HL$O˴ H˴dN.HL$Op˴y Hp˴dNU.HL$OP˴L HP˴dN(.HL$O0˴ H0˴dN-HL$O˴ H˴dN-HL$Oʴ HʴdN-HL$xOʴ HʴdNt-HL$pOʴk HʴdNG-HL$hOʴ> HʴdN-HL$`Opʴ HpʴdN,HL$XOPʴ HPʴdN,HL$PO0ʴ H0ʴdN,HL$HOʴ HʴdNf,HL$@Oɴ] HɴdN9,HL$8Oɴ0 HɴdN ,HL$0Oɴ HɴdN+HL$(Oɴ HɴdN+HL$ Opɴ HpɴdN+HL$OPɴ| HPɴdNX+HL$O0ɴO H0ɴdN++HL$Oɴ" HɴdN*HL$Oȴ HȴdN*HL$Nȴ HȴdN*HL$Nȴ HȴdNw*HL$Nȴn HȴdNJ*HL$NpȴA HpȴdN*HL$NPȴ HPȴdN)HL$N0ȴ H0ȴdN)HL$Nȴ HȴdN)HT$yƴ"0HT$yƴ0HT$yƴ/HT$yƴ/HT$yƴ/HT$yƴ/HT$yƴ/HT$zƴ/HT$ zƴ/HT$zƴn/HT$zƴZ/HT$(zƴF/HT$2zƴ2/HT$-HT$6{Ǵ*-HT$@{Ǵ-HT$J{Ǵ-HT$T{Ǵ,HT$^{Ǵ,HT$h{Ǵ,HT$r{Ǵ,HT$|{Ǵ,HT${Ǵ,HT${Ǵv,HT${ȴb,HT${ȴN,H1V%HT${Ĵ),HT${Ĵ,HT${Ĵ,HT${Ĵ+HT${Ĵ+HT${Ĵ+HT${Ĵ+HT${Ĵ+HT${Ŵ+HT$|Ŵu+HT$|Ŵa+HT$|ŴM+HT$&| Ŵ9+HT$0|(Ŵ%+HT$:|0Ŵ+HT$D|8Ŵ*HT$N|@Ŵ*HT$X|HŴ*HT$b|PŴ*HT$l|XŴ*HT$v|`Ŵ*HT$|hŴ*HT$|pŴq*HT$|xŴ]*HT$|ŴI*HT$|Ŵ5*HT$|Ŵ!*HT$|Ŵ *HT$|Ŵ)HT$|Ŵ)HT$|Ŵ)HT$|Ŵ)HT$zŴ)HT${Ŵ)HT${Ŵ)HT${Ŵm)HT$"{ŴY)HT$,{ŴE)HT$6{Ŵ1)HT$@{Ŵ)HT$J{ƴ )HT$T{ƴ(HT$^{ƴ(HT$h{ƴ(HT$r{ ƴ(HT$|{(ƴ(HT${0ƴ(HT${8ƴ}(HT${@ƴi(HT${HƴU(H1V!HT$}Ĵ0(HĴ A|!HT$|ô(HT$`|ô'HT$|ô'HT$0|ô'HT$| ô'HT$|(ô'HT$h|0ô'HT$|8ô|'HT$8|@ôh'HT$|HôT'HT$|Pô@'HT$p|Xô,'HT$|`ô'HT$@|hô'HT$|pô&HT$|xô&HT$x|ô&HT$|ô&HT$H|ô&HT$|ô&HT$|ôx&HT$|ôd&HT$|ôP&HT$P|ô<&HT$|ô(&HT$ |ô&HT$|ô&HT$|ô%HT$X|ô%HT$|ô%HT$(|ô%HT$|ô%HT$|Ĵ%HT$`|Ĵt%HT$|Ĵ`%HT$0|ĴL%HT$| Ĵ8%HT$|(Ĵ$%HT$h|0Ĵ%HT$|8Ĵ$HT$8|@Ĵ$HT$|HĴ$HT$}PĴ$HT$p}XĴ$HT$}`Ĵ$HT$@}hĴ$HT$}pĴp$1HVH`ogH~`ogH{`ogHD$dH3%(uZH [ÿ@Բom4 H@ԲkNcPԲomm1 HPԲkN9 11H)H̀ƴHƴt8HH3H~HgtHt$HD$MHD$ͺ/붺0H1H)HôHôtHH3H~HgtHt$HD$0MHD$ͺ붺 믺 먺 롺 뚺 듺댺녺{qg]SI?5+!+,-.#$}%s&i'_(U)K*A7-# !"%1H)HĴHĴHH3H~HgtHt$HD$&KHD$ɺ&벺'뫺(뤺)띺*떺+돺,눺-끺.w/m0c1Y1 v lbXND:zpf\RH> 4!*" #$ %&'()*+,-./011ukaWMC9 / %   {qg]S I!?"5#+$!f.H@dH%(HD$1bH@|AHzoHzo =imHyo =hm6 HL$]W HdN3HL$]* HdNHL$] HdNHL$] HdNHL$] HdNHL$]pv HpdNRHL$]PI HPdN%HL$]0 H0dNHL$] HdNHL$] HdNHL$] HdNqHL$]h HdNDHL$x]; HdNHL$p]p HpdNHL$h]P HPdNHL$`]0 H0dNHL$X] HdNcHL$P]Z HdN6HL$H]- HdN HL$@] HdNHL$8] HdNHL$0]p HpdNHL$(]Py HPdNUHL$ ]0L H0dN(HL$] HdNHL$] HdNHL$] HdNHL$] HdNtHL$\k HdNGHL$\p> HpdNHL$\P HPdNHL$\0 H0dNHL$\ HdNHL$\ HdNfHL$\] HdN9HL$\0 HdN HL$\ HdNHL$\pHpdNHL$\PHPdNHL$\0|H0dNXHL$\OHdN+HL$\ߴ"HߴdNHL$\ߴHߴdNHL$\ߴHߴdNHL$x\ߴHߴdNwHL$p\pߴnHpߴdNJHL$h\PߴAHPߴdNHL$`\0ߴH0ߴdN HL$X\ߴHߴdN HL$P\޴H޴dN HL$H\޴H޴dNi HD$dH3%(uYHÿPԲ_mc! HPԲkN/ @Բ_m$ H@ԲkN kf.H`dH%(HD$1H`|A HZ{o HF{o="_mH+{o=_mHL$ i0wH0dNS HL$iJHdN& HL$iHdN HL$iHdN HL$iHdN HL$hHdNr HL$hpiHpdNE HL$hP<HPdN HL$h0H0dN HL$hHdN HL$hHdN HL$hHdNd HL$h[HdN7 HL$h.HdN HL$hpHpdN HL$hPHPdN HL$h0H0dN HL$hzHdNV HL$hMHdN) HL$ph HdNHL$`hHdNHL$PhHdNHL$@hpHpdNuHL$0hPlHPdNHHL$(h0?H0dNHL$ hHdNHL$hHdNHL$hHdNHL$hHdNgHL$g^HdN:HL$gp1HpdN HL$gPHPdNHL$g0H0dNHL$gHdNHL$g}HdNYHL$gPHdN,HL$g#HdNHL$gHdNHL$gpHpdNHL$gPHPdNxHL$g0oH0dNKHL$xgBHdNHL$pgHdNHL$hgHdNHL$`gHdNHL$XgHdNjHL$PgpaHpdN=HL$@gP4HPdNHL$0g0H0dNHL$(gHdNHL$ gHdNHL$gHdN\HL$gSHdN/HL$g&HdNHL$gpHpdNHL$fPHPdNHL$f0H0dN{HL$frHdNNHL$fEHdN!HL$fHdNHL$fHdNHL$fHdNHL$fpHpdNmHL$fPdHPdN@HL$f07H0dNHL$f HdNHL$fHdNHL$fHdNHL$fHdN_HL$fVHdN2HL$fp)HpdNHL$xfPHPdNHL$pf0H0dNHL$hfHdN~HL$`fuHdNQHL$XfHHdN$HL$PfHdNHL$HfHdNHL$@fpHpdNHL$8fPHPdNpHL$0f0gH0dNCHL$(f:HdNHL$ f HdNHL$fHdNHL$fHdNHL$fHdNbHL$fpYHpdN5HL$eP,HPdNHD$dH3%(uYHÿPԲoOm HPԲkN<@Բ=Om( H@ԲkN f.HdH%(HD$1"H|A^HvoHvoa=NmHuo=NmHL$`wPHPdNHL$Xw0H0dNHL$PwHdNHL$HwHdNlHL$@wcHdN?HL$8w6HdNHL$0w HdNHL$(wpHpdNHL$ wPHPdNHL$w0H0dN^HL$wUHdN1HL$w(HdNHL$vHdNHL$vHdNHL$vHdN}HL$vptHpdNPHL$vPGHPdN#HL$v0H0dNHL$vHdNHL$vHdNHL$vHdNoHL$vfHdNBHL$v9HdNHL$pvp HpdNHL$hvPHPdNHL$`v0H0dNHL$XvHdNaHL$PvXHdN4HL$@v+HdNHL$0vHdNHL$ vHdNHL$vpHpdNHL$vPwHPdNSHL$u0JH0dN&HL$uHdNHL$uHdNHL$uHdNHL$uHdNrHL$uiHdNEHL$up<HpdNHL$uPHPdNHL$u0H0dNHL$uHdNHL$uHdNdHL$u[HdN7HL$u.HdN HL$uHdNHL$upHpdNHL$puPHPdNHL$hu0zH0dNVHL$`uMHdN)HL$Xu HdNHL$PuHdNHL$HuHdNHL$@uHdNuHL$8uplHpdNHHL$0uP?HPdNHL$(u0H0dNHL$ uHdNHL$uHdNHL$uHdNgHL$u^HdN:HL$u1HdN HL$tpHpdNHL$tPHPdNHL$t0H0dNHL$t}HdNYHL$tPHdN,HL$t#HdNHL$tHdNHL$tHdNHL$tpHpdNxHL$tPoHPdNKHL$t0BH0dNHL$tHdNHL$tHdNHL$tHdNHL$tHdNjHL$taHdN=HL$xtp4HpdNHL$ptPHPdNHL$ht0H0dNHL$`tHdNHL$XtHdN\HL$PtSHdN/HL$Ht&HdNHL$@tHdNHL$8tpHpdNHD$dH3%(uYHÿPԲ?m HPԲkNn<@Բ>m H@ԲkNDf.HdH%(HD$1H|AYHpoMHpo=b>mHpo=F>mHL$pHpdNHL$؄PHPdNfHL$Є0]H0dN9HL$Ȅ0HdN HL$HdNHL$HdNHL$HdNHL$|HdNXHL$pOHpdN+HL$P"HPdNHL$0H0dNHL$HdNHL$pHdNwHL$hnHdNJHL$`AHdNHL$XHdNHL$PpHpdNHL$HPHPdNHL$@0H0dNiHL$0`HdNH dNHL$` H dNHL$P H dNHL$@ H dNHL$8p Hp dNfHL$0P ]HP dN9HL$(0 0H0 dN HL$  H dNHL$ H dNHL$ H dNHL$ |H dNXHL$ OH dN+HL$p "Hp dNHL$P HP dNHL$0 H0 dNHL$ H dNwHL$؎ nH dNJHL$Ў AH dNHL$ H dNHL$ H dNHL$p Hp dNHL$P HP dNiHL$0 `H0 dNHZfoHFfoA=mH+fo=mHL$HdNHL$ʺHdNHL$p蝺HpdNyHL$PpHPdNLHL$0CH0dNHL$xHdNHL$pHdNHL$h輹HdNHL$`菹HdNkHL$XbHdN>HL$Pp5HpdNHL$@PHPdNHL$00۸H0dNHL$(许HdNHL$ 聸HdN]HL$THdN0HL$'HdNHL$HdNHL$pͷHpdNHL$P蠷HPdN|HL$0sH0dNOHL$КFHdN"HL$HdNHL$HdNHL$迶HdNHL$蒶HdNnHL$peHpdNAHL$P8HPdNHL$0 H0dNHL$p޵HdNHL$`豵HdNHL$P脵HdN`HL$@WHdN3HL$8*HdNHL$0pHpdNHL$(PдHPdNHL$ 0裴H0dNHL$vHdNRHL$IHdN%HL$HdNHL$HdNHL$³HdNHL$p蕳HpdNqHL$PhHPdNDHL$0;H0dNHL$ؙHdNHL$ЙHdNHL$贲HdNHL$臲HdNcHL$ZHdN6HL$p-HpdN HL$PHPdNHL$0ӱH0dNHL$覱HdNHL$yHdNUHL$xLHdN(HL$pHdNHL$hHdNHL$`pŰHpdNHL$XP蘰HPdNtHL$P0kH0dNGHL$H>HdNHL$@HdNHL$8HdNHL$0路HdN蓿HL$(芯HdNfHL$ p]HpdN9HL$P0HPdN HL$0H0dN߾HL$֮HdN貾HL$詮HdN腾HL$|HdNXHL$OHdN+HL$"HdNHL$pHpdNѽHL$ؘPȭHPdN褽HL$И0蛭H0dNwHL$ȘnHdNJHL$AHdNHL$HdNHL$HdNüHL$躬HdN薼HL$p荬HpdNiHL$P`HPdNHL$"5H"dNHL$p"Hp"dNHL$P"ۢHP"dN跲HL$0"订H0"dN芲HL$"聢H"dN]HL$!TH!dN0HL$p!'H!dNHL$h!H!dNֱHL$`!͡H!dN話HL$Xp!蠡Hp!dN|HL$PP!sHP!dNOHL$H0!FH0!dN"HL$@!H!dNHL$8 H dNȰHL$0 迠H dN蛰HL$( 蒠H dNnHL$  eH dNAHL$p 8Hp dNHL$P HP dNHL$0 ޟH0 dN躯HL$ 豟H dN药HL$脟HdN`HL$WHdN3HL$*HdNHL$HdNٮHL$أpОHpdN謮HL$УP裞HPdNHL$ȣ0vH0dNRHL$IHdN%HL$HdNHL$HdN˭HL$HdN螭HL$蕝HdNqHL$phHpdNDHL$P;HPdNHL$0H0dNHL$HdN转HL$x贜HdN萬HL$p臜HdNcHL$hZHdN6HL$`-HdN HL$XpHpdNܫHL$PPӛHPdN诫HL$H0覛H0dN肫HL$@yHdNUHL$8LHdN(HD$dH3%(uYHÿPԲl"HPԲkN<@Բ]lHH@ԲkNĪ*f.H 3dH%(HD$1BH 3|A~ٰH[oͰH[o聞=lH[o=lHL$`27H2dNHL$X2 H2dNHL$P2ݙH2dN蹩HL$H2谙H2dN茩HL$@p2胙Hp2dN_HL$8P2VHP2dN2HL$002)H02dNHL$(2H2dNبHL$ 1ϘH1dN諨HL$1袘H1dN~HL$1uH1dNQHL$1HH1dN$HL$p1Hp1dNHL$P1HP1dNʧHL$01H01dN蝧HL$ر1蔗H1dNpHL$б0gH0dNCHL$ȱ0:H0dNHL$0 H0dNHL$0H0dN輦HL$p0賖Hp0dN菦HL$P0膖HP0dNbHL$00YH00dN5HL$p0,H0dNHL$h/H/dNۥHL$`/ҕH/dN讥HL$X/襕H/dN聥HL$P/xH/dNTHL$@p/KHp/dN'HL$0P/HP/dNHL$ 0/H0/dNͤHL$/ĔH/dN蠤HL$.藔H.dNsHL$.jH.dNFHL$.=H.dNHL$.H.dNHL$p.Hp.dN迣HL$ذP.趓HP.dN蒣HL$а0.艓H0.dNeHL$Ȱ.\H.dN8HL$-/H-dN HL$-H-dNޢHL$-ՒH-dN豢HL$-訒H-dN脢HL$p-{Hp-dNWHL$P-NHP-dN*HL$0-!H0-dNHL$-H-dNСHL$p,ǑH,dN裡HL$h,蚑H,dNvHL$`,mH,dNIHL$X,@H,dNHL$Pp,Hp,dNHL$HP,HP,dN HL$@0,蹐H0,dN蕠HL$8,茐H,dNhHL$0+_H+dN;HL$(+2H+dNHL$ +H+dNHL$+؏H+dN负HL$p+諏Hp+dN臟HL$P+~HP+dNZHL$0+QH0+dN-HL$+$H+dNHL$*H*dNӞHL$*ʎH*dN覞HL$*蝎H*dNyHL$د*pH*dNLHL$Яp*CHp*dNHL$ȯP*HP*dNHL$0*H0*dNŝHL$*輍H*dN蘝HL$)菍H)dNkHL$)bH)dN>HL$)5H)dNHL$)H)dNHL$p)یHp)dN跜HL$P)讌HP)dN芜HL$0)职H0)dN]HL$x)TH)dN0HL$p('H(dNHL$h(H(dN֛HL$`(͋H(dN詛HL$X(蠋H(dN|HL$Pp(sHp(dNOHL$HP(FHP(dN"HL$@0(H0(dNHL$8(H(dNȚHD$dH3%(uYHÿPԲ/l®HPԲkN莚<@ԲlH@ԲkNdʊf.H@>dH%(HD$1H@>|AyHVomHVo!=lHkVo=flHL$`>׉H>dN賙HL$X=誉H=dN膙HL$P=}H=dNYHL$H=PH=dN,HL$@=#H=dNHL$8p=Hp=dNҘHL$0P=ɈHP=dN襘HL$(0=蜈H0=dNxHL$ =oH=dNKHL$<BH<dNHL$<H<dNHL$<H<dNėHL$<軇H<dN藗HL$p<莇Hp<dNjHL$P<aHP<dN=HL$ؼ0<4H0<dNHL$м<H<dNHL$ȼ;چH;dN趖HL$;譆H;dN艖HL$;耆H;dN\HL$;SH;dN/HL$p;&Hp;dNHL$P;HP;dNՕHL$p0;̅H0;dN訕HL$h;蟅H;dN{HL$`:rH:dNNHL$X:EH:dN!HL$P:H:dNHL$@:H:dNǔHL$0p:辄Hp:dN蚔HL$ P:葄HP:dNmHL$0:dH0:dN@HL$:7H:dNHL$9 H9dNHL$9݃H9dN蹓HL$9调H9dN茓HL$9胃H9dN_HL$ػp9VHp9dN2HL$лP9)HP9dNHL$Ȼ09H09dNؒHL$9ςH9dN諒HL$8袂H8dN~HL$8uH8dNQHL$8HH8dN$HL$8H8dNHL$p8Hp8dNʑHL$P8HP8dN蝑HL$08蔁H08dNpHL$p8gH8dNCHL$h7:H7dNHL$`7 H7dNHL$X7H7dN輐HL$P7賀H7dN菐HL$Hp7膀Hp7dNbHL$@P7YHP7dN5HL$807,H07dNHL$07H7dNۏHL$(6H6dN讏HL$ 6H6dN聏HL$6xH6dNTHL$6KH6dN'HL$p6Hp6dNHL$P6~HP6dN͎HL$06~H06dN蠎HL$6~H6dNsHL$5j~H5dNFHL$5=~H5dNHL$غ5~H5dNHL$к5}H5dN迍HL$Ⱥp5}Hp5dN蒍HL$P5}HP5dNeHL$05\}H05dN8HL$5/}H5dN HL$4}H4dNތHL$4|H4dN豌HL$4|H4dN脌HL$4{|H4dNWHL$p4N|Hp4dN*HL$P4!|HP4dNHL$x04{H04dNЋHL$p4{H4dN裋HL$h3{H3dNvHL$`3m{H3dNIHL$X3@{H3dNHL$P3{H3dNHL$Hp3zHp3dNŠHL$@P3zHP3dN蕊HL$803zH03dNhHD$dH3%(uYHÿPԲlbHPԲkN.<@Բl舡H@ԲkNjzf.H`IdH%(HD$1肍H`I|A辉HZQo HFQo}="lH+Qo=lHL$0IwyH0IdNSHL$IJyHIdN&HL$HyHHdNHL$HxHHdN̈HL$HxHHdN蟈HL$HxHHdNrHL$pHixHpHdNEHL$PH kH>dNzHL$>jH>dNzHL$>jH>dNzHL$>jH>dNbzHL$p>YjHp>dN5zHL$P>,jHP>dNzHD$dH3%(uYHÿPԲolHPԲkNy<@Բ=l(H@ԲkNy jf.S eH dH%(HD$1!}H e|A]yH\oH\o`m=lH\o*=lJ*HL$diHddNxHL$dhHddNxHL$dhHddNxHL$dhHddNkxHL$pdbhHpddN>xHL$Pd5hHPddNxHL$0dhH0ddNwHL$dgHddNwHL$cgHcdNwHL$cgHcdN]wHL$cTgHcdN0wHL$c'gHcdNwHL$pcfHpcdNvHL$PcfHPcdNvHL$0cfH0cdN|vHL$xcsfHcdNOvHL$pbFfHbdN"vHL$hbfHbdNuHL$`beHbdNuHL$XbeHbdNuHL$PpbeHpbdNnuHL$HPbeeHPbdNAuHL$@0b8eH0bdNuHL$8b eHbdNtHL$0adHadNtHL$(adHadNtHL$ adHadN`tHL$aWdHadN3tHL$pa*dHpadNtHL$PacHPadNsHL$0acH0adNsHL$acHadNsHL$`vcH`dNRsHL$`IcH`dN%sHL$`cH`dNrHL$`bH`dNrHL$p`bHp`dNrHL$P`bHP`dNqrHL$0`hbH0`dNDrHL$`;bH`dNrHL$_bH_dNqHL$_aH_dNqHL$_aH_dNqHL$_aH_dNcqHL$p_ZaHp_dN6qHL$P_-aHP_dN qHL$0_aH0_dNpHL$x_`H_dNpHL$p^`H^dNpHL$h^y`H^dNUpHL$`^L`H^dN(pHL$X^`H^dNoHL$Pp^_Hp^dNoHL$HP^_HP^dNoHL$@0^_H0^dNtoHL$8^k_H^dNGoHL$0]>_H]dNoHL$(]_H]dNnHL$ ]^H]dNnHL$]^H]dNnHL$p]^Hp]dNfnHL$P]]^HP]dN9nHL$0]0^H0]dN nHL$]^H]dNmHL$\]H\dNmHL$\]H\dNmHL$\|]H\dNXmHL$\O]H\dN+mHL$p\"]Hp\dNlHL$P\\HP\dNlHL$0\\H0\dNlHL$\\H\dNwlHL$[n\H[dNJlHL$[A\H[dNlHL$[\H[dNkHL$[[H[dNkHL$p[[Hp[dNkHL$P[[HP[dNikHL$0[`[H0[dNLHRdN\HL$(RLHRdN[HL$ RKHRdN[HL$RKHRdN[HL$`RKH`RdNf[HL$@R]KH@RdN9[HL$ R0KH RdN [HL$RKHRdNZHL$QJHQdNZHL$QJHQdNZHL$Q|JHQdNXZHL$QOJHQdN+ZHL$`Q"JH`QdNYHL$@QIH@QdNYHL$ QIH QdNYHL$QIHQdNwYHL$PnIHPdNJYHL$pPAIHPdNYHL$`PIHPdNXHL$PPHHPdNXHL$@`PHH`PdNXHL$8@PHH@PdNiXHL$0 P`HH PdN1H)H̀THTt1HH3H~HgtHt$HD$HD$ͺHUH맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H@VH@VHH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1MH|AIHPH Io8HdNHHL$h8HdNGHL$`p7HpdNGHL$XP7HPdNGHL$P07H0dNfGHL$H]7HdN9GHL$@~07H~dN GHL$8~7H~dNFHL$0~6H~dNFHL$(~6H~dNFHL$ p~|6Hp~dNXFHL$P~O6HP~dN+FHL$0~"6H0~dNEHL$~5H~dNEHL$}5H}dNEHL$}5H}dNwEHL$}n5H}dNJEHL$}A5H}dNEHL$p}5Hp}dNDHL$P}4HP}dNDHL$0}4H0}dNDHL$}4H}dNiDHL$|`4H|dNHL$y.HydN>HL$x.HxdN>HL$x.HxdNo>HL$xf.HxdNB>HL$x9.HxdN>HL$px .HpxdN=HL$Px-HPxdN=HL$0x-H0xdN=HL$x-HxdNa=HL$wX-HwdN4=HL$xw+-HwdN=HL$pw,HwdN4*   !"#v$l11H)HrHrHH3H~HgtHt$HD$nHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1AH|A} Hy5o He5o=llHJ5o+=ll+Z=lH5oK+=lH4o`*=olH4oX*HL$0pH4oP HpdNHL$(P HPdNHL$ 0 H0dNdHL$[ HdN7HL$. HdN HL$Л HЛdNHL$HdNHL$HdNHL$pzHpdNVHL$PMHPdN)HL$0 H0dNHL$HdNHL$HdNHL$КHКdNuHL$lHdNHHL$?HdNHL$pHpdNHL$PHPdNHL$0H0dNHL$HdNgHL$^HdN:HL$Й1HЙdN HL$HdNHL$xHdNHL$ppHpdNHL$hP}HPdNYHL$`0PH0dN,HL$X#HdNHL$PHdNHL$HИHИdNHL$@HdNxHL$8oHdNKHL$0pBHpdNHL$(PHPdNHL$ 0H0dNHL$HdNHL$HdNjHL$ЗaHЗdN=HL$4HdNHL$HdNHL$pHpdNHL$PHPdNHL$0H0dN\HL$SHdN/HL$&HdNHL$ЖHЖdNHL$HdNHL$HdN{HL$prHpdNNHL$PEHPdN!HL$0H0dNHL$HdNHL$HdNHL$ЕHЕdNmHL$dHdN@HL$x7HdNHL$pp HpdNHL$hPHPdNHL$`0H0dNHL$XHdN_HL$PVHdN2HL$HД)HДdNHL$@HdNHL$8HdNHL$0pHpdN~HL$(PuHPdNQHL$ 0HH0dN$HL$HdN HL$HdN HL$ГHГdN HL$HdNp HL$gHdNC HL$p:HpdN HL$P HPdN HL$0H0dN HL$HdN HL$HdNb HL$ВYHВdN5 HL$,HdN HL$HdN HL$pHpdN HL$PHPdN HL$0xH0dNT HL$KHdN' HL$HdN HL$БHБdN HL$HdN HL$xHdNs HL$ppjHpdNF HL$hP=HPdN HL$`0H0dN HL$XHdN HL$PHdN HL$HАHАdNe HL$@\HdN8 HL$8/HdN HL$0pHpdNHL$(PHPdNHL$ 0H0dNHL${HdNWHL$NHdN*HL$Џ!HЏdNHL$HdNHL$HdNHL$pHpdNvHL$PmHPdNIHT$мw HT$wȍ HT$wЍ HT$w؍ HT$w HT$w荵q HT$w] HT$wI HT$w5 HT$w! HT$w HT$w HT$w HT$w( HT$w0 HT$w8 HT$w@ HT$xH HT$xPm HT$xXY HT$ x`E HT$xh1 HT$xp HT$xx HT$x HT$ x HT$$x HT$(x HT$,x HT$0x HT$4x} HT$8xi HT$HL$@5H@dNHL$ H dNHL$HdN=l=l=ޜl^=ɜl=luH/pRl_HD$dH3%(yH [ÿ/=/HPR / /HXR(/(/oH` RH/`RЛl@Բ@lH@ԲkNaPԲ@lkHPԲkN7H/PRdlH/@RLlUH/0R4l(=$1H)HHt1HH3H~HgtHt$HD$HD$ͺ%H&맺'렺(뙺뒺닺넺zpf\R'1H)HHzHH3H~HgtHt$HD$HD$ɺ(벺)뫺*뤺+띺,떺-돺.눺끺wmcYOE;1 '!`VLB8.$ !"# z0# f \ R1/17"#$%&)*+,-./011MC9/% {f.H৵dH%(HD$1H৵|ANHjoHVoQ=;lH;o=;lHL$HdNHL$HdNHL$pHpdNHL$PHPdN\HL$0SH0dN/HL$&HdNHL$HdNHL$ЦHЦdNHL$HdN{HL$rHdNNHL$pEHpdN!HL$PHPdNHL$p0H0dNHL$hHdNHL$`HdNmHL$XХdHХdN@HL$P7HdNHL$H HdNHL$@pHpdNHL$0PHPdNHL$ 0H0dN_HL$VHdN2HL$)HdNHL$ФHФdNHL$HdNHL$HdN~HL$puHpdNQHL$PHHPdN$HL$0H0dNHL$HdNHL$HdNHL$УHУdNpHL$gHdNCHL$x:HdNHL$pp HpdNHL$hPHPdNHL$`0H0dNHL$XHdNbHL$PYHdN5HL$HТ,HТdNHL$@HdNHL$8HdNHL$0pHpdNHL$(PxHPdNTHL$ 0KH0dN'HL$HdNHL$HdNHL$СHСdNHL$HdNsHL$jHdNFHL$p=HpdNHL$PHPdNHL$0H0dNHL$HdNHL$HdNeHL$Р\HРdN8HL$/HdN HL$HdNHL$pHpdNHL$PHPdNHL$0{H0dNWHL$NHdN*HL$!HdNHL$xПHПdNHL$pHdNHL$hHdNvHL$`pmHpdNIHL$XP@HPdNHL$P0H0dNHL$HHdNHL$@HdNHL$8ОHОdNhHL$0_HdN;HL$(2HdNHL$ pHpdNHL$PHPdNHL$0H0dNHL$~HdNZHL$QHdN-HL$Н$HНdNHL$HdNHL$HdNHL$pHpdNyHL$PpHPdNLHL$0CH0dNHL$HdNHL$HdNHL$МHМdNHD$dH3%(uYHÿPԲ+lHPԲkN^<@Բ+lH@ԲkN4f.HdH%(HD$1H|AIH* o=H o=R+lH o=6+lHL$`вHвdNHL$XzHdNVHL$PMHdN)HL$Hp HpdNHL$@PHPdNHL$80H0dNHL$0HdNuHL$(lHdNHHL$ б?HбdNHL$HdNHL$HdNHL$pHpdNHL$PHPdNgHL$0^H0dN:HL$1HdN HL$HdNHL$аHаdNHL$HdNHL$}HdNYHL$pPHpdN,HL$P#HPdNHL$0H0dNHL$HdNHL$pHdNxHL$hЯoHЯdNKHL$`BHdNHL$XHdNHL$PpHpdNHL$@PHPdNHL$00H0dNjHL$ aHdN=HL$4HdNHL$ЮHЮdNHL$HdNHL$HdNHL$pHpdN\HL$PSHPdN/HL$0&H0dNHL$HdNHL$HdNHL$ЭHЭdN{HL$rHdNNHL$EHdN!HL$pHpdNHL$PHPdNHL$0H0dNHL$HdNmHL$dHdN@HL$pЬ7HЬdNHL$h HdNHL$`ݿHdNHL$Xp谿HpdNHL$PP胿HPdN_HL$H0VH0dN2HL$@)HdNHL$8HdNHL$0ЫϾHЫdNHL$(袾HdN~HL$ uHdNQHL$pHHpdN$HL$PHPdNHL$0H0dNHL$HdNHL$蔽HdNpHL$ЪgHЪdNCHL$:HdNHL$ HdNHL$pHpdNHL$P購HPdNHL$0膼H0dNbHL$YHdN5HL$,HdNHL$ЩHЩdNHL$һHdNHL$襻HdNHL$pxHpdNTHL$PKHPdN'HL$0H0dNHL$HdNHL$xĺHdNHL$pШ藺HШdNsHL$hjHdNFHL$`=HdNHL$XpHpdNHL$PPHPdNHL$H0趹H0dNHL$@艹HdNeHL$8\HdN8HD$dH3%(uYHÿPԲl2HPԲkN<@ԲmlXH@ԲkN:f.H dH%(HD$1RH |AHoHo葼=lHo=lHL$GHdN#HL$нHнdNHL$HdNHL$HdNHL$p蓷HpdNoHL$xPfHPdNBHL$p09H0dNHL$h HdNHL$`߶HdNHL$Xм貶HмdNHL$P腶HdNaHL$@XHdN4HL$0p+HpdNHL$(PHPdNHL$ 0ѵH0dNHL$褵HdNHL$wHdNSHL$лJHлdN&HL$HdNHL$HdNHL$pôHpdNHL$P薴HPdNrHL$0iH0dNEHL$<HdNHL$HdNHL$кHкdNHL$赳HdNHL$舳HdNdHL$p[HpdN7HL$pP.HPdN HL$`0H0dNHL$PԲHdNHL$@觲HdNHL$8йzHйdNVHL$0MHdN)HL$( HdNHL$ pHpdNHL$PƱHPdNHL$0虱H0dNuHL$lHdNHHL$?HdNHL$иHиdNHL$HdNHL$踰HdNHL$p苰HpdNgHL$P^HPdN:HL$01H0dN HL$HdNHL$ׯHdN賿HL$з誯HзdN膿HL$}HdNYHL$PHdN,HL$p#HpdNHL$PHPdNҾHL$0ɮH0dN襾HL$x蜮HdNxHL$poHdNKHL$hжBHжdNHL$`HdNHL$XHdNĽHL$Pp軭HpdN藽HL$HP莭HPdNjHL$@0aH0dN=HL$84HdNHL$0HdNHL$(еڬHеdN趼HL$ 譬HdN艼HL$耬HdN\HL$pSHpdN/HL$P&HPdNHL$0H0dNջHL$̫HdN註HL$蟫HdN{HL$дrHдdNNHL$EHdN!HL$HdNHL$pHpdNǺHL$P辪HPdN蚺HL$0葪H0dNmHL$dHdN@HL$7HdNHL$г HгdNHL$ݩHdN蹹HL$谩HdN茹HL$p胩HpdN_HL$PVHPdN2HL$0)H0dNHL$xHdNظHD$dH3%(uYHÿPԲ? lHPԲkN螸<@Բ lH@ԲkNtڨf.H`ɵdH%(HD$1H`ɵ|A.艾Hn}Hn1= lHn/=v lHL$0ɵH0ɵdN÷HL$ɵ躧HɵdN薷HL$ȵ荧HȵdNiHL$ȵ`HȵdNHL$+05H0dNHL$+HdNHL$+ۈHdN跘HL$+讈HdN芘HL$+聈HdN]HL$+THdN0HL$+p'HpdNHL$+PHPdN֗HL$+0͇H0dN詗HL$+蠇HdN|HL$+sHdNOHL$+FHdN"HL$+HdNHL$+HdNȖHL$+p迆HpdN蛖HL$x+P蒆HPdNnHL$p+0eH0dNAHT$}(͜H( AHL$h+HdNHL$`+HdN迕HL$X+超HdN蒕HL$P+艅HdNeHL$H+\HdN8HL$@+p/HpdN HL$8+PHPdNޔHL$0+0ՄH0dN豔HL$(+訄HdN脔HL$ +{HdNWHL$+NHdN*HL$+!HdNHL$+HdNГHL$+pǃHpdN裓HL$*P蚃HPdNvHL$*0mH0dNIHL$*@HdNHL$*HdNHL$*HdN’HL$*蹂HdN蕒HL$*茂HdNhHL$*p_HpdN;HL$*P2HPdNHL$*0H0dNHL$*؁HdN贑HL$*諁HdN臑HL$*~HdNZHL$*QHdN-HL$*$HdNHL$*pHpdNӐHL$x*PʀHPdN覐HL$p*0蝀H0dNyHL$h*pHdNLHL$`*CHdNHL$X*HdNHL$P*HdNŏHL$H*HdN蘏Hپ@*pHpdNmHپ8*PfHPdNBHپ0*0;H0dNHپ(*HdNHپ *~HdNHپ*~HdN薎Hپ*~HdNkHپ*d~HdN@Hپ*p9~HpdNHپ)P~HPdNHپ)0}H0dN迍Hپ)}HdN蔍Hپ)}HdNiHپ)b}HdN>Hپ)7}HdNHپ) }HdNHپ)p|HpdN轌Hپ)P|HPdN蒌Hپ)0|H0dNgHپ)`|HdN`HѵdNpHپh&ѵ`HѵdNoHپ`&ѵ_HѵdNoHپX&ѵ_HѵdNoHپP&pѵ_HpѵdNnoHپH&Pѵg_HPѵdNCoHپ@&0ѵ<_H0ѵdNoHپ8&ѵ_HѵdNnHپ0&е^HеdNnHپ(&е^HеdNnHپ &е^HеdNlnHپ&еe^HеdNAnHپ&pе:^HpеdNnHپ&Pе^HPеdNmHپ&0е]H0еdNmHپ%е]HеdNmHپ%ϵ]HϵdNjmHپ%ϵc]HϵdN?mHپ%ϵ8]HϵdNmHپ%ϵ ]HϵdNlHپ%pϵ\HpϵdNlHپ%Pϵ\HPϵdNlHپ%0ϵ\H0ϵdNhlHپ%ϵa\HϵdN=lHپ%ε6\HεdNlHپ%ε \HεdNkHپ%ε[HεdNkHپ%ε[HεdNkHپ%pε[HpεdNfkHپ%Pε_[HPεdN;kHپ%0ε4[H0εdNkHپx%ε [HεdNjHپp%͵ZH͵dNjHپh%͵ZH͵dNjHپ`%͵ZH͵dNdjHپX%͵]ZH͵dN9jHپP%p͵2ZHp͵dNjHپH%P͵ZHP͵dNiHپ@%0͵YH0͵dNiHپ8%͵YH͵dNiHھмw˵pHھw˵ pHھw˵oHھw˵oHھw˵oHھw˵oHھw˵oHھw˵oHھw˵oHھw˵yoHھw˵goHھw˵UoHھw˵CoHھw˵1oHھw˵oHھw˵ oHھw̵nHھx̵nHھx̵nHھx̵nHھ x ̵nHھx(̵nHھx0̵nHھx8̵}nHھx@̵knHھ xH̵YnHھ$xP̵GnHھ(xX̵5nHھ,x`̵#nHھ0xh̵nHھ4xp̵mHھ8xx̵mHھlHھИxɵ,lHھМxɵlHھРxɵlHھФxʵkHھШxʵkHھЬxʵkHھаxʵkHھдx ʵkHھиx(ʵkHھмx0ʵkHھx8ʵxkHھx@ʵfkHھxHʵTkHھxPʵBkHھxXʵ0kHھx`ʵkHھxhʵ kHھxpʵjHھxxʵjHھxʵjHھxʵjHھxʵjHھxʵjHھxʵjHھxʵ|jHھxʵjjHھyʵXjHھyʵFjHھyʵ4jHھ yʵ"jHھyʵjHھyʵiHھyʵiHھyʵiHھ yʵiHھ$y˵iHھ(y˵iHھ,y˵iHھ0y˵iHھ4y ˵niHھ8y(˵\iHھPԲxk vHPԲkNa=R11H)H,޵H޵t7HHMHyHgtHHD$$HD$κ/뷺0H[+롺,뚺-듺.댺1H)H,ɵHɵtHHMHyHgtHHD$t$HD$κ 뷺 밺 멺 뢺 뛺딺덺놺|rh^TJ@6," !"#$%&'()*+x,n-d.Z/P0F1<1ҹ1H)H,̀˵H˵HHMHyHgtHHD$"HD$ʺ볺묺륺랺뗺됺뉺낺 x n d Z PF<2(  !"~#t$j%`&V'L(B)8*.+$,-./011H)H,̀ڵHڵHHMHyHgtHHD$ HD$ʺ볺묺륺랺뗺 됺 뉺 낺 x ndZPF<2(1*  #a$W%M&C'9(/)%* !"{%1H)H,@ܵH@ܵHHMHyHgtHHD$_HD$ʺ&볺'묺(륺)랺*뗺+됺,뉺-낺.x/n0d1Z1y o e [ Q G=3)g]SI?5+! !"#$%&'()*+,-./w0m1c1vlbXND: 0 &   |rh^T J!@"6#,$"+f.HdH%(HD$1ZH|AWy]Hnm]Hn!K=kHn =fk6 HL$8FHdNVHL$8pFHpdNVHL$7P}FHPdNYVHL$70PFH0dN,VHL$7#FHdNUHL$7EHdNUHL$7EHdNUHL$7EHdNxUHL$7oEHdNKUHL$7pBEHpdNUHL$7PEHPdNTHL$70DH0dNTHL$7DHdNTHL$7DHdNjTHL$7aDHdN=THL$74DHdNTHL$7DHdNSHL$7pCHpdNSHL$x7PCHPdNSHL$p70CH0dN\SHL$h7SCHdN/SHL$`7&CHdNSHL$X7BHdNRHL$P7BHdNRHL$H7BHdN{RHL$@7prBHpdNNRHL$87PEBHPdN!RHL$070BH0dNQHL$(7AHdNQHL$ 7AHdNQHL$7AHdNmQHL$7dAHdN@QHL$77AHdNQHL$7p AHpdNPHL$6P@HPdNPHL$60@H0dNPHL$6@HdN_PHL$6V@HdN2PHL$6)@HdNPHL$6?HdNOHL$6?HdNOHL$6p?HpdN~OHL$6Pu?HPdNQOHL$60H?H0dN$OHL$6?HdNNHL$6>HdNNHL$6>HdNNHL$6>HdNpNHL$6g>HdNCNHL$6p:>HpdNNHL$x6P >HPdNMHD$dH3%(uYHÿPԲPkaHPԲkNM@Բk eH@ԲkNM=f.H(dH%(HD$1QH(|A>MHL$;5=HdNMHL$;=HdNLHL$;<HdNLHL$;<HdNLHL$;<HdN]LHL$;pT<HpdN0LHL$;P'<HPdNLHL$;0;H0dNKHL$;;HdNKHL$;;HdN|KHL$;s;HdNOKHL$x;F;HdN"KHL$p;;HdNJHL$h;p:HpdNJHL$`;P:HPdNJHL$X;0:H0dNnJHL$P;e:HdNAJHL$H;8:HdNJHL$@; :HdNIHL$8;9HdNIHL$0;9HdNIHL$(;p9HpdN`IHL$ ;PW9HPdN3IHL$;0*9H0dNIHL$;8HdNHHL$;8HdNHHL$;8HdNHHL$:v8HdNRHHL$:I8HdN%HHL$:p8HpdNGHL$:P7HPdNGHL$:07H0dNGHL$:7HdNqGHL$:h7HdNDGHL$:;7HdNGHL$:7HdNFHL$:6HdNFHL$:p6HpdNFHL$:P6HPdNcFHL$:0Z6H0dN6FHL$:-6HdN FHL$:6HdNEHL$:5HdNEHL$x:5HdNEHL$p:y5HdNUEHL$h:pL5HpdN(EHL$`:P5HPdNDHL$X:04H0dNDHL$P:4HdNDHL$H:4HdNtDHL$@:k4HdNGDHD$dH3%(uH4f.SH dH%(HD$1GH|ACHL$PD3HdNCHL$HD3HdNCHL$@Dp3HpdNfCHL$8DP]3HPdN9CHL$0D003H0dN CHL$(D3HdNBHL$ D2HdNBHL$D2HdNBHL$D|2HdNXBHL$DO2HdN+BHL$Dp"2HpdNAHL$CP1HPdNAHL$C01H0dNAHL$C1HdNwAHL$Cn1HdNJAHL$CA1HdNAHL$C1HdN@HL$C0HdN@HL$Cp0HpdN@HL$CP0HPdNi@HL$C0`0H0dN<@HL$C30HdN@HL$C0HdN?HL$C/HdN?HL$C/HdN?HL$C/HdN[?HL$CpR/HpdN.?HL$xCP%/HPdN?HL$pC0.H0dN>HL$hC.HdN>HL$`C.HdNz>HL$XCq.HdNM>HL$PCD.HdN >HL$HC.HdN=HL$@Cp-HpdN=HL$8CP-HPdN=HL$0C0-H0dNl=HL$(Cc-HdN?=HL$ C6-HdN=HL$C -HdN3HT$Шx*3HT$Ьx3HT$аx3HT$дx2HT$иx2HT$мx2HT$x2HT$x2HT$x2HT$xv2HT$xb2HT$xN2HT$x:2HT$x&2HT$x2HT$x1HT$x1HT$x1HT$x1HT$x 1HT$x(1HT$x01HT$y8r1HT$y@^1HT$yHJ1HT$ yP61HT$yX"1HT$y`1HT$yh0HT$yp0HT$ yx0HT$$y0HT$(y0HT$,y0HT$0y0HT$4yn0HT$8yZ0HT$1HdN HL$>HdNHL$>HdNHL$>`H`dNHL$>@}H@dNYHL$> PH dN,HL$>#HdNHL$>HdNHL$>HdNHL$>HdNxHL$>oHdNKHL$>`BH`dNHL$>@H@dNHL$>  H dNHL$> HdNHL$> HdNjHL$x>a HdN=HL$p>4 HdNHL$h> HdNHL$`>` H`dNHL$X>@ H@dNHL$P>  H dN\HL$H>S HdN/HL$@>& HdNHL$8> HdNHL$0> HdNHL$(> HdN{HL$ >`r H`dNNHL$>@E H@dN!HL$>  H dNHL$> HdNHL$> HdNHL$= HdNmHL$=d HdN@HL$=7 HdNHL$=` H`dNHL$=@ H@dNHD$dH3%(uH [ 1ҹ1H)H@H@t1HH3H~HgtHt$HD$'HD$ͺHz맺렺뙺뒺닺넺z p f \ R H>4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)HH HH3H~HgtHt$HD$%HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01;f.HH|A.HRn}H>n1 =gkH#nt1=zgktXÿ@ԲjgkU,YH@ԲkNPԲLgk(HPԲkNfH)dH%(HD$12H)|AnHL$O)eH)dNAHL$O)8H)dNHL$O) H)dNHL$Op)Hp)dNHL$OP)HP)dNHL$xO0)H0)dN`HL$pO)WH)dN3HL$hO(*H(dNHL$`O(H(dNHL$XO(H(dNHL$PO(H(dNHL$@Op(vHp(dNRHL$0OP(IHP(dN%HL$(O0(H0(dNHL$ O(H(dNHL$O'H'dNHL$O'H'dNqHL$O'hH'dNDHL$O';H'dNHL$Np'Hp'dNHL$NP'HP'dNHL$N0'H0'dNHL$N'H'dNcHL$N&ZH&dN6HL$N&-H&dN HL$N&H&dNHL$N&H&dNHL$Np&Hp&dNHL$NP&yHP&dNUHL$pN0&LH0&dN(HL$`N&H&dNHL$PN%H%dNHL$@N%H%dNHL$8N%H%dNtHL$0N%kH%dNGHL$(Np%>Hp%dNHL$ NP%HP%dN HL$N0%H0%dN HL$N%H%dN HL$N$H$dNf HL$N$]H$dN9 HL$M$0H$dN HL$M$H$dN HL$Mp$Hp$dN HL$MP$HP$dN HL$M0$|H0$dNX HL$M$OH$dN+ HL$M#"H#dN HL$M#H#dN HL$M#H#dN HL$M#H#dNw HL$Mp#nHp#dNJ HL$MP#AHP#dN HL$M0#H0#dN HL$M#H#dN HL$xM"H"dN HL$pM"H"dNi HL$hM"`H"dN< HL$`M"3H"dN HL$XMp"Hp"dN HL$PMP"HP"dN HL$HM0"H0"dN HL$@M"H"dN[ HL$8M!RH!dN. HL$0M!%H!dN HL$(M!H!dNHL$ M!H!dNHL$Mp!Hp!dNzHL$MP!qHP!dNMHL$M0!DH0!dN HL$M!H!dNHL$L H dNHL$L H dNHL$L H dNlHL$L cH dN?HL$Lp 6Hp dNHL$LP HP dNHL$L0 H0 dNHL$L H dNHL$LHdN^HL$LUHdN1HL$L(HdNHL$LHdNHL$LpHpdNHL$LPHPdN}HL$L0tH0dNPHL$LGHdN#HL$xLHdNHD$dH3%(uHLf.fH4dH%(HD$1bH4|AHL$S4H4dNqHL$S4hH4dNDHL$S4;H4dNHL$Sp4Hp4dNHL$SP4HP4dNHL$S04H04dNHL$S4H4dNcHL$S3ZH3dN6HL$S3-H3dN HL$S3H3dNHL$S3H3dNHL$pSp3Hp3dNHL$`SP3yHP3dNUHL$XS03LH03dN(HL$PS3H3dNHL$HS2H2dNHL$@S2H2dNHL$8S2H2dNtHL$0S2kH2dNGHL$ Sp2>Hp2dNHL$SP2HP2dNHL$S02H02dNHL$R2H2dNHL$R1H1dNfHL$R1]H1dN9HL$R10H1dN HL$R1H1dNHL$Rp1Hp1dNHL$RP1HP1dNHL$R01|H01dNXHL$R1OH1dN+HL$R0"H0dNHL$pR0H0dNHL$hR0H0dNHL$`R0H0dNwHL$XRp0nHp0dNJHL$PRP0AHP0dNHL$HR00H00dNHL$@R0H0dNHL$8R/H/dNHL$0R/H/dNiHL$(R/`H/dNHL$0apP5HpPdNHL$(aPPHPPdNHL$ a0PH0PdNHL$aPHPdNHL$aOHOdN]HL$aOTHOdN0HL$aO'HOdNHL$`OHOdNHL$`pOHpOdNHL$`POHPOdN|HL$`0OsH0OdNOHL$`OFHOdN"HL$`NHNdNHL$`NHNdNHL$`NHNdNHL$`NHNdNnHL$`pNeHpNdNAHL$`PN8HPNdNHL$`0N H0NdNHL$`NHNdNHL$`MHMdNHL$`MHMdN`HL$`MWHMdN3HL$x`M*HMdNHL$p`pMHpMdNHL$h`PMHPMdNHL$``0MH0MdNHL$X`MvHMdNRHL$P`LIHLdN%HL$H`LHLdNHL$@`LHLdNHL$8`LHLdNHL$0`pLHpLdNqHL$(`PLhHPLdNDHL$ `0L;H0LdNHL$`LHLdNHL$`KHKdNHL$`KHKdNHL$`KHKdNcHL$_KZHKdN6HL$_pK-HpKdN HL$_PKHPKdNHL$_0KH0KdNHL$_KHKdNHL$_JyHJdNUHL$_JLHJdN(HL$_JHJdNHL$_JHJdNHL$_pJHpJdNHL$_PJHPJdNtHL$_0JkH0JdNGHL$_J>HJdNHL$_IHIdNHL$_IHIdNHL$_IHIdNHL$x_IHIdNfHL$p_pI]HpIdN9HL$h_PI0HPIdN HL$`_0IH0IdNHL$X_IHIdNHL$P_HHHdNHL$H_H|HHdNXHL$@_HOHHdN+HL$8_H"HHdNHL$0_pHHpHdNHL$(_PHHPHdNHL$ _0HH0HdNwHL$_HnHHdNJHL$_GAHGdNHL$_GHGdNHL$_GHGdNHL$^GHGdNHL$^pGHpGdNiHL$^PG`HPGdNHT$|@*HT$|@HT$p|@HT$|@HT$@|@HT$|@HT$|@HT$x|@HT$|@HT$H|@vHT$|@bHT$|@NHT$|@:HT$|@&HT$P|@HT$|AHT$ |AHT$|AHT$|AHT$X| AHT$|(AHT$(|0AHT$|8ArHT$|@A^HT$`|HAJHT$|PA6HT$0|XA"HT$|`AHT$|hAHT$h|pAHT$|xAHT$8|AHT$|AHT$}AHT$p}AHT$}AnHT$@}AZHT$}AF1H YHngHngHngtHL$`^ @kH @dNGHL$X^@>H@dNHL$P^?H?dNHL$H^?H?dNHL$@^?H?dNHL$8^?H?dNfHL$0^`?]H`?dN9HL$(^@?0H@?dN HL$ ^ ?H ?dNHL$^?H?dNHL$^>H>dNHL$^>|H>dNXHL$]>OH>dN+HL$]>"H>dNHL$]`>H`>dNHL$]@>H@>dNHL$] >H >dNwHL$]>nH>dNJHL$]=AH=dNHL$]=H=dNHL$]=H=dNHL$]=H=dNHL$]`=H`=dNiHL$p]@=`H@=dN4*   !"#$%v&l'b(X)N*D+:,0-&./011ҹ1H)HBHB0HH3H~HgtHt$HD$@HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)HCHCHH3H~HgtHt$HD$%HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01@{f.HQ2HQ|AnHnHnq=kHnt1=ktXÿ@ԲkYH@ԲkNPԲkHPԲkNfH0QH0Q|AH*n Hn="kHnt1= ktXÿ@ԲkYH@ԲkN`PԲkoHPԲkN;fHPQHPQ|AiHn]Hn=rkHknt1=ZktXÿ@ԲJk5YH@ԲkN鰿PԲ,kHPԲkN苿fHpQ"HpQ|A^H nHna=kHێnt1=ktXÿ@ԲkYH@ԲkNPԲ|kHPԲkN۾fHQrHQ|A设 HznHfn豲=kHKnt1=ktXÿ@ԲkYH@ԲkNPPԲk_HPԲkN+fHQHQ|AYHnMH֍n=bkHnt1=JktXÿ@Բ:k%YH@ԲkN頽PԲkHPԲkN{fHQHQ|ANHZnHFnQ=kH+nt1=ktXÿ@ԲkuYH@ԲkNPԲlkHPԲkN˼fHQbHQ|A螼HʌnHn衰=kHnt1=ktXÿ@ԲkYH@ԲkN@PԲkOHPԲkNfHR貿HR|AIH:n=H&n=RkH nt1=:ktXÿ@Բ*kYH@ԲkN鐻PԲ kHPԲkNkfH0RH0R|A>HnHnA= kH{nt1= ktXÿ@Բz keYH@ԲkNPԲ\ kHPԲkN軺fHPRRHPR|A莺HnHn葮= kHnt1= ktXÿ@Բ kYH@ԲkN0PԲ k?HPԲkN fHpR袽HpR|A޹9Hn-Hvn=B kH[nt1=* ktXÿ@Բ kYH@ԲkN逹PԲ kHPԲkN[fH]dH%(HD$1H]|AyHnmH֔n!HL$p`]HnH`]dN͸HL$h@]ĨH@]dN蠸HL$` ]藨H ]dNsHL$X]jH]dNFHL$P\=H\dNHL$H\H\dNHL$@\H\dN迷HL$8\趧H\dN蒷HL$0`\艧H`\dNeHL$(@\\H@\dN8HL$  \/H \dN HL$\H\dN޶HL$[զH[dN豶HL$[訦H[dN脶HL$[{H[dNWHL$蹀[NH[dN*HL$เ`[!H`[dNHL$ع@[H@[dNеHL$й [ǥH [dN裵HL$[蚥H[dNvHL$ZmHZdNIHL$Z@HZdNHL$ZHZdNHL$ZHZdN´HL$x`Z蹤H`ZdN蕴HL$p@Z茤H@ZdNhHL$h Z_H ZdN;HL$`Z2HZdNHL$PYHYdNHL$@YأHYdN贳HL$0Y諣HYdN至HL$ Y~HYdNZHL$`YQH`YdN-HL$@Y$H@YdNHL$ YH YdNӲHL$YʢHYdN覲HL$X蝢HXdNyHL$踀XpHXdNLHL$฀XCHXdNHL$ظXHXdNHL$и`XH`XdNűHL$ȸ@X輡H@XdN蘱HL$ X菡H XdNkHL$XbHXdN>HL$W5HWdNHL$WHWdNHL$W۠HWdN跰HL$W讠HWdN芰HL$`W聠H`WdN]HL$x@WTH@WdN0HL$p W'H WdNHL$hWHWdN֯HL$`V͟HVdN詯HL$XV蠟HVdN|HL$PVsHVdNOHL$HVFHVdN"HL$@`VH`VdNHL$8@VH@VdNȮHL$0 V连H VdN蛮HL$(V蒞HVdNnHL$ UeHUdNAHL$U8HUdNHL$U HUdNHL$UޝHUdN躭HL$`U豝H`UdN荭HL$@U脝H@UdN`HL$ UWH UdN3HL$跀U*HUdNHL$වTHTdN٬HL$طTМHTdN謬HL$зT補HTdNHL$ȷTvHTdNRHL$`TIH`TdN%HL$@TH@TdNHL$ TH TdN˫HL$T›HTdN螫HL$S蕛HSdNqHL$ShHSdNDHL$S;HSdNHL$SHSdNHL$`SH`SdN轪HL$x@S贚H@SdN萪HL$p S臚H SdNcHL$hSZHSdN6HL$`R-HRdN HL$XRHRdNܩHL$PRәHRdN诩HL$HR覙HRdN肩HD$dH3%(uHؙHhdH%(HD$1Hh|A.良Hn}Hn1HL$hHޏnHhdNݨHL$`hԘH`hdN谨HL$@h觘H@hdN胨HL$ hzH hdNVHL$hMHhdN)HL$g HgdNHL$gHgdNϧHL$gƗHgdN袧HL$g虗HgdNuHL$`glH`gdNHHL$@g?H@gdNHL$ gH gdNHL$gHgdNHL$xf踖HfdN蔦HL$pf苖HfdNgHL$hf^HfdN:HL$`f1HfdN HL$X`fH`fdNHL$P@fוH@fdN賥HL$@ f誕H fdN膥HL$0f}HfdNYHL$ ePHedN,HL$e#HedNHL$eHedNҤHL$eɔHedN襤HL$`e蜔H`edNxHL$迀@eoH@edNKHL$࿀ eBH edNHL$пeHedNHL$dHddNģHL$d軓HddN藣HL$d莓HddNjHL$daHddN=HL$`d4H`ddNHL$@dH@ddNHL$x dڒH ddN趢HL$pd譒HddN艢HL$hc耒HcdN\HL$`cSHcdN/HL$Xc&HcdNHL$PcHcdNաHL$H`c̑H`cdN訡HL$@@c蟑H@cdN{HL$8 crH cdNNHL$0cEHcdN!HL$(bHbdNHL$ bHbdNǠHL$b辐HbdN蚠HL$b葐HbdNmHL$`bdH`bdN@HL$@b7H@bdNHL$辀 b H bdNHL$ྀbݏHbdN蹟HL$ؾa谏HadN茟HL$оa胏HadN_HL$ȾaVHadN2HL$a)HadNHL$`aH`adN؞HL$@aώH@adN諞HL$ a袎H adN~HL$auHadNQHL$`HH`dN$HL$`H`dNHL$`H`dNʝHL$`H`dN蝝HL$x``蔍H``dNpHL$p@`gH@`dNCHL$h `:H `dNHL$`` H`dNHL$X_H_dN輜HL$P_賌H_dN菜HL$H_膌H_dNbHL$@_YH_dN5HL$8`_,H`_dNHL$0@_H@_dNۛHL$( _ҋH _dN讛HL$ _襋H_dN聛HL$^xH^dNTHL$^KH^dN'HL$^H^dNHL$^H^dN͚HL$`^ĊH`^dN蠚HL$@^藊H@^dNsHL$轀 ^jH ^dNFHL$ཀ^=H^dNHL$ؽ]H]dNHL$н]H]dN这HL$Ƚ]趉H]dN蒙HD$dH3%(uHHhHh|AN詟HZn蝟HFnQ=jH+nt1=jtXÿ@ԲjuYH@ԲkNPԲljHPԲkN˘fHhbHh|A螘HnHn行=jHnt1=jtXÿ@ԲjůYH@ԲkN@PԲjOHPԲkNfHi貛Hi|AIH:n=H&n=RjH nt1=:jtXÿ@Բ*jYH@ԲkN鐗PԲ j蟫HPԲkNkfH0iH0i|A>虝H~n荝H~nA=jH{~nt1=jtXÿ@ԲzjeYH@ԲkNPԲ\jHPԲkN軖fHPtdH%(HD$1BHPt|A~ٜH n͜Hn聊=jHۈn=jHL$ t7H tdNHL$t HtdNHL$s݅HsdN蹕HL$s谅HsdN茕HL$s胅HsdN_HL$sVHsdN2HL$`s)H`sdNHL$@sH@sdNؔHL$ sτH sdN諔HL$s袄HsdN~HL$ruHrdNQHL$rHHrdN$HL$rHrdNHL$xrHrdNʓHL$p`rH`rdN蝓HL$h@r蔃H@rdNpHL$` rgH rdNCHL$Xr:HrdNHL$Pq HqdNHL$@qHqdN輒HL$0q賂HqdN菒HL$ q膂HqdNbHL$`qYH`qdN5HL$@q,H@qdNHL$ qH qdNۑHL$qҁHqdN讑HL$p襁HpdN聑HL$pxHpdNTHL$pKHpdN'HL$pHpdNHL$`pH`pdN͐HL$@pĀH@pdN蠐HL$ p藀H pdNsHL$pjHpdNFHL$o=HodNHL$xoHodNHL$poHodN迏HL$hoHodN蒏HL$``oH`odNeHL$X@o\H@odN8HL$P o/H odN HL$HoHodNގHL$@n~HndN豎HL$8n~HndN脎HL$0n{~HndNWHL$(nN~HndN*HL$ `n!~H`ndNHL$@n}H@ndNЍHL$ n}H ndN裍HL$n}HndNvHL$mm}HmdNIHL$m@}HmdNHL$m}HmdNHL$m|HmdNŒHL$`m|H`mdN蕌HL$@m|H@mdNhHL$ m_|H mdN;HL$m2|HmdNHL$l|HldNHL$l{HldN贋HL$l{HldN臋HL$l~{HldNZHL$`lQ{H`ldN-HL$@l${H@ldNHL$ lzH ldNӊHL$xlzHldN覊HL$pkzHkdNyHL$hkpzHkdNLHL$`kCzHkdNHL$XkzHkdNHL$P`kyH`kdNʼnHL$H@kyH@kdN蘉HL$@ kyH kdNkHL$8kbyHkdN>HL$0j5yHjdNHL$(jyHjdNHL$ jxHjdN跈HL$jxHjdN芈HL$`jxH`jdN]HL$@jTxH@jdN0HL$ j'xH jdNHL$jwHjdNևHL$iwHidN詇HL$iwHidN|HL$iswHidNOHL$iFwHidN"HL$`iwH`idNHL$@ivH@idNȆHD$dH3%(uYHÿPԲ/jšHPԲkN莆<@ԲjH@ԲkNdvf.HptHpt|A.艌Hxn}Hxn1z=jHxnt1=zjtXÿ@ԲjjUYH@ԲkNЅPԲLjߙHPԲkN諅fH dH%(HD$12H |AnɋHʃn轋Hnqy=jHn=jHL$l'uHdNHL$ltHdNքHL$ltHdN詄HL$ltHdN|HL$lpstHpdNOHL$lPFtHPdN"HL$l0tH0dNHL$lsHdNȃHL$l~sH~dN蛃HL$l~sH~dNnHL$l~esH~dNAHL$l~8sH~dNHL$lp~ sHp~dNHL$xlP~rHP~dN躂HL$pl0~rH0~dN荂HL$hl~rH~dN`HL$`l}WrH}dN3HL$Xl}*rH}dNHL$Pl}qH}dNفHL$@l}qH}dN謁HL$0lp}qHp}dNHL$ lP}vqHP}dNRHL$l0}IqH0}dN%HL$l}qH}dNHL$k|pH|dNˀHL$k|pH|dN螀HL$k|pH|dNqHL$k|hpH|dNDHL$kp|;pHp|dNHL$kP|pHP|dNHL$k0|oH0|dNHL$k|oH|dNHL$k{oH{dNcHL$k{ZoH{dN6HL$k{-oH{dN HL$xk{oH{dN~HL$pkp{nHp{dN~HL$hkP{nHP{dN~HL$`k0{ynH0{dNU~HL$Xk{LnH{dN(~HL$PkznHzdN}HL$HkzmHzdN}HL$@kzmHzdN}HL$8kzmHzdNt}HL$0kpzkmHpzdNG}HL$(kPz>mHPzdN}HL$ k0zmH0zdN|HL$kzlHzdN|HL$kylHydN|HL$jylHydNf|HL$jy]lHydN9|HL$jy0lHydN |HL$jpylHpydN{HL$jPykHPydN{HL$j0ykH0ydN{HL$jy|kHydNX{HL$jxOkHxdN+{HL$jx"kHxdNzHL$jxjHxdNzHL$jxjHxdNzHL$jpxjHpxdNwzHL$jPxnjHPxdNJzHL$j0xAjH0xdNzHL$jxjHxdNyHL$jwiHwdNyHL$xjwiHwdNyHL$pjwiHwdNiyHL$hjw`iHwdNbHdNrHپxpbHpdNqHپxPaHPdNqHپx0aH0dNqHپxaHdNnqHپxgaHdNCqHپxЎHИdNNHL$>HdNNHL$>HdN_NHL$pV>HpdN2NHL$P)>HPdNNHL$0=H0dNMHL$x=HdNMHL$p=HdN~MHL$hЗu=HЗdNQMHL$`H=HdN$MHL$X=HdNLHL$Pp<HpdNLHL$HP<HPdNLHL$@0<H0dNpLHL$8g<HdNCLHL$0:<HdNLHL$(Ж <HЖdNKHL$ ;HdNKHL$;HdNKHL$p;HpdNbKHL$PY;HPdN5KHL$0,;H0dNKHL$:HdNJHL$:HdNJHL$老Е:HЕdNJHL$x:HdNTJHL$؀K:HdN'JHL$Ѐp:HpdNIHL$ȀP9HPdNIHT$мwYPHT$wȓEPHT$wГ1PHT$wؓPHT$w PHT$w蓶OHT$wOHT$wOHT$wOHT$wOHT$wOHT$w}OHT$w iOHT$w(UOHT$w0AOHT$w8-OHT$w@OHT$xHOHT$xPNHT$xXNHT$ x`NHT$xhNHT$xpNHT$xxNHT$xyNHT$ xeNHT$$xQNHT$(x=NHT$,x)NHT$0xNHT$4xNHT$8xMHT$4*   !"#v$l11H)HHHH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^@H@H|A<9CH]n-CH]n0=BjH]nt1=*jtXÿ@ԲjTYH@ԲkN#HdN3HL$p#HpdN2HL$P"HPdN2HL$0"H0dN2HL$"HdNf2HL$]"HdN92HL$н0"HнdN 2HL$"HdN1HL$x!HdN1HL$pp!HpdN1HL$hP|!HPdNX1HL$`0O!H0dN+1HL$X"!HdN0HL$P HdN0HL$Hм HмdN0HL$@ HdNw0HL$8n HdNJ0HL$0pA HpdN0HL$(P HPdN/HL$ 0H0dN/HL$HdN/HL$HdNi/HL$л`HлdN.HT${*.HT${.H100[e'HT${-HT${ȵ-HT${е-HT${ص-HT${൶-HT${赶-HT${y-HT${e-HT${Q-HT$|=-HT$|)-HT$|-HT$&| -HT$0|(,HT$:|0,HT$D|8,HT$N|@,HT$X|H,HT$b|P,HT$l|Xu,HT$v|`a,HT$|hM,HT$|p9,HT$|x%,HT$|,HT$|+HT$|+HT$|+HT$|+HT$|+HT$|+HT$|+HT$zq+HT${ȶ]+HT${жI+HT${ض5+HT$"{බ!+HT$,{趶 +HT$6{*HT$@{*HT$J{*HT$T{*HT$^{*HT$h{*HT$r{ *HT$|{(m*HT${0Y*HT${8E*HT${@1*HT${H*H1/[l#HT$})H AD#HT$|)HT$`|)HT$|)HT$0|)HT$| )HT$|(l)HT$h|0X)HT$|8D)HT$8|@0)HT$|H)HT$|P)HT$p|X(HT$|`(HT$@|h(HT$|p(HT$|x(HT$x|(HT$||(HT$H|h(HT$|T(HT$|@(HT$|,(HT$|(HT$P|(HT$|'HT$ |ȴ'HT$|д'HT$|ش'HT$X|ശ'HT$|贶'HT$(|x'HT$|d'HT$|P'HT$`|<'HT$|('HT$0|'HT$| 'HT$|(&HT$h|0&HT$|8&HT$8|@&HT$|H&HT$}P&HT$p}Xt&HT$}``&HT$@}hL&HT$}p8&1H0/[HISngHFSngHCSngfHL$P]HdN9HL$H0HdN HL$@pHpdNHL$8PHPdNHL$00H0dNHL$(|HdNXHL$ OHdN+HL$в"HвdNHL$ HdNHL$ HdNHL$p HpdNwHL$Pn HPdNJHL$0A H0dNHL$蕁 HdNHL$ HdNHL$ؕб HбdNHL$Е HdNiHL$ȕ` HdN<HL$p3 HpdNHL$P HPdNHL$0 H0dNHL$ HdNHL$ HdN[HL$аR HаdN.HL$% HdNHL$ HdNHL$p HpdNHL$xP HPdNzHL$p0q H0dNMHL$hD HdN HL$` HdNHL$XЯ HЯdNHL$P HdNHL$H HdNlHL$@pc HpdN?HL$8P6 HPdNHL$00 H0dNHL$(HdNHL$ HdNHL$ЮHЮdN^HL$UHdN1HL$(HdNHL$pHpdNHL$PHPdNHL$0H0dN}HL$蔁tHdNPHL$GHdN#HL$ؔЭHЭdNHL$ДHdNHL$ȔHdNHL$pHpdNoHL$PfHPdNBHL$09H0dNHL$ HdNHL$HdNHL$ЬHЬdNHL$HdNaHL$XHdN4HL$p+HpdNHL$xPHPdNHL$p0H0dNHL$hHdNHL$`wHdNSHL$XЫJHЫdN&HL$PHdNHL$HHdNHL$@pHpdNHL$8PHPdNrHL$00iH0dNEHL$(<HdNHL$ HdNHL$ЪHЪdNHL$HdNHL$HdNdHL$p[HpdN7HL$P.HPdN HL$0H0dNHL$蓁HdNHL$HdNHL$ؓЩzHЩdNVHL$ГMHdN)HL$ȓ HdNHL$pHpdNHL$PHPdNHL$0H0dNuHL$lHdNHHL$?HdNHL$ШHШdNHL$HdNHL$HdNHL$pHpdNgHL$xP^HPdN:HL$p01H0dN HL$hHdNHL$`HdNHL$XЧHЧdNHL$P}HdNYHL$HPHdN,HL$@p#HpdN HL$8PHPdN HL$00H0dN HL$(HdNx HL$ oHdNK HL$ЦBHЦdN HL$HdN HL$HdN HT$мwPHT$w<HT$w(HT$wHT$w HT$w(HT$w0HT$w8HT$w@HT$wHHT$wPHT$wXtHT$w``HT$whLHT$wp8HT$wx$HT$wHT$xHT$xHT$xHT$ xHT$xHT$xHT$xHT$xpHT$ xȥ\HT$$xХHHT$(xإ4HT$,xॶ HT$0x襶 HT$4xHT$8xHT$HL$ुpƶ5HpƶdNHL$إPƶHPƶdNHL$Х0ƶH0ƶdNHL$ȥƶHƶdNHL$ŶHŶdN]HL$ŶTHŶdN0HL$Ŷ'HŶdNHL$ŶHŶdNHL$pŶHpŶdNHL$PŶHPŶdN|HL$0ŶsH0ŶdNOHL$ŶFHŶdN"HL$ĶHĶdNHL$xĶHĶdNHD$dH3%(uYHÿPԲ/HL$޶5H޶dNHL$p޶Hp޶dNHL$P޶ۼHP޶dNHL$0޶讼H0޶dNHL$x޶聼H޶dN]HT$мwܶHT$wܶHT$wܶHT$wܶHT$wܶHT$wܶHT$wܶqHT$wܶ]HT$wܶIHT$wܶ5HT$wܶ!HT$wܶ HT$wܶHT$wܶHT$wܶHT$wܶHT$wݶHT$xݶHT$xݶHT$xݶmHT$ x ݶYHT$x(ݶEHT$x0ݶ1HT$x8ݶHT$x@ݶ HT$ xHݶHT$$xPݶHT$(xXݶHT$,x`ݶHT$0xhݶHT$4xpݶHT$8xxݶ}HT$4*   !"#v$l11H)H̀ܶHܶHH3H~HgtHt$HD$&HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^@H2H|AnH*)nH)nq=jH(nt1=jtXÿ@ԲjYH@ԲkNPԲjHPԲkNfS H dH%(HD$1qH |A譾HqJnH]Jn谲=jHBJn7=jK7HT$}h Hh AGHL$(ہP >HP dNHL$ ہ0 H0 dNHL$ہ H dNHL$ہ 跭H dN蓽HL$ہ 芭H dNfHL$ہ ]H dN9HL$ځ 0H dN HL$ځp Hp dN߼HL$ځP ֬HP dN貼HL$ځ0 詬H0 dN腼HL$ځ |H dNXHL$ځ OH dN+HL$ځ "H dNHL$ځ H dNѻHL$ځ ȫH dN褻HL$ځp 蛫Hp dNwHL$ځP nHP dNJHL$ځ0 AH0 dNHL$ځ H dNHL$ځ H dNúHL$ځ 躪H dN薺HL$ځ 荪H dNiHL$xځ `H dNHT$y`*HT$yhHT$ypHT$zxHT$ zڳHT$zƳHT$z貳HT$(z螳HT$2z芳HT$wHL$x05gH0dNwHL$pgHdNvHL$`fHdNvHL$PfHdNvHL$@fHdN]vHL$0TfHdN0vHL$ p'fHpdNvHL$PeHPdNuHL$0eH0dNuHL$eHdN|uHL$seHdNOuHL$FeHdN"uHL$eHdNtHL$褂dHdNtHL$ंpdHpdNtHL$ؤPdHPdNntHL$Ф0edH0dNAtHL$Ȥ8dHdNtHL$ dHdNsHL$cHdNsHL$cHdNsHL$cHdN`sHL$pWcHpdN3sHL$P*cHPdNsHL$0bH0dNrHL$xbHdNrHL$pbHdNrHL$hvbHdNRrHL$`IbHdN%rHL$XbHdNqHL$PpaHpdNqHL$HPaHPdNqHL$@0aH0dNqqHL$8haHdNDqHL$0;aHdNqHL$(aHdNpHL$ `HdNpHL$`HdNpHL$p`HpdNcpHL$PZ`HPdN6pHL$0-`H0dN pHL$`HdNoHL$_HdNoHL$裂_HdNoHL$ࣂy_HdNUoHL$أL_HdN(oHL$Уp_HpdNnHL$ȣP^HPdNnHL$0^H0dNnHL$^HdNtnHL$k^HdNGnHL$>^HdNnHL$^HdNmHL$]HdNmHL$p]HpdNmHL$P]HPdNfmHL$0]]H0dN9mHL$x0]HdN mHL$p ]H dNlHL$h \H dNlHL$` \H dNlHL$X |\H dNXlHD$dH3%(uYHÿPԲiRHPԲkNl<@ԲixH@ԲkNkZ\f.HoH|AHkf.S5H dH%(HD$1AoH5|A}kqHYnqHEn_=iH*n*=ŽiJ*HL$p56[Hp5dNkHL$xP5 [HP5dNjHL$p05ZH05dNjHL$h5ZH5dNjHL$`4ZH4dN^jHL$X4UZH4dN1jHL$P4(ZH4dNjHL$H4YH4dNiHL$@p4YHp4dNiHL$8P4YHP4dN}iHL$004tYH04dNPiHL$ 4GYH4dN#iHL$3YH3dNhHL$3XH3dNhHL$3XH3dNhHL$3XH3dNohHL$p3fXHp3dNBhHL$P39XHP3dNhHL$03 XH03dNgHL$3WH3dNgHL$2WH2dNgHL$2WH2dNagHL$2XWH2dN4gHL$2+WH2dNgHL$p2VHp2dNfHL$P2VHP2dNfHL$x02VH02dNfHL$p2wVH2dNSfHL$`1JVH1dN&fHL$P1VH1dNeHL$@1UH1dNeHL$01UH1dNeHL$ p1UHp1dNreHL$P1iUHP1dNEeHL$01HP!dNNHL$0!>H0!dNNHL$߂!>H!dNkNHL$߂ b>H dN>NHL$߂ 5>H dNNHL$߂ >H dNMHL$߂ =H dNMHL$߂p =Hp dNMHL$߂P =HP dN]MHL$߂0 T=H0 dN0MHL$߂ '=H dNMHL$߂<HdNLHL$߂<HdNLHL$߂<HdN|LHL$߂s<HdNOLHL$߂pF<HpdN"LHL$߂P<HPdNKHL$߂0;H0dNKHL$x߂;HdNKHL$p߂;HdNnKHL$h߂e;HdNAKHL$`߂8;HdNKHL$X߂ ;HdNJHL$P߂p:HpdNJHL$H߂P:HPdNJHL$@߂0:H0dN`JHL$8߂W:HdN3JHL$0߂*:HdNJHL$(߂9HdNIHL$ ߂9HdNIHL$߂9HdNIHL$߂pv9HpdNRIHL$߂PI9HPdN%IHT$мwOHT$wOHT$wOHT$wuOHT$waOHT$wMOHT$w9OHT$w%OHT$wOHT$wNHT$wNHT$wNHT$w NHT$w(NHT$w0NHT$w8NHT$w@qNHT$xH]NHT$xPINHT$xX5NHT$ x`!NHT$xh NHT$xpMHT$xxMHT$xMHT$ xMHT$$xMHT$(xMHT$,xMHT$0xmMHT$4xYMHT$8xEMHT$4*   !"#v$l11H)HHHH3H~HgtHt$HD$>HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S`QH dH%(HD$1?H`Q|A H>dNpHL$>gH>dNCHL$>:H>dNHL$> H>dNHL$`> H`>dNHL$@> H@>dNHL$p > H >dNbHL$`>Y H>dN5HL$P=, H=dNHL$@= H=dNHL$8= H=dNHL$0= H=dNHL$(`=x H`=dNTHL$ @=K H@=dN'HL$ = H =dNHL$= H=dNHL$< H<dNHL$< H<dNsHL$<j H<dNFHL$<= H<dNHL$`< H`<dNHL$@< H@<dNHL$ < H <dNHL$< H<dNeHL$;\ H;dN8HL$;/ H;dN HL$; H;dNHL$; H;dNHL$`; H`;dNHL$x@;{ H@;dNWHL$p ;N H ;dN*HL$h;! H;dNHL$`:H:dNHL$P:H:dNHL$@:H:dNvHL$8:mH:dNIHL$0`:@H`:dNHL$(@:H@:dNHL$  :H :dNHL$:H:dNHL$9H9dNhHL$9_H9dN;HL$92H9dNHL$9H9dNHL$`9H`9dNHL$@9H@9dNHL$ 9~H 9dNZHL$9QH9dN-HL$8$H8dNHL$8H8dNHL$8H8dNHL$8H8dNyHL$`8pH`8dNLHL$@8CH@8dNHL$ 8H 8dNHL$8H8dNHL$7H7dNHL$7H7dNkHL$7bH7dN>HL$x75H7dNHL$p`7H`7dNHL$h@7H@7dNHL$` 7H 7dNHL$X7H7dN]HL$P6TH6dN0HL$H6'H6dNHL$@6H6dNHL$86H6dNHL$0`6H`6dN|HL$(@6sH@6dNOHL$  6FH 6dN"HL$6H6dNHL$5H5dNHL$5H5dNHD$dH3%(uZH [ÿ@Բci(H@ԲkN`PԲcij%HPԲkN6U1H)H@H@t1HH3H~HgtHt$HD$[uHD$ͺH 맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H̀BHBHH3H~HgtHt$HD$sHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S mH dH%(HD$1aH m|A HmHm=_iHm*=^iJ*HL$@lVHldN2 HL$8l)HldN HL$0lHldN HL$(lHldN HL$ plHpldN~ HL$PluHPldNQ HL$0lHH0ldN$ HL$lHldN HL$kHkdN HL$kHkdN HL$kHkdNp HL$kgHkdNC HL$pk:HpkdN HL$Pk HPkdN HL$0kH0kdN HL$kHkdN HL$jHjdNb HL$jYHjdN5 HL$j,HjdN HL$jHjdNHL$pjHpjdNHL$PjHPjdNHL$0jxH0jdNTHL$jKHjdN'HL$iHidNHL$xiHidNHL$piHidNHL$hiHidNsHL$`pijHpidNFHL$XPi=HPidNHL$P0iH0idNHL$HiHidNHL$@hHhdNHL$8hHhdNeHL$0h\HhdN8HL$(h/HhdN HL$ phHphdNHL$PhHPhdNHL$0hH0hdNHL$h{HhdNWHL$gNHgdN*HL$g!HgdNHL$gHgdNHL$gHgdNHL$pgHpgdNvHL$PgmHPgdNIHL$0g@H0gdNHL$gHgdNHL$fHfdNHL$fHfdNHL$fHfdNhHL$f_HfdN;HL$pf2HpfdNHL$PfHPfdNHL$0fH0fdNHL$fHfdNHL$e~HedNZHL$xeQHedN-HL$pe$HedNHL$heHedNHL$`peHpedNHL$XPeHPedNyHL$P0epH0edNLHL$HeCHedNHL$@dHddNHL$8dHddNHL$0dHddNHL$(dHddNkHL$ pdbHpddN>HL$Pd5HPddNHL$0dH0ddNHL$dHddNHL$cHcdNHL$cHcdN]HL$cTHcdN0HL$c'HcdNHL$pcHpcdNHL$PcHPcdNHL$0cH0cdN|HL$csHcdNOHL$bFHbdN"HL$bHbdNHL$bHbdNHL$bHbdNHL$pbHpbdNnHL$PbeHPbdNAHL$0b8H0bdNHL$b HbdNHL$aHadNHL$xaHadNHL$paHadN`HL$haWHadN3HL$`pa*HpadNHL$XPaHPadNHL$P0aH0adNHL$HaHadNHL$@`vH`dNRHL$8`IH`dN%HL$0`H`dNHL$(`H`dNHL$ p`Hp`dNHL$P`HP`dNqHL$0`hH0`dNDHL$`;H`dNHL$_H_dNHL$_H_dNHT$мw@^IHT$wH^5HT$wP^!HT$wX^ HT$w`^HT$wh^HT$wp^HT$wx^HT$w^HT$w^HT$w^HT$w^mHT$w^YHT$w^EHT$w^1HT$w^HT$w^ HT$x^HT$x^HT$x^HT$ x^HT$x^HT$x^HT$x^}HT$x_iHT$ x_UHT$$x_AHT$(x_-HT$,x _HT$0x(_HT$4x0_HT$8x8_HT$HL$@Y5H@YdNHL$ YH YdNHL$YHYdNHL$XHXdNHL$XHXdN]HL$XTHXdN0HL$X'HXdNHL$`XH`XdNHL$@XH@XdNHL$ XH XdN|HL$xXsHXdNOHL$pWFHWdN"HL$hWHWdNHL$`WHWdNHL$XWHWdNHL$P`WH`WdNnHL$H@WeH@WdNAHL$@ W8H WdNHL$8W HWdNHL$0VHVdNHL$(VHVdNHL$ VHVdN`HL$VWHVdN3HL$`V*H`VdNHL$@VH@VdNHL$ VH VdNHL$VHVdNHL$UvHUdNRHL$UIHUdN%HL$UHUdNHL$UHUdNHL$`UH`UdNHL$@UH@UdNqHL$ UhH UdNDHL$U;HUdNHL$THTdNHL$THTdNHL$THTdNHL$THTdNcHL$`TZH`TdN6HL$x@T-H@TdN HL$p TH TdNHL$hTHTdNHL$`SHSdNHL$XSyHSdNUHL$PSLHSdN(HL$HSHSdNHL$@`SH`SdNHL$8@SH@SdNHL$0 SH SdNtHL$(SkHSdNGHL$ R>HRdNHL$RHRdNHL$RHRdNHL$RHRdNHL$`RH`RdNfHL$@R]H@RdN9HL$ R0H RdN HL$RHRdNHL$QHQdNHL$QHQdNHL$Q|HQdNXHL$QOHQdN+HD$dH3%(uZH [ÿ@Բ4itH@ԲkNPԲg4iHPԲkNU,1H)H̀\H\t1HH3H~HgtHt$HD$OHD$ͺH맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H@^H@^HH3H~HgtHt$HD$>NHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S H dH%(HD$1H |A-Hm|Hum0=/iHZm*=u/iJ*HL$HdNHL$ЈHЈdNHL$HdNhHL$_HdN;HL$p2HpdNHL$PHPdNHL$0H0dNHL$HdNHL$~HdNZHL$ЇQHЇdN-HL$$HdNHL$HdNHL$pHpdNHL$PHPdNyHL$0pH0dNLHL$xCHdNHL$pHdNHL$hІHІdNHL$`HdNHL$PHdNkHL$@pbHpdN>HL$0P5HPdNHL$ 0H0dNHL$HdNHL$HdNHL$ЅHЅdN]HL$ THdN0HL$ 'HdNHL$ pHpdNHL$ PHPdNHL$ 0H0dN|HL$ sHdNOHL$ FHdN"HL$ ЄHЄdNHL$ HdNHL$ HdNHL$ pHpdNnHL$x PeHPdNAHL$p 08H0dNHL$h  HdNHL$` HdNHL$X ЃHЃdNHL$P HdN`HL$H WHdN3HL$@ p*HpdNHL$8 PHPdNHL$0 0H0dNHL$ HdNHL$ vHdNRHL$ ЂIHЂdN%HL$ HdNHL$ HdNHL$ pHpdNHL$ PHPdNqHL$ 0hH0dNDHL$ ;HdNHL$ HdNHL$ ЁHЁdNHL$ HdNHL$ HdNcHL$ pZHpdN6HL$ P-HPdN HL$ 0H0dNHL$ HdNHL$ HdNHL$ ЀyHЀdNUHL$ LHdN(HL$x HdNHL$p pHpdNHL$h PHPdNHL$` 0H0dNtHL$X kHdNGHL$P >HdNHL$H HdNHL$@ HdNHL$8 跿HdNHL$0 p芿HpdNfHL$( P]HPdN9HL$ 00H0dN HL$ HdNHL$ ~־H~dNHL$ ~詾H~dNHL$ ~|H~dNXHL$ ~OH~dN+HL$ p~"Hp~dNHL$ P~HP~dNHL$ 0~ȽH0~dNHL$ ~蛽H~dNwHL$ }nH}dNJHL$ }AH}dNHL$ }H}dNHL$ }H}dNHL$ p}躼Hp}dNHL$ P}荼HP}dNiHL$ 0}`H0}dN4*   !"#v$l11H)H@oH@oHH3H~HgtHt$HD$(HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.S H dH%(HD$1聱H |A轭Hm Hm=!iHm*=iJ*HL$pvHdNRHL$hФIHФdN%HL$`HdNHL$XHdNˬHL$PpœHpdN螬HL$HP蕜HPdNqHL$@0hH0dNDHL$8;HdNHL$0HdNHL$(УHУdN轫HL$ 贛HdN萫HL$臛HdNcHL$pZHpdN6HL$P-HPdN HL$0H0dNܪHL$ӚHdN诪HL$覚HdN肪HL$ТyHТdNUHL$LHdN(HL$HdNHL$pHpdNΩHL$PřHPdN衩HL$0蘙H0dNtHL$kHdNGHL$x>HdNHL$pСHСdNHL$hHdNHL$`跘HdN蓨HL$Pp芘HpdNfHL$@P]HPdN9HL$000H0dN HL$ HdNߧHL$֗HdN貧HL$Р詗HРdN腧HL$|HdNXHL$OHdN+HL$p"HpdNHL$PHPdNѦHL$0ȖH0dN褦HL$蛖HdNwHL$nHdNJHL$ПAHПdNHL$HdNHL$HdNåHL$p躕HpdN薥HL$P荕HPdNiHL$0`H0dN4*   !"#v$l11H)H@H@HH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1H|AM~訄Him蜄HUmPr=hH:m*=hJ*HL$p(nHdN}HL$h(mHdN}HL$`(pmHpdN}HL$X(PmHPdN[}HL$P(0RmH0dN.}HL$H(%mHdN}HL$@(lHdN|HL$8(пlHпdN|HL$0(lHdNz|HL$((qlHdNM|HL$ (pDlHpdN |HL$(PlHPdN{HL$(0kH0dN{HL$(kHdN{HL$(kHdNl{HL$'оckHоdN?{HL$'6kHdN{HL$' kHdNzHL$'pjHpdNzHL$'PjHPdNzHL$'0jH0dN^zHL$'UjHdN1zHL$'(jHdNzHL$'нiHнdNyHL$'iHdNyHL$'iHdN}yHL$'ptiHpdNPyHL$'PGiHPdN#yHL$'0iH0dNxHL$'hHdNxHL$'hHdNxHL$x'мhHмdNoxHL$p'fhHdNBxHL$h'9hHdNxHL$`'p hHpdNwHL$X'PgHPdNwHL$P'0gH0dNwHL$H'gHdNawHL$@'XgHdN4wHL$8'л+gHлdNwHL$0'fHdNvHL$('fHdNvHL$ 'pfHpdNvHL$'PwfHPdNSvHL$'0JfH0dN&vHL$'fHdNuHL$'eHdNuHL$&кeHкdNuHL$&eHdNruHL$&ieHdNEuHL$&p4*   !"#v$l11H)HHHH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SܷH dH%(HD$1RHܷ|AN8UHm,UHmB=AhHm*=%hJ*HL$p6pܷ>HpܷdNrNHL$h6Pܷi>HPܷdNENHL$`60ܷ<>H0ܷdNNHL$X6ܷ>HܷdNMHL$P6۷=H۷dNMHL$H6۷=H۷dNMHL$@6۷=H۷dNdMHL$86۷[=H۷dN7MHL$06p۷.=Hp۷dN MHL$(6P۷=HP۷dNLHL$ 60۷<H0۷dNLHL$6۷<H۷dNLHL$6ڷz<HڷdNVLHL$6ڷM<HڷdN)LHL$6ڷ <HڷdNKHL$5ڷ;HڷdNKHL$5pڷ;HpڷdNKHL$5Pڷ;HPڷdNuKHL$50ڷl;H0ڷdNHKHL$5ڷ?;HڷdNKHL$5ٷ;HٷdNJHL$5ٷ:HٷdNJHL$5ٷ:HٷdNJHL$5ٷ:HٷdNgJHL$5pٷ^:HpٷdN:JHL$5Pٷ1:HPٷdN JHL$50ٷ:H0ٷdNIHL$5ٷ9HٷdNIHL$5ط9HطdNIHL$5ط}9HطdNYIHL$5طP9HطdN,IHL$x5ط#9HطdNHHL$p5pط8HpطdNHHL$h5Pط8HPطdNHHL$`50ط8H0طdNxHHL$X5طo8HطdNKHHL$P5׷B8H׷dNHHL$H5׷8H׷dNGHL$@5׷7H׷dNGHL$85׷7H׷dNGHL$05p׷7Hp׷dNjGHL$(5P׷a7HP׷dN=GHL$ 50׷47H0׷dNGHL$5׷7H׷dNFHL$5ַ6HַdNFHL$5ַ6HַdNFHL$5ַ6HַdN\FHL$4ַS6HַdN/FHL$4pַ&6HpַdNFHL$4Pַ5HPַdNEHL$40ַ5H0ַdNEHL$4ַ5HַdN{EHL$4շr5HշdNNEHL$4շE5HշdN!EHL$4շ5HշdNDHL$4շ4HշdNDHL$4pշ4HpշdNDHL$4Pշ4HPշdNmDHL$40շd4H0շdN@DHL$4շ74HշdNDHL$4Է 4HԷdNCHL$4Է3HԷdNCHL$4Է3HԷdNCHL$x4Է3HԷdN_CHL$p4pԷV3HpԷdN2CHL$h4PԷ)3HPԷdNCHL$`40Է2H0ԷdNBHL$X4Է2HԷdNBHL$P4ӷ2HӷdN~BHL$H4ӷu2HӷdNQBHL$@4ӷH2HӷdN$BHL$84ӷ2HӷdNAHL$04pӷ1HpӷdNAHL$(4Pӷ1HPӷdNAHL$ 40ӷ1H0ӷdNpAHL$4ӷg1HӷdNCAHL$4ҷ:1HҷdNAHL$4ҷ 1HҷdN@HL$4ҷ0HҷdN@HL$3ҷ0HҷdN@HL$3pҷ0HpҷdNb@HL$3PҷY0HPҷdN5@HL$30ҷ,0H0ҷdN@HL$3ҷ/HҷdN?HL$3ѷ/HѷdN?HL$3ѷ/HѷdN?HL$3ѷx/HѷdNT?HL$3ѷK/HѷdN'?HL$3pѷ/HpѷdN>HL$3Pѷ.HPѷdN>HL$30ѷ.H0ѷdN>HL$3ѷ.HѷdNs>HL$3зj.HзdNF>HL$3з=.HзdN>HL$3з.HзdN=HL$x3з-HзdN=HL$p3pз-HpзdN=HL$h3Pз-HPзdNe=HL$`30з\-H0зdN8=HL$X3з/-HзdN =HL$P3Ϸ-HϷdNHT$xx8Ϸ>HT$|x@Ϸ>HT$ЀxHϷ>H1']8HT$Єx̷>HT$Јx̷|>HT$Ќx̷h>HT$Аx̷T>HT$Дx ̷@>HT$Иx(̷,>HT$Мx0̷>HT$Рx8̷>HT$Фx@̷=HT$ШxH̷=HT$ЬxP̷=HT$аxX̷=HT$дx`̷=HT$иxh̷=HT$мxp̷x=HT$xx̷d=HT$x̷P=HT$x̷<=HT$x̷(=HT$x̷=HT$x̷=HT$x̷4*   !"#v$l11H)HͷHͷHH3H~HgtHt$HD$~HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$11#H|Am%HIm%H5mp=qhHm*=qhJ*HL$0Cp&HpdNHL$(CPHPdNHL$ C0H0dNHL$CHdN{HL$CrHdNNHL$CEHdN!HL$CHdNHL$B HdNHL$Bp HpdNHL$BP HPdNmHL$B0d H0dN@HL$B7 HdNHL$B HdNHL$B HdNHL$B HdNHL$B HdN_HL$BpV HpdN2HL$BP) HPdNHL$B0 H0dNHL$B HdNHL$pB HdN~HL$`Bu HdNQHL$PBH HdN$HL$@B HdNHL$8Bp HpdNHL$0BP HPdNHL$(B0 H0dNpHL$ Bg HdNCHL$B: HdNHL$B HdNHL$A HdNHL$A HdNHL$Ap HpdNbHL$APY HPdN5HL$A0, H0dNHL$AHdNHL$AHdNHL$AHdNHL$AxHdNTHL$AKHdN'HL$ApHpdNHL$APHPdNHL$A0H0dNHL$xAHdNsHL$pAjHdNFHL$hA=HdNHL$`AHdNHL$PAHdNHL$@ApHpdNHL$8APHPdNeHL$0A0\H0dN8HL$(A/HdN HL$ AHdNHL$AHdNHL$AHdNHL$A{HdNWHL$ApNHpdN*HL$@P!HPdNHL$@0H0dNHL$@HdNHL$@HdNvHL$@mHdNIHL$@@HdNHL$@HdNHL$@pHpdNHL$@PHPdNHL$@0H0dNhHL$@_HdN;HL$@2HdNHL$@HdNHL$@HdNHL$@HdNHL$@p~HpdNZHL$x@PQHPdN-HL$p@0$H0dNHL$h@HdNHL$`@HdNHL$X@HdNyHL$P@pHdNLHL$H@CHdNHL$@@pHpdNHL$8@PHPdNHL$0@0H0dNHL$(@HdNkHL$ @bHdN>HL$@5HdNHL$@HdNHL$@HdNHL$@pHpdNHL$?PHPdN]HL$?0TH0dN0HL$?'HdNHL$?HdNHL$?HdNHL$?HdN|HL$?sHdNOHL$?pFHpdN"HL$?PHPdN HL$?0H0dN HL$?HdN HL$?HdNn HL$?eHdNA HL$?8HdN HL$? HdN HL$?pHpdN HL$x?PHPdN HL$p?0H0dN` HL$h?WHdN3 HL$`?*HdN HL$X?HdN HL$P?HdN HL$H?HdN HL$@?pvHpdNR HL$8?PIHPdN% HL$0?0H0dN HL$(?HdN HL$ ?HdN HL$?HdNq HL$?hHdND HL$?;HdN HL$?pHpdN HL$>PHPdN HL$>0H0dN HL$>HdNc HL$>ZHdN6 HL$>-HdN HL$>HdNHL$>HdNHL$>pHpdNHL$>PyHPdNUHL$>0LH0dN(HL$>HdNHL$>HdNHL$>HdNHL$>HdNtHL$>kHdNGHL$>p>HpdNHL$x>PHPdNHL$p>0H0dNHL$h>HdNHL$`>HdNfHL$X>]HdN9HL$P>0HdN HL$H>HdNHL$@>pHpdNHL$8>PHPdNHL$0>0|H0dNXHL$(>OHdN+HL$ >"HdNHL$>HdNHL$>HdNHL$>HdNwHL$>pnHpdNJHL$=PAHPdNHL$=0H0dNHL$=HdNHL$=HdNHL$=HdNiHL$=`HdN<HL$=3HdNHL$=pHpdNHL$=PHPdNHL$=0H0dNHL$=HdN[HL$=RHdN.HL$=%HdNHL$=HdNHL$=HdNHL$=pHpdNzHL$x=PqHPdNMHL$p=0DH0dN HL$h=HdNHL$`=HdNHL$X=HdNHL$P=HdNlHL$H=cHdN?HL$@=p6HpdNHL$8=P HPdNHL$0=0H0dNHL$(=HdNHL$ =HdN^HL$=UHdN1HL$=(HdNHL$=HdNHL$=pHpdNHL$<PHPdN}HL$<0tH0dNPHL$<GHdN#HL$<HdNHL$<HdNHL$<HdNHL$<HdNoHL$<pfHpdNBHL$<P9HPdNHT$мw޷HT$w޷HT$w޷yHT$w޷eHT$w޷QHT$w޷=HT$w޷)HT$w޷HT$w߷HT$w߷HT$w߷HT$w߷HT$w ߷HT$w(߷HT$w0߷HT$w8߷uHT$w@߷aHT$xH߷MHT$xP߷9HT$xX߷%HT$ x`߷HT$xh߷HT$xp߷HT$xx߷HT$x߷HT$ x߷HT$$x߷HT$(x߷HT$,x߷qHT$0x߷]HT$4x߷IHT$8x߷5HT$4*   !"#v$l11H)H޷H޷HH3H~HgtHt$HD$HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.f.SH dH%(HD$1H|AXHmLHm=aBhHʂm*=EBh*HL$RHdNHL$QpHpdNeHL$QP\HPdN8HL$Q0/H0dN HL$QHdNHL$QHdNHL$QHdNHL$Q{HdNWHL$QNHdN*HL$Qp!HpdNHL$QPHPdNHL$Q0H0dNHL$QHdNvHL$QmHdNIHL$Q@HdNHL$xQHdNHL$pQHdNHL$hQpHpdNHL$`QPHPdNhHL$PQ0_H0dN;HL$@Q2HdNHL$0QHdNHL$ QHdNHL$QHdNHL$Q~HdNZHL$QpQHpdN-HL$PP$HPdNHL$P0H0dNHL$PHdNHL$PHdNyHL$PpHdNLHL$PCHdNHL$PHdNHL$PpHpdNHL$PPHPdNHL$P0H0dNkHL$PbHdN>HL$xP5HdNHL$pPHdNHL$hPHdNHL$`PHdNHL$XPpHpdN]HL$PPPTHPdN0HL$HP0'H0dNHL$@PHdNHL$8PHdNHL$0PHdN|HL$ PsHdNOHL$PFHdN"HL$PpHpdNHL$PPHPdNHL$O0H0dNHL$OHdNnHL$O eH dNAHL$O 8H dNHL$O H dNHL$O H dNHL$Op Hp dNHL$OP HP dN`HL$O0 WH0 dN3HL$O *H dNHL$O H dNHL$O H dNHL$O H dNHL$O vH dNRHL$Op IHp dN%HL$OP HP dNHL$xO0 H0 dNHL$pO H dNHL$hO H dNqHL$`O hH dNDHL$XO ;H dNHL$PO H dNHL$HOp Hp dNHL$@OP HP dNHL$8O0 H0 dNcHL$0O ZH dN6HL$(O -H dN HL$ O H dNHL$O H dNHL$O H dNHL$Op yHp dNUHL$OP LHP dN(HL$N0 H0 dNHL$N H dNHL$N H dNHL$N H dNtHL$N kH dNGHL$Np hmhmhmgmgmgmgmgmHp dNHL$NP HP dNHL$N0 H0 dNpHL$N gH dNCHL$N:HdNHL$N HdNHL$NHdNHL$NHdNHL$NpHpdNbHL$NPYHPdN5HL$N0,H0dNHL$xNHdNHL$pNHdNHL$hNHdNHL$`NxHdNTHL$XNKHdN'HL$PNpHpdNHL$HNPHPdNHL$@N0H0dNHL$8NHdNsHL$0NjHdNFHL$(N=HdNHL$ NHdNHL$NHdNHL$NpHpdNHL$NPHPdNeHL$N0\H0dN8HL$M/HdN HL$MHdNHL$MHdNHL$MHdNHL$M{HdNWHL$MpNHpdN*HL$MP!HPdNHL$M0H0dNHL$MHdNHL$MHdNvHL$MmHdNIHL$M@HdNHL$MHdNHL$MpHpdNHL$MPHPdNHL$M0H0dNhHL$xM_HdN;HL$pM2HdNHL$hMHdNHL$`MHdNHL$XMHdNHL$PMp~HpdNZHL$HMPQHPdN-HL$@M0$H0dNHL$8MHdNHL$0MHdNHL$(MHdNyHL$ MpHdNLHL$MCHdNHL$MpHpdNHL$MPHPdNHL$M0H0dNHL$LHdNkHL$LbHdN>HL$L5HdNHL$LHdNHL$LHdNHL$LpHpdNHL$LPHPdN]HL$L0TH0dN0HL$L'HdNHL$LHdNHL$LHdNHL$LHdN|HL$LsHdNOHL$LpFHpdN"HL$LPHPdNHL$L0H0dNHL$xLHdNHL$pLHdNnHL$hLeHdNAHL$`L8HdNHL$XL HdNHL$PLpHpdNHL$HLPHPdNHL$@L0H0dN`HL$8LWHdN3HL$0L*HdNHL$(LHdNHL$ LHdNHL$LHdNHL$LpvHpdNRHL$LPIHPdN%HL$L0H0dNHL$KHdNHL$K¿HdNHL$K蕿HdNqHL$KhHdNDHL$K;HdNHL$KpHpdNHL$KPHPdNHL$K0贾H0dNHL$K臾HdNcHL$KZHdN6HL$K-HdN HL$KHdNHL$KӽHdNHL$Kp覽HpdNHL$KPyHPdNUHT$мwHT$wHT$wHT$wHT$wHT$w}HT$wiHT$wUHT$wAHT$w-HT$wHT$wHT$w HT$w(HT$w0HT$w8HT$w@HT$xHHT$xPyHT$xXeHT$ x`QHT$xh=HT$xp)HT$xxHT$xHT$ xHT$$xHT$(xHT$,xHT$0xHT$4xHT$8xuHT$4*   !"#v$l11H)HHHH3H~HgtHt$HD$^HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.S0H dH%(HD$1H0|A=HYomHEom@=hH*om*=h*HL$_0H0dNҿHL$x_0ɯH0dN西HL$p_p0蜯Hp0dNxHL$h_P0oHP0dNKHL$`_00BH00dNHL$X_0H0dNHL$P_/H/dNľHL$H_/軮H/dN藾HL$@_/莮H/dNjHL$8_/aH/dN=HL$0_p/4Hp/dNHL$(_P/HP/dNHL$ _0/ڭH0/dN趽HL$_/譭H/dN艽HL$_.耭H.dN\HL$_.SH.dN/HL$_.&H.dNHL$^.H.dNռHL$^p.̬Hp.dN証HL$^P.蟬HP.dN{HL$^0.rH0.dNNHL$^.EH.dN!HL$^-H-dNHL$^-H-dNǻHL$^-辫H-dN蚻HL$^-葫H-dNmHL$^p-dHp-dN@HL$^P-7HP-dNHL$^0- H0-dNHL$^-ݪH-dN蹺HL$^,谪H,dN茺HL$^,胪H,dN_HL$^,VH,dN2HL$x^,)H,dNHL$p^p,Hp,dNعHL$h^P,ϩHP,dN諹HL$`^0,袩H0,dN~HL$X^,uH,dNQHL$P^+HH+dN$HL$H^+H+dNHL$@^+H+dNʸHL$8^+H+dN蝸HL$0^p+蔨Hp+dNpHL$(^P+gHP+dNCHL$ ^0+:H0+dNHL$^+ H+dNHL$^*H*dN輷HL$^*賧H*dN菷HL$^*膧H*dNbHL$]*YH*dN5HL$]p*,Hp*dNHL$]P*HP*dN۶HL$]0*ҦH0*dN讶HL$]*襦H*dN聶HL$])xH)dNTHL$])KH)dN'HL$])H)dNHL$])H)dN͵HL$]p)ĥHp)dN蠵HL$]P)藥HP)dNsHL$]0)jH0)dNFHL$])=H)dNHL$](H(dNHL$](H(dN迴HL$](趤H(dN蒴HL$x](艤H(dNeHL$p]p(\Hp(dN8HL$h]P(/HP(dN HL$`]0(H0(dN޳HL$X](գH(dN豳HL$P]'訣H'dN脳HL$H]'{H'dNWHL$@]'NH'dN*HL$8]'!H'dNHL$0]p'Hp'dNвHL$(]P'ǢHP'dN裲HL$ ]0'蚢H0'dNvHL$]'mH'dNIHL$]&@H&dNHL$]&H&dNHL$]&H&dN±HL$\&蹡H&dN蕱HL$\p&茡Hp&dNhHL$\P&_HP&dN;HL$\0&2H0&dNHL$\&H&dNHL$\%ؠH%dN贰HL$\%諠H%dN臰HL$\%~H%dNZHL$\%QH%dN-HL$\p%$Hp%dNHL$\P%HP%dNӯHL$\0%ʟH0%dN覯HL$\%蝟H%dNyHL$\$pH$dNLHL$\$CH$dNHL$\$H$dNHL$x\$H$dNŮHL$p\p$輞Hp$dN蘮HL$h\P$菞HP$dNkHL$`\0$bH0$dN>HL$X\$5H$dNHL$P\#H#dNHL$H\#۝H#dN跭HL$@\#讝H#dN芭HL$8\#聝H#dN]HT$мw"HT$w"ճHT$w"HT$w"譳HT$w "虳HT$w("腳HT$w0"qHT$w8"]HT$w@"IHT$wH"5HT$wP"!HT$wX" HT$w`"HT$wh"HT$wp"ѲHT$wx"轲HT$w"該HT$x"蕲HT$x"聲HT$x"mHT$ x"YHT$x"EHT$x"1HT$x"HT$x" HT$ x"HT$$x"HT$(x"ͱHT$,x"蹱HT$0x"襱HT$4x"葱HT$8x"}HT$4*   !"#v$l11H)H"H"HH3H~HgtHt$HD$mHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SLH dH%(HD$1AHL|A}ؖH[m̖H[m耄=gHj[m*=g*HL$lL6HLdNHL$xlL HLdNHL$plpLHpLdN踏HL$hlPLHPLdN苏HL$`l0LH0LdN^HL$XlLUHLdN1HL$PlK(HKdNHL$HlK~HKdN׎HL$@lK~HKdN誎HL$8lK~HKdN}HL$0lpKt~HpKdNPHL$(lPKG~HPKdN#HL$ l0K~H0KdNHL$lK}HKdNɍHL$lJ}HJdN蜍HL$lJ}HJdNoHL$lJf}HJdNBHL$kJ9}HJdNHL$kpJ }HpJdNHL$kPJ|HPJdN軌HL$k0J|H0JdN莌HL$kJ|HJdNaHL$kIX|HIdN4HL$kI+|HIdNHL$kI{HIdNڋHL$kI{HIdN譋HL$kpI{HpIdN耋HL$kPIw{HPIdNSHL$k0IJ{H0IdN&HL$kI{HIdNHL$kHzHHdN̊HL$kHzHHdN蟊HL$kHzHHdNrHL$xkHizHHdNEHL$pkpH)HT$w>HT$w>HT$w>HT$w >كHT$w(>ŃHT$w0>豃HT$w8>蝃HT$w@>艃HT$wH>uHT$wP>aHT$wX>MHT$w`>9HT$wh>%HT$wp>HT$wx>HT$w>HT$x>ՂHT$x>HT$x>譂HT$ x>虂HT$x>腂HT$x>qHT$x>]HT$x>IHT$ x>5HT$$x>!HT$(x> HT$,x>HT$0x>HT$4x>сHT$8x>轁HT$4*   !"#v$l11H)H>H>HH3H~HgtHt$HD$>NHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SiH dH%(HD$1dHi|A`gHGm gHGmT=!gHGm*=g*HL$p{hvPHhdNR`HL$h{hIPHhdN%`HL$`{hPHhdN_HL$X{phOHphdN_HL$P{PhOHPhdN_HL$H{0hOH0hdNq_HL$@{hhOHhdND_HL$8{g;OHgdN_HL$0{gOHgdN^HL$({gNHgdN^HL$ {gNHgdN^HL${pgNHpgdNc^HL${PgZNHPgdN6^HL$z0g-NH0gdN ^HL$zgNHgdN]HL$zfMHfdN]HL$zfMHfdN]HL$zfyMHfdNU]HL$zfLMHfdN(]HL$zpfMHpfdN\HL$zPfLHPfdN\HL$z0fLH0fdN\HL$zfLHfdNt\HL$zekLHedNG\HL$xze>LHedN\HL$pzeLHedN[HL$hzeKHedN[HL$`zpeKHpedN[HL$PzPeKHPedNf[HL$@z0e]KH0edN9[HL$0ze0KHedN [HL$ zdKHddNZHL$zdJHddNZHL$zdJHddNZHL$zd|JHddNXZHL$ypdOJHpddN+ZHL$yPd"JHPddNYHL$y0dIH0ddNYHL$ydIHddNYHL$ycIHcdNwYHL$ycnIHcdNJYHL$ycAIHcdNYHL$ycIHcdNXHL$ypcHHpcdNXHL$yPcHHPcdNXHL$y0cHH0cdNiXHL$yc`HHcdNHp\dNNHL$wP\>HP\dNNHL$w0\>H0\dNnNHL$w\e>H\dNANHL$w[8>H[dNNHL$w[ >H[dNMHL$w[=H[dNMHL$w[=H[dNMHL$wp[=Hp[dN`MHL$wP[W=HP[dN3MHL$w0[*=H0[dNMHL$w[<H[dNLHL$wZ<HZdNLHL$wZ<HZdNLHL$wZv<HZdNRLHL$xwZI<HZdN%LHL$pwpZ<HpZdNKHL$hwPZ;HPZdNKHL$`w0Z;H0ZdNKHL$XwZ;HZdNqKHL$PwYh;HYdNDKHL$HwY;;HYdNKHL$@wY;HYdNJHL$8wY:HYdNJHL$0wpY:HpYdNJHL$(wPY:HPYdNcJHL$ w0YZ:H0YdN6JHL$wY-:HYdN JHL$wX:HXdNIHL$wX9HXdNIHL$wX9HXdNIHL$vXy9HXdNUIHL$vpXL9HpXdN(IHL$vPX9HPXdNHHL$v0X8H0XdNHHL$vX8HXdNHHL$vW8HWdNtHHL$vWk8HWdNGHHL$vW>8HWdNHHL$vW8HWdNGHL$vpW7HpWdNGHL$vPW7HPWdNGHL$v0W7H0WdNfGHL$vW]7HWdN9GHL$vV07HVdN GHL$vV7HVdNFHL$vV6HVdNFHL$xvV6HVdNFHL$pvpV|6HpVdNXFHL$hvPVO6HPVdN+FHL$`v0V"6H0VdNEHL$XvV5HVdNEHL$PvU5HUdNEHL$HvU5HUdNwEHL$@vUn5HUdNJEHL$8vUA5HUdNEHL$0vpU5HpUdNDHL$(vPU4HPUdNDHL$ v0U4H0UdNDHL$vU4HUdNiDHL$vT`4HTdNHL$uQ.HQdN>HL$uP.HPdN>HL$uP.HPdNo>HL$uPf.HPdNB>HL$tP9.HPdN>HT$мwODHT$wODHT$wOyDHT$wOeDHT$w OQDHT$w(O=DHT$w0O)DHT$w8ODHT$w@ODHT$wHOCHT$wPOCHT$wXOCHT$w`OCHT$whOCHT$wpOCHT$wxOuCHT$wOaCHT$xOMCHT$xO9CHT$xO%CHT$ xOCHT$xOBHT$xOBHT$xOBHT$xOBHT$ xOBHT$$xOBHT$(xOBHT$,xOqBHT$0xO]BHT$4xOIBHT$8xO5BHT$HT$xM>HT$xN>HT$xN>HT$xN>HT$xN>HT$x Nx>HT$x(Nd>HT$x0NP>HT$y8N<>HT$y@N(>HT$yHN>HT$ yPN>HT$yXN=HT$y`N=HT$yhN=HT$ypN=HT$ yxN=HT$$yN=HT$(yNt=HT$,yN`=HT$0yNL=HT$4yN8=HT$8yN$=HT$4*   !"#v$l11H)HOHOHH3H~HgtHt$HD$.HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.S H dH%(HD$14H |A0X7HY4mL7HE4m%=agH*4m*=Eg*HL$0 HdN0HL$(Є HЄdNe0HL$ \ HdN80HL$/ HdN 0HL$p HpdN/HL$PHPdN/HL$0H0dN/HL${HdNW/HL$NHdN*/HL$蔃Ѓ!HЃdN.HL$HdN.HL$ؔHdN.HL$ДpHpdNv.HL$ȔPmHPdNI.HL$0@H0dN.HL$HdN-HL$HdN-HL$ЂHЂdN-HL$HdNh-HL$_HdN;-HL$p2HpdN-HL$PHPdN,HL$0H0dN,HL$xHdN,HL$p~HdNZ,HL$hЁQHЁdN-,HL$`$HdN,HL$XHdN+HL$PpHpdN+HL$HPHPdNy+HL$@0pH0dNL+HL$8CHdN+HL$0HdN*HL$(ЀHЀdN*HL$ HdN*HL$HdNk*HL$pbHpdN>*HL$P5HPdN*HL$0H0dN)HL$HdN)HL$HdN)HL$蓃HdN])HL$THdN0)HL$ؓ'HdN)HL$ГpHpdN(HL$ȓPHPdN(HL$0H0dN|(HL$sHdNO(HL$~FH~dN"(HL$~H~dN'HL$~H~dN'HL$~H~dN'HL$p~Hp~dNn'HL$P~eHP~dNA'HL$0~8H0~dN'HL$x~ H~dN&HL$p}H}dN&HL$h}H}dN&HL$`}H}dN`&HL$X}WH}dN3&HL$Pp}*Hp}dN&HL$HP}HP}dN%HL$@0}H0}dN%HL$8}H}dN%HL$0|vH|dNR%HL$(|IH|dN%%HL$ |H|dN$HL$|H|dN$HL$p|Hp|dN$HL$P|HP|dNq$HL$0|hH0|dND$HL$|;H|dN$HL${H{dN#HL$蒃{H{dN#HL${H{dN#HL$ؒ{H{dNc#HL$Вp{ZHp{dN6#HL$ȒP{-HP{dN #HL$0{H0{dN"HL${H{dN"HL$zHzdN"HL$zyHzdNU"HL$zLHzdN("HL$zHzdN!HL$pzHpzdN!HL$PzHPzdN!HL$0zH0zdNt!HL$xzkHzdNG!HL$py>HydN!HL$hyHydN HL$`yHydN HL$XyHydN HL$PpyHpydNf HL$HPy]HPydN9 HL$@0y0H0ydN HL$8yHydNHL$0xHxdNHL$(xHxdNHL$ x|HxdNXHL$xOHxdN+HL$px"HpxdNHL$PxHPxdNHL$0xH0xdNHL$xHxdNwHL$wnHwdNJHL$葃wAHwdNHT$мw@v$HT$wHv$HT$wPv$HT$wXvm$HT$w`vY$HT$whvE$HT$wpv1$HT$wxv$HT$wv $HT$wv#HT$wv#HT$wv#HT$wv#HT$wv#HT$wv#HT$wv}#HT$wvi#HT$xvU#HT$xvA#HT$xv-#HT$ xv#HT$xv#HT$xv"HT$xv"HT$xw"HT$ xw"HT$$xw"HT$(xw"HT$,x wy"HT$0x(we"HT$4x0wQ"HT$8x8w="HT$4*   !"#v$l11H)H@vH@vHH3H~HgtHt$HD$gHD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.S H dH%(HD$1H |A=H mH m@=SgHj m*=Sg*HL$HdNHL$袃РHРdNHL$ࢃHdNxHL$آoHdNKHL$ТpBHpdNHL$ȢPHPdNHL$0H0dNHL$HdNHL$HdNjHL$ПaHПdN=HL$4HdNHL$HdNHL$pHpdNHL$PHPdNHL$0H0dN\HL$xSHdN/HL$p&HdNHL$hОHОdNHL$`HdNHL$XHdN{HL$PprHpdNNHL$HPEHPdN!HL$@0H0dNHL$8HdNHL$0HdNHL$(НHНdNmHL$ dHdN@HL$7HdNHL$p HpdNHL$PHPdNHL$0H0dNHL$HdN_HL$VHdN2HL$衃М)HМdNHL$ࡃHdNHL$ءHdNHL$СpHpdN~HL$ȡPuHPdNQHL$0HH0dN$HL$HdNHL$HdNHL$ЛHЛdNHL$HdNpHL$gHdNCHL$p:HpdNHL$P HPdNHL$0H0dNHL$xHdNHL$pHdNbHL$hКYHКdN5HL$`,HdNHL$XHdNHL$PpHpdNHL$HPHPdNHL$@0xH0dNTHL$8KHdN'HL$0HdNHL$(ЙHЙdNHL$ HdNHL$HdNsHL$pjHpdNFHL$P=HPdNHL$0H0dNHL$HdNHL$HdNHL$蠃ИHИdNeHL$ࠃ\HdN8HL$ؠ/HdN HL$РpHpdNHL$ȠPHPdNHL$0H0dNHL${HdNWHL$NHdN*HL$З!HЗdNHL$HdNHL$HdNHL$pHpdNvHL$PmHPdNIHL$0@H0dNHL$xHdNHL$pHdNHL$hЖHЖdNHL$`HdNhHL$X_HdN;HL$Pp2HpdNHL$HPHPdNHL$@0H0dNHL$8HdNHL$0~HdNZHL$(ЕQHЕdN-HL$ $HdNHL$HdNHL$pHpdNHL$PHPdNyHL$0pH0dNLHL$CHdNHL$HdNHL$蟃ДHДdNHL$HdNHL$؟HdNkHL$ПpbHpdN>HL$ȟP5HPdNHL$0H0dNHL$HdNHL$HdNHL$ГHГdN]HT$мw@HT$wHHT$wPHT$wXHT$w`HT$whHT$wpqHT$wx]HT$wIHT$w5HT$w!HT$w HT$wHT$wHT$wHT$wHT$wHT$xȒHT$xВHT$xؒmHT$ xYHT$x蒸EHT$x1HT$xHT$x HT$ xHT$$xHT$(xHT$,x HT$0x(HT$4x0HT$8x8}HT$HL$h 5H dNHL$`HdNHL$XHdNHL$PHdNHL$HHdN]HL$@THdN0HL$8`'H`dNHL$0@H@dNHL$( H dNHL$ HdN|HL$sHdNOHL$FHdN"HL$HdNHL$HdNHL$`H`dNHL$@H@dNnHL$蜃 eH dNAHL$8HdNHL$؜ HdNHL$МHdNHL$ȜHdNHL$HdN`HL$`WH`dN3HL$@*H@dNHL$ H dNHL$HdNHL$HdNHL$vHdNRHL$IHdN%HL$HdNHL$x`H`dNHD$dH3%(_lQlCl5l'll lluZH [ÿ@Բ(gH@ԲkN@4*   !"#v$l11H)H@H@HH3H~HgtHt$HD$.]HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.HhdH%(HD$1BHh|A~HL$ඃ0llllllll%H0dNHL$ضHdNHL$жHdNHL$ȶЫHЫdNzHL$qHdNMHL$DHdN HL$pHpdNHL$PHPdNHL$0轿H0dNHL$萿HdNlHL$cHdN?HL$Ъ6HЪdNHL$p HdNHL$hܾHdNHL$`p课HpdNHL$XP肾HPdN^HL$P0UH0dN1HL$H(HdNHL$@HdNHL$0ЩνHЩdNHL$ 衽HdN}HL$tHdNPHL$pGHpdN#HL$PHPdNHL$赃0H0dNHL$ൃHdNHL$ص蓼HdNoHL$еШfHШdNBHL$9HdNHL$ HdNHL$p߻HpdNHL$P費HPdNHL$0腻H0dNaHL$xXHdN4HL$p+HdNHL$hЧHЧdNHL$`ѺHdNHL$X褺HdNHL$PpwHpdNSHL$HPJHPdN&HL$@0H0dNHL$8HdNHL$0ùHdNHL$(Ц薹HЦdNrHL$ iHdNEHL$<HdNHL$pHpdNHL$PHPdNHL$0赸H0dNHL$贃舸HdNdHL$ഃ[HdN7HL$شХ.HХdN HL$дHdNHL$ȴԷHdNHL$p觷HpdNHL$PzHPdNVHL$0MH0dN)HL$ HdNHL$HdNHL$ФƶHФdNHL$虶HdNuHL$lHdNHHL$p?HpdNHL$xPHPdNHL$p0H0dNHL$h踵HdNHL$`苵HdNgHL$XУ^HУdN:HL$P1HdN HL$HHdNHL$@p״HpdNHL$8P誴HPdNHL$00}H0dNYHL$(PHdN,HL$ #HdNHL$ТHТdNHL$ɳHdNHL$蜳HdNxHL$poHpdNKHL$PBHPdNHL$0H0dNHL$賃HdNHL$ೃ軲HdNHL$سС莲HСdNjHL$гaHdN=HL$ȳ4HdNHL$pHpdNHL$PڱHPdNHBlH.l蹵=gHltN=gtlH;AhA@@02XZHD$dH3%(uVHÿPԲgJHPԲkN닿@ԲgsH@ԲkNjUDShȸH dH%(HD$1qHhȸ|AHL$Pǃ0ȸCm5m'mm mmmmTH0ȸdN0HL$Hǃȸ'HȸdNHL$@ǃǸHǸdNֿHL$8ǃǸͯHǸdN詿HL$0ǃǸ蠯HǸdN|HL$(ǃǸsHǸdNOHL$ ǃpǸFHpǸdN"HL$ǃPǸHPǸdNHL$ǃ0ǸH0ǸdNȾHL$ǃǸ迮HǸdN蛾HL$ǃƸ蒮HƸdNnHL$ƃƸeHƸdNAHL$ƃƸ8HƸdNHL$ƃƸ HƸdNHL$ƃpƸޭHpƸdN躽HL$ƃPƸ豭HPƸdN荽HL$ƃ0Ƹ脭H0ƸdN`HL$ƃƸWHƸdN3HL$ƃŸ*HŸdNHL$ƃŸHŸdNټHL$ƃŸЬHŸdN謼HL$ƃŸ裬HŸdNHL$pƃpŸvHpŸdNRHL$`ƃPŸIHPŸdN%HL$Xƃ0ŸH0ŸdNHL$PƃŸHŸdN˻HL$Hƃĸ«HĸdN螻HL$@ƃĸ蕫HĸdNqHL$0ƃĸhHĸdNDHL$ ƃĸ;HĸdNHL$ƃpĸHpĸdNHL$ƃPĸHPĸdN轺HL$Ń0ĸ贪H0ĸdN萺HL$Ńĸ自HĸdNcHL$ŃøZHødN6HL$Ńø-HødN HL$ŃøHødNܹHL$ŃøөHødN诹HL$Ńpø覩HpødN肹HL$ŃPøyHPødNUHL$Ń0øLH0ødN(HL$ŃøHødNHL$ѸH¸dNθHL$ѸŨH¸dN衸HL$Ѹ蘨H¸dNtHL$ѸkH¸dNGHL$Ńp¸>Hp¸dNHL$pŃP¸HP¸dNHL$hŃ0¸H0¸dNHL$`Ѹ跧H¸dN蓷HL$XŃ芧HdNfHL$PŃ]HdN9HL$HŃ0HdN HL$@ŃHdN߶HL$8Ńp֦HpdN貶HL$0ŃP試HPdN腶HL$(Ń0|H0dNXHL$ ŃOHdN+HL$Ń"HdNHL$ŃHdNѵHL$ŃȥHdN褵HL$Ń蛥HdNwHL$ăpnHpdNJHL$ăPAHPdNHL$ă0H0dNHL$ăHdNôHL$ă躤HdN薴HL$ăп荤HпdNiHL$ă`HdNHT$@y8*HT$Dy@HT$HyH1H^QHT$:NyݜH A)HD$dH3%(uH [~1ҹ1H)HHt1HH3H~HgtHt$HD$HD$ͺH맺렺뙺뒺닺넺z p f \ R H>4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H̀H HH3H~HgtHt$HD$jHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01f.ShH dH%(HD$1QHh|A荑HL$Ѓ0#llllllll4H0dNHL$ЃHdNHL$ЃڀHdN趐HL$xЃ譀HdN艐HL$pЃ耀HdN\HL$hЃSHdN/HL$`Ѓp&HpdNHL$XЃPHPdNՏHL$PЃ0H0dN訏HL$HЃHdN{HL$@ЃrHdNNHL$0ЃEHdN!HL$ ЃHdNHL$Ѓ~HdNǎHL$Ѓp~HpdN蚎HL$ЃP~HPdNmHL$Ѓ0d~H0dN@HL$σ7~HdNHL$σ ~HdNHL$σ}HdN蹍HL$σ}HdN茍HL$σ}HdN_HL$σpV}HpdN2HL$σP)}HPdNHL$σ0|H0dN،HL$σ|HdN諌HL$σ|HdN~HL$σu|HdNQHL$pσH|HdN$HL$`σ|HdNHL$Pσp{HpdNʋHL$@σP{HPdN蝋HL$0σ0{H0dNpHL$(σg{HdNCHL$ σ߸:{H߸dNHL$σ߸ {H߸dNHL$σ߸zH߸dN輊HL$σ߸zH߸dN菊HL$σp߸zHp߸dNbHL$΃P߸YzHP߸dN5HL$΃0߸,zH0߸dNHL$΃߸yH߸dNۉHL$΃޸yH޸dN讉HL$΃޸yH޸dN聉HL$΃޸xyH޸dNTHL$΃޸KyH޸dN'HL$΃p޸yHp޸dNHL$΃P޸xHP޸dN͈HL$΃0޸xH0޸dN蠈HL$΃޸xH޸dNsHL$΃ݸjxHݸdNFHL$΃ݸ=xHݸdNHL$΃ݸxHݸdNHL$΃ݸwHݸdN过HL$x΃pݸwHpݸdN蒇HL$p΃PݸwHPݸdNeHL$h΃0ݸ\wH0ݸdN8HL$`΃ݸ/wHݸdN HL$X΃ܸwHܸdNކHL$P΃ܸvHܸdN豆HL$H΃ܸvHܸdN脆HL$@΃ܸ{vHܸdNWHL$8΃pܸNvHpܸdN*HL$0΃Pܸ!vHPܸdNHL$(΃0ܸuH0ܸdNЅHL$ ΃ܸuHܸdN装HL$΃۸uH۸dNvHL$΃۸muH۸dNIHL$΃۸@uH۸dNHL$΃۸uH۸dNHL$̓p۸tHp۸dN„HL$̓P۸tHP۸dN蕄HL$̓0۸tH0۸dNhHL$̓۸_tH۸dN;HL$̓ڸ2tHڸdNHL$̓ڸtHڸdNHL$̓ڸsHڸdN贃HL$̓ڸsHڸdN臃HL$̓pڸ~sHpڸdNZHL$̓PڸQsHPڸdN-HL$̓0ڸ$sH0ڸdNHL$̓ڸrHڸdNӂHL$̓ٸrHٸdN覂HL$̓ٸrHٸdNyHL$̓ٸprHٸdNLHL$̓ٸCrHٸdNHL$x̓pٸrHpٸdNHL$p̓PٸqHPٸdNŁHL$h̓0ٸqH0ٸdN蘁HL$`̓ٸqHٸdNkHL$X̓ظbqHظdN>HL$P̓ظ5qHظdNHL$H̓ظqHظdNHL$@̓ظpHظdN跀HL$8̓pظpHpظdN芀HL$0̓PظpHPظdN]HL$(̓0ظTpH0ظdN0HL$ ̓ظ'pHظdNHL$̓׸oH׸dNHL$̓׸oH׸dNHL$̓׸oH׸dN|HL$̓׸soH׸dNOHL$̃p׸FoHp׸dN"HL$̃P׸oHP׸dN~HL$̃0׸nH0׸dN~HL$̃׸nH׸dN~HL$ָ̃nHָdNn~HL$ָ̃enHָdNA~HL$ָ̃8nHָdN~HL$ָ̃ nHָdN}HL$̃pָmHpָdN}HL$̃PָmHPָdN}HL$̃0ָmH0ָdN`}HL$ָ̃WmHָdN3}HL$̃ո*mHոdN}HL$̃ոlHոdN|HL$̃ոlHոdN|HL$̃ոlHոdN|HL$x̃pոvlHpոdNR|HL$p̃PոIlHPոdN%|HL$h̃0ոlH0ոdN{HL$`̃ոkHոdN{HL$X̃ԸkHԸdN{HL$P̃ԸkHԸdNq{HL$H̃ԸhkHԸdND{HL$@̃Ը;kHԸdN{HL$8̃pԸkHpԸdNzHL$0̃PԸjHPԸdNzHL$(̃0ԸjH0ԸdNzHL$ ̃ԸjHԸdNczHL$̃ӸZjHӸdN6zHL$̃Ӹ-jHӸdN zHL$̃ӸjHӸdNyHL$̃ӸiHӸdNyHL$˃pӸiHpӸdNyHL$˃PӸyiHPӸdNUyHL$˃0ӸLiH0ӸdN(yHL$˃ӸiHӸdNxHL$˃ҸhHҸdNxHL$˃ҸhHҸdNxHL$˃ҸhHҸdNtxHL$˃ҸkhHҸdNGxHL$˃pҸ>hHpҸdNxHL$˃PҸhHPҸdNwHL$˃0ҸgH0ҸdNwHL$˃ҸgHҸdNwHL$˃ѸgHѸdNfwHL$˃Ѹ]gHѸdN9wHL$˃Ѹ0gHѸdN wHL$˃ѸgHѸdNvHL$x˃pѸfHpѸdNvHL$p˃PѸfHPѸdNvHL$h˃0Ѹ|fH0ѸdNXvHL$`˃ѸOfHѸdN+vHL$X˃и"fHиdNuHL$P˃иeHиdNuHL$H˃иeHиdNuHL$@˃иeHиdNwuHL$8˃pиneHpиdNJuHL$0˃PиAeHPиdNuHL$(˃0иeH0иdNtHL$ ˃иdHиdNtHL$˃ϸdHϸdNtHL$˃ϸdHϸdNitHL$˃ϸ`dHϸdNqHT$Рxȸ*qHT$ФxɸqHT$ШxɸqHT$ЬxɸpHT$аxɸpHT$дx ɸpHT$иx(ɸpHT$мx0ɸpHT$x8ɸpHT$x@ɸvpHT$xHɸbpHT$xPɸNpHT$xXɸ:pHT$x`ɸ&pHT$xhɸpHT$xpɸoHT$xxɸoHT$xɸoHT$xɸoHT$xɸoHT$xɸoHT$xɸoHT$xɸroHT$xɸ^oHT$yɸJoHT$yɸ6oHT$yɸ"oHT$ yɸoHT$yɸnHT$yɸnHT$yɸnHT$yɸnHT$ yɸnHT$$yʸnHT$(yʸnHT$,yʸnnHT$0yʸZnHT$4y ʸFnHT$8y(ʸ2nHT$4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H̀ʸHʸ HH3H~HgtHt$HD$jHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01f.SxH dH%(HD$11fHx|AmbHL$0ރ@llllllllRH@dNaHL$(ރ QH dNaHL$ ރQHdNaHL$ރQHdNiaHL$ރ`QHdNHdNNHL$Xڃ>HdNNHL$Pڃp>HpdN\NHL$HڃPS>HPdN/NHL$@ڃ0&>H0dNNHL$8ڃ=HdNMHL$0ڃ=HdNMHL$(ڃ=HdN{MHL$ ڃr=HdNNMHL$ڃE=HdN!MHL$ڃp=HpdNLHL$ڃP<HPdNLHL$ڃ0<H0dNLHL$ك<HdNmLHL$كd<HdN@LHL$ك7<HdNLHL$ك <HdNKHL$ك;HdNKHL$كp;HpdNKHL$كP;HPdN_KHL$ك0V;H0dN2KHL$ك);HdNKHL$ك:HdNJHL$ك:HdNJHL$ك:HdN~JHL$كu:HdNQJHL$كpH:HpdN$JHL$كP:HPdNIHL$ك09H0dNIHL$xك9HdNIHL$pك9HdNpIHL$hكg9HdNCIHL$`ك:9HdNIHL$Xك 9HdNHHL$Pكp8HpdNHHL$HكP8HPdNHHL$@ك08H0dNbHHL$8كY8HdN5HHL$0ك,8HdNHHL$(ك7HdNGHL$ ك7HdNGHL$ك7HdNGHL$كpx7HpdNTGHL$كPK7HPdN'GHL$ك07H0dNFHL$؃6HdNFHL$؃6HdNFHL$؃6HdNsFHL$؃j6HdNFFHL$؃=6HdNFHL$؃p6HpdNEHL$؃P5HPdNEHL$؃05H0dNEHL$؃5HdNeEHL$؃\5HdN8EHL$؃/5HdN EHL$؃5HdNDHL$؃4HdNDHL$؃p4HpdNDHL$؃P{4HPdNWDHL$؃0N4H0dN*DHL$x؃!4HdNCHL$p؃3HdNCHL$h؃3HdNCHL$`؃3HdNvCHL$X؃m3HdNICHL$P؃p@3HpdNCHL$H؃P3HPdNBHL$@؃02H0dNBHL$8؃2HdNBHL$0؃2HdNhBHL$(؃_2HdN;BHL$ ؃22HdNBHL$؃2HdNAHL$؃p1HpdNAHL$؃P1HPdNAHL$؃0~1H0dNZAHL$׃Q1HdN-AHL$׃$1HdNAHL$׃0HdN@HL$׃0HdN@HL$׃0HdNy@HL$׃pp0HpdNL@HL$׃PC0HPdN@HL$׃00H0dN?HL$׃/HdN?HT$мwQFHT$w=FHT$w)FHT$wFHT$wFHT$wEHT$wEHT$wEHT$wEHT$wEHT$wEHT$wuEHT$waEHT$wMEHT$w9EHT$w%EHT$wEHT$xDHT$xDHT$xDHT$ x DHT$x(DHT$x0DHT$x8DHT$x@qDHT$ xH]DHT$$xPIDHT$(xX5DHT$,x`!DHT$0xh DHT$4xpCHT$8xxCHT$HT$4y >HT$8y(>HT$HT$@y8>HT$Dy@>HT$HyH>1HP_7HT$:Ny_>H A7HD$dH3%(uZH [ÿ@Բ fNH@ԲkNp7PԲfzKHPԲkNF7'1H)HHt1HH3H~HgtHt$HD$:HD$ͺH1맺렺뙺뒺닺넺 z p f \ RH>4*   !"#v$l11H)H̀HHH3H~HgtHt$HD$9HD$1/뫺0뤺+띺,떺-돺.눺#끺$w%m&c'Y(O)E*;1'  !"%&'()*+,-./011 |rh^fff.Kf.SH dH%(HD$1q6H|A2HL$pp"HpdN2HL$hPw"HPdNS2HL$`0J"H0dN&2HL$X"HdN1HL$P!HdN1HL$H!HdN1HL$@!HdNr1HL$8i!HdNE1HL$0pHL$ 5 H dNHL$  H dNHL$ H dNHL$ H dNHL$ H dN]HL$p T Hp dN0HL$xP ' HP dNHL$p0 H0 dNHL$h H dNHL$` H dN|HL$X sH dNOHL$P FH dN"HL$H H dNHL$@p Hp dNHL$8P HP dNHL$00 H0 dNnHL$( eH dNAHL$ 8HdNHL$ HdNHL$HdNHL$HdNHL$pHpdN`HL$PWHPdN3HL$0*H0dNHL$HdNHL$HdNHL$HdNHL$vHdNRHL$IHdN%HL$pHpdNHL$PHPdNHL$0H0dNHL$HdNqHL$hHdNDHL$;HdNHL$HdNHL$HdNHL$pHpdNHL$xPHPdNcHL$p0ZH0dN6HL$h-HdN HL$`HdNHL$XHdNHL$PHdNHL$HyHdNUHL$@pLHpdN(HL$8PHPdNHL$00H0dNHL$(HdNHL$ HdNtHL$kHdNGHL$>HdNHL$HdNHL$pHpdNHL$PHPdNHT$мwHT$w HT$wHT$wHT$wHT$wHT$wHT$wHT$wHT$wkHT$wWHT$wCHT$w /HT$w(HT$w0HT$w8HT$w@HT$xHHT$xPHT$xXHT$ x`HT$xh{HT$xpgHT$xxSHT$x?HT$ x+HT$$xHT$(xHT$,xHT$0xHT$4xHT$8xHT$.4/*0 11ҹ1H)HHAHH3H~HgtHt$HD$HD$ɺ벺 뫺 뤺 띺 떺dZPF<2(2(  ~tj`VLB8111 }si_U K!A"7#-$#%&'()*+,-./0ffff.+f.H'dH%(HD$1H'|AHL$ $'Ĩlllll~lplbluH'dNQHL$$p'HHp'dN$HL$$P'HP'dNHL$$0'H0'dNHL$$'H'dNHL$#&H&dNpHL$#&gH&dNCHL$#&:H&dNHL$#& H&dNHL$#p&Hp&dNHL$#P&HP&dNHL$#0&H0&dNbHL$#&YH&dN5HL$#%,H%dNHL$#%H%dNHL$#%H%dNHL$#%H%dNHL$#p%xHp%dNTHL$#P%KHP%dN'HL$p#0%H0%dNHL$`#%H%dNHL$P#$H$dNHL$@#$H$dNsHL$0#$jH$dNFHL$(#$=H$dNHL$ #p$Hp$dNHL$#P$HP$dNHL$#0$H0$dNHL$#$H$dNeHL$"#\H#dN8HL$"#/H#dN HL$"#H#dNHL$"#H#dNHL$"p#Hp#dNHL$"P#{HP#dNWHL$"0#NH0#dN*HL$"#!H#dNHL$""H"dNHL$""H"dNHL$""H"dNvHL$""mH"dNIHL$x"p"@Hp"dNHL$p"P"HP"dNHL$h"0"H0"dNHL$`""H"dNHL$X"!H!dNhHL$P"!_H!dN;HL$@"!2H!dNHL$0"!H!dNHL$("p!Hp!dNHL$ "P!HP!dNHL$"0!~H0!dNZHL$"!QH!dN-HL$" $H dNHL$" H dNHL$! H dNHL$! H dNyHL$!p pHp dNLHL$!P CHP dNHL$!0 H0 dNHL$! H dNHL$!HdNHL$!HdNkHL$!bHdN>HL$!5HdNHL$!pHpdNHL$!PHPdNHL$!0H0dNHL$!HdN]HL$!THdN0HL$!'HdNHL$x!HdNHL$p!HdNHL$h!pHpdN|HL$`!PsHPdNOHL$X!0FH0dN"HL$P!HdNHL$H!HdNHL$@!HdNHL$8!HdNnHL$0!eHdNAHL$(!p8HpdNHL$ !P HPdNHL$!0H0dNHL$!HdNHL$!HdN`HL$!WHdN3HL$ *HdNaHlUH֍l =jEfHltC=REfu%@ԲDEf/ H@ԲkNHD$dH3%(u,HÿPԲEfHPԲkNqf.H'H'|A>HblHNlA=DfH3lt1=DftXÿ@ԲzDfe YH@ԲkNPԲ\DfHPԲkNfH(RH(|AHҗlHl=CfHlt1=CftXÿ@ԲCfYH@ԲkN0PԲCf?HPԲkN fH (H (|AHf.H3dH%(HD$1bH3|AHL$P2H2dNqHL$H2hH2dNDHL$@2;H2dNHL$82H2dNHL$0p2Hp2dNHL$(P2HP2dNHL$ 02H02dNcHL$2ZH2dN6HL$1-H1dN HL$1H1dNHL$1H1dNHL$1H1dNHL$p1yHp1dNUHL$؉P1LHP1dN(HL$Љ01H01dNHL$ȉ1H1dNHL$0H0dNHL$0H0dNtHL$0kH0dNGHL$0>H0dNHL$p0Hp0dNHL$P0HP0dNHL$p00H00dNHL$`0H0dNfHL$X/]H/dN9HL$P/0H/dN HL$H/H/dNHL$@/H/dNHL$0p/Hp/dNHL$ P/|HP/dNXHL$0/OH0/dN+HL$/"H/dNHL$.H.dNHL$舄.H.dNHL$.H.dNwHL$؈.nH.dNJHL$Јp.AHp.dNHL$ȈP.HP.dNHL$0.H0.dNHL$.H.dNHL$-H-dNiHL$-`H-dNH,l+l=Hll<H ll;HlЕl;Hll;:Hܖlrlc9H̖lMl8Hl(lC7Hll5Hlpl4Hl`lk3H|lPl#2Hllo@l0H\lJ0ls/HLl% l.HH>|AIHBl=H.l=R-fHlt1=:-ftXÿ@Բ*-fYH@ԲkNPԲ -fHPԲkNkfH8>H8>|A>HlHlA=,fHlt1=,ftXÿ@Բz,feYH@ԲkNPԲ\,fHPԲkNfHx>RHx>|AHBlH.lHl=ֆfHl=fHߕl`HƕlXyG=+fHl=+f=Yf=Df=/f_=f2=f=lt7Xÿ(/bY(/PH` R6PlH>YPgk / /HXR;PԲ*fEHPԲkNH/0RNf@Բ`*fKH@ԲkNH/pRfH/`R̄fH/PRfgH/@RfGTfH>H>|AyH"lmHl!Hl=ffHߓlt\=NfHÓl`=.fHlXt}= fHlP=f=Ճft3Xÿ(//t(/!H` R]sfH/YPR</q/HPR N /( /HXRH/@R fH/0RffH?2H?|AnHlHlqHle=fHolt\=fHSl`=~fH3lXt}=ZfHlP=:f=%ft3Xÿ(/t(/qH` RsfH/YPR/2q/ HPR\N /( /HXR'H/@R\fH/0RDffH(?H(?|AH"l Hl="&fHlt1= &ftXÿ@Բ%fYH@ԲkN`PԲ%foHPԲkN;fH)?H)?|AH f.H*?H*?|AHf.H(JdH%(HD$1bH(J|AHL$JHJdNqHL$IhHIdNDHL$I;HIdNHL$IHIdNHL$IHIdNHL$xpIHpIdNHL$pPIHPIdNcHL$h0IZH0IdN6HL$`I-HIdN HL$XHHHdNHL$PHHHdNHL$@HHHdNHL$0HyHHdNUHL$(pHLHpHdN(HL$ PHHPHdNHL$0HH0HdNHL$HſHHdNHL$G蘿HGdNtHL$GkHGdNGHL$G>HGdNHL$ଅGHGdNHL$ЬpGHpGdNHL$PG跾HPGdNHL$0G芾H0GdNfHL$G]HGdN9HL$F0HFdN HL$FHFdNHL$FֽHFdNHL$F詽HFdNHL$ppF|HpFdNXHL$`PFOHPFdN+HL$P0F"H0FdNHL$@FHFdNHL$8EȼHEdNHL$0E蛼HEdNwHL$(EnHEdNJHL$ EAHEdNHL$pEHpEdNHL$PEHPEdNHL$0E躻H0EdNHL$E荻HEdNiHL$D`HDdNHTdNHL$అTHTdNHL$ذpTHpTdNHL$аPT跱HPTdNHL$Ȱ0T花H0TdNfHL$T]HTdN9HL$S0HSdN HL$SHSdNHL$SְHSdNHL$S詰HSdNHL$pS|HpSdNXHL$PSOHPSdN+HL$x0S"H0SdNHL$pSHSdNѿHL$hRȯHRdN褿HL$`R蛯HRdNwHL$PRnHRdNJHL$@RAHRdNHL$0pRHpRdNHL$ PRHPRdNþHL$0R躮H0RdN薾HL$R荮HRdNiHL$Q`HQdNHPdNNHL$ƅ0>H0dNNHL$xƅ>HdN}NHL$pƅt>HdNPNHL$hƅУG>HУdN#NHL$`ƅ>HdNMHL$Xƅ=HdNMHL$Pƅp=HpdNMHL$HƅP=HPdNoMHL$@ƅ0f=H0dNBMHL$8ƅ9=HdNMHL$0ƅ =HdNLHL$(ƅТ<HТdNLHL$ ƅ<HdNLHL$ƅ<HdNaLHL$ƅpX<HpdN4LHL$ƅP+<HPdNLHL$ƅ0;H0dNKHL$Ņ;HdNKHL$Ņ;HdNKHL$ŅСw;HСdNSKHL$ŅJ;HdN&KHL$Ņ;HdNJHL$Ņp:HpdNJHL$ŅP:HPdNJHL$Ņ0:H0dNrJHL$Ņi:HdNEJHL$Ņ<:HdNJHL$ŅР:HРdNIHL$Ņ9HdNIHL$Ņ9HdNIHL$Ņp9HpdNdIHL$ŅP[9HPdN7IHL$Ņ0.9H0dN IHL$xŅ9HdNHHL$pŅ8HdNHHL$hŅП8HПdNHHL$`Ņz8HdNVHHL$XŅM8HdN)HHL$PŅp 8HpdNGHL$HŅP7HPdNGHL$@Ņ07H0dNGHL$8Ņ7HdNuGHL$0Ņl7HdNHGHL$(ŅО?7HОdNGHL$ Ņ7HdNFHL$Ņ6HdNFHL$Ņp6HpdNFHL$ŅP6HPdNgFHL$Ņ0^6H0dN:FHL$ą16HdN FHL$ą6HdNEHL$ąН5HНdNEHL$ą5HdNEHL$ą}5HdNYEHL$ąpP5HpdN,EHL$ąP#5HPdNDHL$ą04H0dNDHL$ą4HdNDHL$ą4HdNxDHL$ąМo4HМdNKDHL$ąB4HdNDHL$ą4HdNCHL$ąp3HpdNCHL$ąP3HPdNCHL$ą03H0dNjCHL$xąa3HdN=CHL$pą43HdNCHL$hąЛ3HЛdNBHL$`ą2HdNBHL$Xą2HdNBHL$Pąp2HpdN\BHL$HąPS2HPdN/BHL$@ą0&2H0dNBHL$8ą1HdNAHL$0ą1HdNAHL$(ąК1HКdN{AHT$мw@HHT$wHGHT$wPGHT$wXGHT$w`GHT$whGHT$wpGHT$wx{GHT$wgGHT$wSGHT$w?GHT$w+GHT$wGHT$wGHT$wFHT$wFHT$wFHT$xșFHT$xЙFHT$xؙFHT$ xwFHT$x虹cFHT$xOFHT$x;FHT$x'FHT$ xFHT$$xEHT$(xEHT$,x EHT$0x(EHT$4x0EHT$8x8EHT$AHT$y*AHT$yAHT$ yAHT$$y@HT$(yȘ@HT$,yИ@HT$0yؘ@HT$4y@HT$8y蘹@HT$4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H@H@ HH3H~HgtHt$HD$jHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01fSH dH%(HD$18H|A4HL$ʅ$HdN4HL$ʅи$HиdNs4HL$ʅj$HdNF4HL$ʅ=$HdN4HL$ʅp$HpdN3HL$ʅP#HPdN3HL$ʅ0#H0dN3HL$ʅ#HdNe3HL$ʅ\#HdN83HL$ʅз/#HзdN 3HL$xʅ#HdN2HL$pʅ"HdN2HL$hʅp"HpdN2HL$`ʅP{"HPdNW2HL$Xʅ0N"H0dN*2HL$Pʅ!"HdN1HL$Hʅ!HdN1HL$@ʅж!HжdN1HL$8ʅ!HdNv1HL$0ʅm!HdNI1HL$(ʅp@!HpdN1HL$ ʅP!HPdN0HL$ʅ0 H0dN0HL$ʅ HdN0HL$ʅ HdNh0HL$ʅе_ HеdN;0HL$Ʌ2 HdN0HL$Ʌ HdN/HL$ɅpHpdN/HL$ɅPHPdN/HL$Ʌ0~H0dNZ/HL$ɅQHdN-/HL$Ʌ$HdN/HL$ɅдHдdN.HL$ɅHdN.HL$ɅHdNy.HL$ɅppHpdNL.HL$ɅPCHPdN.HL$Ʌ0H0dN-HL$ɅHdN-HL$ɅHdN-HL$ɅгHгdNk-HL$xɅbHdN>-HL$pɅ5HdN-HL$hɅpHpdN,HL$`ɅPHPdN,HL$XɅ0H0dN,HL$PɅHdN],HL$HɅTHdN0,HL$@Ʌв'HвdN,HL$8ɅHdN+HL$0ɅHdN+HL$(ɅpHpdN|+HL$ ɅPsHPdNO+HL$Ʌ0FH0dN"+HL$ɅHdN*HL$ɅHdN*HL$ɅбHбdN*HL$ȅHdNn*HL$ȅeHdNA*HL$ȅp8HpdN*HL$ȅP HPdN)HL$ȅ0H0dN)HL$ȅHdN)HL$ȅHdN`)HL$ȅаWHаdN3)HL$ȅ*HdN)HL$ȅHdN(HL$ȅpHpdN(HL$ȅPHPdN(HL$ȅ0vH0dNR(HL$ȅIHdN%(HL$ȅHdN'HL$ȅЯHЯdN'HL$xȅHdN'HL$pȅHdNq'HL$hȅphHpdND'HL$`ȅP;HPdN'HL$Xȅ0H0dN&HL$PȅHdN&HL$HȅHdN&HL$@ȅЮHЮdNc&HL$8ȅZHdN6&HL$0ȅ-HdN &HL$(ȅpHpdN%HL$ ȅPHPdN%HL$ȅ0H0dN%HL$ȅyHdNU%HL$ȅLHdN(%HL$ȅЭHЭdN$HL$DžHdN$HL$DžHdN$HL$DžpHpdNt$HL$DžPkHPdNG$HL$Dž0>H0dN$HL$DžHdN#HL$DžHdN#HL$DžЬHЬdN#HL$DžHdNf#HL$Dž]HdN9#HL$Džp0HpdN #HL$DžPHPdN"HL$Dž0H0dN"HL$DžHdN"HL$Dž|HdNX"HL$DžЫOHЫdN+"HT$мw@(HT$wH(HT$wP(HT$wX{(HT$w`g(HT$whS(HT$wp?(HT$wx+(HT$w(HT$w(HT$w'HT$w'HT$w'HT$w'HT$w'HT$w'HT$ww'HT$xȪc'HT$xЪO'HT$xت;'HT$ xહ''HT$x誹'HT$x&HT$x&HT$x&HT$ x&HT$$x&HT$(x&HT$,x &HT$0x(s&HT$4x0_&HT$8x8K&HT$"HT$y*"HT$ y"HT$y"HT$y!HT$y!HT$y!HT$ y!HT$$y!HT$(yȩ!HT$,yЩv!HT$0yةb!HT$4y੹N!HT$8y詹:!HT$4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H@H@ HH3H~HgtHt$HD$KHD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01fSʹH dH%(HD$1AHʹ|A}HL$مɹtHɹdNPHL$مɹGHɹdN#HL$مɹHɹdNHL$مɹHɹdNHL$مpɹHpɹdNHL$مPɹHPɹdNoHL$م0ɹfH0ɹdNBHL$مɹ9HɹdNHL$مȹ HȹdNHL$مȹHȹdNHL$مȹHȹdNHL$مȹHȹdNaHL$مpȹXHpȹdN4HL$مPȹ+HPȹdNHL$xم0ȹH0ȹdNHL$pمȹHȹdNHL$hمǹHǹdNHL$`مǹwHǹdNSHL$XمǹJHǹdN&HL$PمǹHǹdNHL$HمpǹHpǹdNHL$@مPǹHPǹdNHL$8م0ǹH0ǹdNrHL$0مǹiHǹdNEHL$(مƹ<HƹdNHL$ مƹHƹdNHL$مƹHƹdNHL$مƹHƹdNHL$مpƹHpƹdNdHL$مPƹ[HPƹdN7HL$؅0ƹ.H0ƹdN HL$؅ƹHƹdNHL$؅ŹHŹdNHL$؅ŹHŹdNHL$؅ŹzHŹdNVHL$؅ŹMHŹdN)HL$؅pŹ HpŹdNHL$؅PŹHPŹdNHL$؅0ŹH0ŹdNHL$؅ŹHŹdNuHL$؅ĹlHĹdNHHL$؅Ĺ?HĹdNHL$؅ĹHĹdN HL$؅ĹHĹdN HL$؅pĹHpĹdN HL$؅PĹHPĹdNg HL$x؅0Ĺ^H0ĹdN: HL$p؅Ĺ1HĹdN HL$h؅ùHùdN HL$`؅ùHùdN HL$X؅ùHùdN HL$P؅ù}HùdNY HL$H؅pùPHpùdN, HL$@؅Pù#HPùdN HL$8؅0ùH0ùdN HL$0؅ùHùdN HL$(؅¹H¹dNx HL$ ؅¹oH¹dNK HL$؅¹BH¹dN HL$؅¹H¹dN HL$؅p¹Hp¹dN HL$؅P¹HP¹dN HL$ׅ0¹H0¹dNj HL$ׅ¹aH¹dN= HL$ׅ4HdN HL$ׅHdN HL$ׅHdN HL$ׅHdN HL$ׅpHpdN\ HL$ׅPSHPdN/ HL$ׅ0&H0dN HL$ׅHdNHL$ׅHdNHL$ׅHdN{HL$ׅrHdNNHL$ׅEHdN!HL$ׅpHpdNHL$ׅPHPdNHL$xׅ0H0dNHL$pׅHdNmHL$hׅdHdN@HL$`ׅп7HпdNHL$Xׅ HdNHL$PׅHdNHL$HׅpHpdNHL$@ׅPHPdN_HL$8ׅ0VH0dN2HL$0ׅ)HdNHL$(ׅHdNHL$ ׅоHоdNHL$ׅHdN~HL$ׅuHdNQHL$ׅpHHpdN$HL$ׅPHPdNHL$օ0H0dNHL$օHdNHL$օHdNpHL$օнgHнdNCHL$օ:HdNHL$օ HdNHL$օpHpdNHL$օPHPdNHL$օ0H0dNbHL$օYHdN5HL$օ,HdNHL$օмHмdNHT$мw@g HT$wHS HT$wP? HT$wX+ HT$w` HT$wh HT$wpHT$wxHT$wHT$wHT$wHT$wHT$wwHT$wcHT$wOHT$w;HT$w'HT$xȻHT$xлHT$xػHT$ x໹HT$x軹HT$xHT$xHT$xHT$ xsHT$$x_HT$(xKHT$,x 7HT$0x(#HT$4x0HT$8x8HT$HT$xh*HT$xpHT$yxHT$yHT$yHT$ yHT$yHT$yHT$yHT$yvHT$ ybHT$$yNHT$(yȺ:HT$,yк&HT$0yغHT$4yູHT$8y躹HT$4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H@H@ HH3H~HgtHt$HD$HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01fH(ʹH(ʹ|A>H>lH>lA=HeHs>lt1=HetXÿ@ԲzHee YH@ԲkNPԲ\He HPԲkNfSH dH%(HD$1AH|A}HL$ptHpdNPHL$PGHPdN#HL$0H0dNHL$HdNHL$HdNHL$HdNoHL$fHdNBHL$9HdNHL$p HpdNHL$PHPdNHL$0H0dNHL$HdNaHL$XHdN4HL$+HdNHL$HdNHL$HdNHL$pHpdNHL$PwHPdNSHL$0JH0dN&HL$HdNHL$xHdNHL$pHdNHL$hHdNrHL$`iHdNEHL$Xp<HpdNHL$PPHPdNHL$H0H0dNHL$@HdNHL$8HdNdHL$0[HdN7HL$(.HdN HL$ HdNHL$pHpdNHL$PHPdNHL$0zH0dNVHL$MHdN)HL$ HdNHL$HdNHL$HdNHL$HdNuHL$plHpdNHHL$P?HPdNHL$0H0dNHL$HdNHL$HdNHL$HdNgHL$^HdN:HL$1HdN HL$pHpdNHL$PHPdNHL$0H0dNHL$}HdNYHL$xPHdN,HL$p#HdNHL$hHdNHL$`HdNHL$XpHpdNxHL$PPoHPdNKHL$H0BH0dNHL$@HdNHL$8HdNHL$0HdNHL$(HdNjHL$ aHdN=HL$p4HpdNHL$PHPdNHL$0H0dNHL$HdNHL$HdN\HL$SHdN/HL$&HdNHL$HdNHL$pHpdNHL$PHPdN{HL$0rH0dNNHL$EHdN!HL$HdNHL$HdNHL$HdNHL$HdNmHL$pdHpdN@HL$P7HPdNHL$0 H0dNHL$HdNHL$xHdNHL$pHdN_HL$hVHdN2HL$`)HdNHL$XpHpdNHL$PPHPdNHL$H0H0dN~HL$@uHdNQHL$8߹HH߹dN$HL$0߹H߹dNHL$(߹H߹dNHL$ ߹H߹dNHL$p߹Hp߹dNpHL$P߹gHP߹dNCHL$0߹:H0߹dNHL$߹ H߹dNHL$޹H޹dNHL$޹H޹dNHL$޹H޹dNbHL$޹YH޹dN5HL$p޹,Hp޹dNHL$P޹HP޹dNHT$мwܹgHT$wܹSHT$wܹ?HT$wܹ+HT$wܹHT$wܹHT$wܹHT$wܹHT$wݹHT$wݹHT$wݹHT$wݹHT$w ݹwHT$w(ݹcHT$w0ݹOHT$w8ݹ;HT$w@ݹ'HT$xHݹHT$xPݹHT$xXݹHT$ x`ݹHT$xhݹHT$xpݹHT$xxݹHT$xݹHT$ xݹsHT$$xݹ_HT$(xݹKHT$,xݹ7HT$0xݹ#HT$4xݹHT$8xݹHT$HT$x۹*HT$x۹HT$y۹HT$yܹHT$yܹHT$ yܹHT$yܹHT$y ܹHT$y(ܹHT$y0ܹvHT$ y8ܹbHT$$y@ܹNHT$(yHܹ:HT$,yPܹ&HT$0yXܹHT$4y`ܹHT$8yhܹHT$4*   !"#$%v&l'b(X)N*D+:,0-&./011ҹ1H)H̹H̹0HH3H~HgtHt$HD$d#HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)H͹H͹HH3H~HgtHt$HD$I!HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)H۹H۹HH3H~HgtHt$HD$.HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./011ҹ1H)HܹHܹHH3H~HgtHt$HD$HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01f.f.HdH%(HD$12H|AnHL$eHdNAHL$8HdNHL$ HdNHL$pޢHpdN躲HL$P豢HPdN荲HL$0脢H0dN`HL$WHdN3HL$*HdNHL$HdNٱHL$СHdN謱HL$裡HdNHL$xpvHpdNRHL$pPIHPdN%HL$h0H0dNHL$`HdN˰HL$X HdN螰HL$P蕠HdNqHL$HhHdNDHL$@;HdNHL$8pHpdNHL$0PHPdN软HL$(0负H0dN萯HL$ 臟HdNcHL$ZHdN6HL$-HdN HL$HdNܮHL$ӞHdN诮HL$p覞HpdN肮HL$PyHPdNUHL$0LH0dN(HL$HdNHL$HdNέHL$ŝHdN衭HL$蘝HdNtHL$kHdNGHL$p>HpdNHL$PHPdNHL$0H0dNHL$跜HdN蓬HL$芜HdNfHL$]HdN9HL$0HdN HL$HdN߫HL$xp֛HpdN貫HL$pP詛HPdN腫HL$h0|H0dNXHL$`OHdN+HL$X"HdNHL$PHdNѪHL$HȚHdN褪HL$@蛚HdNwHD$dH3%(uH͚f.HHdH%(HD$1HH|AHL$0H0dNHL$HdNĩHL$軙HdN藩HL$x莙HdNjHL$paHdN=HL$h4HdNHL$`pHpdNHL$XPژHPdN趨HL$P0識H0dN艨HL$H耘HdN\HL$@SHdN/HL$8&HdNHL$0HdNէHL$(̗HdN訧HL$ p蟗HpdN{HL$PrHPdNNHL$0EH0dN!HL$HdNHL$HdNǦHL$辖HdN蚦HL$葖HdNmHL$dHdN@HL$p7HpdNHL$P HPdNHL$0ݕH0dN蹥HL$谕HdN茥HL$胕HdN_HL$VHdN2HL$)HdNHL$HdNؤHL$pϔHpdN諤HL$P袔HPdN~HL$0uH0dNQHL$HHdN$HL$HdNHL$xHdNʣHL$pHdN蝣HL$h蔓HdNpHL$`pgHpdNCHL$XP:HPdNHL$P0 H0dNHL$HHdN輢HL$@賒HdN菢HL$8膒HdNbHL$0YHdN5HL$(,HdNHL$ pHpdNۡHL$PґHPdN计HL$0襑H0dN聡HL$xHdNTHL$KHdN'HD$dH3%(uH}f.HdH%(HD$1蒤H|AΠHL$(ŐHdN衠HL$ p蘐HpdNtHL$PkHPdNGHL$0>H0dNHL$HdNHL$HdNHL$跏HdN蓟HL$芏HdNfHL$]HdN9HL$p0HpdN HL$PHPdNߞHL$0֎H0dN貞HL$詎HdN腞HL$|HdNXHL$OHdN+HL$"HdNHL$HdNѝHL$pȍHpdN褝HL$P蛍HPdNwHL$0nH0dNJHL$AHdNHL$HdNHL$xHdNÜHL$p躌HdN薜HL$h荌HdNiHL$`p`HpdNHL$05pHdNHL$(pHdNHL$ oHdNHL$poHpdNHL$PoHPdN]HL$0ToH0dN0HL$'oHdNHL$nHdN~HL$nHdN~HL$nHdN|~HL$snHdNO~HL$pFnHpdN"~HL$PnHPdN}HL$0mH0dN}HL$mHdN}HL$mHdNn}HL$emHdNA}HL$8mHdN}HL$ mHdN|HL$plHpdN|HL$PlHPdN|HL$0lH0dN`|HL$WlHdN3|HL$x*lHdN|HL$pkHdN{HL$hkHdN{HL$`kHdN{HL$XpvkHpdNR{HL$PPIkHPdN%{HL$H0kH0dNzHL$@jHdNzHL$8jHdNzHL$0jHdNqzHL$(hjHdNDzHL$ ;jHdNzHL$pjHpdNyHL$PiHPdNyHL$0iH0dNyHL$iHdNcyHL$ZiHdN6yHL$-iHdN yHL$iHdNxHL$hHdNxHL$phHpdNxHL$PyhHPdNUxHL$0LhH0dN(xHL$hHdNwHL$gHdNwHL$gHdNwHL$gHdNtwHL$kgHdNGwHL$p>gHpdNwHL$PgHPdNvHL$0fH0dNvHL$fHdNvHL$xfHdNfvHL$p]fHdN9vHL$h0fHdN vHL$`fHdNuHL$XpeHpdNuHL$PPeHPdNuHL$H0|eH0dNXuHL$@OeHdN+uHL$8"eHdNtHL$0dHdNtHL$(dHdNtHL$ dHdNwtHL$pndHpdNJtHL$PAdHPdNtHL$0dH0dNsHL$cHdNsHL$cHdNsHL$cHdNisHL$`cHdNkHT$y*kHT$ykHT$ykHT$yjHT$ yjHT$$yjHT$(yjHT$,yjHT$0yjHT$4y vjHT$8y(bjHT$4*   !"v#l$b%X&N'D(:)0*&+,-./011ҹ1H)H̀H HH3H~HgtHt$HD$耕HD$ɺ벺뫺뤺띺떺돺눺끺 w m c Y OE;1'  !"}#s$i%_&U'K(A)7*-+#,-./01;f.H!rbH!|A^ eHrkdH^kRHJkR= eH/k= eHk`= eHkX= eHkP'=r e=] e=H e`=3 e3=k=kt7Xÿ(/OZ(/qUH` R]7qkH>YPg]/2O9/ UHPR\] /N /THXR']H/@R\ e]H/0RD e\H!wk\H/pR e\H/`R e\H/PR eg\SfH!`H!|AH:\f.HdH%(HD$1@uHD$dH3%(uHHH4$xaLAVAUATUSHH/HEDpA&fEn1fA*EII$$ HEHPHET$H@  \ fT /f( $zUHET$ $XHPHEH@ DT$\DHfTM/8UT$L9XuCD-A9v@HU /T$HJHUHR \fT $TT$X /f(^ $H[]A\A]A^Tf1f*,$@HHpL@NfI@f(Hf(ITfPHHH9YYXXuݍD 9yXQf.f.5/HpHxDFHW 5E-/AHDHHLXHPH9fTfT__f(uCD 9fT_f(f.z f(&HWDFAHDf(HHT@XHPH9^^YYXXuCD9v^YXXQf.YH-/ /fTf.HDHA YXpf.4f(*띅fof1f(f(뺅t1 n/fTf. b5 L5f(1! 95f(%f(d$H<$Md$H<$f( $L $f.@AVAUATUSHHDhLpAfEeI^fA*DHIl$$CH $fT/T$oQT$ $XCfTc/T$HQT$H9XuCD$A9v, 7/AT$fT $ QT$X 3/f(^ $H[]A\A]A^Pf1f*,$f.f$fDFxGxFpGpFhGhF`G`FXGXFPGPFHGHF@G@F8G8F0G0F(G(F G FGFGFGHWDGHHHHFHp A5EH1ADHHf D\ \D DHH9uCD A9\HAHHHFHp EH1ADHH D\ \D DHH9u{@AvXEH1ADHH@ D\ \D DHH9u#ffD1SHLdH%(H$1MEKAEAfIBIKADf(Hf(HP H1DL\\LHH9YYXXuCDA9vIRIKHR  \ YXXQf.Ef.HH|$$$H@D$HD$ T$D$11fT$fD$]H|$Hit$H|$ $$DFHW J5E-G/AHDHHLDXHPH9fTfT__f(uCD 9fT_f(f.z f($HWDFAHDf(HHT@XHPH9^^YYXXuCD9v^YXXQf.YH|$$&X$H$dH3%(H[Ð-/ /fTf.;f.,f(t!f1f(f(t1 ȵ/fTf. 5 5f(1# 5f('f(d$H<$oFd$H<$f( $RF $AHWDGHHHHFHpA5EH1ADHHfD XDX D HH9uCD A9XHAHHHFHpEH1ADHHD XDX D HH9u{@AvXEH1ADHH@ DX XD DHH9u#ffD1HFkRx`(YYJBpX`HYYhYX`hYYX`0YX`PYX`pYX`8YYP XhXYYH@XXhxYY@`XwXXgJhX YYB`XX8YYYXX(YYHX`@YY@0XoXX_uSYfD BXPYYYY@XXWffDfDAWAVHAUATUSHjdH%(H$1HËH|$([Ht$ D$HT$0L$D$8ى\$9ȋ9u9D$D$PH|$pH|$`D$8HD$0fHD$LPHD$(f(LhD$AƍDID$H2HK>LC>Hk2f.HFkRx `(YYJBp@X`0YYh`YX`8YYX`HYX`PYX`XYX`hYYPXhpYYHXXhxYY@XwXXgJhX YYB`0XX(YYYXX8YYHX`@YY@XoXX_uSYfD BXPYYYY@XXWffDfDAUATUSHHH8 DBV6dH%(HD$(19IBCUDA}dHUI|$;C%.DD$ D$ NHd$ D$HD$(D$HD$PWHL$8QPRLCLL$*H#Ht$H|$0HVKHD$HxHgu9HQH9HtIHs(HHHH=fNtH|$DHt$ vHH9HufDHD$0H|$ I\$8HpHH|$ HHD$ HxHgu.H|$0H$dH3 %(ID$8u"HĠ[]A\Ht$*H! HD$HxHgt Ht$ H|$0HrHHHD$ HxHgtHt$f.S1HHdH%(HD$1HFHp>*HHT${!HL$dH3 %(u HH[- f.SHHHcydH%(HD$1HG HxHgu HHD$dH3%(uH[fHt$ f.DATUSHH dH%(HD$1HG Hxt*HHL$dH3 %(HH []A\Hk IH LHHHC HxuCHsSH|$HPHt$HDHD$HxHgu*HC ofŁH@Ht$ "HHD$HxHgt Ht$HHH#HHHt8SHHHcydH%(HD$1HG HxHgu0Hh HHD$dH3%(uH[f.Ht$f.DSHHHcydH%(HD$1HG HxHgu0H HPHD$dH3%(uH[f.Ht$f.DSHHHcydH%(HD$1HG HxHgu0Hh HHD$dH3%(uH[f.Ht$f.DAVAULvATUISH^HHMHhIH[Ht+HC Hx?*H[„tH[HuM9}*ID$ HpH%I\$(HHH@HxH9tD?*t Ht3@Pyc8w`wfH9€}*]eID$0I]HIEt@[L]A\A]A^fD[LIEIE]A\A]A^@H9>*4:USHH_HtCtH[]fHHPk uHHPHcNuH@HH[]HH[]SHHHcydH%(HD$1HG HxHgu H HD$dH3%(uEH[fЃAHt&PЅHt$ f.PJHf.@SHHHcydH%(HD$1HG HxHgu HxHD$dH3%(uEH[fЃAHt&PЅHt$lf.PJHf.@USHXH HuHxH@PbyHmHHEHUHu H{ HcyHCHSH}0HpdyHC(pbyHH{0tHH@H=dNuCG@HE8 xN`yHHfyHC(gyHCPHgyHC8HE@HC@EHCH< H H$H)HH0dyHH HHfDLIz@USH8HH}HH@0byHpbyHHxtHHRHdNuCG@HE wN_yHHeyHC(eyHC0fyHCHEHCE C [ HHH @LIzT@USH8H=H}HH@0byHpbyHHxtHHRHdNuCG@HEvN_yHHdyHC(eyHC0HeyHCHEHCE C HHLH4 @LIzT@USHHHtCtH[]f.HHPk uHHPHcNuH@HH[]HH[]1f.AUATIUSAHH(dH%(HD$1hH|$HT$LHHt$HHD$HxHgu4HD$dH3%(DcHkHC gH0dyuH([]A\A]fHt$F?HHD$HxHgt Ht$ H SH@H0tu[ùQylwظw|f.fSH@HtuH(Htu[ùQyQwLy$QyVwLy f.AUL,ATUS1LHIHHJ.HHHGHGu_II9HELmt7LHfHtLLHHH9uIL)HHDHEH[]A\A]fHH9w L HH}Ht1HI fAWAVIAUATUSH(HG0HW(HO Lo8LgHD$HGHHjHL$HT$H9H$v4LuIDI~(HtI@L9uHH9,$wHt$H94$L;d$t;I|$(HtI@L9d$uL9l$t I}(HtZI@L9l$uI?HtiIGHI_(HhH9vfDH;H$H9wI?H([]A\A]A^A_ L;d$tfI|$(HtI@L9d$uI?HuH([]A\A]A^A_f.DSHHxCH{PH[HATIUSHt*HsLHkH{0wHHlHu[]A\fSHHdH%(HD$1G@P1҉W@u2HG8HbyHxHgu1HsH{tH HL$dH3 %(uH[ÐHt$F?f.DUSHHHdH%(HD$1HtJHH@ H=`tNuXk@u5HC8HbyHxHguJHsH{HmHEHD$dH3%(u)H[]fDHЄtDHt$SHHcyHG(cyH(HpbyH{[#H(SHHcyHG(0cyH( HpbyH{[H(SHH0HHGPfyHGpbydH%(HD$1HC HcyHxHgu'HHD$dH3%(uH[fHt$f.DH(gSHHG0HeyHcyHG(0cyH( HpbyH{[ff.H(f.LIzSHHG0fyHcyHG(cyH(|HpbyH{[ff.H(f.LIzSHHcyHG(0cyH( H{HpbyDH[ ff.H(f.SHHcyHG(cyH(H{HpbyH[ff.H(f.SHH0HHG HgyHGPfyHGpbydH%(HD$1HC HcyHxHguHHD$dH3%(uH[ÐHt$ffffff.H(gLIzT@SHHG0HeyHcyHG(0cyH(H{HpbyH[H(f.LIzSHHG0fyHcyHG(cyH(lH{HpbyH[SH(f.LIzSHH0HHGPfyHGpbydH%(HD$1/HC HcyHxHgu'HoHHD$dH3%(uH[ÐHt$ffffff.H(gSH_HtNHH@H=0yNuGH{(HC0fyHcyHC(cyWH{HpbywH[>fD[fDH[f.SH_HtNHH@H=xNuGH{(HC0HeyHcyHC(0cyH{HpbyH[fD[fDH[f.SHH0HHG HgyHGPfyHGpbydH%(HD$1HC HcyHxHgu/HHOHD$dH3%(uH[fHt$ffffff.H(WLIzD@ATUISH_HHtHLHH[]A\@HvHHby@H@H@0H@H}HC8gC@HC HC(HH]HPHdNu C@z@Hi@Sya@wLy-H1PfAWAVIAUATUSHHHdH%(H$1HHAEHD D$HEHPHIHD$t1HI9<H$_L%dƄ$H|$PHdHDŽ$t1HDŽ$Ƅ$I|$HDŽ$HDŽ$HDŽ$HDŽ$Ld$PHH$HD$PXhHDŽ$hHD$XqHD$`HD$hHD$pHD$xHDŽ$HDŽ$HD$PHt$XHD$XPeDŽ$HDŽ$gHxX6HADD H{HS1Ƀ{ HtJH2H|$Pk t5Ht$,H|$PD$,(HŁHH|$PLyHsHH|$PnHt$-H|$PD$- uHH@H@1HT$/H|$0 My8*@HHt$0H|$PHV7HHD$)HH|$HHH|$Ht$.D$. HD$0HxHg|$tCEt>H|$P"MyHt$H|$PHt$/HD$/ @EtDHD$PH|$@HpHt$@HHL$@HyHg Ht 87HD$PLHpH$HD$PXhHDŽ$hHD$XPeHxHgH$HD$Xq1ID$H udH$Ld$PHLPHDŽ$tH$dH3 %(LH[]A\A]A^A_fDHD$&fH{eXEEHnHEH@HT$@LyZ@HT$@HL(H \y0hH_H>H0h \yH7HH|$Pxwi@H|$P9MyQ@Ht$@RfHt$0HD$HD$1Ht$HT$@LGfHHHxw fDHt$@VD$11HD$]4HHH$HD$XPeHxHgt Ht$@H$HD$XqID$H dLd$PHLPH$HDŽ$tHrHD$0HxHgt Ht$@H|$PlHDHHHHD$@HxHgtHt$0YfATIUSH?HtAID$HI\$(HhH9vfDH;HH9wI<$[]A\f.[]A\f.SHHxH{PH[ATIUSH?HtAID$HI\$(HhH9vfDH;HfHt$VH|$ wcH|$ HD$ pdy)HH|$ HD$ 0dyHHD$HxHgtHt$f.USHXH-HuHxH@PbyHmHHEHUHu H{ HcyHCHSH}0HpdyHC(pbyHH{0tHH@H=dNuOG@HE8Hu(H{(HC8HE@HC@EHHfyHC(gyHCPHgyCH!HHXHH[]HHH0dyHHHH HH HHff.LIz@USH8HH}HH@0byHpbyHHxtHH@H=dNuOG@HEHHHCHEHCE HeyHC(eyHC0fyC #HHXHH[]fH HH|HHfff.LIz4@USH8HH}HH@0byHpbyHHxtHH@H=dNuOG@HEHHHCHEHCE HdyHC(eyHC0HeyC SHHXHH[]fH HHHHfff.LIz4@AUATIUSH^HHHHHwH9H<IT$I$H)HL,IlI9sLDxHHH9wMl$(IUHxIT$ID$ HEID$HHEIT$HxID$8ID$0IL$@H[]A\A]DHG@\HL9vI}IL9wH]HI<$|I$ID$H.HvfDHH$I$I$AVHHAUATUISIH)HHHHZHHHHWH9H<IT$I$H)HL4I,I9sLD~HHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@H$I$I$HLH)HHHHH)I)KDHID$0A\A]A^ÐHG@-HqL9vI>IL9wvHHFI<$I$ID$GHHATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH$HH{xHD$XdH3%(u H`[]A\EI HHHLHHHHf.AVAUIATIHHUSH_HHHI|$H9HIT$I$H)HL4I,I9s"LfHHH9wMt$(IAI[HIT$ID$ HEID$HHE]IT$HID$8LID$0IL$@A\A]A^DID$@PxHL9vI>IL9wHMHI<$lI$ID$HHffDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH4H,H{xHD$XdH3%(u H`[]A\I HHHLHHkHH[f.HHAVHAUATUSIIHHZHHHHWH9H<IT$I$H)HL4I,I9s"LffHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHI)KDmHHID$0A\A]A^fHG@1ٿHaL9vI>IL9wfHH6I<$I$ID$7HHATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHHH{xHD$XdH3%(u H`[]A\5I HHHL HHHHf.HHAVHAUATUSIIHHZHHHHWH9H<IT$I$H)HL4I,I9s"LfƾHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHI)KDIDEHID$0A\A]A^HG@19HL9vI>IPL9wHH薻I<$-I$ID$HH'ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHHH{xcHD$XdH3%(u H`[]A\蕿I HHHLkHH+HHf.AVAUATIHHUSH_HIHHBI|$HxIT$I$H)HL4I,I9s"LfFHHH9wMt$(IAI[HIT$ID$ HEID$HHE]IT$HID$8LID$0IL$@A\A]A^H}L9vI>I L9wHHRI<$I$ID$SHHATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HRHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH4HH{x#HD$XdH3%(u H`[]A\UI HHHL+HHHHf.HHAVHAUATUSIIHHZHHHBHWH<(IT$I$H)HL4I,I9s"LfHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHRHI)KDHID$0A\A]A^HL9vI>IL9wH]HI<$|I$ID$H.HvfDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHDHI萺L9wHNH֭I<$mI$ID$HHgATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHH,H{xHD$XdH3%(u H`[]A\ձI HHHL諰HHkHsH[f.AUATIUSH^HHHHHwH9H<譭IT$I$H)HL,IlI9sLD@~HHH9wMl$(IUH@IT$ID$ HEID$HHEIT$H@ID$8ID$0IL$@H[]A\A]DHG@\H衪L9vI}I/L9w襽HHuI<$ I$ID$vH込HfDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H2HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHTHH{xCHD$XdH3%(u H`[]A\uI HHHLKHH HHf.HHAVHAUATUSIIHHZHHHBHWH<HIT$I$H)HL4I,I9s"LfHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHHI)KDmHHID$0A\A]A^H.L9vI>I轳L9w3H{HI<$蚳I$ID$HLH蔶@ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHdH\H{xHD$XdH3%(u H`[]A\I HHHL۩HH蛴HH苴f.HH$I$I$AVHHAUATUISIH)HHHHZHHHHWH9H<輦IT$I$H)HL4I,I9sLD莦HHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@H$I$I$HLH)HHHHH)I)KDHID$0A\A]A^ÐHG@-H聣L9vI>IL9w膶HεHVI<$I$ID$WH蟵HATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH4HH{x#HD$XdH3%(u H`[]A\UI HHHL+HHHH۰f.AUATIUSH^HHHHHwH9H<-IT$I$H)HL,IlI9sLDHHH9wMl$(IUHIT$ID$ HEID$HHEIT$HID$8ID$0IL$@H[]A\A]DHG@\虠H!L9vI}I诬L9w%HmHI<$茬I$ID$H>H膯fDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H2HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHTHLH{xHD$XdH3%(u H`[]A\I HHHLˢHH苭HH{f.AVAUIATIHHUSH_HHHI|$H9HȟIT$I$H)HL4I,I9s"Lf薟HHH9wMt$(IAI[HIT$ID$ HEID$HHE]IT$HID$8LID$0IL$@A\A]A^DID$@P(H谜L9vI>I?L9w赯HH腜I<$I$ID$膯HήHfDATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H"HHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPH4HH{xSHD$XdH3%(u H`[]A\腠I HHHL[HHHӠH f.HHaaAVHHAUATUISIH)HH¸HHZHHHBHWH<LIT$I$H)HL4I,I9sLDHHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HaaHLH)HHHHHI)KDmHID$0A\A]A^H,L9vI>I軥L9w1HyHI<$蘥I$ID$HJH蒨fHHAVHAUATUSIIHHZHHHHWH9H<ٚIT$I$H)HL4I,I9s#Lf.覚HHH9wMt$(I[HID$IT$ HUIT$HHMID$L]HIL$8IT$@HHHHRI)KDIDHID$0A\A]A^HG@0H街L9vI>I0L9w親HHvI<$ I$ID$wH迩HATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHԷHH{xCHD$XdH3%(u H`[]A\uI HHHLKH胷H HsHf.AVAUIATIHHUSH_HHHI|$H9HHIT$I$H)HL4I,I9s"LfHHH9wMt$(IA[HIT$ID$ HEID$HHEIT$LIHHI)ID$8L]IL$@ID$0A\A]A^ID$@H蠔H(L9vI>I跠L9w-HuHI<$蔠I$ID$HFH莣f.@ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHԴHLH{xHD$XdH3%(u H`[]A\I HHHL˖H胴H苡HsH{f.AWAVAUATIUSIHLwMHHX+IFHt.IIF @*LxtaLHuIF1Hu҄LuUA?*tHL1LHEHEH[]A\A]A^A_fI9A?*uLwfD1M9t$LtLL1IUIHZHP LzA?*uL9;*rAWHGAVAUATIUSIHHH9LHHhHF D}LpA*LHA*HLA]I9\$ BHjIH@ EHpNH辣H{HHIEIEH[]A\A]A^A_f.I9\$HHtOH IH@ Hx?*u H9A*t HG|I~HHHEIDH[]A\A]A^A_DA>*L9rAH(t)H_ HC HxH?*Hptq̢u%DLLEH[]A\A]A^A_fD1HrfDHH1[]A\A]A^A_@H9>*@H9>*uAUATIUSH8IHӐHIELHS HHHC(HC0HC Ht1HHMtPH諨HE(HH[]A\A]H{0H$裑H蛚H$H[]A\A]@H9tHC HxHB ?*Hpt&HL$H$耡HL$H$y@H9>*uf.AWAVIAUATUSHHL.dH%(HD$81H$MLHGIHHD$M_H$HHXfDLMMt)IG Hx?*HˠtMMuH9l$t$;*HE HpH蛠H$H\$ I|$LD$H[yHHD$ M.HIFLl$ HHD$(t@Ll$ HD$(HU(H{HT$ HU0Lm(HE0HT$(ID$8I|$811HP藙HD$8dH3%(u]HH[]A\A]A^A_H9;*@H\$ \fDH9>* Hl$ ՑQyV8ww\f.fATUISHoHH9tDH;Ht+HH9uI,$Ht[H]A\ D[]A\AWAVAUATUSH8Hw0HG(HOHH|$ LoHt$Hw8LpHL$HD$(L9H4$Hw Ht$v_I.Lf.H]L}L9tI?Ht胗IL9uH]HtHiHI9uIL9t$wHT$(H9T$L;l$tLIL9l$uH4$H9t$tH$HHHH9D$H$uHD$ H8HtmHD$ HHHHX(HiH $H9vH;HϖH9wHD$ H8H8[]A\A]A^A_鯖L;l$tLILL9l$uHD$ H8HuH8[]A\A]A^A_fSHHxH{P誎H[QATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$HHHC1HCHCHHC HC(HC0HC8HC@HCHH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHHIHXHHL9wH;l$L;<$tBIXIHIxfL9<$uI9t"HXHHHx>I9uI}HtpIEHI](HhH9vH;HLH9wI}H[]A\A]A^A_0M9tIXIHIxM9uI}HuH[]A\A]A^A_ÐSHHxsH{P*H[ATU1SHH`HH$HD$dH%(HD$X1HD$HD$HD$ HD$(HD$0HD$8HD$@HD$H費HHC1HCHCHHC HC(HC0HC8HC@HCHYH$HLD$H{HsHK HS(LCLD$H|$H{0Ht$Hs8LCLD$ HL$ HK@LC LD$(HT$(HSHLC(LD$0H|$0LC0LD$8Ht$8LC8LD$@HL$@LC@LD$HHT$HHLCHHHCH$HT$HD$HSHkPHH輵H{x3HD$XdH3%(u H`[]A\eI HHHL;HHHHf.H@ywLy装fЃAHtG~fDGPW.fffff.SHֲHdH%(HD$1@HHԲt+HHxHgtHt$HuHԲu@HD$dH3%(uH[Mffff.SزHdH%(HD$1@HHxֲt+HHxHgtHt$HHxֲu@HD$dH3%(uH[͇fff.ATUHSH@dH%(HD$81D$0Ht$r街|$qu3hy@j@j茚ƒHHH $HtcHEH|$1ɺHL`I|Ou`HD$HD$ HD$HHD$(t@Ht$ H蜓H|$(蒄H|$舄HHPHD$8dH3%(u4H@[]A\Ht$HAHH|$LHHPH[薆HHH&H>H|$(H빐fffff.SH dH%(HD$1H$x tVHiy跅H6PiyH荘HEHD$dH3%(u`H [HFHHH$HD$t @H$HD$H $H $H($H($H|$H $HT$7萅HHŗH=fff.USH(dH%(HD$1ufHUHiyH螎H薘yyH褗H\X$ƅP$HD$dH3%(uGH([]HZiy>HH3zyHAH貄HHH_fff.AUAT-USHiyHHH|$ dH%(HD$81迍H|$ 赗#iyHÖH|$ yH $HHH$HHD$HD$HHD$t@H0$HT$H|$ HH$HT$ HD$(HD$ HD$(HH@$HH$t;H|$(Ht,H|$2H|$(HD$8dH3%(uFHH[]A\A]DL@$M,$Il$L9LtH{HtҕHH9uMl$-蜚H|$ H[HӌH|$H覀H|$蜀H贌@AVAUATUSHH L@$dH%(HD$1Ml$I,$LH)HHP$E1R@H9QH$1L@$AFT$IMl$I,$LH)HH9s;P$u2HHHL 1uH9qHfDL9HtH{Ht蒔HI9uHIl$LiyBH:jyHHHHD$dH3%(uH []A\A]A^Hƿiy14{菁HHēH{HcHPHcH@HHrcHccHlc|$(Ht H|$ H ~H|$ H~|$(HtH|$ ؑtfffff.USHHH|$0dH%(H$1H$f.P$_H|$ HD$ PD$(蛒fHt$ x!HzcH9ctHH wcHT$0HPHT$8HPHT$@HPHT$HHP HT$PHP(HT$XHP0HT$`HP8HT$hHP@HT$pHPHHT$xHPPH$HQH92HXHc|$(t H|$ 蜐\$0D$@6ply@jD$H޿@jwzyHH'D$H~zyHHH蜅D$0H|$ HD$ D$(D$LHt$H=HP(H|$ H$HP0H$HP8H$HP@H$HPHH$HPPH$HPXH$HP`H$HPhH$HPpH@xH$H$|$(t H|$ R%ly@j@j褄t$0HT$0P$H$dH3%(H[]H|$ y|$(t H|$ ؎H|$ yiytzH|$ jlyHxH|$ .t$0HT$0kH=ǫcjwH˫cHPHcH@HHcHcHc|$(Ht H|$ /H7z|$(HtH|$ H|$ H蔂Mpfff.USHHXH|$ dH%(HD$H1蝏P$4H|$HD$PD$fDHt$xqHʩcH9ctHH ǩcHT$ HPHT$(HPHT$0HPHT$8HQH9H Hc|$t H|$.L$0H|$T$(Siy $T$xH|$詂-lyHH贁D$HV{HH葁$H4{H|$:HT$ 19P$HD$HdH3%(uuHX[]H=cYuHcHPHcH@HHcH~cHc|$Ht H|$H&xH|$H虀RnfUSHHH|$0dH%(H$1臍H|$`}DP$H|$ HD$ PD$(Ht$ xqHʦcH9ctHH ǦcHT$0HPHT$8HPHT$@HPHT$HHP HT$PHQH9H(Hvc|$(t H|$ %L$@H|$ T$8biy $T$vH|$ 蠀) myHHD$HMyF|yHH$H+yH|$ 1H|$ D$HD$ 0D$(Ht$BH=HP(H|$ HT$`HP0HT$hHP8HT$pHP@H@HHT$xH$輊|$(t H|$ D$@f.D$pzuD$8f.D$hH|$ piyuH|$ "PmyH~H|$ I~P$H$dH3%(HĘ[]H|$ |$(t H|$ pHT$01迭H=c>rHcHPHcH@HHrcHccHlc|$(Ht H|$ H uH|$ H~}|$(HtH|$ ؈kfffff.AWAVAUATIUS'HHl$0L$pdH%(H$1HoLgAP$GH|$ HD$ УD$(芉Ht$ HcH9ctHHHHH ޛcHH9TH@Hc|$(t H|$ ܇Dt$<1xmy@j|D@jjH}D$nyHIyD$Lms{yHIy$LKs7{yHIyDL{gH=gcmHkcHPH`cH@H@H>cH/cH8cv|$(Ht H|$ OHWp|$(HtH|$ 3H|$ HxcffAUATIUSHhHl$dH%(H$X1H谑A$P$qL$3@H$HDŽ$РƄ$߄DH$fH?cH9XctHHHHH 3cHhH9FHHc$t H$/H$iynH$x'nyHwH$|wHH$D$HcH HH@HtP yH@HuHtcG \H(HHHH|$t H<$oA$P$H$XdH3%(Hh[]A\A]LHHHH$DŽ$H=ΒcjHҒcHPHǒcH@HHcHcHc$Ht H$谁HmH$H(v|$HtH<$胁cfff.SHHH|$ dH%(H$1蘐H|$P莐fDP$H|$HD$ТD$SHt$HcH9ӓctHH cHT$ HPHT$(HPHT$0HPHT$8HP HT$@HP(HT$HHQH9-H0H]c|$t H|$茀H|$iy(lH|$vM{yH,uH|$tH|$D$ HD$D$rHt$ CH=QHP(H|$HT$PHP0HT$XHP8HT$`HP@HT$hHPHH@PHT$pHD$xg|$t H|$D$Hf.D$xD$@f.D$pvvH|$iyBkH|$8u8oyH+iH|$tHT$ 1P$(H$dH3%(MHĐ[H|$iyjH|$toyHhH|$sH|$iyjH|$tnyH{hKH|$L|$t H|$~H|$#iyGjH|$=toyH0hH=|yHAH:H|$P?IL$(HyHguLHD$@HD$I8Ht$pHD$HD$п|$hHt H|$`WH$XH$HH$H$H_CH|$ HK뿀|$xHtH|$p,WH|$0HKH|$@HKH|$PHKyE9HHgAUATH%USHHH$dH%(H$1H$HEL`*3H$H$ppyOH$H$pHH|$ AH$pHxHgH$HxHgH$H%H|$PHEL`2H$pH|$@qy|NHL$PHT$@HH|$0AHD$@HxHgHD$PHxHgH$H %H$HEL`(2H$pH|$p|{yNH$HT$pHH|$`AHD$pHxHg3H$HxHgH$H(%H$HEL`1H$pH$ qy}MH$H$HH$AH$HxHg.H$HxHgH$H0%H$HEL`1H$pH$@qyLH$H$HH$AH$HxHgH$HxHgH$PGiy?H$PI, syHHHHt$ HHVHH$PYHH$HDŽ$Ƅ$TH$ H5YncDŽ$(HDŽ$0HDŽ$HHPHH$8H$@t`HH$0H HHQHuH$8 f.HHPHuH$@HmcH$HH$S$t H$RH$0H$xDŽ$xHDŽ$HDŽ$H$H$HteH$pH$H HHQHuH$ f.HHPHuH$H$HH$Ht$ H$.HH$pH$OH$HxHg H$H$p@ H$`Kiy^=H$`QGPsyHD;H$`AFH$H$pH${yHELhI1H$HAH$H~Hgw = H$HDŽ$Ƅ$FRH$PH5jcDŽ$XHDŽ$`HDŽ$xHUHH$hH$pt^H\H$`H fDHHQHuH$h f.HHPHuH$pH=jcH$xH$P$r H$`H$DŽ$HDŽ$HDŽ$H$H$Ht^H$[H$HHHQHuH$ f.HHPHuH$H$xH$Ht$0H$,H$H$H=AH$HxHg H$H$FEHH$`iy:H$DtyH8H$CH$HDŽ$0Ƅ$PH$H5 icDŽ$HDŽ$HDŽ$HPHH$H$taH[H$H fHHQHuH$ f.HHPHuH$HhcH$H$N$t H$ NH$H$DŽ$HDŽ$HDŽ$H$H$HteH$[H$H HHQHuH$ f.HHPHuH$H$H$Ht$`H$ )H$H$ H>AH$ HxHg, H$H$DEH$giy8H$B0tyHw6H$JAH$HDŽ$0Ƅ$MH$H5dcDŽ$HDŽ$ HDŽ$8HPHH$(H$0taH6[H$ H fHHQHuH$( f.HHPHuH$0HMdcH$8H$pL$t H$KH$ H$HDŽ$HHDŽ$PHDŽ$hH$XH$`HteH$@dZH$PH HHQHuH$X f.HHPHuH$`H$8H$hH$H$0'H$@H$0H??AH$0HxHgH$PH$@>CE H$siyN6H$A@tyH44H$?H$HDŽ$Ƅ$KH$pH5bcDŽ$xHDŽ$HDŽ$HPHH$H$t^HCZH$H fDHHQHuH$ f.HHPHuH$HacH$H$0J$t H$IH$H$DŽ$HDŽ$HDŽ$H$H$HteH$tYH$H HHQHuH$ f.HHPHuH$H$H$H$H$@W%H$H$@H?H$@HxHgH$H$_A_H$iy4H$>tyH1H$H$`HJ?H$0H$ %H$HxHgH$HxHgHD$`HxHgHD$0HxHgGHD$ HxHgIH$dH3%(D H[]A\A]fH$PPiyH2HH$H1)HƐfDSHHdH%(HD$1SH0%HxHgH(%HxHgH %HxHgH%HxHgH%HxHgH%?H%H$'H${H$H$cH$H$KH$H$3H$H$H$H$H$H$H$H$Hp$gHx$H`$OHh$HH$Ht0H8$Htq0H($uH$HtT0H$HtC0HgH_HD$dH3%(u^H[fHt$vHt$fHt$VHt$FHt$6&,fff.AVAU1ATUHSHH$dH%(H$1+H$H$H$H $HDŽ$HDŽ$H $H($H($H$H$+H$@@ HHyHxH$H$H$HH$tЃAH@H $H$H($HH$t@H$H$QH$yH$HtW.HH߾ yP H$H$H$Ht*.Hx@@ HPyHHH߾ yP H8$H0$H8$Ht-H$H$H${yƅP$DžT$DžX$HL`/11H$HAH$HyHg u:H$dH3%(H[]A\A]A^@}`uy@j!H-H$H|$ M|y0H$H|$0\|y0H$Ht$ H|$PHL`vH$H|$@uyO0HL$PHT$@HH|$`AH"Ht$`Y"HD$`HxHgy HD$@HxHgu HD$PHxHgq H$Ht$0H$HL`H$H|$puy/H$HT$pHH$AHH$!H$HxHg HD$pHxHg H$HxHgE H$H$H$uyHL`(/kH$HAԉ"H$HxHg H$H$H$vyHL`(.kH$HAԉH$HxHg H$H$H$l|yHL`(].H$HAԉ#H$HxHgm H$H$H$~|yHL`(.H$HAԉ#H$HxHg% H$H$|y-H$H$|y-H$H$H$HL`H$H$|y`-H$H$HH$ AH$ 5G#H$ HxHgH$HxHgH$HxHgH$H$H$@HL`H$H$0|y,H$@H$0HH$PAH$P|F#H$PHxHgH$0HxHgH$@HxHgH$H$H$`(vyHL`,1H$`HAH$`HyHgBDž"Pvy@jH(L###D#L !H"L"L9tR@$vy@jDs 'D@jH+(s(HS(tHB'L9HuH$H%H$HL`H$H$ppy*H$H$pHH$AH$pHxHgNH$HxHgGH$H"DŽ$HDŽ$HDŽ$HPHH$H$tVHKH$H fDHHQHuH$fHHPHuH$H"H$H$H$ H$H$L@/H$HxHg:H$H$`vy@jHa&H$HxHgDž"wy@joH'&##L#D#FPH"L"L9HtbHC(HHC0HBHC8HBHC@HBHCHHB HCPHB(HCXHB0HC`HB8HChHB@HCpHBHHCxHBPHHBXH`H^NcH$0x*1xS)$t H$/H<$L9H"@xy@jDk H$D@j;H$H$HDŽ$PƄ$0HMcHMcH`H9Hs(x@HXH$HxHgH$HxHgHD$0HxHgHD$ HxHg(H$"!`#Džhxy@j H###H#D#HLL9tU1xy@jDc "D@jHS#s(HS(LHj"L9Hu@Hyy@jIH#H@1QqfH$D$识D$Dvy@jCxy@jHH"8wy@jHHj"|y@jHS"hwy@jHH-"8wy@j^HtH "xwy@j=H!HͲwy@jH!yy@jHH!8wy@jHH!|y@jHp!H$>>H$,H$H$D$D$PH$H$ۄ H$ɄH$跄H$襄H$蓄9H$聄H$oH$]uH$KyH$9}H$'H$yy@jaH H16L|y@j2HH`#17F|y@jHH"1BH$vaH$d9H$RH$@H$.H$H$ yPhyzyA# #HH$HxHguwHD$0HxHgt Ht$詂HD$ HxHgt Ht$荂HEHHD$pHxHgt H$cH$HxHgtH$Aw$Ht H$(H$HxHgt H$H$HxHg"H$ځHH$HxHgtH$谁HH>HHHD$PHxHg%H$HH$HtHIH\HoHHHHHH$HxHgkH$YHHDž#15HH$PIHxHgt H$蘀H$0HxHgt H$vH$@HxHgt H$THLcHIHHIHH$`HxHgSHHD$`HxHgt H$HD$@HxHgJH$8HH$HxHgWHHH$HxHg.HH$pHxHgH$S|HH$HxHgH$%HH$HxHgt H$~H$H$zHHH$HxHgAH$~/HFHH$HxHg:H=HvDž#YHIH$HxHgt H$:~HLHIH$HxHgtH$ ~HH$ IHxHgtH$}HfDAWAVAUATUSHHxdH%(HD$h1HHHD$vH`$Hǃ$Hǃ$Hǃ$Hǃ$L$HHǃ $Hǃ($Hǃ0$Hǃ8$L$Hǃ@$HǃH$L%HD$Hp$HHD$H$HHD$ H$HHD$(H$HHD$0H$HHD$8H$HHD$@H$HHD$HsLkLcL[H%HT$`}yuH%HT$`&}y_H %HT$`:}yIH(%HT$`I}y3H0%HT$`\}yPL=Agc<H|$`@@ HyLHH}Ht$`蹢HD$`HxHgu_HEH yP H$H$H$HtƃQ$H:HD$hdH3%(uHx[]A\A]A^A_Ht$_.{'HH%HxHgt Ht$_{L>H%L*H$~LH$jH|$HH$TH|$@H$>H|$8H$(H|$0H$H|$(H$H|$ H$H|$|Hx$H|$fHh$HH$HtH8$HtH($H$HtkH$HtZH|$HxHp HHH0%HxHgt Ht$_yH(%HxHgt Ht$_iyH %HxHgt Ht$_KyH%HxHgHt$_)yHIHD$`HxHgt Ht$_yLHHHHHhH9@AWAVAUATUSHHHXdH%(HD$H1wHHH$dH`$Hǃ$Hǃ$Hǃ$Hǃ$L$HHǃ $Hǃ($Hǃ0$Hǃ8$L$Hǃ@$HǃH$L$HD$L% Hp$HHD$ H$HHD$ H$HHD$ H$HHD$( H$HHD$0 H$HHD$8n Lf L^ LV LN H%HT$G}yhH%HT$G&}yRH %HT$G:}y<H(%HT$GI}y&H0%HT$G\}yHEH$HmH$H9t,HtЃAHtNEH$Ht0H$ƃQ$HjHD$HdH3%(uHX[]A\A]A^A_E]HHH HH(%HxHgt Ht$G)vH %HxHgt Ht$G vH%HxHgt Ht$GuH%HxHgt Ht$GuLH%[LH$GLH$3LH$H|$8H$ H|$0H$H|$(H$H|$ sH$H|$]H$H|$GHx$H|$1Hh$HH$HtdH8$HtSH($WH$Ht6H$Ht%H<$L-HH0%HxHg%Ht$GbtH,HBHXHnf.hyf.Ht HH@ff.@f.@f.@HHH@Hf.@HHH@HHHtHH@fDfD1f.1f.f.@HHH@HHHHHtHHTff.f.f.f.{f.kf.[f.Hy@SHHyH['H0y@SHH0yH[HvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.SHHHcydH%(HD$1HG HxHgu HHD$dH3%(uH[fHt$6q/f.DSHHHcydH%(HD$1HG HxHgu HHD$dH3%(uH[fHt$pf.DSHHHcydH%(HD$1HG HxHgu0HHHD$dH3%(uH[f.Ht$Fp?f.DSHHHcydH%(HD$1HG HxHgu0H(HHD$dH3%(uH[f.Ht$of.DUSHHHHH@@byH0yHEH} HCpbyHCHEHH{ HCtHH@H=dNuCG@HE(O`yHHؘyHCyHC@HyHC(HE0HC0E8C84HHH0y> HHfffff.LIz$@USHXHHuHxH@PbyHmHHEHUHu H{ HcyHCHSH}0HyHC(pbyHH{0tHH@H=dNuCG@HE8O yHHXyHC(yHCPȗyHC8HE@HC@EHCH,H H$H)HHyHHHHfDLIz@USHXHHuHxH@PbyHmHHEHUHu H{ HcyHCHSH}0HyHC(pbyHH{0tHH@H=dNuCG@HE8OyHHyHC(PyHCPyHC8HE@HC@EHCH H H$H)HH0dyHHzHHfDLIz@SH dH%(HD$1HH$HFHHD$t@HH|$HD$dH3%(uH [5HH|$HUSHHHvHHHGm?HEHUHu H{ HcyHCHSH[]HHHHzHHjf.SHH HVdH%(HD$1HHHT$H$t BH$HT$H HH|$HCHSH $HD$HL$dH3 %(HuH ['SHHPyHGpbyH H0yH[4@HSHH0HHGАyHGpbydH%(HD$1HC HcyHxHgu'HHD$dH3%(uH[fHt$fj_f.DH(gSHH0HHGЖyHGpbydH%(HD$1HC HcyHxHgu'HHD$dH3%(uH[fHt$if.DH(gSHHG@HyHPyHGpbyH LH0yH[fff.Hf.LIzSHH0HHG ȗyHGЖyHGpbydH%(HD$1HC HcyHxHguHHD$dH3%(uH[ÐHt$hffffff.H(gLIzT@SHHPyHGpbyH DHH0yH[fff.Hf.SHH0HHGЖyHGpbydH%(HD$1HC HcyHxHgu'HHHD$dH3%(uH[ÐHt$gffffff.H(gSHHG@HyHPyHGpbyH LHH0yH[@Hf.LIzSHH0HHG ȗyHGЖyHGpbydH%(HD$1HC HcyHxHgu/HHHD$dH3%(uH[fHt$fffffff.H(WLIzD@SHH0HHG yHGАyHGpbydH%(HD$1HC HcyHxHguHWHD$dH3%(uH[ÐHt$fffffff.H(gLIzT@SHH0HHGАyHGpbydH%(HD$1oHC HcyHxHgu'HHHD$dH3%(uH[ÐHt$VeOffffff.H(gSHH0HHG yHGАyHGpbydH%(HD$1HC HcyHxHgu/HHoHD$dH3%(uH[fHt$dffffff.H(WLIzD@ЃASHHtot*[fGPWuHPC PS HPC uHH[H@AUATUSHHLGLLL)HHHHH9HHHt$%LELML`Ht$ILLL)LtLLVL LRL9t@HLf.HtL LRL LQHHL9uHGH)HMd HtLLmLeH]H[]A\A]@LHH92HH,LAE1Ef.H(dH%(HD$1HH;H4$HT$t;HtL $LT$LLPHHHD$dH3%(uH(fDHǀHYbfAVAUATUI& .SHHH@dH%(HD$81/I@sHMH)H~LHHIHH?HH)H$Hiʚ;H)HL$ImI9tDHT$HHtD$tHt$8dH34%(uCH@[]A\A]A^fD1H|$xjy#H|$HD$pdyHcH|$HD$0dy0HAWAVAUATUSHHH4$HT$HL$dH%(H$1aLp01H@H@H0nHH@H@ LH@(HCXHHD$XL1L0L1LoH1HAHHƃ0ƃ1ƃ2Hǃ8HXH`LmH$ǃHHǃPHǃhHǃpHǃxHHD$HǃHǃHǃHǃHHD$HǃHǃƃƃHyHH]HEHDŽ$HUL$@@ HЙyHXLHEH$H{HtGuqHEH$HH$\L$H{@H$I9HHCt&MtAF HtG LsI|$8HH$dH3%(H[]A\A]A^A_Lu|HT$/H|$0xwH`L$Ht$0LkHD$0HxHgLD$H$HDŽ$gHDŽ$pdy%DyEwPwWHLHHPHcNu2PHH[E1H$k]aH|$pwnH|$pHD$ppdyH H|$@wBH|$@HD$@pdy_HH$wH$HDŽ$pdy*H*zy LLHDŽ$pdyHHLHDŽ$0dyiL!H9H|$@HD$@0dyFH{ H{HtG uHPHHH$HDŽ$0dyLH|$6tLL ttl`yVwLyhHZHHHD$0HxHgtH$[zHHHHPL]HRLHDŽ$0dy/2H2`yQwLyH|$pHD$p0dy|LHf.fUSHXHhdH%(HD$X1 HHHHt$H{HD$0HD$8HD$@D$HH$yHD$(yHCPbyHmHD$HT$Ht$ H{ HcyHCHSH|$0HyHC(pbyHH{0tHH@H=dNu\G@HD$8Ht$(H{(HyHC(PyHCPyHC8HD$@HC@D$HCHHOyHHH@H!H@H'HH0dysHHSH;HHHf.SHH0dH%(HD$(1HhtuHD$(dH3%(u%H0[HjyHH$yHHH$0dyHf.SHH0H?dH%(HD$(1Ht%{tKEHD$(dH3%(Cu-H0[HjyHH$yiH)OHky]HH$y=HH$0dyHUSHH8HdH%(HD$(1Ht;|DHXtuGHD$(dH3%(Eu)H8[]HjyHH$yHAHpkyHH$yyH@ky#wHH$yWHH$0dyHf.USHH8dH%(HD$(1Htm8HEHX0HXtulHEHHǀpHǀx]HD$(dH3%(u5H8[]fDtڹykyyyfDcHpkytHH$yTykyyyHH$0dyvfDUSHXHhdH%(HD$X1-HHHHt$H{HD$0HD$8HD$@D$HH$ЖyHD$(yHCPbyHmHD$HT$Ht$ H{ HcyHCHSH|$0HyHC(pbyHH{0tHH@H=dNu\G@HD$8Ht$(H{(HXyHC(yHCPȗyHC8HD$@HC@D$HCHHO yHHH@H!H@H'HHyHkHsH[HSHHf.AUATIUSHLg(HhdH%(HD$X1gHHD$Hl$t HD$ LNfDHL t|$ H|$!HD$Hh0HHtHD$HHǀpHǀxHMtL{=HD$XdH3%($Hh[]A\A]tykyyyfDHX0D$ Htu7HD$uMHpLxH|$iuQHH|$0pkyH|$0HD$0yƀ1ҾyHykyzyHHH|$0HD$00dy>HHHAH|$HT$kyHUHt$H|$0fHD$HxHgt Ht$QH|$0\$@Hl$HHD$PgHD$0yH)H|$0pkyH|$0HD$0yH&HD$HxHgt Ht$QHCH|$0HD$0yNH|$0HD$00dy9ykyyyHH9ykyzyH|$MzLmE1USHHH=HH@@byH0yHEH} HCHEHHCpbyH{ HCtHH@H=dNuWG@HE(HuH{HC(HE0HC0E8HؘyHCyHC@HyC8YHHXHH[]HHH0yHcHHHfLIz@USHXH=HuHxH@PbyHmHHEHUHu H{ HcyHCHSH}0HyHC(pbyHH{0tHH@H=dNuOG@HE8Hu(H{(HC8HE@HC@EHHXyHC(yHCPȗyCH1HHXHH[]HHHyHHHHHH HHff.LIz@USHXHHuHxH@PbyHmHHEHUHu H{ HcyHCHSH}0HyHC(pbyHH{0tHH@H=dNuOG@HE8Hu(H{(HC8HE@HC@EHHyHC(PyHCPyCHHHXHH[]HHH0dyHH[HsHHH HHff.LIz@AVAUIATUhSHHIHC IF HC(IF(HC0IF0HC8IF8HC@IF@HCHIFHHCPIFPHCXIFXHC`IF`IFHsIFInAHtLLmIFHkMHfhHHE HC HE(HC(HE0HC0HE8HC8HE@HC@HEHHCHHEPHCPHEXHCXHE`HC`EHCHuHCI\$HLctHLHCHmIHe[L]A\A]A^HLL!HiHAVAUIATUpSHH5IHC IF HC(IF(HC0IF0HC8IF8HC@IF@HCHIFHHCPIFPHCXIFXHC`IF`HChIFhIFHsIFInAHtLLeIFHkMHpHHE HC HE(HC(HE0HC0HE8HC8HE@HC@HEHHCHHEPHCPHEXHCXHE`HC`HEhHChEHCHuHCI\$HLctHLHCHmIH][L]A\A]A^HLL.HH)fAVAUIATUPSHHIHC IF HC(IF(HC0IF0HC8IF8HC@IF@HCHIFHIFHsIFInAHtLLIFHkMHP&HHE HC HE(HC(HE0HC0HE8HC8HE@HC@HEHHCHEHCHuHCI\$HLctHLHCHmIHu[L]A\A]A^H=LLbMHHf.AVAUIATUHSHHUIHC IF HC(IF(HC0IF0HC8IF8HC@IF@IFHsIFInAHtLLIFHkMHt|DHHHE HC HE(HC(HE0HC0HE8HC8HE@HC@EHCHuHCI\$HLctHLHCHmIHu[L]A\A]A^HLL HUHf.USHHHXdH%(HD$H1HUHHEHt$H{HD$ HD$(HD$0HT$HD$D$8H$PyHD$xyHSHCHC HC(HC0C8HؘyHCyHC@HyHO`yHHHHHHf.AWAVAUATUSHXH/dH%(HD$H1HH]H9t;E<-w<+HHCH9Dc11AL$Ѐ vTu(H|$0HD$00yHD$8yHD$@@msHL$HdH3 %(UHX[]A\A]A^A_DE1H|$ A0HnH|$ HA;1ɄD$}H9$AA;fD19DA9HEAH9C4;AA9׉AEȃ00ADր DuA9vH|$ EEt[D$A"T$4fDHCHH9DcE11AAD$< D||$uQD1jfDH|$ EEt1f.H|$ fEtAEfDDH11E11sDH|$ IHH|$0LP H|$0LwM? ILPH|$0AH9D@IFA1EE1IlfC4A9DEDA0Eރ0D< wlEDt\1A9u[DA9wQuMEAAHH9EuD:H9t#AL9sAADA9vHHgu`H|$ EHE1AHHg*Ht$L$BL$D$EHt$BH H7H|$0HD$00yHmHD$0HxHgt Ht$BH|$ GH?f.DHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9E1AF A9$AǿpHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ID$(HCHID$0HCPID$8HCXID$@HC`ID$HHChiIE(HHغ[]A\A]A^A_AcfATUISHՉHpdH%(HD$h1HG0HD$H${ID$IT$HHHH@Ht9X }H@HuH99Y |HEHA(HEHA0HEHA8HEHA@HE HAHHE(HAPHE0HAXHE8HA`HE@HAhH4|$t H<$HD$hdH3%(uxHp[]A\HEHt$L\$HD$HEHD$ HEHD$(HEHD$0HE HD$8HE(HD$@HE0HD$HHE8HD$PHE@HD$XFeHW|$t H<$Hf.DHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9E1AF A9$AǿhuHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ID$(HCHID$0HCPID$8HCXID$@HC`2IE(HHغ[]A\A]A^A_Alf.USHHHxdH%(HD$h1HG0H|$t$ D$HD$8Ht$ H HUH9trHHP(HSHP0HSHP8HSHP@HS HPHHS(HPPHS0HPXHS8HP`H|$)|$t H|$HD$hdH3%(uiHx[]ÐD$ Ht$ HD$ HHD$(HCHD$0HCHD$8HCHD$@HC HD$HHC(HD$PHC0HD$XHC8HD$`lZHÀ|$t H|$Hf.@HWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9E1AF A9$AǿuHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ID$(HCHID$0HCPID$8HCXID$@HC`ID$HHChID$PHCpID$XHCxIE(HHغ[]A\A]A^A_AQUSHHHdH%(H$1HG0H|$t$ D$HD$"Ht$ HHUH9HHP(HSHP0HSHP8HSHP@HS HPHHS(HPPHS0HPXHS8HP`HS@HPhHSHHPpHSPHPxH|$|$t H|$VH$dH3%(HĘ[]DD$ Ht$ HD$ HHD$(HCHD$0HCHD$8HCHD$@HC HD$HHC(HD$PHC0HD$XHC8HD$`HC@HD$hHCHHD$pHCPHD$x)CHÀ|$t H|$HAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9ttE1AF A9$AǿHyHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ZIE(HHغ[]A\A]A^A_AfDATUISHՉH@dH%(HD$81HG0HD$H$kID$IT$HHHH@Ht9X }H@HuH9tY9Y THEHA(HEHA0HEHA8HEHA@HT|$t H<$HD$8dH3%(uHH@[]A\HEHt$L\$HD$HEHD$ HEHD$(HEHD$0H觿|$t H<$GHOf.DHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9t}E1AF A9$AǿPɺHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ID$(HCHIE(HHغ[]A\A]A^A_Af.USHHHhdH%(HD$X1HG0H|$t$ D$HD$Ht$ H+HUH9tbHHP(HSHP0HSHP8HSHP@HS HPHH|$|$t H|$HD$XdH3%(uSHh[]fD$ Ht$ HD$ HHD$(HCHD$0HCHD$8HCHD$@HC HD$HHÀ|$t H|$Hf.fHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HILE $D@ H1HE9}L9taE1AF A9$AǿhHA$It$H{((LC HHHD IE(HHغ[]A\A]A^A_AfUSHHHxdH%(H$h1HG0H|$t$ D$HD$Ht$ HEHUH9ttHHx0HH(HHP(H4H)H)ˁ<HH\HH|$ |$t H|$kH$hdH3%(u7Hx[]fDD$ H|$((HHHt$ HD$ lHÀ|$t H|$HAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9taE1AF A9$AǿHA$It$H{(3LC HHHDIE(HHغ[]A\A]A^A_AfHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HI謼E $D@ H1HE9}L9E1AF A9$AǿXuHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ID$(HCHID$0HCPDIE(HHغ[]A\A]A^A_AUSHHHhdH%(HD$X1HG0H|$t$ D$HD$XHt$ H+HUH9tbHHP(HSHP0HSHP8HSHP@HS HPHHS(HPPH|$Y|$t H|$HD$XdH3%(uTHh[]ÐD$ Ht$ HD$ HHD$(HCHD$0HCHD$8HCHD$@HC HD$HHC(HD$P蟶HÀ|$t H|$;HCHWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HIE $D@ H1HE9}L9E1AF A9$AǿpűHA$LHHDC ID$HC(ID$HC0ID$HC8ID$ HC@ID$(HCHID$0HCPID$8HCXID$@HC`ID$HHChyIE(HHغ[]A\A]A^A_AcfUSHHHdH%(HD$x1HG0H|$t$ D$HD$Ht$ HHUH9tHHP(HSHP0HSHP8HSHP@HS HPHHS(HPPHS0HPXHS8HP`S@PhH|$o|$t H|$HD$xdH3%(uxHĈ[]@D$ Ht$ HD$ HHD$(HCHD$0HCHD$8HCHD$@HC HD$HHC(HD$PHC0HD$XHC8HD$`HC@HD$hk]葳HÀ|$t H|$-H5DAWAVAUATUSHHHLgHHHWLH)HHH)H药ID$HC0Ht?HUHHUHPHUHPHUHPHU HP HU(HP(HU0HP0HU8HP8HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fDHw(LH)HLpLhK6H9HLdHI9 J<跮LIHs(L)HL4HCHHPH)HHHH;L;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLI1A9DLcIT$IH)HHHWLH)LޭDī@AWAVAUATUSHHHLgHHHWLH)HHH)HmID$HC0HtGHUHHUHPHUHPHUHPHU HP HU(HP(HU0HP0HU8HP8HU@HP@HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fDHw(LH)HLpLhK6H9HLdHI9J<菬LIHs(L)HL4HCHHPH)HHHH;蘶L;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLIA1DL[IT$IH)HHHOLH)L讫<蔩@AWAVAUATIUSHHHoHHHWHH)HHH)Hv{AHEHC0Ht+I$HIT$HPIT$HPIT$HPIT$ HP HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_Hw(HH)HLpLhK6H9HHlHH9 H<HIHs(L)HL4HCHHPH)HHHH;舴L;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLI듽:fDLةcHUIH)HHHXLH)L觩E荧f.AWAVAUATIUSHHHoHHHWHH)HHH)Hvk1HEHC0Ht"I$HIT$HPIT$HPIT$HPHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_Hw(HH)HLpLhK6H9HHlHH9 H<HIHs(L)HL4HCHHPH)HHHH;舲L;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLI듽:fDLاcHUIH)HHHXLH)L觧E荥f.AVAUIATU0SHHUIƋC Hs(I~(AF IFHsIFInAHtLLIFHkMHtc0HËE Hu(H{(C EHCHuHCI\$HLctHL>HCHmIHu[L]A\A]A^2H$L輰7HH觰"mHHLLGH HH >H膳1HyfAWAVAUATIUSHHH_HHHWHH)HHH)HGxͥHCI\$0HEEHPHHCECECE C E(C(E0C0E8C8E@C@EHCHEPCPEXCXE`C`EhChEpCpExCx  ((0088@HǃXH`HhHX@ǃPHǃpHtTHXH f.HHQHuH`HHPHuHhHpHpID$HHPIT$HH@HxID$8ID$0IT$@H[]A\A]A^A_It$(HH)HLpLhK6H9HH\HH9H<>HIIt$(L)HL4ID$HHPH)HHHI<$DM<$I\$IMt$(IK\.I\$HID$HxID$ HID$8HxID$@DL)HL4L9v@HSH)HHHtLI誡+L莡\HSIH)HHHWLH)L`DFHΞID$HHx`۱H#Hkf.AWAVIAUATLwUSIHHHTA̠HËEEC EC0EC8C(E C@E(CHE0CPE8CXE@C`EHChEPCpEXCxE`EhEpEx(  ) 08 *Hx@(H0P8X@`HHǃHHH`hǃxHǃHt`HHhHHpHHFHXHDž`HhHpHxHHDžxLLHDƵID$(HH[]A\A]A^A_fDL9E1B 9Af.@ATUISH_HHtGDHCAHtHËS D9HCE1HuEHuD9|[1]A\H_fH9]u*f.HLH1[]A\fDHȤE$P f.DATUISHHdH%(H$1HG0H|$t$ D$HD$Ht$ LHID$H9bCLpE0CE(E8CE@C EHC(EPC0EXC8E`C@EhCHEpCPExCXC`ChCpCx ()08*HH@I9 H(P0X8`@hHLHxHDžHDžHHHXHtWLHH f.HHQHuHHHPHuHHpHH|$ |$t H|$lH$dH3%(Hİ[]A\fCD$ H$xD$0CD$ D$8CD$(D$@C D$HC(D$PC0D$XC8D$`C@D$hCHD$pCPD$xCX$C`$Ch$Cp$Cx$$$$$$$$$$$$$$$$$$HXDŽ$xHDŽ$$HHDŽ$$($ H$H$$0$)$8$*HD$ $@ $H($P0$X8$`@$htZHPH$H fDHHQHuH$fHHPHuH$HpH$Ht$ L@H$H$p O!HHH$H$pb |$t H|$衶H詢fAWAVAUATUSHHHLgHHHWLH)HHH)HID$HC0Ht_HUHHUHPHUHPHUHPHU HP HU(HP(HU0HP0HU8HP8HU@HP@HUHHPHHUPHPPHUXHPXHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fDHw(LH)HLpLhK6H9HLdHI9 J<LIHs(L)HL4HCHHPH)HHHH;L;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLI聓A9DL`cIT$IH)HHHWLH)L.D@USHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHH肚HDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*H3D;` H~HxHHEHEH[]A\A]fD~nHW 1H9tHۧD;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDUSHH]HËEEHxHpC EC0EC8C(E C@E(CHE0CPE8CXE@C`EHChEPCpEXCxE`EhEpEx(  ) 08 *@(H0P8X@`HHǃHHH`hǃxHǃHtJ,HHHHQHuHHHPHuHHxHHH[]HH}H@H舛AVAUIATUHSHHv IƋIFHsIFInAHtLLIFHkMHif趍HËE E0HxHpC E(C0E8C8C(E@C@EHCHEPCPEXCXE`C`EhChEpCpExCx( () 0)*088@*@HHPPXX``hHǃHHHhǃxHǃHtOyHHDHHQHuHHHHHuHHHEHCHuHCI\$HLctHLMHCHmIH[L]A\A]A^ THHهLLHHYԚHHH]f.fffff.f.HНyAVAUAATUHSA襉 yH@@ HyH@@fD0Dh1HIf(衖HEHtkH@0I$HЃAHtkt.[H]A\A]A^ËCPSuHHPC PS HHPC uHHPHHH%@AVAUATUHSIH@HHG(dH%(HD$81腈 y@@ H0yH@HH@H@ HEHEI$HHX8H+X0eHA1\fAnI$H&H@0HUH HHRH)HH9HHHA9HHHHD$ HD$(蚇@@ HHy@ y@HD$(H}HD$ HOH;OnHt&HHAHD$(HD$ HD$(HAHHOLt$(M ЃAHAFPAVILPAF PAV ILP@xyHىH衝3yHI謜HLQKyHH茜"КyHzHH%H|$Bxy\H|$":yH0H|$Ht$8dH34%(HuwH@[]A\A]A^fDHt$ fywLyH޿iy1HH}HtțHH|$(HHt讛ILPAF 耠HH'H|$HfDf.@f.@f.@;f.+f.f. f.HvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.AVAUATUSLgH_I9toIAЃAmHI9tLHkHtMuދEPUuHEHPE PU uHEHHPI9uDMfMt[L]A\A]A^[]A\A]A^HEHPE f.AWAVIAUATUSHLoLLL)IIMzK$I9H$H<$Ht$MnML`Ht$LL)Ht%H>HBH:H~HFHzHM9LHHt%H2HAH1HrHBHqHHHL9uIXLAЃAH)HLd fDmL9IteHIhHtMuۋUruuHUHD$HRU HD$ru uHUHD$HRL9HD$IuI>HtHD$.HD$IH$MfIFH[]A\A]A^A_H$LfDHUHD$HRU HD$eHH9EIHL$$HHD$0HxHgt Ht$ ǖHD$@HxHgt Ht$ 論H軈HHHD$@HxHgtHt$0HHD$@HxHgtHt$^HHD$ HxHgt Ht$=HD$0HxHgtHt$!HfAUATIUSHHhH|$PdH%(HD$X1xH} Ht$P&HT$PHzHgXt\Hm H|$PLHELhCxHt$PHAHT$PHzHgHL$XdH3 %(Hh[]A\A]H|$ HT$PԨٓHEHt$ H|$@LhwH|$0LwHL$@HT$0HH|$PAH}0Ht$P_HT$PHzHgHT$0HzHgHT$@HzHgHT$ HzHg)ЃAHzJʅHt$PD$8D$fDЃAH*JʅHt$@D$D$fDЃAHJʅHt$D$踎D$fDЃAHJʅHt$PD$xD$fDЃAHJʅHt$PD$8D$fDЃAHt~JʅHt$@D$D$rfJqrJqrJqr2JqrJqrRJqr~+{HHD$PHxHgt Ht$@贒HĄHHD$ HxHgtHt$荒HHD$0HxHgt Ht$lHD$@HxHgtHt$PHHHD$PHxHgtHt$*Pf.ATUHSHH`H|$P$dH%(HD$X1tH{ Ht$P%HT$PHzHgWt[H[ H|$PHHL`@Ct$Ht$PHAHD$PHxHgHD$XdH3%(H`[]A\H|$ HT$PԨ܏HHt$ H|$@L`sH|$0HsHL$@HT$0HH|$PAH{0$Ht$P\HD$PHxHgHD$0HxHgHD$@HxHgHD$ HxHg,ЃAH{PЅ Ht$P$8$fDЃAH*PЅHt$@$$DЃAHPЅHt$$跊$DЃAHPЅHt$P$w$DЃAHPЅHt$P$7$DЃAHt~JʅHt$@D$D$sfPJHPJHPJH2PJHPJHRJqr~+wHHD$PHxHgt Ht$@贎HĀHHD$ HxHgtHt$荎HHD$0HxHgt Ht$lHD$@HxHgtHt$PHHHD$PHxHgtHt$*Pf.AUATAUSHHHhH|$PdH%(HD$X1pH{ Ht$P%HL$PHyHgOt[H[ H|$PHHLh(CpDHt$PHAHT$PHzHgHL$XdH3 %(Hh[]A\A]H|$ HT$PԨ܋HHt$ H|$@LhoH|$0HoHL$@HT$0HH|$PAH{0Ht$PDC_HT$PHzHgHT$0HzHgHT$@HzHgHT$ HzHg,ЃAH}Jʅ Ht$PD$ ;D$ fЃAH2JʅHt$@D$ D$ ЃAH"Jʅ!Ht$D$ D$ ЃAHJʅHt$PD$ 耆D$ ЃAHJʅHt$PD$ @D$ ЃAHQHt$@D$ D$ yJqrJqrJqr*JqrJqrJQrqz-sHHD$PHxHgt Ht$@越H|HHD$ HxHgtHt$菊HHD$0HxHgt Ht$nHD$@HxHgtHt$RHHHD$PHxHgtHt$,Pfff.ATUHSHH`H|$PD$dH%(HD$X1lH{ Ht$P$HT$PHzHg^tbH[ H|$PHHL`8BlD$Ht$PHAHD$PHxHgHD$XdH3%(H`[]A\fDH|$ HT$PԨԇHHt$ H|$@L`kH|$0HkHL$@HT$0HH|$PAH{0Ht$PD$^HD$PHxHgHD$0HxHgHD$@HxHgHD$ HxHg%ЃAHPЅHt$PD$.D$ЃAH2PЅHt$@D$D$ЃAH"PЅHt$D$讂D$ЃAHPЅHt$PD$nD$ЃAHPЅHt$PD$.D$ЃAHJʅHt$@D$D$hfDPJHPJHzPJH*PJHPJHJJqrzoHHD$PHxHgt Ht$@褆HxHHD$ HxHgtHt$}HHD$0HxHgt Ht$\HD$@HxHgtHt$@HHHD$PHxHgtHt$Pf.AUATAUSHHHhH|$PdH%(HD$X1shH{ Ht$PHL$PHyHgOt[H[ H|$PHHLh03hDHt$PHAHT$PHzHgHL$XdH3 %(Hh[]A\A]H|$ HT$PԨ̃HHt$ H|$@LhgH|$0HgHL$@HT$0HH|$PAH{0Ht$PDSHT$PHzHgHT$0HzHgHT$@HzHgHT$ HzHg,ЃAH}Jʅ Ht$PD$ +D$ fЃAH2JʅHt$@D$ ~D$ ЃAH"Jʅ!Ht$D$ ~D$ ЃAHJʅHt$PD$ p~D$ ЃAHJʅHt$PD$ 0~D$ ЃAHQHt$@D$ }D$ yJqrJqrJqr*JqrJqrJQrqzkHHD$PHxHgt Ht$@覂HtHHD$ HxHgtHt$HHD$0HxHgt Ht$^HD$@HxHgtHt$BHHHD$PHxHgtHt$Pfff.AUATIUSHHHhH|$PdH%(HD$X1sdH{ Ht$PHL$PHyHgOt[H[ H|$PHHLh 3dLHt$PHAHT$PHzHgHL$XdH3 %(Hh[]A\A]H|$ HT$PԨHHt$ H|$@LhcH|$0HcHL$@HT$0HH|$PAH{0Ht$PLsZHT$PHzHgHT$0HzHgHT$@HzHgHT$ HzHg,ЃAH}Jʅ Ht$PHD$*{HD$ЃAH2JʅHt$@HD$zHD$DЃAH"Jʅ!Ht$HD$zHD$DЃAHJʅHt$PHD$ozHD$DЃAHJʅHt$PHD$/zHD$DЃAHQHt$@D$yD$yJqrJqrJqr*JqrJqrJQrqzgHHD$PHxHgt Ht$@~HpHHD$ HxHgtHt$~HHD$0HxHgt Ht$^~HD$@HxHgtHt$B~HHHD$PHxHgtHt$~Pfff.AUATUSHHXdH%(HD$H1bHInHPbHx@@ HpyHHE yHP Lk(HC Hk(MtЃAHuAmHLkb@@ LHyHH_H}H<=H$HxHgHE yHP LkHCHkMЃAHAmH{P;ʼnC8OH|$ XydH|$ YxyHIdwHsLHVTwyHH?wH5eH|$ vI$LPHD$HdH3%(HX[]A\A]fAUJAMXH/@AEPAUIELPAE PAU fH|$Xy|mH|$rwyHH}vHsHHVmvyH[vH|$v!@H|$0XyDcH|$0 w"yHHvHsHHVvH|$0ufDЃAHPЅHt$0uIELPAE ZIELPKIELPAE PAU IELPH{PJHzbH|$0HtI$LPHllH|$ HtH|$HtHL#iH;lHs\H ioHHY\HhloIELPAE 5HniHH$HxHgt Ht$0yHHln9fDUSHHHHGyHgHGHGHGHG HG(dH%(HD$1nH/HD$dH3%(uH[]saH{0HHtHPH{(HtsH{HtsHSHzHgt Ht$xHjfUSHH+yHHGyHgHGHGHGHG HG(dH%(HD$1mHUHD$dH3%(uH[]`H{0HHtHPH{(Ht sH{HtrHSHzHgt Ht$wHjf.@f.@HHH@Hff.ff.ff.{ff.HvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.ATUISHHdH%(HD$1Hu2HC HxHgu_HHeHHsLHC(HkHxHgtЃAHPЅHt$q됹ЃAHtVHȅHt$pHH!eH}HD$dH3%(u0H[]A\HqpPJHp+^f.Hw(HHywLyZfЃAHtG~fDGPWpfffff.USHH8dH%(HD$(1 u1HHtjeC HD$(dH3%(uGH8[]H\$E(yH\HpyHoHbo]HHtfHH=oHfVO(yHHf\H.pzyH!dHnHHH\$PP(yHH!\HoHHcHnhHhHfHHnHHHn֐fffff.AWAVAUATUSHH(dH%(HD$1GDHHH)HH+1E1I%@HHDH)HH9HHH<HHL](yD4dLn }HImHL` yHHmDHn`LArmD9ePL_(yvdLnn)pyH|mL4mHHtXs[HD$dH3%(E u:H([]A\A]A^A_I11H޿iy1HTHLlHUdZ{USHH(dH%(HD$1 tqHH\Hy(ycHHmТyHlHUlE HD$dH3%(uOH([]f.Hu(yHfYH.m*yHHMYLgH$`{I$BAL$QA;T$AT$wAT$jE11fI$AJH$`(yOH$`Y }HIXLLK yHIXLdKH$`dXA9l$i1E1I$I$AD$H)HI9IJ<(M$HP`rHt$iH4$iy1D?HH$HxHgt Ht$@H:OH{H~eHHc?HKvRH$`H6zHQH$`zHNLiy1>H$`HHWHH|$@H2WH|$dH|$yHD$0HxHgtHt$/H|$HVH|$dhDH4$iy1/>HH4$iy1>HHHtHοiy1=HHCHxHgHt$EIHCPHxHgt Ht$"Hs0HLH{HdHH=HJPH@PHM6IHHCHxHgtH$`HHs0L&HHCPHxHgtH$`cϐAWAVEyAUATIUSHHH_(DodH%(HD$81HT$H|$ HHh0I$ H@0H=PLD$ $9E D$ HEHHUPH$H $H)HH9H4$iy13fH](HUPHL`(HEHH)HH;$ HL$H|$`H4HPH|$` ܧyAHH$HH$HgAԉH$HxHgH HD$`HxHg  HMHHUPH)HH;$fHcD$ IHD$(CI1HD$0fHD$AH$H4HP@H$HN HH$HHH$t H$BHs H$(yDp2BH$%LHyHI0KDL%9H$JL$MtAE'L$MtAEfHD$(HUhL4HE`H)HI9S J48H$HP8H$H;HH$HHH$t H$BH`@H$(yD$AH$KP@yHIJt$L8H$IL$MtAEXL$MtAEHEHHUPH)HH;$HL$H$H4HP@H$H'LHM'AEH_JAEfL$MtAEH$(y?H$IyHIHt$L6yHIHDL6 yHIHDL6H$DHHE`HUhH)HI9J48H$HP8HEHHUPH)HH;$eHL$H$H4HP@HHH$H$E1D_FL$MtAD$=L$MtAD$H;\$0D$ DHMHHUPHIH)HH;$H4$iy1.EH$@(y0>H$@#HyHI.Gt$L"5yHI GDL5 yHIFDL4H$@FHE`HUhH)HI9nJ48H$`HP8HEHHUPH)HH;$HL$H4HH@PH=PNE/HHDŽ$PHDŽ$XH:H$`H$PE11DL$XMtAD$L$hM=AD$(I$H@H=PII|$HtHPAD$ I$LHBH=cNRIEH@H=PI}HtHPAE qIELHPHcNPQIEH@H=P,I}HtHPAE :IELHPHcNPfIEH@H=PI}HtHPAE IELHPHcN@PfIEH@H=PI}HtHPAE cIELHPHcNPCfIEH@H=P2I}HtHL$PL$AE IEL$LHPHcNPL$IEH@H=PI}HtHL$PL$AE *IEL$LHPHcN&PL$fH=JDH$PHHvfDI$H@H=PRI|$HtHPAD$  I$LHBH=cNfI$H@H=PI|$HtHPAD$ I$LHBH=cNMRkI$H@H=PI|$HtHPAD$ I$LHBH=cNRLLwL$LЋL$LL$LЋL$LaLLLLbLHD3H H@0H=PHhC]ҋL$ ҋL$H$D$D$i3H$qH$_H$n(y-H$AryHt5H$G@H$(dH3%(vH8[]A\A]A^A_H$(y'7H$AyH 5H$?EH$xD$HD$(H$HD$0H](|$HL`(H$HDŽ$gHpwH$H$L$$1IHL$I)HRHL3&y1L/8H#yH$HgH$HHD$4HH$HH$Hg1AԉH$HxHg H$HxHg H$HxHgn D$HHH$HH)HH9H $H$HH4HL$ HP8HE`HUhHcH)HH9HH$pH40HP@HHKH$H$pE11yHI=L+2yHH=L<$HLq0H$t=HuxH$HP8HHH)HI9HL$ H$H4HP@HHRDD$H$H$1;H$L$L(H$?(H](L|$H$s }HLL`@H$LIy@LH$HH$AH$HxHg3H$HxHgH](H$H$HL`:$H$|$HDŽ$gHpsH$L$$H$H1I)HR"H$y14HH|$PyH$Hgq1HH$HH$H$HgH$AH$HxHgH$HxHgH$HxHgH$HxHgLfDHLHpM^H$L$H_Ml$LI9HIFr=L)HJHI|$HgL$HHH@AD$It$H{CX"HS(HC0Lk C(HCHHS8HS@It$0HtHLmHC0H fDHHQHuHK8 fDHHPHuHC@ID$HHCHIt$PH{P!HShAD$XHCpH{`ChHǃHSxHIt$pCXHtLmnHCpH@HHQHuHKx fDHHPHuHI$HI$H2!LH$HH8H{[Hg-fI|$HgXЃAHAT$.H$D$88D$8HHH)HH9$.HL$ H<HHHqPhL|$H;(yLHXo/Lg9 }HIr8L4$LL+ XyHIN8HL^L7HH7H{ZH;,HHH)HI9AHL$ H<HPpHH $<WH$F(y.H$8 }HH7H4$HD*)yH7H$57H$HxHgsH$HxHgHD$EL$9'H$2HH64HI(HIHH$H1H$HxHgt H$wH$HxHgH$QnH4$iy1H|$H_1H4$iy1HJW0H{H>HHHw%+HHCPHxHgt H$Hs0LUHCHxHgtH$H*HHHHH$HxHgt Ht$RH$HxHgt H$0H$HxHgt H$H$HxHg~H$lHHHXHH$HxHgt Ht$譿H$HxHgHt$芿HH$HIH$HLHu;L|$,(yHLLt0fyHg$H4$H+"yHN$L&/HHPH$-(yHNH$0HH$H$.HH1HIH4$iy1HjH$xIIH$LLHML|$(yILLL/(yH?#HUH$IHjIH HH$(yHIHD$L#yHL"HHPH$(yHH$#HHH$d"HH/%"1H$D$8EHH|$H "yHHH@$H{LC1HS(HC0Lk C(HCHHS8HS@H$ HtILMHC0H@HHQHuHK8 fDHHPHuHC@H$8HCHH$H{PHp@HSh$HHCpH{`ChHǃHSxHH$`CXHtM6OHCpHDHHQHuHKx fDHHPHuHH$xHH$HHLHHH$<H$'H$HxHgH$HxHgLIH$xI9HD$H$ H$ yHX(HL`(F1H$ HAԅH$ HxHgL$H$xI9lHD$LH$Lp@H$H$P }H$ H$@zA\$ H$@H$2H$PH$H$;HHH@$H{LCQHS(HC0Lk C(HCHHS8HS@H$HtILKHC0H@HHQHuHK8 fDHHPHuHC@H$HCHH$H{PHp@HSh$HCpH{`ChHǃHSxHH$CXHtMVLHCpHDHHQHuHKx fDHHPHuHH$HH$HHLHhH$9H$$H$@HxHgH$PHxHgLIH$xI9HD$H$ H$`MyHX(HL`(f1H$`HAԅ?H$`HxHgL$H$I9lHD$LH$ Lp@H$H$s }H$H$?A\$ H$H$0H$H$H$ 9HHH@$ H{LCqHS(HC0Lk C(HCHHS8HS@H$@HtIL5HHC0H@HHQHuHK8 fDHHPHuHC@H$XHCHH$ H{PHp@HSh$hHCpH{`ChHǃHSxHH$CXHtMvIHCpHDHHQHuHKx fDHHPHuHH$HH$ HH3LHH$ 6H$!H$HxHgH$HxHgL4IH$I9HD$H$H$yHX(HL`(1H$HAԅH$HxHgL$H$I9lHD$LH$Lp@H$ H$ }H$H$ }A\$ H$H$0-H$H$H$36HHH@$H{LCHS(HC0Lk C(HCHHS8HS@H$HtILUEHC0H@HHQHuHK8 fDHHPHuHC@H$HCHH$H{PHp@HSh$HCpH{`ChHǃHSxHH$ CXHtMFHCpHDHHQHuHKx fDHHPHuHH$( HH$HHSLHH$3H$H$HxHg H$HxHg LTIH$I9HD$H$H$1yHX(HL`(1H$HAH$HyHghL$H$I9OHD$LuL@H$ H$> }.H$H$ }A\$ H$H$X*H$H$H`3HHH@$@ H{LCHS(HC0Lk C(HCHHS8HS@H$` HtNLBHC0H fHHQHuHK8 fDHHPHuHC@H$x HCHHu@H{P/HSh$ HCpH{`ChHǃHSxHH$ CXHtMCHCpHDHHQHuHKx fDHHPHuHH$ HHHLHH(1H$;H$HxHgH$HxHgL IH$I9HD$HH$D$E1fD$H$PL+1L$PH$M|$H^LL9LHFP1҅u"I)߸LH9w EI|$Hg|$GH$HH$H$ HxHgwH$HxHgID9l$HD$Ht$@H$0EHX(HL`H$ DHDŽ$ gVDH$ L$ H$ H1I)HRH$ y1HH$PyH$Hg+HH$0HH$H$@ HgHAH$@ HxHgwH$HxHgH$ HxHg]H$0HxHg$H$s }HDŽ$ g H$ z?H$ } H$  }H$`(ywH$`j  }HHu LHayHHU H$ HHVA jyHH, H$HHV H$` HD$H$ DHX(HHDŽ$@gL`(BH$@L$ H$@H1I)HRVH$@y1MHH$tyH$Hg HHHH$@ Hg1AԉH$@ HxHgTH$HxHgcH$@HxHg:H$LpL$LL.Lo19LT$YT$H$L.H$/H$ H$#H$H$H,H$H$HD$HLL|$L9u)zHL+H8M9Lt0LcHL3L^2tI9uM9H\$LuH\$I9tH.H{5+HHHH@$@ HuH{CJHS(HC0Lc C(HCHHS8HS@H$` HtJL;HC0HDHHQHuHK8 fDHHPHuHC@H$x HCHHu@H{PHSh$ HCpH{`ChHǃHSxHH$ CXHtMV<HCpHDHHQHuHKx fDHHPHuHH$ HHHH4$HoH)fH$> } asH$ }"D$fDH$ swfDH`HPmHIH$(M*H|$H$ 3!H$(HtMhH|$pHtHPH$hHtMhyL$xMtDAD$;,$UHt$H9C Ht$)HH$pHHH$xt@HC(H$`HC0HH$htЃAHPH HL$H$`H$L2xH{xH$H$HtHPH$hHtHD$HxHH$pHHH$xt@HC(H$`HC0HH$htЃAHPHHL$H$`H$LG~HH$H$HtHPH$hHtHD$HxHH$pHHH$xt@HC(H$`HC0HH$htЃAHPH*HL$H$`H$LYHH$EH$HtHPH$hHt0HD$Hx2HH$pHHH$xt@HC(H$`HC0HH$htЃAHPHcHL$H$`H$LL$iHHD$H$AЃAHDŽ$FMF HдyHF FH|$FH$Ht>LuLmM9tI}HtHPIM9uLuMtLH H$hHtHD$E1HxIIWH1HL$H)H҉S@AA. H$HP1ɺ yyHH3MH$pH$x_AHH;-Ht7H$pH@HH$xHDŽ$xHPHDŽ$pHHH$xHtMh- MA.9 AD9kIIWDH)HH9* L4IH$SHIMIELuE HEyHEH$EHHH;HDŽ$pHDŽ$xHt$H|$@!H@q~yH1HHD$8HT$(HL$ VHL$ HT$(HD$8q ~y PJHyHHHD$ RHD$ P JH THHRFPJHdHHHD$ RHD$ P JH ?HHR1PJHMHHHD$ RHD$ P JH (HHRI$H@H=PuHI|$HtHPDAD$ I$LHPHcNutPfLLI$ H@0H=PLLI$ H@0H=P0L#uE@rEPUHEHPE PU HEHAPD9kH$PH$y$H$H$`OH$`HH$hHDŽ$`HDŽ$hHHHH$pH$xHD$HxH$hH$HxHgkHHL|$C((y[LL~©yHHH/ ةyHmL%H|$kH|$0aH$dH3%(s HĘ[]A\A]A^A_ËPJHRHHH$RH$P JH /HHR!AEI$H@H=PuhI|$HtHPAD$ dI$LHBH=cNREH$pvH$`uL롃@@@ @FHH$pHHH$xt@HC(H$`HC0HH$htЃAHPHjH$pH$`H$ALHHD$]H$H$0HkHH$0HH$8HtH$HtHPH$hHt]Lt$I~_Lc(1HI$Lh(IHCHH$H0HPH$ ܧy}HLLH$pHg1AAH$pHxHgH$HxHgABRHD$1Lk`Lp@HL$H$`H$AL[H$H$@H$@LH$HHt4H$HtHPH$hHtLD9HH$pHHH$xt@HC(H$`HC0HH$h(ЃAH@FHD$@4H$prC #HH$pHHH$xt@HC(H$`HC0HH$htЃAH@HL$H$`H$ALH$H$P H{`H$PH$XHtH$HtHPH$hHtHD$Hx,@Ht$qHH$hHtXH$x[H|$0AHiH$HHt$H|$PHtHP=H$(HHtH|$pHuH1HHL$ HD$8HT$(VHL$ q HT$(HD$8H1HD$(HHT$ VHD$(HT$ H$(nfDHHHD$ RHD$ P NfHHHD$ RHD$ P fDHHHD$ RHD$ P 4H$HHtHPH$hHtH|$HHEHPm HEHPHHH$RH$P {HEHPE iy1rHjH$HHVLeLmM9tI}HtHPIM9uLeMtL HHt$iy1HHD$`HxHgH$pGowHH$pHxHgtH$`oHH$HxHg4Ht$n%H$8HHt[H$HTUH@H$HHHtH$HHHt$nn.H$`\nHH$pHxHg#H$`.nHH|$LH$xHHtHzH$HHijH$HHPQgHHD$@HxHg@HH$HxHgRHt$nmCH|$H1BH:H|$0KHhHHH$XHHtH$HHfAUATLUSHH(HpyHG gdH%(HD$1HG(HG0HG8HG@HGHHGPHGXHG`HGhHGpHGxHLJHLJHLJHLJHLJHLJHLJHLJHLJHLJHLJHLJLLHLJHnHHLJHLJGG HHG(nЃAHt\ELo0MtRAEuDIEHT$LPAE HT$u"IEHT$LPHT$ EHk0HBH Ht@HHHHtEt'HgHD$dH3%(ueH([]A\A]@HEH@H=Pu8H}HtHPE uHEHHPHcNu P뒐H]HHHtLHHHHHtHHtHHtzH{`H{HH{@HtZH{0HtLHS HzHgt Ht$iHYff.f.@HHH@Hf.@f.@HHtHH@fDfDHHtHH@fDfDf.f.{f.kf.[f.Kf.xHHGHPyJءyyf.DHvIH0yt 1>*t0yt fI@f.HvIH@yt 1>*t@yRt fI@f.HvIHyt 1>*ty)t fI@f.ATUSLgMtKIl$I$H9t DH;HtHRHH9uI,$HtH[L]A\@[]A\AVAUATUSLgHI9toIAЃAmHI9tLHkHtMuދEPUuHEHPE PU uHEHHPI9uDM&Mt[L]A\A]A^H[]A\A]A^HEHPE f.AVAUATUSLgHI9toIAЃAmHI9tLHkHtMuދEPUuHEHPE PU uHEHHPI9uDM&Mt[L]A\A]A^x[]A\A]A^HEHPE f.ATUISHH9tH+H{tHHL9u[]A\f.DHWH+HH9sPiy1AUATUSHHHHHGHxHUHEAЃALc@Hh@ HyHPL9t4MtKELcMtAT$f.HCMtwmH[]A\A]ÐM@tAT$JAL$uI$HD$LRAT$ HD$JAL$ uI$HD$LRHD$fDPJHuHHHD$RHD$P JH HHHD$RHD$P DHHHRH[]A\A]H#I$HD$LRAT$ HD$QH{Ht$HLf.fAVAUAЃAATUISHL6追HI$MI$CC HyHCHCt>(LeLuH]MtMt*Al$tL[H]A\A]A^DCAD$PAT$uI$LPAD$ PAT$ I$LPAD$ uI$LPHHPC VHHPHHATIUSHt!HsLHkHHHu[]A\f.ATUISHHdH%(HD$1HukHHHtXHsLHC HkHxHgtϹЃAHtMHȅHt$HH8HuHD$dH3%(uH[]A\Hqp^f.@AWAVIAUATUSHLoLLL)IIMzK$I9H$H<$Ht$_MnML`Ht$LL)Ht%H>HBH:H~HFHzHM9LHHt%H2HAH1HrHBHqHHHL9uIXLAЃAH)HLd fDmL9IteHIhHtMuۋUruuHUHD$HRU HD$ru uHUHD$HRL9HD$IuI>HtHD$nHD$IH$MfIFH[]A\A]A^A_H$LfDHUHD$HRU HD$eHH9EIHL$$HBH:H~HFHzHM9LHHt%H2HAH1HrHBHqHHHL9uIXLAЃAH)HLd fDmL9IteHIhHtMuۋUruuHUHD$HRU HD$ru uHUHD$HRL9HD$IuI>HtHD$HD$IH$MfIFH[]A\A]A^A_H$LfDHUHD$HRU HD$eHH9EIHL$$JʅHt$PD$LD$fJqrRJqrJqrrJqr蛰HHD$PHxHgt Ht$LHD$0HxHgt Ht$0HD$@HxHgt Ht$HD$ HxHgt Ht$HHHH뱐AUATIUSHHԨHhH|$ HT$PdH%(HD$X1 HHt$ H|$@L`H|$0LHL$@HT$0HH|$PAH{8Ht$PH谠HT$PHzHgufHT$0HzHgHT$@HzHgHT$ HzHgH\$XdH3%(HHh[]A\A]DЃAHJʅxHt$HD$GHD$_DЃAHJʅNHt$PHD$HD$5DЃAHJʅ$Ht$PHD$HD$ DЃAHt>JʅHt$PHD$HD$JqrRJqrJqrrJqrۭHHD$PHxHgt Ht$HD$0HxHgt Ht$pHD$@HxHgt Ht$THD$ HxHgt Ht$8H HHH뱐AUATIUSHԨHhH|$ HT$PdH%(HD$X1JHHt$ H|$@L`DH|$0L7HL$@HT$0HH|$PAH{8Ht$P貖HT$PHzHguhHT$0HzHgHT$@HzHgHT$ HzHgH\$XdH3%(JHh[]A\A]ЃAHJʅvHt$D$ 舾D$ _ЃAHJʅLHt$PD$ HD$ 5ЃAHJʅ"Ht$PD$ D$ ЃAHt>JʅHt$PD$ ̽D$ JqrRJqrJqrrJqrHHD$PHxHgt Ht$HD$0HxHgt Ht$HD$@HxHgt Ht$HD$ HxHgt Ht$xH`HHH뱐AUATIUSHԨHhH|$ HT$PdH%(HD$X1HHt$ H|$@L`脤H|$0LwHL$@HT$0HH|$PAH{8Ht$PrHT$PHzHguhHT$0HzHgHT$@HzHgHT$ HzHgH\$XdH3%(JHh[]A\A]ЃAHJʅvHt$D$ ȻD$ _ЃAHJʅLHt$PD$ 舻D$ 5ЃAHJʅ"Ht$PD$ HD$ ЃAHt>JʅHt$PD$ D$ JqrRJqrJqrrJqr[HHD$PHxHgt Ht$ HD$0HxHgt Ht$HD$@HxHgt Ht$ԿHD$ HxHgt Ht$踿H蠱HHH뱐ATUISHԨH`H|$ HT$PD$ dH%(HD$X1ȽHHt$ H|$@Hh¡H|$0L赡HL$@HT$0HH|$PH{8Ht$PD$ 譔HD$PHxHgucHD$0HxHgHD$@HxHgHD$ HxHgHD$XdH3%(UH`[]A\@ЃAH*PЅ{Ht$D$ D$ `ЃAHPЅQHt$PD$ ƸD$ 6ЃAHPЅ'Ht$PD$ 膸D$ ЃAHtNPЅHt$PD$ JD$ PJHJPJHPJHbPJH若HHD$PHxHgt Ht$H\$PD$DLLHIHZBH{QHD$@HxHg H8yLLt$@HM?L覆HHD$PHCHHD$Xt@袈H\$PD$DLLHIHaH{赉HD$@HxHgHwXyLELt$@HM?L HHD$PHCHHD$Xt@H\$PD$DLLHIH*H{HD$@HxHgH{yL詟Lt$@HM?LnHHD$PHCHHD$Xt@jH\$PD$DLLHIHNH{}HD$@HxHgLH?yL Lt$@HM?L҄HHD$PHCHHD$Xt@ΆH\$PD$DLLHIH zH{HD$@HxHgHCзyLqLt$@HM?L6HHD$PHCHHD$Xt@2H\$PD$DLLHIH辿H{EHD$@HxHgHyL՝Lt$@HM?L蚃HHD$PHCHHD$Xt@薅H\$PD$DLLHIH2H{詆HD$@HxHgxH k(yL9Lt$@HM?LHHD$PHCHHD$Xt@H\$PD$DLLHIH&H{ HD$@HxHgHoXyL蝜Lt$@HM?LbHHD$PHCHHD$Xt@^H\$PD$DLLHIHH{qHD$@HxHg@H3yLLt$@HM?LƁHHD$PHCHHD$Xt@ƒH\$PD$DLLHIH~NH{ՄHD$@HxHgH7yLeLt$@HM?L*HHD$PHCHHD$Xt@&H\$PD$DLLHIHH{9HD$@HxHgH}LɚLt$@HM?L莀HHD$PHCHHD$Xt@P节H\$PD$DLLHIH趬H{蝃HD$@HxHglH_yL-Lt$@HM?LHHD$PHCHHD$Xt@PH\$PD$DLLHIH躞H{HD$@HxHgHcyL葙Lt$@HM?LVHHD$PHCHHD$Xt@PRH\$PD$DLLHIH讏H{eHD$@HxHg4H'0yLLt$@HM?L~HHD$PHCHHD$Xt@P趀H\$PD$DLLHIHBH{ɁHD$@HxHgH+XyLYLt$@HM?L~HHD$PHCHHD$Xt@PH\$PD$DLLHIHbH{-HD$@HxHgHyL轗Lt$@HM?L}HHD$PHCHHD$Xt@P~H\$PD$DLLHIHpH{葀HD$@HxHg`HSyL!Lt$@HM?L|HHD$PHCHHD$Xt@P~H\$PD$DLLHIH~H{HD$@HxHgHW}L腖Lt$@HM?LJ|HHD$PHCHHD$Xt@PF~H\$PD$DLLHIHH{YHD$@HxHg(H}LLt$@HM?L{HHD$PHCHHD$Xt@}H\$PD$DLLHIH H{~HD$@HxHgH}LMLt$@HM?L{HHD$PHCHHD$Xt@}H\$PD$DLLHIH! H{!~HD$@HxHgH}L豔Lt$@HM?LvzHHD$PHCHHD$Xt@r|H\$PD$DLLHIH/ H{}HD$@HxHgTHG}LLt$@HM?LyHHD$PHCHHD$Xt@{H\$PD$DLLHIHr? H{|HD$@HxHgHK4}LyLt$@HM?L>yHHD$PHCHHD$Xt@H:{H\$PD$DLLHIHF H{M|HD$@HxHgHJ}LݒLt$@HM?LxHHD$PHCHHD$Xt@HzH\$PD$DLLHIH H{{HD$@HxHgHsb}LALt$@HM?LxHHD$PHCHHD$Xt@HzH\$PD$DLLHIH H{{HD$@HxHgHwu}L襑Lt$@HM?LjwHHD$PHCHHD$Xt@HfyH\$PD$DLLHIHB H{yzHD$@HxHgHH;}L Lt$@HM?LvHHD$PHCHHD$Xt@HxH\$PD$DLLHIHX H{yHD$@HxHgH?}LmLt$@HM?L2vHHD$PHCHHD$Xt@H.xH\$PD$DLLHIHZh H{AyHD$@HxHgH}LяLt$@HM?LuHHD$PHCHHD$Xt@HwH\$PD$DLLHIHw H{xHD$@HxHgtHg}L5urH\$PHM7Ht8wD$DHLHHKHD$PHxHgHt$@[}L貎u|H\$PHM7H{t@vD$DHLHHeAHD$PHxHgHt$@uGH\$PйyHFyHHuHHV}HI6HHV yHՀH1請NI}?s5idHHsLJ @6,"vlbXNDx:n0dIIHLM~H{uHD$ HxHgtH'HLH]qMy@jCHHH/qMy@jH͊HHXIIHLM"~H{uHD$0HxHgtHHLHJqMy@j~HS`HIH\$PtHIIHLM}H{tHD$HxHgtHHLH6pMy@j~HԉIIHLM;}H{2tHD$@HxHgtHHLHIH\$PHIH\$P!HBzHAHIH\$P =3)HIH\$PHAWAVo}AUATIUSLIHMH8EdH%(HD$(1H\$xщHHM?oHIHD$HCHHD$t@qH\$DD$pDLLHIHSH{rH$HxHgHL$(dH3 %(I,$LH8[]A\A]A^A_yLu_HHM?nHIHD$HCHHD$t@pH\$DD$pDLLHIH*I@8yL諈twXyL蚈HHM?dnHIHD$HCHHD$t@]pH\$DD$pDLLHIHLHHM?nHIHD$HCHHD$t@oH\$DD$pDLLHIHZIbDHnyL資twyL袇HHM?lmHIHD$HCHHD$t@eoH\$DD$pDLLHIHbHHM? mHIHD$HCHHD$t@oH\$DD$pDLLHIHr6jD}Lˆu[HHM?lHIHD$HCHHD$t@nH\$DD$pDLLHIH豌зyL_u[HHM?-lHIHD$HCHHD$t@&nH\$DD$pDLLHIH赧yLu[HHM?kHIHD$HCHHD$t@mH\$DD$pDLLHIH)!(yL臅u[HHM?UkHIHD$HCHHD$t@NmH\$DD$pDLLHIH}XyLu[HHM?jHIHD$HCHHD$t@lH\$DD$pDLLHIHqIyL评u`HHM?}jHIHD$HCHHD$t@vlH\$DD$pDLLHIHUoyL>u[HHM? jHIHD$HCHHD$t@lH\$DD$pDLLHIH6lH\$йyHnH軂HuHHVˁ}HvIuHHV讁 yHvH1WIHLuH{lH$HxHgtHHxHH\$HH빐fAWAV}AUATIUSLIHMH8EdH%(HD$(1H\$x豂HHM?{hHIHD$HCHHD$t@PtjH\$DD$pDLLHIH裔H{kH$HxHgHL$(dH3 %(I,$LH8[]A\A]A^A_yLu_HHM?gHIHD$HCHHD$t@PiH\$DD$pDLLHIH葆I@yL苁tw0yLzHHM?DgHIHD$HCHHD$t@P=iH\$DD$pDLLHIH̠HHM?fHIHD$HCHHD$t@PhH\$DD$pDLLHIH:wbDHhnXyL蓀twHyL肀HHM?LfHIHD$HCHHD$t@PEhH\$DD$pDLLHIHYHHM?eHIHD$HCHHD$t@PgH\$DD$pDLLHIHJjDyLu[HHM?yeHIHD$HCHHD$t@PrgH\$DD$pDLLHIHg}L?u[HHM? eHIHD$HCHHD$t@PgH\$DD$pDLLHIH蕭yL~u[HHM?dHIHD$HCHHD$t@PfH\$DD$pDLLHIH X!}Lg~u[HHM?5dHIHD$HCHHD$t@P.fH\$DD$pDLLHIH蝻H\$]йyHiH|HuHHV{}HpIuHHV{ yHpH1{f6iIHLoH{fH$HxHgtH&HrHH\$HH{뽐fAWAV}AUATIUSHLIMH8EdH%(HD$(1H\$x|LHM?bHIHD$HCHHD$t@dH\$DD$pDLLHII H{eH$HxHgHL$(dH3 %(LeHeH8[]A\A]A^A_}L+|u_LHM?aHIHD$HCHHD$t@cH\$DD$pDLLHIIq I@}L{tw}L{LHM?taHIHD$HCHHD$t@mcH\$DD$pDLLHII ' LHM?aHIHD$HCHHD$t@ cH\$DD$pDLLHIIJ bDHn}LztH\$йyHeHyI4$HHVx}HIxIuLHVx$ yHtxHE1)x@LHM?`HIHD$HCHHD$t@ bH\$DD$pDLLHII beH\$HH{cH$HxHgtHvHoLHkHHvw@UHAWAVAUATISHHUHHHH4}dH%(HE1{L#HH I$Lp^HUH)}zH HLHAHHxHgH HxHgH}йymH}w(pyHIvHLHVvH}IvL#HUH0yI$Lp(z1H0LAAH0HxHgEuJL#HUH@yI$Lp(y1H@LAAH@HxHgL3HUHP1yILx(y1HPLADHPHxHgQL#HUH`ѨyI$Lp(1y1H`LAAH`HxHggEuJL#HUHpyI$Lp(x1HpLAAHpHxHgL3HUH}yILx(x1HuLAHMHyHgIUHUIUHHUtBDHH}AX\HpH}>}3xHHEHCHHEtЃAH@HEHHLEHMHUPATEH}XZHt3tHEHxHgHEHxHgHEHx _HHxHgHHxHgH]dH3%(HHe[A\A]A^A_]@+HujfHurfHuYfHufHu$fHuNfHuVfHu+fDHufHuwfHugfHuWs-`H}HarHHxHgt H !HHxHgt HHiHHH@HxHgtHuHHPHxHgvH}HHtrHEHxHgt HuHEHxHgt HupHEHx\HHpHxHgaHH`HxHgAHHEHxHg$HHHxHgt HuH HxHgHuHHH0HxHgZHmHHfffff.UHAWAVAUATISHHUHHHHj}dH%(HE14tL#HH I$Lp&XHUHD}tH HLHAHHxHgH HxHgH}йyfH}p yHIoHLHVoH}yoL#HUH0yI$Lp(Is1H0LAAH0HxHgEuJL#HUH@yI$Lp(r1H@LAAH@HxHgL3HUHP1yILx(r1HPLADHPHxHgQL#HUH`ѨyI$Lp(ar1H`LAAH`HxHggEuJL#HUHpyI$Lp(r1HpLAAHpHxHgL3HUH}yILx(q1HuLAHMHyHgIUHUIUHHUtBDHH}AUHpH}}cqHSHHHEHUtЃAHBHEHHLEHMHUPjEH}XZHtcmHEHxHgHEHxHgHEHxH0HS>HHyHHHpHxt]LuHLHHpHAVjA觪HHDž_AXHI$HEID$HHEt@HH=H@H=HHyHHHEH}tLmHLHHUH AUjAY^H HH0HDž H=L@H}LXI$HEID$HHEt@H>LHL0HHHSAWH( XZH{?H@HxHgH0HxHgH HtHPH}HtTHHxHgHHxHgI}r?HHtHPHxHt?THHxHgoHHxHggI~?HHtHPHXHtSHHxHgSHHxHgH;fDHHHL0ILh,;H H;H" }HHHLHALHLHHHxHgHHxHgHHxHgHHL0ILhH`HH\:H0HPI:HP" }GHHPLHpAHpH%HHpHxHgUHPHxHgMH`HxHgEHHH}HHHHHHH9LuH@LHu9" }L#GLmHMLHHLHLVGHEHxHg9HEHxHgu8HEHxHgHӢfDHfDH谢fDH蠢H萢 H耢HpH`HPH@H0H H HHHHСhHpH谡EH蠡MH萡H耡Hp H`HPH@H0H &HHHHFHРHLmL謠yH蘠}LmL脠hHplLmL\HHLmL4H ;HH HxHgt HHHxHgt HӟHHxHgt H賟HKEHHLmIHHxHgtH~I}8HHtHPHxHtMHHxHgtH6HHxHgtHI~8HHtHPHXHt^MHHxHgtHҞHHxHg_LHH'8HHxHgt Hp臞HHxHgt HgHHxHgt HGHHxHgt H'H@HxHgt HH0HxHgHLuIH0HxHgtH軝I~27HHtHPHXHtKHHxHgtHsHHxHgHSIIH0HxHgtH'H HtHPH}HtwKHHxHgUHHILmXILuHIM8?H{/6H@HxHgTH菜GIHIJLHIcHH`HIH`HdIH`HIxILuILuHIMl>H{c5HHxHgtHǛHHxHgtH諛HpHtHPH}HtIHPHxHgtHoH`HxHgtHSI}4H@HtHPHxHtIH HxHg8H+IIHHxHgeHךXIHEHxHg@IHEHxHgtH蜚IXILmIIIEIHPHxHgtHMH`HxHgQIIHEHxHgt Hu H`HxHguFLIHIHEHxHgt HuƙHpHxHgtH誙IHPHxHgtIIHEHxHgt HumHHxHg]IIHHxHgtH/HHxHg HIHEHxHg=H0IHIHHxHgIHHxHgtH藘IHpHxHgHpINIIHEHxHgHu:ILmUHAWAVLuAUATSIHHHHL йyHLLH]dH %(HM1DmH@HxHgOHPHxHgGI~)HHEHCHHEt@HH}&HHpF }~HHHEHAHHEtЃAH@HAVLEjHpH`ALH}XZHt=HpHxHgMHEHxHgHI~(HHUyLLLHDžHDžHHH0HDž0HH`HDž`H@HH}zRHHEHCHHEt@h&HHELUHMAVPLAWHZ HI~H H'HEHxHgHEHxHgH`HHPH0HtHPHHtHPHHtHPHHxHgjHHxHgbH@HxHgZH0HxHgRH]dH3%(HHe[A\A]A^A_]fH0H45H1ҾԨ58H1ҾԨ5H@1ҾԨHH5fD@*@1@7@L而Lp&L`LPL@L0Huf.HufLLL؋LȋL踋L訋L蘋Hu臋fHuwfLh0LX5LHL8L(LLLHpzLЊ{LL谊L蠊tL萊|f&HHEHxHgt HpfHEHxHgt HuLHEHxHgt Hu2HEHxHgt HuH/HHHH}HHt`8HpHxHgtLԉHEHxHgtL軉I~2#H0HtHPHHtHPHHtHPHHxHgt H\HHxHgt HpHHxHgHEHxHgHEHxHg$HHxHgtHHxHglH0HDžgHuL̷HLHEHxHgpHHEHCHHEt@HUHj}HUHyHHHEHAHHEtЃAH@HAVLjHHALjoH}AYAZHtHHxHg`HHxHgXI~HHEHCHHEt@HH DHH }謵HHHEHAHHEtЃAH@HAVL jHHAL_H}AXHtHHxHgH HxHgwI~HHEHCHHEt@HHP[HH@ }ôHHHEHAHHEtЃAH@HAVLPjH@H0ALH}Y^Ht'H@HxHgOHPHxHgGI~HHEHCHHEt@HH}vHHp }޳HHHEHAHHEtЃAH@HAVLEjHpH`ALH}XZHtEHpHxHgMHEHxHgHI~HHUyLLLHDžHDžHHH0HDž0HH`HDž`H7HH} }貲HHEHCHHEt@h0HHELUHMAVPLAWH_5 HI~H H(HEHxHgHEHxHgH`HHPH0HtHPHHtHPHHtHPHHxHgjHHxHgbH@HxHgZH0HxHgRH]dH3%(HHe[A\A]A^A_]fH0H45H1ҾԨ58H1ҾԨH@1ҾԨHHfD@*@1@7@LfLf&LfLfLfLfHuff.HugffLXfLHfL8fL(fLfLfLeHuefHuefLe0Le5LeLeLeLxeLheLXeHpDezL0e{L eLeLetLd|HHEHxHgt HpdHEHxHgt HudHEHxHgt HudHEHxHgt HuxdH HHHH}HHtHpHxHgtL4dHEHxHgtLdI~H0HtHPHHtHPHHtHPHHxHgt HcHHxHgt HpcH@HxHgt H/|cH0HxHgH@XcHHpHxHgtL4cHHPHxHg{HqHHHxHgt HubHEHxHgt HubHEHxHgtLbH`HxHgRLbEHHHHI~uH}HHtHHxHgtLHbH HxHgtL,bI~0HHIHLI~}HEHxHgtLaHEHxHgtLaH`HHPHHHHHHHxHgt HuyaHEHxHgt Hu_aHEHxHgtLFaHHxHgtL*aHHxHgVL aIHHPHxHggL`ZH}HHt<HHxHgtL`HHxHgtL`I~ HHEHxHgLf`H}HH.HH}HHtH@HxHgL` HrHHHxHg/HeHwHHHL HSfUHAWAVAUATISIMHH]HhHPHpHXLPHxL`dH%(H]1HP uH{HsHH@йyHIHA}HIL HLHV9 "}HI$ I7LHV  }HI I6LHV $}HI H`LH0HV H~ MuHHILxKHuH蛨H }1#HL0" }LH0HgHHLHH@HgHAH@HxHg H0HxHg HHxHg9 HHxHg1 HHDžg m HuH蝧HHZHHxHg MuHHILxHuH?H }1H" }LH0HgtHHLHH@HgHAHHHHxHg H@HxHg H0HxHg HHxHg HHxHg HHDžg HuHHHHHxHg" MuHH0ILxo HuH 迥H  }1GH" }LH0HgHH0LH@H@HgHAH@HH@HxHg9 H@HxHg9 H0HxHg9 H HxHg1 H0HxHgHHDž@g 5HuHP蝤HPH@ZHPHxHgHxHH@HAHHHt@L Hj}L HHpy IEH0IEHH8tЃAH@HpSLjHpH`AL\H8AYAZHtHpHxHgzHHxHgrH{HxHH@HAHHHt@HXHHH }QIEH0IEHH8tЃAH@HpSLjHHAL~_H8AXHtHHxHgHHxHgzH{HxHH@HAHHHt@HPHHH }YIEH0IEHH8tЃAH@HpSLjHHAL讄H8Y^HtHHxHgkHHxHgcH{HxHH@HAHHHt@H`HH@H }bIEH0IEHH8tЃAH@HpSLjHHAL臉H8XZHtHHxHgtHHxHglH{IEHyLLLHDžHDžHpH`HDž`HXHHDžH`H }LHxHH@HAHHHt@hL`HXMUHpHSATAVAWIHx! HhH{H L9H0HxHgH HxHgHHHPHHtHPHHtHPH`HtHPH@HxHg\HHxHgTHHxHgLHHxHgDHHxHg<HHDžPHDž薲HDž`HDžhPeHxHgHPHDžhqHxPeHaH'aH@HPHaHaH`H@H`HaHaHPH@HPHPHDžtHxhH]dH3%(HhHe[A\A]A^A_]DHHJKH@1ҾԨH1ҾԨVH1ҾԨ}@$@ @ @HhRaHXRHHRAH8RH(RHRHR"H QFHQJHQjLQLQLQyLQH |Q6H dQ6HPQ:H@Q;H0QCH QHQHQHPHPHPLPLPLPqLPyH |PH dPHPPH@PIHHxHgHHxHgtHOHHxHgLHHxHgt HOHPHPIH@HxHgt H OH0HxHgtHqOHHxHgtHUOHHxHgVH5OIIHHxHgH OIH@HxHgt H NH@HxHgt H NH0HxHgtHNH HxHgtHNH0HxHgBHmN5IHPHxHgtHINH@HxHgIIHHxHgtL NH{IHHxHgtLMH{XHHtHPH`HmHPbIHHxHgtLMH{IIHHxHgFGI9IHHxHgIGI_IsII+H8IHthHHxHg8LL+H8IHt/HHxHgtLLHHxHgtLLH{HHHPIPHxIMH{H0HxHgtH$LH HxHgtHLHHzHPoIIIH8IHt:HHxHgLKH8IHtHpHxHgRLqKEIIIHHxHgt H 9KH@HxHgt H KH0HxHgtHJHHxHgHJIIII4IHI\IHLHHfffff.UHAWAVAUATISIMHH]HhHPHpHXLPHxL`dH%(H]1HP~uH{bHsHH@йyHH}HIHLHV "}HII7LHV }HII6LHV$}HIH`LH0HVHNMuHHILxHuHkH }1HL0" }LH0HgHHLHH@HgHAH@HxHg H0HxHg HHxHg9 HHxHg1 HHDžgUm HuHmHH*HHxHg MuHHILxHuHH  }1H" }LH0HgDHHLHH@HgHAHHiHHxHg H@HxHg H0HxHg HHxHg HHxHg HHDžgHuHHHHHxHg" MuHH0ILx?HuH 菐H  }1H" }LH0HgHH0LH@H@HgHAH@HH@HxHg9 H@HxHg9 H0HxHg9 H HxHg1 H0HxHgHHDž@gU5HuHPmHPH@*HPHxHgHxHH@HAHHHt@L Hj}LHHpyIEH0IEHH8tЃAH@HpSLjHpH`ALFH8AYAZHtzHpHxHgzHHxHgrH{QHxHH@HAHHHt@HXHHH }!IEH0IEHH8tЃAH@HpSLjHHALVi_H8AXHtHHxHgHHxHgzH{YHxHH@HAHHHt@HPHHH })IEH0IEHH8tЃAH@HpSLjHHAL~oH8Y^HtHHxHgkHHxHgcH{bHxHH@HAHHHt@H`HH@H }2IEH0IEHH8tЃAH@HpSLjHHALWtH8XZHtHHxHgtHHxHglH{kIEHyLLLHDžHDžHpH`HDž`HXHHDžH`H }LHxHH@HAHHHt@hsL`HXMUHpHSAVATAWIHx HhH{H L9hH HxHgH0HxHgHHHPHHtHPHHtHPH`HtHPH@HxHg\HHxHgTHHxHgLHHxHgDHHxHg<HHDžPHDž薲HDž`HDžhPeHxHgHPHDžhqHxP5H`H`H@HPH`H`H`H@H`H`H`HPH@HPHPHDžtHxhH]dH3%(HhHe[A\A]A^A_]DHHJKH@1ҾԨH1ҾԨmVH1ҾԨM@$@ @ @H8=aH(=H=AH=H<H<H<"H }LtHxHH@HAHHHt@hCL`HXMUHpHSAVATAWIHxoHhH{H L98H HxHgH0HxHgHHHPHHtHPHHtHPH`HtHPH@HxHg\HHxHgTHHxHgLHHxHgDHHxHg<HHDžPHDž薲HDž`HDžhPeHxHgHPHDžhqHxPH`H`H@HPH`H`H`H@H`Hs`Ht`HPH@HPHPHDžtHxhH]dH3%(HhHe[A\A]A^A_]DHHJKH@1ҾԨUH1ҾԨ=VH1ҾԨ@$@ @ @H(aH'H'AH'H'H'H'"H 'FH'JHp'jL`'LP'L@'yL0'H '6H '6H&:H&;H&CH&H&H&H&H&Hp&L`&LP&L@&qL0&yH &H &H%H%IHHxHgHHxHgtH%HHxHgLHHxHgt Hd%HPXHIH@HxHgt H -%H0HxHgtH%HHxHgtH$HHxHgVH$IIHHxHgH$IH@HxHgt H $H@HxHgt H e$H0HxHgtHI$H HxHgtH-$H0HxHgBH $5IHPHxHgtH#H@HxHgIIHHxHgtL#H{"IHHxHgtL#H{HHtHPH`HmHPbIHHxHgtL,#H{裼IIHHxHgFGI9IHHxHgIGI_IsII+H8IHtHHxHg8Lx"+H8IHtHHxHgtLC"HHxHgtL'"H{螻HHHPIPHxIMiH{`H HxHgtH!H0HxHgtH!HHzHPoIIIH8IHtHHxHgLJ!H8IHtHpHxHgRL!EIIIHHxHgt H H@HxHgt H H0HxHgtH HHxHgH} IIII4IHI\IHfLHHfffff.UHAWAVAUATISH]HIIH HHXj}dH%(HE1LhM?HPHDžgHѨyHDžgHDžgIL`(1HLAHhdH`HyL9IL`(]1HLAHhdHpHL9‰dHyIL`(1HLAHhdHUHyL9dIL`(1HLAHhdHUHL9ƉdyIL`(H1HLAHhdHUH1yL9dIL`(L1HLAddHHxHgEHHxHgCHHxHgCHHxHgCHHxHgCHHxHgCǵDdIIIGIGE@JIWHhIWH M>HUѨyL8IL`(41H LAԉPH HxHgBDPEuSHhHUH0yL8IL`(1H0LAԉPH0HxHgAH}йyH}U }H诿PHq^ }H蔿H}kHhHHPL8IL`GHUH@s }"HPH@LH`AH`H$H`HxHgBH@HxHgBHPHxHgBHHyHhHHL8IL`}HUHp }XHHpLHAHHZHHxHgn@HpHxHgc@HHxHgX@HhHHL8IL`ΰHUH}HHLHAHH諾HHxHgAHHxHgAHHxHgAHHHhHHL8IL`HUH@}HHLHAHHHHxHg?HHxHg?HHxHg?HhHHL8IL`UHUHh}0HHLH AH H2H HxHg>HHxHg>HHxHg>HH臸Z<dHDžPgDž`d9PHY@HpH AHhHHL8IH@HP,H`HcH 9 }1HH}" }HUHgHHLH}HUHgHHPHEHxHg HEHxHg3 HHxHg HHxHg HH}#[ HuHAHhHH`L8IH@HP H`HPaHPF }1ϽHH}" }HUHgüHH`LH}HUHgHHPHEHxHg HEHxHg HPHxHg H`HxHg HH}HuHɾAHhHUHѨyL8IH@(HP1HLHPЅHAE!HxHg EbIEHEIEHHEt@HHD`tHHaHHNHhHyHHHEH}t^_HXSLAWLHHUH|IY^HHR`H)HH9=?HHHDžH8HHtHPHHtHPH}HtHHxHg~ HHxHgV HHxHg. H{襭HhHUHyL8IH@(HP1HLHPЅA!HHxHgc EbIEHEIEHHEt@HH D`觩HH蔩HH聩HhHyHHHEH}t]HXSL ATLHHUH0XZI`HHRH)HH9>HH0HDž0H8HHtHPH0HtHPH}HtHHxHgHHxHgH HxHgH{ثHEHxHgHEHxHgHpHxHg`9d`[ HhHpHpL I$LxHUHIyHpHLHAH`H`\H`y1۲HH}PyHUHgHHLHHUHgHALPHLdHHxHgHEHxHgHEHxHgH`HxHgHHxHgzHHxHgRHpHxHg*s }LHAHHDEHhL8IH@HPWH`HD[H) }1qHH}" }HUHgHHLHpHUHgHHPHEHxHgHEHxHgHHxHgHHxHgHHpMHhHHL8IH@HPJH`H7ZH[ }1dHH}" }HUHgHHLHHUHgHHPHHpHHxHgRHEHxHg-HEHxHgHHxHgHHxHgHHpHhHHL8IH@HPH`HpXHpv }1HH}" }HUHgóHHLHHUHgHHPHH}許HHxHgXHEHxHg+HEHxHgHpHxHgHHxHgfHH}֬fHhHH0L8IH@HPŢH`H WH j }1߭HH}" }HUHg胲HH0LH@HUHgHHPH@H}hH@HxHg`HEHxHg;HEHxHgH HxHgH0HxHg6HH}薫nfH 2Hx 0HPd HP H@ H0 yH QH )Hu f.Hu fH cH ;H Hu fHu fH mHx EHh HX HH H8 H( H H sHu fHu fHu tfHu IfHu !fHu AfH [H Hx Hh HX HuG fHu7 fH( H HP HPHHHufHufHhHUH@yL8IL`(芺1H@LAԉ`H@HxHg.H}йyzH}qU }Hd`H& }HIH} HhHH`L8IL`HUHP }׹H`HPLHpAHpH٫HpHxHg-HPHxHg-H`HxHg-HhHHL8IL`MHUH}(HHLHAHH*HHxHg\-HHxHgQ-HHxHgF-HhHHL8IL`螜HUH }yHHLHAHH{HHxHg,HHxHg,HHxHg,dDž`{`9dHEr`dIEHEIEHHEt@HHD`薛HH胛HHpHhHyHHHEH}tOHXSLATLHHUH聒I`A\A_HHRH)HH91HHHDžH8HHtHPHHtHPH}HtHHxHgHHxHgHHxHgH{ŝHEHxHgHEHxHgsHpHxHgK`9d`HhHpHL I$LxεHUHIy蹵HHLHAH`HNHy1ȤHH}PyHUHglHHLH HUHgHALPH LQH HxHgYHEHxHg4HEHxHgHHxHgHHxHgHHxHgHHxHgo }L袲HAHH@DEHhL I$H@HPCH`H00MH0 }1]HH}" }HUHgHH@LHpHUHgHHPHEHxHgHEHxHglH0HxHgDH@HxHgHHp9tHpHAHhHH`L I$H@HP H`HP LHP }1:HH}" }HUHgަHH`LH}HUHgHHPHEHxHg)HEHxHgHPHxHgH`HxHgHH}tHuHAHhHHL I$H@HPH`HpJHp }1 HH}" }HUHgĥHHLH}HUHgHHPHEHxHgHEHxHguvHpHxHguRHHxHgu.HH}VHuH֧JHfDHfDH}HPXHHH[H?HpH`HuOf.H8H(HHuafHH\H4H HHufHufHu4fHuw fHugfHhHUHyL8IL`(J1HLAAHHxHg)$E' H}7йy4H}+U }HDH}HH}ݪHhHHL I$H@HP豒HUH}茮HHLHHPHH舠HHxHg#HHxHg"HHxHg&#HHݛ5HhHH`L I$H@HPّHUHP}购H`HPLHpHPHpH谟HpHxHgJ"HPHxHg?"H`HxHg4"HHHhHHL I$H@HPHUHH}ܬHHLHHPHH؞HHxHg HHxHg HHxHg HH-DdDž`ED;dHVHpH轢AHhHHL8IH@HP܏H`HDH }1HH}" }HUHg蚟HHLH}HUHgHHPHEHxHg HEHxHg( HHxHg HHxHg HH}ؘP HuH蠡AHhHHL8IH@HP迎H`HCH }1ٙHH}" }HUHg}HHLH}HUHgHHPHEHxHg HEHxHg HHxHg HHxHg HH}軗HuH胠AHhHUHPyL8IH@(HP萩1HPLHPЅHPAE!HxHgz EdIEHEIEHHEt@HHD`.HHpHH`HhHyHHHEH}tAHXSLAWLpH`HUHI`AYAZHHPH)HH9.HHHDžH8HHtHPHHtHPH}Ht螤H`HxHgv HpHxHgN HHxHg& H{]HhHUHyL8IH@(HP1HLHPЅA!HHxHg[ EcIEHEIEHHEt@HHD`_HHLHH9HhHyHHHEH}tI?HXSLATLHHUHJI`_AXHHRH)HH9HHHDžH8HHtHPHHtHPH}HtТHHxHgHHxHgHHxHgH{菍HEHxHgHEHxHgHpHxHg}`9d`R HhHpH L I$Lx蘥HUH0Iy胥H H0LH@AH`He>Hy1蒔HH}PyHUHg6HH@LHPHUHgHALPHPLHPHxHgHEHxHgHEHxHgHHxHgH@HxHgqH0HxHgIH HxHg! }LlHAHHpDEHhL8IH@HPH`H`<H` }1(HH}" }HUHg̗HHpLHpHUHgHHPHEHxHgHEHxHgH`HxHgHpHxHgHHp HhHHL8IH@HPH`H;H }1HH}" }HUHg迖HHLHHUHgHHPHHp衔HHxHgIHEHxHg$HEHxHgHHxHgHHxHgHHp̏HhHH0L8IH@HP轅H`H :H  }1אHH}" }HUHg{HH0LH@HUHgHHPH@H}`H@HxHgPHEHxHg#HEHxHgH HxHgH0HxHg^HH}莎HhHHL8IH@HP腄H`Hr9H }1蟏HH}" }HUHgCHHLHHUHgHHPHH}(HHxHg`HEHxHg;HEHxHgHHxHgHHxHg6HH}VyfHH8H8;HP$HHHHZH2Hu f.HufHlHDHxHugfHuWfHHvH8NH()HHHHHHyHufHufHu|fHuRfHuw*fHugJfHXdHHH8H(HHufHufHHHPHPHHHuwfHugfHhHUH1yL8IL`(J1HLAԉ`HHxHgDйyH;H3U }H&`Hp}H HHhHHL8IL`HUHP }蚛HHLH AH H蜍H HxHgHHxHgHHxHgHhHH@L8IL`HUH0}H@H0LHPAHPHHPHxHg=H0HxHg2H@HxHg'HhHHpL8IL`a~HUH`k }HHxHgH`HxHgHpHxHgdDž~`9dHfDEp`bIEHEIEHHEt@HH`DV}HHPC}HH@0}HhHyHHHEH}t@1HXSL`ATLPH@HUHpqXZIHHRH)HH9HHpHDžpH8HHtHPHpHtHPH}HtȔH@HxHgHPHxHgH`HxHgH{HEHxHgHEHxHg}HHxHgU9dHhHpHL I$Lx萗HUHIy{HHLHAHH]0Hy1芆HH}PyHUHg.HHLHHUHgHALPHLHHxHg[HEHxHg6HEHxHgHHxHgHHxHgHHxHgHHxHgq> }LdHAHHDEHhL I$H@HPzHH.H& }1ʊHH}" }HUHg辉HHLHHUHgHHPHEHxHgHEHxHgiHHxHgAHHxHgHHtHH迋AHhHHL I$H@HPxHH-H5 }1HH}" }HUHg蛈HHLH}HUHgHHPHEHxHg.HEHxHg HHxHgHHxHgHH}فtHuH襊AHhHH0L I$H@HPwHH ,H A }1݂HH}" }HUHg聇HH0LH}HUHgHHPHEHxHgHEHxHgu{H HxHguWH0HxHgu3HH}ˀSHuH蓉GfDHfDHfDHxHp|SHhHXvHHQH8:H(HHufHHHHudfHHZH2H HxHugfHuWfHuG2fHu7 fHu'fHPHxHgHHxHgHHxHgHHxHgHHxHgH]dH3%(L!He[A\A]A^A_]HhHUHL I$H@HPbHUH }MHHLHHPHHIHHxHgBHHxHgQHHxHgH@HhHUH L I$H@HP蒏HUH0 }}H H0LH@HPH@HyH@HxHgH0HxHggH HxHg H@HhHUHyL8IL`(ʎ1HLAAHHxHgH|JHHPtHPIIGHIWHtHHIuHhHH@L8IH@HH*rHUH0 }LPH@H0LHHLHLHPHxHg/H0HxHg1H@HxHgHrHhHUHL I$H@HPOHUH2 }:HHLHHPHH6HHxHgHHxHgXHHxHgyHlHH酿H鐿Hr雿HeHXHKH>H1RH$]HhH HHHH(H3H7HBHPHHH{%HnHaHTHGH:*H-5H HHHHHHHHH HFHQH\HwiHj9H]DHPHCH6H)>HIHTHHH HH!HHkHHHgHHsHfHYHLiiy1lHIHtHPH}Ht舅H`HxHgt HuHpHxHgt HuHHxHgH{=pHEHxHg_HEHxHgHpHxHg|LHPHxHgt Hu[IHItH0HxHgtH"H HxHgIIIII IHPHxHgHIIHEHxHgt HPHEHxHgtH}HHxHgtHaHHxHgHAIIHEHxHgt HuHEHxHgtHHHxHgtHHHxHg7&III6IJI IIIHEHxHgt HuyHEHxHgtH`H`HxHgtHDHpHxHg(IIIIHEHxHgt HuHEHxHgtHHHxHgtHHHxHgHITIwIIH HxHgdIH0HxHgtHDIEIVIjI IHEHxHgt HuHEHxHgtHHHxHgtHHHxHg=IIIIHPHxHgtHH`HxHgiIIHHxHgtHDHHxHgu\LIIHHxHgtHHHxHgtHHHxHgtHIbIvIHPHxHgt HuHEHxHgHu|IIHEHxHgtHVHpHxHgtH:HHxHgeRIIIIHHxHg]LIHEHxHgtHHHxHgtHIIH@HxHgaIH0HxHgtHmIHPHxHgtHLLHm-IHHxHgIHHxHgtHIH@HxHg~HqIHHxHg;IH`HxHgHPIHEHxHgt HuoHEHxHgtHVHHxHgtH:HHxHg~IIH@HxHgtHHPHxHgIIHHxHgtHHpHxHg%IIHEHxHgt HuyHEHxHgtH`H`HxHgtHDHHxHgXH$KIIIII]IHEHxHgt HuHEHxHgtHHHxHgtHHHxHgIIIIHHxHgHuYIHHxHg5IHHxHgtHIHHxHgtHIHHxHgHIIIIIH HxHgtHH0HxHg%IIHHxHgt HPFHEHxHgHP%IIHHxHgt HuHEHxHgt HuHEHxHgtHHHxHgtHHHxHgtHHHxHgtHtHHxHgXITIfIwII`IHHxHgLIHHxHgtHHHxHgtHHHxHgtHHHxHgtHHHxHgtH{HHxHgtH_LJIHHxHgtH8HHxHgtHHHxHg+HIIHpHxHgtHHPHxHgtHH`HxHg!H}HrIIIH@HxHg]IH@HxHgt HuH}t>HD }"JHT!}H HHR0HGXHD$pHG`HHD$xt@HCHHXHHBHD$`HCPHHD$ht@I<$HHL$pHt$`E11yNH|$hH$=H|$x=H+ }kIHcS!}HVGH.R{)tHChHHHBH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11MH$HHPH HH$H;H$;HGH$H;H};HGH$H;H$;HGH|$HHr;H|$Xh;HGH$HP;H$C;H[G72H|$H$;H|$;H2GH|$(H;H|$8:HGH|$hH:H|$x:HFSHHHHLJp.}dH%(HD$1:H:H{p|:H{`s:H{Pj:HC8HxHguIHC0HxHguHHC HxHguGH{HHguFHD$dH3%(uBH[Ht$@Ht$@Ht$@Ht$/7}LBU>}LB@MfHS0HH$1=H$H$H$HKhHDŽ$HDŽ$HChHCpHSpH$H$Q+H$D+HChHNHH$ }HRH6H$@}H4HH/}H4H$r? DH$(fHHH*H4$fH*,$^f((H$ }D$"6H$@Q}H4D$H8H$>HfHH H*X@f\H,HCHH1C|H$JfDH$KfDH$sLfDH$[fDH$CfDH$+fDH$fDH$gfDH$hfDH$ifDH$fDH$fDH$bfDH$kfDH$SfDH$;fDH$#4fDH$ 2fD}L>u_Hǃ@f.HfHH H*XIfHfHH H*X1f7}Ls>t}Lb>uHǃ>}L<>tH$@f }L)H$@=Hs HHV<"}H0H$@;F@,}wLy&b)+}wLy%*}wLy%H$@H`;HD$PHxHgt H$0qHD$@HxHgt Ht$UHD$0HxHgt Ht$9HD$ HxHgt Ht$HA&H5&H{p,&H{`#&H{P&HC8HxHgt Ht$PHC0HxHgt Ht$PHC HxHgt Ht$PH{HHgt Ht$P~H1H$H1:H$t!H$H:HH$xHX%H$H9~H$H9iH$pH9TH$`H9?H$PH9*H$@Hz9H$0He9H$ HP9H$H;9HH$pH9HH$HxHgt H$$H$HxHgH$HH$H8OHoH] Ht$ L`*#}@-HQ9@#}H-H<9#}Ho-H'9#}HZ-H9H$` }Hk7/H$`*9H"}H-HH-d }H-H$`7'wAHg0hH.HHH$`H71+H $}@,HO8`$}H,H:8$}Hm,H%8$}HX,H8#}HC,H7%}H.,H7J }H,HHD$pHxHgHHD$`HxHg|HoHHH$HxHgvH$dHH$HxHgt H$H$HxHgt H$cH$HxHg:HHHH$0HxHgHH$HxHgt H$H$HxHgt H$H$ HxHgIHHHH$HxHgHH$HxHg^HH$H!5f.fHSH8HH[f.@S}HHHT$dH%(HD$18HL$dH3 %(u HH[["f.xHHGHP@-}Dءyyf.DSHHHpbyH~HH{tHH@H=dNu5G@HFHCHFHCF HcyHC(0cyC H[fDHt$Ht$fSHHHpbyH~HH{tHH@H=dNu5G@HFHCHFHCF HcyHC(cyC H[fDHt$Ht$fUSHHHdH%(HD$1OHw#HHH(HL$dH3 %(HuH[] HHHzHgt Ht$-Hu*DUSHHHo#HH]tHH@H=dNuC@H[]@HH[]f.H~HtHVhHHVpHHWtB@t/HHtCH HQHHHHPuHVXHHV`HHWuf.1fff.ЃAHtG~fDGPW1fffff.H3}wLyfSH2P/}H HdH%(HD$1H25 }H1H_1H|$HHCH$HD$HL$dH3 %(HuH [HH 1H(@ATUISHHdH%(H$1HHGXHD$HG`HHD$t@HCHHHHBH$HCPHHD$t@I<$HHL$E11H/H|$H|$HH\HHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$HzHL$0Ht$ E11.H|$(H$p-H|$8#HﺿP/}&H0!}H$H/HChHD$PHCpHHD$Xt@HHAHHBHD$@HHHD$Ht@I<$HHL$PHt$@E11-H|$H}H|$XsHP/}!&H0@}H $H.{)HCxHMHHBHD$pHHHD$xt@HChHD$`HCpHHD$ht@I<$H HL$pHt$`E11-H|$hH|$xHP/}j%Hb/\}HU#H-.DH$dH3%(HĐ[]A\DKHGXH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11,H$H$HH@HHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11+H$H$p,H$HP/}#H-!}H!H,{)^HCxHHHBH$0HHH$8t@HHrHHBH$ HHH$(t@I<$HH$0H$ E11*H$(GH$8:HP/}"H,y}H _fD)vHGXH$PHG`HH$Xt@HCHHHHBH$@HCPHH$Ht@I<$HH$PH$@E11)H$HxH$XkHCxH^HHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$H0H$pH$`E11H,)H$hH}HP/}!H|+y}HoHG*fH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HlH$H$E11k(H$H$HChH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11'H$H$pH$HP/}4 H,*@!}HH({)HCxH0HHBH$HHH$t@HChH$HCpHH$t@I<$HH$H$E11'H$H$HP/}eH])\}HP11[f1f1f1Tf1f1f1Gf1f1f1 f1F-/HHd'HH$hHH}HH$HH$|HH$H`H$SHkH$H;H$.HFH$HHH$X H!H|$hHH|$xHH$(HH$8HH|$HH|$HH|$(HH|$8HH$HjH$]HuH$H@H$3HKWH|$HHH|$XH'3fATUISHHdH%(H$1HHGXHD$HG`HHD$t@HCHH< HHBH$HCPHHD$t@I<$H HL$E11H!H|$H$pNH|$DHP/}H%/}HH$HHHHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$HHL$0Ht$ E11"H|$(H|$8HP/}BH:%/}H-H$HChHD$PHCpHHD$Xt@HHHHBHD$@HHHD$Ht@I<$H3HL$PHt$@E11H|$HH|$XHP/}H$!}H}HU#{)HCxHHHBHD$pHHHD$xt@HChHD$`HCpHHD$ht@I<$H|HL$pHt$`E11H|$h7H|$x-HP/}H#!}HH"fDH$dH3%( HĐ[]A\DcHGXH$HG`HH$t@HCHHeHHBH$HCPHH$t@I<$HH$H$E11H$H$p5 H$( HP/}H"/}HH!HHiHHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11H$m H$` HP/}H"80}HH {)/HCxHHHBH$0HHH$8t@HCXH$ HC`HH$(t@I<$HH$0H$ E11KH$( H$8 HP/}?H7!`0}H*D)^HGXH$PHG`HH$Xt@HCHH8HHBH$@HCPHH$Ht@I<$HH$PH$@E11}H$HH$p H$X H$P/}iHa /}HTH,HCxHHHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$HQH$`E1H1H$h H} H&P/}H0}HHpH$HG`HH$t@HCHH.HHBH$HCPHH$t@I<$HH$H$E11H$H$p> H$1 HP/}H/}HHHChH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E119H$H$H P/}-H%0}HH{)NHCxH)HHBH$HHH$t@HChH$HCpHH$t@I<$H H$H$E11jH$H$H P/}^HV!}HI@1f1f1f1Kf1f1f1f1f1f1f1BF!/ HHdHH$HH$HH|$(HH|$8~HH|$HHeH|$X[HsH$HCH$6HNH$(HH$8H)50H$hHH}H H$HHH$XHH$HH$HH|$hHnH|$xdH|H$HLH$?HWH$H'H$H2H|$HH|$Hfffff.SHHHHLJ`P:}dH%(HD$1HHH{pH{`H{P~HC8HxHguMHC0HxHguLHC HxHguKH{HHguJHD$dH3%(uFH[@Ht$@Ht$@Ht$@Ht$v?fffff.SHH[ fffff.AWAVAAUATEUSHH8HHHHGP:}HGgHGgHGgIMdH%(H$1IEHCPHC`HCpHǃHǃHIED{@DsDHCHHCXHHChHCxHǃHt@H$H|$ /}GH$H|$0}0H$H|$@/}HEH|$P}LLh(1Ht$PHAHHCHD$PHxHgHEH|$`}LLh(\1Ht$`HAHHCHD$`HxHg HEHt$ H$LhH$}LH$H$HH|$pALkHt$pLh HD$pHxHgH$HxHgH$HxHgH=`MMytH5`LHEHt$0H$LhH$}L=H$H$HH$ALk H$L H$HxHg*H$HxHg)H$HxHg(HEH$}LLp1H$HAֈC(H$HxHg HEH$}LLpZ1H$HAֈC)H$HxHg HEHt$@H$LpH$}LH$H$HH$AH{0H$` H$HxHg_ H$HxHg^ H$HxHg HEH$  }LLph1H$ HAֈH$ HxHg }LK(HSH$@HǃH$@H$HH$HKHHDŽ$HHDŽ$@HCHHCPHSPH$H$zH$HmH$PGH$PH$XH$HKXHDŽ$XHDŽ$PHCXHC`HS`H$H$ H$XHCHH HH$pP/}HRHo H$p~D}HqHH}HYH$p,HkHH fH*fH$*P/}H*S^Y $H$"}HHH}H$H }HH$~"}@j$HR }HuH-HH$pHHH$xt@HSH$pH$NH$H$H$HKhHDŽ$HDŽ$HChHCpHSpH$H$H$H$xHChH H$P/}HH$}HtHH}H\H$/{)H$P/}!H$}HHsHHVH$H$ P/}HkH$ }HHHZH$ }H$0P/}HkH$0u }HhHHH$00H$@P/}9H$@, }HHs HHV/H$@H$PP/}HH$P" }HHHH$PH$`P/}k(H$`- }H}@HH$`DH$pP/}k)IH$p<5 }H/@HcH$p H$P/}H$; }HHs0HHV H$ HD$@HxHgHD$0HxHgHD$ HxHgH$dH3%(=HĨ[]A\A]A^A_DfH$H*CH$H$H$HHDŽ$HDŽ$HHHH$H$H$ @H$0OP/}H$0 Hs HHV 0}HzH$0M HsH$H$ H"}@jHk"HHH H$P/}HkH$ H"}HHHH$1 f4$Hk_m}@jH@HǀHjHsHHV ~}Hp$H3}HVH HHHfH*$^f(Z$fH*CYk*N  $a*Y *f.H,HafH*\f.f(>H,HCH$HkHTH$P/}H$o }Hb"}HUH$HS0H$1ɾH$H$H$HKxHDŽ$HDŽ$HCxHHH$H$ H$HCxHHH$P/}HRHH$ }HsHH}H[H$. fH$SfHHH*H,$fH*$$^f(7H$~P/}D$H$ Q}HD$HH$HHfHH H*XR\H,HCHH1C\HH,H1[DH$ fDH$HfDH$%fDH$fDH$fDH${fDH$cfDH$fDH$fDH$fDH$fDH$fDH$HfDH$fDH$sfDHfHH H*XNf.HfHH H*XfHfHH H*X)8}wLyT@7}wLy;@6}wLy"H$HH$HD$@HxHgt Ht$tHD$0HxHgt Ht$XHD$ HxHgt Ht$}wLyfSH1:}H HdH%(HD$1HI5 }HWHH|$HHCH$HD$EHL$dH3 %(HuH [HHH4@ATUISHHdH%(H$1HHGXHD$HG`HHD$t@HCHHHHBH$HCPHHD$t@I<$HHL$E11HH|$fH|$\HH\HHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$HzHL$0Ht$ E11/H|$(H$pH|$8Hﺾ:}Hy!}HlHDHChHD$PHCpHHD$Xt@HHAHHBHD$@HHHD$Ht@I<$HHL$PHt$@E11wH|$H-H|$X#H:}H@}HH{)HCxHMHHBHD$pHHHD$xt@HChHD$`HCpHHD$ht@I<$H HL$pHt$`E11H|$hvH|$xlH:}H\}HHDH$dH3%(HĐ[]A\DKHGXH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11H$}H$pHH@HHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E111H$H$pH$H:}}Hu!}HhH@{)^HCxHHHBH$0HHH$8t@HHrHHBH$ HHH$(t@I<$HH$0H$ E11DH$(H$8H:}Hy}H_fD)vHGXH$PHG`HH$Xt@HCHHHHBH$@HCPHH$Ht@I<$HH$PH$@E11uH$H(H$XHCxH^HHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$H0H$pH$`E11HH$hH}H:}4H,y}HHfH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HlH$H$E11H$H$HChH$HCpHH$t@HCXH$HC`HH$t@I<$HH$H$E11H$H$pCH$6H:}H@!}HH{)HCxH0HHBH$HHH$t@HChH$HCpHH$t@I<$HH$H$E11H$tH$gH:}H \}H11[f1f1f1Tf1f1f1Gf1f1f1 f1HHHH$hH\H}SHkH$H9H$,HDH$HH$HH$HH$HH$HHH$XHH|$hHH|$xHH$(H}H$8pHH|$H[H|$QHiH|$(HH$1}H$HH}H H${)H$:}H$}HHsHHVH$zH$ :}HkH$ r}HeHH H$ -H$0:}Hk2H$0% }HHH}H$0H$@:}H$@ }HHs HHVH$@H$P:}HH$P" }HzHH?H$PBH$`:}k(GH$`:- }H-@HaH$`H$p:}k)H$p5 }H@HH$pH$:}H$; }HHs0HHVH$XHD$@HxHgHD$0HxHgHD$ HxHgH$dH3%(-HĨ[]A\A]A^A_DfH$H*CgH$H$H$HHDŽ$HDŽ$HHHH$H$H$@H$0N:}H$0GHs HHVW8<}H*H$0HsH$JH$MH"}@jHkHHHH$:}HkH$H"}HHHzH$1Kf4$H_m}@jH@HǀHj=HsHHVM~}H $H}HHHHHfH*$^f( $fH*CY** $f.H,HYfH*\f.f(6H,HCH$舾HkH\H$:}tH$'}H"}H H$HS0H$1ɾhH$H$H$HKxHDŽ$HDŽ$HCxHHH$H$H$HCxHHH$:}HRHMH$@}H3HH}HH$fH$fHHH*H,$fH*$$^f(H$}:}D$H$Q}HD$HBH$EHHfHH H*Xb\H,HCHH1C\HH,H1cDH$fDH$XfDH$5fDH$fDH$fDH$fDH$sLfDH$[MfDH$CNfDH$+fDH$fDH$fDH$fDH$fDH$XfDH$fDH$fDHfHH H*X^f.HfHH H*XfHfHH H*X)C}wLy@B}wLy@A}wLyH$HmH$谹HD$@HxHgt Ht$HD$0HxHgt Ht$hHD$ HxHgt Ht$LH`HTHHH{p?H{`6H{P-HC8HxHgt Ht$@HC0HxHgt Ht$@HC HxHgt Ht$@H{HHgt Ht$@HH$HIHHH$HxHgt H$WH$HxHgH$1HH$HxHgpHHH$HxHgt H$H$HxHgt H$H$HxHg fHHHH$HxHg;HH$HxHgHHD$`HxHgHHD$PHxHgH$PHgH$@HRH$0H=H$ H(H$HxH$0HcH$HNHH $}@HH`$}H3H$}HH$}H H#}HH%}HHJ }HHH$`i:}HkһH$`H"}HHH}d }HpH$`C9wAHg0hHHHHHH$HxHgH$HH$ HxHg^H$pHDH$H/H$HHH$HxHg%H$H$pHH$pH|$0E}'H$pH|$@&}HEH|$`}LLh(薏1Ht$`HAHHChHD$`HxHgm HEH|$p}LLhS1Ht$pHAՈCpHD$pHxHgE HEHt$0H$Lh胪H$}LH$H$HH$AH{xH$_H$HxHg6 H$HxHg H$HxHg H$pH|$PE}HEH$E}LLhPH$HAՈCH$HxHg HEH$E}LLh@t*H$HAH$C8HxHgp HEH$E}LLh@賍+*H$HAH$C@HxHg7 HEH$E}LLh@bڐ*H$HAH$CPHxHg HEH$E}LLh@*H$HAH$CHHxHg HEH$}LLh@@*H$HAH$C HxHg<HEHt$@H$0LhH$ }L]H$0H$ HH$ALkXH$L軵H$HxHgH$ HxHgH$0HxHgHEHt$PH$`Lp6H$PE}L豋H$`H$PHH$@ALsH$@LH$@HxHgvH$PHxHguH$`HxHgtHEH$pE}LLx(H$pHAfCH$pHxHg?HEH$F}LLxʊ1H$HA׈C(H$HxHg6}L!HC`HkhH{pHD$PHxHgHD$@HxHgHD$0HxHgpHD$ HxHgrH$dH3%(R HĘ[]A\A]A^A_f&}LcHC`F}@jk@HsHHVPۅH#HHѽH$TF}kH$F}HܱHsHHVۅH迱H赯H$舼K(SH$LH$H$H$xHHDŽ$HDŽ$HHHH$pH$xoH$b,s HHH,s8HHHt{F}@j軰HsH$hF}蜲H$菼F}H肰H$UHH1EfDH$PF}9H$P,dF}HHsxHHV/H$PH$`ںHSxHs`1HhH$`H$hH$xHHDŽ$hHDŽ$`HHHH$pH$xǥH}辥HH?HH$pF}HRHHH$p;}H.HH蓩}HH$p @H$ F}H$ ܺ}HϮHH4[F}H跮H$ 芹HH$`HHH$ht@H$`HShHs`H$0H3H$0H$8H$xHHDŽ$8HDŽ$0HHHH$pH$xBH$85H},HHH$@F}H辯H$@豹}H褭HH }H茭H$@_vf.H$|F}脥H$GHsXHHVW`G}H*H$H$p#fDH$p fDH$pfDH$pfDH$pfDH$pfDH$pxfDH$p{yfDH$pczfDH$pKfDH$p3fDH$pEfDH$p~fDH$pfDH$pfDH$p)fDH$pfDH$pfDH$ps!fDH$p[~fDH$pC|fDH$p+"fDH$p fD)F}@j٪H葶H$nF}躬H$譶)F}H蠪H$sHHO1K@6F}@jL$bD$H$H S@H$rF}T$*H$6F}HD$HҮH$մ,s@HH[HGF}@j\$D$H胮HkcHH$vF}d$艫H$|GF}HoD$H1H$4,sHHHt(ԡM}wLyVN}wLy=H$HͳHD$PHxHgt H$HD$@HxHgt Ht$HD$0HxHgt Ht$HD$ HxHgt Ht$H讞H袞H薞H芞HCxHxHgt Ht$POHCXHxHgt Ht$P4HCHxHgt Ht$PH{HHgt Ht$PH6H$H覲H$HI莲HLHH6HH19H$AHH蛪H$YF}蔶H$GMyH:H$HHVFH$ٯlHH$HxHgt H$p HHH$H覱H$H葱HH$pHxHgH$pH$PHN|HH$PHxHgt H$pdH$`HxHg>HH$HxHg xHH$ HxHgt H$pH$0HxHg5HHH$HxHgtH$pH$@HiH8H}IL譛{HH$HxHg_H$pHEH$ H0HH$@HxHgH$pH$H迯HH$HxHg)HH$HxHgt H$pH$HxHgt H$pH$HxHgH$plyHHHD$pHxHg[HH$HxHgvHH$HxHgUHH$HxHg4HBHH$HxHg H!HHD$`HxHgHHHf.HG`f.SHHH[f.@S}HHHT$dH%(HD$1ɱHL$dH3 %(u HH[{f.H~XHt&HHHHHWtBfDHVpHtH HQHHVxHHPufD1@ЃAHtG~fDGPW>fffff.Hf}wLySfUSHHHH@0H=PuH[]H@H[]SHU}H HdH%(HD$1љH虭'F}H觬H_HL$dH3 %(HHCHuH [HH'H蟣fffff.ATUISHHpdH%(HD$h1HXHHD$HHHD$t@HCpHAHHBH$HCxHHD$t@I<$HKHL$E11HH|$Hl$PΖH|$ĖHﺜU}rHj!PV}HxH0{`HHHHBHD$0HHHD$8t@HHD$ HHHD$(t@I<$HHL$0Ht$ E11SH|$( H|$8HﺠU}譡H襫\}H質HkHD$hdH3%(Hp[]A\fD`tHHHHBHD$PHHHD$Xt@HCpHHHBHD$@HCxHHD$Ht@I<$HHl$PHt$@E11HbH|$HH}HﺨU}轠H赪%xV}Hé fD11lf1.f1:蓯H|$HH蒔H}艔H衠HHH莠H|$(HaH|$8WHoH|$H@H|$6HNfff.USHHHxdH%(HD$h1HX1HHD$HHHD$t@HCpHHHBH$HCxHHD$t@H}HHL$E11H/H|$腓H|${{`HHQHHBHD$0HHHD$8t@HHD$ HHHD$(t@H}HHL$0Ht$ E11螣H|$(H|$8HD$hdH3%(Hx[]`tHHHHBHD$PHHHD$Xt@HCpHthHHBHD$@HCxHHD$Ht@H}Ht]HL$PHt$@E11H|$HCH|$X9J@1ef1@1f1dH|$(HH|$8HH|$HHӑH|$XɑHH|$H贑H|$誑HfSHHHHLJPP|}dH%(HD$1qHeHYHHxHguUH{xH$H赎$H}ILzH$@HHkH#H7HH$HxHgt H$0H$HxHgt H$0H$HxHgHH$ HxHgmH$ [HHHH$HxHg*f.T}f.T}f.T}f.8U}f.HGPf.f.ff.@f.@HGf.HdH%(HD$1HG(HH;G@t`LGMtWLOLL)HI0I9H;W@w~HcIЃLGtvHtqI)McLHG(btSHO HH)HH0H9w,H;W@w&HcHHG(!ftLGMWfDHH1HL$dH3 %(ujHHG@t;H1HW@HO H)HpDHW@LOL)HDuLO]yf.HWHtFH;Wr-GLt&HO(HtH9Hw@sH9vHO@HHwfDH9røf.HWHtH;WvGLu9t@8rt,@fDHBHGt @r@1DHBHGfDSHHrH[f.@S}HHHT$dH%(HD$1yHL$dH3 %(u HH[+xf.HLG(dH%(HD$1HMt L;G@HtGLOMt>HxaLWHW@L)H9QM)DHcL΃HwtCMt>L)HcLHw(/MtHxHWHO@H)H9~>fDH1HL$dH3 %(uJHf.LG@QL)HcI4Hw(뽹k}U}sw}f.Hz}q@SHHz}qH[w}Hz}p@SHHz}pH[G}Hz}p@SHHz}pH[}Hz}p@SHHz}ppH[|HvIHs}t 1>*ts}Dt fI@f.AWAV1AUATAUSH@HG(HHLg0L97GLL}M)LHH=HFHHL9HuLE1LLLo}HoLHU LL)HE@HE(HuEHHMH]0H)L)LmLHHELHU HE(3H)HPHcIHULmIS@HLE1Mi}HLELEHLm@Lm(Lm H]0LmuUHELmI9EuHE(DH[]A\A]A^A_D@0HG(H[]A\A]A^A_IELmHEfJ HpIS@LzUGLtSLE1HEAHPhDff.LzLmHEI&1DUSHHHuHH@@byHp{}HEH} HCpbyHCHEHH{ HCtHH@H=dNuCG@HE(Sx}HH}HC}HC@H}HC(HE0HC0E8C8T|HHHz}>mHH|fffff.LIz$@USHHHuHH@@byH0{}HEH} HCpbyHCHEHH{ HCtHH@H=dNuCG@HE(0S w}HH~}HC~}HC@}HC(HE0HC0E8C8t{HHHz}^lHH{fffff.LIz$@USHHH=tHH@@byHz}HEH} HCpbyHCHEHH{ HCtHH@H=dNuCG@HE(Su}HHX}}HC}}HC@}}HC(HE0HC0E8C8zHHHz}~kH&H{fffff.LIz$@SHHnHCtH{[{LIzSHHnH{HCt{H[ywfLIzH9Ht$HL$AHwHAH9HctDHHH9uL$AHH!?AtH9t+LHEtH ?AuH0H9uf.uDL$Hֿ1HH!@tH9t%HHEtH @uHfA9uEL$HDL$fHH!?At!H9tHHEtH A9uH0fATUISHHoHdH%(HD$1H9u4cHCHxHguwHCHxHguHXH9t-{8tH{@ց@Ht$HXH9uDI,$HtHuHD$dH3%(uH[]A\fDHt$zn@SHHP}HGpbyH dqHz}H[h@HSHH~}HGpbyH $qHz}H[dh@HSHH|}HGpbyH pHz}H[$h@HSHHG@}H~}HGpbyH pHz}H[gfff.Hf.LIzSHHG@}}H|}HGpbyH HH9t|DLI0CDQtnAVAUEATUISHXHIfDEG49EAtJHUFH9HHHPHEHt IT$0HDJu[]A\A]A^fDAI$AHH@HRuEtG49I}1LA֐AWAVIAUATIUSHH8HMeLD$DL$HL)LI9HT$+y8HE<$D:,LD$SiHA89Hs0HD~I6H9t[D8B;9L L$Y}fM,fIEHIEI6H9uL)|$Ht$HT$H8[]A\A]A^A_ÐMPf.M,f.MPf.MPf.M, wM,d@HHJ@HRtB;9f{8IED8FCcA8!IEI6H9HS0DJtHULHL!IEI6H9{8D8D:{gD$ @{8D8D:mIED8DD8tD8A8ufUSHHHXdH%(HD$H1QHUHHEHt$H{HD$ HD$(HD$0HT$HD$D$8H$P}HD$x}HSHCHC HC(HC0C8H}HC}HC@H}(pHpSx}H.XHHSHKH^HXf.AUATIUSHHHdH%(HD$1HHtHFHCHtHEDcEupCsHEcCu HEc{ RH~HS(HH/THaHD$dH3%(ueH[]A\A]@tD{HHt78u DƅDIMLzMNAWAVAUATEUSH1HH(Ht$1HL$DL$Dd$`D|$h7PHL$H9HEHHAH)HAH)HD$ldHD$EII?IIL)HtAHHGEHMucH([]A\A]A^A_@EHAAHcEuUHtHt$H(HH[]A\A]A^A_TfD$ uE1sH(AL[H]A\A]A^A_CGAԾH/GHc@Ht$HHPTCAԾHF!fSHHdH%(HD$1HG(H;G tHu9HCH;CtHtH11HP(HD$dH3%(uH[fH11P(Kf.UHAWAVAUATISIHMHHhdH%(HE1HHx] HDžtHDžpƅxƅyHDžHDžHDžHDžLHDž^GH}@@ LhHHHHDž}HDž}Hx1LHCHLHDž}HDž@}HHHXDHHhAHHH1!ˆ`1L`HH~ HDžAH=VCPMu IU(LE11H[HH)H)H9HGy`Hx`HHEHhDHVAWLY^L^HHxGHHDžtHx3THEdH3%(He[A\A]A^A_]ÐL9t{HE>H8t!D:d D8fuaCPIU(IM +FA8tHE>H8u-A8tHH18DY1ECP@IU(IM HH8FGYxƅyAHoTIE(Me HL)CPH@L9tEA$HH`8$`:GdGf8`ƅ`H@HhLTLHHx1Z HDžtHEEEHEHEHEHELHDžCH}@@ LhHHHHDž}HDž}Hx}HHHXLHDž}HDž@}Hp`HDžAHRMe IE(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E<xHhIHhHF:<0H;PHhLHC`HRLHL+PMC}EHhLR@LPHhI4LH)uMML9HHhHHHH;pHHxBHHDžtHxOf.H@H9Hƅ`&HHH;CHHhHLQ7DH~Hƅ~ )W@HhLqQB@CPHHƅ VMe IE(ƅ`LHH;X@f. fH}H8tqGYEEI 3D9HB+8`A$HH`tY8- ҨH`oCc}PW} Y}?D DDH H8=SPHHx@HHDžtHxMHHLH HHPOHHxn@HHDžtHxMHkLH Hc}PW}xW}>AWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_6AH|$HD$p{}HD$HT$ 9HH|$HD$z}#;HJf.SHHLHLKHC(s0SDL)ȍJH4ƋC KDH9t<{H9~5HcIHIKtHNA9uSDHH[fDHMЃHIHMuΉCDHH[fHt$&Ht$Nf.fAWAVIAUATIUSHXHHt$ HT$(DD$HLOHWL] OLH)I)HEID$A~IFID$ IFAD$(AFAD$,AFAD$0AFAD$4AF\A|$8pHt$LCAFYfHt$H=>fDHt$L=&fDImH.袋.HI+MHHH\$LHHIH)IMH.袋.HI+EHHI)KIDHIEHD$8dH3%(nHH[]A\A]A^A_HT$ImHHBHH9Iu0aID$HxHgu^ID$HxHgu$IXI9t3A|$8tI|$@IHt$ IX蚛I9uDI]MHt$ v@11HHD$ HD$(HD$0udHt$HLH|$ H|$(H\$0HT$ IMH|$ HD$0IUIUIEHL$ HT$(IUIEHT$0DH袋.H9w&HT$HHBHH02Hl5.0HH|$ HtLAWAVAUATIUSHdH%(HD$x1H?HGHWIH.袋.IHH)HHI9<HH袋.HH)HHH)I9L9LHCHr H9HHH袋.H)HHH.袋.HHHL$H$/H$IILLHH$I}LHKIuHITL4LMeI]II9tHHXtI9uMeMtL9HDM}MuHDEIIEHD$xdH3%(HĈ[]A\A]A^A_fDAIvH|$(D$ -HD$ IvHx,IFA~8D$XHD$8IF HD$@AF(D$HAF,D$LAF0D$PAF4D$TIFHImHD$hAFPII)LHD$pH.袋.HI9KIM$DJI)H$I9MI@MAA$IVIT$IVIFgIT$IVIFgIT$IV IT$ AV(AT$(AV,AT$,AV0AT$0AV4AD$8A~8AT$4tIv@I|$@T=AD$8IVHIT$HAVPAT$PIXIXL9SIEH$LH)HHIEH.袋.MHI)HA@A8H}@CE8IGHM9HEHAGPEPIXAHXIwH}E-9IwH} 9IG}8HEIG HE AG(E(AG,E,AG0E0AG4E4iA8tIw@H}@EfDL$$HD$ Hk@Ll$(LpLx@IL9uJ|$XHBEfHD$hHED$pEHEXHI9HŋD$ H}LE9CeDLHE3PHH)HHHHHt$u&1E1L-,Y}5H HkXHbH|$ 9H6HHD$(HxHgtHt$辑MH&Mt"LI9tHHHXH&H\$LHkXLH9$tL4$LLHXH$MtL2z9H8H 6f.AUATIUSHHoLdH%(HD$1H.袋.HL)HHH9w_sqHHFM,L9Lu4@HCHxHguHCHxHguNHXH9t]{8tH{@f>@H)HLHHHD$dH3%(u;H[]A\A]ÐHt$HXRH9uDMl$ŐHt$6r<+f.fAWAVIAUATHUSIHxHdH%(HD$h1HI.x87DxYH=IEI+EH.袋.HHHI9Iu(EE0IMAU II)LOHI9H?HAE0IU(E11MtrLI]H11HIXH{HCHCP,H{11,L9HCHC D{(C,C4C0uI}P11,HD$hdH3%(]Hx[]A\A]A^A_fDH\$HLLD$HD$gHHD$ gD$HHD$(HD$0D|$8D$<D$DD$@HD$XD$`H舾H\$HLLD$HD$gHHD$ gD$HHD$(HD$0D|$8D$<D$DD$@HD$XD$`H HA|$HT$I}E11H4$e{(HHH';H2H藽H2f.DAWAVAUATIUSHHHH|$0dH%(H$1H|$0O+H|$0IH$:A8AG^KXH$LD$E1IE1|HHcL~HD$ D$1D$D$D$ Ht$L(HHEIPtAD$HHHPIH|IEL]L(N AA8 'IIwH.袋.McH)HHI9r EbH9t*H H1L\$I)HpIEL\$IN K H@LL$ EOXHt$0H|$ M4NH $MIHD$0LHT$ I+ULIAPq,@ IΉAPt A-tAPAHՃt{"\$9MÉD$D$AH@H HM1HI)HpH\@I@OA(0APM7q,e@D$fD;d$IL.EIPtAD$HHHPIH|MEH1K 0M@HpI)r|$u^D$x CXEAT$HHH HJ1H @HXH9t8uHXH9uAD$H$x8'@YHT$PD$xIcHHD$PHD$XgHD$`gƄ$HD$hHD$pD$|DŽ$DŽ$H$DŽ$H|$P莹|$S@uTD$|$CHuSS@HH$dH3%(Hĸ[]A\A]A^A_ÐD$fDS@S@H<$%DH<$ D$j}W}X} z#@i}`X}X} j}W}CY}H+HcD$H|$0HD$0z}HD$@HD$8HH|$PNH,HH|$05H,H|$0HD$0z}H,@ATLUSHHH HHGHGHGG HG(G0HG8G@GDGHGLHGPgGXHG`qHGhHGpHGxHLJHLJHLJLdH%(HD$1.HHC`{}Hǃƃǃƃt1HT$H|$H7Ht$HqHD$HxHguHD$dH3%(uH []A\fDHt$fo!HHHD$HxHgt Ht$9t H3H{`HC`{}LHC`q3HCPHxHgt Ht$H{Ht'HbH*f.HSH1PPH[Ðfffff.ЃAHtG~fDGPW2fffff.H}wLyfH}wLyfH}wLyfUSHHP$HH@0H=PuH[]H@H[]HHcHHHH)HH9spH<u-HVHt\H HQHHV HHPtBH@H8H@H)HH9s"HHHHHQHHPuf1Hοiy1fff.SH"}H HdH%(HD$1HI2'F}HW1H1H|$HHCH$HD$EHL$dH3 %(HuH [HH0H4(@AWAVAUATUSHHdH%(HD$x1GpHHH)HH:HL$XI1H $HL$hHL$ffDH8H@H)HH9IILHH@HHT$ HD$(t@HEHHHBHD$HE HHD$t@I?HHL$ Ht$E1DR.H|$H|$(H|$`}&H|$`0* }HI/DLH|$`V/HHH)H‹H)H9HڸHHHC9EpzHHHH)HH9H<AHHH)H‹H)H9HڸHHHtHPHXH)HH9KHHHHH)HHAHD$`HBHHD$ht@HEHHHBHD$PHE HHD$Xt@I?HHL$`Ht$PE1D,H<$FH|$<H|$`}$H|$`..Ђ}HI-DLH|$`-C9EpHD$xdH3%(HĈ[]A\A]A^A_fHPHXH)HH9LHHH HQH@HT$@HHD$Ht@H8H@H)HH9IIEHD$0IEHHD$8t@I?HLl$@Ht$0E11LV+H|$8 I}H|$`}#H|$`-(}HI,DL1of1"f1 f111H޿iy1vH޿P}1gH޿iy1SLl$@HI}BHZ#H|$8H-H|$`H+H6#H|$XHH|$hH#PH|$HH|$(H"fffff.AWAVAUATUSHHxdH%(HD$h1GpHHH)HH1I1Ll$HLt$XPfH8H@H)HH9iIIJ9HH@HHL$HD$t@HEHHHAH$HE HHD$t@I<$H1HL$E1Hv&H|$H|$H|$P}n!H|$Pd+}Hr*H|$P(*HHH)H‹H)H9HڸHHHhC9Ep4HHHH)HH9<H<HHH)HH)H9H߸HHHtHPHXH)HH9HHHHHH0HFHD$PHAHHD$Xt@HEHbHHAHD$@HE HHD$Ht@I<$HHL$PHt$@E1$LLC9EpfHD$hdH3%(Hx[]A\A]A^A_DHPHXH)HH9LHHH HQH@HT$0HHD$8t@H8H@H)HH9IIHD$ IGHHD$(t@I<$HL|$0Ht$ E11L#H|$($IfD1f1f1Ef1SHH޿iy1HH޿P}1H޿iy1L|$0HIHH|$PH'HH|$HHfH|$X\HtH|$(HG11fH|$H*H|$ H8ATUHSHpHHLJ}dH%(HD$1LXHPI9tH{HI9uLPMtLL@H8I9t H{H{I9uL8MtLbL(H I9u<DHI9t'HHxHgtHt$HI9u@L MtLHHtHHtHHtHHtHHtHHxHgurHHxHgujHExHxHgueHE`HxHgu`H}(<H} SH}HHguIHD$dH3%(uEH[]A\Ht$Ht$Ht$Ht$Ht$HSHH[fffff.UHAWAVAUATASHHIEMHhHG}HHdH%(HE1 H0HD{DsHCԨHC 'HH@Ԩ'HC(HH@HHxZ<H@HxHg%HHxHg%IEHC`gHCxgHǃgHǃgHǃHhIEHǃHǃHǃHǃHHǃHǃHǃHǃHǃHǃHǃHǃǃHǃǃHǃHǃ Hǃ(Hǃ0Hǃ8Hǃ@HǃHHǃPHǃXHǃ`Hpt@HpHԨ%HpHE}%HpHLs%H0HԨ%HH@6%HHxHg9#LHHILhm HH}LHHLHALk`HLKHHxHg"HHxHg"HHxHg"HLtNH0H X}$H H@4LHJH HxHgr!HHHPHLhaH@]}LHPH@HH0AHH0HH1H0HxHg!H@HxHg!HPHxHg!HH0Hh}HLh#Hpq}LHHpHH`AHH`HHsH`HxHg]!HpHxHgV!HHxHgO!HHܧyLHLh(yHHAՉCpHHxHg !HH}LHLh@&9*HHAHChHxHgHHHHLh?H}LHHHHAL{xHLHHxHg7HHxHg0HHxHg)CpDž0 L HpHxHgHHxHgHH0HHLhH}LHHH31HHAH:HHxHgHHxHgHHxHgHHHHLhvH0H賸H}LHHH%3HHHHAHL=HHxHgHHxHgHHxHgwHHxHgGHHxHgHH0H0HLh@辷H E}LH0H H02@)HHAHHpp=HHxHgdH HxHg4H0HxHgHH0H`HLh@HPE}LH`HPH@e14*H@HAHHpp=H@HxHgQHPHxHg!H`HxHg)HH0HYChHLh@H}L?HHHp0HpHAHHpp!<HpHxHg)HHxHgHHxHg09Cp0PHH0HHLh(0Hp}L\HHpH`/1H`HAHHpHHp38H`HxHgHpof.HpT&Hp<Hp$Hp HpHpHpHpHpHp|HpdHpLxHp4HHpHpXHp(HpHpWHp'HH}LHLh(1HHAHHpHHp5HHxHgy(HH}LHLh1HHAH4HHxHg'HHH HLhH}L%H HHHAL HL6HHxHg&HHxHg&H HxHg&HH0E}LHLh@)H0HAHHpp7H0HxHg%HH@E}LHLh@/*H@HAHHpp7H@HxHg=%Ծ)HHP}LYChHLh@HPHAHHpp6HPHxHgt Hp}LH0HHǃԨiHH}QHHHp+HxHp4-Hp(+HHxHgHHxHg{pE1LcH/OHtL0HHCPLDH9CpI~"HCPH;CXLpuHpL5HxH@H` H`HKHhHDž`HDžhHCHC HS HpHxHpHxH`Hx}H{H9H1HPH{HH1HH{HHChP(H{HHP0H(}pHpH[Hƿ@jޛHVHʕH{HHP0H(}p.HpHHp}I2Hp&HL[HpHCspHDžHDžHDž  E1@}@jD@j }HILRHHH)HI9@ LkJ BIM_IEHpLp@LHpLHPAHpHx(K'H{HHLPHHPX}pHpHP艼Hƿ@j HHPH{HHLPHH }pYHpH &H}I]HQHL膙HH nH{H*HLPHHHH)HI9!B\8HX}pHpHxHƿ@jHsHH{HHLPHHHH)HI9WB\8HX}p$HpHH}I(HHLQH H9H{HHHHHXHH)HI9\B8LH{HHLPhH}p]HpH*Hƿ@j譗H%H虑H{HUHLPhH`}pHpH`ǹH}IH HL'H H`HHH)HI9H0N,>}l|' H0L<LHHX`tL)ƒH ыPtH9tWx9~MHcпIHIKHpHx.H8H@H)HH9! HHHH HH}HH}HIHL}HnH"HHH)H‹H)H9 HHHAHH>L H(L)HH9 H}MH}HDHdF}HII7LHVH?H H(H)HH9 J HH1HXH;`LP3Ht3HH@HHHDžHDžHPHHXHHPHXH)HH9E HHHH HH}HRL[HO}HBLH}H*HAD9kpnHH@(HHxHgHHxHgHHxHgHEdH3%( He[A\A]A^A_]fD }@jH0HԒH0#H0H0`H0H0UHL&HL'(LsLH0HHǃԨZHH}BHHHHxH%HHHxHggHHxHgHp&}LHP}HPHsxHHV}HHPsHHHǃԨ@HH}(HHH0HxH0 H0HHxHgHHxHgf.H0HHǃԨHH}uHHHHxHXHLHHxHgHHxHg$.Hp}HpHpMHp HpHpJHpHpHpHp{HpjHpYHpH Hp7)Hp&0Hp7HpHpHpHpHpHpHpL L8LPH@HHIHHxHgt HGHHxHgt H'HHxHgt HHpKL3LLHHt"HHtHHtHHtHHtHHxHgt HnHHxHgt HNHCxHxHgt H1HC`HxHgt HHxMH{ LH{HHgt HLGIH`HxHgt HpHpHxHgt HpHHxHgu>LL8L LPIIHHxHgtHp6IIHHxHgtsIHHxHgt HpHHxHgt HpHHxHg1jIIHI~LL8HHL zHѹ}wLyHiy1L8LPHiy1[HILL8LPbHiy1HHοiy1 HIL8LPLaHiyH11FHI}H0HxHgt H0GHHxHgt H0'HxHxHgt H0HpHxHgH0IoIIH HxHgŹ}wLyHiy1L8IHpLPHxLHiy1HILPLHP}1_b]XSNBL濰iy1H0IL8LP|L%toIHL8HxLHC>9HpIJH{IIHHpIHHxHgt HpHHxHg]II0+IL L8LPIL L8LPCIL L8LPFIH HxHg IHHxHgt Hp%ML8L LPIL L8LPIH0HxHgt HpH@HxHgt HpHPHxHgIIHHxHgt HphHHxHgt HpHHHxHgIIIHHxYIHpHxHgt HpHHxHguRLL8LP3IIHHxHgt HpHHxHgtHpoIIH`HxHgGHp<6IHHxHgt HpHHxHgt HpHHxHgt HpHHxHgt HpHHxHgI{IIIIHHxHgHpOIpIIHpHxHgt HpHHxHgt HpHHxHgPII*IH@HxHgt Hp虿HPHxHgt HpyH`HxHgIIIHHxHgt Hp*H HxHgt Hp H0HxHg%rIIL濰iy1$HIH`L8LPuLHIL8LPuLID?:5I+L濰iy1HI-HL8LPsuLIL濰iy1MHIL8LP&uLJL濰iy1 HIH L8LPtLIHHxHgIHHxHgtHp7HIL濰iy1eIHpL8LPHx(*L^IHHxHgHp趼I IH@HxHgtHp聼JEHPIL8LPsLI IHPHxHgL}HpIH@HxHgcGHpͻIH0HxHg-Hp藻jHp膻AHpuIHHxHgt HpMHHxHgt Hp-H HxHgHIL IL ZHpIHHxHgG$Hp豺vIHHxHgJHp{2HIWHHxHgt HpGHHxHgIIHpH0IHHxHgt Hp۹HHxHgC|IIHPIL8LPLL HSHHSH[f.@S}HHHT$dH%(HD$1 HL$dH3 %(u HH[f.AVAUIATUISH HdH%(HD$1H9tVL&Il$ @HI9t@H{H;ouHL;uHCHL$dH3 %(~H []A\A]A^fHLe HD$grH$HHH@LH$gHPHT$HD$gHPvH:IEHnHH:HifATUISHHoHdH%(HD$1H9u;HH9t'HHxHgtHt$H虷H9u@I,$HtHHD$dH3%(u H[]A\AVAUATUSLgH/I9tgIA HI9tOH]HtDCuHHPDC uHHHPHcNu1HPI9u@M&Mt[L]A\A]A^ []A\A]A^AVAUATUSLgH/I9tgIA HI9tOH]HtDCuHHPDC uHHHPHcNu1HPI9u@M&Mt[L]A\A]A^[]A\A]A^SLHHHHIHHHrI;pvH;rv!HHHHgH[L1HfATUISHHdH%(HD$1H9u&kHCHxHgu7HHL9tGHCH+HxHgtHt$YHt$FHHL9ufDHD$dH3%(u H[]A\fSHHH dH%(HD$1Ht:H{!HCHxHgu0H;HHgu@HD$dH3%(utI IA1HE0밃?LEuIM!:IT$AL$H)LL+D$M~sA#HH!?StRӃ?Pt@ItHLMHIMtH HH|$LI<$M :H0I0HIt$AD$tH\$HD$AD$HI$ID$ Ir1$LA,}`H9HHFH?HHHD$HWH;W tFO?At#GH@u HH!@H @HBGHGHG@H։D$HT$Hf.DAUATUSHHLEH?LH)HHHHH9HHHt$5LEH}IHt$Ml$LH)LHtHL9t2HL@HH2tH1HHI9uHGI)IOl HtLLeLmH]H[]A\A]@dHH9JHHDAE1^HGH;GtHHtHHHGff.AWAVIAUATUSH(LoLdH%(HD$1LL)HHHHT-H9HHHt$MnMIHt$MgLL)Lt HHHgM9LLfDHt H2H1HgHHL9uIXLH)HNd8@L9It0HIHzHgtHt$2L9Iuf.I>HtcLM>MfHD$dH3%(Inu$H([]A\A]A^A_fDL|HH9HHAE1f.@HGH;GtHt HHHgHHG3AUATUSHHLEH?LH)HHHHH9HHHt$%LEH}IHt$Ml$LH)LtL9t2HLfHtHHI9uHGI)IOl HtLLeLmH]H[]A\A]fdHH9JHHDAE1^HGH;GtHtHHGf.AUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LHtHL9t2HL@HH2tH1HHI9uHGI)IOl HtLLeLmH]H[]A\A]@dHH9JHHDAE1^AVAUII)ATILIUHMSIHL~@HkLHtMHkLHt:HkLHt'H It-LHuH[]A\A]A^f[H]A\A]A^@LH)HHt+HtHt2[L]A\A]A^LHMtHLH:tHLH'u냐AWAVAUATUSHHH]H?HH)IIM K$I9ILHt$H]H}IHt$MuHH)Lt%HH@HHVHFHPHH9tqHLfHt%HHAHHBHBHAHHHH9uLHL)HMt @IHcI9LuH}HtMMLmLuLeH[]A\A]A^A_AHH9IHAE1f.DAWAVAUATUSHHH]H?HH)IIM K$I9ILHt$QH]H}IHt$MuHH)Lt%HH@HHVHFHPHH9tqHLfHt%HHAHHBHBHAHHHH9uLHL)HMt @IHI9LuH}HtMLmLuLeH[]A\A]A^A_AHH9IHAE1f.DATUHoSIHH:HCtHǃ ƃƃHǃHǃHǃHǃLcHCH}L`HHs@@ HCH}HC}H}HC@}[]A\I HH{~HHCtLI.f.fUHAWAVAUATISHHMIHHhdH%(HE1HHHCHLHHHXguDHHhAHHH1!@`1`HH~ HDžAHCPMo IW(LE11H[HH)H)H9HGy`Rx`HHEHhDLRAVHuY^L(wHHxHHDžtHxHEdH3%(*He[A\A]A^A_]L9HEuH^8t$D:wdD:wfudCPIW(IO @+覢A8tHEuH8u-|A8tHH8DwY1ECP@IW(IO HHm8GYxƅyAH/IG(Mg HL)CPH@PL9tEA$HH`/8d`:GdGf8`ƅ`H@HhLYLAuHLHHXLHphr`HDžAHOMg IG(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E4xHhHhHF:4(H;PHhLHC`H)LHL+PMy}EHhLҺLPHhI4LH)ML9HwHhHHHH;HCHHxZHHDžtHxo:f.H@H9Hƅ`HHH;CHHhHL2DH~Hƅ~ @HhLB@CPHHƅ _Mg IG(ƅ`LHH;X@f. 膞oH}H8tuGYEEI SDHG+88`A$HH`8q-f H`HHHLHLH~y}PW} Y}@[VQLG}PW}W}}PW}xW}DAWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_VH|$HD$p{}HD$HT$ YlHH|$HD$z}CHf.UHAWAVAUATISHHIMHHhdH%(HE1HHHHCLHqHHXlDHHhAHHH1!@`1`HH~ HDžI6HHVCPMo IW(LE11H[HH)H)H9HGy`Px`HHEHhDLRAVHmY^LnHHxFHHDžtHx[HEdH3%((He[A\A]A^A_]fL9t{HEuHZ8t D:wdD:wfu`CPIW(IO +A8tHEuH8u-ܙA8tHH8DwY1ECP@IW(IO HHm8GYxƅyI6HHVIG(Mg HL)CPH@NL9tEA$HH`-8b`:GdGf8`ƅ`H@HhLLlHLHHXLHpi`HDžI6HHVMg IG(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E4xHhfHhHF:4(H;PHhLHC`HLHL+PMq}EHhL*LPHhI4LH)MML9HoHhHHHH;H;HHx貴HHDžtHx4fH@H9Hƅ`HHH;CHHhHLDH~Hƅ~ @HhLQJ@CPHHƅ Mg IG(ƅ`LHH;XHf. oH}H8tuGYEEQ 賕DHK+蘕8`A$HH`8s-]h NH`KHHHDHCH޵ٵ@}PW} Y}蠱軵趵豵謵觵@}PW}W}n@}PW}xW}UDAWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_足H|$HD$p{}HD$HT$ cHH|$HD$z}裭H;f.H~Ht&HVxHHHHWtBft/HHt;H HQHHHHPuHVXHHV`HHWuf1fff.ЃAHtG~fDGPWfffff.H}wLy#fSH6}H HdH%(HD$1H5 }HHoH|$HHCH$HD$襯HL$dH3 %(HuH [HHH蔻@ATUISHHdH%(H$1HyHGXpHD$HG`HHD$t@HCHH HHBH$HCPHHD$t@I<$H HL$E11HH|$ƮH|$輮HChH/ HHBHD$0HCpHHD$8t@HCXHD$ HC`HHD$(t@I<$H HL$0Ht$ E11H|$(KH|$8AHH HHBHD$PHHHD$Xt@HChH HHBHD$@HCpHHD$Ht@I<$H HL$PHt$@E11H|$HH$貭H|$X設H}VHN!}HAHHCxHD$pHHHD$xt@HHS HHBHD$`HHHD$ht@I<$HT HL$pHt$`E11IH|$hH|$xH}裸H@}H莶Hf{)HH HHBH$HHH$t@HCxH$HHH$t@I<$H H$H$E11zH$-H$ H}ηH\}H蹵HH$dH3%( H[]A\DHGXH$0HG`HH$8t@HCHHHHBH$ HCPHH$(t@I<$HH$0H$ E11肾H$(5H$8(HChH;HHBH$PHCpHH$Xt@HCXH$@HC`HH$Ht@I<$HH$PH$@E11H$H袪H$X蕪HHHHBH$pHHH$xt@HChHHHBH$`HCpHH$ht@I<$HWH$pH$`E11FH$hH$H$xH}蒵H芿!}H}HU{)HHHHBH$HHH$t@HHHHBH$HHH$t@I<$HgH$H$E11VH$ H$H}誴H袾y}H蕲)HGXH$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11荻H$@H$3HChHHHBH$HCpHH$t@HCXH$HC`HH$t@I<$H H$H$E11H$譧H$蠧HH`HHBH$HHH$t@HChHHHBH$HCpHH$t@I<$HbH$H$E11HNH$H}H}覲H螼y}H葰Hi@H$HG`HH$t@HCHHHHBH$HCPHH$t@I<$HH$H$E11苹H$>H$1HChHtHHBH$HCpHH$t@HCXH$HC`HH$t@I<$H H$H$E11H$諥H$螥HCxH$HHH$t@HChHHHBH$HCpHH$t@I<$HsH$H$E11bH$H$ H$H}记H覺@!}H虮Hq{)HHHHBH$HHH$t@HCxH$HHH$t@I<$HH$H$E11腷H$8H$+H}ٯHѹ\}Hĭ.11cf1f1Kf1of1f13f1f1f1?f1]f1Df1f1f1f1xf1Tf19f1|f15H|$(H貢H|$8訢HH|$HH蓢H|$X艢H衮HHH莮H$H^H$QHiH$H9H$,HDH|$HH|$ H%H|$hHH|$xH`[H$hH̡H$x迡H׭H$(H觡H$8蚡H貭H$HH股H$XuH荭H$H]H$PHhH$H.H$!H9H$H H$HnH$HߠH}֠HH$H辠H$豠Hɬ#H$H蔠H$臠H蟬H$HjH$]Hu@ATUISHHdH%(H$1H HGXHD$HG`HHD$t@HCHH\ HHBH$HCPHHD$t@I<$H HL$E11HPH|$H$p螟H|$蔟H}BH:/}H-HHHHHBHD$0HHHD$8t@HCXHD$ HC`HHD$(t@I<$H HL$0Ht$ E118H|$(H|$8H}蒪H芴/}H}HUHCxHD$PHHHD$Xt@HHHHBHD$@HHHD$Ht@I<$HPHL$PHt$@E11H|$H;H|$X1H}ߩH׳!}HʧH袲{)HHHHBHD$pHHHD$xt@HCxHD$`HHHD$ht@I<$HHL$pHt$`E11(H|$h~H|$xtH}"H!}H HDH$dH3%(%HĐ[]A\DkHGXH$HG`HH$t@HCHH}HHBH$HCPHH$t@I<$HH$H$E112H$H$p}H$pH}H/}H HHHHHBH$HHH$t@HCXH$HC`HH$t@I<$HH$H$E11bH$赛H$訛H}VHN80}HAH{)/HHHHBH$0HHH$8t@HCXH$ HC`HH$(t@I<$HH$0H$ E11萫H$(H$8֚H }脦H|`0}Hof.)VHGXH$PHG`HH$Xt@HCHHHHHBH$@HCPHH$Ht@I<$H.H$PH$@E11轪H$HH$pH$XH(}詥H衯/}H蔣HlHHHHBH$pHHH$xt@HCXH$`HC`HH$ht@I<$H^H$`E1H1H$hEH}@ATUISH^@H1}Htq1}H1}Hύ1}H躍1}H襍-HEHE I|$0&}qxI|$8&}ZaID$HtHHBHEID$HHEH[]A\I|$0Ls-I|$8LsI$0HEI$8HHEuUWI|$0}I|$8}誌I$HEI$HHEt D@H[]A\@I|$0LsaI|$8&}JI$HtHHBHEI$HHEuI|$0}2I|$8&}tЃAHtG~fDGPW鮉fffff.H}wLysfATUHo@SIH1}HH0dH%(H$(1K1}H6V1}H!1}H 1}Ho H$ȩ}HvHȉƨ}H}H萈 H{0&}蚊OH{8&}脊9{  HH HHBHD$HHHD$t@HCH HHBH$HCHHD$t@I<$HHL$E11HxH|$.sH|$$s7 H{0LsʉH{8Ls贉~HHtHHBHD$0HHHD$8t@HHD$ HHHD$(t@I<$H1HL$0Ht$ E11轅H|$(srH|$8irHH HHBHD$PHHHD$Xt@HHD$@HHHD$Ht@I<$HHL$PHt$@E13H|$HqH|$XqHH/ HHBHD$pHHHD$xt@HH HHBHD$`HHHD$ht@I<$HHL$pHt$`E11蜄H|$hRqH|$xHqH Hx HHBH$H(HH$t@HH1 HHBH$HHH$t@I<$HmH$H$E11H$pH$pH0H$H8HH$t@HH HHBH$HHH$t@I<$HH$H$E11TH$pH$oH0H$H8HH$t@H HC HHBH$H(HH$t@I<$H/H$H$A1貂H$eoH$Xo{ fHHn HHBH$HHH$t@H0H$H8HH$t@I<$H H$H$E11 H$nH$nf.H{0}RFH{8}<0HHtHHBH$HHH$t@HH$HHH$t@I<$H H$H$E113H$mH$mHH8 HHBH$HHH$t@HH$HHH$t@I<$H H$H$E1葀H$DmH$7mHH HHBH$HHH$t@HH{ HHBH$HHH$t@I<$H\ H$H$E11H$lH$lHH HHBH$HHH$t@HH HHBH$HHH$t@I<$H H$H$E113H$kH$kHH$0HHH$8t@HH HHBH$ HHH$(t@I<$H H$0H$ E11~H$(GkH$8:kHH$PHHH$Xt@HHk HHBH$@HHH$Ht@I<$Ho H$PH$@A1}H$HjH$Xj{ HH HHBH$pHHH$xt@HH$`HHH$ht@I<$HH$pH$`E11I}H$hiH$xiH$(dH3%(H0[]A\DH{0Lsr{H{8&}\eHHtHHBH$HHH$t@HH$HHH$t@I<$HH$H$E11S|H$iH$hHHHHBH$HHH$t@HH$HHH$t@I<$H.H$H$E1{H$dhH$WhHHHHBH$HHH$t@HHHHBH$HHH$t@I<$H|H$H$E11{H$gH$gHHDHHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$A1PzH$gH$f{ HHHHBH$HHH$t@HHtHHBH$HHH$t@I<$HH$H$E11HyH$GfH{>fQfH$ȩ}HqH{}Hz1|f1>f1f1f1f1f17f1f1fH{0}|H{8&}{HHtHHBH$HHH$t@HH$HHH$t@I<$HmH$H$E11wH$dH$dHHHHBH$0HHH$8t@HH$ HHH$(t@I<$HH$0H$ E1QwH$(dH$8cHH%HHBH$PHHH$Xt@HHHHBH$@HHH$Ht@I<$HH$PH$@E11vH$HUcH$XHcHHHHBH$pHHH$xt@HHMHHBH$`HHH$ht@I<$HmH$pH$`A1uH$hbH$xb{ HHHHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E117uH$aH$a1111211u1a1#1111B111G1|111=11V1\1cH$HaH$aH mH$H`H$`HlH|$H`H|$`HlH$H`H$`HlH$H`H$z`HlH$Hb`H$U`HmlH$H=`H$0`HHlH|$hH`H|$x`H)lH|$HH_H|$X_H lH|$(H_H|$8_HkH$H_H$_HkHH;tHkH$H_H$v_HkH$(H^_H$8Q_HikH$H9_H$,_HDkH$HH_H$X_HkH$hH^H$x^HjH$H^H$^HjH$H^H$^HjH$H^H$s^HjH$HV^H$I^HajH$H1^H{(^H@jH$HH^H$X^HjH$hH]H$x]HiH$(H]H$8]HiH$H]H$]Hifff.ATUHo@SIH1}HH0dH%(H$(1 t1}HsV1}Hsi 1}Hst1}Hs? H$ ȩ}H^Hrƨ}H{fHSqfDH{0&}ZsOH{8&}Ds9{ HHR HHBHD$HHHD$t@HCH HHBH$HCHHD$t@I<$HHL$E11HlH|$[H|$[H{0}rH{8&}tr~HHtHHBHD$0HHHD$8t@HH HHBHD$ HHHD$(t@I<$HHL$0Ht$ A1kH|$( [H|$8[HH6 HHBHD$PHHHD$Xt@HH HHBHD$@HHHD$Ht@I<$HhHL$PHt$@E113kH|$HZH|$XZHH HHBHD$pHHHD$xt@HHD$`HHHD$ht@I<$HHL$pHt$`E1jH|$hYH|$xYHH HHBH$HHH$t@HH$HHH$t@I<$HKH$H$E11jH$cYH$VY{ tHH\HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11WiH$XH$XH{0}BovH{8},o`HH$HHH$t@HH HHBH$HHH$t@I<$H H$H$A1|hH$WH$WHH$HHH$t@HH HHBH$HHH$t@I<$H H$H$E11gH$0WH$#WHH HHBH$HHH$t@HHP HHBH$HHH$t@I<$Hi H$H$E11.gH$VH$tVHH HHBH$HHH$t@HH HHBH$HHH$t@I<$H H$H$E11fH$UH$UHHE HHBH$0HHH$8t@HH$ HHH$(t@I<$H H$0H$ E11eH$(3UH$8&UHH HHBH$PHHH$Xt@HH$@HHH$Ht@I<$H| H$PH$@E1>eH$HTH$XT{ HH HHBH$pHHH$xt@HH$`HHH$ht@I<$H H$pH$`E11dH$hSH$xSH$(dH3%( H0[]A\DH{0LsbjH{8&}LjHHtHHBH$HHH$t@HH$HHH$t@I<$HH$H$E11cH$RH$RHHHHBH$HHH$t@HH$HHH$t@I<$H?H$H$E1cH$TRH$GRHHHHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11RbH$QH$QHH-HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$A1aH$PH$P{ HHHHBH$HHH$t@HH[HHBH$HHH$t@I<$H"H$H$E11H`H$7PH{.PQf1f1f1f1f1 f1f1QfH{0LsbfH{8LsLfkHHtHHBH$HHH$t@HH$HHH$t@I<$HH$H$E11_H$NH$NHHHHBH$HHH$t@HH$HHH$t@I<$H?H$H$E1_H$TNH$GNHHeHHBH$HHH$t@HH'HHBH$HHH$t@I<$HH$H$E11R^H$MH$MH HHHBH$0H(HH$8t@HHHHBH$ HHH$(t@I<$HH$0H$ E11]H$(LH$8LH0H$PH8HH$Xt@HHHHBH$@HHH$Ht@I<$H?H$PH$@E11]H$HWLH$XJLH0H$pH8HH$xt@H HOHHBH$`H(HH$ht@I<$HH$pH$`A1b\H$hKH$xK{ HHHHBH$HHH$t@H0H$H8HH$t@I<$HH$H$E11[H$ KH$J"f.1f111111 1e1'11t1m1/11r11a11111T11me11gLH$hHJH$x JH"VH$HIH$IHUH$HIH$IHUH$HIH$IHUH$HIH$vIHUH|$HaIH|$WIHoUH$H?IH$2IHJUH$hHIH$x IH%UH$HHHH$XHHUH$(HHH$8HHTH$HHH$HHTH$HHH$yHHTH$HaHH$THHlTH$HH/}LV#HsHHHAH{@HLHHxHgHHxHgHHxHgHCH}LHH@I"H{1HAֈC HHxHgHCHHHH@I=H}L`"HsHHHAH{(HKHHxHgHHxHgHHxHgHCHP?}LHH@(I!H{HPA։HPHxHgHCHpO}LHH@0Iw!H{HpA։HpHxHg{HDžPHDžXHDž`HDžpHDžxHEHEHEHEHDžg& E1DžL<DHHxHgHHxHgpHCHHLHLx@HB 2-H{HAHHxHg,HXH;`8HtHHXH LAH `}1LHHm}HHgHHHuHHUHgIHEHxHg/HHxHgH HxHgHCHH0LHLx@HB +H{H0AH0HxHg;HXH;`GHtHHXH@LH@r}1JHHf}HHgiGHHuHHUHgGHEHxHgfHHxHg>H@HxHgHCHHPLHLx@HB *H{HPAHPHxHgrHxH;EHtHHxH`LH`r}1jIHHm}HHgFHHuHHUHgUFHEHxHgHHxHgxH`HxHgPHCHHpLHLx@HB$ *)H{HpAHpHxHgHxH;EHtHHxHLp1}H> 1}H> H$ȩ}H)H=ƨ}H1Hj(H{8&}4>HSHH|$ ;HD$HT$H$HKHD$H}HD$HCHCHSH$H$ 'H|$'HCH)HH|$ ȩ}HRL62H|$ < }HI;LL*}Hv;H|$ ,;{ H|$09ȩ}.2H|$0$H$Ht))H!H$PHW) H$0HB)H$ H-)IH)LH$pH)H$0H(H$ H(fD1f.SH`HH[f.@SA}HHHT$dH%(HD$1i,HL$dH3 %(u HH[f.SHH HVHFdH%(HD$1HHHHHGHWH|$H $HD$aHT$dH3%(u H H[SHH HVHFdH%(HD$1HHHHHGHWH|$H $HD$HT$dH3%(u H H[3AUATL$US1LHIHHJ&HHHGHGu_II9HELet9LHfHtHHH9uIL)HHDHEH[]A\A]HH9w LHH}HtHfUSHHHdH%(HD$1oHHT"HL$dH3 %(HuH[]HHHzHgt Ht$hHAUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LtL9t2HLfHtHHI9uHGI)IOl HtLLeLmH]H[]A\A]fdHH9JHHDAE1^AUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LtL9t2HLfHtHHI9uHGI)IOl HtLLeLmH]H[]A\A]fdH?H9JHHDAE1^ATUISH^hH1}H&1}H%1}H%1}H%1}H%Q1}H%HEHEI|$P&}i%dI|$`&}R%MID$HtHHBHEID$HHEH[]A\I|$P1} %I|$`&}$ID$HtHHBHEID$ HHEu_aDI|$P}$I|$`Ls$ID$(HtHHBHEID$0HHEt @H[]A\@I|$P}I$I|$`&}2$I$HtHHBHEI$HHEuI|$P}#I|$`&}#8I|$P}#I|$`}#mfATUISH^hH1}Hu#1}H`#1}HK#1}H6#1}H!#I1}H #HEHEI|$P&}"dI|$`&}"MID$HtHHBHEID$HHEH[]A\I|$P1}y"I|$`&}b"ID$HtHHBHEID$ HHEuWYDI|$P}!"I|$`Ls "I$HEI$HHEt D@H[]A\@I|$P}!I|$`&}!ID$(HtHHBHEID$0HHEuDI|$P}i!I|$`&}R!tI|$P}:!.I|$`}#!I$HEI$ HHE@ЃAHtG~fDGPWfffff.H}wLyfATUHohSIH1}HHdH%(H$1[ 1}HF n1}H1  1}H 1}H /1}HH$@}H H}HHfH{P&}7H{`&}|!{@rHH*HHBHD$HHHD$t@HCHHHBH$HCHHD$t@I<$H9 HL$E11HpH|$&H|$H{P1}|H{`&}f{@HH:HHBHD$0HHHD$8t@HCHHHBHD$ HC HHD$(t@I<$Hh HL$0Ht$ E11H|$(SH|$8I @H{P}H{`LsHHtHHBHD$pHHHD$xt@HC(HsHHBHD$`HC0HHD$ht@I<$HHL$pHt$`E11H|$hH|$xHH3HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E112H$H$HHvHHBH$HHH$t@HH8HHBH$HHH$t@I<$HTH$H$E1H$3H$&HH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11H$H$HH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11BH$H${@HHHHBH$HHH$t@HH$HHH$t@I<$HjH$H$E11H$LH$?H$dH3%(H[]A\DH{P}H{`&}HC(HtHHBH$0HC0HH$8t@HHqHHBH$ HHH$(t@I<$HjH$0H$ E11H$(LH$8?{@HH HHBH$PHHH$Xt@HC(HHHBH$@HC0HH$Ht@I<$HH$PH$@E11H$HH$XO1f1fH{P}H{`&}{@HHHHBHD$PHHHD$Xt@HC(Ht~HHBHD$@HC0HHD$Ht@I<$HHL$PHt$@E11H|$HH|$X`1f11_1111q111 11o1H{P}H{`}HC(HtHHBH$pHC0HH$xt@HHHHBH$`HHH$ht@I<$HH$pH$`E11H$hkH$x^HH$H HH$t@HC(H&HHBH$HC0HH$t@I<$HH$H$E11H$H${@HHHHBH$HHH$t@HH$H HH$t@I<$HtKH$H$E11HwH$*H{!11$i1171KH$HH$H H$HHH$XH H|$HHH|$XH H$HvH$iH H$hHQH$xDH\ H$H,H$H7 H$HH$H H|$(HH|$8HH|$hHH|$xHH|$HH|$HHH*HH$HrH$eH}H$HMH$@HXH$(H(H$8H3H$HH{HfATUHohSIH1}HHdH%(H$1{1}Hfn1}HQ 1}H<1}H'/1}HH$@}HH}HHfH{P&}7H{`&}!{@rHH*HHBHD$HHHD$t@HCHHHBH$HCHHD$t@I<$H9 HL$E11H H|$FH|$<H{P1}|H{`&}f{@HH:HHBHD$0HHHD$8t@HCHHHBHD$ HC HHD$(t@I<$Hh HL$0Ht$ E11 H|$(sH|$8i @H{P}H{`LsHHtHHBHD$pHHHD$xt@HC(HsHHBHD$`HC0HHD$ht@I<$HHL$pHt$`E11[ H|$hH|$xHH3HHBH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11H$H$HHvHHBH$HHH$t@HH8HHBH$HHH$t@I<$HTH$H$E1H$SH$FHH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11aH$H$HH$HHH$t@HHHHBH$HHH$t@I<$HH$H$E11H$H${@HHHHBH$HHH$t@HH$HHH$t@I<$HjH$H$E11H$lH$_H$dH3%(H[]A\DH{P} H{`&} HC(HtHHBH$0HC0HH$8t@HHqHHBH$ HHH$(t@I<$HjH$0H$ E11H$(lH$8_{@HH HHBH$PHHH$Xt@HC(HHHBH$@HC0HH$Ht@I<$HH$PH$@E11fH$HH$XO1f1fH{P}2 H{`&} {@HHHHBHD$PHHHD$Xt@HC(Ht~HHBHD$@HC0HHD$Ht@I<$HHL$PHt$@E11qH|$HH|$X`1f11_1111q111 11o1H{P} H{`}HC(HtHHBH$pHC0HH$xt@HHHHBH$`HHH$ht@I<$HH$pH$`E118H$hH$x~HH$H HH$t@HC(H&HHBH$HC0HH$t@I<$HH$H$E11H$H${@HHHHBH$HHH$t@HH$H HH$t@I<$HtKH$H$E11HH$JH{A11$ 1171KH$HH$H H$HHH$XHH|$HHH|$XHH$HH$HH$hHqH$xdH|H$HLH$?HWH$H'H$H2H|$(HH|$8HH|$hHH|$xHH|$HH|$HHHJHH$HH$HH$HmH$`HxH$(HHH$8;HSH$H#H{H2fSHH HHLJ}dH%(HD$1HHHHHHHHHxHgH{pHtgHChHxHguvHC`HxHguuHCPHxHgutHCHHxHgusH{0H{ H{HD$dH3%(uWH[fHt$lHt${Ht$|Ht$}Ht$v~fff.SHwH[~fffff.U&}HAWAVAUATHUSHHHHdH%(HE1HUH&}HUH1}HUH}HMH} HMH`}HMH0P}HUH}#H}e@}@H}7}H*HHHV7H}HC8HH HH@ILH }LBHs8H HH0AH{PH0H0HxHgHHxHgH HxHg~HC8HHPHH@IH@}LHs8HPH@H`AH{`H`H`HxHgH@HxHg HPHxHgHC8HHHH@ItHp/}LHs8HHpHAH{hHTHHxHgHpHxHgHHxHgHC8H}LHH@IZH{81HAֈC@HHxHgAHC8HHHH@I~H}LHs8HHHAH{HH^HHxHgHHxHgHHxHgHC8H}LHH@@IdH{8fHAHHxHg|HC8H}LHH@@IH{8)HAHHxHg2HC8HP?}LHH@(IH{8HPA։HPHxHgHC8HpO}LHH@0IeH{8HpA։HpHxHgHDžPHDžXHDž`HDžpHDžxHEHEHEHEHDžg$ E1DžL:HHxHgHHxHgpHC8HHLHLx@HB "H{8HAHHxHg,HXH;`8HtHHXH L1H `}1 HHm}HHgHHuHHUHgHEHxHg/HHxHgH HxHgHC8HH0LHLx@HB H{8H0AH0HxHg;HXH;`GHtHHXH@LؕH@r}1HHf}HHgYHHuHHUHgHEHxHgfHHxHg>H@HxHgHC8HHPLHLx@HB pH{8HPAHPHxHgrHxH;EHtHHxH`L肔H`r}1ZHHm}HHgHHuHHUHgEHEHxHgHHxHgxH`HxHgPHC8HHpLHLx@HB$ H{8HpAHpHxHgHxH;EHtHHxHL,H`}1HH@zyHHgHHuHHUHgHEHxHgHHxHgHHxHgHC8HHLHLx@HB, H{8HAHHxHgHEH;EHtHHEI9HL近H`}1HHf}HHg@HHuHHUHgHEHxHg5Hq$@Hu_HEH;EHH}Hu/pf.Hu@fHHuHxH;EKfDHHpuIHufHuzfHOHuHxH;EfDHHpHuGfHu7fH$HuHXH;`HHPHufHufHHuf.HuRfHuwHXH;`HHPHC8HHHH@IHx}LkHs8HHHAHHxHgHHxHgHC8L}LLHH@(IH{8LAAHHxHgnHH-HLAWLEHpHPH}XHZHxHgHUHELkpIHI)H?II9LcpHIL)HI9I9u,fDHtHHCxLHH9EItGfLZHCxH;uHL(LHH9EIuH}HtrHHxHgHHxHgH}Ht4HpHt#HPHtHHxHgxH0HtHHtHHtHHxHg;HHxHg1HHxHg'HHxHgHEdH3%(qHe[A\A]A^A_]HCxIHM)MILH{pL;Ht'HA$tHIL9uHtHHIIHCpHEL{xLHUILs\Hue6HuW@HuIzHu;Hu-HuHuHu`HujHutHuHuHuHu^HuhHurHuHuwHui&Hu[0HuMvHu?Hu1Hu#JHu9HuCHuL1LH}HHHxHgt HH0HtHHtHHtHHxHgt HcHHxHgt HCHHxHgt H#HHxHgt HHKHH5HHHxHgHuHHHxHgHH`HxHgt HuH@HxHgt HuhHPHxHgz{HHHHxHgUVHHHxHg56HHHxHgt HuHpHxHgHuHHK>HcH{HHHHHHHxHgt Hu^H@HxHgHHxHgt H&H}HtHHpHt7HPH!"HHEHxHgt HHHxHgt HuHHxHgRHuDH$HH0HxHg!HHEHxHgt HEHHxHgt Hu(H HxHgsHHHHHxHgIHHPHxHgHHHxHgHHHxHgt HuHHxHgFHu`8HHHHHHpHxHgMN}DHHHxHgtLHHxHgHHHHxHgtHuHHHHxHgt HuHHxHg'HHHHxHgHHEHxHgt H#HHxHgt HuHHxHgQHHHHpHxHg~'HHEHxHgt HHHxHgt HuH`HxHg$HH}HH[{QHH0HxHgt Hu&HHxHgt Hu H HxHgHHHXHHPHxHgy"HHEHxHg'HAVAUAATUHSHEMHHw8H}HGHGHHGHG HG(HG0HGHgHGPgHG`gHGhgHGpHGxHLJHdH%(H$1I$DDHID$HHt@HǃHǃHHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃ HC8H|$}HHL`(MH{8Ht$AAHD$HxHgcHkh1}H1}H1}Hx1}Hc#1}HNf 1}H9)H$Pn@}EH$P}HH$PAHCXH{P&}(H{`&}HSpH|$ HCXDHD$ HT$(H$xHKHD$(HD$ HCHCHSH$pH$xzH|$(pHCH HH|$0@}HRL;H|$0 }HHLHF}HH|$0A{@tH$pu@}HHdF}HIHsHLHVH;dF}@jgHsH@jHVUIHH@MM A|$8At$CLpHHHSHH$`1LbH$`H$hH}HHDŽ$hHDŽ$`HHHH$pH$xH$h=H{P}bH{`&}LHSpH|$`HCXDH{(Ht$`] H|$hCHC(H HH|$p@}HRLKH|$p }HHLH}HH|$pAlGH{P1}rH{`&}\HSpH|$@HCXD[HD$@HT$HH$xHKHD$HHD$@HCHC HS H$pH$x"H|$HHCHHH|$P@}HRLCH|$P }HHLH}HH|$PA<H$pSfDH{P}*H{`LsHSpH$HCXD`H{(H$ H$HC(HHHH$@}HRHSH$}HuHH}H]H$0H$H$H$H$pHHDŽ$H}HDŽ$HHHH$pH$xH$ H$$ )H$H$H}HHDŽ$HDŽ$HHHH$pH$xH$H$ )H$H$H}HHDŽ$HDŽ$HHHH$pH$xH$H$NH$H$H}HHDŽ$AHDŽ$HHHH$pH$xH${@H$dH3%(HĐ[]A\A]A^H{P}H{`}H$HCXH$H$H$pHHDŽ$H}HDŽ$HHHH$pH$xH$HSpH$ DH{(H$ kH$(NHC(HHH$0@}HRLiH$0}HLH&}HH$0|H$@?PH$@H$HH}HHDŽ$HAHDŽ$@HH H H$pH$xlH$H_f.LI$ H@0H=PLfH{P}H{`&}nH$HCX蚿H$H$H$xHHDŽ$HDŽ$HHHH$pH$xyH$lHSpH$D舿H{(H$GH$*HC(HpHH$@}HRH`H$}HHH}HH$AR-HH HH|HpHdHXHLH@HHxHgt Ht$H{pHtHChHxHgt Ht$ɷHC`HxHgt Ht$讷HCPHxHgt Ht$蓷HCHHxHgt Ht$xH{0H{ H{H}wLyl}wLySH|$PHHHD$HxHgH$pvH|$0HdH|$pHRIHL?HH$PHg"H$HR 8H$0H8H$H#f.@1f.SHƘHH[f.S4}HHHT$dH%(HD$1HL$dH3 %(u HH[[f.SHH HVHFdH%(HD$1HHHHHGHWH|$H $HD$衿HT$dH3%(u H H[HV@HHHVHHHWtBÐfHV@HHHVHHHWtBÐfЃAHtG~fDGPWfffff.H?*tHf.H9>*ufH}wLy賽fUSH8dH%(HD$(10HGPHD$HGXHHD$t@HG@H$HGHHHD$t@H>HH\$E11HHzH|$0H{'HߺU}H(}HHHD$(dH3%(u>H8[]@H\$Y}HHyh}HyHH0HH|$H{H{rHSH0dH%(HD$(10tcHGPHD$HGXHHD$t@HG@H$HGHHHD$t@H>HtAHL$E11HH|$H|$HD$(dH3%(uH0['H|$H赼H|$諼HfSHHXHHGP}dH%(HD$1wH{HnHC8HxHgu=HCHxHgu}脸H$GHsHHVW0}H*H${0HC SHD$ HC(HxHgHD$HxHgH$(dH3%(H8[]A\A]A^A_fDH$(fDH$&fDH$k$fDH$SDc0JfH$3fDH$fDH$fDH$fDH$f1~THHD$@HxHgt H$HD$PHxHgHD$ HxHgt Ht$`HD$HxHgt Ht$DH{X{H{HrHC8HxHgt Ht$ HCHxHgt Ht$ H{HHgt Ht$ H9HH$HxHgAH$/HHWH$Hk H$HVHHD$`HxHgHHD$0HxHgH$0zH$HH$HH}HHHD$pHxHgt H$H$HxHgH$HH$HoH$HZDHG f.SHH3H[f.@SL}HHHT$dH%(HD$1HL$dH3 %(u HH[蛴f.HVHHHVHHWtBÐfЃAHtG~fDGPWfffff.H}wLy賰fHGw|HtPfDHGHt0Pl@HGHt4PL@HGHHtHP*fHGHHtHxP fHGHt H,PfDSHHHt^HH[HATUHS_tH< 1HI ) )tA ADHH9uH1L1ۋp t.@UtHLHH<֬9wH}HHt9[L]A\HGHtƀPUSHHpHH@0H=PuH[]H@H[]ATLfhUSHH&}LH dH%(HD$1!uMHU HttHHPHE(HHHCt@HL$dH3 %(HH []A\fLsLu'HE@HHEHHHCuf1@}Lu'HEPHHEXHHCrqf.Hl}yHAHuhHHVQ}H?HHHC 螰HHHKf.ATLghUSHH&}LH0dH%(H$(1HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11HH|$uH|$kH$(dH3%(H0[]A\LsL+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11H|$(躬H|$8谬HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@A胿H|$H9H|$X/HC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E11H|$h讫H|$x褫HCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11kH$H$@1M}LHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11貽H$eH$XHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$AH$̩H$迩HC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11vH$)H$HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11HH$蓨H}芨D1bf1f1if1.f1fH$7}HHɽHshHHVټ}HǼHo11R11z1 H$H蝧H$萧H訳H$HxH}oH至H$HWH$JHbH$H2H$%H=H|$HHH|$XHHH蓻H H$HۦH$ΦHH|$hH蹦H|$x详HDzH|$(H蚦H|$8萦H訲H|$H{H|$qH色ATLghUSHH&}LH0dH%(H$(1HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11H_H|$赥H|$諥H$(dH3%(H0[]A\LsL3+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11褵H|$(H|$8HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@A#H|$HyH|$XoHC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E11蘴H|$hH|$xHCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11 H$^H$Q@1M}LHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11RH$襢H$蘢HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$A蹲H$ H$HC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11H$iH$\HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11H耱H$ӠH}ʠD1bf1f1if1.f1fH$W}HAH HshHHV}HH迴o11R11z1MH$HݟH$ПHH$H踟H}诟HǫH$H藟H$芟H被H$HrH$eH}H|$HHPH|$XFH^HHӳHKH$HH$H&H|$hHH|$xHH|$(HڞH|$8ОHH|$H軞H|$豞HɪSHHH}HdH%(HD$1HtpHdHHxHgupHHxHgulHChHxHgukH{X"H{HH{8H{(H{HD$dH3%(u:H[Ht$@Ht$@Ht$fffff.SHH[鎦fffff.HHt"Pdfff.UHAWAVAUATISHHHAEHHLJ8}HLJHHLJPHLJXMHLJ`HLJhHLJpHLJxHGHGHGHGgHGgHdH%(HE18I$DDHID$HHt@HUH0Lk&}HUH@\~̴H0;}H0ڱ}HILLI7HVϰH0胰HCH0HpHL`eH`}L|HsHpH`HPALkhHPLBHPHxHg.H`HxHg$HpHxHgHCLeH}LHLp(觳H{@HAHHHHxHgHCHH}HLp({H{1HAHHHHxHgHCHH}HLp{H{1HAֈHHxHgHCHH}HLp(K{H{HA։HHxHghHCHH}HLp(zH{HA։HHxHg"HCHH}HLpzH{1HAHCxHyHgǃHCH@HHLp踕HH}0zHsHHHALHL莣HHxHgHHxHgHHxHgfH*^Y)̪H,CtH<CpI語1M =(9(t DHI9uH HHC`L螔HHEHHHEt@L CtARW{xLLATWH@PP&H@HKH0HHHDž@HDžHHCHCHSHMHEHEHxIH@Hx9I|$/H HxHgKSpHs`HP蔘HPHK HXHDžPHDžXHC HC(HS(HMHEHEHx軖HPHx論HC HHH`}HRLc9H`-4}HI8LL}}HH`ϪHCH6H}d}LȡH}迫 F}HIʪLL}H譪H}dLsLwHp3HpHK@HxHDžpHDžxHC@HCHHSHHMHEHEHxZHpHxJH}HEHK0HUHEHEHC0HC8HS8HMHEHEHxHEHx}L襫H@C|ǃǃǃHǃHxHǃHgH0HxHgHEdH3%(He[A\A]A^A_]HCHH(}HLp(]uH{HA։HHxHgHufDH} HEHKPHUHEHEHCPHCXHSXHMHEHEHx袓HEHx蕓LhHEHK0HUHEHEHC0HC8HS8HMHEHEHxKI|$A_Hu#HuHuHu!HugHu2HuHuHuCxHHuwDHuiHu[IHHxHg3H@HxHgt H/H0HxHgt H/HHHxHgt H@HHxHgt H@HChHxHgt H@H{X虑H{H萑H{8臑H{(~H{uL荝IHPHxHgt Hu=H`HxHgt Hu HpHxHgHuIHHxHgI|$IH HxHg}IHHxHgt HuHHxHgt HuyHHxHg&TIIIHHxHg*蝒IHHxHgIHHxHgH}I葤߫H`Ix}wLy躎IeIHHxHgLzIHHxHg,ZI_II*H0III fDAUATUSHHhdH%(HD$X1D$9b1ȃ9~H|$@}De|菚H|$@腤 }HI萣DL5~HIpfLZt$f(t$H|$@ ]pf=M(M(\D$H*^f(:EpffD$(H*f.L$0sX- )f()fTf.r:f.H=YL$8s?f.r9f.w f. M(v?HT$(H}B$fHT$0}},$@HT$8}$1fTf.rf.zt{f.L(z)X)fWf.D$@wQf.ztg)T$L$踝L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}k#t}!t}}!H|$@HeHݘATUSHHpdH%(HD$h1HG|D$HHD$ gHh@HD$PHpHT$ LD$dH|$ H1I)HRʇHH|$ 1HJÙHH|$0}HT$0HgpHH{Ht$@fHT$@HgHD$@ZHxHghHD$0HxHgrHD$ HxHg|.)zHeD$H|$@}k|0H|$@& }HI1Lג }HHfHZD$谙H|$@趟HCH HD$hdH3%(Hp[]A\@HCHH|$@}HHh@kH{fHt$@HD$@HxHguT$Ht$0f@Ht$D$ PD$ }DHt$@D$ 0D$ sDHt$@D$ D$ ipHHD$@HxHgt Ht$HD$0HxHgt Ht$@HD$ HxHgt Ht$@H̕HHD$@HxHgtHt$0}H|$@HHHHG`f.SHHH[f.So}HHHT$dH%(HD$1詡HL$dH3 %(u HH[[f.USH@H}HuHxH@8byHH^H}HcHCpbyHH{tHH@H=dNuCG@HE `T}HH}HCP}HC8}HC HE(HC(E0C0ГHHHHbHJH袄LIz$@USH@H蝌HuHxH@8byHmH~H}HdHCpbyHH{tHH@H=dNuCG@HE T }HH}HC}HC8H}HC HE(HC(E0C0HHHH肙HjHƒLIz$@SHH}HGpbyHDH[˃f.HSHHP}HGpbyHH[[f.HSHHG8H}HP}HGpbyH輋H[Hf.LIzSHHG8}H}HGpbyHlH[Hf.LIzSHHP}HGpbyH$H|H[Hf.SHH}HGpbyHHlH[风Hf.SHHG8H}HP}HGpbyH蜊HH[[ff.Hf.LIzSHHG8}H}HGpbyHH}HcHCpbyHH{tHH@H=dNuSG@HE HuH{HC HE(HC(E0H}HCP}HC8}C0蕧HHXHH[]@H HH"HŀHHHmHܐLIz@USH@H}HuHxH@8byHmH>H}HdHCpbyHH{tHH@H=dNuSG@HE HuH{HC HE(HC(E0H}HC}HC8H}C0蕦HHXHH[]@H HH"H~HHHmHܐLIz@USH@HHdH%(HD$81MHuH|$HH$m4Ht$H{HD$HD$ HD$(D$0H$P}HD$x}HC8byHm~H|$HdHCpbyHH{tHH@H=dNu\G@HD$ Ht$H{H}HC}HC8H}HC HD$(HC(D$0C05HT }H;HH H5}HHœH譍H~HH H}HwDUSH@HHdH%(HD$81݅HuH|$HH$}Ht$H{HD$HD$ HD$(D$0H$}HD$}HC8byHs}H|$HcHCpbyHH{tHH@H=dNu\G@HD$ Ht$H{H}HCP}HC8}HC HD$(HC(D$0C0ţH-`T}HˋHH H|HHUH=H|HH H|HDUHAWAVAUATISIHMHHhdH%(HE1HHx蚔 HDžtHDžpƅxƅyHDžHDžHDžHDžLHDž}H}@@ LxHHHHDž}HDž}HxтHCHLHDž}HDž@}HHHX:2DHHhAHHH1!ˆ`1萃`HH~ HDžM.MLHHLCPMo IW(LE11H[HH)H)H9HGy`Sx`HHEHhDHVAVLc2Y^L3HHx}HHDžtHx辊HEdH3%(He[A\A]A^A_]@IW(LL9t|HEuH8t!D:wdtD8wfueCPIW(IO E11+FA8tHEuHe8u-A8tHHH88DwY1ECP@IW(IO HH8GYxƅyM&MJL,HHL*IG(Mg HL)CPH@KL9tEA$HH`8`:GdGf8`ƅ`H@HhLL1HLMHHXLHp/`HDžI6H,Mg IG(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHHPIL+`E4xHh辀HhHF:4(H;PHhLHC`HىLHL+PM}EHhLwLPHhI4LH)襄ML9HNHhHHHH;pjHHx zHHDžtHx)f.H@H9Hƅ`HHH;CHHhHLDH~Hƅ~ Y@HhL衈B@CPHHƅ Mg IG(ƅ`LHH;X@f. _H}H8GYEEEfHHHxw 3V DH+8`}A$HH`8G-^< OUHHHxw 蝏H`2Gz}PW}xW}v}PW} Y}vz}PW}W}vzzHzHHxswHHDžtHx舄HpkzfzH Hs貆HVHJH2H H#z΅f.fAWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHAIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_VxH|$HD$p{}HD$HT$ Y(HH|$HD$z}CrHہf.SHHLHLKHC(s0SDL)ȍJH4ƋC KDH9t<{H9~5HcIHIKtHNA9uSDHH[fDHMЃHIHMuΉCDHH[fHt$FHt$Nf.fUHAWAVAUATISIHMHHhdH%(HE1HHx芉 HDžtHDžpƅxƅyHDžHDžHDžHDžLHDžrH}@@ LxHHHHDž}HDž}HxwHCHLHDž}HDž@}HHHX*'HIc$DHhH@AHHHHH1!ˆ`1ix`HH~ HDžID$H貁CPMg IW(LE11H[HH)H)H9HGy`Mx`HHEHhDHVAVLM'Y^L(HHxrHHDžtHxHEdH3%(EHe[A\A]A^A_]fDL9t{HE4$Hz8t D:wdD8wfu`CPIW(IO +6A8tHE4$H!8u- A8tHH8DwY1ECP@IW(IO HH8GYxƅyID$HIG(Mo HL)CPH@lL9tEAEHH`K8`:Gd2Gf8`"ƅ`H@HhLL&HLNHHXLHp$HIc$`H@HHDžID$H~Mg IG(L9LH)HSHH9HFH9HHP`HPHH`H@HH9HFH9HXHhHH@PIL+`E4xHhuHhHF:4(H;PHhLHC`H~LHL+PMy}EHhLblLPHhI4LH)yML9HHhHHHH;pHHxnHHDžtHx{f.H@H9Hƅ`HHH;CHHhHL}DH~Hƅ~ 9@HhL}B@CPHHƅ Mg IG(ƅ`LHH;X@f. OH}H8tuGYEEI ýDHF+訽8`AEHH`8U-mJ ^H`{o@}PW}W}l@}PW}xW}k@}PW} Y}koooooooHH HHHxHHxslHHDžtHxyHpxHHh{H{fAWAVAUATIUSH8HcWHdH%(HD$(1HcGD9HOHHI.袋.HH)HIHt~Lg`HE1E1LH|$$DHIIXH)HHI9sCAEDJ4:9uE1AHVLED$LHIUIMGXu$HD$(dH3%(uH8[]A\A]A^A_mH|$HD$p{}HD$HT$ HH|$HD$z}gHwf.USHHHdH%(H$1HT$0H0}H|$HDHS}a}HD2Ha]1H|$@H:*HHD$0JHt$0H|$@H|$ H2Ht$ H|$zHD$ HxHgu?H|$@7H|$ŁvH|$HvHt$H|$0gfffff.UHAWAVAUATISHHHAEHHLJh}HLJxHGHGMHGHGgHGgHHdH%(HE1JZI$DDHID$HHt@HUH`Lk&}uHUHp\~uH`7}hH`r}HIqLHLI7HVqH`qHCH`HHL`wYH}L=HsHHHALc8HLTgHHxHg!HHxHgHHxHg HCHUH}HLh(tH{@HAHHChHHxHgHCHHH}HLh(=H{1HAHHCpHHxHgHCHHH}HLhHEHxHgI{IH@HxHgIH0HxHguyIIH}I8RO?f.@HGf.SHxH:H[f.@SyHHHT$dH%(HD$1UHL$dH3 %(u HH[k?f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPW.Qfffff.H?*trLHf.H9>*ufH ~wLy;fHGw,HtPXfDHGG0Ht (PXfHGw4Ht8PeXfDw8HHtPGXHGHHtHP XfHGHwpHtHPX@HGHt H,PWfDSHHHtHH[HWSHGpHSHHh1ɋpH{HshHt[}Wfffff.HGHtƀPWWSHHH~HhdH%(HD$1Hts>Hg:HCxHxHguFHC`HxHguEHC HxHguDH{+:HD$dH3%(u7H[DHt$f@Ht$V@Ht$F?CuHCHtH,[fD1[IfDATUHSH8&}B]DH<21HI S(O(tfA ADHH9uHUp1L1ۋpE`t1f.UDHLHHuH{HtH[]$DH[]Dfff.UHAWAVAUATISHHHAEHHLJ`+~HLJpHLJxHGMHGHGgHGgHHdH%(HE1#I$DDHID$HHt@HUH`Lk&}?HUHp\~k?H`78~2H`y<}HI;LHLI7HVn;H`";HCH`HHL`#H}LHsHHHALc8HL0HHxHgHHxHgHHxHgHCHUH}HLp(I>H{@HAHHCpHHxHgaHCHHH}HLp(H{1HAHHCxHHxHgHCHHH}HLpDH{1HAֈHHxHgHCHHH}HLp(H{HA։C\HHxHgHCHHH}HLp(H{HA։C`HHxHgUIEHHH~Lp(THLA։CdHHxHg@IEHHH~Lp(HLA։ChHHxHgHCHpH@HLh, HHH0}HsH@H0H ALH L.H HxHgH0HxHgH@HxHg5fH*Cp^И(C5H,CDC`H<C@II!)1M ((tf. DHI9uH&}L89HPHC0LHHEHHHEt@HPDKDHKxS\s`PHEWLCpHpPChPCdPAQ]HpHKH0HxHDžpHDžxHCHCHSHMHEHEHx!HpHx!HEHx!HPHxHgS@Hs0H}"HEHK HUHEHEHC HC(HS(HMHEHEHx.!HEHx!!HC HHH}8~HRLY,H}64}HI5LL$}H5H}N5HCHjH}[8~LG,H}>6 F}HII5LL$}H,5H}4HpHǃCPCTCXHǃHxCLCHHgH`HxHg HEdH3%(iHe[A\A]A^A_]H}HC0a8~!H}O5Hs8HHV_4}HM4H}4HuHu:HuDHuNHuHuHuHuZHuHuxHujHu\HuNHu@Hu2cHu$mIHHxHgHpHxHgt H_H`HxHgt H_HHHxHgt HpHHxHgt HpxHC8HxHgt Hp[H{(H{L)IHHxHgt Hu!HHxHgt HuHHxHgHuIHHxHgIHHxHgI{IHEHxHPHxHgpIHHxHgSfIHHxHg3FIHHxHg&H}I1@&~wLyHH}I08IH@HxHgIHHxHgIH HxHgt HurH0HxHgtHuUIIBH`I70.I&I>IVIzH}I0fff.AUATUSHHhWTdH%(HD$X1D$9mOX1fȃ9~H|$@8~DeL&H|$@0 }HI/DLU" ~HI/fLZt$f(t$$)H|$@*/]@f=''\D$H*^f(Z&E@ffD$(H*f.L$0\-<(f((fTf.r>f.H=YYL$8sCf.r=f.w f.''vCHT$(H}^fDHT$0}}D@HT$8}11fTf.rf.zt{f.'z(p(fWf.D$@wQf.ztg)T$L$)L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}胯t} t}}H|$@H}-H$0ATUSHHpdH%(HD$h1HGLD$HHD$ gHh@HD$PHpdHT$ LD$dH|$ H1I)HRHH|$ 1HJ%HH|$0}HT$0Hg"HH{Ht$@fHT$@HgHD$@ZHxHgHD$0HxHgHD$ HxHgLf.zHeD$CPH|$@8~kLS#H|$@I- }HIT,L }HH5,fHZD$%H|$@+H{8&}-uHCCPH$HD$hdH3%(Hp[]A\HCHH|$@}HHh@H{fHt$@HD$@ZHxHgf.L$KPHt$@D$ D$ DHt$D$ D$ MDHt$@D$ D$ CDHt$0D$ D$ _`2HHD$ HxHgt Ht$@|H!HHD$@HxHgtHt$0UH|$@HF*HHD$0HxHgtHt$@%HHD$@HxHgtHt$HG0f.SHƠHH[f.S8yHHHT$dH%(HD$1-HL$dH3 %(u HH[Kf.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfЃAHtG~fDGPW)fffff.H;~wLy#fSHHHtJHH[H1SwLHH8&}*uHCSLHt[0fffff.SwTHH8&}[*uHCSTHtx[0fffff.SwXHH8&}*uHCSXHt|[T0fffff.SHHH8&})uHCHHt H[ 0@SHHH8&})uHCHHt H[/@SHH8&}^)uHCHtH,[fD1[/fDATU&}SHH8)kDH<1HI s(o(tfA ADHH9uHSp1L1p!oC`1sht3DSDHLHHfffff.USHH8&}H$uH{HtH[]mEDH[]+fff.UHAWAVAUATISHHHAEHHLJ`D~HLJpHLJxHGMHGHGgHGgHdH%(HE1 I$DDHID$HHt@HUHLk&}%HUH \~%H0:8,~H0"}HI!LLI7HV!H0B!HCHHPHL`$ H@}LHsHPH@H0ALk8H0LH0HxHg H@HxHgx HPHxHg HCHUH`}HL`(i$H{ =H`AHHCpH`HxHg HCHHp}HL`(H{1HpAHHCxHpHxHg\ HCHH}HL`dH{1HAԈHHxHg HCHH}HL`(H{HAԉC\HHxHgHCHH}HL`(H{HAԉC`HHxHgfH*Cp^:(H,fCDH*Qf.f(.!HCHH-~L,HLp0&H{DHAAƉChHHxHg~Dc`1DAH@O8,~ H@L,~H?-~H2DH%-~HDH8-~HH@C`DchD96HPDc`[8,~ HP,~HDHs<-~HHPjDc`DcDHCHH}HDc@L`H{1HAHCHHyHgFCdHCH HHL`HH}ZHsHHHALHLHHxHgHHxHgHHxHgYDcDfI*,J< 1M ((t DHL9uHCDHHyDc@C`ChH`p8,~H` }HIHLHVV-~HIDLDh-~HILq {-~HI\L -~HI9L -~HIL H`HHxHg&}LHC0L LLuHHEHHHEt@HEHKdATWHpPCHS`shLKxDC\PCDPPsp8HpHKH@HxHDžpHDžxHCHCHSHMHEHEHx&HpHxHEHx H HxHgpShHs0H}SDmHEHK HUHEHEHC HC(HS(HMHEHEHxHEHxHC HHH}8,~HRHI!H}-~H LHp}H H}HCH[HH}8,~IH}F}H LH}H H}iH HǃCPCTCXHǃHxCLHg HHxHgHEdH3%(He[A\A]A^A_]DH}8,~H}Hs8HHV}H H}+@1ADfHCHH(}HL`(H{HAԉCdHHxHg/Hu!HuHuHuHuHuDshpHu%HuCHHuHuSHurHudHuVHuH_Hu:Hu,HupHuzf(VH0IH HxHgt HHHxHgt HH"HHxHgt H HHxHgt H bHC8HxHgt H EH{(H{L I5IMIeIH}I"IHHxHgHuHPIIHEHx+H HxHgH@IH}I~@?~wLyH}IgTIHPHxHg9EIHHxHg%IHHxHgIHHxHgIHHxHgIHpHxHgIH`HxHgyIHHxHgYeIH0HxHgt HuH@HxHgHuIH`IHHxHgIIHHxHgIHHxHgt HuHHxHgHu`IfDAUATUSHHhdH%(HD$X1GTD$9OX1fʃ9~H|$@.8,~DeL/ H|$@% }HI0DL~HIfLZt$f(t$ H|$@ED1f=1'uh&'\D$H*^f(EDffD$(H*ȋEhH*^ff.L$0]-r(f(yr(fTf.r?f.H=f.w f.'vDHT$(H}ǒHT$0}}謒@HT$8}虒1fTf.rf.zt{f.0'zr(q(fWf.D$@wQf.ztg)T$L$8 L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}t}qt}}bH|$@HH]ATUSHHpdH%(HD$h1HGLD$HHD$ gHh@HD$PHp GHT$ LD$dH|$ H1I)HRJHH|$ 1HJCHH|$0}HT$0HgHH{Ht$@fHT$@HgHD$@ZHxHgHD$0HxHgHD$ HxHgLf.zHED$CPH|$@8,~kLH|$@ }HILZ }HHfHZD$3H|$@9H{8&}KuHCCPHlHD$hdH3%(Hp[]A\HCHH|$@}HHh@_H{fHt$@HD$@ZHxHgf.L$KPHt$@D$ PD$ DHt$D$ 0D$ MDHt$@D$ D$ CDHt$0D$ D$ _qHHD$ HxHgt Ht$@HTHHD$@HxHgtHt$0H|$@H HHD$0HxHgtHt$@eHHD$@HxHgtHt$BHG0f.SHƠH@H[f.SyHHHT$dH%(HD$1HL$dH3 %(u HH[f.HVHHHVHHWtBÐfЃAHtG~fDGPW fffff.HS~wLyfHGw|HtP fDHGHt0P@HGHt4P@HGHHtHPfHGHHtHxPfHGHt H,PkfDSHHHtn_HH[H=SHHHp6H{HHt[^@HGHtƀPUSHHHH@0H=PuH[]H@H[]ATLfhUSHH&}LH dH%(HD$1 uMHU HttHHPHE(HHHCt@HL$dH3 %(HH []A\fLsLc u'HE@HHEHHHCuf1@}L+ u'HEPHHEXHHCrqf.HsxE~H HuhHHV}HHHHC >HHsHf.ATLghUSHH&}LH0dH%(H$(1K HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11H_H|$H|$ H$(dH3%(H0[]A\LsL +HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11H|$(ZH|$8PHC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@A#H|$HH|$XHC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E11H|$hNH|$xDHCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11 H$H$@1M}LSHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11RH$H$HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$AH$lH$_HC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11H$H$HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11HH$3H}*D1bf1f1if1.f1fH$>xE~HHiHshHHVy}HgHo11R11z1 H$H=H$0HHH$HH}H'H$HH$HH$HH$HH|$HHH|$XHHH3HH$H{H$nHH|$hHYH|$xOHgH|$(H:H|$80HHH|$HH|$H)ATLghUSHH&}LH0dH%(H$(1HCHD$HCHHD$t@HC HHHBH$HC(HHD$t@H}HHL$E11HH|$UH|$KH$(dH3%(H0[]A\LsL+HC0HHHBHD$0HC8HHD$8t@HC@HD$ HCHHHD$(t@H}H!HL$0Ht$ E11DH|$(H|$8HC0HcHHBHD$PHC8HHD$Xt@HC@HD$@HCHHHD$Ht@H}HHL$PHt$@AH|$HH|$XHC HHHBHD$pHC(HHD$xt@HC0HHHBHD$`HC8HHD$ht@H}HHL$pHt$`E118H|$hH|$xHCH$HCHH$t@HC HHHBH$HC(HH$t@H}HH$H$E11H$H$@1M}LHC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HH$H$E11H$EH$8HC0HHHBH$HC8HH$t@HCPH$HCXHH$t@H}HBH$H$AYH$H$HC HHHBH$HC(HH$t@HC0HHHBH$HC8HH$t@H}HH$H$E11H$ H$HCH$HCHH$t@HC H0HHBH$HC(HH$t@H}HH$H$E11H H$sH}jD1bf1f1if1.f1fH$^xE~HHHshHHV}HH_o11R11z1H$H}H$pHH$HXH}OHgH$H7H$*HBH$HH$HH|$HHH|$XHHHsHH$HH$HH|$hHH|$xHH|$(HzH|$8pHH|$H[H|$QHiSHHH[~HdH%(HD$1HtHHHxHgupHHxHgulHChHxHgukH{XH{HH{8H{(H{HD$dH3%(u:H[Ht$V@Ht$F@Ht$6fffff.SHH[.fffff.HHtMPpfff.UHAWAVAUATISHHHAEHHLJ8[~HLJHHLJPHLJXMHLJ`HLJhHLJpHLJxHGHGHGHGgHGgH(dH%(HE1I$DDHID$HHt@HUH@Lk&}HUHP\~lH0:xE~H0z}HIL(LI7HVoH0#HCH@HHL`Hp}LHsHHpH`ALkhH`LH`HxHgHpHxHgHHxHgHCLeH}LHLp(GH{@HAHHHHxHgHCH(H}HLp(H{1HAHHHHxHg;HCH(H}HLpHP5[~XHPL}HIWL8LI7HVAHPHCHPHHL`H}LSHsHHHpALk8HpLHpHxHgHHxHgHHxHgHCHUH}HL`(H{ =HAHHChHHxHgzHCH8H}HL`(hH{1HAHHCpHHxHg7HCH8H}HL`H{1HAԈCxHHxHgHCH8H}HL`(ɥH{HAԉC\HHxHgHCH8H}HL`(xH{HAHC`HyHgqH`C`C[~AH`00\~HI8h\~LIcL@\~H~H`2HCH8H}HL`蟤H{1HAHCHHyHglCdHCH`H0HL`跿H8H }/HsH0H HALHLHHxHgH HxHg:H0HxHg^fH*Ch^k(H,fCDH*YS(D,DC`H<C@I1M b(^(t DHI9uH&}LH@HC0LiH{xHEHHHEt@H@K\Sds`LKhPHEWLCpHpPCHPCDPAT(HpHKH0HxHDžpHDžxHCHCHSHMHEHEHx#HpHxHEHxH@HxHg}S@Hs0H}nHEHK HUHEHEHC HC(HS(HMHEHEHxHEHxHC HHH}[~HRLm%H}4}HI'LLl}H H}HCHH}n[~LH} F}HILL}HH}VH`HǃCPCTCXHǃHxCLHg)HPHxHgHEdH3%(He[A\A]A^A_]fH}HC0s[~H}Hs8HHV}HH}|!HCH8H(}HL`(ݟH{HAԉCdHHxHgJHu>Hu0C`~IHHxHgH`HxHgt HOHPHxHgt HOH1HHxHgt H`HHxHgt H`HC8HxHgt H`dH{(˼H{¼LIHpHxHgt Hu*HHxHgt Hu HHxHgHuIHHxHgIHHxHgI{IHEHxH@HxHgpH`I|ZIHHxHg?RIHHxHg2H}I+ @n~wLymH}I IH0HxHgIHHxHgIHHxHgt HuH HxHgtHujIINHPI\:I2IJIbIH}I+ IHHxHgAUAT&}USHH8HhdH%(HD$X1t!HD$XdH3%(Hh[]A\A]fHC{LHHD$gHhHD$@Hp HT$LD$TH|$H1I)HRKH|$ ~}1EHH|$ \~HT$ HgHH{Ht$0HT$0Hg1AHD$0HxHgHD$ HxHgHD$HxHgkDH<聿1HI Q(M(tA ADHH9uHHDChAE1L1NjHaC`ZYt1DSDHLHH<>S`9wH{HHtD!Lg1Ht$Ht$0Ht$0萺HHD$HxHgt Ht$0H$HHD$ HxHgtHt$0sHHD$0HxHgtHt$RAUATUSHHhWTdH%(HD$X1D$9mOX1fȃ9~H|$@ [~DeLH|$@ }HI DLž~HIfLZt$f(t$H|$@]@f="v'v'\D$H*^f(E@ffD$(H*f.L$0\-,(f(,(fTf.r>f.H=#XL$8sCf.r=f.w f.u'vCHT$(H}LfDHT$0}}L@HT$8}L1fTf.rf.zt{f.8u'z,(+(fWf.D$@wQf.ztg)T$L$@L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}Kt}yJt}}jJH|$@HHe蠷ATUSHHpdH%(HD$h1HGLD$HHD$ gHh@HD$PHpHT$ LD$dH|$ H1I)HRZHH|$ 1HJSHH|$0}HT$0HgHH{Ht$@fHT$@HgHD$@ZHxHgHD$0HxHgHD$ HxHgLf.zHeD$CPH|$@[~kLÿH|$@ }HILj }HHfHZD$CH|$@IH{8&}[uHCCPH HD$hdH3%(Hp[]A\HCHH|$@}HHh@oH{fHt$@HD$@ZHxHgf.L$KPHt$@D$ pD$ DHt$D$ PD$ MDHt$@D$ 0D$ CDHt$0D$ D$ _дHHD$ HxHgt Ht$@HdHHD$@HxHgtHt$0H|$@HHHD$0HxHgtHt$@HHD$@HxHgtHt$bHG0f.SHƘHPH[f.SзyHHHT$dH%(HD$1 HL$dH3 %(u HH[軳f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfЃAHtG~fDGPW~fffff.SóHdH%(HD$1@HH8³t+HHxHgtHt$HuH8³u@HD$dH3%(uH[蝲ffff.SųHdH%(HD$1@HHót+HHxHgtHt$HHóu@HD$dH3%(uH[fff.Hz~wLy蓮fSHHHtHH[HiSwHHH8&} uHCSHHt[.fffff.SwPHH8&}uHCSPHt0[fffff.SwTHH8&}uHCSTHt4[fffff.SHHH8&}GuHCHHt H[e@SHHH8&}uHCHHt H[%@SHH8&}uHCHtH,[fD1[fDSHH8&}uHCHt ƀ[fATUSHw~H0CLoHH|$D$ dH%(HD$(13H|$) }HI4Lڴ }HHfHZD$ 賻H|$H{8&}uHCCLHt&$HD$(dH3%(u H0[]A\3H|$HaHٸUSHH8H&}H8dH%(HD$(1FupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HfH|$H|$HD$(dH3%(uH8[]1OH|$HݫH|$ӫHf.USHH8H&}H8dH%(HD$(1VupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HֻH|$,H|$"HD$(dH3%(uH8[]1_H|$HH|$Hf.SHHH~HdH%(HD$1Ht蠮HHt菮H胪HHxHguOHHxHguKHC8HxHguJH{(AH{8HD$dH3%(u4H[fHt$&@Ht$@Ht$Offfff.SHH[βfffff.HHtPfff.fÐf.UHAWAVAUATISHHHAEHHLJ`~HLJpHLJxHGMHGHGgHGgHHdH%(HE1觥I$DDHID$HHt@HUH`Lk&}PHUHp\~;HP6w~UHPI}HITLHLI7HV>HPHCH`HHL`ԤH}LPHsHHHALc8HL豲HHxHg HHxHgHHxHg HCHUH}HLh(H{ =HAHHChHHxHgHCHHH}HLh(eH{1HAHHCpHHxHgHCHHH}HLhH{1HAՈCxHHxHgFHCHHH}HLh(ƇH{HAՉCXHHxHgHCHHH}HLh(uH{HAHC\HyHgt{H`C\Dw~AߧH`裻00\~HI论8h\~L蜺IcLA\~HdH`8HCHHH(}HLh(襆H{HAՉC`HHxHgHCHpH0HLhɡHHH }AHsH0H HALHL蟯HHxHgH HxHgH0HxHg{fH*Ch^}(H,Ds\ADCDIJ<Ds@踪1M ˬ(Ǭ(t DHI9uDs@HJ<t1M ((tD DHI9uH&}L萺L@HC0LLNH{xHEHHHEt@HEHKXATWHpPCDS`s\LKhLCpPDP跸HpHKH0HxHDžpHDžxHCHCHSHMHEHEHx HpHxHEHxH@HxHgS@Hs0H}UHEHK HUHEHEHC HC(HS(HMHEHEHx舢HEHx{HC HHH}w~HRLc H}4}HILLS}H֫H}譶HCHH}ew~L覭H}蝷 F}HI訶LL}HpH}GHpHǃCLCPCTHǃHxCHHgOH`HxHgEHEdH3%(@He[A\A]A^A_]H}HC0kw~H}跶Hs8HHVǵ}H赵H}l HuHuHuHuHu)HulHuzHulHu^C\/HuMHu?cHu1mHu#wHuHuMIHHxHgHpHxHgt H_H`HxHgt H_H膟HHxHgt HpvHHxHgt HpVHC8HxHgt Hp9H{( H{L/IHHxHgt HuHHxHgt HuHHxHgHuIIHHxHgH`IIHHxHgIHHxHglIHEHx,H@HxHgBUIHHxHgt HuH HxHgt HuH0HxHgIIH}I?@~~wLy聜H}IkIIHHxHgvIHHxHgViIH}I诱8HPI蛱$II4ILfffff.USHH8&}HxdH%(HD$h1it%HD$hdH3%(Hx[]f.HC{HHHD$ gHhHD$PHp{HT$ LD$dH|$ H1I)HR軗H|$ ~}1赩HH|$0\~HT$0HgbHH{Ht$@HT$@Hg1HL$@HyHgHL$0HyHgHL$ HyHgH1BfT$PD$RHHDChE1ɋHjHt$`H1CD$bfL$`HHt$`DChE1ɉH$H{HAXHHAYl`DHt$D$D$Ht$@D$D$Ht$@D$D$螸HHD$ HxHgt Ht$@H藦HHD$0HxHgtHt$@fHHD$@HxHgtHt$EHG0f.SHƠH谖H[f.SXyHHHT$dH%(HD$1iHL$dH3 %(u HH[f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfЃAHtG~fDGPWޭfffff.H@~wLyfSHHHtHH[HSwLHH8&}kuHCSLHt[¶fffff.SwTHH8&}+uHCSTHtx[肶fffff.SwXHH8&}uHCSXHt|[Bfffff.SHHH8&}觮uHCHHt H[@SHHH8&}guHCHHt H[蹵@SHH8&}.uHCHtH,[fD1[{fDSHH8&}uHCHt ƀ[GfUSHH谝HH@0H=PuH[]H@H[]SHHdH%(HD$1@HH߳tCHHxHgtЃAHtIPЅHt$H+H߳ufHD$dH3%(uH[f.PJH莘fffff.S߳HdH%(HD$1@HHݳtCHHxHgtЃAHtIPЅHt$H{HݳufHD$dH3%(uH[f.PJHޗfffff.USHH8H&}H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H&H|$ܔH|$ҔHD$(dH3%(uH8[]1H|$H蝔H|$蓔H諠f.USHH8H&}H8dH%(HD$(1upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H薤H|$H|$HD$(dH3%(uH8[]1H|$H譓H|$裓H軟f.SHHH~HdH%(HD$1Ht`HTHHxHguPHHxHguLHC8HxHguKH{(H{ HD$dH3%(u5H[Ht$@Ht$@Ht$vfffff.SHH[鞛fffff.USHH8&}H7uH{HtH[]DH[]耰fff.UHAWAVAUATISHHHAIHHLJ`~HLJpHLJxHGEHGHGgHGgLdH %(HM1WHDDHHHAHHt@HUH Lk&}HUH0\~H06~H0}HII4$LHVH0裥HCH H`HH@I肍HP}LqHsH`HPH@ALk8H@L_H@HxHgk HPHxHg H`HxHg HCHUHp}HH@(IĨH{ =HpAHHCpHpHxHg HCH}LHH@(IqH{1HAHHCxHHxHgQ HCH}LHH@IpH{1HA׈HHxHg HCH}LHH@(IqpH{HA։C\HHxHgHCH}LHH@(I!pH{HA׉C`HHxHgfH*Cp^( H,fCDH*Y(,H-~L扅HCHLp(oH{HAHChHyHg|Ds`D<1DA9H@U~H@貣8,~HH蹢H -~裢HDD%-~HIDL$8-~HbH@KhC`D4D9HPDs`a~0HP00\~HI8h\~LDL蒔\~HСHP脡Ds`DHCH}LHDs@LpmH{1HAHCHHyHg2CdHCH0HHLpH}LymHsHHHALHLזHHxHgeHHxHgHHxHg'DcDJ<1M q(m(t DHL9uHCDH`w~Dc@C`ChH`X-~HIDL贒h-~HIL{-~HI̟Ln-~HI詟LK-~HI膟L(H`,&}L?HC0L LLHHEHHHEt@HEHKdATWHpPCHS`shLKxDC\PCDPPsp蛼HpHKH@HxHDžpHDžxHCHCHSHMHEHEHx讉HpHx螉HEHx葉H HxHgS@Hs0H}HEHK HUHEHEHC HC(HS(HMHEHEHx,HEHxHC HHH}~HRL谔H}觞-~HI貝LL}H蕝H}LHCH:H}~LEH}<3~HIGLL茌}H*H}H0HǃCPCTCXHǃHxCLHgH HxHgHEdH3%(bHe[A\A]A^A_]DH}~萉H}WHs8HHVg}HUH} &1ADfHCH(}LHLp(ahH{HA։CdHHxHgHuzHunHuHuCH=HunHu`ChsHuOHuAHu3Hu%Hu_Hu HuHu%HugHu%HuIHHxHgH0HxHgt HH HxHgt HcH觅HHxHgt H07HHxHgt H0HC8HxHgt H0H{(AH{8LPIHPHxHgt HuH`HxHgHuIHHxHgIHHxHgIHHxHgt Hu@HHxHgtHu#IH`IeH@IQH}Iؘ@IHHxHg%IHHxHgIHHxHgIHpHxHgIH@HxHgkHu?]IHHxHg|rŅ蔡HPIYIHEHx'uh>'\D$H*^f(ÊEDffD$(H*ȋEhH*^ff.L$0]-'f(i'fTf.r?f.H= XL$8sDf.r>f.w f.='vDHT$(H}HT$0}}@HT$8}1fTf.rf.zt{f. ='z''fWf.D$@wQf.ztg)T$L$(L$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}t}at}}RH|$@HՑHMATUSHHpdH%(HD$h1HGLD$HHD$ gHh@HD$PHpHT$ LD$dH|$ H1I)HR:xHH|$ 1HJ3HH|$0}HT$0HgHH{Ht$@fHT$@HgHD$@ZHxHgHD$0HxHgHD$ HxHgLf.zHED$CPH|$@~kL裇H|$@虑 }HI褐LJ }HH腐fHZD$#H|$@)H{8&};uHCCPHlHD$hdH3%(Hp[]A\HCHH|$@}HHh@O\H{fHt$@HD$@ZHxHgf.L$KPHt$@D$ pD$ DHt$D$ PD$ MDHt$@D$ 0D$ CDHt$0D$ D$ _|HHD$ HxHgt Ht$@HDHHD$@HxHgtHt$0H|$@H薎HHD$0HxHgtHt$@HHD$@HxHgtHt$bHG0f.SHƠH0vH[f.SyHHHT$dH%(HD$1HL$dH3 %(u HH[{f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfЃAHtG~fDGPW^fffff.H~wLyswfSHHHtsHH[H˖SwLHH8&}uHCSLHt[萖fffff.SwTHH8&}諎uHCSTHt0[Pfffff.SwXHH8&}kuHCSXHt4[fffff.SHHH8&}'uHCHHt H[Ǖ@SHHH8&}uHCHHt H[臕@SHH8&}讍uHCHtH,[fD1[IfDSHH8&}nuHCHt ƀ[fUSHH0}HH@0H=PuH[]H@H[]SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$H諊HxufHD$dH3%(uH[f.PJHxfffff.SHHdH%(HD$1@HHtCHHxHgtЃAHtIPЅHt$HHufHD$dH3%(uH[f.PJH^wfffff.USHH8H&}H8dH%(HD$(1膋upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11H覇H|$\tH|$RtHD$(dH3%(uH8[]1vƒH|$HtH|$tH+f.USHH8H&}H8dH%(HD$(1薊upHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HH|$lsH|$bsHD$(dH3%(uH8[]1u֑H|$H-sH|$#sH;f.SHHHн~HdH%(HD$1HtvHrHHxHguPHHxHguLHC8HxHguKH{(rH{rHD$dH3%(u5H[Ht$@Ht$@Ht$vtfffff.SHH[{fffff.HHtnP~fff.UHAWAVAUATISHHHAEHHLJ`н~HLJpHLJxHGMHGHGgHGgH8dH%(HE1nI$DDHID$HHt@HUHPLs&}谉HUH`\~蛉HP58~|HP詆}HI贅L8LI7HV螅HPRHCHPHHL`4mH}LQHsHHHpALk8HpL{HpHxHg@HHxHg6HHxHg,HCHUH}HL`(yH{ =HAHHCpHHxHgHCH8H}HL`(PH{1HAHHCxHHxHgHCH8H}HL`tPH{1HAԈHHxHgcHCH8H}HL`(#PH{HAԉC\HHxHg HCH8H}HL`(OH{HAHC`HyHgH`C`C8~A8pH`00\~HI8h\~LIcLu\~H؂H`茂IH8H~L`(NHLAԉCdHHxHgRIH8H~L`(NHLAԉChHHxHgHCH`H0HL`iH8H }NNHsH0H HALHLwHHxHgH HxHgRH0HxHgHfH*Cp^t(~L,C`ADcDH<C@Ir1M Z(V(t DHI9uH&}LH@HC0LhHHEHHHEt@H@HKxS\s`LCpEPHEWHpAPChPCdPCDPdHpHKH0HxHDžpHDžxHCHCHSHMHEHEHx[kHpHxKkHEHx>kH@HxHgS@Hs0H}lHEHK HUHEHEHC HC(HS(HMHEHEHxjHEHxjHC HPHH}8~HRLd]vH}T4}HI_LLn}HBH}~HCHH}f8~LuH} F}HI~LL9n}H~H}~H`HǃCPCTCXHǃHxCLCHHgHPHxHgHEdH3%(QHe[A\A]A^A_]fDH}HC0l8~0kH}~Hs8HHV~}H}H}}Hu.Hu HuHuHu HuLHuHuHuC`HuHuHuHuHuuHugHuYPjIHHxHgt Hu/HHxHgH`HxHgt HOHPHxHgt HOHgHHxHgt H`HHxHgt H`HC8HxHgt H`nH{(5gH{,gLDsIHHxHgt Hu4H HxHgt HuH0HxHgHuH`IR{IHHxHgH}I${IHHxHgxIHHxHg[nIHHxHg;NIHHxHg.IHEHxeH@HxHgIIIHHxHgIHHxHgH}Iz~wLyVdIOHPIySIKIcI{IH}Iy"IHpHxHgHuAUAT&}USHH8HhdH%(HD$X1u{t!HD$XdH3%(Hh[]A\A]fHC{LHHD$gHhHD$@Hp苰HT$LD$TH|$H1I)HR_H|$ ~}1qHH|$ \~HT$ HgrnHH{Ht$0HT$0Hg1AHD$0HxHgHD$ HxHgHD$HxHgkDH<j1HI ((tA ADHH9uHHDCpAE1L1NjHC`ZYt1DSDHLHH<_S`9wH{HHtD]Lf1Ht$Ht$0Ht$0e-HHD$HxHgt Ht$0HnHHD$ HxHgtHt$0HHD$0HxHgtHt$rAUATUSHHhWTdH%(HD$X1D$9mOX1fȃ9~H|$@8~DeLmH|$@w }HIvDLEi~HIvfLZt$f(t$pH|$@v]@f= ' '\D$H*^f(JmE@ffD$(H*f.L$0\-,'f('fTf.r>f.H=XL$8sCf.r=f.w f. 'vCHT$(H}NfDHT$0}}4@HT$8}!1fTf.rf.zt{f.'z'`'fWf.D$@wQf.ztg)T$L$pL$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}st}t}}H|$@HmtHk bATUSHHpdH%(HD$h1HGLD$HHD$ gHh@HD$PHp蚫HT$ LD$dH|$ H1I)HRZHH|$ 1HJlHH|$0}HT$0HgiHH{Ht$@fHT$@HgHD$@ZHxHgHD$0HxHgHD$ HxHgLf.zHeD$CPH|$@8~kLCjH|$@9t }HIDsLe }HH%sfHZD$lH|$@rH{8&}tuHCCPH$HD$hdH3%(Hp[]A\HCHH|$@}HHh@>H{fHt$@HD$@ZHxHgf.L$KPHt$@D$ D$ DHt$D$ pD$ MDHt$@D$ PD$ CDHt$0D$ 0D$ _P_m{HHD$ HxHgt Ht$@HhHHD$@HxHgtHt$0H|$@H6qHHD$0HxHgtHt$@HHD$@HxHgtHt$HG0f.SHƠHXH[f.S(yHHHT$dH%(HD$1tHL$dH3 %(u HH[;^f.HV HHt$H HQHHV(HHPtB1fff.HVHHHVHHWtBÐfЃAHtG~fDGPWofffff.H~wLyZfSHHHt莱HH[HySwHHH8&}quHCSHHt[~yfffff.SwPHH8&}KquHCSPHt0[>yfffff.SwTHH8&} quHCSTHt4[xfffff.SHHH8&}puHCHHt H[x@SHHH8&}puHCHHt H[ux@SHH8&}NpuHCHtH,[fD1[7xfDSHH8&}puHCHt ƀ[xfUSHH_HH@0H=PuH[]H@H[]SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$HKmHxufHD$dH3%(uH[f.PJHZfffff.SHdH%(HD$1@HH8tCHHxHgtЃAHtIPЅHt$HlH8ufHD$dH3%(uH[f.PJHYfffff.USHH8H&}H8dH%(HD$(1&nupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HFjH|$VH|$VHD$(dH3%(uH8[]1/YuH|$HVH|$VHbf.USHH8H&}H8dH%(HD$(16mupHCHD$HCHHD$t@HC HtfHHBH$HC(HHD$t@H}HtIHL$E11HfH|$ VH|$VHD$(dH3%(uH8[]1?XtH|$HUH|$UHaf.SHHH~HdH%(HD$1HtYHtUHHxHguPHHxHguLHC8HxHguKH{(2UH{)UHD$dH3%(u5H[Ht$@Ht$@Ht$v?Wfffff.SHH[]fffff.UHAWAVAUATISHHHAEHHLJh~HLJxHGHGMHGHGgHGgHHdH%(HE1PI$DDHID$HHt@HUH`Lk&}slHUHp\~^lHP6x~x_HPli}HIwhLHLI7HVahHPhHCH`HHL`OH}Ls4HsHHHALk8HL]HHxHgHHxHgHHxHgHCHUH}HL`(f.H=XL$8sCf.r=f.w f.W'vCHT$(H}fDHT$0}}t@HT$8}a1fTf.rf.zt{f.'zй''fWf.D$@wQf.ztg)T$L$TL$f(T$fW^ZHD$XdH3%(uSHh[]A\A]fHT$@}}t}9t}}*H|$@HWH%O`EATUSHHpdH%(HD$h1HGHD$HHD$ gHh@HD$PHpڎHT$ LD$dH|$ H1I)HR>HH|$ 1HJPHH|$0}HT$0HgLHH{Ht$@fHT$@HgHD$@ZHxHgHD$0HxHgHD$ HxHg\f.zHeD$CLH|$@x~kHMH|$@yW }HIVL*I }HHeVfHZD$PH|$@ VH{8&}XuHCCLH%$HD$hdH3%(Hp[]A\HCHH|$@HHh@=H|$@}PKH{fHt$@HD$@ZHxHgf.L$KL@Ht$@D$ D$ DHt$D$ D$ =DHt$@D$ D$ 3DHt$0D$ D$ ^B^H|$@HTH&LHHD$@HxHgtHt$0wHHD$0HxHgt Ht$@THD$ HxHgtHt$@8HHHD$@HxHgtHt$f.@HG0f.SHƘH;H[f.SyHHHT$dH%(HD$1WHL$dH3 %(u HH[[Af.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWSfffff.H~wLy3=fSHHHtHH[H']SwLHH8&}TuHCSLHt([\fffff.SwTHH8&}kTuHCSTHt8[\fffff.SwXHH8&}+TuHCSXHt<[l\fffff.SHHH8&}SuHCHHt H[#\@SHHH8&}SuHCHHt H[[@SHH8&}nSuHCHtH,[fD1[[fDAUAT&}USHH8HdH%(HD$1SmkDH<B1HI -()(tA ADHH9ukDH<ZB1HI ((tALADHH9uH%=5XVKhHE1L;&C`tn1 f;k`s`SDHLHH< 8H5Xu‹SDHLHH<7;k`rH{HHHXL>L>HD$dH3%(H[]A\A]Ð5ID$Vf $KhE1HL>HD$5QKhf4$E1HLPSDHLH7H%=5X SDHLH6x<1YfSHH8&}PuHCHt ƀ[YfUSHH@HH@0H=PuH[]H@H[]S4HdH%(HD$1@HH2tCHHxHgtЃAHtIPЅHt$HMH2ufHD$dH3%(uH[f.PJH^;fffff.S2HdH%(HD$1@HH81tCHHxHgtЃAHtIPЅHt$HKMH81ufHD$dH3%(uH[f.PJH:fffff.SH6HdH%(HD$1@HH4tCHHxHgtЃAHtIPЅHt$HLH4ufHD$dH3%(uH[f.PJH9fffff.SHHH~HdH%(HD$1Ht`;HHtO;HC7HHxHguOHHxHguKHC8HxHguJH{(7H{6HD$dH3%(u4H[fHt$F@Ht$6@Ht$&9fffff.SHH[?fffff.HHt"PUfff.UHAWAVAUATISHHHAIHHLJP~HLJ`HLJhHLJpEHLJxHGgHGgLdH %(HM1q2HDDHHHAHHt@HUH0Lk&}NHUH@\~NHp=~AHpK}HIJI4$LHV JHpIHCH0HHH@I1Hp}LHsHHpH`AHC8H`HIv?H`HxHg# HpHxHg`HHxHgVHCHUH}HLh(LH{HHAHHChHHxHgHCH}LHLh(.H{1HAHHCpHHxHgHCH}LHLhH{1HAՈCxHHxHgHCH}LHLh(H{HAՉC\HHxHgYHCH|~LHLh(JH{1HAՉHHxHgHCH~LHLh(H{1HAՉHHxHgHCH}LHLh(H{HAHC`HyHg9H}C`R~=H}G@~HFH}F?~@jFHb,\H@H0kH 8GC@j:H8HCH(}LHLh(H{HAՉCdHHxHgHCH@H0HLh-H }L\HsH0H HALHL;HHxHgH HxHgzH0HxHg~fH*Ch^X(YX(BL,DkDDk`J<Dk@61M g(c(tD DHI9uDk@HJ<61M ((tD DHI9uHHCHUHPƃ> }HLh^HHUH@IyIHHsHPH@HPAH@HxHg HPHxHgHPHxPxHP85HP85&}LEHC0H`LDDD+H{xHEHHHEt@L`HCDAWAVAUARWH}K\Sds`W{HLKhLCpWH}PP6HEHKHPHUHEHEHCHCHSHMHEHEHxU.HEHxH.HEHx;.H`HxHgtHPHǃCPCTCXHǃHxCLCHHgLH@HxHgH0HxHgHEdH3%(QHe[A\A]A^A_]H}s~X/H}CHs8HHV/B}HBH}A  >YfH}C`L~8H}BB0~HAH}rA3x~@jA@j4BfHu~HP-8XNƃBHuHuHunHuxHuHutHuHuHuqHucHuUZHuGHu9Hu+HuHuHuC`7HuHuIHHxHgt HPHC8HxHgt HPH{($+H{+L37IHHxHgH@HxHgt H/HH0HxHgt H/(H*HHxHg*HPIH`HxHgt HuHpHxHgt HuHHxHg6Hu(IHHxHg IHHxHgIHHxHgIH0HxHg{IHHxHg[IHHxHgv;IHHxHgVIHEHx9)H`HxHgt HuHPHxHg HukIHHxHgIHHxHgt Hu&H HxHgHuIIH@HxHgt HuHPHxHg[ II%*IIHpI< II0IHH}Ifff.w HHt/P>HwHHHtηPz>HHt·P^>fff.SHH@HHGdH%(HD$1HC(HxHgu&H{HD$dH3%(uH[Ht$ fffff.SHwH[n'fffff.UHAWAVAUATASHHIEMHHHGHGHXH(dH %(HM1HXIEHA8IEDy0Dq4HHA@t@H}5~)H}3}HI2I4$LHV{2H}22HUH&}HDžpgHDžg5HHHLhH}LiHHHHAHH'HHxHgHHxHgHHxHgHHUH}Lh(75@HHAAHHxHgzHH~LLp(1HHA։PHHxHgBHH}LLpG1HHAAHHxHg HH~LLx@J'HHAHHHxHgHH~LLx@®(HHAH@HxHgHH ~LLx@bz(H HAH 8HxHgHH0#~LLx@2(H0HAH00HxHgmHUH}@~+3HHuH`Lx$HP}LH`HPHH@AH@Hp%H@HxHgHPHxHgH`HxHgfA*^!(D,H&}(0LXHpHpHIG>IG8EHEIG@HHEt@HcPHLEfS,(fH}fIcfZHZ0Z8Z@MXHXHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxHgmHX@ H@HH@HpH}j~L8$H}/. h~HH:-LH}H-H},HEHxHgoHHxHggHHxHg_HpHxHgWHEdH3%(He[A\A]A^A_]DHXH}d~H@yH}@-HHHVM,K~H;,H}+DHu_f.HuG/fHu77fHu'?fHuxfHufHufHu%fHuefHufHufHufHufHuPfHuwXfHugEfHuWfHuGo5xH}H*HEHxHgt H0HHxHgt HoHHxHgt HoHpHxHgt HLXI~@IF(HxHgt HHXHRHj!H}H)-HHHHHxHg%Hu+HHH`HxHgHuHHHxHgHHPHxHgtHuHHH HxHgZHH0HxHgd:HHEHx>HpHxHg>HH@HxHgQHuCH!H}H(PHHHxHgHHHxHgHHHxHgt HuHHxHg;Hu~-HHHHxHgJ HHHxHg*@HGf.SH(HH[f.@SXyHHHT$dH%(HD$1I+HL$dH3 %(u HH[f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPW&fffff.S`HdH%(HD$1@HHx^t+HHxHgtHt$HuHx^u@HD$dH3%(uH[ffff.SaHdH%(HD$1@HH8`t+HHxHgtHt$HH8`u@HD$dH3%(uH[]fff.H@wLyfHHtP(0fff.w HHtP0HwHHHt.P/HHt"P/fff.SHH@HHGdH%(HD$1'HC(HxHgu&H{ HD$dH3%(uH[Ht$?fffff.SHwH[fffff.UHAWAVAUATASHHIEMHHHGHGHXH(dH %(HM1 HXIEHA8IEDy0Dq4HHA@t@H}5 H}$}HI#I4$LHV#H}#HUH&}HDžpgHDžgG'HHHLh= H}LHHHHAHHHHxHgHHxHgHHxHgHHUH}Lh(&@HHAAHHxHgzHH~LLp(1HHA։PHHxHgBHH}LLp1HHAAHHxHg HH~LLx@RJ<'HHAHHHxHgHH~LLx@(HHAH@HxHgHH ~LLx@ʟ(H HAH 8HxHgHH0#~LLx@b(H0HAH00HxHgmHUH}@~{$HHuH`LxtHP}LH`HPHH@AH@HpRH@HxHgHPHxHgH`HxHgfA*^1(H&}(!LXHpHpHIGIG8EHEIG@HHEt@HcPHLEfS,(fH}fIcfZHZ0Z8Z@XHXHEZHUHEHKHCHCHEHSHMHEHEHx7 HEHx* HEHx HpHxHgmHX@ H@HH@HpH}j LH} h~HHLH }HmH}$HEHxHgoHHxHggHHxHg_HpHxHgWHEdH3%(He[A\A]A^A_]DHXH}d H@ H}HHHVK~HH}BDHu_f.HuG/fHu77fHu'?fHuxfHufHufHu%fHuefHufHufHufHufHuPfHuwXfHugEfHuWfHuG& H}HHEHxHgt H0HHxHgt HoHHxHgt HoHpHxHgt HLXI~@IF(HxHgt HHXHHH}H.-HHHHHxHg%Hu+HHH`HxHgHuHHHxHgHHPHxHgtHuHHH HxHgZHH0HxHgd:HHEHxHpHxHg>HH@HxHgQHuCH!H}HPHHHxHgHHHxHgHHHxHgt HuHHxHg;Hu~-HHHHxHgJ HHHxHg*@HGf.SH(HH[f.@SyHHHT$dH%(HD$1HL$dH3 %(u HH[Kf.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.S|HdH%(HD$1@HHxzt+HHxHgtHt$HuHxzu@HD$dH3%(uH[-ffff.S}HdH%(HD$1@HH8|t+HHxHgtHt$HH8|u@HD$dH3%(uH[fff.H@wLy#fHHt"P!fff.w HHtPo!HwHHHtNPN!HHtBP2!fff.SHH@HHGdH%(HD$1wHC(HxHgu&H{]HD$dH3%(uH[Ht$fffff.SHwH[ fffff.UHAWAVAUATASHHIEMHHHGHGHHH(dH %(HM1DHHIEHA8IEDy0Dq4HHA@t@H}6) H} }HI+I4$LHVH}HUH&}HDž`gHDžpgHHHLhH}L HHHHAHHpk HHxHgHHxHg HHxHgHHUH}Lh(@HHAAHHxHgHH~LLp(/1HHA։@HHxHgHH}LLp1HHAAHHxHg]HH~LLx@-'HHAH8HxHgHH~LLx@Rb(HHAH0HxHgHH ~LLx@(HHAH(HxHg HH #~LLx@Ґ(H HAH  HxHgHH0LLx(b H0HA׉H0HxHgHUH}@~HHuH`LxyHP}LH`HPHH@AH@H`WH@HxHgHPHxHgH`HxHgfA*^6(Hp&}LHHpH`HIGIG8EHEIG@HHEt@HcHc@LEfH},fIcffPSZ8Z Z(Z0nXHHHEZHUHEHKHCHCHEHSHMHEHEHx8HEHx+HEHxHpHxHgnHH@ H@HH@HH}iLH} h~HHLH}HnH}%HEHxHgpHHxHghHpHxHg`H`HxHgXHEdH3%(He[A\A]A^A_]fDHHH}eH@H}HpHHVK~HH}BDHuf.HufHufHufHu(fHu`fHufHufHufHuwfHugfHuWfHuGfHu73fHu';fHuCfHufHu%fHu`HH`HxHgHEHxHgt H0HHxHgt H_HpHxHgt H_`H`HxHgt Hp@LHI~@IF(HxHgt HHHHHHHEHxkHpHxHgHuHHHPHxHgHuH}H H;H`HHHxHgHuOHHH}HN HHHxHgnHHHxHgQHHHxHgt HuHHxHgGHu9HHH@HxHgHuHHHxHgHHHxHgHHHxHgHHHxHg`H}H -HH0HxHg/rHH HxHgRf.HGf.SH(HH[f.@SyHHHT$dH%(HD$1Y HL$dH3 %(u HH[ f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.H@!wLyfHHtPlfff.w HHto>PIHwHHHtnP(HHtbP fff.SHH@HHG)dH%(HD$17HC(HxHgu&H{HD$dH3%(uH[Ht$Offfff.SHwH[fffff.UHAWAVAUATASHHIEMHH)HGHGHHH(dH %(HM1HHIEHA8IEDy0Dq4HHA@t@H}9H}}HII4$LHVH}HUH&}HDž`gHDžpgW HHHLhMH}LHHHHAHHp+HHxHgHHxHg HHxHgHHUH}Lh( @HHAAHHxHgHH~LLp(1HHA։@HHxHgHH}LLp1HHAֈ?HHxHgZHHoLLp(_HHAAHHxHg"HH~LLp@'HHAH0HxHgHHvLLp@W(HHAH(HxHgHH ~LLp@w(H HAH  HxHgHH0 ~LLp@'/&H0HAH0HxHgHUH}@~@HHuH`Lp9HP}LH`HPHH@AH@H`H@HxHgHPHxHgH`HxHgfA*^c'YHp&}LHHpH`HIFSIF8D?HEIF@HHEt@Hc@f,fAWfSfLEZ(H}IcZZ Z0@5XHHHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxHgpHH@ H@HH@HH}oLKH}B h~HHMLH}H0H}HEHxHgrHHxHgjHpHxHgbH`HxHgZHEdH3%(He[A\A]A^A_]HHH}jH@H}PHpHHV]K~HKH}DHuf.HufHufHufHu(fHu`fHufHufHufHuwfHugfHuWfHuGfHu73fHu';fHuCfHufHu fHu`} HH`HxHgHEHxHgt H0HHxHgt H_HpHxHgt H_`H`HxHgt Hp@LHI@pIG(HxHgt HHHHCH[HHEHx+HpHxHgHuHHHPHxHgHuH}HhH;H`HHHxHgHuOHHH}HHHHxHgnHHHxHgQHHHxHgt HuHHxHgGHu9HHH@HxHgHuHHHxHgHHHxHgHHHxHgHHHxHg`H}H-HH0HxHg/rHH HxHgRf.HGf.SH(HcH[f.@SyHHHT$dH%(HD$1HL$dH3 %(u HH[f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.H?*tHf.H9>*ufH+wLysfHHtb:Pfff.w HHt[PHwHHHt7PHHt7Pfff.SHH@HHGP3dH%(HD$1HC(HxHgu&H{HD$dH3%(uH[Ht$fffff.SHwH[^fffff.UHAWAVAUATASHHIEMHHP3HGHGHhH(dH %(HM1HhIEHA8IEDy0Dq4HHA@t@H}7)yH}p}HI{I4$LHVkH}"HUH&}HDžgHDžgHHHLhH}LYHHHHAHHHHxHgcHHxHg[HHxHgSHHUH}Lh('@HHAAHHxHgHH~LLp(1HHA։`HHxHgHH}LLp71HHAAHHxHgHH~LLx@'HHAHXHxHgmHH ~LLx@t(H HAH PHxHg-HH0 ~LLx@RZ&H0HAH0HHxHgHUH}@~kHHuH`LxdHP}LH`HPHH@AH@HBH@HxHgzHPHxHgrH`HxHgjfA*^V'H&}@LhHpHHIG~IG8EHEIG@HHEt@Hc`HLEfS,@fH}fIcZXZHZP SXHhHEZHUHEHKHCHCHEHSHMHEHEHx3HEHx&HEHxHpHxHgiHh@ H@HH@H\H}f)LH}{ h~HHLH}HiH} HEHxHgHHxHgHHxHgHHxHgHEdH3%(He[A\A]A^A_]ÐHhH}a)H@H}HHHVK~HH}BDHuf.HuwfHugfHuWfHuGfHu7fHu'EfHufHufHufHuxfHufHufHuGfHuOfHuWfHu_7H}H LhI~@\IF(HxHgt H?HhH/HGHH@HxHgt HuHPHxHgt HuH`HxHgHEHxHgt H0HHxHgt HHHxHgt HuHHxHgHQHHEHx*ufH5wLyfHHtXPfff.w HHtyPHwHHHtnUPHHtbUPpfff.SHH@HHG=dH%(HD$1gHC(HxHgu&H{MHD$dH3%(uH[Ht$fffff.SHwH[fffff.UHAWAVAUATASHHIEMHH=HGHGHhH(dH %(HM14HhIEHA8IEDy0Dq4HHA@t@H}63H}}HII4$LHV H}HUH&}HDžgHDžgHHHLh}H}LHHHHAHH[HHxHgcHHxHg[HHxHgSHHUH}Lh(@HHAAHHxHgHH~LLp(1HHA։`HHxHgHH}LLp׵1HHAAHHxHgHH~LLx@蒵'HHAHXHxHgmHH ~LLx@BRg(H HAH PHxHg-HH0 ~LLx@&H0HAH0HHxHgHUH}@~ HHuH`LxHP}L耴H`HPHH@AH@HH@HxHgzHPHxHgrH`HxHgjfA*^H'$H&}@kLhHpHHIGIG8EHEIG@HHEt@Hc`HLEfS,@fH}fIcZXZHZPqXHhHEZHUHEHKHCHCHEHSHMHEHEHxHEHxHEHxHpHxHgiHh@ H@HH@H\H}e3L$H} h~HH&LHk}H H}HEHxHgHHxHgHHxHgHHxHgHEdH3%(He[A\A]A^A_]ÐHhH}a3H@iH}0HHHV=K~H+H}DHuf.HuwfHugfHuWfHuGfHu7fHu'EfHufHufHufHuxfHufHufHuGfHuOfHuWfHu_xH}HLhI~@IF(HxHgt H?HhHHHH@HxHgt HuHPHxHgt HuH`HxHgHEHxHgt H0HHxHgt HHHxHgt HuHHxHgHQHHEHxHpHxHgRHuDHHH,HHHxHgt HuHHxHgHuHqHHHH}HHHH0HxHgHHHxHgHHHxHgxbHHHxHgXBHHHxHg8"HHHxHgHuH}HHH HxHgf.@HGf.SH(HH[f.@S}HHHT$dH%(HD$1YHL$dH3 %(u HH[ f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.H?*tHf.H9>*ufH@wLyfHHtvPfff.w HHt韛PgHwHHHt>sPFHHt2sP*fff.SHH@HHGGdH%(HD$1HC(HxHgu&H{HD$dH3%(uH[Ht$fffff.SHwH[fffff.UHAWAVAUATASHHIEMHHGHGHGHXH(dH %(HM1HXIEHA8IEDy0Dq4HHA@t@H}5>H}}HII4$LHVH}bHUH&}HDžpgHDžg'HHHLhH}L虩HHHHAHHHHxHgHHxHgHHxHgHHUH}Lh(g@HHAAHHxHgjHH~LLp(迨1HHA։PHHxHg2HH}LLpw1HHAAHHxHgHH~LLx@2*&HHAHHHxHgHH~LLx@Y(HHAH@HxHg}HH ~LLx@蒧&H HAH 8HxHgHH0LLx(B H0HA׉4H0HxHgbHUH}@~`HHuH`LxYHP}LզH`HPHH@AH@Hp7H@HxHgHPHxHgH`HxHgfA*^;'yH&}(LXHpHpHIGsIG8EHEIG@HHEt@Hc4HcPLEfH},(fIcfPSZHZ8Z@ڒXHXHEZHUHEHKHCHCHEHSHMHEHEHx$HEHxHEHx HpHxHgjHX@ H@HH@HmH}g>LuH}l h~HHwLH}HZH}HEHxHglHHxHgdHHxHg\HpHxHgTHEdH3%(He[A\A]A^A_]fHXH}b>H@H}HHHVK~H{H}2DHu?f.Hu'?fHuGfHuOfHufHufHufHu5fHuufHufHufHufHuwfHug[fHuWcfHuGUfHu7fHu'KH}HHEHxHgt H0HHxHgt HoHHxHgt HoHpHxHgt HLXI~@IF(HxHgt HbHXHHH}H-HHHHHxHg%Hu HHH`HxHgHuHHHxHgHHPHxHgtHuHHH HxHgZHH0HxHgd:HHEHx~HpHxHg>HH@HxHgQHuCH!H}HPHHHxHgHHHxHgHHHxHgt HuHHxHg;Hu^-HHHHxHgJ HHHxHg*@HGf.SH(HӺH[f.@S0yHHHT$dH%(HD$1HL$dH3 %(u HH[;f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.SĴHdH%(HD$1@HH´t+HHxHgtHt$HuH´u@HD$dH3%(uH[ffff.SHƴHdH%(HD$1@HHĴt+HHxHgtHt$HHĴu@HD$dH3%(uH[蝾ffff.SȴHdH%(HD$1@HHxƴt+HHxHgtHt$HuHxƴu@HD$dH3%(uH[fff.HHtRPfff.w HHtPHwHHHt鮙PzHHt颙P^fff.SHH@HHGPUdH%(HD$1HC(HxHgu&H{HD$dH3%(uH[Ht$Vfffff.SHwH[fffff.UHAWAVAUATASHHIEMHHPUHGHGH8H(dH %(HM1ԶH8IEHA8IEDy0Dq4HHA@t@H}6pHH}}HII4$LHVH}bHUHp&}HDžPgHDž`g'HHpHLhH}L虚HHHHAHH`HHxHgcHHxHg[HHxHgSHHUH}Lh(gHHAAHHxHgHH~LLp(这1HHA։0HHxHgHH}LLpw1HHAֈ/HHxHgHH~LLp@/(HHAH HxHgjHH~LLp@ߘJ(HHAHHxHg*HHHHLLp@菘g(HHAHHxHgJHHXHLLp@?(HHAHHxHg HH hHLLp(H HAAH HxHgHH0 ~LLp@觗u&H0HAH0HxHgHUH}@~HHuH`Lp蹲HP}L5H`HPHH@AH@HPH@HxHgHPHxHgH`HxHgfA*^f+'H`&}  L8HpHPHIFӱIF8D/HEIF@HHEt@Hc0f,fAWfSfLEZ fH}ZIcZZZXH8HEZHUHEHKHCHCHEHSHMHEHEHxnHEHxaHEHxTHpHxHglH8@ H@HH@HH}opHL迿H} h~HHLH}HH}[HEHxHgfHpHxHg^H`HxHgVHPHxHgNHEdH3%(He[A\A]A^A_]@H8H}kpHH@H}H`HHVK~HH}zDHuWfHuGfHu7fHu'fHufHufHuHfHufHufHufHufHufHufHuKfHuwSfHugfHuWfHuG fHu7`fHu'HHHxHgHpHxHgt HOH`HxHgt HOHPHxHgt H`L8I@IG(HxHgt HppH8HаHHHHxHg@Hu42HHHxHgHHHxHgHHHxHgH}HHEHxHgH0H}HHHH0HxHgx3HHHxHgXH|HH HxHg0HHHxHgHHH}HJHHEHxGHpHxHgHuHH@HxHgt HuHPHxHgt HutH`HxHgHHHHxHgHu1HHHxHgHHHxHgtHuHnHjf.HGf.SH(HêH[f.@S}HHHT$dH%(HD$1yHL$dH3 %(u HH[+f.fffff.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.H?*t2Hf.H9>*ufHXwLyӫfHHt2Pfff.w HHtPHwHHHtPHHtPfff.SHH@HHGP^dH%(HD$1'HC(HxHgu&H{ HD$dH3%(uH[Ht$?fffff.SHwH[龴fffff.UHAWAVAUATASHHIEMHHP^HGHGHhH(dH %(HM1HhIEHA8IEDy0Dq4HHA@t@H}5UٶH}}HIۿI4$LHV˿H}肿HUH&}HDžgHDžgGHHHLh=H}L蹋HHHHAHHHHxHgcHHxHg[HHxHgSHHUH}Lh(@HHAAHHxHgHH~LLp(ߊ1HHA։`HHxHgHH}LLp藊1HHAAHHxHgHH~LLx@RJ&HHAHXHxHgmHH ~LLx@<(H HAH PHxHg-HH0 ~LLx@貉g&H0HAH0HHxHgHUH}@~HHuH`LxĤHP}L@H`HPHH@AH@H袲H@HxHgzHPHxHgrH`HxHgjfA*^&H&}@+LhHpHHIGޣIG8EHEIG@HHEt@Hc`HLEfS,@fH}fIcZXZHZPiXHhHEZHUHEHKHCHCHEHSHMHEHEHx蓦HEHx膦HEHxyHpHxHgiHh@ H@HH@H\H}cULH}ۻ h~HHLH+}HɺH}耺HEHxHgHHxHgHHxHgHHxHgHEdH3%(He[A\A]A^A_]ÐHhH}_UH@)H}HHHVK~HH}袹DHuf.HuwfHugfHuWfHuGfHu7fHu'EfHufHufHufHuxfHufHufHuGfHuOfHuWfHu_8H}HlLhI~@輣IF(HxHgt H?HhH菣H觯HH@HxHgt HuHPHxHgt HuH`HxHgHEHxHgt H0HHxHgt HHHxHgt HuHHxHgHQHHEHx蜢HpHxHgRHuDHHH,HHHxHgt HuHHxHgHuHqHHHH}H菶HHH0HxHgHHHxHgHHHxHgxbHHHxHgXBHHHxHg8"HHHxHgHuH}H賵HH HxHgf.@HGf.SH(HcH[f.@SUHHHT$dH%(HD$1HL$dH3 %(u HH[ˢf.ЃAHtG~fDGPWfffff.HcwLyfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUSHHHkdH%(HD$1Xt21fHPH< 9XwHPHtRH`HښHpHtHPHhHtHPLHHHxHgHHǃrHǃ@rHǃZH0讦HHǃq跳H8[H9[HH@IHǃt蚫H^H(HxHguZHHD$dH3%(uaH[]A\fH踝HHLHxw 薵Ht$@Ht$v,fff.SHH[鮦fffff.AWAVMAUATD,USH1MHx$H|$PT$D$L$ 1L$D$$D$H$DHD$dH%(HD$h1BH|$@D+HT$.H|$0^臵HL$PHT$@Ht$0H HD$0HxHgzH|$HL蹜H|$X诜HkHǃ(gLHǃHǃ诜ID$I$HǃgHǃHƃǃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$X$8$LL$ǃ@ǃǃǃXD$Dǃ ǃ4ǃ<D$ ǃǃǃ0D$辡DHH|H`蠡DHH^H(轙DHH«Hh(葙D1HH虫D$Ht$HHpHD$hdH3%(HǃxHǃHǃPu$Hx[]A\A]A^A_fDHt$/w蜜IHL.HHxHgt Ht$PLHH(HxHgt Ht$P~H薩HHHHHD$0HxHgt Ht$/CH|$H虙H|$X菙H觥HHffff.UHAWAVAUATMSMHxE pdH%(H]1ۉtHxhHE(lDe0Hu8HH@HHUHEt@LmL蘕讗HhEAUATLelpMATtMPEHPEP LxH0HEIIFEIVH}@@ HmHXIFHUWH{HtGugHxH]H@HHELmH{@HEL9HHCt"MtAE HtG tyLkHEHxHEHxHgu/I|$ŗHudH34%(HxuVHe[A\A]A^A_]Hu7DHH[tE1HHPHcNuPoh贙IHLFHEHxHgt HuI|$"H:HLeHiHHP{HLeH躥HxHږSHHhDHxHbHhHhDH`[HpH[@AUATUSHfHHxfH@H@H@ 0LJLJ*4H*^(H,XHbXHP1fHPAN,MDHH IE4HfDf+0H*HH)HPH*J<9XwH[]A\A]f.SH dH%(HD$1t`uHD$dH3%(H [fH0`H豪`H迩HwDHxH@H@H@ LJ@LJLJLJXߖHHH茠fff.AWAVAUATUSHHdH%(H$1t$,D$8HU<Ll$P|0`L謟L褩`H藝LoHxL}0`D`D0nLfyHYHt$@HDt$@bH5DHLL~0`LH L_HLH蹚LL0`d$L蹨_H謜fHZD$jLr Lﺀ0`l$rLj_H]fHZD$L#HxLﺁ0`X\$L_H D$H̠LԦHxLﺂ0`pt$НLȧ_H軛D$H}L腦Lﺃ0`|$腝L}_HpfHZD$.L6Lﺄ0`d$6L.`H!fHZD$ߟLHEǃHƃ0DHHȝHHt$8D$8/H$dH3 %(D$, H[]A\A]A^A_fLl$Pc0`LyLq_HdLDH`H&H|$6Dd$6HH,Ht$HÓ&_HHH諓7_HΕfHZD$(茚E_H试t$HsU_H薕t$HZLbDHL[DHH[DfH*HX^\$ H$1(HD$ Yd$f.9XDHPD4LHHhDD+0Hx[Hh,HhDH`HpHpHxs[HpHpDHHpш[DHH|$<[L$Ht$@H|$ HVۘ1$H$tHNHD$`1HxcHD$@HxHgHxHpHD8HD$`Ht$f_HxL$( HD$7H|$pD|$7HCHHt$H贒_H角t$(Hk_H莒DH裋HvHD$`LHpLHt$PLLHLHHx1HD$PHxHgHpHT$LHp)LчH(H$HD$`HDŽ$薲HD$pHD$xPeHxHgHH$HD$xqH[H[H$H@HT`H[H[HD$pH@HTpH][H^[HD$`H@HT`HDŽ$t藔9X:u2. <9@uǃ<9@tH赓HLHxw 臞fHxw qe@L`^Ht$@NXfL8. Oǃ]HHD$PHxHgt Ht$@H|$`ƃH^HHD$@HxHgtLHHL诚H'^f.@f.@f.f.@1f.1f.{f.Hk@SHHkH[GAVAULATUISHHMHuef.HEH9C vH[HtH{ H葖tIH[HuM9t'It$ Hot []A\A]A^fID$ H9Ev[I8H]A\A]A^ATUISHHH+HHGHGHHHueHHHCHkM$I$I9t0HH@Hɋ2t1HHI9uHI)IIDHCH[]A\fDH?H9w H虂袀fH ^@j蘘1HÐH ^@jx1HÐH^@jX1HÐUSH@HHuHxH@8byHmHH}HkHCpbyHH{tHH@H=dNuCG@HE @V`jHHmHCPmHC8mHC HE(HC(E0C0PHHHHkCH۔HÎHfLIz@SH_Ht&HHH@H=VuH[VfD[fD[DATUHSH_HIH&H9Ht(Hp L貓tH[]A\fDHE I9$vH[]A\f.@SHHH H9[SHHlHGpbyHԆHkH[$@HSHHG8mHlHGpbyH茆HkH[܆fff.Hf.LIzSHHlHGpbyH4HHk腆H[fff.Hf.SHHG8mHlHGpbyH܅HHk-H[锉@Hf.LIzUSH@HHdH%(HD$81HuH|$HH$m|Ht$H{HD$HD$ HD$(D$0H$lHD$lHC8byHm|H|$HkHCpbyHH{tHH@H=dNu\G@HD$ Ht$H{HmHCPmHC8mHC HD$(HC(D$0C0բH@V`jHۊHH'HHk΄HvH^HFH{HH H{H@f.@USH@H}HuHxH@8byHmH^{H}HkHCpbyHH{tHH@H=dNuSG@HE HuH{HC HE(HC(E0HmHCPmHC8mC0赡HHXHH[]@H H$H)HkH讃HH.HzH蹉HvH)褉HH H-؈H AWAVIAUATUSHHHhdH%(HD$X1HH>HL`H|$@tIVLl$@H{Lc L^I9AH|$@HthzELeMtL讂L{ H{(LL[I9HtHp Lu,HE I9v#H{LD$HL$(iHLt$jHHE(HHMHXLd$ tL0H}0Ht$ H|$ HtyMtLyHD$XdH3%(u/Hh[]A\A]A^A_f.Ll$@HLAAzHT$H|$0^Ht$0LtHD$0HxHguLHD$@kHHt$ H&LHD$@k}MtLxH%HD$0HxHgtHt$ HH HHH|$ HtxH|$@Htx뤐AWAVAUATIUSHHHoHHHWHH)HHH)HvS1vHEHC0A$HtHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9H<uHIHs(L)HL4HCHHPH)HHHH;L;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLIu뛽BfDLtkHUIH)HHH`LH)LtMrf.USHHHxdH%(HD$h1HGPHD$H$HK@HC0HQH9HUtHHC0H<$H|$kHkxD$H*wufH节Hu|$uHD$hdH3%(uDHx[]@H<$DHH5hcPhyzys"wH|$ky.uH|$HD$y HcH|$@jyuH|$@HD$@yߒHb`bhyyyQsbPhyyy8sHH|$HD$0dy`p|$t H<$ H(H|$@HD$@0dy5pЃAHtG~fDGPW~fffff.H?*tƒHf.H9>*ufHqwLycrfATIUHSHHt#H{ H߄uHEH9C vH[HuL[]A\IH[ǐfDAWAVnAUATUSHfH@HdH%(H$1D$LHDl$ L,HD$,H*HH ы0LJLJ@4$HL$D$HxH|$@hD0(Y\$}H|$@_H{DHy`H{Ht$*HDt$*͆H{Hfy&_H{LHNy7_Hq{fHZD$ /E_HR{4$HyU_H:{t$HxH|$@DHLo[DHH4[DfH*HX^\$H$1(HD$Yd$@9XsDHPD4LHHhDD+0HxPs[HhnHhDH`HpHpHxs[HpnHpDHHpyn[DHH|$,Ao[L$,HH^D$.v`^.w u>1fHxH*HD$HA IfA*IH|$PkDHT$)H|$0ԨHH$Ht$0H|$HV~1$H$tHNHD$P1Hx{HD$0HxHgXHxf_HLpD8HD$PHxL$ xHt$+HD|$+訃CH{xLHpx_Hcxt$ H'v_HJxDH_qH2xHD$PH|$@HpvLHt$@LL迂HLH<Hx1HD$@HxHgkHpH$LHptLmH H$HD$PHDŽ$薲HD$`HD$hPeHxHgH$HD$hq誂H|$P[yH$HDŽ$tz9X.$<9@H$dH3%(ƃH[]A\A]A^A_fHxw 聄@HLHxw _f.Ht$@Ht$0Ht$@<9@L.$wǃ,ǃH|$@HҀHJxnHHD$@HxHgt Ht$0H|$P|iHxHHD$0HxHgtHt$@Hfffff.ATUSHHXHzdH%(HD$1t21fHPH<g9XwHPHtbo<1t#fDHHeHt$+HD|$+GpHeDHbLoLﺧnLHfLp_HdLHbLoLﺨn $fLp_HdfHZ$QiLYo$Lﺩn$ZfLRp_HEdfHZ$iL oHxLﺪnX$ fLp_Hc$HhLnHxLﺫn`$$eLo_Hc$HjhLrnLﺬn,$seLko_H^cfHZ$hL%nLﺭn4$&eLo`HcfHZ$gLmHEǃƃD$,DHHfDtiHxH@H@H@ HLJ@LJLJLJLJHLJHE0DHHKD<D9r>H DHH9@su 52fDHA)IDt$`D4$2A94$t$ tHHE1HL$HHL$ $DiIII7HDHDJ46HE1E1 fDHpTLAIHJHHcHD9HH9;H<E1E1JHxHP(P(DLffTT$ A<\$H*H<*Y [(^L$*J1HL$\$T$ tTHH9uHxTT$f\$AJ*HxJ<(ID9H\$T$*H[]A\A]Ë@D8<Rfff.AWAVAUATUSHHdH%(H$1HfHp1E1E1t$fH4؋TH|$#<[Hpt$H .D$vB,LcAl$SH9HfI*̋TfD$fH*H‹LH*HA<YY^f*YY^Jf*HXHB Ju6H$dH3%(Z H[]A\A]A^A_fH|$@RTHT$H|$ ԨHZHt$ HD$@Hx`HVP1$H$tHNHD$@1Hx$MHD$ HxHgPHf_xD`LpD8HD$@|$HxJHt$HD|$UCHJLH~J_HqJDH6H_HYJD$HOH>JHD$@H|$0HpHLHt$0LLTHLHGHx1WHD$0HxHgXHpHLJ4FL?HH$HD$@HDŽ$薲HD$PHD$XPeHxHgH$HD$XqTH[g[H|g[H$H@HT@HTg[HUg[HD$PH@HTPH(g[H)g[HD$@H@HT@HDŽ$tbLOfE1f|$HLHxw VHxw VHt$0Ht$0Ht$ AHH|$@[HK:HTHhHpHHx>[H:HTLHp9[HpTLJ< IH9[D9HNL7HL$8dH3 %(Tu$HH[]A\A]A^A_H|$ HOH\G=fDATUHSHpH|$dH%(HD$h1\HHXH$D$<\Hs[H DHH@Ht;X ~H@HuH;Z HB(HHD$HB0HD$HB8HD$ HB@HD$(HBHHD$0HBPHD$8HBXHD$@HB`HD$HHBhHD$PHBpHD$XHBxHD$`Z|$t H<$5ZL$0&D$ f.f(Hƅ\º0|Xʿ@j,D,ቝ<D8hN@jDAHž{HNHDt<HžH_NHU<Hþ}H@NHH@HH}8tBuCHfBH>@HD$hdH3%(Hp[]A\Ðf(XH?HE H@0H=PtHfHhY|$u>HƅP|@jX|M@j @HNUH<$X:;|$Ht H<$kXHsDfAWAVAUATAUSHHHdH%(HD$81I$ň|Hl$ {HCHM_HAHtLHHﺾ{HD8L$pCHhM yHIsLHt$LD|$\LH/At$H>HKHﺿ{LXCHL _HILLL>HKH{L$BHL_H@fHZD$[EHcK(H{T$cBH[L_HN@fHZD$ EHKHH{X\$BHL_H?D$HDHJHH{`d$AHK_H?D$HnDHvJH{l$vAHnK`Ha?fHZD$DH'JƃD$ HH虿HIEHHcHXHAǃHL$8dH3 %(D8HH[]A\A]A^A_Hl$ {H@HJ`H>H|IHH{HD8L$x@HpJ yHI{IHt$LD|$dIH7>t$H;HIH{LX @HJ_H=LH;HHH{t$?HI_HIHfLZD$cBHkH(H{|$k?HcI_HV=fHZD$BHHHH{X\$?HI_H=D$HAHGHH{`d$>HH_H<D$HvAH~GH{L$~>HvH`Hi  HHIEHHcHXH>ǃHHQ;| ǃHcHXHs>fDH`HZ.(v;ǃ@3fDLJftǃHP|@jƃh:Hlj8H~FǃJ3HHEH1fffff.ATUSHHHБHXdH%(HD$1#H`#Hh#HHtHPHHtHPLHHHHxHgHHǃrHǃ@rHǃ'H0V/HHǃq_Ht$vHt$f(fffff.SH7H[^/fffff.SHHLHxH"Hv$HLH`[HpH[@HfH@ @@LJLJfffff.@LJ~TL1LFL fDt#HpHJDHH9uHL9ufDAUATHUSIHHc@H9"H<E11w+IxA@=(}=(ADffALT$ A<\$I*H<*Y ;(^L$*1HL$\$T$ tTHH9uIxALT$f\$J"IxJ< I諂A9@\$T$"H[]A\A]3fAUATUSHfH8+<D1)Й*!,H@HcH9wsH*@Hp~GHE1E1 Hp)LHLAIH<&D9@HHH[]A\A]3AWAVAUATUSHHdH%(H$1@fHp1E1E1l$fH4؋LH|$,![Hpt$,H .D$v D$ALcSH9@LfffH**Qf.ZYYD$YԋDH^A<fZI*^ZJf*HPHB Ju0H$dH3%(ZH[]A\A]A^A_H|$P2LHT$+H|$0ԨH#:Ht$0HD$PHx`HV01$H$tHNHD$P1HxD-HD$0HxHgOHf_pD`LpD8HD$Pt$Hx*Ht$+HD|$+5CH*LH*_H*DHV(_Hy*D$H;/H^*HD$PH|$@Hp(LHt$@LL4HLHFHx17HD$@HxHgWHpHLJ4'LHH$HD$PHDŽ$薲HD$`HD$hPeHxHgH$HD$hq4H{G[HG[H$H@HTPHtG[HuG[HD$`H@HT`HHG[HIG[HD$PH@HTPHDŽ$t,UfE1E1|$HLHxw 6Hxw 6Ht$@Ht$@Ht$0d$L$%d$f(L$OHH|$PH*HHD$@HxHgtHt$0WHHD$0HxHgtHt$@6 fffff.SHHLHhdH%(HD$1HH0D$O[LHhH|$B[LfD$H*HD$dH3%(^uH[ f.AWAVAUATUSHHH8LPdH%(HD$81H(D0L$L$ H(DD$HH|$ D`D8(H|$ 2_H&DH$`H&H|$D|$HH1H&DHe$&_H&LHM$7_Hp&fHZD$ .+E_HQ&t$HeU_H8&t$HLH|$ E1E10"LHHIƋ@@HxLHAJ HHx[HKHLH`HpHHx[HHLLHp[HpLLJ< IH[D9@NLHL$8dH3 %(Lu$HH[]A\A]A^A_H|$ H/H\'fDUHAWAVAUATISHHL(HudH%(HE1HI+I}Lc1JD!A$LHHII$A$1LpwI$,pA$LHELI}HH0[L J HHHMIHIun[LH}E8[HM1HAHH)HHeLE҉f1ff*I*$%ZZYYfDff*ZY^ZA$H9<(WYi<(ffHcЃf*YZ^ZA,uӋEf4&AZI$f(\HfTf( &uf.@IELPLwLoH]dH3%(A$L#He[A\A]A^A_]DA$LHHAA)IIK4H9I9HIMHL)I9eIM)M9}s@MK<~D1DA AADTAT DHL9uMHIHrMI)LIM)M9|I4JII)M~FL1DHHHL9GVWFuHMHIHIufH}}0 #H}-H EH%H}+H}~0"H},ЇH H}+HL@HHHP@RPJBH9u4H}H;+H"HLH"AWAVAUATAUSHHHdH%(HD$81I$HHl$ 0H!H+_HH*HH0DhD8!H+ yHI*Ht$LD|$*HRDHH*H0LP&!H+_HLHH)H0L$ H*_HfHZD$#H)(H0T$ H*_HzfHZD$8#H@)HH0X\$< H4*_H'D$H"H(HH0`d$H)_HD$H"H(H0l$H)`HfHZD$K"HS(HƃHD$ ŝǃLHHPH HL$8dH3 %(DHH[]A\A]A^A_f.Hl$ 0HH(`HH'HH0DhD0H(yHHt$HDt$'HrDH7H?'H0LPFH>(_H1LHH&H0t$H'_HfHZD$ H&(H0|$H'_HfHZD$X H`&HH0X\$\HT'_HGD$H H&HH0`d$ H'_HI&D$LH%H0L$H&`HfHZD$cHk%HƃHD$ ݚǃfDǃH;ǃfDHHZ1.(DqfHl$ I־0HH%HHY$ILHߋyǃf.LJHH$Hff.@1f.1f. f.SH_Ht&HHH@H=PIWuH[fD[fD[DЃAHtG~fDGPWN#fffff.HwLyc fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUSHHHdH%(HD$1`tT1fHXAJHH@H@H@ DLJ<LJLJLJ@`OL1LFL Dt#HpHJDHH9uHL9uHHxH +f.AWAVAUATUSHHdH%(H$1t$,D$8NHU<Ll$PL L`H LHLﺝD`D0 LyH Ht$@HDt$@H DHZLbLﺞLPi La_HT LHL!LﺟL$! L_H fHZD$L$Lﺠd$ L_H fHZD${LHLﺡhl$ Lw_Hj D$H,L4HLﺢX\$0 L(_H D$H LLﺣl$ L_HfHZD$ LLﺤt$ L`HfHZD$? LGHEǃHƃ0LHP( HHt$8D$8菈H$dH3 %(D$,= H[]A\A]A^A_fLl$PL L_HLHLﺄD`D0 LyHHt$<HDt$<HbDH'L/LﺅLP6 L._H!LHLLﺆt$L_HfHZD$ L$Lﺇ|$L_HfHZD$H LPHLﺈ`d$LLD_H7D$H LHLﺉhl$L_HD$H LLﺊt$L_HfHZD$[ LcLﺋ|$cL[`HNfHZD$ LHEǃHƃ0LHPHHt$8D$8\HH@H@H@ DLJ<LJLJLJ@`LtH1H4GLt#HpHJ DHH9uHH9uǃHE0HPHfLfH0Ll$PD$<$Dl$H*L04HP<LJLJT$(D$HHPLpD t$ (Y\$KLC_H6DH`HH|$6Dd$6HH$Ht$ H&_HHH7_HfHZD$E_Ht$(HkU_Ht$HRLZ LHLZLHH[LfH*H`^\$H$1(HD$ Yd$f9`LHXAD4LJHxDD+0HxZHx+HxLHhHpHHxrZHHLHHpZD$HY:&LH^(ZHpLHJHHtHPHHtHPHnH bH(VH@HtELHH HxHgHHǃrHǃ@rHǃHHPHǃqHgZHhZHH@IHǃtHHpHxHguYH1HD$dH3%(u`H[]A\HHHLHxw Ht$@Ht$\fff.SHH[fffff.AWAVAAUATD,USH11HxMϋ$H|$PL$D$DD$ L$D$$D$H$DHD$dH%(HD$h1qH|$@DZHT$.H|$0HL$PHT$@Ht$0HOHD$0HxHgH|$HLH|$XHHǃpgLHǃHǃID$I$Hǃ gHǃƃǃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$X1H$1LXǃǃǃHP$ǃD`$dD$D$ xD$$AHHHdHHHHHH0HH HuHcdH(HH9H<G1H  ( (t DHH9uH(kHHpH(?1HHGD$Ht$H HHǃHǃ8H<{1H N (J (t@ DHH9uH@ǃHHD$hdH3%(ǃhǃlǃ|HǃHǃHǃǃǃǃHǃǃHx[]A\A]A^A_Ht$/ >HH(HpHxHgt Ht$PHHHHD$0HxHgt Ht$/H|$HH|$XHHHIHLH HxHgt Ht$PTLlC@Hff.UHAWAVAUATESMHxE(pdH%(H]1ۉtHxhHE0lDe8Hu@HH@HHUHEt@LmL(HhHEAUlATLeptMEATPHߋE PEPuLxH@HEIIF.IVH}@@ HPHXIFHU@H{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG ~LkHEHxHEHxHgu4I|$HudH34%(Hxu[He[A\A]A^A_]DHuGDHH[tE1vHHPHcNuPjcIHL&HEHxHgt HuI|$HHLeHIHHP[HLeHHxHATUHSHcdIH1H=HH@HxHt7fHHP)HI4ILFL>H1HLL LHL~~1E1H(LH $D$LDHoѨHfHZ$QLAHQD9HLh,$EL=_H0$HLHLx<$L_H$HLL,$LըHfHZ$YLaL4$bLZ`HMfHZ$ LIEDžHƅ0`HHHt$XD$XUItQHH@H@H@ LJLJLJLJLJIEH0`HIOHD$\L|$pHHD$dHHIHHHD$@HcdHHwHD$0HcdHHZIƋD`fDdH*LHxDžDžDžDžHLD|DHDT$8l<$JLL$l$ DL$(DT$KD\$L(Y|$ L_Ht$LH`HDT$KHt$VHDT$VHt$(H`xHHvH<&_H_LH$7_HGfHZD$ E_H(t$8HU_Ht$HH4$HLdHHt$LZdHHZdfH*^t$ L$$(Yl$8fH<1H ''tfD DHH9uHH8H1HzHƷ<$|dH+xHt$D$ LHZ~AHHPItCHI|9HθHHHpHHxZH虸HH0HpsZH|$\H0;ZT$\H0H8H^D$8tD$D$. ^.w D$\1 ''dH$fH@L9uH 1H@HЉF9dL|$IHl$0E1Ld$ MBHcHHIcIt蝵HAdILZAd~NVLH LHX܀܀@H9X܄܄uAAT$I9~ I RLLd$ L|$H(H$~ZH(H|$\FZL$\H fHH*HHP @f*D$ @^uH$$9-.l[Dž@H$VHT$UH|$`ԨHHD$Ht$`H$Hx`HVi1$H$tHNH$1HxHD$`HxHgHxHpH$Ht$(f_|$ HxxHL$WHLj\$WHCHRHt$(HE_H8t$ H_Ht$ H3HH$LHp蒾HHt$pHyHD$pHxHgu_H0HT$HH臵HtH$ULHHHxw JHt$`n땋9t6L&H|$@H|$0L H .lDž9uHLH-HHD$`HxHgtLH$SHHHD$pHxHgtHt$`|H|wrmh^YTOJE@;6fDf.@1f.1f.f.SH_Ht&HHH@H=МWuH[fD[fD[DЃAHtG~fDGPW^fffff.HwLysfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUSHHHdH%(HD$1Xt21fHPH<{9XwHPHt¶H`VHhJH>HxHtHPHpHtHPLHHHxHgHHǃrHǃ@rHǃ辱H0HHǃqHZHZHH@IHǃtH±H(HxHgu^HfHD$dH3%(ueH[]A\DH HHLHxw fHt$v@Ht$f茳fff.SHH[fffff.AWAVMAUATAUSH1҉MHx$H|$PL$L$D$ H$HD$dH%(HD$h11$D$譵D$H|$@蓵HT$.H|$0HL$PHT$@Ht$0H舱HD$0HxHgH|$H(H|$XHHHǃ(gHǃHǃHHD$ID$I$HǃgHǃHƃǃHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$Xe$8$LL$D<ǃ@ǃǃD$DǃX0kDHH)H`MDHH Hh/DHHH(LDHHQHp( D1HH(D$ Ht$HHxuHD$hdH3%(ǃ ǃ$ǃ4HǃPHǃǃǃǃHǃǃu%Hx[]A\A]A^A_Ht$/WIHLvHHxHgt Ht$PH|$>HBH(HxHgt Ht$PTHܼH4HHHHD$0HxHgt Ht$/H|$H߬H|$XլHHHUHAWAVAUATMSMHxHE pdH%(H]1ۉtHxHH@lDe(Hu0HHUHEt@LmLHHEEAUMATLelptMATPHߋEP LxH0HEIIF袪IVH}@@ HPHXIFHU贫H{HtGugHxH]H@HHELmH{@HEL9HHCt"MtAE HtG t~LkHEHx=HEHxHgu4I|$"HudH34%(Hxu[He[A\A]A^A_]DHuDHH[tE1zHHPHcNuPjc IHL螳HEHxHgt HuI|$zH蒶HLeHHHPӹHLeHHxH2USHHHHpDHxH躦HpNHpDH`HpZHcHpD$D$ ~D$HHHt=Hx6ZHpHpDHhHpHZH[]fAUATUSHHH0H@H@H@ LJLJLJX94 W9~XHFXHPt}1HPAN,=DHHIE4fDf+0H*HHH*HPJ<9XwH[]A\A]1[fDSH dH%(HD$1t`uHD$dH3%(H [fH٩H衽`H诼HgDHH@H@H@ LJ@LJLJLJXϩHHH|fff.AWAVAUATUSHHdH%(H$1t$,D$4HU<Ll$PL蜲L蔼`H臰L_HLﺊD`D0^LVyHIHt$@HDt$@RH%DHLLﺋLHL_HLH詭L豺Lﺌd$豱L詻_H蜯fHZD$ZLb$Lﺍl$bLZ_HMfHZD$ LHLﺎX\$L_HD$H輳LĹHLﺏpt$L踺_H諮D$HmLuLﺐ|$uLm_H`fHZD$L&Lﺑd$&L`HfHZD$ϲL׸HEǃHƃ0DHH踰HHt$4D$4.H$dH3 %(D$, H[]A\A]A^A_fLl$PpLiLa_HTL,HLqD`D0+L#yHHt$<HDt$<HDH跪L迷LrLHƮL辸_H豬LHvL~Lst$~Lv_HifHZD$'L/$Lt|$/L'_HfHZD$ذLHLu`d$ܭLԷ_HǫD$H艰L葶HLvhl$荭L腷_HxD$H:LBLwt$BL:_H-fHZD$LLx|$L`HުfHZD$蜯L褵HEǃHƃ0DHH腭HHt$4D$4*tQHH@H@H@ LJ@LJLJLJLJHEHߋ0DHH<DfH0Ll$PD$<$DD$8l$(H*L04HH@LJLJt$D$HHHLPD T$(Y\$ ;L3_H&DH`HH|$2Dd$2HHHt$H諦&_HΨHH蓦7_H趨fHZD$(tE_H藨t$H[U_H~t$HBLJDHLܜZDHHzZDfH*HX^{\$ H$1(HD$ Yd$f9X>DHPD4LHHpDD+0HxZHpHpDH`HpHxHxcZHxHxDHHpZDHH|$8ZT$8HD Hp^L$HhHpHxHxL$ܟZHx`HxDHHp:ZDHH|$<ZL$H|$ XH|$0YHŋ0[DH|$0!XHLHI0HKHHKHWH|$0VH|$ QPqH9H|$HIV!H|$0HVH|$ QPHMHH|$ <>wYf.@1f.1f.{Jf.SHHHPedH%(HD$1HGHHxHgu0H{8HqPVHD$dH3%(uH[f.Ht$F_Cf.DSHHHPedH%(HD$1HGHHxHgu0H{8HqUHIHD$dH3%(uH[fHt$Bf.DSH_Ht&HHH@H= XuH[FIfD[fD[DUSHHHOHHt#HVHC(HH[]H9tHr H} HL$H$MFHL$H$f.AWAVAUATIUSIHLwMH.L}#fDH=|y=IFHt:IIv LHH^L9HFVuLH)H=~IF1HuƄLu5H{ LE1҅HHIHHH[]A\A]A^A_Lw1M9uLtLEHAWHGAVAUATIUSIHHH9 H L~ LqIoHLH $L9MLFLLD$UH $LD$LH)H=~MLHLUuL)HHH1H[]A\A]A^A_@H=}XI9\$HHtHDHx LHdDy`H}HHEHDHH[]A\A]A^A_fKfDH(tH_ HH{ DxeDLLH[]A\A]A^A_fDI9\$ t9HRHp LHCyH{HHEHEH1HfDAVAUIATUIS0IH dH%(HD$1;IuHh HH~9HC(gHLLHt3HHLHL$dH3 %(H []A\A]A^@HK(HyHguOHK HyHguHHD$aEHD$f.Ht$HD$HD$f.Ht$HD$aHD$u>Hm8HEKHJHHAWAVAUATIUSH8LwdH%(HD$(1HGH4$MHD$L&HM|$؅x?LMvMt,HHHc\$T$BDffZ*ZbHHpfH*Xft$HDŽ$Hf$ *IE^$(Ƅ$ZxHHH$$8\ fZ$@$0$PHH$H}HDŽ$HDŽ$薲HDŽ$#HTQZHuQZH}hH@HHNQZHOQZH$H@HHQZHQZH$H@HHDŽ$tP6$UHHHED$8EHD$D$<~D$2HD$@HHD$~D$2HED$DHHD$~D$2HD$HHHD$~D$2HD$LHHD$~D$k2Ht$@HD$P3/Ht$DH!/Ht$HH/Ht$LH.Ht$PH.Ht$8H.Ht$<H.HH.HH.HxH.HpHw.Ht$(He.Ht$,HS.Ht$0HA.Ht$4H/.HH.HH.fHt$THZ l$T-HcHfH*Ht$XHD$X-H`3HcHnH+ff**ZZ 8f(f*\ZXd_*,ƃHHcH2H$dH3 %(8H([]A\A]A^A_@H$H6H1H@HfH*2f*4f.ztD,苃0D4H ǐ'Ð'H(@H@H@I$ƆHHHH}HDŽ$HDŽ$薲HDŽ$Hネ0H}hHDŽ$t2fH}.DH'}Hz.H2:H+Hu@j$H+H}:.DHO'}H".H9Hb+Hu@j#HL+H'Lǃ>H?.w<'.2fH H*@wHfHH H*X{fHfHH H*X0fHfHH H*XLfHfHH H*X9fC,@D0@j,HDLd$pJ*}Hm,H%8L0D0L.LD8H7,DH)}H,L6 !HI2LMt9I0LLH@HD$LLHD$I|$!IǃLƃP/9$HHNH-HL*H-HLH6H-HHHtE-LHCI|$Hs!ILPH-HLH5wLl$`#5I}HpHD$`kHLd$pL7j0LH"L6H*HH*HV6Ln5Lv0/L4o8LHD5LL0g/H,Hf.AWAVMAUATAUSHHH$H$H4$HT$DL$D$ HD$L$$T$(\$,dH%(H$1$%H|$p %HT$OH|$`g8H$HT$pHt$`H HD$`HxHgrH|$xL,H$HHǃLHǃ_LHLUaHlHHD$08HHǃgHHD$8RfDK$HǃHǃHH*HǃHHHǃg^""IFIHH$H$t@H$H$HHH$HHH$H$YD$Ht$HD $H$H8HD$H@o-H|$p~'-^HD$pH|$pH,HD$xH4H$H<$DO^H$+'_H$H$HHH$HPH$HX$`_D$$L\D$ LW^t$(|$,HL#Hƿy HP# Hƍ< HX HX|# Hƍ< H7 H`[# Hƍ< H Hh:# Hƍ< HHp# Hƍ< HHx" Hƍ< HH" Hƍ< HH" Hƍ< HqH" Hƍ< HPHt" Hƍ< H/HS" Hƍ< HH2" Hƍ< HH" Hƍ< HH! Hƍ< HH! Hƍ< HH! Hƍ< HlH! Hƍ< HLHp! Hƍ< H,HP! Hƍ< H H0! Hƍ< HH!HƿH HƿH HƿH HƿH HƿoHX' Hǃ pǃ(HǃHǃƃƃǃ4ǃ HH%Є'H-Ȅ'bjH9uHT$pH|$`Hǃ?ǃ }ǃǃY?1HT$OH|$Pm1LIMuzf.MMvMtI~ Ht$PVyMvMuL9@Iu H|$P2*I}(Ht$`l#HD$PHxHgpHD$`HxHglH'5'(((pHpH(pH8HHXHǃHǃ(H$dH3%(ǃ0ǃdǃhǃxHǃHǃH[]A\A]A^A_0H?IHD$PLIV HIF HD$PgIF(gsHItILLH I{Ht$P[H$I~H$7IF(HxHguIF HxHguLH$H$IHD$PHxHgt H$HD$`HxHgt H$LHHyHgtHt$OH$H$HHH$HH|$8%H$HHHxHgt Ht$O9H|$0O/L'XLoVHH%H!.IH IHHHD$`HxHgt Ht$PH|$xH$zH!HHH{HHHHUHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmLHLeHhHpAUEXM\D`HdHcXLxHEZIIF}IVH}@@ HHXIFHUH{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG }LkHEHxHEHxHgu3I|$HUdH3%(HxuZHe[A\A]A^A_]@HuDHH[tE1wHHPHcNuPkdIHLvHEHxHgt HuI|$RHjHLeHHHP!HLeH HxH AUATxUSHHh00H|$0dH%(HD$X1H|$0}'HI&L.H|$04&$tHH't#HD$XdH3%(~Hh[]A\A]@0Ht$TH$g`]H$LD$TH1HI)HR HHH!H$HxHgHJHǃn(HHH/%HHHHx11(H|$0L00H|$&&!HI1%L =pHH%LHH|$$Hxw 'k@Ht$0DH|$0Hw$HHH$IHxHgt Ht$0LHHtv#H|$(HpHD$ k H H|$ %H|$00Hŋ0;H|$0%HH0HHHH$H|$0#H|$ qH9H|$HIt#!H|$0Hb#H|$ hHHH|$  W&f.@1f.1f.[f.SH_Ht&HHH@H=;XuH[&fD[fD[D HfЃAHtG~fDGPW"fffff.SHdH%(HD$1@HHt+HHxHgtHt$HuHu@HD$dH3%(uH[ffff.SHHdH%(HD$1@HHt+HHxHgtHt$HHu@HD$dH3%(uH[-fff.H@wLy fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAWAVIAUATUSfH(H*@f(X^^\$f(D$fYZZ%fWfT$AZH^.D,fAL\$ $Z^,Ic0 $T$Dd-B")E1HALIXf($Z\ u'X|&IPI9IX$XT$,HB1DBD1uIc0I`HD)HcHH4Ic0IXIhH4HaIc0IXDD)IpMcHH4H4IXIc0IxH([J4]A\A]A^A_HIXWUfSH(0H*@_!'Y^D$ ~pHH,H@fHt$H|$L$HZffL$XL$ ZD$W,'ZT$SCH9uH([]f.HH(ATLUSHxHHHPLdH%(HD$1HHXH`HhHpHxHwHkH_HSHGH;HP/HPHt~ HHH%HHxHgHHxMLHǃxrHǃp@rHǃHHHǃqHZHZHpH@HxHǃptHpHxHgu|H$H HHDHD$dH3%(uSH[]A\HxHHxw +f.Ht$6Ht$&u| fff.SHH[fffff.AVAUE1ATUA08SffHHpH(1dH%(H$h1HF ZNZVNHH@HPHxTHPH(H$H|$ @@@ @@@@ ǃdHǃǃǃǃ0/Ht$ H|$019LHt$0L5HD$0HxHgH(LxLLhSH|$`H$4R@j0@j mHHHt$`H HdH|$`J'H(LL0DpH$DH3H|$@WH|$@MxHIXH$L иHI3L H|$@H$&H|$Pƃiƃh\$d$ H|$P}HHfHZD$ SHHfHZD$,H|$P2HD$ HxHgu@H$hdH3%(uf0ffA*H8+@*ZZ f(fA*\ZX+,ƃiHHcH8H:HMdH3 %( He[A\A]A^A_]HPHH H81H@HfH*f*4f.ztD,苃0D4H t't'H(Dž?Dž?H@Dž?Dž?@HDž ?Dž$?Dž(?Dž,?@HDž0?Dž4?Dž8?Dž<?Dž@@I$ƆHHHHHHH$HHD$H HD$H(HD$H0HD$ H8HD$(@D$0HH@HDžPHDž薲HDž`HDžhPeHxHgfLHDžhqI~PHl!ZH!ZI~hH@HPHf!ZHg!ZH`H@H`H5!ZH6!ZHPH@HPHDžtk$HDžI@HHH~HHH~IH~HHH~HHH~bHxHHIIHLHLHLHLHLHLH8LHLyHLeHLQLLL:HL&LLHLH\LHXLfLLZHc0H8fH*HPLP}0H/Hc0H8n@H@HfH*jf*4f.z,HHx\4H(D` HDHHI$LD0LLz  HmDH2HULHH=fHZHL L LI~DH}HH HIv@juHHP1_'ǃHLzHP\q`.Xw^'.\dd2fH0H*@uHfHH H*XyfHfHH H*XIfHfHH H*XGfdcdL@HfHH H*XfHfHH H*X#f@jD0DH}HHHD0HHDH}HHHIgLMt>I0HLLxgHLAHHxIEǃdLƃhPHTHIt9HH1HJHHHPHHHpHHDžkHxI~L6L>HKIHdHWHLLH L(CLHc HHHxKIELPHLHLHHHHHHHH{LHLH|$@PHL$`HT$PHt$@HFHD$@HxHgH|$XH|$hHHPHǃHǃHHD$HHHD$ '"HxHǃpgHHD$(fD$HǃHǃHH*HǃHHHǃg^xIEIUHHT$`HD$ht@HT$`HD$hHHH|$hHHHL$`HT$hH$Ht$HpD$L8D H@H$d$l$HǃHǃǃLHHƿHP Hƍ< HeHX Hƍ< HDH`h Hƍ< H#HhG Hƍ< HHp& Hƍ< HHx Hƍ< HHHƿHHƿHHƿuHHƿ\HHƿCH5,W' HǃǃHǃ8Hǃ@ƃhƃiǃ40ǃHHH 'e'#e' HBH9uHT$?H|$`HPǃX?ǃ\ }ǃdǃ`Y?HT$>H|$PmLIMuMMmMtI} Ht$P.yMmMuL9It$ H|$P I|$(Ht$`BHD$PHxHgHD$`HxHgHD$xdH3%(HǃHǃ(ǃ0ǃǃǃǃǃǃǃ4ǃEHĈ[]A\A]A^A_ÿ0HxoIHD$PLIU HIE HD$PgIE(g裫HItCLLH=IHt$?[fHt$@LHt$P=IE(HxHguIE HxHguLxHt$@Ht$@HxHHyHgtHt$@H$H$HHH$H|$(H$HHpHxHgt Ht$@H|$ H|$HbHHr\WHHHCHH|$X'H|$hH5HxIHD$`HxHgt Ht$@LHxIHD$PHxHgtHt$@IHHHD$@HxHgkHt$?\~ytoje`[VQLGB=83.)$UHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmL*@LeHhHpuAUEXM\D`HdHXLxHEZIIFIVH}@@ HHXIFHUH{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG ~LkHEHxeHEHxHgu4I|$JHUdH3%(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHPHcNuPjc4IHLHEHxHgt HuI|$HHLeHHHPHLeH:HxHZAUATXUSHHh0H|$0dH%(HD$X1H|$0HIL~H|$0$tHt3nHD$XdH3%(Hh[]A\A]0Ht$TH$g0H$LD$TH1HI)HRHpHHH$HxHg4HHpǃHpHHxoHHHxHx1qH|$dLp0pH|$f!HIqL =pHHRLH'H|$0HHHHdfHxw ;@Ht$0TH|$HILHHtDHHH$IHxHgtHt$0H|$0H>HoH|$(HpHD$ kHH|$ H|$0hIċ04H|$0HH0HHLH|$0H|$ "H|$ cH|$0HqH|$ wHHDf.@1f.1f.{f.SH_Ht&HHH@H=hXuH[FfD[fD[D(HfЃAHtG~fDGPWfffff.H@wLyfATIUHSHHt#H{ H?uHEH9C vH[HuL[]A\IH[ǐfDAVAUIATUSH ^@L$[V%f(D$YfWf(^T$rD,IcL$T$G,$B,*1HAHf(T$\ o'` X۞$IHH9IPT$XT$,HDDuIcI`McHJ4McIPIcIXH [J4]A\A]A^HIPATUISH GI'Y^@D$~fHhH,Hf(Ht$H|$$Hff$ZL$W 'Z\$[XT$KH9uf($ H' $A$AX$ A$ H []A\Ðfff.H HATUHSLHHHHdH%(HD$1hHHHSH`GHX;HP/Hh#HpHx HHhHtNHHxHg&HH3HHǃrHǃ@rHǃHHHǃqHxYHyYHH@HHǃtHHxHgH0H#HH^HHD$dH3%(uUH[]A\DHLHxw [f.Ht$Ht$cLfff.SHH[fffff.AVAUATUSffHHHPdH%(H$1H%$@`PH@ f(XH)HXd$(H*L$ ^^YlE'ZP$^t$>k'YYT$f(l$A!k',T$f(L$ \fd$(ZT$^ӉYYYXf(>fl$f.zH\ZL$@ H1ǃpHHHx:5HHHH$H|$@@@ @  ǃz`'HǃHǃX`'HǃHǃ Ht$@H|$P1 LHt$PLHD$PHxHgQHLLLh%H$HR@j0@jmmHHH$HH0H$HLL0Dp藜H$DHdH|$`@ H|$`xHI!H$LQ иHILH|$`H$kH|$pƃƃ@|$t$}H|$psJHH~D$H !HH[D$HHH8D$HHH|$pHD$@HxHgu6H$dH3%(uEHĐ[]A\A]A^X}H$뻐H$)H$H)HD$@HxHgt Ht$?}HH|$pH(H|$`HH$HHHD$PHxHgtH$#Hfff.AWAVAUATMUSHHxM dH%(H$h1HL8Hx@HH$HHHhH,$,HP+Xff**f(T$T$\X,ƃHHcHPHPH4 fH*^@I$HDŽ$ HDŽ$(HDŽ$04$$8HDŽ$@HDŽ$H$PƄ$XHƄ$HHH$hdH3 %(zHx[]A\A]A^A_HIHMHhHxLpXL`LP{HxH .3 @.% HpHH~ H$~$H0D$D$f*^@Hx~ffZ~\$  ='ZHx^@ǃHL$H$~$L$HZT$ ^ff($fZZ f`8Zf(t$XX <'Y^:$X HxHhHcȃFD`0HPH fH*\$ @D$ \$(^f*4f.2 \$(&  $f\$8^Zd$f(d$a'fd$0YZl$l$YYYfYZ(ZX(f(XXf(L$(,HxffHf Z2Zjd$0\$8L$(*ЉI$$@HDŽ$HD$ Ƅ$X$ Ƅ$X$(H^\x$0$8$PH,HHcHPH$HHPH fH*^@f*4f.ztD,0D4'Hp V'|V'H@Hx@H@IEƆHHHHDŽ$HDŽ$X薲HDŽ$HDŽ$PeH$PHxHgVH}PHDŽ$q1HYHYH}hH@HHYHYH$H@HHYHYH$H@HHDŽ$Xt,f|$<$|$|$HpHxHED$@HD$ ED$D~D$ OHED$HHHD$ ~D$ .HD$LHHD$ ~D$ Ht$HHD$PHt$LHHt$PHHt$@HHt$DHHPHzfHt$THZ \$TVfHt$THZl$T2fHt$THZt$TfHt$THZ$\$TfHt$THZt$t$TfHt$THZ\$\$TfHt$THZt$t$TfHt$THZx\$TcfHt$THZpl$T?fHt$THZt$THcHPfH*Ht$XHD$XfHxZHǃ 6'l$ ~H}ZDHo}HBHHHu@jHlHfH*l$ @D$ \$(^f*4f.z \$(,HHxLl$pd$ 4HDpҎLHDLt$` @LD0VLN HADHH)LH~HD$ HHLLHP@HfH*t$ f.HfHH H*XfILl$p@LLc0MLPLPLUHHLH LDHHPHbfH*$$I$^@HDŽ$ HDŽ$(HDŽ$0$81fDHfHH H*Xf.HhY'H,@ǃ`tfHhZxcZf.pE2 D0@jHDLl$p}HHL@D0LHDHy}HLtHIy "fffff.AWAVEAUATMUSHHH(H$`H$HT$L$D$ HD$L$$T$(\$,dH%(H$1FH$*H$H$(H$H$H$HH$HxHg"H$H$H5NI'=JI'HHǃHǃHHD$0LL} L0L~HHǃgHHD$8?HIǃHǃHǃHHIFHǃgH$HH$t@H$H$HHH$HHH$H$ffD$fHt$HD,HǃH*ʼn(ZT$,8fH*D$@S$hL$$D$ LHH$8Q'H$H$H0H$H8H$H@$H D$(LHƿ HH(Hƍ< HHP(Hƍ< HzH`(Hƍ< HYHX}(Hƍ< H8Hh\HƿHpCHƿHx*HƿH(HǃPHǃXǃ4Hǃƃǃ`HHf.%E'H-E'bjH9u =~$H$5MO'H|$`pHhHǃxǃzJH$H|$P3HHt$PH? Ht$`HBHD$PHxHgHD$`HxHgH$H$aH$H|$pHt$pH H$HHD$pHxHgH$HxHgH$H$?OH$H$j5H$HE H$HEH$HxHg1H$HxHg*H$H$ }H$H$mH$H H$HH$HxHgH$HxHgH$H$iCH$H$t })H$H9 H$H9H$HxHgmH$HxHgfH$dH3%(Hǃ ǃ0HǃHǃHǃHǃHǃHǃHǃ Hǃ(Hǃƃǃ1H([]A\A]A^A_H$hH$VH$D H$2[H$ bH$H$H$H$&H$H$HHHxHIH$HxHgLHHyHgtHt$OHD$NHD$HHHD$e]H|$8;HD$HHHxHgt Ht$OLLH|$0[:IH$HxHgt H$H$HxHg4H$"IH$HxHgt H$qH$HxHgIIIH$HxHgIHD$PHxHgt H$HD$`HxHg}DIHHcHHH$貸HHH$HxHgt H$eH$xѺIH$HxHgH$(IHD$pHxHgH$HHHUHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEXI@HHEt@LmL0HËELeHhHpEXMPAUD\H`dXLxHEZIIF轵IVH}@@ HHXIFHU϶H{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG }LkHEHxTHEHxHgu3I|$9HUdH3%(HxuZHe[A\A]A^A_]@HuDHH[tE1wHHPHcNuPkd$IHL趾HEHxHgt Hu|I|$蒵HHLeHٱHHPHLeH*HxHJAUATUSHHh0@H|$0dH%(HD$X1H|$0HILnH|$0t,tHt#HD$XdH3%(~Hh[]A\A]@0Ht$TH$gH$LD$TH1HI)HRHHHH$HxHgH芾HǃHHHoHHHHx1qH|$@L0pH|$f!HIqL =pHHRLH'H|$Hxw k@Ht$0脵H|$0HH/HH$IHxHgt Ht$0LHHtH|$(HpHD$ k_HH|$ H|$0@Hŋ0{H|$0AH4H0HHHH|$0H|$ yHAH|$HI)H|$0HH|$ HHH|$ df.Df.@1f.1f.雺f.SH_Ht&HHH@H=XuoH[ffD[fD[DAWAVIAUATUSH(LodH %(HL$1HOH|$MH $L&HM|$؅x?LMmMt'Xsm$IPH9IXT$XT$,HDDuIcIhMcHJ4Mc菪IXIcI`H [J4]A\A]A^HaIXfҋ &YH*@Hp^ @HH(ATUHHSL@HHH HdH%(HD$1訬HHh蓨H`臨HX{HpoHxcHWHKHPHt蚰HHt艰HpHxHg!HPH@nOHHǃ@rHǃ8@rHǃHիH)HHǃHq2HYHYH8H@H@Hǃ8tH8HxHgH HH%H虫HQHD$dH3%(uPH[]A\H@LHxw SfHt$Ht$vh茭fff.SHH[fffff.AVAUATU(SffHHHdH%(H$x1H(Z`ZhH@ HH$H)FH$94HIDHL艮H$f$pi$ZfXH*@^(d$ZZY J'^ZYD'Y\$(t$-*:'(\$d$\f,(fH*YZɉ^^YYXZ$ft$Zf.YH\D$HH(1ҋpHPHxHP@@ @  fH*@^f(L$Hf(L$^D,HcL$G,$B,*E1Hf HIf(T$\ n8'ٹ脺XTg$HPI9HXT$XT$,HB1DBD1uHcHhMcHJ4McnHcHXH`J4HLH(H$H|$0ǃ,HǃǃǃڿHt$0H|$@1LpHt$@LHD$@HxHg"H(L@LLhjH|$pHR@j0襻@jImHlHt$pH迠HH|$pH(LL0DpjH$DHNH|$P ( H|$PxHH$HCиH֯H蜭H|$P袺H$eH|$`ƃ5ƃ4(t$d$wH|$`m}H`fHZD$HAfHZD$H"fHZD$HȺH|$`޹HD$0HxHgu5H$xdH3%(HĀ[]A\A]A^DXH$*H$HXH|$pH-HD$0HxHgt Ht$/H蹰H$H)H衰ܦH|$`HH|$PHH$HHD$@HxHg{H$kiHaH빐UHAWAVAUATISHHMHdH%(HE1ô4F 5HPH(IEM$$HHHL(HpHLx`LhLX觹HH HH~%^]&HX 9 'ffZZY^ q$X '  'YY2'XZfZXZZ fHxHZH~ H~wHL@ZfYD2'I*^' 'ZXZY `$^Y 1'YXXf(,HHHcBDffZ*ZbHHZ fH*XffH*I$^HDžZƅ1H\ffZZ$HHH@HfH*bf*4f.z,0AƉ4HHx躩DHϢ}H袩HZH@jHpEH0(oH0cHHHqH0$H(HpH@$@ATcH`DH"0 AHHxԨDH虦H輨H`H H蠨fHZ\HfHZ;H^HH`H@(4H@(HHHq՝H@$(HI@Hx HH~ IH~H HH~ƧH@H0HII}H LiH0LUHLAH L-HLHLHLHLݣHLɣHL赣HL衣HL荣H$LyH LefH@LZ@=HcHfH*H`L`H趨HcHxfDffA*H+*ZZmf(fA*\ZX諟,ƃ5HHcH.H@HDžHDžH薲HDžHDžPeHxHgjHHDžqHxP?HYHYH@HHYHYHH@HHYHYHH@HHHDžHtHxhاHMdH3 %(He[A\A]A^A_]ÐHPHHUH1H@HfH*^f*4f.ztD,苃0D48Hx A+'=+'H(@H@H@I$ƆHHHHDžPHDž薲HDž`HDžhPeHHxHglLHDžhqI~PqHYH3YI~hH@HPH YH YH`H@H`HYHYHPH@HPHDžt@LI~胢DH蘛}HkH#H諟Iv@j H蕟pH('ǃLH$(. w'.$,,2fHH*@H`HfHH H*Xf.HfHH H*X+fHfHH H*X"fHfHH H*Xf,#, @@jD0躠DH}H袠HZH(D0}HqHdDH)}HLH 6HI[ LMt>I0H LLx> H LAH Hx!IEǃ,Lƃ4PH`4JHH[HOHHLH跞HHFHH Hx葕IELPHH@HH`HзH0HoHyH蘑HHRHPP(IHPŪH踞HL譞HP聩謣H蟣HPH[AWAVEAUATIUSHIHH$H|$pMD$$L$(HD$T$,dH%(H$1cH|$`JHT$NH|$P覬HL$pHT$`Ht$PH?HD$PHxHg)H|$hߓH|$xՓHH HǃHǃHHD$HHHD$HHHD$0輬H@Hǃ8gHHD$8荓HHIǃHHǃPHǃhH$HXH`IFHǃpgHT$pHHD$xt@HT$pHD$xHHH|$xHHHL$pHT$xŒHt$ H8D$L8L@0H|$D$(H|$D$$qfZ\$,HژHƿ 蝕HP Hƍ< H|HX蠘 Hƍ< H[Hh <6HH:H`^ Hƍ< HHp=HƿHx$HƿH HƿΔH-& HǃǃHǃHǃƃ4ƃ5ǃ4ǃdHH 2"'."'f. HBH9uHT$OH|$pHǃ ?ǃ$zǃ,ǃ(Y?HT$NH|$`LPMHLt$`H,$MnDxALMd$Mt>I|$ LLLM9IFauM)II}Md$MuH9,$Hu H|$`VH}(Ht$p萚HD$`HxHg HD$pHxHgH$dH3%(HǃHǃ(ǃ0ǃǃǃǃǃǃHĘ[]A\A]A^A_H,$0L@ʍIHD$`HIV LIF HD$`gIF(gOHHtCHLLNHHt$OHt$PHt$`IF(HxHguIF HxHguLiHt$PHt$PHH|$H3HHCHHD$PHxHgt Ht$ODH|$hH|$xHL@HpHyHgtHt$PH$H$HPLH$0H|$8莜H$HH8HxHgt Ht$PH|$0迦H|$HHD$`HxHgt Ht$PHD$pHxHgt Ht$PeH$ZfXH*@^(d$ ZZY :&^ZY'Y\$(t$҂-'(\$d$ \f,(fH*YZɉ^^YYXZft$Zf.aH\D$胿HǽH(1ҋpHPHx HPH(H$H|$ @@ @  ǃ,HǃǃǃǃHt$ H|$01LpHt$0LHD$0HxHgUH(L@LLh AH|$`HګR@j0谑@jTmHH菑Ht$`HvHH|$`H(LL0Dp@H$DHQH|$@ H|$@xHIH$L>v иHIL菃H|$@蕐H$XH|$Pƃ1ƃ0 l$|$ jH|$P`}HHkfHZD$ !HHDfHZD$HHfHZD$軉H|$PHD$ HxHgu7H$hdH3%(uNHp[]A\A]A^@XH$fH$ }HH$ HD$ HxHgt Ht$mH蕆H|$PHH|$`HɜHHD$0HxHgtH$%H$HÎH;H|$@H讎cHhAWAVAUATUSHHM dH%(H$1HH$HL810H>1H(HIxHHD(@hHH<$D$ HsHpHLx`LhLX聏HH . @. HH$~$^"&HD$ PD$$X&ff\$ZZf(Y^ 0]$X &YY'XZfZXZZfHxHZH~ H$~$@HD$(辷D$,L@Zf\$Y'I*^$\$ZXZY 6$^Y 'YXXf(L$載,ȋ$\$P HHHcBDHffHZ*Zb fH*Xft$T$fI$*D$^$HDŽ$8Z$$HH$Ƅ$$ H\ffZZ$0$($@H0HҺH@H fH*f*4f.z,辬@jLt$`4|Hx}HeHH(HpH@$,$h9LHƉHl$PQ  HD0H H~DH|H~LH0oH~fHZ$肃H~H]HuL=H+DffA**ZZ>f(fA*\ZX|x,ƃ1HM$HcHH(Hp0Hh8ph`@XHLPPHX@$HH@`$$$$ $$($0$8$@HHPH$dH3 %(* H[]A\A]A^A_fH$NH1H@HfH*Wf*4f.ztD,苃0D4aHx z'v'Ƅ$GH@H@H@I$HHHDŽ$HDŽ$薲HDŽ$HDŽ$PeH$HxHgH$HDŽ$qmHYH/YH$H@HHYHYH$H@HHҙYHәYH$H@HHDŽ$t$HxHHED$0EH$D$4~${HED$8H@H$~${HD$HfHH H*X H1xDHuHxLHnhHIfLZ$|Hw9fDILt$` LLc8D|$LLoL蓃&HHD$蜂H|$L?uLGt$HKzHHfH*fI$D$$$HDŽ$HDŽ$HDŽ$ H*@^$(HDŽ$0HDŽ$8HƄ$HHƄ$$@HOH&Lǃ肇H$y(. ,,2fHH*@GHfHH H*XfHfHH H*f(X.fDh&.$c,m,VHfHH H*X0fHt$`;HfHH H*X{fHfHH H*XkfD0@j uHDLt$`r}HtH襀L D0vLĀHtDH|r}HtLwiHIHHt=H$HL0LHHHL$LH<$HL$I~yjIǃ,Lƃ0PlHL~HbvHIHuHl$P ~H}HpHD$PkfLLt$`ifHql LIkLHsHLsL_~HgyxH$HgHuLH*~H2yMxHuHHe#HLXrHpuI~H?iILPHNuHHH}L膋H.uH@AWAVIAUATUSHMEHH$H|$pH$L$D$HD$L$T$dH%(H$1mH|$`mHT$?H|$PHL$pHT$`Ht$PHiHD$PHxHgH|$hH%hH|$xhHHǃHHǃFLLHHHD$ H@Hǃ8gHHD$(gHHIUǃHHǃPHǃhHXH`IEHǃpgHT$pHHD$xt@HT$pHD$xHHH|$xHHHL$pHT$xgH$Ht$H8D$L8H@D$ ;vD$H-D$LϧfZ\$H8mHƿ iHPm <6HHiHXl <6HHiHhl <6HHiH`l Hƍ< HwiHplHƿ^iHxlHƿEiHilHƿ,iH-& HǃǃHǃHǃƃ0ƃ1ǃ4ǃkHH '' HBH9uHT$`H|$PHǃ ?ǃ$zǃ,ǃ(Y?{}HT$?H|$@g}L@Ht$@LsHt$PHvoHD$@HxHgCHD$PHxHg<HT$@H|$p?}HT$?H|$`j|Ht$`LHt$pHoHD$`HxHgHD$pHxHg f B#$HH*X^f(QgH$dH3%(HǃHǃ(ǃ0ǃǃǃǃǃǃHĘ[]A\A]A^A_Ht$@R'Ht$pCHt$p4Ht$P%Ht$`HHcHrH"oL@HpHyHgtHt$?H$H$HPLH$H|$(qH$IH8HxHgt Ht$?H|$ {LM认HLPgb]XSNID?:50+&!L@IHD$PHxHgt Ht$pLHHD$PHxHgt Ht$@H|$haH|$xaHmHHdIHD$`HxHgt Ht$PmHD$pHxHgjHt$PM[ISIHD$@HxHgHt$p IcII@UHAWAVAUATASEHHpHxdH%(HE1IHhdHu`\HEI@HHEt@LmL"]x8_HLeHhHpAUE\M`DdHH3XLxHEZIIF^IVH}@@ HHXIFHU_H{HtGukHxH]H@HHELmH{@HEL9HHCt&MtAE HtG }LkHEHxd_HEHxHgu3I|$I_HUdH3%(HxuZHe[A\A]A^A_]@HuDHH[tE1wHHPHcNuPkd4aIHLgHEHxHgt HuI|$^HjHLeHZHHPmHLeH:mHxHZ^AUAT{USHHh0 H|$0dH%(HD$X1iH|$0sHIrL~eH|$0r$tHst#HD$XdH3%(~Hh[]A\A]@0Ht$TH$g谩H$LD$TH1HI)HRXH8HHmH$HxHgHgXH8ǃTtH8HHH@qHHH@Hx1tH|$ L80hH|$vr!HIqL'd =pHHbqLH7fHqH|$qHxw sk@Ht$0.^H|$0HpH?hHH$IHxHgt Ht$0LHHt hoH|$(HpHD$ koXH'XH|$ -rH|$0 Hŋ0]H|$0QqHDeH c0H-eHH"eHpH|$0oH|$ jjqH9H|$HIo!H|$0HoH|$ jiHgHH|$ lWrf.@1f.1f.cf.SH_Ht&HHH@H=XuOH[vcfD[fD[D HfЃAHtG~fDGPWnfffff.H@wLyXfATIUHSHHt#H{ HokuHEH9C vH[HuL[]A\IH[ǐfDAVAUATUSfHHH*@H^ ${$YfWf(^T$kD,HcX $T$G,$B,*E1HDHIf($\ '&j=kX $HXI9H`$XP,HB1DBD1uHcXHpMcHJ4Mc&UH`HcXHhH[J4]A\A]A^HTH`믐fffff.ATfUSIfH XH*@F'YZ^Zl$ ~oHxH,HfHt$H|$T$HZhffT$XT$ ZL$W z&Z\$[KH9uf &Z iZA$ZAX$A$H []A\Ðfff.HH(ATLUSHHHHLdH%(HD$1hVHHpSRHhGRH`;RHx/RH#RHRH RHXQHHtNZH(HHsHHxHg0HHLHǃrHǃ@rHǃUH]HHǃqjHbOYHcOYHH@HHǃtbHHxHgHqHnH舗H̕H@UHdHD$dH3%(uWH[]A\HHHxw l;f.Ht$Ht$Y,Wfff.SHH[]fffff.AVAUATUSfHHpHhdH%(H$h1H(ZxfZxH@ H)Hp@j iH@jLXHif8$8$ZfXH*@^(d$ZZY &^ZYr&Y\$(4$W-&(\$d$\f,(fH*YZɉ\^^YYXZdf4$Zf.cf\HZ$ZH螒H(1ҋpHXHxHXfH(H$H|$ @Z@ @  ǃHǃǃHǃHǃjHt$ H|$01hLHt$0L\HD$0HxHgFH(LLLhH|$`H諀R@j0f@j%YmHH`fHt$`HKHfH|$`sH(LL0DpUH$DH"H|$@\H|$@fxHIeH$LK иHIeL`XH|$@feH$)sH|$Pƃƃl$|$;\H|$P1f}HHHI+LMtKI0HLH@HHLHHHx>IǃLƃP AHHQSH}HJHH.SHHHxy>ILPHLH^GHH;HHRL`HHItHkHcHQHpHHDžkHxI:LB:LJTHI?HpSHcGHLXGH,RL4MOLHH RHP_HHHQLL LHL9TfAWAVIAUATUSHMEHH$@H$HT$L$D$HD$L$ T$$dH%(H$1AH$AH$H$PUH$H$H$H=H$HxHgH$H)HLeH=HxH.AUATUSHHh0H|$0dH%(HD$X1g:H|$0]DHIhCL6H|$0C$tHDt3 nHD$XdH3%(Hh[]A\A]0Ht$TH$g0zH$LD$TH1HI)HRs)HHHq>H$HxHg4H8Hǃ>EHHHAHHHHx1EH|$L09H|$B!HIBL4 =pHHALH6H|$A 0HH(HH]R dfHxw AD;@Ht$0>.H|$HIALHHtD8HHH$IHxHgtHt$0H|$0H@HF8?H|$(HpHD$ k(H`(H|$ fBH|$0Iċ0-H|$0AH}5HC30Hf5HL[5H|$01@H|$ 7;R:"H|$ '.CH|$0H@H|$ ;":Hj7HDf.@1f.1f. 4f.SH_Ht&HHH@H=YuH[3fD[fD[D HfЃAHtG~fDGPW>?fffff.H"wLyS)fATIUHSHHt#H{ H;uHEH9C vH[HuL[]A\IH[SݵHdH%(HD$1@HH8ܵtCHHxHgtЃAHtIPЅHt$H[>H8ܵufHD$dH3%(uH[f.PJH+fffff.S͵HdH%(HD$1@HHx˵tCHHxHgtЃAHtIPЅHt$H=Hx˵ufHD$dH3%(uH[f.PJH+fffff.SH˵HdH%(HD$1@HHɵtCHHxHgtЃAHtIPЅHt$HHaLHHIfHZD$4 H*HfHZD$0 HH#L0:fH8+@D0ffA**ZZf(fA*L$\ZX D,LIcH8cL[#HIf"DL[L"H8ǃhHifH*fI$HDŽ$p4$HDŽ$xHDŽ$HDŽ$HH*H^$HDŽ$Ƅ$HƄ$$HDHoof.A@HcpHŀڵHHPH9 <05&t$t=O$|$gfff))Hx\HcHPH92 <005B&5DO$HfHH H*XfHfHH H*XfD$LL$H~D$HD$DL$@~D$@D$<L$8~D$8[fDH8HfH*^L$LD$(H81HHHwfH*f*<f.ztD,8D<{I}HDŽ$HDŽ$X薲HDŽ$H?2YH`2YI}hH@HH92YH:2YH$H@HH2YH2YH$H@HHDŽ$Xt;f\$ \$\$\$l$Hd$I$$pHDŽ$$xƄ$D$t$<$Hl$ d$($$$$H,fDHfHH H*XfHPmDi$'fL*#HP\$`.Xs&.\{d~2dlLHfǃHI*fǃtHt$H& &t$DI}I} }HuH-HIu@jHf.Hm@jLHL(fL*$Yo&ZGfL*$YO&Z>IXL>F\LGafƃl@m~vI^&XD$xHHD$|X *%fZf(Y^R&XZODIEL$LLc8D|$L8L8LHLHo Lwt$H{H8H+fH*fI$HDŽ$p,$HDŽ$xHDŽ$HDŽ$H*H^$HDŽ$Ƅ$HD$H$Hd@IHfH*f*<f.z,HHL$<H0DxLHD3@jD8JDH H2LHHD$H H H $H H HH$KfDF^&XD$x@@~~FH$vCf$ZY Փ&^ =%Z, @HfHH H*XtfHfHH H*XfI} DH}HILzH Iu@jdH ,@j H9d2d)D8@jK HDL$ }H+ HLﺁD8 LH DH }H LHIvHHt?HD$HL8LHHHL$vLH|$HL$I}IǃdLǃhPHfHH H*XfHHfHH H*XTHfHH H*X6HfHH H*XD8@j HDL$z}H HULﺞD8| LtHg DH,}HO L'=HIbuHHHD$HL8LHHHL$;uLH|$HL$iHHHHpH$HDŽ$kHxHL$*ufHGwLy3fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDAUATUSHH8HdH%(HD$(1HH9HcH)H9HFHHHIIHH|$HD$t H|$@H1誵IUH:HcI$HH0H|$6HHL$(dH3 %(H8[]A\A]fD1@趮HH$HHHE1ɺHHL`$I|OuXH$HD$HD$HHD$t@Ht$H菾H|$腯H|${HHP;HHA谱FwLy7FwLyHH|$H)H|$HH|$HHHHڷHfAUATIUSHIHHXH|$0dH%(HD$H1贳H|$ D蝳HT$H|$V}HL$0HT$ Ht$HrHD$HxHgupH|$(6H|$8,HEHJLHǃHHEHH t@HD$HdH3%(u HX[]A\A]fHt$HHD$HxHgt Ht$H|$(薭H|$8茭H褹HHf.AVAUIATUISIH@dH%(HD$81HHD$HAHHD$t@(Hl$LLHHH>H$HD$HD$ 讫HT$H|$ @@ HKHXHD$HT$ 輬H{HtGubHD$H\$ HHD$(Ll$(H{@HD$ L9HHCt"MtAE HtG txLkH|$(JH}AHT$H$HI$IT$tBH|$Ht$8dH34%(LuHH@[]A\A]A^@HH[tE1f.HHHHcNuPpiHl$HH}諫H÷HHHP IH肴LHEH|$kff.@HHtHH@fDfD1f.1f. f.SHHJH HoH[険fSHHJH 蹪HHojH[顳USHHHvHHHGmH}HkHCpbyHH{tHH@H=dNu4G@HE HC HE(HC(E0HlHClC0H[]@HHHHk蓯HHsH f.USHHY&XT$^fZ(L$ Y%^ZXh#荧,fT$L$ *Y\Y aX^D,H1LA@tIf@ffɉщ*HcHcH*DY@tY @tAXDAXLGOL9uH[]USHHY&$fWXT$^fZ(L$ Yv%^ZXg#a,fT$L$ *Y\Y 5X^D,~|H1LA@tIڐ@ffɉщ*HcHcH*DY@tY @tAXDAXLGOL9uH[]0@w*@$K@GGG GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG @GGG fff.#((^^(tnIE1@EPIMfI*Y^XH,AADAAA9uIBDBDE1f.DUSIOH hdH<%(H$1H|$ HHG31DHH uLD$LL$1fD$DT$t$L$$AD$@<<2\$AD$DDA1AfA A4L@4HH uH\$ DT$HzHc&+t & &&Hi@H ) ))ΉA@A ACPIHHi@H ) ))9tEHi@H ) )щʉ)щ8 uAASH$dH3%(u H []HDDDH9H$ dH3%(u'H []$ $ Ff.ATUAS(HHg%YsXL$T$ \$^ZXy`#4,f\$%YD$T$ ^*ZX<`#Y\YX^,ߞ,f\$d$E*Y\XY^D,AANHA@tIڍ@ffɉщ*HcHcH*DY@tY @tAXDAXLGOL9uH[]A\DATUIS(ЉH%YXL$T$ \$^ZX _#ŝ,f\$%YD$T$ ^*ZX^#Y\Y}X^,p,f\$d$*Y\DXY^,؃AH IT$A@tI<fȉHHc*@DY@tAXDHcBf*Y@tAXDBH9uH[]A\ffff.AUATAUSH(IHr%Y~XL$T$ \$^ZX]#?,f\$)%YD$T$ ^*ZXG]#Y\YX^,,f\$d$E*Y\XY^D,}AE1ٺ@tfɉAAMcf*ȍ@DBY @tBXLA*AMcBY@tBXDBDC IE9H[]A\A]fUSHL$~`(H,HH@(Ht$H|$ $H͝L$ W %D$C$XT$KH9uH[]ffffff.HV(HHt$H HQHHV0HHPtB1fff.HV(HHt$H HQHHV0HHPtB1fff.ЃAHtG~fDGPW鞰fffff.H?*tHf.H9>*ufHVwLy胚fSqSH HdH%(HD$1Hh}HHׯHD$dH3%(uH [|HH豯H)SHH0HHGZdH%(HD$1ךHCHxHgu.H{HHgu-HD$dH3%(u)H[Ht$~@Ht$nלfDSHgH[^fffff.AVAUAATUHSHHHIEHHGZHGgdH%(H$1裖H$H|$Ds Dk$HC(&}HC0dHEHt$H|$PLh]H|$@ }LzHL$PHT$@HH|$ AHD$@HxHgHD$PHxHgHEHt$H|$pLhH|$`}LqzHL$pHT$`HH|$0AHD$`HxHgHD$pHxHgHt$0H|$ atiH$6SH$脮\@THI菭Ht$ LHV~THQH$$HEHt$ H$Lh H$}LyH$H$HH$ALkH$LH$HxHgH$HxHgH$HxHgHEH$SLLp(xH$HAHHCH$HxHg1}L<dHC8H$躨H$H$H$HK(HDŽ$HDŽ$HC(HC0HS0H$H$H$HC(HHH$SHRLd腢H$x SHH胫LHȚ}HfH$HD$0HxHgHD$ HxHgHD$HxHgH$dH3%(7H[]A\A]A^þ&}Lì#HC8fH$EfDH$SfDH$QfDH${OfDH$cfDH$KfDH$3(fDH$&fDH$fDH$fDH$fD}L苫uHC8ND7}LctؾLsLR}L=uHC8>}Ltݾ}L zH$`SH$ةHsHHVTH軝H$莨uDYwLy˒HH$HxHgt H$H$HxHgt H$tH$HxHgHD$0HxHgt Ht$p?HD$ HxHgt Ht$P#HD$HxHgt Ht$H{0HCHxHgt Ht$0H{HHgt Ht$0HHH$HxHgIH$7H$H2"HHD$`HxHgt H$[HD$pHxHgH$8HHH;HHxHHHHD$@HxHgt H$HD$PHxHgH$HHH$HG7H$H2"f.HG8f.SHHH[f.@Sj}HHHT$dH%(HD$1蹩HL$dH3 %(u HH[kf.SHEHdH%(HD$1@HHCtCHHxHgtЃAHtIPЅHt$H[HCufHD$dH3%(uH[f.PJH辒fffff.SCHdH%(HD$1@HHAtCHHxHgtЃAHtIPЅHt$H諤HAufHD$dH3%(uH[f.PJHfffff.SAHdH%(HD$1@HH8@tCHHxHgtЃAHtIPЅHt$HH8@ufHD$dH3%(uH[f.PJH^fffff.AVAUATUSH0dH%(HD$(11w:5t'HD$(dH3%(BH0[]A\A]A^fDBH*ufHcwLyfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1螌H|$ 腌HT$H|$PaHL$0HT$ Ht$HZHD$HxHguPH|$(H|$8HPf舍HH߅OBHD$HdH3%(uHX[]Ht$>'HHHouH͒HH|$(蠆H|$8薆H讒HHD$HxHgtHt$HATUHSH dH%(HD$1HHH]HEH$҄HU@H@ HgHXHEH$H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$yHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuP肇HzHHP茔HHHHH}Hf.@HHtHH@fDfD1f.1f.鋍f.Ho4@SHHo H[WHL HrHH 1҅~"E<DQ@|QH9@ЃAHtG~fDGPW鞘fffff.H?*tHf.H9>*ufHiwLy胂fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1H|$ HT$H|$@gaHL$0HT$ Ht$HځHD$HxHguPH|$(螂H|$8蔂HPlHH߅OÛHD$HdH3%(uHX[]@Ht$>规HHHoHMHH|$( H|$8H.HHD$HxHgtHt$HATUHSH dH%(HD$1{HHH]HEH$RHU@H@ HmHXHEH$eH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuPH|HHP HH聉H虌HAH}hH而f.@HHtHH@fDfD1f.1f. f.Ho鴏@SHHo蠏H[׈SHH#HpH8H]wX[ÐЃAHtG~fDGPW.fffff.H?*trHf.H9>*ufHowLy~fATIUHSHHt#H{ H菐uHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1讃H|$ 蕃HT$H|$@mHL$0HT$ Ht$Hj}HD$HxHguPH|$(.~H|$8$~HPr蘄HH߅ORHD$HdH3%(uHX[]Ht$>7HHHo腍H݉HH|$(}H|$8}H辉HHD$HxHgtHt$HATUHSH dH%(HD$1 |HHH]HEH${HU@H@ HsHXHEH$|H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$|HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuP~HxHHP蜋HHH)HъH}{Hf.@HHtHH@fDfD1f.1f.雄f.HoD@SHHo0H[gHL HrHH 1҅~#EQ*ufHuwLyyfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1.H|$ HT$H|$@sqHL$0HT$ Ht$HxHD$HxHguPH|$(yH|$8yHPxHH߅OҒHD$HdH3%(uHX[]Ht$>{HHHoH]HH|$(0yH|$8&yH>HHD$HxHgtHt$HATUHSH dH%(HD$1wHHH]HEH$bwHU@H@ HyHXHEH$uxH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$ xHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuPzH tHHPHH葀H詃HQH}xwH萃f.@HHtHH@fDfD1f.1f.f.HoĆ@SHHo谆H[SHH2H8H6!V[Ð@ЃAHtG~fDGPWNfffff.H?*t蒆Hf.H9>*ufH{wLy3ufATIUHSHHt#H{ H诇uHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1zH|$ zHT$H|$@yHL$0HT$ Ht$HtHD$HxHguPH|$(NuH|$8DuH~{HH߅OsHD$HdH3%(uHX[]@Ht$>WwHHHo襄HHH|$(tH|$8tHހHHD$HxHgtHt$HATUHSH dH%(HD$1+sHHH]HEH$sHU@H@ HPHXHEH$tH{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$sHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuPuHoHHP輂HH1|HIHH}sH0f.@HHtHH@fDfD1f.1f.{f.Hod@SHHoPH[{HVHHt$H HQHHVHHPtB1fff.HVHHt$H HQHHVHHPtB1fff.ЃAHtG~fDGPW鎆fffff.H?*tҁHf.H9>*ufH@wLyspfUSH8dH%(HD$(1 HG`HHHBHD$HGhHHD$t@HGHHHBH$HGHHD$t@H>HH\$E11HHH|$pH{pHD$(dH3%(u^H8[]H\$THY|HQ}H_HD1Xf1rH|$HBpH{9pHQ|HHƄH>|fffff.SH0dH%(HD$(1 tHG`HHHBHD$HGhHHD$t@HGHtqHHBH$HGHHD$t@H>HtUHL$E11H*H|$oH|$voHD$(dH3%(uH0[1xf1qH|$H5oH|$+oHC{fSHHhHHGІdH%(HD$1nH{XnHC@HxHguUHC8HxHguTHC0HxHguSHC(HxHguRH{nHD$dH3%(uEH[Ht$~@Ht$n@Ht$^@Ht$NpfDSHH[.wfffff.AVAUAATUHo@SHEMHHwHІHGHGHHG(gHG0gHG8gHdH%(H$1PjI$DsHDkLHCPID$HHCXt@H$H|$HC`HCh}H$H|$ }H$H|$0}ɅH$0xH$Ղ}HIHs@LHVЁH$胁HCHt$H|$`HL`iiH|$P }HMHsHL$`HT$PH|$@AH{0Ht$@SwHD$@HxHgHD$PHxHgHD$`HxHgHCH|$p}HHL`dMH{1Ht$pAԈC HD$pHxHgHCHt$0H$HL`hH$}H MHsH$H$H$AH{(H$kvH$HxHg*H$HxHg)H$HxHg8H$gH$H$H$HKHDŽ$HDŽ$HCHCHSH$H$jH$jHCHHH$HRL=yvH$lHHwLHn}HZH$ { uoHD$0HxHgAHD$ HxHgCHD$HxHgEH$dH3%(H[]A\A]A^fDH$AuH$dF}HsHs(HHV~H$J~HS(H$1ɾ{H$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$=iH$0iH$fDH$fDH$fDH$fDH$9fDH$7fDH$5fDH$safDH$[fDH$CwLy%gjH$H|HD$0HxHgt Ht$HD$ HxHgt Ht$HD$HxHgt Ht$H{hgH{XgHC@HxHgt Ht$0HC8HxHgt Ht$0tHC0HxHgt Ht$0YHC(HxHgt Ht$0>H{5gHMsHH$H{HHD$@HxHgt H$HD$PHxHgt H$HD$`HxHgH$HHHHHH$HxHgt H$bH$HxHgt H$@H$HxHgiHHD$pHxHgKHHHHH$HzzD1f.SH@HSbH[f.@S}HHHT$dH%(HD$1 ~HL$dH3 %(u HH[gf.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWyfffff.H?*ttHf.H9>*ufHwLycfSH0dH%(HD$(1 toHG`Ht|HHBHD$HGhHHD$t@HGH$HGHHD$t@H>HtEHL$E11HJwH|$dH|$cHD$(dH3%(u H0[17f謄H|$HcH|$cHofSH0dH%(HD$(1 toHG`Ht|HHBHD$HGhHHD$t@HGH$HGHHD$t@H>HtEHL$E11HsH|$0cH|$&cHD$(dH3%(u H0[1ge܃H|$HbH|$bHofSHHhHHGdH%(HD$1bH{XbHC@HxHguUHC8HxHguTHC0HxHguSHC(HxHguRH{abHD$dH3%(uEH[Ht$.@Ht$@Ht$@Ht$gdfDSHH[jfffff.AVAUAATUHo@SHEMHHwHHGHGHHG(gHG0gHG8gHdH%(H$1^I$DsHDkLHCPID$HHCXt@H$H|$HC`HCh}yH$H|$ (yH$H|$0}yH$18lH$v}HIuHs@LHVuH$CuHCHt$H|$`HL`)]H|$P }HAHsHL$`HT$PH|$@AH{0Ht$@kHD$@HxHgHD$PHxHgHD$`HxHgHCH|$p}HHL`$AH{1Ht$pAԈC HD$pHxHgHCHt$0H$HL`P\H$}H@HsH$H$H$AH{(H$+jH$HxHg"H$HxHg!H$HxHg0H$2H$H$H$HKHDŽ$HDŽ$HCHCHSH$H$^H$^HCHH$<8LFjH$9tHHDsLHb}H'sH$r{ ulHD$0HxHgFHD$ HxHgHHD$HxHgJH$dH3%(H[]A\A]A^H$@8qiH$dsdF}HHorHs(HHV_rH$rHS(H$1ɾoH$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$]H$\H$fDH$fDH$fDH$fDH$sAfDH$[?fDH$C=fDH$+ifDH$fDH$wLyZH^H$HxpHD$0HxHgt Ht$HD$ HxHgt Ht$HD$HxHgt Ht$tH{h{[H{Xr[HC@HxHgt Ht$0GHC8HxHgt Ht$0,HC0HxHgt Ht$0HC(HxHgt Ht$0H{ZHgHH$H}oHHD$@HxHgt H$HD$PHxHgt H$HD$`HxHgH$dHHHHHH$HxHgt H$H$HxHgt H$H$HxHgiHHD$pHxHgKHHHHH$HBnf.1f.SH@HVH[f.@S}HHHT$dH%(HD$1qHL$dH3 %(u HH[{[f.HVHHt$H HQHHV HHPtB1fff.HVHHt$H HQHHVHHPtB1fff.ЃAHtG~fDGPWmfffff.H?*tbhHf.H9>*ufHwLyWfUSHHHXdH%(HD$H1HGH'HHBHD$HCHHD$t@HCH HHBH$HC HHD$t@H}H HL$E11HjH|$fWH|$\W{0HCpHHHBHD$0HCxHHD$8t@HCHHHBHD$ HCHHD$(t@H}HtzHL$0Ht$ E11jH|$(VH|$8VHD$HdH3%(uGHX[]@1f1f1vf1;hwXH|$(HbVH|$8XVHpbH|$HCVH|$9VHQbUSHHHXdH%(HD$H1HGH'HHBHD$HCHHD$t@HCH HHBH$HC HHD$t@H}H HL$E11H@fH|$UH|$U{0HCpHHHBHD$0HCxHHD$8t@HCHHHBHD$ HCHHD$(t@H}HtzHL$0Ht$ E11eH|$(UH|$8THD$HdH3%(uGHX[]@1f1f1vf1;uVH|$(HTH|$8TH`H|$HsTH|$iTH`SHHxHHGdH%(HD$17TH{h.THCPHxHgu]HCHHxHgu\HC@HxHgu[HC8HxHguZH{ SH{SHD$dH3%(uDH[fHt$&@Ht$@Ht$@Ht$Ufffff.SHH[^\fffff.AVAUAATUHoPSHEMH0Hw(HHGHGHHGHG HG8gHG@gHGHgHdH%(H$(1pOI$DsXDk\HC`ID$HHCht@H$H|$HCpHCx}kH$H|$ &}kH$H|$0}jH$0莀^H$g}HIgHsPLHVfH$fHC(Ht$H|$`HL`NH|$P }H3Hs(HL$`HT$PH|$@AH{@Ht$@s\HD$@HxHg]HD$PHxHg_HD$`HxHgaHC(H|$p}HHL`2H{(1Ht$pAԈC0HD$pHxHg5HC(Ht$0H$HL`MH$}H+2Hs(H$H$H$AH{8H$[H$HxHgH$HxHgH$HxHg(H$11dH$H$H$HKHDŽ$HDŽ$HCHCHSH$H$PH$ PH$KH$H$H$HKHDŽ$HDŽ$HCHC HS H$H$OH$OHCH<HH$莀HRL>&[H$eHH$dLHiS}HdH$cHCHHH$莀HRL?ZH$dHHcLHR}HcH$;c{0umHD$0HxHgHD$ HxHgHD$HxHgH$(dH3%(H0[]A\A]A^@H$C莀YH$cdF}HWHs8HHVbH$zbHS8H$1ɾ`H$H$H$HKpHDŽ$HDŽ$HCpHCxHSxH$H$mMH$`MH$fDH$fDH$fDH$sfDH$[fDH$CfDH$+fDH$5fDH$3fDH$N@wLyPK@wLy7KHHD$pHxHg*HD$0HxHgt Ht$rHD$ HxHgt Ht$VHD$HxHgt Ht$:H{xKH{hKHCPHxHgt Ht$0 HCHHxHgt Ht$0HC@HxHgt Ht$0HC8HxHgt Ht$0H{ CKH{:KHRWHH$HxHgt H$}H$HxHgH$WH=H$Hj_H$HU_HH$HxHgeH$SHHH]HHD$PHxHgt H$HD$`HxHg9HH$H^HHH$H^HHD$@HxHgnH$8\1f.SHPHCFH[f.@S}HHHT$dH%(HD$1aHL$dH3 %(u HH[Kf.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPW]fffff.H?*tXHf.H9>*ufHwLysGfUSH8dH%(HD$(1 HG`HHHBHD$HGhHHD$t@HGH$HGHHD$t@H>HH\$E11HH*[H|$GH{GHD$(dH3%(uNH8[]H\$V藀HiSHa]}Ho\H'\D1=I}hH|$HbGH{YGHqSHH[H^Sfffff.SH0dH%(HD$(1 toHG`Ht|HHBHD$HGhHHD$t@HGH$HGHHD$t@H>HtEHL$E11HZWH|$FH|$FHD$(dH3%(u H0[1HgH|$HuFH|$kFHRfSHHhHHGdH%(HD$17FH{X.FHC@HxHguUHC8HxHguTHC0HxHguSHC(HxHguRH{EHD$dH3%(uEH[Ht$@Ht$@Ht$@Ht$GfDSHH[nNfffff.AVAUAATUHo@SHEMHHwHHGHGHHG(gHG0gHG8gHdH%(H$1AI$DsHDkLHCPID$HHCXt@H$H|$HC`HCh}7]H$H|$ Ls ]H$H|$0} ]H$2藀"PH$Z}HI YHs@LHVYH$XHCHt$H|$`HL`@H|$P }H'%HsHL$`HT$PH|$@AH{0Ht$@NHD$@HxHgHD$PHxHgHD$`HxHgHCH|$p}HHL`$H{1Ht$pAԈC HD$pHxHg}HCHt$0H$HL`?H$}HK$HsH$H$H$AH{(H$MH$HxHgH$HxHgH$HxHg(H$#H$H$H$HKHDŽ$HDŽ$HCHCHSH$H$>BH$1BHCHH$?藀LMH$WHHVLH F}HVH$ZV{ ulHD$0HxHg>HD$ HxHg@HD$HxHgBH$dH3%(H[]A\A]A^H$C藀LH$VdF}HJHs(HHVUH$UHS(H$1ɾ"SH$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$@H$@H$kfDH$SfDH$;fDH$#fDH$ IfDH$GfDH$EfDH$qfDH$fDH$@wLyu>AH$HTHD$0HxHgt Ht$DHD$ HxHgt Ht$(HD$HxHgt Ht$ H{h?H{X>HC@HxHgt Ht$0HC8HxHgt Ht$0HC0HxHgt Ht$0HC(HxHgt Ht$0H{>HJHH$HSHHD$@HxHgt H$>HD$PHxHgt H$HD$`HxHgH$HHHHHH$HxHgt H$H$HxHgt H$H$HxHgiHHD$pHxHgKHHHHH$HQD1f.SH@H9H[f.@S}HHHT$dH%(HD$1YUHL$dH3 %(u HH[ ?f.HVHHt$H HQHHVHHPtB1fff.HVHHt$H HQHHVHHPtB1fff.ЃAHtG~fDGPWPfffff.H?*tKHf.H9>*ufHwLy:fUSH8dH%(HD$(1 HG`HHHBHD$HGhHHD$t@HGHHHBH$HGHHD$t@H>HH\$E11HH:NH|$:H{:HD$(dH3%(u^H8[]H\$T蟀HyFHqP}HOH7OD1Xf1<[H|$Hb:H{Y:HqFHHNH^Ffffff.SH0dH%(HD$(1 tHG`HHHBHD$HGhHHD$t@HGHtqHHBH$HGHHD$t@H>HtUHL$E11HJJH|$9H|$9HD$(dH3%(uH0[1xf1;ZH|$HU9H|$K9HcEfSHHhHHGdH%(HD$19H{X9HC@HxHguUHC8HxHguTHC0HxHguSHC(HxHguRH{8HD$dH3%(uEH[Ht$~@Ht$n@Ht$^@Ht$N:fDSHH[NAfffff.AVAUAATUHo@SHEMHHwHHGHGHHG(gHG0gHG8gHdH%(H$1p4I$DsHDkLHCPID$HHCXt@H$H|$HC`HCh}PH$H|$ &}PH$H|$0}OH$0蟀CH$L}HILHs@LHVKH$KHCHt$H|$`HL`3H|$P }HHsHL$`HT$PH|$@AH{0Ht$@sAHD$@HxHgHD$PHxHgHD$`HxHgHCH|$p}HHL`H{1Ht$pAԈC HD$pHxHgHCHt$0H$HL`2H$}H+HsH$H$H$AH{(H$@H$HxHg*H$HxHg)H$HxHg8H$11IH$H$H$HKHDŽ$HDŽ$HCHCHSH$H$5H$ 5HCHHH$蟀HRL=@H$JHHILH8}H{IH$.I{ upHD$0HxHgBHD$ HxHgDHD$HxHgFH$dH3%(H[]A\A]A^H$A蟀?H$IdF}H=Hs(HHVHH$jHHS(H$1ɾEH$H$H$HK`HDŽ$HDŽ$HC`HChHShH$H$]3H$P3H$fDH$fDH$fDH$fDH$9fDH$7fDH$5fDH$safDH$[fDH$C@wLyE14H$HFHD$0HxHgt Ht$HD$ HxHgt Ht$HD$HxHgt Ht$H{h1H{X1HC@HxHgt Ht$0HC8HxHgt Ht$0tHC0HxHgt Ht$0YHC(HxHgt Ht$0>H{U1Hm=HH$HEHHD$@HxHgt H$HD$PHxHgt H$HD$`HxHgH$HHHHHH$HxHgt H$bH$HxHgt H$@H$HxHgiHHD$pHxHgKHHHHH$HDD1f.SH@Hs,H[f.@S"}HHHT$dH%(HD$1)HHL$dH3 %(u HH[1f.HH <6HH ~(LL?IDHHzL9DA@yuÐЃAHtG~fDGPWCfffff.H?*t?Hf.H9>*ufHwLy-fATIUHSHHt#H{ H@uHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1>3H|$ %3HT$H|$觀FHL$0HT$ Ht$AH@HD$HxHguRH|$(-H|$8-HP"4HH߅OFHD$HdH3%(uHX[]fDHt$6/HHHo =He9HH|$(8-H|$8.-HF9HHD$HxHgtHt$HATUHSH dH%(HD$1+HHH]HEH$r+HU@H@ HHXHEH$,H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$,HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuP".H(HHP,;HH4H7Ha:H}+H7f.@HHtHH@fDfD1f.1f.+4f.Ho:@SHHo:H[3HH <6HH ~1L IDDHHzL9fDAfyuЃAHtG~fDGPW.?fffff.H?*tr:Hf.H9>*ufHwLy)fATIUHSHHt#H{ H;uHEH9C vH[HuL[]A\IH[ǐfDUSHHXH|$0dH%(HD$H1.H|$ .HT$H|$@AHL$0HT$ Ht$AHd*ufHŀwLy fUSH8dH%(HD$(1(HGXHD$HG`HHD$t@HGHH$HGPHHD$t@H>HH\$E11HHH|$ H{ Hߺl5H- `€H;HHD$(dH3%(u>H8[]@H\$pHHh}H` *HHHH|$HH{HSH0dH%(HD$(1(tcHGXHD$HG`HHD$t@HGHH$HGPHHD$t@H>HtAHL$E11HH|$LH|$BHD$(dH3%(uH0[ *H|$HH|$ H#fSHH`HHGɀdH%(HD$1H{PHC0HxHgu=HCHxHguT$H$H D$HH$[@H$?\$H$H D$HaH$dH$@Hk iH$\" }HO HH H$HCHHH$ AH H$ }H HHW}H H$ {(`HD$0HxHgHD$ HxHgH$dH3%(H([]A\A]A^A_fDLsL[;K@H$0HC C8dH$0H$8H$HKHHDŽ$8HDŽ$0HCHHCPHSPH$H$H$8c8H$@Gd$ H$@H D$HXH$@[k@H$PHl$Y H$PLH? D$HH$PH$`IHk H$`" }H HHH$`HCHH$H$pJH H$p}H HH}Hz H$pM{(H$\L H$?dF}H2 Hs0HHVBH$HS0Hs H$1~H$HMHHBH$HKXH$HCXHC`HDŽ$HDŽ$HS`H$H$H$HCXHH$^Ha H$T}HGHH}H/H$ZD}L K@H$HC C8H$H$H$HKHHDŽ$HDŽ$HCHHCPHSPH$H$H$s8H$Pt$` H$SHFD$H H$ {@H$Q|$ H$HD$H H$H$RHk H$" }HHHdH$gHCHHH$SH\H$O}HBHH}H*H$KH$W$H$HsHHV€HH$HC H$CfDH$+fDH$8fDH$6fDH$7fDH$=fDH$Dc(NfH$fDH${fDH$cfDH$K14H$HdHD$0HxHgt Ht$HD$ HxHgt Ht$H{`H{PzHC0HxHgt Ht$0HCHxHgt Ht$0H{HHgt Ht$0HAH$HHH$H3HH$HxHgH$.H$HYHHD$PHxHgHHD$@HxHgHHHH$H HHD$pHxHgt H$H$HxHgR6H$H 8H$H #HH$HxHgH$HV H$PHA H$`H, H$pH H$H H$H HH$HxHgt H$H$HxHgH$]HHHHD$`HxHgH$%rH$HP H$ H; H$@H& HG f.SHHH[f.@S^}HHHT$dH%(HD$1HL$dH3 %(u HH[kf.HPπ@SHHPπH[fDUSfHfHH,*H*H,YfH*^,#HuH}LDH)1HtfD H9wH[]fDATUSHD$dH%(HD$1Hf.LIH&HȍND E1HEHfBLDD9Aȉw AID\$AHA@AA@H9uH0A9AN%HT$dH3%(H[]A\fD~|DAD 1 fDAA9wHcAAADC IEDT$A9DD|QE11@!ЃAHtG~fDGPWN fffff.H?*tHf.H9>*ufHˀwLy3fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHhH|$@$L$dH%(HD$X1H|$0HT$H|$ ɀ HL$@HT$0Ht$ HHD$ HxHgH|$8?H|$H5$HPπ\$ǃǃǃ$f.r_gS&Y^H, D$H^$HHD$XdH3%(uFHh[]$YS&^D$xH, Ht$HH HaHH|$84H|$H*HBHHD$ HxHgtHt$CHfff.ATUHS(H0D$ $dH%(HD$(1 $HD$HH]HEHD$KHUH|$@@ HЀHXHEHT$[H{HtGu^HEH\$HHD$thLd$H{@HD$L9HHCt#MtAD$ HtG t;LcH|$HL$(dH3 %(Hu3H0[]A\ÐHH[tE1fHHPHcNuPHHHP HHHHAH}hHf.@HHtHH@fDfD1f.1f. f.HՀ@SHHՀH[fDUSfHfHH,*H*H,YfH*^,#HuH}LDH)1HtfD H9wH[]fDATUSHD$dH%(HD$1Hf.LILLDF E1JAHfDD DE9DDw AID\$EHDPH9EuʼnH0A9AN2HT$dH3%(H[]A\~lAD 1 9w EHcŃEB!IEDT$A9|gf.E11SAЃAHtG~fDGPWnfffff.H?*tHf.H9>*ufHҀwLySfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHhH|$@$L$dH%(HD$X1H|$0HT$H|$ HЀ&HL$@HT$0Ht$ HHD$ HxHgH|$8_H|$HU$HՀ\$ǃǃǃ$f.r_L&Y^H, D$H^$<HHD$XdH3%(uFHh[]$Y#L&^D$H, Ht$HH)HHH|$8TH|$HJHbHHD$ HxHgtHt$CHfff.ATUHS(H0D$ $dH%(HD$(1 $HD$HH]HEHD$kHUH|$@@ HPրHXHEHT${H{HtGu^HEH\$HHD$thLd$H{@HD$L9HHCt#MtAD$ HtG t;LcH|$ HL$(dH3 %(Hu3H0[]A\ÐHH[tE1fHHPHcNuP"HHHP,HHHHaH}Hf.@HHtHH@fDfD1f.1f.+f.Hۀ@SHHۀH[fDUSfHfHH,*H*H,YfH*^,CHuH}LDH)1HtfD H9wH[]fDUSHD$dH%(HD$1Hf.LIHHȍN1LT ID AȉD9Dr I\$A HfHL9u‰H09NaHT$dH3%(H[]@~lDDA1J@EHcŃfDADD IDDD$ADE9DjE9sE11WrfЃAHtG~fDGPWfffff.H?*tHf.H9>*ufH@؀wLyfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDUSHHhH|$@$L$dH%(HD$X1H|$0HT$H|$ րVHL$@HT$0Ht$ HHD$ HxHgH|$8H|$H$Hۀ\$ǃǃǃ$f.r_E&Y^*H, D$H^$lHHD$XdH3%(uFHh[]$YSE&^D$H, Ht$HHYHHH|$8H|$HzHHHD$ HxHgtHt$CHfff.ATUHS(H0D$ $dH%(HD$(1 $HD$HH]HEHD$HUH|$@@ H܀HXHEHT$H{HtGu^HEH\$HHD$thLd$H{@HD$L9HHCt#MtAD$ HtG t;LcH|$=HL$(dH3 %(Hu3H0[]A\ÐHH[tE1fHHPHcNuPRHJHHP\HHHHH}Hf.@HHtHH@fDfD1f.1f.[f.SHvHHP8H[Ðfff.SHv HHP@H[Ðfff.HLj;@HLj4=@ЃAHtG~fDGPW~fffff.HwLyfATUHSHpdH%(HD$h1xHIHHP(HHD$PHFHHD$Xt@H\$PHH{-H}HHP(I$HD$PID$HHD$Xt@HH{H}HHP(I$HD$PID$HHD$Xt@HH{H} HHP(I$HD$PID$HHD$Xt@HH{HuH|$HP8HuHHP@I<$HHL$E11HH|$IH|$?Hߺ0݀HlހHHHuH|$0HP8HuH|$ HP@I<$H;HL$0Ht$ E11 H|$(H|$8Hߺ0݀fH^ހHlH$Hu HHP8HuH|$@HP@I<$HHt$@E1H1H|$H?H{6Hߺ0݀HހHHƅxHD$hdH3%(uKHp[]A\fH\$P|0݀HH|݀HoHGHH|$8HHHHH|$HHfH{]HuHHH|$AHYH|$(H,H|$H뺐fffff.ATUHSHpdH%(HD$h1xu\H\$P0݀HHx'݀HH>HD$hdH3%(Hp[]A\ÐIHwH|$HP8HuHHP@I<$HHL$E11HH|$8H|$.HuH|$0HP8HuH|$ HP@I<$H[HL$0Ht$ E11H|$(H\$PH|$8Hu HHP8HuH|$@HP@I<$HHt$@E1H1;H|$HH{H}HHP0I$HD$PID$HHD$Xt@HH{SH}HHP0I$HD$PID$HHD$Xt@HH{H}HHP0I$HD$PID$HHD$Xt@HH{H} HHP0I$HD$PID$HHD$Xt@HH{ƅx HH|$HHHHH|$HiHH|$8ZHrH|$(HEHH{7HOH|$HH"AWAVAUATUSHH8dH%(HD$(1|tcHl$0݀HHo݀H}H5HD$(dH3%(H8[]A\A]A^A_fHl$_80݀HH ހHILDHl$DgDD@Do8 0݀HH }HIDLlצyHIHt$LD|$HI{DL H(HO1f.Hl$DgDD@Do80݀HH }HIDLyHIHt$LD|$HIDLXH`H2c/ HH.HAVAUIATUSH`dH%(HD$X1L`01H@H@H0nHH@H@ LH@(gLsXLH1HbHHHƃ0ƃ1ƃ2Hǃ8ǃHHǃPHǃhHXH`HǃpHǃxHǃHǃHǃHǃHǃHǃƃƃHHǃZHǃLH$HD$HD$0HHXHl$0HT$@@ HHD$HT$0H{HtGufHD$H\$0HHD$8"Ld$8H{@HD$0L9HHCt'MtAD$ HtG LcH}4HI HD$H$HHT$0HD$8t@HT$0HD$8IXIXHI`HI`HL$0HT$8H$HH$HD$0HD$HD$HD$8L5I|$HD$XdH3%(H`[]A\A]A^f.HH[E1HHPHcNuPHl$0wHHHD$0pdyIHHD$00dyL-LuL-H{ H{HtG uHPHHwHIHH$pdy6LHH$0dy*zy HHHD$0pdyHHHD$00dyuI|$+HCH.HH1IHSLHSHHPeHHH|$HfATUSHH dH%(HD$1yLHf.HL$$D$DHHMHH9tH|HQH9tEHH|$t H<$*HytHD$dH3%(udH []A\HHHPHH@HHHH놀|$Ht H<$HAVAUATUHSHH@dH%(HD$81HH|$$D$HD$HHHVH94H$tHHH|$HHlH(;?H{a|$ƃyI& .HX[HI@CHH)H~ZLHHIHH?HH)H$Hiʚ;H)HL$fI>I9t`HT$HHt|$tHD$8dH3%(H@[]A\A]A^DH|$1HH>YH|$xjy#UH|$HD$pdyrH|$HHD$0dyHhyyyPhyzyr`PhyyyY|$HtH|$Ufffff.ATUHSHvHHLHdH%(H$1FG?HEI9HLrHHǃHǃ(HH Hu HtML7HHHHQHuHHHPHuH HE8H(Hu@H0L@EH8HEPI9HPLVHHHǃPHǃhHXH`Hu`HtPLZHPH fDHHQHuHXHHPHuH`HExHhHHpLH|$L[HD$H|$0LCCfCAH|$0 H|$0CD H$LH$H|$ H|$ HHgC@H$\ H{HHC H$0LHHh`H{ H$0H$0 HD$HxHgu?H$dH3%(u;H[]A\H$0sefDH$0[H$0H HD$HxHgt Ht$(H0HH$Hk H|$0H\ f.AWAVAUATAUSHHH(HLc0HGdH%(H$x1H$L$H$HOLGLOHGL$LLHDk8HHD$ LL(IHxIFHHt@HH$1HDŽ$HDŽ$IHD$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HǃHǃ1HǃHǃLHǃHǃHǃHǃHǃHǃPH$H$L$HHHHLL$H$HH$HLL$H$HLL$H$HLL$H$LL$H$LL$H$LL$H$HLHHH$H$H$HH$H1HHD$(( HHHD$8HXHHD$0H{ƃys8HP`H{s8HPhH{ s8HPhC8H{Ls@LCHHPXH{LHP`HEH|$pLp(HC8HHD$zH|$`Lހ&yHT$pHt$`H|$PH|$P }>HH$HH$Hg1AAH$HxHgHD$PHxHgHD$`HxHgHD$pHxHgEC8H$@K0݀D$$H$@ }HIt$$LހHIDLyH$@|H{DHPpHEHt$H$Lp(UyH$LހwH$H$H$H$ ߀HH$HH$Hg1AAH$HxHgH$HxHgH$HxHgH$HxHgEC8H$PQ0݀D$$|H$Po }HIzt$$L߀HADHH$P H{DHPxHEHt$H$Lp@wH$LހMvH$H$H$H$ %߀YHfH$HH$HgAH$ZHxHgH$HxHgH$HxHgH$HxHg=.f;#zH{HPhH{HHEHt$H$0LpvH$ Lހ8uH$0H$ H$H$0߀DHH$HH$Hg1AֈH$HxHgCH$HxHgBH$ HxHgH$0HxHgH$`]0݀Dc8H$` }HDHB߀HI@LH$`H{L|$HLH{LHPpHsLHsLs8L~HxH$HHH$t@H$LH$ZH$ƃxǃ| H|$H$JH$pHpfH$Y H$xdH3%(HĈ[]A\A]A^A_HEH$LހLp(rH$߀QHH$HH$HgAAH$HxHg H$HxHg}H$ZkDHEH$LހLp(CrH$}HH$HH$Hg1AAH$HxHgH$HxHgeH$SHEH$LހLp@qH$%߀HfH$HH$HgAH$ZHxHgH$HxHgH$D$$D$$fH$mfDH$nfDH$D$$D$$fH$D$$D$$fH$D$$}D$$fH$cfDH$KfDH$D$$-D$$fH$fDH$fDH$fDH$fDH$fDH$fDH$fDH$kfDH$SfDH$D$$5D$$f.H$+H$pwjH$pHDŽ$ppdyH$pHHDŽ$p0dyH|$H蟾HhHǃ舾L H|$ HC0HxHgt Ht$OkH{(HHgt Ht$OPHXH$`HH|$0蹻H` H|$8蓿H|$(艻t70lwظwӼHH$HxHgt H$H$HxHgrH$`H$HsKHHH$HxHgt H$QH$HxHgt H$/H$ HxHgt H$ H$0HxHgJHHH$HxHgt H$H$HxHgt H$H$HxHgWH$HEHH$HxHg!HH$HxHgtH$*HbHHD$pHxHg]HH|$(H-#H$@HhHH$HxHgH$HH*H$H MHHH$PH(HH$HxHgt H$6H$HxHgt H$H$HxHgt H$H$HxHg/HHHHH$HxHgt H$HD$PHxHgt H$HD$`HxHgNH$^f.@1f.f.@HHtHH@fDfD1f.1f.HHHHtHHTfSH0H3H[f.@SH(HH[f.@[f.H@SHHH['ATIUSH?HtAID$HI\$(HhH9vfDH;HH9wI<$[]A\ڿf.[]A\f.AVAUATIHHUSH_HIHHBI|$HHIT$I$H)HL4I,I9s"LfHHH9wMt$(IA[HIT$ID$ HEID$HHE]IT$ID$8HJIL$@ID$0A\A]A^HPL9vI>I߾L9wUHH%I<$輾I$ID$&HnHfDUS0HHdH%(HD$1-Hx HHHsH}(HT$dH3%(HuH[]蒷HHE HxHgt Ht$ HHeHxHHATUHSHHvHLcGHEI9twHs LWHSHC HC8HS(HS0Hu HtFLHC HDHHQHuHK( fDHHPHuHC0HE8HC8Hu@H{@LcPEHCHHEPI9txHs`LTHSXHC`HCxHShHSpHu`HtGLgHC`H fDHHQHuHKh fDHHPHuHCpHExHCxH[]A\ATUHSHHHLcHdH%(HD$1FGHSHC CHC8HS(HS0HHtLLHC H HHQHuHK( fDHHPHuHC0H(HC8H0H{@}HSX8HC`H{PCXHCxHShHSpHPCHHtDHC`HHHQHuHKh fDHHPHuHCpHhHCxHpHH|$dH3<%(HuH[]A\H6脴HHHC@HxHgt Ht$Hs LUH{HHgt Ht$HHH5 AUATAUSIHHH9uSHH蕺L9t@H{H+Ht1W~4DWuHRHH[L9ufDH[]A\A]ùO܀Pހ,f.fHATIUSHt!HsLHkHHHu[]A\f.AVAUATUSHHGYH@HtH{PCHRHHSPHs81P LcLkHk`LLLLcLcHspHLkLk CHChHLHCpHǃHCxHH1LHǃHǃHHHspHHSPHtHBHHHHBH{(H(H9t<DHOH/HtHQHHHHQ艸H9HuL[L]A\A]A^fHC8L@HC(I9LC8t*ufHwLy賬fATUHn(SHHHN8H9thLMtI@LILAMtMAMIMMAHHHH HF8HHF8HHH[]A\fHT$HT$IHH@HHID$tH@HLHT$HT$HHtL` vfDHHH(HdH%(HD$1HFH$HHD$t @H$HD$HHHHH|$H $HT$;HD$dH3%(uH(聮ÐHHHfff.AUATUSHH8HdH%(HD$(1HPX|HH H|$1LLd$H|$菫M9ttLMI$HHLh\ I|OucH$HD$HD$HHD$t@Ht$L*H|$ H|$HHPHD$(dH3%(uH8[]A\A]fHLA@=HH|$ΪHHPHݶHH貳HʶH|$H蝪HfDAUATUSHH8dH%(HD$(1)HHNH|$1蒻LLd$H|$ ހހݓf.USHHHw@GYHtHkHHkHkHkHHspH{`HkHk [HChHHHCpHǃHCxH&HHǃHǃHHH[]@ATUHStHEHUH[]A\HHs@CYHt 1HLcLLcLcLcLHspH{`LcLc yHChHHHCpHǃHCxHDHHǃHǃHH1@HSHt1ɺvH9uH[胵AUATIUSHH8dH%(HD$(1HPHH|$D$ IHD$LfH_(I;]8tRH{Ht]HLHPHtD$ H|$D$ jHL$(dH3 %(D$ uTH8[]A\A]LD$ 뼹݀Ly+i ހmHH|$HAVAULoATUISHGLwL9u_CIl$HH}Ht#H蛚HLt[HID$L9HXHuI\$H蟥H{HtHI݀Ly0HH@HXSLHnf[]A\A]A^HH\H@USHH(dH%(HD$1HHH@HT$HHHHD$H|$Ht?{HuYH}HCPHH$HtHPHHHHPtSHD$dH3%(u~H([]H$HKPCHHt/H@HHCPtHQH~MHHHQu谲fDHHCPu듐H$CHHt"H@HCP] V!HCPVHH|$HtBH蚛f.SHGHH~6HHHGt[@1ɺpUpS蟣H9uHH[H@ر轲HHHtHBHHHtHPH~HHHPt HH葱覱f.fUSHHHdH%(HD$81HHLJH|$ D$0HD$(HT$(HD$ 1ɾHHHHǃH\$ D$0HD$(覢H90HHH@H@t@H@ H@(HP`HT$HX(HHC@HH`H@HD$ H|$Ht{HtVH{PCHHH<$Ht]H%HD$ HT$(HHHD$8dH3%(uHH[]H{PtH<$Hu讏ůگHHH|$HtHH|$ H/f.DHSHt1ɺpXVFH9uH[述SHGHH~6HHHGt[@1ɺp^\H9uHH[H@8oSHGHH~6HHHGt[@1ɺp[Y诠H9uHH[H@9SHGHH~6HHHGt[@1ɺpXV_H9uHH[H@蘮USHHHdH%(HD$1Htw1ɺp[YH91Htp[YHH9HuHL$dH3 %(H[]fDHtuHk(HUYHH 0EHΉHH@t@H@ Hh(HHE@H`H@H$H<$HtVS@H9rsDHt1ɺp[YHH9uHk(Ht*UYHHZEHHH贌H脯H<$HtHT@USHHHHt1ɺpUpSnH9ueHut H[]@Ht1ɺpUpSH7H9u.Hk(Ht*UYHHEHHHK衭膈fDUSHHHHt1ɺp^\辝H9ueHut H[]@Ht1ɺp^\H臝H9u.Hk(Ht*UYHHEHHH裬7ևfDHHtHFHH7HtHPH~HHHPt HHDYf.DHATIUHSHt1ɺpXV轜H9HCH}HEHtHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺpXVHJH9uSHH[]A\H@DI$HI<$tH[]A\}D1LB譬f.HATIUHSHt1ɺpUpS轛H9HCI $I$HtHAHHHHAHCHtvHuH9]tRHC[]A\DH~wHHHCu1ɺpUpSH2H9u`HH[]A\H@DHEHhH}tH[]A\D1H't7HATIUHSHt1ɺp^\蝚H9HCI $I$HtHAHHHHAHCHtvHuH9]tRHC[]A\DH~wHHHCu1ɺp^\HH9u`HH[]A\H@DHEHHH}tH[]A\D1H4HATIUHSHt1ɺp[Y}H9HCH}HEHtHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺp[YH H9uSHH[]A\H@DI$H@I<$tH[]A\D1L%Sf.USHH(dH%(HD$1HHH@HT$HHHHD$NH|$Ht{HuYH}HCPHH$HtHPHHHHPtSHD$dH3%(H([]H$HKPCHHt/H@HHCPtHQH~aHHHQu fDHHCPu듐H$CHHt6H@HCP])݀Ly g貥蛧HCPBHH|$HtHfDATUHSHH dH%(HD$1H1ɺpXVH9(Httv1ɺpXVHҖH9HtHTHtHǸHL$dH3 %(H []A\fHtuHHh(HUYHH0EH螀HH@H@t@H@ HHh(HHE@Hb%oHH\$HCHt$H@H|$Ht(Jf[HX(HSYHH/CHHHfD#Hh(HUYHHEH0HH@H@t@H@ HHh(HE@Hb1ɺHH9HHCHT$H\$HHHHCH|$Ht-}Hu"H}PtH<$HtHH}PEHHH<$Hu腂HH|$HtHpHHZHHaHLjHߋHHH|$HtH辋HHbH臈H蟋*f~赤fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPW鞓fffff.HewLy}fSgHcH HdH%(HD$1IHAh}HOHHD$dH3%(uH [謀HHHYSHHHHLJ0mdH%(HD$1~HHxHguUHHxHguQHHxHguMH{, H{}HD$dH3%(u7H[DHt$~@Ht$n@Ht$^fDSH'H[Nfffff.UHAWAVAUATASHIEMHHmHGdH%(HE1HGHGHHHH@ݪ HHǃgHǃgLXyIEDDHIEHHt@H@H`&}H@HpcH?HcH}HII4$LHVH訐H@HcD談H蟑cHI誐DLOHSLHH cLILh(\HLAՉHHxHgALHH}LILho\1HLAՈHHxHg LHHpHILhwH}L \HHLHAHHoHHxHgHHxHgHHxHgLHH0H}ILh(ђ@HLAHHyHgoHDH HHH(tBH@H@HDH8g HL H8AVH@HME1^XHHKZHHDžHCHCH0HDžHSH8H0HxDyHHx4yH@蘛 I}yHCHHHcLL蹄L豎/cHI輍LL}}H蟍LWHCHkHǀHCHSHǀHCH;HǀHCH#LHHǀH}LILh(eYHLAHHyHgH{HQHCHH0RHcL荃H0聍?cHI茌LL{}HoH0#HpǃHxHgH`HxHgHEdH3%(He[A\A]A^A_]H@H@H@HH@HH@HH@88tH@HfH`H@LH@4訛xIH&vHHxHgt HpHHxHgt HpHHxHgt HpH@* H{uLɁIIH`HxHgWH_mFIHHxHgu>HpHxHgtH_1IIHHxHgtH@IHHxHgtIHHxHgtHItnHI`ZIIHHxHg7pIHHxHgt H@`HHxHgFH@<5H@I訖 I}/tIL LI賈H0I蟈I념@ATUHSHHHdH%(H$14j H|$HA4j Ht$H|$ D蒢 D$ H{ HkCHD$ HpՂLc(HD$0I9txHs8L{Ht$@HS0HC8HCPHS@HSHHtFLݺHC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@=D$hLchC`HD$pI9HsxLH$HSpHCxHǃHHHtPLHCxHDHHQHuHHHPHuHH$HH|$ 謔 HD$HxHgH|$ HH{HHt$ "KH|$ h H|$ _Hc}H|$ 蚇$zHH襆HHk H|$ PH$dH3%(u!Hİ[]A\ÐHt$ v[sH|$ H H}HHD$HxHgt Ht$3H[}H|$ H螓 H|$ H菓 f.f.@1f.SHƸHmH[f.S}HHHT$dH%(HD$19HL$dH3 %(u HH[rf.HHtLPڕf.fATUHSHvHHLcHdH%(HD$1FGlHSHC CHC8HS(HS0Hu HtGL藷HC H fDHHQHuHK( fDHHPHuHC0HE8HC8Hu@H{@KlHSXEHHC`H{PCXHCxHShHSpHu`CHHtEHC`H HHQHuHKh fDHHPHuHCpHExHCxHD$dH3%(uH[]A\H,mqHC@HxHgt Ht$Hs LH{HHgt Ht$HzHHffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWfffff.H@pwLymfSg nH HdH%(HD$1yH葃h}H蟂HWHD$dH3%(uH [oHH1HySHHHHLJ0ydH%(HD$1QmHHxHguUHHxHguQHHxHguMH{| H{mHD$dH3%(u7H[DHt$~@Ht$n@Ht$^ofDSH'H[ufffff.UHAWAVAUATASHIEMHHyHGdH%(HE1HGHGHHHH@- HHǃgHǃgLhIEDDHIEHHt@H@H`&}SH@Hpc;H? nUwHI}HITI4$LHVDHH@ nDvHcHIDLrHLHH cLILh(LHLAՉHHxHg1LHH}LILhK1HLAՈHHxHgLHHpHILhfH}L]KHHLHAHHtHHxHgHHxHgHHxHgLHH0H}ILh(!@HLAHHyHg_HDH HHH(tBH@H@HDH8HL H8AVH@HME1{XHHKZHHDžHCHCH0HDžHSH8H0HxhHHxhH@ I}ohHCHH nLL tL~/cHI }LLQl}H|L|H{H[]H{HD]LHH}LILh(HHLAHHyHgH{H WHCHH0R nLsH0}?cHI|LLSk}HI{}L{I4$LHV{H0{HpǃHxHgH`HxHgHEdH3%(He[A\A]A^A_]@H@H@H@XH@XH@XH@88H@HvH>H@\H@D"gIHeHHxHgt HpHHxHgt HpHHxHgt HpH@芇 H{eL)qIIH`HxHgWH_}FIHHxHgu>HpHxHgtH_AIIHHxHgtH@IHHxHgtIHHxHgtHIxnHIxZIIHHxHg7pIHHxHgt H@pHHxHgFH@L5H@I I}cIL LIxH0IwI념@ATUHSHHHdH%(H$1Y H|$HAY Ht$H|$ D D$ H{ HkCHD$ Hp5rLc(HD$0I9txHs8LHt$@HS0HC8HCPHS@HSHHtFL=HC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@qD$hLchC`HD$pI9HsxLhH$HSpHCxHǃHHHtPLnHCxHDHHQHuHHHPHuHH$HH|$ HD$HxHgH|$ HH{HHt$ rxH|$ ȃ H|$ _ nmH|$ v$zHHvHH:[ H|$ uH$dH3%(u!Hİ[]A\ÐHt$ [d7cH|$ HjuHlHHD$HxHgt Ht$CHlH|$ H H|$ H f.f.@1f.SHƸH\H[f.SnHHHT$dH%(HD$1xHL$dH3 %(u HH[Kbf.HHtrOPTf.ffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWsfffff.SHdH%(HD$1@HHt+HHxHgtHt$HuHu@HD$dH3%(uH[affff.SHHdH%(HD$1@HHt+HHxHgtHt$HHu@HD$dH3%(uH[`fff.H|wLy]fSh@zH HdH%(HD$1iHsh}HrHgrHD$dH3%(uH [ `HHArHiSHHHHLJ0dH%(HD$1a]HHxHguUHHxHguQHHxHguMH{ H{]HD$dH3%(u7H[DHt$~@Ht$n@Ht$^'_fDSH'H[efffff.UHAWAVAULoATSHIEMHHHGHGLHXPdH%(HU1A HHǃgHǃgLXPDIHIFHHt@H@Hp&}ctH@HcKtH@@zegHYq}HIdpI4$LHVTpHpH A@zD gH pcHI pDLbH oLXH cLILp(!<HLA։HHxHgLXH}LILp;1HLAֈHHxHgLXHHILpVH}Lm;HHLHAHHdHHxHg7HHxHg7HHxHg7LXH0H}ILp(1r@HLAHHyHgHDH HHH(tBH@HLDHPHHPL AVH@HE1XHHKZHHDžHCHCH0HDžHSH8H0HxXHHxXH@z H HxXHCHcH0I@zLdH0 n/cHImLLY\}HlH0lH{HH{HH{HH{HLXH}LILp(8HLAHHyHg#H{HGOHǃHxHg HpHxHgHEdH3%(He[A\A]A^A_]H@tH@\UH@DH@,H@H@PPH@2H@XXH@{eXIH HxUHHxHgt HobHpHxHgt HoBHUHHxHgt HHHxHgt HHHxHgt HLw H{5ULMaISIkIHHxHgH@H@IRw HIniII{IHHxHgIIHHxHgt H@HHxHgt H@HHxHgG2IHHxHg'IIIHHxHgH0I{hH IghfATUHSHHHdH%(H$1J H|$HAJ Ht$H|$ Db D$ H{ HkCHD$ HpbLc(HD$0I9txHs8LKHt$@HS0HC8HCPHS@HSHHtFL譚HC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@ bD$hLchC`HD$pI9HsxLؔH$HSpHCxHǃHHHtPLޛHCxHDHHQHuHHHPHuHH$HH|$ |t HD$HxHgH|$ HH{HHt$ ҝH|$ 8t H|$ `@zt]H|$ jg,zHHufHHK H|$ fH$dH3%(u!Hİ[]A\ÐHt$ [vSH|$ HeHR]HHD$HxHgt Ht$H+]H|$ Hns H|$ H_s f.f.@1f.SHƸHPMH[f.S}HHHT$dH%(HD$1 iHL$dH3 %(u HH[Rf.HHtbPuf.ffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWndfffff.H?*t_Hf.H9>*ufH@wLySNfSbH HdH%(HD$1ZHdh}HcHcHD$dH3%(uH [LQHHcHZSHHHHLJ0dH%(HD$1NHHxHguUHHxHguQHHxHguMH{p H{SNHD$dH3%(u7H[DHt$N@Ht$>@Ht$.gPfDSH'H[Vfffff.UHAWAVAULoATSHIEMHxHHGHGLHhddH%(HU1{ HHǃgHǃgLIdDIHIFHHt@H@H&}eH@HceH?XHb}HIaI4$LHVaHHaH @DKXH ?bcHIJaDLSH `LhH cLILp(a-HLA։HHxHgiLhH}LILp-1HLAֈHHxHg2LhHHILp1HH}L,HHLHAHHVHHxHgHHxHgHHxHgLhH0H}IL`(qc@HLAHHyHgHDH HHH(tBH@HLDIHL H@ATHEL1XHHKZHHDžHCHCH0HDžHSH8H0HxIHHxIH@Gl H HxIHCǃHH0ILSUH0G_/cHIR^LLM}H5^H0]H{HeH{HNH{H7H{H HHxHgHHxHgHEdH3%(He[A\A]A^A_]H@H@H@| H@d H@L H@h.hLH@2H@m-JIHHxHgt HHGHHxHgt HHHxHgt H~HHxHgt H^Li H{-GLESIH HxGHHxHg0HI7H0Ir[H Ia[HIP[IIkIHHxHgt H@HHxHgt H@~HHxHg4H@Z#IHHxHgIIIHHxHgIHHxHgH@I5h I:ATUHSHHHdH%(H$1; H|$HA; Ht$H|$ DRt D$ H{ HkCHD$ HpTLc(HD$0I9txHs8L;Ht$@HS0HC8HCPHS@HSHHtFL蝌HC8H@HHQHuHK@ fDHHPHuHCHHD$XHCPHD$ H{XHp@SD$hLchC`HD$pI9HsxLȆH$HSpHCxHǃHHHtPL΍HCxHDHHQHuHHHPHuHH$HH|$ lf HD$HxHgH|$ HyH{HHt$ RH|$ (f H|$ ZdOH|$ ZY)pHHeXHH= H|$ XH$dH3%(u!Hİ[]A\ÐHt$ f[hEH|$ HWHBOHHD$HxHgt Ht$#HOH|$ H^e H|$ HOe f.f.@1f.SHƸH@?H[f.S}HHHT$dH%(HD$1ZHL$dH3 %(u HH[Df.HHt2Pgf.ffffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPW^Vfffff.SȤHdH%(HD$1@HH8t+HHxHgtHt$HuH8u@HD$dH3%(uH[}Cffff.SHdH%(HD$1@HHt+HHxHgtHt$HHu@HD$dH3%(uH[Bffff.SHdH%(HD$1@HHt+HHxHgtHt$HuHu@HD$dH3%(uH[}Bffff.SHHdH%(HD$1@HHt+HHxHgtHt$HHu@HD$dH3%(uH[Affff.SHdH%(HD$1@HHxt+HHxHgtHt$HuHxu@HD$dH3%(uH[}Afff.HwLy=fSiH HdH%(HD$1JHTh}HSHGSHD$dH3%(uH [@HH!SHJSHHHHLJ0ЙdH%(HD$1A>HHxHguUHHxHguQHHxHguMH{l` H{=HD$dH3%(u7H[DHt$@Ht$@Ht$@fDSH'H[Ffffff.UHAWAVAULoATSHIEMHHЙHGHGLHXTdH%(HU1!k HHǃgHǃgL9TDIHIFHHt@H@Hp&}CUH@Hc+UHDEHH9R}HIDQI4$LHV4QHPHEDGHQcHIPDLCHPLXHLILp(v8H c FHLA։HHxHgLXHLILp8H}E1HLAֈHHxHgLXHHILp7HL7H}JEHHLHAHH|EHHxHgDHHxHgDHHxHgDLXH0H}IL`(R@HLAHHyHg HDH HHH(tBH@LDLc~H HH@AVHEIL1HXIXHHKZHHDžHCHCH0HDžHSH8H0HxU9HHxE9H@[ I~09HCHTLXMLLDLN/cHIMLL =}HMLaMH{HH{HH{HH{HHCHH0TLCH0M?cHILLL?<}HLH0LHǃHxHgHpHxHgHEdH3%(He[A\A]A^A_]DH@H@7H@H@lH@TH@X6XH@0H@\%9IHHxHgHHxHgt HoHpHxHgt HoH^6HHxHgt HnHHxHgt HNHHxHgt H.LfX H{5LBIHHxHgt H@HHxHgH@HI*JHIJIIH HXHXMHE5vIHHxHgvqII!IHHxHgAH|$ H$zHHGHHJ, H|$ FH$dH3%(u!Hİ[]A\ÐHt$ &[WG4H|$ HzFH=HHD$HxHgt Ht$H=H|$ HT H|$ HS f.f.@1f.SHƸH-H[f.SHHHT$dH%(HD$1IHL$dH3 %(u HH[[3f.HHt2PVf.f H P PÐЃAHtG~fDGPW.Efffff.HwLyC/fATIUHSHHt#H{ HAuHEH9C vH[HuL[]A\IH[ǐfD%‰%1Љ1Љ1Љ1Љ1Љ?01Љ 1ʉ111Ѓ?9Ð@AWAVAUATUSHHM8H)dH%(H$1H(LP L(D EL]AA1HIH41IS0fD HH°H9tff.v+ HH°H9uƃU1)~88RH@P4ƇUfD8HL]EA@PD &"H HHHfAXD0fH@RHL$:DUHEHl$PL$HEHHYf.j&CXi& f(D$  @`\$f(Yd$  E1<tTtD Y D$\P1;`\uuI|$l$ǃ\t$ D$\$H$D$$H$$$HH$dH34%(HH[]A\A]A^A_D$ X  l$t$ D$ @`@H Ll$@l$LHHD$(l$@2H|$(Lt$t$@2H|$(L D$@2f.g&LpLJ1Hǃ@fHffJ) R"LMƃ @HLl$@L 0H(L@H06L@KHI?LL% L? fǃ8fJ "HHPHHEX@0fH@qED+0AqLl$@@L L 6L@H3LHK$ H3DH,L>ǃ8ƃ<ƃ H @L]DWD+0Ap%HL]<H(ƃUAk`H0l$ H @WD1fJPt @Lt L@t ?LHuAH О"ƃTLǃLPL "LHf(L$ Y  aƃTL$Ll$@ƃ<@L L 4L>gH1LHM" xH1D$H6}H1L<HL`@LHD$(u)L==H01Ht$(H#1L;H|$076)LH;H|$065H@3HH|$0#>H|$("3`ÐATUHSHHHdH%(H$1$ H|$HA$ Ht$H|$ DU D$ H H  HD$ Hp5L HD$0I9H0 LXHt$@H( Hǃ0 HǃH H8 H@ HtRLmH0 H HHQHuH8 HHPHuH@ HD$XHH HD$ HP Hp@4D$hL` X HD$pI9Hp LgH$Hh Hǃp Hǃ Hx H HtPLnHp HfHHQHuHx HHPHuH H$H H|$ \G HD$HxHgH|$ ~@0H|$ x:2蚁HI9HL H|$ .9H H|$ @,0H|$ ":HH-9HHb H|$ 8H$dH3%(u$Hİ[]A\fHt$ f+\&HHD$HxHgt Ht$=H/H|$ Hh8H|$ H)F @AUATUSHHh H|$0@dH%(HD$X11/H|$0'9כHI28L(&H|$07 tH8 I9t%HD$XdH3%(Hh[]A\A]fDH H'2D H$gDD1)HD$@HpnE$H$LD$UH1HI)HRHH3H$HxHgH, H ǃ 9H H H 6HHH Hx19H|$@L D -H|$7* HH6DH$ =pHH6LH`+H|$66l@-HHxw 9`@Ht$0#HHHtTc-HH$IHxHgt Ht$0LH|$HI5H|$0H5H-4HpHD$ HD$ kHxtH,H|$ 27H|$0@Hŋ "H|$0V6HI*H_#0H2*HH'*H|$04H|$ 0/$H|$ 7H|$0H4H|$ /.H6,HAWAVAUATIUSHEMHH|$`HL$D$0dH%(H$1$H|$@$HT$.H|$08HL$`HT$@Ht$0H HD$0HxHg H|$HVH|$hLHpH)HHHD$H Hǃ Hǃ HM H Hǃ gHHD$IEIUHHT$`HD$ht@HT$`HD$hH H H|$hH H HL$`HT$hD L H|$@LA Ht$@H|$`DKM Ht$`HniH|$`@ HD$@HxHgHD$11E1ft$Rf|$TfL$PAHhfDD$VE1HD$PAfl$^fDL$XfDT$ZfD\$\HHHD$XD ǃ H0HPPHHHHBHH9tfuHH9uHPHH9u11Hǃ(fHǃ8H$dH3%(Hǃ0Hǃ@fJHǃ ƃ<ǃLǃPƃTHǃ Hǃ ƃ ǃ\ƃUǃXǃ`ǃ Hǃ H[]A\A]A^A_Ht$/Ht$` H|$`I> HD$@HxHgt Ht$0nH|$*H HxHgt Ht$0FHLK> H H|$ HHrHHHW+H'HHD$0HxHgt Ht$/H|$HfH|$h\Ht'HHI9HZHhHII UHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@HxRH@Hs DžXHDž`HDžxHPHHhHptNHxbH`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@CHHs`EHEHEEH@HHPXHUHUtEHxPLcHEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@ (HL EHATH@MELHH%XLHDž0ZIIFIVH0@@ HЫHXIFH0H{HtGuwHH0H@HH8L8H{@H0I9HHCt#MtAD$ HtG t`LcH0HxQIHH@: H]dH3%(HHe[A\A]A^A_]HH[tE1HHPHcNuPHDHHPV'IHL IH@#: H#HL Hg&HHHHEHxHgt H0H@H`Hx^HHHxHgtH0vHHzf.ATUSHH L HHHdH%(HD$1HlHKHHǃ rHǃ @rHǃ :H8 H Hǃ q+HWHWH H@H Hǃ tv#H HxHgH 8 H H H HǃЪ踊HXHH襊H(HH6HHsHHHX%HD$dH3%(uGH[]A\H LHxw ,f.Ht$fff.SHH[f.@f.@1f.1f.f.HATIUSHt!HsLHkHHHu[]A\f.AVAUATUSHHGYH@HtH{PCHRHHSPHs81P LcLkHk`LLwbLLcLcgbHspHLkLk bHChHLHCpHǃHCxHbH1LHǃHǃHHbHspHbHSPHtHBHHHHBH{(H(H9t<DHOH/HtHQHHHHQ9H9HuLia[L]A\A]A^YafHC8L@HC(I9LC8tI]IL'LHHHHT$HHJD$,H9t$HXHD$HT$Lh(HXHD$H@0cH\$H{ HC(HLhLk(HXLH_H_L L|$HH|$@H H|$@H$dH3%(uyH[]A\A]A^A_H$HHtH$HtzHHH|$@HtYLQHi HH@AWAVIAUATIUSHHXHnH+.H|$ dH%(HD$H1 H|$ HIH^HHHKH|$ QImI;mHD$ Lxf.LeHHH$HD$LHD$DH<$Ht$1H9HskH2Q3ֶH9uީt?HtH I9mwHD$HdH3%(HX[]A\A]A^A_@ELLD$ nHt$ L1H|$(Htu@j~HVH@L0kMA|$8t+At$C@jHsH<$;f.LI$ H@0H=PtLH|$ HH4 HH<$HtH VH|$(HHtfff.AWAVAUATLUSHHdH%(H$1HHHHD$IHHD$HH;HA0tHHHHHHH)HH9HD$xhLLt6HHH9t#fHfWq"@H9uHT$PLLHD$PHD$XHD$`+HT$pHt$PLHD$pHD$xHDŽ$HhH$Ht$pHDŽ$HDŽ$HDŽ$H$H+$HH:H$8Hl$xL|$pL9t%fIHtI L9uHl$pHtHH|$PHtL$Ht$LHHt$Np^x1P1;uX@$P$Q$@ǃ$H$XH|$L$`$hHH$dH3 %(sH[]A\A]A^A_1H)fH*Y$HD$1 Ro"fYH`Xf(L$HƃHLHpHXx1H|$ HDŽ$HDŽ$HDŽ$DnH|$ dHH)pHLDHaH|$  H$H$H)HHH$A1L$LpH$)fH$H$DH)HH9AIH<$IJt2H4$LLL=H$HtH$H$ƃH)HH9B0LD$ T<LL<'@j$F @jH HH|$0D$8HEPHD$0HM@HE0HH9Ht,HLHH`HE0H|$0LuxLH$Ld|$8t H|$0L;kLL;H( (@jN @jH HH|$@D$HHEPHD$@HM@HE0HQH9HtkH$HH$HPH$HPH$HPH$HP H$HP(H$HP0H$HP8H$HP@HHHE0H|$@DH}x|$H`H|$@QLHfsH$HIH$ L 8HH L1 D$ H$\H|$pRH|$PHtHL$Ht$LHHHt$Np^xW@toHcD$ H _j"YN`H)fH*Xf(Y$1ɾ\;&\Xf(HHcD$ pLHMH$HHD$LHp0JiHfHH H*XGHfHH H*XHH$HttH$H|$pH|$PHtNHfHHHH<$H밀|$HHtH|$@ -BPhyzy|$8HWH|$0HHiy1H$HH%D$ 1H|$ H%AWAVAUATIUSHIιHH|$@D$dH%(H$1RH|$09HT$H|$ HL$@HT$0Ht$ H.HD$ HxHgMH|$8L(H|$HHPL HHǃgHH$HHǃHǃHǃHHD$HǃHǃ(@Hǃ0Hǃ8Hǃ@HǃHHǃPHǃXHǃ`Hǃ H HHHH,{HEH@E1HUH`=HHHxHgtH0vHHZf.ATUHSHHHdH%(H$14 H|$HA4 Ht$H|$ D D$ H0H((HD$ HpL8HD$0I9HHLhHt$@H@HǃHHǃ`HPHXHtRL/HHH HHQHuHPHHPHuHXHD$XH`HD$ HhHp@ D$hLxpHD$pI9HL)H$HHǃHǃHHHtPL0HHfHHQHuHHHPHuHH$HH|$ l HD$HxHgH|$ DH|$ * HHDHHHlHH H|$ H$dH3%(u#Hİ[]A\Ht$ &[H|$ H HD$HxHgt Ht$H+HH|$ Hf.@1f.1f.f.SHuH{(u'H.u [ùPhyzyo DATUISHnHH+.HHGHGHHHu\HHHCHkMD$I<$I9t6HHf.Hɋ2t1HHI9uHI)IIDHC[]A\ÐH?H9w HyfATUISHoHH9t DH{HtH H9uI,$Ht[H]A\l@[]A\H9AVIAUATUHSt}LnHH?HEMI)H)LHHH9wfHMHH)HHH9v0HHHL9t%@HɋtHHI9u HILe[H]A\A]A^@E1Ht"H?H9L]H}IL9HLtHɋtHHI9uHthMLuLeLH-Lep@HMH}MnI6HH)f.fATUISHoHH9tDH;HtHH9uI,$Ht[H]A\D[]A\SH_Ht&HHH@H=0g[uH[fD[fD[DAUATUSHHLEH?LH)HHHHH9HHHt$LEH}IHt$Ml$LH)LtL9t2HLfDHɋ2t1HHI9uHGI)IOl HtLLeLmH]H[]A\A]fDdH?H9JHHDAE1^AWAVAUATUSHHLuH?LH)IIMrK$I9pILHt$LuH}IHt$M} LH)LtTH@H@H@HVHPHFHNHPHHHVHNHPHHHVLuH}L9HLHtLHBHBHBHAHBHAHqHBHrHAHqHBHrHAH H L9uH H]I)IO|5@LuI9t DH{Ht H I9uLuMtLMLmL}LeH[]A\A]A^A_fA HH9}IHwA E1HGH;GtfHtPH@H@H@HVHPHFHNHPHHHVHNHPHHHVHGH HGf.AWAVAUATIUSHHHoHHHWHH)HHH)Hv[`HEHC0Ht,HLHHCHHPHSHH@H`HC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9 H<HIHs(L)HL4HCHHPH)HHHH;L;HkILs(IKl.HkHHCH`HC HEHC8H`HC@L)HL4L9vAHUH)HHHtLIb듽:fDLHcHUIH)HHHXLH)LEf.AWAVAUATUSHHHLgHHHWLH)HHH)HID$HC0HtGHUHHUHPHUHPHUHPHU HP HU(HP(HU0HP0HU8HP8HU@HP@HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fDHw(LH)HLpLhK6H9HLdHI9J<LIHs(L)HL4HCHHPH)HHHH;L;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLI1A1DL[IT$IH)HHHOLH)L<@HfDЃAHtG~fDGPWnfffff.SHܶHdH%(HD$1@HHڶt+HHxHgtHt$HuHڶu@HD$dH3%(uH[ffff.S޶HdH%(HD$1@HHxܶt+HHxHgtHt$HHxܶu@HD$dH3%(uH[ fff.HwLyfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUSHHLHHÁH dH%(HD$1HHHHǃrHǃ@rHǃZHHHHǃqH8VH9VHH@HHǃtHHxHgurH H:H`HxHguVHHD$dH3%(uJH[]A\DHLHxw fHt$@Ht$fffff.SHwH[fffff.AWAV@AUATIUSH8HT$@HD$w@HD$c@H$PLT$LL$IL$1DAy1f1uDڍ4 [1f1كuAA EHH@u1f1Ƀ@yAAD1كuɻ[1fAAD1ڃuAAvHHjf.ATUHSHHHdH%(H$1D H|$HAD Ht$H|$ D D$ HHHD$ HpL HD$0I9H0LxVHt$@H(Hǃ0HǃHH8H@HtRLH0H HHQHuH8HHPHuH@HD$XHHHD$ HPHp@D$hL`XHD$pI9HpLH$HhHǃpHǃHxHHtPLHpHfHHQHuHxHHPHuHH$HH|$ | HD$HxHgH|$ H袽H|$ 2蚁HHHHث H|$ NH|$ HZH|$ PHH[HH萫 H|$ H$dH3%(u"Hİ[]A\Ht$ V;茳HHD$HxHgt Ht$-H%H|$ HH|$ HY @AUATUSHAHXHH|$ dH%(HD$H1fH|$ \כHHgDH\H|$  tHH}t)HD$HdH3%(HX[]A\A]f.H HWDH$gDD1)HD$0Hp E$H$LD$EH1HI)HRGHHLH$HxHgHHǃHHHHHHHx1H|$#HLDںH|$* HHDHб =pHHLH萸H|$fh@-HHxw A`@Ht$ HHtW薺HH$IHxHgt Ht$ uHLH|$HIH|$ HHFHHRH|$ 'HHŋH|$ H蝷H賰0H膷HH{H|$ Q|NHoH跹H|$ H*f.@1f.1f.Kf.SH_Ht&HHH@H=[uH[fD[fD[DAWAVAUATIUSHHHoHHHWHH)HHH)Hv[@聫HEHC0Ht(HLHHCHHPHSHH@H@HC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9 H<ߪHIHs(L)HL4HCHHPH)HHHH;L;HkILs(IKl.HkHHCH@HC HEHC8H@HC@L)HL4L9vAHUH)HHHtLIR듽:fDL8cHUIH)HHHXLH)LEf.AWAVAUATUSHHHLgHHHWLH)HHH)Hv{葩ID$HC0Ht/HUHHUHPHUHPHUHPHU HP HU(HP(HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fHw(LH)HLpLhK6H9HLdHI9J<ϨLIHs(L)HL4HCHHPH)HHHH;زL;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLIAA1DL [IT$IH)HHHOLH)L<ԥ@AWAVAUATUSHHHLgHHHWLH)HHH)H}ID$HC0HtGHUHHUHPHUHPHUHPHU HP HU(HP(HU0HP0HU8HP8HU@HP@HCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_fDHw(LH)HLpLhK6H9HLdHI9J<蟦LIHs(L)HL4HCHHPH)HHHH;訰L;LcILs(IOd.LcHHCHHC I$HC8HHC@L)HL4L9vIIT$H)HHHtLIA1DL[IT$IH)HHHOLH)L辥<褣@AWAVAUATIUSHHHoHHHWHH)HHH)Hv[QHEHC0Ht3HLHHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_@Hw(HH)HLpLhK6H9HHlHH9 H<诤HIHs(L)HL4HCHHPH)HHHH;踮L;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLI"듽:fDLcHUIH)HHHXLH)LףE轡f.ЃAHtG~fDGPWnfffff.HʁwLy胣fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDATUISH H HjdH%(HD$1H)HtH9wHR8~H= tH`ǁ胯H{ āHI膸āLtLj4xǁHHUHHHHD$dH3%(u8H []A\ùǁe0tIl$I+,$HEuHH誷H"fUSH(ǁHdH%(HD$1萮H舸,āHH蓷H艥HAHD$dH3%(uH([]HHH蒮ff &G OG(GGÐ@fffff.fG G(GGUSHHdH%(HD$1$yD$[蘠HHHSHkuHHH0HD$dH3%(HkHCuH[]أHHmH腭fUSHHH_HtHH>H]HtHHH[]H[]ÐSHHGH;H{[1AWAVAUATUSHHHGLg(LwL HD$HGHMl$HXL9vI}I裩L9wHD$Lu8L}@LeHHE0H[]A\A]A^A_f.fffff.AWAVIAUATUSIHH|$pdH%(H$1HR8~XH= tH|$@ǁ軫H|$@豵ǁH褩Ht$HD$譴H|$@cI.E1I;nAAHI9nuDHD$pуHxD ASDuIGI;GiHtIGHIGHR8H= tHD$pH|$ HpxH|$PǁĪH|$P躴Ht$ HHVɳAāH蜨IH0LHPIDHxhIELLHPBൃB&H|$P,HD$ HxHg8HT$PH|$0ԨHt$0HD$pHx`HV苭1$H$tHNHD$p1HxHD$0HxHg E1AHI9nbHR8H= tH|$` ǁ耩H|$`vAāHiHH0HHPHDHx5HHAHHPBൃBHH HHxHH|$`HXcױH|$p譚H$dH3%(H[]A\A]A^A_@Ht$`I+H'HAtHIH9LFLMGI?J(LhHT$LH)Ht MGI?I9t-HH@H2t@1HHL9uH)I?LlHt H$WH$IHD$MoIGHt$`Tǁexǁe ǁepʜ-賦HHD$0HxHgu6H|$pH謧HH|$PHHD$ HxHgtHt$`~H|$`HH|$@H虝HfHp鴲@Hp鴲@Hp鴲@Hp鴲@AWAVAUATIUSIHH|$`dH%(H$1觫HRD$8~Y1H= tH|$0ǁDH|$0:ǁH-Ht$HLj\$7H|$0I,$I9l$HfHI9l$I$HuH)HىуD$HD$`HxӜuIEI;E|HT$tIEHIEHR8H= t HD$`H|$Dt$HpH|$@ǁHh $H$`LDŽ$HDŽ$$DŽ$$H$`Ht {H$HH;$PH|$(H$+@ǁe௮r8DeafDH$@H9$HrL$LpfDAuCLzHsxHEHu(LH$HEH$HEH$HEH$E $H$L=H$HtyH@H9$HHE(Ɓ@jDm D`A褅D@js ƁHI肅DLws ƁHIbI$H@MMA}8LwIE H@0H=PLH$@HD$(HH|$(HH|$@.H|$HDH$HtxH|$`HtxD$$QHH9LgnIL$H$ǁe诮vpNIrHH|$(H|$@}H|$H蓊H$Ht1xH|$`Ht"xH:{HH$HD$@kHH|$PH葃H$ H/H$HHhw^qHmH$HHWwMH$H YHjM9tI~Ht`wI M9u}HH$HD$HH}H$ H wH$HHwH$`HHfAWAVAUATIUSHIιHH|$@D$dH%(H$1rH|$0rHT$H|$ ƁHL$@HT$0Ht$ HnHD$ HxHg=H|$8L'mH|$HmH΁L HHǃgHH$ m(%HHǃHǃHǃǃHǃHǃHHǃƃHD$iHǃHǃ(@Hǃ0Hǃ8Hǃ@HǃHHǃPHǃXHǃ`Hǃ jH HHHH,jHEH@E1HUH`=ZZHH0H8HEH(ǃhHHPHHHXHpH.DLa H|$ LAa Ht$ H|$@D Ht$@L@H|$@膍 HD$ HxHgH|$0KǁvH|$0袀ȁHtLHd H|$0`LHǃxǃHxH$dH3%(H[]A\A]A^A_fDIcAAֶt;Dǹ15LtljƁ@EƩuZHt$@ Ht$HHHxHgt Ht$L3 H{yHuIHL襥HyH|$/HHt~rH<$exHHexH|$@Iċ HD$ HxHgtHt$0XH|$0I}tHwHteHrHǃHǃ mxIHH|$8hH|$HhHtHH#H%HHHD$ HxHgtHt$jHNwfUHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@HxdH@Hs DžXHDž`HDžxHPHHhHptNHxgH`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@dCHHs`EHEHEEH@HHPXHUHUtEHxP謰HEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@eHL EHATH@MELHHXLHDž0ZIIF,eIVH0@@ H΁HXIFH08fH{HtGuwHH0H@HH8L8H{@H0I9HHCt#MtAD$ HtG t`LcH0HxeIeH@ H]dH3%(HHe[A\A]A^A_]HH[tE1HHPHcNuPHaHHPtIHL(nIeH@胇 H+qHL HsHHdHHEHxHgt H0H@H`HxHHHxHgtH0访vHHff.ATUHSHHHdH%(H$1Z H|$HAZ Ht$H|$ D D$ H HHD$ HpLsL(HD$0I9H8LHt$@H0Hǃ8HǃPH@HHHtRL;H8H HHQHuH@HHPHuHHHD$XHPHD$ HXHp@rD$hLh`HD$pI9HxLNH$HpHǃxHǃHHHtPLNHxHfHHQHuHHHPHuHH$HH|$ HD$HxHgH|$ ǁD nH|$ x"0ȁHH wDHeHHvHH!\ H|$ vH$dH3%(u#Hİ[]A\Ht$ [dH|$ H HD$HxHgt Ht$購HmHH|$ Hvf.@1f.1f.;jf.US1HHHnH+.HHGHGHuRHHHCHkLFH>I9t&HHfH2t@1HHL9uH)HHCH[]HHt$c_Ht$f.fATUISHnHH+.HHGHGHHHudHHHCHkMD$I4$I9t:HHf.HtHHI9uHI)IIDHC[]A\DHH9w H^\f.ATUISHoHH9t DH{HthH H9uI,$Ht[H]A\h@[]A\ATUISHoHH9t DH{(HtZhH@H9uI,$Ht[H]A\L6RH)FHt$(HFLPKCHLPHWHLHPJH?HHfDAWAVAUATIUSHMH$ H|$PHL$DD$D$dH%(H$1@H|$@@HT$.H|$0ρTHL$PHT$@Ht$0HLPHǃHrHǃ@@rL KLL >IFIHHT$PHD$Xt@HT$PHD$XHxHxH|$XHHHL$PHT$X9D$LI0 H|$0LAI0 Ht$0H|$PDh D$PHHD$PHpHLHD$`I9HLHt$pHHǃHǃHHHtQL׀HHHHQHuHHHPHuHH$HHD$PHHp@)H$LH$I9HLzH$HHǃHǃHHHtWLHH fHHQHuHHHPHuHH$HH|$P|Z HD$0HxHgH|$@ρCH|$@M,ρHILHL1 H|$@NLD$HKZ1HD$HJHpH971<20DHH uH$dH3%(HǃPǃdƃ`HǃXHǃƃaHǃ8ǃHHǃ@Hǃ Hǃ(ǃlǃLƃhHǃXHǃ`HǃhHǃpǃHǃ0ƃ8^H[]A\A]A^A_Ht$/\Ht$PMRH8~192IH|$EH@HxHgt Ht$/HLsX H5HPHxHgt Ht$/HEHAHH|$H5H|$X5HAILHǃ@tMB`HIHD$0HxHg8Ht$@d)HHD$0HxHgtHt$/@uH|$@IIH|$PIW u7HQILHLH .VIHQH .VHH6HUHAWAVAUATISHHvEMHHHdH%(HE1FDe@H@Hx1H@Hs DžXHDž`HDžxHPHHhHptNHx{H`HHHQHuHhHHPHuHpHC8HxH@Hs@Hx@n0CHHs`EHEHEEH@HHPXHUHUtEHxP }HEHHHQHuHM fDHHPHuHEHCxHEIH IGHH(t@H1HL EHATH@MELHHXLHDž0ZIIF1IVH0@@ H݁HXIFH02H{HtGuwHH0H@HH8L8H{@H0I9HHCt#MtAD$ HtG t`LcH0Hx2I2H@lT H]dH3%(HHe[A\A]A^A_]HH[tE1HHPHcNuPH.HHPAIHL:I1H@S H=HL H'@HHG1HHEHxHgt H0%H@H`HxHHHxHgtH0vHH:3f.ATUHSHHHdH%(H$1' H|$HA' Ht$H|$ Dr_ D$ HHHD$ Hp?LHD$0I9HLHHt$@HHǃHǃHHHtRLwHH HHQHuHHHPHuHHD$XHHD$ HHp@>D$hLHD$pI9HLqH$HHǃHǃHHHtPLxHHfHHQHuHHHPHuHH$HH|$ LQ HD$HxHgH|$ Rρr:H|$ hD2蚁HHsCHH( H|$ CH|$ Sρ*:H|$ DHH+CHH`( H|$ BH$dH3%(u"Hİ[]A\Ht$ ;\0HHD$HxHgt Ht$H9H|$ HhBH|$ H)P @AUATZUSHAHXρH|$ dH%(HD$H169H|$ ,CכHH7BDH,0H|$ AtHMCt)HD$HdH3%(HX[]A\A]f.H@ H'9H9HW6H|$ H>f.@1f.1f.2f.SH_Ht&HHH@H=P\uH[2fD[fD[DЃAHtG~fDGPW.>fffff.H?*tr9Hf.H9>*ufH@߁wLy(fHc7fff.AUATLn(USIHHHLF8M9tXH HtHAIxIHHtqHEHtxHS8HP HC8HHC8I$HL[]A\A].'HHH@HEHHCtH@LH?(HEHtHX Nf.ATUHSH HD$HD$dH%(HD$1H$P΂H-t,H.HD$dH3%(H []A\0D$t<D$LeK&HH@LHXHm'1ɺ0H;H9u5&HT$@HP΂HPPHz)PHH芐H"3fATUHSH HD$HD$pdH%(HD$1H$΂Hq,t,Ht-HD$dH3%(H []A\0D$t<D$Le+%HH@LHXHM&1ɺ H:H9u5$HT$@H΂HPPHZ(sOHHjH2fATUHSH HD$HD$dH%(HD$1H$΂HQ+t,HT,HD$dH3%(H []A\0D$t<D$Le $HH@LHXH-%1ɺਂpHt9H9u5#HT$@H΂HPPH:'mNHHJH0fAVLAUATUHSHLHdH%(H$1v HT$H|$zAH.D$(D$ HPHHCD$0CD$8CD$@C D$HC(D$PC0D$XC8D$`C@D$hCHD$pCPD$xCX$C`$Ch$Cp$Cx$$$$$$$$$$$$$$$$$$$ $$!$($"$0$8$@ $H($P0$X8$`HǃXH`HhH$x@ǃPHǃpHtS(wHXH@HHQHuH`HHPHuHhH$HpH]0HxH]0H|$@H}x9|$t H|$k?H$xH$hH|$ Lo HH|$D$HCPHD$d@HK@HC0HQH9jHtGHT$ HHT$(HPHT$0HPHT$8HPHT$@HP HT$HHP(HT$PHP0HT$XHP8H@HC0H|$A?H{x8|$ H|$>fDHt$ fH|$ LCn HH|$D$HEPHD$?HM@HE0HQH9HtPHT$ HHT$(HPHT$0HPHT$8HPHT$@HP HT$HHP(HT$PHP0HT$XHP8HT$`HP@HHHE0H|$X>H}x7|$*H|$=Ht$ HxlHt$ H&vHt$ Htnx H|$ H? HD$HxHgt Ht$HG)HHH$xH$hʑـ|$HtH|$=À|$HtH|$<뭀|$HtH|$HH@H@@H@ HHh(HHE@HԂHHH\$HCHT$HHC"H|$HtX}Hu"H}PtH<$HtXHH}PEHH_H<$HuH4H|$HtIXHHfSHGHH~6HHHGt[@1ɺÂH9uHH[H@[USHHH(dH%(HD$1Hto1ɺNH9Ht\1ɺH(H9u}HtuHL$dH3 %(QH([]f.HuHHX(H SYHHCHHHHHh(HUYHH0EHHH@H@@H@ HHh(HHE@HPԂ?HHH\$HCHT$HHCH|$HtSV}Hu"H}PtH<$Ht8VHH}PEHH;]H<$HuH*(H|$HtUHH)fSHGHH~6HHHGt[@1ɺ/H9uHH[H@DUSHHH(dH%(HD$1Hto1ɺH9Ht\1ɺHH9u}HtuHL$dH3 %(QH([]f.HuHHX(H SYHH|CHHHHHh(HUYHH<0EH^HH@H@@H@ HHh(HHE@HӂHHH\$HCHT$HHCBH|$HtS}Hu"H}PtH<$HtSHH}PEHHZH<$Hu;FH!H|$HtiSHHfSHGHH~6HHHGt[@1ɺH9uHH[H@USHHH(dH%(HD$1Hto1ɺnH9Ht\1ɺHHH9u}HtuHL$dH3 %(QH([]f.HuHHX(H SYHH CHHHCHHHh(HUYHH0EHHH@H@@H@ HHh(HHE@Hӂ_HHH\$HCHT$HHCҾH|$HtsQ}Hu"H}PtH<$HtXQHH}PEHH[XH<$HuH@HH|$HtPHHIfSHGHH~6HHHGt[@1ɺOH9uHH[H@d YUSHHH(dH%(HD$1Hto1ɺH9Ht\1ɺHH9u}HtuHL$dH3 %(QH([]f.HuHHHX(H SYHHCHHH=HHh(HUYHH\0EH~HH@H@@H@ HHh(HHE@H҂HHH\$HCHT$HHCbH|$HtO}Hu"H}PtH<$HtNHH}PEHHUH<$Hu[HH|$HtNHHfSHGHH~6HHHGt[@1ɺH9uHH[H@ USHHH(dH%(HD$1Hto1ɺH9Ht\1ɺHhH9u}HtuHL$dH3 %(QH([]f.HuHHX(H SYHH,CHHH HHh(HUYHH0EHHH@H@ @H@ HHh(HHE@HтHHH\$HCHT$HHCH|$HtL}Hu"H}PtH<$HtxLHH}PEHH{SH<$HuDHhH|$HtLHHifSHGHH~6HHHGt[@1ɺoH9uHH[H@ USHHH(dH%(HD$1Hto1ɺH9Ht\1ɺHH9u}HtuHL$dH3 %(QH([]f.HuHHX(H SYHHCHHH]A HHh(HUYHH|0EHHH@H@0@H@ HHh(HHE@HPтHHH\$HCHT$HHC肷H|$Ht#J}Hu"H}PtH<$HtJHH}PEHH QH<$Hu{ HH|$HtIHHfSHGHH~6HHHGt[@1ɺH9uHH[H@W USHHH(dH%(HD$1Hto1ɺH9Ht\1ɺHH9u}HtuHL$dH3 %(QH([]f.HuHHX(H SYHHLCHHHHHHh(HUYHH 0EH.HH@H@@@H@ HHh(HHE@HЂHHH\$HCHT$HHCH|$HtG}Hu"H}PtH<$HtGHH}PEHHNH<$Hu H@H|$Ht9GHHfSHGHH~6HHHGt[@1ɺH9uHH[H@ HATIUHSHt1ɺǂłMH9HCH}HEHtFHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺǂłHH9uSHH[]A\H@D1LSfDI<$tH[]A\]D1L^S;f.HATIUHSHt1ɺMH9HCH}HEHtEHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LRfDI<$tH[]A\D1L^R f.HATIUHSHt1ɺMH9HCH}HEHtDHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LQfDI<$tH[]A\D1L^Q=f.HATIUHSHt1ɺMH9HCH}HEHtCHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LPfDI<$tH[]A\mD1L^PWf.HATIUHSHt1ɺ͂˂MH9HCH}HEHtBHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺ͂˂HH9uSHH[]A\H@D1LOfDI<$tH[]A\D1L^Omf.HATIUHSHt1ɺMH9HCH}HEHtAHCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LNfDI<$tH[]A\D1L^Nf.HATIUHSHt1ɺMH9HCH}HEHt@HCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LMfDI<$tH[]A\D1L^M#f.HATIUHSHt1ɺʂȂMH9HCH}HEHt?HCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺʂȂHH9uSHH[]A\H@D1LLfDI<$tH[]A\D1L^L!f.HATIUHSHt1ɺMH9HCH}HEHt>HCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LKfDI<$tH[]A\=D1L^Kof.HATIUHSHt1ɺMH9HCH}HEHt=HCHtoHuI9$tSHC[]A\fDH~tHHHCu1ɺHH9uSHH[]A\H@D1LJfDI<$tH[]A\D1L^Jq f.HATIUHSHt1ɺÂMH9HCH}HEHtׂHIIDL> ׂHI)fLZD${ׂHIfLZD$HIfLZD$yH|$@AID9k~MS@@ւeHtHHB0\$D$ s H|$@‰D$:C Ht$PHD$H1L{ Ls0LLkHt$Ht$XLK8L[(Ld$(IHt$IctfAA (AAA,4*HcH|X.v69L$@~&A;L$@}H|$;L$@} H|$ AIc fA, *HcHtX.v0;D$@}&E;D$@}Ht$;D$@} HD$ BH9C /Ld$(H{PH;{XwH(tHt$@HCPHxH{PS J%'&d$HH HfDH_D$H9D$uHPQ8~H= tH|$0 @ւkH|$0a ׂHIlt$ L`ŁHIKfLZD$H|$0S ~)HK81fD\D$DH9H|$@t$$9t$tvD$D$ h&&\$@ւe@Ҿ vH{@Ht$@wHH|$@eHD$$HH\$hdH3%(D$$uHx[]A\A]A^A_H|$0H趿H|$@HHaATUHSHPHdH%(HD$H1HtH}(Ht H} HtH}0HtH}8HtHHtHHtHHuPHU`LMxLHMXHEhLUpH|$Ht$ H}@Ht$ HT$0HL$LL$LD$HL$(HD$8H}@Ht0HH]hL`I9vfH;H4I9wH}@&HD$HdH3%(u HP[]A\hAWAVAUATUSHHdH%(H$1t0H8Ht¿HHt豿HHt蠿Hc{ HH9HH|$P1HC8HD$PHD$XHD$`HD$hHD$pHD$xHDŽ$HDŽ$HDŽ$HDŽ$*HCPHHspLchLsXL{`HHD$HKxHHt$Ht$0HT$ H|$0HT$H{@HL$Lt$8HD$(L|$@Ml$Ld$HHHhL9I}IsL9wH|$`HsPHKXHS`HChLL$H{PH|$hLD$PHt$`HL$hH{XH|$pHT$pH{`H|$xHD$xH{hH$L$H{pH$L$H{xH$L$HH$L$HH{@LC@H|$PH{HLD$XHt$0Ht$0HT$@HT$LL$H|$XH|$PLt$LCHL|$ Ld$(HL$8HD$HH|$PHt5H$Hl$xL`I9vH}H;I9wH|$P,Hc{HH9HlHc{HH9HOS HƃHK8~%HHHDHH9uH$dH3%(ǃuHĸ[]A\A]A^A_׺BfAVAUAATLg@USHHHG@HGH1HGPHGXAHG`HGhHGpHGxHLJHLJLAMDsD+KDC HSHH9H<Hc{ HCHH9HHc{ HC(HH9H̽Hc{ HC HH9H訽HC0CHHS HsI1HPD tCHS0HHs(I$D SƃHXZ[]A\A]A^HL9Hff.AWAVLcAUATAUSHAHdH%(H$1HQLD$`LL$H8~VH= t=H$:@ւHH.ւHIDLHHH+EhHEHHL@HEpH+ExHHH HE`H+EPHHHʉD)D$lH$Q8~WH= td H$=@ւHQHIׂHITt$lLHHD$lADIHQ8~VH= t H$?@ւHHׂHIDLַHIcH]PHM`HHD$0HEXL}hIHL$(I)HD$ HILII HD$0Ll$(MMIHHIϩL9wEH药HI<$謩I$ID$H^H覬fDAVAUIHVIEIATUSLbI9s3I$HDHH(H9uIEIL9wIVH9tSInIH9tDHH(H9uImI]H9tf.HH(H9u[]A\A]A^ImIH9tf.HH(tH9u[]A\A]A^fDATUHSHPHuLO8LG@HU HHHMdH%(HD$H1LU0HE(Ht$ Ht$ H|$HT$0HHL$LL$LD$HL$(HD$8H}Ht/HEHH](L`I9v@H;HI9wH}HD$HdH3%(u HP[]A\8AWAVAUATUSHL*dH%(H$1HH|$`Ht$I9H$ HD$LPM9t HD$LH0HAL|$MHHD$@HBIHD$ HAIHD$(HBHHD$8HL)HHHt@H$L)MG(HHH4HI_ L)HHHHIHD$hHBL)HHHD$0LL)M_HHHT@LH)Io8HHHHLH)HHHD$XLHL)HHD@HIHL)HH9D$XTM92 HD$XH$ HL$@IHL$8HL$(H|$(HL$@fLH+l$0H$H+\$@HD$(LHHHHHHl$H\$HD$ H@HHD$H HH|$HL$8A HIHHL$HL9HIIOL9LNKHH)H)HHHt$(I)H~!fH(H(HHML9uHl$LHL)H HMlH\$L)H %H<$HHH$M)MHD$HxHX L@(IHD$HpHI)IILHHL$hH iHD$hLIIHLfffff.S^HdH%(HD$1@HHx\t+HHxHgtHt$HuHx\u@HD$dH3%(uH[]ffff.S_HdH%(HD$1@HH8^t+HHxHgtHt$HH8^u@HD$dH3%(uH[݀fff.SKpH HdH%(HD$1 Hh}HHǒHD$dH3%(uH [lHH衒HSHH@HHGdH%(HD$1}HC(HxHgu6HC HxHgu5H{}HD$dH3%(u(H[fDHt$@Ht$fffff.SHWH[>fffff.UHAWAVAUATASHH(IEMHHGHGHGHGgHHdH%(HE1kyIED{0Ds4HC8IEHHC@t@LH LILh(-yH h؂׆H LAAH HxHgJHUH x؂ŔH}5pH}ّ}HII4$LHVԐH}苐LH0LILpnxH0؂1H0LADH0HxHgHH@LHHLx xH@}H贅1H@HA׈CH@HxHgFHH HpHHLxwH`LwH`}=HpH`HHPAHC HPHIhHPHxHgH`HxHgHpHxHgH}LvHS@HC8KHHEHUtBHs0LEAVHUH}E9XHEHKZHUHEHCHCHMHEHSHEHEHxyHEHxyHEHxyHEHxHg HCH"H};pLEH}< ؂HIGLL}}H*H}H HxHgHEdH3%(He[A\A]A^A_]HuGfHu7UfHu'fHu2fHu:fHuBfHufHuYzwLydwIHpHxHgH HxHgt HyH{@ xHC(HxHgt HSHC HxHgt H6H{wLIH@HxHgqHucI[IH HxHg`HuRIpIHPHxHgt HuH`HxHgHuIIHEHxwHEHxHgB"NIIH0HxHgH}I\nH}IK]fDf.@f.SH(HsH[f.@Sb}HHHT$dH%(HD$1ɎHL$dH3 %(u HH[{xf.fffff.HVHHHVHHWtBÐfHVHHHVHHWtBÐfЃAHtG~fDGPWNfffff.SoHdH%(HD$1@HHxmt+HHxHgtHt$HuHxmu@HD$dH3%(uH[mwffff.SpHdH%(HD$1@HH8ot+HHxHgtHt$HH8ou@HD$dH3%(uH[vfff.SH0H HdH%(HD$1Hh}HH׈HD$dH3%(uH [|vHH豈H)SHH@HHGdH%(HD$1sHC(HxHgu6HC HxHgu5H{sHD$dH3%(u(H[fDHt$@Ht$ufffff.SHWH[N|fffff.UHAWAVAUATASHH(IEMHHGؐHGHGHGgHHdH%(HE1{oIED{0Ds4HC8IEHHC@t@LH LILh(=oH h؂|H LAAH HxHgJHUH x؂ՊH}50}H}}HII4$LHVH}蛆LH0LILp~nH0؂(|1H0LADH0HxHgHH@LHHLxnH@}H{1H@HA׈CH@HxHgFHH HpHHLxmH`LmH`}M{HpH`HHPAHC HPHIx{HPHxHgH`HxHgHpHxHgH}LmHS@HC8KHHEHUtBHs0LEAVHUH}EDXHEHKZHUHEHCHCHMHEHSHEHEHxoHEHxoHEHxoHEHxHg HCH"H}=0LU{H}L ؂HIWLLs}H:H}H HxHgHEdH3%(He[A\A]A^A_]HuGfHu7UfHu'fHu2fHu:fHuBfHufHuYpwLytmIHpHxHgH HxHgt HyH{@0nHC(HxHgt HSHC HxHgt H6H{mLzIH@HxHgqHucI[IH HxHg`HuRIpIHPHxHgt HuH`HxHgHuIIHEHx&mHEHxHgB"NIIH0HxHgH}IlnH}I[]fDf.@f.SH(H#iH[f.@Su}HHHT$dH%(HD$1لHL$dH3 %(u HH[nf.f.fff.ЃAHtG~fDGPW鎀fffff.HwLyjfATIUHSHHt#H{ H}uHEH9C vH[HuL[]A\IH[SȌHdH%(HD$1@HH8tCHHxHgtЃAHtIPЅHt$HH8ufHD$dH3%(uH[f.PJHmfffff.SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$H~HxufHD$dH3%(uH[f.PJH^lfffff.ATUH8SL0HHHPHdH%(HD$1XiHHHǃ0rHǃ(@rHǃ8&iHzqHpHǃ8q~HcUHcUH(H@H0Hǃ(tbvH(HxHguNHiHxHD$dH3%(u6H[]A\ÐH0LHxw w#fHt$kfffff.SHH[qfffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h1`mH|$@MmHT$.H|$0詀HL$PHT$@Ht$0HBiHD$0HxHglH|$HL(L0gH|$XgLHPHǃHǃHǃ(g|H;aUƃLHǃ(tHǃ1ƃ HǃHxH0H`UHǃHǃ Hǃ(HkL8Hǃ0rHǃ(@rLwLLjIEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$XfD$ Ht$H(D$ uD$tHs|t'HD$hdH3%(Hx[]A\A]A^A_@HǃDL}H(L|zHLH0t}Hx1}H|$0KL(qH|$0}{#HHzLH]oH{H|$0+z7fDHt$/vHxw }zgHH|$XJeHbqHL'tH(HxHgt Ht$@H eHtHqHHǃ(tLrHHuHxHpHD$@HD$@kHxYaHaH|$@{H|$POH{fH|$PAzH4nHH)nHyH|$PxH|$@ssH|$0IHxLIH|$PHxH|$@srHH|$@{`{LHvH]UH ]UH@H0HHHD$0HxHgt Ht$/H|$HcEH@UHAWAVAUATASAEHhHxDmdH%(HE1HHEHBHHEt@H}L_0aHAELeAULEEDHLHtXLxHEZIIFaIVH}@@ HHXIFHUbH{HtWukHxH]HPHHULmH{BHUL9HHSt&MtAE HtW ~LkHEHx5bHEHxHgu4I|$bHMdH3 %(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHJHcNuRjcdIHLjHEHxHgt Hu|I|$raHmHLeH]HHPpHLeH pHxH*aFxf.GxfUHAWAVAUATISHL1Dž(dH%(HE1IHDž0HDžHHH HHHHHHHH)H IHH8H@1AA9vvLHI4HBHMILHBHAtA@HLLHHH A9wHHA0A!M0E1DHHLHCHAkfHHLHCHADpnfffff.HwLySXfATIUHSHHt#H{ HjuHEH9C vH[HuL[]A\IH[SHdH%(HD$1@HHtCHHxHgtЃAHtIPЅHt$H[mHufHD$dH3%(uH[f.PJHZfffff.SȱHdH%(HD$1@HH8tCHHxHgtЃAHtIPЅHt$HlH8ufHD$dH3%(uH[f.PJHZfffff.ATUH8SL0HHHP)HdH%(HD$1WHHHǃ0rHǃ(@rHǃ8VH*_HpHǃ8q3lHPUHPUH(H@H0Hǃ(tdH(HxHguNHVHzfHD$dH3%(u6H[]A\ÐH0LHxw 'n#fHt$Xfffff.SHH[N_fffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h1[H|$@ZHT$.H|$0XYnHL$PHT$@Ht$0HVHD$0HxHg|H|$HL(L0UH|$XzULHP)HǃHǃHǃ(g:jHNUƃLHǃ(tHǃ1ƃ HǃHxH0HNUHǃHǃ Hǃ(HXL8Hǃ0rHǃ(@rLoeLLXIEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$XOTD$ Ht$H(D$ scD$tH#jt'HD$hdH3%(Hx[]A\A]A^A_@HǃDL`kH(L,hHLH0Hx1.kH|$0MxH(3_H|$0)i#HI4hHt?HXHHLhH|$0g+f.Ht$/fuI$LHxw jHxw jN7UHLaH(HxHgt Ht$@HRHZbH^HHǃ(tL_LHeHLUH LUH@H0H|$0IHfLHbHfHpHD$@HD$@kHxNHkNH|$@qhH|$PQxHSH|$PgH[HH[H|$PYfH|$@_az`HH|$XQH]H|$PH#fH|$@)aD`HH|$@MiHHHD$0HxHgt Ht$/H|$H*QHHff.UHAWAVAUATASAEHhHxDmdH%(HE1HHEHBHHEt@H}LXM0nOHAELeAULEEDHLHDXLxHEZIIFOIVH}@@ H*HXIFHU0PH{HtWukHxH]HPHHULmH{BHUL9HHSt&MtAE HtW ~LkHEHxOHEHxHgu4I|$OHMdH3 %(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHJHcNuRjcQIHLXHEHxHgt HuLI|$NH [HLeH9KHHPK^HLeH]HxHNFxf.GxfUHAWAVAUATISHL1Dž(dH%(HE1IHDž0HDžHHH HHHHHHHH)H IHH8H@1AA9vvLHI4HBHMILHBHAtA@HLLHHH A9wHHA0A!M0E1DHHLHCHASHHLHCHADpSHHLHCHASHfHLHCHA*QSHfHLHCHADH*SAE9LXA1At;f.HЃL H H4HLLHLHA9wH0H |HMdH3 %(He[A\A]A^A_]L8H HI9MLHRC Hs(HHIv(HXAF PHHHP?LEH_H;HuA AY"]^ H HXX'%IcE0L i A\H HHYHAI\AXX%Y%A^H9IxfLHuiHXFHHRHxHKH_HxSHHmSHA^lX}HH0H QHUHAXHH^f.@f.@1f.1f.Rf.SH_Ht&HHH@H=`]uOH[QfD[fD[Df.fff.ЃAHtG~fDGPW>]fffff.H-wLySGfATIUHSHHt#H{ HYuHEH9C vH[HuL[]A\IH[SHϷHdH%(HD$1@HHͷtCHHxHgtЃAHtIPЅHt$H[\HͷufHD$dH3%(uH[f.PJHIfffff.SͷHdH%(HD$1@HH˷tCHHxHgtЃAHtIPЅHt$H[H˷ufHD$dH3%(uH[f.PJHIfffff.ATUH8SL0HHHP7HdH%(HD$1FHHHǃ0rHǃ(@rHǃ8EH*NHpHǃ8q3[H?UH?UH(H@H0Hǃ(tSH(HxHguNHEHzUHD$dH3%(u6H[]A\ÐH0LHxw ']#fHt$Gfffff.SHH[NNfffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h1JH|$@IHT$.H|$0@*Y]HL$PHT$@Ht$0HEHD$0HxHgdH|$HL(L0DH|$XzDLHP7HǃHǃHǃ(g:YH=UƃLHǃ(tHǃ1ƃ HǃHxH0H=UHǃHǃ Hǃ(HGL8Hǃ0rHǃ(@rLoTLLGIEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$XOCD$ Ht$H(D$ sRD$tH#Yt'HD$hdH3%(Hx[]A\A]A^A_@HǃDL`ZH(L,WHLH0t}Hx12ZH|$0M*L(7NH|$0-X#HH8WLH LH|$0V?fDHt$/~fHxw YzgDHH|$XAHNHLPH(HxHgt Ht$@HAHuQHMHHǃ(tLNHHuHdUHpHD$@HD$@kHx >H=H|$@WH|$PQ*H+CH|$PVHJHHJH|$PUH|$@POH|$0IHULQH|$PHvUH|$@|POHH|$@3=nXLHSHD:UH E:UH@H0HHHD$0HxHgt Ht$/H|$HV@MHfff.UHAWAVAUATASAEHhHxDmdH%(HE1HHEHBHHEt@H}L<0>HAELeAULEEDHLHtXLxHEZIIFN>IVH}@@ H8HXIFHU`?H{HtWukHxH]HPHHULmH{BHUL9HHSt&MtAE HtW ~LkHEHx>HEHxHgu4I|$>HMdH3 %(Hxu[He[A\A]A^A_]DHuDHH[tE1vHHJHcNuRjc@IHLFGHEHxHgt Hu|I|$">H:JHLeHi:HHP{MHLeHLHxH=Fxf.Gxff.fff.UHAWAVAUATISHDžHDždH%(HE1HHDžDž(HDž0HDžHHIH0H HHHHHHHH)HHHHHH HH8H@PE1AE9EHKIDJ4HL,HLHBHtAEHLHHHGA}GlLHHHH  AE9;f.LH*GHwQV*HIPLL'CH+PHAaARM0E1fDEHKLIDH BKHLIDHAKHLIDHDpAKHLIDH|AKfHLIDH*DAKfHLIDHDH*AAE9LFA1At7fDH0ЃL H H4HLLHHHA9wH0H tHHaHMdH3 %(NHe[A\A]A^A_]HLLpM9tmMXfDAD$ It$(HHIu(HXAE PHHHP,MELML9IuAH *@YPkDH_N`+HRBPHGHMAH*HDHNm*HAHHFHLLHHI9H8A$AD$0HA$@*f(\ \H%%Et$(=p \Y-%Y V AY$xXXh`YpBHL HIK\L9*HIKHLDK*HIKL7E!+HIrK`LE(+HIMKhLD*HI(KxLD*HIKpLD*HIJL~DHJIcD$0PHL,PIJ+(@ H^ LX%B+:JH;8IE1HHIH0H HHHPAH7HuHx1HHRH*I6HJH>HL>HaICHHHIEHH4I_C,HHHIHHIf.f.@1f.1f.=f.SH_Ht&HHH@H=`*]uOH[H(HxHguNH0H@HD$dH3%(u6H[]A\ÐH0LHxw GH#fHt$2fffff.SHH[n9fffff.AWAVAUATIUSHHx$H|$PL$ LD$DL$D$dH%(HD$h105H|$@5HT$.H|$0@8yHHL$PHT$@Ht$0H1HD$0HxHg|H|$HL(L0/H|$X/LHDHǃHǃHǃ(gZDH )UƃLHǃ(tHǃ1ƃ HǃHxH0H(UHǃHǃ Hǃ(H2L8Hǃ0rHǃ(@rL?LL2IEIUHHT$PHD$Xt@HT$PHD$XHHH|$XHHHL$PHT$Xo.D$ Ht$H(D$ =D$tHCDt'HD$hdH3%(Hx[]A\A]A^A_@HǃDLEH(LLBHLH0Hx1NEH|$@KX8L(S9H|$@IC#HHTBMt?L72LHH9BHBH|$@A#fHt$/fuHEHHxw DHxw DNW/HL;H(HxHgt Ht$0H,Hz}HH}H HxHgHHxHgH`HxHgHPHxHgH@HxHgHEdH3%(He[A\A]A^A_]fHufHuHfHuPfHuXfHufHufHu fHuifHufHuw,fHug4fHuWfffff.AWAVAAUATUSHIվHMċ$H$EΉD$$D$H$ H$H$(HD$dH%(H$1H$HT$`H$pH$H$H$HH$HxHgzH$=H$0H@HHǃHǃHǃ Hǃ(Hǃ8gHHD$$IUHǃ`HǃhHǃpHǃxH$HǃHǃH$LIEHH$t@H$H$HHH$HL8HH$H$D0LLIH|$0LH|$@LHD$@g&H|$@p"xHx@@ HPI I$L yP HhH`LhHtYHt$@H|$PH`Ht$PHD$PHxHgs8H4$H|$p@@ HIHt$H|$`T$I|$HL$`Ht$p;HD$`HxHg5HD$pHxHg7I$L yP HxHpLxHtqpLH|$0 !pD$D@DHt$0H$@@ HЉILhH$L舷H$HxHg7I$L yP HHLHH@kHǃPHǃX( HǃƃƃƃHx@@ HHZGHEH yP H(H H(HttHtcHD$@HxHgHD$0HxHgH$dH3%(JH[]A\A]A^A_fDHXH8ǃTH8H|$H$zmH8H$-pHHHH$fH$fDH$fDHt$pwH${fDH$fDH$fDH${H$IHLHHHpH$HDŽ$kHxHpH$sH$~mHH$nHHHH$WH$ZuHMH$H(H$+FHD$@HxHgt Ht$/jHD$0HxHgt Ht$@NHHtHxHt HhHtH|$H8HxHgt Ht$@H(HtHH~HH&H$!\HHD$`HxHgt H$HD$pHxHgt H$kHHLHHHHHD$PHxHgH$H^LqHsHH^H,H?HH$HHo$HH$HxHgt H$HHLbH#H@HH$HxHgt Ht$p/H$QHUHAWAVAUATESAHEHXTLu0H]8PE(LdH%(HE1HHEHBHHEt@HpL)LmLLLuHL !HLAVAUA̋TLeLpEHPE LPEPPPLXH0HEIIGIWH}@@ HHXIGHUH{HtGukHXH]H@HHELmH{@HEI9HHCt&MtAE HtG LkHEHxNHEHxHgumHEHxHgulHpHxHgu8I|$HudH34%(HXuHe[A\A]A^A_]fHuDHuDHuDHH[HE1)HHPHcNuP!HHHPLeHI|$MHeH HXH-HEHxHgt Ho HEHxHgt HoHpHxHgtHowIHLHLeHLeHLe밐fAWAVAAUATUSH1HHP0dH%(H$1H$t$DŽ$HDŽ$L$XHDŽ$H$H$L)ui90v[MdI4$tFLLHH$PH$$PنI$90wH$HDŽ$Ƅ$H$H5JUDŽ$HDŽ$HDŽ$HPHH$H$taHQH$H fHHQHuH$ f.HHPHuH$HUH$H$p$t H$HHHpUH$HxHǃHǃHHHthH$HHH$HHBH$HDŽ$H$H$H$HDŽ$HH$1PUH$HDŽ$Ƅ$H$HU[$t H$1HLu@0H9t$HtHH-H$HDŽ$0Ƅ$H$HU$t H$1HLu80H9t$HtHHx.H$HDŽ$0Ƅ$H$H U3$t H$HH$HHDŽ$0Ƅ$HUHtKHH@Htp yH@HuHtJ Hr(H(NH$$H$HDŽ$Ƅ$H$H5yUDŽ$HDŽ$HDŽ$HPHH$H$t`HE?H$H HHQHuH$ f.HHPHuH$HUH$H$$t H$HHPH@H$HHHǃPHǃhHXH`HthH$HPHXH$H`HBH$HDŽ$H$H$H$HDŽ$HhH$1`H$HDŽ$0Ƅ$OH$H5@UDŽ$HDŽ$ HDŽ$8HPHH$(H$0tWH>H$ H HHQHuH$(fHHPHuH$0HUH$8H$$t H$IHHHpHxHǃHǃHHH$ HthHH$(HH$0HHBH$HDŽ$ H$(H$0H$8HHDŽ$8H$1L$`L$xDŽ$ HDŽ$(HDŽ$HDŽ$8HDŽ$@HDŽ$HDŽ$DŽ$0H$0HDŽ$0НƄ$8/H5UH95UHH(H$HFH$HFH$ HFH$(F$0H$Hx("H VUH?UHQHx(H9Ht THUH@HU$8t H$0;$H$HHHH$C0C($$C8\$$ C@d$$(CH$0CP$8CX$@C`$HCh$PCp$XCx$`$h$p$xD$$$$$$D$$$$$$$$$$$($$$ $)$0$*$8$ @$$(H$0P$8X$@`$HhDŽ$`HDŽ$h$PHDŽ$L$pL$xHHtuH$LHH,H$hH fDHHQHuH$p f.HHPHuH$xHD$H$L$HQ\L$8L$~pH= tH$90mH$nHDHIpHD$HTH$W$6o@GHH$hH$X*I$\@H H$H  8$8t H$0)H$tHHfHH$8HtH$H$xH$dH3 %(D$ HĘ[]A\A]A^A_H H eIƅKfH$`$l$H$@HpLD$@$HƄ$P$hDŽ$`H$`H$H$hH$H$pH$ H$xH$(Do@q%@H$0mQH$D@oH7H$ DHtVH='UJH+UHPH UH@HHTHTHTHPHcH1HHHHcL1HHHHHH|$0|$t$|$ M/ǃ@j>Ht$0HHVMWpH D$ HfpHD$HvpHD$HpHHHD$0HxHgfHH|$@H|$t$l$ o.H|$`6m[H|$`QǃHDHt$@HHVSWpH&D$ HfpH D$HvpHD$HpHH|$`HD$@HxHgHH|$PH|$t$l$ \$(e-H|$p:mQH|$pGpH:Ht$PHHVIOHD$(HpHD$ HpHD$HpHD$HH|$pHD$PHxHg=0L@L$L1f.غLIDL$hLLHDŽ$LLL<90wLH$?QL$H$DDŽ$IVHDŽ$ HDŽ$8Ht$H$(H$0tdL$H$ H@HHQHuH$( f.HHHHuH$0H$HH$8D$LH$ Lru2HP?0meVDHH`HDHpH蚍uhHHHxH9tH HP(H{HH HHHƅHPH+XH=oHHHxH9t#H HP(H$HRHff.zH HH4?HH HHHlƅaL$LL$LL$LvlH HHHpJHPHXHHD$PHxHguNH$8HtH$H$oH H|$`H|HD$@HxHgtH$HHD$0HxHgtH$H$H$xH$f$HUH$^CH$H$H?$H$& HHHpH|$pHH$ LHnHH$HZH$hH$Xe>H$H0HHiHYI~HpHDŽ$kHLH$OmH!H$HHHH$LHH$HxLHL9tH$8HH$0q$HrH${`H$ H$H$:H$C($HH$ HH$HH$f.f.@f.@f.@f.@f.@1f.1f.[f.Kf.;f.+f.f. f.f.f.f.H0$@SHH0H[H@SHHH[wH@SHHH[GHHwH駎HvHvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.HvIH0yt 1>*t0yt fI@f.USH@HHuHxH@8byHHnH}H0HCpbyHH{tHH@H=dNuCG@HE 0]HHHCЈHC8HC HE(HC(E0C0HHHH0HkHSHfLIz@USH@HHuHxH@8byHH~H}HHCpbyHH{tHH@H=dNuCG@HE ]`HHXHCHC8ȇHC HE(HC(E0C0HHHHH{HcH軿fLIz@USH@HHuHxH@8byHH莿H}HHCpbyHH{tHH@H=dNuCG@HE е]`}HH؅HCHC8HHC HE(HC(E0C0HHHHHHsH˾fLIz@AUATIUSIHH8WD$XdH%(HD$(1f($,Mnf$)iЀ: E*ʉ\AUA$HZQ$8H= tH|$A0m )ЍӂAIf wH”u u&fDfA9wzHD$8dH3%(ueH@[@@u؉fi{f9ufi> )fЃHH|$HT$`ndHt$H|$ 赮H|$ HD$ bHHH|$ HD$ HD$HxHgt Ht$艾H葽ATUISHՉH dH%(HD$1HG0HD$H$ID$IT$HHHH@Ht9X }H@HuH9}9Y xHA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(HAXHE0HA`HE8P|$t H<$Ht$dH34%(uH []A\H1Hʲ|$t H<$jHrfATUISHՉH dH%(HD$1HG0HD$H$kID$IT$HHHH@Ht9X }H@HuH99Y HA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(HAXHE0HA`HE8HAhHE@$|$t H<$Ht$dH34%(uH []A\@H1H蚱|$t H<$:HBfUSH@HͭHuHxH@8byHH莫H}H0HCpbyHH{tHH@H=dNuSG@HE HuH{HC HE(HC(E0HHCЈHC8C0HHXHH[]@H H$H)H0H讻HFH^H趪H|f.LIz@USH@H转HuHxH@8byHH~H}HHCpbyHH{tHH@H=dNuSG@HE HuH{HC HE(HC(E0HXHCHC8ȇC0HHXHH[]@H H$H)HH螺H6HNH覩Hf.LIz@USH@H譫HuHxH@8byHHnH}HHCpbyHH{tHH@H=dNuSG@HE HuH{HC HE(HC(E0H؅HCHC8HC0HHXHH[]@H H$H)HH莹H&H>H薨Hf.LIz@AVAUATUISHH|$@Ht$dH%(H$1践肩H$H|$ HݳH|$ t$H|$@H|$ 芺HD$@HT$ H|$0HpX袳H|$0xH|$ nHt$H|$@D$-H|$ 蛦HHHH|$@HHHt$H|$@D$-οH$l$ H{8DkiHT$@H\$@HBHDPHZ耻 H|$@DHD$@LHpܲH$HD$@XhHDŽ$hHD$HPeHxHg%H$HD$HqOHTHTH$HD$@H@HT@HDŽ$t*H$dH3 %(LHİ[]A\A]A^HxHA0H@0H=P0HADLMA~8tƃDLIH@0H=Ptؾ LDHD$@H|$@Hxw #f.Ht$0&,HbHH|$ H|$@&Hf.@AWAVIAUATUSHHHoHs Hx HINjIGHsIGIoAHtLLIGHkMAHtffHx Hu LHHËEHCHuHCI\$HLctHL3HCHmIHuHL[]A\A]A^A_H9LLLIH葶HٳfUSH@HHdH%(HD$81-HHHHt$H{HD$HD$ HD$(D$0H$ІHD$HC8byHΣH|$HHCpbyHH{tHH@H=dNu\G@HD$ Ht$H{HXHCHC8ȇHC HD$(HC(D$0C0 HH]`H&HH'HHHH詸H葲HHHHDSnH@H|$HT$dH%(HD$81跾Ht$H|$ HD$HxHguH|$ HD$ CHt$HHH|$ HD$ *HHD$HxHgtHt$趲@USH@HHdH%(HD$81HHHHt$H{HD$HD$ HD$(D$0H$HD$8HC8byH辡H|$H0HCpbyHH{tHH@H=dNu\G@HD$ Ht$H{HHCЈHC8HC HD$(HC(D$0C0H0]HHH'HH0ٱHH虶H聰H٠HHHDSnH@H|$HT$dH%(HD$81觼Ht$H|$ HD$HxHguH|$ HD$ 0CHt$HHH|$ HD$ 0HүHD$HxHgtHt$覰@,}k9׀+HDDi±:AкsmGG)D F@DiµA)|̉iי)Cv)fwvFf'ftkfwVft@f w+HHH HH H 1ҿx>?111r11dxDAUATIUSHHHHhdH%(HD$X1HHH9LHV?2HLH?H"H)H@HHHHfD$PA*fA)fL$RH DAf|$TD))֍RLgfffiəimffi{i> )0ӂ@H1H9@߃dHHfD$PHH Ll$ fL$RfT$THt$PLfD$fL$fT$HHI9 HI9t/LHV?2HLH?H"H)H`HI)Ht$0H|$@Ld$0H|$PLڜH|$P FHT$PHD$@HJHHpH;rH;pH|$@1聭HHUHgHD$PHxHgHD$@HxHgH|$ HHgt9Ht$P諬-fHD$ gHD$ gHHgHEuH\$XdH3%(HHh[]A\A]f.Ll$ HT$PoL蹷n@Ht$@H|$P衯@Ll$ HT$PoL職6@Ll$ HT$PoLa@Ht$ΫfHt$P趫HHD$PHxHgt Ht$艫HD$@HxHgt Ht$mHD$ HxHgt Ht$0QHYHHf.DAWAVIAUATUSHHH远IHx Hs HIGHsAIGIoHtLLIGHkMAHtffVHHx Hu ELHHCHuHCI\$LcHtHL3HCHmIHuHL[]A\A]A^A_H艙LL^虬HH)fAVAUIATUSHH襛IHC IF HC(IF(HC0IF0HC8IF8HC@IF@HCHIFHHCPIFPHCXIFXHC`IF`HChIFhHCpIFpHCxIFxHIHIHIIFAIFHsInHtLL+IFHkMHƚHHE HC HE(HC(HE0HC0HE8HC8HE@HC@HEHHCHHEPHCPHEXHCXHE`HC`HEhHChHEpHCpHExHCxHHHHHHEHCHCHuI\$LcHtHLGHCHmIH#[L]A\A]A^HLL贻菪HשHf.DAWAVIAUATLwUSIHHHTA|HËEEC EC0EC8C(E C@E(CHE0CPE8CXE@C`EHChEPCpEXCxE`EhEpEx(  ) 08 *Hx@(H0P8X@`HHǃHHH`hǃxHǃHt`HHhHHpHHFHXHDž`HhHpHxHHDžxLLHDvID$(HH[]A\A]A^A_fDL9E1B 9Af.@USHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHH蒝HDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HCD;` H~HxHHEHEH[]A\A]fD~nHW 1H9tHD;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*H賛D;` H~HxHHEHEH[]A\A]fD~nHW 1H9tH[D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAWAVIAUATLoUSHIHH9twI\$ LHHHtOHusI9tnE1B A9D$ AǿHT$萒HHx HHT$LHD莪HE(LQI9IuH[]A\A]A^A_f.AUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHH貙HDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HcD;` H~HxHHEHEH[]A\A]fD~nHW 1H9tH D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAVAUIATULgSHHHH9fDHS LHHHI9E1B 9C AƿHT$2HK HT$HDHH HK(HH(HK0HH0HK8HH8HK@HH@HKHHHHHKPHHPHKXHHXHK`HH`HKhHHhHKpHHpHKxHHxHHHHHHL赧HE(HxI9HH[]A\A]A^Af.H9AVAUATIUSHtdHVL6HHGHL)H)IHII9wfHHH)HHI9v8HI4H)HHHHHkH[]A\A]A^DMtHLHՎH+E1Mt#HI9~H荎MIuH;Ht踘LL#Hk@HHLzH;HukH+fHHLRH{H M4$IT$HH) "fAWAVIAUATIUSHH9LnHHL?LH)HH$HGHHL)HHH9HoHL)HHHH9wpHH$M$HLI!HM9uL9tI<$Ht蒗IL9uL<$M>M~HL[]A\A]A^A_@H;HLIHI9uINIMl$I$HIH)L$LM9uWfDHH HKHkI4$Il$H)HHHtHH迌HHHkIHM9;HtIl$I+,$1HHCHCHHHtHH9~H6H^fDH%H H9SH<$HD$L9Hl$IuRDJ!HMHMHUH3LcI)LHHtHLϋHILeHHI9tPHtLcL+#1HEHEHELHHtL9LUHmDInIH9t@H;HtkHH9uI.HtHRHD$IL<$IM~HD$M|LIL<$I؈fDˈ/ĈHLH\$H9tH;HtՔHJH"L9tI?Ht谔LHIHH$`HH|$t H|$vHD$ HxHgrHH|$0H$\$d$'H|$P8H|$P ǃH}Ht$0HHV WpH}D$H蠂fpH}D$H腂vpH}$HkpH}H|$PdHD$0HxHgcHH|$@H,$t$|$L$H|$`8 H|$`pH|Ht$@HHVOH|D$H蘁pH|D$H}pH|D$HbpH|$HHH|$`NHD$@HxHgs0eL@L$0L1DغLIDL$0(yLLHDŽ$0 yLLx90wL$0H$DDŽ$8IVHDŽ$@HDŽ$XH $H$HH$PtgLH$@H HHJHuH$H f.HHHHuH$PH$HH$X$L6H$@LuHP[H$@DH`HukHHHxH9tH HP(H:gHH HHH0LƅHPH+XH=oHHHxH9t#H HP(H$HPHff.zH HHLH0mHH HH`ƅL$0LH HH0Hp5HPHXL$0L[L$0LFyHHD$ HxHgu]H$H$H{HHÀ$tH$H|$`HaHD$@HxHgtH$0HH|$PH.HD$0HxHglHH$@LH.MH`HjHHRH|$p+8HpH|$p؃HwHHwH|$p薂|$HH$ލ$HH$軍H|$pH9d|HH$H$H肊$HPH$_>o$H(H$7ff.@f.@1f.1f.uf.uf.uf.HHvIH0yt 1>*t0yt fI@f.SH_Ht&HHH@H=]uH[6ufD[fD[DATUISHՉH dH%(HD$1HG0HD$H$;ID$IT$HHHH@Ht9X }H@HuH99Y HA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(HAXHE0HA`HE8AhE@|$t H<$PHt$dH34%(uH []A\DH踋1Hjm|$t H<$ HwfATUISHՉH dH%(HD$1HG0HD$H$ ID$IT$HHHH@Ht9X }H@HuH9tq9Y lHA(HHEHA0HEHA8HEHA@HEHAHHE HAPHE(|$t H<$?Ht$dH34%(uH []A\@H訊1HZl|$t H<$HvfATUHSIԉH dH%(HD$1HG0HD$H$HEHMHt~HfHH@Ht9X }H@HuH9tQ9^ LH(3LHH|$t H<$PHT$dH3%(uH []A\DH踉1Hjk|$t H<$ HufAWAVIAUAThUSHHHgIHx Hs )HIGHsAIGIoHtLLIGHkMA)Htffh&gHHx Hu ELHHCHuHCI\$LcHtHL3HCHmIHuHL[]A\A]A^A_HYdLLiwHvHsfUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHnHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HmD;` H~HxHHEHEH[]A\A]fD~nHW 1H9tHk{D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAWAVIAUATLoUSHIHH9twI\$ LHHHtOHusI9tnE1B A9D$ AǿhHT$dHHx )HHT$LHD|HE(LazI9IuH[]A\A]A^A_f.AHwLycdfATIUHSHHt#H{ HvuHEH9C vH[HuL[]A\IH[ǐfDЃAHtG~fDGPWyfffff.SHdH%(HD$1@HHxt+HHxHgtHt$HuHxu@HD$dH3%(uH[fffff.SȓHdH%(HD$1@HH8t+HHxHgtHt$HH8u@HD$dH3%(uH[=ffff.f.fff.SHHHPHdH%(HD$1HtpxHxHt_xHhHtNxHHHǃ@rHǃ8@rHǃHbH%kHHǃHq.xH\TH\TH8H@H@Hǃ8t pH8HxHguAH(HtwHbHdrHD$dH3%(uH[fDHt$ndfDSHH[^kfffff.AWAVAAUATUSHIվHMċ$H$EΉD$$D$H$ H$H$(HD$dH%(H$1fH$fHT$`H$3zH$H$H$HbH$HxHgH$]aH$PaH@HPHǃHǃHǃ Hǃ(Hǃ8gHHD$.a$IUHǃ`HǃhHǃpHǃxH$HǃHǃH$LIEHH$t@H$H$HHH$HL8HH$H$1`D0LLioH|$0L\H|$@LHD$@gFoH|$@pBj^Hx@@ HPI|I$L yP HhH`LhHtytHt$@H|$P\H`Ht$PvHD$PHxHg8 ^H4$H|$p@@ HI[Ht$H|$`[T$I|$HL$`Ht$p[HD$`HxHgEHD$pHxHgGI$L yP HxHpLxHtspLhH|$0 !phD$D@ D]Ht$0H$@@ HPILhZH$L)H$HxHgGI$L yP HHLH"rH@+HǃPHǃX( HǃHǃƃƃ7\Hx@@ HHvHEH yP H(H H(HtrtH3stoHD$@HxHgHD$0HxHgH$dH3%(VH[]A\A]A^A_f.HXH8ǃT$tH8H|$rH$pH8hH$r-pHeHHeH$p fH$fDH$fDHt$pgH$kfDH$fDH$fDH$k]H$HIoHLHKHWHHRH$tH]H$pnHdHHdH$oiH$HpoiHD$@HxHgt Ht$/HD$0HxHgt Ht$@HHtroHxHtaoHhHtPoH|$FiH8HxHgt Ht$@(H(HtoHZHiH+fH3H0HHD$`HxHgt H$HD$pHxHgt H$HHVLb"iHHehHHD$PHxHgH$ZHULUbhHHhpHUH+bhHH$YH.eHg6HH$HxHgt H$HH1ULaDhHgHRHH$HxHgt Ht$pvH$yXQHffffff.UHAWAVAUATESAHEHXTLu0H]8PE(LdH%(HE1HHEHBHHEt@HpLTLmLLzTLuHLkTVHLAVAUA̋TLeLpEHPE LPEPPP/LXH0HEIIGVIWH}@@ HHXIGHU)WH{HtGukHXH]H@HHELmH{@HEI9HHCt&MtAE HtG LkHEHxVHEHxHgumHEHxHgulHpHxHgu8I|$nVHudH34%(HXuHe[A\A]A^A_]fHu'DHuDHuDHH[HE1)HHPHcNuP!4XH,RHHP>eLeHI|$UHaHmdHXHUHEHxHgt Ho`HEHxHgt HoCHpHxHgtHo#wIH#^LHLeHLeHLe밐fUHAWAVAUATLSAHHD0HPdH%(HE1HPTDžXHDž`HEHDžxHhHpL)DžX@XX90vkXMdI4$tӋFLLHHHPI$HHDž0ƅuH#THILtt HsMHHDž0ƅtHH5TDžHDžHDžHPHHHtTH3HH HHQHuHHHPHuHHFTHHks HHHIoHLILJHILJIIHtdHIIHIHBHHDžHHHHHDžIH1oHHDž0ƅ(sH9THIbrt Hq1MLu90H9t$HtHHHHHDžƅrH+THIqt H/q1MLu;0H9t$HtHH(HHDžƅ rHL%TGqt HpE1MLu'fDHANj09xHtHLHDžƅqH~TH HH@HtD9x }H@HuHH D9z > I$XHr(3HH^pAHHDžƅpHL%gTpt HuoMH HDž ƅ(pHH5TDžHDžHDžHPHHHtRH葿HHDHHQHuHHHPHuHHTHH ;o(LI$I$HI$IDŽ$IDŽ$I$I$HthHI$I$HI$HBHHDžHHHHHDžI$H1 H0HDž0ƅ8nH0L%|T/n8t H0m1MLu>fD0H9t$HtHHH@HDž@0ƅHbnH@L%lTmHt H@lMtEL1fD0H9t$HtHH0PHx]HPHcH1HHHHcL1HHH{HgHHH`AXH@辩ǃ@jUH`HHV`HUDHN*HwU@H7ZfpHZUHHZvpH=UXHYpH UH`H`HxHgHHpHHAXH@谨HOVH`ǃHTHpHHV_HaTDHvM*HIT@H YfpH,THHXvpHTXHXpHSH^HpHxHgCHHHHpAXH@8np@j_SHHHVl^H?SDHTLBH'S8HWpH S@HWpHRHHWpHRXHWHx^HHxHg0L@LLDžXfDXLLIDeOLLHDžJOLL:OXX90wHTH`HPH]dH3%(T]He[A\A]A^A_]DE15LH`DDDžIVHDžHDžHXHHtTL諞HH HHQHuHHHPHuHHxHHXDL7HALEu?HPH fSHfHfDH`H5a HPH+XH=oHHHHH9H LPH(H(HS=(Hff.z H HHUHH HLXHH0H@LAPL(҇ZYƃ@H4fE1HHHHH9iE`HH9QH H(H(H@vHH HLXHH0H@LAPL(ݿ^_ƃGLLLLLLcHH HHH@k>HPHXHH9!HHHxHgu2H`HPHBPHH`HxHgtHHHXHpHxHgtHHHH(sH cbEHHMH@c<H,HmcHHHDcHH#cHHc8HH0bHHH_lHb[H6H>HHRHjIODHXHLHLKHVPHHbHHVPHHHaHHHLHsaf.@f.@f.@1f.1f.KJf.;Jf.+Jf.HGHvIH0yt 1>*t0yt fI@f.SH_Ht&HHH@H=P ^uH[IfD[fD[DЃAHtG~fDGPWUfffff.H@wLy3?fÐUSf(HHf(5%-%t$pl$x5~%-~%$$5t%$-[%=c%$$-Q%5Q%D$f(T$0dH%(H$1$$$\$AHcD$Pn Vf(\tp\\$d$YY|$8^X|$@Qf.YYYXt$HQf.d$Xf(o5eL$\YYl$0^f(ViR%%L$d$DYYD$@XvQf.Nl$Hf(f.^l$J|$D$T$8Xd$0YL$ ^\Y^f(;VL$ D$f.f( D$L$(T$ QT$ L$(^\T$T$t$f(\T$t$fTgf.% %D$%YYL$Pl$H$dH3%(^^LH[]L$CL$f(D$XL$CL$f(D$XCL$ f(f(H|$`@\d$d$U>H|$`RHFD$HJH|$`Pf(L$T$l$CL$T$l$_\$(d$ t$T$l$B\$(f(d$ t$T$l$H|$`HHPHG=f.ATUISHf(HĀ-^%dH%(HD$x1f.d$fD$!d$w" v~ ^\^D$fD(f(DYYfA(XQf. $4$f.HL$4$f(f(YYXQf.f.v d$^f(l$8T$0|$(d$ JET$0l$8d$ f.|$(kY ^=v\|$\YD$|$ \A$E4Ht$PH|$XJd$XD$5YL$PY\Qf.f(=t$f(A<$^f(,$T$XY\D$ YXYY\f(YYYYYXXXf( D%\f.f(A<$X^XEE Y%EHD$xdH3%(jH[]A\I$fDf(l$8f(d$0|$(HT$ ,;Y%d$0HT$ |$(l$8f.vX%fDL$0d$(o?L$0f(d$(l$HHT$ d$@\$8T$0|$(2?l$H$HT$ d$@\$8T$0|$(l$0d$(|$ >l$0f(d$(|$ H|$`@9H|$`pMЦHcAH|$`9LEu9H|$`HLHC@AULATUSHHLHdH%(HD$16HHhHtcHPL$IIL9tEI$@HxHhI貫HHH8H"L9huI|$:LHDžrHDž@rHDž<6HH>HHDžqKH0TH0THH@HHDžtxCHHxHgHNHpHTH HI9uL(MtL>HHpHD$dH3%(u8H[]A\A]HHXs H߃LHt$ 7fDSHSSH{vH17H[$HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHH[fff.AWAVAAUATLcUSHHxLJxHLJdH%(HD$h1HxHLJHHT$HGHGR HMR HHH|$@HT$PHt$0Hǃ(Hǃ0HXH`HxHǃ8ǃHHHHHǃPHǃhǃxHǃHǃHD$PD$0gVHD$@HHHHD$ GPHǃ Hǃ0@Hǃ8Hǃ@HǃHHǃPHǃXHǃ`HǃhHǃ(o1H(H HHH,G1HEHHHUHhHH8H@HEH0HHXHPHpH`HHD$(AO11ǃf HǃǃfHǃHǃgHHD$1H3D+HI9w K|HH7ImL(IH@HHD$ItLh HIĀHuHD$Ht$HHh@EDǃHǃƃCHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃƃtHHFt*HD$hdH3%(FHx[]A\A]A^A_HǃGHHDHH|$HtWHx1GH|$0N@H;H|$0EH~9HHs9H|$0ID:Hxw 5GH|$0IH#DLHHNCH|$HHpHD$@k+H+H|$@EH|$PR@H1H|$PDH8HH8H|$PCH|$@>=H|$ItRI)HL$KDHHH9t4HHxHhfHHH8H9l$uLL2HH|$b=HHxHgt Ht$@H8FH|$(nLH bLH|$ XLHHpNHPH@BNL0L(M9tI}Ht6IM9uL(MtL6HHpH9H|$PHH$0f(AHDŽ$HDŽ$DŽ$0DŽ$4DŽ$8HDŽ$@fD$<\$Hd$0YT$8 l%l$@YYYM[#Y^l%t$0XYYX l%Yl%$YX$$;=H$@H$L$0f. kl%1$8ȩ@% %l%H$@D$J*YD$p1$8ȩ@YiC0 H$@D$*^k%C81H$H$f$H$01DŽ$DŽ$DŽ$f$HDŽ$$$H$$EXYD$PYAXD$xD$x|$A+k%3k%^^\k%^XO|#Yj% \$0^f($\d$f(d$^(\$0H$Y\$hY\$P4H$04H$4$@H$HDŽ$ȩUK=i%fE|$`l$xH$A.(4H$04H$4H$xdH3%(u~HĀ[]A\A]A^H$H3H$03H$3H'fDf("9H$HDŽ$ȩJHHAWAVE1AUATAUSHHIH8 dH%(H$( 1BH$GGfD_HGfDo H$Ht$@LD$8D$(3H$H9?H$HxHg+S11f$t$(f$H$`1ɉCfC 11f$lH$f$nE1E1E1HD$0H$DŽ$`DŽ$dHD$HH$@DŽ$hHDŽ$pDŽ$DŽ$DŽ$f$ HDŽ$DŽ$DŽ$DŽ$fD$HDŽ$DŽ$@DŽ$DDŽ$HfD$LfD$NHDŽ$PHD$@FH$Dt$(H$HL$HH$@HDHD$0HL$@ H$H$@DHHD$HHL$@H$@DHHD$@EH$HDŽ$$E$E$1f$1f$5UHuH$H7E1E1E1f$1DŽ$DŽ$DŽ$f$fD$HDŽ$HDŽ$DŽ$ DŽ$$DŽ$(fD$,fD$.HDŽ$0DŽ$DŽ$DŽ$f$HDŽ$D$,L$( HD$E1HhHD$D\$,DED$Et1D9$@ǾȩH$DK$1ȩE@44$HC4$D$\0E4$t 1;$@ǾȩsH$$1ȩ@<|$eHCD$\$Y$$=;$01H$ȩ{ L$@HCT$$\PT$v 1;$@Ǿȩ$1H$ȩŃ{\$ @HCD$ $\@YD$X$$v 1;$@ǾȩO$1H$ȩŃ{$d$@HCd$$\`d$v 1;$@Ǿȩ$1H$ȩŃ{<|$ @HCD$ \@YD$X$Qf. ^ b%;$ $ $H$H$H$H$`DŽ$H$1ɉ$$ $(DŽ$$DŽ$`DŽ$dDŽ$hf$nHDŽ$pHºf$lH$0?Ht$H$`H$$H$H$=f$u7$w-DŽ$DŽ$DŽ$HDŽ$H$e+H$`X+;wCH$HDŽ$0Bf.H$HDŽ$ȩ BHC$H$DŽ$DŽ$DŽ$ H$0H$DŽ$$DŽ$(H$H$H$ DŽ$@DŽ$Df$L1DŽ$Hf$NH$@HDŽ$PH9H0H$H$@);wH$HDŽ$@HCH$H$1H$DŽ$DŽ$DŽ$H$DŽ$DŽ$DŽ$DŽ$DŽ$f$f$HDŽ$<HD$H|$L$@L$HHHH$)H$@ )|$(QPt]%f.$19$ȩ@N41ȩML$A9l$@xID$;B$$$w#H$HDŽ$p?f.HC$H$DŽ$DŽ$DŽ$ H$0H$DŽ$$DŽ$(H$H$H$H$H$$.H$1G,$1{ȩ\@,$uHC$9$`\@\$AvD$d1E@Ǿȩ0D$1ML$pȩE@ H$DK1ȩE@$HC1ȩ$A9l$\@fW$ID$$9$`B^0Av1$d@Ǿȩx1$`$H$pȩL<@K1H${ȩh@,$%HC1ȩ$A9l$\@@fW_$ID$$9$`B^0Av1$d@Ǿȩ$`1$ȩTEH$p@L<1H${ȩP@$eHC1ȩ$A9l$\@@fW$5ID$$9$`B^0Av1$d@Ǿȩ$`IHD$=Y@D9l$(H$p<HD$81HL$0f$ H$H$ E1DŽ$ DŽ$ H$H$H$`H$DŽ$ H$fD$ HDŽ$ $ 9$ H$H$ H$kSeH$ $H$$H$H$ 9H*H$H$H$H$t/H$1 X%f.wD$,D$, H$`Hl$H$1H$H$HH$H$`HH$_H$+#H$ #H$#H$#H|$@"H|$H"H|$0"H$`"H$( dH3 %(H H8 []A\A]A^A_Df$H$DŽ$DŽ$HDŽ$$1f$1f$&H$H$BH$H$@3H$"1{ȩ@Ŀ1HC{ȩH@ $袿HC1ȩhCl$@~HCLt$H$$$H$\$H$L V%V%HD$IV%Y^5V% $H$fL^ f(f(%X88W%8W%#$f.28HDŽ$f(SH$H$ H$1DXlH$H$HDŽ$`7D9$}$H$H$H$H$DŽ$H$D$$ $(ADŽ$$HH$03H|$`APA5H|$`7H|$PAPAo5H|$P7HH$H$ sH$fH$YH|$@OH|$HEH|$0;H$`.H&HNfDHH$@vH|$PHfdH|$`HTRH$HDŽ$5H$i0 8H$ H HB09pH$Hx^H=H$H[AHHH H|$pA\A3H|$p6HeH|$pHUSH$HH$`1H*HQHH$HxHg`H$Nfff.AWAVIAUAT1USHHHn(1dH%(H$1H$D$HT$\艬$$f$f$HDŽ$$q!$H$a H1$$9Ft,L$11@ 9A u1H$Pf$^DŽ$PDŽ$TDŽ$Xf$\HDŽ$`"$XH$`H1H$`H$DŽ$`$pD$\HkAHCH9HD$8IxfE1D$E1H$It$Pt$HD$@f.IH U H$HH@Ht9P }H@HuH9$9S $ED9xD9$jAH$L{(%BT$HLD$^P%\f(T$ T$LD$\f(T$0 $D;$DH$@HrD;$XPBP%H$@H$`HcT$YD$Dk(JHуL$XElEhPA֨6H(@l$t$|$ \$(b H$UeHI`DL HI@D$(LHID$ LHID$L HID$LypHH$jDH|$@D$0D D$HINH;D$8H\$H$N@A^1 H$$H H-H$AƆ1H$H$PH$H$dH3 %(H[]A\A]A^A_H$HDŽ$ȩ.H$HDŽ$ȩ.H$HDŽ$ȩe.H$HDŽ$ȩL.fDD;$Ds1D;$@Ǿȩ$1H$ȩ;$XH@ôH$`-+H$E@] B, H$HyHH$BH$Sf$@1DŽ$DŽ$H$DŽ$f$HDŽ$ H$٫HH$H+,H$H$H$T@ H$HH$PH+H$H$;H$U@D H$7ǃH*H$Hu+H$H$L$H$PH$H$0LH$H$0H&f$>u7$8w-DŽ$0DŽ$4DŽ$8HDŽ$@H$0H$ W@HWHO᫃HBD$HH H'HHw*H1$ȩ@1H$$ȩX@$ͱH$1ȩx$|$@衱H$$L$L蝻Af.I%-AƆ1Hb$Ř$ HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHHGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHfA*YN#XD$H,U HHi@BH|$`H$@FD$`Ht$pH$`H$@D$p)H$`AAH$AI4$|$\$WH$@f@jH$@] HPH$HHV\[pH/D$HfpHD$HvpH$HpHH$@ H$HxHgc L$H$`DŽ$`DŽ$pL$t$1@ǾȩbA^E%Yb!DfWnD$H$Et1$@ǾȩAD$^%E%Yub!$A^E%YRb!  $H$DEfW mYt1$@ǾȩzAD$^D%Ya! $A^vD%Ya!q Y$H$CD-AvD$1E@Ǿȩ|a!AY^D% $H$@v1$@Ǿȩ袬*a!D$AY^C%|$`!AY^C%Y $H$AUAfW lYv1$@Ǿȩ`!D$AY^+C%. v`!$AYf(^C%Y$H$CT-AvD$1E@Ǿȩ芫$H$H@v1$@ǾȩS_!D$AY^jB%m H$AUAv1$@Ǿȩ_!AY^B%$AH$DAIL$p1DŽ$hDŽ$lH$`L1DŽ$pDŽ$tDŽ$x DŽ$pDŽ$tDŽ$x f$|f$~HDŽ$H$`LH$`H$DŽ$`DŽ$p% H$`H$@H$L$`L$(H$ H$@L$H$;$pD$PH$ 1ҹD6f(AуBXD D9BX wPT9vH$ XXQf. D$AEtD$1E@ǾȩϨH$ $ $v1$@Ǿȩ藨$H$ $HX$v1$@ǾȩT$H$ $DXQf.D$AEt$1@ǾȩH$ $$v1$@Ǿȩ轧$H$ $XQf.$Av1$@Ǿȩc$H$ DQf.AAv1A@ǾȩAT@IQf.\AA|$\IhI+HIPIXAHHHH)HHHI@I+0HHH9II Q II> IIp+ AAƆ1AAAAAH$LL}H$HDŽ$HHiAƆ릐HH$H$PHH$HHLHH$`HH$HH$H$@HH$HxHgtH$`裮HD$P1f(H$HDŽ$PHuWHT dAAAAAHLHH$It$HH$`H$`X$1ȩ@H$H$`H$`1$ȩ@ͣH$H$`H@$`1$ȩ@芣H$H$`H@$`1$ȩ@GH$H$`H@$`LAH$`H$`%AH$`H$`AH$`H$`HH3HHpH$@HDŽ$@kHxLHH$@H$`@HhH$`+xHHHH$`H$@I H9H$HIPIHD$II;HIIpHD$II;HIH<$IZH|$IIH|$I8IhI+HIPI+X|$PHAHHAHAHI@I+0HH|$1E1A|$H|$HD$H<$AHXt$At$H|$AHX0L$AgL$IPI+XAoXIhI+HIHHHf(HAHI@I+0HHH9AAfAƆA*^^A^AA5f(f(1f(GHH$@,GH$@ H$`Hff(f(#H|$ tH|$ :H<$ H$HH$TH$HH$|7fD$E1\$P\$'H$HGH$H2H$HDŽ$ȩZHH$PHLH$HeIHLH$0H uDfuwÐHGSHHdH%(HD$1F1fw ‰GщW1f{HC=wwHC HCwN$HfDHH?H<$HSH{H1HD$dH3%(H[DffH*H*Y.35%^H@xH@pH@hH@`H@XH@PH@HH@@H@8H@0H@(H@ H@H@H@H-Hf.HGH;GtHHt@HWAWAVAUATUSHHHLg(HLH)HHt^ID$HC(EHPHS(H@HHCHS HHHStH[]A\A]A^A_@HOHHGIM)IMuIKt-H9vtL)HL,IM9HQL)HHHILk(IEMHCHHC KD5HCHHHC8HHC@HtkLdHI9J<LIHs(L)HL,IHCHHPH)HHHuH;L;LcMALhLLIW+HQIL)HHHLLH)L& f.fLG(HGHHW0H+W8LOL)HHHHHHG L)HHH9sRLH+WIHHH?w fHHH~HIHH)HÐHHHHP1@SHHdH%(HD$1Gw=v$ffH*H*Y.w1%vdSw(HC HCHD$dH3%(u4H[f.HHuH$Ht HCGbfUSHHHHGHGHG HG(HG0HG8HG@HGHHG@>HSHHHH,HEHk(HUHkHHHSHC HEHSHHC8HC0HK@H[]HtHH_H;HHCcHHATIUSH?HtAID$HI\$(HhH9vfDH;HH9wI<$[]A\f.[]A\f.AUATAUSHHdH%(HD$197VSs XfHD@fD fz1f@E1D@ECDD9fpfu AHC HC1+DcDkfCHD$dH3%('H[]A\A]A@v@fDH*fH*Y.n.%@ HH $ A뱐ftfut߹ا9W@f+Dc3DH{DHH~uXH$HtOHCA1"oHH$P8f.SHH83HCHHPHSHH@HHC8HHC0HS@[SHHHHdH%(HD$1u)H$tHt"HL$dH3 %(uH[fD1tAWAVAUATUSHn^}%AE1IIIu!H[]A\A]A^A_ÐyAA9tIAF DHRAFH4DIGAHH|$ ,HDHD$PHxHgt Ht$hxH|$p~HD$@HxHgt Ht$?RHHL訃1HH|$hHD$h L訃1HHt$hHD$`HxHg^OG ft1fu@1@H9AVAUATUSHG D&f;F VDvDnDGtAffAHHv7DH\SHsH}HH[]A\A]A^SA@fE@ufAutHT$ HCT$ DeDufDmHE1UCCfCHCH[]A\A]A^fH[]A\A]A^OfHH!fACUSHHHdH%(H$1H9>t9Vv>HHH$dH3 %(Hu`Hĸ[]F1HfT$HD$$FD$FD$1fD$ HHHHHHH H5DAUATIUSHHHHHheƅ 3A$ f. %f.ff.v% %f.f.v f. %s}ID$H%@#- %5u %I 1f.H9Ⱥf.s&f.s f.vf.sHf.vf.* %rHHXCHC CH []A\A]LMA}8ƅfHHHxGHG GH []A\A]f.CH9+tHHHxGHG GH []A\A]f.LT$ IET$ H@0H=PG LЋT$ 4@AWAVIAUATIUSHHHdH%(HD$81HT$HXCD$(HCHD$HCHD$ ҉D$,IH@M|AUAEA]҉D$)MD$f1$$fE1LAA9twAEI6AH~M|>I}f.$zuǀ|$ftLHFLfAHpH@Ht$HDž@};04FEL$EtD8EAt$LAFI~gH1H0HfDHHHwLML@$՘fLfH0lHLTq?HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGH@$ HGxHGpHGhHG`HGXHGPHGHHG@HG8HG0HG(HG HGHGHGHxHHDž`HHDž`HH H0HH0v H@H÷HfAUATAUSHHHHdH %(H$1H2HPH9H9fr{+;kJD8wH轍H|$@胡HvHHkH|$@AH|$0GbH|$ItLI)Ht$LI HI)J.H9t)HHEHxHgt Ht$@H9l$uLL+H|$HHxHgt Ht$0HHH0HHHpЧHؖH|$0.iH|$@H`[%A$L$d$DYYD$@XQf.Nl$Hf(f.^l$J|$D$T$8Xd$0YL$ ^x\Y^f(_L$ D$f.f( D$L$(T$ ZT$ L$(^\T$T$t$f(\T$t$fTǼf.$ y$D$s$YYL$Pl$H$dH3%(^^LH[]L$7ML$f(D$XL$ML$f(D$XLL$ f(f(H|$`sXǃ\d$d$GH|$`{[HnOD$H0TH|$`6Zf(L$T$l$vLL$T$l$_\$(d$ t$T$l$N$@H$HDŽ$ȩq=x$fE|$`l$xH$A.MH$@MH$MH$dH3%(HĐ[]A\A]A^H$HMH$@{MH$nMHAfDf(gH$ ,y{HCLd$H$ a$H$=a$H$`LXHD$ Ra$Y^>a$!$Ht$xfL^ ,f(f(%dCDb$Db$D$xf.ACHD$xf(^ H$H$ H$@1LcH$@zqDHH$@+H$s+H$f+H$`Y+H|$0O+H|$8E+H|$@;+H$.+H&+HNfDHL +{H$HDŽ$ȩNH$HDŽ$NH$HDŽ$ȩNH$HDŽ$ȩjNH$HDŽ$ȩQNH$HDŽ$ȩ8NH$`HDŽ$`ȩNH$0HDŽ$0ȩNH$ HDŽ$ ȩMH$HDŽ$ȩMH$HDŽ$ȩMH|$`APAwLH|$`NH|$`H&*$D9$dD$`H$pH$`H$H$DŽ$H$D$$$ADŽ$HH$_[pHD$H fpHD$H vpHD$H pHH$H$HxHg H$0H$DŽ$0DŽ$@D$EtD$1E@ǾȩBA^iH$Ye $fW|q$H$t1$@ǾȩA$^H$YXe D$A^G$Y4e L$H$څۿfW pYt1$@Ǿȩ]A$^}G$Yd xD$A^YG$Yd TYD$H$v$1@Ǿȩۯcd AY^F$ $H$@v1$@Ǿȩ良d $AY^F$dD$c AY^}F$@L$H$SfW oYv1$@Ǿȩc $AY^F$  _c D$AYf(^E$YD$H$TvD$1E@Ǿȩs$H$H@v1$@Ǿȩ<b $AY^TE$W H$Sv1$@Ǿȩmb AY^E$$AH$DAIH$@1DŽ$8DŽ$<H$01DŽ$@DŽ$DDŽ$H DŽ$@DŽ$DDŽ$H f$Lf$NHDŽ$PH$0H$@H$0H$DŽ$0DŽ$@H$H$H$H$0H$0H$H$@H$H$H$H$H$$;$4 f1f(vJfDGH$1G f(ƃXA4D9X wGD9vH$XXQf. D$ApEtD$1E@Ǿȩ菫H$$L$v1$@ǾȩV$H$\$HX\$v1$@Ǿȩ$H$D$DXQf.D$AxEt$1@Ǿȩ豪H$$\$v1$@Ǿȩx$H$D$XQf.$Av1$@Ǿȩ$H$DQf.AAv1A@Ǿȩ˩AT@IQf.PAAg|$lJI@I+ I(I0AHHHH)HHHII+HHH9IH9HD$HI(II;MHIIxI;MHLHIxH|$I IL IL I@I+ I(I+0fHHHAHAHIAI+HHzD$11fDAl$HLD$H|$AHXL$A D$HALXl$A D$I(I+0]XI@I+ HHHHAHHII+HHH9#AAfAƅA*^^A^AAH$ H$@H$H$@HDŽ$@,HH$H$ H$HHH$L@H$0SxAƅDI|$@H$0H$01$h1ȩ@H$pH$0H$01$hȩ@覥H$pH$0H@$01$hȩ@cH$pH$0H@$0h1$hȩ@ H$pH$0H@$0%AH$0H$0AH$0H$0AH$0H$0IIXIIEIIH2AAƅ1AAAAAH$0QH$HH$HxHgdH$0ŢRf(f(zHH$H$@LyLlH|$]JHuHHHRH$0XǃHRH$0xHHHH$0SH$pH4HkH$0HHHH$Hr/H$H]H$HxHgHAwf(if(;[f(MH$HHDŽ$HP'HLH5bApAxAAAH H$HL$`h%H$HL$`KH$HL$`.H$HiHH$HxHg{H$0iH$HDŽ$ȩ&HPH$H.H$HH$8HDŽ$8ȩ&H$`HmH$HDŽ$ȩm&H$PH?)mH$H%H@ՃwLycfЃAHtG~fDGPWfffff.SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$H{HxufHD$dH3%(uH[f.PJHfffff.SHHdH%(HD$1@HHtCHHxHgtЃAHtIPЅHt$HHufHD$dH3%(uH[f.PJH.fffff.AUATIUSHH8H|$dH%(HD$(1H|$I4$H{0IHHHHx1H{ptu&HL$(dH3 %(H8[]A\A]DH|$/ЃM$$H|$6҃HLHH|$HLH@HDЃHIgHуHRH N҃H=HZ҃H(H@уHLHs҃HHуHH҃HH҃HHt҃HH_҃HHJ҃H}H5҃HhH ҃HSH ҃H>HӃH)HӃHHуHHуHH,ӃHHHþ9ӃHHpNӃHH[҃HHFiӃHyH1^@Hxw 97H|$H"Hf.USHH(HL$T$\$H}pIt\D$HHHD$HHHD$H_HGH([]fDd$l$t$WAUATLgUSHHpHuH[]A\A]wӃHH IžӃHL IžӃHL| ӃIHL_ӃHLeH\HHXs H߃GBfAWAVAUATUHSHHHpL%!RƃHL5RHǃt1HǃƃI|$HǃHǃHǃHǃL#L7LkHrHǃ@rLLHH[]A\A]A^A_IHHǃtLILLIT$IL4SHH{HrHǃ@rHCH{p[H{@HCqjHRHRHH@HHǃt[Lfff.ATUISH H^HHtЃAHCuRI|$pL$T$\$uRHtHH []A\I|$pd$l$t$|tD$LHID$LHID$LHzMDCHHtHHfffff.ATUISH H^HHtЃAHCuRI|$pL$T$\$~uRHtH;H []A\I|$pd$l$t$,tD$LHID$LeHID$LBH*MDCHHtHwHf.DЃAHtG~fDGPWfffff.SHdH%(HD$1@HHt+HHxHgtHt$HuHu@HD$dH3%(uH[ffff.SHHdH%(HD$1@HHt+HHxHgtHt$HHu@HD$dH3%(uH[fff.H@wLyfH8@ރ>fATUSHH dH%(HD$1HHhHPHhރHepHIpHLHHPHH3HHV9HPރHHHHHD$dH3%(u H []A\nHHHf.ATUSQi: H@H\$`L\$hLT$p$2dH%(HD$81D$D$D$ D$D$D$D$D$ D$$D$(D$,KAAD)kd9D)iҐ)ЃA%Q39|)ƃ@t3E19}9HL$(!)iQu QEEH9~AE.)BiҀQA)ֺų )‰i)ֺ)Ak<)HD$8dH3%(A2uH@[]A\fDAfH^\",и~ NHÐ@AUATIUSAHH|$hdH%(H$x1H!SƄ$HH|$H-SHD$ht1HDŽ$@Ƅ$IH{HDŽ$PHDŽ$XHDŽ$`HDŽ$hH\$H/%H|$PHD$XhHD$hhHD$qHD$ HD$(HD$0HD$8HD$@HD$HHD$Ht$HD$PeD$XHD$`gHxXH|$DHD$LHpHD$`HD$XhHD$hhHD$PeHxHgubH|$PHD$qHCH|$hH\$HlHD$htnH$xdH3%(Lu$HĈ[]A\A]f.Ht$_H|$H2H H|$ImHCH\$LHlH|$hHD$htHHfff.AUATIUSIHH|$xD$dH%(H$1ZHSƄ$XH|$ H-SHD$xt1HDŽ$PƄ$YH{HDŽ$`HDŽ$hHDŽ$pHDŽ$xH\$ H/H|$`HD$ XhHD$xhHD$(qHD$0HD$8HD$@HD$HHD$PHD$XHD$ Ht$(HD$(PeD$hHD$pgHxXGHD$ HL$ McD$H|$ HHQLiQHD$ LHpHD$pHD$ XhHD$xhHD$(PeHxHgu]H|$`HD$(qHCH|$xH\$ Hl HD$xtH$dH3 %(LuHĘ[]A\A]DHt$H|$ HHH|$(IHCH\$ LHl H|$xHD$xtqHYH@AWAVAUATIUSHHH|$ H$pdH%(H$1H$ps HxH$pHx;kC0L$PH$ LH$H$pHxHVUH$HxHg H$pHxH$pHxH$pHxHs0LC(E11HL)ML98 LHfHtHHH9uL)HT D)Ht$ H$A !H$H$pHxHVtH$HxHg HtHnH$pHxH$pHxH$pHxH$pHxH$L #H$H$pHxHVH$HxHg/ H$pH$Hp H|$ H$H$HxHg H$pH$HpH$IEHHD$(HV,HH$HxHgH$ H$HxHC(p !H$HxHC(pH$HxH$L H$H$HxHVjH$HxHgHs0LC(E1E1HL)L9LLHt HHH9uL)LL)HD$HD$L$LLHD$IGHD$f.H;\$tgH$LHhUⵃUQƅ0H@LHDŽ3HmHH;\$uH$L XH$H$HxHV+H$HxHgH$H$HpyH|$ H$H$HxHgH$H$ Hp5H$ H|$(HVH7H$ HxHgH$P|H$0L bH$0H$PHxHV5H$0HxHggL$`H;\$soH$`LLHHHhQⵃQƅ0H@LHDŽpA4HHH$uH$@L H$@H$PHxHV[H$@HxHg,H$PLHpH|$ LQH$PL$`HxHgH$PLHplH$`H|$(HVHnH$`HxHgH$PHMtLH$.H$p!H$dH3%(H[]A\A]A^A_LM6A}8t9ƅDLMHA~8t9ƅ3DLIEH@0H=Pu8H$fDLIH@0H=Pu!H$` L@ LoHIHs0LC(WIIHs0LC(-Y;"f(^ :"f(L$|,HfL$*\L$L$hAVL$`ATH$XPL|$@L$PL$@H$0LfH H$*$`XD$/H$H$A LLp$PH|$pA0L$@H|$`A0L$0H|$PA0L$ H|$@A0L$H|$0A0LHt$0H$pHxHVHHt$@HHVHHt$PHHVHnHt$`HHV}HPHt$pHHV_H2H$HHV>HD$0HxHgHD$@HxHgHD$PHxHgHD$`HxHgHD$pHxHgH$HxHgH$HxHgbH$APL$`L,L$`LL$`LL$`L-L$`LLaL$`LLL$`LL$`LL$`Lj7L$`LU1HD$L$`L+:H$H|$0hރxH|$0nHaH|$07fI DH|$0hރ(H|$0HH|$0fI H|$0hރH|$0HH|$0RfIH|$Hxw uIELHxw ZDI H|$ Hxw 5I0H|$(Hxw Ht$0Ht$0Ht$0Ht$0 Ht$0Ht$0lfff.SH@H|$HT$dH%(HD$81gHt$H|$ 踺HD$HxHguH|$ HD$ Ht$)H|$ HHD$ HHHD$HxHgtHt$ "HYXY3H,HiHHw H[xHfDfə%)H*Y "XY2H,HiHHw H[xHÐfSFHH/ fH*Y "XYM2H,HiHHw H[xH[ÐAWAVAUATIUSH H$H|$H|$0dH%(H$ 1H$H$H$諺HP fD@APfDf Hlf=wyf='`*f,D)Ή))эRADgfffiЉfimfH|$ i{i> )ӂD$ H$c?H$Hx褽H$H|$@HpH$HT$H$DŽ$HDŽ$HDŽ$H$H$H$H$dHxH$H$ɱH$HT$H$H$H$uHxwH$H$rH$5HT$H$ >H$ H$KyHx H$ H$H$ HT$H$0H$0H$HxH$0H$İH$0HT$H$@H$@H$6HxrH$@H$mH$@0HT$H$P9H$PH$HxH$PH$H$PHT$H$`H$`H$HxH$`H$迯H$`HT$H$p/H$pH$ }HxmH$pH$hH$p+HT$H$D4H$H$t }HxH$H$H$HT$H$XH$H$jHxH$H$躮H$}H$H$H$軵HHʼHt$PH$@HD$PH$p$HH$pHxwH$H$\2DŽ$HDŽ$HDŽ$H$H$bH$H$ЭH$H$LހbH$H$藭H$ZH$DtbH$H$^H$!H$6|JbH$H$%H$H$f}bH$H$H$H$taH$H$賬H$vH$aH$H$zH$=H$I~ faH$H$AH$H$ 8 z-aH$ H$H$ H$0!}`H$0H$ϫH$0H$@c;aH$@H$薫H$@YH$Pā^aH$PH$]H$P H$`S8`H$`H$$H$`H$pPu&`H$pH$H$pH$VpW`H$H$貪H$uH$K6s`H$H$yH$<H$5*}_H$H$@H$H$[}v_H$H$H$H$6ys_H$H$ΩH$H$U|:_H$H$蕩H$XH$ _H$H$\H$H$eMy^H$H$#H$H$?^H$H$H$H$wV^H$H$豨H$tH$pH|$pHpNHt$pH$H|$`HoHD$pHxHg[H$$D H$HxdH$H$Hp˸$TH$PX?H$PHxH$PH$Hp胸L$M=MeH$Mt$؅x?LMMtH$LD$H$H$xHL$ofDH$HxB H$Hx#H$0HH'H3H?HXHnH$H$oH$]YHPeHCqHH$`HxHgu}H$H$NHD$@HxHgt H$H$ըHD$0HxHgt Ht$HQHH$HxHgtH$qHH$HxHgt H$0rH$HxHgt H$0PH$HxHgt H$0.H$HxHgt H$0 H$HxHgt H$0H$PͧH$HxHgt H$0H$螧HD$`HxHguDH$H$MH$pjOHHHD$pHxHgtH$0KHH$HH$H H$H lH$H WH$H BH$H -H$H H$pH H$`Ho H$PHZ H$@HE H$0H0 H$ H H$H H$H pH$H [HHHHH$H HH$HxHgH$Hq fHH$HxHgJH$PH; 0HH$PHxHgH$@H HH$@HxHgVH$0H H$H 9H$H $H$H x1ҿxDο1111HT$H$߃:H$H$ eH$ H]HH$0HxHgt H$H$ HxHg9H$0'mH$ HƶH$HxHgH$HH@HHH$0HxHg'H$ H HH$ HxHgiH$H aH$H LH$H 7H$H "H$H HHHT$H$߃肽H$0H$H誹HbH$H2 'HHH_H$HxHgH$@HH$HHH$HxHg0H$pHHHHHH$pHxHgjH$`H[PfDAWAVAUATUSHHxdH%(H$h1蔭HHHD$耭H HHD$lL0L]L@LNHX H$@H|$PǃX Hǃ` Hh Hp H Hǃx ǃ LP H H H Hǃ Hǃ ǃ Hǃ Hǃ H H Hǃ gHǃ gHǃ gHǃ gHǃ gHǃ gHT$PH|$@HH Ht$@H HD$@HxHg HD$PHxHg H$@H|$pLP 菺HT$pH|$`HL Ht$`L虬HD$`HxHgHD$pHxHgH$@H$/LP H$H$H4H H$HHD$H$HxHg?H$HxHg>H$@H$LP 蕹H$H$HH H$HHD$ 葫H$HxHgH$HxHgH$@H$LP H$H$H&H H$HHD$( H$HxHgH$HxHgH|$HLP oLH_Ht$H|$KHt$ L9Ht$(L'H$@H$z-H$L=HH$HxHgH$@H$aݷH$LH萞H$HxHgH$@H$荷H$LjH@H$HxHgH$@H$ }=H$LMmHH$HxHgH$@H$ H$ Lt }H蠝H$ HxHgH$@H$0蝶H$0LKyHPH$0HxHgH$@H$@MH H$@HVs }HH$@HxHgHH$@H$PH$PHH詜H$PHxHgH$@H$`覵H$`HHYH$`HxHgH$@H$pVH$pHfH H$pHxHgH$@H$H$HH蹛H$HxHghH$@H$趴H$HHiH$HxHg0H$@H$fH$HvHH$HxHgH$@H$ H$H&HɚH$HxHgH$@H$ƳH$H }HyH$HxHgH$@H$)vH$H5H)H$HxHgPH$@H$8&H$H6EHٙH$HxHgH$@H$HֲH$HQH艙H$HxHgH$@H$T膲H$HfH9H$HxHgH$@H$i6H$HFrHH$HxHgpH$@H$ uH$ H~H虘H$ HxHg8H$@H$0薱H$0HHIH$0HxHgH$@H$@FH$@HVHH$@HxHgH$@H$PH$PHH詗H$PHxHgH$@H$`覰H$`H> }HYH$`HxHgXH$@H$pVH$pHfs }H H$pHxHg H$@H$H$HH蹖H$HxHgH$@H$趯H$HHiH$HxHgH$@H$fH$HvQHH$HxHgxH$@H$H$H&HɕH$HxHg@H$@H$ƮH$H }HyH$HxHgH$@H$ vH$Hs }H)H$HxHgH$@H$&H$H6$HٔH$HxHgH$@H$'֭H$H6H艔H$HxHg`H$@H$9膭H$HH9H$HxHg(H$@H$G6H$HFHH$HxHgH$@H$ UH$ H> }H虓H$ HxHg8 H$@H$0c薬H$0HqHIH$0HxHg H$@H$@tFH$@HVHH$@HxHg H$@H$PH$PHH詒H$PHxHg H$@H$`覫H$`HHYH$`HxHgX H$@H$pVH$pHfH H$pHxHg H$@H$H$HH蹑H$HxHg H$@H$趪H$HHiH$HxHg H$@H$fH$HvHH$HxHgx H$@H$H$H&HɐH$HxHg@ H$@H$ƩH$HHyH$HxHg H$@H$vH$HH)H$HxHg H$@H$&H$H6s }HُH$HxHg H$@H$֨H$HH艏H$HxHg` H$@H$'膨H$HH9H$HxHg( H$@H$16H$HF> }HH$HxHg H$@H$ <H$ HIH虎H$ HxHgp H$@H$0L薧H$0HYHIH$0HxHg8 H$@H$@\FH$@HVEHH$@HxHg H$@H$PjH$PHqH詍H$PHxHg H$@H$`x覦H$`HHYH$`HxHg H$@H$pVH$pHfH H$pHxHgX H$@H$H$HH蹌H$HxHg H$@H$趥H$HHiH$HxHg H$@H$fH$HvHH$HxHg H$@H$L H$Lt }H‹H$HxHgq H$@H$迤H$L6HrH$HxHg9 H$@H$oH$LH"H$HxHg H$@H$H$L/jHҊH$HxHgH$@H$ϣH$Lt }H肊H$HxHgH$@H$H$LH2H$HxHgYH$@H$/H$L?6HH$HxHg!H$@H$ ,ߢH$ LH蒉H$ HxHgH$@H$07菢H$0LjHBH$0HxHgH$0H$@J?H$@HOހHH$@HxHgyH=2YW(uTH ǃ W詈H$hdH3%(ǃ  Hx[]A\A]A^A_fDH=Y迟H=Y|覟H=Y\荟]H=~YatlH=eY[+H$PhރH-5Y`H$P#fHHuHHV&߃HH$P̜@H ǃ mH$P胨~fDH$PkfDH$PSfDH$P;&fDH$P#^fDH$P fDH$PfDH$PۧfDH$Pç>fDH$P諧vfDH$P蓧fDH$P{fDH$PcfDH$PKVfDH$P3fDH$PfDH$PfDH$P/fDH$PӦgfDH$P軦fDH$P裦fDH$P苦fDH$PsNfDH$P[fDH$PCfDH$P+fDH$P.fDH$PffDH$PfDH$P˥fDH$P賥fDH$P蛥FfDH$P胥fDH$PkfDH$PSfDH$P;fDH$P#]fDH$P ^fDH$PfDH$Pۤ/fDH$PägfDH$P諤fDH$P蓤fDH$P{#fDH$Pc!fDH$PKFfDH$P3~fDH$PfDH$PfDH$P&fDH$Pӣ^fDH$P軣fDH$P裣fDH$P苣fDH$Ps>fDH$P[}fDH$PCfDH$P+fDH$P%fDH$P]fDH$PfDH$PˢfDH$P賢fDH$P蛢=fDH$P胢ufDH$PkfDH$PSfDH$P;&fDH$P#^fDH$P fDH$PfDH$PۡfDH$Pá>fDH$P諡vfDH$P蓡fDH$P{fDH$PcfDH$PKVfDH$P3fDH$PfDH$PfDH ǃ \H ǃ a{HH$ HxHgt H$P膠H HxHgt Ht$?hH HxHgt Ht$?JH HxHgt Ht$?,H HxHgt Ht$?H HxHgt Ht$?H HxHgt Ht$?ҟH H ?"H H ,"H` L"LLH|$H|$HHHH$@HxHgH$P@HH$0HxHgH$PHH$HxHgkH$PYHH$pHxHg=H$P趞+HH$`HxHgH$P舞HH$PHxHgH$PZHH$HxHgH$P,HH$HxHgH$PsHxH\H^HHD$@HxHgt H$P违HD$PHxHgt H$P蠝LP HHHHH$HxHgt H$PZH$HxHgt H$P8LP HHHD$`HxHgt H$PHD$pHxHgt H$PLP THHH$ HxHg3H$P謜!HH$HxHgH$P~HH$@HxHgH$PPHH$HxHgH$P"HH$HxHg{H$PiHH$HxHgMH$Pƛ;HH$HxHgH$P蘛 HH$HxHgH$PjHH$HxHgH$PH$P跙,HH$HxHgH$P艙HH$HxHgH$P[HH$HxHgH$P-HH$HxHgH$PtHH$HxHgt H$P՘H$HxHgt H$P賘LP !HHH$HxHgt H$P}H$HxHgt H$P[LP HHH$HxHgH$P!HH$HxHgzH$PhHH$pHxHgLH$Pŗ:HH$`HxHgH$P藗 HH$PHxHgH$PiHH$@HxHgH$P;HH$0HxHgH$P HH$ HxHgfH$PߖTHH$HxHg8H$P豖&HH$0HxHg H$P胖HH$HxHgH$PUHH$HxHgH$P'HH$HxHgH$PnHH$HxHgRH$P˕@HH$ HxHg$H$P蝕HH$HxHgH$PoHH$@HxHgH$PAHH$0HxHgH$PHH$`HxHglH$PZHH$PHxHg>H$P跔,HH$HxHgH$P艔HH$pHxHgH$P[HH$HxHgH$P-HH$HxHgH$PtHH$HxHgXH$PѓFHH$HxHg*H$P裓HH$pHxHgH$PuHH$`HxHgH$PGHH$PHxHgH$PHH$@HxHgrH$P`HH$0HxHgDH$P轒2HH$ HxHgH$P菒HH$HxHgH$PaHH$HxHgH$P3HH$HxHgH$PzHH$HxHg^H$PבLHH$HxHg0H$P詑HH$HxHgH$P{HH$HxHgH$PMHH$HxHgH$PHH$HxHgxH$Pffff.AWAVAUATUSHHHdH%(H$x1HFH$HL$LD$ HDŽ$`HHDŽ$hHDŽ$pHD$@gIHD$Go11LHD$(}L$`H$hE1L˙H$`L$hHD$PgHD$DHH@D CLMA|$8AT$CHt$PH6sE=HD$@H|$@11HPxH|$P1Ҿ}耀H~H|$P;]H[L$@H|$`LYHt$`H|$@JHD$`HxHg$H|$pL }yHt$pH|$@HD$pHxHgH$H$AA H H$H$A HH$H|$@~H$HxHgH$HxHgH$H$AA HHPC H$H$A H0H$H|$@~H$HxHgUH$HxHg$H$H$AA HHPH$H$A HH$H|$@~}H$L$PHxHg H$HxHgH$AA LHHDŽ$PH$H$A HH$H|$@|H$HxHgv H$HxHgM L$0H$ LvH$H|$@y|H$HxHg H$LKH$H$ A H H$ H|$@|H$ HxHg H$HxHg H|$Ht$@HH@D HKmH 0HHH|$11xH$`H$hE1E1H)H~E@J4*H|$HVHFH$`H$hAIH)HD9HlHH~Ht$(H|$16x߃@j'tHHD$PHxHgHD$@HxHgH|$H$xdH3%(HĈ[]A\A]A^A_H$hH;$pJ HtHt$P{fH$hHH$h:fLhpI$ H@0H=PL L:DH|$P1ҾzH`H|$P;zH=L$@H$0L踁H$0H|$@yH$0HxHg HT$H$@AAHgH$@H$PA HT H$PH|$@2yH$PHxHg H$@HxHg HD$H$`AAHHPH$`H$pA H H$pH|$@xH$pHxHgX H$`HxHg' HD$H$Hp9hH$H$A HF H$H|$@$xH$HxHg H$HxHgz HD$H$Hp gH$H$A H H$H|$@wH$HxHgH$HxHgH$L qH$H|$@IwH$HxHgpH$L⾒H$H$A HH$H|$@vH$HxHgH$HxHgL$PL褆H|$P1ҾbwHhH|$P;4oHJL$@H$L=~H$H|$@+vH$HxHg HD$ H$AAHHxH$H$A HH$H|$@uH$HxHgH$HxHgSHD$ H$ AAHHQH$ H$0A H>H$0H|$@uH$0HxHgH$ HxHgHD$ H$@HdH$@H$PA HH$PH|$@tH$PHxHgH$@HxHgHD$ H$`H1dH$`H$pA H>H$pH|$@tH$pHxHgoH$`HxHgAH$L 0nH$H|$@sH$HxHgH$L⾒{H$H$A H=H$H|$@[sH$HxHgoH$HxHgEL$PL0@H|$P;kHHD$H$HpbH$H$A HH$H|$@rH$HxHgIH$HxHgHD$H$Hp8?bH$H$A HLH$H|$@*rH$HxHgH$HxHg}HD$H$Hp(aH$H$A HH$H|$@qH$HxHgH$HxHgHD$H$Hp0EaH$H$ A HRH$ H|$@0qH$ HxHgGH$HxHgL$@L$0 $LL9kH|$@LpH$0HxHg&H$ LxL$PA LHLMH|$@LppH$PHxHgH$@HxHgZL6MH|$Ht$P1AfDL$PLL$PL^L$PLL^L$PLL$PLL$PLxLhLXLH}L8L(?LH|$P;gHHt$PH|$fDL$PL~L$PL~{L$PL~L$PL~L$PLh~qL$PLP~@L$PL8~L$PL ~L$PL~L$PL}L$PL}FL$PL}|L$PL}L$PL}L$PL}|L$PLo}L$PLZ}L$PLE}VL$PL0}(L$PL}L$PL}jL$PL|H$P|H$P|H$P|1H$P|L|6H$P|H$Pn|qH$P\|FH$PJ|H$P8|H$P&|^H$P|6^HHD$PHxHgt Ht$?{HD$@HxHgt Ht$P{H|$HMgHH$ HxHgt H$P{H$HxHgxH$Pr{fHH$HxHgt H$PH{H$HxHg(HHH$HxHgHH$HxHgjHH$HxHgIHH$HxHgt H$PzH$HxHgHH$PHxHgtLezH$@HxHgELDz8HHHH$HxHgH$P zHH$HxHgg[HH$HxHgLyHH$HxHgt H$PyH$HxHgsHHH$HxHgMHH$pHxHgt H$P*yH$`HxHg HHH$PHxHgt H$PxH$@HxHgEHHH$0HxHgHHH$HxHgH$PmxHH$0HxHgt H$PCxH$ HxHg#HHH$HxHgH$PwHH$0HxHgRHH$ HxHgtLwH$HxHgHHH$HxHgkHH$HxHgt H$PHwH$HxHg(HHH$HxHgt H$PwH$HxHgcHHHD$pHxHg@HH$HxHgt H$PvH$HxHgzHHH$HxHgTHH$HxHgt H$P1vH$HxHgHHH$HxHgt H$PuH$HxHgLHHH$pHxHgt H$PuH$`HxHgHHH$PHxHgt H$PYuH$@HxHg9HHH$`HD$6HHD$`HxHgHH$HxHg Ltf.AWL~AVAUATIUSIH11HLdH%(H$1HDŽ$HDŽ$HDŽ$HD$ gaH$H$E1H}H$H$HD$0gHD$DHEH@D {HH{8SCHt$0HIWE`HD$ H|$ 11HP\H|$0;dHH$H;$HtHt$0OH$HH$IuH|$@?SHT$@H|$PA LRHt$PH|$ 3cHD$PHxHgHD$@HxHgWIu8H|$`RHT$`H|$pA LHt$pH|$ bHD$pHxHgHD$`HxHgIu(H$pRH$H$A L}H$H|$ [bH$HxHgRH$HxHg!Iu0H$QH$H$A LH$H|$ aH$HxHgH$HxHgyH$H$ $[H$H|$ aH$HxHgH$H$MiH$H$A LH$H|$ aH$HxHgH$HxHgfH$H;$@HtHt$ LH$HEHH$H@D H"RI 0HL[d11L]H$H$E11H)H~CfDJ4*LHVdH eH$H$IH)H9HQLHc1LdaHD$0HxHgRHD$ HxHgNH|$xH$dH3%(%H[]A\A]A^A_DH$H;$HHt$0gKfHhUH H@0H=P: H(fDH|$0 ;_HHt$0H|$t {AzfDH$nfDH$nfDH$nifDH$snfDH$[nWfDH$CnfDH$+nufDH$nDfDH$mfDH$mfDH$m%fDH|$Ht$0w@H|$Ht$0w'@H|$Ht$ wTH$omH$]mOHHD$0HxHgt Ht$4mHD$ HxHgt Ht$0mH|$>vHXHH$HxHgt H$lH$HxHgxH$lfHHH$HxHgEH$l3HH$HxHgt H$^lH$HxHgHHH$HxHgt H$lH$HxHgfHHHD$pHxHgt H$kHD$`HxHgn$HHD$@HxHgPHHHD$PHxHgtH$tk=MHH$HD$$AWAVAUATUSHHHHt$ HD$(HL$HD$@gdH%(H$81xH|$PHXHt$PH|$`aHt$PH|$p`Ht$PH$ `Ht$PH$ ` H$HxHgH$HxHgHD$pHxHgHD$`HxHgHD$PHxHgHD$@HxHgH$8dH3%(HH[]A\A]A^A_fDHD$@Lt$@11LHPRL$ Ht$PL_L$H$ LSH$LUYH$HxHg{LL1YH$L wSH$LYH$HxHgH|$`1XH$L SH$LXH$HxHg5Ht$`H$A[H$LaXH$HxHgH$L RH$LXH$HxHgH|$p1WH$L -RH$LWH$HxHgHt$pH$XZH$LxWH$HxHgH$L QH$L5WH$HxHgH$L WH$ L RQH$ LVH$ HxHgH$LVH$0L PH$0LVH$0HxHgL #D$(Wf(D$I!f.vCH$@L PH$@L!VH$@HxHgD$H$PlH$PLUH$PHxHgH$`L  PH$`LUH$`HxHg0H$pL0OH$pLZUH$pHxHgHL$DŽ$HAHHL$H9t#f.Hlj$nWH;D$uH$LGH$H$A HH$LTH$HxHgH$HxHgHD$L$HhH;l$>LP f.E FH$L0NH$LTH$HxHgE H$0H$$0FH$LSH$HxHguqH)VH;D$HH$Lz[H$L覑HL{SH$HxHgH$0UcLHcfDH$03c)fDHD$@PH$L H+peMH$LRH$HxHg4LHQdHt$@HD$ HVHHHD$WHWHD$L`L;d$H$0fA$H$4iH$H$A HQH$H1RH$HxHgH$HxHgH$H$ @LH$HQH$HxHgAD$hHeH$ AfH$ H$0A HH$0HcQH$0HxHgJH$ HxHgAD$xH$@^ժgH$@H$PA HH$PHPH$PHxHgH$@HxHg[H$H$` JH$`H|PH$`HxHgH$pDdH$pH$A H@H$H PH$HxHgH$pHxHgnAD$pH$fH$H$A HH$HOH$HxHgH$HxHgH$H$ IH$HAOH$HxHgxH$DcH$H$A HH$HNH$HxHg H$HxHgAD$hH$jeH$H$A HH$HgNH$HxHg^H$HxHgeH$0HVHOwUL$PH$H)ֺ L^HLHMH$HxHgH$0HVH|$RHRH$0HxHgL PH;D$IH64R11HHDŽ$0gFHD$@11LHPyFH$H$ GH$L*MH$HxHgL ]@L\PL\L\ L\L\L\{L\#L\Lx\Lh\\LX\LH\L8\oL(\L\L\L[L[,L[H$ HxHg /L$Ht$P1LQL$ H$>LELt$@H$LMKH$HxHgbH$ L zEH$ L KH$ HxHg LLJH$0L ,EH$0LJH$0HxHg Ht$`LJH$@L DH$@LlJH$@HxHgB Ht$pLFJH$PL DH$PLJH$PHxHg H$LIH$`L 9DH$`LIH$`HxHgu H$LIH$pL CH$pLvIH$pHxHg  #D$(jJf(D$0!f.vCH$L0xCH$LIH$HxHg D$H$_H$LHH$HxHgI H$L BH$LHH$HxHg H$L0BH$LAHH$HxHg HL$DŽ$HALyL9tfDHlj$^JL9uH$H$4H$H$A HH$LGH$HxHg H$HxHg HD$@PH$L H+pAH$LH$H$.DH$HxHgH$DXH$H$A HH$H$CH$HxHgH$HxHgEpH$TZH$H$A HqH$H$LCH$HxHgkH$HxHg:H$L `=H$H$BH$HxHgH$DBWL$H$A HLH$LBH$HxHgcH$HxHg2L$EhLYA LHL7H$LBH$ HxHgH$HxHgH$HVHOwWPH$0LH)ֺ 5)H$H|$ .H$HxHgH$H$ (H$H|$ y.H$HxHgxH$H|$ N.H$H$ (H$H|$ .H$HxHg.Ht$@H|$ -H$H$ 6(H$H|$ -H$HxHg Ht$PH|$ -H$H$ 'H$H|$ k-H$HxHg Ht$`H|$ C-H$H$ 'H$H|$ -H$HxHgY Ht$pH|$ ,H$H$ +'H$H|$ ,H$HxHg  H#D$-f(D$s!f.vJH$H$0&H$H|$ D,H$HxHg5 D$H$BH$H|$ ,H$HxHg H$H$  )&H$ H|$ +H$ HxHg H$H$00%H$0H|$ m+H$0HxHg IFMfD$L9tf.Hlj\$-L9uHt$H$@jH$@H$PA HH$PH|$ *H$PHxHg H$@HxHg HD$ PH$H$` H+p$H$`H|$ i*H$`HxHg Ht$ H;Ht$ ILHV~.H/I^L9|@C PH$H$0I$H$H$`)H$HxHgC H$H$$H$H$`)H$HxHgH$$@H$H$A HAH$H$`)H$HxHgSH$HxHg"H$H$ +#H$H$`(H$HxHgChHH$H$A HH$H$`'H$HxHg<H$HxHg H$H$ !H$H$`W'H$HxHgFH$ D;H$ H$0A HH$0H$`&H$0HxHgH$ HxHgCpH$@}=H$@H$PA H蚹H$PH$`u&H$PHxHgH$@HxHgH$H$`  H$`H$`&H$`HxHgVH$pDf:H$pH$A HӸH$H$`%H$HxHgH$pHxHgChH$5H$/vH$/H$/H$/NH$/H$/HH$`HxHgt H$PW/H$HxHgt Ht$8/HD$pHxHgt Ht$/HD$`HxHgt Ht$/HD$PHxHgt Ht$.HD$@HxHgt Ht$.HD$0HxHgt Ht$.HD$ HxHgt Ht$.HHH$HxHgH$_.HH$HxHgHH$HxHgHHH$HxHgHH$HxHgkHH$HxHgdJHH$HxHgC)HH$HxHg"?HHHH3HGH[HH$HxHgH$-HH$HxHgt H$,H$pHxHgZHHH$`HxHg7HH$PHxHgt H$,H$@HxHgHHHH$0HxHgt H$A,H$ HxHgHHH$HxHgHH$HxHgt H$+H$HxHgFHHH$HxHgt H$+H$HxHgOHHH$HxHg)HH$HxHgt H$'+H$HxHgHHH$ HxHgwHH$HxHgpVHH$HxHg-H$*HH$HxHgH$H|$ sH$HxHgH$H$ H$H|$ )H$HxHgzH$H|$ H$H$ ?H$H|$ H$HxHg0Ht$@H|$ H$H$ H$H|$ tH$HxHgHt$PH|$ LH$H$ H$H|$ H$HxHgHt$`H|$ H$H$ 4H$H|$ H$HxHg[Ht$pH|$ H$H$ H$H|$ iH$HxHg #D$]f(D$#s!f.vJH$H$0fH$H|$ H$HxHg% D$H$,H$H|$ H$HxHg H$H$  H$ H|$ gH$ HxHg H$H$00H$0H|$ H$0HxHg IFMfD$L9tf.Hlj\$AL9uHt$H$@H$@H$PA H觧H$PH|$ H$PHxHg H$@HxHg HD$ PH$H$` H+pH$`H|$ H$`HxHg Ht$ Hs%Ht$ ILHV.HI^HDŽ$PgL9 C PH$H$0 H$H$`tH$HxHg C H$H$$蜳H$H$`'H$HxHgH$)H$H$A HH$H$`H$HxHgsH$HxHgBH$H$  H$H$`VH$HxHgChH&H$A&H$H$A H H$H$`H$HxHgUH$HxHg$CxH$^Zke(H$H$A H肤H$H$`]H$HxHgH$HxHgkH$H$  l H$ H$`H$ HxHgH$0DN%H$0H$@A H軣H$@H$`H$@HxHgH$0HxHg\CpH$P'H$PH$`A H:H$`H$`H$`HxHgH$PHxHgH$H$p $ H$pH$`H$pHxHgFH$D$H$H$A HsH$H$`NH$HxHgH$HxHgChH$%H$H$A HH$H$`H$HxHgH$HxHgH$`HVHOw\PH$H$H)ֺ H$H$`RH$HxHgAH$`HVLuH H$`HxHgHlL9HHQH$`11HDŽ$`gH$PDC(H$P1HP' H$PuWH$H$pzwHP H$pKH$`HS H$pHxHgZH$PmXpH$H$ }HP H$KH$`H H$HxHgH$H$fDH$fDH$sRfDH$[!fDH$CfDH$+CfDH$fDH$fDH$afDH$fDH$fDH$RfDH$fDH$kfDH$SfDH$;fDH$#{fDH$ fDH$H[ L9HH$PHHgH$HxHgHD$pHxHg|HD$`HxHgxHD$PHxHgtHD$@HxHgpHD$0HxHglHD$ HxHghH$dH3%(H[]A\A]A^H$fDH$fDH$[H$H$H$2H$sjH$aH$OH$=8H$+gH$nH$rH$vH$zH$~H$H$H$H$0HxHgH$ HxHgIW@H$@AA HH$@H$PA HԇH$PH|$@H$PHxHgHH$@HxHgDH$`L H$`H|$@TH$`HxHgH$pL&H$pH$A HӅH$H|$@H$HxHg3H$pHxHg H$Hf.H|$P;\HSL$H$  LH$ H|$@NH$ HxHgIW(H$0AA HH$0H$@A HH$@H|$@H$@HxHgH$0HxHgIW0H$PAA H脔H$PH$`A HqH$`H|$@OH$`HxHgH$PHxHgIW8H$pAA HH$pH$A HH$H|$@H$HxHg+H$pHxHg'IW@H$AA HlH$H$A HYH$H|$@7H$HxHgH$HxHgH$L KH$H|$@H$HxHg0H$LH$H$A HXH$H|$@vH$HxHgy H$HxHgH$H4H|$P;HL$H$ LOH$H|$@H$HxHgHD$H$AAHHP蚑H$H$A H臂H$H|$@eH$HxHgH$HxHgHD$H$AAHHP H$H$ A HH$ H|$@H$ HxHgH$HxHgHD$H$0HplH$0H$@A HyH$@H|$@WH$@HxH$HgHD$ <H$0HxHg HD$Ht$ H$P@ D$,$NH$PH$`A HۀH$`H|$@H$`HxHg H$PHxHg H$pL H$pH|$@[H$pHxHgn H$L-H$H$A H~H$H|$@H$HxHg H$HxHg-Ht$ H|$P1ҾoHL$H$LxH$H|$@fH$HxHg HD$H$AAHHP#H$H$A HH$H|$@H$HxHg H$HxHg HD$H$AAHHP蒍H$H$A H~H$H|$@]H$HxHg H$HxHg HD$H$HpH$H$A H~H$H|$@H$HxH$HgHD$  H$HxHg HD$Ht$ H$@ D$,$׊H$H$A Hd}H$H|$@BH$HxHg] H$HxHg H$ L VH$ H|$@H$ HxHgH$0LH$0H$@A Hc{H$@H|$@H$@HxHgvH$0HxHgHt$ EH$H0yH$HGH$HH$HH$HH$HH$HH$H&H$HH$HsH$HH$HSH$HwH$HbqH|$P;HHD$H$Hp( H$H$A HzH$H|$@H$HxHg&H$HxHg7L$H$ 6LH$H|$@H$HxHgH$L`H$H$A H xH$H|$@+H$HxHg6H$HxHg`@H|$P;HBHD$H$PHp(H$PH$`A HxH$`H|$@H$`HxHgH$PHxHgHD$H$pHp8H$pH$A H,xH$H|$@ H$HxHgH$pHxHgHD$H$Hp0"H$H$A HwH$H|$@H$HxHgH$HxHgHD$H$Hp4襄H$H$A H2wH$H|$@H$HxHg H$HxHgL$H$ $LH$H|$@H$HxHgH$L|H$LA HHHD$ I#uH|$@LFH$HxHg H$HxHg^H$_H$7H$HrH$HH$HH$HH$HH$HkAH$HVEH$HAH$H,H$HH$HH$H7H$H;H$HH$HH$H^H$HbH$HoH$HZH$HE"H$H0&H$HH$HHt$ 'Ht$ {Ht$ Ht$ L1L H|$P;gHHt$PH|$  AHt$ cFH$HNH$H9H$H$[H$HhH$H:HsHHD$PHxHgt Ht$?HD$@HxHgt Ht$PH|$H&fDH|$P;LHHt$PH|$LVAH$HAH$H,H$HH$HAH$HHt$ 8HLH$HH$HH$H{H$_H$MH$;^H$)3H$H$oH$H$H$HH$`H$5HH$HxHgt H$~H$HxHgH$XsHHH$HxHgt H$)H$pHxHg0H$HH$HxHgt H$H$HxHgH$HH$HxHgt H$H$HxHgH$c~HHH$HxHgt H$4H$pHxHg;H$)HHH$`HxHgt H$H$PHxHgH$HHH$HxHgH$HH$HxHgH$XsHH$ HxHgWHt$ -HHH$pHxHg,Ht$ HH$HxHgt H$H$HxHgH$HH$HxHgH$HH$HxHgt H$ZH$HxHgaH$4OHHH$HxHgtL H$HxHgLHHHH$HxHgH$HH$HxHgt H$H$HxHgH$^yHHH$@HxHgt Ht$ 2H$0HxHg9Ht$ *HHH$HxHgt Ht$ H$HxHgHt$ HHHH$`HxHgt H$H$PHxHgH$c~H}HH$HxHgZH$-HHH$HxHgH$|HH$HxHg4H$"HH$`HxHgtLH$PHxHgLHHH$HxHgt H$\H$HxHgcH$6QHHH$HxHgt H$H$HxHgH$HHH$ HxHgt H$H$HxHgH$HHH$@HxHgt H$]H$0HxHgdH$7RHHHH$HxHg)H$HH$HxHgt H$H$HxHgH$HHH$HxHgt H$}H$HxHgH$WrHHHD$`HxHgTH$'BHH$HxHg&H$HH$HxHgt H$H$HxHgH$HHH$ HxHgH$vHH$`HxHguH$HcHH$HxHgt H$H$pHxHg%H$HHH$HxHgt H$HD$pHxHgH$HHH$HxHgt H$wH$HxHg~H$QlHHH$@HxHgt H$"H$0HxHg)H$HHH$HxHgH$HH$HD$HH$HxHgt H$H$HxHgH$dHHH$ HxHgt H$5H$HxHgYH$H|$PH$HxHgH$HxHgHD$H$AA HHPgH$H$A HXH$H|$PH$L$HxHgH$HxHgH$AA LHHDŽ$!gH$H$A HXH$H|$PH$HxHgjH$HxHgDH$H$ HHD$H$H|$PH$HxHgHT$H$QH$H$A HUH$H|$PH$HxHgsH$HxHgJL=DH|$`1Ҿ藼HH|$`;yHL$H$LH$H|$PpH$HxHgCH$ L 蝽H$ H|$P+H$ HxHgIU(H$0AA HdH$0H$@A HUH$@H|$PH$@HxHgH$0HxHgIU0H$PAA HadH$PH$`A HNUH$`H|$P,H$`HxHgSH$PHxHgOIU8H$pAA HcH$pH$A HTH$H|$PH$HxHgH$pHxHgIU@H$AA HIcH$H$A H6TH$H|$PH$HxHgH$HxHgH$L (H$H|$PH$HxHg H$L⾁H$H$A H5RH$H|$PSH$HxHgH$HxHgL$LkH|$`1ҾǸHH|$`;詸HL$H$LH$H|$P蠿H$HxHgHD$ H$AAHHP]aH$H$A HJRH$H|$P(H$HxHgH$HxHgHD$ H$AAHHP`H$H$ A HQH$ H|$P藾H$ HxHg H$HxHgHD$ H$0Hp/H$0H$@A H HD$(H$AAHHP\H$H$A HLH$H|$PӹH$HxHg H$HxHg/ HD$(H$HpkH$H$A HxLH$H|$PVH$HxHg H$HxHg HD$(H$Hp H$H$ A HKH$ H|$PٸH$ HxHg H$HxHg H$0L H$0H|$P{H$0HxHg H$@L⾒MH$@H$PA HIH$PH|$PH$PHxHgN H$@HxHgFH|$`1Ҿ蟰HUH|$`;聰H7L$H$`L芿H$`H|$PxH$`HxHg HD$8H$pAAHHx2YH$pH$A HJH$H|$PH$HxHg, H$pHxHg HD$8H$AAHHXH$H$A HIH$H|$PiH$HxHgn H$HxHg@ HD$8H$HH$H$A H IH$H|$PH$HxHgH$HxHgHD$8H$H~H$H$A HHH$H|$PiH$HxHgH$HxHgH$L }H$H|$P H$HxHgH$L⾒ݼH$H$A HFH$H|$P訴H$HxHgH$HxHgQH|$`;,HHD$ H$ Hp(H$ H$0A H)GH$0H|$PH$0HxHgH$ HxHgHD$ H$@Hp8蟣H$@H$PA HFH$PH|$P芳H$PHxHg^H$@HxHg3HD$ H$`Hp0SH$`H$pA H/FH$pH|$P H$pHxHgH$`HxHgHD$ H$Hp4%SH$H$A HEH$H|$P萲H$HxHgH$HxHgH$L$ $LHIHD$葬H|$PL$H$HxHgH$LL$A LHLCH|$PLȱH$HxHg!H$HxHgLL{LnLaLTLGL$L2CL$LL$LL$LZL$LL$LwH|$`;耩HHt$`H|$AL$LL$Lm.L$LXL$LCL$L..L$L2L$LL$LL$Lڿ6L$Lſ:L$L谿L$L蛿H$艿H$wL$LbL$LML@BL3NL&LL LQL$LL$LվL$L4L$L衾L$L茾L$LwL$LbL$LM L$L8L$L#^L$LJL$LL$LL$LϽL$L躽&@HHD$`HxHgt Ht$O葽HD$PHxHgt Ht$`uH|$HL$LPYL$L;L$L&L$LUL$L'L$LL$LҼ}L$L轼L$L証L$L蓼/Ht$脼H$rbH$`H$NH$<\H$*1H$H$H$H$HH$@HxHgH$贻HH$0HxHgt H$芻H$ HxHgH$dHH$`HxHgH$6HH$PHxHg;H$)HH$HxHg:H$ں(HH$pHxHg]H$謺KHH$HxHgH$~HH$HxHg]H$PKHH$HxHgt H$&H$HxHg`H$NHHH$HxHgt H$ѹH$HxHg H$諹HHH$HxHgt Ht$H$HxHgHt$\HHH$HxHgt H$-H$HxHggH$UHHH$HxHg4H$Ը"HH$`HxHgH$覸HH$HxHgt H$|H$pHxHgH$VHHH$HxHgt H$'H$HxHgaH$OHHH$HxHg.H$ηHH$HxHgt H$褷H$HxHgH$~HHH$HxHgH$KHHD$pHxHgH$ nHH$HxHgt H$H$HxHg0H$жH9HH$`HxHgtL裶H$PHxHgL肶HHH$HD$.HH$HxHgt H$9H$HxHgsH$aHHH$HxHg@H$.HH$HxHgH$貵HH$HxHgt H$舵H$HxHgH$bHHH$HxHgt H$3H$pHxHgmH$ [HHH$`HxHgt H$޴H$PHxHgH$踴HHH$HxHgH$腴HH$HxHgH$WHH$HxHgtH$-HH$HxHgtL H$HxHgEL8HH$ HxHgLH$輳:HHH$HxHgt H$芳H$HxHgH$dHHH$ HxHgH$1HH$HxHgcH$QHH$@HxHgt H$ٲH$0HxHgH$賲HHH$HxHgL腲HH$HxHgH$WHH$HxHgH$)wHH$HxHgtH$HH$HxHg4H$Ա"HH$HxHgtH$誱HH$HxHgH$HH$HxHgtH$UHH$HxHgH$*xHH$ HxHgtH$HH$@HxHgt H$ٰH$0HxHgH$賰HHHH$pHxHgL}HH$@HxHgH$OHH$PHxHgtH$%HH$0HxHgZH$HHH$HxHgtLկH$HxHgL贯HH$HxHgtL華H$HxHgLnHHH$`HxHgH$;HH$PHxHgmH$ [HH$HxHg?H$߮-HH$pHxHg]H$豮KHH$HxHgH$胮HH$HxHg]H$UKHsHH$HxHgtH$#uHH$@HxHgUH$CHH$0HxHgt H$˭H$ HxHgH$襭HHH$HxHgH$rHH$HxHgH$Dfffff.AWAVLvAUATIUSHI11HhLdH%(H$X1HDŽ$@HDŽ$HHDŽ$PHD$ gH$@L$HI9HuD@HI9t7H HyHgtH$0HHD$yI9HD$uH$HH$@HD$0gE1HD$HEH@D ]HH}{8SCHt$0HaEXHD$ H|$ 11HPA uH|$0;蓜HH|$Ht$0躷Iw(H$iH$H$A Lv.H$H|$ TH$HxHgXH$HxHg-Iw8H$H$H$A L-H$H|$ ܚH$HxHg(H$HxHgIw0H$:H$H$A L-H$H|$ dH$HxHgH$HxHgaIw4H$:H$H$A L-H$H|$ H$HxHgH$HxHgH$ H$ $HH$H|$ 膙H$HxHg>H$HXH$0A HL +H$0H|$ (H$0HxHgH$ HxHgH|$Ht$ HEH@D @LeLԇHM 0HL脜11LȕH$@H$HE11H)H~DJ4*LHV谜HHH$@H$HIH)H9L;HVLH1L胙HD$0HxHg<HD$ HxHgH|$H$XdH3%(Hh[]A\A]A^A_@H$HH;$PHtHt$0苃H$HHH$H"fHxH H@0H=P2 H fDH|$0;HH|$Ht$0Iw(H|$@ȆHT$@H|$PA L)Ht$PH|$ 輖HD$PHxHgAHD$@HxHgH$ H|$` 6HѐHt$`H|$ bHD$`HxHgH|$pHھ:HT$pH$A L'H$H|$ H$HxHgHD$pHxHgH|$Ht$ A fDH|$Ht$0蹯A^fDH|$0;THHt$0H|$tG菱DH|$0;$HHt$0H|$t!_A A\H>OH$0 .H$0H$0H$0֤H$0ĤH$0貤bH$0蠤H$0莤H$0|+H$0jH$0XH$0FKH$4 H$0"H$0QH$0&H$0HEHHxw HEHHxw ƚH$0褣*HHD$0HxHgt Ht${HD$ HxHgt Ht$0_H|$腬HݎHH$HxHgtH$0(HH$HxHgt H$0H$HxHgQHHH$HxHgt H$0輢HD$pHxHglHHHD$PHxHgt H$0zHD$@HxHg*HH$HxHgt H$0:H$HxHgHHH$@HD$HH$HxHgH$0ԡHMHH$HxHgt H$0袡H$HxHgOHHHD$`HxHg,HH$HxHg HH$0HxHgt H$H$ HxHgkH$YHАf.AWAVAUATUSHHLbdH%(H$1HBHt$HD$0gI9HD$;DID$(AD$xHHHD$H|$@H臍Ht$@H|$PnHt$@H|$`UHt$@H|$p ,H$L 览H$H7H$HxHg+IT$@H$AAH/H$HH$HxHg+H$L H$H襍H$HxHg*+IT$HH$AAHf/H$HVH$HxHgC( 0HH襞Ht$0LHVdHHD$011HHP xIT$PH$AAH.H$H詌H$HxHg'H$L ֆH$HfH$HxHg'IT$XH$AAH'.H$HH$HxHg.'H$ L DH$ HԋH$ HxHg&IT$`H$0AAH-H$0H腋H$0HxHg(H$@L 貅H$@HBH$@HxHg(IT$hH$PAAH-H$PHH$PHxHg' -HHBHt$0LHVH虏HD$011HHP贃 =%|IT$pH$AAHV,H$HFH$HxHg(H$L sH$HH$HxHgd(I$H$AAH+H$H豉H$HxHg'H$L ރH$HnH$HxHg'I$H$AAH,+H$HH$HxHg>'H$L IH$HوH$HxHg&I$H$AAH*H$H臈H$HxHg% 1HH֙Ht$0LHV蕌H-HD$011HHPH 9!I$H$0AAH)H$0HׇH$0HxHg5$H$@L H$@H蔇H$@HxHg#I$H$PAAHR)H$PHBH$PHxHgv#H$`L oH$`HH$`HxHg#I$H$pAAH(H$pH譆H$pHxHg"H$L ڀH$HjH$HxHg!I$H$AAH((H$HH$HxHg! HHgHt$0LHV&H辊HD$011HHP~ QI$H$AAHx'H$HhH$HxHg!H$L H$H%H$L$HxHg!fH$AALHA*$$&H$H蹄H$HxHg!H$L ~H$HvH$HxHg!A$fH$H$AAH*$&H$HH$HxHg-!H$ L 3~H$ HÃH$ HxHg fH$0AALHA*$$o%H$0H_H$0HxHg HH讔Ht$0LHVmHHD$011HHP | fH$pAALHA*$$$H$pH蝂H$pHxHgH$L |H$HZH$HxHgZfH$AALHA*$$$H$HH$HxHgH$L #|H$H賁H$HxHgI$H$AAHq#H$HaH$HxHg:H$L {H$HH$HxHgI$H$AAH"H$H̀H$HxHg fHHHt$0LHVڄHrHD$011HHPy  IT$0H$AAH/"H$HH$HxHgH$ L LzH$ HH$ HxHgI$x :AT$(HHD$I$$HuHH@Ht;P ~H@HuH;|$;W H(+|A$f.#v #f.v=:#$f.# #f.#$f.#v #f.v5#$f.#v #f.v7$f.~# ~#@f.6%#$f.zu5U#$I$AT$(HnH|$HH@Ht;P ~H@HuH;|$;;W 2H(/A$f.#v #f.v%#$f.i# c#f.q-#$f.H#z B#f.h=#$H$0AALH#H$0H}H$0HxHgL$H$@ L8wH$@H|H$@HxHg]H$PL vH$PH|H$PHxHgH$`L vH$`HB|H$`HxHg:H$pL ovH$pH{H$pHxHg 9HHNHt$0LHV H襀HD$011HHPtH$HxHgH$HxHgzHD$pHxHgWHD$`HxHg4HD$PHxHg0HD$@HxHg L~}H;D$IpH|$0HHgZH$dH3%(0H[]A\A]A^A_ÐVufDFufDL$hރLkLHHsLt~df.(#jS_f. #f.#{f.#fDf.# #f.xI$pHt$(HHD$AD$(D$(%% HAD$(H|$Ht$,D$,$&HAD$(H|$L$$*HmTL$H$@zLHP H$@H\$0HHxH$@HxHgA|$( w>H$PL꾧蹀H$PHxH$PHxHggHt$H$`H$`HnxH$`L$HxHgHt$@1LY~L$H$p LwrH$pHxH$pHxHgULHwH$L )rH$HwH$HxHgHt$PHwH$L qH$HiwH$HxHgHt$`HCwH$L qH$HwH$HxHg@Ht$pHvH$L 9qH$HvH$HxHgH$HvH$L pH$HvvH$HxHgH$HMvH$L pH$H#vH$HxHg#I$H$AAHH$HuH$HxHg`H$L oH$HuH$HxHgI$H$AAHLH$HL$L )H$L FnH$HsH$HxHgL$L譃xH$p LmLH{sH$HxHgLZ|DH$L mH$H&sH$HxHgLH$L FmH$HrH$HxHgAL$L譂,H$`L lH$`HvrH$`HxHgL$LM{H$L lH$HrH$HxHgWLJH$`L 6lH$`HqH$`HxHgL襁H$@L kH$@HvqH$@HxHg$LUH$L kH$H&qH$HxHglL$LWH$L 6kH$HpH$HxHgL$L蝀H$ L jH$ HfpH$ HxHg=L$L=(H$L vjH$HpH$HxHgL$LwH$H$@ jH$@HoH$@HxHgL$LxH$L iH$HFoH$HxHg :fHt$H$H$H$A HH\$0H$HnH$HxHgH$HxHgDL$H$ LhH$HrnH$HxHgL$Ht$@LZtLH/nH$L uhH$HnH$HxHgH|$P  H$L hH$HmH$HxHgHt$PH$sH$HjmH$HxHgH$L gH$H'mH$HxHgH|$`  H$L AgH$HlH$HxHgHt$`H$ rH$ HlH$ HxHgH$0L fH$0HIlH$0HxHg H|$p&  H$@L cfH$@HkH$@HxHg Ht$pH$PqH$PHkH$PHxHg H$`L eH$`HkkH$`HxHg H$E  H$pL eH$pHkH$pHxHg H$H$pH$HjH$HxHg H$L dH$HjH$HxHg H$a H$L dH$H.jH$HxHg H$H$pH$HiH$HxHgx H$L.dH$HiH$L$HxHga LLrqHD$@Hxv0Ht$@LooH$HxHg LH+iL$H$ LicH$HhH$HxHg< I$H$AAH H$HhH$HxHgH$L bH$HdhH$HxHgI$H$AAH" H$HhH$HxHg.H$L ?bH$HgH$HxHgI$ H$ AAH H$ H}gH$ HxHgH$0L aH$0H:gH$0HxHg/H$HxHg H$HxHg @H$L &aH$HfH$HxHg yfH$L `H$HffH$HxHg fH$L `H$HfH$HxHg5 fH$PL 6`H$PHeH$PHxHg+ fH$H$0 _H$0HqeH$0HxHg" DH$pL _H$pHeH$pHxHg uL$LtL$LtL$LtL$LtYL$LtL$Lt+L$LltL$LWtSLJtL=t>L0thL#tL$LtYLtLsLsLsiLsL$LsL$LsuL$LsL$LysLlscL$LWsL$LBsL$L-sNL shLs LsLrZLr LrLrILrLrLrILrL$Lr[L$LtrLgrL$LRrL$L=riL$L(rL$LrLrLqLqyLqSL$LqL$LqL$LqFL$LqL$LvqL$Laq/H$HLazH$H7aHt$pH%aHt$`HaHt$PHaL$LpLpLppLpLpLpVLpLpLp2LwpLjpBL]pLPpL$L;p`L.pL$LpL$LpBLoLoLotLoLoLofLoLoL$LoULzoL$LeoL$LPoL$L;oL$L&oLoL$LobL$LnL$LnLnLnL$Ln8L$Ln?L$LnLL$LlnYH$ZnL$LEnsL$L0nL$LneL$LnL$LmWL$LmL$LmOL$LmL$LmGL$LmHH$HxHgt Ht$'^mH$HxHgt Ht$'?mHD$pHxHgt Ht$'#mHD$`HxHgt Ht$'mHD$PHxHgt Ht$'lHD$@HxHgt Ht$'lHD$0HxHgt H$lH8XHH$lHH$HxHgu>H$HxHgLElHH$HxHgtL lHH$HxHgtHH$HxHgtHH$HxHghHH$HxHgJHH$HxHg,eHH$HxHg DHH$HxHg#HH$ HxHgHH$HxHgH$kHH$HxHgcH$jQHH$HxHg5Lj(HH$HxHg LjHH$HxHgH$SjHH$`HxHgH$%jHH$HxHgLizHH$`HxHg^LiQHH$@HxHg5Li(HH$HxHg H$|iHH$HxHgH$NiHH$ HxHgH$ iHH$HxHgH$hpHH$@HxHgTH$hBHH$HxHg&H$hHH$HxHgH$hhHH$HxHgtH$>hHH$HxHgH$hHH$HxHguH$gcHH$HxHgtH$gHH$HxHgtHH$HxHgu>H$HxHgcLfgVHH$HxHgtLAgHH$HxHgtHH$ HxHgtHH$HxHghHH$HxHgJH@LHZ:HHHHtHH$HxHgpHH$HxHgOHH$HxHg.lHH$HxHg KHH$0HxHgpHH$HxHgYH$eGHH$HxHg+H$eHH$HxHgLreHH$PHxHgLIeHH$0HxHgH$eHH$pHxHg}H$dkgHH$pHxHgHH$HxHgHH$HxHguHH$ HxHgTHH$0HxHg3qHH$@HxHgPHH$PHxHg/HH$`HxHgHH$PHxHg=H$c+HH$`HxHgH$cHH$pHxHgH$QcHH$HxHgH$#cHH$HxHgH$bsHH$HxHgWH$bEHH$HxHg)H$bHH$HxHgH$kbHH$HxHgH$=bHH$HxHgH$bHH$ HxHgqH$a_HH$0HxHgCH$a1HH$@HxHgH$aHH$PHxHgH$WaHH$HxHgH$)aHH$HxHgH$`yHH$HxHg]H$`KHH$HxHg/H$`HH$HxHgH$q`HH$HxHgH$C`HH$HxHgH$`HH$0HxHgwH$_eHH$@HxHgIH$_7HH$PHxHgH$_ HH$`HxHgH$]_HH$pHxHgH$/_HH$HxHgH$_HH$HxHgcH$^QHH$HxHg5H$^#HH$HxHgH$w^HH$HxHgLN^HH$HxHgL%^HH$HxHgL]zHH$ HxHg^L]QHH$0HxHg5L](HH$pHxHg L]HH$HxHgLX]HH$HxHgL/]HH$HxHgL]HH$HxHghL\[HH$HxHg?L\2HH$HxHgL\ HH$HxHgLb\HH$ HxHgL9\HH$0HxHgL \HH$@HxHgmL[`HH$PHxHgDL[7 HH$@HxHg H$|[HH$PHxHgH$N[HH$`HxHgH$ [HHH$pHxHgMHHHzHH$`HxHg?LZ2HH$pHxHgLZ HH$HxHg_HH$HxHg>|HH$HxHg;fffff.AWAV1AUATUSHHHH0QH|$0Ht$1dH%(H$1HD$0gBLcHCHD$I9DIt$(A$H{H|$@HFHt$@H|$POHt$@H|$`rOHt$@H|$p YOHt$@H$ =OHt$@H$ !OH$H$ }PHP H$H|$0HHH$HxHg2%A$` wEH$H$PH$H|$0vHH$HxHg$I$`H$XH$H|$06HH$HxHg$Ht$@H$1$NH$H$ EBH$H|$0GH$HxHg$H$H|$0GH$H$ AH$H|$0wGH$HxHg#Ht$PH|$0OGH$H$ AH$H|$0GH$HxHg6#Ht$`H|$0FH$H$ 7AH$H|$0FH$HxHg"Ht$pH|$0FH$H$  @H$ H|$0lFH$ HxHgZ"H$H|$0AFH$H$0 @H$0H|$0FH$0HxHg!H$H|$0EH$H$@ &@H$@H|$0EH$@HxHgx!I$H$PAAHrH$PH|$0`EH$PHxHg!H$H$` ?H$`H|$0EH$`HxHg I$H$pAAHH$pH|$0DH$pHxHgG H$H$ >H$H|$0xDH$HxHgI$H$AAH6H$H|$0$DH$HxHgHt$0H~UHt$0HD$HVHHH$0HHHHD$0H|$011HPH$H|$0CH$L$HxHgfH$AALHA*D$,$7H$H|$0%CH$HxHgaH$H$ M=H$H|$0BH$HxHg I$H$AAHH$H|$0BH$HxHgH$H$ H$HxHgIT$PH$AAHH$H|$0>H$HxHg'Ht$0HOHt$0H<$HVBHQCHD$0H|$011HPj7H$H$ 8H$H|$0>H$HxHgI$H$AAHH$H|$0=H$HxHgH$H$ 7H$H|$0{=H$HxHg0I$H$AAH9H$H|$0'=H$HxHgH$H$ O7H$H|$0H2,H$7H$@Y9uCH$hރ#$H$7\H+H$6H$@pZ!I$H$`HR"H$`ހ8u4hރL#Lm7H`+L86H$` H$H!I$H$!H$PH$1HJ.HH$p^H$pHg}+HH$ހH$HgT+HH$`H$H$Hg]1HH$@H$H$Hg61HH$HgH$H$HJHHpH;rWH;pMH$1-HH$pHgH$HxHg H$HxHg H$HxHg H$HxHg H$pHxHg H$HxHg H$HxHg H$prH$pH$H$1E1AGxH$4%H$D)H0A H uHHg; fH$AALHA*$jH$H|$0X/H$HxHgH$H$ )H$H|$0/H$HxHgqI$ H$AAHH$H|$0.H$HxHgH$H$ (H$H|$0p.H$HxHgI$(H$AAH.H$H|$0.H$HxHgHt$0Hv?Ht$0H<$HV42H2HD$0H|$011HP&H$H$ (H$H|$0-H$HxHgI$H$AAHRH$H|$0@-H$HxHgH$H$  h'H$ H|$0,H$ HxHgHH$H$0AAHH$0H|$0,H$0HxHgH$H$@ &H$@H|$0X,H$@HxHgH$H$P &H$PH|$0,H$PHxHg9H$H$` 6&H$`H|$0+H$`HxHgH$H$p %H$pH|$0z+H$pHxHgHt$0HL5L5L5L5hL5L5L5cL5 L5L5TLs5Lf5^LY5LL5nL?5L25L%5_L5L 5L4IL4L4VL4L4L4JL4H$4L4L$L|4lL$Lg4L$LR4L$L=4;L$L(4L$L4sL$L3L$L3L$L3#L$L3L$L3GL$L3L$L3^L$Lk3L$LV3H$D3h HHD$0HxHgt H$3HHHD$@HxHgtHt$/2HHD$PHxHgtHt$/2HHD$`HxHgtHt$/2HHD$pHxHgtHt$/2HH$HxHgtHt$/j2HH$HxHgtHt$/F2HH$HxHgtH$2HH$HxHgtHH$HxHgtHH$HxHghH$1VHH$HxHgtH$1HH$HxHgtHH$HxHgxHH$HxHgZHH$ HxHg A ))Ѻ$I)))1ffD$0&H|$@$H$HDŽ$$ܼH$PH),IHHHH?HHHH)HT$$H)צC9c*HH 2HH)HIHH?L$ H4ׂCII)LN$HI)HHDd$D$HHH)H$HIHH?H 2HH)HHHH)Љ$[mH$$|$ H$t$HxH$I ^H$t$HxyA iH$`HDŽ$HDŽ$h薲HDŽ$HDŽ$PeHxHg H$PHDŽ$q>L5$QL-$QH$hL=$QH $QL%$QIFLIEL$HID$H $QL$HHDŽ$ht H$HDŽ$HDŽ$薲HDŽ$HDŽ$PeHxHg H$HDŽ$qdIFH !$QH$LIEL$HID$H #QL$HHDŽ$t H$ H$H$HxHg HH$dH3%( H[]A\A]A^A_fH$ WH$pI@H$HxH$Hx1H$0H$HH$0HHHLH$PH$4H$H$HDŽ$ #H$p3@H$GH$PHWH$PHHH$@HL$Hf+ $*)L$RADf,)ѺgfffiimЉffDi{i> )ӂUHHfD$pHH H$`fL$rfT$tHt$pf$f$f$H$`H H$`HxHgL$H$p LH$pHk H$pHxHgpH$H$Hp H$H) H$HxHg!H$H$HpH$HH$HxHgH$p D$A H$pDHxH$pH$HpMH$HmH$HxHg1H$L H$H*H$HxHgH$LH$HH$HxHgH$L H$HH$HxHgH$psnfDH$p^1#ILMH$pHxHgtH1LH$ H$H$HxHgt H$H;HHgt Ht$,H`H$pHx DD$H$H$$H$H$A L}H$H]H$HxHgH$HxHgL$H$MMyLH$HH$HxHgHELHDŽ$XHDŽ$`HDŽ$xH$hH$pDŽ$(H[LHDŽ$H8LHDŽ$HLHDŽ$HLHDŽ$HLHDŽ$yHLHDŽ$VHLHDŽ$3HfLHDŽ$HCLHDŽ$ H LHDŽ$ HLHDŽ$ HH$`HHMT$HH@Ht ;P ~H@HEHL$H9t D$;A }W0HD$Ht$HQ HA(gHHL$A G_HHD$HL$KHt$HHD$Ht$HH(QH$H$MMyHHD$/ H$HH$HxHg$H$Ld$EH$HH$HxHgBHL$H$ H$HH$HxHgH$H$ Hp.H$ HNH$ HxHgHT$H$0ۅ H$0HH$0HxHgTH$H$@HpH$@HH$@HxHgHL$H$P H$PHH$PHxHgH$`HeA 9fHHH8lH(6HH6HH!HHH+H+L@LLLRLHt$pLcXHVlHIH<HEHD$pHA(HxHgiH|x011$KHDZ;HT$-H$߃H$H$HIHD$LH|$HH$HxHgaH$PhOxtH1ҿxhH4$fJHT$.H$@߃H$H$JH$H$H H$HxHgt H$H$.11+:LHL$HL$_H|$0/HLI$HH$pRH$EH$8IH$HxHgu"LHIH$HxHgtHHH$HxHgH$P HHHEHPHHIHL H$HxHgo HH$IH$HxHgt Ht$E H$`HeaLIH$HxHguMIH$ HxHgtL IH$HxHgtIH$@HxHgtIH$0HxHgtIH$PHxHgoHHIH$HxHg+HIH$HxHg 'IH$HxHgH IIH$HxHgtH H$HxHgIIH$pHxHgnIH$`HxHgPlHIH$HxHg'CIH$HxHg"HH$HxHg(2Hqfff.AWL AVAUATIUSHHLHIMdH%(H$1HD$gH$H|$ ǃ  Ht$ H|$HD$ HxHg-H|$LXH$H|$0 Ht$0H|$-HD$0HxHgH$H|$@Ht$@H|$HD$@HxHgH$H|$P Ht$PH|$HD$PHxHgH$H|$`Ht$`H|$tHD$`HxHgH$H|$p Ht$pH|$3HD$pHxHg]H$H$ H$H|$H$HxHg0Ht$HK Ht$HHHVHHD$H|$11HPH$HGH$H|$uH$HxHgH$H$!BH$H|$0H$HxHgH$H$ XH$H|$H$HxHgmHt$H@ Ht$HHVHHD$H|$11HPH$H$@vH$H$A <H#H$H|$AH$HxHgH$HxHgH$H$5H$H$A H袈H$H|$H$HxHgH$HxHgHt$HHt$HHVHXHD$H|$11HPqH$H$CMy7H|$=H$ +HyH|$HH$H$5H$H$ A H菇H$ H|$H$ HxHgH$HxHgHt$HHt$HHVHEHD$H|$11HP^H$H$0O$H$0H$@A <HцH$@H|$H$@HxHgH$0HxHgH$H$P5H$PH$`A HPH$`H|$nH$`HxHgH$PHxHgHt$HHt$HHVnHHD$H|$11HPH$H$pH$pH|$H$pHxHgbH$H$ H$H|$H$HxHg0H$AA LHLH$H$A H9H$H|$H$HxHgH$HxHgIVH$AA HH$H$A H譅H$H|$H$HxHgzH$HxHgyIVH$AA H4H$H$A H!H$H|$H$HxHgH$HxHgH$H$AA HHDŽ$蘓H$H$A H腄H$H|$cH$HxHgH$HxHgH$H$ rH$H|$H$HxHgH$H$ H$ H$0A HzH$0H|$H$0HxHg/H$ HxHg.Ht$HHt$HHVH0HD$H|$11HPIH$H$@H$@H|$H$@HxHg H$PAALHH$PH$`A H譂H$`H|$H$`HxHgj H$PHxHgi IT$H$pAAH3H$pH$A H H$H|$H$HxHg H$pHxHg It$H$H$H$A H见H$H|$H$HxHg H$HxHg It$ H$!H$H$A H.H$H|$ H$HxHg{ H$HxHgz H$H$ H$H|$H$HxHgH H$H$vH$H$A H#H$H|$AH$HxHg H$HxHg Ht$HHt$HHVAHHD$H|$11HPH$H$H$H|$H$HxHg IxH$AAHeH$H$ A HRH$ H|$0H$ HxHg/ H$HxHg. IH$0AAH֍H$0H$@A H~H$@H|$H$@HxHg H$0HxHg IH$P;H$PH$`A HH~H$`H|$&H$`HxHg H$PHxHg IH$pH$pH$A H}H$H|$H$HxHg: H$pHxHg9 H$H$ H$H|$HH$HxHg H$H$H$H$A H{H$H|$H$HxHg H$HxHg Ht$H!Ht$HHVHxHD$H|$11HPIt$H$?H$H$A HL|H$H|$*H$HxHg1 H$HxHg0 It$8H$H$H$A H{H$H|$H$HxHgH$HxHgIt$(H$MH$H$A HZ{H$H|$8H$HxHgH$HxHgIt$0H$ H$ H$0A HzH$0H|$H$0HxHgVH$ HxHgUH$H$@ $H$@H|$\H$@HxHg#H$H$P)H$PH$`A HxH$`H|$H$`HxHgH$PHxHgHt$H5Ht$HHVHHD$H|$11HPH$H$p <H$pH|$TH$pHxHgcH$`H$!H$H$A HwH$H|$H$HxHgH$HxHgHt$H-Ht$HHVHH$HxHgHD$HxHgH$dH3%(Hĸ[]A\A]A^A_@H$+fDH$fDH$fDH$DfDH$hfDH$fDH$fDH$"fDH$kOfDH$SfDH$;fDH$#fDH$ _fDH$`fDH$BfDH$CfDH$fDH$fDH${!fDH$c"fDH$KfDH$3fDH$fDH$fDH$tfDH$ufDH$fDH$fDH$H$pHxHg=IUH$AA HhaH$H$A HURH$H|$3H$HxHgH$HxHgIUH$AA H`H$H$A HQH$H|$觾H$HxHgH$HxHgIU H$AA HP`H$H$A H=QH$H|$H$HxHgBH$HxHgAH$H$ *H$H|$踽H$HxHgH$H$H$H$A H2OH$H|$PH$HxHgH$HxHgH$@H$H$ IH$H|$׼H$HxHgIUH$AA H^H$H$A HOH$H|$dH$HxHgH$HxHgIUH$AA H ^H$H$A HNH$H|$ػH$HxHgH$HxHgIUH$AA H]H$H$A HnNH$H|$LH$HxHgH$HxHgRIU H$AA H\H$H$A HMH$H|$H$HxHgH$HxHgH$H$  ϴH$ H|$]H$ HxHg4H$H$0*H$0H$@A HKH$@H|$H$@HxHgH$0HxHg H$H$  H$ H|$H$ HxHgIU(H$0AA HA[H$0H$@A H.LH$@H|$ H$@HxHgH$0HxHgIU0H$PAA HZH$PH$`A HKH$`H|$耸H$`HxHgH$PHxHgIU8H$pAA H)ZH$pH$A HKH$H|$H$HxHgKH$pHxHgIU@H$AA HYH$H$A HJH$H|$hH$HxHgH$HxHg^H$H$ wH$H|$H$HxHg H$H$ҾH$H$A HHH$H|$蝶H$HxHg| H$HxHgK H$H$ 衰H$H|$/H$HxHg IT$H$AAHWH$H$A HHH$H|$軵H$HxHgR H$HxHg! IT$H$AAHcWH$H$A HPHH$H|$.H$HxHg H$HxHgd It$H$ʤH$H$A HGH$H|$赴H$HxHg H$HxHg AD$ H$H$ $TH$ H$0A HJGH$0H|$(H$0HxHg H$ HxHgH$H$@ 7H$@H|$ųH$@HxHg|H$H$P蒻H$PH$`A H?EH$`H|$]H$`HxHgH$PHxHg H$H|$@g Ht$@H|$HD$@HxHglH$H|$P (Ht$PH|$蹲HD$PHxHg OH$H$P 6ѬH$PH|$_H$PHxHg H$+fDH$dfDH$3fDH$fDH$fDH$fDH$fDH$mfDH$kfDH$SfDH$;fDH$##fDH$ fDH$fDH$fDH$sfDH$tfDH$fDH${fDH$cfDH$KfDH$35fDH$6fDH$fDH$fDH$ӿfDH$軿fDH$裿pfDH$苿qfDH$sfDH$[fDH$CfDH$+OfDH$fDH$=fDH$fDH$˾fDH$賾fDH$蛾fDH$胾fDH$kfDH$SfDH$;fDH$#fDH$ 5fDH$6fDH$۽fDH$ýfDH$諽fDH$蓽fDH${fDH$cfDH$K8fDH$39fDH$fDH$fDH$fDH$ӼfDH$軼fDH$裼fDH$苼#fDH$sUfDH$[fDH$CfDH$+ fDH$ fDH$hfDH$ifDH$˻fDH$賻hfDH$蛻fDH$胻fDH$kfDH$S#fDH$;fDH$#rfDH$ fDH$fDH$ۺSfDH$ú"fDH$諺fDH$蓺fDH${DfDH$cfDH$KfDH$3kfDH$:fDH$fDH$XfDH$ӹ'fDH$軹fDH$裹kfDH$苹fDH$sYfDH$[fDH$CfDH$+fDH$fDH$rfDH$fDH$˸fDH$賸_fDH$蛸fDH$胸fDH$kfDH$SfDH$;\fDH$#+HH$PHxHgt H$H$@HxHgt H$ҷH$ HxHgt H$谷HD$HxHgt Ht$蔷HHH$HxHgt H$gH$HxHgtH$EnHHH$HxHgMH$;HH$HxHgH$ HH$HxHgt H$躶H$HxHgH$蔶HHH$HxHgt H$eH$pHxHgzH$?hHHH$HxHgt H$H$HxHg%H$HHH$HxHgt H$軵H$HxHgH$蕵HHH$HxHgt H$fH$HxHg{H$@iHHH$HxHgt H$H$HxHg&H$HHH$`HxHgt H$輴H$PHxHgH$薴HHH$pHxHgH$cHH$PHxHgpH$5^HH$HxHgt H$ H$HxHg H$HHH$HxHgH$貳HHD$PHxHgH$至HH$HxHgt H$]H$HxHgrH$7`HHH$@HxHgt H$H$0HxHgH$ HHH$@HxHgt H$賲H$0HxHgH$荲HHH$ HxHgH$ZHH$ HxHggH$,UHH$`HxHgt H$H$PHxHgH$ܱHHHD$@HxHg HH$@HxHgH$英HH$0HxHgt H$aH$ HxHgvH$;dHHH$HxHgt H$ H$HxHg!H$HHH$`HxHgt H$跰H$PHxHgH$葰HH$HxHgt H$gH$HxHgHHH$HxHgxHH$HxHgWnHH$HxHgt H$ݯH$HxHg+HHH$HxHgHH$HxHgHHD$ HxHgHHH$HxHgdH$)RHH$HxHg6H$$HH$@HxHgt H$ѮH$0HxHgH$諮HHD$0HxHgHHH$@HxHgt H$[H$0HxHgpH$5^HHQHH$HxHg5H$#HHH$HxHgtH$ȭHH$HxHg!H$蝭HH$PHxHgH$oHH$`HxHg|H$AjHH$HxHgpHH$HxHg-H$HH$pHxHgH$ĬHH$HxHgtH$蚬HH$HxHgH$oHH$HxHgtH$EHH$HxHgUH$CHH$HxHgtH$HH$HxHgH$ūHH$HxHgtH$蛫HH$HxHgH$pHH$HxHgtH$FHH$`HxHgVH$DHH$pHxHgtH$HH$ HxHgH$ƪHH$0HxHgtH$蜪HH$HxHgH$qHH$HxHgtH$GHH$HxHgWH$EHH$HxHgtH$HH$HxHgH$ǩHH$HxHgH$虩HH$HxHgH$kHH$HxHgtH$AHH$HxHgQH$?HH$HxHgtH$HHD$`HxHg!8HHD$pHxHgHH$pHxHgH$腨HH$HxHgH$WHH$HxHgdH$)RHH$ HxHgtH$HH$HxHgH$ԧHH$HxHgHH$HxHgH$腧HH$HxHgtH$[HH$HxHgH$0HH$HxHg=H$+HH$`HxHgH$ԦHH$pHxHgtH$誦HH$HxHgH$HH$HxHgtH$UHH$HxHgeH$*SHH$HxHgtH$HH$HxHgH$եHH$HxHgtH$諥HAWAVIAUATMUSH HIHXHHt$L$L$HD$ gdH%(H$H1H$0H|$0ǃ  |Ht$0H|$ =HD$0HxHgwH|$ HH$0H|$@ .Ht$@H|$ 返HD$@HxHgAH$0H|$P蒜Ht$PH|$ 胔HD$PHxHgH$0H|$` 豎Ht$`H|$ BHD$`HxHgH$0H|$p~Ht$pH|$ HD$pHxHgH$0H$ 1H$H|$ 迓H$HxHgH$0H$ 茛H$H|$ zH$HxHgqHt$ HԤHt$ Hl$HVHH芗H"HD$ H|$ 11HP;H$H|H$H|$ H$HxHgH$0H$!ƚH$H|$ 贒H$HxHgH$0H$ ܌H$H|$ jH$HxHgHt$ HģHt$ HHV胖HHD$ H|$ 11HP4H$0H$H$H$A <H#H$H|$ őH$HxHgH$HxHgH$0H$5yH$H$A H&#H$H|$ DH$HxHgH$HxHgHt$ H腢Ht$ HHVDHܕHD$ H|$ 11HPH$@H$CMy軘H|$ =wH$ +H$H|$ H耐H$0H$ 5fH$ H$0A H"H$0H|$ 1H$0HxHgH$ HxHgHt$ HrHt$ HHV1HɔHD$ H|$ 11HPH$0H$@O託H$@H$PA <HU!H$PH|$ sH$PHxHgZH$@HxHgYH$0H$`5'H$`H$pA H H$pH|$ H$pHxHg H$`HxHgHt$ H3Ht$ HHVH芓HD$ H|$ 11HP裇H$0H$iH$H|$ WH$HxHgH$0H$ H$H|$ H$HxHglH$H$AA H/H$H$A H H$H|$ 蚍H$HxHgH$HxHgH$H$AA HHP?/H$H$A H, H$H|$ H$HxHgH$HxHgH$H$AA HH.H$H$A HH$H|$ zH$HxHgQH$HxHgPH$@H$AA HHDŽ$@.H$H$A HH$H|$ ދH$HxHgH$HxHgH$ H$  H$ H|$ {H$ HxHgH$ H$0HH$0H$@A HH$@H|$ H$@HxHgbH$0HxHgaHt$ HTHt$ HHVH諏HD$ H|$ 11HPăH$ H$P芒H$PH|$ xH$PHxHgH$ H$` 蠄H$`H|$ .H$`HxHgIWH$pAA H+H$pH$A HH$H|$ 軉H$HxHgjH$pHxHgiIWH$AA Hd+H$H$A HQH$H|$ /H$HxHgH$HxHg IWH$AA H*H$H$A HH$H|$ 裈H$HxHgH$HxHgIW H$AA HL*H$H$A H9H$H|$ H$HxHgVH$HxHgUH$ H$ &H$H|$ 贇H$HxHg#H$ H$聏H$H$A H.H$H|$ LH$HxHgH$HxHgHt$ H荘Ht$ HHVLHHD$ H|$ 11HPH$ H$ ÎH$ H|$ 豆H$ HxHghH$0AALHt(H$0H$@A HaH$@H|$ ?H$@HxHgH$0HxHg IVH$PAAH'H$PH$`A HH$`H|$ 賅H$`HxHgH$PHxHgIvH$pPuH$pH$A H]H$H|$ ;H$HxHgjH$pHxHgiIv H$tH$H$A HH$H|$ ÄH$HxHg"H$HxHg!H$ H$ ~H$H|$ `H$HxHgH$ H$-H$H$A HH$H|$ H$HxHgH$HxHgHt$ H9Ht$ HHVH萈HD$ H|$ 11HP|H$ H$oH$H|$ ]H$HxHg4IxH$AAH%H$H$A H H$H|$ H$HxHgH$HxHgIH$AAH$H$H$ A HzH$ H|$ XH$ HxHgwH$HxHgvIH$0qH$0H$@A HH$@H|$ ݁H$@HxHg,H$0HxHg+IH$PwqH$PH$`A HH$`H|$ bH$`HxHgH$PHxHgH$ H$p q{H$pH|$ H$pHxHgH$ H$̈H$H$A HyH$H|$ 藀H$HxHg^H$HxHg]Ht$ HؑHt$ HHV藄H/HD$ H|$ 11HPHyH$ H$H$H|$ H$HxHg IT$H$AAH!H$H$A HH$H|$ H$HxHg H$HxHg IT$H$AAH0!H$H$A HH$H|$ ~H$HxHg: H$HxHg9 It$H$nH$H$A HH$H|$ ~H$HxHg H$HxHg AD$ H$0H$$0H$H$ A HH$ H|$ }H$ HxHg H$HxHg H$ H$0 xH$0H|$ }H$0HxHga H$ H$@_H$@H$PA H H$PH|$ *}H$PHxHg H$@HxHg Ht$ HkHt$ HHV*HHD$ H|$ 11HPuIt$(H$`lH$`H$pA HH$pH|$ t|H$pHxHg H$`HxHg It$8H$lH$H$A HH$H|$ {H$HxHgB H$HxHgA It$0H$H$H$A HH$H|$ {H$HxHg H$HxHg It$4H$H$H$A H+H$H|$ {H$HxHg H$HxHg H$ H$ $uH$H|$ zH$HxHg} H$ H$sH$H$A H H$H|$ >zH$HxHg- H$HxHg, Ht$ HHt$ HHV>~H~HD$ H|$ 11HPrH$ H$ <tH$H|$ yH$HxHg H$H$ kH$ H$0A H H$0H|$ 6yH$0HxHgm H$ HxHgl Ht$ HwHt$ HHV6}H}H$HxHgE HD$ HxHgG H$HdH3%(B HX[]A\A]A^A_fDH$@swfDH$@[fDH$@CfDH$@+fDH$@fDH$@PfDH$@}fDH$@ˇfDH$@資fDH$@蛇EfDH$@胇fDH$@kfDH$@S#fDH$@;$fDH$@#fDH$@ fDH$@fDH$@ۆfDH$@ÆfDH$@諆fDH$@蓆PfDH$@{fDH$@cfDH$@KfDH$@3=fDH$@>fDH$@fDH$@fDH$0Ӆ fDH$0軅 fDH$0装fDH$0?fDH$0qfDH$0fDH$0fDH$01fDH$fDH$0fDH$0sfDH$0[!aHH$HxHgH$HxHgt H$HD$ HxHgt Ht$~HjHH$ HxHgt H$0~H$HxHgtH$0~nHH$HxHgt H$@~~H$HxHg0H$@X~HH$ HxHgHH$HxHgH$0 ~HHD$@HxHgH$@}HH$0HxHgt H$}H$ HxHgiH$}WHHD$0HxHg`HVHH$HxHgt H$0D}H$HxHgqHHbHH$HxHgCHH$HxHg"HH$HxHgt H$0|H$HxHgdHH$HxHgCHH$HxHgbH$0J|PHH$HxHgoHH$pHxHgt H$0{H$`HxHg,H'HH$HxHg{H$0{iHH$HxHgt H$0{H$HxHg8HHH$HxHgt H$0>{H$HxHgkHHH$HxHgEHH$pHxHg$HH$HxHgHH$HxHgtH$0zvHH$@HxHg=HH$0HxHgHEHH$PHxHgtH$0zHH$HxHgt H$0yH$HxHg%HHH$ HxHgt H$ yH$HxHgbH$ yPHHH$HxHgt H$0[yH$HxHg HHH$HxHgt H$0yH$HxHg@HHH$HxHgt H$0xH$pHxHg}HHH$HxHgt H$0xH$HxHg5HHH$@HxHgt H$0;xH$0HxHghHHH$`HxHgt H$0wH$PHxHg HHH$HxHgHH$HxHg^HH$ HxHg=HH$HxHgtH$0HwvHH$HxHgmHH$HxHgLHH$HxHg+HH$HxHgtH$0vvHH$HxHgt H$0vH$pHxHgCHHH$HxHgt H$0IvH$HxHgvHHH$@HxHgt H$0vH$0HxHg.HHH$`HxHgt H$0uH$PHxHgkHHH$ HxHgEH8HH$HxHgt H$@HuH$HxHg`HD$`HxHg`(HD$PHxHgb(H$H|$pzgLP Ht$pLH|$ H_HD$pHxHg,(H$H$ ZH$H|$ _H$HxHgz)H$H$ `gH$H|$ N_H$HxHg='Ht$ HpHt$ HHHVccHcHD$ H|$ 11HPX ]&<H$H$5fH$H$A HoH$H|$ ^H$HxHg4,H$HxHg3,Ht$ HoHt$ HHVbH%cHD$ H|$ 11HP>WH$HGH$H|$ ]H$HxHg+H$H$!eH$H|$ ]H$HxHg+H$H$  WH$ H|$ m]H$ HxHgt+Ht$ HnHt$ HHVaHbHD$ H|$ 11HP7VH$H$0`dH$0H$@A <HH$@H|$ \H$@HxHg*H$0HxHg*H$H$P5|dH$PH$`A H)H$`H|$ G\H$`HxHg*H$PHxHg*Ht$ HmHt$ HHVG`H`HD$ H|$ 11HPTH$H$pCMycH|$ =zUH$p +HH|$ H[H$H$5icH$H$A HH$H|$ 4[H$HxHg)H$HxHg)Ht$ HulHt$ HHV4_H_HD$ H|$ 11HPSH$H$ObH$H$A <HXH$H|$ vZH$HxHg%)H$HxHg$)H$H$5*bH$H$A HH$H|$ YH$HxHg(H$HxHg(Ht$ H6kHt$ HHV]H^HD$ H|$ 11HPRH$H$laH$H$A <HH$H|$ 7YH$HxHgF(H$HxHgE(H$H$`H$H$A HH$H|$ XH$HxHg'H$HxHg'Ht$ HiHt$ HHV\HN]HD$ H|$ 11HPgQH$ HDŽ$gHDŽ$ HDŽ$ DŽ$ VN>H$ H$FH$ H?H|$ HWH$H$ _H$ H$0A (HUH$0H|$ sWH$0HxHg"H$ HxHg"H$H$@'_H$@H$PA HH$PH|$ VH$PHxHg!H$@HxHg!Ht$ H3hHt$ HHVZH[HD$ H|$ 11HPOH$H$`ݞyi^H$`H$pA HH$pH|$ 4VH$pHxHg;!H$`HxHg:!H$H$]H$H$A HH$H|$ UH$HxHg H$HxHg H$pHxvH$p IH$p HH|$ H4UH$H$]H$H$A HH$H|$ TH$HxHgL H$HxHgK Ht$ H&fHt$ HHVXH}YHD$ H|$ 11HPMH$H$\\H$H$A H H$H|$ 'TH$HxHgH$HxHgH$H$[H$H$A HH$H|$ SH$HxHgmH$HxHglH$H$ MH$H|$ CSH$HxHg:H$H$[H$H$ A HH$ H|$ RH$ HxHgH$HxHgHt$ HdHt$ HHVVHsWHD$ H|$ 11HPKfH$0&iH$0H$@A HCH$@H|$ !RH$@HxHg`H$0HxHg_fH$PhH$PH$`A HH$`H|$ QH$`HxHgH$PHxHgfH$p,hH$pH$A HIH$H|$ 'QH$HxHgH$pHxHgH$H$ 6KH$H|$ PH$HxHgH$H$XH$H$A H>H$H|$ \PH$HxHgCH$HxHgBHt$ HaHt$ HHV\THTHD$ H|$ 11HP IfH$fH$H$A HH$H|$ OH$HxHgH$HxHgfH$*fH$H$A HGH$H|$ %OH$HxHgdH$HxHgcfH$eH$H$A HH$H|$ NH$HxHgH$HxHgH$H$  HH$ H|$ ENH$ HxHgH$H$0&VH$0H$@A HH$@H|$ MH$@HxHgH$0HxHgHt$ H_Ht$ HHVQHuR nHD$ H|$ 11HPvFD$LHH$HUJH$H$ 19SH$H$0SH$H$@RH$H$P RH$H$` R E!D$MH$  HD$H|$ H]LH$0 HH|$ H6LH$@ H\H|$ HLH$P H5H|$ HKH$` HH|$ HKD$H$pybH$pH$A HH$H|$ tKH$HxHgH$pHxHgH$H$z(SH$H$A HH$H|$ JH$HxHgjH$HxHgiH$H$ EH$H|$ JH$HxHgH$H$]RH$H$A H H$H|$ (JH$HxHg'H$HxHg&Ht$ Hi[Ht$ HHV(NHNHD$ H|$ 11HPBH$H$ <CH$H|$ IH$HxHgH$H$UQH$H$A HH$H|$ IH$HxHggH$HxHgfHt$ HaZHt$ HHV MHMH$`HxHg?H$PHxHg>H$@HxHgH$0HxHgH$ HxHgH$HxHgH$HxHgH$pHxHgHD$ HxHgH$ dH3%(HĨ []A\A]A^A_ÐH$~6fH$H$(OH$H$A <H3H$H|$ QGH$HxHgH$HxHgCH$W1DHD$ H|$ 11HP@H$H$PހNH$PH$`A HH$`H|$ FH$`HxHgH$PHxHgH$H$pހVNH$pH$A HCH$H|$ !FH$HxHgHH$pHxHgH$H$ 00@H$H|$ EH$HxHgH$H$;MH$H$A H8H$H|$ VEH$HxHg5H$HxHgHt$ HVHt$ HHVVIHI ?yHD$ H|$ 11HP=L$LE I|$6It$H$hH$HxHgyH$H$ 8H$H|$ >H$HxHgL$LJ>I|$ǃ !0It$H$5H$H$A HH$H|$ =H$HxHgH$HxHg H$H$ 7H$H|$ '=H$HxHgn H$H$DL H$LzH|$ HGfDH$>fDH$>bfDH$>fDH$>}fDH$s>fDH$[>fDH$C> fDH$+>fDH$>fDH$=fDH$=9fDH$=fDH$=fDH$=&fDH$=fDH$k=_fDH$S=.fDH$;=hfDH$#=7fDH$ =fDH$ H$H$ H$H|$ -H$HxHg H$H$ H$H|$ H$HxHgHt$ HB)Ht$ HHHVHHD$ H|$ 11HPH$H$(tH$H$A <H!H$H|$ ?H$HxHgNH$HxHgMH$H$5H$H$A H蠨H$H|$ H$HxHgH$HxHgHt$ H'Ht$ HHVHVHD$ H|$ 11HPoH$HH$H|$ -H$HxHgH$H$!H$H|$ H$HxHgoH$H$ H$H|$ H$HxHg=Ht$ H&Ht$ HHVHOHD$ H|$ 11HPhH$H$.H$H$ A <HۦH$ H|$ H$ HxHgH$HxHgH$H$05H$0H$@A HZH$@H|$ xH$@HxHg_H$0HxHg^Ht$ H%Ht$ HHVxHHD$ H|$ 11HP) H$H$PCMyH|$ =H$P +H6H|$ HH$H$`5H$`H$pA HLH$pH|$ jH$pHxHgH$`HxHgHt$ H$Ht$ HHVjHHD$ H|$ 11HP H$H$OH$H$A <H莤H$H|$ H$HxHgH$HxHgH$H$5`H$H$A H H$H|$ +H$HxHgH$HxHgHt$ Hl#Ht$ HHV+HHD$ H|$ 11HP H$H$H$H$A <HOH$H|$ mH$HxHgH$HxHgH$H$!H$H$A H΢H$H|$ H$HxHgH$HxHgHt$ H-"Ht$ HHVHHD$ H|$ 11HP H$HDŽ$gHDŽ$HDŽ$DŽ$H$H$H$ HuH|$ HH$H$H$H$A (H苡H$H|$ H$HxHgH$HxHgH$H$ ]H$ H$0A H H$0H|$ (H$0HxHg_H$ HxHg^Ht$ Hi Ht$ HHV(HHD$ H|$ 11HPH$H$@ݞyH$@H$PA HLH$PH|$ jH$PHxHgH$@HxHgH$H$`H$`H$pA H˟H$pH|$ H$pHxHgH$`HxHgH$PHxvH$P H$P HH|$ Hj H$H$PH$H$A HH$H|$  H$HxHgH$HxHgHt$ H\Ht$ HHVHHD$ H|$ 11HPH$H$H$H$A H?H$H|$ ] H$HxHgTH$HxHgSH$H$H$H$A H辝H$H|$ H$HxHgH$HxHgH$H$ H$H|$ y H$HxHgH$H$FH$H$A HH$H|$  H$HxHgH$HxHgHt$ HRHt$ HHVHHD$ H|$ 11HPfH$\!H$H$ A HyH$ H|$ W H$ HxHgH$HxHgfH$0 H$0H$@A HH$@H|$ H$@HxHgH$0HxHgfH$Pb H$PH$`A HH$`H|$ ] H$`HxHg\H$PHxHg[H$H$p lH$pH|$ H$pHxHg)H$H$H$H$A HtH$H|$ H$HxHgH$HxHgHt$ HHt$ HHV H* HD$ H|$ 11HPCfH$H$H$A HH$H|$ H$HxHgOH$HxHgNfH$`H$H$A H}H$H|$ [H$HxHgH$HxHgfH$H$H$A HH$H|$ H$HxHgH$HxHgH$H$ H$H|$ {H$HxHgH$H$&HH$H$ A HH$ H|$ H$ HxHg2H$HxHg1Ht$ HTHt$ HHV H HD$ H|$ 11HPH$H$0 } H$0LCH|$ HmH$0HxHgH$H$@ H$@H|$ #H$@HxHgH$H$P H$PH$`A HݗH$`H|$ H$`HxHg:H$PHxHg9H$H$p H$pH|$ XH$pHxHgH$H$% L H$L.BH|$ HH$HxHgH$H$ L H$LAH|$ HH$HxHgH$H$ H$H|$ `H$HxHgWH$H$- H$L=AH|$ HH$HxHgH$H$ H$L@H|$ HH$HxHgH$H$ H$H|$ vH$HxHgH$H$C H$LS@H|$ H&H$HxHg}H$H$ H$L@H|$ HH$HxHgEH$H$ H$H|$ H$HxHgH$H$Y H$Li?H|$ H<H$HxHgH$H$  H$ L?H|$ HH$ HxHgHD$ <H$H$0 H+p H$0H|$ H$0HxHghH$H$@PfH$@H$PA HH$PH|$ 1H$PHxHgH$@HxHgHt$ HrHt$ HHV1HHD$ H|$ 11HPH$H$`xH$`H$pA HUH$pH|$ sH$pHxHgH$`HxHgH$H$ (H$H|$ H$HxHgWH$H$}H$H$A H芐H$H|$ H$HxHgH$HxHgHt$ HHt$ HHVH@HD$ H|$ 11HPYD$LHH0H$H8H$H$1H$H$H$H$H$H$ H$H$  (!D$H$ HD$荒H|$ H@H$ HfH|$ HH$ H?H|$ HH$ HH|$ HH$ HH|$ HD$H$\H$H$ A HyH$ H|$ WH$ HxHg H$HxHg H$H$0} H$0H$@A HH$@H|$ H$@HxHg H$0HxHg H$H$P H$PH|$ sH$PHxHgb H$H$`@H$`H$pA HH$pH|$ H$pHxHg H$`HxHg Ht$ HL Ht$ HHV HHD$ H|$ 11HPH$H$ <H$H|$ kH$HxHg H$pH$8H$H$A HH$H|$ H$HxHgR H$HxHgQ Ht$ HD Ht$ HHVHH$HxHg* H$HxHg) H$HxHg( H$HxHg' H$HxHg& H$HxHg% H$HxHg$ H$PHxHg# HD$ HxHg% H$dH3%( H[]A\A]A^fDH$^jfH$sfDH$[;fDH$C|fDH$+zfDH$fDH$fDH$fDH$fDH$fDH$fDH$fDH$kRfDH$SfDH$;fDH$#>fDH$ ?fDH$fDH$fDH$mfDH$nfDH$fDH${fDH$cLfDH$KMfDH$3fDH$fDH$+fDH$,fDH$>fDH$?fDH$fDH$fDH$sfDH$[fDH$CnfDH$+ofDH$ fDH$ fDH$fDH$fDH$fDH$fDH$fDH$knfDH$SofDH$;fDH$#fDH$ EfDH$FfDH$fDH$fDH$fDH$fDH${fDH$cfDH$KfDH$3fDH$fDH$9fDH$:fDH$lfDH$fDH$fDH$2fDH$sdfDH$[fDH$CfDH$+fDH$&fDH$efDH$fDH$fDH$fDH$9fDH$qfDH$kfDH$SfDH$;fDH$#KfDH$ fDH$fDH$fDH$dfDH$efDH$fDH${fDH$cfDH$KfDH$3 fDH$YfDH$ZfDH$fDH$fDH$fDH$LfDH$fDH$sfDH$[fDH$CfDH$+fDH$fDH$fDH$fDH$fDH$fDH$aHH$HxHgt H$lH$HxHgH$HxHgt H$1H$PHxHgt H$@HD$ HxHgt Ht$H{HH$HxHgt H$H$HxHgZH$HH'HH$pHxHgt H$nH$`HxHgHHH$`HxHgH$%HHH$@HxHgt H$H$0HxHgH$HHH$ HxHgt H$H$HxHgvHHH$HxHgSHH$HxHg5eHH$HxHgHH$HxHgt H$H$HxHgHH$HxHgHH$HxHgbH$PHH$HxHg?9HH$pHxHgH$BHH$HxHgH$HxHgH$H$ MH$H|$ H$HxHgH$H$H$LH|$ HH$HxHgH$H$XH$LhH|$ H;H$HxHgbH$H$ cH$H|$ H$HxHg0H$H$H$LH|$ HH$HxHgH$H$nH$L~H|$ HQH$HxHgH$H$ yH$H|$ H$HxHgH$H$H$LH|$ HH$HxHgVH$H$ H$ LH|$ HgH$ HxHgH$H$0 菻H$0H|$ H$0HxHgH$H$@H$@LH|$ HH$@HxHgH$H$PH$PLH|$ H}H$PHxHg|HD$ <H$H$` H+p蜺H$`H|$ *H$`HxHgAH$H$pPH$pH$A HQH$H|$ ¿H$HxHgH$pHxHgHt$ HHt$ HHVHZHD$ H|$ 11HPsH$H$x9H$H$A HPH$H|$ H$HxHgcH$HxHgbH$H$ (H$H|$ 衾H$HxHg0H$H$}nH$H$A HPH$H|$ 9H$HxHgH$HxHgHt$ HzHt$ HHV9HHD$ H|$ 11HPD$LH)H$HɺH$H$1H$H$H$H$oH$H$  PH$H$0 1 W!D$H$ HD$RH|$ HѼH$ HQH|$ H誼H$ HQH|$ H胼H$  HQH|$ H\H$0 HQH|$ H5D$H$@H$@H$PA H OH$PH|$ H$PHxHg H$@HxHg H$H$`zH$`H$pA HNH$pH|$ gH$pHxHgn H$`HxHgm H$H$ vH$H|$ H$HxHg; H$H$H$H$A H~LH$H|$ 蜺H$HxHg H$HxHg Ht$ HHt$ HHV蜾H4HD$ H|$ 11HPMH$H$ <nH$H|$ H$HxHg{ H$H$H$H$A HvKH$H|$ 蔹H$HxHg+ H$HxHg* Ht$ HHt$ HHV蔽H,H$0HxHg H$ HxHg H$HxHg H$HxHg H$HxHg H$HxHg H$艥H$HxHg H$PHxHg HD$ HxHg H$h dH3%( Hx []A\A]A^A_H$ަ\fH$fDH$-fDH$nfDH$lfDH$fDH${fDH$cfDH$KfDH$3fDH$fDH$fDH$DfDH$qfDH$fDH$0fDH$1fDH$sfDH$[fDH$C_fDH$+`fDH$fDH$fDH$>fDH$?fDH$fDH$fDH$fDH$kfDH$S0fDH$;1fDH$#fDH$ fDH$fDH$fDH$`fDH$afDH$fDH${fDH$cfDH$KfDH$3fDH$fDH$fDH$`fDH$afDH$fDH$fDH$7fDH$s8fDH$[fDH$CfDH$+fDH$fDH$fDH$fDH$fDH$fDH$fDH$+fDH$k,fDH$S^fDH$;fDH$#fDH$ $fDH$VfDH$fDH$fDH$fDH$AfDH${fDH$cfDH$KfDH$3"fDH$TfDH$fDH$fDH$fDH$.fDH$ffDH$fDH$sfDH$[fDH$CgfDH$+fDH$fDH$fDH$fDH$˿TfDH$賿fDH$蛿fDH$胿fDH$k.fDH$S`fDH$;fDH$#fDH$ fDH$:fDH$۾rfDH$þfDH$諾fDH$蓾fDH${fDH$cfDH$KfDH$3fDH$fDH$/fDH$0fDH$ӽfDH$軽fDH$製fDH$苽fDH$sfDH$[sfDH$CfDH$+fDH$fDH$fDH$fDH$˼fDH$購fDH$蛼fDH$胼fDH$kfDH$SHH$HxHgu^HD$ HxHgt Ht$H蝧HH$@HxHgt H$H$0HxHgtH$ƻHH$HxHgwHHD$pHxHg\HH$ HxHgt H$fH$HxHguHHH$HxHgOHH$HxHg.HH$HxHgt H$ܺH$HxHgHHH$HxHgt H$蔺H$HxHgJHHH$HxHgt H$LH$PHxHgH$@&HH$HxHgt H$H$HxHgtH$ڹHH$HxHgt H$賹H$HxHg,H$荹HHH$HxHg{HH$HxHgt H$=H$HxHg8HHH$HxHg{H$iHH$HxHgHH$pHxHgt H$裸H$`HxHg>H@HH$HxHg{H$TiHHHRHH$HxHgu*H$HH$pHxHgtH$HH$HxHgt H$ķH$HxHg= HHH$HxHgt H$|H$HxHgHHH$HxHgt H$4H$HxHg|HHH$@HxHgt H$H$0HxHge4HHH$ HxHgt H$褶H$HxHgHHH$HxHgt H$\H$HxHgHHH$`HxHgt H$H$PHxHg\HHH$pHxHgg6HH$HxHgFHH$HxHgt H$芵H$HxHgHHH$HxHgt H$BH$HxHgHHH$HxHgt H$H$HxHgsBHHH$HxHgt H$貴H$HxHg+HHH$pHxHgt H$jH$`HxHgHHH$PHxHgt H$"H$@HxHgjHHH$0HxHgt H$ڳH$ HxHgS"HHHD$@HxHgmH`HHD$0HxHgGHH$HxHgt H$NH$HxHgt H$,H$0HxHgt H$ H$ HxHgt H$H$HxHgt H$ƲH$HxHgt H$褲H$HxHgt H$育H$HxHgGH$\5HH$HxHgt H$2H$HxHgH$ HHHH$HxHgHH$`HxHgHH$PHxHgt H$虱H$@HxHgTbHH$HxHg3AHH$pHxHgeH$1SHHH H'HH$HxHgHH$HxHgHH$HxHgt H$訰H$HxHgmHHHHHH$HxHgEH$D3HH$@HxHg&HH$0HxHgHH$ HxHgHH$HxHgHH$HxHgt H$薯H$pHxHg[HHH$`HxHg5ZHH$PHxHg9HH$HxHgHH$HxHgHH$HxHgHH$HxHgt H$詮H$HxHgnHH$HxHgMrHH$HxHg,QHH$HxHg 0HH$HxHgHH$@HxHgHH$0HxHgHH$ HxHgHH$HxHgfHHH$pHxHg=bHH$`HxHgAHH$PHxHgH$HH$HxHgHH$HxHgHH$HxHgHH$HxHgjHH$HxHgInHH$HxHg(MHH$HxHg,HH$HxHg HH$0HxHgyHHH$HxHgX'HH$ HxHgt H$蜫H$HxHgHHH$`HxHgt H$TH$PHxHg>HHD$PHxHgEHH$HxHg$HHD$`HxHgtH$ժHHH$@HxHgAHNfAWAV1AUATUSHH1H H.OH$HDŽ$gdH%(H$ 1rH$H$ 蓔H$H$NH$HxHgH$H$aH$H$֙H$HxHgH$H$ H$H$艙H$HxHgH$H$VH$H$A H+H$H$H$HxHg]H$HxHg\H$H$ -H$H$踘H$HxHg'H$H$ 腠H$H$pH$HxHgH$HǩH$HHHVHH$H$11HP*H$H$ݞyH$H$A H)H$H$踗H$HxHgWH$HxHgVH$ HDŽ$gHDŽ$ HDŽ$ DŽ$ 蕍H$ H$H$ H~+H$HH$H$ ` H$ HIL$HDŽ$HDŽ$̈́H$H$H@@ L`H$L$ H$DžH$ HxHg&H$H$ H$HH$(t@H$L赎I|$kH$^H$H$ّ‰D$ @vkL$HT$L豝D$ <CsLQ @H$691LH,HH|$ HH fD$`fT$bfL$d-lɉ$4$0$,HHIHfD$pAƿ*I A)fDL$tEDAft$rD))ЍRDEAffAtEC Ei{AD)Ai> A ))Ѻ$I)))1ffD$H|$ $8芝H$$<HHH HH9 HHV?2IHHH4ׂCH?H"H)HH`HH)H),HHIHHI?L$ H)צC9c*HIE)H 2HL)HIHH?L, II)LN,HI)HHEHHL)HIHH?H 2HH)HHH)H$D$(D$$$ DŽ$@H$`$@H$蚎sHfD$0HfT$2H0H$`H fT$4Hx謄H$誒H$=IfD$@H IfD$DfD|$BEA H$Hx+H$DHx7H$@5H$ȍHfD$PH DHfD$TA fT$RH$@Hx跊H$@DHxÃH$A H$HxuH$DHx聃H$ I H$ Hx3H$ DHx?H$@H$0HDŽ$gHp蚈L$H$0L貐H$0HxHg1 MMyLWH$H$@Hp>H$@L^H$@HxHg MMyLH$`H$PHpH$PL H$PHxHgY L诉H$H$`Hp薇H$`L趏H$`HxHg H$ H$pHpTH$pLtH$pHxHg LH#H$H6H$H$!H$H$A H H$H$H$HxHg H$HxHg H$H"H$HHVޒHvH$H$11HP艇H$H$ <誈H$H$5H$HxHg H$H$H$H$A HH$H$ʍH$HxHg H$HxHgX H$HH$HHVđH\H$H$11HPoH$H$5H$H$A <HH$H$H$HxHgH$HxHg[H$H$5豔H$H$A H^H$H$yH$HxHgH$HxHgH$H距H$HHVsH H$H$11HPL$H$CMyLH$=蚅H$ +H H$H蠋H$H$ 5膓H$ H$0A H3H$0H$NH$0HxHgH$ HxHg\H$H茜H$HHVHHH$H$11HPH$H$@O蹒H$@H$PA <HfH$PH$聊H$PHxHgH$@HxHgoH$H$`55H$`H$pA HH$pH$H$pHxHgH$`HxHgH$H;H$HHVH菎H$H$11HP袂H$H$ <ÃH$H$NH$HxHg%H$H$H$H$A HH$H$H$HxHgH$HxHgH$H!H$HHV݌HuH$HxHg,H$HxHgH$ 6uH$)uH$@uH$uH$`uH$uwH$hwH$HxHgwH$HxHgFH$ dH3%(nHĸ []A\A]A^A_DILVL$LL胆Le3L&@^L@6A,E1E1+fH6H9A,@JgDDDDL$ LL$ LȖL$ L谖;L$ L蘖L$ L耖L$ LhL$ LPL$ L8L$ L LLH蠆H$HxHgtLH$FuH$9uH$HxHgt H$觕H$HxHgt Ht$舕HH$sfDH$[wfDLHL8L(rLILL(LLؔLȔ[L踔L訔nH$蓔GfDH${fDH$cfDH$KbfDH$3fDH$efDH$fDH$4fDH$ӓfDH$軓[fDH$裓fDH$苓fDH$s)fDH$[H|$蹴H^ uLH{H$ HxHgOH$  =HHnI$LPځHHH$=rHH$HxHgt H$ 覒H$HxHgH$ 耒HHH$HxHgHHH$HxHgHH$HxHgoHH$HxHgt H$ H$HxHg/DHHH$HxHg HH$HxHgI|$HpHH$HxHgtLXH$HxHgH$HxHgtL"H$HxHgt H$H$ mH$mH$@mH$mH$`mHH$pHxHgtL蚐H$`HxHgBLy5HH$0HxHg6H$K$H>HHH$HxHgHvHH$HxHgt H$H$HxHguHHH$HxHgt H$裏H$HxHgh-HHH$PHxHgtL`H$@HxHgHHH$ HxHgHHH$PHxHgHH$@HxHgzHHHHHHHH$0HxHgLL~?HH$HxHg;HH$HxHgt H$3H$HxHgHHH$pHxHgHH$`HxHgvHH$HxHgt H$詍H$HxHgn3HfDf.@f.@f.@f.@f.@f.@f.@HHtHH@fDfD1f.1f.HHtHH@fDfD1f.1f.1f.1f.G(f.HV0HHDHV8HHDtf.tf.tf.{tf.ktf.[tf.Ktf.SH HgH[f.@SHHgH[f.@SHHgH[f.@SHHsgH[f.@Hx@SHHxH[sHPw@SHHPwH[gsHw@SHHwH[7sHw@SHHpwH[sS(tiHHPHPHP pAHKHwSHHHwxHH9H`HH[HOHAHHHw.HH9At|DH[@AtjHH9tkHH9uAHvHHiAHUEHuAH[@EHu[AsH[Ω@S(tiHHPHPHPpAHK@wSHHHwxHH9H`HH[HO@AHHHw.HH9At|DH[@AtjHH9tkHH9uAHvHHiAHUEHuAH[@EHu[AsH[^@ATUSHHHoXHdH%(HD$1HtADEtrHC HxHgHCHxHgHCHxHgH{HHgHD$dH3%(H[]A\ÐHEHPDe AtHEHHPHcNuQPXf.Ht$趆THt$覆YHt$薆^Ht$膆cEhDATUSHHHoXHdH%(HD$1HtADE~HC HxHgHCHxHgHCHxHgHCHxHgHBnHD$dH3%(H[]A\DHEHPDe AhHEHHPHcNuQPLf.Ht$fHHt$VMHt$FRHt$6WfDATUSHH_dH%(HD$1HHH@H= cHkXHHtADEtuHC HxHgHCHxHgHCHxHgHCHxHguuHlHD$dH3%(H[]A\HEHPDe AqHEHHPHcNuaPUf.HfHt$|Ht$1Ht$փ6Ht$ƃ;eDUSH@HgHuHxH@8byHH_H}HPHCpbyHH{tHH@H=dNuCG@HE .c HHHCHC8HHC HE(HC(E0C0nHHHHPoHtHsnH^fLIz@USH@HfHuHxH@8byHH^H}HHCpbyHH{tHH@H=dNuCG@HE 0.c HHHCHC8HC HE(HC(E0C0mHHHHnHsHmH]fLIz@USH@HeHuHxH@8byHH]H}HHCpbyHH{tHH@H=dNuCG@HE ;cHHHCPHC8HC HE(HC(E0C0 lHHHHmHrHlH\fLIz@USH@HdHuHxH@8byHH\H}HHCpbyHH{tHH@H=dNuCG@HE HHgt Ht$9nHYH\$ HSHiuOH\ HHHH|$ J뮐AVAUIATUISHAHdH%(HD$1fExfA~hEAt`HAMSALLHXZAML1HLHL$dH3 %(HuH[]A\A]A^M%OHHUHzHgt Ht$7mHXf.DAWAVEAUATIUSA։HH$dH%(H$1DaHtOƄ$xH|$@HtOHDŽ$t1HDŽ$pƄ$yH{HDŽ$HDŽ$HDŽ$HDŽ$H\$@HOH$HD$@XhHDŽ$hHD$HqHD$PHD$XHD$`HD$hHD$pHD$xZHD$@Ht$HHD$HPeDŽ$HDŽ$gHxX"OHD$@Ld$@L`A$UE$H@H|$@LcDLdPMHD$@H|$0HpQSHD$0H|$ HhHD$@HpL)2SHD$ HHH9Ht$ HHLYaHD$ HxHgHD$0HxHgH$HD$@XhHDŽ$hHD$HPeHxHgH$HD$HqP_HCHrOH$H\$@HT@HDŽ$t2WH$dH3 %(LHĸ[]A\A]A^A_fDI$HHT$HL$y8tAƄ$|HHPHD$HH@0H=PuDHD$@DHt$ifHt$ iHt$0i H|$H訃1EHtK/LH8HD$ HxHgt Ht$~iHD$0HxHgt Ht$biH|$@GHTH HH"H|$H7H\$@HCHqOH\@HH$HDŽ$tUHTf.@AWAVAUATIUSHHH|$hdH%(H$x1]HpOƄ$HH|$L%pOHD$ht1HDŽ$@Ƅ$IH{HDŽ$PHDŽ$XHDŽ$`HDŽ$hH\$L'KH|$PHD$XhHD$hhHD$qHD$ HD$(HD$0HD$8HD$@HD$HfVHD$Ht$HD$PeD$XHD$`gHxX KHt$ H|$DuD} D$ Mm[HIHt$ HD$ .[DHIHt$HD$.[DHIHD$LHpOHD$`HD$XhHD$hhHD$PeHxHgu_H|$PHD$q[HCH|$hH\$LdHD$htsSH$xdH3 %(Lu!HĈ[]A\A]A^A_Ht$fgHH HH-H|$.DHRH|$lHCH\$HLdH|$hHD$htRHQSH HCH[f.@SHH#H[f.@SHHH H|$dH%(HD$1fHt$H)BHD$HxHgu'HD$dH3%(HuH [f.Ht$eOGHHD$HxHgt Ht$`eHPSHHdH%(HD$1HGHxHguOHCHxHguNHCHxHguMH;HHgu]HD$dH3%(uYH[Ht$d@Ht$d@Ht$dH;HHgtfDHt$dWFHHWLGHt3LHHRHt9J }HRHuI9t9H ~ NfH(HHHL Iw)IL9tJHHHw L9t HDHHH9tHH9uHH9u=HDHH9tIwH9tH9uH9tHfDuWuNuEHH?u:HcHcHiHHH)HcHHHi@BHf1)HcHHHHƉ1)HcHiH1)HcH)HHi@BH?H1H)H)fHHHHwIHH9t/HHV?2HHH?H"H)H`HH)HH@HH9HEHHSHHG8HHGpbyHFHH[Nfff.Hf.LIzSHHG8HHPHGpbyHHBHU>HD$dH3%(u!H[]fDHԐHt$&Z;f.DH7USHHHoHPdH%(HD$1HGpbyHtDHEH@ H=`tNu_m@u.HE8HEbyHxHguPHuH}c=HAHPHLFHD$dH3%(u(H[]DHfHt$FY;f.DH'USHHHoHdH%(HD$1HGpbyHtDHEH@ H=`tNu_m@u.HE8HEbyHxHguPHuH}H:HD$dH3%(u'H[]@HfHt$U7ffffff.H'LIz@USHHHoHG8dH%(HD$1HHGpbyHtDHEH@ H=`tNuWm@u.HE8HEbyHxHguHHuH}8H=H 9HD$dH3%(u'H[]@HfHt$T6ffffff.H'LIz@USHHHoHG8dH%(HD$1HHGpbyHtDHEH@ H=`tNu_m@u.HE8HEbyHxHguHHuH}7H H|$ H f.fUSHHXHgdH%(HD$H1f. jufTf. >uvlfPЃuSHl$ IinA@fIfA@gHPI)H1HHL$HdH3 %(HHX[]ÐHl$ D$ -LEHl$ AHyLcII9HH$0yHD$fHD$y0fPЃt/Hl$ D$ -LEnaA@nIfAP)H@Hl$ IHH$0yH;HHgtHH) HHf.fUSHHHOHHt#HHC(HH[]H9t1B 9E @DUSH@HHdH%(HD$81HHH A ))щA)))1ff$f9u D$Af.Pǃw @ADǃ9u|$8WHfD$ H Hf;UfD$$fT$"tD$Pw PE‰D$H\$(dH3%(D$uH0[]A\Ë|$Ha  )fփ{HeDֿWC11ICxP1ҿxPD޿R11RHH|$ HD$ FHD$HxHgt Ht$ZHfATUHSHHpH|$dH%(HD$h1Ht$0H|$HIfH f,@Pf-f AD$lfwWf'iH|$ BIcT$IcD$Ic $׉@@HiH4HH)H‹D$ HHi@BHN6HH9H`HHHEHMHHL$0HD$8@HD$8HHT$0HHCHSt@H|$8CHH\$hdH3%(Hp[]A\1)HcHHHH1)HHiH1)D$ HcH)Hi@BHHH9uSHH9uDHHEfHHKHC/@HuHH:@11OH|$HT$@߃ Ht$H|$ H|$ zHA11?1҉ƿxyMzOƿxYMH H|$ JHD$HxHgt Ht$HfDHHHHHH9HHV?2H?HHH"HH)OHHH HI*f)H)A)֍RLgfffiəimffi{i> )0ӂHH9f.f.AWAVAUATUSHHHH4$dH%(H$1lNH|$pIIII IfD$ fDd$"fDl$$HL$pH\$`HHqXHHH|$pA'HLt$PHD$pHLHpXLHHT$pHD$pHBLMA~8ME~iH@Lt$pLrAH|$pEAL$MGA|$8Et$iHD$pLd$pHPHDŽL`A$lH|$pE$A.HD$pLd$0HpLH$HD$pXhHDŽ$hHD$xPeHxHgQH$HD$xq[HOHOH$HD$pH@HTpHDŽ$t6H$HHH3HH9 H|$@HLt$P趭Ht$@L艾LHNTHHT$`HD$PHJHHpH;rLHHHUHgHD$`HxHgHD$PHxHghH|$0HHgH$dH3 %(HWH[]A\A]A^A_fDLIH@0H=PHT$pHD$pA0HB@HD$0gHD$0gHHgHEnHaIHHD$HD$x8AƆ6M$MA8thAƄ$nfLI$A0H@0H=P0LA @H;pa1Ld]LpIH@0H=P} LnfDH|$>HD$HH@0H=P H|$ DH\$`Ld$0oHL;H\$`Ld$0oHLH\$`Ld$0oHLH 0LHT$pAHD$pHBHX Ht$F c HHHHH|$pHHHHD$`HxHgt Ht$ HD$PHxHgt Ht$ HD$0HxHgt Ht$@ H/HAWAVAUATUSH8dH%(HD$(1HHxwIH|$IHhH|$>HD$HxHgAfDf DwWHH੔ujH҃9|wHA)A u F~;A)A uD~A)A c륐IEHxtH|$HLhH|$>AHD$HxHgfDf AwOHH੔ubHD9}vHA)Ń u EA~BA)Ń uDA~"A)Ń kfFf-A0fA(jHH@fXfhIH@fDh fDp"H$HD$HD$HLxH|$HT$@@ HD$HT$,H$HT$H|$IL$PHD$H$ID$PID$XIT$XHL$HD$H|$HD$(dH3%(H8[]A\A]A^A_HE H8 H4114HD$HxHgtHH1ɺ訃1EHILPHH|$H0USH@HHdH%(HD$81HHHO'Ht$H{HD$HD$ HD$(D$0H$PHD$xHC8byH.H|$HPHCpbyHH{tHH@H=dNu\G@HD$ Ht$H{HHCHC8HHC HD$(HC(D$0C0 H設.c HHH'HHPIHqH HHIHHHGDSp߃H@H|$HT$dH%(HD$81Ht$H|$ hHD$HxHguH|$ HD$ PCHt$HHH|$ HD$ PHBHD$HxHgtHt$@SHH?aBfЉfimfɍ 3i{)ʉi> ӂt=pvMt0ts t"w}txta)ȃt titQ@@t.}w)ȃtf=nwH[t11]DH[f.USHHHHXdH%(HD$H1\‰D$@vNHT$0H|$ :D$H|$ s1HH@HHfD$ HH |$fT$"҃-lfL$$ɉSCK @HHIHfD$0Aƿ*I A)fDD$4EDAft$2D))эRAȍtffAi{i> A)D))Ѻ$I)))1ff$H|$KJHuCHHHHH9HHV?2IHHH?H"HH`H)HH),H)HHHHII?H42H)צC9c*HHD)H< HL)HIHH?HHH)HH@HL9tPHE;Hx.} 7}E@M$/}H1[]A\A]A^A_DHIHEA8HD$HEHxuxf.}tu@HEM<$HxA?}MIM9M$HEA8Hxt@H|$1Hf}M<$HUAHz=}t"MMt IXI$IHEM9MHD$t6HEA8Hx(}M$EM@1HHM$fI$L@M$Ek@1HHM$CM9L;;@1HZHfDHUM<$HzA}MIM9M$HEA8Hx@H|$1HHEM$HxE8u?}ALD$DLD$utDM1IEE1HPWH}A1nHM<$EM$M=1H?HM$MMH}1HM$@ATUHSHvHH@H|$dH%(HD$81HD$HuHxE Ht$HLeD$ E!D$!E$D$$E(HmD$(^HD$H{HpLD$ Lc Hk(C0HC8gCD$!CD$$CD$(C1L9tHK8Hs HHOC0HD$HxHgu2HD$HxHgu0HT$8dH3%(Hu)H@[]A\@Ht$@Ht$WHH8HC8HxHgt Ht$bHzzHH|$mzHH;HHgtHt$+HHHD$HxHgtHt$AWAVAUATUSHH8dH%(H$(1HH|$HxH$H$ Ƅ$$Ƅ$ -Ƅ$!:Ƅ$",Ƅ$#.HD$0gD$HD$0HxpHHt$0D$@D$AD$DD$HHD$pH@HD$xHD$pHxEHD$pHt$8Hx2D$@Ht$pH$$D$A$D$D$D$H$!11HD$fD$HD$pD$E1L$LpHD$PL`AD$r1H$H9$H$HxHgqH$HxHg@H$HxHg@&ui$H$HhH$Hp8H|$ 1H|$ HD$HD$ HxHg@$KH$H$H$Hp H$H|$PLgLL\$Ht$PH$Hl$xD$`$D$a$D$d$D$hH$LHxD$`H$H$HDŽ$gƄ$$D$a$D$d$D$h$HD$XHxHgHD$PHxHg$$8@$H$Hx8)D$1@$H$Hx8fD$O$H$Hx8A!Ht$ >Ht$ Ht$P@gDH$+v|$-At$HL$|$H\$HH$duH|$0ZuH$(dH3%(HD$\H8[]A\A]A^A_@Ht$PfHt$PHx81ɺ)f9uHcHHT$H$H9$@ H$zH$H$֜H\$HHH7118~1HD$0HxHgt H$HHD$ HxHgH$tH$sH|$0sHHHHH$HxHgtH$H$H.H$HxHgt Ht$ \H|$PrseHD$PHxHgOH$*=HAUATIUSHHH$H$ H$@dH%(H$11f$H$&HNƄ$H$`L%NHDŽ$t1HDŽ$Ƅ$H{HDŽ$HDŽ$HDŽ$HDŽ$H$`L'H$HDŽ$`XhHDŽ$hHDŽ$hqHDŽ$pHDŽ$xHDŽ$HDŽ$HDŽ$HDŽ$IH$@H$H$0HDŽ$hPeDŽ$HVH$H$h11DŽ$H$`H$hHxXH$@HxHg9H]ILcHD$gHD$ g$@Ht$ H$`H@l$ H;NuH$hH|$0Ht$0H|$HD$0HxHgH$0H$H|$@Ht$@H$HV31$H$tHNH$h1HD$@HxHghI9u.@Ht$ H$`H@l$ hI9t;itH$hH|$PHt$PH|$`HD$`IE0HD$PHxHg8H$0H$H|$pHt$pH$HVE1$H$tHNH$h1HD$pHxHgIm0H$@HPH$@HrH$0H HH$0GI9AE(;Ft%Ht$ H$`H@l$ I9uH$hH$xH$H|$ H$HxHgH$0H$H$`H$H$HV1$H$tHNH$h1H$HxHgVL9fD;Nu%Ht$H$`H@l$I9uH$hH$H$H$H$IE8H$HxHgH$0H$H$YH$H$HV1$H$tHNH$h1yH$HxHgI]8H$@H(H$@HIE8H$H$H$H$H$|&oH$H$0H$HxHgH$0HDŽ$0H$0H`HH$0fLHt$H$@H$HHt$ H$PHt$ H$XHt$ I}H$@H$HI}H$PI}H$XI} H$@4yHD$ HxHguaHD$HxHgu@H$`H$dH3%(H[]A\A]øIE8 H$@H$@H$0H$@+H$@I9H$@4H$@H$@5H$@H$@nH$@\WIE0H$H$H$OH$H$ wH$ MH$H$hzHCH$`HL`H$HDŽ$tkH$@HxHgt H$0H1HHHH$0HDŽ$0CH$HxHguxHD$ HxHgt Ht$BHD$HxHgt Ht$ &H$`ɹkH$ HDŽ$ H$HxHgtH$@vH$@ZH H H6H$HxHgH$(HxHgt H$0'H$:ZH|$P0Z H$HxHgtH$0HHFHHHHWHHzHD$pHxHg HD$PHxHgH$0tqH$pHxHgKH$pY4H$pRY"HHH$06YH$0HxHgH$HH$YHHH$XH$HxHgHH$/YoHBHHPTHxHVH HVH+H$HxHg8H$0&H$HxHgt H$0H$XHH$0XHH(HD$0HxHgH$0ӸH|$(y@ATUISHH1HdH%(H$1H$H$pH$f$HDŽ$gHxƄ$/I$H$Ƅ$Ƅ$DŽ$Ƅ$H$PH@H$XH$PHx֥H$PH$Hx轥$H$$p$$q$$t$$xHEH$H@H$H$HxQH$H$Hx8$H$$$$$$$$H$PHpH$H$hHxˤ$pH$H$L$PH$X$$q$$t$$x$kH$H$HxR$L$H$Ƅ$HDŽ$g$$$$$$$1L9tH$H$HHp HH$$TH$H$Hp蠣H$H$Hx臣$H$H$L$H$$$$$$$$'H$H$Hx$L$H$Ƅ$ HDŽ$(g$$$$$$$1L9tH$H$(HHp HH$$ S$H$HHp8SH$HxPx H腫H$Hx(Hg@Mk@J$ C$5H$Hx8AH$Hx8At$H$0HcuH$0Hcn(责HHH@$8H$HDŽ$HD$pfE$:HEfE$8fE $:fE"CH$H|$pH@@ HhH$HT$pKH$H$H$xHKPHDŽ$HDŽ$HCPHCXHSXH$pH$xH$$H$H$H$Hp H$ $H$H$H$(Hp Hn$ H$PH$HpH$H$hHx$pH$H$0H$X$ $q$!$t$$$x$(荟H$0H$Hxt$ H$H$PH$XHDŽ$hgƄ$`$@$!$A$$$D$($HP$`$H$0P@HH'HC@Hk@H$pHDŽ$pHo;H$0H`HH$0oH$H$0HpaH$0H$HxH$H$0H$pH$$@$$A$$D$$HH$pH$8Hxם$@H$0H$H$HDŽ$gƄ$$$A$$D$$H${N$}$ tH$H9$]H$pN$ jH$H|$0Hp8HD$0HCHHkHH$pHDŽ$pHn1H$0H`HH$0mH$BNH$5NH$MH$`MH$~MH$dH3%(H[]A\$tH$H9$PH$0M$UH$H|$Hp8HD$HC@f$ H$pkM@HH'HCH$ $H$H$(HHp8$ $H$H$(HHp8萲H$p fDH$H9$XH$0L H$H9$H$p]L.iHCHHt$`H|$@HD$`Ht$@H$oXH$袗H&HC@Ht$PH|$ HD$PbHt$ H$0XH$cH118~1{H HHHHH$HxHgutH$xKH$kKH$JH$`JH$JHH$HDŽ$CHD$ HxHgtH$pTzH$HxHgaH$HDŽ$HD$@HxHg0H$(HxHgt H$pH$IH$IHHH4HdHH4H$pHxHgt H$0yH$0IH$0HxHgyH+H$HxHgH$pH$0HxHgt H$pH$ IHBHH$HxHgt H$p踻H$HH$HHHH$HxHgtH$pmHHH$HxHgH$p8xHHxH$HxHg_H$pMHH輖HEHPͩH$HxHgH$p跺H HHۨH$H$HxHgH$pcH_HH$`HxHgH$p-ATUASHHHdH%(HD$1HcHHH)Hi@BHHH$gDHڅxHcHHH)Hi@BHcHHHHHHi@BHHH$fDH\$dH3%(u;H[]A\fDHcHHHHHHi@BF@1AWAVAUATIUSHH:dH%(H$1H4$HDŽ$HHDŽ$HH@0H=cG(H$ImHHEH@PH=cHE8HD$`HEL`@:Hf$Hf$HH Icf$}(H}PHHR HUHD$HD$pHt$H$HT$pHqH$IJ!HHIH9t2LHV?2I?HH`H"L)ILL)IImHHELp@AHf$Hf$HH Icf$}(H}PHHR HUHD$ HD$pHt$ H$HT$pHxH$HD$PH|$PѢM}AM8IHh8Hf$Hf$HH H0cf$A(EIPHHQIW@D$0HD$pHt$0H$HT$pHɸH$HH)HHHH9t2HHV?2H?HH`H"H)HHH)HM}M?ILh8Hf$Hf$HH I0cf$A(\IPH HQIW@D$@HD$pHt$@H$HD$HT$pH˷H$HD$HT$pH!D9HL$`sU9 D9DH$[1H$dH3%(rHĨ[]A\A]A^A_9sD9w9wD9rHI),I)צC9c*IHII?H4 IHL)HHL)IHIHH?kfD'fDfDfDHLcHIHH?H *IHH)HHH)HIHH?kHH9+"HH9HH9u H^@H?fDHHH9t HHHH9-HD$HH9HH9HH9Hw1HH9HH9CHHÐHXPHHbH|$@HQHuH|$/@HHHw-HH9DHHHH9hH9_HH9H9I@L9u @H@HH97H2@HHH9DHH9VHH6H9tHC\@HH9HDHH3THHyHH[HH3H$fDUSHHHvHHHG0byHGH}HkHCpbyHH{tHH@H=dNuLG@HE HuH{HC HE(HC(E0HHCHC8C0^H[]H HH HeHHEHݎHuHH͎f.USH@HHdH%(HD$81HHH{HHHH:cHʍH HHGHbHJf.ATUISHHՉH@HdH%(HD$81eHHD$H$HD$8Ld$ Hl$(\$0%HHzGHҍfAUATIUSHoHHHHH$dH%(H$1H{H$H{H$yΙH{ H$y踙1H$H$f$HD$`C(HC0HC8HxHC@HCHHCPHCXƄ$,HD$`gKI$Ht$`D$pD$qD$tD$xH$H@H$H$Hx}H$Ht$hHx}D$pH$$D$q$D$t$D$x$H$Hp|H$H$Hx|$H$H$L$L$$$$$$$$?|H$H$Hx&|$L$L$Ƅ$ HDŽ$(g$$$$$$$1M9tH$H$(LHp H$ H$HxHgyH$HxHgxH$H$HpO{H$H$Hx6{$H$H$0L$$$$$$$$zH$0H$Hxz$L$PL$XHDŽ$hgƄ$`$@$$A$$D$$HH$HxHguH$HxHg$`$ H$H$pzH$pH$Hxy$H$($$$$$$$H$H$H$H$$ $H$pHx8gy$ +H$H$H$(Hp H腩$$ H$pHHp8ܶH$p*{(5$`$  H$H$xH$H$Hxx$H$($$$$$$$H$H$H$H$$ $H$Hx8(x$ H$H$H$(Hp HF$$ H$H$Hp8wH$[)$`tq$ [H$H9$Pu[H$H9$XuIH$pH|$ XHt$ H|$PٓH|$Pq@$ tH$H$Hp8wH$H$HuH$HxHgH$HxHgtH$躚f.H$0S(H$F(H$HxHgH$HxHgHD$hHxHgHD$`HxHgH$dH3%(H[]A\A]$ D$ !H$H9$P H$H9$XH$pH|$ 觑Ht$H|$@(H|$@m@H$H9$PZH$H9$XDH$pH7H|$0H躑H|$0h@aH$fDH$ufDH$ӘvfDH$軘yfDH$裘ffDH$苘 fDH$s fDH$[fDH$pCbfD蓙III詸yIpH|$@{HD$HxHgueH$0%H$%H$$H|$`$H{X)wHa2L9H|$0zH$HxHgtH$聗IrH|$PmzHD$ HxHgt H$NH$HxHgBH$p(0IIH$$H$HxHgtH$pInIIH$HxHgH$訖IIH$HxHgH$pIH(HD$`HxHgH$>wHCHxHgt H$HCHxHgt H$H{HHgt H$ߕHgII|H$HxHgwIH$pH#IIH$pHxHgzI'I4H$0HxHgt H$*)Eȉ) )f 0ӂv-fA9rH$dH3%(VHĨ[]fHHѺutufi{ f9ufi> )f҃W@f@thH|$0a{H|$0{Hx}HzHD$0H|$HpyHl$ Ht$H5HmDfi{f9&fi> f9KHKsH|$HT$`nHl$ (Ht$H{mHHD$ *HEHQHHsHD$HxHgt Ht$אH|$0}nHU|HHHD$ }HD$HxHgtHt$蓐ĐHHHf.@HHHf.@HwLynfЃAHtG~fDGPW.fffff.SH H`H81dH %(HL$X1Yut?1҉Ǿ1mtEHt$1yHT$1D$D$wHL$XdH3 %(u:H`[HhzH~LHqxHIqHH7Hzfffff.tnfffff.AUATUSHHHztPI1E1 DL tIUD2$H;ZsByD2$H;ZrHD[]A\A]E1fDAUfATUASHHdH%(H$1f.,fH|$ *\Y D$w$$Y$/H|$ Ƅ$X0HDŽ$'pD$H|$ HDŽ$HDŽ${EH|$ iHD$ HHpQuHD$pHD$ XhHD$xhHD$(PeHxHgH|$`HD$(q́HNHNH|$xHD$ H@HT HD$xtyH$dH3 %(HHĘ[]A\A]fDH|$ f!:@L$hMtoA}8t,Ƅ$Y (E1fWC@LrIEH@0H=Pt L@Ht$&nnH|$ HiHwfAUfATUASHHdH%(H$1f.,fH|$ *\Y D$ )D0ӂ,H1H9@ƃH|$ Dt$D IfD$ HfD$"LDH fD$$HfD$0DH HfT$2HfD$4IfD$@H fD$DH$IfDt$BHxOH$0HDŽ$xHxhDH$HxzMH$0HDŽ$xHxhxDH$AHxCMH$pVH$H$AHHPBൃBMH$pH$HpMH$H$HXH$H$H$HHHQⵃQHVYH$HxHgH$HxHgH$HxNH$HxiNH$H$HDŽ$gHpLH$H$/OH$HxHgH$HxH$H$HZH$HH$HxHgWH$HxMH$0HDŽ$xHxhoBH$H$HHHQⵃQtFH$Hx>MH$LHpKH$HxHgH$p@HD$`HxHgH$@H$dH3%(LTH[]A\A]A^H$HH$HxLH$HHVWH$HxHgHH$HH$Hx LH$HHV,WH$HxHgH$K1WfH$S&fDH$;AfDH$#hfDH$ PfDH$fDH$%fDH$0fDH$XfDH$Y1ɺ訃1=HH$HxHgt H$QH$pd>HD$`HxHgt Ht$(H$;>HLCHH$HxHgtH$qHH$HxHgtH$vHH$HxHgZHH$HxHgHHD$@HxHgt Ht$2HD$0HxHgt Ht$@HD$ HxHgt Ht$@HD$HxHgt Ht$@HGHHD$PHxHgoH$]HHD$pHxHgDHHD$`HxHg)HH$HxHg HHHDŽ$g97H$HFH$rP HeDHHZDH$-OH$BKI1H{HHDŽ$g6H$H+EH$OHCHHCH$NH$/BH[H$HNH$BHHH$HYNH$AwHHf.SHHdH%(HD$1t~<t u/t4tTHD$dH3%(uLH[fD1tѸu̹xHƅ$,QK;f.fffff.HVHHt$H HQHHVHHPtB1fff.ЃAHtG~fDGPWMfffff.H?*tbHHf.H9>*ufH&wLy7fSRH$H HdH%(HD$1CHMh}HLHWLHD$dH3%(uH [9HH1LHCSHH HHGH|$H$HD$dH%(HD$1>7HT$dH3%(u H H[9SHHHP+dH%(HD$1HG0HxHguHHC(HxHguGHC HxHguFH{6HD$dH3%(u9H[Ht$@Ht$@Ht$8fDSHGH[^?fffff.AVAUAATUHSHH0HIEHHGP+HGHGHGgHGgdH%(H$12H$H|$Ds8Dk<)$\NH$H|$ }ENHEHt$H|$PLh>2H|$@L12H|$@ }?HL$PHT$@HH|$0AH{ Ht$0@HD$0HxHgHD$@HxHgHD$PHxHgHEHt$ H$Lh1H|$pL1H|$p }=?H$HT$pHH|$`AHk(Ht$`Ht?HD$`HxHg^HD$pHxHg`H$HxHg&}H"KZHCHS H$1zFH$H$H$HKHDŽ$HDŽ$HCHCHSH$H$3H$3HCH=HH$H$HRLEe?H$XI 6$HHcHLH7}HFHH$GHD$ HxHgHD$HxHgH$dH3%(H[]A\A]A^fD1}HIHCfH$3OfDH$cfDH$afDH$2fDH$0fDH$.fDH$fDH$fD}HHuHCDH$AH$3H$GHs(HHVF$Hb;H$5F3)wLyu0HHC0HxHgt Ht$ HC(HxHgt Ht$ HC HxHgt Ht$ H{1H0=HHD$`HxHgt H$^HD$pHxHgt H$?H$HxHgHD$ HxHgt Ht$ HD$HxHgHt$HHD$0HxHgt H$HD$@HxHgt H$HD$PHxHghH$VHH$HD9HHHH$HrDHrHfHHfHGf.SH0H#,H[f.@S}HHHT$dH%(HD$1GHL$dH3 %(u HH[1f.fffff.HVHHt$H HQHHVHHPtB1fff.ЃAHtG~fDGPW^Cfffff.H?*t>Hf.H9>*ufH.wLyC-fSP+H HdH%(HD$19HCh}HBHBHD$dH3%(uH [<0HHqBH9USHHfH(+HdH%(HD$1}/HEC4 ,HSBH BHUHt:HHPHHUHHStBHL$dH3 %(HuH([]D1/HHAH,9fff.SHHH2dH%(HD$1HG(HxHgu0HC HxHgu/H{,HD$dH3%(u"H[Ht$@Ht$.fffff.SHgH[^5fffff.AVAUAATUHSHH(HIEHHG2HGHGHGgdH%(H$1(HT$pH|$Ds0Dk4}gDHEHt$H|$@Lh`(H|$0LS(H|$0 }5HL$@HT$0HH|$ AHk Ht$ H96HD$ HxHgHD$0HxHgHD$@HxHgO&}HAHCH|$`+HD$`HT$hH|$xHKHD$hHD$`HCHCHSHL$pHD$x*H|$h*HCHHH|$p+HRLCQ6H|$pG@ +HHR?LH.}H5?H|$p>HD$HxHguiH$dH3%(HĐ[]A\A]A^f}H@u_HCDHt$pfHt$p@Ht$pNHt$pT1}HS@uHChDH|$P?+O+H|$P?Hs HHV%>TH2H|$P=띹0wLy(n+H|$PH=HD$HxHgt Ht$HC(HxHgt Ht$HC HxHgt Ht$H{(H4HHD$0HxHgt Ht$pHD$@HxHghHt$pYHHHD$ HxHgtHt$pfHbH#H7H|$pH< gDHGf.SH(H$H[f.@S}HHHT$dH%(HD$19@HL$dH3 %(u HH[)f.Ðfff.AUATUSHHH(H|$dH%(HD$1#H|$}1H|$H7HHUHgHD$HxHgHU1E1Hzu*WL;A\$I%8AEHUH;Zs/Jx H,HUBL,xH,H]HL$dH3 %(HunH([]A\A]úЃAHt#PЅ[Ht$;LPJHHHD$HxHgt Ht$ugH92r(HUHHzHgtHt$HgfUHGSHHHHGHGHG0HG `PdHG(H9H[]HsH{HH1AWAVAUATUSHHhH|$H|$PHt$HLD$dH%(HD$X1!H|$@H!HT$PHt$@H|$0HD$@HxHgTHD$PHxHgkHD$HXIH$HXHQHl$0IL}ȅxBMMvMt?I~ LHLoM9IF;uLL)HH}MvMuL9$$It$ LHLfM9IF;LL)H=L$$fȅxBIH[Ht?H{ LHLwM9IFT;uLL)HH}H[HuL9$$It$ LHH^L9HF ;MI)I~{LHp(f.H=}PHt$H|$) HD$0HxHg~H\$XdH3%(HD$rHh[]A\A]A^A_fDI| DȅqH|$HD$0LD$@HL$P(3LHD$PHEЃAHt}PЅdHt$P7UЃAHtjPЅHt$/`7ЃAHt0PЅwHt$@37hPJH낋PJHϋPJHHHD$PHxHgu>HJ.HHD$@HxHgtHt$/_cHHD$0HxHgtHt$/>cC$fAUATIUSHIԨHHhH|$PHT$dH%(HD$X16:H|$@L9H|$0L,LD$PHL$@HT$0H|$ HHT$0HzHgu~HT$@HzHgHT$PHzHgH\$ Ht$P1H2HT$ H;\$PHzHCHgHL$XdH3 %(Hh[]A\A]øЃAHBbHt$v5SЃAHBHHt$0F59ЃAHB.Ht$@5ЃAHtVJʅ3Ht$@HD$4HD$fBHJjfBHJ*fJqrBHJj-"HHD$PHxHgt Ht$aH+HHD$0HxHgt Ht$`HD$@HxHgtHt$`H@AWAVAUATIUSHHHXHT$H|$0H $dH%(HD$H17HT$H|$ H7HT$0Ht$ H|$@MuIEHD$M)Ld$@HM|$؅x?LMvMtPJHBPJH듋PJHVЃAHtIPЅHt$0렺ЃAHt0PЅqHt$0bPJH붋PJHHHD$ HxHgt Ht$#]HD$0HxHgt Ht$]H'HHHD$@HxHgtHt$\fffff.k$f.Hp3USHH߾)3H1tfހH1EH[]Ðfffff.AWAVIAUATUSHH$D$dH%(H$1/HBNƄ$hH|$ L-BNHDŽ$t1HDŽ$`Ƅ$iHCHDŽ$pHDŽ$xHDŽ$HDŽ$H\$ Ll HD$(H{H-BN1HEHl$0H|0HBNHL%ANL5ANH|$pID$Lt HD$ HDŽ$薲HD$0HD$8qHD$@HD$HHD$PHD$XHD$`HD$h(I7HD$ HL$HD$8PeD$xHx`HV)"HD$ H$11D$xHx7%HD$ Ht$8HxhHt$H|$ $$D$uD$H$HD$ HDŽ$薲HD$0HD$8PeHxHgH|$pD$HD$8q-ID$H @NH$Lt HEHl$0HL0HCH\$ Ll HDŽ$t%H$dH3%(D$udHĨ[]A\A]A^A_DЃAHt6PЅSHt$D$,D$8PJHNH|$ HaH#H|$8H\H|$ #H$HDŽ$t$H#HH$HxHgt Ht$XH|$pHD$8q,HHSH\$ HLl HAWAVIAUATAUSHH|$xdH%(H$1+H>NƄ$XH|$L5>NHD$xt1HDŽ$PƄ$YHCHDŽ$`HDŽ$hHDŽ$pHDŽ$xH\$LtHD$H{bH-[>N1HEHl$ H| HL>NH<L%>NH >>NH|$`ID$HLHD$HD$x薲HD$ HD$(qHD$0HD$8HD$@HD$HHD$PHD$X$I7HD$HL$ HD$(PeD$hHx`HVuHD$Ht$p11D$hHx!HD$Ht$(HxhcHt$ H|$$HD$p$DDl$ HD$HD$x薲HD$ HxHD$(PeHgH|$`HD$(q9*ID$HH|$HQHH|$(HLH|$H|$xHD$xtHHHD$pHxHgt Ht$ QH|$`HD$(q%HHSH\$HLtH딐AWAVIAUATUSHH$D$ dH%(H$1$H7NƄ$hH|$ L-7NHDŽ$t1HDŽ$`Ƅ$iHCHDŽ$pHDŽ$xHDŽ$HDŽ$H\$ Ll HD$(H{YH-R7N1HEHl$0H|0HC7NH3L%7NL557NH|$pID$Lt HD$ HDŽ$薲HD$0HD$8qHD$@HD$HHD$PHD$XHD$`HD$hI7HD$ HL$HD$8PeD$xHx`HViHD$ H$11D$xHxwHD$ Ht$8HxhTHt$H|$ $D$ uD$H$HD$ HDŽ$薲HD$0HD$8PeHxHgH|$pD$ HD$8q#ID$H 5NH$Lt HEHl$0HL0HCH\$ Ll HDŽ$tH$dH3%(D$ udHĨ[]A\A]A^A_DЃAHt6PЅSHt$D$ "D$ 8PJHH|$ H H9H|$8HH|$ H$HDŽ$tHHH$HxHgt Ht$6NH|$pHD$8q!HHSH\$ HLl HAWAVIAUATIUSHH|$xdH%(H$16HHD$τsPHHH6HHD$pHxHAx4HH6HHmHHD$PτH{H|$xHD$prHDŽ$h@rHD$x+H$~H$HD$xqH MH MH$hHD$pH@HTpHDŽ$htcH$xdH3 %(uyHĀ[]A\H\$x4HH%5HHj1fDHD$pH|$pHxw GHIHHD$PτH{HLH|$p]HHHujHH\$HRx4HH$HHHH1HHHHHHHIHHpHHHH\HfDATUHSHdH%(H$x1Hz(lH6H|$p0BH\$Ht$p1HN6HHD$τNHHH6HHD$pHxHA:x4HH6HH}HHD$Pτ,H{H|$xHD$prHDŽ$h@rHD$x;H$H$HD$xqHMHMH$hHD$pH@HTpHDŽ$htsH$xdH3 %(uyHĀ[]A\H\$Ex4HH)@5HHz1fDHD$pH|$pHxw W HIHHD$PτH{HLH|$pmHHHujHH\$HR>x4HH4HHHH1HHHHH"HHIHHpHHHHlHfDAUATIUSH HH6H$dH%(H$1H\$H$1HH{`HLHD$PЄLZHHDžHDž6HHH=?TQ=Tp9LHd6HgH$HxfHevx4HkHc6HqH)H{`HD$PЄHH$HDŽ$XlHDŽ$lHDŽ$H$1H$HDŽ$q8HMHMH$H$H@HHDŽ$t H$dH3 %(HĘ[]A\A]<FIQHƿp9<H,TP؄Hp9`dS]fDH$H$Hxw w$HIH{`HD$PЄHHLtH$HHHBHH\$HRzx4HHHrHHg7HZIuHHVjH"M1HIHHLYHHHHbHX<HIXHHIHHH fff.ATUHSHdH%(H$x1Hz(dH6H|$p0H\$Ht$p1H6HHD$τ8=T=`T9HH>6HHD$pHxHx4HH7HHHHD$PτUH{H|$xHD$prHDŽ$h@rHD$xdH$H$HD$xqHBMHCMH$hHD$pH@HTpHDŽ$htBfH\$x4H4H&p5H H1H$xdH3 %(HĀ[]A\D =kMHƿ9T =HTՄ_H9`d+fDHD$pH|$pHxw 'HU!HHHH\$HRx4HH.HHHH1HIHHD$Pτ`H{LH|$pHHjHHHqHHHHTHHH밿 =HIHHI$nfffff.AUATIUSH HH6H$dH%(H$1EH\$H$1H^H{`5<6HHD$PЄHh=!TS=ʧT8HHN<6HQH$HxPHgx4HUHM77H[HH{`HD$PЄHH$HDŽ$XlHDŽ$lHDŽ$H$H$HDŽ$q"HMHMH$H$H@HHDŽ$tH$dH3 %(HĘ[]A\A]D<.MHƿ8<HTPلH8Ьd;[fDH$H$Hxw urHIH{`HD$PЄHHL\H$HHH*HH\$HRx4HHHZHHO7HBI4$HHVRH 51HIHHLYHHHHJH@<HI@HHIHHH @AUATIUSH HH6H$dH%(H$1H\$H$1HH{`b6HHD$PЄH=TS=9T08HHb6HH$HxHgx4HHM7HHH{`HD$PЄaH9H$HDŽ$XlHDŽ$lHDŽ$8H$H$HDŽ$qHMHMH$H$H@HHDŽ$tgH$dH3 %(HĘ[]A\A]D<!KHƿ08t<HDTPڄoH08@d[fDH$H$Hxw 1u/HIH{`HD$PЄHHLH$?HHHHH\$HRx4HHHHH7HI4$HHVHz1HIH0HLYHHHGrHH<HIHHI HHH @AUATIUSH HH6H$dH%(H$1%H\$H$1H>H{`6HHD$PЄH@h=TS=Tp7HH.6H1H$Hx0Hgx4H5H-d7H;HH{`HD$PЄHH$HDŽ$XlHDŽ$lHDŽ$H$H$HDŽ$qHMHMH$H$H@HHDŽ$tH$dH3 %(HĘ[]A\A]D<QHHƿp7<HTPۄHp7dDH$H$Hxw uRHIH{`HD$PЄjHHLTHf.STHHH[0Ht@SHH`H[ǁTH=f.STHHH[HP@SHHPH[VTHPf.S5THHPH[PH@SHHH['TH]f.SĀTHH9H[HP$@SHHPH[鷿tTHPf.SSTHHPH[pH@SHHH[GTH}f.STHHYH[H(dH%(HD$1HD$0HD$$9@&3fހ跴@&3fހ螴B&3fހ腴A&3fހlA&3fހSB4fހ:f.H(dH%(HD$1HD$0HD$$9E&3fހ@E&3fހγ@G&3fހ赳F&3fހ蜳@F&3fހ胳G4fހjf.H(dH%(HD$1HD$0HD$$ :J&3fހJ&3fހL&3fހK&3fހ̲K&3fހ賲L4fހ蚲f.H(dH%(HD$1HD$0HD$$H:@O&3fހGN&3fހ.P&3fހ@P&3fހO&3fހ@Q4fހʱf.H(dH%(HD$1HD$0HD$$p:T&3fހwS&3fހ^U&3fހEU&3fހ,T&3fހV4fހf.H(dH%(HD$1HD$0HD$$:X&3fހ觰@X&3fހ莰@Z&3fހuY&3fހ\@Y&3fހCZ4fހ*f.H(dH%(HD$1HD$0HD$$:@b&3fހׯa&3fހ辯c&3fހ襯@c&3fހ茯b&3fހs@d4fހZf.H(dH%(HD$1HD$0HD$$:k&3fހk&3fހm&3fހծl&3fހ輮l&3fހ裮m4fހ芮f.H(dH%(HD$1HD$0HD$$;t&3fހ7t&3fހv&3fހu&3fހu&3fހӭv4fހ躭f.H(dH%(HD$1HD$0HD$$8;}&3fހg@}&3fހN@&3fހ5~&3fހ@~&3fހ4fހf.H(dH%(HD$1HD$0HD$$`;]&3fހ藬]&3fހ~_&3fހe^&3fހL^&3fހ3_4fހf.H(dH%(HD$1HD$0HD$$;f&3fހǫ@f&3fހ讫@h&3fހ蕫g&3fހ|@g&3fހch4fހJf.H(dH%(HD$1HD$0HD$$;p&3fހo&3fހުq&3fހŪq&3fހ謪p&3fހ蓪r4fހzf.H(dH%(HD$1HD$0HD$$;y&3fހ'x&3fހz&3fހz&3fހܩy&3fހé{4fހ誩f.H(dH%(HD$1HD$0HD$$<&3fހW&3fހ>&3fހ%&3fހ &3fހ4fހڨf.SsTHH؄HѩH[SxsTHHڄH衩H[تSIsTHHل蹧HqH[騪SsTHH܄艧HAH[xSrTHH݄YHH[HSrTHHP݄)HH[SrTHHPބH豨H[SRrTHHބɦH聨H[鸩SrTHHP虦HQH[鈩SqTHHiH!H[XSqTHHP9HH[(SqTHH HH[SWqTHHP٥H葧H[ȨS!qTHH詥HaH[阨SqTHHۄyH1H[hSHHP݄PHH@H[ׯSHHPބ HئHH[駯SHHPH訦HH[wSHHބHxH谧H[GSHHP萤HHH耧H[SHH`HHPH[SHHP0HH H[鷮SHHH踥HH[釮SHHУH舥HH[WSHH܄蠣HXH萦H['SHH݄pH(H`H[SHHڄ@HH0H[ǭSHHلHȤHH[闭SHHۄH蘤HХH[gSHH؄谢HhH蠥H[7SmTHHPyH1HiH[SmTHHIHH9H[ЬSmTHHPHѣH H[頬SzmTHH؄H衣H٤H[pS:mTHH蹡HqH詤H[@SmTHHބ艡HAHyH[SlTHHلYHHIH[SlTHHڄ)HHH[鰫SylTHHPH豢HH[逫STlTHH݄ɠH聢H蹣H[PS%lTHHP݄虠HQH艣H[ SkTHHPބiH!HYH[SkTHH܄9HH)H[SkTHH HHH[鐪SgkTHHۄٟH葡HɢH[`HWLGHt3L@HHRHt9J }HRHuI9t 9H fLf.fAWAVAUATIUSIHoHH_HtTDf.HCHtHDC E9HC1HuIu$1E9H|CH[]A\A]A^A_HMuL9t HI8H8HD$覭Ht$HHD$C8Hl$;H$dH3%(uH[]fDHHwF}H|$ 11Ҿ #|H|$ )H}H|$ %{H͆f.ATUHS1HվfHdH%(H$1ˎHHHǾ7H{HH@D HLe y7H賎HEHHH$8HD$7HEHHH$8HD$HEHHH$8HD$H߾"8RH{HH@D +LLe0P"8H#HE(HHH$)8HD$觪H߾58H{HH@D LLe458HˍH߾>8辁H{HH@D uZLH8>8H蓍HHH$C8Hl$H$dH3%(uHİ[]A\|"{H|$11ҾyH|$H]H|$11ҾyH|$H|$11ҾyH|$H|$11ҾyH|$H|$xHQUSHHHdH%(H$1HH@(H=d+$1Hߺ@@HH8HǾwxH}H{HH@D uH}zHPH3x=CTtR=@AT3HH=tHH$dH3%(Hĸ[](<ztHƿ3舍(<H:T蓀H30dψ`f.HHH|$11Ҿ wH|$HyxHH|$vH蛂(<{H艂fUSHHHdH%(H$1HH@(H=d+$1Hߺ@pHH8HǾvH{H{HH@D uHxH耈Hcv= BTtR=o?Tp3HHmrH@H$dH3%(Hĸ[] <xtuHƿp3踋 <H8TP~Hp3d`f.HHPH|$11Ҿ +vH|$1Hx"wHH|$#uHˀ <yH蹀fUSHHHdH%(H$1HH@(H=d+$1Hߺ@蠈HH8HǾtHyH{HH@D uHvH谆Ht=4@TtR==TP3HHpHpH$dH3%(Hĸ[]<wteHƿP3<H6T|HP3d/`f.HH蚷H|$11Ҿ [tH|$aH7vRuHH|$SsH~<xH~fUSHHHdH%(H$1HH@(H=Хd+$1Hߺ@ІHH8HǾsHxH{HH@D uH uHHr=\>TtR=;T03HHnH蠄H$dH3%(Hĸ[]<NutUHƿ03<H4TP#{H03d_`f.HHH|$11Ҿ rH|$HgtsHH|$qH+}<1vH}f==TSt=:T4[f`<ftt܀=S=TtI=:T54-`<H4T(zH4ddfX<tt15薆@ń5HA6TPlw5rrX<H"6TPyH5pdK]HH 5KqX<u`<uH{HD=QwH5dzMDHD$HdH3%(u'HP[]A\HH蒰poHÿ<grHOyf.DAWAVAUATIUSHLHHvdH%(H$1JID$H|$HID$ID$(ID$ID$ H$HD$ nH+y2uH}HH@D Ht$ 2p+yHf|$HD$ I\$HPHHT$ OHD$0Lt$8LP@LD$0_P8Ht=8TF=5THt$04HoyP8HrHT$0HLHIHH9$xB 9D$0D$]jHËD$0D$@HxHpC D$8C0D$HC8C(D$PC@D$XCHD$`CPD$hCXD$pC`D$xCh$Cp$Cx$$$$$$$$$$$$$$$$$$$ $$$ $8$($0($9 $@)$:0$H8$P*@$XH$`P$hX$p`$xHǃHHH$hǃxHǃHtQHH fDHHQHuHHHPHuHH$H|$H $LHID$(Hs(LHtH$LHD$ HPHHT$ H$dH3%(H[]A\A]A^A_DH`<^kHƿ44y`<H+T/qH4dkyhH7oH}HH@D uaHt$}v7H{D$芪Hi`<HlH$H$HsHH|$011Ҿ3hH|$09H|$011ҾhH|$0HH cHovH|$0gHrHTugf.DSH1HӾfzHt HH['if=2TSt=0Tuv`5[fDP<it1`5F|pń`5H+Tm`5"hP<Hr+TmoH`5dw*HH `5fP<jHqf.fATUHSHHdH%(H$1HH@(H=Pd$1H@yHHHC(Ht$ HHD$ +yHD$HD$HD$(ɔ7HeHjH}HH@D *1Wl7HzwHD$H[HPHHT$uKfD=i.T5HH[aP8HL+wHT$HBHHD$txHH LwP8HId=0Tu<gtHƿ5z<H)TmH5duMDH$dH3%(uH[]A\ÐHHq@ fH"H|$011Ҿ dH|$0f<hHoHH|$0cH{of.=/TSt=-Tuv5[fDH<ft15Vyń5HA(TP,j52eH<H"(TP}lH5dtnHH 5dH<gHnf.fATUHSHHdH%(H$1HH@(H=`d$1H@vHHHC(Ht$ HHD$ +yHD$HD$HD$(ّ7HbHgH}HH@D *1gi7HtHD$H[HPHHT$uKfD=x+T05HHk^P8HL;tHT$HBHHD$txHH \tP8HIa=-Tux<dtHƿ05wx<H&TPjH05pdrMDH$dH3%(uH[]A\ÐHHq脤cH"H|$011Ҿ aH|$0cx<eHlHH|$0`Hlf.=,TSt=*Tuv4[fD@<ct14fvń4H$T1Ht$*wIDHC@fD1Ht$PvI4@AD$AD$ AD$AD$AD$AD$A$AD$@AD$AD$ AD$AD$AD$AD$A$AD$@1H޿@vIvfD1H޿ vIVfDFfD1ҿuI)f1Ht$PuI@1ҿuI /wW ODGffffff.w(G8W,O0O@DG4DOHÐwWO wfff.f.@AVAUATUISHHHĀdH%(HD$x1HHFPHH|$ Lt$8LD$XHD$(HD$0ILt$ LL$`HD$hHH<$trHT$(Ht$ HD$hHHL)HL,uL9tRHHHƃt) HL)H|$8HT$`T$XtHHkLc"fIHD$L,$L+HCHD$HCH|$xdH3<%(Hu H[]A\A]A^{-ff.H9rr)USHHHHH:H'H+H)kH[]1f.ATUISHJHHRHHH9rJHHH;HDHHC'Ht,HKHH<HL)'Hk1[]A\fDHH;)HHCHCffff.SMHIH1H[SHH H $LD$HI1ADedH%(HD$1H|$dH3<%(u H H[,fffff.USHADeHHHHHLL$ HHD$ dH%(HD$81HD$(HD$0H$HtfHt1HD$ HHEHHHL$8dH3 %(uUHH[]fDH|$ f(;Ht&HEfH|$ 6(HH3+AWAVAUATUSHL$H HH{D$@fc|$fELcELc{LIEM9Y @K?MHDL9IvLD$HL$H}H?HHcUHL$LD$HED{H<LHLD$HL$LD$HEHL$BDEII)DMwALc{HcUM4EDt$M9jDK?MHDL9IvH}HHL$tHHL$tjHcUHED{H<LLHL$HEHL$B0SD$҉E@ L)cJ!+1A1HH$dH3<%( HĨ[]A\A]A^A_E1HCL@IH I9HINHAHcuHcSL 1EL9fHHHDL9HvH}HL\$LL$0HL$(LD$ HD$ HL\$HT$HcuLD$ HL$(LL$0HESH<0HLLL$(LD$ L\$HL$PLL$(HELD$ L\$HL$BDMIIHII)IH)IH fuCfHCHD$$MDLkHCE1HD$HD$H\$ L|$(Dt$MMLHLH"HI9IMFHHT$DLLAHHt HEH\Hu%fHO H tH;HuHdEt[]A\f.[H]A\D@AWAVIAUATIUSL$IH(HcGH?L$ HHpHD$ HIcnIHM9LLt$EHHI9vs<&uLH)DDsA#;OHHcHtXHH)HHHE&HI9wLt$I9H)tׅtHcɀ|;eD$ uLt$L)IIH)AnHcH9l$(LH([]A\A]A^A_t{xH{ Hc1HH9DHE1Df0<67$xAa {m{p E&HHf.AlAgE>{tHHYfDGDHH9tqEPD DDEVDGDDDGDDH{@EpHc|HT$ t#IcNIqAv@,IcFI @H[]A\A]A^A_f.AWAVIAUATAUSLHAHLHEHD$PH<$L|$XLHHD$HH9E1D9~I9Er\@tkuAML9vCH<$D?XB8HcH9D$uAVAML9w@H1[]A\A]A^A_AVAAFAFzDMIHAw~I9rtCuAML9vH<$DWxcAWHxAủAFAfDAFAAVAVH[]A\A]A^A_@H[]A\A]A^A_@MqfH<$HD[L]A\A]A^A_1Yfffff.AWAVAUATMUSHH8dH%(HD$(1HHT$бHHDHL1H|$H_ H<$Pt,uWH<$2A |${fDH<$A|$TAF1HL$(dH3 %(H8[]A\A]A^A_fDuAD$1MbDCEI> HCHHAFHcHITDCEubZHSt$LHD$I6pDD$,LHT_AX RIcFIT$HS1AFHD$HT$$DLXHHCIL|$I>LIcFItHIcvIt$LLHHD$pDD$,LHZYgAVt$$DAVDCWHPHIHƒt )AF IcFI>ItaHIcvID1LHVLSyG1@H<$twA|${A~DD|$HEڅHD$D|$H$AD$AD$eA D$ EL$1HKLD$UD$ IcFIT$HSHCt AA)EF 1f.HL1HH\$H$fDIHc11\DHc0HL$HL$HIHx%AWAVIAUATAUSHIAHLH(EHD$`H|$HT$L $HL|$hHHD$HH9H$D9_L|$L+<$L9v]t$tgtRH([]A\A]A^A_fDA6AF +4$xHcI9|H|$D@VuML9w1A6f.A6AF AF AF @MI@H9sBtztMJA>AW@:H|$DU#ML9wH<$1A>AF AF AF @A>AF H<$T$H|$H([L]AA\A]A^A_Wffff.AWAVIAUATIUSбIMHHHHt$HHDMeMTI>bMqIm Ll$M@HHD$D$ t@D$ A^UA D$ CH/E%|$ I.Lt$8Lt$Ll$(L|$ H|$0AfLWHIxvEt$(AvDDD$MNHHLZYuEHD$0D)IHAL|$ 0qHfDL|$ Lt$8fDHD$IMwIGHHL[]A\A]A^A_fuAFD$ AD$ AF )ËUHcH;EH;E+uLRjDD$ EAUHD$LI6pDD$L$0LH^_.fDIIGIG @HD$LDD$ SRUDD$ DDD$ T$ HLTLD)HHAKL|$ MDHD$D$ t@D$ AFD$ AHD$D$ t@D$ A^D$ AWL@ENEfDHD$DT$ I6LSkf1LTHXDD$ 1fff.AVAUбATULSHIMHL!HHDHHDE1MI<$t7HcsHLt$Pt$PHLL$PHWY^H[]A\A]A^fDLD$H $HI$H $LD$uEtHL1릐Hc3H $LL$ZH $HIHtALD$Hfffff.HHHvh`LejAQMIHHH(fAWAVAUATUSH8HH|$Ht$(HT$ *L:M>HD$ HchLI90MgMHD$MfDAD$L>w}HHLcHEthM|$M9t+LHL$D$L)HT$pLAՅLc$HL$HLL$HHT$pH@AՅL$xsM)MML|$IH9hLd$MHL)II9tHT$pLAՅx3HD$L H@H@HD$H8[]A\A]A^A_HD$HT$(H|$ HHPHxŋBuE1@HHHvhMejAQMIHH'H(fHHHvh_ehdeAQMIHHH(ffffff.HHt/H>HtHcvLHfDFu 1DL¾HÐHAVAUATUSHHIu*u~H?HC1[]A\A]A^DxDEHc9 HItYLcLHLH;C4sL#k1[]A\A]A^fH@fDƐATUбSHHAHHDHc0 HHtHtDHHuH[]A\H1f.fATUISLMtVHcjHHM*M9sBL8@ti@tLID)Յt%)ZHcLI9sAIIABI9uHLt$(fXLZ[]A\ÐxyHL9t8@uxxHL9uHheAQMIȹgHHtHH)L|$IELHAAHLL1&-LcM9!HULLAՅI EtMt AD$L9L}HHEL9@HAA:pL9pAAIAAtsIIM)I~HULLAՅbLeMfD~sHH9fS~QHH9uCfDL9IqLeL)IHULAՅH}dH3<%(LHe[A\A]A^A_]fHpLLIA8H1^_j1fMEtOtOAL$ugAT$ A04LDH}Iٹ  15L}A uA4Le11E1L}  PSHHHt$H6HtPHE1HH?ÐL¾HHH?fDHATIUHSHtNH2HtFRI$LLD$ A(Hx#HHCHHC[]A\LcHkHH[]A\fHHHHHHcWHH<v'HOH9stPuxxKHH)Hw\H9tLHHH?H9rfHHH H9uH1HÀxxHH9uH1 " fHHHLt}MtxHcOHviA8ITLt D@8u;HH9uI<1H9v HHH H9uH1Hs"HLYfff.AWAVIAUATUSHHH8dH%(HD$(1HHHD$t\LciEtSHIMHt p Ht$Hu#A$tSHL$I9L$c HLsHkHL$(dH3 %(HhH8[]A\A]A^A_AT$cHt$I9t$I;t$AT$fDLM}MI9LD2LHI9@quD)H}HtLe]1H\$dH3%(u^H []A\LD$IIHp>HLLI9Vl1뙸fDAWAVAUATL$ USHH8L9H|$H4$|HIH]IIE1HD$HHQHc1HD$Aȃ <]w$@LL)HL_JH8[]A\A]A^A_ÃwΉ$ոuHD$HHtLcHEtI9Hv- 5kHHH@ HRI9tLLpE1K<HLILHIH9AH@ITv9D} A8HfDD8 A8HHH9u:LLILIAH@IHL0M|$IM9$f.IM9S@vbLLT$,L)HHL$ HHL$ T$,=M|$teV%AKHL4PM8HI9 H|$IHD$f.H|$$HH4$L}IH>FH]M9v.Hһt$HLA0jHHH1AXZ[f.HһtHA0Ljv1f.@ATUSHPdH%(HD$H1ALcT$pwAwEIH~,Mu'1H\$HdH3%(HP[]A\MI;t IIH$Ld$1IcLHJHl$H\$L)H9HD$ wCHFHHt:HM1LЅu9HL$Ht$HT$(H)H H)H9u@T@1҉Bf1҉7H$0uIY8V"fUSE1HLHjHHY_u@1҅uHtE1Ҁ;€;EHHH!H []fHHfDfUSHHLD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1HkH3HSH~\H$H{IIHHD$HD$ H$ D$0HD$HH9~4HxGHSHCHD$dH3%(H[]DHCD(HHkDHHKHDHOHks+uqtyuzHKHCy@HyHH<HtHqHHH)H)r1ɉσL:9L>r렋{y‹@DHK늉BfDHKs'1ffff.1ffff.SHHH0dH %(HL$(1HH$HD$HT$t:HHHT$ eP uHT$HH|$(dH3<%(u H0[@HD$H eP uDHHdH4%(Ht$1Ht4H?uE1HP(Ht$dH34%(u"HH7HH4$@H$0uHfffff.AWAVIAUATIUSEHHxH$HD$H$HD$dH%(HD$h1HjHH|$`t]HHtUHT$`HH)HH?H1H)H9~8Htfk1HL$hdH3 %(Hx[]A\A]A^A_DA.EAGhAu9A9qHD$THD$ HD$IcDt$(Dl$HtHHNAAEtHHHuH9r/LDHL9s@HHʀVL9u@>Hf.AWAVAUATIUSHHLdH%(HD$81Ht$ HL$(AG,"AG(X;HcID$HE1}LcQE1LT$ I:AÃD$EMt2D޺LHL$LT$D\$`'D\$LT$HL$u~EtH|$(uXH@A9$~oAG(9I$~A9_,~HmHcAALT$0HD$ HD$0cHq(HyIHL$(3tEt D$D1Ht$8dH34%(uHH[]A\A]A^A_f.AWAVIAUATIUSLHxL2dH%(HD$h1HH|$MHD$HHD$HD$HcXLD+fAAfAHKHD$(HHH9HT$\LHGsHI6HtyHsHH|$A$;G(H|$;G,f;H9H|$K/HFHA7L)@CHH]DHCHx H9HH#D$ HT$(HffEHCHIjLHPjLH|$0sHD$@H "HKHHIH)HxHHKE1HT$(ffDCE1~|$\HH#D$ HT$(HH|$hdH3<%(Hx[]A\A]A^A_D1HH#D$ DDkHKHD$(DfDA$D9Ld$0IEAIcHHL$D AHcAHT$`LHD$`HAI9DILGLH|$HP(HD$ LCIH)MxI)LCHT$(DkHD$0AAAfDkD9SLd$0Lf3KfDMuSHt$IcH|D9tH|$D9g(}1W,A9})9}% HHT$(f;H#D$ l@I9LHT$\HGLi|$\II#MbLCM5IcHHHT$zHT$8D|$@H|$0D|$@WD9KE1E9D}yHL$8|$\Q 94D AFHDHHD$,@p H9 DAH@D9|EA9&HD$8fKDHHcQL@HD$ .fDMLxL9H)HKHH#D$ H|$(HHHD$DL$0HT$(Hc0HT$(IDL$0H1MD)ET$Af.HsLIH)HxH)HsHD$(DIH) DA?H9HHFHdAHIHHD$(Hsf|@A?L9LHFHIcDHHHT$AHT$8*z|$@H|$0DHL$8DDD AfCDHD$E1LD$HHcHLXD$DL9Av=DJ HHHLڋ2AAE9LHL9wfDHD$t$@9p(HD$t$@9p,HCA7K/H|$H9HF@HL)=HHLCLIH)MxI)LCHD$(CDd$@DhAnfD9t$DtBI9H @D;b'HcBHcJ LD$HHHHHH9H;L$@DL$@1fDA9HNHH9rHD9~HHcND IHHL$fCD PAHL$8DDAfC) HT$(fHt$0zD|$@D9H|$D9g(`W,A9TA9Kff|$\'2HD$8x AWAVIAUATIUSIHhL$DD$LL$1E11^@IHtoHLPHjE1D@ LH|$0AR0HT$0Ht$8HL$@AYHAZJHAH@E9~NHIHcPuLfDDXEuIEM}MeHhL[]A\A]A^A_1HL$H\$HDD$(T$ IH_AXtHL4(A1ۅLt$Ll$ML$IH\$TfDIHt4HLVNAVDF IH|$PLAR0HT$PXYHH)AWIA9~:LHIHcVuLfDIUIuIMMLt$Ll$HMuIEIEfLl$HD$HIEHD$PIUIEAWAVAUATIUSLLHxdH4%(Ht$h1H|$ I$HI$HL$(Ht$0H|$|L:MHD$LcPO4AFAAfIvI~HD$Ht$H|$8fuiIcHI$HcPLHT$`HT$`LPIIHH8H|$ LAR8HH)HT$AAfEfEnH|$HL$`HH.HHHu4HT$Ht$hdH34%(Hx[]A\A]A^A_D$`wlHL$AHH)fHT$fALuUAfEHT$oID$HD$(uHT$(H߉L$LHL$@fA>HL$@F}$@HD$HT$Hc0iHT$IH1MfAfu#HH)HL$fA>fDAfE$E9yHD$0IcIIBtDFD9AOA9rDl$@Dl$\MD$XHL$PMIt$LHJT 8~,MHL$PDl$\E;$IcHt$0HD>H|$D9G(/H|$9G,!AHH)HL$@AfDIDA$9}5H\$0HcH|9t!H\$;s(S,99HT$fA1L>fA>DIE1fEfDHD$D;h(aD*f1NfHt$8ljD$P`!HL$@T$P8AfE$ f.D$@I@|$@;|$X#W@MHL$PDl$\JDl$@D9l$XfA6fEn'DHT$"IFfAEHL$PMffff.AWAVDAUATUSIHxHH|$(HT$L$DDD$9AH@D9H1H#D$AHcHHD$ H|$1DH. HD$ HD$@HcC HD$PH|$ķ@1f@҅LK {$OH|$ HxHxHD$ HHHD$tLD$ H|$1HDLD$ uH|$p1HHD$L$HD$pC(DHMcIE;f.M,H|$pL\$(DL$ cDL$ L\$(IW(IwLLD$HL\$(DL$ HD$DL$ L\$(AI@E9~;C(A9I~D9K,~N<AIcGXLLl$0HD$0JtH|$pttHt$HOIH|$ ~Hc3HL$HL$HIHH|$ ˵1qʸH|$HT$諵HD$HT$Nfff.AWAVAUATIUSIHXLdH%(HD$H1HH|$wAw,MD$x(11LL1@LD$AO 119LH:uR1LpHA9o IGHcHI$HcPuLHT$0HT$0H@0HtH11@Hct$L u41LLL;D$u1LLL9D$4@HD$HL`LhHL$HdH3 %(HD$pHX[]A\A]A^A_@Aw(1HD$wHcMLH9HE0HtHH $1ЃH $t:HEHU(H|$0MH HPPHD$0HT$8HHD$HD$@HAw(HxJAG,9}K9I$~A;W,|HHHEYHcEHL$(LHD$(TA$9|D$HD$HL$H@HH@fDUaHHHGHpHL$H\$HQHHAw趵fDHSIHtD~t6Hһt$HLA jHHH1AXZ[@1ۉ[fHһtHA Ljv1f.@HƀSHOA< HΉЃ)HWSHHH)H=VQ@RHLOH1RIHcbSH(HH=HGHcH9| H)wH)HGAUATAUSHHdH%(HD$81SHOHGHcHII)I9}r1H &DHS E)HDD H|$8dH3<%(HH[]A\A]f.HwrH7HSHHHSw1Et)1HvjHFFȹ)fD!c@HHH7H7HǃHH)HKnDNȹ)DHnfDfDHvjAHDHHT$H$HCHD$HCHD$HC HD$ HC(HD$(At$H$H N FFȹ )bfATUISHxft*@t.?HCHwQHA$H[]A\D[]A\HsH?HHH HHI[]A\fHATIUSHt ΃u:@L HSSCtNʉLxTt=)~-HSHS HZ [1]A\fڃ~Hې[]A\fDkxH4fxH=HHfDHXSHHdH%(HD$1u:HHHHHNHL$dH3 %(uCH[@Ht$HD$HxT$HHEHfUSHHm@u HH[]Ã?HHHHcH H%u(HtHHHfHBwfD1fDAWAVAUATAUSHHHGHHOMcH7J(H9AHUD)D߃Hc!HHHHH @">)؈^ lj@>FFH1[]A\A]A^A_@HOHHHHMcH7HGH)J(HOH9H7=L}HU@L)LLcLU8HEHt HUUL}HEITLuHL@">1)ڈ^ @>H[]A\A]A^A_fD@">D1) @>H[]A\A]A^A_É޺H.AT$H1@">)؈^ lj@>FH1[]A\A]A^A_øgfff.?fATUS~\~DAQHuH?vMHHHG؉@LuHH[.tH[ÐuH[H@SHw&Ht4[KH9[f.@9HQHqAfHHdH4%(Ht$1Htu/AHAAtIc|/Ht~ twMcIL9sl9ȉt 1HHL9 9ȉuu1@fDu,Nw$HHDJf.DȃfDFAa@DFHE~IcȀ|/A7f.:DuAWAVIAUATUSH8dH%(HD$(1f>Ll$pLt$x~/1H|$(dH3<%(5H8[]A\A]A^A_HFIH1H$H<$HL$$LLLL$LD$HIuHLD$LL$*D$$\MDHLL\$LL$LD$L\$0LD$LL$@MLL$LL\$LLD$LAՅL\$LD$LL$LfA?HfA1ffA?M9LL$LL\$LLD$LAHILD$LT$LL$tIHuTM9uOHPfA?u!L$11LAHL$u+@HMM)LBffA?tٺ1fAJDufA?uMM)LfAMM)譥` ` 4@HH9sIHwMHu!7Hw%HHtHH9u߸f1ffff.HH~NOw@HDu"ut,HH1fHHHu1P@ Y` PSL@H yHS1[ffffff.AWAVMAUATE1USE11HxH<$Ht$HT$HL$dH%(HD$h1LfH,I9sN$LLHIJ It1L5u%D$,tYHHT$,LHIyLĠ1H|$hdH3<%(Hx[]A\A]A^A_f.Ld$01HT$HSTLMHHD$Hl$@Ll$0HL$HH<$PH-RTHHuHHt$@H+t$8Hw$LLtM1O@L17LHHH!HH˟HHH!H辢fffff.AUATIUSH(HL$dH%(HD$1yvH~~Ld$H@HL}HHx5LLuIH)uH|$D$ )D$ H|$HL$dH3 %(uH([]A\A]øf.HgHfH1IdH%(H$11HH$ HD$Hpe&H$dH3 %(uHĸ|f.fAWL<AVAUATIUSHH(L9?HMHt$f A$ I-LKM9KL fDI-HCI9KHfDI-tHCI9DKHfDI-uHCI9KHf.I>tHcɃ<@ tHCI9ZKHԐIHc<@ t/k!HLKL)H^M9vAKL0DIA"A>YHL)HVLKM9w1M9LtsIE1M)tkLLLL$1LL$HI9LNL@IA= A>)A<HI9%L9t ttAE}LH+D$H([]A\A]A^A_DI>HL)H;HLHD$LL$HcI9$ DA@I<HCI9KHfD"IHI9D fHcɃ<@ HCI9KHAfIHCI9jKH fDHCI9XKHHL)HHLHD$LL$HcI9BLKMLfDIM)dHCI9KHFIM)tLLL$LLL$HI9IHfDHL)HoHLHD$LL$HcI9XE1AEHCI9nKHRL9HIAM)}LLLL$ LL$H1LHD$LT$HcLL$I9MLmHLHD$LL$HcI9E1AG<DLLL$1LLL$HI9E1M9L˿&1L9H" |rh ^IHt$QE1AE8E1AG<(Af.ATUSHPdH%(HD$H1HL'MtGՍP wrH|$0PHLH<$H|$2T$Hc A<$5w3D$02D$10HHDHL$HdH3 %(u0HP[]A\D$01D$19@H蟚ffffff.AWAVIAUATIUSII1H迭11LHHtH[]A\A]A^A_;tMt荦jGIhhL1M@LLAXZfAWAVAUATAUSIHHHxdH%(HD$h1AL$LL$DD$Ht$0HI:HDD$LL$11LL$DD$"HIHDHAVLL$LDD$H|$ L1ҿ@PHD$ HHD$(HCHD$0Y^HCfHAVřXZHL$hdH3 %(Hu+Hx[]A\A]A^A_ÐA?PHLcHkAUATMUSHHHxdH%(HD$h1HH>իHHI HHAD$ PD$PD$ PD$,PD$8PD$DH|$pDl1薮PH0wsHcLH|$@HL$hdH3 %(uNHx[]A\A]A}kL fL藗0hfffff.S HHt*P~&H;BHc҉CHw“H[D1[ù$h軓f.USHHHHEu:tfHHuHH}Ut u;EHH[]f.H(HHEH[]@HH[]fEHUSHHH]tH1H[]HHuHH}UtރuEH[]DH[]fAWAVIAUATMUSHHH(L*dH%(HD$1MH1HjHMLHD$ Pj蹲H HHukL|$I)M9|FIcE}I9AE1HL$dH3 %(H([]A\A]A^A_@H1H!HHDL$ H$HIH$DL$ tH-I臥HIEt6I4.LH/IEHB8HHT$H!=@AE1(袔fAWAVIAUATMUSHHLHHcu1Lt$HAV/IIXZtTMtgH}HtfHcuLAԅx8HcUIDHCHCHHH[]A\A]A^A_f.HL{HkH}uHcUtn@offffff.Ht'Ht"USHHH>Ht莐t H[]fHH[]rfAUATIUSLHMHxdH%(HD$h1HL$ HH Hl$@HD$ HHD$(HD$0LHD$HLd$PD$XD$\heheL$HT$PHt$0IHՃY^rOuD$\tc1HHL!H H|$hdH3<%(Hx[]A\A]fDT$Xu1HT$Ht$HH|$@Aԃt1fD1@HH^HHοLD$H$ڠH$HLD$Hf.@yy@fDfDIIMtHHH@uH9v9HVAHAȀDLL9sHHHH@rL9uH@HSIHtD1H>v.Hһt$HLAjHHH1AXZ[HһtHALjv1f.@AWAVIAUATIUSLHHHL*LdH%(HD$81MH1HjILLHD$ PjbH HHD$H)H9IMD$(Ld$ t AF Ht$H|$ H$蒗H$HD$IEHT$HH!HL$8dH3 %(HH[]A\A]A^A_H1H!HHDL$ H$HH$IDL$ H1M~@H1H!HbHt$H|$ H$荗H$f.AWAVIAUATIUSHH8dH%(HD$(1HLt$pHHML @ A04LD1  HHcHEHv;HL{LcHL$(dH3 %(HufH8[]A\A]A^A_f.LHHAՅxH+HCHCA4lDHHsHGfffff.HH ȅ8r H鸈ATUISHH@M$dH%(HD$81HD$0HT$`H\$/LPEIII9uH$D$HH\$RH|$ H腏HD$0ZYH|$t>HT$HD$ HL$8dH3 %(HEHHUHT$HUu3H@[]A\H9uL븹@"腇USHLH8dH%(HD$(1HHtxHLt`@ A04LD1 HPwOHcHHHL$(dH3 %(uJH8[]fDA4L¾뿹8@賆fffff.AWAVAUATIUSHHXL"LHl$0dH%(HD$H1MHl$ HT$ HLHD$0HD$8}IIׅu9MHt$(Ht AF uZHD$(I$ E1H2HHLL!H Ht$HdH34%(u~HX[]A\A]A^A_E1fDLL$LD$HL$H$螗H$IHL$LD$LL$H1M 3蜈fff.AWAVAUATUSHHHXL9LLl$0dH%(HD$H1MLl$(HL$(HHHD$0HD$8HIąu,MLLt AF 腑HEغLHHHL!H Ht$HdH34%(ufHX[]A\A]A^A_þLD$HL$HT$RHL$HIHT$LD$H%1ÑYT@AVAUATUISHHH0dH%(HD$(1HHHIMH1H$HHD$t @ )t0HLcHkHL$(dH3 %(Hu}H0[]A\A]A^ÐH|$MHLL誑HwHHD$HHD$HCHD$ HCHHsHG蛚]-I)IDE1I9GiT$ AAADIA 0T$$I9AA 0 Mq PM9։D$$t@AQ B11AHHIgHHAD$ PD$PD$ PD$,PD$8PD$DH|$pDl1PH0wnHcLH|$@H|$hdH3<%(uIHx[]A\A]f.A}hL 뼐L~ "8N{fffff.USHHdH%(HD$1HD$HT$H7It$~dt`9 $~-)E1AgffffDAA)A9u9~1)f. 9u LDLH\$dH3%(uH[]11}AWAVIAUATUSHXdH%(HD$H1HIӉDD$ HI:DD$ M~(ED$ t_MtZIH|$L|$8HD$IFD)|$HD$IFHD$ IFHD$(IF HD$0IF0HD$@H|$8Lt$AHAVALPAFDlPAFPAF PAFP19H0AI}M]MMAE.M,gfff؃)ڃuAOMuHgfffffffADH0LHI?IqNHL)I9IM|E~wIHcHI I~|$ t{ZGAMAI<$HtxM,$Et$LH|$HdH3<%(`HX[]A\A]A^A_@IA 0t1.@LAE)|$ uLHW)QΠEHHLH?D)AAH HH|jYHH)HiɀQI)LLHLH?H IHI)IiH)HH?H1H)HH1HH?HH)HR,ZYLw1(1HILMw1fDA1.z_8vDAWAVMAUATIUSHHHL$DD$ dH%(HD$x1%HL$@HT$Ht$AHL$IwHL$T$Ht$@1AHIHHMAWDD$HL$H|$0UdI}HsI9HIFHv`A~yHFIIHHIHHsUII))@|$HHHLHEHHLHHfDAVAUIATUISHMH HdH%(HD$1HH1MjHLLHD$ Pj[rH I|H|$I)I9|?1HHD u 0HH9 uHHL!H1L!HH\$dH3%(uNH []A\A]A^LDL$ H$pcH$HDL$ H1H۸Tf.AWAVIAUATIUSH1ɾH LML|$XdH%(HD$1AWwHHZYtcMt"ALH|$؈D$AԅxLHHCHCH+HL$dH3 %(Hu3H[]A\A]A^A_HLkLsHLkLsSf.HhfAQMIȹHHtHt HTP@fffff.SHHHtSL覞t2uH1[f.1H[LD$H $mcH $H1HLD$H{fff.HSHt71LDž@HHHCHC[@HHHwHG[USHHHt:v.Hһt$HLA`jHHH1AXZ[HһtHA`Ljv1fffff.HSIHtD1H>v.Hһt$HLA`j6HHH1AXZ[HһtHA`Lj*v1fffff.HSIHtD1H>v.Hһt$HLA`jOHHH1AXZ[f.HһtHA`LjCv1fffff.HSIHtD1H> v.Hһt$HLA`jhHHH1AXZ[f.HһtHA`Lj\v1f.@AWAVAUATMUSHHHBHH<$Ht$L$DD$E1E1E1HJ8Ht=HHE1jE1DE HH|$0P0HT$0Ht$8HL$@A[HXIAID9sHM$DD$,LT$ H|$rHIAYAZJ MHD$DCE1L$E~SHJHt8HHE1AWMDE HH|$0P0HT$0Ht$8HL$@XH_t?IAD$I9CL9t$t_IH$HL$L0HHHXf.H$HHpHHH$HH[]A\A]A^A_H$Ht$L0HpHX1HD$H$Ht$H@H0H@E1DAWAVHAUATIUSLHHHt$@HH|$0L$LDD$ H$D^Ht$PHD$EnLp8A>LO|$ M|$$]EUEt$L1H$HD$Lt$ADHB HcHL$XIщL$H T$xHL$8HD$(HcH|$`IEH $LHHGHCHHG(H@HHG0H=HHG8H:HHG@H7HHGHH4HHGPtH_HHZHH9HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA juHHH1AXZ[f.HһtHA Ljiv1fffff.HSIHtD1H>v1Hһt'HLA hHHH1AXZ[HһtHA Lhv1ff.HSIHtD1H>v1Hһt'HLA hHHH1AXZ[@HһtHA Lhv1ff.HSIHtD1H>v1Hһt'HLA hHHH1AXZ[@HһtHA Lhv1ff.HSIHtTH1LIv1Mһt'HLA hHHH1AXZ[f.HһtHA Lhv1ff.HSIHtD1H>dv1Hһt'HLA hHHH1AXZ[HһtHA Lhv1f.H9HHG HHHHGHHHGHHHG(HHHG0H HHG8H HHG@HHHGHHHHGPtH/HH*HH HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtLLcF1IIv.Hһt$HLAjHHH1AXZ[HһtHALjv1fDHSIHtLLcF1IIv.Hһt$HLAj8HHH1AXZ[HһtHALj,v1fDHSIHtLLcF1IIv.Hһt$HLAjRHHH1AXZ[HһtHALjFv1fDHHHHGH~HHGHHHG(HHHG0H}HHG8HzHHG@HwHHGHHtHHGPt.HHHHHHHDHiHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF 1AD9t.Mһt$HLA0 j#HH1LAXZ[DHһtHA0 Ljv1f.@HSIHtD~t6Hһt$HLA jHHH1AXZ[@1ۉ[fHһtHA Ljv1fffff.HSIHtD~t6Hһt$HLA j8HHH1AXZ[@1ۉ[fHһtHA Lj,v1f.@H)wHHG H wHHHGHvHHGHwHHG(HwHHG0HvHHG8HvHHG@HvHHGHHvHHGPt.HwHHwHHwHHDHvHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLA8!jHHH1AXZ[HһtHA8!Ljv1fffff.HSIHtD1H>v.Hһt$HLA8!j6HHH1AXZ[HһtHA8!Lj*v1fffff.HSIHtD1H>v.Hһt$HLA8!jOHHH1AXZ[HһtHA8!LjCv1f.@USHHoH^H?H6H9HHF=Gu1H9ݺBH[]fATUSH_HnH?H6IH9LFLFuH9t 1L9D[]A\fHJLL;Bw)USHHHHH HH ,HkH1[]fAUATIUSHHHHJHBHH9s,HH<HL+Hk1H[]A\A]fL,H;L1,Ht HLkHK붸AWAVAUATIUSLHH8L2LdH%(HD$(1H<$LMMcd$ME$fA[fAtD1fEHHL!H|$(dH3<%(2H8[]A\A]A^A_DID$1E1HyuH9HHFHH;LH)ڀ{t/H9HHFH;k{aHHHHL,ID$uL fA$5DID$DT$HjIHPjLH|$ LLH IDT$kMD$MLHH)IxIMD$1IfA$fAt$@ET$MD$E1ID$HD$AujMI9LHT$$HGHL\$UUHL\$FHMD$ML,AG t |$$9vfAL$IGI9ALGHHT$H<$HP(I!rIGL$1It$HPID$L$HLL!HID$Hx H9HLL!H@LIt$LL\$HT$yHT$L\$u;ID$MD$HH)MxI)MD$I1E1fAT$HLL!HLHL!HH@ID$HxH9H)ID$HLL!H@Ic4$L\$DL$HT$ D$4wTAHI)HfDfAHHFHD$ Of.HT$ HHL$(|wHL$($!fHc3H$4H$IH1M}AfHI)H˹fA'@Af1H fA61@fA>u @H%AWAVIAUATUSHHHL$hHH|$HDD$fDAE9t/HӅyH([]A\A]A^A_HD$IHًT$Ht$H@HPuAEIA;F`HӅxE1AEt$$HW AE9tHӅySL¾H([]A\A]A^A_fffff.HHAVAUAATUISF1HL~+DHEH4Ht ID$1HPCH9EEHIHcXHHsHtID$1HPHCEt[]A\A]A^[H]A\A]A^ AWAVIAUATIUSHHHLt}Mg MF~:1HEH4HtILLAԅu*CH9EI t1H[]A\A]A^A_@@IGL` Mg fHһtHHLhCvA"1L1AY^fDVIGL` LAWAVMAUATIUSHHHLLdH%(HD$81HL)D$$H|$0tVHHtNHt$0HH)HH?H1H)H9~11H\$8dH3%(HH[]A\A]A^A_MHvHj E@uIMMtZHD$IGIW(MHD$(HL$(HHPHHT$HD$uLHt$(LZu6HD$HD$L9uD$$H1H#D$@Ht$(HtIOD$1HQD$HH#T$H HT$LeLcMx8LeMHtuHT$$LhHID1z@Ldx1II$HtH xfIc0HL$HT$'HL$HIHT$H9fDHATUHStlHItdHcW;W tHJML$1[]A\u, H}AHt6HE] HcUHcH@+뢸ffffff.HtauXG9}Qt7Ht0LHcI HGHIHHt%HGHfDHHcGHHHHteSHH?HtJHSHt5KAɉCu&HSH;HH<ҋSB҉CuH;LHCC [@HHHG HٺHHHGHκHHGHӺHHG(HкHHG0HͺHHG8HʺHHG@HǺHHGHHĺHHGPtHHHHHɺHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.USIHHHHHLcVIL9s(D IAA<^v"fEAA<^wIM9u1H[]MۻtHI)1jCh(#HAQHMH"LHAH H[]MۻtHHLjJH1HA(#vAXZH[]ÐHHHG HٶHHHGHζHHGHӶHHG(HжHHG0HͶHHG8HʶHHG@HǶHHGHHĶHHGPtHHHHHɶHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA#juHHH1AXZ[HһtHA#Ljiv1fffff.HSIHtD1H>v1Hһt'HLA#hHHH1AXZ[HһtHA#Lhv1f.HٲHHG HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPtHϲHHʲHHHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPt.HHHHHHHDHHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF ŀ1AD9t.Mһt$HLA$j#HH1LAXZ[DHһtHA$Ljv1f.@ATUISHH@H)dH%(HD$81HD$(HHD$0tpHL$0LHIąt/HL!H Ht$8dH34%(uH@[]A\fDHt$(HHT$HT$HE@LD$HL$HT$RHL$HHHT$LD$HT1qcAVAUMATUISHHIHHHdH%(HD$1t6HLcHkHT$dH3%(Hu*H[]A\A]A^MHLLHDHyHHHGHnHHGHsHHG(HpHHG0HmHHG8HjHHG@HgHHGHHdHHGPt.HHHHHHHDHYHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF 1AD9t.Mһt$HLA %j#HH1LAXZ[DHһtHA %Ljv1f.@AWAVAUATIUSHMHhdH%(HD$X1H0L6M$BD$HcFLI9HD$L|$LLH)ƒL9A}LՅx.T$1ۅNfD;\$t?LՅyHL$XdH3 %((Hh[]A\A]A^A_@HD$LLH)HՅxL|$@AIIWpAAFAG L;t$pAGt5IEI fLRfHD$H9vtA}Mw~NLՅD$~/E1AD;l$tLՅyHD$LLH)H1fDAWAVAAUATUSHL$PH|$0dH %(H$1HHt$HHT$L$0DD$8gL*M[HD$MHc@IDI9HD$L$PHD$(ID$<HHD$XHD$`HHD$ H$HHD$fDAm|$8AHL$LH+HD$ LH)HHt$@AօxVLAօxBL$<1ۅil$T݋\$<f9ELAօyHD$0H|$HHT$HHxHPH$dH3%(HD$0H[]A\A]A^A_DH;t$AHHcIH@&FJ@&FL;l$HT$8uHT$LH+&HD$ LH)HHAօ3H\$(L;l$rD$8HD$0HH@H@H\$ LH)HHt$(AօH-fl$THD$@HD$(HD$XHt$ HD$( fDHD$0HL$HH|$HHHHxLAօll$PHl$8E1u DAA9LAօy)LAօD$Pl$8IE1ufAA9LAօyH\$`HD$(H\$ GHD$A}D@ AyHT$ ApH1B9uD)HHLH|$ AօPH%HH HHD$(11f.HSIHt\H>tVNt?~ vqMһt$HLA%j9&HHH1AXZ[^ u[DMһtHA%Lj?v1f.fHSIHtDLcF1II1v.Hһt$HLA&jHHH1AXZ[fHһtHA&Ljv1fffff.HSIHtDLcF1II1v.Hһt$HLA&j8HHH1AXZ[fHһtHA&Lj,v1f.@HSIItTF~DF ŀ1AD9t.Mһt$HLAp'j#HH1LAXZ[DHһtHAp'Ljv1fffff.HSIItTF~DF 1AD9t.Mһt$HLAp'jBHH1LAXZ[DHһtHAp'Lj1v1f.@HSIHtD1H>?v.Hһt$HLA(jHHH1AXZ[f.HһtHA(Ljv1fffff.HSIHtD1H>v.Hһt$HLA(j6HHH1AXZ[HһtHA(Lj*v1f.@HHHGHGDHHHGHGDSH1H1Ht$fHCHHCXHZ[fff.HhyfAQMIȹdHHHHRHÐH9t 11DSHHHt 11[øHHLt 9+HþHf.fH7HHG H7HHHGH7HHGH7HHG(H7HHG0H7HHG8H7HHG@H7HHGHH7HHGPt.H7HH7HH7HHDHy7HHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]f.UHAWAVAUATISIHH(L}HdH%(HE1HH2MHHHPLHH1AALRH#HH)LֺL\$LUILL]x HcHLUL]I9HHMLLAօHMx;H HCHCHudH34%(HuCHe[A\A]A^A_]HLkLcHHsHCV,?,p,ffff.HAVAUATUSLL)MHtFMLIuIsxUHZ>HcHAD$IcD$H9X[1]A\A]A^H>xgtAL$tH|BHxOA|$WHcHIcD$H9}HRI$H1HIE1[]A\A]A^HrfD[1]A\A]A^HHDHIIDAWAVAUATIUSHIHHLMtTHHI4$Hx?IcN1IHH9v.L :f.IOINI;2t8IQH9wӐHELmLeHH[]A\A]A^A_fDI)‹SHIMLAFuUI9|[tLǺLD$\ALD$uAVwEDL)dCt+[HcI9}upDL A5HEHEHE(I9LI@uAF1EqD1LLD$@SLD$df.HHHHHuHGHSIHtD1H>v.Hһt$HLAP-jHHH1AXZ[HһtHAP-Ljv1fffff.HSIHtD1H>v.Hһt$HLAP-j6HHH1AXZ[HһtHAP-Lj*v1f.@HHHG HiHHHGH^HHGHcHHG(H`HHG0H]HHG8HZHHG@HWHHGHHTHHGPtHHHzHHYHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H5HHHGH5HHGH5HHG(H5HHG0H 5HHG8H 5HHG@H5HHGHH5HHGPt.H/5HH*5HH%5HHDH4HHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAH.jHHH1AXZ[HһtHAH.Ljv1f.@HɋHHG HHHHGHHHGHHHG(HHHG0HHHG8HHHG@HHHGHHHHGPtHHHHHHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HHHG HHHHGH~HHGHHHG(HHHG0H}HHG8HzHHG@HwHHGHHtHHGPtHHHHHyHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HHHG HiHHHGH^HHGHcHHG(H`HHG0H]HHG8HZHHG@HWHHGHHTHHGPtHHHzHHYHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HiHHG HIHHHGH>HHGHCHHG(H@HHG0H=HHG8H:HHG@H7HHGHH4HHGPtH_HHZHH9HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLA2jHHH1AXZ[HһtHA2Ljv1f.@Hy$HHHGHn$HHGHs$HHG(Hp$HHG0Hm$HHG8Hj$HHG@Hg$HHGHHd$HHGPt.H$HH$HH$HHDHY$HHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAp2jHHH1AXZ[f.HһtHAp2Ljv1f.@H HHHGH HHGH HHG(H HHG0H HHG8H HHG@H HHGHH HHGPt.H HH HH HHDH HHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA83jHHH1AXZ[f.HһtHA83Ljv1f.@HSIHtD1H>?v.Hһt$HLA3jHHH1AXZ[f.HһtHA3Ljv1fffff.HSIHtD1H>v.Hһt$HLA3j6HHH1AXZ[HһtHA3Lj*v1f.@HyxHHHGHnxHHGHsxHHG(HpxHHG0HmxHHG8HjxHHG@HgxHHGHHdxHHGPt.HxHHxHHxHHDHYxHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIItTF~DF ŀ1AD9t.Mһt$HLA`4j#HH1LAXZ[DHһtHA`4Ljv1f.@HSIHtD1H>v.Hһt$HLA4jHHH1AXZ[HһtHA4Ljv1f.@HYrHHG H9rHHHGH.rHHGH3rHHG(H0rHHG0H-rHHG8H*rHHG@H'rHHGHH$rHHGPtHOrHHJrHH)rHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H9oHHG HoHHHGHoHHGHoHHG(HoHHG0H oHHG8H oHHG@HoHHGHHoHHGPtH/oHH*oHH oHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLA6jHHH1AXZ[f.HһtHA6Ljv1fffff.HSIHtD1H>v.Hһt$HLA6j6HHH1AXZ[f.HһtHA6Lj*v1fffff.HSIHtD1H>v.Hһt$HLA6jOHHH1AXZ[HһtHA6LjCv1fffff.HSIHtD1H>v.Hһt$HLA6jhHHH1AXZ[f.HһtHA6Lj\v1f.@HSIItTF~DF 1AD9t.Mһt$HLAh6j#HH1LAXZ[DHһtHAh6Ljv1fffff.HSIItTF~DF 1AD9t.Mһt$HLAh6jBHH1LAXZ[DHһtHAh6Lj1v1fffff.HSIItTF~DF 1AD9t.Mһt$HLAh6jaHH1LAXZ[DHһtHAh6LjPv1f.@HihHHG HIhHHHGH>hHHGHChHHG(H@hHHG0H=hHHG8H:hHHG@H7hHHGHH4hHHGPtH_hHHZhHH9hHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtD1H>v.Hһt$HLAH7jHHH1AXZ[HһtHAH7Ljv1fffff.HSIHtD1H>v.Hһt$HLAH7j6HHH1AXZ[HһtHAH7Lj*v1fffff.HSIHtD1H>v.Hһt$HLAH7jOHHH1AXZ[HһtHAH7LjCv1fffff.HSIHtD1H>v.Hһt$HLAH7jhHHH1AXZ[HһtHAH7Lj\v1fffff.HSIHtD1H>v1Hһt'HLAH7hHHH1AXZ[@HһtHAH7Ljuv1f.@HSIHtD~t6Hһt$HLA7j+HHH1AXZ[@1ۉ[fHһtHA7Ljv1fffff.HSIHtD~t6Hһt$HLA7jEHHH1AXZ[@1ۉ[fHһtHA7Lj9v1fffff.HSIItTF~DF 1AD9t.Mһt$HLA7jdHH1LAXZ[DHһtHA7LjSv1fffff.HSIHtD~t6Hһt$HLA7j~HHH1AXZ[@1ۉ[fHһtHA7Ljrv1fffff.HSIIttLcFI@H=w"HIL9rOHL9t?8yMһt'HLA7hHH1LAXZ[D1ۉ[fHһtHA7Lhv1f.H `HHG H_HHHGH_HHGH_HHG(H_HHG0H_HHG8H_HHG@H_HHGHH_HHGPtH_HH_HH_HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIItTF~DF 1AD9t.Mһt$HLAH8j#HH1LAXZ[DHһtHAH8Ljv1fffff.HSIItTF~DF 1AD9t.Mһt$HLAH8jBHH1LAXZ[DHһtHAH8Lj1v1f.@HSIItTF~DF 1AD9t.Mһt$HLA8j#HH1LAXZ[DHһtHA8Ljv1fffff.HSIItTF~DF 1AD9t.Mһt$HLA8jBHH1LAXZ[DHһtHA8Lj1v1fffff.HSIItTF~DF 1AD9t.Mһt$HLA8jaHH1LAXZ[DHһtHA8LjPv1fffff.HSIItTF~DF 1AD9t1Mһt'HLA8hHH1LAXZ[fHһtHA8Ljov1f.@HYHHG HiYHHHGH^YHHGHcYHHG(H`YHHG0H]YHHG8HZYHHG@HWYHHGHHTYHHGPtHYHHzYHHYYHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIIHHtxHcFHH9s&D IEyfDEExII9u1ۉ[MһtHI)1j@hh9HAQHMH09LLAH [@MһtHHLjGH1Ah9vLAXZ[f.@HSIItTF~DF 1AD9t.Mһt$HLA9j#HH1LAXZ[DHһtHA9Ljv1fffff.HSIItTF~DF 1AD9t.Mһt$HLA9jBHH1LAXZ[DHһtHA9Lj1v1fffff.HSIItTF~DF 1AD9t.Mһt$HLA9jaHH1LAXZ[DHһtHA9LjPv1fffff.HSIItTF~DF 1AD9t1Mһt'HLA9hHH1LAXZ[fHһtHA9Ljov1fffff.HSIItTF~DF 1AD9t1Mһt'HLA9hHH1LAXZ[fHһtHA9Lhv1ff.HSIItTF~DF 1AD9t1Mһt'HLA9hHH1LAXZ[fHһtHA9Lhv1f.HSIHtD1H>v.Hһt$HLA@:jHHH1AXZ[HһtHA@:Ljv1fffff.HSIHtD1H>v.Hһt$HLA@:j6HHH1AXZ[HһtHA@:Lj*v1fffff.HSIHtD1H>v.Hһt$HLA@:jOHHH1AXZ[HһtHA@:LjCv1fffff.HSIHtD1H>v.Hһt$HLA@:jhHHH1AXZ[HһtHA@:Lj\v1f.@HSIHtD1H>: v.Hһt$HLA;jHHH1AXZ[HһtHA;Ljv1fffff.HSIHtD1H>v.Hһt$HLA;j6HHH1AXZ[f.HһtHA;Lj*v1f.@H)HHHGHHHGH#HHG(H HHG0HHHG8HHHG@HHHGHHHHGPt.H?HH:HH5HHDH HHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HHIItAHcFHHvSHt$HAx;jLHH1LAXZHHtHAx;vj1LHG HfDHKHHG HyKHHHGHnKHHGHsKHHG(HpKHHG0HmKHHG8HjKHHG@HgKHHGHHdKHHGPtHKHHKHHiKHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.H)GHHGHGHGH#GHG(H GHG0HGHG8HGHG@HGHGHHGHGPt.H?GH:GH5GHDH GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLA<jHHH1AXZ[f.HһtHA<Ljv1f.@HHHHGH~HHGHHHG(HHHG0H}HHG8HzHHG@HwHHGHHtHHGPt.HHHHHHHDHiHHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1IIv.Hһt$HLAh<jHHH1AXZ[fHһtHAh<Ljv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH>v6Hһt$HLA<jHHH1AXZ[@1ۉ[fHһtHA<Ljv1f.@HSIHtLH1LIv.Mһt$HLA =jHHH1AXZ[DHһtHA =Ljv1fDHSIItLAL1I9v.Hһt$HLA =j6HH1LAXZ[DHһtHA =Lj*v1fDHSIHtD1H>v.Hһt$HLA =jOHHH1AXZ[HһtHA =LjCv1fffff.HSIHtD1H>v.Hһt$HLA =jhHHH1AXZ[HһtHA =Lj\v1fffff.HSIHtTH1LIv1Mһt'HLA =hHHH1AXZ[f.HһtHA =Ljuv1fffff.HSIHtD1H>v1Hһt'HLA =hHHH1AXZ[@HһtHA =Lhv1ff.HSIHtTH1LIv1Mһt'HLA =hHHH1AXZ[f.HһtHA =Lhv1ff.HSIHtTH1LIv1Mһt'HLA =hHHH1AXZ[f.HһtHA =Lhv1f.HGHHGHGHGHGHG(HGHG0H GHG8H GHG@HGHGHHGHGPt.H/GH*GH%GHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA=jHHH1AXZ[f.HһtHA=Ljv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1IIv.Hһt$HLA@>jHHH1AXZ[fHһtHA@>Ljv1f.@HSIHtD1H>?v.Hһt$HLA>jHHH1AXZ[f.HһtHA>Ljv1fffff.HSIHtD1H>'v.Hһt$HLA>j6HHH1AXZ[HһtHA>Lj*v1fffff.HSIHtD1H>v.Hһt$HLA>jOHHH1AXZ[f.HһtHA>LjCv1f.@HSIItTHHHv7Hһt$HLA?jHH1LAXZ[D1ۉ[f.HһtHA?Ljv1fffff.HSIHtDH1LBIv.Mһt$HLA?j6HHH1AXZ[HһtHA?Lj*v1f.@HIGHHGH>GHGHCGHG(H@GHG0H=GHG8H:GHG@H7GHGHH4GHGPt.H_GHZGHUGHDH)GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLA@@jHHH1AXZ[f.HһtHA@@Ljv1f.@H+HHG H+HHHGH+HHGH+HHG(H+HHG0H+HHG8H+HHG@H+HHGHH+HHGPtH+HH+HH+HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1II'v.Hһt$HLAAjHHH1AXZ[fHһtHAALjv1f.@HSIHtD1H>v.Hһt$HLAHBjHHH1AXZ[HһtHAHBLjv1fffff.HSIHtD1H>v.Hһt$HLAHBj6HHH1AXZ[HһtHAHBLj*v1fffff.HSIHtLH1LIv.Mһt$HLAHBjOHHH1AXZ[DHһtHAHBLjCv1fDHSIHtLH1LIv.Mһt$HLAHBjhHHH1AXZ[DHһtHAHBLj\v1fDHSIHtD1H>v1Hһt'HLAHBhHHH1AXZ[@HһtHAHBLjuv1fffff.HSIHtD1H>v1Hһt'HLAHBhHHH1AXZ[@HһtHAHBLhv1ff.HSIHtTH1LIv1Mһt'HLAHBhHHH1AXZ[f.HһtHAHBLhv1ff.HSIHtTH1LIv1Mһt'HLAHBhHHH1AXZ[f.HһtHAHBLhv1ff.HSIHtTH1LIv1Mһt'HLAHBhHHH1AXZ[f.HһtHAHBLhv1ff.HSIHtTH1LIv1Mһt'HLAHBhHHH1AXZ[f.HһtHAHBLhv1ff.HSIHtTH1LIv1Mһt'HLAHBhHHH1AXZ[f.HһtHAHBLh v1f.HSIHtD1H>v.Hһt$HLA0CjHHH1AXZ[HһtHA0CLjv1fffff.HSIHtD1H>v.Hһt$HLA0Cj6HHH1AXZ[f.HһtHA0CLj*v1fffff.HSIHtLH1LIv.Mһt$HLA0CjOHHH1AXZ[DHһtHA0CLjCv1fDHSIHtDH1LBIv.Mһt$HLA0CjhHHH1AXZ[HһtHA0CLj\v1fffff.HSIHtLH1LBIv1Mһt'HLA0ChHHH1AXZ[DHһtHA0CLjuv1fDHSIHtDH1LBIv1Mһt'HLA0ChHHH1AXZ[HһtHA0CLhv1ff.HSIHtLH1LBIv1Mһt'HLA0ChHHH1AXZ[DHһtHA0CLhv1HSIHtDH1LBIv1Mһt'HLA0ChHHH1AXZ[HһtHA0CLhv1f.HiHHG HIHHHGH>HHGHCHHG(H@HHG0H=HHG8H:HHG@H7HHGHH4HHGPtH_HHZHH9HHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HIHHG H)HHHGHHHGH#HHG(H HHG0HHHG8HHHG@HHHGHHHHGPtH?HH:HHHHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.HSIHtLH1LIv.Mһt$HLAEjHHH1AXZ[DHһtHAELjv1fDHSIHtLH1LIv.Mһt$HLAEj6HHH1AXZ[DHһtHAELj*v1fDHSIHtLH1LIv.Mһt$HLAEjOHHH1AXZ[DHһtHAELjCv1fDHSIHtLH1LIv.Mһt$HLAEjhHHH1AXZ[DHһtHAELj\v1fDHSIHtTH1LIv1Mһt'HLAEhHHH1AXZ[f.HһtHAELjuv1fffff.HSIHtTH1LIv1Mһt'HLAEhHHH1AXZ[f.HһtHAELhv1ff.HSIHtTH1LIv1Mһt'HLAEhHHH1AXZ[f.HһtHAELhv1ff.HSIHtTH1LIv1Mһt'HLAEhHHH1AXZ[f.HһtHAELhv1f.HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHyGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAFjHHH1AXZ[f.HһtHAFLjv1f.@HSIHtLH1LIv.Mһt$HLAXFjHHH1AXZ[DHһtHAXFLjv1fDHSIHtD1H>v.Hһt$HLAXFj6HHH1AXZ[HһtHAXFLj*v1fffff.HSIHtD1H>v.Hһt$HLAXFjOHHH1AXZ[f.HһtHAXFLjCv1fffff.HSIHtD1H>v.Hһt$HLAXFjhHHH1AXZ[f.HһtHAXFLj\v1fffff.HSIHtD1H>v1Hһt'HLAXFhHHH1AXZ[HһtHAXFLjuv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HϥGHʥGHťGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDLcF1II'v.Hһt$HLAGjHHH1AXZ[fHһtHAGLjv1f.@HSIHtD1H>v.Hһt$HLAGjHHH1AXZ[HһtHAGLjv1f.@HYGHHGHNGHGHSGHG(HPGHG0HMGHG8HJGHG@HGGHGHHDGHGPt.HoGHjGHeGHDH9GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>3v.Hһt$HLAHjHHH1AXZ[f.HһtHAHLjv1f.@HSIHtD1H>?v.Hһt$HLAHjHHH1AXZ[f.HһtHAHLjv1fffff.HSIHtD1H>v.Hһt$HLAHj6HHH1AXZ[f.HһtHAHLj*v1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HϧGHʧGHŧGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA8IjHHH1AXZ[HһtHA8ILjv1f.@HSIHtD1H>v.Hһt$HLAIjHHH1AXZ[HһtHAILjv1fffff.HSIHtD1H>v.Hһt$HLAIj6HHH1AXZ[HһtHAILj*v1f.@HGHHGHGHGHGHG(HGHG0H GHG8H GHG@HGHGHHGHGPt.H/GH*GH%GHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAHJjHHH1AXZ[HһtHAHJLjv1f.@HSIHtD1H>v.Hһt$HLAJjHHH1AXZ[HһtHAJLjv1fffff.HSIHtD1H>v.Hһt$HLAJj6HHH1AXZ[HһtHAJLj*v1fffff.HSIHtD1H>v.Hһt$HLAJjOHHH1AXZ[HһtHAJLjCv1fffff.HSIHtD1H>?v.Hһt$HLAJjhHHH1AXZ[HһtHAJLj\v1fffff.HSIHtD1H>v1Hһt'HLAJhHHH1AXZ[@HһtHAJLjuv1fffff.HSIHtD1H>v1Hһt'HLAJhHHH1AXZ[@HһtHAJLhv1ff.HSIHtD1H>v1Hһt'HLAJhHHH1AXZ[@HһtHAJLhv1ff.HSIHtD1H>?v1Hһt'HLAJhHHH1AXZ[@HһtHAJLhv1f.HSIHtD1H>v.Hһt$HLA`KjHHH1AXZ[HһtHA`KLjv1fffff.HSIHtD1H>?v.Hһt$HLA`Kj6HHH1AXZ[f.HһtHA`KLj*v1fffff.HSIHtD1H>?v.Hһt$HLA`KjOHHH1AXZ[f.HһtHA`KLjCv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGH GHGHDHٙGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?[sv.Hһt$HLA`LjHHH1AXZ[HһtHA`LLjv1f.@HSIHtD1H>v.Hһt$HLALjHHH1AXZ[f.HһtHALLjv1fffff.HSIHtD1H>v.Hһt$HLALj6HHH1AXZ[f.HһtHALLj*v1f.@HSIHtD1H>v.Hһt$HLAhMjHHH1AXZ[HһtHAhMLjv1fffff.HSIHtD1H>v.Hһt$HLAhMj6HHH1AXZ[HһtHAhMLj*v1f.@HYGHHGHNGHGHSGHG(HPGHG0HMGHG8HJGHG@HGGHGHHDGHGPt.HoGHjGHeGHDH9GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAMjHHH1AXZ[f.HһtHAMLjv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HϐGHʐGHŐGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAPNjHHH1AXZ[HһtHAPNLjv1f.@HGHHGHGHGHGHG(HGHG0H GHG8H GHG@HGHGHHGHGPt.H/GH*GH%GHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLANjHHH1AXZ[f.HһtHANLjv1f.@HyGHHGHnGHGHsGHG(HpGHG0HmGHG8HjGHG@HgGHGHHdGHGPt.HGHGHGHDHYGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAOjHHH1AXZ[HһtHAOLjv1f.@HمGHHGH΅GHGHӅGHG(HЅGHG0HͅGHG8HʅGHG@HDžGHGHHąGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA(PjHHH1AXZ[HһtHA(PLjv1f.@H9GHHGH.GHGH3GHG(H0GHG0H-GHG8H*GHG@H'GHGHH$GHGPt.HOGHJGHEGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAPjHHH1AXZ[f.HһtHAPLjv1f.@H~GHHGH~GHGH~GHG(H~GHG0H~GHG8H~GHG@H~GHGHH~GHGPt.H~GH~GH~GHDHy~GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAPjHHH1AXZ[HһtHAPLjv1f.@HzGHHGHzGHGHzGHG(HzGHG0HzGHG8HzGHG@HzGHGHHzGHGPt.H{GH {GH{GHDHzGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA QjHHH1AXZ[f.HһtHA QLjv1f.@HYwGHHGHNwGHGHSwGHG(HPwGHG0HMwGHG8HJwGHG@HGwGHGHHDwGHGPt.HowGHjwGHewGHDH9wGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAQjHHH1AXZ[f.HһtHAQLjv1f.@HsGHHGHsGHGHsGHG(HsGHG0HsGHG8HsGHG@HsGHGHHsGHGPt.HsGHsGHsGHDHsGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtLH1LI@v.Mһt$HLApRjHHH1AXZ[DHһtHApRLjv1fDHpGHHGHpGHGHpGHG(HpGHG0H pGHG8H pGHG@HpGHGHHpGHGPt.H/pGH*pGH%pGHDHoGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH1LBIv.Mһt$HLARjHHH1AXZ[HһtHARLjv1f.@HylGHHGHnlGHGHslGHG(HplGHG0HmlGHG8HjlGHG@HglGHGHHdlGHGPt.HlGHlGHlGHDHYlGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAPSjHHH1AXZ[HһtHAPSLjv1f.@HhGHHGHhGHGHhGHG(HhGHG0HhGHG8HhGHG@HhGHGHHhGHGPt.HhGHhGHhGHDHhGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH1LBIv.Mһt$HLASjHHH1AXZ[HһtHASLjv1f.@H9eGHHGH.eGHGH3eGHG(H0eGHG0H-eGHG8H*eGHG@H'eGHGHH$eGHGPt.HOeGHJeGHEeGHDHeGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA(TjHHH1AXZ[HһtHA(TLjv1f.@HaGHHGHaGHGHaGHG(HaGHG0HaGHG8HaGHG@HaGHGHHaGHGPt.HaGHaGHaGHDHyaGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAxTjHHH1AXZ[HһtHAxTLjv1f.@H]GHHGH]GHGH]GHG(H]GHG0H]GHG8H]GHG@H]GHGHH]GHGPt.H^GH ^GH^GHDH]GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLAHUjHHH1AXZ[HһtHAHULjv1f.@Hi'IHG HI'IHHGH>'IHGHC'IHG(H@'IHG0H='IHG8H:'IHG@H7'IHGHH4'IHGPt.H_'IHZ'IHU'IHDH)'IHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]f.H)WGHHGHWGHGH#WGHG(H WGHG0HWGHG8HWGHG@HWGHGHHWGHGPt.H?WGH:WGH5WGHDH WGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAUjHHH1AXZ[f.HһtHAULjv1f.@HSIHtD1H>?v.Hһt$HLAHVjHHH1AXZ[f.HһtHAHVLjv1fffff.HSIHtLH1LIv.Mһt$HLAHVj6HHH1AXZ[DHһtHAHVLj*v1fDHSIHtD1H>v.Hһt$HLAHVjOHHH1AXZ[HһtHAHVLjCv1fffff.HSIHtD1H>v.Hһt$HLAHVjhHHH1AXZ[HһtHAHVLj\v1fffff.HSIHtD1H>?v1Hһt'HLAHVhHHH1AXZ[HһtHAHVLjuv1f.@H QGHHGHPGHGHQGHG(HQGHG0HPGHG8HPGHG@HPGHGHHPGHGPt.HQGHQGHQGHDHPGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH>v6Hһt$HLAVjHHH1AXZ[@1ۉ[fHһtHAVLjv1f.@HiMGHHGH^MGHGHcMGHG(H`MGHG0H]MGHG8HZMGHG@HWMGHGHHTMGHGPt.HMGHzMGHuMGHDHIMGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLAWjHHH1AXZ[HһtHAWLjv1f.@HIGHHGHIGHGHIGHG(HIGHG0HIGHG8HIGHG@HIGHGHHIGHGPt.HIGHIGHIGHDHIGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH>v6Hһt$HLAWjHHH1AXZ[@1ۉ[fHһtHAWLjv1f.@H)FGHHGHFGHGH#FGHG(H FGHG0HFGHG8HFGHG@HFGHGHHFGHGPt.H?FGH:FGH5FGHDH FGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtLH1L@ Iv.Mһt$HLA0XjHHH1AXZ[DHһtHA0XLjv1fDHٜGHG HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPtHϜGHʜGHGHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]f.Hi?GHHGH^?GHGHc?GHG(H`?GHG0H]?GHG8HZ?GHG@HW?GHGHHT?GHGPtH?GHz?GHY?GHATUASHH^HCDHH[]A\ff.AUATIUSHHAHLD$ HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $yHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$mLLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$LD$LLHHSPHH[]A\A]ff.HYv1Hһt'HLAYhHHH1AXZ[HһtHAYLhv1ff.HSIHtD1H>v1Hһt'HLAYhHHH1AXZ[HһtHAYLhv1ff.HSIHtD1H>?v1Hһt'HLAYhHHH1AXZ[HһtHAYLhv1ff.HSIHtD1H>v1Hһt'HLAYh,HHH1AXZ[@HһtHAYLh v1ff.HSIHtTH>v>Hһt'HLAYhEHHH1AXZ[f1ۉ[f.HһtHAYLh9v1ff.HSIHtTH1LIv1Mһt'HLAYh^HHH1AXZ[f.HһtHAYLhRv1ff.HSIHtD1H>v1Hһt'HLAYhwHHH1AXZ[@HһtHAYLhkv1ff.HSIHtTH1LIv1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIHtTH1L I?v1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIItTAL1I9v1Hһt'HLAYh HH1LAXZ[f.HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYh&HHH1AXZ[f.HһtHAYLhv1ff.S1Ht[@HһtHHIh3HL1HAY1vAXZ[fDHSIHtTH1LIv1Mһt'HLAYhQHHH1AXZ[f.HһtHAYLhEv1ff.S1Ht[@HһtHHIh^HL1HAY1vAXZ[fDHSIHtD1H>v1Hһt'HLAYh|HHH1AXZ[@HһtHAYLhpv1ff.HSIHtTH>v>Hһt'HLAYhHHH1AXZ[f1ۉ[f.HһtHAYLhv1ff.HSIHtD1H>v1Hһt'HLAYhHHH1AXZ[HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIItTAL1I9v1Hһt'HLAYhHH1LAXZ[f.HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYhHHH1AXZ[f.HһtHAYLhv1ff.HSIItTAL1I9v1Hһt'HLAYhHH1LAXZ[f.HһtHAYLhv1ff.HSIHtTH1LIv1Mһt'HLAYh+HHH1AXZ[f.HһtHAYLhv1ff.HSIItTAL1I9v1Hһt'HLAYhDHH1LAXZ[f.HһtHAYLh8v1ff.HSIHtTH1LIv1Mһt'HLAYh]HHH1AXZ[f.HһtHAYLhQv1ff.HSIHtTH1L I?v1Mһt'HLAYhvHHH1AXZ[f.HһtHAYLhjv1f.H)GHHGH)GHGH)GHG(H)GHG0H)GHG8H)GHG@H)GHGHH)GHGPt.H)GH)GH)GHDH)GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLAZjHHH1AXZ[HһtHAZLjv1f.@HSIHtD1H>v.Hһt$HLA[jHHH1AXZ[f.HһtHA[Ljv1fffff.HSIHtD1H>v.Hһt$HLA[j6HHH1AXZ[f.HһtHA[Lj*v1f.@H9%GHHGH.%GHGH3%GHG(H0%GHG0H-%GHG8H*%GHG@H'%GHGHH$%GHGPt.HO%GHJ%GHE%GHDH%GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAx[jHHH1AXZ[f.HһtHAx[Ljv1f.@HSIHtD1H>v.Hһt$HLA[jHHH1AXZ[HһtHA[Ljv1fffff.HSIHtD1H>v.Hһt$HLA[j6HHH1AXZ[HһtHA[Lj*v1fffff.HSIHtD1H>v.Hһt$HLA[jOHHH1AXZ[HһtHA[LjCv1fffff.HSIHtD1H>v.Hһt$HLA[jhHHH1AXZ[HһtHA[Lj\v1f.@HSIHtD1H>v.Hһt$HLA\jHHH1AXZ[HһtHA\Ljv1f.@HGHHGHGHGHGHG(HGHG0H GHG8H GHG@HGHGHHGHGPt.H/GH*GH%GHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>?v.Hһt$HLA]jHHH1AXZ[f.HһtHA]Ljv1f.@HyGHHGHnGHGHsGHG(HpGHG0HmGHG8HjGHG@HgGHGHHdGHGPt.HGHGHGHDHYGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA^jHHH1AXZ[f.HһtHA^Ljv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLAh^jHHH1AXZ[f.HһtHAh^Ljv1f.@HSIHtD1H>v.Hһt$HLA^jHHH1AXZ[HһtHA^Ljv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtDH1LBIv.Mһt$HLA8_jHHH1AXZ[HһtHA8_Ljv1f.@HGHHGHGHGHGHG(HGHG0H GHG8H GHG@HGHGHHGHGPt.H/GH*GH%GHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA_jHHH1AXZ[f.HһtHA_Ljv1f.@Hy GHHGHn GHGHs GHG(Hp GHG0Hm GHG8Hj GHG@Hg GHGHHd GHGPt.H GH GH GHDHY GHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA_jHHH1AXZ[f.HһtHA_Ljv1f.@HGHHGHGHGHGHG(HGHG0HGHG8HGHG@HGHGHHGHGPt.HGHGHGHDHGHATUASHHNHCDHH[]A\ff.AUATIUSHHAHLD$HCLD$HLDHH[]A\A]ffffff.AUATIUSHHIHHLD$DL$LDL$LD$LHHS(H[]A\A]@AUATAUSHHHIHDD$ L $iHDLt$HHLL$DD$HS0H(H[]A\A]f.AUATIUSHHIHHLD$L $ LL $LD$LHHS8H[]A\A]fDAUATAUSHHHIHDD$ L $HDLt$HHLL$DD$HS@H(H[]A\A]f.AUATIUSHHIHHLD$]LLD$LHHSHH[]A\A]fffff.AUATIUSHHIHHLD$ LD$LLHHSPHH[]A\A]ff.HSIHtD1H>v.Hһt$HLA@`jHHH1AXZ[f.HһtHA@`Ljv1f.@HvIE1L HH:~lCfIH*Gf* Gf*Gf*GD9fHo@SHHoH[fDЃAHtG~fDGPW>fffff.H?*tHf.H9>*ufH@bwLy#fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1迼H|$ 覼HT$H|$`HL$0HT$ Ht$AH赻HD$HxHgu3H|$(9H|$8/HD$HdH3%(HeuHP[fHt$V_HHD$HxHgt Ht$0H|$(ֶH|$8̶HHHf.ATUHSH dH%(HD$1KHHH]HEH$"HU@H@ HPfHXHEH$5H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$ɵHL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuPҷHʱHHPHHQHiHH}8HPf.@HHtHH@fDfD1f.1f.۽f.HvI1L HL~eA9DAfEfGTL fEAAfALfGTTfETfATH9f.Ho@SHHoH[fDЃAHtG~fDGPWfffff.H?*tHf.H9>*ufH@hwLy胲fATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1H|$ HT$H|$fbHL$0HT$ Ht$AHHD$HxHgu3H|$(虲H|$8菲HD$HdH3%(HkuHP[fHt$V迴HHD$HxHgt Ht$0H|$(6H|$8,HDHHf.ATUHSH dH%(HD$1諰HHH]HEH$肰HU@H@ HlHXHEH$蕱H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$)HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuP2H*HHP*ufHnwLyfATIUHSHHt#H{ HuHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1蟳H|$ 膳HT$H|$lHL$0HT$ Ht$AH蕲HD$HxHgu3H|$(H|$8HD$HdH3%(HruHP[fHt$V?HHD$HxHgt Ht$0H|$(趭H|$8謭HĹHHf.ATUHSH dH%(HD$1+HHH]HEH$HU@H@ HrHXHEH$H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$詬HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuP貮H誨HHP輻HH1HIHH}H0f.@HHtHH@fDfD1f.1f.黴f.ЃAHtG~fDGPW>fffff.H?*t肻Hf.H9>*ufHwLy#fATIUHSHHt#H{ H蟼uHEH9C vH[HuL[]A\IH[ATUASHHHdH%(HD$1HPHHtYHiHHHkHt$HD$:TDHIHL$dH3 %(Hu%H[]A\DHHHxw 茬fff.SH(H dH%(HD$1*tadNHtW:s@j踾@jNHv觫Ho:sH}H5HD$dH3%(uH [ګHHH臵fDSH(H dH%(HD$1jtadNHtWRs@j@j莾HvH课RsH载HuHD$dH3%(uH [HHOHǴfDAUATL(USLH(@dH%(HD$1虌dNHAŅt_EtZls@j @jH賽Hv HԽlsHH蚼@LtZEtUls@j謼@jH?Hv蘩H`lsHSH+HD$dH3%(u H([]A\A]˩HHHxfDSHHH dH%(HD$1謏YH(H,>tadNHtWs@j̻@jbHv軨H胼sH葻HIHD$dH3%(uH [HH#H蛲f.ATUHSH HH dH%(HD$1-H@FHH@Htf.HH@HuH8H8Hhf.L9IHHHIL9lH9Ip|LH+HIHI)LHHA 1L9H9LLH+HIHI)LH`A1_L9 A_|$Hu\H4H\$XdH3%(Hh[]A\A]A^A_À|$uH41H<$Hk4t׉HH|$0hwD"3H|$0H|$0HHD$0yb|$t H<$"H*f.HHHH|$'HtH*H1H'fDAWAVAUATUSHdH %(HL$x1Ƀ H|$(t&HD$xdH3%(HĈ[]A\A]A^A_ÿ1IHӼ@IMIHEHILH)H)ƍHD$HHD$HHD$PHD$hHD$XHD$`Ht$0H|$@l$0wA$IufMA*|$ A}EfAEl$ f.|$l$@HT$hHD$$[T$݃9XT$T$}9CA9tHt$0H|$@݉\$0hvL$HT$hX9L$|D$ t$\D$fTf.D$"d$AEAXef.d$@IEEH|$hHl$(AdNH(Ht$0H|$@\$0u HY, 胂tVMtQs@jH賳H|$0v H|$0гsHçH|$0虲CH;D$hH[Ht$PH|$@GLѦ;'Ht$0H|$@Dt$0t|$8|$|$HHt$PH|$@OGLwH菩H|$0HAWAVAAUATUSHHH$PH4$T$dH%(H$x12H$111H$H$.tuH$PH$H$HH$HxHgLH$蟜H$X蒜HHHHD$G@L&LhILLM|$0Hx0H@H@LxH@ HH0@(ELHEXHE`H$HEhHDž@gHDžHDžLEpExHDžƅƅIl$8HEHEID$8H@ LID$8ǃ8HDŽ$HDŽ$H |H@ǃ(ƃ,HǃHHǃPHǃXəHxHHHLh1HHXHHǀH)1HD`LHXHPLLaLLaH@Hǃ@Hǃh1HuHHHPH`HXHǃx@HǃHǃD$0DHD$8 ;1Df*\YHH=uH$HDŽ$0HDŽ$8HDŽ$@HHD$ FHt$ H$0 HD$褮D$({HL$HD$8L$(҉T$0xpRD$0HD$8HDŽ$HDŽ$1L$0H$H$H$(dNDŽ$HDŽ$H$8H$@H$H$ D$ T$H$H$0^1f$0H@H$PHy(HL$0$PH(HH$jT$0tX|$ tQ\t@jH譭H|$P\vH|$Pʭ\tH轡H|$P蓬(DŽ$Pl HD$H$PAD$(踝HL$HD$8L$(ɉT$0?"D$ tbw@j0HT$8t$0HH׬H|$`bv.H|$`xHH|$`轫(DŽ$PDŽ$T ,HD$H$P AD$(МHL$HD$8L$(ɉT$0n"D$ tbst@jHHT$8t$0HHH|$pgvFH|$p tHH|$pժH<$HT$0H$0FD$0|$ t@jD|$賟H$HXۅH薟DH苝EŁH~HT$8t$0H}H`HH$pvlH$/tH"H$H"XۅHDHEŁHHT$8t$0HL}HϞH$袩fH$xdH3%(HĈ[]A\A]A^A_ÅH|$ %HDŽ$@4HS$0tSHH 1HHH$0H$8H$H$LH$$1uHHHHL$(=HL$(HH$@uw@HD$Ht$ H$PDŽ$PD$ HL$HD$8L$ ɉT$0 D$ 軙t$ D$0HD$8DŽ$DŽ$HDŽ$HDŽ$ HDŽ$(dNHD$ @D$ L<$@jI7HVFtHڜH蒨H|$@UvH|$@诨I7HHVFtH蓜H|$@i@Ƅui$PHDŽ$8HDŽ$@DŽ$$HDŽ$HDŽ$ HDŽ$(11XD$0HD$8AD$0HD$8D$t@jD$ǛH$HTۅH誛t$H螙HVH$uvH$rtHeH$HHbTۅHEt$H9H$ (DŽ$P HD$H$PAZD$1HL$HD$8L$ɉT$0ta|$ tZ0x@j諚HcH${v跒H$ztHmH$@H4$H|$vD$0HT$8|$ t@j'HߥH$v3H$ uHH$輤HPHHH$H<$HDŽ$PPgHDŽ$XH$`HH)H9кHDH$PH$H$C7H$PH$HDŽ$P 2hHDŽ$XL$`~WH$H$d_jD$0HD$8SD$0 HD$8 'H$I輣H$1H@HHH@H|$MwH|$w&u@jHD$臘Ht$Hz-uHmH%H|$vH$vHD$?H$2&uH%Ht$H-uH H$ޢLL L LnHHHt (H@tW,Hx(H0 $DŽ$ۓ(H,H$H$LMt\Ml$8Mt%IELPMm H$IMI|$8HtLo HPMl$8I|$ԊL}HEHUHu H{ HcyHCHS}H}0HC(pbyHH{0tHH@H=dNuCG@HE8h HHXHC(HCPșHC8HE@HC@EHCH蓋H HH"H8|H HHpHV|@LIz@=?KtPÐH/Bt/4HPRpPHfDAWAVIAUATUSHxHW@dH%(HD$h1HGHHl$0HT$IHD$HD$ G<D$GPD$G8D$ 返I1HHT$|$ HD$LAHD$HHD$@L}IڄAMIG AWxńAGIG M"\$uu訄I;G A u茄I;G uA tzI;G tTMy[IG(fHt$hdH34%(uVHx[]A\A]A^A_cAGIG DA tMxAGIG Mg(C1f.AWAVIAUATLgUSILHHI]8Hu rfH[ HtgHCHtHUHtH9t-HCHtHUHtHxHrH9t?*twuL}HH[]A\A]A^A_fL}I}0AHUIHELIFIV~M}8MtmLH[ HtWHCHtHUHtH9t-HCHtHUHtHxHrH9t?*tnjuILPBDM~ LMu8-SWH?t9tHÉ|;u[[|fUSHHH_hHHFHfDHHP H[HHuH4ׂCHHH?HH)HHUt'Hi@BHH)HiHMH1[]fDHMH[]HF,1f.DAUATUSHHHhdH%(H$X1dK@؉}`Ht$P}dA…~zH}XHL$TH@LMdH4HD$PH/@L9t{LCQHMPtuIHCH H9t%HH9u̓}dDDH H9uEuDH$XdH3%(Hh[]A\A]fDAHCHLm0LK|LehMtfI$HLP(Md$Mu}dt!Ht$H}dHL$0HT$ҌLzZLo0t$ L{t$ @tBLehMtIfDI$HLRMd$MuLL$ czL$ b1|H L;zH賅USHHHWHB H~HHHWHkHB }tiHJHH@xt-HHt}HHJHHBHBHHHP`H@`Ht,HHH[]H}zEHSDHHH[]Hz@UHo0SHH(HdH%(HD$1kzHƃHt4HP(HxHH@(G0蠅HHuԀ{xu0HCXHt'HPXx`CxH$ HT$PX^tHxHD$dH3%(uH([]Jzf.USHHHGHP H~iHHHHGHPH@ Ht7Hk}t[H HHtuHHPHH@H@H[]tH?HtHHCf.H}yHCEH HPHtHHuHfDS뱐USHH(dH%(HD$1HHtS~HP(HH@(HhH>E0NwCHHD$dH3%(uTH([]xu0HGXHt'HPXGxx`H$ HT$PXr{tH;vCxf@SH0HdH%(HD$(1Hta(HtzdH%Hujf.H@HtWH;uH@HtIHHHHHVHPHHFHD$(dH3%(H0[H{0Ht$H|$]wHt$D$HHt)HHtPHHFHHHFHt$H5|$xH|$uiHPFHawSHH0dH%(HD$(1ut(unHt$HH{0H|$vHHt$D$HHH0HHt$H|$t^H|$uRdH%HuH@HuH;uH@HcHPH@ HHt4H2HpHD$(dH3%(u'H0[HHe@HpHpIvfAWAVIAUATIUSMH8HD$pT$ DL$D$dH%(HD$(1HH(AHmuIEIcHUHH<HI$HHPhHL"L`hIG(HHsHD$(dH3%(wH8[]A\A]A^A_yH讈Il$ AD$fT$I(LHwsDxT$AD$ LID$ I(y|$tYEuHuPf.LAT$0t|H sT$I(L[(fDL`hL``At2P\T$A`HL$T$ HD$gnIEfDP\P\DAIEP\xA`HL$T$T$ HD$ nIET$ P\=sHH3rH}f.USH0H8dH%(HD$(1pH@H@/hHhH@ HHH}HHD$H$`EHC(Hh(H}0H<$rD$uH}Xt+H<$qHL$(dH3 %(HH8[]@HEHt$/hH8HD$HD$`HHEXHE`HE`Ht,HHHHg|$zlHHrHH|$t H<$pHyH1|AVAUATUASHHdH%(HD$1t8Iuj荅IDAE puAUHCu1HCHL$dH3 %(H[]A\A]A^Dt$D$ouAAH DIbm;uI.u?fuH;Cu; t uH9CQ; HH!TD1$lA&DAEntAUHCpSHH0dH%(HD$(1?t-D$vt;HL$Ht$HD$D$6HD$(dH3%(uH0[pf.AUATIUSAHH(dH%(HD$1tH|$HT$LHsHt$HiHD$HxHgu4HD$dH3%(DcHkHC gHyuH([]A\A]fHt$oHHD$HxHgt Ht$HxySHjuH{(ou[ùhyPwlhyslfSHnuH{(:zu'H~mu [ù@Phyzykұ賱DATUHSH HdH%(HD$1Hu7KHLc$r1H1HD$HAH]HtHHHEuHEHD$dH3%(u H []A\nfSHH0HYH{0[if.DSHt(Ht1HH_HHx(H[DHH@(HH_H[AWAVIAUATUSHHdH%(HD$81HHT$L~(HAAԌHL5mHEHD$HD$ HD$(HD$AD$DIHIȌuH\$HH\$(HHHD$LH|kH|$1HT$HLSHD$8dH3%(HH[]A\A]A^A_H\$ H\$H]HaHS0SHEHtHHHUt.HHD$ HHtHH\$ H]HuHEHD$ -LjH|$?\lHLjH|$Huf.DAWAVAUATUSHH8L*dH%(HD$(1MpIE(IAHHD$jkHj@~HD$HD$E1IcLeHIL(Ll$HN, Mt\?oAE}IE HH HA`HtH0HHq`HIEHD$HuLl$Ll$AAnH|$Mgx@XƀNiLH+jI;HE HtHUHPHEHtHU HP ILHE HEIhHI(Ht$ H|$HD$(dH3%(uoH8[]A\A]A^A_@H|$h@HAhA`HL$DD$HD$dHSHEIjf.DSHH0HH{0eH[wpUHo0SHH8HdH%(HD$(1+iCpHgHH$HD$HfDHB`HHHt)Ht$HHHHHL$HH@HH9uH;ƂHB HtHJHHHBHtHJ HH HHB HBHHH[H[hHtf.HHHP0H[HuH$HD$HD$Ht HD$HD$H$HD$HD$H|$VHNHD$(dH3%(u3H8[]H $HBHHhHHqfDUSHHHvHHHGmbHEHUHu H{ HcyHCHSaH}0HpdyHC(pbyHH{0tHH@H=dNu0G@HE8HC8HE@HC@EHHPfyHC(xfyCHH[]H HH'HH0dyaHpH^jHpH>aHpfDUSHHHvHHHGm/aHEHUHu H{ HcyHCHS aH}0HyHC(pbyHH{0tHH@H=dNu0G@HE8HC8HE@HC@EHHЖyHC(yCHH[]H HH'HHy.`HpHniHoHN`HofDAVAUIATU@SHvILIHdH%(HD$1FmLH;msH.mLH#msHmLH mHt$HD$(xHHYgŁHlHHlHxq@SHHHGpbyHhH[zf.HSHHHGpbyHgH[;yf.HSHH0HHGИHGpbydH%(HD$1gHC HcyHxHgu'HgHD$dH3%(uH[fHt$V_df.DH(gSHHG0HHGpbyHfH[SxHf.LIzSHHG8HHGpbyHfH[CyHf.LIzSHH0HHG șHGИHGpbydH%(HD$17fHC HcyHxHguHwfHD$dH3%(uH[ÐHt$cffffff.H(gLIzT@SHHHGpbyHeHLxH[ciHf.SHHHGpbyHdeHvH[#iHf.SHH0HHGИHGpbydH%(HD$1eHC HcyHxHgu'HOeHhHD$dH3%(uH[ÐHt$affffff.H(gSHHG8HHGpbyH|dH$wH[;hff.Hf.LIzSHHG0HHGpbyHdHuH[gff.Hf.LIzSHH0HHG șHGИHGpbydH%(HD$1cHC HcyHxHgu/HcHOgHD$dH3%(uH[fHt$v`ffffff.H(WLIzD@SE1HH0dH%(HD$(1IfL;K(H{H1H$LH\$HD$H|$HHL@HH@Ht4HPHL$H9uHHHPHVH@HuDH$Ht$HL9u fHHBL9uHD$HBHCIHH;CHC;L;K(HCHC3H{HteHD$(dH3%(HCHCHC HCu&H0[DHHRH IPHj^UHAWAVAUATSHOdH%(HE1)D1HG LgEuL9_I)II9LGLoH7LOLWLvHEHG(HHHuLMLUMHEHG0HEHG8HE_H]1H{(@dH%HDžhHDžpH`HH@HHHH<HHHhDxHHChCCDBaHC HEHC(HC0PgD{_HD$xdH3%(u7HĈ[]H0mH8XHH|$Ht$螛HPbHATIUSHt!HsLHkH_HHu[]A\f.AVAUIATUSH dH%(HD$1HLo`HDHH]Hu=YfHLc$[1H1HD$HAH]HtHHHEuHEI9uI~(RL:^HD$dH3%(u H []A\A]A^xWAWAVAUATUSH8L'dH%(HT$(1H|$MMl$Il$`M$fDIIHu@Zf.HLsD$Z1H1HD$HT$AIHtHHIuIGL9uI|$(QLMF]M]HD$HxHtH_/HHuHD$(dH3%(uH8[]A\A]A^A_SVAWAVAUATUSH8HpH|$`dH%(HT$(1҃tSHD$xdtSHD$HHtfDH_HHuHD$LMf.Ml$Il$`M$fDIIHu@Zf.HLsD$(Y1H1HD$HT$AIHtHHIuIGL9uI|$(aPLM[M]H\$H{x?P{\tMH\$CX9t RCXtRH|$H0 PHD$(dH3%(uH8[]A\A]A^A_HD$@XTf.SHGH[.[f.@USHXHhdH%(HD$X1VHHH/_Ht$H{HD$0HD$8HD$@D$HH$ИHD$(HCPbyHm>NHD$HT$Ht$ H{ HcyHCHSNH|$0HC(pbyHH{0tHH@H=dNu\G@HD$8Ht$(H{(HXHC(HCPșHC8HD$@HC@D$HCHptHh Hv\HH9HH9H HMHIHbH\H1H7VHMf.USHX/H_HT$H|$dH%(HD$H1hHt$H|$ LHD$HxHgu%H|$ HD$ cyl$0H\$8HD$@gHt$eHHH|$ ?LH\HD$HxHgtHt$+fS1H dH%(HD$1$TUۉ$HD$t!dNHtsHf.HD$dH3%(uH [QDAWAVAUATIUSHHHhdH%(HD$X1f>AdDLIʼnHSAUAUEHCmTHCTH;Cu ;sTHS H9u {Ht$XdH34%(eHh[]A\A]A^A_@E1f>HGH$AF,dIƾDTAETEEHCD-THCD|$0H$H@(HpxH$HHt$OH<$HHHD$H9H@HHH(HD$H $H|$HHG HGHHtHx Ht$H$H|$HNHt$H|$HuEOHEH $H|$HHPHEDxXƀMHEH $DD$@@\HD$Dy`HL$@_It EED$0ED$0ER|$0HCt?E1D$D$@R|$0HL$@Ht$/HD$HD$/D$EuDmtMdNHtCHSf.{RH;C; cRiHCv@fA<$mA LD1Ҹl$@fT$FfD$DaH|$@IľqNAQA $EHCH‰ "QHL$0LD$@HCA$D$0D$@YQA $HC HgQL$0HCH‰ DAD|$0AD$'Q|$0D$HCD.i@Q HCPH;C ;sP HCH¹ DPHC@RIHH(HH@ h@HD$HHL$HD$H@`H@hH@pH@xHǀHǀhLHH H|$ SH|$JH|$0iHVSH1H0dH%(HD$(1bCt"HD$(dH3%(H0[K_8HZZu^<$;H;1G|$1{G{1GlfD3OH^H\$҉T$FdNH8H|$s[11aC?Ǻ1NG;1;G; JATUSH dH%(HD$1OtHL$dH3 %(uxH []A\@]HŋPu. NNAtD1DFNUHD$҉$tdNHtsHM8JAVAUATUSH`dH%(HD$X1t'HD$XdH3%(H`[]A\A]A^fDH`tGE`}dE`tGEd\{]dH]XHHE\EX&UX}`H$ H\$GC}\Ht$0HD$0\Ud}`HEdH$ HD$C}dHt$HI}dHL$0HT$5YLmxAdNLSHHHufH[HC\SXH}`H\$$BtuAHFHVHNHD$ HT$(HD$HT$HGHWOHD$8dH3%(u'H@[H$PgMH$Pg@HT;HCHE@S1HH0dH%(HD$(11=uyH{(1=uHD$(dH3%(u{H0[H6t hyPwk7Hw18HH$pdydH&H纸v8HH$pdyd~:HH$0dyN4H&DfDAWAVAUATUSHHxL>LvdH%(HD$h1Ln6L`01H@H@H0nHH@H@ LH@(;eHCXHH$fH1HHD$; HXfHHƃ0ƃ1ƃ2Hǃ8ǃHHǃPLeHǃhHXH`HǃpHǃxHǃHǃHǃHǃHǃHǃƃƃHPLLLH]HEHD$@5HULl$@@@ HМHXLHEHT$@6H{HtWu`HUH\$@HHT$HLt$HH{BHT$@I9HHSt"MtAF HtW tXLsI}5H1HD$hdH3%(Hx[]A\A]A^A_HH[tE1fHHJHcNuRLl$@wL5LHD$@pdyaHvH|$w5H|$HD$pdyaH*zy L_5LHD$@pdy~aH!7HHH LHD$@0dy0H<$2tLL6tL5HH^H|$HD$0dy}0H{ 44H{HtG uHPH=H(@mLHD$@0dy20L3H@VwLy2QwLy2H0HHPCH|$4HSBL{3H?SHH0dH%(HD$(1H(5tuHD$(dH3%(u%H0[Hpky3HH$yzQe5HHH$0dy2/H ?f.AUATIUSIHHHAHHLct\tSHh0CH3HuRH{LpLx`4u\HH[]A\A]zRf.CL44uIH[]A\A]ÿƀ61ҾyH=H2kyzy1kyzy0HQH=f.@AWAVAUATLg(USHHHHL$L$dH%(HD$81L$LHD$JH|$LHHRHL9H|$ASHtHR:Eutq=Jt8HCPHt$XdH34%(HHSHh[]A\A]A^A_ÿ/0t/6HPR>fIxBDHD$2A2HL$ED1HCD3k2HCD|$0MuIFxHHD$B.MMZIEIIE(HD$IIE IEIHtLh H|$M,LmLl$L-HELLpPHEDxXƀz,HED$@HL$@D@\HD$DA~`'tHD$D0ED$0EE1D$0E1HCD$0t/D$@l1|$0HL$@Ht$/HD$HD$/*EA$EDAD|$0t1D3HCD$0fD)HH@ hI@H@(HHD$IE`IEhIEpIExIDžIDžK,HHLr3H|$+H|$0λHv6fDUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHH0HDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*HC0D;` H~HxHHEHEH[]A\A]fD~nHW 1H9tH=D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAVAULoATUSHHWHDLHHRHtD;B ~HRHuI9tD9C ~_HI0"'IHËEHS HC(LLC Ht:HuTI9tO1B 9C @LH>ID$(HHC([]A\A]A^fHHD$0HD$HLof.HXLdH%(HD$H1HD$(MLD$ tIHD$(HD$ ILHFHvHD$MHD$0L $Ht$8+IHD$I!L$HGHOL9HD$HL$L;T$ )H9tiH4Iz fHL$HH9tJHHtHHL$H;HH9uHD$HL$HH9uDMt(I HH9u ~fDHHAH9uHD$HAMt+IHt$ H9u XHHAH9uHD$(HAH|$HdH3<%(Hu}HXHHHL$YfE1HAIHAI뻹zwt %zwt${wt$6(fDUSH@HHdH%(HD$81M*HuH|$HH$4"Ht$H{HD$HD$ HD$(D$0H$HD$HC8byH!H|$HgHCpbyHH{tHH@H=dNu\G@HD$ Ht$H{HHCPHC8HC HD$(HC(D$0C05HH0h H;0HH HMIE1Mu |$|$ugA AL9uEuL9uFEtA1ҸfT$FHDl$@fD$DDAEID3y9EtDH$dH34%(DLHĨ[]A\A]A^A_DsfDHL$$E1$ȉA$ȉAD=yJt$APArA I_/tο/!HPR)(WwH@fDH.HÐfUHSH8HEHEdH%(HE1GHEHH}кhjaXZHUH}HH)HHHH9jt'Hf^*f.H9f(uEEHEdH3%(H]ÐHH}к8jaf1fH*tuHH}кj$DHH}кhj@gff(\%\fTfTf(fTfUf(fV1H}HHtH!AUATIUSI)LHHHLHOHL)HH9HOHL)IIL9v^ML$HL9t3HLHtHHH9uIL)HH|;H}H[]A\A]HtLLIMLEH[]A\A]E1HLt(HH9wwLHt$yH}Ht$IH9LtDHtHHH9uHt|MLmLeLeH[]A\A]fL8H}f.AWAVAUATUSH8Ht$$L(HHHMLHo@H|$HT$HD$fLt$L|$LL)(fHId$ A_IAWIl$IfD$(I9d$ l$Xd$(Xl$,uA$$IAl$L;d$mD$$H8[]A\A]A^A_f.SHHHyHoH["SHH[fffff.ЃAHtG~fDGPW~'fffff.H?*t"Hf.H9>*ufHwLycfATIUHSHHt#H{ H#uHEH9C vH[HuL[]A\IH[ǐfDSHHPH|$0dH%(HD$H1H|$ HT$H|$B*HL$0HT$ Ht$HHD$HxHguyH|$(H|$8uH@H()H AAHP@DH@H9uHD$HdH3%(uHP[Ht$x\HHD$HxHgt Ht$H|$(H|$8HHHATUHSH dH%(HD$1KHHpH]HEH$"HU@H@ HХHXHEH$5H{HtGu\HEH$HHD$tkLd$H{@H$L9HHCt#MtAD$ HtG tGLcH|$HL$dH3 %(Hu?H []A\DHH[tE1f.HHPHcNuPH HHPHHQHiHH}8HPf.@1f.1f.f.SH_Ht&HHH@H=\huH[fD[fD[DAWAVAUATIUSHHLw`dH%(HD$81HGXH4$MHD$H$Ld$H(L}؅x?MMvMt!HHHD$ HxHgt Ht$1RHf.AUATLgUSHALԨH(dH%(HD$1"u>H纎HH!0H H EzL"ulAEw#DmHD$dH3%(H([]A\A]H纕^HHS!ѦHa H E롾馅L#"u?AEvH纡HH ѦH D?L!uAztiAAxA|'A~H纲HH ѦH)f.Ez@ }LC!ueAE#H纺 HH ѦH#EcE~WExKHHH*HIHuLHV٦H@E| HHEHfÐfff.USHHHHgdH%(HD$1HL$dH3 %(HuH[] HHHzHgt Ht$NH3AWAVIAUATIUSHHH|$0dH%(HD$81bH|$ LUL|$ Ld$0I_IL$LLH9HHL$HFuHL$H)H~\IHgukI|$Hg1u AEA9Ht$8dH34%(HH[]A\A]A^A_f.IHMHgtЃAHtjAG~kLd$0I|$Hgw@ЃAHt&AD$UHt$ xFAD$PAT$אAGPAWHt$F HHD$0HxHgt Ht$MHxAWAVHFAUATUSHL~ HD$MLfIHMt$؅x?LMMtVH$PHvH$PHxHgH$ H$H.H$HxHg AEHH$H$HH$HxHg@AEH0H$ nH$HH$HxHgAEHH$H$H>H$HxHg AEHH$pH$pHH$pHxHgAEH@H$`ހ~H$`HH$`HxHgAEHH$|.H$HNH$HxHgPAEHH$pH$pHH$pHxHgAEHPH$`H$`HH$`HxHgAEHH$P>H$PH^H$PHxHgAEHH$ H$HH$HxHgЃAH7PЅH$H$~H$HH$HxHgЃAHW PЅH$VH$PH$PH.H$PHxHguHAEH@H$H$HH$HxHgtЃAHS PЅH$ @H$t^H$H~H$HxHgAEHH$0H$0H.H$0HxHg0ЃAHg PЅH$ H$ H$ HH$ HxHgЃAH PЅH$v H$0.H$0HNH$0HxHg`ЃAH PЅ>H$ ,H$H$HH$HxHgЃAH PЅ^H$ LH$@tNH$@HnH$@HxHgЃAH PЅH$& H$@|H$@HH$@HxHgЃAH PЅH$ |H$ nH$HH$HxHgЃAH PЅH$F H$ H$HH$HxHgЃAH PЅH$ H$ ހ H$ HH$ HxHgЃAHPЅH$f H|$0&! Ht$0HDHD$0HxHgfH$& H$HH$HxHgH$`/ H$`HH$`HxHgPH$p/^ H$pH~H$pHxHgEH$P/ H$PH>H$PHxHgH$@/ H$@HH$@HxHgH$/ H$HH$HxHgPH$ /^ H$ H~H$ HxHgEH$/ H$H>H$HxHgH$0/ H$0HH$0HxHgH$ H$HH$HxHgPH$ ^ H$H~H$HxHgEH$/ H$H>H$HxHgH$& H$HH$HxHgH$& H$HH$HxHgPH$ ^ H$H~H$HxHgEH$/ H$H>H$HxHgH$+H$HH$HxHgH$H$HH$HxHgPH|$ /aHt$ HHD$ HxHgNfH$+H$H>H$HxHgH$&H$HH$HxHgH|$`&Ht$`HHD$`HxHgYfH$/^H$H~H$HxHgEH$&H$H>H$HxHgH$ H$HH$HxHgH|$p Ht$pHHD$pHxHgYfH|$&aHt$HHD$HxHgNfH$&H$H>H$HxHgH$ H$HH$HxHgH|$P Ht$PHHD$PHxHgYfPJHPJHH$>H$H^H$HxHg%PJHPJHPJHPJHUPJHePJHPJHPJHePJH5PJHPJHPJHePJH5PJHPJHHH$HxHgt H$ 1H}HHgt Ht$1HcHH$HxHgtH$0HH$PHxHgtH$0HH$HxHgsH$0aHH$@HxHgEH$X03HH$HxHgH$*0HH$ HxHgH$/HH$pHxHgH$/HH$0HxHgH$/{HH$HxHg_H$r/MHH$HxHg1H$D/HHH$HxHgH$/HH$HxHgH$.HH$ HxHgH$.HH$HxHgqH$._HH$0HxHgCH$V.1HH$`HxHgH$(.HH$@HxHgH$-HH$HxHgH$-HH$HxHgH$-yHH$`HxHg]H$p-KHHD$PHxHg2H$E- HHD$@HxHgH$-HH$HxHgH$,HH$HxHgH$,HH$HxHg}H$,kHHD$`HxHgRH$e,@HH$HxHg$H$7,HHD$pHxHgH$ ,HH$HxHgH$+HH$HxHgH$+HH$HxHgoH$+]HH$HxHgAH$T+/HH$HxHgH$&+HH$HxHgH$*HHD$ HxHgH$*HHD$HxHgH$*}HH$HxHgaH$t*OHH$HxHg3H$F*!HH$HxHgH$*HH$HxHgH$)HH$pHxHgH$)HH$HxHg{H$)iHH$HxHgMH$`);HH$HxHgH$2) HH$HxHgH$)HH$PHxHgH$(HH$HxHgH$(HH$HxHggH$z(UHHD$0HxHgPJHPJHPJHRPJHtPJH0PJHPJHHHD$ HxHgt Ht$6HI^(HHHHxHgt Ht$0L9uH[HHD$0HxHgtHt$ xsnUSHHHGgGdH%(HD$1HGHG HG8HG@gGXHG(HG0HGXHG`HGxHGhHGpHD$dH3%(uH[]Hs`H{PHHC@HxHgt Ht$Hs H{HtHSHzHgt Ht$H5@ATUASHHHHGgGdH%(HD$1HGHG HG8HG@gGXHG(HG0HGXHG`HGxHGhHGpHHDHDHHHD$dH3%(u H[]A\Hs`H{PHHC@HxHgt Ht$Hs H{*sHSHzHgt Ht$HAVAUIATUHS0IH dH%(HD$1HIELHHHS HS HgHC(g赐HItMHHMLHPHE(HHt$dH34%(EH []A\A]A^HS(HzHgHS HzHgHHD$ HD$fH9wHr H{ HL$LoLvLM9IFHL$u"M)1I=I+D#fDЃAHteJʅOHt$HD$+HD$6ЃAHt:Jʅ,Ht$HD$HD$Jqr뚋Jqrjf.AWAVIAUATIUSHHHtG(Hx ILfHK@LLHC(HL[]A\A]A^A_@HGH9tHr H9L~LgM9LIFuM)I1IDry(IHx df1JHLHH$@AWAVAUATUSHLH|$H4$MH$H(Lm$H=|yDIGHtAIMg LHMt$LM9IFHuLL)H=~IG1Hu@HLubHLu/M)I~L1H[]A\A]A^A_I|DyHH1[]A\A]A^A_LHD$L9xt1LLH $L` IH)Mt$LmM9LIFb1Lxf.AWHGAVAUATIUSIHHH9DHN L:LqIoHLH $I9IMFLLD$H $LD$HL)H=~MLLHouI)IIBD7H1H[]A\A]A^A_H=I9\$HHtHHx HLH$LwI9IFL$uI)II| DIxHHEIDHH[]A\A]A^A_fDgH(tQH_ H2H{ LvHoI9HIF_uL)HHLLH[]A\A]A^A_fDI9\$ tiHqHp HLH$LvI9IFL$uL)HH|yH{HIEIEHaHH1[]A\A]A^A_f.fUSHHdH%(HD$1"HHǃg1ҾԨDHD$dH3%(uH[]HHHHxHgt Ht$H/HfDSHHdH%(HD$1HHxHgu$HHD$dH3%(uIH[fDЃAHt&PЅHt$f.PJH~fffff.SHHH[fffff.AUATIUSHHHdH%(HD$1EHuH{HǃgLkHEI9tvHs LjHSHC HC8HS(HS0Hu HtELHC H@HHQHuHK( fDHHHHuHC0HE8HC8Hu@H{@kEHLkPCHHEPI9txHs`L< HSXHC`HCxHShHSpHu`HtGLOHC`H fDHHJHuHSh fDHHHHuHCpHExHCxHLHD$dH3%(u H[]A\A]HHHxHgt Ht$" HHPATUHSHvHHLcHdH%(HD$1FGHSHC CHC8HS(HS0Hu HtGLg HC H fDHHQHuHK( fDHHPHuHC0HE8HC8Hu@H{@HSXEHHC`H{PCXHCxHShHSpHu`CHHtEHC`H HHQHuHKh fDHHPHuHCpHExHCxH|$dH3<%(Hu/H[]A\HH{HHgt Ht$ HHHC@HxHgt Ht$} Hs LgHUSHHHHH|$dH%(H$1HsD$ HD$ HxHs HT$8D$8HD$@HD$XHD$ HT$HHT$PHtHHx HD$@HHHQHuHL$HDHHPHuHD$PHC8HD$XHD$ Hs@Hx@DHs`CHHT$xD$xHDŽ$HDŽ$H$HD$hH$HD$ tZHxP H$H@HHQHuH$ f.HHPHuH$HCxH$Ht$ HyHHHt$HHVH|$ 3HD$HxHgu)H$dH3%(HHĸ[]DЃAHtPЅHt$ $뱋PJHH|$ HHD$HxHgt Ht$HDHHD$`HxHgt Ht$Ht$@H|$0eHD$(HxHgtHt$HHH$@AVAUATUHSHvHH dH%(H$1FH$$Hu H$DŽ$HDŽ$HDŽ$H$H$H$HtQHxH$HHHQHuH$fHHPHuH$HE8H$H$Hu@Hx@kHu`EHH$DŽ$HDŽ$HDŽ$H$H$H$H$tUHxP H$H HHQHuH$fHHPHuH$HExH$HsD$HD$Hx証Hs HT$(D$(HD$0HD$HHD$HT$8HT$@HtKHxhHD$0H fDHHQHuHL$8DHHPHuHD$@HC8HD$HHD$Hs@Hx@Hs`CHHT$hD$hHD$pHDŽ$HT$xHD$XH$HD$tPHxPHD$pHDHHQHuHL$xDHHPHuH$HCxH$H$H|$辵H|$A1/H$"Eu-H$dH3%(*H []A\A]A^@HH$H H|$HLl$L$I]Mt$LLI9HIFou L)H~OI}HguSI|$HgSЃAHtZAD$5Ht$&H|@렸ЃAHt(AE~&L$AD$PAT$AEPAUHt$6HH$HxHgt Ht$4HjH|$HH$HHD$HxHgtHt$HHHt$0H|$ `HHD$PHxHgtHt$HH$HxHgt Ht$H$H$_H$HxHg1Ht$["HHžDЃAHtG~fDGPWfffff.H,+HcHHHTfffff.USHHFH)H~xL[,H AH1DA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]Ðfffff.US,HHV+ H)HHcHHHtH؅~qL[,H AHA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]@f.w ~f.vXfD\Ðfffff.f(\f. 4wR2f.vX | YXYXX\\ 8fffff.USHHX\Oxf(Yf.D$ d$(f(\% d$ l$(f(YY^Qf.XKPD$ Y VzXCXXIzf(D$ff(L$ShL$YXT$f(T$\ yfT.=T$f.w f(uf(Ht$@H|$HShwYYl$Hd$@Y[x\Qf.YYf(d$0\Khf(X Iyf(Ht$@H|$HX\$L$@Ht$@T$HH|$Hf(L$\$YC`T$Xf(YCpXd$HHt$@vH|$Hd$d$0L$YchT$YYt$@\t$8Y\$(XCHYYXD$ Y\$0XXX7-of(T$@\d$HYT$(d$l$YD$ X\ wXwHt$@H|$H\$0t$8T$(YY\$DD$@DL$Hd$f(l$AYfD(f(YEYYf(\fA(AY\fA(YXYYAXYAY\YYXf(fA(xYAY\XhpHX[]@f.D$ d$ X% d$ l$d$芼l$f(d$pf(fDSff(HH \@8+H9X*Y h XPXY0X\iQff(5*\ *fTd$f. f(=f(T$\<$t$f(\2X$L$X`,f\P*d$f(T$f.%N^$\$f( $\$H Y[Xf(f(t$f(T$\f(d$5f(f.%4$T$v+HT$f`f(8*Xf(\@Y XL$Y0X\f(T$f(f(T$ &\f(5!f(T$4$DX`f(T$X\ y-f(T$,$}fff.USHHH?ECEHCEPCEXC E`C(EhC0EpC8ExC@CHCPCXC`ChCpCxE8E@ H (h0p8x@H[]Ðf.USHHHOƅCHCCC C(C0C8 C@H[]Ðfff.USHHH/(0ƅ(C8HC@C XCPC0\C(`C4C8HH[]Ðff.Gzt`f.GztWf.G ztNG8f.G@zBu@f.E„t%$f.E„t Ð1Ðfff.S@jAHdH%(HD$1H@jH$•HIH@H0kHtf{8t5sC@j'HHD$dH3%(u5H[fHxH H@0H=PtHAWAVAAUATE1USHHHdH%(H$1HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$@uL15fDIHLHL!ɃJ԰tNHHL̰FIIIIA?IIDtIHLL ɃJ԰uIHItLHLİ`LYPHJP1HD$HD$HD$ MI)LHHEIL9Hl$Hl$Ld$ x>HHfDHtH1H2HHI9uHI)LHHD*HD$HH$$$$$Ht$@H0HItH訴ApD$PH$PEH?HHH$$$$$fH0H$H*Ht &Y00EHHHH$$$$$fH0H$H*Ht 訳Y0EHCHHH$$$$$fH0H$H*Ht *Y 0DHœHHH$$$$$fH0H$H*Ht 謲Y/DHGHHH$$$$$fH0H$H*Ht .Y/DHɒHHH$$$$$fH0H$H*Ht 谱Y.DHKHHH$$$$$ fH0H$H*Ht 2Y*.pDH͑HHH$$$$$fH0H$H*H t 贰 Y-PDH OHHH$$$$$ fH0H$H*H0t 60Y-0DH0ѐHHH$$$$$fH0H$H*H8t 踯8Y,DH8SHHH$$$$$qH0H^fH*H$@Ht 1@YQCH@̏HHH$$$$$H0H$HHt辮CHqHHH$$$$$/fH0H$H*HPtXCH HHH$$$$$)H0H$XHtCH谎HHH$$$$$H0H$\Ht袭pCHUHHH$$$$$fH0H$H*H`t<ƃƃ(H$dH3%(DZH[]A\A]A^A_HH9ZL觢L}PHH}PH5"~PH~P1HDŽ$pHDŽ$xHDŽ$II)LHH6IH9H$pH$xL$[HHHtH9H:HHH9uHH)HHHD*H$xHHL$x$$$$$LH0H@fH*HC0t HȫC0 H5|P1H|PYHH)HC0\HHC7H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHԀH5{PH{PHH)HHH6H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHH԰%H5{PH{PHH)HHH5H9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHdH55vPH&vPHH)HHH41H9t(HHtLLHHH9uHtHH5uPHuPE1HDŽ$HDŽ$HDŽ$HH)HHH-4LH9L$L$H$SXHLHtH9H:HHH9uHH)HHJD"H$HHH$$$$$$H?H0MItLA3PBHĈHHH$$$$$H0HXWfH*H$(Ht 袧(YjJ0BH(=HHH$$$$$[H0H$0Ht/HHL@L8MHu;DIHRH;B HRH5HHHtH9H:HHH9uHH)HHHD*H$xHH$$$$$H$fH0HH*Cpt HCpH5`\PHQ\P1Y$HDŽ$HDŽ$HDŽ$II)LHHCpIH9H$H$L$=HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$H0Hs!fH*HCxt HCxH5.[PH[P1Y HDŽ$HDŽ$HDŽ$II)LHHCxIH9H$H$L$<HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$H0H@ fH*HtHʋH5YPHYP1YHH)HHHH9HtHtLLHHH9uH$,+HH$0H$HH$8H$H$@H$H$HH$H$PHcHH01H5XPHXPHDŽ$HDŽ$HDŽ$II)LHHyIH9H$H$L$:HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$$H0H‰tHi҄H55[PH&[P1HDŽ$HDŽ$HDŽ$II)LHHIH9H$H$L$9HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$ H0HfH*HC t HވC  H5ZP1HYPYHH)HC \HHC^H9HtHtLLHHH9uH$,+HH$`H$HH$hH$H$pH$H$xH$H$HcHH`H5 YPHXPHH)HHHrH9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHԐ;H5,XPHXPHH)HHHH9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHH1xH5iTPHZTPHDŽ$HDŽ$HDŽ$ II)LHHnIH9H$H$L$ 6HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$@LfH0HH*tHzH5CSPH4SP1HDŽ$0HDŽ$8HDŽ$@IY$I)LHHIH9H$0H$8L$@4HHHtH9H:HHH9uHH)HHHD*H$8HH$$$$$H$`+fH0HH*tHYH5RPHQP1YHDŽ$PHDŽ$XHDŽ$`II)LHHIH9H$PH$XL$`3HHHtH9H:HHH9uHH)HHHD*H$XHH$$$$$H$fH0HH*tHAH5PPHPP1Y$HDŽ$pHDŽ$xHDŽ$II)LHHIH9H$pH$xL$2HHHtH9H:HHH9uHH)HHHD*H$xHH$$$$$H$fH0HH*tH,H5OPHOP1Y|HDŽ$HDŽ$HDŽ$II)LHHDIH9H$H$L$1HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$fH0HH*tHH5]NPHNNP1YTHDŽ$HDŽ$HDŽ$II)LHHIH9H$H$L$o0HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$λfH0HH*tHH5%MPHMP1YLHDŽ$HDŽ$HDŽ$II)LHHIH9H$H$L$O/HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$趺fH0HH*tH~H5KPHKP1Y,HDŽ$HDŽ$HDŽ$II)LHHi IH9H$H$L$/.HHHtH9H:HHH9uHH)HHHD*H$HH$$$$$H$ H0HfH*HC@tH}H5JPHJP1HDŽ$HDŽ$HDŽ$ II)LHHIH9H$H$L$ !-HHHtH:H9HHH9uHH)HHD*H$HH$$$$$H$@蛸fH0HH*tH|Y!~H5MPHMP1HDŽ$0HDŽ$8HDŽ$@II)LHHIH9H$0H$8L$@+HHHtH9H:HHH9uHH)HHHD*H$8HH$$$$$H$`޶H0HmfH*HC(t H{C( H5LP1HLPYHH)HC(\HHCwH9HtHtLLHHH9uH$,+HH$H$HH$H$H$H$H$H$H$HcHHzH5KPHKPHH)HHHH9HtHtLLHHH9uH$,+HH$ H$HH$(H$H$0H$H$8H$H$@HcHH zH5JPHJPHH)HHHH9HtHtLLHHH9uH$,+HH$PH$HH$XH$H$`H$H$hH$H$pHcHHPByH5FPHFPHH)HHH1H9t(HHtLLHHH9uHtHxH5EPHEP1HDŽ$PHDŽ$XHDŽ$`II)LHHIH9H$PH$XL$`:(HHHtH9H:HHH9uHH)HHHD*H$XHH$$$$$H$!H0HItHwA8_A?L$pL8H$DŽ$pLL[PCHIlXHHH$$$$$芲H0H$A$Ht`wLLDŽ$pZ0CHIWHHH$$$$$H0H$A$HtvHHL@MHu IH@H x H@HHH9?$LQlH5BCPHH0CPHH9$#lH54CPH%CPH95PHH9#kH5GPH GP6HH9#kH5GPHFPJHH9}#kH5GPHFP^HH9R#LdkH5FPHHFP,HH9!#L3kH5FPHHFPHH9"LkH53BPHH!BPHH9"LjH5"CPHHCPVHH9"LjH51FPHHFPhHH9]"LojH5FPHHEPHH9,"H>jH5/APIHAPHH9!jH5!APHAPH9@HH9!iH5 EPHDPHH9!iH5DPHDPHH9m!iH5DPHDP,HH9B!LTiH5ECPHH3CPHH9!L#iH5BPHHBPHH9 LhH5BPHHBPsHH9 LhH5BPHHBP!HH9~ LhH5BPHHBPHH9M L_hH5BPHHBPHH9 L.hH5BPHHBP~HH9hH5qBPHbBPlHH9LgH5cBPHHQBPmHH9LgH5RBPHH@BPSHH9^LpgH5aBPHHOBP?HH9-BgH5sBPHdBP6HH9gH5hBPHYBPJHH9fH5]BPHNBP^HH9LfH5>PHH=PfHH9{LfH5=PHH=PHH9JL\fH5=PHH=PHH9L+fH5=PHH=PHH9LeH5=PHH=PBHH9LeH5=PHH=PHH9LeH5=PHH=PHH9ULgeH5=PHH=PaHH9$9eH5j@PH[@POHH9eH5_@PHP@PcHH9dH5T@PHE@PwHH9LdH5F@PHH4@PEHH9rdH5HHH$$$$$fH0H$L$HA@$t8]LLDŽ$p @@HH$=HHH$$$$$H0H$H$Ht\LLDŽ$p @@HH$\=HHH$$$$$zH0H$H$HtN\HHMHu)DIHRHt z HRM9tAx ~S(LD$QLD$HP @ @$LH$L?>HIH $ LLD=I@HL$p<HHH$$$$$莖H0H$L$HA@$t`[HHMHu+IHRHt z HRM9tAx ~S(LD$PLD$HP @ @$LH$LO=HIH $ LLT<Ip@HL$;HHH$$$$$螕H0H$L$HA@$tpZHHMHu+IHRHt z HRM9tAx ~S(LD$OLD$HP @ @$LH$L_<HIH $LLd;IP@HL$:HHH$$$$$讔H0H$L$HA@$tYHHMHu+IHRHt z HRM9tAx ~S(LD$NLD$HP @ @$LH$Lo;HIH $ LLt:I0@HL$9HHH$$$$$输H0H$L$HA@$tXHHMHu+IHRHt z HRM9tAx ~S(LD$NLD$HP @ @$LH$L:HIH $LL9I@HL$8HHH$$$$$ΒH0H$L$HA@$tWHHMHu+IHRHt z HRM9tAx ~S(LD$MLD$HP @ @$LH$L9HIH $LL8I?HL$7HHH$$$$$ޑH0H$L$HA@$tVLLDŽ$p9?HH$I7HHH$$$$$gH0H$H$Ht;VHHMHu.f.IHRHt z HRM9tAx ~S(LD$KLD$HP @ @$LH$L'8HIH $LL,7I?HL$X6HHH$$$$$vH0H$L$HA@$tHUHHMHu+IHRHt z HRM9tAx ~S(LD$JLD$HP @ @$LH$L77HIH $LL<6I?HL$h5HHH$$$$$膏H0H$L$HA@$tXTHHMHu+IHRHt z HRM9tAx ~S(LD$ILD$HP @ @$LH$LG6HIH $hLLL5Ip?HL$x4HHH$$$$$薎H0H$L$HA@$thSLLDŽ$p6P?HI4HHH$$$$$ H0H$AHtRHHMHu*fDIH@Ht x H@M9tA ~C(rHHP L@ @$LI4HIt:LLL3IǾ0?HL$cRL$%FKLHRHL$:RL$xHL$%RL$sHL$RL$HL$QL$HL$QL$HL$QL$HL$QL$HL$QL$HL$QL$HL$}QL$sHL$hQL$oLWQHL$FQL$H5QHL$$QL$HQHL$QL$HPHL$PL$HPHL$PL$HPHnHL$PL$HfHH H*X"HfHH H*X铨L֧HH*HHHHHHzH]H=HHHHHHuHUH5H!H HHHH]H=H HHHɰHϯHHH0H֨fDAWAVL8AUATL@USHHHGdH%(HD$1HGHGHG HG(HG0HG8HG@HGHHGPHGXHG`HGhHGpHGxHLJHLJHLJHLJHLJHLJHLJHLJHLJHLJLJLJƇLJLJHLJLJƇHLJHLJHLJHLJHLJ HLJHLJHLJHLJHLJHLJLJLJHLJƇƇƇƇƇ(HLJHLJHLJHLJHLJHLJHLJHLJ HLJ0HLJ8HLJ@LJHHLJPLJXLJ\HLJ`HLJ(LJ0HHMHu-IHRHt9Z }HRHuM9tA9\$ ~C(AHP LX @$LI4.HIXLLL:-IăAD$$ jHxHpHDžhHDžpHDžxIHu fDIHRHtz HRHuL9 A|$  I|$(+IYQHxHu% IHRHtz HRHuL9 A|$  I|$( IPHxHu; IHRHtz HRHuL9 A|$  I|$(+IPHxHuQ IHRHtz HRHuL9% A|$  I|$( I9PHxHug IHRHtz HRHuL9; A|$ / I|$(+IOHxHu} IHRHtz HRHuL9Q A|$ E I|$(/IyOHxHu IHRHtz HRHuL9g A|$ [ I|$(&IOHxHu IHRHtz HRHuI9} A|$ t I|$(/NHxH HHHRHtz HRHuH9I x  I|$( IXNHxHu IHRHtz HRHuL9 A|$  I|$(+MHxH HHHRHtz HRHuH9I x  I|$( IMHxHu IHRHtz HRHuL9 A|$  I|$(+I9MHxHu IHRHtz HRHuL9 A|$  I|$(/ILHxHu6 IHRHtz HRHuL9 A|$  I|$( IyLHxHuL IHRHtz HRHuL9 A|$  I|$(+LHxHf HHHRHtz HRHuH9I6 x , I|$(/IKHxHuz IHRHtB HRHuL9N A|$ B I|$(&[KHxH HfDHHRHtz HRHuH9Ie x [ I|$(/JHxH HfDHHRHtz HRHuH9I~ x t I|$(+IJHxHu IHRHtz HRHuI9 A|$  I|$(/HIܿ0M&HhHP L@ H@(gIHIMH91B A9D$ @HL_>HfLh0ID$(HxHg LMB0 ID$(HxHg LM0ID$(HxHgI LM/ID$(HxHg LM/;ID$(HxHgLM/ID$(HxHg LM//ID$(HxHgALM^/ID$(HxHgLM8/#ID$(HxHgLM/~ID$(HxHgLM.ID$(HxHgLM.ID$(HxHg+LM.ID$(HxHgLMz.ID$(HxHgLMT.ID$(HxHgLM..ID$(HxHgLM.SID$(HxHg<LM-ID$(HxHgLM-ID$(HxHgLM-!ID$(HxHgKLMp-ID$(HxHgELMJ-5ID$(HxHg7LM$-ID$(HxHg1LM, ID$(HxHg{LM,ID$(HxHguLM,ID$(HxHgLM,ID$(HxHgLMf,2ID$(HxHgLM@,+ID$(HxHg%LM,eID$(HxHgLM+ID$(HxHgumLM+]ID$(HxHguLM+ЃAHOHHt$87fDЃAHOHspHt$7afDЃAHOHHt$6fDHt$eЃAHOHL]Ht$6NЃAHOH/Ht$K6fDЃAHOHHt$6fDЃAHOHhHt$5YfDЃAHOHHt$5fDЃAHOHHt$k5fDЃAHOH3Ht$35fDЃAHOH3bHt$4SfDЃAHOHHt$4fDЃAHOHHt$4fDHt$VcЃAHOHHt$D4ЃAHOHBHt$ 43fDЃAHOHHt$3fDЃAHOH5Ht$3fDЃAHOHm(Ht$c3fDЃAHOHHt$+3fDЃAHOHHt$2fDЃAHOHqHt$2fDЃAHOHHt$2fDЃAHOHHt$K2fDЃAHOHHt$2fDЃAHOHHt$1fDЃAHOHHt$1fDЃAHOHgHt$k1fDЃAHOHgHt$31fDЃAHOHHt$0fDЃAHOH\Ht$0fD)&mU    bDPJHPJHPJHKPJHPJHZPJHPJHPJHPJHJPJHPJHPJHPJHJPJHPJHePJHPJHrPJHDPJHPJHPJHPJH\PJHVPJHPJHPJHPJHPJH@PJHRPJHUH@SHHHPHXHpLJ@HLJHHLJ`LJpHLJxHLJHHhH[]HxHhH;HHH8H$AWAVIAUATUSHHH8dH%(HD$(1HH|$ HD$gHpHH&H|$ H|$ H!-{8DkjDCiHD$H|$ 1HP$ AHZLHHEt(HD$A I)׋PxH|$HD$F,8HHuHt$LHVM,HT$HzHgu~Ht$(dH34%(H8[]A\A]A^A_HHA1H@0H=Puu{8HHA0H@0H=P0HDЃAHt?JʅdHt$ HD$p+HD$K1HAyJqrH H H|$ +HD$HxHgt Ht$ YHj"f.ATUISHnHH+.HHGHGHHHudHHHCHkMD$I<$I9t8HHf.HtH1H2HHI9uHI)IIDHC[]A\HH9w HQZf.USHHHOHHt#H>,HC(HH[]H9t1B 9E @DUSHH_HtND@HCAHtHËK D9HCE1HuEHu"1HD9HLHMH[]H_1H9_HtHHrHDEH HAUHGATUSHHIHH9D"D;f }GHGH9Ht*H#D;` H~HxHHEHEH[]A\A]fD~nHW 1H9tH(D;` H}:H{HHEHDH[]A\A]fH(tH_ 9C |.fDLHH[]A\A]fHH1[]A\A]1HefDAUATHOUSHHWHHfDHHRHt;B ~HRHuH9t9C ~MHI(IċEHIT$ AD$$LAD$ HHt(HLLHHHC$[]A\A]LH덐f.Pw Pf.vXgfD\fÐfffff.USHf(H(\OHW@Yf. eP\ ff(YYSP^f(Qf.XEY 7XE X*#f(D$f(L$U0L$YXT$f(T$\ #fTه%^T$f.w f(uf(c OYM0YM@YH([]fD`Of.X ef(L$JL$fffff.Sf(HH\OPf. NweNf.vX GeHYYXYXT$-XD$H[f\ dfDUSHHX\GHO@f(Yf.eND$ d$(f(\%dd$ l$(CNf(YY^Qf.XKD$ Y XC X !f(D$Df(L$S0L$YXT$f(T$\ a!fT=q\T$f.w f(uf(Ht$@H|$Hy K0Yd$@T$H\Qf.Yd$0f(f(\K0X & f(Ht$@H|$HX\$L$@Ht$@T$HH|$Hf(L$\$YC(T$Xf(YC8Xd$HHt$@H|$Hd$d$0L$Yc0CxT$YYKXt$@\t$8Y\$(XCYYShXD$ Y\$0XCpXX -X[f(T$@\d$HYKHT$(d$l$YD$ XC`\ XqHt$@H|$H\$0t$8T$(YY\$DD$@DL$Hd$f(l$AYfD(f(YEYY(f(\fA(AY\fA(YXYYAXYAY\Y YXf(fA(@YAY\X08HX[]Jf.D$ Kd$ X%`d$ 2T$d$zT$f(d$`f(*fDAVAUATUHPSLHHH LJPHLJXHLJpH`HhHGHGHGHG HG(HG0HG8HG@HGHHGPHGXHG`HGhHGpHGxHLJHLJHLJLJLJdH%(HD$1ƇLJLJHLJHLJHLJHLJLJƇHLJHLJHLJHLJHLJƇƇƇ0T HP @ H@(gHLIvHHH91B A9E @HL !HpI}(+eHXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLI vHH7%H9.%1B A9E @HLh HpI}( HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLISuHHu$H9l$1B A9E @HLHpI}(+HXIHu+@IHRHtz HRHuL9tA} ~i0M,HP @ H@(gLLItHH#H9#1B A9E @HLHpI}( =HXIHu+@IHRHtz HRHuL9tA} ~i0MtHP @ H@(gLLIsHzH"H9"1B A9E @HL@HpI}(+HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLI+sHH/"H9&"1B A9E @HLHpI}(/HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLIsrHjHm!H9d!1B A9E @HLHpI}(&HXIHu+@IHRHtz HRHuL9tA} ~i0MLHP @ H@(gLLIqHH H9 1B A9E @HLHpI}(/]HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLIqHzHH91B A9E @HL`HpI}( HXIHu/@IHRHtz HRHuI9A} ~i0MHP @ H@(gLLIGpHH#H91B A9E @HLHpI}(+HXIHu/IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLIoHrH]H9T1B A9E @HLHpI}( -HXIHu+@IHRHtz HRHuL9tA} ~i0MdHP @ H@(gLLInHHH91B A9E @HL0HpI}(+uHXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLInHHH91B A9E @HLxHpI}(/HXHHHHRHtz HRHuH9Itx ~i0MHP @ H@(gLLIYmHH H91B A9E @HLHpI}( HXHHfDHHRHtz HRHuH9Itx ~i0M*HP @ H@(gLLIlH HCH9:1B A9E @HLHpI}(+;HXH? HfDHHRHtz HRHuH9Itx ~i0MjHP @ H@(gLLIkH HyH9p1B A9E @HL6HpI}(/{HXIHu2f.IHRHtB HRHuL9tA} ~i0MHP @ H@(gLLIkH1 HH91B A9E @HLwHpI}(& HXH HHHRHtz HRHuH9Itx ~i0MHP @ H@(gLLIYjH HH91B A9E @HLHpI}(/ HXIHu1f.IHRHtz HRHuL9tA} ~i0M,HP @ H@(gLLIiH H H91B A9E @HLHpI}(+= HXHY HHHRHtz HRHuH9Itx ~i0MjHP @ H@(gLLIhH HAH981B A9E @HL6HpI}(/{ HXIHu1f.IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLIhH HyH9p1B A9E @HLxHpI}(+ HXHHHHRHtz HRHuH9Itx ~i0MHP @ H@(gLLIYgHHH91B A9E @HLHpI}(/ HXIHu5f.IHRHtz HRHuI9 A} ~i0M(HP @ H@(gLLIfHHH91B A9E @HLHpI}(/9 HXIHu/IHRHtz HRHuL9tA} ~i0MlHP @ H@(gLLIeHB HH91B A9E @HL8HpI}( }HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLI#eHHYH9P1B A9E @HLHpI}(/HXIHu+@IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLIkdHHH91B A9E @HLHpI}(+ HXHHHHRHtz HRHuH9Itx ~i0M:HP @ H@(gLLIcHHCH9:1B A9E @HLHpI}(+KHXH7HfDHHRHtz HRHuH9Itx ~i0MzHP @ H@(gLLIbHHyH9p1B A9E @HLF HpI}(/HXHoHfDHHRHtz HRHuH9Itx ~i0MHP @ H@(gLLI)bHPHH91B A9E @HL HpI}( HXIHu1f.IHRHtz HRHuL9tA} ~i0MHP @ H@(gLLIkaHH#H91B A9E @HL HpI}(/ HXHHHHRHtz HRHuH9Itx ~i0M:HP @ H@(gLLI`HHWH9N1B A9E @HL HpI}(/KHXIHu1f.IHRHtz HRHuL9tA} ~i0M|HP @ H@(gLLI_HHwH9n1B A9E @HLH HpI}(+HD$dH3%(HǃHǃHǃHǃ Hǃ(Hǃ0Hǃ8Hǃ@H []A\A]A^IEIII-IuII%I]IIM@IU(HzHg LHD$^HD$IIU(HzHgy LHD$.HD$IIU(HzHg! LHD$HD$IIU(HzHgALHD$HD$IIU(HzHg LHD$HD$ICIU(HzHgLHD$nHD$IIU(HzHgu LHD$>HD$IcIU(HzHgLHD$HD$IIU(HzHgc LHD$HD$IIU(HzHgLHD$HD$IIU(HzHg+ LHD$~HD$IIU(HzHgKLHD$NHD$I#IU(HzHg LHD$HD$IIU(HzHgLHD$HD$IIIU(HzHgLHD$HD$IQIU(HzHgLHD$HD$IcIU(HzHg LHD$^HD$IIU(HzHg>LHD$.HD$IAIU(HzHgLHD$HD$IIU(HzHgLHD$HD$I1IU(HzHgrLHD$HD$IIU(HzHgLHD$nHD$IIU(HzHg:LHD$>HD$IIU(HzHgZLHD$HD$IIU(HzHg<LHD$HD$IIU(HzHgHLHD$HD$IiIU(HzHgLHD$~HD$IIU(HzHgLHD$NHD$IyIU(HzHgLHD$HD$IIU(HzHgLHD$HD$IIU(HzHgLHD$HD$IIU(HzHgu4LHD$HD$IIIP ЃAHJʅHt$HD$HD$똹ЃAHM JʅJHt$HD$HD$1ЃAHJʅ?Ht$HD$HD$&ЃAHW JʅHt$HD$PHD$kЃAHJʅIHt$HD$HD$0ЃAHJʅHt$HD$HD$ЃAHJʅHt$HD$HD$zЃAHJʅHt$HD$dHD$ЃAHJʅHt$HD$)HD$ЃAHJʅBHt$HD$HD$)ЃAHJʅHt$HD$HD$ЃAHJʅLHt$HD$xHD$3ЃAH$JʅHt$HD$=HD$ЃAHJʅHt$HD$HD$}ЃAH.Jʅ[Ht$HD$HD$BЃAHJʅHt$HD$HD$ЃAHJʅeHt$HD$QHD$LЃAHJʅ:Ht$HD$HD$!ЃAHJʅ_Ht$HD$HD$FЃAHJʅHt$HD$HD$ЃAH<JʅiHt$HD$eHD$PЃAHJʅHt$HD$*HD$ЃAHFJʅHt$HD$HD$ЃAH JʅHt$HD$HD$ЃAHpJʅHt$HD$yHD$ЃAHJʅHt$HD$>HD$ЃAH:Jʅ'Ht$HD$HD$ЃAHJʅlHt$HD$HD$SЃAHJʅ1Ht$HD$HD$ЃAHIJʅ6Ht$HD$RHD$ЃAHJʅ{Ht$HD$HD$bЃAHcJʅHt$HD$HD$\3q#aY+_7]JqrJqrkJqr,JqrJqr JqrJqrJqrJqrjJqr Jqr"JqrJqrJqrJqrJqrJqrJqrOJqrgJqrJqr[JqrJqrJqrJqrJqrEJqr]JqrJqrQJqrJqr Jqrn7HXHLVHf.fGGGG G(G0G8G@fGHGGGG G(G0G8G@GPGXf.ffG G0G4GGGG(G8f.USfHH(+G 9w0f(Љ\G_*Y 5XG(XYOXG4iQff(*\ VfTd$f. zf(5`T$\f(t$f(\PXCL$XK8,f\K(*d$f(T$f.%w{^T$\$f(L$\$H(Y[]Xf(@f(T$=\f(|$f(?d$f(T$f.%vC8+k [f( 3Xf\cf(T$*YCXL$YX\f(T$f(f.f(T$=\f(|$f(T$f(X_8f(5T$t$X\f(BT$f(fGGGG G(G0G8G@GHGPfGGGG @fGGGfSȚHdH%(HD$1@HH8tCHHxHgtЃAHtIPЅHt$H[H8ufHD$dH3%(uH[f.PJHfffff.SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$HHxufHD$dH3%(uH[f.PJHfffff.fG@GGGG G(G0G8ÉfSHf(H @W()*\,…g3gY_0YY,f*\RfTf.\O f('0\_G5Xd$t$YOXYXf(\f(\?L$XXK8\K"d$D$^d$f(WYD$XD$H [D\O f(w/\_W=%Xd$|$YOXf(YX\f(d$D$pfD\O f(/\_W85Xd$t$YOXf(YX\f('d$D$fDSȫHdH%(HD$1@HH8tCHHxHgtЃAHtIPЅHt$HH8ufHD$dH3%(uH[f.PJHfffff.SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$H HxufHD$dH3%(uH[f.PJHnfffff.fGGG GGG G(G0G8G@GHGPGXG`GhGpGxLJ8 (0Ðf.YY2XÐf.USHf(H(G(Yf(YY2^Qf.\XEY ^XEXQf(D$f.f(L$U L$YXT$f(T$\ fTL%#T$f.w f(uf( 1YM YM(YH([]f(L$L$@Sf(HH\YYXYXT$XD$H[ÐUSHf(HXO(1f(Yf(l$(YY^Qf.y\ ҖXC\$ YXCXTf(D$f.f(L$AS L$YXT$f(T$\ ^fTYK="T$f.w f(uf(Ht$@H|$HK DYd$@T$H\Qf.Yd$0f(f(\K >XC@ ɕlf(Ht$@H|$HX\$L$@Ht$@T$HH|$Hf(L$\$YCXT$Xf(YC`XXd$HHt$@}H|$Hd$d$0L$Yc ChT$YYKxt$@\t$8Y\$(XCpYYXD$ YCP\$0XC8XX- CHf(T$@\d$HYT$(d$l$YD$ XC0\ yXqHt$@H|$HU\$0t$8T$(YY\$DD$@DL$Hd$f(l$AYfD(f(YEYY[Hf(\fA(AY\fA(YXYYAXYAY\YYXf(fA(0YAY\X (HX[]f(\$R\$mT$d$6T$f(d$7fGGXLJLJGGG G(G0G8G@GHGPG`GhGpGxLJLJ0 (8@HPX`hpxfDfGGGGGGGG G(f.DЃAHtG~fDGPWfffff.SȼHdH%(HD$1@HH8tCHHxHgtЃAHtIPЅHt$H{H8ufHD$dH3%(uH[f.PJHfffff.SHdH%(HD$1@HHxtCHHxHgtЃAHtIPЅHt$HHxufHD$dH3%(uH[f.PJH.fffff.fGGGGGGG0GGG8GG@GGHGGXGG`GGhGGpGGG$G%G&G'G(G G,GPGxLJLJƇƇƇƇƇ (08@HPX`LJhLJpLJxLJ(LJ` 08@HPXhpLJxLJG (08@HPX`hpxÐHGgfUSHHAHt$HT$H)H~vL[H AH1A;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]ÐfDLHBL)H~dMJAH AI1fDA~,DA+I)fDLHHH!HH9uIM9u1ÐfDUSHHT$HQHt$+ H)HHcHHHtH؅~oL[H AHӐA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]fff.HHT$Ht$+HcHHHT@ATUS_t4_t,_t$_t_tG,1;GPtf.[]A\fWx;9 tHF@˅@j$HHH@L0kMA|$8AD$C@j:HDe,EEEB̅EE@jDe D@jIHH@IHtW}8t8ECLH L4I$ LP0YHHE HP0rfGt GtGf.GtGfGt0Gt(Gt GtGGGGG@fDUSHHHE8ECCE E@C CEHC(C 8EXHC0E`C8EhC@CHEpCPCXC`ChCpCxE0HP(08@ @H[]fff.USHHHOCCCCPC CHC(CCHH[]ÐfUSHHH`EhC@HCpCxCC C(C0C8H[]ÐfDUSHHHCCCC C(CX(C0C8C@CHCPC`ChCp Cx`08@HPXhpx 0H(8@HPX`hx H[]fAUATUSHHXH|$ H$0dH%(H$H1kH|$ HD$(HD$0HD$8HwHH$0EHHDŽ$/HtTHA11HMHHH?IL T0HtHH)0uHHuLGPL 8P1HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HItHfH|$@˅H|$@j̅HHDHH|$@A lD$хL[ PL L P1HDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$|LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$sHfH*4$4$H(tH(<$H$@˅H$@ЅHH$HOH$@1PL PL PHDŽ$HDŽ$HDŽ$ MM)LHHIM9H$H$L$ CLHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$H/fH* $<$H0tH0$H$P˅VH$PIЅHHT$HH$P1Li PL Z PHDŽ$0HDŽ$8HDŽ$@MM)LHHuIM9H$0H$8L$@LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8HfH*$ $H8tHb8$$H$` ˅H$`ЅHH$HH$`H$p ˅[H$p ̅HHH躿H$pMDHD$ HxHgH$HdH3%(D8HX[]A\A]f.fDHH9LHLCPL 4P3L PL P1HDŽ$HDŽ$HDŽ$MM)LHH3IM9H$H$L$LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HfH*D,HD`tH3D`H$˅H$ υHHDHȻH$1yL* PL  PHDŽ$HDŽ$HDŽ$MM)LHHmIM9H$H$L$LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$CHfH* $,$HhtHh$H$˅~H$qυHH|$HH$1 LPL PHDŽ$HDŽ$HDŽ$ MM)LHH$IM9H$H$L$ LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$HfH*HptH蔿pY H$˅p$ H$υHH$HH$1L3PL $PHDŽ$0HDŽ$8HDŽ$@MM)LHH֓IM9H$0H$8L$@LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8fHH*xtHEx=H$˅Y<$xD$H$υHHD$HgH$1hLPL PHDŽ$PHDŽ$XHDŽ$`MM)LHHLIM9H$PH$XL$`LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XSfHH*tHY9H$˅D$pH$cυHHnD$HH$1LBPL 3PHDŽ$pHDŽ$xHDŽ$MM)LHHIM9H$pH$xL$mLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$xfHH*tH荻Y8H$˅D$H$ υHHD$HH$1LPL PHDŽ$HDŽ$HDŽ$MM)LHH%IM9H$H$L$LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HߖfH*\$t$HtH#d$H$˅込H$ υHHD$H^H$1_LPPL APHDŽ$HDŽ$HDŽ$MM)LHHۉIM9H$H$L$LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$+H\fH*l$|$HtHȸt$H$˅cH$V υHHaD$HH$1LOL OHDŽ$HDŽ$HDŽ$MM)LHH`IM9H$H$L$pLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$HfH*D,HDtH{DH$˅H$ υHHDHH$1LrOL cOHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$=LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tH=YH$ ˅D$ȸH$  υHHD$HhH$ 1iLOL OHDŽ$HDŽ$HDŽ$ MM)LHHIM9H$H$L$ ݔLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$6H+fH*HtHߴYGH$0˅D$jH$0]υHHhD$H H$01 L|OL mOHDŽ$0HDŽ$8HDŽ$@MM)LHHKIM9H$0H$8L$@LHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8fHH*tH腳Y$H$@˅$H$@ υHH$H赸H$@1趾LOL OHDŽ$PHDŽ$XHDŽ$`MM)LHH}IM9H$PH$XL$`:LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XfHH*tH5YH$P˅$H$P贾 υHH追$HbH$PeH$`C˅[fH$`Y ̅HHdHyH$` L8OL )O1HDŽ$pHDŽ$xHDŽ$MM)LHH[IM9H$pH$xL$LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$xH!fH*D,HDtHxDH$p˅H$p ЅHHDH H$p1辻LOL OHDŽ$HDŽ$HDŽ$MM)LHH?IM9H$H$L$LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tH= }H$˅Y $D$迱H$費 ЅHH轺D$H_H$1`LQOL BOHDŽ$HDŽ$HDŽ$MM)LHH}IM9H$H$L$LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$KfHH*tHݭYM+H$˅D$hH$[ЅHHfD$HH$1 LOL OHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$mLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tH腬Y$H$˅$H$*ЅHH$H赱H$1趷LgOL XOHDŽ$HDŽ$HDŽ$MM)LHH}IM9H$H$L$ LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tH5YE(H$˅$H$贷2ЅHH迶$HbH$1cLOL OHDŽ$HDŽ$HDŽ$ MM)LHHxvIM9H$H$L$ LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$SfHH*tHY&H$˅$qH$d;ЅHHo$HH$1LOL uOHDŽ$0HDŽ$8HDŽ$@MM)LHH|IM9H$0H$8L$@LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8H fH*<$$HtH肨 $H$˅H$ DЅHH$H迭H$1LOL OHDŽ$PHDŽ$XHDŽ$`MM)LHH]uIM9H$PH$XL$`,LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XHfH*$$$HtH*$H$˅ƩH$蹳 PЅHHIJ$HgH$1hLOL OHDŽ$pHDŽ$xHDŽ$MM)LHHwIM9H$pH$xL$LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$xSfHH*tHY]H$C%˅$mH$` \ЅHHk$HH$1L OL OHDŽ$HDŽ$HDŽ$MM)LHHTzIM9H$H$L$LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$fHH*tH荤Y H$C&˅$H$ fЅHH$H趩H$1路LOL OHDŽ$HDŽ$HDŽ$MM)LHHDnIM9H$H$L$3LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$H|fH*HtH,Y|H$C'˅$败H$觯 pЅHH貮$HUH$1VL'OL OHDŽ$HDŽ$HDŽ$MM)LHHpIM9H$H$L$LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$#H?{fH*$$,$H tH¡ ,$H$ C(˅ZH$ M zЅHHX$HH$ H$0C˅[H$0 ̅HHHH$0襬XLOL O1HDŽ$HDŽ$HDŽ$MM)LHHwIM9H$H$L$zLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$nHAʼnC,t H+Dk,H|$P˅ӢH|$Pɬ y̅HHԫDHəH|$P1}LOL OHDŽ$HDŽ$HDŽ$ MM)LHH5oIM9H$H$L$ ~LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$NH%{fH*HC0t HC0Y-AH|$`˅C0$菡H|$`腫̅HH萪$H3H|$`17LHOL 9OHDŽ$0HDŽ$8HDŽ$@MM)LHHpIM9H$0H$8L$@k}LHDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0HH$8&fHH*C8t H軝C8YH|$p˅C8$PH|$pF̅HHQ$HH|$p1LOL OHDŽ$PHDŽ$XHDŽ$`MM)LHHiIM9H$PH$XL$`|LHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$PHH$XHxfH*HC@t HrC@YH$˅C@$H$̅HH$H襡H$1覧LwOL hOHDŽ$pHDŽ$xHDŽ$MM)LHH>eIM9H$pH$xL$ {LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$pHH$xvHwfH*HCHt H"CHY5H$˅CH$贝H$觧̅HH貦$HUH$XH$C˅[YH$L ̅HHWHlH$LOL O1HDŽ$P HDŽ$X HDŽ$` MM)LHHpIM9H$P H$X L$` xLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$P HH$X HCufH*HtHoY_H$@"˅$H$@ͅHH$H蜞H$@1蝤LnOL _OHDŽ$p HDŽ$x HDŽ$ MM)LHHPdIM9H$p H$x L$ yxLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x fHH*tH YXH$P%˅$謚H$P蟤ͅHH誣$HMH$P1NLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHjIM9H$ H$ L$ 2wLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ >fHH*tHЖYH$`(˅$\H$`OͅHHZ$HH$`LOHO1LH)HHHlI9HtfHtH2H1HHL9u蹀+HD$0HT$8H$HcH$HHHĀԕH$p+˅vH$piͅHIt@L舑H$pLOH}O1LH)HHHxbL9HtDHtH2H1HHL9u蹀+HD$0HT$8H$HcH$HHHĐH$-˅莗H$聡ͅHI茠@L蠐H$3LOHuO1LH)HHHkL9HtDHtH2H1HHL9u蹀+HD$0HT$8H$HcH$HHHĠH$/˅視H$虠ͅHI褟@L踏H$KL|OHmO1LH)HHHcI9HtDHtH2H1HHI9u蹀+HD$0HT$8H$HcH$HHHİH$1˅辕H$豟ͅHI輞@LЎH$cLtOHeO1LH)HHH,hL9HtDHtH2H1HHI9u蹀+HD$0HT$8H$HcH$HHH4H$3˅֔H$ɞͅHIԝ@LH$1yLjOL [OHDŽ$ HDŽ$ HDŽ$ MM)LHH[IM9H$ H$ L$ uqLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ffHH*tHY@H$6˅$脓H$w ͅHH肜$H%H$1&LOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHEdIM9H$ H$ L$ *pLH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ fHH* tH襏 YH$9˅ $1H$$ ΅HH/$HҔH$1ӚLOL uOHDŽ$ HDŽ$ HDŽ$ MM)LHH\IM9H$ H$ L$ nLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ 裺HifH*4$4$H(tHB(<$H$;˅ސH$њ ΅HHܙ$HH$1耙LOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH^IM9H$ H$ L$ lmLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ NH}hfH* $<$H0tH0$H$=˅艏H$| ΅HH臘$H*H$1+LOL OHDŽ$0 HDŽ$8 HDŽ$@ MM)LHHWIM9H$0 H$8 L$@ GlLHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0 HH$8 HffH*$$H8tH蒋8$$H$?˅.H$! &΅HH,$HϐH$1ЖL!OL OHDŽ$P HDŽ$X HDŽ$` MM)LHHg]IM9H$P H$X L$` jLHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$P HH$X 蛶H|efH*,$$H@tH:@4$H$A˅֌H$ɖ 2΅HHԕ$HwH$1xLOL OHDŽ$p HDŽ$x HDŽ$ MM)LHHUIM9H$p H$x L$ iLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x FHdfH*<$$$HHtHH $H$ D˅聋H$ t>΅HH$H"H$ 1#L4OL %OHDŽ$ HDŽ$ HDŽ$ MM)LHHWIM9H$ H$ L$ GhLHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ HbfH*$,$HPtH蒇P$H$0F˅.H$0!E΅HH,$HόH$01ВLOL OCHDŽ$ HDŽ$ HDŽ$ MM)LHH3PIM9H$ H$ L$ fLHf.HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ 蓲H`fH*$$4$HXtH2X,$H$@I˅ΈH$@ M΅HH̑$HoH$@rH$PCCL˅sH$Pf ̅HHqH脁H$PL#OL O1HDŽ$0 HDŽ$8 HDŽ$@ MM)LHHVQIM9H$0 H$8 L$@ ,dLHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 ްHAʼnCxt H蛄DkxH$˅@H$3 ̅HH>DH3~H$1LOL OHDŽ$P HDŽ$X HDŽ$` MM)LHHKIM9H$P H$X L$` aLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$P HH$X ְfHH*tHhYH$ ˅$H$  ̅HH$H蕈H$ 1薎LgOL XOHDŽ$p HDŽ$x HDŽ$ MM)LHHHIM9H$p H$x L$ `LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x 膯fHH*tHYpH$0˅$褄H$0藎 ̅HH袍$HEH$01FLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH;GIM9H$ H$ L$ aLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 6fHH*tHȀ 0H$@˅Y $D$JH$@=ͅHHHD$HH$@1L|OL mOHDŽ$ HDŽ$ HDŽ$ MM)LHHFIM9H$ H$ L$ `LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ֬fHH*tHhY$H$P˅$H$P ͅHH$H蘄H$P1虊L OL OHDŽ$ HDŽ$ HDŽ$ MM)LHHCIM9H$ H$ L$ 5_LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 膫fHH*tH~YhH$`˅$褀H$`藊ͅHH袉$HEH$`1FLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHBIM9H$ H$ L$ ]LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 6fHH*tH|YH$p˅$TH$pGͅHHR$HH$p1L'OL OHDŽ$ HDŽ$ HDŽ$ MM)LHH@IM9H$ H$ L$ YLH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ çHSfH*$$HtHb{$H$˅}H$$ͅHH$H蟀H$袆H$C˅[}H$薇 ̅HH衆HvH$ILOL O1HDŽ$ HDŽ$ HDŽ$MM)LHHQIM9H$ H$ L$VYLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ HSfH*D,HDtHyDH$m˅]|H$P ΅HH[DHPsH$1LOL OHDŽ$HDŽ$HDŽ$ MM)LHHrJIM9H$H$L$ XLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$ΤH/RfH*$,$HtHmx$H$o˅ {H$΅HH$H}H$1諃LOL OHDŽ$0HDŽ$8HDŽ$@MM)LHHBIM9H$0H$8L$@/XLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0HH$8vHXQfH*HtHwYwH$ r˅$yH$ 螃΅HH詂$HL|H$ 1MLOL OHDŽ$PHDŽ$XHDŽ$`MM)LHHFIIM9H$PH$XL$`ULHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$PHH$XHOfH*D,HDtHuDH$0t˅exH$0X ΅HHcDHXoH$01 L:OL +OHDŽ$pHDŽ$xHDŽ$MM)LHHAIM9H$pH$xL$TLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$pHH$xfHH*tHtYH$@w˅$wH$@ ΅HH$HyH$@1LǽOL OHDŽ$HDŽ$HDŽ$MM)LHHCIM9H$H$L$bSLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$膟H,MfH*HtH/sYH$Pz˅$uH$P΅HH~$H\xH$P1]~LNOL ?OHDŽ$HDŽ$HDŽ$MM)LHH&<IM9H$H$L$RLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$NfHH*tHq- H$`}˅Y,$D$btH$`U~ ΅HH`}D$HwH$`1}LԺOL źOHDŽ$HDŽ$HDŽ$MM)LHHnGIM9H$H$L$PLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$fHH*tHpYH$p˅D$sH$p} ΅HH|D$HuH$p1{LeOL VOHDŽ$HDŽ$HDŽ$MM)LHHDIM9H$H$L$xOLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$覜fHH*tH8oY$H$˅D$qH${ ΅HHzD$HftH$1gzLOL OHDŽ$HDŽ$HDŽ$ MM)LHH*=IM9H$H$L$ 3NLHDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$VfHH*tHmYXH$˅D$spH$fz υHHqyD$HsH$1yLOL vOHDŽ$0HDŽ$8HDŽ$@MM)LHH>IM9H$0H$8L$@LLHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0HH$8fHH*tHlY$H$˅$'oH$yυHH%x$HqH$wH$C˅[nH$x ̅HHwHgH$rw%LOL O1HDŽ$HDŽ$HDŽ$MM)LHHY?IM9H$H$L$wJLHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$3HAʼnCPt HjDkPH$˅mH$w ̅HHvDHdH$19vLʺOL OHDŽ$HDŽ$HDŽ$MM)LHH0IM9H$H$L$DHLHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$&fHH*CXt HiCXYH$˅CX$MlH$@v ̅HHKu$HnH$1tL`OL QOHDŽ$HDŽ$HDŽ$MM)LHH1IM9H$H$L$"GLHDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$ޕfHH*C`t HshC`YH$˅C`$kH$t̅HHt$HmH$1sLOL OHDŽ$HDŽ$HDŽ$ MM)LHHJ0IM9H$H$L$ ELHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$蓔fHH*Cht H(gChYH$˅Ch$iH$s ̅HHr$H[lH$1\rLOL ~OHDŽ$ HDŽ$ HDŽ$ MM)LHHw-IM9H$ H$ L$ DLHf.HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ CfHH*Cpt HeCpY3H$˅Cp$jhH$]r̅HHhq$H kH$qH$C˅[hH$r ̅HH qH"aH$phLOL rO1HDŽ$ HDŽ$ HDŽ$ MM)LHH;IM9H$ H$ L$ CLH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 螑fHH*`tH0d`YH$`R˅`$fH$`pW΅HHo$H]iH$`1^oLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH,IM9H$ H$ L$ ALH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ NfHH*htHbhYH$pU˅h$leH$p_o^΅HHjn$H hH$p1nLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH)IM9H$ H$ L$ ?LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ fHH*$ptHap4$H$W˅'dH$n e΅HH%m$HfH$1lL:OL +OHDŽ$0 HDŽ$8 HDŽ$@ MM)LHH;)IM9H$0 H$8 L$@ @LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 薌H9fH*HxtH?`xYH$Z˅x$bH$ls΅HHk$HleH$1mkLOL OHDŽ$P HDŽ$X HDŽ$` MM)LHHW&IM9H$P H$X L$`  =LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$P HH$X >H8fH*<$<$HtH^ $H$\˅yaH$lk{΅HHwj$HdH$1jLLOL =OHDŽ$p HDŽ$x HDŽ$ MM)LHH&IM9H$p H$x L$ ;LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x H6fH*$$HtH]$H$^˅!`H$j ΅HHi$HbH$1hLԧOL ŧOHDŽ$ HDŽ$ HDŽ$ MM)LHH$IM9H$ H$ L$ :LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ 蓈H5fH*$$$HtH2\,$H$`˅^H$h΅HHg$HoaH$1pgLaOL ROHDŽ$ HDŽ$ HDŽ$ MM)LHH#IM9H$ H$ L$ 9LHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ^fHH*$$tHZ4$H$b˅]H$zg΅HHf$H(`H$1)fLOL OHDŽ$ HDŽ$ HDŽ$ MM)LHH IM9H$ H$ L$ 7LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$ HH$ HU2fH*<$$$HtHY $H$d˅.\H$!f΅HH,e$H^H$dH$CCCh˅[H$e ̅HHdHTH$sd&LOL pO1HDŽ$0 HDŽ$8 HDŽ$@ MM)LHH:&IM9H$0 H$8 L$@ `7LHf.HtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 6HAʼntHWDH$˅ZH$d -ͅHHcDHQH$16cL'OL OHDŽ$P HDŽ$X HDŽ$` MM)LHHIM9H$P H$X L$`  8LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$P HH$X HAʼntHVDH$˅_YH$Rc 9ͅHH]bDHRPH$1bLԤOL ŤOHDŽ$p HDŽ$x HDŽ$ MM)LHHIM9H$p H$x L$ 6LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$p HH$x fHH*tHUH$˅Y$D$ XH$aGͅHHaD$HZH$1`L\OL MOHDŽ$ HDŽ$ HDŽ$ MM)LHH IM9H$ H$ L$ w5LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ 薁fHH*tH(TY$H$ ˅$VH$`PͅHH_$HXYH$1Y_LOL ۡOHDŽ$ HDŽ$ HDŽ$ MM)LHHIM9H$ H$ L$ 4LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ &H*fH*HtHRYH$ ˅$[UH$N_YͅHHY^$HWH$1]LnOL _OHDŽ$ HDŽ$ HDŽ$ MM)LHHjIM9H$ H$ L$ /LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ ~fHH*tHQYH$˅$ TH$]aͅHH ]$HVH$1\LOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHIM9H$ H$ L$ .LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ }fHH*tH0PYXH$˅$RH$\jͅHH[$H]UH$1^[LOL OHDŽ$ HDŽ$ HDŽ$ MM)LHHiIM9H$ H$ L$ A-LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$ HH$ N|fHH*tHNYH$˅$lQH$_[sͅHHjZ$H TH$1ZLOL OHDŽ$0 HDŽ$8 HDŽ$@ MM)LHHIM9H$0 H$8 L$@ .LH@HtH2H1HHL9uIL)HHD*Ht$0HT$8H$0 HH$8 yH_%fH*$$,$HtH}M,$H$ ˅PH$  Z |ͅHHY$HRH$ XH$0C˅[OH$0Y ̅HHXHHH$0dXLOL O1HDŽ$PHDŽ$XHDŽ$`MM)LHH;IM9H$PH$XL$`I+LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XKyfHH*D,DtHKDH$˅{NH$nX υHHyWDHnEH$1WLPOL AOHDŽ$pHDŽ$xHDŽ$MM)LHHY!IM9H$pH$xL$*LHDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$pHH$x xfHH*tHJYH$˅$)MH$W$υHH'V$HOH$1ULܒOL ͒OHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$6(LHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$vfHH*tHEIYMH$˅$KH$U,υHHT$HrNH$1sTLdOL UOHDŽ$HDŽ$HDŽ$MM)LHH%IM9H$H$L$&LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$CtHl%fH*$$$HtHG,$H$˅~JH$qT 4υHH|S$HMH$1 SLOL OHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$%LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$rH#fH*4$$H tHF <$H$˅&IH$S ?υHH$R$HKH$1QLyOL jOHDŽ$HDŽ$HDŽ$MM)LHHjIM9H$H$L$K$LHfDHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$qHw"fH*D,HD(tH8ED(H$˅GH$Q JυHHPDH>H$1~PLOL OHDŽ$HDŽ$HDŽ$ MM)LHHIM9H$H$L$  #LH@HtH1H2HHI9uIM)LHHD*Ht$0HT$8H$HH$kqfHH*0tHC0Y]H$ ˅0$FH$ |P TυHHO$H*IH$ 1+OLOL OHDŽ$0HDŽ$8HDŽ$@MM)LHHUIM9H$0H$8L$@ LHfHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$0HH$8nHC fH*H8tHB8YH$0˅8$(EH$0O`υHH&N$HGH$01MLOL OHDŽ$PHDŽ$XHDŽ$`MM)LHHIM9H$PH$XL$` LHHtH1H2HHI9uIM)LHHD*Ht$0HT$8H$PHH$XnfHH*@tHEA@5H$@˅Y4$@D$CH$@M fυHHLD$HgFH$@1hLLOL OHDŽ$pHDŽ$xHDŽ$MM)LHH@IM9H$pH$xL$LHfDHtH2H1HHL9uIL)HHD*Ht$0HT$8H$pHH$xVmfHH*HtH?HYXH$P˅HD$sBH$PfL pυHHqKD$HEH$P1KL%OL OHDŽ$HDŽ$HDŽ$MM)LHH.IM9H$H$L$_LHfHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$lfHH*PtH>PY$H$`˅P$'AH$`K |υHH%J$HCH$`1ILOL OHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHHtH2H1HHL9uIL)HHD*Ht$0HT$8H$HH$jfHH*XtHH=XYH$p˅X$?H$pI υHHH$HuBH$pxHH$C˅[y?H$lI ̅HHwHH8H$HxЃAHPЅxH$0 HxHsHH9U%L1HLщOL ‰OHH9C%L1HLOL OfHH9$L1HLOL OHH9LP1HLOL OeHH9&L1HLOL ~OHH9;L0HLOL O HH9L0HLkOL \OHH9QL0HLډOL ˉOHH9L[0HLOL ڈOHH9L*0HLXOL IOHH9ZL/HLLjOL OHH9L/HLVOL GO锸HH9%L/HLOL O龹HH9y#Lf/HLOL OHH9#L5/HLOL ԃOHH9#L/HLrOL cOHH9%L.HLOL OxHH9M"L.HLOL OXHH9:$Lq.HL_OL POHH9N"L@.HL|OL |OZsHH9$L.HL}OL nOHH9!L-HLOL O HH98"L-HL{OL lOOHH9L|-HL{OL {O>qHH9#LK-HLOL OHH9G!L-HLHOL 9OHH9#L,HLOL OHH9!L,HLOL OHH9L,HLOL O;HH9LV,HL$OL O霯HH9L%,HLӆOL ĆO鑚HH9"L+HLOL OHH9L+HL}OL }O HH9wL+HL`OL QO+HH9La+HL|OL |Oo}HH9L0+HLyOL yO鋑HH9ZL*HL}OL }OFHH9+L*HLOL O鵨HH9L*HLzOL zOHH9Ll*HL~OL ~OӼHH9\L;*HL|OL |OHH9 L *HLOL OHH9(L)HL{OL zOvHH9NL)HLyOL yOWHH9Lw)HLeOL VOyHH9/LF)HLTOL EOHH9L)HLOL ԃO/HH9}L(HL|OL |OHH9jL(HLzOL zOHH9H(HLOHOWHH9RLQ(HLyOL yOwHH9ML (HLNwOL ?wOrHH9*L'HL݀OL ΀OHH9aL'HLL~OL =~OHH9L'HLwOL wO6|HH9L\'HL vOL uOHH9L+'HLyOL yOHH9L&HLhzOL YzOHH9L&HLWxOL HxOboHH99L&HLfvOL WvOJHH9Lg&HLuvOL fvOtHH9L6&HL$|OL |O%HH9L&HLOL O隐HH9L%HLyOL yO0HH9L%HLwOL wOHH9pHr%HL|OHq|OHH9nLA%HLvOL vOuHH9L%HLtOL tO麈HH9L$HL xOL wOHH9L$HL{OL {O@HH9L}$HLtOL tOzHH9LL$HLxOL xO]HH9L$HLvOL vOeHH9L#HL8wOL )wOHH9"L#HL'uOL uOmHH98L#HLsOL sOHH9LW#HLqOL qOeHH9L&#HLTyOL EyOhHH9]L"HL}OL }OЎHH9L"HLvOL vO鉶HH9L"HLtOL tOzHH9aLb"HLyOL yO&HH9LL1"HL?sOL 0sO2pHH9hL"HLNqOL ?qOHH9L!HL]|OL N|OvHH9pL!HLLxOL =xO銛HH9Lm!HLqOL qOtHH9L)EH$ H))0H$H):5H$pH(H$0H(H$H(H$H(H$H(H$Hx(H$ H^(eH$HD(KjH$`H*(1H$H(H$H(&H$H' H$@H'H$H'H$H'H$H~'H$PHd'kH$HE'LH$H0'7VH$0H'H$ H'H$H&H$H&H$H&H$H&H$H&H$pHj&qH$PHK&RH$pH6&=\H$`H&#BH$H& (H$H%H$H% H$H% H$0H%H$ H% H$Ha%hH$@HL%Sr H$H2%9H$0H%$H$H%. H$H$ H$H$H$H$H$PH$ H$@H$ H$Hv$} H|$PH_$fH$`HJ$Qp H$ H0$7H$H$"A H|$pH$ * H$H#  H|$@H# H$@H#H$`H#H$H#H$Hp#w H$HQ#Xw r m h c ^ Y H$H# H$H# H$H" H$H"H$pH" H$H"H|$`H" H$H\"c H$HB"Ih H$H("/H$H"H$ H!$ H$H!  H$H! H$H!H$H!H$H|! H$@Hb!i H$pHH!OH$`H3!:H$H!%D H$H! H$pH H$PH H$@H H$`H H$H H$Hw ~H$H] d~H$pH> EdH$PH$ +JH$H H$HH$HH$PHH$HH$ HH$HnuH$0HT[zupH$H07VfDAWAVAUATUSHhdH%(HD$X1=pLt$HHH|$A01HD$g:HXHHHڃ?HHHԠt)AI)HD$PxH|$HD$B 1HHuHD$HD$HHD$0HD$8HD$@LhI1LA@HHH|$ Ll$H~H|$ H|$ IwA|$8PEt$jMtvM}1,A|$8AD$i@8]HL9tBHT$LH),D8uH9\$HH؉ٺHHD$0HL9uHT$HzHgLd$8H\$0LH)H-1E1E1L9(MtAIHL9uM9t-ILM9v!fDAHIHAVL9rIuL1@2H3 ֶH9։w%9D$MtLHT$HуCH|$0HL$8HHt$@H)H)H9w1HHH9@҅hʅЅf.L8I$HP00HPP0LAIM)I{MAtO<6HM9LGLIIHP tAL9LHfH2t@1HHH9uL)LtMtLHD$HD$LIFH H|$0 (H҉HL$8HD$0H9m@qHE1Dǹ15Lt!Ɓ@EƩuuIcAAֶulLL I$A1H@0H=P1LAHtH\$XdH3%(u]Hh[]A\A]A^A_øЃAHOHt5Ht$ 3E1(IyBHJHH|$0Ht7HD$HxHgt Ht$ 4H3hKHHD$HxHgtHt$04ҹӅ~ʅЅ-H|$ Hr@ԅtʅ˅MHtL H|$05eUHAWAVAUATISH8dH%(HE1HHxD@HAEx H% I$81HLr1HIHH{LHHxHgI$HHHqHrLfHHxHgHEdH3%(iHe[A\A]A^A_]@HL AHHxHgtЃAH PЅHЃAH PЅHDЃAHr PЅ HrDHsH8HHHHH1HHxHHHH HHHHHHtHH0pHHHHqRHH@r_HHHHrHHPs-HHHHsHH`tHHHH_HHp(HHHH HHHHHHHH\HHHHfHH'HHHHHHHHHHHHHPHxhL-'HEHPH5'HHDžtHEEIEHEHEHEHELPHPHDžX1I}dL5]'H1IFL`H`HI'HH9L='HH5;'HIGHPHPHDžPHDž薲HDž`HxPHDžhqHDžpHDžxHDžHDžHDžHDž HPHDžhPeDžHDžgHpHxhmHHPHxHVRHHDžgHDžgH HH9HHHjHHH^_LHHLHHxHg H1LyHHvHHxHgHHxHg[HHDžHDž0HDž8HDž@HDžHHwHHHHDžHteHHAI.11HMHHH?IL 0HtHH)0uHfDLLHDžIxHHZHHDžEH HH1AI&D1@ HLH?HH HtHH)A0uHfLH@H80iH  CHHxHgHHDžPHDž薲HDž`HDžhPeHxHgHPHDžhqHxPIGHG#HHPIFH,#HL`H`IEH#HLPHPHPHDžtHxh0HHxHgHHxHg=HHxHgHHxHgAHHxHgHpHxHgH`HxHgHPHxHgH@HxHgH0HxHgJH HxHgHHxHgHHxHg6HHxHgRHHxHg9ЃAH'PЅH*DPJHPJHB fDfDHHHjHHZYLHHLfH0C1LfHHwHDžHHHHDžH7HHE1AI*f1 HLH?HI HtHH)0uHf.LH5:ROH=+ROE1HDžHDžHDž HH)HHH*HLLLH9H SHHLIDHtHHHHH9uHLH)HJDHLHLH-LIMtLHH`H0D# HH5HHxHgcHHxHgHR&PJHl"HH9 H4IH5POH=POЃAHPЅH {ЃAHPЅH rЃAHPЅH ЃAH4PЅHW ЃAHPЅH$ ЃAH.PЅH ЃAH;PЅH ЃAHPЅZH IЃAHPЅHX ЃAHPЅH% ЃAHPЅHЃAHPЅJH9ЃAH9PЅHЃAHPЅHYЃAHPЅH& ЃAH PЅWHFЃAH-PЅHЃAHjPЅQH@H\"HPLHp`LHH1zPJHPJHRPJHPJH0PJHTPJHPJHPJHVPJHzPJHPJHPJH}PJH;PJHPJHPJH PJHH!PJHPJHdLE1)118~1"}r訃1Q̅HHHxHgt Hz HPNHHxHgt HN HHxHgt H. HHxHgt H HHxHgt HHHxHgt HHpHxHgt HH`HxHgt HHPHxHgt HnH@HxHgt HNH0HxHgt H.H HxHgt HHHxHgt HHHxHgt HHHxHgt HHHxHgt HHHxHgt HnHQ̅Q̅HHHxHgH+HHHxHgqH`HHHDžhPeHzHgukHPHDžhqHxP=HPHPHDžtHxh!HHIULPHPHЃAHOHtKxHdgH뎺訃1HHBHJH3HKHHHxHgHHKHHHxHgAA)DD)D9ʍGuÐD 1AD9}dA@z҉ID Hc<>AA)DD)D9ʍGuASwsD Ðfff.AUATUSHhD,&A$ND$ dH%(HD$X1D$$ D$(<D$,[D$0yD$4D$8D$<D$@D$DD$H1D$LOFV,DkA N(Ht$McT$f(L$im9A$OT$,Ht$f,Bl AL$*|1!,VHHiQi\HcH,V kfLt$IURLL*YWC&fHt$HT *HEZgYRAD1CD&HPAAIAAB Hc҃AD)A)D94ruHH\$LHHT@LrBDXۅ1H([]A\A]A^A_H(1[]A\A]A^A_Ðfffff.AUATIUS1Ӿ4ۅHIHJCIu E$IHAL )ЃCgDKi1APAIAAB Hc҃D)EA)DD9ȍH$HHt$PHf!܅eհ'HHD$HxHgu`H|$PlH$/HǵHHH2H誵UH|$pHHD$0HxHgtH$HHD$ HxHgxH|$pHHe&[u$HEH$3HyEH|$@Hf.AWAVAUATUSHHHdH%(H$1HFLd$`8~;H= tLh܅7L/8߅H"LEpU`EhT$D$D$ @oձH荽HC(@ -Lk(LLFC H|$`CD$8HD$hD$0HpHH9tfHHH)H9Hc҈LoHH踶$H[LcHD$(dH3%(}H8[]A\A]@T$hCXf(T$袮,ȺMnfT$)i€: T$`*HCSՃ8\T$SH= tLd$A0mLάLƶ"mHIѵ$Lt oHI诵L襣 oHH萵D$H2L:0mexo[0mepItkkl$ 荢HL辴H6fDAWAVAUATUSHHHH|$@dH%(H$1ǰHHIHD$ѰHHD$HEIHEIGHEIGHEIGHE IG HE(IG(HE0IG0HE8IG8E@AG@HHHCHGHCHGHCHGHC HG HC(HG(HC0HG0HC8HG8C@G@HD$@H|$0HplHD$0HxHglHD$@ޅHx裨HHfۅH艨H輣ۅHoH'1AH\$PDAƆ0AH<ۅHJHL$PHIHQBHBLiൃABAƅ0AHۅHAHH{HHHHD$ ۅHD,(HD$D$(E8DE蛲HL$PHIHQBHBLqൃABIHHD$HD$x8t>AƆfMMA~8tAAƅ@H|$ΣHD$HH@0H=Pt H|$@L蠣IH@0H=Pt LDH|$H|$ H|$@2H$dH3 %(Du1H[]A\A]A^A_Ht$/谳薟H 苟ƞH|$@ܙHt@AWAVAUATUSHHHH|$@dH%(H$1X(XIHD$HHD$HEIHEIGHEIGHEIGHE IG HE(IG(HE0IG0HE8IG8HE@IG@HEHIGHHEPIGPHHHCHGHCHGHCHGHC HG HC(HG(HC0HG0HC8HG8HC@HG@HCHHGHHCPHGPHD$@H|$0Hp艣HD$0HxHgiHD$@ޅHxXH胢ۅH覤HٟۅH茤HD1AH\$PfAƆ0AH\ۅHjHL$PHIHQBHBLiൃABAƅ0AHۅHAH#H蛯HHXHD$ ۅHD,(HD$D$(E8DE軮HL$PHIHQBHBLqൃABIHHD$HD$x8t>AƆfMMA~8tAAƅ@H|$HD$HH@0H=Pt H|$@LIH@0H=Pt LDH|$6H|$,H|$@RH$dH3 %(Du1H[]A\A]A^A_Ht$/Я趛H 諛H|$@H蔤@HATIUSHt!HsLHkHHHHu[]A\f.HATIUSHt!HsLHkHHHu[]A\f.AUATUSHHHH_H)HHHH IH9wHH9wpIE1IHuaLHtH>H8H~HxH~HxHvHpHHubHI\ t[LeMH]LeH[]A\A]ÐA LHt$HUH]IHt$H)HHvfDHHLڕH}@AWAVHAUATIUSHHLuH?LH)HHHHHH9HI NLuH}ILH)LtrMwM+71HHCHCLHH8J1H HKHSI7MwI)LHHtHLHIH}LsLuI9 HLHtDHBHBHHHHHqHBHrHAHqHBHrHAHHI9uHH]I)IO|&0LuI9tDH;HtkHI9uLuMtLQKDmLeL}IHEH[]A\A]A^A_DHHt訑HAWAVAUATIUSHHHoHHHWHH)HHH)Hv[!HEH{0HtLHCHHPHSHH@HHC8HC0HS@H[]A\A]A^A_f.Hw(HH)HLpLhK6H9HHlHH9 H<HIHs(L)HL4HCHHPH)HHHH;舐L;HkILs(IKl.HkHHCHHC HEHC8HHC@L)HL4L9vAHUH)HHHtLI듽:fDL؅cHUIH)HHHXLH)L觅E荃HHCHHx訏#HkH賒ЃAHtG~fDGPWfffff.SܹHdH%(HD$1@HHڹtCHHxHgtЃAHtIPЅHt$H諚HڹufHD$dH3%(uH[f.PJHfffff.SHϹHdH%(HD$1@HH͹tCHHxHgtЃAHtIPЅHt$HH͹ufHD$dH3%(uH[f.PJH^fffff.S͹HdH%(HD$1@HH˹tCHHxHgtЃAHtIPЅHt$HKH˹ufHD$dH3%(uH[f.PJH讆fffff.S˹HdH%(HD$1@HH8ʹtCHHxHgtЃAHtIPЅHt$H蛘H8ʹufHD$dH3%(uH[f.PJHfffff.SH޹HdH%(HD$1@HHܹtCHHxHgtЃAHtIPЅHt$HHܹufHD$dH3%(uH[f.PJHNfffff.fGGGGGGG GGG(G G0G G8G G@G GHG GPGGXGGhGGGG`GaGbGcGdGpGxLJLJLJ0 (8@HPX`hpxLJLJLJ LJHLJ(08@PX`hpxÐHLJgUSHHFH)H~xL[H AH1DA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]Ðfffff.USHHV+ H)HHcHHHtH؅~qL[H AHA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]@ATUS_tD_t<_t4_t,G1;u;09 u[]A\fHC0@jْHrxGH@L0kMA|$8AD$C@jHDŽDeEEEB̅E@jDekD@j^IHH@IHtW}8t8ECL肆HZ%LI$ LP0]HуHE HP0+f.Gt G tGf.G tG fG tGt G GG fUSHHH蟣ECCEC CEC(C 8HC0C8C@CHCPCXC`ChCp8Cx@E E(E0E8 (H[]ÐfUSHHH蟪E`EHEPCEaCEXCCEbC CEcExC(CEdCHH[]fffff.USHHHHE PC@HCXC`ChC pC(xC0C8H[]ÐfDUSHHHS CXCS( SS0KS8S@SHSPS`Sh(0H`0hH8px@P X(8@HPXpH[]AVAUATUHSHHH>dH%(H$1HD$HDŽ$HwHDŽ$HDŽ$HDŽ$HH$`fHHDŽ$@MHtUHA2D1mHMHHH?IL ԀHtHH)0uHHuLNL NE1HD$ HD$(HD$0MM)LHHMM9Ld$ Ld$(Ll$0WLLHtH2H1HHL9uIL)HJD"HD$($H$$$Ht$@H M‰Ct L4S$ՀLNL NE1HDŽ$HDŽ$HDŽ$MM)LHH`MM9L$L$L$jLL@HtH2H1HHL9uIL)HJD"H$$H$$$H$H M䉃tL5~L$`ӹL^$$L$$H9H H4hfH*H$`Ht}pӹL|^$$L$$HH HgfH*H$`Ht e}YPӹL^$$H$$LYH H$`Ht|LnNL _NE1HDŽ$HDŽ$HDŽ$MM)LHH^MM9L$L$L$hLLHtH2H1HHL9uIL)HJD*H$$H$$$H$ fH MH*tL|LKNL SMM9L$L$L$_LLDHtH2H1HHL9uIL)HJD*H$$H$$$H$ 4H H}YfH*M0tLq0LNL NE1Y HDŽ$ HDŽ$(HDŽ$0MM)LHH0QMM9L$ L$(L$0q^LL@HtH2H1HHL9uIL)HJD*H$($H$$$H$@fH MH*8tLp8LcNL TNE1YD$HDŽ$@HDŽ$HHDŽ$PMM)LHH8PMM9L$@L$HL$P]LLHtH2H1HHL9uIL)HJD*H$H$H$$$H$`fH MH*@tLo@HEYHHH@]HL}HLqH$`HxHgYC @H$dH3%(\H[]A\A]A^ÐfDHH9&]LdLNIL NH5`NL QNE1HDŽ$`HDŽ$hHDŽ$pIM)LHHQML9L$`L$hL$pZLLf.HtLLHHH9uIL)HJD.L$`H$h$$$H$L1H M퉃HtLmHEHHH \H$H ^{HH$ :aH$H$ uH$ HDŽ$@HDŽ$HDŽ$HDŽ$HDŽ$HwHH$`CEHHDŽ$@*EHtRHA/f1ZHMHHH?IL ԠHtHH)0uHHuqbHHLuHDŽ$`HDŽ$hHDŽ$pHE1bHPI9IH$`H$hH$p[WHEH$hHIE$$$$H$fH MH*PtLkPH5TNHENE15HDŽ$HDŽ$HDŽ$IYt$I)LHHPCMH9L$L$L$dVHL@HtLLHHH9uHH)HJD.H$$H$$$H$fH MH*XtLjXLNH NE1Y1HDŽ$HDŽ$HDŽ$MI)LHHXDML9L$L$L$jVHLDHtH2H1HHL9uHH)HJD*H$$H$$$H$fH MH*`tLi`H5NHNE1YD$HDŽ$HDŽ$HDŽ$II)LHH`CMH9L$L$L$TUHLHtLLHHH9uHH)HJD.H$$H$$$H$fH MH*htLhhH5NHNE1YHDŽ$HDŽ$HDŽ$II)LHHh[BMH9L$L$L$:THLDHtLLHHH9uHH)HJD.H$$H$$$H$fH MH*ptLgpLNL |NE1YHDŽ$HDŽ$HDŽ$MM)LHHpAMM9L$L$L$"SLLDHtH2H1HHL9uIL)HJD2H$$H$$$H$ H H/MfH*MxtLfLZNL KNE1HDŽ$ HDŽ$(HDŽ$0MM)LHH?MM9L$ L$(L$0 RLL@HtH2H1HHL9uIL)HJD2H$($H$$$H$@H MtLeLNNH?NE1HDŽ$@HDŽ$HHDŽ$PMI)LHH>ML9L$@L$HL$P-QHLHtH2H1HHL9uHH)HJD*H$H$H$$$H$`fH MH*tLdH5+NL NE1YHDŽ$`HDŽ$hHDŽ$pIM)LHH=MI9L$`L$hL$pPLLDHtLLHHH9uIL)HJD6H$h$H$$$H$H HJfH*MtLcH5NHNE1YHDŽ$HDŽ$HDŽ$II)LHH=<MH9L$L$L$NHL@HtLLHHH9uHH)HJD.H$$H$$$H$|fH MH*tLzbLùNHNE1YD$HDŽ$HDŽ$HDŽ$MI)LHH:ML9L$L$L$MHLHtH2H1HHL9uHH)HJD*H$$H$$$H$lfH MH*tLjaLNHNE1YHDŽ$HDŽ$HDŽ$MI)LHH9MI9L$L$L$LHLDHtH2H1HHL9uHH)HJD*H$$H$$$H$\fH MH*tLZ`LcNL TNE1YD$HDŽ$HDŽ$HDŽ$MM)LHH}8MM9L$L$L$KLLHtH2H1HHL9uIL)HJD2H$$H$$$H$LfH MH*tLJ_L3NL $NE1YHDŽ$HDŽ$HDŽ$MM)LHH:7MM9L$L$L$JLLDHtH2H1HHL9uIL)HJD2H$$H$$$H$ HLJNL ;N1YHDŽ$`HDŽ$hHDŽ$pMM)LHHH#IM9H$`H$hL$p"+LHDHtH2H1HHL9uIL)HHD*H$h$H$$$H$4H H]'fH*HPtH=PLNL N1YHDŽ$HDŽ$HDŽ$MM)LHHP\"IM9H$H$L$*LHDHtH2H1HHL9uIL)HHD*H$$H$$$H$輴fH HH*XtH~NHH9LIH5<~NH-~NHH9ML]IH5+~NL ~NHHH9L,IL~NH ~NHH9LIL ~NL }NHH9LIL}NL }N鵾HH9uLIH5}NH}NtHH9?LhIH5}NH}N1HH9 L7IL}NH}NHH9LIH5{NL {NiHH9LIH5{NL {N&HH9%LLNHL NHH9LsLNHL ҀN-HH9LBIH5{NL {NHH9LLNHL ЃNHH9aLLQNHL ?NHH90LL@NHL .NHH9L~L/NHL NaHH9LMLNHL NHH9LL NHL ~NHH9lLL~NHL ~NHH9;LL~NHL ~NHH9 LL~NHL ~N\HH9LXL NHL NHH9L'LNHL N:HH9wLL'NHL NHH9FLLNHL NMHH9LLNHL NHH9LcLtNHL bNHH9L2LNHL NHH9LLNHL NbHH9QLL~NHL ~NHH9 LL~NHL ~NHH9LnL~NHL ~NHH9L=L~NHL ~NDHH9L L~NHL ~NgHH9\LL~NHL ~N5HH9+LL~NHL ~NHH9 LyL~NHL x~NHH9 LHL9xNIL 'xNHH9 LL(xNIL xNۭHH9g LLxNIL xN鑬HH96 LLxNIL wNMHH9 LLwNIL wN0HH9 LSLwNIL wNHH9 L"LS~NHL A~N HH9r LLB~NHL 0~NHH9A LLqxNIL _xN8HH9 LLxNIL xNHH9 L^L{NHL {NvHH9 L-L^zNHL LzNHH9} LL|NHL |NHH9L LL~NHL ~N~HH9 LH5kuNIL YuN@HH9 LiLyNHL yNHH9 L8LyNHL yNHH9 LLyNHL yNaHH9W LLyNHL uyN!HH9& LLVuNIL DuN8HH9 LtLuNIL uN1HH9 LCLuNIL uNHH9 LLuNIL uN靟HH9b LLzNHL zNHH91 LLAwNHL /wNsHH9 LL0wNHL wN*HH9LNLwNHL wNHH9LLwNHL vNHH9mLLvNHL vNCHH9<LLL{NHL :{NH 訃1HH$ HxHgtLHPKFA<72-(# @AWAVAUATUSHhdH%(HD$X1=nKt$H:FH|$A01HD$gHXHHHڃ?HHHԠt)AI)HD$PxH|$ HD$B 1HHuHD$HD$HHD$0HD$8HD$@LhI1LA@HHH|$ Ll$H.H|$ H|$ I'A|$8PEt$jMtvM}1,A|$8AD$i@8]HL9tBHT$LH),D8uH9\$HH؉ٺHHD$0HL9uHT$HzHgLd$8H\$0LH)H-1E1E1L9(MtAIHL9uM9t-ILM9v!fDAHIHAVL9rIuL1@2H3 ֶH9։w%9D$MtLHT$HуCH|$0HL$8HHt$@H)H)H9w1HHH9hʅЅJf.L I$HP00HPP0LAIM)I{MAtO<6HM9LGLIIHP tAL9LHfH2t@1HHH9uL)LtMtLHD$~ HD$LIFH H|$0(H҉HL$8HD$0H9m@qHE1Dǹ15Lt!Ɓ@EƩuuIcAAֶuQjKLS I$A1H@0H=P1LAHtm H\$XdH3%(u]Hh[]A\A]A^A_øЃAHOHt5Ht$ E1(IyBHJYHH|$0Ht HD$HxHgt Ht$ ;|H2IHHD$HxHgtHt$0|ҹ@~ʅЅ-z H|$ Hrtʅ˅OMHtL? H|$0eU1HAVSHH}IHpdH%(HE1IHHHH}LH}HEHEHEHEHEHwHHuHHHE3HtPHA-1HMHHH?IL THtHH)0uHHuLEHEIxHH}H1A'fD1HLH?HH HtHH)A0uHHuuuHuuzH HEHxHgHEHxHgHEdH3%(He[A^]DfDHHEH1`fDHuH}HuH HEHxHgLЃAHPЅ*Hu|ЃAHt[PЅ!HuIЃAHt"PЅHuPJH݋PJH뤋PJHaQ̅HHEHxHgt HuwxHEHxHgt Hu]xH DQ̅Hʺ訃1HHEHxHgtHu xs@fƇƇƇLJ@LJD(08HPXf.H,+HcHHHTfffff.USHHFH)H~xL[,H AH1DA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]1[]Ðfffff.US,HHV+ H)HHcHHHtH؅~qL[,H AHA;~AAE+C1McDDLH)HHLH)HH#LHHH9II9u[]@AVAU1ATUASHHH6dH%(H$1HDŽ$HDŽ$HDŽ$HDŽ$HƬHDŽ$9MHHILHH!H=,HtAHHHHljH?>tMHHIL H=,HuL}NL }NE1HD$HD$HD$ LL)HHHMLM9Ld$Ld$Hl$ =LLDHtH2H1HHL9uIL)HJD"HD$HH$$$$$Ht$@H0MHtLL|NL |NE1+HD$0HD$8HD$@MM)LHH=MM9Ld$0Ld$8Ll$@=LLfDHtH2H1HHL9uIL)HJD"HD$8HH$$$$$Ht$`'H0H3fH*MtLL{NH{N1Y6LH)HHHI9HtfDHtH2H1HHL9uH$,+H$H$HH$H$H$H$H$H$H$ HcHHAE1LzNL zNDHD$PHD$XHD$`MM)LHHMM9Ll$PLl$XLt$`4;LLHtH2H1HHL9uIL)HJD*HD$XHH$$$$$H$DH0MItL  @jD$ @jǃHH D$H_ Hž%H AH Hž2Hy HDnIHH@IH<}8wuCLHeA  %AAA t'H$dH3%(;HĐ[]A\A]A^LxNL xN1HD$pHD$xHDŽ$MM)LHH4IM9Hl$pHl$xL$:LH@HtH2H1HHL9uIL)HHD*HD$xHH$$$$$H$TH0HCtH0LwNL wN1HDŽ$HDŽ$HDŽ$MM)LHH80IM9H$H$L$9LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$aH0HC tH=LvNL vN1HDŽ$HDŽ$HDŽ$MM)LHH/IM9H$H$L$r9LHfHtH2H1HHL9uIL)HHD*H$HH$$$$$H$iH0HE7fH*HCt H1CL]uNL NuN1Y,HDŽ$HDŽ$HDŽ$MM)LHHC1IM9H$H$L$8LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHL0tNL !tN1HDŽ$HDŽ$HDŽ$MM)LHH1IM9H$H$L$46LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ QH0H4fH*HCXt HCXLsNL rN1YHDŽ$HDŽ$HDŽ$ MM)LHHCX0IM9H$H$L$ $5LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@fH0HH*Ct H CLqNL qN1Y][HDŽ$0HDŽ$8HDŽ$@MM)LHHC0/IM9H$0H$8L$@3LH@HtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`fH0HH*C t HC LpNL pN1YvHDŽ$PHDŽ$XHDŽ$`MM)LHHC /IM9H$PH$XL$`2LH@HtH2H1HHL9uIL)HHD*H$XHH$$$$$H$fH0HH*C(t HC(LvoNL goN1Y}HDŽ$pHDŽ$xHDŽ$MM)LHHC(-IM9H$pH$xL$1LH@HtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*C0t HC0LFnNL 7nN1Y|HDŽ$HDŽ$HDŽ$MM)LHHC0b,IM9H$H$L$0LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*C8t HC8LmNL mN1 WHDŽ$HDŽ$HDŽ$MYL$M)LHHC8y+IM9H$H$L$0LHf.HtH2H1HHL9uIL)HHD*H$HH$$$$$H$yfH0HH*C@t HC@LkNL kN1YUHDŽ$HDŽ$HDŽ$MM)LHHC@(IM9H$H$L$/LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$ifH0HH*CHt HCHLjNHjN1YD$LH)HHHCH'I9Ht@HtH2H1HHL9uH$,+HH$0H$HH$8H$H$@H$H$HH$H$PHcHH0LiNHiNLH)HHH#1I9HtDHtH2H1HHL9uH$,+H$`H$HH$hH$H$pH$H$xH$H$HcHH`ƃHHE H@0H=PlH_HH9a-LiLjNIL jNHH90-H8L)jNHHjNHH9,LLjNIL jNHH9,HL'jNIL jNLeNL eN1HDŽ$PHDŽ$XHDŽ$`MM)LHHH)IM9H$PH$XL$`,LH@HtH2H1HHL9uIL)HHD*H$XHH$$$$$H$1H0H)fH*HtHL?eNL 0eN1YuHDŽ$pHDŽ$xHDŽ$MM)LHH'IM9H$pH$xL$*LHf.HtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*tHLdNL cN1HDŽ$HDŽ$HDŽ$MM)LHH&IM9H$H$L$)LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ H0H(fH*HtHLbNL bN1HDŽ$HDŽ$HDŽ$MM)LHH&IM9H$H$L$'LHf.HtH2H1HHL9uIL)HHD*H$HH$$$$$H$H0H&fH*HtHLaNL aN1HDŽ$HDŽ$HDŽ$MM)LHH%IM9H$H$L$ 'LHf.HtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHL``NL Q`N1YqHDŽ$HDŽ$HDŽ$MM)LHH$IM9H$H$L$%LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ qfH0HH*tHL(_NL _N1YpHDŽ$HDŽ$HDŽ$ MM)LHH1#IM9H$H$L$ $LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@YfH0HH*tHL]NL ]N1YJHDŽ$0HDŽ$8HDŽ$@MM)LHH IM9H$0H$8L$@#LHHtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`AfH0HH*tHoL\NL \N1YIHDŽ$PHDŽ$XHDŽ$`MM)LHHyIM9H$PH$XL$`|"LHHtH2H1HHL9uIL)HHD*H$XHH$$$$$H$)fH0HH*tHWL[NL q[N1YHHDŽ$pHDŽ$xHDŽ$MM)LHHIM9H$pH$xL$!LHHtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*tH?LHZNL 9ZN1YGHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$d LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tH'LYNL YN1YFHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$DLHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHLWNL WN1YwEHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$<LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*htHhLVNL VN1Y_HDŽ$HDŽ$HDŽ$MM)LHHh=IM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ fH0HH*ptHpLhUNL YUN1Y^HDŽ$HDŽ$HDŽ$ MM)LHHpVIM9H$H$L$ LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@fH0HH*xtHxL0TNL !TN1Y]HDŽ$0HDŽ$8HDŽ$@MM)LHHxIM9H$0H$8L$@lLHHtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`fH0HH*tHLRNL RN1Y\HDŽ$PHDŽ$XHDŽ$`MM)LHHIM9H$PH$XL$`dLHHtH2H1HHL9uIL)HHD*H$XHH$$$$$H$ifH0HH*tHLQNL QN1Yo[HDŽ$pHDŽ$xHDŽ$MM)LHHIM9H$pH$xL$TLHHtH2H1HHL9uIL)HHD*H$xHH$$$$$H$QfH0HH*tHLPNL yPN1Y_ZHDŽ$HDŽ$HDŽ$MM)LHH3IM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$9fH0HH*tHgLPONL AON1YOYHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$!fH0HH*tHOYGXƃLQNL QN1HDŽ$HDŽ$HDŽ$MM)LHHY IM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ YH0HqfH*HC`t H!C`LPNL PN1Y`HDŽ$HDŽ$HDŽ$ MM)LHHC` IM9H$H$L$ LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@fH0HH*CPt HCPL~ONL oON1M:HDŽ$0HDŽ$8HDŽ$@MYT$M)LHHCP{ IM9H$0H$8L$@#LHfHtH2H1HHL9uIL)HHD*H$8HH$$$$$H$`fH0HH*Cht HChLNNL wNN1Y]HDŽ$PHDŽ$XHDŽ$`MM)LHHCh< IM9H$PH$XL$`ULH@HtH2H1HHL9uIL)HHD*H$XHH$$$$$H$fH0HH*Cpt HCpL6MNL 'MN1YD$HDŽ$pHDŽ$xHDŽ$MM)LHHCp IM9H$pH$xL$LHfDHtH2H1HHL9uIL)HHD*H$xHH$$$$$H$fH0HH*Cxt HCxLLNL KN1Y[HDŽ$HDŽ$HDŽ$MM)LHHCx~ IM9H$H$L$LH@HtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHLJNL JN1YQHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$fH0HH*tHLINL IN1YgPHDŽ$HDŽ$HDŽ$MM)LHHIM9H$H$L$LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ifH0HH*tHL`HNL QHN1Y3HDŽ$HDŽ$HDŽ$MM)LHH@IM9H$H$L$ LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$ QfH0HH*tH2L(GNL GN1HDŽ$YHDŽ$MHDŽ$ M)LHHIM9H$H$L$  LHHtH2H1HHL9uIL)HHD*H$HH$$$$$H$@9fH0HH*tHgLENHEN1YMHDŽ$0HDŽ$8HDŽ$@MI)LHHII9H$0H$8L$@L HHHtH2H1HHL9uHH)HHD*H$8HH$$$$$H$`!fH0HH*tHOYLƃHfHH H*X HH9 LENHHENBHH9| LLGNHL GNHH9K LSLGNHL FNHH9 L"LANHL ANHH9 LLANHL ANHH9 LL1ANHL ANHH9 LL@NHL @NHH9V L^LODNHL =DNHH9% L-L>DNHL ,DNvHH9LL-@NHL @N!HH9LLBNHL BNHH9LLBNHL BNHH9aLiLBNHL BNFHH90L8LBNHL wBNHH9LLBNHL BNHH9LLBNHL uBNTHH9LLBNHL BNQHH9lLtLBNHL ANHH9;FLBNHBNHH9LLBNHL wBNHH9LLCNHL CNAHH9LL@NHHu@NHH9}LLBNHL BNHH9LLTLBNHL sBNHH9L#L4BNHL "BNHH9LLCBNHL 1BNGHH9LLrANHL `ANmHH9L萿L!ANHL ANVHH9WL_L0ANHL ANHH9&L.LANHL ANHH9LLNL$LL$1~N@ŃBHL$HcL|$@fHMcH<IID$HȋL$HD$LcуIL$Ld$8@D$HcD$HL$MHt$8L H1ELf(~ HYHA9Xf.Yzt AYXHALIL9uIDD$IL;t$J[]A\A]A^A_1EHf(~f.AHYLA9XrEf(df(HL1HYLD9Xu21Ef("AYHA9X1~N@ŃUSHHH(Ht$H|$E耽\$Ht$d$H|$E\$$$UL$g"HC0$$f(T$fWc@fWS\$+f(Y[8YYYC K(kSH([]ATUISHHHPHdH%(HD$H1ATUfALL$jHXZHD$HdH3%(u HP[]A\ƭfDSHH0FdH%(HD$(1f.?w9f?Ht CHD$(dH3%(H0[DHL$L$D$f(ff(YY-XXf(f.vD$ T$諺T$sd$d$f(f.vX֬fDSHH$XL$`L$ht@)$p)$)$)$)$)$)$)$dH%(H$81H$LD$8H|$PHѾHD$@H$@D$8D$<0HD$HH4E8H= tHT$Ht$PH|$H|$ X/H|$ %HH0Ht$HHVH|$ սHD$HxHgu#H$8dH3%(uuH[ЃAHtNPЅHt$ 蜽f.XeHְ跩DPJHHHD$HxHguH虴H|$ H HЃAHOHtHt$뿋PJH@ATUISHHH@ZD$f($L$T$L$X^Yf(T$ٷ$Ht$0 G<H|$8\\f( $謸 $T$0d$8f(T$ d$6D$wHt$0$H|$8E^d$T$ Yd$0YT$8$YX4A$D$ Mf. ;v2;L$(\貯T$L$(Y$f.w;f.v6Q;Xx t$fW $Yf.u4$PD$D$ L$YL$^f(fX$AD$l$ef(f(Y\Qf.zl^H@[]A\f(Ð :XML$ĩ$D$ $YT$^f(ܵL$\AL$l$輬$f(|fffff.Hf 5:5:5:%5:-5:55:=5: $ 0:T$\$d$l$ t$(|$0L$8::%:-:5:=: :dH%(HD$x1T$@\$Hd$Pl$Xt$`|$hL$pwHcHD$xdH3%(uHĈf.AWAVAUATUSHLH9HT$0H|$8dH%(H$1YڸYVf(\$f(T$T$\$f.r\f.9T$89f.&f(\$^贡T$,f(^D$(D$,苡,fT$\$f(D$A*AD$Dd$TDd$PD$\D$X\f*D$(\^ Af(^5MHD$PAHPtHH9tD AuLHH9uHD$8HH9XH\$ H$H-FHD$HD$HH;XL-FL|$pDD;t$,H$HD$`HDŽ$薲HD$pHD$xPeHxHgH$HD$xqH SID$HFH FH|$HT`IELl$pHFHLpHEHl$`HT`HDŽ$tHD$H9XLt$L趶Ƅ$H F1HEHDŽ$tHDŽ$Ƅ$HDŽ$HDŽ$HDŽ$HDŽ$Hl$`HL`HD$`HD$hHEHLIELl$p1HH FHL%FH FH$ID$HL`HD$`HDŽ$薲HD$pHD$xqHDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$虯HD$`LHD$xPeDŽ$HDŽ$gHp8 LDs"DLAC LDsD$DLHHD$ δt$H|$ D;t$(=D$9D$PL$(9L$,D$9D$XHD$0HXDD$9D$Tt^D$9D$\HD$0HXfЃAHtFPЅHt$OHD$0HHD$0HXfPJH9D$TtڋD$9D$XnHD$0HXafDH\$8HD$HD$H9CH$dH3%( H[]A\A]A^A_f(\$\^ 膜T$,f(^ HD$,L$(X,fT$\$f(D$EA*AD$ Dd$Tf.Z3Dd$PD$\D$X\f*D$(^ Mf(\^ r  r63f.v(^&f(ś,kZD$TZD$\f.2rE2f.v7\f(^},kZD`(D$XDd$P;f.2r3^f(DD,EkZDd$PDd$TDd$XDd$\b2f.\8f(^TD,EkZA(Dd$PDd$TDd$XDd$\HH$HDŽ$tHͨH|$`HH賨H$HHD$xPeHzHguGH$HD$xq|H|$`-zHFHUHl$`H\`H]ЃAHOHtHt$Oư뒋BHJAWAVIAUATIUSLHIHD$HD$0HD$80HD$`00HD$h 0HD$pYHD$xYZHDŽ$YHDŽ$YNHDŽ$dH%(H$1HDŽ$HEHfA.E8ffA.n(HL$@ #0#0LLLLD$8HL$0H$Ht$@LD$H E8PH= t,H$t$8|$0H|$PX4$HD$ H$|$L$L$HD$(ߥH|$PկHI/LήLLs8HI议LLSAHI莮Ht$(L1JHIlHt$ LSHIJD$LwHI'$LʧH|$PЭH$HH$H$aH$r"X\$0f(L$8\\f(YYYYT$hL$xd$`D$pE1HtmB\,`pLL$f($\YPL$X$L$Yf(fT[Y-f(YXMMII tJ,HxII u@T$YYYUQf.f(U,LK @H$dH3 %(Hĸ[]A\A]A^A_fT$8VL$0\fT$hL$p\f.D$`\, J,YD$@LYL$H1_f.H$tH$tVL$8f(fL$x\T$0\T$`\f.D$paDH$MUL$0f(fL$x\T$8\T$`\f.D$h@Xe@ְ/fH$H$H$#Uff(f(\T$0\L$8\T$hL$p\f.D$x f襜f(H|$PH*H袡fH8HI-NHt$59HYHD$ YYY^dH%(HD$(1^L$^T$^$l$HT$(dH3%(uH8Jf.AWAVAUATUSH0H8GD?ODwW Do@_(DgDg0oHo8HL$D$$T$(\$d$,$NDHCۅH1AHߺ:D$H跢SHD$H藢\HըD$HweH赨$HX H߾m薨DH苖H߾wyDHnH߾ \H8H[]A\A]A^A_D@ H߾?.t$$H"MHI D$(L诡}HAUATUSHHXD/DgXo\wxpDGhGPHL$T$\$d$ l$(t$0|$8DD$@D$HCDH8ۅH&HD$HH趠 H߾DHH߾צH͔ H軦DD$@HfA(WvHH蒦|$8Hf(0{HHkt$0Hf( }HG H5l$(Hf(ӟvHHd$ Hf(謟{HH\$Hf(腟}Hå H豥T$Hf(OHߺ 荥L$HXH[]A\A]f(!AUAT(USHIPHHLHBHþۅH-HH@LMthA|$8t9At$CHSH+HL0HHL[]A\A]L蠖I$ H@0H=PtLfff.@SHH$XL$`L$ht@)$p)$)$)$)$)$)$)$dH%(H$81H$LD$8H|$PHѾHD$@H$@D$8D$<0HD$HH|D8H= tHT$Ht$PH|$SH|$ oH|$ eHHpHt$HHV_H|$ HD$HxHgu#H$8dH3%(uuH[ЃAHtNPЅHt$ ܢf.ePְDPJH6HHD$HxHguHٙH|$ HLHЃAHOHtHt$B뿋PJH@H &&&%&-&5&"=& $fT$\$d$l$ t$(|$0 !&!%&-!5&=&dH%(HD$x1 L$8T$@\$Hd$Pl$Xt$`|$hwHcHD$xdH3%(uHĈŎ@H 1&H$)&)&%)&-)&5)&=)&dH%(H$1FL$T$\$d$ l$(t$0|$8 %%%%%-%5%=%n%L$@T$H\$Pd$Xl$`t$h|$pD$xwHcH$dH3%(uHĘ蜍fff.ATUISHHHĀdH%(HD$x1HGPwPHD$ HGXD$t$$$HD$(HG`HD$0HGhHD$8HGpHD$@HGxHD$HHHD$PHHD$XHHD$`HHD$hHHD$pl$1{\D$ Vf(\\$fTf. $Ht$8HL$P1YXDHHuY\$  HX$A$YUMEHT$xdH3%(u7H[]A\Ðfm H1΋fffff.USHHhHT$(Ht$@$dH%(HD$X1HD$@HD$HHD$PHD$(1҉XD@HHuHD:H tL$PH|$0rT$H\$@L$T$\$\H|$0R8XHH]$HHH;D$HݖwHHD$H躖|HHD$H藖}H՜H|$0苜HL$XdH3 %(u,Hh[]fe`ְ跈H|$0H;H賓fUSHHXHT$Ht$0D$dH%(HD$H1HD$0HD$8HD$@HD$HDL$ $X:~zH tH|$ 踒H|$ 讜EHH蹛D$H[HH薛$H9H|$ ?HL$HdH3 %(u:HX[]fDeXְgtT$$G讈H|$ HHYAWAV1AUATIUSI׾HH8oHgDg@o(DoDw08D$d$l$t$(|$ fD$*f(\T$X fTf. AAED$ Y1f.D$(YXD$ADHT$DHD$T$f(D$YYYGDXQf.A AH߸"H8[]A\A]A^A_fDl$A._ H߸H81[]A\A]A^A_fD  `T$LT$f(Mfff.USHHXHt$(D$HD$(dH%(HD$H1L$(HDL$X :L$ H tH|$0eqH|$0g,HHrD$H#HHOD$H )HH,D$HΑH|$0ԗHL$HdH3 %(uBHX[]ehְt\$(T$\$;H|$0HnHfDAUATIUSHIվ4HHHdH%(HD$81D$HD$ HD$(HD$0HD$HD$HT$Ht$ HD$u*1HL$8dH3 %(HH[]A\A]fHt$D$LHt1DXD DHHud$ \$ ^%HT$0L$(f(XAXEAED$ A,$=ЃfGƇƇƇG8G@GXG`GPGpGHGx (08@HPXGG GGƇG G(G0GhfDJDAVAUE1ATE1US1fAJ@ٰ(1ЅuJ@ٰD9vIAă;DrIU 1L-N誕HN[]HPA\A]HNHHNA^HNH% ffffff.AWAVAUATUSH(HT$HNH<$Ht$L$HLLL8HLPHALLLM E1HLMLLHcɎ HNHcHHڨHDHHlDlL$HT$Ht$H<$H[DH([]A\A]A^A_8KHNLH/HNLHHtNL8HuoH\NHHHH,NHبHHDHLL8HDAWAVAUATUSH8T$,HND$H|$L$Ht$ T$H\$(LXL`LH\L HALLLM E1HLMLLHc HFNHcHHxHDHxHDlT$,Ht$ \$(H|$HmDT$L$D$H8[]A\A]A^A_kHNLXHOHNL`H 3HNLHuoH|NH\HHHLNHxHHD HL`LH\DAWAVAUATUSHxH$HT$HNH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d L L L H L HALLLML\$hފ L\$hE1HLLLHcM迊 HNHcH,H H=D\$dH HL$PHt$HH|$@L$$H\$XH$H$H$HDH$H\$8HDPlLL$0LD$(HL$ H$HT$Ht$H|$Hx[]A\A]A^A_HLNL HH0NL HHNL HuoHNH HHkHNH HHDGHL L H 1DAWAVAUATUSHxH$HT$HfNH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(LLLHHL`HALLLML\$h^ L\$hE1HLLLHcM? H NHcH4HڸHDHHjD0lL$LL$0LD$(HL$ HTDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDcH NLHGH NLH+H NLHHuoHt NHHH{HD NHظHHJDHLLHH)ffff.AWAVAUATUSHXH$HT$H NH|$Ht$HL$ HD$8$HLD$(LL$0L$D$DLhLpLHlL0HALLLML\$H L\$HE1HLLLHcM H4 NHcHHڈHDHHDlL$LL$0LD$(HL$ HDD$DHT$Ht$H|$$HD$8H$HX[]A\A]A^A_vfD;H NLhHH NLpHHd NLHuoHL NHlHHH NH؈HH DHLpLHl]DAWAVAUATUSH(T$H NH|$Ht$HLLLH LHALLLM E1HLMLLHc HN NHcHH(HDH(HDlT$Ht$H|$HDH([]A\A]A^A_HNLHoHNLH"SHNLHuo;HNH HH HlNH(HH*D!HLLH DAWAVAUATUSH(HT$HNH<$Ht$L$HLLLHLHALLLMc E1HLMLLHcI HNHcHHH7DHHDlL$HT$Ht$H<$HDH([]A\A]A^A_H4NLHHNLHHNLHuoHNHHgHSHNHHHZD/HLLHffff.AWAVAUATUSHxH$HT$HFNH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(LL LHLHALLLML\$h> L\$hE1HLLLHcM HpNHcH4H8HDH8HDlL$LL$0LD$(HL$ HtDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_.fDCHNLH'HNL H HlNLHuoHTNHHH{H$NH8HHjDHL LH)ffff.AWAVAUATUSHxH$HT$HNH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d(L L Lh!H!L"HALLLML\$h} L\$hE1HLLLHcM} HNHcH4H!HDH!HDlL$LL$0LD$(HL$ HDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDHNL HHNL H{HNLh!HuocHNH!HGH{3HNH!HHDHL Lh!H!)ffff.AWAVAUATUSH(T$H/NH|$Ht$HL"L"L8#H#LP$HALLLM{ E1HLMLLHcm{ HNHcHHڨ#HDH#HD0lT$Ht$H|$HDH([]A\A]A^A_H\NL"HH@NL"H"H$NL8#HuoH NH#HH{HMHب#HHD!WHL"L8#H#DAWAVAUATUSH(HT$H~MH<$Ht$L$HLX$L`$L%H\%L &HALLLMy E1HLMLLHcy H MHcHHx%HDHx%HD`lL$HT$Ht$H<$HDH([]A\A]A^A_ ;HMLX$HHML`$HHdML%HuoHLMH\%HHHMHx%HHDHL`$L%H\%DAWAVAUATUSHxH$HT$HMH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d L(&L0&L&H,'L'HALLLML\$hw L\$hE1HLLLHcMw HMHcH,HH'HD\$dHH'HL$PHt$HH|$@L$$H\$XH$H$H$HODH$H\$8H/DlLL$0LD$(HL$ H$HT$Ht$H|$Hx[]A\A]A^A_HML(&HHML0&HHML&HuokHMH,'HOH;HMHH'HHjDHL0&L&H,'1DAWAVAUATUSH(LCMH|$D$t$L$MI'M(M(I(M)HAHLLMu E1LHMHLLcvu HMHcHJ)HtDH)HQD@lt$L$D$H|$H=DH([]A\A]A^A_ fL\MH'ML@ML(ML$ML(MuoL MH(MI{HMJ)HHDWH M(M(I(DAWAVAUATUSHxH$HT$HvMH|$Ht$HL$ HD$8H$HLD$(LL$0L$HD$@H$HD$HH$HD$PH$HD$X$D$d L)L)Lx*H*L+HALLLML\$hns L\$hE1HLLLHcMOs HMHcH,H*H5D\$dH*HL$PHt$HH|$@L$$H\$XH$H$H$HDH$H\$8HDplLL$0LD$(HL$ H$HT$Ht$H|$Hx[]A\A]A^A_{HML)H_HML)HCHMLx*Huo+HMH*HHH\MH*HHDHL)Lx*H*1DHH HMtHDHDHH HMtHDHDHH HMtHBDH9DHH H HMtHDDHDHH HSMtHDHDHSL\$H LT$\$ H H L L L L HMt \$ L\$LT$H;D[[H0DfDHAVAUH ATUH SLT$0H L\$8H\$@L Hl$HLl$XL Ld$PDt$`L L H H L L HzMt8Dt$`Ll$XLd$PHl$HH\$@L\$8LT$0HD[]A\A]A^@[]A\A]A^HqDffffff.HH HMtH*DH!DHAVAUH ATUH SLT$0H L\$8H\$@L Hl$HLl$XL Ld$PDt$`L L H H L L HMt8Dt$`Ll$XLd$PHl$HH\$@L\$8LT$0HvD[]A\A]A^@[]A\A]A^HaDffffff.HSL\$H LT$\$ H H L L L L HMt \$ L\$LT$HD[[HDfDHSL\$H LT$\$ H H L L L L HMt \$ L\$LT$HsD[[HhDfDHH HsMtH*DH!DHH H H@MtHDDHDHH H HMtHDDHDHH HMtHRDHIDHH HMtH DHDHAVAUH ATUH SLT$0H L\$8H\$@L Hl$HLl$XL Ld$PDt$`L L H H L L H:Mt8Dt$`Ll$XLd$PHl$HH\$@L\$8LT$0HVD[]A\A]A^@[]A\A]A^HADffffff.AHH HMDˆtHDDHDffffff.HAVAUH ATUH SLT$0H L\$8H\$@L Hl$HLl$XL Ld$PDt$`L L H H L L HJMt8Dt$`Ll$XLd$PHl$HH\$@L\$8LT$0H6D[]A\A]A^@[]A\A]A^H!Dffffff.HH HMtHDHDHH H HMtHDDHDHAVAUH ATUH SLT$0H L\$8H\$@L Hl$HLl$XL Ld$PDt$`L L H H L L H:Mt8Dt$`Ll$XLd$PHl$HH\$@L\$8LT$0HD[]A\A]A^@[]A\A]A^HDffffff.H=MtHDfDHDffffff.HAVAUH ATUH SLT$0H L\$8H\$@L Hl$HLl$XL Ld$PDt$`L L H H L L HZMt8Dt$`Ll$XLd$PHl$HH\$@L\$8LT$0HD[]A\A]A^@[]A\A]A^HDffffff.HSL\$H LT$\$ H H L L L L HMt \$ L\$LT$HCD[[H8DfDHSL\$H LT$\$ H H L L L L HrMt \$ L\$LT$H˿D[[HDfDHH H3MtHDHyDAWAVAUATUSH(T$HMH|$Ht$HLLLhHLHALLLMGh E1HLMLLHc-h H~MHcHHH DHHD`lHt$H|$HDT$H([]A\A]A^A_HMLHHMLH"HMLhHuvkHMHHOH;HMHHH2D!HHD LLhHfffff.AWAVAUATUSH(T$H/MH|$Ht$HLLLhHLHALLLMf E1HLMLLHcmf HMHcHHHKDHH(D`lT$Ht$H|$HDH([]A\A]A^A_H\MLHH@MLH"H$MLhHuoH MHHH{HMHHHrD!WHLLhHDAWAVAUATUSH(T$HMH|$Ht$HLLLHLHALLLMd E1HLMLLHcd HMHcHHHDHHD0lHt$H|$HDT$H([]A\A]A^A_KHMLH/HMLH"HtMLHuvH\MHHHH,MHHHڼD!HHżD LLHfffff.AWAVAUATUSH(T$HMH|$Ht$HLLLHLHALLLMc E1HLMLLHcb HNMHcHHHDHHлD0lT$Ht$H|$HûDH([]A\A]A^A_HMLHoHMLH"SHMLHuo;HMHHH HlMHHHD!HLLHDAWAVAUATUSH(T$HMH|$Ht$HLLLH LHALLLMga E1HLMLLHcMa HMHcHH(HSDH(H0DlT$Ht$H|$H#DH([]A\A]A^A_HMHcHHڨ#H3DH#HD0lT$Ht$H|$HDH([]A\A]A^A_{HML"H_HML"H"CHML8#Huo+HMH#HHH\MHب#HHZD!HL"L8#H#DAWAVAUATUSH(T$HMH|$Ht$HLxLL(H|L@HALLLMW\ E1HLMLLHc=\ HMHcHHژHDHHسD0lHt$H|$HϳDT$H([]A\A]A^A_H,MLxHHMLH"HML(Huv{HMH|H_HKHMHؘHH"D!'HH D LL(H|fffff.AWAVAUATUSH(T$H?MH|$Ht$HLxLL(H|L@HALLLMZ E1HLMLLHc}Z HMHcHHژH;DHHD0lT$Ht$H|$H DH([]A\A]A^A_ HlMLxHHPMLH"H4ML(HuoHMH|HHHMHؘHHbD!gHLL(H|DAWAVAUATUSH(T$HMH|$Ht$HL L Lx H LHALLLMX E1HLMLLHcX HMHcHH H3DH HDlHt$H|$HDT$H([]A\A]A^A_[HML H?HML H"#HMLx Huv HlMH HHH L\$hE1HLLLHcM HpMHcH4H*HrDH*HqDplL$LL$0LD$(HL$ HqDD$dHT$Ht$H|$$HD$XH$HD$PH$HD$HH$HD$@H$HD$8H$Hx[]A\A]A^A_fDCHML)H'HML)H HlMLx*HuoHTMH*H׉H{ÉH$MH*HHpD蟉HL)Lx*H*)ffff.AWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$H% H0 L 뚐AWAVAUATUSH(T$HnMH<$Ht$HL H Lx L LHALLLM E1LHMLLHc H?nMHcH[H HTADH H1ADlT$Ht$H<$H%ADH([]A\A]A^A_D{XHmML H/_XHmMH H!CXHmMLx HvADHD$D$E1f.EJ@ٰ1hЅuJ @ٰ;D$v HL$D$AD;=ADrHD$ HPHmM1HmMHBHmMHHlML ]fDkWHlMH HH?DGWHH% H Lx DAWAVAUATUSH(T$HolMH<$Ht$HL"L"L8#H#LP$LAHLLM E1LLMHLHc HkMLcHHڨ#J#H=D0lHt$H<$H=DH=DT$H([]A\A]A^A_D;VHkML"HVHkML"H!VHdkML8#HUHHkMH#HUH ?DHD$E1E1EJ@ٰ(1lfЅuJ4@ٰD9vHt$AAD;5>DrHD$ HPHjM1aHjMHBHjMHHjMH% L"L8#H#"ff.AWAVAUATUSH8HT$H>jMH|$Ht$L$$HLHLXLLpHALLLM E1LHMLLHcx HiMHcH]HHNff.AWAVAUATUSH(HcMH|$D$t$L$HH'L(L(H(L)HAHLLM E1LHMHLLc HWcMHcHJ)H5DH)H4D@lt$L$D$H|$H4DH([]A\A]A^A_DMH'HbMH6DE1E11fDAJ@ٰD(1#^DuJ @ٰD9vIAƃ;-n6DrIW 1L=mbM HabMHPL(H_bMHHLbMH% DLH$bMJ)HH3DLHH3DL(L(H(EfDAWAVAUATUSH(T$HaMH|$Ht$HLLLhHLHALLLM E1HLMLLHc HNaMHcH2HH4DHH4D`lT$Ht$H|$H4DH([]A\A]A^A_@j4DE11E1f.EJ@ٰ1<\ЅuJ@ٰ9vIԉAD;-4DrIT$1 L%`M9Hz`MHBLLLhHj`MHHHT`MukJH>`MHHJHH% JH`MHHH3DJHHCff.AWAVAUATUSHX$H|$Ht$HT$HL$ LD$(D$2DHD$@1E1Ld$HEJ@ٰ1YЅuJ @ٰ9vHL$@AD;-1DrHD$@ Ld$HHPH]M1H]MHPL+H]MHH]MJH% 3HH]MHظ,HH/DHHL+LH,L,ffff.HA]MHtf1DAVAUE1ATE1US1fAJ@ٰ(1|XЅuJ@ٰD9vIAă;0DrIU 1L-\MzH\M[]HPA\A]H\MHH\MA^H% f.j0DATUS1ۅuTfD9O0DvCH@ٰD 1WDuH@ٰ HP19 0Dw[]A\1DH[MHt H@/DAVAUE1ATE1US1ۅtTfDAJ@ٰ(14WЅuJ@ٰD9vIAă9/Dw[IEL-[M]A\A]A^H% H=p[MtHw[MfDB/DAVAUE1ATE1US1f.AJ@ٰ(1VЅuJ@ٰD9vIAă;.DrIU 1L-ZMHZM[]H@A\A]HPHZMA^HZMH% f.H=ZMDAWAVIAUATAUSHIHHwZMHtZHHx L HcHUZMHt(H8HD[LH]A\A]A^A_Df-DHD$D$E1fDDH@ٰ$1QUЅ$uH@ٰ;D$v HT$D$AD;5-DrHD$ HPHYM1CHYMHPHYMHHvYMH% AWAVAUATUSHHH@YMHHr HHt1HHCHH3HKHSH[]A\A]A^A_f,DE1E11f.AJ@ٰD 1;TDuJ@ٰD9vIAŃ;-,DrIV 1L5XM8HyXMHBHr HHsXMHH`XMH#H% f.AWAVIAUATAUSHIHHXMHtZHHL4 HcHWMHt%HHD[LH]A\A]A^A_@[Bf+DHD$D$E1fDDH@ٰ$1RЅ$uH@ٰ;D$v HT$D$AD;56+DrHD$ HPH2WM1H$WMHPH)WMHHWMH% AWAVAUATUSHHHVMHHHHt.HHCHH3HKHSH[]A\A]A^A_fDz*DE1E11f.AJ@ٰD 1QDuJ@ٰD9vIAŃ;-&*DrIV 1L5%VMHVMHBHHHVMHHUMH#H% AWAVIAUATIUSIAHH=UMHHLH $HUMHt)Hc$DLLHH[]A\A]A^A_@B)DHD$D$E1fDDH@ٰ(1PЅuH @ٰ;D$v HL$D$AD;=(DrHD$ HPHTM1HTMHPHTMHHTM,DH% fD(DtHD$D$1H@ٰ$1OЅ$uH@ٰ;D$v HT$D$;-)(DrHD$ HPH%TM1H=TMHGHTMHH TMN@AWAVAUATUSHHHSMHHHhHt.HHCHH3HKHSH[]A\A]A^A_fDz'DE1E11f.AJ@ٰD 1NDuJ@ٰD9vIAŃ;-&'DrIV 1L5%SMHSMHBHHhHSMHHRMH#H% AWAVAUATAUSHHIH(H=RMHtZHPHǐL LcHRMHt%JH(DLHH[]A\A]A^A_Hx\$ T$DL$L$H([H]A\A]A^A_fDK:f#DHD$D$E1fDDH@ٰD$1JЅD$uH@ٰ;D$v HT$D$AD;5$#DrHD$ HPH OM1HOMHPHOMHHOMH% DAWAVAUATUSHHHNMHH`HH\t.H HCHH3HKHSH[]A\A]A^A_fDj"DE1E11f.AJ@ٰD 1IDuJ@ٰD9vIAŃ;-"DrIV 1L5NMH NMHBH`HHNMHHMMH\#H% AWAVAUATUSHXH|$H=MMHt$HT$ HL$(LD$0HLL$8L$L$D$H$<H HH0 D$HKMMHtVHc\$D$L$L$LL$8LD$0HL$(HT$ HH Ht$H|$HX[]A\A]A^A_ DHD$@E11Ll$HAJ@ٰ(1,HЅuJ @ٰD9vHL$@Aă;v DrHD$@ Ll$HHPHmLM1H_LMHPHdLMHHQLM@H% fD Dt1Hl$HHD$Ll$@AJ@ٰD 1kGDuJ @ٰ9vHL$Ã;-DrHD$ Ll$@Hl$HHPHKM1YH=KMHGHKMHHKMAWAVAUATUSHHH`KMHH0 H H, t.H HCHH3HKHSH[]A\A]A^A_fDDE1E11f.AJ@ٰD 1[FDuJ@ٰD9vIAŃ;-DrIV 1L5JMXHJMHBH0 H HJMHH}JMH, #H% AWAVAUATUSHxH$H<$H=7JMHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H H LLL$8LD$0 LcHIMLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J HT$Ht$H<$Hx[]A\A]A^A_3LL$8LD$0x@D11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@ٰ1/M1H0/MHPH5/MHH"/M#DH% fDDtHD$D$1H@ٰD$ 1A*ЅD$ uH@ٰ;D$v HT$D$;-DrHD$ HPH.M14H=u.MHGHz.MHHg.MBfAWAVAUATUSHHH@.MHHPHHLt.HHCHH3HKHSH[]A\A]A^A_fDDE1E11f.AJ@ٰD 1;)DuJ@ٰD9vIAŃ;-DrIV 1L5-M8Hy-MHBHPHHp-MHH]-MHL#H% AWAVAUATUSHxH$H<$H=-MHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$HH LLL$8LD$0զ LcH,MLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J8HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@C11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@ٰ1'ЅuJ @ٰ9vHL$0AD;%fCrHD$0LD$8 LL$@H\$HHl$PLd$XHPHI+M1LD$hLL$8Ll$`H=,+MLD$hLL$8HGHH +MHH +MJH% fffff.AWAVAUATUSHHH*MHH HHt.HHCHH3HKHSH[]A\A]A^A_fDjCE1E11f.AJ@ٰD 1%DuJ@ٰD9vIAŃ;-CrIV 1L5*MȪH *MHBH HH*MHH)MH#H% AWAVIAUATUSAAH8H=)MHt$D$HH HL跣 $Hu)MHt8Hc$Ht$DDLH H\$H8[]A\A]A^A_CHD$(D$$1AJ@ٰ(1t$ЅuJ @ٰ;D$$v HL$(D$$;CrHD$( HPH(M1iH(MHPH(MHH(MH% fDZCtHD$(D$$1AL$J@ٰ1#L$uJ@ٰ;D$$v HT$(D$$;-CrHD$( L$HPH'M1襨H='ML$HGH H'MHH'M2AWAVAUATUSHHH'MHHHHt.H HCHH3HKHSH[]A\A]A^A_fD:CE1E11f.AJ@ٰD 1"DuJ@ٰD9vIAŃ;-CrIV 1L5&M蘧H&MHBHHH&MHH&MH#H% AWAVAUATUSHxH$H<$H=w&MHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H"H LLL$8LD$05 LcH%MLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J!HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@:C11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@ٰ1| ЅuJ @ٰ9vHL$0AD;%CrHD$0LD$8 LL$@H\$HHl$PLd$XHPH$M1LD$hLL$8Ll$`KH=$MLD$hLL$8HGH"H$MHHm$MJH% fffff.AWAVAUATUSHHH0$MHH Hh!H!t.H"HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@ٰD 1+DuJ@ٰD9vIAŃ;-vCrIV 1L5u#M(Hi#MHBH Hh!H`#MHHM#MH!#H% AWAVIAUATAUSHIHH#MHtZHP$H"L$ HcH"MHt%Hب#HD[LH]A\A]A^A_@K fCHD$D$E1fDDH@ٰ$1Ѕ$uH@ٰ;D$v HT$D$AD;5&CrHD$ HPH""M1ӢH"MHPH"MHH"MH% AWAVAUATUSHHH!MHH"H8#H#t.HP$HCHH3HKHSH[]A\A]A^A_fDjCE1E11f.AJ@ٰD 1DuJ@ٰD9vIAŃ;-CrIV 1L5!MȡH !MHBH"H8#H!MHH MH##H% AWAVAUATAUSHHIH(H= MHtZH &H`$LĚ LcH MHt%Jx%H(DLHH[]A\A]A^A_ f*CHD$D$E1fDELD$J@ٰ$1|Ѕ$LD$uJ@ٰ;D$v HT$D$AD;=CrHD$ L$HPHM1eH=ML$HGH &HMHHMH% fffff.AWAVAUATUSHHHPMHH`$H%H\%t.H &HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@ٰD 1KDuJ@ٰD9vIAŃ;-CrIV 1L5MHHMHBH`$H%HMHHmMH\%#H% AWAVAUATUSHxH$H<$H='MHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H'H0&LLL$8LD$0 LcHMLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$JH'HT$Ht$H<$Hx[]A\A]A^A_LL$8LD$0x@C11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@ٰ1,ЅuJ @ٰ9vHL$0AD;%vCrHD$0LD$8 LL$@H\$HHl$PLd$XHPHYM1LD$hLL$8Ll$`H=<MLD$hLL$8HGH'H0MHHMJH% fffff.AWAVAUATUSHHHMHH0&H&H,'t.H'HCHH3HKHSH[]A\A]A^A_fDzCE1E11f.AJ@ٰD 1DuJ@ٰD9vIAŃ;-&CrIV 1L5%M؛HMHBH0&H&HMHHMH,'#H% AWAVIAUATAUSIH(HMD$ L$HH)H(Lǔ HcHMHt0H)L$D$ H([DL]A\A]A^A_fD2CHD$D$E1fDEJ@ٰ(1ЅuJ @ٰ;D$v HL$D$AD;=CrHD$ HPHM1HMHPHMHHM%DH% fDrCtHD$D$1AJ@ٰ(1ЅuJ@ٰ;D$v HT$D$;CrHD$ HPHM1əH MHPHMHHMJAWAVAUATUSHHHMHH(H(H(t.H)HCHH3HKHSH[]A\A]A^A_fDjCE1E11f.AJ@ٰD 1DuJ@ٰD9vIAŃ;-CrIV 1L5MȘH MHBH(H(HMHHMH(#H% AWAVAUATUSHxH$H<$H=MHt$HT$HL$HD$ H$HH$H$L$L$HD$(D$L$H+H)LLL$8LD$0e LcH#MLD$0LL$8HttHL$(HT$ D$L$L$H$H$H$H$HL$J*HT$Ht$H<$Hx[]A\A]A^A_3LL$8LD$0x@jC11Hl$PLd$XHD$0LD$8LL$@AH\$HLl$`fEJ@ٰ1ЅuJ @ٰ9vHL$0AD;%CrHD$0LD$8 LL$@H\$HHl$PLd$XHPHM1LD$hLL$8Ll$`{H=MLD$hLL$8HGH+HMHHMJH% fffff.AWAVAUATUSHHH`MHH)Hx*H*t.H+HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@ٰD 1[DuJ@ٰD9vIAŃ;-CrIV 1L5MXHMHBH)Hx*HMHH}MH*#H% AWAVAUATUSHXH|$H=>MHt$HT$ HL$(LD$0HLL$8L$L$D$H$<H`-HHǠ+ D$HMHtVHc\$D$L$L$LL$8LD$0HL$(HT$ Hظ,Ht$H|$HX[]A\A]A^A_bCHD$@E11Ll$HAJ@ٰ(1ЅuJ @ٰD9vHL$@Aă;CrHD$@ Ll$HHPHM1讓HMHPHMHHM@H% fDCt1Hl$HHD$Ll$@AJ@ٰD 1 DuJ @ٰ9vHL$Ã;-FCrHD$ Ll$@Hl$HHPH8M1H=*MHGH/MHHMAWAVAUATUSHHHMHH+HH,H,t.H`-HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@ٰD 1 DuJ@ٰD9vIAŃ;-6CrIV 1L55MH)MHBH+HH,H MHH MH,#H% AWAVAUATUSHXH|$H=MHt$HT$ HL$(LD$0HLL$8L$L$D$H$<H0/HHp-變 D$HkMHtVHc\$D$L$L$LL$8LD$0HL$(HT$ H؈.Ht$H|$HX[]A\A]A^A_CHD$@E11Ll$HAJ@ٰ(1L ЅuJ @ٰD9vHL$@Aă;CrHD$@ Ll$HHPHM1>HMHPHMHHqM@H% fD2Ct1Hl$HHD$Ll$@AJ@ٰD 1 DuJ @ٰ9vHL$Ã;-CrHD$ Ll$@Hl$HHPHM1yH=MHGHMHHMAWAVAUATUSHHHMHHp-H.Hl.t.H0/HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@ٰD 1{ DuJ@ٰD9vIAŃ;-CrIV 1L5 MxH MHBHp-H.H MHH MHl.#H% AWAVIAUATIUSIAHH=W MHH1LH@/p $H. MHt)Hc$DLLHX0H[]A\A]A^A_@CHD$D$E1fDDH@ٰ(1<ЅuH @ٰ;D$v HL$D$AD;=CrHD$ HPH~ M1/Hp MHPHu MHHb M,DH% fD"CtHD$D$1H@ٰ$1Ѕ$uH@ٰ;D$v HT$D$;-CrHD$ HPH M1vH= MHGH MHH MN@AWAVAUATUSHHH MHH@/H/H<0t.H1HCHH3HKHSH[]A\A]A^A_fDCE1E11f.AJ@ٰD 1{DuJ@ٰD9vIAŃ;-CrIV 1L5 MxH MHBH@/H/H MHH MH<0#H% f.1ffff.f.f.1ffff.f.SAHdH%(HD$1DD9rD1v=w$DHt$dH34%(uH[DAvSHdH%(HD$1=v 1H|$dH3<%(uH[RvfSHdH%(HD$1=v ։H|$dH3<%(uH[vSHdH%(HD$1t ΉH|$dH3<%(uH[ufSHdH%(HD$1t ։H|$dH3<%(uH[iufSHdH%(HD$1t ։H|$dH3<%(uH[ufSHdH%(HD$1t ։H|$dH3<%(uH[tff.f.SHdH%(HD$1t ΉH|$dH3<%(uH[\tfff.SHdH%(HD$1t Ή H|$dH3<%(uH[ tfSHdH%(HD$1=v ΉH|$dH3<%(uH[sSHdH%(HD$1t ΉH|$dH3<%(uH[isfSHdH%(HD$1t ΉH|$dH3<%(uH[sfSHdH%(HD$1t ΁t$1u<t1ШD1H|$dH3<%(u!H[ρurH"MlH"MlH"MlH "MlH "MlH"MlH"MlH"MlH!MlH!M lH!MplH!MlH!MlH!M`lH!MplH!MlH!MlH!M lH!MplH!MlH!MlUS1HH!MlH!MlH!MlH!MlH!MlH!MlH !MlH!MlH!MlH!M lH MplH MlH MlH M`lH MplH MlH MlH M lH MplH MlH Ml1#1*j1. M1+ M1& M1! M1 M1 M1 M 1 M 1 M 1 M 1M 1M1M1M1M1M1M1MH[]f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ ZVEGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGtjfD$hd$hl$l((l$ANAF$$@jfD$`HD$ \$ D$dXL$`XC$ CHifD$XHt$\$D$\MXEXL$X$EMNifD$PD$TAXD$A $XL$PH|$\$$AD$A $OpifD$HHT$\$D$LAMAXEXL$H$AEAMJ(iLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGgfD$hd$hl$l((l$ANAF$$gfD$`HD$ \$ D$dXL$`XC$ CHNgfD$XHt$\$D$\MXEXL$X$EMN gfD$PD$TAXD$A $XL$PH|$\$$AD$A $OffD$HHT$\$D$LAMAXEXL$H$AEAMJxfLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h H Ht$HT$CHL$LD$HG B AAA@H|$@IfHDHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h OKH Ht$HT$CHL$LD$HG B AAA@H|$@IfHD2HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIaWfD$8H$d$8l$<((l$ Hd$+WfD$0l$ M(D$4XL$0XEd$(MEANAFVfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMVHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ +'GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIUfD$8H$d$8l$<((l$ Hd$[UfD$0l$ M(D$4XL$0XEd$(MEANAFUfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMTHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H \XGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h ~~Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h {{Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h OyKyHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H vvGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\B 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAE1E1AABo<ABo\fofof`fhBolf`Bof`fof`fhfofofhf`f`fhf`fhfof`f`fof`fof`fhfhfofDofhf`f`fof`f`fhfofofDof`fhfDfAofDfE`fAhfDofAofD`fhfD`fAofhfD`fhfofAfDof`fD`fAofhffDoffDfEhfA`fofoffofDofA`f`fEhfDofhfofEhfofA`f`fhfA`fof`fDfofhfAoffof`f`fhfof`fhfof`fhf`ff`fDhB FDI A9DHHHHD9tWDHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@)aAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@_AWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ ^^EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGDfD$hd$hl$l((l$ANAF$$fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $O@fD$HHT$\$D$LAMAXEXL$H$AEAMJLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ [[EGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGfD$hd$hl$l((l$ANAF$$`fD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $OfD$HHT$\$D$LAMAXEXL$H$AEAMJHLD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDHG H9HF H9LCJfE1E1Bo foABodfofofhf`f`fof`fhf`fof`fhf`f`fhfoffhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9~NDFDGOH9aN DFDGO H9DN DF DG O H9'N DF DG O H9 NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9v}NDFDGOH 9vdNDF9DGOvSFV؈WGf.HLHDHFVHH9ψWGufDfDAWAVAUATUSHD$h SSH Ht$HT$CHL$LD$HG B AAA@H|$@IfHDRSHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h OOH Ht$HT$CHL$LD$HG B AAA@H|$@IfHDOHH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ 7K3KGF BnL$IHL$HHML $HHD$DA_HT$HAIKICI1fD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAF貱fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMcHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ gIcIGF BnL$IHL$HHML $HHD$DA_HT$HAIKICIafD$8H$d$8l$<((l$ Hd$+fD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAM蓯HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H GGGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h +'Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_;#ff.AWAVAUATUSHdH%(HD$x1$ $ H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_~fffff.AWAVAUATUSHHD$ vdH%(HD$81bH$DH$GF BfDP1fIfo%gI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_pAAEAfoԱIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDڮD$L$dH%(HD$81L$DfDfDfDWDxfEfo%MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_ ff.AWAVAUATUSHdH%(H$1$ ѪͪH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-WI@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BDpffIIfID(N<1D(fo%IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_PUSH(L$ (H,HHfHt$H|$\$HZ L$f\$fW qX\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZ L$f\$fW qX\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(DrH?DYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(L\(D(=fDo5fDo- fDo 'H ($AT(<$W(5&((,AYfo-[fAfA[YfoYYXfAff ʚfAfrW(fAvX(frX(YY(YXݚYXY(Y\(YX5XYYXYX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZD$HffWm $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZdD$HffWom $fXL$<YXT$@ZcfZc uMfHt$@H|$HZL$HffW mfYXD$@Z{fZ{HD$XdH3%(uHh[]DUS(Hh(D%nH?DYL$YXXdH%(HD$X1EXXJfEfEHGHD(HHT(D(=fDo5 fDo7(D((=BH AT( CAXDWfo5A(AY[fAfږ[YfoYY%fAffՖfAfrW(fAvXA(frXX(YY(YXYXY(Y\(YX=XYYXYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ D$ffWjL$ fXL$YZCXT$Z3ofHt$H|$L$ ZD$ffWiL$ fXL$YXT$ZsfZs fHt$H|$ZCL$ffW QiYXD$ZCfZCgDIHF(%LH(LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B,HHEL9t).nw5p.v(@[]A\f.DIHF(%LH(LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.Bb,HHEL9t).>w5@.v(@[]A\f.ATUSH3^D$ DIHF(-fLH(%hLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=$_(L,HHEL9t ^D$ .vݏH[]A\ffffff.ATUSHa2^D$ DIHF(%LH(LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=Ԏ_(,HHEL9t ^D$ .vH[]A\ffffff.AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZAX!~\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZXq}\$ X\$,HLDCKL9uH []A\SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.ATUSH dH%(HD$1LD&fAnEf`fafp?hI1HHHAofofdfftK$EHA)f.tD E8~DEHAfufAnf`fafpII9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.ATUSH dH%(HD$1LD&fAnEf`fafp?hI1HHHfAofofdfftK)$EHA)f.tD E8~DEHAfufAnf`fafpII9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.ATUSH0dH%(H$(11f$D@fEfo5{HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h +'Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_.ff.AADL$T$AD$Efo%fnfafpfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ $ H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-FH)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_ fffff.AWAVAUATUSHHD$ vdH%(HD$81bH$DH$GF BfDP1fIfo%ǾI)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfo4IIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDڷD$L$dH%(HD$81L$DfDfDfDWDxfEfo%GMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_Kff.AWAVAUATUSHdH%(H$1$ ѳͳH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_d @AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BDpffIIfID(N<1D(fo%BIMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_USH(L$ (H,HHfHt$H|$\$HZL$f\$fW yX\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZ_L$f\$fW gxX\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(DyHDYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(oL\(D(=rfDo5yfDo-fDo H ($AT(<$W(5((AYfo-`[fAfA[YfoYYnXfAff *fAfrW(VfAvX(frX(YY(YX=YXCY(IY\(\YX5BX[YYX^YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $Z)D$HffW4u $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZD$HffWt $fXL$<YXT$@ZcfZc uMfHt$@H|$HZgL$HffW utfYXD$@Z{fZ{HD$XdH3%(uHh[]uDUS(Hh(D%uHDYL$YXXdH%(HD$X1EXXJfEfEHGHD(zHHT(D(=yfDo5fDo(D((=H AT( AXDWfo5sA(AY[fAf:[YfoYY%vfAff5fAfrW(afAvXA(frXX(YY(YXDYXJY(PY\(cYX=IXbYYXeYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ h D$ffWsqL$ fXL$YZCXT$Z3ofHt$H|$L$ Z D$ffWqL$ fXL$YXT$ZsfZs fHt$H|$Z L$ffW pYXD$ZCfZCAADT$T$AD$Efo%fnfafpfoffsf A@IHHL AfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%LH(LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B•,HHEL9t).w5.v(@[]A\f.DIHF(%LH(LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.B,HHEL9t).nw5p.v(@[]A\f.ATUSH6^D$ DIHF(-LH(%LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=T_(|,HHEL9t ^D$ .v H[]A\ffffff.ATUSH5^D$ DIHF(%FLH(HLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=_(,,HHEL9t ^D$ .ǑvH[]A\ffffff.H(dH%(HD$1HfHHHDHH9fu$D$$D$D$D$D$D$D$D$D$ D$ D$ D$ D$ D$D$trtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(Hf"d@H(dH%(HD$1VfɍHH) $HHfHfo$fFH9)$uH4$HD$AIfAIAEAAEII EII(EIH8I0EDAfADIIDAADII DII(DIH8I0DtrtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(fH)$@AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@AWAVAUATUSH(D$H|$dH%(H$1Ht$HT$ AHL$(LD$0L$`L$hL$pL$xH$H$fAIIHILLO((L(L(EIHHHHHHIA(AYAȱYJD(YDAYXQYAYVXYAYWXYAYXAHM9YAYX+MMMMLL$$$$$$D$D$DX$D$DX$D$DX$D$DX$D$DX$$DX$$X$$X$$X$X$  d$ll$hA#Ak((l$A_A$$|$`DD$\DL$XDT$((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$qfք$L$0D$ $$Efք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$fք$L$0D$ $$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h\fք$L$0$$D$ 0fք$$$X$[X$L$|$`t$@$fք$L$0D$ $$fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ffffff.D@foHIfo IJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfoH1fo Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZXqo\$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z6Xn\$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$X&XD$tXHD$dH3%(uH(fH)$ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf|fff.SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [7j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$pATUSH0dH%(H$(11f$D@fEfo5hHIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$>GF BnL$IHL$HHML $HHD$DA_HT$HAIKICI衣fD$8H$d$8l$<((l$ Hd$kfD$0l$ M(D$4XL$0XEd$(MEANAF"fD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAMӢHT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H <<GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BEyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h KGHt$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_{"ff.AADL$T$AD$Efo%fnf8--foffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfohI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ D@H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-&H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BfDP1fIfo%I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfoIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDWDxfEfo%'MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_+ff.AWAVAUATUSHdH%(H$1$ H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_D@AWAVAUATUSHHD$ &dH%(HD$81H$DH$GF BDpffIIfID(N<1D(fo%"IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_USH(L$ (H,HHfHt$H|$\$HZL$f\$fW l X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZ?L$f\$fW Gl X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(DmHDYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(OL\(D(=RfDo5YfDo-`fDo gH ($AT(<$W(5f((lAYfo-@[fAfA[YfoYYNXfAff fAfrW(6fAvX(frX(YY(YXYX#Y()Y\(<YX5"X;YYX>YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $Z D$HffWi  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZD$HffWh  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZGL$HffW Uh fYXD$@Z{fZ{HD$XdH3%(uHh[]UDUS(Hh(D%iHDYL$YXXdH%(HD$X1EXXJfEfEHGHD(ZHHT(D(=YfDo5`fDow(D((=H AT( AXDWfo5SA(AY[fAf[YfoYY%VfAfffAfrW(AfAvXA(frXX(YY(YX$YX*Y(0Y\(CYX=)XBYYXEYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ HD$ffWSe L$ fXL$YZCXT$Z3ofHt$H|$L$ ZD$ffWd L$ fXL$YXT$ZsfZs fHt$H|$ZL$ffW d YXD$ZCfZCA։DT$T$DD$fo%fAnf8-^foffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfoIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%LH(LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B,HHEL9t).~w5.v(@[]A\f.DIHF(%ĊLH(ƊLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.Br,HHEL9t).Nw5P.v(@[]A\f.ATUSH* ^D$ DIHF(-vLH(%xLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=4_(\,HHEL9t ^D$ .vH[]A\ffffff.ATUSHq) ^D$ DIHF(%&LH((LDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=_( ,HHEL9t ^D$ .vH[]A\ffffff.DIfHFfo-LHfo%pLD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$Qfք$L$0D$ $$%fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$fք$L$0D$ $$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfomH1fo mHf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fD@fo 7mHIIJ HHf8GH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo  8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA@DSH dH%(HD$1ffnAf8tbDXfoIIIIfAofofdfft+)$Ht D E8ELHfufAnf8IM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [Offffff.ftHNUSZIIAA9DGۃ9AESA@D D8ALAHE9uD9D)DBDݍKE)AAAffnLD.1f8fAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$萶ATUSH0dH%(H$(11f$D@fEfo5THIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h ˾ǾHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h +'Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\Bw @.v(@[]A\f.tpATUL$SHHI)fB,HHEL9t).w .v(@[]A\f.t|ATUSL$HHHID$ 0d_(,HHEL9t ^D$ .'vH[]A\fffff.t|ATUSL$HHHID$ 0Ԫ_(,HHEL9t ^D$ .vH[]A\fffff.AUATAUSIHHtlHFrH(HH(HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%ԩd(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%Ԩd(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%ԧd(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%Ԧd(,fA\HA9v0D.w-.vD(H[]A\A]DAAEAfoĦI1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHD*D$L$dH%(HD$81L$DfDfDfDWDxfEfo%ףMILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AADL$T$AD$Efo%*fnfafpfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoȝI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ $ H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ vdH%(HD$81bH$DH$GF BfDP1fIfo%I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfotIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDڋD$L$dH%(HD$81L$DfDfDfDWDxfEfo%MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(H$1$ ч͇H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-I@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ dH%(HD$81~H$DH$GF BDpffIIfID(N<1D(fo%|IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_USH(L$ (H,HHfHt$H|$\$HZ?L$f\$fW GL X\$ ffYZXT$ZkcH9uH([]ÐUSH(L$ (H,HHfHt$H|$\$HZL$f\$fW K X\$ ffYZXT$ZkcH9uH([]ÐUS(Hh(D:MHuDYYL$<XXdH%(HD$X1EXX()<$HHGzfEHfEHD(uL\(D(=ufDo5ufDo-ufDo uH ($AT(<$W(5u((uAYfo-u[fAfA[YfoYYuXfAff jufAfrW(ufAvX(frX(YY(YX}uYXuY(uY\(uYX5uXuYYXuYX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $ZiD$HffWtH  $fXL$<YXT$@Z;fZ{fHt$@H|$H $ZD$HffWH  $fXL$<YXT$@ZcfZc uMfHt$@H|$HZL$HffW G fYXD$@Z{fZ{HD$XdH3%(uHh[]DUS(Hh(D%:IHqDYL$YXXdH%(HD$X1EXXJfEfEHGHD(qHHT(D(=qfDo5qfDoq(D((=qH AT( qAXDWfo5qA(AY[fAfzq[YfoYY%qfAffuqfAfrW(qfAvXA(frXX(YY(YXqYXqY(qY\(qYX=qXqYYXqYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ D$ffWD L$ fXL$YZCXT$Z3ofHt$H|$L$ ZED$ffWPD L$ fXL$YXT$ZsfZs fHt$H|$ZL$ffW C YXD$ZCfZCAADT$T$AD$Efo%Znfnfafpfoffsf A@IHHL AfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfokIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfDIHF(%TkLH(VkLDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.Bi=,HHEL9t).hw5h.v(@[]A\f.DIHF(%$jLH(&jLDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.Bg ,HHEL9t).gw5g.v(@[]A\f.ATUSH! ^D$ DIHF(-hLH(%hLDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=f_(,HHEL9t ^D$ .WfvMfH[]A\ffffff.ATUSH ^D$ DIHF(%gLH(gLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=De_(l,HHEL9t ^D$ .evdH[]A\ffffff.H(dH%(HD$1HfHHHDHH9fu$D$$D$D$D$D$D$D$D$D$ D$ D$ D$ D$ D$D$trtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(Hf"@H(dH%(HD$1VfɍHH) $HHfHfo$fFH9)$uH4$HD$AIfAIAEAAEII EII(EIH8I0EDAfADIIDAADII DII(DIH8I0DtrtkAtcAt[AtSAtKAtCAt;At3A t+A t#A tA tA t A uAHD$dH3%(uH(fH)$@AAETAIHIIN f.oHHIAo@fGL9uLL҃AFBAAFBAAFBAAFBAAFBAAFBAAt{FBAAtkFB AAt[F B AA tKF B AA t;F B AA t+F B AA tF B AA u FBAAI@AAEt4A1IIfDfof)HL9uHHHǃFBGFBGFBGFBGFBGFBGtsFBGtdFB GtUF B G tFF B G t7F B G t(F B G tF B G u FBG@AWAVAUATUSH(D$H|$dH%(H$1Ht$HT$ AHL$(LD$0L$`L$hL$pL$xH$H$fAIIHILLO((L(L(EIHHHHHHIA(AYAȱYJD(YDAYXQYAYVXYAYWXYAYXAHM9YAYX+MMMMLL$$$$$$D$D$DX$D$DX$D$DX$D$DX$D$DX$$DX$$X$$X$$X$X$  d$ll$hA#Ak((l$A_A$$|$`DD$\DL$XDT$((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$豼fք$L$0D$ $$腼fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$(fք$L$0D$ $$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h蜻fք$L$0$$D$ pfք$$$X$[X$L$|$`t$@$fք$L$0D$ $$fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$?ffffff.D@foSHIfo SIJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfoRH1fo RHf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Z&XB \$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$Zv!XB \$ X\$,HLDCKL9uH []A\H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XfXD$tXHD$dH3%(uH(fH)$Offffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf輯fff.SH dH%(HD$1fnAf`fafptfDXIIIIAofofdfft3$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [j|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.SH dH%(HD$1fnAf`fafptfDXIIIIfAofofdfft3)$Ht D E8ELHfufAnf`fafpIM9uA8DLÃFA8DLFA8DLFA8DLFA8DLFA8DLFA8DLt{FA8DLtkFA8DL t[F A8DL tKF A8DL t;F A8DL t+F A8DL tF A8DLu FA8DLDHD$dH3%(uH [wj|HNUSZIIAA9DGۃAAESA@D D8ALAHE9uD9D)DBDݍKE)AAAfnLD.1f`fafpfAofoȃIfd9fffwfoED9fsfofdffffofsfofdffffofsfofdffffofsfofdfff)T$D$D 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9 8LAJ9vq 8LAJ 9v` 8LAJ 9vO 8LAJ 9v> 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]@EA@ffff.AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$D\$D$A(fD$xA(D\$<\$|T$xDT$ fD$p|$Pt$TX|$p[Xt$t|$4$Dl$DDd$@A(A(跨D\$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$@AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$谝ATUSH0dH%(H$(11f$D@fEfo5;HIIfAoN fDoHHo@L9fofoffsfffsffofoffDofffAoffofDffAfDoffoufLffofsf$D$fo$)$D$)$)$)$)$)$)$)|$p)|$`)|$P)|$@)|$0)|$ )|$)$)<$D$D$D$D$D$D$DL$xDD$iDL$ZDD$KDL$D)T$XfDof8:fD8fE8fDo$ffof8%fEf8fDo)t$hf8fofAofD8fA8fD8fAfEoffo$fD8-fD8)d$xfof8fA8ffof85fAfA8fDo$fDfAofD8%NfDfof8 Lf8fA8fDfAofD8 f8ffofAofD85fA8fEfD)$fAofD8fA8fDoL$fEofD8fDfAofEofD8f8fE8fDfof8-f8fDfof8qfDfof8%ofA8f8ffAofD8Af8)$fof857fA8ffAofDffofA8D)$fD85f8 f8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85f8fD8ffAofDof8sfE8)\$XfAofAfEofD8-?fD855f8fDfAofD8%,D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8fDol$fE8fEfEofD8%fEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h Ht$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_ÐAWAVIAUATUSD$h Ht$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_Ð1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%=HHHE11fo7BofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fD1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%HHHE11foBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fDAWAVAUATUSHD$h c_Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h òHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h #Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H ܪGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\Bw8.vD(fDH[]A\A]ffff.AUATIUS1HHAu0]D ܠL( ,fAD]HA9v/D.w.vD(fDH[]A\A]ffff.tpATUL$SHHI)fBB} ,HHEL9t).w .v(@[]A\f.tpATUL$SHHI)fBŸ ,HHEL9t).w .v(@[]A\f.t|ATUSL$HHHID$ 0D_(l ,HHEL9t ^D$ .vH[]A\fffff.t|ATUSL$HHHID$ 0_( ,HHEL9t ^D$ .wvmH[]A\fffff.AUATAUSIHHtlHFrH(uHH(wHT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%d( ,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(uHH(wHT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%d( ,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(uHH(wHT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%d(,fA\HA9v0D.w-.vD(H[]A\A]DAUATAUSIHHtlHFrH(uHH(wHT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%d(,fA\HA9v0D.w-.vD(H[]A\A]DAAEAfoI1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHD"D$L$dH%(HD$81L$DfDfDfDWDxfEfo%MILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AADL$T$AD$Efo% fnf8-mfoffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-fH)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fffff.AWAVAUATUSHHD$ ndH%(HD$81ZH$DH$GF BfDP1fIfo%I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfo-TI1foFIffofo foffofsfffsfoffofffffffsf8) HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [fAWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDGDxffox}MILLIfoN9fofoLfDofDof.fDoHHHHIfoPfEofDfofAsfDfoKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAffoUfDfEfDofEfEofoffsffDffDfAffAoL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofo{fAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD) $MM1)T$)d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(HD$x1$ {{H|$`H4$HT$GL$H$FH$ L$BL$ L$AAA@MfP1Hfo;yH)l$P)l$@)l$0)l$ )l$fo-yfDfAo4fAofoffofsfffofsfffoffo$ffffofffofsffofffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$fodfo)\$foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$ fAo$fo)\$ foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$0fAodfo)\$0foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$@fo)\$@fAoHH9foffsffffffffsf8f8!fsf8!fsff8!fsf8!ff[XL$P)L$P4IIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`L$Pt$PHfnD$PH XHHt$PXH4$HL$PT$PLH fnD$PXNXNHT$PHT$L$PD|$PIfnD$PXJI L|$PMXI JL$P|$PH|$hfnD$PL|$PXIXII IL$PDT$PfnD$PAXHL|$PAXAHL$P|$PAfnD$PXHXHHD$H|$ fnD$LT$0H XH HD$PH|$L$PI HD$@XNH fnD$ NL$LT$XJXJfnD$0L$XIHD$XIfnD$@L$AXHAXAHA$LT$`HDLHD$fDIAQIA{EyHfHfIIljDAc)ƉAcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*L<$lje)lj@*AXGAGfAXAA|$Ad$fAljAljEA*L|$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;L$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_6fDAWAVAUATUSHHD$ sdH%(HD$81sH$DH$GF BVfDP1Ifo+qI)d$ )d$)$$fo%qfo,fAofDoffofAsfDfAofsfffofEofofffDfofsfffAfAffofofffffffsf8f8!fsf8!fsf8!ffofsf8!ffofo,fof[X $foffsfff) $fofffffsf8f8!fsf8!fsf8!fsff8!ffofof[X\$foTHL9foffsf)\$fofffffffsf8f8!fsf8!fsf8!ffofsf8!ffof[XL$ )L$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA}AOdIDIEXHDyDiIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfo$lIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDkD$L$dH%(HD$81L$DfDfDfDWDxfEfo%7iMILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_;ff.AWAVAUATUSHdH%(H$1$ ggH|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-dI@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_T@AWAVAUATUSHHD$ ^dH%(HD$81^H$DH$GF BDpffIIfID(N<1D(fo%2\IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_蠸AAEAfo-WIIHIfoVN f.HHIAHfoffofsfffsffofofffffffsf8OL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [I@AWAVAUATUSHHDVD$L$dH%(HD$81L$DfDfDfDGDxffoTMILLIfoN9fofoLfDofDof.DHHHHIPfEofDfofAsfDKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAfUfDfEfDofEfEofoffsffDffDfAfAL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofo|RfAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD $MM1T$d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_+ff.AWAVAUATUSHdH%(H$1$ RRH|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-OHD$ LLHD$Ht$L(HD(ID(MD(foOfDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofg[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDof`[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofb[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[AXf8!fsf8!fDof[XYI9foffsfffDfAoffDffAfsf8f8!fsf8!fsf[Xf8!fsf8!f[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$fDIAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_D@A։DT$T$DD$fo%HfAnf8-Ifoffsf!IHHL DAfofoHfoIffsfffofofffffffoffsfGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUfffff.AAEAfo$FIIHIN fHHIAPfoffsfofofffsffffffsfGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAIfAWAVAUATUSHdH%(H$1$ yFuFH|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-CHD$ LLHD$Ht$L(HD(ID(MD(foCfDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfg[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf`[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAfb[DXfDofoffsffDffDffEffsfA8fDofD8!fsf8!fsfAfD8!fsf8!fAf[XYfDoI9foffsfffDfAoffDffAfsf8f8!fsf8!fsff8!fsf8!ff[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$IAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_dH%(HD$81>H$DH$GF BDpfIIMIfo$<I(N<1(fo<LHHIDAIIxfEofDfDofAsfDARfAsfDfEofEoffofEfEfEoffsffDfAfEfDfAofEoffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAoED$fsf8!fffAofD[fAofsfXfAoffAfAffEfAfsf8fEof8!fsf8!fsff8!fsf8!fASf[XfAofoL9ffsfffAfDfAfAffsf8f8!fsf8!fsfD8!ffofAofsf8!ff[X4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A|AOd-I@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHxD$ ~9z9H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ LMD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_aAWAVAUATUSHD$ 33L$dH%(H\$x1AH$EGF BfALYLMIHL)|$PL|0L)|$@)|$0)|$ )|$)<$fDI H H I I fAo[foSfofAoCfsfoKfofsf:Ufofsfof:Uf:Ufsfof:UfoffffofffoMffofofoUfofofsf:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[X$$f[fAoUXL$fofs)$$)L$fAoMfof:Ufsf:Ufffoffffofoff8#fofsf8#ff8#fsf8#[Xd$ f[XL$0)d$ )L$0fAod$fAoL$M9fofofsf:Ufsfof:Ufffofffofff8#fsf8#ff8#fsf8#[XT$@f[XD$P)T$@)D$PIL<$Hl$(ILl$ H\$LMMMLLt$L\$D<$I fLd$0fn,$Hl$ D4$Hl$@I fn$H\$hXD,$H\$PI L\$L\$8Xfn4$D$$I fn$,$fn$$L\$0X$L\$HXfn $L<$XX,$L4$L\$@X$L\$XL,$IX4$I L$$XLt$Hl$ X$L,$IH\$hI X$$L,$L|$0X $Ld$@$H fn<$D4$I Xfn<$,$H Xfn<$D<$Xfn<$D$$Xfn<$D$I Xfn<$L4$MX$H,$I X4$XL4$MI X$L4$X$$L$X $H$_X,$(YX/(VYYXX6JD$ASAN$IIAXEpHDiiIffIAEHDEE)EEqA\-AiEEDADAED)EErA**AjEEDADAED)EDpXOXEDOffA*Dh*DAADEA)L9XNEXNff*A*XJXJHD$xdH3%(uHĈ[]A\A]A^A_̌fff.AWAVAUATUSHdH%(H$1$P )-%-H<$Ht$HT$GL$ L$(FH$0 H$8BL$@ L$HAAA@fHHL$(LHHHHD$ LMHD$HL$L(M(((D(D(D(D(D(DE1I I I H H AAH fEoH fDofsfAsAOfE:UAWfEofDofofE:UfDofsfsf:UfD:UfAofAoffAfEoEnfDfAfAVfAfEofDofsfA:UfAsfDofE:UfDofEfDfEfE8#fAsfDfE8#ffAfEfD8#fsf8#E[EXDofA[DXWfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[EXDjfA[DXRfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[EXDhfA[XPfEofDofAsfsfA:UfDofE:UfDofEfDfDfEfE8#fAsfE8#ffAfEfD8#fsf8#E[AXDnfA[XVfEoI9fDofAsfsfA:UfDofE:UfDofDffAff8#fEfsfEf8#fA8#fAsfE8#f[XfDE[AXDd$0fHD$ D\$@DT$PIIHDL$`HII$DD$p$$$$DT$0HL$(|$@DXXl$`XDL$Pt$pDXDXT$4$X|$D$$XD$X$XXDXXXl$dDXL$TXt$tX$X$X$DX$X$DXT$8X|$HH$Xl$hDXL$XX$X$DXT$<X|$LXl$lDXL$\X$X$X$D(x(DYXt$xYX$DX$X$EXDXXt$|X$DHD$DX$h(DHD$YX(YXYX0AXQ!AAH$PHLHD$DIErIABAyIAqffHEHIDDEsAsD)A׉EDD*H<$D)Ds*sADXGXGfDfDDAD)Du*H|$*uDXGXGfAfDDAD)Et$*H|$*At$EXGXGffDIDE}*ljD)Eu*ΉAAAAXA)X Af* f*AXHL;L$AXAHA!H$dH3%(uH[]A\A]A^A_迃ffffff.AWAVAUATUSHH$P +$'$H|$Ht$HT$H$H$XGH$hFL$pH$ H$`BL$x AH$AdH%(H$1$A@fL$HH$L$HH$MH$LI)$HLL)$HLH)$)$)t$p)t$`)t$P)t$@)t$0)t$ @I H H H I H I fAoafAoAfofofoHfsfsf:UfoPf:Ufofofofsfsf:Uf:UfofoffffoZfffoffofoRfofsfof:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[Xd$ f[fo^XT$0fofs)d$ )T$0foVfof:Ufsf:Ufffofffoffofoffsf8#f8#foff8#fsf8#[Xd$@f[fAo^XT$Pfofs)d$@)T$PfAoVfof:Ufsf:Uffffoffofofff8#fsf8#foff8#fsf8#[Xd$`f[fo_XT$pfofs)d$`)T$pfoWfof:Ufsf:Uffffoffofff8#fsf8#foff8#fsf8#[X$f[X$)$)$fAogfAoWI9fofofsf:Ufofsff:Uffofffff8#fsf8#ff8#fsf8#[X$f[X$)$)$uH$LLH|$8L|$XH$L$HHHHIIHD$ H$H$Lt$HH$H$H$HD$(H|$PHt$xL|$PH$L|$hH$H$L$HD$0H$L$H$Lt$`H$HD$ L|$`HD$@L|$pL$Ht$pL$H$T$ fHt$0H$L$L$t$@H fDnL$@T$@fDnl$@D$@H fDnT$@|$@DXfDnd$@H$DXDt$@DXH fDnD$@D|$@DXfDn\$@DT$@I fn|$@T$@DXfnT$@\$@DXfnt$@D\$@XfnL$@Ht$@XHt$ DXL$@I XH XH Ht$ DXl$ HD$ LDXT$ H|$ H DXd$ Lt$ DXD$ HD$ DX\$ LT$ II X|$ H$LT$ H$XT$ H\$ LH Xt$ L$H\$ L|$PXL$ D$ H fn\$ |$ H fnl$ HT$`Dt$ Ht$pDXDXfnl$ D|$ fnd$ T$ I DXI DXfnd$ t$ fn\$ L$H L$H$DXDXDT$ fn\$ D\$ I Xfn\$ \$ Xfn\$ H|$ l$ Lt$ DXT$ L|$ II d$ XL|$ fn\$0LDXD$ Ht$ H XHt$0\$ HT$ X|$ L\$ IAXI H XT$ L\$ Xt$ Ht$ XL$ HD$ AXD(DXL$ HD$DYAXEXDD(hA(DYHD$`A(AX((HD$YXX (QYYXX9AAH$L$L$HH$LHD$ IErIABAyIAqffHEHIDDEsAsD)ADADD*H|$D)Ds*sADXGXGfDfDDAD)Du*H|$*uDXGXGfAfDDAD)Et$*H|$*At$EXGXGffDIDE}*ljD)Eu*ΉAAAAXA)X Af* f*AXHL;L$ AXAHAH$dH3%(uH[]A\A]A^A_wffff.AWAVAUATUSHxD$ njH$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0D(LD(DA[I H H I I SfoESfsKfEofAsfD:UfDofsfof:UfD:UfsfD:UfofAofAofEoffAfADUffofEfA]fAofDofDofsfsfA:UfDofD:UfDffAofEfEfffA8#fD8#fAsfE8#[DXfsE[A]E[EXf8#fDofs[fDoEXEUDXfAofA:UfDofsfD:UfDffAofEfEfffA8#fD8#fAsfs[XfE8#E[f8#AXE[fDo[AXET$XAT$fAoM9fDofsfA:UfDofsffD:UfDfAofAfEffAf8#fsf8#f8#fs[X[f8#[X[XXt$0fIDD$Id$PLMM|$ MLl$@D $\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AQAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_ArAWAVAUATE1USHD$H$ L$AHD$dH%(HD$x1EGF B}fAE(((D(D(VH\$AEEAIHFE9C fAofsAfDofsfA:UfDofsfDofD:Uf:UfAsfofE:UAffAfAfCfEofDofsfDofEf:UfAfAsfDofE:UfDofDfAoffEfEfEofffA8#fAsfE8#fDofDofDf8#fsf8#E[EXfA[DXCfDofsfDof:UfAsfE:UfDffEfAofEfEofffA8#fAsfE8#fDofDf8#fsf8#E[AXFf[XfAofDofsfsfA:UfDofD:UffDfAofAfEffAf8#fsf8#ff8#fsf8#[Xf[Xt$@fDD$ d$`|$0l$PDL$\$ T$@XXL$`Xt$l$0XX\$$d$PXT$DXXXL$dXt$Xl$4Xd$TX\$(XT$HXL$hXt$Xl$8Xd$XX\$,XT$LXL$lXt$Xl$<Xd$\_((YYYXXX7.VJD9$H@EfIfNAAEcOAkAEADDDK,E)]DeE߉EDDAA*K,LT$D)De*]DADDAXODD)AXOf*Ajf*AEDDDXNEA)ED;$EXNfA*fA*XJXJHD$xdH3%(uHĈ[]A\A]A^A_lffff.AWAVAUATUSHxD$ > : H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_!gAWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_aAWAVAUATUSHxD$ H$dH%(H\$h1AL$EGF BfALYLIMHL(((L|0(LD(fDEKI H H I I ACfEoSfDofsfAsfA:UKfE:UfDofDofEofsfAsf:UfE:UfofEffAfAfAffDoMfDofEoUfDofDofAsfsf:UfE:UfDffEfAofEfEofDofAffA8#fAsfE8#fEofDf8#fsf8#E[EXfAU[XAMfDofsfDof:UfAsfE:UfDffEfAofEfEofAffA8#fAsfE8#fDofDf8#fsf8#E[AXET$f[XAL$fAoM9fDofsfsfA:UfEofD:UffDfAofAofEfAfAff8#fsf8#ff8#fsf8#[Xf[X|$fIl$0I\$PLMMt$ MLD$d$@\$T$0XXL$PX4$l$ XX\$d$@XT$4XXXL$TXt$Xl$$Xd$DX\$XT$8XL$XXt$Xl$(Xd$HX\$XT$<XL$\Xt$ Xl$,Xd$L_((YYYXXX7.VJD$AJAN$IIEXExHDqDiIffHDDIAAE)EAYG.EqAEEDEED)EDpA**XEDEAEED)EErXOXOffA*E*AZDAEEEEXND)L9XNffA**XJXJHD$hdH3%(uHx[]A\A]A^A_[AWAVAUATUSHXD$H4$dH%(HD$H1HT$L$DL${Xffo=MHLLH(H,(fDoLfo5DHHHHIHf8QfofafiffA8fffJfof8fA8fDofDafifDfffAfD8#fsf8#E[AX[XNf8fDofDafifDfffAfD8#fsf8#E[AX[XAJH9f8fDofDafifAffff8#fsf8#[X[X\$0IIIl$Id$ t$l$Xt$d$(Xl$\$,Xd$ T$0X\$$L$4XT$8XL$؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo \H1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.AWAVAUATUSHdH%(H$1$ H|$H $LD$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfDoHD$ LLHD$Ht$L(I(I(M(fo=hfoIIIAOIHHHEYfDof8fE8fE8fA8fEofE8fD8fAsfE8EJfE8fEofD8fA8fE8fE8fDofDofE8fE8fEofDofDofE8fAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXEHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDIfEofD8fE8fE8fE8fE8fEofE8fAsfE8fE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDOI9fEofD8fE8fE8fE8fA8fsfE8fA8fD8!fsfD8!fsfEE[AXfD8!fsf8!fA[XHD$ Ht$(t$0H $l$@IHHd$PIII\$`T$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$(LT$HDLHD$IAIIECEyHfHfIIADAc)ljAcDADCcAljAADEA*AcA)EA*AXBABfAX A DEefAljAADEA*AeA)EA*XFFfXED$Ad$fAljAADEA*AAd$A)EA*XBBfX  EEAefAljAADEIA*L<$AAeA)EA*AXGAXAfAGE~fAAAfAAfEA*LD$ljA)L;L$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_E@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%}DIIHAGHHHHAYfof8f8f8f8fDof8f8foQfsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_((d$0$$|$ Sfք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$fք$L$0D$ $$fք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$hfք$L$0D$ $$؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfo<H1fo >Hf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZfX{ \$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZaXA{ \$ X\$,HLDCKL9uH []A\ATUS((H@XH-RXY(dH%(HD$81XXX5n_ Y|$(DQHGD(LHLL(f(H X\(^f: Y\f:AXf[)$$H4$HL$LcH B$BD@`$DHcH `@$D@`$D@`L9YIJHHσu!HD$8dH3%(H@[]A\@\$ HZL$L$I\$ f(L$T$H\D$$ZTX4y $T$X,H DEML9uOATUS((HPXH-BXY(dH%(HD$H1XXX5^] Y|$(DAHGD(LHHt(f(H X\(^f: Y\f:AXf[D$ HcL$ $DHcL$$`@$DHcL$(`@$DHcL$,`@$D@`H9]IHHHσuHD$HdH3%(HP[]A\\$0HZL$L$I\$0f.(L$T$H\D$\$ ZCX#w \$ T$X,H DEML9uIH(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$XXD$tXHD$dH3%(uH(fH)$offffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hffff.H(dH%(HD$1DffAnf8fot3HHHHH@ofoHfdH9f8fouffAn$f8f8<$fofsf8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DH(dH%(HD$1DffAnf8fot3HHHHH@fofoHfdH9f8fouffAn)$f8f8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVAUATUSHdH%(HD$x11fD$^cD@ffo5+nHIIfoN oHHo@L9fofoffsfffsffofDofffDffAfffufLffsfl$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu HĈ[]A\A]A^A_E1E1HAWAVAUATUSHdH%(HD$x11fD$^kD@ffo5{jHIIfoN HH@L9fofoffsfffsffofDofffDffAfffufoifsLf8d$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu'HĈ[]A\A]A^A_f.E1E1AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5fIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufHfHfsff:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)l$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu&HĈ[]A\A]A^A_fE1E1AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5)cIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufobfsHHf8f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)d$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu%HĈ[]A\A]A^A_E1E1PH(dH%(HD$1DffAnDf8DHI1foIIIIM9Afofdfofvf8r$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)fnIM9f8_A8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12offffff.ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHAofofdfftC$EHA)f.tD E8~DEHAfufAnf8II9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?׺tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.USH(dH%(HD$1ffnˉf8DXfoI1IIIfAo fo)$$fd$fofvf8L$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)fnf8IM9<8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11耶ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHfAofofdfftC)$EHA)f.tD E8~DEHAfufAnf8II9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.ft&fHHfDHXFH9uffff.ft&fHHfDHXFH9uffff.US8LO HF L9AH9A HB L9AH9D A Afo5RE1E1fo-RAfDoRAfo=RABoBoTfofA8fof8FoLf8f8fBoffofAofA8f8fDof8fD8fD`ffAfDofhfD`fofhfDof`fEofDhfDofAofEffDofAofDofAfD8f8fD`f8fAfDofAf8fEfhfD8ffAofDffD8fAf8f8fEffAffofhf`BdB I A9DHHHHD9tUHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@US8LO HF L9AH9A HB L9AH9D A Afo5OE1E1fo-OAfDoOAfo=OABoBoTfofA8fof8FoLf8f8fBoffofAofA8f8fDof8fD8fD`ffAfDofhfD`fofhfDof`fEofDhfDofAofEffDofAofDofAfD8f8fD`f8fAfDofAf8fEfhfD8ffAofDffD8fAf8f8fEffAffofhf`BdB I A9DHHHHD9tUHjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@NAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@MAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ 6L2LEGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAG脯fD$hd$hl$l((l$ANAF$$PfD$`HD$ \$ D$dXL$`XC$ CHfD$XHt$\$D$\MXEXL$X$EMNʮfD$PD$TAXD$A $XL$PH|$\$$AD$A $O耮fD$HHT$\$D$LAMAXEXL$H$AEAMJ8LD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_AWAVAUATUSHxD$ IIEGF B AAA@CIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(AOIAGԬfD$hd$hl$l((l$ANAF$$蠬fD$`HD$ \$ D$dXL$`XC$ CH^fD$XHt$\$D$\MXEXL$X$EMNfD$PD$TAXD$A $XL$PH|$\$$AD$A $OЫfD$HHT$\$D$LAMAXEXL$H$AEAMJ舫LD$0fD$@HD$(HD$ HD$D$DAAX@HXL$@HD$A@AHD$L;|$8/Hx[]A\A]A^A_ÅHG H9HF H9TKJffo=dEE1E1Ƀfo5`Efo-fEfo%kEABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9TKJffo=BE1E1Ƀfo5Bfo-Bfo%BABoBoLfDof8fofD8f8f8fAffoffofofhf`BDBI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9wNDFDGOH9ZN DFDGO H9=N DF DG O H9 N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vvNDFDGOH 9v]NDF9DGOvLFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHD$h [AWAH Ht$HT$CHL$LD$HG B AAA@H|$@IfHDr=HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHD$h ==H Ht$HT$CHL$LD$HG B AAA@H|$@IfHD"9HH|$HHD(HD$D(H|$H|$PID(D((H|$H|$X(((H|$H|$`H|$LLL$8/fADDffDf|$fDf|$fADDf|$NAfADDEiffɉ'Dg)D'fAʼnЉgAADfEAEЉD*DE)EA*AЉ)AXGAAXAGf*HD$Af*t$X@X@fAfHT$*Ht$)\$*ȉAXBBfX  AfEЉʘ*\$AD)ؘ*ȉA˘IXFHIED)FfX*f*HD$XXHHHD$HD$HD$HD$L;t$$HD$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$ufA*Y\D,WfA*Y\,D$fA*Y\,D$Of*AYA\,D$fDf@*AYA\,f[]A\A]A^A_DAWAVAUATUSHH$ 88GF BnL$IHL$HHML $HHD$DA_HT$HAIKICIQfD$8H$d$8l$<((l$ Hd$fD$0l$ M(D$4XL$0XEd$(MEANAFқfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAM胛HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVAUATUSHH$ 66GF BnL$IHL$HHML $HHD$DA_HT$HAIKICI聚fD$8H$d$8l$<((l$ Hd$KfD$0l$ M(D$4XL$0XEd$(MEANAFfD$(l$ D$,(A $AXD$XL$(d$(AD$A $AEAM賙HT$fD$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_ff.AWAVIAUATIUSD$H 55GF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\BfDfof8 <f8fA8fDfAofD8 f8ffofAofD85fA8fEfD)$fAofD8fA8fDoL$fEofD8fDfAofEofD8f8fE8fDfof8-xf8fDfof8afDfof8%_fA8f8ffAofD81f8)$fof85'fA8ffAofDffofA8D)$fD85f8 f8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof85f8pfD8ffAofDof8cfE8)\$XfAofAfEofD8-/fD85%f8fDfAofD8%D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8fDol$fE8fEfEofD8%fEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAUATAUSH0-ALAAL9LAE\$L9AE0A&ET$AADw:ffEnIfDnfo=H1fD8fDo=fD8fAofAofAofAofA`fAhfA`fAh)l$)d$)t$)T$)l$)d$)t$)T$)l$)d$()t$8)T$HIHEoqEoiEoEoD)t$xD)$EoqEoiD)$fEoD)$fD8%)fEofD8*fD8Eo fE8fEfEoEo0fD8fD8Eo@fED)d$fEofEofD8 AoPfEfDof85Ao`fE8D)T$XfEofD8zfD8AopfE8fDfof8-SAoYf8D)D$hfEfDofof8%;AoQfA8fEffof8fA8AoAfDofof8AoIf8fAffofof8 ffof8fA8fDoT$xf8fDo$ffofAoffAof8fA8fDo$fD8tffAofDo$f8 HfAfEo)L$xfAofD8fA8fAfEofEofD8fD8fEfEofD8-fD8fEofEofD8fE8fEfEofD8 fD8D)$fEfEofDof85fE8fDod$fDfEfofDof8}f8%dD)$fD8ffof8Df8fDoL$XfA8)$fofof8 )fAfA8ffAofD8 ffAofD8%fA8f8fEfDod$hffEofAofD85fA8fD8fDfAof8fDfof8-f8fDofof8fA8ffAofAfDod$xfA8)l$fAof8ffAofEof8-*fD80fD8fD8fDfAofD8- fA8fEfAfDof85D)T$XfDof8fD8fE8fDo$ffof8%fEf8fDo)t$hf8fofAofD8fA8fD8fAfEoffo$fD8-FfD8)d$xfof8>fA8ffof85'fAfA8fDo$fDfAofD8%fDfof8 f8fA8fDfAofD8 f8ffofAofD85fA8fEfD)$fAofD8fA8fDoL$fEofD8fDfAofEofD8Yf8@fE8fDfof8-(f8fDfof8fDfof8%fA8f8ffAofD8f8)$fof85fA8ffAofDffofA8D)$fD85f8 f8fDo\$hfAfAofDot$XffA8fAo)$f8fofAofDo\$xffAofEof859f8 fD8ffAofDof8fE8)\$XfAofAfEofD8-fD85f8fDfAofD8%D)t$hfEfA8fDo$ffEoD)l$xfD8fEofEofD8fDol$fE8fEfEofD8%WfEofDod$fEfEofE`fEhD)$fEfEfAofEofA8fD8fDfEofDofD`fhfAofDod$fDfEof\$fDod$f8fD8fDfE8fEfDot$fEfDod$fAfA8D)$fEfD8ffDol$fEfE8fEfDofD`fAfhfEo)$fAofAofEofDoL$ffAfA8fDfD8fA8fDfof`fhfDfEofDfE8fDot$fD8fAf8fEfDod$fED)$fAf8fEofDoD$ffAfA8ffAoffo)$f`fhfofAoffDofAfAof8ffofAfAofA8fA8f8fffDofof`fhfoffAof8fAf8ffAfA8fA8fffAofEof)$fofAoffDofofof`fhfofAoffofAfAof8ffoffofA8fA8f8ffAoffA`fofAofA`fEhfofAofAfEfA8ffE8fAf8fEof8fEhfEoffAfofDfof)$fAofDofofDD)d$fEofEofD8fEfAofo$fDofA8fofAf8fhfDfof`fofff8fA8fAfAf8fA8ffAofEoffAofDfE8fDfo$fDofofDfofDof`fDhfDffDofAofD8fAfofDfE8fA8fDfo$fof`fhfofoffAfDfAofDot$fA8ffAf8f8f8fAffA8ffoD$XffofofofDofDfAof`fEofhfofo\$hfDfD8fL$ffA8fofDoff`fDfofA8fhfDfAofDof8fDfAofDot$f8fA8fAfA8fffod$ff8fDfoffoffoL$xfofof`fhfofo$ffofAofDoff8fA8fDhffofAfA8f`fot$ff8ffot$(ffo\$fDfE8ff8)\$fD)t$foD$8fo\$Hff8ffA8fo$)\$f)D$fAoffo$fofAhfA`fDofAhfE`fDofo$fofAhfA`fDo$fEofEhfE`fDo$D)l$hD)t$XfEofEhfE`fEofEofDhfD`fo$fDofhfD`)l$xfod$f`fofod$fhfofAhfA`fDofAhfE`fEofEhfE`fEofEhD)d$fE`D)$fDofAhfE`fDofDoT$xfAhfDod$XfE`fDofAofDhf`D)d$XfDod$hfAofDhf`fAofDofAhfE`fDofh)D$hfD`fAofEhfA`fDofAhfoD$fE`fDoT$XD)D$xfDofAofDhf`fofAhfA`fDofAofDhf`fAo)D$fo$fDofhfD`fofAofDhf`DfoD$hfDofAhfoL$fE`fEofDh0fD`fofAhD fA`D@`fofhf`fAofDhf`fol$xfoHfA`fAoDPfh@fopfAhp@fAoPf`Dp@HD9AىINIA9ۍ,DIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH0[]A\A]IIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h kgHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_ÐAWAVIAUATUSD$h {wHt$HT$HL$GF B AAA@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$ffH\$ЉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvA*AfDE)EEA*EDDAXGDDEAGfE)EAEA*LT$AXDAfA*ADAXB)ABfAX A EfEEA*LD$*DDAX@AXDd$DT$A@fAADfDED)*H|$*DDEXGXGfDfDIAHH*HD$HD$)ИHD$HD$*L;L$AXMAMAXEAE[]A\A]A^A_Ð1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%HHHE11foBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fD1LOHFL9AH9A HBL9AH9D A IAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLG LN fA LR G{B LG LN f A LR G kB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LGLNf ALRG KBLGLNfLRGADqDE)AEE)AAAfo%HHHE11foBofBo fofof`f`fhfhfffof8f8fBI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^DIII1E1DBB$BID9wûfDfDfDfDfDvfDffDVfDFfD 6fD &fD fD fD fDAWAVAUATUSHD$h Ht$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h KGHt$HT$G C B AAA@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyffɉljDAf)ƉAfDA}‰AmAlj@Alj@EA*ljljAm)lj*AXBABfAX A A<$f@AljAl$Alj@EA*L|$ljAl$)lj*AXGAGfAXA}f@AljmAlj@EA*L|$ljm)lj*AXGAGfAXA;f@AljkAlj@EA*ljljk)lj*XAX  fAE{A+fljAljA+II*IIHHIƉA)L;L$*AX@A@AXA[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVAUATUSHD$h Ht$HT$G C B AAA@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyffɉljDAf)‰AfDA}ƉAeAljAljEA*ljljAe)@*AXBABfAX A A<$fɉAljAd$AljEA*L|$ljAd$)@*AXGAGfAXA}fɉAljeAljEA*L|$lje)@*AXGAGfAXA;fɉAljcAljEA*ljljc)lj@*XAX  fAE{A#fDljA#@II*IIHHID)L;L$*AX@A@AXA []A\A]A^A_AWAVIAUATIUSD$H hdGF BQE1fDDYf1EPHA8fIIDۉAA)H\$8AAfEQF\Bw @.v(@[]A\f.t|ATUSL$HHHID$ 0_( 0,HHEL9t ^D$ .vH[]A\fffff.t|ATUSL$HHHID$ 0T_(|/,HHEL9t ^D$ .v H[]A\fffff.AUATAUSIHHtlHFrH(HH(HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%Td(.,fA\HA9v0D.'w-!.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f(@H H(H]]__f[f[fk)AH9uHVHHHIHA1Eu/]D%Td(-,fA\HA9v0D.'w-!.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%Td(,,fA\HA9v0D.'w-!.vD(H[]A\A]DAUATAUSIHHtlHFrH(HH(HT0f@H HH]]__f[f[fkAH9uHVHHHIHA1Eu/]D%Td(+,fA\HA9v0D.'w-!.vD(H[]A\A]DAAEAfoDI1If.fofofoffofsfffsfofffoffffofffffsf)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDWDxfEfo%WMILLIfAoN9fAofEoLfAofEofDfoHHHHIfoPfDoffofAsfDfoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAffoUfAfDfDoffAofoffsffffDfAfAffDfofAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD) $D)D$)|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_[ff.AADL$T$AD$Efo%fnf8- foffsftzAE1IIfBo fofofoffsfffofofffffffoffsfB)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEt{AfoHI1IfDfofofoffsfofofffsffffffsf)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGffff.AWAVAUATUSHdH%(HD$x1$ H|$`Ht$PHT$XGH$H$FL$ L$BL$ L$AAA@fP1fHfo-H)|$ )|$)<$)|$@)|$0ffDfDofDofDofAo$fDofDofofoffofsfffofsffDoffDoffo\fDofDffAfofffDofsffofDffffDffofDfoffofAofDofsffof`fDifafAofrfDofrffo[fhfofDifafAofrfrf(T$0[XfAoXfoffsf)T$0fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$@[XfAoXfoffsf)T$@fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf($[XfAo\Xfoffsf)$fDffofffDffofDfoffofAofDofsffof`fDifafAofrfrffo[fhfofDifafAofrfrf(T$[XXfo)T$fAoHH9foffsffffffofDfAfffofofofsff`fifafofrfofrffo[fhfofifafofrfrf(D$ [XX)D$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`L$@t$@HfnD$@H XHHt$@XHt$PHL$@T$@LH fnD$@XNXNHT$@HT$XL$@D|$@IfnD$@XJI L|$@MXI JL$@|$@H|$hfnD$@L|$@XIXII IL$@DT$@fnD$@AXHL|$@AXAHL$@|$@AfnD$@XHXHHD$0H<$fnD$0LT$H XH HD$@H|$0L$@I HD$ XNH fn$L$NL$0XJXJfnD$ $XIH$XIfnD$  $AXHAXAHA$LT$`HDLH$fIAQH{EyHfIfIIljDc)ƉcD}‰eAljAljEA*ljlje)lj@*AXBABfAX A A|$Ad$fAljAljEA*L|$PljAd$)lj@*AXGAGfAXAA{AcfAljAljEA*L|$XljAc)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_ fffff.AWAVAUATUSHHD$ dH%(HD$81H$DH$GF BfDP1fIfo%I)t$ )t$)4$ffofAofDoffofAsfDfsffDoffAofffAofDfDfofoffAffAofsffoffffAfffffofofsffof`fafifofofrfrf[fhX$fofofafifofrfAofrf[Xfofo)$foffsfffffAfffffofofsffof`fafifofofrfrf[fhXD$fofofafifofrfrf[XfoLfoHfofL9fsf)D$fAoffDfoffffAfffofsffof`fafifofofofofrfhfofrf[fifafofrfrf(D$ [XX)D$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA|AOdI@IEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_AAEAfo-I1foIffofo foffofsfffsfoffofffffffsf8) HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [fAWAVAUATUSHHDjD$L$dH%(HD$81L$DfDfDfDGDxffoMILLIfoN9fofoLfDofDof.fDoHHHHIfoPfEofDfofAsfDfoKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAffoUfDfEfDofEfEofoffsffDffDfAffAoL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofo|fAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD) $MM1)T$)d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_+ff.AWAVAUATUSHdH%(HD$x1$ tpH|$`H4$HT$GL$H$FH$ L$BL$ L$AAA@MfP1HfoۜH)l$P)l$@)l$0)l$ )l$fo-fDfAo4fAofoffofsfffofsfffoffo$ffffofffofsffofffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$fodfo)\$foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$ fAo$fo)\$ foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$0fAodfo)\$0foffsffffffffsf8fof8!fsf8!fsff8!fsf8!ff[X\$@fo)\$@fAoHH9foffsffffffffsf8f8!fsf8!fsff8!fsf8!ff[XL$P)L$P4IIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`L$Pt$PHfnD$PH XHHt$PXH4$HL$PT$PLH fnD$PXNXNHT$PHT$L$PD|$PIfnD$PXJI L|$PMXI JL$P|$PH|$hfnD$PL|$PXIXII IL$PDT$PfnD$PAXHL|$PAXAHL$P|$PAfnD$PXHXHHD$H|$ fnD$LT$0H XH HD$PH|$L$PI HD$@XNH fnD$ NL$LT$XJXJfnD$0L$XIHD$XIfnD$@L$AXHAXAHA$LT$`HDLHD$fDIAQIA{EyHfHfIIljDAc)ƉAcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*L<$lje)lj@*AXGAGfAXAA|$Ad$fAljAljEA*L|$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*ljljAe)lj@*XAX  fAE~fAljljAfljAf@*ljƉA)L;L$@*AX@A@AXAHD$xdH3%(uHĈ[]A\A]A^A_fDAWAVAUATUSHHD$ 6dH%(HD$81"H$DH$GF BVfDP1Ifo˔I)d$ )d$)$$fo%fo,fAofDoffofAsfDfAofsfffofEofofffDfofsfffAfAffofofffffffsf8f8!fsf8!fsf8!ffofsf8!ffofo,fof[X $foffsfff) $fofffffsf8f8!fsf8!fsf8!fsff8!ffofof[X\$foTHL9foffsf)\$fofffffffsf8f8!fsf8!fsf8!ffofsf8!ffof[XL$ )L$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L $D<$H fn$XOH$LXH O $D4$fn$H$LXNH XN $D,$fn$H$LXJH XJ $XOD$$Lt$fn$H$XLH O $D$fn$H$XNXN $D4$fn$XJXJA}AOdIDIEXHDyDiIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_`AAEAfoďIIHIN foHHIAo@foffofsfffsffofofffffofffffsfGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHD*D$L$dH%(HD$81L$DfDfDfDWDxfEfo%׌MILLIfAoN9fAofEoLfAofEofDoHHHHIoPfDoffofAsfDoKfsfffDofEoffDfofDfAfEfAoffoffDofsffffDfAfoUfAfDfDoffAofoffsffffDfAfAffDfoAoL$fDoffoL9foffAofsffffofDfDfAfAffAoffDofLd$fDHl$fH\$!fDMfMffsMfoMfD1fsfsfDfD $DD$|$ OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(H$1$ !H|$H $LD$GH$H$FL$ L$BL$ L$AAA@fHHt$(LHfEHD$ LLHD$fHt$D(D(LD(MD(Ifo-GI@fDoIAoQIfDoIAogIfoHfoHfsfHffsffDoffofDfAoZfffAfofffofsffDofffDffAffffAofDofsffof`fDifafAofrfDofrffAo[DXAoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoXfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfDofrffAo[DXoYfhfofDifafAofrfDofrffof[DXfsffofDffffAffffAofDofsffof`fDifafAofrfrffAo[DXfhfofDifafAofrfrf[DXoWfoI9foffsffffffofDfAfffAofofofsff`fifafofrfofrf[fAoXfhfofifafofrfrf[XHD$ Ht$(D\$0H $DT$@HHIDL$PIIIDD$`|$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$'LT$HDLHD$IAIHDCEyHfIfIIADc)ljcDADEeAljAADEA*AeA)EA*AXBABfAX A ED$Ad$fAljAADEA*AAd$A)EA*XFFfXEEAefAljAADEA*AAeA)EA*XBBfX  EFAffAljAADEIA*L<$AAfA)EA*AXGAXAfAGE{fAAAcAAcEA*LD$ljA)L;\$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ VdH%(HD$81BH$DH$GF BDpffIIfID(N<1D(fo%IMLfoHHIIIoPfDoffofAsfDffsfDoffEofDfAfDffEffDoAoJfAofAofoffsfffAffAfffffofofsffof`fifafofofrfrf[fhfoDXfAofofafofifofAofrfrfAo\$[DXfoffsfffAffAfffffofofsffof`fifafofrfrf[fofofhfoDXfAofafifoAoKfrL9frf[fofDXfsffAofffDffAffAffofofsffof`fafifofrfofrffo[Xfhfofafofifofrfrf[XxD $MMLDD$L|$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A{AOd-IIEhHDyDYIfHfHDAADA`EEQA)DA`ADAEYE,DAADAD*DAADAA)DEA*XOOfXDSD[fAADAD*DAADAA)DEA*XNNfXD]DUfAADAD*DAADAA)L9EA*XJJXHD$8dH3%(uHH[]A\A]A^A_@AAEAfo-zIIHIfozN f.HHIAHfoffofsfffsffofofffffffsf8OL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [I@AWAVAUATUSHHD {D$L$dH%(HD$81L$DfDfDfDGDxffowMILLIfoN9fofoLfDofDof.DHHHHIPfEofDfofAsfDKfsfffEofEofDfDfAofDfAfEfEoffoffDofsffDffDfAfUfDfEfDofEfEofoffsffDffDfAfAL$ffEfofAfEofoL9ffsffDofDffAofDfDfAfAffoffofovfAsfsfoLd$Hl$fE8H\$!fsf8Mf8MD $MM1T$d$ @OD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ff.AWAVAUATUSHdH%(H$1$ w wH|$H$HL$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfo-nsHD$ LLHD$Ht$L(HD(ID(MD(fo6sfDIIIAYHHHHE_foffAofsffsffofDfDoffDAbfAffAfAfoffDofsffDofDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofg[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDof`[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[EXf8!fsf8!fDofb[DXfoffsffDffDffEffsfA8fDofD8!fsf8!fsfDE[AXf8!fsf8!fDof[XYI9foffsfffDfAoffDffAfsf8f8!fsf8!fsf[Xf8!fsf8!f[XHD$ Ht$(DT$0H$HL$DL$@IHHDD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AAD$tAX@XL$pA@AD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|AAX@XL$xA@A$LT$HDLHD$fDIAQIA{EyHfHfIIljDAc)AcD{‰cAljAljEA*ljljc)lj@*AXBABfAX A }efAljAljEA*ljlje)lj@*XFFfXA|$Ad$fAljAljEA*L<$ljAd$)lj@*AXGAGfAXAA}AefAljAljEIA*L|$ljAe)lj@*AXGAXAfAGE~fAljljAfljAf@*ljA)L;L$*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_@A։DT$T$DD$fo%YX(TU\\XXWAWW)l$ HL$ HT$()D$LL$L$H D$LD$(@DL$I AYfnL$L$D$LL$@XH(AYXL$HT$H D$DD$(fnL$T$@I AYD$LD$@($$XAXH(AY)$$XL$HL9HWHHӃH$fHt$@H|$H$ $Z D$HffW $fXL$<YXT$@Z;fZ{fHt$@H|$H $Z褅D$HffW $fXL$<YXT$@ZcfZc uMfHt$@H|$HZGL$HffW UfYXD$@Z{fZ{HD$XdH3%(uHh[]UvDUS(Hh(D% HDYL$YXXdH%(HD$X1EXXJfEfEHGHD(ZHHT(D(=YfDo5`fDow(D((=H AT( AXDWfo5SA(AY[fAf[YfoYY%VfAfffAfrW(AfAvXA(frXX(YY(YX$YX*Y(0Y\(CYX=)XBYYXEYX(TU\\XXWAWWl$ L$0T$ (PT$$AYPXL$0H(T$(AYPXL$4H(T$,AYPXL$8H(AYXL$<HH9eHQHHӃu#HD$XdH3%(3Hh[]D$@fHt$H|$L$@ZL$ HD$ffWSL$ fXL$YZCXT$Z3ofHt$H|$L$ ZD$ffWL$ fXL$YXT$ZsfZs fHt$H|$Z胁L$ffW YXD$ZCfZCrD@fo HIIJ HHf8GH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[fffff.t4fo H1Hffof8)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.AWAVAUATUSHdH%(H$1$  H|$H $LD$GL$H$FH$ L$BL$ L$AAA@fHHt$(LHfDo]HD$ LLHD$Ht$L(I(I(M(fo=fo0IIIAOIHHHEYfDof8fE8fE8fA8fEofE8fD8fAsfE8EJfE8fEofD8fA8fE8fE8fDofDofE8fE8fEofDofDofE8fAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXEHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDHfEofD8fE8fE8fE8fE8fEofE8fDofAsfE8fDofE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDIfEofD8fE8fE8fE8fE8fEofE8fAsfE8fE8!fAsfE8!fAsfEE[AXfE8!fAsfE8!fEE[AXDOI9fEofD8fE8fE8fE8fA8fsfE8fA8fD8!fsfD8!fsfEE[AXfD8!fsf8!fA[XHD$ Ht$(t$0H $l$@IHHd$PIII\$`T$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$(LT$HDLHD$IAIIECEyHfHfIIADAc)ljAcDADCcAljAADEA*AcA)EA*AXBABfAX A DEefAljAADEA*AeA)EA*XFFfXED$Ad$fAljAADEA*AAd$A)EA*XBBfX  EEAefAljAADEIA*L<$AAeA)EA*AXGAXAfAGE~fAAAfAAfEA*LD$ljA)L;L$@*AX@A@AXAH$dH3%(uHĘ[]A\A]A^A_h@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-HD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo% DIIHAGHHHHAYfof8f8f8f8fDof8f8fofsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_`ffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XffHLt$8LHfo-ZHD$0LLHD$(Lt$(H)t$(HD(LD(MD(D(D(D(D(fo%DIIHAGHHHHAYfof8f8f8f8fDof8f8fofsfD8WfA8fof8f8f8f8fDof8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[Xf[XD$)D$^Dt$@HD$0Lt$8D\$pDl$PIIH$fHD$II$D$D$$Dd$`DT$@|$PDXl$pXXDL$`$DXDXT$D$X|$T$Xl$t$D$X$XXXDXXDXL$dX$X$X$X$DX$X$DXT$HX|$XHD$ Xl$xDXL$hX$X$DXT$LX|$\Xl$|DXL$lX$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$` H|$ HDLHD$fDIARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A__Xffffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$fPL$H$H$1L$H)$H)$)$)d$p)d$`)d$P)d$@)d$0)d$ )d$fo-fo%fofAo fAo4fof8f8f8f8fof8f8fsf8fof8fof8f8f8f8fof8f8fofof8fof8#fsf8#ff8#fsf8#[X|$f[X\$ )|$fo)\$ fo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$0f[X\$@)|$0fo)\$@fAofof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$Pf[X\$`)|$Pfo)\$`fAo\fof8f8f8f8f8fofof8fof8#fsf8#ff8#fsf8#[X|$pf[fAo4X$HH9)|$pfo)$fof8f8f8f8f8f8fof8#fsf8#ff8#fsf8#[X$f[X$)$)$KHLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$fL$t$ H fDnL$ T$ fDnl$ D$ H fDnT$ |$ DXfDnd$ H$DXDT$ DXH fDnD$ D|$ DXfDn\$ D\$ I fn|$ T$ DXfnT$ l$ DXfnt$ \$ XfnL$ Ht$ XHt$DXL$ I XH XH Ht$DXl$HD$LDXT$H|$H DXd$LT$DXD$HD$DX\$L\$II X|$H$L\$IH$XT$I Hl$Xt$L\$XL$LT$0D$L|$@H fn\$|$H fnl$HT$PDT$Ht$`DXDXfnl$D|$fnd$L\$pI T$DXI DXfnd$t$fn\$D\$H DXDXfn\$H$H$X\$H fn\$l$Xfn\$Dd$I Xfn\$H|$l$LT$DXT$L|$II d$LL|$XDXD$H Ht$\$HT$X|$H\$HAXH XT$H\$Xt$Ld$XL$HD$AXD(DXL$H$DYAXhA(EXDD(HD$DYAX((`A(YH$XX (QYYXX9AAH$4L$L$HDH$H$L$LHD$DIASIAyE{HfHfIIljDAa)ƉAaD{‰kAlj@Alj@EA*ljljk)lj*AXBABfAX A }mfAlj@Alj@EA*L|$ljm)lj*AXGAGfAXAA|$Al$fAlj@Alj@EA*L$ljAl$)lj*AXGAGfAXAA}f@AljAmAlj@EIA*ljljAm)lj*XAX  fAE~AnfljAljAn*ljƉA)L;L$*AX@A@AXA H$dH3%(uH[]A\A]A^A_MDIHF(%$LH(&LDPHfD(@H@H(h](H](P]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃtxATUL$SHHI1f.B X,HHEL9t).w5.v(@[]A\f.DIHF(%LH(LDPHfD@H@Hh]H]P]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃtxATUL$SHHI1f.BV,HHEL9t).~w5.v(@[]A\f.ATUSH^D$ DIHF(-LH(%LDPH(@H@H(pY(HY(PY]Y]]]___f[_f[fkf[f[fkfc)AL9uIIHHHHHƃthHHL$I2f.=d_(U,HHEL9t ^D$ .'vH[]A\ffffff.ATUSH^D$ DIHF(%VLH(XLDPH@H@HpYHYhY]Y]]]___f[_f[fkf[f[fkfcAL9uIIHHHHHƃthHHL$I2f.=_(fDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1fH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ fo-fo%fofo5@fAo fAo<fof8f8f8f8fDof8f8fsfD8fofA8fof8ftffof8fDof8fDofDof8f8fDofDofD8fAofDofD8fAofE8#fsf8#fsf8#fDofDofDfA8#E[DXD$ fDof[X\$0D)D$ )\$0fofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$@f[X\$PD)D$@)\$Pfofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DXD$`f[X\$pD)D$`)\$pfAofoftffof8f8f8f8fD8fAofD8fAofE8#fsf8#fsf8#fDfA8#E[DX$f[fAo<X$HH9D)$)$foftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[X$f[X$)$)$H\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$fL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH fDnL$PT$PH fDnl$PH$L$DL$ DXDXfDn\$0DL$PDL$@DXfDnT$Pt$PH fDnd$P|$PH fDnD$PDL$PDXfn|$PDT$PDXfnT$PD\$PDXfnt$P\$PXfnL$PHD$PXHD$ DXL$PHT$PXDXl$PH XHD$ DXT$ Ht$ DXd$ H|$ HD$0Ht$@DXD$ H$H H HD$ DX\$ Ht$ LH X|$ LT$`Ht$ LL\$pH XT$ Ht$ HH$H Xt$ Ht$ XL$ T$ H fn\$ l$ H fnl$ Dd$ I DXDXfnl$ Dl$ fnd$ Dt$ I DXI DXfnd$ DT$ fn\$ D\$ I DXI DXfn\$ \$ H Xfn\$ H$L$XӉD$ fn\$ DL$ I Xfn\$ Hl$ l$ Ld$ DXT$ Ll$ d$ Lt$ XDXD$ LT$ \$ L\$ AXX|$ H\$ HH XT$ H$H\$ AXXt$ LL$ XL$ HT$ hDXL$ D(AXA(DYEXDD(H$DY`A(AX((H$YX (XH$YYPXX8H$H$pfHDMD(LD(H$((L$(L$(HL$03DfDffDffADDf|$ fADDIABIEhARA`ffADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$p)E*ωA*)މAXAXGAfAGf*ΉH$*H$XXGfGDDfD)|$ *D*ʉΉAt$`AXAXFAfAFf*ɉ|$PH$)‰*AXKKfX\$@f@‰A*A@A)EA*XAX L;$A  HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTf@*Y\,7fA*Y\,D$ UfA*Y\,f*AYA\,fH$dH3%(uH[]A\A]A^A_62fDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hfHLt$HLHfo- HD$@LLHD$8Lt$8H)|$ D(H)|$D(LD(MD(D(D(D(fo%fo5IIHAGHHHHAYfof8f8f8f8fDof8f8foifsfD8WfA8fof8ftffof8fDof8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDVE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDPE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#fsf8#[DXfDRE[EXfDofoftffof8f8f8f8fD8fof8fofA8#fAsfE8#fAfD8#[fsDXf8#YM9fDE[AXfofDoftffof8f8f8f8f8fD8fAofA8#fsf8#ff8#fsf8#[XT$f[XD$ )T$)D$ Dt$PHD$@Lt$HD$Dl$`IIH$fHD$II$D$D$$Dd$pDT$P|$`DX$XXDL$p$DXDXT$T$X|$d$X$$D$X$XXXDXXDXL$tX$X$X$X$DX$X$DXT$XX|$hHD$0X$DXL$xX$X$DXT$\X|$lX$DXL$|X$X$X$A~D((DYX$YX$DX$X$EXDXX$X$EDX$h(DH$YX(YXYX0HD$AXP AAH$pH|$0HDLHD$@IARIAqEzIfHfHIƉDAa)AaDAs‰AkAlj@AljEA*ljƉAk)Ɖ*AXFAFfAXAskfAlj@AljEA*ljƉk)Ɖ*XGGfXumfAlj@AljEA*L<$Ɖm)Ɖ*AXGAGfAXAAt$f@AljAl$AljEIA*L|$ƉAl$)Ɖ*AXGAXAfAGE}AmfƉAƉAm*ƉA)L;L$*AX@A@AXAH$dH3%(uH[]A\A]A^A_)DIfHFfo-LHfo%LD0HHH Hfofhf`fffof8Hfofhf`fff8fofof8f8fAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t((d$0$$|$ fք$Dl$@Dd$`DX$A]DX$AU$L$Dd$@D$D$fք$L$0D$ $$efք$D\$hDT$tDX$A\$DX$DT$@D\$|DT$xA$$L$fք$L$0D$ $$fք$D$D$DX$]DX$U$L$DD$@DL$tDD$h|fք$L$0$$D$ Pfք$$$X$[X$L$|$`t$@$fք$L$0D$ $$fք$H$H$$$X$D$X$D$D\$|DT$xDL$tDD$h|$`t$@HD$PD/DgDDVDD@HD$X8pH$dH3%(A/Agu3H[]A\A]A^A_f)|$@)|$0)|$ )|$)<$ffffff.D@foװHIfo ذIJ HHffGH9uLƃF>؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ff.tGfoܯH1fo ޯHf.foff)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G f(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZX \$ X\$,HLDCKL9uH []A\(ATUSXH t$fT$L$HHZI|$(L$\$ H\D$ZVX \$ X\$,HLDCKL9uH []A\ATUS((H@XH-XY(dH%(HD$81XXX5 Y|$(DQHGD(LHLL(f(H X\(^f: Y\f:AXf[)$$H4$HL$LcH B$BD@`$DHcH `@$D@`$D@`L9YIJHHσu!HD$8dH3%(H@[]A\@\$ HZL$L$I\$ f(L$T$H\D$$ZIXԜ $T$X,H DEML9uO ATUS((HPXH-XY(dH%(HD$H1XXX5 Y|$(DAHGD(LHHt(f(H X\(^f: Y\f:AXf[D$ HcL$ $DHcL$$`@$DHcL$(`@$DHcL$,`@$D@`H9]IHHHσuHD$HdH3%(HP[]A\\$0HZL$L$I\$0f.(L$T$H\D$\$ Z8XÚ \$ T$X,H DEML9uI H(dH%(HD$1tef҃HH)$f(H@HfXNH9) $u$X&C XD$tXHD$dH3%(uH(fH)$ ffffff.H(dH%(HD$1t\fHHH@fHH9fXu$fX$XD$tXHD$dH3%(uH(Hf|fff.H(dH%(HD$1DffAnf8fot3HHHHH@ofoHfdH9f8fouffAn$f8f8<$fofsf8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DH(dH%(HD$1DffAnf8fot3HHHHH@fofoHfdH9f8fouffAn)$f8f8 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]EA5@DAWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$A (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHLT$L$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDL$DDD$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$ AWAVIAUATIUSIMH$H$dH%(H$1H$AA!fAII)|$ )|$)<$(A( (Y˱YA( YY(LX$)$YY( HL9XT$)T$YYXT$ )T$ ]IHIHHL$LT$LD$H|$Ht$ HD$(D$I fDn $D$I fn$L$D$D$I fn<$<$H fn $LT$DXL$DXD$4$H|$XXt$f4$H fn,$$H DXfn $H4$DXHD$X$$XD$XD$$$Xd$X$X$D!DiA(A(d$\AYAl$Xt$T|$PDD$DDL$@Dl$AvA/Agu)Hĸ[]A\A]A^A_f)|$ )|$)<$AWAVAUATUSHdH%(HD$x11fD$^cD@ffo5ˑHIIfoN oHHo@L9fofoffsfffsffofDofffDffAfffufLffsfl$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu HĈ[]A\A]A^A_E1E1AWAVAUATUSHdH%(HD$x11fD$^kD@ffo5HIIfoN HH@L9fofoffsfffsffofDofffDffAfffufofsLf8d$`foD$`f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$f: fA:AfA:EDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAHD$xdH3%(D'DOu'HĈ[]A\A]A^A_f.E1E10AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5iIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufHfHfsff:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)l$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu&HĈ[]A\A]A^A_fE1E1AWAVAUATUSHdH%(HD$x11fD$^[fD@1fo5ɆIfoIDfofoHfoL9ffofsfffsffofDofffDffAfffufoPfsHHf8f:fA:fA:D$@f:f:f:D$0f: fA:DfA:DD$ f: DfA:DDT$ \$@D$f: DD\$@l$0fA: $AD$fA: fA:Af:E)d$`EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAHD$xdH3%(D'DGu%HĈ[]A\A]A^A_E1E1H(dH%(HD$1DffAnDf8DHI1foIIIIM9Afofdfofvf8r$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)fnIM9f8_A8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12ffffff.ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHAofofdfftC$EHA)f.tD E8~DEHAfufAnf8II9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?wtFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.USH(dH%(HD$1ffnˉf8DXfoI1IIIfAo fo)$$fd$fofvf8L$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)fnf8IM9<8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11 ATUSH dH%(HD$1DD&ffAnEf8;hfoI1HHHfAofofdfftC)$EHA)f.tD E8~DEHAfufAnf8II9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.Dt1HTfHFH9u1ffff.t1HTfHFH9u1ffff.Wt&WHHfDHXFH9uffff.Wt&WHHfDHXFH9uffff.USLO HF L9AH9A HB L9AH9D AAo--vE1E1o%,vAo=.vAo52vAġzoġzoLbaq!zoqaġzoT1bi)ib)AqũA9hA1`9`A1hy`)b91ih9`hAiqaaab9yb!yiA AŹ`Źhġx ġxDI A9DHHHHD9t\f.HjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@USLO HF L9AH9A HB L9AH9D AAo-sE1E1o%sAo=sAo5sAġzoġzoLbaq!zoqaġzoT1bi)ib)AqũA9hA1`9`A1hy`)b91ih9`hAiqaaab9yb!yiA AŹ`Źhġx ġxDI A9DHHHHD9t\f.HjHDFZADNHAA‰AA)‰ADWAADD9وGw[]H\ HDHDZHNDRHDFDADAA)DADOADDH9ڈGu[]@!sAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@qAWAVAUATUSLt$8fffD$HL|$@E1DDAHDiAhIIDADA)DʼnDEiAYDTA‰DAʼn@oAÉD@oA)CfGlfA‰DAʼn@nAÉD@nA)CgGlgIA‰DAʼn@jAAD@jAA)DD9d$H[]A\A]A^A_@AWAVAUATUSHxD$ ppEGF B Azz@EIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(zOIzGD$hd$hl$l((l$zNzF$$D$`HD$ \$ D$dXL$`XC$ CHLD$XHt$\$D$\MXEXL$X$EMND$PD$TzXD$z $XL$PH|$\$$zD$z $OD$HHT$\$D$LzMzXEXL$H$zEzMJvLD$0D$@HD$(HD$ HD$D$DzzX@HXL$@HD$z@zHD$L;|$8-Hx[]A\A]A^A_fffff.AWAVAUATUSHxD$ mmEGF B Azz@EIH$AIJH$L$HHHL$ H$MHL$H$HL$H$HL$I HL$8f.XLD$0IHD$(zOIzGD$hd$hl$l((l$zNzF$$D$`HD$ \$ D$dXL$`XC$ CHD$XHt$\$D$\MXEXL$X$EMNHD$PD$TzXD$z $XL$PH|$\$$zD$z $OD$HHT$\$D$LzMzXEXL$H$zEzMJLD$0D$@HD$(HD$ HD$D$DzzX@HXL$@HD$z@zHD$L;|$8-Hx[]A\A]A^A_fffff.HG H9HF H9D;Jo=iE1E1Ƀo5io-io%iAġzo ġzoDqbyqyi`hġx ġxDI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9{NDFDGOH9^N DFDGO H9AN DF DG O H9$N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vzNDFDGOH 9vaNDF9DGOvPFV؈WGHLHDHFVHH9ψWGufDfffff.HG H9HF H9D;Jo=fE1E1Ƀo5fo-fo%fAġzo ġzoDqbyqyi`hġx ġxDI A9rHHH9NDDOH9NDFDGOH9NDFDGOH9{NDFDGOH9^N DFDGO H9AN DF DG O H9$N DF DG O H9NDFDGOH9NDFDGOH 9NDFDGOH 9NDFDGOH 9NDFDGOH 9vzNDFDGOH 9vaNDF9DGOvPFV؈WGHLHDHFVHH9ψWGufDfffff.AWAVAUATUSHHH0$ eeHt$ HT$HL$CLD$ HG B Azz@H|$pIWHDaHH|$xHx(HD$(x(H<$H$Ix(x((H|$H$(((H|$H$H|$LLL$h+fADDffDf|$fDf|$fADDf|$ȀNAfADDEiWWɉ'Dg)D'fAʼnЉgAADfEAEЉD*zXGDE)Er*rXzGWЉAz*WHD$)X@*Xt$A@WAWHT$*Ht$XB)\$*X BWA AWEЉʘ*\$XFAD)ؘ*XAFW˘IWHIE*HD$ D)XH*XHH$HD$HD$HD$L;t$(%H$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$wWA*Y\z,Zf.WA*Y\,D$WA*Y\,D$OW*zYz\,D$fDW@*zYz\,fH0[]A\A]A^A_ÐAWAVAUATUSHHH0$ IaEaHt$ HT$HL$CLD$ HG B Azz@H|$pIWHDK]HH|$xHx(HD$(x(H<$H$Ix(x((H|$H$(((H|$H$H|$LLL$h+fADDffDf|$fDf|$fADDf|$ȀNAfADDEiWWɉ'Dg)D'fAʼnЉgAADfEAEЉD*zXGDE)Er*rXzGWЉAz*WHD$)X@*Xt$A@WAWHT$*Ht$XB)\$*X BWA AWEЉʘ*\$XFAD)ؘ*XAFW˘IWHIE*HD$ D)XH*XHH$HD$HD$HD$L;t$(%H$fEfEff0fhHD$fAff\$fXHD$ffDXHD$fL$ffDPfL$wWA*Y\z,Zf.WA*Y\,D$WA*Y\,D$OW*zYz\,D$fDW@*zYz\,fH0[]A\A]A^A_ÐAWAVAUATUSHH$ \\GF BtL$IHL$HHML $HHD$Dz_HT$HzIKICIqD$8H$d$8l$<((l$ Hd$9D$0l$ M(D$4XL$0XEd$(MEzNzFD$(l$ D$,(z $zXD$XL$(d$(zD$z $zEzM蝿HT$D$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_DAWAVAUATUSHH$ [[GF BtL$IHL$HHML $HHD$Dz_HT$HzIKICI衾D$8H$d$8l$<((l$ Hd$iD$0l$ M(D$4XL$0XEd$(MEzNzFD$(l$ D$,(z $zXD$XL$(d$(zD$z $zEzMͽHT$D$ D$$XB XL$ H$H;\$B HH[]A\A]A^A_DAWAVIAUATIUSD$H PYLYGF BQE1fDDYW1EPHA8WIIDۉAA)H\$8AAfEQF\B#BAũBQ1ot$xQ-#)\$h I= #b 5#)qq "Q)$I)L$x`Ah|$AŁ\$a`ht$Iit$B T$iIAo|$ot$Bx)$ayot$qqqa9`A9hx)$t$IqŹT$iyoqA9B9`hqyoD$iaAii)$yyot$YY`h)$qYyiyqy1`A1hia1iA1IB1)`yiA)hyoyai)$yũqA)yB)`hyqqqQQYix)$q!`A!h)$AqyqšB A!yyoD$HqB!9`A9hʼnia9y9iB9AqiYo$Ai`hx)$(QiyyoYiYo$`hqqyyyaQqoT$X`ho\$hd$YyIqIyI`ho$qiaYaao|$qh`aqAAoL$x`hAIB1qAyo|$qqűyoL$IIx)L$ũx)|$oL$(yoL$8yaa)L$x)L$o$o$Aa`ahAI`Iho$I`ho$AIh)l$XI`x)\$h)D$Ho$I`ho$I`ho$I`ho$(`h`)D$xAhoD$Hy`h `A hx)\$Ha`h)`x)$A)h)$yot$XyoT$x `ʼnhAQ`Qhyyot$h `ʼnhI`h1`A1hA`Ahy`h`hoT$H)D$X`ho$)D$Hi`Aih)D$ho$`)T$xhoD$Xʼn` h`hod$H `h@Ź`Źhh`px0PHol$hű`1hol$x@`AhxH@š`!hxP@`xX@D9AىINIA9ۍ,fIILLAL\ItBHDNDNHAA‰A)DDWAAAL9DOuH@[]A\A]ÉIIEAYDAAʼnA)ʼnAE*DAZAYEYAADA)ʼnEjDADAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDDAZEYAY AAʼnA)ʼnAEjDDAZ EY AY AAʼnA)ʼnAEj IIDDAZEYAYAAʼnA)ʼnAEjDDAZEYAYAAʼnA)ʼnAEjDÃAZNfIIEAZDAAʼnA)ʼnAE)DAYAZEZAADA)ʼnEiDADAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZ AAʼnA)ʼnAEiDDAY EZ AZ AAʼnA)ʼnAEi IIDDAYEZAZAAʼnA)ʼnAEiDDAYEZAZAAʼnA)ʼnAEiDÃAYNfAWAVIAUATUSD$h Ht$HT$HL$GF B Azz@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$WH\$WɉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvz*AzXGfDzGWE)EEr*ErXDDDEDEzz*WLT$E)AEzXBr*rX ADDzBWz EEWEz*LD$)zX@*rXDDd$DT$Dz@WzADWDED)*H|$*DXGXDEGWDWDIA*rXMHHHD$HD$)HD$HD$*zMzXEL;L$zE[]A\A]A^A_ÐAWAVIAUATUSD$h Ht$HT$HL$GF B Azz@}H\$HMHHl$8Ht$@H\$H\$PLHD$H\$H\$XH\$H\$`H\$AEAM}Lt$WH\$WɉEL\$DDcD)EDDHL$fDT$EVAY9fDvA E[fDT$AfDEAEfDvz*AzXGfDzGWE)EEr*ErXDDDEDEzz*WLT$E)AEzXBr*rX ADDzBWz EEWEz*LD$)zX@*rXDDd$DT$Dz@WzADWDED)*H|$*DXGXDEGWDWDIA*rXMHHHD$HD$)HD$HD$*zMzXEL;L$zE[]A\A]A^A_Ð"LOHFL9AH9A HBL9AH9D AIAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRG{BLG LN fA LR GkB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LG LN f A LR G +B LGLNf ALRG ;BLGLNfLRGADqDE)AEE)AAAvyo%HHHE11o ġzoġyo``hhqyġxI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^@III1E1DBB$BID9wûfDfDfDfDfDfDvfDffDVfD FfD 6fD &fD fD fD"LOHFL9AH9A HBL9AH9D AIAVAUIATUASA9DGELGLN&ALRBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRGBLGLNfALRG{BLG LN fA LR GkB LG LN f A LR G [B LG LN f A LR G KB LG LN f A LR G ;B LG LN f A LR G +B LGLNf ALRG ;BLGLNfLRGADqDE)AEE)AAAvyo% HHHE11o ġzoġyo``hhqyġxI9rDDIIIE9BAA!AC9-ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C9ABAaA@C 9vqAB Aa A@ C 9v]AB Aa A@ C 9vIAB Aa A@ C 9v5AB Aa A@ C 9v!AB Aa A@ C9v ABAaA@[]A\A]A^@III1E1DBB$BID9wûfDfDfDfDfDfDvfDffDVfD FfD 6fD &fD fD fDAWAVAUATUSHD$h SOHt$HT$G C B Azz@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyWWɉljDAf)ƉAfDA}‰AmAlj@Alj@Ez*zXBljAmzBW)lj*rX z A<$W@AljAl$Alj@Ez*L|$ljAl$zXG)ljzG*rXWz}W@AljmAlj@Ez*L|$ljmzXG)ljzG*rXWz;W@AljkAlj@Ez*XAljk)lj*X  WAE{A+WljAljA+II*zX@IIHHIƉAz@)L;L$*rXz[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B Azz@$Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DAA>EyWWɉljDAf)ƉAfDA}‰AmAlj@Alj@Ez*zXBljAmzBW)lj*rX z A<$W@AljAl$Alj@Ez*L|$ljAl$zXG)ljzG*rXWz}W@AljmAlj@Ez*L|$ljmzXG)ljzG*rXWz;W@AljkAlj@Ez*XAljk)lj*X  WAE{A+WljAljA+II*zX@IIHHIƉAz@)L;L$*rXz[]A\A]A^A_ffffff.AWAVAUATUSHD$h Ht$HT$G C B Azz@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyWWɉljDAf)‰AfDA}ƉAeAljAljEz*zXBljAezBW)@*rX z A<$WɉAljAd$AljEz*L|$ljAd$zXG)@zG*rXWz}WɉAljeAljEz*L|$ljezXG)@zG*rXWz;WɉAljcAljEz*XAljc)lj@*X  WAE{A#WDljA#@II*zX@IIHHIDz@)L;L$*rXz []A\A]A^A_AWAVAUATUSHD$h soHt$HT$G C B Azz@+Lt$8IHDLl$@Ld$HHl$PH\$XL\$`LHD$DA1A>EyWWɉljDAf)‰AfDA}ƉAeAljAljEz*zXBljAezBW)@*rX z A<$WɉAljAd$AljEz*L|$ljAd$zXG)@zG*rXWz}WɉAljeAljEz*L|$ljezXG)@zG*rXWz;WɉAljcAljEz*XAljc)lj@*X  WAE{A#WDljA#@II*zX@IIHHIDz@)L;L$*rXz []A\A]A^A_AWAVIAUATIUSD$H GF BQE1fDDYW1EPHA8WIIDۉAA)H\$8AAfEQF\BHNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_GAADL$T$AD$Eo%:nQ-stgAE1IIġyossġx)IM9uLLǃDDFDAADA)DDADADЃGgDVDFDAADA)DD_ADADЃG'DVDFDAADA)DD_ADADЃGDVDFDAADA)DD_ADADЃGDVDF DAADA)DD_ADADЃG tkDV DF DAADA)DD_ ADADЃG u/DF v DA)DˆO ‰AЈG AAEtpAoI1IfDoo$sss)HL9uHHHǃ&BfGBfGBfGBfGBfGBfGtsBfGtdBf GtUB f G tFB f G t7B f G t(B f G tB f G u BfGAWAVAUATUSHdH%(HD$x1$ lhH|$`Ht$PHT$XGH$H$FL$ L$BL$ L$Azz@jWP1Ho%H)t$ )t$)4$)t$@)t$0yo<ossAo\ŹsqŹs`hairr[airrX\$0[Xyo)|$0sqŹs`hairr[airrX\$@[Xyo)|$@sqŹs`hairr[airrX$[Xyo\)<$sqŹs`hairr[airrX\$[XyoHH9s)|$qŹs`hairr[airrXL$ [X)L$ IHHIIIIHD$8Ht$0H|$LT$L<$HT$@HD$hHD$HH<$H|$LT$LT$ HD$0HD$(HD$ HH HD$@HD$`t$@t$@HnD$@H XHHt$@XHt$Pt$@T$@LH HnD$@XNXNHT$@HT$Xt$@D|$@InD$@XJI L|$@MXt$@|$@I H|$hJnD$@L|$@IXII Xt$@DT$@InD$@JXHzXL|$@t$@|$@zHznD$@XHXHHD$0H<$nD$0LT$H XH HD$@H|$0t$@I HD$ XNt$0H n$L$NXJX4$H$JnD$XIX4$InD$ JXHzXzHz$LT$`HDLH$IAQH{EyHWIWIIljDc)ƉcD}‰eAljAljEz*zXBljezBW)lj@*rX z A|$Ad$WAljAljEz*L|$PljAd$zXG)lj@zG*rXWzA{AcWAljAljEz*L|$XljAczXG)lj@zG*rXWzA}AeWAljAljEIz*XAljAe)lj@*X  WAE~WAljljAfljAf@*zX@ƉAz@)L;$@*rXzHD$xdH3%(uHĈ[]A\A]A^A_;fffff.AWAVAUATUSHHD$ dH%(HD$81H$DH$GF B^WDP1IoI)d$ )d$)$$fDo yo<sqsŹqAyoAs9QAIAs`haiŹrrŹaa[iryrX $[yoX)<$As9QAIAs`haiŹrrŹaa[iryrXL$[X)|$o|HL9ŹsAiIQs`hairra[irrXL$ [X)t$ L<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L$$D<$H n$XOH$LX$$D4$H On$H$LXNH X$$D,$Nn$XJXH$L$$H JXOD$$Lt$n$H$$$D$XLH On$H$XNX$$D4$Nn$XJXJA}AOdIDIEhHDyDYIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_6AAE~Ao-tI1o5fIfo$o sssyL`)HL9uHHHǃSDDZDFDAA‰AA)‰ADADADȃGDZDNZDFDAA‰AA)‰ADWADADȃGVDZDNZDFDAA‰AA)‰ADWADADȃG DZDNZDFDAA‰AA)‰ADWADADȃGDZDNZ DF DAA‰AA)‰ADWADADȃG tDZ DN Z DF DAA‰AA)‰ADW ADADȃG u:DF N r DJ AD)DAW ADG [AWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDDxo-MILLIyoN9yoyoLoyo@oHHHHIo`ssyo[řsyo]Y)sqy1šyo\$L9yosya9oo usissLd$Hl$CALCiLCyLH\$!x)$MMMx)L$M1x)D$ DOD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_#0AWAVAUATUSHdH%(HD$x1$ H|$`H4$HT$GL$H$FH$ L$BL$ L$Azz@WP1Ho%H)l$P)l$@)l$0)l$ )l$o-yo4yossossaLPy!sy!sy!sy![X|$o\s)|$saLPy!sy!sy!sy![X|$ yos)|$ saLPy!sy!sy!sy![X|$0yo\s)|$0saLPy!sy!sy!sy![X|$@yoHH9s)|$@sqLPy!sy!sy!sy![X|$P)|$PlIIHHIIIHD$Ht$H|$8LT$HHT$ L|$0HD$hHD$(H|$ H|$@LT$0LT$PHD$HD$XHD$@HH HD$PHD$`l$Pt$PHnD$PH XHHt$PXH4$l$PT$PLH HnD$PXNXNHT$PHT$l$PD|$PInD$PXJI L|$PMXl$P|$PI H|$hJnD$PL|$PIXII Xl$PDT$PInD$PRXHzXL|$Pl$P|$PzHznD$PXHXHHD$H|$ nD$LT$0H XH HD$PH|$l$PI HD$@XNl$LT$H nD$ NXJXl$HD$JnD$0XIXl$InD$@RXHzXzHz$LT$`HDLHD$fDIAQIA{EyHWHWIIljDAc)ƉAcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*L<$ljezXG)lj@zG*rXWzA|$Ad$WAljAljEz*L|$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*XAljAe)lj@*X  WAE~WAljljAfljAf@*zX@ƉAz@)L;L$@*rXzHD$xdH3%(uHĈ[]A\A]A^A_(fffff.AWAVAUATUSHHD$ ~dH%(HD$81jH$DH$GF BWDP1IoI)d$ )d$)$$o%fDoyo<sisŹyo4issiL@y!sy!sy!sy![X<$o4s)<$siL@y!sy!sy!sy![X|$oTHL9s)|$syL@y!sy!sy!sy![Xl$ )l$ YL<$HIIHHHD$(Lt$Ll$ Ld$LT$HD$LH H$L$$D<$H n$XOH$LX$$D4$H On$H$LXNH X$$D,$Nn$XJXH$L$$H JXOD$$Lt$n$H$$$D$XLH On$H$XNX$$D4$Nn$XJXJA{AOdIIEXHDyDiIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_"AAElAo%4IIHIN foHHIzohsssGL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [Ifff.AWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDDxo-XMILLIoN9yoyoLyoyo@oHHHHIo`ssyo[řsyo]Y)1sqy9šzo\$L9yosyao1Ld$)Hl$9H\$!šM)sMMA1sM91sx $xD$t$ f.OD<A D?D|OLD:JD| JN HD>HNuLAAO|MIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DM9HD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHdH%(H$1$ )%H|$H $LD$GH$H$FL$ L$BL$ L$Azz@WHHt$(LHA!HD$ LLHD$Ht$(x(Lx(Mx(Io%7I@IIIzoQIHHHAzogsasAYAiyzoRősqyAYsš`šhQairrAaAx[A(Xairr[(XzoPsqyAYsš`šhQairrAaAx[A0Xairr[0XoPsqyAYsš`šhQairrAaAx[A8Xairr[8XoQsqyAYsš`šhQairrAaAx[@Xairr[XoWI9sqyAAYsřš`šhairr[Xairr[XHD$ Ht$(xT$0H $xL$@HHIxD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$0LT$HDLHD$fIAIHDCEyHWIWIIADc)ljcDADEeAljAADEz*zXBAezBWA)Er*rX z ED$Ad$WAljAADEz*XFAAd$FWA)Er*XEEAeWAljAADEz*XBAAeBWA)Er*X  EFAfWAljAADEIz*L<$AAfzXGA)Er*rXzWzGE{WAAAcAAcEz*LD$zX@ljA)L;\$@z@*rXzH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ NdH%(HD$81:H$DH$GF BDpWIII(N<1(oIMLfo HHIIIzoPsi9sAiiA!yqAzoZA)yq)sAiAi9A11A9A)is`haaiũrqraaiũx[@XryrAzo\$[)sAiAiX9A11A9A)is`haaiũrqraaiũx[HXAzoSL9ryr!sAi[AiX91A9A1A9is`haaiaa9rirAqAx[PXryr[X<$MMLt$Ll$ D$X $XGGFXD$XL$FD$$ XBXL$ B D$ XGXL$GFXD$XL$FD$, XBXL$(B A|AOd-I@IEhHDYDyIWHWHDAADA`EEQA)DA`ADAE,EYDAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_AAEvAo-IIHIo5N f.{ HHIHsssyL`GL9uLL҃SDDZ~DAA‰A)‰AEADDAADZDFZ~DAA‰A)‰AEQADDAAKDZDFZ~DAA‰A)‰AEQADDAADZDFZ~DAA‰A)‰AEQADDAADZDFZ ~ DAA‰A)‰AEQADDAA tzDZ DF Z ~ DAA‰A)‰AEQ ADDAA u7~ N r DB ljD)DAQ ljAA [IfAWAVAUATUSHHDD$L$dH%(HD$81L$DfDfDfDDxo-(MILLIyoN9yoyoLoyo@HHHHI`ssy[řsy]Y)sqy1š{\$L9yosya9oo sissLd$Hl$CALCiLCyLH\$!x$MMMxL$M1xD$ DOD<A D?D|OJD:LD| J HND>HNuLAAO|IIE`HYEPIiIIDADA)DEaʼnDAYDTDAĉDʼn@oAÉD@oA)DEeA]AĉDʼn@nAÉD@nA)DEfA^AĉDD@jAD@jAA)DL9HD$8dH3%(uHH[]A\A]A^A_ AWAVAUATUSHdH%(H$1$ H|$H$HL$GL$H$FH$ L$BL$ L$Azz@WHHt$(LHo%NHD$ LLHD$Ht$L(H(Ix(Mx(yoDIII{QHHHHA{_sasAYAi{ZyřšsAYqyAqřšsaLҠby!sy!s!y!sy!Ax[A0X_[šsAY0XqyAqřšsaLҠby!sy!s!y!sy!Ax[A8XX[šsAY8XqyAqřšsaLҠby!sy!s!y!sy!Ax[@XZ[šsAYXqyAqřšsaLҠby!sy!s!Ax[HXy!sy![XQI9sqyAsqLày!sy!s[Xy!sy![XSHD$ Ht$(xL$0H$HL$xD$@IHH|$PIIIt$`l$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AzD$tzX@XL$pz@zD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|zzX@XL$xz@z$LT$HDLHD$fIAQIA{EyHWHWIIljDAc)AcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*XFljeFW)lj@*XA|$Ad$WAljAljEz*L<$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*L|$ljAezXG)lj@*rXzWzGE~WAljljAfljAf@*zX@Az@)L;L$*rXzH$dH3%(uHĘ[]A\A]A^A_fff.A։DT$T$DD$o%lynQ-ΡsIHHL f{HIssGL9uHƃD~DAAÉA)DEAADAA\DF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~DAAÉA)DEYAADAADF~ DAAÉA)DEYAADAA thDF ~ DAAÉA)DEY AADAA u.~ v A‰)AI ‰AAA IUDAAEAoIIHIN fHHI{`sssGL9uLL҃&ABfAABfAABfAABfAABfAABfAAt{BfAAtkBf AAt[B f AA tKB f AA t;B f AA t+B f AA tB f AA u BfAAI@AWAVAUATUSHdH%(H$1$ yuH|$H$HL$GL$H$FH$ L$BL$ L$Azz@jWHHt$(LHo%HD$ LLHD$Ht$L(Hx(Ix(Mx(o-DIII{QHHHHA{_sasAYAi{ZyřšsAYqyAqřšsaLPby!sy!sšby!sy!š_[(XšsAYqyAqřšsaLPby!sy!sšby!sy!šX[0XšsAYqyAqřšsaLPby!sy!sšby!sy!šZ[8XšsAYqyAqřšsaLPby!sy!sšby!sy!š[XQI9sqyAsqLPy!sy!sy!sy![XoHD$ Ht$(xT$0H$HL$xL$@IHHxD$PIII|$`t$pHD$D$4X@XL$0@FXD$DXL$@FD$T XBXL$PB D$d XL$`XA AzD$tzX@XL$pz@zD$<X@XL$8@FXD$LXL$HFD$\ XBXL$XB D$l XAXL$hA D$|zzX@XL$xz@z$LT$HDLHD$fDIAQIA{EyHWHWIIljDAc)AcD{‰cAljAljEz*zXBljczBW)lj@*rX z }eWAljAljEz*XFljeFW)lj@*XA|$Ad$WAljAljEz*L<$ljAd$zXG)lj@zG*rXWzA}AeWAljAljEIz*L|$ljAezXG)lj@*rXzWzGE~WAljljAfljAf@*zX@Az@)L;L$*rXzH$dH3%(uHĘ[]A\A]A^A_@AWAVAUATUSHHD$ dH%(HD$81 H$DH$GF BDpWIIMIoI(N<1(o|LfHHIyII{PisAi1siA!űA{JAqAAsAiyA99qAsAL0y!sby!sAby!sy!űA{L$[XAsAiyA99qAsAL0y!sby!sAby!sy!ű{{[XL9sy991qsyL0y!sy!sy!sy![XI4$MMLl$Ld$ D$X $XGGD$XFXL$FB XD$$XL$ B D$ XGXL$GD$XL$XFFB XD$,XL$(B A{AOd-IIEhHDyDYIWHWHDAADA`EEQA)DA`ADAEYE,DAADAD*DXOAADAOWA)DEz*XDSD[WAADAD*DXNAADANWA)DEz*XD]DUWAADAD*DXJAADAJA)L9Ez*XHD$8dH3%(uHH[]A\A]A^A_AWAVAUATUSHxD$ >:H$dH%(H\$h1AL$EGF BWALYLIMHL((x(L|0x(Lx(f.{KI H H I I {cšs{[is{kCaUsaUUYsYUšaš]ř{]YsaUsaUyqy#sy#A{]y#sy#[(XYs{][0XaUsaUyqy#sy#y#sy#[8X{d$[Xs{T$M9iUsiUqšy#sy#y#sy#[X[X3WIxL$It$@LMMx$LM|$0l$PxD$ Xt$X$Xl$0Xd$PXT$ XL$@Xt$X\$Xl$4Xd$TXT$$XL$DXt$X\$Xl$8Xd$XXT$(XL$HXt$X\$ Xl$SA X)4$-HGzA8WHAHx(9SL\(x(=8WXHAWWF8WYWX@Zc,X؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[ffff.t5o ,?H1Hfoy)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G ff.AWAVAUATUSHdH%(H$1$ Y?U?H|$H $LD$GL$H$FH$ L$BL$ L$Azz@TWHHt$(LHyo=HD$ LLHD$Ht$L(I(I(Mx(yo5>yo ];DIII{YIHHHA{gyBqiisaLɐ{ZyaaiayysaLҐby!sy!sAx[A8Xy!sy!{X[8XaaiayysaLҐby!sy!sAx[@Xy!sy!X[XaaiayysaLҐby!sy!sAx[HXy!sy!Y[XaaiayysaLҐby!sy!sAx[PXy!sy![XWI9iiaiyysqLÐy!sy!s[Xy!sy![XHD$ Ht$(xD$0H $|$@IHHt$PIIIl$`d$pHD$D$4X@XL$0@FXD$DXL$@FB XD$TXL$PB D$d XL$`XA AD$tH|$XGXL$pGD$<X@XL$8@FXD$LXL$HFB XD$\XL$XB D$l XAXL$hA D$|XGXL$xG$+LT$HDLHD$@IAIIECEyHWHWIIADAc)ljAcDADCcAljAADEz*zXBAczBWA)Er*rX z DEeWAljAADEz*XFAeFWA)Er*XED$Ad$WAljAADEz*XBAAd$BWA)Er*X  EEAeWAljAADEIz*L<$AAezXGA)Er*rXzWzGE~WAAAfAAfEz*LD$zX@ljA)L;L$@z@*rXzH$dH3%(uHĘ[]A\A]A^A_脖@AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XWHLt$8LHo%Z6HD$0LLHD$(Lt$(H)l$(H(Lx(Mx(x(x(x(x(o6IIHA{yHHHHA{wy  qyiio3syL Wybiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXbiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xbiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xbiib iByBy# sBy#yAby#sy#Ax[@X Ax[HX{qM9 b i yyy#sby#y#sy#[Xʼn[XL$)L$WHD$0xl$@Lt$8xd$PIIH$HII$x\$`xT$px$x$$$XL$@X|$PXt$`Xl$pX$X$X$zX$zX$zX$XL$DX|$TXt$dXl$tX$X$X$*X$:X$2X$XL$HX|$XHD$ Xl$xXt$hX$X$XL$LX|$\Xl$|*X$2X$X$Xt$lBYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$`H|$ HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_ffffff.AWAVIAUATUSHdH%(H$1$`Ht$ H$HL$L$0L$8H$@H$HL$PL$XWHLt$8LHo%.HD$0LLHD$(Lt$(H)l$(H(Lx(Mx(x(x(x(x(o[/IIHA{yHHHHA{wy  qyiio5,syL Wybiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXbiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xbiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xbiib iByBy# sBy#yAby#sy#Ax[@X Ax[HX{qM9 b i yyy#sby#y#sy#[Xʼn[XL$)L$WHD$0xl$@Lt$8xd$PIIH$HII$x\$`xT$px$x$$$XL$@X|$PXt$`Xl$pX$X$X$zX$zX$zX$XL$DX|$TXt$dXl$tX$X$X$*X$:X$2X$XL$HX|$XHD$ Xl$xXt$hX$X$XL$LX|$\Xl$|*X$2X$X$Xt$lBYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$`H|$ HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_offffff.AWAVAUATUSHH$PH$Ht$H$L$pL$xH$H$XH$H$`H$H$hH$dH%(H$1$0WPL$H$H$1L$H)$H)$)$)l$p)l$`)l$P)l$@)l$0)l$ )l$o%&o'o-$yo4yo<yAAqAiiosILPiyiIiyy#sy#y[X|$y#sy#[)|$X|$ oTii)|$ Iiyy#sy#y[X|$0y#sy#[)|$0X|$@yoii)|$@Iiyy#sy#y[X|$Py#sy#[)|$PX|$`yoTii)|$`Iiyy#sy#y[X|$py#sy#[)|$pX$yoHH9ii)$Iiyyy#sy#y#sy#[X$[)$X$)$HLIH$HHHIIH$LH|$(HHD$L|$HH$H$HT$xH$H$HD$L\$pLT$8Ht$hH$H$H|$@HD$ L|$@HT$pL|$XH$H$H$H$HD$HD$0H$LT$0LT$PL|$PL|$`Ht$`H$H$T$H$WL$t$ H nT$ T$ nt$ D$ H nl$ |$ Xnd$ H$XDT$ XH n\$ D|$ XnL$ D\$ I ynT$ T$ XynL$ l$ XynD$ \$ *Xn|$ Ht$ 2XHt$XT$ I :XH XH Ht$Xt$HD$LXl$H|$H Xd$LT$X\$HD$XL$L\$II *XT$H$L\$IH$2XL$I Hl$:XD$L\$X|$D$H yn\$LT$0|$L|$@H jXyn\$HT$PDT$Ht$`I JXyn\$D|$L\$pI RXyn\$T$ZXyn\$t$H bXyn\$D\$rXyn\$H$H$A*XӉ\$H yn\$l$A2Xyn\$Dd$I A:Xyn\$H|$Xt$LT$Xl$L|$II Xd$LL|$H BXX\$Ht$rX\$HT$*XT$H\$HH 2XL$YH\$:XD$Ld$X|$HD$XT$H$pXYXŢYHD$XŲY(Y`H$ŪXźXzXzI zzx$4L$L$HDH$H$L$LHD$DIASIAyE{HWHWIIljDAa)ƉAaD{‰kAlj@Alj@Ez*zXBljkzBW)lj*rX z }mWAlj@Alj@Ez*L|$ljmzXG)ljzG*rXWzA|$Al$WAlj@Alj@Ez*L$ljAl$zXG)ljzG*rXWzA}W@AljAmAlj@EIz*XAljAm)lj*X  WAE~AnWljAljAn*zX@ƉAz@)L;L$*rXz H$dH3%(uH[]A\A]A^A_'}DIHF(-LH(%LDPH@(PH@H(H](X](@]]___[_[k[[kc)AL9uIIHHHHHƃt{ATUL$SHHI,DBJ腇,HHEL9t1.%w5'.v(f[]A\f.DIHF(-cLH(%dLDPH@PH@HH]X]@]]___[_[k[[kcAL9uIIHHHHHƃt{ATUL$SHHI,DB E,HHEL9t1.w5.v(f[]A\f.ATUSH%Q^D$ DIHF(5LH(-LDPHDYPH@HYHYXY@]]]]___[_[k[[kc)AL9uIIHHHHHƃt_HHL$I&=_,HHEL9t#^D$ .vDH[]A\ffffff.ATUSH%^D$ DIHF(5LH(-LDPHDYPH@HYHYXY@]]]]___[_[k[[kcAL9uIIHHHHHƃt_HHL$I&=t_蟃,HHEL9t#^D$ .9v/DH[]A\ffffff.AWAVMAUATIUSHH(H$hD$LD$`Ht$PHL$XL$`H$H$pEAHD$H$xHD$H$HD$H$HD$@dH%(H$1E5WAHL$@IHT$HD$IHt$H<$)|$0O ()|$ x(Lx(x(x(x(x(o%uoMo-UDIHH{GHHHH{sy b qb o(biiWsqLityibiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXitibiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xitibiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xitibiib iByBy# sBy#yAby#sy#Ax[@X QAx[HXM9itibiib iByy# sBy#yby#sy#AqAx[ňXL$ Ax[)L$ ŀXL$0)L$0WL$LT$MLT$LT$x$LT$@$xl$px$$x$$x$x$(|$ XL$p$X$X$X$XL$tX$X$X$X$zX$zX$zX$X$HD$PX$X$XL$xX$X$*X$X$X$XL$|X$X$2X$BYX$z~X$X$*X$rX:X$X$X$2X$zYX$h*X$X$:X$XY2X$ X$XŪY0:X$ŲYXeHD$X]źXzPHD$`zHAuAWKD x(ILx(HD$h((M(("DfDffADDffADDf|$ xfADDIAAIAoAQAgWWAA)AaʼnfAAgD$Mffl$Nfl$N)*ʼn*rXzXFAۉzDH\$PzFWWD)*DX *XCDЉ WC\$ D)W*rXM|$M*DzXEzMW\$0zEA*WHL$XHt$`)XI*XIWL$LWA‰@‰A*XFA@A)Er*XL;|$hFH$HD$H$HD$HD$fxfXHD$HD$@fDXffpHD$fDPfHHD$fD`f@fD$ HD$@P@T$0D$LdW*Y\,HWA*Y\,D$ gWA*Y\,)WA*zYz\,fH$dH3%(uH([]A\A]A^A_nfDAWAVAUATUSHH$PH$$pH$L$H$MH$H$XH$L$@H$HHD$H$`HD$H$hHD$dH%(H$1!WH4$H|$LL$HLT$H)$)$)$)$)t$p)t$`)t$P)t$@)t$0)t$ o% oo5 o-fyo<Ayoy9b9q9iiosAL`tyiiAiyby#sy#y9y#sy#Ax[ŸX|$ [)|$ X|$0o)|$0tiiAiyby#sy#y9y#sy#Ax[[XT$PŸX|$@)T$P)|$@otiiAiyby#sy#y9y#sy#Ax[[XT$pŸX|$`)T$p)|$`yotiiAiyby#sy#y9y#sy#Ax[[X$ŸX$)$)$yoHH9tiiAiyyy#sy#y#sy#[X$[)$X$)$aH\$pHT$(IHt$@LT$xIL$H|$`HH$HT$0H\$0H$Hl$8Ld$HLl$XLt$hH\$@H$H$HD$LT$`L\$pH$H$WL$L$HD$HD$HD$ Ht$ Ht$PH$L$D$PH nT$PT$PH nt$PH$L$DL$ XXnL$0DL$PDL$@Xnl$Pt$PH nd$P|$PH n\$PDL$PXynT$PDT$PXynL$PD\$PXynD$P\$P*Xn|$PHD$P2XHD$ XT$PHT$P:XXt$PH XHD$ Xl$ Ht$ Xd$ H|$ HD$0Ht$@X\$ H$H H HD$ XL$ Ht$ LH *XT$ LT$`Ht$ LL\$pH 2XL$ Ht$ HH$H :XD$ Ht$ X|$ T$ H yn\$ l$ H jXyn\$ Dd$ I JXyn\$ Dl$ I RXyn\$ Dt$ I ZXyn\$ DT$ I bXyn\$ D\$ I rXyn\$ \$ H A*Xyn\$ H$L$A2XˉD$ yn\$ DL$ I A:Xyn\$ Hl$ Xt$ Ld$ Xl$ Ll$ Xd$ Lt$ X\$ LT$ XL$ L\$ *XT$ H\$ HBXH JY2XL$ H\$ :XD$ LL$ H$X|$ HT$ XT$ pjXYH$`XYX(H$HŲYH$YzH*XźXzH$x$pWHDMx(Lx(H$((L$(L$(HL$05fDffDffADDf|$ fADDIABIEhARA`WWADA)DAbAʼnfAA`DD$`fADfDl$pADfDl$pE)z*zXG*ωrXzGWz*WH$)މXG*XGH$DDWWD)|$ *DrX*zXFΉzWzFt$`W*ɉXK|$PH$A)‰K*XWA\$@W@‰A*XAA@A)Er*X L;$A HD$0H$HD$0HD$HD$fxfhH$HD$fXffpHD$fDXfHHD$fD`f@fD$ HD$P@T$@D$PTW@*Y\,7WA*Y\,D$ UWA*Y\,W*zYz\,f.H$dH3%(uH[]A\A]A^A_bfDAWAVIAUATUSHdH%(H$1$pHt$0H$HL$L$@L$HH$PH$XL$`L$hWHLt$HLHo%HD$@LLHD$8Lt$8H)|$ (H)|$x(Lx(Mx(x(x(x(oIo-QIIH{AHHHHA{wy b qb o'biiWsqLityibiib iByBy# sBy#yAby#sy#Ax[AX VAx[AXitibiib iByBy# sBy#yAby#sy#Ax[A X PAx[A(Xitibiib iByBy# sBy#yAby#sy#Ax[A0X RAx[A8Xitibiib iByBy# sBy#yAby#sy#Ax[@X QAx[HXM9itibiib iByy# syBy#by#sy#AqAx[ňXL$Ax[ŀXD$ )L$)D$ ~xl$PHD$@Lt$H$Wxd$`IIH$HII$x\$px$x$x$$XL$PX|$`Xt$pX$X$X$X$zX$zX$zX$XL$TX|$dXt$tX$X$X$X$*X$:X$2X$XL$XX|$hHD$0X$Xt$xX$X$XL$\X|$lX$*X$2X$X$Xt$|BYX$z~:X$*X$2X$rXX$X$:X$zYhXYXŪY0ŲYH$X źXXHD$zPzAzH$pH|$0HDLHD$@IARIAqEzIWHWHIƉDAa)AaDAs‰AkAlj@AljEz*zXFƉAkzFW)Ɖ*rXzskWAlj@AljEz*XGƉkGW)Ɖ*XumWAlj@AljEz*L<$ƉmzXG)ƉzG*rXWzAt$W@AljAl$AljEIz*L|$ƉAl$zXG)Ɖ*rXzWzGE}AmWƉAƉAm*zX@Az@)L;L$*rXzH$dH3%(uH[]A\A]A^A_[ffffff.DIHFo-LHo%LD0HHH H`hPy`hyqqAL9uIIHHHHHƃ-DVDAADD^NDAADGDNNDAADGDVNDAADGD^ NDAADGlDN N DAADGEDV N DAADGD^NDAADGDNNDAAD GDVNDAAD G D^NDAAD G DNNDAAD G t_DVNDAAD G t؃@9At~F~؃@yAthF~؃@yAtRF~؃@yAt<F ~؃@yA t&F ~ ؃@y A uF V ؈Q A H[f.tDoH1o Hf.)HH9uHHǃF؃GtyFN؃OGtdFN؃OGtOFN؃OGt:F N؃OG t%F N ؃O G uF V ؈W G fff.D@(WHoIIJW H H o}}GH9uLwbN>ك@8HJN~ك@xH0N~ك@xHN~ك@xHN ~ك@xH N ~ ك@x H N ~ ك@x H N~ك@xHN~ك @xHt~N~ك @xHthN~ك @xHtRN~ك @xHt<N~ك @xHt&N~ك@xHuVNڈHPHLT$HArUHAWAVAUATARSHIHPHhHXdH<%(H}1HHAB0H`LHIRIZAMbMj AMr(EAWIMMLMHH((M<(|(Hf.| I H QH H I I I YɱYNбYYHօ h(( >օXXz\$zT$9>օ >օXXz]zU=օ=օXXz^zV-=օ=օzz*Xz_XzWzz<օHrX\$ X\$,HLDCKL9uH []A\fDXATUSH t$WT$L$HHZI|$fD\D$L$\$ HZ 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]E!AE@DH(dH%(HD$1{Dynyt0HHHHHoHH9dqL uynȃ)$qq 8LAJ 9v- 8LAJ 9v 8LAD9v B8L[]E!AE@DAWAVIAUATIUSIMH$H$dH%(H$1H$AAWAII)t$ )t$)4$@xYұYx( YYX$(LY)$Y(HL9Xl$YY)l$Xd$ )d$ GIHIHHLT$L$LD$H|$WHt$ HD$(D$I n$D$I yn $L$4$D$I AzXn$<$n<$LT$H L$JXD$,$H|$XXt$4$H 2Xn$$n,$H H4$XHD$:X$Xz$X$z$X$XD$$X$z!zix)x)d$\zYzl$Xt$T|$PzL$DzD$@zl$zvz/zgu,Hĸ[]A\A]A^A_W)d$ )d$)$$:f.AWAVIAUATIUSIMH$H$dH%(H$1H$AAWAII)t$ )t$)4$@(x(YұYx( YYX$(LY)$Y(HL9Xl$YY)l$Xd$ )d$ GIHIHHL$LT$LD$H|$WHt$ HD$(D$I n$D$I yn $L$4$D$I AzXn$<$n<$LT$H L$JXD$,$H|$XXt$4$H 2Xn$$n,$H H4$XHD$:X$Xz$X$z$X$XD$$X$z!zix)x)d$\zYzl$Xt$T|$PzD$DzL$@zl$zvz/zgu,Hĸ[]A\A]A^A_W)d$ )d$)$$f.AWAVAUATUSHdH%(H$11f$UD@o5կHIIoN foHHo@sL9siŹuLs$o$yyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyEDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAH$dH3%(D'DOu#H[]A\A]A^A_fDE1E1AWAVAUATUSHdH%(H$11f$UD@o55HIIoN fHH@sL9siŹuoȫsLYL$o$yyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyEDEA*DZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADADjDFZDVAAÉAA)ÉAEA‰ADAjDFZDVAAÉAA)ÉAEA‰ADAjDFZ DV AAÉAA)ÉAEA‰ADAtyj DF Z DV AAÉAA)ÉAEA‰ADAu8DR N DB v DD)DAԉDAH$dH3%(D'DOu!H[]A\A]A^A_@E1E1` AWAVAUATUSHdH%(H$11f$MD@1o5IoIoosHL9siŹuHHsyyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyE)$EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAH$dH3%(D'DGu$H[]A\A]A^A_E1E1AWAVAUATUSHdH%(H$11f$MD@1o5IoIoosHL9siŹuosHHYLyyy$yyyD$`y yDyDD$@y DyDDT$@$D$ y DD\$ @l$`y $AD$y yAyE)$EEA*DZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADADjDNZDVAAÉAA)ÉAEA‰ADAjDNZDVAAÉAA)ÉAEA‰ADAjDNZ DV AAÉAA)ÉAEA‰ADAtyj DN Z DV AAÉAA)ÉAEA‰ADAu8DR N DJ v DD)DAԉDAH$dH3%(D'DGu"H[]A\A]A^A_DE1E1(LT$HArUHAUATARSHPdH%(HE1nyDiIE1o%^IIIDI M9tq$}odd}}rL]LMH)AÉك EA8AME8DOуI9AunI M9iuwt$1@DAA8EMDOH9DwDHEdH3%(uHP[AZA\A]]IbE1DH(dH%(HD$1DynDyDHI1IIIIM9{dvyr$D$A8~DD)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$D8} LDH)DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$ D8} LDH) DT$D8} LDH)DT$D8} LDH)nIM9qfA8AȹEMONA8AɹEMLmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(u H(12fDATUSH dH%(HD$1<D&ynEy3hI1HHHzodft?$EHA)DtD E8~DEHAfuynqII9uE8DѸAMO؃{F8ADML؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1?offffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1ffffff.LT$HArUHAUATARSHPdH%(HE1nyDio%@IE1III}o$}odd}}rDL]LMH)AÉك @EA8AME8DOуI9AunqI M9uwt$1@DAA8EMDOH9DwDHEdH3%(uHP[AZA\A]]IbE1ffff.USH(dH%(HD$1nÉyDXI1IIIyo )$$d$vyL$LL$A8~DD)Df@8} LH)D@8} LH)D@8} LH)LHH8@8} LH)LHH8@8} LH)LHH8@8} LH)I8D8} LDH)D8} LDH)EfAD8} LDH) EAAD8} LDH) EAD8} LDH) MII8D8} LDH) MII8D8} LDH) MII8D8} LDH)I8D8} LDH)nqIM9C8ADMLNED8DMɹOmNA8AȹEMLNDNDE8AAMAO,DNAA8ɹEMO NA8AɹEMLNA8AȹEMLNA8AɹEMLNA8AȹEML N A8Aɹ EML tuN A8Aȹ EML tZN A8Aɹ EML t?N A8Aȹ EML t$N A8Aɹ EMLu D8NO‰HD$dH3%(uH([]11ATUSH dH%(HD$1<D&ynEy3hI1HHHyodft?)$EHA)DtD E8~DEHAfuynqII9uE8DйAMOك{NA8DMO؃]FA8AML؃?F8ADML؃!FA8AML؃F8ADML؃FA8AML؃F8ADML؃FA8AML؃ F 8A DML؃ tqF A8 AML؃ tWF 8A DML؃ t=F A8 AML؃ t#F 8A DML؃u D8FO؉HD$dH3%(uH []A\1??ffffff.tFv@1E1HDDADXA8EMA8EOHDH9uDE1f.DAUATIUSIHHMt811 fCL9Hs%I|HuH[]A\A]f1 AWAVAUATIUSHLH(cBHT$HL$DL$,A AHtYHt<11fDHH9Hv%HtLLuH([]A\A]A^A_1oDL-BE1L5BMuDIIƀM9LLdu؀|$MILDHE11fAEH9IH|LuH(D[]A\A]A^A_8f BHBHAE1E1DE19~MII9t.HD$BUEHD$T$$CC@jL@jxHHH@HH{8t7sCHHHD$(dH3%(H0[]A\A]A^fH8H H@0H=PtHf.kH;D$u|$ tXH;D$T$uQ uLHT$ !TD1D$ ,cDEIAUEHD$T$ҸdNCHC!ЄH|$(fffff.AWAVAUATUSHHdH%(H$1HG$Ht$D$,L$ HD$D$PWDcHD$XH$D{HD$h$HD$`HD$p$AH$ALt$`IHD|$ H1H@LDL$HDŽ$LNIMHD$XT$PH|$HD$@HHDŽ$H$'T$ .T$@ICHD$D$DD$H@D$L@H$dH3%(H[]A\A]A^A_f|$ upH;D$Xu|$P tH;D$XT$PuM uH1H|$0fT$6Dd$0fD$41AEHD$XT$Py)ҸdNH!ЄH|$P7ЍkD$PHD$XaTHD$XdND$P HH$uHHt*2m1HBHmHHHRP@HHHHuH-Ht$,rNiiH\H@AWAVAUATUSHHdH%(H$1HG$Ht$D$,L$ HD$D$P7DcHD$XH$D{HD$h4HD$`HD$p4AH$ALt$`IHD|$ H1H@LDL$HDŽ$L.IMHD$XT$P}H|$HD$@HHDŽ$H$T$ .T$@ICHD$D$DD$H@D$L@H$dH3%(H[]A\A]A^A_f|$ upH;D$Xu|$P tH;D$XT$PuM uH1H|$0fT$6Dd$0fD$4AEHD$XT$Py)ҸdNH!ЄH|$P7谊KD$PHD$Xa4HD$XdND$P HH$uHHt*M1HBHM(HHRP@HmHHbHUH Ht$,r.IiH*tӿLuIL1 L$DŽ$Ƅ$D$PRf|$pHD$XL$Ã$=h;D$PHD$XPdNHAD $D$` rHL$`IAA$HD$XT$PD! f|$pD$HDA9 Ht$pID7AHD$XT$PD!g $IľA$HD$XT$P]D! H9,$RD$`D$@$HD$H$HL$`HAXUHD$HT$@tD! D$`'$HD$hHž UHD$hT$`]D!D$PA}HD$XD$$DAD$f"11HAfUAHD$XT$PKA}HD$XD$PDd$ IE(=k;MD$PHD$XP|$ tAD$`|$ HL$`Ht$@HD$hD$@eD$PDt Ez@jwH4$@jHHH@HH{8sCHH`$H$tR$Hx(H$JkD$`$H$HL$`HD$hd1H$dH3 %(!H[]A\A]A^A_LPH{0H@H@LIlLC8MMHSf.Mv MtwINHttHqHt>*tؿHuILPfD//HPRMG ML{8\D$P HD$XfDH;D$Xu|$P tH;D$X|$P E1ɉ\$0fT$4fL$6H|$0HAIUEHD$XT$PyffD#D$PHD$X H;D$XT$Pu g_Gu|$VD=!;D$PHD$XPDHPH H@0H=P(H#IľAaE$$EHD$XDd$PED$PHD$XD|$L$I~(DIT$j AD$Ƅ$E1D$$HD$XD$D$Pt/D$`|$HL$`Ht$@HD$hD$@at$PE$f{fDkH9,$.@jH:H@H0kHw{8sC@j:HZDD$PHD$XD$PHD$XXf/V/DHPR~H0H H@0H=PTHGfDd$PHD$XD$xHx(IUD EeAEP(HD$X$D$PAE P/#/|HPRfDAD|$ y@T$Pg|$gK{D$P HD$Xd\$PHD$XJQD$P HD$XDw7D$` HD$hDMD$P HD$XDD$@ HD$HDD$P HD$XDKH|$Ps%~ HHu\HHRP@H=HH2H5vH|$P}}HHa\L$HHH$LHx(JHHlH|$ HHo_H$H$Hx(HH8H|$HH;_H|$`l*}H|$P\}H|$Pl }H|$Pg|H|$@\|HHtfAWAVAUATUSH@H8dH%(HD$(1L`1IL=HD$dN$HADžt E<Im0Hx01H@H@HhHH@ H0@(9AEDt$HD$t EHCXHC`LHChHǃHǃHǃCpCxHǃƃƃI]8HCHCIE8H@ LmIE8E HEIU8HAQHA HR HtoHBHtEtHpHt>*t׿LuHLPHD$(dH3%(H](EETH8[]A\A]A^A_fDLI}0YH@H@LI,IU8HtcHHQADH[ Ht?HsHtEtHvHt>*t׿HuILP-DIV LMu8sH3zH|$s$zH]IHtLHk8Ht2HEHPHm HuH{8HtHo HPHHk8HuH{H\LtHLLAHYHH)HHf.Df.@f.@f.@f.AWAVAUATUSHH6dH%(HD$1t_KH?HS_+t5Cu](IĉA$AnEIE<$YHD$dH3%(H[]A\A]A^A_fD$D$KAH IAEZPDA AI9uEuI9REIH!T1$cA$pf.@AWAVAUATUSHHHdH%(HD$x1D$DuHD$HHCDmAHT$ HD$(HD$0HHDHl$@AL|$ IDl$D$1HH1LDL|$PLHD$XI MHD$L$xlMD$HD$Mu |$|$6H;D$u|$ t#H;D$T$uh uc1ҸfT$FLDt$@fD$DeAEHD$T$xD$HD$fDҸdNH!Єu~1Ht$xdH34%(HĈ[]A\A]A^A_fL$AqQ1DL=;tPdND$HD$PHtH|$-muDHD$dND$ HuM/mt/_HPR@AWAVLwxAUATAUSHLIH8dH%(HD$(1MHHHCLk(HHHC HCHHtHX LHLI$I$LHhPI$DxXƀI$}`HL$D$D@\HD$tkHL$(dH3 %(H8[]A\A]A^A_fDFLh(1HH@ h@HLD$ fT$ HD$҉T$tdNHtH|$ss@HC`HChHCpHCxHǃHǃH CH HHLkHAVAUATUSH0H0dH%(HD$(1WH@H@HHXH@ H0 L+MeLBIU8H`A;HAHR HHBHtEtHpHt>*tӿLuHLH](H[(H{0H<$D$u H{XH<$eHL$(dH3 %(H@H0[]A\A]A^ÐL8I}0߁H@`H@LITIU8Htc`HH;ADH[ Ht?HsHtEtHvHt>*t׿HuILP DIV LMu8HCHt$/hH8HD$HD$`DHHCXHC`HC`Ht,HHHHJ|$HHH H|$t H<$HQHiffGGÐfff.f.@ 9YeYfYYZXX^(YZ^^Z"fff.O8fYG YdYYZXX^(YZ^^ZgÐfff.fGGÐ'_(^O\GXXYW^X_YXO(ÐfDfGG333?OO OOÐfDfGo:G333?GG GGÐ@fffff.Gf.\7YlcYfYYZXXX^(YZ^^Z"fff.O6fYG YbYYZXX^Jo(YZ^^ZgÐfGGÐ'_(^O\GXXYW^X_YXO(ÐfDfGG333?OO OOÐfDfGo:G333?GG GGÐ@fffff.Gf.H(fD$fL$t$d$((T$ l$D$YY\$YYX\ZZ\$T$ H(\Z^ZHffD$fZL$ZD$ }ZH@HfD$fT$.L$ zt^fZ>ZHDH8fD$(fL$ D$(D$D$,D$T$ L$$~D$T$ L$T$ L$T$L$D$~D$\\$H8(X\^(ffffff.HhfD$XfT$HD$XD$8D$\fL$Pf\$@D$<t$H|$Ll$Pd$Tt$|$t$@|$D~D$8l$d$t$ |$l$d$l$0d$4D$~D$0L$YYXQ.d$ l$d$(l$,\$~D$(8t$|$t$ |$$D$ ~D$ (L$ Y\$YX(Q.z!(Hh\X^(f\$\$(ɐ7t9ZY2G?^ kGZO(YO fDZG$@Ǧ?ZG?^ j^jZ(O(YYW ZGYOG f?tGGfDXGGÐfD?t[g YGY_YYfXXXWZ_Y_(YxYZXZ@g_ YYoYo 5xfXfZZYYWYWZXgYfgZZYXfXYg$Yg(XYZZWZYXZÐffGGG GGGGG G$G(Ðff.@AWAAVIAUIATL%h6UH-(6SL)1HH}HtLLDAHH9uH[]A\A]A^A_ff.HH/usr/include/boost/smart_ptr/shared_ptr.hpp/usr/include/boost/exception/info.hpp*::boost::exception_detail::type_info_(typeid(*p)).type_==*ti.type_/usr/include/boost/thread/pthread/mutex.hpp!posix::pthread_mutex_destroy(&m)/usr/include/boost/thread/pthread/condition_variable_fwd.hpp/usr/include/boost/exception/diagnostic_information.hppThrow location unknown (consider using BOOST_THROW_EXCEPTION) GNSS-SDR is an Open Source GNSS Software Defined Receiver Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) This program comes with ABSOLUTELY NO WARRANTY; See COPYING file to see a copy of the General Public License Use gnss-sdr --log_dir=/path/to/log to change that. does not exist, attempting to create it. folder. GNSS-SDR program ended./home/carles/package/gnss-sdr-0.0.6/src/main/main.cc/usr/include/boost/exception/detail/exception_ptr.hppboost:: mutex constructor failed in pthread_mutex_initboost::condition_variable::condition_variable() constructor failed in pthread_mutex_init!pthread_mutex_destroy(&internal_mutex)boost::condition_variable::condition_variable() constructor failed in pthread_cond_initF5D710130573541B9DBD4FD9E9B20A0D59D144C54BC7935539D2E75810FB51E494093A0A19DD79C70C5A98E5657AA578097777E86BCC4651CC72F2F974DC766E07AEA3D0B557EF42FF57E6A58E805358CE9257669133B18F80FDBDFB38C5524C7FB1DE079842482990DF58F72321D9201F8979EAB159B2679C9E95AA6D53456C0DF75C2B4316D1E2309216882854253A1FA60CA2C94ECE013E2A8C943341E7D9E5A8464B3AD407E0AE465C3E3DD1BE60A8C3D50F831536401E776BE02A6042FC4A27AF653F0CFC4D4D013F115310788D68CAEAD3ECCCC5330587EB3C22A1459FC8E6FCCE9CDE849A5205E70C6D66D125814D698DD0EEBFEAE52CC65C5C84EEDF207379000E169D318426516AC5D1C31F2E18A65E07AE6E33FDD724B13098B3A444688389EFBBB5EEAB588742BB083B679D42FB26FF77919EAB21DE0389D9997498F967AE05AF0F4C7E177416E18C4D5E6987ED3590690AD127D872F14A8F4903A12329732A9768F82F295BEE391879293E3A97D51435A7F03ED7FBE275F102A83202DC3DE94AF4C712E9D006D182693E9632933E6EB773880CF147B922E74539E4582F79E39723B4C80E42EDCE4C08A8D02221BAE6D17734817D5B531C0D3C1AE723911F3FFF6AAC02E97FEA69E376AF4761E6451CA61FDB2F9187642EFCD63A09AAB680770C1593EEDD4FF4293BFFD6DD2C3367E85B14A654C834B6699421A96B856A629F581D1344FEF597835FE60434625D077ECF0D95FBE1155EA0431979E5AFF544AF591A332FDAEF98AB1EDD847A73F3AF15AAEE7E9A05C9D82C59EC325EF4CF264B8ADF2A8E8BA459354CB4B415CC50BF239ADBC31B3A9C87B0843CF3B9E6D646BA43F866276B053826F3A2334CC5E2EFB9F8F195B382E75EEA63F58A06B3F82A3B5C77C1800FD9498F803E524435B321210BB84690BED0BBBE16D363B3A90656A73720E27008852FB7DACC8284411B177728D9527C560859084A395A6F11A96AD9DB6B43E00642B000ED12BFD967868EAB1108552CD4FC89FBC408ACE7678C381EC91DD000319124EB5D5EF52C4CAC9AADEE2FA045C16CE492D7F43743CA77924C78696FCBF2F9F7F36D8E623752200C6FCBBD71ABBB6877F3C5D6E6740AB0389458A6B66440858B2D383244E853646FE2714211DEA9E6196252815BB704A20BFE556AC474F8998944E0CABBBE21A6400B87BFDCF937D12B2821D59298AF4AD378F0F42BD8C41693B8D993CF37C8B478F3BB5D33AD2A9FA24AD7B8FA895FDBC04964192F7BA3FF74E0E3A435B5DFE042E3115CACF29624C0645E9C917534A2EBC1F5665E4E1B1BC56208DBCD8A27CCB6474D5D0E20CA4072C960E5ACE41BDA3770DF3B681F2B318F6F8E1CB17C2857350FB6009AED665E13B2780D79217F73FAC7A8A48048DB0FB8A8A5007CDDC9A7B2DA8257C99F1CB605A18204E57DE19A3E4A8C122FCB1DD6584B3D2DAE364D800F9C5A9E957B38F624CBD3ACC58FA3ED070B5E44857CCB813FBC0BB83B5D157C6C562422E5963CC4DD753C45B0264F8E136A0F1774D77A543E44D51EF8C6B9408B6E3B5CEE1347A94F13ECDC94DC764976E5A50B4CB0AE7557553B47EDFE03EC2CD32EA8D125A341E1EDFC77E75330D6E7B23DC838EBCE7E5567F5B8C80C3D15E7404B4E10F0BEB0C69626A814AF91334199864FC77E0FF548DC2A6FA6A71C3C0561F2B085CC05E8512E27B9DBA60B93D114B87935776C8E9A67905C429D48BF3AB1B0A56FAFBFD5D9C8D8C8A9E5918BFF273CF5E8664FF2B90314BDBFDAD5AB8C22A0E45C104ECE75EA43FE9BDCE306A5A28AE464628163D249D8056005F1A900951808CC8620F81768153436F741667A8E271DD986C7A1E5046FCC74C7CEBBF9A1296D6CF0B2FF85BE412D87214BB368DFF462AD649D7324A117252311C664D33E4DAFBD830FBCEB6EFBDD7391D4BADA7A775FD1949D981F619655DB3C22BAC34E5AE41222905C0C7E80D6EA28471EC0468756531C09A471EDBE200472E78F1701FEE96E5769A9893C0F11E7906B064442E06E21ED8B0D70AF288690C532A2D03B373E1E0085F62F7AAA658B569C5184E3DDC40ECAA88B887118601691892F9F55E2DE79E49DFF11D434C2BA3AA6447522A7C99DC215CAD2ED0114ED62CBDAE9D315E48AE14D2014B7F8EC0FC4C72A12023BA7093C86775DF3D2F42C7CEDE616876340BE4301361B9DC9DFF4F1DEC6A62E165927BDE4F809E969AAD085437496BB95904719820F4CA8ABBA0B84C34B06DD7E268BA10E386FA7DB9FCFCDAF2B6AFBA46A8A299153B4E11582FBA7F28F0A0F9DE41830AB33335062C57D81DC361EDFE491939100FC827F36273760043D1C35B74E36C6C4DBE1D307847D55AC07D8B212C2DBA632A86AB15BD0FAFFA43070644C7E50623195A3796AA8E8D6E4E964FA0E4488A500B9063FBBFB1204A0E33C6CF2879AC2BA7C86CAB57E3E8A497836194E65C5C39B950F1AFC3B58E850A5EC39F4190D55351D16529CD52B36DF4A2DC68EE202BB758CF19C54B0E1461D547B5D06C2F9DC09C2B15458C3140860E4C6F3FE4F417FDFCEDE00F71212EE137E6669E569A7845470CA564F85CB4772808D65D2B48D409B709BD7AC5F7E28AA804CE9DAC3ABB5A5B768C6A184B5A974E933F2C1772FF64AB26BA2D5A165744E314EFB2238AC4858A8B82723DAE8865478EAA261F35DD4D98A9C07ACB0B822AFF1AD3E739CB214CE737196FEF2DD0B0D45BAC423935670BCF71C2EC04CCB98943786173C309E75A02BB78A788A5E6F8A8F407E57B8403841A9E1FCB3A7AB80D1F6529770E52C173E2C47EDED4400D5E665E325ED845C9E8D0E66FDA16B17D61EDBB336F22688C3F0FB040A55F33B65FA9F3D45F5B22C445CBF9DEB22EA9596357B343DFC31D5875CC0E94117A33651472E476D3892D8112EB6CB6E0151D409C5A514DCDA38A773C58F18B590EF9017B6EDF0192AB7EB29DD6E1E7E7390C13E9B10209D5775F3B066F7B2DBB7307FB44F726DD2F368A5FDBE75BA7248762E1EC7E4589DF1A353A16D6B3CAC1C9ACDB89890ED2C4F44AFEFC763DB51D102230C37E1ED0943CD6F4176B2F5C19119588911ACF81A7A29320AD579C1BFAED1A70DEE1B87037138ADE411E0BB92F5B3148DFA11F2F84CA6C019124B922837503AA9823A97E443A66378D5CB3130A7EC9B05670E85D095D5E6F603092C632E51FD9013FE7FB9F08448FD09F1219A4744CDAF82BF9C60039C8185C7E9559FCE301C6D3F46A2E514AAD44D3889C8CB4ED7439BF47019194F2644363770F8BBD0AE92B6F5F43CBBB503A885239DA636903D4C264B3FF09AB77E3FDBA7EFC63E0792B6D5183759E57D8A694CDB133B4A9E301CEEEB978050AD9A9E410091AD29E389829E2F24BE1E3B24F4540C4A6533EBA72E8AD540BAAE43A0CB82F971F3A51DD77FE9E1956E2EE7553E050A1D10B99552DDD5B68F2E2859712835BD2AD6B08881753B4833FB04740E3364D2CD4921B939393E7EA91B854FA1E5A8EE79FF0A83F111F78435481D462E0E1CBC0C921D190A435A1BA755E4B7021244FC5E3F0630F2A1F439C02AE619393E5624834B05ED7DEDE5F0AFC7A40899424E75D4EE79290E92279CD4F60D98F6E8FCB3E9263DB60FAB146A835AAC2E96B3BE3FF07119032DEE0521C731117E90C2943B389DD6B65C5E21C34F86F5A7ADE04072DFD1479EA36528D340736B0FED4F6207BE9F6CFC971D5EA11781AC2DA25DBEEB6B903EF8BB0AC0CD2E29F94B8CB67874A7B7441045758E09EA061181A50E0AB7BCCF801554E0644780BC137436E3FB7784C182856A790D6943BB53DB40D13D6A2F7B83A5C521073883B90FB8DB1C0F954D132943C09156A09984B822079FB8FD09BC07C1D6336C7CEAE8CC3162760B9838CA6A38FD0044FDF099E416D57BF9F33A551043F34EBF9BAA90901E62D2D981065F977852072F692535DDE24EE8946387B4E5B0FEFEBD75552C1FC325A608A78079A9AC864F2F30010A3304CB16A26AF98D9BFD3B8D128541190B2BBEE275A6F53B9BC5108306985ECBB983B56E34F18B48A12AEAB88271F4F780CFDFA83E05E35C12464F4350597CCAE9B4498F5A5454DCC3218D3336763674934ADCBCB5EA52891EB240C362248226DE64899BE30735F6495E94AA61ABEF62B803C57FDD045B724ED1966B6E7DFDFCA5B36F7B0FACEDAC62DE8E10B12DFC84B1A9CEB407BDE63CDB5208ABBE5E066AAF262187E94502B1701B2CC8681CB616773DA2B7AF49443CFF528F45DD7F25959836771908C2519171CAED2BCDCFCEA46301E7D99A5AF7199155772E92BAD85F35EDB656F0999EE828A91F570102961D62CA6CB55144AFCCEAF3910F3336DCB029CDCBA164ADA72732771B6ECD1C58E49F468A2BFD23E1B996DABABBAF5AB3A4C74926187B5833006F8BEF7F9CD0F05A2A0B9BD9073C4C3976E8660CE7BF81634CF0B31C3DDD806A6A0C15BC552B83A86789CC675A6D137BE27BC86DF68FEC5D268119EB9E965260FE1F5C56AEF60A8622CDA8C42F24CBA7F5B07A7416917277323314AFD3ECD10F74BEE7B22DC760EFA7F935FC9963411353782547FAEED32E69A4FB5756C1A73CCDFFEDE50F4B2D9B5D2ED5C59C9A52D80CD27B989B8DAA14C569E763C08FD42358CD064B2DE0526607C9536D75E1617EC80615EF5EE2314FAC29907B61B61F8696CB80B14B3A0148EEBC825C91150A08A23FC7B38B5982AA02A18BF6E91B3A1F2EEF360F682A34AB36CAFCAD556841073F219910F7BC2F07CE45E98F77F50475DF9EDFE2DC9E3D7280193D61AB5076A14887E9D9193C3B83C5773BDECA067CA1BC3D4561C3A8B4E30072A6269B529760CA1B5FE9D3DB2B5D1202CE8B18E9E2E80FAFF47108168D3C7EB3C940B1A35A1D1B968A5A9DC0686DD8336E498C240F20871600FF995B9E33169DCFCFCB58E75C94D82F843C60A7118F0D7B40064A8A4176C5158E86AF0BE4C1D5D73D1C051132A85CC0628486AFD660502A515D6353B674B1D4E61750C13E8A3AD48FE1F89F201C288A8F443867C2BAC23C706EE7A2D2CC6E00978E351164532EEA256ECBE0D4F8FCE02A276BD19666DE93936F7A242FC4C7E879791314B043ABF1D5F9B0036ED22AA92028C800C4D62BD6640431170EA77311865074D670AF2847AA47CB94584A793FA82F51574BD7C62BF14386F14A3D7DBD129FDE64EAD67EB35D5E13FF214D7D163B770D4A77A62D02D88C0FCF3FA5EC306EB7F85539105FA2CE5F53D182E58FBBC1C57CFBCD2D2F7FC8A067D6FA0BC834DAB8F370B0971BF6D068CD4D3A32C11C6598DEBBAEA046528C5EF762828CC84D003847069FA18743A809A004431E83924B8FDF0AC78699B905ACCFF82E83FDAFEC8648DF64042FC9438B261B73F0541498ACAD67D702AB631BECEF8680D33CE8F4F0CE29B95132591A350DD68B36734B97D4B3E84A76497F702312F2A8370DCF26A7C3C8EB91DD8699C48F551750712683E0397083714A6CAC3457C0FA70BB3A036C6E0BEF24E6B20BA5565B351C2EFD56BD9455FF7728BE07A097208E73DE4CD0CB4E215B4642365123CDEA419B28459D50E864B762554E7C1D7CAF73DA7D40EDEF5D824A2FE1A6CA473B07370932A8A5D441DEE3C9A60DB68E27A9D3E9C8229B44E5B434C6D18A8CADB6D17BC4614DEBEAD670C73132CE2F999C8716D1098C69277E8ECAC546EF8002E5182E25F31A354DF112E97F8733DD20893B430CD7130E69ED4A0FE4D6C2E4FA479001E42EBC9F36E5DFD3E0BE35A64B89745E821BBB3FB91E50253A9E71AC379ED57AEF394C2CC59587B2D0337CE74002EEAD17AB5D504BCA68BDAE9061C3DBAE2985EBE292B9BEC9D3542015225F44ED3C2C3FFB036A515BF33DA1690F3438FD225A5034106C5F4BCC43301EEC2245D73F63038E2A7D9B8CF95A9FD813FFA071FFDE423E0CE737969578BEB909764A8D6DAA9E15A4FA0867831652C0F6E9AAA39A63F0AEEF62A433476CC7380460ECFB8B7F3B2FE8C4C42A3EF1CDB808FC9747FB4F044B3B47A4EDFCC9463ABB72C55399B2F79EE5FEDA270D6358B27F8466969DE4A5F2E6A5F2C4CF0813C09F468DC97FC0E5DD057A8A0355767B698F8A79BF0350C4200413A15E6591DE70A1B502E19FF515C3DF36935974A4764895B9E3CA2626BD39B7ADB780AAF7E2E914E804CA923089A51F3876649C73CA3C2623A8C95D11EF4B3F941E9772EBA1F47212C666F03F01509FF699F74EDE27182B6E98AF49D1BAACB41A328A8C34D6E8AA3553DA3962B27B041495F269328B6BFB4A385CBB118953F3F009920EC4C8590003290DD60AC89177BB8C4BF753CE723AECA392B8D9E5E9E4113DD062F294A77B6EA9A0477E697C04C787CE78A92C704409D37D37B6B392128698D0D8D4CA101EB38B92F467F0D86EFD8759A14162CAB55F8C457E82392790A5BDDC8DD2663944F880C95EC02FE5363B064623994EE5D4396C0E44DE2A3D225830BA6160270BCD110A942B092A0DEABA9875D4AFAF99A24C1D5F10EBBE6DEF9CAE5B0C85B2A0417C1CC5D1A5F71CD8F8A4B013C3F012C0A19EE4A23106CAB8662C5A2A93A971D0B6E487FC05BAF5C355A9520C9148584CFED3EDD0F38696E161E64378C831C586D9178A0CE289A67F33AE68C02A3CD138FA09DF1CAD01EFADFC8BF6F5407B79B18D09C82804736752D08A1FE09EB35F544E9F797EA36DB493BA947AA82513EB1615A356B5AA4308B0B4183E070EB494D628159D2D4BC3CB110AB0CCB2E9E73B5B7EB567187621E72D99F1FB78565917B28464A5F29DD8D6F98B6ED703040A44B0ACD97F15049E009E8533FDB0B6DB2F2582E6BBF81D7B0EADC8F402508F6B8531AD13FD1C55978A8A70DF4E053DD475132D348AE27581370EC14A3E0F96E0D70DA4946DEEC0760011404FDC5B436CA7419D05895F5E0EAEEBC88C74947733BE9919F18CE702887A6C4DF7C19279B82FB646090822DA9CD9C7653F6B931A337A28F7A4A01DE0CC0744F22961045F8EF8D4B30B07E5EDF5FA944EDCFB9841A9088AE82444FCB6E90B0E9C567A80E8C42EC713D78132F37AD1D2592C31C93D2EAEFF38AD94E5C0D94F949F47B88B03BC1EA4E5EC9C7D9DF19ED208B8E44FFDEB0B625F633C7DB1C826AA9E1C1309E5B14A0DDDB79714DFDCB52221CEAD7E8A140DF7806F127156478AFBEE922B8ECF322D66B48BEC434299BBB36B3BD9030467B7F2EBBDF358AFA7FBAC93326D0C36A388831B99DF4D527BCE7C9070F7B46B5FFCDEB07384801AE5F86A89934DE23DFE2C1AD117797D4FA1BBA6175823B41166DBE9D126F17B3761E2C352AB396A5A9CCEA42A5E9EA1BE3497C0A5BA9121DB97F64159AAC78E62D7DEFF3BF4CF73F8CFBE045C9D39E41D5D208DCC4B47CA27E900C3CD8FD1408DC5E0F5114F2FE65817D37CD1452C4967ACAA2119FB8D60E5E2FD8A820D0AADD88B94D40435C095568AE6394D3B97C835BA868A83083316C49C75D36EFDD85165BE74A4F2B2D21295EBCE085D9C4A4758FDD9CF71B97FDF34B7B63A5E9691DBDAB834D87D5B52CA9A53032FFE821398616EA92625C2DB633E37911987083A3B49A86FC562FB1264A75643A5FB6E97162E16ACCE353227FE61A859E094C2359BC4645946AD12AE5C39C70F59EA7B597A9B3372C23AA578146781A61163C92816627DD9C4BF1788087821F9F5D41B75A0F251B06BBD3E29ABD41E72A1D48323D24E2AD6F11C2D49678CC04FCF6B0EFD33BE6DDCD444F5CA02FE158112631F782CA7B0C5F3607ED807495BF8E82C5EA51A922FE28C8168D9844859E7A3EE3038C5D1D4BB4B13406C340894DF46406836739E31D01082BC84489592DA0E985630CEC40702A36DDC301B3AE1E8101786FEDBF752F9E175287C239C18FC25795BCB479DEF59C58C373313C02A1BC5F16355E2B50EFB58855670868728B902653ED80943CAEB680AA3E630755DF32F406F403D7AF5E48A710274D3887A7AAC8EA6744B889F2E0CD2033DEC0B434A9591254A0AA68C5C9BF11D35765E86B437497D84E5DCBBC0C0C580CE9BC50EC6382AD74DB02C2C233B7BB07517D48056226C505ABF2DD244F6BBAA23313D570558B065E42327768078EFDB53DC465DA038E3B216D990EE951B3E13D3C1CD559998F77BCDCD2B9522B6F1DC5E12C912EAEF574AFD69C251F9B2532501AB9F4B3B2223D0F8920BD562B0D358A14AB0D196DF6337D1C96CDB47AFEC6F81DED4B5773864DA32FCCD06B9AC53C122B2C6327E6E5EFE227DE4893FF15BBB2257FAEA836E99676EE32BF6FC14D4F56EA191B8A3870374A0867C49EB0015D1C6D07B87A36BFDD1DCEF20EA7B80D997CBE2D83EB5630F2EE6F73B0D50700C89E4F32438F5541360683DF11DA6E7A3C1E7DB2A87800D9245BF04278C990A8DC9CD86DEF39CBC6D4BC00FF13BBE132F9D86681A8913BE787CFC69C35304824788716D52DC74CEA399E06DE6241780447C74DA8E947134D8B2FAA9648D6D5F34C9D60AE5973B5BB0187796D589C8FDDD7675671F28C04AC1038D09251980683CB712F694D7C5B0D5B1DE86CD10EAC4EA04A55BA8803D78249BEF516D38067890105A23212E72879FA267A8B4F0455A81F17CFD3E5DDC55E5D4FE00F83E18626C676DAF00E6AAFCC23D209DEE0B0FC6C2AE4DE161D13017ADB5D8E5E70E7837D094416558C044D758383EDF5755C80921218ABE76E51FB93249E211A38FE6D07A7DFD2263E6E3D8DA0F921A06A606B804DE7AC3FD097E5F96EFCC0F544D623FD6F43FB88CEA7C341E901CD47A7E24AB141E998FE41CA87CD6CE8C1870D9ABB6503BF7E8B659084BAF2237DFC94F35C9884C7F44B87120BFCB298696E613C1656AC4899781A94869EC603B4D38665337CA8593AAC83AD8BECE10302E4B4694237E96CCD3AD9CD5F8EC039A1D1A4210716371404C5C3FF375CB3A33559B1C1A239F2E442C8EB033501BB290434BE73489F716965393989422CF4D57E5B4F3C76AF3C5E8999E61805134B9D7C40BFB59D0D0FD30F98567E66D6148D6AA64F74A22C50AE49D6B1ECC6BB5A002ABF38FF2E2436766B86BDDE7D95DD6E02AB0FF06E7BC22CEC98D55AA2BC4D7B91C36B2FF9F525A74423498D548318509320FCCBCA582A6C2996AF6538422FF0DF060C0BC7356B0850A139AC3914338127B786F4BC58CEB6064DA881376A147DFF53C6700BD13316A5874A75D7B9713DF54FBB393BAFAAD7F7B0710C049A0B6A8B76A9956BF6185BA39D9C347D179FBB97D4FED68F47DB5AC8E0D40122EA51C4A1F88D23153DF651A180C2AD456ABD7F851B65B220A72BA48FAD0436332E4EE7EDC554B7D75481EE05C3D3453D760E9099DD27B324DD84C0C0C4DEC4C674D25284B16410F959FBD09D9DF09CE875601EBFDBC82ACB4FBCD5A90C5967EB2FED597A02607F426002128AF4B38942C85AF4472B3CBF3B183F240E049B251713740A31117F108936631FD0F11C5F79325BD6677A2C2B242965AEFC147D93358730AA782491209CBE600976F56030753CC979C240A196647CD9EAB1DD0380E59BC7905EF740C3411AD9DD72027D0D3DD6DEB0F5F3C18F6D6F7BC59B758E7E262937B4599B38567C147ED2689BA2CF23736CAF55B6925827E2B70E47D3813C94C85298BD6B49C97B5D0221BE9E3164B6FA3D95AECF53AF170966090F19A69E75F188BD2556B4E8FA7DC4AC6C34F54297C06C2A96DD1C45B42E6175B5E8784568F7FEF0B6C124C5019CB577B374941E8515CCFC21F46D188BDD2C2284C688879A5BEC50CCB97FAEE1F75580577498D509D3DE161BE216C873B29E178CE17DCACC5E9E2224D05ECC842FBEAB82A75AAA20769FD81131CFB69D5E35409273CA106FFB27F63FF997CB500F161F6DD3A8BFA5719F004EC17860152D3290951678A131E4F3D3AB34CFFCAB2967ED9D8F1BB987950306BD28751D2AEAB05F071B08574EFCA01E5386E04F727BF413A8279E9392EFB64D9AEE00877C76C81EBC861E2B484A2D35E592A131726CAE61BC010B954721A82C968CC6F384D9BBB99B4E87846D10B94EE31F64846A5834DF73A67A267B894B1C06242D750F15F3E1E850A11CB2E2B16155008F91493AB3BC77CF9BE56F9DB20D64F3D1CB54CDB9143D9E701BD313779C09DA064D9A85674CCB53B0C5B4446C122098961D5EFFD6A85537486D5EB26B5E18FFBFB8E6EF16C2DD2C02EC7C07DB15CE33015A636E225F744C963BF0653A89A48F1AF04819E273A3AE1F5538AD574D553C5A0DEF47B552957037BCA921970C76DDEF74BA083ED55363760A6780612C075964B083B4F674EA0012FD1DF09F0445CE75A698852098206868AD8241E3B319FA8D2D86DE6E7631DF1AEB571F9676323E0627307F6D8F569536A758DE5EDAAEDF80F4335E3AFCAD07F70AAD5CD08CCA1E71B84D4D97931F924AC0010C0811972ACAA414B89FFF7917E653BB31E9CDFC72595066C662CDB9BBC96152D46BF4E8C15A8D34809C4B9D79871BDF0B63FA294F2D667624F6E0210CD40C92F1C033C3D8BF089EF85C4F571CA727C71B23128A9B0FFD70CEA93C316FC4D69D79B089107F292E03425B2552AF5AA18FDB9AF86EA1972B66B1276B09119437E4DFB8F8E3972D91A93816EBD7D8D715CB47EFA742938B0B49FA27A291B0DEA1DF0B8F878332103F45A99936896181E51FF65C6995F57C2C54B8002DEFF54B0EB3131EE7D61030C33B5502C49CF398FEC4B7615D16FCEA3E8EA12BFB311D426331A06606CA5A066707C4AF8D1048F1CA6065FBE506D06C6C00D5D250E227265551867A6816F05155FCBDE24D4AD115BDA98AFE08B12A1F32E7C2ADA801FFB78BA057269D6AD9889EA02FC9A58949290975DB0F512EB37C8156CC9F1242B9E45F22CC1D6ED1CBCB6CB245811CE729261641FDF7A8F389BAFD7311B8BD689E02409F6E8C5202F466349EA466E5398B29C8CB126D9600D89697A07A6900FE8D95951903DAA3419839C2D9E35E9F4EABC04C9006EA585F544C7163A33D7E78DE28256B7B8978FE018CB529F7F79BBF66DC4F0DECE80AE3C2CD479D78C4480E4DE2F06C70E5FEBDFB4ECAEDC2E7BD891AD6C91A7C2446F1B13B340B7160782F6CC5B45F9787CF1B0985202DDF02EC552A6DC41325FD8D31A4316C13C56F7157134F66E1D103CC3AA7EB951C92094EB4409E6E7BC494434FAD80999D46D824A5A57390599052025F7DA4838F7D16A8DACDAFA06D175546FADD1E3F7975265230F6C01B9C1FB1B7AB1F2FDD43A5778E3C88FBEA70575CA26D94D249670E4D9FF28EC67D15829776D7BC6754D2A2BB01554E5FF0C3FAD8A1CB546E8AD5E5314103D086D14ABD30EA95DDC591C13D96C1CC3F60FD18D216B67181B6324AC09A97C0C45E50EE8380ED42F6E0430639373E7760C708248EE7D74830E9594114879748883F247D056B2BA94A0FC54CECF6F5C6AB4DCB7CFC8C224F40D886427504233DDBEDCE160DEFDFFD69EE2B75746D9CF71676DC453FD01C315ACA96373ED387B040BDEBA7FF3CE00D915F90AE6E1796971F8052160154E8986913AD7BA291188EC49A60BE27CB5184F7D580935ACFF18201CE8B5D54CD0A1CACF102FBC8AADF391C4CA5807BAEEF4E5E47F7459E74485E48E0C42D27CADE6970714FD97C08F9592FDD387C859FC12C1CCCFC3EBF510D66FBD8C448C25A322CC5887F94A55D48ECA362C690F24833C3B032A047D12BDA2ADC6824A1F6EA9320BED27968E9CFBDEC60D041EF538F1740C0519003FAA89CD4224293167E05344998FD396EEF618E8F547990BC06A8B76D0FD6FAC13284601AB7191CEB813C46C45CE7B3FC09EDF08DAFE136BFBDD63E6CE7E4BCBB16C5DA68AC71A1298FD27363349A261C2F2CA8CB799E8604ADF70092BDBD6A04CB80568776A537AD1711891B251C74E42FCB095B23EEF70F167E8B4856BB7F92E3A43C79FF4437262DD70BAF9B16CBF5F10D1AD7559AB0F8CEE1B9FAD058E84FCC342D9F0D9FBE4207D40E281416506242CA1B8DAB28DE88D2D00BA21AA7FDDC25940CB29F02811F8DC6850A6A87D72CA9F3476A73649FB4A254B1204CC1261E7D512BFE7B0D0091AD5CB0FBBB765FB5AFDFAB0D701941DA54832FE8253BC0CF61924BCA2CA231A196C7C32A350AC9A5FA2884D8571FEEEDB7D29632E71898BB62B5E4E0104F73AA6A9C6B8CDA816872805D75ECA64F961641077B259C9D39E2F3CCD9FCFB1E6B6E2692EA34336A967E587F32E49B961B91311198A204D11874B4BEBC6C04DDB5B82D5B741D3CEDC03A56A2017B3D2C4FBBD4CFDD6B78AEB21CDCD6AF8C349F6DF8FF8B96BC8246A672A16E45B5D0AB7D992570EC45A534B77F204039FE200D4C5E7C78FE24941F578097B216177D8AD4E1844B2E52D843256D0BE8504CF2D5B639E2CD501A6FE39B8AA7DB7DEA924B38692E43195DB7E5F25E25152DF0FB7E0D4EF63F99CD95F699E16576702B651C29583645070011B2A1F88C947BAE7C94D48EB07A132DB38D4FE2B77EEAFB31AFB442710BD0AE4E6102DA69A454517B6F148D97DBFBAC7305979B5D74D7D7568A0CA56CA89F23D8330261025CC741F9D7A4BDB356B544C68C89CCC2C125F5C71E18C4EA102343AE4A44F6FC695810E6F28C86BF53F4C8B8AAE46DF6006B1679EBEA790266D4D02A2095074ADA634EE60C7070285C316E1F191BC5A88B80D673F144D65B870A65FC93D8B4BB29B80FD58F9FE95F5994878308CAC5394781E4D5A3F5EA2A8ED834EE5BD31D2058C843F22EB778C4C25144193DAA65F9B57AEC4A344713E9EDF913F3CD29196B42E71BB182AC3B1A60AFDBF1112A86A20BFC1D28D3E0DBBABF38E8F12651C207C951654FE8C4CECB6C6F93EC46456DAFFD7320DEC8D08F2F712CEB4D82407D61CC47B333F69310C06EE1FB5ED84F83945F05D4A87CF5A68D78B5536880DE3443E804040E599BC5837E22150C93CC1E5E711F9B889C78C6FF882D80857EF41ABC5F12E99105E6C894EC0B796E0A645780341CBD039E8C6EEABA759AE16B9D8778FAC203FADF48015331D6499B8CD74BD71ABEBD3E53ED90625E3057EA47BE587600F308D38743A686EF6FA189A4D86E4A35EB798FD2307345FBD10FA701265F6417603365FCC4CE7635924428167115BA372294C27A23CE6C27C506603C5A6618A2B3344BAC50AB7FDC29D36BCBDFCE0D48D088EFD8EA1DE492C543093C30AB7694627C01B334CE3368AEB4BB3267EBB1096450BDFC2571977D7EF78D6E288FCE0388A041838EC2031248F5FD659C70180634A1DC7196C8D9111C75B51C50F854CEC63DEBF9FFE1AB9406735EC3187276DE7CA2FAD4287027956C93B8E84B7C0C3A9C3F7E82B3DB35EB6D2CEBDFE0708FEDD764C839954F2CC9044B652D0A01D28BD6B9D3DD9740CAE39AA52597FFC1227FAD8B78EAFFC31BE94A632A1AA7A60AA5A9E090DA2B62F6DBDFDC50DF6EBE1D9949619FE9B2302248D6C801DD2D6C01FF8206A93C0AD22C6990C4EECA7D4BDF36C3246A5D2D2B3982C608E6AD6BDD85C92682EBDC9E4117F8B7F841239C2A5AD7977E11E4E9CA73A55859EADF7C9C2F1B28A6B4AC7202019230063331FC5586756CEA1F8478173A0A4964D00C1AC099590152125A4D01592C54DC2555E1BA34C7AC039394D1979AEA2BF7B2B2A8CB9D62E89132CE9E3B325F023AC6E8117CE57AD4B271EFB0C172FBFF8FA6A17A490B67CA7B15F865A8AEEF37651A622390E82AFD418C7AFD48CEA29601B96AD3A831646922000BBFF02C014A9136D9A151A0E61A51F9FC2EC0C3A8F4C83E64BDE569A33B4CD653C1345B7CBEA3B3AC0411B6145727B1DBF6066ABCE9DAA8B0DE58ADC2510C02C2619A542A139FA3EF7A03AD3467345D9573C107A13E7FCD43C0D51DB5EC1A09D409DA75462F9C71F0C9E36C2742C279C910F07CFC5CF7F98AD48D67232A2DF29A66B78209557357A4BC91922D4195DA9533CD3501F388AF6EE2BB3AD08BC7D53015059988F5B9BF7824D066DCBDC61CA588DCCF0EBDE4A96632DBA22CA0D770C61A1DD66EDA882D02C5FA284798E12296E89C45906D315EFDBA816FD869DF869A65DD8BA4E0B13C441EEB052EF3D0FD436E4AC68EFC749E0CF4C7E15599D5514E136ABD134BA638A02E9EC1FE66CC9ACBCE5082C8734196BADC21F4DA7621D9FA725362C411127836A26CB44CB3851D53C599B94A5E67862665D7092C43D9B4AD3FE20B8AFACCEDE920F440F3BF5552CFAFAD04A7D7E0A9CEA18D497282D44778FB7D5072832C0B77C4C51F4DCFD7AC07DC7A9863DB8A38F1C003CB852F6119BE801AD12B8BC7393B00640F125C734447DB2FD8B02F7F7FC7A23B84FB80F9CC08E3EF888634FFB6F51ECEE9B20A89941FBF2B49314DBDD67CB7A1B5BD8D629FA327AF2CBB47B5419A0A8CB807D30152FA560690DBAC49D6B043D5BC9D51E82C3B1CF4ED69E997050C65197F3D93E21CBE91ED358BFC8C6AD1DC94E71D1F5D05589424275875AF8CDA2ABCC6404D6FCB7A2E0A74C68024827E02621C10CD5FB149FBA373AE32DFFF275CF386C3D7A04E3FE10B6F1A6F4782B4823242F29672E847CCE760BA005D6852A3459E7576A254B10A9A78A9F8112BEA39BA65898CFED1179D68211D98E6950ED06399E39433ACD898E2F6C87F5FB9D99518EF36429D447B0EF0C5B7D834ACFA388578BDF60D4B1FB5A0CEE7D1D613BB9B99E36DC9636E70A543BA6BF0B3A448DBDF80469494239D4B7C4979D82E80C08EF36EA67560C86665D458040CE31BA009BCDC30CCBAC50259E4485E570F190613CB010563F6BD24C2F1CF73F6A6844AB8350D23BBC3D1361E73DCE94AF83697BB817BA366C9855A754EFC2F007D99A964125682E6F5CF7FBBF687D221B5A0FD844477A2F87D5370F4469F76073A93AEF7812275FD4F70B2040C12A83ADE5E5D862684D119DCA0F75AE2B56C794968A68566291B731579A1055A84F083B3072B7BD5AC9D520F64F0829B592875613BDD81C11622B331289C98501B01EE1D813C0E97CF36878260F80BF88071D258B9DE02F3F90B4C12BB56CBC731550B5EFDE6D97A1283EEFE61CD6E5DF312D0F0153A32DD65B143EC6A3F2B64E2B8FFB47EAE46BD92A6EB9ACBDD11A2D730D027A3EDEADBA5965198FD59BBC8574B680B96AD48586E5B17625251BF4374E28C6AB956C6818183FDC119499EFE69433233B6067B0EACF1F47BD3AAD9783FA30F684110D1152459233896479D08A976B853E4B7B52A34511239961048B7C1B9009095327C86F2EA291FAC1734ED2596EF19D04528F3D8F2A3430A0C19DA6A70A37DB6DC034BA0053B57ACB9E7C00ED9BD6AC11339EA169D9D54E6739B051AF40EE79A1034D6294261E1AFFCD61B9CA5016C56B2D1172D9B2A7283E4EE0A06C8149E5A2DAA263A5D2429C2B1FCE75C41887DD02E056EF8724645FEC6FE7FC1EF180529B1E894773CF3E2E1D938EFE9CD824D91454116797F5A84746537FED5F0EBF0583C8508EA0745B4989954EBC4F215BE3D515687BCDD5DFDAB9814358B07038E0CB869A8C34F916FC67773191679C60A15A0A399E224D0B0168439386C0AEE8F5EF77185AC847A66D934CB0ED6A3467C3B386BA7F115877F36B49E111DE49E409468F343A98974F4EF1EEEDD282F73013EC2727518DB46C6751A58AE3E0D5F9D2B966D4465BC5595BC31B2712AE1E1BF9915CC0E02CA7240EBB9A045F959E77DFCDADAB6248D58B47BBEF3C775DEFD629A2EED15201A21ADCA470B1AD3084924FABCDAB6B12FA6201E2A239AE8F1BCD7CC39FEC62587E58C84AAC15935D45261E3AFEB60016AFA0902DB98DCFE586513FF70EF4E3F47773635D475754A158FACC9C470921FB0186BD6EEDEFCBEE9C803118851F82CACBF8C0A544B0562E2E27286CEA5FBAF83AA5C1F97AC7386F9FF39FDDBFEB223AD8B856EA2E7F3AFEDE197A61F183FF7DF2FD6DE208E71E6E1063FB3774B696913524F7488EFC2CA54E8B653EF5BCB7A8F4994E312DCEE99A316C2ABF3FDF85B8FA9BBD4366ABBD7B3D3D433C14710A95EBB3D0FCDA2D37A443D62A8361DA78ACA781CEC04542D01DE7B6C6D14CDD4EA709264251D46C42AAF404094286DA5BFF8E81FA2F8C54B172821054F4CED82287F29EA3D3AA798C9CF5C5A909B9FBA641A8D9E310248B0F9A1375CE4DAA98EB62286B4EF4DFC58B877A73D017B17AFD7F1F58D3D2CAD3B7AF2F06699B08B88FB4EB70D2511190158BB4928ED1735C94400980144EF9ED06E06074E2F29325C1AA316A46E8E617B3CE916CFCF05A389052DE120498341EE26A27A3D757AAE763046B8CBC841350292F06AFF97C9707CE5561F5C119E2FF6C137094F62573EB80DC13862797C3319158DDD465FBC033CAD81BFBBBB54D9467599D751B9980A9AE8BFC6715C5EA74859E6A10DB369D5DF83A92655A9A5908228B33B36F55DE563005B886EB324CEC4160F0D18938E9FE41D39234C29E13B814DDCD13CA6450774800924B0848735C5DE076F66EDC973FC83B13938811CD9887371470AC5DD985481185F1191EA8C1D3A7DC65E1E82E2318D0FF0C9AF65EA1515DDC536C5A8BD0AF481789838DA54A39BA56D014E12242600AC78D28ADAC3FFD3600E896445868064D1D2ACF22EBF5202D3599D2DDAAE5F526B6B6AC469D4BA0D0BA5D79B1DB89173320F0EB68F5D9DA495AA0981F8022426F68519B548B19B5F8CF068A6CA1442AF77C83B7D8649DC281BF438F9576F7A719A902A860B9ECE9AE9C14B98859B282010A5DC90DCE612AFEFD44E0E9E7666A461AE50C2656BC036648B826CA9C3C7C53B30976335B097C19390716A41FD437A2098BCFA2B2975F1EAE5BDBB8192024C20136D2542FD89FB8F2F94C08F765109279BC4E511787496233F15F52D7C3BC3E98A6DC39AFA1818B9533EDE72FDAF021E2C9B7D6C74E49B849F372B1A131F4C532DBE3B63635E0E1334C87DDB6F3D73883D2B43E87CF19E40D6B404E581E807E6EC1A94F5261C7F7EFD4CF043C90A1A7E97465022ABAA1DC21588FD285E7158FD9B67EC5FE7C9E84029E961E045EB5227E4726154F4F057FA337BB20DDA25D11632A7995B810764084EBDE01AF07372EA82FBAFE0434401FCFE05CE8FE3C20C01ACF4E9B8EAF4D50C73D5C42A95526CDC8313DBCA6ECEACB457D9673565A1CC0AAE23FD6261A8943E8FB84CCEC676601A4B302A9CACDEC8998EDC847A53B3CB0E12C8B4A7897D5680CB14A3D11BDBF4826C3938EBEEFA0075B6494CC714D3C0DDA2F5F783CF23AD2D2545C899867C1115BF4A4F559F63E68098955550BFA1EF7771598EF86A08C0C634B291674BB77615121BF0838DA96D6E7C53BFE6A58A382FD9721CCBF8903A3918B3FDC06CAB4EF675F7BE3962CD7E3C6ED643386EE533C3B24A3D94D2EA2CFB83F0A346FF2875DB07BA647492D47A807E7FD9717CF12BC97B3C1BE1361E598850B39D50CF7BE700507863BC4BBF26620FAC11D97128049BD96C5E09DC8FF3F62655D660FE66D31AB0B0F6D4F8420E3D2E633C571D7FE2AF1CB4E3BEE95E092B00EFD2796A3DEF376F75B7EFCBB141337D81AE52939D87956C41B1E42C1CCA4317D31AB4F53DC9502A3DC774E05E1ED5008CD931DDDB98DFA69960A6ACD45B60895C4FBA2BDAE8BC7DB8C821697558B1E0A3111F156738409FD180C5A4A33B24C5EE4991B84133CE9AC089724D62DA9D9827A2A04FC103652F216A0895E78A96086270814C2699F475CEFD6359428D8C505BBE8C1A96D2793802219144CA6B3EDB455929B39A3E9F3AB74D685608CE3F301FE38202ADFEF529CCFF46AF36DC24956A7CD07CEBA55AA4C89F7913A8A4B844FD8F152C8A823CB9888E3BFEA97D7E4AAFA07125DA4F51D974A5DAFF0045BCE5B868177A91BD932963451EE2673A85AA8B7D493BDF25BCC2F64AEC3150D8C40C835AB4F5D0B7F259DF099BD6FA9F5CB198B61018B1448035CCD34E7E7A2138F437490026050BBE3CE2D4CF4F4F095CB97548E5731A338CB3903519D6B13A029727F047A7D00904A556C883745410360FC878F77707A716D549ACD6A70A18F9EE0AA8A6EE2080608E10ACF58CDE0EFE2356F429B0F2F9A7869A4142A6173188DD75B570F1D1ECD282E4AFBAD11370C5B4CCF3C98535D27D73C0111F11A84711F732441EAECAB684F2F0D7FD4FC4070749574922A906E84B3350CDE5957DC388FDA23BF45F05951A393DA253EAF691940897B57ACE655E9630F09856E76958D6BF7B830E0CB8182AE226F39D48036C867BEFA7E7ADBAD17C1AB45297C757DA4AFFBAE677B05677D60DE1D975A4F3D7EB3461B424B67B61025AAC257A69FF720CB9DAC007C50C69A7ACDBBCE210BAD4DC2E629A039D98E7EA037A5C344B5CAEDCDA035F28677A41D55A0E3E6E480CCB12B8F17062A983F4E651B4F7CB217FD06BE46747CD5418C0C81916465A4F5660152B3E4781DA8040D4246F9BC47366BF663CF9DA3BB247D9238873CCDC6FC62D1D8F669EFBA42527112FF4072262F7E65AEAC328871DDF47588A0A0DD13A4139F4145822A5917F624B881BFC354F37B6D59C566823F629A21C973324F7167BC39FBD2C121D2A849308D13DA1A28948EB59F7DE97E364223E17A30119BBC7F43E21E7DC3093F7505055ADAB4654194A77C1CCB61898840125455A275A8F071273D8C13934915D379CC603657D99CE4075C1F1DCAB60B6BD62ABA1A10B5402A59706798002EF30ADED2F354E38CE0B57900FDAD31E7F684E53D097B4313DB552EA66F6D337F29594470D3DC0BC6CD361831251004DD3C5357BC0BECFED9086F7C272AA317C64C00AF43C924DB5DAC97F8EE3ED2296252FC4756FCE6928BB009D4488B9BAB757411BBA52BA6F61AF1181CC7BBA94257593FA1BD26D52AD5014C3F1A1832FC4F7445C8BBB77C8FD31C88F0C5D4736D49DCDFBEEF2B8301E31185793BFF87CFD9E6F7E084D343AB98BA3518A87A5F915BC0D76B01AF7DC1CE45F1C5280BD39D3E3D94D0A0286F8BD9FA942849664E08F2BE0B93C6E3B89061193FADA0FA9485F62CA87F3E68E204186EF1187642D651162E4D8E7DA049F462362D8C94539CAAD09AE4768C96ED6C2CAB8025EBB6901CBB26865E1F19FA1B193D47ECE390B881233578950175C85B928582D5B439EEF2F56A8C7EA09278E47741051223AC182456C4FA04D025BDB33FA10C48C70EC91BC709E3CB0FA3E01DCE5FE5ECB9018130A8DE5D0583EDD68EA2EF227A612748B2F785A30A01014BD479DEC6256C8AD88470F79DE0E1432CAE448DD7049E5B7D4DF3C978F65E708CA3759AAB9D329C11FAD71204E1E92322E3EA1BBDD9D034E2A23ACAFA21CF490AA5E2E419197DBE990667BCF277ED61B264632F694392EF52F0A27C38E478257AEC8D2542938BF0713EBE60779C95A0EEC8F32A5202A849CEE8CE0F99702F595AEA839531D4CFB5F5A6166B06EB64387552A1F9BC6BB97B9B99D19C3D2E1E8E9B305D525E7413496E40FF50CF77D4D4E2D41B1D5929848FB2F1FDDA5A39DEA0546AE4E3B30560A50DA55AB3E59FFF512844A2700D2D763D85D5C3FD8CFEFACD4D023BD926D3EF2E55EB1B3831F2276EB07E5C07B44FD7D79333699BED0804B678915FE0F092DA9A62F69CB020DA21932F9FDF9AF332E1B400C6B7E7880508E840D62FBA07E827A23A2575AE68E15AC444A1CE35DF3C3F7CA49DEF2966DF3BA89C8E90ED5E2421A6407F2EC51A3E92A3608FCBD6AD9FF9E5C7817E79A0C09FE9014F7AC291448263E4346CBC4BAA6EABFB59B4526B654070084F52B864F9769181DC6EA91B576956397CE55CCDDBE41F94E5DC366E775C86ADB1C807B66D08696A2BEE45B90E8736469A371F05929D9D9FD34980DE08E00BDE2CD0EAB6AF2165D76519F8F2D894AC70740D2372B37407BDA4D943EDF1CBD35CCE4D81340CC97751C568731C009DF65571F28B7F58106AE67279E83C3A0C130DE0C5B6C99117099548661D290C4CAF3BC60EF719E2F7B210FCD4381C33904AFDF96DC3A6557B42B6EE895B4D604F5F8985F454C51E32B2C874E90926CBC58D044D483D6D2A7C26C7AC4D190531F79993D07B2E830FEB99BFDB00AE8C008DB1B762F3F4A81D41295FDDA37F3056B1110D4F0CF385F9FCC7E14C34F6752A2FB17F5CD3FC4AF0D51E4A0AF7D28DB0D4D651156189209480054F8287266B1CB26C9E8CACAA0BE5A69C696300025D160F9DA29F9EC79838941459B7B8164AAD95577A0C532EC2EDB352509CF0CC00B5788DD743A5F33D87E8FA5733B72EDBCD61AA4B8D0B81213DB52E7EF17AE90934F5EC0711ADD19E881CC330F696179C1BA464FFE6D7B04EEC383A4106BE5892C5DD1BD719AB3739A909A384FACA455E6AF96600AC6FF809788700DD2AB93DD228483759BD903EC002D4C1278808B764F018E3B740EFD821A61F5BEA2948A653041FB31F6D5D0DE0A045DA366E44112C820FD7FA966B2CCFD5A6816AF84DC0A3EEB8F9D2F0A912586F91D50B1AE3D930A680A8FB7435B6875ED2E599B87598A7C20245296C4965E2E0CF372B6ED1219BA68CB646D3E73D52665AAF2E3D1C4DE8D264578299B166FA0E148281C877FA9B14818759CBF7FF575307E80B73933599D94EAD2FB1C08A30006330BF0AC1F1C0A4EE6B07F9F3381AD7E2E469E8DA9C2D22CFC0A208B58924D2F994AFC0268EFE206E0A9EB79BB51CA26FB49013B9A17017E0C08F9FFC6C319BB1B5AE41771443BC670EEB91D7769F9890A9B80F52CB0167EAAF850FAF2A52B74ABB1792E7CEFF68C0D38B01F244AC0CC0EF0731E3BDDCDAB89DF376973A7ED5D4264EE82C334671FCD39ECD6E2CF869493914F332767BBE461707166A9164776D29F5EC9291F505AF291254D7319AA594B5F397D5BDF00BB840C4DDCB425F4325ED8AB77E57BECA3441B89414616671692EA88A89D2690A4B5FE958F990BD84A3884A60FADD5DA57EDF01865F85829195460B85B6E754CC8F6805A8A19DA104418D9C134C8B0DBCFD5DAAF5A71BC047A73BEDBC192A453674BC624959BB76E44C5B34244D4736ED3F0F3C9658FEC0DA5437E01E128795EDD7593D636CD73FC1780B37A381502633CCF2EFDA0BBB494C1D0FC7F602DF8C282F55E3828E81A92458EB16B74835040D8A9C8F2DDF180A617B0592344B4373E1B526C9706B843B0CED4D25D7324C6FDD0F33133C00443638E6249061C56A116CEC7822F4512AFAEE52CE8F94D8547F72612EA8C7D160C65FA3BCC92BE01493706EC4E5F203F0BF85C52F417BAF8AF490E50133505685CE63AC5B173E07D8DABB2D439C6DC18B41B9CF37D02C92AB5C2F27EC83AB6B2DDCB7ABCEA30A95BBC39E9FD0CBB28118823F7D0342F1EB7B45FA6BB3A50223D0D7B14E975E7658352BC9288B48AF1346955F4551F2ECA47D423EFC63D20681057E5EF234D061A5E6E234ED01F3DF223A0E8B4DEDDC552C7DC3ECF663D5011FC907EB4A7CF746AB9E07C2929B7427DFE9E00B0A1308881912635A72EA99927F343EBAD32436A9B8EB1934AC29E79BB80AB3ED9F5CE39D1E43C251564654365DA43FB8A0FBA27F2328D82445A1EAAED67B92716147E859064AC326A42DC7880DE82FA782AFFF9C59FBDCE088746F8CEDBA288BC8C2C4B458782CC9BE63A86168B671BE99A09F2217B7BB2A7BC88651C1BCE8A0B89316ABFE72B22722273AF570974D8EDEE4DD40DD438251E401FC926CC6968393415D52D521A5BB34D4272D6BC7B5431062B35112CA709C0680CBB18EEE053AAD62B2391C9E9D580562541A453ED936CE8E88DFA61A88CA3BEE66CFFF801785CCE863ED9C36A04D2DC8742A81CA55127B44314AB4E687ED921B4881CB363AFB3CCE7EB774E3205D4591939ED7D3C0C508A31786421F49669E120F01D35D467B40F85F2454F13F591F3B830937421B5C8A6C20EA878971AEC941FD99CEA92FEE00E5DC2264987DBC549EFF3E4A26AF0CAD7421C4256D107A3E8908F67450960E4E41FD7E2E84F754BAC81C8F5F1D6F650DEB3E6EFF6059836643209E3880D7BDA701869208D8E4BC8D0614066414DB3F93D6EA187950285F55BB7A1B026EA4BFCAB4671B07704828D5CBF9730EFC99E68E91F1FE9664DFA73297F2D6BD9497DE04982C9FF3730BB6FC3EA2053B3F45DC7FB587BA19B3C6B7E780EA5F25B45BB727174D4CD3B401FE1906360BF0B15DB13B62752F82EC62226AABC83C1C26376F8366BB849DDB65958AD969B25654DEF1841518993033AF47EABEE3CAAA936F19E28A205F3CDDB5CAC649DB6A90483ACB63A24EA46D397508EEB5DA94E9C883EB0451D036E28CC303D52B1BB31FFF582605F340D449508959ED1FE2FF0BD22FDF77F9680D6B5647D59E7E6A003AF0C6A95092F0DE43D1252EA6DE00F288BCCE3ED9CE273DCB4F3BA7E8D17353B8ECA24F03AFE38B1ACA366B4C15F3FDD4DF0E0274FBEFDA0042BB203A4F6627ED9E29F405379B2F2DDC0F3B02A0CA70A9499F3CE82B87603FAA347B7052CB5D13D9DE84C114EF3B8F62418FB1F3E374B997127667FD6BCA2E2F9DBC04ECA9D908CD37C62F08EEA6F44B3FDC149465AA8037D65A6C8B9B8B3D5E9A40578E5EA3AE1209BA49E5E2AC615C59A2D71AC1605B98E39A5E66A890754C7D1C07E06DE78632587BADAF7FAAB0A529AB791095DB0A708B691E9D81F2CEA8F07B05495528B9FD56F77A4C8209DB972FAADD9791BA59F47C06F241F50C0619FC04F8456339E0AF331310FA4DCCBEA0E5DC2795CA6B3ADD0174AE4B30AC0428320ACEAFF68F73ED11DC1BC9F0237BDC75F7F48BE518EB3305CF2BB898B329716FC9ECF7E99B510B3309808735FD0A77B15731C233998F9ECEF46E2CAA6E6EDC8D05B943ABD17027A80D636E535038FAE44D60AAEC5406A372D62479192FA84D844520C6774CC589FEE16A3A5549495D968AABAABFE4DB94F5AE0C54E603D6DA5C3056769A064890533EA8EA1E5D1CD410CC8DD4B1D7E0F5F787232439AA4B3911C5DC792ECB873E8105A1AA61C627BE57E809C6863073E1E19AD8B987DE97D88A817FB43ADBB7751E36D1F0E7B70B3759D6EA8F2350D10AF38C331E22703B2B5103C908E1D35A8E814E45BAE81DCA0530FC3525CD640548245C259738E749E195B006081A18C45475F906961408BD52EA1C6A9F340D9109B2388CC358BBA2D35BB6AB672A9C16F3AF968BE4613BA6B13D115B896BE71CFEC4A4AFC0BF5D2BB1B5DC19405F40E60FDF361E6CC362CDC28B75B8C30B468D3BBB77F3FC62869FBB635A3F7AEA63420CF1B80A4B3813B2240B83ECE999808E1394DA2881DE2DE62C870EC163AD8D81495DBE2C7383B78E19AC506AED9F3BD1280A77F2D9C55600BFA258E76761391145D45F74253C6E14BAE16179884F0F0EEF8150A445BE1B5AA4FEDC2198CC39763A3DB473C1CC4263CE2DD587447DDA6BD0A496E8DF60859CFCDAFED2EEC5B1E77E68F449ECF129AA17395BA39392EB610DF45134571BBCBB26162C83FFE77D188160EBCF598EF6F092881612A04BA9F4215D429BB521E737F6C3048B5D95B20AC37F79AA99A12CD0469268228463C317A1F31E63E4754890F20B4516D179342A76201402BC0DB2AD091A70B4232473343FE9E0002E59044C5F3B6E3D7368DB7E7F9F42E7A4A1942B1161552C5C84390197A54079F570B57E8EA8A30659FF5A61048142E4368D5542B968966E54DBF91D3970B9A3A278B951D6F914246FA5CCCC20DE53713D4830AA86D758ADA7A8747FCD455B2C320FF9E5E7FE1CCCFD6F7928884FC0B35F34118B4E7E6F6A5D6E3FB4E3DF90CEEBCEEF9D7D595A4C456C373C5356EF0DB0E6F8D61E413F80E4C32532BAA39170AAE2FC606B7206C379C4155031AF918E03A069F63220109A77232F2BAF29D345737AAFED2E5E8D5C846B937277DC88392DB2D55073CE063F5FFC5717BB89B481B8C86EC01808A85ADD78517CE12DF776CD3F02D948BA795215599CFCCD9B4FE56DD681A59C71D24946225171DC18E47BFA9068302BA428929790EE62306C5FC8C10E71F6F372105C9421A563A4DA704E01FFD71E46B28C6EE1B7CDF95BCA6A794E8CFCB6BCA6AFBB67DED5C1267A12A4752176C3C1E6C2F665194C7F11C1CE6CC8481A5A966719B57124CA33D8EC9862AE5485788106562A0BEBD3980AFC4469BB1FD1653678192B3022E26CE8788C68F202D506DF098D49EBAFF7741CA96A02BD68BFC4FDBE24D34770FBBF8EAD9647C911B2E6AA705F0236301162CD2B41B88BDCFC2A79EC54698276126D6EC0213931609985224BF515AD3221FB5E8A1C4CECD51DB4AFF612157ABA6640866DC6D3602C446B8C6EAEF359BC8703D5EF9FE8EC7F5F2685C53924C6F1F71519E0AB589EEFB393A12C06B906402FE0A2FBD793272BC101D3B57F10A52C172E505B74F2A00BD5D2F7C7EA2883908434C125969A62F1B09F42E578BE22C08E88B11767D97C4C0CBD2BBD98508AFD591EB0B0C846A95FB72159E561F9D87DB446E9A19AF378B6DB4DCCB49FF8DB547B3040FFD0171B87245CF73A0747287B6FA1F1E4AE99518E8C53DBEEA942AFEF75B69E4790D75CC8A5181C609BEFAB641E28C07082D8D7DD9242E54C6DCDB2A717A6F33226A94D5794FA0BDC401F4ED842A5CFA4AAB462F703239F684DB9B95E5101A5DC6067C7062AED9259CDB2067BC815C157A7E150F8557C3A54DDDAE94E5C569A1E09C383A062B601F920EF4D957F4BCA8E329123BD6FDC3B731361864CC139EBE3C68FED0F40FB127D9D1DC071DFA1552ABC6703494A632AA1314984A2D4B7A8BB32C555B79DEE013A66745AE15E8E5E4E129E44A119203425F2ABF1F03CE9CB33C0BDC3285ADFAAF4D7B51EC31F02D1E654BB10F0CD97EC3E389CAA34398166B4D5C9FCBC6E957FFEC9CEE4071F90EE2926FACC8FDE884CC6FF1F6EF1D3CC681FB44E45C5CF681AAD13226DFE19E22CE81265F3088D193EDB098988B2640EBD8D9D66708E1E9880DC41A72FD3D64792B14AA18C13E371CA17FB46B21DA9C59FFA2FD075852D42E2A578744792EC02F9A35F869912BBB44DCC648CE6075DBDF457A9AA891488A5450FC719778739AF323E87F9633E621B404F70614F77C65697E71F281675C843C523740AB66756E4DA784F555B5B4D797A06A0AFD35A69DEEA6E948B9B3C2A62D7B1D56832D9CCF56F2680A5A0A3037F4E0252413FB86520F2815C8824975634C0889A486963A2C874638559E14F780A7F3E2318B88B2C2010174150AFD4BECE2C5FF2D37BC2FF791F4A3136E19C373FCF03E471DFCCED19471182A93E91ED3EA68C402234AB2B00ECF6287F0D84B811E4635AE8023B74306DE789ADDF1CABAF5F47885CF7F9A33F2C533093A339EB0D5E05C0763A215459CFF0D31CA92573EF2074CE2B6A11FDD6BAA3C6FA100D23A9AA413BAAFDA22F746CF74562F9DB0EF2F7CDF266142F177681CF2EF388E2E9AA012459ECCA332B779E48CA44E536082D59C3951ECA42F66B600D2621BF5F3584B59DC0DB76EC66ED7D00E943BFDE703E7D5050A8F263366948253B3576311CE88B463791DFA6F401ABDCFD7FA44B158AA97EF1CFD7A8802662A633EED958052DEDB12A6FB353BF2224ECC2322937DE3D39DCF82650B18FC0BC2BCB8CC456141C9F3FB09A0906AC1EB77E50E8D260041E4B3FF4BF3A53F7EB62E0FC503E8E38F185AF795F67FCE17665AEE29BD0D5521024A70B61446CA4CD2B3DC274FBE72A9AE29EF67A2217D6CC81BD8831B5160E4E81238B379B657FFB49023B040B6D504B287F684A0A0C07304E6BFA21E8D0A7629BA32F3F2BC9A33DEE2EAC1A2C22462EA0D24162543945B78FB6E26B86E12621588735B32A4F9A50157F20BDB7A4B6D151B3F28B40A03CFEB3CCA635261ADA2295B74947F1B1D676F6C014AB362C1F5AEBB439DB137D034D00591235B6F8D11C735A0C1964B29D3002D5243374628FB488A04EF245E64F598EB6ACBDE8B87F2FC5D1ACD105460C26BC6E1C7DCEC2E92E33F722E0A613A86356343EB111D0B166AFEC5C7A44B81A607A24DDEC47E0FE3E2F4205206CD673EC66D7435E8BD4A523A8681ED77F51453B904E4468C70C2224C5F1D01A1C5ACA89BCD72673F82955FACFDDC4DA499EFD8D18A2BCC5035B0C69D095AE0EF1AFDC389B6253BD6FC83D3C37E809EE732A87D065207684332CBB9BB0519CFF51B553B3689246EC1EA42E236773A5AC4A7BCD37381615F78A41E5B181AF5C502E22FE79436D6EEC07F7FFAA739356CD9544C7DDBC42C56BB1C965441903962703986C93C6F8135A8EC42A89DCB46E754EF5B5250E1171398FD31793594831B0775F2A39E63FAD99929A0F257ADF332C078B0B7E209229ADA46D69512FF2DE930F962B8F81EEFCFDD358FEF8E4DA0D49F39C43AE9D99D8052FCD60305FF4D9FD4CAAA3FA6BF258B867E3F266F1BCC77390D02132E370AC79B34FB37F12D102985950FA5FD53D3D4783DA5B284494EBFAB51DE6CE259E27712A0EB4D78EFD6573A03D629F29166B902795FC8DF59050C9FA48584F0EB69293C7FACEA8972098E1367D183C0B91C3550852AEE6721A84341612E820CA4F53C71A51774134923FA00FAFD84811C07620917C1966F6A26A032B125D76BFA149FD66EBD18F7536285CF94A8A750680D6BE0F4A4E7F2433018796A358CE465E7507F186752EA2FFB01941902129936F7B18321902780E2C6A5EA7D3607227D6315C570815BD0E808EAE242B554824ABAF30614CC72B74E647D5B5A6306632EDB29CD5101A3FB7A651BAB94E0CEF2BF737BBEBF0F755AA42F1C0B2E6A2E00422458CD8E2244576F139E811B2469E1B8F10FD95A988FCF872607A9B5CF81EB5875C427515D8D6D4FC58F3C69A92AB4932ED3D1CE6191E648276AD746F12A0D7B1ACE96B80CD2C3B99BD1094ED29F7020121076A6E6D5D750C39633B00F3DCB4793A27B4838C492EFCFDF94D955ED33814C954FFE8B8D29A81C3C62BB2E95ECB393F06EBAB479494628027CD02E59F1AA32F78C53142137965E662DF4B3EEB0B92A6FEBDC91F8B31D41E2EF69ACDE1CFF2AB49E2A4B12C275A20439E30C690D14D4F661C81308F11EFA3D014009D80D794D9F2C8B51E2E6C83686DBB07D1790F56D7C8EE495657BDC081A63B1353F4C4CA74CC0D02CFD7BE60E063A33D1A4D9050A9100F0E181704799357532DE152CA54FFC089E8DF80F29DFA14C19C9D6B7855482622504F95A8948A5DD640EE88B87CA98F8248DF148AE4F992BC7D1FEB3BE07E70F22CC052D92FB263337528C41ABA642C6B1C6F8883B21ACDC69196733FFB684451D188107C1DD219AB8B0AE5F49628A1CE32FDBA4B8CF02F38513E37542D020F4BAFE03EAFD7DCCAAEE9E28258322E43DD47DA3AD625DC2795ADBBBB9FE061917573936E31DE6355023F8D74500D2D032B7A53630F37FFA80567BA36F771C4ACD71D76DE528FF47E8281ABCD325E4C4620D0B73B2BE2787A7F6F485492E8F24D8DFB54C5BF909CA2CC5496AEA76E583D2D865259C356E64E76793290BB00E7029A146E1E90DC0C45356E13EF59D60F20F080A0FEA743FC1C222AAEFA3E55876F2C9E6F7BD29C09AE32E80B15DBA0E6B594E951EAA3BFD166DFCC17AFD2621EAE6539C74FD776BB998C24C30EDB3A8B6814DE088E7E6B7CE9A64EEE9ED8C9D987A21A3BF35A9D59171DD456D8D0D7D1BEB3F37D4A31812BE00077F0F0064DA56EF9C4D36D1D3CAB4D1D4C024665BBE1DC227DD29E1CF814EA65B64DE60ECA4AB9B19F937DF15914F3CA577EB3A6A0A2C8ADDA53DE536721FFFD519FC5E7CD9A3BF4F030B1EB638D6A0F8C4E24085012D758414211585EF6E0DB8C670064885B67256BB6AD7E12E380C5E25BF58EB1731E935899C1FD2B20008CF87529AA3E714BFFA86D8B66AA94811A43ABD868A7711C4FFB339C01D72D4974ED53E7DDACCD36B5F459DDC05E9D475D3E2AE383F6FFC9C2A0D1791B4675DA843303C96A98ECA88B54735293C4E1906AF30221EE71AB58F3E38271608DA6AC0A488C0850DD86F8B6588C91589632EB781637C14D9D24B57ABFC301790B3C11C1B2938845F08F7280388E0B9D5A9682A6FD40374542634590F336E42D8FDD92F3F6C82BE4D3B953CCDAC984F6C94D8F2FF70BDFBA63C922060C322FE34188FF70A37648C362BB68B06D74A2012050FC007F276A54882A8A04DCE014655AE43E448639F56FE35174BF6B56B67D39271D92AE0DC2B64FE31AAE8D1135BD8FD308D7E281F3ECE84784423A48C1362B5852719023F8861E861AD8B22219259E357EB9CD8505A66EF7CCEB53636B47D38A2AF5506E1FD72D3E30A29EF897C5C44A271EE562D67B279806E8A5DCD78DE538D8121CAF4C217F8A969AEA50D6FAC68066277242B1979F1A6B3051CE5B9949A11719F556EBEF844C808E5C1AFCE5E312C53AA9DDBFAF7280A7FB8502D2C7D1B91614157AE0C6C962F868D05D0463131DC841169946B732F8000E686467BD5D8086CC249693FF9794374266BD6A5C8AFEC65C66A834012365D60179450C58FAFE724B8B9E99C33900A86649B04CD54351D6C4CC7068B28F070417CC9C4430390493BEA50799FCBCD7A13BF75947C597B3D7AD486E3AF99CDD743B6230BC473DA35E6D05FDD17F7CB8D04A2B00EFBAA30946EDA96BED467A45EBA54578D9001637702F1DBAFAD16D2608C475B8DC7994DAB93FB34DF2237E4A13D0C04A6CACD42FA9463674AF8ABA97CF511A82E8E61F8330004E165D753323F4AFFE598E4D108DD8EA8EFA45693A2F9EC8335C756393585E052FE5D150A58F058CF8C3C720F37112DCBC6324877E87541F06C968C46FF846CB512EFE65CC401174BBD1C977694ED7BD1702EBD2D1EF23BB56D0D0C1EC2D90A27CC63F0A09D83F8B0A5ECC181D5D4265911BEE77EB1DCB4780B53CE74DC7A42252F3FE8FC54C96AC76BECE7284BB32C63FCCABED194E82FBBCFBDFDC6AD09AF95DCE6A5D6E13CC06B247E38253D359A6C0EEE00A660BC3BE6FB217B9B554C90186711B1E85117DF0CA17463E132333B8469ADF72C3BC6F218A96697E172CE2E6D6F4E70EEC2A0CB48F0A2E7991B1B90A85088CD2C59E3C9AE7FD939592C14AFE9A13829DD97E345D1AF92AB46BF196DF906BBCAE16F5A58A4D99C7D586869C81E182352C210E3B1EE822F4A95DD0BB3B285632978B18FC1CC29BD58C2152FD3BE73482DE1A6A79C3929DDA1D20B6E99E25A666AB20CD371A85DD20BF0A76C5A81041EC943A89A94AA64C5207B3166441FFFBDF4AA28A2A88173F280F3A2838A98667775F597D0368DC0BC53C1AB8B7670EE23E0ECA08CB09FCA68FE2153F01FCB7061CA1B6AEDCD815D611FF71868F50855054085AA1B7CA3309581532D658C7D2D6069C3B44E0E3CDE45222DD9EB40C369762CDDAC6D9A6923FE0EA7DFA1DF73BFF8B60EFDDB8863538A38528803F3EC27E09C87A2D0E160C2480F7D2003DA331FD5C7FE05B582DC9AFB114D2AD2F822922067F1FDB3261078F33879C497035003171165FB139F79BC508AB9D3250D1B53508410A01C35B53179076D9F46C5BE1A26DEAA2F9F71F442FD7D19D34979F6ADF96BECF1124551D4806E7136551291352748DD2D58443978C3DEA5ED0544E6596769A760B476B9CE7BB09543991EADFAD8BA63AF12FA5F7D03F714CA9AFBF19375D2A7E31EEF4A9E10C7C2F8650552A6CD22FDE0E012D46CEBC773C87729C7E746FA4C0361099D4876701C0B2A16EA2B5A6B750CDCEB573DC711F95CEF06B8DF516CA2F9BE6387550F22502E53A772436F324569B25BBACCC781D30DE25B806D369AD1EB1D1137EFACD0BE765DF4D06E177D3E3F13E9A3165F269244FE8B130E9066B23474418A5191ED481BC8974074336E71BEB02B1BC34CC620BDBC24CDA8BCEBE068416E5F5B5A263A51CB3F6589F77D4E607939F7A0FA637858B96189A014B5688A9DA32FE2ABFC31FB00401DE475BA07265B3FD1890ED0FDA487D7C616E099B4EF4E47C9F9114E6BF8CC757C92C02C46546130ECF7CD44160F55A72831692A5E69146086C43A5F043BD1184965E2A6B154BD7B8BFB3B4B28C081B0F349900492C703913885428A82A8D2EF1240414CC0B6D56D969BA1A121D9D61584C6A880D533AB58B94C85F07732B5EBEE7FC87FF3AA279ED703858957A1C1501D71DC5420C24BB2D570F7589F0AC5B6EAA87AF68442FBB38EF693D2200E73DC73F58CFCBBE43FFCBF76DB4241FC4A7B131F29C8BC0F77C95843D2FD2DE39E3D4D44237DB39994380C5F1A1A3AFD927F6B736D585112920296B90CE31D58BCAAF8CCBCBF15BB36199B48F00F308F7E8264D039D6DAA6E848CECDD1544323C9654232F45689076B7C4B1123AE0FF152124E930F2CE3D09E701F60716A413AF06E14E6FB7BBC29DCCD8273A083B00D429B57EBE9FD5270EC0C299D243A9FF0FF73DE19977EC16C2772C6B7FF88F83481924C921F49EEE41121DC79B7C23295EFA50292B11C7D45D66BCFADC3C3A390E03E13CCCD51309BD4061782273CE5D0E1BD3E11271A3C52654D2B846B5600D3E68D2C234807BBC32F1A350839500DEB6D387AECBFF5344606CD04BE3614262F068FBD256B2855EABD5A7C0AB5C28D5719C844F2A6FFC500628CDBCE869D2F090E588B57B796029A84E2319FB6E59960553B62BD30DE99AA7ACF508168EEED8DAB9996041BDD78BAA2A1CAAD2EF366F4A3244DCAA3F06EC9A24572CC80C3CF44B557CDCF6279165414066D6B700DAEA8D361034D9DE455A55E55CBE39898B65651FE709506D1A1FF67585D0D3E1B2C5EB599704B3925CEFDA45C33D92C9ED9F0C45B7A80706E6629594F66A0F74A4A767493B73B23AF323D519B0D05EEC62C6123A0829CF612DEDFB7F275A55F1629DC64D2F77125A1BDFD7B9C213C51DD9FFD83DEF42E87AD4E0F9E5ABBAA6B120E131F9E5A3097F7EC766539C733522FEB0F02604613CA1190024CC1C3297E7CDC3C514F8C3787943EE8CE457B516677437B2212A19629A0A04B0DAB8258A17B28F52BCE915A680152225304301FD2BB1BA2A557B3E3CFE6553CABBF79A47FEC31DA590308D156C3537B97116224F3E21EA3841A505EAB2F844287488AB6B0F47218F2A4C54E6BE79A80F1209CD747FD88A575EBB11F2F0756E2C263E753D9388876E159EF3BBF99448D0865173572F4B6A03FB72244334E4E861E0495AAEF15276379F8DD88AF9313096805D5596446B48EF1F1BF2ABEDDABCB1FFC98ED408846D85732F807196C9CC9B283EA4E0D78681C73CB6AF89E5C361476F84E979814F30C0AB03E97156015A493E091EC5D854E8B08328581D80091564C25D6A714407D6B591F17D376953F18308B8BC12EAB5B5C9FC11AFEF293109785CCE29C978955CAE2601A1DBAA274B72CC18CF27FE077A0123258A1B879E1ABF84458BB10652CF7310278C7FA11BDC5D00DB65E5D6A13D77FBF9D02DD0574DC7AE3849C7C47820126FC99B9766920516AD1D63E7EAA366005714D6C1695E731E88D43A38B615407A99B32A101C4D417D5E36B886C26EA1CBA9FAB0C040468781897145489121EE47BB2FBD6A064CB325AF5CECE5D5A4BD590C70C7A9B068D318247D8FE16A3609C94A8D431E9872E26A3CDB19DD971971AE1FBEB2FB76F7A71AFC5815CF7871BB5EFE3BD0C49BAC441ACD9CE1DA4AFBDB972659D13775AE77F843259EED57A62CEA93FC449EEE1EFFD9AA2D36D8FDBC06A95A6AC9B067468F1D813F2DB95D3456063D5B23395824385D5C68D3F869C4F639962D599AEB26FE2D5148A51579EF385D31E744450E11307F0C803C70ECCA93F831EBFC9B1066F98BA2299266D8C1351E6945D7EAA658BCEA46D5AB353C2CE48D01E915E740DC90E9CC487126AF9FA722A335FA1A8D11C2719F07CCA23B1DC5E5B9AB198077177BAE0B5F35C14666FF32926AE0239F21811921C77FFB56F7B218A353F8EA67448F61ECA318196B1186514D27416EE2F61764940A70300B69EBD02719191ACAD969B1075EDD09EAE26F883AC99DED1AE9355C2F30CC656934C0175E824E76947F83D791CE7A2960FEF547CD3BA94CA064659D1F68C0DA8C13AFACC07F3D5A653F259DD141E2ECE9B6D25F67CD38AF3F802CCE332049DCDAE1504061C2437C7D3BF4E15D88185D4114E96BFF7EC673A7AF8AFD53C979C89FEFACDDF873686D892DEF5FB67877734CD981C16684320AF392A464C7216FC5C8B22BC29C8430151FACC94AA1513A08E1FF2F6A965F68E368245510B975595EFDA4E80B7FAE432FCE9737962974905F367FF637121237B2A404C42A5A9318DC5ED9CFBBC2EA9C17A6CA37BBD98F8771CFA7EF58B1EEE40BA2D6C2031EBDE4AF0590AAE8FD10B2BC02A254C97726521E4D4D4D9FFB74FA5D06F8AA0BD43631FAAFFCBF01FCA87C9360C5E6A62A4B025B894E2C30F9003D29B642335DB0A3F2A3436A917B61776F96292A06A6B4DACE4F6F0EE0232E1C206427A0386075BF50D6074006D45E3A3CAB085431032AC20D2690F0435D257D3E2C93FAE49D75FF0F320CB4D348C62888A7F8C99EA79E1B2118E3B203F72FD8921BAA5C336B006ED66AC7181575D66ADE21D00FC8C7DCCA7DC9E430D1D086F2922487B5B025AD38750B4F60993368D829CC361B600ABA990E570370AFFF9BF171610F2A0B0B93A0A3AC54244073A0E816DD691BF1B0041BDC165125A14C621E01C8F069C3E05F48FB77E66A998C27A87FEAF07B5912B303A98AE5796F1B5D4E2EF52F38E68F0EC5786C19ED93612D7152BCF0CA1A3044898F9347FCA8370CE6E4A0510750DF6A42C1C35FDBD91BD2A26A60FB229CC35FC45525D12A092505D901A4F9E1E8D42D25C41B8FDBA13AFED8BC5566D4F3BA13A779D7BAAC1E25B6710D7718B73A641F23E1D22CBDED3B7BC3AF7D92B2DA1CF874D908CD8590C80F1D5055CB8228AD964DE099A4D037202C65D197A35D8A268D8A3BFFFAB39B93615DA295A09AB979AF925D895CB60B5DC5580055BC4347F0DDCB1090DAEF46C8ADD1009A5126362B0B4F1FFDDAB4A00AD8290EB84F76AA345DD73FFF7733035026E3CC1D99428CA68ADEB8CBE98E4A630F99F4F33E8AB66895AE7435D2E84EAC95CF19E9B440373EC0B4D4B2CFAD672C7FE1FE8CE5F34F55B016F8B115FAD6CC7B53DA7555E67672FBF6BDE324AA09FA18F13D9FF1041A12B04F30304774B07659F397554E66CA589D9D9F1F262CF659F718CA7F443B8331BDEA8C3980045562D909EA44E917FF5D47812A0390139B2A87D080B35D641CF6EEF705D51DAACE1EA5EE92057FD497B0D937C7CE9A546BB32DE580F8E434D644F191798A518785BFB9471AAA5D03700CB0B7B2635A6A14750F03DA4FCCB1B363C254A5294DD8E7943E4CDDA318C4B92B57B14EB0F8EB250686CE129BBB2B18EBE7FF53C9DA9C0B664C527A3C69D905CC6FAAE8BEBA7D83294C1656DA4B8308968EE49DDDC2D0C71A17B02053027D7DB8F4E77E3AD1C80FFDBD37938876B671D80E99F5F1C7BAEF50B7E05CC0CAB8979A3A2A852A7018673292CDBCECAABC74B839FD3C084682357A5414E431C1F25E34850FBC779285854FC6AFDCFB7B7749E0DFFF5F93A8AC146C873B407F2CD6CCB461312AE35DEE8D6D51347B0824156DDD60762807A5C132C0667FBBCA7489058C47A156B2A50CA5C24B894C1EE7C44B87179176905B7657A8E95AF7F2EA6C6D2A12384CAC9E6D14253DC5C31BB8FDD2462581C109D2DAF72238E4B63F436DFD7DD5571548D2206BCB8B837D8CE8C9C3B3066E46A1655E3D84AF42DE1051DDDEF438821E0F0C1EDBFE148356D707036B269C19C4CEF4C4BB4048364E2A3886E38B42EFA15F22CC8F92D802EAF3FFAF9BF45247DB76C03E99F662884DC2A29EE488023BF0EBD46539DAC307410846B25280349106CBAADFD658A066C3664E35C4C696726140275AF7611D2369ADB8258EBD2279DD24DBFE002377B9A3C1B120890A6FDF20597417F88F15CED6621A6BAAF64578BD988D08FA8D3D2873C87C38AD7EB38C0922FF3F7E59F0A8DE00744698939D42D459E6105ADD3C77E9FC4911F572B3856C9AF6C15ACE704F026C6B2FC8BDCD9D84022DC10C47E11E934BEB7E1DCE8B6A2BAECD384D810BC3AE587E7EDE57CDEA908DDB020885624BE042DE0ACCDE1511CE38AFB6C9DD812FEC339B8137D88108F07035A3869CDCFCB9402CF96B9E331297B644DB13DFA88F60605E067B9F35607D2D75573E0913F8080EF603AC4B7133D836B84F32F48534237CC559ACABA53A96885D297CBB572BAB1C3275F7CC7A3AAD10F29E727B28BC29B038F4003F8C93FEDC88C63D72609A5330F36F4986CD9536812676A89305C6CE58D4C49C088B5E273F2AF77A8D31D1B8574B9DF02CAD4930D7A7F76C067E7160ECD1A845FC6A3B508708C279A2C94F29108FCE34A63E5D5554FB530522394BCA00508DDAE6039ED9F47609781CC60F6E211BDF29E6F44ECC873DD24F1D37E49D7BB7D6279FA7B9D08B5FA8F9364EF6D4C8D129A5A97A8BBF17DBD5E64C4A31426881687BB79285B09290DE61AE40C295CB1BF3C8AF756E88068A777ACCE3C4B6E78C62AC1E8EAEBEED0AF3153983214D7459AA8E254633B52E5C0ABF4647B906AC50A62543710EE92B335A7162B540AC70F2B2F49FEA892BD72DBFC5F7A35C3AE56636AF2887BE680FA63768C27040E888202F700007DE648482F5307C56914BDB196CD56E3B7D7D3F1D7A5E4B0A1389578F111449DC2DF643E6E29F688227C3C07033C2A3818342B229F63C229FAC11EE1AB6F0FCE8608E03B46DC983318DF15FD8DBF2970EB342BE2E534BB0455BE58290A48FC60973553E94C4CB53566CE0250D9FCF055936523A8ABFC9287DB9DDEC54710859DF62829D2B6A100358EB64E6219451868D6BBC2AE4DCEA0C0E338B26B748D4A1A34AC16233046CB7D346D0D79A3CCDD4CDCB435B9B3075AEBEDB4C0F18C5DC006F5C208D882308510C75E729D08C779CA99D5A685E78D5628094AD137BAA635B7FC0F492C48A9CDBE63209C8231455012EB3E830B5B2A79ACD8FEA8016243EBC85BF5D6F46A48FE013D2B3B789BC5F743200BCDE03995BB2B6A640CFB099788E380B4E01D75409A8D8B3887DF2B1CD34960091653EEA6C52EDD745B9363BFFF666891D9C8BF511C3C07D38F49DA2892DCCEC81E1722F6EACB3214E3335C93E6141AB94E5EC31BABF8108F6BEBC3E60B1BFE37579B4D5DC8B77A347940CC1F6BFB5B46097B1EEEC4C354159BB3475E05FAB6BDE5672014D9489CB70DDF537F7209BB9EBF1FC6B8B94564AAAD5ADDD83CE6E51EFCF73DC6080D738C4FF1CBC87ED420A0B92FA459AD7BE58789F0A191D149F88173184A22874DF6D39DC1BCD4413648B178ECB03F8358547A68DE7B672BE9BA1FFC8BA392F8A58ED2806155C00F86B7669BEE4220D42097051FC67ACA30E8AEE73D3A8CF38BB13524D4E0EBD9BE68398C7C16227CABB1D0B0A0ABE7B6384ABA02905BA0C3C7363599D059C7B4C99DB165CD14FA12FA7912449CA7DD5E346D8010C85A757382270DAD15BA3CE36A76EF55F81A1E80BF366B37FE3A88EC722028C25E234E624040450A99CD808F942568AA7133981D72E7F2928894670AD5399482DF1B90E7E64062F830B736C79C30F36281495C76699CD48404673FA334F042F9E0E67DD7F3853BF71ABEAF6A9A5546855E840CE42B224D8F6490C6CE5FC02EBAF4FFC390107058F54CD635D4A7F2878099C1EF495750E6921BE2F39AD808C4210F287319F811A254CEF8CF153FC50AB2F3D694A530949E5F578D075DB96DDCF2BB90ED3DE09D9CA8E08662FD8982741DE1CE0A6B64C3D3D5004B5C04B2B0DFD976A20FACC94D1762D41EE03B40D2CF367612812EF4CC41D1BFE9CEB51AE3A22AF1BE7B85A057D3048D0E73FA0FDAF1119EFD76F0A41BE63128B22D64A5553E9549D411483BBCA1483EF30CF6A6D317AD2C7973EFA6D4C1121F703D2F48FCDA3177AD450D75D2A28D2C244AEA13F0E60AEED8ACBAB444D400DF5E280DB799B2D9A984DF1E2567D39D1DE58EF78CA6B4D8BC172B07DCB02D156CA96EEFAC69E556CFCE0AAB617C7FBB8C34871C1D35E74B7BD307D3F2E424C7A9AD676A1A69E0FE735EA50887A1DFAE6CA2FE4460FC7EF323ADE493020B39340CA1C817D81EF4FAE4E95BF3504A7709089FB48560E9E3EF802180E85EB2194E05902C6C4C52021FEB7EC64FD416BCEBC8E39D64A4B5EE345291911AB8204A888C25B1CD3D9342A56C538636D3EAB957037D09E879AE5F3A39834FBB84A3D8D5090D7814246B62E9CA68533D2EC403B4FB9488467FF9758B0D15A8CEF89187A1D5897880040B6C3C5244E85A2AD14BCF2F5ABC44A7B1D4A87E8BDA05766218773ED4F70F8D1D07CBB1E8CA6298E64EE6DC5886D37495BA2EDB3E0B0B68AD9F300310B88898DDEEFD484538C31A9BCAA76ECAD0C16607D32189058B0862EE9D70CEA9D304755CE8037BA4C46C2573181748A212E4B2BDD04F9BC240518273DC17CBAFF21A03E9120FA7DCA18D56DD1D9A7E510C90CF219104385F531F2EFAFD185ECB6B911F9B7809D98D86F15516FFDDBE9BD1CF8662EB777C3F94EA3F962D7B79449FAAD39935429E92CAE5637E9BCF4E94D413D27934952409AB536BE4055AFBC4330CD1E4B5509EFE5F8EFC9ECBE9EF377DE7E37C479BB9D3EE7745E4609B0A6D2C5D92EB3C9E2278C1F2221FF907596AA5E096ACF8990EBA907E43AD320F8019CB6355A2BA8670EE5A4F463E8E56F8F1D3E7F4922510FB668E32C4CF23AD8496399638B095B47833E0CBB34977EB3E4242EAF870D86660D6A73F83E45D6E8A41EDCA3815079649544597C5C43B6C93FEBAD5700D22EDAF431FD340A64F94BB47BD4033C76D4924305907EC1F618B43C7535F3CFC093E5AF5DDD5C4339F3BB6D835B5C2C2053CD3D5693368D4E1A7CAC59425D1FD96809C67285CFD3FC05B01053CB0773221D7205778022F487BF99D1650566BE287FD7AE882AA8E8F52E5D4E3C0C2F971C9FF70AA378691EBD8ADE45CF213822D09FD05243F9726F6C69893845E57C37A7643E16B770E26F431FF69D437271905D270EB85D8D229D7D87662121F0BEEB1E895ED9589A9CF5833408A04197AC9025D8570AD9B75DB7E192EA0A089504996E9DC652975D83633619CFF80667D8B519536B3475248BA8213C8A4C66DE69B4B3774BF9142425C57F34A27B1E288119E3FFCC6AF6A21087F9394F09DDFBD42F32D059B8CD4104A519BA640765D5CDE490E62F10E695FBFD33CBC9D2208A532C8EC25DA28B8CC1B6850AB43D9B5C00B6E74B7A148791AB07B328D347058C7E6233E18C5ED172C9F9E9ACF29D913E2A1614BFC0893D4967ED033B2B9AE6B51F908F1CED57C14FEEA85CD4D9711216BE7F79FA6721B7DCCA033C80127AC6E5FCF58EB4005EC24CB4886D787355362D5E7031B9B2AC2A86D730AD734181E723A811FF510A4DF868001973FE83288D78E6F9B9441DAF5BE2974A2848FD917C3BCD346A431922246EC852E4AAD467E60C15D61DD3BF4A207BB57DB45DCADEFE3210BE74B9DACC918A394469F2E2C95AD1E211947948FE24F5E4FD1F6976002C39C87187C44E3D224ED4DF0B67750105944C651A5E57798F168A136AC0FB5979C4E847A82B20A2E6C45DB42EF2B930A80D3257BCCC53EDA966F5DCD9AD47CFB226EED9B62A874E9F6404D4087798A1005F4131171D3A47907A3CD602B83DABE094D2CB031867DF4595F3ED59FD8C4D76EDEEE59E422CE5C7D0A5F720BE94FA24DF05F758348EADD5EFE9197C6BB2292E2B14DB8C6DB24AA94C5FF0F5106D2B566058D32C58B63A150784F7B02478D9973DD4CFD2E84059AE0F4F1320754B7EE83F04A51C67EFFC2EB1C301C0C58DBAEBE95474E3484A76500103C14C40BB0B7D3A04D8BDABB605C1EF9FD4A6564934DEC50BD5878243AEE80F9796EED70CE1B1E8B55725DF76472D12D4A7A487989F42E6705818B1F7E149E97153A7B05A82FA3FBE51763E61171A4E12931472E94CCBA74CC09483DF93623FC60945070FDDF3A00B561650427E4BD64D675B1EB398B35EF057A66FD0B48EDBABBDCD57C32ABAE46F5CDD0CB1FCF17765258236F3DE40BD5D0A3C5C978D81DEB07367AB20B2CAA9834B9576161C4F20FB9C184A01DC9021A4E92B71333354E05BBEA9015E5AC4C66312E8B79F0B92279AC7EF1936BCC30802B83DB3D113BEF64452CAD7ACF6674FDA44023A661019841A101BE80FDA4E3210AE774E433A9ABD97F2755259AECE21F7A8C3B1A3D471F874D2EEC85B9B21BC0C2E2EC9016F847C6EE38BAF6F61704B01509B5210A0534E4702F93190C392E749869B5572BB7AC4D7120E2BECD6618CD376C4C1B4965F7D9D73400824E88A5C7B5B66BA88C3E0065F9628A9AC6B91A1882192FC553E3140349934D20698C9F291B5370948AF6CC90C837B9F3607F13CAFD492CEF1723376E6A5B813A56301B88A8799519CB7646F33F91C44CDBE7F768D7DD9B323A5002D2F784C4101AF90D6E4C5ADE7D085C79E827D43E10DF63AC70BCDF13DCE0471B487C5ECB752B9C3E20F75DBD243790C91355ADFD7199081BFEA03D80E82445EC2831FB5014B85EFC2A52748A8ABFAC1BA3904E178DFBAB26C1750228C9A031104F58BB3B91905EDB9EADF7B0F6DF22ACEB0DE944E277809D77507D18EAEDAA1767697398421115D04AB2EBFC466E99F0AA540482A49C6AC8FF95E3F962734B03EF39873A93B70470B46FFFDFDC15C89F8FE2F4637B59F9BF9C5752D9F8AE7EA75D1EAF1C22CA27E5D5C9499624105D61BE2A691F9194D277414532A5E6C63875F7F20DD13C6EE73B0C3568392B14A5042843926472ABA343D2C427792199B543BE1D43A178FAA7ECF53B98AB7528D8E1B8B82C52D973CA0427636505837F94284E8D6B4F496FC5A48B7958D4681DA00651B8A7BC56EC859C071E4396A05F33588B8087EFE9635E565E6B5A8A70DA70F50ECAD1A85E6E36FF07B4FB3B9119EDE0B611CFA91D9D4C58C1F4815B07B9EB1DECD37D0FB0043D03444A939E93676B9DAF5F2D19A2615E3D97D624E62ACAC8098099FDB9A5A2F4B3ACF20F75B6807A5A3F157C2C0F479158F4A10FB4972855F3AE2FDCBDEEC00A4D470AADF5F5E571818AD6E872D897E2DDC402006965ADF16582B1E06B1861BF7D0C7E7BA491C79E86224AF6B246317F725FA74DD8376D63D7993FE2F2BBBB2F1DA9238C6F3FFCAEC50FF61E645FADEB6E03F883892C42CCCF904708B123C9271A670D4DCFCD602951D12F5213937CA2C05ADDE9EE3908E99AAE8DA31951C36D36D671CD7BF15DF60B707F00BF6EBBE5476926D015628A85758BFF35C4AC540F39E761B2ED3CA9116E8680E28BC387058E0F69345CC6AB3AD160E9F2BC4D6047A1934E15D3D7A242A296333C09296981BBF3B8577E4B8ED2A3624866111F6638F8955431195B60C5C089F9897DDF0D34A3DC627CE337AC8128C28B63A394908E4C083BCC4522DB8CE5720C45EF76B2716225E53405FCAAAA72AC198226575D5225195F106C1249E4B87AC05287A3ABE6C51A2A41E07F56ECDC46E989A8568D35669B525A6FFCA90DC91D3013967F6A5F4C022FFCC17751B68FB0D8F16FC9229851DFDCC060838F923BD44C1AD70A993E8EBAC1667DA80F91B66F8F5B375D35275188E3C7702C2312CEAC5B20D67BB34400401BDF1DBFE79DFA0EB73F173A04807215DA5CE8E1D28F2126424C3DB44ADCD7A961260FDBCAB31ECAA02DD19DB9C721EB35AB7D64B8A387796427242698A47D832C3F1AD4DDA0B5926FFCE9319EEEDA1565ECB0FA1EEDB424414120AAE8CFD0BE88D4D248899A0BCE31F9BEE7A4DC4DB3C3B10444FAD6ADCCE28F0EDF7B808536ACF5EB05AADAE92693EE02C9512B3EEF000844BA35E24620A2E8935354B8432C07C8FD615534BCFD0D8E3B572BF2CF06AD343997590FE8B244A32BBE69125B5D7C5E513A493724EEA8DA6CB0FFF3ACF1C5085A8120694CBC40FAE1A6326FD71487CC3BE7C10A34315CDFFA8C618B68EA93D330945586B080381F0076351B888087F56B969E6D6A311AE03CC79FF6861E715C9DA9AEE751F1220661581C75DCEC0515A1C9259B9CF8E944CEC4B1754E5809E985D6F43FE45710893242ADE0D3B84F1E1942B7A95648611595FED13F546CA11DB8E5A55A3C3C78C3793C6689E1B3AFB5F67526A480DF923A586A779F94A09CF963594FF4B0A387876EBB3E8FAB888C97F6773E7F0317B038E47DD7D109545BB07263B1AA84284B86E47FFB9784A171D101E7B0A6D38BCAE7E63D827C999BF551728FFC642EE690B01D486CB6EBEEB9D5C888112589EA5CBC9BDF49E675965223416D6DA02D2333BFD4614706BF13373973207C849A0DE41EBA137FDF79A1EB25D74E30CF60B577C2787DF04740BA8CADE3F9DA55D3F0084F02809E37543239E0A71E99751EEB21CB3B41488244193A4868CBA9276FB227530F82BD527E648619E532D7646A5ABBD15DB91A6E7033DFECCC65D095A3D83AB77EDD2F3FEC52659CB3AD1BEB009D7A1C9BFB544291EC1C67B75DD6DAB06E70C32C714983139DE4A41EE07B4F3C03BF566558484F19A3BB674B6795F0D8537BC31BC8D7A38B2FF1B2EC8B78539B2251D0E385DE484B05A411477681A3AE7527AC98BC2943AF1CF7F09ACF2DDE4530AE896BDE1266FE916E833A1C0CAA2B2D2F5985AD47B2D0D1D3AFB6E50D4B3DA7DEEC4385E6CA8FE22760F92807AC55556AAF7973E8016ADFD43A3919088B768351B1057498D2D668D7C1E8C63438055FDF7D36C5E7DF02FCAFCBD9291A2149E7B429B3202D329E47CED51EA5771772E308C5BEBA7B934597540D83DBEC6C3BC61A96EA4CB2D7530D9D760AA9403338CD95B829F17547C5A90D161F7B8CE0037EBF403C91C0D0C70C589BA87CAE8DF26CF14281E235A686CCD10E2D520A76265C4C2780EDFD0705E89EFE3C953FE760DE45A8CF1F2D3F36DE3164D5BC2CF32204228ADD7C182EC55F1158AFA9358BE179C722ADAF1D0BF1306A0B56218857FC5C21001499F61E273442281E585B3E6DCE148AA97B6622B23BDAECF983BF186F1B34962764758AC3C20C84036061D49CA33B3C3FCDF03F47F7E53B940DBB6E1E4A26702A118E525A9A0EC229085C925D133750ED0B200CB28A113289DE143D1D5839D2AF8B0525E0027F34FF32106A9E5DA18A19514CCC849E9697AE4BD1B317BB34927D0461A96A7AF4A5D6C13107FFB9DE38C5E8CB7C5682827F57D94ED2E77D36F9F1CB05E4C2C62B1DE254C7B1CB236FC4ED70BF8DD1F43AC773C16A37392B895F8B157578C477C85E53FA7CA58BE70D9187AF5F7A18D5A1E5642335E46C2F8F4691AEEE6A9692E21B9668E2C083D9F45C2DB3E991588BA87A0A23808732EE39E8B3C876BE79227C782F07EE3FB3086AF913D71D71910A0F56D62B5DE5E224F7856A42A4A1B2AFE380827BE86E381FCE486FD08A91B22BD91D09615F417E178C5593E41B0917E075133960AD28B4DD4096D1E84BEF1363098DDE92C29CD508C40BA7E785F46C1E0DC72E729D394911DA919EA6F94D14567FFADC61CEB8DCA2821B1CF048477E2433E9DC718DE618EDEEF302CDCB5DE472656D6687DC41EA34C2BB4DF1CA08DCB933BE3EF4B419158BA0B68AE82A64ADD58559214FD88A4CB34D99F646310697DA982C2FD4EE069DC1CB102125C34A89AB20F17B6EF648A834627320410FF6881C7919AE4E71CBAE5F8200E523934D84BFA897C44B89B9BC6BC0129F7F97EE0EC049BA1AFD67D00CD624A75FF5A30514399BE4801CED057B498B9DBBF0EB9944295D5B6AE968C4B8BBD2B9A9E17A3039C5FA35A0D30AA54CA426C58353943DDDD3FD185895C0DAEE950455FC131F520B46AE118C7406D0A72BE6127C5307730AD441B6FC3D1E08589F8396F5B1C54CAF2B17D4C152CEF347E66EC7903C878F2823D4ADB9E7CCFAFEBB926B7EEB4AE1BECA339A027CE8EF997957532FA871F356E0326ECE0BCE3399F81179BF78C5C7D135018ABC340C0BE58D3063DD7CDA4C1918A0187BACF830C8B6900D43B62E04DF6E831CFEFA13BDB5E873A527F24327C95DB4BBDB65C81A20F959F828F5DAE4DC13E5CAC7417EE089401FB497ABE10144E28EA383E61D4A9B63B618AA7CEA4588B2911EC581F506062B05E7BEF723A5A465C9FBE70E313753BDE3102845A79A206BF7D996F49A21752D534B73EE83B48C1A225F85F5103DDB9B6B8380F61AAF26E5CA643EB62EAF58AFEE0D3494E4F7A4F642A3454F4F56A406A264148FF5DAC9DF5F151C12E89ED9D4FDCC04EC5F0022DF8CBAF3CBC67CED2853FB4F8C5894C96CD00550950E7EA2A26C80A72DF533270A0E23EDBAA4D0BE935D62CC885E1CCE653D66C51E49C43952042E1B2D043BDA1CFFC1E98A3F806EB587A4EC9AE299BD838C68B9BBF7C420C12B23AA2793FA0248C932A91BCDD641DCB38F0B2D7187D8986928DF4602B381BA13B263291134628FC91C8EDE92594B39650B877D9A91DAAA05295457DFB2C5D8207BBCDFE16AC5B93600E33BC970B38E18808B1A732889320352B524B109560136E605D32784CA01F8B11D077C81EAD6B7A5741C82D76CEEF764FD07E361D531B75106AF1572AD1375B2BBAB68A3E17A4CAD2ABE76E32D18501899F8D60D293BB1AC3ADB64F81148AF56741790F87F8B7A2D9A6E7645EA50B75514C394508884CBF9E320B24D41D8246EB3C163B9101240776C312DB63C33889E3C1218435850471C454486DF7FF4D2DC0AAA14980F394CC8EB7B828A60C53A2FEC3315BEAEB30045B3E65006C6EBB23B47A8A069EAD45E32E771B9C467B4359EBB681AB48C891ABB796544169178203BCC4BC6B4A278DCEFACE5E9385C059346A23DCCA001FC9E47CFEED4BCBDD947B12A3F7E5FF8B9372D9497EE1A508D8BD3392BF3CFAD58F0191B18F6A300FF9CB8D914FDF37B48BF24C2C5CA76ABDFCCF833D51D48FC90E06E7B972944BCBAD169232A8429B6100BA562F7F3C55A625A1870A7C7D7BC9BD4C4783278CD95D07F89E8010E78876547F9AEC44322B0029A922B2922634ECCF2BBB47BF87909C494049550F1E6D03BB5354DEA7E777F499D2D6239BFA5C1CFA536F8CB16F4DB9EAD96F83A4AD34AE2C6893ECD6994C89E7F4FE426D95A18F93B88CB357996B8E5A34C43533EDB1F28A8162FCBEF03704FCCCD80C32874F345D34E81EE813DF5CC9B9C299362F8443AABE91BD0EAB9746E431804B6129FD32916303A570323FA121F7AEB2829F2A50A82CACCF6D273FFBD7AC6FFC5807771D216F50742F7091946F91460115989C87E8BBBC8402B4C8B95C102CAB53843D581FA9F16C0ECCE8944E5FC4BF4C9D7B1CF0029261D65AE1F021DAFA81CF1673C9E0B47FF2C37D1B1AF46E7A91BC5E529C8F93EE3BC74E92B2743AAB1EDE16A6523B5B8A591C617C1FD0150E63F3B7EF0494162437B0FD555A83A3BDB519B3BB209EF7924D6BCDE5992BA6248690442E72CD5EB64B4C3D3F7DA339108A18B61AD88ABE87BB7C85A3A352D7B882FD683B2637A17A2D9CB0B7F41456DCFA66D62913F145600BAAEEE7EFA5071C3C9E6FDD0A6779A737071FA6965978CBC89776386B108DD7216FCE962FA87A26B29FE0E732309C0124B0C1E99E5642E5EAE670005B078C097D16C58B8923633C18FDB0E8FF8C4610B789387ACB5A2DD0B6AE7E0DF43A6A9E8C3B89C7E5D628D59759C58D07E0687812AEDAEEDBC63B4FEE8524D10E4B467696957E6791C1E94B13CADCD0ED60752C2DB1B65E035EA72F89FC679138D3609FD2A30E4DD1A946418253C67AA69B07EBB95D4973F562CE3773430007A6DB77271D5F2B342CC5E76E115178F9C7B1600554F5C794961BAE81A5E9B621BA17851008BED9B556E461A553FE9BE00A40891750E4EA4B475216283B530CB8D479DC70B026E07889229F6017552AB9E01EDE6703FD1E2D59AF0B71E0F1DC9A42ACC5823324BEFC52CA0DCD25FE8B10C999152AA3676A30602D3506F78751477033DB7AB1A2EDC21A6FE51273B6B2890088703CEFE74F9EA89881896E5BE124B1FC9430B92F0C0568F5A068A80F23088E3EAA0A6BA04D0633AAFE85203E8B1829223FA6B730F6DEE6799B521F2E8323B8793D0F7F2BB9305B3EF4F5B4F1CB822836E4D92C8E4928A851BCE688329DECA6F7285DCC85195E5BDA3B503B8AEE6F1CD7FBB158444E7DE8BF6A9A3CDA311787755A827BCAD3DA5621908EA913C0316B9B52BFB07ADADEFF17D3766BB450DD71328A0353B09DC24DE93CF83A2E5F98BA9D612187B601157D6B140E675228B58C9398618C3BF0D11A226E489366102B9C35A916653F0DB36711ACBA5F32B327F5789F3EF48A338E4676F4BC2C6A1308597171903D2AA299CE7E523C2ABE4B15AA4FC48954187E0097583EB099419047244B4931326E5923B6313DE08423DB00866374ABBF5C31A00542CB97CDFB8F71046AA2A6DBFD7E1A71C068ED70E8D7C3268EA3E0EEF2262BD7991B6C59FF471F73A4E85F4FA015E164F9C15FE0AA5F4772BF2D62B26D3EAA25CE83EAEC5EB3577CA83A68168FB64C40A7A155905CBA6E64159E55EBC928D125E55165C639F545B0071EE3CF1A3F58B4994BB4BF50C2B24F2E06E4ADC90BC1C0954A257D88444347AAECF136C15242633463DCF984BB6736666E38F1A45150B1B7D1C31DE06EB9C2F4097E9D9B4D21EBC9F3A918000DE2449DCB3F5FDDC3C773A645DF560F7E013E847E2356D33EFF1E215782638F58034B09F4739F98915BFB0B1DC124681492F58021670D03CBF5E8F962351EEB07F9EDF03596ADC2A3B7EB6DB1CFC911E9A4C42336A57309F7B6C3389282E557D94BCC71827D7C5737B1C530D2A087E3F507242F3DA5BD1BBCA4DF8B78BEEC1DBF7EBB2EA1CF1DFA79E60785BAFA23658490C9A64AC61C45779DFAFC6C55CB5C9FE457BF47E45A3FEF092E178ED4495C0357B459E95AAC82132FF1C8044F4EC84EB882DC195D9CE996B1CCF523098E9E1A57C37C2E2D0ACB0EAA34B0B56FE5A0747130B1E75AA923F6F94C0D024A7FCD22E7A4ED8B201966C417AE864420767AB3223BFF56C64D4F8F557DD950F7C50D9A39AB2C742CE686C8F92B35711904C600A9D4D3DD83F3DF1ED7DB8042C76B0B7D5D9BCD6E0B5524184BF99D8D0B4F14967FA48A93A2F44E2275ED7E59F3991EFB0CBF2E26AC1F8D9A41AAE4563179254BA37028867E68C8179454B8B71FAB49DBD1F889104CFB64C8121151364BDB64BAF854B0DA22B8620BD7EE3D4302A88A115F8BFBA649CAA9EE7EF5BC95CFAB26503A9D26033370A4EF3CB8A5D094C63305A833387B4F8371C6FE1987514BB458C571E6CB5DF5FC900631652D3FA4444F8F1F0312204340FDB2092F709FDC51D2680753131ABC33712B4F1067EA1CC87C40B281E69209EDEC42C22A88950E9C1CE8130DA9291897BF2D8D1D106911743E7A9DA36220FA90A02A34EB0B28543217839374EBE79F40B3B612236C902E4CD05CE2E1C07F3DA10E2AEE8E387494EE9D537A821DEDE526B441BA4252785779B54DE76F82747F8607B8952DF990F268C039CC792883B1C76C297D81C6C0CF17DA8BA2C71110B16741728725839D33B5942BC0A5614A3650675FDA5D70F29154A429A42819D6EDE324C64596F93E84CC9B2C9DA3717AA6DFFCD03B75AC96543020A9F2024620353E1364E4320FD44933799FFF083E73F5D20B83BF77EC2247964ECE442C3213DE99026F8FAF0E96302EC60067EA38C5CA0CD989475205FA38869E349FC7F79EB81F8457CA3D1A875A8D166C96EBAF1F39C88815E2258EA1A14943298DA39EB9B738AAA4E0035F9567A0A9D572785594496316D56EB3D39E1F3F243D4F16111E194FC537A635FAEB2FB4401CAA9EE0091CF3CB28B366CB5446A6D3B10AB86B4B1A0714D107FCCBBD50EAE520D56A1161E03849192F5096346FBE5150B6D04025A564A43A3D22BD4B7E10DD4061CE20FA2ECDD36F66BAAD7EA96CDBAA0F063B814707718F47278F8570F77F3B15799D0E354CCA50DAA38C31C746B17482297D9C089FF379454FCCCB8730D89B1462AD95426370AC37DE50B775B952663B97AFBC403F6F729BB9CC1D21DD89EE78AF09DF8558F7E68B3711A7D9075DD4754174802F52CB9683FFE746471C7E543FF388D024327D1866CC5CA6775C58A14D70A3ECCD3EFAB52F9AE6CCE146766A8419FB546E39EB604F43B15AB88C72741F8C7D0A7FE2F462D360676D6ED79D916241BBE52B61BE8210A02543F75A47032E9C0CC128524A675E94D8F79A69B6842B0C5CFF5C1AC98D2085299BDBAEA67A41C724CA36B6275A80D377DC3A6EB4C8D0B6B88241334A95300B53FFB546163D2889D7C85F1D1397924F126DA76085BEF131A65C7DDF60DDF4086BD33B44D25025D689FF41E0C256EA12F4353D9E722EE37907AA8BED0A5A606333A031AC6B9A16614250916759B72FE6C1828BC6C1966C9EBCD51413A77F41F808BCA2534AC49DB1D32D37878DF5CC0BEFCC099C56CAF50D8B92E7CE616AA026EA1D81DC7ABC17C4705F9B57A0F99FA749F30F93DFA982A083EAE6582C8461A11ABA74B11663ED7D66EB4F8DE14F090EB1CA6D8D81CB6B063A391FD354DCEAF7DB71C277D0E92B4B463873DCBEFFB698BDCA17F80845EFD5F0FF150ADDC9D7797E21E4279B54BDD4B7C9D403D9FA6101604B79AC377780A5461499714082942313CF74AD1147CD10571A31D82871B6B3A055D50C6CDA4BDDF3871F41EFDAEBE8ABB995344DB6366E35C6E506907AD7FC76632F99124A58A32C86360FD6DDBF50324D86694518AC44F1FA19662C0EF0C0860811B5B976A96EC2A1449E53A7E4A07923E9F85794F228E441D92903922E5783F2FA21C677251B6B8DB02AC2E242C0C8652E0C17C9E3858E52DE78DC712B2DD5D2AF9A42DB2E2BEB3FB6E0FFF13DB9A1E02C8F84FCEF3F7C4D2DDC09F2A2813E8C2F8E2DACDD88277D482951555C657B3E3C5DB79E5A43500F7A2C8B30C854DBE611FAC1087FA03D439AC4635D39211E234B82A91248DEE5D4FE67A02D5AE25C676E64C4843E419EBB3C4D81FB606B9CA0836F8207CD19D106C0E287EFD8F8DB5C1A3A22886C2765FED26B5189153657B7C47D5590F11C6340067B800669B05A0849BCD2005DFEE6DF95833C9E94328D72F931D69CFBB2BDA81AC83DD660B3B17D2BA4023491DED324FC4F22510ECA4A5194B1245F4F3FE334DA9C1E6BF83A3FB30897BE54C688D2A7C5845F425866F25DD0A9852BA6DAAF8437DD80BCC72B3E258A906DE079A2D33EC5C5F6927503BA13158305DFFD3F86345524394151AA557D6242060F276BB6BB25586F632942ACF5E0883CD3F8393688F360323A000B82BD89414E9C807994B0234D730BC6D7CD0A2BF75D9F510786E83EE98D4CACF20EFF86EE9C38B8D52455D8A694B689F0D9A632E7A6AC6675E190A12ADD716D2C6322657B878FA97267C1BA4631584356768EBBD1F13FD2F37EBDCD1DF96FB943942E8A5188666235B455BE2F770C9759A8F070971CBA49789744FD2F64DC4DC6E003B3F9BEC7617C7EEDF6BACA94D374400499CA6813C90A03DFE2C537261DA93A1C0F6D8BA93D1EB5FB17255DF28B78737582FD675D056A4C474A71CA8EF0D77BAEBE5637711AEA3FF2B014700448C3D74E3DF264D773360F45CCC3342987169C9A94741D7F05B0CA50908E6BC14801A28E353551F01769451B1482FAD0043D5C72331246D9AC3344F0FA2E28FD00E86B38F5E0452F46CA111E92D01B37E966455DF1374883DB8B055C4DF25B42182280F86D0D825C096018D2949B4BFCEB7BB2C8A5BFA2C79E27F11A7F9B43A50AF928D81FA95CEC86A114222B99786072311025672AB04B2593C5AF50100B71D052AE268FBA992BF7868E58EFCD07A24D2111774A36115C1C527B5192EA955722EAE849EF83817FE8595C96EA2D76FECF6476D89F65A262D94B3F5E89A5DE8B1A7333EFCDFDED17FE1CCADEBA0D1E7B73E67491B413A862E34A308D5C211787E6ED8683C6E1DDEB8EE2D281166C03E7A72D7D7BD8B878D07D2216C21B855CCDA76B7B75DD1B2CB876E59F91F040D42B97050043499DCFFC65AF803E2F7455C9669DD9896FE1F62227936DF905835A644D31130A39479DE75B4DC4361E41202D51D50E0E4B4B218AF7F5CAF264DCD060C296E777DF1EED6AE8147E9B6CA73184C345FBDD89DE4A999C42AB4681D9EA3B86DD75031A33DCDC807F8FB14EE0CE61B16068AF01CCE7378C9D965943476AD21A469D8B0CAE15BA8FE04971FE1EC61D3AAD3386DF71B33FD0B4F324F3DA518F0CC0353182B3D76CF4EF5AB150FB9E74C28234CB3D907AC81CB6D3B99D510B481E1F0423D6F4987F5517ABBBEEC07F46AECEBA5F15D91AEB0FE91490E91F739D465225C839A01464B473A64A3D1EA24EB363EAAA590F4BD0E4492FEC4E3D4DB5883E4873BBA17595FF48134893F16F5C4A43659C46484A268C3303B2DC345E8C98FBBA6D06946F997074AE15680EC9423D6464585D98804B3541662E183F6540503BEC204749D58E3DB9ECF11C80CD3A38F8D66FFE6CC8A003BDD35F547E5039DE9A21F70A8A07B2DD89B68E43B42C2E021A11909817C543F839E6862268E38DCE712B4D49C39A5035F3D6BA19AE028AE70CCF557720794FEF6442999E740CD6AFE6235F165515FDC24AB6F578DB2549C8065E008577FCF8B8DD8A3BA679BABBC9A747A4E2DABD91501424E4191097E689A741EB6644A771CABDBFE6B74ED3ED171DF8DE641C1D42213B9D0F8CAD1E11FF63670F5587F1FB7FF92276AB48F31751E7A591AF4F0966F3909883EE6015639671BDC3D1378750F66F5DD165912CFF1A54ED463905404EB7D3412EE2B0F0D9E6B99EC81678ABCD1789BD8F1D72D3DF8754A16DC2106B83B325807E27BCBD22A25DAC32F27EACAB6A4CB6CBA4CC90D5302BE5E9827B7AB48BB696B2902975C48B3A4BA4630B14E0FD8A050B0718C2829371BEC597387172B0B3192EF958BD1F7977EF9A3A6C80D53BC961315F97B714253B9731A017BE2CA1D43024F75E26BBE989C4D514D01538956FE4B90BE17B3407B55BD08BA50FA807D0E448B7CAC65EB3FF856772A933F0C5F3E6F41E051015C6F9B8BDA2B72F0BB0265269F198207FB061DA29DE43E30847E7C062A581A7EB53491EA51B51EDD36F991D15AF89AB53198537988350FD5FDF8E003019BE115840B9BA55C238C3CBC72C0E24E25090A3D6A59BEA9FED0FAC9EAD40451A95649638FE0BB0F8FFE61AF5B9A8AB84BE84C65EA1E12E9F6650ADB59A824E608E80D1FC3AC19F418169B3879CC946165511D5AA280AE644AF360C42F7A3EEDF27E368E46480E3353E67F536E02B33505341BAF3941069567B723D7C125C8F066F9A6255436AAFDCAA8C554FDAFB0A9AAD91F1263DC62EF91A748FFB29F57E325D65A38ECB4F2851923DC6E9B7296064148A9BA2D938116266C597D9E1F11A46BE0EF526225BE750F0F3E5B0AEB7DC2140FA3A48B7238D0F5A872000782CB6F7751443EC6A1B7FA1ED02B9ABCD1C1DE4FC85E9B405C7851913C60F85582B1529276AD475AE52BD8115B6E73A53506E7A0244E1C29BCEF4CF20CFDF883392BB3990BE2A11B3213B68EC4A166C77D724CFAEBDC34C45ED09848A994BCE1FF6A9BB80C7F5CA8FD44D3FDF8DEC8BA6552C234EF8DC52382D52D2B01BB23404FC453725C7C9269A785FE09C712D4ADE7072B66295CA0C6405D9859E134FBBD3737F2956DD1D718A9F8242CE95BDB1E49F265EBF19976BC46E29F7DE0EE5C89A43AF2E107588A46E1B6762E6F8E48B8FC4F4FF93EC60938B8E5C3719022C750C4309FC62ADA4E9028D240216C5C4A70742CAA03AE910E8859C92E5A90A352CB8B45847BAC7793E1F75720D44919E896AD4581E1FD83986FF235C9834BEECAA1556794BE49033E79D4CCDB4DC67C5200E8B6A3EE891E700B348CBF092E4D3FA5E648B620E34E491D7B628A1FE7E2C45586B6577E50788687F0858C10F78F371B25C712ED2760C3D605D4ED4F052E8B66FC308D3ADD4A9B86F00CE4257EED085EAE95FBB1E113FCB42CE12BB6076178A20903C55DA570EF8A25BA7AC8B7E134B8D4E35AB172CA33CC97294A5E7E579B9361B92B49B63BB1982740015DFEC16882989C917F50D5FDD9166FE1001F3282D3C54A28AC7FD773CCC0634AF7CDF225F94107C169D2F2BB757EEB55933CCE0FF116D7FFBA992F9A075A2439CCB369D5B5DE460CADC9F8C81D98E71651AEBFC2A918C551082D85F75675CDC8CCA1D3E486CFFB3B025D27C8D67C451FDFCF59C3BFA163EB791152390E9488C604B9B8116C329453A98F7A104527BC677411034CC49686108E569B7595E1DDC85918D90BBCB337855860D6E4718C0679DAB6982D23FCB6648E8561F44BCF9B052D8B58384523BC592C9B7F824B96AD1A39AEBD2232D6D34DC171E8FBF933900960F207B55597759D23E1E794507586114228A2FC100CC200D2B862DF3F26E6D1C9370373FE165C326D8C29FD2F0B3071AFD5215781BFB589F605263FF065B7A5CA3F6AA9DE3FD8BF5589BDE35268E7752C52805DD0A723D61F0BBE0122DF576A42B5AFDF9F196A766C9B3BFE296DC16A892FAECEEDD8256D2B1AE6BFE5437D4A2691803043B59862B30D68E4FF94A0700D735CFE967299724DA9D680200C898EED1C785E7B8CEB14F1DCDC73FC625F9678B407603587220C2FDFE0A47E82ADF36C26F942797D608BA6B38A3AD1A967315E1F2D665B27D51E350F075531A179DB2EED55547EA61761CD2B3962FCB347279117D1C7A7574B49FFE0991AF572A2B0C962A8A79800CFD524AAF9E6401C44569600F41F04422DB891D25B9F714713086BBFD0FB268E66A4FB10C0ABEEB31D0FBFBA20B0E4FFF404051596FC6F6C8093AD01807FA52041CD33007B205D15D47AF733966411A36F4C7B846D0BE049ADC21B89EA4CE0FBA414C005E66F36FACF3C43B474D47DAD78AC114D0171C031DFBE4A15FE1A22603CD79B6BB448B67A4DEDC97262F7B869C54F385F3682C744ED5AD6C0B6E16793920E6B45A024010896D5FECFA111CC9F0C34E728B32F2C4D45B8AA69B621AB9AC3D9D79B38BF205E8D0D19FAC44A76B9F5644526E06858F76B3EE2D74AEB1971D6B6E68B83773399AC32203164564B102B26C370A9FEC673C285AE0D1D3DF239D48B6492B89846EBED4618AEC940DC62AF4C3FF0D56FC9FBE23EE3B0A4890BA2665A88E9F40C4B6A770F9630234ED10A3A7FF3C5BCCBA836F3EDC8B821AB18D4B1D51D9962C328E682E9D8E92A7837823C9B7714D267F9CE290E9FA6CC0A8432D3F7507DAF6CF681246AA4C2323C6B53BCC6E53B31F49742EE5F4E6F79DC36727E98B06D0300ED21F0CF5F2B51D8304A51D0B498F4BFA39C0049B8117DAD334D4B2E37676EC42DFE0EED63B3726872CCF9A10223A8A4563BE8AC266E0697004921DCCEEA5DD80C62567FDEBF2AFDF030192831A6FD871F63D5DADA4B270AA9EC0ACE47E75BD19018CB809B548D4F2C24831C384DD2B807852F596BD4FE32CAB3A16899D0B100E9F96D06AACB8DA8D51DB0B0F600F3B614461F5238188B5EDA68EA753B6ACC58569E841BAF92CEE04E6E2626B1FBD01B9B67D1311B1C3D67427298E2D193F0647EA17D16FD7FD6A40A1BDBB320A1F5FC64B97759AF4EA92AAEB759B5DD30A726E9B8EAFA372FBD83CBFF0000CA75F219A95D6A3CDE38B8DFA9281609A20EE39B73FEBDF6A155359476D073E7153BC918C1191C9BAAF0E0F161384DAD8AFC31A3FC1E9EAFA495E22D18C05194EB85298AB0F042E447DD627904B73E6E505712DF010531C88E695F6510C78B443C731D7FDCD62EB7C4015AB5D530BD09CE5229FA4DC5642AF176C39D60FE070DF635CC5435136C7BB9C4DC83B0D382B9BB636A6C2B3838542904D53B862585FE6EC8960A9A77783D17B2D90506F5D60998602AE5430E86025C8864883CECD7CE51B49CC2953A2A41D7EF8027F1A83815BBEF6F6B2F6BD4204243CBA14DAA15A256FBCD138B5D875E28BCC0BA36855E648434CD04F49935C3D074DD5BA2EB82AB14E82C30991A1159E990D1D36DAF794853A23C499AB6B3DC02A89F014310372813643F786BF19D3FA8C463EE50D9FA87107E91C461AD2E5DF2FC99630D2005894CB7698123111FAFC0C5BC9D1E8E84FCCA5179A6C9AFE3E369222D66854F90D2668A57FDEE00C300AEA4E88F03F05C4D7695B206DE9F7E1D429E5E6B65DFE05D4C861F4E7844DDB9062C0B6DB46B27AD0368992F54A44829DD11A05AB97BA8AD854E428B87F20C4E5E4BB1FF3803809A81F2E4C109572006729A5E490E0AA40BA55F4391C9FB758EFA79B97E6D413BCB02D33A00DA6705BFBADED66CFC21291C494B7C3293810012ECC61415E609DD97AAFFDEB795DE36026B4602DD546A1AD937F1A6DEACD3393F5530C48A7974E2882CB327AE600C05A535BDE5D15AC524859582EEE2D62194B73E01643359E7B2625F3EB9FE7137514ED549A3196FFCBC8072B4F6C18CC67AAFA0ED6029A805EF0987E2F27A3260F849C68F3EF91DAA9E579AA16FDA698CC18AE8706E28C6D84CB3F593273D763C2969933D8EFA564E8C06C427809E6A5A6F76DE7C8B07FF4EDDF6CF2B7595066DFB15F5C6F3839DEE642FC86BC1F3AED7ED2E65B665198AA034817DBBBE0FE30E662B2161276CBD969FDA05AFD6D6A570C1E3CF7E324634441983F257E2BAA9366308475F2D8D0C2D451C4A65A01EE58A0AF19B791D97382EC59A52616C7480B86EB1D0A83E93224B0DF73DE1D7EE6D51088F3B20B7937E6C0144E0DACA6324F0C8E5F9D93A8CBA1045E5B509D7DF98619FDDFDD7892C3082D69008D9D3ED6C9C1367D9DB7C04621D7CDD8A5A2599EE45B87A82F8CE8D60293E7A71D11700CA9AF117D630C5D8B876A9DCE519BD653114448C68B265813C608435B96CD642A420A15FBAB467692931BCA74F1F9D23F5BFDDC5B8651139B5A73F04FEF3DA64B7BD56E49235069EE5E8A136B921051F1D1C7D5993E6EEEEA2D58583152ADCD87AA89CF5962BC8341EF99CEB3682A2D0686602CE140ABC2FDF79A778A9D75AFFDBBA00C0BD6A8A8AFF9B5D1F30C8373572C81BD9594890102F46B5A393ED126C36AEF6A66E231A246FDFCBD3DED198ABC54CF357ABC67AC83680C048932D7C902AB7DB16952B3C95DF4E845B46A362FFE1A27CD1388483FFA41AA563933371C0180848F9E3C03AFC1F00D6ABA29A953327A4E3D9FAD4616C8546C9AF89FB4D08D4256923B736A8F68FEA5A097E0640C16E0F7F942E6A6F5CBA76BB00D81C606C7FED908789A63F01F9B5FC7B7BE434E85A0A44B2070BE71AB2BA0132D9D7B32E2D2FE229619F85643E75B4141D355386D1A09F45738455BC21607086C7BBCD4B73F87DD83E905BCE8FC6C5BF1824E904C4F5C26518B2FEBF8EB06B22437270C92D87BF3F54B0445C05E508E80F9CBC0502F0897D717CA232004362F394A023BFBFE3322C1D331AFC6454FC756FB48768693FD5C46DDB40DCBF14C726C24ED67D8F3EB613BA80B0E39CF0747DF62D258613640D881E085C377DE1C3D149C8359407C2C6ABC0D2718A2D42439A8E7B38CD7DCED72AE750B2BE88D0069FBE94BD69A9A4B4AD42FEC5E651A31F86B90DC2FEBAA6FA6E5F6368B620C1750278DF393F7C5035D47897FC05FBC419A61330135F24365F13D653D77CA2930DBB05A3815FE83F75BB1BD8B2DE12A2FAADCD1ED62329C55B87FB32CC8F3B42D888981B4192480D1F57CEB0C55897BDA6B9C0ACE1E7E4595E30C7368306243208444FCF4574C47B07725B25EC2E28F4C50B744B3860B361DDDD22D949AA94EBA4F97606FCAD91394B6FC0E634BD15E099E697403B2AE84CDF5DBDF36D91FB82C0BC12B984FEE83CA9E97C194CADF8382CECAAF49EB3BD446F660F94C188C074CC312E186BEE0F6585535B050C226659A94B4C4974DA32CDFF30DBEB4DEA588C6F490F7432DA5FA2408BBC931EAF60EADD7B891A61C157147B8DDE7A45F909BD20D5B12009783DE410940245FE4E91ACCF72942E486AE773CD665912173EA29875A1722F8658C414CD08CBFDFE1DD356E167A9D7B20BF7441562EE816435A78BAE7E5A5EB4DA6AAAC36F594C93E2851D76B6A18B0B03B30CD38B97E38109C494C557643D58BAA2716F115D72D2037841EF9138D19833C7C5FF40F058A960826E690315577710EFE64BB37691564B3B0B6C577DA603CC3ACDFE1785541AAD23904758A5A13BDB018E7169D479A1FAA031CA72FA6D6AE9613D6B2F82AB07500B49DF535F86A76350C140F9CD25295D6BC2F38C5D13C99540E2363862F06DDCC486D884999BCB840BCCAF2AB84F5906B9AA0F77D6432F6531558392641C52FEAF9D8ED86BF0158134129F34ECD0768BC02ED442254515A74999C6B8052A1FC797F5720738C69DD9B3FFABDDC8515CD279B246EA7C67754920038C5A4C8D301119CEB95FAB2765DE39DDA84180CEBAAFBF4976118A8373FF6BBFC7FEBC3CFEAB1DA69DD3DB9E428C594950FD51F4D98A393BAB96001461F2765834ED70C60BC56406CFCB3E784C59B91C19783E67CE6C86713C43DCDA9512B2E7173AFC2EF9A172C9CFDDD3000D7A981440AD994C39DAE6FC0B645BA0FD49ECAA19E572ED0FAC748EC837A7D6F28A8D004402F71CA209BB9403B21E29836C5FE897268DE0736E985F9631DFDD1AC59D5411E684BE082F41108E33D2B92B2D45ED70FA52EA2D6DE121EB9F9C886DA479464A9DFD9970A406491E334372D7B78936095A7459BFAFF0E9090C2C6B6D62624A79334F879A5C92C685B50F75F04BA664EC95893FF40D62EEB24DCDD288729D0C297DF5ABB83C77FC11D0EA3EF18E3BC7C2C065CAC51390C610B591D2498CDFCBAD056240E180F347C00912F2D9ABEBCF5464D410BE6A50404B830F744D78F7D97180404FB3BCCC2288B7991810B2562C4D509200CE1F9C4DF6DCA4C600D9ED49C9C1456141C7B71513E728D41970ACDB6C15B4A4E327B9A87ADA73D1D46EB0A21F2F5481C3B42931C51B780FA526C29B98E6B9C714B20049F7A05252CBB84B8E36026DB2379C9632A0843436ECB72D15EA2950ACDE18DBDC6DFB01BF08F7E191EC885F11D1D8B7BC96E9836B395108F6854545082A694D5974CC36C8A658349186C1BA892DAA85D3F156BFBE94C73BCD815E7652C38E178AAF02014F0E6F23A4E7EF689EBF3ABDCCDD40E2DECED316F07E20716927C8F7B203D51D957EE6EAB062B99ACA0D28E0AB50B516CD92CBB9BA90333E73D58DE0B4B633D81EC93D15EBCCC813EE63D63BD18517F4FE85C37469574B8122FB91388123E1D5E805166FB7157494F8559F90A4FA3DE9E71DA6FA7CCC6086E638BDD4FD3E4487506ACCF84F1E1678D714B86FAAD57A6B76E085CFAC30DE469BE32E2D203C63B43F073DD24F4A1E039B941E7A97F8BB28B516217455268B6EFBB0E1745C23D6D12A8CD13E5D242F562F56FE92496342000A731BF3DB0A7D3110705DFD0D8DEFB85665B77347CEFC8629F3757304F6129DA9845F6509FE3D32DE9FA86EA4FA9BF86FF7CC8E726C0FA9F93F889C467642C5E944501BEF8ED59793AF8804A9951B4B88906F6C5A1D3BD03A03802EEF5937E214E87B5E2F0182BA2C258F44B516EC66EACB705E06EA6DFDB56600B8463A421DB03A51460091D7FE889E6DAE32EC19190E7211F08D37846CEE7364B6ECC07C1740CE990141C4DC4CB0AC9F25CAFCA6BC9111102EABA250ADFD505201FFF638B31A77CCE7A1ECB273F9C8ED84EC2F403C1191596A53EAD823421EC47DC5E78F3BD1339532C97E4EAA024CCC906EBFB870C1467C3D845A178EB07C11BE8D57E4EDEA7ADEF162923E9521451B871DF6E357DCEEA7F62022106F647DD8A23074AC10AA632C56DC32B34A4A184FACC64E5D1E8FD69269660543EEA2FD584117A3EBCF6268352F0212ABCE7CD28A93C9AF76722FB5A71FF9E5AC4579A2BA32B91818CDCB62C77A6A8EB1F4C34132EB463812B329B6B22108AC36E71F38338AE3A52C632796E45189632B73FDC0BD37A457204757261B7CFC01E06BC767A57A5FA7CFE43794F65398A94B4EF09D6DC2A8691BD0CB018BBE7B66E0C37BAA4723247AF3424BDE22614A9A581A7982E8C2323178BD2D46E6912A2FB2D2531819A180689D7F2C9B5C5AFC2DCF1C7FAEB1927EB79A72EB1203BB0FF17DAAF27D66022195890BBDDA786CF1C36ABFD96BC36FA1D2A5A0CC3D7EEE1A1050CA840209903CB9FF429C7EE9DF9CBC2BAB84CF28FAEF5BB45AE9588970A28B6BD9ADF8DF134C1FAB0DE274B5C7452C4836A573A26A0B4C14B74C6D5046A5000ECDB54C872F2DC494F2DEB88430007C9BE8EC39FFB148F00F7861D8277589AC839AAD30AF7D7A2E0F9EE8217A39C521311E9BD59A71BC6663A7738669D6D3BB28124A80ABDF905DFE2C9539CCF0C8FA39EF84E9633D63BE0C32F3B2AA9FCDC18AC38C3C00924E9D54977BDAE61410F997038BE066DA6C945D8258B7DD133EECBA836A7A6A2907C431C522619D466430E6ACF15030F7FBA4F3D6BB545CAD85678E81898D2DE358CFF3951C8184066B18930DDA867890871AF6F4133B492FC894DBE4AA5F1E44BD361C4560ABBCD3101B4AA4E065FD60308795DDAEBADBB604A3D58776006CD074389AF49A0EF09586410015C7DE4FEFEEBEA6262B23571B93BEE15CDA2BBA60B6CC72A7DC9C80C81C9A25FE3D149C7A8BB2F704BE11177F92E2CEF0BBD12C0766D691CCF093D456AFEA411A8FE5F1C1A44F31017760F0D0CC3B271FB15F56D9F51A594C34FDFF8F8ADC91584ED8D7E1B6DAB27B2BE1BBDC4486FB1C822F23704BB2EF4B521E02E42FDCABF69588B0B9D92AAA73116D26E8E9E48DE94F6267414AC845467597B4C1F2A9A8E1E82C0A1C05955022CDF87386098EAFC5BF1A040716A89BE53A36B143376927028A561BBC07AFAF42494DF5BC0D95170D853DCCCCB22FD36B7947712EB369077D02BF85B0A4F57757ED80B247E521AC640D1B1CE30F93DEBBE2389D364A8B7971A51AFA4F557A8E12FDCF36E6C842D2ABCCE9D8783D0D7A7EB74992EACEEF6C618AC7DED4E457B1A708BE2C82B28A9563F4A088FF7DB146B16B47A900DF49A4F3FA8EDAAFCA09F408B025D04EB673E105E0F55959B7951CF0E999CDF68EA9B32333DBFE0516D272111CBBD9933CA8AD8AA6025E5F9A062D8305344CAFC3CA391BD8DEBDC58F7FDBC041B349900E397609C71E4EA3A9D8407C63E8A6BBEEAEFC92E9C939147920E48E35DAC6D123DA46E4F0838FD732E43FE4EEF6BD68D5AF0C9BA3A0CB28233743B291D4E10054F695DC10A847E661F39C4C133289B07ACA8B544EE3E2EC288CB18C40CD9A8E48A93378FD50E077EFBC21996424B539A397B3D2A6C7DE58112CF55E82E8FF10F75571A15DC248E6B77CBB91D8BF2D53E5C4E9A85C7EB8FB690F74BE029CE1B569EFACFC16872C5008820FC6A7D12AB43E08B4AFF57DE6B43B613DF8480ACA556E29D792C6C81CB1CB54A67245C571A04965267BA0F9CD3FA0950B9A5B393B4A230A41E455267CD396F42285F0E49C5AFA0B53EC7B60C1C317EDA3FAE4B1713A80D4EBAD32FC685C13649C4806D6FD887A24A4F7AE801405EF28F058B37112A680F9E9AD0456314E9F490393CA25775797E4CCF9184FF0C6A237AFFA8DE1B84C420A6183B1D49D6F2AC1E673E7FDE161A8159DCEB00D85F032EE76E3931C459CE935DFE4AD6C6110591EE58496B82A16630E82320B9510880BE4E7294964FC9F66389FE3880283C4250E6E19F195DFEBD2104FC0959E084308BC9CFDC6E5ED1C4B48B4ECAEB4FDE5F215FBED85A6CD4D1C1466E68A4CF21AEF29F77933549A3A6FF7ACD8AB6E6C689F1E8DF0AD8AB289D5C33023DF90B21A26320CE8C1CEB2C099FC1DB58737665855DCD20D587E176483E33EF14C80AA4760F751EE5B28460811E5110FEC3D689AE2A6E91D0A3F1E22623E88571F4DAC895AA428D42634EC142E56D0D57CE68D7949BE13AF234229E546E9D66D5C58E510BF3EAC7B73309BE16DCE6E2280AA80247D9EDEDD20E06295C9876B412B786CF7E5F1073792158131AFA002FE7750A17015A9C2580646A9A0D2A3F0243AF1AB4FEFB3D028504553AF9C5C34D1A4A2FE3B8DD8BF8CEADA82AE63C319BD7981D97155AA2F105D724A8C09310D5C316877062152419A006ABF56AADED74DF0DF325D666C31DF51F194CFEB331E7DAF00410372999D2D05B023B2C3067E6CE4A472FED3B8BE1C15C24DFBF4956A5B670FFCF128E5A23039764BE39CBE55636B83674060B3CCF5EF9A7B7EAB0813ADEE82E271C422FB78A9820007753B1E62BF4CCC074F7796D5B2008FE6542DC0C77ECA3810120ABE9F90BE5934E8EAE365D02B3D2DF4EA4A827E033263B113EEE5823DD3912FB31E3C4B46B274D7115F34CDA793DB6AD2CD8BCAF4B13B832AB605BE42B2877EE2E66B411668EA29A7DBA5BD969B9F1526389B8071D96E7D361B2462CA93748DE4D31746972DAE582AD4F70A188CB40C2E6E418288B6A713ED4B647013B3EC31C9EA6217DE55D016A1977A0B285224129CDC59A9E54F3E5094258F11C0C995F60785614E560764312CD86C6969B3274236EE602EFAE392C015E4C3972D6FA2A47AB48D5C5F6836AFA54F28CCC03BB4DAA0A1DC0DCA3FD3F2B15FB2ADD907D3BF7719D1D9A8284A47C30F32712A8CD440148B8DFDB851FFD25ECA2864150B832F8B5DC3A7C701371785A66285601E96D285FF88947804AA4D88665B3E15760CDE327FBD21393042BAF62FDCE6EC41955E877ECAC331D594ED40547AFED34D410714CE57FCB4F01C8826519ACB85F447306C86BD1BA8189E0621DD09451E8F341AE47E7FCF1FD2DE2AF78E0AFA27A4B6DD51A0710FC1FC4A5998234EDAA1D4CF0786B779F637EE1A72058774C1B4BF5E125DEBB4230645ECF87E3C6FDC91E1D14397FA72686784815D9654839AE8FA43864709EE0F4A336E3C399CA20B2E652E2AB17719F9253F772EB7A9E8838FED4EBCD0F8CD977583BDCEEBBD925676F56AAB0C36F3DD915F6691A30D60D523216FB233CBBEDE7FDFBA827450E595AB51237F9E77058E40F862D3A5A96E4AA3DA74503812EDEFA501E526DB6B4C642222D7F33B06D9CD0023471DF5730CF8E2BEE834D108A25729C1C1484C207ECEB0E4598965EAB5216D4E7C30577A89FB8BEC0B118F4E43093167F77AAA20EF9F4AB7D715CD0E86542A0523BDF0256BCCFB1FA987A6565F808C03C71E6343EF41D2ED4C4FDBBB1AB1D617BBBDB776F07B000922FCBB3718F5FF326A7BBF4BDF148206411E86506FE5CEB8EC0F7AAD1DAE3BB46482F5E85D3B46DDF93F4BA19DF9DFD700C35DC038CF4E499A058995AF06BEE8535631966751A85571271E6877BE6216AFF16AA2B9046F1AB9126E1DCADBF40C4B390D23379D52C80C10CA05079D1F05CA294EAF7E2C66B884DDBB52DC85A45FFABB2BA6EB95869689486DDDE372DCCDFCB408496E647F33575BB99FF1699219D00D2608AEA1A47CF52DD21A3CEB3F043AAEB40EB27F042D276227C09CC8201304C55D254AC228FF309FE8DB74C85430FCF9441EF1B51A1192703B140CE3703E5848477FB0BBC2E82DC38702D4C6A78A41729B7EC86F9890EAD369DE4F25EAD61DB0B5B0ED764EC84FDAB904FAD9DBEDEBBE89F338DF52F7A6FAC8EA1D76001846802B328E8D1F110219BD6BB51214814026BFD6E32627B696C7990F53591CC811A9A09A1154A50585B882DE0B404D7B5846DBDC8C66E4AA0C7B90B08CC96A5CF2352A6592BCA536359C863D639CDA60FD23326619A9014FD878EBFF3E73E4424B045CBD506ED744D3243725EF9491D6165D332FB12985022A71C7DD4E3F942AF5CDF2396F6C346088EAE89535E1B21DA8F7B2E1E12DC8A37738310248808B9973041EF5B9B9204186466AF61609CC856B6B2B33D6F526EF1E4BE4DCAA1E1055F033072B3801B642700249C024414B3217D160513E5A804B3AE8425852CF5FB9F51D2601F9BFF9F5E4512A45ED8F615A6671315590DEC31720387533A4E090646F17244EB571DBD6E6A10890FF19809D935A5E88228D424FF2E54B1A37576C059A756290BAAEA5E36AC977526339CDFF915A763B2CD0657F3A3D385A5D92466A44980AD8A1B4E1593DC177E2447ADB53B1EAE15A91BD6703E46F01AE91D6C316C1DB983688576B3B2BAB280FF196D5BF545755097249C517E1271202E3856475A3C95324F827961DD7A827709DA2924B21949B6BF032675D80FD120180F6850BFC385E72399F840B80E5525EE70B89E1C524D580390D487D0CD31AF3CA5691067BDBE8E2E91E0099F59700CDFCFDF8B3ACBEBCB61DB23A28E80C3E463D9E53328C37EF8FF0D4FCBD287932C8197DF57EEBC9DDB29E2046C7FC14970F9F37CED37D8BB0958155192C8595E2A9369944DAF58FCC1D9E1987DC4FA77ACB256A65DA78B733178FED14DA3E3E41DB808849132EB05E48BCA03ED499A314C857FF7C7C1FC8BD2478635396BD7F252ED984C102E23F55450F57ADC7EAC50A57B78BF4F988565A172E878638ADB1D992703D0BB742605EB76E3C85319F567D71B9F2E40251EEB936B323DE98496229B1F8A996AE4F6C0C2FBB3B2244F3BC57EB3FD067F535102A7F21431EF8C75A1E9723B1FBB602EB4B92BE5FC8DE70183659A45A31EDDC46643ED1287A69DC876634231D3AF95F2D02FC9C0C7BBBB12319CBDBFDF6CBF94E47A05204AB14A490C6FBABCF329B5B0EFD8C2FA28845764510624398BFDED1B250003FBA61A67D2127550FF07A6FAE2CB5B8FEB23D289FA235BB4959F8845B25405A75A30E7D05D7BDEB721BFD4A998DAA6F1A54712901551E30D618DC80FADF7CB7863EADB7EEE708F1050AB0510A956C3C7706756B6CEAF611F02656C3CACBFD9E4507AC2B4B78D0EB0BF757496C84C7260CA972F0F45A393A89AC2BD70F15E629473D61FFA29BA18A468D8D4B1F72DDFF99608AC9E6A6D6A9231F24388991E80FBE6A9269AD6D31182E79235A0E33CFEE9E3526FC068A9253789407AF8CAECE14BC337FCE02333B63224A61E913367CB36641A74E2DB2892C4E939A50127DBEFED7456F7E61454FA5016A6B75E6133B0417C2860B2F640ED8EE62D5100EA172BBF8FB02E2022D29DF33C25654C96F8FB2305B72A92105E027444EE0F27769946A67E58D9A26AD01483FCA4BCDA4C00A8119E355CE733474349DC8311AE9853A064931FD68D598B02E0724A13FF63D88416FD5D03A962B5D8F79586E696C484D7F287773851831EBF33B0158F51C89C493C116157D20DE66F3990061135F5CBC46862BCFDA5EB0322793BD6AE188698A2E1DEDDF71702B6CB01EC2BDF85680FB2C4002173D1E1581890C14672C1F232E8A1332655108F24F78E53638EFECA3DAD18D19FBB1E91C6AA4761017DB37FA76F70BBBC4C8E8015384DC9E9EF14C6AE60DE55974D448DB8C36B030DD55DF5EC6F6C56DA8CB9BBAACF6784628B669913A7B291632730C11710D7E181401FB535FE8A9A0B81578CE54123A6C3897496375CD7C60BB4E05AD16BDD4CB8F652448E3020EDF4D51FF5EBB9FA93A740AE779419002994348358CD7827A63BABCD7C4501CF8ACD77A2200059DFF5B180AFFBF3CE52133C7451CD108AF9CC8FA32428AE9ABC55D89E1931E6607160BF96015901DC097B56299F9F358DBBE921FBD7D0DB43C9C5BF97468813C0AC632D35C858D8384C32EBDEE933C9037EC36D2322F54FB0D3CF305801DE42B4EBCB5F83F3D3FCC1AF56910B7A547F50F851079B6D0D262676145C27DB362AF383037FFAD5E3B26BD2095143B361F82425734842E2153C5F428D89DBA45EF59BD9DF1FE1BA941F172A685F08C18B76B6A8FDC86EED2867A57AF48E00467993864EF70D80CE5550C5EDF085E94435ECA89F6513D23A56235739534C777C17BC6DC7BF6E04BDAA9B0C94C4D7AF1368C6B4B9D3C97D25A26B05703EBC4D1F8869C5DDA359D189F4A3E548D53731FB429F3536880CAD9FE13F70DB0A080B949C3636611CBFF0F644ABA8B56D2C6E988B3392A7452A8C8E52F2288560331A78F4CF021D2A41B2ECB6CB7A566070A06E759017D62CF78A429913370E6498BCDC038C1D3079A0A3E6FD4FDCC851DCBEA9EB3A7D266479F75C40452A282CB406E9A2581372BE2FFBAF6E7F3359EAA594631CEF876FD62DEFBB3B816EC98A1F72B55F6023B572A51F320CD7ABF489AA905CE2274729C0EE0F677A04D7449A489BD02704CA65BCD8B753B689CB90C87C73FB4A45219DCD817E9AB584EFF049EA711CD3E24CE41423FEE6F258A65CA8EC3A00D45371EC5B846CF1549CB5CA4FF14B696140D3483DDC7801BFE6CFEFB9189B5C7AC3DB9C0709F630D80F361442BBD22636B00530EEF21D96D4A12CCF85E0124939B025CF35A0A5F1B4C2FA5B5DFCB3772CBFEC1F0C1C824B5CC22BA8FB2DC92164FCBC60333EBF920A14599F1E8EFD4E8CB0257134947331D820595BF5630EDF00814C32994039B47E8784C29D0D1C5B5D219A9F55FC14CC18DACBE6A79698A8073276A424BA9A6606DFF369CCF5F9F4AEC9605F6E44807507B36A4918FDAC448E3134106683EBA80A2D97E12EC2BC1EBBCBADBDC631CE7D61BB9DDF143C3EEA4E36EAAEAFC001849812A7CDE3EBC194A51EA2A9A2AA15A0A4F29C2FFD8B2CB4ADEE99B59553BB2398273C04329A5C884989D417C131D68E9B505594C9B9CF1C13AABF05093A9E4224D71B54C6F61F1255E25FF7527E47768FBD51523F42915133E02CD7E404147E7AAE95BE651BFBBD65E29130D0CA31C2AD90A7D104DEF06F51CA5FE107C115C130B8823C423423608DEE00E0C2E6C202B60C5D20BCC9CDC18767D89E5E7857BABC9531C21B08436AC14C5B34EB986E5521369BC3D9B1FCD07C99240FD0DA306C69303B310B8F78D2BF97D6E9E88843234D73214431F6BAEFE5109AFDA22C4C348A469370BBF9B0A81CF27ED919A0A48DA3E9061113C56659F7561175A608B7FB37A76EB9E5ABA5F4A6B485EA5D097482A28F4EF7DE785D31DDEBFE41DFF7C51CA2B64A0D2A7A70269FDE399FF7628202289EA97141F995FF51DB5AF7C9C5CA76F0AFB4981D021FEA9EE6A49ECCCD18AF290B6C231265247DECE33B3E165FDE4FCF82EA84A4A8AE3FA90972D96DB68550AEF21FCE82E0FC75FCDE33C2B6F659A873AF09067D94B068DCEEDCA4D392BE5077587785CB6A1F1947841F483BE5080E85B49F1073D4778A39239266DB2A24B57B5F51B1F021D05C634D66DAD081D1668EF0520424581E5E0B62ED085D005F169950F971E1493A49A60A595342AACBA236EB16D5EF94E749889E50656D98F94EEF205445AC027387AE1363696185E24749EB67518B89057899548BABE29F3487D273C54EE2BE6254C7F3ED3D3B22FA3FC94791A7BC7C499A391179368D9B1F0DDC325F55022F5AB7B91142E2880BAC761D154C11F2C58F4A42E8B3DBCFD44777F08A74676DFB7039F24C9A4C4620726FE12849C9D3C15293A3DF7F4870DCCF569D238D97CE04FEC0D292181D145EA0EFA727DBB7BADDCC60357762D262DD7D7A3BB0189E05BE490018ABBB61B154F94A4FA81985E774019CCCE4B8ECE9858C0C2BDFFD7923B3354A2144ACCC5C9DA34E50299EBF68E9BA0A269760386E5531F8964F8024ACC99E7AC3F40BFA9D94ECA1B14A1B173A06867100C57883FE7333C079C5871A8A7603395A87387EFB92A77C5812EF548CBC3B9178E874E45DFA8796BA6FECB5D81687EDC0AD5F804FF36A9CDDC58A5F991A2A0BA999F86E663715CC79A439DEC44C394ECF1F14801D8F9F292A648D29D2E910032F224ECE51D0708E4ED6D3E65FC788A2C1D286750F4B6D768CBF1B6EDE8524C2A7457A82404A491DB5EC868E6B95B02167A0C4E785290156943FA091F28234C4CAAB586F8095895FD21582E0356BC15EC7CEE893E70902CE4D01217474E0226FFF30CB78597726C74B95732E44D03A626F1D1DBA7785F55859B71C2DAFCF71D99EB99FFEF4877518C579D2623FF6EB326B8D6C7674826984CCAF98CE41724183952EAD69F05F44750F3B857EA01475555FD25A828BE1DBEF5E8B1C1237779E9E69D35E7BA9ADA124CBE710490280B64B2DC5EA2C41D6644012A18B369E3CA2FD93A254C493506C54FA6CB4DFE24E0B5035230F2BDE6FF21101164F322B4B066ECBCA3BB4F3C476B41BD02D8948E555AF74EA13228F07A1BEDBF95FA7E16F2BDC5D178E74FE5A1A08DD8032BC8D741905EDAE449212146878D8FA15AB037E41C36D21B0064D65BEBB74A18F4370C80DB44EE93C2AB06DCC6C6FE7DEA83F270C9FB52CE00BDBF546348F0E6285A35A32A47512823DD6E22FB7949071D4B58B46241544AB97B0F6023C70AFCFF0C7541B4B9E1FC6B3C3C55500251665D964871B9D1247B3A9728AE02FF47368053B1DE928B6A8D01ED3BCB18A3180EFC9700871F480959137CA1480C3640547497ED7CDB4912ADE1385F9F35B6D27BE64E362BD71E0981BE952B00AA20DC57465DA89B87BBE07F27454FB24B3B86766F95A5A5B4EAECA2620C3BF87C0654E6561398F27F96178EB1062E42F6E6AE0A669FC6C7170F217C850E822B4E70C9033A375BBCF6D62D11B3DAF7DA976D4A9D955B924E7F0A19CE77A53EDD424ADFDEE8558F06887E82A936193AD5E508938DD3FBFE02DFEBD98C2272DEAAD8AD3B0FC86C3637A6CE694DD95E4FD55F433E151D35DD4C930177CA66322001110B9BD0B89A096C8C3A3431C100E39E3D2E65504A770F4EB2F19E9D8FCCAF15B8E58DFB52A0B88406A48A036193F3EA9F8ED2322FC69CEAEB9E2DD6AC627DCF4CB109EA05AB5DCEA5F92902F3E7BD457C240C958FCA7B17F2EDA1248961C9C827E99BE0A3D60B3E27E42B1FF696DD58E48C7B832D8FE95529B9C8F075E67294C1B1060EC6736DB73FEF7407B320D850B049D80F9F4D536361038C4BAEAD92F24C10051089B11B578F56E6C24FAB973C5D1B4A2F937E4A402FFCC45267F4A3F4CF4EED3DFF530838A570000F7E523D1B97FF798A3C6E12F9704126A9B6FDF606031E4D8E1AE39A470FE929124FC95961B85A5A6E10A79CBA60F54F37D4DCCB13FA3B0A3A1729184C59036428532E3DDB3F7B8D373DC08842EBC2ABBFDEB5B73B2F9B7E83C81D5D0EB3037A32AC0E5B6CDCC7CD84B9289BE16106D1D019D47209AFD8DA78EFA0F9108377C187B170CD53F366B17899EB41903FA1627AA245C07EEA5D6DA78039B3C4C1D70DD28870A40EE3A048D8209C4088A0847D6859513E01E0F4172C383D64F0B307D721C01495070336A753A75E1CA433FA973BB131E558FACC298C0A6E934E9F717E19EBCEA11EDF3736D4EAF593A8E5AC8EDFFE4D2B17B613E024B41AAD19BC0A27A1E9BE9D25344D4350596B9B0A48AA014191511B26E61A9753D8A38C4E3BECAC93E67CAB5696888C06B9099E9AE856486436FDD1AF1C193057AD1DFBBB14AF772F7D9B00F37A6DC9E805A8DFD9D53A161885E5C2C2A6DED0C54D00A8E0704877DA2F1EB6F6D8EB93B5604A4E2545D454C3D4F0D606AC192E170D44E85E2ADC91E54F56906909024DEDB6F9050BF3D3928D9AE23D9C42576AE4DAD1336F47519EDE436C3B1829CD2C5A0AF63476C7928B32F5E51826D844A1DF765C5578F9C2E5F79024BFDA96FB3199A3C7B47D3755FAF376761B4E9C6674915677A62A7AFD4FCB27B45F8E6DDDD08980B7DBE1131E6E2425C5ADBEE8474E93A8A2D4E495B195A6B83F2CF6472A36E690928362B9A1FA994A9FEB7BCBA7FDCB771F59FB434ED289CCEABDAFAE29113389EB98D6F17E5508D5976E11BC8A1E93AF9F7B1C81686265930B4D334568E3F29E1C2F58A62572A610016C1C1C1C9E1D0EB3FEB2B3A210C59EB3980C44BC656FA7C5E05A4472D4255B40B8A1604FE39D8B5026A976310648D5C84CEBC87A8BF6545DC843A3A0B64DC4CCAF2D2203122DDD75BA42E096844899A35A899FDFD72C26E3392EA03351DC78BB9F62F51D913F8008DB00969C64003773FB2014FAF97E794A45792495BD52D7BE7ACA47FF2BF570CF88303377092B5B6BFF3B01D38A53E8A68B0D81FC2D1D375EB27C7AEEDD70679E8DDBA6DE656442ED951478FB96A979B4A9091F344EF39AF23DAA886C6FBAA8611C61686332C630690109E2869D18EE7A2C21B22921B9E3DE40BF063E370FF64E7AFE160B7EBFC4AF6AEDA043042552F5F36C2CABD339FE1442242EAD931D1B83968D1A31A7E32A0838401DBB9C1034D56ADCAF5942462EF63440FD70F91520137A50372D0D125A6285F7D715FD9225D03A109E1FC5EB547303CD7708F88FEED2814607171930436B249924714E8D8E024C24B3C0C9E40127DECE1AD966C3F9DF01793864615F291B73F73D27B624ACBEAD3D371B8D4FDA823C0A1B9E8AB6C44A3610768CC17E3B899CEDDB44B746319EC50BA7E006EA0F3C09E9D67EF8A20154B2F93EC265B800503BC72831800CE0C9FB6CCADC8327A840F69DDF29BE212BEFE4AB1810026FF786D9D3A88B29745EB61131FB47B385F83CA211B4A2BC0449F7ECE43B2DDAC94C10955FF2E078AF573FFA7349907571AF501FA6A2FCF24E4B5676F8213475351C0398748FBD60A5EE8A1128C0998E57D076A201453EA7C70B1F171E7D084F444311C9829CAD03E0C2330D7E8D39DB6B7901C30787FF123CFBAD4E974A5F6412FB1BC927FD65CAD1F3AA4ED52E2D84AF6257EF311222467DE179E89438524116D8E0A4A94C19A4D66D0AE0FC535D69C4953C2E43136AC07D6A5774D59DEF1471B4097146C2124DF83D36678FBD7BEA6E258D826645DD88AC9A7EA5E05FB49F2CB29EA9081323FFB2A00F3915D1F36675BA1C9AAA3B166D9FB2529150D3573E502668E33DFA5BE95AA6C2F1F106D69218839BA590406B4FE4A03C4B16E29E6BC31335234BCA55D34955880B702F08203198EB7BAE381B231FAFE513F24C8BA9E58798F35465C2679DD5BA8B16EEDAFB04E5A807B9BE6EE4B3AD77609D2B9E0985BB23397BBDE08F4D0B21494A3129857E37D13862C1FF77A57AC663C206A92F8358E6C05FDE1A9D68131BC04B76F6865E8DF5C48F9424CD9AB6FEFB3B49BA8D32C923CDB8602C5367AA9ECAE48AEE6A276CF25CED1196222AA470CB4FC8A0B7D2C785EB45D232E06453B77DB76F60E5F7BAA0FAE80467EC8C656FC27FFDE8BFAADD2368B41AFF69460495923942ACF85C09EF01BCED0076960E5CDB1D36061933C1B6037548D27932CDF969FD5A910D5564F3A6BAF896A2A69F40EDA76E813AA261530F686042235A39A76081F58D952662894E6E648BA72098D840235EC4A2B963F8E74B52F2D0088DACA7EDF48115618DBBABC698C04AAAC0632475BEE65BB26A4EAA08F0209B75EB259B826724F580209F8B991808411F823819CC5F42A9FC1F0CEDBDC54C046EB1D1658FFF7252908B09F8C1D82E5F6D605F0B17B25506FAF91D4B3D4EBCB7A705E5BCB2A6FB409ABE4B1B0B47630F1AB0B40A3455181678573F82A7C139F072659D80671961D614D9F7DA72914BD5D6F417EBC152595972FDFAE876176923CF1F2F745A6FC27E134CEBC2D9AD5CC733F619C1B296026B7C4717D2086D91765D83AB76605050B810C542819BBB7CD87EA2305AB4A567B2C500D9913B7C6046F748DEECFE3C3AF829EF97E03799EA50F7C9EB38990F0D466498C091C3ABAA18453B173F0AA3A486DFAFEEE68E7998EA30E5C1349F2A54AE753963CEF58332A114F964B83B4E446A44147B11FFC60DA25B5FA705F34725B1388B17E99018236BD646DC714F8B7CD3BF2648063B2D3FB713AB94D82ED81D571D5BB4D3E5F2F067E2F2C90E8B6857E6A651B8EEBE597534C0A6FEE9CE6AD10A80D2DFD160D7DE7A20154F62AFD7C3187D51D09DA39A958432CDCCBD83FCE19131E65A30DE99DB796D93D0944223D960BA233798323D368DDBD407D51B80350976951AE0E50CF409279301939624C741D20D5CDBF4BC3ABC8723E267BE75707024F6398CC6D32A7BCD0989555E0EE49C1A2354D1E961CA9910A5169ADFA71D56745181E0CF13469D8F3C6020637B8118ED8421A680FD4D515DF6B31C39ACFA36B601027AFBC861493D34ACEACFB501DF9A311B7EB9D38D7107E6B5ECBE74FD35CC8BC8319DF9F1948653C94C868DC24AB8D7E650D8F70A3D1D878558AC9BFA50D425604037F3DA323192654F1296C8320AF934AF60DACAD7F9630EA4ED0A635678213F6D09D73A2544C779596990DA42079C23581E22F541E6A3B6D3FA383597A8BDD7CA42930816D74FE8B12F92CBB9303CA5FA12BF5FE954FA7B53E0D88B79BE263B4B55B42A7672F5C4F7E6E2DB4C02AFD6034B7371E01215CED3F73AB8E3419D7447781AE5DEB4F4547C5549E9B0AD59940C162790650344E5ACAB33A187A58E29C9032963F088C044ABE73A855FF1FC93AB8DC258E419777311B7997EA95D32CF1F0140CAB9E6707E73E4FE575E0752816122C39B8D12F34ED6771EAEE192D830797DBE97A0BFD00E39CA382D44F080BB4F8FF6FAAFF2A82744C6E14D3036E00EC2ED5C9D184ECCA300030D7BD77B27DAA56990B45E9AA5F9523D563D53E854A47629A4183E85CA1995BB374EE5601BDBCE5C7407999D28FF0F1B3EC7A463D3C941C57B7EB71E6262DA3A7136627814EA6D28C8D16E91680B0D961AAFACE2CA4099F986CD45A2AB387E39497B13678447480514B4008F0FA3B95AD7D2B4751C680F0C7D3651F9621E1355CEC76F10468ED33DE4C7D7D68B786B7F0006C604BCF893739FFE6AE56AD5AAD07D5BE76DE1CD581B10EDFEC9DF65AF925C4C1289837BE1854A62FCCEECCC4E2AB47B4864C467F5E4C276047501EABE444E051DEA933863E0FCB2356CC0C3817BA59B2E0AD78BBFEF4C3E4C35343331CD81C7F4C428B0418DFA4D6FF655BC50AF49C9A5E8A67BC265A3F30800B93E42C0E66F117E6C59C85BA5E273234EC7212C7B7AC3D87FC0E0EC5FBAE6654461F24BBDF9A063FD0E3F98741C5622ACC8BC008EB0E3F3D57680F12E52FB94CD957EFDD49BF512D9131757161A73DD9650E3561FB31509A908D3EA8DBD1C3AA95AC32E6960E0D17A218A25784332A88E85303DEBE117BEFEDF46882995AEBD704AEAE032668AEC6B8E5BD28D3F110C9F8C1DCA8FACFDC1188A073037796555DC4FAA26ACB9F51B545D32C224424BAC3DAB20D3C08D784E9FEDB47547C25671C269A62163742B55AB4CF9406D2C5047F92C76356F0B90221E019B31890C0B8FCFD04E6B5D06114B967D1358797238D5B14D824C8F0BD7B8BD0D85AAA53F2DE2946EB0CA09DEBB6CB61D91D27C8907B90C89E20C01F681D33BF0DC70B6C79F19E4DB64793505A0E055C33D1E07B7F5AE09F7EFF0C8CEBE80C84373804A48A945CA406D3A1B17CA787DA265C1D8FC735CB098C1AB37A0452F1A287B8E19E3A57E59EF8F2E6CCE2F0AA7772955977982B1F6880AE8717520753636591BA36E351310E98ABB77E26E2CA5BF267935FC38DE173CA20C3A964B56924A5E82A9E36D005EDE6680D543C021C7A9F53DB69BFA3201880B7797E90D31011AFA17BAE836505F5B337C23A07D6AF167258C314C3001291DD9FC565F6B7FB74D99C1B42B496422B3D3E1A564769C2306E40264641EC14724301795B4D54F5FF8D6C4AB3645B56C1D0FFE9B977FC5017E2A53392E7458BAA308C343AAFF5B46B808BDA1FE5C284299A9EEEFC755132F9D3B475E2FCD6BA84917C601B5E8340B5A68148A33563E40AC5A1E49BD8D5FA77BEB6B99E6F4F68A10ECA112475531E7C1942AB9504B8F76EA7BCCAE4A19EF859FD6B6753F07BDD9A19421A2A0B8F27643B2311FAD7978F4366C41BD9F609486FC6EC7CE833A00D7A48AD816412BD201F40C93D136ABB8E329DDB816D1F59A1F3124D6314C64C9B640E4D5BB201CDB4490A65C73228E78055AD6632D81709AA443EBF29A4607A504DD5CBC0D271FE595677B8E6A5E29E23D171D50B878D0D3F9416657E3997D077677B87399A6D1936EA0E629454DE594F7693888C9ADB907F83EC6818D6FC0019B70077BF1B0E3C2CB16A263BE145EA8129FED6BD98F3D9120BAD28379EC8E36DEC69C59B37BD6C2B65D172C70C69C23E29A6143121AEB9E6A9AB46C3DBC3979BC876F4357F6BAA5A0CB33C3AFF1654FE547D5D760E8CE095A9B324E15CEC1596BB7E0D56433D8908EA69925A5CCDCF01702811AD1103F237D36C5F12A3CD938A61EF76A3387340499E4EF1855F892F57AC39AB419F1A397CD43FE7F4C5E609ADF3A2A8E401FFAC870985826CA0DE211996A3549A203B798A5162E98FFC8B5CC2CFA68D618AE80D399D8DFE0FE4AA81ED9B586EA89F646D5C0AA8B107506C7F86879419D0F717E8F70C5A9DC2C3F122CB52F3B691087EF5971C27086512F1890494ABA38B1619969F8846B8876B95C56142F5B171502FA44ACD0299E82FC94EBCD4CDDBE1F5DF978871128F79C1758BB512D5C3BDE59A89786CF4E4716F0515F45A1CA31B06B23E4883F99EE0488848EB0A60FA14AABBD41EC5421D0C162590FEFFEBB4DD0300221471DE8DC0C87DB3F1D54DB11744F8A7115DCA0595F6CD99B74A6FB10C0D14E430F8B40E3E7105C89B2C8F12B37A8879AD9BEAD49AFA1BD56569713CCDA3FB634C3011D51A8DCF84437251A7B19EB61FCE5DF6E2278784722BABE384BA5424646FA23F6D10CE23DC5E0D8D512E7C5C094B1627D6285B57EDF38A7DB1BD57B72044CD7AAC98501F29507EA4E0183E8A40D2E5117E47BB5D18D01A3732DE4C821DFE86521CBEA7DB29BE1148BD544ECC681689BCD1B41EAF755310B7659342F8EE11CB41550CC30E566E192796B66C1A83C0B28BACCFA6C393043A0A2CB89712BC1CCB174DE58E66896AF39C1CEED1E05B0435F8CF6FD920D100F51584FE24879987399481DBF27DDB6286B6353919E552E669290CE02AB4CD5113D7F484229F379C7332767EC69E4336439B05DE1C1E3563DD303A4F580BFF20A40E49CB0822F715ED0221EBCDB5DBAD751124B1715E82F37488265135B6C8BBCF4F801ECC4D3525FF189493AD4EFF0C042B070C4CA8FB1FDF43D79F06A6E4E3D35D7B07D4B728D5DC54EEDACBBBA1EDDCDC07ADF7DFCFEF835E44DF1FF66DAF2A7BAEBE218AC3B15E183044D6A8A89B3C101B40BED97ED5DF93BBC1B84931D56B8C822A6D058AC74CFA4C85D8B456698E82D5B7574C17B041E5F4BEED09F75012355CBC322B822C63F10C18A8F279E9A0E18E1FEF183D23E13894E31F6D046956FE8A647558228F6D4D6910151EC03937876B6ED7A078D33DAEB3F2239353BB8181E62B286BBC41588DE10F478A5CE5B508F205A41820356767B0A0ED4B8DB9EFE348362E9A90D6C30218B295B338B51C09239D02FC8A1E7DAAAB60AC37F5E67CFC88EEF69567B5C81A03B449F4ED38B9D295A36AA3503173F6F6F66D93CE72D753076040FACDEADDCEDB50E907D20E826E6E8A0D30C20C74B2DF204EA784BAE9F618CAE33A3C937729DF9CB10BA2A4C33E0182A37200C0CC509729D828B8A2A20F283AC4F9306596684EA3FB5492A4C9F2DB459E7531C9F9C0950E7D9E93B3EE5912AE7E39AC8F4EC14B18F24E325003F477E347C5AC1B67CDB11AF3BBBBCD0AC3703024B5767AA67A208254F798684BFD1D3EACD757EEC77254950A146620400DB95E694574F739A991EBA771EBBDFF1056BB39A77DBE0636A032E17141332F951C57C6C90F348F165E3ABDD60D429D5D6BEC7E3E3463806F819EB2D212B3528A5EDE51F235AD100A35E890955F8A1DC51FDCB53EABCA2540997DD054C1F5B29462995B876B44D085904E55E1B838BEF600A992EB49CE078DF75AF3D0F137685AC0D07F0BE1EB87B63A41E74DDE869C8A683BDE60AF5D77FF18F7137495BCEFD0ED28F62F9C3E25D332B5F861D999FCDC0B4851A984A4DBB53401FD40351ADA4335C702BCC8D900C737507B990BDDBE91D201E3A0946DC968D43FD10D04B0B76667FF5B4291C2124B0124C6B710A6D1BCFAEB016B9DEEB0F7A4FE044CA4EA0CCD84B7682617C3A545071EC295B0663B3F577D562DE1D9DD80DE6A1EFD6D5991EB5246F1597B86D0E9A90CF6DB0EB2B8E7BAE9431E567F01AA98502C773742246467ABF911A91A51F6C1B9E0C3233DC1A37D17DB91A5F0F661B0EB5886964456C7818601BD0Cpx != 0!retdi!=0Unknown exception.Throw in function Dynamic exception type: std::exception::what: (unknown)0.0.6.git--Initializing GNSS-SDR v ... Please wait.Logging will be done at Could not create the Logging with be done at Total GNSS-SDR run time [seconds]GNSS-SDR program ended.Boost exception: STD exception: Unexpected catchThe path 0011100000001010110110010boost::condition_variable::condition_variable()boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)boost::mutex::~mutex()boost::condition_variable::~condition_variable()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]const char* boost::exception_detail::get_diagnostic_information(const boost::exception&, const char*)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?    v bH= :72' tS!2!' !!!lRG B7 4' & ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210i[yN5boost16exception_detail20error_info_containerEi0\yN5boost9exceptionEi`\yN5boost16exception_detail10clone_baseEi\yN5boost6detail15sp_counted_baseEp]y[yN5boost16exception_detail25error_info_container_implEPf]y \yl(N5boost16exception_detail10bad_alloc_EPf^y \yl(N5boost16exception_detail14bad_exception_EN5boost6system12system_errorEp0^y@p^yP^yN5boost16thread_exceptionEp^yp^yN5boost21thread_resource_errorEPf@_y@]yP\yN5boost16exception_detail10clone_implINS0_10bad_alloc_EEEPf_y]yP\yN5boost16exception_detail10clone_implINS0_14bad_exception_EEEPf@`y^y \y(N5boost16exception_detail19error_info_injectorINS_21thread_resource_errorEEEPfay`yP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_21thread_resource_errorEEEEEpay\yN5boost6detail17sp_counted_impl_pINS_16exception_detail10clone_implINS2_10bad_alloc_EEEEEpby\yN5boost6detail17sp_counted_impl_pINS_16exception_detail10clone_implINS2_14bad_exception_EEEEE \yAAP\yAA\ydN0jNNdN`tNN@]yuNwN@]yvNwNpmA]yuNwN]yuNxN{AP^ylNhNpgNp^ylN0iNpgN^ygNiNpgNdyHey0_yvNxNPNoN_ywNyNpmA_yNoNwN yNeyfy0_y wN0yNN`nN_y`wNpyN{A_y@NoNpwNyN`y vNyNpgN`yvN zNfyHgyP`y xN{NpgN@N@mN`yxN{N`ypNPnNxN{N`ay0dNdNzNcN`dNpdNay dNdN0zNcN@dNPdN.Abad lexical cast: source type value could not be interpreted as target/usr/include/boost/thread/pthread/pthread_mutex_scoped_lock.hpp/usr/include/boost/thread/pthread/condition_variable.hppQuit keystroke order received, stopping GNSS-SDR !!/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/control_thread.ccUnable to set control queue while flowgraph is runningReading control messages from queuevector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)Processed all control messages/usr/share/gnss-sdr/conf/default.confFile containing the configuration parametersboost thread: trying joining itselfStopping GNSS-SDR, please wait!boost: mutex unlock failed in pthread_mutex_unlockboost unique_lock has no mutexboost unique_lock doesn't own the mutexboost unique_lock owns already the mutexboost: mutex lock failed in pthread_mutex_lock/usr/include/boost/thread/pthread/thread_data.hppboost::condition_variable::wait failed in pthread_cond_waitNew UTC MODEL record has arrived with A0=Not updating the existing utc modelAcquisition assistance record has arrived from SAT ID Acquisition assistance record updatedNew acq assist record insertedNew ref location record has arrived with lat=New ref time record has arrived with TOW=Not updating the existing ref timeGalileo Ephemeris record has arrived from SAT ID Galileo Ephemeris record in global map updated -- GALILEO Week Number =Galileo Ephemeris record updated in global map-- IOD_ephemeris =Not updating the existing Galileo ephemeris, IOD is not changingGalileo New Ephemeris record inserted in global map with TOW =New galileo_almanac record has arrived IONO record updated in global map--new GALILEO UTC-IONO Week NumberIONO record updated in global map--new GALILEO UTC-IONO time of WeekNot updating the existing Iono parameters in global map, Iono timestamp is not changingNew IONO record inserted in global mapUTC record updated --new GALILEO UTC Week Number =UTC record updated --new GALILEO UTC time of Week =Not updating the existing UTC in global map, timestamp is not changingNew UTC record inserted in global mapGNSS-SDR.SUPL_gps_ephemeris_xmlGNSS-SDR.SUPL_gps_utc_model.xmlGNSS-SDR.SUPL_gps_ref_time_xmlGNSS-SDR.SUPL_gps_ref_location_xmlSUPL: Try read GPS ephemeris from XML file SUPL: Read XML Ephemeris for GPS SV ERROR: SUPL client error reading XMLSUPL: couldn't read UTC model XMLSUPL: couldn't read IONO model XMLSUPL: couldn't read Ref Time XMLSUPL: couldn't read Ref Location XMLEphemeris record updated (GPS week=Ephemeris record updated (Toe=Not updating the existing ephemerisNew Ephemeris record inserted with Toe=SUPL: Try to save GPS ephemeris to XML file SUPL: Successfully saved ephemeris XML fileSUPL: Error while trying to save ephemeris XML file. Maybe an empty map?SUPL: Successfully saved UTC Model XML fileSUPL: Error while trying to save utc XML fileSUPL: Successfully saved IONO Model XML fileSUPL: Error while trying to save iono XML fileSUPL: Successfully saved Ref Time XML fileSUPL: Error while trying to save ref time XML fileSUPL: Successfully saved Ref Location XML fileSUPL: Error while trying to save ref location XML fileSUPL RRLP GPS assistance enabled!GNSS-SDR.SUPL_gps_ephemeris_serverGNSS-SDR.SUPL_gps_acquisition_serverGNSS-SDR.SUPL_gps_ephemeris_portGNSS-SDR.SUPL_gps_acquisition_portGNSS-SDR.SUPL_read_gps_assistance_xmlSUPL: Try to read GPS ephemeris from SUPL server..SUPL: Received Ephemeris for GPS SV SUPL: XML Ephemeris file createdSUPL: Failed to create XML Ephemeris fileERROR: SUPL client for Ephemeris returned Please check internet connection and SUPL server configurationTrying to read ephemeris from XML fileERROR: Could not read Ephemeris file: Disabling SUPL assistance..SUPL: Try read Almanac, Iono, Utc Model, Ref Time and Ref Location from SUPL server...SUPL: Received Almanac for GPS SV SUPL: Try read Acquisition assistance from SUPL server..ERROR: SUPL client for Almanac returned SUPL: Received Acquisition assistance for GPS SV SUPL: Received Ref Location (Acquisition Assistance)SUPL: Received Ref Time (Acquisition Assistance)ERROR: SUPL client for Acquisition assistance returned !pthread_mutex_unlock(m)!pthread_cond_signal(&cond)Received action STOPUnrecognized action.stringconfig_fileboost::thread_resource_errorFlowgraph connectedUnable to connect flowgraphFlowgraph startedUnable to start flowgraphFlowgraph stopped!pthread_mutex_lock(m)New IONO record has arrived with Doppler [Hz] IOD_ephemeris OLD: satellite: , GALILEO Week Number = and Ephemeris IOD = Iono record has arrivedUTC record has arrivedGNSS-SDR.SUPL_gps_iono_xmlDisabling SUPL assistance...GNSS-SDR.SUPL_gps_enabledSUPL: Read XML UTC modelSUPL: Read XML IONO modelSUPL: Read XML Ref TimeSUPL: Read XML Ref Location (Block and GPS Week=supl.nokia.comsupl.google.comGNSS-SDR.SUPL_MCCGNSS-SDR.SUPL_MNS0x59e20x31b0GNSS-SDR.SUPL_LACGNSS-SDR.SUPL_CISUPL: Received GPS IonoSUPL: Received GPS UTC ModelDisabling SUPL assistance.../gps_ephemeris.xml./gps_utc_model.xml./gps_iono.xml./gps_ref_time.xml./gps_ref_location.xmlboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]void boost::condition_variable::notify_one()boost::condition_variable::condition_variable()boost::mutex::~mutex()boost::condition_variable::~condition_variable()boost::detail::interruption_checker::~interruption_checker()boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210i`ySt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EEpy@ySt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EEp yP^yN5boost15condition_errorEp`yp^yN5boost10lock_errorEiyN5boost18thread_interruptedEpЌypnN5boost16bad_lexical_castEPf@y@y \y(N5boost16exception_detail19error_info_injectorINS_10lock_errorEEEPfyyP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEEEPfyy \y(N5boost16exception_detail19error_info_injectorINS_15condition_errorEEEPfy`yP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15condition_errorEEEEEiySsp@yqN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv13ControlThreadEENS2_5list1INS2_5valueIPS6_EEEEEEEEPfyy \yN5boost16exception_detail19error_info_injectorINS_16bad_lexical_castEEEPfyyP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_16bad_lexical_castEEEEEi0ySt19_Sp_make_shared_tagpyySt23_Sp_counted_ptr_inplaceI17FileConfigurationSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEpy\yN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv13ControlThreadEENS3_5list1INS3_5valueIPS7_EEEEEEEEEEpyySt23_Sp_counted_ptr_inplaceI13GNSSFlowgraphSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEp@yySt23_Sp_counted_ptr_inplaceI21ControlMessageFactorySaIS0_ELN9__gnu_cxx12_Lock_policyE2EEywOpxOpgN@yxOxOpgNyvOvOtOy@~OPOpgNy~OOyyPyOOpgNpOp{Oy0OOyO|O@OO`y~OOpgN`ypOpOXyȗyP yOOpgN0OPzO ypOO y`O`{OOOypvOvOuO@Oy~OOtOy0~OЀOؘyHy@`yOOtO0OpyO`yOO`y O@zOOЁOPyuOvOuO`vOPwOy uOvOpuOcNuOuOyPuO vO`uOPvOwO y0uO0vO@uO@vOvO/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/control_message_factory.cc multiple of control message size Ignoring this queue message to prevent unexpected results.Queue message has size , which is nottypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::message; typename boost::detail::sp_member_access::type = gr::message*]21ControlMessageFactoryi@ypyySt23_Sp_counted_ptr_inplaceI15ControlMessage_SaIS0_ELN9__gnu_cxx12_Lock_policyE2EEp@yySt23_Sp_counted_ptr_inplaceISt6vectorISt10shared_ptrI15ControlMessage_ESaIS3_EESaIS5_ELN9__gnu_cxx12_Lock_policyE2EE`yOOpy`OOpOOO yPOO@OOO/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/file_configuration.ccUnable to open configuration file Destructor calledGNSS-SDRConfiguration file opened with no errors contains errors in line ./default_config_file.txti`y22ConfigurationInterface17FileConfigurationpyPypyySt23_Sp_counted_ptr_inplaceI21InMemoryConfigurationSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEpyySt23_Sp_counted_ptr_inplaceI9INIReaderSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEyOPOpOOPOPOO0OyPPP@PPP`yP PP0PP/home/carles/package/gnss-sdr-0.0.6/src/core/interfaces/gnss_block_interface.h/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/gnss_flowgraph.ccThreads finished. Return to main program.Can't apply wait. Flowgraph is not runningFlowgraph finished calculationsUnable to update configuration while flowgraph runningUnable to update configuration while flowgraph connectedChannels_in_acquisition is bigger than number of channels. Variable acq_channels_count_ is set to channels in acquisition statesig_source_.at(i)->get_right_block()->output_signature()->max_streams()=sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()=Signal source connected to signal conditioner connected to observables and ready for acquisition connected to observables in standby modePVT connected to output filterCan't connect signal source block Can't connect signal conditioner block Can't connect observables block internallyCan't connect PVT block internallyCan't connect output filter block internallyCan't connect signal conditioner Can't connect observables to PVTCan't connect PVT to output filterRF_channel >= 0Already running in state received from ACQ FAILED satellite , Signal ACQ SUCCESS satellite TRK FAILED satellite Number of available signals: Channels.in_acquisitionConnecting flowgraphflowgraph already connectedblocks connected internallyRaw_Array_Signal_SourceARRAY MODEconnecting ch .RF_channelsconnecting sig_source_ stream to conditioner Channel.RF_channel_ID connected to channel Channel.signal assigned to Can't connect channel Can't connect signal source to signal conditioner to observablesChannel.systemChannels_GPS.countChannels_1C.countChannels_2S.countChannels_Galileo.countChannels_1B.countChannels_5X.countGPS L2C MChannels_SBAS.count system , signal .satelliteReceiver.sources_countCreating source RF Channels GNSSFlowgraphBlocks instantiated. channels.typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::io_signature; typename boost::detail::sp_member_access::type = gr::io_signature*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::basic_block; typename boost::detail::sp_member_access::type = gr::basic_block*]virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]  !"#$x|~  ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210St14default_deleteISt6vectorISt10unique_ptrI18GNSSBlockInterfaceS_IS2_EESaIS4_EEESt14default_deleteI18GNSSBlockInterfaceE13GNSSFlowgraphiбyiy18GNSSBlockInterfacep@yy16ChannelInterfacepyySt19_Sp_counted_deleterIP18GNSSBlockInterfaceSt14default_deleteIS0_ESaIvELN9__gnu_cxx12_Lock_policyE2EEp@yySt19_Sp_counted_deleterIPSt6vectorISt10unique_ptrI18GNSSBlockInterfaceSt14default_deleteIS2_EESaIS5_EES3_IS7_ESaIvELN9__gnu_cxx12_Lock_policyE2EEpyySt23_Sp_counted_ptr_inplaceI16GNSSBlockFactorySaIS0_ELN9__gnu_cxx12_Lock_policyE2EEyPP P`yЪP0PPpP@PyP PP`PPyP@PPPPP21InMemoryConfigurationp@yPy`y PPPPPPPPPP P0PThe descriptor does not fit into the select call's fd_setHost not found (authoritative)Host not found (non-authoritative), try again laterThe query is valid, but it does not have associated dataA non-recoverable error occurred during database lookupTwo_Bit_Cpx_File_Signal_SourceGPS_L1_CA_PCPS_Assisted_AcquisitionGPS_L1_CA_PCPS_Tong_AcquisitionGPS_L1_CA_PCPS_Multithread_AcquisitionGPS_L1_CA_PCPS_Acquisition_Fine_DopplerGPS_L1_CA_PCPS_QuickSync_AcquisitionGalileo_E1_PCPS_Ambiguous_AcquisitionGalileo_E1_PCPS_8ms_Ambiguous_AcquisitionGalileo_E1_PCPS_Tong_Ambiguous_AcquisitionGalileo_E1_PCPS_CCCWSR_Ambiguous_AcquisitionGalileo_E5a_Noncoherent_IQ_Acquisition_CAFGalileo_E1_PCPS_QuickSync_Ambiguous_AcquisitionGPS_L1_CA_DLL_PLL_Optim_TrackingGPS_L1_CA_DLL_FLL_PLL_TrackingGPS_L1_CA_TCP_CONNECTOR_TrackingGalileo_E1_DLL_PLL_VEML_TrackingGalileo_volk_E1_DLL_PLL_VEML_TrackingGalileo_E1_TCP_CONNECTOR_Tracking/home/carles/package/gnss-sdr-0.0.6/src/core/receiver/gnss_block_factory.cc: Undefined implementation for blockGalileo_Volk_E1_DLL_PLL_VEML_TrackingGetting Observables with implementation Getting PVT with implementation Getting OutputFilter with implementation 3CEA9DA7B07B13A6CC0AE53DAD1EE2A0FCC70009338C08AC0EE457F76A1690815C3C940AB722487CC8F3D1F4C428828E7FD2A21230E42A3BBDF1E792165F644D0E0335F95EBDC93D6005CC0C680DB7B0E1B8C4946B7974319F9816141DB9E01011E4F20DA8F1B8E15A6F618CF599C3F5C1A1B276D51318ED4119BCE0ACD0332F3DD8F88EC5215AB311C51FF4987DA93B09A43BA84CF08032F6CB28F43043C54586811D870AD6FA27AA63785345C8BCDD3DA26A0134738BC7E08461D5409FF0B791D8574CE797FC5EF7821055028CB4AF92AE1088F8806CD55F0E5FDFCD8D74ED801B2B44AD5D79D1924D41DDC6AB2070B5360CB64CCF487FE517420348CC39BF50BDF78BE7DA91542FEAB689457B3EE69E43C75FADC303F31032FD96B7DC70A88C3B7BAC7322B285D9CFB3A93AC8B890165F23848FAD8477DBDD3D0AA4CB3CD73A48000B6D134DA2DA70B56E590A101AEE78864DA0C64A7BCC6B37CD6F31E9AFF10CA4D47630752D253944632DF6EC60AECDCD223F29399CDA3B74D1DFA5471277EE6C814464A8C55D3C0B83B36B6AC9FA90CE876ACDF65E3EA3FD61D309EB71ED29A3D510B2F4C0B6D6C5B57EC9060CFBE48389DCB17CBB2284E7F578565B91503B06F49CF3E8534870AEB6AD9707265A9A1E6E2E5E6DF6DAA367239A96EF5B02C19A4543D537EB4D9D73966C09E9B52B4706F57B3E0987885EB84DEA26F7823D895F62015188ED38C04CC6714F797FDB0BC713E3D0208462F9A68E3872A167BF1BF9791AEE8BB73CF527C50975B55C4E5C2F2E95B677F833ECC878D1764839608CC1108A75EE9E58FFCFE4CB52884E7AF15EE0632E0729DA1CF5B7A227028CFE1E08F8B881E1A743D52DD27BED33DE0EE75DC031B4864CF192DFEAF64F726D73321363A233F81C57232432D2B0A5A4C44F4320847A9C143F378F204185D2B571482FE45D6BCA152E6EA7223BFC6DCE06CEF90CE9114623EAB9B1EC789B2051B4AB711DABF5B16FCD970F437B8860313B4F1F14D384EE3976B7E55D2FDCB7E1BD9BE18B722E37C853ADC7E1CC2870A02881F95B78487780E1D1C296415109CF07AB63D0782A9F451CBEB3E8B919917AEDBCA8A8E563AD3784639793E0F25CC9CC62240FA04B2F141E71BF5C84EAC56431159556B8BCE077A51469A87737D3D6F06D97DD479FCC35129F4499C19EF98BDCEA9D4941B3756CDE1997C3AFCAE62B6D9E23341E11CD05A7FFF52F5814011A84D737E1264109006BEF5F19E3C6A9C7521B44741A8282755A8F0DC2FA0E1F6CA4FB34D8CD5FAA27E18808868725B9634376137C1BBC46934F83958112D03082DDD6148F353BD1DD24B9F8FD7AD89C40DA0A92A8DBE3608038CD56FFC4ACA35241D76FAC4CAE1211AAD9D73D51C81C59BCE05F71C345730D3A2C670F8F533A950EF24B00EFE6A3F1354694ABCC6FD9EC4E74DDE1F287AD4F847A297ECCCC39AF029EFCDDDB19932D906B9CEDFCBE0D422CEE305DD05E407340F28EEEA866664D60AF293A45D5D6D5C0000B05F79463DB513ED488DE7BD4EC9EACFEF973B23CE4E9539EFCB797456CF5FD1EC54FDCEE80B39063C48B91A5C2D2BEBC81B9B46D0AD6503BE5AACED2BA5EBE81F630B4E07510356E8229F7FC5EA532B8729CDB819E066A15379AC6942CD4BC5E97C6791E098105C323A3A3DA3880D5EE5562ABBA2BDC9906F4486B51ACF8AA4405E9D7A63DB9E3058782DD9AF3995FFB3D34AEF98234A0B3DC62C339325B60706C068F0198BD8FA658396D06931B069155217690C7F88FD230CDB38E3E48530BD47722FC9D8CF144C4B667345D44F765622A956CAC4E097AB1CAB05CFBCC6BB68C709503AD9DB09C09C983D46A04A05B6F7EB26DB4D46F868C10E112828B1AEDB3C0074BE0DE3C9B7821BABB4F8B8E24F69869CCD981B09A783BF6A95F39ECFAF25DED6B16F89EA09D3A8413CCEBB545651B363DD385D12BB72420440C40E804FA27DE029A1E08629BAAB598C035DC58FDD309844F3BEBDE40FCC231F38605DED06572ADD85DC51D3D8B89B4480143D0B75283522354330E5CCF4DE1A6E68047D5B8D45D835A891F2D40C9DB8A76CEB1D18FE2BC38D080A8D97064CC87D692DF21184ABFDDA7642D0BD6F3209D06B4AE7600F7DDDB71DA751120599117ECCE645FD109CCA2EC7DB98F4177F14DB854FEB314B5D7CDC3385AD203464EADEAFF4AD08DFEF3D21240BFB8EFCAAC1356C72A0F5C61BE03CD2A21A7D756FA9003D562FC4A49A6BE788EC8D80054ACA881DFFF72C2966EECD09F185EDD11218C6696DB14E05FFF3644D11E508F4F1E9C5AB3074FB1C3FB21092A1C8D5AE05688FA4A9226C3C30D0BC3981933DC8648240F8CB67085F53AC5295428DC8447A1E5A46C2BA86796982C4C6CC647FD8079BC4024BB69E2B226E6F3D0F8A90B4D36DA2AED4C6BB60D318AA7479FDC2031143C67CB4381C27072E12935001524C7BECEDAA9954BCC2AA218E9EC2C95498FD8DF655C015896D9ED42CE7F91CBBA2CC4A7920038EBB5F5CE638F969F8B179E72AE252BE7E826E5CB53C2E85AAF1E1F1AD8D534F78A681928818AC3154651FFC583DEB0A6A1F40B98771ACC528AAF80D210ADAF83597869968D499ADE9A19BAF341E8CBA20F0E1473BDD898C24C7A5466F9924EC7EE992A2086AF295BEE1F6D0F8843D91180BF2C981C11FD978B23B6BAF7786BD526B458B76A87C31D7C52DFA43F3D362C8EEFFFB3FE5FB3F6E5F34B1FEC7EF1031146F3F609B32677F148F7DEBCF3526BB45582436A3092408193D6312626E46ECFA96FEAD12A234CACE10FAF9DE75EE2D238088146328E10E9ECDBB0B018ECDF2725415CF5A06AAB857403BBF6CBFC350903A982864827988BC805A3484A31FECF7A40D4FE251BC7E487613B9D3A48D3C7DAEFDC49C4B7E625F868DB53A798515A61050978552699EF2A5BF2F13BDD444EADC9B60B479FDD4633EB4C1062AA78BEF06692DED203819D3160310FD7F2343732156A9CBCB0B50BA9A8F93E339B702670E54BFA6DB2E2E773202C690FB71EB03671AB0B1B02B2F189BD99061ADD23F75F4914067AE638C9A29DD3661C28AE272CE692CBDE6AE880FBCF272E548342372CBAF6370C7E3AE9648341CE7310BE1C534B5702B0611AF65868F840B6B7613FDAEA21DEFB4F2024487023B02B8B58C9E9F27AA787EE775249EFC40913CBBD69C38538F239B203815F00F7B9CB30DC79E6A0C3E069D109E4A1BAEEE36D354C3D0121F1342F1F4AC504A68D69DEC158D54B04BE8164B48F31BC0827A0379C5237070B6F963741AD9ED4F3865698FB8233D7F49ED4E0EEF3AD927CBAF4FAE183252BC56AE4CDE3E329B1D9C87C6C11429B15B8EE589213CFAC208A12AA01B4F1F7CC35CD0AEAE217471B3DAC1C279F353DC61994FC45FEDBBE0005D8EC729385645864EF98A3A417E62F1EACA7E60D4E773BB2E4024D62830F103A7988733DD7BBCF3AB0CD0049006FE2F7EB3821724BEC37EAE44681A9699A025D212724CD98CA3415FE2BD09FADC02F1501FA38A6083427B662DDCBD0460E12A09072698EC8966C47B8A640AC79C1B7722E78A6C28680F4BB77BBA477BE0A6FAB959B9753217C570845D1C8FF162EE106CC87C3EBF6A837930F8CC797EC7A446E8A213ABD239582350636B19B5BE428A9C13F980B7AF5CD7F32630AFE8693CDF0EC0BC2C84F2472F5B86576E8C43136C14717A24705953D392BAC96C1055B782C7941D82FEA357E5FDEFF772FB9F3DF248455CADEAC4CBA2EBA9C91184006D1680E000D59E4BC8FBE2C2F7CC2E78BFA5B60EB292F244E6CF497D5A287432F2520B31B9D9FEC1210923299EDFF043CE077195509E92372F5959AAB4666AE486DEFA400D81463C388CD05C677BFD4953D2627105B0A776960FEE916C75D53981D30DC689581B7E8E0723D65949662ECFAA6FCC9F0CE8892E367721718F906207663F9AD450AE98D75DF004080FC15DC2CD7A1DCE013A0E547ADDC29A397ECB9E7FA02035327AC40240E2091098708D424563AB7C5867F3F2D78EE3EF5B658FDDBD49435060CA2EA3D559CDE957B7E48B98DB41CF875F7B3D9EBDF6547B4EDD98DF4B747B0793152FA8CC07C6D9EE5A2002464566D86466C2EDE54A2BF4BBE823049E57364C127A14BFE1B88ECF70EFB81EB831BBF50F6AE124E5F6A775F3F2620E91D489CCF24811C0890EF905E9E2ACD399E13DC81333A54BDD295B872EB74E412E2FB654A9874854FBC3A68C73434C5FC5CED27534B2B13C316205FF4E432FAFC13A7B5B7A7FFA9FEEDB5AE69036F8F2955DA124CE5856E8C53F24E609F7D3386DC5212B2E78B5AA23B59D45FE98AA08E9CFAA9D52ED260A36AF07522C047ED43808A39D7019E444EDF84D885A9AC84092A0F6BFED562F3E0D79FB5CF62F98E67EF219FA3F5AEB7D4E344642D3D4B1A7EEA18464F6CE8D4CB3181D9EBF6F4122751B54D0D7F3FC470A91B547148AAB1CA0DF59872120190640555A7561B0F2C11280768F74B1A56674FD5480B0F510491431810D99CECBC6DB85888BACBE2B020FB8B3D78039773229714156494EAEC3A2D0A59E718F72205747D69C05DDF1C678E2E154A1F84EF0CA2E24DC4A6A996F0850A396D2432596EAE84AEC0935B8C25D5C65B52A32722F01D281C4F753EE03EB10020E9FA02462CA303DA39560669637532D381EB78AE5EC0F6DBF6273EC979442E6243F65FC51F26C6C9554C6C0E3EFF33BC4EAB6A27CAB9383BE7DDDE4218C4998033B47919503E1C9A789711EBEAAD6C0298B3DC563F54D28675260F6D896F1B8D4FD0001C429210398E9544B3DAA12C31F7EE82EF4D2234E26F873610B76756DDACD24B6132BCFFE735FE75513ED527DD04D7DC6D24059F85706679DCD1474A9DB9571426BE17E6DEBA58B33B708567697F471CA8B78E8FA73B0E18CB6F88BF9E4F442F0FC21FAB89305484828F18B65F9D373A6A2B380D73F5924F80DA234C1DD87416D025E4E663C96F287B0C83DC92C2164D81830781B715209FD11A65E64962D805389BAAA91DFBB990D3511E506A8EC101131C5B7284252F861D047DB2C2027DBAAD487ABFE429CA21CBEA7671350618E441F4D62F2D579CAE29D97023A8873869B553293D9F54D4A929E252AF132325A6E3BCBF7B36D0DAFA1E56A39A5D801FD0D5A41111017BF62AAF8346C7D424FE007C32B437ADE60AAA9540AA5078FE6C3C3CCEA53EE863086646C976FE6C79434A0AA4F53B2E9E2C3B4CF9C9C4015391E27CDFF5C1FCCCC00BBF5B99715A1265F591E294D530DB14DFD485AD34BBCEA32E5B5D0EED15F88BF5D96D058E6D70BB1A232597E35A625E5E8C2EF5E7031A71F70309019A0591BA0A50E87C839498255A3602C0FAE53166BE5E49E29D24AEC47002B698F80FC49E718B66A8959259ACC5407A0133D5CC3754D6B259A2CC4EC0298111D098CDFB40549E5C40B36A2846CB4B256672BA189CD3A05293BB36B167508A7BECA3110BFF339BA06340585DE8EDA03AD244A77F54B7931610B6F9C5C54D688A0526A9B52605BD7D7BB01A63F3D1565CF78ED904BBE4AFA4A290EADFE9DC156E59BAC162A818B6CDF38D2BC715144D44A1578BFC727423777784D15ACFE80FACAB61F9E58B5D3FFDDB065A00C5D49DF0237EA6C488D7758F1A689DC59DBFF78261016A7C723FE52FFE571F5876FE0ED50FB00A90BB82B27BCAF5A67374284844E06BB1B2D84B1D20228F5C2208CA7E8EEC2E95027B09372A309223A15C132543FF3A89B7AFBA56AA7A8DBE70E0805D3A54191CC6884D75ED0FC00C06D9D488B0F4816E12D6C2A4324EF742AC8FF885E42100849DA05E3B7C451D43ADBEDDFDD13076CD8D22BDA101F665B5878E321A009B970D1F4C48503CE35365543B3F36786802E5C53FDD756C595784E4F130904044660784ECD9C9161477F5BCEFC98987540AD1E86CABD3EC7823D83877605FFC79820F1381DA29282C3C5B3443B6A67973F0622EA5DAA14FA239542EB140082F242958B39014486E5D5632C62C3EC8BE0E09E038C0ABD52B1322E0F7407FA53AE8D761858136CB371AED5E6FC9D32CADC8F870EE833B7120BC0278D9A05554D90DBEB24ED6F5A8861698D48B4BF7AFE7763C1401572643E246DC65853996B0480D38DB7302364409357137DCD0B416561B9511BA43CA34341FEF7954C28B2D9FF96EA110E0818309C32AD306DA077CC911299FAD6396C872F3F6AF7871395D7E67879EFED929E4C05AB4C09E8BB396048150A4161D7944CBD99C94DD16CD8E0D8BB73768B17EC02C0D4206AF623037D6F4257DAB4C07B4A6C0B4D2E0C9923FBADE3DFF7FDAB45F4E6BC5A895FAE4F5BB9EA247F2D4446E260F7988C452203EEA1DFA64DEC2DCC090BB3ABE13F6A8718F8DA2BE551407B59B8EF1806A65526B6B872CB8922BB929F09341554A71E69B41B60987FE3A5E7E3424D947455083A827FFE27FB5BC5365C80998DE01CCDB66213575FB61B3E6F877D0E2E4EFDE4467D9F07B6A28148FE2FD6EDC9202F55FC855D0DF8C49E244C40CC3D95FC06C6778D397461BD157F4A0FFD915799820D55F52C96AEC0CC5A3E7A2151A845EECEE78B82ED9A217E326CF6C49F7D31C4D8ACAFD827E6ABB760150203448C000819E7E0B6E424C43A5500164CF128D686B4810D9838480604A891792987FDC549D87F95BCA120AB84FCCD8C9F93F988C87E79599F3C1952BC0F7773BDFFC50B19BDF8E3D8F52D887E45B643297650044E80124BEA0ED60FEC4449BB3BBE394CDF7CC7AA39BC1A5023044F6A843186C01EE1BF5834EB5401AF7905FC04447AE00DAC50B051B432F831FE5AAA7506160CFD7D4639C489ECA447F4F993AF0503CE5EF68A837FCF85B85993ECC55A9A3673F8F2C5CB8D3DD4C60E8421E3417EA958EF87E0764B061A39C32ABD5E0E3A712B54B0A3E2D351A0E00F4E901521C63C1F4ED829F6E259A1F720FDE96EA9CBB8F7BD7485531A81A49CDEFCE725493A04B5EAAF7411DEACDE5A95AB6C2AA7BE3269F6AE4D166D8A5FD5264B135FF8361FF75B2FF22A61905A349C6B2C1DB2BD7B385B8FBDCB2768C7926F138D5F8107111563CE527322AC42E6BD42485668106B8CE91F157E0C94448869F7AABA255821DF981CD5298D40378FB0E33A3DF8A037BC21F0AE268E69F7CF61E7E117BB463EDE3C7D2EF95987C66AC3E5C7D79C44A7590BFCF998683701DAD7B98731DBCB455E6142864D4236F326627BC08E9B2B96C1A9E5BA2631DCCA3F7A5B63736E4EA8074056DCD6BF0E5D6DB8845D9271C0D706F972AF22E652E3B2A7CC482B125EF8BE005F25D5109F6F9DD84DF966E2E0B8950FE1C01E2DF15205EC48BECEFB32511DCC39678F9DB08ED0EFF64C7B5DAED1DFD202F63B6EDBCFB7E4FBB431718BBFA2B65594D78D3983B0457DDDB350AF2C1B9743AB9EFC260A78C3144622C50D528B7D47DDE46FB9DA33D1E7DE6D5829258C2F02D54085AD0121A1BC8339A2847F6F161CB6EEFC5E3FFB12E6C77E5FE10E0D4B02E58142DBE5BF900B7B64EA79D520A35506AF4987E67BCC80D00FF467A0889A14B85B4745888B09DF7B4D3316D9B4A9B17C4CEDFCB0A55E2AAC53B538705673B2A2EE4ABA914E20ECAED730E3D5E272A65A74C366177A711095624A679C9300FEC18E20E65DA3645F23AABEF7EB7C7FF49B289FD2F44661F6F5F689B6E06EFCC99F8A5EAF558E10F2236E002F7D97C316698D6833792C456F812A339166E9FB3B3F61734B98AD2DC9A484A14A6025114D072B68C47DDE97322E213F5D6A93762A45C4C73C7832BB31209C4B1F0094BD24BA23CA9378FB893AB078FA3BC4763704EB6A0C8EC965690CA5B858DAFE623AB88ED39154F46B9030462DEC9070DA9DC34063C1CAB3FB84D60337F1D6D95D1A173650C96128D3C036D0B72B4D2A298186CCA8E1F386E1F70C0716F0BE370A6B325CDFDEAD3CC67E021E9D4C839230708DCCB062096F32C4DBE3C4876A7D1A26072673A6CABDD8D65A5E91CC5E973F00FA67619F749930F9D40B767E434D0955D47FC17BB37E4B7CCE63B1D666AF5D67FCE5FE5469D3DF6B6855F9C308DDFDF6733FA7B8511B25193C27925F3619F5F836014A64A2C8B783A50C6B3001001D621CEC582FA4E52C2B916A418F49ECFDB5ABCA40E1A8D38FE400FC2D0C185009E85546A92E829DC1AD2A7AC3DD23EB77F3D80015BDA4135B1194B10ECFC87C1102B3D366C5460D20D83E778142F1A4EDFDECF3D0BC448CE24A49C609B035A99B64FABF071C58DF592BBC625359BC23A565F4BB077DCF879E14ACE87F709D276982A3D10B23A9538A6A3DEEBBF0B712DB4C16B0FF508F3E4AF4AA759738302D24C6D13037DC81B0394FE785FD14A322BC00ED95E0E9D527FE5316748DD893DB03D5C4149D471DE98C386A2E9DCFF05181E837A1814D54C9CA708CB5E7A10B0FF4F540338BE403E4B9713015A99260795DF5832CCE8D5F763C68BDA51133AF1D012C283E8F4B1DDBB4EE8C351C4AF86FB436571F53B2E80AC04BE26EA617EFA9C5578FBBD81DD1809EC5BCA5DF4A85B24970EBD88D9856B2136616F85A338771BEE80F20F6E5652FAD00F49F3C349061DE3052841992EAA04CE15DB6C48888BD3CC5EF4D6CEBF00431CCB7C5289D79E67FC6CF2DA88AB60CB65D0F687455A535C33547553966D197BAD9778542F6CC7182289AED366ED1CDB0C5EC1E9C0F0E21D4D2B8D01EF4BA394E0C6B05B8EF42D81F773D3D251D6264CA23DA5CA2D4884544FDB81A243974FEECB416D0748449BA0CDC69E56D666FCD24D9BD7C322CBC038CEC658B5253227D87C527473F34BBA3E2FC18784F864233FF8528A874A8503840AAD03B63F79FEAA6C07E4467C4A04366ACD35E32A142DD76A23417EDBB8004944A1E51880CAA97937493EA5BD5A41298863A71D33156CDB942C166748DF66B80ECAD27675A673C8692805B42E97F1B28DCC9BCB58FDF8BE55E2034E73E444A225DDDCA5B46BEBA51AE98A27990F622B32B2C337046E459B173D94BBE5FDAE31FFD423300D5D80ECA6A471DE5CBA1D29B7010240D95FE341A62FF8175ECAA9566011AEDE6EDA0EF2CFFA7BFF9F4C9AB2C97F6554BB182B23F2772090FE7C4ACB8BE7427E7A8535DA3A670341D88CFE694D1CF40156E9B0557EA317A0B3E21F3A629D1CA971482B1A54697BBC2020BBACBBB9D1E67DC33F52C4B446A36D4331FB02F19BF1A647D05714450E591C65853176A04DD561E0933CF3F24A2E4707C44FE29C5D7706723FF53ADDDC67A67C23769CA32876F0CF31D233D352FF6A7277E5A3A7578A6F2A76456C0AA876680CDF2702B114E02D22D9F59077B9DB2ABFED673158EFAE4C23A75FC8BE701D973169AA7015297BDCAD4870D4F152DC556A06BBBBAEDFFCE40E6BA4F0FEB154F32D8E1492F74EE7085937600EE176ABFD6B8638E983EAD26C63805B98745BA290813CB65CCE33DF6B98240E571DEC4BFB2430C4B8FEC23C1BD5C3E87E0E746BA8A7722A6A660C5095FEA8E1C4978B966F487376DF42C9668E5D3102F123FDCE7B8D80E8BC84AF0D91E9355FF6F7482BA74E0BBA7DACE85BC053F31074151566334B4DDA37C6C51BB947811F284B671FE53FC464CC30DDE59A3D9CAD26822183E96D2F4BE60905B94BB8B167B734A0F0B26AD0E5083A34E68A620151966D073293E5D430D0726C0FE35BA3F1F44D851D374ABD80E826DD84A665165B3B82D540CDED9EF60CE48E87802F16F5DD89163AEC8E9C523E9F99AACCC6F00126C4C8663A7D64D919EC41ACA337379496D0CC876199A86404CE5844F8E2CACFB00A985B92B7A393CE464DB19E0B5FD65BA92D8EC1164CB1ECD994F82396F6A52BE2B66C8780A5AEFC0293EE437E7FBF9BF8880B61C8313C3865561A4287BFCABABB90B3A11F6AA57C2B2A6047F1316AFE1DFE540C4F1D5270F3EE3E023E202AA530211DC51F8C2E87636C14EC8300271A6454A924A8093716756F79780D94DC6863C24C80A405D6F52DEE81810EB850C1F60732AB24209773F66B2D2AEDEDAD6FFF60902910D4858B0F706414F5779590F2DA7C249E5DC1484EC40EDBB01920A5175CB9D74EFF957A61FE3E08DD7C5DED5B299C03299F25E39B161E1DC1C586E39D0BAF38C09C2EC0B22589AC489C3199EA4E66611C45A68A7254D292C78C3978C381F297D7DCD8C0F7646E7AB6DCF155B67F10C3F915F9B3AD96C21379993D8C5D6957847EA81B3BB4BB0863F0CED12F5CC48A4325CDA65268110C1C156F845951AF3C3C90280F8883CE0236FF02DB0CB07721261432C7E0D479F859D8EB7C433F67721B06E001498656578F0E3CEF2A6B941519885BBBB03F33DEEA07802226AEBA473CFEA6EB894F45D1BB937ADF5180F5FE22857CE0EB75D251B02D89E5502560A0B6B012C191DE9D62FD28CF503375F2A1FA9EFE0E42DA81A6EB3A6DBA299726EACC6F3BE91ED51A25EAD5F3E7067720F7D4BB72F8BE2DF978C46E1DFB4B0EA17BFCEFEBBFE40C66ED1F288BE08D6CD0B097C7ED1205E43F8FFB7086120FD153C47272188799D0F4554E9A4131C6B1460077A99E8198B3717AFE5E7C95D3F49B3779EFF9E935FA63A6F881F039436EBDCA2EBE6FE00109B658BA5555BAAA4A401D1FFCBCE0369798BB3BF8B54FCEAA5FE25F31AA02208B0F070270F9E043BAEEDAD4432B1C2DAC9F7B4CDCB52965EC43C2E99764AD2613BCBE468C9477E64B8BDCB64CFCE01C06EB66A15FB034D1AAA507AFB6842AF66AC8C18807E98884C6A780805720718A3A4D1A7B094846C55B0808736199CF4EC3F66B713259CC715B22B92AFB1599B7AD539B188E99B39F9A92987D0ED15C9491CEF241899B4DD47BF31F3BBEF20F5BF13D9A98D3F133AE61F3E4A87A299A6B115B96DA6B2811414D204A49EDA0E1A763E1EAFB78CE05C181DD0947CD50276A10D62543A0ECBA57DAB5DC794AD7006A520B419533CE8519F4EE4194B58B2E36F9E9705266B6E304D1DBC6B73491045548637449E5C657B263CBD9577AD8DB7D5A5BB5DF43A869FF91BB8706D4E81A4F8243C214D9884104675F2BCB426CD785A28F4856E363E1ECC974325487DC40E7304D3D7CADA5DCCA6E60F4457DA181A39801D35F20E1DFA05BC09E7699FA289A87EAB311BA8700AEC0F90950E5FF740DAE7EAE7FCAE8B0D9FB82ABD25BF46FAA635F570C22A76C52F9733D5BE64BA67AEB5D826288D03D8A23C5BD3FD6DBA68082B7815044E24859865ED557C7DE8F866823CD4716E573BFF30067F0931D0AFED0146D55B0B2A3D6C57481D94F61279DC4D2C6DCA1CEE27DF24426E55AB4FFB87068AC8AA6F286151356CEB29D993B4FB26192319C373A1F0F58FF5949783E71671FB58A683DC1CFE166FE1AEFEC8A41C5FC06A31F4EFFFA3EB7C388E1BF99667A5D2697F7132409641AA812EE84EA8735BB46E5069A7BF1B2618B56ACB97C368AA7BDE1BE0F0BF286B6D08B42702F1EDEF408BC529B4158824F673B30E3D3247FA59DCB83D004459CC5EF87BD6C7D188FD91A2A7FFDB008244F8618ED46A73323E9C7F9D5A83298F8C81702FB4523AFEA589D4CC269BD226D04689F132F766770FF23C832EB5695713AB99B74035540031AD1D9D9047D72B1910BC320A65A9F63A40C02FAFE217BA0C51FFE24E96DACE57C1318351038FBB81E76EA34853484E7ECEB672A4180A3D24B6C692747E9D306DD0AF275EC0581A30AC2E80EC73B04B1EF83160FD88DC43406CD715EAB1677F1422FCAB85D1D1EAC64F698B9ED69FC9F2B5519AF9153D5AB722339434C780886B81DC2878B27177B4616450BC1DE99C49C965DC9257BC78ACA052E998493A0CBF7B6AC86EDBC2627E43E7521A9DE7824DFA7DE19AEEA5892685D50EB10128B3D14F3C670F639AF6F2B2F6168A1E551A65781A418ED697E6AB3CF91EA2470995A401B08380CA58B9439DDA7BDB7A92E91016567D57D57D5D0DC4D8E3C1490CA1BEC03FDE065C7B7F34DBC40BF704149A0573C55A0EE4C415533829EEE71BD8C392FD622572DE009044E937AEEDF672886CF4A36ECFE7B0F8BA9CD9EBDEAEC40BD74AD34CCD2C7DD07F7AA64EBF4DA9C8810C05F55619B808127CCA00D171BFEA3E1EC0895A22218DF1A0514FE5D16DC416D9FFEEA8EA3BC9FC650F678EB731E70A6110E138E059371D5A10BEF6420A0C8BD45F836B7D310E732BDD0FE57D93A6934317FD8E2449BA0F0C6E1B36821B62D1F80B9CB6A5B407B6755977C06BB2C3CEED0B14D4D73A3554FAA54EF2C350C388B230B30148605035E4F481A769564E2814A160A67E6F0DFFA7814D0C12772C0496737C52016A93C6753C82FA896BDFF3BCC72105D6EA5B52B3810004DDEDC266F1C90CACF49BA7DB5016A4E485F06355441CA204F7D589F2A3159541F991682E6AEAC0C7359B3282A04B2DC69BB0AD6CF49C48343C8A769D3EFBE8D0814E72934F7CDE698061EC68FAAB39016B96BDC5363D2B53363A548E6476647C10F55611469828564C189430D351CA01D2F1029CA3CE1D2853E8E595D46C9C3EE9F7D3EB9C72A25F7B2138063A0F9186FF41CA9C579DA61772FD60408668A877CCF6B65FC2B88935822A6DDABB97D19F7455A9725A8DF2B8E6B28D83ACDACC66F02370575831490B8D8838D4E56AF36ADF8AA82DC5072A45A21B7880DEA3E2691FCC22EFF3AC815A2576A7F480ADA6F8426EADB4A96A17EB949BC049A646D46926F0D69E0B3E1911D2CE652FF4D9CBFCFDC30065FF4F779DF896D38587B297BE8E224EFB1DFD04BC2D22832B2955A250B7D0448AD9C0A76DE7C33A4E2B5DA1B3A868852B7F04D848EA6495BE8D2501BB47F24E8DC4B254DC56BB5A4760DF62BDB229F3DF0E0C06274A63A28D11F928AE2DEA72A9974E3C55CE261943F78B771CAE7B5B98642A01DBC06111B137774898F0F113A4DB23BC240BFF147568493FCF0C3D767D3548A1C0EF7AA4B6B2DF566C3E94BF9A183264F63E4FBA58B517FC46C4F0017F8D763A54D044C644D6326677A425F0F5A2A7C8796B9C9F8CD0FC49A1F035BB6662C0CCC0E9508AF8D2B834B929D80096F9BFC922BBF1BFC6F101317EC08ECC1DB52404B30B153F43C266D3E64FC496CFBBD350668B2AB3B596B5E0F0A00757E0D4A771F5A386AE86F5105C1718F7E93CF00F588C722509A03597B95512CFC705F08D3B4D5A3E23C56EB461A719A955AFD3EDC8329BC97E3EC6BAB24D97E16A724ED2D4C02B2371FA3ACAF49175A441C3FDE53C2DDA440C18BDB8A6F27805F944EAA7991D404CA74544E2F3A669DCC4052B6770AAD9EE29A6EF7791C6DF93054D07A2B3CB2327B0EBE7D983624639961AC4C3CEC2A84DBB3A10A830DCAABA9600DED87FD5CBAF4D5F1DB357ED42374175257474BAC200AC1B6A5B87D2FB2092458F51185C380B8BFF682C5BA1D2CBF8BC02E5D485FD811797AED167DE6ACA66B927363D12EA405D75A2E9182B1FD30ABA700C5683611A24EC5DC453F523EAEA44C6E06261A98346328ED9E86CA8F7EA79EEC551F36836272127A45984EE165BEF8AED80D26DC45E34E1794F56C1265DD92B4078FD2AF2F13981C08FE27C55C3C9238BBDE193A956E3F834445D949CAD84D3FF0FCD511C6C598735D5B3B07BDD7D437ADED3ABD6EC3171F3735883C9F511A06F4C6C7D0B137DD0D57869B8FB1375FBFCF9C3D08CDCB12B8D01614AA3C965550E5862AF49B04410D25BA4BE86FA6B0B9D9142461AD3CB4BD6D902EFA49632A78F1463619E1309CC89452C2B453BF9F08A714D67ED90972C62C0468CE17006F9B60138D28DA6362670BA3048CD8D099AF193619AA8384A1758FDF4A04CE56ABE464A66E913DB7BBBFF7EB2ADBD47E6347D7054CCA13000DE13F550C6263AA4135A2E16F1A2A58BEF962113C209CF58CE514FB51EC162D05A4DF832697E544037CA18E62A267D81D539F879F50C654E74BA21B47FFA5C704FAD2147EB3DD8617DE98B3ED4859B605310A777F3DD161F4038486F0872AF55FA3610EE0D68C1D51E0F91EF7D9AF4ED01BFF53FDA16BA3197A518BAC0F82F8895A2BDD9FF4C3035379E870C49DA1AF18B3668792B6640E687BB71F13DF1650C4E1A2CC487C247D1D1356EE16DB8F97363465614E9E63F36C853FB63C12963A8A5D98B52BE8DB31F0954B35C3C749A62C2B34A690803FA66087015506225181C5D6FC101D1494C3A7961ACFB4D9B905323DAADABA1DCD2DDC1F9CBFED7D726E602578CFDC1519925F8DBF9AC5FB4E4CA723BB264B5D106B6206574C46C1A49309C22E1935904942C36148F764B59F10A5CBA0C9397F5798E200A606EFC75DEEA1FFB10A85398E5BFBBC6AA3619A0F611E591245D03B6ADC0C50440A1B1C236ADBA933B2BF84D2C60C807E9F52436904BC62B813FFF8B9C824819C760D0BD636B10572C781B112CC0C603A260AB87986B0280FB913A9E0BCCDEE347F0C744BF8299A9099B8F2A17D19ECA96F67ADACC0D83FDCF235F07832E8E78A44A53F9C4CD09C3F88DB226701963147EE0E1AD0F549E11BBA70053A105BD62C40DA810BA37BA72D999CC4FF9BA4D01FCFC670E0D7819871D06C4935C10B85594CB7202F037B25F85141A580AE1CB3E0CA91AD73C6947D2492B8FD2F889B1421E04FF0FB7866218A491D9EF6A35DCACC12CE098EC575C697F5F8D1BF9178B3B36C999EADFFB5CB3A41DB672165CF73A7874FF68B3B901C4E9B8112EF4FF9B9308742ED678DF30E2F7C40BF922099C1A95BE0C231E9F8332EBEEFD99C6DDEF25CA5EBB2985A9689912616815AEA022BFBB87353B8B799D64280A6922CB09044ECAFA51037AC2FCB11516E9E286F64B4CE3E30A55191F24AB53F2E10E5A8920FFBAED77FD4C476E9AEC751763D68409ED9BF7F435E53D401CAD787A50033BB8547C910D90DE100FDF6B904A1F529830E3A51919299FD4476F02C3600AD5D42E3E154AEDCD1C99C1C5B531FE179860EC1EAC69EA0381CD4DCDE8716F94D6510F10FD1915864BA968440CCA6D0D5AD8983C421079B033B56FC34481B9F27188F829F91DD73F27BE8E0456B0F75DBEF40A3C67F274F6A50CDBFFF9798F8DBF1A6CE7158B577550E40639D38861A3CC4E060C9E5BC1F0D3760FA9A89C2CF0A23505F4A642F5EB0A055B96843198CE20133DFE022AFEE043191007276427DC82E877BDE27E20D65DFF8232E9E4DD786C23D4E8B5E84637A22AE5562651BA45369947C159B641710C98494ACAD48B4AD6AD9828897437AFACEE442DF2330669D5F2C6A9893E08507ADBF104C62F6B4D568C5381B28D5162EF0FBECF396E7C622B54A7864F9B31CCB396A0DF82AB86D950B4657237FB769122BE6B783ECE3F798AF68E354C521C77735EDB97D580CC80877ED702231CE2F8B73262AE39EF94E84736949292E065515D40A16BAB13EB9437D30AEC44AD8C67E3AFCE9AB377753BDC481E8E79EB10F89A7C4F7AA24E6FA48A36DD1CFC02CF3FF6DFD0CC1C4030C312532A70B60F678FF2B3586D77DDE74167CFFA62C12F7D0086A6FA59B36C6A025DEA1EA0BFA9861BEFEBEC6B2601DF225E29F36AC97EBDDB21D7E8206E1EC42F3B9CB314E7AE6464D54ABD53D090DE83B466FAF5384E0FAAA6E67F2FBD6A72E00D9274C9B5C768DB4AA4281F25EB2DC6BBE0EA85CE1CD31B32BD1971D6AA20B6C68D66426F09C0C1128A679AF06CAD490DCE3A2DB50181278BC40DF9E094D1D09B281CD1EF1C369E5927407E04918BD21315E12583D7D845933AEF186DAF8B6609C3CA9452857DD2112E86227422491DC7821D7E41DF759BABE6ADD11A4C771CF16469F86262D169F221D97DAC9686B6DA29568B4A2D2579C76CBF948C321F5158EB3FF5F6D4D6D68FA255C81F62A8DD605507D0C6C9D82E6AD258B32DE4AB6FF8FCC4A8C237E270B9673C208E56AA6F4796867762399FC8549DBD232B2CD0F9957A8A24FCEC6E8B3DCCBC67085C542A134F3E80A3CCE8D3DBEF0528432F2BAB2F5DC89D6015BE7F24B2B1F378EE75222EF125A5645AE37AFE6ABDF84CCC3026507BAD9CD8C2EB4020E7763E0F85164734C851532FFE705C111CCB7D738BA8C0D29C5A0A50250D0BE53353A6C407D4F7EDD62F271F099528CCB520E5B6B5695D3FBE628FF65D67CC0D1B766149B9C89D3C770AA133FAE2BF3C9846B30C46584E9F93A8216627CFAD84C37AAD7986B8D69F83392FF8F98C828F8B136633A09718D375327B98A0CF8B7736D229499A52D91D19CBB896A5BF4131691682741797A25FFFE6AC60E30C79385DC778C903D84AE0F7756BCB2518300DB110A07EC46869AC35F1B02650A36C3CA0350356E2808B84A0D9A8A648F920B7D48AFBBF6CA9A37F673DE2B6FB15B189FBBF2444BDE8808118595AA995AE0DF53F5146B011A0AF5B7FCB4B3D3EC074F2DF15CC9708EC50EBEEAFE06F7A0235A50E2DF7F6C023B53819AEA87318C4E67C4742FDEACF57DC539FBD5BA01F64CB45322212C707923303D96E58EB95F7392292885391283DD9477218697698AD6D83AA96B06D68F58FC2B8FD9D61E75337C6815BBFA8B76833FE1856B714ACCB6FB1B5E957DD385658AC760AC5811E3BC079DDF2CE30BDC21AB8D2C7B56D2F6B384FECDE4EB0206A6C00282950C1B72B3E464570364A919812E86BBFD0E1CB2DC98D6FF42617355F2131F72A11F50618CF21A4C4961083FC6BFAB63F544677428BB9F10FE341B947C41AAC1B367E338CC2AA08D6CAD1067F02654794571FA4AA11E211F5E75D194197BE4AF6543009C40EA86F74AEADAAB134CA9E35D79F7CD062B53BE2AD86FA7C2E30D9222A494A25044153420AEB6C8FFC4E0D4C514B8D9F5DD922D8EA387003409539D0B40210B05C9209B008D3E47E8F84C376F46001FFE463F21A92E34D3345751E8E94205EA06FAC16292B8C6D4FA028867AD4C4E8DE0D51BB7AED59547707CFBC2CF3A9235C29EE3A3873B96FB75DD50E758CB2C7196BDC09336A97756DAB994C46D5BBB87F9D80008D09C603A68022BADB1D2F6B98B6B76CB3C0EDAEA07A23065B93DAD67BC59C9BDEF7BDCDEF39D9AC04C9CE8F6DB4A925F77BBF8150AD478E3C6D7D32512ED75BFBCB82C66D505CD8BC5A5679014B355BDC66F365BE9AAF15B76C0CFC0B51E53F86BB4763F0302B448E84B9792F34442743E2D979C5133514D4BB1DE5E8AF938C4CF158336D04B6723F9422161805D5EB059E55C86D0C461399073A705FD6E919D1760B2D6860D65665B486DC0AAD8F7B3ADA9BD681D7FAE4185350BAA543E9F8671F1B4BAEB6D18674516033B2E2E4E427521C290A6E44E1EAF9974BBB360FEA3535CF46D68193C0E208AE5B2F85C2049C906725C92F598E6C0B67DC5F8B7C48CD411E107F4860CFB3C4229A44694ADE0E31A4FD70AE5702C0A7710678763B035C5C6B4B9214D507313F5ED85C444B98278B40446C861057AB9B897638DE4739088FC28A577CBD52A3910885276A2DC8DA99EC74D30DF707BFC60663C869DA4C47BBF4D64A789425C5C894EC2B512C3296D0070DE4942113FFC0B13D03515F2B4EC07A0E3BB7AAF08DE24779F9EEBE26CE7C316EAF47396E538672BB646E1B2016356A407B8828DC25D8F8A8296B4F855290131734C94CB92CBA5689574CE95B60988C42558DAD978F36D67BDDDAA92FEF21282683EBF6D59763384781EB4D3431DF5BB909ADACB397D36D55D2ADEE537D7B1B942F3A815917A388B12285689B40C3B45C04A591672A2B957F924F1CF6049B96A38E304B8641DF6A079614C9F9984FD9C9F0A82ED6E440164AC484252B45147929A58B069E663663CEDF0FA44FD67580BFD23BF77C61B95B533107A25684FDBAA4C1285AB568C9FAB387C6FDDFD5EBDF5AF1CE094C59630E19F621CDED14E3847BDE9B0EEC64C159F23C779C4B80163554900393CD7F1B885F92F183839CDAD7801DC7FCFD08B7E08D23BE21BC80F8655A2F3BD0C483B2C1D23D447682CCD9CE098AECFD7BA7C48F5BDEAC8397220A7852077A8D7933FD353C25E37DAA473E996A5920DEDB80C26DE4FC3AFBD6ACEA16DD3208C9384021D9B1FC1C884319B59276D48D8BF5A0A37D84B8C579EE0D9BC446D385D09A3464D1ABDC6D6CCB015280BBE7DCF00078634371D7F327322DD720E8DBD7B8CD97FB9505A118B469762ACA10C4E135ED782FC905EF30F9FBA82F11AE679431F270351F70F0508BA998AD9A71D2BE05F55348B275A0E537C63699C96DD8AB8E0645CA2606E35805F66CE586C81B4A65E2EF036697A18DA49C36CB22404497577107924DC02FD87072490D7EC8D5B376D0C3370F9753E0E7C781952C03D844490370D6853FCA49E12139805C24FE9C9914E3CF91464D332C934570DCD5D1C3C609C6984E28C9BFCBA3669B75452478DA4099CFE0F6311FF782D1D0123A120F657CB536A3810984871B69D25913C305117A7E51D199A56387C2777E349748B9C2C40DECC03DE7235F7237CF43FD421039743CA72361DFEF2491953A3C3F0091FE3EE064B838BD73E9E6EDF8FD90235CDB374892BFC42759792E5636D031795C0DCC70D7DB86C161FE7059CE17B6926FE5D024D6B1B9DD5608839DF85C7802F5655525B633BDAD0803CE14649095C0A7F870F66888C072C410E0E0854238BA7FB259901CAFE3570D398B621518193BBDD75258BCB53AF2789EC66DBE2311DACDC1F9CDB6DBD4BCDCD15F9C2E77E0D2736CD191D2B83389A71B1804A0FB5F2480E38343CA48EC6D1830BA3466E53FC51C4EF05F4D10711A78AB215650462E9A26D9301EFDF15A3CD5EEE14DDAFEFA45171BA3A757CD6FAA5887A5D5A98045BEC7FEB331D01A997282910B6B946CADF0AEA57973520EF0561B233BCF798805B3B048751EA086FA71BCAAE15F8BEB837CD2974EB3E54D3B6D3F99A51F88313FB64218610CD1831E2E6E18EADCFCBE72BE5818B4AE4F3780BAA7D8C4A55DAFC10ACA3EE7AB7D1337506C485C83EB0C41748C668705B4D41D926221D33C31BE7D56B42BAC7E9240FE4C2287B5B41FE88F9B9E19970D0E4569DBFF167EC42BAA2566676EB055B69D159358D23DABFFC86A917490B4942A220038CDADBE24C335DEB895F3472F0D22778BC79B169D1EDA9FD18B31DA66F0246359DB3EBA36269EC5F92E5A1A89560C7DEEFA121A7035EC2501C553854724C5176AE60F87004F6FAEA907B91D1C58837C9FE25BD9C32F66257BD78169B1A4B8ADEBA72B5699D4C2D14F67BB347EC8A96B04278AD9F97A9B40DBB56E7593CF4B3C905108F10968F0AE6A2E7F1D214FC7B45637A256ADA5EEB70E03C02DA2ABF86C36E581A31032DFFEF4343C3E59EC7A2A715E9C199DAFD3BF8C9B43C1D016DCD33E2590A20EC8B657C08E5C0C0BB4F159A07206504780715A252D1F4F5DC65ACCC43E3CDC255123A77792685C9B68AF281863AC89ADBD5F778733E95050ACF781FFA386B3EBCD633D6E8E6D4A42EA85F005AA80A4597D40738A8E8823FE3C84B10CEF044E9651E45D1ECDF59C537AACA58D2BE42655259DFE6CFFFBDAED252254B732EDC93B4D610C50DC81B576C5A5C5BBCAC0BAFD7BDD7771EF1A19C29D7A82E448AFA07E7FAA8651C11D1BD550DDC69F4C9C6A44435034D80B47B512155E5141378A94CD277D4BE11B2A383B1539AC9731079624E81D3A3404F5325F5D2EFBC0929F510529C84B1BC3E7C08F661640E55AC49452C00256BEB49B7A52DA23EFFD85B8C303C6EEDD2202768ECABBFBEE87FBF1DAA992C8439602B1645C462D3297DDA1AD941617B508E481A28D1540212CB281B5388A3691A26AD7D3CEF52FEEE9F59F477EC98AFCFE38034B762B9D4B5DF3BB312758C4238EFFF94BD16D9C39655CF07263CD6DBA96D1C0EA425610C1FC81061FAAC5C0F8E6AA9591EDE2FAA1AAB8F76EE18C514F282EE4B5E02A90A2AE126DA52A9FF5274735ECAFA74CB36D607EF299E0227E94B6CC2B78B1F71D6B5FB8BB4C78C09B3A6E3ED6CD590AD526F74CBF869085F2BD3A9DF66D7DA9DD06FC6748D8FBB78D98A4D860B362BEC6295F34A6A16A58BB21C9632F8B3A64370B7A7547E329B39BCC82D17B82F6E4ADB514444F62AA800C97B748D73B0168ACF2FA898C262820F8981713D00CEB8453E3E9E452F5EF41452A9C8CD1F1260000C4CA9AF4E6E629B13DFF203187C0DEDA08315AF24181015D2E68D6AA4E7E938FC4FA9A8B80CBF49E3A9F27953A05FC7609146EE39F09FF485015168636D1F452FF311D4D8749C31AC8420865A87A707E540D7FDF0D25F63C7F3AC906E048281BFEA46263B4350BAFA8B5A27E0CFB23DE145622BC2FE34DCF4E1B4DCBF60ECD5426C27B3559B73A59CB1B71587C685542F5E6DF9FE3C5E75A8E9600E89217343D29C67A7AE80F9A8589D82AAE7B2A1B8D6546D3CE2482DDABCE7FFD3BEB2F1009297A77503E7155ABD4692F1244A49AB32628947A681388AD75A750AB92C81ADFBCED0AF166326FADAE6B79070473D67A8FCEBA7F21BBA932168CEC2A754247CA324081900636D87D001A605C4E5C31AEAA44A8DB9693617566726C7120AD15D96D917F5ADD0D86A5A9CDD7527644EED58A9BED014D9F4C0F62FCAD8D7D5DA2899D57C5510EF15B7482CB3E087493959AA12D73D55E194E48CD128FBA2788829AB4A86C325D60227074EA55BEB601128D5FF42371E74972B802D3117E1F2AF2018177D4E994903996DC365D3B52582AF2085EE5919DA7E84A2F3A200F4F6E76F11CC95F87BD2EE5935CDA0D52D9EE6FBA6D59E80427EEF4B80372091C65E059B566C38A6B3664974396BD0383A35EED0494C2BDDC167725C4160AFA58D408978D5A345EB03A55127C6BFB08FC0B4EF7037482EA724D9D121E26F2249C0C7A927946A846A67FB7C565E86C8C59A49265ECC4927A8FC88873DDEAEF6F8B629BAA1819807F38AFAC501EC9F206346581174A037B1D7EA56628C660E17BA0A97F2E189299A7844FEDC562BE678B0606CE18493F717559365F66201AA598C68F99A8F28AFD74AAB0E3619BC342AE9F36D3811EEB52C8DF6544C96B679CF434B9C64FCA0F43DA73B9BC8FEBD609678F5E691AA706E3586176ACDC25652BCB68D98417D3FEE12B23724EBDF496D6AC3B35EF706EAC11BB0090066F3C421C3E298B00821C90DDADE472331B9B2CA1F1E53E6D68BFB059EE0811EB7E7FDBEF394E3E35E59BCC4B63FA8E09851843F28CD941F9A97E5B72C8DCB9D32F37B79DFDD1B9D7C22C10E6F65DF07DBC7734430B811BCDD450A10F491B1E0DA3746868622E457774D0BCB1B29F9C1CB161DEFAE78354B7F718D18F07ED6672665D35562D6F05A2B3666B667A7C57D2617711F27DEC15D0A4079519D0ACC6B3591EBF0A61A12C42A6820CBA755C07FC531610C4192A0BE9BF241BBC5ADF758FAA4DE47C6B766AFAD728BB1D2C672EE0969303E42AF789FB295E766E90319D98F0618C1B4B8BD31CD2C5EBABEADA30C6E43D03F380F4C2B9C3AEA20BC89B852BFCD042AD3C9440AB395E9E251DA758D317E39792973083B20B79BA36A14057E1DFFADCF903B10F8D3D4D35222E4584D520D6FF675D3EBE9FB43ED1B79252648A5E0C2552E388AA3D1168790A09854F1151A94DB4E5AAF1C941FA61B196D869B16051B75F56AC1BC769C6E7A7EC173264A2E56BDE4BB9952A422855D65AF1C209D561F8210FFD7C2FD6A540BE788BE3D2822D49DBD2C6B33299604A835F07A340C0184CC1854C2013817663EBD9E23F3B78DB8009E761F1B38C2DA2036F26819D2DC68AC38C18FC15EB00BDBF5A11316C7B6075BF9DEAE9B0A651527DB3E3B3039BA01398B3923A2C40DC4706A0BC186D2F8FFB124EDE35E8C427FB6FF05A3C2ECB81E275D1AE370AFDFB6F731E27F4B22B877B1990FE479239526C655796BBB8545051527ED0E532E0440048912C64D0913227C2F6657B8B80FDA076E49B7E3DBA1D0E23C9D7F43280A324DF16BEE2A87B87C21692FEACBC3348C9186DC6C0BCB7C1DBEC60AFCF4F1D76FD3D45A24ACFAEB8E7C95145D07427CD67003019AB57DC233D566BB9A20AB82ED4130D9B4C0FAA6F2EFEDC8977498315FED436F67F3B170877040265EBA49415B1B2904C8277A11598432B973AA63F628456AF2320D3478FE669E2835C00D13EEC7B6ABC6BB94F1677C9A05B2D0CB87ED3E529AE1D2E3354B1E30C6634E10AB3BB0F39815049DD5321B11B80CF1D1F1426A413D0D11FAE969F3BA266F4F7B60684224A6279380D08D46FFBA2E1D684416405A02A2AB2E260ADB23498AF716EE58B03C8CC442DE0EA201C4DE39FA7038EA4E0E1544BB08F149F57F03FA910E09C27303038EDCA21A618A54DA87CA747763EE6D4D1DD4912AB7E3BBFC999939F82563B944CFC5F4460D41A47573DA92CBB28439BCDDBEBFF16491C404B356E5889D33A034680F8648F2CBB1888FEAFC410FD5A3C8ED85B90EC875D7D4466904F5D4A4048D8DAD848313232B80FEBAA09D4D86F70045C0C2499A93610DD088A6263DE5AD71067B9B3C82E20658AE98677889BDFEC65C2574E4AB7C9059F1C13CBEC17EC630F9E5B891DCDE1E81552738D4C8612F3BEBD570EB39B24EC94A153465D1326765D9B8F23D7E4AE3F2782F6F9738C189D0D20C4DFCCCD37D9A510250F0941423CB9055C7BFED84520AB119FF921CF81CBC6967E9CE1D759E5F4481ACCC5881F9328093B63ACB7D04404D8C0FAE8747D39A270399000CB690CDE17A46E81DC5CCED183BB863FD7A535CCBC592C25B059496C45DAD179B83EE02543B5EF93213E10E2BDD480F7C7D007CA2988942F65E46B886EBCEF05498C655048C4B32A081A059A28DCF4D84AAA586F0291F322B25D186FCB5ED2DE7AF7EBE58CD8314CF846AA39C67E2F284162524A14BD2765642B31F31EF4704548C13D5F5A132E983203EEB91795BCA934BA7EB26DAA5450745333446D2B86ADE99788476A3417DB7FE9E53F4906CAECBBA984657969B4592F9213612AE6812C215D5C6E28BC89BB76B9CCC937BA4D4C6368CD4C491BDF41B242BD8FCF9DE2D35907F08AB80BE71EF90F84BFDBC6777A020DC97BCA1E963050FF991A4F0E1E468813AE1CCF05B819012377334AD6B5A41A87A7D7C4F0AAD241FF7D3AFFFF40D7E6D5E62F9884B63E23C3A8B96260A6E9E3BCEC001D487E3E75DF4D35959633BE719FE592C4659970C0B67596E9CDA4EE3B05237C02CF2E36FFDB7CAE37F0BE993FAC46DA6F56B15FA74EB4511AEC2C861C2A9253259268A9BB95468FB02867394AA8D83EEB6464A65CD15DAB6A696FABAC4661F439F377560F3D2F3B668A7648BA4017DB5083BDD0D76B0DE99FBC06D7938D7D2F0566D3DDD036CF6A5E336359F0896B9B1E3B685D963A0EA70CAC175574C5AD41E20EA1332CF103BDE6B1C3B3F117C21E8FE7450866C5036C244856B5FAC176671270EF7225BE7CC36D24498C92E5306C2870FA7839DB1D7646A62AE0623EEF3199E8DBE32020B71F23FEF2F2BF3C9E0EBF0FDC629D97837B97D76C99398EAB044AFEEBD5BFBC35FD48767E0FD01FC0DFEFA6640DA0B47AB5B2B2CFD25C8943FDAE6AF46C3898AA1FD2E2DD0FE19D1A9BD0353A16ED03C448B7005D56D108FF2035E948E3C4FB8F0F928A5797D491389AC431F271DD1C8FDDA2B1FE623D410190FA81F74E042C0BE9F97F99120DDF442D5A4ECD1EC9789DBDFA8C8E577E0AC5A1BA7DD6D5A474CAC3C2C04E71A14DD2244A30D64B17E4C9B081EA8AF0175D7D0A6E039B6A289EFEEAA20763B1F106667745EE2795CC588721BFBCA6D659D81192A02FF2CE11CC878CDCE73CAC9B92A972CC9340ABA7A03C3384ECD28301103F347D35FCC9B12B85FFF170894F7D104F34D95B56A23C486CD9E7520EF8CC0BD928EACCFDC5D230D77EB9B19EE274113E1F8BFA79FCA93EF54B86900859BA6688FD29444E03E2F14033F076FF2F23711129099051C59E0126A907B57905A021F024D98736C3F5D1AA11C25F32319546F91DCFD4940FDC7C4428CE78A998694E6B19AA3CFF470AE4582666D350ACB02CFECD0E9EC39D1607912B892479EF94CC67797F443EE6BA4008F46C0E61C3819C5F82DE7A7802E62E7050C8AC506186878F08ADCA8A7674DC3D0D156060AB7BB08511D2F8DB46EAB9B46AF359135030A9EB46A6137A9419D97C7069147BF5065712B1F03BB8B328CBD1E583F59B662B64C0F06ECEC8B71AA2213EC29F8968E0F3093AD04E739F01DF51C644FD4CB65AEFC7073018DDAA81185627B613242260CA7A9270FDBAC3EBEF62865D0341B5392DD5FEA4827D60D5AD1C9AF0739CF5BFE0F658E72C436BFABEFCC403B87AD4B64F3143DBAE1D2CC25130E65D72ADECA1A8FDE09EDFD723072D538792F50A067BA78D7E4749F0344AB1AC1CC0E8EFA1A42515877C4539EDE35556D444516474628BE9D8B29DE428BEFA12EF99C985F1EED4F937BA4794776C63033C03EE356991607473835A50718E473D036F3C522A9DE2E49FEC2E686F17A5023FB7E82E94B26A4AC6236E0B656A938BD7A8575D734F53CA419836110DF78197D7DE4D45B6589CC31F5057759B8402F43ED9A423A7D69DB02EB9357B1E51207161E08FFEC8FE286722159C570ED4AF63EB554BBA582404C0E978CEAEC1CC1404CD15BA22EE6D8C98C4278C1714695927C2389D74BBAC72C2516AF1E5D0C52066A656170091B68A7E4C8399ADE63605E9DA1727C189C541A404B7335DA27843A32E470FB4DED8EB5EFCFD30BF15AAF37D7CFF4B545DD09DE3E7C8D0E77427B3C0764608912616E5DA2A3B885688F25E83DC8D632BC00015C2C8E6923A3D9E7C7344CDE87D6F0DEECA2006F644F7BDFA0A524759B2B16313501A1CB8D4D762D3E9D9C8D32154F69F0DBABEBD26AEDA947485FE0B40D1D7731D7F4E41D1EA5FC645DE31CD850273B6EF9C374CC8E8149960B349BA16FBDFAADFF12E86EF05AA38B6B17EEF7B55D27D7CE27FEC916DF99F0715F1DDFB93C7E1130EDFA44663CF19F4008D5CACA48262C1E8209D0C353ACD72A542B93EF18EC7E15FD4C9B1633161D94B285FE8CFAC30FBB1E140E9561A35715AF982370AB4DDF25BC30850E5F0509297289C0045BD3B3912843A9B0BB88CB7E961639849B8A0A75E3E903182F0CC6C7ECAD4A38081BEB18DA72EF9F9439DA7DB2B4D59AF6CB71808E604E56E1D4BFEF627226FC28875888BD486D0C8052068D12BBEC6B27E9DCDD73DBC93D33EE66AB63936C2273525A517280FB4BC33A724D20BB7D988B938018EAC4738D03D583A71C16671B87CD60BD6FDD101BF2AD07492A794FB8696E84CF24B9707D7706F0AEED606C3A7FB5B1DF7FCF86E65F6DEAA4CB8EFFE09FE09C622B34574E74D4B061C284F96FB7937481FA7C204F449BE9B2DB0957E428D177C5525C67BD75D75989EE98D97C4D0DEB5E72E2B0DD62E66EDBEF0D22D2EA97D42A3374B9B659804F1EEB01D7743DD9AEADDEF356C7C4FE94077411DE58DFA5035271015AF65FD1D78C0F17632C10EA02C537706A7C14E3A1D7124FCC11F579333A68A1AF70BD3E86F7B1D13A3B4EBCDE343F36A2B226DC53A0E1A084EE966272EE852A349D7A5606F1AFDBD81B8C3CB556DAE83D6A34ED4F9C06BBFFCD5953C51814FE0F4CF5A697EEF5559886D92F811004C04FB399E06DFA845DEF183160BEF8546F6E8995E403FE0E464008646330CEC4B4149DC464F229A47E0CD9F89C83A28FBD0C1E758D380C2A7C17A487191A46C04C23F7906418B69E2527F3293588952919D220EDC36BD9687C7347AEEEFC8CD24E91299900AE4ACF018FA2829E215CB13CDDECC918DC85BBFA317FEF7D2FFA9E3A30D9D1F1B9DFA0AD0D641E800850B43D7E0B187F2ACFA74FC5DBC99471A7511B838BEBD6E2744C3AA9AA9D46060C83FFF803C148C35209F840AC23D60FD046B461CC2D776AF51612DD166E1450B8A998052EBB25D1C8F426391A8571C88C2012A8940CB0B4DB3223CCB39021D20142FB5039A6ACB250994AD7A99B1A43494EFFBD8D3692F213B46C6CE9AF3477BD6061398CB19C099F27F48F4F785E9E741988412F070F39727FB8B74071E007210D939B0EC5D6148A5931D38A030374E5C0B575AE27D49DF49A77245BE310E49262C56A616C757A80C5989F27962303825EAA3AA014A4C9C9E5B3CF93F1A031F82D6A0C877277EC41356D1BE2154F03D807940A1CB2848A6A23B905BDE9A907F7C20E333586389014126765CBA8D5C8951CE09DF085B5F18A24E1E5D638651687CD2A2F75CBAF738F65A8B24E7C67E64FFD9CB8A34A473F11996E3663607A49EF663C4D87A0F65D92067132B5EF3CFCFA9B49FF66CB6E363BC1C7EAAC392605200A5EE704D1E754CBD1C9CDAB75355BCA41DC129722F855215220092CF6248609DE9EDC5603562F5C82B5414BA305CEFA60020E1CD93FC756241FE7A20CB4B550D980A7266E7B23B6FFCFFC4461F925A14EF6584B02005E1D795ECFEF93312B3369C52A8A2ABF99AB5255E8E09C05AC722F37A5E95AE46B226C7319411750562DBD0296F0CD1326055577BEAAF270E75F4433D5312038854C30AB23BD51F1246EC46599FEC1B628137A73A702606112CF61CEA7C3977BCA6701C8E5F63132C15EFF01CA1EDFA5CCA8FC0E3FAD392F21972F857B53F62CAF3BDB75D556E6857067015E11C5E217F5D1C1AB1D603571F9EDDE04499E23D39DCAAEF16263A5EBAB9BEAD8F61B0ED942EF261E0ACD309A903E73AC4E4569A65FE6490F6DD6842812DF61CD858D9AB54D3456C89CFEDF2621426E3F9D13FB94177104F6EB4E30B018C01F78CB4FA9C89F453B87FA7D4716B96B0BD2DC532D4AA7D8FB9D264B095BCE39BA017E8BB90D600DD2C58647B9D95F63783B4B90BDB83A175E5201784AE000A493A387E16F5F0C5CAEBF62A360A6A927B3FE4CBFD310A3163BFFF1836FBF9770583FA4F88E5A6E7BE5796145890A41FAE8BD1839110EC05C325012E19C69C3868C7507D04458C074DB3440A0E018A23CDD32ED35E7A28DC8AA8BD63C8CD0A9F4876B56C04D5D3D5CE52A0601ABE2AD3CF3106CFEA6D761335F420EE3D277DA358DF4F6813D543424653B256E325346F677EB7F69B2FAF9536DE80E8EB018D978484509804D600783708D48C4F7100E0AF891BDFC75352C93EBCDC22C36C3BDC8B579B31AD5F5C9B2B08218BCCD1B29829A365DF4A8D5259753381B6786877A5250DCE6A2B182734E363B39560D3DF44E88CD6394324765087DD1A77B3D8121CBA61F665F9B719E75B740BD930D6FEF316325B8B3A2FDD93AC488714AD9AB525248EF60B2649B70DDE6849BED793264062B38EE74270CC190C6A86AC4E106781BB3D09F0A6D7AA4DDBB0116D3452CE041BFF4247819FD8D78304088355D8DE741B1A6461C74A4832ACF4D4004BFB22F6C9BB397D7CADC6FC05AB74919CA346F9A54DBDA80F8E1303A1D43239C5DE043C2AC21E182CF49BEF9BCFC109BC884E41FE2D8669915701992200BCB938A745FB0994E6AD01187C4A24212DA421A178E42216287DB1F6A25E8370E4209E09057E16253BF477A061399AD1B3FE985D6A10D8B05FD94B67F878649862D68F285EC0BFC06B7006589A590AE7B116EFEFC871010993F4768197473BF22AD54B2A8FDB0BBF2B181A2A1CB9FF0D0989F2F68B339A8D8B27FE1781F3DD6F7CB972D73E3DD702FCD0CC3CBDF66A6237460E3B2F45DE273D2BCADB96C118DCC19F7C1E703BCBAA04DA5370A5CB3B78112B8E95B63328B43C51557AD84B3564749C2802B52EB33458394747C176E119E1774BC905119312963401C1DEE02964DC9F1D836069CFBB9B33791C908ADCC717B08FE3C0AE98C0D5DC0C22876595AF95A02AB33BCE3502A92E532E72D0E3455A3D7EE796B3CD5D61DB902B8C0057F2D47F2655E95DF55DA562F632A4F9A2CA8B1D2DB8F5745A71318C37043D3EB08F9950D06C1301F9E9FAF4EF560B238BEC483DF0E017E3CB27A251156221F183F3E9B0581838D04BEB5DFD9EFC26B979BCAC7DF631F1ECCB777E2617EE7386C8BE9834D26B96D80074BBEFE8CBBD203299AFAE8E6F90273B92182CE7EDCA9154E0A33AF9981B8CEC94E6A7C78C4716B47790EAFC771C3DFDE276E4E617CC0DA50F05099B9BF587127D1D18D5F892E0090C8D033F21E7382738F1EAACFBA493D776821DBDFCCBC24B1D5F877B157AE6BF6D307AE9BA54CD053E68594505D038747A7D8450EC3CB4F2E980C5D97A2AFB31147906CFD3E9000BF166EACA8D16A532BCF69526FB4B86B1F71D2C5F38958EB11F9ACC438CCE14E88A11DC431CE4E20B99DF0ABDD2B5AF358260A64012F4A408C6840D365AB95167B54FD479E8527B5FF662161F75FBA7CF790DBAA51613DE7C52A2A94E4AB78E051F32D10233161A4EBD8682389D091B5C4509171650ABA574F1FE954698268450E11D2FB52C1AB3E4DF426D26DC6D5319FB762CCCDD552F4B1BF4E82AD1F78606C644185AE87827F022C9508805472136DC48E71D1C45944413485EC1CC72BC092D6F9990148E12C2A3FFB3D8C9F91C18CC9086F176733A83F2CC9BAFFBBD810A99B66DC3B399891B2045BA402749B55E7E363F5D062427A9BFA8B599367F1D07A38DA16074F75A4E095A528C26DE4083B044055F73D207A6571196263D8BF5A53B7679791BDE49E869F0F58431829396A34415CDF4CB986281840BC48857361281CB4BADF8FF5B86ADC76FD3A812D7641C5FC88A21F137A6980B42FD3858E2A057BD4D3FF57A5ED3F5C41C71C70036E1762C0079DEDE282175072A073A90AB83C9DB447AC07E6BF99DB04BF276FD876F4E4816B0294333BF3403DACA2077BCAC3889B55E76D62F58DE7D1C49816D03DA2D492D1F3CDB2B6B186439CBBFAABB645E9745F404538BE8FC4C698765A3C67D01CB54D404D2A2E78098FC334F0A375EB41C3031F57FF9A773612445AD3D98BD09C949616D45D55CEF58C74B4C681E813564F1903FDB56BE053280D438BBE5E2480CF279CE47FBAFD179E270D838F764C2E7F496AEA9C0800056F2E0456EAA7E59CB20432B65875455975AB37186D6B06FC7D0BEE743CB974DF92B19F4D2EEE82F36598F8E400DCAACA4EEB110ABE352D3A0F58DEFF8D51DBDCE5C23E84D1166FFEE5428541ACA407B9578E4295C3F79F9376384B630D25F11271C6234B9AA9C1B4C8015AC2C73CF768B9EC30C61BBFEAE1426F72FFBC995A834C9D4FB8350C301133F123313370C33FCFD711D1847CFA84E782F4B39762A02F9476D5F45237A29E3E269D16DAD60033E0907D5431C1CE36D37BD388024A020B612E1DE42492A3759AB82AB393237F4A1AFEB8217D2733916B7B610342C0D182C17BFBD4556B071D82E6C6E554F2127654C15671FA1A843347BDFBF9498C7B5E7636318C3EDBAF7BC4BCE123698A05538DD5D42F01970A41A75F0A46E61520911D86A39D892700AA23A033EDC836EBC17CD2EA274252F53A4BFFD5CAD88F8066744C737B364A0DD0B5FFD96787F7D18357DF728FB66B212DD4DACAF7218292216808E7B81E3514BDA947E436A301C4181CE53A298250835AB98DC89D0A3D6240C57C699A5BC31EC4CBF8C111149CF6802942256520BC7FA22968556E2B390E63C9DB7D0AB79939924ABF068BC3D44264D607F088A38FA67F8E25933091BD3EB0A3590F3E62E63CC6C66AF66128F7C3F97B76E62F1AB82F24D8C147FB2C8BE207FBAD7E5CD355230EFD48DC9FDAA4FD1C970781674E901D35D7C651EEFEE2356F825ACD348FF0FF590E8CBFA0332F77A063581E6F19F53CDF1BFE952585E93EA13A83BBAD06070850EC824397A9FF13227F4C60D65B67AF810EF1BF5D5EA95A5512F95AECAEFA25BFBB24CBE6785E91A4874E81E465AB91B1F2E990F37AB145645F2681B47592990CA78264DF8902620E796D4DA9A260D1BA67DF9BB0292561FACCB2478AD7F7D7CAB3DF179897596604F2B0F1E3F10CF842C311F49C6B5EFD5D73DFEFF59127384D3B4D855F8C412E949E3A941782C186413946DF8AE33C9640704CB0D930C12F5FA1C4CEC5883CDA699E294019562948AB028548FA974D6C56AD667023F9C417F067810C4C7E4A712FC3417A92C075423A57C208AF683DDD695AAAA5F027CE535412DFE0029B292D32B2366DF978294FD263DAF8C6A6F7CC895BEB1437CA189C2AD9B6FD5BAC06DDC3D075DF55BAA6E75865CE375DBAE862EEB7A51D0DDB5DFE03234CC8F14EA99110DE78A3463546C6CCE5F7C623028134968C59E247E642CE17D8933B6701DB7952FBCDC6CAF7F2FD24A241D82D8BB1C0F5D55BF55E57BE4AFEB4200C1C57938F4A6B1BE9AA02FA86AA811577BCF1D6BE545D6F12046735AE963DC7FDAA9A2F7270B8BB37B3BCEF7C73F59013041B6CF9FE10FAAA86DE369E868FEE7A37F62E2E9CB1409DFF11FBB09A76AEEAD0F8E443582319F6F74ED0AA3229BB7A50043636E881BD139EB7442FA35F5DE1D6CC227B921A1343E34030D2F1F361D7651C487282C907577765161DB781C49655A5F87BBCB68D08C04290B4A2A94B61BD0C7CFA41821B7F5641B899E90DA026290FDCFA4FB956414523041E14ABD7B1AC7CDAA1148A03B6EA17C49503F01707BD3373EACFD4E248BA0F8D4B845251BAA35D41DB186E10464F6FCCD2CAFC9CB06FFE9DC97FF41E07084B00B7B31FADE0E093C8968D1CEEF9810986821F1741F11A71F5F20C809F54852307FBF33A6C33C6A230EC7CB2CC6C44A3A53AFA49477037E55BE691ABDF6D4A852799453930A4B19B7C4DE003906A0001E0DEEF57CFDD2B50514CDD6F57FAA2859061678DB9F8B5AAC67442D8B737F635DC297E3A46C34735AE4D2C607B06964D1FE264B7786B8B0604781D4814E2A81F3A0250D4EDDB77C121B962D0E7109A738630557F5AD47F95A0971A58704CB5B53AC378781B48D67FE5D5349440261C58C26D9370DF37255CFE845F7B0F735CAACF4921CC9D55B3431C6C888787D7C2B436C9DCF1DB94FF0D510BCF15DF0DE42AAC7640741B4893C960FADDCE4261E6284681BDBFB0F471C864FD560DFD87DDFEB4EE7A1267E285BBF2966F6A8BB408A105034220F2565E38F6A15A45B7FFA82DA63965BF44A182FB4672E90BA7933A0120A449323340D0368CF057DF299A8CF60035170D197104B394CA9F2A05983980A1BD93CF3AF8799E613BCEF26234DB2550A15BD53FFA306D3F616D78A6204AD1D50FF4F9972B0CFEB48B76516155791C14E0C9E18457900CE13F672882BF423400D2E6FF94CB16BF3071F44CF2DFE8317A9B761FDC8FDE90D7D05827521B070492AEAC90187EE48D93374B463C3381C7D80178F54C676479BC92470FEA7069CBA95BFDAF099A994AB8244CA786E7767B8400464BD08D5C560D61F27A96E3886A4E821E0087E7A56F96DC6F6E85F1FDFB5C82FD7BD48B63EA794BDE01439FE4C3D7F08864263A0A8B1C1ADAA5DDE86B99EB2A619A12A1A76A39D8B1F04AB55B67D15C7878651BA1F6621658757B890DB0D2BB533BA1C6A5E3226DB4FEE7D561842EFCB5B459598CF5AD3F98217CA720B6781E83C2297C96F4F51CBBBEFA708AD4B3F682FA0C67C82A5F5797030E0724AE9715A911CEE347E80F774EC780DF7E2279924F67ADF9D07FE4F56DE99E06B58099E1104DCE62CCA82D100D90BAF44F26F19ED7AEDEAE609C04C530CFBEBDD161A2C324A382FC8234D405BF900F0B6CE895F9BD534A6474680A7D63C0CF7B4AF1D1E93958CFC02FB379AC09B205708A68D11683B9282564C06290F5E6B57E3E7A75D30C9E21DF8F27F85E1FF347B32105A000BC613006BD7FA6D845C8E6D4053FF012D0D85F99737D045871BE017D672C8FDEB16F944E3020BA7FF0351A303A0D3280D71CBDE42F55657671A79CA30A7A33E744E74B34D27453654DCC8E87911B3701FBC27CD16C4D9D6C29D1BB9AFCCDAB28DB6C2B42C5D6BC1D1386AB26669985B626BD54791930CED4A13716BC9AF8F4DC37A04184FCF711EFF515B92C943E53879B5098BCC4E87B98000BD0BA2E1CA3C7A97AC95C1AD145EBA3950B154888272A0ED49289157091DB2C55D43AE77FA3384BCE92E5840459B405237E194B6F5788F16B217D8BF7539EF8809FC7AE1BA931DBDB2A7D15F139EF4FDA60F02FFF9462777647D675309AAB8201B5FCC1ED7AE066FC0E4F32D260DD9406BCEFE7DC5DFB38D66CFA08E5CEDBA636EFC23B3CB7AC38FF7C390542C9814A86D2D8F676720B7E2FD93217F916F10FF34A1AF34E3B8563319E92A3BAEE34258B4DD63FBFED854E08B1A2F4B560FFC40AA1048F081E66748E05EC3EA02837272FBD9CBF1A658B86B19B7DFC63436185D02C6411142291645692A92E3EA6A113B5436B0BB78990942146956795DFE003A4AB6D9ED875FE7E5B895EBD69C43BB7317CA5C97BCAEA97CFC6068431B24673FEA931EC1DC1A3F72625AD531CD89CBEB0E07F47B26971059FEEAE3986E23286D13BADEA3585D73F1092E41AD041D59120D3D25FD3BB0AAABABA738049C91B22649E715F3710EA51C41C1705C4F1FFB1DCEC85F0EE704240EA8A20526DC01C7C8389B21DA979B99FBF445805FC5E7042027201F3517AB8BA6F5C3BFB0BC7657337ECCC99CA480BA9C3D36033336AFAC0BE172AF430A98D8462D46453E935805E594C18C0EBF735D90D5027067006193854E7DB6424688BD715A7BE72EAF93C2F763F3BC340EF4BCF90B03AF20C28A59F72114F693848289873BE3869590A64658C0A3938A414BDE86BE8DBC25165217B1605EB0402FED48DC09139751DC1DCFF532CBF599E9AA13F3A72142E05A1D8E47A4044269A0B414976670094C9785811628718C6FE5201221A5822E29DAD564B6EECF025DE7783B7842DEA40D4F72D083D112C608C596F25E09EA85BC6CBDEA39300774301C1C36790D7D9C0B59741F6B53E16BCABF8120112C81D70F30E44561EBF3A3A4571F207305BB3A292C46C46E285C246EE9A7442F869711F52D921EF379DF7CFEC4CE64BAE4D7AE7DBA3CAF47EFCEEE78B477C02550D1DABE4FF4EC67A38A705F60706D948C017E333B645C0D80AAC1CEA393CF3ECF711CA3D59ADD7CA02DB6C5E3F259B4ABC138D24C47A650EFB96AAAE93E69F08077D0CF38B230F199C3B353229C529278DB1F5846086BC8F5F54F9631423105673FE92799FFBE5DE6ED167658BA5DB5AAAF921926FFC27956758CAE8B2367E3C5C5C6CC81DA875AEBC8F3460275C4EE6EF43570B4F571994C7690DFDA3DE311F2FB77057732B19E6FFC96221DE1DAAF9B8CCC21609160457365877519D2B332FA3A85B9801EF435D04DAEC3643CBB5413A036CC1AA0968A40F4EB5A76D2D0C3DFCC53C97BB3896E855957B1941FEF59048562171F6241AF278F6D6B580B4C94C5CED65CBC0F810D46E864C2B567BEC920F6D1DE42CDF32300805E6022EF184B43C1733F809F98B129C937930B984F5539F574AE144EDAF7BABBF379EF1A1AE69B7B4FF9212BA817A4F223FA8B182FEA231E7029F80DB126641725C36AB4AE950725435561C6FE37F960E37927585026B8ADD92E4ACA3B4500F0CBE078680D16DBB90ADF6A127FBC7F791B4F93D5463F8C71EEC1EBDEECA881FBDF3D2940C2EA0F8E4DEA1074EB5C0C9EB34534C9C3992E988DAF8979FD8AA90F540F028708BC6D0EBBFC00FA946DEE5E9D01CC272A4FE61E5B86FF1347340FE64F650996F65E5702A61FB53EADCD457A5ED66DCFE1B019A79104842C51B60142267392DC51F86F69367C25B999B3153C1B7895298B6B1B43EFCD8CEC3694F90BBF1A417C48E5CC4983782F874A7C64E05BBF462220950DA9E8F56BA324002E91D934469225E57309C7F562407DB900267553B85C4314A63351F20D57DED0B3D210269B09B976C07878C324F74758D9D507A4CCEB4AA30CC9CD05CEF32F1174C7B0F7AF93875F66E3A7B12F163920825885CBE5092CB7728A1B74B2F3FA9A01264214761DC5101BB0C18D65BF972A3587F95B3E13F52EB6D1F334B15220ADA5A59497558EAA0F4ED358A995F7444B633FEB900EFD9528B51FD82F5AA30699900D3EA3F3644E4FE3F6F2900ED45DFD997FA905D91521CD9C898AF4CE09B6EE00A15057C17DF4C656E00DD876529CD75A169977962DF3F6E4CB6950BCA37A79C98F108AA7B02AA488AA4ECE05F702B468C20C81630F51F884AD74A76491DA378DDB8290ECB8F5879F019BFB416BAF1D9361126F3514557403415F286C8E77C0BCE4FDF0F4EAA96D19F22F189971155F749EC19687657B245D392BDDA62935A44BF6C82E0AF3593BE06745099F06DC4A66C0768F17916AA360988D5E578D169CA84AD1A36B12CA4929223BCC52AA9B47FB138E999CD6423D1171AD3BF87B5D405A174B0398A689DB4F99EA1599DA410098772B05B5D7F9AFD485A04CA036BAA9C71AD5DAA3EA5F1C757BC83F3C0028DCB93DDEFFD157EFC2CB29C0F8146D6704D34091EAF1EAA29AB915E652309491F0BDE632172914C132CB9A533E97F89F567A7A9B0776B400FDBEE71B49AAAEAD156753F5BF564CACE2C1285C4E65B5D8B2803A11B22350ADF79645AB6E458B1C9E2031C4D4D6361F77B53329C3530F6EF727225DE668A960FEE1F6D7588BC126D0E2AD23C2ACDED06AA2331E9D0E7F99234A391926F0DBE610C600964E89BE1842CB1F1551D5CDD4AE3FE45B628E9A990C872622C9257BE40A8A124FFD6B135BDD2EBAC05E2DDE5B7DCC13C76C27C8A3E778063F3DBB3488CC52836E92A89641F4559F377273FD51FC45550C727689CA4D5CEBB26263F4268502658F40D4EC2BBC0DFD0E41F16A399F02711BCFA96C2456EB8A77FBEB852726B0DE4F927C13CCB329F8B9BDD760D1DD299863BABF42EA7D7F6204BF13F7355610527A38E89F66D3D73522B421AF013197D649D64EAD17F6A6BC8148D9989E786AAA94FA19077292015EF7CABA4B1545CA9CA20E5A816D6EFF7FCA31FDFABC611253FEE80FF0D75518001C2DD6C604387C2656E1362A3EFC1AB85461A5B55C6374733FB6B17090E6EC1186EDCE2C49EAFE84B139C66A2E8308CF2370095B0129B6CE7FF6E17D14F79258BB3E555EDDEF12E634A5AF748BA40735B90BA1E7DE7EA00D2F4A8B3BED32BFAC17D10050B420DA32EB6D14035CEEA1B7951592AD75FB751FCCF190452FA88AEF45080161C5544AF80FB0FF93C62B02B2E5D1966F77760D446F2625C3FFC91A07A5E852BE406F1638B521579FF299227769DC4B88A805E168F08ABE606B5D745433584BEED712453785B1C01D2B9F1020BDB7EF11936F0BC449EF26DBC2D5FB35A2131BE9C0DE2746DDB6D0356294D0E09076C9A77A076F6B659B7B4F54A06BE2F353A3A0EDC6A5123598DF9BA1CA852A5D1FA16877A78D88F0B367E6C4471758F0663A7498CB1C8F13B03F0E2A941DA89C717A15143F4ECF594B0DE2E43B657DD87E4BF536ECAF3820127B1FBBCC0BF2E53B9E0E1CF10191BA9B43D4D33FAA379B1B543C593F1BD5CC05E0B7511E8D4925BBFC5923AB0E2FA90D05ED580F56071A62A334408D3C454C892328AE1DAF16CBD530ADA7B858DA3763BACBC989F056EE1D46192CFF6DDD7F066D2EEDCEE5BC6B72551245EF8D10389984D3B3455A7B9664475CF6B837D72D42E49BA2F61298DE9BCC707209D7F1E56BCECE1B21FDE69293D2560B8940223E0AE966459C249751A2BAB98323F184532F4D6FA396D5C0AA2A4A41C75C638DC3DA5822AD7D3D7D51FE0811ED3673D875039D3625362D7D00356E8461FBFFC49FE1B0624F6D30D550FE1F5FE4211341B9D57D210237902BB7C62514AD872C1CA87976809717817AECE1E224733079478A5DDF5F2A067DDE111A3FF911D0B511A6AEE16046039B229C00D6D10317F66E1202449DF20CF28BBAB4112948C65DD7342D09059EE2701B36E2ACAA6A9948F818B61B9A3155729EEA670D4AEDD6F0AC314DB12E0DA62FBA01D419F7C48B09BEED87F7292FB0315A597CCCB7B51AF776509818A73A0BED7A656AEBD7ACA2646605797940CB737548E83653E204B6A7A5AFE2EF16EBBFD73484314C5699EC8D24E899BAA0E202F37E3C8D8B5F75ED34417E608EEE4B26B453C07DFC6E62FAC215B6122CB14A07739E86FCF816398DD49970AE8A216BDD8C4C478647A8D07EE8BBCE6631C22920474154B3C83942C842A728EDCE7466565D9A6BB030CE684B23CE558D0DE0D584768E83A066B9BF6A12C78D173AA3262866339B86EB8A8D5208159C5873CB29E9C4C0BE918CE4E8DA85C85E070CAC29850CDE48E2DC5E0609F419CFA46EF650B9022273AF14BD9EA28FA856B7BCB580D8949C1F732F87EB34BC1257205BCB6820FDF3BD1E7B9C99E114B3C7607D01235E111E3AB1F30E8A9311F0F30B601C833FB0D8C4D76AC1B02F85E93D4C3D0205F735E20223410CCF56317B6A12D07F3BCD42D2023BA0676A00E7268733C41C8C7DED2555FBD2BE09584B3063BE41BFE93340955788603F1D52190B35FFB8148CEC733CFC1BA49F609ECD3C4512A99308043F3C377EB65870535388376C2C748D18A748F5828B3362666C49F803828B4A019F26D6A9362726E32B650A85523484C4BB2ACFCABD16E754EECE0466D1B370175C37C8CE9DE236FC58ADFAB4FAEAAA12E048BF40CE084467C8835A1E209D2CD67C5BF01E0D62CC78A12130F5EF2E3CFCDEDF86D489C4C5D9AB99484CDD469F2F8EE5E14BE43B9EACB92E72237FB54F9615627EEEB193EFF888AA0A908327C61C50D20C613C933D736F6C3D7F60969A5D3770275081365BA8A57DF600F10A1652167AE3E18AD3715532B7C4BAD97980DFB0C4F69D9137EC7B21BC72AF16F0BEC30B94A4A5C2F55074ABC6233CDF4D8D347F4FA942944D9B2539D0211B24E2C7FCB56BA877371AD7701ED087269DD643C4B62E4B40D3F6572C0730E465C5ADE50FDDD11BD30C07EFF35AA6218D0B73B22095D320448E0671E1CA59BFD52A517A50932A06C4897BA6F7E7038A39C92C20F6DB18D6F6AFB3563D10BDF48BC194B79FEA6861F1CB9756281E969968B65161D3980C4CBD036467850EDE9397321913D57C1EBD7743A44A12E8C85F8D2D1EFE2A8754B5ED0E93EE9649C53F28129130DEEE66E58181787137B262E1EB3FDFEE0604ED1AFC798B198044DD5D0A3E87A754C7EBF0852953ACF3371BBFA0FD5979901252EFF69473FC5655709EA193DCA2A2BA63D706C84F49802684F80C576706FCF1BCEB2892B9179A72B7CD886AF36C7D3ED09270A4077C481736BB69A333AB4BD864AEC1EFA944A591608A2469C85AA6431C47F657AA9C2043F373A69323E735B56BC8177E1E37AB03BAE93A7B304EA1C5C52B244FC265EBD674FA7F1647E29CED527FCBC93CA7A56A4E771D7D2E576C40B2EC736DDBB4FD7411168C5C568C446D1E454249E6F7529AD83215EDB62F57D25272F351CB2C40965B1DB65EF5835923EC2D2FC7D8AD56B67980A3DBB77E6C4415F54F3FC00A790DBCF39A2FB699A20FC634F1B1C177C37898A81D7693B21020C6B592E5A6359AE395A841B434B675F1C30A9CDD0ECF987ABC2406178EB2DE941393AB4F96BCD43626978AEA548173413EC9DEAE7B53B175AFAAC5A1E02D6EF7E27AC41268C1FD8DD83D1AC55ED45D087083C0D136048B7F61EADB94C88CBA5503000A90F91A39A8C9E2DED567F7FA0DF605AD7870189600B941B99240A15310E7B3FCCF5ABDDB56D50CECC06B4303BA39EFCAB2F7E9F5CC8F542E96034145115AFE3788DE0A4985EE1929D4935EF975E760DF7FED8A257718DFDC5A0B4B87024C59DCC6FEF6F2715582023C3C80EAADBC7AA8712FFAF80CF5E159CF5418A1CB50845C97A7F19DF3CC5FA344562DFDD819DD736E9ECEB7BD57AF324256934CE6DB0CF295AA0ADC5931D339027CCCDE1441891067DEA40F69F6EE07187F9B78DDF6D59CE02EC3BA6DD68F06851B10AFE9672EF84020CD53ECA25B3D5E527405AAADF60593A8080373A387111EA898499F096FF46FC588515E8CF42FC33A8CEECBD6E1B65BE307A5BFEA9CA59FC51A382C24CCCF012C38DFAD3FF3DCA3180934DD6AA52D828439F1052A959DE23BDDC3EA3F2E8CD70F7A765F77549BDE6CF8E444762DE51CBA3431439D1F1E42F1773FCA2F90E48126A000E69C0964B1955F586CDE1895419083322FB4E6528F61768F8BE4CDCB37FE9D02B27193A0BD79D15F3CC9AC6DDDDC82B02201BEAB86D13EA560F7EB5328AC0B534C52BB9D266F291425EF1607A19AECB9AD681815EC4FD1888BF5449421D92E473C21BD44F2C419A0B3E0603EE3C5C82E56466C5A76B76F81A6C394BA693991A5808334EFF1E996AA1B1394A4DAAE00995F02E9518053FC744BA391214DF2464DB9F01A5A53870173B3E8FB6B9B698A8DEE80745D7F71B70B811867D3513197B32115882348FC704B2AF8BD6FB3BCCE30361C1198B84865162734719D88BB62B7431FA39D452E0A1B0A7E45534BF76B6AEC48DC25B7487FEB4B5FFA9C56CC7C83E39AC196987747D664943A600B106F0C3D6B2D0D4425073EAAF89AB33BF6AD76B151CAC32A670A2B03BA31FBDB48B949D3074CD9F56D39553708CB0EF2BC96170E2FCAA3CB2811EF1C67FEF6FE85CD450FEA37A04A07EA732A696EAE8E76D497F5C350CDF72F8970FAD94C03909F67FC895785D5DB6C3A68641D68895AC8544C6A1096DC4CCD45A68BFED7ED86961B5E035E61E9C126319A7B3C1468457C423C4A4E2DD1D42BB90C8BDE2A162F999A8C3A99BE998B9DB7A14C101CE78F08857ADD9A96059DC22592B90488D77D6F0A6D459CA65FC947D742714A42277A79745C73CB157BB825E65872D9BEF5066C444229ED1A097AF6B0308DF2793A2284F911C764BD1158742EF4109CD8AE6111DCF8A40BE03409FA6C430829D0C9BA28B466916C67311F8BAEA2D8CD2DF9C95094E4FC6D43F4491AC5FFBF05BA6B7DB9D7FE4A6DFC386D136B1710DA5F30E67C8DE97A981895476B8E4E0DB5E1AE630C8034F949AA4095DC81EAA0F645B0B440138AA7C5C7C5FAF3B57E1504A5FE477CD61A355D9AA66C39FF89E2DDCBC1862E19102205A9F343FAEA71D4C67192D4D5A1AB08BFADAF6753244BE5B14B1F911700B4A947D53645DCE170401135D0D7E968F03A9B19D2ABBDC94BEE623FB64C1DFC4AD9040197C319A79391016D6D44B8EBAAD5B2F1AAEA58AEFA21B5B3D9ECB66B3B70626AB31CEE5CA759499073B4FDD96457392E58C0EC871B95C7B77F74B81C4CF5B1B243BD35F4D540C1CE878E80AAFC635D363B9D72DFCDAFF62FA8339BAFF4DE1EB3E146DB93E7E444403E0D4290AF501C841B66302A345F5541B1C797D630B5B7E788A793192CE1F362B22B91A837184106D852391A241A903E3BECD192C4FE52586BA4044C4FBDB20B711D2624B6CC13E0C5EF62F2B2E00CA516991C7572732DB94DB809FA0535D2E8376685506186170E3702903A6D08996BDE20F74BEAD391245680A029FB439FFB96EB829F0BFE58A6446B00B4E1894BE1B5017F706156072E2DCFAB25A3BED2DB310DA1A7262ACF24A65F41FADAE3F81A32077BB9CB64AADCC2F92B95EE56F20CCBA24DEC9F5F75B36EF1A101D0F3FF6D730DC199869F8F26DEFC6F51451BFEA2C0EE77CB17422E2790A8B29573405F112EDD704E3F46C7CD8ACF0E495C6BA9ED448B0B89A9997850F09A813FB23788681D3CC04996E931CB00A879E2FFA1BA6A63F9D3BBFC20405244B0F838A040F125AC2B4999A197A2D53DEF8CB167FB7E37DA3862CE3ECB57B081DCFD98894E45C6019B9229315108E37DCFC57C9F80201486AEC4368224792A5CD4ACD64D6956A334DB4614EE5EF8F98EDE0B4A5CD3D06819A4858EE0037DE64ED93BCC7FDB47E90409638B3789BBC63134308B972765565651902A9CAF4F310E93BB08EF1E4B325D414DB5DD7CBF660A880642A27378A7427F2627BAB3444149181C54E9D3FB7967DE33BED89AAC255A47482835D17E329ACF3F08F23AA1DDEB730D9602243A6894989EE2D900FF6AC0579864C2361EA56CBCE2F39A75A12100670AF3FF1A36E98D1931D17CA68D8D031CC527EF7FFFB35AD6E046F4AF1B2B3F66210D978F8607039BBA99AFBC6A499A5A948C5C59055A140293CA97306BFFCEE37CE77C114478D0F73D1C8C9954780830D56878EB786967DDBC71951ECF815CC4266D66F84195CA1AE0375E90017FA5C66DB8329D668BE6C0BFD85742088B7A3256A3277AE2A1F4E72BBB82BB2A59B08FC59FE5F24EAD5DF43D95917A144B4DC6587C893314D5C2C427EA92D02E6922FB0B60ACA646092E0D4A127799FEE4B76587F26AC1EB89BE0BA46F2A212ACF50D93D3345AFE72AEDA1A0F855C45AFE14161E22DA3E223CAD6B47E591896F4283F10C4073AB524CF5D0ED88F979458BB928F1C179E2C5914B4CC52CC000383D154830A54332D4C0E652F98B91BC086370B04CCB1AACA56C9A33B9F0A65C33467BF45C74905B67607B83FEDA063857AC4E326B4293483C8841572174CC8A384014945F5C3072C5575A5BE322E3F2FE3A7E30F3F21118FDDAF23645A40E0A359A3572153F5C3ADBE1BBC4EBA5E063E9F73510C5D1D4326D3D7A20384724279C3B4795C68BA332EA706E8127672E41DE4BF1E8B5EA60B39CAE2C3B7B21A225115BAE051FB0401A69A7FC56AE4B7E31CE2CD575D82C8279E8B8499EEDFC134503E6798056324B17B8AB045FFDC2A35B190B39FF212C17C36537A1F99F2EC3A4CE693DCEC7DA80861FC6F3D064B82CE5581F9781289A085A300CCEFB6E80A86D961408250846A374ED00F5379F446FE6E551F608AC3D71346B738C75DCDF63E19EA79AFCADD5E1E07E2F7C0AC709F6428FEA1DCDD835E3F56B026CD8DC9D4629AFDA9015295C2CE55DFD9C83223821682B5AF876B1CE156343A0F4C1655448FEDBC992602BED5DA4B299B86EE2F86D02C757CB5696B32D60357B21F9DAAA06EB3BE2E9117D2C99DFBB5328B3636F41A06A020E3CB47851891AC3825369C037B0C0D8412204FC3D5FA9585F3218F01295375A09463AEC65F591A594551E19DD00D5738086A31712AE9FA7BABD4E9C10E9F4DA82C12EB2F3319E852B96E61EAD2F85BB6765DAF874FC8AF42746F14B8FA489DFAA9540B4D0470CB31F99B10C335F672C2E06E8A2378B9DD28E8F56BC7A4C017327404C79F1E8E67BCAEB5C4C793C176F0A3C1833007FC44103DCC6E273C9FD1909AEF1656E2B5756B7F4D69F4F2EA576228DD794777BEB2F34296691A1FC38AE44FE60A44AD894CE92DB77FC0246C779C13E8AA16648843BA68CFC5E4E02FB564B0ADF3163C5E167C275A8C15E58659E2F70A3AF792565422D3327CCE25C9D488EF3C32B195066BD27DBD44EF1A20AC6AA22250BC0592AEC734477E1112DC3913F6B7CE323FD1F7B3F8299B8C9BBAC23487F735070AFD5C3627506D4C96B0A1427F7EFC07EFCC62DDC5455A77B57D3FD0B8CAD30A346F8C34F42D87827FAFADD54264A323907A89334C0E7F98AFC9060D7767BC9D8D261BC0BF64FCA389BB192A9B4B00CB566D254CB0226FA17F3BF21E2926CA52CE5DDC401E74A92C7989552CA66675A9BB9E9C198BCFFC488BE1DD5E47DEDD94015BE09B4430F77B7E7E40E42A52452A26283CF3A29B02DE3398DE5179773F2CCA4978059495B9DB13069B00107462C0034064A024DF3AD33C063F9608783E79E38F706B92AB117029EBD6156CB5D278149875B95AFBE877A21AC3128BD6D0B11D31DE7A2BF7CCB68911309BBD2215F592D56AF0F700D962E49E4C6D089548C7587B0598374C3D7BE80F7F20D6855AA28A27AF668A8AD3552CFDE3CE0B35DCEFD5240C8FAAB89D013D0DDF5B66E60328AE32BF4EDB8021E43762E96E5999CF23BF2457B1CD75D1457D4926E7C2A324BCFF70A7CF59047DF3F08EAF2922CAE6A7BE1BBFA3BDDFB864AC965B7FF093CFE74B53DB332B411962DA01D4E6C62CE6731E893574A097328CA7606ECF373CC987F98C31AD74EB4A863084266869D28C07F9C5B5F10385EE44E463324A81D523DFCFBABEF20F3F71FDA33B7EC1B2A35A98F01D13693CECFF23E00CBDBA2A2D09C8A86A819E82D781AE88B9F207889EDA1EBC54CADE6A69A564ABF48F950FFBE7A86243C544A78362D9BFB6CCDF20CEDE386B9E3F8D7EE0E4A58596F095AC1B99E4F787472A734252D6C00B177FD2B99A85D49B9C0F32D728F7D9BA4DF96D1BF6C365F5F4EED7D38727B339A223263B58560ECA6778069DFCE48703AAD1BFAD59CE298C6BB464552408946265B1E19C1FFEE000771814FB5E4688140E1333B270F05EC9345E8BDFA7B412F295AE3DD4DBF33D6D2D62582887D4CBB9EB55F5FE3C1BC32DC689548B66893356704968C143AD3CC2E48BDC154620ECADF336E218FF1B22521D183EB2D13B15A15D39A42A25B46F1AEC07A14CB805AC382DAC8CF96829B8F1D241CF5CDE5D849DEB242295D7870432EBB642A45A6C6F1C2786B88C883B9B47343E822978155D079AD9F6C8CD4A21479B32B2112EB0121C3C74E7C23284812F74A2B413B9A18D6372AA3E09BB04A262E7FCFB6FABBB074C7C603C89FF607F83DA32DA50F2A19C38BA0965BEDC7A961966895E17A20A4D8028FAF7B6947A1964601DA45643C5FCECEBDEAAAA83EA5420F2984CB606E9F3191EF323D644635EDD801130893D84DFB19E661E04188C6CE596DD38C11D1CE5DE1EDE0D15D8FC427842085D300E6801CDE02768E44BAFBB302684FD945C9AC722561B0EDA92E8D845EEB99F6FB1889328C74D6D9CC6DAB59D55463A613AF33226660C0C034B896075D9EC2F51165A754A7D2393E15955BE327587943ECC1F3BB97180E751941728B94948B6648D2C606D66B9BA1898FA28EFA38A413B066D715F7DC5F0C755B6A3126AFCB606EC6B12E332FD71E386ACDDD1DEEF1533D6386AE5994BFD857380874B14ED836D9DED47DE4760ABB05E80DC622C8D7882CD74B2720884DA747BAC3ED9A6EFA2287D5F7D6AC7821E79C79EAFE7A68D2543D7CDDEDB63A13FBA4B894A6D0B3E14C44876364C9FCF93DC066CE953E89851A49B6EDB38661C9316C82ED902EEB894321C84331F6646A5C1AFEF832F38AFEAB89D181D3DD1338DAA236BE0E87A6381D00845CCFCF4DBEC3D41F8AE1E6F39167A499945DAFE77601147EB29804A8B98E7EEB31DE20C84E9148BCCB15CD02D1E3B519EE0A2E4F70F57A69281E651B189C08D575D52E997E3A435B4CC86F938BC79EF4961CD03DF8B92A8C507DFB2DE4D5EB0ECAC2F3D712A46CD3EE01B8D4DCB845D23E53A2E01DF3FFA100078F7B2467A45BBB4A18D14E0CFCD089433959F07F6F60F651DD7FD9828069D340D048FC079E4F8B92824D54322611A3698FAF181008DB5E3E327EDC431A8F6E481484BD5A429D0F5DC55AEA8A18F719A7865B0A7D629A25F82015CD70688CC461244E4AABDCBF2CFFC2D73A3247F4264101FEFBD5759FFB83E8ABE9EF5B6662DA3CF7196385C05D0E5BD50C71D3CED424AB805AD632F2C1930868ABEDF493BB4E3A9DE538D8E35146320EB9F5B71C40E6F32E9243E6A25F503B68EB484ECB73C436930F30E2776D17A2E5F9CAF157F368E0FD9C26A9E9AE30A30E15DDD8A56482C85B46F973D000292CFCF0021577E5DCE8220353E23DD8507D0F561BBCD96F6FAA451E9C595E00CE0F99C8C40359B103D621CE0C837A3D1598D814BE6E22B7A509DBF1ABD2EA60955364791A5910414646F9928B5676ED590F41BD128A55549170211A0630BF5C5BEFEA204896C7FBB40F0C72E40DF19C95F3A0ACD641834E5BCBD26E91315DA34708E2025E0B7D38F9513945DE44AEE57077C8CC32C707D9A39BF098E4928420B3FDE8C74F39F81790D827A628B8F2776251F51095C1193B2FFEE8C93F49DF6D4E3C2E1BDA52F7356394BD5A675543493E04D602F332761AA1D57DF3EF8213E4E9B8D4BF6C8BE8BCCF661507C394CC9D5E9DD4D81DEAEB6D638FB9225247818710E4724111F522610075AE757AB5ECF6FF32CF087DEC9A04A7DAD8C613B22F2AFD31466574AA87CF0B8545B38C53A8F4597D5F1BB6837AF26114D72C609B624252722DD867572D449ED7C170F99D4ECB995B76C8DBD14F50F3DEA077FBE4F838A03AF1DA6757C70C5F3394092D7EADB1E0A859A8487F70D9F7EE523AFCA08DAA5F8E9260D63330773FB7EBE01373C3719129E483DE3D132697EC4C108654256315A38D7060C6F52B4A444EF33E87946C2537A3FB3B5FACBB0F3292C7F2498F0A11509FD9678CC7C678D4623DC07D8F218E4B65F2EB844D24D696A31483E1EDD1063AED60D7A110F7992E3E46F8C7D5CB1AF02D598440D79D649AA415E5F3ED033A8FDCADF8DBAC48F9905BACB37E31ABB0174CC08A9584E25B94423BF395E097E2D0B7ED76B55C6231F180D1A7BD969F6B874B9255138A1C3A2847EBA159C7EA281433A39D2F88D724B6350E846B365BE838F25B904E7B02B12ABE543961D33D991D0DA93310CDDA1EF551D7B6A02765DCF0D870C2BBF578BF8457CA1B599D0FE445B1E9C39E9C8756EDAAC6A10F62C84F60A27268FC5B436A323AC5BF4A9ACFC55510558C5A354D96A5D74F69687385C123C497543EC14C40117ABE46C22FE54DC4D2D6F4823A7F3DBFD3A1FEED428B90945B8F6B2C9A162F9C0287C758603E2C7845A11DDFC37B815A62A1A665C3FC003DC9F064CD5D950DEE02F48505CBE1A1E515E6516E926FF6DC0123E1E4F94587F1F1568DFBACC3728BDC1D153196CD91D9F6DA84ED6B70D0DBA7E7DB4A71B224E5122328D1DCDB9FAA98E88E9823A49E7560DF822D67C908E9AFF7D429E84350163E49AFA4015337532B6E928BE2001CA202C5D975A3E54808AF8E110575AD5FCA28185B2A7D8A3019B97AFBA933BE2F9CD5F279266EBEF52E0B92114AACC30237B712FE53DB1B8596CA72DC82BEA99DF8FE845D390B8DE1C00F24D0D9C619651FB16A280102CA8BD7FC3F7868E4649C636064F4D0EB06D06595A0023E6C5D32654EAB9C8EB011186A32C3E5DB9BA6489895FD50A26CDF1BC27D599F7A8BD1922B30187E0DDC54AD369CC61E958661C4FA76054C2C6658AECAD7D0AE23A9F36DB1B0E1141ED6A1084A8EBF8975325A1DE4A679BBD0E022BC35A07B40C52FA1B0BCDFE17BB6EAD099088963D7937CFA5B51ACCF722FE4F9DF99DADA8CB05C17B6A6AE884F1C7DA09049027D6EA570BAA064736219CE1DBEA7DB09BFAC777848D427BC9D39876B843378E100DDB87ED269AA91097FA433CA7EEC7D6210E7F100C449876F83439E3E494941D8CFB3E11ED7AF04EDFFAD2729FF75A8FB14A9BCF386ED8D95C046A326A9A92D3F316C758F6939F14BC88789B17F3DFB5AA691A872CA44E908AB966D5F672FB90196D71136ED26591404202AF5858D44C8E0B0ADE3441F554040E458F5AA64AC3D5B32399E453FA1565F4E71FC9EE5BAAC97552AD75D0154FDE48AD914F6D59800A7FEF91BFB6465A296E217E554631FCAC48FB7FDE1244F00697C2155A3161169225109AF5AE218D51D70BFD452433BED94FAFA5920B35353013BE2CD0C32B8AACDFAC6C6B4CCCC2C222AE845FD76630E963CA22F5214033FEDEE3296112F9C127865137CE6182BBF09D1489A1DFFA82D9B391A5AFAE6C80414698703EF03BA42893786FB10C9DBD21E7292E197A2959D605EC466CD202BB4E7BB1E9D5B9B3F07F55FD8637314E3D68C763CBE79982FCCC0147AE6D4C96F7A1C251BC35D8EE3A4F6FDD9CEBF771878B80E3AE481619D80B7BB7EFCFA9C20F11A0FE18505299EF1BB195EC7A93263420D183BD89335411CDD66B4809BEB30AC649CF76552A6F08E9D77C2E9C5AE05FE469705E2E6F44485395C054F401DC6CB9F581E52978BD93CD927D47472DC52D81960F98D60A061C5ACBF9F5E4434B31BC3C55CCD71CC2F2DA6385A3D040DE8B8D5F5CAABB6FC301FE3D5DEB95A00F01772505201B33464F2BB1D45A2F55EC907E86803A94F9340960A5E99C727517C520D338A41320E7E8BAAD6C4470300DB904B1848AC84F67F67C6BDD6AB71E2531C5C662AA9DCC2E84634A5ACA48C5A5CD1CDA454C6689E2484274EB1A2D1CE2D94876F4978987331D16AFBA205E1D81CF287E5E59A6DE000FFFC99E50B0B124E718CAC8FB51A708B42C0FE669894383C01D020E45B301DB2FE85B177FCDD1A688264A0327614A4483BFB689DAA49E8F59BD2D3943BA06F39119D46E5DCD0DEF78BA40798384BEB03292F231A62F7B6E456F3542425599B2BCF96978626543266E8AC0426B3C4346AEAA1E2FE20B54F70273A5DEB9BDF92B8B4DE940C48963DDC569FEA89B4A6940B7644E33D105C5BDC61C3EB7D823D4CF3FA0AC7196D6004CF6654BB4E4602974FBFCF6E74FB58A83540254EAAA4ACFF41C5E1481B2C38E7084B944684B21B7C661F92A28508F449D8ADE8881D40AF4A161A08C5846C78FC5C562CBD36ACB83284223B2891F73947804B6AD40BB99A4E7D9ED1912448C99E5B572760E53DFC434D06DCCA06DDAD3BA09DE063378A98943EFA0CD3E75B1B860E8D1350CB920BD6FBE30D437B96290F49E37BEBCD2FF9F8A4BAC7CF8F4571DAA9E788A3A411AE231D369D35055EA48D03AF54D968EB71F7BD14E51A1E617F81B492FBC3AF3761C601CF108DEA9E198BD1B576F94DB9A15975CA55D356C209E5CE1D8329A5D353223AE3C5C9BC55468AD4C2756BB54B6FC66FCC3B0BBA3962EFB4ABA17B1B08B01C296A578D5AD63F605BAB75C90924AD456D53CB72436F3A2086EE61D7C3479E0381A52715292DCB8CD2833720572A40CFF97928D4EB54265F3110714C360A0479AE7D51126C5CCAC09372AE7139C20C46AE13E4C41E89AE12097C6A198A979DCE9FCBEC5D1AF9D9189059E5E317B77B6E98C29F38E29A35FCC3BEBE3ED0267C5503BAB0FDC46C7D89766475F2676C80CBA71110F815A84CA7EF91ACBA63AF7933056DDA345D527DCB5549C9CCBD5B201BF9D0C82683A8865DBB4DDD057002025D088B7121C118B3A6C901BFF83DC111418A25B1D741562F456B84CF500F138FBB34AE1D18E9BD6FBAD05D0AFA14BD1FFD10334E6AF3ACC7AC2698BA10465ED5EC26B13265E5ECD1C79359095F36B1B5333EF87E78FC44571ECC00F294243FE64C4BD7833FED71F3B6471ABDDBBBF4C374519D24DEB11A8D2EBDEFB8D2CB3BF517AD92CA598040D0F5F8E5607CD879C75E15755087EFF796EF432073AB647C9DCED072FCC9DC74D78326EEC1BDC9CD3272180E38DF556715CD1D37DEB8B6BA06B81F01C26A3E97B9475B688D32BB642EBBAFC4406B7625944603FC085B38E5E4C9ACF0D0F92A65EC9BAEC8AFD9A1C7805854B19EF516BCF65125603F131084CD13BA6E72201B13C1897D0ACCB8C4266884F3439F6833D22C08A68CA0EB7B636D866182E6F42B35EE9E255F3FD30014F4EF3484EF31FB1D17A6FC0913DCC1443439494BDA221336D05CEF0FF168A9C54830066A6E986672EB92B2CA01C7ECABD5B5B40049B2161F8F52445FC27379B0706866AF20800C521BD0DCAD90E8F4367929A9D21F1921049FBFFCB2BFFB69B27A2A4FC9E48256CE24302A57B69B04D6E51469D5D7C7E41DB6113693322E1DAD218FCBBFD47892E8BFDC28FE1461AFC769286C6F75165CF945E5CD3C9322955261922B6C00CA2C006070EF26141BD8B44798110A9F20E86C52CE88D6FAE122FD7208C9216011D7D91750A800576F575B8EDDA2545B3D60310D61F7351CA1C82C90E18641FCD747FE901351524B9D0B92CCBE86067EE5F126FF4B2C582B280CC1549CB3A18D5D9FD25A09A67DB83A8F3F7DABFAA3C09CDF00C6F16D722EBCE259723B97017885B70CEBBC1C164E1A5361738B1F3FA426D077AA97AFC56F4F147D3EC04E52AF0CC518AB4CE8B3ED66A1EDEA49E904B81DF00EEABBB5EA8437C18C0282EA1AEE445331C5B0414C2E3CEE637933753B30FBD2160E93C3E7956BC032FF839B81179DC5C41CC81E6B8A74EDADE4F6EA0FC2077D3AFEE342D75DDEC1539F5C00F640A56EBA718A77A88E2E8070AB9663037AD66D9B6314C268806C2856E233D37BA73E61B8CE393F9DE86DF5C76610766DAF68A8DADD37C3146F59115E8AC18330977D7BBF677C755B79C902A50DC457FEC314323927BFD45DD4A5AB7AF351228986F3B03E51581C8A8D5E4F8C24ED9E14FDB5D0D6BD2A6F563D66A31247D4EA17CF6C158BE7FDA81DBA14B9A1549D5092658BEE5542BCFD42C8DB540447AA13F208223DE36AEE06BCC2F280333D81964ED05A275EEF56C21F0BE0EAD9D6A8F2C70660C0CB04AF6D84E0D18D3EF56504CB18EA259BDA23AC1D8CAB42BC340448283D9CEF770872F3B94FE85A23CD9A864F76FA82EB637086D12244DBBB9E7B2951D3B0B6C345E513883F261D3EE312A31017BA33A08586F58084A8087144CDF634517F42AEDF185D53366FF728C0E7C0748A776F3932CA874D3C2C48B30D01A5F579DDB1A038AE1E20D986515309A13B369F644A856C995C2F6942B7E6BB624A0DF34FBF31CD9F96C486E530A2F3FF8A43D7DDD578D72B1E93338EAACC244650F8BB37AA9CDF721B1EDC334755B63CD34AAA832725A883333A4AF4ECE71416146A4F05232968680AD41C89872E14AE1CE2FA65B7A3BC099FE265173B0B7159662259FA64FB70902BA09988A30697F110B892D7D6C763EF80D6E904A2CE47BECED5E98AB2A3BB70A73D6AF7175BABF8CF8F38F2AADE3BAFBBEADF208415A2C2FD4A1ACC3140E185A2534AFFE6C01EB30FF0137503349EEDC1F9BB263C18F427E2B119BFC692D5FF44421208E8AF146FDE964C2DEC3E1C9D5699ED01A7D7869A39F2889ADC98D94B5C678A3D3D8736BC17256367EEE3FE8EF5AC6453A0691D894F1F3202CE84EA8BA5A341D1733C6BD0150CE9C0019168E67768B33B64DD4C9F0E2BCCCF2FF7E370C2BDE4F403C270F36937119950121A840913CC1D663F32F01B665840EC9E09E5A9C345EE001F84B2C1154359BC066D29E0405941476C5B7B11CFF124F5324D4D090E2BC49C3E8D83122DA9268FF58B523EAAAE4493217609FDD5A5C510038CF383B65FFC7671119556702F630404C0BC686975E853C86AB392D25C853964693AA7F4A63BEC12BF51762DB46295D2062FFF24000E4F9FDD21972D747ED2F37DBBA2D6DECE1009222EE06B846FB7D49E8014DACFAECBEF2560CCF5E06EAD04B113D1F8E341F200DD8CDB3F36AB99B566B16A84F8C040ED8827F0E9F0D4FA340B0ECCC98F5CA4B05A990F3B410CAEBAFB409E985A722E4C442F59AF3ECEB1AF0B148A3E8B958D9F6C0E45BA4EC8553332DF170872E60967E106BD27AAE4A6C15D391C1B4DF7D77357B4D4E8B29FC874947A75CDB1A1ACE512C5CD08405F2D9F21D50197DC151B5E5A735F759628BCB5A70B5CC9855A39188FBBA8E6BA0F5B6538ACCAF394A809C68F810441BB81CE71F7DBB2A11D3905225DC9B1F0F0D8B7E5268020039E03FD97D42204E503EF98C26B5D9DCCF5424573775E536C4AA26BF4B0351530857B8F640495377E9A08AE82F227BA487FA1D945EC233EB1B42C18FEC4BEC651D4CE1313C9574976F092A5E52D1B37B5D4B33800F5C3803BC6ED2759AE3F6888E7120D3AC2F24729A08B2B4C8D44EF807987C156DD3ED871B0A6217E9783A78BFE56C819F2C8FFC2D2D83945FE846833E5ADE3F840B53EE67E5D13BF0B7031B6C1D004D274F43C1982C43FB58011389D2C7E9111B8ADDD89C37756F1E4C4A931D828ADC3597429AF3A00C0C9A71A44A62F922102CABA479BDDF25A088BEFDF630E2AED4351A90B9567FB6DB5FECD6F168966DB2EB6161DA84479DBED9090026C3CACC19B91EF5680A40073FEAFCAE161E3A2F0DAC9C0A5A7AA31D93B425D5B5A7BF6D38FE797FB53793EED791C82DDFBB2D224455349F26F147FE0D59747AB091585DAE61A32B04DCEF19D907C1159FF69443843248D75E772B558E7AA0FFAE2A9D2B6B1E9F34B79DABBC98B2FAB34F76FEEC635E6E756F7724106D08F296019FDEC94FA7B7CBFD780F2C0B75B1D88EA0D5885237F4D09F03B2E8E1A98879656AA33AB23583DAFF96D8FCEF548302F323A8BA959710A78A803185D88A9C971D9491613E5BA2044D0B640FECF219CEFE377445E5256FD687A15C9F66475C0270C9C1A7189507E881DC6FD5B31FFF9949342586E24C7827F260CDAE356F874CC7C913ABCB40E892E495CD4388AFB84AADB45069F37ABF7DF966CBB8EC86C0CA5A86E79350DA5D6BC2B23EEB51B9C9C352FD9D3FFAE368891D8FD4E2861B8002BB16DA0C4A96E6A9B8D8FF553CA1E6D85B16F996FAB677FE58608BF58AC1AFA9482CA957B03924945B4260A4147625EE657C7763B4C9F4C00466394DB4F222DDC16B72C579FB80B3861D6B4364007FE856DD8D498F3732AF3A7041A2D71498ACB3793C250CEA60DE84FCD0C227A08F903A0B5ADC936FBDB7BC6AB8F7AF002266C8740AC3D75B0628EF6A05C0481CB283E3645F7D8A0ED7415EECD52E4BF70F00ADB11BAEB947F03140446AF31C2BD41F1D34D75FEAE64B91C6007CABC91A07DFE8AD753CE183C611178B8F63B822F03AFBD41AEF17F6A1D58F341D172D4682F38FED397FB01B396352C37397991D2E1473784900B439B27D6129F6C84173251B68B742EACD5A1BBD49DA6A4DE039831B66B054A9BB13299EE828282F1779AAB7FDFD82F4CC3296E9777A03C64AC4F08DC8882A9454B301264284F7226A4AABABBDC8336CA2BD1EC6517A9F54A776446C5A12FEAE387629FE5A66188C671C80A6C83B08322C2068ABBBC03261AAB8280F4E36507788CDAC4D3F0817327FC0D19B0BCA35D89819A9DC2D5C0CED08A87AF8DDD99304505EA08855CDB514357F8A9A7F3F4D062705E7B26632CA617F640F4D99417CE5C90D432D6B8955DE269460B9DB3C08432FB7BA08F5A658DD79DA8E9AE5B0751152847EA6ADA78D0BB4A8BD9F6E221990CEAF771B5AF603F463D2369DF9BF556A1CE60D1EA6172BD05EDCD166255810C1FEFE029EF21147DFE8EDD5B333F6C7274997E1BC61F253AA375B9CC6B5B64BE8DE11CA00C9530DDB1F218870611D4037BBB88F257614EB7F2A6FF395376C5DAEE4E83C5D11BD6600DEDA47D1CAD95B11E5BCE680D2F18CF92353A11840DB88C38B363BE8813E8004D2BC1DBF95E86C64E060F735C404E8945EAA3DB31A27C63AD818D96EDC6B0111CEE3B3E9F0E1B7DAAB22364FC1B36D25ACF77630DBD1E3CDB194FF8B8D1BE8ADABCF4D0760BF5CD406E982E0F743AFA2C4B333152A74177DD79E64566BF34A10515AC0E050CA135D7357E1F94F1653E9EFB0FBA0BEA1C2B09D6378E4E33EB98B5DB2A2DDA5D9F29CC68766AACBA09DE25B338BEE82700203628ACBDD4B828B34856910D0F2230260FF41EC371D08BE96EE2E821A1F3F328B631B53BECA81BBC74A92F608F2B040548BB5E805EAAB46815793F1D01D121D2E347ABF1FE62B4E00E31C8DAA01202340219430E88938D859D62B709D43934265B9DA9DBDA01537F54B439111126613FFF46ED0A39B2B19C22B8776618B065E15A515B752E1846F51F8469CE32FA076F47A5C49541A19D54CD63512DDE1126D7850B4300610E066AD53E094F26DDB40980B47D632DA9B4524EE5473B521A8F79A4B84CAE714B65E30824068305858CE9F39BB2EB06821C3C07EF2E030DA4BB3DC2D7A29A69DED7EF7B03825C663F5EF44B9A1A174ACFBB164FFFFF0419E13A8DDD108FCA9B2A8CF1A5A2E0471046FCFE32555E72D857ADFBC123B190B48CFC91CE8F0BF86CE2B439DCD3AF6F2CB26EEBF393FFB34290D2B7EC33FEE285547BDCC922312D36D9D25AE5DCB0A03EB0B603A6F75A5EE878266221C9B606B185250231E4B5C8B9470E5BAAA9859A963A51B83ECC111DA4779F012AC23AD2E2DF2965A39E52BD684A0E8D2406A173465B57BA6DC095298DD716BFE30E42CFDB0F2202D56E97772E3D64F1CA9B628B6EF2217A837165A1BA1A8612638C8387EC3854AC557C326CE88DA10F9DA027B204CFE634A695F2B59BC57F987C613131DF2F0F6A5F6081C96098DC03F82B3691AE9E4F14C32324CE495FC94EFCD1CBA88842223DDA27999E0B1762C581162FD1839352E8FB7E4FC143E8D3C774BE9BFD7BA4C3091A04D08EFCAA98B5D3AEBD1FBC65BF1CD7BEE784B58A877D8AE9DA9B3D459521A53010D42242DA0181F661F7CFECC2E74BF3C8E959D84F91904F4F8DE602B214A2E3C42B93BF904058FDBC37528D467E323039F101209D60C56BCEA60BF9C3714A05437A978F3601FA625B31562B5C9B5DE2C6B84F560FE35296E2715D905BCA71BAF6B577E7A03CA4A5DC816E79E21C9B688B0857887A25AB624E2233FE8C9A80C6FFE9AE77108F44A72AAE91885BA9541939A34519C457C41964D4FBD492E11B2890BE2BE0E069D274621FABEE609344545989EE35583C07E91C0FF1F5FD605F39D51A0485105A71ECAF9C7EC0748F7FE5FB5C4E90F1A59B1E31F74912BA831BCB9C95A315008F4C7C72D8AFF51DD09D9E4738E72C325B128E03F7D90915066AFC3FDDE335EBC4EB34895FB9807731EE6E123A28E815E5927BC9FEB02AA960308978D8DB5E131A22CD601D88069D145D4366FAF97FD7B71F4B39AB73A97C715BEE20A175931D7108AC1FCEF63CBE82D9CFA3569883A448220CD92C433ADD11A52F72303BB4A5D1DCBDCDEF605913D8D424F513EB8920EB864641B5833A39839822AB8ED011762756D6E16540D544B5CC8D9F8B671F19DE2BF7ED74CDF8EC9592CF1FF61095D0749A6404BE49AEB7434C75379DC02A87D213FDD6E0E6DA751657D7D221BC5EFFC8211F6C86B0F77096A81B1F60F51C23A5D525C3411DFF07CD5FCD54A60FE7AEA7E4C182885B2EF08BDE99995121FCDD5DDB0335DAC07DE1AEDBC9E988D7D90CD81D30E6C8E598BE6743D2853D975F236E6AED206846FE8F6AC9FF72C585606FDF6C25F5CBEC0C47567F389D5F317DA01F4A801FA2E2CA60344EAC2CCDEF9274608D8EA0A0D6323A1510FBE7BDF1EB8C0F580DBD3BAD17B268BB6E232B109504CFA3DBA305C7F273F8FBB7D8880303492CBED0B8AE374ACDF582A945A1B1D2000E71FCA445CAB59EDA8977E5595734A508495F2A742E30A006D383FBB6F83BFF1D0DA35805B6CC6A54BD1A7C3BFE81DCBF47021D6813B0E28000AEAA0654D085A9D5A0F0E0BEF802AFCEACE79FAB3F85E09E968BBED03B00AD50D079D9290F7E18904ACA46A2F0472E64CD16429547DA8A35CB1D9D532D4223483E7CDCDDD9E406B4920EFDD2E134B169A1DFC3F2AE54C3CE78A121F9F46F5D7BA6BFDD9CA25FEDAF0B2AD447902DAB3282AA9339C235FFD874C5E893E7E171CA838678C05936F9C9F794300DFBE63AA842A3B9541B07EF486C4823EF1EC56ADDA3143B89052D624EBCA9DC5A3A68E19F7E50E4DD71F4B111B24459EA8FB211053AC3CEE16F0D2C75B68E6F264A4E2874DFA99D6C6B3330B634A65D1B3617AFD7C32981D73C8607996F107211A7F37C6D6FD1D72B56432D66A8CE99E30E16847E549E54E7A3EFDEDD39741A55E94B1B735238093F856D8690A813E0ABCDB630747EC7A9D4729A6E0A70F001F5867E9AF613E9A0494BBBAA59CD1D75C83265E494530711F18313B0643890492BD13B49296827D7444876A98DBF99A6FDCFAF7883E02FD4ABFAD610FDD2BC8306377EDBEDA3EFE03041101A489051431B91BECD6E9DAA5633C8E99839DFE70F4C156FC2B1D27ED307757E0335EAA699C3FBC43CF47E520CA1404054F38D13CFE0339D87FC1440504AFE91AF4088820F7A1D8128ABA53DAD634250CB0C467592C27D1DDF7C64E7E5308567375FF73C02951DAE125866C53F845852C5008A69DEECA708E5A621FFC81C3C932319D15E867AFB67B1B1E07B261ECB56A013C441A7DB94523F103E93D95A7A0FD95141A6342922D1A7130ED95F4B1FED18F3FC61315A1FF0CFA66382BF10DD284AA4B54B80FC2415CB8AF7F3E686AD0664C21EE9F20070F99A8A44A5D51D8CB4BA010659C3070EB3374DAF2168562D89FEFB10100670663E71D029C2B09107611C41B202B0815DA2071256988918DCE69B35F46B8AA4F11DE63CE565AAA1172D7CAC8296B9334FAEA08D3BFFB34264D3487ACAE3C9781C1664E800732C387F9D65C152948FACFABD175C0FBA3B45F9892F8E98F2BAAC48E304EC9CB9D2A41487751B8E37F3B58F66710EA2A2CE02354B85E56EF7AEBE52388F2BC6298F0B96E3B736B5A6EFF22ED079C8AE2FF586E0F4D53ADFB17300D11CA7B8C2E79C0877970ADD0579DD90187CB8095278FEA5F4BD3D9123D300100AE63635463FB5019926B9B53BA7CC826A14EC4B5AA5E9B6C72685B4517A4564028FB6D5584994F8999F9AE7E59D4327FD95C2A45E83A63E9D9F04B554C8906E0E2095448F75DDB68C8057F54630BAFEF06232F7609282B1EC5D0AECFA93E8A7EF3E6FFED7F6E4A2EB8B82D22C5B9AA7B8617DC13B69386742C09C2055AE5C2E71E73EE0DDF1D23E4928D7120B8C171A4F4421DDDEE6229656295430B936F6AE18254A11612B9ECAED23869178CF6B1E6ED7430958039A7DA988C1DA03E0DF5E1D8EACB7C726A9108E5472329280184861ACFEB110ADAB5ED03ACF5EE7E806AB0C850AB7E2256F817883394177AC0E0EF5B74E27CF6B315D0F134B282EE527E32A762C1AD06991C733A7F2E23776B01EAD68363A361F28F381F6190635A6BB38CA9461749E8E3117CE4F767007E2C38FC0EFFA4AAA693664F30A5704D369C9BEE225890021DF8450EF25B28CC123EB178D113B07B99ADC4AA47FE0078EF3D750B2E600B09353CCCC8BACFF198EDD2B3C551C212D005CF33763875B3753E14B14F96847142410DAD4046C9C8340946D922B6EB6CF2D2BF3ADA92A492D2C43397716A4BFEACA01BF2051E029D5C664E4D9C3B7248A9142092DC25FD0DE44275AFFE90848463E7E68A7DC4ECDBD5325AEA355E111929BF700179AEBAE60E26AB2C6ADC3967AA55FC9A2BB1CAC49098C16CF85C569E2E4A146568C41C815C76629061A483AC30DD27ABAA1469C1AC6C527BBBA5BE8BB0541358FEAB34B1E3EDD7E37EAF307AC213055FCF44E65882CCC9A12AFE5F7FFFEF4262C19AC072C291ED636C3FB1D36D7B99F77E93A5DC2848B01595D8DD3C7DCB95075AC52168897126055E8EA8D1028AF2718DCDA34496ED6FD1D86B49BA42F77A714D65D594965A748EBE83501D963F7B8D3EF55804B4FD5462D12571B77384E3D23C77ADDBE7F4BF667CECE0717C7156623AA6FAED9C1D2ED3C46403F750951AD8BD192FCB1A7FF95A590D085E7A733DB1CA0A821631245100FF92A5B1F63F53A6D831EE041966571EBA5914D81F838FC3CC5C449BC39709A489CF31B7CB91ABDE6FC8BA6E4D41E048D5C59377EF4DE7BBFA2406C6F400232E6B502A10802B420A11316D93638A926FD0BE4A368A223FF767B11ED73E6DD1AFDA6508D4CA6EF3517CD3362CD1604CEC574DD35FABF6D5004208146C93BF179ECAE54D9794FD13C34053FEAE2E7286C964BF2B2371D9BA8AE3F0114BC138EB3C304102846E65E7908B40358BEF9F290038FC645979951AD82D98106440CFE2261C5BDB6BED587C19EBABC54469D6ECA9D9DD59A92DB30868297CECC90AA8228E28C4D1B074881B939C60D8A4530A193290C5E5399FADEBDFC42CEC5FC2738DB18FFE9FB20B7D443FA3F1FEEF91E65279460D27F6308B6B0F8B450452DA56E81D37851E8D589F9B0822ED525BAC86575FCBA54E67BEE4512A7F215820E1885F79A5406772A8241FF96533C644B1B5200FDDF4CD1F270E6EEC77324DEF0150183CBDE7D042C33DC0C27AC6F17D670D379AA778E6EF48D41DCB6C9F0F7C5E57BD0A7875D4B2D8E31AEBAA58AAF78947683E373AD517DEF236B037F29C2A09AA4D596609B7AB761FC8D7F566A6BC8840CA626BD36B1D50AF74342BE0B54475D0AE3E30CAE146306AA540E0D63AC325252DD66D5DF50AF7C1D3A651E5A145192E1F05FD31AD2F37719B62DBBFDEB84EDFE0D644909DDBC6F5221BD70BDA886C59D62F7A95BEB41276DC3B5B505D883DCC478B697388421D5C217C8DD2E56A4130A28BBD7176163980EB820899CF74F3074DD7E74A77B54677A35EEEAE93C32D44EC4D2E4196366E40FD0C2A4741575ECFB8FC927142229E63FAEA97C51E12809FFD336BCFDDEA3FC03A1FE99EA685DAAB6F27DA6BACACD5D432352FC6FCC323EA9BC72FAF2569A7C6D55E1260DF0963EDD6CD3CCF97A033F74201E4390F64F06F89080C830986F8D6E90AFED3BE6A54202A59ECCEF101E5DB790E997918DDBFA1B160D472490F3CCC2B0E1C10AEC61ACC1F36BB6A8735AA86C50D2AC986721C003A2A8F1056BB9910F5A8D62D358DDB31589280BD14319C27A13D847D84C02A039B869B52669DDAD47CBEE6892E2A881A020867405FC1756DF2AAF2E5706A16F53E1E459BCDC430C26403F60B979A4D74F78CCD34E48321E67A8B896A162C873CFDEE8D58BE234C34FA20FAD472F0EB570F5B2BDABEDEA0D0483176163E20E47EBF51262B19442016EE5867BD3345DAA7CADFB2BFBF14B4EAF986951B024D876150CD64B7B0A188CA79B122F274FFB39F1EF88D5B9D36437AE8BA43770DD69E3994F8CD673EC3E1F0A51E798271AA7793CACD7E53E27A325193A9B9FA33ADA3BDBDB9A916DC8BC6188C3D4C38848E3506E38621DB57C2B0FA80BE5CA34C295159163F23ADC249BFB1ACD94FF0A42054C1A2C304F3C515B8B44F2AB1A760E784B95D9FFA905EB5541D14D5F12B4489403645A15F004828AC8FD3D8B44C5C070E8A64BA086462E5CD447C58E0D96130E9BA3400CD7AC266AF3E3D33DF214D3E98C6B7585C552979738879552FC758F04B122889E81B887B653FD7D4A8A5CCECFB0850B58CFD4BE990FAE223803EAE972D0C65A97960421D3FF5B2B75079AEB42A92E0D0EC2F04967C91CCB84FE6E39B6B136CB64424686DC6CDC4AC39C26BFCE81478AB6429D4E9B4877EFFC8740FCB5D9968ACF8D69C771E9E48CB542BA5BBF0327A4C55CC83E466D6DE0E639A54576D85A44F305958A325CE98A45E2C227AA9E85BED652F3EA5CD31AB99E299930F5AE92B12E10D597F69272ACC8185C1E83412A67CCA39DB06A77329475A3A87A1D4586B191E2E8E7C3EC39171CE6E775E7B369C8EED0B2E74A7233CDB5905F6AAC099820A227B6FA0FE5057CDCE6C8175F4CF27D70EE76CC0D769A324AD66D013A3F699C7F024C22C03B353177C3D721EC56E472AD6B383A653FFCD078774C728258146BD8D928B209C0A6A8CC60069F160D33F673C139534362B58E065F7D1176FE95F4A6DB7CC75FAA408C4FB09B7026DD640BB08945B364646D9154D00CDF5BBE432390607904BC3D70A0207F696152CE6FC5A0BD79625E437197B929203CF028384558071B625E0F8801EC1B13F6DF17EB8135687F08071DFC3BB06C8EB4ED296C821CFDDB7F2779B0B913E623ACA6E3C5FF023C58EAAB547BF1A67EA020F317658E1328FC845F65464D2E06ABB63F678A94614E3EFE281E41ECD6C85FE10ACE427FB1960BDF06630B20CF0401F450D71D3FCF0C477682FE342F5511DE926AA24E776CB9C798058A7576E1F76ABFD2C86B8C741230D6D95ADE980ADEA22547B88E607AAA8C3462FA34114DFA46046848CB10482314D1240516AA7EC7160215A54F69EBC39FE4CC97EF710BB7E8B55F9AC158B7F9C87B738FD993D2F0E35E4E9969FE5FC4B301BFCBA8A28D7150602ABE7635A2FB48AC65EA29B829DAE037D8711127F80CE85BE003B4F94E958E493D7C2236DF970D7DFE8495CE083E79B777D44F96C6CD7554B01374AB97EE1246C2DA82B0AD5BBC76968B6E058A821418E0707D596E2A7E3AD9AFE623D18812F269C1D347A732BECE58260D2E8F1399AE5BB928716865B902611DA70761A4C3DB3EB0D332E58E081C08D4AF96B1A85DD68CE15A8EAA5B95F73CBA9975924F8F9A3CB57249A6A904A33F6471ED4F389168702EDA2054B4A523B6CE189B26C50900913CBC7693C4E447CAC4CA7B783106698CBB78F5E793284F27E182CE12BC792935FE38CEAA7F659967111AC2607C8316FD3CFF111DC5C2D58502555AA589010F9DE4F735D456CB9F0896FEB163984710BCA11C5D78D9ACE6CC9E2EAA70B177A9D33D8C59245FF9773AC181548BC82C751D59A350C65C895AA79E9B57FBFA2D17F53EFBE0C490B43C3369B71DE45B9AD67C88B2A8F1AEA2F5D871970FE9D4C6D63F81647DEA310F76DE6C050729DA4575087E3AE8F6804128FDA47C1867A6FB5065C4186C47D1199BEDED29D26BF9825676FFD9A98BF91E3921A07EFC949D7473CBF04E6647390E33CF765BBF73714E0AD38C4D1EFBC3BC4144CC9AEEBA0B9B4843F910A7F9CFDD347F6DC1017C010DF0EED1A71958CC5BB8D50BBEC164E186B6572FD09715C29611A3A5162496968C1DFBC1B6A8A4E617922D152FAF2B08BA40E47AA0E9F30515C9AFC74A5C2D87828BAE5243BB7988DED81731126E4C7E9609863929F943930FC72D0F3A4784990E08145485CA0FBCD69BAB2391C82E75BC2CB2DCAF0E94A3717B6A157070C77A8A3B5DD1E30AAB09F5368F46F66575599C04296982E6AE8F8C334ED24CC58449CAB0B7660E0F2BB9D96BE515245DF9654EAFB5060D21291DB8A2D820BF372E795957D59ADED6A72C265D19C852312BFDACCA65431B9AF4DA6AD56B97E9FDA9AE4650C9165037F353D9BE92322B4383C30404706D102F15D8D39B21D22E0B23FFB0AA0F58F477DEBC4F130BF501C765295A54913A7A0190FC907BF2420B329B97F30FA65A7429E7D71E572E1BE0AB0793B606F480A1526085637BBF89CABDBD9D19D808F230AE48505CDA9ADE68FDC826682BC406D4A7575EE913B60769C3BE4D81A073C05FE2BD6D7A1C3B52FD2F22875BE856CE0F6D7A3AEA1897FCDF951DF4A86184E717B4077A25D37935A82E073373ABBA58B0F5F744CE52284D96200CD90F0A7B4A03869A93C9371B7F946EAF2EDF35ADCE873407C7BEF0A750CEE48BE3A33CC47979648FBC5EA7E79DBC725C3901D4D05BC5B804007BD46E48B424665763F028E3777FC1A00F588D9A26F68DC7ADEEAF8214B747B409395016A05D8C72FC3E838DBF7C5A222D03699897E5606433CA760C6D67C8BECAE0FA8C312C9875AE26D61FCBD3A320829B615FED0587E4225E4B62264C9B37D2D2B45FDDCEFC060257960DF6A1AA2AC0544FC333914D192A1629061730213B1455E6FD7A712A08122C8BAD77EAB9CB9687AF97A3AFC02B8F413930DFEC10DB37C385B5643E91F3345C73EF353453F34A5EADC8EB41CB098E9243E57258AE608C9FE7BBEAC524B21A0734D8EE51EB30DD6974B87FDF3B0B1E1DB01FEF13061E4B072DAF927C99BDBB7691069E2493E86239A69BA33AF82998CC1D7B368A4343BC63EACEED280415FFF40B0B61221D7D1C098C6391E5C888228045494F86644F34AFB1B191BFCFD1A29C678956DB16D0BBEE458AC6DDBF00E738198C093170FB37F3F141619E65502AC57E9042CABC72372E5FAB9DFF5E42A00EB023E44B4E536706FD63BFEBCE1C0DD59E465A61DABF566EE7216973ABFF5D34A5A62518E12E8352C61BED9348E5826290EC0F84C4251265EB325D261D721A84F62224701C9F564298EFE0C2516330F7AA43CC3D7090581B74C69218D74C8C6563FE276F24F39BB7998CBFB9C49EC649106DFA51E45498DF0F347DE8A562341DB34E94F286F583832E49AB38C09DBCC3B2C307188A980574461CB3C41EDFB933938F89C88F61886B60097F272E511B49CAED645190E98C3AB8AB5CDDC021F76567AC1EAE9F4F8D782B91BDBA3037BFF8FF43879FB6598D84046CA06B3C8EFE275BC61E449853F979AD6BFDF27DF453E2551F09FC1916F4E9884012BD4B946E2A65C86C609CF8EDDEDCECBE9B1DD6715C1792E261A3A013D64F00118DDB1FDAC9900E8BCCCEF9246446D5248D5E3423D859E1AA9BC38F8697F8A4EA08632983F268BF7D0BE639ADFCE6625E00229FD510A41AEE418C3AB85F5D2256D8EA4E9AE47316BE6DCF792537F28514B99BD76D098C8B4CA16DE1A9ED0F2693DFBA9B460BD842452BF563B03874DCCCD3E18B76AA3E352978473A2E02C6398438A35639457DBA7316577B0863762FC177010E0FA0F7537420C0443D8D7F51AEE4F40A67E249D678E77F17503A0A6DBEC3C60FAD140DA592082C334E3B1D021E34104A9A724FB6EE3B5A22CE5D3BB9C5E896956B4C6F7B1F51A74A56A7232E027F706EBB999708BA8ECBF42F44E41EF63A7627C60E5E75C678B5B3F7846CBBECC9A1B6EF78D7912AFF0EA56B7E25C31784DF9D63398FEF53F6193554C4D8B7A96C170A89961D2654B9A663B39C76401A439CAEC482BF44F20DD12140D47D0580DDA48EA905D409BAF5BCADBB8394333B97C0FD9501AA4B4BCEB3F041520422530A09A9B24EC04206CE907A33D0A18CD5C1640CFEF970623B1AB2B7EA5342B6F38C717416C17545D27C21A8F37AC2B98991395D3D170FB2D03C6B152915DDF9CAA12B5EB19E45FAC4CFD4ABA726A723237A6488773C05D0D38D38D920C6E8F2D3476B06B40094463CDAF380026BC36B8EF3DED6A01CA89E015A0B75BDFB97D859C620D329C9B26B1DBE3A3C92D8510B060ADF4151AFEED125ABC0D6FD3FA9F7F3C67B6BAF14A672977F2052A84F0437027956AAED010F63471C5848781BEF8F2BAB9F8CB0DB00253E2C6FD30D2A0794FCEC489376261CDD407B4ACECA129D87FFA0C76E28B9483034A40F84EA21E06C37BBEF2987AC16E77E021D29CBBDF077A912B89CEF82FF0EA59F7FDA55EE99F4602B5437CE71B4183BF28BE79327483898C39D09DCAC59C3CE32333BEF4B0720B30944B9998A01CB3C135D53B4A76FCDAD1C321D39D4466F0BF95710FC975ABCA1181070A4A5741624CE9AB0FEF27A5BB1805BF295861D0208BEBE7DF92EEFA7FB123B6AD42541C1A1057DA2560469A680E3664B1455D6851E6C8DC8C4940281AFF025B2BAD2CBB53D1670641EBDE2AE91E71F7F69AFD0C1A0225351CB1290EE40F81560A52463FB04E1364F9F3E5C454C311240EDA5C6AD78A094A73DDC1463E19A8E12419DE4966A1F12872E566F178E256F257FD1890DAE6F84DE013C2490B57DC1DED2E705C0134E889EECBE5575587EDFC240DE938C6D2D9CE543D5BA3A4A3EADE1A6A5F0CFF996311F72B3C6761414E34342C3D1A48F5D3011D7BC7F936E8E086581AC256DC6A376F9C4ABAF87FFAAD67BAC64401F4D976129EFD57102A84E63DDFEF60CF13EAF8973881FEDEBFF8D4B356B2A03EE9FFBDFA99F77EF7251C11EB1D2514D5E657697EFC47FC42CF10FFA7F09765E2EC39E0A99E4FEEBD410BF4AFE51855341279F7E47DFF0066602618ED5BF70B2F6D002805F41E991C68D64ADEAB7374F25B60E0DAFB980D888AA2580DB37930D1942D6D088FDC706871A90D887B5F2CA6B21911BBB8BFEE1376F48428238607AF7CF82C3B3C9223746BA9A5F01523B20889ED8F139EA3D505D55D766BD056416193CACA6D5D6175C16C38BF44D7F89D4A5E3406C7944AD05D86C310E1EC78E0C8AD80FA0DB202AB1768AD446AC7FEC60B30D741114B45857FA5223E64AF32476319F16DE15C04F34F4730AB31F4F6BB13252D706F0B3BD5860BEB864618353CE62469E25CF4AED50D8BDE9633CF18F76AB1EA5552614D4AC3848A0CFFFDFD51F17A4E744533DC52979D7012AE53E9B08C4980AF8876ED2FD8A6F174B3AF651517BDDA1965264F1CCF0EEC8E3A9969D1359C5C9FD20CAD8698F3E28ACE77001F563BF456B5A46FC747E5D7EFED93314F7AA87CFA60405F968A4F9774E30E2266938BB19E9265FB71BE0D40FE6BF14FE02E36FE10FF110D63E02145C78B73217EED9DD87F70077E4229572E6547DD71828C773E46462E30B497F9F5F99D723D657E17A288DC98724B11AE87B7E56D33386A7FDEE0698353CD46409FE8D2236958B166B1C697BB8A42946D66E390A045775A6FE7DEE4BE260490B69C56476B894383091C827D02E960D9359E8D3E151F50EB87FABAEE8ACC6E325B36674D9C7CE249B879B3FDC6AF95E92FAE53047BC211757FD12564EDDA4DDB6AE8C94DD3305C21970E90BE05ABBAF912ACC52C77714F87C2B059A9E21005D8903A604D82EC22192C46CEB63C588A219CBF755B5D44CC0E918CA6705156CB497FAABFF63745C826FE16F65582D4820141DEBE3B949C29EEC6D99C2A4EF34DC878DD82D0FE6D5ACA302ADFB897DAE78EB0BD28A938D6FD5A3535CADEDD7C521E45AF4BA92FD40DDB009E35C21254A6DB959698303D56B59D8F319F18E688F9A20DAC8058E0496E0E46BD01880F3C78EEFE98A511768919116A288CD3CD28098BF5D4719EB64D548A6D791F1A9A9A3E9B08E7184AEFE60A3D7D7179CE47562E9133068789BBE0297FDA2B2D6F4248B288CD899BF3231EB360ED45F769C0167284319D2C2B11375C2B18E5B67594CF499A6AF2687E0C1AAF09F4161F3AA8369BDBA68AB022459A2DA9DEEA13E509AF3A68D011998D9C30BEBEBD04BC9983F36FA549BFF3E3D323722B2136AFCE0A2CC8E593B370C7B48635926B9575A77AD7C0DA18E94FF1C8FABFB57B25981288E1771465360E2D619272CF3F56268B7EE130FD07DE29215FBD5D0A72B73081869F60CB149A1E4871150778A2229F3C886200E0DC2C76AE049231FD3171E49FF44BDADE185883198D21629CE0AB252C7451398E0D411CB01A66BC5B141CB150BA9CFA9F9F46339625E1D5127998302AFD19D5B2D85F3F0B2B354C7CFAACA3D4E7C7B7DF44E22EC2C226178DDD480DF7787EB28F0285B1F973DC47B094491DDDC12BF1CAEB99E0E13781FE8A64DCB0A05A30763A055A6ADFE5434D7694A0F6A0366B5D74E73227F3D503E6B989C5BBF9E6D81EDA7C46D890FB2C5CB439C5B49FE16A9BEB14B12B08C47713331E8932D4AF6B85444E3F848C5AFDC095E984449F0D126EF711F8B43831755BC0FAE8D9FC79E894CEC183DC24B1E3C81FAF6A546E464AF8C0307263680CEAD9ED6E80217F98CA82458BEE59D2A4FA76BD7D4425E0C77164A50A2933972108661820C75EB51C8A0ABDDDEB30F31F2E575AB9DB723DD084656691096B72193C52053EBB8B72C6B30C49185166FC39F3D9F3497606D15E8D696CDC256DCBDB6D01DD2C33C0249D6069788DEC09802630597C13EB1AE152E8E84F6A4BF60BB09E049EECEF79F2E35DA357E9C076B00C6ACE7C50F865830698571E999E544F5025A99C36BCB025B7967846306FADCA22B8BED499BC9A80EFA7BDBDB83B15DC6D48AC4E3978D528DCE0A3E11C3E62B619EBA0C853EDB0EFA1DCE9EFB2E024FFC0B59A8AEC329FAAF418DF9BF70A250F2F6409A9FC0153161F6E8713005E53154DDBE15242AD801C216A1E5CE207757BFFBED75EE4C96CA0C3CF448966540EB434C68E9A4CCF3C5907DA216BA664B073D73B0779204EBCAEB55446AC6E2C40B8BDC666D4C9D33B7C644F867BCD8962274630191EADAEE7248398B9F02744AC5D4DEBDAB2D6D9F8D6C6392683FC1A795F70134E790718D56DB6D424725DF8AE7E11F02D684DA78ACB4B9C311806D082C1FADE4B31B8A6DC0E5F16618C47E03E8D78DDCCC6ED869F77CD39926945466369CC2371D3B51F58DFC6471D742C9C82B1B7A2B1B1BFAD15FEBE592AC0F41B19C126D923BF5944408506ACED28FBED161902EC5FF19CEED25D18F47A76860777A3D86B3E0BA7446C3F1EBDA88F8A8E182CC0938384842D42F41E0042C53C645DC87C88429E06BA9906A7A3C1F6A76671D69703496324406C7FDB20B9C3CE9BC273A743DCECC0016BDF85D82112DBD4C49E2A6A5DCA22738750EB8DD6AF15B27A0601970AD12660A51C560E5CD44B55960AA266A88B82E761B53A8B42E7332EF2FCCE093BCB06FD18D916FA10F4E9891B103DDE5D808963E6F71AE7479A5D0BFCDB8A2B2086308CFB7813EF6B7B5304225C2E9690E47CBFCD534570933541E8DC99227986C0CDE40924D64710A7FE28D248E667E18197B44D83FF1A0691E9049611AA1E04A1DB06595EC32A9B91C46F50096553C0B5716D2EA9C9E3D373C787783B50F28948EF96D21FB323CB69FBA26E8C869C745FF08AC0C71D2B656E42928D09AB4274C307FBB04AE41FE847721D95FDA55510893DF24F56522EE537F609FD54E4DAB4E98E9F3F8E8243C5D056B4CF6F2330408514C6CA22DBC79BE374E2B34B3E9A9B689B9375035F5E32013587C402C14997741654DF70FF5F74C0DC26D82AE7F036731AAE15D596E426EE2E7383EB540A48EF41FE2172F1565AD79202A016EF31255DBA5DE29C8C77B4704EF177C97DD507360FD01B44D612DCB18D7B5650032B1E768851C84EF794F833F9D5D198603224016D3FEA90F3C65DA465418750A69C43050A738A7EC4D415CC0B404B475936F8F675D49C67B875BD8BE2B2D65E05C49EDFE72163CF3F3BCAD87D8E956101964A1C1345F3978E144303FD1AEFA4675F521BBA59F0EF43DE19418993F444C1F75BEA24B295CDB73A51510B8B4B59DD20829466409444D4FF428B3B94164666A642FC2A187FDD7ADFE75E813BF64DE664B131F58B9CD825A19AC360F4F83E43FFBE0923494D978B1B2ECEEF07F2387E03B1D933008C0131A9ABB08DE1EADEF78291141D285EADFE1228554733CD927E9740D39EC9F539FAB960EA829552CFC36CD8BFD9092C821CE4FB4F29115BF533A56D7663CE9FAF2B9DA374B6E1CE5528A5B11ACB9FBE818BF4C41787F5E4FF4D517D46D2234B77F20ED3928BB38A32BBA350A66540E19B586C47EBB9EBF4E4A671CB41DA55BFBE5B39C025BF8F11A786D60C9DA6EE5299B17C0135689AC9D880B594EC51BB52398E78AC7DC2439D0C4BE7BBFB7F044661C9CD8D6D7EB16AFB943589C6210882557C65034BD7D044C6E957722C93537473E2EF1AF5A6D05D7404E274D2DA8B83F6D2AFF9EAA55D122F69F469927EB682977715FB1617B36368C22FD6A2A7B10412E9F202C6FC9BA1D7789311D018085D480B93B422C6BB24B09E05556F8298FCA307341877435D2D76B9DA1A1932F20D2903A63A0856D9C431FA3C4C591D606E0043B0C6BF277971588390BCAFFC01E14C6256290E1A01EB7BDC98611EB4E40BF72B04C21526D4139E3E75A13DC25C0691B67F24B195F57923684BAAF94C7E3CFF4830FB5E828B8F7A8692C1A0CFBB9FD3F021D3FCF12C7497021178A2AB8D3256E8606374D6D0E7FE11BB1F313BE2BDD4D977780C1A2053F6CB0F60F89671AE59C178FE33900FD11B4DEC25C698CE0FD4E451D6A3CEB4E41BDF08F05F556B4394858983D515266F25703C17B48B1AA13056ADB2AF9A865A0FD30BC4BAC0D7B1D185AA2903D1956DDA3D5541873EFE487E08E83613428B64D2A499BCF3783466079714FDC3D0B04ECDCED5C89F77F5E6E6F1141D47EE7A3C32382A89F512F9C9BD96AB24EBD4F77B911D8B8206CEE29ADC1E055B7BDFFEFF94AAFA750B857EC6FFCA693787C0E2817554717CE5DD5568DB1AE585B9BEED0C6E228FF47C43FD7565D3D5664BEBD73F97DCF73D8EBBA3FA092BF6EF21730EB909327313FE1493BFB44397567DFA30BDD7D090245057098AF775CE977528E91D9C3976A4D478A5695482E4EBC1FCB2F7FCF6E5F9B08BA8C7DF12E6F77C3B0362B1132F9209AC1D69579D5E9815535FF72820BE1414020694A3E2DE53BBE7DDB582C70455BCD18AA0A4E0A8BBD718217C616129F236487194B266F95E644D1FA79532D7AC13CD9C839BE14AD4BEC179923EFAC48965A8C915812C0F0886C11ABB0D2DD58FEE6AB2549AF9380B8699F3EBB0F96D295C22B940044819D7FBF2364610893457DDECED6113D1B14BDDDA8077BB32E70D19733CB795BC8964FD9788ED317B5E433CDFAC3CE3E0EA2A8359671F2ABF49946217358E92828AE32E6CE645C3C0E4D1CB64E5C8532DA7FC179CC7ACA241AE496D821EF7FB9E8D878B746C50DEB281604830360C8ABA336D1E8F444FD46A74F6B1A0F1F61EEC42C1DA2B6D88CD1AE94B3208866BD1757B1ACC09BC155DE4690A97D0244B819C0A66785EC764276BF39FCD6A1A172C777F2E9A44817D1B6B3C09AEB4436A3B115605A850AA9D11BE2E660F2B214C45B00134604EE395A77BAB321298ADE920BE3050CD2D7BAC4931C3E3687BC4FD7E2EFB536E26404E9950C928A3CFA8A11BE42D15EA8DB2037154F79C67860844D04DF51F5F21E90B8A16E7504947B90B655744758D97886E4860FBDF28FDE80B8F32C94D09F4F827F34E8FCE92B576A8809738D6227C9A31A43CEB3EDE56BF7306DC6F208D6229CC3E5C4B49AC54486ABA7F0079EDDBCA82C3C77F41C58A88C4ECF4DBEA754DFB3424BC3106A9FF280E8C6A7D086FA06C44ED23A82E23A03D3FD4CF62DE1AAF3A95747CB5CBCEEDA5B1929C13DF6CFDBA6A94A62AD3035C8CBEFA10AD9D37389B2EB90822E10B422BC165A3BA86F37C0A5B96D0EABCAA331FBF2806C65B376665A434A6D59B3BC9C339F4437F4598D0D6C62812A2083C32359B938D78390F9B4F86E42F297405069D350F86B089ADE021C1599FAA2460EF5904A6E25708032540A7747BB254679454A7B38C7491BDCC835033A76514869ADCFE268FE49CF38A9B844A97214E1E1ACE873FE051FAF282664552DC98618E35DBA4AD9B1FBE50700726091534091C631B54C944C28D97DA0961F8E4106408017CF1EC86456BCC1F4EE7118D0691F0F327A0436D3145E5FBF8FAC33E5179094FDB03D9DA0D9A2EEDDC221A21189B68EE1A94B13F062F21472DB5466B266562E2186FE01D028CD4AB5B6AC9F048D8D50CD8EB871C5F371648DC07E20BE84263CD676282D56EA5374E21B52752DBE416DB787BCE232226568621ED792A9135A59849451A4A4D8A1DCF3C804AF966881FE5156FB761B3736F4282240FC0BBE72F51F0122D96B3755109E7CDFC70F9DD04C58B4A51C00B4FC0EF252B05ED76440C97DABA04079C121351CD43BCDDD4AA2D2495B49B908A9AF815DEE1405C3CE9CEC7D5BA9919621E8C4E920E08061D228038F73F8E5DD66BAB806D2DD953C6FA5360487957912249DE009655658BE8CACF00E6E0621739648A7A75EA06E93946987E62EDC270B266BBBCEF61D7CC63013AD797589A7CA62B65D4127E701BC95D45C74DBCBFF498D3F87CBD1B288D6012EC392B901A3DDFF16EF1E1685EA1F92B1F32DFED2F9076EF9CB1ADD8B04953E5509B24C48977FFEE6044B8C5B80F9DED6FA7110C3A2EA42EEE8A83F4A28FE78B27E84AAE7B3FABA56C1A4D2414E0341C69C40A43D65E16583A151826F7C7CC0CF0A5999A1016BE6912F067913AEFB525EE41F1B9C82881054E9624C03DECE74976228B119974BC546F823A597C7486DD594F1FEB2B6D0330918936DCBC12E3752A7072C5FD7B145571DC4A22C770E00F24B8C91E27F2C727FB049D04BCA813948D2F7B531C906F2018F51C9EF8B7642C0F1CC06AD338BEDE17683E0BD2A90D4D4746189F792952037E4918D2D6E61C1C8A8B6C437075ABC38913C250BBE6EDDA5CD24B630AB8FE9123B08D5E8FB8B71BC95BDA4AF1A71D5E54BE98B16D7D3083AB1649CBBBF44B3D5DC33B77DC1171A66F6F40E75EB86801EAA36E02D138093F28ECC6DA4CE4B128DAFB8D49A17C683FFAA8E6910B8BB7B832B3A3D0765DE2ECDA9D7BFF0A822F5FD389A04B660F832687CD67F7E1E1C3F5257C6FEB27B763AC7327DE8FDB989413B6D002FDFFB1DE5A80F1C5E39F06E6D716A69ABEF37B2DA9783FC494574689948DB51F78C8812E09367E6C8D70F5FC4139C64B96C71ED851D171AFA69D2A646ABA85279B7D3D31D268A2E8A272C91902F12C49D07D74E82728AD61BBABDA333DE7138A976A2267DCAB1A02E19B0685F64B608E3DA41108D54A07D4BDD24D79D293830C04209C98F037283BAEC00B1923CF404E1F21584F515F9D59B53FA9B4774FA8D3B34B7C66907BA127A095CD8CBB23375CB188CF9DF22CFB4CEC528C581DB63598DDD9A53438409D72507D2CEB5BD45DB5C760415A5E3B3A909EEDA73B7FE122DF04CB1E9F29E7A5A7385F632AEF63771A4CA2164B9B3FAC3C13911DBE9668D1127DB02A94CDCE2C8C7B66F0C21601781552B384DF0FA002DE08892D0881174CA1F6DE80B98BAE545237C5CEF9E1655F9EF8F8293D644CB47963734197F1976600CF2767A59FD56B9B67659168ECD57C485E5726C150DEC6C302456AFD4F12B2F2D1F36B03E100E109827726020BDBA970A6B768C580E34116DD0011299B4DEAAB8B04DE1DCC5FFCCBE57254CA79743D6B00D119CBB2C0B0BBB2FB8FB0B0EC97204E1720F99D16A3257846D09BF8EAE02DB21FCABF03CB0989FB4D99B6D71D5E64C6FCACCABDE63B223A91D1278D676839E1A5CE6C5EE05AB4F10EEC511C366DBFD7AA1E139AF671CBEDB3160A775E5214C862E95C3A7993E508D8F8B7ABD68213A531B5C648C537FA2674346FA0B3AB43A7B58B4F83B36D58C506C188DAF72381DE53F83AD4D9E6C6B1F5D689AE24CD158BB2898F06AA28C8FFAB1703871A6A6FE41ABB6B8B9188C90EEF88E7DA3338F119770B31167E3AB541371FF7F98A2D59D3557438DEAD71C96B97F3839F5E28DA6227E5B40447B9C85642F3F8BEBD1CC7AB0D0E4D07CAFA93A26C75970C8B40443506AF8BB671F30867FE4225F576026F79010AED56CE915AD9AC001447CDCB7CC3846B0E291DE0E9E443984E0ABF7C1C1D2F6D073B0B77116A21C3C0B7F360439D11D2DE370CFF8FF73FFFBABFE4D52BCE58CB32612870B0EA23CDA21E3B6E851B063BC76FBF7BC394A7D3805D45616C6A313C887D2FDC51F065F8F3C05ABCF70F31EA5746A513D2DB3F4F3C61006F19420AA82107AF855649EA5D90ED0A8540D0A2CEC685D18EC8F4508A7D092E52DB2117C233A7BB542B61C26BB92491A88942A506ED60354EC1963ACC189A248E37C9367F3F6FE065EDF6A1205BC80B267C1062BE20950617FE0EB59BF8F1E69982F3E89E7EF85F3319A22A22B8BAA491BE76AC7257A2DF631A98477544E3E57C7D63616D22789968CA5E929B507AC394B6772096CC70B69ACDBADF900D055881FDD209AEF54CE6966767C07EB7A2B40A3410C3417D114FC9E293DA7262171325D8179262B2BF041F5A977E2D648900295B14950EDF245C7EEB663F8292625F804BB839BE3A5510036F7A50288C69F94434A03466701BF1313020A4DC4F87D272FB9D1B7676C195C0B7B4D3C2CC6B20D5C2066C7DE5DFB5C9FAD43D80FA43BA917F200A73F258BF21ED8BF3E39F69E501AB3EB115C9414C82C52CE91F6CAEF4A163E288A6FBAD4FA83477909FBC972E2EE2A5379456105E8EA02F92B0D8F79588E2282D1970C3A033F738011BF273EA65912D3ED09398A7F851BA2D6141F97843E90F5C66B38D71D70DB9D93FAEB07FE1AF5783D71CF50931C282CA8B483D1F2E5DC5AD5FF2B06C4355E46768AE5014A22E7CA26267A1E6CBFAB24C8C436535F23D419819D6D458551EE78AEA4779574BF86DE7960969B0635F0B2996F955D863E078DBF8689C142736BD5177DBFEA3CA8C58871B1FCCBFDFD67BB12AF82C3B8F935CCC507D510CAB63B831721E0ED9C258BA7A3FE245D42DDA1AD8A962847D7C724DD2418F72508FAC194EC43D17533AE522187B44D71B6E993F2CEFC6349141094C8CF935D90F2F238728D29E1F5AA09B46FA7CB651F688A8A06AB97FD2363486F61D3F42B9C015652A53B3CD66372849FD2EBA05CFB5AA28520B01FCBD9C835F98D15FE01C84D7FFBBA4B2DB93E44E4341AE95B8AAA4D59CB88F7E192E89954E22B1B8157FB0B89E3E1E3862BD4C2799F2D8C621064EC9BA1EC30E0F7F5FFD7013A7E1C102DBF01698322992EB05978A5A2878756BEABEDC660DA2D5370A98CA2C0A4C65141EA273EB787B2E7AF646DEF7DA77A93E45C37E69B474D04FBDC3B5982D8492FFC37FDE42385DDFE97A73B8575C1305A0B9AC0B0CE061A423556B6FDADB67D0A5BBA7435929D658FB0869BFFBE5D2FEC96051FE03CB7B0D944304C2D433459A97C43268E43951D4C1708C702FB9C0A0C6D82876057F4D043B21A92FA6D034B1DF5C2B463107AAA814C79022D96D1BD9D33DE5A1FF9E435D9607575856CE4DF5F1E9E90FEF5ACC4AAFBDBE0F982DBFE78C5ABE1D9C85E0452AAD7836D39591411B382BCCE72CA1702A20C9DF384F5BD539F53CEE8B9977AFB705D1D28680D1733BAF5F298282846EFA26B0DD7514422C0EF9088F796B38C15EDF6C8D88009B10CD0D6B4B2FD93679712BEFFC4D1F7A3898AD0CDC61D2FCDC360C66FDFE0AFF0E8A7B26359606CD4F47D28DE115261E6F98F323FBDF3E3046BCC2ACA0831D2BB4DDF1EF443632A229CFE6BBA5179079DC7FA50C56BE7FE5FEA0C5AD09D891895508722861E9EE8568F59616890C63708DE87744B81A0E21A62CD72148FC3782AB560CE136DC3A07F2D2E143EA0DD2ADAB9FF8AB39B2A3E8858DA593B6EF6C46BB5CFD252F6DE446D9165406B3DD18CAFCCE3DC7A6E6200D8F7591169A6AB9DB6665FB72140A416EF30B75EBABB6C284E73809DE2A3A26C7F4F188FEE0B401E9EFF6DA22EF3DBE0FAA6DDFFB5D8C265D1A1855CF7019D8659062AD7A705362D1510ED5013B96D6EE803E7C6418B05828243496753E8616F4075A08346038E3F3549C0AB1E761790E818C2B531F06805D92FE53D45B9A6FA5E30E3D6A2F467AECA07D29E1E9123247C69220E2B9D4501EE42E5BDAD07F0D092B33A938B8FC0EB7E435713E3E428E87DB24AC570E4EF64840A1B4D43C5026C80F321E537755366B16FAFF2423908FB74E9A5B08F0C1064815472AF48240F1C374F2AAF8ADE55117E0FB1D08AA40C4D8AEF35CE6A91E54A89BBE55BF5E78ED5F66B2FA1E8936342656C63263D4E7ABD70F7899DAC9A315E9508AE65287C6660A7D7F3FF408CD06F3B19E1238E6D5EF040B3E54F4469BEC17198AF3F78F660C6753157603138BC98AA9F01FE79036D4564A7396725E57F875FCDA4EAF80C5E2815862AD52340571A571B331CC8122C13CC58403B22B61BD404C6D94C36FEF187C712B524BAE9EF150A71CE32366AE536B5B94ECFA351EF0DE77E729C42BBB32C7D35F9A5BB29D2D84BFC91F510F9A1C907540AE3A80CB7023AE0635EA5C2EA0548D9D14CE4BDE142436521ED1637C7B7CF6CC1DA5F826B800AC6FFFB83509A81ACE30FD969495313F9E18CE4D8A2E1D5F9C7DA14A0A9D4C4D49BF00B622B6AA07FEBFF0A8B274C297C0B4AD1CBD64BB4941543FB63D9E15059E0C0FD250753B2AA664A677780C39A013E1AA6B8F786D677755ADA03E51ED55F936FFA1ABD0430DA8750575C37D1EEADEC5E17148DB9FA202F8748B0611EBB5015F1D26C0D810F1AA5A40D73C32C269EBA5CDA134267231FC3783D3D4CC639E567681275F423439A29118C6A0C1B07D08416537D4707E9CA3FCD3494F64B69E2AE9EDD0079CD428CEB8A00BE0FC9A791FE2DCFC10D7F813315E964828A4DCC2A2D42EB313CCF192F32AA9A17C984E0D3CF3A0BD86E0B751B30C096F5F0B08A0BC439294D2BE2CB387648F8119D8820D39F17C6AEC976A0B8C89C76D12AFF73059B49EE856B2591E8D2E817DC43793F20B2AFBBD49FD9A05F5B4CB69165420AB96F26A46861AD9423F7DAE8829FD392799EF967E1270563BCF3D46025CDBBAFD15DC23F33EE5B621DF6A12263CC0A506A5E9AB191F896D13382B3BC2D536442A62B09F3C2C2252D0BE377CFBD59097259ED243EFB36C9AC0AB01B3AADD502DAACCE17A49CC82FC9ADF67B4EDE81D9355CD8295DE21468FAAA25036B2DB6E24A3AF3E5FE59324867658EAD5198C47D362EF64B71179D107DA748F00400F15167E84B62588F6D81FA4B68A59A24BB3D27167D0720718BD24EE556FB72113FCBD37831251DCD538F6815382E119355CF3490DF0AD552ECAE0D00462C10CBA4011E95C7FEC968AF6E39E1FD15D1026879202C57E2CF7AB02B08B15373C13435D8A55ED6B9BDD98FCD5B4539428D90A2C73D37DB112D2025EC8A4AC8EB82C51C46FACE88AC0E1F161705801C781EA07F6914122E5DD6BFFA3812EE44E314BC09B785B344584AA8522B63FB34BAD2122F9FEE1245E6DC837DB032387EFF5036A021C8112CDF03BEEFD89EEFE1BB88A132CAE9E1E9EED3A855B364F2A4A2F81086172FEBC64614BC04D11E74AF00F54AF6B5D85EE4773644C3FA768532B1821EC6E5C0D1FA0561DE4DECF411AB73FF48D0810AA2149FE5F3C22E62E06C02F60189AB5690A991CB88DFA5C4FBED745FCFD63BE3ECD9CC599E35B5FA31AA11C62F3A33796A64EDD0B64F2E51E75C2481D3EC9DDF07DADB71448BB336C0DA9DBCD897F777E3C9DD97C7EBB08827C19316F61420D96F3D94EC395F8BF88F5927C71397F6C24901914826B1BE26E14FE93EED37141109CCD00C92772B96D9EFD74B3EAD3903854801B22DC3F98232023E1F9CDFD4B4C952A6D268DF9FD3FA83C707941F8F1ACDC195AD66E7AF48D7B06C62F3204E8D03D2C92920C589CC56A5C2B0A1F10401BBF747B60B9D2179BF9CD7DDF50B10823372CC4E24005D73B4C5AB918F22918B16D98F15C365FE69786C1ADE9FAD71516E389938D5D38420FC79F82C6C0AB1C6D93D1896FE8A2BEBA134C138EB1FB00115E50A8A676B9D9939E7375F4B7D62D449EB341B0C03EE3FB18564DA3CF64261055594E0F8D322EAA9B56B5328574AB323C4376464F3C27786DF7026BFD6C7757BAEDE7887217A2D3EA22AF7D6809BFE4985EDB32ED503C6034FECE55F4379920C73A515C7390B3405ABCC54F51F686903D5354468AC566D5A03C5AB536934A6CE698E06B9E2C815B15B4F8A1857FE7C0B5486759B150F48AE9745AFBCE856830078EFD7F4CB4A463587B7DDACC79FC9FBD9C2A0351D91DDF27A65CC79005DD24F1C26252BEB8C3F1D69DF79D386401EC5AD57BF2129D1E828D6D57CABEA84C7F77B16B919653C12AA7F770741E4AC11F0AD08507C3E7C4716F14F14C548A88DC4047EA96CF96BC0CF786EF7D02424314BC846682109A2F80044B51B12A0350DB9FE06E72581EE874665B9680EC118C86DB575F9E5F687CF35DB3CA83475051AFDABDC974B2991B47BEB4CB967E3CF20D2B7CA2BB50825EE33FBD7C6E87095DE8E36CA6143F673A8C18882D89F22C08971CC709F1518169123EE59EF50846C95C313F14F9472D4CCB8EB71301488901F27E895B5D44420F91D123E3EF5527121B9B0C9536CC3D4E5EA03F63BA8FED0FDF593AABC3E768962DA165CCACE066ED7D6E46DAE97EA08789C36BD3CA6888229D15714302A39EE4F39DB0751F0E99877237524ED8EAC5F7EE2CC40A69408DC43E2AD88A661D7E443D7E99A14484E3011A41912E2AD4F6B7D62D8D9F3332F79A5FE1E16E8064C91DE56B1F89A9A3A220165872128771745D086DD3F8DDB2C35AAF3DC6DA70684DF270ED50D188FAE62CE4C98B9019D308772EF036F9FB2775137377CE61529A40E03B388CFDA3BAD55FD62D7ECAC2A72FB68068BE08383CC36FB66CC252A0412CFB3C993803C038A1828E8893DB453D47C5727CF8BF80850346063AF4976610F984ACCA00BB5963D5DFD018E0790F4A6B14A9B5FB9517783EC1F16773C49A744D8576F7957D4CD4C4E35D1BD580FC76E2632D47661A6838344CCF6476BB793FB12F92143524E5A01DD5294B6528C5A18B24B0B75D017C4DB3663BCD561AA8F27E510A7C031ABD3708385B03294E3BD1A695C573701B9D4F60232DF767439E252B7DB10D4E3FACAC8C2E8D16F9500828826EA807C2C7C48C0EE8457E757854C1540EFE9BDCE7C09AF5BE09AEA54A4BB0D2A328092F3B8741A128D4BF588384A3848A5E4F55DACFA64F7FE081366330D16589991C52A1BB782364AE969E8A21260518662B00EDB117278170CA2C0D186B173F93879F6F702E03DE768CFEA1E39FF8453C7B3AB46E83FC90FC56D0EC0847DF16A4BF1ECBFE29D94CCBD49DABDCC5FB81B62A2CDE7D2DA3E67042944F33A007096DE5C79133C7F4C9FCF7D2DCE0A2341FBEAAFA64F6A50A93F3FAE3B55EB70ABF51A4C001E15A8C78DE54E50CCAEFF8C2421079F7333541018D5EB8045C3AE0F0489D13C593EED560CDACDAEA39BB49FE2FD9C956197967830A0886182D98B5051080DE887638F2E3E626B8941A58D2206B46FB410C155B94FD7D15956EAEC9F855B96A8F1C7202EE600C12DBAFC6E3DE5F075B05AFC037847BB521D1D3638135591B6E1A0137CA74E27ADA3FD673684A8A1330DFA46D449F8B63FF90E36881C09FAEDF61672AC32CBBF71F34367E7547C13BF08C4B688A397DD4D00D8B19212F85EF11C0FEA19C890D73DCAE9B532CAB7BB5931B2F648072F35FAA31C6A77FAF3F72F9F57D5AE65BBC7DFF1C2A5A2A2721AD5B50DBDA2CEBA27A3864A6628F24B0D24FC2450890E278C4599C1015C2B4AE61F2DB2A3A85F02882DCB57A7A471B5F8E51DDC284E0C1869D41EF25E260EDC53AF55BE8217FEADE6C74B9C0EAE7C3417156D671577E05A63E03052663F420B70E99DE068971C5CB8D9055864460D6B2C269E4E5D2585BB7A08E28B15851C6E8438EBC1272D517A076C08631A9890F4FB627D05B91ED2164355D7F20B32498E4773FFFD17F3B15E7F2BAF5EBDC98E617A7437BCF94B0EA1B2FD6F98F8BE6D64F769FEA28A5FED9DBF4B3700BFA8C0495772A14254D7AD9525B6ECDC028C43EEEBF91D2B17C9ADDC071CCC83EFC6401A22846500E0CCD3D4E5184A05AECBD92808AD2DA42C57621C66142784692D4F28662A2B37DA4D3CAE332A97D465D3E492ACC964AED603058CB6BA6972C83C2906CFCC813C0603B775E2DE8BC946DAFA510532CEFF2B2FC5E1F25540FA07B577003D67F8A3C63E9BC2B89EC7AEDD8C2E91CA426398BEC4D98FB6233832BCAB8F10E5DE6668F7DF8FE10AC0EA63B7D46837EE4D1D203D54615042203552430DB97C24FE0088334BA154FB2157DD2D12715ABC6D329A819A1A664727F40CC26204949926E78B0BB8947FDA9026813FCF19795F8BFF2F56DB70DB7EA9280A6C504134A1B653D336101A9C166883599477DB557406FAD495BA31B488D9EDEB783759EDA32968AE4B4B96A14C9DA960ECEF511D4102E1EC27E17AF2746DFEA54F42D2133281ECA9F5CA87F8A2DE4C937B5F9526591A583DD3211F78871BBEDDE79206F946B9CEC6EBD0DA4A25AF259E4B3EC2195578C74B7DF87963BF561D7F4C6755D4DB0F288341D5E525B15F2BDA314DA38D2B2C7CD7D64F6DE35EE782A076333941FC3505AEB1FA5783C6C2553D73AFD6AF896A5C2E1C15EDDC408B6D9D7EE2E7E9F706C2A6CDE36A41BFF88960612C46996A9E7D43511302F925351240B5B77A7183C45A1B66C8FCD34EB6EBF5F5FFEAC8441BD1103D2151689BFCF8D4E29B9C39B1BE4972186B099C2C35572DB1BE2A28D751D6857B7E4EF181B786C2A6FFA30A5D6E2E1120E7B1F313302ADD1012E43EC24E5E5B5D03950E009272452ADEB9DB626FF38F335A520B12CD981636BCFB882FC06B440E348512E6ACF980A1ECF360E33DCADFFF5A2B413DD214D5AD1070E88B63FC9765295BBC92C557F3AAAB6AEB293249761F95EE4338243D35AF883AC33832155AC758ED05AA1BFFF0E9FD58E03384704DA5A9237F1AAF52E12C821BB0F54C0820AF8124AE6D0F4BFECDA6500995B2B61ECB0628BFE2A9E6A05DC94A781137522E85A3BEF28B76E49B27BD05C113C9B3A9AB1285BFD926D65BCCD5CC3837490B21527A1E94544C4ACED0352BC84D378625E3655F74B039CD681D98579A190AB2B89104C83F46235757D2D22FEEF59A250B56448116D6CCE73D8BD1E1F45D9676B031D9B0E65684FB88A83D791CE8F5278D33EA9D3A6ADF04F29AE93123376D1CEF52F27E875EC0024A888E688EE2A21A4AAD0448103569C8A7CB2FB072E3D0D09115AD8A1C234F7765E77042156AACC4D4A8AC697E41B71F436ABA09C91E9E4F2C5B573CB1D0B291F915BF922FC75E6FC6AE332B42D7E51BA8EFB1CCA66EC849099834E48C7F79BC16C79B0C87A8EAC8F88D30EEE8FC0EEF8C89520E2602A7226BFAC0E8B30A117B718875687F81A6125D09EB3BD2B2F5209C386DEC5AFF7DA0FF5454FF0451F825E5AC55680EC7DEC56E72CAB953E5B822E0A1D95F3F948E95DA7078C850C43AF46B4EFEEAD6AF807CCFEB1B61CFCEFB770D1923B41BB354C81F340CFD851EDFD537C373CB9F29303A988635C5CD37AFA576D6E8A8C2B7C56DE2FD49E5DB970B50E04436B1F8B22A6DCEE3BC27EE1885CEEA23E12541554EB2EFE615A140831DE6C555804432CAC0A73DC2EE5CEC8ED139ABCA4D17B22BCBE60F05F5D7F526ECB29A51ED6ABB4DE4A2865AD1AEA64041EB0F505BE3CB8F351BA21A8D941902BA565039EFEEAFB87DC6DECEC1C091ACE228931A147C491C11169AC87884D5EE9DF128C98A084CC6EA0A50D494FF8E0B902A9EAA4B4F9D3BB2BA1FFD3DCC93C45133B9008E2B188F57A82B5DC01862D35F633CD6CC3FC12BD6F3A20C1EEE1F9018E41027788950DF09C4B482837677B33B15CE24EFE6797291C0DE291AC04F04AF975703BEFD3CB8E59C1496E547285E3F7A29F99C5F210327CB328B8A3094DB7C27CF7FA077791160A2287F44F92BA6F5346E48D4D4AE6C2C7185926526719537AAD530EEB3B0B4CD718C7BA38BDBA21671ECCE0AB4044B797B7D10797EB1BAA024B76D0B82BF25C94655545227B46DB2A038F87301BCBECE0C99A98AA5BCB648DE58B6CD59AC6471462BF5985C595B00A4DDF2948A84203890E2989D8DFC9864392E7E75262DF1CB78C1E2872CFCD22D561F8788F42A0323CDF3EE1588EFF2F7BEDACF5AF710CC7C6F9957D992A7FE39DB696DA414AC36CBDC99AF050023597734D94C2A8FCBF41D6004C21E4F4357C19ED09488797CA012F4BEF8F1743E396236E708D96A7DAAB07FE03D5483319241CB35F66F66D99D981DB4427C4C84A9EA24AEE4F7C4E023E0ED2FEDF59FEB6D8AC0FE87DD42580F7B0CC6339752230A69BE83AE13FC12AD4719D45CAEAC6E8695F6F403A0713ED37DC120B80DE82F7AC4991B4B9DADB31A304E16D03251CA140659CBF99E891DCBB764293A967DE1E96848B8F225D2F9D28EC2F428AFEBFB57AB79B126E6FC3D66102E3813347D7CDA5499F6AA5BA6AB5EA6F3A82D730EDF3FF74B9BC0F954BED21E77146A5591941962C49F6B2BEBD060A9C82D8FC780FB3AED527D40CC426988F042841250B4A85A3F3501FA3436103313C3C4CDEA772B6C840DB866B9730798B69D6AE12D24E4DDF31FA9B4C8DECF6CBCEA2E8A0F9CC67CCDCB64523725972D81ED2E6562283DE99297458452B94467B83F3111CBFF61006814CCB6550D19A1EC026996695D46C31BFA9BD371CCDF1B512C61CE7BDFBE419B477DAB1E7E1D012DA4BDB05F4C4CD39511D5071C0982F68D9C6F558D22940D541A3C67003D05306FFC070C2131832F737872114566ADF3074F7F6274AEF9B894D0AAD5ED60998A0363B92D841F4A441C39965FC1479E93C99B083CDE6CD6CB9E26D49E16B969A357E28A61B444AB0FA665B853FC89B64E02BB02C5273CC948B00041701459408C95E4BE49EDC7CB605BD2DF31C3C8BB2AA9FC780840BCC55474C2F66B7E16C6F527695D367F70F570B13C1ACB546D8439A1AE06F362C224FBD86441D82430A345B8458EB666BC93739E3D679754117C95100E8F00879B891C9E03788543C415AA964C3F861916BD7C141777A93B374943CC4CEDF928AEA3EB72F412DD8256227D7D7244E876955B13FB2EAD1C3980AF6F8F36B3E71FE3B189F8DC22C55E3720DA11C6AC4328DCF670CF948123FC7280D6891EEB356C195D2A79326299A684F5D68DC0ACF00B780CDCEFCD7CBE4140FB5B6DF896883D3C6FFC42BAA41E6A75713F8861C18A833C688C2BF6EED7F0CE66242B8196C7C254F9D48FD56AE5ADA9105A5C4AF28D0042E059A90979C6439BF6D498991CF64C68080B9B5392CC9FCA4397647A9AAC42C3810FA33BCF31C89A641D1078A0822D93EB773F418B9B3B20D5FEEE1067766AC561525F88F8F097BED0CBFF5BC498CDFC9A5B9D20F4D4A03CA190563CE543B2EAFD8DC6E4A5885DEA120DA7D157D00EB1329E500D41C7E6BD603E95BFAE227A9B613A71C7BEFC8449B668C59147E1DD5411CBD967CBBD46A9DDD76C547506A54A8245532FF9AA5312607F1AB99F4F9BCF85D93B58D76C5583856595AF5CA1AAC07C945400B35885071802620855E18E0A3B1EE92BB95241EFCAD82B3435BBB8916C4866471BD5715882F6BE508C7648A59B2AA91A69F60C78482197C04B31759054FFDAA254A143021E37874DE407690B9ECF8DB99CC16B004116F51DC7853370BD3538E14A0F02E7BF74D66FF898AEE93BF0697EB6E8E62B95C6C525A03E1A89CC2F56BAC591FA81BF6A1B3B9F1259F13AB45F2E9B0D93DA7B4984A9C71272CA261CC4EE4A44FBA4CD03C75D216672C18A60183A52B28796B356EC498F4926D833D94007E92EC190E9713354C7506BEA6B7B5DB2BE659E2A5BA92D00C01611347F67971478F2C71648E33F99EF201367CA3AC8814DE0F83B0BAFF34A192349C5DE87453167820C0EB0AC8349ECA683111776980FEBDC993314278B37B289B528DB319CF59B09B83342C71FD5E9F13EDF4F18783FF328BC67A03F1F62FD1A4631AFD76363DB1A79CD1EA95FD43934955AE211E00EF5AFC114BE00EAE2A7AB63042992E086810E61AEE3CE5CB0FE75C04969485899D552AD4B006D543BEB93C1E8578168C66667D62CBCB56F98DFBA248EECD891F9936382087F2AAD6F83FFE25E77F8BAB9C62675D4024E9BDCA5581126BD1ED6035994029BB54615E593D4CA81B31A5AE8CBEF8E1A81C32698FB7B4A339A7E4E575460F79C4F4C5F57F9E8DB459177067869E03E2E1681004EBBF62B4F60A9EFFE47921AD22C7236F25438AF46885E120825509D1E28652361EAC64AF1806317416E5550A39AA8DAE2C6B970D44F4F38D571F67E304AA57BA435C4E06CC97C848422216BA778B2736C30200527960A66D63280AF7DC691F9D0540AA47F0D26416B46A6D53B0B93F1B7C3D4DA8BF8AD2FE410ADDE00B0372E9E830C09B206A08D968AF2F716DD04D220E619FDE28FE70286E7EB9C2068F7A37413BD9E65F1B59C331D45AE914731A564D33875A0939A2185348C197CD14DAC59C5E2BEF09876353FB16D849EE67A774B05C51AA2480F18DE40051654DD2C7B9E3B753FEE5696B10BE40BFFE89487DA1E8B1C2000D53B2A98B4DE6C9DAF07F0B4DB72834361E520E45F5E958FE0760F229C16CCFE0BDBF07E186B28AA69231DDA8378DD6338A94D23541B9D8B63B85962C6304E1ACE2B56A3E433F7E9B2A88FBAD5FC71703231D38DFA8C378E15B6503A3B9959E1759EECCBFF14AA09E6BB8F2CC152004D3334E877FE21F773408369872718CDEE15BD489D97F606779A9A38398524E6560260980FABCF179ED91D699D52592AFB3269FFB8DED36AFE7DC79DB773DBA560E3ADF8E12FB8A08EB56BFC4692BEA05AA288012B580E43BE085CE583E9C9DC18A9D32567EA950D8165A2F8A443E7AB5E79F687690A8D8D92FBF877C5B84D26E6FCB3671073BD808A7E908130A845C95A2F5E360645611B4B55B03169CC1F50AE2FFFAAF50FED8CB782BF3C67775B613CF82A2D102199E49A329496C0FA24AAF6370A3636EAFEB992C663C308AD181DC308D81FFD713505916300732FB1F8DCE238CC4104D26C588F28FE7EE4F2B8C2024357D52C7AA29D339249086CB2202DC1C847210EAEBD3F06A39642711B4608638564B0DD2BFDF38CD79CC1CFCE1226CA835E6EE19E4089A6F18E7ECC3597CAD3FFFE13A5F77A58C2B079DA25B928396FFAEE81FBD9C6243CE0EB0872A187E6CF99F16B1511672821D11EF88884964BAC6686C2A7732035493FB9765B7A51E845C1C79FABD99438FD84C09642FBC7CF1740DEB012AD050F5E8FF03E859E85C51D2E87AC41185C67C33820EFFCF2D79D384B11B44A806ABB8247AF36E3972222C805EB9854D9FCCDC7E58A101A5239E60CF4836C38A6ADE67686E6487547933859D46D046BFC15AE95B8D0A42A57C401EBE78ABF495EB390B8922C97270C790C2FAB9849ADE48EA8F4F7C6996F6DB661500199BCFE1EAFA1ECCFAB1F674E0BEB1D03319E73126D7191A64A80FCBBB06B1CFB718275BDDB571E8F53FAF81DBBC0522263FCDFB537B3BE9078F2AD449423152BB9DCCEEE97003D1988540FAE39CAB62593A9EC909489415EEF4229358229BDDD45CC35EBDBA088C4BA097BB0E28814BF5048F4F64E6A587B0BDAAA8A1B3E3E69D3D7B6782FC42474773C61DE12B4C6F183F9E625E337EFDC97A79A5D2C0C939FA668F440688F7A3E0E28A33D36D331069294DBA8BF768010AD93A224E28964A780304F59B7994D972832728249934B5347580C16BCDBE9F84EB34EA7F7645635437B0F5422E3DA99EC2D53B22B1A55BC783CE86CC6B1BE7B11F837CF2BD09A514B12ED7CF0AFC2F70F1D6D08288524263B1129135D664A48B0596C4E880E4E01BA3889014C07ED1B7F172AB4F4A69FC8C04F0ACE8AD1329A4FB594E9EA30EFEF31BBE418CB5515CFF8A375CBE58515B32E799E8449101093A053EC99F9CF78122FA2D36DDFBD258EC81D7B4D18BF882663CBF24D2A35A93C00AE8EA81A3B0E8040C1E259515156D67DC76602924BA51507C4994221A3B1CAD674BECB11574212EBCCFDCAF6AFEE288BCE11B7FFF1D7191AB329B04A237F75B204634676932FB0842E2AB888E7D5A4A6B7F77EA04ABF4B9A567E5DA5267F35CBBC928B5F607E9C08359F0031A934152D77E65C937181C92EF4CF17F6EA45171DEBAB545755795097766318CB132ACD96CDD65777F41BA127CF251A4E9B3348927757A42AD8FA83F6CE7342D935CB54984E45886D888627F0228E50082B85E8E9DDBECAAF049C25C4D7B2EA919716271500D81EDF574C5AE91E5F0FAD7585EF69C5051473AF913F887B31BD730F67B4A44081BBD567B57C061AF465237374E0BF4753F3C6CA28D45220CCA3EE6F07F93A29982EB5AAD70763ACBFBE55015D1C52B64954D4855ABCC319DDCAEE75CDFE3B3C31C329A77C76131F18F3C3904B3EA4E691C03C32CA5E7A1F9460760231473115B5AB7E159013C96AE4885566065883CA3B9661C6773B77819BC68755D529FCE05E80E08A5097EB37BDDC1AF9BDFCD0A040D4897E7FB496EF0C6D62C034088E7E9B8DB52F232CDC9EA88429655ABE366C54CD534DC9038F45AC0D0362E31086CA2FC0FCAC3FE71B2D4EEE548F69CE4433601CD3431D01BA6F0C23D612807EB8E50BFCA736D917F67DD72631BEE8728006D2AE69D1A1BAEA8DE50852CEBF7491FFF989C37A54EAE31652230A0D3E4397B051222C4A22BF481BC52E2012188C7576A7ACE81185C85A2E841119B47B5429DF277A976F15D5652156445905EC797729A6647E1B593484ACF2724E81786A0C062DE87759E82202A561FD077D64FDD3226A1E290F660722040EC7AD4383431E195412DBAD0AE620BFE808D65D3937AC9C5AEFD6FA106C88A6B192D4FEC1FB1A06907B0796F724AAC6A5EFEBF50C168F990BDBD6B1D23E098858C07E8D2144532AFE040E45B25AD9AF7D92F9DCCBFF3DF25DF574A4B65A219289407EB63FF7152BF1E651C6F124BE32545B50E8E2CE37F1042A68A62AB70D9DB540D2B39293E008EBAA632B85EF1052FDA17A07B9B1D89A76FF7E7EDEB7090496855B29A9174780D504F7228F8B7436F4676F51975BCA614554FE6B3F946F5E0D1016371F9CEED4521477CE8E9CD0668643686D8482CEC0BB4D6A9E8678B1835F0952E2700FE0C85A8683DA91638D81A85231CA4C7B55C0C0DA57DE5E6553F22290CE7EE72867285D096C0FC16A60A664C6BAB048939FF9DA476024235DDDBF7F264C90ED44E953C4AC0FB50362FB2CB4C4FC2097F07B71772000D2C2A5DBDF0B6FB83B1BBD70CE9D6A8BF1F924AAC4DAEB6AADD891A8974C9BF46FC6038F6B77D6AC0D6107AE6AF5B93B186253AFFFD8CD21835097C4B764F3E0B2447776549D5045E4346FCD3B7880F1B3BA794ADD6B7F291D3534DF034F822D0A41DB2AF9F1E51F212D5631D2525B1804A75B50D8372B6A1C200B81AC1122AA3C13D7463C383FD123DF4029BDAF6C227B3C4B54F75C5315FE139F6A0A3E2E819D3062B3309E2630EE4A64D1E3DBF23B489B96E198BA98D8D3347217A5FDE4DE453012E8564BAEFBE3939E59C0A725A75CEDE373501F9103011FE0EAA40C583AC73C92F47BD528600C42E0029FB3A4F03A3CCE87E5AAF4FCCB47EA8BC62E0F542DBD455F7163A2A8803583896E3C803C0D01846EBD8BB1B3FD396A7C7BC3F72A9D0503C44FE30E5E77E0FC8B373EE931CBF4A9867406BC91972B946B9ADE62415CE2FFC71C2E64DEB7E6205D635977C778BC40C11E36BFC22A17FE641346C74DADD255D329AEFC2CE5B4AC5B195FE2DB453F1B41B3334D5C480BBF10FDE88C722091ABC85667F2B52A3505A142E4D1546CC41E154B345E8456B9CD0E241D70EB4876A70623DFF3FF43A8D66EF60488A7860485A8E518AF4A7056CD02C72E1BAEA3944781642A36932ABFAEE3B88B57B213F9B358CC3F05154DF8D2132A74DF27556DB6C5E45256481C09D18DA604CB91E6AB7AA29C0C1009A406F1B3AAE268564E04B07E4E9128FF02513AB8A8665BFE1E352F46DBDE7870EE027A6E84560014659888EB6AACF993D7C9F9FBC2974CAE290059802F5D224520CE445C404A2ECC57CE6FD5961EB20DC12D436F0B93614CFC844B476D449416F54459BAD09F886CE3C1C307A91E62FC736051E6F6F8F5AD3372398458299EFDC1809997FAAAFDE14B15566B381714E3522F629A5ED9DDA1EF4B9D4498DD55F8B0A48ABB2F9B1FCBD991B5465108147BB6125FFEA6B6D479DB6A9983A51C041375B39FE6546AB5B5E089DD7E228D5AB17127A3A1E3AE82A31E952E660F72A1F399ADEB4E1E11C390BB8652F2F7B6D05E9F4B6FC90AF6D254288BF564C4663014C7A70EB3739D28F1F17B8627FDF714E85B48EEFEB1FD456546328BF2E2EED112992AF78911A89E1248AEBF1F79906EA91D41CAFC6E541D2BB40A7050C5AE4B66547C9DDA88590AB8B0A4B01B5F8216447A310D1E52C155F92659835F1086D381F1F2995138856DEC6FF59380FD6C1B6EEA6E4061930CEF7217701DDFE17742721794DE824377392AF3D949ED9B0455C58F7395DE0FDA5485E310E8457A4270D603BA5AD1854811530FB7178525F4BB1E5DFF89F6FFE0C83C3E47E244D8F3F8AAD8374E3FDF996060E18D2A5397192823681CE6DA561816C0EEC0C0600732A37731ED13948439E8961BE44D32A3097C1AA5E19876ACD21DF812265181774580A8C04ED4FD1DE2FD5A1DFF9DCDF4D97C448BF9A4DACC22D4A55F588C87CCF5C9E178A8FFA032A454908BBE41E13D829FA98C066A7736577CDEFC6D5441656D0AC95C872861BCE0A28C2ED6E9420D4D167F37F96087F9E761F38B882CD41521DE8E2C40564C0E001EDBC04982669B82F05CD0411A6BADDCB704B545FCB19A286BFFAF0FB6DC889BCE75C5763BE1D70DCAD1D39F395A75E637E0663F3D5A855F53F700AF5F82124E72CC2A4E41A4B43FCBA41E55298A1B799368BD5F9B507FB11E8BD2D80FE517A5FA935006064278CDDC5EED43B7C2D309BECCCBB2C0AE3B8D09509315933E2DF91304B1DD3777EC9FA2415F7D18A96CD08095A30F7EB9BC12F8739E409EE7DC062703CB3EA591531F47F5D1C0431E9F1883C3BA249492EE619719C8B3BDFC1DECF7E3C4CE4CE032FB2882247D1D54566E3819464837C248D35647D273A87F8BE667760D26A7EA1FFA682A931A4D35F7407FBBBAD725BEA62449623AADE97A2789F2F8642F1CE12A06C93861DE9D27C5ACE0E4ECE40B58664176113ED6437B8AC8B4059653EA30F71A023544BFFA685343E278129DA12EEAADBDD5AB0E2CCA0B840E87AF0D0E859449893276B9B5894EB0C57C3222E01E7538FF7E91807C10CDB465A12CCD358151D96856C6143C9F8D25AF8E8086C83D4CAE37BD660D15C0C0707691E8366C4AFE6DC0AE1BFECEF9BEF46CFEA3356A3155E027D1C921ECB852BA4B8FE8E0C8C00829CEE4049A21A1C3424D2BE532B735232D12B81C3C9E5B02294701E6BCBC8607F2AFCFB2DD9B1142B4D261418C1B239B0B22451D7D3AC64636B0C7F96B41D7E775C1CFA2E277C957F0D59BD1FB02226A462533850E99E917E310A684E81634F3876D6AB32CB5B8FAE9E82224BD2A17A7C72CDACDC6B3438A083A6B0DB9FD91E05BF4C83A36916EF35C5D4871E94B1671493FDBC497BFA30328DD24D340A07A960828A855FA95EE33FE4FCD15B14B7929D338611239AC34CFDA6503E4DD9570EC339CFDC8D1C3D3536F5176901D012BABB133EBB4560484344E044F86A77C21183C82BB2B6632CF69F5A661C98EFDE5529F8FB965DCC6AF185CA8CDB4D01C5E8902966B063B8D1724AD18DAE495AD47416B61321DEEBF782EF7A6ADE3CD0D5B9ECA84DB5D50C2E5C7D8B8DB9E0F398376CDE3D7E8DC46F0D77D38D6CF6055D6D074CBA92A27C6F9018CAE87C97F1B3ACCEE495ED9DCE46DF4FA5255DB2C7F2669F5201058E90F7567672162E17D5B6D028C6AD23F2AEBA32061E6B33EA86915FAFA2344CC58162C032CE837D5C32F5993013314BD261DE6EBB35B94B8F690C5624A8CF5509BF50D3AF5FDAD77311B6D6F9398213AC1A267CAA0F52A262DA4F85F5ADC79947D2C5128B8E0B0C41B9FDEEF6AEC228EF97762CDBDB78273C16C39E446576D54A4FD04B7593A9ED7897766CACD515D3A55959FF99C1CE28A745DEC1D8F2565F24F4A1E14E9083AFF510F106D982A2911197338499CBE38CDF3D99463B13EE26B47D26A62CE45EAAA04A3E70850D5F23470FB94C42D3235D5FF9E6C37CEE8C93591CB69E0735B03EB262CE6BE6F0144DFD66BC089B36D66287EA588C78E39D9B6907EFE85C1211612952CF13C369C2AB3D921E4630ACC75F2AE99014776B26CD1F296F736A4616FF662D5C6E18C4EDA6D1791A71BE969556FF11E1192D3941F8020D2C731403ACD856A3AEE6ED7F23023BAD7BF138C702B6449E2601042D7990ADB988B650AE202F3433CF26EE132A7CB13650E86A6DBA6F7FA53B2354DEBF1268734D7120F721E18FEED2F93C268A2D3EA012F3D7F68DB0B18A5CDEBE13CE4A05683947DD985D4AED1E192FBD2719755846C9B758FC8FF28B9999D07E634645064C2C9DB4CFE50BB8A030B60F43AFBD588EC17102F614D3029FA811457568D7726C651C062391A2EC2843A95A3A48AF58A898BB65FB852F73E9A82C6AA9D406D80C072A3B426D8EBF261BF7AE0E9DC0C6DE9F4BEE880D775783F910AF19DFD8EC2656213FB9B74EEBD8E1BF860E4650D446683B7794086ECE1E2AA723024C219E3DCB371624C6D721BB60C797003D89096BA0F489D1CA60C57AD907BFC8E97F4E057B6D709414FB0A302D3057FB4635F70BB6A32CFD842DCD8D9C9D45FE082B3746951A862EA870D903382C138425DF936A505120D93FABB8F523C1D3946B85425FB338CA7DC4B2FB6512F0C8A67FA47A416284EAA943E1A9C0607A02D27F55F1DF2EB6090F94B64076FC2D3D3B3694DA5C7EB2A180DEA14AEC21156E1110DF75616685FD53C72252FB87E7D19EF5AE8D9E129D0984A06520C789DE22CBF6E2271801691E0C3CC672F6865A41559910D0279AB9E0112E66B2A1C2B22B6679CF70E3FF870084562ADB36F532E64D44C7264E44D488076F7714A1089526118D4655FFE16B02D803AC2601493CEC3AB27878CE95ED3F321913217DE12B8E5E8FB75A85707EAF6F1FF08CC86B91632ABC7CDC42D1C5D0F2F49D5F412B4AD0C5C46CFA74643C9333C5F3558DC3ABDBCBE23A3573146D648D540116136F3F29E42FF07E26C1504E47FCAD1FDAE63357E421E46440424921404ED02FD4BFA2FDE68CBE6CE49E4E120C141013DF5C0BDF776EE36FD5899C0FC057DAE2C9DAEF6D37BF8E85258BB36B54ED8374BDDD49B6AC2C8BF3105A194F76DD512336EAAFC7BD2054AF6A9606517DE03AF445CCA5FA65307D2E116E42A3676EB6033AA17D76A87F52D144CE25E3A8DAFD3E044289C4600BFAA9CCD963D14A19C5911C3DE649439440D11A21154EF25649F7DA295E0FDAE8C48351BC005C011A10D201B3062492A7CC933AB5D854B26232B7091CD0B7AA3135F28E3AE75E267C223C5E03B60FAC1BF78123C5AF76719191CB6BA277A5BE81E64117AB344D92837B6D600F36702F4BB4532C5EB1C9BAD8A111C540F52A225DACFAB37641898B1FF770A523F8BC8BB0DADB59235DE055810396F1993539A9CAAB622389607DCDFDD51FB67CBE89F0F868DB4D27A7A38542A076D158919DCB621BD325F23AA0DF694C444206FD42192FE7F9A05743CD54D8F111676AC35A3230E372A5A6D7E213C4584EEA1A4993067FD28DF6690BE9D3E94AC06BCF89BF1AA47496F8F6A18524187BE80D59A4E80193CFD757B706AD483A916AFBE2A56E0A69F3B1BBF9F4B239D05C6C556A8D22B00E9BB1FDAA620D949ECDE86EAA299BE93A7884C99FA782F2BB3BEEE86046489B3B8A593071BB1B2E833793D854F8A9A81E6A6947057B9571F2BA99380DDB25D878D6B48F09ED7DBFACE92B6B82F413E038128F6128AF3BC467E9A4DF2861DAAC674B6D948A10F28F7D43657FEE26577AF438A2F4422186930702EBC6C9173E661D59CE7594DF95B861F9D12EB060FCD3BA43159C9A1BDC1EF13E04893E411267331588CF4831978469FF569C1A738C54001BB5CF4FABD289075A165EDE0A58F6CF6D215D306A7840CBECD0E87E3AD186F7A67A967373551E13D2956E5C578A7F5BD50E2D570F9B914848D46A640913EBED2E2ABFB86916BC34EEB3E8A671AD771F6D3780B6FEC143E26F53B02977255314BAE9A2CD9E5BA2B49C73226FDC724A859F8BAD3A9FACA1B0E5F2DFE7E1E45DB6D4BE2B76535A817F94594A4541C01BB62AA83A690B6D84FC13B632972C61D940F2C9D32837413AF8E42045ECA3072CD044B2183400CE63C418879D13FD281A8D0835256DDD2BC3C9750C1D44CF1037FD7264B7716398FCF1D31CFFD0B7C52C6370E4CE6FC163B40436490A757465B20B8890C3B5C0AFB971ABFD01796569E3BC73C13D1E4B1FBC1CDCE59D21B6B110272E5770C589603FE67779A49AD0EC66910A2BF4D8C8ECC18A32EF92F502126A5DC3DE618233B9914A9608B2F17E5161115D9A3BEF1D5701A9D465A1437DE24371C9179800CB5728A7F3D734A2A706BC64D356BDF591389970B6CC139AC510A98E3C75F20120450CE45373AAEA6A279BBD17221BCD32ECF82C11B4C1CEE0A44792CF56978D3D2399F7ECDE9F8D9217F8BA22770E210D0F1AA852178B872E296762873765A73DEC08873C04ED69C995C5751B97DEC23B94CA674FE3F66211317B074D8203EC530A20B6E6DD21AB55895BEE1CBD0876183D652F4A0D2EFC95749F8F192F860BEA534598FD709B396C209CEAE4D9190980733E7E98C8ABE52A53C68D86053B56BA6FCAB5C827292D729CB8BFD1FC8CAFCDE15E4527B604018F28AA16C1E913F55461AF87C9A7BE1A742002E52B3A14EC30B259DDE7BB892CEAF77D25B7670B339B334878F697C00CE6740117AE7C67DF3F8A7BEAC89D4872682C47F368F835AFD7ECF0D8471AD01468B7BBB0A974EC469A8F79ECF8D379DC13685D2A8F6F19CE102C3DE34B11422AFB42E894C8D00F606296DABA7123FCE039ED27324D60E853BA94DC638454088281335D437A954333FF1A8D08E2A4D25CB3BA0D08BF6625E25EAD3C1EBFA2666AA49550578D3763ECDCE81303B53F18B00C8900AF4E0532C5ECBC94513DD9F50BE511CFE4D3DDBB3F112AE148DB062B2EADDB901CDA6AB6BF59D37F356AB34AF97D3DAAAA417642E87C9B95AA546C682ED641214605F82A4F486C9C72576106F76D7152615EC8E77187D4485071CFC6B0AE44880442790696E057A3AE20C860691353B3F6BEC5F1C2DA07563B423BC01E0334099571158A432441256D7C409B7B6EF26442075ED17E2BE37F8EBC049CFBE0FA89CDA7A58DD32C417B34E899FBE86E2FAB8D30846DA17144A6A66AAE1C24FCFABDA5B573FD2D6337226B5E49BB031B4D2B455B6DB871076F67AC03C3A73CEC01BD0B1EC42ABD177127E62A66FE8E475B982B4490F0877466EEFC7317A703C5C07937340ED4B53E5DE5325197FA31B8C8E05AA2222064EE5D7C06D4A1EB53151F75C94A2E259688CA0716548465C5C255D81FF10BACC2C13098ED8CF7F5B15193EE14FB5D258E95EDCC93E9796FA823892C705A5771D561787C12592D269D657FBB71F021F365B7453D50C35F748FB2B7F36DF28769B81EF12A26A237FB0239C17355954053DA0E7B84741AA9E225483630169ACBCC03EB8CDA28B7BDA685C756D66B14488A2D0AEF7E6CB2D80F2726327257B7284B93EA1B56AB80FAE668C04FA49FCD658D896A997685E1EDB4DDF85456B37F32FC8CDE50882EF0F09BE4ED4AB9A425806A49E8347A42A50B38FA8D1DA2FD2C9438618B6701DEE159060C186D50170F24F38E07B185E3272EAEA4A0A7CA41A69C69E9D95E271287D3AB8284146A58440EA131A7F47D73CB2BCF40FE3A58E1B998C2E5EF9CEEC8EA2F8467BB7757C03A99FC8F014EE933A7080CD46625A2A7A251B7A37E4208956A8C9BD35E6F8674BC06FCAA5DD04A2558C9665C7985014D3AD95ED256FAFA358962EF5BB26AE2FCE899392DF858F99303E2417BCA7672E991FEB891F5DFCA2D461148367C5C0DE1460BF557194533DAF01A5E8E0E43D57B825AF7EEFF163DAA23B9F95C063A26B3D213459D885AA96023715CD21DFA2A2250F7610B78A77123443BD06EFB7DC85D1F16D0019D2937C3DEC4DE6389485ABB21642B6E41ADD43CE96F228C08DF6288A647EC2FE96032B6DCD651FF950B72964EE08FC2030272E3F601DB7F7E770E655389CA6CFA2F9B87CE76FB0E0CDCA4EEE5E80FC756BE46CC09F84BDB34ADA2AFC024ABDE0066ED939F8EBC236CB3F577C1BFD741F9D101A038EC86AB0A85462BAFB2E484D6722499A6310FA449D979030B2A21206D44225800BE2228FA00AE6D92C8DA652E1B003BD2734D30557B735CC2A591E090394DB791245C22B4D29E706476593B6F90C694C5B87BBB0FA2C479E292A768A9687A713336A21D1199186F852C41F586E9BBC64004D8BB6814BFE739834C99923177AAF87B926D56A7AFC0879C027332A60951C84E9314380A5A78E1196D094F15D856AA36742825D2B397156BCAD8ABE7291FB41DB4365AAE49CA82CA066D3B4366D3122ABBC00F05559DAFEBA9F98361DDAEF068D60B18265E7184C4D6BC9C3619CFF5C758090FF6398CCCEB78176D2A8A2A4B9854C4ACF5CB614DC1CA0E15E7E85442241D48FD3D6E851A5D3947FA769560928948FA26FA16EFBD2159994BD92B3D6B0C62818C91D4724413A7F40B2A2D67F4FC97B5DF6A7E3CEC03158E201D6643F402D3DD6995A42900D46C2881198CAD28A27489F5116ECEC3E38D999B2020E0C381DB3B8230811270D75950D9BB61548802DBBCB68ED8C7BCCB50D606BE400BECF873498621E66ABD2AA179B3E90E055C3719CE2FE047F815B95B065BA086B467AF4124E276F8CEAD000BCA5499D36217B250009A7B43E81CB3F8B1A3238EE436FE61F2F942796DBCBE570BB4FC783B35C3CA31BDD432B33AD75B08107253E8F910EFE0D0B5453A8A055D884892278688B3ECA612452B590AF38DBDD9A7070C5610E7A3CA6C91D24438E7F45E7A2A330F164AEDFFF1789D5E875EEF121298DB79C77278ABFEC3FE3DF843C46F40E847272EB2669BABA808C38E31F13516D5066AF4DFCDE6EDB2FF0B0A4CE9FA9B4101F6F144B02384868617CD39175852E065473D6F566CD18D7403FFD24DD33ADDB52C7CC22167E49102C46DC369A92CE2D2FCB81B4D1F14B7CD2F80A65D8FBD20FDAA23219873ACB8CF934E68D6F8FED6B41193CFAB1F44CE4BFC7C67DE1E8804B47DFD7E8AE281E19846AEB6FF94AE7E7CF6FFAB46242843811E6C5BDB78157C76DF4F92FD3653D7FA5978316EB055059C6A2B6306C957418860A88F63355E76D96F4727128D9B3EB98501AF5B093F2C314F98EA2CDB89468E1BD51138CBF25E8B911C26B97DCCA47F1A1D6C1CD415A5079A756B8A8715DD3164515537AD5E5F4216C16046FB0AC50DCDBE5CEE7E3CBB51B6ABB4E87A407B90E0EFD49DE1DE5ED29184E7FF0DC31F75FBB94F46FF6586B36C7771E5A68D060A965ACCF8D640C6B6E4530FDF19DD2491BCAB69ACBCFD3EC7281CCC31253A471B652E21C4CB0B43613EC542266460F0A6199B436BEFD95572DEBEE920A915FD854D17FFD0DF8C74E23B21B28493A0927709709B07C65878C43B69DC501E9D0AA21061ECF173876CAE708C764435832D9D6FCFE62DDF2543016D6325A56D9BF1007886E62E8A832BC32063CB0717D723C5E8C5F0C0EB3960577D364C93060B64EE04A539B7601CC3113E0AEC53CF21AFAD0154DC5CCECF038474E0F4004A65B1EE2801F81968B88C3D35E87CBB126C02D770CC3D32A552883D351DEF47847391484F80646728221F993921BFC14126EE3D9527DE607152724C6D2DD305D3FEA0AAAEDF6509A2FE3248494A54FDA8E3CE7E6BBCE234E4686BA5A19724BA2CB78CFE71A6AF45532EFB286C5BB47BC3C1EEF4E4A8C757786AE974F30A86CD60EBCBFDF5502AA8F643819CBA4301E731ADBA1345B61C0B444FE7B817EA86F8DD749C451AE7D24A68D914F26C918238953E8AE61CC8553213DD6856C7863F9F6BAB1B4C84B225911E7B92BFFC12AC211B2B2CD905877FE976E07057963D47C437FE47D89648053F81AC39E8FD2F3A726866F6693E503CB6F0C3F0AA9B3EE2EA3BCDB16D726E1C6D8B073AA15F64EB68D53B1F8CDAC19C7AC33361226E81F1C793BF188755A3FE1BAC38B91ABBD4F077F7A28983EAFADC346CB941D49492625893453B364D07FE06FE42B160C16FE0462AB6366FFDEE54DC9CE4DCCA21E4E4AE5E92C872D1E4EC6FF6D3063C98A5AA5EE72481A0BDF15152E2A5425AB722101474D0E1EC8401273EA1BE1DAF7403190A94305BD1C7DFBE1F35F65D5CB97E82B7A297047507FFA0012FB73360FB8719C174E78A989A96E60A9184B3F3A8188DE100AB361921D38E8142859C8F0F7D441DB1B2E9687BBD1086643987C83DEE0BE8CED4C83BCC82B62B45311CE4F13ABC55BF5EB1ECDF15F5A07F8B2C42F07FACE0E299E87727E2D534FEBF7B9C3894CC3E2E4127A294B9FA2A671273B174DBB81D247CD2846116500A072DC3962C65FFECD0C0B46DC2AF52882058259C26FDE50BEB319AEECFA1FABA34C069680B9EBAA9D96EEBD7EA30E748213E1283396A2AFC63527624641D4E1F1022A973B1898BD4CEF4D712B49371A51D60E08F42ED1EA90AC49EEFBCC53E7F9E899DD1AA4056F11462DF1A4C81620A73C831CEB897430A22252B901EC3D6F3DF58EF26422F796EA31AA4E0E9CE5B4A9C312A22305E298FEB3B3628283D405EDF726937327D90C542434BA3B60684584A9DB244839D2ACBCD7EF147A541E35687B5B8F5F07764973112D20D1ED75DC31F6A938542B42EFAAEE0F11B0583AA4925C3132356200E8D6BDB3127B975F4115A7A8A1C471836E3C5450B501A24D4A1308BB319AA827222B550F253F64B6F7D2322C6A2D3012FEC265A66A60102A3340CBDAB900DFDB36693D41DAD8DDB8875F8C3BE76AD5355DD81D67AAEBFFFE9458E522BE0312E60F63DD92F25C0D7CF82F223AEC0BD7456752CBD5151FEB5368F8857EAFAA90E8C7499B75D46EC4CA20BA8A24C90C016B5BD2CD7864828C6140E98EDB9509AD1194F56D49675D077DE92CD481B469E3A37F7DF0D5392DA4CE4CB282530F1C73482CC0926B877B00B0CE49FAD21E4C26194C7E950E0078F3854EF88755E08E9380165C584A3DBF1ECEF6A31B224FC321326B93797BFE8D67539AFB80711A0BA3CD67D963BAD346BA813D35A2EEA104D36AAAB863C656A07AD61BA60598C07744D32ED01EFCE928346C09EAAC2D392E5655F0FEBC486815AE30A38014DD8520F73CCBB71D9D42636328A50998A2A3BED3E4B34D0DCD65B94807064E2EF0C420898DB96E3B99EA9A0AD91C63857DEAEDDA5E644E62212B23D72FEDBBAA78C6581C677B10689C4AF387626DAC55F4EBE1893D52D28D20EA365702448A64A0C553ED337C3BB911DDAE2A91727299D8064BEC880183064574B5E3631E70A0590210143F4079C572BD5E2F7634C2D53B1FB1DABE79C484799E7075EFF98F033F5B2EC66C373825335D883911CEC9CFBBE2E38129B7E03D9646A7E513D5069043BC62AF4C524F12D8F98D8C9DAC5D8642DFFF48CF6737AFBBCBE965925F55F03BBD5123C9DB47AAC780301DE91FBED3C01D03E6464C2C2915BFA187A4BD93E20C24574FB91F0358CBE0921DCC8D6B7E9976763A1D2158511861EFF5D1C0B71F608E7ADE91D9DCFF5640B55BC9BD1BB322C879C7EB5C06EB2601D06241D09CFB1BC1695DFA55FA044E0E2E4BC86EFBF6A55740C4640512DDD6CA069940BC0FE1738FD376C68BA8AF7CCBA7D89F7966B29355538836372EF418D149EBF3AC104919D91BCA2F13E79A7CF7684A4DC0AC556A2843E041A71F97C94B859FE009659F593EFFEBAA6F6C1C57A5BF22752613AFB26379C42AC25804AEDAE22D63B230FCB858F496B8EA6F37104D0890525DBDE06AD988BA0287B0938572F14A98EC9E60E973FD693DB1F2AFF671AB03FB12B729D0867938DF6B60EC69790C992C6C33A531FE56D0ECC1465F65E3E57FC9E45F0F65A1061CE6D3190B6C1B8708A8A5A47222369AE889D26499CDE8F0548B8D7071F2D4DF6C0F2418BE449552327981CB0B54F792F29A71E30DE257CE1B3A7553A22275E4C8B9FAC3B8D4E9912BB22B0A899E7337513C7ACBEDA15FAD3D6919FDDD941CA659D78B74FD39E2E2F622691B89CA82FFE602DB2578A20D4665184456F32DF4DD6CBC412EC7C6914CA427CEE02F6D9810AAE1406DD68ED3869BD8E3947A2B3A803E875FF82005D853E3F43A6BF936030744C34C8B71B7722BE0AD3F475E531C9249A42671D5F3A5C77C4C28DE29AE953EBFB572578B17B636F8365FC755C22871E7D53A1F1561C92909305C9FD36AAF79E8844B63370B800B25CC1355211D9919B830A988926829F808DD2C66400279E6AC14F8EECBBE8B6E9ABFA3BDBB38A49535F64F719EF48C5FE6B2738DC6F71AACD70274FD40A29BFCAA594AC3E7D0C3C522E406BA6392444C9F362339E8FF34BE330911DC7EB11A47FF3A62A46CDE961A40CD5B24020909E5B034F45FE96CB156FFE8E2FDBC12A7C12D60D24BFBE596544E4F03AF26F086A5A667496B7DF302E4DCFC568C7ABD665EA7EAD8A7F5A000DAD9F43E68C4D8A14742E050769B3CB270E3856D7E8F4E827046D3E55A52F0E02C883881914DE87AE3C24D93E61A94919B40398D3EABB1B5142431AB919208A9785962D05061EDC951C83C73FBF6AE8DD6FF839E631C9FCF6635FA053DBCF932E359F83FBB3EE310281569741E3A8975FAAD1E573E0EC3207F6DBCDB8CC90DCA1CE517C8DFC1D31AE4841F87A5157792738DAEE7C29240DAE26C6C3E9D8A899D2271B0C374BD2EE846C6625E31B2F8379A96F601323039D281608A01A1844E5D1D20CF1D92C52107CDA71BB3B7EC4DEA958CFD7A79F71868116CD1DD2B2E66BB94D1373B733F324BE489DA51BE72B01A8572880AE1E61650B839D03B0192D290D5B36A9CF93B30458B2E58A13D4D5F84F37A389E6B01DFA66DBC6A25338B2884EF08056BF0A9124DA29254AA79CDF1B0944DDED4BC7FE683EF7A3C7A1C359E61E959471E30F9D534F43EEF274AC6535C616ADC7455BFBFF43ABF268F7C995CE020CEC73BDBD04007562F2710498AD1A324F25A6233B2DF2D9A429F1C39943E45F934986D1979D293F90CFBEBE01665C98C0D72D09A382348136980B31F5D4696B85C3F42D5C445996804159CD4C4CE7547C4A3FB718AB62D9E9826D05C44C6BD21D708CABB01F46514F29FBE7352866EDBFABD0ADBB6093E1A519D0E11E27737239A07866752B6D864686AF1E308481C53C635046C0756E8008D3CD26DB970C5D6EF8CB9DE6BC4339EE9F88EA45D11B74A1525E2F1B9F91567A78E403F7ECD47A99E95C098870B928E1B0DAA984CCECA13C6857F350E808BBF66AB4EDFB0F369F6F009268D19DEEB377F7D0C4ED6414EF6D23A0A5F37A25AAD3CD62C2115CB70409049CF0CE6D4DBCC5C96767614C6FAF73E9A76C7550BB970AB3D3ACE0C07FAA9F36F1935DFCD5228427BBEB5FC7A2F951D9210A5BC32ACCA7E78AFD5FD460CE2A79348714E5542BF2D453680B070E85F3244E8A6B4EB6ED49F803E60B8A383C8BE6283B1C4DF79E0C4A23D5DAFCB26DFC5DF1D1520FB6CDA23A05A1513F751EBD0143C2B9F5494BAA74F9F95F189C5767C6F5623559D9F20CC9B9C9ADFE285FA4E1BBDA481A52ABAB36A5393370091A49A59B968CFAE89BEAF33BCA5C2A9BCC1758CEEFC2D0A175C8A5CAD5C7E3FA706C2FEA55F4971A7B8A0C5D1F22A26D7DA9A70603AC34566E4929AE78C8F1926239950EC0A6E1B37D919E24431E53FB08B2F7DCDCA2EF4177BD7D2F81BFC784FBEA0471831CDCBB9E11D60C53D0E062E8BB8D98B8EE5A40960EBE10FA642751B96E1407B38A024DC64D5C2005E71198EF394673A4A0097187D2475CF27B3EAA7955AD9F412A89B36AFB27FDF7FE699B2CC8C03F7FA40549178DF8A3C1A39441EAE869BBC89D583ECB18E310885F33B95B719045CA6955720CA75D5CF0B29E5F1B9E9EAC5EC92980B2D37EF6509CCA6E67544A8116494AC7EB9032E1E8CDB053B5AC0F60DE59BBFB78E3491D50C7ADED95042A8885FE284E90C04FFC0370B92B68379B2E7D52392A42FEB26B2419CC64412BFFC036C01109B9EAEC5FAF485F0D61C37A703EAD02127611F9D25E4EC515CABE21247156F0779CAB57C35581646BB71E87941AB5D06FB3C06C423E9E83E0C07E611C89CB000344AF49498EF5C30305DDC8958F45A45E1218837269DEEDBB0AE51D2AD8B41BE425EB7AB798856911B6F0DC721756A8154B9D1CCD61092D16A3E9E1CD5E1D7C2C45D236C9B21A0ED64AD4C0660FE42FC0B543A34FB545B0D88D42F696D53BF54A1A259486846E81B44C16EF146310AEFB3933BA9F9D4497E74AFE1449D69105B9F295DB24B4563C3FC0166CB70F104B3360BC0998EFEBABC6276F570F7679865036DB59B51AD2F91C0CCD3BCF5C07492765D480494AB5B87E83FD04B75A35F88656D3329AA5FD550DBF493B0CD2C19DEBE4358661C72A71FB17C812F75BEB61302AAAA1F757288C1D8626461F4162A2EC6296B3CCABE21B4F0695F2D2CB02B86035251FC9C5F2FB5BBF28237417DC56471629B3B4C25AFEDC4C9CD108ADAD9DB1330AB680E4998C5B3D99BCE8F08156B630A63EF36A51C813CE22A6B178683EDA389ACF58653582BC2AE8170ADEC4BE03C04CBA603C0E4572A74BD9599A8442E894EB504F7703F2353A8A3525EC5535E750303AC07E08D952755F97AF2360143059141DB31B84555DDC1C5F40372C50BEF6E82B433D87603BB7803FDE8FFD74DE06809357F11C1D6ABF02D4DB8EBE1D5ABE7F30C91A451EE3C1AA36735FAB9185C785F05D28BD470D433ED4ADDF36406487CA1710ACAB57EA0DD577A49C841F5E78B70FDE90BC1087E79E27E53A4B131C06BF33843BFEBDC0C2A207510590E52158C0855C40146AFCB75DEEEB872ADC5E77CD1DD6A66EA96CC223B3295C136E2766ECE9F2CB807C68C84FD04E0A5179D58473860962083DA8D68B70DB95C0EB91679CF5E1BA468786725EDFB179A2C5E7C28B396A53D89A98C7B79867E240176A9DF9FB0BECCC22A526B617CB8FC2B05A8DE411C8C5F9BE682459B487B26643FA894F9B3C97282EAE397A03DD15F07FBDF7432DD95D29E6D50CE95860BEC2649E482F40F7B83A13135A7C71D83ABA44A363C864BCD78050AC69A8DC0A9E601859087DBD49AA01A75053792F74D9A8EE726608D1F009D06363F6E5A463BC362178918737C5F3E71EBF130691A2048F07F3F8CDAB70C9D0F7B9A1180046076E1B894AFC620244B30A571DF359C7D60969A9436F05417DB5759B2D3ABDF6A238B5B5DCA8A0E4C27F7078DBB6600FC0105463E745A321884A4F6C5963B188919EC24C460F1B9CB9C063B2CD1FD5F49C06AC2E61EEA55056A6ED08B6C7C750E30EE66508FF243FE1B5C494E8EAEE5467AA0ADEA834523C536855D3BF5ACFFFC0802365B3889C31910A5E63B9457E46B4B7E29189F1BC21E7950BF9FB44BF5D76078D8602FFD986E1A1F1A74C677BD8811FC6992F39384CB3F9B2C91F381DC01D4E79D2E66E6D76796728E0C48F71817ED182759D8B10F7B5D361D7138CAFBECA3234B9F2F4A76FB00DEC05D67FA8E7217E488688CF87D59AB4FE7B13C793C1A1711C401B49C381F76B5CE120BDFDF30A858DE62A3F4331E4A3CC167030829906935FAC167A7327B5FC0527E014801A27FE0F2D40EC13C66235EFED070979576DA7268D1871E8487C4DFFC62D27B83488A73FDDEE1470832EAEFF621CE8E126267A47EC00773922BE480C7F26C8E4785D886BF8E6518DF13DA86BB2925A432D479E8B8FA9F92442891F71AC7C05C0BB0E4396158A492BD49E42AB4C4737A952D6B2B2780EAA73DEE13037D659A43DE1A8F0E525D7F96FDD1629FE51560F77E4A1CFE903DF0891B39F50B71E0F84965413DB34B1EE95CC1B6728AC3D1924B34D1BAD4A4E4F7D98D1B938C567B6F3C95770068775F78EFA147ACC619AFD0B6D8C66034C21B2991419217256D88F265922FD49B4BB38D2955305A8D01D01758B01134196C525315726D9BB6D77917A57F2C46A05DE91A3FF80DD2B5AAAD899D679EB55341FAC6D5C2E9C6B703806E342B2C11CF84B394BFDFCA378B26C7E0CD23C8A87B7CBEF6828D9E023B2B7060A0FEEE0D29CE59B379A02AAB7DFCC41A35CB9A94408A321BF78A54D2D4DB0E170101798F6622D8087A2022A993E85DEB5CBF0F4DC2A047877EEC9DD145471D57015DD59A37BA60C9BE39A4AFB92289562601BCE8102C83292E2ED842470D715D34F11981BCCB81ACB443FA732F792C5F11B7DA5D1BCDD84EB80820EB2BA3813F5E6EC5300E622DD81B1FDE8C786387864D78246A432CE245E0883745D9A1DE9D68253CCBFE7C00EA908E452DD3B9669F1E6812E40D9E2C423180BCA98F4591307CF8B8E98B7F828989CA7F3F0BEEA4D408898364C6DC160C94B89D879B1D07286EAA3FFBC6CD7FFE5700304AF3FC049098590DD7F6D4770ED66FF60DB2909C2DC6DC67ACFDB7CDEEF1B714BFE4CA04F2D5172137C4427106DF31EF72E43B6C75CB84BE5E375B6B6D4D21226D0FD689E8F14EBB81372B93F5455ACE6C168345234B378500BE6612FC10536607E85B884AEC780550F2A26FBF0445E0AE9C0F4CB95F01BBC76652A9E6FC457D6BA425EA8B9457A6F3C0AD2A0FE7BDD1C1CB19A9F1A8815D84EB5843AECA4DD005378111E9AFBA9C3CFD808C0C3CF2B39B1962EA44B0848452778168F7F60034A68E5980EB63B94E50D170C680FD6345F12CF30E9089A7C0A422661DB7B1BCF2480238AD043FA1D0DADEE998F7CD69FF04BC336BBD5985315D4E1CC78558D4E235CD7E05015A5734896597F16E65E45E0C819CB0B895A38883ABE4F439D10195D88366CD14F45947716AAFD770C27FAF6374CDEB53B118277906F7E61C583E8C7CE3FE733541882C511936076DBCF65094E37FE2FF54E0977595077EA26E03711FE9054E2D31AE7F99939B415F46C05BB55BA7BC4F31F337D624A94C9629526ED51A9B93B1B3C5551F9B92A30759D7A40025E98E50128232A706CF6C3F6734D00571F91307EFDBC9718D78B3B792909C1C56BB8526CF5B229D4DB47E61D962538BBB17E6CE8CFB7854EFEB5591CDFD5DD8BB22FCA50E4D97BFC4C36E2573C0B495FEC9830FAC229976FB651B82DBA34173F5635875B1460A023CDA65333138C89DC81275F7F3446472F5F8C5F93AB130009F5B797D9ED536ADF5A42ABF6345B1457D5C96CFCBFFBA56CF124E78FEBF8A8BCDFFA97831A589D177AD260499130EECF8247FA5C44B3C0C19AFE6BBB0A7B87080E14F3C3457C8424557BD9078DEC09A3A6704E1D77049A1A4431E423B28B9476EAB6292CA1B3B4B43E18EF929EFFCDD574417B15A4DC1269E593F884DF5D492A464AC3F2436B8C691B88658180E53228AD83C4FB843F8571D42A9BDEF37EC4926DCEE5002A12144600C9CE7AFE483F3A64E480CD09F8CAFEABC9710E01A8120E84BE5861D75705A8D18F02756D8FA78392F1C89D05F37CB9F768289B8CA99E22E86F8200770D6DD2D76951A45F73C0730162C363886282524436D029786E7CFA2EFBCD3D05169D362DC8BD472AB376C12097443080F3C83AF1EF7339D8FCB85FA098BBCB5EC3645A03902B758DB263A21C8CC4874F96D672EB192BC1A183A1B271BC1D6429CEAA8208F5CB240F451A71B6F884537ACD49471010ACDF28887F6A02A04E738CF9FB5B00E0C474C460EED1F791F4EAB3F9AEC225B40CCE223D23D07CF0B60846C111A07A86448B9CF119754935E8C350752CC60AACB55C71F4D5F5F2BDC3E412039D336ABC6F3D46EB0D1C2080CF260EE77F5C73A35C23396E2324998B7DD375537DD35B5F27C3B545492F682C4B89F13F65FC4F72539E4A7763BF4AE2443FE0A2F683A86274672FB9581668CD2B075C274B242536087C4DA1E69D0712161B868ABE86C98468FE43A42DD2AE30089ED92B7A750C73B19A6D70FBC0AC08299EE2A9BC94652B35D5B2D679220D34D3372AD756F842861470CC3A3F2BEE75112B138613A40FA585E449FADD6353A09363EB6025D4B81F9F224817FC2DEEAE01D797AA8A0F8C945FC69D5891355C28ACAB8997A0518C8F4465953819113914A7CB472EABDD1A8D943A82FA41315D006E54AEA4CAB21601A2ECF6CA0521579A6A92DFB6B77BEC6D5A05B0A72F16B0328C860FAB66A1D6113B7098FE50F3B09C2306D0B9D00987B351CB2BE099A7AA7EB7AA691A4E2D243DD7D0D864CF80A4D2FACBEC3C1CB222883CED667477D189100A5677CC3FF0DF31D1119D5F31ED2120E5DAAFB99E8F36E77B3B078C47B3D527DFD6521D7C593CF84751C21D591BB62FA0B0AB65E993408A016415D6296E0F080FA9149A4C31D8B2EA68CD7209E2FB0B4BCCF654B013D92AD7A4F6B1935995FD106663CD5760E63702196F63563DC994570C1B8E9B0A7705002ED56D335632ABE3ED8BC6CAF109F0588040DFD167DC364EA7F692D5F59C5616A6A7DA0C5EAA4D9FF017820225D5B164B6106CE9307B56EB08C563F123A05A4C93488DF63A6E4274BF5188475E8F7ABB8C3E7A8323F689DD93B043BD98BC948A567E8C6C95FD3788ABE728F7B7E299C460F9B35A59BA4429BF417B9F8C54F2DC475A7109B9C25C0843AA86ADAEF388A9915E65EA08C96C4C84022368E79A3A466B247EE6A37918CA0A8DC6AFE291CB9D360D727B6E7415D360AC414BD34DA40A1D995EE1303896465D52707A4F31A30C7B7DF936391435A5FD3F06E336CDA36E473E3D990A6F04FB5E6340581AE86D8EF81B9BA68979058BCFA1363D3F711D33EE9E3A8402A14AFEBF339BA7C34FA4EA2004FFD09129667646A79B6322CF00E1B46C1418557E0E62E106901176CA771979F4B6B299BEEFEF7B847F4E3ED99F56D44F5C73F00488E1DD862BFFE5290DBA737FAFA0C9D95C8307A10DD309C177BFC46A9F6D3BC86F598DC1AC69B070B9AF1CA2824F456E73747A0CED38631F9AC222914825CC3898F04F6AC09B01EF4CB09A63C9436625E2D0AC3C433A31D86948CE34663E5462652980B3B57C0920EB63879E28CA9565BEADC47F29C43F1718CE34CA5717D7AC2CEB6758A16F6D769CC277BDB483808CCA3A6DB99D1018888BB6A49D325891B5D6B4B77B18A5A4133AFD5E8AFA4542710483B52E3D51D8A4FB77D2458C4FBE2DEC1F6DD8C0FDD8FABE2130297D0606F07B305B2CEDB39204E2B8F8507ABD49C0FEFAD0332F8ED98736FEF5AE4FAF8515CD638E28F1555F54D7A64FB38D0B47734D0AEB8B55A792259427613733F237FC57DFC1AD49930D9844C9F44C3D6265BE3102D93E2B62D3B0D7760F613B1F5F5176E0C5EAE47970D30D211403477894B8D66D03CB3AE8992E16D52F6B2073DED09D504B36289644241EFD21018C570A2CEE6D59667F274CBA5733E41BE3370DFA47464AF850B14DCC32BCF1A5A8385314E8B38B2A642AA90B8A5647DF9B32B83D3B4B2AAA54472BFE84EF7DF68ABD0236DE171E5AEDE1770F63823EC143B30FFC69ECC464CD755F5AFD2B51AB5F05B74E96F6108810CDA94F99DF828EDE147BE061FEA46CF6A84CAC720717733A17677BF620C4963DD1A08512CDB6A96DD3ADA995D84A934C9825FA3B588D916CE1898F6C2F75B75481383B27204C343CCCE41E10DFAFBB42BC6BCCFBF7BA4C460147814014F9470ECC8B99D677EEC872172B72E5839D263F55B9FC91AE6143FCD1BC3AEDB12312ED10647E011A020B27C69E35CBA94623960543DB08D67B8CFD06760450A067E3F868386975793AF43AC4D0F3773AFF6C2CEFC8310C0701CB934098D842604E38370182BF05A401C38B6CFBD19CD7D4BA186A595ABAA48B8740DC321FC031D76F82B4F5FD6949AA101D70A702E18D8C2BC1283C2E2CB138699D507FAEC5B6A092E5AECB0AD9BF2E59F175DACE05DC18E485B04DDB963426A117CA0B761EF485B234971B6F681CE3CC5CE58A9BDAD9267E5C075D1BCEE2C88637E2A10AD441E9B1CF4A324B77C6623F4DF9FC6C4AACE068F66017BC82D562722FC93B02489DFBB5560BF60F57B736212DD8A0533071D10ABFCB4EEAD5AD9E36E856C8ADE0B9C4F6F5116EED43A39AF8FFCFA01BD558D7575AF0E36F2AFF74E29435778F4BA57A5D90214AD702A657F5A17A601D77E0F4C6A67B7B8C074514548FF89A781CF2E0B5225D95A944D1048338FF3AF206D331DBCB3F5E9E89C7E592A2295CB783F416C4160FCFD26983ADDDAC52BBFDD6A7125BA4426715F82AD9815F30B2DDA972A2E814D6BD231D453858749D65EE1B4C2025F61EFDF8E12E50A3719899C611682E7B2AE0CC85294542DDC04140ADDCCD5DCA315C22E5ACB196531A3B0071DC787C2753C3069F5D302A9FCF99B71317FF2749749C6E00B73F382983E1C91BC8115FEAEFF083434DEC7E8A22ECF2D1CDFC7B7ACB80FE0DD1EAF7510F694961E09882E50994169BF60C47B95BF37B5D6F13CFE48A9405637F87C157863C58E479488278B918DDF041214BCEE2ADEEF4242F55DE971E1A7F2EC566B362F89DABF163A690C8A8B808ABC1217C7D49933E30272A08689F7519B35FF8C1CE0F338D0B75332D163A5DCDE714B821AD3B8393A1740B6BE4AAC6008EBBBA30B8E5FA2253DDCF16B3F87B4FA47C1D36AC86E2FC39DE8BAFA79E7D58A3A6CD83FE09448EAB6020BF121234B23A72BB7DC02A2E235BB5DE3B2AA97D3931CB800165B93851EC81A1B4B7781F23E5C946F035026888C3D8C31170787F78333FFF8ECD8835AB5E9D165A8B1D97B19936940EC4C74D115A34120EAC800E8D680B36D9E29180BEAF5B3CFCC3913EE7FFDC37AC881C441F79A39F4A4161F3B403564F654B0E7D8D5415DEB9A6E11F845314421CC59C6A90826974B4CC477C280ADF4FBEB368BD848AF7F91D12E9BF4AD3E9587DCD7A280DEE9A7F2B6F2D2EBFF7EC9454173B748D2D90A6AA650D3BB97701EAD27D6AA1D05B817603EF1026E643C8816F183AECE863968664E01D6AC58C2A10AFB51B1A19A5B7BDBAD77D651B78C141AE70B074B9EF74BED349E58CF8A80A910F6DF8887202317BA36950F3B7EBAD45E6E940921043476B0FBC136EB397DB44445706F032FC47C454BA08DDBB8E71D1E7D9045655E1039C3C3D199EBA21596335BB04078DB6B39A4452662D282C7AC9B76D92E112B0027B711151C56A6459FFC70BFFC86941736EEF705E8DF5197B4D3AADCB31E421A90FD5179D9C3EA3EBC8FD7E9F4C29D736076723E2D4146EC325CFD616F6B0B70AE0DE179FA8F33A2536DBCAFAA2BC0A9740BBF41134655EA16438BAA5F8FC96256A6F9999CB1C57B69087C0612FEF4E6CF0BE5D1FB77258AF418EE0B90E8AF3DC38B7A15FF6B8D2BB739FE7D0099AA4694781E581A8F7A49BFCD102B7880E97B89880FC41D0890C33481B01D9BA991BD41B8D6501D34E0A401474CF89D089F3F6A189ED80C3006515CEB7F9DEA85D0766D2989B88280FD46F7BDC7C32C2294B2A1FD435102C2D92E85A03775CAF11D05F2367B57F651C7586FCD32FE920B1B94EB431AD2497E75F4E3C408A0FEF89907C6C830FA14402B1103DA4607F3DFAD625AEBC235D2392954B8D3BAE8A6D02CAE6D12EFC73EB46EC56E13D2729787CBB5C64910347AEE384972A5716B5DEDB99FCDDD5660E9453900DC1AF1B76D151C00E8E4BAD38E84830EDE92CC3099861C92BDBB59D8DE31AD9F4B889D480FC8DC70382E8494E1A25D2140740A5F327D51D0D3CA4259F1CF5DA3474FE28270C9B4E7F8A714F7C69D1F65B48D7C9C69A39CC58E2C77D7A750CC0B0E5D54B2F3450B66994DB524F15AF77CEBACD3CC611B2C95F6C93EDFEB652A70748DF1788E6FA2D45AF171C1AB59B0B2A160C075AA4A92272BC0F22631A24EC94C5D38664B08B46DC96B448C351C77F81051881055ACE0F364C80372EEE5BE7C660C7406B03C8F5345A04435EA61E7DE31409D04501BDF0CFA57A84C1387E0684538E8BB651C7CF4EFD6113EAF9383BFEFDEE4C702FD5A070FAA3DC7D644CB3D96C8FF65F18C88C43A2E66EB78FDD1EA91E9CB519CDA9EE1806F0F10653F3AACE782810776AF25C9CE1C580C381D00B95CB02AF3F9892B4D918FEEBB01E7E730079266C4FF0AF0EC305D3A168197158B5A0D4B1C1FBE4FCFBA947A5CD2E5324D0C4182069C6F328465EC2900B468E145C0F41D724D65547808BED468256EEBD76431E715A4ADAC80D5314ECDD03177AD9175EEA9D9149128DE8715534A648069F5EB9ADDE486029C69C81B1ACECE89FC468887962AE2C063C5EC7B594D88E56F2F3FA4A20963F3BC730E74923BC2DCAED6EF38412E9094326930D2D2E3A0FFAB2217E9059A88882E2AFD3E62FA4DFCB5B084D0CE53655539BD0931BC063CBD4E660A0B1BD9C7D6CF2836C947CEF2C07B859686424B57FFDD0DB6C34DEF824D835918505F36755C298A09F935A2F95328248B5E923E55AA4C91BBB0733E4940A34AF5226C21EEE9B0E0C3D15397A4D8C069B94C2C38F61FEA2077AEBC1F7C5E0875B9A7F2041BAEACE95807EE05A366016B6E0FA2E7E722BA34D3654DFECEE78DCAE199BB44E164E61729CC7A924CA6C7A6C061C6DA0936B4C70A02223EDA01D7B8C0D2E012F998C3B94D1387B6CC65DDA36360ED765F0A23EA562626E12145EB2FAC0F49BB0DD7D1ED3E9B2860DE1C54FEE8D60EF56D4382497C36181E864F92A95E76CC516E2E1396E2B0D880ED6CD14D2410C9BCA159F57DC9B763ED7CAB73F9EA5D42F4BEF91977C114900CB0F249B10DE8F4FBE220181D4FDB5D836AD2FB70F06869DD7F197F121FF748ADD6DF6C48ED9910F51BD7528DB60FC5A42CC0B72DCA6FA66B617F12FB2A9530247B1709DFA7729A6C9FF5B13D073FD7165033C45B5B7C7C66045D1735979132C49CA4442986760CF8F0FDEC0C0BD5E992641075C76168B8316057A993F513536FC917BFB783C28B2D4878D120889945FEBAB84BFE4840C61012043E96910A374CE33B45F461B5492E2F96F0EF91E42D7DC755F37117852C4FA99B106F5CB5C70BE5055ECEA5DF90B517B08252DAD6F20013FAD50F47A1682CEB37AA0DB64E4B699E126CEA7034969FC5468D19455A1F2BA4011AE5CFFC2544329E268326345C9970756F8712E7793301E9D3C92787FD10B7637F5511E27A16B8DDC21C116F13B0F27FA2E5B6DE60837F011937A986C00A4D9551D37E994DCA480493DCD5C4DE6F40D0E25349284131B9E0B3B6B9BEF6B9DB6DDBED89CA329D9F3B032E2C05BA9999CB02D7896258E3C4504643DBF49A155F96A69148A51F243CFCC3B2BEA7E8BD534308E752C675CF478A231CA99C2EE402EB5DD5BE2AF5F4FAAC783141BE8D2A3BA44156A3D1EE98763108B9EF4670B25569DFF3568FE0E183938FB150FB79F7F28D51C8CE40089C06D6A09F25845B50E64AD231B367C280883CB7FFCDD5E4C044BAFE6C0915A0C52BB14876088267EB84A01B9931C03DC799995B6969E65CCEC63697F1F0E146B75EB6987550C23DF2793FBA8F04D019C31AF4AA747F3BCF00D6FC86CAA707F1F27DCBE598B18ADD6BA048B2B174FFFCD20F93DD2F8E860885A15CBC2F06CB10537C205E143ADDAD33CE8CE5E6EB22C6A917172BF962080290AD6FB88A91C7B63B64047BBCB60309C01F15271CAAA73AD93DCF99400BEE17F6F771AFD156CF28B788586A18C21739AE5BFDF8F6B8FC94A9CF1EAB0399F9FB53FE70FE5E4278AB909B2A00F5A181F67CA7F7E046209A2394C5583CEF4C1A7D5578EE6929147D34AB5B29B97864F46686736A0966EE7298963AE27040F4598E0AEA235B562DE84BB1943891101155AFF6D185D9F66E5F9DD037B048914D7C1B55505455D08DB2E0C58716AA4C4E779EB7348D486F445CB8BF499DA3054F087ED95C2561770335DBA67F1EDEAC600071AB5918ABEAD7E55C5C6E609896ACE2426C47941C1FBDBC4804D8FF4C9290E8ED35C967D65837D6E2B153A3DD843712AA34BE1FD7CE0D829B04DDAF036D9D16063E28F627491C1C37018FBD1EA3D33899BEDE421C1910C2957C13B8CC4B8A06C8D3B2264E8E1B8FB5811622A9986B4B6F673994F6F5FA072ED8A8564C2AD450CF801C9992779F292994A98800AB12A9EF07F777F441F19FED6314404A9949218B2ED4E239EE677D8D1425D0547CBA99C1333FCB1620A8D11DA5CEFC51DEF5B3C4862E17A6BE3C194F88B7BBCED98325D638877757ACD448C0A970D63603B58E3F4B8A361D36EFCB6AAFF2858E14B1830F0FFFC4C5CB08BFC21FB091045B9A7F8DC0FAA02A62D1FDF7178B5DC90D2111A64CFAB0D83680196B21D75EB91A5B3E2568C7E8A6EDC65048C88EB34F6494CB697E44F895012AFCD7AA86DF341CB9C63A7EEE8E5F95E3D60213BC23C5A83CFFAD4225BC731F07B34FCA550DE26E0D6DA29F03A1D9C4233D9A0633D31AC5F55A11C1208C8B85306CAD41EDDE3FF5EC3A61194E724EE2D6A4C94FCDA217BD7C7FB328A9CEA8064D94FC66049B56AA1DB9F977216AB4242D0EFA59AD18540F1430A6F4EBEC5CA7EA81EE4BFC6E77F9EB6352B71275D450843304F073AA82D77EE5602B43DB62B9A733320A67B2727B21B705B86D5DC1459B5EB688D37236FD37A7163E78E8425C589DC600609DF3E9F36F9094D06C60731527B8ADF58A95E40C1390FF657D418D675F528B3B665FB5F3C56504DF40C1D3EAB6F3CB85F5C7954587F87744775382517B4C652B4259571A8AD219A6517E2D6D3212AC1684404DE7CF71478BEF7819DA24B09A11DDAD5717CC63995BF83DDA735C3A50F6B164F26D6A79E3B20A1488DE2AB44347694DB8EDD3D957B6B5510C4A266E514164D23F1594D84487757EE6F4353BD06CA7F90912AAF5188F217FCC11A62198E2DB04A016D36A583891D346C0D84241027DDE80090356ADEE1AAFE7CCDFF983FD7F8827BE286280BE118FD9FCAB26A10D19BCC63A9AD9D202036193CDA36321A5FA7252D0E65FC0D8E588D70C3B629D830CD1DE2798309A6B6113FC2A16B341BCA4271B5994ED767F2064FCA7DA335BD1D6B21F54CFA0DDCD47E2A38CA924DF85D2DA869F6DEA8FDDDBD20728A21034355728DDB4287FF0EB5A9DC113A71F7C69899EE76BE7D186B39C7C868E78C03E923FF199246908FEB48AE45261B3F7A8D6E4FD0C280545A9E3A578916364196E483F57EC37439B0FC9FC37C5CF56E21A5CAE0B70D25B928EEEE456F19821DBB974781C646E860EB3DDA8EF8577CB0E3B9E96245E14CF4E51A5D11F7AD9A77B932467808FF55E588455F810CD50367DB1621469AEE8BA6FCD52C75BB027521C530A918F9D646C69EF8DEA1F7B14354815F11E0187F01F677E2A0FBF78ECA2B1E51E898E26CE55693ABC8812F4CB4C10B9BBDF385C6AF0B340DF8DD2E957D877DC1AEC30D4A6195F40F09B4CF4010E810C764EBB57891652C156DD20584E427902DBE82AAA3CFA728059D31C36253649FDC00CCD29517AF2FFF4F5050B0FCBB73B2888C989761A7F0551375E4D3C54E0C9F8A4679E640A73476BCC6587195A82CF5E6F550B0A85D57A97E3E5D0B9A194EEC3E41C0F0E94A299789538824A90801AE02D93A78EA914B9A8F10FEA2D2A7D0812009C732665D48F6DD58CEE4CFC72513CBADCFE171F837E79B8776B392B2224C02766D0468E513D0BD1BFE6ADD6C04374604503A3EC8539CC707110D18FCDC8E000EC1A3DD03F7008D37C1FA02E419FD4FC7A6C81157E07E353F3C4882C2AEF4A0CCE1F7A5CB5EC753528152C521A2ACF7548F19862EC31D8783BEF406EB7F756E41CAC3FBAEB9A901F9268E78E06ED5D6CB19BF4606C9DB660C03A9D5B06BC235DD7936ADD74268577256F72C7F36CFD7D4D09D3726F1908BB3277AFA69C7166EA2F4CC9387B13AAA8131D9F21A5D97C13C7DABEBCE61D72556466093EE0F87E9EAA9CB42245E1BF55157013C4350F38596CD26D2819F98698CE98F5D4023BDB3C974B0E61FC6E6604CB1707BB22FF5689F3DB3AD4831BFFD3F93C702E0DDBEBCAF626FC2655447134570B7150E030A3524A6979579296CEE062D18CFAFFC4474490DA81268B27B60E9E9BAC2A9B7D2E2377A2006AA5C439C263E8F9EE360B42E217646F7C44EBBA6D9E3B98AD20B1BF7CB8CDFC62CA7AB139BC2DD1C85A837F51AC9BF08B3F36CEF176A03F358E2E37EB5DECD0DD2D544E58D203910613EB14744E914F92C5E9274FAB025CB6D8AF16EE03FC86AE3947F7A30FD8C1EA23EC7EDAED4054174E4E6DE048C563B1832F8839927ED3EA54B19BA41CC144C8D8A6D8FB66032BA6F4E16DC81C98D37129B3458C2F2A6517694FD8816E8C71E00D77189768C423702612D9863FC2DC1C4593809C74D0AA881DD7477BC584376DC6C177347EE17F3E17B524D0DFB315196035FE6AEE83675494E23BF2433310D4C72E84DC82BDCA9B791D5BFD620212172AB2562B5C36DCA28C5CB8078CF41F2BDFAEE651B04243326DCE0C51ED88699CFAE4DA3B478DBDB92DCFC8D2EDC4472691173B6C5B9E5E116C30DFFDCE7B0381E8E1013CB392056E3BC7442B2A2EBB631ACB65DE639B3CFD8EF3918531480A35314F3F23F9AA6CA41A9B8F6D08F6C589DD2584B6B8285230808EDBCBB99C0E918D4E73AE7B397328502F2D47078CA2FC0BBACBFC9D9E491EFA2A2DBD69D82E0D829F74D5ADEF4100E6195CF3D7AAD2041078AACAB8A8EA62FA42C6AAB6203D92794F77D4E30B84BD16518A9A0BD0AE4B372A537BEDE43B31A6FC1A58F9B43AABD485C55E630FFF8A4359DCD52552B8A090DFD5CEFD972551714E5F0A2A16442345B33DD9D232AC8431EBFBCC5D5165D12961D1E954D01C0379B5489AC0DC0357667325AA864D44269799DB710BC6A25D90AE8E0C9368BE911C91D68A49815850B4B29708BAD74B4BF3590E6488655622DAF3A7B52356C804487133223337679B33E583B622EF873962E8FE259DA8F5DF61748B6799A14ECC763A1B54542D67E57BB73E411AC023907E54BA0EA8B7F20E55739BEBD7F83E408238B73249CE69FD2DD593565141FDAF12BFAD3A43670935354ADA4067DF0AE4150AF306AAD3071EC4DC0AEDE6F568DCDDBABEC98E4D17AA99F8E881600D35B25CDBDBE5DE184180A9C35EE8B42F6890E068700F06E4829A742FFEBBB214D17BA925B5C0B41244DB5BC7AF49D9A24B2C135131E553CEDB2CF4E6E2EAB840AB37788323024123853A19CC04F6E344A175A4BF1A16776B7F84A17501DE4A594BC515E788FD0AA08ED4BA3602838A6D1D485B1CB80BD24D97905A9A7E2DE71A9A4CA32689C46AA9EE52A9EA985C85C9289ED1577B577C444FC73FD1BC3DE03F9FEFC10E6A17553A7E3FEA6D57AB71E2379C9C5F8904EC43E57D5FB119CDCA8C2390D6C3F0B9D01B9794A4207DE3F62F00A4D1188C727B2910153D9BC6337AA46D2D79D09DB7656C0B28654F1FBAC5C3DAA8A75B16BEB5FAD8A256E38EFD232E007A741028319EBA4A6DBD0AE1C1F8989246476AD4090F9F4F560D0CD72815FF6AAC29C8674B1D366120EB3213300E99DF390B3169A1CE03D2A5E471B9B8DCAA957259311B97817088B486CB680047359440DD39386DC2BC24AD2AC30436A08C335199F08861F93177640074A241D9C5884EED07EF0C0FCE8CCE08BA30221150C9EDC6562344CD3E14D3735B41DE2CBFAF4DE0F6D417299FEB38146625F3C70D8872103FDC6970D9D37D1CAE92375F81B26566A78A02139CFD83415BFAA5D328674797DE51E4AD9B3B9E1F9BD18A0FCA255CA8AE7E9E192ECAE5C60E9F5D578E59F7F7074A12FA75F9388CAC0A148CE9223681A93D62A679254AC2F41CDD871BD73BBC6C4E0CC9DA67633B61BFEE815F4E15ABDF639899DE105A5F4D74CCDA3EED32219BB447EA5C6411CEDB351DD76CF11456EA762C2F300671A12DD6ED8EE9AEFB4D0BD86D0CF35AEABC9B9E7822478A6DFEBB887DA0E2D3ED4C010E5031C4332FED83480C21ECF904B65925C4CF64595F20D072C7C6AF12DD3C76C682833CC6296DBDC73DC8C979004DE4ECD749BA45D9748DA728AF757FF5422B862223146AF86AD4AC4D4F407DC2025B8166E2CD64C8E1543E046ED91AB1AA5524E88AB6851752AE5A2F02F933DB3CB7EF48775017E000386805EFEB8CDCEEBABE613A87E0C554F99DF0C8FDE49FE73DFFD48379299FFCF738EE21B9AA1AE4DCE7BAB98A356241545B6F7D186AB544F77CB61B6492BE1F02C4B77DCD5083DE4319D1A1B792961D11D552F8AFA649EB5D2AD64227524722B0CC97260A8B3B6493B00D258A570CB238D3C2511C0582DCB478F878528B8A88A5B33F9FA6C41302DD1BFAC664C692001F7F7D207A8850D6FAF22ED887589405739EA5B5B9812BAE617889A225FB2E6F9EAF77D3B3758F9ECB89637D1FB20C428AE3420C3679B834EFB0F89A389FFD72D7420F2435D118045FF7B7361FFDA0BBB6934F81AD8513A626CC25D9A5E2A5FD1C51229E2D5FF803B8983B672E92A1FD72C16520531C694F44C9C99BC3385A610239F6963E0BB66ECDF4CA29E1C175E414A5D3F9E9F495F2D03A073965643186C46EE9BDB41876A41ECDA224719F5C76AFA6E955061805F023498AAE965184ADD6F6BA1DFE0BBEFC3D1EDCD40D8F55BB518C9B45CEDC95682B24F2818795CBE5D8E504F0885863C750524D9D238E4110AEAEE095E1C545C2989BD7E0BC0BE8AB750A7D319AE69CB080DA562F7DAA7068F38B14AD7282E041835B58E2A48A340F993D10FF4F805280C183A3FB45555B8D54EC145CB7B9BEE71D7BA652FC533ACE1BC8D621F7257422B363A5AD2798FB0E6E536854F2BD25914AA0B6DBEF1E2EF71FC7890E20FBCBDAF751CCB0DD16098D96FF22961B6141257AEAECACA339750950F6895107355F04F9BB3EEAAB3A9024E4CB79B19ED7947EDE79958B669077E6BE182020536F7F234AB2332C2F2790DD96F5816AE3FB5F2CCD72C6D177845DD0CACB44128F6EE6B1C2F673A8A50842E13C8FF0087CF71B8BA0715637A40021998652FEAEAF5719ADB71EEAAFC8093E525602599278B35600C743AEB41EA78CB0427D0894158DD4ED564C4742033324C58B01C15822B97C9634FC8F320C0B103F0A904D98C9AC529FA799B30F8B2C0888E47A3BACDAAE5A3DE6DF39A693A9AB3D95E7C973C7125C0F7D8C59B37EC924D7B9737724DD92818360F2C2EB63BA5756AF5865AE33947E311A5EED4A0CD056442E19888A2B8302ED8017085DD5D137A3769058F0AE0476AB202CAD822D6A781291C537120F316E90D2C3CAD13381EDBAD35505A5B7DDC41E46771F460E501B9BE17DF8D4DFFF631C365AAEBDCB7D5CFF7010BE2EBEAA0B99820E0BF3D290CF27DDACF397A5E4922EEB7D8BDFDEC96B87F8202BD409F31A200515EB6A05E25A5FA504093F1D82A83A777F5389B5C90E66C369BB654598CBF3F258E9E14DAE819837A86EA775A05EC829B4889B816154A2B7882EC7FF71BA7CDAFF873B5CA4F35011DCDED8C0CAAD101F7BDCE1CBE67E081D98EFAB71490AD12AB7BD9B4CB9331B6B04D6DA2C12311F96E01AEBBB350BBC7311E8AFC9A6F42CD541ED40E2D7BAB44BF7F1E4465CA942A0E8767A38D89D0231BB897A995627EFF71B3E4483ADDCAED084B402A3CB23D5F91872BAA49AB361281454AADA57AC838AE2B34B799A1B46595AAA02A9738019EC3644C63BFDC72F72CFC35D48D83B831E6EF397474C43CF665D64DC0376A437CC768862A92C941B9BCB8FABC6804C03BEF7BD2C5EEE4609870803A5E9BB2FBC42028C5619C3706F773426CEC39D096FAD267BF5E6C7C7510B0D1948FAC573C5716EB4D6AC6EEC492B347497B47C0D18C77E7C264E9A04A4C3DEB83B1101E40A0A8653D9495D4A7C13A5BFF3C6956E668DFA999926231811F3AE84195B65213FFB824478911230719E8EAF206DD99C7CD7D3D7661E9F39250793C1391033EA99A0E31D8CF83997ACA08C43B47240BF1E5E9D1D741CD9E6D3F5DC2043C9D3D68A2A689615D39014B75FB53B4866488C4B37B68B5DC5F9B9D6AB9AF190789CD610E939960ACF607A488964C33DF0091FA4EE86654142083F68436D9700B3B50949C0D97098D969BA25622C2EC15FBE7D7C7B78C1C49F671672971E38996C2D77A024919FC1A87BB9BFEFC951EB75326CE48D3837068F31B9592DDD8505AFF1E0E31911D1F4E311CB1B81DD8A03D68A5EC075D8ED7D69A1D595E7AAA70928DE93B979438315A4B98EABDC8B5E932257AAF79A9CCC74E6FF88C02C33217FCB3FA8DD72AFA1E549B9E5CF6099E2DABA07C91BD3BA6A9A4936556FFDAD89D5F080DD7F818EBC8ADAFB3D51D8BA7B48209AAFEAC184E1A869FC88BDF92E77C6D4B8B983F4B93A52C473F1BF27B4D7514DBA522ACA79463A0B9C2E0D9A2D47DB238AB9E2A1636B9AA825272F2B9C8D36D64614A4CCE2EF31B67682F328B46D31FAA31DF874FA15799B5D53E143C9E9127AF358BA1B43A9418FFDE00CB16D32AA137FC7A5A1CFC2070FDA112DE600F3C05BA0F50F8AE1703AA2CB64135C29FA621385C803673A4D77195B4B74E554B043FC07B106533D0B41F7D882FF3702692709A64052C4AAE51CDF8B733A92D86D507B6FF4CFF5F3BAE4D0D9F3F90AFFD774591E6E14539CAF99C833D2A1D9A12F7E9CB1CF74FCB353D11E22B8216FB91564DDA8F1D2C9865080422DF0E0D8AA47577F31A7682B54E36BC8344D5F5F725C819D3DD3A948F4E6F6C893491127267145DF1B286C18C4F3EFEF0BB61541883E413EC3EC3BBF99D83E3919501A3CD59341BDED35BC39B655D61686555CBAD7A1B033C2E326887249E6E30AB12E43793DD1B72EBE858B40ADF4400A59363BC56063115492E114688F47447132D606F2B99DB9CA4083A91E35AED045C513EAFB7A3F0040848C1DDEC0FB3C2CFF717BC4CA36C425EC3CA9BC51B3B3C1885FD8B4182AA22AD38CCF8FE3990DA75CDF5712B358BE866A6435329677CED89571C3877F9ACD0D3E668848F0A4621BCBCE418BF2A77BD47D671191216B230C276A0D081C4F79AEF839857586F9DBA52B4E35AEF22D86FBA66DAFE801C686F03342849B5C3A492280950C7F3B725DB4BD6984A6389CEC1AB86F29D653781EED847D7E69C99320F8584700E662070E9C43957F4DDAB28DD2427415FEC6F1503551D972DCF11BC4EC3B3FE745DA7F717F35832B8CE373A00AE6572D8DFBD7720E00517C50E2B634B6BC3942F9A8C035AC80161CDB45AFDD7E9C473F8EEB4F1FEE7A677E820874F03B546464939F3EFDDA157C9F478988F3ABF39BEC02B722C559CEAF997A13AF66BCC0BBB4DA7B68EB6C6E8498129A95D021B7C3A072683593C2990627FEDC52F66F3A16A8064018E6618BE5D7C63BC622DDD4A15A33EE19E4161A50EA38CF6626D5A088FBC5721F567145CCE30C66DE60CAD79D31B703B129D27627BB5AAFBD9BC7D43944B9B0D255D8F338C7CB7EC56D121C3F4E61FC0D46CB0E036262FC182E8F266741842DE923D276CED79D4A25FF7AB3D2571B1B589E01583371BC8D8196A1C991BEB90F7FE71B99EF9E100375D3E767637B2BB1FC907846C53550DC4E6C7B8AD7FFB9DBB65ACB30C9644FE9D59A74B0E81A5BA068CBAEC9D6B362BA05202260B1E86EBB67BAE2D74F60B7E1C0B510BCE4EDD8D71E342D5465A8032E87617790ADE2770D0DEB1ED26D62A863D030C781D2FB02490718A5B55D1BF6B3BD1E3B3C163361B2F13E616FFC87C1BDAA7D7C88A331511ACE5A45CB94DBA557EC47A670BFFE839069A546FEB7183C27697A56B65AD762735782FA009350ED52819C23AEAD72A7150DE845B899669EA37B4A12D63BA7D6DFDCA495A0957BDCCEE6BE11B8B296358E92E60A2317CF4B7542CDDFBADFD18C88F5AA4984614A113E992DEAA18FA172C998EE6FC8E936E69953EDDAA3FD233182C7B986DF90386B3661C649EB0F9A7E65B90572132408929968CDC39D18020C6D81A3665639CD2A3612FB2135A6E057F0F68B10D3CC1C35DDA2600AD1C0A6FCC0C5DD0D82F6218F2C1F8F5B714C47636CF68D5361D97DD1367681116F2A2A045894A85F5FAF1BAA27F93A3B8809404181040C24156433B3B87467B27D7C3ECE44EB763D14356D6EBC7542E21863700505B8A10D4B4B6E9D2A4C2EEC9653BBC0D9FC68DCB53AE7C8B6CF3120C921B824765E7641A3E9CDDA804CF341012964EACBF55D6430673B83C12CDC53100DD8BD6B18A56B5AB68D83EA484F48D4641B94AA2816BF06EC1D1285C11AD060735509367FDD0E300413911442846DB240612C1389CD4554DC8D7D7C7E4D4B79145D4684F1FB75759E2D506F9DFE7632CC553B945D91FE0F9A829AD6A9A18817B09B986B18FECD615414A0FD6B6070B15F2484AE8B3EC3DA36D7F8007A7BE336B749104C2695327A49D34741D76752DC943897B29C9651EA3C034BC4B8E1F380A9FB0F9D2C23B627D9DD8317894AA754B8998573F025A024F43E03EE86A1EF583CE02DC7EC2BF2A8EF9A3C7743DE2E6DE38D72B5E33BC5CDFCD12184C9664EE7A3F4FBE9498F59107BF8B6DF69DBD6732AA8013FF8B4525EA9E40FF6F96FDEA2AEC03311D6E8908D426293E369D52F818233FAE1C2BA2657B38FB82E7864CE1177D5E21EBC8AB773EE928EBC4A7EE9F4A9CD2D9F15146C08E4BE0A77CE272A98AEA05A6DC18D5B856EF1B402F9851BC84DC95FCE71320D2A5540D40BEF67EE2709147EAF3C3D5BABB0B21090BA4C94CF7242982BE35925F691847A7C296B973EF2172F83AC9ED5E0A0C91AA697305F79A3FC6A8EA4E7D1DA88A81D4DDBC1F604BB0896DD4C837F11BF155D4605D46411A63FECDCD64D7AAE873E1DE22DD62CC2F8982EAAA66BCAA8DE8DA687910A03200FE437BB87CD5E6D17C6F5B8CCFDA073F29183A1E12917C5D78CC1CCEC5C2B04040D39E1E74867B21192EFF2629AEEE22427EB5D2399515D892EEAD80934668BCA906109F6ED85AF29E702FE6C112992CBF851232A4C140BE6CA9C8DB383D1729B41BE939704297BCB41E4B8C7DA5B24B93FE7E7D2214287145A764D3263C9EE136457A2A270EBD03408ECB657B78CB8C0A5C1767521D75A8E12D9FCCB3CE8F6321B55C50A6102381E95C12644549A0E5AF29183316016B89F6797BD89BA8F1E932F4C91C0460F35EAE32F46D42D66F639A87C25AC6E9B9C4E475B7A4A94F10EE0C1043159CA71BA3FB4F794E766C5A7C6F7B85088CE1A2584D4A765D7888F1496ABE23ACA42FC001E2D30B3959AD7BD941916E27DA648833EC82004AA0937723CAEC0A8E7FE3C6742DF8E1CA797F13FCC4A07BA75874FDB6A66014C0EC688C5F5E0D1ACE231B32A1A14A2503155D412BDA98FBEB450D35797BDF96264D141EEAC77550408F6A63993DF3F89D1EDC90DD0885227C273546C2D86D3513AC3241AAF96C137B69970E273B73EEFBF8668B9946CBD118CD1977445F87557DA03668D4F3A6B5DE6D0088982F6C5DCF082207A99B376B155FDCBA8A5E47F2CA4A50D48DDFBE05F8C1D28A080147FE9FE04FD49C370DD9E4861D8E553A22B7DF7324C51C20F10BCFC18EB59BE931C69232419F5E037333B52FCE4A138617B08767506B793A430CB3EA0A4D9A2CCCF813625FBD2F471C39DEB2DFD0792F3374A980FA4B208185332FC68798DEA1728054F28771E0AC3FC065645B3E996EA729DC6A29CC23F872BABE6A84911B1B6C256C38C0A62331EB66E2F8B9A77ED79E323B4A96728F0ECAC851C3E9C15F2863CE6839D3752F4F206C72EF0BD60F087315E6AD3C7C836FA3C5CA6BF2B72D877E33C17EBEE283EFD62F395637E784A84A3E4EA174BB501D2CC216306673B06433A05ED052860666A3C3D7E7D7C991911A56100A31048BB81FF71110697C941CD0ADB08705A5A73CE66AA87008B08B51DABBBC3FCE66B11135844BCD8CCDF4D010D7B135AC764B678CF307154B5A96D1541B75FBA65D7A0D5C2BA2D1DA48BF0EFB9BEFB5141AA6D30A59695EF7FFAE250AB52DF0969FCC349E1C7B8D90099EF0410A861FB05E37D7156991FC65542B3495CCE223CCBD383DD4432113B817B0AC4000F9EEC55EB377CF48B0F51B8D02359449CBAAFD6AB69E3616D6A3806BF67069F2572D1AA0E7DE28042DCA01533E1C381449E22A68D901424498DEA67F0EE80FAB6FEEC56BE01950969550F01D62ADD52396E927962F209B262674D2F079D0E48D1C994864BA90CC4CCF3CEA06A5995072904CCD97313E82D3CF76F24E3B3946D11FFF45319DDFEE619D2B5D777795567A44767F12B41D84A4BF738A2C6AFC0DA08356DFAC343EF090176425CDDEBD1264871CB7AD526D9B4E469E866817A1ABC9973C598B1724C8C3185DA3C999636074C27320694F0BA758B0842D2D3EC93DA9A9CD3F65B321E378D95F003C744EBD7BCCD4712B6FBFD084D9EEF0C84C70651E3AD999D64BCFB5E8F7D9582C290CE59176072A5157B1CEBB5684D47271ED482B9FEB7FDDE78B424988E88627FB1299AB8B96CAA72239BE6930BBA4396118041D6F3CE51CEAD81DA54CFDC8BBEB0F6C8E9FAEF93E2C404D543A0F0026C291CE992CD71BCB0C6E9C459143D995C92A4A1C9A6AFD36E1CA87E1F8EEBD30EC9D209BB3F64100180245F1FF6639D3C45134190F729CD06608426830011170C357160EAF351BB00AAA61F254B939D89335881D5D15F3DAFAE92ADAB2B59DB7D3EBFF526D9A6F44E1D8DD779753433A9A32A541A798805AD307787C1832385D8B11DE57BC3ABA2A81B70AA2221C8C9247EFB3A40943D8A0677F1D4E6F9149D97D6D83173FD3D3114293D628AB97AA4CC0121E2A88BD5B5C290AE7E5EE4BCBCC1CE73017E3C58FBE575701C919ADE5E94208789CC2BCC330719F022C1F79880B1BAC4E377D486ED467BC58B13F2FF97454BF1B4F4DEFEB3B5998FFFF604EA0BCAFE859CABA133AF969827887AC252B9D21D8AEC49A0D77FC83B4D9A2930732E9A22B7B823E302E469B52537DB5341AA0979642F4505151AED71B690430AFBDB09A8454183A23F86F598719B86D1E3FCCB72DD6599C9895CF6AC28FC5B1D4A821A6F9DD9BB7AA63DCDA1678AD816D96B919E47D0D0E95756BFDDC71AE430C4F71E521701452709B6E670306A20C2F60F84D6009DF6D749C5E02D3DD5495DBCCBE9326D7D302E2A56032F4CA5C82A107E06A867D09A2E5DE7DB9C250E25B5279A4867657AACAE0E3D601DD3BE26C936BF527CA9EEBF3B247F75487A01694C7595619FE6E90AD78BEA799B0BB0C126ACF3DE54F805725CA01879BA5B8412D4FD3D3CBBB37AFA955CF90248CC521B0FBD0214A8D4C9E4A41705714C8DF5EBFBBF2FBDAB93707B0D779357E3DBBB20D5CCAE707BA7BC5D21D4C23D72AA231E83880867FFF3A6B587EDBF5485C516239028271B5462F78E3B226B057F01DE2D348C7D08108B990DE8484E839EDAA174B3CA0DD6D1338513B3D1E4ACABF9C14A9E03CB373D039645B6447D7853257F74665CE10EAF27DC1640C0AF88FF4C207994AA23EFA97D1CE707AB08E4A615C580E3AB971D64371715CF0BCB8421D8178D708E4D3DB24B2AD3143E2176B4BE37DBD8812116E134DC9B72E35E8811F7F404485ADD7321D3DFDCED23BC8209A9DAAA198307EF1BC0E204CA42D7274EBFA74C88251398D6E479D53C5C6E7528BEA5BEDC8677F6F5A81A07BF7CE58E4AC38387824300D14FFF131A54390711F95E03CA59DFECE3EA4696643A16874F98B76F6D280F7328AFADC455C51712BA748D33741998838D33F65F0166BD4D9788B129CF7F9F0802758631E5A718A5058C63B0D38D9E6877778FB8CD8BB7AF099ED442C52DDE7D3C0746BBCB8595C35C815E80C71E98425FDC629C7F8084BA2556CEC31E707408BA6FD7A2F0AB83286A93E565FDAA34B7344474EF48FE5C99017887C8086AE4C8916914142151550B0222C5FF617817EF86920F1FC00B9D9E5BD95C6047731373DB142398EB7E5F1B29EFDBE41ED1E9BE725C2748EAA2F7A1471AAB6C15BC4596B6C6CEA5CB3C9F1E57179F96B3C3017C2244B179C384ACB93557170F4E0CD387D1D3428A7030B4276F8D3FD38074E9348033E3BB3B4A05B3366064C68E0B25F36C2E45FB0AD4606CF5A6B8FEAD45CD9790BF5BA1B0AEB5C67196C05D637E878F6D3108B36ED2CBC007F6BDBC7D74362085D651ECFDAE47FFB069ACCC7C55B726C0C6ADCE2760DD3509649DC58189CD7195B11245D76F64DF2D61B07E0C172313F39961BBC410E4000C7F7BCC52593AB7915D5B5B3E746CE8F15AFD2AFEA8200687BD1E0D767ED297347A1B0634A4F006033322F787FD901E7F2492E1B491D4F5B901FF12CA88B2B2B2982D7EEC9DEC4538F8E946172AC82CD468812EB9E7062AED4075AF0A587A92E9BD971637B3222CDE1A8965DE1EF2CD4A36F2B7457D27CD328016FD2D92B0560EB01608B4B6324D02441F4094E82D3DC8ED644FD9D7FE96DC544276D7E02568453EBE375974990442B96B85A9DCF163A5974EE96274A6AAA9EEB0C83AF9A2E27C4A4174EE1D4A4035782AEF83774E93F67A5A7B91E7C8E05611BA6747FA9F83A788DA50C9D4EFA17BCABB0361E055CE6D07DADE204EF601AF3D1C7A54AE1011C2AD46C27FC060A27073781A221D182D4AF531D3056401D61024A29FBB0030B8340E91AE3A32468CA48183567199F34A76209F7846ACEE0B5DE327B3A381087204DBB6FF40E1463CC7BD38311DDB99FBD05BDAF3B84D9E64958F67421CFA09903400DC87E212FA320DB95DF83AD6A6E247E92151AEA0638D3755A6B409E5853E1A7FEB54FEC711D75AB9CAB21DDB34D7115174E01E9F0A3E650F852666D06A2A8E133C872FE9034BF9A61E29CC319255B09E40096B6D15809FCE4C8993A056E4133BA1FC05933B643B5D476D3987E7BD372412852D439D38600BE4A7F22BE1777CD86F70F05DF3B260B41DED95653243419C5BD9B6288697460A0FF7C0E2928D707BBA41E46D1AE11BF3751852DA1516941BF67E5C1775383A7F88CBA065BABD2235C155FC69D3C11F5658B019B089A9B3A983A2D2533BFF7694FC271597C42EF35F8AEF804E18AA37E3F42E49D23FB9171A312A562BBC9B093D92D45EB6A1A8A665257D596174E1FC44E117397AA7C4C77FC1BB176C8284DBF4558B5259FA69836B68322705CF783121E3C4513EC11B76329F1310731CEBD2CC8B7F49AE8D87BCAC07B1CEBABE872B5F83D71FD10F300F9FA30F4054C476F86EE75AC68F1F80E352D3F9753233E53F67C3917C26F4B0E8A61AC0299FEBEF95D9A46BBEC9F5C16B5EF127EA18BFA609B99B0B362036F4AE14D11BD7EC8ED2B02C8BCAEE2CFE409899E06DA304E23305DB1AC0A7746A72746C24E6D073F1FFFD3BFAEF300299C8009043FA392DE2054F237A098EA5FF0E537105F25B7D85355A44FAE707B0A3D1D6B30356CF1BD6EA3BE57B3A6147B943D1C96C4E2C871DB1AB64D9359F1F3D15F9DE5F45FE8E03269EBB9759AC78F47DA7B913F09402EE65271859D623908D464B1B5E59E4580BE30E01C553DCC79B190A809C71D8204A735350C75C3361EF3C89C07B84270502BAB82FF089793838B13B3041A17AB396C09C4BEF716329318B95C7C4779889956961F8D2200C163C86F45C1FBA0567C8615F4E815AE8CE2E05589C006B4560D66A67495C2B99E3A951500FECF953D9FA7FB5843F102FE0F82E72867A65C09318A52D4634A3FA28B032B92160CB2E7D6ED156586D071B8CB147D139212BC47774CE580E80791C14FE49DE7688B3A99E966A9F869B0A7421062F18705AD23AC238B52E6D80F43DCF2B43F66965F6075469E0E789B40687D104DDB5CE5A12C0B741EDBF1A3E57BDACC92265D592FDD63703E534B78DBE9F13CA04B9920EB740FB220E01DC176C09CA51EB905E32398E739C6A39C02043042C5FFBDC9BF959D56842DB894FC108AFCA51039A9B28D19D67127856E29FBA3812F764D31AD4E2FBA5F00A828F85087B4A5ACF24CFA79A3B60C954DCE40BA6BFAAE4466C88A60293AB46FA2FEEFA2E3B0DAF0CD72B0CF914848AE6A9BC26F6578D08E896479879D3469E0CF39E3EA6508A412853C83BD33D0B993678FA08DF14AB40F41CEF0E7A4B992DAE6F884E193B10E5136DE079BF85936D3B5A586323B08FAF8A39B24ADDC2D7E1EAE1F2F90A39F26B130F060ADED352AF085F9169C4E21093FB2256C4E17416F57D29CD37CDE3BBEC8CBAB280DB69643C86696C3A6D3517150ED28B364884EDCF3082EBC5FCD11FA0B0823DBD808FA19BFCDFB42BB1BE2B73D5D1434C95DD48DF1ACDFD7DD17C741A387F18E7D78B2A9A894266167897AF1C8FED13D463B6BACDD81BCC2F3BFB17D2DFC0D43DD04FEFE39C801C8917D52BFE8D2E6F8C0C5159E0185805BF9DF91194AC97F6448B9189028D50B274848B429AD4DE45194ABC458485617B59FC5B1F1606DB20283A73F41A6B36731F6F9E978B276B33B5DEA3BF87282D21F63787BEB1F6FCD3B21004E6FA79330A3345F2C01C8CD1FE661FF9AB5B484B3260F2332FDB00216DA42D2840D3180B6521B01281E6D0F09664675531EED14A5C1794F3ED1FE634EF3D6E9D1B6F4871A45A83DB56FE2BBC52FCBC1E05FDCA884F98DEB436A9A238E086FB339E1A7AFE8E04A5110737F021C89EC5DCA1168E5CCAF92A04C950154F6209CDD01B287FC360B93E2A5661E7809FF1BDF3F71B40BA756411894B340CBAFF9E0EDC8292E7C316ADF4F3B827F1B82A406B53AAD8D2D660FD0CD2D6A6C693A73511FBBB97612A8CD3F0E177EE38D46100E64C4C540C834DD87E062DA2C6C3BE8A0BBC46D2070FB8D9E1DC396423D2BD1DD22F1F4FEE0E24F48CAD9241990B5F48A50B3B178A9C1CA71F71321226E98D1F79DD7F3CB75E0B0C16915E34A92750BE9EA173C276421CD0E54319ADB0C4E5ACB4BD599842E5028F613067083522F0D2A891BFDB190855B9BF36A7F2EC81EA89AE11A37B6B89126DA7C51A4BD0C902D0DDA55A4286E36835D2EE95EB46AE7D6B919C05D42E543D96D22CD241A8E6985A18F29184586E6A7C10D4A955D0A1983EEBEDC5A9FDE306FC366F77A25CFC10E5B8732D8F40D068224177288E9A13408F06AEC841C2E8612E6C794DE216A2B758C676022D4C0B99A4A54166CA1153F43FF66AC03F183DC30E9C83E6EC3BA33F63F262F39838E5C044625B4CB1DBEB7ED957B8F7CCCA6C63B837ED93B2C260F276175F2F95B235D4D1DC0C9014192D72CFE014094F29A0AB8F0A9BE896067D74BE5489F7ABFBD7EF442579875CB1795669991438C0B6FF13E06D5BA805DD2D0DD06731ECA45FC8CB9D7CE568921A60E68E31F31392EB82A39982BDFE8D953DE2CE0AEFFBF0243E43ED202FD6FF9E075A90684FED84A4334A8E709979FD5B60BCD60D41907D1FC5D927F9CCAFF2DE85AE1350C8EF8D68EAE38EBD0DA0D252F0B5C82E1C3EF78CADF92CC78BD990B06461BD77B78635C406B4109FE58850D2A97A6C23CAA18B9AEA535D344E41E783B767A439DE0762A23D18244E76D3219A10100264EEFCA45F19022EFEE72B856FC34E59ADF6DFC78D31C8690CECFA45321AEE33DFD40943B158BCBEA764C3579FD5A06BE297D363994E6B959338A3B48F14A3C58CDAF1D91EA1711FB39CF78F04E72B293B80847516DA41D5024CEBFCBB399393E59FC4C89BA310377AF576105CDEB4F6DA314E990B1513BE9DF738AD35B1460DA23326D2FBD86722DEA5D37CE5E34C11408C01E1881BCDA250C7FCAEBA9DF85AA08FC9503546A55F2B4D6A7D0FAB2F50CA8667C7456DF6972273B62A0DAF38BBC7D38B5B62F2F1EA8476F300D0116598725C0903B0323779E02977F33AA8C45C2933B412490EC17FFC2AB2B4130CE8FED8D34419FD15971EEA5759EEAF9F3E8FB4FBB26615B4286AB4C2AC57A6E4BC80DDB396043251DBAE26ADB03767DC9EE4ED3E0FC7D74C58175BC1F393F0CE5D16589879C6D53645B861B079B298E056E4539B2E2E70920D3A273398B4E9247771B8A23B276DA9A06945DCF343E7A4C9E7B06960A1F624A75B1B48AF0CB9F5B3A549646C4555D2FBDAF2A79F9921C54C6FEA316D7713D64FD790325A87A30DEDBDF0ADE3B7BEA52A0E319A57084A79DD706228989642E78BF51B7F1246BEF6F1B8724C57B0A3633FCF4440E9D57DAEEB343283D642710266386DED8FFCFD68B32949FAC691E66FE9B8D736EBCA6F4551B39E79557154E9AF590B6F5CA1C6A0ACA82FF4B839B6F9C555CC57255F96B2C963536E48EC9B5BCBD270110EAF7C64AD9DAB53BC791CB111189117A34A74B4F23A8573A59886BF974528D17B31CA9B6A6B7EF7F923B8915B640C599D2453941CD16633383F36F9849C0165D94698D793A58A7869AAC8B4C007CB9E43D8DD100E9504B1942CEABBA733A242599D5B8C60AA42F4C8BE7F040877DA2648D083A2272A46A90D215D96DB2FF1ACA6CE24A2936C18B7A283615E8E6B729602D018174276E2ADCBC869C43879B6BD0CF22CC0601F7491862971F65D3E0BB2474549FA18964B14D9EF81429F08383F77E8880E858B3F350076B709046284A4BF500A6C7D9D694F03ADC9753852285075197FE5F30F5FEA91C7740AF38CBF5B984ED852C99FD27113F690CA7BD5CA46DCA330A7E30E7AA3AEE8CB62251DDDD62DDCC29C94D79759357FD92855279A8516ED0B07D8F2CF6509DEB6C180AFFE120B1C06A4DFB1CB76B9DF3113B08BE85A50BF76480D2FE05E75A4F77909E0D146EDF0D751A1099EB2BD019525048BA145C7E0B3FEBE21A13A41A9BACED48E1A4ED32A57FA061243EE840ECA69191B1BCDC0358A86DDC98920C45F1FD193D529C85B33E0135DCF2B81C7FEED32E07A2431755F3EF3EA685577A6884041C6600CCAEE0E4182CF54EEC1B078D74A18D8C81E0678A7D1309E494938083786C67436FE55FA955D3281F7F6C145B7C769D9019AE1B8666834B51AE95BEE2A8D606825C7609FD3F24057425B27D01573FF353771BD47902A9BBC41B2016086A3F9E366F96DA8AE3C62123DF05113980D8FDEAC5B2C828D44C69F2D1420BF8E7913E59FCB88845A7FA6A84AA296875CA6D2FA21A4FDF8E75B5CDF0E1C0D84FEE983A469FEC80F02923695640FA0858E9B91812DD4D91AF0DFD97655C7FDC60EFEB19DB5AD7D7D0A5F93FC88A2AC1205D1BB60DB2F3BCE203C802752350B5E8240B6FEF4A38D8F35AE5868498DCCF1BA047DC56D67F15E3C3807BD5638A9494DDC268378DDED39A910A6C7A59E6738DC68D1A531C7EFA68BE06AD20BAC86BC36083E45AB0A314ADAAB741C6E24A530B3E3FE318E4A1B3827057F944918664A96277528D185E821093D392012803ADB63A4DDB14983E844392542F2C5A978F1911A2720E201FBB862AE98C3CCDA720A244B5B58AE601C1ED814B0753FCE5F51E7ED797AAA98FCC833EA272D86A238524C07349F5DD0BA4A2F6281B2EC2D29EB546EF52F07B832053AA433A7E8BF81C6C9F562B603421787BCFF621A69ECA5CF07CE8512BEF945DC744AF403B9DF0FDD48AFFF264D4AAEDBD8702863B5A345A733328466B22FFEB20906543639F0F6F85F3F7DBBD28034019F4D517676C5D8C8CABD4118768B10158D83BFF569D3B71F30AB57B8337C50674E2290C950E9D48D6527E885A0F7CF580717CF467759CA0D41CD03A91B75648DFCEC5C5BDCEFC2EB2007AEF2F01651A328DE030546933C1BF88F34AF14D0C1F0F37FC8FF4E015DA5D25D4A1D52EEC44DA8E832F01BB1D9FF6D067021D4703E8F2D511E73ADCE564EB53A048864D191F21C759F0B629E0053845D7049900924832DB7831CCB80B36644BF23EC71847286C959BF54C6CF9EF075B1EB7F43898576592F533BF0DC0AC52CA27BF57894E407D8A264496F2196DEA6B4706CFDB4E108E07FD18F5B2253EC3BF1914BEA0E7B8EAC0EAD4C6A3D2E0162411811F8579262AB9F3411327C320D27C7DAEC764EC5277EDFC2635ED39B0C497365B8C3633626E66D83DBFFD8E24BDBBF09A97061D7F530F69D929DEB7AB12488951D753EFF9F8C8DA17F3F4B17ABB9A1955F40A4EDE9D058E6F48BF1B5533D91B55D333CE4AE379E124CFD375D82DD97B682D80704EFA3DDE799DC6F7D5E55B72A99DF2A89159CAC16B47F297A467358EC67A2EC72A01007C47D757DFE274893BB0E141337105C46B159B08A0414A7EF8DE0806F90B5C5A9362E837191DA4573B473C6E4354E62C5667F75721370F036BD6CA025A49C15BF63A8B30AA5DA01CCF9746222F2113AF119DA4370DCE98ABEA322483C127CFC4AB990496CB53BA7D20255E63368FFDA40BB7022A1FC115B91ADE56B2711DDBBDDB9FB00C5FBE928F3121420288CC9001F865D44ABB4D78B3A1F2BF6B1B2C251AB1075A65A233C4472A460FBC76ECF191313D700F73BAE29795EF9A5FBD0DDB5E2E04DD172C85E15CB0A63EFC2A4E317C5FF01965FEB3BCC81CBADFB201C670F4C8AAEE2E7E75F1AC4E4AE0B826FA9F87B300188546E42F3F142AF19A4F91192741ACA71EBF29A6E1BB0D00A4534095A8B9885267F27DB9B676009631114A2EFF9B2D4C10111195F0C178D2634EDE70B4C0C87613CC9344BF2F62E9BCB42C4CECE15AA61A0C7915E51A5645609620695B4D0C913337DEEFD9195CC9545A8B1AFEBFE5F21BBDFA2F140A4D146ACC25B8332861C2EA55BA75086FD948BD27923BD2590C62389CFBE89498C82279258D11689613C21CA8F1788C4926EADE381C9CDB41D09563890433AC4BF9421475EE42AE5735D1CD10653713BD62299F66F793FA095B2E04EEA1CF59EFA731143D5849032DA833E1660A95117A2ED97DBF4D22FC0BEC0B5CB8EC32B63BA18B63F737F3ED775B6D91E052FCDBC0C33A6F4498082542B039A26BCB25CFB1B23088D9BAB9DB12CD18BF2AE73C78792BA9096AF766114337FBC06CD63BA8D1C0A5E5C6BBF5AEAC38D6B4EC2922B8ABC930F58CFAF2C65C43422193F4AEB436C05AE3213CD19F58CC7623886525FDB77DAF08CEDBD5D48233D63F1D6BDA7DAD15E817775DB4C9DFE754F4AEB2A94DE6F883961DF23801A645906BEEF9128F3F6C9FDB57E6D7B5EB46326C4C39F2C0694230CC28852D54281417C4D24470B9EBB625AD1D144B4889D23EC975CAB65A855CDA704128A61CC7C50C5ACFD6355570E07CE55578E4453CEF4582C368E585CE0F08BF786CDC2C0158E1A10971AB769872C52DAEA5D7C8947A2B6300815B42125A7B8773E6E8C79239D32D7AF37CB9D4E8688CEDCD71A213795B0C1BD5ADB0AA337989ED3E4E65DAA164C26946978C9468EAF74617C47EE4328C51F41418F2D35BD33D47A9A1ADBB7C4F5A968946A7A900C293C65648C3127EF62D58BA9995B19B10D931C07D67164B2E685FB840A019EF4752602DC9317714D89F6D9318256EDBAF002C40D5721525AC0D2BD2B4FC64138F0FCC5EE648E84AB6908C1AF71408D51D31F7587F1BC8E19D1C045D8921B447CFA9287AD03B4EDFC3FB85C7792CB2C479BD5A14B72EB8D3077CC511B0A7364C80C32F11CD1EDB4B3A0806BBE9D7765B091E04F46620C23DB801A46C544A935FEE00F0A07927171D37D3FDAD3DFA81C40CE60F93EB65E667FE032A79DB745EBCD7EDE57FD51B647CE25624444199EE2D9647FAAF9F43554433B25CE78098BB33CF24A888113D9682BAFE58B278C036FC2EF41CF8C156C39D67C378E4E0EEBE750656D67250F8447C420E6EAEF139A11EC90B1B50CB582E5089694A4BFD843602382C022085141A7B8AA1DC5F68469A2C2AB04BBE91EBEDAFA2A19CF0538AE9D47421C3F98084073F340F0292B8946452251630987DDA49E56A79F1562C1EF57134F036A5DE932B2AF9ED5D24D28463DA55F4E7C29045DE9CFFC4372F7A6AEBDCBF35DFF2D952D90BD4650FDB3BD68F25B65A7876B65C5AFFE8B9CB06CF91B88A588136C80D9CD361AD83F25B6D1E17D161817E64CB06262AFED0417DF26B9B3C0AAB0A06B1310A7375352C46A410E167366AD768559A6DC618B416395F432C0CAAA8D10F88E9765F36B196B37EEF1F1C13C4AC08150C9E4CE45D9B1663FA317263672875E0BB5CFFAE2A132A6B431AA7099E47E7FC8349D04EFF0B84C3E8A743572C4B1EF38F760656E49FB1A4DF4E2D1F6B24090EC675D299B32FC5EBDE40BBC2B1DD44CC01D1935F1FC084749DF9713DE41365D8CC9AE5041D60967B25E16FF1941A9A7336DC2D46DF5AB88C14A4BDEF077EACFB1F08B834AAECFC75B5E3C1BBAFD3EBC73E187D862411AB97D694B2E557C47E5093FC15780805518758B4C5B548306F92B559DC58475464C6DCC18D2B3905FE5F60B4530F87716107A1A4EB40090C23527895582B02141386A726FFA11E9930B6099B22816DEEA2626E60F4B17C5E175A852A2E174D59FE8219C190D0D6C50C14A3C5215BB193FA56209CA4D14AB2DB5CEAC2B3B20CEE6DA1F798B681D2DADE8DD13674B9156E5C3C4AA09B1932CF69D62621DEEF990AD264996069B01E6F7A21F2E5996251D09FD955CCA7DAA902FA7D46E03AABD4FFC5A1A873711FBDFDEA0935C399A0178CF2516FD03746B86B5A80576A34119373EA7F059A0EDA3F0D18CF33ED63DC27C8157E0C43C537E86FD37E58EB5ABEB5524FE8E19B2298B9DF539C7C31FF0F7AE96A56FD3806B81088DC13224131998DF42066802ADC2A08AF6F69D36A7B9B518430C5532D3AEFB20BE0BD1BF4B2C968AA78331C614EE51B8E677B19A98E30756B39BB6A1AEF0E91915BC91D98E86FFE7584BA6ED8D6D51A132EBC124C056FBB9363B8610EB3D7A77A3E581C02E7D25184ECE47A688E718922E4672CA9567BBA9BAEC81CD8DE7FBB8CA04D20B51C850DA2A4AA63E87FFB27AC89D18FAC40AAFB21331AEDABFC3545333E57C73CB7D6B601B7180E4489269001A6786415F4D1ACD8EBC3CCD8E78F6577A9E107ECBA3EF5EFA242F80202C1EDAD26D9FDB8F43F70D250D899EAAC973042149B8F0BF7327D72A49222B5C403645BFDF3FBAF78F2AAC71B9FB582346CA456EC183867409C18E11A1BBFE6FF5B681B0F893778C87A9BE8A67E196919945F4F22D70FF5D85C55D23893E7EFD9D685C41B28B118EFC905C450A9E91112C5CEA2475EBD07DBEF0A125C298F467377E2BF8D4BBCCA25A2DCC4AC83AF877E1FC820D09F31888802B3226FB0129AB9E47FA65BAC527CE74BADAF59F95CAFCB6EFBDAC889EE8075CF7C71518535DA63E7BC9DC5668417123CF11DAB1070B050DEA01F46BD86E59C5B3175EC1C0C1244E0E7B5B6FB5D26979393E430C7B79893E3BF819380D206438174038764B7196DC0FD94D4A9CB8382CEED4490C43C19061D2BECABCDF386F1512EF3D635601E8E9CDECE9A452A0E6C6AE0D6BBBF3AFE226A46AB3285531C7AA9E0FCFDE0D9A557F20E9802139A7C8EC2B2872CBA3AAE87F0BC6DA226BE4AA5681B114E080A399BF7480E8583DF2505AEEE32E45C4112FC48DD364986DCF106EED4C8705C1A9FDDF9480D337BE5C61AA3F661C6968AA01E3E454698FFADF366C73599B987DE85005C9743A2416E637E4BBB67FFC4D35F26B7539C33256EDBF680939CC8986F5BF32D2ECE4905A4F6A1727BE1131771954856A1C66A402FDD0DB86B51E9C02E6BB136465FC4253C8D98FED1582EF8AD22828B6A35580FD58A0038A9D97FE2F661F312658041839969752C4ED321D4EC8229C5753F399029B0BD5F065D5A19CB4548C86CCC1F3A9873FFB9E4F421D033E4EEDD4ADBAF302E24371EA97D817AA33C72708C1EDAECBDE7C06AE0C95D8237517666D0FB43B2434BC50EC2BC8DF1E3CB46099BAEB869B251E79E9B175B75FF62F408A5FCAA4F6DEC90F97B926272389696B5E38D26B946E0575907C358DB17D046D58D061683E07F1B075C10934FC4260043AAC28928DC877D27DB9BAE618910564EC3EDE3C402E86BC3981203CB7DCB9940C37D948556A57A11488D1332B05F4E5757D470A22D0B86C88DC456CE014B673CF5FEECAAF26F4662C9B243F46969025692E445ABF375AECBAE50EC9E48AD25EE1D1D0C16624CC5BCD1BEA8C8FFE3579C50B732625A381002115A1D69DAFF5844731F41AFCDE42CCF1A13FC98A64FB9769F03CA631B1C3ADA6A98F40343BFEDCD80966652292B60DE83385FFEA9CBCBFF51450C768EC8C4FF6FDF2F76FDA7D5886148168CE2BF693BE0179DE250D41DAA80553488D4DDB01FF97329E94C7DB33005B498FA8408E13FD5BBFE079F6E40EC5C8B735EBF9914B932A82441D9D5136C662294956CB52939F4F7E335A3B9749CC1B9F374AAC89C9AD1E718BC469CA21D2CA467F5DED54C402BA0CEA000DCC878822EE3E1D329CE76E421305178FDB31F5DAC177838197C5B46A4F96721139695EBBCF39F04BC1BDBEAB567E8FD812C355CF72785CDB3A6909F801BD2F448B3EA0C7F96D09DBE4EFFB1CAAF2A47FE6BB830FDB937CC5ED2B485AA6B85DA799C1266562DF181005A345C62BF94004C1B8D85AC06D114C8F2C5E2D569C709251EB929237C76E9CCFB9CB39206BE3C391FCF5E814E42AC2BE1576B9F0664B20F03BDA1F6431D1D1CD4C0783CDAA2A7AD32281A06B2BEC53EF1568840277EA4341F5570388045526AB214B477EA23023C13F4327DD0C84CD1744677091B21D8F95F38A8904EC5D6542AD6E3A68B355D688B1F6CA50DB7181272B3D564B1DE41C14575217FEE44E5B631CA49995EC2CA787EEC4533657FFDDE7370329C9BCC301B8785F7A307F1D06F88F21F5BD19F94827C128F799A9C354A021146985256B3D3E8BE46AF6E370EE193BDA3494E0FCC7AA287C3A5B93B638AAF9BAEA46288DDF690A464017765FC2F769A5A930FD3E5A5F399B2F972EC286E81062B6BA85FC04DBBBC05B9971799225E2F0867B55CBCDCDD3B85D6D56C6948B03E91080FBCE3B2C5438491050BD2E81C41D5C2F6790AB1F327D2C7023FD891F8D6E13D6F69E7AB1604692F21ECC7794F028A8306657D72B5858301F5296A5FFDCBEC4863D0503749E9B483E4760AFC05682304EB17D67E016553FE9108895DF3EA98890172D795009AB414E4539C47200C56828919DBC1AFFE040FB3319A068264607CE51D387B9291B7483CE1C38C1F059AA86B68BC7F852D21BF759A56557AF5B4E8CAD60356AE1D9D11AB49CFB9F627DFB1AF5BF8A6D85A775B66767616FEFEF6488C383F5ABAD4E06DF0B6C82BD2582B284BC1D4B27168525C69FFE8117FCC38FE758B2DF09E38DCB1688789B2AF3A050142E50787EBF2098C229E6965FE134593AE47AF7FC4B59F424CE3388B73A01C7279251C7854C664803D834EBE840CF3851B922071026DC17B967F06E8467AD73F8F70440CF20178BD31F8CC315AD8B3D213029D08746BA9FC70AAFFAFE2F393D0339BBF28FC15B8581667E9B43E0A1534AB70BDE8954B30AFCD4BF10B91B8BE2AEDD6489D590E0947B6155A1E0B4E7DBB7D5DF08A340FE33DEF34330EC77E65B57FEBD4745B0A07CB8BCEF0ABA92E387E2C2F80230818DB1F70F65F872A2C5580A6C39B9EF600C797FF0C61641100903B5243D847C7243EADCB69F69D75F4B1D921C72A4B5B67D11B78F84BD9682963E075C76350BC301641E76BFAA23EFF0FDA33B1A41729AF935C09C1E5257F84A4AA0AA3A54525BDF1E3A51EDDA6A35A2C2B6DA82E5C7FC989475D99585A9DCB66325B98C20BD7550871BF66979BA3D58562C1125EFF230FDC77A3BE8A7A8CAEE2F83C62688E0EE5D72D4C858624C7362A57B7C0065670DD8776D1E97F67CDAE4110E53E78BC17793CD34F11089AF317407B5F43E26424A752DA5AD58470FB8FDC193D2B28FD4620C879BD22A24DE4EFCE4FC46D7A5A4350136F43D21698AEF1B4C318156D574E93BDEAC252675BB1F1819B651D08E637538DC14505779521CBA1C5695CE7C5F9BFA3A7E68E14ECDE399144E6D514CBEA519FFD2C677310214DF222CD79C9B9F763060C48D8FC4E02DBCF0D6396F6A28BED4ADB4F69FA44BF6F52E7516E77CAA981712F10E94DAE683DF1CD858492A6B7C1FDC92B3A8A4B121B1C8B8791E18062548BDD31DC544FD94DA7BD77A0BD18B3940760A3746ECAEFEDBB6B99562E836421F24C2F2A99F686DCF9C57E910748031521E359D21A69933D3B3173D520E7B8810035140A9F30DECF99A117B8C81990473378C58D1313E29A9824034B86D46BDF15479E8273BBFC4710958348B17C8EB8EBF8581AA9D1032AD591B7AB62B3E2DE12F36BF0ED71CB0DB342D5233243F466291DAFFD75971427F37549BC74CC8EA2C9D61C55FF4EEF46EC74F37E30AE9227F9A346A5A379A386E4706FC6DADCC80FC7CAAF6164673DF6B7505C1CF8C1A2C262F13A65CF1DA6D3CD277494735E5E0B4366804A816373AA0A33F3FB3566D9811D26380EF7E049F004E5540E3A984793553B866E364BF3ADE51ADEF86D37A9392B6D0D518C0F07F80E9BCF795C540BCF8BE8AE72C0A0A67160F296E30A0F5727391F82DF95DBF2376B82EE6DD6C87C05CA191AB8F32671C4E404734D6626DA299682D9A49788A7D961B737282CF16DBCB233124C5EF4800E1F25316763BDD92F090088218C071E91EF2D76D80BD05D23C6C06EE975279B0505CA18623A33A4D94EA882A6C0C5510986D537B49BAE93E363833A8571F91C47F022A6E05FC7673149128E3876AB6F423CA96A7F0F4D5AC1682DFC05BD4D3ED478218D40A42A894DAD908A587A83299D9CA685C4E25155760F53B27EC3F3E722E46E63BA2CA0D353C60DBF985F3E10893A0BC01539FBE6126215B090F1355D211E833BC019C7BB351B1A51E5286A178F70DB39D3A8DB65E510A0A93FD717FF30BB586B8FF49D62ABD56F0AA4B01D2A8E6A3BFEA54FF1D36C8ABA385D0974C7F29B25BF12B1036E4926F0E70E6CDC93233E211693F7B315C15594790BFF888ECE21352C8FDF906DEB1085408C877A98BC5B145BB1D0945E33409EB01E243D386492BD62847AA67D4EAEF5E8B84468F70457470C1FA15BBB44AE4D77BC401BC4128654B52B2B8CA48721DBB267EFA7F0B2ADAEF8C2BE9516A42BD2FC2C7AFB8D0D71FBB8A6D7034892078F4FE50A3B63105B31451A7910FF81F6EFB1CF3169B63C2F2544105BE42B20467E1FF2E4204601A486928A77571247AD40EF058003E423521B4196118088D773BD1694CC83C02219F5E16C31BBC7350A023E4FE0720DCA713444B455DA085653B539A555F37AEE9357BF538E3EA6A2C3B2BD30EFC32665B597A611EE9DDBDA9A9857FFA648CBB75677DAB55EE8528DB18C4A188C693A9DA0D7DD736401DA333DDA13F572D4652D23F9016CE9D39605B5E2F341F487980331D88511836C7560B9F3E8DF6FF4CDB7F74459BA199E081FA49BA205B368B4D519B2D0ABF92405409EDF1DF280A04F398758E5511B6E6325CE00C57186A0938974207E0059B2B8BC81156E2FC0A76E84C5BBADF4FDFABA379E6F960DFF5DB82FA306535F0A8C4D925246DF1D9B8C7A711554E9087A5FDEDD656CAE74357FC6AAE8EA0C72B74BDA7BD4898C6FC7BC50367FEDE6D5261B0B72E171043C89C8C2149D01466B226F6A1F3F3FF378E34A3956C660F0FC8022E15EA68DE5DAC57BC370B30F9DDCA6404C5A152831230DA9EC3662DE701767953AE8DDB9918598844202DC2AB41A0ED711D640F3C60A8CC69BD8D9340A32330F9D27E7A023CC99D173BFE6CA4F0604FF6E5B4C59EC2E1BD4FAEB3321F755B2494343BB6E647210041A1B96A02B7755EFB6B482B3C7122EEF9242FD64D0D7BE24D320FD33ED0D4DF2756BDB13BBFB622E7E928676D228DC395DC32465E0E3480B7ED2EDDE04101E9C0F8020D48F3D43A0F756622A3DD866B966B7B0BFC1F40B1D460D6A54A45ECCF5AFC93DAF8541FCC62A5FDBE907D2DA6397B3F7B535DD8E30D400610971E4960859DFBD4A441F209021E9E4B05D3EA0C80A738F0C4EE9B03492692C543968122FE39BE1F2E5D682C1FB8549B12D6F32AD5938FAF63C5F490EAFCDA9D7DB70681B5650081B098D0BEC87013C70F890666AE984C5FD92F6939419AB0C1E981FF6EB03B1A48D708438A8F6AF81515D8C42E0DA5E13DC07D22A0CE018105BA075A696BAB7CAF420A65E38EA1961B61ECA43AA0085BF2BA6244EDCB56EAC6DED736712045911D7724E9DDED1C05DC7205580FDF52143C07960AFAC71528C1B87BFD9D21EA5DA5F9649AB037CEFA5713647DBA70A2D0456A24AFB0B55B8C859F9C9617E83E12C0D963397DDCA09CB16E22A47EAD91206E8F3D925444AB85D76DE73A43AA45BD3B0412FBDF254CF273E5F20F6BD0D938E30ECDF159120BFB28FEFC0FEA1DB898D5D1E674452DA86C9AD4AAAAFA07AC6A304CEAADA8AC82870313BBD56E746E7C9C183EF5B53BFB5A374B955D053D1CD7E8EE25108BBB8F2A60663375832213D1B9064C9F12CA77835ADFE28D1A5E1E65FDBA45147F052948A507180EF21052D5FBAC2B3F4E46DBC4ECC7DE08D6FB3B6162432B25EEDA07911CDF4E98A219603E19FCAA8142621F546C898181E1761AE7907F624A5D01E36612F06ACAA157BBC316E9AA7568E359803A408B0C36B4593DA1B4D4D6D1E6AC290C90D19635394E10F0BE0B51165777517AF168F38B702DB2BB43ECB3DA55D9CF9E8166D99B971137F6845653B8CFBFADB778E16A8F64BEF8DBFC6DD4F6F9093FE629C99585D59445ABC30DCAD609903A26C181FDF481642043066E5B0561F13934247D19975F136C0E0F4CD41ED3F8E22739FE2D88358CAED503D7C36FE755ED34B9EF871F2323AB593A0AA8BFDA8DD3D86304E206E5B4FAA6B905751EAAB46FB576C3AAC9387E38A02A6AF8EC72BC953C4831FED1337EA65241E4D94F90A0E99018DA735E1CD4C835AD9F301A618395C8FD4C982CB5282256F8A4894CE812897E0C0F7BA13D73227DA8D57F576A25F233384DAC16B5F3AA455222CF8B1C3F0C69F6E1EA86C6BE0DF818820D7611EC41F6078EEA4461C336D02847EC3C5644B85EBA26B68C5927D67E36BD381F8100B6BA90852D529419EBC8118A5354706D2CC769C2402E517A86809687BA7E0B1940A88F0B2586484EB7D1B63E119D489A41691D0C1A88543D43D8962D17FCB8E91A6CBE2635F4D0814A8C9A4DCD7767CE7D62E8BF17117A6650E3E8933DABD4CCBA43F40ECDC46EFC541CAEF6271E87BE92E63DFB7C2E5B7D7D2ABCD56A0A19E3C9F75894860A850029ADA36F990DAAAAC5AF56B157475EB18943D7CCB8D99CD14813A27036ED1F4DE3234BE28FBA413046A26113124B5FEA24F4074E991E163AC879520669ABE6B1A0203FAD6E4082CD5ECE201A86EC87676E350021FB2A1E04AE9B19A03152F8244542B4D21B4173D05F159EDCE12BA12A5767363794DEF4D390F56208EAA7680AB527C2035B065DD58AC8182BD5660DF75511EE1E0F407F4EA72AB3FCB028C82D8FA3003B034EFF4DC1C179029C452BC4B4D75AD02CE9E393C15872F8D130AFFAAE9A95640EC68771EBE628C42DA59AE4AC2E9156534430D00164E3D2D28665BD2DE6AC1482EE3475F7E00F41078B672835B435711C560166CB4DF17B56884C8A66DCE5D4B42AE675335EF457AC20E4BE7FC32FEAAF7EF4CAD795ABA7F9A20C6703E7DADA30B63CD6CC214114242C81A9614712271CC05867595D9938ED557007713F36D1A44AD2285A564C9B242AF6BE9979F7C474385680FD574D9D33B8E2DBC1318EA71977FF83E8977B93BE3EAB2401A136E021DA182B1AE68007FB36067507FF6900AFC4743A9A8503B7A2CEE04A1BDBE9D661691E5E8C6E5568D16F70C15D156F45DC41199A9C67FAAA36D8CF67672717ED0124E996CE855392F5A8BD24EBCD644AE0CD5B1AD2711200130AA4F8D3B4599AE660A56EB6E192709CFB8890510CFB0195D7FE794B9EDBCCB25ABE6F3B6AAECF3FCAB9ADD6D270D3D5B934C46C8D6800CFCF99617AAB8192C28AB627EB0D6234F7C68F0F4241662A9F062B361FE89E92BF9254F823E4164AE54661C2991A56C4AF8884DEDCB20EAA02D3097F2D5BC45FAD616F2DE3F37FE2DA9CAC838ECB3BF649AB6CCC38675126381561D546B37C743241297476497184A861ED1FCC75BD508915AF39752866B39F1BF00799F3B254C6710D15F5F79E29766E3EB75B93CEEAD0F3D454A3A0A4B9B88534AA91B604424CA1F9801F7F16E0A5489CEA18CCF76537CE33481328C83F3205B59AB1BAC1467C56A28DA696DF2B08CD380049C5E0FABC6AC8C5C50F9481161C1D60B0976FF459B2C11679DF8239AF63C1379997A8CDD47954DA1A9ED1606A3D1D2700A2B9B0C9FEED839E011D52752CE543ED224E5241340CFE1219A1A0117E033F48B262A6C83FB13BAEBF036C2ADD4ACC5D1CD9C5C334F4EE7D964851D9A5B7CF5A38B3C1CCD6DFDB5D1AE3FEAEDFEB72A25C7CA779DC4602FA0E6D8C4B35900F634130D48BDB8291B7BA751256EF38FD6FF0D5662C1691B825714442F5B633B30514058C778C78BBD6A70A2096CC9A375AA99CE11E8FE4388ED8D403EFDA3E604EA77820D4D7A1FE7C51B73F286520D56DF828B659FC636DE3DEC09FFBEC46FC143D943A09634A91194D77F0A70DAED26ABD3F6B51457EEC61F9AB544F544B21A1284F0E70D75DAED0B9D0FD864CC73236CB64EFC7C696882B1B408B6B02F35EFC4B5DCAAFC600330C59B1338DC593BC22C86A1C4F16D72E7BD622A3561F60362F3612580DCD55CF8406A7CC9BA0A5224797D74777689C4FBC0D202DEA8B9773A0F20DB0438BEFD40A996EB2E3F49CBE2E475DEEF73F112FF742269A701AB43D8E47EF94DA4056086D86B1FAD636D89929C60238133A5B61DC4B7F8DFC765CF0C8C7206F3E0DD3DA13407CA75EA20F172AC38C42ACADC946B3B18BBB30DF871905777CFE0D3BE5363574D2545D0214D6A43E2D34B50D7FF7D9F2DAE7053736B71FAAECFC2C355C1DA645A995981E1D617BDDD14EB9AB230D10085DA1AE55D1C9E55C225997D128CC2393D6E5BE9F1BDE1543DCAE918B38AFD5FAE6031E105BA12EA4162F7E24572688C54291A61635C9DA26BB367348473D4DD4AEF9A5C4E8A6512AB149D62F625D8D45576FAA4CE28E5C3D52D293A0D5C48821E1F5CDAD7257C97B3C1A6DD83A4ABB55F780D09964D4B3940D36B6709D00094B89F319E1C2CBBB3EC33A6F0398880B8079E6A39DE697D76803B04C230EE980765604929D60733BBB6382B4CA4B13AD3FC48AC9F944B97133C5AE6C3B9D295A760D786DDBFF346C873C2DCF3D2591926116A318F63835783A33A17C452AA6C620284BA99DEAF023972082AD2B370CF3016F0739103A518B25AE8D59BB017C8199ECCAF3E908F9F144C778E0F5F47FA06FE8A22E3B2CE3493EAA8745478D653F8D3711F832D9212D060A7F0B0B62AB9A3C9BF012B61A9B5E6DBAF4B48D9031250419627E96076925AF95E2B238E8CD227A0F3D8C9C3BC68D5990952D6CB62803B8D193FB06120BCA9B195E92B995B86B92C455A6145D3F77898E457E1B938183E1D76FF61C163057A4D70697507BE020CC28BE6527CE306A5D2506B86152B5E3B954D5A660C79CDAABB2EEF0D135C0D4AACC7FC3EB5A3575D95070B168FCEF4F9B36FC3D55B84DDBEF10DF6BA659F70CB2AB82FA001D51ED0F040F9DAD4129C324BE8B44316C0E3E15B27C2A8D54A948585834C2DBD40337B61F58F3AB99B3303D56EC1D30ED82F29CF6A68208B07DA120AC4073F102F4D796E38628D344384551810998F6211A082BA225A1B7D63C9A3E8703DD945BE1D979677FEBE715396988A873B88EBCB10209E4DAFF939776AD14C5DC90BBE9C1A57581A145BE0D4BB47CF50721EFECCB50C96E824DF93D675B1A1B4D920CB1EE82B0369094DD84FAB4A3FA94F152F87525ED6D17A800EDB1BAA6C13A2EDB5C9B7C5A82AE5824AE9BA63156EDF78517AE2B357C1A1E8EF6CB12DA415A914FB69FA633527B8A1659292D079B580DEC210231BCA77465BC6A9516F2917226957DDDD9787313FA599BC2BDD14DEC9DCAF0F2520318A85C55DF40881FF65E4AC21F2C9EA3CC06651309E1F89982D45FD6EB5BD588B647A80D27433EF85080A7AB2FFDBFC7D2B54B215E7D27A333D4942CD23D53142F04976093CC0344C19F9CB3A5A4D522E26B7E2C1C85C1ABAE1B4A360945A46D097A1F3676A80E3BB9CBED0BD363CB70C2B250EA053B183CFD1EDF2F6A211CE618F70EA1AB535E96CDD0B2FAB7CB7F0396B6DEB59745C1BDBCD452FFD70C95E45B88325A82CF07EFEAD7176FAF04C8C3E0CC4458540BED99ABB9F52AFBE48E42C636DD076A37C07C8E4EB6830FAC011936EC047F6D5B5857AAF90F80B5D33B502A116828BD27E30B3A69F351E22D943A482BC6BC41BE7BF941F3AA7BF85A2BA5C38FC930680FDE5A4E174AEC4156A755E7650CE488620D6CC62BF9D085FE1782EADB11541A5C19C9061734513316B9CA608A6E48D333A110B57BA5128E9331E6266174B85F7B7D1DB264361B1C6C044A8274A7C8DB19C253BF8DAB819E85130E92079E4509D63EC15D4930F17DB3EF8E9ADCDE82C9F2308A0C9F77359575876D90A9CE5ABBBFFE09B8E145F35C7E91B141F66F74B3BA923D9ECF863A8A455086DAADC247872C953476A85772079783A6F37C964AB1788479175F7B4E9651C7DD5EDA94F8BCFA57B3542788FE9547E0A444D249976333F99710930CED2E93B1526A02BFCCCE416F0CFAA631B878BF23E41F95770315F1E169EF22B9DAF0E2F269E06B03B125CC6F20D2AA9A13B98CE23FE3A7FBC70CD05496ABD89ABA5BF58FBD8D88EB9653963F0452CA43CB964F7B145020D637905E8D26E8CCCE4EF892BC48381303161644FCAA1DB9C4775E8F0A6367F1A842C3101C9F94730F6724257F2EE1657CC93950C9C1F20832DCC11E0001AB347781F21DDCD4786234C908772B553D7BDF4795FE69D7D55E950D4C6E2A76C44995CCA5C9CD539ED235CC55DF6A004C1BCA852C2813DD17F333CF67711EB8A5DA439D73271272D0D62B34DD457C7412A26FE2F4F23E5F5AE8C2F91DDF86B7048A40872AB7C728B20DF7AE2A0E8E52B00899C565E68390DFC83344DBEB7257CF8031664FD93DB65738013BA234035F11B611DEA4F74B1000724B2682EDA9639C11F4F4580683DDCA2D9159F637976293FDF76AE2AC7EB5203766009577DF87D9DB654ACD64229495A5B4A94AB3AD8237B9CFA2B5AB6B7239A5146C777C4A3CCA9E1573D96A7C1B333F11D284AEB55DBABE6B4F12A421FF7BD442AB6B8A7FC33A2087886328B33037EA78D9A7015ADA2C8F463AC1FEA8FF3EA886823063992176C31152573C10516BE386CDF81A6568D8E3BA2FF195B23903C95B16277BD60D238F309A7DD6BDB4ACF4541A56DF5D3D4BA4078E58641C0453B1BC8DAAF6F1DB28836D6FBA3474D69870E07997DF4541BDA5C62291A3360F5C5840752A25CFE366186F7E4E21DA0704266B5C14ADC1541E463917D5DA677945574F800BF47FA028E82200F9E53C48C887355D9E3CE5FB778341A356423D00B18D3048C92A80279C2785AECAE9EA57F828766D6F953AACF93FBE8A4C32C7FC9843F466141DD018CBD05ED8A16E27B43C5C0EE16045D39CDCC7E4A27EF636408E968B4C99C895CE77288C819701EE7184DFCE889328E4CD2D8BA7BE5A1DAE50E36D562BF2441B56242EF9C4EE63022F88F0F77E6094AD7DA93F672C06B6BF4ED5523D1DBE7D8F13892BF90DFFD5D2A3BD0E9B56EEF03E560BB28650D873116C0CDD00148C90CFCECB6BE9C4BDD7603B5CE9FC458431C00B1D704702B552D847D0C89265D842FF6599A150854848B730AB33CCF2BA6533638860BA564540C6678061CD97BE3D00B103314894AF13999FCBDECAFB5A895671DD1ECDD95C0C94A250B014CBB657ABE3028C8D6CE436FAD8FB7BDD12AA2DA32FA6435889F1B8C16EA8488FD6AFDC7AFBF5358A31B23E0C05E315B60F180986BA17E26621D92CB639A0B815E65D140BA8A68F99BD42A2F428345AD3037274E515684EEEF018BA41A7B0138D7FF2C0B838823192FDEED577028052EE73D65E92812E4C33FA3CDC11234F47F702AD81F3829ACF1910B9D00167A3541372DB79996FC8F4B15F2A56B272B7DCBC4B074A36543B12B3A5396B0635068B62F81A56E33B40516A376D4ECF7BEA4F8ADBEAEACBDBE23F5F311A39D90D0B11BCAD30609F6CB4A657CC620CF8F727E30F77618E5870F72EDA78EB89399236F7F5432560049262E29A2979F832F2B57CEB25BBC2405A3098CBCD3CA0CDF631B37440A47D316F4860597AF78E5ACEA13E8B8B5420210D7BF54B1F07A433E7A2B193D7EEFDB2288B63460020483CDBB47DB98D8D720FAD57072D41EDB5FF2A2CF65DFB70ABF3524003842F7BCF9D36F8E187F86B864C5FE0181E5E3D33AE11A50E67F56DE93387F5CA7D1641CED92F7195F2ABCC7B32C6C7BD8AE561E36A6359BA6171726A2F9B00C7655C7E346310C6EBE10D2D470BD5BB7B4C88378DBE2352AA45EDD728F42A3DF3B5E80BB6B6BF55CD663203437F575F769CACE66809FD25933204387F8C51E0A6B2C4C6113DD45D31AD7567C9B924D5B10F124F6C1CAF3458B3B84E9E42DBA9AC879E2D711ED8681207374CCD299FDB7D7004678D56FFFE0CD34B4858CC0CF4F611D8EB5B47768D69AA69BB1875E9C397EE9453D37D4983359393A02941E772F912708085F2FC7211DB358EA5D4E00263E14A1CA3430A6E6FBCBA94CBC8281C356B4114B0E0B67B3265D3E1B9A64B1D4BA5501CC0F6E19F56A7B3B1BDEFD8018340ADF7640C58FB26ACE46B788FCA44BF228A737B02F160B0462846DBED0792B27FC6B55757BE01FEAD3655FA9E992485E2B29321816B04C2BF079BA5CD01CD7DC0CC8CFA471FAEC74C95041B7C62DC9BDFD11FBD4D3B7173A3A92044C793EDB6AF4DCF760D38D3D412B3B292C74E08EF4B4515B99A0D4A167D9103C3E776E213AC2C1614B432A8A7D243B0EB5E7AE82118DE996BB55329F49ED4A7EE738350B565F50CCC313DF274EA203757B372D542D451DB960DD8D7F0C5E532AFBA105C7963A39426732E2E30C68317C4CBB3C10802C5104923E9EAEC89C6F421B8EA3D5039D5175F1EA854971407C7B260BF57FA912DF3829BA91BEFC9A7A88E5A289366A88E7E6C5C4D4781D583CC15C827A4FC753F66C81B5095D51F3069AF2E3BCBF01362F118690C35D3E6B5C0F41F4A4964226E4646DBD948FE2D1AE837C0C0062F77A40DD02371EA4B69BFD02803AC3AB972CF450F59FFDE724F79DDB7D534D261A44DC4BED2A47E78289BEE615218D1F861896AE5B07729568508B0E35F82BAD9387B52E2243E456C2DAC3F82176E4859A8288FB8E2B86FFF4BEEF93D9F677CCACA1E760D045F28C819A44F5F678E61585B74D49B1F12A9B28D4056CEFB98845385FCA12A6AB0C86DAB01C7E8BF5D77618F797288706F18DD71B33F909CDB15A63047D0EC462BCC02AA7E6D4D4D5C3D0C5FA2C03502EC51D781E8CDBB63A2578CDD9116701F7840D6A268DB082223F3D42376C5D796557BDC568791BB3A5BB6A9F501837CAF0ABEFBCBB500868EBE0FA0184ABFB927A414A87BC3A1903DDFBAC369B77B5C9FA203C7F6CBAA7BA826867CBD37AFD20E32DBCDCBBE7C12E3974BA0133B9ACE768AD4652C3FFB01D7E2F4EA026D543B2292419B10DB09C47C110005D667EED5D066D4634175B58F4BEA53CC39F2D1A9623B7C9AF2ED29A37891F2BE24418746A233743BD340256801EE39E7C05932AA41B56F7DF4E479A365BA224E94D72A395741D3D8135208C96AF089FE2FAB29B9D7DDB02D149275727E12A2358F4CAF9DEF137397AAB54DF78F5CEB17CA323B696C3267A4D2A944C65B2E8F542A2F0AC3DA7A9D6F2AF073FDED7424942B700AABA291FB8672DF10AFDD154218C0B0088E84486EDA5F21615C06770A2607E93A2ABA60B864505434ACC6B6BB15BD00C3881E59F0B481653BE10929E7EAF4A90BC181DF76434C08F3ED37D862038232AE6A5C56F36F98574029AF4B4A280693551082BEE4CB6DD4B55E00AC4954F2A01129861DD2A70FC30FCD9073FD2F45B31CEF9724E673032D0C87B2A9FE7706040293B6DFC3A3197AA58A53997BE5A2A763B027D5E14152774E3FFB86D562B96C4DB6F8783C945E358693B3D99B7D8E77AD50B7FE9F5176AF257ACF63E037ECE9FC071CBA13080A08E1116AE09151BED458CD8BC9DFFE5744E0CD2365293B365A01D30E894F8616AFDB6115663FA15522C8CFED9E6644DAA1AE776E0BB2912CF584AD1DB53E90043B1F93D67D51B1B10179F0FED6EEB52A127BE857341CB5A223864C02E4AE3F3902C90BACAFBDE2A42D73DBE88577F871D9C2EB9885C7CEF0443EE4A1C449951B24764CCBE716487F2EBE474ED6DAA65E393F1AE17E52B75EAFC245A161AA30CC8250631DEDD2B233D202CDFD1C3DB64FEEB2F515F2568DD7C11DDCCFCDD77B9D1182A29AD5813791DD9987BA735082F8A669F38DDD84EE7C09334AC732849119D769DB8CD79375D1C8EB4E051777A057A4738FC4E06ABC70F8FBA6B52948F91FAC2F2E248F0C417E2E727C60872F905DB2CCDCF15B2363696424BA5B62E98D5E4B51ADAF38DC97144CA32BB6DF129EAB07313059C725051883475E30B25C8CEDC63BB517319ACDC1E0ED86D5BC5790F11CD2F4B2CD882345706A4CA5863C0395C3159AC3D7FF8F7B5F7B59907CCFAA53EDE296087B04FFDDB0B221B3DCD1A6C64A591729A039C230CA52C94ED2C3118794876F7478E7968F962004F01E8FD0546207A64C09A2292376F77D7789CE2CF04995C7EFDEC91B5F13EFF915E9158F6202D6A7B0B97BB1FB121FF99AB12F56732E9049A2C33597A308A47FBEEE3F530E357BA6B7C98D58114D89C0E9599C6B17BF409B3B63FCF67DE29FDEE152711B63C02F919FEEE1A31636E36ABB4F9BA607020529814E06AB2D8E4FDE4D6C1A0D709ACDD7E442B1EB65643FE7D9E8D89906915AA868E9DB2E070CE6511EDA0506A19A731C0DFE149788BCC155B829D52E2921430566F9DB82DB062023BA5FF61FD26F8209421EE8C2C22FAC9F58059D223B4659A23BE538BEE894015F8E137849280668B971AD628CC57ECB49701EA1F0CE2D07B2D7D8406FB1D2E010A51C02F6F8F04F38703326711B85ABF70D46D947A42855B7F13B79D39D222A3578D6336C9B8A69A12DD38184EBF9DCF787C0D7611AB4176294C239B60351B62309E5DBC92BE0C0EE1422D9074905131757F70343CA00ACF2CF9DE239D8C794AC868565FF9900A1B9D187580884D509642AB4F6331A89FCBDB367067712B7B4A7A32E266D7FE571E4474FEB5DE28CC0D480D4AD11D0CF6B599A56925D68C1B076CC57612290221AAA0F91C8F7D21EAB354310250A224BC0455C760F62B2981ED68F7E10619AEF954B79D0D0DCF039DF951BA2245DEC02E71968009ED5364774644E995DCB33A41D53B3C9C1BE952449CA8E671E15EA888789CCDFCDCC91E0ED093CBFF538909886E27972C9D262F5E1A481B8F483BFB311D1595F51FE1AC8CB43EBC92C0D17868986B6F2BA8127BF95E159776570E273393FEFE203FB079780E675BD62F475CC0D1DF76CCA50B5145565C3615498DEF9B7BD37887BC6988A9853B4E639C1BFB61E32954D1166156F944C722444C29AF577C12F567E568BB1BB44A9D0783F126D6A079345C3842AD6240F1740585102F558C5DB6C22A057EC2D902CBFED926BA5F9C298E6F9118B9D2B446A47E4DB2F4F1CC30E75B6A1B67FDA687E672E7136AED3E02F8CC346F520E5929526B6E9126450E708D30168D1A60B41D19949AA4BA5CB7A691DB90A7B5040B01518FDDB6035454280BEF79E019FB96D899FD97BA47D0A7EBB39A11A84036659598294B0B9A905CE2E0CBA0E3AFAC85FEF2CD3446057ED5DF2FC389D411CC3128A8DD23188F830D903A9010CF2726ED13F833686B6C7796E87CEEAF4A99B40BE702CF35774B6BBE4EDF528C39A8FCB1B04AB9D25FE6666535391A45D5DA45D8073F705184427C3C5C4225F66F041151A22423A1F5516C744FDA91305B2B70BC11569416ED456BCBE6C1A47A5805B464EF6A645682D88D75E7FCB458BA2F9C44E14589D2805A904AF02FD3693DE69D0CAC00E058B26277018C3339EDA876CF820AD6C99149BF76A8C47ABF795EEF76D55862F4A88B26A73385589048B2E22C542461AA9CBB41DA58C7A5A32047B9F85426119402E531B023E3C8C1EFC7AF70D3D553B50408AB568E4D2EF96E5FAD8BD3EDF830FF2B12829E97C5C57927E69A438737B1920553F2B921E62A3E25331BD3BBBF99C9FE1912E0A84B15EECAD16B03D059876B7B02908C7A7DDCCC51E01213B4829D21C9FE65AE129F3B58B51798C604C9A2D2BDF7376FBB50732D9694E199DC532623309CA43D837EBCE0EE9F3943BF57F9ECAB4D939B2AE599FF5CF5370C9B56B7B9800A651FA64F854962A6D84E1270EFE2A481D399DD3F35C9C43605FB03315259989C4F2EB41B83C62DC2F7EA15B315126D227A0CED8B626022F9F665B49B8C32A10BBCEB0AC7FA80335A255076BEEA7E5BEA0472531B22E07A6579F9726600E661B389A221D2A6D2AE9E0059D24874BA5AEF82B1B53734F0835FAC5732FF0AED0F092E06EA84B3B5191BE3D226A41A6BC39AE3064A789A8DD9CED68FC3B902249622576D4086D63B924CB0C309F75F1FE9A62071FD2629E927A3ECCF3B575961221C5C1E76D2D6F1D330028F262E671905340C7621150074C49D9D3D64563E4E6C8B3221EBDFAD5A369E25DCB2C95A1E19D05B4ECB8E605BBF49623F6C62383A4ABF25FF823CB5F924ACF6D6173BEB850C46E0CCF6AFA873096046B7CE53271A33D18BBEBD6452D1874E312B9DD2035E511FA43BCBDF3E3A9EA8C602EFF6051AC0062232BF8A2C1AAAE76F0C12ACF4A290AC376A0DFA55BCECCDDFC1702D38F74BCC3FDB3160C3F52518EF2B1E14CE9CF22AE5E4CF2DFD531057EC85896708C8BB9D810B7D258AE975D678F19139A760F5609F57E2558E1AC0B6AACA4636017083D25190CECF73D29E2F7B44393D274074A68570B720EE6CEA533AD788F9A7F127BDA09D43F96AB9863B5365C9361A9EADA698F5A616D5EA0EB9F83B0647698DAFFE659979F5A5F086FC8B59D53C737E2D38EBB4F74C5CC6429B526FEFC9D1426969AB14DBD3F54BEBF25A5A8846874562CB282B2BECBECEDAF015F41037486297B30C905572211F80727CEF292CB2DB118157E666B190809A10B177BC63158505BAB5C915D37626EF7CB011041B08B03FA92A40EC3E39BF9B4D7279A5D1E4CF38377BE6C00EE12CFB4549C036E75240D3DF9FF92B50954F461BC25BD155AF84316A1752B9F1834AC4DA1B1B5A4C84992141CCFB0CC6AC5672753F4877403FC3F4A52848786C976B18CE968509A4014F3C69A77F9CB4915A1E389C1EA74A05DC08B6A6BB1BE755365F1E96E06FCFDBC7210099601912F55F639C9C96F28460CFC392C855CB2D3986989FF85A0DC7889AA2F6AEBD3E1AA196F97A3C3A0FBB33ACD3BBEDFEE06606DDAC5DA26290149E6361E8BEEE7F2400588F3FF853EC85B5F5742DE3547F362B0A094D6F935DB0A2B5D1480DB2CEFB9D665887F6030358AB9E5B26DE8955B188C39D6B146063FA59D1BA260796A2DE8CDDE8560915F07087E84589340103CCF7E1B75AD5BFD209A99C429A52E8D4FE96EEB9A32A4CD24A7940B446003E1F8296EAC6653659CCC3C85E01F7A15459CD72F81F8FA04AACD73E9C815A312E8C02F1C1769FDA17C16350D9EBD4F8D10F248035EAFFB4FD67933279518E3BE9E1807288A9D63A6504F3A31E7DF322AA1B2A9ED3C23717C0C5B134D2758666CD04C2FA8C1EF5C1E58870C5EE1378619851845BA80DADBC37A764BA17E6DF285BB3DDFE31A56D4BAAB0FA622B8D3D24B7F91034D2F773FE578C874FAF5204F3DDB90B8533906AE05834BE67263447FB4485BA069EAACB68806028CFDAA8FC6DAC6383837F9A059EBD1529A92F98F44D55AC06083D6B751FF8F9FC5A6444C1A7D346025AD4B67EA12439242FC02D228CE537AC9044F6D193E0592684FAA4D259DFB00F5F98DCA9FAE4C0D5F0427C6936E501148C56EAD1817A81DA30989D0D9C85BF8D9972FFE67AE3DEB2A8959D63B3C3E7737A1851EDC8B313D75AA7838C6F7750280FFA6321CC9228ACC596431D72AC0302582CA56C6172599F30D0CA04E71F3FD7A03D467E37A8320CC0FE3AC72099CEF7C4265F7F18E2980168DACF9C058E39EC9FFE1EEBDCEA5F78D63BB18BF054465179401346D4CF8927580B9E0370B2D27E4C6BD4687CF0D4348B04BECE8424A42B2CECC668DF9809F580BBB3F3D59BFD96DC8C2E57EF5D2989D6DA54C04B15F85EFF639253DA3301FB6E6F92264FE48968C2C2CA6D40C54C327E0673BF769CF116DFD70CE374BC447AA1B121827E5BA510E387974B19B050D9909185A514BCD8CD374EFE2089290D3DF46D088D74F556A8E5F36B08AB17E54143B6FC374BEDD6FF88AE74E71C72297A31E13D1F668DDB455DF00DC91DBBDB2E96ACDB811ADF7E4C1C460D8FF1FB03BCF95EC489446A8DFC5D2220E58CC298FBB7A9B8EB33B61F6461D77CEBF9C36BBA32B34998B7B9B7950E7E98857371003F40279FC2623F716B808912651E55A04F9418989047331C454D2AB04FAA192938209261029FB3C070FA056D2AD52BF9C7A0535FE2868888BA55CB9389E358CEEC68D7A0E5505FF0DE4263C6E47406EEE83E8C797BF58EF49F2F8BB4EB3656A2636A5EC604A4990001190A8A7965A36BBB41019EE19C8EB45C10173B513F617B9688D7102ED82E60DDCD080233A7B3B43B641A3282C4AF6D3F01BE30DD78AA184B9D565F7B1F927EDE214E363A18547263412EBE35E939942C4B5EFE81E439B325902EDD4D2AC06340296D00DD5F0908F5C8AD88049D88282D0F2DEC28D133E1D4736869C352A7CD87D8A56687CC25D5517A62F0CA5A023E8709F181A0D96F1154B3D7517EC5B076B7C59DE90A223B96AF93F94B11EA0EB08A280379BE028DC494C296BC46659CF9C26A3F8BBB47E063AA4EBCBC9873CCA2866865CF45076E6E642B8E3BF9F4A3F9F057DCE71D4D5F3B621D8791CA5333398ADB31486D22F608E9A8745B9548EADDA654F1D4BC042DFF9B3C21B15AEBC37050864E4275D5C36F301D533552D119039242BCA25DFABB524C971821B2C0EEA602A4C02C6487DD113DA4DC5ADD7BBBC325CFC896C942682945A1BE921FF71E6D76FA1E3345589B53C549BD5056FA01BD688D0A9011497C0DFDEC20210BC7F8B713C46A100A396A9ABD9A2BB94E5455793BFA28E39E130645973C30FDCDE52F6C272576291F0130474DC2E3C30EAD54818E9F531A538028DD40FE01D993DFCFF82679DC3C66850528A173FBB534843AB540E21C7731C65044D697B42694A1654B3572FE321F61E98EA22171580F5DB90C997D0C9C7CF44D174E8D24F500832C158278CF62BBFC6DFC46AEE5DD3F8906A5770C3BB6CC3B731243974A76C0BCACD9EFE37E52CD9751894A68AE3596E0C0211AF7A94B37632C667AE5097F8B5992917210A515C3E48276A363A6F5696AFEF5B3919689CC8F21E077310FDFC5A58D6BD428B8FFC678299FD053E7C016EF3A154A41DE5FD3C3BC5070ED6EC8F16170C880F82EB0B7EDED047436E8FCD4E2290F450963133226D17D7BB99C71097978CEFE496032EC8C6E73B99B05A33C4F5373BB73CA93F7128A9818197E6FD2BD88451A4D8905214157C4259228DEB5F8B216FFB206E4EE1025D3E16987FB6064147D3E99CEED73112F62D513C8B6F19B582D0F6794B307E8AF97354573C758AA95AB0A926386E7D288D74F9C6B0E2C71EAEBB36422C2120511F5F3D2B308674AE355B1FA1E72DA55098AAE3C70CB1B85C902C103056E00EBB70D37F08FA4D90E860C74E841F4E99957B3097ABE602E65F07B8787DA172E8E9ABF9ACDCCDFF6FEE2F902082BDD49547EFD95B54C3B8F6C6D243D07F16819E03189F0A3F3E0D05B3AF3EC92CA08846FC909E809CE9C30F1F3AC6FECED9043245A00590CBBD83EFC41C9EE3CBD0E328426F821ECA32E0E84A8B64F200DFAA5F01B262F4E816A90AA33A2984AB8E269B8CCF61E65094FBB7D10E11F9E1022CD97F17011DA53455B24E4ECD0793486C1E6D4E3BEA94E6DC9C710CFFF30CCD48E43076D763957260D1ED4F7C41EFA0B7F78BFAB7A9274E932013E605246C36CA1FFA003A4B24DAED61D15327BCA1067ACE961E718DD5E57667F5F33411D17BE093A9D7C6675097FC551014545727BA3F19C5D5D23A0922B11C4BADBF285A17EE96C916238C1E1DE8A0D28FB79E72EAF5AC37710B4E6550CEECA2F22697DA18F858507CCB95BB7F25A0056FFA55EE9564782C6042686195BF56901D4ABB3398C557CD47D30EEB344B532E77566887693CFAE50CE8C0BBAA204465FF33456ECFBB1B4DE4F8D6E2F3E8A84E90410EE3A79ABB47D40F4691CEF37E0BDBE1BE386098181EE36051EFFEEB0F5898738E400D44ADA4B3348315E0BE88C4C43E8CF95CE8D56EEAEADE754A09F170D3ACC44DB101037E001DCFBE2C52DC32D040BC27C1A55C9EF5D65FE418F3B761284C461606ACC84D36B9A7A3C9353723BEEEC80CF75D84DA7B2533F844E81EB8835289487CC7EA4EB277A4BA4BD50B59953E3DF3EBB2BB69D7E148792DF55D429B2DAE9B40B00FB14A948F2797B7488EBBBEB4B11880F7D3062D3C0561D7F6FE715C3BA6BC703BAC33C29DD87EBB84C178BA09961F2C10D8CCA42BFC3977EA66D039FC24CBD2A7B3316EF37C0D0F98D3CB8D5E4708B4287FEE6B656F1E300260D5643E9AC323A7F0527A7B98174AFD3277D35D6EC63865BD4E816351B8492474116E2426A3298606039280AEB595293D18EEC671E1E139EFC7936CAE3056F9698BFE95568D050F281F17F2CD65B62B98BF36DE469474F440E27073613A121370C606D5729DDFA12C8C400D0364251D850D90804ABF000ACE57AB195F6EE24163E8C443C8AEB641AACABE70675ECF22A5B9DAB6DDF0078EC89F2354C27D296411041432AF390DC71CC6141B52C54FC778B5BCD31B55EDDEB62EE364983E97BBB65EE98863AFFD2310B482AFCC28A2FE9C7D8E3ED24D20FFAD1F5B0AADB344C77F89FB88BB2FDCD64A77203BC331FC23BF78E284ACE3016FF570E3AF32ACDD5BD5E7B59115950CE804C231AB1AB80276842FAF80A576C9A3148F527596252E2F9F76FD6B4C03EFCE924A4740EDED98B290FF138926811607CC553FFAD5ACE0FC24D7FA1D7F3701A8E0D7F614941C9FB9215389CC5EF6D3CAC193EB15798CB1FF2950E2E0EA96A6B9E672CC343A7FA9C28EB964EC60708D60D921BCA637AF0F0E19E127E0E563EEB30DB02F8FBF2848CEC8E351077A8294AD441049000D2A3BD101B691C2F1DF3741B8BE7DC57592C2D09C9F368010B4B3922A8A622887C37E959C9AC31DBE89C9EC9FFC26EFDD9C49362E3400E660928BDD7F67C6E45614ADFFB96622390AACC03F1186D18BD11333AF0348125A92EBB40370A32F5E383ED858F6720D43633A9A3E3559A0ACF5FCC326DF117AA495759FC12398B2E060F8C6DA823F3E58E1158B81AFEDE50B89F956D4F63619332928B4CDF5A16E0536FE7426518B1C50FBBEB4EF3830D77924BE1DB002BF2B0A9A8CD6FDF3BE7D7D1D7A3EB4E8CEFF8BEB9E2CEA9BCA74349D67413E7D05DEC014D1E6990062F0C4CF1E4720D45E23719D748D0C9BE3C3CA444E357F181E44EE841E35CB5207C3F993CF224A4A90EF5E3610254EEC4C2F2EAEFE041E1791518F93BE9080634AD5594B98C6D0161BAD23EF1403FEE6FF846D344BF0B42A65762804A33F00F12D769B3C58F123E14B4001CC631049F6E35013DF92AA50F89E71E78879A9B428341A738CA001E4233652802FC16AE2377C9C0B5650805205D31445EA0AC0F82A109E5F7C0758EBD5C737CF48D3D5D44816504D972CD2FBBF0AE566B8247F81E404D7DAB5A939AAE51375154A3125345C061CD479F8D7D9EB21C6ACD971F75D8430FAE557DE7A669C59E35DAC4E7686C53C34AF64A5AB7F6B5ADF48585417DBA3584D4552C241DEC336E5EBA84C4D295148B29FE824D3934F4D2A8EA2D27D29255988396A5C350421E2C2BD89B5D18155B20260DAED20E3DFF52F2E84E6D6CC2C040FA3D0B8726C63778A601CF95BCFD381FA520F95146292B8D854C5F057440833E78057D13FFFEEF4418E97986A064AC8DB74A001BCBF8B8E26CE9C68BACFCF4895C956666F92B5EADD27FF6FB032207FCD2100FE0DDEAAE8A860F89BDE341E59671BB0368B1C68B44B131139A44BB37EAB251A0339A79D358D73281325A594E2156E981C519419D925F0D6C8661F7C294D91F527454AE82EFF98344A6E39B2BB3E36431255E33DAA31B75E961FB306792510924C3E9B89150691BDDFB275B9128677DFEAFC89E6562FA245DEECEE2E788EFCD06C4BE744CA97693CC1AD7F0EE4C633D706AD278A46A8DBF2DAA0CCB69806912F8C081BF192ED7D17EC222392B6E84D6CD88FE66DB10B1EFB9CC7F3E4F3719338B8D6BBE47644009743829F288A194EB3F6F21FE7D7FF55F8FBFD1312AA603CBB0C011CEA377E6E2AD1541C5BF55AB73777BDC20DE77F701E7DF26728A44D881EC44E905608CEAFEDB670A261F2109DBFF79CE13E98A3519A9A86F3E01B7C3EBE2F01C657EE017F0740328B97392C6824FDF4D5820458F0DC9E999A4F878D09493D249D0B43268D44135C966B05AC8A69518BA5AA10423615DD3BD8B6E38D37D4E7ABAD0F8752A64736EB4D6656F6C3A6C6E1595AE0ADB31ADACFD6B4146F4496E739C4DC98835CE4C5E2F1FA899D4B896B02CE97822E90CABF5850321487D0C9DF07772031F1A438E9D63374373958DD9708C6BC38C3028C2C7DBC7B2A5A0CE8EBF87A72EA394FBC0046B62D60CFCC4256930BE65B22305C750B2A7483CBE0B3FC0824A011D274FCC289B8EEB9ADC5505426D8618369E0135FCA2FFF5456E480109952CFBBDA22758E14643AB48F11AB4F4EB475CEA238C6493166BF384B1DED53072D897E368C8BF8239DE53290766A4727CBBAB88691400E9FB9CD53442B91B5D421323A24571DBAB65B7EA7015775B6C8DE25247D0E7BF3DB7F2506B4384B32810000011111101101111011010011101100011110110111000010101010000010001111110111000110010011011000111000110011001010101100010111101001111001110000011000111011110010010111010000011001101010000010100100101010110011010000000100101101010011100000110101111000001100101000110110111011110011010100000111000000111010011101000110010011001000000011110000010111101111011000110001110010011011111011101010100101101111011100100011111110010101101011101110110000011000010000110001111101001011001001101001000101010010011101110101100011101111110100100110011101001110111100100010100000011110000100101001111101111111001100001010011011101111000010111011110001010000000100100100111110001101011010110001011101001100111011101101110111111001010101101001011011001011111001110000101001100011110110010100010001000100101011111100010011110011111100011001010111010000011100001000111010111101010010101011000010010111110111111001001101111001010010100010111000011111110101000111010100000010000111011000110000001101011011001100100100101000001111111000011001001000001000001100101001010100010110001001001101111011000010001011110010101100111111111100000101010011010011110101111110110101100010001001110010000101100101110010101110100100110000110110000001100000110001011011100001010110111000110011001010111010101101011011000101101111101101111101111011011000011100110001001100100111111010110011000111000101101111101000010001101011101001111010101000110111011001011111011100010110101101111110010010000111001010111000010111011110011110001011010000100101111100100100000011010000111110100100011100011001100011100000100011011101111011010101111110010010011010000010110001110001000011011111100010011101101011111110010101010010010111011111101101110111000011001101010100001110010110011100100011110000011001111111011001011011111110101010110001001011010110110011001110101011010011100000001011000101100100100100000101001001011101110011101111000011100101010001000000111010111000110111101011011100000011010011010011110101100110010111110110111000110011011001010101001100101010001010010010000000111010010101001111001100111100000001101101110011101001111101100011011000011001110010110101000010000000110111110110110101111011000100011110011111100010110111011001101111100001111010100101010110010000100011101111100110110111100100001000100011111001000010100000111001101001111011111111100100101111010101110011101100001011100111001001001100101101011110001010001011100000110011001010010010000100111100000011101010111110101110000110011011110001110001001000100000010101101011011100100111000010100110101010100100010110100010001100111110100000011000010010111111101101011101100110001110001101010110101010010011100000001001001000101010011011100000010011010110011100100001011011100001100110110111000110010011110011110110101001111110101010111110101101100001010000001011001011110110110000111000101111110100010010100101111000110101111100000010001010001000111011001100100100101001111011000100110000000100111011101111000111111010011110001101011101101001011101010100111101001011001110111100111010001010100000100101111111101010011110111101011110100000011111100011100100110100110001100110011010110010010101011000000100000111111001100010111010111111010011100100100011000111001000010011000010100100010100001001101100101000001110000111101110010101111001001110010000111011101101100011111110101110011101100111101100011110000101011010101010111011111010011111110100000010100111011011000100100001001010010111111000101101100100000111011110101110100011000101111011001001001100011100000001010000010101010001100001111011110000110101100011001101000000010001001101100001011010001011011001101010111100100100010110101101110001010100111011010001110010111110011010111111111110010001110000000010111100101100010010100110001000010100000011001100111010111101011001001110001111100101010000010011110101000011101100111110111100110010011110001100010000111010100101111101100100000011010000001010011010101110000001111010110001010011001100111101010110011110001110010011001000010000011110000001011010010100100000101111111011001100101101001111110101001000100000110111010101001001110101000001101000000010000011110001100010001101111001111010011000001000011111100100100110011011110101010111101011011110111100101010100001111100010111000111110100000100101010001100001011010111101100101101100111011111100101001100101000110101110010101001000001000110001101010000010111110011010000000011010000110011101101101011110000110110010001001100101110001111111100100001010000101101111010010011110110111100010101010100111000001101100100000110110010010100011101010011110101100001111000001001000000111011010000000011001100111010111111010101001100000010000101001111010100010011000100101100001001001100011101000001111011101001001111101010110Getting SignalSource with implementation Getting SignalConditioner with DataTypeAdapter implementation: , InputFilter implementation: , and Resampler implementation: with Acquisition Implementation: , Telemetry Decoder implementation: TelemetryDecoder_GPS.implementationTelemetryDecoder_1C.implementationAcquisition_GPS.implementationTelemetryDecoder_2S.implementation Galileo E1 B (I/NAV OS) channelsTracking_Galileo.implementationTelemetryDecoder_Galileo.implementationTelemetryDecoder_1B.implementationAcquisition_Galileo.implementation GALILEO E5a I (F/NAV OS) channelsTelemetryDecoder_5X.implementationasio.netdbasio.addrinfoasio.miscAlready openEnd of fileElement not foundasio.misc errorService not foundSocket type not supportedasio.addrinfo errorasio.netdb errorPass_ThroughNsr_File_Signal_SourceSpir_File_Signal_SourceRtlTcp_Signal_SourceUHD_Signal_SourceOsmosdr_Signal_SourceByte_To_ShortIbyte_To_CbyteIbyte_To_ComplexIshort_To_CshortIshort_To_ComplexFreq_Xlating_Fir_FilterBeamformer_FilterDirect_ResamplerGPS_L1_CA_PCPS_AcquisitionGPS_L1_CA_DLL_PLL_TrackingGalileo_E5a_DLL_PLL_TrackingGPS_L1_CA_Telemetry_DecoderGalileo_E1B_Telemetry_DecoderSBAS_L1_Telemetry_DecoderGalileo_E5a_Telemetry_DecoderGPS_L1_CA_ObservablesGalileo_E1B_ObservablesHybrid_ObservablesMixed_ObservablesGPS_L1_CA_PVTGALILEO_E1_PVTHybrid_PVTNull_Sink_Output_FilterFile_Output_FilterGPS_L2_M_PCPS_AcquisitionGPS_L2_M_DLL_PLL_TrackingGPS_L2_M_Telemetry_DecoderObservables.implementationPVT.implementationOutputFilter.implementationOutputFilter10110111000010000100001011101001SignalSourceSignalConditionerDataTypeAdapterInputFilterArray_Signal_ConditionerInstantiating Channel , Tracking Implementation: Acquisition_GPSTracking_GPSTelemetryDecoder_GPSAcquisition_1CTracking_1CTelemetryDecoder_1CAcquisition_2STracking_2STelemetryDecoder_2SAcquisition_GalileoTracking_GalileoTelemetryDecoder_GalileoAcquisition_1BTracking_1BTelemetryDecoder_1BAcquisition_5XTracking_5XTelemetryDecoder_5XGetting GPS L1 C/A channelsTracking_GPS.implementationTracking_1C.implementationAcquisition_1C.implementation GPS L2C (M) channelsTracking_2S.implementationAcquisition_2S.implementationTracking_1B.implementationAcquisition_1B.implementationTracking_5X.implementationAcquisition_5X.implementationboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?    v bH= :72' tS!2!' !!!lRG B7 4' & ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210i}N5boost12noncopyable_11noncopyableEp@}}N5boost6system14error_categoryE16GNSSBlockFactoryi`}p}}N5boost4asio5error6detail14netdb_categoryEp }}N5boost4asio5error6detail17addrinfo_categoryEp}}N5boost4asio5error6detail13misc_categoryE} RRRRRRR}RRRpRRRRP}RRRRRRR}PPconnected throttle to valveconnected valve to file sinkconnected file source to sink./example_capture.dat./my_capture.dat.samples.sampling_frequency.filename.item_type.repeat.dump.dump_filename.enable_throttle_controlgr_complexfloatishortibytefile_source(Total samples in the file= Processing file , which contains [bytes]Check failed: samples_ > 0 GNSS signal duration= [s]valve(file_sink(File source filename Samples Sampling frequency Item type Item size Repeat Dump Dump filename /usr/share/gnss-sdr/conf/, exiting the program./home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/file_signal_source.ccLeft block of a signal source should not be retrievedconnected file source to throttleconnected file source to valvedisconnected file source to throttledisconnected throttle to valvedisconnected valve to file sinkdisconnected file source to valvedisconnected file source to sink unrecognized item type. Using gr_complex.file_signal_source: Unable to open the samples file File does not contain enough samples to process.Total number samples to be processed= GNSS signal recorded time to be processed: The configuration file has not been found.Please create a configuration file based on the examples at the 'conf/' folder and then generate your own GNSS Software Defined Receiver by doing:$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.confThe receiver was configured to work with a file signal source but the specified file is unreachable by GNSS-SDR.Please modify your configuration fileand point SignalSource.filename to a valid raw data file. Then:Examples of configuration files available at:If defined, path to the file containing the signal samples (overrides the configuration file)boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)16FileSignalSourcep.}y0.}5R6R`ORORPOR#RP,R"R!RORPMb`?C??../data/my_capture.dat../data/my_capture_dump.datnsr_signal_source/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/nsr_file_signal_source.ccdisconnected file source to unpack_byte_disconnected unpack_byte_ to throttle_disconnected unpack_byte_ to valvedisconnected unpack_byte_ to throttledisconnected funpack_byte_ to sinkdisconnected unpack_byte_ to sink unrecognized item type. Using byte.If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)19NsrFileSignalSourcep9}y9}jRkRRRR`SR^RRRQRORP@intspir_signal_source/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/spir_file_signal_source.ccdisconnected file source to unpack_intspir_disconnected unpack_intspir_ to throttle_disconnected unpack_intspir_ to valvedisconnected unpack_intspir_ to throttledisconnected funpack_intspir_ to sinkdisconnected unpack_intspir_ to sink unrecognized item type. Using int.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)20SpirFileSignalSourcepD}yD}0R@RRRзRRRRRORP./data/signal_source.dat127.0.0.1.AGC_enabled.freq.gain.rf_gain.if_gain.address.port.flip_iqConnecting to AGC enabledAGC disabledSetting gain to Setting IF gain to samplesDumping output into file /home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.ccTrying to get signal source left block.connected rtl tcp source to valveconnected rtl tcp source to file sink unrecognized item type. Using short.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]const char* boost::exception_detail::get_diagnostic_information(const boost::exception&, const char*)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = rtl_tcp_signal_source_c; typename boost::detail::sp_member_access::type = rtl_tcp_signal_source_c*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21018RtlTcpSignalSourcepS}yS}RR@R`R0RRRRPRORPyAD@>Aboost::format_error: format generic failureboost::bad_format_string: format-string is ill-formedboost::too_few_args: format-string referred to more arguments than were passedboost::too_many_args: format-string referred to less arguments than were passed/usr/include/boost/format/alt_sstream_impl.hpp/usr/include/boost/optional/optional.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/osmosdr_signal_source.ccconnected osmosdr source to valveconnected osmosdr source to file sink/usr/include/boost/format/format_implementation.hppitem.pad_scheme_ & format_item_t::tabulationbound_.size()==0 || num_args_ == static_cast(bound_.size())/usr/include/boost/format/feed_args.hppi+(tmp_size-i)+(std::max)(d,(std::streamsize)0) == static_cast(w)res.size() == static_cast(w)/usr/include/boost/format/parsing.hppstatic_cast(cur_item) < items_.size() || cur_item==0/usr/include/boost/format/internals.hpp!(fmtstate_.flags_ &(std::ios_base::adjustfield ^std::ios_base::left))PLL Frequency tune error %f [Hz]...this->is_initialized()d>0vector::_M_fill_insertvector::_M_fill_insertcur_item == num_items.osmosdr_argsOsmoSdr arguments: Actual RX Rate: %f [SPS]...Actual RX Freq: %f [Hz]...Actual RX Gain: %f dB...0SSSSSSSSSSSSSpSSS`SSSSSSSSSSSSSPSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS@SSSSSSSSSSSSSS S<S S<S* S<S<S<S<S<S<S<S<S<S<S<S6 SR S<S<S<Sm S<S<S<S<S<S<S<S<S<S<S S S S S S<S S<S<S<S<S S S S<S<S6 SS S<S<S Sboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]const char* boost::exception_detail::get_diagnostic_information(const boost::exception&, const char*)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const double&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = osmosdr::source; typename boost::detail::sp_member_access::type = osmosdr::source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ir}N5boost16base_from_memberINS_10shared_ptrINS_2io18basic_altstringbufIcSt11char_traitsIcESaIcEEEEELi0EEEN5boost2io22basic_oaltstringstreamIcSt11char_traitsIcESaIcEE5No_OpEpps}0hN5boost2io12format_errorEps}Ps}N5boost2io17bad_format_stringEps}Ps}N5boost2io12too_few_argsEp0t}Ps}N5boost2io13too_many_argsE19OsmosdrSignalSourcepPt}ypt}@N5boost2io18basic_altstringbufIcSt11char_traitsIcESaIcEEEPf@u}s} \yN5boost16exception_detail19error_info_injectorINS_2io17bad_format_stringEEEPfv}u}P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_2io17bad_format_stringEEEEEPfv}s} \yN5boost16exception_detail19error_info_injectorINS_2io12too_few_argsEEEPfw}`v}P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_2io12too_few_argsEEEEEPf@x}t} \yN5boost16exception_detail19error_info_injectorINS_2io13too_many_argsEEEPfy}w}P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_2io13too_many_argsEEEEEPfy}@r}hN5boost2io22basic_oaltstringstreamIcSt11char_traitsIcESaIcEEEpz}\yN5boost6detail18sp_counted_impl_pdIPNS_2io18basic_altstringbufIcSt11char_traitsIcESaIcEEENS2_22basic_oaltstringstreamIcS5_S6_E5No_OpEEEPs} R0RRs}PR`RRs}RRRt}RRRt}`SSoAAPRRzA|A mARA0RA Rpt} R RRRRPRRRRORPu}SSRu} SSX}}}}@u}SSRSSu}S@Su}SSSPS`v}SSR`v}S0S~}}@ w}0S@SRS0R w}pSS w}SSSSw}pSPSRw}SS}H}@x}SSRSPRx}0SSx}S R@SShh}}}@}`y}S S`y}SPSy} RR0RcNR@R/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/uhd_signal_source.ccconnected usrp source to valve RF Channel vector::_M_range_check: __n (which is %zu) >= this->size() (which is %zu)connected valve to file sink RF Channel connected usrp source to file sink RF Channel unrecognized item type. Using cshort.Sampling Rate for the USRP device: %f [sps]...Actual USRP center freq.: %f [Hz]...Actual USRP center freq. set to: %f [Hz]...Actual daughterboard gain set to: %f dB...Setting RF bandpass filter bandwidth to: %f [Hz]...UHD source disconnectedvector::_M_insert_aux.device_addressaddr.subdeviceinternal.clock_source.IF_bandwidth_hzcbytesc8sc16fc32UHD RF CHANNEL # SETTINGSlo_lockedCheck for front-end %s ...LockedUNLOCKED!RF_channel Send STOP signal after boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const std::basic_string&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::uhd::usrp_source; typename boost::detail::sp_member_access::type = gr::uhd::usrp_source*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = double&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const double&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21015UhdSignalSourcep@}y`}]S_SS SSSSYSSSPQSORPRSNAI@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_source; typename boost::detail::sp_member_access::type = gr::blocks::file_source*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)25TwoBitCpxFileSignalSourcepЧ}y}SSSSSPSpSSSORPNothing to connect internally Unknown item type conversion../data/input_filter.datbandpassrole .input_item_type.output_item_type.taps_item_type.number_of_taps.number_of_bands.band_begin_end.ampl.filter_type.grid_densityvector::reserveI input_filter(Q input_filter(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/fir_filter.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::fir_filter_fff; typename boost::detail::sp_member_access::type = gr::filter::fir_filter_fff*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::fir_filter_ccf; typename boost::detail::sp_member_access::type = gr::filter::fir_filter_ccf*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)?????333333??9FirFilterp!}y0}0)T*T[T[T[TS@T`SpSORP?.IF.decimation_factor Unknown input filter input/output item type conversion/home/carles/package/gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::freq_xlating_fir_filter_scf; typename boost::detail::sp_member_access::type = gr::filter::freq_xlating_fir_filter_scf*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::freq_xlating_fir_filter_fcf; typename boost::detail::sp_member_access::type = gr::filter::freq_xlating_fir_filter_fcf*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::filter::freq_xlating_fir_filter_ccf; typename boost::detail::sp_member_access::type = gr::filter::freq_xlating_fir_filter_ccf*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)?????333333??20FreqXlatingFirFilterp}yм}T0T`TTPTeTsT``TbTORPnothing to connect internallydump_ is resampler(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/beamformer_filter.ccconnected beamformer output to file sink unrecognized item type for beamformerboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)16BeamformerFilterp}y} TT T@TTT`T@T`TORP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc unknown acquisition item typeUnknown function operating on type %1%Cause unknown: error caused by bad argument with value %1%log1p(x) requires x > -1, but got x = %1%.The scale parameter "lambda" must be > 0, but was: %1%.boost::math::exponential_distribution<%1%>::exponential_distributionProbability argument is %1%, but must be >= 0 and <= 1 !boost::math::quantile(const exponential_distribution<%1%>&, %1%)GNSS-SDR.internal_fs_hz.ifreq.doppler_max.coherent_integration_time_ms.bit_transition_flag.max_dwellsstream_to_vector(acquisition(Cause unknownError in function Overflow Errorlog1p<%1%>(%1%).pfa Threshold = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210p }y20AcquisitionInterface22GpsL1CaPcpsAcquisitionp@}}Pf} \yN5boost16exception_detail19error_info_injectorISt14overflow_errorEEPf}}P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt14overflow_errorEEEEPf@}e \yN5boost16exception_detail19error_info_injectorISt12domain_errorEEPf}}P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt12domain_errorEEEE`} T T`TTPTT`T0TTORPTTT0TPTpTоTTTпT}TToA}TT}H}8 }T0ToATT }@TpT }TTPTT}TT0A}T T}}8}`TT0ATT}TT}TTTT@@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_multithread_acquisition.ccAcquisition.bit_transition_flagboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_multithread_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_multithread_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21033GpsL1CaPcpsMultithreadAcquisitionp}}0}UpU$U $U#UUU U UORP U U U UP U U UP U U@U/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc.doppler_minboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_assisted_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_assisted_acquisition_cc*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21030GpsL1CaPcpsAssistedAcquisitionp~}0~&U'UP2Up2U@2Up$U$U$U$UORP&U`%U%U%U%U%U@&Up&U &U&U/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_fine_doppler_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_fine_doppler_cc*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21033GpsL1CaPcpsAcquisitionFineDopplerp~}0~ 5U5U@U@U@U2U2U2U3UORPP4U3U3U3U4U04U4U4Up4U5U/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc.tong_init_val.tong_max_val Pfa = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_tong_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_tong_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21026GpsL1CaPcpsTongAcquisitionp@+~}`+~FUGUpZUZU`ZUDUEUAU@AUORPBUAUVU0BUpBUBUAUpCU0CU`DU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.ccQuickSync Algorithm requires a coherent_integration_time Coherent_integration_time of .folding_factor multiple of ms, Value entered ms ms will be used instead., Vector Length: , Samples per ms: , Folding factor: , Sampled ms: , Code Length: stream_to_vector_quicksync(boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_quicksync_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_quicksync_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031GpsL1CaPcpsQuickSyncAcquisitionp@D~}pD~`UpaUxU0xUxU^U_UZU [UORP\U[UtU\UP\U\U[UP]U]U@^U/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int) v bH= :72' tS!2!' !!!lRG B7 4' & 21GpsL2MPcpsAcquisitionpZ~}Z~UUUUpU|UUzUxUORPyUyUU yU@yU`yUyUyUyU0zU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cccoherent_integration_time should be multiple of Galileo code length (4 ms). coherent_integration_time = ../data/acquisition.dat ms will be used..cbocboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   33GalileoE1PcpsAmbiguousAcquisitionpv~}v~UUU UU0U UU0UORPUUU U`UUU`U U`U@o@?/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_cccwsr_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_cccwsr_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   39GalileoE1PcpsCccwsrAmbiguousAcquisitionp~}І~UUUUUUUpUUORP`U`UUUU U0UUUU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.ccacquisition_quicksync(boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_quicksync_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_quicksync_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   42GalileoE1PcpsQuickSyncAmbiguousAcquisitionp ~}P~0UU U@UUPU@UUPUORPUUU@UUUU@U@UU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = pcps_tong_acquisition_cc; typename boost::detail::sp_member_access::type = pcps_tong_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   37GalileoE1PcpsTongAmbiguousAcquisitionp`~}~UUVVpVUUUUORPUUVUU@UPU VUU/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_pcps_8ms_acquisition_cc; typename boost::detail::sp_member_access::type = galileo_pcps_8ms_acquisition_cc*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::stream_to_vector; typename boost::detail::sp_member_access::type = gr::blocks::stream_to_vector*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   36GalileoE1Pcps8msAmbiguousAcquisitionp~}~VV`0V0VP0V0V VV0VORPVV,V V`VVV'V V`V/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.ccCoherent integration time should be 3 ms or less. Changing to 3ms Too high coherent integration time. Changing to 3msZero padding activated. Changing to 1ms code + 1ms zero padding Zero padding activated. Changing to 1ms code + 1ms zero paddingbasic_string::at: __n (which is %zu) >= this->size() (which is %zu).CAF_window_hz.Zero_paddingboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const boost::io::detail::group1 >&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format::string_type boost::basic_format::str() const [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]void boost::io::detail::put(T, const boost::io::detail::format_item&, typename boost::basic_format::string_type&, typename boost::basic_format::internal_streambuf_t&, boost::io::detail::locale_t*) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; T = const char* const&; typename boost::basic_format::string_type = std::basic_string; typename boost::basic_format::internal_streambuf_t = boost::io::basic_altstringbuf, std::allocator >; boost::io::detail::locale_t = std::locale]boost::basic_format& boost::basic_format::clear() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]void boost::io::detail::format_item::compute_states() [with Ch = char; Tr = std::char_traits; Alloc = std::allocator]boost::optional::reference_const_type boost::optional::get() const [with T = std::locale; boost::optional::reference_const_type = const std::locale&]boost::basic_format& boost::basic_format::parse(const string_type&) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::basic_format::string_type = std::basic_string]boost::io::basic_altstringbuf::pos_type boost::io::basic_altstringbuf::seekpos(boost::io::basic_altstringbuf::pos_type, std::ios_base::openmode) [with Ch = char; Tr = std::char_traits; Alloc = std::allocator; boost::io::basic_altstringbuf::pos_type = std::fpos<__mbstate_t>; std::ios_base::openmode = std::_Ios_Openmode]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e5a_noncoherentIQ_acquisition_caf_cc; typename boost::detail::sp_member_access::type = galileo_e5a_noncoherentIQ_acquisition_caf_cc*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ 37GalileoE5aNoncoherentIQAcquisitionCafp@~}p~08V 9VNV0NVNV0V0V0V1VORP2V1VJV2V@2V2V1V@3V3V5VcA@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc.if.pll_bw_hz.dll_bw_hz.early_late_space_chips.very_early_late_space_chips./track_ch unknown tracking item type.tracking(boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1_dll_pll_veml_tracking_cc; typename boost::detail::sp_member_access::type = galileo_e1_dll_pll_veml_tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210py17TrackingInterface27GalileoE1DllPllVemlTrackingp0PV@QV\V\V\VNVNVNVNVORP@PVPV`PVPV@333333?333333?/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_volk_e1_dll_pll_veml_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_volk_e1_dll_pll_veml_tracking_cc; typename boost::detail::sp_member_access::type = galileo_volk_e1_dll_pll_veml_tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031GalileoVolkE1DllPllVemlTrackingp Pp_V_VpkVkV`kV0]V@]VP]Vp]VORP^VP_V_V0_V.port_ch0/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Galileo_E1_Tcp_Connector_Tracking_cc; typename boost::detail::sp_member_access::type = Galileo_E1_Tcp_Connector_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21029GalileoE1TcpConnectorTrackingp @ nVnVzVzVzVkVkVlV lVORPmVnVmVmV/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_fll_pll_tracking.cc.order.fll_bw_hzboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024GpsL1CaDllFllPllTrackingp((`|V|VVVV {V0{V@{V`{VORP{V@|V|V |VY@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_optim_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21026GpsL1CaDllPllOptimTrackingp3 3ЊVPVPVpV@V`VpVVVORPPVVpVV/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Dll_Pll_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Dll_Pll_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21021GpsL1CaDllPllTrackingp@=`=0VVVУVVVЖVVVORPVVЗVV/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Gps_L1_Ca_Tcp_Connector_Tracking_cc; typename boost::detail::sp_member_access::type = Gps_L1_Ca_Tcp_Connector_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21027GpsL1CaTcpConnectorTrackingpGGVVVVpV V0V@V`VORPVpV0VPV.pll_bw_init_hz.dll_bw_init_hz.ti_ms/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = Galileo_E5a_Dll_Pll_Tracking_cc; typename boost::detail::sp_member_access::type = Galileo_E5a_Dll_Pll_Tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024GalileoE5aDllPllTrackingpTUVVVVVVVV0VORPVpV0VPV@4@gps_l2_m_dll_pll_tracking/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l2_m_dll_pll_tracking_cc; typename boost::detail::sp_member_access::type = gps_l2_m_dll_pll_tracking_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int) v bH= :72' tS!2!' !!!lRG B7 4' & 20GpsL2MDllPllTrackingp]^pVVVVVVV V@VORPVPVV0Vis_hier_in is_hier_out is_hier pcps_acquisition_cccall to empty boost::functionChannel: ,sample stamp: , threshold: , doppler_max: , doppler_step: ../data/test_statistics__sat__doppler_positive acquisitionsample_stamp test statistics value test statistics threshold code phase doppler magnitude input signal power negative acquisition/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.ccState can only be set to 0 or 1 , doing acquisition of satellite: boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210pPi@N5boost17bad_function_callE19pcps_acquisition_ccppiqPfj0i \yN5boost16exception_detail19error_info_injectorINS_17bad_function_callEEEPfjiP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEEEp@k\yN5boost6detail17sp_counted_impl_pI19pcps_acquisition_ccEE0iPV`VoAiVVxAVV0VVVVVV`A0lA0VA`VA@tAmA@AiVVoAi0VVmm8`j@VVoAVPV`jV0V`jV0VV@V kV@V@VcN V0V/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.ccpcps_multithread_acquisition_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()boost::condition_variable::condition_variable()boost::mutex::~mutex()boost::condition_variable::~condition_variable()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031pcps_multithread_acquisition_ccpwqpx\yN5boost6detail17sp_counted_impl_pI31pcps_multithread_acquisition_ccEEpxqN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv31pcps_multithread_acquisition_ccEENS2_5list1INS2_5valueIPS6_EEEEEEEEp@y\yN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv31pcps_multithread_acquisition_ccEENS3_5list1INS3_5valueIPS7_EEEEEEEEEEwW0WxAVV0VVVVVV`A0lA0VAPWA@tAmA@AwW0WpWcNWWPx@WPWW@OypW WWcNWWpcps_assisted_acquisition_cc (Doppler max,Doppler min)=(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.ccAcq assist ENABLED for GPS SV Acq assist DISABLED for GPS SV H=W=W=W>WH>W7W:Wboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21028pcps_assisted_acquisition_ccpqp\yN5boost6detail17sp_counted_impl_pI28pcps_assisted_acquisition_ccEE W0"WxAVV0VVVVVV`A0lA0VWp7WA@tAmA@A0?W@?WP?WcN ?W0?W@pcps_acquisition_fine_doppler_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.ccAbs(Grid Doppler - FFT Doppler)=Error estimating fine frequency DopplerPerforming fine Doppler estimation(_WP_W_W_WYW\Wboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21032pcps_acquisition_fine_doppler_ccpqp@\yN5boost6detail17sp_counted_impl_pI32pcps_acquisition_fine_doppler_ccEEGWPIWxAVV0VVVVVV`A0lA0V?WPYWA@tAmA@A`W`W`WcN`W`W?pcps_tong_acquisition_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024pcps_tong_acquisition_ccpqp \yN5boost6detail17sp_counted_impl_pI24pcps_tong_acquisition_ccEEЛaWcWxAVV0VVVVVV`A0lA0VAnWA@tAmA@A|W}W }WcN|W}Wpcps_cccwsr_acquisition_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21026pcps_cccwsr_acquisition_ccppqp\yN5boost6detail17sp_counted_impl_pI26pcps_cccwsr_acquisition_ccEE~W@WxAVV0VVVVVV`A0lA0VAWA@tAmA@AW@WPWcN W0Wpcps_quicksync_acquisition_cc ,folding factor: , Signal Size: folding factor magnitude folded possible delay corr output/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc ,algorithm: pcps_quicksync_acquisitionpossible delay correlation outputboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21029pcps_quicksync_acquisition_ccpqp\yN5boost6detail17sp_counted_impl_pI29pcps_quicksync_acquisition_ccEEWМWxAVV0VVVVVV`A0lA0VA WA@tAmA@ApWWWcNWWgalileo_pcps_8ms_acquisition_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031galileo_pcps_8ms_acquisition_ccpqp\yN5boost6detail17sp_counted_impl_pI31galileo_pcps_8ms_acquisition_ccEEWWxAVV0VVVVVV`A0lA0VApWA@tAmA@AнPWWWcN`WpW_CAF.datgalileo_e5a_noncoherentIQ_acquisition_caf_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc../data/test_statistics_E5a_sat_W8WWWWboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21044galileo_e5a_noncoherentIQ_acquisition_caf_ccpqp\yN5boost6detail17sp_counted_impl_pI44galileo_e5a_noncoherentIQ_acquisition_caf_ccEE0WPWxAVV0VVVVVV`A0lA0VA`WA@tAmA@APpXXXcNXX/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.ccStarting tracking of satellite PULL-IN Code Phase [samples]=Exception writing trk dump file galileo_e1_dll_pll_veml_tracking_ccTracking dump enabled on channel Exception opening trk dump file Tracking start on channel for satellite PULL-IN Doppler [Hz]=Loss of lock in channel Current input signal time = : Satellite , Doppler= [Hz] CN0 = [dB-Hz]Tracking Channel set to boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   35galileo_e1_dll_pll_veml_tracking_ccpqp\yN5boost6detail17sp_counted_impl_pI35galileo_e1_dll_pll_veml_tracking_ccEE0X XxAVV0VVVVVV`A0lA0VX`XA@tAmA@AP.X@.XP/XcN .X0.X@08/A-DT!@Mbp?@Ao;/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_volk_e1_dll_pll_veml_tracking_cc.ccgalileo_volk_e1_dll_pll_veml_tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   40galileo_volk_e1_dll_pll_veml_tracking_ccpqp@\yN5boost6detail17sp_counted_impl_pI40galileo_volk_e1_dll_pll_veml_tracking_ccEE8X;XxAVV0VVVVVV`A0lA0V4X@XA@tAmA@A0aX`aXpaXcN@aXPaXE@, CN0 = /home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.ccGalileo_E1_Tcp_Connector_Tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   36Galileo_E1_Tcp_Connector_Tracking_ccp@qp\yN5boost6detail17sp_counted_impl_pI36Galileo_E1_Tcp_Connector_Tracking_ccEEp`fXhXxAVV0VVVVVV`A0lA0VaX mXA@tAmA@AX@XPXcN X0X/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc Code Phase correction [samples]= PULL-IN Code Phase [samples]= Detected NaN samples at sample number Gps_L1_Ca_Dll_Fll_Pll_Tracking_ccPULL-IN Doppler [Hz]= GLONASSCompassboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21033Gps_L1_Ca_Dll_Fll_Pll_Tracking_ccpqp\yN5boost6detail17sp_counted_impl_pI33Gps_L1_Ca_Dll_Fll_Pll_Tracking_ccEE0XXxAVV0VVVVVV`A0lA0VXXA@tAmA@APX X0XcNXX@MbP?9@333333?o:/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_optim_tracking_cc.ccNumber of samples between Acquisition and Tracking =Gps_L1_Ca_Dll_Pll_Tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21035Gps_L1_Ca_Dll_Pll_Optim_Tracking_ccpqp \yN5boost6detail17sp_counted_impl_pI35Gps_L1_Ca_Dll_Pll_Optim_Tracking_ccEEXXxAVV0VVVVVV`A0lA0VXXA@tAmA@A XPX`XcN0X@XD/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.ccGPS L1 C/A Tracking CH boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21029Gps_L1_Ca_Dll_Pll_Tracking_ccpqp@\yN5boost6detail17sp_counted_impl_pI29Gps_L1_Ca_Dll_Pll_Tracking_ccEEXXxAVV0VVVVVV`A0lA0VXXA@tAmA@AYY YcNYYacq_trk_diff_samples=/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.ccGps_L1_Ca_Tcp_Connector_Tracking_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21035Gps_L1_Ca_Tcp_Connector_Tracking_ccpqp\yN5boost6detail17sp_counted_impl_pI35Gps_L1_Ca_Tcp_Connector_Tracking_ccEE0YYxAVV0VVVVVV`A0lA0V`Y YA@tAmA@APDYDYDYcNDYDY`!@3lgf>/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.ccSecondary code delay couldn't be resolved.Galileo_E5a_Dll_Pll_Tracking_cc samples_offset=Secondary code locked.Galileo E5 Tracking CH [dB-Hz] [Hz]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?     ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21031Galileo_E5a_Dll_Pll_Tracking_ccp.qp@/\yN5boost6detail17sp_counted_impl_pI31Galileo_E5a_Dll_Pll_Tracking_ccEE.0NYPPYxAVV0VVVVVV`A0lA0VEYVYA@tAmA@A.`YYYcNpYẎA(-DT!@KFI@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc acq_trk_shif_correction_samples= d_current_prn_length_samples= whith Doppler= acq_to_trk_delay_samples= d_acq_code_phase_samples=GPS L2C M Tracking CH gps_l2_m_dll_pll_tracking_ccd_vector_lengthboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&) v bH= :72' tS!2!' !!!lRG B7 4' & 28gps_l2_m_dll_pll_tracking_ccp 8qp8\yN5boost6detail17sp_counted_impl_pI28gps_l2_m_dll_pll_tracking_ccEE@8YYxAVV0VVVVVV`A0lA0VY YA@tAmA@A`80Y`YpYcN@YPY JA08A{Gz? ף< v bH= :72' tS!2!' !!!lRG B7 4' & d k95 8R=Þ&2le.?RhEZcF#Hhţd$@['SǗ\xN!%7.r}/'T"[dJW{+{JvXH*Hl Lt^t,=ykkLeϞU 7=g?| [5@a&DZjNj-bbW=ͩCH}0ZR?9Sc+T w6M@>*2[boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::io_signature; typename boost::detail::sp_member_access::type = gr::io_signature*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)14gnss_sdr_valvepJmp`J\yN5boost6detail17sp_counted_impl_pI14gnss_sdr_valveEE JYYxAVV0VVVVVV`A0lA0V0A`AA@tA0AAY@J`YYpYcNYYXYxYYYYYY8YXYxYSYSYSYSYSYSYSYYYYYY8Yymga[MEykc[ME?=yM[=ky[E=S[MIG= 210[\]^4vzc[gSD?ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210;35.vector_sizekludge_copy(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/libs/pass_through.ccinput_item_type and output_item_type are different in a Pass_Through implementation! Taking , but item_size will supersede it. unrecognized item type. Using floatboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::copy; typename boost::detail::sp_member_access::type = gr::blocks::copy*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)12Pass_ThroughpZyZYPYPYpY@Y@Y Y0YpYORPymga[MEykc[ME?=yM[=ky[E=S[MIG= 210  ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ complex_byte_to_float_x2boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)24complex_byte_to_float_x2pempe\yN5boost6detail17sp_counted_impl_pI24complex_byte_to_float_x2EEe@YPYxAVV0VVVVVV`A0lA0V0A`AA@tA0AAYeY0YYcNY Ybyte_x2_to_complex_byteboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)23byte_x2_to_complex_bytepkmpk\yN5boost6detail17sp_counted_impl_pI23byte_x2_to_complex_byteEEkYYxAVV0VVVVVV`A0lA0V0A`AA@tA0AApYk`YYpYcNYYcshort_to_float_x2boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)18cshort_to_float_x2pqmpq\yN5boost6detail17sp_counted_impl_pI18cshort_to_float_x2EEq0Y@YxAVV0VVVVVV`A0lA0V0A`AA@tA0AAYqY YYcNYYshort_x2_to_cshortboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)18short_x2_to_cshortpwmpw\yN5boost6detail17sp_counted_impl_pI18short_x2_to_cshortEEwYYxAVV0VVVVVV`A0lA0V0A`AA@tA0AA`YwPYY`YcNYYcomplex_float_to_complex_byteboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)29complex_float_to_complex_bytep}mp~\yN5boost6detail17sp_counted_impl_pI29complex_float_to_complex_byteEE}Y YxAVV0VVVVVV`A0lA0V0A`AA@tA0AAY}YYYcNYYdata_type_adapter_(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/byte_to_short.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::char_to_short; typename boost::detail::sp_member_access::type = gr::blocks::char_to_short*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)11ByteToShortpyZZ Z Z ZPYY@YYORPlv_8sc_t/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = interleaved_byte_to_complex_byte; typename boost::detail::sp_member_access::type = interleaved_byte_to_complex_byte*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)12IbyteToCbytepFy` Z Z@Z`Z0Z@ Z Zp Z ZORP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::char_to_short; typename boost::detail::sp_member_access::type = gr::blocks::char_to_short*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::interleaved_short_to_complex; typename boost::detail::sp_member_access::type = gr::blocks::interleaved_short_to_complex*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)14IbyteToComplexpy0`ZPZ&Z0&Z&ZZZZZORP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = interleaved_short_to_complex_short; typename boost::detail::sp_member_access::type = interleaved_short_to_complex_short*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)14IshortToCshortpy0`)Z@*Z2Z2Z2ZP'Z(Z&Z&ZORP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_complex.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::interleaved_short_to_complex; typename boost::detail::sp_member_access::type = gr::blocks::interleaved_short_to_complex*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)15IshortToComplexpy06Z`7Z?Z@Z?Z04Z5Z 3Z`3ZORPinterleaved_byte_to_complex_byteboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)32interleaved_byte_to_complex_bytep@ep\yN5boost6detail17sp_counted_impl_pI32interleaved_byte_to_complex_byteEEpDZDZxAVV0VVVVVV`A0lA0VvA|AA@tA@wAPlAP@Z@DZDZPDZcNpDZDZinterleaved_short_to_complex_shortboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)34interleaved_short_to_complex_shortpep\yN5boost6detail17sp_counted_impl_pI34interleaved_short_to_complex_shortEE0IZ@IZxAVV0VVVVVV`A0lA0VvA|AA@tA@wAPlADZвHZ IZHZcNIZIZinput_filter -> resampler/home/carles/package/gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/signal_conditioner.ccSignal conditioner already connected internallydata_type_adapter -> input_filterSignal conditioner already disconnected internallytypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21017SignalConditionerpyIZKZ0YZPYZ YZKZ`RZ`IZIZORP/home/carles/package/gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/array_signal_conditioner.ccArray Signal conditioner already connected internallyArray input_filter -> resamplerArray Signal conditioner already disconnected internallytypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21022ArraySignalConditionerpy YZ\ZpdZdZ`dZ0\Z`ZYZYZORP./data/signal_conditioner.dat.sample_freq_in.sample_freq_outsample_freq_in /home/carles/package/gnss-sdr-0.0.6/src/algorithms/resampler/adapters/direct_resampler_conditioner.ccconnected resampler to file sink unrecognized item type for resamplerboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::block; typename boost::detail::sp_member_access::type = gr::block*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)26DirectResamplerConditionerpɀy0ɀgZhZPxZpxZ@xZeZgZdZeZORP@?Adirect_resampler_conditioner_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)31direct_resampler_conditioner_ccp@΀qp΀\yN5boost6detail17sp_counted_impl_pI31direct_resampler_conditioner_ccEEp΀xZxZxAVV0VVVVVV`A0lA0VxZyZA@tAmA@A΀`ZZpZcNZZAdirect_resampler_make_conditioner_csboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)31direct_resampler_conditioner_cspԀqpՀ\yN5boost6detail17sp_counted_impl_pI31direct_resampler_conditioner_csEEԀZZxAVV0VVVVVV`A0lA0VZZA@tAmA@AԀ@ZZPZcNpZZdirect_resampler_make_conditioner_cbboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)31direct_resampler_conditioner_cbpڀqp@ۀ\yN5boost6detail17sp_counted_impl_pI31direct_resampler_conditioner_cbEEڀZZxAVV0VVVVVV`A0lA0VІZ`ZA@tAmA@AۀZ`Z ZcN@ZPZ/usr/include/boost/statechart/detail/counted_base.hpp/usr/include/boost/statechart/detail/state_base.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/channel/adapters/channel.ccchannel already connected internallyChannel already disconnected internallyDefault case, invalid message./usr/include/boost/smart_ptr/intrusive_ptr.hpp/usr/include/boost/statechart/state_machine.hppbase_type::count_ > 0falsepass_through_ -> acquisitionpass_through_ -> trackingtracking -> telemetry_decoderStop channel currentStates_.size() > 1Acquisition_ Doppler_max = .doppler_step Doppler_step = .threshold.repeat_satellite satellite repeat = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::top_block; typename boost::detail::sp_member_access::type = gr::top_block*]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = ChannelFsm; InitialState = channel_idle_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]boost::mutex::~mutex()boost::condition_variable::condition_variable()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constboost::condition_variable::~condition_variable()boost::detail::interruption_checker::~interruption_checker()boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210Pf@}N5boost10statechart13state_machineI10ChannelFsm19channel_idle_fsm_S0SaIvENS0_25null_exception_translatorEEEp10ChannelFsm7Channelp yp@qN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv7ChannelEENS2_5list1INS2_5valueIPS6_EEEEEEEEp\yN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv7ChannelEENS3_5list1INS3_5valueIPS7_EEEEEEEEEEZZ0ZPZZpZ@Z ZZ0ZZpZZORP ZZZ@ZZ0ZpZZZ@OZ`ZZcNзZZ/usr/include/boost/cast.hppdynamic_cast(x) == xget_pointer( pContext ) != 0get_pointer( pContext_ ) != 0/usr/include/boost/statechart/simple_state.hppget_pointer( stt.pContext_ ) != 0get_pointer( pOutermostUnstableState_ ) == 0boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::msg_queue; typename boost::detail::sp_member_access::type = gr::msg_queue*]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)T& boost::intrusive_ptr::operator*() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]boost::statechart::detail::reaction_result boost::statechart::state_machine::send_event(const event_base_type&) [with MostDerived = ChannelFsm; InitialState = channel_idle_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::event_base_type = boost::statechart::event_base]T& boost::intrusive_ptr::operator*() const [with T = const boost::statechart::event_base]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const channel_waiting_fsm_S3*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]Target boost::polymorphic_downcast(Source*) [with Target = const channel_acquiring_fsm_S1*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = channel_acquiring_fsm_S1]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = const channel_tracking_fsm_S2*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = channel_tracking_fsm_S2]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_tracking_fsm_S2; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_tracking_fsm_S2; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const channel_idle_fsm_S0*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = channel_idle_fsm_S0]T& boost::intrusive_ptr::operator*() const [with T = channel_idle_fsm_S0]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = channel_idle_fsm_S0; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_idle_fsm_S0; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_idle_fsm_S0; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = channel_idle_fsm_S0*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_tracking_fsm_S2; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = channel_tracking_fsm_S2*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T& boost::intrusive_ptr::operator*() const [with T = channel_waiting_fsm_S3]Target boost::polymorphic_downcast(Source*) [with Target = ChannelFsm*; Source = boost::statechart::state_machine]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_waiting_fsm_S3; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = channel_waiting_fsm_S3; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_acquiring_fsm_S1; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = channel_acquiring_fsm_S1*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = ChannelFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = channel_waiting_fsm_S3; Context = ChannelFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]T* boost::intrusive_ptr::operator->() const [with T = channel_waiting_fsm_S3]Target boost::polymorphic_downcast(Source*) [with Target = channel_waiting_fsm_S3*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = ChannelFsm; InitialState = channel_idle_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_start_acquisition*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_valid_acquisition*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_failed_acquisition_repeat*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_failed_acquisition_no_repeat*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_channel_failed_tracking_standby*; Source = const boost::statechart::event]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]i@FN5boost10statechart6detail10count_baseILb1EEEiFN5boost10statechart6detail10count_baseILb0EEEPfG FN5boost10statechart6detail12counted_baseILb1EEEPfGpFN5boost10statechart6detail12counted_baseILb0EEEpHFN5boost10statechart6detail11rtti_policy14rtti_base_typeINS1_12counted_baseILb1EEEEEpH@GN5boost10statechart6detail11rtti_policy14rtti_base_typeINS1_12counted_baseILb0EEEEEPf IGN5boost10statechart10event_baseEPfI}`HN5boost10statechart6detail10state_baseISaIvENS1_11rtti_policyEEEp@JHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI28Ev_channel_start_acquisitionNS0_10event_baseEEEpKJN5boost10statechart5eventI28Ev_channel_start_acquisitionSaIvEEEp`KJ28Ev_channel_start_acquisitionpKHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI28Ev_channel_valid_acquisitionNS0_10event_baseEEEpLKN5boost10statechart5eventI28Ev_channel_valid_acquisitionSaIvEEEpL0L28Ev_channel_valid_acquisitionp@MHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI36Ev_channel_failed_acquisition_repeatNS0_10event_baseEEEpNMN5boost10statechart5eventI36Ev_channel_failed_acquisition_repeatSaIvEEEpNM36Ev_channel_failed_acquisition_repeatpOHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI39Ev_channel_failed_acquisition_no_repeatNS0_10event_baseEEEpONN5boost10statechart5eventI39Ev_channel_failed_acquisition_no_repeatSaIvEEEp@PO39Ev_channel_failed_acquisition_no_repeatpPHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI34Ev_channel_failed_tracking_standbyNS0_10event_baseEEEpQpPN5boost10statechart5eventI34Ev_channel_failed_tracking_standbySaIvEEEpR@Q34Ev_channel_failed_tracking_standbypR`IN5boost10statechart6detail10leaf_stateISaIvENS1_11rtti_policyEEEpS0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19channel_idle_fsm_S0NS1_10leaf_stateISaIvES2_EEEEpSRN5boost10statechart12simple_stateI19channel_idle_fsm_S010ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpTpSN5boost10statechart5stateI19channel_idle_fsm_S010ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpUpT19channel_idle_fsm_S0pV0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI24channel_acquiring_fsm_S1NS1_10leaf_stateISaIvES2_EEEEpVUN5boost10statechart12simple_stateI24channel_acquiring_fsm_S110ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpWVN5boost10statechart5stateI24channel_acquiring_fsm_S110ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpXW24channel_acquiring_fsm_S1pY0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI23channel_tracking_fsm_S2NS1_10leaf_stateISaIvES2_EEEEpYXN5boost10statechart12simple_stateI23channel_tracking_fsm_S210ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpZYN5boost10statechart5stateI23channel_tracking_fsm_S210ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp[Z23channel_tracking_fsm_S2p\0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI22channel_waiting_fsm_S3NS1_10leaf_stateISaIvES2_EEEEp\[N5boost10statechart12simple_stateI22channel_waiting_fsm_S310ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp]\N5boost10statechart5stateI22channel_waiting_fsm_S310ChannelFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp^]22channel_waiting_fsm_S3@KZZZLZ Z0ZPNZ@ZZPZ`ZZQZZZpSpZZ0ZZZ@ZpTpZ`ZPZZZ@ZpUpZZpZZZ@ZVZ`ZZZZ@ZWZ ZZZZ@ZpXZZZZZ@ZYZZZZZZZZZZZZZp[Z0Z@ZZZZ\ZZ`Z@ZZ`Z]ZZZ@ZZ`Zp^ZZZ@ZZ`Z./navigation.datvector length .vector_lengthtelemetry_decoder(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.ccglobal navigation message queue assigned to telemetry_decoder (boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l1_ca_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = gps_l1_ca_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210p my25TelemetryDecoderInterface23GpsL1CaTelemetryDecoderp@mm`mZ`ZZZZZ`ZpZZORPZZ@Zgps_l2_m_telemetry_decoder/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l2_m_telemetry_decoder.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l2_m_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = gps_l2_m_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210 v bH= :72' tS!2!' !!!lRG B7 4' & 22GpsL2MTelemetryDecoderp`ymy@[[p[[`[[[ [@[ORPP[p [[/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.ccGALILEO TELEMETRY DECODER: satellite set to boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1b_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = galileo_e1b_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   26GalileoE1BTelemetryDecoderp m@0[[[ [[[[[0[ORP[[p[/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.ccSBAS TELEMETRY DECODER: satellite set to boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = sbas_l1_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = sbas_l1_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)22SbasL1TelemetryDecoderpm [![-[0-[-[p [[[[ORP,[*[-[Galileo_E5A_Telemetry_Decoder/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e5a_telemetry_decoder_cc; typename boost::detail::sp_member_access::type = galileo_e5a_telemetry_decoder_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?     ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ 26GalileoE5aTelemetryDecoderpPmpP1[ 2[`>[>[P>[0[-[-[-[ORP@>[`;[>[/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.ccException writing observables dump file Setting decoder Finite State Machine to satellite Telemetry decoder dump enabled on channel Preamble detection for SAT Frame sync SAT with preamble start at Lost of frame sync SAT preamble_diff= Navigation Satellite set to Navigation channel set to telemetrygps_navigation_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = GpsL1CaSubframeFsm; InitialState = gps_subframe_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210Pf}N5boost10statechart13state_machineI18GpsL1CaSubframeFsm19gps_subframe_fsm_S0SaIvENS0_25null_exception_translatorEEEp18GpsL1CaSubframeFsm30gps_l1_ca_telemetry_decoder_ccpqp@\yN5boost6detail17sp_counted_impl_pI30gps_l1_ca_telemetry_decoder_ccEE0[[`][][][X[Z[xAVV0VVVVVV`A0lA0V>[P@[A@tAmA@AZ[Z[0^[cNZ[Z[@GPS L2C CNAV channel set to vector::_M_emplace_back_auxget_valid_frames(): msg_candidates.size()=Valid CNAV message found!gps_l2_m_telemetry_decoder_cc set to satellite /home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2_m_telemetry_decoder_cc.ccDiscarting this buffer, no CNAV frames detected CH GOOD L2C CNAV FRAME DETECTED! CH New GPS CNAV Ephemeris received for SV New GPS CNAV IONO model received for SV GPS L2C M TELEMETRY PROCESSING: satellite GPS L2C CNAV telemetry decoder in channel boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&) v bH= :72' tS!2!' !!!lRG B7 4' & 29gps_l2_m_telemetry_decoder_ccp@qp\yN5boost6detail17sp_counted_impl_pI29gps_l2_m_telemetry_decoder_ccEE`e[0g[xAVV0VVVVVV`A0lA0Vp^[r[A@tAmA@AЉ[[[cN[[(@/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.ccGalileo CRC correct on channel GPS_to_Galileo time conversion:Preamble detection for Galileo SAT Starting page decoder for Galileo SAT galileo_e1b_telemetry_decoder_ccInitializing GALILEO E1B TELEMETRY PROCESSING from satellite Galileo CRC error on channel Galileo almanac received!A0G=A1G=T0G=WN_0G_10=Current parameters:d_TOW_at_current_symbol=d_nav.WN_0=delta_t=delta_t = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   32galileo_e1b_telemetry_decoder_ccpqp\yN5boost6detail17sp_counted_impl_pI32galileo_e1b_telemetry_decoder_ccEE[[xAVV0VVVVVV`A0lA0VД[[A@tAmA@A0@[p[[cNP[`[P@u"Aforecast(): noutput_items=SBAS channel set to -> byte=get_symbols(): d_past_sample= samples size=smplp: smpl0: smpl1: d_corr_paired: d_corr_shifted: corr_diff: stand_by: d_aligned: sym: inverted normalget_frame_candidates(): d_buffer.size()= bits.size()=copy bits into working buffer ( bits)preamble detected! candidate=candidate : final crc remainder= Valid message found! Relbitoffset=Not a valid message. content=general_work(): output_items real size= ninput_items size= input_items real size= ninput_items[0]=message_sample_stamp= (sample_stamp= sample_alignment= symbol_alignment= relative_preamble_start= message_sample_offset=SBAS message type from PRN receivedsbas_l1_telemetry_decoder_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc ninput_items_required ninput_items_required.size()=zerropad_front_and_convert_to_bytes():zerropad_back_and_convert_to_bytes():SBAS L1 TELEMETRY PROCESSING: satellite SBAS telemetry decoder in channel boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)28sbas_l1_telemetry_decoder_ccṕqṕ\yN5boost6detail17sp_counted_impl_pI28sbas_l1_telemetry_decoder_ccEÉ0[[xAVV0VVVVVV`A0lA0V[P[A@tAmA@A0́P\\P\cN`\p\?/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.ccgalileo_e5a_telemetry_decoder_ccGALILEO E5A TELEMETRY PROCESSING: satellite boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?     ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ 32galileo_e5a_telemetry_decoder_ccp@ہqpہ\yN5boost6detail17sp_counted_impl_pI32galileo_e5a_telemetry_decoder_ccEEpہ\P\xAVV0VVVVVV`A0lA0V\*\A@tAmA@AہE\E\E\cNE\E\{Gz$@$@NAV Message: received subframe boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvoid boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)T& boost::intrusive_ptr::operator*() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]boost::statechart::detail::reaction_result boost::statechart::state_machine::send_event(const event_base_type&) [with MostDerived = GpsL1CaSubframeFsm; InitialState = gps_subframe_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::event_base_type = boost::statechart::event_base]T& boost::intrusive_ptr::operator*() const [with T = const boost::statechart::event_base]T* boost::intrusive_ptr::operator->() const [with T = boost::statechart::detail::leaf_state, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S11*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S1*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S1]T& boost::intrusive_ptr::operator*() const [with T = gps_subframe_fsm_S1]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = gps_subframe_fsm_S1; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S1; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S2*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S2]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S2; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S2; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S3*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S3]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S3; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S3; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S4*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S4]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S4; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S4; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S5*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S5]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S5; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S5; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S6*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S6]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S6; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S6; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S7*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S7]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S7; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S7; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S8*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S8]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S8; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S8; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S9*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S9]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S9; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S9; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S10*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S10]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S10; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S10; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]Target boost::polymorphic_downcast(Source*) [with Target = GpsL1CaSubframeFsm*; Source = boost::statechart::state_machine]static OtherContext& boost::statechart::simple_state::context_impl_other_context::context_impl(State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S11; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S11; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S10; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S10*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S9; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S9*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S8; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S8*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S7; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S7*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S6; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S6*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S5; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S5*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S4; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S4*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S3; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S3*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S2; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S2*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]Target boost::polymorphic_downcast(Source*) [with Target = const gps_subframe_fsm_S0*; Source = const boost::statechart::simple_state, (boost::statechart::history_mode)0u>]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S0]void boost::statechart::simple_state::set_context(const context_ptr_type&) [with MostDerived = gps_subframe_fsm_S0; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::context_ptr_type = boost::statechart::state_machine*]boost::statechart::simple_state::outermost_context_base_type& boost::statechart::simple_state::outermost_context_base() [with MostDerived = gps_subframe_fsm_S0; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; boost::statechart::simple_state::outermost_context_base_type = boost::statechart::state_machine]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S0; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S0*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S1; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S1*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]static const typename OtherContext::inner_context_ptr_type& boost::statechart::simple_state::context_ptr_impl_my_context::context_ptr_impl(const State&) [with OtherContext = GpsL1CaSubframeFsm; State = boost::statechart::simple_state, (boost::statechart::history_mode)0u>; MostDerived = gps_subframe_fsm_S11; Context = GpsL1CaSubframeFsm; InnerInitial = boost::mpl::list; boost::statechart::history_mode historyMode = (boost::statechart::history_mode)0u; typename OtherContext::inner_context_ptr_type = boost::statechart::state_machine*]T* boost::intrusive_ptr::operator->() const [with T = gps_subframe_fsm_S11]Target boost::polymorphic_downcast(Source*) [with Target = gps_subframe_fsm_S11*; Source = boost::statechart::simple_state, (boost::statechart::history_mode)0u>]void boost::statechart::state_machine::terminate_impl(boost::statechart::state_machine::state_base_type&, bool) [with MostDerived = GpsL1CaSubframeFsm; InitialState = gps_subframe_fsm_S0; Allocator = std::allocator; ExceptionTranslator = boost::statechart::null_exception_translator; boost::statechart::state_machine::state_base_type = boost::statechart::detail::state_base, boost::statechart::detail::rtti_policy>]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_gps_word_valid*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_gps_word_invalid*; Source = const boost::statechart::event]Target boost::polymorphic_downcast(Source*) [with Target = const Ev_gps_word_preamble*; Source = const boost::statechart::event]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = true]bool boost::statechart::detail::counted_base::release() const [with bool NeedsLocking = false]void boost::statechart::detail::intrusive_ptr_release(const boost::statechart::detail::state_base*) [with Allocator = std::allocator; RttiPolicy = boost::statechart::detail::rtti_policy]ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210pHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI17Ev_gps_word_validNS0_10event_baseEEEp`N5boost10statechart5eventI17Ev_gps_word_validSaIvEEEp017Ev_gps_word_validpHN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19Ev_gps_word_invalidNS0_10event_baseEEEpূN5boost10statechart5eventI19Ev_gps_word_invalidSaIvEEEpp19Ev_gps_word_invalidp@HN5boost10statechart6detail11rtti_policy17rtti_derived_typeI20Ev_gps_word_preambleNS0_10event_baseEEEpੂ N5boost10statechart5eventI20Ev_gps_word_preambleSaIvEEEp@20Ev_gps_word_preamblep0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S0NS1_10leaf_stateISaIvES2_EEEEp@`N5boost10statechart12simple_stateI19gps_subframe_fsm_S018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S0p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S1NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S1p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S2NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S218GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S218GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S2p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S3NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S318GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S318GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S3p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S4NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S418GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S418GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S4p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S5NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S518GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S518GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S5p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S6NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S618GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S618GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp19gps_subframe_fsm_S6p0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S7NS1_10leaf_stateISaIvES2_EEEEp@0N5boost10statechart12simple_stateI19gps_subframe_fsm_S718GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@N5boost10statechart5stateI19gps_subframe_fsm_S718GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp‚19gps_subframe_fsm_S7p‚0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S8NS1_10leaf_stateISaIvES2_EEEEp@Â0‚N5boost10statechart12simple_stateI19gps_subframe_fsm_S818GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@ÂN5boost10statechart5stateI19gps_subframe_fsm_S818GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpłĂ19gps_subframe_fsm_S8pł0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI19gps_subframe_fsm_S9NS1_10leaf_stateISaIvES2_EEEEp@Ƃ0łN5boost10statechart12simple_stateI19gps_subframe_fsm_S918GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@ǂłN5boost10statechart5stateI19gps_subframe_fsm_S918GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEpȂǂ19gps_subframe_fsm_S9pȂ0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI20gps_subframe_fsm_S10NS1_10leaf_stateISaIvES2_EEEEp@ɂ0ȂN5boost10statechart12simple_stateI20gps_subframe_fsm_S1018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@ʂȂN5boost10statechart5stateI20gps_subframe_fsm_S1018GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp˂ʂ20gps_subframe_fsm_S10p˂0RN5boost10statechart6detail11rtti_policy17rtti_derived_typeI20gps_subframe_fsm_S11NS1_10leaf_stateISaIvES2_EEEEp@̂0˂N5boost10statechart12simple_stateI20gps_subframe_fsm_S1118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp@͂˂N5boost10statechart5stateI20gps_subframe_fsm_S1118GpsL1CaSubframeFsmNS_3mpl4listIN4mpl_2naES7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_S7_EELNS0_12history_modeE0EEEp΂͂20gps_subframe_fsm_S11PW\X\ ^\ਂ@W\0X\]\ 0W\PX\^\ W\pX\@i\Р\Z\ W\_\pk\Р\Z\ W\c\pp\Р\Z\X\P]\j\@\Z\X\e\o\@\Z\W\\\h\Ѝ\Z\W\f\n\Ѝ\Z\W\p\\j\`\Z\W\@a\m\`\Z\W\d\\\`\Z\W\\\i\\Z\W\f\p\\Z\W\[\ k\\Z\W\`\n\\Z\W\`e\[\\Z\W\0[\h\\Z\W\ f\q\\Z\W\Z\i\\Z\W\ `\m\\Z\W\ c\[\\Z\‚W\PZ\h\0\Z\ĂW\e\ p\0\Z\łW\Y\0j\|\Z\ǂW\@d\o\|\Z\ȂpW\Y\Ph\y\Z\ʂpW\c\0o\y\Z\˂`W\X\0Y\\Z\͂`W\@g\PY\\Z\͂`W\g\pY\\Z\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/viterbi_decoder.ccdo_traceback(): traceback_length= destructor after copy, new refcount = do_tb_and_decode(): requested_decoding_length=decode_continuous(): nbits_requested=decoding length mismatch (continuous decoding): ?, copy, new refcount = assignment, new refcount = ~Prev(metric for (tx_sym=|ry_sym=(max_val at t=decoding_length_mismatch=overstep_length=@t= b= sm= d=indicator metric: decode_block(): LL=decoding length mismatch: .output_rate_ms./observables.dat.flag_averagingpseudorange(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/gps_l1_ca_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l1_ca_observables_cc; typename boost::detail::sp_member_access::type = gps_l1_ca_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210py20ObservablesInterface18GpsL1CaObservablesp\\`\\P\p\\\\ORP@\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/galileo_e1_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1_observables_cc; typename boost::detail::sp_member_access::type = galileo_e1_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   20GalileoE1Observablesp\\P\p\@\`\\\\ORP0\/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/hybrid_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = hybrid_observables_cc; typename boost::detail::sp_member_access::type = hybrid_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   17HybridObservablespPp\p\@\`\0\P\\\\ORP \/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/adapters/mixed_observables.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = mixed_observables_cc; typename boost::detail::sp_member_access::type = mixed_observables_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21016MixedObservablesp0\`\0]P] ]@\\\\ORP]gps_l1_ca_observables_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/gps_l1_ca_observables_cc.ccObservables dump enabled Log file: Exception opening observables dump file boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21024gps_l1_ca_observables_ccpqp\yN5boost6detail17sp_counted_impl_pI24gps_l1_ca_observables_ccEE]]xAVV0VVVVVV`A0lA0VA]A@tAmA@A]@]P]cN ]0]>?S3Q@ALAgalileo_e1_observables_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/galileo_e1_observables_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   25galileo_e1_observables_ccp(qp)\yN5boost6detail17sp_counted_impl_pI25galileo_e1_observables_ccEE( ]`]xAVV0VVVVVV`A0lA0VA0!]A@tAmA@A(p&]&]&]cN&]&]hybrid_observables_ccgnss_synchro set size=ref_PRN_rx_time_ms [ms] = tracking GNSS System has PRN start at= [ms], delta_rx_time_ms = [ms], travel_time = , pseudorange[m] = /home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.ccd_TOW_hybrid_reference [ms] = [ms], d_TOW_at_current_symbol = [ms], d_TOW_hybrid_at_current_symbol = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   21hybrid_observables_ccp6qp6\yN5boost6detail17sp_counted_impl_pI21hybrid_observables_ccEE6 )]`*]xAVV0VVVVVV`A0lA0VA 2]A@tAmA@A6p;];];]cN;];]mixed_observables_cc/home/carles/package/gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 21020mixed_observables_ccp@CqpC\yN5boost6detail17sp_counted_impl_pI20mixed_observables_ccEE`C>]@?]xAVV0VVVVVV`A0lA0VAF]A@tAmA@ACPK]K]K]cN`K]pK]./pvt.dat./nmea_pvt.nmea/dev/tty1.averaging_depth.display_rate_ms.flag_nmea_tty_port.nmea_dump_filename.nmea_dump_devnamepvt(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/adapters/gps_l1_ca_pvt.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gps_l1_ca_pvt_cc; typename boost::detail::sp_member_access::type = gps_l1_ca_pvt_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210p(Ry12PvtInterface10GpsL1CaPvtp7RRPRM]N][][][]`M]K]K]L]ORPp[]/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/adapters/galileo_e1_pvt.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = galileo_e1_pvt_cc; typename boost::detail::sp_member_access::type = galileo_e1_pvt_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   12GalileoE1Pvtp_R_^]^]k]k]k]]]\]\]0\]ORPk]/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/adapters/hybrid_pvt.ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = hybrid_pvt_cc; typename boost::detail::sp_member_access::type = hybrid_pvt_cc*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   9HybridPvtplRl@n]n]{]|]{]m]0l]@l]`l]ORP{]/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_time.h<> to gps time: time_stamp_sec=/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.ccException opening PVT dump file Day of month value is out of range 1..31Day of month is not valid for yearYear is out of valid range: 1400..10000Month number is out of range 1..12<> new time relation: i_gps_week=<> create RELATIVE time (invalid relation): time_stamp_sec=Relating an already related Sbas_Time object is not possibleSbas_Time object state undefinedSbas_Time object state not known gps_week= gps_sec=not-a-date-time+infinity-infinitygps_l1_ca_pvt_cc.kml_raw.dat_ls_pvt.datPVT dump enabled Log file: d_delta_sec= UTC is Lat = [deg], Long = [deg], Height= [m]Dilution of Precision at VDOP = TDOP = GDOP = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210p{hN5boost9gregorian16bad_day_of_monthEp{hN5boost9gregorian8bad_yearEp0|hN5boost9gregorian9bad_monthE16gps_l1_ca_pvt_ccpP|qPf}{ \yN5boost16exception_detail19error_info_injectorINS_9gregorian16bad_day_of_monthEEEPf}|P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian16bad_day_of_monthEEEEEp`~\yN5boost6detail17sp_counted_impl_pI16gps_l1_ca_pvt_ccEEPf{ \yN5boost16exception_detail19error_info_injectorINS_9gregorian8bad_yearEEEPf~P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian8bad_yearEEEEEPf| \yN5boost16exception_detail19error_info_injectorINS_9gregorian9bad_monthEEEPf@ P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEEpySt23_Sp_counted_ptr_inplaceI11Kml_PrinterSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEp@ySt23_Sp_counted_ptr_inplaceI12Nmea_PrinterSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEpySt23_Sp_counted_ptr_inplaceI16gps_l1_ca_ls_pvtSaIS0_ELN9__gnu_cxx12_Lock_policyE2EEp@ySt23_Sp_counted_ptr_inplaceI13Rinex_PrinterSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE{P]`]0A{ ]0]0A|]]0Ap|0~]p]xAVV0VVVVVV`A0lA0VA ]A@tAmA@A|]]0A|]0]؅H8`}е]]0A]]`}] ]`}]] ]0]0~]`]]cN@]P]~P]]0A~]з]Xȇ8`]]0A]]`ж]]`]]]] ]@]0A @]]80]@]0A]]p]]]]]]0]p]]]] ]]]Ш]]]]]]@] ]]]]]/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.ccgalileo_e1_pvt_ccboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   17galileo_e1_pvt_ccp@qp\yN5boost6detail17sp_counted_impl_pI17galileo_e1_pvt_ccEEpySt23_Sp_counted_ptr_inplaceI17galileo_e1_ls_pvtSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE`@]]xAVV0VVVVVV`A0lA0VA]A@tAmA@A^^`^cN^^^^^^ ^/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cchybrid_pvt_cc UTC using observations is Lat = observations is HDOP = boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   13hybrid_pvt_ccpqp`\yN5boost6detail17sp_counted_impl_pI13hybrid_pvt_ccEEpySt23_Sp_counted_ptr_inplaceI13hybrid_ls_pvtSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE ^P ^xAVV0VVVVVV`A0lA0VA^A@tAmA@A00.^p.^.^cNP.^`.^@.^.^.^.^.^: incompatible matrix dimensions: Mat::init(): requested size is too large; suggest to enable ARMA_64BIT_WORDinv(): matrix appears to be singulararma::memory::acquire(): out of memory/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.ccFailed to approximate h with desired precision. h-oldh= The computation of geodetic coordinates did not convergedeque::_M_range_check: __n (which is %zu)>= this->size() (which is %zu)Mat::init(): size is fixed and hence cannot be changedMat::init(): requested size is not compatible with column vector layoutMat::init(): requested size is not compatible with row vector layoutMat::init(): requested size is too largeMat::init(): mismatch between size of auxiliary memory and requested sizePVT lib dump enabled Log file: Exception opening PVT lib dump file %s: __pos (which is %zu) > this->size() (which is %zu)Mat::init(): inconsistent number of columns in given stringsolve(): number of rows in the given objects must be the sameinv(): given matrix is not squareMat::operator(): index out of boundsMat::col(): index out of boundsCol::subvec(): indices out of bounds or incorrectly usedtrace(): matrix must be square sizedException writing PVT LS dump file Mat::submat(): indices out of bounds or incorrectly used and error: solve(): solution not foundbasic_string::substr[matrix size: ] matrix multiplication0.0 0.0 0.0 0.0subtractionaddition(new)ECEF satellite SV ID= X= [m] Y= [m] Z= [m] PR_obs=No ephemeris data for SV (new)PVT: valid observations=satpos=(new)Position at TOW= in ECEF (X,Y,Z) = (new)Position at Apply tropospheric correctionbooltropo^H^@^8^0^(^ ^^^^^^^^^؈^Ј^:^8;^0;^(;^ ;^;^;^;^;^:^:^:^:^:^:^:^:^mC^(F^ F^F^F^F^F^E^E^E^E^E^E^E^E^E^E^8N8N8N8N8N8N8N8N8N8N8N8N8N8Nw8No8Ng8Nk^t^t^t^t^t^t^t^t^wt^ot^gt^_t^Wt^Ot^Gt^?t^j^;u^3u^+u^#u^u^u^ u^u^t^t^t^t^t^t^t^t^boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210+N+N+N+N+N+N|+Nr+Nh+N^+NT+NJ+N@+N6+N,+N"+N+N ^^^^^^^x^p^h^`^X^P^H^@^8^0^;Ns[ק?mtr@DRFߑ?V@fffffq@@m@@әe4@*:H?әe@y`*BY?9;|F>n#@e'֌@333333@333333?-@6$I?z8"@>yX5?@cG_>@JxޱAPr@@j@O/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/galileo_e1_ls_pvt.ccGalileo PVT: valid observations=Galileo RX time at Galileo Position at TOW=Galileo Position at 0^^^^^^^^^x^p^h^`^X^P^H^@^PNSNSNSNSNSNwSNoSNgSN_SNWSNOSNGSN?SN7SN/SN'SN8_/_'_____ _ _ _ _ _ _ _ _ _ _x________{_s_k_c_[_S_K_C_;_ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/hybrid_ls_pvt.ccHYBRID PVT: valid observations=HYBRID Position at TOW=Hybrid Position at 1_2_2_2_2_1_1_1_1_1_1_1_1_1_1_1_1_YN\N\N[N[N[N[N[N[N[N[N[N[N[N[N[N[Na__r_Wr_Or_Gr_?r_7r_/r_'r_r_r_r_r_q_q_q_q_a_r_r_r_r_r_r_r_r_r_r_r_r_r_{r_sr_kr_ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/kml_printer.cc GNSS-SDR Receiver position log file created at GNSS-SDR PVT01boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210/usr/include/boost/token_iterator.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/PVT/libs/rinex_printer.cc----|---1|0---|---2|0---|---3|0---|---4|0---|---5|0---|---6|0---|---7|0---|---8|Specifies the RINEX version (2.11 or 3.02)could not convert calendar time to UTC timeDay of year value is out of range 1..366could not convert calendar time to local time (must be 2.11 or 3.02). Using 3.02The RINEX Navigation file header has been updated with UTC and IONO info.Discontinued reception of Frame 2 and 3Signal Component currently in TestNavigation data without guaranteeCould not parse time zone name/usr/include/boost/date_time/local_time/posix_time_zone.hppCould not parse DST begin timeGALILEO NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDRGPS NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDRGNSS NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDRBLANK OR G = GPS, R = GLONASS, E = GALILEO, M = MIXEDG = GPS R = GLONASS E = GALILEO S = GEO M = MIXEDGPS OBSERVATION DATA FILE GENERATED BY GNSS-SDRGALILEO OBSERVATION DATA FILE GENERATED BY GNSS-SDRMIXED (GPS/GALILEO) OBSERVATION DATA FILE GENERATED BY GNSS-SDRBROADCAST DATA FILE FOR GEO SV, GENERATED BY GNSS-SDRvalid_basic_string::erase+basic_string::insertBad defined RINEX line: characters (must be 80)L1 0SBAOffset out of range: map::atError deleting temporary file3.02RINEX_version%.*gWeekday is out of range 0..6tm unable to handle not-a-date-time value-infinity date value+infinity date valuea special date valueGSDRRINEX_FILE_TYPE_OBSRINEX_FILE_TYPE_GPS_NAVRINEX_FILE_TYPE_METRINEX_FILE_TYPE_GLO_NAVRINEX_FILE_TYPE_GAL_NAVRINEX_FILE_TYPE_MIXED_NAVRINEX_FILE_TYPE_GEO_NAVRINEX_FILE_TYPE_SBASRINEX_FILE_TYPE_CLKRINEX_FILE_TYPE_SUMMARY141517181920212223SBAS payloadBeidouMixedGPS_L1_CAGPS_L1_P1PGPS_L1_Z_TRACKING1WGPS_L1_Y1YGPS_L1_M 1MGPS_L1_CODELESS1NGPS_L2_CA2CL2_SEMI_CODELESS2DGPS_L2_L2CMGPS_L2_L2CL2LGPS_L2_L2CML2XGPS_L2_P2PGPS_L2_Z_TRACKING2WGPS_L2_Y2YGPS_L2_M2MGPS_L2_codeless2NGPS_L5_I5IGPS_L5_Q5QGPS_L5_IQGLONASS_G1_CAGLONASS_G1_PGLONASS_G2_CAGLONASS_G2_PGALILEO_E1_A1AGALILEO_E1_BGALILEO_E1_CGALILEO_E1_BC1XGALILEO_E1_ABC1ZGALILEO_E5a_IGALILEO_E5a_QGALILEO_E5aIQGALILEO_E5b_I7IGALILEO_E5b_Q7QGALILEO_E5b_IQ7XGALILEO_E5_I8IGALILEO_E5_Q8QGALILEO_E5_IQ8XGALILEO_E56_A6AGALILEO_E56_B6B6CGALILEO_E56_BC6XGALILEO_E56_ABC6ZSBAS_L1_CASBAS_L5_ISBAS_L5_QSBAS_L5_IQCOMPASS_E2_I2ICOMPASS_E2_Q2QCOMPASS_E2_IQCOMPASS_E5b_ICOMPASS_E5b_QCOMPASS_E5b_IQCOMPASS_E6_I6ICOMPASS_E6_Q6QCOMPASS_E6_IQPSEUDORANGECARRIER_PHASEDOPPLERSIGNAL_STRENGTHPSEUDORANGE_CA_v2PSEUDORANGE_P_v2CARRIER_PHASE_CA_v2DOPPLER_v2SIGNAL_STRENGTH_v2GPS_L1_CA_v23.012.112.10Unknown RINEX version GALIONOSPHERIC CORRTIME SYSTEM CORRLEAP SECONDSEND OF HEADERGAL GAUTGPGATIME OF FIRST OBSION ALPHAION BETADELTA-UTCDELTA-UTC: A0,A1,T,WGPSAGPSBGPUTIIR-MIIFIIIAIIR1000000001Signal will be out of serviceSignal out of service000000000Adjustment out of range: Could not parse DST end timeUNKNOWN USERJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECN: GNSS NAV DATAE: GALILEORINEX VERSION / TYPEPGM / RUN BY / DATECOMMENTGNSS-SDR VERSION See http://gnss-sdr.orgN: GPS NAV DATAG: GPSM: MIXEDOBSERVATION DATADEFAULT MARKER NAMECTTCOBSERVER / AGENCYSoftware ReceiverREC # / TYPE / VERSAntenna numberAntenna typeANT # / TYPEAPPROX POSITION XYZANTENNA: DELTA H/E/NWAVELENGTH FACT L1/2SYS / # / OBS TYPES# / TYPES OF OBSERVDBHZSIGNAL STRENGTH UNITB SBAS DATAREC INDEX/TYPE/VERSNo Feb 29th in given year of boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = boost::date_time::time_zone_base; typename boost::detail::sp_member_access::type = boost::date_time::time_zone_base*]const Type& boost::token_iterator::dereference() const [with TokenizerFunc = boost::char_separator >; Iterator = __gnu_cxx::__normal_iterator >; Type = std::basic_string]void boost::token_iterator::increment() [with TokenizerFunc = boost::char_separator >; Iterator = __gnu_cxx::__normal_iterator >; Type = std::basic_string]boost::local_time::posix_time_zone_base::posix_time_zone_base(const string_type&) [with CharT = char; boost::local_time::posix_time_zone_base::string_type = std::basic_string]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) consttypename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = boost::date_time::dst_day_calc_rule; typename boost::detail::sp_member_access::type = boost::date_time::dst_day_calc_rule*]virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210no-dststd_abbrevstd_namephN5boost9gregorian11bad_weekdayEphN5boost9gregorian15bad_day_of_yearEi@N5boost9date_time14time_zone_baseINS_10posix_time5ptimeEcEEiN5boost9date_time17dst_day_calc_ruleINS_9gregorian4dateEEEphN5boost10local_time10bad_offsetEp`hN5boost10local_time14bad_adjustmentEiN5boost9date_time20year_based_generatorINS_9gregorian4dateEEEpN5boost9date_time17nth_kday_of_monthINS_9gregorian4dateEEEpN5boost9date_time17day_calc_dst_ruleINS_10local_time18nth_kday_rule_specEEEpN5boost9date_time12partial_dateINS_9gregorian4dateEEEpN5boost9date_time17day_calc_dst_ruleINS_10local_time22partial_date_rule_specEEEp0N5boost10local_time20posix_time_zone_baseIcEEPf@ \yN5boost16exception_detail19error_info_injectorISt13runtime_errorEEPf@@P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEEPfh \yN5boost16exception_detail19error_info_injectorISt12out_of_rangeEEPfP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt12out_of_rangeEEEEPfi \yN5boost16exception_detail19error_info_injectorISt16invalid_argumentEEPf@ P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt16invalid_argumentEEEEPf \yN5boost16exception_detail19error_info_injectorINS_10local_time10bad_offsetEEEPfP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10local_time10bad_offsetEEEEEPf0 \yN5boost16exception_detail19error_info_injectorINS_10local_time14bad_adjustmentEEEPf@ @P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10local_time14bad_adjustmentEEEEEp \yN5boost6detail17sp_counted_impl_pINS_10local_time20posix_time_zone_baseIcEEEEPf  \yN5boost16exception_detail19error_info_injectorINS_9gregorian11bad_weekdayEEEPf ` P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian11bad_weekdayEEEEEPf@  \yN5boost16exception_detail19error_info_injectorINS_9gregorian15bad_day_of_yearEEEPf  P\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian15bad_day_of_yearEEEEEp \yN5boost6detail17sp_counted_impl_pINS_9date_time17day_calc_dst_ruleINS_10local_time18nth_kday_rule_specEEEEEp\yN5boost6detail17sp_counted_impl_pINS_9date_time17day_calc_dst_ruleINS_10local_time22partial_date_rule_specEEEEEcc0A0c@c0Acc0A0`cpc0AcPcsc`'c@cpcuc0*cpuc*cc@ccc@c`ccpccPcc cccccc0ccccGc@4c0coA@p5c0c89c2coA`fc@c:c 3cPgcc:c03c3c0c0A4c0cX8`.c2c0A`ec`c` /c2c`Pfc0c0/c2c 5c@3c0A @6cp3c8:c3c0A`dcic;c3cPecic;c3c8c/c0A8c/cH8`::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210./output.datfile sink(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/file_output_filter.cc Unrecognized item type. Using short.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::file_sink; typename boost::detail::sp_member_access::type = gr::blocks::file_sink*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)16FileOutputFilterp*y*8dP9d0@dP@d @d7d6d6d@8dORPnull_sink(/home/carles/package/gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/null_sink_output_filter.ccRight block of a signal sink should not be retrievedboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gr::blocks::null_sink; typename boost::detail::sp_member_access::type = gr::blocks::null_sink*]virtual gr::basic_block_sptr GNSSBlockInterface::get_left_block(int)virtual gr::basic_block_sptr GNSSBlockInterface::get_right_block(int)20NullSinkOutputFilterpP2yp2BdPCdGdGdGdAd@d@dBdORPtrue15StringConverteri03P3@TdPTd/usr/include/boost/serialization/singleton.hpp! detail::singleton_wrapper< T >::m_is_destroyed/usr/include/boost/serialization/factory.hpp/usr/include/boost/serialization/extended_type_info_typeid.hppe %d %d %d %d %d %d %d %d %d %d/home/carles/package/gnss-sdr-0.0.6/src/core/libs/gnss_sdr_supl_client.ccFailed to save UTC model, map is emptyFailed to save IONO model, map is emptyFailed to save Ref Time, map is emptyFailed to save Ref Location, map is emptyFailed to save Ephemeris, map is emptyT %ld %ld %ld %ld U %d %d %d %d %d %d %d %d L %f %f %d I %d %d %d %d %d %d %d %d E %d %d %d %d %d %d %dA %d a %d %d %d %d %d Q %d %d q %d %d %d 0 0 0 0 GNSS-SDR_utc_mapSaved UTC Model dataGNSS-SDR_iono_mapSaved IONO Model dataGNSS-SDR_ref_time_mapSaved Ref Time dataGNSS-SDR_ref_location_mapSaved Ref Location dataGNSS-SDR_ephemeris_mapLoaded Ephemeris map dataFile: Saved Ephemeris map dataLoaded UTC model dataLoaded IONO model dataLoaded Ref Time dataLoaded Ref Location datad_alpha0d_alpha1d_alpha2d_alpha3d_beta0d_beta1d_beta2d_beta3item_versionvalidlatlond_TOWd_Weekd_tv_secd_tv_usecd_A1d_A0d_t_OTi_WN_Td_DeltaT_LSi_WN_LSFi_DNd_DeltaT_LSFitemi_satellite_PRNd_IODE_SF2d_IODE_SF3d_Crsd_Delta_nd_M_0d_Cucd_e_eccentricityd_Cusd_sqrt_Ad_Toed_Tocd_Cicd_OMEGA0d_Cisd_i_0d_Crcd_OMEGAd_OMEGA_DOTd_IDOTi_code_on_L2i_GPS_weekb_L2_P_data_flagi_SV_accuracyi_SV_healthd_TGDd_IODCi_AODOb_fit_interval_flagd_spare1d_spare2d_A_f0d_A_f1d_A_f2b_integrity_status_flagb_alert_flagb_antispoofing_flag"d;dTdd dd d$ddٺd»dۻddddddļd`dydbd{dd0dId2dKddddddd4dоddҿddddddddpddrddd@dYdBd[dtdd)dd+dDddddddddddddddddPdidstatic T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ephemeris; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Ephemeris]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::pair; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::pair]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Location; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Ref_Location]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Ref_Time; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Ref_Time]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Iono; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Iono]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = Gps_Utc_Model; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = Gps_Utc_Model]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::oserializer >]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 4]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 3]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 2]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 1]T* boost::serialization::factory(__va_list_tag*) [with T = std::map; int N = 0]void* boost::serialization::extended_type_info_typeid::construct(unsigned int, ...) const [with T = std::map]static T& boost::serialization::singleton::get_instance() [with T = boost::serialization::extended_type_info_typeid >]static T& boost::serialization::singleton::get_instance() [with T = boost::archive::detail::iserializer >]ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210p}N5boost13serialization16singleton_moduleEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi13Gps_EphemerisEEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS4_EEEEEEEp@`N5boost13serialization9singletonINS0_25extended_type_info_typeidI13Gps_Utc_ModelEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidI8Gps_IonoEEEEp@`N5boost13serialization9singletonINS0_25extended_type_info_typeidI12Gps_Ref_TimeEEEEiN5boost7archive6detail18interface_oarchiveINS0_12xml_oarchiveEEEp@`N5boost13serialization9singletonINS0_25extended_type_info_typeidI16Gps_Ref_LocationEEEEiN5boost7archive21basic_text_oprimitiveISoEEp@`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi13Gps_Utc_ModelEEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi8Gps_IonoEEEEEp@`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS4_EEEEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi12Gps_Ref_TimeEEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS4_EEEEEEEp@`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt4pairIKi16Gps_Ref_LocationEEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS4_EEEEEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidI13Gps_EphemerisEEEEi@N5boost7archive6detail18interface_iarchiveINS0_12xml_iarchiveEEEp`N5boost13serialization9singletonINS0_25extended_type_info_typeidISt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS4_EEEEEEEi`N5boost7archive21basic_text_iprimitiveISiEEiN5boost7archive6detail17shared_ptr_helperEPf N5boost7archive6detail15common_oarchiveINS0_12xml_oarchiveEEEpN5boost7archive18basic_xml_oarchiveINS0_12xml_oarchiveEEEPf`N5boost7archive17xml_oarchive_implINS0_12xml_oarchiveEEEp`N5boost7archive12xml_oarchiveEPff N5boost7archive6detail15common_iarchiveINS0_12xml_iarchiveEEEp N5boost7archive18basic_xml_iarchiveINS0_12xml_iarchiveEEEPf@N5boost7archive17xml_iarchive_implINS0_12xml_iarchiveEEEPf ``N5boost7archive12xml_iarchiveEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS5_EEEEEp@cN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS5_EEEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS5_EEEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS5_EEEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS5_EEEEEp@`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS5_EEEEEp`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveE13Gps_Utc_ModelEEp`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveE8Gps_IonoEEp`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveE12Gps_Ref_TimeEEp`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveE16Gps_Ref_LocationEEp@N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS8_EEEEEEEpN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS8_EEEEEEEpN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS8_EEEEEEEp@pN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS8_EEEEEEEp0N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS8_EEEEEEEpN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveESt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS8_EEEEEEEPfPn  N5boost13serialization25extended_type_info_typeidISt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS3_EEEEEpN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE13Gps_Utc_ModelEEEEPf@Pn` N5boost13serialization25extended_type_info_typeidISt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS3_EEEEEpPN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE8Gps_IonoEEEEPfPn N5boost13serialization25extended_type_info_typeidISt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS3_EEEEEpОN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE12Gps_Ref_TimeEEEEPf@Pn N5boost13serialization25extended_type_info_typeidISt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS3_EEEEEpPN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE16Gps_Ref_LocationEEEEPfPn` N5boost13serialization25extended_type_info_typeidISt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS3_EEEEEPfPn N5boost13serialization25extended_type_info_typeidI13Gps_Utc_ModelEEPf Pn N5boost13serialization25extended_type_info_typeidI8Gps_IonoEEPfPn N5boost13serialization25extended_type_info_typeidI12Gps_Ref_TimeEEPfPn N5boost13serialization25extended_type_info_typeidI16Gps_Ref_LocationEEp`N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS5_EEEEEEEpN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS5_EEEEEEEpN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS5_EEEEEEEp@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS5_EEEEEEEpN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS5_EEEEEEEiSt3mapIi13Gps_EphemerisSt4lessIiESaISt4pairIKiS0_EEEp@N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI13Gps_Utc_ModelEEEEiSt3mapIi13Gps_Utc_ModelSt4lessIiESaISt4pairIKiS0_EEEpૄN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI8Gps_IonoEEEEiSt3mapIi8Gps_IonoSt4lessIiESaISt4pairIKiS0_EEEp`N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI12Gps_Ref_TimeEEEEiSt3mapIi12Gps_Ref_TimeSt4lessIiESaISt4pairIKiS0_EEEp N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI16Gps_Ref_LocationEEEEiSt3mapIi16Gps_Ref_LocationSt4lessIiESaISt4pairIKiS0_EEEiе13Gps_Utc_Modeli8Gps_Ionoi12Gps_Ref_Timei016Gps_Ref_LocationpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi13Gps_EphemerisEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi13Gps_Utc_ModelEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi8Gps_IonoEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi12Gps_Ref_TimeEEEpcN5boost7archive6detail11oserializerINS0_12xml_oarchiveESt4pairIKi16Gps_Ref_LocationEEEpPN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi13Gps_EphemerisEEEEEp඄N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi13Gps_Utc_ModelEEEEEp`N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi8Gps_IonoEEEEEp@зN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi12Gps_Ref_TimeEEEEEp`N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveESt4pairIKi16Gps_Ref_LocationEEEEEp`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveESt4pairIKi13Gps_EphemerisEEEPfPn N5boost13serialization25extended_type_info_typeidISt4pairIKi13Gps_EphemerisEEEPf@Pn N5boost13serialization25extended_type_info_typeidISt4pairIKi13Gps_Utc_ModelEEEPfPn N5boost13serialization25extended_type_info_typeidISt4pairIKi8Gps_IonoEEEPfPn N5boost13serialization25extended_type_info_typeidISt4pairIKi12Gps_Ref_TimeEEEPfPn N5boost13serialization25extended_type_info_typeidISt4pairIKi16Gps_Ref_LocationEEEpN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveESt4pairIKi13Gps_EphemerisEEEEEp N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi13Gps_EphemerisEEEEEp„ངN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi13Gps_Utc_ModelEEEEEp@ÄN5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi8Gps_IonoEEEEEpĄ`N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi12Gps_Ref_TimeEEEEEpĄ N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidISt4pairIKi16Gps_Ref_LocationEEEEEiPńSt4pairIKi13Gps_EphemerisEińSt4pairIKi13Gps_Utc_ModelEińSt4pairIKi8Gps_IonoEińSt4pairIKi12Gps_Ref_TimeEiƄSt4pairIKi16Gps_Ref_LocationEpƄcN5boost7archive6detail11oserializerINS0_12xml_oarchiveE13Gps_EphemerisEEpDŽcN5boost7archive6detail11oserializerINS0_12xml_oarchiveE13Gps_Utc_ModelEEpDŽcN5boost7archive6detail11oserializerINS0_12xml_oarchiveE8Gps_IonoEEpȄcN5boost7archive6detail11oserializerINS0_12xml_oarchiveE12Gps_Ref_TimeEEpȄcN5boost7archive6detail11oserializerINS0_12xml_oarchiveE16Gps_Ref_LocationEEpɄ0ƄN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE13Gps_EphemerisEEEEpɄƄN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE13Gps_Utc_ModelEEEEpʄPDŽN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE8Gps_IonoEEEEp@˄DŽN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE12Gps_Ref_TimeEEEEp̄PȄN5boost13serialization6detail17singleton_wrapperINS_7archive6detail11oserializerINS3_12xml_oarchiveE16Gps_Ref_LocationEEEEPf̄Pn N5boost13serialization25extended_type_info_typeidI13Gps_EphemerisEEp@̈́`mN5boost7archive6detail11iserializerINS0_12xml_iarchiveE13Gps_EphemerisEEp̈́̄N5boost13serialization6detail17singleton_wrapperINS0_25extended_type_info_typeidI13Gps_EphemerisEEEEp΄̈́N5boost13serialization6detail17singleton_wrapperINS_7archive6detail11iserializerINS3_12xml_iarchiveE13Gps_EphemerisEEEEiτ13Gps_Ephemeris dddddвdddd0d@ dddddвddd`dd dddddddd@0d@dedd@dddd@ e`dpdPddd d0 e0d@d`dPdpdd eddpd d0ddeЩdddd0d@dP edddd0ddd dPd`dpddpdPd ddd d0d@dPdОdddШdddd0dPddddddddП`ddedd@ddгdd@ e`dpdPdd`@d`d0 e0d@d`dPd dдd eddpd dࢄ d@deЩdddd`ddP edddd0d`@pAA@d`dd d`d0Ьdd dPd`dpddpd@pAAdddPd+e@d`ddd d0d@dPd@pAAdddd+e0dЭddШdddd0d@pAA`d0ddd+e d@ddddddd@pAAdpddd`+e@@pAApdddddૄ@pAAЯddd@d`d`@pAA0dddpd@d @pAAdPddd dЭ@pAAd dd d`d@pAAPdddPd+eP@pAA dddd+e@pAAd0ddd+eа@pAAdddd`+eౄ@pAAdpdddd@pAAd@dd@d`d@pAAdddpd@d@pAA@dddd dP`dpd0e`dpddd඄еddd0d@ddPd`@dPd`dddd dзdd0dЧdddd` d0ddddХddคdd0e`dpdddd dd0d@ddPdPpdd`dddd ddd0dЧddddлPdpddddХdd`dpde`dpdddd @pAAdddнddང@pAA ddddd@pAAPd dd0dd`@pAAddd`dd @pAAddddЪddde`dpdddd@pAApdddнdd0„@pAAdPdddd„@pAAddd0ddÄ@pAAddd`ddpĄ@pAA0ddddЪd0Ƅdd$e0d@ddPdƄdddddd dPDŽpdd dЦddddDŽdddddddPȄPd`ddpdd ddȄdd$e0d@ddPdɄ0dPddddd d@ʄdd dЦdddd˄d0dddddd˄dddpdd dd̄@pAAd@dddd̈́Юdd +e0d@dPd`d d̈́@pAA`ddddd0΄d d +e0d@dPd`d d{Gz?><@>p>@@@>=>>@?>>0@?=<?-DT!Y=-DT!> >=7275>>ll@ll@0123456789ABCDEF st->size <= _nssel->left >= 0ctx->left >= 0ctx->context > 0val > 0 &<>OCTET STRINGOCTET_STRING/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OCTET_STRING.ctype_variant != ASN_OSUBV_ANY || tag_mode != -1!(maySave & 0x07) || !sizeinunitsLeLePMeLeLePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMeLePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMe@Me@Me@Me@Me@Me@Me@Me@Me@Me@MePMePMePMePMePMePMePMe Me Me Me Me Me MePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMePMeLeLeLeLeLeLe be be be be be be be be be be`e`e`e`e`e`e`ebebebebebebe`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`e`eaeaeaeaeaeaeOCTET_STRING_encode_uperOCTET_STRING__convert_entrefsOCTET_STRING__convert_binaryOCTET_STRING__convert_hexadecimalOCTET_STRING_encode_derOCTET_STRING_decode_berӨ "(.5<CJQX_fmsz%lu%ld%ld (%s)<%s/>INTEGER/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/INTEGER.cret > 0 && (size_t)ret < scrsizeee e ee e e e e e e e e e e e e e e e e e ee e e e e e e e e e ee ee e eeeeeeeeeeepe e[e e e e eMeMeMeMeMeMe e e e e e e e e e e e e e e e e e e e e e e e e e eMeMeMeMeMeMeЅeЅe eeЅee!e9e!eЄe9e9eeINTEGER__dump/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PDU.c%s: value not given (%s:%d)%s: constraint failed (%s:%d)referenceNumbercomponent/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_decoder.crval.consumed == pd.moveduper_decode/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_decoder.ctagno < td->tags_counttagno >= 0ber_check_tags/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/der_encoder.cec.encoded == (ssize_t)(buffer_size - arg.left)der_encode_to_buffer[%s%u]UNIVERSAL APPLICATION PRIVATE |ԨШee@eЪeШeȩeШeȩeШeȩe@eЪeШeȩeШeȩe< 0Hee0eXe0exer_skip_unknownxer_decode_generalxer_next_tokenHeee epeexePe(eee%s: Invalid time format: %s (%s:%d)/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTCTime.c%04d-%02d-%02d %02d:%02d:%02d (GMT)ret > 0 && ret < (int)sizeof(buf)gt->size >= 2UTCTimeasn_time2UTUTCTime_print/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_codecs_prim.cst->buf || st->size == 0der_encode_primitive/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ULP-PDU.cULP-PDUmessageerval.structure_ptr == &tmp/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NativeInteger.cret > 0 && (size_t)ret < sizeof(scratch)NativeInteger_printNativeInteger_encode_der@ee@eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee@e@ee@eeexexexexexexexexexexeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee@easn_time2GT_fracGeneralizedTime_print/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GeneralizedTime.c!((tm_s).tm_gmtoff)%04d%02d%02d%02d%02d%02d%+03ld%02ldGeneralizedTimeSLPAddressiPAddressfQDNUlpMessagemsSUPLINITmsSUPLSTARTmsSUPLRESPONSEmsSUPLPOSINITmsSUPLPOSmsSUPLENDmsDUMMY2msDUMMY3positionstatusCodesETCapabilitiesrequestedAssistDatalocationIdsUPLPOSRequestedAssistDataalmanacRequestedutcModelRequestedionosphericModelRequesteddgpsCorrectionsRequestedreferenceLocationRequestedreferenceTimeRequestedrealTimeIntegrityRequestednavigationModelRequestednavigationModelDataacquisitionAssistanceRequested/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FQDN.cFQDN-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_CHOICE.c%s: mandatory CHOICE element %s absent (%s:%d)%s: no CHOICE element given (%s:%d)_fetch_present_idx(st, specs->pres_offset, specs->pres_size) == 0pres_size != sizeof(int)tag_mode == 0tag == 0CHOICE_decode_xerCHOICE_outmost_tag_fetch_present_idx_set_present_idxFALSETRUEBOOLEANRRLP-ComponentmsrPositionReqmsrPositionRspassistanceDataassistanceDataAckprotocolErrorProtocolErrorerrorCauseextensionContainerrel-5-ProtocolError-Extension/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/XNavigationModel.cXNavigationModelgpsWeekgpsToenSATtoeLimitsatInfotimestamppositionEstimatevelocitySatelliteInfo/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PositionEstimate.cPositionEstimatelatitudeSignlatitudelongitudeconfidencealtitudeInfouncertaintySemiMajoruncertaintySemiMinororientationMajorAxisnorthsouthposPayLoadposMethodsLPAddresssETAuthKeykeyIdentity4StatusCodeunspecifiedsystemFailureunexpectedMessagedataMissingunexpectedDataValueposMethodFailureposMethodMismatchposProtocolMismatchtargetSETnotReachableversionNotSupportedresourceShortageinvalidSessionIdnonProxyModeNotSupportedproxyModeNotSupportedpositioningNotPermittedauthNetFailureauthSuplinitFailureconsentDeniedByUserconsentGrantedByUser/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosPayLoad.cPosPayLoadtia801payloadrrcPayloadrrlpPayload/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Ver.cVer/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IPAddress.cIPAddressipv4Addressipv6AddresssetSessionIDslpSessionIDnotificationqoPsLPModemACkeyIdentityDUMMY/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Version.cVersionmajservindcontrol_size == er.encodedKf0LfLfXLfKfJfKfJfSET_OF_encode_xer/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SET_OF.cPosMethodagpsSETassistedagpsSETbasedagpsSETassistedprefagpsSETbasedprefautonomousGPSaFLTeCIDeOTDoTDOAnoPosition%s: value byte %ld (%d) not in VisibleString alphabet (%s:%d)/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/VisibleString.cVisibleString/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/AltitudeInfo.cAltitudeInfoaltitudeDirectionaltitudealtUncertaintyheightSETCapabilitiesposTechnologyprefMethodposProtocolPrefMethodagpsSETassistedPreferredagpsSETBasedPreferrednoPreference/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity4.cKeyIdentity4LocationIdcellInfostatusENUMERATED/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MAC.cMAC001101000101011001111000101010111100110111101111BIT STRINGBIT_STRING/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/BIT_STRING.c%s: invalid padding byte (%s:%d)9ONyj%o%t%y%~%%}%%%%%%/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Notification.cNotificationnotificationTypeencodingTyperequestorIdrequestorIdTypeclientNameclientNameType/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETAuthKey.cSETAuthKeyshortKeylongKeyRel-5-ProtocolError-Extensionextended-reference/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Extended-reference.cExtended-referencesmlc-codetransaction-IDMsrPosition-RspmultipleSetsreferenceIdentityotd-MeasureInfolocationInfogps-MeasureInfolocationErrorrel-98-MsrPosition-Rsp-Extensionrel-5-MsrPosition-Rsp-ExtensionRel-5-MsrPosition-Rsp-Extensionotd-MeasureInfo-5-ExtulPseudoSegIndreferenceAssistDatamsrAssistDatasystemInfoAssistDatagps-AssistDatamoreAssDataToBeSentrel5-AssistanceData-Extensionrel98-AssistanceData-ExtensionMsrPosition-ReqpositionInstructrel98-MsrPosition-Req-extensionrel5-MsrPosition-Req-extensionRel98-MsrPosition-Req-ExtensiongpsTimeAssistanceMeasurementRequestrel98-Ext-ExpOTDgpsReferenceTimeUncertaintyReferenceAssistDatabcchCarrierbsictimeSlotSchemebtsPositionNULLGPS-AssistDatacontrolHeaderRel5-AssistanceData-ExtensionReferenceIdentityrefBTSListExtensionContainerPositionInstructmethodTypepositionMethodmeasureResponseTimeuseMultipleSetsenvironmentCharacter/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NativeEnumerated.cer.encoded > 0 && (size_t)er.encoded < srcsizeNativeEnumerated_encode_xerLocationErrorlocErrorReasonadditionalAssistanceDataRel5-MsrPosition-Req-ExtensionMethodTypemsAssistedmsBasedmsBasedPrefmsAssistedPref/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocationInfo.cLocationInforefFramegpsTOWfixTypeposEstimateErrorCodesunDefinedmissingComponetincorrectDatamissingIEorComponentElementmessageTooShortunknowReferenceNumber/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BCCHCarrier.cBCCHCarrierRel98-AssistanceData-ExtensionUlPseudoSegIndfirstOfManysecondOfManyControlHeaderreferenceTimerefLocationdgpsCorrectionsnavigationModelionosphericModelutcModelalmanacacquisAssistrealTimeIntegrityAdditionalAssistanceDatagpsAssistanceDataganssAssistanceDataAcquisAssisttimeRelationacquisListEnvironmentCharacterbadAreanotBadAreamixedAreaGPS-MeasureInfogpsMsrSetListTimeSlotSchemeequalLengthvariousLengthLocErrorReasonnotEnoughBTSsnotEnoughSatseotdLocCalAssDataMissingeotdAssDataMissinggpsLocCalAssDataMissinggpsAssDataMissingmethodNotSupportednotProcessedrefBTSForGPSNotServingBTSrefBTSForEOTDNotServingBTSnotEnoughGANSSSatsganssAssDataMissingrefBTSForGANSSNotServingBTSRefLocationthreeDLocationRel-98-MsrPosition-Rsp-Extensionrel-98-Ext-MeasureInfotimeAssistanceMeasurementsotd-MeasureInfo-R98-Ext/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Almanac.cAlmanacalamanacWNaalmanacList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSReferenceTimeUncertainty.cGPSReferenceTimeUncertaintyRel98-Ext-ExpOTDmsrAssistData-R98-ExpOTDsystemInfoAssistData-R98-ExpOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Accuracy.cAccuracy/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SatelliteInfoElement.cSatelliteInfoElementsatIdiODEVelocityhorvelhorandvervelhorveluncerthorandveruncertCellInfogsmCellwcdmaCell/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity.cKeyIdentity/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SetSessionID.cSetSessionIDsessionIdsetIdSLPModeproxynonProxyPosProtocoltia801rrlprrcNotificationTypenoNotificationNoVerificationnotificationOnlyprivacyOverridenotificationAndVerficationAllowedNAnotificationAndVerficationDeniedNA/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/QoP.cQoPhoraccveraccmaxLocAgedelay/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horveluncert.cHorveluncertbearinghorspeedPosTechnologyagpsSETBasedFormatIndicatorlogicalNamee-mailAddressmsisdnurlsipUrlmdnimsPublicIdentity/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GsmCellInformation.cGsmCellInformationrefMCCrefMNCrefLACrefCInMRtA/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETId.cSETIdimsinaistalecurrentNMR/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horvel.cHorvel/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandvervel.cHorandvervelverdirectverspeedEncodingTypeucs2gsmDefaultutf8%s: value byte %ld out of range: %d > 127 (%s:%d)/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IA5String.cIA5String/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandveruncert.cHorandveruncerthoruncertspeedveruncertspeed/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/WcdmaCellInformation.cWcdmaCellInformationrefUCfrequencyInfoprimaryScramblingCodemeasuredResultsListMsrAssistDatamsrAssistList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/DGPSCorrections.cDGPSCorrectionssatList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo-5-Ext.cOTD-MeasureInfo-5-ExtPositionMethodeotdgpsgpsOrEOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BSIC.cBSICSeqOfAcquisElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BTSPosition.cBTSPosition/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FixType.cFixType/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UTCModel.cUTCModelutcA1utcA0utcTotutcWNtutcDeltaTlsutcWNlsfutcDNutcDeltaTlsfSeqOf-BadSatelliteSet/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MeasureResponseTime.cMeasureResponseTime/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Ext-GeographicalInformation.cExt-GeographicalInformationSeqOfOTD-MsrElementRestAccuracyOpt/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTimeAssistanceMeasurements.cGPSTimeAssistanceMeasurementsreferenceFrameMSBgpsTowSubmsdeltaTow/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultipleSets.cnbrOfSetsnbrOfReferenceBTSsreferenceRelationSystemInfoAssistDatasystemInfoAssistListnavModelList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatelliteID.cSatelliteIDOTD-MeasureInfootdMsrFirstSetsotdMsrRestSetsTimeRelationgsmTimeSeqOfReferenceIdentityTypeOTD-MeasureInfo-R98-ExtotdMsrFirstSets-R98-ExtMoreAssDataToBeSentnoMoreMessagesmoreMessagesOnTheWaySystemInfoAssistData-R98-ExpOTDsystemInfoAssistListR98-ExpOTDSeqOfMsrAssistBTSSeqOfAlmanacElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSAssistanceData.cGPSAssistanceDataSeqOfSatElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlmanacElement.csatelliteIDalmanacEalamanacToaalmanacKsiialmanacOmegaDotalmanacSVhealthalmanacAPowerHalfalmanacOmega0almanacWalmanacM0almanacAF0almanacAF1/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatElement.ciodeudrepseudoRangeCorrangeRateCordeltaPseudoRangeCor2deltaRangeRateCor2deltaPseudoRangeCor3deltaRangeRateCor3ReferenceRelationsecondBTSThirdSetsecondBTSSecondSetfirstBTSFirstSetUseMultipleSetsoneSetmultiFrameOffsetroughRTDcalcAssistanceBTSMsrAssistData-R98-ExpOTDmsrAssistList-R98-ExpOTDSeqOfMsrAssistBTS-R98-ExpOTDSeqOfNavModelElementSeqOfSystemInfoAssistBTSReferenceTimegpsTimegpsTowAssistGSMTimeframeNumbertimeSlotbitNumberSeqOfGPS-MsrSetElementSeqOfSystemInfoAssistBTS-R98-ExpOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/IonosphericModel.cIonosphericModelalfa0alfa1alfa2alfa3/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeSlot.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AcquisElement.csviddoppler0addionalDopplercodePhaseintCodePhasegpsBitNumbercodePhaseSearchWindowaddionalAngle/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAssistanceData.cGANSSAssistanceDataSystemInfoAssistBTS-R98-ExpOTDnotPresentpresent/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrSetElement.cgps-msrList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultiFrameOffset.cMultiFrameOffsetCalcAssistanceBTSfineRTDreferenceWGS84/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalDopplerFields.cAddionalDopplerFieldsdoppler1dopplerUncertainty/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BitNumber.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementRest.crefFrameNumberreferenceTimeSlottoaMeasurementsOfRefstdResolutiontaCorrectionotd-MsrsOfOtherSets/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RoughRTD.cRoughRTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CdmaCellInformation.cCdmaCellInformationrefNIDrefSIDrefBASEIDrefBASELATreBASELONGrefREFPNrefWeekNumberrefSeconds/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NMRelement.cNMRelementaRFCNbSICrxLevFrequencyInfofmodeSpecificInfofddtddbsicAndCarriercirequestIndexsystemInfoIndexciAndLACOTD-MsrElementFirst-R98-Extotd-FirstSetMsrs-R98-Ext/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW23b.cGPSTOW23bCellIDAndLACreferenceLACreferenceCI/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalAngleFields.cAddionalAngleFieldsazimuthelevationsatStatus/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementFirst.cOTD-MsrElementFirstotd-FirstSetMsrsGPSTOWAssist/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/StdResolution.cStdResolution/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FrameNumber.cBSICAndCarriercarrierSeqOfGPS-MsrElement/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ModuloTimeSlot.cModuloTimeSlotGPSTOWAssistElementtlmWordantiSpoofalerttlmRsvdBitsexpectedOTDexpOTDUncertaintyGPSTimegpsTOW23b/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpectedOTD.cExpectedOTDTOA-MeasurementsOfRefrefQualitynumOfMeasurements/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW24b.cGPSTOW24b/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RefQuality.cRefQuality/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LAC.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NumOfMeasurements.cNumOfMeasurementsReferenceWGS84relativeNorthrelativeEastrelativeAltSeqOfOTD-FirstSetMsrs/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpOTDUncertainty.cExpOTDUncertaintyAssistBTSData-R98-ExpOTDexpOTDuncertainty/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelativeAlt.cRelativeAlt/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoIndex.cSystemInfoIndexSeqOfOTD-MsrsOfOtherSets/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FineRTD.cFineRTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RequestIndex.cRequestIndexSeqOfOTD-FirstSetMsrs-R98-Ext/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CellID.cCellID/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSWeek.cGPSWeekSatStatusnewSatelliteAndModelUColdSatelliteAndModelnewNaviModelUCAssistBTSDataFrequencyInfoFDDuarfcn-ULuarfcn-DL/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UARFCN.cUARFCNFrequencyInfoTDDuarfcn-Ntutra-CarrierRSSIcellMeasuredResultsList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMReservedBits.cTLMReservedBits/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrElement.ccNodopplerwholeChipsfracChipsmpathIndicpseuRangeRMSErr/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AntiSpoofFlag.cAntiSpoofFlagOTD-MeasurementWithIDneighborIdentitynborTimeSloteotdQualityotdValue/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMWord.cTLMWord/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlertFlag.cAlertFlag/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelDistance.cRelDistanceidentityNotPresentidentityPresentOTD-MeasurementMpathIndicnotMeasuredlowmediumhighNeighborIdentitymultiFrameCarrier/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UncompressedEphemeris.cUncompressedEphemerisephemCodeOnL2ephemURAephemSVhealthephemIODCephemL2PflagephemSF1RsvdephemTgdephemTocephemAF2ephemAF1ephemAF0ephemCrsephemDeltaNephemM0ephemCucephemEephemCusephemAPowerHalfephemToeephemFitFlagephemAODAephemCicephemOmegaA0ephemCisephemI0ephemCrcephemWephemOmegaADotephemIDot/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTDValue.cOTDValue/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EOTDQuality.cEOTDQualitynbrOfMeasurementsstdOfEOTD/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTRA-CarrierRSSI.cUTRA-CarrierRSSICellMeasuredResultsList/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EphemerisSubframe1Reserved.cEphemerisSubframe1Reservedreserved1reserved2reserved3reserved4MultiFrameCarrier/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellMeasuredResults.cCellMeasuredResultscellIdentitycellParametersIDproposedTGSNprimaryCCPCH-RSCPpathlosstimeslotISCP-ListprimaryCPICH-Infocpich-Ec-N0cpich-RSCP/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-Ec-N0.cCPICH-Ec-N0/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellParametersID.cCellParametersID/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-RSCP.cCPICH-RSCP/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCPICH-Info.cPrimaryCPICH-InfoTimeslotISCP-List/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Pathloss.cPathloss/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TGSN.c/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCCPCH-RSCP.cPrimaryCCPCH-RSCP/home/carles/package/gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TimeslotISCP.cTimeslotISCPunpack_byte_2bit_samplesboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)24unpack_byte_2bit_samplespdkp e\yN5boost6detail17sp_counted_impl_pI24unpack_byte_2bit_samplesEEdggxAVV0VVVVVV`A0lA0V0AAA@tAPArAPgegggcNgкgunpack_byte_2bit_cpx_samplesboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)28unpack_byte_2bit_cpx_samplespjkp@k\yN5boost6detail17sp_counted_impl_pI28unpack_byte_2bit_cpx_samplesEEjggxAVV0VVVVVV`A0lA0V0AAA@tAPArAgk0gg@gcN`gpgunpack_intspir_1bit_samplesboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)27unpack_intspir_1bit_samplespqkpq\yN5boost6detail17sp_counted_impl_pI27unpack_intspir_1bit_samplesEE qggxAVV0VVVVVV`A0lA0V0AAA@tAPArAg@qgggcNgglock.locked()index < size()!pthread_cond_destroy(&cond)Failed to set frequencyFailed to set sample rateFailed to set gain modeFailed to set gain) failed in : mutexeventfd_select_interrupterepollepoll re-registrationeventFailed to set if gainit.is_valid(m_buff)m_it != 0circular_bufferrtl_tcp_signal_source_c is not an IP addressFailed to open socket.Failed to set linger option: Failed to set linger optionFailed to connect to Connected to Failed to set no delay optionFailed to read dongle info.Failed to read dongle infoFound tuner.*this - m_buff->begin() >= nm_buff->end() - *this >= nError during read: /usr/include/boost/array.hppout of rangei < N/usr/include/boost/asio/detail/posix_event.hpp/usr/include/boost/circular_buffer/base.hpp/home/carles/package/gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc***** Internal Program Error - assertion (boost::condition_variable_any::condition_variable_any() failed in pthread_mutex_initboost::condition_variable_any::condition_variable_any() failed in pthread_cond_initboost::condition_variable_any::wait() failed in pthread_cond_wait/usr/include/boost/circular_buffer/details.hppFailed to set reuse address option: Failed to set reuse address optionFailed to set no delay option.boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]bool boost::cb_details::iterator::operator!=(const boost::cb_details::iterator&) const [with Traits0 = boost::cb_details::nonconst_traits >; Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >]boost::cb_details::iterator::reference boost::cb_details::iterator::operator*() const [with Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::reference = float&]boost::cb_details::iterator::difference_type boost::cb_details::iterator::operator-(const boost::cb_details::iterator&) const [with Traits0 = boost::cb_details::const_traits >; Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::difference_type = long int]boost::cb_details::iterator& boost::cb_details::iterator::operator-=(boost::cb_details::iterator::difference_type) [with Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::difference_type = long int]boost::cb_details::iterator::difference_type boost::cb_details::iterator::operator-(const boost::cb_details::iterator&) const [with Traits0 = boost::cb_details::nonconst_traits >; Buff = boost::circular_buffer >; Traits = boost::cb_details::const_traits >; boost::cb_details::iterator::difference_type = long int]boost::cb_details::iterator& boost::cb_details::iterator::operator+=(boost::cb_details::iterator::difference_type) [with Buff = boost::circular_buffer >; Traits = boost::cb_details::nonconst_traits >; boost::cb_details::iterator::difference_type = long int]void boost::condition_variable_any::notify_one()boost::circular_buffer::reference boost::circular_buffer::operator[](boost::circular_buffer::size_type) [with T = float; Alloc = std::allocator; boost::circular_buffer::reference = float&; boost::circular_buffer::size_type = long unsigned int]boost::condition_variable_any::~condition_variable_any()boost::condition_variable::condition_variable()T& boost::array::operator[](boost::array::size_type) [with T = float; long unsigned int N = 255ul; boost::array::reference = float&; boost::array::size_type = long unsigned int]boost::condition_variable_any::condition_variable_any()void boost::asio::detail::posix_event::clear(Lock&) [with Lock = boost::asio::detail::scoped_lock]void boost::asio::detail::posix_event::signal_and_unlock(Lock&) [with Lock = boost::asio::detail::scoped_lock]boost::mutex::~mutex()boost::condition_variable::~condition_variable()boost::detail::interruption_checker::~interruption_checker()boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)void boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)@"@"@@"@@@?@.@@@.@@iN5boost4asio6detail11noncopyableEPfN5boost4asio10io_service7serviceEp@N5boost4asio6detail12service_baseINS1_15task_io_serviceEEEp@N5boost4asio6detail15task_io_serviceEp@N5boost4asio6detail12service_baseINS1_13epoll_reactorEEEppN5boost4asio6detail13epoll_reactorEp@N5boost4asio6detail12service_baseINS0_21stream_socket_serviceINS0_2ip3tcpEEEEEp0N5boost4asio21stream_socket_serviceINS0_2ip3tcpEEE23rtl_tcp_signal_source_cp@mPfP^y \y(N5boost16exception_detail19error_info_injectorINS_6system12system_errorEEEPfP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_6system12system_errorEEEEEPf pn \yN5boost16exception_detail19error_info_injectorISt8bad_castEEPfP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt8bad_castEEEEi N5boost4asio6detail14typeid_wrapperINS1_15task_io_serviceEEEiN5boost4asio6detail14typeid_wrapperINS1_13epoll_reactorEEEpqN5boost6detail11thread_dataINS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS2_5list1INS2_5valueIPS7_EEEEEEEEPf@i \yN5boost16exception_detail19error_info_injectorISt12length_errorEEPfP\yN5boost16exception_detail10clone_implINS0_19error_info_injectorISt12length_errorEEEEp\yN5boost6detail17sp_counted_impl_pINS0_11thread_dataINS_3_bi6bind_tImNS_4_mfi3mf0ImNS_4asio10io_serviceEEENS3_5list1INS3_5valueIPS8_EEEEEEEEEEiN5boost4asio6detail14typeid_wrapperINS0_21stream_socket_serviceINS0_2ip3tcpEEEEE h hpgghhPh'hЏ@gggg`PggxAVV0VVVVVV`A0lA0V0A`AA@tA0AAg@ hhpgN h@hXșP hhpgN Ahg hh @Bhg hh hphpA0 hh0` hhpA@@h0g`hh`Ahg hhggg@O h0h0A h`h8 0hPh0A@?hPg `hh 0@h gphh0gg`gcNggB::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvirtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)10beamformerp6mp\yN5boost6detail17sp_counted_impl_pI10beamformerEEP\h\hxAVV0VVVVVV`A0lA0V0A`AA@tA0AA[hp`h`h`hcN`h`h/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/gnss_satellite.cc is not defined {GPS, GLONASS, SBAS, Galileo, Beidou}. Initialization?Trying to define PRN while system is not definedThis PRN is not definedGlonass PRN UnknownIIA*-4-2-7-1-3WAASEGNOSIOV-PFMIOV-FM2IOV-FM3IOV-FM4FOC-FM1FOC-FM2FOC-FM3FOC-FM4Unknown(Simulated)hhh {hlhhhhh h hh~h ~h }h}h|h}h|h`}h`|h |h{h{h`{h~h`~h h h`h`h`h`hlhzhxhxh0vhshpshvhxvhuhPuh shrhrh0rh@zhyhwh0wh`yhuhth`ththxhnh(mhPoh(mhnh(mhoh(mh(mh(mh(mh(mh(mh(mhPnhph@qhmhqhmhmhmhqhohphmhXphmhmhmhph Word =hhhhhhymga[MEykc[ME?=yM[=ky[E=S[MIG= 210uAuP[fBzއ@@@ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   8@ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   @T[fBЯއ/usr/include/boost/dynamic_bitset/dynamic_bitset.hppsize() > 0 && num_blocks() > 0Ephemeris (1, 2, 3, 4) have been received and belong to the same batch/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/galileo_navigation_message.ccTr::eq(c, one) || Tr::eq(c, (fac.widen('0')))basic_string::_S_construct null not validBatch number: bitset::_M_copy_from_ptrPage number = IOD_nav_1= t0e_1= M0_1= A_1= flag_tow_setIOD_nav_2= OMEGA_0_2= i_0_2= omega_2= iDot_2= IOD_nav_3= OMEGA_dot_3= delta_n_3= C_uc_3= C_us_3= C_rc_3= C_rs_3= SISA_3= IOD_nav_4= SV_ID_PRN_4= C_ic_4= C_is_4= t0c_4= af0_4 = af1_4 = af2_4 = spare_4 = ai0_5= ai1_5= ai2_5= Region1_flag_5= Region2_flag_5= Region3_flag_5= Region4_flag_5= Region5_flag_5= BGD_E1E5a_5= BGD_E1E5b_5= E5b_HS_5= E1B_HS_5= E5b_DVS_5= E1B_DVS_5= WN_5= TOW_5= spare_5= A0_6= A1_6= Delta_tLS_6= t0t_6= WNot_6= WN_LSF_6= DN_6= Delta_tLSF_6= TOW_6= IOD_a_7= WN_a_7= t0a_7= SVID1_7= DELTA_A_7= e_7= omega_7= delta_i_7= Omega0_7= Omega_dot_7= M0_7= IOD_a_8= af0_8= af1_8= E5b_HS_8= E1B_HS_8= SVID2_8= DELTA_A_8= e_8= omega_8= delta_i_8= Omega0_8= Omega_dot_8= IOD_a_9= WN_a_9= t0a_9= M0_9= af0_9= af1_9= E1B_HS_9= SVID3_9= DELTA_A_9= e_9= omega_9= delta_i_9= IOD_a_10= Omega0_10= Omega_dot_10= M0_10= af0_10= af1_10= E5b_HS_10= E1B_HS_10= A_0G_10= A_1G_10= t_0G_10= WN_0G_10= Time_0= WN_0= TOW_0= m_check_invariants()vector::_M_default_appendpos < m_num_bitsii jNijfiji,jiYiconst Block& boost::dynamic_bitset::m_highest_block() const [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset::~dynamic_bitset() [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset& boost::dynamic_bitset::set(boost::dynamic_bitset::size_type, bool) [with Block = unsigned char; Allocator = std::allocator; boost::dynamic_bitset::size_type = long unsigned int]void boost::dynamic_bitset::init_from_string(const std::basic_string<_CharT2, _Traits2, _Alloc>&, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, boost::dynamic_bitset::size_type) [with CharT = char; Traits = std::char_traits; Alloc = std::allocator; Block = unsigned char; Allocator = std::allocator; typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type = long unsigned int; boost::dynamic_bitset::size_type = long unsigned int]ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ==@<p?NB ?= @@`?>?=<<> decode_sbstype1:decode_sbstype2:decode_sbstype6:decode_sbstype7decode_sbstype9:decode_sbstype9: prn=%ddecode_sbstype18:decode_longcorr0:decode_longcorr0:sat=%2ddecode_longcorr1:decode_longcorr1: sat=%2ddecode_longcorrh:decode_sbstype24:decode_sbstype25:decode_sbstype26:sbsupdatecorr: type=%d (memcmp says is_equal=) :<> s1= s2= equal=<> sat= fastcorr.valid= lcorr.valid= fast_correction_updated=<> band= nigp=<> -> valid igps:<> RTKLIB parsing result: <> new invalid time relation: i_gps_week=/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_telemetry_data.ccdecode_sbstype1: nprn=%d iodp=%ddecode_sbstype2: type=%d iodf=%ddecode_sbstype6: iodf=%d %d %d %d<> no change in ephemeris -> won't parseinvalid prn in sbas type 9: prn=%3ddecode_sbstype18: band=%d nigp=%ddecode_sbstype26: band=%d block=%dunsupported sbas message: type=%dUnsupported SBAS message: type=%d<> extracted GPS time from MT12: gps_tow= <> compare objects of size=<> updated_sbas_ephemeris():<> updated_satellite_corrections(): long_term_correction_updated=<> received_iono_correction():<> Sbas_Telemetry_Data.update():message parsing problem for MT j0j j j j jPjhjPjjjPjjPjPjPjPjjjPjPjPjPjPjХjjjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjjboost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_exception_]boost::exception_ptr boost::exception_detail::get_static_exception_object() [with Exception = boost::exception_detail::bad_alloc_]void boost::condition_variable::notify_one()typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = boost::exception_detail::error_info_base; typename boost::detail::sp_dereference::type = boost::exception_detail::error_info_base&]virtual boost::shared_ptr boost::exception_detail::error_info_container_impl::get(const boost::exception_detail::type_info_&) constvoid boost::pthread::pthread_mutex_scoped_lock::unlock()boost::pthread::pthread_mutex_scoped_lock::pthread_mutex_scoped_lock(pthread_mutex_t*)virtual void boost::exception_detail::error_info_container_impl::set(const boost::shared_ptr&, const boost::exception_detail::type_info_&)<HAIlFmKU`HIlm@L`Q 3V4N[ Oe`fe jo ty 3~4N Oef  2`3N Oef  23N Oef  23M Nd`e   23M# Nd(e- 27 <A 2F3MK NdPeU Z`_ di 2n3Ms Ndxe}  23M Nde Vt (FdLj<ZxLV`jt~ (2<FPZdnxLQV[`ejoty~ #(-27<AFKPUZ_dinsx} #(-27AK #(-27AK #(-27 #(-27AKU@?@eeA2@?{GzD?-C6>Mb?=?7i6?>Ephemeris (1, 2, 3) have been received and belong to the same batch kk.kdFk5kj kconst Block& boost::dynamic_bitset::m_highest_block() const [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset::~dynamic_bitset() [with Block = unsigned char; Allocator = std::allocator]boost::dynamic_bitset& boost::dynamic_bitset::set(boost::dynamic_bitset::size_type, bool) [with Block = unsigned char; Allocator = std::allocator; boost::dynamic_bitset::size_type = long unsigned int]void boost::dynamic_bitset::init_from_string(const std::basic_string<_CharT2, _Traits2, _Alloc>&, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type, boost::dynamic_bitset::size_type) [with CharT = char; Traits = std::char_traits; Alloc = std::allocator; Block = unsigned char; Allocator = std::allocator; typename std::basic_string<_CharT2, _Traits2, _Alloc>::size_type = long unsigned int; boost::dynamic_bitset::size_type = long unsigned int]   ~ nc V PNA 1!    zj_ OD 4)    xphP0   p`P0     h H 0    |q f ^XC$ ma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   PRN= alert_flag= page_type=  v bH= :72' tS!2!' !!!lRG B7 4' & r@0=`<0<< v bH= :72' tS!2!' !!!lRG B7 4' &  v bH= :72' tS!2!' !!!lRG B7 4' & <> PRN d_t0= d_tof= i_sv_ura= b_sv_do_not_use= d_pos=(x=, y=, z= d_vel=(x= d_acc=(x= d_af0= d_af1=<> Band<> -IGP t0= lat= lon= give= delay=NN<> searchigp: pos=%.3f %.3fIGP: give=<> SBAS iono correction: igp[0]= igp[1]= igp[2]= igp[3]= x=/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_ionospheric_correction.ccsbsioncorr: pos=%.3f %.3f azel=%.3f %.3fsbsioncorr: dion=%7.2f sig=%7.2fno sbas iono correction: lat=%3.0f lon=%4.0f-DT!?@TX[A5?[A5-DT! @J4?镲 ?"lxz,?(~k ?Pkw?^)?Gz?d]K?Zd;O?S㥛?(?a4?S㥛 @x4@Tbg@cܥL@KK@R@@U@@URu@r"@v(x><> Fast PRN d_t0=(week=,sec= d_prc= d_rrc= d_dt= d_udre= d_ai= d_tlat=<> Long PRN d_trx= i_tapp= i_vel= d_dpos=(x= d_dvel=(x= d_daf0= d_daf1=<> sbslongcorr: prn=%2d drs=(x= ddts=sbsfastcorr: sat=%2d prc= corr. pr=sbssatcorr : sat=%2d<> Sbas satellite corrections for PRN/home/carles/package/gnss-sdr-0.0.6/src/core/system_parameters/sbas_satellite_correction.ccsbas long-term correction expired: sat=%2d time_stamp=%5.0fsbslongcorr: sat=%2d drs=%7.2f%7.2f%7.2f ddts=%7.2f<> long term sv pos correction applied: sample_stamp=<> long term sv clock correction correction applied: sample_stamp=no sbas fast correction (expired): time_stamp=%f prn=%2dno sbas fast correction (not monitored): time_stamp=%f prn=%2dSV is marked as unhealthy: time_stamp=%f prn=%2dsbsfastcorr: sat=%3d prc=%7.2f sig=%7.2f t=%5.0f<> fast correction applied: sample_stamp=sbssatcorr: sat=%2d drs=%6.3f %6.3f %6.3f dclk=%.3f %.3f var=%.3f9v?&†?]m{?&1?8gDio?Dio?Zd;_@Dio@MJl@q= c=@w?-C6 ?9̗?iUMu?a2U0*#?-C6*?a2U0*3?H}=?a2U0*C?H}M?~jtX?J4a?_vOf?F%uk?HPsr? @>@ v bH= :72' tS!2!' !!!lRG B7 4' & Using Volk machine: %s %s;volk_gnsssdr_8i_max_s8ia_genericvolk_gnsssdr_8i_index_max_16uvolk_gnsssdr_8i_x2_add_8ivolk_gnsssdr_32fc_convert_8icvolk_gnsssdr_8i_accumulator_s8ivolk_gnsssdr_64f_accumulator_64fvolk_gnsssdr_8ic_x2_multiply_8icvolk_gnsssdr_32fc_s32f_x4_update_local_code_32fcvolk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_8ic_conjugate_8icvolk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3volk_gnsssdr_8ic_x2_dot_prod_8icvolk_gnsssdr_8ic_magnitude_squared_8ivolk_gnsssdr_32fc_s32f_convert_8icvolk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5volk_gnsssdr_8ic_s8ic_multiply_8icvolk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_8u_x2_multiply_8uvolk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5volk_gnsssdr_s32f_x2_update_local_carrier_32fcvolk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3volk_gnsssdr_32fc_convert_16icBFsse2_64_mmxu_sse2a_sse2u_ssea_sse@@FFFF????IIII}}}}i!"i!"i!"i!"7777*=*=*=*=????????LLLL<<<<****BBBBu_sse3a_sse3ssse3_64u_ssse3a_ssse3    sse4_a_64sse4_1_64u_sse4_1a_sse4_1u_sse4_1_firstu_sse4_1_secondu_sse4_1_thirdu_sse4_1_fourthu_sse4_1_fifthu_sse4_1_sixth       @@@@sse4_2_64avx_64_mmxu_avxa_avxA@@@????????IIIIIIII}}}}}}}}i!"i!"i!"i!"i!"i!"i!"i!"77777777*=*=*=*=*=*=*=*=????????????????LLLLLLLL<<<<<<<<********Volk warning: no arch found, returning generic impl VOLK_GENERICHOMEAPPDATA%s %s %svolk_gnsssdr_/.volk_gnsssdr/volk_gnsssdr_configma {sg WUSF 6& v f[ N HFD7 ' u eZ J? 2 ,*( k` PE 5*   ja_VOG?' jVJ IHFD: 0 /.-,+  yydE7' yiYI9) qQ 1   _ ?   ymga[MEykc[ME?=yM[=ky[E=S[MIG= 210closeSocket closed on port read_somewrite_somePacket error!Exception: set_optionbindlistenacceptSocket accepted on port . Please press Ctrl+C to end the program.Server ready. Listening for TCP connections...void boost::asio::detail::posix_event::signal_and_unlock(Lock&) [with Lock = boost::asio::detail::scoped_lock]p@N5boost4asio6detail12service_baseINS0_23socket_acceptor_serviceINS0_2ip3tcpEEEEEp@N5boost4asio23socket_acceptor_serviceINS0_2ip3tcpEEEiN5boost4asio6detail14typeid_wrapperINS0_23socket_acceptor_serviceINS0_2ip3tcpEEEEE wwХwg>v?(\?;JHhi,iFi`ii8'i4i7i9i(<j@<2j@Lj@fj@jQjZjX]jp]jPakhakd6k dPkfjkgk(gkHokpkpkslv ly:l`zTlxznlP}l~l~lll m$m>m؆XmrmȋmxmmmPmpn(nBn(\n@vn؜n8nn(nnبo,o8Foh`oرzoo@ohoo p2pLpfpppx p px"q"q$8q$Rq0.lqH.q`.q5q5q6q 6r86"rP6yxXyxryxyxyyy yy8yyPyzhy(zyBzy\zyvzyzyzyzzz(zz@z{Xz,{pzF{z`{zz{z{z{z{{{{{0{|H{0|`{J|x{d|8~|h||Ȝ|Ȫ|}(}8>~`| H؂p(̅膻 ( DHH8pTx^x Ԑ4(40@4JX4dp4~444̑4摻455405NH5h`5x555В5꒻5568 6R86lP6h666ԓ666"6<7VGp0GGGGb:gb(zz|̕敻6Xx؞(8PHhx' 0}4}6(9hX;=蓼PHY \X`c0ehhnǼr(ؼPu xp|H #xRR0Xhpȱxر(80HȚЛCPCHsТXs(PȢӾЧӾةX8hHhJxJ@XTPduxpؕ@8ƿX׿(XFFww(h  (KKLx\0Hl(xl(mHp@ h  ȡx(أ8H!#%(8(*H,(3DF IhKH$N$Pg(Qg@Uwh]؁bkhnxpȎh$(%0hTXxT`؃HX(8AA`qqȠؠHX00__ hx0X.Xh.8^(H^noHpxpPA8C`E^P_`hbgHpixwHxxx`yyXy(z zH,|KxjXk( XH(xPhxx(X hx  X h hHP0&)P*.H/Hh4@H8<@AABpBxCpCCCCCCCD0DH(D`8DxXD8F FHGpHHHHII (KK8L0LXMMNNHOXOO`OxPPXQ8R8SSST8U@hU`xUxUUHVXVVV(V@V`WxWXWhWWWHX(XX@hXXXxXXYY(YY Y88ZhZH[X[h[H\ hcccHdHhdhddHeheePepHfhfffgH(ghhgggg(h8HhXhhi(ihi0iPijHjhjj0jPHkhkkkHl8hlXllm(mhm(mHmxmHnhnn(nHxoooo8p(XpHqrhu(x`|}h~H`؁0x(@ȎXhP `hx((hx0p8xhxHxX(@(XH(hh0xXPXH(HxH H  x h  Xh`@P ` 2h4JO8ThTTTTTTU(U(8U@HUXXUphUUUUUUUU0VHV`8VHVhVVV(WWXX@YhYYZ[\(\(\]]8]X]ph^x^__X_h_(x_@`h`(`h`x`aaXa0haHxa`b(b8bbbbxc8cP(dx8dHddPeXfxg0mhoo0pXqrHtw xPxhyz8{H{|@X~@H p ؉ 8 X ،p H ؏@  8 ( ȓ  8 Xx hؘ08Hxhhh(ظh(8HX0X (88PHhXx(PHH0HhHXX X`x(@Xp(h@X8( !X!8#h$(%hB(&Hn&؆&(X8pHXhxȊ؊0H`xX؋ x@ H  Xx!x!8!X("X"h""ؔ"H#ؘ#88$Hx$x$X%%P''h'((P(((ȯ)X)()H*P*ȳ()*+,ص,-(-P-x----0.(..x/h/8/x080(101XC1(VH2Xk2338p*H*h*x**++0+H+`+x++++(+8,H ,X8,`,,8,x /(`/HH0h384(4h448 5 `555h6. 4.P4/p4h/4/50608616X18717(27H2728X>H8xJ8K8K8(d 78dP7Xdp7dh98e9xe9e:Hf8:qx:}:~:~;hP9x99;8;x<X<8<H<< =ȟ@=ȵ;ص;;HH>p@@AH8AB8BC(CؾhPH=X=h=x>>0>`>x>>>>h>>(?H0?X?x?????@(@H8@XP@x@`AAAB0BHBxpBHChCCCC8CD8(DH@Dx`DxDDDDD(Eh Ex8EPEpEEE(E8ExEF0FHFhF(F8FxFFFG G8G`GG(GXGG H(HH(pHXH8I(@I8XI(I8I(I8IxJXJ8JJ(KKK0LLLMhMM(NxPNNHNx%@O&Ox)O.0P0P1`QH1xQh1Q1Q1Q1R20RH3XR8RH=Tx?T?YwPwQw8QxSyPSySHzSz8TH{XT{T|U}PU~UUV@V؃XVxVVWWXWWxX`XXhX(YhYH0Z؞ZZ8Z[@[H[h[[xZHZhZ\\8(]x@]]]^h 0^ _(%_(;H\8;`\X;];P^P_?x`B`(E ahE8aEahSaHabb(bbpb~b@`X``hHb؏@cXccXcc8dhddxdd(cpc؜c(peHeefȝ0fHf`f(xfHfhffhf@gȟxg80hhhhhرhi(m(nXeeehg8gHgh(@iX`ihxiiiiij( j88jHPjxpjjjjjj(kh0kxHk`kxkkxkklh@lhllxm(@mhmmxnno0o8`ohooo(ohp pHpppHq8@q(pqq(qq@rnnnrr(rHsh`sxssss8sXtx(t@tXtpttHtht8tXurs8sXuhuxuu0vHv(hvHvhvvvvw(w(@wX`wwwww pu( uH v Xx px x8!xX!y!8y!Xy"xyH"y"y"y#z#@z($zh$zX%zH&({('P{H'p{'{4{60|9@x:x(:xx:|:|: };8}8;h}h;};};}(<}h<~<(~~H>8?H(@xA(AxAQ8(TW|W|W|X8XXxXpXXXЁXY8YXY0YPYpY(Z[(Xc`kl8lXlz8|80Ȁp(Hx؅88xXx(h(PȄx؇ ȇ8@(HHȉh(@(hȟ8x @`8xHxx،ȥX(8XЍHH`hضЎX0طPxHȏ8(PغȻؐȼ088 (h 8hXȓX(Pؔh(XXH(HЕhxPؒ8`xؗ(H x@`8x(Xh@h8 HX Hhx0H(X0PpX؝HxPh؞(H`'ȟ(*--`-.(.8.X.Ƞx.(.@8/h///ء080X0 0H0hH>@>X>p>??Ȥ?JK`(KxKKKKȥK(L@LhM8MXMئxMMM 8NHXNh8ZhHZhZZZZ0ZH[X[x[[[ [8[Px\x\xhh`hhi(i@8iXXiiЪii j8(jPHjhhjjkȫuupvXv@hvXxvpvvv(w HwPhwhwwwHxحhx8(Hhpȃ؃X0PȄȯ(ȅ(XЮ8аȑH(`(ȓ 8P(hȔ(H H`xء8h(XpȢx0ȳ(8@XXȷhظ`xصض 8Px(x`ع(8x(@`xhhx8PX xȼhоHpHhHp(HXнhx0H`xȿHXh8Php( H  (( @H (h ( 8x$P&('()8X)X)p*X+(,1`1(48@8(@P8@hH@X@@@@ HAPXCxCG(HJ`JHLMx\\\\\\8]X]] _X_dHg0gX(ijx`xxxxxx(yhyyy8zh|H| hPȆ8P(h8Hhț88(Xp((h0H`x(HhhȷHX p (88PH XH8X8hpxx@x8  ( @ X p h(x`8h(x(H 8P(8.H:X=@@@X@p@A0HA0XAABBB(CXEEEEHH8hHL^@HgjmHm`mxmmX(n(8nxnnnHpH8qxHqXqxss((yx0X@Xpȝ ؟H@Xp8XHX(8Ph8H0`h(H@hXX@Xx`0Hh(P8HX0h8(x `$H($`8$xH$X$$$8$P%X%&&h'((P(x(*,--(-@/x0x6@P[X^@abb(b 8bxbbb(b@8cpdhexeegHgmhHȎ؎hH8XPhHȑx@(hXxh@؝Xx(x@(8H(Xx PةxحPHȰ8XȲpH س8X`ؽ@X8`hX p 8 X   x  8 h H0 H h  ( x   ( 8 H X h @  ( (H H`   h` xx       8x 8hh8Ph(8HXx(xHxHX0xH`xXhH8(P8p @(Hxx0XXxx0PH 8X(Hp8X 88X(0X  8HPhp0H8x(@hhx`(( h  ( @!pX"#@#X$p$($8$H$h$$$(%H%%H&xh(x(0(H(`(x((() 8) h+ + 1@!7!880 8P 89!X9"x9";";"?8#8Cx#C!D0"(DP"xD#D$D`$Dx$(E$HE$F%XG8%H`%8H%W#W$X8$XXx&hX&X&Y&Z'Z('[H'([`'x['h]'^&_&(_0&8_H&H_`&X_(h_(_(`)xa8)aP)ap)b)Xb)Hd)e((e@(fX(fp((f(8f*Hf*hf+f(+HhX+hp+h+h+(i+k,lP*lh*l*l*l*m,(m,Hm-Xm-hm.m.mx.Xq.Ht.vx/{/|H0((1x`223(p,8,H,h,x-(-@-ؗ`----8@/0ș0x00h181x1 2Ƞ@225X55<= =8=8X=Hp=h=Ȥ=X?8?X?x@8@AجHABH3ȯ`3دx33333(384H 4X84hP4xh44444Ȱ4ذ45(5@5X5(p58666687H07hh7Ȳ777(8 8@8ȳ`8سx88X8x89(9ȴ(;8X;;;;P<Xp<<<x<ظ<>H(>X>H>(>X>h?p@@8@@XxAAA(AxHB(xBBBB@CCCDHDDD(EHhEEE(EFpFhFHDXDh E@EE8F@GXGpGG8GX0HXHHHHG(GG(GxHxIIIJ( JHJ(pJHJJK(KhKxHI`IIIJ(L8LX0LxLLLM8MX`MxM M K K HL hL L8 XNH pNh N N OH(OPOHxOOHOhP8P`PPP(N@NNNhO@QQQQhHR`Rh(Rx(S+@SH/TH4`TH8T(:TH:XQX:pQh:Qx:Q:R:S`U8>Ux> V>8V>V>V?V8@W@8W@XW(AW8AWCX(EXX8EpXHEhYFYF(ZIZ(P@[R8\\\hb\hf(]hixUxiUiUiUihViXjXjXHl0YlYlYmZoZHp[8r[ht]xt^t^8u@^uh^u^(v^w^w0_{_X|_h|_x|_|_|_|PaaHaXbXXbxbء]]]]_X`H``X`ax`cxcتc(cXc(d@d(XdHpddHdhd@eXe(e8eHeXehgȹhH@hhhihijhjxjkXkcc0cHc(f@fpff(f gpg`h(hhiHkX8lPlhlllhlm8mx`mmm80nHn`nxnnnX oH`ooo!8p8%kH%kX%lh% lx%m%r%r(& sH&h&(8'X(Єx)*@246p6p6p6p6p6q6 q68q7Pq7hq(7q87qH7qX7qh7qx7q7r7(r7@r7Xr7pr7r7r7r8sh8s8t8(t9Ht(9t9t9tH:(u:Hu:u(;u;u;v{> |>@|X?`|?|@|x@|@|8A}A }A@}XB`}B}C}xC}C}8D~D ~D@~XE`~E~F~xF~F~8GG G@8H`HH(IxIIJ hJ@J`KXKKKHLL L@8M`MM(NxNNO hO@O`PXPPPQh(SSTUVP8WW W@W`XHXxXXXY 8Y@Yh\X\x^^`H8apXccȈef 8hPhxjjЉmhm(oXoqHr؊Hs HthHuHvHw@HxHyЌHzH{`H|H}H~8(hhH(@x(؆H(hȋА08XHXXHxخ8x@XpȻЕPx(H(hpxx@xИ8@XؗXhЙ0Hhphؚ( pHЛXx`xXX0P88НXH`xОh0xП8H0P( hP0ءX0XآH0hH`(x8HpXФ  X 0H`((@8XHx8Ph8 h#X&h&&(*ئ*++ (+@h+Щx+++`+xx,,x-.08.P;;(;H;8;;;0;(<<Ь(==8H>`h>8KЫHKXKHxKhK0KHK`LXLخLXM@MhxNNh[x[[x[[\вh\\(]@]ȴ]_(_XiXlh0H`xȇ؇ذ( 88HPXhhxȱȈ 8X(p8HXh؉Xȳ8H(08Hp(Ȏ`ؔ(еXh(@ȕXx(hȶxȖؖ0P(hhxȗطؗ((8@x`xظؘh8X88 H8HhXXhȻhؼȫ8`XhHx( (xxȾ(x8 `x8@x8HXh x8PhH8hxhPHH(PpX   8 Ph(8Hx(8`(x"&h+3PIHg hg8i`(kkxlm(mpXpp8xrs@x(yxz8H{x}(xXȑPhؖxXȣhxHh0HHh(h(hphH(0h Hph (hX($&x+X?d d88ePexfijkPlHmno((p@ph(qHqhqhrP8thtv8(yXXhXxhh(0xF^`x h  HI I dPȋHHEhHHhpx0H`8xHXhx 8Ph8Xx(H`(8X@8xx8 H(` H`X(8` H0 H h  h   H  8Xp(hx(H(`hxH(X@`x8HX8PhXhx(@XxXhx8H(Xp0HxxXh8H X8(h8H(8(@((h% &X(9<8X>`?@@AABHB`CCDDE E8FhFGHI((I@JhKOhQQ@SU(U(HU@Xh[]XcHghhXihjXnqr((rHvxxxyyH|H|P (  ȉH h h ȵ( ض`  X 0 ` 8  hXx@Xph80XH8hxPh8X@8h88 @H X   !!0X"`"#X'(h'p''8'Ph))x-/X3334X488;?@BXF0>Kx?xM?HN@]@]hA`Ac(BfBiChmCpDxtExE{E(F GPG(GȁGxH8HH؄ 8Ph(8HXhx(@Xpȅ؅(80HHX`hxxȆ ؆ 8 P h  ( 8 H X h x!(!@!X!p!ȇ!؇!!!!"("80"HH"X`"hx"x"""""Ȉ#؈ #8#P#h##(#8#H#X#h#x$($@$X$p$ȉ$؉$$$$%(%80%HH%X`%hx%x%%%%%Ȋ&؊ &8&P&h&&(&H&x&&' '8'ȋP'؋h'''8'H'h'(0(H(،h(((((H(h()()H)؍`)))()H)h)x*(*@*؎`**8*h**ȏ+ +(@+X`+++++H,x ,@,ȑ`,,,H,X,h,x- -8-P-h-Ȓ-ؒ---8-H.h(.@.`.x.ؓ...(.H/h /@/X/x/ؔ///(/H0h 0x80X0p0ؕ000(0H1X1x81P1p1Ȗ111(181X2x02P2h2ȗ222282X3x03H3h3Ș333383X(7(@7X7țp77h7877؟78x8H08H8`8x88888H9x09P9ئp9989h99ȧ:0:(P:Xp:::::H;x0;P;ةp;;8;h;;Ȫ<0<(P<Xp<<<<<H=x0=P=جp==8=h==ȭ>>H?ȯ??(@X0@P@p@(AHAXABصhBBHBxC(CػHChCȽD0DHPDpDDDH`EE0FPF(pFXFFFxGPH8Hh IPIIII(8JhJJJhJKX8K8pKKKLHLhLLLMX M`MMMMHMxN8 NPNNNHNxO XO O( OX O O (P PPX PP(PQhQQQQRPRpRR8RhR"S"(S"@S"XS"pS#SH$S$T(%0TH%PT%xT&TH*T+HUh-U/VVh?VCHWXDWhF(XKXMXHQhYHRYxRYS(Z(THZhThZTZxUZU[VH[Vh[W[hZ[Z[8[\\(\\P\_\8a\fX]f]xi]i^8k@^kx^m^m^m^Hn_n _Xsp_s_t_t`xuP`w`xx`x`Xy`xyaz a{paa؆Xb8bcȑpccHddd eHe(`eXeeؠ(f@fhf(fHfXHggȥgHgh(h(HhXhh(hii88iiȯiدiHjXPj(jjPkHkk8lXllm8Pmȿmmmnx0n`nno(ohoo(oh8ppp(p@qqqHrrXsh0sHs`sHxsxsstxXtt(txu@uxuu(uhvvXvHwxwwhHxxxx((yXHyh`yxyyyz(z8zz8zh{@{h`{{{{ |P||0} } } } }( ~x P~ ~( ~  @(x((8h8HȀX0hX XXX x8hH؃PXȄ0h8Ѕh8ph(h`8ȇ8(xPx H%Ph)Љ8, (345Hx689 :8x:X:p;H;;;(H>Ȏ?H??H?H@@@8HApABؐBB 8C8hChCDؑhDDPEhEȒEXFFHF(GGG08HpHHhIXJHJKKؕLXLHLMhMM8NpNPT@UxVVؘ(WW88XhXXXș8YXYxY(YHYhZZZȚ([x[8[x(\\\((]`^_aHhbxbbc؝cd@Xdxdehe0ehfff(g xgXg(hРhhH(iiiȡHjxjjHkxkk(l8xlpllhmأmm@8nxnnHo0ohoopХpq8Xqpqrhr(r`sssȧs(t0xtht(uu uX(vvHwةxww@xxxxx(y0xyhyHzЫz{h{P{|Ȭh||@}xh}}h~~@XX8ph P(8P8ȱ@8xH؆زXHX8Xp؉Xд؊X0`xص؍ (Xx؎ж(H؏((H(x(8Hhxй8Pؖ8Ⱥ@8x8@ȚpXм0hXhXȾ؟h@pп80`88 8PئhXHXX0ةhxH8xX(`xȭhȮXxȯ@p8h(hhhP8شX8xX(X`طXظX(عXhx0ؼ`(xؽ(Hؾ((H@xpx X(xH8hHX0xHxH(`Xx@XpHHPH88Phh0hh8Hx8888hXx(XHx8(px( `(80HhHXHH(XHhH(`XX@xX((X((HH`xx@x(x(HXh8@H0hhh8@x8(h88h(x `((Hx((8(h(((X(H@H0HhHH(Xhp8PH   8h h 8   8 `  8  Hx(x0p( (XHx@x(x0hHhPh@hx(X`hP(X8pX(X`(   H!H!!H""8"pH##h$$ $X8%%%H&H&&h'(8(0(h(8)))X8**+++@(,xx,,(-(-h-(.. H/ x/P / 0 x0 08 (1x x1 1 H2 20 3` h3 3 4 h4H 4 5 h5 5( 6@ 6p 7 X7 7 8Xh88998(:PX:::X;0;h<X<<(=H=`=H>>>@H?x??H@(@X@pxAAAHB(BhBXCCCPDhDEhEEHFxFFG0G`HHII JPJhJ8KKKH8LLL8M0MhXNNN(O O`O8PPPHXQxQ(RxRR0(SpxSS(T xTXTUUVhVHVWxW W8 Xp X X 8Y hY!Y8!Zp!hZ!Z![("h[`"["H\"x\"\#]P#x]#]#(^$x^@$^x$X_$_$_$(`0%`p%`%8a%a &aX&(b&xb&b&xc'cH'xdx'e'e'f(f@(8gp(g(Xh(h)xi0)j`)Xj)j)8k)k *HlX*l*Xm*m*xn+oH+ox+(p+p+Hq,q ,rP,hr,r,s-hs8-sx-t-ht-t.huH.ux.v.v.w.Xw0/wp/x/hx/x 0yX0y0z0z0{1{H1|x1|1|1(}1x}02}p2(~2~2~ 3(X33H3x3Ȁ4@4x4ȁ4(4x05Ȃh5H555h6P66h6ȅ7@7hx77h778 8X8؈8889H98999:؋0:(h:x:،:(;X;؍;(;;H<x@<ȏx<<x<Ȑ(=(h=x=ȑ=H> >P>h>>?h8?Ȕx??h?@x@@@@A80A`AA(0@8H@X`@hx@x@AxB(BHBBB؛C(0CHXCȞB؞B0BHB`B(CHD`DȟDD8DXDEȡ(EHCXCxDD0DFFpG8GHH80MXMMMXSxS`XxZp\0]]^EEEEEFF(0F8HFH`FxxFFFFHGHHHHxHI(I@IXIxIIJ0JhJJJxKX@K(pKXKxKLH@LL8LLXMM8 Nh@N`NNO OPOOOXOPP8PPPhxPxPPPPQQ0QXQpQQQQ8QHQ R8R(XR8pRHRRRRHSXSh0SSS0T(hThTHTh0UU8UUUVhhVVV WhWWW(XXxXXX0YxXYYXZZZ Z Z![!0[%[%[&(\'\)\*]+]-]/ ^X2p^3_(5x_H5_7_7_7p`9`;`b(@a8@(aH@@aX@Xah@0b@bBHcEcEcHFcH dIpdxId(Kdp eqHergX}`gH~ghpeXeXfpfg(hHPhhph(h؊h ii8ihiij(jx@jpjjHjjxkkl( wH6Pw60k9k9k(:l:8l;lxw>xC@xmxmx(nyhn0ypyqy8qyXq@zrhzrzrzt{u8{Xv`{wx{w{x{8y{8}8|~P|~h|8|||x}}(H}`}h}}}(}8~x~XH~p~x~H~DJ0dd0efff@fXgpg(giЁhiiHjkXlpxlmȂ(p0qxrwyH{~8hЅhXІȆ(PXxЉ8ȫЀH@( hh0xHxhH؍h(Pxx8؎X0xH`xЏhP(G`(MP 8Q8hQPRR(h@xXph(ȟ8@hxȝXPhxء@(pتȢh عxxXȾ@Ȥ(@x((@HЦ`(PH@h0XЪ p(XЫXpx8h0H`(xȭ0H(`Ȯ8xXph`8PX@ H 0 г Hp`x8P "@(%H')0X,.иh1 3px69;`(>@HCPEXHxJ@LNxQ08ThVнX X[p](`Xb`egiPknp@(su(x0Xz|~ Ȁp؂h`(8XpXx`؎ؑP8Xȕ@8X0ȝ Ƞp8`Ph@0HhX xpȹ`hPH@h08 Xp`88PHhXhxh0XX(hPxX8(08`hxHx hXPhX(`X@8X8hx@D@MhSTT0X`X\]^`(Xa`bxddhe8giPkxHnpHqs8HtP8x|8|h||| PHȅx`(؍ؔ((pȜxX(h0(08xHXH@8X8  0xx(PXx8xhH8(#(%@('X069x=hXFLL0HMXHQTxW(YXZ[H\(^X_`Xbc(ixpqrhs( tX tx Hu w y { (~X  H 80 h     8 h8 P h  H  ȝX x ( (pHXH0ȺxHH`xH@x 8X0xHPx!""P##($$ %X&'(X+ H/p1H3=C@E`IxR(XPXxhYh]acHe0xf`ghHjHmHp0xqPspxtu{@X؄p؅h H@hxP( xH إ` h Ȩ  ( h !ج@!p!H!"8P"""H"#`##$8H$$($h %%%& &h&& &#0'%x'X+'0H(X3(5(8 )8;h)<)>)X@@*B*B*8C*C(+8DX+D+XE+XF,XG8,XHp,XI,K,O-XR0-SH-]-c-Hf.8jX.s.x.hy /zH/~x//8//0H80p00001X1h111x1(2ؠH2xh22أ2x2H3H3x33 4ȻX4h4Ⱦ4h445((5h@5X5X55H6H68667h7`777H8X88H 9h998:P:hh:::X,0;H/x;82;7(<<<x?<B =Dh=XG=I=J@>xL>8N>N?XO@?Op?XP?P?xQ@xRH@xS@xT@xU@XA\`Ax^xA`AiAo0BXrPB8vB~B@C`CChDPDpDDxE(E@EEEX0FFF GxpGGH8`HHIh(IPIIIII 0JJJ' K(PK*Kh+K,K6@L(CLKLNLQMR0MhTPMUhMWMH]MHd NHe8N8fPNfNgNiNk OXl@Ol`OnOpOrOtPhv(Px`P8}PȁQxPQ(QȌQh@RX`RRHR8RȝS(0SXHS`SȞxSSShS8TTTH U8UȱPUUhU80VVVhWXWW(XhpXXXXh(YhY YY`Z8Z[xX[![#[h%0\'x\(\*](+@]+x]8,],]H-^-H^.^/^0^1(_x4H_h8_:_h<_(F`(Lh`N`R`Z(aX`xabafao8bxubxb{b؃HcX`cxccdhdXdhe(XeػeXeHff8f(8g`ghghgghhhh8hhiXiHixii (j8xjj(k+0k.Hk8/hk0k82kx3k9l@XlAplBlHClClF mHXmHxmHImKmLm(OnP8nR`nUnYn(^8oaoeo(i(plxpppHspspwq(zPqzhqzqzq({qh{q}q((rhprrhs(Xs؊psssH(txttuHXuuȟuPvHvvv8w8xwwxxhHxxy`y(yyh8zzz{HX{{h{{h(|`|||}@}x}X} }8 ~ ~(h~~(~!()x.x148<B؀DHHORSȁ[_hd8kXsXh~hHhhh8H؅h8xІȳ88X؇(Xh8H8XXp @XpЋ8# #P$&(H)*@*`x+8-/؍81204X6;@0CXGЏJ NpOSАXVV X`[^ȑ^X_ a(bȒcc0exfȓhgh`hxhhij(k8kkpln8qtؘHXhxؕ 8P8hH(șx؏(@XXȐpؐ(XК(X0H8`XțؖXXzRx k*zRx $hu@FJ w?;*3$"Dn\ntnmmmmmmm4mLmd k2|HkDzPLRxPzA <$pmܼBAD JO  AABA $oSAI  DA $HoaAG D AC 4o=BAA G@y  AABH $|pqAG L AK $pqAG L AK $HqqAG L AK LqYBBF A(D0 (D BBBG A (T BBBE $DiAI z AK $l(jAI z AK D`rm-AAD ^ AAJ k DAB DDA$rAG D AC $sAG D AC $xs 1AAL T`t $XtOAAL t $tcAAL @u D\8umwAAD ] AAK k DAB DDA4`u<Xu{BBD A(JPt (A ABBC u4AY A veAq A <<XvBJA A(S0o (A ABBJ \ vQBBE B(A0A8D` 8A0A(B BBBE o8A0A(B BBBlwAY,w>EDA pAB$xAG e AB ,pxAAG0v AAG x-Ag4y x-Agly $yAK Y AJ hy 4`y5Aoyxy py5Ao4yLy y5Aoy y5Aoy$DyAK a AB z  z z=AwL (zd z z=Aw 8z 0z $<(zĽAK a AB  z ,|zfȽAL K A G D,zf̽AL K A G D${нAK i AJ  {  x{ ,4 p{ԽBAD a ABE Td |콋BBE B(A0A8M5 8A0A(B BBBG < صrDBAA G]  AABD 4 UBDA w ABO AAB ЂAY4 ЂUBDA w ABO AAB AY4< UBDA w ABO AABt AY4 UBDA w ABO AAB HAY4 HUBDA w ABO AAB$ pAY4D pUBDA w ABO AAB| AY, 5EDA gAB AT, 5EDA gABAT,<5EDA gABlȃAT,ȃ5EDA gAB؃AT,؃5EDA gAB AT,,5EDA gAB\AT4|UBDA w ABO AAB AY, 5EDA gAB0AT4$0UBDA w ABO AAB\XAY,|X5EDA gABhAT4hUBDA w ABO AABAY4$UBDA w ABO AAB\AY4|UBDA w ABO AABAY4UBDA w ABO AAB AY,,5EDA gAB\AT,|5EDA gAB(AT,(5EDA gAB8AT,85EDA gABLHAT4lHUBDA w ABO AABpAY4pUBDA w ABO AABAY<EEB D(A0h(A BBB\AT,|5EDA gABAT,5EDA gABATD$BBE A(F0 (D BBBA D-BBB A(D0 (D BBBD L؇BBB B(D0A8Gp 8A0A(B BBBK 4l8CLAAJh AAJ 4PC|AAJh AAJ $hAAL$ wܿAF@m AA ,,xe쿋AAIpF AAE ,\%AAL  DAA  ,3AAL z DAC d@ ,8KAAL z DAC ȕ <4JdBBD A(L0 (A ABBF DtЖOHB A(D0 (g LBBB <(BAC G  AABA DZBBE K(A0 (_ `BBF <D BAC G  AABA D,OEB A(A0 (g |BBJ <(\BAC G  AABA D |OEB A(A0 (g ~BBH <T@BAC G  AABA D-BBG K(A0p (_ `BBA <BAC G  AABA DȥZ‹OEB A(A0w (g }BBA <d<‹BAC G  AABA <J\‹BBD A(L0 (A ABBF <‹BAC G  AABA D$‹OHB A(D0 (g LBBB <l‹BAC G  AABA <J‹BBD A(L0 (A ABBF <ȯ$ËBAC G  AABA D,\DËOEB A(A0w (g BBA <tlËBAC G  AABA DËOHB A(D0 (g LBBB <صËBAC G  AABA <<JËBBD A(L0 (A ABBF <|ċBAC G  AABA DZ(ċBBE K(A0 (_ `BBF <TċBAC G  AABA DDpntċOHB A(D0y (g IBBA DċOEB A(A0 (g }BBI <ċBAC G  AABA DbċBBE K(A0~ (A LBBD <\ŋBAC G  AABA L, BBB B(D0A8G@ 8A0A(B BBBJ | h BFB B(D0A8J@ 8A0A(B BBBK ` 8A0A(B BBBF _ 8A0A(B BBBG T 8F0A(B BBBE L!BBD A(O@V (D ABBI ] (A ABBE Ld!BBE B(A0A8DL 8A0A(B BBBI 4! MBAD q DBJ AABd!8BBB B(A0A8Dp4 8A0A(B BBBE k8A0A(B BBBT"`AY< `7ŋBAC G  AABA 4"0BAD G0~  AABA ,"HEDA zAB#AT\<#?BBB B(D0A8DP 8A0A(B BBBE t8A0A(B BBB#AY<,"VŋBAC G  AABA $l"RAuŋAI0: AA $$<$[T$[l$[$[$[$[$Z$Z$Z%Z,%ZD%Z\%Z't%Z%Z%Z%Z%Z%Z&Z&Z 4&ZAST&Z l&ZAS&8mA&:mA&D&$mA&2$'sAI b AA $,'sAI b AA T'Y5l'Z5'0Z5$'XZaAG D AC $'ZaAG D AC $'ZqAG L AK $(@[qAG L AK $&[yȋAAL d(@\ $&8\ ȋAAL ( ] $,'] ȋAAL (^ $l']pȋAD0O AA 4'QȋBAD D`  AABA $'ȋAD0j AH ,'ɋAAD@p AAH ,$(]v+ɋAAR u AAA $)^yAG0j AA |(X^,RɋAf,*h^ $(`^VɋAK Y AJ l*^ $(^^ɋAK Y AJ *(_ 4) _4bɋAn*@_*8_ $)0_fɋAK a AB <+_ T+_ )_4jɋAn+_$*_nɋAK a AB +` T*`<rɋAv, `,` $*`vɋAK i AJ \,` t,` $*x`ɋAK a AB ,` ,` $T+`ɋAK a AB  -8a $+0aɋAK i AJ L-a d-a |-a_FP J y< ,XɋBBF A(Lp (A ABBF DL,tɋBBB A(A0GP5 0A(A BBBA <$.Pa#BBA A(G@ (A ABBE d.@b~D0] G 4,ܺ0ʋAI@*HEPfHA@b AA D,-hba͋BBB A(K0Jp 0A(A BBBG Tt-@cDx͋BBB B(A0A8O 8A0A(B BBBH T-#͋BBB B(A0A8J 8A0A(B BBBG $$.hf΋AAL$L.Xj΋AG@} AA $t.j΋AG@{ AA ,.Hk΋AAGPP AAA ,.l ΋AAGP~ AAG $.l΋AAL<$/`n}ϋBBD A(K (A ABBH ,d/qaϋAAL  DAI $1`r ,/Xr%ϋAAL  DAA l1Xs ,/Ps%ϋAAL  DAA 1Pt D<0HtЋBBE A(F0< (D BBBA D0u8ЋBBE A(F0D (D BBBA D0vC\ЋBBE A(F0 (D BBBA D1w3|ЋBBE A(F0 (D BBBA $\1xЋAALpL1yQЋBBB B(A0A8D 8A0A(B BBBF d3}Dd|3}^BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA 4T2~ЋBAD I  AABD $2(ЋAGpJ AA D4Dd\4HUBBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA ,43@BыAAJ AAB 4d3 QыAAJ~ AAA ,5(DdD5`pBBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA ,4hYыAAM AAF 4L4rыAAJ AAA d6*BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA 44X!ыBAD I`  AABD ,$5ыAAGpo AAA 6 Dd6X3BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA ,50ыAAJ AAJ 461ыAAJf AAA 7Dd7 BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA ,6؈;ҋAAM AAG T6TҋBBB B(D0A8L 8A0A(B BBBC d8`BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA D7ҋBBD A(G (A ABBD 9ЉDd9@BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA ,t8ҋAAJ AAB ,8ӋAJ0 AD d:Dd|:؋^BBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA ,T9Ќ[aӋAAM AAE 49@,zӋAAJ AAE LL;ȍBBB B(A0A8J@ 8A0A(B BBBG L;,BBB B(A0A8J@ 8A0A(B BBBG L;xBBB B(D0A8G@ 8A0A(B BBBH L<<8BBB B(D0A8G@ 8A0A(B BBBA D:WӋBBE A(F0 (D BBBA LD;ԋBBB B(D0A8G@a 8A0A(B BBBA D;`@ԋBBH A(J (A ABBK Ll=xBBE B(E0A8J@I 8D0A(B BBBG <=ȝBAD M CBA g FBG <l<8gՋBAD J  AABJ L<>h<BBB B(A0A8J@ 8A0A(B BBBG ,>XAAD T AAA t>BFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA D=` ՋBBA A(Ja (A ABBI ,=H(֋AAL  DAA D>#H֋BBE A(D0 (D BBBA Dd>`|֋BBH A(J (A ABBJ $>t ؋AG   AJ L>J$؋BBD A(D0GX 0A(A BBBD T$?5 ًBBB B(A0A8Gy 8A0A(B BBBD T|?9ًBBB B(A0A8J6 8A0A(B BBBD dA|AxA AAA(A B$BoڋBBE B(D0A8M 8A0A(B BBBH <4DPڋBBD A(I (A ABBA 4tDڋBAD G  AABA <DؿۋBBD A(J (A ABBA 4DPۋBAD G  AABG <$EpۋBBD A(J (A ABBA <dE0ۋBBD A(J (A ABBA DEiۋBBA A(L (A ABBC ,E`܋AAK0h AAA ,Fm܋AAU0h AAA 4GX%BAD G0  AABH HP ,HlDHl\HltHlHlHlHlHlHlIlIl4IlLIldIl1X|Il5IDI2Il5Il54Il]BAA E DBI AAB,Hq|܋AAGPD AAA LH܋BBB B(A0A8G`T 8A0A(B BBBA ,IX܋AAG@z AAK 4LI܋BAA G@  AABH LK0lBBB A(A0 (D BBBM A (A BBBH LdKlBBB A(A0 (D BBBM A (A BBBH ,K0m1BAD fABDTJ) ݋BBB A(D0D@ 0A(A BBBF ,LALLLlSTJl$݋BBA A(J@ (A ABBB  (A ABBB <LHnBBH A(D0o (D BBBF ,L(o5EDA gAB4,M8oBAD G0  AABH LdMoBBE B(A0A8DP 8A0A(B BBBD MqELMqBBE B(A0A8DP 8A0A(B BBBD DLs4݋BBE A(F0J@ 0A(A BBBA LL@uZ݋BBB B(D0A8O@ 8D0A(B BBBA T$MP/݋BBE B(D0A8S 8A0A(B BBBA < OuBBA A(G@ (A ABBG LOv%TMދBBG B(D0A8D 8A0A(B BBBA <,Nv ߋBBA A(I` (A ABBG TlNX0$ߋBBG B(F0A8J) 8A0A(B BBBA ,TPwAAD T AAA tP0xBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA TlO8+BBG B(A0A8G 8A0A(B BBBF TOGBBB B(A0A8O 8A0A(B BBBA <P_GBBH A(GP  (A ABBE QD  A  RHB'<PwBBD A(N (A ABBD <Pz:BBD A(O (A ABBF <Q|[BBD A(N (A ABBH <TQ|BBD A(N (A ABBH 4QBAD L  AABE 4Q(BAD L  AABE S3$SAG I AF TDRBBB B(A0A8G$ 8A0A(B BBBA 4,TXpAAK F DAH DFAdTALdTBBF B(A0A8D@ 8D0A(B BBBB M 8D0A(B BBBF 4T(XBAD k ABK TAB$UPAWDU\UtUUUUUUVVx4VpLVhdV`|VXVPVȉV0V(V $ WAG J AE $4WvAG @ AG $\WAG J AE WDWh?A\ K QW2$WsAI b AA $WhsAI b AA $$XsAI b AA $LXsAI b AA $tXpsAI b AA XȊL$WW#BBG B(D0A8P 8A0A(B BBBB LtWЭBBG B(D0A8Pp 8A0A(B BBBD LWBBG B(D0A8Pp 8A0A(B BBBD LX EBBG B(D0A8Pp 8A0A(B BBBD <dXPBBD A(M@b (A ABBA 4Z4XAC HDX. D 4XAC HDX. D 4,YHAC HD. E $dYp]AI0Q AA ,YAAGPq AAA 4YhEAC HDJ. B tYwFAC HD.H.o.H.f.o.t.k E S.x.J.o.I.f.n.t.z.\lZAC DS.v.t.u.t.q.q..h.  J f.\ZAC DS.v.t.u.t.q.q..h.  J f.\,[hAC DS.v.t.u.t.q.q..h.  J f.\[#"AC HQ?..s..s..s..w.  F f.\[8"AC HQ?..s..s..s..w.  F f.\L\xM":AC HQ?..s..s..s..w.  F f.,\VAAJPV AAA l\bqfcAC HD, ...A. .C.% ...B. .A. D ^I^ _H$_AP$D_EAL n DA l_2_D_1X_4A$<^AV0{ AA <d^BAD Jm  AABF <^BAD Jm  AABF $t`AN  AA `AL$`nAG P AG $`nAG P AG ,|_H{8 AAJ0B AAA T_H$H BBE B(D0A8T  8A0A(B BBBH 4a@CAAJ e AAE DDA$aFJD (P0i(A T A a- b$b,AP$Db,EAL n DA lbH2bpDb1A$$a` AV0{ AA <La^  BAD J  AABF <a  BAD J  AABF $\cAN  AE cALTbr BBE B(D0A8T  8A0A(B BBBF $cEJD (P0i(A T A $d^AAL  DAE d_ ,_o>AAL  DAE ` $4`k>AAL`$\ak?AAL`< c?AC HG.J.Q E Lĕk5 @BBB B(D0A8Dp 8A0A(B BBBA ,lAG u DG a DC <Dpm @AC HG.J.Q G Lu5p@BBB B(D0A8Dp 8A0A(B BBBA $ԖvdAAAM$xABAD MD$@RxABBA A(G (A ABBA <lxT@ BBAA G  AABE <HVD  A \t{4{AS$ęEAL n DA {2{DNA4{'AX I T{2Ak A t|2Ak A  |2Ak A @|;At A Ԛ`|;At A $|9Ah G C A <|BAD  DBM A ABA \H}-Af A |A A4(}?AAI X CAI DHA,T0}@BAASP AAD ,}SBAASP AAD $D~AG  AD lhAL<he BAC HD[.0. C D<THBBA A(G (A ABBA <ЍpgHBAA G  AABA T@UVD  A t0H@8ԝ@ȞAP$ ȞEAL n DA 42L(-DQ K l8D4A(T0X̞8T@RHYPV,XTD`'AX I dp1Af E R$AG  AF ğ@AL<T@r HAC HD_.0 D [.$bVD  A D\Ȝt8AP$ܠ8EAL n DA 2-DQ K <DT~AlTXTR̡ȜYМV؜T'AX I 41Af E TR$lAG  AF AL<$j hJAC HD_.0 C [.`pVD  A ,84D`\xAS$|xEAL n DA  2HDԣA8'AX I  H2Ak A ,h2Ak A L2Ak A l;At A Ȩ;At A $9Ah G C A <ԤBAD  DBM A ABA -Af A 4ALA4d?AAI X CAI DHA, 4LAASP AAD ,<XGLAASP AAD $AG  AD $ЫAL4DЫDAAR V CAJ D AAA <d yLAC HD.0. D D,HRBBA A(G (A ABBA <tPp[RBAA G  AABA Dp|VD  A d|Ƚ4AS$̧EAL n DA 2 ؽD$A<Ƚ'AX I \ؽ2Ak A |2Ak A 2Ak A 8;At A ܨX;At A $x9Ah G C A <$BAF  DBF A ABA d@-Af A AA4 ?AAI X CAI DHA,\(RAASP AAD ,RAASP AAD $LAG  AD t`AL4`DAAR V CAJ D AAA <<x RAC HDX.@. F D|HXBBA A(G7 (A ABBA <ĩpXBAA G  AABA VD  A  ̫AS$EAL n DA ,2DD\,AtTWWYԬYT 'AX I $0;Ap E DPR\FAtHA4(?AAI X CAI DHA440e0YBEA R@X  AABJ 4lhZBEA U  AABI 4[ZBEA U  AABI $lxAG  AI PALPO<<X ZAC HD[.0. K D|x`BBA A(G (A ABBA <ĭp`BAA G  AABE  D w A ̯4hAS$hEAL n DA Dp2\DtbA'AX I 2Ak A ̰2Ak A 2Ak A  ;At A ,;At A $L89Ah G C A tP-Af A \A^A4ı0?AAI X CAI DHA$8AI z AK $$AI z AK ,H`AASP AAD ,aAASP AAD $AG  AD ԲALO<|/ 5aAC HD .0. C $T/TcAI0* AA TP fBBF A(Kq (A ABBC 1UMAD<iBBA A(G (A ABBA <piBAA G  AABA T`ɻl+P4xP+AS$ԴP+EAL n DA 82$`sAI b AA $<sAI b AA dD|A'AX I 2Ak A Ե02Ak A P2Ak A p;At A 4;At A $T9Ah G C A |-Af A A4$ jBAF LP  AABA ,\6jAASP AAD ,HIjAASP AAD $LAG  AC tALO<4 jAC HD$.0. D $tŻT/TlAI0* AA D(%oAAPq AAK SSLtG'4'ԸGAS$GEAL n DA '24'DL ߹Ad''AX I '2Ak A (2Ak A Ĺ (2Ak A @(;At A `(;At A $$(9Ah G C A L(-Af A l޹A޹A4x(?AAI X CAI DHA$Ժ(AI z AK $)AI z AK ,)(oAASP AAD ,ĹP*;oAASP AAD $+AG  AD +AL4̻+DAAR V CAJ D AAA <t+moAC HD0.@. F $T/qAI0* AA Tܺ8;tBBF A(Kq (A ABBC 0V[AD4=$xBBA A(G7 (A ABBA <|?p7xBAA G  AABA LHdp`|xC4C8`AS$̽8`EAL n DA `C2 CD$ڹA<xC'AX I \C2Ak A |C2Ak A C2Ak A C;At A ܾD;At A $(D9Ah G C A $@D-Af A D|ٹA\~ٹA4t D?AAI X CAI DHA$(DAI z AK $ԿDAI z AK ,l8ElxAASP AAD ,ExAASP AAD $\FAG  AD pGALpGO<,xG xAC HD3.0. G $lT/zAI0* AA T T~BBF A(Kq (A ABBC 1UMADhVTBBA A(G (A ABBA <4XpgBAA G  AABA Jx4 \4LH\d`xAS$`xEAL n DA \20\DֹA \'AX I 0\2Ak A 4P\2Ak A Tp\2Ak A t\;At A \;At A $\9Ah G C A \-Af A չAչA4,\?AAI X CAI DHA$d\AI z AK $X]AI z AK ,$]AASP AAD ,T^AASP AAD $`_AG  AD <`AL<` ၌AC HD.0. H $ xFT/AI0* AA T4@lCBBF A(Kq (A ABBC 1UMADnxBBA A(G (A ABBA <pBAA G  AABA t`tXtPtXt4@AS$T@EAL n DA |t2@tDѹA0t'AX I @t2Ak A `t2Ak A $t2Ak A Dt;At A dt;At A $t9Ah G C A <tmBBF A(K@ (A ABBB (w-Af A  PйA4$ w?AAI X CAI DHA$\(wAI z AK $wAI z AK $8xAI z AK $xAG  AC yALyO<yȊAC HD.P D S.$q3AI0l, AA D ؇xBBA A(G (A ABBA <TpBAA G  AABA $<؛TlpAP$pEAL n DA H2$psAI b AA $<ȍsAI b AA d D|̹AOR S(O$0qAK K AH AL<L ԔAC HD.. F $8T/AI0* AA pм4AP$TEAL n DA |x2$sAI b AA $sAI b AA PDʹA@O,HRDPS\XO$t`qAK K AH AL<,L  AC HD.. F $l(μT/ԚAI0* AA $`<ȴTl`AP$`EAL n DA 2$ХsAI b AA $<(sAI b AA dD|.ȹApOxRSO$qAK K AH AL< lAC HDm.. G $ 1,AI0_+ AA ,4 AP$T EAL n DA |h2DƹAORS O$$qAK K AH LAL< ġAC HDk.. I *VD  A ؾо,ؾDpAP$dpEAL n DA 2-DQ K оDĹAO ȾR$оS<ؾO$TqAK K AH |8AL< 8 AC HD.. B H8VD  A ,D\tAP$EAL n DA 2-DQ K D A$O<RTSlO$qAK K AH hAL<<h tAC HD.. B  xFVD  A ,D@\8t08@AP$@EAL n DA 2 -DQ K $0D<ֿAT Ol(R0S8O$@qAK K AH AL<l< @AC HD.. C <T!D  A \t AP$ EAL n DA 2$4sAI b AA $\sAI b AA $psAI b AA AAOR S$O$<qAK K AH dAL<F AC HD.. E $4Pd3ܪAI0l, AA H@H4@L8d@|AP$EAL n DA 2(-DQ K 8DLA,(OD0R\8St@O$HqAK K AH AL<D AC HD.. B 0 D w A 4 Ld| AS2D,,IBDD r ABA L\BBI A(D0d (A BBBC L (K BBBE ,BAD  ABG xDZDZ DZ$WAAL LH 4pBAA G0w  AABJ AL$;Ad K A G ATT#tBBE B(I0A8N 8A0A(B BBBG 4xAC HK.0h. A tLA~<&BBA A(K0(A ABB$D䰌AD0w AC 4RBAD o ABG NAB4AW,%Aft  4-An80 L(41AnH@<5Av4`LX $PrAAL`,AAL  DAE x LpBBD A(G0r (F ABBC N (F ABBG l$oBFA A(M0~ (A ABBE ~ (A ABBD D (F ABBI f(C ABB\BBE A(D0L@c 0D(A BBBH  0A(A BBBA Td0OHBBE B(A0A8J4 8A0A(B BBBK LL(BBB B(D0A8G@e 8A0A(B BBBE , AAJ AAE T<BBB B(A0A8Jo 8A0A(B BBBC $VD  A D?\?t???x?p?h?'?x?4p? Lh?ASl2-DQ K D,IBDD r ABA T\(BĴBBG B(A0A8N 8A0A(B BBBC 4 $/uBAA G0  AABI |&AL$8>;Ad K A G AT4%yBBE B(I0A8M 8A0A(B BBBA 4x*AC HK.0h. A <T,*BBA A(G0 (A ABBA -LA~$$.쵌AD0w AC <8=BBA A(G@ (A ABBE T. LBBB B(D0A8M_ 8A0A(B BBBE tVD  A = \\\\ (=2$P=D,<X=IBDD r ABA 4x=tBAA G0;  AABF >AL$[;Ad K A G AT\>-xBBE B(F0A8N) 8A0A(B BBBE 4BAC HK.0h. G |D,DkBAD UHB0E8EcAUEj<EBBA A(G@ (A ABBA TG躌BBB B(A0A8JH 8A0A(B BBBJ 4(LBAA G0  AABA TTLyBBG B(A0A8G> 8A0A(B BBBA <N༌BAD D  AABB TXQ)BBB B(D0A8G 8A0A(B BBBI VD  A Y  y$y<yTylX2XD,XIBDD r ABA T<X-侌BBE B(F0A8N) 8A0A(B BBBE 4\(AC HK.0h. G ,\_rBAD \HB4h_TBAA G0O  AABB `AL$@x;Ad K A G A `LA~,`2D aj<\xaNBBK A(G@+ (A ABBA <bBBA A(K0 (D ABBE TLcXBBB B(A0A8JN 8A0A(B BBBD $4gAG v AA ThyBBG B(A0A8G> 8A0A(B BBBA 4$@jAC HHv F T\n'ŒBBB B(D0A8G 8A0A(B BBBK DVD  A d|ؑБȑu2uD,uIBDD r ABA 4uTÌBAA G0  AABH \wAL$|;Ad K A G ATw5XÌBBE B(D0A8L1 8A0A(B BBBI 4l{ÌAC HK.0h. D 4}LA~<T~BBB A(A0 (A BBBA $EÌAD0w AA T,ƌBBB B(A0A8Jo 8A0A(B BBBC ȽVD  A 4@L8d0|(02XD,`IBDD r ABA 4d$njBAA G0  AABF ,xAL$Lh;Ad K A G ATPnjBBE B(D0A8N 8A0A(B BBBH 4<njAC HK.0h. F $AAJ AA<,*BBA A(G0 (A ABBA $ȌAD0w AC TPʌBBB B(A0A8Jo 8A0A(B BBBA ֽVD  A  $<Tl2DT,IBDD r ABA 4T $ˌBAA G0  AABI AL$<;Ad K A G ATěBBE B(I0A8M] 8A0A(B BBBA 4,ĽAC HK.@h. F ,BAD HB<$TBBA A(G09 (A ABBA $0x̌AD0w AC TJSόBBB B(A0A8Ji 8A0A(B BBBA VD  A 4Ld2|D, IBDD r ABA 44@ЌBAA G0  AABF AL$;Ad K A G AT=ЌBBE B(D0A8N8 8A0A(B BBBH 4 ЌAC HK.0h. F $ AAJ0AA<*BBA A(G0 (A ABBA $ ьAD0w AC TpӌBBB B(A0A8Jo 8A0A(B BBBC VD  A     $ <2T D,l(IBDD r ABA 4 HԌBAA G0  AABD AL$ ;Ad K A G ATԌBBE B(D0A8K7 8A0A(B BBBD 4P8ՌAC HK.Ph. D DBAD J0  AABF ]  AABG L0BBA A(G0^ (A ABBG b (A ABBA $hՌAD0w AC TX C،BBB B(A0A8JQ 8A0A(B BBBA `VD  A p x4p4,h4D`4\ 2$t0 sAI b AA $ sAI b AA  D, IBDD r ABA L  BBE B(A0A8H` 8A0E(B BBBI ,\ AEG0AA8 0 $2qAG L AK $P3qAG T AC 4| DٌBAH N0  AABF DAL$dP3;Ad K A G A$ T/DڌAI0* AA ,@3cAAN0[ DAH L3BBB B(D0A8G@ 8D0A(B BBBA |44BFB B(D0A8JP 8A0A(B BBBE I 8D0A(B BBBJ  8A0A(B BBBG D$P50݌BBE A(D0LPi 0A(A BBBE L86 BBB B(D0A8Dp 8A0A(B BBBA L f݌BBB A(A0R 0A(A BBBF t (v݌BBB B(D0A8J}FIFFFFF^ 8A0A(B BBBE T0 |ތBBE B(D0A8O 8A0A(B BBBH 4(ߌAC HN.f. E <`+iߌBBF A(I (A ABBE  8 H5 a, xaD pa\ hat 42$ 5sAI b AA $ `5sAI b AA  5D, 5IBDD r ABA <$ 5BBA A(KPb(A EBBd 07?| X7 P74 H7 BAH N0}  AABF  :AL$ _;Ad K A G A$ 5T/AI0* AA L 9fPBBB A(A0R 0A(A BBBF t =&BBB B(D0A8J']FFFFFF_ 8A0A(B BBBE T L BBE B(D0A8O 8A0A(B BBBH 4 WAC HN.f. E < xZiBBF A(I (A ABBE  hc^X4PLHd@|]2$]sAI b AA $(^sAI b AA ^D,^IBDD r ABA L,^BBE B(A0A8H` 8A0E(B BBBI $|h`AED@AAa`4D`D`BHA N0  AABD  cAL$,;Ad K A G A$a 1 AI0_+ AA LbNBBE A(G0Rg 0A(A BBBF D<fAC HD.@/. D .@.T`xdBBE B(F0A8U 8A0A(B BBBA 4PAC HN.f. F <0BBF A(I (A ABBH @,8D0\(t2D,IBDD r ABA D`BBE A(A0DP3 0A(E BBBI ,BAD D@ AABLd4BAH N0  AABF AL$;Ad K A G ALlhBBB A(A0R 0A(A BBBD dBBB B(D0A8J 8A0A(B BBBA mFIF^L |BBE B(A0A8D` 8A0A(B BBBA Tt BBE B(D0A8R 8A0A(B BBBA 4ȬAC HN.f. E <PaBBF A(I (A ABBE VD  A `  x$p<hT`l2 D,(IBDD r ABA DHhBBE A(A0HP7 0A(E BBBI p;,D48BAH N0  AABI pAL$;Ad K A G ALLHBBG A(F0R 0A(A BBBF <WPAH HD. b. B T?BBE B(D0A8Tb 8A0A(B BBBA 44AC HN.f. E <lhBBF A(I (A ABBE <VD  A \t@2hD,pIBDD r ABA D4hBBE A(A0HP7 0A(E BBBI ,|AEG0AA( 4L0BAH N0  AABF AL$4P;Ad K A G ALBBG A(F0N 0A(A BBBE dxHBBB B(A0A8JFIF^ 8A0A(B BBBC TBBE B(F0A8Pg 8A0A(B BBBA 4AC HN.f. E <0iBBF A(I (A ABBE pVD  A 141L1d1|X2D,IBDD r ABA DaBBB A(A0K@0 0A(E BBBI ,$BEA K@ AABTl44PBHA N0  AABH AL$H0;Ad K A G ALtBBG A(F0N 0A(A BBBC L \AC HD. .0. C u.0.T` BBE B(F0A8P 8A0A(B BBBA 4l(AC HN.f. F <+dBBF A(I (A ABBH t @!D  A  . l l l l !h.2$!.DyA,T!.IBDD r ABA $!.AI z AK $!(/AI z AK $!/AI z AK $!80AI z AK $$"0AI z AK L"H1VG: A Dl"2BBE A(A0LP 0A(E BBBI ," 4AEG0AA"5"54!5BAH N0  AABH L#h7AL$l#i;Ad K A G A,"P¾N|AAI@C AAA L4"7oBBG A(F0NZ 0A(A BBBF l"0=BBBB B(D0A8R 8A0A(B BBBF ^IIIFF[T"W BBE B(D0A8U 8A0A(B BBBA 4L#xa` AC HN.f. E <#d BBF A(I (A ABBE T%`l%g%%%%%pg2%gD,&gIBDD r ABA DD&ghBBE A(A0HP7 0A(E BBBI $&hAED@AA&i&xi4T%pi BAH N0  AABF 'XkAL$<';Ad K A G AL%0k BBG A(F0N 0A(A BBBE d$&p BBB B(D0A8RFIF^o 8A0A(B BBBG T&r  BBE B(D0A8Jp 8A0A(B BBBD 4&@p AC HN.f. E <'& BBF A(I (A ABBE ( D w A  )$):$<)(AAN DALd)vBBB B(D0A8OP 8D0A(B BBBE )C D 9 A )p'$)AI z AK $*0AI z AK 4(BAD K@S  AABG t*`D*4)xAAP/j AAA TT)y,BBE B(D0A8O 8A0A(B BBBA <+DE I$).OAI0q* AA +0K+(+ +(+ +,P2,,x-DQ K L,D,d,IBDD r ABA ,'Aa,/Ai<D+pBBA A(G` (A ABBG <+@VBBD A(R (A ABBJ D+`BBE A(D0GpV 0A(A BBBE , ,@AAR e AAE $-HDU A R T ,-PAAI0 AA,$.@AAI0 AAT.0l.8.HD  A ,.AAV AAA ,.CAAN@ AAA /@XD  A 4$/kBAD J0U AAB4\/sBAD I0^ AAB</nBBD A(M@Q(A ABB$/0wAAD0nAA/g&D]0,0XD0P4\0x4t0@AP$0@EAL n DA 0X20-DQ K 0D$|/wAN0N AA $41AK S AH \1XALL/XXBBE A(D0W 0A(A BBBA $1xeDU A R T 1h'$ 2AI z AK $42AI z AK $\2(AI z AK D2BBE A(A0D`r 0A(A BBBG L2BBE B(D0A8QPO 8A0A(B BBBA $1d|2AI0., AA D30\3'Ae|333333  4AS,4h2D4-DQ K d4D,|4IBDD r ABA ,3ȽHdAAVp AAD 4L3BAD I@  AABF $5pDU A R T <5<T5pl5h5p5h5`5X 5PAS6268-DQ K <6HD,T6PIBDD r ABA ,4pHAAVp AAE 4$5BAD I@  AABF $6HDU A R T 7@'Ae47L7d7|777 7AS727-DQ K 8D,48IBDD r ABA ,6HAAVp AAD 47 BAD I@  AABF $8DU A R T 8= 9$9<9T9l99 9AS9H29p-DQ K 9D, :IBDD r ABA ,8H0AAVp AAD 48TBAD I@  AABF $:DU A R T :xAY:(; ;(4; L;d; |;AS;2;-DQ K ;D,;IBDD r ABA ,:(Ht!AAVp AAE 4:H!BAD I@  AABF $<DU A R T <<4<4<pAP$=pEAL n DA <=2T=-DQ K t= D=X]A,<R#AADP AAA $D<@#AD@ AA $=AK  AD $>ALL<K $BBE A(E0P 0A(A BBBG $>`DU A R T >>>?AP$$?EAL n DA L?2d?-DQ K ?D?b[A$$>%AD@ AA $L>%AD@ AA $@@AK  AD ,@ALL>C%BBE A(E0P 0A(A BBBD $@DU A R T @@84@`4 AhAP$,AhEAL n DA TA@2lAh-DQ K AxDAtYA,,@h`'AAJp= AAE ,\@u'AAJp= AAE $BAK  AC DBpALL@p 'BBE A(E0P 0A(A BBBE $BDU A R T B(B C$CAP$DCEAL n DA lC2C-DQ K CDCvWA,DB2H)AADP AAA $tBb)AD@ AA $,DAK  AD TDPALLBP;)BBE A(E0P 0A(A BBBD $D@DU A R T DHE4E44EAP$TEEAL n DA |E2E-DQ K EDEUA,TDR +AADP AAA $D:+AD@ AA $ 8A0A(B BBBG <\{vAC HD.i. A <\vBAD M  AABI $l6DU A R T  XĖPܖH@ 2$@D,<HIBDD r ABA $lhAI z AK $AI z AK $xAI z AK $AI z AK $ AI z AK 4avBAH N0  AABB lHAL$;Ad K A G AL %BBG B(D0A8Ip8D0A(B BBBZH4@L8d0$3BwAI07 AA 4{AF Io A TLHDBBB B(A0A8Jm 8A0A(B BBBE T=쀍BBG B(D0A8R{ 8A0A(B BBBA <ȪPAC HD.i. A <<BAD M  AABH <|hԁBBF A(J (A ABBK Lxtd|ěܛ $<Tl̜xph`,XDP\Ht@82-DQ K ܝAD A$A<ATAlAPQhXtAxQhXܞALASAS<ATQhXtAQhXAğQhXAQhXXAS<^AT@QhXt@AhQhXAS̠AQhXAQhX<AS\AtQhXAQhX̡jAlAnApA,rADtA\vAtxAzA|A~AԢAAAA4ALAdA|AAAģAܣAA A$A<ATAlAAAA̤AAAA,ADA\AtAAAAԥAAAA4ALA,dgAAJ P DAA ,gAAJ P DAA ,Ħ0gAAJ P DAA pQhXQhX4QhXT0QhXtpQhXQhXQhXԧ0QhXpQhXQhX4QhXT0QhXtpQhXQhXQhXԨ0QhXpQhXQhX4QhXT0QhXtpQhXQhXQhXԩ0QhXpEAEA4EATEAt0EA`EAEAԪEAEA EA4PEATEAtEAEAEAԫ@EApEAEA4EATEAt0EA`EAEAԬEAEA EA4PEATEAtEAEA`,<(AAR  AAA <8BBE A(M0P (D ABBH ,<x3Dy C Z F H H b C $lAAI AA, ABAD V ABH Į=D_ A <TEBBD A(G` (A ABBD DSBBF A(D0 (A BBBA 4ܭdBAD D@Y  AABH 4wBAD D@Y  AABH 4LhBAD D@Y  AABH LP BIB A(H0MN 0A(A BBBG $dMAZ E ] F 4جpcBAD L@  AABC ,4svAAN` AAA `)D_ A p)D_ A 4)D_ A T)D_ A t)D_ A )D_ A )D_ A Ա)D_ A )D_ A $MAZ E ] F ,{AAJ@ AAC $lhMAZ E ] F ,AAJ@w AAK $IJMAZ E ] F ,\҃AAJ@w AAK $MAZ E ] F ,惍AAJ@w AAK $tMAZ E ] F , AAJ@w AAK $̳MAZ E ] F ,dAAJ@w AAK $$MAZ E ] F ,"AAJ@w AAK $|MAZ E ] F , 6AAJ@w AAK $ԴMAZ E ] F ,l8JAAJ@w AAK $,(MAZ E ] F ,ijP^AAJ@w AAK $@MAZ E ] F DhEDD Y ABG r ABK [ ABJ D EDD Y ABG r ABK [ ABJ D<EDD Y ABG r ABK [ ABJ DEDD Y ABG r ABK [ ABJ D̶HEDD Y ABG r ABK [ ABJ DEDD Y ABG r ABK [ ABJ D\EDD Y ABG r ABK [ ABJ DpEDD Y ABG r ABK [ ABJ D(EDD Y ABG r ABK [ ABJ D4EDD Y ABG r ABK [ ABJ D|EDD Y ABG r ABK [ ABJ DĸPEDD Y ABG r ABK [ ABJ ,|rAAG@ AAE ,<AAJ0U AAE ,ܷ<AAJ0U AAE 8VVD  A <,BBD A(GP (A ABBB ]D`BBB B(J0A8 0A(B BBBA \~G] A X|H$,`AAQ | AAK 44aBAA G@  AABI <lӄBBA A(JP' (A ABBC 4e焍BAD D@  AABB tԻLU섍BBB B(D0A8G@_ 8A0A(B BBBC TܺBBB B(A0A8G 8A0A(B BBBA D4ZDOEB A(A0w (g }BBA L BBP A(A0 (A BBBA h(A BBB4\(BAD Dp  AABA 4P8BAD Dp#  AABA L̽XBBB B(A0A8Je 8A0A(B BBBA LlBBE E(A0$8Q@t8A0F (A BBBA lL BBB B(A0A8G  8A0A(B BBBA TDBBE B(D0A8M 8A0A(B BBBA L8ƅBBE B(D0A8J`) 8A0A(B BBBC LㅍBBE B(D0A8Mp, 8A0A(B BBBE ̿h`&D]//0&,(&D0&\h/AP$|h/EAL n DA %2$&sAI b AA $p&sAI b AA  $A$&wAN0N AA $L'AK \ AG t'AL<'eAC HD.. H $D^T/AI0* AA ȍ7,x7D-\-t-(7AP$(7EAL n DA -2$-sAI b AA $0.sAI b AA <A$p.wAN0N AA $|.AK \ AG @/AL<4@/AC HD.. H $tЋT/AI0* AA ,D@?\8?t555>AP$>EAL n DA p52$5sAI b AA $D5sAI b AA lA$06w0AN0N AA $6AK \ AG 7AL<d7AC HD.. H $T/0AI0* AA \HtGFp=h=p=FAP$ FEAL n DA 40=2$LX=sAI b AA $t=sAI b AA ߸A$$=wȓAN0N AA $H>AK \ AG >AL<>-AC HD.. H $PT/ȕAI0* AA `EUUUUE240ED,L8EIBDD r ABA $|XEAI z AK $EAI z AK 4<hF1`BAH N0  AABB pGAL$$T;Ad K A G ATHGdBBB B(D0A8KA 8A0A(B BBBE 4KhȘAC HNm.f. F (N,T5EDA gABd$TBBB B(D0A8K@R 8A0A(B BBBA  8I0A(B BBBA 4MQTAC HK A $4`T/DAI0* AA APTd4dLddd|S2 TD,(TIBDD r ABA $HTAI z AK $TAI z AK 4XU1BAH N0  AABB d`VAL$c;Ad K A G AT8V%BBB B(D0A8KA 8A0A(B BBBE 4t[hAC HNm.f. F <H]4@]2AC HK A $?T/|AI0* AA @nbvvv,vD0b2\XbD,t`bIBDD r ABA $bAI z AK $cAI z AK 4dc1̢BAH N0  AABB ,dAL$Lu;Ad K A G ATpdТBBB B(D0A8KA 8A0A(B BBBE 4<ih4AC HNm.f. F PkHk4PkC AC HK A $kT/ԤAI0* AA К Ht2$ptD,<xtIBDD r ABA $ltAI z AK $ uAI z AK 4,u1$BAH N0  AABB vAL$;Ad K A G ATv(BBB B(D0A8KA 8A0A(B BBBE 4 {hAC HNm.f. F X}P}4lX}[AC HK A $@T/AI0* AA \xt`XAP$ EAL n DA 4P2$LxsAI b AA $tЁsAI b AA ѸA$$wXAN0N AA $hAK \ AG AL< AC HD.0. J $/AI0* AA `XAP$<EAL n DA dP2$|xsAI b AA $ЏsAI b AA ϸA$TwTAN0N AA $ hAK \ AG 4AL< AC HD.0. J $/AI0* AA "`X4LAP$lEAL n DA P2$xsAI b AA $НsAI b AA ͸A$wPAN0N AA $<hAK \ AG dAL< 췍AC HD.0. J $4 /AI0* AA (PPH4@L8d0|(  $<Tl AS AS  AS, D \ t 8D,@IBDD r ABA `2$sAI b AA $sAI b AA <5T5l85`5$ LAAL @ $L8eAAL  $~AAL D <BBD A(J`1 (A ABBF ب,$8AAO Q AAA LTBBB A(D0O 0A(A BBBH @,˼AfTP H,ϼAfX P,ӼAf` LX4׼Anxp h4ۼAnLd x4߼An <4㼍Ant4缍An$4뼍An\<-Av 4<Av <Av4L $09AG  AG HAL$;Ad K A G ATD ( BBE B(F0A8Ta 8A0A(B BBBG <]ȽAC HN.0h. J Ll8/EEB A(D0j (D BBBK M (A BBBD $,hF/AI0* AA $T[(AAL`|(LAIP$aAYP AE 4`BAD I@  AABA 4H.BAD I@  AABE ,4@VAAL  DAE  ,|tAAL  DAE < ,ÍAAL  DAE  L !ÍBBB A(D0G 0A(A BBBA L\hÍBBE B(F0A8J@ 8D0A(B BBBA $8[ÍAAL`pÍAIP$[ÍAAL`8čAIPKT  U D\čBBD A(T (A ABBK LčBBE B(F0A8J@ 8D0A(B BBBA DčBBE A(F0 (D BBBA LhBBE B(E0A8J@I 8D0A(B BBBG ,AAD T AAA tLBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA ,AAD T AAA tBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA LlBBE B(E0A8JP 8A0A(B BBBK ,AAD T AAA tXBFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA DdCBBE A(E0J@ 0A(A BBBH <>EBB D(A0m (A BBBF L\TōBBE B(D0A8DP 8D0A(B BBBE THōBBH B(A0A8L  8A0A(B BBBH @nX P H @  8 $0 <( T lhD,pIBDD r ABA 2$sAI b AA $sAI b AA h54P$X9ƍAG  AG tpAL$0;Ad K A G AT,H ƍBBE B(F0A8TZ 8A0A(B BBBF < ]ǍAC HN.0h. J $k/xȍAI0* AA 4.ˍBAD I@  AABF 4$ˍBAD I@  AABE 4\X ˍBAD I@  AABF L!L΍BBE B(F0A8J@ 8D0A(B BBBA ,t!AAD T AAA t@"BFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA L"BBE B(E0A8JP 8A0A(B BBBK T l΍BBH B(A0A8L 8A0A(B BBBD ИFF F$F<FTFlFF "D,"IBDD r ABA 0"2$X"sAI b AA $$"sAI b AA LE5d"$"9ύAG  AG $AL$E;Ad K A G AT\#  ύBBE B(F0A8Te 8A0A(B BBBK <-]ύAC HN.0h. J $ /ЍAI0* AA Dx0b|׍AC HN F 1.^..r.`L|ڲ$x؍BBE B(D0A8T8A0A(B BBB\8D2$"؍BAD D@$ ؍AAG@DDl$D $dx؍AAD@$lٍAAD@D`AD dC4CٍAAP) AAA <$GٍBAD K  AABA  $ (AG  AF T4jBB B(A0A8J@e 8A0A(B BBBE h$AG l AK ,<x XڍAAG  AAA 4XUBDA w ABO AAB<J:ڍBIA A(Q@ (A ABBA tp7?D i A < #BBD A(I@ (A ABBD  LAc D D07\BBB A(A0D@. 0A(A BBBE $<H8D  I b F Dd:BBB A(A0D@ 0A(A BBBE 88Av$XhAR } AG p; BBB B(A0A8D@v 8A0A(B BBBB  8A0A(B BBBE a 8C0A(B BBBK D 8C0A(B BBBI $T,JڍBBE B(D0A8G 8A0A(B BBBH T`O܍BBD B(D0A8UX 8A0A(B BBBJ lX,pMKBG A(A0D@b 0E(A BBBH m0A(A BBBK@D 0A(A BBBL ,|8܍AAMK AAD <9o$T@;MAGu AB |h>od,BBD A(J@ (F ABBD Q (F ABBD z (F ABBK LHBBE B(D0A8G 8A0A(B BBBF LAc D li4ݍAC A J .Q.>L`@BBE B(A0A8Gb 8A0A(B BBBA 4$PLBE A( ABB\HE4tkAD@uH`PAXF`AhApd@X AH tFݍBBA A(J` (A ABBD Mh~pExFFCFCb`hapAxFAAd`$PJݍAMG AJ <XwݍAC HF I .0~.<ލAI HKa.0Q. G 4<FލAC G. K .tPJwލBBB B(D0A8G 8A0A(B BBBA YnCFFEFCbCFFa<ލBBD A(Mz (A ABBJ LDPލBBB A(A0J 0A(A BBBB $R4<(kAD@uH`PAXF`AhApd@X AH TPTލBBA A(J`~hapAxFAAd`X (A ABBF L<xKލBBE A(D0L 0A(A BBBF 4VލBAD G@}  AABA DN^ߍBBA A(G{ (A ABBB 4 x?DߍBAD G@u  AABI LD`ShXߍGBB I(A0G 0A(A BBBD T[|ߍBBE B(G0A8P 8A0A(B BBBF T(qkLBBE B(C0A8J 8A0A(B BBBD $D 0(P0[(A T A LlV$@BBE B(D0A8T8A0A(B BBBL2$"SBAD D@$ lAAG@$D $< AAD@$dAAD@AD $<AI z AK $d`AI z AK $& AL0Y AI $$'2AL0Y AI $L8(DAL0Y AI p4hVAAP) AAA <jBAD K  AABA $/AI0* AA <,x4BIA A(Q@ (A ABBE xAc D LSBAD GPy  AABE iX``AhFpAxAdPLGBB I(A0G 0A(A BBBH T, 4BBE B(D0A8GS 8A0A(B BBBD L WBBE B(A0A8Gb 8A0A(B BBBA <pBAC O&  AABA DP7BBA A(G( (A ABBE T\t\BBE B(F0A8M5 8A0A(B BBBB T 0BBB B(D0A8G 8A0A(B BBBA  L$ $DBBE B(D0A8T8A0A(B BBB $2$ƫ"WBAD D@$pAAG@l $D $AAD@$ AAD@ AD $ @$AI z AK $ $AI z AK D P%4 H%ZAAP) AAA < )nBAD K  AABA $D /AI0* AA <l X-tBIA A(Q@  (A ABBH < /Ac D L VBAD GPy  AABE iX``AhFpAxAdPL /GBB I(A0G 0A(A BBBH Tl (8: 8BBE B(A0A8G 8A0A(B BBBC LT PZBBE B(A0A8Gb 8A0A(B BBBA < ABAC O&  AABA DT CGBBA A(G( (A ABBE T HtlBBE B(F0A8M5 8A0A(B BBBB T @\$@BBB B(D0A8Gr 8A0A(B BBBA D 2$$AI z AK $LhAI z AK < FpBBD A(G`| (A ABBF ,AAG@ CAG <BBE A(K0O (C ABBD L`BBB B(A0H8G@ 8A0A(B BBBA  tAn4ABAD D@n  CABA 4<ABAD D@n  CABA $tp/AI0* AA ,GD\t4Ld|   x$p<hT`lXPHAPHAPHAPHAPH 4@AST@ l8AS8 0AS0 (AS2$sAI b AA $<8sAI b AA dD|ADAA4HlAn A K E { E P H N A 4lAn A K E { E P H N A 4;XBAA G0  AABB 4K\BAA G0  AABF 4,k`BAA D0  AABA $ddAAL  $}AAL \x $pAAL ( $$ AAL  $dAAL x $pAAL \ 4;BAD MP  AABE 4RBAD MP  AABF $T@3AJ0d AH $|EAG0 AA TWBBE B(D0A8R 8A0A(B BBBH 4BAA G@  AABA ,4 xAAJ0 AAA ,d` xAAJ0 AAA 4$BAF O`  AABG \+Df$t` AG E AB $ AG V AA D4pDBBD A(J (A ABBK D|xlBBD A(J (A ABBF T BBF B(D0A8K 8A0A(B BBBE T0BBE A(D0M@iHHPUHA@m 0A(A BBBI Tt"BBBE B(D0A8L 8A0A(B BBBG ds{BBB B(D0A8O  8A0A(B BBBI  d J I m T4BBB B(D0A8J# 8A0A(B BBBD XAP<XAP$XAO0T AK $AG g AH YDTx x|4An,D 4An| -Ag l4An4AnT4An4AnL-Ag- Ag4  <Avl 8 0  (<Av H @ \8<Av !X$!P H<&Av\!ht!` X5.Ao!x!p L h52Ao!"  x-FAgL" 5JAo"" ,$!ZAAG0 AAG "  ,l!^AAG0 AAG ,# ,!fAAG0 AAG t#0 ,!(nAAG0 AAF # ,D"rAAG0 AAF $` ,"XzAAG0 AAF L$ ,"AAG0 AAF $ ,#AAG0 AAE $( $ ,|# AAG0 AAE <% T% ,# AAG0 AAF %H! %@! ,<$8!AAG0 AAF %! &! T$HBBB B(D0A8K 8A0A(B BBBF &p!T %X"6BBE B(D0A8G 8A0A(B BBBF 4&@)$BAK J@G  AABE T%8*BBB B(D0A8O 8A0A(B BBBE L%p<fBBB A(D0G  0A(A BBBK 4D&`1/DAI0*8E@f8A0b AA $|&?dAAL`$&@T$AAL`,&(BHAAL  DAE (B ,'BAAL  DAE (C ,\'CAAL  DAE )D ,'DAAL  DAE d)PE ,'HEAAL  DAE )F ,4(FcAAL  DAE )F ,|(FAAL  DAD <*xG LT*pGBBB B(D0A8G@o 8A0A(B BBBC ,) HAAR e AAE $D)HeAAL *H $)H[AAL`$)J[$AAL`L)PKsBBB B(A0A8D 8A0A(B BBBB ,$*NAAGp AAB ,+PPKAAN [ DAH $*pP[AAL`*AIP\,xJt,],_A]4,8QBAD OP  AABA ,RDM,RDM$+SNNADPv AD <+(VJiBAD G  AABD |-8YE xT,@ZHBBB B(A0A8J; 8A0A(B BBBG L\,8`BBB B(A0A8Dp* 8A0A(B BBBA $,c[AAL`,e<AIP,.eAG  AI \F,$-fQAAMp AAH TT-Z{BBG B(D0A8G* 8A0A(B BBBC T-3BBB B(A0A8J  8A0A(B BBBG D.i BBD A(J (A ABBJ /lAP/lAPL.l BBB B(A0A8D 8A0A(B BBBF <l0(qBBK A(RP (A ABBA <0rBBD A(K@d (A ABBA ,0XstAAJ0` AAA L/s BBB B(A0A8G`0 8A0A(B BBBE l1hu5NZT/H< BBB B(A0A8M. 8A0A(B BBBA TT0x BFB B(D0A8Q 8A0A(B BBBF T0(+BBB B(A0A8J k 8A0A(B BBBG L1`(GBBE A(D0M 0A(A BBBE LT1`>BBE A(D0MQ 0A(A BBBD T1U^3oBBE F(A0A8P @ 8A0A(B BBBE T111BBB B(D0A8M  8A0A(B BBBC TT2E 5BBF B(D0A8Q_ 8A0A(B BBBE T2FBBB B(A0A8J 8A0A(B BBBB T3 d3#BBD B(A0A8M > 8A0A(B BBBG 44(?YBBD A(V0f(J ABBd$5qBBE B(D0A8JP 8F0A(B BBBF  8C0A(B BBBF 43hv'BAD K`  AABE T44w!(BBB B(A0A8J 8A0A(B BBBE D4x~ m(BBD A(J (A ABBA T4Њ<)BBB B(D0A8M 8A0A(B BBBA <,5xX@*BAD O*  AABD 46 BAD J0  AABG T5p$+BBB B(D0A8I/ 8A0A(B BBBA D5:+BBB A(D0Dq 0A(A BBBH ,7PjAAG@ AAE ,t6[+AAR  AAH $6Pvu+AAL`$6n+BAD L`D6+BBD A(S  (A ABBD T<7;3|,BBB B(D0A8O 8A0A(B BBBJ T7V&4.BIB B(D0A8U  8A0A(B BBBE D7}>1BBD A(Ul (A ABBH T48PA4T5BBE B(D0A8T  8A0A(B BBBG T8HYG9BBB B(D0A8W` 8A0A(B BBBB L8P6n:Y>BBE A(F0R! 0A(A BBBG T49ppD^BBBE B(F0A8R)' 8A0A(B BBBI T9GBBD B(A0A8O 8A0A(B BBBF $9`IAAL`, :sIAAI AAC ;XDM;`DM;M<PD,<X2$:IALpv AD l<8<<@iBBA A(D0P (D ABBA D4;pNIBFA G(Jy (A ABBG D|;xNIBFA G(Jy (A ABBG T;IBBE B(F0A8J 8A0A(B BBBJ T<IBBE B(D0A8G, 8A0A(B BBBC Tt<7JBBB B(D0A8G` 8A0A(B BBBB D<JBBA A(M (A ABBA <=paKBBA E(G@ (A ABBJ TT=|KBBE B(H0A8N 8A0A(B BBBD $0pNAAJj AAH ?(ID e A  @x $@ <@4T@@ AP$t@@ EAL n DA @2@ -DQ K @0D$\?8wNAN0N AA $A`AG0N DA $AAG oDA4${VAAG g DAK PDAL\{ȻhBBE B(F0A8O 8A0A(B BBBA {^${0AQ0Y AD L{BBE A(UP (C ABBJ D(F ABB<|T| )DdDl|8 BBE A(E0O@ 0A(A BBBH 4|BAC D0o  AABC 4|h*BAD Gp  AABI $}`(AbD}p\}x)t}+MSL}0 BBB B(E0A8JI 8A0A(B BBBH }}~ ,~D~D\~x5BBB A(D0J 0A(A BBBA ,~p6LAM VAA,~BAD W ABG AW$$RAG0@ DA ,L(AAS`r AAG L|BBB B(A0A8GP 8A0A(B BBBE LHBBB B(A0A8J 8A0A(B BBBA LjBBF A(E0 (A BBBF \ (A BBBE dlBBF B(D0A8R@ 8A0A(B BBBG j 8D0A(B BBBA dԀ BBE B(D0A8M`UEBN 8A0A(B BBBH T<H BBB B(D0A8O` 8A0A(B BBBF hWpThH`4BAF i ABK ADBĹh1BBE B(D0A8K`+ 8A0A(B BBBH DXBBE B(D0A8QPx8C0A(B BBBdBBE B(D0A8RP 8C0A(B BBBH  8F0A(B BBBE D 8F0A(B BBBE X8D0D(B BBBd8BBB B(D0A8Gp 8A0A(B BBBG xPRxBpxQQxApddBBE B(D0A8R`u 8A0A(B BBBG 58A0D(F BBBl̃$BBE B(D0A8OD]Ao 8D0A(B BBBC ~PSAL<BBG A(D0M@rHDPQHA@D 0A(A BBBG .DP B(B0UL|BBB B(A0A8Dp0 8A0A(B BBBH .DP B(B0U1DP E(B0U<ODZ J cL\(EBB A(A0p (A BBBF ~ (A BBBC ,dBAF D ABH <܅BAD b(G0F(D A ABB H DEB T<HU,TMAF DII C JDf F U4wEDD G ABI SAB܆(D A $Dp D T A L$p+BBE B(A0A8Jp 8A0A(B BBBD 4tP:BAD D@  AABA |XBBB B(E0A8Gp 8A0A(B BBBA  8C0A(B BBBF  8F0A(B BBBA ,,}RAD [ ABA L\BBB B(D0A8Jp{ 8A0A(B BBBD , rD^K TAC K NK 4܈ >BAA DpP  AABD 4 wAAM(B0L(A p GAJ ,L8 AAJ AAF |$AJ@_ AE ԉ@bD { A LBBE B(D0A8J 8A0A(B BBBF ,D6LAM VAALtBBE B(D0A8Jp 8A0A(B BBBC $ĊAOB GDA4AASX``VXAPA AAA ,$ AAC HDq G T@,lTACM(L0b(A OCA$yALPI AI ċ`DX܋hLBBB B(D0A8De 8A0A(B BBBA dD0BBE B(D0A8GkEGBVz 8A0A(B BBBF |"@BBE B(D0A8GvIdFU 8D0A(B BBBA IO^BRIYAL,x$SBBB B(D0A8J? 8A0A(B BBBH \|)SBBE B(D0A8G, 8A0A(B BBBC HI_Ad܍,!BBB B(A0A8Jp 8A0A(B BBBA  8D0A(B BBBA \DP.TBD A(L0z(A ABBI0D(D ABBt.HBBE B(D0A8GPXM`UXAPI 8A0A(B BBBA D 8C0A(B BBBH IXN`L/$BBE B(A0A8Jy 8A0A(B BBBF Llx4BBB B(D0A8Ge 8A0A(B BBBE 47rD\K TAC E E C NK $`7}D|A F(V0U7<47.BBD A(Dp (A ABBK Dt9BAD x ABF A DBA j ABC <9DDC  CBC Q FBG :(NI$:AL M AE ,<8;yAAL O AAA l;;BBB B(D0A8I@ 8C0A(B BBBE  8A0A(B BBBG U 8A0A(B BBBA M 8C0A(B BBBA <=hAA @ ABK aFB<\x=DAC V ABG A CBB $=yE{ H V B XĒP>BEg D Q>>jD @ D 4>0BAD O`  AABA T?-Ll@BBE B(A0A8Dp| 8A0A(B BBBI 8CcԓCpWC!A_L CBBE B(D0A8I 8A0A(B BBBK <\xEBBD A(DP (A ABBA EDIEdGW A LԔ@FBFB B(D0A8G` 8A0A(B BBBF 4$LBAA Dp  AABD T\LBBE B(D0A8L@d 8C0A(B BBBD UHHPWHA@lL@BBB B(D0A8MH}ALBFAW 8A0A(B BBBB T$MBBBD A(JOZEEEH^i (A ABBH $|NUAq F C A DNAAM t AAK Y AAE D HAC <OnAAJ \ CAD f CAF ICA\,HOnBBE B(D0A8J``hGpOxBI`N 8A0A(B BBBE TXPBBE B(D0A8OHMPMHA@~ 8D0A(B BBBK <P>KAI UAAD DDAL$PBBD A(MrEcAJ (A ABBG t RRDR1BBE A(C0JPo 0A(A BBBB S,@TrDaK TAC H NK \4TBBE B(D0A8JgGOBI 8A0A(B BBBD LUBBE B(D0A8Gp 8A0A(B BBBK V(<VBAD G`JhFpShA`z  AABH ,<hWAAJP{ AAG LlXdBBB B(D0A8G 8A0A(B BBBA L8Y<BBB B(A0A8J 8A0A(B BBBA D (ZBBB A(D0J` 0A(A BBBB LT[BBB B(A0A8D/ 8A0A(B BBBI @`T8`BBE B(D0A8L@i 8C0A(B BBBG XHHPWHA@T`BBBD A(JTZEEEH^i (A ABBK ,lxaAAG0 AAI |(bBBE B(A0A8DXQEEHK& 8A0A(B BBBE wNA\Xe4BBE B(D0A8MHEAZ 8A0A(B BBBA l|8fhBBE B(D0A8PHAATBFAZ 8A0A(B BBBG 8g 0g8g4@g,Lg%BAD YAB4|gABBD A(M@W(M ABB4gLBBD A(P@l(A ABB<gVBBD A(P@RHJPW(D ABB4,hJBBD A(P@j(A ABB<d0hVBBD A(P@RHJPW(D ABB4PhBBBD A(P@b(A ABB4ܟhhEBBD A(P@b(D ABB4hDZ B NK TCA G NK LiMud@iMud|xi<BBE B(D0A8G 8A0A(B BBBE BGB^|Po0BBB B(D0A8JK 8D0A(B BBBA LNbEQeFZG\B4dqAAG T AAI \ FAA |qBBB B(D0A8M@yHNPTHA@D 8D0A(B BBBI t 8D0D(B BBBL O HPPQ q HMPR LrBBE B(D0A8J 8A0A(B BBBB \lwBBB B(D0A8J 8D0A(B BBBH R^AL̢{XBBB B(D0A8Jpk 8A0A(B BBBD L}^BBE B(D0A8G` 8D0A(B BBBE Ll(EEE A(D0R (D BBBP a(D BBB<RDD \ ABG A DBI !A_4+$L}DU G D L tpG A D0EDD ~ ABB s ABJ WABܤZDp L VT؁&BBE A(D0JP`XG`OhBpIP~ 0A(A BBBA TTBBE B(D0A8PX]`MXAPW 8A0A(B BBBD 8 DEB T̥8",PAD h HK K AD XDw E W,4AAG0a AAD ,dprDaK TAC H NK ,rDaK TAC H NK ,ĦrD^K TAC K NK ,`rD^K TAC K NK |$BBB B(D0A8GDHcE[O_B}HbEX 8A0A(B BBBA \ BBE B(D0A8Js 8A0A(B BBBA PK`BLHBBE B(A0A8D 8A0A(B BBBD T lx,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<$ VBBD A(P@RHJPW(D ABB4d@JBBD A(P@j(A ABB<XVBBD A(P@RHJPW(D ABB4ܩxBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,LrD^K TAC K NK ,|uD^N TAC H NN ,HuDaN TAC E NN ,ܪuDaN TAC E NN , DkN TAC K NN ,<HuD^N TAC H NN l ,%BAD YAB4̫ABBD A(M@W(M ABB4 LBBD A(P@l(A ABB<<8VBBD A(P@RHJPW(D ABB4|XJBBD A(P@j(A ABB<pVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4,EBBD A(P@b(D ABB,dzDiK TAC H NK ,zDiK TAC H NK ,ĭ`zDiK TAC H NK , 8%BAD YAB4<8ABBD A(M@W(M ABB4tPLBBD A(P@l(A ABB<hVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<$VBBD A(P@RHJPW(D ABB4dBBBD A(P@b(A ABB4ؓEBBD A(P@b(D ABB,ԯDsK TAC F NK 4PrD\K TAC E E C NK 4<rD\K TAC E E C NK t ؔ,`%BAD YAB4԰`ABBD A(M@W(M ABB4 xLBBD A(P@l(A ABB<DVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<ȕVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB44EBBD A(P@b(D ABB,lrDaK TAC H NK ,hrDaK TAC H NK ,̲rDaK TAC H NK $>AAD uAA,$ >BAA vAB,T0>TAM VCA<@xBBD A(J0m (A ABBJ \ijBBB B(D0A8Jp 8A0A(B BBBF xBGBTp|$BBE B(A0A8D_GcFjOcBB 8A0A(B BBBF MwELBBB B(D0A8G 8A0A(B BBBA \BBE B(A0A8J 8A0A(B BBBH tU\AdTBBE B(A0A8J` 8A0A(B BBBI 8D0A(B BBB\ةTBE A(D0(A BBBJ0A(D BBBT8BBE B(D0A8G@` 8C0A(B BBBE fHKPVHA@LtЪzBBE B(D0A8Gw 8A0A(B BBBH ,ĶEAD c ABH ph ȭlFd, D,\%BAD YAB4ABBD A(M@W(M ABB4ķLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4<خJBBD A(P@j(A ABB<tVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4(EBBD A(P@b(D ABB\$@AAJ O CAA N(G0E8E@Y F AAH N(H0W(A FAA ,0%BAD YAB40ABBD A(M@W(M ABB4HLBBD A(P@l(A ABB<T`VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<̺VBBD A(P@RHJPW(D ABB4 BBBD A(P@b(A ABB4DаEBBD A(P@b(D ABB,|rDaK TAC H NK ,8uD^N TAC H NN ܻ , %BAD YAB4<ABBD A(M@W(M ABB4tLBBD A(P@l(A ABB<(VBBD A(P@RHJPW(D ABB4HJBBD A(P@j(A ABB<$`VBBD A(P@RHJPW(D ABB4dBBBD A(P@b(A ABB4EBBD A(P@b(D ABBԽ,8%BAD YAB48ABBD A(M@W(M ABB4TPLBBD A(P@l(A ABB<hVBBD A(P@RHJPW(D ABB4̾JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4DBBBD A(P@b(A ABB4|سEBBD A(P@b(D ABB,DsK TAC F NK 4PBAD G`_  AABG DBBE A(D0P@B 0A(A BBBH dP,|ص%BAD YAB4صABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4\(JBBD A(P@j(A ABB<@VBBD A(P@RHJPW(D ABB4`BBBD A(P@b(A ABB4 xEBBD A(P@b(D ABB,DDsK TAC F NK Lt BBB B(D0A8J 8A0A(B BBBE LFBBF B(A0A8G 8A0A(B BBBF 4DiK TAC H J F N K O ,LrDfK TAC C NK ,|hrDfK TAC C NK ,DsK TAC F NK ,DsK TAC F NK , xrD^K TAC K NK ,<ȾrDaK TAC H NK l $(4APD YDA@ DEB T@DTH9Q` A h4DX D P< T,l%BAD YAB4ABBD A(M@W(M ABB4 LBBD A(P@l(A ABB< 8VBBD A(P@RHJPW(D ABB4LXJBBD A(P@j(A ABB<pVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,4SAC HG H ddKEBB A(A0_ (H BBBH Y (A BBBH Q (H BBBI L BBB B(D0A8JP} 8D0A(B BBBG ,rDaK TAC H NK ,LrDaK TAC H NK |8 0,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<LVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB40BBBD A(P@b(A ABB4<HEBBD A(P@b(D ABBt`,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<,VBBD A(P@RHJPW(D ABB4l8JBBD A(P@j(A ABB<PVBBD A(P@RHJPW(D ABB4pBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,TrDaK TAC H NK  ,`%BAD YAB4`ABBD A(M@W(M ABB4xLBBD A(P@l(A ABB<TVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4 BBBD A(P@b(A ABB4DEBBD A(P@b(D ABB| ,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<LVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4<(EBBD A(P@b(D ABBt@ 8,%BAD YAB4ABBD A(M@W(M ABB4 LBBD A(P@l(A ABB<DVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB48BBBD A(P@b(A ABB44PEBBD A(P@b(D ABBlh `,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<<VBBD A(P@RHJPW(D ABB4|(JBBD A(P@j(A ABB<@VBBD A(P@RHJPW(D ABB4`BBBD A(P@b(A ABB4,xEBBD A(P@b(D ABB,drDaK TAC H NK ,h%BAD YAB4hABBD A(M@W(M ABB4LBBD A(P@l(A ABB<LVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4<EBBD A(P@b(D ABB,t rD^K TAC K NK p,%BAD YAB4ABBD A(M@W(M ABB4$LBBD A(P@l(A ABB<\(VBBD A(P@RHJPW(D ABB4HJBBD A(P@j(A ABB<`VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4LEBBD A(P@b(D ABB,rD^K TAC K NK ,rD^K TAC K NK ,PrDaK TAC H NK ,,(%BAD YAB4\(ABBD A(M@W(M ABB4@LBBD A(P@l(A ABB<XVBBD A(P@RHJPW(D ABB4 xJBBD A(P@j(A ABB<DVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,DsK TAC F NK ,$@rDaK TAC H NK T l,%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<$0VBBD A(P@RHJPW(D ABB4dPJBBD A(P@j(A ABB<hVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABBL d,|(%BAD YAB4(ABBD A(M@W(M ABB4@LBBD A(P@l(A ABB<XVBBD A(P@RHJPW(D ABB4\xJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4 EBBD A(P@b(D ABB,DrD^K TAC K NK ,t0rD^K TAC K NK ,rDaK TAC H NK ,rD^K TAC K NK , DsK TAC F NK ,4DsK TAC F NK ,dDsK TAC F NK @ 8,%BAD YAB4ABBD A(M@W(M ABB4,LBBD A(P@l(A ABB<dVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB48BBBD A(P@b(A ABB4TPEBBD A(P@b(D ABB,hrDaK TAC H NK ,rDaK TAC H NK ,rDaK TAC H NK ,XrDaK TAC H NK ,LrDaN TAC E NK 4|rD\K TAC E E C NK 4@rD\K TAC E E C NK ,DsK TAC F NK 4rD\K TAC E E C NK 4T0DHN TAC F E C NN  ,%BAD YAB4ABBD A(M@W(M ABB4$0LBBD A(P@l(A ABB<\HVBBD A(P@RHJPW(D ABB4hJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4LEBBD A(P@b(D ABB,DsK TAC F NK ,0DsK TAC F NK ,DsK TAC F NK ,DsK TAC F NK ,DPDsK TAC F NK ,tDsN TAC C NK  ,%BAD YAB4ABBD A(M@W(M ABB4<LBBD A(P@l(A ABB<tVBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4,BBBD A(P@b(A ABB4d EBBD A(P@b(D ABBD8DK A NG E(E0YC E NH WCA,DsK TAC F NK , DsK TAC F NK ,DDsK TAC F NK ,tDsN TAC C NK ,@DsN TAC C NN ,DsN TAC C NN ,rDaK TAC H NK ,4PrDaK TAC H NK ,drDaK TAC H NK ,rDaK TAC H NK ,@rDaK TAC H NK ,rD^K TAC K NK $,<h%BAD YAB4lhABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<TVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB4 zDbM RAI A I M J H<h T`,l%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4L(JBBD A(P@j(A ABB<@VBBD A(P@RHJPW(D ABB4`BBBD A(P@b(A ABB4xEBBD A(P@b(D ABB4,L%BAD YAB4|ABBD A(M@W(M ABB40LBBD A(P@l(A ABB<HVBBD A(P@RHJPW(D ABB4,hJBBD A(P@j(A ABB<dVBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rD^K TAC K NK D ,\%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4<JBBD A(P@j(A ABB<tVBBD A(P@RHJPW(D ABB40BBBD A(P@b(A ABB4HEBBD A(P@b(D ABB,$`rDfK TAC C NK T,l8%BAD YAB48ABBD A(M@W(M ABB4PLBBD A(P@l(A ABB< hVBBD A(P@RHJPW(D ABB4LJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB44rD\K TAC E E C NK ,l8zDkK TAC F NK ,zDkK TAC F NK ,rDaK TAC H NK ,(rDaK TAC H NK ,,xDkN TAC K NK ,\uDaN TAC E NN ,(DkN TAC K NN ,DkN TAC K NN ,p%BAD YAB44pABBD A(M@W(M ABB4lLBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4\BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,(rD^K TAC K NK x,%BAD YAB4DABBD A(M@W(M ABB4|LBBD A(P@l(A ABB<0VBBD A(P@RHJPW(D ABB4PJBBD A(P@j(A ABB<,hVBBD A(P@RHJPW(D ABB4lBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rDfK TAC C NK , rD^K TAC K NK ,<XrDaK TAC H NK ,lrD^K TAC K NK 4DcK TAC F E K NK ,PrDeK TAC D NK ,(%BAD YAB4L(ABBD A(M@W(M ABB4@LBBD A(P@l(A ABB<XVBBD A(P@RHJPW(D ABB4xJBBD A(P@j(A ABB<4VBBD A(P@RHJPW(D ABB4tBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rD^K TAC K NK 0 ,(,D%BAD YAB4tABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4$JBBD A(P@j(A ABB<\VBBD A(P@RHJPW(D ABB4(BBBD A(P@b(A ABB4@EBBD A(P@b(D ABB X,$%BAD YAB4TABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB40JBBD A(P@j(A ABB<<HVBBD A(P@RHJPW(D ABB4|hBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rDfK TAC C NK ,rDaK TAC H NK ,L8rDaK TAC H NK ,|zDkK TAC F NK ,zDkK TAC F NK ,(rDaN TAC E NK , xuDaN TAC E NN ,<DkN TAC K NN ,l(DkN TAC K NN ,DkN TAC K NN ,DkN TAC K NN ,HDkN TAC K NN ,,rDaK TAC H NK ,\rD^K TAC K NK ,HzDkK TAC F NK ,rDhK TAC A NK ,zDhN TAC F NK ,8uDeN TAC A NN ,L}DhN TAC F NN ,|uDeN TAC A NN (  ,%BAD YAB4 ABBD A(M@W(M ABB4DLBBD A(P@l(A ABB<|VBBD A(P@RHJPW(D ABB4JBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB44 BBBD A(P@b(A ABB4l8EBBD A(P@b(D ABBP H,%BAD YAB4 ABBD A(M@W(M ABB4< LBBD A(P@l(A ABB<t VBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB< (VBBD A(P@RHJPW(D ABB4, HBBBD A(P@b(A ABB4d `EBBD A(P@b(D ABB, xzDkK TAC F NK , zDkK TAC F NK , zDkK TAC F NK ,, hzDkK TAC F NK ,\ DkN TAC K NK , DkN TAC K NN , xDkN TAC K NN , DkN TAC K NN  8,4 %BAD YAB4d ABBD A(M@W(M ABB4 LBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4 JBBD A(P@j(A ABB<L (VBBD A(P@RHJPW(D ABB4 HBBBD A(P@b(A ABB4 `EBBD A(P@b(D ABB, xrD^K TAC K NK ,,zDkK TAC F NK ,\rDaK TAC H NK ,hrD^K TAC K NK ,rD^K TAC K NK ,rD^N TAC H NK X,4%BAD YAB4dABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB40JBBD A(P@j(A ABB<LHVBBD A(P@RHJPW(D ABB4hBBBD A(P@b(A ABB4EBBD A(P@b(D ABB,rDfK TAC C NK ,,rDaK TAC H NK \8,t%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB4T JBBD A(P@j(A ABB<( VBBD A(P@RHJPW(D ABB4H BBBD A(P@b(A ABB4` EBBD A(P@b(D ABB,<x rD^K TAC K NK ,l rD^K TAC K NK , rD^K TAC K NK h , %BAD YAB4 ABBD A(M@W(M ABB4L LBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4@ JBBD A(P@j(A ABB<X VBBD A(P@RHJPW(D ABB4<x BBBD A(P@b(A ABB4t EBBD A(P@b(D ABB, rDaK TAC H NK , rDaK TAC H NK , H rDaK TAC H NK < ,T %BAD YAB4 ABBD A(M@W(M ABB48 LBBD A(P@l(A ABB<P VBBD A(P@RHJPW(D ABB44p JBBD A(P@j(A ABB<l VBBD A(P@RHJPW(D ABB4 BBBD A(P@b(A ABB4 EBBD A(P@b(D ABB, rDaK TAC H NK ,L(rDaK TAC H NK ,|xrDaK TAC H NK ,rDaK TAC H NK ,rDaK TAC H NK , hrDaN TAC E NK ,<uDaN TAC E NN ,luDaN TAC E NN ,XuDaN TAC E NN ,rDaK TAC H NK ,rD^K TAC K NK ,,HrD^K TAC K NK \,t %BAD YAB4 ABBD A(M@W(M ABB48LBBD A(P@l(A ABB<PVBBD A(P@RHJPW(D ABB4TpJBBD A(P@j(A ABB<VBBD A(P@RHJPW(D ABB4BBBD A(P@b(A ABB4EBBD A(P@b(D ABB,<rDaK TAC H NK ,l(rD^K TAC K NK ,xrD^K TAC K NK ,rDaK TAC H NK ,rDaK TAC H NK ,h,D%BAD YAB4tABBD A(M@W(M ABB4LBBD A(P@l(A ABB< VBBD A(P@RHJPW(D ABB4$@JBBD A(P@j(A ABB<\XVBBD A(P@RHJPW(D ABB4xBBBD A(P@b(A ABB4EBBD A(P@b(D ABB, rD^K TAC K NK <,T%BAD YAB4ABBD A(M@W(M ABB4LBBD A(P@l(A ABB<VBBD A(P@RHJPW(D ABB44 JBBD A(P@j(A ABB<l VBBD A(P@RHJPW(D ABB4 BBBD A(P@b(A ABB4  EBBD A(P@b(D ABB,!8rDaK TAC H NK L!,d!%BAD YAB4!ABBD A(M@W(M ABB4!(LBBD A(P@l(A ABB<"@VBBD A(P@RHJPW(D ABB4D"`JBBD A(P@j(A ABB<|"xVBBD A(P@RHJPW(D ABB4"BBBD A(P@b(A ABB4"EBBD A(P@b(D ABB,,#rD^K TAC K NK \#,t#%BAD YAB4#ABBD A(M@W(M ABB4#LBBD A(P@l(A ABB<$VBBD A(P@RHJPW(D ABB4T$JBBD A(P@j(A ABB<$VBBD A(P@RHJPW(D ABB4$(BBBD A(P@b(A ABB4%@EBBD A(P@b(D ABB,<%XrDaK TAC H NK l%,%0%BAD YAB4%0ABBD A(M@W(M ABB4%HLBBD A(P@l(A ABB<$&`VBBD A(P@RHJPW(D ABB4d&JBBD A(P@j(A ABB<&VBBD A(P@RHJPW(D ABB4&BBBD A(P@b(A ABB4'EBBD A(P@b(D ABB,L'rDaK TAC H NK |'8,'%BAD YAB4'ABBD A(M@W(M ABB4'LBBD A(P@l(A ABB<4(VBBD A(P@RHJPW(D ABB4t(JBBD A(P@j(A ABB<((VBBD A(P@RHJPW(D ABB4(HBBBD A(P@b(A ABB4$)`EBBD A(P@b(D ABB,\)xrD^K TAC K NK ),)P%BAD YAB4)PABBD A(M@W(M ABB4 *hLBBD A(P@l(A ABB<D*VBBD A(P@RHJPW(D ABB4*JBBD A(P@j(A ABB<*VBBD A(P@RHJPW(D ABB4*BBBD A(P@b(A ABB44+EBBD A(P@b(D ABB,l+rDaK TAC H NK +X,+%BAD YAB4+ABBD A(M@W(M ABB4,LBBD A(P@l(A ABB<T, VBBD A(P@RHJPW(D ABB4,0 JBBD A(P@j(A ABB<,H VBBD A(P@RHJPW(D ABB4 -h BBBD A(P@b(A ABB4D- EBBD A(P@b(D ABB,|- rD^K TAC K NK - ,-p!%BAD YAB4-p!ABBD A(M@W(M ABB4,.!LBBD A(P@l(A ABB<d.!VBBD A(P@RHJPW(D ABB4.!JBBD A(P@j(A ABB<.!VBBD A(P@RHJPW(D ABB4/!BBBD A(P@b(A ABB4T/"EBBD A(P@b(D ABB,/("rD^K TAC K NK /x",/#%BAD YAB40#ABBD A(M@W(M ABB4<0#LBBD A(P@l(A ABB<t00#VBBD A(P@RHJPW(D ABB40P#JBBD A(P@j(A ABB<0h#VBBD A(P@RHJPW(D ABB4,1#BBBD A(P@b(A ABB4d1#EBBD A(P@b(D ABB,1#zDkK TAC F NK 1$,1$%BAD YAB42$ABBD A(M@W(M ABB4L2$LBBD A(P@l(A ABB<2$VBBD A(P@RHJPW(D ABB42$JBBD A(P@j(A ABB<2$VBBD A(P@RHJPW(D ABB4<3%BBBD A(P@b(A ABB4t30%EBBD A(P@b(D ABB,3H%rDeK TAC D NK 3%,3 &%BAD YAB4$4 &ABBD A(M@W(M ABB4\48&LBBD A(P@l(A ABB<4P&VBBD A(P@RHJPW(D ABB44p&JBBD A(P@j(A ABB< 5&VBBD A(P@RHJPW(D ABB4L5&BBBD A(P@b(A ABB45&EBBD A(P@b(D ABB,5&rDaK TAC H NK 5(',6'%BAD YAB446'ABBD A(M@W(M ABB4l6'LBBD A(P@l(A ABB<6'VBBD A(P@RHJPW(D ABB46(JBBD A(P@j(A ABB<7(VBBD A(P@RHJPW(D ABB4\78(BBBD A(P@b(A ABB47P(EBBD A(P@b(D ABB,7h(rDeK TAC D NK 7(,8@)%BAD YAB4D8@)ABBD A(M@W(M ABB4|8X)LBBD A(P@l(A ABB<8p)VBBD A(P@RHJPW(D ABB48)JBBD A(P@j(A ABB<,9)VBBD A(P@RHJPW(D ABB4l9)BBBD A(P@b(A ABB49)EBBD A(P@b(D ABB,9)rDaK TAC H NK  :H*,$:*%BAD YAB4T:*ABBD A(M@W(M ABB4:*LBBD A(P@l(A ABB<:+VBBD A(P@RHJPW(D ABB4; +JBBD A(P@j(A ABB<<;8+VBBD A(P@RHJPW(D ABB4|;X+BBBD A(P@b(A ABB4;p+EBBD A(P@b(D ABB,;+rDaK TAC H NK <+,4<`,%BAD YAB4d<`,ABBD A(M@W(M ABB4<x,LBBD A(P@l(A ABB<<,VBBD A(P@RHJPW(D ABB4=,JBBD A(P@j(A ABB<L=,VBBD A(P@RHJPW(D ABB4=,BBBD A(P@b(A ABB4=-EBBD A(P@b(D ABB,=-rDaK TAC H NK ,>h- D>`-,\>-%BAD YAB4>-ABBD A(M@W(M ABB4>.LBBD A(P@l(A ABB<>.VBBD A(P@RHJPW(D ABB4DkN TAC K NN ,S`>DkN TAC K NN ,DS>DkN TAC K NN ,tS ?DkN TAC K NN ,S?DkN TAC K NN ,S?DkN TAC K NN ,T@@DkN TAC K NN ,4T@JAJ E NK \CA,dT@DkN TAC K NN ,T AJAJ E NK \CA,T@AuDaN TAC E NN 4TAD\N TAC J E K NN ,,UAuD^N TAC H NN ,\U8BDkN TAC K NN ,UBDkN TAC K NN ,UBDkN TAC K NN ,UXCDkN TAC K NN ,VCDkN TAC K NN ,LVDDkN TAC K NN ,|VxDDkN TAC K NN ,VDDkN TAC K NN V8E,VE%BAD YAB4$WEABBD A(M@W(M ABB4\WELBBD A(P@l(A ABB<WEVBBD A(P@RHJPW(D ABB4WFJBBD A(P@j(A ABB< X(FVBBD A(P@RHJPW(D ABB4LXHFBBBD A(P@b(A ABB4X`FEBBD A(P@b(D ABB,XxFrDaK TAC H NK ,XFrD^K TAC K NK ,YGrD^K TAC K NK LYhG,dYG%BAD YAB4YGABBD A(M@W(M ABB4YHLBBD A(P@l(A ABB<Z HVBBD A(P@RHJPW(D ABB4DZ@HJBBD A(P@j(A ABB<|ZXHVBBD A(P@RHJPW(D ABB4ZxHBBBD A(P@b(A ABB4ZHEBBD A(P@b(D ABB,,[HrD^K TAC K NK ,\[HrDaK TAC H NK ,[HIrDaK TAC H NK ,[IrDaK TAC H NK ,[IrDaK TAC H NK ,\8JrDaK TAC H NK L\J,d\K%BAD YAB4\KABBD A(M@W(M ABB4\(KLBBD A(P@l(A ABB<]@KVBBD A(P@RHJPW(D ABB4D]`KJBBD A(P@j(A ABB<|]xKVBBD A(P@RHJPW(D ABB4]KBBBD A(P@b(A ABB4]KEBBD A(P@b(D ABB,,^KrD^K TAC K NK \^L,t^L%BAD YAB4^LABBD A(M@W(M ABB4^LLBBD A(P@l(A ABB<_LVBBD A(P@RHJPW(D ABB4T_LJBBD A(P@j(A ABB<_MVBBD A(P@RHJPW(D ABB4_(MBBBD A(P@b(A ABB4`@MEBBD A(P@b(D ABB,<`XMrD^K TAC K NK l`M,`0N%BAD YAB4`0NABBD A(M@W(M ABB4`HNLBBD A(P@l(A ABB<$a`NVBBD A(P@RHJPW(D ABB4daNJBBD A(P@j(A ABB<aNVBBD A(P@RHJPW(D ABB4aNBBBD A(P@b(A ABB4bNEBBD A(P@b(D ABB,LbNrD^K TAC K NK ,|b8OrDaK TAC H NK bO,bP%BAD YAB4bPABBD A(M@W(M ABB4,c(PLBBD A(P@l(A ABB<dc@PVBBD A(P@RHJPW(D ABB4c`PJBBD A(P@j(A ABB<cxPVBBD A(P@RHJPW(D ABB4dPBBBD A(P@b(A ABB4TdPEBBD A(P@b(D ABB,dPrDeK TAC D NK dQ,dQ%BAD YAB4eQABBD A(M@W(M ABB4<DVHBBA A(N` (A ABBA T(gBBB B(A0A8R_ 8A0A(B BBBA Tܰh+{BBB B(A0A8R 8A0A(B BBBA ,IJ.5EDA gAB,/5EDA gAB,#LJAEG  AAA TAX<t.BBA A(G@ (A ABBB L$/{؇BBL B(D0A8G@ 8A0A(B BBBF Lt1BBB B(D0A8G@ 8A0A(B BBBE LT4LBBB B(A0A8J@ 8A0A(B BBBG D}BBD A(JI (A ABBF ,5AAD T AAA t(6BFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA ,6AAD T AAA tĵ7BFA A(M0L (A ABBG w (A ABBC g (A ABBC D (F ABBA L<7BBB B(D0A8G@m 8A0A(B BBBE <8:AC HK. . A L<8XBBL B(D0A8GP 8A0A(B BBBF Lh: BBB B(D0A8G@g 8A0A(B BBBK TܵFBBB B(D0A8G 8A0A(B BBBE d446BBB B(A0A8Mu 8A0A(B BBBJ DGDDy$,DU A R T T@;2l,A$P;AI z AK $;AI z AK $Ը`<AI z AK $<AI z AK $$p=AI z AK L=d@,|@AA AA CA$XAAAA,ԹAeBAA O ABJ  C(C4 C,L(C]AAJ NAA$|XDrAAJ `DA$DAAJ zAA,̺EHAAJ 9AA$lhAAI0r7 AA GoBBB A(D0JoJGGNJGGQoGJGL@GJGLXGJGLJGGUJGGQJGGUJGGUFGJGPIGJGPKGJGPIGJGPJGGUJGGQJGGQJGGUJGGQJGGUJGGU 0A(A BBBB GGJLGGGUJGGUJGGUJGGUJGGUJGGQJGGQJGGUJGGQJGGUJGGUJGGUJGGUJGGUJGGUJGGUJGJIJGGNJGGQJGGQJGGUJGGUJGGUJGGQJGGQJGGUEGJGPJGGQhGJGLJGGQhGJGLmGJGLJGGUJGGQxGJGL}GJGLJGGQJGGQoGJGLbGJGPKGJGLJGGQJGGUJGGUJGGQJGGQJGGQJGGQJGGQJGGQJGGQJGGUJGGQJGGQJGGQJGGQJGGUJGGQJGGUJGGUJGGQJGGQJGGQJGGUJGGUJGGQ[GJGPJGGUDGJGPJGGUJGGQJGGQJGGQIJGGUTBBB B(A0A8D 8A0A(B BBBA 4hFAJ Cs. Y F C.'f ",$AA AA CA$TAAA||ZABBD A(G0J _ J G G G G N  J G G G G N  J G G G G Q  0A(A BBBA  J G G G G Q  J G G G G Q  J G G G G Q  J G G G G U  J G G G G Q  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U ] J G G G G Q  J G G G G U  J G G G G Q  J G G G G Q  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G Q  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U  J G G G G U B ,D f\x[$tAU o AJ T XwBBB B(D0A8OG 8A0A(B BBBA  C D 9 A 0,C D 9 A L6dC D 9 A 4BAF O@ DAB(&D]LBBB B(A0A8DPl 8A0A(B BBBA $FD<8BBB B(A0A8= 0A(B BBBH $AAJ@AA<zBAD JpZxAoxApT  AABA $AG@Q AF ,;AG _ AH 4DBAD J`  AABF |G  A T BBB B(A0A8M 8A0A(B BBBA Td@n⒎BBE B(D0A8PC 8A0A(B BBBC LXD@ A l(&&D]LBBG B(A0A8LpM 8F0A(B BBBI <PoBBF A(LF(D ABB<BBF A(O0j (G ABBH T,;AG _ AH  G A $G A 4BAD To  AABB 4 AAG AAC ,H"W(AAGp AAG d|x#BBD B(D0A8Tp? 8F0A(B BBBG u 8C0A(B BBBG ,T%j;AAGp  AAD <P&PBBD A(Tp (A ABBJ Tp#&D]lH'Zp#C D 9 A <p(PBE D(A0b(A FBTL(BBB B(A0A8D` 8A0A(B BBBM L4`*BBB B(A0A8Dp 8A0A(B BBBE L+{BBB B(A0A8D 8A0A(B BBBC L .BBB B(A0A8D 8A0A(B BBBK L$`0BBB B(A0A8D- 8A0A(B BBBK Lt02BBB B(A0A8D` 8A0A(B BBBE L3BBB B(A0A8D` 8A0A(B BBBE L5BBB B(A0A8D 8A0A(B BBBK Ld@7BBB B(A0A8D 8A0A(B BBBK L9BBB B(A0A8D` 8A0A(B BBBE L:BBB B(A0A8D` 8A0A(B BBBM LTP<{BBB B(A0A8D 8A0A(B BBBC L>BBB B(A0A8D` 8A0A(B BBBG L?{BBB B(A0A8D 8A0A(B BBBC D B)\8B)tPB)hB)B)BZDB J ALBEBE A(D0r (A BBBF A(A BBB,8C)LDPCEBE A(D0r (A BBBF A(A BBBCZDB J ACZDB J A0D)HD)`D)xD)4D)LLDEBE A(D0r (A BBBF A(A BBBE1L0EEBE A(D0r (A BBBF A(A BBBE)E)L4EEBE A(D0r (A BBBF A(A BBB F!L8FEBE A(D0r (A BBBF A(A BBBFZDB J A FZDB J A,G)LD0GBBB B(A0A8D` 8A0A(B BBBE LHBBB B(A0A8D` 8A0A(B BBBE LJBBB B(A0A8D` 8A0A(B BBBE L4pKBBB B(A0A8D` 8A0A(B BBBE LLBBB B(A0A8D` 8A0A(B BBBE L0NBBB B(A0A8D` 8A0A(B BBBE L$OBBB B(A0A8D` 8A0A(B BBBE LtPBBB B(A0A8D` 8A0A(B BBBE L`RBBB B(A0A8D` 8A0A(B BBBE LSBBB B(A0A8D` 8A0A(B BBBE Ld0UBBB B(A0A8D` 8A0A(B BBBE LVBBB B(A0A8D` 8A0A(B BBBE LXBBB B(A0A8D` 8A0A(B BBBG LTYBBB B(A0A8D` 8A0A(B BBBE LZBBB B(A0A8D` 8A0A(B BBBE L`\BBB B(A0A8D` 8A0A(B BBBE LD]BBB B(A0A8D` 8A0A(B BBBE L@_BBB B(A0A8D` 8A0A(B BBBE L`BBE B(A0A8Gp 8F0A(B BBBG L4@bBBB B(A0A8D` 8A0A(B BBBI LcBBB B(A0A8D` 8A0A(B BBBI L0eBBE B(D0A8Dp 8A0A(B BBBK L$fBBB B(A0A8Dp 8A0A(B BBBE LtPhBBB B(A0A8Dp 8A0A(B BBBE LiBBB B(A0A8D- 8A0A(B BBBK Lk'BBB B(A0A8D, 8A0A(B BBBL LdmBBB B(A0A8D- 8A0A(B BBBK L`oBBB B(A0A8D 8A0A(B BBBD Lq{BBB B(A0A8D 8A0A(B BBBC LTsBBB B(A0A8D 8A0A(B BBBD Lv{BBB B(A0A8D 8A0A(B BBBC L@xBBB B(A0A8D 8A0A(B BBBD LDz{BBB B(A0A8D 8A0A(B BBBC L|BBB B(A0A8D 8A0A(B BBBK L~BBB B(A0A8D 8A0A(B BBBD L40BBB B(A0A8D 8A0A(B BBBD LpBBB B(A0A8D 8A0A(B BBBK LBBB B(A0A8D 8A0A(B BBBD L$BBB B(A0A8D 8A0A(B BBBK Lt0BBB B(A0A8D, 8A0A(B BBBL L`BBB B(A0A8D` 8A0A(B BBBE L0;BBB B(A0A8D` 8A0A(B BBBG Ld BBB B(A0A8D` 8A0A(B BBBE LБBBB B(A0A8D- 8A0A(B BBBK L@BBB B(A0A8D- 8A0A(B BBBK LT)BBB B(A0A8D` 8A0A(B BBBG L;BBB B(A0A8D` 8A0A(B BBBG LBBB B(A0A8D+ 8A0A(B BBBM LD%BBB B(A0A8D` 8A0A(B BBBG LBBB B(A0A8D* 8A0A(B BBBF L(BBB B(A0A8D` 8A0A(B BBBE L4BBB B(A0A8D+ 8A0A(B BBBM LPBBB B(A0A8D` 8A0A(B BBBK LsBBB B(A0A8D- 8A0A(B BBBK L$0KBBB B(A0A8Dp 8A0A(B BBBK Lt0%BBB B(A0A8D` 8A0A(B BBBG LsBBB B(A0A8D- 8A0A(B BBBK L@BBB B(A0A8D* 8A0A(B BBBF LdBBB B(A0A8D, 8A0A(B BBBL L;BBB B(A0A8D` 8A0A(B BBBG L%BBB B(A0A8D` 8A0A(B BBBG LTз9BBB B(A0A8Dp 8A0A(B BBBK LBBB B(A0A8D` 8A0A(B BBBI LBBE B(A0A8Dp 8C0A(B BBBG LDP BBB B(A0A8D` 8A0A(B BBBG LBBB B(A0A8D` 8A0A(B BBBE LsBBB B(A0A8D- 8A0A(B BBBK <4`BE D(A0b(A FBT,t{HAA ]ABD`BE D(A0G (L BBBA <hBE D(A0j(A FBM, LD9BBE B(D0A8JPz 8D0G(B BBBI LBBB B(A0A8G@{ 8A0A(B BBBJ L`9BBE B(D0A8JP} 8D0G(B BBBF L4PBBB B(A0A8G@~ 8A0A(B BBBG L BBE B(D0A8JPN 8A0A(B BBBF LBBB B(A0A8G@~ 8A0A(B BBBG L$RBBB B(D0A8M`} 8M0A(B BBBC LtBBB B(A0A8G@~ 8A0A(B BBBG L`kBBE B(D0A8J`q 8A0D(B BBBH LBBB B(A0A8G@~ 8A0A(B BBBG LdPIBBB B(A0A8D 8A0A(B BBBE LPBBB B(A0A8G@~ 8A0A(B BBBG L BBBB B(A0A8D 8A0A(B BBBI LT BBB B(A0A8G@~ 8A0A(B BBBG LBBE B(D0A8JPN 8A0A(B BBBF LBBB B(A0A8G@~ 8A0A(B BBBG LDPBBBB B(A0A8D 8A0A(B BBBI LPBBB B(A0A8G@~ 8A0A(B BBBG L IBBB B(A0A8D 8A0A(B BBBE L4 BBB B(A0A8G@~ 8A0A(B BBBG LBBB B(A0A8J 8A0A(B BBBK LBBB B(A0A8G@~ 8A0A(B BBBG L$P9BBE B(D0A8JP} 8D0G(B BBBF Lt@BBB B(A0A8G@~ 8A0A(B BBBG LRBBB B(D0A8M`} 8M0A(B BBBC L BBB B(A0A8G@~ 8A0A(B BBBG LdRBBB B(D0A8M`} 8M0A(B BBBC LBBB B(A0A8G@~ 8A0A(B BBBG L9BBE B(D0A8JP} 8D0G(B BBBF LTBBB B(A0A8G@~ 8A0A(B BBBG LBBE B(D0A8J`\ 8A0A(B BBBH L0BBB B(A0A8G@~ 8A0A(B BBBG LDBBBB B(A0A8D 8A0A(B BBBI LBBB B(A0A8G@~ 8A0A(B BBBG LBBE B(D0A8Jpa 8C0A(B BBBI L4BBB B(A0A8G@~ 8A0A(B BBBG L`BBBB B(A0A8D 8A0A(B BBBI L`BBB B(A0A8G@~ 8A0A(B BBBG L$09BBE B(D0A8JP} 8D0G(B BBBF Lt BBB B(A0A8G@~ 8A0A(B BBBG LRBBB B(D0A8M`} 8M0A(B BBBC LBBB B(A0A8G@~ 8A0A(B BBBG LdBBBB B(A0A8D 8A0A(B BBBI LBBB B(A0A8G@~ 8A0A(B BBBG LBBE B(D0A8G`Y 8A0G(B BBBH LT@BBB B(A0A8G@~ 8A0A(B BBBG LBBBB B(A0A8D 8A0A(B BBBI LBBB B(A0A8G@~ 8A0A(B BBBG LDIBBB B(A0A8D 8A0A(B BBBE LBBB B(A0A8G@~ 8A0A(B BBBG LIBBB B(A0A8D 8A0A(B BBBE L4BBB B(A0A8G@~ 8A0A(B BBBG LBBE B(D0A8JPN 8A0A(B BBBF LBBB B(A0A8G@~ 8A0A(B BBBG $<Tl$yAJ V AF $NAD B AA $0OAD C AA $,XGAD { AA $TGAD { AA $|GAD { AA $GAD { AA $DAD x AA $$GAD { AA $L8OAD C AA $t`GAD { AA $GAD { AA $AD a AI ,AAF FA4#L#d 3|( 3,P ,CA AD bA,P ,CA AD bADP<IBB B(A0A8!0A(B BBBD<H<IBB B(A0A8!0A(B BBBL@BBB B(A0A8D8A0A(B BBBLBBB B(A0A8D8A0A(B BBB$<DT0KBBB B(A0A870A(B BBBD8KBBB B(A0A870A(B BBBL@#BBB B(A0A8D8A0A(B BBBL4$BBB B(A0A8D8A0A(B BBBD@&BBE B(D0A80A(B BBBD'BBE B(D0A80A(B BBBD)8BDB B(D0A8 0A(B BBBA D\*8BDB B(D0A8 0A(B BBBA d+;KBE A(E0(A BBBH0X`0d /;KBE A(E0(A BBBH0X`0t 4 x8D @JKBE A(E0(A BBBG0P`0Dt>pBBB B(A0A8}0A(B BBBD>BBB B(A0A8}0A(B BBBD? BBB B(A0A80A(B BBBDL?xBBB B(A0A80A(B BBBD?BBE B(D0A80A(B BBBD?8BBE B(D0A80A(B BBBD$@BBB B(A0A80A(B BBBDl@ BBB B(A0A80A(B BBB4@ BBD A(I0j(A ABB4@ BBD A(I0j(A ABB,$A@ vIAI ^AB,TA vIAI ^AB4A FDA R0_ AAB4A8 FDA R0_ AAB4A BBD A(M0(A ABB4,BXBBD A(M0(A ABB4dB BBD A(M0(A ABB4BBBD A(M0(A ABBBLB0BBB B(A0A8D 8A0A(B BBBA DCp\C(LtC BBB B(A0A8G 8A0A(B BBBA LC$BBB B(A0A8D 8A0A(B BBBA D)L4D@,BBB B(A0A8D 8A0A(B BBBA LD/BBB B(A0A8G 8A0A(B BBBA LDp8BBB B(A0A8D 8A0A(B BBBA $$E=AAD@AA$LEH>AAD@AA,tE>AAL AAA ,EBAALg AAI EFrExH,FJ&AI fAB,4FK&AI fAB4dFLABAC G0/ AAB4F(MABAC G0/ AABF@NF(QGT,D0 A $G UD0r A DGVl\GW<LtGY'BBB B(A0A8G 8A0A(B BBBA LG^BBE B(A0A8G 8A0A(B BBBA He,HfDH`g\HHh,tHiEAA H@ AAB,HiEAA H@ AABHjD0z A HjD0q A $IkAD0 AA 4D0 A 44}ABAA D@p  AABA l}HDQ,}DAAD@ AAA 4}PHBAA D@p  AABA }JQ~J#~K#4~ K3L~HK3,d~pKCA? AD bA,~MCA? AD bAD~pP<IBB B(A0A8!0A(B BBBD hQ<IBB B(A0A8!0A(B BBBLT`RBBB B(A0A8D8A0A(B BBBLTBBB B(A0A8D8A0A(B BBB W YD$p\KBBB B(A0A870A(B BBBDlx`KBBB B(A0A870A(B BBBLdBBB B(A0A8D8A0A(B BBBLfBBB B(A0A8D8A0A(B BBBDTgBBE B(D0A80A(B BBBDhBBE B(D0A80A(B BBBDPj8BDB B(D0A8 0A(B BBBA D,Hk8BDB B(D0A8 0A(B BBBA dt@l;KBE A(E0(A BBBH0X`0d܂q;KBE A(E0(A BBBH0X`0Du\yDt }KBBB B(A0A870A(B BBB<(GBBD A(J (A ABBI <8GBBD A(J (A ABBI D<HBBE B(A0A80A(B BBBDBBE B(A0A80A(B BBBd̄JKBE A(E0(A BBBG0P`0d4JKBE A(E0(A BBBG0P`0DhBBB B(A0A8}0A(B BBBDBBB B(A0A8}0A(B BBBD,BBB B(A0A80A(B BBBDtpBBB B(A0A80A(B BBBDBBE B(D0A80A(B BBBD0BBE B(D0A80A(B BBBDLBBB B(A0A80A(B BBBDBBB B(A0A80A(B BBB4܇BBD A(I0j(A ABB4BBD A(I0j(A ABB,L8vIAI ^AB,|vIAI ^AB4FDA R0_ AAB40FDA R0_ AAB4BBD A(M0(A ABB4TPBBD A(M0(A ABB4BBD A(M0(A ABB4ĉBBD A(M0(A ABBL(BBB B(A0A8D 8A0A(B BBBA lp L BBB B(A0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA <L\(BBB B(A0A8D 8A0A(B BBBA LJBBB B(A0A8G) 8A0A(B BBBA LpBBB B(A0A8DR 8A0A(B BBBA LLlXBBB B(A0A8D 8A0A(B BBBA LBBB B(A0A8G 8A0A(B BBBA L  BBB B(A0A8D 8A0A(B BBBA \L|hBBB B(A0A8D 8A0A(B BBBA L̍BBB B(A0A8G 8A0A(B BBBA  r4"LL$BBB B(A0A8G 8A0A(B BBBA L,(BBB B(A0A8D  8A0A(B BBBA L0BBB B(A0A8D 8A0A(B BBBA L<H6BBB B(A0A8Gs 8A0A(B BBBA L< BBB B(A0A8G 8A0A(B BBBA L܏XE BBB B(A0A8G 8A0A(B BBBA L,PBBB B(A0A8D 8A0A(B BBBA L|(VsBBB B(D0A8GO 8A0A(B BBBA L̐X[BBB B(A0A8D 8A0A(B BBBA L`BBB B(A0A8D 8A0A(B BBBA LleBBB B(A0A8D 8A0A(B BBBA LHkBBB B(A0A8D 8A0A(B BBBG $ nAAD@AA$4`oAAD@AA,\oAAL AAA ,sAALg AAI (wԒxLx BBB B(A0A8G 8A0A(B BBBA L<!BBE B(A0A8G 8A0A(B BBBA Lx!BBE B(A0A8G 8A0A(B BBBA LܓX BBB B(A0A8G 8A0A(B BBBA ,,&AI fAB,\&AI fAB4ABAC G0/ AAB4ĔНABAC G0/ AABL BBE B(D0A8J 8A0A(B BBBA LLJ BBB B(A0A8G) 8A0A(B BBBA LyBBE B(A0A8GU 8A0A(B BBBA п,D0 A <D0r A \8lt<L'BBB B(A0A8G 8A0A(B BBBA LܖBBE B(A0A8G 8A0A(B BBBA ,HD0,\EAA H@ AAB,EAA H@ AAB4 BAC M`\  AABE 4BAC MpX  AABA ,D0z A L8D0q A lD0 A $XAD0 AA 4;YAAKXD0 A $ AD0 AA 44`;YAAKXLlhBBE B(D0A8ML 8A0A(B BBBA LBBE B(D0A8ML 8A0A(B BBBA L BBB B(A0A8Gy 8A0A(B BBBD L\HBBB B(A0A8Gz 8A0A(B BBBK LBBB B(A0A8Gk 8A0A(B BBBJ LBBB B(A0A8Gl 8A0A(B BBBI LHD0 A 4lBAA D@p  AABA pQ,AAD@ AAA 4xBAA D@p  AABA $Q< #T0 #lH 3p 3, \CA AD bA,̜ \CA AD bAD <IBB B(A0A8!0A(B BBBDD<IBB B(A0A8!0A(B BBBLBBB B(A0A8D8A0A(B BBBLܝXBBB B(A0A8D8A0A(B BBB,D`L\_BBB B(A0A8Jh@8A0A(B BBBL_BBB B(A0A8Jh@8A0A(B BBBL"BBB B(A0A8D8A0A(B BBBLL#BBB B(A0A8D8A0A(B BBBD%BBE B(D0A80A(B BBBD&BBE B(D0A80A(B BBBD,'8BDB B(D0A8 0A(B BBBA Dt(8BDB B(D0A8 0A(B BBBA d);KBE A(E0(A BBBG0X`0d$.;KBE A(E0(A BBBG0X`037L:_BBB B(A0A8Jh@8A0A(B BBB< >GBBD A(J (A ABBA <LPGBBD A(J (A ABBA DbBBE B(A0A80A(B BBBDԢpeBBE B(A0A80A(B BBBdh:KBE A(E0(A BBBF0P`0dl:KBE A(E0(A BBBF0P`0DqBBB B(A0A8}0A(B BBBD4 tBBB B(A0A8}0A(B BBBD|xvBBB B(A0A80A(B BBBDĤxBBB B(A0A80A(B BBBD ({BBE B(D0A80A(B BBBDT|BBE B(D0A80A(B BBBD}BBB B(A0A80A(B BBBDpBBB B(A0A80A(B BBB4,BBD A(I0r(A ABB4d@BBD A(I0r(A ABB,vIAI ^AB,̦vIAI ^AB48FDA R0_ AAB44FDA R0_ AAB4lBBD A(M0(A ABB4BBD A(M0(A ABB4ܧBBD A(M0(A ABB4pBBD A(M0(A ABBLHLl}BBB B(A0A8D_ 8A0A(B BBBA YԨ0xLbBBB B(A0A8GA 8A0A(B BBBA L<xBBB B(A0A8DZ 8A0A(B BBBA LHmBBB B(A0A8DO 8A0A(B BBBA LhBBB B(A0A8G 8A0A(B BBBA LL80BBB B(A0A8D 8A0A(B BBBA L}BBB B(A0A8D_ 8A0A(B BBBA L BBB B(A0A8G 8A0A(B BBBA L\X0BBB B(A0A8D 8A0A(B BBBA 8L̫mBBB B(A0A8DO 8A0A(B BBBA LBBB B(A0A8Gc 8A0A(B BBBA l[PLlBBB B(A0A8GK 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA L<BBB B(A0A8D 8A0A(B BBBA L8<BBB B(A0A8G 8A0A(B BBBA Lܭ(BBB B(A0A8G 8A0A(B BBBA L, BBB B(A0A8G 8A0A(B BBBA L|BBB B(A0A8D 8A0A(B BBBA L̮BBB B(D0A8G 8A0A(B BBBA LBBB B(A0A8D 8A0A(B BBBA LlBBB B(A0A8D 8A0A(B BBBA Lx BBB B(A0A8D 8A0A(B BBBA L (BBB B(A0A8D 8A0A(B BBBG $\AAD@AA$0AAD@AA,AAN AAA ,ܰXAANA AAE < E ZvGvp vxAvh G A <Lh$E ZvGvp vxAvhy G I (+,L,lBBB B(A0A8GK 8A0A(B BBBA L 3BBE B(A0A8G] 8A0A(B BBBA L\8;BBE B(A0A8G] 8A0A(B BBBA LxB9 BBB B(A0A8G 8A0A(B BBBA ,hL6AI iAB,,xM6AI iAB4\NABAC G0/ AAB4OABAC G0/ AABL̳Pz BBE B(D0A8JP 8A0A(B BBBA LY BBB B(A0A8Gy 8A0A(B BBBA Ll8eBBE B(A0A8G 8A0A(B BBBA lԴoxr-D0 A  sD0s A ,tiDPv=\xwLt0yBBB B(A0A8G 8A0A(B BBBA LĵBBE B(A0A8G 8A0A(B BBBA ,xDPD\jE IvMvXvxvp vh v`HvP M A L@E IvKvxvp vh v`EvXHvP M A ,FAA D@ AAB,$FAA D@ AAB4TFAA T`C  AABE 4FAA Tp?  AABA ķD0 A ,0E IvEvx E A МD0n A ,4@E IvEvx E A dD0 A $AD0 AA 4(+YAALX D0 A $AD0 AA 4,h+YAALXLd`BBE B(D0A8M? 8A0A(B BBBA LBBE B(D0A8M? 8A0A(B BBBA LBBB B(A0A8Gn 8A0A(B BBBG LT0BBB B(A0A8Gp 8A0A(B BBBE LBBB B(A0A8Ge 8A0A(B BBBH LкBBB B(A0A8Gg 8A0A(B BBBF <D KE IvIvh vx vpEv` I A 0D0 A 4BAA D@h  AABA ܻHQ<CE IvIvh vx vpEv` I A ,4AAD@ AAA 4d`BAA D@h  AABA Q<hBBD A(J0r (C ABBC |0+BBB B(D0A8J`g 8A0A(B BBBH  8D0A(B BBBI  8D0A(B BBBD $tFrHSLXmBBE B(F0A8Gm 8A0A(B BBBH x:LBBB B(A0A8D8A0A(B BBBDT0BBE B(D0A8I`8D0A(B BBBDBBE B(D0A8Ip8D0A(B BBBLP"BBE B(D0A8I8D0A(B BBB40L(d>&D]|^'$AI z AK $xAI z AK $ AG0 MQ  S$P>.NAI0q* AA Lld|2&AL`BBB B(A0A8GP 8A0A(B BBBG ,PAAG@ AAA DtBBB A(D0G` 0A(A BBBC L(BBB B(A0A8M 8A0A(B BBBC T|xBBB B(A0A8J 8A0A(B BBBC L BBF B(D0A8Mp 8A0A(B BBBG T$BBB B(A0A8J 8A0A(B BBBC D|XwBBB A(A0L` 0A(A BBBB Tp BBB B(D0A8Oz 8A0A(B BBBH LQBBB B(A0A8Lp 8A0A(B BBBG $HinD A G J $<TTlc`XI)+T,gDP\HIt)+D0k,D g ;D vHD@z4DpK M T0l) =h&D]DeBEE E(H0H8M@l8A0A(B BBB, 7D>A)m" }-Q8E   R   D G       3 9K o    1   D      #}}0h \ygy )a-#-#,7_ @PUr {-Qxx)>m}- _}y)Cu}y- S}y- S}y%3e}y%Cu}y)>m}y- _}y)>m}y%Cu}y- _}y)>m}y)Cu}y%O}}- R}y)Cu}yyyVW}W}W}W~W~W~X~X~X~X~X~X~Y~Y~Y~YYYYZZZZZZ[[[[[~[~[Ȃ\\\\\\]]]]]ځ]Ё^Ɓ^^^^^______ۀ`р`ǀ`````a}a|a|a|a|a|b|b|b|b|b|b|b|c|c{c{c{c{c{d{d{d{d{d{d{e{ezezezezezezfzfzfzfzfygiyiyjykxkxlxmxmnxnowo_pwqwqwrwr_tvtvu}u-Q-Q1[k *4d"4<-5 L@Qa  ,6j$kgy )a-#-#DEWE[E[EXEXEXFWF\F\F\F\F\G\G[G[G]G]G]H]H]H]H]H]H]H\I\I\I\I\I\I\J`J`J_J_J_J_J_K_K_K_K_K_K_L_L_L^L^L^L^M^M^M^M^M^M^N^N^N^N]N]N]O]OZOZOZOZOZOZPZPZPZPZPZPZQZQYQYQYQYQYQYRYRYRYRYRYRYSYSYSXSXSXSXTXT[T[T[T[T[U-U[U&,} {Mum:              r0([(   8&,} Qak&1bg~$iy&,}E$]n&xx-Q-Q-Q!!vn (30(X3:$9j(94$Azq"0*ZJ3z:$9jJ9g<::% !%    j ++F3V#:jI6V$Az"(K A6-Z }%>   @Z+w$+,+**'%$$$$#0"*:" v*"**="+")")"'"&"&"%"&"%"("("("(")")")#&&'&((((;^ b+8`z  ] ] }71&E%}A[0x/'100///1))+*)+))))2 + + 2 ( 2 ' 2 , + +((+,+,,,,-,&,..----2-32//./221 + 2 - 1!,!1!/!1'/}%$&$%%%,(%*#*%* % ) % " % ( % ( + + + , & ' ' &'''$))** ).'#;'#')'#%%%%%&}}yUJ!5        2$7j.6Y.;M52A~4'5hx4(6hz4(6hx4)7i|4(6hx4(6hxeZ"-7X2I<*6 T } ^ 900go0h#ES/LCK   #MA*:Gt&}A6,Y%}>KKE}%l         ED}0?O$(D.!)9Fa`WX[\^``K` O O ` N N `P%P`P&Q`fQ`QR,`fT`Oa""`#$K$$K%9K&K&K'J(J(I(G))HG*G*G*E++E+D,D,.D-D-D-C.C0C0C1C1B2B3%C4IB5/C58A7A7A7<8B8@8?89?99>9:C:3`=>=?>>>>>>>?B?B@B@B@BA$CBCFGF+GFGFGGGGGHIH5IIIIIIIJIJJLPL:PMPMOMPM`MOM`QQR`RLUS`S TSUTaTUT`UaU*aVaVaWaW[W*ZX[XZX[YZY*ZZZZZZZ[[^[^\^\^\^]^]^]^]^^^_`_`_`_````Caa}0hQfF~SNNMM+M+L+K+K+KEVV W W V V V V V V V V IHHHNVTSSSSSSRQTTVUTTTUUUUUUUVQQQQQQQL L!V!Q"V"K#K#K#J#Q$Q$Q%P&P'N)V).P)P*P*C+lP,wO-.O.O.O.N/P/J0P0J0J1PJ2J2J3J4G4G5%P:A;D;D<W@W@W@WADADADCGGHILLPQRRUV,R00/O0''+0,,O0'' ) / / / //)++..Q0./..60 - - -!0!,".#.#-#-&-&1&0''0+.,0000 )m" }4KXo}2HUl{1GTky1GTky3IVm~3IVm~*;=^EzEEEEEAFFCBEDCCB FF F F E E F F F F EE FF FF   < AA AA AA AA AA AA AA AA @!@! "@"@" #@#@$ $@$@% %@&@& &@'@' (@(@( )@)@* *@*@+ +@,@, -@-@- .@.@/ /@/@0 0?1?1 1?2?2 3?3?3 4?4?5 5?5?6 6?7?7 8?8?8 9>9>9 :>:>; ;=;=<<=<===>=>>>>?B BB BBC CD E}0h:w , ,                 ? :w    ,    ,              ? c:w,%L   CGe z   -                Ge z   -                7Mg|-gy )a-#-#WWWXXXXXXYYYYYYYZZZZZ˯Z[[[[[[\\\\\\٬\Ϭ]Ŭ]]]]]^^^^^^׫^ͫ_ë____```ݮ`Ӯ`ɮ``aaaaaabb۩bѩbǩbbcccccccdd٨dϨdŨddeeeeeeeffݧf֧fϧfȧfgggg!֦̦¦ЉȊ܊ۭѭԋǭ̌č߯؍կɹЎȏ۸܏ѸǸԐɑݑܷҷȷՒ͓ڶжƶŔٔѕصεĵɖݖ՗۴Դʹƴ͘™߳֙ճ˳ΚƛݲڛӲɲҜʝ۱ޝѱDZž֞Οݹӹ֣xx () 6-VMa      -    Ui%}%%31141101211221343d,},, - , - + ) 0 4 0 0 0 4 /-,,,--*+%40*,+,/332,0004,/0/3%iq%!$!%%%%! $ # $ $ #    "$$$!!! $! iq%!$!%%%%! $ # $ $ #    "$$$!!! $! iq%!$!%%%%! $ # $ $ #    "$$$!!! $! my**)*))) $$$!)))($%% % $ ! # " & # ( $ $%%#'((%'''&#$my**)*))) $$$!)))($%% % $ ! # " & # ( $ $%%#'((%'''&#$my**)*))) $$$!)))($%% % $ ! # " & # ( $ $%%#'((%'''&#$ *!jF2=575-Ĭȹ        ɵ      668ĿɬC   !"""ް"ְ"$$$$%%&'''''ķ////-0001122233ù335̼5ļ568899999:Ѻ;D<<<<ھ=7վ>о>˾>ƾ?׽@7ҽ@ͽ@Ƚ@ýAѼBEEFF*GGGGHHIIJJJKL6LMM۠MN6OOOOP8QRRRSTUUUVVYYYYYZZZ[C\ަ\֦\]^^^^__`aaaaaccccddkkll-lmmmnnnnooppqqrruuuuuٳvѳvɳvwDxxxyz7z{{ޣ{|7}}}}~Ƀރ̯҅Ϫ͈֩و܉Ǘ̗טܘ*2                  $RM$RM 2Vv]2--//././00/2/**//1/1/110/0 / * + * ** :* D( '*(**2*")*)*)*")*)*)*(*"(*8((D(*'***^( '"*$"%'+g-,*---}0hgy a -#-#xx*2                 $RM$RM 2Vv]/.-0-*-)-).02-('/-(-)-))(- . - t+ - *. - D/ '-0-*.-"+-*-*-"*-*-/-/-"/-"+-8''D'-%-*+^' %'+0-*0-0}0hgy )a-#-#xx*2                 $RM$RM 2Vv]/--0-*-)-)-02-('/-(-)-))(- . - t+ - *. - D. '-/-*.-"*-*-*-"*-*-/-/-"/-"+-8''D'-$-*+^' %'+0-*0-0}0hgy )a-#-#xx *2~)m" }8YC$RM$RM   2Vv fU  ' )     U 5  E++++++*++*)+$($'$*$*$*$&$'& ' $ ' % ( $ % $ + $O$9#$q$"'$"%$*($*('$*'$"($$%W$ $W$ $"#$#$$&$} \ygy #a-#-#xx *2~)m" }8XC   2Vv `  D '     U     gy )a-#-# (EJg (#j{ xx  (qg   O6   !Ye} 1!BO}A9(!2M; <    7E--'&(&'&,,(&,&,&+&+&*&.&..- ' ' . & , 1& -&-)3&*&*%#&*#&*+&)!&))&*,,&*)&"+&*+7,%%1&)"&""#%%'&&&&&} \y*2C %  %  %   p- u   2VvARgy )a-#-# (EJg (#j{ xx (  () 6-!tACd   O      ACd   O      ACd   O      !Ye} /!BO}A9(!2M; <    7Hxiii[[[\\[^^]\\bbb] R R R Q R R R R S S S R``_aaaaaa``eeddddccccb^_^`mmmmllllkkkj j j!b![!["["Z#X#X$Y$X%X%Z%Z%Z&Z&Z&Z&Z'Y'j'j'h(i(h(h)j)i)i)i*j*g*g+g+f+f,f,f,f-e-e-e.e.f.f.f/e/Y/Y1Y2Y4Y5U5W5W5W6U7+W:U:WU<W=X=;X?U?AT@TBTB*SDWDYDUE^EYEbEgFgFhFhGiGMG"oHoHoHoHnInInInJmQTTTUUXUZUUWXXXXXYYefffffgghj*2                 $RM$RM 2Vv]0..1.+.*.*/1.)(0.).*.**)./ . , . */ . D/'.1.*/.",.%+.+."+.+.0.0."0.",.8((D(.%.*,^( &(,1.*1.1}0hgy )a-#-#xx0*')))' ) ( '  *,,+*++((*,,, .!-"-$-%('0,(**+) '  ' - -,,,&*++&+'() )"(#($*&   2Vv 'Kkgy )a-#-#xx) *!j6K+`+u++++**"****)**&4*443*4*.-)*- * - - 1 - 1 0 4-3-322-2-11,-/-//.-.--+1-..000/ 3)/3)*+*7&*")* *+ * ** *"**7)*7)*"********"**!*+"*"*+"*%"+&*)0     0     $RM$RM 2Vv   'Kkgy )a-#-#xx) *!j6K-`-u----**%(*665*-++**-,***,11*+ * 0 * 0 * 2 1 0 1 00/1/1/-716165514144313111.133323 2!5*25"7* 2  7** *  q# e$RM$RM 2VvB &2" *  ":Huxx-#-#gy *' 7D>A--U0     ' U0     '    2Vv0  Q   77\gy )a-#-# (EJg--xx)!7!7 (#  (!te[  OMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x*K%%   2Vv0 c  ~ 7  7'gy )a-#-# (EJg--xx)!7!7 (#  (!t4Cd   O   t ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Kah* c   'gy a-#-#xxh* c   'gy a-#-#xx%%   2Vv0 m  ~ 77'gy )a-#-# (EJg--xx)!7!7 (#  (!t5Cd  O   ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka%%   2Vv0O  *       n  '**"gy )a-#-# (EJg--xx)!7!7 (#  (!tACd  O  ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka*' 7D>A--U0     ' U0     '    2Vv0 R   7 7\gy )a-#-# (EJg--xx)!7!7 (#  (!tMCd  O  ACd   O      !Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x*K%%   2Vv0I    k  ~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka8BKW%%$RM$RM   2Vv0D     ~22'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6 xx)!"p%%%   2Vv*u  I       s '~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tYP  O'48MD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka%%   2Vv0I     c  ~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'Ka%%   2Vv0I    h  ~77'gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6  (EJg--xx)!&p%!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV7A%x'K\*b        W'-gy )a-#-#!"Y"Z"Z"\"\"\"\#]#]#\#\#\#\$\$\$^$^$^$^$^%]%]%]%]%]%]&]&]&]&]&]&a'a'`'`'`'`'`'`(`(`(`(`(`(`)`)_)_)_)_)_*_*_*_*_*_*_+_+_+_+_+_+^+f,f,e,e,e,e,e-e-e-e-e-e-e.e.e.d.d.d.d.d/d/d/d/d/d/d0d0d0c0c0c0c0c1c1c1c1c12c2c2c2c2b2b3b3b3b3b3b3b4b4b4b4b4b4a5a5a5a5a5a5a5a6a6a6[6[6[6[7[7[7[7[7[7[7[8[8[8Z8Z8Z8\9\9[9[9  (EJg--xx)!7!7 (#  (!tia  OFMD  Oh8!Ye} 1!BO}A9(!2M; <    7%Im|!ENr\fV1A%x'KaW* 2   7  *gy )a-#-#DEYEZEZEZEZEZFZFZFZFZFZFZGZGZGZG\G\G[H[H[H[H[H[H[H[I[I[I[I[I[IZJ^J^J^J^J^J^J^K^K]K]K]K]K]L]L]L]L]L]L]M]M]M\M\M\M\N\N\N\N\N\N\O\OYOYOYOYOXOXPXPXPXPXPXPXQXQXQXQXQXQWQWRWRWRWRWRWRWSWSWSWSWSWSWTVTVTVTVTVTYUxxW* 2   7  *gy )a-#-#DEYEZEZEZEZEZFZFZFZFZFZFZGZGZGZG\G\G[H[H[H[H[H[H[H[I[I[I[I[I[IZJ^J^J^J^J^J^J^K^K]K]K]K]K]L]L]L]L]L]L]M]M]M\M\M\M\N\N\N\N\N\N\O\OYOYOYOYOXOXPXPXPXPXPXPXQXQXQXQXQXQWQWRWRWRWRWRWRWSWSWSWSWSWSWTVTVTVTVTVTYUxxW* 2   7*gy )a-#-#EE_F^F_F\F\F[F[F[G[G[G[G_G_G_H_H_H\H\H\H\H\I\I\I\I\I\I\J_JbJbJbJaJaKaKaKaKaKaKaKaLaLaLaLaL`L`M`M`M`M`M`M`N`N`N`N`N`N_O_OZOZOZOZOYO^P^P^P]P]P]P]Q]Q]Q]Q]Q]Q]R]R]R\R^R^R^R^S^S^S^S^S_S_T^T[T[TZTZTZTZUZUZU_UxxW* 2   7*gy a-#-#xxW*2   7  *gy a-#-#xxW*2   7  *gy a-#-#xxW* 2   7  *:Huxx-#-#gy W*    2   7*gy )a-#-#@@YAZAZA\A\A\A\B]B]B\B\B\B\B\C\C^C^C^C^C^D]D]D]D]D]D]E]E]E]E]E]EaEaF`F`F`F`F`F`G`G`G`G`G`G`G`H_H_H_H_H_I_I_I_I_I_I_I_J_J_J_J_J^JfKfKeKeKeKeKeLeLeLeLeLeLeLeMeMdMdMdMdMdNdNdNdNdNdNdNdOdOcOcOcOcOcPcPcPcPcPQcQcQcQcQbQbRbRbRbRbRbRbSbSbSbSbSbSaSaTaTaTaTaTaTaUaUaU[U[U[U[U[V[V[V[V[V[V[W[W[WZWZWZW\X\X[X[YxxW*2   7  *:Huxx-#-#gy -?yFL)!s}RZ$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$dA  $  $      $  $ -# <B - #    ;--Q-Q8E@z     @)!s}RZ L@Qa$RM$RM  gy a-#-#&,}&,} Qak&1bg~$iy!7-xx-Q-Q-$5KV=;]F,WnvA####ZA  #  #      #  #>^wFL)!jt0_-#  u$RM$RM  gy )a-#-#,7_ Qak&1bg~$iy% $!7-xx-Q-$5KV=;]F,WZbJ%$$  $uJ,  $      $ >^wdL)!jt0_ -  #   u$5L g  $RM$RM  gy )a-#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<ZbI$$  $ qA$ $    (  $   E?jFL)!kuPX$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$dA  $  $      $  $ -# <@n  L)!jtRZ$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$bA  $  $      $  $ -# ?Fz        . @  )!s}RZ$RM$RM  gy )a-#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<ow%@%%#%#%%%.%%%#&#&b &  @&  &  #&  #&  &  &  .&&&#&#%% % 0%!%#%#N%$?ndL)!jtRZ$RM$RM  gy a -#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<owA$$  $$dA  $  $      $  $ -# Aq         J-"|RZ$RM$RM  gy )a-#-#,7_ Qak$iy!7-xx-Q-$5KV=;]F&,p<bj2A33#3#344#3#3b3A33#3  #3  3  3  #3  #3 3 2-3F2#3 2 *3*3+.3+3, 3,5-2.H03022gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6 !7-xx-$5KV=;]F*=@W;ISv|   CC*i%w      -#)MC4>$"D7<}gy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'Z'Z'Z'Z'Z(Z(Z(Z(\(\([)[)[)[)[)[)[*[*[*[*[*[*[*Z+^+^+^+^+^+^,^,^,],],],],]-]-]-]-]-]-].].].\.\.\.\/\/\/\/\/\/\0\0Y0Y0Y0Y0X1X1X1X1X1X1X1X2X2X2X2X2X2W3W3W3W3W3W3W3W4W4W4W4W4W4W5V5V5V5V5V5Y6 !7-xx-$5KV=;]F*=@W;IS}um  {  CC*i%w                                 f-#)MC4>$"D7<}gy )a-#-#&&_'^'_'\'\'['[([([([([(_(_(_)_)_)\)\)\)\*\*\*\*\*\*\*\+_+b+b+b+a+a,a,a,a,a,a,a-a-a-a-a-a-`-`.`.`.`.`.`/`/`/`/`/`/`/_0_0Z0Z0Z0Z0Y1^1^1^1]1]1]1]2]2]2]2]2]2]3]3]3\3^3^3^4^4^4^4^4^4_4_5^5[5[5Z5Z5Z6Z6Z6Z6_6#!7-xx-$5KV=;]F*=@v;IS3 # ! g V## ##c"C##*##"" " !#!#!#}az     B-#)UH4>$"DB4}gy )a-#-#!7-xx-$5KV=;]F*=A   >   I  v  #C"$]$$*""#"i # ]#"h#$#$$%$$u             -#)MC4>$"D74}gy )a-#-#!7-xx-$5KV=;]F*=Ku%    3   9  j t8     C*}h      @-"y)I=4>$"D74}gy )a-#-#!7-xx-$5KV=;]F*=Ku%    ;   I  z _ ! h! GK !h!)*!!!!! !  k                       -"y)MC4>$"L7<}gy )a-#-#!7-xx-$5KV=;]F*=@r   ;   I  u 6! # g" U!!!!C!!!c!! !* !!! "#"#"#}o               -"y)UH4>$"DB4}gy )a-#-#?@@@@Չ@Ή@lj@AÔAAAAAABBBٕBϕBŕBBCCCCCCCDDהD͔DɘDDDEEEEEEEFۗFїFǗFFFFFGGGGGGHۖHԖH͖HƖHHHIƝIIIIIIJJJJJ؜JΜJĜKKKKKKKLLLL֛L̛L›LMMMMMMMNNNNךN͚OÚOOOOOOOPPPߙPՙP˙PPQQQQQQQRRݘRӘRRRRSSSSS֒S̒S’TTTTTTTUUU#yyyyyzzzzzېzѐzǐ{{{{{{{||||ُ|Ϗ|ŏ|}}}}}}}~~~׎~͎~Î~~ŀ׀ߌÁՌՁˌӂ݋ӋɋуτۊԊ͊Ɗͅ߅܉ˆ݆ߓՓ˓ڇ!7-xx-$5KV=;]F*=Ku%    ;   I  z _13%3"C3"%3&(3)J+K3,|-*3--3.3.2/F0*400414131424243x           -#)UI4>$"\7<}gy a -#-#!7-xx-$5KV=;]F*=Ku    g   A  b _yp " !K"""*#  " # "!#!#"yq        a-"y)I=4>$"L7<},/P  %%]%]&]&]&]&]&\&\'\'\'\'\'\'\'\(\(\(\(\([([)[)[)[)[)[)[*[*[*[*[*Z*Z*Z+Z+Z+Z+Z+Z+Z,Z,Z,Z,Z,Z,Z,Y-Y-Y-Y-Y-Y.Y.X.X.X.X.X.X/X/X/X/X/X/X0X0W0W0W0W0W1W1W1W1W1W1W1W2W2V2V2V2V2V3V3V3V3V3V3V3V4V4U4U4U4U4U5U5U5U5 '<7Nby%D]}$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F "*dr$RM$RM 2Vv}Hw8 7 ":Huxx-#-#gy !!d!d!d!d"d"d"d"d"d"d#d#d#c#c#c#c$c$c$c$c$c$c$c%c%c%b%b%b%b&b&b&b&b&b&b&b'b'b'a'a'a'a(a(a(a(a(a(a)a)`)`)`)`)`*`*`*`*`*`*_+_+_+_+_+_+_+_,_,_,_,_,_,^-^-^-^-^-^-^.^.^.^.^.^.^.]/]/]/]/]/]/]0]0]0]0]0]0]0]1\11\1\2\2\2\2\2\2[2[3[3[3[3[3[3[4[4[4[4[4Z4Z5Z5Z5Z5Z5Z5Z5Z6Z6Z6Z6Z6Y6Y7Y7Y7Y7Y7Y7Y7Y8Y8Y8Y8Y8Y8X9-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZq$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F $RM$RM 2Vvk *    7  "  :Huxx-#-#gy  q q$RM$RM 2Vvk *    7  *  :Huxx-#-#gy $$$RM$RM 2Vv{*77  " :Huxx-#-#gy  q$RM$RM 2Vvk *    7  "  :Huxx-#-#gy  $RM$RM 2Vvk *    7  "  :Huxx-#-#gy -FZw$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F-FZw$) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]FYW          =B:B        Q@L  )m" }7W+:B@L  )m" } q# e$RM$RM 2VvD    *      *"*  *":Huxx-#-#gy 8Qe|$)+A`$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F8Qe|$)+A`$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F8Qe|$)+A`$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F{XRY;C_8E/T\$q8q3 L@Qa$RM$RM   Cgy a-#-#&,}]T$x    &,} Qak&1bg~$iy&,}?$Yf?L^xx-Q-Q-QA6,Y%}%3e}) *!j$C}!-c:^}9,)Y!} 3j.<!mx""%% !_!!&%$ ! F" ! $ $ $ # ! ># ! " "  "*!%% !>6!!"!%%!!!!!' :FN"-9K$RM$RM:Huxx-#-#gy  h [o:H:H:H:H:H =?r  #'; ='Kn "*dr$RM$RM   2Vvgy a-#-#xxA6,Y%}!-c:^}9,)Y!}0d^*%7   / 7*'If%, "*dr$RM$RM   2Vvgy a -#-#xxA6,Y%}!-c:^}9,)Y!}0d^ *%7 >  / \*'If%, "*dr$RM$RM   2Vvgy )a-#-#xxA6,Y%}!-c:^}9,)Y!}0dZ*% 7 l  *'If%,%&:&;&;&;&;';';';';';';';(;(;(;(=(=(=)<)<)<)<)<)<*<*<*<*<*<*<*;+?+?+?+?+?+?,?,?,?,>,>,>,>->->->->->->.>.>.>.=.=.=/=/=/=/=/=/=0=0:0:0:0:0:191919191919192929292929293838383838383848484848484858575757575;6 "*dr$RM$RM 2Vv:Huxx-#-#gy A6,Y%}!-c:^}9,)Y!}0dZ  *% 7 J *'If%, "*dr$RM$RM  gy )a-#-# !"p"p"p"q"q"p"p#{#{#{#{#{#{${${$}$}$}$|$|%|%|%|%|%|%|&|&|&|&|&|&'''''''((((((~)~)~)~)~)~)~*~*~*~*~*~*~+~+~+}+}+}+}+,,,߄,Մ,˄,------....݃.Ӄ.Ƀ.//////0000ۂ0т0ǂ011111222222܁3ҁ3ȁ33334444445ڀ5Ѐ5ƀ5555666z6z6z6z7z7z7z7z7z7z7y8y8y8y8y8y8y9y9y9x9$_x_x_x_x_x_x`x`x`x`x`x`wawawawawawawbwbwbwbwbwbwbvcvcvcvcvcvcvdvdvdvdvdvdvdueueueueueueufufufufufuftgtgtgtgtgtgthththshshshsisisisisisisisjsjsjrjrjrjrkrkrkrkrkrkrlrlrlrlrlqlqlqmqmqmqmqm{m{n{n{n{nznznzoxxA6,Y%}!-c:^}9,)Y!}0dZ*%  7 t 7*'If%,QIC%%  5 E#$RM$RM  gy a -#-#!7-xxA6,Y%} (-$5KV=;]F!-c:^}9,)Y!}*'Io%%)UJ:D$+ER4}CQj ~        @=3Y +3${3HVk$RM$RM  gy )a-#-#,7_ Qak&1bg~$iy!7-xx-QA6,Y%}A8?        '=K*u-$5KV=;]Fj|(   f  m!-c:^}9,)Y!}ulIb v         %     =3Y'IoE8E$RM$RM  gy )a-#-#,7_ Qak&1bg~$iy!7-xx-QA6,Y%} (-$5KV=;]FDDD  z  #   "  "  "  """/P550]U*E  G!-c:^}9,)Y!}IPi }        @=3Y*'Io%%)QD5?%+EU4}%&:&;&;&;&;';';';';';';';(;(;(;(=(=(=)<)<)<)<)<)<*<*<*<*<*<*<*;+?+?+?+?+?+?,?,?,?,>,>,>,>->->->->->->.>.>.>.=.=.=/=/=/=/=/=/=0=0:0:0:0:0:191919191919192929292929293838383838383848484848484858575757575;6hpV3- +3${3HVkJ4` j)    i  -  o  $RM$RM  -#P4g q(    i  - : o    L  jQ@igy )a-#-#!7-xxA6,Y%}uE\;B{;  0S-]>v 1    i    C |     B      L-$5KV=;]F!-c:^}9,)Y!}}rIb v          =3Y'IoE8E  gy )a-#-# !"p"p"p"q"q"p"p#{#{#{#{#{#{${${$}$}$}$|$|%|%|%|%|%|%|&|&|&|&|&|&'''''''((((((~)~)~)~)~)~)~*~*~*~*~*~*~+~+~+}+}+}+}+,,,߄,Մ,˄,------....݃.Ӄ.Ƀ.//////0000ۂ0т0ǂ011111222222܁3ҁ3ȁ33334444445ڀ5Ѐ5ƀ5555666z6z6z6z7z7z7z7z7z7z7y8y8y8y8y8y8y9y9y9x9$_x_x_x_x_x_x`x`x`x`x`x`wawawawawawawbwbwbwbwbwbwbvcvcvcvcvcvcvdvdvdvdvdvdvdueueueueueueufufufufufuftgtgtgtgtgtgthththshshshsisisisisisisisjsjsjrjrjrjrkrkrkrkrkrkrlrlrlrlrlqlqlqmqmqmqmqm{m{n{n{n{nznznzo,7_ Qak&1bg~$iy!7-xx-QA6,Y%} (-$5KV=;]Fa = wD 5 *    E=UC  1 E!-c:^}9,)Y!}]Vo         %  $=3Y*'Io%%)QE5?%+4}@% h [o:H:H:HA6-Z }%>   S6"dx h $  $#)%BSSSSSSSSS =IQ*u}z-{.%/j)G _ M a%Cu}sm}E11010&15&141 4 1 1 / 1 54535381 35s53 2"5"|/#5$1$/%5&.&1(12)5*1+3+5/232323}{#5 >  9  }9.rgy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'['['['['[([([(Z(\(\(\)\)\)\)\)\)\*\*[*[*[*[*[*[+_+_+_+^+^+^,^,^,^,^,^,^,^-^-^-^-]-]-].].].].].].]/]/]/]/]/\/\0\0Y0Y0Y0Y0Y1Y1Y1Y1Y1Y1Y1Y2X2X2X2X2X2X3X3X3X3X3X3X3X4W4W4W4W4W4W5W5W5W5W5V5Z6! ,}$3nXi,7_ Qak&1bg~$iy000!7---xx-Q-493\q ,}$3nXi ,}$3nXi.k-$5KV=;]F\qE&&  {   1}{#5 I  9  }9.rgy )a-#-#%&Y&Z&Z&Z&Z'Z'Z'['['['['[([([(Z(\(\(\)\)\)\)\)\)\*\*[*[*[*[*[*[+_+_+_+^+^+^,^,^,^,^,^,^,^-^-^-^-]-]-].].].].].].]/]/]/]/]/\/\0\0Y0Y0Y0Y0Y1Y1Y1Y1Y1Y1Y1Y2X2X2X2X2X2X3X3X3X3X3X3X3X4W4W4W4W4W4W5W5W5W5W5V5Z6! ,}$3nXi,7_ Qak&1bg~$iy0000!7---xx-Q-493\q ,}$3nXi ,}$3nXi.k-$5KV=;]F\qA6-Z }1&E%}Q###&$#######& # % # # # & "#$##"#!#""#!0$#&#%#!%&%%}?P)m" }%n9#o9 l9 l9 7D>A--- %32   $RM$RM%]~}}jb    T       }493gy )a-#-# ,}$3nXi--xx-;n) ,  )   1 -f ,}$3nXi ,}$3nXi.kt66n'y   -@     ';  I#;!gf59-h 5 0  P >  )++'+++(')(+)')' *")"*"'%))&''('''(()') )) ****'**}0hz::+9 D+ 9 + :+',+'8+'9+:+=:+,,++"-#,)+-*++,,.11827283-:+}{0h?P%n9#o9 l9 l9-Q'-Q'-Q''4'4'4 %3#      DE^E]E]E]E]F]F]F]F]F]F]G]G]G]G\G\G\H\H\H\H\H\H\H\I\I\I\I[I[I[J[J[J[J[J[J[J[K[K[KZKZKZKZLZLZLZLZLZLZMYMYMYMYMYMYNYNYNYNYNYNYOXOXOXOXOXOXOXPXPXPXPXPXPXQWQWQWQWQWQWQWRWRWRWRWRWRWSVSVSVSVSVSVTVTVTVTVTVTVTUU;O,}--Q-Q-Q>4V#    %;b  T      };n) -  )   1 ,}-  %;,}-  %;du;     (  % %Q;66n  'y     <'><:<=@<>><9<3&<';.<2334=8+<9[2;;=>=>?<}{0h?P%n9#o9 l9 l9-Q'-Q'-Q''4'4'4 %3#      DE^E]E]E]E]F]F]F]F]F]F]G]G]G]G\G\G\H\H\H\H\H\H\H\I\I\I\I[I[I[J[J[J[J[J[J[J[K[K[KZKZKZKZLZLZLZLZLZLZMYMYMYMYMYMYNYNYNYNYNYNYOXOXOXOXOXOXOXPXPXPXPXPXPXQWQWQWQWQWQWQWRWRWRWRWRWRWSVSVSVSVSVSVTVTVTVTVTVTVTUU;O,}--Q-Q-Q>4V#    %;     T   };n) -  )   1 ,}-  %;,}-  %;du;     (  % %Q;66n  'y     CA+BCDDDFFH=}{0hDl  $RM$RM S Sgy a -#-#EEYEZFZFZFZFZFZF[G[G[G[G[G[G[HZH\H\H\H\H\H\I\I\I\I\I[I[J[J[J[J[J_J_J_K^K^K^K^K^K^L^L^L^L^L^L^M^M]M]M]M]M]N]N]N]N]N]N]O]O]O\O\O\OYOYPYPYPYPYPYPYQYQYQYQYQXQXQXRXRXRXRXRXRXSXSXSXSXSWSWTWTWTWTWTWTWTWUWUVUZUxx------)KZyK)\kb4AGAN^0{  2     >Fv !2Ss !2Ss%3  >>[s5iW<PN1a a <        ;     d; C%22   > z7#####$}$#$}###q####!#!#"##494gy )a-#-#DD\D_E_E_E_E_E_E^E^F^F^F^F^F^F^G^G^G^G^G^G]H]H]H]H]H]H]H]I]I]I]I]I]I\J\J\J\JYJYJYJYKZKZKZKZKZKZLZLYLXLXLXLXMXMXMXMXMXMXNXNWNWNWNWNWOWOWOWOVO[O[O[P[P[P[PZPZPZQZQZQZQYQYQYQYR\R[R[R[R[R[S[S[S\S\S\S\T\T\T\T ,}$3nXi!7 ,}-------xx---*=$RM ,} ,} (3|=| ,}$3Xi ,}$3nXi ,}$3nXifR.W4         [ E U i90CMuO ,}$3nXi&'s%;>'''(('(''--',)'))'(('!0'0/ ' / / ' " . 5' . . . . - . - . - . -.'.'.'.'.&.&.&.&.&.&.%.%.%.%.%.%.*.).).$+000',,%$",+0'$'"*g'+,+,.'././';LOM^LmMMMMMONMNMMXWMWVgMX M V M V M c M c M c M b M b M bMaMJMUMUMTMTMTMSMSMXMLMGMJMJMKMKMKMLMQMQMPMPMRMQMRMRM[MZMZ M Z M!Y!M!Y"M"Y"M"U#M#f$M$f$M$e%M%e%M&e&M&d'M'd'M'd(M(O)M)O)M)[*M*O*M+_+M+^,M,_,M,_-M-`.M.`.M.a/M/`/M0\0M0[1M1\1M1\2M2]3M3]3M3^4M4^4M6/R7MJK3at7)7)4)33)32)..)-7)2 ) 2 2 )1)76)66)65)55)4)44J)-).1)10)0/)//)+)+*%)+-)-,)+0)0* ) 0 ) - ,!)*xe) 6-PDiDDDD$DDEDE'DGDFDD'DFD@DEDE D F D B D F D C D C D P BDRDRDSDR,DQQVQVQVVQUUQUQUTQTTQSQSQQSSQPQRDPP P O P!O!P!P"P"O"P#H#P#G$P$G$P%C%P%G%P&H&P'D'I'P(I('P)I)N)I)I*I*N*N+I+N+I,N,M-I-M-L.I.L.I.L.L/I/L/K0I0K1I1K1J2I2J2J3I3H3sI4O:DBJ$c$|$$$$###$$#"$#"$##$##$#$###)#)#* # + + # * "#  ,  +  ) (  ( (( (' ' '& && % %% %* )x ,"J(c(|(''''&'&$'&$'&$''$''$'('''-',', ' , , ' . "' . - . $ . / ..+.++.+*.*.*).)).).)(.%%.".-'..$f^vC]CaC_^CffCfeCedC Y C Z Y CYC\[CXXCXWC^^CaCJJoC_C_CddCdcCcbCbbCZC[[1CZC]]CLKCK J C!]!\!C!`"C"`"`#1C#O$C$P$P%C%V%U&C&W&V'C(T(T(C(M)C)R)Q*,C*W+C+U+U,C,U,T-C-O-N.C.O/O/C/L0C0Q0P5%C5O5M6C6L6C7N7S7%C8W8R9C9R9I:C:H:H;C;L;S<C<R<C<R=IBCDDCO_ANAMAVUAUNAMMAWbAaA a a A`A^A^_A^_A_`A`\AWA^]JAVAVAWVASRARRAPPAQARQJAPASTASU A [ Z!A!O!O"A"["A#[#T&lA'L'A'X(X(A)X)Y)A*Y*Y*A+Z+Z+A+\,A,[,\-JA-K.A.L.K/A/J0J0A0I1H1A1H2H2A2J3A3L3L4%A4O4E5A5E5F6A6F6G7A7F7G8A8G8A9J9I;ABe}      *!j tttttfzfzfzf{f{f{f|qf|f| f } f } f ~ f ~ f ~ qf  f fffƀfftfЁfffڂffftffffffffffff߇ff  qf!ڈ!f!#f%'f'(f(ډ(f()f))f)*3f,h,*f,t....//f/0f00f01f1ŋ1͋1ŋ2h2ŋ2i3ŋ33ŋ4i4ŋ4i5ŋ5i5ŋ6j6ŋ6j7ŋ7j7ŋ7j8ŋ8k9f9k9f:k:f:l;f;l;f<l<f<m=f=m>f>m>f>n?f?n@f@n@f@oAfAoBfBoCfCpCfCpDpDfDqEfEqErE(qFrFqFڌGqGG(qHxHqHxIqIyI(qIyJqJyJqJyK(qKxLqLxLqLtL(qMtMqMuNqNuNqOKtOsPtPsPtPrQtQrQtRsRtRsStSuTfTuTfTvUfUvVfVvVfVwWfWw_PqhHDMNNNNOOOOOOPOPP$PP$PQ$PQ$PQ$PQ$PR P R P R P R P S P S aP S P SPTPTPTPUPUPUUPUPVPVPVPVPWPWPWUPWPXPXPXPXPYPYPYUPYPZPZPZP[ P [ P [!P![!UP"\#P#\#P#\$P$\$]%\%]&\&]'\']'\(^(\(^)U\)^*\*^*\+_,7_-`-%_-`.%_.`/_/ `/`/`0a0a0a1a1b1b2b3b4c5b5c5b5c6b6c7b7d7b7d8Ub8d9b9d:b:e:b:e;b;e;b;f<b<f<b=f=6b@bA_M'9mH           ,H%,*,   ,    ,    8g         Qa  M  ^     $% ,V7[Q% &V[iAWm          F0V006,6105/ /  , /01/10///L151515151///3/3/0//144 1 4!4&2&4&1'4'2'4'2(4(3(4(2)4)3,6,-3---#,.5.3../,//11K+DC!DCDCDLDKDCDBIDLDLDHODHHDKKOD FI I G OI I H I J J OIIIIIMLIKJI@@I@?IAIA@OI@IBBIBAIGGIB:I;I;;OI;I=<I<<I>= I = =!I!?!I"?">"GI#>#F$I$F$E%I%E%:&I&9&F'I'F'I'E(D(TI)D)I)D*M*I9Li[i!ijiiIihigigOihhiggOiFkkk Ok k f k _ l kljkklTkikiykivivimixkqrkuukuvkwkvk||kopkppkqqkxkwwkn k t!k!s!t"k"r"r#k#|#X$k$z$z%k%y%k&z&{'k'm'k'm(k(n(n)k)o)o*k*x*y+k+s,s,k,t-k-{-{.k.`/k/`/_0k0a0a1k1f1e2k2\2[3k3c3k4c4b5k5c5k5b6a6k7_7^7k8[8[8k9[9Z:k:Z:k:Y:Y;k;Y<k<^<]=k=]=]>k>]>\?k?e?e@k@dAkAdAcBiBdBiB`CkC_YY+PP!POPhPhPePdPdNPdPgPfOPffP`` OP F` ` e O` e f ` e b O`b`c`ba``a`aM`LN`N`ccO`d`c`YY`ZY`XX`YX`[`[\O`\`[Z`[[ ` ^ ]!`!^!^"`"\"`#\#]#O`$]$`%g%g&`&g&M'`'_'^(`(`(_)`)U)`)U*U*O`+U+`,T,S,`-U-T-`.W.W.`/X/W/`0V0`0V0V1G`2V2R2`3R3S3`4S4Q4`5Q5R5`5R6`6P6P7T`7Q8`8P8O9`M Sqbq!qqqrqqrqrqukqEqpqqOq ׊ q Ҋ  Oq F   O  pOpzzz5cz|{z{{Oz}|z||FzOz}}zzzKzzɍz č  z!!z!!lj"Kz#‰##z$y$x$z%x%w%z&w&z&v&u'nz(y(y(y)y)y)y+y+y,y,w,t-y-w-y.w.v.Ty/r/y0v0v0y3z3q334z555z66̓6z7ׂ7z778bz9ȃ99:ȃ:';ȃ;ׄ;ȃ<'<ȃ<=ȃ='>ȃ>ۅ>ȃ>'?ȃ?@ȃ@o@ȃAnAkAȃBzBnBnCzCnDzDmDmDTzElFzFoFzFoGnGmHoHoHoHoIoIlJoJlJoJjKoKKoLLoLMoM~MoM~NoN~NoO~OoO}PoPṔQoQqRǁRk[aja!a]attajajaiSasrarrEaia[aZOa Z Z a Z Y Oa FY Y ] OY\]Y][OY[\Y\k5YckllkkkOkkjkYXFkXVOkmmkmlkpkppKkooko n k r!q!k!o"k"q"p#Kk$t$s$k$s%s%k%h&g&k&f'k'g'f(Ok(f)k)h)k*i*h+k+h+k+g,k,g,k-m-k-m.k.n.k.n/k/d/k0c0k0d1k1d1k1c2k2b3k3c3c3Ok4f4e5k5e6k6e6X7Vk7e8e8b8b8b9b;b;b;b<b<_<b<d=b=a=`>Tb?^?b?a?a@bBkX ]wlw!wwwʈwgwgwfSwjiwihEwwhwhOw h g w n f Ow Fn n m OnmnnmlOnklnlj5ncjkkjwwOjvvjvuFjuuOjutjttjsjtsKjqqj q p j s!r!j!s"j"r"q#Kj$p$p$j%p%o%j%o&o&j&'j''(Oj()j))j**։*++n+,n,,؅----..//܆//000111܃2222333DŽ4O455666777788π89؂99::::;;;<<<~==~==>>????O@}@}AA}BB|B~CVC~D~D}D|D|E|G|G{G|H{H|H|H|I|IzIzJT|J{K|KzKxL|NjfI$0}0010100/0000\011f//./ 2 B. 4 / .U7m7l7+777477777979/7:9]78798X765755[7I767X7 6 6 7!5!3!]7"4#7#4#2#!7&4&)&4*..//,k%-0"x__4@s3      | /   RGYq0  vn:  |       %3  $RM$RMAT%Pgy a-#-# ,}$3nXi--xx- ,}$3nXi ,}$3nXiC`:1         |eY8 A    }0h "*drk`              7  " $RM$RM:Huxx-#-#gy  "*dr.6)m" }GXt7"$RM$RM:Huxx-#-#gy %9F:H[*=8EY5BOk5G[)B)<)<)B)<)A6-Z }NNA79McN0}0hNA79McN0}0hNA79McN0}0hNA79McN0}0hNNNNN5OE86MVh-}0hI=9Mce}0h5O5O5O5O5OA76MVsh-}0h5OA76MVsh-}0h5OA76MVsh-}0h5OA76MVsh-}0hNNNNN)h%Z%Z%Z'h't'i)jGGddd1Id|3d|3d|3d|3N5O+I@l          5O),5O),5O+5O),NNNNN5OGt1d|3,  N,    ,EYv) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F,EYv) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F,EYv) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]F--QE  f8E!Hl!Hl2RFf L@Qa @%$RM@%$RM@%$RM$RM$RM  gy a-#-#&,}&5l}c   S$ '&+:q (,s4YP1+ ,s4 Qak Qak*&1bg~$iy,s4#[cnX-w!7--xx-Q-Q-Q-Q-$5KV=;]F^!74NI\ v$!##!!"!### " " 7" " 7"""e 3"!"M"> )" T":"s", a####,ALHR9    a      j)m"},EYp) +I$RM$RM$RM:Hu7~,-xx-#-#gy -$5KV=;]FR?,D,M{G$L(<$Hh)6$Hh#3D\8E:59:54:5D25155555K5J5J5J 5 I 5 I 5 I 5 H 5 E 5 E 5 D 5 6 5B575:5358535@57525B5@5A5A545653545252575958565B5C 5 C 5 C!5!E!5!G"5"F"5"G#5#F#5#G$5$F$5$H%5%@%5%A&5&:&5&='5';'5'>(5(;(5(=)5)<)5)?*5*:*5*=+5+<+5+>,5,;,5,>-5-<-5-?.5.8.5/11%3!&5zBQ         > o w) 7XMA*:Gt&}A6,Y%}#@0d&.F+D>       M s .TU%%>%>&>&>&>&>&>&='='='='='='='=(=(=(=(=(<(<)<)<)<)<)<)<*<*<*<*<*<*;*;+;+;+;+;+;+;,;,;,;,;,;,;,;-:-:-:-:-:.:.:.9.9.9.9.9/9/9/9/9/9/909090808080818181818181818282827272727373737373737374747464646465656565%%>%>&>&>&>&>&>&='='='='='='='=(=(=(=(=(<(<)<)<)<)<)<)<*<*<*<*<*<*;*;+;+;+;+;+;+;,;,;,;,;,;,;,;-:-:-:-:-:.:.:.9.9.9.9.9/9/9/9/9/9/909090808080818181818181818282827272727373737373737374747464646465656565 0%' '  '  % %''(((  (""(%%%(((**(--'00'00%33%66(88(;;'>>'@@'CC'FF'HH'KK'NN'PP'QQ%ST%VV'XY'[['^^'^^%aa'dd'ff'hh&jj&ll&nn&op&rr'uu'ww'zz'}}''ʂׂ'''؈'%׍''(ԕ'''͝ڝ'%%£ϣ''%ī''(ų((ظ('%þ%''''%''''''''''%%(''''''%%''̈́ڄ''%Œό''(ؔ(''Қߚ%5   'Kk)QO  )     F5.R/..0021111100-. - - , . + / / /'+.'+/+#+& &'++'++-./+02000-00101111111121%%>%>&>&>&>&>&>&='='='='='='='=(=(=(=(=(<(<)<)<)<)<)<)<*<*<*<*<*<*;*;+;+;+;+;+;+;,;,;,;,;,;,;,;-:-:-:-:-:.:.:.9.9.9.9.9/9/9/9/9/9/909090808080818181818181818282827272727373737373737374747464646465656565[eG5v~'i^+1 $RM$RM)85O44 S]6gy )a-#-#,7_ Qak&1bg~$iyxx-Q%>HPX"          BQX`     -m f)!%:OT\ K          <     "  ]T\ 02     M!  3  * %%%&؃&΃&ă&&&'''''''(ւ(̂(‚((())))))*ށ*ԁ*ʁ****++++++,܀,Հ,΀,ǀ,,,-----......./~/~/~/~/~/~0~0~0~0~0~0~1}1}1}1}1}1}1}2}2}2}2}2}2}3|3|3|3|3|3|3|4|4|4|4|4|4|5|5|5{5!V{W{W{W{W{W{WzXzXzXzXzXzXzYzYzYzYzYzYzYyZyZyZyZyZyZy[y[y[y[y[y[y[x\x\x\x\x\x\x]x]x]x]x]x]x^x^w^w^w^w^w_w_w_v_v_v_v`v`v`v`v`v`v`vavavauauauaububububububucucucuctctctctdtdtdtdtdtdtetetetesesesesfsfsfsfsfgsgrgrgrgrgrhrhrhrhrhrhririqiqiqiqiqjqjqjqjqjqjqjqkqkpkpkpkpkplplplplplplplpmpmomomomomonononooi#$&&((^J6#vP)QO  )     -+U'/+C!lg +CLx)MKJ3-Rn>DD]D]E]E]E]E]E\E\E\F\F\F\F\F\F\G\G\G\G\G[G[H[H[H[H[H[H[H[I[I[I[IZIZIZJZJZJZJZJZJZJZKZKZKZKZKZKYLYLYLYLYLYLYMXMXMXMXMXMXNXNXNXNXNXNXOXOWOWOWOWOWOWPWPWPWPWPWPWQWQVQVQVQVQVQVRVRVRVRVRVRVSVSUSUSUSUSUTUTUTUT;O'7_'&5l}%40h9&ED%40hS-Qn$aU L  #}0h$ &m aNB0B0B1B B0BBРB BPBBBBpB BB0BBCPC)C:CPsCC0CD1D@dDD DPD`DE E%EjEjEtE EEE@EEE`EE7FfF F0FFFPFP*G`*G@4GPlG`lGmG|GGGG GGG0GGG@GGGPGGG`GPG@GGGPGG`GGp H$HDHHH`H@H H`IpII`EItI@II J2JbJpJ0JJ KpPK0KKKKLNL~L~LPLLLLLLPLLpL LЭLLLLLLPL LL MM`-MLMlMPMMM`MMM0M`MMM"N"NP%NaN=-Nh / K     DDOPYR.Sosoo kA ķwЗo@y@@ H-=A5A( o3Aoo+A6kAFkAVkAfkAvkAkAkAkAkAkAkAkAkAlAlA&lA6lAFlAVlAflAvlAlAlAlAlAlAlAlAlAmAmA&mA6mAFmAVmAfmAvmAmAmAmAmAmAmAmAmAnAnA&nA6nAFnAVnAfnAvnAnAnAnAnAnAnAnAnAoAoA&oA6oAFoAVoAfoAvoAoAoAoAoAoAoAoAoApApA&pA6pAFpAVpAfpAvpApApApApApApApApAqAqA&qA6qAFqAVqAfqAvqAqAqAqAqAqAqAqAqArArA&rA6rAFrAVrAfrAvrArArArArArArArArAsAsA&sA6sAFsAVsAfsAvsAsAsAsAsAsAsAsAsAtAtA&tA6tAFtAVtAftAvtAtAtAtAtAtAtAtAtAuAuA&uA6uAFuAVuAfuAvuAuAuAuAuAuAuAuAuAvAvA&vA6vAFvAVvAfvAvvAvAvAvAvAvAvAvAvAwAwA&wA6wAFwAVwAfwAvwAwAwAwAwAwAwAwAwAxAxA&xA6xAFxAVxAfxAvxAxAxAxAxAxAxAxAxAyAyA&yA6yAFyAVyAfyAvyAyAyAyAyAyAyAyAyAzAzA&zA6zAFzAVzAfzAvzAzAzAzAzAzAzAzAzA{A{A&{A6{AF{AV{Af{Av{A{A{A{A{A{A{A{A{A|A|A&|A6|AF|AV|Af|Av|A|A|A|A|A|A|A|A|A}A}A&}A6}AF}AV}Af}Av}A}A}A}A}A}A}A}A}A~A~A&~A6~AF~AV~Af~Av~A~A~A~A~A~A~A~A~AAA&A6AFAVAfAvAAAAAAAAAAA&A6AFAVAfAvAAAAAƀAրAAAAA&A6AFAVAfAvAAAAAƁAցAAAAA&A6AFAVAfAvAAAAAƂAւAAAAA&A6AFAVAfAvAAAAAƃAփAAAAA&A6AFAVAfAvAAAAAƄAքAAAAA&A6AFAVAfAvAAAAAƅAօAAAAA&A6AFAVAfAvAAAAAƆAֆAAAAA&A6AFAVAfAvAAAAAƇAևAAAAA&A6AFAVAfAvAAAAAƈAֈAAAAA&A6AFAVA}P}}} t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t@j@j@_eJeepOe ]ereFefemeܱܱб(GG`ezeeePvewe {ee0}e0eeeee@eePee`@eҮ  0eeeee@eePee@൮@pe, (6 @_e`eepOe ]ete efemePP ~\h0eeeee@eePee  @e(c8 , `GG0e@ee`e`e eeee  @_e0eepOeetePefemePP ~`hf0ffefP ffpfff hP`̮f0ffefP ffpfffî h @  Ů,î6@I880eeeee@eePeeĮĮĮ Į0`ĮĮ @ܮR@[ @  0eeeee@eePeeƮƮǮ Ʈ`HƮƮ @fȮv 0ܮR8@@0eeeee@eePee ʮ ʮ@ʮ ɮH0ɮ $ʮ  "& @ ҮҮ Ү ҮҮҮ"ҮҮ9 "ҮT(&خmee0e0eee0eee`ͮ`ͮͮh-zee  !"#$%&'()*+,-./0123456789:;<=>?@ffepfff`ffpfҮҮf0ffefP ffpfffծ@Ԯ`ӮӮ -# *6֮0eeeee@eePee׮׮@׮֮8 ֮׮ @H:* =0eeeee@eePeePٮPٮٮخ@(ٮTٮ @p f@ܮ fۮ p!f@ۮ!fڮ ޮ  <<0eeeee@eePeeݮݮޮ`ݮݮݮ @@(@x @m  0UfSfUf@fp"fIf`$fVf )fl߮l߮߮߮`߮0@@jԨss0eeeee@eePeeP8@ @@0f 0f @]R( 1f0]R]R0eeeee@eePeePP0  @.f/f /f,f@,fp+f,f,f@-f-f-f@.f(@(d..0eeeee@eePee@hP@@H@m0eeeee@eePee@`@( @ ' 2??@2fp2f1f2f3fp3f3f 4fp4f(@    J Vd  v     2H`odef0ffefP ffpfff@H0  4f @5f@  5f!       v v 6f7f`9f`7f7f8f`8f8f9f @@ f0ffefP ffpfff H0`9f p:f " " 0eeeee@eePee (`@s  0eeeee@eePee`H@ @!  |!(v!8!!@r%!1!1!;f;f:f f!>f} ?f!h"h"[f[fZf\fP\f\f]f`]f]f@(@  r" """ """"" " x#x#@_ete^fpOe ]eterefeme ~h##0eeeee@eePee  @ 8  @ #bf # bf@ ###_f_f^f`fP`f`faf`afaf  @ ( $/E0eeeee@eePee  ` H0   @f( |!$$0eeeee@eePee`p @%$83$H w>$J$J$cfcfcf dfpdfdf efefef``@(U$n$ $$$ffff@if@gfgfgf@hfhfhf`` $$0eeeee@eePee@@p$x@%%%`ezeeePvewe {eifjf``(f%f%kf lfpnfplflf mfpmfmf nf  @ @@%%@_eof`ufpOe ]e`teqffemell`( ''0eeeee@eePee@ P8 @y'-' vf@:' @F'(vfV'0@a'22''f0ffefP ffpfff@`H0wf@'wf'''0eeeee@eePee   `  =@!'e(e(0eeeee@eePee""@"!(!@ xf@#x(xf"(?((0eeeee@eePeeP%P%% `$`H$ `%  "@ ̯(@9( @ӯ(D( Y((>(0:*8a)@"(()H)H)0eeeee@eePee))@)(0() @!'h) M~)'B'B0eeeee@eePee+++*X@++  @3)@) ϯ)6) ٯ)(:*0K*88)'*'*0eeeee@eePee@/@//`..P/  @@;7*3) @)ϯ)6):*1H*@h***0eeeee@eePee222 20`22 @g*6* @f***0eeeee@eePee445 4@(44 @J +@+ Z+ -+C+C+f zfepf`yfyf yfyf@yf66H+H+0eeeee@eePee777`7x`7@OW+e+e+0eeeee@eePee8898@(8@!'++0eeeee@eePee : :@:9H0:@֯+++{f@{f`zf{f{f@|f|f|f@}f ; ;++0eeeee@eePee<<<;p@<< @A+@@+P @ï+X+hW,%%0e@ee`e`e e}f~f@f>>(,,0eeeee@eePee??@`?0??@\,S,,,0eeeee@eePee`A`AA A@(PA@!'--f0ffefP ffpfffDC`B@(B @ǯ"-@i-- @i5-@iA---0eeeee@eePeeEEF EX@EE @PfG-ЂfG- -į---f fPfpff fpfЅf fHHJH(@IH -- -../...f@ffff@fff@f K K@K ..0eeeee@eePeeLLM`L0LL @g*6* @f*..fff0fff0fff`N`NON(NN . ...0eeeee@eePeeQQQ P`HP Q  "@ @._ / /Я'/  7/(H/0dQ/8UY/@"f/x/x/0eeeee@eePeeTTU`T0TT @߯/:* @///0eeeee@eePeeVVW`VpXV@կ/(///Ѝff0fPfffPfff X XY@X(XhX/ / 0000eeeee@eePee`Z`ZZ ZH0PZ@0,0,0f fPfpff fpfВf f`[`[\[([[ ;0 G0U0U0f@fpfff@fff@f ] ]@_@](]]    - d0 r000000 0 0 1 +1 >1 R1 n1n10eeeee@eePee`````@(`@įz1110eeeee@eePeebb@ba@(ab@b1 ȯ1110eeeee@eePeeccc`c c=@@د1J2J20eeeee@eePeeee@edP8d@feR2ޯ^222ff0f0fff0fffffg220eeeee@eePeehhh h(`hh@2@ۯ333PffНfЛf ffМf0ffiij330eeeee@eePeekkk k(`k@Pfl3Оf@l4?44f0ffefP ffpfffonm(@n 44 $4@14A4A4f0ffefP ffpfffr@qpx`p J4@R4 @*S444f fpfpff fpfСf f s s@s 550eeeee@eePeettu`tpt@fu5@&5,5,5 fPffffPfffPfvv@wv(wv45:5C5C50eeeee@eePeexxy`x(x @ҮO5ҮV5 Ү[5_5_5@fpffffpff fpf`z`z{z({zp55#5"55F6F60eeeee@eePee@}@}}|8 }D} @fJ6@fQ6 fX6@f~b6660eeeee@eePee x` @f6(Pf6P f4: 660eeeee@eePeepp8  @Үr"Ү6 Ү" Ү"Ү"Ү"Ү"66f@fpfff@fff@f@(@  7 77!7%7},707770eeeee@eePee  @`H0$ @f7f@7 f7f@7 @7(f7   8 8f0ffefP ffpfff@hP@ f7f@,7 f}f@&8 f+8 ""TTpffеff@fffPff(@(/858Y}=8=80UfSfUf@fp"fIf`$fVf )f엯엯@0@@2Ԩ880eeeee@eePee`hP@f6(f6 880eeeee@eePee  @f8(f6P 0f6xf8 99f fPfpff fpfоf f(蠯9 9$999@_etepfpOe ]eterefemeX::0eeeee@eePee࣯@ @@f8(f@6P `f6xf@8f":f@1: ::0eeeee@eePee੯H0@ @f7 f@7 f:5:  f@:(8:   ::0eeeee@eePee  @யH0@ܯ:Z;Z;0eeeee@eePee X@` @f- f% j;: ;;@fpffffpff fpf  @;;ff@f`fff`fff೯೯(@(;; ;O<O<f0ffff0fff0f൯൯?T<T<0UfSfUf@fp"fIf`$fVf )f,,@ 0@@Ԩ<<ff f fpff fff==@fpffffpff fpf``k=k=0eeeee@eePeeX@ @@f@t=fz= @f@=f= @f@=(f=0Pf@=8f= ==0UfSfUf@fp"fIf`$fVf )fl¯l¯¯¯`¯0@үԨ&>&>f@ffff@fff@fïïį>>ff0f0fff0fff ů ů@ů>>0UfSfUf@fp"fIf`$fVf )flƯlƯƯƯ`Ư0@@%Ԩ>>0eeeee@eePee ȯ ȯ@ȯǯ ȯ=@@i-9@?@?0eeeee@eePeeɯɯʯ ɯ8 ɯɯ @f̯^?0f˯p? f˯|?@f*'?>D>D0eeeee@eePeeͯͯͯ ͯ0`ͯͯ @0fϯ?fί? ?@@0eeeee@eePee`Я`ЯЯ ЯH0PЯ@@0eeeee@eePeeѯѯѯ`ѯH0ѯ@@0@@@ff`f`fff`fffүүү?@@0eeeee@eePee@ԯ@ԯԯӯhP ԯDԯ@@H@Hů@@@0eeeee@eePee֯֯@֯կ(կ֯@@-@@@@0UfSfUf@fp"fIf`$fVf )flׯlׯׯׯ`ׯ0@@:Ԩ@@0eeeee@eePee ٯ ٯ@ٯد8 ٯ@=A)A)AffffPfff`ff گ گگ@گ(گhگ=ALAhAhA0eeeee@eePee ܯ ܯ@ܯۯH0ܯ@AAA0UfSfUf@fp"fIf`$fVf )f,ݯ,ݯݯ@ݯ ݯ0@@ԨAA0UfSfUf@fp"fIf`$fVf )fޯޯ߯ޯޯ0@@@Ԩ@$B$Bff f fpff fff  @(6B6B0UfSfUf@fp"fIf`$fVf )fll`0@@ԨAA0eeeee@eePee@ x`@  "& * . @үBf@B fBf@B  fB(f@B0 fB8f@B@"0fCH&f@CP*PfCX.f@$C  ;B;B0eeeee@eePeePP ``H  "@үBpf@}C fCpf@C fC(pf@C0fC8pf@C@"fC CCf@fpfff@fff@f``@(DD*D;D;D0f`ffff`ffg`g``( (KDAA0eeeee@eePee P8 @J +@+ RDZ+()cD0@lD~D~D0eeeee@eePee`` H0P@DDD0UfSfUf@fp"fIf`$fVf )fll`0@@WԨDD0UfSfUf@fp"fIf`$fVf )f@0@@FԨDD0UfSfUf@fp"fIf`$fVf )fll`0@>Ԩ DD0eeeee@eePeePPP8 T @@Y E(@@0 @LEEE0eeeee@eePee@(@ @J +@+ O&E2E #;EEEEE0UfSfUf@fp"fIf`$fVf )f0@@Ԩ`E`E0UfSfUf@fp"fIf`$fVf )f,,@ 0@Ԩ EE0eeeee@eePee    X@  @g@E0gE g@E0gE g@7(@g 70g@ 78`g 7IIgggg`gggpgg``Y<Y<0eeeee@eePeeX@ @үFgF !F g@F  gF( g@F0 gF8CG  fGfG g g0g0 g g g0 g g g(GGf0ffefP ffpfff H0`6GgGJEJE0eeeee@eePee X@`= @g-^- R HkHkHggPgPgggPggg3|H|H0eeeee@eePee@ @  P8 @mHcHII0eeeee@eePee""@"!(!@g@#IPg"I?FFpgggg@gggPgg`$`$$>>0eeeee@eePee`&`&&%H0&d& @pg(ISI @\IMJ g(!J(l.J JJg@gggg@ggg@g))) JJ0eeeee@eePee++,*X@@+  @g1 Kg1K g0Kg0"K g/-K(g/8K0g.AK8g.OK? ?KK0eeeee@eePee33@3202 @ g5K g4K !g4K?? KK0eeeee@eePee`6`66 6`HP6@6KKKf0ffefP ffpfff@87`7H07@yK@|K[[0UfSfUf@fp"fIf`$fVf )fl9l999`90@@}Ԩ@@f0ffefP ffpfff=;:H0@; @PKqL nLjLB L)L)L0eeeee@eePee`>`>> > P>=@pELDDf0ffefP ffpfff@@?`?hP?6GvGLL0"g`"g$g"g#g`#g#g$g`$g`A`AA?[sLL0eeeee@eePeeCC@CB(B@`LqL6M6M0eeeee@eePeeDDE`D(D@0%gFJM%gERMDD0eeeee@eePeeGGG GpX`G@үBt\MMM0eeeee@eePeeIIIHH0@II @0&gKISI @\IMJ &g@K!J(eM MM0UfSfUf@fp"fIf`$fVf )fLL@MML0@@TԨ @N@N'g(gP*gP(g(g)gP)g)g*g`N`NNIIp+g+g-g+g@,g,g,gP-g-gOOONN0eeeee@eePee@Q@QQP( Q@JN@+NN0UfSfUf@fp"fIf`$fVf )fRRSRR0@@Ԩ!O!O/g@/g1g/g/g@0g0g0g@1g T T@T0O0O0eeeee@eePeeVV@V`U@(U @үBDO @LO@VO @\ODD0eeeee@eePeeXXX X(`X@[hOftOOO0eeeee@eePee@Z@ZZY( Z@@OrOO2g2g05g03g3g3g04g4g4g[[[ OO0eeeee@eePee@]@]]\( ]@@_PaPtPtPP6g6g8g6g 7g7g7g08g8g^^^PP9g :gpg`>g>g?gp?g?g a a@atQtQ0Ag`AgCgAgBg`BgBgCg`Cg`b`bbQQ0eeeee@eePeedd@dc0cd @QQ iQQQ0UfSfUf@fp"fIf`$fVf )feefee0@@Ԩ ,R,RDgEgPGgPEgEgFgPFgFgGg g g@g>R>R0eeeee@eePeehhi`h(h@[hOfWRRRpHgHgJgHg@IgIgIgPJgJg j j@j `"S"SLg@LgNgLgLg@MgMgMg@Ng`k`kk 2S2S0UfSfUf@fp"fIf`$fVf )fllmll0@Ԩ SSOgOg0Rg0PgPgPg0QgQgQg n n@nSSPSgSgUgSg TgTgTg0UgUg`o`ooTT0UfSfUf@fp"fIf`$fVf )fppqpp0@@ԨqTqTVg WgpYgpWgWg XgpXgXg Yg r r@rTTZgZg]g[g`[g[g\gp\g\g`s`ss TTf0ffefP ffpfffv@utP8t @T6T @UUU0eeeee@eePeewwx wH0ww @@+RD Z+ )cD(@lDUU0eeeee@eePee@z@zzy( z=@{.U{8UUU0^g`^g`g^g_g`_g_g`g``g{{{?UU0eeeee@eePee } }@}| }@{U ] ]0eeeee@eePee~~~ ~0`~~ @5:U UQQagbg0ag`bgbgcg`cgcgdg  @2V2Veg0egggegeg0fgfgfg0ggNN0eeeee@eePee X@ @үBhgV hg@VigV ig@V(V8jgV?  ?(W(W kgPkgmgkgkgPlglgmgPmg6W6W0eeeee@eePee  @LWHS]WP jWxvWWWngng@qg@ogogog@pgpgpg?$X$X`rgrgtgrg0sgsgsg@tgtg~X~Xvg0vgxgvgvg0wgwgwg0xg  @@ 7S7Sf0ffefP ffpfff@`XXXX0eeeee@eePeeББ`P8 @S]WjW0 vWXXygygyg zgpzgzg {g{g{g``@( XXXXXXf0ffefP ffpfff@`H0 @PKqL XnLjLB L`Y`Y0eeeee@eePee@0@ "& * . 2 6 :>BFJNRVZ^bfjnr@gvY`gY gY`gY gY(@Y`pgYhgYp"gYx&gY*gY.0gY2gY6PgZ:g Z>pgZBgZFPg"ZJg2ZN g;ZRgHZV0gRZZg[Z^PghZbgqZfpgyZjgZngZr gZ"Z"Zggg@ggg@ggg  @FZZ|g|g@g0}g}g}g0~g~g~g  @>       ?  ZZPggДgВg ggГg0gg  @?N[N[0eeeee@eePee`(@PgZ[Еgl[[[g gpgpgg gpgИg g  @[[0UfSfUf@fp"fIf`$fVf )fll`0@@Ԩ U\U\0eeeee@eePeeະ8 @ @g@p\pgz\ g@\pg\\\0eeeee@eePee`(@J +RD]]0eeeee@eePee x`=@gɰ]@°KKKf0ffefP ffpfffɰ@ð°pX ðưKðKKK0eeeee@eePeeŰŰ@Ű`İ@(İ Ű @@˰']@Ұ8] ӰE]ѰW] ϰ`]KK0eeeee@eePeeǰǰȰ ǰP8ǰǰ @Ͱr] ʰ]( ̰]0ѰW]]]g@gggg@ggg@gʰʰʰ?S^S^gg0g0ggg0ggg˰˰̰^^PggЦgФg ggХg0gg Ͱ Ͱ@Ͱ__0eeeee@eePeeΰΰΰ`ΰ ΰ@Pgϰ: &_&_0UfSfUf@fp"fIf`$fVf )f,а,аа@а а0@԰Ԩ__pgggg@gggPggѰѰѰ.@]@]g@gggg@ggg@gҰҰӰ,`,`gg0g0ggg0ggg ԰ ԰@԰``Pggеgгg ggдg0gg`հ`հհ t t t t t t t t t t t t t t t t t t t tvll{ll@AllPl ol}lcl l al l+l0lVl@lpYll0/lp-llP!ll@lPOlLl;ll06lk@JlGll9l8l ml$l#ll2l0llkp4l@kl@lplEl`Cl kql@flk`TlQltlPlp&l^lk\lylpll0k`?lp=lpk)l0(l@llljl@llpllhlٰ <@mϱ@2  СmpmX mmx m@m mm  mpm  m m( ` mmX mpmx  mpm m!m `#m%m mpm &m(m @)m.m0 3m7mX mm ;m ?m\m ym|m: mm m0m( m0mX Пm0m Џmpm mm pm0m mmAL X _ Ѕnn@nnX Чmmx 0mpm X _ ^nm`Hnm  npn X _ PanmKnPm( m@mX mmx Pmm mm m@m X _ nPnnPn X _mn0mn X _ npm0nm0 mmXX _ pnCn n@Cn m mn  n"n: X _ }nBn|n@Bn %n`*n( /n`2nXX _ ynptnunsnX _ @en5nNn7n @:n;nX _  nn=nXn`?nXf _l `Gn`FnAn`En`Dn AnA- X _ oo ooX   ~opnonx    oМnon X _ PWoPn=on Гo o X _ Yon?on(   o0n0onX   0on0o@nx n@n   on o`n 0nn X _ poopoo X _nono X _ PonoPn0 npnXX _ @}op8o{o7o Pn  `uonCon oo: X _ zo`7oyo6o  wooFoo( `$o'oXX _ qomomoploX _ ]o)oGo@,o .o0oX _ fo@2oPQo4oXf _l pp]p @pXf _l  Hp GppBp Fp EpApA X _ pq@qqqX   Pq0pq`px   qp@qp X _ qpiq@p qq X _ qpp`lqp(   qpqpX   qPpqpx pp   PqPpq p pp X _ 0qq0qq X _Pppqp`q X _ qpqp0 Pp0pXX _ q0eqqdq q   q`qPpqp#q @qpCq: X _ q dqPqcq  q`FqrqKq(  QqSqXX _ pqЙqpq0qX _ q`VqPtqYq [qP]qX _ q_q~q`qXf _l hqgqcqfqeqbqA X _ Ps ss0ssЖsX   rs0q@ss`qx   sq sq X _ `rrqur0rq   sPsss X _  rrpqrxrq(   wsq}sqX 5 =  #ssPq $ssqx    Msq@Ws q   spqs@r    rrrr X _ аssPsss0s X _pr0ssrs0s X _ tsr@vs0 r0  lspros rXX _ KsPqrJspr r%s-scsr  r rp|rp5r  `rLrprOr: X _ PIs@pr Hsor  `rRr~rWr(  @5s@]rp=s_rXX _ pssps0sX _ rrbrrpr er- @s0rr`s ssgrpirX _ rгr krr0rlrXf _l trsr0orrrqrnrA  X _ iukuPmuou`qu0suX   pNusOusx    iushu0s X _ ttps@Rtlt s   pfucu`ducu X _ t`ts otTts(   SuPsZusX 5 = tausubupsx   )u0s3us   puuszus   tps t s X _ 0u uuuuu X _s~u@usuu X _ 0QuPsRus0  pHuspKusXX _ 0(uMt&u Mt `t`up u?u0s  @tsXtt  t )tt,t: X _ %uLt$u Lt  t/t@[tP4t(  u9tu@tst\tAt- tt@tt`tt DtEtX _ Pt0tGtP{tft@ItXf _l @Qt@PtKt@Ot@NtKtA X _ KwMwpOwQw`Sw0UwX   wu0w ux   KwJwPuIwIwu X _ POvbvЛu0$vv&vСu(   5w@$wu @cFy@yNo+A+@[o3A3j5A5(tB=A=H- ~kAky kA k@`A`b.6ķwķ7 w7hh@h h FhhFtܼܼKЗЗNЗЗNNNNPNN0@@N@cHcR@HcRgnss-sdr-0.0.6/debian/gnss-sdr.debhelper.log0000644000175000017500000000044212577077205020213 0ustar carlescarlesoverride_dh_auto_configure dh_auto_configure dh_auto_configure dh_auto_build dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_installman dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dh_builddeb gnss-sdr-0.0.6/docs/0000755000175000017500000000000012576764164013533 5ustar carlescarlesgnss-sdr-0.0.6/docs/doxygen/0000755000175000017500000000000012576764164015210 5ustar carlescarlesgnss-sdr-0.0.6/docs/doxygen/images/0000755000175000017500000000000012576764164016455 5ustar carlescarlesgnss-sdr-0.0.6/docs/doxygen/images/GeneralBlockDiagram.png0000644000175000017500000042000012576764164022774 0ustar carlescarlesPNG  IHDR  pHYsgR MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3 cHRMz%u0`:o_F-IDATxwxT?lͦ^h E WTؕWWzEPDEl ]D:H'$dw]@/D"<${v̙wf̼H'@5@ @pB\_|A|Y @ C%@ Y@ @ "@ @ gw1Lg7YYY̙3=zp8;v,v͛o1sLڴiCPP| ۶msc2HLLdŊ|Wddd`02e G}:t &DDD| +WgϞXV}N'͛7gƍ|Ǥ̬Yزe ]t{HRR+Vo[nhZ&OL^^m۶eϞ=L4$"##oYb={_L>C}7oK.0fgٲe|<'L@AAmڴa߾}?ޟO?\fcرXVZhAff&1۷d2өS'x !!!˗˩8qgܸq$$$w}/B=aر8N5k9s&ڵ#003fk.222g̘1O?ܹsڵ+:I&qQڵkǁ8q")))3w\~WzAuu5cƌvӬY36lL۶m b̙رΝ;SPPرcm觟~ᆪgϞ7RZnݻb߾}tؑG2n8ˆcٲe|wF)**M6ٳɓ'@dd$| W{TTT0vXRSSYv-f򷡏>{ҩS'rss7n|tV)//UVٳSJXX_~%֭{TVV2fTU%55u駟Ү];L&ӧOgdddw\ͣwx<ƍGEEZbǎ|Μ9sXf ݻw1cƠ( iii_O?mٿ?:tL0HbccYh .cR^^Nzz:;wW_}իѣf1cƠhHNNf|gt |СGaDDDŋY`=zYVVFzz:vbʔ)$''W_}֭3VKrr2+9;vh42m48@ǎfܸq?@=eqQUUE˖-ٲe }-Z $$?7ҵkWxjzj>ۜƍGLL ,YEѫW/N'cƌl6ӲeKnʴih޼9|lذnݺQQQ{g,ˤf͚z?СCoߞ2~xbcc~`ɒ%\pnƎKUUZbL:-Zʗ_~mee%>z$֬YN.]Ofر Xx1\pcRYYsڴi{ŗ_~+W_SN%++ۓرc:ݪرcX,{?t:Yj96Tݎ78Xp!K,W^ݟ6o̴ihժ!!!̞=M6ѵkիر#|dggӮ];㉏'**yl2znnoFn(//' ꫯcO&L ..hϟҥKvرTWW>}߶g۶1c̙3]>h4DFFN`0DTT,JZZt }MKK# NG|||rm++gjj*AAAϺy+/zY7O_9,O_}J/gxxz6**n ڐ>u:qqqǵʩHHH8a}LJJB՞>SSS4O_9mC֧NDyl[ [ΰz4 gtt4III6}Yӗgdd e^t>nDeHIId23 _6mgۺ}嬛gLL $\/Ϙzmn'ӆj<}}hn6ڭo /Z׆|y֭O_R>?yrֵ_guPbbb#""@ /I~ ; @ 8pnM㟥Z+lpEqq1\pqϓFW_s,^'мys}F#&#GdxGOfrrrԩoX,BCCyO{=/_fСty?3}l꫼ >~z իyY`& ^K^^xXV:wɸ+op\,]e˖ѦM[{1yLʱpի1b+v,GUU4 ү_?ڷݻ7GbϿ/n.{Yfqep8dذajՊ/z_]46@ l6bcc1a H $$?z D@@G=N$%%n:ʘ2e AAAL2$IOUzӖIII̘1ロ͛3|~G6l@DD_|уPv܉deOdd$GaԨQc4 _TVVg!2dРA\tڕVSO=ٳgx<<?xl@ 5k0@̀4֭[޽{{cZݥ'Zbڵ\.KCLL -Z8p 3gK/E$z=:*r6"ڵkǂ j2tPjjj0 :I&ѭ[7 Çٳl6Eٺu0ͼ|mI]WUU @Єh۶qj b I||U>߿O?M61x`>|8=V^{,f޼yf"n76=99~\>zEXXrz+[&&&< pԻ~EQͼm( k.~&OLfPD@@H_~ᩧb֬Y̟?|t:_͙3|P44@ )))tU f@{w 壏>geѢEڵ &ðaعs'#));Onv>CxBՍ O?obO?qUWq饗t:IIIao7P\\رcE2Ljo܇F!%%FCLLLXSNeҤI|rg}nv-3g_~!=='x9ԩSIOO M &ā(,,_~0b&@UU6~nZٽ{7͛7'**gyyyѩS:7 `teeeHRӁloTTTA1 BшF&A㧟~b׮]j!@-bͼK@ 'v 9"`5ڷo/@ NpZW^NHKK@ Yf 0 o>VX! !@p) !!deeaa@ s\wugp88NHY@ _SZZlYf,b `0@ 8233;w0@Dj/ڵ#G c@  C"hC@ $ C@ c׮]=z c@II @ 8I***8hgXsrJ,Y€->]vѩS'?~ݺubZn޽{͛W_}ņ ڵ+7_3k,ڷodb̙ $&& гgO<&L-[sNMFZZaaa̝;^7nk1c}dee1i$/fѢEUUs׮]L6__5k֬׆4 |t ~ȡCh߾=GaҤI˒%KXp!=z@$&NHii~G4oޜΝmii)ǏGӑի/ر#F>ҡC4iaaaǵ[F㩮El۶ӧ/شi]t˹vZ ?T0i$fҥ,^ .1ʹhт۷3}t5kFhh(sD"##^9|0ڵL<Yp!˖- .rٲeKvG}DZZ رc1$&&/_Φ]v>|^9.\ҥKvTUU>}:Z"889sm[\\̸qyZsдi8rڵ#++'o/SSSW̜9ӟٳٲe ;wcb0HJJ_eΜ9Çvĉ'uڲeKr~l޼.]PZZʘ1ct$''j*bڴi=zmw?>?3={n3n8V+-Z`֭|Glْzvܸqpiʔ)Ҷm[<Ȅ '**~ . mh۶m|رc+V_ӹsgz=SNСCL8Xu8?Nfظq#3f̠M61k,vAFFEEEʕ+;w?>ڶm۠Mjj*ݺu M ZhѨ~ ,GLL $a4IMM%((I$)) Ye$"##$@RSS @eIHH@$Z#I!!!ex󌈈gbb"QQQ~$IDGG$It:RRR E$yJh4WNFrFdY&66ֿTדBXXqyl[/zyJ$EDD I}jekC,Irr!_}[NmCCCezMHHnOTu6$$^}[uPjjꟶcmX϶->OԆ| A$INN>a}mC< `355z떳n=^ug[_}{O['jC+WcY:ӱYՆ|yֽ'nu~3..Οt:q8t:1%.?+R8 @ 8رcs=|?̮]xDž!YHS`˖-|7$Ix<<q͙3oxCߓW_}uwE^cСqٳ/ /ÇO(**⡇n&//_GyロW_}w=O>;ロzȿ?g޽-Xm@ >Z-AAA :799Ν; #iTTTpFa1aNJii)={$==t֭[G}twʂ a9rO>/&z-VXxN~G.b1b555\x,_UVq饗2p@kFwѢE曬YlĉhZ."JKK:t_ m۶/E&YJvtnzz:]t0>O7KLL gF#GrWoz#33cXx衇xg5jׯgdggɣ>ʻK۶m3+W^y_TTT0dfƌsrrx1c fȑt֍ÇӹsgmFdd$eY ,*Oܜҥ0?i8Nl6[r:uS]$IG[o媫zjZjUСCٵk͛7'00={oAYY7o`0еkW6m7ofȑ0sL|A.2͛;ip8>|;vvyWy0` tʳ>mܹs@ >o̙3t={駟b rJn?V˵^돤QM7-Bqq1|\$ wYtx ի?#o[h4b۱X,XVF#?8:vȨQkhݺ5\r k֬a׮];lٲ%KЩS'*--e<(F`0PUUEIIh`@ nݚ۫W/2224T4M-2\p ?x<ݛݻcqrJ^% {xW2e ݺu_|<{ߟyf***p\tɿGbb"&Mbذa0k,BBBaڴi<ꫯҵkzש(?~>@TTqI CLLLt6XRܧM6\z饍aѢEY@@Zm} ۬Y3233߿?FEL6￟;3 .2F @ǎ }{o猌 BBBhӦ Æ Gr-dddΈ#(**w 1sG_~Ӈ;2|pG͚5;aY-`8ΟE Ç~ƍ3g0@Φؿ[r1fn6RRR}V]]hrssM6Eyy9.PZqX,dYd2F&Yoƺux'N 6pA & R-H`ѢEdff/7J]B}>@ gĊ!@0UUUXVI $X,4&>\.~mt(@P2334iR]n3d?X~=c=mYi޼9FQZ YEhh(iii :7==paD!@ AQnwh @ Mj͎OCٻw/"M @ i())? Mh;vnfϞMQQ0@ ={74ܬ,6n(x3 MŋK/tVL@@0@ j*++۫d8NBBBιr{<V+X,n7f<,( ǃ(Bq$IȲ$Ih4z=ZUU$ шdB@HHcE8|0EEE[C qQ)//faBQxeٿٲNCo_70QUǃvr(BUUyz@`` aaa$$$#*.T@ Ao>v_Y}1bĈlfuQTTFDPPb4~Qwؗ$It—,˨tp80TWWcZl(N#&&ݻ?ؿ?\|ŧ=mEQt C @ 8A熄WKKKYp!FVZhHf(|3$뉎&>>N$IPPP@~~>/v3 M%KuVF-!@pO?e~ nE ȲFh4Faƌt֍}թb)ps6F@p`۱l P BjjYWx}AAADDDAHH& F$I~Ar 1_{_g種jv***(//CqR>B4-Bbر 6 @ 8ټy3+/)Ɏ;xgκr\.5kFrr2G!++#GjF `@ףOx^Wd*u}E|t_ÁfpnTU%,, @LLI= j*v?|Ӗe=z, -"%%7.]ТE\b m۶l6, 555PUUUOD 뛹 cE/o_y$0 %XfvR `24x2h4.rad@ g$''7ܘ>§oOQo \.\.?/:QT͚h4r+ߌV/ ?D=zУGFk6lC c @ 8k%''A;v ''(k݁qQw Vݴ}*hB4M6=mEQXt) B@ 8_m$//l%y¦MشiOjy衇sizIO v;ѣ s.]кuۿ4233ܹ3u ѣ-[l%I"!!AYpNc*+ӿ_"fm'2!*`׮0 Dpnw"$|˖_XtڶmKWUNͨ[cKh4 އsvEQe^t:. EQNs}QD{~nۑ$ ^O||-Y 1MޠEb6[!>.R9xp>z>nc30=z Fٌln2\83EQk9|TWWBRR[}4k֬~_ao/@FZZiiiDDD駟ضmSL!>>Yp\߿.]xسgжm[Nk 9 5t p|s=4o\[pn#x8td!::dcxdtUUYwb^yV8q?RZZ-%1!k˖`У( E)}[~{Ғ(%))Mpu!%f}r7Qq*+|Ӽl[Jrj"%Ţ^yYr%O]vcǎ ;.׏.]':Fd2`Yjr GÄv~L&)))VZȺuhѢ~`ox^ ԩSΦcǎMǷb ms=wh4\wu"4 !c Fh=vJRR}R\^ULBH(l۞͔ lz8HDDkmן/pIMAlƄ #xHkHFF,V7Wtc9i8D -[ؠs{ENk駟Fן4=V_ 6*bcc9p@YIbb"vz,,^|ضm}eʕ+O{(s³8007|zA1/ҥK dݻ,z9 [.`Η+| a<:^CZBÛc lIHh&qӯo ^{:Ǝ {7鬇lZ~\Iár$({ JbbBXlҡSwwL~=0jj Y x;~]r=mڦG+HH *[< G#|t*>| ٲe #F ..Y!tm6mڴW^̰aNk|&k׮_~yxXl増4ʸ}n7ݻ]w/c; I@QTV"*c׮9Ĥ%d0jUlrÇO iѢ/|eeՀLXXz(Wo",4R ͚E|C{=K4<=^W& Po݊l 󏬬,~ܹsٲn'##$QU^{rPUN:sѿ^}U~mFSO=[nqӧOBCCС8'%h6g̟??+ ##c6_NNtrxwIMM=_7a2.{:ax @8۷mel^փظDP XzzoC{݉[ QHqQ:d5KAAZV'zALl.$ՂH^n99h5h@A^)娪ɤcDdŁѨE@ ƁZ 4)@p27p_.s 6vY~=8aOž={ѣ)֭[ټy3;vK CTTCUU$"dY&** IUU$a2ѣtzQRRB\\RTTDtt4VaF#v"88o cǎeƌ|7' VQQA2d/R-\L4J6 4{76Z c!Ŀjmj{\AuզǛѮdPޗxXRߩ6M@6զg"6n7.?b˲w?]?,HTosUU$F:UrNFz'h֬C aڴi 8Y^^G=/~|}s΍Q ܸJs"y]d_w%{w}.sݸJ:6m9qYS??:KO'*[(aAD6x Պ ""✶A^&n=۹j뮻dnvyF޽{=zyy^xx8r|7|CWo~Ӟ,$%%Mg6mfh:^l4@v9lTu׆cɠ@D k~-[K3nvc2p82 qh4rX,M_7iٲ%wqy'>;KaQx㍢uMGn2oZ.ia,6kj~ ht,߭ڴT{5ڴCjӳ2SU ѲeKZl٠s7o~noƆ h֬!!!q&D$IȲVEx`ǎf|~w9ۗ}6Jڊp1L5h4ZdI`H?$;oظ$JKKOE PMX@`Ё,MDF Źx b VK5Vrs`*Ey`ԱaoWiqЯ_+"#(+-!6>8Nkjgmۜ ";#ߊ "RRRBQQ:t8s:Dqq1{>ɰaXv-ٸ\.LCpp0F4_(&>S)${}ix[Vl(` 99 /K8z4h'[駂O?{=kccʁx6:Njj$_}(nC~I &mfKӶ <̕CY5 6K7[JqO9^W曺aϯw|F~+EAoFRR8&.ƛZ!XpZDL4Uʕ+$@صkY)@k9r"X,ǽ>jt~|FF /H nn7N2$1DEEF||<)))~!thE=YjrXrw' -8f@(o>g7h.uRdD4 (?BxD jwٌ*{MDƍ_E񠢒[č7ggڑ'Di,3'2L 7KD/?SN4ӧOF6mЦM1LEEFMM @vp8ꉌ3#ux}~}KL&z^`d2g^O_ M֭[7,˴mVYp#krvn7zC21 jj8ORr$P;x |0uӦ/矿i"I2`@ hÈ{> ssMH@dTW/⃩RRb/Jxx(:]׭2 g %b*Ahhh@z-wpp0']>AV^obUhE=}%%%Ђ p(`2I6С LXX&Mh52!c\vlľ}y>EN||&˳~ƮyDD ɰo_>o};qT7IEZ jFgݭ5<,Z3l@WٳoA^>HѠj˧0 Zgbi1D~|\ve=mEQ8r T 8iT7HQDE|.Yd!+OfͣyPڵY~X@gf|u&[$';m;ܳnvoE~/u[oympx|QTV & dKk77 7q`YYј@UE@gv**/Bll0@&@NN[nmx'QAr[rռDzz,O<1_Ȩ ˭EV@EXl?~N= ^/!5-1cdYT().Eʕ/ xxˈr뭽q9hg3z" 뵸= G*ᆮޝ \*1!~a0} KD f_Y}FOa~m;pp8d %%%fSACE*h n7cǎ;$--M[p͙ɋǜ..{R%{.ҁR7Vip{P+z:R\J%x k@-7fPݼǵx`f.؃K.V4x?.KA㡺=ħEnFVoۼy3W;6ot@+WsN{A۷oEGTTj /BÝR^{+ ulWT=_75=ė{\>V .$#))xt҅f͚F !8C9K.DYpS@ h4xX~0O׮]%mEQXnUUU@ *ٸqcݵkK,F<&@qq1UUUj괧xXt)b,CI4QFi)CX˭+@=VU {l5ݛNu )I޿?YYYZ={r-!lܸM67#G& -Gp:[͎N;wb+X,8bT wFW N+Et8IH&Ira bqapdVB¢;Vzc !s:v'].Nt\9,z\N7N'搟Ĵ6TWr:hBt: ]t!==Ae袋袋De w~(<)Pn-$IĈ_#h%.c=NC^Z-Da 4p{nokkŌ7NA;ܨF#ij{ZN7F;\h42ZhТȨ$Ix< nQONUUz-v{jC o]J '$ \NxpDǥrᇼ5l,ॉ0FVcsp:hۍ$>}$6g7xͯк|\UKfѡ֯{KN}hվ'Z_ ɄdjQUUZ<^h" ༬x%m'|!C-`]HMy ѫ|(@4ZQh4!@xUC9!xԾ +~ft֦[S/=~P'@eG]x|p6Gt"?k FrmTUb,ٿqPսU` r/֮;ر yGXƾ #Օfz-͛ԟ0 7~]yW#\َ:2yD@`0l]˩#$<ϡFƁVۃxdY&,28F4>5ctމH0X ܵ؊} :tC *g۶mi۶sI yHnI۰8i^ cBgsH,ρ2pFT lM- Zs!Fw5^ $ o "LFײq^i j̝3?Yîa^zc^yzOફ:1\wm7Ot: YG>RL~~%-[NAHh ~n^r o :te/@^s(1qc[GoOWӖtػc+>>86v+6IrЭOG s\Zgtq+{Ј(⠪l63 rxX,, qqq\μ<***,`g@ȒvՌaZܪ7-[97@pL2{G*8CjHL,8A Yg us 6 2w3vl3xF.hqe>|u%>!P(-b Z';wa4-q?r^.{pW. 1sZT$,w \rhd7X8@eӪ}<G!$4ģgq:>קG̱/CKjߥ[Kjzr׹}vVZѣO;wdqTTTPSSfaZq\~zoN?FTr3N0IeIh4hZz= [f4 Bףj !$$f۶m<쳧=mFUW]Edd0 "κ@ȡ@c:`2[s- W;=o Μ2nܑGF^Űa1A#YGyQ̘aF-z]ZQ$)hu@wjՉwIV PmK8 spխ7su7qCPzJ]6* Y@{pӽP]DfSA*( ; Y z^d"11-[ ҔIHHhIJ,s# 0U9_~G@%K\rko!L@6O?}Kl嫹 f;X3g>@D>@p9K)-l r,YI~Z/ \K }jR@pS^_ΤK+)=OӺٿ 1Fǡy lCdwZ?$4<Mphweڛm{o0覑\q5w ˅n?$Ezz:fۍtrpݸnEr >qgD_}t:Z#jL&JKKeY̶mشiSV˨QMg$$:P1 Zk;O\T?Z`VvjU) '^AWcDTE9 !zeGV_LI86R[CO?}&;} NT@Ei1Ͼ7gϹk ݻwK. *S^իYo{Ájtfzx)@v_otrD(nt:N/jt:,_!@^x!:uj4$,8{PUPǝi?;~$g1 |r*.h4$yR$ID OãTӺSon>4:ioE}e'\wsh4'/>|㔆nDh6l !9sAﯪh4JKKFТE E@,IDDNł^GrPUj\.)h$<<""##q:6q4Jn'+ -ߣEt;тDEEUdBD@hW@xj7%TPc":>+oɐ[GqAU"HLm`,.-33ɓ'7X֭O?='!!Yfqworw~7o믿Nvv6ׯ禛n`0OHH:?0o6/|<|wӇ2~aẏi_}1|FI?&&FlB(5f 39 []Ykؼf 쁹+nUurBZ]}^Q\H`P$n!%daszOzxx8͛7oPڴiCTT9_EZ]vѯ_?^yGfp8`߾}|L< $??+r\.!!! 4{o^{pKAA ;fQr-@ к{\Lph$9C{!&h -Xd z.a1SR-:ѼMW~]@h ^a@<; $0Wz|qe˖_Jjjj&Huu5b6 @"WUUqzj|Qrrrؽ{7C=Duu5;vn୷ޢ6YʟSDQ#==^z`sNeɺq)-9W>zYbǁ}8/{b4YQ=Mc_ټy3/tZND,ଢcǎ$&&6~0$uVe˖mۖmr9En3vX.bʂ q= ^y.6mDXXsRPP@yy9Ӈ{cq=`"##X,QUBlx"=S"{:᭸NFLN8]n `v5,˴kNp@ : kйUWW}vKxRUUERR!!!8N6oƍYf4k֌ n?$QSSC݉Yyי8q"/&((Z-oa<={dcۉCЦMyo?̑#GXn7t#@B"(*7n&1&[&5/{W38ZE^Iw;|*K46nosq@ 4mݻO5kְo>Fqg: ~ӾVĿɳ` ** Naa! **ʿwNױ{qԩS-Z(--!Cpג˨QeӉ,(Buu5 l6ޣr ǍVyb[ҩTW| +.vͺpWE|T 5vKl߾}q%UUѢl @ 8*4 >uс(XVT $22Y,RSS, ,`ٲea6$8:wLvHOO`0zj@UUlIEEzPUտ{$In'00UUlP^^Fvl6wS/,,1W=AvC\76Y @6 py%5XjOK,l(DcZ &@")Ӓ( I555m&kt.]vk׮ JK.tؽ"ҥ ڵuE:٥_~d2Itt4IIIf=JMM ͚5CՒKii){&33ӿ쾪`(//CS&%@NN,VF֠(*$(02+eʪOB;ӧOjcI @ h:$]8mhӒAoMrR26t JpK$.鏍].NA[a6IKKަMRSSիWlO?Mff&[lUV|ڵ>@&Mg}ƶmۨb|g^x8 ѣGOSj7#&`jF4=MA0FIv3~x d6@EiզiO7R^ܾQͬY~ݴi۶mޣGFM_QRRRXn&L`ڴi d2cZڵ+ӦMwa,_ÇyfJKKyG(//?wNM(V%:<Y֠( .$"B1 vW/ɓ%mYٳߊO-bl[OntnFF\sM(l6xV^ͼyhѢX(O>7bXݻ7 ,^$v]$( V^Bb>f|~- S'dDe]&zR@ 'j*:Ԩ6xF||kZ׮]-$I$$$Up \lfW$Eq{h d݋Q(NSTTDTT={4 (doE Xe6袋p8#^y<TUPZZpȐ!TUUQYYNqq1ſ^׍B=3 )&9˧r'0M? Vo]ϑ}UsU[yu# }3,vZ&~bzj3o$#o:+U%NF$Z#:@hPxݛ('5%6'oƷ"8 Y/RSEV=hՋv^7U$11FIvg1hР&%9u4%1-C,E!( IF سg~M&+lv֭[;OUV{nFyڳJZ-F/FEAQTUtxl}%INwV'~|ʲ^WII  E`@1ixaA(KM5JKs(*d BV5 +t9jȲLqE=8k5_rd!oἽ,"Bc!):k""4ʹޠ_ABNxo Ν;9rW_}u jղ@pvlq kHۡ$@]V+ZJff&;wcǎ=OYS\XѡC=ʖ-[4 :V[heY ߫^?~㼺B'(<v{\z%''Ӷm3'@ʪ89j(,3_opqg2|7D j[.{AYUi ](]Š33De.y = 4<(.r]po7cW/sϢ d%_yp#^ ʳqFI[r^U _( _=QQQl۶ -Bqqqi߾=7l֭[,8N, AAAg̦IIIs=SYYbfp8p:\.n7NV0;;r"q,&R|bFeh40  L&DFF6F9jttz\G8W^g@3g5>?mOt޺/N()pr˥x͗lٻX;էQ<8]N4 { Ũ @!nj,5U8\6(*|cJ4&#245[rEwpaeg#i \r% 0QVUw@pB"##㑊 JKKԩSi6"))ϧvڝLhNjL7cq(TU=nķ'2|7ˢNcz \w;n<<ũح@+\SE|K'?g'uC]I)(A3LdN<67E=TT{׾Fq[Dp8\vn!$$#$0^ 'pgw²\odɳfʔ)u]@&\.Wm6V\K/tܹ;vP(^'00𜱹O$ڨiȲ_CpAKTaQUN.@d&( nxV/T:%FKIe5 !\s(e9Xfbi؆zj:=_vI)(!GqSe)i}.xe f4RcPX*gF?3۷o駟n}!zS@ g ^իWFꨲTx3z#$QZYK.3r;+9R/-eUcUZӆi;nLRe)R~5V[__ie]VPzKgz\\_F;Ȳ̅^(~)@ :bccmй #ĮZM;rUW5J+VPQQ! -,_Anڴ9s# "hdff6JڊzjMԀ,>. :MĪ@wLU =z/wF[wYo LAՁN} t4SoQXgxh @II ;wlйS$ٵk-jZ-O>$Ђ&I\*Gtx@ҁYjxP_;؏#9ELw zwb&' >a 9{Xo>-JEI% UPVT@o0[R_H\B)$̛'!Hl[n< :W^qˆg0O߾}ҥK-IȂ&7q+*=Ҿf$Y[+BV+vHa1 m<].cǎѣЂ'^ -Z0 EEn.bƌ)b2Yk!k9%*߷avl\Az3==f^>7=ϸI|+l5su U%M`VSwNQ!fhTxm._ sry/ҥ` YE\R W,d墟In!k[@ dff2yff̘!x&0φ طowu2)))FahهH԰{ Y84 [F!:J^/(PXjl&*RC*VGA)LOC.ObiÄFìx<.|:z%d.I~>IB^~rzso]ʴ^GE|t*^~sӽ7]EƢ5d{Ͽ[cKnf /hwXbBux?V.łf#::v5k{/͛7Y,IprDq;={Э{ iʈVM/@:>XMphwz1 O*maW7^A`k|0o%4<K5  {v_v5Q|(&[ߋ>:B‰OiqNjЈXRZv΀4k^˽O^M6hNqIT)$ƥ#Zh7onЏdDہHNN3 K:)_aU}"BBqLCht DeW8$1I)PPo2?@z )x'NV[b$]"*($0@rp!:Ua棴JiQ>eElVoɥuF<~!D=Xt KW) Xhu`^Wpjh ؙy R[SpԻ"b@gğh.~ϡK\4 dG%@BRm$K*iHJԊ qЯoa[iaŊp-4j>唕ѪUS>ft:ObaϞ=CT駺3 iI-qzhd9Qڐv4+op mCMMiã1j/ !&+W6m k{,ӺukS4=^U@@:v/m%]⁢<^奠ʤwLjB(:vi?I'.ћc#Aֻ=l6nfx0{N{ZW@ 8wh#y@@ˆg V&-9WK&C|;F M s-hѢq0o<(K3/DNZ#U ߇`?Y$y?x׸}}+6ziQ?-IcGc>STYǹb@ 8ؿ?{k=s׭[>|0"@e~ifsdopEpQv@ 805\ؤ6[xnݠ ˱Z {Ddeea6{ z=a41  Z-?|$vf3UUUve^OTT;v$&&FH```(Kc:Q\.ƍǿ/RSSE*MP_9ȖPSS_NvNkQ^^`rv;ݫQ?N A*++)8z_D]=D Y~ؾ};?Y[fŋS]]MTT͚5#** Ʉ,Y EQx<(Y;/Fgë6;w%$HJu--unWwuwhB?gf?& R ! w(t`۳> HFF+}FZZZ |$$$@xxn1 q\$Ijt@ @yy9+V ݾ׾ȇ}M7qwh2hРV+iK,!;;۴8!dF<(O.d!( `-*-:Z Y˛]5$$ {!i-hOЁʿW! ٱcC6-m2~v{nJJJX,l6v{c8faِeyV!_ )(*@׋vxSN( eeeja~\~:͛… ZmY2e>0qHB YVamstY{~FuABH;ȾNTNaHu(--EUUh3׏=z4#8UJ$A@UUn7@bbb$ ] |>~`0H(7IY4ݎjfaXPY]4d$ۛ$ pɬ_5qa{2aU G>h¶rӓ(Ճ, p$cD= Z-+ {p4#d]kPB$"""±'7]_-$ 7djnI K/}OOO'==UB{L0ds8RIHIItt:5kK/ot~WUU}a1 &L8Xpy(Mh& Eބ=gϞٳY䐓eŪU3gNcLH߾}0a̘1,jjjp >jXt)}eƌ,Y1nrr2cǎ?d̘1DFFW_}Ell,{v7Ϣ9twb8N^:kUu"~S1a@!K9eh(((bqWBX.B X_Ap3M3S4b5R BgVP'Oپox/+j5%+;)45R}d4>3S7.f˗~dx}>3$I" CӥK^~eٶm]vYc[oaZyW3guuuRVVFjj*_~%w}7 /'99-Gj Zӧ76aā#P$s6ѾQQQ.̟9s_}7on@R:A]MKH})eE^b e;ذj#`맦ImǏ ? )!Eժ vA  %zĝ$E`'}֟ V%"tlkI~ ,X=AU 鐘jfPCƵ > S ) R!AZҥKy7uʕ+?ꫯaÆvsu*J^z%}&O_|( "|I|>AQ^~e>C~g{1^/?<۶mkw$//tIL*ҭ[=~FEE| ?3у|tbdA+I˄O|O|^|R)? )'R]YqdWoi!ҹ? y x+.IVxk7=$ʚ?q}OX{!"*+¤}8쫹K텼-gQZμ#'ڣ7sKx$,9x\t;cxpUs9;8 TX,,Zm۶ѽ{wwN~~>j/ķJ3Υh{!W rQUd (Nl|*ScǝIzfuQ{=m5 6~ۊ!uuu|Xtϧk׮{-OLJJblܸMXz5sn)..檫bu]L41Du.r(**b}dddsq'rmq2|E1 HK /?0$==EMy-Kt̟.CFqیDzTQ^䤁h1^&U I1h ̝SKF`k.aCU[,z=z޸Ya~?7on#P]]Mbb"M(++c/EB]XX9?z_o?IVlYE(C e2N8yj$$<~]Vן9 vpٴy%ZLu$I"11dnٳg3{l&77^z!Jbx370pgXG <7&+roGd ;׽Ǜjx^$kT%GubbbHHH5m)uˆ۱, Bz[@dd$ѩS'`˖-̜94&//0aaa$%%裏rs]wbŊ߄B!n7=&LbNֹsgzAdd$h,,X0*WUUa $<999! 瓟*m/kߖF%̮yѶd` Fiұ;_qD!`:}*1Ccc?Ȑ!&5ѼPXddRSտO55:^Ŗ-`p)]ױX,t7Ť!N(uN'6lt-i>N; Q:<#=N;#8N:P(암ǔ)S뮻7n\ o&ƍG  ;s=Ǽy/5fgFoue˺? |$$-3kJVem << gAXTR#I`ŬY38`0D$""EQ\\̱͢rزe C iLo"[O>a֬YDEE5ޓK^^=z 559sW TTTi&ɓ6mC f5n֭[YbQQQB!.2zEmm-x//=t.*R푑vArr2у={Suv#Nf;teE0pD1V-hj}VA0aAEĉ?~|ܾO8v HIIhqP(ҥ YYYҳgϿ}BUVVƿ/, s%н{wnu]Gll,qqq 0"V+O>$7ok+W6V: >3fЫW/^y~?ρ& ֭[_|Ѯ9bj7kMm7DMM5Xp/0@@G -20"Zc=}6m Ἣ[OO: i2$g\:j|%bOsOӷp%;87B u=z%Swb.s%/?HǝNλ'Gw}_s(Ĕ[_;fqvVsӈMh[IMM%??!CF:hNL8/ ٩* ;(Iċ;/LFDӣ)-0ٶ, 'Onrf}Y =AZfwo]spwrV#ICu9qԢYO.&;{l/_δi;vl%2Սoߊ-8KMM Pdv;^Ν;xذa$%%t:q8HiF:Qlt:aG+Ү  8s[^RSS[5?fh^ܳaK^YPnPńPRk#pV;@X(1,%DBr5 J"6 Fb}+ , H4(GZP^lE,9|cf[]al(+jYѰF:Y{fcgSZ3C  7 򪩂cJ %B {{%}믿歷BQݻ7== Juu5<˗/GuvGߏjeYfҤI$$$hfJJ3 Efbd#f7>K0 O5L]"T@tjz "h;㰡SJ'Srx9~qݩ2 qF(jro.:ΐv`Z@L_8_#ED-*`}]~/xUE`A㽮ޖ|oHv4?ﮁ㪺9t^Q4~3ֱ˲AB*KLX vAj*[|QOnֱ]taСs7|wq\\}… gԩsw xWXd ?8w?ozp&yQ2eJiׯ™*~LdTU>tjyƛuiClZv e[غ~5:\sU$e'?*-z%7=O!ز~ Gz;6myX,("..T5Ȧ`9$q] l۰`ǃ#,- 1%N<7n}~l]GΒ3kA5G r֔Yb~pGcwDY$QD3M &! 3a⠡gϞ͎1b'O>di~*++INNb`YgSO=yꩧ?{?>=/2O?^l!s3fhw}ѣGyd-"-noI7/?fpIiфgo?P[]E|Rx9{-E^x@L|떫,7r\,uHxv$ &1.QSS&L4) ۯ" `H=XyfϞM\\v7nϦ@ @(j:wkcܸqt LDDD{ﵻ~u֍QFg5xm۶E% ?E.X#Sn}^"~/=n6mԹxe3Cn-dK^OVN0 LJNdTKM{4HJ7bDXY 5k ,@mC3b*/?K"5+o<1$B)X87~0{rU-/ ~A숒g|#\'9S֐Q0]LOfg 2a%vZ>f;o<r2"LYgŴiӸK9s&?8YYY$&&3uTjƏ'ԩS43<:.]p5״x, ?~i,-\w:u>")-_~ nbN|'PWc>:$D;CEE5LTx^*++unoixUUE&[ Bz뭜tIl߾CbY`W\qwuuuҩS'oNRRX`0p@jkk|UQu$IBŽnX8cxwٶmk׮m( 7xch6m?9s$77=z`Vsv8sìo`S9Ө*rORVSz?-VrCuszjcP]bGX^q7a=MtOtl>{ϗGbb"555Ot q#֘|Y7="?}9V.bШlZAz^T͏WGMe17? ɝ㜩ٴ"ygFՕ*Ch$e2wuM@df8£[g (YX J+AGpAi[U4Z0L`Z5Ce#uш sA#G~ض,CXXXԾC5۷OJJ n$IBuB4 uZn7zBuJJJ4mCEEAQN'{Mql&o䤓N7d{>Ob?XIPݻdTUe@\\. ۍ'&&B(bƍ\J靛jݧ".JPZy0}PYBVv*5UFN<TjQX\  U!ͨBלaઃzÙ5 VDHvHiWTTDTT,fXl`qL@T4a-o(eT8dN>d\N(q (H*n8kE`D1?15$Cxڇ = ]s ],P˩tUPPL~ohJ|U~ p&Z^5jkUafڿ 7VS*k (ap`؁/(=X~&]QQK.>ϟf#::XiZKu4MMJPN`07 EwRWWhAjx麎燐J\.2fLҒz|ƿ~͞~ FE~ndαEk1aҌ<`@ n'))$l6IG v1Ayܰe=;Y,ƤUYfS[e/ .7 I`ʊ!7Zꋶ{\Pҳ0ܾ$٨ZW8N5Ϙ:uʠw߁ܞ1LQ~?NMSAl5 ň4C*7B|DFD @FgZ BrQ*<;o (mjM1u{ېr1mȡ`qShSQї8Qૢ( &^k֮ Uw#>jx؇0NiYK;*[eBh%&nwfqD5-꟰۬4MCQ,G%RY[N C)(a-8-)ʋwPX"4=jeȒr`Ds{q-/fΜ9L6m/\e˖q뭷L$N8Yv- uYeݎfj( $!~M󦀎ATUm${^O(jXV!''g$ Me]FNNW\qEٲe g}v* <Y(--nH߾}ٳgc*"=[ )|>s_K} ǟbyDD's7/NAѶ*YLcy7رy%wGx&)0_7+O#{ɛ_zpTz쉳oz@.YtUAAQQQѿFme1ljzaSϳYvF|+mg shο w#os93b2'uLJ,i.9_#{浄Bb5yf:KBxDg^v5FbcI'ie o4O- DQwt"9$֕ξ{dT߇ N'#G`#v ֭,ZÇ[佮:'lgCpqXzڳ̄6h ʜr8oPYv {<l[e%": ҼR OI#/Yz}' BTܬv ZmRRR|R]]v]TU*_'ұ뺼Ce, uC&y" 9s&+Wd֬Y뭤H\ gdgg#?"`BL {&ڷKxGWY~ĔLM"5#_;jν!*Kwȴ3wL A(O:cԨQ ڕ.B!>w=},_8)_g﹘{_nD>x.N8;|ǙzY:=Z%?}3(]`Œ`M& ӧ/ҙG>Ǝ-)/?aUbbdR(ĺC5FBni b V8(((b`BpjmQ+ਟoeۿEکdrZϝ;wn%.99Cfqlx݁@ǃ- # Z chpj(jfap8-l&o窫j4h j5Mc…Ygdӫ.pO#O8 ?[zSFr%|O@UIqG{KS.%̲?y9˘2$ˠ*::ѣA xPu38Ҭk;ؔ;`ݲ2V9^.;dt> ]z|“wL#.)Ne 0sn9iihg̱'0L8u,W:Y-&,"$l$%DZcz2w`ǖ̟= %66ދO1Yg^{fuˣ&wDDi:9N@ذr?BPK@4P-^nu@ ftש >d"m4WQXX,=hʕر':X4ӂՖ0Wܹs8qbmBiӦVi[UUKʌIWW[ eqo2珘vP~u|/i$ns>@CHhXF ްXʊ0˹s {*A2{e#%jE>yzj]ؗe|%*/&S:Q1Y$9㩭${\NذbO c]kߎP,vDI:B 9=vBA(C]M[e{}|ah n9TUA>O-%;)+.7!Kpj<4~6:7Ab5ZDYQ57ȡbr_gM WJ\~mScÖ͛ulee%۶m3oI@/]w.6V+#2SL!--ۊMo> +cƬ?X2o[/統t  Gr !ש(YO8p9h@l|]4>}9_}Gn7H 7w̮#m/`qذrמq=Y=Y:13"@]sBTL/>p !84ذ9pu/@44UmY>Yٽ)/a8dYL\tݽGٱy>N]xWy񳗹5uθ^z1N|' f~jND@Œ,7`~wX6RC-^9Я_?.f;zhLbޯR^^NbbbM9pVK!'-#toaêD&c)=bxX"V/Cfv&>M Cs_fqŷV"c %#u+qOr#,+@X8ꄉwmdfg\Ql{CJ'8Ky枫Y#xSnΝͥ#1W"bଂs'o>h}!BpfGw6'2v]-e':.ISw^kټv1 q~n-3|1[.y:[qSI@ 9뉉jbCl,Zc63ƶ, Ժ}~tM(((@f=Hp:2(ż?FXXXw ڛk{"Y@o8餓m#""HLl x7IIIٯ&wb}Jtw{=#OfhƹSo&6!nydvĺK=x]{+5/Yw=2=t\NqHNEjFY==xWKu˽H@RZ?"N$:>!à@ui!4RӛF*JX"&3Zho\0pTo{nNzAc)sY(-nyH뜍m%)F#-w0ѩEV[sw$&k.un}ɠQHf(Vq)Dǥ%ރۥۙnCZceQ @WU塦z])엑VYփ q% 3nkJ4i 䰇`q$HyEIgF 2Q}$M猔}z(a5P[ V+|n翾JvF_zvZb?#}i+~-C w@17Mʷ^yzv˗uVNv0~Q"04u,,Vy&9=NYl؄tn|n wg!FEMgr6@=hb9䳾,ixkRVVƣ>!Gfff x)((h*AX,6A2&:&4 c%\{G&ՄBCߕi M# 32c?䥗^jֱgW_gC̠! 11ӧw,Z7rYgJ"miE)U;2(((f5{i26KX/<J DGtZ`șh[TVV}] k 0[۸ogggݬc2oAarJG+hu]gӦMxca |rEx0m (uf,m:CeڇNMB6 Bdڵ:v˖-M;8- {/]tz; x뭷.Eem6JDFH/|A1"byz<~?iii{D3GS:Q0kի9s&w}wݸq#+V`N$n7Ƿqzq\\.4^/PUUVXuaWE$IBQv;,#V(°l(ʁÖ;TWWw]1sLOo[$8 ŵ:lʪ 04(i9j6D_~\#3%pa8@<е,Pe5ِo;@AAv _ ii!KmG@zQF1t=+Ȳt (,,j^o#ɐeMB( (tz+h # w}B!BPL~p8ebbbHIIi$ K/דj(Z - [b-ZW)f ?E;*P$}*emItn{z,QuMCCSV<r}AuQQf;nnݬVOnJKK@]ߜ"6& 111ͮOcٰCuIOBBBٰaVUUeÁn'..pl6Y$xJ,{ ؆4MCUU ~χrQ^^Ύ;Xt),O~IFKr7ӻwfUlҥK= 70|v MCTD,n3x1@Yq iQh u%^]O` ˷D(v 6p̰5e ]5Y{*~xZe+%ENj>WoQ8 Wc###㰼u'᱘h 8۔[իWs)4عsn:.v+ϙ3gfRRR'>>hPUUU1%F\\$!2z)))a|駌3 .uQTT*J4֭[G߾}ŵ&$ }X".2hHBfg:ț I- n5D-;Q. `?B簌qpf],[|.fp8m=i 믿rYgѭ[7q8&Y4Z nY d$77CW_O?ӧ!u=7ofɒ%B@Eᦛnڣ@^lܱ.C̙~[D _# څD@ jHR .i|_k负Iڵ֪ʭA0^7nov7` ЬcG~ڭ,E!**Yfb ㉍%** Պ$IYBȁ[lsʮz_C I_IݼTURVVڵkdtmV>#22cRuG2bĈVkaZw `:XYlȲBav41Cf &[ x>8s 4^p{ۍ`0H0h:驪Ν;KYAINN76l6V+vjbX (J.`JR4M@p}>~ۘ7~EGGӭ[7vJ@T4Bhih7؟@=Wsǽ7[o‹LG O={ny@c#SXy!Gd9CAF&1a~t,mN@h|~7 1m粷xbΝˍ7c,XҥKڥ,AhEun7uuux<jkkj$KŮ~Y^ q%  ds)j%!!Hl6(u}Ƣtăc!ՐQjHGS՛5ut/Z`hO;(>x3E$Y@DYDR$Y@VDe3!;DboZSxۢ(2p@"""Й-,wtʪ Mbc+!F@j!:Ș,62M0ڑd,d*J#:v}B2(y(>GTU`Y\NpAL,9G8E@uE:A\.Wlkx T`^6$''7ۍO>+ QUHLLDFj%" 6e5X0vuj =EQeYQEQ+ }lJڀh8}UTVUR[[΋Ώ"4 2,X% `-Ȣ(JȢ$(4ML{j\w`v>.zV i!T= jAj'D] TRQAV:]D6"DGGCnFll$>]=?=kMd7b"*V-^ʲ?9/JtMem_kDǥsx\$uF 2afV.k}>I %;Um۩,$O?4#"Q$f~|R2 T3|YlXuj0dts=xp`3="p@QQII禅 ހ03 VS]Pff&ۜKMpIZcWX,,n?zs7-N@z ~g`ۦ4(uMsVCDħvX|#]Q^RHvam%s6W 6LW\w L"6!G?\Itl"4]E.R3׹{ʱ<֯\OTc`UWWZێ*DI%c>xMRFi۴i[Hii)6lhs}L@\ſJ"ўO,e *4P5q01MT4TvIXl")d:I(U:=X#FVZӼyXp!Y/oEwEjB*$ M@)B Tu7nDwQ\*-YVVm[ P] 1)^:{"{! i(=$Y'f_jHFV`J  יny9()7] HfdsewQ\ Wb £()m\f`eIgqה5F-˵<<+'̡f;|IXSաj*1mkطofc>#5jT /9dBbۉ UU$(jkkDQMӈGUUN'A,SWWGMM @cyyyn.]|?K6rD iԅ0Kx? '2^7?KE2 *Cwe݆1wluG?a4"BȯS kQ>"2&ǂ`ZcS"6^#1vU 2vl6-VHL lC{!*J ,x`-FCl&iW]e_jh@QQCDXɞjDnHUy RU?(e\t}hx 9"V/O\8+IM!ku~8F}]+^D!czqv4:@UU)bGtaZ2Yp* !bڎ7U!Na̝;%KHk6ZTUUQ\\LVVNUUYnIII]Iܹ3.p6mD("--ٳgSTT$Ix^tB޽u\.ݻwt\R\R9g"]:xRۖhFPPʚ0nWj$! 2aRRRڍLGȷs]MditN$ l/LN羦@QyJdE``y6br}.#>} V9؄4j9}G쿟D%|^Gx>C ̊E3k̞Ov^ f cEE<"6n%<8vS`U"T?̫̙3?>X,.ʵ^-BϞ=Zp10dygnj3v<RSWITՔwɌIJxwaHAF*Z! YQ$EhPb]Fܡvm+V`۶mr-`BvF/6+|q#ľ!:<՛bD0ܒPAbʱbe+l#&FK\;yVc(@mƃj2g0j~ s~-\rsؼ7GػL8-3?_`©Srd]u/}Ǵ?3o`˺Gugj'_o=ϸ­+=,#c>Lo*~oow_[{9]:/KFwddVzӽ Qkl]N;QrbIbUF .0 9k(ܺE]m%ǜ~%?*;6YIUyN8<K|r'5 &NW᮫E׍zSU0XĔ N<<. kנH*"wŊD~v/+"$=sEDo$EFwg*++:|7 Te.M@EV4Mg͉Bbb"ʲd-AƴRIn7o֭l߾Jrssey7~O0zhbbb3Wu ]Y`'O?4ٳ'3fh$:[lB|>|x㍍ eYɴ 5u d[F=({<ѶDlI)X%#!\@ 'z$' " "" Z~U6PIZoNo%.o-,Xķyk׶ e_tJ/ 3 HՕWԣ.?.LdvVϱ- C ~J/xBvWJMnV ;~N8,FN/ħҽgDI"sQ,\vz gsˣ02QɆKq2ԇ/P^ BdtEF׾ĭ\} &2yꃏ(/Sο*Zi%6mbUI(PH'!,(u.3]̚"5BF'\T,'!:sx=PZ1\}Mh: pU IE؈!9 Gig>$bR1~pԋzC} ;U"a܉(5ڇmθSYjS)_j  E[}x=!bc=PvQF$ lvl#S|>yjjjB'77<(++o٧cW}ΣiӦ1}tDQDӴb+Vndv 66M6q饗"2L8O?ndM5\Å^(ݧ' įIgBw\*jkK^zdEƪرY-8HJv9EawwIVIKc*^svF&Vpit߉7X7X;tz|B!DM!ƐjEDD}+ cǎ#l] ]EiW!'w3~00w$ꡦ*0|h8.?=() ءN|E 2BN4HeU[a'Li+(j5Ueu_»=OBzf.cK[~%(.MWITl*6=L {,[#P(HU→+x_n))NlX_ǯ%,"N]Kiڵ)@MM~BꞗDDɘ<vtulࣼ<.#I~;I2TbD$"0 }FU5b?d((1b87Tc 8f$*7s1IqvR3M!)'6q߈x6@@'&FW/y6zۉoSR,fY 1rT3SizэIfoZGL| 9M˰2燯K꛵]q92?3Gݗ_˟RUP0H0(2ǹdb>}Gpw߳hv!v_drI6$b@0FMgJ5 0dp{͎ \ex&f;Ȃ?QZ|F3U-U/~/]3lDeN"XtgAD[K%1#Ӆm0ym_ X s*nd9A^ׯ'MLϧ#7u tbc1K"UU=r줧7!G M>yRӌ*nMBmk,YYfqm5إK6N9wޢD_jjjHNN;o$;;<pw6Z2fϞMii)|Ǎm\.>JJJ6l555wqp_[4fz@$bIǰ+~@ y }5nM :z}F~[P%$ADz.6V>ӂfe_McRtM'۫%+>jwcA U!\a( dFG%e2 ˖-ol%IbVi@ߥ/I@i ]cϜtŇU 1M|5QZDՠ_9VlDZMgŊ _"cES'٭KC]F]o: vWѹ[O |S3% Qr^ѧ'oL?dӸvin]KJF&bifj_x!{ؿܚ_,DxAiG Ѣm43 r|2|{pT>~yW~9?ϑ]D5$eQZ]s&"1L^|N_|勾瑷nt;{^"%=~&k1 5D&уwLΞDEi7T^M5tAɯ  jhQD KšϨ.Jnb;i645 "77ѣ[47n3䧟~/p*P޽{sǚ5kB$$$tRN=c9o\|MN'/fҤI )hAV6{E SWy#7mBdt,:*.F[V4ͰV36ǎڨGbw(LGF U/P[u,VrF,1c(ܲ>xJ*(W=BdL } eV#6 "#?z~zmjl%!m眏*hFz^OdiQWSS_0OyG!o \DGĖ-[شiƍkK,a֭rJ/jr֭KDD\r [lᨣj9ضm[c͑J,SSS(~***?;쳩Yn>huv _7]QTTDUU={i̚5vI@9~$ qCNŏg=ֺUS LR/I6HICQ4=7 2"Tϣdf'4^cMahE!9ꂰmE{ƕ\qMBZ&b)%;֑i?qTWAP笡{h,ؾGc*r2೥kph8H܃z(XVDq]rSV+1|h݊(HGhA)mVZZʲe˚E@^/N󐐽,˸# ׷uVA۷oG\..vMBTPPxt|,Z?xU5\Ӣ9[O*Ĩ~,aw?6 Qp~e>/?s~|/}W}IEֵz4^t=O~aTç/廹c|.=['go4{/@׼|uAF^D1 NJY8'.Fj(r"TmBeL2w HOަ8p }mֱÇg;ϙ)ÇӫWVi[vkh$h'Fd DGm uU,-ѱikC!>BUWMdt2]&W 得"%.>,pzIb2 0sY;S/&GNm""6G=zg)SY 9}O!2: u$ݠ 6S M@M]%ݶA,7{7vm]u10 ! B+tI[\9&&:[IG{=˚-Kk D% ՐƭO(hYǸ59հf 71ǏGp_ۼΨr7 l1nZ'ˤK%4mIz @}j{tj+by}?<: *DUl(Fmŋ`Nc̙˙6mZi  `zM uEQe۾,)BjMW0؝,H0@E$Q&dŨ; "iF6EQau^USs A5fq U5ړ4MCUC}P{A":HdPHj3`֯_*GEE_k#16cxxO̕`J!#%x Y1nݰvANj%b1®nQGR}ϭv(/1^ E#Kog{u$ $'BYv"L4eD+ڦ獈hivvvԩᅮKTT  LHC:Y$ UU)))aʕ̠SX=>VIT9=Xqk|/"AW`Uy#wDbX,6MQd+^Ȱhb"Yi1>=vVfĢXvVEVu`( maȒ]C0"Ye |2{nn<^θe$7/&/zdMA8,Okqx#DvVHPQShfgg7AVVV+WҤI̞=[ Qp"##q8lZxF|C=;6}j 5@4^뺎x^n7NۍivƏϐ!C%YVx;ظc5ɱV7{z l!=3Osȇa<]\ueg/ ﱥp=5NwtnbÎ>rr7Xi1w] n;^ۊ6 qS&dp@Ϯ}85٣ج.8j0Yy  OYz7x|.hAȑ#9rdi6lSN.VHy͛y_`8a6?gE,Z3X-vVmR@ -Lt'aY^1âX*V ˷Mr\EeyYF^V_N9"*kKꌻy{tNFAVD\;{ҝBIe5}i *QPos7WKZ]2'x7L4xٲ} ԐMϮi) ^j\P0aG΋"'ƶu[1Pـ:Ce,0mȒHFr"`?6nYEQ۱(0DQA׵v?QGRg?2kL03cN:jig^̀?nF%⣓1p{dFV\\qqXf۱}ipj+k" p2fTՖ׳`L 8[py}.*k˘+ >'޽MkX ko} P ߿Ąa'rՙwf nyBz.R{ HK鮡nꌻYao|$ǎ8 Mx7ఆ1(4ml+S\CLd,+BAj4Mm$Fm]ҵkVi[UU>sFMBB/sq \N<03- Z1L%-[l6hK_]׉_g%=}pyvOm(16XNߙ:o+KoD tDOuSW;i?JRb{~KdӯG6Y6JKG ~95B :>X8fQP<]>6B!.1׋Z;E_P% 1 ׯgڵxM>v޼ylذ /м* IK'#)]SRY~zx^3$Q7z_La6 ˶ҳ-KP+s' Q,]?w}}DlT"VŊb#qkENyL{]|'Ը**VTM|+tM?h oJ 2h{WK ͋qAq9( %m NFڢ]}ZMmRD8ՙ5]Vғ8}쑈BR*Gt2 젷0X$tOzzf>{ ě d \IHO~;v4X6ۦ4VGn[Ը(*{|,1COtj9x(0nIX0f;e_^]̵g^q rգnfӹ7ե|#dg..%# x#νcmvd661N#2vIDf'%U]~ JްafjEn MyR}{Wv|)=O`im"72O? |g߹֣+%^hFATig ZRbW8cܕB,Nj/GܩwWˑo ҪbR2M4;J7aXY8p@f;`N?t${]8]5R'\Fd,%4sUsW#2%5gދNav$ز܄;Ym#7Urdt l+HtD\&wB%z{rsɉ7(.n iQ^]>Dҭ@fjw-{oP( X@+v,( QDTPCz!{$*Y nv=w37HCs==R):&MwƎkXXXLx=2S{kkW z@IdlR ĜL<OW/B}b{"' T]&Hfgj#߽78㽚"W4, ."hlӕL""8ظ^[CZZ߇|}EijK%{~KVXZ,絍5hjZTM5 ɑIe44RPBnAM}%H2dRUuTULNcs=9yMqE>-Mm[,J(( 'r3lWkAU#)PkTWihji7kTWТnu3zT|X[[ ]Vy=OGkWKyl+Ef1;+'Y"c{ 8YqD>`5m"$~W>ȞO`tLП]ynir:)Z?D\vځJDsK3w=_6hVZeT#Gߊ̨ؕ;+߿kJdX*HX֪u%m,mT`iaT*CӶ Z|/5gjӼJckki3n~v=G3/|0Y`Ojvq2qu0Ou< h"h u&=rL-H~x K>??~PХ^8ߋUt2VsH$:z i5x]Ǩc4 D"E"J r(ȣ<V-FPFBm}e9TSXECSrӟDRi2 ɘ:u!̅_CQyϬ]\>`6#qYKG+Q}iAiW!:zW̓?bK#*eaOf!W#i*\u$ [0PvPP&M2}'PŗX Vn|e Y? j+}| oZqٛ,>׿˫H;I{7xhZ}0eÁDOC544A]-0PPy9r,Jbw>+Z-zmGDd%N448T%2aNQ>"z{O@&^ "N 蔃KGie6ȤRz=2]vcmiKu]Q);y(tz-ry߂u>s>{//.1ûW~`ks8K|͚MK->)qYh֊ξUO'ؗG}v _ u hujR삇v.0fT~yw k^ƷKv=/e%$ѿԭhXv-]j_7f?3G}b&8-\ ya=[@_ӪilAW3]]8Gуĕcɇ8k* z;Ң R)HdR\! u>| =? !?)(57|cTٽ{rMӡT*0nDVKcs= 6V)Tmv3cj*rmv.ɇB]c tK;ILNN&77S.EwXà =I%1na7FLeA.Ӭ'J^5(ۇZ uƧO?3aPBNG2⽙^ KzϛfΒogJGRb!5rTsM(6'(]֐|0$ş:#2\T2i&.JqpwwGṅN}c Mh@L"exDr Dp,i/B}S-*=G~G~A&SV]-{D\… 0k=X(,ᩫY\;1+{(o,Eo\ܝQ.h\F 䧽)ͣ;6S=H?M~I +(E{=lʪ+DH YMUBiFsJ",oo[q)Aq1`gN&*O|QL}1:HXXaaaD ߔU1u d2Js~HXtsT֔ΧJSKS[tFYӌ 2J* :ێ &0n8<TUUaggB#`{x J3Wp7NĴ#xG Ȥ wJ]quf_lCNx6|w냳Cr]:9aaQNk82ؘ' َC>/Ҩqqql޼=0jwJ !MkPG;= ZJssEٽ{7qqq<gLرc',_P|Qm/g{vI6s8xxM y\*m qa40uhI'(@/umXz/C@g ^>:BI`KQT<k2\qtJi9L붝leDoi7ևSG jEi9]0XZhȐ!Fo2HMM UUUh4?˷EVV /,`xL&\NC*T*R3(K/@P['=/ ՠ5G;ȥJdz%N2Ã=LC*2z+\X˻3{b֓ywqYUȰZ9m˄QLz $2j]308̛]'eh- ;-L®? '쨫 ;%((ڪ/xlN^偭-XXɜjSU[E999dee1vv&;;ٳgu:ǎ###ZT*[[[<== 6q*G [rrWDZD"iKҶR[[KII ?~+++ @nL#@|<Xpϝ禐AIv6eiheX`#J[6e'zthѡ=}N&P$E Rd)hZT4TRd6Zl\'4l=AF:sSQQAxxI c44~d qo9^\y1vG" b9G&S40cX76LT^.\;A4,=`ÖGL|LWoz[$ZObgXPJIio22' 1 -NZ нyIIS.Nj(**"**(vߜ)--%88???lmmOg5VVݕ$lllo[ejTUUˮ]b 7P0BС,‚bʋ.: : :9J,V(J +,(HRÏDjx=DonAAR@euՕS_H}MM 4TRݨAݬC:5zɐ"GaA*G&!ʐJdŊa5B*!&zENCGףk4%%^-:tРӫAG$ = [6rlXX`5v88Rvi㭏1$U^i+?2m,^z ~'O኶[Ǿ)b=^WL8NHeڽ"0 {RH%fގcIQhZ&\gH*}uDGK^O;7cק|V$7'oavp2' w3B0:M@SS* [ZZ̡CHHH gggEP JA/Ǚ&"|g3aI6m;Vmm-UUUTUUQ[[KAA66y Z/g5zhjlT-*ZTZԨUZ4* jFNGѣ +:=:azH$ LT*A"5%2r r KJKJK ,--+kklH08;fkZfժU\^ѓ~S^f0NG-+&NI=\_~x3QܕM\&< gAq bS3h2ӣ4lq47WrOWt v$'$4WCL5~؜'aɽtFj'y% qp1&߿x JŅ )..LBhJeiiyVQ~OǙL!rVҺR~iiii[QTh42 JWRZ8ak +m6lз2XD)u<رc1w["၅J,{l+Q){xru|6=h1. -^߳ ;!aqJ»}ݨ!!!m>D"V?2 ZMcc#477S[[Kee9au[@Ù)@ۆpg.\bmmݶ\.7_rqi 'yt|bzcϧ%8qEh'o$wq'?-c@[=Jmi h`PVn :s|4F&7ՌωN텽C<=[rT/CiY:{V,!+ |" Soj`x$avVoheK=NEBc2}T*juf(꭫?m̭VNr\&h6?NGssss= :=Fb(tddd닕0߸Wi҃a}ގ}1(z9C *R3^,b466RUUeZ-k׮Xps'Û$gc=֬kY#rM*/Gnn3gI:,}@ z@n ћ1J?q^A^u'za 2E)gr^‚Cc0$''~zʞ:uȮjߣTsr斬D.޽{MRL&cΜ9FﯼǺWcytSd//&]IxfCu5{~nj[GrJ-l!C TqӸ멬-<۞:Z@K4u@%ŕŌ hdH 4~ i2qVV+|Nvrf2~4av[Efї={Hpȑ,XR[ݺu3T*?y ː>WT"c Oᯏ1z>nx?FF_ͲGC!Wk'g%Z&@?piDr {v5}!yuܩ+I4|zl$ȥ bt&c#iY*(oȤBGM~0{*ijQu3e^kDPYdI$V7QUiNN}aU> ;H?UW\>ꊫQemll9_h4RXjDDDлwo<<-Bt_)EղuVFa~2z FATn>\8S`,:.W& _5k|%/kGpwd{R!EZg{g 9KHmH$ԚvunB߆uE%?),}a0#B~}Vv1:f8{s̈́(Et WQR22L'L1URL#=ݰo{6(NRvaTfIKK#55ӧ#GHKKn;QL"kkkΎ@zI޽ԭ_Xgm;>[uKA9}=Wj5Uㆈ^~y {IQ\;r0X;9OPO]]=(888pA:,BɰB@ѐNRRtggg,,,J)))axzzGɓ7oHRxٸq#AAA`&^/vRSSٵkIV(чWΡ 9APhQ5_t]<ٲw#JJL_9#=usPGj֫{E'oeҐɜd3 8Ш$ ⦛n:TҧO2|wOuu5uuug%̖d(JR) R^^NKKѫ NNNDEEm6 +x1bUUUl޼]v憋 ;ׯGRgL#Etƌcr\~QK3w~3w~Ɲ˞Oٰ#gޔǹ.o'oySUsu s>sR"HhlCiqq~DLgWKiV`iq[w$):TPi_.q ‚KV iiڈ'N>prgFɘ0̓'O>RZZVE&EDDaaatBAII ۶m3OMzիߘ2e K.ݝbJKKilll eЖCo=b `kkk2 Z|@^^0 qbֿȊօ%OQ\ۥ-^:gG/z3#(z[bPK5Hbiȗ7B@n2@*wpj!Ds!MKs3B~> LKr289m<}&#;QZ2l'|b9ºu.yU*3n8.\ȓO>ɍ7H޽Q( .V/pB&NȔ)SHOOÇ#9q888Ncٕ V@ 55ᄏ(X#JĕDo^0 ~~ٻ ރa8غtc}Ξ_xo݃|MNy{f"iƦI7s~޻~7 El; irڲ~TUɓ`aq:23 kiA4, ׄҪ|Zjvav xWoTپ}^-2;`MNss3:~GygyZ^^^?~gggzI\\\[ m9A:r'X(tꈋkEq;C#Wf_fn}w>x꺮*uܠ^~?1ڲGhlDŽ-$44vH}SNDDJcQp NqIcee$ 6SQX!wd޵ٸ"NRcY)00q듷7aa>5}1H$2bOO?Ͳeعs'^^^0uTlǙ8q"eeemI5M[CN 2!:NG\\З{g>e \wV;$=7 JK zDx!!w?oF4$Oeccct^ՐJT*T*Uu-T*mwSSMMMב4Q)4 6l`ĉxxxc9{Od<"eU|V6 Sk~-5 lر?ۇidH EiaE]c.=;aOZǕ]i?Ώ鼲Ұ ְ2" #8{K:I]C%7O/ N2h?h-11xk}q /^lvo p!BtatL g)fAɇ'> ћH8Bt^:-.ybpI = +ezU`̽p%d'Î*~z`0 W%Χ’^xX~;?*u  wwhGGRUeȩza>B7WܝI8[@!WIOo‚"mN+J‚",* 2zbRױP- ~0tm8\((0I-o,&%7^O4:E9*@j i/'pr1N1'tl=p /eK:sב_%,(,Gdd$>lgD&1|pNII TVVRWWGUU%%%h46 HP(( d2Y T*=KL)*i]]jm?* VچROOOK.]'0#jmV̙"_h]P(XYYP(@TbeeՖ $uKR &, a ɘ3>+#!0G.LDqoTy",*zFMn %7P\MD_gquG@F/kcG[7L`ޔ9ퟷ7FuvvٹӞTNHӺ5wh]d󣸴:?}o_$j۷k =`hhNd' 'vOhu,8غGOo_8v9Y9U O7z3q'|hm] c`q {5.zjuw?oY3s:w\.L6KӐ $ǤT*z W@"P.D ѰP\u(JdmmF"22|177lFdgg3k֬+朶nחdBt 0: )C,T0h8PTCJvId~^CPd熇?~}׏R^4Aay֧r8'v;|-u!bpuFfU# #z9<;4[T(#6(.ʪJPXf@ՠVZ`=z$fCV?xyu\+~|nqqyC?#?=z(HUU8B!::cǎD( z!E0{Ak>Rɜ8N%W|65ѡTXcoㄇ^= I8ۻ_ҾwOwg<<p8q;1{~{~ڵW/BcuʎK\}{ŧ=>l[agd*.+R1-UVrӈ=yu6S<6mcDD}pĈ1Bh!@0|pmq$&=P_0zd'HQy6cjZ荏{0^=o R/-90c|f6D kl':u){IKhv5֖+htQlTՕg3znXu^ۓMMYXY5ΖTVB^a{wr{o}[ #HRF\k¸fjGn"8WWW\]MQ駟2sL|}}+Ы'^=f^^SDF^"y eq"8ǒw4cE*`낻~%ȻIZ[2tFY~I:N$10[Xck퀷[0 ^r mJ$WC{ [r[75G3V3 }pEi'5F$2p݈ zd2)nWP*qf,e(22j٢QYgR-X e{(Q i4Rbi+ 4T,k@v뺺 <4J?1~g`366ǏsILLD4!@&**t̙c]\\DByn/\LM- dG~IYű%+Y;[} =$#-@UETnR|R,:xח=}$V*-5}g 6(-M@$H$8::ifvGu, ,y%[Zpuv^"!125-j~a=Ŧ-jnu3a]ddf3;XJN"P*-Gس#^{qE8y;Opܙq_ښG={PVQcvaϤJ58|{\Eo/1a9<{fSKKK#Ybee%N chhh4oEr9r0S`W`֮,xrN[|ۊZ-vnxeB)d6~݆}V[_It^p27#QkTXD =P~8;SQSdr;N8;?r/3m伋nGO;ןA%?O>vƋOYfsݭWco7jj1<|}x78pxsfߌZ*EEL4 /n6_CǰM oٹO{t>[~؁fu=TQUeȅu+!ǒ齣bR4"@.S0$k^8٭[7u&N c3f cƘ&^'33ooo@Щv -\TKz~"d$WNB!ZTM:,-q՟@Ϟݿ3ufܠ7K҉JCB!Do [Rbiji$Ȼ=#pq01fsHX@bOFvH{hΑ&rk-̘:N]vЧW?"3ؽՔUTJ$2kNUuA!֋D#'5cG_NGd2R{XHQ=ˢV5 ̒g_#;7zl†:!Ue!¥t%\QFf+?LC;E_&00esrr(++cРA "h/ͨT*8k4kϟOPP0aceOxwQ9E'IO"#/lvGBoh(Z;HWwzG;uִ̱_[_-$93? %ޮA оϊu\;dW7p>s ؀J݂!NN{uiY*㏡RXo 61}ABr'Rغ} T">#Tuuu7lyTWWC_ 66tqף//|U O;%&27~%Keάyyn|7JX~ܹ;+» իF1b "0`JIJ&/"tf<]t 8+;@aY&'2(H"$Ė/X(,qs#^ Lw-8x' kVISr,y'ۂV֙5`:CzOB!pW7)rm%@j ɿmgZFcs=O=,#" zGgReTdA29TV7+ KK $ /= $'/} '{0~T^x| \]]IJN[Tog'}wpuuAN8D"gϞ@]iBQ_oTl`%RiXpvPx|kbqft:;;ngg'B^&$GW0Zm۶1|p\\\A#.JdN idPQ]DSKR[kG<]?C "aظ.vOq(bS#)(@UbI!IDϱYǮܲ_?ĝ|x_A}5 4!d9HuуQҒI>ȤqSqqv[Q*-BFCF)<ܽd443n$̉R70&1ɉXY6ޏmCom(Rs*'1زK􀍥^.}B[Tzvk;= @jv {!m=90&PsW;' ɺ??հmUױ%r%8ȡDo2^z= ԗxȡ |ݨG.@ndKJa@>תpswbmy@jJH%4kprCR]B߾=nbڴ̘5ɐD%XZhlhwwWo& ЛB'JW#_ H)V:!gc3 #ep1B|\$? nF|SXXhTYB3x#H 99ǏD( {1R0@ЁX[sYZO 5'#:qw$w*G͞8;d${~&1; 3p&㯚5wL}&@zcmi~k4Q*+L.)QHX*Y#J AEnJ=v8XX{oAA 2 +9Y:)UPS=$`8d2  Ԟsb 22 P*_h|O|~Q(&hnN爈8.@+c2d/w$"0xXs27dGwϯt gPx"zö=0!w}1ُqgٛ7;厉0v8_.H ~b/pwE1?___Kn~%3z8~EBJ[ggzvTF;l$#݇MM!(k\3*u/}gx+1ge :S[ѠVJPYYICC~~~b\T鱵5Y*ZO^^0@pH$ ȭS㵅/'ooo0Rdn{i /_iwBK +&ƷSm Σ?r+ٵ%>Y-dwg[F}}F?ήXYZˏ8~+O8ėVv #/Wwl?M#[u}s}CsӤ{dql]ͪU*{Q֭['Ne@t"##INNfѢEPRz聵0@`(U06b&o|MAH~ر/{K;{18 ٮ!}x(D^+BgpFEC.џkS>چ* Nf{Uպ5ƻ|T X[ۊ\&Z;7̸}@͑z +@ʪJlmTD?%!(G.ƸH3b)w{xxnTpD` 899nLƌ33Šs>AgndUV]ȁD/?ʁ:#OCiqa[<}pOY!zHRj*Bs"̢֖S^ G'[ :Gc~}8v$aUG@*`eiMm] ooOxװ7|WoD.JɗOjbA~IYg~E!/./G8{vooo1àALSC=Dl ps?ͬ2kakJyu~HVmxgw5# z:91j4v aw⁥s 7wNͯh5HNe{JEPUuDB(Hm;4~ VP\NSc $89GoM˪) T7jRW]Ϡշ4JL&V@p!^],M-ĝ?/..'(((`ҤIb "h/jou]BfK).M䦉xvHtvš8&F\vr ѓudΔ[):{˫OnʞkFܩE:wnQ_ ѨQC%S\TʺTz*!=pC#+Ϲ u ;7=((奧ե/PY^ϧ_~ī/%((Gylӆ|#JOOo?o_3/HXR흹*ltFF3JpI!@.W^yf 37;wd֭?JtOOOrWMfa)Y\7fEUa1z-ލ$<\Ɓ5*|#V6H2=t ]ӟf'Je~k> )YQ ٙw߈҆5hDH$V53tT? @$sfe40eh<_۸y<tӗkfƓlsѴH򡱹 {{ݫVJK4//@e} =zvD?¯ֲLdR:%?̝WPx쿓aaaF$'""L&¥EdBSQQa@ <Jgk&k#)(~NH[qaU70chu:n~Au|+?N89|YbP/ËWɛGnYfhO& EףIpqIږ$;H JhQ YKA!aAujځj)xB볐J :n BnAYy)iE̘9 G6x~_Gwq~9_m]So}.9"zW___ԭhXnSLS[ x@n*7'\}B'Đ[(=/_ݟ732kԵAoi|2\X[==RS_Ϊ_3qweC`ceC'ʶ܊D"A"z8s:(rsOPRQ$|rJ f=OYc5FǐDBBzk۷D;"H ))m۶t:0@`8r+ .I{~xOV>n}:u  0~xƌcz=888P?P(,),˹}8wEƍңĥl%0] fw'y7'^] % ^ND1;ܜ|:n)2JG&u{kW ݙ1zOݾ\\ĽW-[;455؈KtSSSC=ĠD^R4 | wqXg{or͢/̼SXxC_ ^M{>3.dso5uUH$Rf[Ȕwqþ8~雪EE}}#MZqQhhhG}S5cubҐy}ѷ`V:ұKll,<3.C\\=Bݻ30a2 EbKX)4Óg2nKܷ WpQ}&-~l嫫q7kRQSĸ96^]V\ᄝf'ѓ0vX<^zA!\]] 1I2#G # fDwo%40!iYt q'yt9?Zɔ=5`:޹WG/@rN&@l|;橏ndpX>xw,FGR G^D"lԇY0s!ܱJ\&`rqハq[7]]]quu2 VˁQD 0W—/,ΆUՓ}{S/wҨm7i$5;{g-aOUwICn'/f3s_ɝӞ1v\U׸呓cxrrr1cZJ PTTĉ'LRN#22jahLv BYfӧn^DEmOIg/oiX.6NUM z[W>L'+ַ,~e&dٺf.#> 8rĸ-q pq{-yLP kK;,d'U>Ϸ=-{7n!z_r G0wd$1`^buE͔V3bT1;e㯕L|0غŕ%p]"""*;j(n18СC;MRD" \ 愣'Y̪O+o~Y?>o9_y/歯7y-j˛W!W1~ӌ_؋M{? PV]Ș{+M'z]3a(& 3{J,q) ST wwwBCCMRFaʕC f%폲'g}>ib2$)֖#wDŽEħsFFFzj1@CLL 7n4YbD 03|)0~y3^m^l[^Ȅ7qD6v~^o;v~RɭSgs#ybuϳ-l#@dh^Xu߿0%`/oY[[*((!C"jjj(..6Iry! -=RV10!*K}o`vbm[p݋|݂pNy["?o@07T&1 :ZyVuM ;EgMףGf͚eTِ. c7n>I, D_t:))fٿ{O~^Xʧh~ٳַpwgh>||O}t w>N߿v55bP)9}1VdsP*,a.eo=Kcee%F!::Z !@h05kPTT$ -VJk,d䧘ef }sVCaY/{V3i++7>KgTN[,89f (j^ͯe@}zs| oB _o}aĝ:'I/cIL?;um?^zq 7Uvȑ,X@ !@l=Rckk+ -adm]<6d/=!]&֪|XZ˟rn~7G8|{<=u̝z?W?Kcsv,gB~k>:AOoa?=m~B=*kmm,BgϞL0$ukZ6oLy_-ݮG>:nZYOg|24? ˻mw Mڧ9y/ dNYeztb\"z=_9<1c-/dT8<҆7=5---[Uì]V !@Ɛ΁LRNԩS"Q@`Y%Y9_hV}&f8غ+ٽ}OQU_BEMg} k ĔUx3gm v8~رw8ޚrrr*kaa4Bɓ޽$u+ }Q3’D^܋> + c5OÛI\?vLBW2Y㭳=WpR̽ozWƻowҙ4fa3`қ6r"wРA<FE`!@F1vX/>@йp")s=ϑ#e Zƅ5`ܳ_s Ƿ_ߏP$@Va o|ys?FOo=Ϟc̄?NeM9K9fVKKKQe)(+ &[Vl23$o rS̾rΏvz{c6q<_Bn7%C #(,fyIfpl~/gwg_a$3;_+7;yEwTT+W4Dp8p>4D*_~C fȀC).}=]Yk4:ƷǽGjOOȲWU,w=fU,@jv4{^ȢǑvbғ|fc#f #)1d++ü;}1l߾}k ] MRL&cԩk4RYфE}߽cwڳCfv\nV'jo,^ܩ^o7ְ/fⷑ]xZ[ G5#nAg)cWܱdTY___|}J ֯˴# għƤŁ|R\=^ZMNC HmC%ք_cԀ"a`'#%+U?Ʒ^_RRBqq1.Jaa!ǏIA{$*5]w%@`yv')#wbLzO/}pZm*M ["$0_ˢ&3m-x8_1cc'vrb&R%3.qOs$O3SXMkK;|C1s1eiBաj3&+ɑFX)m({g2vL}|FJV"qȹfov@WEπ2 BlҸA̝2ComjQFuttQ. }vbccyg1+;?;ѝiyYj _mg+W`>%} 46ױDn!$*M3ބwc4RL +_Oum9} !3fITWWcgg'I f̨WoSNW PX]WDŽlK˗duab !w2e}Mπ gĄ *7((MK&1zh!@N؈fz鉶=:j>7aN<;&k7z(>x;߾K }ofS(,Eٶ~[Dn`ڣyƇn ˋAU]lD`,g֬Y&[qjjj3gDTH9g\V<:؟x$mZZرy[oN,UcqE.9[_Me慃 ;Y X1 {5ܹ\nlٿjmiK]Oo(4I{mͿeUEĞQݹd0o_Fi̝Xˬ}0ç~jTfaD!@pq֯_o---JP: c#ubރ>t"I}0D8ʐv*iV52~'Z G.c7xBA.E5F bСˆBKr;OOOah0c\*Il_$xP~ HϞ=*ʈ#ѣYpItddd$ -t\}atvp?zt'Q:RNU]J vgD0G6'0^|X>oOx#4lVVǎFD` MMMTWWnV_Mqq0@Љ>jG"[ػ׃?&9<&Ǩג_ z2@p^1F~rX x=F $چz>}vlj˛<@p1[D^!@Ahh(#G4Jӧ!eܥ zg޵f,@|h5\ {HnY!_}З2rۏlȵ1FyXz1WWWzeTY[[[\]]uޝcǚnV˯Jyy0@ɘ;e! G.r`F.SPY{ᙈ?Z5֓^ݡ}1{WJ+*Jk:?YW-(^tk~]/_"HOO7#GXn0 cСC&[ӑ&NоR:fG+{ 2.|[x`ŋڏtKFnsb byGYK0ERUUeL&ˉ'ر4 =~~~A'dvgퟥ5e*s7_о ZE珶ިH\&h?:PT/[vFv /^lT٫oYQ13&M S#̒;/}1Ͳv65?G&!$a}oAސCu9_M7b` Eie>Cٝg!A"Azt:QekjjDO!@Fpss3Ije˖' -tBrk7[e]m0G/a喵dtH_}zѫ/)YKS|<1 1 _ǜfS t0QQQFG=|0|0 c8x k֘fKT*%,,LD:1,9 秘]ܜ.2l/Pz+?~3$ =/l{%`67>=O~cs?1...Өaaa\}ˆBA&aaaaM0@IF>a-Vgt&Hw`Ϡ^c@'Tqb0 .>eIL>OD0e3`aD!@0tPnvԭ鈏^Z 3Ir% -trUvDIP*V:xQzM yx+4ꋪ_2+4tA ʛyfve0%_~u]F=z4w0 c۷/^{IH$ai)=F't(yҬem<5b c wzBS`wRF rƈ$8/ǚ|Zо©RbkkQe-,,FD` \uU&[SRR" -tk)GY`><]C(,8j77>{XPro&>|}U?5i Z;\bXnQe###MD H'%%2]l*40@ cx1f''Oʫr;\Ɵmdg IG),`DT1pg_δGe*-Odu/ \&t:Z֨ # "0?nr9/G K\CVQ26E6|XZу(jm Uu%ĞP8Hu|'gZTMb|Lz7\}7}RAoaH~;*ۧOC .+On܅̛ B0IiiiJb߾}hZ&** 777J%G /// ;;;NR)dee 67;g r!\]]$66\|}}ill$22m y:s߿'N`XonnՕB>K[999mc6[Pq>|rmĉNcmm׸ݿ?z'''222k;_jռ3mc1TTTđ#GڌnmCCriTVVIee%QQQJ$MSE"e]g1xzzRZZʡC捄222ɍOo>>԰yԩS$&&wj!))TոCttYsUڦR> iii9k~9k~k~<\ڦ9cHR5Z7?:p@q9?\N:EBBB},**СC3WCǏq[[[Kddd:\RWVTTD~~>nnna"V@ ¤N$%%dx3Jzz:PQQ@~~> tcIIIP]]Mtt4555deeq!J"666cccinn q[lhh ::͂ڶ%''YYYILLL[ RRRjȐ6hll$::r/!!V^'116 336,--6ꈎ\mm涵Emmm[UŵϢ"PTmm6HLLDӵj۪L۶WTTTDll,---Cg3mYQQALL m655mpָ=Ӷ:ڌ>k f\\\۸{)))mmϪ*ztPq϶cV۪6xЪYCg3LOOokXJKKq eddgrr2N"99mhܤ*FOlll[B{ UUUĴ,΍&s߽^[ kn}a^ZZCՕu]qsAwrpWHHBs!!!sUXP`iRVVFll,mS捘yu~l cbbn;NV{V盫Z͏gffff[juj=cbbgAAmysz_־h&'.oz}3]ͼ ̭d=0k}^|V\޻9..0I[#xˎ`CQeYߛ6j.2.iB1h2rぼf޻K肸q 0`fϞ- !KwJ/q"$u;[(N)N6gbg}=WLQa@"J*,^/L"EogC:|VV3z a.Jll,7oD` m{s~W޲I.[z}q m8BTToaAj`xѕilO1\ٻ_444 (~a@`yn;$Uu=h긹1+ח?M(П97YE9g3p*zPZe)Uu#Yco Ңjb7sT \#֖v8W#GdBaذayh$#O熧^<{`omKJv4ԋ=s4WQZC*bgmKCa6ێ3mփT p͈qa:ͪ&[p%5;5/ds \I㠹-J@A;qss#$$DB \Ɩ yei_.w )=Ctwdopbq&L4* sK$b)3}m((w'i~U+5'Y.z(=#q@85k!CTT6lN,[%o͇X?ocg# '()9]Gf*L<^䖤GDe|f߼r>!Cq`SQ׷%ҁmObKv)*/0iSKב|7عx:]&"vYcs n+w-] F1|^zЭ[7F% q@p i,{t7MZ|I,,e7M;\6_Rc9ѯȤ'WPŊpRqx=Lv+w_v֎8ɡ\\zjfj5vv"j@ u2:\v D{xdeeztz=޼2>Vk ;; ͍:2Cn#1m2Rnhll$Oojj$gћy _kݻws)Q3ݻEE O ZQ)T!td?2zޙ`?P)%N?f ~_?"B0Xaѣ5޽{sM7ѧOƍGiii-ZD-7n\utҲeK-ZTcǎ1fz7L>}x(//q칹6u=+2 V %AN!:moL~޹Nl&8:ȠLxaNN:E@@8qҥKsErVX#h d2UK+tu<;=zvڱtRϻKbb"K,aŊՎc4k֌瓔g}Fƍ:ueee削DG0M۳iV97O1iX\., K-inqE5p^ E|Ŭ57't䁷:d2F2>g/ʘ;'xp1Z-w}7;vh42|pz ޽M$I"<>o~~~cII!@|}}9qK,^C.^6''BBCCk0 :u+V  a=55ZmEHi҄QBzNd#]0V}O82K6NhP 8-oFt̡S;8vv/))6t9Mб-\}rr9$t:ְaCi۶me2`VX /P(h4T****((([ Y3wZRiOzHHHm۶"t5Btt4Ѣ":uDNDEMСol?߾[ӪaW Ks;9*1ѽ ?gM]n yei(W%ɐ$rKF綻rJs9~iId' ".'H%@i^Zߓs-71b#Fv>>>8qCz=ԯ_vZLB-ࡇnFF8z(f͢sĸ]wk/8y$999tUT +})ҼD~6/r:L#i ̼ +hi5- x9s<ŝ{Gg@\ VnÔm9r()?ӅR zzV sՎ\!pӢcQS[Ž1Hya9v }B܆_?NBbĂO|3C/KauDc+a+sV񪹢$%9ir1p(J :?B&iKORRLc~AyЫO}v֬YC޽y8p 53<͛ٴir wwy'B|\cdddpa!@n޽{?~ @p 5=-$æY}Jk(A.w;׏&k3X>ޘ5ϾY3{ }2Tj ~a$vw-ڋ5w'gG{Bqj&!t\ҁ!Ā9̺b+a]Pm~bOTBY v'`iͧ!ԗ W)0_A&f0[9iqE+J)L'(’lK.HؔGyE)e\.$$j=Fi۸'iPMd2/ct:d2XnFV0dž غu+W5a7… yW9p=~!wuǏfRթS'~Gyn /ԩSMY^E|:2||)/(cĶb uW*J J2K d92_N㐙 &+0[J)5R^QafjtP(d| K$*,D!:,Buݵ/^=܃JϏ"uƆ Mѣ/jqmѭ[7,Y_|ARR&M3fT[cǎ]e˖1o<˴i(((`…SFP(( QBuԡN:"Qa}: |+_ vJw?y1~;]4&6"҂Z#@Jbz)lE(5J[90es,DgǬȕ2ξ:?KK}_'LƐisPsEљBy [?ʖ6nD{v›DpX-h;-'zQ!W1QwFIq^1 ;)/,TIhb<3qrL4؂CQ^fP*. rp\d2 V\̃\.g[W[7??5k I/rݮKJXv-y SYYIEEEl޼[r!),,Y$Rje @xx8͚5m۶t҅ ҬY3oe +gϞt]T@ n >SiN^q{arLEUJ!d YX8b :Rl^zdOg̡!φ6pzivrǔ-b̽{6Ì|uog帟طh/rLN;{c1Lp9\`@SQQAjjj222 ̛7\0ׯOff&t'g$00srrru)>mƒ%Kضmv wFR^`0xs(JL&Rb!;;"=ʒ%K ]vyz@5R~}) "⋨Q t8etN-!WQ41" s$tMQFrM|'GVL!_6Aya9ݟUG):[=a)#eY:p#i{Se|Q(||3Au4t~ ϥmWB@l >A>\BBBhԨg4oޜƍO?y[n}2ӧ_~ejTT 4ȑ#̙3ܹ֭sYv-={nFg+6mJod+V0o<6mڄfCp80$$$ФI7nL||<Rߟ;vp}C~~>2n DRRf֯_Ϛ5k:t(=_n~xM7#H 4tm~z(5**-X, jt:$L!iub)3_ĺʩva:]ݧm/}sNOQQ'Og~wFt|IN- 83g`0 "33Ϝ9s?~<6l8N6mJϞ=ݻ7mڴ5{Έ#ؽ{7hZ,XM|a6oƍٶmPTTD xꩧ6l_*??2EbRtmSVVO ɩӧH*;_uP8p(8mA[ $ws$YlX*xČ^aZVŽrn[ Nei%B䒰Yl-vl6vor&> 9Srsn]G㲒J k~Oo۷/ł 66ѣGW('''fڷoGGG޽{>>zM΀HDyy9& ՊfaXljQP6rO<~OB\.GPh^'6RJBӡQ((J|||0T*|og@#c3DHHz}v|}}f#//`#{Uʨ ((of3fZs\ks}k.(**~< :zYx1l6ϟO=.4ik֬!((ɄF>W|8@ZZZʂ f3^QVV$IX,*++NM6 Ij$# 7o΢EXt)/22 ZygyW(d,@𗎐].RTTDyy9˅D.R3~~~hw8_x>]"wT nSYYjjR^^Nyy9l6 LFAc4 !::Q8{eϞ=L0v3΀ӆL.~^eU"0<Qԇ@ \C8N;ٳg)--E&a4I&=3qA>N`cVKhh( ]1\Zg]$IB. nݺIWO?C=sd2-ZD~G2i$IOO_;r B.]x'XnL8b>r]tK.&7ѣG̤ ÁBe T*R5gZy0fa<;N***(//9}WѰaëyoߞ \tGa-j ,ŝfq_rr2' A穨 *&-Z!*++Y`| N^WSNxT0dRRRjlAAA4hЀ!C\Џ? $Ij[. `ĈʼdȑP\\L6m/Ckrׯ>H^z%>cԩg}pUDft^9Y9w7nHZZJ@6lX͆np8>V3* :hiAA$((@\.u!55GyrRͤVq\^|}}d4i҄'OCaÆˊ1OfT*Ard2^$iӦ^|ƨQ(..F&Ѻuk.]z… Yz5G' ^NCVS^^weԯ_Ν;3b4U~a y[.'NM6ˡA4a\$$$ .]J Bb۽at\=ZI(,,dʕ$%%Q~?Uv=.;@ \veJ _R. k>J'Y9v]44hÁ\.'--D~iԩ 55KFTT=;Ô)S.:w=5/СC,_m۶ygz"##ٰa_~yKvv61 {I|InJ`` I޽;UVhт_3fhh޼9_|N}qFVZ̈́>o>>h4j7'8j w ?=Qj7q/++l6{CVTT`ZYp}||HLL$883gig_$^|EѢ]ҺAk2U1{@L&ˇ, kNɉ!o7nfV xwj5-2<쳌5k:e0HOOgΝ Fu駟' LFPPǎc֭4Df*W^yJj5F4vqz}7|A{nnL&aaap3vjK$s\c_~;wiذ!}Ntt4/" ⩧b0qD*++?~_ѣG?e 9s&wEZט9_vv=J",, RY-|\eeebxͲ*Tz^ &.j[jE♁"s,* ^VEѠj1ͳxZQF`@Pu:naBL%%%dgg{#Uy:uvz:͜VJ`???ׯǽ\RIJJU;x6m_Pq.\Hyy9 4V!~JbP^=,X@ݺuk-s^SCx'$$b ƍnj3CT|!w6m",,UV_ݻwsinq]6$I&H NR;߿ 6moѣG"""Z>|dիwYۖR^^C 8s_E^^'?iq*{[q^ w9Z= T̨=K|zWkڽ=+>ֺ˨ڿktP *{ZǡPR~?n}*-k<"@ (aa>bqAW/zJ/Q6lݺugϞq;/ W[T$t=V%<<;X/d2a28p`u\.K,;[no͛3f gΜ7 _2BJ:nafPut݋GAduױBokZs92.Dc5: s_/$R.t_Dw; }}!8ҽ.wKxq.H.**܎OÑ#p<,wRY !!pYpRW~HH-ݶe˖,\ŋpB;nkm6'NKt_cǏn'11F3gΰvZa̘150 :#GsN$Il6siq\,].]jժ>ӫW/l6)))|W\Zj"I4iRk._tt: KrAhs?$34M&MfKdDLp>arb1F&-D%6 +}86/ŋsQZ 1{(N7 2)oM=;J?m:=yx^>~dqsÀhۧH (cc{ ^disN6A|}Km^fQUD-2OghgXz?nj͡m9眥^3[ (7sbDlV\ҌBfϨ<&nTYyX܃%%(:'ow q NX/@**N~Iպͫݳ ={_z 222xX|e9_O:tp[h֬YuX,TZʎ;BӱcG:tPcѣG?Oqq17x#7x#zӧOrJ|}}Q(1.]\ֹ|ͬ[Föm.B$&&z^v11153uA>|^!4&f9O}?}əC'پb++#,E8fx'AhlRgO奥gtB~i<>o.vs9{4GRqmͯN,2J5 Q32Q^R@qn:_?XşpxA۝9 |h\z4hwҡo t}t.ggm`Òo \o<|0'[Ӿ`݂OC[yvX+aҩkB! v|/,$'aEG)O^ViAU%ĩ$A`{\o@ F`WPƒOջg6z(A;~3_\FnIr70۾gN䦦Rr8(/-bOYdPqP]-,EY@f&= 'O±ctwH] LGFа!ԩn#(";ѣ^hΜ9C^;w.N:i7fmڵ &Dhܸq]vjq:DEE*PSSYb 0a~iƌ{?L-p8t:ˎ&֮];BBBPդ^NU"""⧰8q_U<W}rj 6Ʉ\.G$F#\. (//GVLqq7+xPPeeerBBBo4c(++CT/V, T* dh4|}})(( ((^ [VVݟ $$LFvv6F o,BAee%& @II v^OPPjbJJJ$Pl6ެW#ƍIJJW^ԫWT.ȃ^0 1i!>|St_SI0쥻8}9|107ï˾c!DԍvB!yvb1С_tF ~$̅\~y6sdJ(4ZlOXl}2ND&Aq!$߬fl'z :_#:n*L_H$?/\N|N>-vFuSd='OdP(B=۸L} gsyZ]2J& `i_#/L;9 !kQͻ/?p?P뒓rF- 7uK0w'^2+X+ܑ`N|V/EUS_H ?h}ɶdeC~ Dߊ6t:ݢ BqΧL Fj 8tQ hѢ(\߼tMdee"::|}YK|}}wEx#gl6ٸq#rPf ׯ_ ݻweBBBͭu&(--͛paÆ^)kٲeFxgyk_|űc/i*u%**ǏSTTDzzEOxx8ddd`2(++#((ۥsz!nYv"""(..f锗3x`8{,;v3fj{ԩSR~}o#G\.gƍ^NNG׮]9u*Hٵk 8???? 66EYY)))ԩS#Gpv;2={MVV=zIhժo!00Hjj*!!!jՊ4l63k, 0`mڴ!==}?={E:u=+uɮ]8s $&&ҨQ#7n\-tޅT  s}q 3mQ{ !*THi+@!W)Mb*A^hF-N"QaEqdj[uaih}|QHrI?EiNr(M:䤞BC^jE2r2p:\8.*΅F@RSP8lSaOR6Y Qus9e0[WFyh;4m7[.Goyloމ?}R$q+oXV55u.w%,"4ۜ \|?s9yxTp׳ors^F+TZ #LE2S)PLr\UשZfkzNR.0jj[`\:&4hܹs2diiiPPkӵkW+ wCqq1>.F!((VtСFQQo&V@ FƋBr9zsMJJ"99BA j]wśoRd߾}%@<9[>bh4$ o4Kѭ[Kf\ԩSdsof3bkLuWG^w[0Y˵ WT&`.. *)/[@&ۅޣ?Ifgh} ?șCo\k٬D%4b AH DFC (x#!qdP"~IڸfE))܂@!9](8sAi_Sa6SYn4=ܳ\*$nEp(w~J\B.Uۮ ~+ FrUV3x8lG%o%AM/b&0.e]ΌgwV [@(t)ҽYոe2zbʕ3 BHH˗7зo_ƏO sq:(J-++#&&sh3fV^MǎZd2oFͿv~יhZ&L@BBK,AR裏DVV.cƌ_rqwoN>}ҥ񤧧st:#''rYjK.cǎX,Ft5d2o)S0` ^t)v .$&& ʭW_}… Yd j+Vp80 +DDD_j9s&.ݻwM6|7̚5'zMPP(8s LvEDRQPPh4^s=?F@Qט )+ˢr[7k!Ga/w'$^%e|83?W(Mh{ղj[~WU$\rw&Ueغu+1\.GQ^=v;WfӦM̙3~]S|WEEYYY5?#IJJ8?'T*4 YYYX,q Kj/D $BQCH] +BQ#ؼy3Ǐ硇7*@Z-Ng}Tyg bԩDFF2rHߏ`'_gK/ĶmA&Ɍ3h4ЫW/m֭㦛n}lذ<ƌC _ށoF\.cƍ( ߿?JAa43gC !77ٌ ??{t:N>Mii)/YYY2h {V^Mhh(> _}wy)x?T6l``2ҡC5jDFg׶MX+8?ʤyb2>!ʂ4P ʼn /֢PB\荾za(Z==@p1[xٽf1ވJޝ9h$RbMjd2ۏ&Vg^{;w?a.qy0wp$'˸য়brϰ(`*tӦwRGKE9gJ ܳ% ~ś0i҈Q~ ~y&AqÀH97; rsq!y3)-pp9LCvOR7>t(/? +?x~[a1_po,LqiB_A`X0C@X4&'$ɅZGt}|xXs?ZahԾG<dtE@X w1f|Ri1T(7aZy㔗ym:5d\}ieuvb:c{`(dX/==#)xyꩧX~= ,`͚5T*p\rxXz?nURRB||(NrѤIӤP( "66ə/wy4o\$׳UVT*6o̠AxWٷoK,a֭ 8Z#b֯_ҥKgܸqY]9u7׈fcԩs׮]VX6D\ FyyyL& r O'|{z= .駟}s=<#lݺB֭[Jd2A.]5j&L@V#),,$%%4r9FAff&/?3=zuV^|EÔ)Sӧ;v䫯bرQYYIjj*ɼKlڴÇc2:t(ou2n8}Qt:v;鉶+0vX.X`#Fn`X,N'?<ׯ˅Z-h۶Um$I .V}+}5[<"TDaYnr/E徦DGDnY _qN7 M]i{[<O6{g JLJE hӦ +Voȑ#ޙhvݻi߾?*v;\ :y睘fz=ZL֭[WCǣQ(={Fy;v$::|gǎp ֙1co@v͛X,  ,cǎ}k֬ARQQANN:$Iv.{}q^z%qS(| \2ud̙3T*7oN˖-ٻw/ż 8GҧOٽ{727x{bbb())qNPPx8N[.[nx֭6nݺqY1b{/(Q$m۶VZѹsgrrrHOO'22pMbll,v qqqҴiS:uDRR999@bb"V6mJdd7ZSӽ++V5sN"_ rfӸakN$"W ҆oE*ŃL)*E X|9cǎYZ{_pT$$$?xMU*YYY4jԨ)**bɒ%HQNɠA.C믿w^Bz۫wAV^}oX஻D`` Ga޽^kB`` wqGuJ%?M7Tߟdv܉bpmը;E^z1{+o~-| :Pz+r^tN'#GiӦh$!!}NU}ZrRSSiҤ ~)2Rܯ/ݻ(**ɓѠArrrNRC !33pj5٨T*-܂l&##^ѣ~%%%xʇ~ͥp\ 0f3hq%%%#ɐs=deeV_>l6BBB}i6m2 LZZN}b6)--%33^zaGw!kl*l|I bT*iܸ1-[v:uCl۶0$IBpԩX <11Z,JEiiibcciР[nݻwS^fÇgٲe ~nvoP #G2rHVK~~>Æ bSNqt:-.6,,̛DrU'|Zqq7Gx'??b6nIjj*7ZC8 FtUC yfsc?BdpQcZT*o6R*^/4XVVZѪU+њ@b닿7 LYYLbԭ[_ώJ骕'q8nmۖkעjY~}[fȐ!̘10x ڵkwzy=z4$Q^^~ko@ݺuy'_,Z-:tfr#>s"##W^!88`t:fsNV| p鈈ߟ@dT*1 {8Zwt5\/޽E,$Zs\PPYYyYj /7zӥ(--B/V[hA߾})))sXϏO?Á{_~dffֺ/Hvfk֬c8q"o&={gyC^]۷뉈\٭[7Ǝ+n !@P>}ǓO>#<3|[g@\5ڵ_~r6mZуNM,=j( ֭[۷o_nFN'Geʕ5`ĉtޝ۷Dvv6o&oeՙYfn:|||Gشi; A$V+qۗ[o].ԃfC~ѣ 11r]CRR}h@ ҦMjoCBBرcӧOu ƏZFRy#wҵkKt𐝝P(dӰaCtOLDVh"bxf6}ẗLWsBZl+*G}={pB7o>=. BٳgQ(|GWc2fC$d2!!!5d21wk&Nc̙ 0ή]1b_g#y'x'ؽ{7۷oɓdeeQRRBEEzT* GyN:ѩSk|DDDpi&L@npyǏBrel6)--2r9ZhT*ueKdgg3|pڶmy'ˣo߾3$_e+E ?͜9st̙3HDDjڛ؃墸L5jٳiӦMevv;dվt:)--%++3|z}cZ^30O&<@d24lؐ3f0tP_{Xx%}oYY>>>L4ElĈ$&&^'+Nff&>(/*sδmV4׫4;_vv6~;rll7pC۶m1Ld2j5,Xb . FCqq.>rglleM?d W$ j"L.d2FPg1`.\Ⱦ}%IB$t: <5 i0/;/&3C#\f'OT*)**iӦhKnWRR©SP(Q~ZEQmݛO?ѣGի0` ,h}_d˖-ڵ NY`&L'::~>?]<_p \dBP ˱Z~<;N >>>d2v;6͛гf--Irb[KѸqK VVR\hEļ"RԂqq!ɐ^Wf *TT ߿?̙3s PT8NnKn7tPN'& Ro߾WTOwu ~Ȟ={ԩ| ={z8q"Gw1iҤ򫩍|z)~G"""8{,G?*md׮]:uaÆ~~^{$3r Zz5^zDFFT*lPS( L&gΜd21h bccpgϞ%77;^pGf^ArqU"9%EMݯ[kd鈬[JӉRQB~+&)Rxtp?޽{{`0`2x7ne̜9gyh 5k2,Y믿+)++瞻{( Oaj(:DYY 1 ^S#ӉN+ǣ2rR5ZPTTSN)mʕݻ7xJpokWIzWgΜ!1:-+zFC~~>2 o0k bhҴuMVV<[l!,,BիǓO>w}EO>$f?>}vcՄPZZ}7tHB\tN>MAAfkRNV&/g*P≚Y<m1IlTTT`X(//OOdd$׿jQʨS[ ^Yf5>>>tUT@ v&M̙3q:hZ ;v,7|e <`ٲep k.f͚O?BK.L>%(d0q *dggSXXHqq7FfAT.hPTjofRW]<&T.&Zn_Osvm³'V___ #88X49L0qQ@q!^z%lقhD&QQQAzիwqZ謈fcذa߿k^̚5kXn{rCAAu{qڵvJln{HV; .?#@O?d:t`R";;M6e>Lff&%%%X&. J`tbZzBCCiܸ1:ts,Drr2t*|nupSZZb5G233IKK`0p88}4&Ia 5DDDCeСXVN:ʼn'8{,yyyPVVbT*FBBB%>> 㾱:tH!@lٲ}]: @p sqL&(J 8y$m۶# &MФi,ӵkW:u$. ?B&MD^uω'h4զ?.@ <W?7|Bbd{Fᣏ>pPNv_|AFa޼y#rrrhذ!d֬YԩS,YiӦwqqqر иqcz=sѣ4oޜLMh$""~իWӡCN'SNzq!fΜҥK4L|HD\\;wd4i^̙39q͛7'%%ӧDhh(+WdժUkI:u*iC˖-c˖-mIJJTVVRQQAyy9Ncǎt:iҤ )))L6 Xj?Q}ԩz~=υ w^ZjEAA~!*6oŋi֬ZYfLӦMIMMeԩPګWfŊk)S(..~$%%1k,0,ZݻwӺuk Q(Ʋujvٜ8qnLB@@tԩS)++#11$fΜIBB~~~,^]vѺuk мysZ-3fԩS4mڔ3g0uT aŊY:`ۙ:u*&D83ڦMƍYd 7p)))L:uϲeغuL2ܹFu!ZhAvv6SNLJj}'7|æMh׮eeeL:̙Cƍa9r-Z^\O`eZ[.[ne4k֬j_vZ꿖.]=}LB۷_Vk{ǏYfӗ[{_O6{֗,^;wm߾F3kVZMV_۶mm۶2uT\.W׬Y8~8͛7ٳ|G5r6m:|03f̨n=%͛7G0sLN>MӦM} y3pBC֭)((`ʔ)k˖-O}z~7fϞMbb"FʻBLR$&&[W_yYݦUW~֭[LByy9 >ӗT%g| 4nܘSNG֮]KlL2Z5sL>?SRRR d2a4QTMpp0rH\\>>>T*ÉD.j! RIPP111hZ4 !!66шR$$$h> APGll7:Fxx8rt:w @bccj SRJtt4JVKtt4AAA}šQdhZCETgTTw8|}}ZmXXXuP( "66F=T*g}=Ñdt:bcc^O>=B\O>cbb^OOFDD\r^OTTM6UV4i҄zꑐ@bb"rSRQy_Uۢ\.+{==m߿F^ xsy>kU g~~~(JEVWrFz=5 111  66NZ˹+J>.ޫ%U(Q(_j{%=_3%2 Z?__<=}g^ڮgLL_iC_UZm(,,(o"==vyzK_=U[O_R[Yzzy~=[[_3k뿪gm]O >.]y}({%@ .LrQZb̙3GT@ R@ (**o@C̀k @ !@/G&q4@ 9"T؜Vp6\F\-ZQm_vUT DE@ ȿErN99fҋ*(-w`p$2Ъl>VKPA!Q(J͛7&X@ O7YdYJ,v|Jtj!"Dh W=CfI y6R9ahvbvD @ 0Y5fӣQC:F$U\Zfv,aՁMV4Kl^4/@ Z sv'u*^P Wh8]W^\^|-5ry=&&\![lAPЩS'Q@  f/d9~䛬 _ MJK8n"de?5mgoL9<'~Bp8r_%Kf!<)'@p_Z-@ RR"Ilg&IiZ@7A`R ,|'e;k䴋U~ɯG HJ-܎F@tG7]P^Gt 9 3 |d{Dvq-M LZpB@+'%›ˏfatH P}wuBu޿3 lO.b"ߛNQiZkٛ4*0]4"~i| ;H:|;P3F7&* 0|u ?ކ?gxx@_+|@`tmý;Y@'Kpu2Mc|y}`j뾲(967 o0Bw\=e?S45*:QI J,vdojH wAT /q$^ZrR+_<ԚI]ă:gYv<< e]4%6iyQQtEMx?Zoޏzäv @T"EE@/΀1:& vZQoh!lNo^Yz ?o'Z@p Q@ bjZo]ژVWxוȻkAFahr% C 1W땥G#cF؝^ xDV`dh~GU$J" d2`4Ee@/Oπ,ّIfQ%rG/q"r볒.Ъeep2,Z@pfϞٳEE@ H$rkŇYM|"XVV@ i,ZN;GIYCT@pNI ?=bsY/JR]%*D ':Oj,t A!@.6uK!o,?!RkT Ӧ?JJze%)@Z7Yd~7+gFLK,V rJ*3Y9[3,ޖAd"OT?GNp @ BBՉB.CI.̝]U*!5Ω`UR_lLzQbT?Pԟ?C^D%@ H$ a,tIpvxIu<޷.['}t(@ SNF CDEsaw(un۱X!/-9"*`ƍܹm~V^}aAr]$IڵZߵkO?4?8v~Y6o\mcǎqAV`„ U[bԨQL6 ڵkYrhl@ Rz**Z jĝ_ngu3`x?#Gشi7nK,\.cǎ%))o/27pѱcG&L ֭0i$ L&cǓ>ʳ>VO?I&X,W?޽{@/ >,ڞ.L.*jc$ۄ|Z3}tzEBB~J&O[oUm`ټ⋜={n1cpax 9s&˗/n?gƍGNNƍdž  E~MO?{qq.\W_}ʕ+;w. wr9F>E1{lvAXl=;w>ĉW_]zjz@ vHN LsV9c{9R!yǬY{、snF^|E6l؀Rm۶|[dgg3vXZhOQF,Y>???ʪgNNu뺃vFAN=z4w b ;F\\sSm=cǎ?N:t֍JnJ׮]y7 {KpxG -{Bod1S$ Ņ=y֭;1|hٲǎ%M7q9o:~֬YEPP0 ADDw9qa\. BHHGߏL?CzfC8N vTرTPPPBRoՃ W"55խrf3 4_~,X%ӧ),,GwaGl~W(lM-of͚58qÇrf޼y<3lٲ2~xy&NΝ;0`J#F0w\4 gϞsL>D"""3g51̚5t6mJ.]3gM4nݺmۖjαcǼk׮tؑ_{???,ɓyhժ^p8h߾=Æ c=zyPXXHƍ3f 3gμuk @ !I҅HIKjwJ7J}ļCҾ%mK޾eVJ$I|0EիW{˯pHҞ=JFQjѢ$˥haF;vKAڶm'hRzI$I*/Jz^#sԫW)44Tj҉ɒ$IҀIƍ[ I$ȑ %&֓ڴi+hR xA$u]jԨ))reVh~$IqErJ)I,8,%gIKf͒v$IJ 6rss/»^ll[oId2$IƍKӦMkiĈҡC^$IZx"I$zҏ?(%%%Iu`+"|͒$IޝGU{33{X #*Vu eje>#zZVKku7LEE@! H&3If;1!QPT> s~<򵫫\wΗ^zիW;ߋbvAAqFǎѧr?bgS+\ddffn:]X+wq9殪9n}.j#U k# w5kwy'/"=?>eee\}̝;/Yfɓygzr3sLjjj2e EEETTT lj'駟?K/mƐ!C0aP(cǎeѢE;qy78q"\pŋyGmxϟggMss3UUU딕1uT ضmX7x۾<_^fr~uqC'vk"7ۆa8ӒwPQ1SQQJ\lI{<òn#8a|D8[=0.t:6mf~~8ږS,"u{Nv3ئk2zO0Mg}QFOx<βebҥ~444dzMEE_=Ŭ_MEEw-bҥ466xbΝKJJ ~!#GkKO~mFQQѧ{ײm68 N=TV^+~<7++͛73o<n&}FɄ ذaeee@bW^{3c ֮]K^^ﺺ:vڥ ODDe؇C< D9Dzˆvc7ѕ۝?唑 t˗?װm[ӟ1M7+W>ŤIѣ'{SLt^_PЃ 'nѿrrrbر-DC>JKӧlذ_|Ni|:k<#GL(ݻ=z4 lذC(/Ljj*x۷_lx}sϽq&nǁ_xtu {a~vn]rYh`ЩM""""ǔaOу/7&'Fl=.~ۙ>}:Ւ9Cp42e BN5x<@qq #F;wv;8唓7n<KD]Uy7j*&MDjjM B1glzq[qMnfF'0u<ߜbj* Ĝ9s----pusݎ4F9>O} Bl^9&zʤ䉷w?I,ŏL躎6ұr  H[[+=>u݄aCmm\.hְg}p]ws5s?9σ>Tvݴv;iOH(yNs\N\.^iOg?wQ7d5ŝ?H8Ӯ7] лwo-ZČ?Ųx][q̢NEvv6xv,b xbпϟϵ^5!77[[9L+uC Æ &%%˲zUDyv'`kbpI6O,] ,\OUU , )) ǃm3sLzW^yl\.X 4Ƞ+V`Y^iǩI'$y|Gddd`Ht9< x^n7a 5jSp͚59 :XnIIIΈE,cdg'O~:D"PZZ ={clݺDDD8 m;1g*#4*O,^ig_Fr+cϢG^7gMAmm-e97ɶm'|NN7|395t2g V4(Dl,\x;,Ğ={mE<4M23cN6 .8idۉzB&?aYr<v%gӇ;˲,p'Mرc1M۶ ä޷Yf99s;<P(D^>N;8x^vg;T}2fӝ6~<~!Ct57eZ)((9F("//K~~:s|>~?>۶1Mt똛5w>  DQlۦ@ # k.g"vh*"ӎ={PRR5k873477ꫯ0M˲hhh ]SVV~ߓaqsu^Oc&UW9t~> àɓ'뷳1ꐻ`so[1}~::7DqòL|KIn:gݏ]l{]yvm螿sb,+""""4Zw,fbw7F # :tyϻk>y=X:We`vg#{(|7!Ѹӟ¶Q f?o.*WLj7!G@ /g@%:]Du|r$cm:ӄ@yd7xMFoC6nZo .ie$cʝ`L!Zc;<GSCS0VjQeErkm>aIV爈ȱ@=(زQSG0aŚDDDD ~5[ҥ%N/bOK""""rzr3Uv:b1J7cרCDDDD 7T d^ЈKӱcع1xM8Emm0:s "G҂ҒLm:DDDDDprI_uu6.]^ݸ#<3DDDDx nk-7l=knFGk Iժ9_JUŊZ$3c\ 9>̃x,+1eK>Ⴕ7\NSFb=Yfr|${dx(#3à^))E靭SG']?׏HM-hh)̇5M\ks鷊pt/:tm !""""r(~ř(=A#,%7KL!a΄uQcQ]:> a}ҹm:?ze'fCDDDDD˺lڏ0M5+@ OUfo0SDDDDD{_̍ޖ(G 1߬a%Q;4)ãN .Lclu( 1qdO.lo(`xxQ{#c1nLW z ^_aHaWGnzbZ!66),+Q?mpv'ڵeWyK2EDDDx@{⁗Seqigze$n;mo##$;C445F8jŶ;US'+5.=C守(ҩ!f+o'g77RV򅎳7u{ aM3dp˔A:c:FO>70mL.v#mA3FY>:Gx]LFSKPDDDD@)yc^*?O}s"+K$/G$JS.6TB(k7!+Ør78+|pEĢ|0AzOʯ6LcDq&dq[6}.\M= Eg^ 쑪KODDDD@UU7yw MMQ"q"1۶ 3|ziI2~h> UuAf=^>=)xm :¿q/]Ӈ00Cu]=ڈ[5]$c6^7=3蓓Lk$N}s;pE8=f[RSzqr0m81&-z=_wrHK>aq;[4yZcn`͵-@[b4&5$+CfT/(2/-{ya)M~hW 5Zil00UtQjoc%ta`TWCDDDDDDDDDDD?FDDDDDD@DDDDDDDDDDDDϭ!."""""r>;PWW9NUʹ9IENDB`gnss-sdr-0.0.6/docs/doxygen/images/SignalConditioner.png0000644000175000017500000003172412576764164022605 0ustar carlescarlesPNG  IHDR(~EF AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYsgRiTXtXML:com.adobe.xmp 5 2 1 2'XIDATxSKV4M^H"ED & *BSAKQDlH}{eM6ٔ&7-Swn2Μ97CPHHHH  ($@$@$@$ PA@$@$@$v]@$@$@$@TPx *(a$, $@$@$@aG J5 D$@$@$@ @vM $;wŋGRYV  HqRbn(/Q#(PN֯_3/  vxAՓ1cfbeHHH TR5AIUR8 @by!    PA *()"  I1 @by!    PA *()"  I1-\vM~WAɓr!zjP!ŋr%+~$E:~C!/TP«=Xd"pi0`̙SbbbhѢ#GyܹsΫ^Z .,֭s˗g%KJ|o̙3K6mt<r̟?_s&M8Ywt"UT hܹr=-"%JYJÆ e9sTTIG#7~%>v0?:A!SLi޼5JΜ9YqSOi#kZOxwޞ(o߾}u;ϟ_Apz?'\{*9WN]-O H"RV-yWV Ov!qH9xoٲ|7GF/ʕ+eĉˇ~ N㯿rtݬY3A7p@[M~p6n(e˖y?^1aiѢT^ݥ&(ŪUdϞ=RtiظDrЧOySN˭*k֬_ׯ/}"9CfϞ-;vg}Vw;v3f:ψ#4gp0#`w^&SNmrAt|(:ŋv3g_+]&AB?#E z衇(ڵk$6m^{M6lؠbŊmO(h(+W.}={V>cydBQI@}I"F BP=%ӦMKL=05Ö-[ۯ_?ip(%y9rġz52j@硞Jp$?<ʐ!c޼y 8T~؁|O?T_W_MÎٳ;3LJs3;uw}5 8v>F5<)cڨuҮ];QZ'8ÇRJ)R2e`3@ *Qٲe?~x`L`$ /W\q ## l۶M>͡| 9L#!Z% fSor:Ӑ@$ɭDzEjժFdРAz*ԩStLOIn̩[ض :xLE7.͆5ه},YiL-a?EJz"l[.]*P`D)|w Po 5kBLd̘1}Oẗ́&mi믵($heuΝ;w޺M6-WM7ٿAU`>BPbEQh2l0YdQزepsY`{\`Ѷm[--Fq 02GP{"us¶#GP)P`#F #@uCz}i0]i%gy0aPM!h%@%Z[> CH°uڵz +|MiР( )ch :L2:@(AtP^+8n YFa0i \lEthP>\S&/^ &ς h o sbp,4m[(fX3ydR @KR3OCgX.I8{_i?RZ5su e%˹a@h4]hOZiPB=~*𧂩#|)cN_2fѳg#X [ȃ˺Xk!_x4cc `  71&5B|"0RiP)obu3a5kzk0#Y(*VTP壨x('gdFoodP,| lY +FС[?j%IO (Gj;Lo`v1P O-gtv9,F*_Aa5S(#] '862$֞q=6Mt$8-$йsgQ>PRt `сBAyǼgnxp= G1 ' lICQ1eP蘴kͶW^Zڵ^ӴiS#,8S~;Lt=ҳ|r EOKa7) cnHVׇ?\9$dyKRluy\rYS鰡=k/? 蟇v\LZ)k%Oz_*x\&mZ;3,mtRrRf|χ ˹3qNg2ܒ OTP|"JZ׮IduFO-k~ e/e1S黯?+nC\U d3ͤb&Ҩe}%-z)/o"2eA}t_2X)cgnM˙40HfM|B&dȘICRJCad'˗.Ⱥe;+Hw,)xA) @ 8 MNr̫?%݇U6R[6~6_ݒ+_Xҧ(YRb@<7S7ir)e9杞lk:|mmҤI]HY廸Ϝqr-$ A($@$@$*( aܲ˾qp8tN]HFJ9_ 6{g>Cޑ}Y8y}t~Uə_Q9 )Q܉ +/9ùC$@$@?!ΝwL\tQBdԈ y J(0v*E 6{>8\ ۤ UK[?%ڥeP ܅sҥҶHɧ@1SDܐ+X!$@$@$'I )\jE^}>V_(W[-/*.t!cf=ʂsG)t]o.2YqHH&ڻ %yB)^N~`v9vW0b^-E(+M')ې /l:8]K,-ָiJSfy ⅳ3w~ ramQX U&3/Nm>ӿ֯#U뵔j[c+_6Xݹys3N giץ锂e zCyԩS-[6ɘ1cJ]RNSL^OߒG7'k7.tKfEd?U̻mťijVheȐQolOIKNz񃷇9+Q^^g=%3&f {~[Fp' Zmm3&^',];y|tK%u}DmjWV:Ͽ\u.Y2{Ê[cJI揩Նeϔ;i0 ҪNZvn^)/ڦFl=g&Cok9eZ2C]oUM}הOOl9r JAپ}JժUeҪU+ɚ5kSqSˑU-9.sO=yO.4l}8\`RIuHW"pz ~Ssfѣ<ҫW/TRJ-mckSgZ^NS}}s4_.Gu. _6mW\׮CBYtپy~ } %]]ǻ7tVrevcDz_zE/Bv|sy.ڟP%L>\%5++ 9}z&I۩{LSk3ՆX+V4צ((#?l[#(XGy{n^状(MVʊG1;4{ғ5ǜBo}ƶmJ G-ڵlٶm<ҳgO`f͚ U Zˢ/<^H?c{ 6nW)y+BLٹEm:{rUSvd$v{-䍀zuI`$nMVYVƿZC1^9ڐ6rdk`U.eK߸͇~0l{=CIǟrX5eoߚS@/ZI0D/Xesz~0K;Jvyq8WҭQl:ՆSӹrjY+5҇bn4~]*%Vv+5RӾ q-?l~y#g>"{1딩3BnرҩS')TPHiQOWHM|٠{U V mN{}ċ[DMyVaV(ŕ;0T=Kv+&=o&nؼPo$6jC8w1>/O*+[G=u/etYYTpr7ϘW9;_2Y-|/TL*6y75πJq!S<.9*9KMS'*q> !);@ !u(Un[6@v8+UF6ʋU0Raut"P!чVokq(e#Xw<>\{ ŒRJ9gA<"x^`SqeC!PF(iשG[Zk'AA%x1qº~ gI%g\ϙN$ۜC[  JR +@JoK_(FΪ CV>.`6%j$6H1%+8K}2cBsoʱұ 3px1<^$)3 1: @ 7yVRտ@|fpzTfDWf/]Ļ_.O}*SGuёYQkͷž((I}$ ӓ K JHM_/2_dʜE*Vʅ!1 ~Kzxڧ@tuJɩѰrZ^ πPPd$@$@  ߅뢸x'mn;|TB每WNz+O0/K ˣT׮^4?\qHHH.3FIHHRTC x#@'  H5TPR =/L$@$@$odxHHH PAI50 7TPy   T#@%$@$@$@PAFIHHR@z=~d6¡'p!18y_+B򾊐b}ȢRA)]t  1mI- |_TT J Pd^+Ch#@hkq֗HH"h$HHhkq֗HH"h$HHhkq֗HH"h$HHhkq֗HH"h$HHhkq֗HH"h$HHhkq֗HH"h$HHhkq֗HH"h$HHhkq֗HH"h$HH@HeСVlHHRzȵ"&' M$@$@Oʉ4% Vʐ =PAG;$@$@$`+TPl՜ ؃{#kA$@$@"@Vʐ =PAG;$@$@$`+TPl՜ ؃{#kA$@$@"@Vʐ =?h:IENDB`gnss-sdr-0.0.6/docs/doxygen/images/overview.png0000644000175000017500000107313712576764164021045 0ustar carlescarlesPNG  IHDR pHYsgR:iCCPPhotoshop ICC profilexڭJP@ EV p'QPL[):$ٚ4T)M'prt7P:8D g:òQaUU' ̲@n&vQ>_vo4a hcqSE?7}(2`RdN'ZV,˒v/Cy4Ju8L^*UW= lӪz2C oF91^[m na:o+e(m ïPo/ cHRMz%RX:oZtIDATxyxUUkҝ =( HD"8↎8:n8GFGDEQQ6YY]-@ $@Ȟ^?:iaTԩsNoyϩ(" 82"|Yg\?bLLQ5y""2h ХU!Nz^0Ayr2""27퓺ȇE(6^u$<0q a""mc {fZ {6nB""eBULUUPR{1ah9 zgg_߲xRRt_LV!%=ygƨүjsL""rS{-ҳGO=M1tCT:Ib7M'ȈFW."bR)**?rE:֭]C-n,] ?m<'ܾ9O ۶-UqkX@,t:-4Z;s0_~z ]#u]k׮XVv<`LjN[1s>%m`?~ڑIӦ-xyv|H% 1Λپu?[lBC68g\ʣFAJ6ұW< O<ǏU6t+ع{7/">wj0lVv-` ?7b22p2}+B9;tӏ?g]4FT3q|>ήvm ngExez <1nDž@n;V _z >옲(**" q%`صk^O߾}#}nݺQa, a:FL׮]21t eQ*sXDPL 7($%%Ѯ];\7 go|6PZlI˖P/[c]AAE׺$jʿ[a~}~'Ld`U{׭dk<W6?;gpR>[ɣogUA Aςw\\: f"oN0Izz:ڵ۵u?yvʽ^F H΁p\׏O?4o~gXfNQ eX3k,<$Ɲ ~}J>][878lޒՌvLw=/^zEEӿLXє#zn`ժU\zUkKu4M+0=&ǧ"SoN|3quj8BN$&&ҹ"[?NRRRNv1Zu,NTEDŽ_5wW X,58QFѸqcrssQU~HiCyIsK/10*D}DU/^:7b&P^-&_WgNTw~"Ry^'Hx"%*By:sn:wN=~4 > m}1(̙Ci޼9ӧOgʔ)0mĈݻ7B(B\ѳ }Ť(wA,7YpWU`(aRaȤ{ /c2]tJcƼ\MAl}a{yGW2}N^<Ǖ:[dY:}^9u vmj M"Vr8My_Pr{-91?eEC({4" i4hzҢ|s8 X6wnc옫0?drr2Ma׶IHi% iҤI8Zk0ï!{˗,[03².gD%hFJJ2"B-q?HrJ^y0[U q?~J]G|l45on՛9oxaXv.UnQpr"0hLK81XL-#S4lD9ZLD9+G1\ue*{n-SyIɞJI4o+w0hF X`k{noMtKM;~TQDg3t%=Ƭg"/]ܑKz4&??:o;֭[Ӽy/zjG86 Z,/ 2T\|5\{ZqӝëVkheUsED^'f DT ] b2]59Rxl((jcyجKg ˫Џ5P F~-/d$$$D4IF 8b/3-sّjhРYn҃;1vщ R OuLJ6ҽV*zv(C+̙sv;h?)_q||XUUҐmN+fy{h WPIQLoWNz0fAVظX.Ғ"<9RYZ/Zӷ|•)xKiה p6vGJ*/QC1Ѫ N1l^}m QZV6-(X,u@(.)"19GL{@Tb8p`FWp,N>Ήb&~w5?e`ќYrrrXbF~ 81N/nq}v^ zs ;{]X,v\o-ɍ"q} jpRl7ShX-9is4mڔmQ/" }\!`GAV|:kN!F.XJltK;Ć@ㆇITUHraҫ|ԴiXOqp]^ ϸww-{✉ǒIZ嬊EXBw-!)Qx<尵Wͧ 12&ӽ{wUUQZ9qpq1P`?ׅ\ŚW޽hmvTƮ{mdϋ:˖PР! ~.]`6A$raSǝLnu ߙs_:`Dll,n`0H||<G||<~ruEll,PRRl6UMhFLL wUJgbbbp\N\\VS,f@kG0y9rTUg2())*pff:Oy"Vfw;J:`0XmޤWag>E H5M#<5Li< 6u_ۙ0a'=zu#* ;Ybss:'d;C~r26{tyo3}},(U 4>裈׮.\X /,ё%ٙ p ӂ PGT)# rIv*V`FrmXU6«۪ 1ya32d222"{tڕTTUegz (l& N`0x~4(fP\ݮѽEQŞy^HimYtڕ8rOHWƣOM"Arqn&ﯕ/=}W7mO' ttp"oYwlïl^&äs(jcٲuM_[VRVjpAuGyy>t5UMӪ&}=0ixL~,r?oʠoF\tƲjժzk$7MF /̕}Rϥ-c}f3tJZU>48X`aS}GrCq^\\e[;>cŎAJbbT XE#hsM1B>BA=L_@ eee5ލ۶mBH:oj vM̚E&D/ڶ;IT!bV-2rȽ笎lo4-zUqnAV+mڴaGB{MQ8^'8t!00ӽ]r_)cJUfa]vIII(RYD IWh[Ԗ}٨UlV3?m?@kF˖-)**ra#BG8bEY f I-ݵWPU=;Q,q~f3P,L&b ==B,KWEB@hAXa9NNbJZ姝[PVdܸ=9{+'yᇙ2e k֬ W0aB›>{1ϟ_gDണhQ(Pdffa$4's$4xƌ\ڹ-j%s~%&wk)i3<ȯY|9_~%7ofʕ^SO=ҥK+*/YMΝlhs6nނU޽a B0X̑B'Np {% qx M~U @UUrrrHII &]d8￟~3gz9_oڵkUp+@JJJ>B3Z9yrҽw=i[iS>y?MН()@csN=]P 1 $7dĈ{!2$^Ef5Gf/_ ]}A~aCNhԅ t qq\q7! `P $w6"t!Ĩ4jM2B on99{OI@)\!E [_UK-&~1bGŐA#Bx<EEbСb/VZXbMӛ5wl8|" FaIHB2S E)mo bu={ڴe=W_9*r(ѩ8d#5CUǻvg֝|"‡I-$#IHKrE~=0""3/{~II:Wkcg/ڸo OUkhס3/>.Y^/7gfe޼1 )|6˜lܸrG~5GSU~NMc=$IhтFaZډZWBZ.㛅[v؇gݺֽ͔/;~9RS[`/)^|~ (7b4SG]hdbe,XT<^/3\]烪_W&9" TH?U0W<~ Gs9yѴJ. KdXk$ق"'pG޽sMnUHopi$4D`ɓh|[A#؂`ʃ y_ُoܯ'ƍ6dhZ>nGlۺ]lھSV !6tXrb"//٫D&f%BDX,B!^wkNSÚknÂO @lؼUTѵS{/}(w*1nTq3}GN={\ '啤o߾7G$B[֠{`+Ͼ5O pG TΝʺ~4LWN^ ?s挞 AN_洓[UDF`~N}=$7kř8|9uoҠ*~%/E]DoY(y FOh܇ኂje֭8]>wEɉ0L:}ϝI)255۷ӻwo=;<}Y!`g;mnX-WdFd<ԚO)IyfQO.ذ_iӦͣcǎ@?d~JwԩS$⨨7;`̘1=Or3bpRܫlؼYc hٝ;5!pb/^̄ . Brqw~] 4J˺/699ݮjz)""&MW3ك$IsBg+ XmTIBE 4UPU}Fm۶K*7pڵץAP5;5ke hyH 둲,3x૎х&bPB2Ui~Ԁ?J:,2;ykVdŀBlL$UN5Az27'tΜ+BewU|^sDex9ֽ gr)%66KtQ5$ (ue\Jjr "[//^LbB)m&+k8zO mtzH"('!Bp9r$#Fwa5f*~nZl8pKoÑÇqWVh4NBT&+Hf-XRR 8 NaTj~4^B, T夠   b՟|~!#b/Z?*Ԥ1`11x~NTUhXLHZ5 a^Y\TTw6q{g۾q;eue˖ѼY3T!8q"[lR ncM(һ]Oe"""][y64|+[jUoI}.]%7q@؆OZ?M533#FԹvǮSF.MN?s1g| QY":gYG 8j #GСC7 W_ NfIF\d?ye z!4MLfؘݙS),*䁡8^QaPP[&KRB/N5q<'(-/jĉޯ_?Crۉ ֙Fy>uo0+gL`/X,5A*KU|y%c2l]=It_߱N^)ދ%2MTMGQDT4 RU,bcD 2f|ޘ>|[.ɍoNM.ņas_Q\oJ+6enn5fL<5v&qN{zRV[4!_p șY1BhӦ5y|^()5V] -ر#bw,弅ɯѢp-q6a\(+zjD ž:VonL^OFK 9y1Hm"c;O,>?7/v Ӧ{وJ}d v 7ehס+ $!IHBѬ ycoxh+p !@2sמv_^osـKև0N - :D; ., lǃ !WѣGdK 1r W9qxU?"h[o@ɩ`кuP=oϋ;KL솚|amWe M `.R͍ETǛ7ovr]5h.^+F hIFYj6`TOO{?P|r~)(* zVCE3y>N{W~%6.L8FyJ^ҿ 99 ݎ $!$bCzCy" /?~<˖-"r." ITd|>py*زw} zu$/}^$E%EПVa# ! f5SyLQ;ve˖ Ru(SSS)v\!*k$6曬ti}'QI>* hx֜r2րYv &'BR}HB#9.{y0/%98*[jP\`0&77M6uˆIs$=]+xȐ!&3ƍpTp2w?m{8FĐМ7@J=_X Dξ~ww=?A _6PYUERR>7\e5%ʪ7> ƫsÁ(7U<Ykk*xPQ}s]M1Dzcٓ'NԊ^+vL8;%{wWX#G蟧LdBQ@$ZzQtTT9*..=\*$!!lu| h@bb"fYk=/>>C=gO{ꯈӟM||<l޼ܽSѺui8*/ùʂ[tڵVxU9|0555?7yv[IzJ{|SLOa o Cƍ'7F6jԨk*jǒxƏf*6&IA)%;k/)'T Up\%q P!4If|ϻWSYEמ_QCRsB.]W Aii)~7;FHdџgR|37H9 ->Mq3$ͦ`jj8)+;֡ᤪ*3wRw'ώ;k]sNϱcǐ$]Ȏ;L*F̗?cՆy/@l&Q+:g iPk`vPb 6D+}{u}_s0%eTT_t3*rJ>_CQ/zI(iʔ)ڵ?ʋb` ?@,&@ hd`Xn` M־X*<d?BdH!rfuezU믿Ama/裏o>}9}4f̟?^` 3n|pCP1_?Z A^őG.m3g+dkSH Tި3fQ?Yf髼[! ]Y._c'h"6^dž g_Ӥi**Z忧M徟oz-YShZ/aw ڷo JBnzuHM2ʵKvWSrpnxu#|N1vX>SK͙cI4dDQ dH^Rt ܌$ZOԡ)%iޕNoMJJ?\4"++릘Klqr|[䮝c/#$h ~UE `scchKK/Yf[b\.O;TopE3{[G4MDMF˦8+1[ KRJ AXprb0@.I>O tDGDl^TAZf#:-~M + j@мE\>?FE/{CDntkȐ!lذcǎ|rƍZ:]-PsRU⣢ƒ N"ZYϞ=zv<_yÞ#hS j|M$HӏR{1Iv>2*L+ s=4om -|zqLr9 |>F]rU-Z̝;۷s1vٳzᩝ>_(Ԗ'~cs8/y^߾LN tݫE+BH0xZIIɵzs|!EYs!2l7Ǭ^:Ow;oBČ !زzĢpU/Ǐ{E! % t& UPX@EQDDQĂ^ z E@Ql w! =dd!R'ٳ3gf9NWMן} 7s->I@;"[q?1oIB!# Ӏ()3 @HZFaPSmL/>!a Vt2~ kfdB_G,bB ?\!L"lLBx,1c3O8Lб? !x{⫢$?Sd9&V~n!SixB,bxxʇbۦds|TCa. .Wp[-W4%i=%Tip5eҨ_|E^yKv@ew"kT7}.Ox?΃tԞ^=ޫt<{qU aUj Axxyi#<8 /BQq.?H`H_lV;Voooub @;CnvN%)E-R tF u)ޤVBa} lRuc- Wޙ3вm<>5!u&--R-fcoFaq -3Q֟YGhPt駟y+4l66lx:U4Ӆ-Ku%ߵÐK]{ɓ'3qDL&IIIİw^ZhA۶m)..& ֭[kR\:!H}P%m۶23a,uMъ )gO-SyLr(Դ& L&t###W_uQ -:4oLyy;e퍈4h٦2`[-!C 0t2ȲLEEȲ̲e9rذaCÔ)SO>GNIB%ʕVA%_n /nDW޵kדVEB8o; fWPֶ'[5n#'7=uVؼ~+ 6IX*Ъ HZDҥRاǎBW`-)ZdԾ۴NhU 6-z)Nq8t0-[-//E}:pnCgBqݟͩ*B[b=#qU*M8vN=4:8zިU^Y@%؅KI6E)?vm;$%O@$)WRf,/\2'g(,7"NETة(h\_ETz!HmB%9kP=Հ sѤ.Jp}^>zmنZ#6P.!ۈܶC+DQt:-`Zj(hD닏ŅH\{dDח\TZAVpXШX,:=NBPPPtԉ;v+/<8+d - 8ö?ѡC5wZfYK~YujZ/#}ZW̓ϽI_{жA(*'*7!!<=bMZ-Woiж5;$u⓹ݿ)Һ֍2?3q έbѫ]'iY@Ph]ٛJ.w]nXG!7scN8!?/bԨQiӦO7\ @JN(bשQKSYH3Qt8vޙ9;o!;#5ض YEi^iP[uB~6Zb;(+6uF5TJJHK%9e%m}TQQwYq^j4TL2o<AAA̙3Ie̙  3gt5k1oeO%&с"Ф L/ӧ$$D_5x/&qX W_eŊӯ_?9$Iܹ YCS%+/ۖWѨIZV!*Pd$ "‰"'v fa;=f$ZEwۭݨT]H{B߳bh֭zQV&~Fl*zhG\qɇ&4xB4i“O>I.]?~{\ճVH-9q7m"\&^Ȳ" iQi8'zo*̘-ȨG/l3:B pO̍(X.G^WM|z^n l^is) {I(Eg1h :DFPTe>x1Lo)t-G`NJCʇNDFb8y2k onv{O8qb)--QFpXѣ4iR-#<33pƌ ϖ}}5yiVX4rSNS]7"o=oW#u\x1'N$""Yy|8H`CPNDDn59sf0g |;p(%Ht06&ٵ+ :w'#ekɕ[RbjRUxDeρ8Eeۺʯ~=|p"I(N'&͛տ  ={jΜ9\$''pcccO7 ,̘ì'Ym|tV2V$Æ #%%222 ձoAynxyyj@_3Sj c0yJ. [s,s0=Kvj&oC뷨y(5#86+Uf3K,uwa222p:n7ҥKbގSX*X҃ vdժUL(~*A'+=d!U xE=kF}U@Ƴ`=\<핫NaP޽;6mgc RqB[_^ԯgbvRFۻ.%..C \/}[~=gy(72Qn)@cP%+hyZ-d˃fwhq:Ѩ~\Jez]?Ad(ddikmOqq){]=&?7<22LWa~ظq#=ج 9g7}oEeeE ЁVF%@~\IIQ2eF+AMC);=j|)5Kx|? vayZ8r.oM@eu.8uB{%MOe]YEzqdÞ?ƭߕ,moyӧDиA kz"lL&O~+V0dq88q0ZlHR8huJiNJv`.0`D())& 7lO& _K;O>^8o$+ )2f~w"ʀǭ=ǷK9<{oc^}g2|'NwOKi,&NUw ஍.cXzsl4n،4j|Ky M?~9޾w,o5lovݫWZs%w9o#$w^EPʊT$,$Y8oݵ'hkΝᗂ47?0Jjv}ݴomO'W h׹ʥT d+9mot l>Ag#뼐4~#S>tl7w]C///˯8.h5~WU{xc'ryb v*LxxTVA+ϮKI(a:9}+%4jՈ x1GK'HɎQsyQ/bZ Ydf&qfͺ)ĄBQiKּwyB"4Q;.bϾ=EնHnՀ~`f}9oQ2\gg!bdDq*ː-[{jmXݚ5k4hjV ^FPTG%b*6piQTɁCvPTOPP8 5 epa;sVyjx u=ҩ'LDD@5}`ѢE >JjI;E~q:~Qҵ<_q:m? #j #}/^oEdti]=4^l̥QL;Ҫ+;@jz~_/66'Ng6؞y.B KK(wwH$lv;ZB%xyѫSid;ʶ_OPRR-(O=o|`0`6d7nXcr… 1bU'/~yGN"07VeѯjD&w(Κ$!>w^9hsn/ 8"됝ql_QxۣH"111XV5jtk@ -8Nrr XNQRZ'Ŋ 8/@#iyp:2{z믻5e j=#o?@VPRyͬ$4L,ewUFTϓyL*L<{)j~_۪zK@H K31'B>ٽ_C{Ac뫑UVq=N#::ւ=jo$oFfWY8qܢT^~TK9C=E,IX_ m&xog1Lz8oXC?O@BHzLN;ƃ]GWqm1؅!³XDPޠՈlK/1{lL&uiժvކ?K6(8A9C^ӱjcV#EAIY.~ޡCNp*J p8}8)p8zm!=8/NÏj+Sg,dɵ2w \6rʼn٘\JJm6l~Q6G^1d 1?ȥ8+_-veo~^]X|M$''ӺukڴiCBB͛7M6jՊcǎu?Z(Bxd]ёөGhs̚<碶̦k & btn9;Z &AQ:W/]'Րj{.GW>a߬:t On]zpZ$hs{g ?`o$K5kBAWݸ922,6]Fj7ybVTWvil+aMxUISNBXP=˻켶lقZSNu~Usl6_S |sW(>x6B͞:pfr_jS7.4mV>}yVeY !n8>ad_W~wA Xa;_vΥw'xw`4Nzzzs.l4k2$ t[ 55K. 2~K.Ɛ!CO.H;Zcs ϐkeO#9prޏ<7-7،6ӥ Ej}(dJ*,$gg"C/㥲Ch]N8="E Ғ"V0 ?O 6 {<]^uz_P\m۸q`̛7}MZZSLaѢE9rzU&{Э[7>|E~4ܢս\:r.u9` ֭c߾}W!//NJTX 늧NY'ԡY{_54oޑ1x?xetD nݺdffvZzNYfffRi8yf͚Epp04nܘ'NdBb)-cGp/KHzZ.-EP_AQ"BtYgX~ +7f{ j[%AAAtfdfd PhZ54~sL 4*IнpNİϲzNzOEF/`oGi6֮]^dqէzӽӇ'x?0 zMXX9999r'N0d$I={`6{*Cii)l޼(233/yhsݚtfo9_1F:[5J#,ȀG?'v'qߐl۳pJɄ_P0YX.aa׿А1E)3q`o 2AaC=´ ڈWk׮TTTpAV^MϞ=ݯѫ[c4iڴ6DDsX?o¾{h?JK@H8M;Y?WQf o*P5m®]0^>f OZ N&2߮oٲ5̼"!m8rx8u46oMfV)όsfB@Jaf73g|r;.]O>"چ8T7d{!11HLLy?Dbb"wl6ǿl2ecILL$)) q(//gܸqt:6l@bb"V#2ƍc1~xILLرc={D***?~<|^Dl6Ǐ'.. &dxlݻDf3ǏÃ_3gȨQsssIMMv}3f o>>>ծϱc03w\^~eT*ǏjVe̘1xx\[ӧoλ#i~zzo<<1ٽ=E|{$cb0LhUiSkq6Ⱥ 7)~<6g?HWӉeY, 8'>=zUB$g Wm 3QL/q&Z ~FaƇ?2`yZVwpG===)//宨o9| xrw\Ⱦ!28FqXpAJBQdGDUu$ J{,) T(p-F^3x[VE/ѩ̢}(h C+0@ |Fyq5q:u]$وiYMI[P቟'I ?ByƎK/;&B 2{/۷owWyRΝ;GBB6llDR%&L@߾}iٲ%oBFk} !( u^ljK @VwMAWQt0J׏Q{YPّhmhCU01[n.xՂ믿FѠ(Jn#n裏W_!Ij-[Mp:8z Z,ے`&?/{e_YRt N V dFhh$ٙ8]eˍAnիc-0ƉWoygN'+V`Μ9aSCX?6bH,&'Z4T8:5)CMTwt2iHNL4.1ccƌ!==Jz=ˡ}:wsw>^ШI@ʙ#ԫ߁];hҤ YYx{kUoʅҥK7tj^K<%'žuBбcGvYmngĉ!w!88Ztw[_T[kQ'RJص8d1UQ"X8'C^ƒѱQ'l !ZPRP]!i)NzO!ij#Gݶ"ŔO>cf-, /M&֭^3ⅧF3!S> @(qgbҫcK#!R \ۼԮy1!"{D;QL[^L~}@B!| "O/Zl)@-bn/d[^9tB!Ξ:.WU?egR'Ioog㣨8ɦW $tA:" ATPP6DҬX"EH!{}lI( Oٝ{Νߞ9˼ҿy}Th}T!a!=|~xQFč[s @\Ӵo @ '.EG}oxEYaYnxs ѵ+ȊLWB|bĒ%KĩS'BxuO?6=F !x %6E&6_%X-8y8vp;B!f}S,7n;tħ_~#o?Jޮ=z.:$ E"̞.z!ڶh"nB/L~@|hJH/X!m[y_~BC!DmE=˯e"Z4o./, v|-!6=z\/2rD"nC%1չWnLQPGS{玾 6o"n_c{p׈})DQs7 ]޺S4[[Do't0)s]&pMZ̓^^NbԈ(J_˿7c.N+ L{l/$$~ܲQ1vqOBEEH|yDe+lڴN:R3&3_-uu%  s4t&v$ *ZQqv뀐!|N&49/=5MZS;!ް~99x4F#jEV$N8Ox!Ozra6ŤY FNN.yyu놈a^̄IMM~lUѸwi5Rl$T~)')LaO ):~&tF#̚Ϯ=htqS7-ZFvidfq;H`PnɓIS̠ӣz"wB7ٗͭ͝G`]J!ͫQq_6vqr>bĥ$ɘM$ř%hnqq' H +5dnVqA>xlhBPqQDv!:s@K+ ;v7DnY5bV"WI>x}vjrM8Nw3ɬ]=n ?K_ZGffaDR}H֌5r?&.$xr IRj&!eAvO>N;C@ <m6ڶm̙3y'}~t:BBBW!!!t:"##eznF/߶#Qo7 ޳iӞe az\ߗT3y++P&f,Co?e8/ nO9~{@aA{Fl N&Mee} 1ؕ BcwRn-*Az.#h8n8>9r6Hf⣏iq[HI7';'ޘ1wΈq]$%%]sxt:rRhycw:@iV~ Bt\~G"##;<3<2q"_KN^pI y'[?L/U$aswνh\a*[2lB6A=֮[>%//YWzEK/dYU[oDU֘ܳ\߽mECVa?ORfE $x\\%Kl~&N4sdY.+~\:w[+,[Ν;ps 7 qjO/OƠqLJo[A-)- ## ͣԨCҸQ}5iEpBmC;7rhI6݊ɤШc7VYCک,9xnP-R) 79+Y$B* :Y#D+ԮA]~AꭤY\է(V0mH~ݾ0ĭo^St.jбvYY2HQ'&?^/<fi 0ʫTNdr:E%vTDfFv$*2"4Myy }L51Dg27 f.nը$I[ٵ7V%nBAA:"b9t'O2{ mF&:xbTe+/!wy;*!95`ֿfy<'F#{c60sm; ⍄x'=jPݨN.CAS'Jf΃jȊ(>ŸuyȒď?,{79>Xo-fhxj# s^K^ԪQ0?р/-`'oQHĝwdӠqszRxj˙,$CWY=3,==Sgb%233ENNHOO"33S抂|QP'e‚l) sZ"22REvVE"%%Q犌Tqĉeƍ/La4h'\ln.5?TWs Q&\hS4L<#ޘqú!owѵso1Dŷ %6P]6%e/V~ީWzs,cr%^ jB8\ ڹc'aM>\!zsY]i}͛$}9e!vO;QPpp;U/.F~DP9=WBQ\Z*z5!i^`):F 5B* ^y~}PXj" 'ɓ$$$xbnK%$pݾ:n7Xֳvl6[寝NY]h_€xwr,oӂ;vi/oQ_{'3/|xrm"i'6mXON]xyd&=_`ҏ5vI#Z_㏎㻕8-X {p/=}oGW3ƿtuPy?J=~[ES :4$CQWU`x˛nٲR;cnJJJJqcM{r 篿ZaǏƝ95Uƌ ;MdZΝ;9ydyn n?kÇٿYk,))5&%%#T9p3;q5uW_vU; $իW@rr2qqq`٨YXbb"D͚59ujբ,j׮d"**wĉǣiIIIgffv;~8FNAN$Mx^a(<n71_S9pb !+N}SF $IϏ JII .]vZkAlh4 55 Eq;}_khG'rYL'OEg4x ["ҏ>cOkʨøcE3woIL@YUa(9B~Cy׷~rW籲c6>{ڶHF!|l'aab7l+/=OxEL>I8u* MuLJr2BSrkgr|Mz~ٙ<>j5ΚC#I[o>Z!kK bѱܓMqèo G[Μ@z!T 3$r5TW߾ 70zA`d-jE X?¢/#3)ST9ݻ={6;w2w\n76l`ʚ5kx뭷B?h"n7˗/?`|g'7|xZ vZN'o67nr1og&==tf͚+={ll6g8֮]˂ Xj~!xb>-Z,ZիWi.ׯv`6oތdΜ9l۶ kƁc=z\fϞɓ'd֬YʬY)ժU`̙HH z:_Z& ݆Ҫz]Z^۝ i>`H>:Wo#,Qɣ-g6=Pl|71M"5WO, xBV_*6HD~9r$͛7nː$ EQtX,rssY|9/֭T6?֑#Yv# %&Ri鹜8v={2 !իW'//={*5jԠQFdggO6mZ~)6SZX&P PSGҾؽyaR4J5rC:I3G6x<6mTh4]w~̩L{nZ\׉瞛ur~m7C/Jӧ3vXzdB$n7Gaڵt֭<#UGPo,FHL0aDՉZh'X")s1%R`ij܂f>IƆ:=zGZ^Y/UM+V5>$ItW-b''OV+Q\;(ƌC/ odhvk'Z7!Xu*h7w}:uTk5 >_E])WZJezo߾}R/q!=Ni.Єle:E^/#!ykMxP5j*P;U`2ZX\v'9B$S=S^`WVfвSc ڷ;һ%`C/O2117ҤIZhAٳg;vnCMjjY($4Ľl}<;$8 :$I5N8]SH 2_Ap˰8= .GR.5f~0LF~2.֯]J0$&Ur*7,k0k~Yl0zh.zG"$iXV_wr7nCϚ5W_}BIUU[H%~X^QXع'e_AMtz<(h2rjh.:EC%: =v{{cAAA,[RtIxF̜b;`(+ӲeeW#m;?n:_,wetޝ9 ?c/,L. t ?dxN?8v8+Mu\sҕ V#7'zUԮGAAS|04mz=>/-f܄/fݔ2%Jj-[r뭕;iFڵkߧ)kZ믿7F}F[d?8uH'p ){j"@\lK?MZ4Gop]#;c"/=DvDEQ~=$IV횸]n#4+1;/+-7o#Ve|a/Z{[WSog&ՂXX֬ xZ^ ~<-xiasgM4~GΚ_{^z3ZD93#d!:Ÿ:/vLSȲdNy!elo^ӅGha-Qa%Up# ÅQM$*Kܼ8c%*xYÉP=DGGsqO=X!)))DDDTy{ΨG}%~KM㸺L>(5Mj3 DR6#ф4YAtH:BCCQ=.T!ԨKRf Ab4M?=n %ynw $ S#G% ^!<!""lw`خ W]v|dnKIVb'u7NB3Y9E@hɢ,P ^ϙ&^pYc;! W)6FP MFxx86nܘ$-[ƀhx2?8 @g*wC`n76sf#")z5iC=bFqw1Όm8{28 ?t1w#! 2<8h`ui!:Աobb:?y[[5\WD)$qR,!_aU $Ish4ҪU+_*v-#W,K G3o6sOU<\tQX\Ù3g2j͔rJ y*xΌmxת\Dؖ&wrmN>Iz.2&>4տY9u*z) nДrRtt4Lh_gLaƍtر A',&tŞYDF@tDF@1&9A0~Zǖ-U[|[ $tyǷaEPh'ף? /Ǿ#tЅ{=Jaa/\{4 E^>*csx vS0V+,/3 {G-okX]{0ij9 )* ЛlpxE -|Kr]wѮ=k~߭~]/!ltH0WFpU뮻 g Fj0ULyh‰hE<)pM9qY/h&gq83ojpǰGyAMK>tz7'0@&Mè)_/6dege'Lfu#t(Ki'b!2,Ի#wq{hӶ+uж]T4t;\~Oʕ+ׯBW.מȣVJSO(-(MׯǏǨ,Z:sT]H} D~I+lC^|sNq8۷/*4m{ Gض mƓYDtt zUGxZjʣ"j7#)d ஧f_=1]kp8ܸ=Fݷf4-[Uzpx9"e^XATQf#?4y{?̫ia:4M(z>X&qq5o2xKl$,Ĉw9HV B(Lը]EQH9A1Qd>?N8qA {7ƣAo8I-q:4U]2 %@D0'+_FCI;1變6oNУ۩]1m۶go~~^qSCh;`b,\{h r4`*+*.A*,uf} $IB% MQa{'';FMgd N{5fҨq'HPm;Wl[8Rػ[m ) %mBq]N>-b'rMZnI!445璖MQ{C6ik5.Eaʜe**"Bjt~WegqmEÖsӡ<2y][i G[U{ o@WUnYl:ر|L: KrmT݅)*w눌$;ePU\Iۥy|a= TX}Qs =oQ؆_VaGX"a(~KӼv*͚wtVMg@/UM㫜ԺoΌ=x Cc=|q5߅~ 4@ 7.Хٶ[ҋryrY\q t' F{ӈV0}tN:J-^~|}cr:es} (&6馛*J*lbƒk\Hr/46!!(Y~Z$AL|kn9VS&F<<Eh nb)&7NgEWx/7fdžXG.h#uG_(֋OY?LA7(Z^юݺ.PTͭW@@/[KA ;(]Fέ:ꨉ`]i3j<l6~n7~ #"h&TtRYxk,z!a :#)CEձ@LU"&MN &to'E لD%oM'{ Lz#9Ely37No@d̊,PU `hsM_29bVFe*WWV ^knVZ)<Ϲ=.[*ʬ[ya ;WX̍eWb8p6à4zMN ,+.֢Bҏ% 7Sk(X=z4M*rzR9 `I^\7ȞstAg_Km ~&~FÅM:wWnWFsr6ւ,'6wvj ciV)f+Y(]^r^MP0d`V423. |<$ !KH@ېdPJzm ^NgE\BGD%4˹2 cŦnFhP 6G1.moSTˁ_ӽgV͵c6r;* Bz3mz<~e1GNm}'}ARNQF2{>]XySkĉW>~V ĆSv~2}3‚bך;8PNT CNU8""'OWh'as f;PNց|%ƯU>]ᶾعj%9c?-Z {Fث5=:Sl83⊉ zg\[9G& $ т@wLoDH`4N%XON~YyɒF|:6;pOo+Ƭ6+m|ّ$d'ƲewFQ=a9Q@ Uf(Vifʧ{S̀ U@tk֬!77B(.,EQ [ΕtՂM&fdef80Cs]И9 8g+EnHҶ34DNy;9:ӺGٝ^Oj-Lè77hP',0a2RNUծC~N.< E'3fzXzjV (᧟pǰ>Pn]L&s{)l,Z1.[J=uۭtmӖ\|7.9pe-t5Ҷ+0+f%Y<:}JplօR?S iO .Sf[ 3+2=cXlj~Z 55A8jQa}ڶfa}qv67o&99*_U< -)&[zdZXa=M_Îy/&B*o]ie7Xфȧs˛&#+p[mY R{$ w*3tZa>0q|czADD/f߾}^,ӴiSnzATTTMJ !xww=hhKXp4> =zù .BDAppijn8NBBB(--LII s%I.3}F|UUiٸ 0`Laa!7]~[n8BBTKJJ vatk?ۿ6w844FaAϿ2VEpp0͚5cÆ 4 חO>}>|8t:, 999UP%p=3t3IKh/[ZY{|tT[Z>.G_*l Cn`X:˟ïceRlb ),& I|[פiGq!qk˅}*ѫ|:$xGT ag_;Ww_y5kvֹ?Sfǎ>Sv~m#0pMBGJ `)˹בqeVޡs1{{VX7m 9o]߃cHьV zԔWX%'B31c\obmB/gǎˍ7zSkZjEn%:}JAyg 4|+f⿅JQ˲.\.yyyVm۶47.X!CR)Hx.‚NWЏg۱uF\@(ei*"~Ϥ#G\ .ASpj>>Œ]p n%+7MFS˅Hn;,Qv?Н;wV)6\M ho8x<(B^^iӦMHHUx`ׇ(ēV_Yu{Tgu-gΩ: x! 銂~W¦ju*i h*8\[,$ȥ:H}MhMsbWݝR)l,oڙf6 [T8Ù4iZbĈztޝ~sfdY7ѣ|_J!ř(‚/`<~G$fl`{M~|W8ַK$'{Ap9tŁ ۷^Qp#TMӄ E`v92T PpHx<. G@q>o MMQUVÎ}v'-B&حEN:u̙33gv^x8NǙY M^ܙ[(K9IhZxd,lV+!Z.=wJKcFUcDW$3+aCp8Aωս{k׮<䓌[3;C-䷝ćc<]) g;S7y۰1GY+WҫW/~Gz-W nݺ̝;[n˗nȑ#,Z肯%#G˧0~^})ꄐ* B^|tCƵ$hlٷUj3 ^QV '?#` .EHv$IO(= c=?̘>?WkoJw>'V'%6B? nGy[o'OV87bdY&5 46QҢyg$_~%;wO?=>Z\\Lll,:t`ذa{QPPÇiР_OAq&L Oۘs FбgM2fqftj9m:̙3H :&?4?>o`a2y|L;Fl\MkO).)'f7BHt8??hJL'J]q6^II'm#LgƍcB,6m3 !駟|kٿ?z!-[d׮]u=;>[zW~u(lshT7"M>ëBk~ SO݇Gr2{ť]v^EҚ5:zӸi B/Bk֬Ye+uL9VZO?ͳ>СC2e ӧOg!߿?2p@ fO!TU0VgOdD07f:Ӵ][nħ/?{I6jӦMcQZZĉ1 _'t:4i:?p&M_RR8q"6I&SO=ٳ 0>))d&NHii)&M"44s2uT4iv'?*'Nb0w\7nۙ3g5j`$$$0|5kƒ%KxgDDD0g cΜ91oIZym\]P _/eyb U!vQnn0CFfX:i7=ǭݺ Ӝ$IShȑ5~39NZt,n4֝ېZoAA5@ 4MuSdx4Y'!i*CxWѹ%"Vy֮NP EQ2h$rz潇MHKMt#ieeqC϶о_5R#&n_:7yx<ϕtT~?5b \^Cl08TAQd_ΈQYj5aߒP#am+~SEh%xXx1>,%%%t!ߨҪe iԊM1@"O F Kg̈́[[/pٶ< F&T<IR@܏S5xpg';;/L=yg(~if[׬]ШagU¬,E.$6#GiUYjAoh:jӦ "MJlJY:,m!Ҧ1;VgԉnGDFB/ɸn4VOO>xCB#0&~ݺrUt9ˑ^Minшnh4}˳}5MCނ>#FrJ<(Os8N, NrY4.<X(+T" ŨGx:X 6͎9 :TI*8`۩^.f &&*j;_A͛7p)SȂ 0Ȳ$Iԯ_͛ӦM ZlI˖-^:v`A:u*{Xe/+re1\:4UƮ AҡxlN>:*2}:Ǐ]v$&&v>[ 򩧞pзo߫edž"4ZPCTtrx4?Uaw(vvqZmK=h6`0 6,@weO!EQ(`[nHĜ9s9r$}q#8 yiNaÆqqZɲd:& ~d椢E "YV31xJ  1`6b /DCR-$*'5WƖyfΜ;t%mWw?SeEǎϙwuJ0=+~pXר^!А YE/cЛe:c_Y=$~ռڼ{%E !&PmڴaҥdFeJJJ]6.q"(NQUQT&qE4<(Pt V4ʼnRTz.O +}:|RRRlL: SCBBe*Sm6T*eצv[E= Iξ@ө "Iw=nJS\=t[8T#/xݤ#5u/)g_G,SZZN#++9x 2` ""*E??? +v]vSQ% ^Nh^/Ȋҳۊ.tf ɨ :!AS?O>ÃZ{%DY}M[, 06mh4:Tf($!35 &R"B5BÂ:hx&H]Bdō& dIaqFjЖ:N# I| n\MxWطo3f[n_DUU w}wU@U/ % _`$X"0$:*ͅ@BeBB5ƂwMbc6| EyԩG/8qW5((ڵkӶm[5jԩSyW1c&5kpmQZw˹l޼EIrr2cƌa…|Hc/̫w`*_[(Y4t/ŧ]SL8R_ ÃNQPNEQvٶm;!ؾ 6lq磪*ڵ]v=vXV_G ? 4Mf͚(rVB9v?`,Y?OXX%)g M/CBg6r $d "Bs~ө9SP VeHEOh.$I9q,pj J$^>#n!%-AfA|l :jt6gʪ+VfѵkW>Sx x<\8^u7$e˖1p@"""4c^Ui`vCp *{q IIyonQ,0e'9{nAӜH葄 In$w ,dWEZR&~gs|q?ytڍ˗r$Ƒ!<-L6ӻ{ǧ>.?[nW^ۂx̙L<Ixꩧxβ!O9rdsԨQ$#|5ɽ+Vo(+eMlf IXxuaj:wٴv z3~АP,G D\&&&ArcJW3 /T8v}&2UU+-vXXYYYgG/3z̾][액_x6#<_}+{]=SK^Wˆ;Бcf^Yu.~3j=Nt*^ԶaēϾ*^}ѾypJ*!~\*BC})^}qnz4QKZfbwŽ: @zs(QӷO}%1pqja1O K#Gy]wxT?lM6Bґ"(b;VlQQ+ bCޥ$$7e۽w?6Y? yx޽wfwΜ9{B8;R(ĥ%ax@i>Cwɲrr~ZOڬERG~{!r2ďS^*/k*f; w>/+CX餞U+,_yu? +:$Z/w 躠KX:vFIiwMG؛j̕qz#IL~qrݷPYyݹq|6]la П]s32WjO$^܃UŴjژs/؟%Mq$'G5۸<,_:ݛJܿr8>-qK^$I&5@$x?è @NF&H?oX#wCu$:͢/'Y{"Uy߭xHĪ+$ק#I2{w♗D$maksa ~fRGy`}~9-Bb)IgT$I܉$I\ү-?.^/䞻A$ L{C$IW>J>&OzP.߈$I<9n|u>h6A.\q%qU!q(5IrЊy/9h'!wtpGJS.BCw?tҿE#Dd[ibl~pV^iPjdsK99'5rZ̢ xؚAU]Pc>#"'7b#*:cᓋ492Tã /{\vUA:ɂ,:4b$`= &u%W=UNiy)f5;"ךd5 Ֆah9h [[txpgcHnjr (.xW]5ݺa6|yhÐ詸>g{aoVeJsaY{+6v 2hxAd {4!9oP& CCgbR̠NBb]x UQ ,<;0‹?zʝNC<Yp{ TIb6v3nNxX9/Yf=ztn `(BBVBz<jbUe016Cg0|̥/$oi^kO$YR/`# wUof> WA6IkN87Km<-k)*6ciO/Hb ]HD,dƫ /lAݦH( C`6[hѢ1wA}pX{EG 2AAyE9yLso_$fTatdb)*j &<4Ð% DqY)Cη^fŝ0G8A>xehCkK5rUUv]Q @JOEQ$fe2׋> p 9g7o̤G˅AQ%vnH>CQLYΠsgr;ڥ #Io{B^ DpP0ފr@A[7RSH+yDFCb.B>8ׇI$7jLaa!b' %_X~MlVZðG6e) ^tݴxu:6ew?22%g0Ț~deeѥKcVZE6m䆧"χFe\.V5:!!!WykАYe(y Dpk?aXÙj@oMJ7Ҳe3Ófժ՘dr^ 6n\Eaa!%%l gk:t>b(.)u8fGPAii>EŔiӲŕ>nJ-pCYr@ǣpS~'HAUT^.ZC]xa+j Xvt@T0I2T $:le/Ϡ],NJpDYG(,ټy1'NN:ٳ*,YVz(|0 \.6zロ8:u*?<;wwߥUV2Yȱ=cznbI..-rFS$5\Ŝ9sݻ'VE%2ԊJ%eح&3CJ5CY$88 b&>!IqUVѺMk*+* FQ PTT%<6H]EZALĸ#66UU}={p7b2CyY9uc+dz9'gW<^4Tń0b7e,& . Q"j +qDб҇5GTePǃdڻ|pϝ\ ^-k׮EAzॗ^[oe}B0x`,YR=111mV$ә:uj+22EQXx1ƍ#77/[`ppn[sޔT vvyOb0 xɧٹc;d̘nzzߕ6oٌݬ`#IЪU+MPP?q8;`|=]W$C,AaA1mwjQ/>>O1iPRRB\l^Ç #88DJ*(On%~rNg^rӧϹp6@A$IT<=f*4ҍQ݂ V`W1Wɵ4HLF?#f""DR1y2QqVҲ|8~K9ݼٟQ{̙4k֌{RPP@YYsG0 491`$t/[4DRSSyt؉R t-$ d!C LэfS3J,&""cqجs$'jŔ?DpMҤi2 |If4,f3N2BB0I23p@6o=~ITx(aJnn>J d>.]B||<UœPV*4x|n rيWi{ bАQgdlRn:23ի׹p1 Uk71p=. &7;ã+s*1\>r>O+?gVHB/̴͒^džl4W/Q2iBI:f>W{04YZFhhJ*++EM04QQM*#^_Xb&,,Rl6;,,w@z:bza 1A I0rKs7{8c~A%i&&xWLvE BUDG4kއ0~0ޝ=kVs:\L#`EP̊ atMB r c=v76Z[jrFIi!& 3"4 ѳO oCv~Oa՚+\Ŷm[hݺ5&s(&E~zT;<+_6mۢsoN9/C}:<^ax}BG1p/ ZE003"!t0á`FVrLλZ=z[7o&'3oSϿ{;۶nf5K_Elܺv%%%4lԐE?矧W^z vӮm;~\-jU++G۞Arڪ3u*Mr3v,fHQמ΍Ȕgjsߢ.\# Nx&4mT󐺿R DEĠ$aV&ӣw_~rywI[ M!+pqאS@:x="5h/IP;nxM\sdBB1&r ߡOߓÇigYV\I^}%  Kntb6SQb޵xŬDBpRIkN/>FVfβƽL+l/w:Qe2Q9D9XihdY>}jY_}zqEC@ptBIHj@1I(S0g0i$RU%0ۿ9[Iqn:1O'.6܀Ѽ஻"!1ANFF6vM %7/nF~‹MMA~1\2Bʜ%8K؃H¿ٹBURRp -A"MlXw>ʶ[>`Lf$@<搞 q[`|(eYA%dEF@x3Z[e.8ظfh9ǽM{_[@a401|u%ÆW 3_]ͷ h)ݬ5#ͬ ecyy˧'/ƻu6***X].*+0  Pդ2c2P՟(N:DGGjA4TՌFVd,p8X͔"!Q~23ұZ~MFU '$+S,k$''rNIeee|DYn-.WU4taT/*au<{R"J dEGX1gg0p_NeeMn\iD7lrLȪ~z25ڵiTv'z#i,\㮽gbܸq̘<{fdV_I8*zCށZc4M^BB0 ]300t!tMn]EMah0BQBԪ"P?]zjp8'B#E fl UU1I_hZ_uwN'SuV!wr0}N}ƒB!n}E!CBq#c+tkBѽׅY@vs-?_uڵkuğ%K0`z^IHH8v귽WJ5E rZjEDDNm۶%}1ɐu u4Ulݜ׮Q 0;[nCvdfT/ݏ,rbl>Oe, J~?d0Ț5W5.SEQ0LzRM&B^/dffRRRBEEE 0[o}T}>>,3f̠Aر#:u"22oXZǴxj|N]:2{RTghynWٟ]Nt VlfHiGY6.^x?e+9TAIB/<')6ϗK }X3QZIˋ:sc61}:w_yqcph&67-.{p d>Ve8SCii|#R [o%   'Z]wS£ ۯVZ !Bvy]Q]oF1obռ# \w׋Ҍ}bG+-[k <+.`DŞ.$ޞ=_|"8pϡoU!%#=$N^si:q7!׻x^׊9}>cd ;`;'Hddd`w]|Dށ\~9 r%#i^$a p8s{ԩSN;^$>CD֭Y~=EEE)Sf6m([t)k֬aԩL֮]ː!CeYYYl۶ (۹s'ف={dݺuy֬YÚ5ke7of͚5+<֭[Gǎeڵ+Y$o^Fb͚5dffx ֬Y?(۳gk֬ᮻ ae)))>lْSXX({Yf [l -[5kkrssYv-}=a, ۶m KYf Yff@Yjj*k֬oi&bbbe{͚5;flL45kְsc4mڴ@YFFk׮eРA֭[$cǎZ֭֭#+++P6yd֬YúuӧO? p~4L^ڵk9|0$Q\\bEFd>ŢW aoD>+yyb:j,NROhx<***())FPP8l6fX 4-Ӊ餪 I "))P|>C}уol&i9F%8O~-7^̷c} W_9YW\1ppJ1!uZj%e4 U`ɒjf0]glV7k][I_AՊ"Il۱8tɇP:5Ɍy4$jk˗/'??ŋ0 |躎,ˁ.VMW f3SYYIbb"?7dŊDqѐGѸ]$¾L=zwdTtkɊ]|tnߒ9>弞Qu F]0qf9WIrr2g޽4mzlH6%EYCEF%.(/&?'}IۗBan>[:mGVѭ;|!C7? t/0ŏ_v)V{h{Í߱f$ Sʔgէg!qһwo3Q$ĺId&$4DQI& ($2|F 9FRz8Dx(|ݢRQYE~~>5‰%KoЬYs3윜x7o~k7f^~Yx ^HaAs2eF9"OlUwŞ-Ojff! yqk4=0<h'%Wn{gmf  :nD& a֋opɄXh o?gOcm#C)TJU3rVzP?Gl"4-UUjYv#*220שS7|{ W.,,\=Bj>l>H&ŌUp0q6Ȗ泏ߓ\=z(E2;ʋB?֫H$4M d8e9VFZwv%!D>Giqgʲ>/qd2h"Nut.{Mtm'lɴ<0Zuy}'zf'ӏɶ5Ҹqcصk-[dB`{CÉr1|"|?B׫+33``? רpBmA|{EtiڔvC.[Ӗ'U0h̓$1y< YAr(*ؼ̼fҰr/lS;vٙ s?nD˗Ҿ\|2^64y֟Usqw2cƌگ͛7ӳg92Ydd?atGjVˇhtGPjx5 DG<3Jj^$'Sǚr<୹G~<[W;Ɍmug###SYYIUU^Mp:Nh- AAAMxx8vh۶m7o&77,ӿpW">luC'}C~;)PqUb3&:#"񜒎. )} u"8mSnzr&>41(q-~x<\.͚4G&tUtnڈ`Jۿ= xsviNvؔZF|\8ii{5f1z[W-}>ߴט2vYЦQl9!!f|w\ztrkm8aZ$o/zNJhh(SN%<j>6ȫ(Vϣg>.Ȥ ,?ϣa b2*+ Koܸq~ڣOӡqXE%3yjVoLEaRLshf3fޛ.ÆCuxb9S}/~ ?Ŝ2rѾsE:]ºM<ޛ:  A$rylݾ,`j> 4 NC~%~onkΆ|>-[vJ@Hę$yp4 M- III : W\qE-h)hժY0絧i^W%}2#.aW#5nݺܹVZ>ǔU5r&$I/P+u/W%s}Fx ұ\܏[r0$ $H3SL4Su'S֩U^~*×_~èQTQZj7c.*ʫ غ0}Dkƒ *n]9&&ٳgΝK~~>۷N:DFFnxFx^*++)((tVZĉvrr2?ѣGs!.]Jyy9cƌ!99 ,x<rssYt)YYY4mڔMCgY|9m۶%8xퟍ&PiUȲC'p.XAlL8m'P&VEUQCL&1TjFe$IF5 TUFL&H UEQdIF5XSRUdc*q9=DHR{|6&GQ[Ioqqgw7|X &MZ2td p/:W#ė@7_?(TP(@7q}QTTAnn!qq޽{2{lRSSuVzرcYf Æ O>r( nֵ< <6mL6?u0bg_شaa$RO*HB ߿ѿXUkdžЄg 's] 3W^9GWIaȊW_Oir5t:ՃÈoGӹ~8.-\=}}ȷo~\xiw<//n|y &K~~>wy'˖-f&''\4M#<c|pٲ {XPPNuZJU?3Yiݺ5;wCq+cӶM+*+oMxiޱ۷o彐B^^1.f;v{<߿?]v%,,={디0sL"m@&0ѼU#ڴlo _~ -bA~h,wV ) ?6@IKJѧ'Y1!yePWOѪM[֭]LpP>aL&ʫ*Pa( OUVՅRY1tz/fc@ @Q IR qXMŋOct:O~5$\˧ Ћ) 2)-}n`3g|ǞbCN'x;JpP@r]T RA"&ր>p!Nl~p8<-LuFIaaa|asDwRmEi!#xʋ'ط?7$$Z[~}ڵkǪUhРA}߭%KXl*+$Cbzov˞]{NHCIG\$ә_N$NVF&eǧ $UD$6[Ea^$IAAu0 tÇ_[]V3nFVu))@tl I(0P$~BTۓ5Ϋg t7j,˼<쬢S,ڙǻoɜO`Oxv]UAXF^zwM35ܜdO7`8fթkL+Gg"8ZK;+|b]%~o" Ґ۟G4h1B h R&&&yVlV0xB11ص5JYz3f{ ˩t 7"5=dǐu@$+~RC@QM" dIA7t+0xF XCH#^vkEƍ(/BF1tIA""#(*O|,zLj=%$&&&,uRrepiЭ˯û7p{l5[^٤(jD+# d21k,7naԩSxvdCFF&iiil687̔)S 6o\$== 6wʍ!A6]),͡{n8p 6 `2bhнM_Vn^n*/ZfȺCI5eTth̎-)@HR`Y$`\3v6GUZ TE$* @ЄNj0t*6ń˥"YQ1>u0+qN(bAH|UHY4҅k,]M.l0SL95!#F8-H~:w|{ѣz-[P^|%~|:NMvNNU֬YCbb"} oaÆtI$&&qF-ZD=ZǸ5nܘkϻ8#%9*i',A*[#Lv1cx;`ڬ~s<6JbCv`-`766nן^U5s>;]S믿N-N0iҤ75dV4-@s0 6nȭJAA^zT(cgG_0bh[@GQ,+UcV!/B7Ѵ} ~7W\BqNUyqiC$/_Nݺuy`ңD*>E[1z VfZם"{%/_Nttt`k='==ןU2aMTUg`ҤW1۬xVJIHKM!%% s#,NU[.>ߩ 5j]v-"##㌵SOBB| >,'yp#[J\\cʗ,E)=p!!XƩ[ `v1a^Y3^X@מ|/z2孯f$YYj)'ʲ̊+`С\s_*--e 0nBlA!΢B2֭[D;d*=ǎᨨ(Z8M4!!!۷v*`ҤWe Ggbƅek]Qxq hӏ;"Vx"|tlJyaDea/HxɟtJ!CPYYyZs:۸\.-[Fߚ,:uSNQ^=f͚_Oy'[F\\qL2#j\uC1h  mdеE>ݨӁ8ر#_)f„ `ҥr7iĞؗ,ӫ`YAn(->6]l>&8(33W_}F66Sl'|p'>]%*wd jFQL!x<0bGXX0^Ã膎QuO?MӦM>inժBbc9 M7ΦÇaML0N(df"==LnOhhhuιO^+.8+4WpENv:aN'..IIIDEEkѽ{^lSx ԝ8a6;Or!/gɳNϡ/5k`6CuH;A}>5W%44H$I"''͛73|pϔW_b"kذ19nFzwq }hP45PlkG!hLxh)s~bNTuY?С}S|i?q-U;ocU~!XM]Eh;b()uqcAth=vMB h0XQdP`EQk !#aw{U#[&i0k>y[#N D6ɘ (>B_JeJ@Q([M(--&7'LdTE 5ԓ2 d0W;wk>O5@T" àYfp $4Y>X‚yi<23݆]Gi~.{^ash իP? ??C箫ҋӲ{ bo?-޿ d콯y6X~Q^^N6m 9 8+gGC(7ҷLp{Z fdb0#!?ǠN="2 Ib\EFH`ّXUZT !=Y`lz dкL7';ZIMv|AaN2ia!nˆMP%ߟ^? E9Da::bT͋?wάz7¶Ѹ^$V/_e~÷}(S+T1zh.wB'y^"ːj v;o8BF^2 C@钠hͫ"K/T+]UUƌCaa!}%nçAvyiG.b1χ|gCXx\O^/w9b1dވ?SPPpYal$ŏi5tlͺ໷1H]ջ{ylЀ6dwވ$ɼ0-22ҹ6:ݵVCvgBQ b;t#`Rؼik7FUvW0YrTNvӸdGӧNg*xA0[}@FD't:7wӠnBNXp!K.(j;pޟg3o܍}a2C/]#0q4C.rFtY穧FVDRn२O'. [7 2ͻ cf3.힌i[cV|&]is\>!7 ^4izv67 YqI/~&ϴ\dn$d=ZԩÕW^ɇ~xkɉ/0A|Y`1[}? C`Y2 nݚ IP^^a(Lby4iVFfE㣴<M+R3!2^QI~joSlذIQ6UQjctAEUjC7\DGQVV!b1W$JJ)]^C٬T<<^ ɯ8h>C&b !STTDW?Hxn$I0$ɄYAI<W2wܿd/&xzeYg pFtmIe`Sb<U^M~~>;wdذaK3?$8ErFԲ2&+E|>CϞ=W^a'۶]3=oΝxS|ӼbzMJX>?oڐ$aԛwYZ7hЀz{vqMK+*Bx! !TYFӵKBB7< 1*V~pF2$ka+/v\`GTTad*/<˵5Q\RR=ZBHʑٮk&tMTY+4$Wa&i00IB7լ(NԱ$`G^EX8tj1b!!!!081DaʙtksZA޽)/Gr']υSIHoKJeBvA'PU3]v3`yV+!ߝFIBBBXre-~?Pi0K;aֿGɨN:̞= .8ⵒ¾}hҤ))dڌXT+.|åc.}@V!2231uvTrF@AAH`ڷo/"*f !%f,B|$s0[G2%5كlr88NQm>'嫯:kB7nGe)Y⤈Ϫm_"}E?Y|2F1|u?~*o=ϱ\ AH&\qPU 6;TUfAiX,- NX=s/ڛ8E3(*-чj匾ʓoLL ^SNv[/!+wuh8w !{Æ OH`3 [C SXbY`- ZS=O“0Oρ9'I2ίIa1~!' -EcLF|I*#I񤦕Ҿ}lVr399?̘fΜIOnW0m4IڬEV KYw Z6yD্<#'a2S $dgk,^AdAYAP#|.(. 6h W|x=偧i6#h?<>2V=ph|nx_})#ʪq̹}"j'{=YFSTwNw#Ebrm:,)t֭Vٺuiq5O޳ 0lذ?d'jf~v tV/=> 1M,LY)+shc&3|/gܸthcyd 7f֊=7c I`[E|<}OLH-f=.dspoRO#…,G2pM&vd95 2},w t I2FIϷUKE,h l6Hh swFm<䈓W5ڷ{.tab9<>G ?(U'o4i҄DvY"i ̒?PB&$$  CȲ7<ş$jl$+,פqDK@H)呪i$TBn{?TīzJAbbsiLΊ[UtosiipYZ9TYbj4 |K,} [ VL7Rj o&F`'1p`ۀA݉O;k߸_ȂW_b]w (q LnCX V}5+]d4nEE]tDEYx0%),=Lsp-MݵG>wB,$O#؎T8^|R9d>z3mڴ=- Oey kիǯzg!ZUHʃ=.΃EHGOYFdH~>EWP-~Tljbɟ::n`13d`$5f>H5MBPYDfƍ-7P<|7FڔR*4l '(C{;{;d^%3*FMC!JGGϔ 22dV+g2D|ڙ+]tl~6+OF}Z8?ȑWwqiXbpd ?t3[2_E(Ip:{s~QxOɲDDh30V}";vm]t-G{H j;vlUUUԭ[VفXnt^]/ Bk O bXoKE֐%!H5 GuV$M3Hs#a`Q iЫ# 0BG,!l%!3't=ٲ=D檻X)\bYq) gj8훘62E/7"BJ4jo!lt/.Eѽ0 eذa'45L>^ 'žӳF _U|%>* <8"Py!^fGן& ^K5TG.}%CVkΧgvX=xB|S^gkB'!1~7P`Jr;).˭Ž*mO;tAj&FNRx~YZZzLDM9p4*M^%%Py]U,x>fo5$4CC&n^/aa躎d0 ***0 dBUMmV,&3sf/ m^&MrBCC0 2:Cm??jC ! 3>$&o EN87ou]_xU-"ٟ3x2id擅lafg`J7xe^z3[V W3%H~G7;9f}0k!>y)Lㆋ'0 l 3}Sv`EV ,wxg6>&=tmw9q5¯A=Ĩt!vFTx"hWonm.& ]kr'n#n&d(A}z{}ʠ Pn]f̘#eͽOZ!8ǁ$GE4D":r"ð98xuESDRF5 aۃAQTdYӐ% ل룪 %nA5d2!K2r=JGz@VMSy\(BgʕI.[IJJ:Lÿo;6lk&W~JWc䴧 :,9? qh 3+RMVt!)-WG|:yGq; cյ( CCC9s&SN%""?4^WSuH2B0iJQrrvF"}F-w0IQM[*(+e|;w1AWVe]͋QVѼ.*Kv%<>5nāL!eo Un}v*$I2)ly5vʕ 6vON _2A()@$IK..|N Ɋ&,K(ŽM wCed$Px!LBD'"!HM$,,Ch8 "Kw,1gCZl35tMtŧy(-/`@eDƱ+m5vHld">KCݐJ󸚭Osg\>JG5d9pxVK:#JQYqO )&+.OYY$I|bzJIyީ-^>7Nwgӌ-g*q&k94Q\==≬GԺQ K0N'!ΐbbb"ӧOKRRRؾ}2x=(m1 <" ~"W5PA6x}>̪F`bF|膁d( :(J{T n004 լb:Ɋe'šz' z̘1/ԵkמW$ITUUyf%<>%^70`:[d&=gUn'Y ѨniCTx]*@Ds`VݹҊ<]޴lx>!堟 I, ^\6GU];wᎸ\y]D=;>ޛEҪABdHr Μ _hjUWB[J[_q?IeOY]eee ϫv\ :mC[j?gn/o4$I|̘1㌚Τ]]N=V5[ֺs@d-J2-<@~q^cѽEG5aDBx}.Rm@qRG봦ab[0Cda5{K}Npm>ϭdB3;?XˉPd2+tNه6&]tK "\n5i.:Śٔ#6jAU̔U̪9?NàOYE(&j0P<1ea-HRtOd}\-ې۩rQ+8vt,ԫWVف 6,zV4Mcٲeǐ?{J:-@1nhdbd{hָ5lβt@|TC:H3748i{OPXrOWڔR6 ʼp?7`]r\:ɿ[ ʔ tCU *uꆪ"q";:䏩! bp.bC0N0nB%-40Aٟ[T9qq`7|p8@FF֫WiӦʾrdY,{˞e2xWN;|E$&&WӽeOl[}2 Rhؑ"(  7+ޤ:i>5"c{<&'⥗^BADDkp8GUU|>J|>;B:uTޥ 64S3cHC$i?N:Y{RSSOɬ!I?C We?mx9%AyEU1cRU`, dYaw/cus(*`bW C@͢Kc%@3h_/ </ށh?LjZ5\EΜ3w3e=;\JYGCtj>r?Ftt4w}7< d Z؟bPbD5 8 Lv 2^ dLb2d bJd( (̇HF~,̝;tƎO<Ç1-q'jrZv~|qrgS pm66lXijsNZhfaÆ̛7£ !n^m&v銦il ғ/Iܪbޚ"r؞rRm؄O'+&R緌Ln޼~rΡI$xU9b C'0DI|dCÓ[(N6ġTUi+i' IN$6HDLx1Ռ`!vzA ;+yoLE6g{=msd\FFD0x@Θ1c(**Be.]Hac\, ΤIr X|-*+b,Ux<nn'%% HF.]ұ[5Ν zvw0_|ݺdKy{%^xEVoX#&O=DpD$n:zxOR:m_RvQ 醎QdБetF ,f OQ3->x(B1GȌBiMk]רWVKeu14t'5k >z|hw^ƒ  H~ jwqDy=h׮#Gl6#}!hݱ; 2x+l߾O>iӦz4c4ڙ35%tgC17QUՆUEHh8&=wL`Ϯ_ջwf,Z=2/ Ped_eTjfP755W_}KqmYv0jơ=x%W=VEnQ{-,0\О7lC%..͛a*++^zK=֮%((Ν;oJJ?[ UVa"&?Tǟa|>w.̛)adg3d<~zvڅ`݁-[uVl6Z}x^6mĎ;Σu֔qFrrrhѢ6m"%%zArr2yyy\|"""8IHH +++WRPP@rr2=z ""V[4iB׮] !%%SRRBV8 b˖-ٳ|^}ՀZk׮UVJ}p 7,+ 3OR𤇘f9!4OCVտzWj={d$''c =jh5QK7aq;9ApyOn oU-fΌIxH y&ke)*;Bz4ӣG>䓿b&MHHH`'vyN㭙Ъ]{o2pD_f~C]dإ"i ի;v?AaG&|t-? rg(JLxR Kd٦9o:U.K_ǚb:(83+Jd],k-/Y~_ '3GeL&A`TJpP]0NxMyi !Q@A}$w}7cǎ/C(Bf/+:u*SNeرe:aΏOb6,`I;dHCضit}ܢ4NUҥ ;gZqF8[ڵkW\q]t h5O?I&q53q3bBܖNkX~G=vӣ%A,pn50NTm_pgLf뾟iq+BVVA朜QFȺ7hЀKc.\Ȗ-[1c~;O?4M7 /pJQfhҤ .'|Çc/j$!=nyԭ?`+Ǥoԉ5ۿbzútx}?1 Z6AA!c`tTŌlOϑFQ~!{@2$^@0t00n JK)r& lBPT0J j@ K=,CxddҤaS4E||TuL!!I! l>}2& .wthհ|rr 8[\a0Qwaر<!:u*|~!4B:bxݱy^eʫ VȆԋoy_Mӈ/?>gWj~0$! $! ఫC󃠪RYᦨ0=_CVC+*06d!Ӣ0  º8-(@A&L O~~΄?{.WC||I7 +(L/F^lEQM:Y#.zIA5)+rsYžԉ0t"Be+hӨ7Ee4K֘~7&66z[Q܅yQmv,NrU[ I#&&Yu XL ܟe+Vy8G gN\CXH(}&2&d {o}.j!p\hz9 uZPZZͪ +χ*@5yN|k4I믿~LJ%33-[F# 04C%i0G"W@ҤeGd*:uI١]Tx u?'oe~ͳ8g3MweO?ߴ`1[-SLaʔ)L>3fPXX<ò ^, ֭W^6:..)S0w\γ> t\ǙmȒ̓|FYկDLEU˯cןPR^K& !@Q@Sd!AݟlOez棏#?ڱ'-NBA&~MCѱhܕnc),#16N;{wCˎD[i§+} WaX,RSSeOǞ^{<c[^!pCVNqW+0vXBI$\~Z׏x̙wMƍygҥK-$)`⡇e˖,Xo +zZDѵ2m|Wc:$qheIM9ah|QAfpm)*02B:T49?~UQs.(,=Tk8'&&&k~ h…f#$(aEf>?CA^!cVMHHFa1Uw܂Sn}oӌ++>l< #3#Ea5 $t`ێWc^B"BC,q Eq<7N5L_ye:k7N$!ӬܶΝK6mhܸ1aPXXȤI駟HLLUVTUUڵkJT}>_x Baa!7|s[o0ի1a@wLcXocu‡s?n~U:THAAn^^oB>tC'&*HpWUBg =)/` W}vFr>nL%YT G݊$&ֿ!`ҥ¿E?|РA"܎S_z\z饁ƍ㪫b„ |lڴ7x-yĈݻ{dɒ9ʲLvN]hɩsI8oIY%4unbXd 瑧QݨrK3GG Bg 1j7л$։!kzH8+J)̚\ŀWyKiެ^#)qm  B6k؃#?gc:E+m:gFe^{yDRZJppp,QpNҰaCzݻiHȦ 6\.63O=|˺u3np+|4]EEҔ_HaA! 3]dʓӤEaÂi{hz3SrbxЌRT%?y}O?f3cƌD>)UUkF]xN]ʺuhժ9୑z.;r~ԍ< { ٓ;pٕPXMv6l fϾ|b{qF_> +a 0jM|\+/ǟVc&;+c1ttԎQ/ogْEDG$0zHR}Cŋ@Q=*RKcΝgY5^rHFii)vS))) PK~$''gϞl6}wԫ$4FMdy.-VmD߾=/h$ s غc Om3\8+ [CIĆקnEp4nDnA!p.>ͬy Ӗ1Ǚ74D,aʳs^GFNbj{]C^8`)I$)p8u4ԄЪ892L>k>KZym:3蚺uR~}mۆ:::Ѐ&xlϟ_K);wYwy*'--ZB!_9ظqx ӱ '`zA6+WMfL6fwqXO^L|A\#.$69g>M{ )sFnaV.=ޱE!8FA~1·-aMvF]y=&Bv##=ꆨ ;ktB8 e-"^J>T"+TXE‭bT- PTy @d8ϴ$G[|'Oδ߽߽]ZE *aѺ ذCi/mڴ!qW.+W`ժU}:[lIO\p3fH0 ME]}f-4|^8t^%K3:u*;v '' ;Td-\Ϟ=;zqmܸ3f8YfzjDwyѣGL&ݻ7<@sݿ\/[ 0fܸq-… y[of޽n:-~i#G׿u>͝;7ap|֭[wݢO3gdڵا={C}4 7 Ț5g$܅t܎i*mT9.8"r%#C^;~9Jb{{%O8ǵM?i8ec;.{눘&3۹TպZYdPt0i!ǣѯo"8~y̠S Nnsk_~Gu+G͎($F=NTu^6\(L$١\,¡cI&c8MVD([Αrȥ(Pd"pY"EvTGqm6sPgٵOgc0t&*.e'1rÍ$ 3t>lzw ۵%G'ddq18$ɤcM Юm[F6ޙ;lYqK+y莩<3)r .:?Ί6f%Nj]z=DqzQو k@t(#a%,O6H$-5th׎J~?km@qQ]&4.8HsN bb`%0| V<"(ūcYh.(> k8fwbp2 Y>T4\ӝd$֛oo`a ~{^8\^m*,o%K󢸠.* |jsa?9g5[FЯ)b'yfuT5tkdEXS1p/~1V20MTUM˲{4-]- Ĉ6F*#jTT&udggi0\@,DMکr9qS1YG#LS\|+'F=ۋ}'ٳ>}zftgF>}if-gw}wg;d> 9\UFgO #ux~L4m](C#EL //n8(:(i "*)!ZA!^Q@TUQ\1qT[ :&b6*?uxíplG%OF^e9v$gnξR$Zu`&rs[B̟7NUc=C9:7o0vp}Av1{ ;\R'{E_@;z5N?ƭʔ)S2;+a۶mf7ÉR}>cǎgŶL\l_5N(;*Y9($M8و((혨J!"MU S0k-Xpu .^DGOAm[SEQU4EvFR .gu]TMmJWpEaÆi ضmiһwmŵEcڵ~JJJػw/ws̡h4J0ޏǸ&qd+ GZFnn.rq`>TEDZPux(X0?W_J_}9LrH=8(iCǶPupy,].YYTGj((hMv؎M^n{.֮[Y?$L<;289lm&Lku֔RQQ >|8ov clFU1o;w$ONNZbРAqFҤ8N폅뺨ȑ#;D"ĉoW\A^NƏp:A\ofܠ}D«DϣFljx-j++UxmzlU! YY1 j|_U@AR׃miex3i*VDTW5PY}"PUq}7C?4O7oK/ħ~aٓ={`&?<o~صkW:7jSR2{޽;avmуO?P(D$aʔ)y$I*۷o7?& O" L2~xv횹4n|QRKnBD*+PIԩ8 y)--Fq D4)My >*DGp, FNXIUAQUtc96*n#q UQj9㒗 ԩ?D~-(9ZN\& ~Xp]=z "/m5i;wdՌ=̙3yꩧ8p 7o& CÎd!cmGII ^z)5{EQUUŬYڵ+6l`v:t.}] J ˲ ƓqI_+?{E=h4Lt' NRY_Ũ%8&x R׀-ItWK341M[  uL!?X P5-芋zH*IDV,3ö`Y)@C]uH%Hx3xcͯӯT;vH^^EEE8pP(uLNj%~z?8p!//|/_c=Q| }xuZaq6m Er~ĉ>ޞV?&fM*ftP|<-aˍX1t˲<ضlqpm-;`7:7|dPl>H&R=uo?ɢ'770 3zhD׻rJ8`˲|ر%|,)eYϏnbg\ ͳ tݠh9P*jn@aI$UKZ3G)_i5(i'>%ǣ4uMOY"`hH"(ƉPxu1@K|و+ߑ! ~ěL&S8Ce߾}DQyzMyy9cҤIswM5 qHUUɓ'Ϧ-憆' \ѐ8m{D^4‡V⵼4**^"ahtjӁKk@Qnz(*mƎ%EgEqSk".ข(*fc' ~h& "躎iWC$Irh:͑әn҆r {/xkelm1;{.{n63{c G 7Ȟc\MUS ض*8 GJѳ 8:`Mn]CU41-ݣi 4R=- 䒈RtzG:w>օ_jjx3>^/4t76[n۶f+xMLUUG}QFH$ڵӧc~@UU(oƍ#M-:(3&HSND"NAakbqji:S58ZJvl Zm.$MMw,UV+<: P| OP(1tUCBU1 PdO,EG8槬;w +9YG5CD"L>^x!-^Cmm|T,s%PPPO0lhvS`Mc߾}{qz)--e߾}0X,F"ѭ[7~iW\#҅<3h EjqMTF`\4c,-UbrtrJ +m1F􀃪x=U');H;?nbF"ҁ}Y=0=4T\J롩M ~#SRRBqq1?.]piO[!6T5Ӻ:JKKٽ{7֭3<˝wޙ'卪0k֬xsC<gҥEEE+ 8͛F4ݯum;0<R8ZF?1of>W|TEm?#xr-F ׋LE4Tn:rhEШBۚHQeH4\q^,DQTFm,si3&ģ$gw/.EUTCsd_<;g&NO۶m9t˖-;RXXH~~>B! @Ӵt8ضMCCTWWs8@YYaPXX8\s5<#L6-3OB5KrףzFA^^3gr}ˑ#Gud24FTU0tqsaeaȐ!̙30dzgsVs3w%sNU7PC _Cٖ(gmu$ %!r(B,U (x5lHbME: +˲\T #nbAWu\CA7tTMDZ]3ݚ#iAƍcio^x!k֬Ix=䷉Zf:I =^eDDŶ(K5.7%\4V(^̷0j ]5Q$,~}x$xs%ah9蚊$ 4MGl7% I*%I4o%U\nQ4Ug#@ @5,˥mo= 64m򩨪m PWWKNطΠ~YhA"mb& fXS{1<_S<38WUU ªU63gÇO? ݻMZ"|8C}}=ݻwO[||m=`*cq fW.LPہ@ `4^- xYl4OmaWuƶDchա(_ix$lS-hVAKC@m1V D'񖖖~z>,V~&>g璡CiW;cŊ~QZJŠ<6,//o޲, à]vQYYɶmcРA,^Lr5fꪫx_Ӂ883VO>̝;Ǔ;vf!7#>MwRwӭן0Mq>B0V"gFIom-))iZ>M4֯_ѣGY|9iңGߏ(DQ:wV9kƺuҥÏ=LͶ 0A?ض-""dq\uӟ;iqg蚇Hj: ""9CDgsg߁R{ٴUoWD=\BDDϗ3gKdmISJ~""rky EDD>4XDDF^sQ /ĭq]3~D@&M![$ ec񗉢']WW]"W0R15rNoSodV 5ɒֈk%Kd/o;R9; 1Xn"H[^zRWS&m^*UQ;f\z0ևDD'fJz0mQu#ՖUZ&^@\0;C~3g~M߻^G)`Y):1]lK|\yF[-={IF:"ToHvv6c%v{^s^l`*+R8Azy.(xqx}Fi0M>jTGZLj壏ƢRu-.%uF{e1{wl`=(ڏ7طK>[KO>Nm4Xĉ7p`,xwBQas 7Wlޱ9wθ .i5yڌt{ 2i;'gb,^= ʫe "[Gyꢥ<|5VGR q[] d Ue(BMQ6oܧ歿}ȩmC2~ь7 {R3"5y'e-,NO?c!F;w3&/˭@>cKw?O ϙ)Jggr~2aMRgk-#]͗wmI FȀ6՗ {RƆt/+OκSxp͢.?'.8%3 ~@umn q%A w/pqBgIg?fwF v}'ٙo:u՝hG;ypGT0 @;OpvsO9J|گqxoOq;D>_{ ˼UC^=q?CjhnmܸW5 O|ݜŗڅ䟏xFZ2 CgѢ<Y[q@Iw:|i)\3H?DBr$I#F3g745v I94{)Rn^2!I/'=v [?2R٫g:?9:7ǏHN],Qd&aaͭ/GF7$IO<,-)3'59#GF=opnVf__7O~\ؾqӏC>?6sP0t`/q&wv3yEv.j TxX0sxw\rٕmw{FWYXy3ckq?|Ka=wʇ~rw{mapccoA(:feKPw̪m)-.kY~ Q [\DoH '|w:+9TTTƶ/\lb:L;g\nQyy\}K8ˉu# EУg7+>BBmv&}: *c ;Bfv.;ugӀq2xqmAcm56r89z1nX_J]:10V.]DEUW]}[VcE~5M}M-Ǐrb} wu*;嚖smǞ/\SBd3H4z~?0o3}dNc? ۸wpƦez*\\yՕ{؋| X;j$':MaĉT{q|S9Gr._{5w?4eesLx N,XĉILHΝy}Tm^.K+IψI?|0eA;i'Gp`J8Ⱦ|!#bjKM pea q9|44PIsډdz}G!cM&C@(ȸGйG9y[Yz C>pܜlr:szQCV '+λ=)oi?r or$ K 'Gٺu3ƎobCQF׃mgp.zwLݘ~{=v;YZVdF F=osvKnt3;;CGGK?Eks4Q%-@_vxюvDr=hG;ю?54p*^ BiM`@ 'G@%SV^76ӣ;֯aHMCa"K ikB9i$˞O״x;kW"L'"/kER_GoBБ%52pjcqz20ѫt!PSJL M5KK(zӲ1BAƎʼn'!~f BNy۶iߒ^95F1СC# w&)2i3L.wVv%`2x@/LDRTTI@p7l%64m\GE%O;\mj$ aXl*]{dp ts/2lEkAs'4 $Y ߍx;v&*!z\V\O?-hPba@N!Ahr>~xΛ>lS瓏#7q\$:6S 躁jbXaAXbi5ןG$峁$)RnaqBz`QvƟ.\DRr!b,8qX,u 82bv>ezbb=j;4uō6;?& (^!3#GgĠ(;YzK? 0~u7;]Mo+z!;#`q 6g^7KflS]Un:-C,RSR t ;Wn$n>v$ 7h-Ud5ME A/i9/U܈ŢA2nu +Iɩآ 70kݺ<%p5qϽ& N$:dX]#vDZֿae1E!l6yh'޿5xvfL5?H}] eIU5BLl:VA$P+V73hP[mDPHlFNiE[^$Qa $$0f IVi2CX L&ʙ@؆jXj0|N=.0$a4vG `HLƁD4B@M]B !lB8t2 "q]eDhXcP5KDϱ~~K,cFu]'>>U\_Lj|,!YVR7'1 ?/hkxovaBO%^YˣK.466a!LS)v{ElN+A)3(ܺÇiZ8`h'~|!GEAZ1ӽp/'>Ijjj> 7_iS)z&!&&Ą/IX,q"Os#Z`Iv"ЩİN(`RP_ʚowdM[uMBZ_~ɘ1cp:/!%%%3q2Q?jXt/GKF0 oRB85>:%ʦl WJtl7 /͘#Ph;L3`&&QVVʆ5spF٘_Ϣ%|)%vygA38AyE).Nf'+UFwpĦМh+iPuNo84k,[ 4#K*>dBȊxYb5.M8r? ~$<> 9(Qh,(0@PWVMYvJMM&)wRJBĴ 8:H\.vcFaȲi(B `֬YM]]~8S1M`0H||<%%%dff YlpI'm6:u>h{:݇t䄤Ҙ杍zp;#W4vè,O;x;yݷ%&6z ^=&nnG54{ߥ;~+7ceARY^j(V̪K))݂Z-T֭DR(g"BΙݑ˄cڃ2DMJJ':&ۍE0By@6cPͮ gŦ HK`M`Q 5x m.fĵ1=ƌæMٳ',kp8"7x\93e?믿͛7gzDke8&M!yI(,,ܣlM]VЄi"*!Ĵ7ԃ{?xu=W_E4$cHLDSbc蜛Mqq Pӄ\*˂dev.TTVLvx,L0(uĐ–a_AtTRLsU5}'::矝EF4KJd%%|WGoc˦s3*EQM2 Cl''Z"أC!t$ڞdڐ, 7}1 1o%AKV㰣ǪEaTR,XU, %-3 Ӄ j$ UUz?S$ѽ{wƌC(0 #<w\„477i}ǏRu5vXth;ކ;7[U-8mG BFP3]K !HNv" ?^o*+ӧ'SXXJaa5u_ښ& JBB:6fa#hp5yE?c[A![nfێrdn6IMMLrZ,={ws$&&ie"[0A,B``P'\q}O~@/HFrbl*DYV 8U$ՠi٪S؟jv{x]f zjm>|8III% B 3gv[_jEQ$ߞ5]7YT\.f4Vn&լ\5˃)dbcctV* dtܛ`KEyvMjDmde$lְ~Fͫ!'-NRb[Z4|MM446١Cx "-=TE _߮oA7Y8NHKϊ($rJ 0M6k;ZMDE7{]T2qa,m,>I5iЊ*H`1.afD2SlY:CǴ9&115kp'#Ifj7|Cuu5>}&Mj.0vGSSw}73gΌhć~8C K/婧T'):DBA(&Bʲkö[ ٳ3´q*467PUUn[^l__|Ŕ'-5+W`;0,p0"#!zG$4ݜx≨֭+M"!>Jc9,\.W3o6NG U$$@}OޔSTDN 43 ڱբT[13o#&PYg>i$ I 7|8lrC"[!0P gõ [nGdgg;ᇼ;I!(J$QO7|ƓO>ISSoso`QNB+.,sL,޾ƶ ?ƻ(o%n У{7cÏ 3+eA (iIRpDNZz'֮YKjJ6 )--OCVd<5e ۸Ssl)YjSE5kQ\THyי4iɩ =eUUU,Xn=:q#p52ig$Gt 5dW^@~XOEcOfUWK/++aMt¡ 6UI ]Xe(u{6t%cl`,X+*~~<#~8m cvAbIrˤ$m$ FJ !!.Dӆ464r )1:cIHH!%9+/CЬ%5- Ih_WpYKCCq 11x<&M:%KYX,*zHg zФՂ膎秼:=t*qi<3<m\ꚍ.p`:f//@(Ԅp .?vG~mz[$:IIfrݭS^Aq=AR#eC(gyXcH aqXBijnp(*5ȲL\\,a p]DG9ihh@C$$<ȊjB:t=Rqw$$n8{rj$G3e#&|5>[ 墺}{2m1ۇml4}ugE81L̬ > *ʫ>v$vЉK;~˜Oee5Y4ĤD*0M'_r;)HLMt1n0dddAm]1N "Q%Ic(0u?f(D M~_|Lb!DlfϖQUZe Mr/`"#&LK6խ/h5Ռr[7ӭkJH|DE㌶tĵ;Blٲ=3[ 6q]/~B}!>M@7EǗ ?Ԁ,٨Jff&bCEמo@whf86.!ښH=l\4,PPYzs%P)(( C %;p:> ݠ<3=YJRZYBi-g+waBCfa*bb}xL(O>o 0*a7?1iQK&NM"J p:fLabJ8m&heS}ɃJmC ɖҥ3h #Gaep{oiI #G k> ,aJ]U,ZPY(G46 RjLiR^VL0EݡpZ5)SRVĐq:(*fSPTR1!VrXݰr7ƲU IL]ܜ4zfO8]Ms)'??o#VKR yIJʋP  |BEꗭST*aUdQCE(EB2$ b )SoQletr8d$.뮹C\bZR}ATN{bW6cZHJJxU=|{D'a[q5XȊa,Y<6?K$ Yr(VFѯޢkHyޚM'LjIFFJBT@J֋ ỲN(+%˿YBkɠyBLk~M%#1ot>#/`CV@V5TƖ[9_ò8${T,KwS\ץ mfx\cySlƎJ  ׿ 4W/ /p~dYfҥC.E[cdv^d!WFo7z45@G2nQVS#hAkJKb ~$ap1G2v(bN8K)ض=GQE%gBn!4Mp8$"qaSqDΞCrL,6MNJS'T4U0O+ửbї>~$ivHOH0r28QN]u@g!ڣ#\L0 ѵC[em;AN2SPEح$IB؄vAb8C6l(<4 =L3@(BIجd0gw'ᰧ?d(?f*ׇC(,wΗouZIKKog hhdΏ+n㉇`ʤ>Xko*|3~ V㌉> qM7??^ںbjkKirbx'ZJMm0HN"tJVIt%bRĄas(@p&xV~&`$ω*AC猓ȉc Bh$ZZVV?p"SX݈$[0BЃ/f )>VǤ>8~8>Y_J}۹4s͵pWp'rYaO~IVV6vV_RѰʶmi>GUY!?ztݤ KcC=Ng4UCU]]1t㓈NCN:nO3M73}ٳw};HMIEd IL"і$SVQ4o2 ߟ2oޏ2r>?F".6`xWY|99M j 'T ˇ"I( SsFR,$%*D;T6SžCis,V ]G/ 5gd3T.̲/wꫯIJN4L[©ٚ$EEUU5i$jzH󑚚J\\ H *: Ws3VБe׍x}^bc|>bcQ5bĦMHOOvu|>?z1idIp 9d!L:y|E_~`hhR2 *M0MŴpdgq`ɐQeUQ5HJEC9gɫ /hb4W^ X,B4d7鐒@q8-m_S/F0 8kpFfpƹ< 84އkڹ?R& νtN<:tWLb+pQ<;m;nƻ7ŕw?$D7l߿Gk39x‰=1}Mm+α3 {ˆ^esugHlmVl,98NxWo%tҕ'|Fp#"`i^/x{j ےZ=Kk%TUEQnw$ǩi$&&F.b`m)"IjwIB@&" ih M!𓐘QKfb>x4UB0/j|ɯ СCۙ7" Qu- ?Dl Y}i9Ux6"\@n'1l8Λq{"qqqcW[A1 ]NۉIO"9>Gn5Ϧzj `'!5 =dPK(.،C K i]O"la|*wUktG_}F( ~kn&?MJh'{hZ*mW{r.63࿏I5|Oӻns>S8ιHRל=^xMby8:U4TseWQ1(ģ_d7`oX (tʌA.e c|KbO: Bh`k'LBzi0A!!000t!LS0[ a0 e0M]ahE?{f1tPюIDjJ"RE#^X*BQ!Ihzx!BEɦ'K Jq9yT!]&VrB:g9K&C aźB1D9yڑB!~qI'Rśo.R: gi%&UPT9B⤓N}N,|E 2pFBs۞_!;>pB*mߐt>I񢡮ZX㻈ӧ") FBtvk'޿?ډ!ޘqWyudQԹBl.D v?~,Y݃.))un!@xX7w,9 KBTԷ-[]ډx[Gxȑ# z!~oHJJ$c9F_߮-/a鷟m㓄h.݇".=Po͊O%n㞽nO˯$*0n:V\[o… x<4Mj-V%jOZs_.(,mֺ`i^~nޚ3:˩issss1c_|1{x!or!,X`0@1b#F ;;XN'azm[+RD pOG/?IٺN?r<5nƈ ,\ 䊋6qr3xI},K~1FSF>KR4U\p} klSRN 2H\}B!?F\xl(uh.z!nAw&Cs9B!N>Df]qC.Bopv)|bs Hdee?IID%#Li|G_Y/=##J;n'.9lƎ[.Y>/{x㹇DO׷xƍk ho]⡇KοyK!pՕ{|w0B"dS" B]" VOBeܷFC]9^zҎv(-->/ga`WT}}*=L:Nt/b9SԚj'=c?>`h 5 ]P(P( ƍ(BXt)Hvv6-bгgOK,AHf˖-9KKKns l e˖( iiiddd9g=p:xؼyssQWWatA@ܺaDEEѭ[7/^itؑH( <Y1 UVՔ 6l6m*ksMdff>.]!D\.\ӎ;hhh4M ի1MtrrrHLLlsMBuV^I6lقisM@NNNkܹs$oWؓ|M+VyyynUWWŋ^zEv!6n),Y"#mskݧ~*kXyyycmVX!bcc\SIII{߾}ŋEeeeyyybժU<'{H[IIXhQW|oǝ9q/ܹs#m˖-yyy;UUUEaÆEÑ8ZŦmꅟV.lsJFB9-԰x'{ɓ'ejkkIK 'nپ};Kll,۶mCUåTU4M1 Ν;-kk Bj~?B6\\\ nh۶mC4)BP])++0 :uH[9%IC{=gAA6}vdY&;;ITVVzinn0 rsÕ!ZjDihfn=ǝ(\> ))}$I"''gЀ5iFzz^Szz:e״'٨Q6,n'j#;U6>IQ%2m/"\"M p,sV:n[b E}%}Lx B}DHd]F$3! ݆sGҳk7LSG@B妆|>dYR^/ibۉ!&&(l6BUU@χ墹ǃ%11$%%qrJ:,f͚3cu .j*\&w$aX]BBFgo!33r:/> ]9CB4L,:"aJ ȄشaЖy[yД&] `Ga)p5> 6{ n@[pġY.eu{WtW]~a(ʿۿqƏ@SS.+EmZZN'ȲL(N7dݺu|>| |5+?Bn,VmYy\]<駝`1z]|萅a"aNDvdɒȻO 5P:荫مowތ1!2o5jɊDDw %! 4IWL U%$%?) -ӆtóm3>2O<@D3)**"***B]ЊnDIqoz%IDQ9$Ia&cǎeذa$''rزe W/DSZPÏ)9i78 oګ.㽏U SraH =dkJK}8a}zsל=30Zܚݎ$I| Z l*nTd>Q7MC5$UyS^wȏ z;6&r$DjbXL ڌ-!   h#8|7\~ I29FBg&FЇSVVΓy>o&$JVV֞fjOfo;<<4 ѯk {} E"֯XŊx:e0rAX$9BmQMwfAP:NLEYą/9ǟڵׯx!1qģ Rĸl)VTȊJ\|6Md =%k$11ҒR;RPPY| ydKJ#(**Su(JIGm}[B;㟊>oy/6=/?ZJeS3Gs [}wryrkk{m^xef)Y|;o%%i9L>HT 2*eEn+9|b6._^1dQ&T7n~8A5X&y7dR#+> &+w2Y*ZlN>xS PLϮD8qvHf2=Gr5qۥ'7\v.}> aǞ̑Ndwsy蜝Ò?2 {8ݻۙ1coW;ڱhwVRyc֛(s} ӎgHC5\/F&E%xn#0zPfp#<_}ڪR~>G|Y^&qX? @hYDDyLpyulR"j/e-E #LX7{$L}c-m;#<#MeUa-=)]r]cj wSOeesDA.T68uuoȡ'P]DM&;g``Z#QZZɲ3QU hcn͖k{k٤[8j쭦w.z][B}5 5sOפzrV}i} ǽdD9/{_m[dcO2sf]kY6Z[rua;cG3x:k1IJNisdlT%[hx* Y$W.}C \vp۩pc2'ր% t4݉QWX*PxQH!6JTQ}>hh&it:R>[*[+[mn`EG?x8t9t c5Cƍ$!)Vq~n˘tjn򑚘@|l6;>wX--#G9?r'piv_s)ics~?~<:usR\\LJJ F"'' ΝKEE999 :,?>tڕ#GCAAK,={2bbbbXf ˖-зo_>`v;+Wdٲe!ׯ b|r/_ :>}Xf +Wn3l0Kss3-bDGG3|pzE}}= ,`1zhtBMM ͣ ƍGRR555mu̘1$%%ŋsΌ5DVXʕ+illdߟx-[ƢEp:ٓ:P(Ě5kXd ǓI(bϘ1c֭Z;vرcINNfNff&cƌ!66e˖zj<Æ gϞ8N-[˱Z 8!CrXr%+V 66>~Q__O^^$%%qӽ{wjkkY`;v --cǒJ]]ͣHY`0zhؼy3 .ݻ3|pYn/0p@ @tt4WfҥB!̐!CuUVftA 4@ %KXn6xJb ƌ&M!S0u$.]ˠlkfuO>M{ytvn[}k{k0a.+"6mbڵ<3m[aM~.!&UUtJ@ter0jX6"є p:V^HJL͸0 $*y z%iXRNDR4G}[ˍ37s0z]ȓ/?̄#Gv,oAA_=GDNRRR$ҨvOCԨUvNv  ٲe +VkÇOYY>5:: 0~DxqE~(=%%?ϙ33gN1457A@I#)[r F7 5k0n 4RHjB2%Cj2RSvFkر}SO?]MATn>{j:ܓ5 f D=x(^ -Qk{DϱSكzÆ lι*^z_nsFsoIsssd1{lM֭[)--v-`0YiVFKaݎelN6}og̙! $I"77 D9Ms dqqqm }=hgDnr۶mdZ] Snxjc۩3N9;aÇwBuஙK'3 \kd$d Bb@F]y97^{[˂K@1zX]:z4<4l+f! =pi,G/7nGok;t(-v%=rv{ɱ'<;-+;_Ρxݏ&N/ʻޮ0x.c|e$&$PY[KqE Ng5<N;mBt8}~?M裏 ٶmn+L /Y)o+vq:b$%صddd?ɓ_]bB+]{ wXSbpeReDvoyy9O>$ӦM>H*:v᧟3n]4N>N?7oNcg`}L` U=@>O*qD7LSjkIJW˪eLVTE9@lU$L /ca䐔DJJ lHd磩jYnw}"ֶ `cǎUFȽzBUH JmP > ٗv(\HJ>re'0ЛN._bdzs-Mյ ;CqCNI^z氓Gc=Q@ ?Nll,)))TTTGwߑT5jSNc(Ԋݻv#y5,0 !ޅfO*K3$ɭȲ"(2~+ݩ0E!L`b&H Ly'U_F0^Z]] I-Eo ߊc=6o޼Ϛb2RPY(* Yٲ-[6l&L>ҹ1s \2c$7Âp76::ٺwE3Rɏ=hڿͽBХK**-_jgƌ|͑hDٴi7p\|Ÿ8M۔?S9昿LW5 4µ0e)I=a•sG¾U3/I "!L0ZM!֨r!0yDnG- ?4?e4$fddSZ8\p8u)>l(#1aFbfx`r8ARF/g2w@uQY͛7#In;2)))\ve$%%s1yȶّ*ĭشi(-h N.!&m,Ȩi"hEEVTT%T TՂbEQTEAQUTEAV4MCE$,IjPW!dLdmG6UF"]n'|}KPcF? iiZtKxH*9E?$\Z Q[鿛'DRR V2IKK5=!vD>#Q>6nȠAڬyjzw !@-u%tv5]jDGǁ"IIn 7*-6\XB!=e ْzN`B70WA03aOMS )\'4I1;Ebl}?L=F wphWk[cˣig7?%3'&o$?>1EO% SqǢEx>|8餧Mtt4`q\,\ݻ+ObblL0 N2zhoCs3#+YVp4KpXmVt6(z،KȊ HHRد4L$Y;-0J H (!Ȧ&+-f"Xd-|#cGgol( R+ZVg.UH#LAbJ,zEqoqN8f5y};tZh>vлS2KVxݳо!Nll,v: pX,"YFA `ǎm=ErM9Ͽx5ń QN6(fLيJhP0iJI B( %LH-hiJrxNCzxQLaU-0ɛM$$ӈ|B':՛qBȃxQ{IT/'Of͔mYQ^?ƫf7$'q&,8̃C0*KMC`phf- Ci2rdwRSc9QN+,V=0ɱSeᒕ2reu<duȩO:tح۹KۦW^y>{Jʾi^/6PHf"2upZR5 :-CltBVh)(h UUmiP4P5 pG5U eKVLD&8$863 @0L S˖2-A33 ?$TBx~jXnzo,ӧӧϘ{L¥ᨣ/g^%%Şpeqד!`M:eJJ\|l32п7| ϼ>Cqئ~z7⍋w :tc-\1csCV"%u;(ۉF6BF P%z85,nYf)Ix=^</E'ih0 $5\D$L `M mLES[@JKid MUe|R4</̝;)Slٲ}jx)$@"Vm{4@xZ*@4B4-Av˟~VMxws%8N[[9#$i;E]&teELt8_8ŁfXER)V/=~mƣi>I+&65he]|< |؟Դ atB$IGTT!"&6ۍ 99_ @}m=dCPHg衄tʋ9&a$!+$C ~o3bB!n~Mu]'..nURSy9i{`RXE~re:^${ü(&>qOo^OW^}Mwv?gPĥ^_IV+)))s9|>KBXT#8QS%PqsѢEym*8 ܿwbXgĉ,Yd:l6;%ѳ :uGϧp~-fevB?& ;<^\FL[L3NcFS[Sƍvay@kV+%e7!)*H*6mڌաa!,2@*_R^Z55B0@7w$LtӠG,AH-U||<}%?R1go~>p7Ia#$)lR,n&SUSOni׃7bqU9;٬l^G~v`(,[(ztj], 3rHlق'’$ Oӈe--Yn#"-֭[ޏzjfggx2d6m"**x dbywy9 >˖3wHuнG~/C.6^G'3-G|B<@o@/6_(7UҽWwK*% CATEAMRӒ )#Yp&C'%# S7fL,dfu4$GJ(W3U0p&30.!CSSSv^]q:En ʻ}B]o]"jauF3j\CѺk9N<^xܖ=pbչ-ȀSZAtH,?ox&Lbe:kֱb"tW -[矿[iӦ!ᬳm93 pWkGnQT\H>=('Wu>;v`lQN`)TrALaHIi)<% !@2I0dEFر1lX#"[gj+z}aÂi""$ٰ~i[+tB7ROdeeWȰiaitMsأpPja%DIY$'N; )/G^v_#^"5瞄S ֧_es^>|n~?;v^be{"fXq1Q$'id,% N9]qׯ%cddaB*c,4[Eg_CR"ERdI鿤 +¡ ab MQ)-,p8IN\WJ`J KJ8X2h 烐|^Ҩ4$d_/}s ۶mxlJDM#m~'4 O] ~ #R%== $aXdJxq0L6m܆Vk?=zxl֭۟r-OgI.?"xBiQ "j5{HaUP1҅[tPw6-" Wma Nt** v%쿫 " U a a&i4㤖l]" gu+(0$\.u1ud2EX:N `@7=\`v{dA;2n:\ w݇w-Xv-_LNNW=6mbSv6b㉏oqԑۍ$^tUUk׮\yׯ;k !Ce˖ZgSVfb{C{v:<>?bC*@UdN #/M7p͡<}^b TLIB<ET$2REV1LMz,gS`0H\t !a4tCL9vMunriӦڿZ;^_Ά Թ )ITTVtv:l=~$Cr 'DO> \q6}}-w!ILlt쎹ضEIRu񛔄6;uuѪk[UUu@[SSCrr2uuu{qgRRRkѯp.gl͍Vҵkg˨ G dp5O'~zT5@Jf.qX۞:򷢦: &7; Փʺ2AArp}_9s"4hn\.?_q&?G AFr4]Hb)+iy3clUA eN9f`?.b1AE-~'moǸqx뭷}dY'ݧ\{c=|=4}zecU ?l .R9;e$vtGyű\s:NVmfBsanYTe2fvf͚ŵ^fk@0K>+/¶zN>X2sӕ>$7-ZVY@rrr=2l<{:$]wxjtjTש_P!5<F͆UP\_FEf`k}>~AC$SRHs, ~Uxgv:t_$ HJJ:mڴzkҵkߵ(qҵkW;8N>dLBqq>Ĝ9y=X"~Z?JT > zw^@k̩r*y/Hz Nl>z8Wc--O6q!їMj9{k=p+cݙ WpݕW1l.|>f>_|.+!dtq䡻gZp!gqFY٧~ʘ1c~SsI4`0x .>u Yl3{wkQh, ] /}}}@!,X۵bcGҲp%4SUFN3,|~2ƎKUU:Fm6|A8383;v쯖1MAMl:,pBjkj88&8鲋*Ԭ09gIJSQRlG,2 H^O<ԯHe):}H,[bY~@>p5 pv}Sy)Bش޼_h+vQ)n<-`ԩl޼;v†j7/IyoaĻ3***89Ù)%76~x ɜtI{S:R8cS }  [P\\UW]O?Mcc#111Ӈ28|@,\uv/ŨJEEmmܹvaiع" $l bbzu0Ov'u7QPEtt*Ӡ8~ J Fk"vd YC|RQ 6匦w4T ʞ[l md$‰5MAUT-#f WY5EaТ}n߾.] vTw&۝ofPf8p] lhn*"lf1tx뭷1c>(B!bccIOO `++`ӦML0}RPP@||Zrزe ]tW^l޼Rv*Oo(|e&'*׾y =s<ﮭGӆ,ӱs#N:DbbbhllCss3$aIMM{L:&|Eѷo_jkkz:AJUr`eӏt9>V6n%uxCParuծ2TRoٌCG!$ٸh4Qf %R^!(w5+Θ{$^!Z*0(/bl۾UQp\JJJ MME0nA5$IX4Do/W~TVq٭p:y4440x`瓔Gu&8k~~>=W_}>o `ذaLvp/cHL7`Ĉ\qxz: ]jW\t V+]t>={ݽ*ڐ?w1M;vv5,;))X}3S}!P/Z__f@p:m*J!hhhav;vDbܸq{@8}…ZMJ&ٟat<~|-MQibEQ4,r4Yob8{56RǤ#xK.eĉ̝;46 +74xx챯2HLLGۋhBi0`>E0CNBP2gP8| ^S3*%֪&p*LE}]4gׁ'%:ሁr[_:̪rLw1tw(赽v]@T nf33c3szyff}vw]]E>-ho͍oGvr_~lܸQx8"'p !X#GOsa„ y~%5IIis:]r)[DeT B 45Ue3mՌ8ʮe,Q =-:FaZ61EcV Qd1LLfL&3%Yj9O盍Ff&5%]+_']hdb фL6#3 YY0m@rJ:nf3&,&3m"I(c6Z,جp.lZ\SUD() 'ټ % A wYvJ6~,o!ciҤ~c{emhxb=}+.|;Ͼ dž[{͆$I~ڷoOuu5ǒa}`Pbjk< 4mtu RDDLf]dKMGa DdEDdžWB>α}7mĉ` 4 fŝCܫ19 cb}];]v;%%%{'$$ %\שs#i)/:ডSokz\lP#ݺW=~|/h*X…ߊu5/248yyy|Gl߾͛73j([Բti EE5G%>2?e< pS]"1_Ϸd!** : %]E^,INRr$o `犟BŖt1p-ti]Ar.x !L~7} g˘sg+}Уglr/=Ž=C t\&ѧX֗o6œӽSzd])h4iFM  6Wt_(ԑE̮Un"s 鵤fr ++_̦hӂuQٸqsAHMoʶׂNF{ڢx?F j6oJ-ۏfE -\y.*jή$HKOcESk;qI)|6k*+*QW\yD[f 3g~ۋ^ث-;;_\~\r%8bt ` A=V$)9,Դ?T!&w6){?Ç3$Sp kħPQ1qu5AtHi=Z .Yl3|Mޯ]v\y啬\P(;ĉ{x믛O:]gnew!_ɓ2~ɓ sn .mrw 2,;߯|rzsxh֮[VƵW4ZvH_ٴa)|?cw1𼛩_O@4%%&fzҴi |t+:oV7$_-b{c=z؋83?.enCZx"-d#鱈n˅i&G O3 &mï+4BAIf~bWGeƖ *rXB!|$韽@W/=n% %,t<dB B!bs.fsY%CNkEŎ0lADI╗t;3g^â)+.d(ȒD\| ѱ(A(jUf7s8XVl|[RTTnGM_L\zJ@c6,b=^5s_#>=Tn˰wyJJٚ۷ ={6`ljHiN]cy`DFNO Tgru%N=ؾ#ļ/'Evn;㷿dՏo|>*++ٲe  >R=҉OndNt} pUxnɘfC)[mg?nbcxyɝ,i>Esil߿SessbPU>}']c /ӣs%MS1 4#(Ql'd/GQQ>D1K5z}&_"%?n7xـ(,ꇔ gOö[O )//E#'R+zBֆښ2dQvEH_jhXOh4:)bA$IDӠ{g%Onn6zZF"dϋ@FfF5hwTWa2ɄAlIKMj ``Ȳ@ЏRhѪhl2b L& PPTĐ#/Χi#=.\~r1j".Wzts@4N$OFeeatpV)7c7GfV~Y}ȶELR5ab7j22v?g̘1@y>Pim =FÎ%\rոpk4t.e>?,pOSRC<$C8*$Νi?9ShMeˮ=t1H^!sSLl>B(&]ΦlL~"]kRW7MgEEoaݘLZ֯^nAHQ { J"H Mfp`2`0Db#%)~Z.<=۶Bcپ!}y}Gaٌ(łb4$Ơ!FEQtb49LQvT-A68  Qa9SW" *qшD@SL4oּ#jhFv\n&S[W 00A ` m7ocƌa֭7x7mڄMf:9ęZh,3h&CRUUEfj_>[A@D&Xcs Id{ɜ9sͥc? IlعK./lHJ@TEjp}x?c *" "" "@QtY I$^^_hT "!fw bUHFZ$3DNXɬY[Buu5_|RWHG `ؙ,ˆqw&P`4D1qƃ]u x=^DQ  !<Gum$C*˪ E>: Ņ躎A )J8,Rό %sLcu\z|י|Tו p88qb}VLF+ͽFMDQҴHR~KJ@ x7 Bp3qDn~diqdxJ~dϾ Xoǎn9r$>a렴OW2syoпWb1?W!==ſ.}n;gBa K`@4r!KFr6o*~w-iIIеS;/_BVfJHc۶b$T#5dG4+O>||`dA4m :$Ev=wkz=[C0]G5S֗(55AA  --Xa' AqbWl>|d?QwR*GȂy"\}mW!͛7ӻW/jġ.6VP>~W G2h";qC v!WO) hۊMh2ys3n\R š ygy7iѢ9 qX,Ѭ]>lX,Q~\T4M w d"ckС#u덱`0xH˸##ijI$#;έBRZCb?l~]6" G=J ++>`kv5H0mێm5 {n(c#8 8[ &dKDYCuu>lu-O?$Gžxdx&66K=hsBH bds9w`zD?( (Du[--[9ٰGLTU uXu؎?\Ĭbf͍.EϷO͞Ԓ:O1fM׈ ŌTgsW9Zc=M'W}>+ܱӮ~`89 R t̶~&S8`qAo 8DG%;*C#'ٟ^CG'oѢ>3@MӎB%-atctq"Nˋ.f5Ă @lL:k_)i\ jBC,27LzfvRZR( 4aN&=lٜuYܹzWFH.~7w.iZ1ĸlDy5U!稑|"ƂN\'b z~9?| 37-j(v+RЅ~s>}p:{qٳa{l?'DNѝ4ח|hID6um""{c+(b4hzx_`O gӶHj* T$U՞&,AcӦ2Z"7\{I$<:O^-I'n'Gֹ֯sg.]z)=֭[7~დkإ,1iٜ3\D3pf+,0,#9~|EriX/z5Y(ٴ?=7o@PoS3ן+cYRRS4i۾-=F]ʖ0W}y)IY;Wt&Lfyg]yg= jʱ@t}Y_,$I>boz~'N0aw N%$$зojLpZHyw59`,~HrZXGf*o5ロbX{Ge˜j/p gM= ɓxgi*Mp̻H_pS8"~\={b27"8*x챯8.q1 0r$M6 8 Lj4Zf N]n b~Dj2 pE[7CUuIIl6CIIQct{91xb WL믿f;)ƂW("11 q!_qLTܾ,Ix|uG Qa~>%d{'9kбeay;[nڌ_s%9 y% /|;:%rwP[ At[a46 غn,/uZa/_ɗ_ǒs.E|Ot;+8t@@a{ӥ[QCGҙσ>Ƚ),,<:V _F'nSo*ɇ_QE)\"uA/%I4 ?{uKr|]D׵>nCk_4 Yҙk~W?۷7Ë=dgp좪j]G5Mo e3qK@W^btR´  ÚMwO{whwVqh}}0f=l[.YM7t4U*p_u1o~R|'c_Ig$-~&NGQu̡ *޲Æ r1evu<^[C06 h9,沎;#SO=uoA6)#I(G&dɀ(I(H(H$ߏ{dYWE4-IQ-bqô"d@@81qa&g~h?x䤙z:2ۉl/_H|;;׳̺e^n}{_|P] ۷leҌg0d:ҙ?Z$}wΝsWuxQ񣚢;{'!--뮻Hz BEDC~ĬTz.]Q@U^LUt]CU²B"a!\VPj >IPްϣ$0<Q`QU9/}DO?찦w,C"rpkfsӔ7)~ԯj(J8uCkV+OkQvJYyГ>WkODQYu$F; (*/=]\eD=]};u8]ڇ :1ԢxYCdžH *1H80ӳƤfߙuY {s`zWD- 9.*J%nLK=osmȎՈLj/$)?)ڵlI{}- d;?ۺ_|+][T_틑[6тyw֭{*s2dȐSkꂼ0 a=" ]M>Ch5Gȯ" re+: R=l]@7 r9䕐Mn=qVVeF,#:0 zXR<@{Fn Q0C8n,܂PMZk@H&.Rx*b`eq4kn‚N~رљ:233 +0%tԋ| x{ڢjLU^"w KDnfW?Xc.Q 9(Bqq1LV| Eb*m\詺,đJ1xxeK,aԨQ{hdST -B zT?M묠E\&MTB>A0 J". dDAã( A#u tш EA4 2` ?(P hJBB [WPc5;wP[ gy!u8+pV?Nz0L~M)`S iD5.Q|% gСo˿vnXr"aIvB!%~!H5MS~T1u'˿ōևs0iLz=*8&!& (bGx-h1NW3E#ʑgѣ;v8j p5t>즸n5ZtM#&6`0X/C D9<`ۭ뎮)ncaLEtl6[|T<i錽dy,  PCٴ₱cRRROzyx 3weҷz3$?~Ӻ6[nB1g_:4w^PWn?TOgH1!޹wqPVw#<bIɠU@<ظp%ZI<ƣ= <QHC G` ɆWCP !pd#&y4"7=>#!Mv,dž?ٮ?Nh/#ֵk}bff͚^А "h&t]ISVRP LQ@`-KHb=wd@eTX_C$AAdK9~u9t!,,,u( )M8ۨ,-gWcyffa-'JNjPuuڃ5 EIb'uX1[UU#:G4ZfS:R<ʚB ~i,iew4]us$:ϼ㇟Ec [C$eW2c_AJ|>J=ܪ?*VRkL5Gs=VXO3i Tu{Dd F!E 0EY(-75NeeTUWc2$ )omy^ 2|3~GM P`0D @UCIPQ wOe~t{x`Vѫ-萰s[g.yZ*4Ei^#m݉ulڰ~̋#ZNw^.os[vA-eeM!_5^=Vh)o::4,vp4+k HorPMMwi63ܽ4 += # ,[轋.ƌsz{DA=\`4BHAq]   &]X:ILLDUAqܘfDY B2QpV{kC CGf3(ܾ zXNCA{.gh@54wqGt?@ 7?{nSÿ+MHUՃ.5 yI罩Lt=) MEtyu>-8QJ|=;+zʚ½$l.?bfQWW[Ovd|-%k?4LG,ӠW"d6yϑ20I H2a1d(H2x5;Qpb6$b4$ ?.¢.F%ޙ{7O~1nܫ(%IDj99S^} c&u%$Ĥx?~R5hi1DDO/D E-{U$P\\#<̙3OnUUM 45C(p3Mܘ9wdPL/,-ԉkh?P d2t;=APV\fb B Ʉ 躀TrP=t: f36lM6G:T5(J=b&QX>Y$o-珺 US ל""ULó&‹/7EMS1Fw:X(QS]Eivz厧각SMnEHZ8RsH; @H jJH pդgغuKQ^ʱ]]CJ"O~l=z{vk.S ,ADُ&&*x l8J O54A#)TbcƎ[Xd6MPu&N$kQlC6(j!!1]ye[a! ^$j"~Q>*oiѴ~qƱbŊF 6+SuJuDZBSmD&y"=xAp8Kf)yۉ0n j]6,ǤVt cDz8k8o@Ќ6:M 3!ł^@e$0N<8 s:i$(ɈE#}(ٜ;DHBcZi]SBT9@rrJ d Hd6;:rt I}e!":7Ӯ'6Ύ h(' L*(e;X6EQzUeŇca R( 9>ɣn#16R\2u?VݨuU֓ iTngDKHo¢՟jFv9)?\df"بk2u GDMr0NKeɈ`AQ^u-Wtb+ߏjS66â}<~{屏7GyB NRTb (+q$! PSS,TQ./%1$sL)+sRVU?2cA ʢ B8!:NX&#-($`pYg#77ehTKӴ$ƦTe3iIjD TЪIW_E\t-4rBZgȢkxJ"9 a.Ah;'{Zbl&DIq(uDdo >BTCv抭k \ɓ'<ކm0E,f3!M!֤4\p="FyأMXͦ!I2`04}xJ=b ˽ 4TA BN0"h5 0E**aI@+Ç~8 ڽ{w^}U*++&qzpPg 1QIƼX'dI&=9v[[ Fd~!!;RX$Ib7)([G.mڃԄf8(JఁX n\jEjTЦi(PVa21xC(Nv8nAۏږ]KJjFPClpr5Ȯ=Y,} V[na'7Fbh߶'Tȴ0>:$z4$#,*&Y "FT&4U DI@DQD U"o#4$ADUUׂ [fffiӦ}Ndq\ sȴ<35ɭ1&lBJ[QU[H4LzR lX^?tk;^'h-?-DYf$2: X`ԹMdo )~u;oY!3mfF6d:B4F\ye.ɺOe2=j( s[Sc C@בݕͯ{֥K}<k֬9gpu/ &c Laa!۷?a/"`:W9?.{m$Ʀ ;!~Rj|3TbMx(mqM,/sz 2y./{ego|B( I"*P5t>sWFN<#{8jF3}DoX?NnC],'t2YJ?x.:.i(JW4iN6dA ([|3;P\}auP(D||L{NP㨏GG%H.d#IsWnByM6 /<@ )R2:E@*Ee沵`9?s1>A]ϥ|߅}1F:wNUGy%ు&, q;9*A^GEa˻Ġk:΀)s2JyafmXxUP) h9V AS VWn#2 9wN_t1APP|C߻|3_f _|^;o< tJ,X^zΗBaaaK5MbԤ!ЪIZ5$GQYSȲ p԰hę3lq6-ճIMgH@Kf,wo~.5,."DSP4eAi:ޠoiw6ieD3VGD:6|ClKsW@=٪M|kQFD,4"BtM_UWNg۶m<U:<G0 `6eI4LXVEQWWWNIe˖v9s0qZ\3)TU&"'b坹u:w%ࢱ"Kn_ȶm\8>MI0tQ3:SKjhj}k; J67Id*2 P*6ꡃ@M EnK`tߩS_JVJ,&;| Q2/T^yfX#fda"(PVI67@ <`Î_z8_KJJfѸAd0̳)ͯl6~N&$dC1ͬLf.Gx:9mo&M>|8/:u"&&~ TQ%2; /rJ]MM VbZ"Zhq͙1c)gԋRRj Qc K#1OC'PZxcf)h?n|m pYly_eH9kȢAҿ$#})d5|vA H8K,Bm P@ neXoH FI2ޒS}9=&މ95m_0O)nO] ]FX ~1ϿpV" 1b?>TVVRUU㉄F#6D̤w 0 bn; No}I715 M!W8i4&}bZRRRN!j#iZ.epyΕ5E$Ĥ3u1|#޾7|~# @%LM~iPPS{,]:W}pv9l$!&= -"D+&5ِW+A 7:p2e5 Kf/)l+uWһiڛ{_ǀ.gj]uW9wt=#zCH٭tm`LE1&mTוh5w4)\[kYf{XШ h\Kl]ޒ@~Nmf0BLL ~;*Wm۱hz&L¬;oy(֭[5|{yXa94hOU yg> Bn.UHNcnZ:t?ĉٶmEEE|!TUmtnFq^]ԋ`%dz)x ;<.u3޳"Zn+FZ֭e뎈3rJyy(.]1k. r\ȑ#O jyku<3k%Ow\&m~C@'HFJ4Ԡ:%%%l޾Ι"k"L&&&7xCbrΜ0Mme&gŐBBHVVVVؠTR⛐߄dPh0KT8 2|a=ku翊{fU6\(FǖHOjW'rNC{KDFSp+[tλr FQ @έީCZv{(AWt:᫯bȐ!dffYeY}9 X`IIIŴ 233څ 2zSkTia κZvg5QW\A&l۶ W>f<3KςjN3`s2qF y̦(j]DYb,b1)V/uwWYS{[q\w+x玶$_Y2PPAp%Rt]iӲ L<|:x5Uv}k%;;;w믿i&|oVӴH:Y6mС7pC$a9kv|㵠?DSTXDl\͚5»%S/+t6o?MM׿ .  ]~=?0SNm4*?Es?SJBa4izv"x1 ˘PyNV5<b2X,{=͛SUUk_yNE |Hup Dڲo7ܫjP=6_atڕ4֯_Ϻu(--e`rȰsN.]ideeѯ_?bccYj׬ƣ3lvldDsYr+V@tBΝ4UVj* C<WfڵXVzIeɒ%86-a9ҪU+voe י6ѯ_?>|8>( .$##Lqq1/Mҷo_غu++VCmm-SN#!!Ν;cXv-˗/' ѥKt(Y+ ݺus֬Yúuz~Ki&ܹ3۷ptRoN||<&##zˉeԨQN?t꫿w]G !"={kq(UANtщ$7ĉxG(p1׹< 0!$UsxWѣX |E.yQPP_0e]<3ⶽ8c5ܻ44M=m|˳n)R,;jA4M %k 8}5xguؾ}? 6O2eƎ}Wߟd֬Y=Q){=6kB Y͒i]w] /ɧgo%o`xQHh\˗/+ ))f ?s{Ju6^lsn?Ա=m@I#Yɭ^76s4( wf$(P(k ;,-%)mp{ks%%%)SDBAs^@!S1#@ E^J֕l,53%! FUd&Rt<֧> ZSSڵk1|&6m9S1^0{$f$Naf}uTM!.: Y6XgHnM0䣴j;Y)mNxӷؑ6ͺsfCݠID\\~wg;ﳪ4ZfuݹҿYɱX6|~!tWqƠq4>BhWl*ՒU|srw%!fX1ۭF:wG/~Cw~%ųm9r$7on4 h DVEQD% uvj5ku,hv٦i/(ѩfكaՖHOn(9Uk9GFclW)nNN)))HĸqxT4i(4i҄⚳R0 6w9}ؒ눵1gok?$Qpk<Q8ᆪM6dee}Ν\wu̝;6mP]]wK/Ć x#y8KJiKvcp0HMMM$P ٟʍf}7wԚ}=q7([<ykfIY |72ҧu%'{2jԨeu]Q?>SLrqӪU+JJJxq:GQ#15kpW3l0nF~+rDWi\~1s!?u,:^X}ɭR<.A@ =% xPԓ;S{i={>GZlu]ܹsؼy3]tL:ztƏo<~Ax1c ,g%??ȴiӐeEQ x^GMkoҨɒ -.{QUwtd`sR%|#,1wI,Z]'̯4 hkT|`B :&v ! B:$*^A$F'Xp_|QUU@5SOMtD=AT{L,)'Dfddqhn͑~ ϏlߴiSxB;tP:f'##.z hncrK&yëT`9 loIn&򣪡{65,tm3E ֎uTRV(>O)ݳ3  :+:VR0^DŘcLQ5rG[@5194c6|N7:[5]4R&k0 \g?`W&Д ޏ, -[<_>4t Q5 MP5 I( Bj**4j $&TT`7, s>D{Kb2AG5t]ECEt4UI{lڰvutD px ӧÙ2ZC}:k$x{12&M#pu1x`~g6mJ:u*r ;wfÆ $&&+SO=W\n_~_= F#CeǎtA"d>Ѿ}{n^xf̘q^bCܗ=&\UWD\t*w0+F|Ā c;tFR^\ºp/ "Ox9[gxϋՄxwmv xwwM ^_#u@Lb7 2H[|Tj0@ j%`D$N`6*sp:)("%5Y@T5]SgO$&Z#Kr+B@t\n0<6Ђ( zu> _l̚5+УGFdbҤI)jwݛ?/)S0|pv؁iHn;w|| s=3hupy qv["FlA+hG=N(D@?5)ۑDY2ϠizwDema3dJI}DUQ+0Ot]ET@b1SV]I,K2( d(Ƽj1$PAG]@Uh!zVCUjդeҺu[B !% ( `3$ FT.:fI1DLo] b1ù6(*Hr3I1D4 QlmSbȵaPk`ukPBHHH8 bH4nݺuu֬YtMuwUWQXXxq""_&W>4q`6YW F1"j4nc b0ɘ-2$ J,bY  &F_ۂ .jZ婁XLvq;o)þt1(tt44ALj(I9q,m! ,&$tA󓚙I^a%Qr%(#55kcDz$&!*}@zk.!(::7Fn/ iDA@UTđIIITo;vફg` \p/VI/y屗HLy&ڵnʶMk1d&ՇE)Vȶ??~g2~U$duw_ȋ5bIJJBe.}]&N@SQеkW#\PDZZ]vwqG`ر ɓ={vH,|C{\?ަEf4KEfr+nyhr;D^zւ% QGgslNMhssB !M 5NGfR;Xu$dX?K?wRZc'56^%ol6 i$ W2ׇbQ_~} #,u;ݏ[cH,o]nSrdc"En$hg]99~$oit jȪ&k *(ߓsN>0Y?3gF*9:3pԆ6fZIJQ'|nl}Q;P'Y=UUi۶->T诇XʚBmFBLɭHKlUW^%Gsbv~k=SŸ XVnxps]d(saւ` ~j)Y2HKlƎ њu*NޖƵ^{ x#SE_[Kf ȲL 6&D1<4łd_ʩ%<|\y,:g5uZSWS͠LK@WMgMU`4Rt , WJ錬C?.K7~?~;`3.ᜫ X5U4I0pom.O>xG㙧tu߽Oࣇ/W^agW73'Yz?}MӸ袋=z4&Mr1}C3 RSS},^JJJ0L|+bbَ3jمfa3]Ɍ{r \qw?^~wF۞d3O= YifvMjgR'gha)ZK۴FSO=ERR Foa <,[ 믿Y` _au]ǜ9s"1_|.]Db |Ԟ){8ħHIb1p\J ]=&j1cnMnlZ֌>(N;%8kzgp?ܑϩS#^QDEDA@ER\vхw`n+& ItDn3͸~z?{r_ysb 5Ca@XxQi!gż `>ZbLyt_HmI@ L&GPl̊afTUUqG3Έ xl2?|]eoӡKo5d%@Ѯ"]r+&ws׬x)+D6TTv8Dj?#GO#11;ӽ7_OL91󮛙tHjдc,U>/68 Ewm%ʟOlȅtnAHHH8F%uUdǶM詩XV/^L~3gNDٷAIO?+}jQX5k~)3f3dܸq|<{\ve,Y 6Db2Ki4Jp4$A;G` Ƨ>f1]@SL4; KhUٌoK] o{>梸JHz`ӷ;y;yخ=+FSWYw"||'4cǶPV[CYx:fN~37|>dY^ફ m#Gcߟ.Rv@:``ۧw/^]HjJ(۶ V* x,-;s-wFyΡGBrleLWAU5UDƐGu){$$))ɛ_e$$ƠC^xCfTY$Z 5V6O9aA@et]raX7WF~mt]gĈ'59d .^ 7' I&M}{!kV/#oGuf9m4<|9 lCqlٲ-;1дpREl<ߗng'-5jm.zpp(J6<~7=Ob¬24|G5?[oGAA| /Na]x>id`4p=XVRi֔ԴD^{MFNQA [ϿaǎmCA5\^m7lQ!nyȲL(B$EA vw 2jf7V, &sM աjALF3ϿzN"3}!<1w˖-Ĝzhʹ> N>|I=ݼy;RU^NQ4rE17LQQT8\:W^/߾Eͼ'&SYUI|>+]ByY5!d jjjPۢ?zW۾ @ll4fP0̸^q.eLt 7o8]ĿAVRNt3f sNv} xP#vNbB,_> s/YY(FM]5wdmd&":UE% 1|\zm6\ǫ}cd :a[𞲓X`Æ ;]v"ZmR(RSjn\N/:.0A9'/PU^΂ZR#u[پm'Ғ'Yj%ӯ80j๘_v?zuT]`0ILhWY_V0kLt<//](-j91 1?V:dIڞyDQDQ-[Fqq_:Vii =SX~=f:ᆨ#tte^o-#0tpG"Ӧesbbl霑$3/qٶm3eЁȂHzf g}5j֭㏍&.1`@aӆ]nTEE2I,u1o>#~N=J6~[38q:>!tŊ\y啼TUUBʣh[osNv19Ƿ~.5XοVFJOD;_rorJ #GFED2S\+*]k"7 I2NK/¢k).*t ,q6*”PQuZPHAQǬZi뎴mNꫮgX;g=Hˮ]ILIıu#0gH 5k`45o<3LU-  0hJhnö= g a}tΆs4=t =D2%眍'))MFRj[yC`@$Zly>偞ecӟp:TTTsV̸jzNׯ#3#vU5誂Mlz;&5k$OS*x;nδeP392=^!2xxyشi / uM2m4222K$ӹsgbbb"$z+6*{HUYY?3 .DUU^uxq8vNbbb>}:$ѧOFIZZӧOGENJvv6`|{ ={6[oQXXȻ˶mug}]?AYf\|dffFiرtm{1͔/:/O,ZUUy7(//'(n, \s ЩS'&NHFFӦMC$`̛7E(E{YyGekAhժSL!++/I4iڵl6GT>^A`׮]hƫJii)_~%+WDUU^y\.sn4#:h  DRR3f@Z~}OQQ:(ʕ+l4++ 5vMTYfB`>=,j']؞OVIL=*k)A QXmՅoi,_}7C~ݧRNo Z%۵EURX`ѢIxqTU{͆ PNB :fIII 2$rNIڵ+cǎ%,3j(7o/2ᤤ$~gE!77\-[@HipPV=ztDpO zmeee|'J="7( ;v/$ l8g3f^4hРO> uYgС*xA`„ TTTп͛(t v܉;ȲL&M>|^mݭ[7ƍ9$I7iQ0,]Q!''%KPWW,nӦ^m-2C cBB@ n|W(B.]ҥ yyyڵ UU#A&M"U gϞ{ݓ(?iksYp!.oI%s=14O-voJݎ=ڈ(b4hժ%O=4# fvȥYN]zlQ|5g!iqvnKq83?z/U:TUAWD5HVvvځ(I}EP YY9dNdF "l/K׮̞W1LdYr-WMMMhm[z5;w>g}K/4}mOexb2bΜ4~G>$Уg~'QvD 2SVZHNX2q9٭!-HN.5]FbQ nFjr&! M@C(D],DETtI$ʞ|u>$D,$ICS,f :'`BՇE:8jrEU*+x\.>N/յ8j8JKw T#ifJJq:PT/ǧ\TJRHQ] 8,$r(xJU lBT\C3t*JPN8LR8"|GK5o-G)0i}imBF>2V⯨Ɗ`3H$=wNueѧ>h_Cxz&Y?#ۥђ%KַԩS1c[>\q">?tt1>=~tNb*~Rn SC xQ'q|-H@0Lt EI ydvGUWUQ\4ExM jfMqȩuf[b|tճAQä)zz:eQl@ZTf$}[dGYI]vtŠ;G^HIq kocn-3 LOCK;&<-%U9NJcNٿ>g<TUCogfG"¨Qؼy3gq'tR>)TW_LJs^dٚ ylcrȡ⼵unZ /|*[g&|h^chzo`&a35LCoj蚂40u1 CP]UQu")( Hy=8L*(ꨪ븮G ০f>wDW :h׽d~%4n^ԣ&iCcG⍿i*Kkބ&oHw[#N:i'N㈺}aeE|@ֲ~5_?ޛ‚ x8蠃rY٨s|><cÆ yK3mqQxT CC6:\6mμm8~ W^svHEcXzO\s%C"j sq< ]Uqms&E;k[(J&PT\I ,;?czMƧ{h~DwjcVX u_e¡i }OIJy'ʟѼq gs p~ @n*N[MIcJ}EG{ gj* 4c'ȂXOGydgÔ)Ssەtgm3}t:::?ޗ5 Aq [ \MuCHţh86%b(W(. PRQV꣬0@aGeHҒBtT ) j]llsq<qp;Cv5Q ZMKF"2b1T (ilu x$o}=qغv *a[;t+7æp'ټCK1quhlldy7>o_]ܱg2e׼ϲdTij1;N0"I&DIx9H_ֹ-%+(#<[D6H"\A׍^zA ^>LP`h!{ 0x8&@&@LpϵOAU\KpUSPltՔgdnTC>xw%e챻RiR)4M0 ,\[Wo4@ hh) m$R/Bkc7-iAz\)Sm**qi%[aUIVZ:_\IKhχ'dMD)OJ"m @F+I:Q5?xABG=xL(뺹ZX~=s̡nL䢋."PTT6lذ̤VrD+d3e͚5,]jkkihh੧E_"K (J^F2+vyEkq+P8>!%%W՟g" nrl߾ $2.LlUWR6j*C40`'[\xtE;6EEQq)/נ8[g,=x/_Ζ-[y7B֊3f ,O7 cȐ!L6 4shIԽuVx fΜIKK HҜro G nN+E,0IhQQfi~TH x6I:ޞ{IGj'OFujkksK,aq,91 Atp8m;#kf䂂jkkOΥ^;6²,ƍG*"oh{$S&ގ.n* bӕjDRtvj/dHAcKYz2aB0opF}&%RX*a;.>Ӥ lQěsϑyGmr衇R__OGG>]4~zFioo笳΢aÆxbsfΜɠAq'W,/)|AU!'b&4JobZh_%R5]2D4H۠hMM:q5fڿj8iQԌl fcu<=s+C<Ii_E̗ Oi&~_x5,i:,\_'? lܸ1+)--a >\d* <ܟ5UF5[ь*IV:.]ahZE u=B"- hh،k+Q{0L?.86* @d* : ┏?A "$io0AI-4~c_.hV%L7=bA&0`@.DIWOꭻ|:Yɝ/XC2̹k*4nF.$Iisx1Fq1#A̎v0PUB]o{XÇN'q , (m+h70C!zmo\G! Q 1IuP4p4o s/_C ffQW_{g;uys(455qyՕu۶sd]\d;t]WVV?)hmo.(F 15 EhFyeq`N=IOW .d>Oniy oK﮸e{%%AaGNc­,y2JPtwF ##yB(ʲ!9*I<%etT;+].tJI N"n|hI:?PEc†af***:u*?0r /fΜ9K|SOe1믿BTU݉|UUرcu˗gV]uq)<4#ήnB :)? 󇅛pQ ,z`;gC tל최!CYYNǯoSIu۸4)C\P4q=Up2~Fa-^idx)y7=aE~a֬Yա*~!+r,_> seѿʕ+4`qii!.bOTA4n@GO% -zڢO@53 1EP2ۛ w*UP kW.f(tG(X]c04TM# T@<GUT4U\M(J\7-n@Q TMPsIӳX7=SrȒD":::xd͌7Nxoߎi>L$H7n+V![VVFss3|N>S{.Q4[Moږ :_#OVN݈a,xk!ayCUgR?.eb6~l'( ڐ#@cs#ᰟG}?+.bB K7=;|B!˗/m۶DBe`t:ԩSYz5 .c& Xf v~{&?pꩧoPP8침b6tt ߇ 2;dTܻyX̽T j~_Ȥh2D- [0}**)BE%X L:((8ߟ2.F 5GJQLb9IEyc'A+뷛JPU0(,,`0ײq*B20 G:t:믿Nee%MMM%|h(-5).b8_I4qaEp<dC3(4n`j"8na@æZFV0tؼe m{l&|5<մzsfWkǁT%mQ҃ %($Dr<Դ"=^Nj&Ɓ@rC7p<"!<0|XοX0>Dsg:y++-}:̝;>" .쓝H7[Y"k666??<lذ4줺g}[o+Cq]0mK._~c9&we1B:GP=nh~SEQ 4lN)(LNet(:Aӏ/ac+5P_Yg-YBN)*HD"ii0ПB"UT ,Of8Hiå*{X~=#GdgȐ!TWW{窽~ڔmD"-[X`˖-cҥTTTPUU_LaaaerT*[n!d;<ǭG,3'y6mDWWׯ'L2x\E6bW\qSNn EqƎ{w'D)IGNGViH8hJ%QGSu|Z >=")^A$TWJdܡzH>^8Ũ1#QPq3 fb}زt AU&t]'͆5Q?%TUV,JӴdBM7Z(QGiii!N2Iuvv/=#F`ќ}ٔ3f +Vƫ*MdժUlݺNJ44͜ne,;C*Yn]n`|,X(,,<ϟ=ôiӈFA(xK/[<-VXA]]]},Ɵ'F{k+'[>T8QRr`N/ QPA (\ņz)D".*D/AL‚&4J)) +*Ak$Ulް=%6xxxn& Ct<㿪'tR2+=+Odo? 쓲(gJd{4tK n@Ɩ L0̪5WPŔ|,_;6Go,$8pزY|m&%4G)) m⣥+ 4D $z#t <µ ,7SSؾ*(\(I z5:,\1CnBMN)tD9X|Ӊ7ֳ|ǔXO8Ʀ:S&}K1{)' =8㿂4 [o;O>d߇0(6mbӦMI*eee\p}4זvq UD:gq.wժUL6-'e3n瞎CS\D\ U3-&zxh{7P0ŒuZ8i%JSQ˖u=(ΆkPu#:ebh(A 9nFUAB8?pQS=x~-[AQ(.."ͯ W]{%?xTNv#Fd ᆛo␃`\w(),bҔqs| w$KߛϙV:;@~pq$N>\9T<ʱ}ٲe'?94g}M<`0˒;%h4JQQFoNOsȳgdF;1bDf;cY1g "+gI#{IM{{;uCزm;V2NUUwqGEqxꩧ8c)**Jmm-6lA&Uc0S oQVVĉwvQG+S4~s5N<-*=]QT=CA?|H^2v&P4dW( m=@w;ںAx%$hGMzX(bA@t)*OT zyKsأ'~u]Uzb %z:X] XPY^mAe}D=?>>?m_ط3NW4OK~䤀E7 &jEOs*++Yr%'NIJ> >'23Qр CoeApm˹ ptFcGVg8_h{yoV7|nV\r-59<蠃{sɄ;yK7>~*PQ\ncb;T O|?I---L4)i3l0C=D gy'|ŋsw3o<~4> cԨQX"+gyi#Gg?&Lh4⃖eѯ6*J(,*'"0?i)B8e˖qUWr|/؍yoq|ժUxǀ6lmmm=￟OZ^x.(vG@fRe5eee seYR):;;ikkx6}s>\ Ys_p%_ƀ}rE#m8⺮xgKRb۶HaY綳k<>^ҽ- W~uE.l)/+-r@~SO?]TǗI͐:X?ʔ #ȅW"K@&L;>B /a#/Ff&vʉ}?/{c?JPMO=BJ*]rgȱG" !aHgړ3O;Q5GěGyԣޙw&>~T[ZwpP/|M)dҕ2a>',s W_)r=Nm졻ٯ ?2KN2)ygK2t#DD$H9g~W;=9WY<+n@3WnrăAth~5tةlDqYLNʡ4l;'d&8nڀ˺%( g>Fg[3| Uj|/o]Uxs?</Y$Wi߿gtʏqpڀ$A8#>uu {oΑ_ kʶt"#.;Ld؈1^]Xk/9[n/5ᓦb)?H]iu7Z U~ Nߞ.)L?G΋gӶڮ@h2ʼn6 u""RQZ$.g+#kgB'&%AiILL!^}O~sU #{Iyy0b !s27e`?6b?Kmm uݢiLqR[@:[[;o\2N"!rɹ:f(ЃE3rk|s7e#䉿?=yOwx:hsWn-7]/M_g3xw~#Nˎm|ǝ~ɨ!%R3PvQȃ@V,#nj|rmʰo,;ܝyF ۭ+'_a.uoȌs r?xg\KT:7g?!=Ds ]O;[,* 7\}z՗],<{(_| ュU;}>{^zI`tlضa9/,-}5k55*O"pX9i""0}d\0,?񕢩=|\u]%ѸIN><WK(c7g?&>m?4eА%ֺ!cZ~OUusȷO8BByrQwÆ =1[.<7#?K νn͒pX<ב|[mUA19{?͝wڱˠ%KEټ^.N9g^_&p#rDjk3dr-fITF|2z3 ȖGȃ3'<3""2'@2kFFܷV o11=?/{l_/(kW,xҖ7EĖw=( D0.‘L6;nED!<ϯǗyQ}Iޭb[. nWS$@ JB4W{ormvk;' !r۽ٙgS~˰471.)T uD;wLJNr"H$jy{[ Cgd`̻V_,vۿV=ܮEEuÖpM H ~d:pŰ,rymBTO2$e^}8㢫XzmZvl^s=˲eYfJCS @oƝw_G3Yx&/~sy{xdF>yfy#>WVwl,YW _`}ajV\ƫƾ# ^U>||Er'ذ-ۯ{VmY=^~C}QU{n;Ss"ljg[sC>]٥'aԣĕW^!uBS e.qW j_+9Y<(UغZ,^'J *jb[/ @\u㟺%+|¸U θuU{Ľ#{iqqG.FMX@Xbg_ďj*qrfjċn~:[bЄŗ_|.{̫o!cwqϹ@w~/ #RU:`B+}.ֹs/+/Q>0a !<βwhnOvGn75ijLx@M>e]J κ6wÖx_r ĐAC jcbUŽ2kT;qUO X.2yKEu7!H)&mbGqϴB1__??W~y*.2LqS]] {EQz[dA#ŕ#Z2]rDjf(o{!A vسks5E!Q< 2G0`&^ RMAN ~UF[+Oj6EaN66_B; `R忿 g,GIH4 1=Ss։SYU\oga#oҳg֭^e˙2u2.&Ά=1տjL/ɷ^}Y 3O>UW\EwN9V [4ǔS7 /3O9~P>+]UdM?P =D7gq-n~NvG7>(-)UXd)SN7#XS@U,3?a%d^|Ĝ[mBmmY颕 u_Ա]sۢL=MNJ^A u]Sy]{{q}/gzٯ'=zeƌd`GS2 3fP=vm| =l%]>“Oaq$3c g{Bsqԉp&nr o $@ $@ o"o $@ $@jH[̄T "n-!Ih4}YD;BtiX HoGHq)%(In"0F@! ԓnKjC;~kd9dз}гg w.$ ыxE4G9dnxe2bF$Ŵ:BTUMN!I(m[%2+m`HM]$!P- wqJN<;,uǝ@t5XvTh>VJVm,a%1]tIEO an`'NewICb*$ r5ӧW{kxtֻ<F,C.$C&HrQdh,H8vlv^o+@޽qE444nz\.'Ç ZDSV>U|7sW| S K ~|,\DVaGUN #I:VL]BӁ㢹G,&ڬ( UQZTUFUUz}ES(#Xp=of{os-7_<Ow":뀃Ч'KSسN0:Io?{]~p9w/Ǡ(RBIȲ 8ؿi-8>G@0_|96%LLl]{Yq{5d${ $_ q+ KKYe >/")+ݻwaZfo4¬X~t5M,*4|v Sa0M(!ɢ,i 5|iL4eϞJ4JZj:a+IOFv;*‘66m^Je&dY"bV\yHLFYh C7q:]mNnFcc<ȊIRpT0qaHZb,_?4M!-#֖VbQ;iiՇ.bXlBbQjkf"$?DFTH(H@Sf0 @0*a"#cu1^8YKeTWa$kd5Bnmh>l(+VJܼx:`Kˈvf\)Pbo:0]74SPBd=6M%b@2:#ҡ?^'j$ 'ՓKbDu47pӮIy\]TVK2E7Fq[Crrv5HN, ik b 4rr߿?ҧ8Y4s_ex|WdggR\RDYyO;Cf*FxD#qk02 x>**2hP22:_=LaEJBͨZ-躊'9I"-z_#m(vn7 At#aF  (Dkk3%q՗ڇOQ; kY&<4x#ҳ37 582z` l*I u(#R"ģ:iA= $4*b%dCBuX2j bm/Du $O;?v!lD}UȲNsK .L)sn(nQvBuHM6mm$+=ZM^\7C D-geD_H(F}ڵ"NwbӜm.\LIvXd1 <_QT+ᨛuZfFo.}Ķ 4.wX=U dSk'emX, IIC}=Ng2vDX~4=! aDVH&/V l"㶴[& Q[LL71u jX% Ţ)lV0:Pm?G1)JAFv}RmsvQIdt:4F B P(aD:B#nGӴM{ej$9^$ SjČG}6Dk$4 dfy©r;w) '+HAxM4e+yx'((FM $ @E4m.޽͔"L$.rkF1sSi#X6dY1B*iąf`2PdP,\n$%=,vH4IIM!b 䤡e}شi#C")Q#L>j Eع]Q5'˗f2~( 0n=rA2IOK#œBjj*B!%'7}k4 =lv+8INLX,p ۃ@ 1$~?XYbL @@"Zc&,PcINkGRn6uulCQ d<@0VGFz&?7SrrxznJʷouIo`F{tBtϟ1 ÈVEQp:RUUEFFhK?ah'ћ(OgVE\IcVyMs|0 5?%fȫEx \*n>'%^YF\qŕ[>}Я_ʰ;lf{%GdYGL S_Qw47tldقM<)NS<0o$9F$$+;C4 ,S\kYMUd;6JFdRQda0@h=A(N7hQlIOK؀$%%Ir@-G)4z3h!| t=L,ڊdWMT0iգ pڵ0e$iL _"}*ϻuj bѐ%֦* ](S`&ua?`*NbzzLCSlX-6)NdTh#OC&Sklx}]鑖U3X&/*Uvn#g{nhk \[uuu p aÆo%dРA8N}Q8, i~+⣃nGUUZ[[IJJqݸ\@og{9̃MtDx .a\v,Ҟ\COnլ\>~,sߚ*DsаÜ@+fq#mL44֯_K>gD5clن@ac:$%{hm]HLPHMԺi*[lW&.5נGde呓2X@CC=i_906C]}#V-n5US[MvN6H`[珠GT'GQtjkhӷEIUŊ)SD8]EPR\1@׃TUCe JHNa{.23SY4@uhLe|=/Vވ3AuU K̳g`hH _>o+Æ0A2M0Lb40PTh$fw`Q(m0vaȠ۰X(oʰc{(ATn!3EłUvowF (:6! ~M$ArYC9*a$@TnA:_\s5y|]nwmmm<p 4PYYu]#ʹK +O裏n[oQFqi]wŹKFFF9Y8'̽p݄B!l6gK.a޽<ȲOmm-.}555p tTgzhMhXS tpE,))Hko :obe"B:|2-$'%޸P59rvgyLNUf׮}|9w>)ad$ hmΝ8|T,D"Qt#l~֭F4"6j@`rS=~uu XQT łȄBa4B[(DM P_- F4 TetkgdqUW0w]&27^}#9˵ x)L}} 8lB}]Əeƌ47Pc⤾{0⠁(,ĉihhaMۇݥ!R sQddK&z/Vo-T[FEš8Z@ 3;ق?݊V'䍐>6Et]'// 2n8.2}N"( @>oO>SYF;[o'Yf1~xjjj+9蠃838sضm&Mbʔ)]vMN4ep8B,X~ /}̴i8_Orr2s\r ,˝oh$Sr ގ+%q)Wym>.%P'/v<3NLffr$݁"9كghYeFZٲuT40|^ E5<W#Lo(bD"A<Q[SCSS#6͂D5\Vǝn! cX# )1 " G8㬳 Zؿw^r! MȪҲF Ie/XVLvڋfQp8촴xQU+Y.6ZZ] A^^>MMMۻ Łj%31Q|NCc-H}qY'K $k@+Z9$O(2H*)P$ Iu_0$!qo.p**+طg'V`+}1[[Y`u UBuQbtS2zTi*NqNJio0S0d|7e Bl޼SO=~O<rw._s5\#[':ӧO#O>L>c=޽{w~#//X,֩4MBP$I
  • \ref acquisition
  • \ref tracking
  • \ref decoding
\li \ref observables \li \ref pvt \li \ref output_filter \section overview Overview GNSS-SDR provides an interface to different suitable RF front-ends and implements all the receiver chain up to the navigation solution. Its design allows any kind of customization, including interchangeability of signal sources, signal processing algorithms, interoperability with other systems, output formats, and offers interfaces to all the intermediate signals, parameters and variables. The goal is to write efficient and truly reusable code, easy to read and maintain, with fewer bugs, and producing highly optimized executables in a variety of hardware platforms and operating systems. In that sense, the challenge consists of defining a gentle balance within level of abstraction and performance. GNSS-SDR runs in a personal computer and provides interfaces through USB and Ethernet buses to a variety of either commercially available or custom-made RF front-ends, adapting the processing algorithms to different sampling frequencies, intermediate frequencies and sample resolutions. This makes possible rapid prototyping of specific receivers intended, for instance, to geodetic applications, observation of the ionospheric impact on navigation signals, GNSS reflectometry, signal quality monitoring, or carrier-phase based navigation techniques. \image html overview.png \image latex overview.png "Overview" width=12cm As signal inputs, it accepts: \li Raw data file captured with a data grabber (digitized at some intermediate frequency or directly at baseband). \li Any suitable RF configuration that can be driven by the Universal Software Radio Peripheral Hardware Driver (UHD). This includes all current and future Ettus Research products. The USRP1 + DBSRX 2.2 daughterboard is an example of working configuration for GPS L1 C/A and Galileo E1B and E1C signals. \li The GN3S v2 USB dongle (GN3S v3 might work with small modifications). \li Experimentally, with some USB DVB-T dongles based on the Realtek RTL2832U chipset. \li For mathematical representations of the targeted signals, check out the \ref the_signal_model page. As outputs, it provides: \li Dump of intermediate signals (configurable by the user) \li The processing is logged at a system temporary folder (usually, /tmp) \li Observables in form of RINEX file (experimental) \li Navigation message data in form of RINEX file \li Position, Velocity and Time solution in KML format and NMEA \section build Building GNSS-SDR In principle, GNSS-SDR can be built in any Unix-like system. In practice, it depends on being able to install all the required dependencies. See the building guide page for details about the project's dependencies and build process. Mainly, it consists on installing GNU Radio plus some few more libraries: \li Gflags, a library that implements commandline flags processing, \li Glog, a library that implements application-level logging, \li Armadillo, a C++ linear algebra library, \li Googletest, Google's framework for writing C++ tests (requires definition of the GTEST_DIR variable), and, optionally, \li Gperftools, which provides fast, multi-threaded malloc() and performance analysis tools. After all dependencies are installed, clone the GNSS-SDR repository: \verbatim $ git clone git://git.code.sf.net/p/gnss-sdr/cttc gnss-sdr \endverbatim This will create a folder named gnss-sdr with the following structure: \verbatim |-gnss-sdr |---build <- where gnss-sdr is built |---cmake <- CMake-related files |---conf <- Configuration files. Each file represents one receiver. |---data <- Populate this folder with your captured data. |---docs <- Contains documentation-related files |---drivers <- Drivers for some RF front-ends |---firmware <- Firmware for some front-ends |---install <- Executables |---src <- Source code folder |-----algorithms |-------PVT |-------acquisition |-------channel |-------conditioner |-------data_type_adapter |-------input_filter |-------libs |-------observables |-------output_filter |-------resampler |-------signal_source |-------telemetry_decoder |-------tracking |-----core |-------interfaces |-------libs |-------receiver |-------system_parameters |-----main |-----tests |-----utils <- some utilities (e.g. Matlab scripts) \endverbatim You are now ready to build GNSS-SDR by using CMake as building tool: \verbatim $ cd gnss-sdr/build $ cmake ../ $ make \endverbatim If everything goes well, three new executables will be created at gnss-sdr/install, namely gnss-sdr, volk_gnsssdr_profile and run_tests. You can run them from that folder, but if you prefer to install gnss-sdr on your system and have it available anywhere else, do: \verbatim $ sudo make install \endverbatim This will make a copy of the conf/ folder into /usr/local/share/gnss-sdr/conf for your reference. We suggest to create a working directory at your preferred location and store your own configuration and data files there. You can create the documentation by doing: \verbatim $ make doc \endverbatim from the gnss-sdr/build folder. In both cases, Doxygen will generate HTML documentation that can be retrieved pointing your browser of preference to gnss-sdr/docs/html/index.html. There are two more extra targets available. From the gnss-sdr/build folder: \verbatim $ make doc-clean \endverbatim will remove the content of previously-generated documentation and, if a LaTeX installation is detected in your system, \verbatim $ make pdfmanual \endverbatim will create a PDF manual at gnss-sdr/docs/GNSS-SDR_manual.pdf. Please note that the PDF generation requires some fonts to be installed on the host system. In Ubuntu 12.10, those fonts do not come by default. You can install them by doing: \verbatim $ sudo apt-get install texlive-fonts-recommended \endverbatim and then run cmake ../ and make pdfmanual again. \subsection debug_and_release Debug and Release builds By default, CMake will build the Release version, meaning that the compiler will generate a faster, optimized executable. This is the recommended build type when using a RF front-end and you need to attain real time. If working with a file (and thus without real-time constraints), you may want to obtain more information about the internals of the receiver, as well as more fine-grained logging. This can be done by building the Debug version, by doing: \verbatim $ cd gnss-sdr/build $ cmake -DCMAKE_BUILD_TYPE=Debug ../ $ make $ sudo make install \endverbatim \subsection updating_gnss-sdr Updating GNSS-SDR If you checked out GNSS-SDR some days ago, it is possible that some developer had updated files at the Git repository. You can update your local copy by doing: \verbatim $ git checkout next $ git pull origin next \endverbatim Before rebuiling the source code, it is safe (and recommended) to remove the remainders of old builds: \verbatim $ cd gnss-sdr/build $ sudo make uninstall $ rm -rf * \endverbatim You can also check The Git Book for more information about Git usage. \section using_gnss-sdr Using GNSS-SDR With GNSS-SDR, you can define you own receiver, work with captured raw data or from a RF front-end, dump into files intermediate signals, or tune every single algorithm used in the \ref signal_processing. All the configuration is done in a single file. Those configuration files reside at the gnss-sdr/conf folder. By default, the executable gnss-sdr will read the configuration available at gnss-sdr/conf/gnss-sdr.conf. You can edit that file to fit your needs, or even better, define a new my_receiver.conf file with your own configuration. This new receiver can be done by invoking gnss-sdr with the --config_file flag pointing to your configuration file: \verbatim $ gnss-sdr --config_file=../conf/my_receiver.conf \endverbatim You can see a guide of available implementations at gnss-sdr/conf/master.conf. That folder contains other working examples as well. If you have a working configuration and want to share it will others, please email it to the GNSS-SDR developers mailing list and we will be happy to upload it to the server. You can use a single configuration file for processing different data files, specifying the file to be processed with the --signal_source flag: \verbatim $ gnss-sdr --config_file=../conf/my_receiver.conf --signal_source=../data/my_captured_data.dat \endverbatim This will override the SignalSource.filename specified in the configuration file. You can get a complete list of available commandline flags by doing: \verbatim $ gnss-sdr --help \endverbatim For general usage of commandline flags, see how to use Google Commandline Flags. \section control_plane Control plane GNSS-SDR's main method initializes the logging library, processes the command line flags, if any, provided by the user and instantiates a ControlThread object. Its constructor reads the configuration file, creates a control queue and creates a flowgraph according to the configuration. Then, the program's main method calls the run() method of the instantiated object, an action that connects the flowgraph and starts running it. After that, and until a stop message is received, it reads control messages sent by the receiver's modules through a safe-thread queue and processes them. Finally, when a stop message is received, the main method executes the destructor of the ControlThread object, which deallocates memory, does other cleanup and exits the program. The GNSSFlowgraph class is responsible for preparing the graph of blocks according to the configuration, running it, modifying it during run-time and stopping it. Blocks are identified by its role. This class knows which roles it has to instantiate and how to connect them. It relies on the configuration to get the correct instances of the roles it needs and then it applies the connections between GNU Radio blocks to make the graph ready to be started. The complexity related to managing the blocks and the data stream is handled by GNU Radio's gr::top_block class. GNSSFlowgraph wraps the gr::top_block instance so we can take advantage of the \ref gnss_block_factory, the configuration system and the processing blocks. This class is also responsible for applying changes to the configuration of the flowgraph during run-time, dynamically reconfiguring channels: it selects the strategy for selecting satellites. This can range from a sequential search over all the satellites' ID to smarter approaches that determine what are the satellites most likely in-view based on rough estimations of the receiver position in order to avoid searching satellites in the other side of the Earth. The Control Plane is in charge of creating a flowgraph according to the configuration and then managing the modules. Configuration allows users to define in an easy way their own custom receiver by specifying the flowgraph (type of signal source, number of channels, algorithms to be used for each channel and each module, strategies for satellite selection, type of output format, etc.). Since it is difficult to foresee what future module implementations will be needed in terms of configuration, we used a very simple approach that can be extended without a major impact in the code. This can be achieved by simply mapping the names of the variables in the modules with the names of the parameters in the configuration. \subsection configuration Configuration Properties are passed around within the program using the ConfigurationInterface class. There are two implementations of this interface: FileConfiguration and InMemoryConfiguration. FileConfiguration reads the properties (pairs of property name and value) from a file and stores them internally. InMemoryConfiguration does not read from a file; it remains empty after instantiation and property values and names are set using the set property method. FileConfiguration is intended to be used in the actual GNSS-SDR application whereas InMemoryConfiguration is intended to be used in tests to avoid file-dependency in the file system. Classes that need to read configuration parameters will receive instances of ConfigurationInterface from where they will fetch the values. For instance, parameters related to SignalSource should look like this: \verbatim SignalSource.parameter1=value1 SignalSource.parameter2=value2 \endverbatim The name of these parameters can be anything but one reserved word: implementation. This parameter indicates in its value the name of the class that has to be instantiated by the factory for that role. For instance, if our signal source is providing data already at baseband and thus we want to use the implementation Pass_Through for module SignalConditioner, the corresponding line in the configuration file would be \verbatim SignalConditioner.implementation=Pass_Through \endverbatim Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in INI format). \subsection gnss_block_factory GNSS block factory Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called GNSSBlockFactory. This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration enables extending the application capacities in a high degree. It also allows to produce fully customized receivers, for instance a testbed for acquisition algorithms, and to place observers at any point of the receiver chain. \section signal_processing Signal Processing plane GNU Radio's class gr::basic_block is the abstract base class for all signal processing blocks, a bare abstraction of an entity that has a name and a set of inputs and outputs. It is never instantiated directly; rather, this is the abstract parent class of both gr::hier_block2, which is a recursive container that adds or removes processing or hierarchical blocks to the internal graph, and gr::block, which is the abstract base class for all the processing blocks. \image html ClassHierarchy.png \image latex ClassHierarchy.png "Class hierarchy of signal processing blocks" width=12cm A signal processing flow is constructed by creating a tree of hierarchical blocks, which at any level may also contain terminal nodes that actually implement signal processing functions. Class gr::top_block is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the program: run(), start(), stop(), wait(), etc. A a subclass called GNSSBlockInterface is the common interface for all the GNSS-SDR modules. It defines pure virtual methods, that are required to be implemented by a derived class. Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows multiple implementations sharing a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one, and makes them interchangeable. Hence, we let the algorithm vary independently from the program that uses it. \subsection signal_source Signal Source The input of a software receiver are the raw bits that come out from the front-end's analog-to-digital converter (ADC). Those bits can be read from a file stored in the hard disk or directly in real-time from a hardware device through USB or Ethernet buses. The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized implementation of the whole receiver, this module also allows to read samples from a file stored in a hard disk, and thus processing without time constraints. Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate and number of bits per sample, that must be specified by the user in the configuration file. This module also performs bit-depth adaptation, since most of the existing RF front-ends provide samples quantized with 2 or 3 bits, while operations inside the processor are performed on 32- or 64-bit words, depending on its architecture. Although there are implementations of the most intensive computational processes (mainly correlation) that take advantage of specific data types and architectures for the sake of efficiency, the approach is processor-specific and hardly portable. We suggest to keep signal samples in standard data types and letting the compiler select the best library version (implemented using SIMD or any other processor-specific technology) of the required routines for a given processor. Example: FileSignalSource The user can configure the receiver for reading from a file, setting in the configuration file the data file location, sample format, and the sampling frequency and intermediate frequency at what the signal was originally captured. \verbatim ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz] SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz] \endverbatim Example: UhdSignalSource The user may prefer to use a UHD-compatible RF front-end and try real-time processing. For instance, for a USRP1 + DBSRX daughterboard, use: \verbatim ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz] SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz] SignalSource.gain=60 ; Front-end gain in dB SignalSource.subdevice=B:0 ; UHD subdevice specification (for USRP1 use A:0 or B:0) \endverbatim Other examples are available at gnss-sdr/conf. \subsection signal_conditioner Signal Conditioner The signal conditioner is in charge of resampling the signal and delivering a reference sample rate to the downstream processing blocks, acting as a facade between the signal source and the synchronization channels, providing a simplified interface to the input signal. In case of multiband front-ends, this module would be in charge of providing a separated data stream for each band. \subsection channel Channel A channel encapsulates all signal processing devoted to a single satellite. Thus, it is a large composite object which encapsulates the \ref acquisition, \ref tracking and \ref decoding modules. As a composite object, it can be treated as a single entity, meaning that it can be easily replicated. Since the number of channels is selectable by the user in the configuration file, this approach helps improving the scalability and maintainability of the receiver. This module is also in charge of managing the interplay between acquisition and tracking. Acquisition can be initialized in several ways, depending on the prior information available (called cold start when the receiver has no information about its position nor the satellites almanac; warm start when a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver was tracking a satellite and the signal line of sight broke for a short period of time, but the ephemeris and almanac data is still valid, or this information is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to confirm the presence of the satellite, or declaring the satellite present. In the latter case, acquisition process should stop and trigger the tracking module with coarse estimations of the synchronization parameters. The mathematical abstraction used to design this logic is known as finite state machine (FSM), that is a behavior model composed of a finite number of states, transitions between those states, and actions. For the implementation, we used the Boost.Statechart library, which provides desirable features such as support for asynchronous state machines, multi-threading, type-safety, error handling and compile-time validation. The abstract class ChannelInterface represents an interface to a channel GNSS block. Check Channel for an actual implementation. \subsubsection acquisition Acquisition The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift with respect to the nominal IF frequency, and a delay term which allows the receiver to create a local code aligned with the incoming code. AcquisitionInterface is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, that may vary depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as adapters. These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks derived from gr::block, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications. Moreover, it adds still another layer of abstraction, since each given acquisition algorithm can have different implementations (for instance using different numerical libraries). In such a way, implementations can be continuously improved without having any impact neither on the algorithm interface nor the general acquisition interface. Check GpsL1CaPcpsAcquisition and GalileoE1PcpsAmbiguousAcquisition for examples of adapters from a Parallel Code Phase Search (PCPS) acquisition block, and pcps_acquisition_cc for an example of a block implementation. The source code of all the available acquisition algorithms is located at: \verbatim |-gnss-sdr |---src |-----algorithms |-------acquisition |---------adapters <- Adapters of the processing blocks to an AcquisitionInterface |---------gnuradio_blocks <- Signal processing blocks implementation \endverbatim The user can select a given implementation for the algorithm to be used in each receiver channel, as well as their parameters, in the configuration file: \verbatim ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: Acquisition.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. ;Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition0.threshold=0.005 ;Acquisition0.pfa=0.001 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition1.threshold=0.005 ;Acquisition1.pfa=0.001 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false \endverbatim \subsubsection tracking Tracking When a satellite is declared present, the parameters estimated by the acquisition module are then fed to the receiver tracking module, which represents the second stage of the signal processing unit, aiming to perform a local search for accurate estimates of code delay and carrier phase, and following their eventual variations. Again, a class hierarchy consisting of a TrackingInterface class and subclasses implementing algorithms provides a way of testing different approaches, with full access to their parameters. Check GpsL1CaDllPllTracking or GalileoE1DllPllVemlTracking for examples of adapters, and Gps_L1_Ca_Dll_Pll_Tracking_cc for an example of a signal processing block implementation. There are also available some useful classes and functions for signal tracking; take a look at Correlator, lock_detectors.h, tracking_discriminators.h or tracking_2nd_DLL_filter.h. The source code of all the available tracking algorithms is located at: \verbatim |-gnss-sdr |---src |-----algorithms |-------tracking |---------adapters <- Adapters of the processing blocks to a TrackingInterface |---------gnuradio_blocks <- Signal processing blocks implementation |---------libs <- libraries of tracking objects (e.g. correlators, discriminators, and so on) \endverbatim The user can select a given implementation for the algorithm to be used in all the tracking blocks, as well as its parameters, in the configuration file: \verbatim ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm Tracking.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; \endverbatim \subsubsection decoding Decoding of the navigation message Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites (also known as ephemeris) and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to error correction). Navigation data bits are structured in words, pages, subframes, frames and superframes. Sometimes, bits corresponding to a single parameter are spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for error control an others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and interleaving, depending on the system. All this decoding complexity is managed by a finite state machine implemented with the Boost.Statechart library. The common interface is TelemetryDecoderInterface. Check GpsL1CaTelemetryDecoder for an example of the GPS L1 NAV message decoding adapter, and gps_l1_ca_telemetry_decoder_cc for an actual implementation of a signal processing block. Configuration example: \verbatim ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false \endverbatim See the \ref reference_docs for more information about the signal format. \subsection observables Observables GNSS systems provide different kinds of observations. The most commonly used are the code observations, also called pseudoranges. The pseudo comes from the fact that on the receiver side the clock error is unknown and thus the measurement is not a pure range observation. High accuracy applications also use the carrier phase observations, which are based on measuring the difference between the carrier phase transmitted by the GNSS satellites and the phase of the carrier generated in the receiver. Both observables are computed from the outputs of the tracking module and the decoding of the navigation message. This module collects all the data provided by every tracked channel, aligns all received data into a coherent set, and computes the observables. The common interface is ObservablesInterface. Configuration example: \verbatim ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat \endverbatim \subsection pvt Computation of Position, Velocity and Time Although data processing for obtaining high-accuracy PVT solutions is out of the scope of GNSS-SDR, we provide a module that can compute a simple least square solution and leaves room for more sophisticated positioning methods. The integration with libraries and software tools that are able to deal with multi-constellation data such as GPSTk or gLAB appears as a viable solution for high performance, completely customizable GNSS receivers. The common interface is PvtInterface. For instance, in order to use the implementation GpsL1CaPvt, add to the configuration file: \verbatim ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false \endverbatim This implementation allows tuning of the following parameters: \verbatim PVT.averaging_depth=10 ; Number of PVT observations in the moving average algorithm PVT.flag_averaging=true ; Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.output_rate_ms=100 ; Period in [ms] between two PVT outputs PVT.display_rate_ms=500 ; Position console print (std::out) interval [ms]. PVT.dump=false ; Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump_filename=./PVT ; Log path and filename without extension. \endverbatim \subsection output_filter Output filter (To be completed) \section license About the software license GNSS-SDR is released under the General Public License (GPL) v3, thus securing practical usability, inspection, and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals. The GPL implies that: \li Copies may be distributed free of charge or for money, but the source code has to be shipped or provided free of charge (or at cost price) on demand. The receiver of the source code has the same rights meaning he can share copies free of charge or resell. \li The licensed material may be analyzed or modified. \li Modified material may be distributed under the same licensing terms but do not have to be distributed. That means that modifications only have to be made available to the public if distribution happens. So it is perfectly fine to take the GNSS-SDR source code, modify it heavily and use it in a not distributed application / library. This is how companies like Google can run their own patched versions of Linux for example. But what this also means is that non-GPL code cannot use GPL code. This means that you cannot modify / use GNSS-SDR, blend it with non-GPL code, and make money with the resulting software. You cannot distribute the resulting software under a non-disclosure agreement or contract. Distributors under the GPL also grant a license for any of their patents practiced by the software, to practice those patents in GPL software. You can sell a device that runs with GNSS-SDR, but if you distribute the code, it has to remain under GPL. \section publications Publications and Credits If you use GNSS-SDR to produce a research paper or Thesis, we would appreciate if you reference any of these articles to credit the GNSS-SDR project: \li \anchor Navitec2012 C. Fernández-Prades, J. Arribas, L. Esteve, D. Pubill, P. Closas, An Open Source Galileo E1 Software Receiver, in Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC 2012), ESTEC, Noordwijk, The Netherlands, Dec. 2012. \li J. Arribas, GNSS Array-based Acquisition: Theory and Implementation, PhD Thesis, Universitat Politècnica de Catalunya, Barcelona, Spain, June 2012. \li C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, GNSS-SDR: an open source tool for researchers and developers, in Proc. of the ION GNSS 2011 Conference, Portland, Oregon, Sept. 19-23, 2011. \li C. Fernández-Prades, C. Avilés, L. Esteve, J. Arribas, and P. Closas, Design patterns for GNSS software receivers, in Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010), ESTEC, Noordwijk, The Netherlands, Dec. 2010. DOI:10.1109/NAVITEC.2010.5707981 For LaTeX users, these are the BibTeX cites for your convenience: \verbatim @INPROCEEDINGS{GNSS-SDR12 author = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and L.~Esteve and D.~Pubill and P.~Closas}, title = {An Open Source {G}alileo {E1} Software Receiver}, booktitle = {Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2012)}, year = {2012}, address = {ESTEC, Noordwijk, The Netherlands}, month = {Dec.} } \endverbatim \verbatim @PHDTHESIS{Arribas12, author = {J.~Arribas}, title = {{GNSS} Array-based Acquisition: Theory and Implementation}, school = {Universitat Polit\`{e}cnica de Catalunya}, year = {2012}, address = {Barcelona, Spain}, month = {June} } \endverbatim \verbatim @INPROCEEDINGS{GNSS-SDR11, AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas and C.~Avil\'{e}s and L.~Esteve}, TITLE = {{GNSS-SDR}: An Open Source Tool For Researchers and Developers}, BOOKTITLE = {Proc. of the ION GNSS 2011 Conference}, YEAR = {2011}, address = {Portland, Oregon}, month = {Sept.} } \endverbatim \verbatim @INPROCEEDINGS{GNSS-SDR10, AUTHOR = {C.~{Fern\'{a}ndez--Prades} and C.~Avil\'{e}s and L.~Esteve and J.~Arribas and P.~Closas}, TITLE = {Design patterns for {GNSS} software receivers}, BOOKTITLE = {Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010)}, YEAR = {2010}, address = {ESTEC, Noordwijk, The Netherlands}, month = {Dec.}, note = {DOI:10.1109/NAVITEC.2010.5707981} } \endverbatim \section now_what Ok, now what? In order to start using GNSS-SDR, you may want to populate gnss-sdr/data folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output of a Radio Frequency front-end's Analog-to_Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intemediate frequency (on the order of MHz). Prepare your configuration file, and then you are ready for going to the gnss-sdr/install folder, running ./gnss-sdr, and see how the file is processed. Please ask the Developer Team for a signal sample if you need one, and they will do their best ;-) Another interesting option is working in real-time with a RF front-end. We provide drivers for UHD-compatible hardware (see \ref signal_source), for the GN3S v2 USB dongle and for some DVB-T USB dongles. Start with a low number of channels and then increase it in order to test how many channels your processor can handle in real-time. You can find more information at the GNSS-SDR Documentation page or directly asking to the GNSS-SDR Developers mailing list. You are also very welcome to contribute to the project, there are many ways to participate in GNSS-SDR. If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it. Please do not hesitate to contact them. Enjoy GNSS-SDR! The Developer Team. */ gnss-sdr-0.0.6/docs/doxygen/Doxyfile.in0000644000175000017500000021306112576764164017326 0ustar carlescarles# Doxyfile 1.7.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "GNSS-SDR" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "An Open Source GNSS Software Defined Receiver" # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = @top_srcdir@/docs/doxygen/images/gnss-sdr_logo_round.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = @top_srcdir@/docs # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitiHTalizer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. #SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@/src @top_srcdir@/docs/doxygen/other # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = @top_srcdir@/docs/html \ @top_srcdir@/docs/latex \ @top_srcdir@/cmake \ @top_srcdir@/data \ @top_srcdir@/src/core/libs/supl \ # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = @top_srcdir@/docs/doxygen/images/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. # HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.gnss-sdr.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.gnss-sdr.CTTC # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = CTTC # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.gnss-sdr.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [0,1..20]) # that doxygen will group on one line in the generated HTML documentation. # Note that a value of 0 will completely suppress the enum values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. # USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = @GNSSSDR_USE_MATHJAX@ # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = @GENERATE_PDF_DOCUMENTATION@ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = amsmath,amssymb,amsfonts # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called Helvetica to the output # directory and reference it in all dot files that doxygen generates. # When you want a differently looking font you can specify the font name # using DOT_FONTNAME. You need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, svg, gif or svg. # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = @DOXYGEN_DOT_PATH@ # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gnss-sdr-0.0.6/docs/changelog.Debian0000644000175000017500000000031712576764164016567 0ustar carlescarlesgnss-sdr (0.0.6) unstable; urgency=low * First release that installs on the system and can generate deb packages. -- Carles Fernandez-Prades Wed, 02 Sep 2015 02:03:00 +0100gnss-sdr-0.0.6/docs/changelog0000644000175000017500000000045612576764164015412 0ustar carlescarlesgnss-sdr (0.0.6) unstable; urgency=low * First release that installs on the system and can generate packages. Now 'make package' builds a .deb package in Ubuntu and Linux. * Fixed some linking problems. -- Carles Fernandez-Prades Wed, 02 Sep 2015 02:03:00 +0100gnss-sdr-0.0.6/docs/manpage/0000755000175000017500000000000012576764164015143 5ustar carlescarlesgnss-sdr-0.0.6/docs/manpage/gnss-sdr-manpage0000644000175000017500000000415212576764164020236 0ustar carlescarles.\" Manpage for gnss\-sdr. .\" Contact carles.fernandez@cttc.es to correct errors or typos. .TH gnss\-sdr 1 "2 Sep 2015" "0.0.6" "gnss\-sdr man page" .SH NAME \fBgnss\-sdr\fR \- GNSS Software Defined Receiver. .SH SYNOPSIS \fBgnss\-sdr \-config_file=\fR\fI\fR [OPTION]... .SH DESCRIPTION \fBgnss\-sdr\fR is a Global Navigation Satellite Systems Software Defined Receiver written in C++. It implements all the signal processing chain, taking as input raw samples coming from the output of an Analog\-to\-Digital Converter, and processing them up to the computation of the Position\-Velocity\-Time solution, including the generation of code and phase measurements. \.TP \fBgnss\-sdr\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radio frequency front\-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs. .SH OPTIONS \fBgnss\-sdr\fR takes the following options: .TP \fB\-config_file=\fR\fI\fR Set the configuration file. .TP \fB\-signal_source=\fR\fI\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file). .TP \fB\-log_dir=\fR\fI\fR If defined, overrides the default directory where logs are saved. .TP \fB\-RINEX_version=\fI\fR Specifies the RINEX version (2.11 or 3.02). Default: "3.02". .TP \fB\-version\fR Print program version and exit. .TP \fB\-help\fR Print all the available commandline flags and exit. .SH SEE ALSO .BR volk_gnsssdr_profile (1) \.TP Examples of configuration files available at: ${prefix}/share/gnss\-sdr/conf, where ${prefix} uses to be /usr or /usr/local. \.TP Check http://gnss\-sdr.org for more information. .SH BUGS Please report bugs at https://github.com/gnss-sdr/gnss-sdr/issues .SH AUTHOR Carles Fernandez\-Prades (carles.fernandez@cttc.es) \.TP This software package has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.gnss-sdr-0.0.6/docs/manpage/front-end-cal-manpage0000644000175000017500000000602612576764164021131 0ustar carlescarles.\" Manpage for front\-end\-cal. .\" Contact javier.arribas@cttc.es to correct errors or typos. .TH front\-end\-cal 1 "15 Dec 2014" "0.0.1" "front\-end\-cal man page" .SH NAME \fBfront\-end\-cal\fR \- RF front\-end center frequency and sampling rate calibration tool. .SH SYNOPSIS \fBfront\-end\-cal \-config_file=\fR\fI\fR [OPTION]... .SH DESCRIPTION \fBfront\-end\-cal\fR is a calibration tool for some DVB\-T receivers based on the Taiwan's Realtek RTL2832U chipset, sold in form of USB dongles that allow users to watch over\-the\-air DVB\-T European broadcast television on their personal computers, to be used as GNSS front\-ends. \.TP Normally, those devices send partially\-decoded MPEG transport frames over the USB, but exploiting an undocumented mode of operation of the demodulator chip, the user is able to obtain raw I&Q samples, stream them through USB to a personal computer and then use \fBgnss\-sdr\fR, turning the DVB\-T receiver into a GNSS receiver and delivering position in real\-time. \.TP The crystal oscillator that ships with the RTL2832U family devices exhibits limited accuracy to be used as a GNSS receiver front\-end without previous calibration. \fBfront\-end\-cal\fR implements the algorithm proposed in [1], and it requires Internet access since it retrieves Assisted GPS data from SUPL servers. \.TP \fBfront\-end\-cal\fR is able to work with raw data files or, if there is computational power enough, in real time with suitable radio frequency front\-ends. The whole receiver is defined in a single configuration file, and therefore users can define theirs. .SH OPTIONS \fBfront\-end\-cal\fR takes the following options: .TP \fB\-config_file=\fR\fI\fR Set the configuration file. .TP \fB\-signal_source=\fR\fI\fR If defined, path to the file containing the signal samples (overrides the data file specified in the configuration file). .TP \fB\-log_dir=\fR\fI\fR If defined, overrides the default directory where logs are saved. .TP \fB\-version\fR Print program version and exit. .TP \fB\-help\fR Print all the available commandline flags and exit. .SH SEE ALSO .BR gnss\-sdr (1), volk_gnsssdr_profile (1) \.TP Example of configuration file available at: ${prefix}/share/gnss\-sdr/conf/front\-end\-cal.conf, where ${prefix}$ uses to be /usr or /usr/local. This will be the configuration file used by default if the \fB\-config_file\fR option is not set. \.TP [1] C. Fernandez\-Prades, J. Arribas, P. Closas, \fITurning a Television into a GNSS Receiver\fR, in Proceedings of ION GNSS+, 15\-16 September 2013, Nashville, Tennessee (USA). A draft copy is freely available at http://www.cttc.es/publication/turning\-a\-television\-into\-a\-gnss\-receiver/ \.TP Check http://gnss\\-sdr.org for more information. .SH BUGS No known bugs. .SH AUTHOR Javier Arribas (javier.arribas@cttc.es) \.TP This software has been developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world.gnss-sdr-0.0.6/conf/0000755000175000017500000000000012576764164013530 5ustar carlescarlesgnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_gr_complex_optim_trk.conf0000644000175000017500000002566612576764163023531 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=../data/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=250000000 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 _1C ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.008 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=true ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/front-end-cal.conf0000644000175000017500000001714712576764163017041 0ustar carlescarles; Default configuration file ; You can define your own front-end calibration tool configuration and invoke it by doing ; ./front-end-cal --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### INITIAL RECEIVER POSITIION ###### ; san francisco scenario ;GNSS-SDR.init_latitude_deg=40.74846557442795 ;GNSS-SDR.init_longitude_deg=-73.98593961814200 ;GNSS-SDR.init_altitude_m=329.11968943169342 ; Barcelona CTTC GNSS-SDR.init_latitude_deg=41.27719585553101 GNSS-SDR.init_longitude_deg=1.988782985790802 GNSS-SDR.init_altitude_m=10 ; Mozoncillo ;GNSS-SDR.init_latitude_deg=41.14534824586196 ;GNSS-SDR.init_longitude_deg=-4.187125019737464 ;GNSS-SDR.init_altitude_m=900 ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2000000 ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=true GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.nokia.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=217 GNSS-SDR.SUPL_MNS=7 GNSS-SDR.SUPL_LAC=861 GNSS-SDR.SUPL_CI=40184 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Osmosdr_Signal_Source] SignalSource.implementation=Osmosdr_Signal_Source SignalSource.AGC_enabled=false ;#filename: path to file with the captured GNSS signal samples to be processed ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/cap_-90dBm_IF15_RF40_EzCap.dat ;SignalSource.filename=/media/DATALOGGER_/signals/Agilent GPS Generator/New York/2msps.dat ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4_no_amp.dat SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4_no_amp_mini.dat ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/mozoncillo/cap_mozon_ezcap.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=2000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=2000000 InputFilter.IF=0 InputFilter.decimation_factor=1 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;#threshold: Acquisition threshold Acquisition.threshold=0.015 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=100000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_min=-100000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#maximum dwells Acquisition.max_dwells=15 gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_rtl_tcp_realtime.conf0000644000175000017500000002733212576764163022623 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ GNSS-SDR.internal_fs_hz=1200000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5_1C GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] [Osmosdr_Signal_Source] SignalSource.implementation=RtlTcp_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ SignalSource.sampling_frequency=1200000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end overall gain Gain in [dB] SignalSource.gain=40 ;#rf_gain: Front-end RF stage gain in [dB] SignalSource.rf_gain=40 ;#rf_gain: Front-end IF stage gain in [dB] SignalSource.if_gain=30 ;#AGC_enabled: Front-end AGC enabled or disabled SignalSource.AGC_enabled = false ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;#Address of the rtl_tcp server (IPv6 allowed) SignalSource.address=127.0.0.1 ;#Port of the rtl_tcp server SignalSource.port=1234 ;# Set to true if I/Q samples come swapped SignalSource.swap_iq=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter.sampling_frequency=1200000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter.IF=80558 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;# DISABLED IN THE RTL-SDR REALTIME ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=4 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.015 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=15 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] [GPS_L1_CA_DLL_PLL_Optim_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=true ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_USRP_X300_realtime.conf0000644000175000017500000004010512576764164025214 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_1C_enabled=false GNSS-SDR.SUPL_read_1C_assistance_xml=true GNSS-SDR.SUPL_1C_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_1C_ephemeris_port=7275 GNSS-SDR.SUPL_1C_acquisition_server=supl.google.com GNSS-SDR.SUPL_1C_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) SignalSource.device_address=192.168.40.2 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#RF_channels: Number of RF channels present in the frontend device (i.e. USRP with two frontends) SignalSource.RF_channels=2 ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#subdevice: UHD subdevice specification (for USRP dual frontend use A:0 or B:0 or A:0 B:0) SignalSource.subdevice=A:0 B:0 ;######### RF Channels specific settings ###### ;## RF CHANNEL 0 ## ;#freq: RF front-end center frequency in [Hz] SignalSource.freq0=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain0=50 ;#samples: Number of samples to be processed. Notice that 0 indicates no limit SignalSource.samples0=0 ;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version SignalSource.dump0=false SignalSource.dump_filename0=../data/signal_source0.dat ;## RF CHANNEL 1 ## ;#freq: RF front-end center frequency in [Hz] SignalSource.freq1=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain1=50 ;#samples: Number of samples to be processed. Notice that 0 indicates no limit SignalSource.samples1=0 ;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version SignalSource.dump1=false SignalSource.dump_filename1=../data/signal_source1.dat ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner0.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter0.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter0.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter0.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner1.implementation=Pass_Through ;######### INPUT_FILTER 1 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter1.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter1.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=4 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=1 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=8000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Galileo_E1_nsr.conf0000644000175000017500000000774312576764163021014 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;GNSS-SDR.internal_fs_hz=6826700 GNSS-SDR.internal_fs_hz=2560000 ;GNSS-SDR.internal_fs_hz=4096000 ;GNSS-SDR.internal_fs_hz=5120000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.freq=1575420000 SignalSource.samples=0 ; 0 means the entire file SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1B.count=8 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat Acquisition_1B.item_type=gr_complex Acquisition_1B.if=0 Acquisition_1B.sampled_ms=4 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition_1B.pfa=0.0000008 Acquisition_1B.doppler_max=15000 Acquisition_1B.doppler_step=125 Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.if=0 Tracking_1B.dump=false Tracking_1B.dump_filename=../data/veml_tracking_ch_ Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.fll_bw_hz=10.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Galileo_E1B_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GALILEO_E1_PVT PVT.averaging_depth=10 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump=true PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_L2_Galileo_E1B_Flexiband_realtime_III_1b.conf0000644000175000017500000005042112576764164031303 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/datalogger/L125_III1b_210s.usb #SignalSource.signal_file=/datalogger/captures/flexiband_III_1b_cap1.usb ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. ;#InputFilter0.IF=-205000 InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. ;#InputFilter1.IF=100000 InputFilter1.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels_1B.count=1 Channels_2S.count=1 ;#count: Number of available Galileo satellite channels. ;Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=0 Channel1.signal=1C Channel2.RF_channel_ID=0 Channel2.signal=1C Channel3.RF_channel_ID=0 Channel3.signal=1C Channel4.RF_channel_ID=0 Channel4.signal=1C Channel5.RF_channel_ID=0 Channel5.signal=1C Channel6.RF_channel_ID=0 Channel6.signal=1C Channel7.RF_channel_ID=0 Channel7.signal=1C Channel8.RF_channel_ID=0 Channel8.signal=1B Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S Channel16.RF_channel_ID=1 Channel16.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.008 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0005 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=30 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=false Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.fll_bw_hz=2.0; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; ;# GALILEO E1B ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000005 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=./veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=20; ;######### TELEMETRY DECODER GPS L2 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_2S.decimation_factor=1; ;######### TELEMETRY DECODER GALILEO E1B CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=5; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Mixed_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1a.conf0000644000175000017500000004251212576764164027106 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=false ;SignalSource.signal_file=/datalogger/captures/eclipse/eclipse_IIIa_2.bin SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=true ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter_ch0.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;#InputFilter0.IF=-205000 InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=4 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=true ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter1.IF=-100000 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=4 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=1 Channels_2S.count=1 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;# signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=1 Channel1.signal=2S ;Channel2.RF_channel_ID=0 ;Channel3.RF_channel_ID=0 ;Channel4.RF_channel_ID=0 ;Channel5.RF_channel_ID=0 ;Channel6.RF_channel_ID=0 ;Channel7.RF_channel_ID=0 ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C0.dump=false ;#filename: Log path and filename Acquisition_1C0.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C0.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C0.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C0.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: Acquisition_1C0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C0.threshold=0.002 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C0.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C0.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C0.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C0.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C0.max_dwells=1 ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_2S1.dump=false ;#filename: Log path and filename Acquisition_2S1.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_2S1.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_2S1.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_2S1.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_2S1.threshold=0.0005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_2S1.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_2S1.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_2S1.doppler_step=100 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_2S1.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_2S1.max_dwells=1 ;######### TRACKING CONFIG ############ ;######### TRACKING CHANNEL 0 CONFIG ############ Tracking_1C0.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C0.item_type=gr_complex Tracking_1C0.if=0 Tracking_1C0.dump=false Tracking_1C0.dump_filename=./tracking_ch_ Tracking_1C0.pll_bw_hz=40.0; Tracking_1C0.dll_bw_hz=3.0; Tracking_1C0.fll_bw_hz=10.0; Tracking_1C0.order=3; Tracking_1C0.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 11 CONFIG ############ Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S1.item_type=gr_complex Tracking_2S1.if=0 Tracking_2S1.dump=false Tracking_2S1.dump_filename=./tracking_ch_ Tracking_2S1.pll_bw_hz=2.0; Tracking_2S1.dll_bw_hz=0.5; Tracking_2S1.fll_bw_hz=2.0; Tracking_2S1.order=2; Tracking_2S1.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C0.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C0.dump=false TelemetryDecoder_1C0.decimation_factor=20; TelemetryDecoder_2S1.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S1.dump=false TelemetryDecoder_2S1.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Galileo_E5a_IFEN_CTTC.conf0000644000175000017500000001242512576764163021706 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=50000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ;GNSS-SDR.SUPL_gps_enabled=false ;GNSS-SDR.SUPL_read_gps_assistance_xml=false ;GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com ;GNSS-SDR.SUPL_gps_ephemeris_port=7275 ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com ;GNSS-SDR.SUPL_gps_acquisition_port=7275 ;GNSS-SDR.SUPL_MCC=244 ;GNSS-SDR.SUPL_MNS=5 ;GNSS-SDR.SUPL_LAC=0x59e2 ;GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/captures/Galileo_E5ab_IFEN_CTTC_run1.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=50000000 SignalSource.freq=1176450000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=50000000 InputFilter.IF=-15345000 InputFilter.decimation_factor=1 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_5X.count=4 Channels.in_acquisition=1 Channel.signal=5X ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.signal=5X Channel0.satellite=19 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.signal=5X Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ Channel2.signal=5X Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ Channel3.signal=5X Channel3.satellite=20 ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_5X.dump=false Acquisition_5X.dump_filename=./acq_dump.dat Acquisition_5X.item_type=gr_complex Acquisition_5X.if=0 Acquisition_5X.coherent_integration_time_ms=1 Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF Acquisition_5X.threshold=0.002 Acquisition_5X.doppler_max=10000 Acquisition_5X.doppler_step=250 Acquisition_5X.bit_transition_flag=false Acquisition_5X.max_dwells=1 Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF. ;######### TRACKING GLOBAL CONFIG ############ Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking Tracking_5X.item_type=gr_complex Tracking_5X.if=0 Tracking_5X.dump=false Tracking_5X.dump_filename=./tracking_ch_ Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz] Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz] Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms] Tracking_5X.pll_bw_hz=20.0; Tracking_5X.dll_bw_hz=20.0; Tracking_5X.order=2; Tracking_5X.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Galileo_E1B_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GALILEO_E1_PVT PVT.averaging_depth=100 PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=true; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multisource_Hybrid_short.conf0000644000175000017500000004635012576764164023322 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 Receiver.sources_count=2 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE 0 CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource0.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource0.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource0.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource0.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource0.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource0.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource0.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource0.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource0.dump=false SignalSource0.dump_filename=../data/signal_source.dat ;######### SIGNAL_SOURCE 1 CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource1.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource1.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource1.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource1.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource1.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource1.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource1.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource1.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource1.dump=false SignalSource1.dump_filename=../data/signal_source.dat ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter0.implementation=Ishort_To_Complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter0.sampling_frequency=4000000 InputFilter0.IF=0 ;######### RESAMPLER 1 CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler1.dump=false ;#dump_filename: Log path and filename. Resampler1.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler1.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler1.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler1.sample_freq_out=4000000 ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter1.implementation=Ishort_To_Complex ;######### INPUT_FILTER 1 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter1.sampling_frequency=4000000 InputFilter1.IF=0 ;######### RESAMPLER 1 CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler1.dump=false ;#dump_filename: Log path and filename. Resampler1.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler1.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler1.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler1.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=2 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=2 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS, Galileo ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=1 Channel3.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_Galileo.dump=false ;#filename: Log path and filename Acquisition_Galileo.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_Galileo.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_Galileo.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_Galileo.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_Galileo.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_Galileo.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_Galileo.pfa=0.0000008 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_Galileo.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_Galileo.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_Galileo.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_Galileo.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_Galileo.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_Galileo.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_Galileo.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_Galileo.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_Galileo.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_Galileo.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_Galileo.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_Galileo.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_Galileo.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_Galileo.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_Galileo.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_L2_Flexiband_realtime_III_1b.conf0000644000175000017500000004326012576764164027223 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. InputFilter0.IF=-205000 ;#InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. InputFilter1.IF=100000 ;#InputFilter1.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels_2S.count=8 ;#count: Number of available Galileo satellite channels. ;Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=0 Channel1.signal=1C Channel2.RF_channel_ID=0 Channel2.signal=1C Channel3.RF_channel_ID=0 Channel3.signal=1C Channel4.RF_channel_ID=0 Channel4.signal=1C Channel5.RF_channel_ID=0 Channel5.signal=1C Channel6.RF_channel_ID=0 Channel6.signal=1C Channel7.RF_channel_ID=0 Channel7.signal=1C Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.008 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=5000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=3.0; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0005 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=30 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.fll_bw_hz=2.0; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=20; ;######### TELEMETRY DECODER GPS L2 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_nsr.conf0000644000175000017500000001027212576764163020067 0ustar carlescarles; Sample configuration file for IFEN SX-NSR software receiver front-end ; http://www.ifen.com/products/sx-scientific-gnss-solutions/nsr-software-receiver.html ; This sample configuration is able to process directly .sream binary files ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2560000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Nsr_File_Signal_Source SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream SignalSource.item_type=byte SignalSource.sampling_frequency=20480000 SignalSource.freq=1575420000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=float InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=20480000 InputFilter.IF=5499998.47412109 InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.0075 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=true ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Hybrid_nsr.conf0000644000175000017500000003256612576764163020335 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;GNSS-SDR.internal_fs_hz=6826700 GNSS-SDR.internal_fs_hz=2560000 ;GNSS-SDR.internal_fs_hz=4096000 ;GNSS-SDR.internal_fs_hz=5120000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter.decimation_factor=8 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000002 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B_factor=4; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multisource_Hybrid_nsr.conf0000644000175000017500000004575612576764164022776 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] Receiver.sources_count=2 ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;GNSS-SDR.internal_fs_hz=6826700 GNSS-SDR.internal_fs_hz=2560000 ;GNSS-SDR.internal_fs_hz=4096000 ;GNSS-SDR.internal_fs_hz=5120000 ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE 0 CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource0.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource0.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource0.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource0.freq=1575420000 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource0.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource0.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource0.dump=false SignalSource0.dump_filename=../data/signal_source.dat ;######### SIGNAL_SOURCE 1 CONFIG ############ ;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource1.implementation=Nsr_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource1.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource1.sampling_frequency=20480000 ;#freq: RF front-end center frequency in [Hz] SignalSource1.freq=1575420000 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource1.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource1.samples=0 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource1.dump=false SignalSource1.dump_filename=../data/signal_source.dat ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=float ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter0.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter0.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ ;## Changes the type of input data. ;#implementation: [Pass_Through] disables this block DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=float ;######### INPUT_FILTER 1 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation ;# that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse ;#reponse given a set of band edges, the desired reponse on those bands, ;#and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;# Original sampling frequency stored in the signal file InputFilter1.sampling_frequency=20480000 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter1.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter1.IF=5499998.47412109 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation Resampler1.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# SOURCE CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 Channel8.RF_channel_ID=1 Channel9.RF_channel_ID=1 Channel10.RF_channel_ID=1 Channel11.RF_channel_ID=1 Channel12.RF_channel_ID=1 Channel13.RF_channel_ID=1 Channel14.RF_channel_ID=1 Channel15.RF_channel_ID=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1B Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000002 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=4; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/conf/gnss-sdr_Galileo_E5a.conf0000644000175000017500000003340412576764163020270 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=32000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ;GNSS-SDR.SUPL_gps_enabled=false ;GNSS-SDR.SUPL_read_gps_assistance_xml=false ;GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com ;GNSS-SDR.SUPL_gps_ephemeris_port=7275 ;GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com ;GNSS-SDR.SUPL_gps_acquisition_port=7275 ;GNSS-SDR.SUPL_MCC=244 ;GNSS-SDR.SUPL_MNS=5 ;GNSS-SDR.SUPL_LAC=0x59e2 ;GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed ;SignalSource.filename=/home/marc/E5a_acquisitions/signal_source_5X_primary.dat ;SignalSource.filename=/home/marc/E5a_acquisitions/galileo_E5_8M_r2_upsampled_12.dat ;SignalSource.filename=/home/marc/E5a_acquisitions/Tiered_sim_4sat_stup4_2s_up.dat ;SignalSource.filename=/home/marc/E5a_acquisitions/signal_source_sec21M_long.dat SignalSource.filename=../data/32MS_complex.dat; ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=32000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1176450000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=32000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels_5X.count=1 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.signal=5X ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.signal=5X ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=19 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=Galileo ;Channel1.signal=5Q ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ ;Channel2.system=Galileo ;Channel2.signal=5Q ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ ;Channel3.system=Galileo ;Channel3.signal=5Q ;Channel3.satellite=20 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_5X.dump=true ;#filename: Log path and filename Acquisition_5X.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_5X.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_5X.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_5X.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_5X.threshold=0.001 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_5X.pfa=0.0003 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_5X.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_5X.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_5X.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_5X.max_dwells=1 ;#CAF filter: **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz Acquisition_5X.CAF_window_hz=0 ;#Zero_padding: **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. ;#If set to 1 it is ON, if set to 0 it is OFF. Acquisition_5X.Zero_padding=0 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_5X.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_5X.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_5X.dump=true ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_5X.dump_filename=./tracking_ch_ ;#pll_bw_hz_init: **Only for E5a** PLL loop filter bandwidth during initialization [Hz] Tracking_5X.pll_bw_hz_init=20.0; ;#dll_bw_hz_init: **Only for E5a** DLL loop filter bandwidth during initialization [Hz] Tracking_5X.dll_bw_hz_init=20.0; ;#dll_ti_ms: **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms] ;Tracking_5X.ti_ms=3; Tracking_5X.ti_ms=1; ;#pll_bw_hz: PLL loop filter bandwidth [Hz] ;Tracking.pll_bw_hz=5.0; Tracking_5X.pll_bw_hz=20.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] ;Tracking.dll_bw_hz=2.0; Tracking_5X.dll_bw_hz=20.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] ;Tracking_5X.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_5X.order=2; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_5X.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder TelemetryDecoder_5X.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. ;Use [Galileo_E1B_Observables] for E5a also. Observables.implementation=Galileo_E1B_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. ;Use [GALILEO_E1_PVT] for E5a also. PVT.implementation=GALILEO_E1_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_rtlsdr_realtime.conf0000644000175000017500000001222412576764163022460 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ GNSS-SDR.internal_fs_hz=1999898 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source ;SignalSource.filename=/media/DATALOGGER_/signals/RTL-SDR/geo/pmt4.dat SignalSource.item_type=gr_complex ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.gain=40 SignalSource.rf_gain=40 SignalSource.if_gain=30 SignalSource.AGC_enabled = false SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter.sampling_frequency=1999898 InputFilter.IF=80558 ; IF deviation due to front-end LO inaccuracies [Hz] ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;# DISABLED IN THE RTL-SDR REALTIME ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.threshold=0.015 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_gr_complex.conf0000644000175000017500000000472512576764163021432 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.samples=250000000 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.005 ;Acquisition_1C.pfa=0.01 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Galileo_E1_short.conf0000644000175000017500000002652512576764163021350 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.000002 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition_1B0.repeat_satellite = true ;Acquisition_1B1.repeat_satellite = true ;Acquisition_1B2.repeat_satellite = true ;Acquisition_1B3.repeat_satellite = true ;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. ;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000 Acquisition_1B.cboc=false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Galileo_E1B_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GALILEO_E1_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_GN3S_realtime.conf0000644000175000017500000000722612576764163021666 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ;#Notes for GN3S source: ; - The front-end sampling frequency is fixed to 8.1838 MSPS (8183800 Hz). ; - The baseband signal is shifted to an IF of 38400 Hz. It should be corrected with the signal conditioner block GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=GN3S_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=8183800 SignalSource.dump=false SignalSource.dump_filename=../signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=8183800 InputFilter.IF=38400 InputFilter.decimation_factor=3 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=5 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.008 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/conf/gnss-sdr_Galileo_E1_USRP_X300_realtime.conf0000644000175000017500000000471312576764163023371 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.device_address=192.168.40.2 SignalSource.sampling_frequency=4000000 SignalSource.freq=1575420000 SignalSource.gain=50 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ###### Channels_1B.count=4 Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1B.dump=false Acquisition_1B.dump_filename=./acq_dump.dat Acquisition_1B.item_type=gr_complex Acquisition_1B.if=0 Acquisition_1B.sampled_ms=4 Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;Acquisition_1B.threshold=1 Acquisition_1B.pfa=0.000008 Acquisition_1B.doppler_max=6000 Acquisition_1B.doppler_step=250 Acquisition_1B.cboc=false ;######### TRACKING GLOBAL CONFIG ############ Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking Tracking_1B.item_type=gr_complex Tracking_1B.if=0 Tracking_1B.dump=false Tracking_1B.dump_filename=../data/veml_tracking_ch_ Tracking_1B.pll_bw_hz=20.0; Tracking_1B.dll_bw_hz=2.0; Tracking_1B.fll_bw_hz=10.0; Tracking_1B.order=3; Tracking_1B.early_late_space_chips=0.15; Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ Observables.implementation=Galileo_E1B_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GALILEO_E1_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=100; PVT.display_rate_ms=500; PVT.dump=false PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1a.conf0000644000175000017500000003224012576764164026661 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1a.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Galileo_E1_acq_QuickSync.conf0000644000175000017500000002604012576764163022736 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=./datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands #used for gps InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 #used for galileo InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels_1B.count=4 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 Channel.signal=1B ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.coherent_integration_time_ms=4 Acquisition_1B.implementation=Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition ;#threshold: Acquisition threshold Acquisition_1B.threshold=0.05 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]; Acquisition_1B.coherent_integration_time_ms=8 Acquisition_1B.cboc=false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=true ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=20.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Galileo_E1B_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GALILEO_E1_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_III_1b.conf0000644000175000017500000003223612576764164026667 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Hybrid_short.conf0000644000175000017500000003372312576764163020666 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signalq Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=3 ;#count: Number of available Galileo satellite channels. Channels_1B.count=3 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q Channel0.signal=1B Channel1.signal=1C Channel2.signal=1B Channel3.signal=1C Channel4.signal=1B Channel5.signal=1C ;Channel6.signal=1B ;Channel7.signal=1C ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000008 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_SPIR.conf0000644000175000017500000003056012576764163020044 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Spir_File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/fabra/dd44068b-f808-4164-834c-35b550037514/CTTC/spir_file_20secs.dat ;SignalSource.filename=/Users/carlesfernandez/Documents/workspace/code2/trunk/data/20Secs/20Secs_L1.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=int ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=80000000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=float ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter InputFilter.implementation=Freq_Xlating_Fir_Filter ;InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=float ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=80000000 InputFilter.IF=10164 InputFilter.decimation_factor=20 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=80000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=10 ;#count: Number of available Galileo satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "1B" Galileo E1B Channel.signal=1C ;Galileo FM3 -> PRN 19 ;Galileo FM4 -> PRN 20 ;######### CHANNEL 0 CONFIG ############ ;Channel0.signal=1B ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=20 ;######### CHANNEL 1 CONFIG ############ ;Channel1.signal=1B ;Channel1.satellite=12 ;######### CHANNEL 2 CONFIG ############ ;Channel2.signal=1B ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel2.satellite=11 ;######### CHANNEL 3 CONFIG ############ ;Channel3.signal=1B ;Channel3.satellite=19 ;######### ACQUISITION GLOBAL CONFIG ############ _1C ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=5 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = true ;Acquisition1.repeat_satellite = true ;Acquisition2.repeat_satellite = true ;Acquisition3.repeat_satellite = true ;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. ;#Use only if GNSS-SDR.internal_fs_hz is greater than or equal to 6138000 Acquisition0.cboc=false ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.cboc=false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=20.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=500 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_I_1b.conf0000644000175000017500000003212412576764164026441 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_I-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=40000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=4 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 ;Channel4.RF_channel_ID=0 ;Channel5.RF_channel_ID=0 ;Channel6.RF_channel_ID=0 ;Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.011 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr.conf0000644000175000017500000003025612576764163016144 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### ; Check http://www.mcc-mnc.com/ ; On Android: https://play.google.com/store/apps/details?id=net.its_here.cellidinfo&hl=en GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ;DataTypeAdapter.implementation=Ibyte_To_Cbyte ;DataTypeAdapter.implementation=Pass_Through ;DataTypeAdapter.item_type=byte ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;Resampler.item_type=cbyte ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS L1 C/A satellite channels. Channels_1C.count=6 ;#count: Number of available Galileo E1B satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_min=-10000 ;#doppler_step Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#maximum dwells Acquisition_1C.max_dwells=5 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_USRP_X300_realtime.conf0000644000175000017500000003451512576764163022460 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) SignalSource.device_address=192.168.40.2 ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=50 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resampled data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=12 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=GPS ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=6000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] ;Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=30.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L2_M_Flexiband_bin_file_III_1b.conf0000644000175000017500000005614612576764164027117 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true #SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb SignalSource.signal_file=/datalogger/captures/test.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=2 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;###################################################### ;######### RF CHANNEL 0 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] ;# WARNING: Fraunhofer front-end hardwareconfigurations can difer. Signals available on http://www.iis.fraunhofer.de/de/ff/lok/leist/test/flexiband.html are centered on 0 Hz, ALL BANDS. InputFilter0.IF=-205000 ;#InputFilter0.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;###################################################### ;######### RF CHANNEL 1 SIGNAL CONDITIONER ############ ;###################################################### ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter1.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter_ch1.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter1.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter1.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter1.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter1.band1_begin=0.0 InputFilter1.band1_end=0.45 InputFilter1.band2_begin=0.55 InputFilter1.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter1.ampl1_begin=1.0 InputFilter1.ampl1_end=1.0 InputFilter1.ampl2_begin=0.0 InputFilter1.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter1.band1_error=1.0 InputFilter1.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter1.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter1.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter1.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter1.IF=0 ;# Decimation factor after the frequency tranaslating block InputFilter1.decimation_factor=8 ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=1 Channels_2S.count=1 ;#count: Number of available Galileo satellite channels. ;Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel0.signal=1C Channel1.RF_channel_ID=1 Channel1.signal=2S Channel2.RF_channel_ID=1 Channel2.signal=2S Channel3.RF_channel_ID=1 Channel3.signal=2S Channel4.RF_channel_ID=1 Channel4.signal=2S Channel5.RF_channel_ID=1 Channel5.signal=2S Channel6.RF_channel_ID=1 Channel6.signal=2S Channel7.RF_channel_ID=1 Channel7.signal=2S Channel8.RF_channel_ID=1 Channel8.signal=2S Channel9.RF_channel_ID=1 Channel9.signal=2S Channel10.RF_channel_ID=1 Channel10.signal=2S Channel11.RF_channel_ID=1 Channel11.signal=2S Channel12.RF_channel_ID=1 Channel12.signal=2S Channel13.RF_channel_ID=1 Channel13.signal=2S Channel14.RF_channel_ID=1 Channel14.signal=2S Channel15.RF_channel_ID=1 Channel15.signal=2S ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;# GPS L2C M Acquisition_2S1.dump=false Acquisition_2S1.dump_filename=./acq_dump.dat Acquisition_2S1.item_type=gr_complex Acquisition_2S1.if=0 Acquisition_2S1.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S1.threshold=0.0001 ;Acquisition_2S1.pfa=0.001 Acquisition_2S1.doppler_max=5000 Acquisition_2S1.doppler_min=-5000 Acquisition_2S1.doppler_step=30 Acquisition_2S1.max_dwells=1 Acquisition_2S2.dump=false Acquisition_2S2.dump_filename=./acq_dump.dat Acquisition_2S2.item_type=gr_complex Acquisition_2S2.if=0 Acquisition_2S2.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S2.threshold=0.0003 ;Acquisition_2S2.pfa=0.001 Acquisition_2S2.doppler_max=5000 Acquisition_2S2.doppler_min=-5000 Acquisition_2S2.doppler_step=30 Acquisition_2S2.max_dwells=1 Acquisition_2S3.dump=false Acquisition_2S3.dump_filename=./acq_dump.dat Acquisition_2S3.item_type=gr_complex Acquisition_2S3.if=0 Acquisition_2S3.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S3.threshold=0.0003 ;Acquisition_2S3.pfa=0.001 Acquisition_2S3.doppler_max=5000 Acquisition_2S3.doppler_min=-5000 Acquisition_2S3.doppler_step=30 Acquisition_2S3.max_dwells=1 Acquisition_2S4.dump=false Acquisition_2S4.dump_filename=./acq_dump.dat Acquisition_2S4.item_type=gr_complex Acquisition_2S4.if=0 Acquisition_2S4.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S4.threshold=0.0003 ;Acquisition_2S4.pfa=0.001 Acquisition_2S4.doppler_max=5000 Acquisition_2S4.doppler_min=-5000 Acquisition_2S4.doppler_step=30 Acquisition_2S4.max_dwells=1 Acquisition_2S5.dump=false Acquisition_2S5.dump_filename=./acq_dump.dat Acquisition_2S5.item_type=gr_complex Acquisition_2S5.if=0 Acquisition_2S5.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S5.threshold=0.0003 ;Acquisition_2S5.pfa=0.001 Acquisition_2S5.doppler_max=5000 Acquisition_2S5.doppler_min=-5000 Acquisition_2S5.doppler_step=30 Acquisition_2S5.max_dwells=1 Acquisition_2S6.dump=false Acquisition_2S6.dump_filename=./acq_dump.dat Acquisition_2S6.item_type=gr_complex Acquisition_2S6.if=0 Acquisition_2S6.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S6.threshold=0.0003 ;Acquisition_2S6.pfa=0.001 Acquisition_2S6.doppler_max=5000 Acquisition_2S6.doppler_min=-5000 Acquisition_2S6.doppler_step=30 Acquisition_2S6.max_dwells=1 Acquisition_2S7.dump=false Acquisition_2S7.dump_filename=./acq_dump.dat Acquisition_2S7.item_type=gr_complex Acquisition_2S7.if=0 Acquisition_2S7.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S7.threshold=0.0003 ;Acquisition_2S7.pfa=0.001 Acquisition_2S7.doppler_max=5000 Acquisition_2S7.doppler_min=-5000 Acquisition_2S7.doppler_step=100 Acquisition_2S7.max_dwells=1 Acquisition_2S8.dump=false Acquisition_2S8.dump_filename=./acq_dump.dat Acquisition_2S8.item_type=gr_complex Acquisition_2S8.if=0 Acquisition_2S8.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S8.threshold=0.0003 ;Acquisition_2S8.pfa=0.001 Acquisition_2S8.doppler_max=5000 Acquisition_2S8.doppler_min=-5000 Acquisition_2S8.doppler_step=100 Acquisition_2S8.max_dwells=1 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 8 CONFIG ############ Tracking_2S1.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S1.item_type=gr_complex Tracking_2S1.if=0 Tracking_2S1.dump=true Tracking_2S1.dump_filename=./tracking_ch_ Tracking_2S1.pll_bw_hz=2.0; Tracking_2S1.dll_bw_hz=0.5; Tracking_2S1.fll_bw_hz=2.0; Tracking_2S1.order=3; Tracking_2S1.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 9 CONFIG ############ Tracking_2S2.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S2.item_type=gr_complex Tracking_2S2.if=0 Tracking_2S2.dump=true Tracking_2S2.dump_filename=./tracking_ch_ Tracking_2S2.pll_bw_hz=2.0; Tracking_2S2.dll_bw_hz=0.5; Tracking_2S2.fll_bw_hz=2.0; Tracking_2S2.order=3; Tracking_2S2.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 10 CONFIG ############ Tracking_2S3.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S3.item_type=gr_complex Tracking_2S3.if=0 Tracking_2S3.dump=true Tracking_2S3.dump_filename=./tracking_ch_ Tracking_2S3.pll_bw_hz=2.0; Tracking_2S3.dll_bw_hz=0.5; Tracking_2S3.fll_bw_hz=2.0; Tracking_2S3.order=3; Tracking_2S3.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 11 CONFIG ############ Tracking_2S4.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S4.item_type=gr_complex Tracking_2S4.if=0 Tracking_2S4.dump=true Tracking_2S4.dump_filename=./tracking_ch_ Tracking_2S4.pll_bw_hz=2.0; Tracking_2S4.dll_bw_hz=0.3; Tracking_2S4.fll_bw_hz=2.0; Tracking_2S4.order=3; Tracking_2S4.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 12 CONFIG ############ Tracking_2S5.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S5.item_type=gr_complex Tracking_2S5.if=0 Tracking_2S5.dump=true Tracking_2S5.dump_filename=./tracking_ch_ Tracking_2S5.pll_bw_hz=2.0; Tracking_2S5.dll_bw_hz=0.3; Tracking_2S5.fll_bw_hz=2.0; Tracking_2S5.order=3; Tracking_2S5.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 13 CONFIG ############ Tracking_2S6.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S6.item_type=gr_complex Tracking_2S6.if=0 Tracking_2S6.dump=true Tracking_2S6.dump_filename=./tracking_ch_ Tracking_2S6.pll_bw_hz=2.0; Tracking_2S6.dll_bw_hz=0.3; Tracking_2S6.fll_bw_hz=2.0; Tracking_2S6.order=3; Tracking_2S6.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 14 CONFIG ############ Tracking_2S7.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S7.item_type=gr_complex Tracking_2S7.if=0 Tracking_2S7.dump=true Tracking_2S7.dump_filename=./tracking_ch_ Tracking_2S7.pll_bw_hz=2.0; Tracking_2S7.dll_bw_hz=0.3; Tracking_2S7.fll_bw_hz=2.0; Tracking_2S7.order=3; Tracking_2S7.early_late_space_chips=0.5; ;######### TRACKING CHANNEL 15 CONFIG ############ Tracking_2S8.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S8.item_type=gr_complex Tracking_2S8.if=0 Tracking_2S8.dump=true Tracking_2S8.dump_filename=./tracking_ch_ Tracking_2S8.pll_bw_hz=2.0; Tracking_2S8.dll_bw_hz=0.3; Tracking_2S8.fll_bw_hz=2.0; Tracking_2S8.order=3; Tracking_2S8.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS L1 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=20; ;######### TELEMETRY DECODER GPS L2 CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false ;#decimation factor TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A.Mixed_Observables Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_gr_complex_gpu.conf0000644000175000017500000002725612576764163022311 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/javier/signals/4msps.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=1 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=GPS ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=true ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=55.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=1.5 ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_acq_QuickSync.conf0000644000175000017500000002630612576764163022027 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels_1C.count=5 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ Channel0.signal=1C Channel0.satellite=1 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.signal=1C Channel1.satellite=11 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.signal=1C Channel2.satellite=17 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.signal=1C Channel3.satellite=20 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.signal=1C Channel4.satellite=32 Channel4.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############_1C ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=true ;#filename: Log path and filename ;Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent-integration_time_ms=4 Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition ;######### ACQUISITION CHANNELS CONFIG ###### ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.4 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_Hybrid_byte.conf0000644000175000017500000003322712576764163020471 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=20000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/Users/javier/signals/fraunhofer/L125_III1b_210s_L1.bin ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=byte ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=20000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ibyte_To_Complex ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=20000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=20000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=20000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C Channel8.signal=1B Channel9.signal=1B Channel10.signal=1B Channel11.signal=1B Channel12.signal=1B Channel13.signal=1B Channel14.signal=1B Channel15.signal=1B ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_1C.threshold=0.0060 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;######### GALILEO ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1B.dump=false ;#filename: Log path and filename Acquisition_1B.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1B.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1B.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1B.sampled_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold ;Acquisition_1B.threshold=0 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1B.pfa=0.0000008 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1B.doppler_max=15000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1B.doppler_step=125 ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;######### TRACKING GALILEO CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1B.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1B.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1B.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1B.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1B.pll_bw_hz=15.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1B.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1B.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1B.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking_1B.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking_1B.very_early_late_space_chips=0.6; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=4; ;######### TELEMETRY DECODER GALILEO CONFIG ############ ;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder TelemetryDecoder_1B.dump=false TelemetryDecoder_1B.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=Hybrid_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=Hybrid_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/0000755000175000017500000000000012576764164014306 5ustar carlescarlesgnss-sdr-0.0.6/conf/old/gnss-sdr_acq_CCCWSR.conf0000644000175000017500000003351712576764164020616 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=6 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.system=Galileo ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1B ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=Galileo Channel0.signal=1B ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ Channel1.system=Galileo Channel1.signal=1B Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.coherent_integration_time_ms=4 ;#implementation: Acquisition algorithm selection for this channel: [Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition] Acquisition.implementation=Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition ;#threshold: Acquisition threshold. Acquisition.threshold=0.0025 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition ;Acquisition0.threshold=0.0025 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition ;Acquisition1.threshold=0.0025 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_array.conf0000644000175000017500000003373512576764164020126 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] [Raw_Array_Signal_Source] SignalSource.implementation=Raw_Array_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=5000000 ;#gigabit ethernet device SignalSource.ethernet_dev=eth0 ;#active array channles SignalSource.channels=8 ;#Ethernet transport parameters SignalSource.snapshots_per_frame=80 SignalSource.inter_frame_delay=10 ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Array_Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Beamformer_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=5000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=8 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition.pfa=0.0000000001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition0.threshold=0.005 ;Acquisition0.pfa=0.001 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition ;Acquisition1.threshold=0.005 ;Acquisition1.pfa=0.001 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_acq_Tong.conf0000644000175000017500000003352112576764164020534 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=6 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;#system: GPS, GLONASS, Galileo, SBAS or Compass ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=GPS Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Tong_Acquisition] or [Galileo_E1_PCPS_Tong_Ambiguous_Acquisition] Acquisition.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;#threshold: Acquisition threshold. Acquisition.threshold=0.004 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition.doppler_step=500 ;#tong_init_val: Initial value for the Tong counter. Acquisition.tong_init_val=5 ;#tong_max_val: Maximum value for the Tong counter. Acquisition.tong_max_val=10 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION CH 0 CONFIG ############ ;Acquisition0.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;Acquisition0.threshold=0.004 ;Acquisition0.doppler_max=10000 ;Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false ;Acquisition0.repeat_satellite = false ;######### ACQUISITION CH 1 CONFIG ############ ;Acquisition1.implementation=GPS_L1_CA_PCPS_Tong_Acquisition ;Acquisition1.threshold=0.004 ;Acquisition1.doppler_max=10000 ;Acquisition1.doppler_step=250 ;Acquisition1.repeat_satellite = false ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_SBAS_short.conf0000644000175000017500000003063512576764164020753 0ustar carlescarles; configuration file for SBAS ; invoke it by doing ; gnss-sdr --config_file=../conf/gnss-sdr_sbas.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;#internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=../data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#AGC_enabled: RTLSDR AGC enabled [true or false] SignalSource.AGC_enabled=true ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=6 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS, SBAS ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=SBAS Channel0.signal=1C Channel0.satellite=124 ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.system=SBAS Channel1.signal=1C Channel1.satellite=120 Channel1.repeat_satellite=true ;######### CHANNEL 2 CONFIG ############ Channel2.system=SBAS Channel2.signal=1C Channel2.satellite=126 Channel2.repeat_satellite=true ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=../data/acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.005 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=2; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=../data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_ishort_file_read.conf0000644000175000017500000003527012576764164022306 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER_/signals/CTTC captures/cap_fs_5MHz_antenna_suelta_and_front_end_tejado_cttc.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=5000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#AGC_enabled: RTLSDR AGC enabled [true or false] SignalSource.AGC_enabled=true ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=5000000 InputFilter.IF=14821 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=5000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=5000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=5 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=70 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition1.threshold=70 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition2.threshold=70 Acquisition2.doppler_max=10000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition3.threshold=70 Acquisition3.doppler_max=10000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition4.threshold=70 Acquisition4.doppler_max=10000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition5.threshold=50 Acquisition5.doppler_max=10000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition6.threshold=70 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition7.threshold=70 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition8.threshold=70 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_tcp_connector_tracking.conf0000644000175000017500000003253412576764164023526 0ustar carlescarles [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use File_Signal_Source or UHD_Signal_Source or GN3S_Signal_Source (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/engunit/workspace/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;SignalSource.sampling_frequency=100000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=50 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.dump_filename=../data/SignalSource.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Pass_Through disables this block SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Pass_Through disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Pass_Through disables this block ;InputFilter.implementation=Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Pass_Through disables this block Resampler.implementation=Direct_Resampler ;Resampler.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=4 Channels.in_acquisition=4 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=15 ;Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C ;Channel1.satellite=18 ;Channel1.repeat_satellite=true ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C ;Channel2.satellite=16 ;Channel2.repeat_satellite=true ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C ;Channel3.satellite=23 ;Channel3.repeat_satellite=true ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C ;Channel4.satellite=3 ;Channel4.repeat_satellite=true ;######### CHANNEL 3 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=true ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=100 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellite PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition1.threshold=100 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition2.threshold=100 Acquisition2.doppler_max=10000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition3.threshold=100 Acquisition3.doppler_max=10000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition4.threshold=100 Acquisition4.doppler_max=10000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition5.threshold=100 Acquisition5.doppler_max=10000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition6.threshold=100 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition7.threshold=100 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition8.threshold=100 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementatiion: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking], [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] Tracking.implementation= GPS_L1_CA_TCP_CONNECTOR_Tracking ;Tracking.implementation=GPS_L1_CA_DLL_FLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=2; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;#port_ch0: local TCP port for channel 0 Tracking.port_ch0=2070; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm ;PVT.averaging_depth=100 PVT.averaging_depth=2 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/conf/old/gnss-sdr_nmea_tty_output.conf0000644000175000017500000003607512576764164022250 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=5000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source] SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER_/signals/CTTC captures/cap_fs_5MHz_antenna_suelta_and_front_end_tejado_cttc.dat ;#item_type: Type and resolution for each of the signal samples. ;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer. ;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter. SignalSource.item_type=short ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=5000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#AGC_enabled: RTLSDR AGC enabled [true or false] SignalSource.AGC_enabled=true ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Use [Ishort_To_Complex] or [Pass_Through] DataTypeAdapter.implementation=Ishort_To_Complex ;#dump: Dump the filtered data to a file. DataTypeAdapter.dump=false ;#dump_filename: Log path and filename. DataTypeAdapter.dump_filename=../data/data_type_adapter.dat ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 ;InputFilter.band1_end=0.8 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=5000000 InputFilter.IF=14821 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=5000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=5000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=5 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=70 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition1.threshold=70 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition2.threshold=70 Acquisition2.doppler_max=10000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition3.threshold=70 Acquisition3.doppler_max=10000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition4.threshold=70 Acquisition4.doppler_max=10000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition5.threshold=50 Acquisition5.doppler_max=10000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition6.threshold=70 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition7.threshold=70 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition8.threshold=70 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/master.conf0000644000175000017500000003440612576764164016457 0ustar carlescarles; MASTER configuration file ; This file should be updated with the latest changes in the configuration parameters, as a sample configuration file. ; use RELATIVE file path in this configuration file ; Sample for a configuration file for GNSS-SDR [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed ;SignalSource.filename=../data/my_capture.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=8 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;######### GPS ACQUISITION CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.sampled_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold Acquisition_GPS.threshold=0.0075 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.01 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GPS CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=../data/epl_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=45.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=false ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=10 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_acq_assistance_test.conf0000644000175000017500000003645312576764164023030 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2045950 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=true GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=214 GNSS-SDR.SUPL_MNS=7 GNSS-SDR.SUPL_LAC=861 GNSS-SDR.SUPL_CI=40181 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) ;SignalSource.implementation=UHD_Signal_Source SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/javier/signals/casa1_gn3s_d4.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=2045950 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=0 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) ;# FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz ; 8183800/5 = 1 636760 ; 8183800/4 = 2 045950 ; 8183800/3 = 2 727933.33333333 InputFilter.sampling_frequency=8183800 InputFilter.IF=-38400 InputFilter.decimation_factor=5 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=2045950 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=4 ;#in_acquisition: Number of channels simultaneously acquiring Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel0.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=15 Channel0.repeat_satellite=false ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 Channel1.repeat_satellite=false ;######### CHANNEL 2 CONFIG ############ Channel2.system=GPS Channel2.signal=1C Channel2.satellite=16 Channel2.repeat_satellite=false ;######### CHANNEL 3 CONFIG ############ Channel3.system=GPS Channel3.signal=1C Channel3.satellite=21 Channel3.repeat_satellite=false ;######### CHANNEL 4 CONFIG ############ Channel4.system=GPS Channel4.signal=1C Channel4.satellite=3 Channel4.repeat_satellite=false ;######### CHANNEL 5 CONFIG ############ Channel5.system=GPS Channel5.signal=1C ;Channel5.satellite=21 ;Channel5.repeat_satellite=false ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 Acquisition.doppler_min=-5000; ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=1 ;#maximum dwells Acquisition.max_dwells=5 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] Acquisition0.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=30 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=6000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=250 ;#repeat_satellite: Use only jointly with the satellte PRN ID option. ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition1.threshold=30 Acquisition1.doppler_max=6000 Acquisition1.doppler_step=250 ;######### ACQUISITION CH 2 CONFIG ############ Acquisition2.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition2.threshold=30 Acquisition2.doppler_max=6000 Acquisition2.doppler_step=250 ;######### ACQUISITION CH 3 CONFIG ############ Acquisition3.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition3.threshold=30 Acquisition3.doppler_max=6000 Acquisition3.doppler_step=250 ;######### ACQUISITION CH 4 CONFIG ############ Acquisition4.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition4.threshold=20 Acquisition4.doppler_max=6000 Acquisition4.doppler_step=250 ;######### ACQUISITION CH 5 CONFIG ############ Acquisition5.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition5.threshold=50 Acquisition5.doppler_max=6000 Acquisition5.doppler_step=250 ;######### ACQUISITION CH 6 CONFIG ############ Acquisition6.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition6.threshold=15 Acquisition6.doppler_max=10000 Acquisition6.doppler_step=250 ;######### ACQUISITION CH 7 CONFIG ############ Acquisition7.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition7.threshold=15 Acquisition7.doppler_max=10000 Acquisition7.doppler_step=250 ;######### ACQUISITION CH 8 CONFIG ############ Acquisition8.implementation=GPS_L1_CA_PCPS_Assisted_Acquisition Acquisition8.threshold=15 Acquisition8.doppler_max=10000 Acquisition8.doppler_step=250 ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] ;Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking Tracking.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking.early_late_space_chips=0.5; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=true; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/old/gnss-sdr_galileo_e1_tcp_connector_tracking.conf0000644000175000017500000002435512576764164025611 0ustar carlescarles [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use File_Signal_Source or UHD_Signal_Source or GN3S_Signal_Source (experimental) SignalSource.implementation=File_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/home/engunit/workspace/cap2/cp_cttc_1_galileo_4Msps.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=50 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=B:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Pass_Through disables this block SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: Pass_Through disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Pass_Through disables this block ;InputFilter.implementation=Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Pass_Through disables this block Resampler.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available satellite channels. Channels.count=1 Channels.in_acquisition=1 ;######### CHANNEL 0 CONFIG ############ Channel0.system=Galileo Channel0.signal=1B Channel0.satellite=12 Channel0.repeat_satellite=true ;######### CHANNEL 1 CONFIG ############ Channel1.system=Galileo Channel1.signal=1B Channel1.satellite=11 Channel1.repeat_satellite=true ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition.dump=false ;#filename: Log path and filename Acquisition.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition.sampled_ms=4 ;######### ACQUISITION CHANNELS CONFIG ###### ;######### ACQUISITION CH 0 CONFIG ############ ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition0.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition ;#threshold: Acquisition threshold Acquisition0.threshold=50 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition0.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition0.doppler_step=125 ;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false] Acquisition0.cboc=true ;######### ACQUISITION CH 1 CONFIG ############ Acquisition1.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition Acquisition1.threshold=50 Acquisition1.doppler_max=10000 Acquisition1.doppler_step=125 Acquisition1.cboc=true ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking] or [Galileo_E1_TCP_CONNECTOR_Tracking] Tracking.implementation=Galileo_E1_TCP_CONNECTOR_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking.dump_filename=../data/veml_tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking.pll_bw_hz=30.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo Tracking.early_late_space_chips=0.15; ;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6] Tracking.very_early_late_space_chips=0.6; ;#port_ch0: local TCP port for channel 0 Tracking.port_ch0=2070; ;######### TELEMETRY DECODER CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A. TelemetryDecoder.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder.dump=false ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=100 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100; ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500; ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complexgnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_USRP_X300_realtime_new.conf0000644000175000017500000003500212576764163023321 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...) SignalSource.device_address=192.168.40.2 ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. ;SignalSource.item_type=gr_complex SignalSource.item_type=cshort ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=4000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=40 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ;SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=cshort ;DataTypeAdapter.item_type=cbyte ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter ;InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=cshort ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=11 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.48 InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resampled data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=4000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_1C.count=8 ;#count: Number of available Galileo satellite channels. Channels_1B.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS ;Channel.system=GPS Channel.signal=1C ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A ;Channel0.signal=1C ;Channel1.signal=1C ;Channel2.signal=1C ;Channel3.signal=1C ;Channel4.signal=1C ;Channel5.signal=1C ;Channel6.signal=1C ;Channel7.signal=1C ;Channel8.signal=1C ;Channel9.signal=1C ;Channel10.signal=1C ;Channel11.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ ;Channel0.system=GPS ;Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search ;Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ ;Channel1.system=GPS ;Channel1.signal=1C ;Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_1C.dump=false ;#filename: Log path and filename Acquisition_1C.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_1C.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_1C.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_1C.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_1C.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_1C.pfa=0.00001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_max=8000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_1C.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_1C.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_1C.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_1C.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_1C.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_1C.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_1C.pll_bw_hz=30.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=4.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_1C.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_1C.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_1C.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ;#decimation factor TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L2C_USRP1_realtime.conf0000644000175000017500000001535612576764163022135 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1227600000 SignalSource.gain=60 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=20000000 InputFilter.IF=-1600000 ;# Decimation factor after the frequency tranaslating block InputFilter.decimation_factor=1 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex Resampler.sample_freq_in=2000000 Resampler.sample_freq_out=2000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_2S.count=1 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=2S Channel0.signal=2S Channel1.signal=2S Channel2.signal=2S Channel3.signal=2S Channel4.signal=2S Channel5.signal=2S Channel6.signal=2S Channel7.signal=2S ;Channel8.signal=2S ;Channel9.signal=2S ;Channel10.signal=2S ;Channel11.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0013 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=10000 Acquisition_2S.doppler_min=-10000 Acquisition_2S.doppler_step=100 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=1.5; Tracking_2S.dll_bw_hz=0.3; Tracking_2S.fll_bw_hz=2.0; Tracking_2S.order=3; Tracking_2S.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=false TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############. Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=10 PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L2C_USRP_X300_realtime.conf0000644000175000017500000001107712576764163022562 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=4000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.50.2 SignalSource.item_type=cshort SignalSource.sampling_frequency=4000000 SignalSource.freq=1227600000 ;### Options: internal, external, or MIMO SignalSource.clock_source=internal SignalSource.gain=35 SignalSource.subdevice=A:0 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=cshort ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=cshort InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=11 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.48 InputFilter.band2_begin=0.52 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=4000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex Resampler.sample_freq_in=4000000 Resampler.sample_freq_out=4000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_2S.count=1 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 Channel.signal=2S Channel0.signal=2S Channel1.signal=2S Channel2.signal=2S Channel3.signal=2S Channel4.signal=2S Channel5.signal=2S Channel6.signal=2S Channel7.signal=2S ;Channel8.signal=2S ;Channel9.signal=2S ;Channel10.signal=2S ;Channel11.signal=2S ;######### ACQUISITION GLOBAL CONFIG ############ ;# GPS L2C M Acquisition_2S.dump=false Acquisition_2S.dump_filename=./acq_dump.dat Acquisition_2S.item_type=gr_complex Acquisition_2S.if=0 Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition Acquisition_2S.threshold=0.0015 ;Acquisition_2S.pfa=0.001 Acquisition_2S.doppler_max=5000 Acquisition_2S.doppler_min=-5000 Acquisition_2S.doppler_step=60 Acquisition_2S.max_dwells=1 Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking Tracking_2S.item_type=gr_complex Tracking_2S.if=0 Tracking_2S.dump=true Tracking_2S.dump_filename=./tracking_ch_ Tracking_2S.pll_bw_hz=2.0; Tracking_2S.dll_bw_hz=0.25; Tracking_2S.fll_bw_hz=0.0; Tracking_2S.order=2; Tracking_2S.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_2S.implementation=GPS_L2_M_Telemetry_Decoder TelemetryDecoder_2S.dump=true TelemetryDecoder_2S.decimation_factor=1; ;######### OBSERVABLES CONFIG ############. Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=10 PVT.flag_averaging=true PVT.output_rate_ms=100 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_bin_file_III_1a.conf0000644000175000017500000003234412576764163026632 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source SignalSource.flag_read_file=true SignalSource.signal_file=/datalogger/L125_III1b_210s.usb ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_III-1b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=20000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=8 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=8 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_two_bits_cpx.conf0000644000175000017500000001000612576764163021764 0ustar carlescarles; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=3200000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=false GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Two_Bit_Cpx_File_Signal_Source SignalSource.filename=/datalogger/captures/ajith/test1_two_cpx_live.dat SignalSource.item_type=byte SignalSource.sampling_frequency=19200000 SignalSource.freq=1575420000 SignalSource.samples=0 SignalSource.repeat=false SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through DataTypeAdapter.item_type=gr_complex ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=19200000 InputFilter.IF=4024000 InputFilter.decimation_factor=6 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat Resampler.item_type=gr_complex ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=6 Channels.in_acquisition=1 Channel.signal=1C ;######### GPS ACQUISITION CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler Acquisition_1C.threshold=0.007 ;Acquisition_1C.pfa=0.0001 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_min=-10000 Acquisition_1C.doppler_step=500 Acquisition_1C.max_dwells=15 ;######### TRACKING GPS CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=true Tracking_1C.dump_filename=./tracking_ch_ Tracking_1C.pll_bw_hz=40.0; Tracking_1C.dll_bw_hz=1.5; Tracking_1C.fll_bw_hz=10.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_multichannel_GPS_L1_Flexiband_realtime_II_3b.conf0000644000175000017500000003227112576764164026557 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2500000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=Flexiband_Signal_Source ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;# FPGA firmware file SignalSource.firmware_file=flexiband_II-3b.bit ;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file SignalSource.RF_channels=1 ;#frontend channels gain. Not usable yet! SignalSource.gain1=0 SignalSource.gain2=0 SignalSource.gain3=0 ;#frontend channels AGC SignalSource.AGC=true ;# USB 3.0 packet buffer size (number of SuperSpeed packets) SignalSource.usb_packet_buffer=128 ;######### SIGNAL_CONDITIONER 0 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner0.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER 0 CONFIG ############ DataTypeAdapter0.implementation=Pass_Through DataTypeAdapter0.item_type=gr_complex ;######### INPUT_FILTER 0 CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter0.implementation=Freq_Xlating_Fir_Filter ;#dump: Dump the filtered data to a file. InputFilter0.dump=false ;#dump_filename: Log path and filename. InputFilter0.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, ;#the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter0.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter0.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter0.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter0.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter0.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter0.band1_begin=0.0 InputFilter0.band1_end=0.45 InputFilter0.band2_begin=0.55 InputFilter0.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter0.ampl1_begin=1.0 InputFilter0.ampl1_end=1.0 InputFilter0.ampl2_begin=0.0 InputFilter0.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter0.band1_error=1.0 InputFilter0.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter0.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter0.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz ;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE ; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/ InputFilter0.sampling_frequency=40000000 ;# IF deviation due to front-end LO inaccuracies [HZ] InputFilter0.IF=-205000 ;# Decimation factor after the frequency tranaslating block InputFilter0.decimation_factor=16 ;######### RESAMPLER CONFIG 0 ############ ;## Resamples the input data. Resampler0.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 1 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner1.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 1 CONFIG ############ DataTypeAdapter1.implementation=Pass_Through DataTypeAdapter1.item_type=gr_complex ;######### INPUT_FILTER 1 CONFIG ############ InputFilter1.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter1.dump=false ;#dump_filename: Log path and filename. InputFilter1.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter1.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter1.output_item_type=gr_complex ;######### RESAMPLER CONFIG 1 ############ ;## Resamples the input data. Resampler1.implementation=Pass_Through ;######### SIGNAL_CONDITIONER 2 CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. SignalConditioner2.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER 2 CONFIG ############ DataTypeAdapter2.implementation=Pass_Through DataTypeAdapter2.item_type=gr_complex ;######### INPUT_FILTER 2 CONFIG ############ InputFilter2.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter2.dump=false ;#dump_filename: Log path and filename. InputFilter2.dump_filename=../data/input_filter.dat ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter2.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter2.output_item_type=gr_complex ;######### RESAMPLER CONFIG 2 ############ ;## Resamples the input data. Resampler2.implementation=Pass_Through ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=8 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;# signal: ;# "1C" GPS L1 C/A ;# "2S" GPS L2 L2C (M) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "5X" GALILEO E5a I+Q ;# CHANNEL CONNECTION Channel0.RF_channel_ID=0 Channel1.RF_channel_ID=0 Channel2.RF_channel_ID=0 Channel3.RF_channel_ID=0 Channel4.RF_channel_ID=0 Channel5.RF_channel_ID=0 Channel6.RF_channel_ID=0 Channel7.RF_channel_ID=0 ;#signal: ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel0.signal=1C Channel1.signal=1C Channel2.signal=1C Channel3.signal=1C Channel4.signal=1C Channel5.signal=1C Channel6.signal=1C Channel7.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.012 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=250 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take ;#maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] ;#(should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=40.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=3.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/conf/gnss-sdr_GPS_L1_USRP_realtime.conf0000644000175000017500000003405512576764163021745 0ustar carlescarles; Default configuration file ; You can define your own receiver and invoke it by doing ; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf ; [GNSS-SDR] ;######### GLOBAL OPTIONS ################## ;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz]. GNSS-SDR.internal_fs_hz=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SUPL RRLP GPS assistance configuration ##### GNSS-SDR.SUPL_gps_enabled=false GNSS-SDR.SUPL_read_gps_assistance_xml=true GNSS-SDR.SUPL_gps_ephemeris_server=supl.nokia.com GNSS-SDR.SUPL_gps_ephemeris_port=7275 GNSS-SDR.SUPL_gps_acquisition_server=supl.google.com GNSS-SDR.SUPL_gps_acquisition_port=7275 GNSS-SDR.SUPL_MCC=244 GNSS-SDR.SUPL_MNS=5 GNSS-SDR.SUPL_LAC=0x59e2 GNSS-SDR.SUPL_CI=0x31b0 ;######### SIGNAL_SOURCE CONFIG ############ ;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental) SignalSource.implementation=UHD_Signal_Source ;#filename: path to file with the captured GNSS signal samples to be processed SignalSource.filename=/media/DATALOGGER/Agilent GPS Generator/cap2/agilent_cap2.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. SignalSource.item_type=gr_complex ;#sampling_frequency: Original Signal sampling frequency in [Hz] SignalSource.sampling_frequency=2000000 ;#freq: RF front-end center frequency in [Hz] SignalSource.freq=1575420000 ;#gain: Front-end Gain in [dB] SignalSource.gain=60 ;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0) SignalSource.subdevice=A:0 ;#samples: Number of samples to be processed. Notice that 0 indicates the entire file. SignalSource.samples=0 ;#repeat: Repeat the processing file. Disable this option in this version SignalSource.repeat=false ;#dump: Dump the Signal source data to a file. Disable this option in this version SignalSource.dump=false SignalSource.dump_filename=../data/signal_source.dat ;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing. ; it helps to not overload the CPU, but the processing time will be longer. SignalSource.enable_throttle_control=false ;######### SIGNAL_CONDITIONER CONFIG ############ ;## It holds blocks to change data type, filter and resample input data. ;#implementation: Use [Pass_Through] or [Signal_Conditioner] ;#[Pass_Through] disables this block and the [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks ;SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Pass_Through ;######### DATA_TYPE_ADAPTER CONFIG ############ ;## Changes the type of input data. Please disable it in this version. ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ ;## Filter the input data. Can be combined with frequency translation for IF signals ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. ;InputFilter.implementation=Fir_Filter ;InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.implementation=Pass_Through ;#dump: Dump the filtered data to a file. InputFilter.dump=false ;#dump_filename: Log path and filename. InputFilter.dump_filename=../data/input_filter.dat ;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation. ;#These options are based on parameters of gnuradio's function: gr_remez. ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version. InputFilter.input_item_type=gr_complex ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version. InputFilter.output_item_type=gr_complex ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version. InputFilter.taps_item_type=float ;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_taps=5 ;#number_of _bands: Number of frequency bands in the filter. InputFilter.number_of_bands=2 ;#bands: frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]. ;#Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ;#The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...]. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=2000000 InputFilter.IF=0 ;######### RESAMPLER CONFIG ############ ;## Resamples the input data. ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block ;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation ;Resampler.implementation=Direct_Resampler Resampler.implementation=Pass_Through ;#dump: Dump the resamplered data to a file. Resampler.dump=false ;#dump_filename: Log path and filename. Resampler.dump_filename=../data/resampler.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Resampler.item_type=gr_complex ;#sample_freq_in: the sample frequency of the input signal Resampler.sample_freq_in=8000000 ;#sample_freq_out: the desired sample frequency of the output signal Resampler.sample_freq_out=2000000 ;######### CHANNELS GLOBAL CONFIG ############ ;#count: Number of available GPS satellite channels. Channels_GPS.count=6 ;#count: Number of available Galileo satellite channels. Channels_Galileo.count=0 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver Channels.in_acquisition=1 ;#system: GPS, GLONASS, GALILEO, SBAS or COMPASS ;#if the option is disabled by default is assigned GPS Channel.system=GPS ;#signal: ;# "1C" GPS L1 C/A ;# "1P" GPS L1 P ;# "1W" GPS L1 Z-tracking and similar (AS on) ;# "1Y" GPS L1 Y ;# "1M" GPS L1 M ;# "1N" GPS L1 codeless ;# "2C" GPS L2 C/A ;# "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless ;# "2S" GPS L2 L2C (M) ;# "2L" GPS L2 L2C (L) ;# "2X" GPS L2 L2C (M+L) ;# "2P" GPS L2 P ;# "2W" GPS L2 Z-tracking and similar (AS on) ;# "2Y" GPS L2 Y ;# "2M" GPS GPS L2 M ;# "2N" GPS L2 codeless ;# "5I" GPS L5 I ;# "5Q" GPS L5 Q ;# "5X" GPS L5 I+Q ;# "1C" GLONASS G1 C/A ;# "1P" GLONASS G1 P ;# "2C" GLONASS G2 C/A (Glonass M) ;# "2P" GLONASS G2 P ;# "1A" GALILEO E1 A (PRS) ;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL) ;# "1C" GALILEO E1 C (no data) ;# "1X" GALILEO E1 B+C ;# "1Z" GALILEO E1 A+B+C ;# "5I" GALILEO E5a I (F/NAV OS) ;# "5Q" GALILEO E5a Q (no data) ;# "5X" GALILEO E5a I+Q ;# "7I" GALILEO E5b I ;# "7Q" GALILEO E5b Q ;# "7X" GALILEO E5b I+Q ;# "8I" GALILEO E5 I ;# "8Q" GALILEO E5 Q ;# "8X" GALILEO E5 I+Q ;# "6A" GALILEO E6 A ;# "6B" GALILEO E6 B ;# "6C" GALILEO E6 C ;# "6X" GALILEO E6 B+C ;# "6Z" GALILEO E6 A+B+C ;# "1C" SBAS L1 C/A ;# "5I" SBAS L5 I ;# "5Q" SBAS L5 Q ;# "5X" SBAS L5 I+Q ;# "2I" COMPASS E2 I ;# "2Q" COMPASS E2 Q ;# "2X" COMPASS E2 IQ ;# "7I" COMPASS E5b I ;# "7Q" COMPASS E5b Q ;# "7X" COMPASS E5b IQ ;# "6I" COMPASS E6 I ;# "6Q" COMPASS E6 Q ;# "6X" COMPASS E6 IQ ;#if the option is disabled by default is assigned "1C" GPS L1 C/A Channel.signal=1C ;######### SPECIFIC CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### CHANNEL 0 CONFIG ############ Channel0.system=GPS Channel0.signal=1C ;#satellite: Satellite PRN ID for this channel. Disable this option to random search Channel0.satellite=11 ;######### CHANNEL 1 CONFIG ############ Channel1.system=GPS Channel1.signal=1C Channel1.satellite=18 ;######### ACQUISITION GLOBAL CONFIG ############ ;#dump: Enable or disable the acquisition internal data file logging [true] or [false] Acquisition_GPS.dump=false ;#filename: Log path and filename Acquisition_GPS.dump_filename=./acq_dump.dat ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version. Acquisition_GPS.item_type=gr_complex ;#if: Signal intermediate frequency in [Hz] Acquisition_GPS.if=0 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms] Acquisition_GPS.coherent_integration_time_ms=1 ;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_GPS.implementation=GPS_L1_CA_PCPS_Acquisition ;#threshold: Acquisition threshold. It will be ignored if pfa is defined. Acquisition_GPS.threshold=0.01 ;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] ;Acquisition_GPS.pfa=0.0001 ;#doppler_max: Maximum expected Doppler shift [Hz] Acquisition_GPS.doppler_max=10000 ;#doppler_max: Doppler step in the grid search [Hz] Acquisition_GPS.doppler_step=500 ;#bit_transition_flag: Enable or disable a strategy to deal with bit transitions in GPS signals: process two dwells and take maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisition] (should not be used for Galileo_E1_PCPS_Ambiguous_Acquisition]) Acquisition_GPS.bit_transition_flag=false ;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true Acquisition_GPS.max_dwells=1 ;######### ACQUISITION CHANNELS CONFIG ###### ;#The following options are specific to each channel and overwrite the generic options ;######### TRACKING GLOBAL CONFIG ############ ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] Tracking_GPS.implementation=GPS_L1_CA_DLL_PLL_Optim_Tracking ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version. Tracking_GPS.item_type=gr_complex ;#sampling_frequency: Signal Intermediate Frequency in [Hz] Tracking_GPS.if=0 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false] Tracking_GPS.dump=false ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_GPS.dump_filename=./tracking_ch_ ;#pll_bw_hz: PLL loop filter bandwidth [Hz] Tracking_GPS.pll_bw_hz=50.0; ;#dll_bw_hz: DLL loop filter bandwidth [Hz] Tracking_GPS.dll_bw_hz=2.0; ;#fll_bw_hz: FLL loop filter bandwidth [Hz] Tracking_GPS.fll_bw_hz=10.0; ;#order: PLL/DLL loop filter order [2] or [3] Tracking_GPS.order=3; ;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] Tracking_GPS.early_late_space_chips=0.5; ;######### TELEMETRY DECODER GPS CONFIG ############ ;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A TelemetryDecoder_GPS.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_GPS.dump=false ;#decimation factor TelemetryDecoder_GPS.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ ;#implementation: Use [GPS_L1_CA_Observables] for GPS L1 C/A. Observables.implementation=GPS_L1_CA_Observables ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false] Observables.dump=false ;#dump_filename: Log path and filename. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ ;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version. PVT.implementation=GPS_L1_CA_PVT ;#averaging_depth: Number of PVT observations in the moving average algorithm PVT.averaging_depth=10 ;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.flag_averaging=true ;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms] PVT.output_rate_ms=100 ;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms. PVT.display_rate_ms=500 ;# RINEX, KML, and NMEA output configuration ;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump. PVT.dump_filename=./PVT ;#nmea_dump_filename: NMEA log path and filename PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; ;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one) PVT.flag_nmea_tty_port=false; ;#nmea_dump_devname: serial device descriptor for NMEA logging PVT.nmea_dump_devname=/dev/pts/4 ;#dump: Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ ;# Receiver output filter: Leave this block disabled in this version OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex gnss-sdr-0.0.6/CMakeLists.txt0000644000175000017500000014520312576764211015341 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Project setup ######################################################################## if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(WARNING "In-tree build is bad practice. Try 'cd build && cmake ../' ") endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) cmake_minimum_required(VERSION 2.8) project(gnss-sdr CXX C) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) file(RELATIVE_PATH RELATIVE_CMAKE_CALL ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) ######################################################################## # Determine optional blocks/libraries to be built (default: not built) # Enable them here or at the command line by doing 'cmake -DENABLE_XXX=ON ../' ######################################################################## # Support of optional RF front-ends option(ENABLE_OSMOSDR "Enable the use of OsmoSDR and other front-ends (RTL-based dongles, HackRF, bladeRF, etc.) as signal source (experimental)" OFF) option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Teleorbit Flexiband GNURadio driver" OFF) option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF) option(ENABLE_GN3S "Enable the use of the GN3S dongle as signal source (experimental)" OFF) # Performance analysis tools option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF) option(ENABLE_GPROF "Enable the use of the GNU profiler tool 'gprof'" OFF) # Acceleration option(ENABLE_OPENCL "Enable building of processing blocks implemented with OpenCL (experimental)" OFF) option(ENABLE_CUDA "Enable building of processing blocks implemented with CUDA (experimental, requires CUDA SDK)" OFF) # Building and packaging options option(ENABLE_GENERIC_ARCH "Builds a portable binary" OFF) option(ENABLE_PACKAGING "Enable software packaging" OFF) option(ENABLE_OWN_GLOG "Download glog and link it to gflags" OFF) option(ENABLE_LOG "Enable logging" ON) if(ENABLE_PACKAGING) set(ENABLE_GENERIC_ARCH ON) endif(ENABLE_PACKAGING) ############################### # GNSS-SDR version information ############################### set(THIS_IS_A_RELEASE OFF) # only related to version name, no further implications. if(NOT ${THIS_IS_A_RELEASE}) # Get the current working branch execute_process( COMMAND git rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ) # Get the latest abbreviated commit hash of the working branch execute_process( COMMAND git log -1 --format=%h WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) endif(NOT ${THIS_IS_A_RELEASE}) set(VERSION_INFO_MAJOR_VERSION 0) set(VERSION_INFO_API_COMPAT 0) if(${THIS_IS_A_RELEASE}) set(VERSION_INFO_MINOR_VERSION 6) else(${THIS_IS_A_RELEASE}) set(VERSION_INFO_MINOR_VERSION 6.git-${GIT_BRANCH}-${GIT_COMMIT_HASH}) endif(${THIS_IS_A_RELEASE}) set(VERSION ${VERSION_INFO_MAJOR_VERSION}.${VERSION_INFO_API_COMPAT}.${VERSION_INFO_MINOR_VERSION}) ######################################################################## # Environment setup ######################################################################## include(ExternalProject) # Detect 64-bits machine if( CMAKE_SIZEOF_VOID_P EQUAL 8 ) set(ARCH_64BITS TRUE) endif( CMAKE_SIZEOF_VOID_P EQUAL 8 ) set(OS_IS_MACOSX "") set(OS_IS_LINUX "") # Detect Linux Distribution if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(OperatingSystem "Linux") set(OS_IS_LINUX TRUE) if(ARCH_64BITS) set(ARCH_ "(64 bits)") else(ARCH_64BITS) set(ARCH_ "(32 bits)") endif(ARCH_64BITS) if(EXISTS "/etc/lsb-release") execute_process(COMMAND cat /etc/lsb-release COMMAND grep DISTRIB_ID COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_DISTRIBUTION RESULT_VARIABLE LINUX_ID_RESULT ) execute_process(COMMAND cat /etc/lsb-release COMMAND grep DISTRIB_RELEASE COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_VER RESULT_VARIABLE LINUX_VER_RESULT ) endif(EXISTS "/etc/lsb-release") if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/linuxmint/info") set(LINUX_DISTRIBUTION "LinuxMint") execute_process(COMMAND cat /etc/linuxmint/info COMMAND grep -m1 RELEASE COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_VER RESULT_VARIABLE LINUX_VER_RESULT ) endif(EXISTS "/etc/linuxmint/info") endif(NOT LINUX_DISTRIBUTION) if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/os-release") execute_process(COMMAND cat /etc/os-release COMMAND grep -m1 NAME COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_DISTRIBUTION RESULT_VARIABLE LINUX_ID_RESULT ) execute_process(COMMAND cat /etc/os-release COMMAND grep VERSION_ID COMMAND awk -F= "{ print $2 }" COMMAND tr "\n" " " COMMAND sed "s/ //" OUTPUT_VARIABLE LINUX_VER RESULT_VARIABLE LINUX_VER_RESULT ) if(${LINUX_DISTRIBUTION} MATCHES "Debian") set(LINUX_DISTRIBUTION "Debian") file(READ /etc/debian_version LINUX_VER) endif(${LINUX_DISTRIBUTION} MATCHES "Debian") endif(EXISTS "/etc/os-release") endif(NOT LINUX_DISTRIBUTION) if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/redhat-release") set(LINUX_DISTRIBUTION "Red Hat") file (READ /etc/redhat-release LINUX_VER) endif(EXISTS "/etc/redhat-release") endif(NOT LINUX_DISTRIBUTION) if(NOT LINUX_DISTRIBUTION) if(EXISTS "/etc/debian_version") set(LINUX_DISTRIBUTION "Debian") file (READ /etc/debian_version LINUX_VER) endif(EXISTS "/etc/debian_version") endif(NOT LINUX_DISTRIBUTION) if(NOT LINUX_DISTRIBUTION) set(LINUX_DISTRIBUTION "Generic") set(LINUX_VER "Unknown") endif(NOT LINUX_DISTRIBUTION) message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on ${LINUX_DISTRIBUTION} GNU/Linux Release ${LINUX_VER} ${ARCH_}") endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") # Detect Mac OS X Version if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(OperatingSystem "Mac OS X") set(OS_IS_MACOSX TRUE) exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION) string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) if(${DARWIN_VERSION} MATCHES "15") set(MACOSX_EL_CAPITAN TRUE) set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.11 El Capitan") endif(${DARWIN_VERSION} MATCHES "15") if(${DARWIN_VERSION} MATCHES "14") set(MACOSX_YOSEMITE TRUE) set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.10 Yosemite") endif(${DARWIN_VERSION} MATCHES "14") if(${DARWIN_VERSION} MATCHES "13") set(MACOSX_MAVERICKS TRUE) set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION="com.apple.compilers.llvm.clang.1_0") message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.9 Mavericks") endif(${DARWIN_VERSION} MATCHES "13") if(${DARWIN_VERSION} MATCHES "12") message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.8 Mountain Lion") endif(${DARWIN_VERSION} MATCHES "12") if(${DARWIN_VERSION} MATCHES "11") message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.7 Lion") endif(${DARWIN_VERSION} MATCHES "11") if(${DARWIN_VERSION} MATCHES "10") message(STATUS "Configuring GNSS-SDR v${VERSION} to be built on Mac OS X 10.6 Snow Leopard") endif(${DARWIN_VERSION} MATCHES "10") endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") #select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) if(ENABLE_GPERFTOOLS OR ENABLE_GPROF) set(CMAKE_BUILD_TYPE "RelWithDebInfo") message(STATUS "Build type not specified: defaulting to RelWithDebInfo.") else(ENABLE_GPERFTOOLS OR ENABLE_GPROF) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to Release.") endif(ENABLE_GPERFTOOLS OR ENABLE_GPROF) else(NOT CMAKE_BUILD_TYPE) message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") # Append -O2 optimization flag for Debug builds set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2") ################################################################################ # Checkout cmake version ################################################################################ if(CMAKE_VERSION VERSION_LESS 2.8.8) message(STATUS "Your CMake version is too old and does not support some features required by GNSS-SDR. CMake version must be at least 2.8.8. For more information check https://github.com/joakimkarlsson/bandit/issues/40") message(FATAL_ERROR "Fatal error: CMake >= 2.8.8 required.") endif(CMAKE_VERSION VERSION_LESS 2.8.8) ################################################################################ # Checkout compiler version ################################################################################ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7) message(STATUS "Your GCC version is too old and does not support some C++11 features required by GNSS-SDR. GCC version must be at least 4.7") if(${LINUX_DISTRIBUTION} MATCHES "Ubuntu") if(${LINUX_VER} MATCHES "12.04") message(STATUS "For instructions on how to upgrade GCC, check http://askubuntu.com/a/271561") endif(${LINUX_VER} MATCHES "12.04") endif(${LINUX_DISTRIBUTION} MATCHES "Ubuntu") message(FATAL_ERROR "Fatal error: GCC >= 4.7 required.") endif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7) endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") ################################################################################ # Check if the compiler defines the architecture as ARM ################################################################################ if(NOT OS_IS_MACOSX) include(TestForARM) endif(NOT OS_IS_MACOSX) ################################################################################ # Check for availability of SSE ################################################################################ if(NOT ENABLE_GENERIC_ARCH) include(TestForSSE) endif(NOT ENABLE_GENERIC_ARCH) ################################################################################ # Googletest - https://github.com/google/googletest ################################################################################ enable_testing() if(EXISTS $ENV{GTEST_DIR}) set(GTEST_DIR $ENV{GTEST_DIR}) endif(EXISTS $ENV{GTEST_DIR}) if(GTEST_DIR) message(STATUS "Googletest root folder set at ${GTEST_DIR}") find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS ${GTEST_DIR}) if(LIBGTEST_DEV_DIR) message (STATUS "Googletest has been found.") else(LIBGTEST_DEV_DIR) message (FATAL_ERROR " Googletest source code has not been found at ${GTEST_DIR}.") endif(LIBGTEST_DEV_DIR) find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS ${GTEST_DIR}/include) else(GTEST_DIR) find_path(LIBGTEST_DEV_DIR NAMES src/gtest-all.cc PATHS /usr/src/gtest /opt/local/src/gtest-1.7.0) find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h PATHS /usr/include /opt/local/src/gtest-1.7.0/include) if(LIBGTEST_DEV_DIR) message (STATUS "Googletest (libgtest-dev package) has been found.") else(LIBGTEST_DEV_DIR) message (STATUS " Googletest has not been found.") message (STATUS " Googletest will be downloaded and built automatically ") message (STATUS " when doing 'make'. ") endif(LIBGTEST_DEV_DIR) endif(GTEST_DIR) ################################################################################ # Boost - http://www.boost.org ################################################################################ if(UNIX AND EXISTS "/usr/lib64") list(APPEND BOOST_LIBRARYDIR "/usr/lib64") # Fedora 64-bit fix endif(UNIX AND EXISTS "/usr/lib64") if(GNURADIO_INSTALL_PREFIX) if(EXISTS "${GNURADIO_INSTALL_PREFIX}/lib/libboost_thread-mt.so") list(APPEND BOOST_LIBRARYDIR "${GNURADIO_INSTALL_PREFIX}/lib") # Boost installed by PyBOMBS list(APPEND BOOST_INCLUDEDIR "${GNURADIO_INSTALL_PREFIX}/include") # Boost installed by PyBOMBS endif(EXISTS "${GNURADIO_INSTALL_PREFIX}/lib/libboost_thread-mt.so") endif(GNURADIO_INSTALL_PREFIX) set(Boost_ADDITIONAL_VERSIONS "1.45.0" "1.45" "1.46.0" "1.46" "1.48.0" "1.48" "1.49.0" "1.49" "1.50.0" "1.50" "1.51.0" "1.51" "1.53.0" "1.53" "1.54.0" "1.54" "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" ) set(Boost_USE_MULTITHREAD ON) set(Boost_USE_STATIC_LIBS OFF) find_package(Boost COMPONENTS date_time system filesystem thread serialization chrono REQUIRED) if(NOT Boost_FOUND) message(FATAL_ERROR "Fatal error: Boost (version >=1.45.0) required.") endif(NOT Boost_FOUND) ################################################################################ # GNU Radio - http://gnuradio.org/redmine/projects/gnuradio/wiki ################################################################################ set(GR_REQUIRED_COMPONENTS RUNTIME ANALOG BLOCKS DIGITAL FFT FILTER PMT FEC TRELLIS UHD) find_package(Gnuradio) if(PC_GNURADIO_RUNTIME_VERSION) if(PC_GNURADIO_RUNTIME_VERSION VERSION_LESS 3.7.3) set(GNURADIO_RUNTIME_FOUND) message(STATUS "The GNU Radio version installed in your system is too old.") endif(PC_GNURADIO_RUNTIME_VERSION VERSION_LESS 3.7.3) endif(PC_GNURADIO_RUNTIME_VERSION) if(NOT GNURADIO_RUNTIME_FOUND) message(STATUS "CMake cannot find GNU Radio >= 3.7.3") if(OS_IS_LINUX) message("Go to http://gnuradio.org/redmine/projects/pybombs/wiki") message("and follow the instructions to install GNU Radio in your system.") message(FATAL_ERROR "GNU Radio 3.7.3 or later is required to build gnss-sdr") endif(OS_IS_LINUX) if(OS_IS_MACOSX) message("You can install it easily via Macports.") message("Open a terminal and type:") message("sudo port install gnuradio ") message(FATAL_ERROR "GNU Radio 3.7.3 or later is required to build gnss-sdr") endif(OS_IS_MACOSX) endif(NOT GNURADIO_RUNTIME_FOUND) if(NOT GNURADIO_BLOCKS_FOUND) message(FATAL_ERROR "*** gnuradio-blocks 3.7 or later is required to build gnss-sdr") endif() if(NOT GNURADIO_FILTER_FOUND) message(FATAL_ERROR "*** gnuradio-filter 3.7 or later is required to build gnss-sdr") endif() if(NOT GNURADIO_FFT_FOUND) message(FATAL_ERROR "*** gnuradio-fft 3.7 or later is required to build gnss-sdr") endif() if(NOT GNURADIO_ANALOG_FOUND) message(FATAL_ERROR "*** gnuradio-analog 3.7 or later is required to build gnss-sdr") endif() if(NOT GNURADIO_FEC_FOUND) message(FATAL_ERROR "*** gnuradio-fec 3.7 or later is required to build gnss-sdr") endif() if(NOT GNURADIO_TRELLIS_FOUND) message(FATAL_ERROR "*** gnuradio-trellis 3.7 or later is required to build gnss-sdr") endif() ################################################################################ # VOLK - Vector-Optimized Library of Kernels ################################################################################ find_package(Volk) if(NOT VOLK_FOUND) message(FATAL_ERROR "*** VOLK is required to build gnss-sdr") endif() ################################################################################ # volk_gnsssdr module - GNSS-SDR's own VOLK library ################################################################################ find_package(VolkGnssSdr) if(ENABLE_PACKAGING) if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) set(STRIP_VOLK_GNSSSDR_PROFILE "-DENABLE_STRIP=ON") endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) endif(ENABLE_PACKAGING) set(VOLK_GNSSSDR_BUILD_COMMAND "make") if(PYTHON_EXECUTABLE) set(USE_THIS_PYTHON "-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}") endif(PYTHON_EXECUTABLE) if(OS_IS_MACOSX) if(NOT PYTHON_EXECUTABLE) find_file(MAC_PYTHON python PATHS /opt/local/bin /usr/local/bin ) if(MAC_PYTHON) set(USE_THIS_PYTHON "-DPYTHON_EXECUTABLE=${MAC_PYTHON}") endif(MAC_PYTHON) endif(NOT PYTHON_EXECUTABLE) if(CMAKE_GENERATOR STREQUAL Xcode) set(VOLK_GNSSSDR_BUILD_COMMAND "xcodebuild" "-configuration" "Debug" "-target") endif(CMAKE_GENERATOR STREQUAL Xcode) endif(OS_IS_MACOSX) if(NOT VOLK_GNSSSDR_FOUND) set(VOLK_GNSSSDR_CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install -DENABLE_STATIC_LIBS=ON -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} ${STRIP_VOLK_GNSSSDR_PROFILE} ${USE_THIS_PYTHON} ) if(CMAKE_TOOLCHAIN_FILE) set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) endif(CMAKE_TOOLCHAIN_FILE) ExternalProject_Add(volk_gnsssdr_module PREFIX ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/build CMAKE_ARGS ${VOLK_GNSSSDR_CMAKE_ARGS} DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND ${VOLK_GNSSSDR_BUILD_COMMAND} volk_gnsssdr_profile INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install ) find_package(ORC) if(NOT ORC_FOUND) set(ORC_LIBRARIES "") set(ORC_INCLUDE_DIRS "") endif(NOT ORC_FOUND) add_library(volk_gnsssdr UNKNOWN IMPORTED) set_property(TARGET volk_gnsssdr PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/lib/libvolk_gnsssdr.a) set(VOLK_GNSSSDR_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/build/include/;${CMAKE_CURRENT_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include;${ORC_INCLUDE_DIRS}") set(VOLK_GNSSSDR_LIBRARIES volk_gnsssdr) add_custom_command(TARGET volk_gnsssdr_module POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install/bin/volk_gnsssdr_profile ${CMAKE_SOURCE_DIR}/install/volk_gnsssdr_profile) endif(NOT VOLK_GNSSSDR_FOUND) ################################################################################ # gflags - https://github.com/gflags/gflags ################################################################################ set(LOCAL_GFLAGS false) set(gflags_RELEASE 2.1.2) find_package(GFlags) if (NOT GFlags_FOUND) message (STATUS " gflags library has not been found.") message (STATUS " gflags will be downloaded and built automatically ") message (STATUS " when doing 'make'. ") ExternalProject_Add( gflags-${gflags_RELEASE} PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE} GIT_REPOSITORY git://github.com/gflags/gflags.git GIT_TAG v${gflags_RELEASE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gflags/gflags-${gflags_RELEASE} BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE} CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_gflags_nothreads_LIB=OFF -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} BUILD_COMMAND make UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) set(GFlags_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/include CACHE PATH "Local Gflags headers" ) add_library(gflags UNKNOWN IMPORTED) set_property(TARGET gflags PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags.a) add_dependencies(gflags gflags-${gflags_RELEASE}) set(GFlags_LIBS gflags) file(GLOB GFlags_SHARED_LIBS "${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gflags${CMAKE_SHARED_LIBRARY_SUFFIX}*") set(GFlags_LIBRARY gflags-${gflags_RELEASE}) set(GFlags_LIBRARY_PATH ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib ) link_directories(${GFlags_LIBRARY_PATH}) set(GFlags_lib ${GFlags_LIBS} CACHE FILEPATH "Local Gflags library") set(GFlags_LIBRARY_PATH ${GFlags_LIBS}) set(LOCAL_GFLAGS true CACHE STRING "GFlags downloaded and built automatically" FORCE) endif(NOT GFlags_FOUND) ################################################################################ # glog - https://github.com/google/glog ################################################################################ if(NOT ${ENABLE_OWN_GLOG}) find_package(GLOG) if(GLOG_INCLUDE_DIRS) set(GLOG_FOUND ON) endif(GLOG_INCLUDE_DIRS) endif(NOT ${ENABLE_OWN_GLOG}) set(glog_RELEASE 0.3.4) if (NOT GLOG_FOUND OR ${LOCAL_GFLAGS}) message (STATUS " glog library has not been found") if(NOT GFlags_FOUND) message(STATUS " or it is likely not linked to gflags.") endif(NOT GFlags_FOUND) message (STATUS " glog will be downloaded and built automatically ") message (STATUS " when doing 'make'. ") if(NOT ${LOCAL_GFLAGS}) add_library(gflags-${gflags_RELEASE} UNKNOWN IMPORTED) set_property(TARGET gflags-${gflags_RELEASE} PROPERTY IMPORTED_LOCATION "${GFlags_LIBS}") endif(NOT ${LOCAL_GFLAGS}) if(${LOCAL_GFLAGS}) set(TARGET_GFLAGS ${gflags}) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags "#!/bin/sh export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} export LDFLAGS=-L${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib export LIBS=${GFlags_SHARED_LIBS} export CXXFLAGS=\"-stdlib=libc++\" export CC=clang export CXX=clang++ ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/configure") file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) else("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags "#!/bin/sh export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} export LDFLAGS=-L${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib export LIBS=${GFlags_SHARED_LIBS} ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/configure") file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") else(${LOCAL_GFLAGS}) set(TARGET_GFLAGS gflags-${gflags_RELEASE}) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags "#!/bin/sh export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} export LDFLAGS=-L${GFlags_LIBRARY_DIRS} export LIBS=\"${GFlags_LIBS} -lc++\" export CXXFLAGS=\"-stdlib=libc++\" export CC=clang export CXX=clang++ ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/configure") file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) else("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags "#!/bin/sh export CPPFLAGS=-I${GFlags_INCLUDE_DIRS} export LDFLAGS=-L${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/lib export LIBS=${GFlags_SHARED_LIBS} ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/configure") file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") endif(${LOCAL_GFLAGS}) set(GLOG_CONFIGURE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/configure_with_gflags) ExternalProject_Add( glog-${glog_RELEASE} DEPENDS ${TARGET_GFLAGS} PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} GIT_REPOSITORY https://github.com/google/glog/ GIT_TAG v${glog_RELEASE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE} BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix= BUILD_COMMAND make UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) # Set up variables set(GLOG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}/src/ ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/src ) set(GLOG_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog.a ) set(LOCAL_GLOG true CACHE STRING "Glog downloaded and built automatically" FORCE) else(NOT GLOG_FOUND OR ${LOCAL_GFLAGS}) add_library(glog-${glog_RELEASE} UNKNOWN IMPORTED) set_property(TARGET glog-${glog_RELEASE} PROPERTY IMPORTED_LOCATION "${GLOG_LIBRARIES}") endif(NOT GLOG_FOUND OR ${LOCAL_GFLAGS}) if(NOT ENABLE_LOG) message(STATUS "Logging is not enabled") add_definitions(-DGOOGLE_STRIP_LOG=1) endif(NOT ENABLE_LOG) ################################################################################ # Armadillo - http://arma.sourceforge.net/ ################################################################################ if(OS_IS_LINUX) ############################################################################# # Check that LAPACK is found in the system # LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse. ############################################################################# find_library(LAPACK lapack) if(NOT LAPACK) message(" The LAPACK library has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum install lapack-devel") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(" sudo zypper install lapack-devel") else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo apt-get install liblapack-dev") endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(FATAL_ERROR "LAPACK is required to build gnss-sdr") endif(NOT LAPACK) ############################################################################# # Check that BLAS is found in the system # BLAS is used for matrix multiplication. # Without BLAS, matrix multiplication will still work, but might be slower. ############################################################################# find_library(BLAS blas) if(NOT BLAS) message(" The BLAS library has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum install blas-devel") else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo apt-get install libopenblas-dev") endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(FATAL_ERROR "BLAS is required to build gnss-sdr") endif(NOT BLAS) ############################################# # Check if GFORTRAN is found in the system ############################################# find_library(GFORTRAN NAMES gfortran PATHS /usr/lib /usr/local/lib /usr/local/lib/i386 /usr/lib/gcc/x86_64-linux-gnu /usr/lib/gcc/i686-linux-gnu /usr/lib/gcc/i386-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/4.6 # Ubuntu 12.04 /usr/lib/gcc/i686-linux-gnu/4.6 /usr/lib/gcc/x86_64-linux-gnu/4.7 /usr/lib/gcc/i686-linux-gnu/4.7 /usr/lib/gcc/x86_64-linux-gnu/4.8 /usr/lib/gcc/i686-linux-gnu/4.8 /usr/lib/gcc/x86_64-linux-gnu/4.9 /usr/lib/gcc/i686-linux-gnu/4.9 /usr/lib/gcc/x86_64-redhat-linux/4.7.2 # Fedora 18 /usr/lib/gcc/i686-redhat-linux/4.7.2 /usr/lib/gcc/x86_64-redhat-linux/4.8.1 # Fedora 19 /usr/lib/gcc/x86_64-redhat-linux/4.8.3 # Fedora 20 /usr/lib/gcc/x86_64-redhat-linux/4.9.1 # Fedora 21 /usr/lib/gcc/i686-redhat-linux/4.8.1 /usr/lib/gcc/i686-redhat-linux/4.8.3 /usr/lib/gcc/i686-redhat-linux/4.9.1 /usr/lib/gcc/x86_64-redhat-linux/4.4.4 # CentOS 6 /usr/lib/gcc/i686-redhat-linux/4.4.4 /usr/lib/gcc/x86_64-redhat-linux/4.8.2 /usr/lib/gcc/i686-redhat-linux/4.8.2 /usr/lib/gcc/i586-suse-linux/4.8 # OpenSUSE 13.1 /usr/lib/gcc/i586-suse-linux/4.9 /usr/lib/gcc/x86_64-suse-linux/4.8 /usr/lib/gcc/x86_64-suse-linux/4.9 /usr/lib/gcc/i486-linux-gnu # Debian 7 /usr/lib/gcc/i486-linux-gnu/4.4 /usr/lib/gcc/i486-linux-gnu/4.6 /usr/lib/gcc/i486-linux-gnu/4.7 /usr/lib/gcc/i486-linux-gnu/4.8 /usr/lib/gcc/i486-linux-gnu/4.9 /usr/lib/gcc/i586-linux-gnu/4.9 /usr/lib/gcc/arm-linux-gnueabihf/4.4 # Debian armhf /usr/lib/gcc/arm-linux-gnueabihf/4.5 /usr/lib/gcc/arm-linux-gnueabihf/4.6 /usr/lib/gcc/arm-linux-gnueabihf/4.7 /usr/lib/gcc/arm-linux-gnueabihf/4.8 /usr/lib/gcc/arm-linux-gnueabihf/4.9 /usr/lib/gcc/aarch64-linux-gnu/4.9 # Debian arm64 /usr/lib/gcc/arm-linux-gnueabi/4.7 # Debian armel /usr/lib/gcc/arm-linux-gnueabi/4.9 ) if(NOT GFORTRAN) message(STATUS "The gfortran library has not been found.") message(STATUS " You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(STATUS " sudo yum install gcc-fortran") elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") message(STATUS " sudo zypper install gcc-fortran") else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(STATUS " sudo apt-get install gfortran") endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") endif(NOT GFORTRAN) endif(OS_IS_LINUX) find_package(Armadillo) if(NOT ARMADILLO_FOUND) message(STATUS " Armadillo has not been found.") message(STATUS " Armadillo will be downloaded and built automatically ") message(STATUS " when doing 'make'. ") set(armadillo_RELEASE 5.200.2) set(armadillo_MD5 "ef57ba4c473a3b67c672441a7face09e") ExternalProject_Add( armadillo-${armadillo_RELEASE} PREFIX ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE} URL http://sourceforge.net/projects/arma/files/armadillo-${armadillo_RELEASE}.tar.gz DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download/armadillo-${armadillo_RELEASE} URL_MD5 ${armadillo_MD5} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DBUILD_SHARED_LIBS=OFF BUILD_IN_SOURCE 1 BUILD_COMMAND make UPDATE_COMMAND "" INSTALL_COMMAND "" ) # Set up variables ExternalProject_Get_Property(armadillo-${armadillo_RELEASE} binary_dir) set(ARMADILLO_INCLUDE_DIRS ${binary_dir}/include ) find_library(LAPACK NAMES lapack HINTS /usr/lib /usr/local/lib /usr/lib64) if(OS_IS_MACOSX) find_library(BLAS blas) endif(OS_IS_MACOSX) find_package(OpenBLAS) if(OPENBLAS_FOUND) set(BLAS ${OPENBLAS}) endif(OPENBLAS_FOUND) if(NOT GFORTRAN) set(GFORTRAN "") endif(NOT GFORTRAN) set(ARMADILLO_LIBRARIES ${BLAS} ${LAPACK} ${GFORTRAN} ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo.a) set(LOCAL_ARMADILLO true CACHE STRING "Armadillo downloaded and built automatically" FORCE) # Save a copy at the thirdparty folder file(COPY ${CMAKE_CURRENT_BINARY_DIR}/armadillo-${armadillo_RELEASE} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo ) else(NOT ARMADILLO_FOUND) set(armadillo_RELEASE ${ARMADILLO_VERSION_STRING}) add_library(armadillo-${armadillo_RELEASE} UNKNOWN IMPORTED) set_property(TARGET armadillo-${armadillo_RELEASE} PROPERTY IMPORTED_LOCATION "${ARMADILLO_LIBRARIES}") endif(NOT ARMADILLO_FOUND) ################################################################################ # GnuTLS - http://www.gnutls.org/ ################################################################################ find_package(GnuTLS) if(NOT GNUTLS_FOUND) message(" The GnuTLS library has not been found.") message(" You can try to install it by typing:") if(OS_IS_LINUX) if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo yum install libgnutls-openssl-devel") else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" sudo apt-get install libgnutls-openssl-dev") endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") endif(OS_IS_LINUX) if(OS_IS_MACOSX) message(" sudo port install gnutls") endif(OS_IS_MACOSX) message(FATAL_ERROR "GnuTLS libraries are required to build gnss-sdr") endif(NOT GNUTLS_FOUND) ################################################################################ # Universal Hardware Driver (UHD) ################################################################################ find_package(UHD) if(NOT UHD_FOUND) set(ENABLE_UHD OFF) message(STATUS "The Universal Hardware Driver (UHD) based signal source will not be built,") message(STATUS "so all USRP-based front-ends will not be usable.") message(STATUS "Please check http://code.ettus.com/redmine/ettus/projects/uhd/wiki") else(NOT UHD_FOUND) if(NOT GNURADIO_UHD_FOUND) message(FATAL_ERROR "*** gnuradio-uhd 3.7 or later is required to build gnss-sdr") endif(NOT GNURADIO_UHD_FOUND) set(ENABLE_UHD ON) endif(NOT UHD_FOUND) ################################################################################ # Doxygen - http://www.stack.nl/~dimitri/doxygen/index.html (OPTIONAL, used if found) ################################################################################ find_package(Doxygen) if(DOXYGEN_FOUND) message(STATUS "Doxygen found.") message(STATUS "You can build the documentation with 'make doc'." ) message(STATUS "When done, point your browser to ${CMAKE_SOURCE_DIR}/html/index.html") set(HAVE_DOT ${DOXYGEN_DOT_FOUND}) file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir) find_package(LATEX) if (PDFLATEX_COMPILER) set(GENERATE_PDF_DOCUMENTATION "YES") set(GNSSSDR_USE_MATHJAX "NO") else(PDFLATEX_COMPILER) set(GENERATE_PDF_DOCUMENTATION "NO") set(GNSSSDR_USE_MATHJAX "YES") endif(PDFLATEX_COMPILER) configure_file(${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.in ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile @ONLY ) add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Generating API documentation with Doxygen." VERBATIM ) if(LATEX_COMPILER) message(STATUS "'make pdfmanual' will generate a manual at ${CMAKE_SOURCE_DIR}/docs/GNSS-SDR_manual.pdf") add_custom_target(pdfmanual COMMAND ${CMAKE_MAKE_PROGRAM} COMMAND ${CMAKE_COMMAND} -E copy refman.pdf ${CMAKE_SOURCE_DIR}/docs/GNSS-SDR_manual.pdf COMMAND ${CMAKE_MAKE_PROGRAM} clean DEPENDS doc WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/latex COMMENT "Generating PDF manual with Doxygen." VERBATIM ) endif(LATEX_COMPILER) message(STATUS "'make doc-clean' will clean the documentation.") add_custom_target(doc-clean COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/docs/html COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_SOURCE_DIR}/docs/latex COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_SOURCE_DIR}/docs/GNSS-SDR_manual.pdf COMMENT "Cleaning documentation." VERBATIM ) else(DOXYGEN_FOUND) message(STATUS " Doxygen has not been found in your system.") message(STATUS " You can get nice code documentation by using it!") message(STATUS " Get it from http://www.stack.nl/~dimitri/doxygen/index.html") if(OS_IS_LINUX) if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" or simply by doing 'sudo yum install doxygen-latex'.") else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(" or simply by doing 'sudo apt-get install doxygen-latex'.") endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") endif(OS_IS_LINUX) if(OS_IS_MACOSX) message(STATUS " or simply by doing 'sudo port install doxygen +latex'.") endif(OS_IS_MACOSX) endif(DOXYGEN_FOUND) ############################################################################### # OpenCL (OPTIONAL) ############################################################################### if(ENABLE_OPENCL) find_package(OpenCL) if($ENV{DISABLE_OPENCL}) set(DISABLE_OPENCL TRUE) endif($ENV{DISABLE_OPENCL}) if(DISABLE_OPENCL) set(OPENCL_FOUND FALSE) else(DISABLE_OPENCL) if(OPENCL_FOUND) message(STATUS "OpenCL has been found and will be used by some processing blocks") message(STATUS "You can disable OpenCL use by doing 'cmake -DENABLE_OPENCL=OFF ../' ") endif(OPENCL_FOUND) endif(DISABLE_OPENCL) if(ENABLE_GENERIC_ARCH) set(OPENCL_FOUND FALSE) message(STATUS "ENABLE_GENERIC_ARCH is set to ON so the use of OpenCL has been disabled.") endif(ENABLE_GENERIC_ARCH) if(NOT OPENCL_FOUND) message(STATUS "Processing blocks using OpenCL will not be built.") endif(NOT OPENCL_FOUND) else(ENABLE_OPENCL) set(OPENCL_FOUND FALSE) endif(ENABLE_OPENCL) ############################################################################### # CUDA (OPTIONAL) ############################################################################### if($ENV{CUDA_GPU_ACCEL}) message(STATUS "CUDA_GPU_ACCEL environment variable found." ) set(ENABLE_CUDA ON) endif($ENV{CUDA_GPU_ACCEL}) if(ENABLE_CUDA) FIND_PACKAGE(CUDA REQUIRED) message(STATUS "NVIDIA CUDA GPU Acceleration will be enabled." ) message(STATUS "You can disable it with 'cmake -DENABLE_CUDA=OFF ../'" ) else(ENABLE_CUDA) message(STATUS "NVIDIA CUDA GPU Acceleration will be not enabled." ) message(STATUS "Enable it with 'cmake -DENABLE_CUDA=ON ../' to add support for GPU-based acceleration using CUDA." ) endif(ENABLE_CUDA) ################################################################################ # GPerftools - https://github.com/gperftools/gperftools (OPTIONAL) ################################################################################ if(ENABLE_GPERFTOOLS) find_package(Gperftools) if ( NOT GPERFTOOLS_FOUND ) message(STATUS "Although ENABLE_GPERFTOOLS has been set to ON, GPerftools has not been found.") message(STATUS "Binaries will be compiled without 'tcmalloc' and 'profiler' libraries.") message(STATUS "You can install GPerftools from https://github.com/gperftools/gperftools") else( NOT GPERFTOOLS_FOUND ) message(STATUS "GPerftools libraries found." ) message(STATUS "Binaries will be compiled with 'tcmalloc' and 'profiler' libraries.") endif( NOT GPERFTOOLS_FOUND ) endif(ENABLE_GPERFTOOLS) ################################################################################ # Setup of optional drivers ################################################################################ if($ENV{GN3S_DRIVER}) message(STATUS "GN3S_DRIVER environment variable found." ) set(ENABLE_GN3S ON) endif($ENV{GN3S_DRIVER}) if(GN3S_DRIVER) set(ENABLE_GN3S ON) endif(GN3S_DRIVER) if(ENABLE_GN3S) message(STATUS "The GN3S driver will be compiled.") message(STATUS "You can disable it with 'cmake -DENABLE_GN3S=OFF ../'" ) else(ENABLE_GN3S) message(STATUS "The (optional and experimental) GN3S driver is not enabled." ) message(STATUS "Enable it with 'cmake -DENABLE_GN3S=ON ../' to add support for the GN3S dongle." ) endif(ENABLE_GN3S) if($ENV{RAW_ARRAY_DRIVER}) message(STATUS "RAW_ARRAY_DRIVER environment variable found." ) set(ENABLE_ARRAY ON) endif($ENV{RAW_ARRAY_DRIVER}) if(RAW_ARRAY_DRIVER) set(ENABLE_ARRAY ON) endif(RAW_ARRAY_DRIVER) if(ENABLE_ARRAY) message(STATUS "CTTC's Antenna Array front-end driver will be compiled." ) message(STATUS "You can disable it with 'cmake -DENABLE_ARRAY=OFF ../'" ) # copy firmware to install folder # Build project gr-dbfcttc else(ENABLE_ARRAY) message(STATUS "The (optional) CTTC's Antenna Array front-end driver is not enabled." ) message(STATUS "Enable it with 'cmake -DENABLE_ARRAY=ON ../' to add support for the CTTC experimental array front-end." ) endif(ENABLE_ARRAY) if($ENV{RTLSDR_DRIVER}) message(STATUS "RTLSDR_DRIVER environment variable found." ) set(ENABLE_OSMOSDR ON) endif($ENV{RTLSDR_DRIVER}) if(ENABLE_OSMOSDR) message(STATUS "The driver for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based dongles, etc.) will be compiled." ) message(STATUS "You can disable it with 'cmake -DENABLE_OSMOSDR=OFF ../'" ) else(ENABLE_OSMOSDR) message(STATUS "The (optional) driver for OsmoSDR and related front-ends is not enabled." ) message(STATUS "Enable it with 'cmake -DENABLE_OSMOSDR=ON ../' to add support for OsmoSDR and other front-ends (HackRF, bladeRF, Realtek's RTL2832U-based USB dongles, etc.)" ) endif(ENABLE_OSMOSDR) if($ENV{FLEXIBAND_DRIVER}) message(STATUS "FLEXIBAND_DRIVER environment variable found." ) set(ENABLE_FLEXIBAND ON) endif($ENV{FLEXIBAND_DRIVER}) if(FLEXIBAND_DRIVER) set(ENABLE_FLEXIBAND ON) endif(FLEXIBAND_DRIVER) if(ENABLE_FLEXIBAND) message(STATUS "CTTC's Antenna Array front-end driver will be compiled." ) message(STATUS "You can disable it with 'cmake -DENABLE_FLEXIBAND=OFF ../'" ) else(ENABLE_FLEXIBAND) message(STATUS "The (optional) Teleorbit Flexiband front-end driver adapter is not enabled." ) message(STATUS "Enable it with 'cmake -DENABLE_FLEXIBAND=ON ../' to add support for the Teleorbit Flexiband front-end." ) endif(ENABLE_FLEXIBAND) ######################################################################## # Set compiler flags ######################################################################## # Enable C++11 support in GCC # For "-std=c++0x" GCC's support for C++11 see http://gcc.gnu.org/projects/cxx0x.html if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11 -Wall -Wextra") #Add warning flags: For "-Wall" see http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -std=c++11 -stdlib=libc++ -Wno-c++11-narrowing") if(CMAKE_BUILD_TYPE MATCHES "Release") set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -Wno-unused-private-field") endif(CMAKE_BUILD_TYPE MATCHES "Release") endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Processor-architecture related flags # See http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options if (NOT ARCH_COMPILER_FLAGS) if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) if(OS_IS_MACOSX) set(ARCH_COMPILER_FLAGS "-march=corei7 -mfpmath=sse") else(OS_IS_MACOSX) if(NOT ${ENABLE_GENERIC_ARCH}) if(IS_ARM) # ARM-specific options (https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html) if(ARM_VERSION STREQUAL "arm") # Unknown arm version - try our best to detect set(ARCH_COMPILER_FLAGS "-mcpu=native") else(ARM_VERSION STREQUAL "arm") set(ARCH_COMPILER_FLAGS "-march=${ARM_VERSION}") endif(ARM_VERSION STREQUAL "arm") else(IS_ARM) set(ARCH_COMPILER_FLAGS "-march=native -mfpmath=sse") endif(IS_ARM) endif(NOT ${ENABLE_GENERIC_ARCH}) endif(OS_IS_MACOSX) endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) endif (NOT ARCH_COMPILER_FLAGS) set(MY_CXX_FLAGS "${MY_CXX_FLAGS} ${ARCH_COMPILER_FLAGS}") if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) #http://gcc.gnu.org/wiki/Visibility add_definitions(-fvisibility=hidden) endif() if(ENABLE_GPERFTOOLS) # Set GPerftools related flags if it is available # See http://gperftools.googlecode.com/svn/trunk/README if(GPERFTOOLS_FOUND) if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -fno-builtin") endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") endif(GPERFTOOLS_FOUND) endif(ENABLE_GPERFTOOLS) if(ENABLE_GPROF) #if(CMAKE_COMPILER_IS_GNUCXX) set(MY_CXX_FLAGS "${MY_CXX_FLAGS} -pg") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") #endif(CMAKE_COMPILER_IS_GNUCXX) endif(ENABLE_GPROF) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_CXX_FLAGS}") if(OS_IS_LINUX) if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "openSUSE") link_libraries(pthread) endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "openSUSE") endif(OS_IS_LINUX) ######################################################################## # Create uninstall target ######################################################################## configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) ######################################################################## # Add subdirectories (in order of deps) ######################################################################## add_subdirectory(src) if(ENABLE_PACKAGING) include(GnssSdrPackaging) endif(ENABLE_PACKAGING) gnss-sdr-0.0.6/cmake/0000755000175000017500000000000012576764163013662 5ustar carlescarlesgnss-sdr-0.0.6/cmake/Modules/0000755000175000017500000000000012576764163015272 5ustar carlescarlesgnss-sdr-0.0.6/cmake/Modules/FindGFlags.cmake0000644000175000017500000000333712576764163020246 0ustar carlescarles# - Try to find GFlags # # The following variables are optionally searched for defaults # GFlags_ROOT_DIR: Base directory where all GFlags components are found # # The following are set after configuration is done: # GFlags_FOUND # GFlags_INCLUDE_DIRS # GFlags_LIBS # GFlags_LIBRARY_DIRS # - Try to find GFlags # # # The following are set after configuration is done: # GFlags_FOUND # GFlags_INCLUDE_DIRS # GFlags_LIBS # GFlags_LIBRARY_DIRS cmake_minimum_required(VERSION 2.6) if(APPLE) FIND_PATH(GFlags_ROOT_DIR libgflags.dylib PATHS /opt/local/lib /usr/local/lib ) else(APPLE) FIND_PATH(GFlags_ROOT_DIR libgflags.so HINTS /usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu /usr/lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabi /usr/lib/aarch64-linux-gnu /usr/lib64 /usr/lib ) endif(APPLE) IF(GFlags_ROOT_DIR) # We are testing only a couple of files in the include directories FIND_PATH(GFlags_INCLUDE_DIRS gflags/gflags.h HINTS /opt/local/include /usr/local/include /usr/include ${GFlags_ROOT_DIR}/src ) # Find the libraries SET(GFlags_LIBRARY_DIRS ${GFlags_ROOT_DIR}) FIND_LIBRARY(GFlags_lib gflags ${GFlags_LIBRARY_DIRS}) # set up include and link directory include_directories(${GFlags_INCLUDE_DIRS}) link_directories(${GFlags_LIBRARY_DIRS}) message(STATUS "gflags library found at ${GFlags_lib}") SET(GFlags_LIBS ${GFlags_lib}) SET(GFlags_FOUND true) MARK_AS_ADVANCED(GFlags_INCLUDE_DIRS) ELSE(GFlags_ROOT_DIR) MESSAGE(STATUS "Cannot find gflags") SET(GFlags_FOUND false) ENDIF(GFlags_ROOT_DIR) gnss-sdr-0.0.6/cmake/Modules/FindGnuradio.cmake0000644000175000017500000001325412576764163020652 0ustar carlescarles######################################################################## # Find GNU Radio ######################################################################## INCLUDE(FindPkgConfig) INCLUDE(FindPackageHandleStandardArgs) # if GR_REQUIRED_COMPONENTS is not defined, it will be set to the following list if(NOT GR_REQUIRED_COMPONENTS) set(GR_REQUIRED_COMPONENTS RUNTIME ANALOG BLOCKS DIGITAL FFT FILTER PMT FEC TRELLIS UHD) endif() # Allows us to use all .cmake files in this directory list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}) # Easily access all libraries and includes of GNU Radio set(GNURADIO_ALL_LIBRARIES "") set(GNURADIO_ALL_INCLUDE_DIRS "") MACRO(LIST_CONTAINS var value) SET(${var}) FOREACH(value2 ${ARGN}) IF (${value} STREQUAL ${value2}) SET(${var} TRUE) ENDIF(${value} STREQUAL ${value2}) ENDFOREACH(value2) ENDMACRO(LIST_CONTAINS) function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) LIST_CONTAINS(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS}) if(NOT REQUIRED_MODULE) #message("Ignoring GNU Radio Module ${EXTVAR}") return() endif() message(STATUS "Checking for GNU Radio Module: ${EXTVAR}") # check for .pc hints PKG_CHECK_MODULES(PC_GNURADIO_${EXTVAR} ${PCNAME}) if(NOT PC_GNURADIO_${EXTVAR}_FOUND) set(PC_GNURADIO_${EXTVAR}_LIBRARIES ${LIBFILE}) endif() set(INCVAR_NAME "GNURADIO_${EXTVAR}_INCLUDE_DIRS") set(LIBVAR_NAME "GNURADIO_${EXTVAR}_LIBRARIES") set(PC_INCDIR ${PC_GNURADIO_${EXTVAR}_INCLUDEDIR}) set(PC_LIBDIR ${PC_GNURADIO_${EXTVAR}_LIBDIR}) # look for include files FIND_PATH( ${INCVAR_NAME} NAMES ${INCFILE} HINTS $ENV{GNURADIO_RUNTIME_DIR}/include ${PC_INCDIR} ${CMAKE_INSTALL_PREFIX}/include ${GNURADIO_INSTALL_PREFIX}/include PATHS /usr/local/include /usr/include ${GNURADIO_INSTALL_PREFIX}/include ) # look for libs foreach(libname ${PC_GNURADIO_${EXTVAR}_LIBRARIES}) FIND_LIBRARY( ${LIBVAR_NAME}_${libname} NAMES ${libname} HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib ${PC_LIBDIR} ${CMAKE_INSTALL_PREFIX}/lib/ ${CMAKE_INSTALL_PREFIX}/lib64/ ${GNURADIO_INSTALL_PREFIX}/lib/ ${GNURADIO_INSTALL_PREFIX}/lib64 PATHS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ${GNURADIO_INSTALL_PREFIX}/lib ) list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}}) endforeach(libname) set(${LIBVAR_NAME} ${${LIBVAR_NAME}} PARENT_SCOPE) # show results message(STATUS " * INCLUDES=${GNURADIO_${EXTVAR}_INCLUDE_DIRS}") message(STATUS " * LIBS=${GNURADIO_${EXTVAR}_LIBRARIES}") # append to all includes and libs list set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS} ${GNURADIO_${EXTVAR}_INCLUDE_DIRS} PARENT_SCOPE) set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES} ${GNURADIO_${EXTVAR}_LIBRARIES} PARENT_SCOPE) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_${EXTVAR} DEFAULT_MSG GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) message(STATUS "GNURADIO_${EXTVAR}_FOUND = ${GNURADIO_${EXTVAR}_FOUND}") set(GNURADIO_${EXTVAR}_FOUND ${GNURADIO_${EXTVAR}_FOUND} PARENT_SCOPE) # generate an error if the module is missing if(NOT GNURADIO_${EXTVAR}_FOUND) message(STATUS "Required GNU Radio Component: ${EXTVAR} missing!") endif() MARK_AS_ADVANCED(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) endfunction() GR_MODULE(RUNTIME gnuradio-runtime gnuradio/top_block.h gnuradio-runtime) GR_MODULE(ANALOG gnuradio-analog gnuradio/analog/api.h gnuradio-analog) GR_MODULE(AUDIO gnuradio-audio gnuradio/audio/api.h gnuradio-audio) GR_MODULE(BLOCKS gnuradio-blocks gnuradio/blocks/api.h gnuradio-blocks) GR_MODULE(CHANNELS gnuradio-channels gnuradio/channels/api.h gnuradio-channels) GR_MODULE(DIGITAL gnuradio-digital gnuradio/digital/api.h gnuradio-digital) GR_MODULE(FCD gnuradio-fcd gnuradio/fcd_api.h gnuradio-fcd) GR_MODULE(FEC gnuradio-fec gnuradio/fec/api.h gnuradio-fec) GR_MODULE(FFT gnuradio-fft gnuradio/fft/api.h gnuradio-fft) GR_MODULE(FILTER gnuradio-filter gnuradio/filter/api.h gnuradio-filter) GR_MODULE(NOAA gnuradio-noaa gnuradio/noaa/api.h gnuradio-noaa) GR_MODULE(PAGER gnuradio-pager gnuradio/pager/api.h gnuradio-pager) GR_MODULE(QTGUI gnuradio-qtgui gnuradio/qtgui/api.h gnuradio-qtgui) GR_MODULE(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis) GR_MODULE(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd) GR_MODULE(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder) GR_MODULE(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet) GR_MODULE(WXGUI gnuradio-wxgui gnuradio/wxgui/api.h gnuradio-wxgui) GR_MODULE(PMT gnuradio-runtime pmt/pmt.h gnuradio-pmt) list(REMOVE_DUPLICATES GNURADIO_ALL_INCLUDE_DIRS) list(REMOVE_DUPLICATES GNURADIO_ALL_LIBRARIES) # Trick to find out that GNU Radio is >= 3.7.4 if pkgconfig is not present if(NOT PC_GNURADIO_RUNTIME_VERSION) find_file(GNURADIO_VERSION_GREATER_THAN_373 NAMES gnuradio/blocks/tsb_vector_sink_f.h HINTS $ENV{GNURADIO_RUNTIME_DIR}/include ${CMAKE_INSTALL_PREFIX}/include ${GNURADIO_INSTALL_PREFIX}/include PATHS /usr/local/include /usr/include ${GNURADIO_INSTALL_PREFIX}/include ) if(GNURADIO_VERSION_GREATER_THAN_373) set(PC_GNURADIO_RUNTIME_VERSION "3.7.4+") endif(GNURADIO_VERSION_GREATER_THAN_373) endif(NOT PC_GNURADIO_RUNTIME_VERSION)gnss-sdr-0.0.6/cmake/Modules/CMakeParseArgumentsCopy.cmake0000644000175000017500000001340312576764163022771 0ustar carlescarles# CMAKE_PARSE_ARGUMENTS( args...) # # CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for # parsing the arguments given to that macro or function. # It processes the arguments and defines a set of variables which hold the # values of the respective options. # # The argument contains all options for the respective macro, # i.e. keywords which can be used when calling the macro without any value # following, like e.g. the OPTIONAL keyword of the install() command. # # The argument contains all keywords for this macro # which are followed by one value, like e.g. DESTINATION keyword of the # install() command. # # The argument contains all keywords for this macro # which can be followed by more than one value, like e.g. the TARGETS or # FILES keywords of the install() command. # # When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the # keywords listed in , and # a variable composed of the given # followed by "_" and the name of the respective keyword. # These variables will then hold the respective value from the argument list. # For the keywords this will be TRUE or FALSE. # # All remaining arguments are collected in a variable # _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether # your macro was called with unrecognized parameters. # # As an example here a my_install() macro, which takes similar arguments as the # real install() command: # # function(MY_INSTALL) # set(options OPTIONAL FAST) # set(oneValueArgs DESTINATION RENAME) # set(multiValueArgs TARGETS CONFIGURATIONS) # cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # ... # # Assume my_install() has been called like this: # my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) # # After the cmake_parse_arguments() call the macro will have set the following # variables: # MY_INSTALL_OPTIONAL = TRUE # MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() # MY_INSTALL_DESTINATION = "bin" # MY_INSTALL_RENAME = "" (was not used) # MY_INSTALL_TARGETS = "foo;bar" # MY_INSTALL_CONFIGURATIONS = "" (was not used) # MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" # # You can the continue and process these variables. # # Keywords terminate lists of values, e.g. if directly after a one_value_keyword # another recognized keyword follows, this is interpreted as the beginning of # the new option. # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would # be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. #============================================================================= # Copyright 2010 Alexander Neundorf # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) return() endif() set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) # first set all result variables to empty/FALSE foreach(arg_name ${_singleArgNames} ${_multiArgNames}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${_optionNames}) set(${prefix}_${option} FALSE) endforeach(option) set(${prefix}_UNPARSED_ARGUMENTS) set(insideValues FALSE) set(currentArgName) # now iterate over all arguments and fill the result variables foreach(currentArg ${ARGN}) list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) if(insideValues) if("${insideValues}" STREQUAL "SINGLE") set(${prefix}_${currentArgName} ${currentArg}) set(insideValues FALSE) elseif("${insideValues}" STREQUAL "MULTI") list(APPEND ${prefix}_${currentArgName} ${currentArg}) endif() else(insideValues) list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) endif(insideValues) else() if(NOT ${optionIndex} EQUAL -1) set(${prefix}_${currentArg} TRUE) set(insideValues FALSE) elseif(NOT ${singleArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "SINGLE") elseif(NOT ${multiArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "MULTI") endif() endif() endforeach(currentArg) # propagate the result variables to the caller: foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) endforeach(arg_name) set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) gnss-sdr-0.0.6/cmake/Modules/FindVolkGnssSdr.cmake0000644000175000017500000000200512576764163021311 0ustar carlescarles######################################################################## # Find VOLK (Vector-Optimized Library of Kernels) GNSS-SDR library ######################################################################## INCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_VOLK_GNSSSDR volk_gnsssdr) FIND_PATH( VOLK_GNSSSDR_INCLUDE_DIRS NAMES volk_gnsssdr/volk_gnsssdr.h HINTS $ENV{VOLK_GNSSSDR_DIR}/include ${PC_VOLK_GNSSSDR_INCLUDEDIR} PATHS /usr/local/include /usr/include ${GNURADIO_INSTALL_PREFIX}/include ) FIND_LIBRARY( VOLK_GNSSSDR_LIBRARIES NAMES volk_gnsssdr HINTS $ENV{VOLK_GNSSSDR_DIR}/lib ${PC_VOLK_GNSSSDR_LIBDIR} PATHS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ${GNURADIO_INSTALL_PREFIX}/lib ) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK_GNSSSDR DEFAULT_MSG VOLK_GNSSSDR_LIBRARIES VOLK_GNSSSDR_INCLUDE_DIRS) MARK_AS_ADVANCED(VOLK_GNSSSDR_LIBRARIES VOLK_GNSSSDR_INCLUDE_DIRS)gnss-sdr-0.0.6/cmake/Modules/FindGrOsmoSDR.cmake0000644000175000017500000000217212576764163020656 0ustar carlescarles# Tries to find gr-osmosdr. # # Usage of this module as follows: # # find_package(GrOsmoSDR) # # Variables used by this module, they can change the default behaviour and need # to be set before calling find_package: # # GrOsmoSDR_ROOT_DIR Set this variable to the root installation of # gr-osmosdr if the module has problems finding # the proper installation path. # # Variables defined by this module: # # GROSMOSDR_FOUND System has gr-osmosdr libs/headers # GROSMOSDR_LIBRARIES The gr-osmosdr libraries (gnuradio-osmosdr) # GROSMOSDR_INCLUDE_DIR The location of gr-osmosdr headers FIND_PATH(GROSMOSDR_INCLUDE_DIR NAMES osmosdr/source.h osmosdr/api.h HINTS ${GrOsmoSDR_ROOT_DIR}/include PATHS /usr/local/include /usr/include ) find_library(GROSMOSDR_LIBRARIES NAMES gnuradio-osmosdr HINTS ${GrOsmoSDR_ROOT_DIR}/lib PATHS /usr/local/lib /usr/lib ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( GrOsmoSDR DEFAULT_MSG GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR ) mark_as_advanced( GrOsmoSDR_ROOT_DIR GROSMOSDR_LIBRARIES GROSMOSDR_INCLUDE_DIR ) gnss-sdr-0.0.6/cmake/Modules/TestForARM.cmake0000644000175000017500000000770712576764163020235 0ustar carlescarles############################################################################## # check if the compiler defines the architecture as ARM and set the # version, if found. # # - Anthony Arnold ############################################################################## if (__TEST_FOR_ARM_INCLUDED) return () endif() set(__TEST_FOR_ARM_INCLUDED TRUE) # Function checks if the input string defines ARM version and sets the # output variable if found. function(check_arm_version ppdef input_string version output_var) string(REGEX MATCH "${ppdef}" _VERSION_MATCH "${input_string}") if (NOT _VERSION_MATCH STREQUAL "") set(${output_var} "${version}" PARENT_SCOPE) endif(NOT _VERSION_MATCH STREQUAL "") endfunction() message(STATUS "Checking for ARM") set (IS_ARM NO) set (ARM_VERSION "") if (CMAKE_COMPILER_IS_GNUCXX) execute_process(COMMAND echo "int main(){}" COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dM -E - OUTPUT_VARIABLE TEST_FOR_ARM_RESULTS) string(REGEX MATCH "__arm" ARM_FOUND "${TEST_FOR_ARM_RESULTS}") if (NOT ARM_FOUND STREQUAL "") set(IS_ARM YES) message(STATUS "ARM system detected") # detect the version check_arm_version("__ARM_ARCH_2__" ${TEST_FOR_ARM_RESULTS} "armv2" ARM_VERSION) check_arm_version("__ARM_ARCH_2A__" ${TEST_FOR_ARM_RESULTS} "armv2a" ARM_VERSION) check_arm_version("__ARM_ARCH_3__" ${TEST_FOR_ARM_RESULTS} "armv3" ARM_VERSION) check_arm_version("__ARM_ARCH_3M__" ${TEST_FOR_ARM_RESULTS} "armv3m" ARM_VERSION) check_arm_version("__ARM_ARCH_4__" ${TEST_FOR_ARM_RESULTS} "armv4" ARM_VERSION) check_arm_version("__ARM_ARCH_4T__" ${TEST_FOR_ARM_RESULTS} "armv4t" ARM_VERSION) check_arm_version("__ARM_ARCH_5__" ${TEST_FOR_ARM_RESULTS} "armv5" ARM_VERSION) check_arm_version("__ARM_ARCH_5T__" ${TEST_FOR_ARM_RESULTS} "armv5t" ARM_VERSION) check_arm_version("__ARM_ARCH_5E__" ${TEST_FOR_ARM_RESULTS} "armv5e" ARM_VERSION) check_arm_version("__ARM_ARCH_5TE__" ${TEST_FOR_ARM_RESULTS} "armv5te" ARM_VERSION) check_arm_version("__ARM_ARCH_6__" ${TEST_FOR_ARM_RESULTS} "armv6" ARM_VERSION) check_arm_version("__ARM_ARCH_6J__" ${TEST_FOR_ARM_RESULTS} "armv6j" ARM_VERSION) check_arm_version("__ARM_ARCH_6K__" ${TEST_FOR_ARM_RESULTS} "armv6k" ARM_VERSION) check_arm_version("__ARM_ARCH_6T2__" ${TEST_FOR_ARM_RESULTS} "armv6t2" ARM_VERSION) check_arm_version("__ARM_ARCH_6Z__" ${TEST_FOR_ARM_RESULTS} "armv6z" ARM_VERSION) check_arm_version("__ARM_ARCH_6ZK__" ${TEST_FOR_ARM_RESULTS} "armv6zk" ARM_VERSION) check_arm_version("__ARM_ARCH_6M__" ${TEST_FOR_ARM_RESULTS} "armv6-m" ARM_VERSION) check_arm_version("__ARM_ARCH_7__" ${TEST_FOR_ARM_RESULTS} "armv7" ARM_VERSION) check_arm_version("__ARM_ARCH_7A__" ${TEST_FOR_ARM_RESULTS} "armv7-a" ARM_VERSION) check_arm_version("__ARM_ARCH_7M__" ${TEST_FOR_ARM_RESULTS} "armv7-m" ARM_VERSION) check_arm_version("__ARM_ARCH_7R__" ${TEST_FOR_ARM_RESULTS} "armv7-r" ARM_VERSION) check_arm_version("__ARM_ARCH_7EM_" ${TEST_FOR_ARM_RESULTS} "armv7e-m" ARM_VERSION) check_arm_version("__ARM_ARCH_7VE__" ${TEST_FOR_ARM_RESULTS} "armv7ve" ARM_VERSION) check_arm_version("__ARM_ARCH_8A__" ${TEST_FOR_ARM_RESULTS} "armv8-a" ARM_VERSION) # anything else just define as arm if (ARM_VERSION STREQUAL "") message(STATUS "Couldn't detect ARM version. Setting to 'arm'") set(ARM_VERSION "arm") else (ARM_VERSION STREQUAL "") message(STATUS "ARM version ${ARM_VERSION} detected") endif (ARM_VERSION STREQUAL "") else (NOT ARM_FOUND STREQUAL "") message(STATUS "System is not ARM") endif(NOT ARM_FOUND STREQUAL "") else (CMAKE_COMPILE_IS_GNUCXX) # TODO: Other compilers message(STATUS "Not detecting ARM on non-GNUCXX compiler. Defaulting to false") message(STATUS "If you are compiling for ARM, set IS_ARM=ON manually") endif(CMAKE_COMPILER_IS_GNUCXX) set(IS_ARM ${IS_ARM} CACHE BOOL "Compiling for ARM") set(ARM_VERSION ${ARM_VERSION} CACHE STRING "ARM version") gnss-sdr-0.0.6/cmake/Modules/FindORC.cmake0000644000175000017500000000213112576764163017515 0ustar carlescarlesFIND_PACKAGE(PkgConfig) PKG_CHECK_MODULES(PC_ORC "orc-0.4 > 0.4.11") FIND_PROGRAM(ORCC_EXECUTABLE orcc HINTS ${PC_ORC_TOOLSDIR} PATHS ${ORC_ROOT}/bin ${CMAKE_INSTALL_PREFIX}/bin) FIND_PATH(ORC_INCLUDE_DIR NAMES orc/orc.h HINTS ${PC_ORC_INCLUDEDIR} PATHS ${ORC_ROOT}/include/orc-0.4 ${CMAKE_INSTALL_PREFIX}/include/orc-0.4) FIND_PATH(ORC_LIBRARY_DIR NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX} HINTS ${PC_ORC_LIBDIR} PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) FIND_LIBRARY(ORC_LIB orc-0.4 HINTS ${PC_ORC_LIBRARY_DIRS} PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) LIST(APPEND ORC_LIBRARY ${ORC_LIB} ) SET(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR}) SET(ORC_LIBRARIES ${ORC_LIBRARY}) SET(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE) mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE)gnss-sdr-0.0.6/cmake/Modules/GnssSdrPackaging.cmake0000644000175000017500000003556512576764163021502 0ustar carlescarles# Copyright (C) 2012-2014 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # #if(DEFINED __INCLUDED_GNSS_SDR_PACKAGE_CMAKE) # return() #endif() #set( __INCLUDED_GNSS_SDR_PACKAGE_CMAKE TRUE) #set the cpack generator based on the platform type if(CPACK_GENERATOR) #already set by user elseif(APPLE) set(PACKAGE_GENERATOR "DragNDrop") set(PACKAGE_SOURCE_GENERATOR "TGZ;ZIP") elseif(UNIX) if(${LINUX_DISTRIBUTION} MATCHES "Debian" OR ${LINUX_DISTRIBUTION} MATCHES "Ubuntu") set (PACKAGE_GENERATOR "DEB") endif(${LINUX_DISTRIBUTION} MATCHES "Debian" OR ${LINUX_DISTRIBUTION} MATCHES "Ubuntu") if(${LINUX_DISTRIBUTION} MATCHES "Red Hat" OR ${LINUX_DISTRIBUTION} MATCHES "Fedora") set (PACKAGE_GENERATOR "RPM") endif(${LINUX_DISTRIBUTION} MATCHES "Red Hat" OR ${LINUX_DISTRIBUTION} MATCHES "Fedora") set (PACKAGE_SOURCE_GENERATOR "TGZ;ZIP") else() set(PACKAGE_GENERATOR "TGZ") set(PACKAGE_SOURCE_GENERATOR "TGZ") endif() # used package generators set (CPACK_GENERATOR "${PACKAGE_GENERATOR}" CACHE STRING "List of binary package generators (CPack).") set (CPACK_SOURCE_GENERATOR "${PACKAGE_SOURCE_GENERATOR}" CACHE STRING "List of source package generators (CPack).") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/Packaging/postinst.in" "${CMAKE_CURRENT_BINARY_DIR}/scripts/postinst" @ONLY IMMEDIATE) FILE(COPY ${CMAKE_CURRENT_BINARY_DIR}/scripts/postinst DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/Packaging/prerm.in" "${CMAKE_CURRENT_BINARY_DIR}/scripts/prerm" @ONLY IMMEDIATE) FILE(COPY ${CMAKE_CURRENT_BINARY_DIR}/scripts/prerm DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) ######################################################################## # Setup CPack ######################################################################## set(CPACK_PACKAGE_DESCRIPTION "GNSS Software Defined Receiver") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Global Navigation Satellite Systems Software Defined Receiver written in C++." ) set(CPACK_PACKAGE_VENDOR "Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)") set(CPACK_PACKAGE_NAME "gnss-sdr") set(CPACK_PACKAGE_VERSION "${VERSION}") set(CPACK_PACKAGE_CONTACT "Carles Fernandez-Prades ") set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/docs/doxygen/images/gnss-sdr_logo_round.png") set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_INFO_MAJOR_VERSION}") set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_INFO_API_COMPAT}") set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_INFO_MINOR_VERSION}") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_SOURCE_DIR}/README.md") set(CPACK_SET_DESTDIR "OFF") set(CPACK_STRIP_FILES "ON") # Debian-specific settings set(CPACK_DEBIAN_PACKAGE_SECTION "science") set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") set(CPACK_DEBIAN_PACKAGE_DEPENDS "cmake (>= 2.8), libstdc++6 (>= 4.7), libc6 (>= 2.13), libboost-dev (>= 1.45), libboost-date-time-dev (>= 1.45), libboost-system-dev (>= 1.45), libboost-filesystem-dev (>= 1.45), libboost-thread-dev (>= 1.45), libboost-serialization-dev (>= 1.45), libboost-program-options-dev (>= 1.45), libboost-test-dev (>= 1.45), libuhd-dev (>= 3.7), gnuradio-dev (>= 3.7.3), gr-osmosdr (>= 0.1.1), liblog4cpp5-dev (>= 1.0), libarmadillo-dev (>= 1:4.200.0), liblapack-dev (>= 3.4), libblas-dev (>= 1.2), gfortran (>= 1:4.7), libssl-dev (>= 1.0), libgflags-dev (>= 2.0), libgoogle-glog-dev (>= 0.3.3), libgtest-dev (>= 1.7)") set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "GNSS Software Defined Receiver written in C++. Global Navigation Satellite Systems receiver defined by software. It performs all the signal processing from raw signal samples up to the computation of the Position-Velocity-Time solution, including code and phase observables. It is able to work with raw data files or, if there is computational power enough, in real time with suitable radio frequency front-ends. This software is mainly developed at CTTC (Centre Tecnologic de Telecomunicacions de Catalunya, http://www.cttc.es) with contributions from around the world. More info at http://gnss-sdr.org") set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/postinst;${CMAKE_CURRENT_BINARY_DIR}/prerm") # system/architecture if (APPLE) set (CPACK_PACKAGE_ARCHITECTURE darwin) else(APPLE) string (TOLOWER "${CMAKE_SYSTEM_NAME}" CPACK_SYSTEM_NAME) if(CMAKE_CXX_FLAGS MATCHES "-m32") set (CPACK_PACKAGE_ARCHITECTURE i386) else(CMAKE_CXX_FLAGS MATCHES "-m32") execute_process ( COMMAND dpkg --print-architecture RESULT_VARIABLE RV OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE ) if(RV EQUAL 0) string (STRIP "${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_ARCHITECTURE) else(RV EQUAL 0) execute_process (COMMAND uname -m OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE) if(CPACK_PACKAGE_ARCHITECTURE MATCHES "x86_64") set (CPACK_PACKAGE_ARCHITECTURE amd64) endif(CPACK_PACKAGE_ARCHITECTURE MATCHES "x86_64") if(CPACK_PACKAGE_ARCHITECTURE MATCHES "i386") set (CPACK_PACKAGE_ARCHITECTURE i386) endif(CPACK_PACKAGE_ARCHITECTURE MATCHES "i386") endif(RV EQUAL 0) endif(CMAKE_CXX_FLAGS MATCHES "-m32") endif(APPLE) if(NOT CPACK_PACKAGE_ARCHITECTURE) # Code from https://qt.gitorious.org/qt/qtbase/source/src/corelib/global/qprocessordetection.h set(archdetect_c_code " #if defined(__arm__) || defined(__TARGET_ARCH_ARM) || defined(_M_ARM) || defined(__arm64__) #if defined(__arm64__) #error cmake_ARCH arm64 #endif #if defined(__arm__) || defined(__TARGET_ARCH_ARM) #if defined(__ARM_ARCH_8__) \\ || defined(__ARM_ARCH_8A__) \\ || defined(__ARM_ARCH_8R__) \\ || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 8) #error cmake_ARCH armv8 #elif defined(__ARM_ARCH_7__) \\ || defined(__ARM_ARCH_7A__) \\ || defined(__ARM_ARCH_7R__) \\ || defined(__ARM_ARCH_7M__) \\ || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 7) #error cmake_ARCH armv7 #elif defined(__ARM_ARCH_6__) \\ || defined(__ARM_ARCH_6J__) \\ || defined(__ARM_ARCH_6T2__) \\ || defined(__ARM_ARCH_6Z__) \\ || defined(__ARM_ARCH_6K__) \\ || defined(__ARM_ARCH_6ZK__) \\ || defined(__ARM_ARCH_6M__) \\ || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 6) #error cmake_ARCH armv6 #elif defined(__ARM_ARCH_5TEJ__) \\ || (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM-0 >= 5) #error cmake_ARCH armv5 #else #error cmake_ARCH arm #endif #elif defined(__i386) || defined(__i386__) || defined(_M_IX86) #error cmake_ARCH i386 #elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64) #error cmake_ARCH x86_64 #elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) #error cmake_ARCH ia64 #elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) \\ || defined(_ARCH_COM) || defined(_ARCH_PWR) || defined(_ARCH_PPC) \\ || defined(_M_MPPC) || defined(_M_PPC) #if defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__) #error cmake_ARCH ppc64 #else #error cmake_ARCH ppc #endif #endif #error cmake_ARCH unknown ") function(target_architecture output_var) if(APPLE AND CMAKE_OSX_ARCHITECTURES) # On OS X we use CMAKE_OSX_ARCHITECTURES *if* it was set # On OS X 10.6+ the default is x86_64 if the CPU supports it, i386 otherwise. foreach(osx_arch ${CMAKE_OSX_ARCHITECTURES}) if("${osx_arch}" STREQUAL "i386") set(osx_arch_i386 TRUE) elseif("${osx_arch}" STREQUAL "x86_64") set(osx_arch_x86_64 TRUE) else() message(FATAL_ERROR "Invalid OS X arch name: ${osx_arch}") endif() endforeach() # Now add all the architectures in our normalized order if(osx_arch_i386) list(APPEND ARCH i386) endif() if(osx_arch_x86_64) list(APPEND ARCH x86_64) endif() else() file(WRITE "${CMAKE_BINARY_DIR}/arch.c" "${archdetect_c_code}") enable_language(C) # Detect the architecture in a rather creative way... # This compiles a small C program which is a series of ifdefs that selects a # particular #error preprocessor directive whose message string contains the # target architecture. The program will always fail to compile (both because # file is not a valid C program, and obviously because of the presence of the # #error preprocessor directives... but by exploiting the preprocessor in this # way, we can detect the correct target architecture even when cross-compiling, # since the program itself never needs to be run (only the compiler/preprocessor) try_run( run_result_unused compile_result_unused "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/arch.c" COMPILE_OUTPUT_VARIABLE ARCH CMAKE_FLAGS CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} ) # Parse the architecture name from the compiler output string(REGEX MATCH "cmake_ARCH ([a-zA-Z0-9_]+)" ARCH "${ARCH}") # Get rid of the value marker leaving just the architecture name string(REPLACE "cmake_ARCH " "" ARCH "${ARCH}") # If we are compiling with an unknown architecture this variable should # already be set to "unknown" but in the case that it's empty (i.e. due # to a typo in the code), then set it to unknown if (NOT ARCH) set(ARCH unknown) endif() endif() set(${output_var} "${ARCH}" PARENT_SCOPE) endfunction() # Set target architectures target_architecture(CMAKE_TARGET_ARCHITECTURES) endif(NOT CPACK_PACKAGE_ARCHITECTURE) if(APPLE) list(LENGTH CMAKE_TARGET_ARCHITECTURES cmake_target_arch_len) if(NOT "${cmake_target_arch_len}" STREQUAL "1") set(CMAKE_TARGET_ARCHITECTURE_UNIVERSAL TRUE) set(CMAKE_TARGET_ARCHITECTURE_CODE "universal") else(NOT "${cmake_target_arch_len}" STREQUAL "1") set(CMAKE_TARGET_ARCHITECTURE_UNIVERSAL FALSE) set(CMAKE_TARGET_ARCHITECTURE_CODE "${CMAKE_TARGET_ARCHITECTURES}") endif(NOT "${cmake_target_arch_len}" STREQUAL "1") endif(APPLE) # source package settings #set (CPACK_SOURCE_TOPLEVEL_TAG "source") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") set(CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;\\\\.gitignore;/\\\\data/*;/\\\\install/*;/\\\\thirdparty/;/\\\\docs/html/;/\\\\docs/latex;\\\\.pdf;\\\\.project$;\\\\.DS_Store;\\\\.swp$;\\\\.#;/#;\\\\.*~;cscope\\\\.*;/[Bb]uild[.+-_a-zA-Z0-9]*/") # default binary package settings set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY TRUE) set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}") if(CPACK_PACKAGE_ARCHITECTURE) set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}_${CPACK_PACKAGE_ARCHITECTURE}") endif(CPACK_PACKAGE_ARCHITECTURE) if(CPACK_GENERATOR STREQUAL "DEB") configure_file("${CMAKE_SOURCE_DIR}/cmake/Packaging/fixup_deb_permissions.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/fixup_deb_permissions.sh" @ONLY IMMEDIATE) configure_file("${CMAKE_SOURCE_DIR}/cmake/Packaging/fixup_deb_permissions.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/scripts/fixup_deb_permissions.sh" @ONLY IMMEDIATE) file(COPY ${CMAKE_CURRENT_BINARY_DIR}/scripts/fixup_deb_permissions.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) # Write license file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/copyright" "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: gnss-sdr Source: git://github.com/gnss-sdr/gnss-sdr Files: * Copyright: Copyright 2014 ${CPACK_PACKAGE_CONTACT} License: GPL-3+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file `/usr/share/common-licenses/GPL-3'. Files: src/core/libs/supl/* Copyright: 2007 Tatu Mannisto License: BSD Files: src/core/libs/INIReader.* Copyright: 2009 Brush Technologies License: BSD-3-clause Files: src/core/libs/ini.* Copyright: 2009 Brush Technologies License: BSD-3-clause") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/copyright" DESTINATION "share/doc/${CPACK_PACKAGE_NAME}") execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/changelog WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE "${CMAKE_BINARY_DIR}/changelog.gz") execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/changelog.Debian WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE "${CMAKE_BINARY_DIR}/changelog.Debian.gz") install(FILES "${CMAKE_BINARY_DIR}/changelog.gz" "${CMAKE_BINARY_DIR}/changelog.Debian.gz" DESTINATION "share/doc/${CPACK_PACKAGE_NAME}") endif(CPACK_GENERATOR STREQUAL "DEB") include(CPack) gnss-sdr-0.0.6/cmake/Modules/TestForSSE.cmake0000644000175000017500000000260112576764163020234 0ustar carlescarles############################################################################### # Test for availability of SSE # # - Anthony Arnold ############################################################################### function (test_for_sse h_file result_var name) if (NOT DEFINED ${result_var}) execute_process(COMMAND echo "#include <${h_file}>" COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -c -x c++ - RESULT_VARIABLE COMPILE_RESULT OUTPUT_QUIET ERROR_QUIET) set(detected 0) if (COMPILE_RESULT EQUAL 0) message(STATUS "Detected ${name}") set(detected 1) endif(COMPILE_RESULT EQUAL 0) set(${result_var} ${detected} CACHE INTERNAL "${name} Available") endif (NOT DEFINED ${result_var}) endfunction(test_for_sse) message(STATUS "Testing for SIMD extensions") enable_language(C) test_for_sse("ammintrin.h" SSE4A_AVAILABLE "SSE4A") test_for_sse("nmmintrin.h" SSE4_2_AVAILABLE "SSE4.2") test_for_sse("smmintrin.h" SSE4_1_AVAILABLE "SSE4.1") test_for_sse("tmmintrin.h" SSSE3_AVAILABLE "SSSE3") test_for_sse("pmmintrin.h" SSE3_AVAILABLE "SSE3") test_for_sse("emmintrin.h" SSE2_AVAILABLE "SSE2") test_for_sse("xmmintrin.h" SSE_AVAILABLE "SSE1") test_for_sse("mmintrin.h" MMX_AVAILABLE "MMX") test_for_sse("wmmintrin.h" AES_AVAILABLE "AES") test_for_sse("immintrin.h" AVX_AVAILABLE "AVX") file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/-.o") gnss-sdr-0.0.6/cmake/Modules/FindOpenBLAS.cmake0000644000175000017500000000155212576764163020443 0ustar carlescarles# - Try to find OpenBLAS library (not headers!) # # The following environment variable is optionally searched # OPENBLAS_HOME: Base directory where all OpenBlas components are found SET(OPEN_BLAS_SEARCH_PATHS /lib/ /lib64/ /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 /opt/OpenBLAS/lib /opt/local/lib /usr/lib/openblas-base $ENV{OPENBLAS_HOME}/lib ) FIND_LIBRARY(OPENBLAS NAMES openblas PATHS ${OPEN_BLAS_SEARCH_PATHS}) IF (OPENBLAS) SET(OPENBLAS_FOUND ON) MESSAGE(STATUS "Found OpenBLAS") ENDIF (OPENBLAS) MARK_AS_ADVANCED(OPENBLAS) gnss-sdr-0.0.6/cmake/Modules/FindTeleorbit.cmake0000644000175000017500000000144512576764163021032 0ustar carlescarlesINCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_TELEORBIT teleorbit) FIND_PATH( TELEORBIT_INCLUDE_DIRS NAMES teleorbit/api.h HINTS $ENV{TELEORBIT_DIR}/include ${PC_TELEORBIT_INCLUDEDIR} PATHS ${CMAKE_INSTALL_PREFIX}/include /usr/local/include /usr/include ) FIND_LIBRARY( TELEORBIT_LIBRARIES NAMES gnuradio-teleorbit HINTS $ENV{TELEORBIT_DIR}/lib ${PC_TELEORBIT_LIBDIR} PATHS ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_INSTALL_PREFIX}/lib64 /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(TELEORBIT DEFAULT_MSG TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS) MARK_AS_ADVANCED(TELEORBIT_LIBRARIES TELEORBIT_INCLUDE_DIRS) gnss-sdr-0.0.6/cmake/Modules/FindGPSTK.cmake0000644000175000017500000000534712576764163017776 0ustar carlescarles# - Find gpstk library # Find the native gpstk includes and library # This module defines # GPSTK_INCLUDE_DIR, where to find tiff.h, etc. # GPSTK_LIBRARIES, libraries to link against to use GPSTK. # GPSTK_FOUND, If false, do not try to use GPSTK. # also defined, but not for general use are # GPSTK_LIBRARY, where to find the GPSTK library. FIND_PATH(GPSTK_INCLUDE_DIR gpstk/Matrix.hpp) FIND_PATH(GEOMATICS_INCLUDE_DIR gpstk/random.hpp) FIND_PATH(PROCFRAME_INCLUDE_DIR gpstk/SolverWMS.hpp) FIND_PATH(VDRAW_INCLUDE_DIR gpstk/Layout.hpp) FIND_PATH(VPLOT_INCLUDE_DIR gpstk/ScatterPlot.hpp) FIND_PATH(RXIO_INCLUDE_DIR gpstk/EphReader.hpp) SET(GPSTK_NAMES ${GPSTK_NAMES} gpstk libgpstk) FIND_LIBRARY(GPSTK_LIBRARY NAMES ${GPSTK_NAMES} ) SET(GEOMATICS_NAMES ${GEOMATICS_NAMES} geomatics libgeomatics) FIND_LIBRARY(GEOMATICS_LIBRARY NAMES ${GEOMATICS_NAMES} ) SET(PROCFRAME_NAMES ${PROCFRAME_NAMES} procframe libprocframe) FIND_LIBRARY(PROCFRAME_LIBRARY NAMES ${PROCFRAME_NAMES} ) SET(VDRAW_NAMES ${VDRAW_NAMES} vdraw libvdraw) FIND_LIBRARY(VDRAW_LIBRARY NAMES ${VDRAW_NAMES} ) SET(VPLOT_NAMES ${VPLOT_NAMES} vplot libvplot) FIND_LIBRARY(VPLOT_LIBRARY NAMES ${VPLOT_NAMES} ) SET(RXIO_NAMES ${RXIO_NAMES} rxio librxio) FIND_LIBRARY(RXIO_LIBRARY NAMES ${RXIO_NAMES} ) # handle the QUIETLY and REQUIRED arguments and set GPSTK_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GPSTK DEFAULT_MSG GPSTK_LIBRARY GPSTK_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOMATICS DEFAULT_MSG GEOMATICS_LIBRARY GEOMATICS_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROCFRAME DEFAULT_MSG PROCFRAME_LIBRARY PROCFRAME_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VDRAW DEFAULT_MSG VDRAW_LIBRARY VDRAW_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VPLOT DEFAULT_MSG VPLOT_LIBRARY VPLOT_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(RXIO DEFAULT_MSG RXIO_LIBRARY RXIO_INCLUDE_DIR) IF(GPSTK_FOUND) SET( GPSTK_LIBRARIES ${GPSTK_LIBRARY} ) ENDIF(GPSTK_FOUND) IF(GEOMATICS_FOUND) SET( GEOMATICS_LIBRARIES ${GEOMATICS_LIBRARY} ) ENDIF(GEOMATICS_FOUND) IF(PROCFRAME_FOUND) SET( PROCFRAME_LIBRARIES ${PROCFRAME_LIBRARY} ) ENDIF(PROCFRAME_FOUND) IF(VDRAW_FOUND) SET( VDRAW_LIBRARIES ${VDRAW_LIBRARY} ) ENDIF(VDRAW_FOUND) IF(VPLOT_FOUND) SET( VPLOT_LIBRARIES ${VPLOT_LIBRARY} ) ENDIF(VPLOT_FOUND) IF(RXIO_FOUND) SET( RXIO_LIBRARIES ${RXIO_LIBRARY} ) ENDIF(RXIO_FOUND) MARK_AS_ADVANCED(GPSTK_INCLUDE_DIR GPSTK_LIBRARY) MARK_AS_ADVANCED(GEOMATICS_INCLUDE_DIR GEOMATICS_LIBRARY) MARK_AS_ADVANCED(PROCFRAME_INCLUDE_DIR PROCFRAME_LIBRARY) MARK_AS_ADVANCED(VDRAW_INCLUDE_DIR VDRAW_LIBRARY) MARK_AS_ADVANCED(VPLOT_INCLUDE_DIR VPLOT_LIBRARY) MARK_AS_ADVANCED(RXIO_INCLUDE_DIR RXIO_LIBRARY) gnss-sdr-0.0.6/cmake/Modules/FindGLOG.cmake0000644000175000017500000000547112576764163017634 0ustar carlescarles# - Try to find the Google Glog library # # This module defines the following variables # # GLOG_FOUND - Was Glog found # GLOG_INCLUDE_DIRS - the Glog include directories # GLOG_LIBRARIES - Link to this # # This module accepts the following variables # # GLOG_ROOT - Can be set to Glog install path or Windows build path # if (NOT DEFINED GLOG_ROOT) set (GLOG_ROOT /usr /usr/local) endif (NOT DEFINED GLOG_ROOT) if(MSVC) set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/Release) else(MSVC) set (LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/lib) endif(MSVC) macro(_FIND_GLOG_LIBRARIES _var) find_library(${_var} NAMES ${ARGN} PATHS ${LIB_PATHS} /opt/local/lib /usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu /usr/lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabi /usr/lib/aarch64-linux-gnu PATH_SUFFIXES lib ) mark_as_advanced(${_var}) endmacro() macro(_GLOG_APPEND_LIBRARIES _list _release) set(_debug ${_release}_DEBUG) if(${_debug}) set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}}) else() set(${_list} ${${_list}} ${${_release}}) endif() endmacro() if(MSVC) find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h PATHS ${GLOG_ROOT}/src/windows ${GLOG_ROOT}/src/windows/glog ) else(MSVC) # Linux/OS X builds find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h PATHS ${GLOG_ROOT}/include/glog /usr/include/glog /opt/local/include/glog # default location in Macports ) endif(MSVC) # Find the libraries if(MSVC) _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.lib) else(MSVC) # Linux/OS X builds if(UNIX) _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.so) endif(UNIX) if(APPLE) _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.dylib) endif(APPLE) endif(MSVC) if(GLOG_FOUND) message(STATUS "glog library found at ${GLOG_LIBRARIES}") endif() # handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if # all listed variables are TRUE include("${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake") FIND_PACKAGE_HANDLE_STANDARD_ARGS(Glog DEFAULT_MSG GLOG_LIBRARIES) if(MSVC) string(REGEX REPLACE "/glog$" "" VAR_WITHOUT ${GLOG_INCLUDE_DIR}) string(REGEX REPLACE "/windows$" "" VAR_WITHOUT ${VAR_WITHOUT}) set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS} "${VAR_WITHOUT}") string(REGEX REPLACE "/libglog.lib" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES}) else(MSVC) # Linux/OS X builds set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR}) string(REGEX REPLACE "/libglog.so" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES}) endif(MSVC) if(GLOG_FOUND) # _GLOG_APPEND_LIBRARIES(GLOG GLOG_LIBRARIES) endif() gnss-sdr-0.0.6/cmake/Modules/FindLibOsmoSDR.cmake0000644000175000017500000000222312576764163021011 0ustar carlescarles# Tries to find libosmosdr. # # Usage of this module as follows: # # find_package(LibOsmoSDR) # # # Variables defined by this module: # # LIBOSMOSDR_FOUND System has libosmosdr libs/headers # LIBOSMOSDR_LIBRARIES The libosmosdr libraries # LIBOSMOSDR_INCLUDE_DIR The location of libosmosdr headers if(NOT LIBOSMOSDR_FOUND) pkg_check_modules (LIBOSMOSDR_PKG libosmosdr) find_path(LIBOSMOSDR_INCLUDE_DIR NAMES osmosdr.h PATHS ${LIBOSMOSDR_PKG_INCLUDE_DIRS} /usr/include /usr/local/include ) find_library(LIBOSMOSDR_LIBRARIES NAMES osmosdr PATHS ${LIBOSMOSDR_PKG_LIBRARY_DIRS} /usr/lib /usr/local/lib ) if(LIBOSMOSDR_INCLUDE_DIR AND LIBOSMOSDR_LIBRARIES) set(LIBOSMOSDR_FOUND TRUE CACHE INTERNAL "libosmosdr found") message(STATUS "Found libosmosdr: ${LIBOSMOSDR_INCLUDE_DIR}, ${LIBOSMOSDR_LIBRARIES}") else(LIBOSMOSDR_INCLUDE_DIR AND LIBOSMOSDR_LIBRARIES) set(LIBOSMOSDR_FOUND FALSE CACHE INTERNAL "libosmosdr found") message(STATUS "libosmosdr not found.") endif(LIBOSMOSDR_INCLUDE_DIR AND LIBOSMOSDR_LIBRARIES) mark_as_advanced(LIBOSMOSDR_INCLUDE_DIR LIBOSMOSDR_LIBRARIES) endif(NOT LIBOSMOSDR_FOUND) gnss-sdr-0.0.6/cmake/Modules/FindOpenCL.cmake0000644000175000017500000000724012576764163020220 0ustar carlescarles# # This file taken from FindOpenCL project @ http://gitorious.com/findopencl # # - Try to find OpenCL # This module tries to find an OpenCL implementation on your system. It supports # AMD / ATI, Apple and NVIDIA implementations, but shoudl work, too. # # Once done this will define # OPENCL_FOUND - system has OpenCL # OPENCL_INCLUDE_DIRS - the OpenCL include directory # OPENCL_LIBRARIES - link these to use OpenCL # # WIN32 should work, but is untested FIND_PACKAGE( PackageHandleStandardArgs ) SET (OPENCL_VERSION_STRING "0.1.0") SET (OPENCL_VERSION_MAJOR 0) SET (OPENCL_VERSION_MINOR 1) SET (OPENCL_VERSION_PATCH 0) IF (APPLE) FIND_LIBRARY(OPENCL_LIBRARIES OpenCL DOC "OpenCL lib for OSX") FIND_PATH(OPENCL_INCLUDE_DIRS OpenCL/cl.h DOC "Include for OpenCL on OSX") FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS OpenCL/cl.hpp DOC "Include for OpenCL CPP bindings on OSX") ELSE (APPLE) IF (WIN32) FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h) FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp) # The AMD SDK currently installs both x86 and x86_64 libraries # This is only a hack to find out architecture IF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" ) SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86_64") SET(OPENCL_LIB_DIR "$ENV{ATIINTERNALSTREAMSDKROOT}/lib/x86_64") ELSE (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64") SET(OPENCL_LIB_DIR "$ENV{ATISTREAMSDKROOT}/lib/x86") SET(OPENCL_LIB_DIR "$ENV{ATIINTERNALSTREAMSDKROOT}/lib/x86") ENDIF( ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64" ) # find out if the user asked for a 64-bit build, and use the corresponding # 64 or 32 bit NVIDIA library paths to the search: STRING(REGEX MATCH "Win64" ISWIN64 ${CMAKE_GENERATOR}) IF("${ISWIN64}" STREQUAL "Win64") FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR} $ENV{CUDA_LIB_PATH} $ENV{CUDA_PATH}/lib/x64) ELSE("${ISWIN64}" STREQUAL "Win64") FIND_LIBRARY(OPENCL_LIBRARIES OpenCL.lib ${OPENCL_LIB_DIR} $ENV{CUDA_LIB_PATH} $ENV{CUDA_PATH}/lib/Win32) ENDIF("${ISWIN64}" STREQUAL "Win64") GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE) # On Win32 search relative to the library FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS "${_OPENCL_INC_CAND}" $ENV{CUDA_INC_PATH} $ENV{CUDA_PATH}/include) FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS "${_OPENCL_INC_CAND}" $ENV{CUDA_INC_PATH} $ENV{CUDA_PATH}/include) ELSE (WIN32) # Unix style platforms FIND_LIBRARY(OPENCL_LIBRARIES OpenCL ENV LD_LIBRARY_PATH ) GET_FILENAME_COMPONENT(OPENCL_LIB_DIR ${OPENCL_LIBRARIES} PATH) GET_FILENAME_COMPONENT(_OPENCL_INC_CAND ${OPENCL_LIB_DIR}/../../include ABSOLUTE) # The AMD SDK currently does not place its headers # in /usr/include, therefore also search relative # to the library FIND_PATH(OPENCL_INCLUDE_DIRS CL/cl.h PATHS ${_OPENCL_INC_CAND} "/usr/local/cuda/include") FIND_PATH(_OPENCL_CPP_INCLUDE_DIRS CL/cl.hpp PATHS ${_OPENCL_INC_CAND} "/usr/local/cuda/include") ENDIF (WIN32) ENDIF (APPLE) FIND_PACKAGE_HANDLE_STANDARD_ARGS( OpenCL DEFAULT_MSG OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS ) IF( _OPENCL_CPP_INCLUDE_DIRS ) SET( OPENCL_HAS_CPP_BINDINGS TRUE ) LIST( APPEND OPENCL_INCLUDE_DIRS ${_OPENCL_CPP_INCLUDE_DIRS} ) # This is often the same, so clean up LIST( REMOVE_DUPLICATES OPENCL_INCLUDE_DIRS ) ENDIF( _OPENCL_CPP_INCLUDE_DIRS ) MARK_AS_ADVANCED( OPENCL_INCLUDE_DIRS ) IF( OPENCL_INCLUDE_DIRS AND OPENCL_LIBRARIES ) SET( OPENCL_FOUND TRUE ) add_definitions( -DOPENCL=1 ) ELSE( OPENCL_INCLUDE_DIRS AND OPENCL_LIBRARIES ) SET( OPENCL_FOUND FALSE ) add_definitions( -DOPENCL=0 ) ENDIF( OPENCL_INCLUDE_DIRS AND OPENCL_LIBRARIES ) gnss-sdr-0.0.6/cmake/Modules/FindGperftools.cmake0000644000175000017500000000253212576764163021223 0ustar carlescarles# Tries to find Gperftools. # # Usage of this module as follows: # # find_package(Gperftools) # # Variables used by this module, they can change the default behaviour and need # to be set before calling find_package: # # Gperftools_ROOT_DIR Set this variable to the root installation of # Gperftools if the module has problems finding # the proper installation path. # # Variables defined by this module: # # GPERFTOOLS_FOUND System has Gperftools libs/headers # GPERFTOOLS_LIBRARIES The Gperftools libraries (tcmalloc & profiler) # GPERFTOOLS_INCLUDE_DIR The location of Gperftools headers find_library(GPERFTOOLS_TCMALLOC NAMES tcmalloc HINTS ${Gperftools_ROOT_DIR}/lib) find_library(GPERFTOOLS_PROFILER NAMES profiler HINTS ${Gperftools_ROOT_DIR}/lib) find_library(GPERFTOOLS_TCMALLOC_AND_PROFILER NAMES tcmalloc_and_profiler HINTS ${Gperftools_ROOT_DIR}/lib) find_path(GPERFTOOLS_INCLUDE_DIR NAMES gperftools/heap-profiler.h HINTS ${Gperftools_ROOT_DIR}/include) set(GPERFTOOLS_LIBRARIES ${GPERFTOOLS_TCMALLOC_AND_PROFILER}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( Gperftools DEFAULT_MSG GPERFTOOLS_LIBRARIES GPERFTOOLS_INCLUDE_DIR ) mark_as_advanced( Gperftools_ROOT_DIR GPERFTOOLS_TCMALLOC GPERFTOOLS_PROFILER GPERFTOOLS_TCMALLOC_AND_PROFILER GPERFTOOLS_LIBRARIES GPERFTOOLS_INCLUDE_DIR)gnss-sdr-0.0.6/cmake/Modules/FindUHD.cmake0000644000175000017500000000147012576764163017517 0ustar carlescarles######################################################################## # Find the library for the USRP Hardware Driver ######################################################################## INCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_UHD uhd) FIND_PATH( UHD_INCLUDE_DIRS NAMES uhd/config.hpp HINTS $ENV{UHD_DIR}/include ${PC_UHD_INCLUDEDIR} PATHS /usr/local/include /usr/include ${GNURADIO_INSTALL_PREFIX}/include ) FIND_LIBRARY( UHD_LIBRARIES NAMES uhd HINTS $ENV{UHD_DIR}/lib ${PC_UHD_LIBDIR} PATHS /usr/local/lib /usr/lib ${GNURADIO_INSTALL_PREFIX}/lib ) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(UHD DEFAULT_MSG UHD_LIBRARIES UHD_INCLUDE_DIRS) MARK_AS_ADVANCED(UHD_LIBRARIES UHD_INCLUDE_DIRS) gnss-sdr-0.0.6/cmake/Modules/FindVolk.cmake0000644000175000017500000000165012576764163020012 0ustar carlescarles######################################################################## # Find VOLK (Vector-Optimized Library of Kernels) ######################################################################## INCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_VOLK volk) FIND_PATH( VOLK_INCLUDE_DIRS NAMES volk/volk.h HINTS $ENV{VOLK_DIR}/include ${PC_VOLK_INCLUDEDIR} PATHS /usr/local/include /usr/include ${GNURADIO_INSTALL_PREFIX}/include ) FIND_LIBRARY( VOLK_LIBRARIES NAMES volk HINTS $ENV{VOLK_DIR}/lib ${PC_VOLK_LIBDIR} PATHS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ${GNURADIO_INSTALL_PREFIX}/lib ) set(VOLK_VERSION ${PC_VOLK_VERSION}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_VERSION) gnss-sdr-0.0.6/cmake/cmake_uninstall.cmake.in0000644000175000017500000000201212576764163020435 0ustar carlescarlesif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") foreach(file ${files}) message(STATUS "Uninstalling $ENV{DESTDIR}${file}") if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") exec_program( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") endif(NOT "${rm_retval}" STREQUAL 0) else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File $ENV{DESTDIR}${file} does not exist.") endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") endforeach(file)gnss-sdr-0.0.6/cmake/Packaging/0000755000175000017500000000000012576764163015546 5ustar carlescarlesgnss-sdr-0.0.6/cmake/Packaging/postinst.in0000644000175000017500000000017512576764163017764 0ustar carlescarles#!/bin/sh set -e chmod +x @CMAKE_INSTALL_PREFIX@/bin/@PROJECT_NAME@ chmod +x @CMAKE_INSTALL_PREFIX@/bin/volk_gnsssdr_profile gnss-sdr-0.0.6/cmake/Packaging/prerm.in0000644000175000017500000000076012576764163017226 0ustar carlescarles#!/bin/sh set -e if test -e @CMAKE_INSTALL_PREFIX@/@PROJECT_NAME@ ; then rm @CMAKE_INSTALL_PREFIX@/bin/@PROJECT_NAME@ rm @CMAKE_INSTALL_PREFIX@/bin/volk_gnsssdr_profile fi if test -e @CMAKE_INSTALL_PREFIX@/share/@PROJECT_NAME@ ; then rm -rf @CMAKE_INSTALL_PREFIX@/share/@PROJECT_NAME@ fi if test -e @CMAKE_INSTALL_PREFIX@/share/man/man1/@PROJECT_NAME@.1.gz ; then rm @CMAKE_INSTALL_PREFIX@/share/man/man1/@PROJECT_NAME@.1.gz rm @CMAKE_INSTALL_PREFIX@/share/man/man1/volk_gnsssdr_profile.1.gz fi gnss-sdr-0.0.6/cmake/Packaging/fixup_deb_permissions.sh.in0000644000175000017500000000062112576764163023106 0ustar carlescarles#!/bin/sh set -e mkdir fix_up_deb dpkg-deb -x @CPACK_PACKAGE_FILE_NAME@.deb fix_up_deb_permissions dpkg-deb --control @CPACK_PACKAGE_FILE_NAME@.deb fix_up_deb_permissions/DEBIAN rm @CPACK_PACKAGE_FILE_NAME@.deb chmod 0644 fix_up_deb_permissions/DEBIAN/md5sums find -type d -print0 |xargs -0 chmod 755 fakeroot dpkg -b fix_up_deb_permissions @CPACK_PACKAGE_FILE_NAME@.deb rm -rf fix_up_deb_permissions gnss-sdr-0.0.6/COPYING0000644000175000017500000010575512576764163013652 0ustar carlescarles GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnss-sdr-0.0.6/build/0000755000175000017500000000000012577077275013703 5ustar carlescarlesgnss-sdr-0.0.6/drivers/0000755000175000017500000000000012576764164014261 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/0000755000175000017500000000000012576764164016300 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/swig/0000755000175000017500000000000012576764164017251 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/swig/dbfcttc_swig.i0000644000175000017500000000040712576764164022066 0ustar carlescarles/* -*- c++ -*- */ #define DBFCTTC_API %include "gnuradio.i" // the common stuff //load generated python docstrings %include "dbfcttc_swig_doc.i" %{ #include "dbfcttc/raw_array.h" %} %include "dbfcttc/raw_array.h" GR_SWIG_BLOCK_MAGIC2(dbfcttc, raw_array); gnss-sdr-0.0.6/drivers/gr-dbfcttc/swig/CMakeLists.txt0000644000175000017500000000432712576764164022017 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Include swig generation macros ######################################################################## #set(PYTHON_EXECUTABLE "/opt/local/bin/python" ) #set(CMAKE_LIBRARY_PATH /opt/local/lib ${CMAKE_LIBRARY_PATH}) find_package(SWIG) find_package(PythonLibs 2) if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND) return() endif() include(GrSwig) include(GrPython) ######################################################################## # Setup swig generation ######################################################################## foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS}) list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig) endforeach(incdir) set(GR_SWIG_LIBRARIES gnuradio-dbfcttc) set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/dbfcttc_swig_doc.i) set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include) GR_SWIG_MAKE(dbfcttc_swig dbfcttc_swig.i) ######################################################################## # Install the build swig module ######################################################################## GR_SWIG_INSTALL(TARGETS dbfcttc_swig DESTINATION ${GR_PYTHON_DIR}/dbfcttc) ######################################################################## # Install swig .i files for development ######################################################################## install( FILES dbfcttc_swig.i ${CMAKE_CURRENT_BINARY_DIR}/dbfcttc_swig_doc.i DESTINATION ${GR_INCLUDE_DIR}/dbfcttc/swig ) gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/0000755000175000017500000000000012576764164017230 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/CMakeLists.txt0000644000175000017500000000255112576764164021773 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Setup dependencies ######################################################################## find_package(Doxygen) ######################################################################## # Begin conditional configuration ######################################################################## if(ENABLE_DOXYGEN) ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(doxygen) endif(ENABLE_DOXYGEN) gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/0000755000175000017500000000000012576764164020705 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/other/0000755000175000017500000000000012576764164022026 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/other/group_defs.dox0000644000175000017500000000032312576764164024675 0ustar carlescarles/*! * \defgroup block GNU Radio DBFCTTC C++ Signal Processing Blocks * \brief All C++ blocks that can be used from the DBFCTTC GNU Radio * module are listed here or in the subcategories below. * */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/other/main_page.dox0000644000175000017500000000042312576764164024461 0ustar carlescarles/*! \mainpage Welcome to the GNU Radio DBFCTTC Block This is the intro page for the Doxygen manual generated for the DBFCTTC block (docs/doxygen/other/main_page.dox). Edit it to add more detailed documentation about the new GNU Radio modules contained in this project. */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/Doxyfile.in0000644000175000017500000017300612576764164023027 0ustar carlescarles# Doxyfile 1.5.7.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "GNU Radio's DBFCTTC Package" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 4 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = NO # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = NO # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= NO # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text " # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@ @top_builddir@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/docs/doxygen/xml \ @abs_top_builddir@/docs/doxygen/other/doxypy.py \ @abs_top_builddir@/_CPack_Packages \ @abs_top_srcdir@/cmake # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.deps/* \ */.libs/* \ */.svn/* \ */CVS/* \ */__init__.py \ */qa_*.cc \ */qa_*.h \ */qa_*.py # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = ad9862 \ numpy \ *swig* \ *Swig* \ *my_top_block* \ *my_graph* \ *app_top_block* \ *am_rx_graph* \ *_queue_watcher_thread* \ *parse* \ *MyFrame* \ *MyApp* \ *PyObject* \ *wfm_rx_block* \ *_sptr* \ *debug* \ *wfm_rx_sca_block* \ *tv_rx_block* \ *wxapt_rx_block* \ *example_signal* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = @enable_html_docs@ # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # Qt Help Project / Namespace. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # Qt Help Project / Virtual Folders. QHP_VIRTUAL_FOLDER = doc # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file . QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = YES # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 180 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = @enable_latex_docs@ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = @enable_xml_docs@ # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/swig_doc.py0000644000175000017500000002072112576764164023057 0ustar carlescarles# # Copyright 2010,2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Creates the swig_doc.i SWIG interface file. Execute using: python swig_doc.py xml_path outputfilename The file instructs SWIG to transfer the doxygen comments into the python docstrings. """ import sys try: from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base except ImportError: from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base def py_name(name): bits = name.split('_') return '_'.join(bits[1:]) def make_name(name): bits = name.split('_') return bits[0] + '_make_' + '_'.join(bits[1:]) class Block(object): """ Checks if doxyxml produced objects correspond to a gnuradio block. """ @classmethod def includes(cls, item): if not isinstance(item, DoxyClass): return False # Check for a parsing error. if item.error(): return False return item.has_member(make_name(item.name()), DoxyFriend) def utoascii(text): """ Convert unicode text into ascii and escape quotes. """ if text is None: return '' out = text.encode('ascii', 'replace') out = out.replace('"', '\\"') return out def combine_descriptions(obj): """ Combines the brief and detailed descriptions of an object together. """ description = [] bd = obj.brief_description.strip() dd = obj.detailed_description.strip() if bd: description.append(bd) if dd: description.append(dd) return utoascii('\n\n'.join(description)).strip() entry_templ = '%feature("docstring") {name} "{docstring}"' def make_entry(obj, name=None, templ="{description}", description=None): """ Create a docstring entry for a swig interface file. obj - a doxyxml object from which documentation will be extracted. name - the name of the C object (defaults to obj.name()) templ - an optional template for the docstring containing only one variable named 'description'. description - if this optional variable is set then it's value is used as the description instead of extracting it from obj. """ if name is None: name=obj.name() if "operator " in name: return '' if description is None: description = combine_descriptions(obj) docstring = templ.format(description=description) if not docstring: return '' return entry_templ.format( name=name, docstring=docstring, ) def make_func_entry(func, name=None, description=None, params=None): """ Create a function docstring entry for a swig interface file. func - a doxyxml object from which documentation will be extracted. name - the name of the C object (defaults to func.name()) description - if this optional variable is set then it's value is used as the description instead of extracting it from func. params - a parameter list that overrides using func.params. """ if params is None: params = func.params params = [prm.declname for prm in params] if params: sig = "Params: (%s)" % ", ".join(params) else: sig = "Params: (NONE)" templ = "{description}\n\n" + sig return make_entry(func, name=name, templ=utoascii(templ), description=description) def make_class_entry(klass, description=None): """ Create a class docstring for a swig interface file. """ output = [] output.append(make_entry(klass, description=description)) for func in klass.in_category(DoxyFunction): name = klass.name() + '::' + func.name() output.append(make_func_entry(func, name=name)) return "\n\n".join(output) def make_block_entry(di, block): """ Create class and function docstrings of a gnuradio block for a swig interface file. """ descriptions = [] # Get the documentation associated with the class. class_desc = combine_descriptions(block) if class_desc: descriptions.append(class_desc) # Get the documentation associated with the make function make_func = di.get_member(make_name(block.name()), DoxyFunction) make_func_desc = combine_descriptions(make_func) if make_func_desc: descriptions.append(make_func_desc) # Get the documentation associated with the file try: block_file = di.get_member(block.name() + ".h", DoxyFile) file_desc = combine_descriptions(block_file) if file_desc: descriptions.append(file_desc) except base.Base.NoSuchMember: # Don't worry if we can't find a matching file. pass # And join them all together to make a super duper description. super_description = "\n\n".join(descriptions) # Associate the combined description with the class and # the make function. output = [] output.append(make_class_entry(block, description=super_description)) creator = block.get_member(block.name(), DoxyFunction) output.append(make_func_entry(make_func, description=super_description, params=creator.params)) return "\n\n".join(output) def make_swig_interface_file(di, swigdocfilename, custom_output=None): output = [""" /* * This file was automatically generated using swig_doc.py. * * Any changes to it will be lost next time it is regenerated. */ """] if custom_output is not None: output.append(custom_output) # Create docstrings for the blocks. blocks = di.in_category(Block) make_funcs = set([]) for block in blocks: try: make_func = di.get_member(make_name(block.name()), DoxyFunction) make_funcs.add(make_func.name()) output.append(make_block_entry(di, block)) except block.ParsingError: print('Parsing error for block %s' % block.name()) # Create docstrings for functions # Don't include the make functions since they have already been dealt with. funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs] for f in funcs: try: output.append(make_func_entry(f)) except f.ParsingError: print('Parsing error for function %s' % f.name()) # Create docstrings for classes block_names = [block.name() for block in blocks] klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names] for k in klasses: try: output.append(make_class_entry(k)) except k.ParsingError: print('Parsing error for class %s' % k.name()) # Docstrings are not created for anything that is not a function or a class. # If this excludes anything important please add it here. output = "\n\n".join(output) swig_doc = file(swigdocfilename, 'w') swig_doc.write(output) swig_doc.close() if __name__ == "__main__": # Parse command line options and set up doxyxml. err_msg = "Execute using: python swig_doc.py xml_path outputfilename" if len(sys.argv) != 3: raise StandardError(err_msg) xml_path = sys.argv[1] swigdocfilename = sys.argv[2] di = DoxyIndex(xml_path) # gnuradio.gr.msq_queue.insert_tail and delete_head create errors unless docstrings are defined! # This is presumably a bug in SWIG. #msg_q = di.get_member(u'gr_msg_queue', DoxyClass) #insert_tail = msg_q.get_member(u'insert_tail', DoxyFunction) #delete_head = msg_q.get_member(u'delete_head', DoxyFunction) output = [] #output.append(make_func_entry(insert_tail, name='gr_py_msg_queue__insert_tail')) #output.append(make_func_entry(delete_head, name='gr_py_msg_queue__delete_head')) custom_output = "\n\n".join(output) # Generate the docstrings interface file. make_swig_interface_file(di, swigdocfilename, custom_output=custom_output) gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/CMakeLists.txt0000644000175000017500000000373512576764164023455 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Create the doxygen configuration file ######################################################################## file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir) file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} abs_top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir) set(HAVE_DOT ${DOXYGEN_DOT_FOUND}) set(enable_html_docs YES) set(enable_latex_docs NO) set(enable_xml_docs YES) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) set(BUILT_DIRS ${CMAKE_CURRENT_BINARY_DIR}/xml ${CMAKE_CURRENT_BINARY_DIR}/html) ######################################################################## # Make and install doxygen docs ######################################################################## add_custom_command( OUTPUT ${BUILT_DIRS} COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating documentation with doxygen" ) add_custom_target(doxygen_target ALL DEPENDS ${BUILT_DIRS}) install(DIRECTORY ${BUILT_DIRS} DESTINATION ${GR_PKG_DOC_DIR}) gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/Doxyfile.swig_doc.in0000644000175000017500000017361712576764164024634 0ustar carlescarles# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @CPACK_PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @CPACK_PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @INPUT_PATHS@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = NO # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/0000755000175000017500000000000012576764164022411 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/text.py0000644000175000017500000000345012576764164023751 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Utilities for extracting text from generated classes. """ def is_string(txt): if isinstance(txt, str): return True try: if isinstance(txt, unicode): return True except NameError: pass return False def description(obj): if obj is None: return None return description_bit(obj).strip() def description_bit(obj): if hasattr(obj, 'content'): contents = [description_bit(item) for item in obj.content] result = ''.join(contents) elif hasattr(obj, 'content_'): contents = [description_bit(item) for item in obj.content_] result = ''.join(contents) elif hasattr(obj, 'value'): result = description_bit(obj.value) elif is_string(obj): return obj else: raise StandardError('Expecting a string or something with content, content_ or value attribute') # If this bit is a paragraph then add one some line breaks. if hasattr(obj, 'name') and obj.name == 'para': result += "\n\n" return result gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/__init__.py0000644000175000017500000000465212576764164024531 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Python interface to contents of doxygen xml documentation. Example use: See the contents of the example folder for the C++ and doxygen-generated xml used in this example. >>> # Parse the doxygen docs. >>> import os >>> this_dir = os.path.dirname(globals()['__file__']) >>> xml_path = this_dir + "/example/xml/" >>> di = DoxyIndex(xml_path) Get a list of all top-level objects. >>> print([mem.name() for mem in di.members()]) [u'Aadvark', u'aadvarky_enough', u'main'] Get all functions. >>> print([mem.name() for mem in di.in_category(DoxyFunction)]) [u'aadvarky_enough', u'main'] Check if an object is present. >>> di.has_member(u'Aadvark') True >>> di.has_member(u'Fish') False Get an item by name and check its properties. >>> aad = di.get_member(u'Aadvark') >>> print(aad.brief_description) Models the mammal Aadvark. >>> print(aad.detailed_description) Sadly the model is incomplete and cannot capture all aspects of an aadvark yet. This line is uninformative and is only to test line breaks in the comments. >>> [mem.name() for mem in aad.members()] [u'aadvarkness', u'print', u'Aadvark', u'get_aadvarkness'] >>> aad.get_member(u'print').brief_description u'Outputs the vital aadvark statistics.' """ from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther def _test(): import os this_dir = os.path.dirname(globals()['__file__']) xml_path = this_dir + "/example/xml/" di = DoxyIndex(xml_path) # Get the Aadvark class aad = di.get_member('Aadvark') aad.brief_description import doctest return doctest.testmod() if __name__ == "__main__": _test() gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/base.py0000644000175000017500000001521212576764164023676 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ A base class is created. Classes based upon this are used to make more user-friendly interfaces to the doxygen xml docs than the generated classes provide. """ import os import pdb from xml.parsers.expat import ExpatError from generated import compound class Base(object): class Duplicate(StandardError): pass class NoSuchMember(StandardError): pass class ParsingError(StandardError): pass def __init__(self, parse_data, top=None): self._parsed = False self._error = False self._parse_data = parse_data self._members = [] self._dict_members = {} self._in_category = {} self._data = {} if top is not None: self._xml_path = top._xml_path # Set up holder of references else: top = self self._refs = {} self._xml_path = parse_data self.top = top @classmethod def from_refid(cls, refid, top=None): """ Instantiate class from a refid rather than parsing object. """ # First check to see if its already been instantiated. if top is not None and refid in top._refs: return top._refs[refid] # Otherwise create a new instance and set refid. inst = cls(None, top=top) inst.refid = refid inst.add_ref(inst) return inst @classmethod def from_parse_data(cls, parse_data, top=None): refid = getattr(parse_data, 'refid', None) if refid is not None and top is not None and refid in top._refs: return top._refs[refid] inst = cls(parse_data, top=top) if refid is not None: inst.refid = refid inst.add_ref(inst) return inst def add_ref(self, obj): if hasattr(obj, 'refid'): self.top._refs[obj.refid] = obj mem_classes = [] def get_cls(self, mem): for cls in self.mem_classes: if cls.can_parse(mem): return cls raise StandardError(("Did not find a class for object '%s'." \ % (mem.get_name()))) def convert_mem(self, mem): try: cls = self.get_cls(mem) converted = cls.from_parse_data(mem, self.top) if converted is None: raise StandardError('No class matched this object.') self.add_ref(converted) return converted except StandardError, e: print e @classmethod def includes(cls, inst): return isinstance(inst, cls) @classmethod def can_parse(cls, obj): return False def _parse(self): self._parsed = True def _get_dict_members(self, cat=None): """ For given category a dictionary is returned mapping member names to members of that category. For names that are duplicated the name is mapped to None. """ self.confirm_no_error() if cat not in self._dict_members: new_dict = {} for mem in self.in_category(cat): if mem.name() not in new_dict: new_dict[mem.name()] = mem else: new_dict[mem.name()] = self.Duplicate self._dict_members[cat] = new_dict return self._dict_members[cat] def in_category(self, cat): self.confirm_no_error() if cat is None: return self._members if cat not in self._in_category: self._in_category[cat] = [mem for mem in self._members if cat.includes(mem)] return self._in_category[cat] def get_member(self, name, cat=None): self.confirm_no_error() # Check if it's in a namespace or class. bits = name.split('::') first = bits[0] rest = '::'.join(bits[1:]) member = self._get_dict_members(cat).get(first, self.NoSuchMember) # Raise any errors that are returned. if member in set([self.NoSuchMember, self.Duplicate]): raise member() if rest: return member.get_member(rest, cat=cat) return member def has_member(self, name, cat=None): try: mem = self.get_member(name, cat=cat) return True except self.NoSuchMember: return False def data(self): self.confirm_no_error() return self._data def members(self): self.confirm_no_error() return self._members def process_memberdefs(self): mdtss = [] for sec in self._retrieved_data.compounddef.sectiondef: mdtss += sec.memberdef # At the moment we lose all information associated with sections. # Sometimes a memberdef is in several sectiondef. # We make sure we don't get duplicates here. uniques = set([]) for mem in mdtss: converted = self.convert_mem(mem) pair = (mem.name, mem.__class__) if pair not in uniques: uniques.add(pair) self._members.append(converted) def retrieve_data(self): filename = os.path.join(self._xml_path, self.refid + '.xml') try: self._retrieved_data = compound.parse(filename) except ExpatError: print('Error in xml in file %s' % filename) self._error = True self._retrieved_data = None def check_parsed(self): if not self._parsed: self._parse() def confirm_no_error(self): self.check_parsed() if self._error: raise self.ParsingError() def error(self): self.check_parsed() return self._error def name(self): # first see if we can do it without processing. if self._parse_data is not None: return self._parse_data.name self.check_parsed() return self._retrieved_data.compounddef.name gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/generated/0000755000175000017500000000000012576764164024347 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/generated/index.py0000644000175000017500000000351712576764164026036 0ustar carlescarles#!/usr/bin/env python """ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ from xml.dom import minidom import os import sys import compound import indexsuper as supermod class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compound=None): supermod.DoxygenType.__init__(self, version, compound) def find_compounds_and_members(self, details): """ Returns a list of all compounds and their members which match details """ results = [] for compound in self.compound: members = compound.find_members(details) if members: results.append([compound, members]) else: if details.match(compound): results.append([compound, []]) return results supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class CompoundTypeSub(supermod.CompoundType): def __init__(self, kind=None, refid=None, name='', member=None): supermod.CompoundType.__init__(self, kind, refid, name, member) def find_members(self, details): """ Returns a list of all members which match details """ results = [] for member in self.member: if details.match(member): results.append(member) return results supermod.CompoundType.subclass = CompoundTypeSub # end class CompoundTypeSub class MemberTypeSub(supermod.MemberType): def __init__(self, kind=None, refid=None, name=''): supermod.MemberType.__init__(self, kind, refid, name) supermod.MemberType.subclass = MemberTypeSub # end class MemberTypeSub def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/generated/compound.py0000644000175000017500000004751012576764164026554 0ustar carlescarles#!/usr/bin/env python """ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ from string import lower as str_lower from xml.dom import minidom from xml.dom import Node import sys import compoundsuper as supermod from compoundsuper import MixedContainer class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compounddef=None): supermod.DoxygenType.__init__(self, version, compounddef) def find(self, details): return self.compounddef.find(details) supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class compounddefTypeSub(supermod.compounddefType): def __init__(self, kind=None, prot=None, id=None, compoundname='', title='', basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): supermod.compounddefType.__init__(self, kind, prot, id, compoundname, title, basecompoundref, derivedcompoundref, includes, includedby, incdepgraph, invincdepgraph, innerdir, innerfile, innerclass, innernamespace, innerpage, innergroup, templateparamlist, sectiondef, briefdescription, detaileddescription, inheritancegraph, collaborationgraph, programlisting, location, listofallmembers) def find(self, details): if self.id == details.refid: return self for sectiondef in self.sectiondef: result = sectiondef.find(details) if result: return result supermod.compounddefType.subclass = compounddefTypeSub # end class compounddefTypeSub class listofallmembersTypeSub(supermod.listofallmembersType): def __init__(self, member=None): supermod.listofallmembersType.__init__(self, member) supermod.listofallmembersType.subclass = listofallmembersTypeSub # end class listofallmembersTypeSub class memberRefTypeSub(supermod.memberRefType): def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope='', name=''): supermod.memberRefType.__init__(self, virt, prot, refid, ambiguityscope, scope, name) supermod.memberRefType.subclass = memberRefTypeSub # end class memberRefTypeSub class compoundRefTypeSub(supermod.compoundRefType): def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.compoundRefType.__init__(self, mixedclass_, content_) supermod.compoundRefType.subclass = compoundRefTypeSub # end class compoundRefTypeSub class reimplementTypeSub(supermod.reimplementType): def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.reimplementType.__init__(self, mixedclass_, content_) supermod.reimplementType.subclass = reimplementTypeSub # end class reimplementTypeSub class incTypeSub(supermod.incType): def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.incType.__init__(self, mixedclass_, content_) supermod.incType.subclass = incTypeSub # end class incTypeSub class refTypeSub(supermod.refType): def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.refType.__init__(self, mixedclass_, content_) supermod.refType.subclass = refTypeSub # end class refTypeSub class refTextTypeSub(supermod.refTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.refTextType.__init__(self, mixedclass_, content_) supermod.refTextType.subclass = refTextTypeSub # end class refTextTypeSub class sectiondefTypeSub(supermod.sectiondefType): def __init__(self, kind=None, header='', description=None, memberdef=None): supermod.sectiondefType.__init__(self, kind, header, description, memberdef) def find(self, details): for memberdef in self.memberdef: if memberdef.id == details.refid: return memberdef return None supermod.sectiondefType.subclass = sectiondefTypeSub # end class sectiondefTypeSub class memberdefTypeSub(supermod.memberdefType): def __init__(self, initonly=None, kind=None, volatile=None, const=None, raise_=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition='', argsstring='', name='', read='', write='', bitfield='', reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): supermod.memberdefType.__init__(self, initonly, kind, volatile, const, raise_, virt, readable, prot, explicit, new, final, writable, add, static, remove, sealed, mutable, gettable, inline, settable, id, templateparamlist, type_, definition, argsstring, name, read, write, bitfield, reimplements, reimplementedby, param, enumvalue, initializer, exceptions, briefdescription, detaileddescription, inbodydescription, location, references, referencedby) supermod.memberdefType.subclass = memberdefTypeSub # end class memberdefTypeSub class descriptionTypeSub(supermod.descriptionType): def __init__(self, title='', para=None, sect1=None, internal=None, mixedclass_=None, content_=None): supermod.descriptionType.__init__(self, mixedclass_, content_) supermod.descriptionType.subclass = descriptionTypeSub # end class descriptionTypeSub class enumvalueTypeSub(supermod.enumvalueType): def __init__(self, prot=None, id=None, name='', initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): supermod.enumvalueType.__init__(self, mixedclass_, content_) supermod.enumvalueType.subclass = enumvalueTypeSub # end class enumvalueTypeSub class templateparamlistTypeSub(supermod.templateparamlistType): def __init__(self, param=None): supermod.templateparamlistType.__init__(self, param) supermod.templateparamlistType.subclass = templateparamlistTypeSub # end class templateparamlistTypeSub class paramTypeSub(supermod.paramType): def __init__(self, type_=None, declname='', defname='', array='', defval=None, briefdescription=None): supermod.paramType.__init__(self, type_, declname, defname, array, defval, briefdescription) supermod.paramType.subclass = paramTypeSub # end class paramTypeSub class linkedTextTypeSub(supermod.linkedTextType): def __init__(self, ref=None, mixedclass_=None, content_=None): supermod.linkedTextType.__init__(self, mixedclass_, content_) supermod.linkedTextType.subclass = linkedTextTypeSub # end class linkedTextTypeSub class graphTypeSub(supermod.graphType): def __init__(self, node=None): supermod.graphType.__init__(self, node) supermod.graphType.subclass = graphTypeSub # end class graphTypeSub class nodeTypeSub(supermod.nodeType): def __init__(self, id=None, label='', link=None, childnode=None): supermod.nodeType.__init__(self, id, label, link, childnode) supermod.nodeType.subclass = nodeTypeSub # end class nodeTypeSub class childnodeTypeSub(supermod.childnodeType): def __init__(self, relation=None, refid=None, edgelabel=None): supermod.childnodeType.__init__(self, relation, refid, edgelabel) supermod.childnodeType.subclass = childnodeTypeSub # end class childnodeTypeSub class linkTypeSub(supermod.linkType): def __init__(self, refid=None, external=None, valueOf_=''): supermod.linkType.__init__(self, refid, external) supermod.linkType.subclass = linkTypeSub # end class linkTypeSub class listingTypeSub(supermod.listingType): def __init__(self, codeline=None): supermod.listingType.__init__(self, codeline) supermod.listingType.subclass = listingTypeSub # end class listingTypeSub class codelineTypeSub(supermod.codelineType): def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): supermod.codelineType.__init__(self, external, lineno, refkind, refid, highlight) supermod.codelineType.subclass = codelineTypeSub # end class codelineTypeSub class highlightTypeSub(supermod.highlightType): def __init__(self, class_=None, sp=None, ref=None, mixedclass_=None, content_=None): supermod.highlightType.__init__(self, mixedclass_, content_) supermod.highlightType.subclass = highlightTypeSub # end class highlightTypeSub class referenceTypeSub(supermod.referenceType): def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): supermod.referenceType.__init__(self, mixedclass_, content_) supermod.referenceType.subclass = referenceTypeSub # end class referenceTypeSub class locationTypeSub(supermod.locationType): def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): supermod.locationType.__init__(self, bodystart, line, bodyend, bodyfile, file) supermod.locationType.subclass = locationTypeSub # end class locationTypeSub class docSect1TypeSub(supermod.docSect1Type): def __init__(self, id=None, title='', para=None, sect2=None, internal=None, mixedclass_=None, content_=None): supermod.docSect1Type.__init__(self, mixedclass_, content_) supermod.docSect1Type.subclass = docSect1TypeSub # end class docSect1TypeSub class docSect2TypeSub(supermod.docSect2Type): def __init__(self, id=None, title='', para=None, sect3=None, internal=None, mixedclass_=None, content_=None): supermod.docSect2Type.__init__(self, mixedclass_, content_) supermod.docSect2Type.subclass = docSect2TypeSub # end class docSect2TypeSub class docSect3TypeSub(supermod.docSect3Type): def __init__(self, id=None, title='', para=None, sect4=None, internal=None, mixedclass_=None, content_=None): supermod.docSect3Type.__init__(self, mixedclass_, content_) supermod.docSect3Type.subclass = docSect3TypeSub # end class docSect3TypeSub class docSect4TypeSub(supermod.docSect4Type): def __init__(self, id=None, title='', para=None, internal=None, mixedclass_=None, content_=None): supermod.docSect4Type.__init__(self, mixedclass_, content_) supermod.docSect4Type.subclass = docSect4TypeSub # end class docSect4TypeSub class docInternalTypeSub(supermod.docInternalType): def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): supermod.docInternalType.__init__(self, mixedclass_, content_) supermod.docInternalType.subclass = docInternalTypeSub # end class docInternalTypeSub class docInternalS1TypeSub(supermod.docInternalS1Type): def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): supermod.docInternalS1Type.__init__(self, mixedclass_, content_) supermod.docInternalS1Type.subclass = docInternalS1TypeSub # end class docInternalS1TypeSub class docInternalS2TypeSub(supermod.docInternalS2Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS2Type.__init__(self, mixedclass_, content_) supermod.docInternalS2Type.subclass = docInternalS2TypeSub # end class docInternalS2TypeSub class docInternalS3TypeSub(supermod.docInternalS3Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS3Type.__init__(self, mixedclass_, content_) supermod.docInternalS3Type.subclass = docInternalS3TypeSub # end class docInternalS3TypeSub class docInternalS4TypeSub(supermod.docInternalS4Type): def __init__(self, para=None, mixedclass_=None, content_=None): supermod.docInternalS4Type.__init__(self, mixedclass_, content_) supermod.docInternalS4Type.subclass = docInternalS4TypeSub # end class docInternalS4TypeSub class docURLLinkSub(supermod.docURLLink): def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): supermod.docURLLink.__init__(self, mixedclass_, content_) supermod.docURLLink.subclass = docURLLinkSub # end class docURLLinkSub class docAnchorTypeSub(supermod.docAnchorType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docAnchorType.__init__(self, mixedclass_, content_) supermod.docAnchorType.subclass = docAnchorTypeSub # end class docAnchorTypeSub class docFormulaTypeSub(supermod.docFormulaType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docFormulaType.__init__(self, mixedclass_, content_) supermod.docFormulaType.subclass = docFormulaTypeSub # end class docFormulaTypeSub class docIndexEntryTypeSub(supermod.docIndexEntryType): def __init__(self, primaryie='', secondaryie=''): supermod.docIndexEntryType.__init__(self, primaryie, secondaryie) supermod.docIndexEntryType.subclass = docIndexEntryTypeSub # end class docIndexEntryTypeSub class docListTypeSub(supermod.docListType): def __init__(self, listitem=None): supermod.docListType.__init__(self, listitem) supermod.docListType.subclass = docListTypeSub # end class docListTypeSub class docListItemTypeSub(supermod.docListItemType): def __init__(self, para=None): supermod.docListItemType.__init__(self, para) supermod.docListItemType.subclass = docListItemTypeSub # end class docListItemTypeSub class docSimpleSectTypeSub(supermod.docSimpleSectType): def __init__(self, kind=None, title=None, para=None): supermod.docSimpleSectType.__init__(self, kind, title, para) supermod.docSimpleSectType.subclass = docSimpleSectTypeSub # end class docSimpleSectTypeSub class docVarListEntryTypeSub(supermod.docVarListEntryType): def __init__(self, term=None): supermod.docVarListEntryType.__init__(self, term) supermod.docVarListEntryType.subclass = docVarListEntryTypeSub # end class docVarListEntryTypeSub class docRefTextTypeSub(supermod.docRefTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.docRefTextType.__init__(self, mixedclass_, content_) supermod.docRefTextType.subclass = docRefTextTypeSub # end class docRefTextTypeSub class docTableTypeSub(supermod.docTableType): def __init__(self, rows=None, cols=None, row=None, caption=None): supermod.docTableType.__init__(self, rows, cols, row, caption) supermod.docTableType.subclass = docTableTypeSub # end class docTableTypeSub class docRowTypeSub(supermod.docRowType): def __init__(self, entry=None): supermod.docRowType.__init__(self, entry) supermod.docRowType.subclass = docRowTypeSub # end class docRowTypeSub class docEntryTypeSub(supermod.docEntryType): def __init__(self, thead=None, para=None): supermod.docEntryType.__init__(self, thead, para) supermod.docEntryType.subclass = docEntryTypeSub # end class docEntryTypeSub class docHeadingTypeSub(supermod.docHeadingType): def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): supermod.docHeadingType.__init__(self, mixedclass_, content_) supermod.docHeadingType.subclass = docHeadingTypeSub # end class docHeadingTypeSub class docImageTypeSub(supermod.docImageType): def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): supermod.docImageType.__init__(self, mixedclass_, content_) supermod.docImageType.subclass = docImageTypeSub # end class docImageTypeSub class docDotFileTypeSub(supermod.docDotFileType): def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): supermod.docDotFileType.__init__(self, mixedclass_, content_) supermod.docDotFileType.subclass = docDotFileTypeSub # end class docDotFileTypeSub class docTocItemTypeSub(supermod.docTocItemType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docTocItemType.__init__(self, mixedclass_, content_) supermod.docTocItemType.subclass = docTocItemTypeSub # end class docTocItemTypeSub class docTocListTypeSub(supermod.docTocListType): def __init__(self, tocitem=None): supermod.docTocListType.__init__(self, tocitem) supermod.docTocListType.subclass = docTocListTypeSub # end class docTocListTypeSub class docLanguageTypeSub(supermod.docLanguageType): def __init__(self, langid=None, para=None): supermod.docLanguageType.__init__(self, langid, para) supermod.docLanguageType.subclass = docLanguageTypeSub # end class docLanguageTypeSub class docParamListTypeSub(supermod.docParamListType): def __init__(self, kind=None, parameteritem=None): supermod.docParamListType.__init__(self, kind, parameteritem) supermod.docParamListType.subclass = docParamListTypeSub # end class docParamListTypeSub class docParamListItemSub(supermod.docParamListItem): def __init__(self, parameternamelist=None, parameterdescription=None): supermod.docParamListItem.__init__(self, parameternamelist, parameterdescription) supermod.docParamListItem.subclass = docParamListItemSub # end class docParamListItemSub class docParamNameListSub(supermod.docParamNameList): def __init__(self, parametername=None): supermod.docParamNameList.__init__(self, parametername) supermod.docParamNameList.subclass = docParamNameListSub # end class docParamNameListSub class docParamNameSub(supermod.docParamName): def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): supermod.docParamName.__init__(self, mixedclass_, content_) supermod.docParamName.subclass = docParamNameSub # end class docParamNameSub class docXRefSectTypeSub(supermod.docXRefSectType): def __init__(self, id=None, xreftitle=None, xrefdescription=None): supermod.docXRefSectType.__init__(self, id, xreftitle, xrefdescription) supermod.docXRefSectType.subclass = docXRefSectTypeSub # end class docXRefSectTypeSub class docCopyTypeSub(supermod.docCopyType): def __init__(self, link=None, para=None, sect1=None, internal=None): supermod.docCopyType.__init__(self, link, para, sect1, internal) supermod.docCopyType.subclass = docCopyTypeSub # end class docCopyTypeSub class docCharTypeSub(supermod.docCharType): def __init__(self, char=None, valueOf_=''): supermod.docCharType.__init__(self, char) supermod.docCharType.subclass = docCharTypeSub # end class docCharTypeSub class docParaTypeSub(supermod.docParaType): def __init__(self, char=None, valueOf_=''): supermod.docParaType.__init__(self, char) self.parameterlist = [] self.simplesects = [] self.content = [] def buildChildren(self, child_, nodeName_): supermod.docParaType.buildChildren(self, child_, nodeName_) if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == "ref": obj_ = supermod.docRefTextType.factory() obj_.build(child_) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameterlist': obj_ = supermod.docParamListType.factory() obj_.build(child_) self.parameterlist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'simplesect': obj_ = supermod.docSimpleSectType.factory() obj_.build(child_) self.simplesects.append(obj_) supermod.docParaType.subclass = docParaTypeSub # end class docParaTypeSub def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/generated/__init__.py0000644000175000017500000000035312576764164026461 0ustar carlescarles""" Contains generated files produced by generateDS.py. These do the real work of parsing the doxygen xml files but the resultant classes are not very friendly to navigate so the rest of the doxyxml module processes them further. """ gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/generated/compoundsuper.py0000644000175000017500000127701412576764164027640 0ustar carlescarles#!/usr/bin/env python # # Generated Thu Jun 11 18:44:25 2009 by generateDS.py. # import sys import getopt from string import lower as str_lower from xml.dom import minidom from xml.dom import Node # # User methods # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class # in a module named generatedssuper.py. try: from generatedssuper import GeneratedsSuper except ImportError, exp: class GeneratedsSuper: def format_string(self, input_data, input_name=''): return input_data def format_integer(self, input_data, input_name=''): return '%d' % input_data def format_float(self, input_data, input_name=''): return '%f' % input_data def format_double(self, input_data, input_name=''): return '%e' % input_data def format_boolean(self, input_data, input_name=''): return '%s' % input_data # # If you have installed IPython you can uncomment and use the following. # IPython is available from http://ipython.scipy.org/. # ## from IPython.Shell import IPShellEmbed ## args = '' ## ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', ## exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: # ipshell(' -- Entering ipshell.\nHit Ctrl-D to exit') # # Globals # ExternalEncoding = 'ascii' # # Support/utility functions. # def showIndent(outfile, level): for idx in range(level): outfile.write(' ') def quote_xml(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') if '"' in s1: if "'" in s1: s1 = '"%s"' % s1.replace('"', """) else: s1 = "'%s'" % s1 else: s1 = '"%s"' % s1 return s1 def quote_python(inStr): s1 = inStr if s1.find("'") == -1: if s1.find('\n') == -1: return "'%s'" % s1 else: return "'''%s'''" % s1 else: if s1.find('"') != -1: s1 = s1.replace('"', '\\"') if s1.find('\n') == -1: return '"%s"' % s1 else: return '"""%s"""' % s1 class MixedContainer: # Constants for category: CategoryNone = 0 CategoryText = 1 CategorySimple = 2 CategoryComplex = 3 # Constants for content_type: TypeNone = 0 TypeText = 1 TypeString = 2 TypeInteger = 3 TypeFloat = 4 TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value def getCategory(self): return self.category def getContenttype(self, content_type): return self.content_type def getValue(self): return self.value def getName(self): return self.name def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex self.value.export(outfile, level, namespace,name) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeInteger or \ self.content_type == MixedContainer.TypeBoolean: outfile.write('<%s>%d' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeFloat or \ self.content_type == MixedContainer.TypeDecimal: outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s",\n' % \ (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') class _MemberSpec(object): def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type def get_data_type(self): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container # # Data representation classes. # class DoxygenType(GeneratedsSuper): subclass = None superclass = None def __init__(self, version=None, compounddef=None): self.version = version self.compounddef = compounddef def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) else: return DoxygenType(*args_, **kwargs_) factory = staticmethod(factory) def get_compounddef(self): return self.compounddef def set_compounddef(self, compounddef): self.compounddef = compounddef def get_version(self): return self.version def set_version(self, version): self.version = version def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (quote_attrib(self.version), )) def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): if self.compounddef: self.compounddef.export(outfile, level, namespace_, name_='compounddef') def hasContent_(self): if ( self.compounddef is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = "%s",\n' % (self.version,)) def exportLiteralChildren(self, outfile, level, name_): if self.compounddef: showIndent(outfile, level) outfile.write('compounddef=model_.compounddefType(\n') self.compounddef.exportLiteral(outfile, level, name_='compounddef') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compounddef': obj_ = compounddefType.factory() obj_.build(child_) self.set_compounddef(obj_) # end class DoxygenType class compounddefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, prot=None, id=None, compoundname=None, title=None, basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): self.kind = kind self.prot = prot self.id = id self.compoundname = compoundname self.title = title if basecompoundref is None: self.basecompoundref = [] else: self.basecompoundref = basecompoundref if derivedcompoundref is None: self.derivedcompoundref = [] else: self.derivedcompoundref = derivedcompoundref if includes is None: self.includes = [] else: self.includes = includes if includedby is None: self.includedby = [] else: self.includedby = includedby self.incdepgraph = incdepgraph self.invincdepgraph = invincdepgraph if innerdir is None: self.innerdir = [] else: self.innerdir = innerdir if innerfile is None: self.innerfile = [] else: self.innerfile = innerfile if innerclass is None: self.innerclass = [] else: self.innerclass = innerclass if innernamespace is None: self.innernamespace = [] else: self.innernamespace = innernamespace if innerpage is None: self.innerpage = [] else: self.innerpage = innerpage if innergroup is None: self.innergroup = [] else: self.innergroup = innergroup self.templateparamlist = templateparamlist if sectiondef is None: self.sectiondef = [] else: self.sectiondef = sectiondef self.briefdescription = briefdescription self.detaileddescription = detaileddescription self.inheritancegraph = inheritancegraph self.collaborationgraph = collaborationgraph self.programlisting = programlisting self.location = location self.listofallmembers = listofallmembers def factory(*args_, **kwargs_): if compounddefType.subclass: return compounddefType.subclass(*args_, **kwargs_) else: return compounddefType(*args_, **kwargs_) factory = staticmethod(factory) def get_compoundname(self): return self.compoundname def set_compoundname(self, compoundname): self.compoundname = compoundname def get_title(self): return self.title def set_title(self, title): self.title = title def get_basecompoundref(self): return self.basecompoundref def set_basecompoundref(self, basecompoundref): self.basecompoundref = basecompoundref def add_basecompoundref(self, value): self.basecompoundref.append(value) def insert_basecompoundref(self, index, value): self.basecompoundref[index] = value def get_derivedcompoundref(self): return self.derivedcompoundref def set_derivedcompoundref(self, derivedcompoundref): self.derivedcompoundref = derivedcompoundref def add_derivedcompoundref(self, value): self.derivedcompoundref.append(value) def insert_derivedcompoundref(self, index, value): self.derivedcompoundref[index] = value def get_includes(self): return self.includes def set_includes(self, includes): self.includes = includes def add_includes(self, value): self.includes.append(value) def insert_includes(self, index, value): self.includes[index] = value def get_includedby(self): return self.includedby def set_includedby(self, includedby): self.includedby = includedby def add_includedby(self, value): self.includedby.append(value) def insert_includedby(self, index, value): self.includedby[index] = value def get_incdepgraph(self): return self.incdepgraph def set_incdepgraph(self, incdepgraph): self.incdepgraph = incdepgraph def get_invincdepgraph(self): return self.invincdepgraph def set_invincdepgraph(self, invincdepgraph): self.invincdepgraph = invincdepgraph def get_innerdir(self): return self.innerdir def set_innerdir(self, innerdir): self.innerdir = innerdir def add_innerdir(self, value): self.innerdir.append(value) def insert_innerdir(self, index, value): self.innerdir[index] = value def get_innerfile(self): return self.innerfile def set_innerfile(self, innerfile): self.innerfile = innerfile def add_innerfile(self, value): self.innerfile.append(value) def insert_innerfile(self, index, value): self.innerfile[index] = value def get_innerclass(self): return self.innerclass def set_innerclass(self, innerclass): self.innerclass = innerclass def add_innerclass(self, value): self.innerclass.append(value) def insert_innerclass(self, index, value): self.innerclass[index] = value def get_innernamespace(self): return self.innernamespace def set_innernamespace(self, innernamespace): self.innernamespace = innernamespace def add_innernamespace(self, value): self.innernamespace.append(value) def insert_innernamespace(self, index, value): self.innernamespace[index] = value def get_innerpage(self): return self.innerpage def set_innerpage(self, innerpage): self.innerpage = innerpage def add_innerpage(self, value): self.innerpage.append(value) def insert_innerpage(self, index, value): self.innerpage[index] = value def get_innergroup(self): return self.innergroup def set_innergroup(self, innergroup): self.innergroup = innergroup def add_innergroup(self, value): self.innergroup.append(value) def insert_innergroup(self, index, value): self.innergroup[index] = value def get_templateparamlist(self): return self.templateparamlist def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist def get_sectiondef(self): return self.sectiondef def set_sectiondef(self, sectiondef): self.sectiondef = sectiondef def add_sectiondef(self, value): self.sectiondef.append(value) def insert_sectiondef(self, index, value): self.sectiondef[index] = value def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_inheritancegraph(self): return self.inheritancegraph def set_inheritancegraph(self, inheritancegraph): self.inheritancegraph = inheritancegraph def get_collaborationgraph(self): return self.collaborationgraph def set_collaborationgraph(self, collaborationgraph): self.collaborationgraph = collaborationgraph def get_programlisting(self): return self.programlisting def set_programlisting(self, programlisting): self.programlisting = programlisting def get_location(self): return self.location def set_location(self, location): self.location = location def get_listofallmembers(self): return self.listofallmembers def set_listofallmembers(self, listofallmembers): self.listofallmembers = listofallmembers def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='compounddefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='compounddefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='compounddefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='compounddefType'): if self.compoundname is not None: showIndent(outfile, level) outfile.write('<%scompoundname>%s\n' % (namespace_, self.format_string(quote_xml(self.compoundname).encode(ExternalEncoding), input_name='compoundname'), namespace_)) if self.title is not None: showIndent(outfile, level) outfile.write('<%stitle>%s\n' % (namespace_, self.format_string(quote_xml(self.title).encode(ExternalEncoding), input_name='title'), namespace_)) for basecompoundref_ in self.basecompoundref: basecompoundref_.export(outfile, level, namespace_, name_='basecompoundref') for derivedcompoundref_ in self.derivedcompoundref: derivedcompoundref_.export(outfile, level, namespace_, name_='derivedcompoundref') for includes_ in self.includes: includes_.export(outfile, level, namespace_, name_='includes') for includedby_ in self.includedby: includedby_.export(outfile, level, namespace_, name_='includedby') if self.incdepgraph: self.incdepgraph.export(outfile, level, namespace_, name_='incdepgraph') if self.invincdepgraph: self.invincdepgraph.export(outfile, level, namespace_, name_='invincdepgraph') for innerdir_ in self.innerdir: innerdir_.export(outfile, level, namespace_, name_='innerdir') for innerfile_ in self.innerfile: innerfile_.export(outfile, level, namespace_, name_='innerfile') for innerclass_ in self.innerclass: innerclass_.export(outfile, level, namespace_, name_='innerclass') for innernamespace_ in self.innernamespace: innernamespace_.export(outfile, level, namespace_, name_='innernamespace') for innerpage_ in self.innerpage: innerpage_.export(outfile, level, namespace_, name_='innerpage') for innergroup_ in self.innergroup: innergroup_.export(outfile, level, namespace_, name_='innergroup') if self.templateparamlist: self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') for sectiondef_ in self.sectiondef: sectiondef_.export(outfile, level, namespace_, name_='sectiondef') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') if self.inheritancegraph: self.inheritancegraph.export(outfile, level, namespace_, name_='inheritancegraph') if self.collaborationgraph: self.collaborationgraph.export(outfile, level, namespace_, name_='collaborationgraph') if self.programlisting: self.programlisting.export(outfile, level, namespace_, name_='programlisting') if self.location: self.location.export(outfile, level, namespace_, name_='location') if self.listofallmembers: self.listofallmembers.export(outfile, level, namespace_, name_='listofallmembers') def hasContent_(self): if ( self.compoundname is not None or self.title is not None or self.basecompoundref is not None or self.derivedcompoundref is not None or self.includes is not None or self.includedby is not None or self.incdepgraph is not None or self.invincdepgraph is not None or self.innerdir is not None or self.innerfile is not None or self.innerclass is not None or self.innernamespace is not None or self.innerpage is not None or self.innergroup is not None or self.templateparamlist is not None or self.sectiondef is not None or self.briefdescription is not None or self.detaileddescription is not None or self.inheritancegraph is not None or self.collaborationgraph is not None or self.programlisting is not None or self.location is not None or self.listofallmembers is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='compounddefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compoundname=%s,\n' % quote_python(self.compoundname).encode(ExternalEncoding)) if self.title: showIndent(outfile, level) outfile.write('title=model_.xsd_string(\n') self.title.exportLiteral(outfile, level, name_='title') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('basecompoundref=[\n') level += 1 for basecompoundref in self.basecompoundref: showIndent(outfile, level) outfile.write('model_.basecompoundref(\n') basecompoundref.exportLiteral(outfile, level, name_='basecompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('derivedcompoundref=[\n') level += 1 for derivedcompoundref in self.derivedcompoundref: showIndent(outfile, level) outfile.write('model_.derivedcompoundref(\n') derivedcompoundref.exportLiteral(outfile, level, name_='derivedcompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('includes=[\n') level += 1 for includes in self.includes: showIndent(outfile, level) outfile.write('model_.includes(\n') includes.exportLiteral(outfile, level, name_='includes') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('includedby=[\n') level += 1 for includedby in self.includedby: showIndent(outfile, level) outfile.write('model_.includedby(\n') includedby.exportLiteral(outfile, level, name_='includedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.incdepgraph: showIndent(outfile, level) outfile.write('incdepgraph=model_.graphType(\n') self.incdepgraph.exportLiteral(outfile, level, name_='incdepgraph') showIndent(outfile, level) outfile.write('),\n') if self.invincdepgraph: showIndent(outfile, level) outfile.write('invincdepgraph=model_.graphType(\n') self.invincdepgraph.exportLiteral(outfile, level, name_='invincdepgraph') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('innerdir=[\n') level += 1 for innerdir in self.innerdir: showIndent(outfile, level) outfile.write('model_.innerdir(\n') innerdir.exportLiteral(outfile, level, name_='innerdir') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerfile=[\n') level += 1 for innerfile in self.innerfile: showIndent(outfile, level) outfile.write('model_.innerfile(\n') innerfile.exportLiteral(outfile, level, name_='innerfile') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerclass=[\n') level += 1 for innerclass in self.innerclass: showIndent(outfile, level) outfile.write('model_.innerclass(\n') innerclass.exportLiteral(outfile, level, name_='innerclass') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innernamespace=[\n') level += 1 for innernamespace in self.innernamespace: showIndent(outfile, level) outfile.write('model_.innernamespace(\n') innernamespace.exportLiteral(outfile, level, name_='innernamespace') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerpage=[\n') level += 1 for innerpage in self.innerpage: showIndent(outfile, level) outfile.write('model_.innerpage(\n') innerpage.exportLiteral(outfile, level, name_='innerpage') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innergroup=[\n') level += 1 for innergroup in self.innergroup: showIndent(outfile, level) outfile.write('model_.innergroup(\n') innergroup.exportLiteral(outfile, level, name_='innergroup') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('sectiondef=[\n') level += 1 for sectiondef in self.sectiondef: showIndent(outfile, level) outfile.write('model_.sectiondef(\n') sectiondef.exportLiteral(outfile, level, name_='sectiondef') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inheritancegraph: showIndent(outfile, level) outfile.write('inheritancegraph=model_.graphType(\n') self.inheritancegraph.exportLiteral(outfile, level, name_='inheritancegraph') showIndent(outfile, level) outfile.write('),\n') if self.collaborationgraph: showIndent(outfile, level) outfile.write('collaborationgraph=model_.graphType(\n') self.collaborationgraph.exportLiteral(outfile, level, name_='collaborationgraph') showIndent(outfile, level) outfile.write('),\n') if self.programlisting: showIndent(outfile, level) outfile.write('programlisting=model_.listingType(\n') self.programlisting.exportLiteral(outfile, level, name_='programlisting') showIndent(outfile, level) outfile.write('),\n') if self.location: showIndent(outfile, level) outfile.write('location=model_.locationType(\n') self.location.exportLiteral(outfile, level, name_='location') showIndent(outfile, level) outfile.write('),\n') if self.listofallmembers: showIndent(outfile, level) outfile.write('listofallmembers=model_.listofallmembersType(\n') self.listofallmembers.exportLiteral(outfile, level, name_='listofallmembers') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compoundname': compoundname_ = '' for text__content_ in child_.childNodes: compoundname_ += text__content_.nodeValue self.compoundname = compoundname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'basecompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.basecompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'derivedcompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.derivedcompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'includes': obj_ = incType.factory() obj_.build(child_) self.includes.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'includedby': obj_ = incType.factory() obj_.build(child_) self.includedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'incdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_incdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'invincdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_invincdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerdir': obj_ = refType.factory() obj_.build(child_) self.innerdir.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerfile': obj_ = refType.factory() obj_.build(child_) self.innerfile.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerclass': obj_ = refType.factory() obj_.build(child_) self.innerclass.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innernamespace': obj_ = refType.factory() obj_.build(child_) self.innernamespace.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerpage': obj_ = refType.factory() obj_.build(child_) self.innerpage.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innergroup': obj_ = refType.factory() obj_.build(child_) self.innergroup.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sectiondef': obj_ = sectiondefType.factory() obj_.build(child_) self.sectiondef.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'inheritancegraph': obj_ = graphType.factory() obj_.build(child_) self.set_inheritancegraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'collaborationgraph': obj_ = graphType.factory() obj_.build(child_) self.set_collaborationgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'programlisting': obj_ = listingType.factory() obj_.build(child_) self.set_programlisting(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'listofallmembers': obj_ = listofallmembersType.factory() obj_.build(child_) self.set_listofallmembers(obj_) # end class compounddefType class listofallmembersType(GeneratedsSuper): subclass = None superclass = None def __init__(self, member=None): if member is None: self.member = [] else: self.member = member def factory(*args_, **kwargs_): if listofallmembersType.subclass: return listofallmembersType.subclass(*args_, **kwargs_) else: return listofallmembersType(*args_, **kwargs_) factory = staticmethod(factory) def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value def export(self, outfile, level, namespace_='', name_='listofallmembersType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='listofallmembersType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='listofallmembersType'): pass def exportChildren(self, outfile, level, namespace_='', name_='listofallmembersType'): for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') def hasContent_(self): if ( self.member is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='listofallmembersType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('member=[\n') level += 1 for member in self.member: showIndent(outfile, level) outfile.write('model_.member(\n') member.exportLiteral(outfile, level, name_='member') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'member': obj_ = memberRefType.factory() obj_.build(child_) self.member.append(obj_) # end class listofallmembersType class memberRefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope=None, name=None): self.virt = virt self.prot = prot self.refid = refid self.ambiguityscope = ambiguityscope self.scope = scope self.name = name def factory(*args_, **kwargs_): if memberRefType.subclass: return memberRefType.subclass(*args_, **kwargs_) else: return memberRefType(*args_, **kwargs_) factory = staticmethod(factory) def get_scope(self): return self.scope def set_scope(self, scope): self.scope = scope def get_name(self): return self.name def set_name(self, name): self.name = name def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_ambiguityscope(self): return self.ambiguityscope def set_ambiguityscope(self, ambiguityscope): self.ambiguityscope = ambiguityscope def export(self, outfile, level, namespace_='', name_='memberRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='memberRefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='memberRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.ambiguityscope is not None: outfile.write(' ambiguityscope=%s' % (self.format_string(quote_attrib(self.ambiguityscope).encode(ExternalEncoding), input_name='ambiguityscope'), )) def exportChildren(self, outfile, level, namespace_='', name_='memberRefType'): if self.scope is not None: showIndent(outfile, level) outfile.write('<%sscope>%s\n' % (namespace_, self.format_string(quote_xml(self.scope).encode(ExternalEncoding), input_name='scope'), namespace_)) if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) def hasContent_(self): if ( self.scope is not None or self.name is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='memberRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.ambiguityscope is not None: showIndent(outfile, level) outfile.write('ambiguityscope = %s,\n' % (self.ambiguityscope,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('scope=%s,\n' % quote_python(self.scope).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('ambiguityscope'): self.ambiguityscope = attrs.get('ambiguityscope').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'scope': scope_ = '' for text__content_ in child_.childNodes: scope_ += text__content_.nodeValue self.scope = scope_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ # end class memberRefType class scope(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if scope.subclass: return scope.subclass(*args_, **kwargs_) else: return scope(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='scope', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='scope') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='scope'): pass def exportChildren(self, outfile, level, namespace_='', name_='scope'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='scope'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class scope class name(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if name.subclass: return name.subclass(*args_, **kwargs_) else: return name(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='name', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='name') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='name'): pass def exportChildren(self, outfile, level, namespace_='', name_='name'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='name'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class name class compoundRefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.virt = virt self.prot = prot self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if compoundRefType.subclass: return compoundRefType.subclass(*args_, **kwargs_) else: return compoundRefType(*args_, **kwargs_) factory = staticmethod(factory) def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='compoundRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='compoundRefType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='compoundRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='compoundRefType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='compoundRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class compoundRefType class reimplementType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if reimplementType.subclass: return reimplementType.subclass(*args_, **kwargs_) else: return reimplementType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='reimplementType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='reimplementType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='reimplementType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='reimplementType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='reimplementType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class reimplementType class incType(GeneratedsSuper): subclass = None superclass = None def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.local = local self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if incType.subclass: return incType.subclass(*args_, **kwargs_) else: return incType(*args_, **kwargs_) factory = staticmethod(factory) def get_local(self): return self.local def set_local(self, local): self.local = local def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='incType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='incType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='incType'): if self.local is not None: outfile.write(' local=%s' % (quote_attrib(self.local), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='incType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='incType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.local is not None: showIndent(outfile, level) outfile.write('local = "%s",\n' % (self.local,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('local'): self.local = attrs.get('local').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class incType class refType(GeneratedsSuper): subclass = None superclass = None def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.prot = prot self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if refType.subclass: return refType.subclass(*args_, **kwargs_) else: return refType(*args_, **kwargs_) factory = staticmethod(factory) def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='refType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='refType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='refType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='refType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='refType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class refType class refTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref self.external = external if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if refTextType.subclass: return refTextType.subclass(*args_, **kwargs_) else: return refTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_kindref(self): return self.kindref def set_kindref(self, kindref): self.kindref = kindref def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='refTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='refTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='refTextType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='refTextType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='refTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.kindref is not None: showIndent(outfile, level) outfile.write('kindref = "%s",\n' % (self.kindref,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('kindref'): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class refTextType class sectiondefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, header=None, description=None, memberdef=None): self.kind = kind self.header = header self.description = description if memberdef is None: self.memberdef = [] else: self.memberdef = memberdef def factory(*args_, **kwargs_): if sectiondefType.subclass: return sectiondefType.subclass(*args_, **kwargs_) else: return sectiondefType(*args_, **kwargs_) factory = staticmethod(factory) def get_header(self): return self.header def set_header(self, header): self.header = header def get_description(self): return self.description def set_description(self, description): self.description = description def get_memberdef(self): return self.memberdef def set_memberdef(self, memberdef): self.memberdef = memberdef def add_memberdef(self, value): self.memberdef.append(value) def insert_memberdef(self, index, value): self.memberdef[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='sectiondefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='sectiondefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='sectiondefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='sectiondefType'): if self.header is not None: showIndent(outfile, level) outfile.write('<%sheader>%s\n' % (namespace_, self.format_string(quote_xml(self.header).encode(ExternalEncoding), input_name='header'), namespace_)) if self.description: self.description.export(outfile, level, namespace_, name_='description') for memberdef_ in self.memberdef: memberdef_.export(outfile, level, namespace_, name_='memberdef') def hasContent_(self): if ( self.header is not None or self.description is not None or self.memberdef is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='sectiondefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('header=%s,\n' % quote_python(self.header).encode(ExternalEncoding)) if self.description: showIndent(outfile, level) outfile.write('description=model_.descriptionType(\n') self.description.exportLiteral(outfile, level, name_='description') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('memberdef=[\n') level += 1 for memberdef in self.memberdef: showIndent(outfile, level) outfile.write('model_.memberdef(\n') memberdef.exportLiteral(outfile, level, name_='memberdef') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'header': header_ = '' for text__content_ in child_.childNodes: header_ += text__content_.nodeValue self.header = header_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'description': obj_ = descriptionType.factory() obj_.build(child_) self.set_description(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'memberdef': obj_ = memberdefType.factory() obj_.build(child_) self.memberdef.append(obj_) # end class sectiondefType class memberdefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, initonly=None, kind=None, volatile=None, const=None, raisexx=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition=None, argsstring=None, name=None, read=None, write=None, bitfield=None, reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): self.initonly = initonly self.kind = kind self.volatile = volatile self.const = const self.raisexx = raisexx self.virt = virt self.readable = readable self.prot = prot self.explicit = explicit self.new = new self.final = final self.writable = writable self.add = add self.static = static self.remove = remove self.sealed = sealed self.mutable = mutable self.gettable = gettable self.inline = inline self.settable = settable self.id = id self.templateparamlist = templateparamlist self.type_ = type_ self.definition = definition self.argsstring = argsstring self.name = name self.read = read self.write = write self.bitfield = bitfield if reimplements is None: self.reimplements = [] else: self.reimplements = reimplements if reimplementedby is None: self.reimplementedby = [] else: self.reimplementedby = reimplementedby if param is None: self.param = [] else: self.param = param if enumvalue is None: self.enumvalue = [] else: self.enumvalue = enumvalue self.initializer = initializer self.exceptions = exceptions self.briefdescription = briefdescription self.detaileddescription = detaileddescription self.inbodydescription = inbodydescription self.location = location if references is None: self.references = [] else: self.references = references if referencedby is None: self.referencedby = [] else: self.referencedby = referencedby def factory(*args_, **kwargs_): if memberdefType.subclass: return memberdefType.subclass(*args_, **kwargs_) else: return memberdefType(*args_, **kwargs_) factory = staticmethod(factory) def get_templateparamlist(self): return self.templateparamlist def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_definition(self): return self.definition def set_definition(self, definition): self.definition = definition def get_argsstring(self): return self.argsstring def set_argsstring(self, argsstring): self.argsstring = argsstring def get_name(self): return self.name def set_name(self, name): self.name = name def get_read(self): return self.read def set_read(self, read): self.read = read def get_write(self): return self.write def set_write(self, write): self.write = write def get_bitfield(self): return self.bitfield def set_bitfield(self, bitfield): self.bitfield = bitfield def get_reimplements(self): return self.reimplements def set_reimplements(self, reimplements): self.reimplements = reimplements def add_reimplements(self, value): self.reimplements.append(value) def insert_reimplements(self, index, value): self.reimplements[index] = value def get_reimplementedby(self): return self.reimplementedby def set_reimplementedby(self, reimplementedby): self.reimplementedby = reimplementedby def add_reimplementedby(self, value): self.reimplementedby.append(value) def insert_reimplementedby(self, index, value): self.reimplementedby[index] = value def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value def get_enumvalue(self): return self.enumvalue def set_enumvalue(self, enumvalue): self.enumvalue = enumvalue def add_enumvalue(self, value): self.enumvalue.append(value) def insert_enumvalue(self, index, value): self.enumvalue[index] = value def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_exceptions(self): return self.exceptions def set_exceptions(self, exceptions): self.exceptions = exceptions def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_inbodydescription(self): return self.inbodydescription def set_inbodydescription(self, inbodydescription): self.inbodydescription = inbodydescription def get_location(self): return self.location def set_location(self, location): self.location = location def get_references(self): return self.references def set_references(self, references): self.references = references def add_references(self, value): self.references.append(value) def insert_references(self, index, value): self.references[index] = value def get_referencedby(self): return self.referencedby def set_referencedby(self, referencedby): self.referencedby = referencedby def add_referencedby(self, value): self.referencedby.append(value) def insert_referencedby(self, index, value): self.referencedby[index] = value def get_initonly(self): return self.initonly def set_initonly(self, initonly): self.initonly = initonly def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_volatile(self): return self.volatile def set_volatile(self, volatile): self.volatile = volatile def get_const(self): return self.const def set_const(self, const): self.const = const def get_raise(self): return self.raisexx def set_raise(self, raisexx): self.raisexx = raisexx def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_readable(self): return self.readable def set_readable(self, readable): self.readable = readable def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_explicit(self): return self.explicit def set_explicit(self, explicit): self.explicit = explicit def get_new(self): return self.new def set_new(self, new): self.new = new def get_final(self): return self.final def set_final(self, final): self.final = final def get_writable(self): return self.writable def set_writable(self, writable): self.writable = writable def get_add(self): return self.add def set_add(self, add): self.add = add def get_static(self): return self.static def set_static(self, static): self.static = static def get_remove(self): return self.remove def set_remove(self, remove): self.remove = remove def get_sealed(self): return self.sealed def set_sealed(self, sealed): self.sealed = sealed def get_mutable(self): return self.mutable def set_mutable(self, mutable): self.mutable = mutable def get_gettable(self): return self.gettable def set_gettable(self, gettable): self.gettable = gettable def get_inline(self): return self.inline def set_inline(self, inline): self.inline = inline def get_settable(self): return self.settable def set_settable(self, settable): self.settable = settable def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='memberdefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='memberdefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='memberdefType'): if self.initonly is not None: outfile.write(' initonly=%s' % (quote_attrib(self.initonly), )) if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.volatile is not None: outfile.write(' volatile=%s' % (quote_attrib(self.volatile), )) if self.const is not None: outfile.write(' const=%s' % (quote_attrib(self.const), )) if self.raisexx is not None: outfile.write(' raise=%s' % (quote_attrib(self.raisexx), )) if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.readable is not None: outfile.write(' readable=%s' % (quote_attrib(self.readable), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.explicit is not None: outfile.write(' explicit=%s' % (quote_attrib(self.explicit), )) if self.new is not None: outfile.write(' new=%s' % (quote_attrib(self.new), )) if self.final is not None: outfile.write(' final=%s' % (quote_attrib(self.final), )) if self.writable is not None: outfile.write(' writable=%s' % (quote_attrib(self.writable), )) if self.add is not None: outfile.write(' add=%s' % (quote_attrib(self.add), )) if self.static is not None: outfile.write(' static=%s' % (quote_attrib(self.static), )) if self.remove is not None: outfile.write(' remove=%s' % (quote_attrib(self.remove), )) if self.sealed is not None: outfile.write(' sealed=%s' % (quote_attrib(self.sealed), )) if self.mutable is not None: outfile.write(' mutable=%s' % (quote_attrib(self.mutable), )) if self.gettable is not None: outfile.write(' gettable=%s' % (quote_attrib(self.gettable), )) if self.inline is not None: outfile.write(' inline=%s' % (quote_attrib(self.inline), )) if self.settable is not None: outfile.write(' settable=%s' % (quote_attrib(self.settable), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='memberdefType'): if self.templateparamlist: self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.definition is not None: showIndent(outfile, level) outfile.write('<%sdefinition>%s\n' % (namespace_, self.format_string(quote_xml(self.definition).encode(ExternalEncoding), input_name='definition'), namespace_)) if self.argsstring is not None: showIndent(outfile, level) outfile.write('<%sargsstring>%s\n' % (namespace_, self.format_string(quote_xml(self.argsstring).encode(ExternalEncoding), input_name='argsstring'), namespace_)) if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) if self.read is not None: showIndent(outfile, level) outfile.write('<%sread>%s\n' % (namespace_, self.format_string(quote_xml(self.read).encode(ExternalEncoding), input_name='read'), namespace_)) if self.write is not None: showIndent(outfile, level) outfile.write('<%swrite>%s\n' % (namespace_, self.format_string(quote_xml(self.write).encode(ExternalEncoding), input_name='write'), namespace_)) if self.bitfield is not None: showIndent(outfile, level) outfile.write('<%sbitfield>%s\n' % (namespace_, self.format_string(quote_xml(self.bitfield).encode(ExternalEncoding), input_name='bitfield'), namespace_)) for reimplements_ in self.reimplements: reimplements_.export(outfile, level, namespace_, name_='reimplements') for reimplementedby_ in self.reimplementedby: reimplementedby_.export(outfile, level, namespace_, name_='reimplementedby') for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') for enumvalue_ in self.enumvalue: enumvalue_.export(outfile, level, namespace_, name_='enumvalue') if self.initializer: self.initializer.export(outfile, level, namespace_, name_='initializer') if self.exceptions: self.exceptions.export(outfile, level, namespace_, name_='exceptions') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') if self.inbodydescription: self.inbodydescription.export(outfile, level, namespace_, name_='inbodydescription') if self.location: self.location.export(outfile, level, namespace_, name_='location', ) for references_ in self.references: references_.export(outfile, level, namespace_, name_='references') for referencedby_ in self.referencedby: referencedby_.export(outfile, level, namespace_, name_='referencedby') def hasContent_(self): if ( self.templateparamlist is not None or self.type_ is not None or self.definition is not None or self.argsstring is not None or self.name is not None or self.read is not None or self.write is not None or self.bitfield is not None or self.reimplements is not None or self.reimplementedby is not None or self.param is not None or self.enumvalue is not None or self.initializer is not None or self.exceptions is not None or self.briefdescription is not None or self.detaileddescription is not None or self.inbodydescription is not None or self.location is not None or self.references is not None or self.referencedby is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='memberdefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.initonly is not None: showIndent(outfile, level) outfile.write('initonly = "%s",\n' % (self.initonly,)) if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.volatile is not None: showIndent(outfile, level) outfile.write('volatile = "%s",\n' % (self.volatile,)) if self.const is not None: showIndent(outfile, level) outfile.write('const = "%s",\n' % (self.const,)) if self.raisexx is not None: showIndent(outfile, level) outfile.write('raisexx = "%s",\n' % (self.raisexx,)) if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.readable is not None: showIndent(outfile, level) outfile.write('readable = "%s",\n' % (self.readable,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.explicit is not None: showIndent(outfile, level) outfile.write('explicit = "%s",\n' % (self.explicit,)) if self.new is not None: showIndent(outfile, level) outfile.write('new = "%s",\n' % (self.new,)) if self.final is not None: showIndent(outfile, level) outfile.write('final = "%s",\n' % (self.final,)) if self.writable is not None: showIndent(outfile, level) outfile.write('writable = "%s",\n' % (self.writable,)) if self.add is not None: showIndent(outfile, level) outfile.write('add = "%s",\n' % (self.add,)) if self.static is not None: showIndent(outfile, level) outfile.write('static = "%s",\n' % (self.static,)) if self.remove is not None: showIndent(outfile, level) outfile.write('remove = "%s",\n' % (self.remove,)) if self.sealed is not None: showIndent(outfile, level) outfile.write('sealed = "%s",\n' % (self.sealed,)) if self.mutable is not None: showIndent(outfile, level) outfile.write('mutable = "%s",\n' % (self.mutable,)) if self.gettable is not None: showIndent(outfile, level) outfile.write('gettable = "%s",\n' % (self.gettable,)) if self.inline is not None: showIndent(outfile, level) outfile.write('inline = "%s",\n' % (self.inline,)) if self.settable is not None: showIndent(outfile, level) outfile.write('settable = "%s",\n' % (self.settable,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') if self.type_: showIndent(outfile, level) outfile.write('type_=model_.linkedTextType(\n') self.type_.exportLiteral(outfile, level, name_='type') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('definition=%s,\n' % quote_python(self.definition).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('argsstring=%s,\n' % quote_python(self.argsstring).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('read=%s,\n' % quote_python(self.read).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('write=%s,\n' % quote_python(self.write).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('bitfield=%s,\n' % quote_python(self.bitfield).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('reimplements=[\n') level += 1 for reimplements in self.reimplements: showIndent(outfile, level) outfile.write('model_.reimplements(\n') reimplements.exportLiteral(outfile, level, name_='reimplements') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('reimplementedby=[\n') level += 1 for reimplementedby in self.reimplementedby: showIndent(outfile, level) outfile.write('model_.reimplementedby(\n') reimplementedby.exportLiteral(outfile, level, name_='reimplementedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('param=[\n') level += 1 for param in self.param: showIndent(outfile, level) outfile.write('model_.param(\n') param.exportLiteral(outfile, level, name_='param') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('enumvalue=[\n') level += 1 for enumvalue in self.enumvalue: showIndent(outfile, level) outfile.write('model_.enumvalue(\n') enumvalue.exportLiteral(outfile, level, name_='enumvalue') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.initializer: showIndent(outfile, level) outfile.write('initializer=model_.linkedTextType(\n') self.initializer.exportLiteral(outfile, level, name_='initializer') showIndent(outfile, level) outfile.write('),\n') if self.exceptions: showIndent(outfile, level) outfile.write('exceptions=model_.linkedTextType(\n') self.exceptions.exportLiteral(outfile, level, name_='exceptions') showIndent(outfile, level) outfile.write('),\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inbodydescription: showIndent(outfile, level) outfile.write('inbodydescription=model_.descriptionType(\n') self.inbodydescription.exportLiteral(outfile, level, name_='inbodydescription') showIndent(outfile, level) outfile.write('),\n') if self.location: showIndent(outfile, level) outfile.write('location=model_.locationType(\n') self.location.exportLiteral(outfile, level, name_='location') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('references=[\n') level += 1 for references in self.references: showIndent(outfile, level) outfile.write('model_.references(\n') references.exportLiteral(outfile, level, name_='references') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('referencedby=[\n') level += 1 for referencedby in self.referencedby: showIndent(outfile, level) outfile.write('model_.referencedby(\n') referencedby.exportLiteral(outfile, level, name_='referencedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('initonly'): self.initonly = attrs.get('initonly').value if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('volatile'): self.volatile = attrs.get('volatile').value if attrs.get('const'): self.const = attrs.get('const').value if attrs.get('raise'): self.raisexx = attrs.get('raise').value if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('readable'): self.readable = attrs.get('readable').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('explicit'): self.explicit = attrs.get('explicit').value if attrs.get('new'): self.new = attrs.get('new').value if attrs.get('final'): self.final = attrs.get('final').value if attrs.get('writable'): self.writable = attrs.get('writable').value if attrs.get('add'): self.add = attrs.get('add').value if attrs.get('static'): self.static = attrs.get('static').value if attrs.get('remove'): self.remove = attrs.get('remove').value if attrs.get('sealed'): self.sealed = attrs.get('sealed').value if attrs.get('mutable'): self.mutable = attrs.get('mutable').value if attrs.get('gettable'): self.gettable = attrs.get('gettable').value if attrs.get('inline'): self.inline = attrs.get('inline').value if attrs.get('settable'): self.settable = attrs.get('settable').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'definition': definition_ = '' for text__content_ in child_.childNodes: definition_ += text__content_.nodeValue self.definition = definition_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'argsstring': argsstring_ = '' for text__content_ in child_.childNodes: argsstring_ += text__content_.nodeValue self.argsstring = argsstring_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'read': read_ = '' for text__content_ in child_.childNodes: read_ += text__content_.nodeValue self.read = read_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'write': write_ = '' for text__content_ in child_.childNodes: write_ += text__content_.nodeValue self.write = write_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'bitfield': bitfield_ = '' for text__content_ in child_.childNodes: bitfield_ += text__content_.nodeValue self.bitfield = bitfield_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'reimplements': obj_ = reimplementType.factory() obj_.build(child_) self.reimplements.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'reimplementedby': obj_ = reimplementType.factory() obj_.build(child_) self.reimplementedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'enumvalue': obj_ = enumvalueType.factory() obj_.build(child_) self.enumvalue.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'initializer': obj_ = linkedTextType.factory() obj_.build(child_) self.set_initializer(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'exceptions': obj_ = linkedTextType.factory() obj_.build(child_) self.set_exceptions(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'inbodydescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_inbodydescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'references': obj_ = referenceType.factory() obj_.build(child_) self.references.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'referencedby': obj_ = referenceType.factory() obj_.build(child_) self.referencedby.append(obj_) # end class memberdefType class definition(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if definition.subclass: return definition.subclass(*args_, **kwargs_) else: return definition(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='definition', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='definition') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='definition'): pass def exportChildren(self, outfile, level, namespace_='', name_='definition'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='definition'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class definition class argsstring(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if argsstring.subclass: return argsstring.subclass(*args_, **kwargs_) else: return argsstring(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='argsstring', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='argsstring') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='argsstring'): pass def exportChildren(self, outfile, level, namespace_='', name_='argsstring'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='argsstring'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class argsstring class read(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if read.subclass: return read.subclass(*args_, **kwargs_) else: return read(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='read', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='read') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='read'): pass def exportChildren(self, outfile, level, namespace_='', name_='read'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='read'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class read class write(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if write.subclass: return write.subclass(*args_, **kwargs_) else: return write(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='write', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='write') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='write'): pass def exportChildren(self, outfile, level, namespace_='', name_='write'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='write'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class write class bitfield(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if bitfield.subclass: return bitfield.subclass(*args_, **kwargs_) else: return bitfield(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='bitfield', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='bitfield') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='bitfield'): pass def exportChildren(self, outfile, level, namespace_='', name_='bitfield'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='bitfield'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class bitfield class descriptionType(GeneratedsSuper): subclass = None superclass = None def __init__(self, title=None, para=None, sect1=None, internal=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if descriptionType.subclass: return descriptionType.subclass(*args_, **kwargs_) else: return descriptionType(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def export(self, outfile, level, namespace_='', name_='descriptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='descriptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='descriptionType'): pass def exportChildren(self, outfile, level, namespace_='', name_='descriptionType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect1 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='descriptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class descriptionType class enumvalueType(GeneratedsSuper): subclass = None superclass = None def __init__(self, prot=None, id=None, name=None, initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): self.prot = prot self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if enumvalueType.subclass: return enumvalueType.subclass(*args_, **kwargs_) else: return enumvalueType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='enumvalueType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='enumvalueType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='enumvalueType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='enumvalueType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.name is not None or self.initializer is not None or self.briefdescription is not None or self.detaileddescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='enumvalueType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'name', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'initializer': childobj_ = linkedTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'initializer', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'briefdescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'detaileddescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class enumvalueType class templateparamlistType(GeneratedsSuper): subclass = None superclass = None def __init__(self, param=None): if param is None: self.param = [] else: self.param = param def factory(*args_, **kwargs_): if templateparamlistType.subclass: return templateparamlistType.subclass(*args_, **kwargs_) else: return templateparamlistType(*args_, **kwargs_) factory = staticmethod(factory) def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value def export(self, outfile, level, namespace_='', name_='templateparamlistType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='templateparamlistType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='templateparamlistType'): pass def exportChildren(self, outfile, level, namespace_='', name_='templateparamlistType'): for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') def hasContent_(self): if ( self.param is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='templateparamlistType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('param=[\n') level += 1 for param in self.param: showIndent(outfile, level) outfile.write('model_.param(\n') param.exportLiteral(outfile, level, name_='param') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) # end class templateparamlistType class paramType(GeneratedsSuper): subclass = None superclass = None def __init__(self, type_=None, declname=None, defname=None, array=None, defval=None, briefdescription=None): self.type_ = type_ self.declname = declname self.defname = defname self.array = array self.defval = defval self.briefdescription = briefdescription def factory(*args_, **kwargs_): if paramType.subclass: return paramType.subclass(*args_, **kwargs_) else: return paramType(*args_, **kwargs_) factory = staticmethod(factory) def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_declname(self): return self.declname def set_declname(self, declname): self.declname = declname def get_defname(self): return self.defname def set_defname(self, defname): self.defname = defname def get_array(self): return self.array def set_array(self, array): self.array = array def get_defval(self): return self.defval def set_defval(self, defval): self.defval = defval def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def export(self, outfile, level, namespace_='', name_='paramType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='paramType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='paramType'): pass def exportChildren(self, outfile, level, namespace_='', name_='paramType'): if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.declname is not None: showIndent(outfile, level) outfile.write('<%sdeclname>%s\n' % (namespace_, self.format_string(quote_xml(self.declname).encode(ExternalEncoding), input_name='declname'), namespace_)) if self.defname is not None: showIndent(outfile, level) outfile.write('<%sdefname>%s\n' % (namespace_, self.format_string(quote_xml(self.defname).encode(ExternalEncoding), input_name='defname'), namespace_)) if self.array is not None: showIndent(outfile, level) outfile.write('<%sarray>%s\n' % (namespace_, self.format_string(quote_xml(self.array).encode(ExternalEncoding), input_name='array'), namespace_)) if self.defval: self.defval.export(outfile, level, namespace_, name_='defval') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') def hasContent_(self): if ( self.type_ is not None or self.declname is not None or self.defname is not None or self.array is not None or self.defval is not None or self.briefdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='paramType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): if self.type_: showIndent(outfile, level) outfile.write('type_=model_.linkedTextType(\n') self.type_.exportLiteral(outfile, level, name_='type') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('declname=%s,\n' % quote_python(self.declname).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('defname=%s,\n' % quote_python(self.defname).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('array=%s,\n' % quote_python(self.array).encode(ExternalEncoding)) if self.defval: showIndent(outfile, level) outfile.write('defval=model_.linkedTextType(\n') self.defval.exportLiteral(outfile, level, name_='defval') showIndent(outfile, level) outfile.write('),\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'declname': declname_ = '' for text__content_ in child_.childNodes: declname_ += text__content_.nodeValue self.declname = declname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'defname': defname_ = '' for text__content_ in child_.childNodes: defname_ += text__content_.nodeValue self.defname = defname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'array': array_ = '' for text__content_ in child_.childNodes: array_ += text__content_.nodeValue self.array = array_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'defval': obj_ = linkedTextType.factory() obj_.build(child_) self.set_defval(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) # end class paramType class declname(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if declname.subclass: return declname.subclass(*args_, **kwargs_) else: return declname(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='declname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='declname') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='declname'): pass def exportChildren(self, outfile, level, namespace_='', name_='declname'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='declname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class declname class defname(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if defname.subclass: return defname.subclass(*args_, **kwargs_) else: return defname(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='defname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='defname') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='defname'): pass def exportChildren(self, outfile, level, namespace_='', name_='defname'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='defname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class defname class array(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if array.subclass: return array.subclass(*args_, **kwargs_) else: return array(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='array', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='array') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='array'): pass def exportChildren(self, outfile, level, namespace_='', name_='array'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='array'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class array class linkedTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, ref=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if linkedTextType.subclass: return linkedTextType.subclass(*args_, **kwargs_) else: return linkedTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def export(self, outfile, level, namespace_='', name_='linkedTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='linkedTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='linkedTextType'): pass def exportChildren(self, outfile, level, namespace_='', name_='linkedTextType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='linkedTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class linkedTextType class graphType(GeneratedsSuper): subclass = None superclass = None def __init__(self, node=None): if node is None: self.node = [] else: self.node = node def factory(*args_, **kwargs_): if graphType.subclass: return graphType.subclass(*args_, **kwargs_) else: return graphType(*args_, **kwargs_) factory = staticmethod(factory) def get_node(self): return self.node def set_node(self, node): self.node = node def add_node(self, value): self.node.append(value) def insert_node(self, index, value): self.node[index] = value def export(self, outfile, level, namespace_='', name_='graphType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='graphType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='graphType'): pass def exportChildren(self, outfile, level, namespace_='', name_='graphType'): for node_ in self.node: node_.export(outfile, level, namespace_, name_='node') def hasContent_(self): if ( self.node is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='graphType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('node=[\n') level += 1 for node in self.node: showIndent(outfile, level) outfile.write('model_.node(\n') node.exportLiteral(outfile, level, name_='node') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'node': obj_ = nodeType.factory() obj_.build(child_) self.node.append(obj_) # end class graphType class nodeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, label=None, link=None, childnode=None): self.id = id self.label = label self.link = link if childnode is None: self.childnode = [] else: self.childnode = childnode def factory(*args_, **kwargs_): if nodeType.subclass: return nodeType.subclass(*args_, **kwargs_) else: return nodeType(*args_, **kwargs_) factory = staticmethod(factory) def get_label(self): return self.label def set_label(self, label): self.label = label def get_link(self): return self.link def set_link(self, link): self.link = link def get_childnode(self): return self.childnode def set_childnode(self, childnode): self.childnode = childnode def add_childnode(self, value): self.childnode.append(value) def insert_childnode(self, index, value): self.childnode[index] = value def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='nodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='nodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='nodeType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='nodeType'): if self.label is not None: showIndent(outfile, level) outfile.write('<%slabel>%s\n' % (namespace_, self.format_string(quote_xml(self.label).encode(ExternalEncoding), input_name='label'), namespace_)) if self.link: self.link.export(outfile, level, namespace_, name_='link') for childnode_ in self.childnode: childnode_.export(outfile, level, namespace_, name_='childnode') def hasContent_(self): if ( self.label is not None or self.link is not None or self.childnode is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='nodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('label=%s,\n' % quote_python(self.label).encode(ExternalEncoding)) if self.link: showIndent(outfile, level) outfile.write('link=model_.linkType(\n') self.link.exportLiteral(outfile, level, name_='link') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('childnode=[\n') level += 1 for childnode in self.childnode: showIndent(outfile, level) outfile.write('model_.childnode(\n') childnode.exportLiteral(outfile, level, name_='childnode') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'label': label_ = '' for text__content_ in child_.childNodes: label_ += text__content_.nodeValue self.label = label_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'link': obj_ = linkType.factory() obj_.build(child_) self.set_link(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'childnode': obj_ = childnodeType.factory() obj_.build(child_) self.childnode.append(obj_) # end class nodeType class label(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if label.subclass: return label.subclass(*args_, **kwargs_) else: return label(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='label', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='label') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='label'): pass def exportChildren(self, outfile, level, namespace_='', name_='label'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='label'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class label class childnodeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, relation=None, refid=None, edgelabel=None): self.relation = relation self.refid = refid if edgelabel is None: self.edgelabel = [] else: self.edgelabel = edgelabel def factory(*args_, **kwargs_): if childnodeType.subclass: return childnodeType.subclass(*args_, **kwargs_) else: return childnodeType(*args_, **kwargs_) factory = staticmethod(factory) def get_edgelabel(self): return self.edgelabel def set_edgelabel(self, edgelabel): self.edgelabel = edgelabel def add_edgelabel(self, value): self.edgelabel.append(value) def insert_edgelabel(self, index, value): self.edgelabel[index] = value def get_relation(self): return self.relation def set_relation(self, relation): self.relation = relation def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='childnodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='childnodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='childnodeType'): if self.relation is not None: outfile.write(' relation=%s' % (quote_attrib(self.relation), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='childnodeType'): for edgelabel_ in self.edgelabel: showIndent(outfile, level) outfile.write('<%sedgelabel>%s\n' % (namespace_, self.format_string(quote_xml(edgelabel_).encode(ExternalEncoding), input_name='edgelabel'), namespace_)) def hasContent_(self): if ( self.edgelabel is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='childnodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.relation is not None: showIndent(outfile, level) outfile.write('relation = "%s",\n' % (self.relation,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('edgelabel=[\n') level += 1 for edgelabel in self.edgelabel: showIndent(outfile, level) outfile.write('%s,\n' % quote_python(edgelabel).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('relation'): self.relation = attrs.get('relation').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'edgelabel': edgelabel_ = '' for text__content_ in child_.childNodes: edgelabel_ += text__content_.nodeValue self.edgelabel.append(edgelabel_) # end class childnodeType class edgelabel(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if edgelabel.subclass: return edgelabel.subclass(*args_, **kwargs_) else: return edgelabel(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='edgelabel', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='edgelabel') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='edgelabel'): pass def exportChildren(self, outfile, level, namespace_='', name_='edgelabel'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='edgelabel'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class edgelabel class linkType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, external=None, valueOf_=''): self.refid = refid self.external = external self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if linkType.subclass: return linkType.subclass(*args_, **kwargs_) else: return linkType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='linkType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='linkType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='linkType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='linkType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='linkType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class linkType class listingType(GeneratedsSuper): subclass = None superclass = None def __init__(self, codeline=None): if codeline is None: self.codeline = [] else: self.codeline = codeline def factory(*args_, **kwargs_): if listingType.subclass: return listingType.subclass(*args_, **kwargs_) else: return listingType(*args_, **kwargs_) factory = staticmethod(factory) def get_codeline(self): return self.codeline def set_codeline(self, codeline): self.codeline = codeline def add_codeline(self, value): self.codeline.append(value) def insert_codeline(self, index, value): self.codeline[index] = value def export(self, outfile, level, namespace_='', name_='listingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='listingType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='listingType'): pass def exportChildren(self, outfile, level, namespace_='', name_='listingType'): for codeline_ in self.codeline: codeline_.export(outfile, level, namespace_, name_='codeline') def hasContent_(self): if ( self.codeline is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='listingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('codeline=[\n') level += 1 for codeline in self.codeline: showIndent(outfile, level) outfile.write('model_.codeline(\n') codeline.exportLiteral(outfile, level, name_='codeline') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'codeline': obj_ = codelineType.factory() obj_.build(child_) self.codeline.append(obj_) # end class listingType class codelineType(GeneratedsSuper): subclass = None superclass = None def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): self.external = external self.lineno = lineno self.refkind = refkind self.refid = refid if highlight is None: self.highlight = [] else: self.highlight = highlight def factory(*args_, **kwargs_): if codelineType.subclass: return codelineType.subclass(*args_, **kwargs_) else: return codelineType(*args_, **kwargs_) factory = staticmethod(factory) def get_highlight(self): return self.highlight def set_highlight(self, highlight): self.highlight = highlight def add_highlight(self, value): self.highlight.append(value) def insert_highlight(self, index, value): self.highlight[index] = value def get_external(self): return self.external def set_external(self, external): self.external = external def get_lineno(self): return self.lineno def set_lineno(self, lineno): self.lineno = lineno def get_refkind(self): return self.refkind def set_refkind(self, refkind): self.refkind = refkind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='codelineType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='codelineType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='codelineType'): if self.external is not None: outfile.write(' external=%s' % (quote_attrib(self.external), )) if self.lineno is not None: outfile.write(' lineno="%s"' % self.format_integer(self.lineno, input_name='lineno')) if self.refkind is not None: outfile.write(' refkind=%s' % (quote_attrib(self.refkind), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='codelineType'): for highlight_ in self.highlight: highlight_.export(outfile, level, namespace_, name_='highlight') def hasContent_(self): if ( self.highlight is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='codelineType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) outfile.write('external = "%s",\n' % (self.external,)) if self.lineno is not None: showIndent(outfile, level) outfile.write('lineno = %s,\n' % (self.lineno,)) if self.refkind is not None: showIndent(outfile, level) outfile.write('refkind = "%s",\n' % (self.refkind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('highlight=[\n') level += 1 for highlight in self.highlight: showIndent(outfile, level) outfile.write('model_.highlight(\n') highlight.exportLiteral(outfile, level, name_='highlight') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('external'): self.external = attrs.get('external').value if attrs.get('lineno'): try: self.lineno = int(attrs.get('lineno').value) except ValueError, exp: raise ValueError('Bad integer attribute (lineno): %s' % exp) if attrs.get('refkind'): self.refkind = attrs.get('refkind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'highlight': obj_ = highlightType.factory() obj_.build(child_) self.highlight.append(obj_) # end class codelineType class highlightType(GeneratedsSuper): subclass = None superclass = None def __init__(self, classxx=None, sp=None, ref=None, mixedclass_=None, content_=None): self.classxx = classxx if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if highlightType.subclass: return highlightType.subclass(*args_, **kwargs_) else: return highlightType(*args_, **kwargs_) factory = staticmethod(factory) def get_sp(self): return self.sp def set_sp(self, sp): self.sp = sp def add_sp(self, value): self.sp.append(value) def insert_sp(self, index, value): self.sp[index] = value def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def get_class(self): return self.classxx def set_class(self, classxx): self.classxx = classxx def export(self, outfile, level, namespace_='', name_='highlightType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='highlightType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='highlightType'): if self.classxx is not None: outfile.write(' class=%s' % (quote_attrib(self.classxx), )) def exportChildren(self, outfile, level, namespace_='', name_='highlightType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.sp is not None or self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='highlightType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.classxx is not None: showIndent(outfile, level) outfile.write('classxx = "%s",\n' % (self.classxx,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('class'): self.classxx = attrs.get('class').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sp': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'sp', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class highlightType class sp(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if sp.subclass: return sp.subclass(*args_, **kwargs_) else: return sp(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='sp', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='sp') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='sp'): pass def exportChildren(self, outfile, level, namespace_='', name_='sp'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='sp'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class sp class referenceType(GeneratedsSuper): subclass = None superclass = None def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): self.endline = endline self.startline = startline self.refid = refid self.compoundref = compoundref if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if referenceType.subclass: return referenceType.subclass(*args_, **kwargs_) else: return referenceType(*args_, **kwargs_) factory = staticmethod(factory) def get_endline(self): return self.endline def set_endline(self, endline): self.endline = endline def get_startline(self): return self.startline def set_startline(self, startline): self.startline = startline def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_compoundref(self): return self.compoundref def set_compoundref(self, compoundref): self.compoundref = compoundref def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='referenceType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='referenceType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='referenceType'): if self.endline is not None: outfile.write(' endline="%s"' % self.format_integer(self.endline, input_name='endline')) if self.startline is not None: outfile.write(' startline="%s"' % self.format_integer(self.startline, input_name='startline')) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.compoundref is not None: outfile.write(' compoundref=%s' % (self.format_string(quote_attrib(self.compoundref).encode(ExternalEncoding), input_name='compoundref'), )) def exportChildren(self, outfile, level, namespace_='', name_='referenceType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='referenceType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.endline is not None: showIndent(outfile, level) outfile.write('endline = %s,\n' % (self.endline,)) if self.startline is not None: showIndent(outfile, level) outfile.write('startline = %s,\n' % (self.startline,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.compoundref is not None: showIndent(outfile, level) outfile.write('compoundref = %s,\n' % (self.compoundref,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('endline'): try: self.endline = int(attrs.get('endline').value) except ValueError, exp: raise ValueError('Bad integer attribute (endline): %s' % exp) if attrs.get('startline'): try: self.startline = int(attrs.get('startline').value) except ValueError, exp: raise ValueError('Bad integer attribute (startline): %s' % exp) if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('compoundref'): self.compoundref = attrs.get('compoundref').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class referenceType class locationType(GeneratedsSuper): subclass = None superclass = None def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): self.bodystart = bodystart self.line = line self.bodyend = bodyend self.bodyfile = bodyfile self.file = file self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if locationType.subclass: return locationType.subclass(*args_, **kwargs_) else: return locationType(*args_, **kwargs_) factory = staticmethod(factory) def get_bodystart(self): return self.bodystart def set_bodystart(self, bodystart): self.bodystart = bodystart def get_line(self): return self.line def set_line(self, line): self.line = line def get_bodyend(self): return self.bodyend def set_bodyend(self, bodyend): self.bodyend = bodyend def get_bodyfile(self): return self.bodyfile def set_bodyfile(self, bodyfile): self.bodyfile = bodyfile def get_file(self): return self.file def set_file(self, file): self.file = file def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='locationType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='locationType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='locationType'): if self.bodystart is not None: outfile.write(' bodystart="%s"' % self.format_integer(self.bodystart, input_name='bodystart')) if self.line is not None: outfile.write(' line="%s"' % self.format_integer(self.line, input_name='line')) if self.bodyend is not None: outfile.write(' bodyend="%s"' % self.format_integer(self.bodyend, input_name='bodyend')) if self.bodyfile is not None: outfile.write(' bodyfile=%s' % (self.format_string(quote_attrib(self.bodyfile).encode(ExternalEncoding), input_name='bodyfile'), )) if self.file is not None: outfile.write(' file=%s' % (self.format_string(quote_attrib(self.file).encode(ExternalEncoding), input_name='file'), )) def exportChildren(self, outfile, level, namespace_='', name_='locationType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='locationType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.bodystart is not None: showIndent(outfile, level) outfile.write('bodystart = %s,\n' % (self.bodystart,)) if self.line is not None: showIndent(outfile, level) outfile.write('line = %s,\n' % (self.line,)) if self.bodyend is not None: showIndent(outfile, level) outfile.write('bodyend = %s,\n' % (self.bodyend,)) if self.bodyfile is not None: showIndent(outfile, level) outfile.write('bodyfile = %s,\n' % (self.bodyfile,)) if self.file is not None: showIndent(outfile, level) outfile.write('file = %s,\n' % (self.file,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('bodystart'): try: self.bodystart = int(attrs.get('bodystart').value) except ValueError, exp: raise ValueError('Bad integer attribute (bodystart): %s' % exp) if attrs.get('line'): try: self.line = int(attrs.get('line').value) except ValueError, exp: raise ValueError('Bad integer attribute (line): %s' % exp) if attrs.get('bodyend'): try: self.bodyend = int(attrs.get('bodyend').value) except ValueError, exp: raise ValueError('Bad integer attribute (bodyend): %s' % exp) if attrs.get('bodyfile'): self.bodyfile = attrs.get('bodyfile').value if attrs.get('file'): self.file = attrs.get('file').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class locationType class docSect1Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect2=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect1Type.subclass: return docSect1Type.subclass(*args_, **kwargs_) else: return docSect1Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect1Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect2 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect1Type class docSect2Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect3=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect2Type.subclass: return docSect2Type.subclass(*args_, **kwargs_) else: return docSect2Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect2Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect3 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect2Type class docSect3Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect4=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect3Type.subclass: return docSect3Type.subclass(*args_, **kwargs_) else: return docSect3Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect4(self): return self.sect4 def set_sect4(self, sect4): self.sect4 = sect4 def add_sect4(self, value): self.sect4.append(value) def insert_sect4(self, index, value): self.sect4[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect3Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect4 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect4': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect4', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect3Type class docSect4Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect4Type.subclass: return docSect4Type.subclass(*args_, **kwargs_) else: return docSect4Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect4Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect4Type class docInternalType(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalType.subclass: return docInternalType.subclass(*args_, **kwargs_) else: return docInternalType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def export(self, outfile, level, namespace_='', name_='docInternalType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect1 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalType class docInternalS1Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS1Type.subclass: return docInternalS1Type.subclass(*args_, **kwargs_) else: return docInternalS1Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS1Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect2 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS1Type class docInternalS2Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS2Type.subclass: return docInternalS2Type.subclass(*args_, **kwargs_) else: return docInternalS2Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS2Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect3 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS2Type class docInternalS3Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS3Type.subclass: return docInternalS3Type.subclass(*args_, **kwargs_) else: return docInternalS3Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS3Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect3 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS3Type class docInternalS4Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS4Type.subclass: return docInternalS4Type.subclass(*args_, **kwargs_) else: return docInternalS4Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS4Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS4Type class docTitleType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docTitleType.subclass: return docTitleType.subclass(*args_, **kwargs_) else: return docTitleType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docTitleType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTitleType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docTitleType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docTitleType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTitleType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docTitleType class docParaType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docParaType.subclass: return docParaType.subclass(*args_, **kwargs_) else: return docParaType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docParaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docParaType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParaType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docParaType class docMarkupType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docMarkupType.subclass: return docMarkupType.subclass(*args_, **kwargs_) else: return docMarkupType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docMarkupType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docMarkupType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docMarkupType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docMarkupType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docMarkupType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docMarkupType class docURLLink(GeneratedsSuper): subclass = None superclass = None def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): self.url = url if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docURLLink.subclass: return docURLLink.subclass(*args_, **kwargs_) else: return docURLLink(*args_, **kwargs_) factory = staticmethod(factory) def get_url(self): return self.url def set_url(self, url): self.url = url def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docURLLink', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docURLLink') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docURLLink'): if self.url is not None: outfile.write(' url=%s' % (self.format_string(quote_attrib(self.url).encode(ExternalEncoding), input_name='url'), )) def exportChildren(self, outfile, level, namespace_='', name_='docURLLink'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docURLLink'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.url is not None: showIndent(outfile, level) outfile.write('url = %s,\n' % (self.url,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('url'): self.url = attrs.get('url').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docURLLink class docAnchorType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docAnchorType.subclass: return docAnchorType.subclass(*args_, **kwargs_) else: return docAnchorType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docAnchorType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docAnchorType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docAnchorType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docAnchorType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docAnchorType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docAnchorType class docFormulaType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docFormulaType.subclass: return docFormulaType.subclass(*args_, **kwargs_) else: return docFormulaType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docFormulaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docFormulaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docFormulaType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docFormulaType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docFormulaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docFormulaType class docIndexEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, primaryie=None, secondaryie=None): self.primaryie = primaryie self.secondaryie = secondaryie def factory(*args_, **kwargs_): if docIndexEntryType.subclass: return docIndexEntryType.subclass(*args_, **kwargs_) else: return docIndexEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_primaryie(self): return self.primaryie def set_primaryie(self, primaryie): self.primaryie = primaryie def get_secondaryie(self): return self.secondaryie def set_secondaryie(self, secondaryie): self.secondaryie = secondaryie def export(self, outfile, level, namespace_='', name_='docIndexEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docIndexEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docIndexEntryType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docIndexEntryType'): if self.primaryie is not None: showIndent(outfile, level) outfile.write('<%sprimaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.primaryie).encode(ExternalEncoding), input_name='primaryie'), namespace_)) if self.secondaryie is not None: showIndent(outfile, level) outfile.write('<%ssecondaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.secondaryie).encode(ExternalEncoding), input_name='secondaryie'), namespace_)) def hasContent_(self): if ( self.primaryie is not None or self.secondaryie is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docIndexEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('primaryie=%s,\n' % quote_python(self.primaryie).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('secondaryie=%s,\n' % quote_python(self.secondaryie).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'primaryie': primaryie_ = '' for text__content_ in child_.childNodes: primaryie_ += text__content_.nodeValue self.primaryie = primaryie_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'secondaryie': secondaryie_ = '' for text__content_ in child_.childNodes: secondaryie_ += text__content_.nodeValue self.secondaryie = secondaryie_ # end class docIndexEntryType class docListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, listitem=None): if listitem is None: self.listitem = [] else: self.listitem = listitem def factory(*args_, **kwargs_): if docListType.subclass: return docListType.subclass(*args_, **kwargs_) else: return docListType(*args_, **kwargs_) factory = staticmethod(factory) def get_listitem(self): return self.listitem def set_listitem(self, listitem): self.listitem = listitem def add_listitem(self, value): self.listitem.append(value) def insert_listitem(self, index, value): self.listitem[index] = value def export(self, outfile, level, namespace_='', name_='docListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docListType'): for listitem_ in self.listitem: listitem_.export(outfile, level, namespace_, name_='listitem') def hasContent_(self): if ( self.listitem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('listitem=[\n') level += 1 for listitem in self.listitem: showIndent(outfile, level) outfile.write('model_.listitem(\n') listitem.exportLiteral(outfile, level, name_='listitem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'listitem': obj_ = docListItemType.factory() obj_.build(child_) self.listitem.append(obj_) # end class docListType class docListItemType(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None): if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docListItemType.subclass: return docListItemType.subclass(*args_, **kwargs_) else: return docListItemType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def export(self, outfile, level, namespace_='', name_='docListItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docListItemType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docListItemType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docListItemType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docListItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docListItemType class docSimpleSectType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, title=None, para=None): self.kind = kind self.title = title if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docSimpleSectType.subclass: return docSimpleSectType.subclass(*args_, **kwargs_) else: return docSimpleSectType(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='docSimpleSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSimpleSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.title: self.title.export(outfile, level, namespace_, name_='title') for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.title is not None or self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSimpleSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): if self.title: showIndent(outfile, level) outfile.write('title=model_.docTitleType(\n') self.title.exportLiteral(outfile, level, name_='title') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docSimpleSectType class docVarListEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, term=None): self.term = term def factory(*args_, **kwargs_): if docVarListEntryType.subclass: return docVarListEntryType.subclass(*args_, **kwargs_) else: return docVarListEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_term(self): return self.term def set_term(self, term): self.term = term def export(self, outfile, level, namespace_='', name_='docVarListEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docVarListEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docVarListEntryType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docVarListEntryType'): if self.term: self.term.export(outfile, level, namespace_, name_='term', ) def hasContent_(self): if ( self.term is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docVarListEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): if self.term: showIndent(outfile, level) outfile.write('term=model_.docTitleType(\n') self.term.exportLiteral(outfile, level, name_='term') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'term': obj_ = docTitleType.factory() obj_.build(child_) self.set_term(obj_) # end class docVarListEntryType class docVariableListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docVariableListType.subclass: return docVariableListType.subclass(*args_, **kwargs_) else: return docVariableListType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docVariableListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docVariableListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docVariableListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docVariableListType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docVariableListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docVariableListType class docRefTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref self.external = external if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docRefTextType.subclass: return docRefTextType.subclass(*args_, **kwargs_) else: return docRefTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_kindref(self): return self.kindref def set_kindref(self, kindref): self.kindref = kindref def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docRefTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docRefTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docRefTextType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='docRefTextType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docRefTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.kindref is not None: showIndent(outfile, level) outfile.write('kindref = "%s",\n' % (self.kindref,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('kindref'): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docRefTextType class docTableType(GeneratedsSuper): subclass = None superclass = None def __init__(self, rows=None, cols=None, row=None, caption=None): self.rows = rows self.cols = cols if row is None: self.row = [] else: self.row = row self.caption = caption def factory(*args_, **kwargs_): if docTableType.subclass: return docTableType.subclass(*args_, **kwargs_) else: return docTableType(*args_, **kwargs_) factory = staticmethod(factory) def get_row(self): return self.row def set_row(self, row): self.row = row def add_row(self, value): self.row.append(value) def insert_row(self, index, value): self.row[index] = value def get_caption(self): return self.caption def set_caption(self, caption): self.caption = caption def get_rows(self): return self.rows def set_rows(self, rows): self.rows = rows def get_cols(self): return self.cols def set_cols(self, cols): self.cols = cols def export(self, outfile, level, namespace_='', name_='docTableType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTableType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docTableType'): if self.rows is not None: outfile.write(' rows="%s"' % self.format_integer(self.rows, input_name='rows')) if self.cols is not None: outfile.write(' cols="%s"' % self.format_integer(self.cols, input_name='cols')) def exportChildren(self, outfile, level, namespace_='', name_='docTableType'): for row_ in self.row: row_.export(outfile, level, namespace_, name_='row') if self.caption: self.caption.export(outfile, level, namespace_, name_='caption') def hasContent_(self): if ( self.row is not None or self.caption is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTableType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.rows is not None: showIndent(outfile, level) outfile.write('rows = %s,\n' % (self.rows,)) if self.cols is not None: showIndent(outfile, level) outfile.write('cols = %s,\n' % (self.cols,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('row=[\n') level += 1 for row in self.row: showIndent(outfile, level) outfile.write('model_.row(\n') row.exportLiteral(outfile, level, name_='row') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.caption: showIndent(outfile, level) outfile.write('caption=model_.docCaptionType(\n') self.caption.exportLiteral(outfile, level, name_='caption') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('rows'): try: self.rows = int(attrs.get('rows').value) except ValueError, exp: raise ValueError('Bad integer attribute (rows): %s' % exp) if attrs.get('cols'): try: self.cols = int(attrs.get('cols').value) except ValueError, exp: raise ValueError('Bad integer attribute (cols): %s' % exp) def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'row': obj_ = docRowType.factory() obj_.build(child_) self.row.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'caption': obj_ = docCaptionType.factory() obj_.build(child_) self.set_caption(obj_) # end class docTableType class docRowType(GeneratedsSuper): subclass = None superclass = None def __init__(self, entry=None): if entry is None: self.entry = [] else: self.entry = entry def factory(*args_, **kwargs_): if docRowType.subclass: return docRowType.subclass(*args_, **kwargs_) else: return docRowType(*args_, **kwargs_) factory = staticmethod(factory) def get_entry(self): return self.entry def set_entry(self, entry): self.entry = entry def add_entry(self, value): self.entry.append(value) def insert_entry(self, index, value): self.entry[index] = value def export(self, outfile, level, namespace_='', name_='docRowType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docRowType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docRowType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docRowType'): for entry_ in self.entry: entry_.export(outfile, level, namespace_, name_='entry') def hasContent_(self): if ( self.entry is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docRowType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('entry=[\n') level += 1 for entry in self.entry: showIndent(outfile, level) outfile.write('model_.entry(\n') entry.exportLiteral(outfile, level, name_='entry') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'entry': obj_ = docEntryType.factory() obj_.build(child_) self.entry.append(obj_) # end class docRowType class docEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, thead=None, para=None): self.thead = thead if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docEntryType.subclass: return docEntryType.subclass(*args_, **kwargs_) else: return docEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_thead(self): return self.thead def set_thead(self, thead): self.thead = thead def export(self, outfile, level, namespace_='', name_='docEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docEntryType'): if self.thead is not None: outfile.write(' thead=%s' % (quote_attrib(self.thead), )) def exportChildren(self, outfile, level, namespace_='', name_='docEntryType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.thead is not None: showIndent(outfile, level) outfile.write('thead = "%s",\n' % (self.thead,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('thead'): self.thead = attrs.get('thead').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docEntryType class docCaptionType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docCaptionType.subclass: return docCaptionType.subclass(*args_, **kwargs_) else: return docCaptionType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docCaptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCaptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docCaptionType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docCaptionType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCaptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docCaptionType class docHeadingType(GeneratedsSuper): subclass = None superclass = None def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): self.level = level if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docHeadingType.subclass: return docHeadingType.subclass(*args_, **kwargs_) else: return docHeadingType(*args_, **kwargs_) factory = staticmethod(factory) def get_level(self): return self.level def set_level(self, level): self.level = level def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docHeadingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docHeadingType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docHeadingType'): if self.level is not None: outfile.write(' level="%s"' % self.format_integer(self.level, input_name='level')) def exportChildren(self, outfile, level, namespace_='', name_='docHeadingType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docHeadingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.level is not None: showIndent(outfile, level) outfile.write('level = %s,\n' % (self.level,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('level'): try: self.level = int(attrs.get('level').value) except ValueError, exp: raise ValueError('Bad integer attribute (level): %s' % exp) def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docHeadingType class docImageType(GeneratedsSuper): subclass = None superclass = None def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): self.width = width self.type_ = type_ self.name = name self.height = height if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docImageType.subclass: return docImageType.subclass(*args_, **kwargs_) else: return docImageType(*args_, **kwargs_) factory = staticmethod(factory) def get_width(self): return self.width def set_width(self, width): self.width = width def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_name(self): return self.name def set_name(self, name): self.name = name def get_height(self): return self.height def set_height(self, height): self.height = height def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docImageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docImageType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docImageType'): if self.width is not None: outfile.write(' width=%s' % (self.format_string(quote_attrib(self.width).encode(ExternalEncoding), input_name='width'), )) if self.type_ is not None: outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.name is not None: outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) if self.height is not None: outfile.write(' height=%s' % (self.format_string(quote_attrib(self.height).encode(ExternalEncoding), input_name='height'), )) def exportChildren(self, outfile, level, namespace_='', name_='docImageType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docImageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.width is not None: showIndent(outfile, level) outfile.write('width = %s,\n' % (self.width,)) if self.type_ is not None: showIndent(outfile, level) outfile.write('type_ = "%s",\n' % (self.type_,)) if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) if self.height is not None: showIndent(outfile, level) outfile.write('height = %s,\n' % (self.height,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('width'): self.width = attrs.get('width').value if attrs.get('type'): self.type_ = attrs.get('type').value if attrs.get('name'): self.name = attrs.get('name').value if attrs.get('height'): self.height = attrs.get('height').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docImageType class docDotFileType(GeneratedsSuper): subclass = None superclass = None def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): self.name = name if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docDotFileType.subclass: return docDotFileType.subclass(*args_, **kwargs_) else: return docDotFileType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docDotFileType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docDotFileType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docDotFileType'): if self.name is not None: outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) def exportChildren(self, outfile, level, namespace_='', name_='docDotFileType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docDotFileType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('name'): self.name = attrs.get('name').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docDotFileType class docTocItemType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docTocItemType.subclass: return docTocItemType.subclass(*args_, **kwargs_) else: return docTocItemType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docTocItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTocItemType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docTocItemType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docTocItemType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTocItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docTocItemType class docTocListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, tocitem=None): if tocitem is None: self.tocitem = [] else: self.tocitem = tocitem def factory(*args_, **kwargs_): if docTocListType.subclass: return docTocListType.subclass(*args_, **kwargs_) else: return docTocListType(*args_, **kwargs_) factory = staticmethod(factory) def get_tocitem(self): return self.tocitem def set_tocitem(self, tocitem): self.tocitem = tocitem def add_tocitem(self, value): self.tocitem.append(value) def insert_tocitem(self, index, value): self.tocitem[index] = value def export(self, outfile, level, namespace_='', name_='docTocListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTocListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docTocListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docTocListType'): for tocitem_ in self.tocitem: tocitem_.export(outfile, level, namespace_, name_='tocitem') def hasContent_(self): if ( self.tocitem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTocListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('tocitem=[\n') level += 1 for tocitem in self.tocitem: showIndent(outfile, level) outfile.write('model_.tocitem(\n') tocitem.exportLiteral(outfile, level, name_='tocitem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'tocitem': obj_ = docTocItemType.factory() obj_.build(child_) self.tocitem.append(obj_) # end class docTocListType class docLanguageType(GeneratedsSuper): subclass = None superclass = None def __init__(self, langid=None, para=None): self.langid = langid if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docLanguageType.subclass: return docLanguageType.subclass(*args_, **kwargs_) else: return docLanguageType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_langid(self): return self.langid def set_langid(self, langid): self.langid = langid def export(self, outfile, level, namespace_='', name_='docLanguageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docLanguageType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docLanguageType'): if self.langid is not None: outfile.write(' langid=%s' % (self.format_string(quote_attrib(self.langid).encode(ExternalEncoding), input_name='langid'), )) def exportChildren(self, outfile, level, namespace_='', name_='docLanguageType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docLanguageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.langid is not None: showIndent(outfile, level) outfile.write('langid = %s,\n' % (self.langid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('langid'): self.langid = attrs.get('langid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docLanguageType class docParamListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, parameteritem=None): self.kind = kind if parameteritem is None: self.parameteritem = [] else: self.parameteritem = parameteritem def factory(*args_, **kwargs_): if docParamListType.subclass: return docParamListType.subclass(*args_, **kwargs_) else: return docParamListType(*args_, **kwargs_) factory = staticmethod(factory) def get_parameteritem(self): return self.parameteritem def set_parameteritem(self, parameteritem): self.parameteritem = parameteritem def add_parameteritem(self, value): self.parameteritem.append(value) def insert_parameteritem(self, index, value): self.parameteritem[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='docParamListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamListType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='docParamListType'): for parameteritem_ in self.parameteritem: parameteritem_.export(outfile, level, namespace_, name_='parameteritem') def hasContent_(self): if ( self.parameteritem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameteritem=[\n') level += 1 for parameteritem in self.parameteritem: showIndent(outfile, level) outfile.write('model_.parameteritem(\n') parameteritem.exportLiteral(outfile, level, name_='parameteritem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameteritem': obj_ = docParamListItem.factory() obj_.build(child_) self.parameteritem.append(obj_) # end class docParamListType class docParamListItem(GeneratedsSuper): subclass = None superclass = None def __init__(self, parameternamelist=None, parameterdescription=None): if parameternamelist is None: self.parameternamelist = [] else: self.parameternamelist = parameternamelist self.parameterdescription = parameterdescription def factory(*args_, **kwargs_): if docParamListItem.subclass: return docParamListItem.subclass(*args_, **kwargs_) else: return docParamListItem(*args_, **kwargs_) factory = staticmethod(factory) def get_parameternamelist(self): return self.parameternamelist def set_parameternamelist(self, parameternamelist): self.parameternamelist = parameternamelist def add_parameternamelist(self, value): self.parameternamelist.append(value) def insert_parameternamelist(self, index, value): self.parameternamelist[index] = value def get_parameterdescription(self): return self.parameterdescription def set_parameterdescription(self, parameterdescription): self.parameterdescription = parameterdescription def export(self, outfile, level, namespace_='', name_='docParamListItem', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamListItem') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamListItem'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParamListItem'): for parameternamelist_ in self.parameternamelist: parameternamelist_.export(outfile, level, namespace_, name_='parameternamelist') if self.parameterdescription: self.parameterdescription.export(outfile, level, namespace_, name_='parameterdescription', ) def hasContent_(self): if ( self.parameternamelist is not None or self.parameterdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamListItem'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameternamelist=[\n') level += 1 for parameternamelist in self.parameternamelist: showIndent(outfile, level) outfile.write('model_.parameternamelist(\n') parameternamelist.exportLiteral(outfile, level, name_='parameternamelist') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.parameterdescription: showIndent(outfile, level) outfile.write('parameterdescription=model_.descriptionType(\n') self.parameterdescription.exportLiteral(outfile, level, name_='parameterdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameternamelist': obj_ = docParamNameList.factory() obj_.build(child_) self.parameternamelist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameterdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_parameterdescription(obj_) # end class docParamListItem class docParamNameList(GeneratedsSuper): subclass = None superclass = None def __init__(self, parametername=None): if parametername is None: self.parametername = [] else: self.parametername = parametername def factory(*args_, **kwargs_): if docParamNameList.subclass: return docParamNameList.subclass(*args_, **kwargs_) else: return docParamNameList(*args_, **kwargs_) factory = staticmethod(factory) def get_parametername(self): return self.parametername def set_parametername(self, parametername): self.parametername = parametername def add_parametername(self, value): self.parametername.append(value) def insert_parametername(self, index, value): self.parametername[index] = value def export(self, outfile, level, namespace_='', name_='docParamNameList', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamNameList') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamNameList'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParamNameList'): for parametername_ in self.parametername: parametername_.export(outfile, level, namespace_, name_='parametername') def hasContent_(self): if ( self.parametername is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamNameList'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parametername=[\n') level += 1 for parametername in self.parametername: showIndent(outfile, level) outfile.write('model_.parametername(\n') parametername.exportLiteral(outfile, level, name_='parametername') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parametername': obj_ = docParamName.factory() obj_.build(child_) self.parametername.append(obj_) # end class docParamNameList class docParamName(GeneratedsSuper): subclass = None superclass = None def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): self.direction = direction if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docParamName.subclass: return docParamName.subclass(*args_, **kwargs_) else: return docParamName(*args_, **kwargs_) factory = staticmethod(factory) def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def get_direction(self): return self.direction def set_direction(self, direction): self.direction = direction def export(self, outfile, level, namespace_='', name_='docParamName', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamName') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docParamName'): if self.direction is not None: outfile.write(' direction=%s' % (quote_attrib(self.direction), )) def exportChildren(self, outfile, level, namespace_='', name_='docParamName'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamName'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.direction is not None: showIndent(outfile, level) outfile.write('direction = "%s",\n' % (self.direction,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('direction'): self.direction = attrs.get('direction').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docParamName class docXRefSectType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, xreftitle=None, xrefdescription=None): self.id = id if xreftitle is None: self.xreftitle = [] else: self.xreftitle = xreftitle self.xrefdescription = xrefdescription def factory(*args_, **kwargs_): if docXRefSectType.subclass: return docXRefSectType.subclass(*args_, **kwargs_) else: return docXRefSectType(*args_, **kwargs_) factory = staticmethod(factory) def get_xreftitle(self): return self.xreftitle def set_xreftitle(self, xreftitle): self.xreftitle = xreftitle def add_xreftitle(self, value): self.xreftitle.append(value) def insert_xreftitle(self, index, value): self.xreftitle[index] = value def get_xrefdescription(self): return self.xrefdescription def set_xrefdescription(self, xrefdescription): self.xrefdescription = xrefdescription def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docXRefSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docXRefSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docXRefSectType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docXRefSectType'): for xreftitle_ in self.xreftitle: showIndent(outfile, level) outfile.write('<%sxreftitle>%s\n' % (namespace_, self.format_string(quote_xml(xreftitle_).encode(ExternalEncoding), input_name='xreftitle'), namespace_)) if self.xrefdescription: self.xrefdescription.export(outfile, level, namespace_, name_='xrefdescription', ) def hasContent_(self): if ( self.xreftitle is not None or self.xrefdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docXRefSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('xreftitle=[\n') level += 1 for xreftitle in self.xreftitle: showIndent(outfile, level) outfile.write('%s,\n' % quote_python(xreftitle).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.xrefdescription: showIndent(outfile, level) outfile.write('xrefdescription=model_.descriptionType(\n') self.xrefdescription.exportLiteral(outfile, level, name_='xrefdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'xreftitle': xreftitle_ = '' for text__content_ in child_.childNodes: xreftitle_ += text__content_.nodeValue self.xreftitle.append(xreftitle_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'xrefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_xrefdescription(obj_) # end class docXRefSectType class docCopyType(GeneratedsSuper): subclass = None superclass = None def __init__(self, link=None, para=None, sect1=None, internal=None): self.link = link if para is None: self.para = [] else: self.para = para if sect1 is None: self.sect1 = [] else: self.sect1 = sect1 self.internal = internal def factory(*args_, **kwargs_): if docCopyType.subclass: return docCopyType.subclass(*args_, **kwargs_) else: return docCopyType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_link(self): return self.link def set_link(self, link): self.link = link def export(self, outfile, level, namespace_='', name_='docCopyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCopyType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docCopyType'): if self.link is not None: outfile.write(' link=%s' % (self.format_string(quote_attrib(self.link).encode(ExternalEncoding), input_name='link'), )) def exportChildren(self, outfile, level, namespace_='', name_='docCopyType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') for sect1_ in self.sect1: sect1_.export(outfile, level, namespace_, name_='sect1') if self.internal: self.internal.export(outfile, level, namespace_, name_='internal') def hasContent_(self): if ( self.para is not None or self.sect1 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCopyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.link is not None: showIndent(outfile, level) outfile.write('link = %s,\n' % (self.link,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('sect1=[\n') level += 1 for sect1 in self.sect1: showIndent(outfile, level) outfile.write('model_.sect1(\n') sect1.exportLiteral(outfile, level, name_='sect1') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.internal: showIndent(outfile, level) outfile.write('internal=model_.docInternalType(\n') self.internal.exportLiteral(outfile, level, name_='internal') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('link'): self.link = attrs.get('link').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': obj_ = docSect1Type.factory() obj_.build(child_) self.sect1.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': obj_ = docInternalType.factory() obj_.build(child_) self.set_internal(obj_) # end class docCopyType class docCharType(GeneratedsSuper): subclass = None superclass = None def __init__(self, char=None, valueOf_=''): self.char = char self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docCharType.subclass: return docCharType.subclass(*args_, **kwargs_) else: return docCharType(*args_, **kwargs_) factory = staticmethod(factory) def get_char(self): return self.char def set_char(self, char): self.char = char def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docCharType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCharType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docCharType'): if self.char is not None: outfile.write(' char=%s' % (quote_attrib(self.char), )) def exportChildren(self, outfile, level, namespace_='', name_='docCharType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCharType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.char is not None: showIndent(outfile, level) outfile.write('char = "%s",\n' % (self.char,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('char'): self.char = attrs.get('char').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docCharType class docEmptyType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docEmptyType.subclass: return docEmptyType.subclass(*args_, **kwargs_) else: return docEmptyType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docEmptyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docEmptyType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docEmptyType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docEmptyType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docEmptyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docEmptyType USAGE_TEXT = """ Usage: python .py [ -s ] Options: -s Use the SAX parser, not the minidom parser. """ def usage(): print USAGE_TEXT sys.exit(1) def parse(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", namespacedef_='') return rootObj def parseString(inString): doc = minidom.parseString(inString) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", namespacedef_='') return rootObj def parseLiteral(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('from compound import *\n\n') sys.stdout.write('rootObj = doxygen(\n') rootObj.exportLiteral(sys.stdout, 0, name_="doxygen") sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] if len(args) == 1: parse(args[0]) else: usage() if __name__ == '__main__': main() #import pdb #pdb.run('main()') gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/generated/indexsuper.py0000644000175000017500000004552612576764164027123 0ustar carlescarles#!/usr/bin/env python # # Generated Thu Jun 11 18:43:54 2009 by generateDS.py. # import sys import getopt from string import lower as str_lower from xml.dom import minidom from xml.dom import Node # # User methods # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class # in a module named generatedssuper.py. try: from generatedssuper import GeneratedsSuper except ImportError, exp: class GeneratedsSuper: def format_string(self, input_data, input_name=''): return input_data def format_integer(self, input_data, input_name=''): return '%d' % input_data def format_float(self, input_data, input_name=''): return '%f' % input_data def format_double(self, input_data, input_name=''): return '%e' % input_data def format_boolean(self, input_data, input_name=''): return '%s' % input_data # # If you have installed IPython you can uncomment and use the following. # IPython is available from http://ipython.scipy.org/. # ## from IPython.Shell import IPShellEmbed ## args = '' ## ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', ## exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: # ipshell(' -- Entering ipshell.\nHit Ctrl-D to exit') # # Globals # ExternalEncoding = 'ascii' # # Support/utility functions. # def showIndent(outfile, level): for idx in range(level): outfile.write(' ') def quote_xml(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') if '"' in s1: if "'" in s1: s1 = '"%s"' % s1.replace('"', """) else: s1 = "'%s'" % s1 else: s1 = '"%s"' % s1 return s1 def quote_python(inStr): s1 = inStr if s1.find("'") == -1: if s1.find('\n') == -1: return "'%s'" % s1 else: return "'''%s'''" % s1 else: if s1.find('"') != -1: s1 = s1.replace('"', '\\"') if s1.find('\n') == -1: return '"%s"' % s1 else: return '"""%s"""' % s1 class MixedContainer: # Constants for category: CategoryNone = 0 CategoryText = 1 CategorySimple = 2 CategoryComplex = 3 # Constants for content_type: TypeNone = 0 TypeText = 1 TypeString = 2 TypeInteger = 3 TypeFloat = 4 TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value def getCategory(self): return self.category def getContenttype(self, content_type): return self.content_type def getValue(self): return self.value def getName(self): return self.name def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex self.value.export(outfile, level, namespace,name) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeInteger or \ self.content_type == MixedContainer.TypeBoolean: outfile.write('<%s>%d' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeFloat or \ self.content_type == MixedContainer.TypeDecimal: outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s",\n' % \ (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') class _MemberSpec(object): def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type def get_data_type(self): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container # # Data representation classes. # class DoxygenType(GeneratedsSuper): subclass = None superclass = None def __init__(self, version=None, compound=None): self.version = version if compound is None: self.compound = [] else: self.compound = compound def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) else: return DoxygenType(*args_, **kwargs_) factory = staticmethod(factory) def get_compound(self): return self.compound def set_compound(self, compound): self.compound = compound def add_compound(self, value): self.compound.append(value) def insert_compound(self, index, value): self.compound[index] = value def get_version(self): return self.version def set_version(self, version): self.version = version def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (self.format_string(quote_attrib(self.version).encode(ExternalEncoding), input_name='version'), )) def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): for compound_ in self.compound: compound_.export(outfile, level, namespace_, name_='compound') def hasContent_(self): if ( self.compound is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = %s,\n' % (self.version,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compound=[\n') level += 1 for compound in self.compound: showIndent(outfile, level) outfile.write('model_.compound(\n') compound.exportLiteral(outfile, level, name_='compound') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compound': obj_ = CompoundType.factory() obj_.build(child_) self.compound.append(obj_) # end class DoxygenType class CompoundType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, refid=None, name=None, member=None): self.kind = kind self.refid = refid self.name = name if member is None: self.member = [] else: self.member = member def factory(*args_, **kwargs_): if CompoundType.subclass: return CompoundType.subclass(*args_, **kwargs_) else: return CompoundType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='CompoundType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='CompoundType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='CompoundType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='CompoundType'): if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') def hasContent_(self): if ( self.name is not None or self.member is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='CompoundType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('member=[\n') level += 1 for member in self.member: showIndent(outfile, level) outfile.write('model_.member(\n') member.exportLiteral(outfile, level, name_='member') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'member': obj_ = MemberType.factory() obj_.build(child_) self.member.append(obj_) # end class CompoundType class MemberType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, refid=None, name=None): self.kind = kind self.refid = refid self.name = name def factory(*args_, **kwargs_): if MemberType.subclass: return MemberType.subclass(*args_, **kwargs_) else: return MemberType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='MemberType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='MemberType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='MemberType'): if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) def hasContent_(self): if ( self.name is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='MemberType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ # end class MemberType USAGE_TEXT = """ Usage: python .py [ -s ] Options: -s Use the SAX parser, not the minidom parser. """ def usage(): print USAGE_TEXT sys.exit(1) def parse(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", namespacedef_='') return rootObj def parseString(inString): doc = minidom.parseString(inString) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", namespacedef_='') return rootObj def parseLiteral(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('from index import *\n\n') sys.stdout.write('rootObj = doxygenindex(\n') rootObj.exportLiteral(sys.stdout, 0, name_="doxygenindex") sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] if len(args) == 1: parse(args[0]) else: usage() if __name__ == '__main__': main() #import pdb #pdb.run('main()') gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/doxygen/doxyxml/doxyindex.py0000644000175000017500000001462712576764164025010 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Classes providing more user-friendly interfaces to the doxygen xml docs than the generated classes provide. """ import os from generated import index from base import Base from text import description class DoxyIndex(Base): """ Parses a doxygen xml directory. """ __module__ = "gnuradio.utils.doxyxml" def _parse(self): if self._parsed: return super(DoxyIndex, self)._parse() self._root = index.parse(os.path.join(self._xml_path, 'index.xml')) for mem in self._root.compound: converted = self.convert_mem(mem) # For files we want the contents to be accessible directly # from the parent rather than having to go through the file # object. if self.get_cls(mem) == DoxyFile: if mem.name.endswith('.h'): self._members += converted.members() self._members.append(converted) else: self._members.append(converted) def generate_swig_doc_i(self): """ %feature("docstring") gr_make_align_on_samplenumbers_ss::align_state " Wraps the C++: gr_align_on_samplenumbers_ss::align_state"; """ pass class DoxyCompMem(Base): kind = None def __init__(self, *args, **kwargs): super(DoxyCompMem, self).__init__(*args, **kwargs) @classmethod def can_parse(cls, obj): return obj.kind == cls.kind def set_descriptions(self, parse_data): bd = description(getattr(parse_data, 'briefdescription', None)) dd = description(getattr(parse_data, 'detaileddescription', None)) self._data['brief_description'] = bd self._data['detailed_description'] = dd class DoxyCompound(DoxyCompMem): pass class DoxyMember(DoxyCompMem): pass class DoxyFunction(DoxyMember): __module__ = "gnuradio.utils.doxyxml" kind = 'function' def _parse(self): if self._parsed: return super(DoxyFunction, self)._parse() self.set_descriptions(self._parse_data) self._data['params'] = [] prms = self._parse_data.param for prm in prms: self._data['params'].append(DoxyParam(prm)) brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) params = property(lambda self: self.data()['params']) Base.mem_classes.append(DoxyFunction) class DoxyParam(DoxyMember): __module__ = "gnuradio.utils.doxyxml" def _parse(self): if self._parsed: return super(DoxyParam, self)._parse() self.set_descriptions(self._parse_data) self._data['declname'] = self._parse_data.declname brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) declname = property(lambda self: self.data()['declname']) class DoxyClass(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'class' def _parse(self): if self._parsed: return super(DoxyClass, self)._parse() self.retrieve_data() if self._error: return self.set_descriptions(self._retrieved_data.compounddef) # Sectiondef.kind tells about whether private or public. # We just ignore this for now. self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) Base.mem_classes.append(DoxyClass) class DoxyFile(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'file' def _parse(self): if self._parsed: return super(DoxyFile, self)._parse() self.retrieve_data() self.set_descriptions(self._retrieved_data.compounddef) if self._error: return self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) Base.mem_classes.append(DoxyFile) class DoxyNamespace(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'namespace' Base.mem_classes.append(DoxyNamespace) class DoxyGroup(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'group' def _parse(self): if self._parsed: return super(DoxyGroup, self)._parse() self.retrieve_data() if self._error: return cdef = self._retrieved_data.compounddef self._data['title'] = description(cdef.title) # Process inner groups grps = cdef.innergroup for grp in grps: converted = DoxyGroup.from_refid(grp.refid, top=self.top) self._members.append(converted) # Process inner classes klasses = cdef.innerclass for kls in klasses: converted = DoxyClass.from_refid(kls.refid, top=self.top) self._members.append(converted) # Process normal members self.process_memberdefs() title = property(lambda self: self.data()['title']) Base.mem_classes.append(DoxyGroup) class DoxyFriend(DoxyMember): __module__ = "gnuradio.utils.doxyxml" kind = 'friend' Base.mem_classes.append(DoxyFriend) class DoxyOther(Base): __module__ = "gnuradio.utils.doxyxml" kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page']) @classmethod def can_parse(cls, obj): return obj.kind in cls.kinds Base.mem_classes.append(DoxyOther) gnss-sdr-0.0.6/drivers/gr-dbfcttc/docs/README.dbfcttc0000644000175000017500000000060412576764164021520 0ustar carlescarlesThis is the dbfcttc-write-a-block package meant as a guide to building out-of-tree packages. To use the dbfcttc blocks, the Python namespaces is in 'dbfcttc', which is imported as: import dbfcttc See the Doxygen documentation for details about the blocks available in this package. A quick listing of the details can be found in Python after importing by using: help(dbfcttc) gnss-sdr-0.0.6/drivers/gr-dbfcttc/include/0000755000175000017500000000000012576764164017723 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/include/dbfcttc/0000755000175000017500000000000012576764164021334 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/include/dbfcttc/raw_array.h0000644000175000017500000000411412576764164023474 0ustar carlescarles/*! * \file raw_array.h * \brief GNU Radio source block to acces to experimental GNSS Array platform. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_DBFCTTC_RAW_ARRAY_H #define INCLUDED_DBFCTTC_RAW_ARRAY_H #include #include namespace gr { namespace dbfcttc { /*! * \brief <+description of block+> * \ingroup dbfcttc * */ class DBFCTTC_API raw_array : virtual public gr::sync_block { public: typedef boost::shared_ptr sptr; /*! * \brief Return a shared_ptr to a new instance of dbfcttc::raw_array. * * To avoid accidental use of raw pointers, dbfcttc::raw_array's * constructor is in a private implementation * class. dbfcttc::raw_array::make is the public interface for * creating new instances. */ static sptr make(const char *src_device,short number_of_channels, int snapshots_per_frame, int inter_frame_delay, int sampling_freq); }; } // namespace dbfcttc } // namespace gr #endif /* INCLUDED_DBFCTTC_RAW_ARRAY_H */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/include/dbfcttc/CMakeLists.txt0000644000175000017500000000172412576764164024100 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Install public header files ######################################################################## install(FILES api.h raw_array.h DESTINATION include/dbfcttc ) gnss-sdr-0.0.6/drivers/gr-dbfcttc/include/dbfcttc/api.h0000644000175000017500000000257312576764164022265 0ustar carlescarles/*! * \file raw_array.h * \brief API access to experimental GNSS Array platform. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_DBFCTTC_API_H #define INCLUDED_DBFCTTC_API_H #include #ifdef gnuradio_dbfcttc_EXPORTS # define DBFCTTC_API __GR_ATTR_EXPORT #else # define DBFCTTC_API __GR_ATTR_IMPORT #endif #endif /* INCLUDED_DBFCTTC_API_H */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/CMakeLists.txt0000644000175000017500000001604312576764164021044 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Project setup ######################################################################## cmake_minimum_required(VERSION 2.6) project(gr-dbfcttc CXX C) enable_testing() #select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to release.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) ######################################################################## # Compiler specific setup ######################################################################## if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) #http://gcc.gnu.org/wiki/Visibility add_definitions(-fvisibility=hidden) endif() ######################################################################## # Find boost ######################################################################## if(UNIX AND EXISTS "/usr/lib64") list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix endif(UNIX AND EXISTS "/usr/lib64") set(Boost_ADDITIONAL_VERSIONS "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39" "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44" "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49" "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54" "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" ) find_package(Boost "1.35" COMPONENTS filesystem system thread) if(NOT Boost_FOUND) message(FATAL_ERROR "Boost required to compile dbfcttc") endif() # - Try to find libpcap include dirs and libraries # # Usage of this module as follows: # # find_package(PCAP) # # Variables used by this module, they can change the default behaviour and need # to be set before calling find_package: # # PCAP_ROOT_DIR Set this variable to the root installation of # libpcap if the module has problems finding the # proper installation path. # # Variables defined by this module: # # PCAP_FOUND System has libpcap, include and library dirs found # PCAP_INCLUDE_DIR The libpcap include directories. # PCAP_LIBRARY The libpcap library (possibly includes a thread # library e.g. required by pf_ring's libpcap) # HAVE_PF_RING If a found version of libpcap supports PF_RING find_package(PCAP) if(NOT PCAP_FOUND) message(FATAL_ERROR "PCAP required to compile dbfcttc") endif() get_filename_component(PCAP_LIBRARY_DIRS ${PCAP_LIBRARY} DIRECTORY CACHE) ######################################################################## # Install directories ######################################################################## include(GrPlatform) #define LIB_SUFFIX set(GR_RUNTIME_DIR bin) set(GR_LIBRARY_DIR lib${LIB_SUFFIX}) set(GR_INCLUDE_DIR include/dbfcttc) set(GR_DATA_DIR share) set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME}) set(GR_DOC_DIR ${GR_DATA_DIR}/doc) set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME}) set(GR_CONF_DIR etc) set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d) set(GR_LIBEXEC_DIR libexec) set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME}) set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks) ######################################################################## # Find gnuradio build dependencies ######################################################################## set(GR_REQUIRED_COMPONENTS RUNTIME PMT) find_package(Gnuradio) if(NOT GNURADIO_RUNTIME_FOUND) message(FATAL_ERROR "GnuRadio Runtime required to compile dbfcttc") endif() find_package(CppUnit) if(NOT CPPUNIT_FOUND) message(FATAL_ERROR "CppUnit required to compile dbfcttc") endif() ######################################################################## # Setup the include and linker paths ######################################################################## include_directories( ${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/lib ${CMAKE_BINARY_DIR}/include ${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) link_directories( ${PCAP_LIBRARY_DIRS} ${Boost_LIBRARY_DIRS} ${CPPUNIT_LIBRARY_DIRS} ${GNURADIO_RUNTIME_LIBRARY_DIRS} ) # Set component parameters set(GR_DBFCTTC_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE) set(GR_DBFCTTC_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE) ######################################################################## # Create uninstall target ######################################################################## configure_file( ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ######################################################################## # Add subdirectories ######################################################################## # Workaround for Mac OS X if(APPLE) # Detecting Macports with hardcoded locations... if(EXISTS /opt/local/bin/python) if(EXISTS /opt/local/bin/gnuradio-companion) set(PYTHON_EXECUTABLE "/opt/local/bin/python" ) set(CMAKE_LIBRARY_PATH /opt/local/lib ${CMAKE_LIBRARY_PATH}) endif(EXISTS /opt/local/bin/gnuradio-companion) endif(EXISTS /opt/local/bin/python) endif(APPLE) add_subdirectory(include/dbfcttc) add_subdirectory(lib) add_subdirectory(swig) add_subdirectory(python) add_subdirectory(grc) add_subdirectory(apps) add_subdirectory(docs) ######################################################################## # Install cmake search helper for this library ######################################################################## install(FILES cmake/Modules/dbfcttcConfig.cmake DESTINATION lib/cmake/dbfcttc ) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/0000755000175000017500000000000012576764164017360 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/0000755000175000017500000000000012576764164020770 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/CMakeParseArgumentsCopy.cmake0000644000175000017500000001340312576764164026467 0ustar carlescarles# CMAKE_PARSE_ARGUMENTS( args...) # # CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for # parsing the arguments given to that macro or function. # It processes the arguments and defines a set of variables which hold the # values of the respective options. # # The argument contains all options for the respective macro, # i.e. keywords which can be used when calling the macro without any value # following, like e.g. the OPTIONAL keyword of the install() command. # # The argument contains all keywords for this macro # which are followed by one value, like e.g. DESTINATION keyword of the # install() command. # # The argument contains all keywords for this macro # which can be followed by more than one value, like e.g. the TARGETS or # FILES keywords of the install() command. # # When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the # keywords listed in , and # a variable composed of the given # followed by "_" and the name of the respective keyword. # These variables will then hold the respective value from the argument list. # For the keywords this will be TRUE or FALSE. # # All remaining arguments are collected in a variable # _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether # your macro was called with unrecognized parameters. # # As an example here a my_install() macro, which takes similar arguments as the # real install() command: # # function(MY_INSTALL) # set(options OPTIONAL FAST) # set(oneValueArgs DESTINATION RENAME) # set(multiValueArgs TARGETS CONFIGURATIONS) # cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # ... # # Assume my_install() has been called like this: # my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) # # After the cmake_parse_arguments() call the macro will have set the following # variables: # MY_INSTALL_OPTIONAL = TRUE # MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() # MY_INSTALL_DESTINATION = "bin" # MY_INSTALL_RENAME = "" (was not used) # MY_INSTALL_TARGETS = "foo;bar" # MY_INSTALL_CONFIGURATIONS = "" (was not used) # MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" # # You can the continue and process these variables. # # Keywords terminate lists of values, e.g. if directly after a one_value_keyword # another recognized keyword follows, this is interpreted as the beginning of # the new option. # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would # be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. #============================================================================= # Copyright 2010 Alexander Neundorf # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) return() endif() set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) # first set all result variables to empty/FALSE foreach(arg_name ${_singleArgNames} ${_multiArgNames}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${_optionNames}) set(${prefix}_${option} FALSE) endforeach(option) set(${prefix}_UNPARSED_ARGUMENTS) set(insideValues FALSE) set(currentArgName) # now iterate over all arguments and fill the result variables foreach(currentArg ${ARGN}) list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) if(insideValues) if("${insideValues}" STREQUAL "SINGLE") set(${prefix}_${currentArgName} ${currentArg}) set(insideValues FALSE) elseif("${insideValues}" STREQUAL "MULTI") list(APPEND ${prefix}_${currentArgName} ${currentArg}) endif() else(insideValues) list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) endif(insideValues) else() if(NOT ${optionIndex} EQUAL -1) set(${prefix}_${currentArg} TRUE) set(insideValues FALSE) elseif(NOT ${singleArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "SINGLE") elseif(NOT ${multiArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "MULTI") endif() endif() endforeach(currentArg) # propagate the result variables to the caller: foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) endforeach(arg_name) set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/GrSwig.cmake0000644000175000017500000002074712576764164023206 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_SWIG_CMAKE) return() endif() set(__INCLUDED_GR_SWIG_CMAKE TRUE) include(GrPython) ######################################################################## # Builds a swig documentation file to be generated into python docstrings # Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....) # # Set the following variable to specify extra dependent targets: # - GR_SWIG_DOCS_SOURCE_DEPS # - GR_SWIG_DOCS_TARGET_DEPS ######################################################################## function(GR_SWIG_MAKE_DOCS output_file) find_package(Doxygen) if(DOXYGEN_FOUND) #setup the input files variable list, quote formated set(input_files) unset(INPUT_PATHS) foreach(input_path ${ARGN}) if (IS_DIRECTORY ${input_path}) #when input path is a directory file(GLOB input_path_h_files ${input_path}/*.h) else() #otherwise its just a file, no glob set(input_path_h_files ${input_path}) endif() list(APPEND input_files ${input_path_h_files}) set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"") endforeach(input_path) #determine the output directory get_filename_component(name ${output_file} NAME_WE) get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH) set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs) make_directory(${OUTPUT_DIRECTORY}) #generate the Doxyfile used by doxygen configure_file( ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in ${OUTPUT_DIRECTORY}/Doxyfile @ONLY) #Create a dummy custom command that depends on other targets include(GrMiscUtils) GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS}) #call doxygen on the Doxyfile + input headers add_custom_command( OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps} COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile COMMENT "Generating doxygen xml for ${name} docs" ) #call the swig_doc script on the xml files add_custom_command( OUTPUT ${output_file} DEPENDS ${input_files} ${OUTPUT_DIRECTORY}/xml/index.xml COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py ${OUTPUT_DIRECTORY}/xml ${output_file} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen ) else(DOXYGEN_FOUND) file(WRITE ${output_file} "\n") #no doxygen -> empty file endif(DOXYGEN_FOUND) endfunction(GR_SWIG_MAKE_DOCS) ######################################################################## # Build a swig target for the common gnuradio use case. Usage: # GR_SWIG_MAKE(target ifile ifile ifile...) # # Set the following variables before calling: # - GR_SWIG_FLAGS # - GR_SWIG_INCLUDE_DIRS # - GR_SWIG_LIBRARIES # - GR_SWIG_SOURCE_DEPS # - GR_SWIG_TARGET_DEPS # - GR_SWIG_DOC_FILE # - GR_SWIG_DOC_DIRS ######################################################################## macro(GR_SWIG_MAKE name) set(ifiles ${ARGN}) #do swig doc generation if specified if (GR_SWIG_DOC_FILE) set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS}) set(GR_SWIG_DOCS_TAREGT_DEPS ${GR_SWIG_TARGET_DEPS}) GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS}) list(APPEND GR_SWIG_SOURCE_DEPS ${GR_SWIG_DOC_FILE}) endif() #append additional include directories find_package(PythonLibs 2) list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs) list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS}) list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}) #determine include dependencies for swig file execute_process( COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/get_swig_deps.py "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) #Create a dummy custom command that depends on other targets include(GrMiscUtils) GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS}) set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag) add_custom_command( OUTPUT ${tag_file} DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps} COMMAND ${CMAKE_COMMAND} -E touch ${tag_file} ) #append the specified include directories include_directories(${GR_SWIG_INCLUDE_DIRS}) list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file}) #setup the swig flags with flags and include directories set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS}) foreach(dir ${GR_SWIG_INCLUDE_DIRS}) list(APPEND CMAKE_SWIG_FLAGS "-I${dir}") endforeach(dir) #set the C++ property on the swig .i file so it builds set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON) #setup the actual swig library target to be built include(UseSWIG) SWIG_ADD_MODULE(${name} python ${ifiles}) SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES}) endmacro(GR_SWIG_MAKE) ######################################################################## # Install swig targets generated by GR_SWIG_MAKE. Usage: # GR_SWIG_INSTALL( # TARGETS target target target... # [DESTINATION destination] # [COMPONENT component] # ) ######################################################################## macro(GR_SWIG_INSTALL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN}) foreach(name ${GR_SWIG_INSTALL_TARGETS}) install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME} DESTINATION ${GR_SWIG_INSTALL_DESTINATION} COMPONENT ${GR_SWIG_INSTALL_COMPONENT} ) include(GrPython) GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py DESTINATION ${GR_SWIG_INSTALL_DESTINATION} COMPONENT ${GR_SWIG_INSTALL_COMPONENT} ) GR_LIBTOOL( TARGET ${SWIG_MODULE_${name}_REAL_NAME} DESTINATION ${GR_SWIG_INSTALL_DESTINATION} ) endforeach(name) endmacro(GR_SWIG_INSTALL) ######################################################################## # Generate a python file that can determine swig dependencies. # Used by the make macro above to determine extra dependencies. # When you build C++, CMake figures out the header dependencies. # This code essentially performs that logic for swig includes. ######################################################################## file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py " import os, sys, re include_matcher = re.compile('[#|%]include\\s*[<|\"](.*)[>|\"]') include_dirs = sys.argv[2].split(';') def get_swig_incs(file_path): file_contents = open(file_path, 'r').read() return include_matcher.findall(file_contents, re.MULTILINE) def get_swig_deps(file_path, level): deps = [file_path] if level == 0: return deps for inc_file in get_swig_incs(file_path): for inc_dir in include_dirs: inc_path = os.path.join(inc_dir, inc_file) if not os.path.exists(inc_path): continue deps.extend(get_swig_deps(inc_path, level-1)) return deps if __name__ == '__main__': ifiles = sys.argv[1].split(';') deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], []) #sys.stderr.write(';'.join(set(deps)) + '\\n\\n') print(';'.join(set(deps))) ") gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/GrTest.cmake0000644000175000017500000001270212576764164023204 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_TEST_CMAKE) return() endif() set(__INCLUDED_GR_TEST_CMAKE TRUE) ######################################################################## # Add a unit test and setup the environment for a unit test. # Takes the same arguments as the ADD_TEST function. # # Before calling set the following variables: # GR_TEST_TARGET_DEPS - built targets for the library path # GR_TEST_LIBRARY_DIRS - directories for the library path # GR_TEST_PYTHON_DIRS - directories for the python path ######################################################################## function(GR_ADD_TEST test_name) if(WIN32) #Ensure that the build exe also appears in the PATH. list(APPEND GR_TEST_TARGET_DEPS ${ARGN}) #In the land of windows, all libraries must be in the PATH. #Since the dependent libraries are not yet installed, #we must manually set them in the PATH to run tests. #The following appends the path of a target dependency. foreach(target ${GR_TEST_TARGET_DEPS}) get_target_property(location ${target} LOCATION) if(location) get_filename_component(path ${location} PATH) string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path}) list(APPEND GR_TEST_LIBRARY_DIRS ${path}) endif(location) endforeach(target) #SWIG generates the python library files into a subdirectory. #Therefore, we must append this subdirectory into PYTHONPATH. #Only do this for the python directories matching the following: foreach(pydir ${GR_TEST_PYTHON_DIRS}) get_filename_component(name ${pydir} NAME) if(name MATCHES "^(swig|lib|src)$") list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE}) endif() endforeach(pydir) endif(WIN32) file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir) file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list? file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list? set(environs "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}") #http://www.cmake.org/pipermail/cmake/2009-May/029464.html #Replaced this add test + set environs code with the shell script generation. #Its nicer to be able to manually run the shell script to diagnose problems. #ADD_TEST(${ARGV}) #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}") if(UNIX) set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH") #set both LD and DYLD paths to cover multiple UNIX OS library paths list(APPEND libpath "$LD_LIBRARY_PATH" "$DYLD_LIBRARY_PATH") list(APPEND pypath "$PYTHONPATH") #replace list separator with the path separator string(REPLACE ";" ":" libpath "${libpath}") string(REPLACE ";" ":" pypath "${pypath}") list(APPEND environs "PATH=${binpath}" "LD_LIBRARY_PATH=${libpath}" "DYLD_LIBRARY_PATH=${libpath}" "PYTHONPATH=${pypath}") #generate a bat file that sets the environment and runs the test find_program(SHELL sh) set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh) file(WRITE ${sh_file} "#!${SHELL}\n") #each line sets an environment variable foreach(environ ${environs}) file(APPEND ${sh_file} "export ${environ}\n") endforeach(environ) #load the command to run with its arguments foreach(arg ${ARGN}) file(APPEND ${sh_file} "${arg} ") endforeach(arg) file(APPEND ${sh_file} "\n") #make the shell file executable execute_process(COMMAND chmod +x ${sh_file}) add_test(${test_name} ${SHELL} ${sh_file}) endif(UNIX) if(WIN32) list(APPEND libpath ${DLL_PATHS} "%PATH%") list(APPEND pypath "%PYTHONPATH%") #replace list separator with the path separator (escaped) string(REPLACE ";" "\\;" libpath "${libpath}") string(REPLACE ";" "\\;" pypath "${pypath}") list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}") #generate a bat file that sets the environment and runs the test set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat) file(WRITE ${bat_file} "@echo off\n") #each line sets an environment variable foreach(environ ${environs}) file(APPEND ${bat_file} "SET ${environ}\n") endforeach(environ) #load the command to run with its arguments foreach(arg ${ARGN}) file(APPEND ${bat_file} "${arg} ") endforeach(arg) file(APPEND ${bat_file} "\n") add_test(${test_name} ${bat_file}) endif(WIN32) endfunction(GR_ADD_TEST) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/FindPCAP.cmake0000644000175000017500000000754412576764164023330 0ustar carlescarles ################################################################### # # Copyright (c) 2006 Frederic Heem, # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # * Neither the name of the Telsey nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER 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. # ################################################################### # - Find pcap # Find the PCAP includes and library # http://www.tcpdump.org/ # # The environment variable PCAPDIR allows to specficy where to find # libpcap in non standard location. # # PCAP_INCLUDE_DIRS - where to find pcap.h, etc. # PCAP_LIBRARIES - List of libraries when using pcap. # PCAP_FOUND - True if pcap found. IF(EXISTS $ENV{PCAPDIR}) FIND_PATH(PCAP_INCLUDE_DIR NAMES pcap/pcap.h pcap.h PATHS $ENV{PCAPDIR} NO_DEFAULT_PATH ) FIND_LIBRARY(PCAP_LIBRARY NAMES pcap PATHS $ENV{PCAPDIR} NO_DEFAULT_PATH ) ELSE(EXISTS $ENV{PCAPDIR}) FIND_PATH(PCAP_INCLUDE_DIR NAMES pcap/pcap.h pcap.h ) FIND_LIBRARY(PCAP_LIBRARY NAMES pcap ) ENDIF(EXISTS $ENV{PCAPDIR}) SET(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR}) SET(PCAP_LIBRARIES ${PCAP_LIBRARY}) IF(PCAP_INCLUDE_DIRS) MESSAGE(STATUS "Pcap include dirs set to ${PCAP_INCLUDE_DIRS}") ELSE(PCAP_INCLUDE_DIRS) MESSAGE(FATAL " Pcap include dirs cannot be found") ENDIF(PCAP_INCLUDE_DIRS) IF(PCAP_LIBRARIES) MESSAGE(STATUS "Pcap library set to ${PCAP_LIBRARIES}") ELSE(PCAP_LIBRARIES) MESSAGE(FATAL "Pcap library cannot be found") ENDIF(PCAP_LIBRARIES) #Functions INCLUDE(CheckFunctionExists) SET(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS}) SET(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARIES}) CHECK_FUNCTION_EXISTS("pcap_breakloop" HAVE_PCAP_BREAKLOOP) CHECK_FUNCTION_EXISTS("pcap_datalink_name_to_val" HAVE_PCAP_DATALINK_NAME_TO_VAL) CHECK_FUNCTION_EXISTS("pcap_datalink_val_to_name" HAVE_PCAP_DATALINK_VAL_TO_NAME) CHECK_FUNCTION_EXISTS("pcap_findalldevs" HAVE_PCAP_FINDALLDEVS) CHECK_FUNCTION_EXISTS("pcap_freecode" HAVE_PCAP_FREECODE) CHECK_FUNCTION_EXISTS("pcap_get_selectable_fd" HAVE_PCAP_GET_SELECTABLE_FD) CHECK_FUNCTION_EXISTS("pcap_lib_version" HAVE_PCAP_LIB_VERSION) CHECK_FUNCTION_EXISTS("pcap_list_datalinks" HAVE_PCAP_LIST_DATALINKS) CHECK_FUNCTION_EXISTS("pcap_open_dead" HAVE_PCAP_OPEN_DEAD) CHECK_FUNCTION_EXISTS("pcap_set_datalink" HAVE_PCAP_SET_DATALINK) #Is pcap found ? IF(PCAP_INCLUDE_DIRS AND PCAP_LIBRARIES) SET( PCAP_FOUND "YES" ) ENDIF(PCAP_INCLUDE_DIRS AND PCAP_LIBRARIES) MARK_AS_ADVANCED( PCAP_LIBRARIES PCAP_INCLUDE_DIRS )gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/GrPlatform.cmake0000644000175000017500000000321312576764164024046 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE) return() endif() set(__INCLUDED_GR_PLATFORM_CMAKE TRUE) ######################################################################## # Setup additional defines for OS types ######################################################################## if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(LINUX TRUE) endif() if(LINUX AND EXISTS "/etc/debian_version") set(DEBIAN TRUE) endif() if(LINUX AND EXISTS "/etc/redhat-release") set(REDHAT TRUE) endif() ######################################################################## # when the library suffix should be 64 (applies to redhat linux family) ######################################################################## if(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$") set(LIB_SUFFIX 64) endif() set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix") gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/dbfcttcConfig.cmake0000644000175000017500000000141112576764164024526 0ustar carlescarlesINCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_DBFCTTC dbfcttc) FIND_PATH( DBFCTTC_INCLUDE_DIRS NAMES dbfcttc/api.h HINTS $ENV{DBFCTTC_DIR}/include ${PC_DBFCTTC_INCLUDEDIR} PATHS ${CMAKE_INSTALL_PREEFIX}/include /usr/local/include /usr/include ) FIND_LIBRARY( DBFCTTC_LIBRARIES NAMES gnuradio-dbfcttc HINTS $ENV{DBFCTTC_DIR}/lib ${PC_DBFCTTC_LIBDIR} PATHS ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_INSTALL_PREFIX}/lib64 /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(DBFCTTC DEFAULT_MSG DBFCTTC_LIBRARIES DBFCTTC_INCLUDE_DIRS) MARK_AS_ADVANCED(DBFCTTC_LIBRARIES DBFCTTC_INCLUDE_DIRS) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/GrMiscUtils.cmake0000644000175000017500000002077212576764164024207 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE) return() endif() set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE) ######################################################################## # Set global variable macro. # Used for subdirectories to export settings. # Example: include and library paths. ######################################################################## function(GR_SET_GLOBAL var) set(${var} ${ARGN} CACHE INTERNAL "" FORCE) endfunction(GR_SET_GLOBAL) ######################################################################## # Set the pre-processor definition if the condition is true. # - def the pre-processor definition to set and condition name ######################################################################## function(GR_ADD_COND_DEF def) if(${def}) add_definitions(-D${def}) endif(${def}) endfunction(GR_ADD_COND_DEF) ######################################################################## # Check for a header and conditionally set a compile define. # - hdr the relative path to the header file # - def the pre-processor definition to set ######################################################################## function(GR_CHECK_HDR_N_DEF hdr def) include(CheckIncludeFileCXX) CHECK_INCLUDE_FILE_CXX(${hdr} ${def}) GR_ADD_COND_DEF(${def}) endfunction(GR_CHECK_HDR_N_DEF) ######################################################################## # Include subdirectory macro. # Sets the CMake directory variables, # includes the subdirectory CMakeLists.txt, # resets the CMake directory variables. # # This macro includes subdirectories rather than adding them # so that the subdirectory can affect variables in the level above. # This provides a work-around for the lack of convenience libraries. # This way a subdirectory can append to the list of library sources. ######################################################################## macro(GR_INCLUDE_SUBDIRECTORY subdir) #insert the current directories on the front of the list list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR}) list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR}) #set the current directories to the names of the subdirs set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}) set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir}) #include the subdirectory CMakeLists to run it file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt) #reset the value of the current directories list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR) list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR) #pop the subdir names of the front of the list list(REMOVE_AT _cmake_source_dirs 0) list(REMOVE_AT _cmake_binary_dirs 0) endmacro(GR_INCLUDE_SUBDIRECTORY) ######################################################################## # Check if a compiler flag works and conditionally set a compile define. # - flag the compiler flag to check for # - have the variable to set with result ######################################################################## macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have) include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG(${flag} ${have}) if(${have}) add_definitions(${flag}) endif(${have}) endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE) ######################################################################## # Generates the .la libtool file # This appears to generate libtool files that cannot be used by auto*. # Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest]) # Notice: there is not COMPONENT option, these will not get distributed. ######################################################################## function(GR_LIBTOOL) if(NOT DEFINED GENERATE_LIBTOOL) set(GENERATE_LIBTOOL OFF) #disabled by default endif() if(GENERATE_LIBTOOL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN}) find_program(LIBTOOL libtool) if(LIBTOOL) include(CMakeMacroLibtoolFile) CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION}) endif(LIBTOOL) endif(GENERATE_LIBTOOL) endfunction(GR_LIBTOOL) ######################################################################## # Do standard things to the library target # - set target properties # - make install rules # Also handle gnuradio custom naming conventions w/ extras mode. ######################################################################## function(GR_LIBRARY_FOO target) #parse the arguments for component names include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN}) #set additional target properties set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER}) #install the generated files like so... install(TARGETS ${target} LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT} # .lib file RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file ) #extras mode enabled automatically on linux if(NOT DEFINED LIBRARY_EXTRAS) set(LIBRARY_EXTRAS ${LINUX}) endif() #special extras mode to enable alternative naming conventions if(LIBRARY_EXTRAS) #create .la file before changing props GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR}) #give the library a special name with ultra-zero soversion set_target_properties(${target} PROPERTIES LIBRARY_OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0") set(target_name lib${target}-${LIBVER}.so.0.0.0) #custom command to generate symlinks add_custom_command( TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install ) #and install the extra symlinks install( FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} ) endif(LIBRARY_EXTRAS) endfunction(GR_LIBRARY_FOO) ######################################################################## # Create a dummy custom command that depends on other targets. # Usage: # GR_GEN_TARGET_DEPS(unique_name target_deps ...) # ADD_CUSTOM_COMMAND( ${target_deps}) # # Custom command cant depend on targets, but can depend on executables, # and executables can depend on targets. So this is the process: ######################################################################## function(GR_GEN_TARGET_DEPS name var) file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in "int main(void){return 0;}\n" ) execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp ) add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp) if(ARGN) add_dependencies(${name} ${ARGN}) endif(ARGN) if(CMAKE_CROSSCOMPILING) set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross else() set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE) endif() endfunction(GR_GEN_TARGET_DEPS) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/FindCppUnit.cmake0000644000175000017500000000171312576764164024157 0ustar carlescarles# http://www.cmake.org/pipermail/cmake/2006-October/011446.html # Modified to use pkg config and use standard var names # # Find the CppUnit includes and library # # This module defines # CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc. # CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit. # CPPUNIT_FOUND, If false, do not try to use CppUnit. INCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_CPPUNIT "cppunit") FIND_PATH(CPPUNIT_INCLUDE_DIRS NAMES cppunit/TestCase.h HINTS ${PC_CPPUNIT_INCLUDE_DIR} PATHS /usr/local/include /usr/include ) FIND_LIBRARY(CPPUNIT_LIBRARIES NAMES cppunit HINTS ${PC_CPPUNIT_LIBDIR} PATHS ${CPPUNIT_INCLUDE_DIRS}/../lib /usr/local/lib /usr/lib ) LIST(APPEND CPPUNIT_LIBRARIES ${CMAKE_DL_LIBS}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPPUNIT DEFAULT_MSG CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS) MARK_AS_ADVANCED(CPPUNIT_LIBRARIES CPPUNIT_INCLUDE_DIRS) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/FindGnuradioRuntime.cmake0000644000175000017500000000217512576764164025714 0ustar carlescarlesINCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime) if(PC_GNURADIO_RUNTIME_FOUND) # look for include files FIND_PATH( GNURADIO_RUNTIME_INCLUDE_DIRS NAMES gnuradio/top_block.h HINTS $ENV{GNURADIO_RUNTIME_DIR}/include ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS} ${CMAKE_INSTALL_PREFIX}/include PATHS /usr/local/include /usr/include ) # look for libs FIND_LIBRARY( GNURADIO_RUNTIME_LIBRARIES NAMES gnuradio-runtime HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib ${PC_GNURADIO_RUNTIME_LIBDIR} ${CMAKE_INSTALL_PREFIX}/lib/ ${CMAKE_INSTALL_PREFIX}/lib64/ PATHS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND}) endif(PC_GNURADIO_RUNTIME_FOUND) INCLUDE(FindPackageHandleStandardArgs) # do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used. FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES) MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS) gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/Modules/GrPython.cmake0000644000175000017500000002173312576764164023552 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_PYTHON_CMAKE) return() endif() set(__INCLUDED_GR_PYTHON_CMAKE TRUE) ######################################################################## # Setup the python interpreter: # This allows the user to specify a specific interpreter, # or finds the interpreter via the built-in cmake module. ######################################################################## #this allows the user to override PYTHON_EXECUTABLE if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) #otherwise if not set, try to automatically find it else(PYTHON_EXECUTABLE) #use the built-in find script find_package(PythonInterp 2) #and if that fails use the find program routine if(NOT PYTHONINTERP_FOUND) find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5) if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) endif(PYTHON_EXECUTABLE) endif(NOT PYTHONINTERP_FOUND) endif(PYTHON_EXECUTABLE) #make the path to the executable appear in the cmake gui set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter") #make sure we can use -B with python (introduced in 2.6) if(PYTHON_EXECUTABLE) execute_process( COMMAND ${PYTHON_EXECUTABLE} -B -c "" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT ) if(PYTHON_HAS_DASH_B_RESULT EQUAL 0) set(PYTHON_DASH_B "-B") endif() endif(PYTHON_EXECUTABLE) ######################################################################## # Check for the existence of a python module: # - desc a string description of the check # - mod the name of the module to import # - cmd an additional command to run # - have the result variable to set ######################################################################## macro(GR_PYTHON_CHECK_MODULE desc mod cmd have) message(STATUS "") message(STATUS "Python checking for ${desc}") execute_process( COMMAND ${PYTHON_EXECUTABLE} -c " ######################################### try: import ${mod} except: exit(-1) try: assert ${cmd} except: exit(-1) #########################################" RESULT_VARIABLE ${have} ) if(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - found") set(${have} TRUE) else(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - not found") set(${have} FALSE) endif(${have} EQUAL 0) endmacro(GR_PYTHON_CHECK_MODULE) ######################################################################## # Sets the python installation directory GR_PYTHON_DIR ######################################################################## execute_process(COMMAND ${PYTHON_EXECUTABLE} -c " from distutils import sysconfig print sysconfig.get_python_lib(plat_specific=True, prefix='') " OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR) ######################################################################## # Create an always-built target with a unique name # Usage: GR_UNIQUE_TARGET( ) ######################################################################## function(GR_UNIQUE_TARGET desc) file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) add_custom_target(${_target} ALL DEPENDS ${ARGN}) endfunction(GR_UNIQUE_TARGET) ######################################################################## # Install python sources (also builds and installs byte-compiled python) ######################################################################## function(GR_PYTHON_INSTALL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN}) #################################################################### if(GR_PYTHON_INSTALL_FILES) #################################################################### install(${ARGN}) #installs regular python files #create a list of all generated files unset(pysrcfiles) unset(pycfiles) unset(pyofiles) foreach(pyfile ${GR_PYTHON_INSTALL_FILES}) get_filename_component(pyfile ${pyfile} ABSOLUTE) list(APPEND pysrcfiles ${pyfile}) #determine if this file is in the source or binary directory file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile}) string(LENGTH "${source_rel_path}" source_rel_path_len) file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile}) string(LENGTH "${binary_rel_path}" binary_rel_path_len) #and set the generated path appropriately if(${source_rel_path_len} GREATER ${binary_rel_path_len}) set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path}) else() set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path}) endif() list(APPEND pycfiles ${pygenfile}c) list(APPEND pyofiles ${pygenfile}o) #ensure generation path exists get_filename_component(pygen_path ${pygenfile} PATH) file(MAKE_DIRECTORY ${pygen_path}) endforeach(pyfile) #the command to generate the pyc files add_custom_command( DEPENDS ${pysrcfiles} OUTPUT ${pycfiles} COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles} ) #the command to generate the pyo files add_custom_command( DEPENDS ${pysrcfiles} OUTPUT ${pyofiles} COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles} ) #create install rule and add generated files to target list set(python_install_gen_targets ${pycfiles} ${pyofiles}) install(FILES ${python_install_gen_targets} DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} ) #################################################################### elseif(GR_PYTHON_INSTALL_PROGRAMS) #################################################################### file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native) foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS}) get_filename_component(pyfile_name ${pyfile} NAME) get_filename_component(pyfile ${pyfile} ABSOLUTE) string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe") list(APPEND python_install_gen_targets ${pyexefile}) get_filename_component(pyexefile_path ${pyexefile} PATH) file(MAKE_DIRECTORY ${pyexefile_path}) add_custom_command( OUTPUT ${pyexefile} DEPENDS ${pyfile} COMMAND ${PYTHON_EXECUTABLE} -c \"open('${pyexefile}', 'w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())\" COMMENT "Shebangin ${pyfile_name}" ) #on windows, python files need an extension to execute get_filename_component(pyfile_ext ${pyfile} EXT) if(WIN32 AND NOT pyfile_ext) set(pyfile_name "${pyfile_name}.py") endif() install(PROGRAMS ${pyexefile} RENAME ${pyfile_name} DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} ) endforeach(pyfile) endif() GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets}) endfunction(GR_PYTHON_INSTALL) ######################################################################## # Write the python helper script that generates byte code files ######################################################################## file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py " import sys, py_compile files = sys.argv[1:] srcs, gens = files[:len(files)/2], files[len(files)/2:] for src, gen in zip(srcs, gens): py_compile.compile(file=src, cfile=gen, doraise=True) ") gnss-sdr-0.0.6/drivers/gr-dbfcttc/cmake/cmake_uninstall.cmake.in0000644000175000017500000000253212576764164024142 0ustar carlescarles# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSEIF(IS_SYMLINK "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) gnss-sdr-0.0.6/drivers/gr-dbfcttc/examples/0000755000175000017500000000000012576764164020116 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/examples/README0000644000175000017500000000025012576764164020773 0ustar carlescarlesIt is considered good practice to add examples in here to demonstrate the functionality of your OOT module. Python scripts, GRC flow graphs or other code can go here. gnss-sdr-0.0.6/drivers/gr-dbfcttc/build/0000755000175000017500000000000012576764164017377 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/build/.gitignore0000644000175000017500000000010612576764164021364 0ustar carlescarles# Ignore everything in this directory * # Except this file !.gitignoregnss-sdr-0.0.6/drivers/gr-dbfcttc/apps/0000755000175000017500000000000012576764164017243 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/apps/CMakeLists.txt0000644000175000017500000000152412576764164022005 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. include(GrPython) GR_PYTHON_INSTALL( PROGRAMS DESTINATION bin ) gnss-sdr-0.0.6/drivers/gr-dbfcttc/python/0000755000175000017500000000000012576764164017621 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/python/.unittests/0000755000175000017500000000000012576764164021741 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/python/.unittests/python/0000755000175000017500000000000012576764164023262 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/python/.unittests/python/qa_raw_array.xml0000644000175000017500000000042212576764164026452 0ustar carlescarles gnss-sdr-0.0.6/drivers/gr-dbfcttc/python/qa_raw_array.py0000755000175000017500000000237212576764164022652 0ustar carlescarles#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright 2014 <+YOU OR YOUR COMPANY+>. # # This is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this software; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # from gnuradio import gr, gr_unittest from gnuradio import blocks import dbfcttc_swig as dbfcttc class qa_raw_array (gr_unittest.TestCase): def setUp (self): self.tb = gr.top_block () def tearDown (self): self.tb = None def test_001_t (self): my_array=dbfcttc.raw_array("en4",8,70,5,5000000) # set up fg self.tb.run () # check data if __name__ == '__main__': gr_unittest.run(qa_raw_array, "qa_raw_array.xml") gnss-sdr-0.0.6/drivers/gr-dbfcttc/python/CMakeLists.txt0000644000175000017500000000311212576764164022356 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py DESTINATION ${GR_PYTHON_DIR}/dbfcttc ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gnuradio-dbfcttc) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_raw_array ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_raw_array.py) gnss-sdr-0.0.6/drivers/gr-dbfcttc/python/build_utils_codes.py0000644000175000017500000000255712576764164023700 0ustar carlescarles# # Copyright 2004 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # def i_code (code3): return code3[0] def o_code (code3): if len (code3) >= 2: return code3[1] else: return code3[0] def tap_code (code3): if len (code3) >= 3: return code3[2] else: return code3[0] def i_type (code3): return char_to_type[i_code (code3)] def o_type (code3): return char_to_type[o_code (code3)] def tap_type (code3): return char_to_type[tap_code (code3)] char_to_type = {} char_to_type['s'] = 'short' char_to_type['i'] = 'int' char_to_type['f'] = 'float' char_to_type['c'] = 'gr_complex' char_to_type['b'] = 'unsigned char' gnss-sdr-0.0.6/drivers/gr-dbfcttc/python/__init__.py0000644000175000017500000000341012576764164021730 0ustar carlescarles# # Copyright 2008,2009 Free Software Foundation, Inc. # # This application is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This application is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # The presence of this file turns this directory into a Python package ''' This is the GNU Radio DBFCTTC module. Place your Python package description here (python/__init__.py). ''' # ---------------------------------------------------------------- # Temporary workaround for ticket:181 (swig+python problem) import sys _RTLD_GLOBAL = 0 try: from dl import RTLD_GLOBAL as _RTLD_GLOBAL except ImportError: try: from DLFCN import RTLD_GLOBAL as _RTLD_GLOBAL except ImportError: pass if _RTLD_GLOBAL != 0: _dlopenflags = sys.getdlopenflags() sys.setdlopenflags(_dlopenflags|_RTLD_GLOBAL) # ---------------------------------------------------------------- # import swig generated symbols into the dbfcttc namespace from dbfcttc_swig import * # import any pure python here # # ---------------------------------------------------------------- # Tail of workaround if _RTLD_GLOBAL != 0: sys.setdlopenflags(_dlopenflags) # Restore original flags # ---------------------------------------------------------------- gnss-sdr-0.0.6/drivers/gr-dbfcttc/python/build_utils.py0000644000175000017500000001610512576764164022515 0ustar carlescarles# # Copyright 2004,2009,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """Misc utilities used at build time """ import re, os, os.path from build_utils_codes import * # set srcdir to the directory that contains Makefile.am try: srcdir = os.environ['srcdir'] except KeyError, e: srcdir = "." srcdir = srcdir + '/' # set do_makefile to either true or false dependeing on the environment try: if os.environ['do_makefile'] == '0': do_makefile = False else: do_makefile = True except KeyError, e: do_makefile = False # set do_sources to either true or false dependeing on the environment try: if os.environ['do_sources'] == '0': do_sources = False else: do_sources = True except KeyError, e: do_sources = True name_dict = {} def log_output_name (name): (base, ext) = os.path.splitext (name) ext = ext[1:] # drop the leading '.' entry = name_dict.setdefault (ext, []) entry.append (name) def open_and_log_name (name, dir): global do_sources if do_sources: f = open (name, dir) else: f = None log_output_name (name) return f def expand_template (d, template_filename, extra = ""): '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file ''' global do_sources output_extension = extract_extension (template_filename) template = open_src (template_filename, 'r') output_name = d['NAME'] + extra + '.' + output_extension log_output_name (output_name) if do_sources: output = open (output_name, 'w') do_substitution (d, template, output) output.close () template.close () def output_glue (dirname): output_makefile_fragment () output_ifile_include (dirname) def output_makefile_fragment (): global do_makefile if not do_makefile: return # overwrite the source, which must be writable; this should have been # checked for beforehand in the top-level Makefile.gen.gen . f = open (os.path.join (os.environ.get('gendir', os.environ.get('srcdir', '.')), 'Makefile.gen'), 'w') f.write ('#\n# This file is machine generated. All edits will be overwritten\n#\n') output_subfrag (f, 'h') output_subfrag (f, 'i') output_subfrag (f, 'cc') f.close () def output_ifile_include (dirname): global do_sources if do_sources: f = open ('%s_generated.i' % (dirname,), 'w') f.write ('//\n// This file is machine generated. All edits will be overwritten\n//\n') files = name_dict.setdefault ('i', []) files.sort () f.write ('%{\n') for file in files: f.write ('#include <%s>\n' % (file[0:-1] + 'h',)) f.write ('%}\n\n') for file in files: f.write ('%%include <%s>\n' % (file,)) def output_subfrag (f, ext): files = name_dict.setdefault (ext, []) files.sort () f.write ("GENERATED_%s =" % (ext.upper ())) for file in files: f.write (" \\\n\t%s" % (file,)) f.write ("\n\n") def extract_extension (template_name): # template name is something like: GrFIRfilterXXX.h.t # we return everything between the penultimate . and .t mo = re.search (r'\.([a-z]+)\.t$', template_name) if not mo: raise ValueError, "Incorrectly formed template_name '%s'" % (template_name,) return mo.group (1) def open_src (name, mode): global srcdir return open (os.path.join (srcdir, name), mode) def do_substitution (d, in_file, out_file): def repl (match_obj): key = match_obj.group (1) # print key return d[key] inp = in_file.read () out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, inp) out_file.write (out) copyright = '''/* -*- c++ -*- */ /* * Copyright 2003,2004 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ ''' def is_complex (code3): if i_code (code3) == 'c' or o_code (code3) == 'c': return '1' else: return '0' def standard_dict (name, code3, package='gr'): d = {} d['NAME'] = name d['NAME_IMPL'] = name+'_impl' d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) d['GUARD_NAME_IMPL'] = 'INCLUDED_%s_%s_IMPL_H' % (package.upper(), name.upper()) d['BASE_NAME'] = re.sub ('^' + package + '_', '', name) d['SPTR_NAME'] = '%s_sptr' % name d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten' d['COPYRIGHT'] = copyright d['TYPE'] = i_type (code3) d['I_TYPE'] = i_type (code3) d['O_TYPE'] = o_type (code3) d['TAP_TYPE'] = tap_type (code3) d['IS_COMPLEX'] = is_complex (code3) return d def standard_dict2 (name, code3, package): d = {} d['NAME'] = name d['BASE_NAME'] = name d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten' d['COPYRIGHT'] = copyright d['TYPE'] = i_type (code3) d['I_TYPE'] = i_type (code3) d['O_TYPE'] = o_type (code3) d['TAP_TYPE'] = tap_type (code3) d['IS_COMPLEX'] = is_complex (code3) return d def standard_impl_dict2 (name, code3, package): d = {} d['NAME'] = name d['IMPL_NAME'] = name d['BASE_NAME'] = name.rstrip("impl").rstrip("_") d['GUARD_NAME'] = 'INCLUDED_%s_%s_H' % (package.upper(), name.upper()) d['WARNING'] = 'WARNING: this file is machine generated. Edits will be overwritten' d['COPYRIGHT'] = copyright d['FIR_TYPE'] = "fir_filter_" + code3 d['CFIR_TYPE'] = "fir_filter_" + code3[0:2] + 'c' d['TYPE'] = i_type (code3) d['I_TYPE'] = i_type (code3) d['O_TYPE'] = o_type (code3) d['TAP_TYPE'] = tap_type (code3) d['IS_COMPLEX'] = is_complex (code3) return d gnss-sdr-0.0.6/drivers/gr-dbfcttc/grc/0000755000175000017500000000000012576764164017053 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/grc/top_block.py0000755000175000017500000000672512576764164021416 0ustar carlescarles#!/usr/bin/env python ################################################## # Gnuradio Python Flow Graph # Title: Top Block # Generated: Tue Feb 11 16:02:41 2014 ################################################## from gnuradio import blocks from gnuradio import eng_notation from gnuradio import gr from gnuradio import wxgui from gnuradio.eng_option import eng_option from gnuradio.fft import window from gnuradio.filter import firdes from gnuradio.wxgui import fftsink2 from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import dbfcttc import wx class top_block(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 32000 ################################################## # Blocks ################################################## self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.dbfcttc_raw_array_0 = dbfcttc.raw_array("en4", 8, 70, 10, 5000000) self.blocks_null_sink_1_5 = blocks.null_sink(gr.sizeof_gr_complex*1) self.blocks_null_sink_1_4 = blocks.null_sink(gr.sizeof_gr_complex*1) self.blocks_null_sink_1_2 = blocks.null_sink(gr.sizeof_gr_complex*1) self.blocks_null_sink_1_1 = blocks.null_sink(gr.sizeof_gr_complex*1) self.blocks_null_sink_1_0 = blocks.null_sink(gr.sizeof_gr_complex*1) self.blocks_null_sink_1 = blocks.null_sink(gr.sizeof_gr_complex*1) self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex*1) ################################################## # Connections ################################################## self.connect((self.dbfcttc_raw_array_0, 1), (self.blocks_null_sink_0, 0)) self.connect((self.dbfcttc_raw_array_0, 2), (self.blocks_null_sink_1_0, 0)) self.connect((self.dbfcttc_raw_array_0, 3), (self.blocks_null_sink_1, 0)) self.connect((self.dbfcttc_raw_array_0, 4), (self.blocks_null_sink_1_1, 0)) self.connect((self.dbfcttc_raw_array_0, 5), (self.blocks_null_sink_1_2, 0)) self.connect((self.dbfcttc_raw_array_0, 6), (self.blocks_null_sink_1_4, 0)) self.connect((self.dbfcttc_raw_array_0, 7), (self.blocks_null_sink_1_5, 0)) self.connect((self.dbfcttc_raw_array_0, 0), (self.wxgui_fftsink2_0, 0)) # QT sink close method reimplementation def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate) if __name__ == '__main__': import ctypes import os if os.name == 'posix': try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print "Warning: failed to XInitThreads()" parser = OptionParser(option_class=eng_option, usage="%prog: [options]") (options, args) = parser.parse_args() tb = top_block() tb.Start(True) tb.Wait() gnss-sdr-0.0.6/drivers/gr-dbfcttc/grc/CMakeLists.txt0000644000175000017500000000145712576764164021622 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # install(FILES dbfcttc_raw_array.xml DESTINATION share/gnuradio/grc/blocks ) gnss-sdr-0.0.6/drivers/gr-dbfcttc/grc/test_grc2.grc0000644000175000017500000002411312576764164021445 0ustar carlescarles Tue Feb 11 16:00:31 2014 options id top_block _enabled True title author description window_size 1280, 1024 generate_options wx_gui category Custom run_options prompt run True max_nouts 0 realtime_scheduling _coordinate (10, 10) _rotation 0 variable id samp_rate _enabled True value 32000 _coordinate (10, 170) _rotation 0 blocks_null_sink id blocks_null_sink_1_0 _enabled True type complex vlen 1 affinity _coordinate (705, 195) _rotation 0 blocks_null_sink id blocks_null_sink_0 _enabled True type complex vlen 1 affinity _coordinate (724, 150) _rotation 0 blocks_null_sink id blocks_null_sink_1 _enabled True type complex vlen 1 affinity _coordinate (723, 247) _rotation 0 blocks_null_sink id blocks_null_sink_1_1 _enabled True type complex vlen 1 affinity _coordinate (738, 304) _rotation 0 blocks_null_sink id blocks_null_sink_1_2 _enabled True type complex vlen 1 affinity _coordinate (723, 376) _rotation 0 blocks_null_sink id blocks_null_sink_1_4 _enabled True type complex vlen 1 affinity _coordinate (731, 444) _rotation 0 blocks_null_sink id blocks_null_sink_1_5 _enabled True type complex vlen 1 affinity _coordinate (612, 479) _rotation 0 dbfcttc_raw_array id dbfcttc_raw_array_0 _enabled True src_device en4 number_of_channels 8 snapshots_per_frame 70 inter_frame_delay 10 sampling_freq 5000000 affinity minoutbuf 0 maxoutbuf 0 _coordinate (212, 113) _rotation 0 wxgui_fftsink2 id wxgui_fftsink2_0 _enabled True type complex title FFT Plot samp_rate samp_rate baseband_freq 0 y_per_div 10 y_divs 10 ref_level 0 ref_scale 2.0 fft_size 1024 fft_rate 15 peak_hold False average False avg_alpha 0 win None win_size grid_pos notebook freqvar None affinity _coordinate (897, 63) _rotation 0 dbfcttc_raw_array_0 blocks_null_sink_0 1 0 dbfcttc_raw_array_0 blocks_null_sink_1_0 2 0 dbfcttc_raw_array_0 blocks_null_sink_1 3 0 dbfcttc_raw_array_0 blocks_null_sink_1_1 4 0 dbfcttc_raw_array_0 blocks_null_sink_1_2 5 0 dbfcttc_raw_array_0 blocks_null_sink_1_4 6 0 dbfcttc_raw_array_0 blocks_null_sink_1_5 7 0 dbfcttc_raw_array_0 wxgui_fftsink2_0 0 0 gnss-sdr-0.0.6/drivers/gr-dbfcttc/grc/dbfcttc_raw_array.xml0000644000175000017500000000405612576764164023262 0ustar carlescarles raw_array dbfcttc_raw_array dbfcttc import dbfcttc dbfcttc.raw_array($*src_device, $number_of_channels, $snapshots_per_frame, $inter_frame_delay, $sampling_freq) Ethernet Device src_device en4 string Number of Array channels number_of_channels 8 int Number of Snapshots per Ethernet frame snapshots_per_frame 70 int Delay between frames [bytes] inter_frame_delay 10 int Sampling frequency [Hz] sampling_freq 5000000 int CH1 complex CH2 complex CH3 complex CH4 complex CH5 complex CH6 complex CH7 complex CH8 complex gnss-sdr-0.0.6/drivers/gr-dbfcttc/README0000644000175000017500000000014712576764164017162 0ustar carlescarlesHOW TO BUILD GR-DBFCTTC ---------------------- Source maintainer: Javier Arribas jarribas@cttc.es TODOgnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/0000755000175000017500000000000012576764164017046 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/qa_dbfcttc.h0000644000175000017500000000237212576764164021315 0ustar carlescarles/* * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef _QA_DBFCTTC_H_ #define _QA_DBFCTTC_H_ #include #include //! collect all the tests for the gr-filter directory class __GR_ATTR_EXPORT qa_dbfcttc { public: //! return suite of tests for all of gr-filter directory static CppUnit::TestSuite *suite(); }; #endif /* _QA_DBFCTTC_H_ */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/test_dbfcttc.cc0000644000175000017500000000325612576764164022033 0ustar carlescarles/*! * \file test_dbfcttc.cc * \brief GNSS Array platform driver test. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "qa_dbfcttc.h" #include int main (int argc, char **argv) { CppUnit::TextTestRunner runner; std::ofstream xmlfile(get_unittest_path("dbfcttc.xml").c_str()); CppUnit::XmlOutputter *xmlout = new CppUnit::XmlOutputter(&runner.result(), xmlfile); runner.addTest(qa_dbfcttc::suite()); runner.setOutputter(xmlout); bool was_successful = runner.run("", false); return was_successful ? 0 : 1; } gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/CMakeLists.txt0000644000175000017500000000501112576764164021603 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Setup library ######################################################################## include(GrPlatform) #define LIB_SUFFIX include_directories(${Boost_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIRS}) list(APPEND dbfcttc_sources raw_array_impl.cc ) set(dbfcttc_sources "${dbfcttc_sources}" PARENT_SCOPE) add_library(gnuradio-dbfcttc SHARED ${dbfcttc_sources}) target_link_libraries(gnuradio-dbfcttc ${Boost_LIBRARIES} ${PCAP_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) set_target_properties(gnuradio-dbfcttc PROPERTIES DEFINE_SYMBOL "gnuradio_dbfcttc_EXPORTS") if(APPLE) set_target_properties(gnuradio-dbfcttc PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" ) endif(APPLE) ######################################################################## # Install built library files ######################################################################## install(TARGETS gnuradio-dbfcttc LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file RUNTIME DESTINATION bin # .dll file ) ######################################################################## # Build and register unit test ######################################################################## include(GrTest) include_directories(${CPPUNIT_INCLUDE_DIRS}) list(APPEND test_dbfcttc_sources ${CMAKE_CURRENT_SOURCE_DIR}/test_dbfcttc.cc ${CMAKE_CURRENT_SOURCE_DIR}/qa_dbfcttc.cc ${CMAKE_CURRENT_SOURCE_DIR}/qa_raw_array.cc ) add_executable(test-dbfcttc ${test_dbfcttc_sources}) target_link_libraries( test-dbfcttc ${GNURADIO_RUNTIME_LIBRARIES} ${PCAP_LIBRARIES} ${Boost_LIBRARIES} ${CPPUNIT_LIBRARIES} gnuradio-dbfcttc ) GR_ADD_TEST(test_dbfcttc test-dbfcttc) gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/raw_array_impl.h0000644000175000017500000000617212576764164022235 0ustar carlescarles/*! * \file raw_array_impl.h * \brief GNU Radio source block to acces to experimental GNSS Array platform. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_DBFCTTC_RAW_ARRAY_IMPL_H #define INCLUDED_DBFCTTC_RAW_ARRAY_IMPL_H #include //#include #include #include namespace gr { namespace dbfcttc { class raw_array_impl : public raw_array { private: //omni_mutex d_mutex; // no longer available in GNU Radio boost::mutex d_mutex; pcap_t* descr; //ethernet pcap device descriptor int fifo_pipe[2]; gr_complex **fifo_buff_ch; int fifo_read_ptr; int fifo_write_ptr; int fifo_items; const char *d_src_device; short d_number_of_channels; int d_snapshots_per_frame; int d_inter_frame_delay; int d_sampling_freq; bool flag_16_bits_sample; bool d_flag_start_frame; bool d_fifo_full; int d_last_frame_counter; int d_num_rx_errors; boost::thread *d_pcap_thread; /*! * \brief * Opens the ethernet device using libpcap raw capture mode * If any of these fail, the fuction retuns the error and exits. */ bool open(); /*! * \brief * Configure the Array hardware platform with the selected parameters. Uses the same ethernet connection */ bool configure_array(); /*! * \brief * Start the array operation. Uses the same ethernet connection */ bool start_array(); /*! * \brief * Stop the array operation. Uses the same ethernet connection */ bool stop_array(); void my_pcap_loop_thread(pcap_t *pcap_handle); void pcap_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet); static void static_pcap_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet); public: raw_array_impl(const char *src_device,short number_of_channels, int snapshots_per_frame, int inter_frame_delay, int sampling_freq); ~raw_array_impl(); // Where all the action really happens int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; } // namespace dbfcttc } // namespace gr #endif /* INCLUDED_DBFCTTC_RAW_ARRAY_IMPL_H */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/qa_dbfcttc.cc0000644000175000017500000000244512576764164021454 0ustar carlescarles/* * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ /* * This class gathers together all the test cases for the gr-filter * directory into a single test suite. As you create new test cases, * add them here. */ #include "qa_dbfcttc.h" #include "qa_raw_array.h" CppUnit::TestSuite * qa_dbfcttc::suite() { CppUnit::TestSuite *s = new CppUnit::TestSuite("dbfcttc"); s->addTest(gr::dbfcttc::qa_raw_array::suite()); return s; } gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/qa_raw_array.cc0000644000175000017500000000265412576764164022034 0ustar carlescarles/*! * \file qa_raw_array.cc * \brief GNU Radio source block to acces to experimental GNSS Array platform. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include "qa_raw_array.h" #include namespace gr { namespace dbfcttc { void qa_raw_array::t1() { // Put test here } } /* namespace dbfcttc */ } /* namespace gr */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/qa_raw_array.h0000644000175000017500000000312412576764164021667 0ustar carlescarles/*! * \file qa_raw_array.h * \brief GNU Radio source block to acces to experimental GNSS Array platform. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef _QA_RAW_ARRAY_H_ #define _QA_RAW_ARRAY_H_ #include #include namespace gr { namespace dbfcttc { class qa_raw_array : public CppUnit::TestCase { public: CPPUNIT_TEST_SUITE(qa_raw_array); CPPUNIT_TEST(t1); CPPUNIT_TEST_SUITE_END(); private: void t1(); }; } /* namespace dbfcttc */ } /* namespace gr */ #endif /* _QA_RAW_ARRAY_H_ */ gnss-sdr-0.0.6/drivers/gr-dbfcttc/lib/raw_array_impl.cc0000644000175000017500000003743212576764164022376 0ustar carlescarles/*! * \file raw_array_impl.cc * \brief GNU Radio source block to acces to experimental GNSS Array platform. * \author Javier Arribas, 2014. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "raw_array_impl.h" #include #include #include #include #include #include #include #define FIFO_SIZE 1000000 #define DBFCTTC_NUM_CHANNELS 8 namespace gr { namespace dbfcttc { raw_array::sptr raw_array::make(const char *src_device,short number_of_channels, int snapshots_per_frame, int inter_frame_delay, int sampling_freq) { return gnuradio::get_initial_sptr (new raw_array_impl(src_device, number_of_channels, snapshots_per_frame, inter_frame_delay, sampling_freq)); } /* * The private constructor */ raw_array_impl::raw_array_impl(const char *src_device,short number_of_channels, int snapshots_per_frame, int inter_frame_delay, int sampling_freq) : gr::sync_block("raw_array", gr::io_signature::make(0, 0, 0), gr::io_signature::make(8, 8, sizeof(gr_complex))) { // constructor code here fprintf(stdout,"DBFCTTC Start\n"); d_src_device=src_device; d_number_of_channels=number_of_channels; d_snapshots_per_frame=snapshots_per_frame; d_inter_frame_delay=inter_frame_delay; d_sampling_freq=sampling_freq; d_flag_start_frame=true; d_fifo_full=false; d_last_frame_counter=0; d_num_rx_errors=0; flag_16_bits_sample=true; //allocate signal samples buffer //TODO: Check memory pointers fifo_buff_ch=new gr_complex*[DBFCTTC_NUM_CHANNELS]; for (int i=0;i beamforming config // command=2 -> start // command=3 -> stop // command=4 -> raw array config char data[20]; for(int i=0;i<20;i++) { data[i]=0x00; } data[0]=4; //command to activate RAW array data[1]=d_number_of_channels; data[2]=d_snapshots_per_frame>>8; data[3]=d_snapshots_per_frame & 255; printf("\n Total bytes in snapshots payload = %i\n",d_snapshots_per_frame*d_number_of_channels*2); printf("\n Estimated eth RAW frame size [bytes] %i\n",12+2+3+d_snapshots_per_frame*d_number_of_channels*2+1); data[4]=d_inter_frame_delay>>8; data[5]=d_inter_frame_delay & 255; data[6]=0xB; data[7]=0xF; //send the frame struct ether_header myheader; myheader.ether_type=0xbfcd; //this is the ethenet layer II protocol ID for the CTTC array hardware memset(myheader.ether_dhost,0xff,sizeof(myheader.ether_dhost)); memset(myheader.ether_shost,0x11,sizeof(myheader.ether_shost)); unsigned char frame[sizeof(struct ether_header)+sizeof(data)]; memcpy(frame,&myheader,sizeof(struct ether_header)); memcpy(frame+sizeof(struct ether_header),&data,sizeof(data)); if (pcap_inject(descr,frame,sizeof(frame))==-1) { printf("Error sending configuration packet\n"); pcap_perror(descr,0); return false; }else{ printf("Sent configuration packet OK\n"); return true; } } bool raw_array_impl::start_array() { char data[20]; for(int i=0;i<20;i++) { data[i]=0x00; } data[0]=2; //command to start the array operation (configured previously) //send the frame struct ether_header myheader; myheader.ether_type=0xbfcd; //this is the ethenet layer II protocol ID for the CTTC array hardware memset(myheader.ether_dhost,0xff,sizeof(myheader.ether_dhost)); memset(myheader.ether_shost,0x11,sizeof(myheader.ether_shost)); unsigned char frame[sizeof(struct ether_header)+sizeof(data)]; memcpy(frame,&myheader,sizeof(struct ether_header)); memcpy(frame+sizeof(struct ether_header),&data,sizeof(data)); if (pcap_inject(descr,frame,sizeof(frame))==-1) { printf("Error sending start packet\n"); pcap_perror(descr,0); return false; }else{ printf("Sent start packet OK\n"); return true; } } bool raw_array_impl::stop_array() { char data[20]; for(int i=0;i<20;i++) { data[i]=0x00; } data[0]=3; //command to stop the array operation (configured previously) //send the frame struct ether_header myheader; myheader.ether_type=0xbfcd; //this is the ethenet layer II protocol ID for the CTTC array hardware memset(myheader.ether_dhost,0xff,sizeof(myheader.ether_dhost)); memset(myheader.ether_shost,0x11,sizeof(myheader.ether_shost)); unsigned char frame[sizeof(struct ether_header)+sizeof(data)]; memcpy(frame,&myheader,sizeof(struct ether_header)); memcpy(frame+sizeof(struct ether_header),&data,sizeof(data)); if (pcap_inject(descr,frame,sizeof(frame))==-1) { printf("Error sending stop packet\n"); pcap_perror(descr,0); return false; }else{ printf("Sent stop packet OK\n"); return true; } } /* * Our virtual destructor. */ raw_array_impl::~raw_array_impl() { // destructor code here if (stop_array()==true) { printf("Array stopped!\n"); }else{ exit(1); //ethernet error! } if(descr != NULL) { pcap_breakloop(descr); d_pcap_thread->join(); pcap_close(descr); } for (int i=0;ipcap_callback(args, pkthdr, packet); } void raw_array_impl::pcap_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet) { boost::mutex::scoped_lock lock(d_mutex); // hold mutex for duration of this function int numframebyte; short int real,imag; // eth frame parameters int number_of_channels; unsigned short int snapshots_per_frame; // **** CTTC DBF PACKET DECODER **** if ((packet[12]==0xCD) & (packet[13]==0xBF)) { //printf("."); // control parameters number_of_channels=(int)packet[14]; //std::cout<<"number_of_channels="<(real, imag); fifo_buff_ch[ch][fifo_write_ptr] = std::complex(imag, real); //inverted due to inversion in front-end //std::cout<<"["<=num_samples_readed) { //read all in a single memcpy for (int ch=0;ch )*num_samples_readed); } fifo_read_ptr=fifo_read_ptr+num_samples_readed; //increase the fifo pointer if (fifo_read_ptr==FIFO_SIZE) fifo_read_ptr=0; }else{ //two step wrap read for (int ch=0;ch )*aligned_read_items); } fifo_read_ptr=fifo_read_ptr+aligned_read_items; //increase the fifo pointer if (fifo_read_ptr==FIFO_SIZE) fifo_read_ptr=0; for (int ch=0;ch)*(num_samples_readed-aligned_read_items)); } fifo_read_ptr=fifo_read_ptr+(num_samples_readed-aligned_read_items); //increase the fifo pointer } fifo_items=fifo_items-num_samples_readed; // int num_samples_readed=0; // for(int i=0;i 0) { // //TODO: optimize-me with memcpy!! // for (int ch=0;ch. # ######################################################################## # Include swig generation macros ######################################################################## find_package(SWIG) find_package(PythonLibs) if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND) return() endif() include(GrSwig) include(GrPython) ######################################################################## # Setup swig generation ######################################################################## set(GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS ${GNURADIO_RUNTIME_INCLUDE_DIRS}/gnuradio/swig) set(GR_SWIG_INCLUDE_DIRS ${GR_GN3S_INCLUDE_DIRS} ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ) set(GR_SWIG_LIBRARIES gr-gn3s gnuradio-runtime) set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/gn3s_swig_doc.i) set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include) GR_SWIG_MAKE(gn3s_swig gn3s_swig.i) ######################################################################## # Install the build swig module ######################################################################## GR_SWIG_INSTALL(TARGETS gn3s_swig DESTINATION ${GR_PYTHON_DIR}/gn3s) ######################################################################## # Install swig .i files for development ######################################################################## install( FILES gn3s_swig.i ${CMAKE_CURRENT_BINARY_DIR}/gn3s_swig_doc.i DESTINATION ${GNURADIO_RUNTIME_INCLUDE_DIR}/gn3s/swig ) gnss-sdr-0.0.6/drivers/gr-gn3s/swig/gn3s_swig.i0000644000175000017500000000036712576764164020575 0ustar carlescarles/* -*- c++ -*- */ #define GN3S_API %include "gnuradio.i" // the common stuff //load generated python docstrings %include "gn3s_swig_doc.i" %{ #include "gn3s_source_cc.h" %} GR_SWIG_BLOCK_MAGIC(gn3s,source_cc); %include "gn3s_source_cc.h" gnss-sdr-0.0.6/drivers/gr-gn3s/docs/0000755000175000017500000000000012576764164016471 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/CMakeLists.txt0000644000175000017500000000255112576764164021234 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Setup dependencies ######################################################################## find_package(Doxygen) ######################################################################## # Begin conditional configuration ######################################################################## if(ENABLE_DOXYGEN) ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(doxygen) endif(ENABLE_DOXYGEN) gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/0000755000175000017500000000000012576764164020146 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/other/0000755000175000017500000000000012576764164021267 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/other/group_defs.dox0000644000175000017500000000031712576764164024141 0ustar carlescarles/*! * \defgroup block GNU Radio HOWTO C++ Signal Processing Blocks * \brief All C++ blocks that can be used from the HOWTO GNU Radio * module are listed here or in the subcategories below. * */ gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/other/main_page.dox0000644000175000017500000000041712576764164023725 0ustar carlescarles/*! \mainpage Welcome to the GNU Radio HOWTO Block This is the intro page for the Doxygen manual generated for the HOWTO block (docs/doxygen/other/main_page.dox). Edit it to add more detailed documentation about the new GNU Radio modules contained in this project. */ gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/Doxyfile.in0000644000175000017500000017301212576764164022265 0ustar carlescarles# Doxyfile 1.5.7.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "GNU Radio's HOWTO Package" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 4 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = NO # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = NO # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= NO # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text " # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_srcdir@ @top_builddir@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ @abs_top_builddir@/docs/doxygen/xml \ @abs_top_builddir@/docs/doxygen/other/doxypy.py \ @abs_top_builddir@/_CPack_Packages \ @abs_top_srcdir@/cmake # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.deps/* \ */.libs/* \ */.svn/* \ */CVS/* \ */__init__.py \ */qa_*.cc \ */qa_*.h \ */qa_*.py # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = ad9862 \ numpy \ *swig* \ *Swig* \ *my_top_block* \ *my_graph* \ *app_top_block* \ *am_rx_graph* \ *_queue_watcher_thread* \ *parse* \ *MyFrame* \ *MyApp* \ *PyObject* \ *wfm_rx_block* \ *_sptr* \ *debug* \ *wfm_rx_sca_block* \ *tv_rx_block* \ *wxapt_rx_block* \ *example_signal* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = *.py=@top_srcdir@/gnuradio-core/doc/other/doxypy.py # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = NO # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = @enable_html_docs@ # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = YES # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # Qt Help Project / Namespace. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # Qt Help Project / Virtual Folders. QHP_VIRTUAL_FOLDER = doc # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file . QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = YES # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 180 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = @enable_latex_docs@ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = @enable_xml_docs@ # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @HAVE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/swig_doc.py0000644000175000017500000002072112576764164022320 0ustar carlescarles# # Copyright 2010,2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Creates the swig_doc.i SWIG interface file. Execute using: python swig_doc.py xml_path outputfilename The file instructs SWIG to transfer the doxygen comments into the python docstrings. """ import sys try: from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base except ImportError: from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base def py_name(name): bits = name.split('_') return '_'.join(bits[1:]) def make_name(name): bits = name.split('_') return bits[0] + '_make_' + '_'.join(bits[1:]) class Block(object): """ Checks if doxyxml produced objects correspond to a gnuradio block. """ @classmethod def includes(cls, item): if not isinstance(item, DoxyClass): return False # Check for a parsing error. if item.error(): return False return item.has_member(make_name(item.name()), DoxyFriend) def utoascii(text): """ Convert unicode text into ascii and escape quotes. """ if text is None: return '' out = text.encode('ascii', 'replace') out = out.replace('"', '\\"') return out def combine_descriptions(obj): """ Combines the brief and detailed descriptions of an object together. """ description = [] bd = obj.brief_description.strip() dd = obj.detailed_description.strip() if bd: description.append(bd) if dd: description.append(dd) return utoascii('\n\n'.join(description)).strip() entry_templ = '%feature("docstring") {name} "{docstring}"' def make_entry(obj, name=None, templ="{description}", description=None): """ Create a docstring entry for a swig interface file. obj - a doxyxml object from which documentation will be extracted. name - the name of the C object (defaults to obj.name()) templ - an optional template for the docstring containing only one variable named 'description'. description - if this optional variable is set then it's value is used as the description instead of extracting it from obj. """ if name is None: name=obj.name() if "operator " in name: return '' if description is None: description = combine_descriptions(obj) docstring = templ.format(description=description) if not docstring: return '' return entry_templ.format( name=name, docstring=docstring, ) def make_func_entry(func, name=None, description=None, params=None): """ Create a function docstring entry for a swig interface file. func - a doxyxml object from which documentation will be extracted. name - the name of the C object (defaults to func.name()) description - if this optional variable is set then it's value is used as the description instead of extracting it from func. params - a parameter list that overrides using func.params. """ if params is None: params = func.params params = [prm.declname for prm in params] if params: sig = "Params: (%s)" % ", ".join(params) else: sig = "Params: (NONE)" templ = "{description}\n\n" + sig return make_entry(func, name=name, templ=utoascii(templ), description=description) def make_class_entry(klass, description=None): """ Create a class docstring for a swig interface file. """ output = [] output.append(make_entry(klass, description=description)) for func in klass.in_category(DoxyFunction): name = klass.name() + '::' + func.name() output.append(make_func_entry(func, name=name)) return "\n\n".join(output) def make_block_entry(di, block): """ Create class and function docstrings of a gnuradio block for a swig interface file. """ descriptions = [] # Get the documentation associated with the class. class_desc = combine_descriptions(block) if class_desc: descriptions.append(class_desc) # Get the documentation associated with the make function make_func = di.get_member(make_name(block.name()), DoxyFunction) make_func_desc = combine_descriptions(make_func) if make_func_desc: descriptions.append(make_func_desc) # Get the documentation associated with the file try: block_file = di.get_member(block.name() + ".h", DoxyFile) file_desc = combine_descriptions(block_file) if file_desc: descriptions.append(file_desc) except base.Base.NoSuchMember: # Don't worry if we can't find a matching file. pass # And join them all together to make a super duper description. super_description = "\n\n".join(descriptions) # Associate the combined description with the class and # the make function. output = [] output.append(make_class_entry(block, description=super_description)) creator = block.get_member(block.name(), DoxyFunction) output.append(make_func_entry(make_func, description=super_description, params=creator.params)) return "\n\n".join(output) def make_swig_interface_file(di, swigdocfilename, custom_output=None): output = [""" /* * This file was automatically generated using swig_doc.py. * * Any changes to it will be lost next time it is regenerated. */ """] if custom_output is not None: output.append(custom_output) # Create docstrings for the blocks. blocks = di.in_category(Block) make_funcs = set([]) for block in blocks: try: make_func = di.get_member(make_name(block.name()), DoxyFunction) make_funcs.add(make_func.name()) output.append(make_block_entry(di, block)) except block.ParsingError: print('Parsing error for block %s' % block.name()) # Create docstrings for functions # Don't include the make functions since they have already been dealt with. funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs] for f in funcs: try: output.append(make_func_entry(f)) except f.ParsingError: print('Parsing error for function %s' % f.name()) # Create docstrings for classes block_names = [block.name() for block in blocks] klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names] for k in klasses: try: output.append(make_class_entry(k)) except k.ParsingError: print('Parsing error for class %s' % k.name()) # Docstrings are not created for anything that is not a function or a class. # If this excludes anything important please add it here. output = "\n\n".join(output) swig_doc = file(swigdocfilename, 'w') swig_doc.write(output) swig_doc.close() if __name__ == "__main__": # Parse command line options and set up doxyxml. err_msg = "Execute using: python swig_doc.py xml_path outputfilename" if len(sys.argv) != 3: raise StandardError(err_msg) xml_path = sys.argv[1] swigdocfilename = sys.argv[2] di = DoxyIndex(xml_path) # gnuradio.gr.msq_queue.insert_tail and delete_head create errors unless docstrings are defined! # This is presumably a bug in SWIG. #msg_q = di.get_member(u'gr_msg_queue', DoxyClass) #insert_tail = msg_q.get_member(u'insert_tail', DoxyFunction) #delete_head = msg_q.get_member(u'delete_head', DoxyFunction) output = [] #output.append(make_func_entry(insert_tail, name='gr_py_msg_queue__insert_tail')) #output.append(make_func_entry(delete_head, name='gr_py_msg_queue__delete_head')) custom_output = "\n\n".join(output) # Generate the docstrings interface file. make_swig_interface_file(di, swigdocfilename, custom_output=custom_output) gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/CMakeLists.txt0000644000175000017500000000373512576764164022716 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. ######################################################################## # Create the doxygen configuration file ######################################################################## file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} top_builddir) file(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR} abs_top_srcdir) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} abs_top_builddir) set(HAVE_DOT ${DOXYGEN_DOT_FOUND}) set(enable_html_docs YES) set(enable_latex_docs NO) set(enable_xml_docs YES) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) set(BUILT_DIRS ${CMAKE_CURRENT_BINARY_DIR}/xml ${CMAKE_CURRENT_BINARY_DIR}/html) ######################################################################## # Make and install doxygen docs ######################################################################## add_custom_command( OUTPUT ${BUILT_DIRS} COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating documentation with doxygen" ) add_custom_target(doxygen_target ALL DEPENDS ${BUILT_DIRS}) install(DIRECTORY ${BUILT_DIRS} DESTINATION ${GR_PKG_DOC_DIR}) gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/Doxyfile.swig_doc.in0000644000175000017500000017361712576764164024075 0ustar carlescarles# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @CPACK_PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @CPACK_PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @INPUT_PATHS@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = NO # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/0000755000175000017500000000000012576764164021652 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/0000755000175000017500000000000012576764164023305 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/aadvark.cc0000644000175000017500000000257612576764164025237 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #include #include "aadvark.h" void Aadvark::print() { std::cout << "aadvark is " << aadvarkness << "/10 aadvarky" << std::endl; } Aadvark::Aadvark(int aaness): aadvarkness(aaness) {} bool aadvarky_enough(Aadvark aad) { if (aad.get_aadvarkness() > 6) return true; else return false; } int Aadvark::get_aadvarkness() { return aadvarkness; } int main() { Aadvark arold = Aadvark(6); arold.print(); if (aadvarky_enough(arold)) std::cout << "He is aadvarky enough" << std::endl; else std::cout << "He is not aadvarky enough" << std::endl; } gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/Doxyfile0000644000175000017500000017756012576764164025033 0ustar carlescarles# Doxyfile 1.6.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/0000755000175000017500000000000012576764164024105 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/index.xsd0000644000175000017500000000452112576764164025736 0ustar carlescarles gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/combine.xslt0000644000175000017500000000120512576764164026433 0ustar carlescarles gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/aadvark_8cc.xml0000644000175000017500000001746112576764164027006 0ustar carlescarles aadvark.cc iostream aadvark.h aadvark.cc bool bool aadvarky_enough (Aadvark aad) aadvarky_enough Aadvark aad int int main () main #include<iostream> #include"aadvark.h" voidAadvark::print(){ std::cout<<"aadvarkis"<<aadvarkness<<"/10aadvarky"<<std::endl; } Aadvark::Aadvark(intaaness):aadvarkness(aaness){} boolaadvarky_enough(Aadvarkaad){ if(aad.get_aadvarkness()>6) returntrue; else returnfalse; } intAadvark::get_aadvarkness(){ returnaadvarkness; } intmain(){ Aadvarkarold=Aadvark(6); arold.print(); if(aadvarky_enough(arold)) std::cout<<"Heisaadvarkyenough"<<std::endl; else std::cout<<"Heisnotaadvarkyenough"<<std::endl; } gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/classAadvark.xml0000644000175000017500000001213712576764164027232 0ustar carlescarles Aadvark aadvark.h int int Aadvark::aadvarkness aadvarkness void void Aadvark::print () print Outputs the vital aadvark statistics. Aadvark::Aadvark (int aaness) Aadvark int aaness aaness The aadvarkness of an aadvark is a measure of how aadvarky it is. int int Aadvark::get_aadvarkness () get_aadvarkness Models the mammal Aadvark. Sadly the model is incomplete and cannot capture all aspects of an aadvark yet.This line is uninformative and is only to test line breaks in the comments. AadvarkAadvark Aadvarkaadvarkness Aadvarkget_aadvarkness Aadvarkprint gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/aadvark_8h.xml0000644000175000017500000001170112576764164026637 0ustar carlescarles aadvark.h iostream Aadvark bool bool aadvarky_enough (Aadvark aad) aadvarky_enough Aadvark aad int int main () main #include<iostream> classAadvark{ public: voidprint(); Aadvark(intaaness); intget_aadvarkness(); private: intaadvarkness; }; boolaadvarky_enough(Aadvarkaad); intmain(); gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/index.xml0000644000175000017500000000252712576764164025744 0ustar carlescarles Aadvark aadvarkness print Aadvark get_aadvarkness aadvark.cc aadvarky_enough main aadvark.h aadvarky_enough main gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/xml/compound.xsd0000644000175000017500000010201612576764164026451 0ustar carlescarles gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/example/aadvark.h0000644000175000017500000000252012576764164025066 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #include /*! * \brief Models the mammal Aadvark. * * Sadly the model is incomplete and cannot capture all aspects of an aadvark yet. * * This line is uninformative and is only to test line breaks in the comments. */ class Aadvark { public: //! \brief Outputs the vital aadvark statistics. void print(); //! \param aaness The aadvarkness of an aadvark is a measure of how aadvarky it is. Aadvark(int aaness); int get_aadvarkness(); private: int aadvarkness; }; bool aadvarky_enough(Aadvark aad); int main(); gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/text.py0000644000175000017500000000345012576764164023212 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Utilities for extracting text from generated classes. """ def is_string(txt): if isinstance(txt, str): return True try: if isinstance(txt, unicode): return True except NameError: pass return False def description(obj): if obj is None: return None return description_bit(obj).strip() def description_bit(obj): if hasattr(obj, 'content'): contents = [description_bit(item) for item in obj.content] result = ''.join(contents) elif hasattr(obj, 'content_'): contents = [description_bit(item) for item in obj.content_] result = ''.join(contents) elif hasattr(obj, 'value'): result = description_bit(obj.value) elif is_string(obj): return obj else: raise StandardError('Expecting a string or something with content, content_ or value attribute') # If this bit is a paragraph then add one some line breaks. if hasattr(obj, 'name') and obj.name == 'para': result += "\n\n" return result gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/__init__.py0000644000175000017500000000465212576764164023772 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Python interface to contents of doxygen xml documentation. Example use: See the contents of the example folder for the C++ and doxygen-generated xml used in this example. >>> # Parse the doxygen docs. >>> import os >>> this_dir = os.path.dirname(globals()['__file__']) >>> xml_path = this_dir + "/example/xml/" >>> di = DoxyIndex(xml_path) Get a list of all top-level objects. >>> print([mem.name() for mem in di.members()]) [u'Aadvark', u'aadvarky_enough', u'main'] Get all functions. >>> print([mem.name() for mem in di.in_category(DoxyFunction)]) [u'aadvarky_enough', u'main'] Check if an object is present. >>> di.has_member(u'Aadvark') True >>> di.has_member(u'Fish') False Get an item by name and check its properties. >>> aad = di.get_member(u'Aadvark') >>> print(aad.brief_description) Models the mammal Aadvark. >>> print(aad.detailed_description) Sadly the model is incomplete and cannot capture all aspects of an aadvark yet. This line is uninformative and is only to test line breaks in the comments. >>> [mem.name() for mem in aad.members()] [u'aadvarkness', u'print', u'Aadvark', u'get_aadvarkness'] >>> aad.get_member(u'print').brief_description u'Outputs the vital aadvark statistics.' """ from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther def _test(): import os this_dir = os.path.dirname(globals()['__file__']) xml_path = this_dir + "/example/xml/" di = DoxyIndex(xml_path) # Get the Aadvark class aad = di.get_member('Aadvark') aad.brief_description import doctest return doctest.testmod() if __name__ == "__main__": _test() gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/base.py0000644000175000017500000001521212576764164023137 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ A base class is created. Classes based upon this are used to make more user-friendly interfaces to the doxygen xml docs than the generated classes provide. """ import os import pdb from xml.parsers.expat import ExpatError from generated import compound class Base(object): class Duplicate(StandardError): pass class NoSuchMember(StandardError): pass class ParsingError(StandardError): pass def __init__(self, parse_data, top=None): self._parsed = False self._error = False self._parse_data = parse_data self._members = [] self._dict_members = {} self._in_category = {} self._data = {} if top is not None: self._xml_path = top._xml_path # Set up holder of references else: top = self self._refs = {} self._xml_path = parse_data self.top = top @classmethod def from_refid(cls, refid, top=None): """ Instantiate class from a refid rather than parsing object. """ # First check to see if its already been instantiated. if top is not None and refid in top._refs: return top._refs[refid] # Otherwise create a new instance and set refid. inst = cls(None, top=top) inst.refid = refid inst.add_ref(inst) return inst @classmethod def from_parse_data(cls, parse_data, top=None): refid = getattr(parse_data, 'refid', None) if refid is not None and top is not None and refid in top._refs: return top._refs[refid] inst = cls(parse_data, top=top) if refid is not None: inst.refid = refid inst.add_ref(inst) return inst def add_ref(self, obj): if hasattr(obj, 'refid'): self.top._refs[obj.refid] = obj mem_classes = [] def get_cls(self, mem): for cls in self.mem_classes: if cls.can_parse(mem): return cls raise StandardError(("Did not find a class for object '%s'." \ % (mem.get_name()))) def convert_mem(self, mem): try: cls = self.get_cls(mem) converted = cls.from_parse_data(mem, self.top) if converted is None: raise StandardError('No class matched this object.') self.add_ref(converted) return converted except StandardError, e: print e @classmethod def includes(cls, inst): return isinstance(inst, cls) @classmethod def can_parse(cls, obj): return False def _parse(self): self._parsed = True def _get_dict_members(self, cat=None): """ For given category a dictionary is returned mapping member names to members of that category. For names that are duplicated the name is mapped to None. """ self.confirm_no_error() if cat not in self._dict_members: new_dict = {} for mem in self.in_category(cat): if mem.name() not in new_dict: new_dict[mem.name()] = mem else: new_dict[mem.name()] = self.Duplicate self._dict_members[cat] = new_dict return self._dict_members[cat] def in_category(self, cat): self.confirm_no_error() if cat is None: return self._members if cat not in self._in_category: self._in_category[cat] = [mem for mem in self._members if cat.includes(mem)] return self._in_category[cat] def get_member(self, name, cat=None): self.confirm_no_error() # Check if it's in a namespace or class. bits = name.split('::') first = bits[0] rest = '::'.join(bits[1:]) member = self._get_dict_members(cat).get(first, self.NoSuchMember) # Raise any errors that are returned. if member in set([self.NoSuchMember, self.Duplicate]): raise member() if rest: return member.get_member(rest, cat=cat) return member def has_member(self, name, cat=None): try: mem = self.get_member(name, cat=cat) return True except self.NoSuchMember: return False def data(self): self.confirm_no_error() return self._data def members(self): self.confirm_no_error() return self._members def process_memberdefs(self): mdtss = [] for sec in self._retrieved_data.compounddef.sectiondef: mdtss += sec.memberdef # At the moment we lose all information associated with sections. # Sometimes a memberdef is in several sectiondef. # We make sure we don't get duplicates here. uniques = set([]) for mem in mdtss: converted = self.convert_mem(mem) pair = (mem.name, mem.__class__) if pair not in uniques: uniques.add(pair) self._members.append(converted) def retrieve_data(self): filename = os.path.join(self._xml_path, self.refid + '.xml') try: self._retrieved_data = compound.parse(filename) except ExpatError: print('Error in xml in file %s' % filename) self._error = True self._retrieved_data = None def check_parsed(self): if not self._parsed: self._parse() def confirm_no_error(self): self.check_parsed() if self._error: raise self.ParsingError() def error(self): self.check_parsed() return self._error def name(self): # first see if we can do it without processing. if self._parse_data is not None: return self._parse_data.name self.check_parsed() return self._retrieved_data.compounddef.name gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/generated/0000755000175000017500000000000012576764164023610 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/generated/index.py0000644000175000017500000000351712576764164025277 0ustar carlescarles#!/usr/bin/env python """ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ from xml.dom import minidom import os import sys import compound import indexsuper as supermod class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compound=None): supermod.DoxygenType.__init__(self, version, compound) def find_compounds_and_members(self, details): """ Returns a list of all compounds and their members which match details """ results = [] for compound in self.compound: members = compound.find_members(details) if members: results.append([compound, members]) else: if details.match(compound): results.append([compound, []]) return results supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class CompoundTypeSub(supermod.CompoundType): def __init__(self, kind=None, refid=None, name='', member=None): supermod.CompoundType.__init__(self, kind, refid, name, member) def find_members(self, details): """ Returns a list of all members which match details """ results = [] for member in self.member: if details.match(member): results.append(member) return results supermod.CompoundType.subclass = CompoundTypeSub # end class CompoundTypeSub class MemberTypeSub(supermod.MemberType): def __init__(self, kind=None, refid=None, name=''): supermod.MemberType.__init__(self, kind, refid, name) supermod.MemberType.subclass = MemberTypeSub # end class MemberTypeSub def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/generated/compound.py0000644000175000017500000004751012576764164026015 0ustar carlescarles#!/usr/bin/env python """ Generated Mon Feb 9 19:08:05 2009 by generateDS.py. """ from string import lower as str_lower from xml.dom import minidom from xml.dom import Node import sys import compoundsuper as supermod from compoundsuper import MixedContainer class DoxygenTypeSub(supermod.DoxygenType): def __init__(self, version=None, compounddef=None): supermod.DoxygenType.__init__(self, version, compounddef) def find(self, details): return self.compounddef.find(details) supermod.DoxygenType.subclass = DoxygenTypeSub # end class DoxygenTypeSub class compounddefTypeSub(supermod.compounddefType): def __init__(self, kind=None, prot=None, id=None, compoundname='', title='', basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): supermod.compounddefType.__init__(self, kind, prot, id, compoundname, title, basecompoundref, derivedcompoundref, includes, includedby, incdepgraph, invincdepgraph, innerdir, innerfile, innerclass, innernamespace, innerpage, innergroup, templateparamlist, sectiondef, briefdescription, detaileddescription, inheritancegraph, collaborationgraph, programlisting, location, listofallmembers) def find(self, details): if self.id == details.refid: return self for sectiondef in self.sectiondef: result = sectiondef.find(details) if result: return result supermod.compounddefType.subclass = compounddefTypeSub # end class compounddefTypeSub class listofallmembersTypeSub(supermod.listofallmembersType): def __init__(self, member=None): supermod.listofallmembersType.__init__(self, member) supermod.listofallmembersType.subclass = listofallmembersTypeSub # end class listofallmembersTypeSub class memberRefTypeSub(supermod.memberRefType): def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope='', name=''): supermod.memberRefType.__init__(self, virt, prot, refid, ambiguityscope, scope, name) supermod.memberRefType.subclass = memberRefTypeSub # end class memberRefTypeSub class compoundRefTypeSub(supermod.compoundRefType): def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.compoundRefType.__init__(self, mixedclass_, content_) supermod.compoundRefType.subclass = compoundRefTypeSub # end class compoundRefTypeSub class reimplementTypeSub(supermod.reimplementType): def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.reimplementType.__init__(self, mixedclass_, content_) supermod.reimplementType.subclass = reimplementTypeSub # end class reimplementTypeSub class incTypeSub(supermod.incType): def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.incType.__init__(self, mixedclass_, content_) supermod.incType.subclass = incTypeSub # end class incTypeSub class refTypeSub(supermod.refType): def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): supermod.refType.__init__(self, mixedclass_, content_) supermod.refType.subclass = refTypeSub # end class refTypeSub class refTextTypeSub(supermod.refTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.refTextType.__init__(self, mixedclass_, content_) supermod.refTextType.subclass = refTextTypeSub # end class refTextTypeSub class sectiondefTypeSub(supermod.sectiondefType): def __init__(self, kind=None, header='', description=None, memberdef=None): supermod.sectiondefType.__init__(self, kind, header, description, memberdef) def find(self, details): for memberdef in self.memberdef: if memberdef.id == details.refid: return memberdef return None supermod.sectiondefType.subclass = sectiondefTypeSub # end class sectiondefTypeSub class memberdefTypeSub(supermod.memberdefType): def __init__(self, initonly=None, kind=None, volatile=None, const=None, raise_=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition='', argsstring='', name='', read='', write='', bitfield='', reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): supermod.memberdefType.__init__(self, initonly, kind, volatile, const, raise_, virt, readable, prot, explicit, new, final, writable, add, static, remove, sealed, mutable, gettable, inline, settable, id, templateparamlist, type_, definition, argsstring, name, read, write, bitfield, reimplements, reimplementedby, param, enumvalue, initializer, exceptions, briefdescription, detaileddescription, inbodydescription, location, references, referencedby) supermod.memberdefType.subclass = memberdefTypeSub # end class memberdefTypeSub class descriptionTypeSub(supermod.descriptionType): def __init__(self, title='', para=None, sect1=None, internal=None, mixedclass_=None, content_=None): supermod.descriptionType.__init__(self, mixedclass_, content_) supermod.descriptionType.subclass = descriptionTypeSub # end class descriptionTypeSub class enumvalueTypeSub(supermod.enumvalueType): def __init__(self, prot=None, id=None, name='', initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): supermod.enumvalueType.__init__(self, mixedclass_, content_) supermod.enumvalueType.subclass = enumvalueTypeSub # end class enumvalueTypeSub class templateparamlistTypeSub(supermod.templateparamlistType): def __init__(self, param=None): supermod.templateparamlistType.__init__(self, param) supermod.templateparamlistType.subclass = templateparamlistTypeSub # end class templateparamlistTypeSub class paramTypeSub(supermod.paramType): def __init__(self, type_=None, declname='', defname='', array='', defval=None, briefdescription=None): supermod.paramType.__init__(self, type_, declname, defname, array, defval, briefdescription) supermod.paramType.subclass = paramTypeSub # end class paramTypeSub class linkedTextTypeSub(supermod.linkedTextType): def __init__(self, ref=None, mixedclass_=None, content_=None): supermod.linkedTextType.__init__(self, mixedclass_, content_) supermod.linkedTextType.subclass = linkedTextTypeSub # end class linkedTextTypeSub class graphTypeSub(supermod.graphType): def __init__(self, node=None): supermod.graphType.__init__(self, node) supermod.graphType.subclass = graphTypeSub # end class graphTypeSub class nodeTypeSub(supermod.nodeType): def __init__(self, id=None, label='', link=None, childnode=None): supermod.nodeType.__init__(self, id, label, link, childnode) supermod.nodeType.subclass = nodeTypeSub # end class nodeTypeSub class childnodeTypeSub(supermod.childnodeType): def __init__(self, relation=None, refid=None, edgelabel=None): supermod.childnodeType.__init__(self, relation, refid, edgelabel) supermod.childnodeType.subclass = childnodeTypeSub # end class childnodeTypeSub class linkTypeSub(supermod.linkType): def __init__(self, refid=None, external=None, valueOf_=''): supermod.linkType.__init__(self, refid, external) supermod.linkType.subclass = linkTypeSub # end class linkTypeSub class listingTypeSub(supermod.listingType): def __init__(self, codeline=None): supermod.listingType.__init__(self, codeline) supermod.listingType.subclass = listingTypeSub # end class listingTypeSub class codelineTypeSub(supermod.codelineType): def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): supermod.codelineType.__init__(self, external, lineno, refkind, refid, highlight) supermod.codelineType.subclass = codelineTypeSub # end class codelineTypeSub class highlightTypeSub(supermod.highlightType): def __init__(self, class_=None, sp=None, ref=None, mixedclass_=None, content_=None): supermod.highlightType.__init__(self, mixedclass_, content_) supermod.highlightType.subclass = highlightTypeSub # end class highlightTypeSub class referenceTypeSub(supermod.referenceType): def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): supermod.referenceType.__init__(self, mixedclass_, content_) supermod.referenceType.subclass = referenceTypeSub # end class referenceTypeSub class locationTypeSub(supermod.locationType): def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): supermod.locationType.__init__(self, bodystart, line, bodyend, bodyfile, file) supermod.locationType.subclass = locationTypeSub # end class locationTypeSub class docSect1TypeSub(supermod.docSect1Type): def __init__(self, id=None, title='', para=None, sect2=None, internal=None, mixedclass_=None, content_=None): supermod.docSect1Type.__init__(self, mixedclass_, content_) supermod.docSect1Type.subclass = docSect1TypeSub # end class docSect1TypeSub class docSect2TypeSub(supermod.docSect2Type): def __init__(self, id=None, title='', para=None, sect3=None, internal=None, mixedclass_=None, content_=None): supermod.docSect2Type.__init__(self, mixedclass_, content_) supermod.docSect2Type.subclass = docSect2TypeSub # end class docSect2TypeSub class docSect3TypeSub(supermod.docSect3Type): def __init__(self, id=None, title='', para=None, sect4=None, internal=None, mixedclass_=None, content_=None): supermod.docSect3Type.__init__(self, mixedclass_, content_) supermod.docSect3Type.subclass = docSect3TypeSub # end class docSect3TypeSub class docSect4TypeSub(supermod.docSect4Type): def __init__(self, id=None, title='', para=None, internal=None, mixedclass_=None, content_=None): supermod.docSect4Type.__init__(self, mixedclass_, content_) supermod.docSect4Type.subclass = docSect4TypeSub # end class docSect4TypeSub class docInternalTypeSub(supermod.docInternalType): def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): supermod.docInternalType.__init__(self, mixedclass_, content_) supermod.docInternalType.subclass = docInternalTypeSub # end class docInternalTypeSub class docInternalS1TypeSub(supermod.docInternalS1Type): def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): supermod.docInternalS1Type.__init__(self, mixedclass_, content_) supermod.docInternalS1Type.subclass = docInternalS1TypeSub # end class docInternalS1TypeSub class docInternalS2TypeSub(supermod.docInternalS2Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS2Type.__init__(self, mixedclass_, content_) supermod.docInternalS2Type.subclass = docInternalS2TypeSub # end class docInternalS2TypeSub class docInternalS3TypeSub(supermod.docInternalS3Type): def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): supermod.docInternalS3Type.__init__(self, mixedclass_, content_) supermod.docInternalS3Type.subclass = docInternalS3TypeSub # end class docInternalS3TypeSub class docInternalS4TypeSub(supermod.docInternalS4Type): def __init__(self, para=None, mixedclass_=None, content_=None): supermod.docInternalS4Type.__init__(self, mixedclass_, content_) supermod.docInternalS4Type.subclass = docInternalS4TypeSub # end class docInternalS4TypeSub class docURLLinkSub(supermod.docURLLink): def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): supermod.docURLLink.__init__(self, mixedclass_, content_) supermod.docURLLink.subclass = docURLLinkSub # end class docURLLinkSub class docAnchorTypeSub(supermod.docAnchorType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docAnchorType.__init__(self, mixedclass_, content_) supermod.docAnchorType.subclass = docAnchorTypeSub # end class docAnchorTypeSub class docFormulaTypeSub(supermod.docFormulaType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docFormulaType.__init__(self, mixedclass_, content_) supermod.docFormulaType.subclass = docFormulaTypeSub # end class docFormulaTypeSub class docIndexEntryTypeSub(supermod.docIndexEntryType): def __init__(self, primaryie='', secondaryie=''): supermod.docIndexEntryType.__init__(self, primaryie, secondaryie) supermod.docIndexEntryType.subclass = docIndexEntryTypeSub # end class docIndexEntryTypeSub class docListTypeSub(supermod.docListType): def __init__(self, listitem=None): supermod.docListType.__init__(self, listitem) supermod.docListType.subclass = docListTypeSub # end class docListTypeSub class docListItemTypeSub(supermod.docListItemType): def __init__(self, para=None): supermod.docListItemType.__init__(self, para) supermod.docListItemType.subclass = docListItemTypeSub # end class docListItemTypeSub class docSimpleSectTypeSub(supermod.docSimpleSectType): def __init__(self, kind=None, title=None, para=None): supermod.docSimpleSectType.__init__(self, kind, title, para) supermod.docSimpleSectType.subclass = docSimpleSectTypeSub # end class docSimpleSectTypeSub class docVarListEntryTypeSub(supermod.docVarListEntryType): def __init__(self, term=None): supermod.docVarListEntryType.__init__(self, term) supermod.docVarListEntryType.subclass = docVarListEntryTypeSub # end class docVarListEntryTypeSub class docRefTextTypeSub(supermod.docRefTextType): def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): supermod.docRefTextType.__init__(self, mixedclass_, content_) supermod.docRefTextType.subclass = docRefTextTypeSub # end class docRefTextTypeSub class docTableTypeSub(supermod.docTableType): def __init__(self, rows=None, cols=None, row=None, caption=None): supermod.docTableType.__init__(self, rows, cols, row, caption) supermod.docTableType.subclass = docTableTypeSub # end class docTableTypeSub class docRowTypeSub(supermod.docRowType): def __init__(self, entry=None): supermod.docRowType.__init__(self, entry) supermod.docRowType.subclass = docRowTypeSub # end class docRowTypeSub class docEntryTypeSub(supermod.docEntryType): def __init__(self, thead=None, para=None): supermod.docEntryType.__init__(self, thead, para) supermod.docEntryType.subclass = docEntryTypeSub # end class docEntryTypeSub class docHeadingTypeSub(supermod.docHeadingType): def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): supermod.docHeadingType.__init__(self, mixedclass_, content_) supermod.docHeadingType.subclass = docHeadingTypeSub # end class docHeadingTypeSub class docImageTypeSub(supermod.docImageType): def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): supermod.docImageType.__init__(self, mixedclass_, content_) supermod.docImageType.subclass = docImageTypeSub # end class docImageTypeSub class docDotFileTypeSub(supermod.docDotFileType): def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): supermod.docDotFileType.__init__(self, mixedclass_, content_) supermod.docDotFileType.subclass = docDotFileTypeSub # end class docDotFileTypeSub class docTocItemTypeSub(supermod.docTocItemType): def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): supermod.docTocItemType.__init__(self, mixedclass_, content_) supermod.docTocItemType.subclass = docTocItemTypeSub # end class docTocItemTypeSub class docTocListTypeSub(supermod.docTocListType): def __init__(self, tocitem=None): supermod.docTocListType.__init__(self, tocitem) supermod.docTocListType.subclass = docTocListTypeSub # end class docTocListTypeSub class docLanguageTypeSub(supermod.docLanguageType): def __init__(self, langid=None, para=None): supermod.docLanguageType.__init__(self, langid, para) supermod.docLanguageType.subclass = docLanguageTypeSub # end class docLanguageTypeSub class docParamListTypeSub(supermod.docParamListType): def __init__(self, kind=None, parameteritem=None): supermod.docParamListType.__init__(self, kind, parameteritem) supermod.docParamListType.subclass = docParamListTypeSub # end class docParamListTypeSub class docParamListItemSub(supermod.docParamListItem): def __init__(self, parameternamelist=None, parameterdescription=None): supermod.docParamListItem.__init__(self, parameternamelist, parameterdescription) supermod.docParamListItem.subclass = docParamListItemSub # end class docParamListItemSub class docParamNameListSub(supermod.docParamNameList): def __init__(self, parametername=None): supermod.docParamNameList.__init__(self, parametername) supermod.docParamNameList.subclass = docParamNameListSub # end class docParamNameListSub class docParamNameSub(supermod.docParamName): def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): supermod.docParamName.__init__(self, mixedclass_, content_) supermod.docParamName.subclass = docParamNameSub # end class docParamNameSub class docXRefSectTypeSub(supermod.docXRefSectType): def __init__(self, id=None, xreftitle=None, xrefdescription=None): supermod.docXRefSectType.__init__(self, id, xreftitle, xrefdescription) supermod.docXRefSectType.subclass = docXRefSectTypeSub # end class docXRefSectTypeSub class docCopyTypeSub(supermod.docCopyType): def __init__(self, link=None, para=None, sect1=None, internal=None): supermod.docCopyType.__init__(self, link, para, sect1, internal) supermod.docCopyType.subclass = docCopyTypeSub # end class docCopyTypeSub class docCharTypeSub(supermod.docCharType): def __init__(self, char=None, valueOf_=''): supermod.docCharType.__init__(self, char) supermod.docCharType.subclass = docCharTypeSub # end class docCharTypeSub class docParaTypeSub(supermod.docParaType): def __init__(self, char=None, valueOf_=''): supermod.docParaType.__init__(self, char) self.parameterlist = [] self.simplesects = [] self.content = [] def buildChildren(self, child_, nodeName_): supermod.docParaType.buildChildren(self, child_, nodeName_) if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == "ref": obj_ = supermod.docRefTextType.factory() obj_.build(child_) self.content.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameterlist': obj_ = supermod.docParamListType.factory() obj_.build(child_) self.parameterlist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'simplesect': obj_ = supermod.docSimpleSectType.factory() obj_.build(child_) self.simplesects.append(obj_) supermod.docParaType.subclass = docParaTypeSub # end class docParaTypeSub def parse(inFilename): doc = minidom.parse(inFilename) rootNode = doc.documentElement rootObj = supermod.DoxygenType.factory() rootObj.build(rootNode) return rootObj gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/generated/__init__.py0000644000175000017500000000035312576764164025722 0ustar carlescarles""" Contains generated files produced by generateDS.py. These do the real work of parsing the doxygen xml files but the resultant classes are not very friendly to navigate so the rest of the doxyxml module processes them further. """ gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/generated/compoundsuper.py0000644000175000017500000127701412576764164027101 0ustar carlescarles#!/usr/bin/env python # # Generated Thu Jun 11 18:44:25 2009 by generateDS.py. # import sys import getopt from string import lower as str_lower from xml.dom import minidom from xml.dom import Node # # User methods # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class # in a module named generatedssuper.py. try: from generatedssuper import GeneratedsSuper except ImportError, exp: class GeneratedsSuper: def format_string(self, input_data, input_name=''): return input_data def format_integer(self, input_data, input_name=''): return '%d' % input_data def format_float(self, input_data, input_name=''): return '%f' % input_data def format_double(self, input_data, input_name=''): return '%e' % input_data def format_boolean(self, input_data, input_name=''): return '%s' % input_data # # If you have installed IPython you can uncomment and use the following. # IPython is available from http://ipython.scipy.org/. # ## from IPython.Shell import IPShellEmbed ## args = '' ## ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', ## exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: # ipshell(' -- Entering ipshell.\nHit Ctrl-D to exit') # # Globals # ExternalEncoding = 'ascii' # # Support/utility functions. # def showIndent(outfile, level): for idx in range(level): outfile.write(' ') def quote_xml(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') if '"' in s1: if "'" in s1: s1 = '"%s"' % s1.replace('"', """) else: s1 = "'%s'" % s1 else: s1 = '"%s"' % s1 return s1 def quote_python(inStr): s1 = inStr if s1.find("'") == -1: if s1.find('\n') == -1: return "'%s'" % s1 else: return "'''%s'''" % s1 else: if s1.find('"') != -1: s1 = s1.replace('"', '\\"') if s1.find('\n') == -1: return '"%s"' % s1 else: return '"""%s"""' % s1 class MixedContainer: # Constants for category: CategoryNone = 0 CategoryText = 1 CategorySimple = 2 CategoryComplex = 3 # Constants for content_type: TypeNone = 0 TypeText = 1 TypeString = 2 TypeInteger = 3 TypeFloat = 4 TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value def getCategory(self): return self.category def getContenttype(self, content_type): return self.content_type def getValue(self): return self.value def getName(self): return self.name def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex self.value.export(outfile, level, namespace,name) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeInteger or \ self.content_type == MixedContainer.TypeBoolean: outfile.write('<%s>%d' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeFloat or \ self.content_type == MixedContainer.TypeDecimal: outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s",\n' % \ (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') class _MemberSpec(object): def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type def get_data_type(self): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container # # Data representation classes. # class DoxygenType(GeneratedsSuper): subclass = None superclass = None def __init__(self, version=None, compounddef=None): self.version = version self.compounddef = compounddef def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) else: return DoxygenType(*args_, **kwargs_) factory = staticmethod(factory) def get_compounddef(self): return self.compounddef def set_compounddef(self, compounddef): self.compounddef = compounddef def get_version(self): return self.version def set_version(self, version): self.version = version def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (quote_attrib(self.version), )) def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): if self.compounddef: self.compounddef.export(outfile, level, namespace_, name_='compounddef') def hasContent_(self): if ( self.compounddef is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = "%s",\n' % (self.version,)) def exportLiteralChildren(self, outfile, level, name_): if self.compounddef: showIndent(outfile, level) outfile.write('compounddef=model_.compounddefType(\n') self.compounddef.exportLiteral(outfile, level, name_='compounddef') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compounddef': obj_ = compounddefType.factory() obj_.build(child_) self.set_compounddef(obj_) # end class DoxygenType class compounddefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, prot=None, id=None, compoundname=None, title=None, basecompoundref=None, derivedcompoundref=None, includes=None, includedby=None, incdepgraph=None, invincdepgraph=None, innerdir=None, innerfile=None, innerclass=None, innernamespace=None, innerpage=None, innergroup=None, templateparamlist=None, sectiondef=None, briefdescription=None, detaileddescription=None, inheritancegraph=None, collaborationgraph=None, programlisting=None, location=None, listofallmembers=None): self.kind = kind self.prot = prot self.id = id self.compoundname = compoundname self.title = title if basecompoundref is None: self.basecompoundref = [] else: self.basecompoundref = basecompoundref if derivedcompoundref is None: self.derivedcompoundref = [] else: self.derivedcompoundref = derivedcompoundref if includes is None: self.includes = [] else: self.includes = includes if includedby is None: self.includedby = [] else: self.includedby = includedby self.incdepgraph = incdepgraph self.invincdepgraph = invincdepgraph if innerdir is None: self.innerdir = [] else: self.innerdir = innerdir if innerfile is None: self.innerfile = [] else: self.innerfile = innerfile if innerclass is None: self.innerclass = [] else: self.innerclass = innerclass if innernamespace is None: self.innernamespace = [] else: self.innernamespace = innernamespace if innerpage is None: self.innerpage = [] else: self.innerpage = innerpage if innergroup is None: self.innergroup = [] else: self.innergroup = innergroup self.templateparamlist = templateparamlist if sectiondef is None: self.sectiondef = [] else: self.sectiondef = sectiondef self.briefdescription = briefdescription self.detaileddescription = detaileddescription self.inheritancegraph = inheritancegraph self.collaborationgraph = collaborationgraph self.programlisting = programlisting self.location = location self.listofallmembers = listofallmembers def factory(*args_, **kwargs_): if compounddefType.subclass: return compounddefType.subclass(*args_, **kwargs_) else: return compounddefType(*args_, **kwargs_) factory = staticmethod(factory) def get_compoundname(self): return self.compoundname def set_compoundname(self, compoundname): self.compoundname = compoundname def get_title(self): return self.title def set_title(self, title): self.title = title def get_basecompoundref(self): return self.basecompoundref def set_basecompoundref(self, basecompoundref): self.basecompoundref = basecompoundref def add_basecompoundref(self, value): self.basecompoundref.append(value) def insert_basecompoundref(self, index, value): self.basecompoundref[index] = value def get_derivedcompoundref(self): return self.derivedcompoundref def set_derivedcompoundref(self, derivedcompoundref): self.derivedcompoundref = derivedcompoundref def add_derivedcompoundref(self, value): self.derivedcompoundref.append(value) def insert_derivedcompoundref(self, index, value): self.derivedcompoundref[index] = value def get_includes(self): return self.includes def set_includes(self, includes): self.includes = includes def add_includes(self, value): self.includes.append(value) def insert_includes(self, index, value): self.includes[index] = value def get_includedby(self): return self.includedby def set_includedby(self, includedby): self.includedby = includedby def add_includedby(self, value): self.includedby.append(value) def insert_includedby(self, index, value): self.includedby[index] = value def get_incdepgraph(self): return self.incdepgraph def set_incdepgraph(self, incdepgraph): self.incdepgraph = incdepgraph def get_invincdepgraph(self): return self.invincdepgraph def set_invincdepgraph(self, invincdepgraph): self.invincdepgraph = invincdepgraph def get_innerdir(self): return self.innerdir def set_innerdir(self, innerdir): self.innerdir = innerdir def add_innerdir(self, value): self.innerdir.append(value) def insert_innerdir(self, index, value): self.innerdir[index] = value def get_innerfile(self): return self.innerfile def set_innerfile(self, innerfile): self.innerfile = innerfile def add_innerfile(self, value): self.innerfile.append(value) def insert_innerfile(self, index, value): self.innerfile[index] = value def get_innerclass(self): return self.innerclass def set_innerclass(self, innerclass): self.innerclass = innerclass def add_innerclass(self, value): self.innerclass.append(value) def insert_innerclass(self, index, value): self.innerclass[index] = value def get_innernamespace(self): return self.innernamespace def set_innernamespace(self, innernamespace): self.innernamespace = innernamespace def add_innernamespace(self, value): self.innernamespace.append(value) def insert_innernamespace(self, index, value): self.innernamespace[index] = value def get_innerpage(self): return self.innerpage def set_innerpage(self, innerpage): self.innerpage = innerpage def add_innerpage(self, value): self.innerpage.append(value) def insert_innerpage(self, index, value): self.innerpage[index] = value def get_innergroup(self): return self.innergroup def set_innergroup(self, innergroup): self.innergroup = innergroup def add_innergroup(self, value): self.innergroup.append(value) def insert_innergroup(self, index, value): self.innergroup[index] = value def get_templateparamlist(self): return self.templateparamlist def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist def get_sectiondef(self): return self.sectiondef def set_sectiondef(self, sectiondef): self.sectiondef = sectiondef def add_sectiondef(self, value): self.sectiondef.append(value) def insert_sectiondef(self, index, value): self.sectiondef[index] = value def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_inheritancegraph(self): return self.inheritancegraph def set_inheritancegraph(self, inheritancegraph): self.inheritancegraph = inheritancegraph def get_collaborationgraph(self): return self.collaborationgraph def set_collaborationgraph(self, collaborationgraph): self.collaborationgraph = collaborationgraph def get_programlisting(self): return self.programlisting def set_programlisting(self, programlisting): self.programlisting = programlisting def get_location(self): return self.location def set_location(self, location): self.location = location def get_listofallmembers(self): return self.listofallmembers def set_listofallmembers(self, listofallmembers): self.listofallmembers = listofallmembers def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='compounddefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='compounddefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='compounddefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='compounddefType'): if self.compoundname is not None: showIndent(outfile, level) outfile.write('<%scompoundname>%s\n' % (namespace_, self.format_string(quote_xml(self.compoundname).encode(ExternalEncoding), input_name='compoundname'), namespace_)) if self.title is not None: showIndent(outfile, level) outfile.write('<%stitle>%s\n' % (namespace_, self.format_string(quote_xml(self.title).encode(ExternalEncoding), input_name='title'), namespace_)) for basecompoundref_ in self.basecompoundref: basecompoundref_.export(outfile, level, namespace_, name_='basecompoundref') for derivedcompoundref_ in self.derivedcompoundref: derivedcompoundref_.export(outfile, level, namespace_, name_='derivedcompoundref') for includes_ in self.includes: includes_.export(outfile, level, namespace_, name_='includes') for includedby_ in self.includedby: includedby_.export(outfile, level, namespace_, name_='includedby') if self.incdepgraph: self.incdepgraph.export(outfile, level, namespace_, name_='incdepgraph') if self.invincdepgraph: self.invincdepgraph.export(outfile, level, namespace_, name_='invincdepgraph') for innerdir_ in self.innerdir: innerdir_.export(outfile, level, namespace_, name_='innerdir') for innerfile_ in self.innerfile: innerfile_.export(outfile, level, namespace_, name_='innerfile') for innerclass_ in self.innerclass: innerclass_.export(outfile, level, namespace_, name_='innerclass') for innernamespace_ in self.innernamespace: innernamespace_.export(outfile, level, namespace_, name_='innernamespace') for innerpage_ in self.innerpage: innerpage_.export(outfile, level, namespace_, name_='innerpage') for innergroup_ in self.innergroup: innergroup_.export(outfile, level, namespace_, name_='innergroup') if self.templateparamlist: self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') for sectiondef_ in self.sectiondef: sectiondef_.export(outfile, level, namespace_, name_='sectiondef') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') if self.inheritancegraph: self.inheritancegraph.export(outfile, level, namespace_, name_='inheritancegraph') if self.collaborationgraph: self.collaborationgraph.export(outfile, level, namespace_, name_='collaborationgraph') if self.programlisting: self.programlisting.export(outfile, level, namespace_, name_='programlisting') if self.location: self.location.export(outfile, level, namespace_, name_='location') if self.listofallmembers: self.listofallmembers.export(outfile, level, namespace_, name_='listofallmembers') def hasContent_(self): if ( self.compoundname is not None or self.title is not None or self.basecompoundref is not None or self.derivedcompoundref is not None or self.includes is not None or self.includedby is not None or self.incdepgraph is not None or self.invincdepgraph is not None or self.innerdir is not None or self.innerfile is not None or self.innerclass is not None or self.innernamespace is not None or self.innerpage is not None or self.innergroup is not None or self.templateparamlist is not None or self.sectiondef is not None or self.briefdescription is not None or self.detaileddescription is not None or self.inheritancegraph is not None or self.collaborationgraph is not None or self.programlisting is not None or self.location is not None or self.listofallmembers is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='compounddefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compoundname=%s,\n' % quote_python(self.compoundname).encode(ExternalEncoding)) if self.title: showIndent(outfile, level) outfile.write('title=model_.xsd_string(\n') self.title.exportLiteral(outfile, level, name_='title') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('basecompoundref=[\n') level += 1 for basecompoundref in self.basecompoundref: showIndent(outfile, level) outfile.write('model_.basecompoundref(\n') basecompoundref.exportLiteral(outfile, level, name_='basecompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('derivedcompoundref=[\n') level += 1 for derivedcompoundref in self.derivedcompoundref: showIndent(outfile, level) outfile.write('model_.derivedcompoundref(\n') derivedcompoundref.exportLiteral(outfile, level, name_='derivedcompoundref') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('includes=[\n') level += 1 for includes in self.includes: showIndent(outfile, level) outfile.write('model_.includes(\n') includes.exportLiteral(outfile, level, name_='includes') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('includedby=[\n') level += 1 for includedby in self.includedby: showIndent(outfile, level) outfile.write('model_.includedby(\n') includedby.exportLiteral(outfile, level, name_='includedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.incdepgraph: showIndent(outfile, level) outfile.write('incdepgraph=model_.graphType(\n') self.incdepgraph.exportLiteral(outfile, level, name_='incdepgraph') showIndent(outfile, level) outfile.write('),\n') if self.invincdepgraph: showIndent(outfile, level) outfile.write('invincdepgraph=model_.graphType(\n') self.invincdepgraph.exportLiteral(outfile, level, name_='invincdepgraph') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('innerdir=[\n') level += 1 for innerdir in self.innerdir: showIndent(outfile, level) outfile.write('model_.innerdir(\n') innerdir.exportLiteral(outfile, level, name_='innerdir') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerfile=[\n') level += 1 for innerfile in self.innerfile: showIndent(outfile, level) outfile.write('model_.innerfile(\n') innerfile.exportLiteral(outfile, level, name_='innerfile') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerclass=[\n') level += 1 for innerclass in self.innerclass: showIndent(outfile, level) outfile.write('model_.innerclass(\n') innerclass.exportLiteral(outfile, level, name_='innerclass') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innernamespace=[\n') level += 1 for innernamespace in self.innernamespace: showIndent(outfile, level) outfile.write('model_.innernamespace(\n') innernamespace.exportLiteral(outfile, level, name_='innernamespace') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innerpage=[\n') level += 1 for innerpage in self.innerpage: showIndent(outfile, level) outfile.write('model_.innerpage(\n') innerpage.exportLiteral(outfile, level, name_='innerpage') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('innergroup=[\n') level += 1 for innergroup in self.innergroup: showIndent(outfile, level) outfile.write('model_.innergroup(\n') innergroup.exportLiteral(outfile, level, name_='innergroup') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('sectiondef=[\n') level += 1 for sectiondef in self.sectiondef: showIndent(outfile, level) outfile.write('model_.sectiondef(\n') sectiondef.exportLiteral(outfile, level, name_='sectiondef') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inheritancegraph: showIndent(outfile, level) outfile.write('inheritancegraph=model_.graphType(\n') self.inheritancegraph.exportLiteral(outfile, level, name_='inheritancegraph') showIndent(outfile, level) outfile.write('),\n') if self.collaborationgraph: showIndent(outfile, level) outfile.write('collaborationgraph=model_.graphType(\n') self.collaborationgraph.exportLiteral(outfile, level, name_='collaborationgraph') showIndent(outfile, level) outfile.write('),\n') if self.programlisting: showIndent(outfile, level) outfile.write('programlisting=model_.listingType(\n') self.programlisting.exportLiteral(outfile, level, name_='programlisting') showIndent(outfile, level) outfile.write('),\n') if self.location: showIndent(outfile, level) outfile.write('location=model_.locationType(\n') self.location.exportLiteral(outfile, level, name_='location') showIndent(outfile, level) outfile.write('),\n') if self.listofallmembers: showIndent(outfile, level) outfile.write('listofallmembers=model_.listofallmembersType(\n') self.listofallmembers.exportLiteral(outfile, level, name_='listofallmembers') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compoundname': compoundname_ = '' for text__content_ in child_.childNodes: compoundname_ += text__content_.nodeValue self.compoundname = compoundname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'basecompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.basecompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'derivedcompoundref': obj_ = compoundRefType.factory() obj_.build(child_) self.derivedcompoundref.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'includes': obj_ = incType.factory() obj_.build(child_) self.includes.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'includedby': obj_ = incType.factory() obj_.build(child_) self.includedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'incdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_incdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'invincdepgraph': obj_ = graphType.factory() obj_.build(child_) self.set_invincdepgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerdir': obj_ = refType.factory() obj_.build(child_) self.innerdir.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerfile': obj_ = refType.factory() obj_.build(child_) self.innerfile.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerclass': obj_ = refType.factory() obj_.build(child_) self.innerclass.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innernamespace': obj_ = refType.factory() obj_.build(child_) self.innernamespace.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innerpage': obj_ = refType.factory() obj_.build(child_) self.innerpage.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'innergroup': obj_ = refType.factory() obj_.build(child_) self.innergroup.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sectiondef': obj_ = sectiondefType.factory() obj_.build(child_) self.sectiondef.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'inheritancegraph': obj_ = graphType.factory() obj_.build(child_) self.set_inheritancegraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'collaborationgraph': obj_ = graphType.factory() obj_.build(child_) self.set_collaborationgraph(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'programlisting': obj_ = listingType.factory() obj_.build(child_) self.set_programlisting(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'listofallmembers': obj_ = listofallmembersType.factory() obj_.build(child_) self.set_listofallmembers(obj_) # end class compounddefType class listofallmembersType(GeneratedsSuper): subclass = None superclass = None def __init__(self, member=None): if member is None: self.member = [] else: self.member = member def factory(*args_, **kwargs_): if listofallmembersType.subclass: return listofallmembersType.subclass(*args_, **kwargs_) else: return listofallmembersType(*args_, **kwargs_) factory = staticmethod(factory) def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value def export(self, outfile, level, namespace_='', name_='listofallmembersType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='listofallmembersType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='listofallmembersType'): pass def exportChildren(self, outfile, level, namespace_='', name_='listofallmembersType'): for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') def hasContent_(self): if ( self.member is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='listofallmembersType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('member=[\n') level += 1 for member in self.member: showIndent(outfile, level) outfile.write('model_.member(\n') member.exportLiteral(outfile, level, name_='member') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'member': obj_ = memberRefType.factory() obj_.build(child_) self.member.append(obj_) # end class listofallmembersType class memberRefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, virt=None, prot=None, refid=None, ambiguityscope=None, scope=None, name=None): self.virt = virt self.prot = prot self.refid = refid self.ambiguityscope = ambiguityscope self.scope = scope self.name = name def factory(*args_, **kwargs_): if memberRefType.subclass: return memberRefType.subclass(*args_, **kwargs_) else: return memberRefType(*args_, **kwargs_) factory = staticmethod(factory) def get_scope(self): return self.scope def set_scope(self, scope): self.scope = scope def get_name(self): return self.name def set_name(self, name): self.name = name def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_ambiguityscope(self): return self.ambiguityscope def set_ambiguityscope(self, ambiguityscope): self.ambiguityscope = ambiguityscope def export(self, outfile, level, namespace_='', name_='memberRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='memberRefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='memberRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.ambiguityscope is not None: outfile.write(' ambiguityscope=%s' % (self.format_string(quote_attrib(self.ambiguityscope).encode(ExternalEncoding), input_name='ambiguityscope'), )) def exportChildren(self, outfile, level, namespace_='', name_='memberRefType'): if self.scope is not None: showIndent(outfile, level) outfile.write('<%sscope>%s\n' % (namespace_, self.format_string(quote_xml(self.scope).encode(ExternalEncoding), input_name='scope'), namespace_)) if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) def hasContent_(self): if ( self.scope is not None or self.name is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='memberRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.ambiguityscope is not None: showIndent(outfile, level) outfile.write('ambiguityscope = %s,\n' % (self.ambiguityscope,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('scope=%s,\n' % quote_python(self.scope).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('ambiguityscope'): self.ambiguityscope = attrs.get('ambiguityscope').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'scope': scope_ = '' for text__content_ in child_.childNodes: scope_ += text__content_.nodeValue self.scope = scope_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ # end class memberRefType class scope(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if scope.subclass: return scope.subclass(*args_, **kwargs_) else: return scope(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='scope', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='scope') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='scope'): pass def exportChildren(self, outfile, level, namespace_='', name_='scope'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='scope'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class scope class name(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if name.subclass: return name.subclass(*args_, **kwargs_) else: return name(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='name', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='name') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='name'): pass def exportChildren(self, outfile, level, namespace_='', name_='name'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='name'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class name class compoundRefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, virt=None, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.virt = virt self.prot = prot self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if compoundRefType.subclass: return compoundRefType.subclass(*args_, **kwargs_) else: return compoundRefType(*args_, **kwargs_) factory = staticmethod(factory) def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='compoundRefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='compoundRefType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='compoundRefType'): if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='compoundRefType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='compoundRefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class compoundRefType class reimplementType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if reimplementType.subclass: return reimplementType.subclass(*args_, **kwargs_) else: return reimplementType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='reimplementType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='reimplementType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='reimplementType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='reimplementType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='reimplementType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class reimplementType class incType(GeneratedsSuper): subclass = None superclass = None def __init__(self, local=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.local = local self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if incType.subclass: return incType.subclass(*args_, **kwargs_) else: return incType(*args_, **kwargs_) factory = staticmethod(factory) def get_local(self): return self.local def set_local(self, local): self.local = local def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='incType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='incType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='incType'): if self.local is not None: outfile.write(' local=%s' % (quote_attrib(self.local), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='incType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='incType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.local is not None: showIndent(outfile, level) outfile.write('local = "%s",\n' % (self.local,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('local'): self.local = attrs.get('local').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class incType class refType(GeneratedsSuper): subclass = None superclass = None def __init__(self, prot=None, refid=None, valueOf_='', mixedclass_=None, content_=None): self.prot = prot self.refid = refid if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if refType.subclass: return refType.subclass(*args_, **kwargs_) else: return refType(*args_, **kwargs_) factory = staticmethod(factory) def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='refType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='refType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='refType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='refType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='refType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class refType class refTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref self.external = external if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if refTextType.subclass: return refTextType.subclass(*args_, **kwargs_) else: return refTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_kindref(self): return self.kindref def set_kindref(self, kindref): self.kindref = kindref def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='refTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='refTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='refTextType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='refTextType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='refTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.kindref is not None: showIndent(outfile, level) outfile.write('kindref = "%s",\n' % (self.kindref,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('kindref'): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class refTextType class sectiondefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, header=None, description=None, memberdef=None): self.kind = kind self.header = header self.description = description if memberdef is None: self.memberdef = [] else: self.memberdef = memberdef def factory(*args_, **kwargs_): if sectiondefType.subclass: return sectiondefType.subclass(*args_, **kwargs_) else: return sectiondefType(*args_, **kwargs_) factory = staticmethod(factory) def get_header(self): return self.header def set_header(self, header): self.header = header def get_description(self): return self.description def set_description(self, description): self.description = description def get_memberdef(self): return self.memberdef def set_memberdef(self, memberdef): self.memberdef = memberdef def add_memberdef(self, value): self.memberdef.append(value) def insert_memberdef(self, index, value): self.memberdef[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='sectiondefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='sectiondefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='sectiondefType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='sectiondefType'): if self.header is not None: showIndent(outfile, level) outfile.write('<%sheader>%s\n' % (namespace_, self.format_string(quote_xml(self.header).encode(ExternalEncoding), input_name='header'), namespace_)) if self.description: self.description.export(outfile, level, namespace_, name_='description') for memberdef_ in self.memberdef: memberdef_.export(outfile, level, namespace_, name_='memberdef') def hasContent_(self): if ( self.header is not None or self.description is not None or self.memberdef is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='sectiondefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('header=%s,\n' % quote_python(self.header).encode(ExternalEncoding)) if self.description: showIndent(outfile, level) outfile.write('description=model_.descriptionType(\n') self.description.exportLiteral(outfile, level, name_='description') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('memberdef=[\n') level += 1 for memberdef in self.memberdef: showIndent(outfile, level) outfile.write('model_.memberdef(\n') memberdef.exportLiteral(outfile, level, name_='memberdef') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'header': header_ = '' for text__content_ in child_.childNodes: header_ += text__content_.nodeValue self.header = header_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'description': obj_ = descriptionType.factory() obj_.build(child_) self.set_description(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'memberdef': obj_ = memberdefType.factory() obj_.build(child_) self.memberdef.append(obj_) # end class sectiondefType class memberdefType(GeneratedsSuper): subclass = None superclass = None def __init__(self, initonly=None, kind=None, volatile=None, const=None, raisexx=None, virt=None, readable=None, prot=None, explicit=None, new=None, final=None, writable=None, add=None, static=None, remove=None, sealed=None, mutable=None, gettable=None, inline=None, settable=None, id=None, templateparamlist=None, type_=None, definition=None, argsstring=None, name=None, read=None, write=None, bitfield=None, reimplements=None, reimplementedby=None, param=None, enumvalue=None, initializer=None, exceptions=None, briefdescription=None, detaileddescription=None, inbodydescription=None, location=None, references=None, referencedby=None): self.initonly = initonly self.kind = kind self.volatile = volatile self.const = const self.raisexx = raisexx self.virt = virt self.readable = readable self.prot = prot self.explicit = explicit self.new = new self.final = final self.writable = writable self.add = add self.static = static self.remove = remove self.sealed = sealed self.mutable = mutable self.gettable = gettable self.inline = inline self.settable = settable self.id = id self.templateparamlist = templateparamlist self.type_ = type_ self.definition = definition self.argsstring = argsstring self.name = name self.read = read self.write = write self.bitfield = bitfield if reimplements is None: self.reimplements = [] else: self.reimplements = reimplements if reimplementedby is None: self.reimplementedby = [] else: self.reimplementedby = reimplementedby if param is None: self.param = [] else: self.param = param if enumvalue is None: self.enumvalue = [] else: self.enumvalue = enumvalue self.initializer = initializer self.exceptions = exceptions self.briefdescription = briefdescription self.detaileddescription = detaileddescription self.inbodydescription = inbodydescription self.location = location if references is None: self.references = [] else: self.references = references if referencedby is None: self.referencedby = [] else: self.referencedby = referencedby def factory(*args_, **kwargs_): if memberdefType.subclass: return memberdefType.subclass(*args_, **kwargs_) else: return memberdefType(*args_, **kwargs_) factory = staticmethod(factory) def get_templateparamlist(self): return self.templateparamlist def set_templateparamlist(self, templateparamlist): self.templateparamlist = templateparamlist def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_definition(self): return self.definition def set_definition(self, definition): self.definition = definition def get_argsstring(self): return self.argsstring def set_argsstring(self, argsstring): self.argsstring = argsstring def get_name(self): return self.name def set_name(self, name): self.name = name def get_read(self): return self.read def set_read(self, read): self.read = read def get_write(self): return self.write def set_write(self, write): self.write = write def get_bitfield(self): return self.bitfield def set_bitfield(self, bitfield): self.bitfield = bitfield def get_reimplements(self): return self.reimplements def set_reimplements(self, reimplements): self.reimplements = reimplements def add_reimplements(self, value): self.reimplements.append(value) def insert_reimplements(self, index, value): self.reimplements[index] = value def get_reimplementedby(self): return self.reimplementedby def set_reimplementedby(self, reimplementedby): self.reimplementedby = reimplementedby def add_reimplementedby(self, value): self.reimplementedby.append(value) def insert_reimplementedby(self, index, value): self.reimplementedby[index] = value def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value def get_enumvalue(self): return self.enumvalue def set_enumvalue(self, enumvalue): self.enumvalue = enumvalue def add_enumvalue(self, value): self.enumvalue.append(value) def insert_enumvalue(self, index, value): self.enumvalue[index] = value def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_exceptions(self): return self.exceptions def set_exceptions(self, exceptions): self.exceptions = exceptions def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_inbodydescription(self): return self.inbodydescription def set_inbodydescription(self, inbodydescription): self.inbodydescription = inbodydescription def get_location(self): return self.location def set_location(self, location): self.location = location def get_references(self): return self.references def set_references(self, references): self.references = references def add_references(self, value): self.references.append(value) def insert_references(self, index, value): self.references[index] = value def get_referencedby(self): return self.referencedby def set_referencedby(self, referencedby): self.referencedby = referencedby def add_referencedby(self, value): self.referencedby.append(value) def insert_referencedby(self, index, value): self.referencedby[index] = value def get_initonly(self): return self.initonly def set_initonly(self, initonly): self.initonly = initonly def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_volatile(self): return self.volatile def set_volatile(self, volatile): self.volatile = volatile def get_const(self): return self.const def set_const(self, const): self.const = const def get_raise(self): return self.raisexx def set_raise(self, raisexx): self.raisexx = raisexx def get_virt(self): return self.virt def set_virt(self, virt): self.virt = virt def get_readable(self): return self.readable def set_readable(self, readable): self.readable = readable def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_explicit(self): return self.explicit def set_explicit(self, explicit): self.explicit = explicit def get_new(self): return self.new def set_new(self, new): self.new = new def get_final(self): return self.final def set_final(self, final): self.final = final def get_writable(self): return self.writable def set_writable(self, writable): self.writable = writable def get_add(self): return self.add def set_add(self, add): self.add = add def get_static(self): return self.static def set_static(self, static): self.static = static def get_remove(self): return self.remove def set_remove(self, remove): self.remove = remove def get_sealed(self): return self.sealed def set_sealed(self, sealed): self.sealed = sealed def get_mutable(self): return self.mutable def set_mutable(self, mutable): self.mutable = mutable def get_gettable(self): return self.gettable def set_gettable(self, gettable): self.gettable = gettable def get_inline(self): return self.inline def set_inline(self, inline): self.inline = inline def get_settable(self): return self.settable def set_settable(self, settable): self.settable = settable def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='memberdefType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='memberdefType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='memberdefType'): if self.initonly is not None: outfile.write(' initonly=%s' % (quote_attrib(self.initonly), )) if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) if self.volatile is not None: outfile.write(' volatile=%s' % (quote_attrib(self.volatile), )) if self.const is not None: outfile.write(' const=%s' % (quote_attrib(self.const), )) if self.raisexx is not None: outfile.write(' raise=%s' % (quote_attrib(self.raisexx), )) if self.virt is not None: outfile.write(' virt=%s' % (quote_attrib(self.virt), )) if self.readable is not None: outfile.write(' readable=%s' % (quote_attrib(self.readable), )) if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.explicit is not None: outfile.write(' explicit=%s' % (quote_attrib(self.explicit), )) if self.new is not None: outfile.write(' new=%s' % (quote_attrib(self.new), )) if self.final is not None: outfile.write(' final=%s' % (quote_attrib(self.final), )) if self.writable is not None: outfile.write(' writable=%s' % (quote_attrib(self.writable), )) if self.add is not None: outfile.write(' add=%s' % (quote_attrib(self.add), )) if self.static is not None: outfile.write(' static=%s' % (quote_attrib(self.static), )) if self.remove is not None: outfile.write(' remove=%s' % (quote_attrib(self.remove), )) if self.sealed is not None: outfile.write(' sealed=%s' % (quote_attrib(self.sealed), )) if self.mutable is not None: outfile.write(' mutable=%s' % (quote_attrib(self.mutable), )) if self.gettable is not None: outfile.write(' gettable=%s' % (quote_attrib(self.gettable), )) if self.inline is not None: outfile.write(' inline=%s' % (quote_attrib(self.inline), )) if self.settable is not None: outfile.write(' settable=%s' % (quote_attrib(self.settable), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='memberdefType'): if self.templateparamlist: self.templateparamlist.export(outfile, level, namespace_, name_='templateparamlist') if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.definition is not None: showIndent(outfile, level) outfile.write('<%sdefinition>%s\n' % (namespace_, self.format_string(quote_xml(self.definition).encode(ExternalEncoding), input_name='definition'), namespace_)) if self.argsstring is not None: showIndent(outfile, level) outfile.write('<%sargsstring>%s\n' % (namespace_, self.format_string(quote_xml(self.argsstring).encode(ExternalEncoding), input_name='argsstring'), namespace_)) if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) if self.read is not None: showIndent(outfile, level) outfile.write('<%sread>%s\n' % (namespace_, self.format_string(quote_xml(self.read).encode(ExternalEncoding), input_name='read'), namespace_)) if self.write is not None: showIndent(outfile, level) outfile.write('<%swrite>%s\n' % (namespace_, self.format_string(quote_xml(self.write).encode(ExternalEncoding), input_name='write'), namespace_)) if self.bitfield is not None: showIndent(outfile, level) outfile.write('<%sbitfield>%s\n' % (namespace_, self.format_string(quote_xml(self.bitfield).encode(ExternalEncoding), input_name='bitfield'), namespace_)) for reimplements_ in self.reimplements: reimplements_.export(outfile, level, namespace_, name_='reimplements') for reimplementedby_ in self.reimplementedby: reimplementedby_.export(outfile, level, namespace_, name_='reimplementedby') for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') for enumvalue_ in self.enumvalue: enumvalue_.export(outfile, level, namespace_, name_='enumvalue') if self.initializer: self.initializer.export(outfile, level, namespace_, name_='initializer') if self.exceptions: self.exceptions.export(outfile, level, namespace_, name_='exceptions') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') if self.detaileddescription: self.detaileddescription.export(outfile, level, namespace_, name_='detaileddescription') if self.inbodydescription: self.inbodydescription.export(outfile, level, namespace_, name_='inbodydescription') if self.location: self.location.export(outfile, level, namespace_, name_='location', ) for references_ in self.references: references_.export(outfile, level, namespace_, name_='references') for referencedby_ in self.referencedby: referencedby_.export(outfile, level, namespace_, name_='referencedby') def hasContent_(self): if ( self.templateparamlist is not None or self.type_ is not None or self.definition is not None or self.argsstring is not None or self.name is not None or self.read is not None or self.write is not None or self.bitfield is not None or self.reimplements is not None or self.reimplementedby is not None or self.param is not None or self.enumvalue is not None or self.initializer is not None or self.exceptions is not None or self.briefdescription is not None or self.detaileddescription is not None or self.inbodydescription is not None or self.location is not None or self.references is not None or self.referencedby is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='memberdefType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.initonly is not None: showIndent(outfile, level) outfile.write('initonly = "%s",\n' % (self.initonly,)) if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.volatile is not None: showIndent(outfile, level) outfile.write('volatile = "%s",\n' % (self.volatile,)) if self.const is not None: showIndent(outfile, level) outfile.write('const = "%s",\n' % (self.const,)) if self.raisexx is not None: showIndent(outfile, level) outfile.write('raisexx = "%s",\n' % (self.raisexx,)) if self.virt is not None: showIndent(outfile, level) outfile.write('virt = "%s",\n' % (self.virt,)) if self.readable is not None: showIndent(outfile, level) outfile.write('readable = "%s",\n' % (self.readable,)) if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.explicit is not None: showIndent(outfile, level) outfile.write('explicit = "%s",\n' % (self.explicit,)) if self.new is not None: showIndent(outfile, level) outfile.write('new = "%s",\n' % (self.new,)) if self.final is not None: showIndent(outfile, level) outfile.write('final = "%s",\n' % (self.final,)) if self.writable is not None: showIndent(outfile, level) outfile.write('writable = "%s",\n' % (self.writable,)) if self.add is not None: showIndent(outfile, level) outfile.write('add = "%s",\n' % (self.add,)) if self.static is not None: showIndent(outfile, level) outfile.write('static = "%s",\n' % (self.static,)) if self.remove is not None: showIndent(outfile, level) outfile.write('remove = "%s",\n' % (self.remove,)) if self.sealed is not None: showIndent(outfile, level) outfile.write('sealed = "%s",\n' % (self.sealed,)) if self.mutable is not None: showIndent(outfile, level) outfile.write('mutable = "%s",\n' % (self.mutable,)) if self.gettable is not None: showIndent(outfile, level) outfile.write('gettable = "%s",\n' % (self.gettable,)) if self.inline is not None: showIndent(outfile, level) outfile.write('inline = "%s",\n' % (self.inline,)) if self.settable is not None: showIndent(outfile, level) outfile.write('settable = "%s",\n' % (self.settable,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): if self.templateparamlist: showIndent(outfile, level) outfile.write('templateparamlist=model_.templateparamlistType(\n') self.templateparamlist.exportLiteral(outfile, level, name_='templateparamlist') showIndent(outfile, level) outfile.write('),\n') if self.type_: showIndent(outfile, level) outfile.write('type_=model_.linkedTextType(\n') self.type_.exportLiteral(outfile, level, name_='type') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('definition=%s,\n' % quote_python(self.definition).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('argsstring=%s,\n' % quote_python(self.argsstring).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('read=%s,\n' % quote_python(self.read).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('write=%s,\n' % quote_python(self.write).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('bitfield=%s,\n' % quote_python(self.bitfield).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('reimplements=[\n') level += 1 for reimplements in self.reimplements: showIndent(outfile, level) outfile.write('model_.reimplements(\n') reimplements.exportLiteral(outfile, level, name_='reimplements') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('reimplementedby=[\n') level += 1 for reimplementedby in self.reimplementedby: showIndent(outfile, level) outfile.write('model_.reimplementedby(\n') reimplementedby.exportLiteral(outfile, level, name_='reimplementedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('param=[\n') level += 1 for param in self.param: showIndent(outfile, level) outfile.write('model_.param(\n') param.exportLiteral(outfile, level, name_='param') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('enumvalue=[\n') level += 1 for enumvalue in self.enumvalue: showIndent(outfile, level) outfile.write('model_.enumvalue(\n') enumvalue.exportLiteral(outfile, level, name_='enumvalue') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.initializer: showIndent(outfile, level) outfile.write('initializer=model_.linkedTextType(\n') self.initializer.exportLiteral(outfile, level, name_='initializer') showIndent(outfile, level) outfile.write('),\n') if self.exceptions: showIndent(outfile, level) outfile.write('exceptions=model_.linkedTextType(\n') self.exceptions.exportLiteral(outfile, level, name_='exceptions') showIndent(outfile, level) outfile.write('),\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') if self.detaileddescription: showIndent(outfile, level) outfile.write('detaileddescription=model_.descriptionType(\n') self.detaileddescription.exportLiteral(outfile, level, name_='detaileddescription') showIndent(outfile, level) outfile.write('),\n') if self.inbodydescription: showIndent(outfile, level) outfile.write('inbodydescription=model_.descriptionType(\n') self.inbodydescription.exportLiteral(outfile, level, name_='inbodydescription') showIndent(outfile, level) outfile.write('),\n') if self.location: showIndent(outfile, level) outfile.write('location=model_.locationType(\n') self.location.exportLiteral(outfile, level, name_='location') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('references=[\n') level += 1 for references in self.references: showIndent(outfile, level) outfile.write('model_.references(\n') references.exportLiteral(outfile, level, name_='references') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('referencedby=[\n') level += 1 for referencedby in self.referencedby: showIndent(outfile, level) outfile.write('model_.referencedby(\n') referencedby.exportLiteral(outfile, level, name_='referencedby') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('initonly'): self.initonly = attrs.get('initonly').value if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('volatile'): self.volatile = attrs.get('volatile').value if attrs.get('const'): self.const = attrs.get('const').value if attrs.get('raise'): self.raisexx = attrs.get('raise').value if attrs.get('virt'): self.virt = attrs.get('virt').value if attrs.get('readable'): self.readable = attrs.get('readable').value if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('explicit'): self.explicit = attrs.get('explicit').value if attrs.get('new'): self.new = attrs.get('new').value if attrs.get('final'): self.final = attrs.get('final').value if attrs.get('writable'): self.writable = attrs.get('writable').value if attrs.get('add'): self.add = attrs.get('add').value if attrs.get('static'): self.static = attrs.get('static').value if attrs.get('remove'): self.remove = attrs.get('remove').value if attrs.get('sealed'): self.sealed = attrs.get('sealed').value if attrs.get('mutable'): self.mutable = attrs.get('mutable').value if attrs.get('gettable'): self.gettable = attrs.get('gettable').value if attrs.get('inline'): self.inline = attrs.get('inline').value if attrs.get('settable'): self.settable = attrs.get('settable').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'templateparamlist': obj_ = templateparamlistType.factory() obj_.build(child_) self.set_templateparamlist(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'definition': definition_ = '' for text__content_ in child_.childNodes: definition_ += text__content_.nodeValue self.definition = definition_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'argsstring': argsstring_ = '' for text__content_ in child_.childNodes: argsstring_ += text__content_.nodeValue self.argsstring = argsstring_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'read': read_ = '' for text__content_ in child_.childNodes: read_ += text__content_.nodeValue self.read = read_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'write': write_ = '' for text__content_ in child_.childNodes: write_ += text__content_.nodeValue self.write = write_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'bitfield': bitfield_ = '' for text__content_ in child_.childNodes: bitfield_ += text__content_.nodeValue self.bitfield = bitfield_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'reimplements': obj_ = reimplementType.factory() obj_.build(child_) self.reimplements.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'reimplementedby': obj_ = reimplementType.factory() obj_.build(child_) self.reimplementedby.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'enumvalue': obj_ = enumvalueType.factory() obj_.build(child_) self.enumvalue.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'initializer': obj_ = linkedTextType.factory() obj_.build(child_) self.set_initializer(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'exceptions': obj_ = linkedTextType.factory() obj_.build(child_) self.set_exceptions(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_detaileddescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'inbodydescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_inbodydescription(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'location': obj_ = locationType.factory() obj_.build(child_) self.set_location(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'references': obj_ = referenceType.factory() obj_.build(child_) self.references.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'referencedby': obj_ = referenceType.factory() obj_.build(child_) self.referencedby.append(obj_) # end class memberdefType class definition(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if definition.subclass: return definition.subclass(*args_, **kwargs_) else: return definition(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='definition', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='definition') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='definition'): pass def exportChildren(self, outfile, level, namespace_='', name_='definition'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='definition'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class definition class argsstring(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if argsstring.subclass: return argsstring.subclass(*args_, **kwargs_) else: return argsstring(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='argsstring', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='argsstring') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='argsstring'): pass def exportChildren(self, outfile, level, namespace_='', name_='argsstring'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='argsstring'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class argsstring class read(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if read.subclass: return read.subclass(*args_, **kwargs_) else: return read(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='read', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='read') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='read'): pass def exportChildren(self, outfile, level, namespace_='', name_='read'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='read'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class read class write(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if write.subclass: return write.subclass(*args_, **kwargs_) else: return write(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='write', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='write') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='write'): pass def exportChildren(self, outfile, level, namespace_='', name_='write'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='write'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class write class bitfield(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if bitfield.subclass: return bitfield.subclass(*args_, **kwargs_) else: return bitfield(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='bitfield', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='bitfield') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='bitfield'): pass def exportChildren(self, outfile, level, namespace_='', name_='bitfield'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='bitfield'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class bitfield class descriptionType(GeneratedsSuper): subclass = None superclass = None def __init__(self, title=None, para=None, sect1=None, internal=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if descriptionType.subclass: return descriptionType.subclass(*args_, **kwargs_) else: return descriptionType(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def export(self, outfile, level, namespace_='', name_='descriptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='descriptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='descriptionType'): pass def exportChildren(self, outfile, level, namespace_='', name_='descriptionType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect1 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='descriptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class descriptionType class enumvalueType(GeneratedsSuper): subclass = None superclass = None def __init__(self, prot=None, id=None, name=None, initializer=None, briefdescription=None, detaileddescription=None, mixedclass_=None, content_=None): self.prot = prot self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if enumvalueType.subclass: return enumvalueType.subclass(*args_, **kwargs_) else: return enumvalueType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_initializer(self): return self.initializer def set_initializer(self, initializer): self.initializer = initializer def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def get_detaileddescription(self): return self.detaileddescription def set_detaileddescription(self, detaileddescription): self.detaileddescription = detaileddescription def get_prot(self): return self.prot def set_prot(self, prot): self.prot = prot def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='enumvalueType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='enumvalueType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='enumvalueType'): if self.prot is not None: outfile.write(' prot=%s' % (quote_attrib(self.prot), )) if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='enumvalueType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.name is not None or self.initializer is not None or self.briefdescription is not None or self.detaileddescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='enumvalueType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.prot is not None: showIndent(outfile, level) outfile.write('prot = "%s",\n' % (self.prot,)) if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('prot'): self.prot = attrs.get('prot').value if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'name', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'initializer': childobj_ = linkedTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'initializer', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'briefdescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'detaileddescription': childobj_ = descriptionType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'detaileddescription', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class enumvalueType class templateparamlistType(GeneratedsSuper): subclass = None superclass = None def __init__(self, param=None): if param is None: self.param = [] else: self.param = param def factory(*args_, **kwargs_): if templateparamlistType.subclass: return templateparamlistType.subclass(*args_, **kwargs_) else: return templateparamlistType(*args_, **kwargs_) factory = staticmethod(factory) def get_param(self): return self.param def set_param(self, param): self.param = param def add_param(self, value): self.param.append(value) def insert_param(self, index, value): self.param[index] = value def export(self, outfile, level, namespace_='', name_='templateparamlistType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='templateparamlistType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='templateparamlistType'): pass def exportChildren(self, outfile, level, namespace_='', name_='templateparamlistType'): for param_ in self.param: param_.export(outfile, level, namespace_, name_='param') def hasContent_(self): if ( self.param is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='templateparamlistType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('param=[\n') level += 1 for param in self.param: showIndent(outfile, level) outfile.write('model_.param(\n') param.exportLiteral(outfile, level, name_='param') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'param': obj_ = paramType.factory() obj_.build(child_) self.param.append(obj_) # end class templateparamlistType class paramType(GeneratedsSuper): subclass = None superclass = None def __init__(self, type_=None, declname=None, defname=None, array=None, defval=None, briefdescription=None): self.type_ = type_ self.declname = declname self.defname = defname self.array = array self.defval = defval self.briefdescription = briefdescription def factory(*args_, **kwargs_): if paramType.subclass: return paramType.subclass(*args_, **kwargs_) else: return paramType(*args_, **kwargs_) factory = staticmethod(factory) def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_declname(self): return self.declname def set_declname(self, declname): self.declname = declname def get_defname(self): return self.defname def set_defname(self, defname): self.defname = defname def get_array(self): return self.array def set_array(self, array): self.array = array def get_defval(self): return self.defval def set_defval(self, defval): self.defval = defval def get_briefdescription(self): return self.briefdescription def set_briefdescription(self, briefdescription): self.briefdescription = briefdescription def export(self, outfile, level, namespace_='', name_='paramType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='paramType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='paramType'): pass def exportChildren(self, outfile, level, namespace_='', name_='paramType'): if self.type_: self.type_.export(outfile, level, namespace_, name_='type') if self.declname is not None: showIndent(outfile, level) outfile.write('<%sdeclname>%s\n' % (namespace_, self.format_string(quote_xml(self.declname).encode(ExternalEncoding), input_name='declname'), namespace_)) if self.defname is not None: showIndent(outfile, level) outfile.write('<%sdefname>%s\n' % (namespace_, self.format_string(quote_xml(self.defname).encode(ExternalEncoding), input_name='defname'), namespace_)) if self.array is not None: showIndent(outfile, level) outfile.write('<%sarray>%s\n' % (namespace_, self.format_string(quote_xml(self.array).encode(ExternalEncoding), input_name='array'), namespace_)) if self.defval: self.defval.export(outfile, level, namespace_, name_='defval') if self.briefdescription: self.briefdescription.export(outfile, level, namespace_, name_='briefdescription') def hasContent_(self): if ( self.type_ is not None or self.declname is not None or self.defname is not None or self.array is not None or self.defval is not None or self.briefdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='paramType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): if self.type_: showIndent(outfile, level) outfile.write('type_=model_.linkedTextType(\n') self.type_.exportLiteral(outfile, level, name_='type') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('declname=%s,\n' % quote_python(self.declname).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('defname=%s,\n' % quote_python(self.defname).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('array=%s,\n' % quote_python(self.array).encode(ExternalEncoding)) if self.defval: showIndent(outfile, level) outfile.write('defval=model_.linkedTextType(\n') self.defval.exportLiteral(outfile, level, name_='defval') showIndent(outfile, level) outfile.write('),\n') if self.briefdescription: showIndent(outfile, level) outfile.write('briefdescription=model_.descriptionType(\n') self.briefdescription.exportLiteral(outfile, level, name_='briefdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'type': obj_ = linkedTextType.factory() obj_.build(child_) self.set_type(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'declname': declname_ = '' for text__content_ in child_.childNodes: declname_ += text__content_.nodeValue self.declname = declname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'defname': defname_ = '' for text__content_ in child_.childNodes: defname_ += text__content_.nodeValue self.defname = defname_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'array': array_ = '' for text__content_ in child_.childNodes: array_ += text__content_.nodeValue self.array = array_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'defval': obj_ = linkedTextType.factory() obj_.build(child_) self.set_defval(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'briefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_briefdescription(obj_) # end class paramType class declname(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if declname.subclass: return declname.subclass(*args_, **kwargs_) else: return declname(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='declname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='declname') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='declname'): pass def exportChildren(self, outfile, level, namespace_='', name_='declname'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='declname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class declname class defname(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if defname.subclass: return defname.subclass(*args_, **kwargs_) else: return defname(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='defname', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='defname') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='defname'): pass def exportChildren(self, outfile, level, namespace_='', name_='defname'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='defname'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class defname class array(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if array.subclass: return array.subclass(*args_, **kwargs_) else: return array(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='array', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='array') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='array'): pass def exportChildren(self, outfile, level, namespace_='', name_='array'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='array'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class array class linkedTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, ref=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if linkedTextType.subclass: return linkedTextType.subclass(*args_, **kwargs_) else: return linkedTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def export(self, outfile, level, namespace_='', name_='linkedTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='linkedTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='linkedTextType'): pass def exportChildren(self, outfile, level, namespace_='', name_='linkedTextType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='linkedTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class linkedTextType class graphType(GeneratedsSuper): subclass = None superclass = None def __init__(self, node=None): if node is None: self.node = [] else: self.node = node def factory(*args_, **kwargs_): if graphType.subclass: return graphType.subclass(*args_, **kwargs_) else: return graphType(*args_, **kwargs_) factory = staticmethod(factory) def get_node(self): return self.node def set_node(self, node): self.node = node def add_node(self, value): self.node.append(value) def insert_node(self, index, value): self.node[index] = value def export(self, outfile, level, namespace_='', name_='graphType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='graphType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='graphType'): pass def exportChildren(self, outfile, level, namespace_='', name_='graphType'): for node_ in self.node: node_.export(outfile, level, namespace_, name_='node') def hasContent_(self): if ( self.node is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='graphType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('node=[\n') level += 1 for node in self.node: showIndent(outfile, level) outfile.write('model_.node(\n') node.exportLiteral(outfile, level, name_='node') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'node': obj_ = nodeType.factory() obj_.build(child_) self.node.append(obj_) # end class graphType class nodeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, label=None, link=None, childnode=None): self.id = id self.label = label self.link = link if childnode is None: self.childnode = [] else: self.childnode = childnode def factory(*args_, **kwargs_): if nodeType.subclass: return nodeType.subclass(*args_, **kwargs_) else: return nodeType(*args_, **kwargs_) factory = staticmethod(factory) def get_label(self): return self.label def set_label(self, label): self.label = label def get_link(self): return self.link def set_link(self, link): self.link = link def get_childnode(self): return self.childnode def set_childnode(self, childnode): self.childnode = childnode def add_childnode(self, value): self.childnode.append(value) def insert_childnode(self, index, value): self.childnode[index] = value def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='nodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='nodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='nodeType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='nodeType'): if self.label is not None: showIndent(outfile, level) outfile.write('<%slabel>%s\n' % (namespace_, self.format_string(quote_xml(self.label).encode(ExternalEncoding), input_name='label'), namespace_)) if self.link: self.link.export(outfile, level, namespace_, name_='link') for childnode_ in self.childnode: childnode_.export(outfile, level, namespace_, name_='childnode') def hasContent_(self): if ( self.label is not None or self.link is not None or self.childnode is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='nodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('label=%s,\n' % quote_python(self.label).encode(ExternalEncoding)) if self.link: showIndent(outfile, level) outfile.write('link=model_.linkType(\n') self.link.exportLiteral(outfile, level, name_='link') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('childnode=[\n') level += 1 for childnode in self.childnode: showIndent(outfile, level) outfile.write('model_.childnode(\n') childnode.exportLiteral(outfile, level, name_='childnode') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'label': label_ = '' for text__content_ in child_.childNodes: label_ += text__content_.nodeValue self.label = label_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'link': obj_ = linkType.factory() obj_.build(child_) self.set_link(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'childnode': obj_ = childnodeType.factory() obj_.build(child_) self.childnode.append(obj_) # end class nodeType class label(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if label.subclass: return label.subclass(*args_, **kwargs_) else: return label(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='label', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='label') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='label'): pass def exportChildren(self, outfile, level, namespace_='', name_='label'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='label'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class label class childnodeType(GeneratedsSuper): subclass = None superclass = None def __init__(self, relation=None, refid=None, edgelabel=None): self.relation = relation self.refid = refid if edgelabel is None: self.edgelabel = [] else: self.edgelabel = edgelabel def factory(*args_, **kwargs_): if childnodeType.subclass: return childnodeType.subclass(*args_, **kwargs_) else: return childnodeType(*args_, **kwargs_) factory = staticmethod(factory) def get_edgelabel(self): return self.edgelabel def set_edgelabel(self, edgelabel): self.edgelabel = edgelabel def add_edgelabel(self, value): self.edgelabel.append(value) def insert_edgelabel(self, index, value): self.edgelabel[index] = value def get_relation(self): return self.relation def set_relation(self, relation): self.relation = relation def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='childnodeType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='childnodeType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='childnodeType'): if self.relation is not None: outfile.write(' relation=%s' % (quote_attrib(self.relation), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='childnodeType'): for edgelabel_ in self.edgelabel: showIndent(outfile, level) outfile.write('<%sedgelabel>%s\n' % (namespace_, self.format_string(quote_xml(edgelabel_).encode(ExternalEncoding), input_name='edgelabel'), namespace_)) def hasContent_(self): if ( self.edgelabel is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='childnodeType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.relation is not None: showIndent(outfile, level) outfile.write('relation = "%s",\n' % (self.relation,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('edgelabel=[\n') level += 1 for edgelabel in self.edgelabel: showIndent(outfile, level) outfile.write('%s,\n' % quote_python(edgelabel).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('relation'): self.relation = attrs.get('relation').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'edgelabel': edgelabel_ = '' for text__content_ in child_.childNodes: edgelabel_ += text__content_.nodeValue self.edgelabel.append(edgelabel_) # end class childnodeType class edgelabel(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if edgelabel.subclass: return edgelabel.subclass(*args_, **kwargs_) else: return edgelabel(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='edgelabel', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='edgelabel') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='edgelabel'): pass def exportChildren(self, outfile, level, namespace_='', name_='edgelabel'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='edgelabel'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class edgelabel class linkType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, external=None, valueOf_=''): self.refid = refid self.external = external self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if linkType.subclass: return linkType.subclass(*args_, **kwargs_) else: return linkType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='linkType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='linkType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='linkType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='linkType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='linkType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class linkType class listingType(GeneratedsSuper): subclass = None superclass = None def __init__(self, codeline=None): if codeline is None: self.codeline = [] else: self.codeline = codeline def factory(*args_, **kwargs_): if listingType.subclass: return listingType.subclass(*args_, **kwargs_) else: return listingType(*args_, **kwargs_) factory = staticmethod(factory) def get_codeline(self): return self.codeline def set_codeline(self, codeline): self.codeline = codeline def add_codeline(self, value): self.codeline.append(value) def insert_codeline(self, index, value): self.codeline[index] = value def export(self, outfile, level, namespace_='', name_='listingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='listingType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='listingType'): pass def exportChildren(self, outfile, level, namespace_='', name_='listingType'): for codeline_ in self.codeline: codeline_.export(outfile, level, namespace_, name_='codeline') def hasContent_(self): if ( self.codeline is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='listingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('codeline=[\n') level += 1 for codeline in self.codeline: showIndent(outfile, level) outfile.write('model_.codeline(\n') codeline.exportLiteral(outfile, level, name_='codeline') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'codeline': obj_ = codelineType.factory() obj_.build(child_) self.codeline.append(obj_) # end class listingType class codelineType(GeneratedsSuper): subclass = None superclass = None def __init__(self, external=None, lineno=None, refkind=None, refid=None, highlight=None): self.external = external self.lineno = lineno self.refkind = refkind self.refid = refid if highlight is None: self.highlight = [] else: self.highlight = highlight def factory(*args_, **kwargs_): if codelineType.subclass: return codelineType.subclass(*args_, **kwargs_) else: return codelineType(*args_, **kwargs_) factory = staticmethod(factory) def get_highlight(self): return self.highlight def set_highlight(self, highlight): self.highlight = highlight def add_highlight(self, value): self.highlight.append(value) def insert_highlight(self, index, value): self.highlight[index] = value def get_external(self): return self.external def set_external(self, external): self.external = external def get_lineno(self): return self.lineno def set_lineno(self, lineno): self.lineno = lineno def get_refkind(self): return self.refkind def set_refkind(self, refkind): self.refkind = refkind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='codelineType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='codelineType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='codelineType'): if self.external is not None: outfile.write(' external=%s' % (quote_attrib(self.external), )) if self.lineno is not None: outfile.write(' lineno="%s"' % self.format_integer(self.lineno, input_name='lineno')) if self.refkind is not None: outfile.write(' refkind=%s' % (quote_attrib(self.refkind), )) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='codelineType'): for highlight_ in self.highlight: highlight_.export(outfile, level, namespace_, name_='highlight') def hasContent_(self): if ( self.highlight is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='codelineType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.external is not None: showIndent(outfile, level) outfile.write('external = "%s",\n' % (self.external,)) if self.lineno is not None: showIndent(outfile, level) outfile.write('lineno = %s,\n' % (self.lineno,)) if self.refkind is not None: showIndent(outfile, level) outfile.write('refkind = "%s",\n' % (self.refkind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('highlight=[\n') level += 1 for highlight in self.highlight: showIndent(outfile, level) outfile.write('model_.highlight(\n') highlight.exportLiteral(outfile, level, name_='highlight') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('external'): self.external = attrs.get('external').value if attrs.get('lineno'): try: self.lineno = int(attrs.get('lineno').value) except ValueError, exp: raise ValueError('Bad integer attribute (lineno): %s' % exp) if attrs.get('refkind'): self.refkind = attrs.get('refkind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'highlight': obj_ = highlightType.factory() obj_.build(child_) self.highlight.append(obj_) # end class codelineType class highlightType(GeneratedsSuper): subclass = None superclass = None def __init__(self, classxx=None, sp=None, ref=None, mixedclass_=None, content_=None): self.classxx = classxx if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if highlightType.subclass: return highlightType.subclass(*args_, **kwargs_) else: return highlightType(*args_, **kwargs_) factory = staticmethod(factory) def get_sp(self): return self.sp def set_sp(self, sp): self.sp = sp def add_sp(self, value): self.sp.append(value) def insert_sp(self, index, value): self.sp[index] = value def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def add_ref(self, value): self.ref.append(value) def insert_ref(self, index, value): self.ref[index] = value def get_class(self): return self.classxx def set_class(self, classxx): self.classxx = classxx def export(self, outfile, level, namespace_='', name_='highlightType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='highlightType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='highlightType'): if self.classxx is not None: outfile.write(' class=%s' % (quote_attrib(self.classxx), )) def exportChildren(self, outfile, level, namespace_='', name_='highlightType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.sp is not None or self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='highlightType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.classxx is not None: showIndent(outfile, level) outfile.write('classxx = "%s",\n' % (self.classxx,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('class'): self.classxx = attrs.get('class').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sp': value_ = [] for text_ in child_.childNodes: value_.append(text_.nodeValue) valuestr_ = ''.join(value_) obj_ = self.mixedclass_(MixedContainer.CategorySimple, MixedContainer.TypeString, 'sp', valuestr_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class highlightType class sp(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if sp.subclass: return sp.subclass(*args_, **kwargs_) else: return sp(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='sp', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='sp') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='sp'): pass def exportChildren(self, outfile, level, namespace_='', name_='sp'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='sp'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class sp class referenceType(GeneratedsSuper): subclass = None superclass = None def __init__(self, endline=None, startline=None, refid=None, compoundref=None, valueOf_='', mixedclass_=None, content_=None): self.endline = endline self.startline = startline self.refid = refid self.compoundref = compoundref if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if referenceType.subclass: return referenceType.subclass(*args_, **kwargs_) else: return referenceType(*args_, **kwargs_) factory = staticmethod(factory) def get_endline(self): return self.endline def set_endline(self, endline): self.endline = endline def get_startline(self): return self.startline def set_startline(self, startline): self.startline = startline def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_compoundref(self): return self.compoundref def set_compoundref(self, compoundref): self.compoundref = compoundref def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='referenceType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='referenceType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='referenceType'): if self.endline is not None: outfile.write(' endline="%s"' % self.format_integer(self.endline, input_name='endline')) if self.startline is not None: outfile.write(' startline="%s"' % self.format_integer(self.startline, input_name='startline')) if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.compoundref is not None: outfile.write(' compoundref=%s' % (self.format_string(quote_attrib(self.compoundref).encode(ExternalEncoding), input_name='compoundref'), )) def exportChildren(self, outfile, level, namespace_='', name_='referenceType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='referenceType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.endline is not None: showIndent(outfile, level) outfile.write('endline = %s,\n' % (self.endline,)) if self.startline is not None: showIndent(outfile, level) outfile.write('startline = %s,\n' % (self.startline,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.compoundref is not None: showIndent(outfile, level) outfile.write('compoundref = %s,\n' % (self.compoundref,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('endline'): try: self.endline = int(attrs.get('endline').value) except ValueError, exp: raise ValueError('Bad integer attribute (endline): %s' % exp) if attrs.get('startline'): try: self.startline = int(attrs.get('startline').value) except ValueError, exp: raise ValueError('Bad integer attribute (startline): %s' % exp) if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('compoundref'): self.compoundref = attrs.get('compoundref').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class referenceType class locationType(GeneratedsSuper): subclass = None superclass = None def __init__(self, bodystart=None, line=None, bodyend=None, bodyfile=None, file=None, valueOf_=''): self.bodystart = bodystart self.line = line self.bodyend = bodyend self.bodyfile = bodyfile self.file = file self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if locationType.subclass: return locationType.subclass(*args_, **kwargs_) else: return locationType(*args_, **kwargs_) factory = staticmethod(factory) def get_bodystart(self): return self.bodystart def set_bodystart(self, bodystart): self.bodystart = bodystart def get_line(self): return self.line def set_line(self, line): self.line = line def get_bodyend(self): return self.bodyend def set_bodyend(self, bodyend): self.bodyend = bodyend def get_bodyfile(self): return self.bodyfile def set_bodyfile(self, bodyfile): self.bodyfile = bodyfile def get_file(self): return self.file def set_file(self, file): self.file = file def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='locationType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='locationType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='locationType'): if self.bodystart is not None: outfile.write(' bodystart="%s"' % self.format_integer(self.bodystart, input_name='bodystart')) if self.line is not None: outfile.write(' line="%s"' % self.format_integer(self.line, input_name='line')) if self.bodyend is not None: outfile.write(' bodyend="%s"' % self.format_integer(self.bodyend, input_name='bodyend')) if self.bodyfile is not None: outfile.write(' bodyfile=%s' % (self.format_string(quote_attrib(self.bodyfile).encode(ExternalEncoding), input_name='bodyfile'), )) if self.file is not None: outfile.write(' file=%s' % (self.format_string(quote_attrib(self.file).encode(ExternalEncoding), input_name='file'), )) def exportChildren(self, outfile, level, namespace_='', name_='locationType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='locationType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.bodystart is not None: showIndent(outfile, level) outfile.write('bodystart = %s,\n' % (self.bodystart,)) if self.line is not None: showIndent(outfile, level) outfile.write('line = %s,\n' % (self.line,)) if self.bodyend is not None: showIndent(outfile, level) outfile.write('bodyend = %s,\n' % (self.bodyend,)) if self.bodyfile is not None: showIndent(outfile, level) outfile.write('bodyfile = %s,\n' % (self.bodyfile,)) if self.file is not None: showIndent(outfile, level) outfile.write('file = %s,\n' % (self.file,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('bodystart'): try: self.bodystart = int(attrs.get('bodystart').value) except ValueError, exp: raise ValueError('Bad integer attribute (bodystart): %s' % exp) if attrs.get('line'): try: self.line = int(attrs.get('line').value) except ValueError, exp: raise ValueError('Bad integer attribute (line): %s' % exp) if attrs.get('bodyend'): try: self.bodyend = int(attrs.get('bodyend').value) except ValueError, exp: raise ValueError('Bad integer attribute (bodyend): %s' % exp) if attrs.get('bodyfile'): self.bodyfile = attrs.get('bodyfile').value if attrs.get('file'): self.file = attrs.get('file').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class locationType class docSect1Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect2=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect1Type.subclass: return docSect1Type.subclass(*args_, **kwargs_) else: return docSect1Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect1Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect2 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect1Type class docSect2Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect3=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect2Type.subclass: return docSect2Type.subclass(*args_, **kwargs_) else: return docSect2Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect2Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect3 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect2Type class docSect3Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, sect4=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect3Type.subclass: return docSect3Type.subclass(*args_, **kwargs_) else: return docSect3Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect4(self): return self.sect4 def set_sect4(self, sect4): self.sect4 = sect4 def add_sect4(self, value): self.sect4.append(value) def insert_sect4(self, index, value): self.sect4[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect3Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.sect4 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect4': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect4', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect3Type class docSect4Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, title=None, para=None, internal=None, mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docSect4Type.subclass: return docSect4Type.subclass(*args_, **kwargs_) else: return docSect4Type(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docSect4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSect4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docSect4Type'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docSect4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.title is not None or self.para is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSect4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': childobj_ = docTitleType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'title', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': childobj_ = docInternalS4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'internal', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docSect4Type class docInternalType(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect1=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalType.subclass: return docInternalType.subclass(*args_, **kwargs_) else: return docInternalType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def export(self, outfile, level, namespace_='', name_='docInternalType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalType'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect1 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': childobj_ = docSect1Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect1', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalType class docInternalS1Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect2=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS1Type.subclass: return docInternalS1Type.subclass(*args_, **kwargs_) else: return docInternalS1Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect2(self): return self.sect2 def set_sect2(self, sect2): self.sect2 = sect2 def add_sect2(self, value): self.sect2.append(value) def insert_sect2(self, index, value): self.sect2[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS1Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS1Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS1Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS1Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect2 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS1Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect2': childobj_ = docSect2Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect2', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS1Type class docInternalS2Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS2Type.subclass: return docInternalS2Type.subclass(*args_, **kwargs_) else: return docInternalS2Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS2Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS2Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS2Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS2Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect3 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS2Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect3Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS2Type class docInternalS3Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, sect3=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS3Type.subclass: return docInternalS3Type.subclass(*args_, **kwargs_) else: return docInternalS3Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect3(self): return self.sect3 def set_sect3(self, sect3): self.sect3 = sect3 def add_sect3(self, value): self.sect3.append(value) def insert_sect3(self, index, value): self.sect3[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS3Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS3Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS3Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS3Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None or self.sect3 is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS3Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect3': childobj_ = docSect4Type.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'sect3', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS3Type class docInternalS4Type(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None, mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docInternalS4Type.subclass: return docInternalS4Type.subclass(*args_, **kwargs_) else: return docInternalS4Type(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def export(self, outfile, level, namespace_='', name_='docInternalS4Type', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docInternalS4Type') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docInternalS4Type'): pass def exportChildren(self, outfile, level, namespace_='', name_='docInternalS4Type'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docInternalS4Type'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': childobj_ = docParaType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'para', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docInternalS4Type class docTitleType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docTitleType.subclass: return docTitleType.subclass(*args_, **kwargs_) else: return docTitleType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docTitleType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTitleType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docTitleType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docTitleType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTitleType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docTitleType class docParaType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docParaType.subclass: return docParaType.subclass(*args_, **kwargs_) else: return docParaType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docParaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docParaType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParaType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docParaType class docMarkupType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docMarkupType.subclass: return docMarkupType.subclass(*args_, **kwargs_) else: return docMarkupType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docMarkupType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docMarkupType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docMarkupType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docMarkupType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docMarkupType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docMarkupType class docURLLink(GeneratedsSuper): subclass = None superclass = None def __init__(self, url=None, valueOf_='', mixedclass_=None, content_=None): self.url = url if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docURLLink.subclass: return docURLLink.subclass(*args_, **kwargs_) else: return docURLLink(*args_, **kwargs_) factory = staticmethod(factory) def get_url(self): return self.url def set_url(self, url): self.url = url def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docURLLink', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docURLLink') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docURLLink'): if self.url is not None: outfile.write(' url=%s' % (self.format_string(quote_attrib(self.url).encode(ExternalEncoding), input_name='url'), )) def exportChildren(self, outfile, level, namespace_='', name_='docURLLink'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docURLLink'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.url is not None: showIndent(outfile, level) outfile.write('url = %s,\n' % (self.url,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('url'): self.url = attrs.get('url').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docURLLink class docAnchorType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docAnchorType.subclass: return docAnchorType.subclass(*args_, **kwargs_) else: return docAnchorType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docAnchorType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docAnchorType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docAnchorType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docAnchorType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docAnchorType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docAnchorType class docFormulaType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docFormulaType.subclass: return docFormulaType.subclass(*args_, **kwargs_) else: return docFormulaType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docFormulaType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docFormulaType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docFormulaType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docFormulaType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docFormulaType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docFormulaType class docIndexEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, primaryie=None, secondaryie=None): self.primaryie = primaryie self.secondaryie = secondaryie def factory(*args_, **kwargs_): if docIndexEntryType.subclass: return docIndexEntryType.subclass(*args_, **kwargs_) else: return docIndexEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_primaryie(self): return self.primaryie def set_primaryie(self, primaryie): self.primaryie = primaryie def get_secondaryie(self): return self.secondaryie def set_secondaryie(self, secondaryie): self.secondaryie = secondaryie def export(self, outfile, level, namespace_='', name_='docIndexEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docIndexEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docIndexEntryType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docIndexEntryType'): if self.primaryie is not None: showIndent(outfile, level) outfile.write('<%sprimaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.primaryie).encode(ExternalEncoding), input_name='primaryie'), namespace_)) if self.secondaryie is not None: showIndent(outfile, level) outfile.write('<%ssecondaryie>%s\n' % (namespace_, self.format_string(quote_xml(self.secondaryie).encode(ExternalEncoding), input_name='secondaryie'), namespace_)) def hasContent_(self): if ( self.primaryie is not None or self.secondaryie is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docIndexEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('primaryie=%s,\n' % quote_python(self.primaryie).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('secondaryie=%s,\n' % quote_python(self.secondaryie).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'primaryie': primaryie_ = '' for text__content_ in child_.childNodes: primaryie_ += text__content_.nodeValue self.primaryie = primaryie_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'secondaryie': secondaryie_ = '' for text__content_ in child_.childNodes: secondaryie_ += text__content_.nodeValue self.secondaryie = secondaryie_ # end class docIndexEntryType class docListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, listitem=None): if listitem is None: self.listitem = [] else: self.listitem = listitem def factory(*args_, **kwargs_): if docListType.subclass: return docListType.subclass(*args_, **kwargs_) else: return docListType(*args_, **kwargs_) factory = staticmethod(factory) def get_listitem(self): return self.listitem def set_listitem(self, listitem): self.listitem = listitem def add_listitem(self, value): self.listitem.append(value) def insert_listitem(self, index, value): self.listitem[index] = value def export(self, outfile, level, namespace_='', name_='docListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docListType'): for listitem_ in self.listitem: listitem_.export(outfile, level, namespace_, name_='listitem') def hasContent_(self): if ( self.listitem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('listitem=[\n') level += 1 for listitem in self.listitem: showIndent(outfile, level) outfile.write('model_.listitem(\n') listitem.exportLiteral(outfile, level, name_='listitem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'listitem': obj_ = docListItemType.factory() obj_.build(child_) self.listitem.append(obj_) # end class docListType class docListItemType(GeneratedsSuper): subclass = None superclass = None def __init__(self, para=None): if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docListItemType.subclass: return docListItemType.subclass(*args_, **kwargs_) else: return docListItemType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def export(self, outfile, level, namespace_='', name_='docListItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docListItemType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docListItemType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docListItemType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docListItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docListItemType class docSimpleSectType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, title=None, para=None): self.kind = kind self.title = title if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docSimpleSectType.subclass: return docSimpleSectType.subclass(*args_, **kwargs_) else: return docSimpleSectType(*args_, **kwargs_) factory = staticmethod(factory) def get_title(self): return self.title def set_title(self, title): self.title = title def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='docSimpleSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docSimpleSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='docSimpleSectType'): if self.title: self.title.export(outfile, level, namespace_, name_='title') for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.title is not None or self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docSimpleSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): if self.title: showIndent(outfile, level) outfile.write('title=model_.docTitleType(\n') self.title.exportLiteral(outfile, level, name_='title') showIndent(outfile, level) outfile.write('),\n') showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'title': obj_ = docTitleType.factory() obj_.build(child_) self.set_title(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docSimpleSectType class docVarListEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, term=None): self.term = term def factory(*args_, **kwargs_): if docVarListEntryType.subclass: return docVarListEntryType.subclass(*args_, **kwargs_) else: return docVarListEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_term(self): return self.term def set_term(self, term): self.term = term def export(self, outfile, level, namespace_='', name_='docVarListEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docVarListEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docVarListEntryType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docVarListEntryType'): if self.term: self.term.export(outfile, level, namespace_, name_='term', ) def hasContent_(self): if ( self.term is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docVarListEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): if self.term: showIndent(outfile, level) outfile.write('term=model_.docTitleType(\n') self.term.exportLiteral(outfile, level, name_='term') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'term': obj_ = docTitleType.factory() obj_.build(child_) self.set_term(obj_) # end class docVarListEntryType class docVariableListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docVariableListType.subclass: return docVariableListType.subclass(*args_, **kwargs_) else: return docVariableListType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docVariableListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docVariableListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docVariableListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docVariableListType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docVariableListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docVariableListType class docRefTextType(GeneratedsSuper): subclass = None superclass = None def __init__(self, refid=None, kindref=None, external=None, valueOf_='', mixedclass_=None, content_=None): self.refid = refid self.kindref = kindref self.external = external if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docRefTextType.subclass: return docRefTextType.subclass(*args_, **kwargs_) else: return docRefTextType(*args_, **kwargs_) factory = staticmethod(factory) def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def get_kindref(self): return self.kindref def set_kindref(self, kindref): self.kindref = kindref def get_external(self): return self.external def set_external(self, external): self.external = external def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docRefTextType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docRefTextType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docRefTextType'): if self.refid is not None: outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) if self.kindref is not None: outfile.write(' kindref=%s' % (quote_attrib(self.kindref), )) if self.external is not None: outfile.write(' external=%s' % (self.format_string(quote_attrib(self.external).encode(ExternalEncoding), input_name='external'), )) def exportChildren(self, outfile, level, namespace_='', name_='docRefTextType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docRefTextType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) if self.kindref is not None: showIndent(outfile, level) outfile.write('kindref = "%s",\n' % (self.kindref,)) if self.external is not None: showIndent(outfile, level) outfile.write('external = %s,\n' % (self.external,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('refid'): self.refid = attrs.get('refid').value if attrs.get('kindref'): self.kindref = attrs.get('kindref').value if attrs.get('external'): self.external = attrs.get('external').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docRefTextType class docTableType(GeneratedsSuper): subclass = None superclass = None def __init__(self, rows=None, cols=None, row=None, caption=None): self.rows = rows self.cols = cols if row is None: self.row = [] else: self.row = row self.caption = caption def factory(*args_, **kwargs_): if docTableType.subclass: return docTableType.subclass(*args_, **kwargs_) else: return docTableType(*args_, **kwargs_) factory = staticmethod(factory) def get_row(self): return self.row def set_row(self, row): self.row = row def add_row(self, value): self.row.append(value) def insert_row(self, index, value): self.row[index] = value def get_caption(self): return self.caption def set_caption(self, caption): self.caption = caption def get_rows(self): return self.rows def set_rows(self, rows): self.rows = rows def get_cols(self): return self.cols def set_cols(self, cols): self.cols = cols def export(self, outfile, level, namespace_='', name_='docTableType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTableType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docTableType'): if self.rows is not None: outfile.write(' rows="%s"' % self.format_integer(self.rows, input_name='rows')) if self.cols is not None: outfile.write(' cols="%s"' % self.format_integer(self.cols, input_name='cols')) def exportChildren(self, outfile, level, namespace_='', name_='docTableType'): for row_ in self.row: row_.export(outfile, level, namespace_, name_='row') if self.caption: self.caption.export(outfile, level, namespace_, name_='caption') def hasContent_(self): if ( self.row is not None or self.caption is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTableType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.rows is not None: showIndent(outfile, level) outfile.write('rows = %s,\n' % (self.rows,)) if self.cols is not None: showIndent(outfile, level) outfile.write('cols = %s,\n' % (self.cols,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('row=[\n') level += 1 for row in self.row: showIndent(outfile, level) outfile.write('model_.row(\n') row.exportLiteral(outfile, level, name_='row') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.caption: showIndent(outfile, level) outfile.write('caption=model_.docCaptionType(\n') self.caption.exportLiteral(outfile, level, name_='caption') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('rows'): try: self.rows = int(attrs.get('rows').value) except ValueError, exp: raise ValueError('Bad integer attribute (rows): %s' % exp) if attrs.get('cols'): try: self.cols = int(attrs.get('cols').value) except ValueError, exp: raise ValueError('Bad integer attribute (cols): %s' % exp) def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'row': obj_ = docRowType.factory() obj_.build(child_) self.row.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'caption': obj_ = docCaptionType.factory() obj_.build(child_) self.set_caption(obj_) # end class docTableType class docRowType(GeneratedsSuper): subclass = None superclass = None def __init__(self, entry=None): if entry is None: self.entry = [] else: self.entry = entry def factory(*args_, **kwargs_): if docRowType.subclass: return docRowType.subclass(*args_, **kwargs_) else: return docRowType(*args_, **kwargs_) factory = staticmethod(factory) def get_entry(self): return self.entry def set_entry(self, entry): self.entry = entry def add_entry(self, value): self.entry.append(value) def insert_entry(self, index, value): self.entry[index] = value def export(self, outfile, level, namespace_='', name_='docRowType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docRowType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docRowType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docRowType'): for entry_ in self.entry: entry_.export(outfile, level, namespace_, name_='entry') def hasContent_(self): if ( self.entry is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docRowType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('entry=[\n') level += 1 for entry in self.entry: showIndent(outfile, level) outfile.write('model_.entry(\n') entry.exportLiteral(outfile, level, name_='entry') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'entry': obj_ = docEntryType.factory() obj_.build(child_) self.entry.append(obj_) # end class docRowType class docEntryType(GeneratedsSuper): subclass = None superclass = None def __init__(self, thead=None, para=None): self.thead = thead if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docEntryType.subclass: return docEntryType.subclass(*args_, **kwargs_) else: return docEntryType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_thead(self): return self.thead def set_thead(self, thead): self.thead = thead def export(self, outfile, level, namespace_='', name_='docEntryType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docEntryType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docEntryType'): if self.thead is not None: outfile.write(' thead=%s' % (quote_attrib(self.thead), )) def exportChildren(self, outfile, level, namespace_='', name_='docEntryType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docEntryType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.thead is not None: showIndent(outfile, level) outfile.write('thead = "%s",\n' % (self.thead,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('thead'): self.thead = attrs.get('thead').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docEntryType class docCaptionType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_='', mixedclass_=None, content_=None): if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docCaptionType.subclass: return docCaptionType.subclass(*args_, **kwargs_) else: return docCaptionType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docCaptionType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCaptionType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docCaptionType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docCaptionType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCaptionType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docCaptionType class docHeadingType(GeneratedsSuper): subclass = None superclass = None def __init__(self, level=None, valueOf_='', mixedclass_=None, content_=None): self.level = level if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docHeadingType.subclass: return docHeadingType.subclass(*args_, **kwargs_) else: return docHeadingType(*args_, **kwargs_) factory = staticmethod(factory) def get_level(self): return self.level def set_level(self, level): self.level = level def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docHeadingType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docHeadingType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docHeadingType'): if self.level is not None: outfile.write(' level="%s"' % self.format_integer(self.level, input_name='level')) def exportChildren(self, outfile, level, namespace_='', name_='docHeadingType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docHeadingType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.level is not None: showIndent(outfile, level) outfile.write('level = %s,\n' % (self.level,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('level'): try: self.level = int(attrs.get('level').value) except ValueError, exp: raise ValueError('Bad integer attribute (level): %s' % exp) def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docHeadingType class docImageType(GeneratedsSuper): subclass = None superclass = None def __init__(self, width=None, type_=None, name=None, height=None, valueOf_='', mixedclass_=None, content_=None): self.width = width self.type_ = type_ self.name = name self.height = height if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docImageType.subclass: return docImageType.subclass(*args_, **kwargs_) else: return docImageType(*args_, **kwargs_) factory = staticmethod(factory) def get_width(self): return self.width def set_width(self, width): self.width = width def get_type(self): return self.type_ def set_type(self, type_): self.type_ = type_ def get_name(self): return self.name def set_name(self, name): self.name = name def get_height(self): return self.height def set_height(self, height): self.height = height def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docImageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docImageType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docImageType'): if self.width is not None: outfile.write(' width=%s' % (self.format_string(quote_attrib(self.width).encode(ExternalEncoding), input_name='width'), )) if self.type_ is not None: outfile.write(' type=%s' % (quote_attrib(self.type_), )) if self.name is not None: outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) if self.height is not None: outfile.write(' height=%s' % (self.format_string(quote_attrib(self.height).encode(ExternalEncoding), input_name='height'), )) def exportChildren(self, outfile, level, namespace_='', name_='docImageType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docImageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.width is not None: showIndent(outfile, level) outfile.write('width = %s,\n' % (self.width,)) if self.type_ is not None: showIndent(outfile, level) outfile.write('type_ = "%s",\n' % (self.type_,)) if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) if self.height is not None: showIndent(outfile, level) outfile.write('height = %s,\n' % (self.height,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('width'): self.width = attrs.get('width').value if attrs.get('type'): self.type_ = attrs.get('type').value if attrs.get('name'): self.name = attrs.get('name').value if attrs.get('height'): self.height = attrs.get('height').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docImageType class docDotFileType(GeneratedsSuper): subclass = None superclass = None def __init__(self, name=None, valueOf_='', mixedclass_=None, content_=None): self.name = name if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docDotFileType.subclass: return docDotFileType.subclass(*args_, **kwargs_) else: return docDotFileType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docDotFileType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docDotFileType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docDotFileType'): if self.name is not None: outfile.write(' name=%s' % (self.format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), )) def exportChildren(self, outfile, level, namespace_='', name_='docDotFileType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docDotFileType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.name is not None: showIndent(outfile, level) outfile.write('name = %s,\n' % (self.name,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('name'): self.name = attrs.get('name').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docDotFileType class docTocItemType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, valueOf_='', mixedclass_=None, content_=None): self.id = id if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docTocItemType.subclass: return docTocItemType.subclass(*args_, **kwargs_) else: return docTocItemType(*args_, **kwargs_) factory = staticmethod(factory) def get_id(self): return self.id def set_id(self, id): self.id = id def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docTocItemType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTocItemType') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docTocItemType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docTocItemType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTocItemType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docTocItemType class docTocListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, tocitem=None): if tocitem is None: self.tocitem = [] else: self.tocitem = tocitem def factory(*args_, **kwargs_): if docTocListType.subclass: return docTocListType.subclass(*args_, **kwargs_) else: return docTocListType(*args_, **kwargs_) factory = staticmethod(factory) def get_tocitem(self): return self.tocitem def set_tocitem(self, tocitem): self.tocitem = tocitem def add_tocitem(self, value): self.tocitem.append(value) def insert_tocitem(self, index, value): self.tocitem[index] = value def export(self, outfile, level, namespace_='', name_='docTocListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docTocListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docTocListType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docTocListType'): for tocitem_ in self.tocitem: tocitem_.export(outfile, level, namespace_, name_='tocitem') def hasContent_(self): if ( self.tocitem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docTocListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('tocitem=[\n') level += 1 for tocitem in self.tocitem: showIndent(outfile, level) outfile.write('model_.tocitem(\n') tocitem.exportLiteral(outfile, level, name_='tocitem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'tocitem': obj_ = docTocItemType.factory() obj_.build(child_) self.tocitem.append(obj_) # end class docTocListType class docLanguageType(GeneratedsSuper): subclass = None superclass = None def __init__(self, langid=None, para=None): self.langid = langid if para is None: self.para = [] else: self.para = para def factory(*args_, **kwargs_): if docLanguageType.subclass: return docLanguageType.subclass(*args_, **kwargs_) else: return docLanguageType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_langid(self): return self.langid def set_langid(self, langid): self.langid = langid def export(self, outfile, level, namespace_='', name_='docLanguageType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docLanguageType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docLanguageType'): if self.langid is not None: outfile.write(' langid=%s' % (self.format_string(quote_attrib(self.langid).encode(ExternalEncoding), input_name='langid'), )) def exportChildren(self, outfile, level, namespace_='', name_='docLanguageType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') def hasContent_(self): if ( self.para is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docLanguageType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.langid is not None: showIndent(outfile, level) outfile.write('langid = %s,\n' % (self.langid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('langid'): self.langid = attrs.get('langid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) # end class docLanguageType class docParamListType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, parameteritem=None): self.kind = kind if parameteritem is None: self.parameteritem = [] else: self.parameteritem = parameteritem def factory(*args_, **kwargs_): if docParamListType.subclass: return docParamListType.subclass(*args_, **kwargs_) else: return docParamListType(*args_, **kwargs_) factory = staticmethod(factory) def get_parameteritem(self): return self.parameteritem def set_parameteritem(self, parameteritem): self.parameteritem = parameteritem def add_parameteritem(self, value): self.parameteritem.append(value) def insert_parameteritem(self, index, value): self.parameteritem[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def export(self, outfile, level, namespace_='', name_='docParamListType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamListType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamListType'): if self.kind is not None: outfile.write(' kind=%s' % (quote_attrib(self.kind), )) def exportChildren(self, outfile, level, namespace_='', name_='docParamListType'): for parameteritem_ in self.parameteritem: parameteritem_.export(outfile, level, namespace_, name_='parameteritem') def hasContent_(self): if ( self.parameteritem is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamListType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameteritem=[\n') level += 1 for parameteritem in self.parameteritem: showIndent(outfile, level) outfile.write('model_.parameteritem(\n') parameteritem.exportLiteral(outfile, level, name_='parameteritem') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameteritem': obj_ = docParamListItem.factory() obj_.build(child_) self.parameteritem.append(obj_) # end class docParamListType class docParamListItem(GeneratedsSuper): subclass = None superclass = None def __init__(self, parameternamelist=None, parameterdescription=None): if parameternamelist is None: self.parameternamelist = [] else: self.parameternamelist = parameternamelist self.parameterdescription = parameterdescription def factory(*args_, **kwargs_): if docParamListItem.subclass: return docParamListItem.subclass(*args_, **kwargs_) else: return docParamListItem(*args_, **kwargs_) factory = staticmethod(factory) def get_parameternamelist(self): return self.parameternamelist def set_parameternamelist(self, parameternamelist): self.parameternamelist = parameternamelist def add_parameternamelist(self, value): self.parameternamelist.append(value) def insert_parameternamelist(self, index, value): self.parameternamelist[index] = value def get_parameterdescription(self): return self.parameterdescription def set_parameterdescription(self, parameterdescription): self.parameterdescription = parameterdescription def export(self, outfile, level, namespace_='', name_='docParamListItem', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamListItem') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamListItem'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParamListItem'): for parameternamelist_ in self.parameternamelist: parameternamelist_.export(outfile, level, namespace_, name_='parameternamelist') if self.parameterdescription: self.parameterdescription.export(outfile, level, namespace_, name_='parameterdescription', ) def hasContent_(self): if ( self.parameternamelist is not None or self.parameterdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamListItem'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parameternamelist=[\n') level += 1 for parameternamelist in self.parameternamelist: showIndent(outfile, level) outfile.write('model_.parameternamelist(\n') parameternamelist.exportLiteral(outfile, level, name_='parameternamelist') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.parameterdescription: showIndent(outfile, level) outfile.write('parameterdescription=model_.descriptionType(\n') self.parameterdescription.exportLiteral(outfile, level, name_='parameterdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameternamelist': obj_ = docParamNameList.factory() obj_.build(child_) self.parameternamelist.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parameterdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_parameterdescription(obj_) # end class docParamListItem class docParamNameList(GeneratedsSuper): subclass = None superclass = None def __init__(self, parametername=None): if parametername is None: self.parametername = [] else: self.parametername = parametername def factory(*args_, **kwargs_): if docParamNameList.subclass: return docParamNameList.subclass(*args_, **kwargs_) else: return docParamNameList(*args_, **kwargs_) factory = staticmethod(factory) def get_parametername(self): return self.parametername def set_parametername(self, parametername): self.parametername = parametername def add_parametername(self, value): self.parametername.append(value) def insert_parametername(self, index, value): self.parametername[index] = value def export(self, outfile, level, namespace_='', name_='docParamNameList', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamNameList') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docParamNameList'): pass def exportChildren(self, outfile, level, namespace_='', name_='docParamNameList'): for parametername_ in self.parametername: parametername_.export(outfile, level, namespace_, name_='parametername') def hasContent_(self): if ( self.parametername is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamNameList'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('parametername=[\n') level += 1 for parametername in self.parametername: showIndent(outfile, level) outfile.write('model_.parametername(\n') parametername.exportLiteral(outfile, level, name_='parametername') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'parametername': obj_ = docParamName.factory() obj_.build(child_) self.parametername.append(obj_) # end class docParamNameList class docParamName(GeneratedsSuper): subclass = None superclass = None def __init__(self, direction=None, ref=None, mixedclass_=None, content_=None): self.direction = direction if mixedclass_ is None: self.mixedclass_ = MixedContainer else: self.mixedclass_ = mixedclass_ if content_ is None: self.content_ = [] else: self.content_ = content_ def factory(*args_, **kwargs_): if docParamName.subclass: return docParamName.subclass(*args_, **kwargs_) else: return docParamName(*args_, **kwargs_) factory = staticmethod(factory) def get_ref(self): return self.ref def set_ref(self, ref): self.ref = ref def get_direction(self): return self.direction def set_direction(self, direction): self.direction = direction def export(self, outfile, level, namespace_='', name_='docParamName', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docParamName') outfile.write('>') self.exportChildren(outfile, level + 1, namespace_, name_) outfile.write('\n' % (namespace_, name_)) def exportAttributes(self, outfile, level, namespace_='', name_='docParamName'): if self.direction is not None: outfile.write(' direction=%s' % (quote_attrib(self.direction), )) def exportChildren(self, outfile, level, namespace_='', name_='docParamName'): for item_ in self.content_: item_.export(outfile, level, item_.name, namespace_) def hasContent_(self): if ( self.ref is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docParamName'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.direction is not None: showIndent(outfile, level) outfile.write('direction = "%s",\n' % (self.direction,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('content_ = [\n') for item_ in self.content_: item_.exportLiteral(outfile, level, name_) showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('direction'): self.direction = attrs.get('direction').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'ref': childobj_ = docRefTextType.factory() childobj_.build(child_) obj_ = self.mixedclass_(MixedContainer.CategoryComplex, MixedContainer.TypeNone, 'ref', childobj_) self.content_.append(obj_) elif child_.nodeType == Node.TEXT_NODE: obj_ = self.mixedclass_(MixedContainer.CategoryText, MixedContainer.TypeNone, '', child_.nodeValue) self.content_.append(obj_) # end class docParamName class docXRefSectType(GeneratedsSuper): subclass = None superclass = None def __init__(self, id=None, xreftitle=None, xrefdescription=None): self.id = id if xreftitle is None: self.xreftitle = [] else: self.xreftitle = xreftitle self.xrefdescription = xrefdescription def factory(*args_, **kwargs_): if docXRefSectType.subclass: return docXRefSectType.subclass(*args_, **kwargs_) else: return docXRefSectType(*args_, **kwargs_) factory = staticmethod(factory) def get_xreftitle(self): return self.xreftitle def set_xreftitle(self, xreftitle): self.xreftitle = xreftitle def add_xreftitle(self, value): self.xreftitle.append(value) def insert_xreftitle(self, index, value): self.xreftitle[index] = value def get_xrefdescription(self): return self.xrefdescription def set_xrefdescription(self, xrefdescription): self.xrefdescription = xrefdescription def get_id(self): return self.id def set_id(self, id): self.id = id def export(self, outfile, level, namespace_='', name_='docXRefSectType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docXRefSectType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docXRefSectType'): if self.id is not None: outfile.write(' id=%s' % (self.format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), )) def exportChildren(self, outfile, level, namespace_='', name_='docXRefSectType'): for xreftitle_ in self.xreftitle: showIndent(outfile, level) outfile.write('<%sxreftitle>%s\n' % (namespace_, self.format_string(quote_xml(xreftitle_).encode(ExternalEncoding), input_name='xreftitle'), namespace_)) if self.xrefdescription: self.xrefdescription.export(outfile, level, namespace_, name_='xrefdescription', ) def hasContent_(self): if ( self.xreftitle is not None or self.xrefdescription is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docXRefSectType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.id is not None: showIndent(outfile, level) outfile.write('id = %s,\n' % (self.id,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('xreftitle=[\n') level += 1 for xreftitle in self.xreftitle: showIndent(outfile, level) outfile.write('%s,\n' % quote_python(xreftitle).encode(ExternalEncoding)) level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.xrefdescription: showIndent(outfile, level) outfile.write('xrefdescription=model_.descriptionType(\n') self.xrefdescription.exportLiteral(outfile, level, name_='xrefdescription') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('id'): self.id = attrs.get('id').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'xreftitle': xreftitle_ = '' for text__content_ in child_.childNodes: xreftitle_ += text__content_.nodeValue self.xreftitle.append(xreftitle_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'xrefdescription': obj_ = descriptionType.factory() obj_.build(child_) self.set_xrefdescription(obj_) # end class docXRefSectType class docCopyType(GeneratedsSuper): subclass = None superclass = None def __init__(self, link=None, para=None, sect1=None, internal=None): self.link = link if para is None: self.para = [] else: self.para = para if sect1 is None: self.sect1 = [] else: self.sect1 = sect1 self.internal = internal def factory(*args_, **kwargs_): if docCopyType.subclass: return docCopyType.subclass(*args_, **kwargs_) else: return docCopyType(*args_, **kwargs_) factory = staticmethod(factory) def get_para(self): return self.para def set_para(self, para): self.para = para def add_para(self, value): self.para.append(value) def insert_para(self, index, value): self.para[index] = value def get_sect1(self): return self.sect1 def set_sect1(self, sect1): self.sect1 = sect1 def add_sect1(self, value): self.sect1.append(value) def insert_sect1(self, index, value): self.sect1[index] = value def get_internal(self): return self.internal def set_internal(self, internal): self.internal = internal def get_link(self): return self.link def set_link(self, link): self.link = link def export(self, outfile, level, namespace_='', name_='docCopyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCopyType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docCopyType'): if self.link is not None: outfile.write(' link=%s' % (self.format_string(quote_attrib(self.link).encode(ExternalEncoding), input_name='link'), )) def exportChildren(self, outfile, level, namespace_='', name_='docCopyType'): for para_ in self.para: para_.export(outfile, level, namespace_, name_='para') for sect1_ in self.sect1: sect1_.export(outfile, level, namespace_, name_='sect1') if self.internal: self.internal.export(outfile, level, namespace_, name_='internal') def hasContent_(self): if ( self.para is not None or self.sect1 is not None or self.internal is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCopyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.link is not None: showIndent(outfile, level) outfile.write('link = %s,\n' % (self.link,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('para=[\n') level += 1 for para in self.para: showIndent(outfile, level) outfile.write('model_.para(\n') para.exportLiteral(outfile, level, name_='para') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') showIndent(outfile, level) outfile.write('sect1=[\n') level += 1 for sect1 in self.sect1: showIndent(outfile, level) outfile.write('model_.sect1(\n') sect1.exportLiteral(outfile, level, name_='sect1') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') if self.internal: showIndent(outfile, level) outfile.write('internal=model_.docInternalType(\n') self.internal.exportLiteral(outfile, level, name_='internal') showIndent(outfile, level) outfile.write('),\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('link'): self.link = attrs.get('link').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'para': obj_ = docParaType.factory() obj_.build(child_) self.para.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'sect1': obj_ = docSect1Type.factory() obj_.build(child_) self.sect1.append(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'internal': obj_ = docInternalType.factory() obj_.build(child_) self.set_internal(obj_) # end class docCopyType class docCharType(GeneratedsSuper): subclass = None superclass = None def __init__(self, char=None, valueOf_=''): self.char = char self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docCharType.subclass: return docCharType.subclass(*args_, **kwargs_) else: return docCharType(*args_, **kwargs_) factory = staticmethod(factory) def get_char(self): return self.char def set_char(self, char): self.char = char def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docCharType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docCharType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docCharType'): if self.char is not None: outfile.write(' char=%s' % (quote_attrib(self.char), )) def exportChildren(self, outfile, level, namespace_='', name_='docCharType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docCharType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.char is not None: showIndent(outfile, level) outfile.write('char = "%s",\n' % (self.char,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('char'): self.char = attrs.get('char').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docCharType class docEmptyType(GeneratedsSuper): subclass = None superclass = None def __init__(self, valueOf_=''): self.valueOf_ = valueOf_ def factory(*args_, **kwargs_): if docEmptyType.subclass: return docEmptyType.subclass(*args_, **kwargs_) else: return docEmptyType(*args_, **kwargs_) factory = staticmethod(factory) def getValueOf_(self): return self.valueOf_ def setValueOf_(self, valueOf_): self.valueOf_ = valueOf_ def export(self, outfile, level, namespace_='', name_='docEmptyType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='docEmptyType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='docEmptyType'): pass def exportChildren(self, outfile, level, namespace_='', name_='docEmptyType'): if self.valueOf_.find('![CDATA')>-1: value=quote_xml('%s' % self.valueOf_) value=value.replace('![CDATA','') outfile.write(value) else: outfile.write(quote_xml('%s' % self.valueOf_)) def hasContent_(self): if ( self.valueOf_ is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='docEmptyType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): pass def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('valueOf_ = "%s",\n' % (self.valueOf_,)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) self.valueOf_ = '' for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): pass def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.TEXT_NODE: self.valueOf_ += child_.nodeValue elif child_.nodeType == Node.CDATA_SECTION_NODE: self.valueOf_ += '![CDATA['+child_.nodeValue+']]' # end class docEmptyType USAGE_TEXT = """ Usage: python .py [ -s ] Options: -s Use the SAX parser, not the minidom parser. """ def usage(): print USAGE_TEXT sys.exit(1) def parse(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", namespacedef_='') return rootObj def parseString(inString): doc = minidom.parseString(inString) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygen", namespacedef_='') return rootObj def parseLiteral(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('from compound import *\n\n') sys.stdout.write('rootObj = doxygen(\n') rootObj.exportLiteral(sys.stdout, 0, name_="doxygen") sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] if len(args) == 1: parse(args[0]) else: usage() if __name__ == '__main__': main() #import pdb #pdb.run('main()') gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/generated/indexsuper.py0000644000175000017500000004552612576764164026364 0ustar carlescarles#!/usr/bin/env python # # Generated Thu Jun 11 18:43:54 2009 by generateDS.py. # import sys import getopt from string import lower as str_lower from xml.dom import minidom from xml.dom import Node # # User methods # # Calls to the methods in these classes are generated by generateDS.py. # You can replace these methods by re-implementing the following class # in a module named generatedssuper.py. try: from generatedssuper import GeneratedsSuper except ImportError, exp: class GeneratedsSuper: def format_string(self, input_data, input_name=''): return input_data def format_integer(self, input_data, input_name=''): return '%d' % input_data def format_float(self, input_data, input_name=''): return '%f' % input_data def format_double(self, input_data, input_name=''): return '%e' % input_data def format_boolean(self, input_data, input_name=''): return '%s' % input_data # # If you have installed IPython you can uncomment and use the following. # IPython is available from http://ipython.scipy.org/. # ## from IPython.Shell import IPShellEmbed ## args = '' ## ipshell = IPShellEmbed(args, ## banner = 'Dropping into IPython', ## exit_msg = 'Leaving Interpreter, back to program.') # Then use the following line where and when you want to drop into the # IPython shell: # ipshell(' -- Entering ipshell.\nHit Ctrl-D to exit') # # Globals # ExternalEncoding = 'ascii' # # Support/utility functions. # def showIndent(outfile, level): for idx in range(level): outfile.write(' ') def quote_xml(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') return s1 def quote_attrib(inStr): s1 = (isinstance(inStr, basestring) and inStr or '%s' % inStr) s1 = s1.replace('&', '&') s1 = s1.replace('<', '<') s1 = s1.replace('>', '>') if '"' in s1: if "'" in s1: s1 = '"%s"' % s1.replace('"', """) else: s1 = "'%s'" % s1 else: s1 = '"%s"' % s1 return s1 def quote_python(inStr): s1 = inStr if s1.find("'") == -1: if s1.find('\n') == -1: return "'%s'" % s1 else: return "'''%s'''" % s1 else: if s1.find('"') != -1: s1 = s1.replace('"', '\\"') if s1.find('\n') == -1: return '"%s"' % s1 else: return '"""%s"""' % s1 class MixedContainer: # Constants for category: CategoryNone = 0 CategoryText = 1 CategorySimple = 2 CategoryComplex = 3 # Constants for content_type: TypeNone = 0 TypeText = 1 TypeString = 2 TypeInteger = 3 TypeFloat = 4 TypeDecimal = 5 TypeDouble = 6 TypeBoolean = 7 def __init__(self, category, content_type, name, value): self.category = category self.content_type = content_type self.name = name self.value = value def getCategory(self): return self.category def getContenttype(self, content_type): return self.content_type def getValue(self): return self.value def getName(self): return self.name def export(self, outfile, level, name, namespace): if self.category == MixedContainer.CategoryText: outfile.write(self.value) elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex self.value.export(outfile, level, namespace,name) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeInteger or \ self.content_type == MixedContainer.TypeBoolean: outfile.write('<%s>%d' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeFloat or \ self.content_type == MixedContainer.TypeDecimal: outfile.write('<%s>%f' % (self.name, self.value, self.name)) elif self.content_type == MixedContainer.TypeDouble: outfile.write('<%s>%g' % (self.name, self.value, self.name)) def exportLiteral(self, outfile, level, name): if self.category == MixedContainer.CategoryText: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) elif self.category == MixedContainer.CategorySimple: showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s", "%s"),\n' % \ (self.category, self.content_type, self.name, self.value)) else: # category == MixedContainer.CategoryComplex showIndent(outfile, level) outfile.write('MixedContainer(%d, %d, "%s",\n' % \ (self.category, self.content_type, self.name,)) self.value.exportLiteral(outfile, level + 1) showIndent(outfile, level) outfile.write(')\n') class _MemberSpec(object): def __init__(self, name='', data_type='', container=0): self.name = name self.data_type = data_type self.container = container def set_name(self, name): self.name = name def get_name(self): return self.name def set_data_type(self, data_type): self.data_type = data_type def get_data_type(self): return self.data_type def set_container(self, container): self.container = container def get_container(self): return self.container # # Data representation classes. # class DoxygenType(GeneratedsSuper): subclass = None superclass = None def __init__(self, version=None, compound=None): self.version = version if compound is None: self.compound = [] else: self.compound = compound def factory(*args_, **kwargs_): if DoxygenType.subclass: return DoxygenType.subclass(*args_, **kwargs_) else: return DoxygenType(*args_, **kwargs_) factory = staticmethod(factory) def get_compound(self): return self.compound def set_compound(self, compound): self.compound = compound def add_compound(self, value): self.compound.append(value) def insert_compound(self, index, value): self.compound[index] = value def get_version(self): return self.version def set_version(self, version): self.version = version def export(self, outfile, level, namespace_='', name_='DoxygenType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='DoxygenType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='DoxygenType'): outfile.write(' version=%s' % (self.format_string(quote_attrib(self.version).encode(ExternalEncoding), input_name='version'), )) def exportChildren(self, outfile, level, namespace_='', name_='DoxygenType'): for compound_ in self.compound: compound_.export(outfile, level, namespace_, name_='compound') def hasContent_(self): if ( self.compound is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='DoxygenType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.version is not None: showIndent(outfile, level) outfile.write('version = %s,\n' % (self.version,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('compound=[\n') level += 1 for compound in self.compound: showIndent(outfile, level) outfile.write('model_.compound(\n') compound.exportLiteral(outfile, level, name_='compound') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('version'): self.version = attrs.get('version').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'compound': obj_ = CompoundType.factory() obj_.build(child_) self.compound.append(obj_) # end class DoxygenType class CompoundType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, refid=None, name=None, member=None): self.kind = kind self.refid = refid self.name = name if member is None: self.member = [] else: self.member = member def factory(*args_, **kwargs_): if CompoundType.subclass: return CompoundType.subclass(*args_, **kwargs_) else: return CompoundType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_member(self): return self.member def set_member(self, member): self.member = member def add_member(self, value): self.member.append(value) def insert_member(self, index, value): self.member[index] = value def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='CompoundType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='CompoundType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='CompoundType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='CompoundType'): if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) for member_ in self.member: member_.export(outfile, level, namespace_, name_='member') def hasContent_(self): if ( self.name is not None or self.member is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='CompoundType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) showIndent(outfile, level) outfile.write('member=[\n') level += 1 for member in self.member: showIndent(outfile, level) outfile.write('model_.member(\n') member.exportLiteral(outfile, level, name_='member') showIndent(outfile, level) outfile.write('),\n') level -= 1 showIndent(outfile, level) outfile.write('],\n') def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'member': obj_ = MemberType.factory() obj_.build(child_) self.member.append(obj_) # end class CompoundType class MemberType(GeneratedsSuper): subclass = None superclass = None def __init__(self, kind=None, refid=None, name=None): self.kind = kind self.refid = refid self.name = name def factory(*args_, **kwargs_): if MemberType.subclass: return MemberType.subclass(*args_, **kwargs_) else: return MemberType(*args_, **kwargs_) factory = staticmethod(factory) def get_name(self): return self.name def set_name(self, name): self.name = name def get_kind(self): return self.kind def set_kind(self, kind): self.kind = kind def get_refid(self): return self.refid def set_refid(self, refid): self.refid = refid def export(self, outfile, level, namespace_='', name_='MemberType', namespacedef_=''): showIndent(outfile, level) outfile.write('<%s%s %s' % (namespace_, name_, namespacedef_, )) self.exportAttributes(outfile, level, namespace_, name_='MemberType') if self.hasContent_(): outfile.write('>\n') self.exportChildren(outfile, level + 1, namespace_, name_) showIndent(outfile, level) outfile.write('\n' % (namespace_, name_)) else: outfile.write(' />\n') def exportAttributes(self, outfile, level, namespace_='', name_='MemberType'): outfile.write(' kind=%s' % (quote_attrib(self.kind), )) outfile.write(' refid=%s' % (self.format_string(quote_attrib(self.refid).encode(ExternalEncoding), input_name='refid'), )) def exportChildren(self, outfile, level, namespace_='', name_='MemberType'): if self.name is not None: showIndent(outfile, level) outfile.write('<%sname>%s\n' % (namespace_, self.format_string(quote_xml(self.name).encode(ExternalEncoding), input_name='name'), namespace_)) def hasContent_(self): if ( self.name is not None ): return True else: return False def exportLiteral(self, outfile, level, name_='MemberType'): level += 1 self.exportLiteralAttributes(outfile, level, name_) if self.hasContent_(): self.exportLiteralChildren(outfile, level, name_) def exportLiteralAttributes(self, outfile, level, name_): if self.kind is not None: showIndent(outfile, level) outfile.write('kind = "%s",\n' % (self.kind,)) if self.refid is not None: showIndent(outfile, level) outfile.write('refid = %s,\n' % (self.refid,)) def exportLiteralChildren(self, outfile, level, name_): showIndent(outfile, level) outfile.write('name=%s,\n' % quote_python(self.name).encode(ExternalEncoding)) def build(self, node_): attrs = node_.attributes self.buildAttributes(attrs) for child_ in node_.childNodes: nodeName_ = child_.nodeName.split(':')[-1] self.buildChildren(child_, nodeName_) def buildAttributes(self, attrs): if attrs.get('kind'): self.kind = attrs.get('kind').value if attrs.get('refid'): self.refid = attrs.get('refid').value def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'name': name_ = '' for text__content_ in child_.childNodes: name_ += text__content_.nodeValue self.name = name_ # end class MemberType USAGE_TEXT = """ Usage: python .py [ -s ] Options: -s Use the SAX parser, not the minidom parser. """ def usage(): print USAGE_TEXT sys.exit(1) def parse(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", namespacedef_='') return rootObj def parseString(inString): doc = minidom.parseString(inString) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('\n') rootObj.export(sys.stdout, 0, name_="doxygenindex", namespacedef_='') return rootObj def parseLiteral(inFileName): doc = minidom.parse(inFileName) rootNode = doc.documentElement rootObj = DoxygenType.factory() rootObj.build(rootNode) # Enable Python to collect the space used by the DOM. doc = None sys.stdout.write('from index import *\n\n') sys.stdout.write('rootObj = doxygenindex(\n') rootObj.exportLiteral(sys.stdout, 0, name_="doxygenindex") sys.stdout.write(')\n') return rootObj def main(): args = sys.argv[1:] if len(args) == 1: parse(args[0]) else: usage() if __name__ == '__main__': main() #import pdb #pdb.run('main()') gnss-sdr-0.0.6/drivers/gr-gn3s/docs/doxygen/doxyxml/doxyindex.py0000644000175000017500000001462712576764164024251 0ustar carlescarles# # Copyright 2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # """ Classes providing more user-friendly interfaces to the doxygen xml docs than the generated classes provide. """ import os from generated import index from base import Base from text import description class DoxyIndex(Base): """ Parses a doxygen xml directory. """ __module__ = "gnuradio.utils.doxyxml" def _parse(self): if self._parsed: return super(DoxyIndex, self)._parse() self._root = index.parse(os.path.join(self._xml_path, 'index.xml')) for mem in self._root.compound: converted = self.convert_mem(mem) # For files we want the contents to be accessible directly # from the parent rather than having to go through the file # object. if self.get_cls(mem) == DoxyFile: if mem.name.endswith('.h'): self._members += converted.members() self._members.append(converted) else: self._members.append(converted) def generate_swig_doc_i(self): """ %feature("docstring") gr_make_align_on_samplenumbers_ss::align_state " Wraps the C++: gr_align_on_samplenumbers_ss::align_state"; """ pass class DoxyCompMem(Base): kind = None def __init__(self, *args, **kwargs): super(DoxyCompMem, self).__init__(*args, **kwargs) @classmethod def can_parse(cls, obj): return obj.kind == cls.kind def set_descriptions(self, parse_data): bd = description(getattr(parse_data, 'briefdescription', None)) dd = description(getattr(parse_data, 'detaileddescription', None)) self._data['brief_description'] = bd self._data['detailed_description'] = dd class DoxyCompound(DoxyCompMem): pass class DoxyMember(DoxyCompMem): pass class DoxyFunction(DoxyMember): __module__ = "gnuradio.utils.doxyxml" kind = 'function' def _parse(self): if self._parsed: return super(DoxyFunction, self)._parse() self.set_descriptions(self._parse_data) self._data['params'] = [] prms = self._parse_data.param for prm in prms: self._data['params'].append(DoxyParam(prm)) brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) params = property(lambda self: self.data()['params']) Base.mem_classes.append(DoxyFunction) class DoxyParam(DoxyMember): __module__ = "gnuradio.utils.doxyxml" def _parse(self): if self._parsed: return super(DoxyParam, self)._parse() self.set_descriptions(self._parse_data) self._data['declname'] = self._parse_data.declname brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) declname = property(lambda self: self.data()['declname']) class DoxyClass(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'class' def _parse(self): if self._parsed: return super(DoxyClass, self)._parse() self.retrieve_data() if self._error: return self.set_descriptions(self._retrieved_data.compounddef) # Sectiondef.kind tells about whether private or public. # We just ignore this for now. self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) Base.mem_classes.append(DoxyClass) class DoxyFile(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'file' def _parse(self): if self._parsed: return super(DoxyFile, self)._parse() self.retrieve_data() self.set_descriptions(self._retrieved_data.compounddef) if self._error: return self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) Base.mem_classes.append(DoxyFile) class DoxyNamespace(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'namespace' Base.mem_classes.append(DoxyNamespace) class DoxyGroup(DoxyCompound): __module__ = "gnuradio.utils.doxyxml" kind = 'group' def _parse(self): if self._parsed: return super(DoxyGroup, self)._parse() self.retrieve_data() if self._error: return cdef = self._retrieved_data.compounddef self._data['title'] = description(cdef.title) # Process inner groups grps = cdef.innergroup for grp in grps: converted = DoxyGroup.from_refid(grp.refid, top=self.top) self._members.append(converted) # Process inner classes klasses = cdef.innerclass for kls in klasses: converted = DoxyClass.from_refid(kls.refid, top=self.top) self._members.append(converted) # Process normal members self.process_memberdefs() title = property(lambda self: self.data()['title']) Base.mem_classes.append(DoxyGroup) class DoxyFriend(DoxyMember): __module__ = "gnuradio.utils.doxyxml" kind = 'friend' Base.mem_classes.append(DoxyFriend) class DoxyOther(Base): __module__ = "gnuradio.utils.doxyxml" kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page']) @classmethod def can_parse(cls, obj): return obj.kind in cls.kinds Base.mem_classes.append(DoxyOther) gnss-sdr-0.0.6/drivers/gr-gn3s/include/0000755000175000017500000000000012576764164017164 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/include/gn3s_source_cc.h0000644000175000017500000000556712576764164022251 0ustar carlescarles/*! * \file gn3s_source_cc.h * \brief GNU Radio source block to acces to SiGe GN3S USB sampler v2. * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_GN3S_SOURCE_CC_H #define INCLUDED_GN3S_SOURCE_CC_H #include "gn3s_api.h" #include #include "gn3s_source.h" #include "gn3s_defines.h" class gn3s_source_cc; /* * We use boost::shared_ptr's instead of raw pointers for all access * to gr_blocks (and many other data structures). The shared_ptr gets * us transparent reference counting, which greatly simplifies storage * management issues. This is especially helpful in our hybrid * C++ / Python system. * * See http://www.boost.org/libs/smart_ptr/smart_ptr.htm * * As a convention, the _sptr suffix indicates a boost::shared_ptr */ typedef boost::shared_ptr gn3s_source_cc_sptr; /*! * \brief Return a shared_ptr to a new instance of howto_square_ff. * * To avoid accidental use of raw pointers, gn3s_source's * constructor is private. gn3s_source is the public * interface for creating new instances. */ GN3S_API gn3s_source_cc_sptr gn3s_make_source_cc (); /*! * \brief SiGe GN3S V2 sampler USB driver. * \ingroup block * * \sa gn3s_source for a version that subclasses gr_block. */ class GN3S_API gn3s_source_cc : public gr::block { private: // The friend declaration allows gn3s_source to // access the private constructor. /* Create the GN3S object*/ gn3s_Source *gn3s_drv; gn3s_ms_packet packet; friend GN3S_API gn3s_source_cc_sptr gn3s_make_source_cc (); /*! * \brief */ gn3s_source_cc (); // private constructor public: ~gn3s_source_cc (); // public destructor // Where all the action really happens int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* INCLUDED_GN3S_SOURCE_CC_H */ gnss-sdr-0.0.6/drivers/gr-gn3s/include/CMakeLists.txt0000644000175000017500000000207612576764164021731 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Install public header files ######################################################################## install(FILES gn3s_api.h gn3s_source_cc.h gn3s_source.h gn3s_defines.h gn3s.h fusb.h libusb_types.h fusb_linux.h DESTINATION include/gn3s ) gnss-sdr-0.0.6/drivers/gr-gn3s/include/libusb_types.h0000644000175000017500000000230212576764164022036 0ustar carlescarles/* -*- Mode: C++ -*- */ /* * Copyright 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #ifndef _LIBUSB_TYPES_H_ #define _LIBUSB_TYPES_H_ #if 0 #include struct libusb_device; struct libusb_device_handle; struct libusb_device_descriptor; #else #include typedef struct usb_device libusb_device; typedef struct usb_dev_handle libusb_device_handle; typedef struct usb_device_descriptor libusb_device_descriptor; #endif #endif /* _LIBUSB_TYPES_H_ */ gnss-sdr-0.0.6/drivers/gr-gn3s/include/gn3s_defines.h0000644000175000017500000000147612576764164021714 0ustar carlescarles#ifndef GN3S_DEFINES_H_ #define GN3S_DEFINES_H_ typedef struct GN3S_CPX { short int i; //!< Real value short int q; //!< Imaginary value } GN3S_CPX; //#define GN3S_SAMPS_MS (2048) //!< All incoming signals are resampled to this sampling frequency #define GN3S_SAMPS_5MS (40919) // 5MS at fs=8.1838e6 //!< FIFO structure for linked list? /*----------------------------------------------------------------------------------------------*/ /*! \ingroup STRUCTS * @brief linked list structure for circular FIFO buffer */ typedef struct gn3s_ms_packet { gn3s_ms_packet *next; int count; //!< Number of packets GN3S_CPX data[GN3S_SAMPS_5MS]; //!< Payload size } gn3s_ms_packet; /*----------------------------------------------------------------------------------------------*/ #endif //GN3S_DEFINES_H_ gnss-sdr-0.0.6/drivers/gr-gn3s/include/fusb_linux.h0000644000175000017500000000660012576764164021515 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ // Fast USB interface #ifndef _FUSB_LINUX_H_ #define _FUSB_LINUX_H_ #include "fusb.h" #include struct usbdevfs_urb; class fusb_ephandle_linux; /*! * \brief linux specific implementation of fusb_devhandle using usbdevice_fs */ class fusb_devhandle_linux : public fusb_devhandle { private: std::list d_pending_rqsts; void pending_add (usbdevfs_urb *urb); bool pending_remove (usbdevfs_urb *urb); usbdevfs_urb * pending_get (); public: // CREATORS fusb_devhandle_linux (usb_dev_handle *udh); virtual ~fusb_devhandle_linux (); // MANIPULATORS virtual fusb_ephandle *make_ephandle (int endpoint, bool input_p, int block_size = 0, int nblocks = 0); // internal use only bool _submit_urb (usbdevfs_urb *urb); bool _cancel_urb (usbdevfs_urb *urb); void _cancel_pending_rqsts (fusb_ephandle_linux *eph); bool _reap (bool ok_to_block_p); void _wait_for_completion (); }; /*! * \brief linux specific implementation of fusb_ephandle using usbdevice_fs */ class fusb_ephandle_linux : public fusb_ephandle { private: fusb_devhandle_linux *d_devhandle; std::list d_free_list; std::list d_completed_list; usbdevfs_urb *d_write_work_in_progress; unsigned char *d_write_buffer; usbdevfs_urb *d_read_work_in_progress; unsigned char *d_read_buffer; unsigned char *d_read_buffer_end; usbdevfs_urb *get_write_work_in_progress (); void reap_complete_writes (); bool reload_read_buffer (); bool submit_urb (usbdevfs_urb *urb); public: fusb_ephandle_linux (fusb_devhandle_linux *dh, int endpoint, bool input_p, int block_size = 0, int nblocks = 0); virtual ~fusb_ephandle_linux (); virtual bool start (); //!< begin streaming i/o virtual bool stop (); //!< stop streaming i/o /*! * \returns \p nbytes if write was successfully enqueued, else -1. * Will block if no free buffers available. */ virtual int write (const void *buffer, int nbytes); /*! * \returns number of bytes read or -1 if error. * number of bytes read will be <= nbytes. * Will block if no input available. */ virtual int read (void *buffer, int nbytes); /* * block until all outstanding writes have completed */ virtual void wait_for_completion (); // internal use only void free_list_add (usbdevfs_urb *urb); void completed_list_add (usbdevfs_urb *urb); usbdevfs_urb *free_list_get (); // pop and return head of list or 0 usbdevfs_urb *completed_list_get (); // pop and return head of list or 0 }; #endif /* _FUSB_LINUX_H_ */ gnss-sdr-0.0.6/drivers/gr-gn3s/include/gn3s_api.h0000644000175000017500000000255212576764164021044 0ustar carlescarles/*! * \file gn3s_api.h * \brief GNU Radio source block to acces to SiGe GN3S USB sampler. * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_GN3S_API_H #define INCLUDED_GN3S_API_H #include #ifdef gr_gn3s_EXPORTS # define GN3S_API __GR_ATTR_EXPORT #else # define GN3S_API __GR_ATTR_IMPORT #endif #endif /* INCLUDED_GN3S_API_H */ gnss-sdr-0.0.6/drivers/gr-gn3s/include/gn3s.h0000644000175000017500000001007612576764164020213 0ustar carlescarles/*----------------------------------------------------------------------------------------------*/ /*! \file gn3s.h // // FILENAME: gn3s.h // // DESCRIPTION: Defines the GN3S class. // // DEVELOPERS: Gregory W. Heckler (2003-2009) // // LICENSE TERMS: Copyright (c) Gregory W. Heckler 2009 // // This file is part of the GPS Software Defined Radio (GPS-SDR) // // The GPS-SDR is free software; you can redistribute it and/or modify it under the terms of the // GNU General Public License as published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. The GPS-SDR is distributed in the hope that // it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // Note: Comments within this file follow a syntax that is compatible with // DOXYGEN and are utilized for automated document extraction // // Reference: */ /*----------------------------------------------------------------------------------------------*/ #ifndef GN3S_H_ #define GN3S_H_ /* Includes */ /*--------------------------------------------------------------*/ #include #include #include #include #include #include "fusb.h" #include "fusb_linux.h" //#include "usrp_bytesex.h" //#include "usrp_prims.h" /*--------------------------------------------------------------*/ /* FX2 Configuration Structure */ /*--------------------------------------------------------------*/ struct fx2Config { int interface; int altinterface; usb_dev_handle *udev; fusb_ephandle *d_ephandle; fusb_devhandle *d_devhandle; }; /*--------------------------------------------------------------*/ /* FX2 Stuff */ /*--------------------------------------------------------------*/ #define RX_ENDPOINT (0x86) #define VRT_VENDOR_IN (0xC0) #define VRT_VENDOR_OUT (0x40) #define RX_INTERFACE (2) #define RX_ALTINTERFACE (0) #define VRQ_GET_STATUS (0x80) #define GS_RX_OVERRUN (1) //!< Returns 1 byte #define VRQ_XFER (0x01) /*--------------------------------------------------------------*/ /* GN3S Stuff */ /*--------------------------------------------------------------*/ #define GN3S_VID (0x16C0) #define GN3S_PID (0x072F) #define VID_OLD (0x1781) #define PID_OLD (0x0B39) #define PROG_SET_CMD (0xE600) #define FUSB_BUFFER_SIZE (16 * (1L << 20)) //!< 8 MB #define FUSB_BLOCK_SIZE (16 * (1L << 10)) //!< 16KB is hard limit #define FUSB_NBLOCKS (FUSB_BUFFER_SIZE / FUSB_BLOCK_SIZE) /*--------------------------------------------------------------*/ /* The firmware is embedded into the executable */ /*--------------------------------------------------------------*/ extern char _binary_usrp_gn3s_firmware_ihx_start[]; /*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/ /*! \ingroup CLASSES * */ class gn3s { private: /* First or second board */ int which; /* GN3S FX2 Stuff */ struct fx2Config fx2_config; struct usb_device *fx2_device; struct usb_dev_handle *fx2_handle; /* USB IDs */ unsigned int gn3s_vid, gn3s_pid; /* Pull in the binary firmware */ int fstart; int fsize; //char *gn3s_firmware; public: gn3s(int _which); //!< Constructor ~gn3s(); //!< Destructor /* FX2 functions */ struct usb_device* usb_fx2_find(int vid, int pid, char info, int ignore); bool usb_fx2_configure(struct usb_device *fx2, fx2Config *fx2c); fusb_devhandle* make_devhandle (usb_dev_handle *udh); int read(void *buff, int bytes); int write_cmd(int request, int value, int index, unsigned char *bytes, int len); bool _get_status(int which, bool *trouble); bool check_rx_overrun(); bool usrp_xfer(char VRQ_TYPE, bool start); /* Used to flash the GN3S */ int atoz(char *s); void upload_ram(char *buf, int start, int len); void program_fx2(char *filename, char mem); int prog_gn3s_board(); }; /*--------------------------------------------------------------*/ #endif /*GN3S_H_ */ gnss-sdr-0.0.6/drivers/gr-gn3s/include/fusb.h0000644000175000017500000000664212576764164020304 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2005,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #ifndef _FUSB_H_ #define _FUSB_H_ #include "libusb_types.h" struct libusb_context; class fusb_ephandle; /*! * \brief abstract usb device handle */ class fusb_devhandle { private: // NOT IMPLEMENTED fusb_devhandle (const fusb_devhandle &rhs); // no copy constructor fusb_devhandle &operator= (const fusb_devhandle &rhs); // no assignment operator protected: libusb_device_handle *d_udh; public: // CREATORS fusb_devhandle (libusb_device_handle *udh); virtual ~fusb_devhandle (); // MANIPULATORS /*! * \brief return an ephandle of the correct subtype */ virtual fusb_ephandle *make_ephandle (int endpoint, bool input_p, int block_size = 0, int nblocks = 0) = 0; // ACCESSORS libusb_device_handle *get_usb_dev_handle () const { return d_udh; } }; /*! * \brief abstract usb end point handle */ class fusb_ephandle { private: // NOT IMPLEMENTED fusb_ephandle (const fusb_ephandle &rhs); // no copy constructor fusb_ephandle &operator= (const fusb_ephandle &rhs); // no assignment operator protected: int d_endpoint; bool d_input_p; int d_block_size; int d_nblocks; bool d_started; public: fusb_ephandle (int endpoint, bool input_p, int block_size = 0, int nblocks = 0); virtual ~fusb_ephandle (); virtual bool start () = 0; //!< begin streaming i/o virtual bool stop () = 0; //!< stop streaming i/o /*! * \returns \p nbytes if write was successfully enqueued, else -1. * Will block if no free buffers available. */ virtual int write (const void *buffer, int nbytes) = 0; /*! * \returns number of bytes read or -1 if error. * number of bytes read will be <= nbytes. * Will block if no input available. */ virtual int read (void *buffer, int nbytes) = 0; /* * block until all outstanding writes have completed */ virtual void wait_for_completion () = 0; /*! * \brief returns current block size. */ int block_size () { return d_block_size; }; }; /*! * \brief factory for creating concrete instances of the appropriate subtype. */ class fusb_sysconfig { public: /*! * \brief returns fusb_devhandle or throws if trouble */ static fusb_devhandle *make_devhandle (libusb_device_handle *udh, libusb_context *ctx = 0); /*! * \brief Returns max block size in bytes (hard limit). */ static int max_block_size (); /*! * \brief Returns default block size in bytes. */ static int default_block_size (); /*! * \brief Returns the default buffer size in bytes. */ static int default_buffer_size (); }; #endif /* _FUSB_H_ */ gnss-sdr-0.0.6/drivers/gr-gn3s/include/gn3s_source.h0000644000175000017500000000467412576764164021602 0ustar carlescarles/*----------------------------------------------------------------------------------------------*/ // // FILENAME: gps_source.h // // DESCRIPTION: Defines the GPS_Source class. // // DEVELOPERS: Gregory W. Heckler (2003-2009) // // LICENSE TERMS: Copyright (c) Gregory W. Heckler 2009 // // This file is part of the GPS Software Defined Radio (GPS-SDR) // // The GPS-SDR is free software; you can redistribute it and/or modify it under the terms of the // GNU General Public License as published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. The GPS-SDR is distributed in the hope that // it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // Note: Comments within this file follow a syntax that is compatible with // DOXYGEN and are utilized for automated document extraction // // Reference: /*----------------------------------------------------------------------------------------------*/ #ifndef GN3S_SOURCE_H_ #define GN3S_SOURCE_H_ #include "gn3s_defines.h" #include "gn3s.h" /*! \ingroup CLASSES * */ class gn3s_Source { private: /* Generic variables */ int source_type; //!< Source type int sample_mode; //!< Sample mode int leftover; //!< Leftover bytes for USRP double buffering int bwrite; //!< Bytes somthing something? int ms_count; //!< Count the numbers of ms processed bool flag_first_read; /* Tag overflows */ time_t rawtime; struct tm * timeinfo; /* AGC Values */ int agc_scale; //!< To do the AGC int overflw; //!< Overflow counter int soverflw; //!< Overflow counter /* Data buffers */ signed char gbuff[GN3S_SAMPS_5MS*2]; //!< Byte buffer for GN3S GN3S_CPX buff[GN3S_SAMPS_5MS]; //!< Base buffer for GN3S /* SOURCE_SIGE_GN3S Handles */ gn3s *gn3s_a; private: void Open_GN3S(); //!< Open the SparkFun GN3S Sampler void Close_GN3S(); //!< Close the SparkFun GN3S Sampler void Read_GN3S(gn3s_ms_packet *_p,int n_samples); //!< Read from the SparkFun GN3S Sampler public: gn3s_Source(); //!< Create the GPS source with the proper hardware type ~gn3s_Source(); //!< Kill the object void Read(gn3s_ms_packet *_p,int n_samples); //!< Read in a single ms of data int getScale(){return(agc_scale);} int getOvrflw(){return(overflw);} }; #endif /* GN3S_SOURCE_H_ */ gnss-sdr-0.0.6/drivers/gr-gn3s/CMakeLists.txt0000644000175000017500000001250512576764164020304 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Project setup ######################################################################## cmake_minimum_required(VERSION 2.8) project(gr-gn3s CXX C) enable_testing() #select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to release.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) ######################################################################## # Compiler specific setup ######################################################################## if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) #http://gcc.gnu.org/wiki/Visibility add_definitions(-fvisibility=hidden) endif() ######################################################################## # Find boost ######################################################################## if(UNIX AND EXISTS "/usr/lib64") list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix endif(UNIX AND EXISTS "/usr/lib64") set(Boost_ADDITIONAL_VERSIONS "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39" "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44" "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49" "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54" "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" ) find_package(Boost "1.35") if(NOT Boost_FOUND) message(FATAL_ERROR "Boost required to compile gn3s") endif() ######################################################################## # Find libUSB ######################################################################## find_package(USB) if(NOT LIBUSB_FOUND) message(FATAL_ERROR "libusb required to compile gn3s") endif(NOT LIBUSB_FOUND) include_directories(${LIBUSB_INCLUDE_DIR}) ######################################################################## # Install directories ######################################################################## include(GrPlatform) #define LIB_SUFFIX set(GR_RUNTIME_DIR bin) set(GR_LIBRARY_DIR lib${LIB_SUFFIX}) set(GR_INCLUDE_DIR include) set(GR_DATA_DIR share) set(GR_PKG_DATA_DIR ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME}) set(GR_DOC_DIR ${GR_DATA_DIR}/doc) set(GR_PKG_DOC_DIR ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME}) set(GR_CONF_DIR etc) set(GR_PKG_CONF_DIR ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d) set(GR_LIBEXEC_DIR libexec) set(GR_PKG_LIBEXEC_DIR ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME}) set(GRC_BLOCKS_DIR ${GR_PKG_DATA_DIR}/grc/blocks) ######################################################################## # Find gnuradio build dependencies ######################################################################## find_package(GnuradioRuntime) if(NOT GNURADIO_RUNTIME_FOUND) message(FATAL_ERROR "gnuradio-runtime 3.7 or later is required to compile gr-gn3s") endif() ######################################################################## # Setup the include and linker paths ######################################################################## include_directories( ${CMAKE_SOURCE_DIR}/include ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${LIBUSB_INCLUDE_DIR} ) link_directories( ${Boost_LIBRARY_DIRS} ${GNURADIO_RUNTIME_LIBRARY_DIRS} ) # Set component parameters set(GR_GN3S_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE) set(GR_GN3S_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE) ######################################################################## # Create uninstall target ######################################################################## configure_file( ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(include) add_subdirectory(lib) add_subdirectory(swig) add_subdirectory(python) add_subdirectory(grc) #add_subdirectory(apps) #add_subdirectory(docs) gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/0000755000175000017500000000000012576764164016621 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/0000755000175000017500000000000012576764164020231 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/CMakeParseArgumentsCopy.cmake0000644000175000017500000001340312576764164025730 0ustar carlescarles# CMAKE_PARSE_ARGUMENTS( args...) # # CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for # parsing the arguments given to that macro or function. # It processes the arguments and defines a set of variables which hold the # values of the respective options. # # The argument contains all options for the respective macro, # i.e. keywords which can be used when calling the macro without any value # following, like e.g. the OPTIONAL keyword of the install() command. # # The argument contains all keywords for this macro # which are followed by one value, like e.g. DESTINATION keyword of the # install() command. # # The argument contains all keywords for this macro # which can be followed by more than one value, like e.g. the TARGETS or # FILES keywords of the install() command. # # When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the # keywords listed in , and # a variable composed of the given # followed by "_" and the name of the respective keyword. # These variables will then hold the respective value from the argument list. # For the keywords this will be TRUE or FALSE. # # All remaining arguments are collected in a variable # _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether # your macro was called with unrecognized parameters. # # As an example here a my_install() macro, which takes similar arguments as the # real install() command: # # function(MY_INSTALL) # set(options OPTIONAL FAST) # set(oneValueArgs DESTINATION RENAME) # set(multiValueArgs TARGETS CONFIGURATIONS) # cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # ... # # Assume my_install() has been called like this: # my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) # # After the cmake_parse_arguments() call the macro will have set the following # variables: # MY_INSTALL_OPTIONAL = TRUE # MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() # MY_INSTALL_DESTINATION = "bin" # MY_INSTALL_RENAME = "" (was not used) # MY_INSTALL_TARGETS = "foo;bar" # MY_INSTALL_CONFIGURATIONS = "" (was not used) # MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" # # You can the continue and process these variables. # # Keywords terminate lists of values, e.g. if directly after a one_value_keyword # another recognized keyword follows, this is interpreted as the beginning of # the new option. # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would # be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. #============================================================================= # Copyright 2010 Alexander Neundorf # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) return() endif() set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) # first set all result variables to empty/FALSE foreach(arg_name ${_singleArgNames} ${_multiArgNames}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${_optionNames}) set(${prefix}_${option} FALSE) endforeach(option) set(${prefix}_UNPARSED_ARGUMENTS) set(insideValues FALSE) set(currentArgName) # now iterate over all arguments and fill the result variables foreach(currentArg ${ARGN}) list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) if(insideValues) if("${insideValues}" STREQUAL "SINGLE") set(${prefix}_${currentArgName} ${currentArg}) set(insideValues FALSE) elseif("${insideValues}" STREQUAL "MULTI") list(APPEND ${prefix}_${currentArgName} ${currentArg}) endif() else(insideValues) list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) endif(insideValues) else() if(NOT ${optionIndex} EQUAL -1) set(${prefix}_${currentArg} TRUE) set(insideValues FALSE) elseif(NOT ${singleArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "SINGLE") elseif(NOT ${multiArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "MULTI") endif() endif() endforeach(currentArg) # propagate the result variables to the caller: foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) endforeach(arg_name) set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/GrSwig.cmake0000644000175000017500000002517312576764164022445 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_SWIG_CMAKE) return() endif() set(__INCLUDED_GR_SWIG_CMAKE TRUE) include(GrPython) ######################################################################## # Builds a swig documentation file to be generated into python docstrings # Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....) # # Set the following variable to specify extra dependent targets: # - GR_SWIG_DOCS_SOURCE_DEPS # - GR_SWIG_DOCS_TARGET_DEPS ######################################################################## function(GR_SWIG_MAKE_DOCS output_file) if(ENABLE_DOXYGEN) #setup the input files variable list, quote formated set(input_files) unset(INPUT_PATHS) foreach(input_path ${ARGN}) if(IS_DIRECTORY ${input_path}) #when input path is a directory file(GLOB input_path_h_files ${input_path}/*.h) else() #otherwise its just a file, no glob set(input_path_h_files ${input_path}) endif() list(APPEND input_files ${input_path_h_files}) set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"") endforeach(input_path) #determine the output directory get_filename_component(name ${output_file} NAME_WE) get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH) set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs) make_directory(${OUTPUT_DIRECTORY}) #generate the Doxyfile used by doxygen configure_file( ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in ${OUTPUT_DIRECTORY}/Doxyfile @ONLY) #Create a dummy custom command that depends on other targets include(GrMiscUtils) GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS}) #call doxygen on the Doxyfile + input headers add_custom_command( OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps} COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile COMMENT "Generating doxygen xml for ${name} docs" ) #call the swig_doc script on the xml files add_custom_command( OUTPUT ${output_file} DEPENDS ${input_files} ${stamp-file} ${OUTPUT_DIRECTORY}/xml/index.xml COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py ${OUTPUT_DIRECTORY}/xml ${output_file} COMMENT "Generating python docstrings for ${name}" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen ) else(ENABLE_DOXYGEN) file(WRITE ${output_file} "\n") #no doxygen -> empty file endif(ENABLE_DOXYGEN) endfunction(GR_SWIG_MAKE_DOCS) ######################################################################## # Build a swig target for the common gnuradio use case. Usage: # GR_SWIG_MAKE(target ifile ifile ifile...) # # Set the following variables before calling: # - GR_SWIG_FLAGS # - GR_SWIG_INCLUDE_DIRS # - GR_SWIG_LIBRARIES # - GR_SWIG_SOURCE_DEPS # - GR_SWIG_TARGET_DEPS # - GR_SWIG_DOC_FILE # - GR_SWIG_DOC_DIRS ######################################################################## macro(GR_SWIG_MAKE name) set(ifiles ${ARGN}) # Take care of a SWIG < 3.0 bug with handling std::vector, # by mapping to the correct sized type on the runtime system, one # of "unsigned int", "unsigned long", or "unsigned long long". # Compare the sizeof(size_t) with the sizeof the other types, and # pick the first one in the list with the same sizeof. The logic # in gnuradio-runtime/swig/gr_types.i handles the rest. It is # probably not necessary to do this assignment all of the time, # but it's easier to do it this way than to figure out the # conditions when it is necessary -- and doing it this way won't # hurt. This bug seems to have been fixed with SWIG >= 3.0, and # mostly happens when not doing a native build (e.g., on Mac OS X # when using a 64-bit CPU but building for 32-bit). if(SWIG_VERSION VERSION_LESS "3.0.0") include(CheckTypeSize) check_type_size("size_t" SIZEOF_SIZE_T) check_type_size("unsigned int" SIZEOF_UINT) check_type_size("unsigned long" SIZEOF_UL) check_type_size("unsigned long long" SIZEOF_ULL) if(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UINT}) list(APPEND GR_SWIG_FLAGS -DSIZE_T_UINT) elseif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_UL}) list(APPEND GR_SWIG_FLAGS -DSIZE_T_UL) elseif(${SIZEOF_SIZE_T} EQUAL ${SIZEOF_ULL}) list(APPEND GR_SWIG_FLAGS -DSIZE_T_ULL) else() message(FATAL_ERROR "GrSwig: Unable to find replace for std::vector; this should never happen!") endif() endif() #do swig doc generation if specified if(GR_SWIG_DOC_FILE) set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS}) list(APPEND GR_SWIG_DOCS_TARGET_DEPS ${GR_SWIG_TARGET_DEPS}) GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS}) add_custom_target(${name}_swig_doc DEPENDS ${GR_SWIG_DOC_FILE}) list(APPEND GR_SWIG_TARGET_DEPS ${name}_swig_doc ${GR_RUNTIME_SWIG_DOC_FILE}) endif() #append additional include directories find_package(PythonLibs 2) list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs) list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS}) #prepend local swig directories list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_SOURCE_DIR}) list(INSERT GR_SWIG_INCLUDE_DIRS 0 ${CMAKE_CURRENT_BINARY_DIR}) #determine include dependencies for swig file execute_process( COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/get_swig_deps.py "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) #Create a dummy custom command that depends on other targets include(GrMiscUtils) GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS}) set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag) add_custom_command( OUTPUT ${tag_file} DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps} COMMAND ${CMAKE_COMMAND} -E touch ${tag_file} ) #append the specified include directories include_directories(${GR_SWIG_INCLUDE_DIRS}) list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file}) #setup the swig flags with flags and include directories set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS}) foreach(dir ${GR_SWIG_INCLUDE_DIRS}) list(APPEND CMAKE_SWIG_FLAGS "-I${dir}") endforeach(dir) #set the C++ property on the swig .i file so it builds set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON) #setup the actual swig library target to be built include(UseSWIG) SWIG_ADD_MODULE(${name} python ${ifiles}) SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES}) if(${name} STREQUAL "runtime_swig") SET_TARGET_PROPERTIES(${SWIG_MODULE_runtime_swig_REAL_NAME} PROPERTIES DEFINE_SYMBOL "gnuradio_runtime_EXPORTS") endif(${name} STREQUAL "runtime_swig") endmacro(GR_SWIG_MAKE) ######################################################################## # Install swig targets generated by GR_SWIG_MAKE. Usage: # GR_SWIG_INSTALL( # TARGETS target target target... # [DESTINATION destination] # [COMPONENT component] # ) ######################################################################## macro(GR_SWIG_INSTALL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN}) foreach(name ${GR_SWIG_INSTALL_TARGETS}) install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME} DESTINATION ${GR_SWIG_INSTALL_DESTINATION} COMPONENT ${GR_SWIG_INSTALL_COMPONENT} ) include(GrPython) GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py DESTINATION ${GR_SWIG_INSTALL_DESTINATION} COMPONENT ${GR_SWIG_INSTALL_COMPONENT} ) GR_LIBTOOL( TARGET ${SWIG_MODULE_${name}_REAL_NAME} DESTINATION ${GR_SWIG_INSTALL_DESTINATION} ) endforeach(name) endmacro(GR_SWIG_INSTALL) ######################################################################## # Generate a python file that can determine swig dependencies. # Used by the make macro above to determine extra dependencies. # When you build C++, CMake figures out the header dependencies. # This code essentially performs that logic for swig includes. ######################################################################## file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py " import os, sys, re i_include_matcher = re.compile('%(include|import)\\s*[<|\"](.*)[>|\"]') h_include_matcher = re.compile('#(include)\\s*[<|\"](.*)[>|\"]') include_dirs = sys.argv[2].split(';') def get_swig_incs(file_path): if file_path.endswith('.i'): matcher = i_include_matcher else: matcher = h_include_matcher file_contents = open(file_path, 'r').read() return matcher.findall(file_contents, re.MULTILINE) def get_swig_deps(file_path, level): deps = [file_path] if level == 0: return deps for keyword, inc_file in get_swig_incs(file_path): for inc_dir in include_dirs: inc_path = os.path.join(inc_dir, inc_file) if not os.path.exists(inc_path): continue deps.extend(get_swig_deps(inc_path, level-1)) break #found, we dont search in lower prio inc dirs return deps if __name__ == '__main__': ifiles = sys.argv[1].split(';') deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], []) #sys.stderr.write(';'.join(set(deps)) + '\\n\\n') print(';'.join(set(deps))) ") gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/GrTest.cmake0000644000175000017500000001335412576764164022451 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_TEST_CMAKE) return() endif() set(__INCLUDED_GR_TEST_CMAKE TRUE) ######################################################################## # Add a unit test and setup the environment for a unit test. # Takes the same arguments as the ADD_TEST function. # # Before calling set the following variables: # GR_TEST_TARGET_DEPS - built targets for the library path # GR_TEST_LIBRARY_DIRS - directories for the library path # GR_TEST_PYTHON_DIRS - directories for the python path # GR_TEST_ENVIRONS - other environment key/value pairs ######################################################################## function(GR_ADD_TEST test_name) #Ensure that the build exe also appears in the PATH. list(APPEND GR_TEST_TARGET_DEPS ${ARGN}) #In the land of windows, all libraries must be in the PATH. #Since the dependent libraries are not yet installed, #we must manually set them in the PATH to run tests. #The following appends the path of a target dependency. foreach(target ${GR_TEST_TARGET_DEPS}) get_target_property(location ${target} LOCATION) if(location) get_filename_component(path ${location} PATH) string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path}) list(APPEND GR_TEST_LIBRARY_DIRS ${path}) endif(location) endforeach(target) if(WIN32) #SWIG generates the python library files into a subdirectory. #Therefore, we must append this subdirectory into PYTHONPATH. #Only do this for the python directories matching the following: foreach(pydir ${GR_TEST_PYTHON_DIRS}) get_filename_component(name ${pydir} NAME) if(name MATCHES "^(swig|lib|src)$") list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE}) endif() endforeach(pydir) endif(WIN32) file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir) file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list? file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list? set(environs "VOLK_GENERIC=1" "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}" "GR_CONF_CONTROLPORT_ON=False") list(APPEND environs ${GR_TEST_ENVIRONS}) #http://www.cmake.org/pipermail/cmake/2009-May/029464.html #Replaced this add test + set environs code with the shell script generation. #Its nicer to be able to manually run the shell script to diagnose problems. #ADD_TEST(${ARGV}) #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}") if(UNIX) set(LD_PATH_VAR "LD_LIBRARY_PATH") if(APPLE) set(LD_PATH_VAR "DYLD_LIBRARY_PATH") endif() set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH") list(APPEND libpath "$${LD_PATH_VAR}") list(APPEND pypath "$PYTHONPATH") #replace list separator with the path separator string(REPLACE ";" ":" libpath "${libpath}") string(REPLACE ";" ":" pypath "${pypath}") list(APPEND environs "PATH=${binpath}" "${LD_PATH_VAR}=${libpath}" "PYTHONPATH=${pypath}") #generate a bat file that sets the environment and runs the test if (CMAKE_CROSSCOMPILING) set(SHELL "/bin/sh") else(CMAKE_CROSSCOMPILING) find_program(SHELL sh) endif(CMAKE_CROSSCOMPILING) set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh) file(WRITE ${sh_file} "#!${SHELL}\n") #each line sets an environment variable foreach(environ ${environs}) file(APPEND ${sh_file} "export ${environ}\n") endforeach(environ) #load the command to run with its arguments foreach(arg ${ARGN}) file(APPEND ${sh_file} "${arg} ") endforeach(arg) file(APPEND ${sh_file} "\n") #make the shell file executable execute_process(COMMAND chmod +x ${sh_file}) add_test(${test_name} ${SHELL} ${sh_file}) endif(UNIX) if(WIN32) list(APPEND libpath ${DLL_PATHS} "%PATH%") list(APPEND pypath "%PYTHONPATH%") #replace list separator with the path separator (escaped) string(REPLACE ";" "\\;" libpath "${libpath}") string(REPLACE ";" "\\;" pypath "${pypath}") list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}") #generate a bat file that sets the environment and runs the test set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat) file(WRITE ${bat_file} "@echo off\n") #each line sets an environment variable foreach(environ ${environs}) file(APPEND ${bat_file} "SET ${environ}\n") endforeach(environ) #load the command to run with its arguments foreach(arg ${ARGN}) file(APPEND ${bat_file} "${arg} ") endforeach(arg) file(APPEND ${bat_file} "\n") add_test(${test_name} ${bat_file}) endif(WIN32) endfunction(GR_ADD_TEST) gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/GrPlatform.cmake0000644000175000017500000000344512576764164023316 0ustar carlescarles# Copyright 2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE) return() endif() set(__INCLUDED_GR_PLATFORM_CMAKE TRUE) ######################################################################## # Setup additional defines for OS types ######################################################################## if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(LINUX TRUE) endif() if(LINUX AND EXISTS "/etc/debian_version") set(DEBIAN TRUE) endif() if(LINUX AND EXISTS "/etc/redhat-release") set(REDHAT TRUE) endif() if(LINUX AND EXISTS "/etc/slackware-version") set(SLACKWARE TRUE) endif() ######################################################################## # when the library suffix should be 64 (applies to redhat linux family) ######################################################################## if (REDHAT OR SLACKWARE) set(LIB64_CONVENTION TRUE) endif() if(NOT DEFINED LIB_SUFFIX AND LIB64_CONVENTION AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$") set(LIB_SUFFIX 64) endif() set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix") gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/GrMiscUtils.cmake0000644000175000017500000003204612576764164023445 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE) return() endif() set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE) ######################################################################## # Set global variable macro. # Used for subdirectories to export settings. # Example: include and library paths. ######################################################################## function(GR_SET_GLOBAL var) set(${var} ${ARGN} CACHE INTERNAL "" FORCE) endfunction(GR_SET_GLOBAL) ######################################################################## # Set the pre-processor definition if the condition is true. # - def the pre-processor definition to set and condition name ######################################################################## function(GR_ADD_COND_DEF def) if(${def}) add_definitions(-D${def}) endif(${def}) endfunction(GR_ADD_COND_DEF) ######################################################################## # Check for a header and conditionally set a compile define. # - hdr the relative path to the header file # - def the pre-processor definition to set ######################################################################## function(GR_CHECK_HDR_N_DEF hdr def) include(CheckIncludeFileCXX) CHECK_INCLUDE_FILE_CXX(${hdr} ${def}) GR_ADD_COND_DEF(${def}) endfunction(GR_CHECK_HDR_N_DEF) ######################################################################## # Include subdirectory macro. # Sets the CMake directory variables, # includes the subdirectory CMakeLists.txt, # resets the CMake directory variables. # # This macro includes subdirectories rather than adding them # so that the subdirectory can affect variables in the level above. # This provides a work-around for the lack of convenience libraries. # This way a subdirectory can append to the list of library sources. ######################################################################## macro(GR_INCLUDE_SUBDIRECTORY subdir) #insert the current directories on the front of the list list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR}) list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR}) #set the current directories to the names of the subdirs set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}) set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir}) #include the subdirectory CMakeLists to run it file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt) #reset the value of the current directories list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR) list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR) #pop the subdir names of the front of the list list(REMOVE_AT _cmake_source_dirs 0) list(REMOVE_AT _cmake_binary_dirs 0) endmacro(GR_INCLUDE_SUBDIRECTORY) ######################################################################## # Check if a compiler flag works and conditionally set a compile define. # - flag the compiler flag to check for # - have the variable to set with result ######################################################################## macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have) include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG(${flag} ${have}) if(${have}) add_definitions(${flag}) endif(${have}) endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE) ######################################################################## # Generates the .la libtool file # This appears to generate libtool files that cannot be used by auto*. # Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest]) # Notice: there is not COMPONENT option, these will not get distributed. ######################################################################## function(GR_LIBTOOL) if(NOT DEFINED GENERATE_LIBTOOL) set(GENERATE_LIBTOOL OFF) #disabled by default endif() if(GENERATE_LIBTOOL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN}) find_program(LIBTOOL libtool) if(LIBTOOL) include(CMakeMacroLibtoolFile) CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION}) endif(LIBTOOL) endif(GENERATE_LIBTOOL) endfunction(GR_LIBTOOL) ######################################################################## # Do standard things to the library target # - set target properties # - make install rules # Also handle gnuradio custom naming conventions w/ extras mode. ######################################################################## function(GR_LIBRARY_FOO target) #parse the arguments for component names include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN}) #set additional target properties set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER}) #install the generated files like so... install(TARGETS ${target} LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT} # .lib file RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file ) #extras mode enabled automatically on linux if(NOT DEFINED LIBRARY_EXTRAS) set(LIBRARY_EXTRAS ${LINUX}) endif() #special extras mode to enable alternative naming conventions if(LIBRARY_EXTRAS) #create .la file before changing props GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR}) #give the library a special name with ultra-zero soversion set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0") set(target_name lib${target}-${LIBVER}.so.0.0.0) #custom command to generate symlinks add_custom_command( TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install ) #and install the extra symlinks install( FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} ) endif(LIBRARY_EXTRAS) endfunction(GR_LIBRARY_FOO) ######################################################################## # Create a dummy custom command that depends on other targets. # Usage: # GR_GEN_TARGET_DEPS(unique_name target_deps ...) # ADD_CUSTOM_COMMAND( ${target_deps}) # # Custom command cant depend on targets, but can depend on executables, # and executables can depend on targets. So this is the process: ######################################################################## function(GR_GEN_TARGET_DEPS name var) file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in "int main(void){return 0;}\n" ) execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp ) add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp) if(ARGN) add_dependencies(${name} ${ARGN}) endif(ARGN) if(CMAKE_CROSSCOMPILING) set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross else() set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE) endif() endfunction(GR_GEN_TARGET_DEPS) ######################################################################## # Control use of gr_logger # Usage: # GR_LOGGING() # # Will set ENABLE_GR_LOG to 1 by default. # Can manually set with -DENABLE_GR_LOG=0|1 ######################################################################## function(GR_LOGGING) find_package(Log4cpp) OPTION(ENABLE_GR_LOG "Use gr_logger" ON) if(ENABLE_GR_LOG) # If gr_logger is enabled, make it usable add_definitions( -DENABLE_GR_LOG ) # also test LOG4CPP; if we have it, use this version of the logger # otherwise, default to the stdout/stderr model. if(LOG4CPP_FOUND) SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE) add_definitions( -DHAVE_LOG4CPP ) else(not LOG4CPP_FOUND) SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE) SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE) SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE) SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE) endif(LOG4CPP_FOUND) SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE) else(ENABLE_GR_LOG) SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE) SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE) SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE) SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE) endif(ENABLE_GR_LOG) message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.") message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.") message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.") endfunction(GR_LOGGING) ######################################################################## # Run GRCC to compile .grc files into .py files. # # Usage: GRCC(filename, directory) # - filenames: List of file name of .grc file # - directory: directory of built .py file - usually in # ${CMAKE_CURRENT_BINARY_DIR} # - Sets PYFILES: output converted GRC file names to Python files. ######################################################################## function(GRCC) # Extract directory from list of args, remove it for the list of filenames. list(GET ARGV -1 directory) list(REMOVE_AT ARGV -1) set(filenames ${ARGV}) file(MAKE_DIRECTORY ${directory}) SET(GRCC_COMMAND ${CMAKE_SOURCE_DIR}/gr-utils/python/grcc) # GRCC uses some stuff in grc and gnuradio-runtime, so we force # the known paths here list(APPEND PYTHONPATHS ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/gnuradio-runtime/python ${CMAKE_SOURCE_DIR}/gnuradio-runtime/lib/swig ${CMAKE_BINARY_DIR}/gnuradio-runtime/lib/swig ) if(WIN32) #SWIG generates the python library files into a subdirectory. #Therefore, we must append this subdirectory into PYTHONPATH. #Only do this for the python directories matching the following: foreach(pydir ${PYTHONPATHS}) get_filename_component(name ${pydir} NAME) if(name MATCHES "^(swig|lib|src)$") list(APPEND PYTHONPATHS ${pydir}/${CMAKE_BUILD_TYPE}) endif() endforeach(pydir) endif(WIN32) file(TO_NATIVE_PATH "${PYTHONPATHS}" pypath) if(UNIX) list(APPEND pypath "$PYTHONPATH") string(REPLACE ";" ":" pypath "${pypath}") set(ENV{PYTHONPATH} ${pypath}) endif(UNIX) if(WIN32) list(APPEND pypath "%PYTHONPATH%") string(REPLACE ";" "\\;" pypath "${pypath}") #list(APPEND environs "PYTHONPATH=${pypath}") set(ENV{PYTHONPATH} ${pypath}) endif(WIN32) foreach(f ${filenames}) execute_process( COMMAND ${GRCC_COMMAND} -d ${directory} ${f} ) string(REPLACE ".grc" ".py" pyfile "${f}") string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" pyfile "${pyfile}") list(APPEND pyfiles ${pyfile}) endforeach(f) set(PYFILES ${pyfiles} PARENT_SCOPE) endfunction(GRCC) ######################################################################## # Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER # should be defined ######################################################################## macro(GR_CHECK_LINUX_SCHED_AVAIL) set(CMAKE_REQUIRED_LIBRARIES -lpthread) CHECK_CXX_SOURCE_COMPILES(" #include int main(){ pthread_t pthread; pthread_setschedparam(pthread, 0, 0); return 0; } " HAVE_PTHREAD_SETSCHEDPARAM ) GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM) CHECK_CXX_SOURCE_COMPILES(" #include int main(){ pid_t pid; sched_setscheduler(pid, 0, 0); return 0; } " HAVE_SCHED_SETSCHEDULER ) GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER) endmacro(GR_CHECK_LINUX_SCHED_AVAIL) gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/FindGnuradioRuntime.cmake0000644000175000017500000001201212576764164025144 0ustar carlescarles######################################################################## # Find GNU Radio ######################################################################## INCLUDE(FindPkgConfig) INCLUDE(FindPackageHandleStandardArgs) # if GR_REQUIRED_COMPONENTS is not defined, it will be set to the following list if(NOT GR_REQUIRED_COMPONENTS) set(GR_REQUIRED_COMPONENTS RUNTIME BLOCKS PMT) endif() # Allows us to use all .cmake files in this directory list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}) # Easily access all libraries and includes of GNU Radio set(GNURADIO_ALL_LIBRARIES "") set(GNURADIO_ALL_INCLUDE_DIRS "") MACRO(LIST_CONTAINS var value) SET(${var}) FOREACH(value2 ${ARGN}) IF (${value} STREQUAL ${value2}) SET(${var} TRUE) ENDIF(${value} STREQUAL ${value2}) ENDFOREACH(value2) ENDMACRO(LIST_CONTAINS) function(GR_MODULE EXTVAR PCNAME INCFILE LIBFILE) LIST_CONTAINS(REQUIRED_MODULE ${EXTVAR} ${GR_REQUIRED_COMPONENTS}) if(NOT REQUIRED_MODULE) #message("Ignoring GNU Radio Module ${EXTVAR}") return() endif() message(STATUS "Checking for GNU Radio Module: ${EXTVAR}") # check for .pc hints PKG_CHECK_MODULES(PC_GNURADIO_${EXTVAR} ${PCNAME}) if(NOT PC_GNURADIO_${EXTVAR}_FOUND) set(PC_GNURADIO_${EXTVAR}_LIBRARIES ${LIBFILE}) endif() set(INCVAR_NAME "GNURADIO_${EXTVAR}_INCLUDE_DIRS") set(LIBVAR_NAME "GNURADIO_${EXTVAR}_LIBRARIES") set(PC_INCDIR ${PC_GNURADIO_${EXTVAR}_INCLUDEDIR}) set(PC_LIBDIR ${PC_GNURADIO_${EXTVAR}_LIBDIR}) # look for include files FIND_PATH( ${INCVAR_NAME} NAMES ${INCFILE} HINTS $ENV{GNURADIO_RUNTIME_DIR}/include ${PC_INCDIR} ${CMAKE_INSTALL_PREFIX}/include ${GNURADIO_INSTALL_PREFIX}/include PATHS /usr/local/include /usr/include ${GNURADIO_INSTALL_PREFIX}/include ) # look for libs foreach(libname ${PC_GNURADIO_${EXTVAR}_LIBRARIES}) FIND_LIBRARY( ${LIBVAR_NAME}_${libname} NAMES ${libname} HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib ${PC_LIBDIR} ${CMAKE_INSTALL_PREFIX}/lib/ ${CMAKE_INSTALL_PREFIX}/lib64/ ${GNURADIO_INSTALL_PREFIX}/lib/ ${GNURADIO_INSTALL_PREFIX}/lib64 PATHS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ${GNURADIO_INSTALL_PREFIX}/lib ) list(APPEND ${LIBVAR_NAME} ${${LIBVAR_NAME}_${libname}}) endforeach(libname) set(${LIBVAR_NAME} ${${LIBVAR_NAME}} PARENT_SCOPE) # show results # message(STATUS " * INCLUDES=${GNURADIO_${EXTVAR}_INCLUDE_DIRS}") # message(STATUS " * LIBS=${GNURADIO_${EXTVAR}_LIBRARIES}") # append to all includes and libs list set(GNURADIO_ALL_INCLUDE_DIRS ${GNURADIO_ALL_INCLUDE_DIRS} ${GNURADIO_${EXTVAR}_INCLUDE_DIRS} PARENT_SCOPE) set(GNURADIO_ALL_LIBRARIES ${GNURADIO_ALL_LIBRARIES} ${GNURADIO_${EXTVAR}_LIBRARIES} PARENT_SCOPE) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_${EXTVAR} DEFAULT_MSG GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) message(STATUS "GNURADIO_${EXTVAR}_FOUND = ${GNURADIO_${EXTVAR}_FOUND}") set(GNURADIO_${EXTVAR}_FOUND ${GNURADIO_${EXTVAR}_FOUND} PARENT_SCOPE) # generate an error if the module is missing if(NOT GNURADIO_${EXTVAR}_FOUND) message(STATUS "Required GNU Radio Component: ${EXTVAR} missing!") endif() MARK_AS_ADVANCED(GNURADIO_${EXTVAR}_LIBRARIES GNURADIO_${EXTVAR}_INCLUDE_DIRS) endfunction() GR_MODULE(RUNTIME gnuradio-runtime gnuradio/top_block.h gnuradio-runtime) GR_MODULE(ANALOG gnuradio-analog gnuradio/analog/api.h gnuradio-analog) GR_MODULE(ATSC gnuradio-atsc gnuradio/atsc/api.h gnuradio-atsc) GR_MODULE(AUDIO gnuradio-audio gnuradio/audio/api.h gnuradio-audio) GR_MODULE(BLOCKS gnuradio-blocks gnuradio/blocks/api.h gnuradio-blocks) GR_MODULE(CHANNELS gnuradio-channels gnuradio/channels/api.h gnuradio-channels) GR_MODULE(DIGITAL gnuradio-digital gnuradio/digital/api.h gnuradio-digital) GR_MODULE(FCD gnuradio-fcd gnuradio/fcd_api.h gnuradio-fcd) GR_MODULE(FEC gnuradio-fec gnuradio/fec/api.h gnuradio-fec) GR_MODULE(FFT gnuradio-fft gnuradio/fft/api.h gnuradio-fft) GR_MODULE(FILTER gnuradio-filter gnuradio/filter/api.h gnuradio-filter) GR_MODULE(NOAA gnuradio-noaa gnuradio/noaa/api.h gnuradio-noaa) GR_MODULE(PAGER gnuradio-pager gnuradio/pager/api.h gnuradio-pager) GR_MODULE(QTGUI gnuradio-qtgui gnuradio/qtgui/api.h gnuradio-qtgui) GR_MODULE(TRELLIS gnuradio-trellis gnuradio/trellis/api.h gnuradio-trellis) GR_MODULE(UHD gnuradio-uhd gnuradio/uhd/api.h gnuradio-uhd) GR_MODULE(VOCODER gnuradio-vocoder gnuradio/vocoder/api.h gnuradio-vocoder) GR_MODULE(WAVELET gnuradio-wavelet gnuradio/wavelet/api.h gnuradio-wavelet) GR_MODULE(WXGUI gnuradio-wxgui gnuradio/wxgui/api.h gnuradio-wxgui) GR_MODULE(PMT gnuradio-runtime pmt/pmt.h gnuradio-pmt) list(REMOVE_DUPLICATES GNURADIO_ALL_INCLUDE_DIRS) list(REMOVE_DUPLICATES GNURADIO_ALL_LIBRARIES) gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/GrPython.cmake0000644000175000017500000002266112576764164023014 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_GR_PYTHON_CMAKE) return() endif() set(__INCLUDED_GR_PYTHON_CMAKE TRUE) ######################################################################## # Setup the python interpreter: # This allows the user to specify a specific interpreter, # or finds the interpreter via the built-in cmake module. ######################################################################## #this allows the user to override PYTHON_EXECUTABLE if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) #otherwise if not set, try to automatically find it else(PYTHON_EXECUTABLE) #use the built-in find script find_package(PythonInterp 2) #and if that fails use the find program routine if(NOT PYTHONINTERP_FOUND) find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5) if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) endif(PYTHON_EXECUTABLE) endif(NOT PYTHONINTERP_FOUND) endif(PYTHON_EXECUTABLE) if (CMAKE_CROSSCOMPILING) set(QA_PYTHON_EXECUTABLE "/usr/bin/python") else (CMAKE_CROSSCOMPILING) set(QA_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) endif(CMAKE_CROSSCOMPILING) #make the path to the executable appear in the cmake gui set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter") set(QA_PYTHON_EXECUTABLE ${QA_PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter for QA tests") #make sure we can use -B with python (introduced in 2.6) if(PYTHON_EXECUTABLE) execute_process( COMMAND ${PYTHON_EXECUTABLE} -B -c "" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT ) if(PYTHON_HAS_DASH_B_RESULT EQUAL 0) set(PYTHON_DASH_B "-B") endif() endif(PYTHON_EXECUTABLE) ######################################################################## # Check for the existence of a python module: # - desc a string description of the check # - mod the name of the module to import # - cmd an additional command to run # - have the result variable to set ######################################################################## macro(GR_PYTHON_CHECK_MODULE desc mod cmd have) message(STATUS "") message(STATUS "Python checking for ${desc}") execute_process( COMMAND ${PYTHON_EXECUTABLE} -c " ######################################### try: import ${mod} assert ${cmd} except ImportError, AssertionError: exit(-1) except: pass #########################################" RESULT_VARIABLE ${have} ) if(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - found") set(${have} TRUE) else(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - not found") set(${have} FALSE) endif(${have} EQUAL 0) endmacro(GR_PYTHON_CHECK_MODULE) ######################################################################## # Sets the python installation directory GR_PYTHON_DIR ######################################################################## if(NOT DEFINED GR_PYTHON_DIR) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c " from distutils import sysconfig print sysconfig.get_python_lib(plat_specific=True, prefix='') " OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR) ######################################################################## # Create an always-built target with a unique name # Usage: GR_UNIQUE_TARGET( ) ######################################################################## function(GR_UNIQUE_TARGET desc) file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) add_custom_target(${_target} ALL DEPENDS ${ARGN}) endfunction(GR_UNIQUE_TARGET) ######################################################################## # Install python sources (also builds and installs byte-compiled python) ######################################################################## function(GR_PYTHON_INSTALL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN}) #################################################################### if(GR_PYTHON_INSTALL_FILES) #################################################################### install(${ARGN}) #installs regular python files #create a list of all generated files unset(pysrcfiles) unset(pycfiles) unset(pyofiles) foreach(pyfile ${GR_PYTHON_INSTALL_FILES}) get_filename_component(pyfile ${pyfile} ABSOLUTE) list(APPEND pysrcfiles ${pyfile}) #determine if this file is in the source or binary directory file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile}) string(LENGTH "${source_rel_path}" source_rel_path_len) file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile}) string(LENGTH "${binary_rel_path}" binary_rel_path_len) #and set the generated path appropriately if(${source_rel_path_len} GREATER ${binary_rel_path_len}) set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path}) else() set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path}) endif() list(APPEND pycfiles ${pygenfile}c) list(APPEND pyofiles ${pygenfile}o) #ensure generation path exists get_filename_component(pygen_path ${pygenfile} PATH) file(MAKE_DIRECTORY ${pygen_path}) endforeach(pyfile) #the command to generate the pyc files add_custom_command( DEPENDS ${pysrcfiles} OUTPUT ${pycfiles} COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles} ) #the command to generate the pyo files add_custom_command( DEPENDS ${pysrcfiles} OUTPUT ${pyofiles} COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles} ) #create install rule and add generated files to target list set(python_install_gen_targets ${pycfiles} ${pyofiles}) install(FILES ${python_install_gen_targets} DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} ) #################################################################### elseif(GR_PYTHON_INSTALL_PROGRAMS) #################################################################### file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native) if (CMAKE_CROSSCOMPILING) set(pyexe_native "/usr/bin/env python") endif() foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS}) get_filename_component(pyfile_name ${pyfile} NAME) get_filename_component(pyfile ${pyfile} ABSOLUTE) string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe") list(APPEND python_install_gen_targets ${pyexefile}) get_filename_component(pyexefile_path ${pyexefile} PATH) file(MAKE_DIRECTORY ${pyexefile_path}) add_custom_command( OUTPUT ${pyexefile} DEPENDS ${pyfile} COMMAND ${PYTHON_EXECUTABLE} -c "open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())" COMMENT "Shebangin ${pyfile_name}" VERBATIM ) #on windows, python files need an extension to execute get_filename_component(pyfile_ext ${pyfile} EXT) if(WIN32 AND NOT pyfile_ext) set(pyfile_name "${pyfile_name}.py") endif() install(PROGRAMS ${pyexefile} RENAME ${pyfile_name} DESTINATION ${GR_PYTHON_INSTALL_DESTINATION} COMPONENT ${GR_PYTHON_INSTALL_COMPONENT} ) endforeach(pyfile) endif() GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets}) endfunction(GR_PYTHON_INSTALL) ######################################################################## # Write the python helper script that generates byte code files ######################################################################## file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py " import sys, py_compile files = sys.argv[1:] srcs, gens = files[:len(files)/2], files[len(files)/2:] for src, gen in zip(srcs, gens): py_compile.compile(file=src, cfile=gen, doraise=True) ") gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/Modules/FindUSB.cmake0000644000175000017500000000271312576764164022470 0ustar carlescarles find_path(USB_INCLUDE_DIR NAMES usb.h PATHS /usr/include /usr/local/include ) if(NOT USB_INCLUDE_DIR) message(STATUS "libusb has not been found.") message(STATUS "You can install it by 'sudo apt-get install libusb-dev' ") message(FATAL_ERROR "libusb is required for building gr-gn3s") endif(NOT USB_INCLUDE_DIR) INCLUDE(FindPkgConfig) if(NOT LIBUSB_FOUND) pkg_check_modules (LIBUSB_PKG libusb-1.0) find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATHS ${LIBUSB_PKG_INCLUDE_DIRS} /usr/include/libusb-1.0 /usr/include /usr/local/include /opt/local/include/libusb-1.0 ) find_library(LIBUSB_LIBRARIES NAMES usb-1.0 PATHS ${LIBUSB_PKG_LIBRARY_DIRS} /usr/lib /usr/local/lib /opt/local/lib ) if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found") message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}") else(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found") message(STATUS "libusb-1.0 not found.") message(STATUS "You can install it by 'sudo apt-get install libusb-1.0-0-dev'") endif(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) mark_as_advanced(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES) endif(NOT LIBUSB_FOUND) gnss-sdr-0.0.6/drivers/gr-gn3s/cmake/cmake_uninstall.cmake.in0000644000175000017500000000253212576764164023403 0ustar carlescarles# http://www.vtk.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSEIF(IS_SYMLINK "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) gnss-sdr-0.0.6/drivers/gr-gn3s/build/0000755000175000017500000000000012576764164016640 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/build/.gitignore0000644000175000017500000000010612576764164020625 0ustar carlescarles# Ignore everything in this directory * # Except this file !.gitignoregnss-sdr-0.0.6/drivers/gr-gn3s/python/0000755000175000017500000000000012576764164017062 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/python/Makefile0000644000175000017500000001430312576764164020523 0ustar carlescarles# CMAKE generated file: DO NOT EDIT! # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # Default target executed when no arguments are given to make. default_target: all .PHONY : default_target #============================================================================= # Special targets provided by cmake. # Disable implicit rules so canonical targets will work. .SUFFIXES: # Remove some rules from gmake that .SUFFIXES does not remove. SUFFIXES = .SUFFIXES: .hpux_make_needs_suffix_list # Suppress display of executed commands. $(VERBOSE).SILENT: # A target that is always out of date. cmake_force: .PHONY : cmake_force #============================================================================= # Set environment variables for the build. # The shell in which to execute make rules. SHELL = /bin/sh # The CMake executable. CMAKE_COMMAND = /usr/bin/cmake # The command to remove a file. RM = /usr/bin/cmake -E remove -f # The top-level source directory on which CMake was run. CMAKE_SOURCE_DIR = /home/javier/sdr/gr-gn3s # The top-level build directory on which CMake was run. CMAKE_BINARY_DIR = /home/javier/sdr/gr-gn3s #============================================================================= # Targets provided globally by CMake. # Special rule for the target edit_cache edit_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..." /usr/bin/cmake -i . .PHONY : edit_cache # Special rule for the target edit_cache edit_cache/fast: edit_cache .PHONY : edit_cache/fast # Special rule for the target install install: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." /usr/bin/cmake -P cmake_install.cmake .PHONY : install # Special rule for the target install install/fast: preinstall/fast @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." /usr/bin/cmake -P cmake_install.cmake .PHONY : install/fast # Special rule for the target install/local install/local: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake .PHONY : install/local # Special rule for the target install/local install/local/fast: install/local .PHONY : install/local/fast # Special rule for the target install/strip install/strip: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake .PHONY : install/strip # Special rule for the target install/strip install/strip/fast: install/strip .PHONY : install/strip/fast # Special rule for the target list_install_components list_install_components: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" .PHONY : list_install_components # Special rule for the target list_install_components list_install_components/fast: list_install_components .PHONY : list_install_components/fast # Special rule for the target rebuild_cache rebuild_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : rebuild_cache # Special rule for the target rebuild_cache rebuild_cache/fast: rebuild_cache .PHONY : rebuild_cache/fast # Special rule for the target test test: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." /usr/bin/ctest --force-new-ctest-process $(ARGS) .PHONY : test # Special rule for the target test test/fast: test .PHONY : test/fast # The main all target all: cmake_check_build_system cd /home/javier/sdr/gr-gn3s && $(CMAKE_COMMAND) -E cmake_progress_start /home/javier/sdr/gr-gn3s/CMakeFiles /home/javier/sdr/gr-gn3s/python/CMakeFiles/progress.marks cd /home/javier/sdr/gr-gn3s && $(MAKE) -f CMakeFiles/Makefile2 python/all $(CMAKE_COMMAND) -E cmake_progress_start /home/javier/sdr/gr-gn3s/CMakeFiles 0 .PHONY : all # The main clean target clean: cd /home/javier/sdr/gr-gn3s && $(MAKE) -f CMakeFiles/Makefile2 python/clean .PHONY : clean # The main clean target clean/fast: clean .PHONY : clean/fast # Prepare targets for installation. preinstall: all cd /home/javier/sdr/gr-gn3s && $(MAKE) -f CMakeFiles/Makefile2 python/preinstall .PHONY : preinstall # Prepare targets for installation. preinstall/fast: cd /home/javier/sdr/gr-gn3s && $(MAKE) -f CMakeFiles/Makefile2 python/preinstall .PHONY : preinstall/fast # clear depends depend: cd /home/javier/sdr/gr-gn3s && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 .PHONY : depend # Convenience name for target. python/CMakeFiles/pygen_python_375e7.dir/rule: cd /home/javier/sdr/gr-gn3s && $(MAKE) -f CMakeFiles/Makefile2 python/CMakeFiles/pygen_python_375e7.dir/rule .PHONY : python/CMakeFiles/pygen_python_375e7.dir/rule # Convenience name for target. pygen_python_375e7: python/CMakeFiles/pygen_python_375e7.dir/rule .PHONY : pygen_python_375e7 # fast build rule for target. pygen_python_375e7/fast: cd /home/javier/sdr/gr-gn3s && $(MAKE) -f python/CMakeFiles/pygen_python_375e7.dir/build.make python/CMakeFiles/pygen_python_375e7.dir/build .PHONY : pygen_python_375e7/fast # Help Target help: @echo "The following are some of the valid targets for this Makefile:" @echo "... all (the default if no target is provided)" @echo "... clean" @echo "... depend" @echo "... edit_cache" @echo "... install" @echo "... install/local" @echo "... install/strip" @echo "... list_install_components" @echo "... pygen_python_375e7" @echo "... rebuild_cache" @echo "... test" .PHONY : help #============================================================================= # Special targets to cleanup operation of make. # Special rule to run CMake to check the build system integrity. # No rule that depends on this can have commands that come from listfiles # because they might be regenerated. cmake_check_build_system: cd /home/javier/sdr/gr-gn3s && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 .PHONY : cmake_check_build_system gnss-sdr-0.0.6/drivers/gr-gn3s/python/qa_gn3s.py0000755000175000017500000000276712576764164021006 0ustar carlescarles#!/usr/bin/env python # # Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # from gnuradio import gr, gr_unittest import gn3s_swig class qa_gn3s (gr_unittest.TestCase): def setUp (self): self.tb = gr.top_block () def tearDown (self): self.tb = None def test_001_gn3s_source_cc (self): #src_data = (-3, 4, -5.5, 2, 3) expected_result = (9, 16, 30.25, 4, 9) #src = gr.vector_source_f (src_data) gn3s_src = gn3s_swig.source_cc () dst = gr.vector_sink_f () #self.tb.connect (src, sqr) self.tb.connect (sqr, dst) self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6) if __name__ == '__main__': gr_unittest.main () gnss-sdr-0.0.6/drivers/gr-gn3s/python/CMakeLists.txt0000644000175000017500000000306312576764164021624 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Include python install macros ######################################################################## include(GrPython) if(NOT PYTHONINTERP_FOUND) return() endif() ######################################################################## # Install python sources ######################################################################## GR_PYTHON_INSTALL( FILES __init__.py DESTINATION ${GR_PYTHON_DIR}/gn3s ) ######################################################################## # Handle the unit tests ######################################################################## include(GrTest) set(GR_TEST_TARGET_DEPS gr-gn3s) set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig) GR_ADD_TEST(qa_gn3s ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_gn3s.py) gnss-sdr-0.0.6/drivers/gr-gn3s/python/__init__.py0000644000175000017500000000340612576764164021176 0ustar carlescarles# # Copyright 2008,2009 Free Software Foundation, Inc. # # This application is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This application is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # The presence of this file turns this directory into a Python package ''' This is the GNU Radio GN3S module. Place your Python package description here (python/__init__.py). ''' # ---------------------------------------------------------------- # Temporary workaround for ticket:181 (swig+python problem) import sys _RTLD_GLOBAL = 0 try: from dl import RTLD_GLOBAL as _RTLD_GLOBAL except ImportError: try: from DLFCN import RTLD_GLOBAL as _RTLD_GLOBAL except ImportError: pass if _RTLD_GLOBAL != 0: _dlopenflags = sys.getdlopenflags() sys.setdlopenflags(_dlopenflags|_RTLD_GLOBAL) # ---------------------------------------------------------------- # import swig generated symbols into the gn3s namespace from gn3s_swig import * # import any pure python here # # ---------------------------------------------------------------- # Tail of workaround if _RTLD_GLOBAL != 0: sys.setdlopenflags(_dlopenflags) # Restore original flags # ---------------------------------------------------------------- gnss-sdr-0.0.6/drivers/gr-gn3s/README.md0000644000175000017500000001707112576764164017026 0ustar carlescarles# How to build gr-gn3s Source maintainer: Javier Arribas (jarribas at cttc.es) This document describes how to build the GN3S V2 GPS Sampler GNU Radio Source USB 2.0 driver. More information on the device (not available anymore) can be found at http://www.sparkfun.com/products/8238 The driver core is based on Gregory W. Hecker driver available at http://github.com/gps-sdr/gps-sdr. GR-GN3S is a GNU Radio's compliant signal source block intended to be used either with GNSS-SDR as a signal source, or as standalone signal source block instantiated from a GNU Radio flow graph from C++ or using Python (also includes a gnuradio-companion interface). ## Install GNU Radio: You can install GNU Radio through a .deb package *or* by using pybombs. Please choose only **one** of these two procedures. - In Ubuntu 12.10 and later, or Debian Jessie or later, install GNU Radio and other dependencies through a .deb package: ~~~~~~ $ sudo apt-get install gnuradio-dev libusb-dev ~~~~~~ - Semi-automatic installation of GNU Radio using PyBOMBS: Downloading, building and installing [GNU Radio](http://gnuradio.org/redmine/projects/gnuradio/wiki "GNU Radio's Homepage") and all its dependencies is not a simple task. We recommend to use [PyBOMBS](http://gnuradio.org/redmine/projects/pybombs/wiki "Python Build Overlay Managed Bundle System wiki") (Python Build Overlay Managed Bundle System), the GNU Radio install management system that automatically does all the work for you. In a terminal, type: ~~~~~~ $ git clone git://github.com/pybombs/pybombs $ cd pybombs ~~~~~~ Configure PyBOMBS: ~~~~~~ $ ./pybombs config ~~~~~~ You can safely accept the default options but for ```prefix```. We recommend to put ```/usr/local``` there. After the configuration, you should get something similar to: ~~~~~~ gituser = username prefix = /usr/local satisfy_order = deb,src # For Debian/Ubuntu/LinuxMint satisfy_order = rpm,src # For Fedora/CentOS/RHEL/openSUSE forcepkgs = forcebuild = gnuradio,uhd,gr-osmosdr,rtl-sdr,... timeout = 30 cmakebuildtype = RelWithDebInfo builddocs = OFF cc = gcc cxx = g++ makewidth = 4 ~~~~~~ Then, you are ready to download and install GNU Radio and all their required dependencies by doing: ~~~~~~ $ sudo ./pybombs install gnuradio ~~~~~~ This can take some time (up to two hours to complete, depending on your system), and downloads, builds and installs the latest versions of the Universal Hardware Driver (UHD) and GNU Radio in your system, including all their dependencies. In case you do not want to use PyBOMBS and prefer to build and install GNU Radio step by step, follow instructions at the [GNU Radio Build Guide](http://gnuradio.org/redmine/projects/gnuradio/wiki/BuildGuide). ## Get the latest version of GNSS-SDR: ~~~~~~ $ git clone git://github.com/gnss-sdr/gnss-sdr $ cd gnss-sdr $ git checkout next ~~~~~~ ## Build GR-GN3S: - Go to GR-GN3S root directory and compile the driver: ~~~~~~ $ cd drivers/gr-gn3s $ cd build $ cmake ../ $ make ~~~~~~ NOTE: If you have installed GNU Radio via the gnuradio-dev package, you might need to use ```cmake -DCMAKE_INSTALL_PREFIX=/usr ../``` instead of ```cmake ../``` in order to make the module visible from gnuradio-companion once installed. - If everything went fine, install the driver as root ~~~~~~ $ sudo make install $ sudo ldconfig ~~~~~~ ## Check that the module is usable by gnuradio-companion Open gnuradio-companion and check the gn3s_source module under the GN3S tab. In order to gain access to USB ports, gnuradio-companion should be used as root. In addition, the driver requires access to the GN3S firmware binary file. It should be available in the same path where the application is called. GNSS-SDR comes with a pre-compiled custom GN3S firmware available at gnss-sdr/firmware/GN3S_v2/bin/gn3s_firmware.ihx. Please copy this file to the application path. ## Build gnss-sdr with the GN3S option enabled: ~~~~~~ $ cd gnss-sdr/build $ cmake -DENABLE_GN3S=ON ../ $ make $ sudo make install ~~~~~~ This will enable the *GN3S_Signal_Source* implementation, which is able to read from the GN3S V2 GPS Sampler in real-time. # Using the GN3S V2 GPS Sampler as a signal source with GNSS-SDR GN3S V2's sampling frequency is 8.1838 Msps, delivering a signal with an intermediate frequency of 38400 Hz. This is an example of a gnss-sdr configuration file for a GPS L1 C/A receiver using the *GN3S_Signal_Source* implementation: ~~~~~~ GNSS-SDR.internal_fs_hz=2727933.33 ; 8183800/3 ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=GN3S_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=8183800 SignalSource.dump=false SignalSource.dump_filename=../signal_source.dat ;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner ;######### DATA_TYPE_ADAPTER CONFIG ############ DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false InputFilter.dump_filename=../data/input_filter.dat InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.45 InputFilter.band2_begin=0.55 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=8183800 InputFilter.IF=38400 InputFilter.decimation_factor=3 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.dump_filename=../data/resampler.dat ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 Channels.in_acquisition=1 Channel.signal=1C ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false Acquisition_1C.dump_filename=./acq_dump.dat Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 Acquisition_1C.sampled_ms=1 Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition Acquisition_1C.threshold=0.008 Acquisition_1C.doppler_max=10000 Acquisition_1C.doppler_step=500 ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 Tracking_1C.dump=false Tracking_1C.dump_filename=../data/epl_tracking_ch_ Tracking_1C.pll_bw_hz=45.0; Tracking_1C.dll_bw_hz=2.0; Tracking_1C.order=3; ;######### TELEMETRY DECODER GPS CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false TelemetryDecoder_1C.decimation_factor=1; ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false. Observables.dump_filename=./observables.dat ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.averaging_depth=100 PVT.flag_averaging=false PVT.output_rate_ms=10 PVT.display_rate_ms=500 PVT.dump_filename=./PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea PVT.flag_nmea_tty_port=false; PVT.nmea_dump_devname=/dev/pts/4 PVT.dump=false ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ~~~~~~ Save this configuration in a file, for instance ```my_GN3S_receiver.conf```, copy the file located at ```install/gn3s_firmware.ihx``` to your working directory, and instantiate gnss-sdr by doing: ~~~~~~ $ gnss-sdr --config_file=./my_GN3S_receiver.conf ~~~~~~ gnss-sdr-0.0.6/drivers/gr-gn3s/grc/0000755000175000017500000000000012576764164016314 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/grc/CMakeLists.txt0000644000175000017500000000145712576764164021063 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # install(FILES gn3s_source_cc.xml DESTINATION share/gnuradio/grc/blocks ) gnss-sdr-0.0.6/drivers/gr-gn3s/grc/gn3s_source_cc.xml0000644000175000017500000000037712576764164021744 0ustar carlescarles gn3s_source gn3s_source_cc GN3S import gn3s gn3s.source_cc() out complex gnss-sdr-0.0.6/drivers/gr-gn3s/lib/0000755000175000017500000000000012576764164016307 5ustar carlescarlesgnss-sdr-0.0.6/drivers/gr-gn3s/lib/qa_gn3s_source_cc.cc0000644000175000017500000000244012576764164022176 0ustar carlescarles/*! * \file qa_gn3s_source_cc.h * \brief GNU Radio source block to acces to SiGe GN3S USB sampler. * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include BOOST_AUTO_TEST_CASE(qa_gn3s_source_t1){ BOOST_CHECK_EQUAL(2 + 2, 4); // TODO BOOST_* test macros here } gnss-sdr-0.0.6/drivers/gr-gn3s/lib/gn3s_source.cc0000644000175000017500000001425212576764164021054 0ustar carlescarles/*----------------------------------------------------------------------------------------------*/ /*! \file gps_source.cpp // // FILENAME: gps_source.cpp // // DESCRIPTION: Implements member functions of the GPS_Source class. // // DEVELOPERS: Gregory W. Heckler (2003-2009), Javier Arribas (2012) // // LICENSE TERMS: Copyright (c) Gregory W. Heckler 2009 // // This file is part of the GPS Software Defined Radio (GPS-SDR) // // The GPS-SDR is free software; you can redistribute it and/or modify it under the terms of the // GNU General Public License as published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. The GPS-SDR is distributed in the hope that // it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // Note: Comments within this file follow a syntax that is compatible with // DOXYGEN and are utilized for automated document extraction // // Reference: */ /*----------------------------------------------------------------------------------------------*/ #include "gn3s_source.h" #include /*----------------------------------------------------------------------------------------------*/ gn3s_Source::gn3s_Source() { Open_GN3S(); overflw = soverflw = 0; agc_scale = 1; /* Assign to base */ ms_count = 0; flag_first_read=true; fprintf(stdout,"Creating GPS Source\n"); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ gn3s_Source::~gn3s_Source() { Close_GN3S(); fprintf(stdout,"Destructing GPS Source\n"); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void gn3s_Source::Read(gn3s_ms_packet *_p,int n_samples) { Read_GN3S(_p,n_samples); ms_count++; } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void gn3s_Source::Open_GN3S() { /* Create the object */ gn3s_a = new gn3s(0); /* Everything is super! */ //fprintf(stdout,"GN3S Start\n"); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void gn3s_Source::Close_GN3S() { if(gn3s_a != NULL) delete gn3s_a; //fprintf(stdout,"Destructing GN3S\n"); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void gn3s_Source::Read_GN3S(gn3s_ms_packet *_p,int n_samples) { int bread; int started=0; int check; bool overrun; short int LUT4120[2] = {1,-1}; char shift = 0; char endshift = 0; short int *pbuff; int BUFSIZE=n_samples*2; if (flag_first_read==true) { /* Start transfer */ while(!started) { usleep(100); started = gn3s_a->usrp_xfer(VRQ_XFER, 1); } fprintf(stdout,"started TX\n"); flag_first_read=false; } /* Check the overrun */ overrun = gn3s_a->check_rx_overrun(); if(overrun) { time(&rawtime); timeinfo = localtime (&rawtime); fprintf(stdout, "GN3S overflow at time %s\n", asctime(timeinfo)); fflush(stdout); } /* Read 5 ms */ bread = gn3s_a->read((void *)&gbuff[0], BUFSIZE); // FUSB Read... //ret = fx2c.d_ephandle->read (buf, bufsize); if (bread != BUFSIZE) { fprintf (stderr, "fusb_read: ret = %d (bufsize: %d) \n", bread, BUFSIZE); fprintf (stderr, "%s\n", usb_strerror()); } // Store IF data as 8bit signed values pbuff = (short int *)&buff[0]; /* Make sure we are reading I0,Q0,I1,Q1,I2,Q2.... etc */ if ((gbuff[0] & 0x2) == 2) //if true, we don't have to shift data { shift = 0; } else { shift = 1; } if ((gbuff[BUFSIZE-1] & 0x02) == 0) //if true, we don't drop last data byte { endshift = 0; } else { endshift = 1; } for (int j=0;jdata, pbuff, n_samples*sizeof(GN3S_CPX)); } // gregory way... with CUSTOM firmware! //if (flag_first_read==true) //{ // /* Start transfer */ // while(!started) // { // usleep(100); // started = gn3s_a->usrp_xfer(VRQ_XFER, 1); // } // fprintf(stdout,"started TX\n"); // /* Make sure we are reading I0,Q0,I1,Q1,I2,Q2.... etc */ // bread = gn3s_a->read((void*)(&gbuff[0]),1); // //fprintf(stdout,"R1\n"); // check = (gbuff[0] & 0x3); //0 or 1 -> I sample , 2 or 3 -> Q sample // if(check < 2) // { // fprintf(stdout,"Shifted one sample"); // bread = gn3s_a->read((void*)(&gbuff[0]),1); // } // //fprintf(stdout,"R2\n"); // flag_first_read=false; //}else{ // // pbuff = (short int *)&buff[0]; // // /* Read up to 5 ms */ // bread = gn3s_a->read((void *)&gbuff[0], n_samples*2); // // /* Convert to +-1 using Look Up Table*/ // for(lcv = 0; lcv < (n_samples*2); lcv++) // pbuff[lcv] = LUT[gbuff[lcv] & 0x3]; // // /* Check the overrun */ // overrun = gn3s_a->check_rx_overrun(); // if(overrun) // { // time(&rawtime); // timeinfo = localtime (&rawtime); // fprintf(stdout, "GN3S overflow at time %s\n", asctime(timeinfo)); // fflush(stdout); // } //} ///* Copy to destination */ //memcpy(_p->data, pbuff, n_samples*sizeof(GN3S_CPX)); gnss-sdr-0.0.6/drivers/gr-gn3s/lib/fusb.cc0000644000175000017500000000322312576764164017555 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "fusb.h" // ------------------------------------------------------------------------ // device handle // ------------------------------------------------------------------------ fusb_devhandle::fusb_devhandle (libusb_device_handle *udh) : d_udh (udh) { // that's it }; fusb_devhandle::~fusb_devhandle () { // nop } // ------------------------------------------------------------------------ // end point handle // ------------------------------------------------------------------------ fusb_ephandle::fusb_ephandle (int endpoint, bool input_p, int block_size, int nblocks) : d_endpoint (endpoint), d_input_p (input_p), d_block_size (block_size), d_nblocks (nblocks), d_started (false) { // that't it } fusb_ephandle::~fusb_ephandle () { // nop } gnss-sdr-0.0.6/drivers/gr-gn3s/lib/CMakeLists.txt0000644000175000017500000000404312576764164021050 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Setup library ######################################################################## include(GrPlatform) #define LIB_SUFFIX add_library(gr-gn3s SHARED gn3s_source_cc.cc gn3s_source.cc gn3s.cc fusb.cc fusb_linux.cc) target_link_libraries(gr-gn3s ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} "usb" ${LIBUSB_LIBRARIES}) set_target_properties(gr-gn3s PROPERTIES DEFINE_SYMBOL "gr_gn3s_EXPORTS") ######################################################################## # Install built library files ######################################################################## install(TARGETS gr-gn3s LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT "gr-gn3s" ) ######################################################################## # Build and register unit test ######################################################################## find_package(Boost COMPONENTS unit_test_framework) include(GrTest) set(GR_TEST_TARGET_DEPS gr-gn3s) #turn each test cpp file into an executable with an int main() function add_definitions(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN) add_executable(qa_gn3s_source_cc qa_gn3s_source_cc.cc) target_link_libraries(qa_gn3s_source_cc gr-gn3s ${Boost_LIBRARIES} "usb" ${LIBUSB_LIBRARIES}) GR_ADD_TEST(qa_gn3s_source_cc qa_gn3s_source_cc) gnss-sdr-0.0.6/drivers/gr-gn3s/lib/fusb_sysconfig_linux.cc0000644000175000017500000000263312576764164023064 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #include "fusb.h" #include "fusb_linux.h" static const int MAX_BLOCK_SIZE = 16 * 1024; // hard limit static const int DEFAULT_BLOCK_SIZE = 4 * 1024; // fewer kernel memory problems static const int FUSB_BUFFER_SIZE = 1 * (1L << 20); // 1MB fusb_devhandle * fusb_sysconfig::make_devhandle (usb_dev_handle *udh, libusb_context *ctx) { return new fusb_devhandle_linux (udh); } int fusb_sysconfig::max_block_size () { return MAX_BLOCK_SIZE; } int fusb_sysconfig::default_block_size () { return DEFAULT_BLOCK_SIZE; } int fusb_sysconfig::default_buffer_size () { return FUSB_BUFFER_SIZE; } gnss-sdr-0.0.6/drivers/gr-gn3s/lib/gn3s.cc0000644000175000017500000003327312576764164017500 0ustar carlescarles/*----------------------------------------------------------------------------------------------*/ /*! \file gn3s.cpp // // FILENAME: gn3s.cpp // // DESCRIPTION: Impelements the GN3S class. // // DEVELOPERS: Gregory W. Heckler (2003-2009) // // LICENSE TERMS: Copyright (c) Gregory W. Heckler 2009 // // This file is part of the GPS Software Defined Radio (GPS-SDR) // // The GPS-SDR is free software; you can redistribute it and/or modify it under the terms of the // GNU General Public License as published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. The GPS-SDR is distributed in the hope that // it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // Note: Comments within this file follow a syntax that is compatible with // DOXYGEN and are utilized for automated document extraction // // Reference: */ /*----------------------------------------------------------------------------------------------*/ #include "gn3s.h" #include #include #include #include #include "fusb_linux.h" static char debug = 1; //!< 1 = Verbose /*----------------------------------------------------------------------------------------------*/ gn3s::gn3s(int _which) { //int fsize; bool ret; which = _which; fx2_device = NULL; fx2_handle = NULL; gn3s_vid = GN3S_VID; gn3s_pid = GN3S_PID; /* Get the firmware embedded in the executable */ //fstart = (int) &_binary_usrp_gn3s_firmware_ihx_start; //fsize = strlen(_binary_usrp_gn3s_firmware_ihx_start); //gn3s_firmware = new char[fsize + 10]; //memcpy(&gn3s_firmware[0], (void *)fstart, fsize); // Load the firmware from external file (Javier) //gn3s_firmware[fsize] = NULL; /* Search all USB busses for the device specified by VID/PID */ fx2_device = usb_fx2_find(gn3s_vid, gn3s_pid, debug, 0); if (!fx2_device) { /* Program the board */ ret = prog_gn3s_board(); if(ret) { fprintf(stdout, "Could not flash GN3S device\n"); throw(1); } /* Need to wait to catch change */ sleep(2); /* Search all USB busses for the device specified by VID/PID */ fx2_device = usb_fx2_find(gn3s_vid, gn3s_pid, debug, 0); } else { fprintf(stdout, "Found GN3S Device\n"); } /* Open and configure FX2 device if found... */ ret = usb_fx2_configure(fx2_device, &fx2_config); if(ret) { fprintf(stdout, "Could not obtain a handle to the GN3S device\n"); throw(1); } } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ gn3s::~gn3s() { usrp_xfer(VRQ_XFER, 0); //delete gn3s_firmware; delete fx2_config.d_ephandle; delete fx2_config.d_devhandle; usb_release_interface(fx2_config.udev, fx2_config.interface); usb_close(fx2_config.udev); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ int gn3s::prog_gn3s_board() { char a; struct usb_bus *bus; struct usb_device *dev; //struct usb_dev_handle *han; int vid, pid; dev = NULL; usb_init(); usb_find_busses(); usb_find_devices(); vid = (VID_OLD); pid = (PID_OLD); for(bus = usb_busses; bus; bus = bus->next) { for(dev = bus->devices; dev; dev = dev->next) { if((dev->descriptor.idVendor == vid) && (dev->descriptor.idProduct == pid)) { fx2_device = dev; fprintf(stdout,"GN3S Device Found... awaiting firmware flash \n"); break; } } } if(fx2_device == NULL) { fprintf(stderr,"Cannot find vid 0x%x pid 0x%x \n", vid, pid); return -1; } printf("Using device vendor id 0x%04x product id 0x%04x\n", fx2_device->descriptor.idVendor, fx2_device->descriptor.idProduct); fx2_handle = usb_open(fx2_device); /* Do the first set 0xE600 1 */ char c[] = "1"; char d[] = "0"; a = atoz(c); fprintf(stdout,"GN3S flashing ... \n"); upload_ram(&a, (PROG_SET_CMD),1); program_fx2(NULL, 1); a = atoz(d); upload_ram(&a, (PROG_SET_CMD),1); fprintf(stdout,"GN3S flash complete! \n"); usb_close(fx2_handle); return(0); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ int gn3s::atoz(char *s) { int a; if(!strncasecmp("0x", s, 2)){ sscanf(s, "%x", &a); return a; } return atoi(s); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void gn3s::upload_ram(char *buf, int start, int len) { int i; int tlen; int quanta = 16; int a; for (i = start; i < start + len; i += quanta) { tlen = len + start - i; if (tlen > quanta) tlen = quanta; if (debug >= 3) printf("i = %d, tlen = %d \n", i, tlen); a = usb_control_msg(fx2_handle, 0x40, 0xa0, i, 0, buf + (i - start), tlen, 1000); if (a < 0) { fprintf(stderr, "Request to upload ram contents failed: %s\n", usb_strerror()); return; } } } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ void gn3s::program_fx2(char *filename, char mem) { FILE *f; char s[1024]; char data[256]; char checksum, a; int length, addr, type, i; unsigned int b; // *** mod javier: load firmware from external file *** //f = tmpfile(); /* Dump firmware into temp file */ //fputs(gn3s_firmware, f); //rewind(f); f = fopen ("gn3s_firmware.ihx","r"); if (f!=NULL) { printf("GN3S firmware file found!\n"); }else{ printf("Could not open GN3S firmware file!\n"); return; } while (!feof(f)) { fgets(s, 1024, f); /* we should not use more than 263 bytes normally */ if (s[0] != ':') { fprintf(stderr, "%s: invalid string: \"%s\"\n", filename, s); continue; } sscanf(s + 1, "%02x", &length); sscanf(s + 3, "%04x", &addr); sscanf(s + 7, "%02x", &type); if (type == 0) { // printf("Programming %3d byte%s starting at 0x%04x", // length, length==1?" ":"s", addr); a = length + (addr & 0xff) + (addr >> 8) + type; for (i = 0; i < length; i++) { sscanf(s + 9 + i * 2, "%02x", &b); data[i] = b; a = a + data[i]; } sscanf(s + 9 + length * 2, "%02x", &b); checksum = b; if (((a + checksum) & 0xff) != 0x00) { printf(" ** Checksum failed: got 0x%02x versus 0x%02x\n", (-a) & 0xff, checksum); continue; } else { //printf(", checksum ok\n"); } upload_ram(data, addr, length); } else { if (type == 0x01) { printf("End of file\n"); fclose(f); return; } else { if (type == 0x02) { printf("Extended address: whatever I do with it ?\n"); continue; } } } } fclose(f); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ struct usb_device* gn3s::usb_fx2_find(int vid, int pid, char info, int ignore) { struct usb_bus *bus; struct usb_device *dev; struct usb_device *fx2 = NULL; usb_dev_handle *udev; int count = 0; int ret; char str[256]; usb_init(); usb_find_busses(); usb_find_devices(); for(bus = usb_busses; bus; bus = bus->next) { for(dev = bus->devices; dev; dev = dev->next) { if((dev->descriptor.idVendor == vid) && (dev->descriptor.idProduct == pid)) { fx2 = dev; } if(fx2 != NULL && info) { udev = usb_open(fx2); if(udev && dev->descriptor.idVendor == vid && dev->descriptor.idProduct == pid && count < ignore) { if(fx2->descriptor.iManufacturer) { ret = usb_get_string_simple(udev, fx2->descriptor.iManufacturer, str, sizeof(str)); if(ret > 0) printf("- Manufacturer : %s\n", str); else printf("- Unable to fetch manufacturer string\n"); } if(fx2->descriptor.iProduct) { ret = usb_get_string_simple(udev, fx2->descriptor.iProduct, str, sizeof(str)); if(ret > 0) printf("- Product : %s\n", str); else printf("- Unable to fetch product string\n"); } if(fx2->descriptor.iSerialNumber) { ret = usb_get_string_simple(udev, fx2->descriptor.iSerialNumber, str, sizeof(str)); if(ret > 0) printf("- Serial Number: %s\n", str); else printf("- Unable to fetch serial number string\n"); } usb_close (udev); return fx2; } else if(udev && dev->descriptor.idVendor == vid && dev->descriptor.idProduct == pid && count >= ignore) { count++; } if(!fx2->config) { printf(" Could not retrieve descriptors\n"); continue; } for(int i = 0; i < fx2->descriptor.bNumConfigurations; i++) { //print_configuration(&fx2->config[i]); } } } } return fx2; } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ bool gn3s::usb_fx2_configure(struct usb_device *fx2, fx2Config *fx2c) { char status = 0; int interface = RX_INTERFACE; int altinterface = RX_ALTINTERFACE; usb_dev_handle *udev; fusb_ephandle *d_ephandle; fusb_devhandle *d_devhandle; udev = usb_open(fx2); if(!udev) { fprintf(stdout, "Could not obtain a handle to GNSS Front-End device \n"); return -1; } else { if(debug) printf("Received handle for GNSS Front-End device \n"); if(usb_set_configuration (udev, 1) < 0) { fprintf (stdout, "error in %s, \n%s \n", __FUNCTION__, usb_strerror()); usb_close (udev); status = -1; } if(usb_claim_interface (udev, interface) < 0) { fprintf (stdout, "error in %s, \n%s \n", __FUNCTION__, usb_strerror()); usb_close (udev); fprintf (stdout, "\nDevice not programmed? \n"); usb_close (udev); status = -1; throw(0); } if(usb_set_altinterface (udev, altinterface) < 0) { fprintf (stdout, "error in %s, \n%s \n", __FUNCTION__, usb_strerror()); usb_close (udev); usb_release_interface (udev, interface); usb_close (udev); status = -1; } d_devhandle = make_devhandle(udev); d_ephandle = d_devhandle->make_ephandle(RX_ENDPOINT, true, FUSB_BLOCK_SIZE, FUSB_NBLOCKS); if(!d_ephandle->start()) { fprintf (stdout, "usrp0_rx: failed to start end point streaming"); usb_strerror (); status = -1; } if(status == 0) { fx2c->interface = interface; fx2c->altinterface = altinterface; fx2c->udev = udev; fx2c->d_devhandle = d_devhandle; fx2c->d_ephandle = d_ephandle; return 0; } else { return -1; } } } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ fusb_devhandle* gn3s::make_devhandle(usb_dev_handle *udh) { return new fusb_devhandle_linux(udh); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ int gn3s::read(void *buff, int bytes) { return(fx2_config.d_ephandle->read(buff, bytes)); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ bool gn3s::check_rx_overrun() { bool overrun; _get_status(GS_RX_OVERRUN, &overrun); return(overrun); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ bool gn3s::_get_status(int command, bool *trouble) { unsigned char status; if(write_cmd(VRQ_GET_STATUS, 0, command, &status, sizeof(status)) != sizeof (status)) return false; *trouble = status; return true; } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ bool gn3s::usrp_xfer(char VRQ_TYPE, bool start) { int r; r = write_cmd(VRQ_TYPE, start, 0, 0, 0); return(r == 0); } /*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/ int gn3s::write_cmd(int request, int value, int index, unsigned char *bytes, int len) { int requesttype; int r; requesttype = (request & 0x80) ? VRT_VENDOR_IN : VRT_VENDOR_OUT; r = usb_control_msg (fx2_config.udev, requesttype, request, value, index, (char *) bytes, len, 1000); if(r < 0) { /* We get EPIPE if the firmware stalls the endpoint. */ if(errno != EPIPE) fprintf (stdout, "usb_control_msg failed: %s\n", usb_strerror()); } return r; } /*----------------------------------------------------------------------------------------------*/ gnss-sdr-0.0.6/drivers/gr-gn3s/lib/gn3s_source_cc.cc0000644000175000017500000000647612576764164021532 0ustar carlescarles/*! * \file gn3s_source_cc.cc * \brief GNU Radio source block to acces to SiGe GN3S USB sampler v2. * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include /* * Create a new instance of howto_square_ff and return * a boost shared_ptr. This is effectively the public constructor. */ gn3s_source_cc_sptr gn3s_make_source_cc () { return gnuradio::get_initial_sptr(new gn3s_source_cc ()); } /* * Specify constraints on number of input and output streams. * This info is used to construct the input and output signatures * (2nd & 3rd args to gr::block's constructor). The input and * output signatures are used by the runtime system to * check that a valid number and type of inputs and outputs * are connected to this block. In this case, we accept * only 1 input and 1 output. */ static const int MIN_IN = 0; // mininum number of input streams static const int MAX_IN = 0; // maximum number of input streams static const int MIN_OUT = 1; // minimum number of output streams static const int MAX_OUT = 1; // maximum number of output streams /* * The private constructor */ gn3s_source_cc::gn3s_source_cc () : gr::block ("gn3s_cc", gr::io_signature::make(MIN_IN, MAX_IN, sizeof (gr_complex)), gr::io_signature::make(MIN_OUT, MAX_OUT, sizeof (gr_complex))) { // constructor code here gn3s_drv = new gn3s_Source(); fprintf(stdout,"GN3S Start\n"); } /* * Our virtual destructor. */ gn3s_source_cc::~gn3s_source_cc () { // destructor code here if(gn3s_drv != NULL) { fprintf(stdout,"Destructing GN3S\n"); delete gn3s_drv; //delete packet; } } int gn3s_source_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int n_samples_rx; gr_complex *out = (gr_complex *) output_items[0]; if (noutput_items<=GN3S_SAMPS_5MS) { gn3s_drv->Read(&packet,noutput_items); n_samples_rx = noutput_items; } else { gn3s_drv->Read(&packet,GN3S_SAMPS_5MS); n_samples_rx = GN3S_SAMPS_5MS; } for (int i = 0; i < n_samples_rx; i++) { out[i] = gr_complex(packet.data[i].i, packet.data[i].q); } // Tell runtime system how many output items we produced. return n_samples_rx; } gnss-sdr-0.0.6/drivers/gr-gn3s/lib/fusb_linux.cc0000644000175000017500000004057312576764164021005 0ustar carlescarles/* -*- c++ -*- */ /* * Copyright 2003 Free Software Foundation, Inc. * * This file is part of GNU Radio * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "fusb_linux.h" #include "usb.h" // libusb header #include #ifdef HAVE_LINUX_COMPILER_H #include #endif #include // interface to kernel portion of user mode usb driver #include #include #include #include #include #include #include #define MINIMIZE_TX_BUFFERING 1 // must be defined to 0 or 1 //static const int MAX_BLOCK_SIZE = fusb_sysconfig::max_block_size(); // hard limit //static const int DEFAULT_BLOCK_SIZE = MAX_BLOCK_SIZE; static const int DEFAULT_BUFFER_SIZE = 4 * (1L << 20); // 4 MB / endpoint static const int MAX_BLOCK_SIZE = 16 * 1024; // hard limit static const int DEFAULT_BLOCK_SIZE = 4 * 1024; // fewer kernel memory problems static const int FUSB_BUFFER_SIZE = 1 * (1L << 20); // 1MB // Totally evil and fragile extraction of file descriptor from // guts of libusb. They don't install usbi.h, which is what we'd need // to do this nicely. // // FIXME if everything breaks someday in the future, look here... static int fd_from_usb_dev_handle (usb_dev_handle *udh) { return *((int *) udh); } inline static void urb_set_ephandle (usbdevfs_urb *urb, fusb_ephandle_linux *handle) { urb->usercontext = handle; } inline static fusb_ephandle_linux * urb_get_ephandle (usbdevfs_urb *urb) { return (fusb_ephandle_linux *) urb->usercontext; } // ------------------------------------------------------------------------ // USB request block (urb) allocation // ------------------------------------------------------------------------ static usbdevfs_urb * alloc_urb (fusb_ephandle_linux *self, int buffer_length, int endpoint, bool input_p, unsigned char *write_buffer) { usbdevfs_urb *urb = new usbdevfs_urb; memset (urb, 0, sizeof (*urb)); urb->buffer_length = buffer_length; // We allocate dedicated memory only for input buffers. // For output buffers we reuse the same buffer (the kernel // copies the data at submital time) if (input_p) urb->buffer = new unsigned char [buffer_length]; else urb->buffer = write_buffer; // init common values urb->type = USBDEVFS_URB_TYPE_BULK; urb->endpoint = (endpoint & 0x7f) | (input_p ? 0x80 : 0); // USBDEVFS_URB_QUEUE_BULK goes away in linux 2.5, but is needed if // we are using a 2.4 usb-uhci host controller driver. This is // unlikely since we're almost always going to be plugged into a // high speed host controller (ehci) #if 0 && defined (USBDEVFS_URB_QUEUE_BULK) urb->flags = USBDEVFS_URB_QUEUE_BULK; #endif urb->signr = 0; urb_set_ephandle (urb, self); return urb; } static void free_urb (usbdevfs_urb *urb) { // if this was an input urb, free the buffer if (urb->endpoint & 0x80) delete [] ((unsigned char *) urb->buffer); delete urb; } // ------------------------------------------------------------------------ // device handle // ------------------------------------------------------------------------ fusb_devhandle_linux::fusb_devhandle_linux (usb_dev_handle *udh) : fusb_devhandle (udh) { // that's all } fusb_devhandle_linux::~fusb_devhandle_linux () { // if there are any pending requests, cancel them and free the urbs. std::list::reverse_iterator it; for (it = d_pending_rqsts.rbegin (); it != d_pending_rqsts.rend (); it++){ _cancel_urb (*it); free_urb (*it); } } fusb_ephandle * fusb_devhandle_linux::make_ephandle (int endpoint, bool input_p, int block_size, int nblocks) { return new fusb_ephandle_linux (this, endpoint, input_p, block_size, nblocks); } // Attempt to cancel all transactions associated with eph. void fusb_devhandle_linux::_cancel_pending_rqsts (fusb_ephandle_linux *eph) { std::list::reverse_iterator it; for (it = d_pending_rqsts.rbegin (); it != d_pending_rqsts.rend (); it++){ if (urb_get_ephandle (*it) == eph) _cancel_urb (*it); } } void fusb_devhandle_linux::pending_add (usbdevfs_urb *urb) { d_pending_rqsts.push_back (urb); } usbdevfs_urb * fusb_devhandle_linux::pending_get () { if (d_pending_rqsts.empty ()) return 0; usbdevfs_urb *urb = d_pending_rqsts.front (); d_pending_rqsts.pop_front (); return urb; } bool fusb_devhandle_linux::pending_remove (usbdevfs_urb *urb) { std::list::iterator result = find (d_pending_rqsts.begin (), d_pending_rqsts.end (), urb); if (result == d_pending_rqsts.end ()){ fprintf (stderr, "fusb::pending_remove: failed to find urb in pending_rqsts: %p\n", urb); return false; } d_pending_rqsts.erase (result); return true; } /* * Submit the urb to the kernel. * iff successful, the urb will be placed on the devhandle's pending list. */ bool fusb_devhandle_linux::_submit_urb (usbdevfs_urb *urb) { int ret; ret = ioctl (fd_from_usb_dev_handle (d_udh), USBDEVFS_SUBMITURB, urb); if (ret < 0){ perror ("fusb::_submit_urb"); return false; } pending_add (urb); return true; } /* * Attempt to cancel the in pending or in-progress urb transaction. * Return true iff transaction was sucessfully cancelled. * * Failure to cancel should not be considered a problem. This frequently * occurs if the transaction has already completed in the kernel but hasn't * yet been reaped by the user mode code. * * urbs which were cancelled have their status field set to -ENOENT when * they are reaped. */ bool fusb_devhandle_linux::_cancel_urb (usbdevfs_urb *urb) { int ret = ioctl (fd_from_usb_dev_handle (d_udh), USBDEVFS_DISCARDURB, urb); if (ret < 0){ // perror ("fusb::_cancel_urb"); return false; } return true; } /* * Check with the kernel and see if any of our outstanding requests * have completed. For each completed transaction, remove it from the * devhandle's pending list and append it to the completed list for * the corresponding endpoint. * * If any transactions are reaped return true. * * If ok_to_block_p is true, then this will block until at least one * transaction completes or an unrecoverable error occurs. */ bool fusb_devhandle_linux::_reap (bool ok_to_block_p) { int ret; int nreaped = 0; usbdevfs_urb *urb = 0; int fd = fd_from_usb_dev_handle (d_udh); // try to reap as many as possible without blocking... while ((ret = ioctl (fd, USBDEVFS_REAPURBNDELAY, &urb)) == 0){ if (urb->status != 0 && urb->status != -ENOENT){ fprintf (stderr, "_reap: usb->status = %d, actual_length = %5d\n", urb->status, urb->actual_length); } pending_remove (urb); urb_get_ephandle (urb)->completed_list_add (urb); nreaped++; } if (nreaped > 0) // if we got any, return w/o blocking return true; if (!ok_to_block_p) return false; ret = ioctl (fd, USBDEVFS_REAPURB, &urb); if (ret < 0){ perror ("fusb::_reap"); return false; } pending_remove (urb); urb_get_ephandle (urb)->completed_list_add (urb); return true; } void fusb_devhandle_linux::_wait_for_completion () { while (!d_pending_rqsts.empty ()) if (!_reap(true)) break; } // ------------------------------------------------------------------------ // end point handle // ------------------------------------------------------------------------ fusb_ephandle_linux::fusb_ephandle_linux (fusb_devhandle_linux *devhandle, int endpoint, bool input_p, int block_size, int nblocks) : fusb_ephandle (endpoint, input_p, block_size, nblocks), d_devhandle (devhandle), d_write_work_in_progress (0), d_write_buffer (0), d_read_work_in_progress (0), d_read_buffer (0), d_read_buffer_end (0) { if (d_block_size < 0 || d_block_size > MAX_BLOCK_SIZE) throw std::out_of_range ("fusb_ephandle_linux: block_size"); if (d_nblocks < 0) throw std::out_of_range ("fusb_ephandle_linux: nblocks"); if (d_block_size == 0) d_block_size = DEFAULT_BLOCK_SIZE; if (d_nblocks == 0) d_nblocks = std::max (1, DEFAULT_BUFFER_SIZE / d_block_size); if (!d_input_p) if (!MINIMIZE_TX_BUFFERING) d_write_buffer = new unsigned char [d_block_size]; if (0) fprintf(stderr, "fusb_ephandle_linux::ctor: d_block_size = %d d_nblocks = %d\n", d_block_size, d_nblocks); // allocate urbs for (int i = 0; i < d_nblocks; i++) d_free_list.push_back (alloc_urb (this, d_block_size, d_endpoint, d_input_p, d_write_buffer)); } fusb_ephandle_linux::~fusb_ephandle_linux () { stop (); usbdevfs_urb *urb; while ((urb = free_list_get ()) != 0) free_urb (urb); while ((urb = completed_list_get ()) != 0) free_urb (urb); if (d_write_work_in_progress) free_urb (d_write_work_in_progress); delete [] d_write_buffer; if (d_read_work_in_progress) free_urb (d_read_work_in_progress); } // ---------------------------------------------------------------- bool fusb_ephandle_linux::start () { if (d_started) return true; // already running d_started = true; if (d_input_p){ // fire off all the reads usbdevfs_urb *urb; int nerrors = 0; while ((urb = free_list_get ()) != 0 && nerrors < d_nblocks){ if (!submit_urb (urb)) nerrors++; } } return true; } // // kill all i/o in progress. // kill any completed but unprocessed transactions. // bool fusb_ephandle_linux::stop () { if (!d_started) return true; if (d_write_work_in_progress){ free_list_add (d_write_work_in_progress); d_write_work_in_progress = 0; } if (d_read_work_in_progress){ free_list_add (d_read_work_in_progress); d_read_work_in_progress = 0; d_read_buffer = 0; d_read_buffer_end = 0; } d_devhandle->_cancel_pending_rqsts (this); d_devhandle->_reap (false); while (1){ usbdevfs_urb *urb; while ((urb = completed_list_get ()) != 0) free_list_add (urb); if (d_free_list.size () == (unsigned) d_nblocks) break; if (!d_devhandle->_reap(true)) break; } d_started = false; return true; } // ---------------------------------------------------------------- // routines for writing // ---------------------------------------------------------------- #if (MINIMIZE_TX_BUFFERING) int fusb_ephandle_linux::write(const void *buffer, int nbytes) { if (!d_started) return -1; if (d_input_p) return -1; assert(nbytes % 512 == 0); unsigned char *src = (unsigned char *) buffer; int n = 0; while (n < nbytes){ usbdevfs_urb *urb = get_write_work_in_progress(); if (!urb) return -1; assert(urb->actual_length == 0); int m = std::min(nbytes - n, MAX_BLOCK_SIZE); urb->buffer = src; urb->buffer_length = m; n += m; src += m; if (!submit_urb(urb)) return -1; d_write_work_in_progress = 0; } return n; } #else int fusb_ephandle_linux::write (const void *buffer, int nbytes) { if (!d_started) return -1; if (d_input_p) return -1; unsigned char *src = (unsigned char *) buffer; int n = 0; while (n < nbytes){ usbdevfs_urb *urb = get_write_work_in_progress (); if (!urb) return -1; unsigned char *dst = (unsigned char *) urb->buffer; int m = std::min (nbytes - n, urb->buffer_length - urb->actual_length); memcpy (&dst[urb->actual_length], &src[n], m); urb->actual_length += m; n += m; if (urb->actual_length == urb->buffer_length){ if (!submit_urb (urb)) return -1; d_write_work_in_progress = 0; } } return n; } #endif usbdevfs_urb * fusb_ephandle_linux::get_write_work_in_progress () { // if we've already got some work in progress, return it if (d_write_work_in_progress) return d_write_work_in_progress; while (1){ reap_complete_writes (); usbdevfs_urb *urb = free_list_get (); if (urb != 0){ assert (urb->actual_length == 0); d_write_work_in_progress = urb; return urb; } // The free list is empty. Tell the device handle to reap. // Anything it reaps for us will end up on our completed list. if (!d_devhandle->_reap (true)) return 0; } } void fusb_ephandle_linux::reap_complete_writes () { // take a look at the completed_list and xfer to free list after // checking for errors. usbdevfs_urb *urb; while ((urb = completed_list_get ()) != 0){ // Check for any errors or short writes that were reported in the urb. // The kernel sets status, actual_length and error_count. // error_count is only used for ISO xfers. // status is 0 if successful, else is an errno kind of thing if (urb->status != 0){ fprintf (stderr, "fusb: (status %d) %s\n", urb->status, strerror (-urb->status)); } else if (urb->actual_length != urb->buffer_length){ fprintf (stderr, "fusb: short write xfer: %d != %d\n", urb->actual_length, urb->buffer_length); } free_list_add (urb); } } void fusb_ephandle_linux::wait_for_completion () { d_devhandle->_wait_for_completion (); } // ---------------------------------------------------------------- // routines for reading // ---------------------------------------------------------------- int fusb_ephandle_linux::read (void *buffer, int nbytes) { if (!d_started) return -1; if (!d_input_p) return -1; unsigned char *dst = (unsigned char *) buffer; int n = 0; while (n < nbytes){ if (d_read_buffer >= d_read_buffer_end) if (!reload_read_buffer ()) return -1; int m = std::min (nbytes - n, (int) (d_read_buffer_end - d_read_buffer)); memcpy (&dst[n], d_read_buffer, m); d_read_buffer += m; n += m; } return n; } bool fusb_ephandle_linux::reload_read_buffer () { assert (d_read_buffer >= d_read_buffer_end); usbdevfs_urb *urb; if (d_read_work_in_progress){ // We're done with this urb. Fire off a read to refill it. urb = d_read_work_in_progress; d_read_work_in_progress = 0; d_read_buffer = 0; d_read_buffer_end = 0; urb->actual_length = 0; if (!submit_urb (urb)) return false; } while (1){ while ((urb = completed_list_get ()) == 0) if (!d_devhandle->_reap (true)) return false; // check result of completed read if (urb->status != 0){ // We've got a problem. Report it and fail. fprintf (stderr, "fusb: (rd status %d) %s\n", urb->status, strerror (-urb->status)); urb->actual_length = 0; free_list_add (urb); return false; } // we've got a happy urb, full of data... d_read_work_in_progress = urb; d_read_buffer = (unsigned char *) urb->buffer; d_read_buffer_end = d_read_buffer + urb->actual_length; return true; } } // ---------------------------------------------------------------- void fusb_ephandle_linux::free_list_add (usbdevfs_urb *urb) { assert (urb_get_ephandle (urb) == this); urb->actual_length = 0; d_free_list.push_back (urb); } usbdevfs_urb * fusb_ephandle_linux::free_list_get () { if (d_free_list.empty ()) return 0; usbdevfs_urb *urb = d_free_list.front (); d_free_list.pop_front (); return urb; } void fusb_ephandle_linux::completed_list_add (usbdevfs_urb *urb) { assert (urb_get_ephandle (urb) == this); d_completed_list.push_back (urb); } usbdevfs_urb * fusb_ephandle_linux::completed_list_get () { if (d_completed_list.empty ()) return 0; usbdevfs_urb *urb = d_completed_list.front (); d_completed_list.pop_front (); return urb; } /* * Submit the urb. If successful the urb ends up on the devhandle's * pending list, otherwise, it's back on our free list. */ bool fusb_ephandle_linux::submit_urb (usbdevfs_urb *urb) { if (!d_devhandle->_submit_urb (urb)){ // FIXME record the problem somewhere fprintf (stderr, "_submit_urb failed\n"); free_list_add (urb); return false; } return true; } gnss-sdr-0.0.6/drivers/gr-gn3s/lib/gn3s_firmware.ihx0000644000175000017500000003545412576764164021602 0ustar carlescarles:06000000020FE702006B95 :03000B0002006B85 :0300130002006B7D :03001B0002006B75 :0300230002006B6D :03002B0002006B65 :0300330002006B5D :03003B0002006B55 :0300430002006B4D :03004B0002006B45 :0300530002006B3D :03005B0002006B35 :0300630002006B2D :01006B003262 :0900800002006B0002006B00029B :08008900006B0002006B000295 :08009100006B0002006B00028D :08009900006B0002006B000285 :0800A100006B0002006B00027D :0800A900006B0002006B000275 :0700B100006B0002006B0070 :0901000002006B0002006B00021A :08010900006B0002006B000214 :08011100006B0002006B00020C :08011900006B0002006B000204 :08012100006B0002006B0002FC :08012900006B0002006B0002F4 :08013100006B0002006B0002EC :08013900006B0002006B0002E4 :08014100006B0002006B0002DC :08014900006B0002006B0002D4 :08015100006B0002006B0002CC :08015900006B0002006B0002C4 :08016100006B0002006B0002BC :08016900006B0002006B0002B4 :08017100006B0002006B0002AC :07017900006B0002006B00A7 :030FF000020FF3FA :030FE700750A0088 :0310060002018064 :0501800012018580FE64 :0701850012057A12060212B6 :08018C000661120560C2AF120A :0A0194000F1A120A7BD2EAD2AF1252 :06019E0009901206830225 :0201A40005272D :0501A60090E68BE4F07F :0901AB0090E6A0E0FA20E1F82240 :0A01B40090E6B8E0FABAC00280033A :0301BE0002031425 :0A01C10090E6B9E0FABA800280125D :0501CB00BAA2028057FA :0501D000BAA3028052F9 :0501D500BAA9028047F9 :0301DA000203100D :0E01DD0090E6BCE0FA601EBA013690E6C1E082 :0E01EB00FA235401FA90E740F090E68AE4F01F :0901F90090E68B7401F00205236D :0E02020090E6C1E0FA235401FA90E740F09034 :0D021000E68AE4F090E68B7401F00205230D :04021D0075820022C4 :060221007508014309010C :0A02270090E6BAE0FA8A0B750C00AD :0C02310090E6BBE0FC8C05E4FC420BED09 :0A023D00420C90E6BEE0FC8C0D754B :0C0247000E0090E6BFE0FE8E07E4FE42D1 :040253000DEF420E5B :07025700E50D450E700302E6 :02025E00052376 :0C02600090E6A0E0FE20E1F8C3E50D945C :0A026C0040E50E94005006AE0DAF01 :030276000E8004F3 :040279007E407F0044 :0C027D0090E6B9E0F8B8A32D7A007B00F1 :0E028900C3EA9EEB9F505EEA2440FCEB34E794 :0A029700FDA80BA90CEA28F582EB84 :0E02A10039F583E0F88C828D83F00ABA00DA1A :0302AF000B80D7EA :0402B2007C007D004F :0E02B600C3EC9EED9F5014EC2440F582ED3415 :0D02C400E7F58374CDF00CBC00E80D80E57B :0902D1008E137C407DE78C148D36 :0502DA0015850B828573 :0C02DF000C83C006C007120779D007D0BE :0302EB0006E433F3 :0C02EE0090E68AE4F090E68BEEF0EE253E :0502FA000BF50BEF35D0 :0402FF000CF50CE509 :060303000DC39EF50DE59F :050309000E9FF50E023D :02030E00025794 :0403100075820022D0 :0A03140090E6B8E0FCBC4002800354 :03031E0002051FB6 :0A03210090E6B9E0FCBC0102801573 :06032B00BCA2030203D88E :06033100BCA3030203D887 :06033700BCA9030203D281 :03033D0002051B9B :0D03400090E6BAE0606390E6C67480F0902D :0E034D00E6C774EDF090E6C8E4F090E6C9F063 :0E035B0090E6CAF090E6CBF090E6CC7403F08A :0D03690090E6CD7402F090E60CE4F00090F8 :0E037600E6F574FFF00075BB000090E6C7745A :0E038400EDF00090E6047480F00090E6047442 :0E03920002F00090E6047406F00090E604E429 :0903A000F00075BB060002052304 :0E03A90075BB000090E6F574FFF00090E604CE :0E03B7007480F00090E6047402F00090E604FA :0D03C5007406F00090E604E4F00002052349 :0603D2007508014309015A :0A03D80090E6BAE0FC8C0B750C00F7 :0C03E20090E6BBE0FC8C05E4FC420BED57 :0A03EE00420C90E6BEE0FC8C0D7599 :0C03F8000E0090E6BFE0FC8C05E4FC4227 :050404000DED420EE5C4 :080409000A70061208AA8582A0 :010411000AE0 :07041200E50D450E70030229 :020419000523B9 :09041B0090E68AE4F090E68BF013 :0E04240090E6A0E0FC20E1F890E68BE0FC8C76 :0E043200067F0090E6B9E0FCBCA3307A007BA8 :0104400000BB :0A044100C3EA9EEB9F40030205038F :0A044B00A80BA90CEA28F8EB39F918 :0E045500EA2440F582EB34E7F583E0FC888270 :0A0463008983F00ABA00D70B80D499 :04046D007C007D0092 :0A047100C3EC9EED9F40030205035B :09047B00E50AF50FB40102804608 :09048400EC250BF9ED350CF8AA8A :08048D000A7B001ABAFF011BF3 :0C049500EA5201EB5200E9486010AA0B8B :0A04A100ECFB2AFAE50A145AD39581 :0404AB000AF4F50F4B :0C04AF00EEC39CFAEF9DFBA80F7900C380 :0E04BB00EA98EB9950098E028C03EAC39BF578 :0104C9000F23 :0A04CA00EC250BF582ED350CF583EF :0A04D400EC2440F510ED34E7F511BB :0A04DE00850F12C004C005C006C05F :0E04E800071206A5D007D006D005D004E433D5 :0B04F600A80F7A00E82CFCEA3DFD0294 :02050100047183 :07050300EE250BF50BEF35AF :04050A000CF50CE5FB :06050E000DC39EF50DE592 :050514000E9FF50E0230 :020519000412CA :04051B0075820022C3 :04051F0075820022BF :0405230075820122BA :0D05270090E6C67480F090E6C774EDF09089 :0D053400E6C8E4F090E6C9F090E6CAF09049 :0E054100E6CBF090E6CC7403F090E6CD7402A9 :07054F00F090E60CE4F0005F :070556003000FD120B11C281 :03055D000080F625 :0C056000750A0090E678E05410FAC454CC :0A056C000FFA74504AF509740155A6 :0405760009F5082259 :0E057A0090E6007410F0758E0090E601740299 :0E058800F00090E61074A0F00090E61174E010 :0E059600F00090E612E4F00090E613E4F000AE :0E05A40090E61474E0F00090E615E4F000908C :0E05B200E6047480F00090E6047406F00090F9 :0E05C000E604E4F00090E618E4F090E619F08E :0D05CE0090E61A740CF090E61BE4F000902B :0E05DB00E68AE4F00090E68DE4F00090E6E29F :0E05E9007402F00090E6E37401F00090E62446 :0B05F7007402F00090E625E4F0002202 :0E06020090E6F574FFF0009010ADE493FA90CE :0E061000E6F3F09010AEE493FA90E6C3F0909B :0E061E0010AFE493FA90E6C1F09010B0E493B0 :0E062C00FA90E6C2F09010B2E493FA90E6C0A5 :03063A00F07A0053 :03063D00BA800080 :0C06400050198A037CE4EA2409F582E4E6 :0C064C003410F583E493FD8B828C83F066 :030658000A80E233 :06065B0090E6C6E4F02267 :0E1009000101010101010107000000000000CB :0E1017000000000000000000000000000000CB :0E1025000000003F0101010101010107000070 :0E1033000000000000000000000000000000AF :0E104100000000000000003F38010101010125 :0E104F0001070302020202020200000000007C :0E105D0000000000360000000000003F3801D7 :0E106B0001010101010703020202020202005C :0E107900000000000000000036000000000033 :02108700003F28 :0E108900000000000000000000000000000059 :0E1097000000000080ED000000000302008059 :0810A500EE0000000003020050 :0710AD00A0000000AE4E00A0 :0E066100C2B0C2B2D2B3C2B475B51DD280C24F :0E066F0081C282D283C284C285C286C28775D0 :06067D00B2FF75820022AD :08068300D284D28575820022A9 :08068B00C284C28575820022C1 :0E069300C284C285900001120FD6D284D28597 :0406A100758200223C :0E06A500AA82AB83C002C003120770D003D03C :0E06B30002C002C003120741D003D002C002F1 :0E06C100C00312088CD003D00250047C0180CC :0106CF006BBF :0C06D000E508601690E679EBF0C002C06F :0E06DC000312088CD003D00250047C01805120 :0E06EA007B0090E679EAF012088C50047C0147 :0206F80080413F :0606FA00AA10AB117D0007 :0C070000C3ED951250288A828B83E0FE26 :0E070C00A3AA82AB8390E679EEF0C002C00390 :0E071A00C005120876D005D003D00250047C32 :030728000180103D :03072B000D80D26C :0D072E0090E678E0FA4440F01207517C009C :06073B0053B27F8C822204 :0A07410090E6787480F0E5092509C0 :06074B00FA90E679F022AD :030751001207701C :0E075400120741120876E43390E678E0FA448A :0E07620040F012077090E678E0FA30E1E522F0 :0907700090E678E0FA20E6F82298 :0E077900AA82AB83C002C003120770D003D067 :0E07870002C002C003120741D003D002C0021C :0E079500C00312088CD003D0025004758201FC :0107A3002233 :0C07A400E508601690E679EBF0C002C09A :0E07B0000312088CD003D0025004758201227F :0E07BE007B0090E679EAF012088C50047582F8 :0207CC00012208 :0A07CE0090E6787480F0E509250933 :0E07D800FA90E67974014AF012087650047522 :0307E6008201226B :0D07E90090E679E012087650047582012236 :0407F6007A007B000A :0907FA00AC137D001CBCFF011DC5 :0E0803008B067F00C3EE9CEF64808DF063F0E7 :0B0811008095F05024EB2514FCE4352A :0C081C0015FD90E679E0FE8C828D83F0E3 :0D082800C003120876D0035004758201222F :050835000B8B0280C0E6 :0E083A0090E6787420F0C002120876D00250CA :0508480004758201228D :09084D00EA2514FAE43515FB90CC :0E085600E679E0FC8A828B83F012087650046B :040864007582012276 :0E08680090E6787440F090E679E07582002208 :0E08760090E678E0FA8A0330E0F6EB30E20418 :040884007582012256 :040888007582002253 :0E088C0090E678E0FA8A0330E0F6EB30E20402 :04089A007582012240 :08089E00EB20E1047582012248 :0408A6007582002235 :0808AA00E508700475820122CB :0408B2007514407504 :0308B6001518759D :0A08B90013409000001207797A0046 :0308C300BA400038 :0A08C600500FEA2400F582E4341814 :0708D000F583EAF00A80EC59 :0408D7007510007523 :0308DB001118757C :0A08DE0012409000001206A57A00F7 :0308E800BA400013 :0A08EB005011EA2400F582E43418ED :0908F500F583EAF4FBF00A80EA45 :0508FE007513407514A4 :0309030000751567 :0809060018900000120779901F :0B090E001800E0FA30E0047B018006D6 :0609190063023F0A8A039D :02091F007A005C :03092100BA4000D9 :0A09240050208A047D007510407514 :03092E0011188B12 :0C093100128C828D83C002C0031206A548 :09093D00D003D002EB2AFA80DBA2 :030946008B82227F :0EE0000012010002FFFFFF40C0162F070201B1 :04E00E000102060104 :0AE012000A060002FFFFFF400100B4 :0EE01C0009023200030100C0000904000000E8 :0EE02A00FFFFFF030904010001FFFFFF0407D1 :0EE038000502020002000904020001FFFFFFC2 :08E04600050705860200020037 :0EE04E0012010002FFFFFF40C0162F07020163 :04E05C0001020001BC :0AE060000A060002FFFFFF40010066 :0EE06A0009021200010100C0000904000000BC :04E07800FFFFFF03A4 :01E07C00079C :02E07D008CE035 :02E07F0092E02D :02E08100B8E005 :02E08300C8E0F3 :02E08500EAE0CF :02E0870006E1B0 :02E0890020E194 :06E08C0006030000090478 :0EE0920026035300690047006500200053007C :0EE0A00065006D00690063006F006E00640093 :0AE0AE007500630074006F0072003B :0EE0B8001003530045003400310031003000E9 :02E0C6004C000C :0EE0C800220343006F006D006D0061006E00CA :0EE0D60064002000260020005300740061004A :06E0E400740075007300DA :0EE0EA001C035400720061006E0073006D0094 :0EE0F800690074002000500061007400680090 :0EE106001A0352006500630065006900760090 :0CE11400650020005000610074006800ED :0CE120000C0331003000300030003000F3 :080949007880E84400600C799D :0C09510001901800E4F0A3D8FCD9FAD003 :0E095D0083D082F6D8FDC082C083758200224E :09096B0090E6A0E0FA4401F0223C :0E097400AA8274805AFBC423541FFB740F5ACE :0E09820090E6834BF090E683E0FA4420F022EA :0E09900090E680E0FA440AF09000FA120FD6CA :0E099E0090E65D74FFF090E65F74FFF05391F9 :0A09AC00EF90E680E0FA54F7F02225 :06100000E478FFF6D8FDC4 :060FEA00751600751700EA :0A09B60090E680E0FA30E7197518AA :0309C000007519A6 :0309C300E0751AC2 :0309C60012751B8C :0309C900E0751CBA :0309CC001C751D7A :0309CF00E0751EB2 :0309D2006A751F24 :0209D500E0221E :0409D70075184E75CC :0309DB0019E075AB :0309DE001A607527 :0309E1001BE075A3 :0309E4001C6A7515 :0309E7001DE0759B :0309EA001E1C755B :0309ED001FE022E6 :0909F0005391EF75A100D2003211 :0E09F900C0E0C0F0C082C083C002C003C004D2 :0E0A0700C005C006C007C000C001C0D075D039 :0E0A1500005391EF75A1001209B6D0D0D001A8 :0E0A2300D000D007D006D005D004D003D002FA :090A3100D083D082D0F0D0E03275 :0E0A3A00C0E0C0F0C082C083C002C003C00490 :0E0A4800C005C006C007C000C001C0D075D0F8 :0E0A5600005391EF75A1001209B6D0D0D00167 :0E0A6400D000D007D006D005D004D003D002B9 :090A7200D083D082D0F0D0E03234 :050A7B001209B675210F :030A8000F07522EC :080A830009758200120E68756E :030A8B0021F975D9 :060A8E002209758210121E :040A94000E68752152 :030A98003A75228A :0C0A9B000A758214120E6890E65C74313B :020AA700F0223B :0D0AA900E582547FFA24F750047582002284 :070AB600BA01047582012260 :080ABD00530201E4BA00010438 :030AC500F5822295 :0E0AC800AA82BA010C90E6A1E0FB7C008B82B2 :030AD6008C8322EC :0E0AD900BA810C90E6A2E0FB7C008B828C833D :010AE70022EC :0E0AE80053027FEA700C90E6A0E0FB7C008BCE :040AF600828C832249 :0E0AFA0090E6A3E0FB7C00EAC313FA7D00EA5D :090B08002BFBED3C8B82F58322EE :0C0B1100C20090E6B8E0FA530260BA009F :030B1D000280282B :050B2000BA2002800D67 :050B2500BA4002800E41 :050B2A00BA6002800327 :030B2F00020DFCB8 :060B320012096B020DFC2C :0A0B38001201B4E5826003020DFC17 :060B420012096B020DFC1C :0D0B480090E6B8E0FA530280BA8002800304 :030B5500020CCFC0 :0B0B580090E6B9E0FABA0003020C4B73 :050B6300BA0602803516 :050B6800BA080280083C :050B6D00BA0A02801726 :030B7200020CC9A9 :0C0B750090E740E516F090E68AE4F0906E :080B8100E68B7401F0020DFC8B :0C0B890090E740E517F090E68AE4F09059 :080B9500E68B7401F0020DFC77 :0A0B9D0090E6BBE0FABA01028017EF :050BA700BA02028038D3 :050BAC00BA03028059AC :050BB100BA0602801BE2 :050BB600BA0702803CBB :030BBB00020C45E4 :0A0BBE00AA18AB1990E6B3EBF07B28 :090BC8000090E6B4EAF0020DFC15 :0A0BD100AA1AAB1B90E6B3EBF07B11 :090BDB000090E6B4EAF0020DFC02 :0A0BE400AA1CAB1D90E6B3EBF07BFA :090BEE000090E6B4EAF0020DFCEF :0A0BF700AA1EAB1F90E6B3EBF07BE3 :090C01000090E6B4EAF0020DFCDB :0E0C0A0090E6BAE0FA90E07CE0FBC3EA9B4083 :070C18000612096B020DFC3E :0C0C1F0090E6BAE0FA75F002A4247DF51E :0C0C2B008274E035F0F583E0FAA3E0FBF2 :0E0C370090E6B3F07B0090E6B4EAF0020DFC0C :060C450012096B020DFC18 :0D0C4B0090E6B8E0FA53021FBA0002800ADA :050C5800BA0102801C3E :050C5D00BA0266802CC4 :0E0C620090E7407401F090E741E4F090E68ADC :090C7000F090E68B7402F0805054 :0E0C790090E740E4F090E741F090E68AF090BA :070C8700E68B7402F0803BD4 :0E0C8E0090E6BCE0FAF582120AA9E582602524 :0E0C9C0090E6BCE0FAF582120AC8E0FA5302B4 :0E0CAA000190E740EAF090E741E4F090E68A1E :090CB800F090E68B7402F0800854 :050CC10012096B800325 :030CC60012096BA5 :060CC90012096B020DFC94 :0C0CCF0090E6B9E0FA24F45003020DF99D :070CDB00EA2A2A900CE273E3 :070CE200020DF9020D1802DA :060CE9000DAB020D8C02B0 :060CEF000DF9020DF902EF :060CF5000DF9020DF902E9 :060CFB000DF9020D0602D6 :050D01000DF9020D0FC9 :090D060090E6BAE0F516020DFCBE :090D0F0090E6BAE0F517020DFCB4 :0D0D180090E6B8E0FA53021FBA0002800511 :050D2500BA025E800A25 :0A0D2A0090E6BAE012096B020DFC1E :0E0D340090E6BAE0704690E6BCE0FAF5821256 :0E0D42000AA9E582603890E6BCE0FAF582125C :0E0D50000AC8AA82AB8390E6BCE0FCF582C024 :0E0D5E0002C003120AC8D003D002E0FC530406 :0E0D6C00FE8A828B83ECF090E6BCE0FAF58202 :060D7A00120974020DFCD9 :060D800012096B020DFCDC :060D860012096B020DFCD6 :0E0D8C0090E6B8E0FA53021FBA006590E6BA8E :070D9A00E0FABA0102800536 :050DA100BA02028056B9 :050DA60012096B8051F1 :090DAB0090E6BAE0FA6002804013 :0E0DB40090E6BCE0FAF582120AA9E582602DF5 :0E0DC20090E6BCE0FAF582120AC8AA82AB8362 :0E0DD00090E6BCE0FCF582C002C003120AC827 :0E0DDE00D003D002E0FC4304018A828B83EC38 :030DEC00F0800D87 :050DEF0012096B8008F1 :050DF40012096B8003F1 :030DF90012096B71 :090DFC0090E6A0E0FA4480F02228 :050E0500AA82BA0300FF :070E0A004005EA249C5001A1 :010E110022BE :090E1200740F5AFBBB03028007B8 :070E1B00740F5AFBBB0B45ED :0A0E2200A2AF9202C2AFEA2400F56D :0C0E2C0082E43400F5837402F07B007453 :0C0E3800012AFCE43BFDEC2400F582EDF7 :0A0E44003400F583E522FCF074028F :0C0E4E002AFAE43BFBEA2400F582EB34B6 :0A0E5A0000F583AA217B00EAF0A254 :030E64000292AF48 :010E67002268 :050E6800AA82BA00009F :070E6D004005EA2483500157 :010E7400225B :060E7500EA5403600122B3 :0A0E7B00A2AF9203C2AFEA2400F513 :0C0E850082E43401F5837402F07B0074F9 :0C0E9100012AFCE43BFDEC2400F582ED9E :0A0E9D003401F583E522FCF0740235 :0C0EA7002AFAE43BFBEA2400F582EB345D :0A0EB30001F583AA217B00EAF0A2FA :040EBD000392AF22CB :050EC100AA82BA8000C6 :070EC6004005EA244B500136 :010ECD002202 :060ECE00EA54036001225A :0A0ED400A2AF9204C2AFEA2480F539 :0C0EDE0082E43400F5837402F07B0074A1 :0C0EEA00012AFCE43BFDEC2480F582EDC5 :0A0EF6003400F583E522FCF07402DD :0C0F00002AFAE43BFBEA2480F582EB3483 :0A0F0C0000F583AA217B00EAF0A2A1 :040F16000492AF2270 :080F1A00C2E8C2EA752100756E :060F22002201758243125A :040F28000E0575211C :030F2C00807522AB :0C0F2F0000758253120E050090E650E49D :0E0F3B00F00090E652E4F00090E654E4F0007E :0E0F490090E656E4F00090E65174FFF0009040 :0E0F5700E65374FFF00090E65574FFF0009032 :0E0F6500E65774FFF00090E658E4F090E6596D :0E0F730074FFF090E65AE4F090E65B74FFF035 :0E0F810090E65CE4F090E65D74FFF090E65EB2 :0E0F8F00E4F090E65F74FFF00090E660E4F09E :0D0F9D000090E66174FFF090E662E4F090D1 :0E0FAA00E66374FFF090E665E4F090E668748C :0A0FB8000BF05391AFD2E8D2EA2209 :010FC200220C :020FC300AA8200 :060FC500120FC2DAFB224C :030FCB0090FB5048 :080FCE00A3E582458370F922BE :040FD600AA82AB83BD :080FDA00120FCB1ABAFF011B34 :050FE200EA4B70F4224F :030FF300758122E3 :0A0FF600120949E582600302018040 :00000001FF gnss-sdr-0.0.6/README.md0000644000175000017500000020047212576764211014060 0ustar carlescarles![](./docs/doxygen/images/gnss-sdr_logo.png) **Welcome to GNSS-SDR!** Visit [gnss-sdr.org](http://gnss-sdr.org "GNSS-SDR's Homepage") for more information about this open source GNSS software defined receiver. If you have questions about GNSS-SDR, please [subscribe to the gnss-sdr-developers mailing list](http://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers "Subscribe to the gnss-sdr-developers mailing list" ) and post your questions there. # How to build GNSS-SDR This section describes how to set up the compilation environment in GNU/Linux or [Mac OS X](#macosx), and to build GNSS-SDR. See also [our Building Guide](http://gnss-sdr.org/documentation/building-guide "GNSS-SDR's Building Guide"). GNU/Linux ---------- * Tested distributions: Ubuntu 14.04 LTS, 14.10 and 15.04, Debian 8.0 "jessie", Linaro 15.03 * Known to work but not continually tested: Fedora 19 and 20, and openSUSE 13.1 * Supported microprocessor architectures: * i386: Intel x86 instruction set (32-bit microprocessors). * amd64: also known as x86-64, the 64-bit version of the x86 instruction set, originally created by AMD and implemented by AMD, Intel, VIA and others. * armel: ARM embedded ABI, supported on ARM v4t and higher. * armhf: ARM hard float, ARMv7 + VFP3-D16 floating-point hardware extension + Thumb-2 instruction set and above. * arm64: ARM 64 bits or ARMv8. Older distribution releases might work as well, but you will need GCC 4.7 or newer. Before building GNSS-SDR, you need to install all the required dependencies. If you are using Debian 8, Ubuntu 14.10 or above, this can be done by copying and pasting the following line in a terminal: ~~~~~~ $ sudo apt-get install build-essential cmake git libboost-dev libboost-date-time-dev \ libboost-system-dev libboost-filesystem-dev libboost-thread-dev libboost-chrono-dev \ libboost-serialization-dev libboost-program-options-dev libboost-test-dev \ liblog4cpp5-dev libuhd-dev gnuradio-dev gr-osmosdr libblas-dev liblapack-dev \ libarmadillo-dev libgflags-dev libgoogle-glog-dev libgnutls-openssl-dev libgtest-dev ~~~~~~ Once you have installed these packages, you can jump directly to [how to download the source code and build GNSS-SDR](#download-and-build-linux). Alternatively, if you need to manually install those libraries, please keep reading. Note for Ubuntu 14.04 LTS "trusty" users: you will need to build from source and install GNU Radio manually, as explained below, since GNSS-SDR requires gnuradio-dev >= 3.7.3, and Ubuntu 14.04 came with 3.7.2. Install all the packages above BUT EXCEPT ```libuhd-dev```, ```gnuradio-dev``` and ```gr-osmosdr``` (and remove them if they are already installed in your machine), and install those dependencies using PyBOMBS. ### Manual installation of GNU Radio Downloading, building and installing [GNU Radio](http://gnuradio.org/redmine/projects/gnuradio/wiki "GNU Radio's Homepage") and all its dependencies is not a simple task. We recommend to use [PyBOMBS](http://gnuradio.org/redmine/projects/pybombs/wiki "Python Build Overlay Managed Bundle System wiki") (Python Build Overlay Managed Bundle System), the GNU Radio install management system that automatically does all the work for you. In a terminal, type: ~~~~~~ $ git clone git://github.com/pybombs/pybombs $ cd pybombs ~~~~~~ Configure PyBOMBS: ~~~~~~ $ ./pybombs config ~~~~~~ You can safely accept the default options but for ```prefix```. We recommend to put ```/usr/local``` there. After the configuration, you should get something similar to: ~~~~~~ gituser = username prefix = /usr/local satisfy_order = deb,src # For Debian/Ubuntu/LinuxMint satisfy_order = rpm,src # For Fedora/CentOS/RHEL/openSUSE forcepkgs = forcebuild = gnuradio,uhd,gr-osmosdr,rtl-sdr timeout = 30 cmakebuildtype = RelWithDebInfo builddocs = OFF cc = gcc cxx = g++ makewidth = 4 ~~~~~~ Then, you are ready to download and install [UHD](http://files.ettus.com/uhd_docs/manual/html/) (the Universal Hardware Driver), GNU Radio and all their required dependencies by doing: ~~~~~~ $ sudo ./pybombs install uhd gnuradio ~~~~~~ This can take some time (up to two hours to complete, depending on your system), and downloads, builds and installs the latest versions of the Universal Hardware Driver (UHD) and GNU Radio in your system, including all their dependencies. In case you do not want to use PyBOMBS and prefer to build and install GNU Radio step by step, follow instructions at the [GNU Radio Build Guide](http://gnuradio.org/redmine/projects/gnuradio/wiki/BuildGuide). ### Manual installation of other required dependencies #### Install the [Armadillo](http://arma.sourceforge.net/ "Armadillo's Homepage") C++ linear algebra library: ~~~~~~ $ sudo apt-get install libopenblas-dev liblapack-dev # For Debian/Ubuntu/LinuxMint $ sudo yum install lapack-devel blas-devel # For Fedora/CentOS/RHEL $ sudo zypper install lapack-devel blas-devel # For OpenSUSE $ wget http://sourceforge.net/projects/arma/files/armadillo-5.400.3.tar.gz $ tar xvfz armadillo-5.400.3.tar.gz $ cd armadillo-5.400.3 $ cmake . $ make $ sudo make install ~~~~~~ The full stop separated from ```cmake``` by a space is important. [CMake](http://www.cmake.org/ "CMake's Homepage") will figure out what other libraries are currently installed and will modify Armadillo's configuration correspondingly. CMake will also generate a run-time armadillo library, which is a combined alias for all the relevant libraries present on your system (eg. BLAS, LAPACK and ATLAS). #### Install [Gflags](https://github.com/gflags/gflags "Gflags' Homepage"), a commandline flags processing module for C++: ~~~~~~ $ wget https://github.com/gflags/gflags/archive/v2.1.2.tar.gz $ tar xvfz v2.1.2.tar.gz $ cd gflags-2.1.2 $ cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DBUILD_gflags_nothreads_LIB=OFF . $ make $ sudo make install $ sudo ldconfig ~~~~~~ #### Install [Glog](https://github.com/google/glog "Glog's Homepage"), a library that implements application-level logging: ~~~~~~ $ wget https://github.com/google/glog/archive/v0.3.4.tar.gz $ tar xvfz v0.3.4.tar.gz $ cd glog-0.3.4 $ ./configure $ make $ sudo make install $ sudo ldconfig ~~~~~~ #### Build the [Google C++ Testing Framework](https://github.com/google/googletest "Googletest Homepage"), also known as googletest: ~~~~~~ $ wget https://github.com/google/googletest/archive/release-1.7.0.zip $ unzip release-1.7.0.zip $ cd googletest-release-1.7.0 $ cmake . $ make ~~~~~~ Please **DO NOT install** googletest (do *not* type ```sudo make install```). Every user needs to compile his tests using the same compiler flags used to compile the installed Google Test libraries; otherwise he may run into undefined behaviors (i.e. the tests can behave strangely and may even crash for no obvious reasons). The reason is that C++ has this thing called the One-Definition Rule: if two C++ source files contain different definitions of the same class/function/variable, and you link them together, you violate the rule. The linker may or may not catch the error (in many cases it is not required by the C++ standard to catch the violation). If it does not, you get strange run-time behaviors that are unexpected and hard to debug. If you compile Google Test and your test code using different compiler flags, they may see different definitions of the same class/function/variable (e.g. due to the use of ```#if``` in Google Test). Therefore, for your sanity, we recommend to avoid installing pre-compiled Google Test libraries. Instead, each project should compile Google Test itself such that it can be sure that the same flags are used for both Google Test and the tests. The building system of GNSS-SDR does the compilation and linking of googletest to its own tests; it is only required that you tell the system where the googletest folder that you downloaded resides. Just add to your ```$HOME/.bashrc``` file the following line: ~~~~~~ export GTEST_DIR=/home/username/gtest-1.7.0 ~~~~~~ changing /home/username/gtest-1.7.0 by the actual directory where you downloaded googletest. #### Install the [GnuTLS library](http://www.gnutls.org/ "GnuTLS's Homepage"): ~~~~~~ $ sudo apt-get install libgnutls-openssl-dev # For Debian/Ubuntu/LinuxMint $ sudo yum install libgnutls-openssl-devel # For Fedora/CentOS/RHEL ~~~~~~ ### Clone GNSS-SDR's Git repository: ~~~~~~ $ git clone git://github.com/gnss-sdr/gnss-sdr ~~~~~~ Cloning the GNSS-SDR repository as in the line above will create a folder named gnss-sdr with the following structure: ~~~~~~ |-gnss-sdr |---build <- where gnss-sdr is built. |---cmake <- CMake-related files. |---conf <- Configuration files. Each file defines one particular receiver. |---data <- Populate this folder with your captured data. |---docs <- Contains documentation-related files. |---drivers <- Drivers for some RF front-ends. |---firmware <- Firmware for some front-ends. |---install <- Executables will be placed here. |---src <- Source code folder. |-----algorithms <- Signal processing blocks. |-----core <- Control plane, interfaces, systems' parameters. |-----main <- Main function of the C++ program. |-----tests <- QA code. |-----utils <- some utilities (e.g. Matlab scripts). ~~~~~~ By default, you will be in the 'master' branch of the Git repository, which corresponds to the lastest stable release. If you want to try the latest developments, you can use the 'next' branch by going to the newly created gnss-sdr folder doing: ~~~~~~ $ git checkout next ~~~~~~ More information about GNSS-SDR-specific Git usage and pointers to further readings can be found at out guide about [how to contribute to the source code](http://gnss-sdr.org/documentation/how-contribute-source-code "How to contribute to the source code"). ### Build and install GNSS-SDR Go to GNSS-SDR's build directory: ~~~~~~ $ cd gnss-sdr/build ~~~~~~ Configure and build the application: ~~~~~~ $ cmake ../ $ make ~~~~~~ By default, CMake will build the Release version, meaning that the compiler will generate a fast, optimized executable. This is the recommended build type when using a RF front-end and you need to attain real time. If working with a file (and thus without real-time constraints), you may want to obtain more information about the internals of the receiver, as well as more fine-grained logging. This can be done by building the Debug version, by doing: ~~~~~~ $ cmake -DCMAKE_BUILD_TYPE=Debug ../ $ make ~~~~~~ This will create four executables at gnss-sdr/install, namely ```gnss-sdr```, ```run_tests```, ```front-end-cal``` and ```volk_gnsssdr_profile```. You can run them from that folder, but if you prefer to install ```gnss-sdr``` on your system and have it available anywhere else, do: ~~~~~~ $ sudo make install ~~~~~~ This will also make a copy of the conf/ folder into /usr/local/share/gnss-sdr/conf for your reference. We suggest to create a working directory at your preferred location and store your own configuration and data files there. You could be interested in creating the documentation by doing: ~~~~~~ $ make doc ~~~~~~ from the gnss-sdr/build folder. This will generate HTML documentation that can be retrieved pointing your browser of preference to gnss-sdr/docs/html/index.html. If a LaTeX installation is detected in your system, ~~~~~~ $ make pdfmanual ~~~~~~ will create a PDF manual at gnss-sdr/docs/GNSS-SDR_manual.pdf. Finally, ~~~~~~ $ make doc-clean ~~~~~~ will remove the content of previously-generated documentation. GNSS-SDR comes with a library with some specific Vector-Optimized Library of Kernels (VOLK) and a profiler that will build a config file for the best SIMD architecture for your processor. Run ``volk_gnsssdr_profile`` that is installed into $PREFIX/bin. This program tests all known VOLK kernels for each architecture supported by the processor. When finished, it will write to $HOME/.volk_gnsssdr/volk_gnsssdr_config the best architecture for the VOLK function. This file is read when using a function to know the best version of the function to execute. It mimics GNU Radio's VOLK library, so if you still have not run ```volk_profile```, this is a good moment to do so. If you are using Eclipse as your development environment, CMake can create the project for you. Type: ~~~~~~ $ cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DECLIPSE_CDT4_GENERATE_SOURCE_PROJECT=TRUE -DCMAKE_ECLIPSE_VERSION=3.7 -DCMAKE_ECLIPSE_MAKE_ARGUMENTS=-j8 ../ ~~~~~~ and then import the created project file into Eclipse: 1. Import project using Menu File -> Import. 2. Select General -> Existing projects into workspace. 3. Browse where your build tree is and select the root build tree directory. Keep "Copy projects into workspace" unchecked. 4. You get a fully functional Eclipse project. ###### Build GN3S V2 Custom firmware and driver (OPTIONAL): Go to GR-GN3S root directory, compile and install the driver (read the drivers/gr-gn3s/README for more information): ~~~~~~ $ cd gnss-sdr/drivers/gr-gn3s $ cd build $ cmake ../ $ make $ sudo make install $ sudo ldconfig ~~~~~~ Then configure GNSS-SDR to build the GN3S_Signal_Source by: ~~~~~~ $ cmake -DENABLE_GN3S=ON ../ $ make $ sudo make install ~~~~~~ In order to gain access to USB ports, gnss-sdr should be used as root. In addition, the driver requires access to the GN3S firmware binary file. It should be available in the same path where the application is called. GNSS-SDR comes with a pre-compiled custom GN3S firmware available at gnss-sdr/firmware/GN3S_v2/bin/gn3s_firmware.ihx. Please copy this file to the application path. The GNSS-SDR default path is gnss-sdr/install (in order to disable the GN3S_Signal_Source compilation, you can pass -DENABLE_GN3S=OFF to cmake and build GNSS-SDR again). More info at [drivers/gr-gn3s/README.md](./drivers/gr-gn3s/README.md) ###### Build OSMOSDR support (OPTIONAL): Install the [OsmoSDR](http://sdr.osmocom.org/trac/ "OsmoSDR's Homepage") library and GNU Radio's source block: ~~~~~~ $ git clone git://git.osmocom.org/osmo-sdr.git $ cd osmo-sdr/software/libosmosdr $ mkdir build $ cd build/ $ cmake ../ $ make $ sudo make install $ sudo ldconfig $ cd ../../ $ git clone git://git.osmocom.org/gr-osmosdr $ cd gr-osmosdr $ mkdir build $ cd build $ cmake ../ -Wno-dev $ make $ sudo make install $ sudo ldconfig ~~~~~~ Then, configure GNSS-SDR to build the Osmosdr_Signal_Source by: ~~~~~~ $ cmake -DENABLE_OSMOSDR=ON ../ $ make $ sudo make install ~~~~~~ (in order to disable the Osmosdr_Signal_Source compilation, you can pass -DENABLE_OSMOSDR=OFF to cmake and build GNSS-SDR again). ###### Build OpenCL support (OPTIONAL): In order to enable the building of blocks that use OpenCL, type: ~~~~~~ $ cmake -DENABLE_OPENCL=ON ../ $ make $ sudo make install ~~~~~~ ###### Build CUDA support (OPTIONAL): In order to enable the building of blocks that use CUDA, NVIDIA's parallel programming model that enables graphics processing unit (GPU) acceleration for data-parallel computations, first you need to install the CUDA Toolkit from [NVIDIA Developers Download page](https://developer.nvidia.com/cuda-downloads "CUDA Downloads"). Make sure that the SDK samples build well. Then, build GNSS-SDR by doing: ~~~~~~ $ cmake -DENABLE_CUDA=ON ../ $ make $ sudo make install ~~~~~~ Of course, you will also need a GPU that [supports CUDA](https://developer.nvidia.com/cuda-gpus "CUDA GPUs"). ###### Build a portable binary In order to build an executable that not depends on the specific SIMD instruction set that is present in the processor of the compiling machine, so other users can execute it in other machines without those particular sets, use: ~~~~~~ $ cmake -DENABLE_GENERIC_ARCH=ON ../ $ make $ sudo make install ~~~~~~ Using this option, all SIMD instructions are exclusively accessed via VOLK, which automatically includes versions of each function for different SIMD instruction sets, then detects at runtime which to use, or if there are none, substitutes a generic, non-SIMD implementation. Mac OS X --------- ### Mac OS X 10.9 (Mavericks) and 10.10 (Yosemite) If you still have not installed [Xcode](http://developer.apple.com/xcode/ "Xcode"), do it now from the App Store (it's free). You will also need the Xcode Command Line Tools. Launch the Terminal, found in /Applications/Utilities/, and type: ~~~~~~ $ xcode-select --install ~~~~~~ Agree to Xcode license: ~~~~~~ $ sudo xcodebuild -license ~~~~~~ Then, you need a package manager. For example, you can [install Macports](http://www.macports.org/install.php "Macports"). If you are upgrading from a previous installation, please follow the [migration rules](http://trac.macports.org/wiki/Migration). In a terminal, type: ~~~~~~ $ sudo port selfupdate $ sudo port upgrade outdated $ sudo port install doxygen +latex $ sudo port install gnuradio $ sudo port install armadillo $ sudo port install gnutls $ sudo port install google-glog +gflags ~~~~~~ You also might need to activate a Python installation. The list of installed versions can be retrieved with: ~~~~~~ $ port select list python ~~~~~~ and you can activate a certain version (2.7 works well) by typing: ~~~~~~ $ sudo port select --set python python27 ~~~~~~ Finally, you are ready to clone the GNSS-SDR repository and build the software: ~~~~~~ $ git clone git://github.com/gnss-sdr/gnss-sdr $ cd gnss-sdr/build $ cmake -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ../ $ make ~~~~~~ This will create three executables at gnss-sdr/install, namely ```gnss-sdr```, ```run_tests``` and ```volk_gnsssdr_profile```. You can install the software receiver on your system by doing: ~~~~~~ $ sudo make install ~~~~~~ The documentation can be built by: ~~~~~~ $ make doc ~~~~~~ and can be viewed doing: ~~~~~~ $ open ../docs/html/index.html ~~~~~~ GNSS-SDR comes with a library with some specific Vector-Optimized Library of Kernels (VOLK) and a profiler that will build a config file for the best SIMD architecture for your processor. Run ``volk_gnsssdr_profile`` that is installed into $PREFIX/bin. This program tests all known VOLK kernels for each architecture supported by the processor. When finished, it will write to $HOME/.volk_gnsssdr/volk_gnsssdr_config the best architecture for the VOLK function. This file is read when using a function to know the best version of the function to execute. It mimics GNU Radio's VOLK library, so if you still have not run ```volk_profile```, this is a good moment to do so. ###### Other package managers GNU Radio and other dependencies can also be installed using other package managers than Macports, such as [Fink](http://www.finkproject.org/ "Fink") or [Homebrew](http://brew.sh/ "Homebrew"). Since the version of Python that ships with OS X is great for learning but it is not good for development, you could have another Python executable in a non-standard location. If that is the case, you need to inform GNSS-SDR's configuration system by defining the PYTHON_EXECUTABLE variable as: ~~~~~~ cmake -DPYTHON_EXECUTABLE=/path/to/bin/python ../ ~~~~~~ The CMake script will create Makefiles that download, build and link Armadillo, Gflags, Glog and Google Test on the fly at compile time if they are not detected in your machine. Updating GNSS-SDR ================= If you cloned GNSS-SDR some time ago, it is possible that some developer has updated files at the Git repository. You can update your working copy by doing: ~~~~~~ $ git checkout master # Switch to branch you want to update $ git pull origin master # Download the newest code from our repository ~~~~~~ or, if you want to test the lastest developments: ~~~~~~ $ git checkout next $ git pull origin next ~~~~~~ Before rebuilding the source code, it is safe (and recommended) to remove the remainders of old compilations: ~~~~~~ $ rm -rf gnss-sdr/build/* ~~~~~~ If you are interested in contributing to the development of GNSS-SDR, please check out [how to do it](http://gnss-sdr.org/documentation/how-contribute-source-code "How to contribute to GNSS-SDR source code"). There is a more controlled way to upgrade your repository, which is to use the Git commands ```fetch``` and ```merge```, as described [here](http://gnss-sdr.org/source-code). Getting started =============== 1. After building the code, you will find the ```gnss-sdr``` executable file at gnss-sdr/install. You can make it available everywhere else by ```sudo make install```. Run the profilers ```volk_profile``` and ```volk_gnsssdr_profile``` for testing all available VOLK kernels for each architecture supported by your processor. This only has to be done once. 2. In post-processing mode, you have to provide a captured GNSS signal file. 1. The signal file can be easily recorded using the GNU Radio file sink in ```gr_complex``` mode. 2. You will need a GPS active antenna, a [USRP](http://www.ettus.com/product) and a suitable USRP daughter board to receive GPS L1 C/A signals. GNSS-SDR require to have at least 2 MHz of bandwidth in 1.57542 GHz. (remember to enable the DC bias with the daughter board jumper). We use a [DBSRX2](https://www.ettus.com/product/details/DBSRX2) to do the task, but you can try the newer Ettus' daughter boards as well. 3. The easiest way to capture a signal file is to use the GNU Radio Companion GUI. Only two blocks are needed: a USRP signal source connected to complex float file sink. You need to tune the USRP central frequency and decimation factor using USRP signal source properties box. We suggest using a decimation factor of 20 if you use the USRP2. This will give you 100/20 = 5 MSPS which will be enough to receive GPS L1 C/A signals. The front-end gain should also be configured. In our test with the DBSRX2 we obtained good results with ```G=50```. 4. Capture at least 80 seconds of signal in open sky conditions. During the process, be aware of USRP driver buffer underuns messages. If your hard disk is not fast enough to write data at this speed you can capture to a virtual RAM drive. 80 seconds of signal at 5 MSPS occupies less than 3 Gbytes using ```gr_complex```. 5. If you have no access to a RF front-end, you can download a sample raw data file (that contains GPS and Galileo signals) from [here](http://sourceforge.net/projects/gnss-sdr/files/data/). 3. You are ready to configure the receiver to use your captured file among other parameters: 1. The default configuration file resides at [/usr/local/share/gnss-sdr/conf/default.conf](./conf/gnss-sdr.conf). 2. You need to review/modify at least the following settings: * ```SignalSource.filename=``` (absolute or relative route to your GNSS signal captured file) * ```GNSS-SDR.internal_fs_hz=``` (captured file sampling rate in Hz) * ```SignalSource.sampling_frequency=``` (captured file sampling rate in Hz) * ```SignalConditioner.sample_freq_in=``` (captured file sampling rate in Hz) * ```SignalConditioner.sample_freq_out=``` (captured file sampling rate in Hz) * ```TelemetryDecoder.fs_in=``` (captured file sampling rate in Hz) 3. The configuration file has in-line documentation, you can try to tune the number of channels and several receiver parameters. Store your .conf file in some working directory of your choice. 4. Run the receiver invoking the configuration by ```$ gnss-sdr --config_file=/path/to/my_receiver.conf``` The program reports the current status in text mode, directly to the terminal window. If all goes well, and GNSS-SDR is able to successfully track and decode at least 4 satellites, you will get PVT fixes. The program will write a .kml file and RINEX (yet experimental) files in the install directory. In addition to the console output, GNSS-SDR also writes log files at /tmp/ (configurable with the commandline flag ```./gnss-sdr --log_dir=/path/to/log```). Using GNSS-SDR ============== With GNSS-SDR, you can define you own receiver, work with captured raw data or from a RF front-end, dump into files intermediate signals, or tune every single algorithm used in the signal processing. All the configuration is done in a single file. Those configuration files reside at the [gnss-sdr/conf/](./conf/) folder (or at /usr/local/share/gnss-sdr/conf if you installed the program). By default, the executable ```gnss-sdr``` will read the configuration available at ```gnss-sdr/conf/gnss-sdr.conf``` (or at (usr/local/share/gnss-sdr/conf/default.conf if you installed the program). You can edit that file to fit your needs, or even better, define a new ```my_receiver.conf``` file with your own configuration. This new receiver can be generated by invoking gnss-sdr with the ```--config_file``` flag pointing to your configuration file: ~~~~~~ $ gnss-sdr --config_file=/path/to/my_receiver.conf ~~~~~~ You can see a guide of available implementations at ```gnss-sdr/conf/master.conf```. That folder contains other working examples as well. If you have a working configuration and want to share it will others, please tell us and we will be happy to upload it to the server. You can use a single configuration file for processing different data files, specifying the file to be processed with the ```--signal_source``` flag: ~~~~~~ $ gnss-sdr --config_file=../conf/my_receiver.conf --signal_source=../data/my_captured_data.dat ~~~~~~ This will override the ```SignalSource.filename``` specified in the configuration file. Control plane ------------- ![](./docs/doxygen/images/GeneralBlockDiagram.png) GNSS-SDR's main method initializes the logging library, processes the command line flags, if any, provided by the user and instantiates a [ControlThread](./src/core/receiver/control_thread.h) object. Its constructor reads the configuration file, creates a control queue and creates a flowgraph according to the configuration. Then, the program's main method calls the run() method of the instantiated object, an action that connects the flowgraph and starts running it. After that, and until a stop message is received, it reads control messages sent by the receiver's modules through a safe-thread queue and processes them. Finally, when a stop message is received, the main method executes the destructor of the ControlThread object, which deallocates memory, does other cleanup and exits the program. The [GNSSFlowgraph](./src/core/receiver/gnss_flowgraph.h) class is responsible for preparing the graph of blocks according to the configuration, running it, modifying it during run-time and stopping it. Blocks are identified by its role. This class knows which roles it has to instantiate and how to connect them. It relies on the configuration to get the correct instances of the roles it needs and then it applies the connections between GNU Radio blocks to make the graph ready to be started. The complexity related to managing the blocks and the data stream is handled by GNU Radio's ```gr::top_block``` class. GNSSFlowgraph wraps the ```gr::top_block``` instance so we can take advantage of the ```gnss_block_factory``` (see below), the configuration system and the processing blocks. This class is also responsible for applying changes to the configuration of the flowgraph during run-time, dynamically reconfiguring channels: it selects the strategy for selecting satellites. This can range from a sequential search over all the satellites' ID to other more efficient approaches. The Control Plane is in charge of creating a flowgraph according to the configuration and then managing the modules. Configuration allows users to define in an easy way their own custom receiver by specifying the flowgraph (type of signal source, number of channels, algorithms to be used for each channel and each module, strategies for satellite selection, type of output format, etc.). Since it is difficult to foresee what future module implementations will be needed in terms of configuration, we used a very simple approach that can be extended without a major impact in the code. This can be achieved by simply mapping the names of the variables in the modules with the names of the parameters in the configuration. ### Configuration Properties are passed around within the program using the [ConfigurationInterface](./src/core/interfaces/configuration_interface.h) class. There are two implementations of this interface: [FileConfiguration](./src/core/receiver/file_configuration.h) and [InMemoryConfiguration](./src/core/receiver/in_memory_configuration.h). FileConfiguration reads the properties (pairs of property name and value) from a file and stores them internally. InMemoryConfiguration does not read from a file; it remains empty after instantiation and property values and names are set using the set property method. FileConfiguration is intended to be used in the actual GNSS-SDR application whereas InMemoryConfiguration is intended to be used in tests to avoid file-dependency in the file system. Classes that need to read configuration parameters will receive instances of ConfigurationInterface from where they will fetch the values. For instance, parameters related to SignalSource should look like this: ~~~~~~ SignalSource.parameter1=value1 SignalSource.parameter2=value2 ~~~~~~ The name of these parameters can be anything but one reserved word: implementation. This parameter indicates in its value the name of the class that has to be instantiated by the factory for that role. For instance, if our signal source is providing data already at baseband and thus we want to use the implementation [Pass_Through](./src/algorithms/libs/pass_through.h) for module SignalConditioner, the corresponding line in the configuration file would be ~~~~~~ SignalConditioner.implementation=Pass_Through ~~~~~~ Since the configuration is just a set of property names and values without any meaning or syntax, the system is very versatile and easily extendable. Adding new properties to the system only implies modifications in the classes that will make use of these properties. In addition, the configuration files are not checked against any strict syntax so it is always in a correct status (as long as it contains pairs of property names and values in the [INI format](http://en.wikipedia.org/wiki/INI_file)). ### GNSS block factory Hence, the application defines a simple accessor class to fetch the configuration pairs of values and passes them to a factory class called [GNSSBlockFactory](./src/core/receiver/gnss_block_factory.h). This factory decides, according to the configuration, which class needs to be instantiated and which parameters should be passed to the constructor. Hence, the factory encapsulates the complexity of blocks' instantiation. With that approach, adding a new block that requires new parameters will be as simple as adding the block class and modifying the factory to be able to instantiate it. This loose coupling between the blocks' implementations and the syntax of the configuration enables extending the application capacities in a high degree. It also allows to produce fully customized receivers, for instance a testbed for acquisition algorithms, and to place observers at any point of the receiver chain. Signal Processing plane ----------------------- GNU Radio's class ```gr::basic_block``` is the abstract base class for all signal processing blocks, a bare abstraction of an entity that has a name and a set of inputs and outputs. It is never instantiated directly; rather, this is the abstract parent class of both ```gr::hier_block2```, which is a recursive container that adds or removes processing or hierarchical blocks to the internal graph, and ```gr::block```, which is the abstract base class for all the processing blocks. ![](./docs/doxygen/images/ClassHierarchy.png) A signal processing flow is constructed by creating a tree of hierarchical blocks, which at any level may also contain terminal nodes that actually implement signal processing functions. Class ```gr::top_block``` is the top-level hierarchical block representing a flowgraph. It defines GNU Radio runtime functions used during the execution of the program: run(), start(), stop(), wait(), etc. A a subclass called [GNSSBlockInterface](./src/core/interfaces/gnss_block_interface.h) is the common interface for all the GNSS-SDR modules. It defines pure virtual methods, that are required to be implemented by a derived class. Subclassing GNSSBlockInterface, we defined interfaces for the GNSS receiver blocks depicted in the figure above. This hierarchy provides the definition of different algorithms and different implementations, which will be instantiated according to the configuration. This strategy allows multiple implementations sharing a common interface, achieving the objective of decoupling interfaces from implementations: it defines a family of algorithms, encapsulates each one, and makes them interchangeable. Hence, we let the algorithm vary independently from the program that uses it. Internally, GNSS-SDR makes use of the complex data types defined by [VOLK](http://libvolk.org/ "Vector-Optimized Library of Kernels home"). They are fundamental for handling sample streams in which samples are complex numbers with real and imaginary components of 8, 16 or 32 bits, common formats delivered by GNSS (and generic SDR) radio frequency front-ends. The following list shows the data type names that GNSS-SDR exposes through the configuration file: - **`byte`**: Signed integer, 8-bit two's complement number ranging from -128 to 127. C++ type name: `int8_t`. - **`short`**: Signed integer, 16-bit two's complement number ranging from -32768 to 32767. C++ type name: `int16_t` . - **`float`**: Defines numbers with fractional parts, can represent values ranging from approx. 1.5e-45 to 3.4e+38 with a precision of 7 digits (32 bits). C++ type name: `float`. - **`ibyte`**: Interleaved (I&Q) stream of samples of type `byte`. C++ type name: `int8_t`. - **`ishort`**: Interleaved (I&Q) stream of samples of type `short`. C++ type name: `int16_t`. - **`cbyte`**: Complex samples, with real and imaginary parts of type `byte`. C++ type name: `lv_8sc_t`. - **`cshort`**: Complex samples, with real and imaginary parts of type `short`. C++ type name: `lv_16sc_t`. - **`gr_complex`**: Complex samples, with real and imaginary parts of type `float`. C++ type name: `std::complex`. ### Signal Source The input of a software receiver are the raw bits that come out from the front-end's analog-to-digital converter (ADC). Those bits can be read from a file stored in the hard disk or directly in real-time from a hardware device through USB or Ethernet buses. The Signal Source module is in charge of implementing the hardware driver, that is, the portion of the code that communicates with the RF front-end and receives the samples coming from the ADC. This communication is usually performed through USB or Ethernet buses. Since real-time processing requires a highly optimized implementation of the whole receiver, this module also allows to read samples from a file stored in a hard disk, and thus processing without time constraints. Relevant parameters of those samples are the intermediate frequency (or baseband I&Q components), the sampling rate and number of bits per sample, that must be specified by the user in the configuration file. This module also performs bit-depth adaptation, since most of the existing RF front-ends provide samples quantized with 2 or 3 bits, while operations inside the processor are performed on 32- or 64-bit words, depending on its architecture. Although there are implementations of the most intensive computational processes (mainly correlation) that take advantage of specific data types and architectures for the sake of efficiency, the approach is processor-specific and hardly portable. We suggest to keep signal samples in standard data types and letting the compiler select the best library version (implemented using SIMD or any other processor-specific technology) of the required routines for a given processor. ***Example: FileSignalSource*** The user can configure the receiver for reading from a file, setting in the configuration file the data file location, sample format, and the sampling frequency and intermediate frequency at what the signal was originally captured. ~~~~~~ ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=File_Signal_Source SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz] SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz] ~~~~~~ Type ```gr_complex``` refers to a GNU Radio typedef equivalent to ```std::complex```. In order to save some storage space, you might wanted to store your signal in a more efficient format such as an I/Q interleaved ```short`` integer sample stream. In that case, change the corresponding line to: ~~~~~~ SignalSource.item_type=short ~~~~~~ In this latter case, you will need to convert the interleaved I/Q samples to a complex stream via Data Type Adapter block (see below). ***Example: UhdSignalSource*** The user may prefer to use a [UHD](http://code.ettus.com/redmine/ettus/projects/uhd/wiki)-compatible RF front-end and try real-time processing. For instance, for a USRP1 + DBSRX daughterboard, use: ~~~~~~ ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz] SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz] SignalSource.gain=60 ; Front-end gain in dB SignalSource.subdevice=B:0 ; UHD subdevice specification (for USRP1 use A:0 or B:0, for USRP B210 use A:0) ~~~~~~ ***Example: Configuring the USRP X300 with two front-ends for receiving signals in L1 and L2 bands*** ~~~~~~ ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=UHD_Signal_Source SignalSource.device_address=192.168.40.2 ; Put your USRP IP address here SignalSource.item_type=gr_complex SignalSource.RF_channels=2 SignalSource.sampling_frequency=4000000 SignalSource.subdevice=A:0 B:0 ;######### RF Channels specific settings ###### SignalSource.freq0=1575420000 SignalSource.gain0=50 SignalSource.samples0=0 SignalSource.dump0=false SignalSource.freq1=1227600000 SignalSource.gain1=50 SignalSource.samples1=0 SignalSource.dump1=false ~~~~~~ Other examples are available at [gnss-sdr/conf/](./conf/). ### Signal Conditioner ![](./docs/doxygen/images/SignalConditioner.png) The signal conditioner is in charge of resampling the signal and delivering a reference sample rate to the downstream processing blocks, acting as a facade between the signal source and the synchronization channels, providing a simplified interface to the input signal. In case of multiband front-ends, this module would be in charge of providing a separated data stream for each band. If your signal source is providing baseband signal samples of type ```gr_complex``` at 4 Msps, you can bypass the Signal Conditioner block by: ~~~~~~ SignalConditioner.implementation=Pass_Through ~~~~~~ If you need to adapt some aspect of you signal, you can enable the Signal Conditioner and configure three internal blocks: a data type adpater, an input signal and a resampler. ~~~~~~ ;#[Signal_Conditioner] enables this block. Then you have to configure [DataTypeAdapter], [InputFilter] and [Resampler] blocks SignalConditioner.implementation=Signal_Conditioner ~~~~~~ #### Data type adapter This block changes the type of input data samples. If your signal source delivers data samples of type ```short```, you can use this block to convert them to ```gr_complex``` like this: ~~~~~~ ;######### DATA_TYPE_ADAPTER CONFIG ############ ;#implementation: [Pass_Through] disables this block DataTypeAdapter.implementation=Ishort_To_Complex ~~~~~~ #### Input filter This blocks filters the input data. It can be combined with frequency translation for IF signals. The computation of the filter taps is based on parameters of GNU Radio's function [pm_remez](http://gnuradio.org/doc/doxygen/pm__remez_8h.html), that calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands. The block can be configured like this: ~~~~~~ ;######### INPUT_FILTER CONFIG ############ ;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter] ;#[Pass_Through] disables this block ;#[Fir_Filter] enables a FIR Filter ;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz. InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.dump=false ; #dump: Dump the filtered data to a file. InputFilter.dump_filename=../data/input_filter.dat ; #dump_filename: Log path and filename. InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 ; #number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time InputFilter.number_of_bands=2 ; #number_of_bands: Number of frequency bands in the filter. ; Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2) ; The number of band_begin and band_end elements must match the number of bands InputFilter.band1_begin=0.0 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 ;#ampl: desired amplitude at the band edges. ;#The number of ampl_begin and ampl_end elements must match the number of bands InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 ;#band_error: weighting applied to each band (usually 1). ;#The number of band_error elements must match the number of bands InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 ;#filter_type: one of "bandpass", "hilbert" or "differentiator" InputFilter.filter_type=bandpass ;#grid_density: determines how accurately the filter will be constructed. ;The minimum value is 16; higher values are slower to compute the filter. InputFilter.grid_density=16 ;#The following options are used only in Freq_Xlating_Fir_Filter implementation. ;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz InputFilter.sampling_frequency=4000000 InputFilter.IF=0 InputFilter.decimation_factor=1 ~~~~~~ #### Resampler This block resamples the input data stream. The ```Direct_Resampler``` block implements a nearest neigbourhood interpolation: ~~~~~~ ;######### RESAMPLER CONFIG ############ ;#implementation: Use [Pass_Through] or [Direct_Resampler] ;#[Pass_Through] disables this block Resampler.implementation=Direct_Resampler Resampler.dump=false ; Dumps the resampled data to a file. Resampler.dump_filename=../data/resampler.dat ; log path and filename. Resampler.item_type=gr_complex Resampler.sample_freq_in=8000000 ; sample frequency of the input signal Resampler.sample_freq_out=4000000 ; desired sample frequency of the output signal ~~~~~~ ### Channel A channel encapsulates all signal processing devoted to a single satellite. Thus, it is a large composite object which encapsulates the acquisition, tracking and navigation data decoding modules. As a composite object, it can be treated as a single entity, meaning that it can be easily replicated. Since the number of channels is selectable by the user in the configuration file, this approach helps improving the scalability and maintainability of the receiver. Each channel must be assigned to a GNSS signal, according to the following identifiers: | **Signal** | **Identifier** | |:------------------|:---------------:| | GPS L1 C/A | 1C | | GPS L2 L2C(M) | 2S | | Galileo E1B | 1B | | Galileo E5a (I+Q) | 5X | Example: Eight GPS L1 C/A channels. ~~~~~~ ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=8 ; Number of available GPS L1 C/A channels. Channels_1B.count=0 ; Number of available Galileo E1B channels. Channels.in_acquisition=1 ; Number of channels simultaneously acquiring Channel.signal=1C ; ~~~~~~ Example: Four GPS L1 C/A and four Galileo E1B channels. ~~~~~~ ;######### CHANNELS GLOBAL CONFIG ############ Channels_1C.count=4 ; Number of available GPS L1 C/A channels. Channels_1B.count=4 ; Number of available Galileo E1B channels. Channels.in_acquisition=1 ; Number of channels simultaneously acquiring Channel0.signal=1C ; Channel1.signal=1C ; Channel2.signal=1C ; Channel3.signal=1C ; Channel4.signal=1B ; Channel5.signal=1B ; Channel6.signal=1B ; Channel7.signal=1B ; ~~~~~~ This module is also in charge of managing the interplay between acquisition and tracking. Acquisition can be initialized in several ways, depending on the prior information available (called cold start when the receiver has no information about its position nor the satellites almanac; warm start when a rough location and the approximate time of day are available, and the receiver has a recently recorded almanac broadcast; or hot start when the receiver was tracking a satellite and the signal line of sight broke for a short period of time, but the ephemeris and almanac data is still valid, or this information is provided by other means), and an acquisition process can finish deciding that the satellite is not present, that longer integration is needed in order to confirm the presence of the satellite, or declaring the satellite present. In the latter case, acquisition process should stop and trigger the tracking module with coarse estimations of the synchronization parameters. The mathematical abstraction used to design this logic is known as finite state machine (FSM), that is a behavior model composed of a finite number of states, transitions between those states, and actions. For the implementation, we use the [Boost.Statechart library](http://www.boost.org/libs/statechart/doc/tutorial.html), which provides desirable features such as support for asynchronous state machines, multi-threading, type-safety, error handling and compile-time validation. The abstract class [ChannelInterface](./src/core/interfaces/channel_interface.h) represents an interface to a channel GNSS block. Check [Channel](./src/algorithms/channel/adapters/channel.h) for an actual implementation. #### Acquisition The first task of a GNSS receiver is to detect the presence or absence of in-view satellites. This is done by the acquisition system process, which also provides a coarse estimation of two signal parameters: the frequency shift with respect to the nominal IF frequency, and a delay term which allows the receiver to create a local code aligned with the incoming code. [AcquisitionInterface](./src/core/interfaces/acquisition_interface.h) is the common interface for all the acquisition algorithms and their corresponding implementations. Algorithms' interface, that may vary depending on the use of information external to the receiver, such as in Assisted GNSS, is defined in classes referred to as *adapters*. These adapters wrap the GNU Radio blocks interface into a compatible interface expected by AcquisitionInterface. This allows the use of existing GNU Radio blocks derived from ```gr::block```, and ensures that newly developed implementations will also be reusable in other GNU Radio-based applications. Moreover, it adds still another layer of abstraction, since each given acquisition algorithm can have different implementations (for instance using different numerical libraries). In such a way, implementations can be continuously improved without having any impact neither on the algorithm interface nor the general acquisition interface. Check [GpsL1CaPcpsAcquisition](./src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.h) and [GalileoE1PcpsAmbiguousAcquisition](./src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.h) for examples of adapters from a Parallel Code Phase Search (PCPS) acquisition block, and [pcps_acquisition_cc](./src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.h) for an example of a block implementation. The source code of all the available acquisition algorithms is located at: ~~~~~~ |-gnss-sdr |---src |-----algorithms |-------acquisition |---------adapters <- Adapters of the processing blocks to an AcquisitionInterface |---------gnuradio_blocks <- Signal processing blocks implementation ~~~~~~ The user can select a given implementation for the algorithm to be used in each receiver channel, as well as their parameters, in the configuration file: ~~~~~~ ;######### ACQUISITION GLOBAL CONFIG ############ Acquisition_1C.dump=false ; Enables internal data file logging [true] or [false] Acquisition_1C.dump_filename=./acq_dump.dat ; Log path and filename Acquisition_1C.item_type=gr_complex Acquisition_1C.if=0 ; Signal intermediate frequency in [Hz] Acquisition_1C.sampled_ms=1 ; Signal block duration for the acquisition signal detection [ms] Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition ; Acquisition algorithm selection for this channel Acquisition_1C.threshold=0.005 ; Acquisition threshold Acquisition_1C.pfa=0.0001 ; Acquisition false alarm probability. This option overrides the threshold option. ; Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition] Acquisition_1C.doppler_max=10000 ; Maximum expected Doppler shift [Hz] Acquisition_1C.doppler_step=500 ; Doppler step in the grid search [Hz] ~~~~~~ #### Tracking When a satellite is declared present, the parameters estimated by the acquisition module are then fed to the receiver tracking module, which represents the second stage of the signal processing unit, aiming to perform a local search for accurate estimates of code delay and carrier phase, and following their eventual variations. Again, a class hierarchy consisting of a [TrackingInterface](./src/core/interfaces/tracking_interface.h) class and subclasses implementing algorithms provides a way of testing different approaches, with full access to their parameters. Check [GpsL1CaDllPllTracking](./src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.h) or [GalileoE1DllPllVemlTracking](./src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.h) for examples of adapters, and [Gps_L1_Ca_Dll_Pll_Tracking_cc](./src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h) for an example of a signal processing block implementation. There are also available some useful classes and functions for signal tracking; take a look at [correlator.h](./src/algorithms/tracking/libs/correlator.h), [lock_detectors.h](./src/algorithms/tracking/libs/lock_detectors.h), [tracking_discriminators.h](./src/algorithms/tracking/libs/tracking_discriminators.h) or [tracking_2nd_DLL_filter.h](./src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h). The source code of all the available tracking algorithms is located at: ~~~~~~ |-gnss-sdr |---src |-----algorithms |-------tracking |---------adapters <- Adapters of the processing blocks to a TrackingInterface |---------gnuradio_blocks <- Signal processing blocks implementation |---------libs <- libraries of tracking objects (e.g. correlators, discriminators, and so on) ~~~~~~ The user can select a given implementation for the algorithm to be used in all the tracking blocks, as well as its parameters, in the configuration file: ~~~~~~ ;######### TRACKING GLOBAL CONFIG ############ Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking Tracking_1C.item_type=gr_complex Tracking_1C.if=0 ; Signal Intermediate Frequency in [Hz] Tracking_1C.dump=false ; Enable internal binary data file logging [true] or [false] Tracking_1C.dump_filename=./tracking_ch_ ; Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number. Tracking_1C.pll_bw_hz=50.0 ; PLL loop filter bandwidth [Hz] Tracking_1C.dll_bw_hz=2.0 ; DLL loop filter bandwidth [Hz] Tracking_1C.order=3 ; PLL/DLL loop filter order [2] or [3] Tracking_1C.early_late_space_chips=0.5 ; correlator early-late space [chips]. ~~~~~~ #### Decoding of the navigation message Most of GNSS signal links are modulated by a navigation message containing the time the message was transmitted, orbital parameters of satellites (also known as ephemeris) and an almanac (information about the general system health, rough orbits of all satellites in the network as well as data related to error correction). Navigation data bits are structured in words, pages, subframes, frames and superframes. Sometimes, bits corresponding to a single parameter are spread over different words, and values extracted from different frames are required for proper decoding. Some words are for synchronization purposes, others for error control an others contain actual information. There are also error control mechanisms, from parity checks to forward error correction (FEC) encoding and interleaving, depending on the system. All this decoding complexity is managed by a finite state machine implemented with the [Boost.Statechart library](http://www.boost.org/libs/statechart/doc/tutorial.html). The common interface is [TelemetryDecoderInterface](./src/core/interfaces/telemetry_decoder_interface.h). Check [GpsL1CaTelemetryDecoder](./src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.h) for an example of the GPS L1 NAV message decoding adapter, and [gps_l1_ca_telemetry_decoder_cc](./src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h) for an actual implementation of a signal processing block. Configuration example: ~~~~~~ ;######### TELEMETRY DECODER CONFIG ############ TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1C.dump=false ~~~~~~ #### Observables GNSS systems provide different kinds of observations. The most commonly used are the code observations, also called pseudoranges. The *pseudo* comes from the fact that on the receiver side the clock error is unknown and thus the measurement is not a pure range observation. High accuracy applications also use the carrier phase observations, which are based on measuring the difference between the carrier phase transmitted by the GNSS satellites and the phase of the carrier generated in the receiver. Both observables are computed from the outputs of the tracking module and the decoding of the navigation message. This module collects all the data provided by every tracked channel, aligns all received data into a coherent set, and computes the observables. The common interface is [ObservablesInterface](./src/core/interfaces/observables_interface.h). Configuration example: ~~~~~~ ;######### OBSERVABLES CONFIG ############ Observables.implementation=GPS_L1_CA_Observables Observables.dump=false Observables.dump_filename=./observables.dat ~~~~~~ #### Computation of Position, Velocity and Time Although data processing for obtaining high-accuracy PVT solutions is out of the scope of GNSS-SDR, we provide a module that can compute a simple least square solution and leaves room for more sophisticated positioning methods. The integration with libraries and software tools that are able to deal with multi-constellation data such as [GPSTk](http://www.gpstk.org), [RTKLIB](http://www.rtklib.com/) or [gLAB](http://gage14.upc.es/gLAB/) appear as viable solutions for high performance, completely customizable GNSS receivers. The common interface is [PvtInterface](./src/core/interfaces/pvt_interface.h). For instance, in order to use the implementation GpsL1CaPvt, add to the configuration file: ~~~~~~ ;######### PVT CONFIG ############ PVT.implementation=GPS_L1_CA_PVT PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea ; NMEA log path and filename PVT.flag_nmea_tty_port=true ; Enable the NMEA log to a serial TTY port PVT.nmea_dump_devname=/dev/pts/4 ; serial device descriptor for NMEA logging PVT.dump=false ; Enables the PVT internal binary data file logging [true] or [false] ~~~~~~ This implementation allows tuning of the following parameters: ~~~~~~ PVT.averaging_depth=10 ; Number of PVT observations in the moving average algorithm PVT.flag_averaging=true ; Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false] PVT.output_rate_ms=100 ; Period in [ms] between two PVT outputs PVT.display_rate_ms=500 ; Position console print (std::out) interval [ms]. PVT.dump=false ; Enable or disable the PVT internal binary data file logging [true] or [false] PVT.dump_filename=./PVT ; Log path and filename without extension. ~~~~~~ #### Output filter Implements a sink for the signal stream. ~~~~~~ ;######### OUTPUT_FILTER CONFIG ############ OutputFilter.implementation=Null_Sink_Output_Filter OutputFilter.filename=data/gnss-sdr.dat OutputFilter.item_type=gr_complex ~~~~~~ About the software license ========================== GNSS-SDR is released under the [General Public License (GPL) v3](http://www.gnu.org/licenses/gpl.html), thus securing practical usability, inspection, and continuous improvement by the research community, allowing the discussion based on tangible code and the analysis of results obtained with real signals. The GPL implies that: 1. Copies may be distributed free of charge or for money, but the source code has to be shipped or provided free of charge (or at cost price) on demand. The receiver of the source code has the same rights meaning he can share copies free of charge or resell. 2. The licensed material may be analyzed or modified. 3. Modified material may be distributed under the same licensing terms but *do not* have to be distributed. That means that modifications only have to be made available to the public if distribution happens. So it is perfectly fine to take the GNSS-SDR source code, modify it heavily and use it in a not distributed application / library. This is how companies like Google can run their own patched versions of Linux for example. But what this also means is that non-GPL code cannot use GPL code. This means that you cannot modify / use GNSS-SDR, blend it with non-GPL code, and make money with the resulting software. You cannot distribute the resulting software under a non-disclosure agreement or contract. Distributors under the GPL also grant a license for any of their patents practiced by the software, to practice those patents in GPL software. You can sell a device that runs with GNSS-SDR, but if you distribute the code, it has to remain under GPL. Publications and Credits ======================== If you use GNSS-SDR to produce a research paper or Thesis, we would appreciate if you reference any of these articles to credit the GNSS-SDR project: * J. Arribas, M. Branzanti, C. Fernández-Prades, P. Closas, [Fastening GPS and Galileo Tight with a Software Receiver](http://www.cttc.es/publication/fastening-gps-and-galileo-tight-with-a-software-receiver/), in Proc. of the ION GNSS+ 2014 Conference, Tampa, Florida, Sept. 2014. * J. Arribas, P. Closas, C. Fernández-Prades, [Interference Mitigation in GNSS Receivers by Array Signal Processing: A Software Radio Approach](http://www.cttc.es/publication/interference-mitigation-in-gnss-receivers-by-array-signal-processing-a-software-radio-approach/), in Proc. of the 8th IEEE Sensor Array and Multichannel Signal Processing Workshop, A Coruña, Spain, June 2014. * C. Fernández-Prades, J. Arribas, P. Closas, [Turning a Television into a GNSS Receiver](http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/), in Proc. of the ION GNSS+ 2013 Conference, Nashville, Tennessee, Sept. 2013. * C. Fernández-Prades, J. Arribas, L. Esteve, D. Pubill, P. Closas, [An Open Source Galileo E1 Software Receiver](http://www.cttc.es/publication/an-open-source-galileo-e1-software-receiver/), in Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC 2012), ESTEC, Noordwijk, The Netherlands, Dec. 2012. * J. Arribas, [GNSS Array-based Acquisition: Theory and Implementation](http://theses.eurasip.org/theses/449/gnss-array-based-acquisition-theory-and/), PhD Thesis, Universitat Politècnica de Catalunya, Barcelona, Spain, June 2012. * C. Fernández-Prades, J. Arribas, P. Closas, C. Avilés, and L. Esteve, [GNSS-SDR: an open source tool for researchers and developers](http://www.cttc.es/publication/gnss-sdr-an-open-source-tool-for-researchers-and-developers/), in Proc. of the ION GNSS 2011 Conference, Portland, Oregon, Sept. 19-23, 2011. * C. Fernández-Prades, C. Avilés, L. Esteve, J. Arribas, and P. Closas, [Design patterns for GNSS software receivers](http://www.cttc.es/publication/design-patterns-for-gnss-software-receivers/), in Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010), ESTEC, Noordwijk, The Netherlands, Dec. 2010. DOI:10.1109/NAVITEC.2010.5707981 For LaTeX users, these are the BibTeX cites for your convenience: ~~~~~~ @INPROCEEDINGS{GNSS-SDR14b, AUTHOR = {J.~Arribas and M.~Branzanti and C.~{Fern\'{a}ndez--Prades} and P.~Closas}, TITLE = {Fastening {GPS} and {G}alileo Tight with a Software Receiver}, BOOKTITLE = {Proc. of the ION GNSS+ 2014 Conference}, YEAR = {2014}, address = {Tampa, Florida}, month = {Sept.} } ~~~~~~ ~~~~~~ @INPROCEEDINGS{GNSS-SDR14a, AUTHOR = {J.~Arribas and P.~Closas and C.~{Fern\'{a}ndez--Prades}}, TITLE = {Interference Mitigation in {GNSS} Receivers by Array Signal Processing: {A} Software Radio Approach}, BOOKTITLE = {Proc. of the 8th IEEE Sensor Array and Multichannel Signal Processing Workshop}, YEAR = {2014}, address = {A Coru\~{n}a, Spain}, month = {June} } ~~~~~~ ~~~~~~ @INPROCEEDINGS{GNSS-SDR13, AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas}, TITLE = {Turning a Television into a {GNSS} Receiver}, BOOKTITLE = {Proc. of the ION GNSS+ 2013 Conference}, YEAR = {2013}, address = {Nashville, Tennessee}, month = {Sept.} } ~~~~~~ ~~~~~~ @INPROCEEDINGS{GNSS-SDR12 author = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and L.~Esteve and D.~Pubill and P.~Closas}, title = {An Open Source {G}alileo {E1} Software Receiver}, booktitle = {Proc. of the 6th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2012)}, year = {2012}, address = {ESTEC, Noordwijk, The Netherlands}, month = {Dec.} } ~~~~~~ ~~~~~~ @PHDTHESIS{Arribas12, author = {J.~Arribas}, title = {{GNSS} Array-based Acquisition: Theory and Implementation}, school = {Universitat Polit\`{e}cnica de Catalunya}, year = {2012}, address = {Barcelona, Spain}, month = {June} } ~~~~~~ ~~~~~~ @INPROCEEDINGS{GNSS-SDR11, AUTHOR = {C.~{Fern\'{a}ndez--Prades} and J.~Arribas and P.~Closas and C.~Avil\'{e}s and L.~Esteve}, TITLE = {{GNSS-SDR}: An Open Source Tool For Researchers and Developers}, BOOKTITLE = {Proc. of the ION GNSS 2011 Conference}, YEAR = {2011}, address = {Portland, Oregon}, month = {Sept.} } ~~~~~~ ~~~~~~ @INPROCEEDINGS{GNSS-SDR10, AUTHOR = {C.~{Fern\'{a}ndez--Prades} and C.~Avil\'{e}s and L.~Esteve and J.~Arribas and P.~Closas}, TITLE = {Design patterns for {GNSS} software receivers}, BOOKTITLE = {Proc. of the 5th ESA Workshop on Satellite Navigation Technologies (NAVITEC'2010)}, YEAR = {2010}, address = {ESTEC, Noordwijk, The Netherlands}, month = {Dec.}, note = {DOI:10.1109/NAVITEC.2010.5707981} } ~~~~~~ Ok, now what? ============= In order to start using GNSS-SDR, you may want to populate ```gnss-sdr/data``` folder (or anywhere else on your system) with raw data files. By "raw data" we mean the output of a Radio Frequency front-end's Analog-to-Digital converter. GNSS-SDR needs signal samples already in baseband or in passband, at a suitable intemediate frequency (on the order of MHz). Prepare your configuration file, and then you are ready for running ```gnss-sdr --config_file=your_configuration.conf```, and seeing how the file is processed. Another interesting option is working in real-time with a RF front-end. We provide drivers for UHD-compatible hardware such as the [USRP family](http://www.ettus.com/product), for OsmoSDR and other front-ends (HackRF, bladeRF), for the GN3S v2 USB dongle and for some DVB-T USB dongles. Start with a low number of channels and then increase it in order to test how many channels your processor can handle in real-time. You can find more information at the [GNSS-SDR Documentation page](http://gnss-sdr.org/documents) or directly asking to the [GNSS-SDR Developers mailing list](http://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers). You are also very welcome to contribute to the project, there are many ways to [participate in GNSS-SDR](http://gnss-sdr.org/participate). If you need some special feature not yet implemented, the Developer Team would love to be hired for developing it. Please do not hesitate to [contact them](http://gnss-sdr.org/contact-us). **Enjoy GNSS-SDR!** The Developer Team. gnss-sdr-0.0.6/data/0000755000175000017500000000000012576764164013514 5ustar carlescarlesgnss-sdr-0.0.6/data/.gitignore0000644000175000017500000000010612576764164015501 0ustar carlescarles# Ignore everything in this directory * # Except this file !.gitignoregnss-sdr-0.0.6/AUTHORS0000644000175000017500000000462412576764163013660 0ustar carlescarlesGNSS-SDR Authorship ------------------------------------------------------------------------------ The GNSS-SDR project is hosted and sponsored by the Centre Tecnologic de Telecomunicacions de Catalunya (CTTC), a non-profit research foundation located in Castelldefels (40.396764 N, 3.713379 E), 20 km south of Barcelona, Spain. GNSS-SDR is the by-product of GNSS research conducted at the Communications Systems Division of CTTC, and it is the combined effort of students, software engineers and researchers from different institutions around the World. Contact Information ------------------------------------------------------------------------------ GNSS-SDR Homepage ---------------------------- http://gnss-sdr.org CTTC Homepage ---------------------------- http://www.cttc.cat Mailing Lists ---------------------------- gnss-sdr-developers@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/gnss-sdr-developers Email ---------------------------- Inquiries beyond the mailing list can be sent to carles.fernandez@cttc.cat List of authors ------------------------------------------------------------------------------ Carles Fernandez-Prades carles.fernandez@cttc.cat Project manager Javier Arribas javier.arribas@cttc.cat Developer Luis Esteve Elfau luis@epsilon-formacion.com Developer Pau Closas pau.closas@cttc.cat Consultant Carlos Aviles carlos.avilesr@googlemail.com Developer David Pubill david.pubill@cttc.cat Developer Mara Branzanti mara.branzanti@gmail.com Developer Marc Molina marc.molina.pena@gmail.com Developer Daniel Fehr daniel.co@bluewin.ch Developer Marc Sales marcsales92@gmail.com Developer Damian Miralles dmiralles2009@gmail.com Developer Andres Cecilia Luque a.cecilia.luque@gmail.com Developer Leonardo Tonetto tonetto.dev@gmail.com Contributor Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor Fran Fabra fabra@ice.csic.es Contributor Ignacio Paniego ignacio.paniego@gmail.com Web design Eva Puchol eva.puchol@gmail.com Web developer Carlos Paniego carpanie@hotmail.com Artwork gnss-sdr-0.0.6/install/0000755000175000017500000000000012577077301014240 5ustar carlescarlesgnss-sdr-0.0.6/install/.gitignore0000644000175000017500000000010612576764164016236 0ustar carlescarles# Ignore everything in this directory * # Except this file !.gitignoregnss-sdr-0.0.6/src/0000755000175000017500000000000012576764164013372 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/0000755000175000017500000000000012576764164014534 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/gnss_block/0000755000175000017500000000000012576764164016660 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc0000644000175000017500000005322412576764164031266 0ustar carlescarles/*! * \file galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GalileoE1PcpsAmbiguousAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_synchro.h" #include "galileo_e1_pcps_ambiguous_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" class GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test: public ::testing::Test { protected: GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test() { factory = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test() { } void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0; float max_delay_error_chips = 0; unsigned int num_of_realizations = 0; unsigned int realization_counter = 0; unsigned int detection_counter = 0; unsigned int correct_estimation_counter = 0; unsigned int acquired_samples = 0; unsigned int mean_acq_time_us = 0; double mse_doppler = 0.0; double mse_delay = 0.0; double Pd = 0.0; double Pfa_p = 0.0; double Pfa_a = 0.0; }; void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.bit_transition_flag","false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.bit_transition_flag","false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition.pfa", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::wait_message, this); } void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec*1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec*1e6 + tv.tv_usec; mean_acq_time_us += (end - begin); process_message(); } } void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= (double)num_of_realizations; mse_doppler /= (double)num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= (double)num_of_realizations; stop_queue(); top_block->stop(); } } void GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, Instantiate) { config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec*1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec*1e6 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc0000644000175000017500000005111712576764164030401 0ustar carlescarles/*! * \file gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GpsL1CaPcpsOpenClAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "configuration_interface.h" #include "gnss_synchro.h" #include "gps_l1_ca_pcps_opencl_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" class GpsL1CaPcpsOpenClAcquisitionGSoC2013Test: public ::testing::Test { protected: GpsL1CaPcpsOpenClAcquisitionGSoC2013Test() { queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); init(); } ~GpsL1CaPcpsOpenClAcquisitionGSoC2013Test() {} void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0; float max_delay_error_chips = 0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; double Pfa_p; double Pfa_a; }; void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_OpenCl_Acquisition"); config->set_property("Acquisition.threshold", "0.8"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 10; // Change here the number of realizations config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "G"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "G"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "G"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_OpenCl_Acquisition"); config->set_property("Acquisition.pfa", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::wait_message, this); } void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; mean_acq_time_us += (end-begin); process_message(); } } void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples- 5 )*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); std::cout << std::endl; } } void GpsL1CaPcpsOpenClAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GpsL1CaPcpsOpenClAcquisitionGSoC2013Test, Instantiate) { config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); } TEST_F(GpsL1CaPcpsOpenClAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1e6 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GpsL1CaPcpsOpenClAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } } } TEST_F(GpsL1CaPcpsOpenClAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } } } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc0000644000175000017500000005266512576764164027052 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GpsL1CaPcpsAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "configuration_interface.h" #include "gnss_synchro.h" #include "gps_l1_ca_pcps_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" #include "boost/shared_ptr.hpp" #include "pass_through.h" class GpsL1CaPcpsAcquisitionGSoC2013Test: public ::testing::Test { protected: GpsL1CaPcpsAcquisitionGSoC2013Test() { item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); acquisition = 0; init(); } ~GpsL1CaPcpsAcquisitionGSoC2013Test() { } void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; GpsL1CaPcpsAcquisition *acquisition; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0.0; float max_delay_error_chips = 0.0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; double Pfa_p; double Pfa_a; }; void GpsL1CaPcpsAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GpsL1CaPcpsAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition.threshold", "0.8"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "G"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "G"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "G"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition.pfa", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GpsL1CaPcpsAcquisitionGSoC2013Test::wait_message, this); } void GpsL1CaPcpsAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; mean_acq_time_us += (end-begin); process_message(); } } void GpsL1CaPcpsAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter - correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); } } void GpsL1CaPcpsAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, Instantiate) { config_1(); acquisition = new GpsL1CaPcpsAcquisition(config.get(), "Acquisition", 1, 1, queue); delete acquisition; } TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); config_1(); acquisition = new GpsL1CaPcpsAcquisition(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; }) << "Failure running the top_block."<< std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; delete acquisition; } TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); acquisition = new GpsL1CaPcpsAcquisition(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(10000); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(500); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(0.5); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); acquisition->set_state(1); // Ensure that acquisition starts at the first sample start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block."<< std::endl; if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int) 1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } #ifdef OLD_BOOST ASSERT_NO_THROW( { ch_thread.timed_join(boost::posix_time::seconds(1)); }) << "Failure while waiting the queue to stop" << std::endl; #endif #ifndef OLD_BOOST ASSERT_NO_THROW( { ch_thread.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); }) << "Failure while waiting the queue to stop" << std::endl; #endif } delete acquisition; } TEST_F(GpsL1CaPcpsAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); acquisition = new GpsL1CaPcpsAcquisition(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block."<< std::endl; if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } #ifdef OLD_BOOST ASSERT_NO_THROW( { ch_thread.timed_join(boost::posix_time::seconds(1)); }) << "Failure while waiting the queue to stop" << std::endl; #endif #ifndef OLD_BOOST ASSERT_NO_THROW( { ch_thread.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); }) << "Failure while waiting the queue to stop" << std::endl; #endif } delete acquisition; } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l2_m_dll_pll_tracking_test.cc0000644000175000017500000001353712576764164025325 0ustar carlescarles/*! * \file gps_l2_m_dll_pll_tracking_test.cc * \brief This class implements a tracking test for Galileo_E5a_DLL_PLL_Tracking * implementation based on some input parameters. * \author Javier Arribas, 2015. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "tracking_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "gps_l2_m_dll_pll_tracking.h" class GpsL2MDllPllTrackingTest: public ::testing::Test { protected: GpsL2MDllPllTrackingTest() { factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GpsL2MDllPllTrackingTest() {} void init(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; }; void GpsL2MDllPllTrackingTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "2S"; signal.copy(gnss_synchro.Signal, 2, 0); gnss_synchro.PRN = 7; config->set_property("GNSS-SDR.internal_fs_hz", "5000000"); config->set_property("Tracking_2S.item_type", "gr_complex"); config->set_property("Tracking_2S.dump", "true"); config->set_property("Tracking_2S.dump_filename", "../data/L2m_tracking_ch_"); config->set_property("Tracking_2S.implementation", "GPS_L2_M_DLL_PLL_Tracking"); config->set_property("Tracking_2S.early_late_space_chips", "0.5"); config->set_property("Tracking_2S.order", "2"); config->set_property("Tracking_2S.pll_bw_hz", "2"); config->set_property("Tracking_2S.dll_bw_hz", "0.5"); } TEST_F(GpsL2MDllPllTrackingTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; int fs_in = 5000000; int nsamples = fs_in*9; init(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Tracking test"); std::shared_ptr tracking = std::make_shared(config.get(), "Tracking_2S", 1, 1, queue); //REAL gnss_synchro.Acq_delay_samples = 1; gnss_synchro.Acq_doppler_hz = 1200;//1200; gnss_synchro.Acq_samplestamp_samples = 0; ASSERT_NO_THROW( { tracking->set_channel(gnss_synchro.Channel_ID); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { tracking->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { tracking->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { tracking->connect(top_block); }) << "Failure connecting tracking to the top_block." << std::endl; ASSERT_NO_THROW( { //gr::analog::sig_source_c::sptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); std::string path = std::string(TEST_PATH); //std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; //std::string file = "/datalogger/signals/Fraunhofer/L125_III1b_210s_L2_resampled.bin"; std::string file = path + "/data/gps_l2c_m_prn7_5msps.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(Gnss_Synchro)); top_block->connect(file_source, 0, valve, 0); top_block->connect(valve, 0, tracking->get_left_block(), 0); top_block->connect(tracking->get_right_block(), 0, sink, 0); }) << "Failure connecting the blocks of tracking test." << std::endl; tracking->start_tracking(); EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Tracked " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_ambiguous_acquisition_test.cc0000644000175000017500000002234012576764164027740 0ustar carlescarles/*! * \file galileo_e1_pcps_ambiguous_acquisition_test.cc * \brief This class implements an acquisition test for * GalileoE1PcpsAmbiguousAcquisition class based on some input parameters. * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_signal.h" #include "gnss_synchro.h" #include "galileo_e1_pcps_ambiguous_acquisition.h" class GalileoE1PcpsAmbiguousAcquisitionTest: public ::testing::Test { protected: GalileoE1PcpsAmbiguousAcquisitionTest() { factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GalileoE1PcpsAmbiguousAcquisitionTest() {} void init(); void start_queue(); void wait_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; }; void GalileoE1PcpsAmbiguousAcquisitionTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); gnss_synchro.PRN = 1; config->set_property("GNSS-SDR.internal_fs_hz", "4000000"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", "4"); config->set_property("Acquisition.dump", "false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.0001"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.repeat_satellite", "false"); config->set_property("Acquisition1.cboc", "true"); } void GalileoE1PcpsAmbiguousAcquisitionTest::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE1PcpsAmbiguousAcquisitionTest::wait_message, this); } void GalileoE1PcpsAmbiguousAcquisitionTest::wait_message() { while (!stop) { channel_internal_queue.wait_and_pop(message); stop_queue(); } } void GalileoE1PcpsAmbiguousAcquisitionTest::stop_queue() { stop = true; } TEST_F(GalileoE1PcpsAmbiguousAcquisitionTest, Instantiate) { init(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); } TEST_F(GalileoE1PcpsAmbiguousAcquisitionTest, ConnectAndRun) { int fs_in = 4000000; int nsamples = 4*fs_in; struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); init(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec*1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec*1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(GalileoE1PcpsAmbiguousAcquisitionTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; double expected_delay_samples = 2920; //18250; double expected_doppler_hz = -632; init(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(gnss_synchro.Channel_ID); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 1e-9)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 250)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; ASSERT_NO_THROW( { std::string path = std::string(TEST_PATH); std::string file = path + "signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); top_block->connect(file_source, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; ASSERT_NO_THROW( { start_queue(); }) << "Failure while starting the queue" << std::endl; acquisition->init(); acquisition->reset(); acquisition->set_state(1); EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; stop_queue(); unsigned long int nsamples = gnss_synchro.Acq_samplestamp_samples; std::cout << "Acquired " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; std::cout << "Delay: " << gnss_synchro.Acq_delay_samples << std::endl; std::cout << "Doppler: " << gnss_synchro.Acq_doppler_hz << std::endl; double delay_error_samples = std::abs(expected_delay_samples - gnss_synchro.Acq_delay_samples); float delay_error_chips = (float)(delay_error_samples * 1023 / 4000000); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); EXPECT_LE(doppler_error_hz, 166) << "Doppler error exceeds the expected value: 166 Hz = 2/(3*integration period)"; EXPECT_LT(delay_error_chips, 0.175) << "Delay error exceeds the expected value: 0.175 chips"; ch_thread.join(); } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc0000644000175000017500000005415312576764164032317 0ustar carlescarles/*! * \file galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GalileoE1PcpsTongAmbiguousAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "configuration_interface.h" #include "gnss_synchro.h" #include "galileo_e1_pcps_tong_ambiguous_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" class GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test: public ::testing::Test { protected: GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test() { factory = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); init(); } ~GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test() { } void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0; float max_delay_error_chips = 0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; double Pfa_p; double Pfa_a; }; void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1B"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition_Galileo.item_type", "gr_complex"); config->set_property("Acquisition_Galileo.if", "0"); config->set_property("Acquisition_Galileo.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_Galileo.tong_init_val", "1"); config->set_property("Acquisition_Galileo.tong_max_val", "8"); config->set_property("Acquisition_Galileo.implementation", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition"); config->set_property("Acquisition_Galileo.threshold", "0.3"); config->set_property("Acquisition_Galileo.doppler_max", "10000"); config->set_property("Acquisition_Galileo.doppler_step", "250"); config->set_property("Acquisition_Galileo.dump", "false"); } void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1B"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "50"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition_Galileo.item_type", "gr_complex"); config->set_property("Acquisition_Galileo.if", "0"); config->set_property("Acquisition_Galileo.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_Galileo.tong_init_val", "1"); config->set_property("Acquisition_Galileo.tong_max_val", "8"); config->set_property("Acquisition_Galileo.implementation", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition"); config->set_property("Acquisition_Galileo.threshold", "0.00028"); // Pfa,a = 0.1 config->set_property("Acquisition_Galileo.doppler_max", "10000"); config->set_property("Acquisition_Galileo.doppler_step", "250"); config->set_property("Acquisition_Galileo.dump", "false"); } void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::wait_message, this); } void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; mean_acq_time_us += (end - begin); process_message(); } } void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); std::cout << std::endl; } } void GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, Instantiate) { config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); } TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1e6 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(5000); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(100); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(0.01); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->reset(); acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->reset(); acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } //std::cout << "Delay: " << gnss_synchro.Acq_delay_samples << std::endl; //std::cout << "Doppler: " << gnss_synchro.Acq_doppler_hz << std::endl; ch_thread.join(); } } TEST_F(GalileoE1PcpsTongAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.00028)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc0000644000175000017500000005501112576764164032051 0ustar carlescarles/*! * \file galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GalileoE1Pcps8msAmbiguousAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_synchro.h" #include "galileo_e1_pcps_8ms_ambiguous_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" class GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test: public ::testing::Test { protected: GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test() { item_size = sizeof(gr_complex); stop = false; message = 0; factory = std::make_shared(); gnss_synchro = Gnss_Synchro(); init(); } ~GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test() {} void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0; float max_delay_error_chips = 0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; double Pfa_p; double Pfa_a; }; void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 8; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.2"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 8; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition"); config->set_property("Acquisition.pfa", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::wait_message, this); } void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; try { channel_internal_queue.wait_and_pop(message); } catch( boost::exception & e ) { DLOG(FATAL) << "Boost exception: " << boost::diagnostic_information(e); } gettimeofday(&tv, NULL); end = tv.tv_sec*1e6 + tv.tv_usec; mean_acq_time_us += (end - begin); process_message(); } } void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); } } void GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, Instantiate) { config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 1, queue); } TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; config_1(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; }) << "Failure running he top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); //acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } } TEST_F(GalileoE1Pcps8msAmbiguousAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); //acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_dll_pll_veml_tracking_test.cc0000644000175000017500000002115012576764164026635 0ustar carlescarles/*! * \file galileo_e1_dll_pll_veml_tracking_test.cc * \brief This class implements a tracking test for GalileoE1DllPllVemlTracking * class based on some input parameters. * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "galileo_e1_dll_pll_veml_tracking.h" class GalileoE1DllPllVemlTrackingInternalTest: public ::testing::Test { protected: GalileoE1DllPllVemlTrackingInternalTest() { factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GalileoE1DllPllVemlTrackingInternalTest() {} void init(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; }; void GalileoE1DllPllVemlTrackingInternalTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1B"; signal.copy(gnss_synchro.Signal, 2, 0); gnss_synchro.PRN = 11; config->set_property("GNSS-SDR.internal_fs_hz", "8000000"); config->set_property("Tracking_Galileo.item_type", "gr_complex"); config->set_property("Tracking_Galileo.dump", "true"); config->set_property("Tracking_Galileo.dump_filename", "../data/veml_tracking_ch_"); config->set_property("Tracking_Galileo.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_Galileo.early_late_space_chips", "0.15"); config->set_property("Tracking_Galileo.very_early_late_space_chips", "0.6"); config->set_property("Tracking_Galileo.pll_bw_hz", "30.0"); config->set_property("Tracking_Galileo.dll_bw_hz", "2.0"); } TEST_F(GalileoE1DllPllVemlTrackingInternalTest, Instantiate) { init(); auto tracking = factory->GetBlock(config, "Tracking", "Galileo_E1_DLL_PLL_VEML_Tracking", 1, 1, queue); EXPECT_STREQ("Galileo_E1_DLL_PLL_VEML_Tracking", tracking->implementation().c_str()); } TEST_F(GalileoE1DllPllVemlTrackingInternalTest, ConnectAndRun) { int fs_in = 8000000; int nsamples = 40000000; struct timeval tv; long long int begin = 0; long long int end = 0; init(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Tracking test"); // Example using smart pointers and the block factory std::shared_ptr trk_ = factory->GetBlock(config, "Tracking", "Galileo_E1_DLL_PLL_VEML_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); ASSERT_NO_THROW( { tracking->set_channel(gnss_synchro.Channel_ID); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { tracking->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { tracking->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { tracking->connect(top_block); gr::analog::sig_source_c::sptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(Gnss_Synchro)); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, tracking->get_left_block(), 0); top_block->connect(tracking->get_right_block(), 0, sink, 0); }) << "Failure connecting the blocks of tracking test." << std::endl; tracking->start_tracking(); EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1000000 + tv.tv_usec; top_block->run(); //Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GalileoE1DllPllVemlTrackingInternalTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; // int num_samples = 40000000; // 4 Msps // unsigned int skiphead_sps = 24000000; // 4 Msps int num_samples = 80000000; // 8 Msps unsigned int skiphead_sps = 8000000; // 8 Msps init(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Tracking test"); // Example using smart pointers and the block factory std::shared_ptr trk_ = factory->GetBlock(config, "Tracking", "Galileo_E1_DLL_PLL_VEML_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); // gnss_synchro.Acq_delay_samples = 1753; // 4 Msps // gnss_synchro.Acq_doppler_hz = -9500; // 4 Msps gnss_synchro.Acq_delay_samples = 17256; // 8 Msps gnss_synchro.Acq_doppler_hz = -8750; // 8 Msps gnss_synchro.Acq_samplestamp_samples = 0; ASSERT_NO_THROW( { tracking->set_channel(gnss_synchro.Channel_ID); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { tracking->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { tracking->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { tracking->connect(top_block); }) << "Failure connecting tracking to the top_block." << std::endl; ASSERT_NO_THROW( { std::string path = std::string(TEST_PATH); std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex),file_name,false); gr::blocks::skiphead::sptr skip_head = gr::blocks::skiphead::make(sizeof(gr_complex), skiphead_sps); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), num_samples, queue); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(Gnss_Synchro)); top_block->connect(file_source, 0, skip_head, 0); top_block->connect(skip_head, 0, valve, 0); top_block->connect(valve, 0, tracking->get_left_block(), 0); top_block->connect(tracking->get_right_block(), 0, sink, 0); }) << "Failure connecting the blocks of tracking test." << std::endl; tracking->start_tracking(); EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Tracked " << num_samples << " samples in " << (end - begin) << " microseconds" << std::endl; } gnss-sdr-0.0.6/src/tests/gnss_block/file_signal_source_test.cc0000644000175000017500000000550012576764164024062 0ustar carlescarles/*! * \file file_signal_source_test.cc * \brief This class implements a Unit Test for the class FileSignalSource. * \author Carlos Avilés, 2010. carlos.avilesr(at)googlemail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include "file_signal_source.h" #include "in_memory_configuration.h" TEST(FileSignalSource, Instantiate) { boost::shared_ptr queue = gr::msg_queue::make(0); std::shared_ptr config = std::make_shared(); config->set_property("Test.samples", "0"); config->set_property("Test.sampling_frequency", "0"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; config->set_property("Test.filename", filename); config->set_property("Test.item_type", "gr_complex"); config->set_property("Test.repeat", "false"); std::unique_ptr signal_source(new FileSignalSource(config.get(), "Test", 1, 1, queue)); EXPECT_STREQ("gr_complex", signal_source->item_type().c_str()); EXPECT_TRUE(signal_source->repeat() == false); } TEST(FileSignalSource, InstantiateFileNotExists) { boost::shared_ptr queue = gr::msg_queue::make(0); std::shared_ptr config = std::make_shared(); config->set_property("Test.samples", "0"); config->set_property("Test.sampling_frequency", "0"); config->set_property("Test.filename", "./signal_samples/i_dont_exist.dat"); config->set_property("Test.item_type", "gr_complex"); config->set_property("Test.repeat", "false"); EXPECT_THROW({auto uptr = std::make_shared(config.get(), "Test", 1, 1, queue);}, std::exception); } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l1_ca_pcps_acquisition_test.cc0000644000175000017500000002077712576764164025530 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition_test.cc * \brief This class implements an acquisition test for * GpsL1CaPcpsAcquisition class based on some input parameters. * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "gps_l1_ca_pcps_acquisition.h" class GpsL1CaPcpsAcquisitionTest: public ::testing::Test { protected: GpsL1CaPcpsAcquisitionTest() { //queue = gr::msg_queue::make(0); factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GpsL1CaPcpsAcquisitionTest() {} void init(); void start_queue(); void wait_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; }; void GpsL1CaPcpsAcquisitionTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); gnss_synchro.PRN = 1; config->set_property("GNSS-SDR.internal_fs_hz", "4000000"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", "1"); config->set_property("Acquisition.dump", "false"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition.threshold", "0.001"); config->set_property("Acquisition.doppler_max", "5000"); config->set_property("Acquisition.doppler_step", "500"); config->set_property("Acquisition.repeat_satellite", "false"); config->set_property("Acquisition.pfa", "0.0"); } void GpsL1CaPcpsAcquisitionTest::start_queue() { ch_thread = boost::thread(&GpsL1CaPcpsAcquisitionTest::wait_message, this); } void GpsL1CaPcpsAcquisitionTest::wait_message() { while (!stop) { channel_internal_queue.wait_and_pop(message); stop_queue(); } } void GpsL1CaPcpsAcquisitionTest::stop_queue() { stop = true; } TEST_F(GpsL1CaPcpsAcquisitionTest, Instantiate) { init(); queue = gr::msg_queue::make(0); std::shared_ptr acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); } TEST_F(GpsL1CaPcpsAcquisitionTest, ConnectAndRun) { int fs_in = 4000000; int nsamples = 4000; struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); init(); std::shared_ptr acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GpsL1CaPcpsAcquisitionTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); double expected_delay_samples = 524; double expected_doppler_hz = 1680; init(); start_queue(); std::shared_ptr acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(0.1); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(10000); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(250); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; ASSERT_NO_THROW( { std::string path = std::string(TEST_PATH); //std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; std::string file = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); top_block->connect(file_source, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; acquisition->set_state(1); // Ensure that acquisition starts at the first sample acquisition->init(); EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; stop_queue(); unsigned long int nsamples = gnss_synchro.Acq_samplestamp_samples; std::cout << "Acquired " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; ASSERT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; double delay_error_samples = std::abs(expected_delay_samples - gnss_synchro.Acq_delay_samples); float delay_error_chips = (float)(delay_error_samples * 1023 / 4000); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); EXPECT_LE(doppler_error_hz, 666) << "Doppler error exceeds the expected value: 666 Hz = 2/(3*integration period)"; EXPECT_LT(delay_error_chips, 0.5) << "Delay error exceeds the expected value: 0.5 chips"; ch_thread.join(); } gnss-sdr-0.0.6/src/tests/gnss_block/gnss_block_factory_test.cc0000644000175000017500000005146212576764164024111 0ustar carlescarles/*! * \file gnss_block_factory_test.cc * \brief This class implements a Unit Test for the GNSSBlockFactory class. * \authors
    *
  • Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
* * This class test the instantiation of all blocks in gnss_block_factory * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include "in_memory_configuration.h" #include "gnss_block_interface.h" #include "acquisition_interface.h" #include "tracking_interface.h" #include "telemetry_decoder_interface.h" #include "observables_interface.h" #include "pvt_interface.h" #include "gnss_block_factory.h" #include "channel.h" TEST(GNSS_Block_Factory_Test, InstantiateFileSignalSource) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("SignalSource.implementation", "File_Signal_Source"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; configuration->set_property("SignalSource.filename", filename); gr::msg_queue::sptr queue = gr::msg_queue::make(0); // Example of a factory as a shared_ptr std::shared_ptr factory = std::make_shared(); // Example of a block as a shared_ptr std::shared_ptr signal_source = factory->GetSignalSource(configuration, queue); EXPECT_STREQ("SignalSource", signal_source->role().c_str()); EXPECT_STREQ("File_Signal_Source", signal_source->implementation().c_str()); } /* TEST(GNSS_Block_Factory_Test, InstantiateUHDSignalSource) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("SignalSource.implementation", "UHD_Signal_Source"); configuration->set_property("SignalSource.item_type", "gr_complex"); configuration->set_property("SignalSource.device_address", "192.168.40.2"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); // Example of a factory created with auto auto factory = new GNSSBlockFactory(); // Example of a block created with auto auto signal_source = factory->GetSignalSource(configuration, queue); EXPECT_STREQ("SignalSource", signal_source->role().c_str()); EXPECT_STREQ("UHD_Signal_Source", signal_source->implementation().c_str()); } */ TEST(GNSS_Block_Factory_Test, InstantiateWrongSignalSource) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("SignalSource.implementation", "Pepito"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); // Example of a factory as a unique_ptr std::unique_ptr factory; // Example of a block as a unique_ptr std::unique_ptr signal_source = factory->GetSignalSource(configuration, queue); EXPECT_EQ(nullptr, signal_source); } TEST(GNSS_Block_Factory_Test, InstantiateSignalConditioner) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("SignalConditioner.implementation", "Signal_Conditioner"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr signal_conditioner = factory->GetSignalConditioner(configuration, queue); EXPECT_STREQ("SignalConditioner", signal_conditioner->role().c_str()); EXPECT_STREQ("Signal_Conditioner", signal_conditioner->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateFIRFilter) { std::shared_ptr configuration = std::make_shared(); gr::msg_queue::sptr queue = gr::msg_queue::make(0); configuration->set_property("InputFilter.implementation", "Fir_Filter"); configuration->set_property("InputFilter.number_of_taps", "4"); configuration->set_property("InputFilter.number_of_bands", "2"); configuration->set_property("InputFilter.band1_begin", "0.0"); configuration->set_property("InputFilter.band1_end", "0.45"); configuration->set_property("InputFilter.band2_begin", "0.55"); configuration->set_property("InputFilter.band2_end", "1.0"); configuration->set_property("InputFilter.ampl1_begin", "1.0"); configuration->set_property("InputFilter.ampl1_end", "1.0"); configuration->set_property("InputFilter.ampl2_begin", "0.0"); configuration->set_property("InputFilter.ampl2_end", "0.0"); configuration->set_property("InputFilter.band1_error", "1.0"); configuration->set_property("InputFilter.band2_error", "1.0"); configuration->set_property("InputFilter.filter_type", "bandpass"); configuration->set_property("InputFilter.grid_density", "16"); std::unique_ptr factory; std::unique_ptr input_filter = factory->GetBlock(configuration, "InputFilter", "Fir_Filter", 1,1, queue); EXPECT_STREQ("InputFilter", input_filter->role().c_str()); EXPECT_STREQ("Fir_Filter", input_filter->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateFreqXlatingFIRFilter) { std::shared_ptr configuration = std::make_shared(); gr::msg_queue::sptr queue = gr::msg_queue::make(0); configuration->set_property("InputFilter.implementation", "Freq_Xlating_Fir_Filter"); configuration->set_property("InputFilter.number_of_taps", "4"); configuration->set_property("InputFilter.number_of_bands", "2"); configuration->set_property("InputFilter.band1_begin", "0.0"); configuration->set_property("InputFilter.band1_end", "0.45"); configuration->set_property("InputFilter.band2_begin", "0.55"); configuration->set_property("InputFilter.band2_end", "1.0"); configuration->set_property("InputFilter.ampl1_begin", "1.0"); configuration->set_property("InputFilter.ampl1_end", "1.0"); configuration->set_property("InputFilter.ampl2_begin", "0.0"); configuration->set_property("InputFilter.ampl2_end", "0.0"); configuration->set_property("InputFilter.band1_error", "1.0"); configuration->set_property("InputFilter.band2_error", "1.0"); configuration->set_property("InputFilter.filter_type", "bandpass"); configuration->set_property("InputFilter.grid_density", "16"); configuration->set_property("InputFilter.sampling_frequency","4000000"); configuration->set_property("InputFilter.IF","34000"); std::unique_ptr factory; std::unique_ptr input_filter = factory->GetBlock(configuration, "InputFilter", "Freq_Xlating_Fir_Filter", 1,1, queue); EXPECT_STREQ("InputFilter", input_filter->role().c_str()); EXPECT_STREQ("Freq_Xlating_Fir_Filter", input_filter->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateDirectResampler) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Resampler.implementation", "Direct_Resampler"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr resampler = factory->GetBlock(configuration, "Resampler", "Direct_Resampler", 1,1, queue); EXPECT_STREQ("Resampler", resampler->role().c_str()); EXPECT_STREQ("Direct_Resampler", resampler->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaPcpsAcquisition) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Acquisition"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr acq_ = factory->GetBlock(configuration, "Acquisition", "GPS_L1_CA_PCPS_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); EXPECT_STREQ("Acquisition", acquisition->role().c_str()); EXPECT_STREQ("GPS_L1_CA_PCPS_Acquisition", acquisition->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaPcpsQuickSyncAcquisition) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_QuickSync_Acquisition"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::shared_ptr factory = std::make_shared(); std::shared_ptr acq_ = factory->GetBlock(configuration, "Acquisition", "GPS_L1_CA_PCPS_QuickSync_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); EXPECT_STREQ("Acquisition", acquisition->role().c_str()); EXPECT_STREQ("GPS_L1_CA_PCPS_QuickSync_Acquisition", acquisition->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGalileoE1PcpsQuickSyncAmbiguousAcquisition) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Acquisition.implementation", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::shared_ptr factory = std::make_shared(); std::shared_ptr acq_ = factory->GetBlock(configuration, "Acquisition", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); EXPECT_STREQ("Acquisition", acquisition->role().c_str()); EXPECT_STREQ("Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", acquisition->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGalileoE1PcpsAmbiguousAcquisition) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Acquisition.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr acq_ = factory->GetBlock(configuration, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); EXPECT_STREQ("Acquisition", acquisition->role().c_str()); EXPECT_STREQ("Galileo_E1_PCPS_Ambiguous_Acquisition", acquisition->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaDllFllPllTracking) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Tracking.implementation", "GPS_L1_CA_DLL_FLL_PLL_Tracking"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr trk_ = factory->GetBlock(configuration, "Tracking", "GPS_L1_CA_DLL_FLL_PLL_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); EXPECT_STREQ("Tracking", tracking->role().c_str()); EXPECT_STREQ("GPS_L1_CA_DLL_FLL_PLL_Tracking", tracking->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaDllPllTracking) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Tracking.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr trk_ = factory->GetBlock(configuration, "Tracking", "GPS_L1_CA_DLL_PLL_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); EXPECT_STREQ("Tracking", tracking->role().c_str()); EXPECT_STREQ("GPS_L1_CA_DLL_PLL_Tracking", tracking->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaTcpConnectorTracking) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Tracking.implementation", "GPS_L1_CA_TCP_CONNECTOR_Tracking"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr trk_ = factory->GetBlock(configuration, "Tracking", "GPS_L1_CA_TCP_CONNECTOR_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); EXPECT_STREQ("Tracking", tracking->role().c_str()); EXPECT_STREQ("GPS_L1_CA_TCP_CONNECTOR_Tracking", tracking->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGalileoE1DllPllVemlTracking) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Tracking.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr trk_ = factory->GetBlock(configuration, "Tracking", "Galileo_E1_DLL_PLL_VEML_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); EXPECT_STREQ("Tracking", tracking->role().c_str()); EXPECT_STREQ("Galileo_E1_DLL_PLL_VEML_Tracking", tracking->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaTelemetryDecoder) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("TelemetryDecoder.implementation", "GPS_L1_CA_Telemetry_Decoder"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr telemetry_decoder = factory->GetBlock(configuration, "TelemetryDecoder", "GPS_L1_CA_Telemetry_Decoder", 1, 1, queue); EXPECT_STREQ("TelemetryDecoder", telemetry_decoder->role().c_str()); EXPECT_STREQ("GPS_L1_CA_Telemetry_Decoder", telemetry_decoder->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateChannels) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Channels_GPS.count", "2"); configuration->set_property("Channels_Galileo.count", "0"); configuration->set_property("Channels.in_acquisition", "2"); configuration->set_property("Tracking_GPS.implementation","GPS_L1_CA_DLL_FLL_PLL_Tracking"); configuration->set_property("TelemetryDecoder_GPS.implementation","GPS_L1_CA_Telemetry_Decoder"); configuration->set_property("Channel0.item_type", "gr_complex"); configuration->set_property("Acquisition_GPS.implementation", "GPS_L1_CA_PCPS_Acquisition"); configuration->set_property("Channel1.item_type", "gr_complex"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr>> channels = std::move(factory->GetChannels(configuration, queue)); EXPECT_EQ((unsigned int) 2, channels->size()); channels->erase(channels->begin(), channels->end()); } TEST(GNSS_Block_Factory_Test, InstantiateObservables) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Observables.implementation", "Pass_Through"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; auto observables = factory->GetObservables(configuration, queue); EXPECT_STREQ("Observables", observables->role().c_str()); EXPECT_STREQ("Pass_Through", observables->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaObservables) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("Observables.implementation", "GPS_L1_CA_Observables"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr observables = factory->GetObservables(configuration, queue); EXPECT_STREQ("Observables", observables->role().c_str()); EXPECT_STREQ("GPS_L1_CA_Observables", observables->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiatePvt) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("PVT.implementation", "Pass_Through"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; auto pvt_ = factory->GetPVT(configuration, queue); EXPECT_STREQ("PVT", pvt_->role().c_str()); EXPECT_STREQ("Pass_Through", pvt_->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateGpsL1CaPvt) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("PVT.implementation", "GPS_L1_CA_PVT"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr pvt_ = factory->GetPVT(configuration, queue); std::shared_ptr pvt = std::dynamic_pointer_cast(pvt_); EXPECT_STREQ("PVT", pvt->role().c_str()); EXPECT_STREQ("GPS_L1_CA_PVT", pvt->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateWrongPvt) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("PVT.implementation", "Pepito"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::shared_ptr pvt_ = factory->GetPVT(configuration, queue); std::shared_ptr pvt = std::dynamic_pointer_cast(pvt_); EXPECT_EQ(nullptr, pvt); } TEST(GNSS_Block_Factory_Test, InstantiateNullSinkOutputFilter) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr output_filter = factory->GetOutputFilter(configuration, queue); EXPECT_STREQ("OutputFilter", output_filter->role().c_str()); EXPECT_STREQ("Null_Sink_Output_Filter", output_filter->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateFileOutputFilter) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("OutputFilter.implementation", "File_Output_Filter"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr output_filter = factory->GetOutputFilter(configuration, queue); EXPECT_STREQ("OutputFilter", output_filter->role().c_str()); EXPECT_STREQ("File_Output_Filter", output_filter->implementation().c_str()); } TEST(GNSS_Block_Factory_Test, InstantiateWrongOutputFilter) { std::shared_ptr configuration = std::make_shared(); configuration->set_property("OutputFilter.implementation", "Pepito"); gr::msg_queue::sptr queue = gr::msg_queue::make(0); std::unique_ptr factory; std::unique_ptr output_filter = factory->GetOutputFilter(configuration, queue); EXPECT_EQ(nullptr, output_filter); } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc0000644000175000017500000011371412576764164031434 0ustar carlescarles/*! * \file galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc * \brief This class implements an acquisition test for * GalileoE5a3msNoncoherentIQAcquisition class. * \author Marc Sales, 2014. marcsales92(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "configuration_interface.h" #include "gnss_synchro.h" #include "galileo_e5a_noncoherent_iq_acquisition_caf.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" #include "pass_through.h" #include "file_output_filter.h" #include "gnss_block_factory.h" class GalileoE5aPcpsAcquisitionGSoC2014GensourceTest: public ::testing::Test { protected: GalileoE5aPcpsAcquisitionGSoC2014GensourceTest() { item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); init(); } ~GalileoE5aPcpsAcquisitionGSoC2014GensourceTest() {} void init(); void config_1(); void config_2(); void config_3(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; //std::shared_ptr factory = std::make_shared(); std::shared_ptr acquisition; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_delay_sec = 0.0; double expected_doppler_hz = 0.0; double expected_delay_chips1 = 0.0; double expected_delay_sec1 = 0.0; double expected_doppler_hz1 = 0.0; double expected_delay_chips2 = 0.0; double expected_delay_sec2 = 0.0; double expected_doppler_hz2 = 0.0; double expected_delay_chips3 = 0.0; double expected_delay_sec3 = 0.0; double expected_doppler_hz3 = 0.0; float max_doppler_error_hz = 0.0; float max_delay_error_chips = 0.0; int CAF_window_hz = 0; int Zero_padding = 0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; double Pfa_p; double Pfa_a; int sat = 0; }; void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; // std::string signal = "5I"; // std::string signal = "5Q"; std::string signal = "5X"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 3; //fs_in = 11e6; //fs_in = 18e6; fs_in = 32e6; //fs_in = 30.69e6; //fs_in = 20.47e6; // unsigned int delay_samples = (delay_chips_[sat] % codelen) // * samples_per_code_[sat] / codelen; expected_delay_chips = round(14000*((double)10230000/(double)fs_in)); expected_doppler_hz = 2800; //expected_doppler_hz = 0; expected_delay_sec = 94; // CAF_window_hz = 3000; CAF_window_hz = 0; Zero_padding = 0; //expected_delay_chips = 1000; //expected_doppler_hz = 250; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; //max_doppler_error_hz = 1000; //max_delay_error_chips = 1; num_of_realizations = 1; config = std::make_shared(); config->set_property("Channel.signal",signal); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.signal_0", "5X"); config->set_property("SignalSource.PRN_0", "11"); config->set_property("SignalSource.CN0_dB_0", "50"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.delay_sec_0", std::to_string(expected_delay_sec)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("SignalSource.dump", "true"); config->set_property("SignalSource.dump_filename", "../data/signal_source.dat"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition_Galileo.item_type", "gr_complex"); config->set_property("Acquisition_Galileo.if", "0"); config->set_property("Acquisition_Galileo.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_Galileo.max_dwells", "1"); config->set_property("Acquisition_Galileo.CAF_window_hz",std::to_string(CAF_window_hz)); config->set_property("Acquisition_Galileo.Zero_padding",std::to_string(Zero_padding)); config->set_property("Acquisition_Galileo.implementation", "Galileo_E5a_Noncoherent_IQ_Acquisition_CAF"); config->set_property("Acquisition_Galileo.pfa","0.003"); // config->set_property("Acquisition_Galileo.threshold", "0.01"); config->set_property("Acquisition_Galileo.doppler_max", "10000"); config->set_property("Acquisition_Galileo.doppler_step", "250"); // config->set_property("Acquisition_Galileo.doppler_step", "500"); config->set_property("Acquisition_Galileo.bit_transition_flag", "false"); config->set_property("Acquisition_Galileo.dump", "true"); config->set_property("SignalSource.dump_filename", "../data/acquisition.dat"); } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "5Q"; //std::string signal = "5X"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 3; //fs_in = 10.24e6; //fs_in = 12e6; fs_in = 12e6; //expected_delay_chips = 600; //expected_doppler_hz = 750; expected_delay_chips = 1000; expected_doppler_hz = 250; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; //max_doppler_error_hz = 1000; //max_delay_error_chips = 1; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("Acquisition_Galileo.item_type", "gr_complex"); config->set_property("Acquisition_Galileo.if", "0"); config->set_property("Acquisition_Galileo.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_Galileo.max_dwells", "1"); config->set_property("Acquisition_Galileo.implementation", "Galileo_E5a_PCPS_Acquisition"); //config->set_property("Acquisition_Galileo.implementation", "Galileo_E5a_Pilot_3ms_Acquisition"); //config->set_property("Acquisition_Galileo.implementation", "Galileo_E5ax_2ms_Pcps_Acquisition"); config->set_property("Acquisition_Galileo.threshold", "0.1"); config->set_property("Acquisition_Galileo.doppler_max", "10000"); config->set_property("Acquisition_Galileo.doppler_step", "250"); config->set_property("Acquisition_Galileo.bit_transition_flag", "false"); config->set_property("Acquisition_Galileo.dump", "true"); config->set_property("SignalSource.dump_filename", "../data/acquisition.dat"); } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::config_3() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; //std::string signal = "5Q"; std::string signal = "5X"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 3; //fs_in = 10.24e6; //fs_in = 12e6; fs_in = 12e6; //expected_delay_chips = 600; //expected_doppler_hz = 750; expected_delay_chips = 0; expected_delay_sec = 0; expected_doppler_hz = 0; expected_delay_chips1 = 6000; expected_delay_sec1 = 10; expected_doppler_hz1 = 700; expected_delay_chips2 = 9000; expected_delay_sec2 = 26; expected_doppler_hz2 = -1500; expected_delay_chips3 = 2000; expected_delay_sec3 = 77; expected_doppler_hz3 = 5000; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; //max_doppler_error_hz = 1000; //max_delay_error_chips = 1; num_of_realizations = 10; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.signal_0", "5X"); config->set_property("SignalSource.PRN_0", "11"); config->set_property("SignalSource.CN0_dB_0", "46"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.delay_sec_0", std::to_string(expected_delay_sec)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.signal_1", "5X"); config->set_property("SignalSource.PRN_1", "12"); config->set_property("SignalSource.CN0_dB_1", "46"); config->set_property("SignalSource.doppler_Hz_1", std::to_string(expected_doppler_hz1)); config->set_property("SignalSource.delay_chips_1", std::to_string(expected_delay_chips1)); config->set_property("SignalSource.delay_sec_1", std::to_string(expected_delay_sec1)); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.signal_2", "5X"); config->set_property("SignalSource.PRN_2", "19"); config->set_property("SignalSource.CN0_dB_2", "43"); config->set_property("SignalSource.doppler_Hz_2", std::to_string(expected_doppler_hz2)); config->set_property("SignalSource.delay_chips_2", std::to_string(expected_delay_chips2)); config->set_property("SignalSource.delay_sec_2", std::to_string(expected_delay_sec2)); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.signal_3", "5X"); config->set_property("SignalSource.PRN_3", "20"); config->set_property("SignalSource.CN0_dB_3", "39"); config->set_property("SignalSource.doppler_Hz_3", std::to_string(expected_doppler_hz3)); config->set_property("SignalSource.delay_chips_3", std::to_string(expected_delay_chips3)); config->set_property("SignalSource.delay_sec_3", std::to_string(expected_delay_sec3)); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("SignalSource.dump", "true"); config->set_property("SignalSource.dump_filename", "../data/signal_source.dat"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition_Galileo.item_type", "gr_complex"); config->set_property("Acquisition_Galileo.if", "0"); config->set_property("Acquisition_Galileo.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition_Galileo.max_dwells", "1"); config->set_property("Acquisition_Galileo.implementation", "Galileo_E5a_PCPS_Acquisition"); //config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); //config->set_property("Acquisition.implementation", "Galileo_E5a_Pilot_3ms_Acquisition"); config->set_property("Acquisition_Galileo.threshold", "0.5"); config->set_property("Acquisition_Galileo.doppler_max", "10000"); config->set_property("Acquisition_Galileo.doppler_step", "250"); config->set_property("Acquisition_Galileo.bit_transition_flag", "false"); config->set_property("Acquisition_Galileo.dump", "true"); config->set_property("SignalSource.dump_filename", "../data/acquisition.dat"); } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::wait_message, this); } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; mean_acq_time_us += (end-begin); process_message(); } } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::process_message() { if (message == 1) { double delay_error_chips = 0.0; double doppler_error_hz = 0.0; switch (sat) { case 0: delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*10230.0/((double)fs_in*1e-3)); doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); break; case 1: delay_error_chips = std::abs((double)expected_delay_chips1 - (double)(gnss_synchro.Acq_delay_samples-5)*10230.0/((double)fs_in*1e-3)); doppler_error_hz = std::abs(expected_doppler_hz1 - gnss_synchro.Acq_doppler_hz); break; case 2: delay_error_chips = std::abs((double)expected_delay_chips2 - (double)(gnss_synchro.Acq_delay_samples-5)*10230.0/((double)fs_in*1e-3)); doppler_error_hz = std::abs(expected_doppler_hz2 - gnss_synchro.Acq_doppler_hz); break; case 3: delay_error_chips = std::abs((double)expected_delay_chips3 - (double)(gnss_synchro.Acq_delay_samples-5)*10230.0/((double)fs_in*1e-3)); doppler_error_hz = std::abs(expected_doppler_hz3 - gnss_synchro.Acq_doppler_hz); break; default: // case 3 std::cout << "Error: message from unexpected acquisition channel" << std::endl; break; } detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter /* double delay_error_chips = abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*10230.0/((double)fs_in*1e-3)); double doppler_error_hz = abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); */ mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; //std::cout << correct_estimation_counter << "correct estimation counter" << std::endl; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; //std::cout << message << "message" <stop(); } } void GalileoE5aPcpsAcquisitionGSoC2014GensourceTest::stop_queue() { stop = true; } /* TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, Instantiate) { config_1(); // acquisition = new GalileoE5aPilot_3msAcquisition(config.get(), "Acquisition", 1, 1, queue); acquisition = new GalileoE5a3msNoncoherentIQAcquisition(config.get(), "Acquisition", 1, 1, queue); delete acquisition; } */ /* TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, ConnectAndRun) { config_1(); //int nsamples = floor(5*fs_in*integration_time_ms*1e-3); int nsamples = 21000*3; struct timeval tv; long long int begin = 0; long long int end = 0; //acquisition = new GalileoE5aPcpsAcquisition(config.get(), "Acquisition", 1, 1, queue); //acquisition = new GalileoE5aPilot_3msAcquisition(config.get(), "Acquisition", 1, 1, queue); acquisition = new GalileoE5a3msNoncoherentIQAcquisition(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; }) << "Failure running the top_block."<< std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; delete acquisition; } */ /* TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, SOURCEValidation) { config_1(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); //top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure generating signal" << std::endl; } */ /* TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, SOURCEValidationTOFILE) { config_1(); ASSERT_NO_THROW( { std::string filename_ = "../data/Tiered_sinknull.dat"; boost::shared_ptr file_sink_; boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); //signal_source->connect(top_block); file_sink_=gr::blocks::file_sink::make(sizeof(gr_complex), filename_.c_str()); top_block->connect(signal_source->get_right_block(),0,file_sink_,0); //top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure generating signal" << std::endl; } */ TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, ValidationOfSIM) { config_1(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); //int nsamples = floor(fs_in*integration_time_ms*1e-3); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); //unsigned int skiphead_sps = 28000+32000; // 32 Msps // unsigned int skiphead_sps = 0; // unsigned int skiphead_sps = 84000; ASSERT_NO_THROW( { acquisition->set_channel(0); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition_Galileo.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition_Galileo.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition_Galileo.threshold", 0.0)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); // USING SIGNAL GENERATOR ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); filter->connect(top_block); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; acquisition->reset(); acquisition->init(); // USING SIGNAL FROM FILE SOURCE /* ASSERT_NO_THROW( { //noiseless sim //std::string file = "/home/marc/E5a_acquisitions/sim_32M_sec94_PRN11_long.dat"; // real std::string file = "/home/marc/E5a_acquisitions/32MS_complex.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); gr::blocks::skiphead::sptr skip_head = gr::blocks::skiphead::make(sizeof(gr_complex), skiphead_sps); top_block->connect(file_source, 0, skip_head, 0); top_block->connect(skip_head, 0, acquisition->get_left_block(), 0); // top_block->connect(file_source, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; */ // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 1; i++) { init(); switch (i) { case 0: { gnss_synchro.PRN = 19; //real //gnss_synchro.PRN = 11; //sim //break; } // case 1: // { // gnss_synchro.PRN = 11; // break; // } // case 2: // { // gnss_synchro.PRN = 12; // break; // } // case 3: // { // gnss_synchro.PRN = 20; // break; // } } // if (i == 0) // { // gnss_synchro.PRN = 11;// This satellite is visible // } // else if (i == 1) // { // gnss_synchro.PRN = 19; // This satellite is not visible // } start_queue(); acquisition->reset(); acquisition->init(); acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->set_state(1); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block."<< std::endl; stop_queue(); ch_thread.join(); //std::cout << gnss_synchro.Acq_delay_samples << "acq delay" <set_channel(0); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); ASSERT_NO_THROW( { //std::string path = std::string(TEST_PATH); //std::string file = "/home/marc/E5a_acquisitions/signal_source_5X_primary.dat"; //std::string file = "/home/marc/E5a_acquisitions/Tiered_sink_4sat_stup4.dat"; //std::string file = "/home/marc/E5a_acquisitions/Tiered_4sat_down_upsampled12M_stup2.dat"; //std::string file = "/home/marc/E5a_acquisitions/Tiered_stup4_down-upsampl12.dat"; //std::string file = "/home/marc/E5a_acquisitions/Tiered_sim_4sat_stup4_2s_up.dat"; // std::string file = "/home/marc/E5a_acquisitions/Tiered_sink_4sat_setup5_down-upsampled12M.dat"; std::string file = "/home/marc/E5a_acquisitions/32Ms_complex.dat"; //std::string file = "/home/marc/E5a_acquisitions/galileo_E5_8M_r2_upsampled_12.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); gr::blocks::skiphead::sptr skip_head = gr::blocks::skiphead::make(sizeof(gr_complex), skiphead_sps); top_block->connect(file_source, 0, skip_head, 0); top_block->connect(skip_head, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; for (unsigned int i = 0; i < 5; i++) { init(); switch (i) { case 0: gnss_synchro.PRN = 10; break; case 1: gnss_synchro.PRN = 19; break; case 2: gnss_synchro.PRN = 12; break; case 3: gnss_synchro.PRN = 20; break; case 4: gnss_synchro.PRN = 11; break; } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running he top_block."<< std::endl; } delete acquisition; } */ /* TEST_F(GalileoE5aPcpsAcquisitionGSoC2014GensourceTest, FourSatsGen) { config_3(); int nsamples = floor(fs_in*integration_time_ms*1e-3); // acquisition = new GalileoE5aPcpsAcquisition(config.get(), "Acquisition", 1, 1, queue); acquisition = new GalileoE5aPilot_3msAcquisition(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(0); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); ASSERT_NO_THROW( { std::string filename_ = "../data/Tiered_sink_4sat.dat"; boost::shared_ptr file_sink_; boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); // file_sink_=gr::blocks::file_sink::make(sizeof(gr_complex), filename_.c_str()); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); top_block->connect(signal_source->get_right_block(), 0, file_sink_, 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // ASSERT_NO_THROW( { // //std::string path = std::string(TEST_PATH); // //std::string file = "/home/marc/E5a_acquisitions/signal_source_5X_primary.dat"; // std::string file = "/home/marc/E5a_acquisitions/Tiered_sink_test.dat"; // //std::string file = "/home/marc/E5a_acquisitions/galileo_E5_8M_r2_upsampled_12.dat"; // const char * file_name = file.c_str(); // gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); // top_block->connect(file_source, 0, acquisition->get_left_block(), 0); // }) << "Failure connecting the blocks of acquisition test." << std::endl; // all satellite visibles but with different CN0 for (unsigned int i = 0; i < 4; i++) { init(); sat=i; switch (i) { case 0: gnss_synchro.PRN = 11; break; case 1: gnss_synchro.PRN = 12; break; case 2: gnss_synchro.PRN = 19; break; case 3: gnss_synchro.PRN = 20; break; } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running he top_block."<< std::endl; switch (i) { case 0: //EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { std::cout << gnss_synchro.Acq_delay_samples << "acq delay" <. * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "gps_l1_ca_pcps_quicksync_acquisition.h" DEFINE_double(value_threshold, 1, "Value of the threshold for the acquisition"); DEFINE_int32(value_CN0_dB_0, 44, "Value for the CN0_dB_0 in channel 0"); using google::LogMessage; class GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test: public ::testing::Test { protected: GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test() { factory = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test() {} void init(); void config_1(); void config_2(); void config_3(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr acquisition; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; unsigned int folding_factor = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0.0; float max_delay_error_chips = 0.0; unsigned int num_of_realizations = 0; unsigned int realization_counter = 0; unsigned int detection_counter = 0; unsigned int correct_estimation_counter = 0; unsigned int acquired_samples = 0; unsigned int mean_acq_time_us = 0; double mse_doppler = 0.0; double mse_delay = 0.0; double Pd = 0.0; double Pfa_p = 0.0; double Pfa_a = 0.0; double Pmd = 0.0; std::ofstream pdpfafile; unsigned int miss_detection_counter = 0; bool dump_test_results = false; }; void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; miss_detection_counter = 0; Pmd = 0; } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 4; fs_in = 8e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.repeat", "true"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_QuickSync_Acquisition"); config->set_property("Acquisition.threshold", "250"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 4; fs_in = 8e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; /*Unset this flag to eliminates data logging for the Validation of results probabilities test*/ dump_test_results = false; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_value_CN0_dB_0)); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "G"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "G"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "G"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_QuickSync_Acquisition"); config->set_property("Acquisition.threshold", std::to_string(FLAGS_value_threshold)); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "100"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::config_3() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; /*Unset this flag to eliminates data logging for the Validation of results probabilities test*/ dump_test_results = true; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_value_CN0_dB_0)); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "G"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "G"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "G"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "2"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_QuickSync_Acquisition"); config->set_property("Acquisition.threshold", "0.01"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::start_queue() { stop = false; ch_thread = boost::thread(&GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::wait_message, this); } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec * 1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec * 1e6 + tv.tv_usec; mean_acq_time_us += (end - begin); process_message(); } } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples - 5) * 1023.0/ ((double)fs_in * 1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } else if(message == 2 && gnss_synchro.PRN == 10) { miss_detection_counter++; } realization_counter++; std::cout << "Progress: " << round((float)realization_counter / num_of_realizations * 100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; Pmd = (double)miss_detection_counter / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); } } void GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test::stop_queue() { stop = true; } TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, Instantiate) { config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); } TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ConnectAndRun) { int nsamples = floor(fs_in * integration_time_ms * 1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1e6 + tv.tv_usec; }) << "Failure running the top_block."<< std::endl; std::cout << "Processed " << nsamples << " samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(10000); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(250); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(100); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->reset(); acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } } TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResultsWithNoise) { //config_3(); config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(10000); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(250); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(100); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } //acquisition->set_local_code(); acquisition->reset(); acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } } TEST_F(GpsL1CaPcpsQuickSyncAcquisitionGSoC2014Test, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; /* ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold."<< std::endl; */ ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->reset(); acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Estimated probability of miss detection (satellite present) = " << Pmd << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; if(dump_test_results) { std::stringstream filenamepd; filenamepd.str(""); filenamepd << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_value_CN0_dB_0 << "_dBHz.csv"; pdpfafile.open(filenamepd.str().c_str(), std::ios::app | std::ios::out); pdpfafile << FLAGS_value_threshold << "," << Pd << "," << Pfa_p << "," << Pmd << std::endl; pdpfafile.close(); } } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; if(dump_test_results) { std::stringstream filenamepf; filenamepf.str(""); filenamepf << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_value_CN0_dB_0 << "_dBHz.csv"; pdpfafile.open(filenamepf.str().c_str(), std::ios::app | std::ios::out); pdpfafile << FLAGS_value_threshold << "," << Pfa_a << std::endl; pdpfafile.close(); } } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/gnss_block/fir_filter_test.cc0000644000175000017500000003477312576764164022371 0ustar carlescarles/*! * \file fir_filter_test.cc * \brief Implements Unit Test for the FirFilter class. * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "interleaved_byte_to_complex_byte.h" #include "interleaved_short_to_complex_short.h" #include "fir_filter.h" #include "file_signal_source.h" DEFINE_int32(filter_test_nsamples, 1000000 , "Number of samples to filter in the tests (max: 2147483647)"); class Fir_Filter_Test: public ::testing::Test { protected: Fir_Filter_Test() { queue = gr::msg_queue::make(0); item_size = sizeof(gr_complex); config = std::make_shared(); } ~Fir_Filter_Test() {} void init(); void configure_cbyte_cbyte(); void configure_cbyte_gr_complex(); void configure_gr_complex_gr_complex(); void configure_cshort_cshort(); boost::shared_ptr queue; gr::top_block_sptr top_block; std::shared_ptr config; size_t item_size; int nsamples = FLAGS_filter_test_nsamples; }; void Fir_Filter_Test::init() { config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "5"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.45"); config->set_property("InputFilter.band2_begin", "0.55"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); //config->set_property("InputFilter.dump", "true"); } void Fir_Filter_Test::configure_cbyte_cbyte() { config->set_property("InputFilter.input_item_type", "cbyte"); config->set_property("InputFilter.output_item_type", "cbyte"); } void Fir_Filter_Test::configure_gr_complex_gr_complex() { config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); } void Fir_Filter_Test::configure_cshort_cshort() { config->set_property("InputFilter.input_item_type", "cshort"); config->set_property("InputFilter.output_item_type", "cshort"); } void Fir_Filter_Test::configure_cbyte_gr_complex() { config->set_property("InputFilter.input_item_type", "cbyte"); config->set_property("InputFilter.output_item_type", "gr_complex"); } TEST_F(Fir_Filter_Test, Instantiate_gr_complex_gr_complex) { init(); configure_gr_complex_gr_complex(); std::unique_ptr filter(new FirFilter(config.get(), "InputFilter", 1, 1, queue)); int res = 0; if (filter) res = 1; ASSERT_EQ(1, res); } TEST_F(Fir_Filter_Test, Instantiate_cshort_cshort) { init(); configure_cshort_cshort(); std::unique_ptr filter(new FirFilter(config.get(), "InputFilter", 1, 1, queue)); int res = 0; if (filter) res = 1; ASSERT_EQ(1, res); } TEST_F(Fir_Filter_Test, Instantiate_cbyte_cbyte) { init(); configure_cbyte_cbyte(); std::unique_ptr filter(new FirFilter(config.get(), "InputFilter", 1, 1, queue)); int res = 0; if (filter) res = 1; ASSERT_EQ(1, res); } TEST_F(Fir_Filter_Test, Instantiate_cbyte_gr_complex) { init(); configure_cbyte_gr_complex(); std::unique_ptr filter(new FirFilter(config.get(), "InputFilter", 1, 1, queue)); int res = 0; if (filter) res = 1; ASSERT_EQ(1, res); } TEST_F(Fir_Filter_Test, ConnectAndRun) { int fs_in = 4000000; struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Fir filter test"); init(); configure_gr_complex_gr_complex(); std::shared_ptr filter = std::make_shared(config.get(), "InputFilter", 1, 1, queue); item_size = sizeof(gr_complex); ASSERT_NO_THROW( { filter->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); boost::shared_ptr null_sink = gr::blocks::null_sink::make(item_size); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, filter->get_left_block(), 0); top_block->connect(filter->get_right_block(), 0, null_sink, 0); }) << "Failure connecting the top_block."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Filtered " << nsamples << " samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(Fir_Filter_Test, ConnectAndRunGrcomplex) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Fir filter test"); init(); configure_gr_complex_gr_complex(); std::shared_ptr filter = std::make_shared(config.get(), "InputFilter", 1, 1, queue); std::shared_ptr config2 = std::make_shared(); config2->set_property("Test_Source.samples", std::to_string(nsamples)); config2->set_property("Test_Source.sampling_frequency", "4000000"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; config2->set_property("Test_Source.filename", filename); config2->set_property("Test_Source.item_type", "gr_complex"); config2->set_property("Test_Source.repeat", "true"); item_size = sizeof(gr_complex); ASSERT_NO_THROW( { filter->connect(top_block); boost::shared_ptr source(new FileSignalSource(config2.get(), "Test_Source", 1, 1, queue)); source->connect(top_block); boost::shared_ptr null_sink = gr::blocks::null_sink::make(item_size); top_block->connect(source->get_right_block(), 0, filter->get_left_block(), 0); top_block->connect(filter->get_right_block(), 0, null_sink, 0); }) << "Failure connecting the top_block."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Filtered " << nsamples << " gr_complex samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(Fir_Filter_Test, ConnectAndRunCshorts) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Fir filter test"); init(); configure_cshort_cshort(); std::shared_ptr filter = std::make_shared(config.get(), "InputFilter", 1, 1, queue); std::shared_ptr config2 = std::make_shared(); config2->set_property("Test_Source.samples", std::to_string(nsamples)); config2->set_property("Test_Source.sampling_frequency", "4000000"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; config2->set_property("Test_Source.filename", filename); config2->set_property("Test_Source.item_type", "ishort"); config2->set_property("Test_Source.repeat", "true"); item_size = sizeof(std::complex); ASSERT_NO_THROW( { filter->connect(top_block); boost::shared_ptr source(new FileSignalSource(config2.get(), "Test_Source", 1, 1, queue)); source->connect(top_block); interleaved_short_to_complex_short_sptr ishort_to_cshort_ = make_interleaved_short_to_complex_short(); boost::shared_ptr null_sink = gr::blocks::null_sink::make(item_size); top_block->connect(source->get_right_block(), 0, ishort_to_cshort_, 0); top_block->connect(ishort_to_cshort_, 0, filter->get_left_block(), 0); top_block->connect(filter->get_right_block(), 0, null_sink, 0); }) << "Failure connecting the top_block."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Filtered " << nsamples << " std::complex samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(Fir_Filter_Test, ConnectAndRunCbytes) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Fir filter test"); init(); configure_cbyte_cbyte(); std::shared_ptr filter = std::make_shared(config.get(), "InputFilter", 1, 1, queue); std::shared_ptr config2 = std::make_shared(); config2->set_property("Test_Source.samples", std::to_string(nsamples)); config2->set_property("Test_Source.sampling_frequency", "4000000"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; config2->set_property("Test_Source.filename", filename); config2->set_property("Test_Source.item_type", "ibyte"); config2->set_property("Test_Source.repeat", "true"); item_size = sizeof(std::complex); ASSERT_NO_THROW( { filter->connect(top_block); boost::shared_ptr source(new FileSignalSource(config2.get(), "Test_Source", 1, 1, queue)); source->connect(top_block); interleaved_byte_to_complex_byte_sptr ibyte_to_cbyte_ = make_interleaved_byte_to_complex_byte(); boost::shared_ptr null_sink = gr::blocks::null_sink::make(item_size); top_block->connect(source->get_right_block(), 0, ibyte_to_cbyte_, 0); top_block->connect(ibyte_to_cbyte_, 0, filter->get_left_block(), 0); top_block->connect(filter->get_right_block(), 0, null_sink, 0); }) << "Failure connecting the top_block."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Filtered " << nsamples << " std::complex samples in " << (end-begin) << " microseconds" << std::endl; } TEST_F(Fir_Filter_Test, ConnectAndRunCbyteGrcomplex) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Fir filter test"); init(); configure_cbyte_gr_complex(); std::shared_ptr filter = std::make_shared(config.get(), "InputFilter", 1, 1, queue); std::shared_ptr config2 = std::make_shared(); config2->set_property("Test_Source.samples", std::to_string(nsamples)); config2->set_property("Test_Source.sampling_frequency", "4000000"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat"; config2->set_property("Test_Source.filename", filename); config2->set_property("Test_Source.item_type", "ibyte"); config2->set_property("Test_Source.repeat", "true"); item_size = sizeof(gr_complex); ASSERT_NO_THROW( { filter->connect(top_block); boost::shared_ptr source(new FileSignalSource(config2.get(), "Test_Source", 1, 1, queue)); source->connect(top_block); interleaved_byte_to_complex_byte_sptr ibyte_to_cbyte_ = make_interleaved_byte_to_complex_byte(); boost::shared_ptr null_sink = gr::blocks::null_sink::make(item_size); top_block->connect(source->get_right_block(), 0, ibyte_to_cbyte_, 0); top_block->connect(ibyte_to_cbyte_, 0, filter->get_left_block(), 0); top_block->connect(filter->get_right_block(), 0, null_sink, 0); }) << "Failure connecting the top_block."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Filtered " << nsamples << " samples in " << (end-begin) << " microseconds" << std::endl; } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l2_m_pcps_acquisition_test.cc0000644000175000017500000002363512576764164025376 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition_test.cc * \brief This class implements an acquisition test for * GpsL1CaPcpsAcquisition class based on some input parameters. * \author Javier Arribas, 2015 (jarribas@cttc.es) * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "gps_l2_m_pcps_acquisition.h" #include "GPS_L2C.h" class GpsL2MPcpsAcquisitionTest: public ::testing::Test { protected: GpsL2MPcpsAcquisitionTest() { //queue = gr::msg_queue::make(0); factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; sampling_freqeuncy_hz = 0; nsamples = 0; gnss_synchro = Gnss_Synchro(); } ~GpsL2MPcpsAcquisitionTest() {} void init(); void start_queue(); void wait_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; int sampling_freqeuncy_hz; int nsamples; }; void GpsL2MPcpsAcquisitionTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "2S"; //strncpy(gnss_synchro.Signal, signal.c_str(), 3); std::memcpy((void*)gnss_synchro.Signal, signal.c_str(), 3); // copy string into synchro char array: 2 char + null gnss_synchro.Signal[2] = 0; // make sure that string length is only two characters gnss_synchro.PRN = 7; sampling_freqeuncy_hz = 5000000; nsamples = round((double)sampling_freqeuncy_hz*GPS_L2_M_PERIOD)*2; config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(sampling_freqeuncy_hz)); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.dump", "false"); config->set_property("Acquisition.implementation", "GPS_L2_M_PCPS_Acquisition"); config->set_property("Acquisition.threshold", "0.001"); config->set_property("Acquisition.doppler_max", "5000"); config->set_property("Acquisition.doppler_step", "100"); config->set_property("Acquisition.repeat_satellite", "false"); //config->set_property("Acquisition.pfa", "0.0"); } void GpsL2MPcpsAcquisitionTest::start_queue() { ch_thread = boost::thread(&GpsL2MPcpsAcquisitionTest::wait_message, this); } void GpsL2MPcpsAcquisitionTest::wait_message() { while (!stop) { channel_internal_queue.wait_and_pop(message); stop_queue(); } } void GpsL2MPcpsAcquisitionTest::stop_queue() { stop = true; } TEST_F(GpsL2MPcpsAcquisitionTest, Instantiate) { init(); queue = gr::msg_queue::make(0); std::shared_ptr acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); } TEST_F(GpsL2MPcpsAcquisitionTest, ConnectAndRun) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); init(); std::shared_ptr acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(sampling_freqeuncy_hz, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GpsL2MPcpsAcquisitionTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); double expected_delay_samples = 1;//2004; double expected_doppler_hz = 1200;//3000; init(); start_queue(); std::shared_ptr acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(0.001); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(5000); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(10); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; ASSERT_NO_THROW( { std::string path = std::string(TEST_PATH); //std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; std::string file = path + "/data/gps_l2c_m_prn7_5msps.dat"; //std::string file = "/datalogger/signals/Fraunhofer/L125_III1b_210s_L2_resampled.bin"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); //gr::blocks::interleaved_short_to_complex::sptr gr_interleaved_short_to_complex_ = gr::blocks::interleaved_short_to_complex::make(); //gr::blocks::char_to_short::sptr gr_char_to_short_ = gr::blocks::char_to_short::make(); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); //top_block->connect(file_source, 0, gr_char_to_short_, 0); //top_block->connect(gr_char_to_short_, 0, gr_interleaved_short_to_complex_ , 0); top_block->connect(file_source, 0, valve , 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; ASSERT_NO_THROW( { acquisition->set_state(1); // Ensure that acquisition starts at the first sample acquisition->init(); }) << "Failure set_state and init acquisition test" << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; stop_queue(); //unsigned long int Acq_samplestamp_samples = gnss_synchro.Acq_samplestamp_samples; std::cout << "Acquisition process runtime duration: " << (end - begin) << " microseconds" << std::endl; std::cout << "gnss_synchro.Acq_doppler_hz = " << gnss_synchro.Acq_doppler_hz << " Hz" << std::endl; std::cout << "gnss_synchro.Acq_delay_samples = " << gnss_synchro.Acq_delay_samples << " Samples" << std::endl; ASSERT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; double delay_error_samples = std::abs(expected_delay_samples - gnss_synchro.Acq_delay_samples); float delay_error_chips = (float)(delay_error_samples * 1023 / 4000); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); EXPECT_LE(doppler_error_hz, 200) << "Doppler error exceeds the expected value: 666 Hz = 2/(3*integration period)"; EXPECT_LT(delay_error_chips, 0.5) << "Delay error exceeds the expected value: 0.5 chips"; ch_thread.join(); } gnss-sdr-0.0.6/src/tests/gnss_block/file_output_filter_test.cc0000644000175000017500000000340512576764164024134 0ustar carlescarles/*! * \file file_output_filter_test.cc * \brief This class implements a Unit Test for the class FileOutputFilter. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include "file_output_filter.h" #include "in_memory_configuration.h" TEST(FileOutputFilter, Instantiate) { std::shared_ptr config = std::make_shared(); std::string path = std::string(TEST_PATH); std::string file = path + "data/output.dat"; config->set_property("Test.filename", file); config->set_property("Test.item_type", "float"); std::unique_ptr output_filter(new FileOutputFilter(config.get(), "Test", 1, 0)); int res = 0; if (output_filter) res = 1; ASSERT_EQ(1, res); } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc0000644000175000017500000002270212576764164030755 0ustar carlescarles/*! * \file galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc * \brief This class implements an acquisition test for * GalileoE1PcpsAmbiguousAcquisition class based on GSoC 2012 experiments. * * This test is a part of an experiment performed by Luis Esteve in the * framework of the Google Summer of Code (GSoC) 2012, with the collaboration * of Javier Arribas and Carles Fernández, related to the extension of GNSS-SDR * to Galileo. The objective is perform a positive acquisition of in-orbit * Galileo signals in the E1 band. * * Report: * https://docs.google.com/document/d/1SZ3m1K7Qf9GsZQGEF7VSOEewBDCjbylCClw9rSXwG7Y/edit?pli=1 * * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_signal.h" #include "gnss_synchro.h" #include "galileo_e1_pcps_ambiguous_acquisition.h" class GalileoE1PcpsAmbiguousAcquisitionGSoCTest: public ::testing::Test { protected: GalileoE1PcpsAmbiguousAcquisitionGSoCTest() { factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GalileoE1PcpsAmbiguousAcquisitionGSoCTest() {} void init(); void start_queue(); void wait_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; }; void GalileoE1PcpsAmbiguousAcquisitionGSoCTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); gnss_synchro.PRN = 11; config->set_property("GNSS-SDR.internal_fs_hz", "4000000"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", "4"); config->set_property("Acquisition.dump", "false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "125"); config->set_property("Acquisition.repeat_satellite", "false"); config->set_property("Acquisition0.cboc", "true"); } void GalileoE1PcpsAmbiguousAcquisitionGSoCTest::start_queue() { ch_thread = boost::thread(&GalileoE1PcpsAmbiguousAcquisitionGSoCTest::wait_message, this); } void GalileoE1PcpsAmbiguousAcquisitionGSoCTest::wait_message() { while (!stop) { try { channel_internal_queue.wait_and_pop(message); stop_queue(); } catch( boost::exception & e ) { DLOG(WARNING) << "Boost exception: " << boost::diagnostic_information(e); } } } void GalileoE1PcpsAmbiguousAcquisitionGSoCTest::stop_queue() { stop = true; } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoCTest, Instantiate) { init(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); EXPECT_STREQ("Galileo_E1_PCPS_Ambiguous_Acquisition", acquisition->implementation().c_str()); } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoCTest, ConnectAndRun) { int fs_in = 4000000; int nsamples = 4*fs_in; struct timeval tv; long long int begin = 0; long long int end = 0; queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); init(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GalileoE1PcpsAmbiguousAcquisitionGSoCTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); init(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_Ambiguous_Acquisition", 1, 1, queue); std::shared_ptr acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(gnss_synchro.Channel_ID); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.00001)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 250)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; ASSERT_NO_THROW( { std::string path = std::string(TEST_PATH); //std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; std::string file = path + "signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(gr_complex), file_name, false); top_block->connect(file_source, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; ASSERT_NO_THROW( { start_queue(); acquisition->init(); acquisition->reset(); acquisition->set_state(1); }) << "Failure starting acquisition" << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; stop_queue(); unsigned long int nsamples = gnss_synchro.Acq_samplestamp_samples; std::cout << "Acquired " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 0=ACQ STOP."; ch_thread.join(); } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc0000644000175000017500000005450612576764164032636 0ustar carlescarles/*! * \file galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GalileoE1PcpsCccwsrAmbiguousAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_synchro.h" #include "galileo_e1_pcps_cccwsr_ambiguous_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" class GalileoE1PcpsCccwsrAmbiguousAcquisitionTest: public ::testing::Test { protected: GalileoE1PcpsCccwsrAmbiguousAcquisitionTest() { factory = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); init(); } ~GalileoE1PcpsCccwsrAmbiguousAcquisitionTest() { } void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0; float max_delay_error_chips = 0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; double Pfa_p; double Pfa_a; }; void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.7"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 4; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.00215"); // Pfa,a = 0.1 config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::wait_message, this); } void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; mean_acq_time_us += (end-begin); process_message(); } } void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); std::cout << std::endl; } } void GalileoE1PcpsCccwsrAmbiguousAcquisitionTest::stop_queue() { stop = true; } TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, Instantiate) { config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); } TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; }) << "Failure running the top_block."<< std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.00001)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->reset(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; //EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } #ifdef OLD_BOOST ASSERT_NO_THROW( { ch_thread.timed_join(boost::posix_time::seconds(1)); }) << "Failure while waiting the queue to stop" << std::endl; #endif #ifndef OLD_BOOST ASSERT_NO_THROW( { ch_thread.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); }) << "Failure while waiting the queue to stop" << std::endl; #endif } } TEST_F(GalileoE1PcpsCccwsrAmbiguousAcquisitionTest, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.00215)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block."<< std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_gnss_synchro(&gnss_synchro); acquisition->init(); acquisition->reset(); acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block."<< std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/gnss_block/rtcm_printer_test.cc0000644000175000017500000000524112576764164022740 0ustar carlescarles/*! * \file rtcm_printer_test.cc * \brief Implements Unit Test for the Rtcm_Printer class. * \author Carles Fernandez-Prades, 2013. cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include "rtcm_printer.h" #include "gps_ephemeris.h" TEST(Rtcm_Printer_Test, Instantiate) { std::string filename = "hello.rtcm"; bool flag_rtcm_tty_port = false; std::string rtcm_dump_devname = "/dev/pts/4"; std::unique_ptr RTCM_printer(new Rtcm_Printer(filename, flag_rtcm_tty_port, rtcm_dump_devname)); } TEST(Rtcm_Printer_Test, Instantiate_and_Run) { std::string file_name = "./gps_ephemeris_rx.xml"; std::map gps_ephemeris_map; try { std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); boost::archive::xml_iarchive xml(ifs); gps_ephemeris_map.clear(); xml >> boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", gps_ephemeris_map); ifs.close(); } catch (std::exception& e) { //LOG(WARNING) << e.what() << "File: " << file_name; //std::cout << "File not found" << std::endl; } std::string filename = "hello.rtcm"; bool flag_rtcm_tty_port = false; std::string rtcm_dump_devname = "/dev/pts/4"; std::unique_ptr RTCM_printer(new Rtcm_Printer(filename, flag_rtcm_tty_port, rtcm_dump_devname)); std::string reference_msg = "D300133ED7D30202980EDEEF34B4BD62AC0941986F33360B98"; std::string testing_msg = RTCM_printer->print_M1005_test(); EXPECT_EQ(reference_msg, testing_msg); } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e5a_tracking_test.cc0000644000175000017500000001352712576764164024266 0ustar carlescarles/*! * \file galileo_e1_dll_pll_veml_tracking_test.cc * \brief This class implements a tracking test for Galileo_E5a_DLL_PLL_Tracking * implementation based on some input parameters. * \author Marc Sales, 2014. marcsales92(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "gnss_block_factory.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_sdr_valve.h" #include "gnss_synchro.h" #include "galileo_e5a_dll_pll_tracking.h" class GalileoE5aTrackingTest: public ::testing::Test { protected: GalileoE5aTrackingTest() { factory = std::make_shared(); config = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GalileoE5aTrackingTest() {} void init(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; }; void GalileoE5aTrackingTest::init() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "5Q"; signal.copy(gnss_synchro.Signal, 2, 0); gnss_synchro.PRN = 11; config->set_property("GNSS-SDR.internal_fs_hz", "32000000"); config->set_property("Tracking_Galileo.item_type", "gr_complex"); config->set_property("Tracking_Galileo.dump", "true"); config->set_property("Tracking_Galileo.dump_filename", "../data/e5a_tracking_ch_"); config->set_property("Tracking_Galileo.implementation", "Galileo_E5a_DLL_PLL_Tracking"); config->set_property("Tracking_Galileo.early_late_space_chips", "0.5"); config->set_property("Tracking_Galileo.order", "2"); config->set_property("Tracking_Galileo.pll_bw_hz_init","20.0"); config->set_property("Tracking_Galileo.pll_bw_hz", "5"); config->set_property("Tracking_Galileo.dll_bw_hz_init","2.0"); config->set_property("Tracking_Galileo.dll_bw_hz", "2"); config->set_property("Tracking_Galileo.ti_ms", "1"); } TEST_F(GalileoE5aTrackingTest, ValidationOfResults) { struct timeval tv; long long int begin = 0; long long int end = 0; int fs_in = 32000000; int nsamples = 32000000*5; init(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Tracking test"); // Example using smart pointers and the block factory std::shared_ptr trk_ = factory->GetBlock(config, "Tracking", "Galileo_E5a_DLL_PLL_Tracking", 1, 1, queue); std::shared_ptr tracking = std::dynamic_pointer_cast(trk_); //REAL gnss_synchro.Acq_delay_samples = 10; // 32 Msps // gnss_synchro.Acq_doppler_hz = 3500; // 32 Msps gnss_synchro.Acq_doppler_hz = 2000; // 500 Hz resolution // gnss_synchro.Acq_samplestamp_samples = 98000; gnss_synchro.Acq_samplestamp_samples = 0; ASSERT_NO_THROW( { tracking->set_channel(gnss_synchro.Channel_ID); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { tracking->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { tracking->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { tracking->connect(top_block); }) << "Failure connecting tracking to the top_block." << std::endl; ASSERT_NO_THROW( { gr::analog::sig_source_c::sptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(Gnss_Synchro)); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, tracking->get_left_block(), 0); top_block->connect(tracking->get_right_block(), 0, sink, 0); }) << "Failure connecting the blocks of tracking test." << std::endl; tracking->start_tracking(); EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1000000 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Tracked " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l1_ca_pcps_multithread_acquisition_gsoc2013_test.cc0000644000175000017500000005176712576764164031456 0ustar carlescarles/*! * \file gps_l1_ca_pcps_multithread_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GpsL1CaPcpsMultithreadAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "configuration_interface.h" #include "gnss_synchro.h" #include "gps_l1_ca_pcps_multithread_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" #include "signal_generator.h" #include "signal_generator.cc" #include "signal_generator_c.h" #include "signal_generator_c.cc" class GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test: public ::testing::Test { protected: GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test() { item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test() { } void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0.0; float max_delay_error_chips = 0.0; unsigned int num_of_realizations = 0; unsigned int realization_counter = 0; unsigned int detection_counter = 0; unsigned int correct_estimation_counter = 0; unsigned int acquired_samples = 0; unsigned int mean_acq_time_us = 0; double mse_doppler = 0.0; double mse_delay = 0.0; double Pd = 0.0; double Pfa_p = 0.0; double Pfa_a = 0.0; }; void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Multithread_Acquisition"); config->set_property("Acquisition.threshold", "0.8"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "G"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "G"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "G"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Multithread_Acquisition"); config->set_property("Acquisition.pfa", "0.1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.bit_transition_flag", "false"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::wait_message, this); } void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; mean_acq_time_us += (end-begin); process_message(); } } void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); std::cout << std::endl; } } void GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test, Instantiate) { config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); } TEST_F(GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } } } TEST_F(GpsL1CaPcpsMultithreadAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; if (i == 0) { std::cout << "Probability of detection = " << Pd << std::endl; std::cout << "Probability of false alarm (satellite present) = " << Pfa_p << std::endl; // std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Probability of false alarm (satellite absent) = " << Pfa_a << std::endl; // std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } } } gnss-sdr-0.0.6/src/tests/gnss_block/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc0000644000175000017500000010133712576764164033357 0ustar carlescarles/*! * \file galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc * \brief This class implements an acquisition test for * GalileoE1PcpsQuickSyncAmbiguousAcquisition class. * \author Damian Miralles, 2014. dmiralles2009@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "gnss_synchro.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" #include "galileo_e1_pcps_quicksync_ambiguous_acquisition.h" DEFINE_double(e1_value_threshold, 0.3, "Value of the threshold for the acquisition"); DEFINE_int32(e1_value_CN0_dB_0, 50, "Value for the CN0_dB_0 in channel 0"); using google::LogMessage; class GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test: public ::testing::Test { protected: GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test() { factory = std::make_shared(); item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); init(); } ~GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test() { } void init(); void config_1(); void config_2(); void config_3(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr factory; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; unsigned int folding_factor = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0.0; float max_delay_error_chips = 0.0; unsigned int num_of_realizations = 0; unsigned int realization_counter; unsigned int detection_counter; unsigned int correct_estimation_counter; unsigned int acquired_samples; unsigned int mean_acq_time_us; double mse_doppler; double mse_delay; double Pd; // Probability of detection double Pfa_p; // Probability of false alarm on present satellite double Pfa_a; // Probability of false alarm on absent satellite double Pmd; // Probability of miss detection std::ofstream pdpfafile; unsigned int miss_detection_counter; bool dump_test_results = false; }; void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; miss_detection_counter = 0; Pmd = 0; } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 8; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.bit_transition_flag","false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "1"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.folding_factor", "2"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 8; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2 / (3 * integration_time_ms * 1e-3); max_delay_error_chips = 0.50; /*Unset this flag to eliminates data logging for the Validation of results probabilities test*/ dump_test_results = true; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_e1_value_CN0_dB_0)); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.bit_transition_flag","false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", std::to_string(FLAGS_e1_value_threshold)); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "125"); config->set_property("Acquisition.folding_factor", "2"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::config_3() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'E'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal, 2, 0); integration_time_ms = 8; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2 / (3 * integration_time_ms * 1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "E"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", std::to_string(FLAGS_e1_value_CN0_dB_0)); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "E"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "E"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "E"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "false");// config->set_property("SignalSource.data_flag", "false");// config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.max_dwells", "1"); config->set_property("Acquisition.bit_transition_flag","false"); config->set_property("Acquisition.implementation", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition"); config->set_property("Acquisition.threshold", "0.2"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "125"); config->set_property("Acquisition.folding_factor", "4"); config->set_property("Acquisition.dump", "false"); } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::start_queue() { stop = false; ch_thread = boost::thread(&GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::wait_message, this); } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec*1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec*1e6 + tv.tv_usec; mean_acq_time_us += (end - begin); process_message(); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples - 5) * 1023.0 / ((double)fs_in * 1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } else if(message == 2 && gnss_synchro.PRN == 10) { /* if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { miss_detection_counter++; } */ miss_detection_counter++; } realization_counter++; std::cout << "Progress: " << round((float)realization_counter / num_of_realizations * 100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= (double)num_of_realizations; mse_doppler /= (double)num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter - correct_estimation_counter) / (double)num_of_realizations; Pmd = (double)miss_detection_counter / (double)num_of_realizations; mean_acq_time_us /= (double)num_of_realizations; stop_queue(); top_block->stop(); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test::stop_queue() { stop = true; } TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, Instantiate) { config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); } TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ConnectAndRun) { LOG(INFO) << "**Start connect and run test"; int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); config_1(); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test."<< std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec * 1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec * 1e6 + tv.tv_usec; }) << "Failure running the top_block."<< std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; LOG(INFO) << "----end connect and run test-----"; LOG(INFO) << "**End connect and run test"; } TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResults) { LOG(INFO) << "Start validation of results test"; config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(0); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 125)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(1); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->reset(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block."<< std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } DLOG(INFO) << "End validation of results test"; } TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResultsWithNoise) { LOG(INFO) << "Start validation of results with noise+interference test"; config_3(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(50); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(5); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); acquisition->reset(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->reset(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } DLOG(INFO) << "End validation of results with noise+interference test"; } TEST_F(GalileoE1PcpsQuickSyncAmbiguousAcquisitionGSoC2014Test, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); std::shared_ptr acq_ = factory->GetBlock(config, "Acquisition", "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition", 1, 1, queue); acquisition = std::dynamic_pointer_cast(acq_); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel."<< std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro."<< std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max."<< std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step."<< std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold."<< std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_gnss_synchro(&gnss_synchro); acquisition->set_local_code(); acquisition->reset(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Estimated probability of miss detection (satellite present) = " << Pmd << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; if(dump_test_results) { std::stringstream filenamepd; filenamepd.str(""); filenamepd << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_e1_value_CN0_dB_0 << "_dBHz.csv"; pdpfafile.open(filenamepd.str().c_str(), std::ios::app | std::ios::out); pdpfafile << FLAGS_e1_value_threshold << "," << Pd << "," << Pfa_p << "," << Pmd << std::endl; pdpfafile.close(); } } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; if(dump_test_results) { std::stringstream filenamepf; filenamepf.str(""); filenamepf << "../data/test_statistics_" << gnss_synchro.System << "_" << gnss_synchro.Signal << "_sat_" << gnss_synchro.PRN << "CN0_dB_0_" << FLAGS_e1_value_CN0_dB_0 << "_dBHz.csv"; pdpfafile.open(filenamepf.str().c_str(), std::ios::app | std::ios::out); pdpfafile << FLAGS_e1_value_threshold << "," << Pfa_a << std::endl; pdpfafile.close(); } } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/gnss_block/gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc0000644000175000017500000005165512576764164030077 0ustar carlescarles/*! * \file gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc * \brief This class implements an acquisition test for * GpsL1CaPcpsTongAcquisition class. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "configuration_interface.h" #include "gnss_synchro.h" #include "gps_l1_ca_pcps_tong_acquisition.h" #include "signal_generator.h" #include "signal_generator_c.h" #include "fir_filter.h" #include "gen_signal_source.h" #include "gnss_sdr_valve.h" class GpsL1CaPcpsTongAcquisitionGSoC2013Test: public ::testing::Test { protected: GpsL1CaPcpsTongAcquisitionGSoC2013Test() { item_size = sizeof(gr_complex); stop = false; message = 0; gnss_synchro = Gnss_Synchro(); } ~GpsL1CaPcpsTongAcquisitionGSoC2013Test() { } void init(); void config_1(); void config_2(); void start_queue(); void wait_message(); void process_message(); void stop_queue(); gr::msg_queue::sptr queue; gr::top_block_sptr top_block; std::shared_ptr acquisition; std::shared_ptr config; Gnss_Synchro gnss_synchro; size_t item_size; concurrent_queue channel_internal_queue; bool stop; int message; boost::thread ch_thread; unsigned int integration_time_ms = 0; unsigned int fs_in = 0; double expected_delay_chips = 0.0; double expected_doppler_hz = 0.0; float max_doppler_error_hz = 0.0; float max_delay_error_chips = 0.0; unsigned int num_of_realizations = 0; unsigned int realization_counter = 0; unsigned int detection_counter = 0; unsigned int correct_estimation_counter = 0; unsigned int acquired_samples = 0; unsigned int mean_acq_time_us = 0; double mse_doppler = 0.0; double mse_delay = 0.0; double Pd = 0.0; double Pfa_p = 0.0; double Pfa_a = 0.0; }; void GpsL1CaPcpsTongAcquisitionGSoC2013Test::init() { message = 0; realization_counter = 0; detection_counter = 0; correct_estimation_counter = 0; acquired_samples = 0; mse_doppler = 0; mse_delay = 0; mean_acq_time_us = 0; Pd = 0; Pfa_p = 0; Pfa_a = 0; } void GpsL1CaPcpsTongAcquisitionGSoC2013Test::config_1() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 1; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "1"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.noise_flag", "false"); config->set_property("SignalSource.data_flag", "false"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Tong_Acquisition"); config->set_property("Acquisition.threshold", "0.8"); config->set_property("Acquisition.tong_init_val", "1"); config->set_property("Acquisition.tong_max_val", "8"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsTongAcquisitionGSoC2013Test::config_2() { gnss_synchro.Channel_ID = 0; gnss_synchro.System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro.Signal,2,0); integration_time_ms = 1; fs_in = 4e6; expected_delay_chips = 600; expected_doppler_hz = 750; max_doppler_error_hz = 2/(3*integration_time_ms*1e-3); max_delay_error_chips = 0.50; num_of_realizations = 100; config = std::make_shared(); config->set_property("GNSS-SDR.internal_fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.fs_hz", std::to_string(fs_in)); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.num_satellites", "4"); config->set_property("SignalSource.system_0", "G"); config->set_property("SignalSource.PRN_0", "10"); config->set_property("SignalSource.CN0_dB_0", "44"); config->set_property("SignalSource.doppler_Hz_0", std::to_string(expected_doppler_hz)); config->set_property("SignalSource.delay_chips_0", std::to_string(expected_delay_chips)); config->set_property("SignalSource.system_1", "G"); config->set_property("SignalSource.PRN_1", "15"); config->set_property("SignalSource.CN0_dB_1", "44"); config->set_property("SignalSource.doppler_Hz_1", "1000"); config->set_property("SignalSource.delay_chips_1", "100"); config->set_property("SignalSource.system_2", "G"); config->set_property("SignalSource.PRN_2", "21"); config->set_property("SignalSource.CN0_dB_2", "44"); config->set_property("SignalSource.doppler_Hz_2", "2000"); config->set_property("SignalSource.delay_chips_2", "200"); config->set_property("SignalSource.system_3", "G"); config->set_property("SignalSource.PRN_3", "22"); config->set_property("SignalSource.CN0_dB_3", "44"); config->set_property("SignalSource.doppler_Hz_3", "3000"); config->set_property("SignalSource.delay_chips_3", "300"); config->set_property("SignalSource.noise_flag", "true"); config->set_property("SignalSource.data_flag", "true"); config->set_property("SignalSource.BW_BB", "0.97"); config->set_property("InputFilter.implementation", "Fir_Filter"); config->set_property("InputFilter.input_item_type", "gr_complex"); config->set_property("InputFilter.output_item_type", "gr_complex"); config->set_property("InputFilter.taps_item_type", "float"); config->set_property("InputFilter.number_of_taps", "11"); config->set_property("InputFilter.number_of_bands", "2"); config->set_property("InputFilter.band1_begin", "0.0"); config->set_property("InputFilter.band1_end", "0.97"); config->set_property("InputFilter.band2_begin", "0.98"); config->set_property("InputFilter.band2_end", "1.0"); config->set_property("InputFilter.ampl1_begin", "1.0"); config->set_property("InputFilter.ampl1_end", "1.0"); config->set_property("InputFilter.ampl2_begin", "0.0"); config->set_property("InputFilter.ampl2_end", "0.0"); config->set_property("InputFilter.band1_error", "1.0"); config->set_property("InputFilter.band2_error", "1.0"); config->set_property("InputFilter.filter_type", "bandpass"); config->set_property("InputFilter.grid_density", "16"); config->set_property("Acquisition.item_type", "gr_complex"); config->set_property("Acquisition.if", "0"); config->set_property("Acquisition.coherent_integration_time_ms", std::to_string(integration_time_ms)); config->set_property("Acquisition.implementation", "GPS_L1_CA_PCPS_Tong_Acquisition"); config->set_property("Acquisition.threshold", "0.00108"); // Pfa,a = 0.1 config->set_property("Acquisition.tong_init_val", "1"); config->set_property("Acquisition.tong_max_val", "8"); config->set_property("Acquisition.doppler_max", "10000"); config->set_property("Acquisition.doppler_step", "250"); config->set_property("Acquisition.dump", "false"); } void GpsL1CaPcpsTongAcquisitionGSoC2013Test::start_queue() { stop = false; ch_thread = boost::thread(&GpsL1CaPcpsTongAcquisitionGSoC2013Test::wait_message, this); } void GpsL1CaPcpsTongAcquisitionGSoC2013Test::wait_message() { struct timeval tv; long long int begin = 0; long long int end = 0; while (!stop) { acquisition->reset(); gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; channel_internal_queue.wait_and_pop(message); gettimeofday(&tv, NULL); end = tv.tv_sec*1e6 + tv.tv_usec; mean_acq_time_us += (end - begin); process_message(); } } void GpsL1CaPcpsTongAcquisitionGSoC2013Test::process_message() { if (message == 1) { detection_counter++; // The term -5 is here to correct the additional delay introduced by the FIR filter double delay_error_chips = std::abs((double)expected_delay_chips - (double)(gnss_synchro.Acq_delay_samples-5)*1023.0/((double)fs_in*1e-3)); double doppler_error_hz = std::abs(expected_doppler_hz - gnss_synchro.Acq_doppler_hz); mse_delay += std::pow(delay_error_chips, 2); mse_doppler += std::pow(doppler_error_hz, 2); if ((delay_error_chips < max_delay_error_chips) && (doppler_error_hz < max_doppler_error_hz)) { correct_estimation_counter++; } } realization_counter++; std::cout << "Progress: " << round((float)realization_counter/num_of_realizations*100) << "% \r" << std::flush; if (realization_counter == num_of_realizations) { mse_delay /= num_of_realizations; mse_doppler /= num_of_realizations; Pd = (double)correct_estimation_counter / (double)num_of_realizations; Pfa_a = (double)detection_counter / (double)num_of_realizations; Pfa_p = (double)(detection_counter-correct_estimation_counter) / (double)num_of_realizations; mean_acq_time_us /= num_of_realizations; stop_queue(); top_block->stop(); std::cout << std::endl; } } void GpsL1CaPcpsTongAcquisitionGSoC2013Test::stop_queue() { stop = true; } TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, Instantiate) { config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); } TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, ConnectAndRun) { int nsamples = floor(fs_in*integration_time_ms*1e-3); struct timeval tv; long long int begin = 0; long long int end = 0; top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); config_1(); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->connect(top_block); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000, 1, gr_complex(0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1e6 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1e6 + tv.tv_usec; }) << "Failure running the top_block." << std::endl; std::cout << "Processed " << nsamples << " samples in " << (end - begin) << " microseconds" << std::endl; } TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, ValidationOfResults) { config_1(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; // i = 0 --> satellite in acquisition is visible // i = 1 --> satellite in acquisition is not visible for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { EXPECT_EQ(1, message) << "Acquisition failure. Expected message: 1=ACQ SUCCESS."; if (message == 1) { EXPECT_EQ((unsigned int)1, correct_estimation_counter) << "Acquisition failure. Incorrect parameters estimation."; } } else if (i == 1) { EXPECT_EQ(2, message) << "Acquisition failure. Expected message: 2=ACQ FAIL."; } ch_thread.join(); } } TEST_F(GpsL1CaPcpsTongAcquisitionGSoC2013Test, ValidationOfResultsProbabilities) { config_2(); top_block = gr::make_top_block("Acquisition test"); queue = gr::msg_queue::make(0); acquisition = std::make_shared(config.get(), "Acquisition", 1, 1, queue); ASSERT_NO_THROW( { acquisition->set_channel(1); }) << "Failure setting channel." << std::endl; ASSERT_NO_THROW( { acquisition->set_gnss_synchro(&gnss_synchro); }) << "Failure setting gnss_synchro." << std::endl; ASSERT_NO_THROW( { acquisition->set_channel_queue(&channel_internal_queue); }) << "Failure setting channel_internal_queue." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_max(config->property("Acquisition.doppler_max", 10000)); }) << "Failure setting doppler_max." << std::endl; ASSERT_NO_THROW( { acquisition->set_doppler_step(config->property("Acquisition.doppler_step", 500)); }) << "Failure setting doppler_step." << std::endl; ASSERT_NO_THROW( { acquisition->set_threshold(config->property("Acquisition.threshold", 0.0)); }) << "Failure setting threshold." << std::endl; ASSERT_NO_THROW( { acquisition->connect(top_block); }) << "Failure connecting acquisition to the top_block." << std::endl; acquisition->init(); ASSERT_NO_THROW( { boost::shared_ptr signal_source; SignalGenerator* signal_generator = new SignalGenerator(config.get(), "SignalSource", 0, 1, queue); FirFilter* filter = new FirFilter(config.get(), "InputFilter", 1, 1, queue); signal_source.reset(new GenSignalSource(config.get(), signal_generator, filter, "SignalSource", queue)); signal_source->connect(top_block); top_block->connect(signal_source->get_right_block(), 0, acquisition->get_left_block(), 0); }) << "Failure connecting the blocks of acquisition test." << std::endl; std::cout << "Probability of false alarm (target) = " << 0.1 << std::endl; // i = 0 --> satellite in acquisition is visible (prob of detection and prob of detection with wrong estimation) // i = 1 --> satellite in acquisition is not visible (prob of false detection) for (unsigned int i = 0; i < 2; i++) { init(); if (i == 0) { gnss_synchro.PRN = 10; // This satellite is visible } else if (i == 1) { gnss_synchro.PRN = 20; // This satellite is not visible } acquisition->set_local_code(); acquisition->set_state(1); start_queue(); EXPECT_NO_THROW( { top_block->run(); // Start threads and wait }) << "Failure running the top_block." << std::endl; stop_queue(); if (i == 0) { std::cout << "Estimated probability of detection = " << Pd << std::endl; std::cout << "Estimated probability of false alarm (satellite present) = " << Pfa_p << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } else if (i == 1) { std::cout << "Estimated probability of false alarm (satellite absent) = " << Pfa_a << std::endl; std::cout << "Mean acq time = " << mean_acq_time_us << " microseconds." << std::endl; } ch_thread.join(); } } gnss-sdr-0.0.6/src/tests/string_converter/0000755000175000017500000000000012576764164020131 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/string_converter/string_converter_test.cc0000644000175000017500000000453412576764164025102 0ustar carlescarles/*! * \file string_converter_test.cc * \brief This file implements unit tests for the StringConverter class. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "string_converter.h" TEST(String_Converter_Test, StringToBool) { std::unique_ptr converter(new StringConverter()); bool conversion_result = converter->convert("false", true); bool expected_false = false; EXPECT_EQ(expected_false, conversion_result); } TEST(String_Converter_Test, StringToSizeT) { // Example using a raw pointer StringConverter* converter; converter = new StringConverter(); size_t conversion_result = converter->convert("8", 1); unsigned int expected8 = 8; EXPECT_EQ(expected8, conversion_result); delete converter; } TEST(String_Converter_Test, StringToBoolFail) { std::unique_ptr converter(new StringConverter()); bool conversion_result = converter->convert("lse", true); bool expected_true = true; EXPECT_EQ(expected_true, conversion_result); } TEST(String_Converter_Test, StringToSizeTFail) { std::unique_ptr converter(new StringConverter()); size_t conversion_result = converter->convert("false", 1); unsigned int expected1 = 1; EXPECT_EQ(expected1, conversion_result); } gnss-sdr-0.0.6/src/tests/CMakeLists.txt0000644000175000017500000003432212576764164017300 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # if(EXISTS $ENV{GTEST_DIR}) set(GTEST_DIR_LOCAL $ENV{GTEST_DIR}) endif(EXISTS $ENV{GTEST_DIR}) if(GTEST_DIR) set(GTEST_DIR_LOCAL ${GTEST_DIR}) endif(GTEST_DIR) if(NOT GTEST_DIR_LOCAL) set(GTEST_DIR_LOCAL false) else() set(GTEST_DIR_LOCAL true) endif(NOT GTEST_DIR_LOCAL) if(GTEST_INCLUDE_DIRS) set(GTEST_DIR_LOCAL true) endif(GTEST_INCLUDE_DIRS) if(NOT ${GTEST_DIR_LOCAL}) # if GTEST_DIR is not defined, we download and build it set(gtest_RELEASE 1.7.0) ExternalProject_Add( gtest-${gtest_RELEASE} GIT_REPOSITORY https://github.com/google/googletest GIT_TAG release-${gtest_RELEASE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../thirdparty/gtest/gtest-${gtest_RELEASE} BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../gtest-${gtest_RELEASE} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) # Set up variables # Set recently downloaded and build Googletest root folder set(GTEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../thirdparty/gtest/gtest-${gtest_RELEASE}") # Source code ExternalProject_Get_Property(gtest-${gtest_RELEASE} source_dir) set(GTEST_INCLUDE_DIR ${source_dir}/include) set(GTEST_INCLUDE_DIRECTORIES ${GTEST_DIR}/include ${GTEST_DIR} ${GTEST_DIR}/src) # Library ExternalProject_Get_Property(gtest-${gtest_RELEASE} binary_dir) if(OS_IS_MACOSX) if(CMAKE_GENERATOR STREQUAL Xcode) set(binary_dir "${binary_dir}/Debug") endif(CMAKE_GENERATOR STREQUAL Xcode) endif(OS_IS_MACOSX) set(GTEST_LIBRARY_PATH "${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a;${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main.a") set(GTEST_LIBRARY gtest-${gtest_RELEASE}) set(GTEST_LIBRARIES ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main.a ) set(GTEST_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../gtest-${gtest_RELEASE}") else(NOT ${GTEST_DIR_LOCAL}) if(GTEST_INCLUDE_DIRS) set(GTEST_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIRS} ${LIBGTEST_DEV_DIR}) add_library(gtest ${LIBGTEST_DEV_DIR}/src/gtest-all.cc ${LIBGTEST_DEV_DIR}/src/gtest_main.cc) set(GTEST_LIBRARIES gtest) else(GTEST_INCLUDE_DIRS) # If the variable GTEST_DIR is defined, we use the existing Googletest set(GTEST_DIR $ENV{GTEST_DIR}) set(GTEST_INCLUDE_DIRECTORIES ${GTEST_DIR}/include ${GTEST_DIR} ${GTEST_DIR}/src) add_library(gtest ${GTEST_DIR}/src/gtest-all.cc ${GTEST_DIR}/src/gtest_main.cc) set(GTEST_LIBRARIES gtest) endif(GTEST_INCLUDE_DIRS) endif(NOT ${GTEST_DIR_LOCAL}) set(GNSS_SDR_TEST_OPTIONAL_LIBS "") set(GNSS_SDR_TEST_OPTIONAL_HEADERS "") if(ENABLE_GPERFTOOLS) if(GPERFTOOLS_FOUND) set(GNSS_SDR_TEST_OPTIONAL_LIBS "${GNSS_SDR_TEST_OPTIONAL_LIBS};${GPERFTOOLS_LIBRARIES}") set(GNSS_SDR_TEST_OPTIONAL_HEADERS "${GNSS_SDR_TEST_OPTIONAL_HEADERS};${GPERFTOOLS_INCLUDE_DIR}") endif(GPERFTOOLS_FOUND) endif(ENABLE_GPERFTOOLS) if(Boost_VERSION LESS 105000) add_definitions(-DOLD_BOOST=1) endif(Boost_VERSION LESS 105000) include_directories( ${GTEST_INCLUDE_DIRECTORIES} ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/core/libs ${CMAKE_SOURCE_DIR}/src/core/libs/supl ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${CMAKE_SOURCE_DIR}/src/algorithms/data_type_adapter/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/data_type_adapter/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/resampler/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/channel/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/channel/libs ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/libs ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/libs ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/signal_generator/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/signal_generator/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/output_filter/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ARMADILLO_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ${VOLK_GNSSSDR_INCLUDE_DIRS} ${GNSS_SDR_TEST_OPTIONAL_HEADERS} ${GNSS_SDR_TEST_OPTIONAL_HEADERS} ) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CLANG_FLAGS "-stdlib=libc++ -std=c++11 -lc++") endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(OPENCL_FOUND) add_definitions(-DOPENCL_BLOCKS_TEST=1) endif(OPENCL_FOUND) add_definitions(-DTEST_PATH="${CMAKE_SOURCE_DIR}/src/tests/") add_executable(run_tests ${CMAKE_CURRENT_SOURCE_DIR}/test_main.cc) add_custom_command(TARGET run_tests POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_SOURCE_DIR}/install/$) target_link_libraries(run_tests ${CLANG_FLAGS} ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} ${GNURADIO_ANALOG_LIBRARIES} ${ARMADILLO_LIBRARIES} ${VOLK_LIBRARIES} gnss_sp_libs gnss_rx gnss_system_parameters signal_generator_blocks signal_generator_adapters out_adapters pvt_gr_blocks ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ${GNSS_SDR_TEST_OPTIONAL_LIBS} ) ######################################################### # Adding Tests to Ctest ######################################################### set(CMAKE_CTEST_COMMAND ctest -V) add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) add_executable(control_thread_test ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc ${CMAKE_CURRENT_SOURCE_DIR}/control_thread/control_message_factory_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/control_thread/control_thread_test.cc ) if(NOT ${ENABLE_PACKAGING}) set_property(TARGET control_thread_test PROPERTY EXCLUDE_FROM_ALL TRUE) endif(NOT ${ENABLE_PACKAGING}) target_link_libraries(control_thread_test ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} gnss_sp_libs gnss_system_parameters gnss_rx ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ) add_test(control_thread_test control_thread_test) if(NOT ${GTEST_DIR_LOCAL}) add_dependencies(control_thread_test gtest-${gtest_RELEASE}) else(NOT ${GTEST_DIR_LOCAL}) add_dependencies(control_thread_test gtest) endif(NOT ${GTEST_DIR_LOCAL}) set_property(TEST control_thread_test PROPERTY TIMEOUT 30) add_executable(flowgraph_test ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc ${CMAKE_CURRENT_SOURCE_DIR}/flowgraph/gnss_flowgraph_test.cc ) if(NOT ${ENABLE_PACKAGING}) set_property(TARGET flowgraph_test PROPERTY EXCLUDE_FROM_ALL TRUE) endif(NOT ${ENABLE_PACKAGING}) target_link_libraries(flowgraph_test ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx gnss_system_parameters ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ) add_test(flowgraph_test flowgraph_test) if(NOT ${GTEST_DIR_LOCAL}) add_dependencies(flowgraph_test gtest-${gtest_RELEASE}) else(NOT ${GTEST_DIR_LOCAL}) add_dependencies(flowgraph_test gtest) endif(NOT ${GTEST_DIR_LOCAL}) set_property(TEST flowgraph_test PROPERTY TIMEOUT 30) add_executable(gnss_block_test ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/file_signal_source_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/fir_filter_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/flowgraph/pass_through_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/file_output_filter_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/gnss_block_factory_test.cc ) if(NOT ${ENABLE_PACKAGING}) set_property(TARGET gnss_block_test PROPERTY EXCLUDE_FROM_ALL TRUE) endif(NOT ${ENABLE_PACKAGING}) target_link_libraries(gnss_block_test ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} ${GNURADIO_ANALOG_LIBRARIES} gnss_sp_libs gnss_rx gnss_system_parameters # signal_generator_blocks out_adapters ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ) add_test(gnss_block_test gnss_block_test) if(NOT ${GTEST_DIR_LOCAL}) add_dependencies(gnss_block_test gtest-${gtest_RELEASE}) else(NOT ${GTEST_DIR_LOCAL}) add_dependencies(gnss_block_test gtest) endif(NOT ${GTEST_DIR_LOCAL}) # add_executable(acq_test ${EXCLUDE} # ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc # ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/gps_l1_ca_pcps_acquisition_test.cc # ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/galileo_e1_pcps_ambiguous_acquisition_test.cc # ) # target_link_libraries(acq_test ${Boost_LIBRARIES} # ${GFLAGS_LIBS} # ${GLOG_LIBRARIES} # ${GTEST_LIBRARIES} # ${GNURADIO_RUNTIME_LIBRARIES} # ${GNURADIO_BLOCKS_LIBRARIES} # ${GNURADIO_FILTER_LIBRARIES} # ${GNURADIO_ANALOG_LIBRARIES} # gnss_sp_libs # gnss_rx # gnss_system_parameters # signal_generator_blocks # out_adapters # ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} # ) # add_test(acq_test acq_test) add_executable(trk_test ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/galileo_e1_dll_pll_veml_tracking_test.cc ) if(NOT ${ENABLE_PACKAGING}) set_property(TARGET trk_test PROPERTY EXCLUDE_FROM_ALL TRUE) endif(NOT ${ENABLE_PACKAGING}) target_link_libraries(trk_test ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} ${GNURADIO_ANALOG_LIBRARIES} gnss_sp_libs gnss_rx gnss_system_parameters signal_generator_blocks out_adapters ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ) add_test(trk_test trk_test) if(NOT ${GTEST_DIR_LOCAL}) add_dependencies(trk_test gtest-${gtest_RELEASE}) else(NOT ${GTEST_DIR_LOCAL}) add_dependencies(trk_test gtest) endif(NOT ${GTEST_DIR_LOCAL}) add_dependencies(check control_thread_test flowgraph_test gnss_block_test trk_test) gnss-sdr-0.0.6/src/tests/gnuradio_block/0000755000175000017500000000000012576764164017516 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/gnuradio_block/gnss_sdr_valve_test.cc0000644000175000017500000000427412576764164024112 0ustar carlescarles/*! * \file gnss_sdr_valve_test.cc * \brief This file implements unit tests for the valve custom block. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include "gnss_sdr_valve.h" TEST(Valve_Test, CheckEventSentAfter100Samples) { gr::msg_queue::sptr queue = gr::msg_queue::make(0); gr::top_block_sptr top_block = gr::make_top_block("gnss_sdr_valve_test"); gr::analog::sig_source_f::sptr source = gr::analog::sig_source_f::make(100, gr::analog::GR_CONST_WAVE, 100, 1, 0); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(float), 100, queue); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(float)); unsigned int expected0 = 0; EXPECT_EQ(expected0, queue->count()); top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, sink, 0); top_block->run(); top_block->stop(); unsigned int expected1 = 1; EXPECT_EQ(expected1, queue->count()); } gnss-sdr-0.0.6/src/tests/gnuradio_block/direct_resampler_conditioner_cc_test.cc0000644000175000017500000000650512576764164027460 0ustar carlescarles /*! * \file direct_resampler_conditioner_cc_test.cc * \brief Executes a resampler based on some input parameters. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include "gnss_sdr_valve.h" #include "direct_resampler_conditioner_cc.h" TEST(Direct_Resampler_Conditioner_Cc_Test, InstantiationAndRunTest) { double fs_in = 8000000.0; // Input sampling frequency in Hz double fs_out = 4000000.0; // sampling freuqncy of the resampled signal in Hz struct timeval tv; int nsamples = 1000000; //Number of samples to be computed gr::msg_queue::sptr queue = gr::msg_queue::make(0); gr::top_block_sptr top_block = gr::make_top_block("direct_resampler_conditioner_cc_test"); boost::shared_ptr source = gr::analog::sig_source_c::make(fs_in, gr::analog::GR_SIN_WAVE, 1000.0, 1.0, gr_complex(0.0)); boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue); long long int begin = 0; long long int end = 0; EXPECT_NO_THROW({ direct_resampler_conditioner_cc_sptr resampler = direct_resampler_make_conditioner_cc(fs_in, fs_out); }) << "Failure in instantiation of direct_resampler_conditioner."; direct_resampler_conditioner_cc_sptr resampler = direct_resampler_make_conditioner_cc(fs_in, fs_out); gr::blocks::null_sink::sptr sink = gr::blocks::null_sink::make(sizeof(gr_complex)); EXPECT_NO_THROW( { top_block->connect(source, 0, valve, 0); top_block->connect(valve, 0, resampler, 0); top_block->connect(resampler, 0, sink, 0); }) << "Connection failure of direct_resampler_conditioner."; EXPECT_NO_THROW( { gettimeofday(&tv, NULL); begin = tv.tv_sec *1000000 + tv.tv_usec; top_block->run(); // Start threads and wait gettimeofday(&tv, NULL); end = tv.tv_sec *1000000 + tv.tv_usec; top_block->stop(); }) << "Failure running direct_resampler_conditioner."; std::cout << "Resampled " << nsamples << " samples in " << (end-begin) << " microseconds" << std::endl; } gnss-sdr-0.0.6/src/tests/configuration/0000755000175000017500000000000012576764164017403 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/configuration/file_configuration_test.cc0000644000175000017500000000530312576764164024620 0ustar carlescarles/*! * \file file_configuration_test.cc * \brief This file implements tests for the file_configuration. * \author Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include "file_configuration.h" TEST(File_Configuration_Test, OverridedProperties) { std::string path = std::string(TEST_PATH); std::string filename = path + "data/config_file_sample.txt"; //std::shared_ptr configuration = std::make_shared(filename); std::unique_ptr configuration(new FileConfiguration(filename)); std::string default_value = "default_value"; std::string value = configuration->property("NotThere", default_value); EXPECT_STREQ("default_value", value.c_str()); configuration->set_property("NotThere", "Yes!"); value = configuration->property("NotThere", default_value); EXPECT_STREQ("Yes!", value.c_str()); } TEST(File_Configuration_Test, LoadFromNonExistentFile) { std::unique_ptr configuration(new FileConfiguration("./i_dont_exist.conf")); std::string default_value = "default_value"; std::string value = configuration->property("whatever.whatever", default_value); EXPECT_STREQ("default_value", value.c_str()); } TEST(File_Configuration_Test, PropertyDoesNotExist) { std::string path = std::string(TEST_PATH); std::string filename = path + "data/config_file_sample.txt"; std::unique_ptr configuration(new FileConfiguration(filename)); std::string default_value = "default_value"; std::string value = configuration->property("whatever.whatever", default_value); EXPECT_STREQ("default_value", value.c_str()); } gnss-sdr-0.0.6/src/tests/configuration/in_memory_configuration_test.cc0000644000175000017500000001167612576764164025711 0ustar carlescarles/*! * \file in_memory_configuration_test.cc * \brief This file implements tests for the in_memory_configuration. * \author Carles Fernandez-Prades, 2013. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "configuration_interface.h" #include "in_memory_configuration.h" TEST(InMemoryConfiguration, IsPresent) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); EXPECT_FALSE(configuration->is_present("NotThere")); configuration->set_property("NotThere", "Yes!"); EXPECT_TRUE(configuration->is_present("NotThere")); } TEST(InMemoryConfiguration, StoreAndRetrieve) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); configuration->set_property("Foo.property1", "value"); std::string default_value = "default_value"; std::string value = configuration->property("Foo.property1", default_value); EXPECT_STREQ("value", value.c_str()); } TEST(InMemoryConfiguration, NoStoringAndRetrieve) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); std::string default_value = "default_value"; std::string value = configuration->property("Foo.property1", default_value); EXPECT_STREQ("default_value", value.c_str()); } TEST(InMemoryConfiguration, RetrieveBool) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); configuration->set_property("Foo.property1", "true"); bool value = configuration->property("Foo.property1", false); bool expectedtrue = true; EXPECT_EQ(expectedtrue, value); } TEST(InMemoryConfiguration, RetrieveBoolFail) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); configuration->set_property("Foo.property1", "tru"); bool value = configuration->property("Foo.property1", false); bool expectedfalse = false; EXPECT_EQ(expectedfalse, value); } TEST(InMemoryConfiguration, RetrieveBoolNoDefine) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); bool value = configuration->property("Foo.property1", false); bool expectedfalse = false; EXPECT_EQ(expectedfalse, value); } TEST(InMemoryConfiguration, RetrieveSizeT) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); configuration->set_property("Foo.property1", "8"); unsigned int value = configuration->property("Foo.property1", 4); unsigned int expected8 = 8; EXPECT_EQ(expected8, value); } TEST(InMemoryConfiguration, RetrieveSizeTFail) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); configuration->set_property("Foo.property1", "true"); unsigned int value = configuration->property("Foo.property1", 4); unsigned int expected4 = 4; EXPECT_EQ(expected4, value); } TEST(InMemoryConfiguration, RetrieveSizeTNoDefine) { //std::shared_ptr configuration = std::make_shared(); std::unique_ptr configuration(new InMemoryConfiguration); unsigned int value = configuration->property("Foo.property1", 4); unsigned int expected4 = 4; EXPECT_EQ(expected4, value); } gnss-sdr-0.0.6/src/tests/control_thread/0000755000175000017500000000000012576764164017543 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/control_thread/control_thread_test.cc0000644000175000017500000001763412576764164024133 0ustar carlescarles/*! * \file control_thread_test.cc * \brief This file implements tests for the ControlThread. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Carles Fernandez-Prades, 2013. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #include "control_thread.h" #include "in_memory_configuration.h" #include "control_message_factory.h" TEST(Control_Thread_Test, InstantiateRunControlMessages) { std::shared_ptr config = std::make_shared(); config->set_property("SignalSource.implementation", "File_Signal_Source"); std::string path = std::string(TEST_PATH); std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; const char * file_name = file.c_str(); config->set_property("SignalSource.filename", file_name); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.sampling_frequency", "4000000"); config->set_property("SignalSource.repeat", "true"); config->set_property("SignalConditioner.implementation", "Pass_Through"); config->set_property("SignalConditioner.item_type", "gr_complex"); config->set_property("Channels_GPS.count", "2"); config->set_property("Channels_Galileo.count", "0"); config->set_property("Channels.in_acquisition", "1"); config->set_property("Channel.system", "GPS"); config->set_property("Channel.signal", "1C"); config->set_property("Acquisition_GPS.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_GPS.threshold", "1"); config->set_property("Acquisition_GPS.doppler_max", "5000"); config->set_property("Acquisition_GPS.doppler_min", "-5000"); config->set_property("Tracking_GPS.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_GPS.item_type", "gr_complex"); config->set_property("TelemetryDecoder_GPS.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_GPS.item_type", "gr_complex"); config->set_property("Observables.implementation", "GPS_L1_CA_Observables"); config->set_property("Observables.item_type", "gr_complex"); config->set_property("PVT.implementation", "GPS_L1_CA_PVT"); config->set_property("PVT.item_type", "gr_complex"); config->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); config->set_property("OutputFilter.item_type", "gr_complex"); std::shared_ptr control_thread = std::make_shared(config); gr::msg_queue::sptr control_queue = gr::msg_queue::make(0); std::unique_ptr control_msg_factory(new ControlMessageFactory()); control_queue->handle(control_msg_factory->GetQueueMessage(0,0)); control_queue->handle(control_msg_factory->GetQueueMessage(1,0)); control_queue->handle(control_msg_factory->GetQueueMessage(200,0)); control_thread->set_control_queue(control_queue); try { control_thread->run(); } catch( boost::exception & e ) { std::cout << "Boost exception: " << boost::diagnostic_information(e); } catch(std::exception const& ex) { std::cout << "STD exception: " << ex.what(); } unsigned int expected3 = 3; unsigned int expected1 = 1; EXPECT_EQ(expected3, control_thread->processed_control_messages()); EXPECT_EQ(expected1, control_thread->applied_actions()); } TEST(Control_Thread_Test, InstantiateRunControlMessages2) { std::shared_ptr config = std::make_shared(); config->set_property("SignalSource.implementation", "File_Signal_Source"); std::string path = std::string(TEST_PATH); std::string file = path + "signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat"; const char * file_name = file.c_str(); config->set_property("SignalSource.filename", file_name); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.sampling_frequency", "4000000"); config->set_property("SignalSource.repeat", "true"); config->set_property("SignalConditioner.implementation", "Pass_Through"); config->set_property("SignalConditioner.item_type", "gr_complex"); config->set_property("Channels_GPS.count", "4"); config->set_property("Channels_Galileo.count", "0"); config->set_property("Channels.in_acquisition", "1"); config->set_property("Channel.system", "GPS"); config->set_property("Channel.signal", "1C"); config->set_property("Acquisition_GPS.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_GPS.threshold", "1"); config->set_property("Acquisition_GPS.doppler_max", "5000"); config->set_property("Acquisition_GPS.doppler_min", "-5000"); config->set_property("Tracking_GPS.implementation", "GPS_L1_CA_DLL_FLL_PLL_Tracking"); config->set_property("Tracking_GPS.item_type", "gr_complex"); config->set_property("TelemetryDecoder_GPS.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_GPS.item_type", "gr_complex"); config->set_property("Observables.implementation", "GPS_L1_CA_Observables"); config->set_property("Observables.item_type", "gr_complex"); config->set_property("PVT.implementation", "GPS_L1_CA_PVT"); config->set_property("PVT.item_type", "gr_complex"); config->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); config->set_property("OutputFilter.item_type", "gr_complex"); std::unique_ptr control_thread2(new ControlThread(config)); gr::msg_queue::sptr control_queue2 = gr::msg_queue::make(0); std::unique_ptr control_msg_factory2(new ControlMessageFactory()); control_queue2->handle(control_msg_factory2->GetQueueMessage(0,0)); control_queue2->handle(control_msg_factory2->GetQueueMessage(2,0)); control_queue2->handle(control_msg_factory2->GetQueueMessage(1,0)); control_queue2->handle(control_msg_factory2->GetQueueMessage(3,0)); control_queue2->handle(control_msg_factory2->GetQueueMessage(200,0)); control_thread2->set_control_queue(control_queue2); try { control_thread2->run(); } catch( boost::exception & e ) { std::cout << "Boost exception: " << boost::diagnostic_information(e); } catch(std::exception const& ex) { std::cout << "STD exception: " << ex.what(); } unsigned int expected5 = 5; unsigned int expected1 = 1; EXPECT_EQ(expected5, control_thread2->processed_control_messages()); EXPECT_EQ(expected1, control_thread2->applied_actions()); } gnss-sdr-0.0.6/src/tests/control_thread/control_message_factory_test.cc0000644000175000017500000000670412576764164026033 0ustar carlescarles/*! * \file control message_factory_test.cc * \brief This file implements tests for the ControlMessageFactory. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include "control_message_factory.h" TEST(Control_Message_Factory_Test, GetQueueMessage) { std::shared_ptr factory = std::make_shared(); gr::message::sptr queue_message = factory->GetQueueMessage(0, 0); std::shared_ptr control_message = std::make_shared(); unsigned int expected0 = 0; EXPECT_EQ(expected0, control_message->who); EXPECT_EQ(expected0, control_message->what); EXPECT_EQ(sizeof(ControlMessage), queue_message->length()); } TEST(Control_Message_Factory_Test, GetControlMessages) { std::shared_ptr factory = std::make_shared(); gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage)); std::shared_ptr control_message = std::make_shared(); control_message->who = 1; control_message->what = 4; memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); std::shared_ptr>> control_messages = factory->GetControlMessages(queue_message); unsigned int expected1 = 1; unsigned int expected4 = 4; EXPECT_EQ(expected1, control_messages->size()); EXPECT_EQ(expected1, control_messages->at(0)->who); EXPECT_EQ(expected4, control_messages->at(0)->what); } /* TEST(Control_Message_Factory_Test, GetControlMessagesWrongSize) { std::shared_ptr factory = std::make_shared(); std::shared_ptr control_message = std::make_shared(); control_message->who = 1; control_message->what = 4; int another_int = 10; gr::message::sptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage) + sizeof(int)); memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); memcpy(queue_message->msg() + sizeof(ControlMessage), &another_int, sizeof(int)); std::shared_ptr>> control_messages = factory->GetControlMessages(queue_message); unsigned int expected0 = 0; EXPECT_EQ(expected0, control_messages->size()); } */ gnss-sdr-0.0.6/src/tests/data/0000755000175000017500000000000012576764164015445 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/data/config_file_sample.txt0000644000175000017500000000116712576764164022020 0ustar carlescarles; Sample for a configuration file for GNS-SDR [GNSS-SDR] Foo.param1=value SignalSource.implementation=FileSignalSource SignalSource.filename=/Users/carlesfernandez/Documents/workspace/gnss-sdr/trunk/data/sc2_d16.dat SignalSource.item_size=4 SignalSource.repeat=false SignalConditioner.implementation=Pass_Through SignalConditioner.item_type=float SignalConditioner.vector_size=1 Channels.count=1 Channel1.implementation=Pass_Through Channel1.item_type=float Channel1.vector_size=1 PVT.implementation=Pass_Through PVT.item_type=float PVT.vector_size=1 OutputFilter.implementation=NullSinkOutputFilter OuputFilter.item_size=4 gnss-sdr-0.0.6/src/tests/data/gps_l2c_m_prn7_5msps.dat0000644000175000017500003641100012576764164022106 0ustar carlescarles??????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t1 t1 t1 t1"t"t"t"t t t t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BI??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII BJ BJ BJ BJKKKKyL?yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?ybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?JmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylyl>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szTsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վsc>ZZZZby>by>by>bZ>aZa?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?K?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;?ɻ?21 ?21 ?21 ?21 ?;?;?;?;IIIIɖɖɖɖC ɼC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs嚠rŕrŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Ydu3Ydu3scscscscZb?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??ISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t? t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?XXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I) ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ??PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R??3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N??M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?????;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmJmmmm^lþ^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZ*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*F?eG??eG??eG??eG??H??H??H??H??I??I?II BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ?PZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)ƾXkþ^lþ^lþ^lþ^lmmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s? t t t t"t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?Tsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?}}}}s$~s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?Ć>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վ?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>mu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,,=,=,=)I<)I<)I<)Itt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??MyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKK?K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R?3R??IS??IS??IS??IS??S??S??S??S??S?91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վn?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>scsc?sc?sc?sc?Z^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yLK?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZZsc>sc>sc>sc>Ydu3>Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?lyl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}tt}tt}tt}:}@:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvv?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]]]S-]S-]S-]S-]a\Ba\Ba\Ba\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHH??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?yݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmm>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:~:~:~XXXX0/0/0/0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>aa?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?ISIS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>szTszTz9Zz9Zz9Zz9Zy\`y\`y\`y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>vvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>mmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H0H////,,,,=?I<)?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO?zOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_-'_!F`!F`!F`!F`aaaaZ>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝmuݝmu"u"u"u"uMvMvMvMv>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T?91T?91T?9U? U? U? U? V?k V?k V?k Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZsc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u">u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mNmNmN/0/0/0/0XXXX?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~=սɛ~=սɛ~=սɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕr?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>socsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO?zOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybyb>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?Sɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>vv?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>RrRr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H??H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>ylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?aaZaZaZaZaybybybybZf?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? ZҾei ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMv>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?xSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I)I) ɼC ~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>a>a>a>a>a>!F`>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9ZszT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=?0H?0H?/?/?/?/?,?,?,?,)I<)I<)I<)I:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>MvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]?S-]S-]S-]]]]]']^']^']^']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkg>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆ>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?//,,,,I)I)I)I) }>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?T>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kgھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ?PZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eO>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?ھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xl>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< :}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL??K?K?K?K B?J B?J B?J B?J?I?II?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZhk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>aZaaaa!F`!F`!F`!F`'_-'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆ>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻS%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?Ć>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?>sc>sc>sc>sc>ZZZZby>byb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?OྈfO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=?ib?ib?0H?0H?0H?0H?/?/?/?/,=,=,=,=)I<)I<)I<)Itt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SS??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??MMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?mNmNmNmN j j j jt+{t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>SxxSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3Yd?sc?sc?sc?sc?sc?Z*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?lyl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~=սp~.ὰp~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~?s=$~?s=$~?s=}?>}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q| q| q| q|fp:qfp:qfp:qfp:qsocsocso?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??MMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIH??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g?)g?)>*>*>*>*=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?yݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhk>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?x>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yLyL?yL?yL?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?HeG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t? t? t? t?"t?"t?"t?"t? t?1 t?1 t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;??;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>byaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?=?J+?*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fy>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,,I)I)I)I)I) ɼC ɼC ɼC tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZ'_->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP9?dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕrŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %21 %21 %21 %ɻɻɻɻII?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>szTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS?SSSSS91T91T91T91T U ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝmuݝmuݝmu"u"u"u"uMvMvMv>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,,,,I)I)I)I) ɼC ɼC tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>WqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>mJmJmmmm^lþ^lþ^lþ^lþXk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]?S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybyby>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^l>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMv>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ2121212121ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?mN?0/?0/?0/?0/?X?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s$~?s=$~s=$~s=$~>}>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szTsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?S> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHXSHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M??M?M?M?yL?yL?yL?yL?K?K?KK? BJ? BJ? BJ? BJ?I?I?I?I?H??H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZXk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>sz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>fOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZbybybybyaZaZaZaZaaaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yLyLKKKKKJ BJ BJ BJ? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I?I BJ BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybyby>b?y>b?>ZZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վ^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?JmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?mN j j j jt+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I) ɼC ɼC ɼC ɼCɖɖɖɖII<?I<?I<?;?;?;?;?S%?S%?S%?S;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H?0H?0H?0H?ib?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? j? j? j?mN?mN?mN?=mN0=/0=/0=/0=/=X=X=X=X:=~:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?s=$~s=$~s=$~s=$~>}>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wv?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?NM?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ;;ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,////0H0H0H0H?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j j mNmNmNmN/0/0/0/0X?=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKK?K??yL??yL??yL??yL??M??M??M??M?<?N?<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3R?IS??IS??IS??IS??S??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վXk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?JmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?mNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H//=?/=?/=?,=?,=?,=?,=?I<)?I<)?I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻ212121$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X:~?:~?:~?:~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8=#C~v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6վbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk V?k V?k V?k V? U? U? U? U?91T?91T?9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I??I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ?21 ?21 ?21 ?21 ?;?;ɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,?,=?,=?,=?/=?/=?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j j j j mNmNmNmN/0/0/0/0XXXX~:~:~:~:m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~.ὰp~.ὰp~.#C~v8#C~v8#C~v8#C~v8$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Ydu3Ydu3Ydu3Ydu3scscscscZ'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T91T9SSS??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZ?PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?ھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?TszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:~:~XXXX0/0/0/0/=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K? BJ? BJ? BJ? BJ?I??I?I?I?H?H?H?H?eG?eG?eGeG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>RrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>Za?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSS?S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?Ba\Ba\Ba\S-]S-]S-]S-]]]]>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?!F`!F`!F`aaaaZaZaZaZ>a?y>b?y>b?y>b?y>b?>ZZZZm?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocso:qfp:qfp:qfp:qfp| q| q|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?vvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszT>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I<)?I<)?I<)?I<)? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>MvMv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>aa?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL??yL?yL?K?K?K?K B?J B?J B?J B?JI?I?I?I?H?H?H?H?eG?eG??eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>f?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X?X?/?0/?0/?0/?0mN?mN?mN?mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?II<I<;;;;21 %21 %21 %21 %?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<ɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)?I<?,=?,=?,=?,=?/=?/=?/=?/=0H0H0H0Hibibibibt+{t+{?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=X?=~?:=~:~:~:m~6Ƚm~6Ƚm~6Ƚm~6Ƚɛ~=սɛ~=սɛ~=սɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~s$~s$~s$~s}}}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{G{G{G{Gz`Mz`Mz`Mz`MszTszTsz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?MMMMyLyLyLyLKKK??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?KjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fy>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վFn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻ;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j j? j?mN?mN?mN?mN?0/?0/?0/?0/?=X=X=X=X:=~:=~:=~:=~6=m~6=m~6Ƚm~?6Ƚm~?=սɛ~?=սɛ~?=սɛ~?=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8=#C~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s=$~}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վh>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3Yd?u3Yd?sc?sc?sc?sc?sc?ZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<N?<N?<N?<N?M?M?M?M?yL??yL?yL?yL?K?K?K?K?K B?J B?J BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>Wq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕrŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?II<I<I<;;;;ɻɻɻɻIIII?ɖ<?ɖ<?ɖ<?ɖ}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾsc?>ZZZZb?y>b?y>b?y>b?y>aZaZaZaZaaaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+*>*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9Z>z?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? j jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZfO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾXk)>Xk)>^l>^l>^l>^l>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>r?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN=mN=j =j =j =j =t+{=t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾkg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>fO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BII??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYK?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfO>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?kؾhkؾhkؾhA6վei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRr>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,,,I)I)I)I)I) ɼC ɼC }>}>}>} >̫} >̫} >̫} >̫}tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?K?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S??S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M??M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?ZaZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}}̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylyly?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆ$wΆvvvvMvMvMv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>rŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJm?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISIS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S??S?9?1T?9?1T?9?1T?91T U U U Uk Vk Vk Vk VH &pWH ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]?S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`a>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJ>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?RrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1 t?>"t>"t>"t>"t> t> t> t> tx>?sx>?sx?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>scsc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZKjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M??M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZ ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu">u">u">u">Mv>Mv>Mv>Mv>v>v>v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖɖ<ɖ<ɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻ?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>mJmJmJmmmm^lþ^lþ^lþ^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N<N<N<N<MMMMyLyLyL??yL??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &)B &)B &)B%$C%$C%$C%$C#D#D#D#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHIII?I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzOzO9dP9dP9dP9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]?S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?ybybZYd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?OྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վm?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?ĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?MvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlyl>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmN=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZa?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jYSHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T??S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K??K?K B?J B?J B?J B?J?I?I?II?H?H?H?H?eG?eG?eG?eG?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+?=i-??*>?*>?*>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZ ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>mu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iy?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>SxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>muݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾYd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>aaaa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSIS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yLyLyLKKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K?KyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?S-]S-]S-]S-]]]]]']^']^']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?!F`aaaaZaZaZaZaybybybybZm?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?cso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆ>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ibibibib0H0H0H0H////,,,,I)I)I)I<)?I<)? ̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szTsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?l>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Z^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS??IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾFn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmuݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSS??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+*>*>*>)g?)g?)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHH?I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M?M<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHX?SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZsc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkg>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsoc>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x?sx?s t t t t"t"t"t"t1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?mNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?SSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< }>}>}}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eGeG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھhk>hk>hk>hk>ei Z>ei Z>ei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)Itt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>vvMvMvMvMvu"u"u"u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>soc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??HHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMM?M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?zO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R?3R??3R??3R??IS??IS??IS??IS??S??S??S?S91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZ>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZ̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?mmJmJmJmJm1Fn1Fn1Fn1Fn*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?"u"u"uMvMvMvMvvvv>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? ̫} ̫} ̫}}}}}s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?x>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t?> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?O>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ibib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Is|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u"muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕr?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn1Fn1Fn1Fn1mJmJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscscZ!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jYKjYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H??H?HHIIII BJ BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHX?SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6վ j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lm>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T0hocsocsocsocso:qfp:qfp:qfp:qfp| q|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝmu"u"u"u"uMvMvMvMvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTszTsz`Mz`Mz`Mz`MzG{G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I<I<I<I<ɖ<ɖ<ɖ<ɖ< }}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>SxxSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>MvMv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fOྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?K?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zOzO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG??eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>m?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTsz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>socsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>mmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾ ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>scscZ]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T9SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeG?H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h=MQ3R3R3R3RISISISISS?S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW?SHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZYd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?kؾhA6վ j?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0/0/0/mNmNmNmN j j j =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,=?,=?I<)?I<)?I<)?I<)? s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝ>muݝ>mu1> t1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hkؾh?kؾh?kؾh?ھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYKjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K?K B?J BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>b?yb?yb?yb?yZkg>kg>hk>hk>hk>hk>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?csoc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qryl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖɖ<I<I<I<I<;;;;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC ɼC ɼ)I)I)I)I,,,,//?/=?/=?0H=?0H=?0H=?0H=?ib=?ib=?ib=?ib=?ib=?t+{=?t+{=?t+{=?t+{=j? =j? =j? =j? =mN?=mN?=mN?=mN?=/?0=/?0=/?0=/?0=X?=X?=X?=X?=~?:=~?:=~?:=~?:=m~?6=m~?6=m~?6=m~?6=ɛ~?==ɛ~?==ɛ~?==ɛ~?==p~?.=p~?.=p~?.=p~?.=#C~?v8=#C~?v8=#C~?v8=#C~?v8=$~?s=$~?s=$~?s=$~?s=}?>}?>}?>}?>̫} ̫} ̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>scscscZ!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??KKKKJ BJ BJ BJ BIII??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D#D#D#D#C%$C%$C%$C%$)B &)B &)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL?yLMMMM<N<N<N<NzO?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h=MQ*h=MQ*h=MQ3R3R3R3RISISIS?IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?KjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?ZYd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?yݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^l>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWq>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXX=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վhk>hk>hk>h>kg>kg>kg>kg>kgy>̾fyݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?SS?S?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?MM?M?yL?yL?yL?yL?K?K?K?K? B?J B?J B?J B?J?I?I?I?I?H?HH?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc?sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)Iɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`'_-'_-'_-'_-^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@f(g?)g?)g?)g?)>*>*>*>*=J+=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG?eGeGHHHHIIII B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfO>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?kؾhkؾhkؾhkؾhA6վei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxx>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}>}?>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?XX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{ibibibib0H0H0H0H////,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgyݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?>ZZZZby>by>by>bZ>aZ>aZa?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHXSHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1TS?S?S?S?IS?IS?IS?IS?3R?3R??3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dPzO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>a?Za?Zb?yb?yb?yb?yZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/?0/?0mN?mN?mN?mN?j? j? j? j? t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>muݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>aa!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9dP9zOzOzOzON?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@f(@f(@f(g?)g?)g?)g?)>*>*>*>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG?eGeGeGHHHHII?I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RIS?IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']^-'_-'_-'_-'_-'_!F`!F`!F`!F`>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?scu3Ydu3Ydu3Ydu3Ydc ^ec ^ec ^ec ^eOྈfO>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?{> j?>{j?>{j?̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJ>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H///=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC? ɼC?I)?I)?I<)I<),=,=,=,=/=/=/=/=0H=0H=0H=0H=ib=ib=ib=ib=t+{=t+{=t+{=t+{= =j =j =j =j=mN=mN=mNmN?0/?0/?0/?0/?X?X?X?X?:~?:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~=սɛ~?.ὰp~?.ὰp~?.ὰp~?.ὰp~?v8#C~?v8#C~?v8#C~?v8#C~?v8=#C~s=$~s=$~s=$~s=$~>}>}>}>} >̫} ̫}? ̫}? ̫}?tt}?tt}?tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>mm?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>scsc?sc?ZaZ>aZ>aZ>a>a>a>a>a>!F`>!F`!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]>]>]>^']>^']>^']>^']>'_->'_->'_->'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmuݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:X?X?X?X?/?0/?0/0=/0=mN=mN=mN=mN=j =j =j =j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,,=)I<)I<)I<)I<)Iz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>MvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾf?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Ydu3Ydu3Ydu3scscscscZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>*>*=J+=J+=J+=J+*>*>*>)g?)g?)g?)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F?eGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?91T91T91T U U U Uk Vk Vk Vk ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZsc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?OྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJ>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsoc>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?ĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszT>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G>{?7A>a{?7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I)I<)? ~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/>(;|@5>1{@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?T>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ib?ibib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)Iz?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvv?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>muݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>m?>m^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>hkؾhkؾhkؾkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZa?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHI?I??I??I? B?J? B?J? B?J? B?J? B?J??K?KKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R?3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ?PZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']^']^']^']^-'_-'_-'_-'_!F`!F`>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZ ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?ĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?>"t?1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?vΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G>{?G>{?G>{?G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖ<?I<?I<?I<?I<?;?;?;?;?S%?S%?S%?S%?ɻ?ɻ?ɻ?ɻ?I?I?I<I<ɖ<ɖ<ɖ<ɖ< } >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1 t?1 t?1 t?"t?"t?"t?"t? t? t? t?> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?J>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei ZҾei?A6վfO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T91T?91T?91T?91T?S?S?S?S?IS?IS??IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG??eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[=?[=?a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l>^l>^l>^l>m>m>m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>szTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvv?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocso?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZa?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKJ BJ BJ BJ BIIIIHH??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+?*>*>*>)g?)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R?3R??3R??IS??IS??IS??IS??S??S??S??S?S91T91T91T91T U U U Uk ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX?SHXSHX6jY6jY6jY6jYKjYKjYKjYKjY?PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZXk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?mmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?"t1 t1 t1 t1 tݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖ<?ɖ<?I<?I<?I<?I<?;?;?;?;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t1> t>"t>"t>"t>"t> t t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>m>m>^l>^lþ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>hھkg?ھkg?ھkg?ھkg?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?Oྈf?Oྈf?Oྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?sc?Zby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?ISIS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<?N<?N<?N?M?M?M?M?yL?yL?yLyL?K?K?K?K?K? BJ? BJ? BJ? B?J?I?I?I?I?H?H?H?H?eGeG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZZsc>sc>sc>sc>Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?OྈfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?JmJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>szT>z`M>z?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?//=,=,=,=,=)I<)I<)I<)I<)I̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{@51{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆv?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHXSHXSHX&pWH &pWH &pWH &pWH Vk Vk Vk V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?SSSSISISISIS3R3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP9zOzOzOzON<N<N<N<MM??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??HHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!*F/!*F/!*F/!*FeGeGeGeGHH?H??H??I??I??I??I? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M?MMM<N<N<N<NzOzOzO?zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ?3R3R3R3RISISISISSS?S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZ ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?Sɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hoc>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?| q| q| qĆWqĆWqĆWqĆWqRrRrRr>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?"u"u"u"uMvMvMvMvvv>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}ŋw}ŋw~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G>{?G>{?7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?;?;?ɻSSSSS;;;ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}tt}?tt}?@:}?@:}?@:}?@:}?vs|?vs|?vs|?vs|?">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t?> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>RrRr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkSɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վ*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6')B? &)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->'_->!F`>!F`>!F`>!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZYdu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei? ZҾei? ZҾei? ZҾei? ZҾ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t> t> t> t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=t+{=?ib?ib?ib?ib?0H?0H?0H?0H?//=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|(~|(~|(~|((;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>vvvvMvMvMvMvu"u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1 t1"t"t"t"t t t t t?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>rŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n*DFn1Fn1Fn1Fn1mJmJmJmJmJm?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`!F`!F`'_-'_-'_-'_-^']^']^']^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?Vk Vk Vk U U U U 1T91T91T91T?9?S??S??S??S??IS??IS??IS??IS??3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D#D#C%$C%$C%$C%$)B &)B &)B &)B &pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S?SSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYK?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?]]]']^']^']^']^-'_-'_->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠Gsx?sx?sx?sx?s t t t t"t>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?xSxQr{xQr{xQr{xQr{xlylylylyf|fNnyf|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`M>z?`M>z?G{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~XXXX0/0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? jt+{t+{t+{t+{ibibibib0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkSɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>a>a>a>!F`>!F`>!F`>!F`>!F`->'_-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T9?1T?S?S?SS?IS?IS?IS?IS?3R?3R?3R?3R?*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zOzO?zO?<N?<N?<N?<N?M?M?M?M??yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?HH?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-*?>*?>*?>*?g?)?g?)?g?)?g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk)>Xk)>^l>^l>^l>^l>m>m>m>m>m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>r?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u">u">u">u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖI<I<I<I<;;;;21 %21 %?21 ?21 ?21 ?;?;?;?;?I<?I<?I<?I<?ɖ<?ɖ<?ɖ<?ɖ̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>yl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmmmm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9dP9zOzOzOzON<N<N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??IIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*>*>*>)g?)g?)g?)g?f(@f(@f(@f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeG?eG??H??H??H??H??I??I??I??I? B?J? BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<N?zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? U U Uk Vk Vk Vk VH &pWH &pWH ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY??PZ??PZ??PZ??PZ?=?[?=?[?=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>ZZZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3Ydu3Ydc ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhk>h?k>h?k>h?A6>ei? Z>ei? Z>ei? ZҾei{Ͼ j{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jS> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?þ^lþ^lmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t? t"t"t"t"t1 t1 t1 t1 tݝmuݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?lyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|v>s|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?tt}tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0/0/0/0/mNmNmNmN j j =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;>ͬ{n;>ͬ{n;>ͬ{7A>a{7A>a{7A>a{7A>a{G>{G>{G>{G>{`M>z`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t1> t>"t"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>mJ>m>m>m>mm?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZsc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?csoc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u">u">u">Mv>Mv>Mv>Mv>v>v>v>v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN=mN=mN=mN=j =j =j =j =t+{=t+{=?t+{?t+{?ib?ib?ib?ib?0H?0H?0H?0H?/?/?/?/?,?,?,?,)?I)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmuݝmuݝ t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕrŕRrRrRrRrWqĆWq?Ć>Wq?Ć>Wq?Ć> q?|> q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>fOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZb?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a!F`!F`!F`!F`!F`'_-'_-'_-'_-^']^']^']^']]]]]S-]S-]S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZPZPZPZjYKjYKjYKjYKjY6jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyL??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g??)?g??)?g??)?>?*?>?*?>?*?>?*?=?J+?=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeG?eG??eG??H??H??H??H??I??I??I??I? BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\?B?a\??S-]??S-]?S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_!F`!F`!F`!F`aaaaZaZaZaZaybybybybZYd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?Oྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6վ{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?þ^lþ^lþ^lmmmmJmJmJmJ>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆ>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝmuݝmuݝmuݝmu"u"u"u"uMvMvMvMvvvvvvΆ$wΆ$wΆ$wΆ>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XX=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? j j j jt+{t+{t+{t+{ibibib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G>{G>{G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>vv?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>mm?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZaZ>aZ>a>a>a>a>a>!F`>!F`>!F`!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?>]>]>]?S-]?S-]?S-]?S-]?S-]B?a\B?a\Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ??PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?SS?S?S?IS?IS?IS?IS?3R?3R?3R??3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?MM?M?M?yL?yL?yL?yL?K?K?K??K B?J B?J B?J B?J?I?I?I?I?HH?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D?#D?#D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zb?yb?yb?yb?yZei Z>ei Z>ei Z>ei Z> j{> j{> j?{Ͼ j?{Ͼ j?{Ͼ{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tsoc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?s?x?s?x?s?x t? t? t? t?"t?"t?"t>"t> t1> t1> t1> t1>muݝ>muݝ>muݝ>muݝ>u?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ;21 %21 %21 %21 %ɻɻɻɻIIIIɖɖɖɖC ɼC ɼC? :}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|/(;|/1{@51{@51{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>SxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>MvMvu"u"u"u"muݝmuݝmuݝmu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>WqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJm?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei ZҾei ZҾei ZҾsc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>aaa!F`!F`!F`!F`'_-'_-'_-'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jY?K?jY?K?jY?K?jY?6?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pWH &pWH &pWH Vk Vk Vk Vk U U U U? ?1T?9?1T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ*hdP9dP9dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyL??yL??K??K??K??K??K??J? B?J? B?J? B?J BIIIIHHHHeGeG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKK?yL??yL??yL??yL??M??M??M??M?<?N?<?N?<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H &pWH &pWH &pWSHXSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZ?PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?aaaZaZaZaZaybybybybZf?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?ھkgkؾhkؾhkؾhkؾhA6վei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?S> Kk?S> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?þ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?>Rr?>Rr?>Rr?ŕ>r?ŕ>r?ŕ>r?ŕ>r?嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t> t?> t?>"t?>"t?>"t?>"t?>"t?1> t?1> t?1 t1 tݝmuݝmuݝmuݝmu"u"u"u"u>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά$wΆ$w}ŋw}ŋw}ŋw}ŋw~w~w~w~wx>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?lylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@:}tt}tt}tt}tt} ̫} ̫} ̫} ̫}}}}}s$~s$~s$~s$~s$~v8#C~v8#C~v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~X=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/,,,,I)I)I)I)I<)? ̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?T>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|fNny?f|fNny?f|fNny?f|fNny?ly?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?cso?c>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZby>by>by>bZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\Ba\?Ba\?Ba\?=[?=[?=[?=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6jY??SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?IH?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+?=J+?=J+?=i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U? V?k V?k V?k V?k &pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\B?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>a?Za?Za?Za?Zb?yb?yb?yb?yZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>h?kؾ j{> j{> j{>{j>{j>{j>{j> KkS> KkS> Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn1>Fn1>n*D>n*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>soc>fp:q>fp:q>fp:q>fp:q> q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNnyf|f>Nnyf|f>Nnyf|f>y\`>y\`>y\`>y\`>z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}?̫}? ̫}? ̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~?:~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=?0H?0H?0H?/?/?/?/?,?,?,?,)?I)?I)?I)?IC? ɼC? ɼC? ɼC? ɼ?ɖ?ɖ?ɖ?ɖ?I?I?I?I?ɻ?ɻ?ɻ?ɻ??????;?;?;ɻIIIIɖɖɖɖC ɼC? }?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu"u"u"u"muݝmuݝmu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qfp:qsocsocsocsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>hkؾhkؾkgھkgھkgھkgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZ?*?>?*?>?*?>?*?=?J+?=?J+?=?J+?=?J+??*?>?*?>?*?>?)?g??)?g??)?g??)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<N<N<N<NzOzOzOzO9dP9dP9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R?ISISISISSSSSS91T9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZ?PZ??PZ?=?[?=?[?=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']^']^-'_-'_-'_-'_-'_!F`!F`!F`>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?Z>a?ybybybybZsc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c> ^e?c> ^e?c> ^e?c> ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?Qr>{x?lylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|vs|vs|@:}@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? ̫}}}}}s$~s$~s$~s$~v8#C~v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?XXXX0/0/0/0/mNmN=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?///,,,,I)I)I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@>:}@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?Ć>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT>0ho*D>n*D>n*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? ZҾei? ZҾei?A6վkg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>scsc?sc?sc?ZbZ>aZ>aZ>aZ>a>a>a>a>a>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']>^']>^']>^>]>]>]>]?S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZPZ?PZ?KjY?KjY?KjY?KjY?6jY?6jY?6jY?6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T91T?91T?S?S?S?S?IS?IS?IS?IS??3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#?D#?D#?D%$?C%$?C%$?C%$?C &?)B &?)B &?)B &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZYdu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾ q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t>"t> t1> t1> t1> t1>muݝ>mu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz9Z>z9Z>szT>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~?s$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>:}?@>s|?v>s|?v>s|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>vMvMvMvMvu"u"u"u"muݝmu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>RrRrRrWqĆWqĆWqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocsocsocsoc0hoT0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn1Fn1mJmJmJmJmmmm^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscscscZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]]S-]S-]S-]S-]a\Ba\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjY?K?jY?K?jY?6?jY?6?jY?6?jY?6?SHX??SHX??SHX??SHX&pWH &pWH &pWH &pWH Vk Vk Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP9dP9dP9zOzO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F?/!?*F?/!?*F?/!?Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJKKKKyLyLyLyLMMMM<?N?<?N?<?N?<?N??zO??zO??zO??zO??zO?9?dP?9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?!F`!F`aaaaZaZaZaZaybybybybZ ^e?O>f?O>f?O>f?O>f?y>̾f?y>̾f?y>̾f?y>̾f?y>̾f?>kg?>kg?>kg?>kg?k>h?k>h?k>h?k>h?A6>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?c>so?c>so?c>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?|> q?| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕ>r?ŕ>r?ŕ>r?嚠>Gs?嚠>Gs?嚠>Gs?嚠>Gs?x>?s?x>?s?x>?s?x?s t t t t"t"t"t"t1 t1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7A>a{?7A>a{?7A>a{?7A>a{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@:}@:}@:}@:}tt}tt}tt}tt} ̫} ̫} >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:~:~:~XXXX0/0/0/0/mNmNmNmN j j j jt+{t+{t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)? }>}>}>} >̫} >̫} >̫} >̫}>tt}>tt}>tt}>tt}@>:}@:}?@:}?@:}?vs|?vs|?vs|?vs|?"ɿ|?"ɿ|?"ɿ|?">ɿ|(>~|(>~|(>~|(>~|/>(;|/>(;|/>(;|/>(;|/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t?> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:q>fp:q>fp:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?Jm?J>mJ>m>m>m>m>m>^l>^l>^l>^l)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?̾{j?̾{j?>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fOྈf?Oྈf?c ^e?c ^e?c ^e?c ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?Za>!F`>!F`>!F`>!F`->'_->'_->'_->'_']>^']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=[?=[?=[?=[??PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U ?U ?U ?U9?1T9?1T9?1T9?1T?S?S?S?S?IS?IS?ISIS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<N?<N?<N?M?M?M?M?yL?yL?yL??yL?K?K?K?K B?J B?J B?J B?J?II?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?g"E?g"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(?@f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+?=J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k V?k V?k &pW?H &pW?H &pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a?a?a?Za?Za?Za?Zb?yb?yb?yby>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>f?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾhk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j>{j>{j>{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l>^l>^l>m>m>m>m>mJ>mJ>mJ>m?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cfp?:qfp?:qfp:q>fp:q> q|> q|> q|> q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr?Rr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmuݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv?Mv?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>{xQr>yl>yl>yl>y?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|">ɿ|">s|v>s|v>s|v>s|v>s|v>:}@>:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X=/0=/0=/0=/0=mN=mN=mN=mN=j =j? j? j? ?t+{?t+{?t+{?t+{?t+{?ib?ibib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}?@>s|?v>s|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{G{Gz`Mz`Mz`Mz`Mz`MszTszTszTsz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{xQr{xQrSxxSxxSxxSxxw~w~w~w~ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">muݝmuݝmuݝmuݝ t1 t1 t1 t1 t1"t"t"t"t t t t t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠rŕrŕrŕrŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q| q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?J>m?>m?>mm^lþ^lþ^lþ^lþXk)ƾXk)ƾXk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^e?c> ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`'_-'_-'_-'_-^']^']^']^']]]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZ??PZ??jY?K?jYKjYKjYKjY6jY6jY6jY6jY6SHXSHXSHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?V?k ?V?k ?U? ?U? ?U? ?U? ?1T?9?1T?9?1T?9?1T?9?S??SSSISISISIS3R3R3R3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?zO??zOzOzON<N<N<N<MMMMyLyLyLyLKKKKKJ BJ BJ BJ BIIIIHHHHeGeGeGeG*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C%$C%$C%$C%$)B &)B &)B &)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'pAV6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$C#D#D#D#Dg"Eg"Eg"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHH?H??I??I??I??I? B?J? B?J? B?J? B?J? B?J??K??K??K??K??yL??yL??yL??yL??M??M?MM<N<N<N<NzOzOzOzO9dP9dP9dP9dP*h=MQ*h=MQ*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?K?jY?K?jY?PZPZPZPZ=[=[=[=[Ba\B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?]']^']^']^']^-'_-'_-'_-'_!F`>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?Z>a?Z>a?ZaybybybybZei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkSɾ KkSɾ Kk)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1>Fn?1>Fn?1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsoc>so?c>so?c>so?:q>fp?:q>fp?:q>fp?:q>fp?|> q?|> q?| q| qĆWqĆWqĆWqĆWqRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t"t"t>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}>ŋw?}>ŋw?}>ŋw?}>ŋw?~w~w~w~wxSxxSxxSxxSxQr{xQr{xQr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9Z>z?T>sz?TszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s$~s$~v8#C~v8#C~v8#C~v8#C~.ὰp~.ὰp~.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:~:~:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻ;?21$?21$?21$?21$?ɻ?ɻ?ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? :}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|"ɿ|?"ɿ|?"ɿ|?(~|?(~|?(~|?(~|?/(;|?/(;|?/(;|?/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|fNny?f|fNny?ly?ly?l>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>SxxSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}ŋw?}ŋw?Ά$w?Ά$w?Ά$w?Ά$w?v?v?v?v?Mv?Mv?Mv?Mv?"u?"u?"u?"u?ݝmu?ݝmu?ݝmu?ݝmu?1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠Gs?ŕr?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?Ć>WqĆ>WqĆ>WqĆ>Wq|> q|> q|> q|> q:q>fp:q>fp:qfp?:qfp?cso?cso?cso?cso?T0ho?T0ho?T0ho?T0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?Jm?J>mJ>mJ>m>m>m>m>m>^l>^l>^l>^l)>Xk)>Xk)>Xk)>XkS> KkS> KkS> KkS> Kk>{j̾{j?̾{j?̾{j?̾{j?{Ͼ j?{Ͼ j?{Ͼ j?{Ͼ j? ZҾei? ZҾei? Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3>Ydu3>Ydu3>Ydu3>Yd>sc>sc>sc>sc>ZZZZbyb?yb?yb?Za?Za?Za?Za?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]??S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=[?PZ?PZ?PZ?PZ?KjY?KjY?KjY?KjY?6jY?6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH ?&pWH &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS??IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h?=MQ*h?=MQ9?dP9?dP9?dP9?dP?zO?zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K B?J B?J B?J B?J?I?I?I?I?H?H?H?H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"?Eg"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(?@f(?@)?g?)?g?)?g?)?g?*?>*?>*?>*?>J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T9?1T9?1T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pWH ?&pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?jY?6jY?6jY?6jY?6jY?KjY?KjY?KjY?KPZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]>]>]>]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>b?yZYdu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^ec>fO>fO>fO>fO>̾fy>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk)>Xk)>Xk)>^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?JmJ>mJ>Fn1>Fn1>Fn1>Fn1>n*D>n*D>n*D>n*D>0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWq?ĆWq?ĆWq?ĆRr?Rr?Rr?Rr?r?ŕr?ŕr?ŕr?ŕGs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1muݝ>muݝ>muݝ>muݝ>u">u">u">u">Mv>Mv>Mv>Mv>v>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>yl>y?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z9Z>z9Z>z9Z>z9Z>szT>szT>szT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{?@51{?@51{?@5(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|">ɿ|">ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫}? ̫}? }?}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:~?:X?X?X=X=/0=/0=/0=/0=mN=mN=mN=mN=j =j =j =j =t+{=t+{=t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I}?>}?>}?>̫}? >̫}? >̫} ̫} tt}tt}tt}tt}:}@:}@:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|(~|(~|(~|((;|/(;|/(;|/(;|/(;|/1{@51{@51{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nnyf|fNnyf|fNnyf|fNnyf|fylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w~w~w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?>?s?x>?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>rŕRrRrRrRrWqĆWqĆWqĆWqĆ q| q?|> q?|> q?|>fp?:q>fp?:q>fp?:q>fp?:q>fp?:q>so?c>so?c>socsoc0hoT0hoT0hoT0hoTn*Dn*Dn*Dn*DFn1Fn1Fn1Fn1mJmJmJmJmm?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾ j{Ͼ j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>kgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^e?c> ^e?c> ^e?c>Yd?u3>Yd?u3>Yd?u3>Yd?u3>sc?>sc?>sc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>aZaZaZaaaa!F`!F`!F`!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??S-]??a\?B?a\Ba\Ba\B[=[=[=[=PZPZPZPZjYKjYKjYKjYKjY6jY6jY6jY6SHXSHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T9S??S??S??S??IS??IS??IS??IS??3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??J? B?J? B?J? B?J? B?I??I??I??I??H??H??H??H??eG??eG??eG??eG??*F?/!?*F?/!?*F/!*F/!Eg"Eg"Eg"Eg"D#D#D#D#C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?)B? &?pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+?*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'pAV6'pAV6'pA &)B &)B &)B &)B%$C%$C%$C%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"?E?g"?E?/!?*F?/!?*F?/!?*F?/!?*F??eG??eG??eG??eG??H?HHHIIII BJ BJ BJ B?J??K??K??K??K??yL??yL??yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? Uk Vk Vk Vk VH &pWH &pWH &pWH &pWSHXSHXSHXSHX6jY6jY6jY6jYKjYKjYKjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\S-]S-]S-]S-]]]]]']^']^']^']^-'_-'_-'_-'_->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?Z>a?ZaZaZaybybybybZZsc?>sc?>sc?>sc?u3>Yd?u3>Yd?u3>Yd?u3>Yd?c ^ec ^ec ^ec ^eOྈfOྈfOྈfOྈfyݾ̾fyݾ̾fyݾ̾fyݾ̾fھkgھkgھkgھkgkؾhkؾhkؾhkؾhA6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?mmmmJmJmJmJm1Fn1Fn1>Fn?1>Fn?*D>n?*D>n?*D>n?*D>n?T>0ho?T>0ho?T>0ho?T>0ho?csocsocsocso:qfp:qfp:qfp:qfp| q| q| q| qĆWqĆWqĆWqĆWqRrRrRrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t"t"t>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?vvvΆ$wΆ$wΆ$wΆ$w}ŋw}ŋw}ŋw}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr{xQr{xQr{xQr{xlylylylyf|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Zz9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/(;|/(;|(~|(~|(~|(~|"ɿ|"ɿ|"ɿ|"ɿ|vs|vs|vs|v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?tt} ̫} ̫} ̫} ̫}}}}}s$~s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6=m~?6=m~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0/0/mNmNmNmN j j j jt+{t+{t+{t+{t+{ibibibib0H0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,I)I)I)I) ɼC ɼC ɼC ɼCɖɖɖɖIIIIɻɻɻɻSSSS;;;;I<I<I<I<ɖ<ɖ<ɖ<ɖ< (;|/>(;|@5>1{@5>1{@5>1{@5>1{n;>ͬ{n;>ͬ{n;>ͬ{n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|f>Nnyl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝmu?1 t?1 t?1 t?1 t?1 t?"t?"t?"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠Gs?嚠Gs?嚠Gs?嚠Gs?ŕr?ŕr?ŕr?ŕr?Rr?Rr?Rr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:q>fp:q>fp:q>fpc>soc>soc>soc>soT>0hoT>0hoT>0hoT0ho?*Dn?*Dn?*Dn?*Dn?1Fn?1Fn?1Fn?1Fn?J>mJ>mJ>mJ>mJ>m>m>m>m>m>^lþ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?Sɾ Kk?S> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei ZҾei? ZҾei? ZҾei?A6վZby>by>by>bZ>aZ>aZ>aZ>a>aa?a?a?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]??S-]?S-]?S-]?S-]B?a\B?a\B?a\B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYK?jYK?jY6?jY6?jY6?jY6?jY6?jY?SHX?SHX?SHX?SHXH ?&pWH &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S??IS?IS?IS?IS?3R?3R?3R?3R*h?=MQ*h?=MQ*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H??eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"?Eg"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &?)B &?)B &?)B &?)BV6'?pAV6'?pAV6'?pAV6'?pAf(?@f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*?>J+?=J+?=J+?=J+?=J+?=i-??*>?*>?*>?*g??)g??)g??)g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D#?D#?Eg"?Eg"?Eg"?Eg"?*F/!?*F/!?*F/!?*F/!?eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N?<N?<N?<zO?zO?zO?zO?dP?9dP?9dP?9dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T9?1T9?U ?U ?U ?U ?Vk ?Vk ?Vk ?Vk ?&pW?H &pW?H &pW?H &pW?H SHX?SHX?SHX?SHX?SHX?jY?6jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\B?S-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a>a>a>a>aZ>aZ>aZ>aZ>by>by>b?yb?yZfO>fO>fO>̾fy>̾fy>̾fy>̾fy>kg>kg>kg>kg>hk>hk>hk>hk>ei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn?*Dn*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>soc>fp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>r?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t> t> t>"t>"t>"t>"t>"t> t1> t1> t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w~>w~>Sxx>Sxx>Sxx>Sxx>{xQr>{xQr>{xQr>{xQr>yl>y?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?TszT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{?@5(;|?/(;|?/(;|?/(;|?/~|?(~|?(~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=$~s=#C~v8=#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~?=սɛ~?=սm~?6Ƚm~?6Ƚm~?6Ƚm~?6Ƚ~?:~?:~?:~?:X?X?X?X?/?0/?0/?0/?0mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{ib=ib=ib=ib=0H=0H=0H=0H=/=/=?/?/?,?,?,?,)?I)?I)?I)?I)I̫}? >̫}? >tt}?>tt}?>tt}?>tt}?>:}?@>:}?@>:}?@>:}@:}@s|vs|vs|vs|vɿ|"ɿ|"ɿ|"ɿ|"~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{@51{@5ͬ{n;ͬ{n;ͬ{n;ͬ{n;a{7Aa{7Aa{7Aa{7A{G{G{G{Gz`Mz`Mz`Mz`MszTszTszTszTz9Zz9Zz9Zz9Zy\`y\`y\`y\`Nnyf|fNnyf|fNnyf|fNnyf|fylylylylyl{xQr{xQr{xQr{xQrSxxSxxSxxSxxw~w?~>w?~>w?~>ŋw?}>ŋw?}>ŋw?}>ŋw?}>$w?Ά>$w?Ά>$w?Ά>$w?Ά>v?>v?>v?>v?>Mv?>Mv?>Mv?>Mv?>u?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t1"t"t"t"t t t t t?sx?s?x>?s?x>?s?x>Gs?嚠>Gs?嚠>Gs?嚠>Gs?嚠>r?ŕ>r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>Wq?Ć>WqĆ q| q| q| q|fp:qfp:qfp:qfp:qsocso?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n?*D>n?*D>Fn?1>Fn?1>Fn?1>Fn?1>m?J>m?J>m?J>m?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk)ƾXk)ƾ KkSɾ KkSɾ KkSɾ KkSɾ{j̾{j̾{j̾{j̾{j̾ j{Ͼ j{Ͼ j{Ͼ j{Ͼei ZҾei ZҾei ZҾei ZҾh?k>h?k>h?k>h?k>kg?>kg?>kg?>kg?>̾f?y>̾f?y>̾f?y>̾f?y>f?O>f?O>f?O>f?O> ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scscsc?>sc?>ZZZZb?y>b?y>b?y>b?y>a?Z>a?Z>a?Z>a?Z>a?>a?>a?>a?>!F`?>!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZ??PZPZjYKjYKjYKjYKjY6jY6jY6jY6SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?V?k ?V?k ?Vk Vk U U U U 1T91T91T91T91T9SSSSISISISIS3R??3R??3R??3R??=MQ?*h?=MQ?*h?=MQ?*h?=MQ?*h?dP?9?dP?9?dP9dP9zOzOzOzON<N<N<N<MMMMyLyLyLyLKK??K??K??J? B?J? B?J? B?J? B?I??I??I??IHHHHeGeGeGeG*F/!*F/!*F/!*F/!*F/!Eg"Eg"Eg"Eg"D#D#D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B? &?pA?V6'?pA?V6'?pA?V6'?pA?V6'?@?f(?@?f(?@?f(?@?f(?g??)?g?)g?)g?)>*>*>*>*=J+=J+=J+=?J+?*>*>*>)g?)g?)g?)g?f(@f(@f(@f(@V6'?pA?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"?E?g"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ B?J? B?J??K??K??K??K??yL??yL??yL??yL?MMMM<N<N<N<NzOzO?zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h?=MQ?*h?=MQ??3R??3R??3R??3R??IS??IS??IS??IS??S??S??S??S?9?1T?9?1T?9?1T?9?1T? ?U? ?U? ?U? ?U?k ?V?k ?V?k ?V?k ?V?H ?&pW?H ?&pW?H ?&pW?H ?&pW??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?K?jY?K?jY?KjYKjYPZPZPZPZ=[=[=[=[Ba\Ba\Ba\Ba\Ba\S-]S-]S-]S-]>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?->'_?->'_?->'_?>!F`?>!F`?>!F`?>!F`?>a?>a?>a?>a?ZaZaZaZaybybybybZh?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{Ͼ j{Ͼ j{Ͼ j{Ͼ j̾{j̾{j̾{j̾{jSɾ KkSɾ KkS> Kk?S> Kk?)>Xk?)>Xk?)>Xk?)>Xk?>^l?>^l?>^l?>^l?>m?>m?>m?>m?J>m?J>m?J>m?J>m?1>Fn?1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocsocso:qfp:qfp:qfp:qfp|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠>Gs?x>?s?x>?s?x>?s?x>?s?> t?> t?> t?> t?>"t?"t"t"t1 t1 t1 t1 tݝmuݝmuݝmuݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?vvvvvΆ$wΆ$wΆ$wΆ$w}ŋw}>ŋw?}>ŋw?}>ŋw?~>w?~>w?~>w?~>w?x>Sx?x>Sx?x>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|f>Nny?f|f>Nny?f|f>Nny?f|f>Nny?\`>y?\`>y?\`>y?\`>y?9Z>z?9Z>z?9Z>z?9ZzTszTszTszTsz`Mz`Mz`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;>ͬ{?n;>ͬ{?@5>1{?@5>1{?@5>1{?@5>1{?@5>1{?/>(;|?/>(;|?/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?>tt}?>tt}? >̫}? >̫}? >̫}? >̫}?>}?>}?>}?>}?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.ὰp~.ὰp~=սɛ~=սɛ~=սɛ~=սɛ~6Ƚm~6Ƚm~6Ƚm~6Ƚm~:=~?:=~?:=~?:=~?:=~?=X?=X?=X?=X?0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? =j? =j? =j?t+{=?t+{=?t+{=?t+{=?ib=?ib=?ib=?ib=?0H0H0H0H////,,,,I)I)I)I) ɼC ɼC ɼC ɼCɖ<?ɖ<?ɖ<?ɖ<?I<?I<?I<?I<?;?ɻɻɻ2121212121;;ɻ?ɻ?I?I?I?I?ɖ?ɖ?ɖ?ɖ? ɼC? ɼC? ɼC? ɼC?I)?I)?I)?I)?,?,?,?,?/?/?/?/?0H?0H?0H?0H?ib?ib?ib?ib?t+{?t+{?t+{?t+{? j? =j =j =j=mN=mN=mN=mN0=/0=/0=/0=/=X=X=X=X=X:=~:=~:=~:=~6=m~6=m~6=m~6=m~==ɛ~==ɛ~==ɛ~==ɛ~.=p~.=p~.=p~.=p~v8=#C~v8=#C~v8=#C~v8=#C~s=$~s=$~s=$~s$~?}?}?}?}? ̫}? ̫}? ̫}? ̫}?tt}?>tt}>tt}>tt}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(>~|/>(;|/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G>{`M>z`M>z`M>z`M>zT>szT>szT>szT>sz9Z>z9Z>z9Z>z9Z>z\`>y\`>y\`>y\`>yf|f>Nnyf|f>Nnyf|f>Nnyf|fNny?ly?ly?ly?ly?Qr{x?Qr{x?Qr{x?Qr{x?xSx?xSx?xSx?xSx?~w?~w?~w?~w?}ŋw?}ŋw?}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t>"t>"t> t> t> t> tx>?sx>?sx>?sx>?s嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>r>Rr>RrRr?Rr?ĆWq?ĆWq?ĆWq?ĆWq?| q?| q?| q?| q?:qfp?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T0ho?T>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1>Fn1>FnJ>mJ>mJ>mJ>m>m>m>m>mþ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?Sɾ Kk?S> KkS> Kk>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec> ^eu3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZby>by>by>bZ>aZ>aZ>aZ>aa?a?a?a?!F`?!F`?!F`?!F`?-'_?-'_?->'_->'_']>^']>^']>^']>^>]>]>]]?S-]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?Ba\?=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYK?jYKjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX?SHX?H &pW?H &pW?H &pW?H &pW?k V?k V?k V?k V? U? U? U? U?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?9dP?zO?zO?zO?zO?<N?<N?<N?<N?M?M?M?M?yL?yL?yL?yL?K?K?K?K? BJ? BJ? BJ? BJ?I?I?I?I?H?H?H??H?eG?eG?eG?eG/!?*F/!?*F/!?*F/!?*Fg"?Eg"E?g"E?g"E?#D?#D?#D?#D?%$C?%$C?%$C?%$C? &)B? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*?>*?>*?>J+?=J+?=J+?=J+?=i-?*?>*?>*?>*?g?)?g?)?g?)?g?)?@f(?@f(?@f(?@f(?pAV6'?pAV6'?pAV6'?pAV6'?)B &?)B &?)B &?)B &?C%$?C%$?C%$?C%$?D#?D#?D?#D?#E?g"E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J? BJ? BJ? BJ? BK?K?K?K?yL?yL?yL?yL?M?M?M?M?N<?N<?N<?N<?zO?zO?zO?zO?dP9?dP9?dP9?dP9?=MQ*h?=MQ*h?=MQ*h?=MQ*h?3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k V?k Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[?=[?=[?=[?=a\?Ba\?Ba\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]?^?']^?']^?']^?']'_?-'_?-'_?-'_?-'_?-!F`?!F`?!F`?!F`?a?a?a?a?a?Za?Za?Za?Zby>by>by>by>ZZZZsc>sc>sc>sc>Ydu3>Ydu3>Ydu3>Ydu3> ^ec> ^ec> ^ec> ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{> j{>{j?̾{j?̾{j?̾{j?̾ Kk?Sɾ Kk?Sɾ Kk?Sɾ Kk?SɾXk?)ƾXk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m?m?m?Jm?Jm?Jm?JFn?1Fn?1Fn?1Fn?1n?*Dn*D>n*D>n*D>0hoT>0hoT>0hoT>0hoT>soc>soc>soc>so?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q?|Wq?ĆWqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>Rr>rŕ>rŕ>rŕ>rŕ>Gs嚠>Gs嚠>Gs嚠>Gs嚠>?sx>?sx>?sx>?sx> t> t> t> t>"t>"t>"t>"t> t1> t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u">Mv>Mv>Mv>Mv>v>v>v>v>$wΆ>$wΆ>$wΆ>$wΆ>ŋw}>ŋw}>ŋw}>ŋw}>w~>w~>w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{x?Qr{x?Qr{x?Qry?ly?ly?ly?lNny?f|fNny?f|fNny?f|fNny?f|fy?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?Tsz?Tsz?Tz?`Mz?`Mz?`Mz?`M{?G{?G{?G{?Ga{?7Aa{?7Aa{?7Aa{?7Aͬ{?n;ͬ{?n;ͬ{?n;ͬ{?n;1{?@51{?@51{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|(>~|(>ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?vs|?v:}?@:}@>:}@>:}@>tt}>tt}>tt}>tt}>̫} >̫} >̫}? ̫}? }?}?}?}?$~?s$~?s$~?s$~?s#C~?v8#C~?v8#C~?v8#C~?v8p~?.ὰp~?.ὰp~?.ὰp~?.ɛ~?=սɛ~?=սɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN=mN=mN?mN?j? j? j? j? ?t+{?t+{?t+{t+{=t+{=ib=ib=ib=ib=0H=0H=0H=0H=?/?/?/?/?,?,?,?,)?I)?I)I<)I:}?@>:}?@>s|?v>s|?v>s|?v>s|?v>ɿ|?">ɿ|?">ɿ|?">ɿ|?">~|?(>~|?(>~|?(>~|?(>(;|?/>(;|?/>(;|?/>(;|?/>1{?@5>1{?@5>1{?@5>1{?@5>ͬ{?n;>ͬ{?n;>ͬ{?n;>ͬ{?n;>a{?7A>a{?7A>a{?7A>a{?7A>{?G>{?G>{?G>{?G>z?`M>z?`M>z?`M>z?`M>z?`M>sz?T>sz?T>sz?T>sz?T>z?9Z>z?9Z>z?9Z>z?9Z>y?\`>y?\`>y?\`>y?\`>Nny?f|f>Nny?f|f>Nny?f|f>Nny?f|f>y?l>y?l>y?l>y?l>{x?Qr>{x?Qr>{x?Qr>{x?Qr>Sx?x>Sx?x>Sx?x>Sx?x>w?~>w~w~w~ŋw}ŋw}ŋw}ŋw}$wΆ$wΆ$wΆ$wΆvvvvMvMvMvMvu?">u?">u?">u?">mu?ݝ>mu?ݝ>mu?ݝ>mu?ݝ> t?1> t?1> t?1> t?1> t?1>"t?>"t?>"t?>"t?> t?> t?> t?> t?sx?sx?sx?sxGs嚠Gs嚠Gs嚠Gs嚠r?ŕ>r?ŕ>r?ŕ>r?ŕ>Rr?>Rr?>Rr?>Rr?>Wq?Ć>Wq?Ć>WqĆWqĆ q| q| q| q|fp:qfp:qfp:qfp:qso?c>so?c>so?c>so?c>0ho?T>0ho?T>0ho?T>0ho?T>n?*D>n?*D>n*Dn*DFn1Fn1Fn1Fn1mJmJmJmJm?J>m?>m?>m?>m?>^l?>^l?>^l?>^l?>Xk?)>Xk?)>Xk?)>Xk?)> Kk?S> Kk?S> Kk?S> Kk?S>{j?>{j?>{j?>{j?> j?{> j?{> j?{> j?{>ei? Z>ei? Z>ei? Z>ei? Z>h?k>h?k>h?k>h?k>kg?>kg?>kgھkgھ̾fyݾ̾fyݾ̾fyݾ̾fyݾfOྈfOྈfOྈfO ^ec ^ec ^ec ^ecYdu3Ydu3Ydu3Ydu3scsc?>sc?>sc?>sc?>ZZZZb?y>b?y>bybyaZaZaZaZaaaa!F`?>!F`?>!F`?>!F`?>'_?->'_?->'_?->'_?->^?']>^?']>^?']>^?']>]?>]?>]?>]?>S-]??S-]??S-]??S-]??a\?B?a\?B?a\?B?a\?B?[?=?[?=?[?=?[?=?PZ??PZPZPZjYKjYKjYKjYKjY6jY6jY6jY?6?jY?6?SHX??SHX??SHX??SHX??&pW?H ?&pW?H ?&pW?H ?&pW?H ?Vk Vk Vk Vk U U U U 1T91T?9?1T?9?1T?9?S??S??S??S??IS??IS??IS??IS3R3R3R3R=MQ*h=MQ*h=MQ*h=MQ*hdP9dP?9?dP?9?dP?9?zO??zO??zO??zO??N?<?N?<?N?<?N?<?M??M??M??M??yL??yL??yL??yL??K??K??K??K??K??J? B?J? B?J? B?J? B?I??IIIHHHHeGeGeGeG??*F?/!?*F?/!?*F?/!?*F?/!?E?g"?E?g"?E?g"?E?g"?D?#?D?#?D?#?D?#?C?%$?C?%$?C?%$?C?%$?)B? &?)B? &?)B? &?)B &pAV6'pAV6'pAV6'pAV6'@f(@f(@f(@f(g?)g?)g?)g?)>*>*>*>*=J+=J+=J+=J+=J+*?>?*?>?*?>?)?g??)?g??)?g??)?g??f(?@?f(?@?f(?@?f(?@?V6'?pA?V6'?pA?V6'?pA?V6'?pA? &?)B? &?)B? &?)B? &?)B?%$?C?%$?C?%$?C?%$?C?#?D?#?D?#?D?#?D?g"?E?g"?E?g"Eg"E/!*F/!*F/!*F/!*FeGeGeGeGHHHHIIII BJ BJ BJ BJ BJKKKKyLyL?yL??yL??M??M??M??M?<?N?<?N?<?N?<?N??zO??zO??zO??zO?9?dP?9?dP?9?dP?9?dP?*h?=MQ?*h?=MQ?*h=MQ*h=MQ3R3R3R3RISISISISSSSS91T91T91T91T U U U Uk Vk Vk Vk VH &pWH &pWH &pWH ?&pW??SHX??SHX??SHX??SHX??SHX?6?jY?6?jY?6?jY?6?jY?KjYKjYKjYKjYPZPZPZPZ=[=[=?[?=?[?B?a\?B?a\?B?a\?B?a\??S-]??S-]??S-]??S-]?>]?>]?>]?>]?']>^?']>^?']>^?']>^?->'_?-'_-'_-'_!F`!F`!F`!F`aaa>a?Z>a?Z>a?Z>a?Z>a?y>b?y>b?y>b?y>b?>Zh?k>h?k>h?A6>ei? Z>ei? Z>ei? Z>ei?{> j?{> j?{> j?{> j?>{j?>{j?>{j?>{j?S> Kk?Sɾ KkSɾ KkSɾ Kk)ƾXk)ƾXk)ƾXk)ƾXkþ^lþ^lþ^lþ^lmmmmmJmJmJmJm1Fn1Fn1Fn1Fn*Dn*Dn*Dn*DnT0hoT0hoT0hoT0hocsocsocsocso:qfp:qfp:qfp:q>fp?|> q?|> q?|> q?|> q?Ć>Wq?Ć>Wq?Ć>Wq?Ć>Wq?>Rr?RrRrRrŕrŕrŕrŕr嚠Gs嚠Gs嚠Gs嚠Gsx?sx?sx?sx?s t t t t>"t?>"t?>"t?>"t?>"t?1> t?1> t?1> t?1> t?ݝ>mu?ݝ>mu?ݝ>mu?ݝ>mu?">u?">u?">u?">u?>Mv?>Mv?>Mv?>Mv?>v?>v?>v?>v?Ά>$w?Ά>$w?Ά>$w?Ά>$w?}ŋw}ŋw}ŋw}ŋw~w~w~w~wxSxxSxx>Sx?x>Sx?Qr>{x?Qr>{x?Qr>{x?Qr>{x?l>y?l>y?l>y?l>y?f|fNnyf|fNnyf|fNnyf|fNny\`y\`y\`y\`y9Zz9Zz9Z>z?9Z>z?T>sz?T>sz?T>sz?T>sz?T>sz?`M>z?`M>z?`Mz`MzG{G{G{G{7Aa{7Aa{7Aa{7Aa{n;ͬ{n;ͬ{n;ͬ{n;ͬ{@51{@51{@51{@51{/(;|/(;|/>(;|?/>(;|?(>~|?(>~|?(>~|?(>~|?">ɿ|?">ɿ|?">ɿ|?">ɿ|?v>s|?v>s|?v>s|?v>s|?@>:}?@>:}?@>:}?@>:}?>tt}?>tt}?tt}tt} ̫} ̫} ̫} ̫}}}}>}?s=$~?s=$~?s=$~?s=$~?s=$~?v8=#C~?v8=#C~?v8=#C~?v8=#C~?.=p~?.=p~?.=p~?.=p~?==ɛ~?==ɛ~?==ɛ~?==ɛ~?6=m~?6=m~?6Ƚm~6Ƚm~:~:~:~:~XXXX0=/?0=/?0=/?0=/?=mN?=mN?=mN?=mN? =j? j j jt+{t+{t+{t+{ibibibib=?0H=?0H=?0H=?0H=?/=?/=?/=?/=?,=?,=?,=?,=?I<)?I<)?I<)?I<)?I<)? tt}>tt}>tt}>tt}@>:}@>:}@>:}@>:}@>:}v>s|v>s|v>s|v>s|">ɿ|">ɿ|">ɿ|">ɿ|(>~|(>~|(>~|(~|?/(;|?/(;|?/(;|?/(;|?@51{?@51{?@51{?@51{?n;ͬ{?n;ͬ{?n;ͬ{?n;ͬ{?7Aa{?7Aa{?7Aa{?7Aa{?G{?G{?G{?G{?`Mz?`Mz?`Mz?`Mz?Tsz?Tsz?Tsz?Tsz?9Zz?9Zz?9Zz?9Zz?\`y?\`y?\`y?\`y?f|fNny?f|fNny?f|f>Nnyf|f>Nnyl>yl>yl>yl>yl>yQr>{xQr>{xQr>{xQr>{xx>Sxx>Sxx>Sxx>Sx~>w~>w~>w~>w}>ŋw}>ŋw}>ŋw}>ŋwΆ>$wΆ>$wΆ>$wΆ>$w>v>v>v>v>Mv>Mv>Mv>Mv">u">u">u">uݝ>muݝ>muݝ>muݝ>mu1> t1> t1> t1> t>"t>"t"t?"t? t? t? t? t?x?s?x?s?x?s?x?s?嚠>Gs嚠>Gs嚠>Gs嚠>Gsŕ>rŕ>rŕ>rŕ>rŕ>r>Rr>Rr>Rr>RrĆ>WqĆ>WqĆ>WqĆ>Wq|> q|> q| q?| q?:qfp?:qfp?:qfp?:qfp?cso?cso?cso?cso?T>0hoT>0hoT>0hoT>0ho*D>n*D>n*D>n*D>n1>Fn1>Fn1Fn?1Fn?Jm?Jm?Jm?Jm?m?m?m?m?þ^l?þ^l?þ^l?þ^l?)ƾXk?)ƾXk?)ƾXk?)ƾXk?Sɾ Kk?S> KkS> KkS> Kk>{j>{j>{j>{j>{j{> j{> j{> j{> j Z>ei Z>ei Z>ei Z>eiA6>hk>hk>hk>h>kg>kg>kg>kgy>̾fy>̾fy>̾fy>̾fO>fO>fO>fO>fc> ^ec> ^ec> ^ec ^e?u3Yd?u3Yd?u3Yd?u3Yd?sc?sc?sc?sc?ZZZZby>by>by>bZ>aZ>aZ>aZa?a?a?a?a?!F`?!F`?!F`?!F`?!F`?-'_?-'_?-'_?-'_?']^?']^?']^?']^?]?]?]?]?S-]?S-]?S-]?S-]?Ba\?Ba\?Ba\?B?a\=?[=?[=?[=?[?PZ?PZ?PZ?PZK?jYKjY?KjY?KjY?6jY?6jY?6jY?6jY?SHX?SHX?SHX??SHXH ?&pWH ?&pWH ?&pWH ?&pWk ?Vk ?Vk ?Vk ?V ?U U? U? U?91T?91T?91T?91T?91T?S?S?S?S?IS?IS?IS?IS?3R?3R?3R?3R?*h=MQ?*h=MQ?*h=MQ?*h=MQ?9dP?9dP?9dP?9dP?zO??zO?zO?zO<?N<?N<?N<?N?M?M?M?M?yL?yL?yL?yL?K?K?K?K BJ? BJ? BJ? BJ?I?I?I?I?H?H?H?H?eG?eG?eG?eG?/!*F?/!*F?/!*F?/!*F?/!?*Fg"?Eg"?Eg"?Eg"?E#?D#?D#?D#?D%$?C%$C?%$C?%$C? &)B? &)B? &)B? &)B?V6'pA?V6'pA?V6'pA?V6'pA?f(@?f(@?f(@?f(@?)g??)g??)g??)g??*>?*>?*>?*>?J+=?J+=?J+=?J+=?i-?*>?*>?*>?*g??)g??)g??)g??)@?f(@?f(@?f(@?f(pA?V6'pA?V6'pA?V6'pA?V6'pA?V6')B? &)B? &)B? &)B? &C?%$C?%$C?%$C?%$D?#D?#D?#D?#E?g"E?g"E?g"E?g"*F?/!*F?/!*F?/!*F?/!eG?eG?eG?eG?H?H?H?H?I?I?I?I?J B?J B?J B?J B?K?K?K?K?yL?yL?yL?yL?M?M?M?M?N?<N?<N?<N?<zO?zO?zO?zO?zO?dP?9dP?9dP?9dP?9=MQ?*h=MQ?*h=MQ?*h=MQ?*h3R?3R?3R?3R?IS?IS?IS?IS?S?S?S?S?1T?91T?91T?91T?9U? U? U? U? V?k Vk ?Vk ?Vk ?&pWH ?&pWH ?&pWH ?&pWH ?SHX?SHX?SHX?SHX?jY6?jY6?jY6?jY6?jYK?jYK?jYK?jYK?PZ?PZ?PZ?PZ?[=?[=?[=?[=?a\B?a\B?a\B?a\?Ba\?BS-]?S-]?S-]?S-]?]?]?]?]>^']>^']>^']>^']>'_->'_->'_->'_->!F`>!F`>!F`>!F`>a>a>a>a>aZ>aZ>aZ>aZ>by>by>by>by>ZZZZsc>sc?sc?sc?Yd?u3Yd?u3Yd?u3Yd?u3 ^e?c ^e?c ^e?c ^e?c㾈f?Oྈf?Oྈf?Oྈf?O̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾ̾f?yݾkg?ھkg?ھkg?ھkg?ھh?kؾh?kؾh?kؾh?kؾei Z>ei Z>ei Z>ei Z> j{> j{> j{> j{>{j>{j>{j>{j> KkS> KkS> KkS> KkS>Xk)>Xk?)ƾXk?)ƾXk?)ƾ^l?þ^l?þ^l?þ^l?þm?m?m>m>mJ>mJ>mJ>mJ>Fn1>Fn1>Fn1>Fn1>n?*Dn?*Dn?*Dn?*D0ho?T0ho?T0ho?T0ho?Tso?cso?cso?cso?cso?cfp?:qfp?:qfp?:qfp?:q q?| q?| q?| q|>WqĆ>WqĆ>WqĆ>WqĆ>Rr>Rr>Rr>Rr>r?ŕr?ŕr?ŕr?ŕGs?嚠Gs?嚠Gs?嚠Gs?嚠?s?x?s?x?s?x?s?x t? t? t? t?"t?"t?"t?"t? t?1 t?1 t?1 t?1mu?ݝmu?ݝmu?ݝmu?ݝu?"u?"u?"u?"Mv?Mv?Mv?Mv?v?v?v?v?v?$w?Ά$w?Ά$w?Ά$w?Άŋw?}ŋw?}ŋw?}ŋw?}w?~w?~w?~w?~Sx?xSx?xSx?xSx?x{x?Qr{x?Qr{xQr>{xQr>yl>yl>yl>yl>Nnyf|f>Nnyf|f>Nnyf|f>Nnyf|f>y?\`y?\`y?\`y?\`z?9Zz?9Zz?9Zz?9Zsz?Tsz?TszT>szT>z`M>z`M>z`M>z`M>{G>{G>{G>{G>a{7A>a{7A>a{7A>a{7A>ͬ{n;>ͬ{n;>ͬ{n;>ͬ{n;>1{@5>1{@5>1{@5>1{@5>1{@5>(;|/>(;|/>(;|/>(;|/>~|(>~|(>~|?(~|?(ɿ|?"ɿ|?"ɿ|?"ɿ|?"s|?vs|?vs|?vs|?v:}?@:}?@:}?@:}?@tt}?tt}?tt}?tt}?̫}? ̫}? ̫} >̫} >}>}>}>}>$~s=$~s=$~s=$~s=#C~v8=#C~v8=#C~v8=#C~v8=p~.=p~.=p~.=p~.=ɛ~==ɛ~==ɛ~==ɛ~==m~6=m~6=m~6=m~6=~:=~:=~:=~:=~:=X=X=X=X=/0=/0=/0=/0=mN?mN?mN?mN?j? j? j? j? ?t+{?t+{?t+{?t+{?ib?ib?ib?ib?0H?0H?0H0H=/=/=/=/=,=,=,=,=)I<)I<)I<)I. * * ------------------------------------------------------------------------- */ #include #include #include #include #include DEFINE_int32(size_multiply_test, 100000, "Size of the arrays used for multiply testing"); TEST(Multiply_Test, StandardCDoubleImplementation) { double* input = new double[FLAGS_size_multiply_test]; double* output = new double[FLAGS_size_multiply_test]; memset(input, 0, sizeof(double) * FLAGS_size_multiply_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < FLAGS_size_multiply_test; i++) { output[i] = input[i] * input[i]; } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test << " doubles in standard C finished in " << (end - begin) << " microseconds" << std::endl; double acc = 0; double expected = 0; for(int i = 0; i < FLAGS_size_multiply_test; i++) { acc += output[i]; } delete[] input; delete[] output; ASSERT_LE(0, end - begin); ASSERT_EQ(expected, acc); } TEST(Multiply_Test, ArmadilloImplementation) { arma::vec input(FLAGS_size_multiply_test, arma::fill::zeros); arma::vec output(FLAGS_size_multiply_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; output = input % input; gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test << "-length double Armadillo vectors finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); ASSERT_EQ(0, arma::norm(output,2)); } TEST(Multiply_Test, StandardCComplexImplementation) { std::complex* input = new std::complex[FLAGS_size_multiply_test]; std::complex* output = new std::complex[FLAGS_size_multiply_test]; memset(input, 0, sizeof(std::complex) * FLAGS_size_multiply_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < FLAGS_size_multiply_test; i++) { output[i] = input[i] * input[i]; } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test << " complex in standard C finished in " << (end - begin) << " microseconds" << std::endl; std::complex expected(0,0); std::complex result(0,0); for(int i = 0; i < FLAGS_size_multiply_test; i++) { result += output[i]; } delete[] input; delete[] output; ASSERT_LE(0, end - begin); ASSERT_EQ(expected, result); } TEST(Multiply_Test, C11ComplexImplementation) { const std::vector> input(FLAGS_size_multiply_test); std::vector> output(FLAGS_size_multiply_test); int pos = 0; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; // Trying a range-based for for (const auto &item : input) { output[pos++] = item * item; } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test << " complex vector (C++11-style) finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); std::complex expected(0,0); auto result = std::inner_product(output.begin(), output.end(), output.begin(), expected); ASSERT_EQ(expected, result); } TEST(Multiply_Test, ArmadilloComplexImplementation) { arma::cx_fvec input(FLAGS_size_multiply_test, arma::fill::zeros); arma::cx_fvec output(FLAGS_size_multiply_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; output = input % input; gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test << "-length complex float Armadillo vectors finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); ASSERT_EQ(0, arma::norm(output,2)); } TEST(Multiply_Test, VolkComplexImplementation) { std::complex* input = static_cast*>(volk_malloc(FLAGS_size_multiply_test * sizeof(std::complex), volk_get_alignment())); std::complex* output = static_cast*>(volk_malloc(FLAGS_size_multiply_test * sizeof(std::complex), volk_get_alignment())); memset(input, 0, sizeof(std::complex) * FLAGS_size_multiply_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; volk_32fc_x2_multiply_32fc(output, input, input, FLAGS_size_multiply_test); gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Element-wise multiplication of " << FLAGS_size_multiply_test << "-length complex float vector using VOLK finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); float* mag = static_cast(volk_malloc(FLAGS_size_multiply_test * sizeof(float), volk_get_alignment())); volk_32fc_magnitude_32f(mag, output, FLAGS_size_multiply_test); float* result = new float(0); volk_32f_accumulator_s32f(result, mag, FLAGS_size_multiply_test); // Comparing floating-point numbers is tricky. // Due to round-off errors, it is very unlikely that two floating-points will match exactly. // See http://code.google.com/p/googletest/wiki/AdvancedGuide#Floating-Point_Comparison float expected = 0; ASSERT_FLOAT_EQ(expected, result[0]); volk_free(input); volk_free(output); volk_free(mag); } gnss-sdr-0.0.6/src/tests/arithmetic/complex_carrier_test.cc0000644000175000017500000001210712576764164023412 0ustar carlescarles/*! * \file complex_carrier_test.cc * \brief This file implements tests for the generation of complex exponentials. * \author Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include "gnss_signal_processing.h" DEFINE_int32(size_carrier_test, 100000, "Size of the arrays used for complex carrier testing"); TEST(ComplexCarrier_Test, StandardComplexImplementation) { // Dynamic allocation creates new usable space on the program STACK // (an area of RAM specifically allocated to the program) std::complex* output = new std::complex[FLAGS_size_carrier_test]; const double _f = 2000; const double _fs = 2000000; const double phase_step = (double)((GPS_TWO_PI * _f) / _fs); double phase = 0; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < FLAGS_size_carrier_test; i++) { output[i] = std::complex(cos(phase), sin(phase)); phase += phase_step; } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "A " << FLAGS_size_carrier_test << "-length complex carrier in standard C++ (dynamic allocation) generated in " << (end - begin) << " microseconds" << std::endl; std::complex expected(1,0); std::vector> mag(FLAGS_size_carrier_test); for(int i = 0; i < FLAGS_size_carrier_test; i++) { mag[i] = output[i] * std::conj(output[i]); } delete[] output; for(int i = 0; i < FLAGS_size_carrier_test; i++) { ASSERT_FLOAT_EQ(std::norm(expected), std::norm(mag[i])); } ASSERT_LE(0, end - begin); } TEST(ComplexCarrier_Test, C11ComplexImplementation) { // declaration: load data onto the program data segment std::vector> output(FLAGS_size_carrier_test); const double _f = 2000; const double _fs = 2000000; const double phase_step = (double)((GPS_TWO_PI * _f) / _fs); double phase = 0; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for (int i = 0; i < FLAGS_size_carrier_test; i++) { output[i] = std::complex(cos(phase), sin(phase)); phase += phase_step; } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "A " << FLAGS_size_carrier_test << "-length complex carrier in standard C++ (declaration) generated in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); std::complex expected(1,0); std::vector> mag(FLAGS_size_carrier_test); for(int i = 0; i < FLAGS_size_carrier_test; i++) { mag[i] = output[i] * std::conj(output[i]); ASSERT_FLOAT_EQ(std::norm(expected), std::norm(mag[i])); } } TEST(ComplexCarrier_Test, OwnComplexImplementation) { std::complex* output = new std::complex[FLAGS_size_carrier_test]; double _f = 2000; double _fs = 2000000; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; complex_exp_gen(output, _f, _fs, (unsigned int)FLAGS_size_carrier_test); gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "A " << FLAGS_size_carrier_test << "-length complex carrier using fixed point generated in " << (end - begin) << " microseconds" << std::endl; std::complex expected(1,0); std::vector> mag(FLAGS_size_carrier_test); for(int i = 0; i < FLAGS_size_carrier_test; i++) { mag[i] = output[i] * std::conj(output[i]); } delete[] output; for(int i = 0; i < FLAGS_size_carrier_test; i++) { ASSERT_NEAR(std::norm(expected), std::norm(mag[i]), 0.0001); } ASSERT_LE(0, end - begin); } gnss-sdr-0.0.6/src/tests/arithmetic/code_generation_test.cc0000644000175000017500000001322512576764164023363 0ustar carlescarles/*! * \file code_generation_test.cc * \brief This file implements tests for the generation of complex exponentials. * \author Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include "gps_sdr_signal_processing.h" #include "gnss_signal_processing.h" TEST(CodeGenGPSL1_Test, CodeGeneration) { std::complex* _dest = new std::complex[1023]; signed int _prn = 1; unsigned int _chip_shift = 4; int iterations = 1000; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < iterations; i++) { gps_l1_ca_code_gen_complex( _dest, _prn, _chip_shift); } delete[] _dest; gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; ASSERT_LE(0, end - begin); std::cout << "Generation completed in " << (end - begin) << " microseconds" << std::endl; /* std::complex* _dest2 = new std::complex[1023];gettimeofday(&tv, NULL); long long int begin2 = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < iterations; i++) { gps_l1_ca_code_gen_complex2( _dest2, _prn, _chip_shift); } gettimeofday(&tv, NULL); long long int end2 = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Generation 2 completed in " << (end2 - begin2) << " microseconds" << std::endl; for (int j=0; j<1023;j++) { if(_dest[j] != _dest2[j]) std::cout << "Error!" << std::endl; } delete _dest2; */ } TEST(CodeGenGPSL1Sampled_Test, CodeGeneration) { signed int _prn = 1; unsigned int _chip_shift = 4; double _fs = 8000000; const signed int _codeFreqBasis = 1023000; //Hz const signed int _codeLength = 1023; int _samplesPerCode = round(_fs / (double)(_codeFreqBasis / _codeLength)); std::complex* _dest = new std::complex[_samplesPerCode]; int iterations = 1000; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < iterations; i++) { gps_l1_ca_code_gen_complex_sampled( _dest, _prn, _fs, _chip_shift); } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; delete[] _dest; ASSERT_LE(0, end - begin); std::cout << "Generation completed in " << (end - begin) << " microseconds" << std::endl; /* std::complex* _dest2 = new std::complex[_samplesPerCode]; gettimeofday(&tv, NULL); long long int begin2 = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < iterations; i++) { gps_l1_ca_code_gen_complex_sampled2( _dest2, _prn, _fs, _chip_shift); } gettimeofday(&tv, NULL); long long int end2 = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Generation completed in " << (end2 - begin2) << " microseconds (New)" << std::endl; for (int j=0; j<_samplesPerCode;j++) { if(_dest[j] != _dest2[j]) std::cout << "Error!" << std::endl; } delete[] _dest2; */ } TEST(ComplexCarrier_Test, CodeGeneration) { double _fs = 8000000; double _f = 4000; const signed int _codeFreqBasis = 1023000; //Hz const signed int _codeLength = 1023; int _samplesPerCode = round(_fs / (double)(_codeFreqBasis / _codeLength)); std::complex* _dest = new std::complex[_samplesPerCode]; int iterations = 1000; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < iterations; i++) { complex_exp_gen_conj( _dest, _f, _fs, _samplesPerCode); } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; delete[] _dest; ASSERT_LE(0, end - begin); std::cout << "Carrier generation completed in " << (end - begin) << " microseconds" << std::endl; /* std::complex* _dest2 = new std::complex[_samplesPerCode]; gettimeofday(&tv, NULL); long long int begin2 = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < iterations; i++) { complex_exp_gen_conj2( _dest2, _f, _fs, _samplesPerCode); } gettimeofday(&tv, NULL); long long int end2 = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Carrier generation completed in " << (end2 - begin2) << " microseconds (New)" << std::endl; for (int j=0; j<_samplesPerCode;j++) { if(std::abs(_dest[j] - _dest2[j]) > 0.1) std::cout << "Error!" << std::endl; } std::cout << _dest[10] << "and " << _dest2[10] << std::endl; delete[] _dest2;*/ } gnss-sdr-0.0.6/src/tests/arithmetic/conjugate_test.cc0000644000175000017500000001136212576764164022215 0ustar carlescarles/*! * \file conjugate_test.cc * \brief This file implements tests for conjugation of long arrays. * \author Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include DEFINE_int32(size_conjugate_test, 100000, "Size of the arrays used for conjugate testing"); TEST(Conjugate_Test, StandardCComplexImplementation) { std::complex* input = new std::complex[FLAGS_size_conjugate_test]; std::complex* output = new std::complex[FLAGS_size_conjugate_test]; memset(input, 0, sizeof(std::complex) * FLAGS_size_conjugate_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(int i = 0; i < FLAGS_size_conjugate_test; i++) { output[i] = std::conj(input[i]); } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Conjugate of a " << FLAGS_size_conjugate_test << "-length complex float vector in standard C finished in " << (end - begin) << " microseconds" << std::endl; delete[] input; delete[] output; ASSERT_LE(0, end - begin); } TEST(Conjugate_Test, C11ComplexImplementation) { const std::vector> input(FLAGS_size_conjugate_test); std::vector> output(FLAGS_size_conjugate_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; int pos = 0; for (const auto &item : input) { output[pos++] = std::conj(item); } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Conjugate of a " << FLAGS_size_conjugate_test << " complex vector (C++11-style) finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); std::complex expected(0,0); std::complex result(0,0); for (const auto &item : output) { result += item; } ASSERT_EQ(expected, result); } TEST(Conjugate_Test, ArmadilloComplexImplementation) { arma::cx_fvec input(FLAGS_size_conjugate_test, arma::fill::zeros); arma::cx_fvec output(FLAGS_size_conjugate_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; output = arma::conj(input); gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Conjugate of a " << FLAGS_size_conjugate_test << "-length complex float Armadillo vector finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); } TEST(Conjugate_Test, VolkComplexImplementation) { std::complex* input = static_cast*>(volk_malloc(FLAGS_size_conjugate_test * sizeof(std::complex), volk_get_alignment())); std::complex* output = static_cast*>(volk_malloc(FLAGS_size_conjugate_test * sizeof(std::complex), volk_get_alignment())); memset(input, 0, sizeof(std::complex) * FLAGS_size_conjugate_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; volk_32fc_conjugate_32fc(output, input, FLAGS_size_conjugate_test); gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Conjugate of a "<< FLAGS_size_conjugate_test << "-length complex float vector using VOLK finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); volk_free(input); volk_free(output); } gnss-sdr-0.0.6/src/tests/arithmetic/magnitude_squared_test.cc0000644000175000017500000001164012576764164023736 0ustar carlescarles/*! * \file magnitude_squared_test.cc * \brief This file implements tests for the computation of magnitude squared * in long arrays. * \author Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include DEFINE_int32(size_magnitude_test, 100000, "Size of the arrays used for magnitude testing"); TEST(MagnitudeSquared_Test, StandardCComplexImplementation) { std::complex* input = new std::complex[FLAGS_size_magnitude_test]; float* output = new float[FLAGS_size_magnitude_test]; unsigned int number = 0; struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for(number = 0; number < (unsigned int)FLAGS_size_magnitude_test; number++) { output[number] = (input[number].real() * input[number].real()) + (input[number].imag() * input[number].imag()); } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test << "-length vector in standard C computed in " << (end - begin) << " microseconds" << std::endl; delete[] input; delete[] output; ASSERT_LE(0, end - begin); } TEST(MagnitudeSquared_Test, C11ComplexImplementation) { const std::vector> input(FLAGS_size_magnitude_test); std::vector output(FLAGS_size_magnitude_test); struct timeval tv; int pos = 0; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; for (const auto &item : input) { output[pos++] = std::norm(item); } gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test << " complex vector (C++11-style) finished in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); std::complex expected(0,0); std::complex result(0,0); for (const auto &item : output) { result += item; } ASSERT_EQ(expected, result); } TEST(MagnitudeSquared_Test, ArmadilloComplexImplementation) { arma::cx_fvec input(FLAGS_size_magnitude_test, arma::fill::zeros); arma::fvec output(FLAGS_size_magnitude_test); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; output = arma::abs(arma::square(input)); gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test << "-length vector using Armadillo computed in " << (end - begin) << " microseconds" << std::endl; ASSERT_LE(0, end - begin); } TEST(MagnitudeSquared_Test, VolkComplexImplementation) { std::complex* input = static_cast*>(volk_malloc(FLAGS_size_magnitude_test * sizeof(std::complex), volk_get_alignment())); memset(input, 0, sizeof(std::complex) * FLAGS_size_magnitude_test); float* output = static_cast(volk_malloc(FLAGS_size_magnitude_test * sizeof(float), volk_get_alignment())); struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; volk_32fc_magnitude_squared_32f(output, input, static_cast(FLAGS_size_magnitude_test)); gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "The squared magnitude of a " << FLAGS_size_magnitude_test << "-length vector using VOLK computed in " << (end - begin) << " microseconds" << std::endl; volk_free(input); volk_free(output); ASSERT_LE(0, end - begin); } // volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); gnss-sdr-0.0.6/src/tests/flowgraph/0000755000175000017500000000000012576764164016525 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/flowgraph/gnss_flowgraph_test.cc0000644000175000017500000004206412576764164023124 0ustar carlescarles/*! * \file gnss_flowgraph_test.cc * \brief This file implements tests for a flowgraph * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include "gnss_flowgraph.h" #include "gnss_block_interface.h" #include "in_memory_configuration.h" #include "file_configuration.h" #include "channel.h" #include "acquisition_interface.h" #include "tracking_interface.h" #include "channel_interface.h" #include "null_sink_output_filter.h" #include "pass_through.h" #include "file_signal_source.h" TEST(GNSSFlowgraph, InstantiateConnectStartStopOldNotation) { std::shared_ptr config = std::make_shared(); config->set_property("GNSS-SDR.SUPL_gps_enabled", "false"); config->set_property("SignalSource.sampling_frequency", "4000000"); config->set_property("SignalSource.implementation", "File_Signal_Source"); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.repeat", "true"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat"; config->set_property("SignalSource.filename", filename); config->set_property("SignalConditioner.implementation", "Pass_Through"); config->set_property("Channels_GPS.count", "1"); config->set_property("Channels.in_acquisition", "1"); config->set_property("Channel.system", "GPS"); config->set_property("Channel.signal", "1C"); config->set_property("Acquisition_GPS.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_GPS.threshold", "1"); config->set_property("Acquisition_GPS.doppler_max", "5000"); config->set_property("Tracking_GPS.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("TelemetryDecoder_GPS.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("Observables.implementation", "GPS_L1_CA_Observables"); config->set_property("PVT.implementation", "GPS_L1_CA_PVT"); config->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); config->set_property("OutputFilter.item_type", "gr_complex"); std::shared_ptr flowgraph = std::make_shared(config, gr::msg_queue::make(0)); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); EXPECT_NO_THROW(flowgraph->start()); EXPECT_TRUE(flowgraph->running()); flowgraph->stop(); EXPECT_FALSE(flowgraph->running()); } TEST(GNSSFlowgraph, InstantiateConnectStartStop) { std::shared_ptr config = std::make_shared(); config->set_property("SignalSource.sampling_frequency", "4000000"); config->set_property("SignalSource.implementation", "File_Signal_Source"); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.repeat", "true"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat"; config->set_property("SignalSource.filename", filename); config->set_property("SignalConditioner.implementation", "Pass_Through"); config->set_property("Channels_1C.count", "8"); config->set_property("Channels.in_acquisition", "1"); config->set_property("Channel.signal", "1C"); config->set_property("Acquisition_1C.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C.threshold", "1"); config->set_property("Acquisition_1C.doppler_max", "5000"); config->set_property("Tracking_1C.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("TelemetryDecoder_1C.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("Observables.implementation", "GPS_L1_CA_Observables"); config->set_property("PVT.implementation", "GPS_L1_CA_PVT"); config->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); config->set_property("OutputFilter.item_type", "gr_complex"); std::shared_ptr flowgraph = std::make_shared(config, gr::msg_queue::make(0)); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); EXPECT_NO_THROW(flowgraph->start()); EXPECT_TRUE(flowgraph->running()); flowgraph->stop(); EXPECT_FALSE(flowgraph->running()); } TEST(GNSSFlowgraph, InstantiateConnectStartStopGalileoE1B) { std::shared_ptr config = std::make_shared(); config->set_property("SignalSource.sampling_frequency", "4000000"); config->set_property("SignalSource.implementation", "File_Signal_Source"); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.repeat", "true"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat"; config->set_property("SignalSource.filename", filename); config->set_property("SignalConditioner.implementation", "Pass_Through"); config->set_property("Channels_1B.count", "8"); config->set_property("Channels.in_acquisition", "1"); config->set_property("Channel.signal", "1B"); config->set_property("Acquisition_1B.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B.threshold", "1"); config->set_property("Acquisition_1B.doppler_max", "5000"); config->set_property("Tracking_1B.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("TelemetryDecoder_1B.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("Observables.implementation", "Galileo_E1B_Observables"); config->set_property("PVT.implementation", "GALILEO_E1_PVT"); config->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); config->set_property("OutputFilter.item_type", "gr_complex"); std::shared_ptr flowgraph = std::make_shared(config, gr::msg_queue::make(0)); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); EXPECT_NO_THROW(flowgraph->start()); EXPECT_TRUE(flowgraph->running()); flowgraph->stop(); EXPECT_FALSE(flowgraph->running()); } TEST(GNSSFlowgraph, InstantiateConnectStartStopHybrid) { std::shared_ptr config = std::make_shared(); config->set_property("SignalSource.sampling_frequency", "4000000"); config->set_property("SignalSource.implementation", "File_Signal_Source"); config->set_property("SignalSource.item_type", "gr_complex"); config->set_property("SignalSource.repeat", "true"); std::string path = std::string(TEST_PATH); std::string filename = path + "signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat"; config->set_property("SignalSource.filename", filename); config->set_property("SignalConditioner.implementation", "Pass_Through"); config->set_property("Channels_1C.count", "8"); config->set_property("Channels_1B.count", "8"); config->set_property("Channels.in_acquisition", "1"); config->set_property("Channel0.signal", "1C"); config->set_property("Channel1.signal", "1C"); config->set_property("Channel2.signal", "1C"); config->set_property("Channel3.signal", "1C"); config->set_property("Channel4.signal", "1C"); config->set_property("Channel5.signal", "1C"); config->set_property("Channel7.signal", "1C"); config->set_property("Channel8.signal", "1B"); config->set_property("Channel9.signal", "1B"); config->set_property("Channel10.signal", "1B"); config->set_property("Channel11.signal", "1B"); config->set_property("Channel12.signal", "1B"); config->set_property("Channel13.signal", "1B"); config->set_property("Channel14.signal", "1B"); config->set_property("Channel15.signal", "1B"); config->set_property("Acquisition_1C0.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C0.threshold", "1"); config->set_property("Acquisition_1C0.doppler_max", "5000"); config->set_property("Acquisition_1C1.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C1.threshold", "1"); config->set_property("Acquisition_1C1.doppler_max", "5000"); config->set_property("Acquisition_1C2.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C2.threshold", "1"); config->set_property("Acquisition_1C2.doppler_max", "5000"); config->set_property("Acquisition_1C3.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C3.threshold", "1"); config->set_property("Acquisition_1C3.doppler_max", "5000"); config->set_property("Acquisition_1C4.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C4.threshold", "1"); config->set_property("Acquisition_1C4.doppler_max", "5000"); config->set_property("Acquisition_1C5.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C5.threshold", "1"); config->set_property("Acquisition_1C5.doppler_max", "5000"); config->set_property("Acquisition_1C6.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C6.threshold", "1"); config->set_property("Acquisition_1C6.doppler_max", "5000"); config->set_property("Acquisition_1C7.implementation", "GPS_L1_CA_PCPS_Acquisition"); config->set_property("Acquisition_1C7.threshold", "1"); config->set_property("Acquisition_1C7.doppler_max", "5000"); config->set_property("Acquisition_1B8.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B8.threshold", "1"); config->set_property("Acquisition_1B8.doppler_max", "5000"); config->set_property("Acquisition_1B9.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B9.threshold", "1"); config->set_property("Acquisition_1B9.doppler_max", "5000"); config->set_property("Acquisition_1B10.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B10.threshold", "1"); config->set_property("Acquisition_1B10.doppler_max", "5000"); config->set_property("Acquisition_1B11.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B11.threshold", "1"); config->set_property("Acquisition_1B11.doppler_max", "5000"); config->set_property("Acquisition_1B12.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B12.threshold", "1"); config->set_property("Acquisition_1B12.doppler_max", "5000"); config->set_property("Acquisition_1B13.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B13.threshold", "1"); config->set_property("Acquisition_1B13.doppler_max", "5000"); config->set_property("Acquisition_1B14.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B14.threshold", "1"); config->set_property("Acquisition_1B14.doppler_max", "5000"); config->set_property("Acquisition_1B15.implementation", "Galileo_E1_PCPS_Ambiguous_Acquisition"); config->set_property("Acquisition_1B15.threshold", "1"); config->set_property("Acquisition_1B15.doppler_max", "5000"); config->set_property("Tracking_1C0.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C1.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C2.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C3.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C4.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C5.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C6.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1C7.implementation", "GPS_L1_CA_DLL_PLL_Tracking"); config->set_property("Tracking_1B8.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B9.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B10.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B11.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B12.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B13.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B14.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("Tracking_1B15.implementation", "Galileo_E1_DLL_PLL_VEML_Tracking"); config->set_property("TelemetryDecoder_1C0.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C0.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C1.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C1.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C2.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C2.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C3.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C3.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C4.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C4.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C5.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C5.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C6.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C6.decimation_factor", "4"); config->set_property("TelemetryDecoder_1C7.implementation", "GPS_L1_CA_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1C7.decimation_factor", "4"); config->set_property("TelemetryDecoder_1B8.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B8.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B9.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B9.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B10.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B10.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B11.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B11.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B12.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B12.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B13.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B13.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B14.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B14.decimation_factor", "1"); config->set_property("TelemetryDecoder_1B15.implementation", "Galileo_E1B_Telemetry_Decoder"); config->set_property("TelemetryDecoder_1B15.decimation_factor", "1"); config->set_property("Observables.implementation", "Hybrid_Observables"); config->set_property("PVT.implementation", "Hybrid_PVT"); config->set_property("OutputFilter.implementation", "Null_Sink_Output_Filter"); config->set_property("OutputFilter.item_type", "gr_complex"); std::shared_ptr flowgraph = std::make_shared(config, gr::msg_queue::make(0)); EXPECT_NO_THROW(flowgraph->connect()); EXPECT_TRUE(flowgraph->connected()); EXPECT_NO_THROW(flowgraph->start()); EXPECT_TRUE(flowgraph->running()); flowgraph->stop(); EXPECT_FALSE(flowgraph->running()); } gnss-sdr-0.0.6/src/tests/flowgraph/pass_through_test.cc0000644000175000017500000000350312576764164022602 0ustar carlescarles/*! * \file pass_through_test.cc * \brief This file implements tests for the Pass_Through block * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pass_through.h" #include #include "in_memory_configuration.h" TEST(Pass_Through_Test, Instantiate) { std::shared_ptr config = std::make_shared(); config->set_property("Test.item_type", "gr_complex"); config->set_property("Test.vector_size", "2"); std::shared_ptr signal_conditioner = std::make_shared(config.get(), "Test", 1, 1); EXPECT_STREQ("gr_complex", signal_conditioner->item_type().c_str()); unsigned int expected2 = 2; EXPECT_EQ(expected2, signal_conditioner->vector_size()); } gnss-sdr-0.0.6/src/tests/single_test_main.cc0000644000175000017500000000774212576764164020401 0ustar carlescarles/*! * \file single_test_main.cc * \brief This file contains the main function for tests (used with CTest). * \author Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "concurrent_map.h" #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_cnav_ephemeris.h" #include "gps_cnav_iono.h" #include "gps_acq_assist.h" #include "gps_ref_location.h" #include "gps_ref_time.h" #include "galileo_navigation_message.h" #include "sbas_ionospheric_correction.h" #include "sbas_telemetry_data.h" #include "sbas_ephemeris.h" #include "sbas_satellite_correction.h" concurrent_queue global_gps_ephemeris_queue; concurrent_queue global_gps_iono_queue; concurrent_queue global_gps_utc_model_queue; concurrent_queue global_gps_almanac_queue; concurrent_queue global_gps_acq_assist_queue; concurrent_queue global_gps_ref_location_queue; concurrent_queue global_gps_ref_time_queue; concurrent_map global_gps_ephemeris_map; concurrent_map global_gps_iono_map; concurrent_map global_gps_utc_model_map; concurrent_map global_gps_almanac_map; concurrent_map global_gps_acq_assist_map; concurrent_map global_gps_ref_location_map; concurrent_map global_gps_ref_time_map; concurrent_queue global_gps_cnav_ephemeris_queue; concurrent_map global_gps_cnav_ephemeris_map; concurrent_queue global_gps_cnav_iono_queue; concurrent_map global_gps_cnav_iono_map; concurrent_queue global_galileo_ephemeris_queue; concurrent_queue global_galileo_iono_queue; concurrent_queue global_galileo_utc_model_queue; concurrent_queue global_galileo_almanac_queue; concurrent_map global_galileo_ephemeris_map; concurrent_map global_galileo_iono_map; concurrent_map global_galileo_utc_model_map; concurrent_map global_galileo_almanac_map; concurrent_queue global_sbas_raw_msg_queue; concurrent_queue global_sbas_iono_queue; concurrent_queue global_sbas_sat_corr_queue; concurrent_queue global_sbas_ephemeris_queue; concurrent_map global_sbas_iono_map; concurrent_map global_sbas_sat_corr_map; concurrent_map global_sbas_ephemeris_map; int main(int argc, char **argv) { google::ParseCommandLineFlags(&argc, &argv, true); testing::InitGoogleTest(&argc, argv); google::InitGoogleLogging(argv[0]); return RUN_ALL_TESTS(); } gnss-sdr-0.0.6/src/tests/signal_samples/0000755000175000017500000000000012576764164017535 5ustar carlescarlesgnss-sdr-0.0.6/src/tests/signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms.dat0000644000175000017500000037200012576764164026516 0ustar carlescarlescCB ,C($A0]@CTA@B$AC'CC,5CCBUlCBCB-CBBB0A`BBBdTA5CB C1C/C2pCdCCBBhBPBCCBCB0L9D|C8t,Bt\xB[CCX8C%CCAB?CCSCKC\B\%A6BT,BP |B gCB`B@@XB|Bl*CnB<gCBH0PBC C#FX2`BBNXBxB<CxBALBBxBVB,BhCDB4C3CBB0CEC@A@;t8BB+CC@@NCcBHCB4DC0BhD'CBTCBAC@B` @XB CB BBB@@B?-C B$+CPACq_SBBBTBBC(FCbCAP\AB $C?CBBC, ^ ?CAd0}Cs0#QCl2CB/BHBpA|BPBoC\i[4B@PA 8B\B"CpCkCiC4\BCC,CC&yCP3SI"C0A A}B^CUAfCAX9C'B<?C(QCCBAA CpH Bp$HC>NC}3B[aCB?:BC=xBf5pBkICBHB(QC ClB`C C(BC5ABACPBhCBCNC)CCT<BCAkCC=CrCkCC|fC.CcCjCDBIC@@xCC*CACBsC^BUBACB`A^C@PCCCCCCCfCJ sECj B2BQLBBC.CHXBlAClXBABC$CBBBCtsCCzh  ,AA8|RCACB `B7C BC}CCBC-CHCCSAUC^B(YCB AC lBAABB ]\BpCDC1C\B$BB@B#& C0CBBGCCZC&C#C:C! p7CBCB'CBxCPCABB,BKCB0BC,P` C@oCV<C9C CCBPB@CBA4(CKCLBBpCkCB %pACBC*C$CBBlpCCB, CC `B!ChBdXBCT?BDBACB@.@`A<8ddBCB+CCC^xBlBCBXkLBC5CC\CLChC$|C@WCBCBA8@BC BABB8BBBBBCW CC8A(_CtBBsAdBt C4BOC7CB\BBABTCB=./CA5ClCC"CA1C8BBCBBBBqCPCA BBDB@@B:CC/ACCBBA(BB8BC!C\CBhB C\C8BAB,=DBAnCBC+CCPBCdRCB)CA AfCC3CCCCCAB$(oCBu\BOCBBlCDCCBCBAABC:p+8A+AUH$"CBC$BBquB@A`,BCnCBdBTCPAoBMhC CCX^CLKCCBCC@,|BBe}NCBt`("CCBB -5CpBBB`B'CCBC0BICCBC@B [ Bt@zlhBCBCgCBBHB A BBCDBCdBmBBe'lBFCBAA0 CBCBB,CC!CBD6P> CCqC#C=oCpFC0pAAABBP`|BhCxBCCtP (xCBCB%CCCp CCBxCAC CCC=CpCyCBAz CiPAYC px6?CA CBMCf A8BS.C`CAAucCB"F@ BCB(B^C C4CA8BBCCC@CBB@5pAC<fCBpA`BCB`!C&BBABP?(C(4UCDAClBtB)CBKXBBaC}C6C$GCKCCBC C<)CPfC BA` Z\+CBBBQvl-CACA@ABB7@@d CpBBBCBCBBCAdB+MC`BHCBC_CpB\ BBBGCCBChB6CBCdBB6CdCDBCZC2C$C  C@AsCBHCvpWCCRCQCBBBTCB CCAB&C A DPA\C8FC"BX@ @@(@ CjBUCBB-iC$BCwC}C:C,B|CCYCCXB $CB@BC}CCCpP9XBApBC BA1CAAS`BCC+@BBBdCmCCC4B9CBCBDBCtoCACBm@BCCBA3@AdBNxRBzCCo6A XC_C#hBBC@CBBB>CBRC4 C\ CpC$CZCMCCC`CABB gECC,CTBBdC`A<@~B ACBCB[B0C4haCB7C(CBC CCEC@C$CD>CT(B,B*CECABC C|C@ABfCCuBB@BBCA\BICWCCBCCB(BUC6CC'CBBBBXiCACCDACCCC(AB@EC'C$B`CCC-CBBeCuBBB&C`x9L%ACiCACBm9CBOCB@RCtCCCC!pA4BPVLBChCBCpCA0BqC@C5CBhBAp`C/C4BBmzCPCOCBKnC(CB#ABC]z'+CCCCtCQAC@BCtC8CpP< CBB>P C$A[A(CC@5C\BBzCBC?B8B TB0C@C@A@CA%C^B@0UCBBFB0@)CAChBCB@C)C4e xBJ<S@}nNC=CC3C!C BBBBdB$BAzCAJCB@BDBC( CCT-CBT,RB8lYCbpA*CC ACC@A,BCSCBYBC0C2C0BCeC8C!khBBCPBB_CB@B09CB A B4lDB/CBU` BC\BC,CB0AA HB;B9C|CbCB@CCBfHB! BC@A@A'Ch@AyCrC2CCxCCtBCBB3CCC -BBECABC&pBCBUCC:C)C TCPB!CBP @@/ ,BD8CPDhBCmCBCCB|XBHBC8B>@ABB@;CCCL$BB JCZCKCQ'CvCBB BC8CTCC`Dx@b%8CC%C@BCBtBBB@B,BvC0)CB\BC\CkBB@|BCLCPNpOC4BBnCCCD4BbBpBMUCCDqC@hB4BC\C`@@ nCByCB@B-CPC,CCrCCB}C/C9BAC@AB8BPBBBlBtKVCp&C,ChBBBBAC@ xCJC,@`ABCBPh{A%Td@0CmCQNCaMCBB+A(BdjBpAB$`B(BWCC4ACT CB0BpAB6pBBCBfBC0!AICoB}CAB+CB8RjXBXxBJC`B@AAAC@B-A0CRCA@AC CC]CCnBQ&C.CBCC/CAC4B B\ hBcCCPA>C"CCLB,BtpSCBCHCA(;@CBtSCBCCBBBDC@BCCC@ A C@pC0A,BBB@}@1LCBCC@ DCC .AI$\BBB:CBC1C=CCB _BC0A@BC|fCBpBd C(CBBB(pBB.CB7C#\H/1ClBABqC;NB_@@,C&C;BC@XBlCA9JCaCAB CC8BpMBHC@C1I3DBlCAB<C$3CBCWCyCTB )CBC)CBB8CXB0hHCnC$CABB,AABB@<UC;B.CxCA<'ECAC@ B!Ck$CoC5vDC@6C'Cp"C4sC#BCBCCARCCC;CC CC$CBBCT!C,BB ChC,CBpe( C@' CCA@LhCEAC,EBIBBL|0CCB%CCC6NBCABC8BBBBAsEBCBCKC!CC@BCABCPBCCdAC~C\BBvBJjCB{W|B0BC0GCB}!BBlCA BC@C(BPC|BPC CCBA<C7CCCCECB:ABC^t@#xBBACkBBBC,C0AAC\TBsC$B/C BCsC(C C0BB|CKCCC@AC7 CPAC| A=A(C`BCACBC8ChCiC ABBATDCBCC$CBBA$M8BPACHBCCB?AC CBB'CCCCCkCPB AnB!CABDB0BL@B,B BB.CCBL=CB7CBB`ABHuBTBrB4BC C&CB4B 7C6BC BD5^CB ]CACBXBBC5CCaCUA4B0A?SCBDCdB7C!fCCB*B@BPXB`80pBBpBXB0BB"CH6 CCbC5CCD0;"aCACxB C+CCBA^BA!BCuCXCBChCC"|LBCY CCAsCHF^CC|BC_@[BAd[TCBB,BBLA0DBCCzXB,B:hBCBBAB0BBCK#C C\BBBDCXBBj/(BCCABp B*CwCBPBlhB9CAB1CBCC(@@nCCB C0CCC8^C`$B\CpAB"C IBCBuC8CaCFNB{CC[C+(CCzAB@B#CCC7C pBCdBC BB@@Y8BCCLCBBAC`(C!@@CCCCC]CBAL8BAB-B~CB@B0A)CC\4CKBA`B0:C B?CCpx@CYCCACIC CBAC2PB"@Aw@@?CBCGCA C:CIBPB@ClBGCCuCAB4"CB\C=CCBC<BCZCPA CB "C'CmB,\ ABCACB`C B\iVBdB BBBzLBBl&CB0B C=CCCCAfC!8BACWRBp=CC}C?CT @@C AAlCBB`DlB BBBAolCCBCBA@CBPC@AB*CBClAB8BXcC'CBDkCCA$ kCB|CC CCCCB=Cn#pA$Bx C0CdCC0\BCCC( Ch(@(BA.&@#C,CC CBH_|BC,BB*CC0BBA Cj\EC0BTBM$B@@CW @@CB{C D4BBAPACB@ )`BpA@$zAJCBOC@ABB0BCA"CB$BBBCChC>TBB.sCBBCLBBAwCAB ^CCC`wACCCXCC:C@B>BBPBCCApBGAHBBBBBpA TB BX C*CCyCB BBK B* CBBXC*9 CCCCC'Pe@mC,CCCn,BLBbBg|B%`B-wBBCCA>CAA\B CCpC2\CBBBpB(CC\B0C9$BB BBBGOChBSC@CHBA.CBBBKC@CTCTBC A!B@ C@C A+\BCC@ CpCBB@D7C_CyCB@ CDCwABJCCjCC-C@C(BAa,B zC0CUBABgeB BCpBB5B@hB@B:ABB{C`BXCBCANBB'{B(Cg,BpvC%CBB C@CB$C@AOCBCUCBB@AZ,0ABBDBB&BU@PBC C:A27CtAXB4B+CpC\BrC`B AD@BKCdBCxCB=CBCB C9C8CjBbTBglBAC?BBB6CB BCBCCpAC AAACCCCCCeCPACC{CUCAC0Ap<CCCBkC!CASpBeC}BUCCAB2YD\,BBBCACCBwCpAB0dB]|BCAhC[CBhBVCd(CCtC8dC)C7tBC`ABBC#CpABB CHC'BoBA&CBB\ClBBCA_C\BBACA-C(BKC@CCBCACC\C71BBBHBDCCCCCLz B@BaCAaCBl0ACBBCCJA@B.CBC CFBthA3C`vCCCB@C I@B`0ACCtB?7CACBCBB@AAXBBpBBA B)CBC @AnC@AC$AjCB`BSC.CH@5C+9#CB@@BLB|L|+CCBP@BCC0MCAeCiCaClZx+CBzCBB5(pB|BDBpC CC BBME^UQ@BCBCPBlBhB@BBABPCQCBlBmcC BVC`CPBCBBJ cBr@B@uCWC@A1ACC/CBfC'=CCBCBA+BZL>C4C5hCCJB ASCCCAhB@N@t#CC9CB!CBBBtCC,BCCCCBC'CMCBBC BpBmC8BC?qC]C3C'UC"CBBn T`*C{BCCTBA C:CA(BBCDC@)ClTCC<BBB\B@ARC CC~CCC-`ACCLB?C@AP7C\t&CBB`C$BBC@ CBA$BxBbCjBBBvCVCd xC7C?C0dHBC@C\BXCCB@DB7ClB@BtB!CACCCCC@ARC BpB\h\B@ BBA(BBABB%CiA[CBx"uxFBw`A AghCA$BCCUC=`(B(BBBBBT0AlB|A@ B$(UCBBC\AC*CpBCC&B|B\BCCBC3CABCBHB@XBB_CPCBAAnCB=]CCAvCUC6`AUCC 0C*@C0A2C"CBEC CCMCCUBB(C@BCo@"`B@tCHC@@@Bh$CBTB3CLC C6alCBB C=CBH$CB@JCB0BtCBpA%?[C5kCA0NC@ANCBCxBC,B4Bi B@BBP+CBbCC AHBCBC@@BBA*CCCAQCB^CA.ChBL`ABGCdBBDB QCC8CB$AXvC|B2C AACP ? CAChB@ ApAABABCAC$CBBdB51; BidMCk CX`C$B&CCCB`C+C)CPDCC{C CB\B`B,BC0A ClCC*iCvCD0BBFCA CCpTCHBBC` DBwCCB BCBiCNB,B$B}CACpB` ApBBCXCKC)BUNPBC8=C$C`@@FfCeCCBC00C`!CCBAkCH`xB0AvCBBd:TC?BC-CNe]AUCfVCoC`C`AB8CCBCCCABBA CCCBACB*C6CCCC%BjT`CB0ASCB-CB:CVC$BBCA^CTBiGCFC@ BDBhCCACAPKBAA?CCpCA *:LB,BBBBBBAT@@{hLBBC CCCC`B?@% BC BBCAABBLBCCAdCB!V(4lBB,BBC'0dB@@@CCBACCC@DeC-CB_C7@BB(B4CB@CPCBkAABCBLB0ACpAApAC@A0_CxpCCCCBC CBBhW,B&CeC4BByQ+@,CCJCyCL`AU B:C6CAYC,pCPCAC)C'C|B`AsC(B\C-COLCACCZCBC|BBTB'CBCWCC6XCACB@B\ TC5CCC!'^CA\CBCOCBBtA4XNC0BC=C 0CihBp ChC4BCXBCBALBo CUIp BACAHBBCCA`AzCCBACCBB@ApBdCAoCBBhB$ ,BA)oC^B$B0A4B;DL1lBpCojCXB(cLB=CLB P$MTBJyC(COC@C%5CdBBNCTBA<BZC8BBBCB@BC< &CCBPAteCBBjB C<bC$B}0BBCCPBCB{ChBBbBDCBC0CBoC\BPBDj CZC? B0AB4B]\{C C$B B$BHC`BnCBSC@CSC0CBCecWDB4C.0LCZCtCD*`A5AABBBPAXC\ CC8CCBdB<K%vCLCCqCpA ChBCuCDCCaCCHCC7BBAMBB%C@B/CK@` .C@pvpCDB)# CCPgC0C B^CB!tB^CAC C2BBxBAXKCB8CAC!CCC* gC<RC5SA%ACyC9 mz@B@BBCB6CnCCBBCB$BB8CEBCbCA]D@|BIC`IACBUCC@C-/CTC CA|ABI@PBCC BAA4hBHC#CLBBoCB~CCC$CRm+oC)CBBZC TB(BBU5C'CC4LC7C2@@8B@CBA(GCwtB B`B@@ BCCBKCCN@1VP@CBBPE6A@&04CBcC@AL\B*j92ABCCEKPdKpBCBGCC$ !B`BAjCCh C Ch]nCCHC CCC\TJCC,CB% kB@ABBBB(BI L<AC,2lBzB\`C-CBCCBCCC BpCF@D BBCA5C;@BWC 7C/CBBMA.BPBBYCPBBtCBwC!CBC3\CCPABCpCDfDBB6C|A4BDB\BPGCB\=CCAWCBBCbC4BB(B^BB9C7CBaCB8(BSB0C!CCB0BC$CBCBB>Ch.C3C@CeB&C8BtB5qCPBBCp(`ABBBCBB)>CB8CCCCr`BAB*B@BDCLBB?AC) BBCCBB@BoCC0CUBBdB@A ,BB_CBOB#CCCPA<'CUCB(BCACAxAAfCC(UC B CU0H(qACpABBHBAtBBCC\hChBC^C9CBm:dBCCCxB}CBCgCkCDCBB@QC8C`BA*(BfZB-CbCrCC AC0=C*BCBB5C>j8B;0RCBXBCBBBC@CCkCHBBCTBBQC B^HBSt<pQC|vC4-C CCCBHBBBC|AB(nC&CMCB>CBUy*CB@BAL WCBA)CCvCC8CB<7LBCy$BC8BCC?"CWC0pB4BBAB B> CBAACC C8CC1CJC@BhB9g@B C6BBBBC@CWCC C`BDJBxBCBpB4p\|B)CXBC0C(BDB&C C8`C9CH CDCBC@C>C,CCBCC,mpABCBB4&C0ABCCTCDB(BdBpA!2CDCHBB@pbAABM0|CPAACDBB4$CBBY1C"DB@ABCB@ABA}ClBHBPXC`BlB@@Ad?CBdBB/CB,CBA Ah B@C Cp1RC4BCT@A<ICB5CCSCCCuCCB@8B@AFCCBCsClABtB@WBCBZB@!CABRY BC4CdCC(0DSCA$C)CDpBts@&`B|PCOCCB`4^`CAGBAuBB@BBxBBXl%CKCBRA$wC:#+&C\BpBBL[CBCHCxBA`.CCB@B)`BC[D CB.BBB$C*CACpeC#hCAC%CBBBB0CBC BBA@C^C{CBhDC lCoC CuCCB8CCCBaBA\B(Bm@.8BEC5_CICoBJ^tC |BP!CjCBP4C[CLFC&C8BCPAATj`hC,BAxBCC CA-Cm|B8kCC@%D+CCXC8BCAltBBLC*$CB-9CpAdB CBB`B`BCCPCCGCFCCCCMCLA AdBCAHBtdC@ A@C@C.C+C`CBeB;CdB C4|B C@BCTBTCBCC,P@>A`B'%TB1CpBBd ;4BVCCCB&B@@ACjB BPB`B.@#ACCpLC?CSCBBCAC~C LBBOCCCBPBBzC$A(CMCBCCC.CCBCCBCpBpBBBB\BCBCCC*B>CB8BABCBC0C{BOCC,tBCCUC,PB0BPCA *CB|BACtHB@B?xBBC8 CnCBcCCBBBp XBiBlBC@@A|"BBLCCPCMBCCPBCBXBh@@C BGRB%"C0CG8B/CC`Crh6dB@z@BB,C BBC4B<BAlwAC BCBBlCA0AB@TB8DB%ATCHBB/B@@0HC:@BT0NCPCEEC@Bi8BlYCB(BltCFC-B@CBBB_C< CBnBhx0Al@B'CICBp:"BBICBsjBBNC=@@BCClBACATjCB2CB CiC5BTxp!ABBzmdBC[C=CB+C^CAAC@XTC B0A|BPqCABXUCABCCCBCpA3Ad0CCWCl4CDxB/] B@|BBxTBBzCB#C0*BVCBCB$Br:Dp{0QpB #B]iCC\C +PtA0?\MCAsBA3CA8BBBC'B BlB _CAvCCNCB!CAC?CBBCQC|8CjC CP` a\CXCBBB^tCYCC4BB @nA$CABCdBCCAAoeC0CBC&CcBBCdBA C@ACHBBPABBBP/iC0tBHBCB5CcB @@BCB*T0A@G=CR@BB@D8B+ySC)A?CLM qB= C*CB'CA CMC BBBBCC|B C4pBPB4B.C@C CC CCCBBBdjUH5 pBC*CzC@fB BCB4BBBLd~CC,CC&C,CBFCC@CCwC|C)C*BBCZBB0AB{C[BBC<FCrCBCAC]C C@CCCC>ChB`BcCC0C@BsCU]CC?CD|BpBA B.CB@CCiC|C% BC vAU~AAr;z0B;+7QCCBp6#A'CtCCAHBsoCBB3BB1CpC(Cd4APBCC=CKCCBASzBtBACCAB'CBAACBC@BBoCBCLBAFC@ABtCzkC~CPBTACpB,B-BxBB@kC(BeCpACC'-C8CRCCKCOCpXCe=CB?@CBC`B@A0BNC!CBBpA@@ CBBB C/Y@(CCC1,AtCCBCB@BCBPAXBQCPBC0 BC)CR@BBBBZC8CC?C0XCC~CCCB6KxBhB@BBBBpAw@AAB(ABCBCChBBC|B(C\C@@CBB;CDB]AjC6BfBCCC >CHBB4CB@AC-BACACB`BlB@HBCCB@ H@:@vC@@CZCCSBCABXCB`JCCEC(BCCAC]CqCG#CuCABCB4CC0ABhB@(BCBCBCBPB_CtCBWCd@BCC0CBgCoC,BCBC(BBCC[CCCJAp4B"4P0C@@B8CCV-C#C(9CCgCVCBBXBAHBCiBC?C~C{C4$oCBCvCB8CB=BBBC"CoC@1C C BC0hTA6CXCJ@DB?CB0CTCCX-CLCBPB=@WCCCB BZCB7ChCARCCPCC4ICCi?CZB7AAMC.A,CDBBT/pA AD`B C@f,BDBAcCC~CCBTCCCC?C`C7C CCCBU;B~A$BPABd|B8B@@?ADBCBpz CBxBC CBZB'BwCCC@\B,ABACLBD^I@APBCCTCVCBY'CEB@@A=CnB#|BIHB@@@C8`BC-C"C(CPA~C9CT B<lCB`lB]C^@AB|C@BBB@BBACVCB4ClC3C6CBBCp @@ BB`CqC.CZCBBB@CBC9CA]CB:@B4C CCCCNBlC-8BA CCC|BABLBAlB7[f wBBBBuC@B+C/ CXBBj\BpB/CCBBxwgC AB-CABn @BCLBHC`Gx hC`CAxC2@AdBw^CBABBt\BMCCB BVACCwC{$BB#CCBpAmC1C1JC0A@ClCBq#C0C`BlBl$8TBPB%C9C!8BBPCB(vCAB CHx,CC!B$tB`8C/CWCPCFCC]AAGj6A/BC(B@0$Bx!CCCtCBB"tD-C gCCBLB6CpCBTBABB(CCB0@BCKCCBBmXCACB(BpCCFBYBBHBBBvCvCACABDCCCBSC#C_CCC@@|CoC42PB@CCC,CBBC$BCACB$BCGC:C+CPCACVCAChhBADBAhCBCB**C\BCBBAlACCCBnCCBvgCA"CCiC%CChB6B)ACBCaBjBBICuCLCfCP5CBCGCC1CBC`BvC@ BCBA@A@NCeC BC]CmCBRCMBDB@B KW3CRTBCBCA4B\BlBBCBBB`ACLC2CDCdBCBCBV*CBADBC7JC0&BxB|@.Bx+ C*hBTC)BC@A3ClBCQCA8CCAAM]C@B8BA4C B0CSCC6CfCB0BvCCC@CjC% C]CB_C@C>}{pCBCuCBCx}C\/C CBB@B CLB$B:BBhC;TB8C1]CA!CFCB+C0XA>BNCCXDCvCCSCCBCABBXBBCB~ B(CBpXCABC8=ClB$BCoSqCCPBBPBDBp$T1BB"ABLBfCCONBCB@kCCACC.C aClAPABB\BB"CCB EyBBA#CAB,CxBC [CC@BBpBCBCC!(?,BH B$B:C`PABX?6lA<BHC@ChBx7CCB"kl`0@CCCAPB8B\\B,CuClChBMB@BHB~CHDBJCkC*=bBBDB:dBt B9CPCABK@BBSC@CdCB`BA_ZCUCABB \BM,CB$CBBpA'CBCBB BBpZ!UPCAPBB>8CBCCUCCBC@B`BpAA[CC|B dC*CdB+CBBCLBABiC4BoATBYM}CCBpBXdB0CCCB BHBBJ!Y0ABCCPABtCCPBCVCCBBBg:CBBBCCfCLBpBSCnC0BBNNC CCC AA BpvCCBpBBBC@PBOCC`BlBPACABAB`AB?/C'CBB>PCB< BCBC jLBA/BCEB}CA8$BdChBCBCB d5XC1CQCKCC1MCBBA CHC.C;DCCqC/C$+B"AfA-BXdBAB@OCDB,BCCBCH0 BBBBf>C6AVCA@BlB@3C&CC9CB~C@ABB/B8CBfCCCB/C0CGCBCl`TBFC 8C`AZV@ABjCC;CACAA@A@@;BVC-B|C$VB BpCBCC@BCCp)C$CB3 CCCC|9hCBCACBB-4C7 Cv@A$BDCX1C8C4BCBHBC {CCCwB_CB4)CBUBnCtB`BBcCCXBWBBBCBCB^CBBBBpABApBtBYCCBBBB4 C`TBaCBliPCC@bC(C;PBOCm7CBA(BCCCCBP2/CB|B8CA 0g8+C,BCCCBCD<?C@qCGBRBPBUdBB6CBBBCoCCCC?BCCUCCCBCCCVUSlLC4A AgC\8H0GVCBCCICBA+CltB08RKM,0C BB8BWnCC CBB@<(C C4CB<UCBCCVCCA2BdBBBr\0BeCB*CXCOCBC0CLBPBBBBACC+C@AB]CCA|BUCZCPCCHBB'CC9C9C&MCA C\C9CAXCBlB%C@DBB6C'CCtCBDCPAC4xAAjCC6C */C4C BrCBB!C{*CA[C?RCBC C$B8CVCCA?CB OCNCB(@8$CB6C`BC?[lCpBCBChBB*(C|PBZCLBCCC C$;CnCCBJCCBCCABBAHCr(Cd[Ce"!B`ACPA`ACAzCS`+tVCBCBCCBed4BBBd8cC(BBCpa@@gC@B@Ch'C@@BBABB`CB@AC@CC CBCA#C{CDBMC ChlB${CBC+\BBa2A2CCC5CLC9(B9CBpCBCBYCCcwCCAB BBtBCAAdp p4BCB)PA C1A9C>CBALB?C C@BBS }%BBCCCxB Op=|B ABB1CBCdBNCP@ CBB@!LhCEBpA(&TBpA2ByA+`Al{TTp @ATBBCBCpACCP CDBCKC*C@CAkCC@CC8C#<<|DB AHC4BM|B0C`lKOCA>CC@BBBCCCCHBB;C0B/CBDLB\BAxC8#CBCTR3BCBC BgPCBRCC C@BB9CB*~C C@CACC?ld CPF BCbCBBC`AD CC@6C0ArCCzCCA$BCB)dBD[CiCAB-*@k@C C--C4TCBBAdBA(}LC0CpCCg#UC CC@SBn0 B/BC@B AB@BBTBBdAoC (BAB@|B@]DBgBs&C%BAqCBABBBaC4BAC@BBiBCCC0lCAXBBC BClB,BB+CdTB`qC A 'CBB4By|CB#BCB)(BC+CCBbCBBpCC@ AC CpB3tA_mCpABCBBB5CBB3CC(lCBBAB^CC A@Cx,0B?NCxBBBA+CZC,B/[B=CYBC|BuC+{C@A|CdBCMCaC-C\CC8BcC &CP^%PAd@ BB_BBC!C:CpBAABCC0,(A`C|B3B=CBPA`ICCBBhC BC|xCCB$B$BBBL}%CCACBhC0BBCB@CsCdBB(C9C.sCBvC5CC'A$A3BG 1ASCBCJC*CC AFBzCB"@WBCBApAjCZCxB'B:C4F)CtCBBBCCC BCBB@ACBC@3BBFC AdBAB/CBdNCtCBC:CB0@<yCa;CBBA0ADBBBBJB\CB Q~C|B4BB(-<7LCH8dBBB@AC@:C>B CkCCpAC><X@BD(BCJCBB$`CBB`MC{CGCCHC\&CB\hCeX lBA! 8PA(HBp p"C@nCaCCBOCAA,BC?CAzCCBAA@"CtxBkCBCBCb#CABBBB2BC B#CB@{CC@{CxBCFCA(B6C B@tB@CTCCJCCBBBpABzCBB}-AC$/$CWCB>CPACBA|B3BxBQC^C`BCHCC|B/CABB"%Bp@D&CvCBLBBBdBF0CA B! CBQC-OXCCaC-$BwBBxBA$PCBfCpBBLBPJCkCaCCLBD6CC*C0CpBHCB<@CCCCzC,BDC8BJACABC$ABC??CBA@ABcCnC3CPAnCdBC3C<$CU,BC`ACtCCCxCCPBB CB0 BHB|D>= 0B`0lCB< }A xBC\C@@}CCBdCBBCCCCA,C6(LC@B3CLAJq)CBPCh\?>CCBC~4 60BdDBBCDB5CBX $aCCdB ECJKCBBl A@CBCB$9CChBCBBpCUCkCACPBECC?t|Bl`ACACBC>B5CB0CBCAk B B;Br B\@BCUCCxCB(B+(yR8BpCBBCB`dA$CC_ChlBd@AldBqCC4C@g$HBCCCCCPCC,BeC1C@TmA!ChBB`A6hCBA4CCCxBB@C> LBBXg$lC@C HCCB@XBB B\0C CBA.CAC=@A@BB/@ C\B4BBBlB@@0ACCC9CABE)BC ,BoCCBCCgGBC|C4>3VCSC@tC ABW@@DBBB?`CCBC4BBB}CC-B@A0BBpC@zBCpB B8|C%C'YCB C CACBC]C:CkCBb?Bo] AbB`>0CB`,ACH^CBBCCC,PC>CVCB\BpA]s/CCCBBB`CbC?lACBC9CCCBpGCBB0AAB-A'x9B< C@ECBDBX;BCNCAC-CCCABBpABp C0BRCJCBC1@AC=CpACrCBHC?B PAYA T]CAD @B+CB? C <|B@=\C@@ DM&AMCB$BCCCBOIaCC`CAajCBB@BAAB=CCLCBB@($C B@B6C,CtCB@EuCCCB1CBC` cTBOCXAHCCB BB&Bv(|B>YCCCsC6CPClBA:C?CBCBCBCB\Cn BCCCHBBpnCt|ClBXB8BB`?pBAbCPBCWFBCT0)CBB20C9CCB@U[HBd)=_ CACXBB6CTCBxDtBBmCCPB C@UB;ABBvP@B BvIPB 8Ci0(]B@BACCCLBSIgXB{CBBBCtBbCVCICnCBAlC@Bd0} CCCIxB89x CC`C9X6@BCB-C&!BdCAB`BBBACA<`8CBqCCB'X@@BBBC@CECBPCPCICBBtBHCCBBHBB'&CTC0BBC1CBBCLuCCBAB+(B|BBBB CA+$CB8CDB6x`CAL$NCC/CB{CCCTiCC4B\BdBICC(CCAB@BCjC0B#CBLCBCAB@?g@BBC1`ABBBHBC CC@B8=CdCCXCBBCpBC.BLx BCC?CBW@BCBBHBAXC,C0dCBC@@CCBkC/CHB!BB-ChC3CCDBA$BACC<B@BC@ `CpA CCiCPACrLB)C@CPCBBC .C, ,~CBpA A&C"CC0B8@BVCp0BATC;A/B/wCBCAiCApB0PBCoC4CAxCyCBC CC}C? C`B6C K H#B.CCBD"CLBBC_C3C@ BPpACtBACB=PBBABB0?lB &CUCSCCB!BB[?CWC?CAB4BCBCBBCCABCB``AB4BBBh<BPLJBQC -BlBCBBgCA!C@@"C"d@#40CdC@CAd IT@C0C,tC$B60BBBC CCCCTC@BDCEMCB@ClCp C{C@ABC@L@HBACBBAYCA?CBAB`AA$B@@B A=C4ZBBl A{CBC@(CCB%CBCAAC1%CB_OFCxCdCBC<BP`BPB BC@B9#B1CBCBAC@0BWCB{C"C0B6CxB,CpBgCBxCCBCCBBC0C DBQC?B ACCCB7 AgCB@>CB0BCC/CjC4BBB@A@A_C2DCAhPAG@BX)@CCCBBCmBABKVCCOCCLBCyB:,BBepC5ClC C8BaCpClp^ARB"B<CBAxBCBPBBCxBC{_CABBBAAdBB:UCXC\@BBCBCBWCA+CBPnCLoB'CxBH0B=EK(CB/CBB BP3CBC3CBC8CC CAC\CBVCCBCBCA@CtB9C(CPACCBBtCpACB0B0BCAuC`%C3CCA ^C B?H)C@C8e [D#CBCC&Bc)lBB8RCPA@CO@1C,B\BCC0CBBHBCnCCdB0A C B@CrC, ,BdBA2CECCGBCpC@OhC|B`A| C BLBCCBC$ D?CCCCCgnss-sdr-0.0.6/src/tests/signal_samples/GSoC_CTTC_capture_2012_07_26_4Msps_4ms_analysis.txt0000644000175000017500000000344412576764164030473 0ustar carlescarlesSignal capturing: Hardware: USRP1 + DBSRX daughterboard (Rev 4.5) + Antenna Novatel GPS-600. The USRP1 uses its internal 64 MHz onboard reference for deriving the sampling clock. Date: July 26th, 2012 Time: 13:31:49 (UTC) Location: Roof of the Centre Tecnològic de Telecomunicacions de Catalunya (CTTC), (40.396764 N, 3.713379 E), located at the Parc Mediterrani de la Tecnologia, Av. Carl Friedrich Gauss, 7, 08860 Castelldefels, Barcelona, Spain. Signal capture utility: we used the Universal Hardware Driver (UHD). UHD driver capture to file example located in uhd/host/build/examples/$.rx_samples_to_file File sink: In order to avoid buffer overflows the target destination for the capture file was a 4 GB RAM unit (in a system equipped with 8 GB of RAM). The linux command used to setup the RAM drive was: $ mkdir /tmp/ram $ mount -t tmpfs -o size=4G tmpfs /tmp/ram The command for capturing data was: $ ./rx_samples_to_file --file /tmp/ram/usrpcap1.dat --type short --freq 1575420000 --gain 50 --rate 8000000 --nsamps 800000000 This captures samples in interleaved (I&Q) short format (signed 16-bits, or 2 bytes), which is still not implemented in GNSS-SDR. Thus, the file was converted to gr_complex using a simple script in GNU Radio Companion. ===== MATLAB Results using plot_acq_grid_gsoc.m =========================================================================================== Settings: sampling_freq_Hz = 4000000 Doppler_max_Hz = 9875 Doppler_min_Hz = -10000 Doppler_step_Hz = 125 Results: PRN 11 POSITIVE ACQUISITION maximum_correlation_peak = 23.0285 delay_error_sps = 13873 Doppler_error_Hz = -9500 noise_floor = 1.8919 Gain_dbs = 10.8538 PRN 12 POSITIVE ACQUISITION maximum_correlation_peak = 16.5534 delay_error_sps = 10583 Doppler_error_Hz = -7250 noise_floor = 1.9020 Gain_dbs = 9.3968 gnss-sdr-0.0.6/src/tests/signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms_signal_analysis.txt0000644000175000017500000000200212576764164030532 0ustar carlescarlesMatlab Signal Generator: function [E1] = fcboc_E1_baseband(Fs,BB_BW,CN0_IN,Tsig,FI,Doppler,Delay,numsat,flag_Datos,flag_E1_B,flag_E1_C,flag_local,flag_second_code,flag_noise) %Fs= Sampling frequency [Hz] %BB_BW= BaseBand bandwidth [Hz] %CN0_IN= Carrier-to-noise-density ratio [dB] %Tsig= Total signal time to generate [s] %FI= Intermediate Frequency, 0 means baseband [Hz] %Doppler = Doppler frequency [Hz] %Delay = Code delay [s] %numsat= Satellite Vehicle number(1-32) %flag_Datos = 1 -> Signal contains random telemetry bits 0 -> No telemetry %flag_E1_B = 1 -> Activates Galileo E1B primary spreading code %flag_E1_C = 1 -> Activates Galileo E1C primary spreading code %flag_local = 1 -> Signal will be used as a local replica %flag_second_code = 1 -> Activates Galileo E1C secondary spreading code %flag_noise = 1 -> Signal contains noise 0 -> signal is noise-free x = fcboc_E1_baseband(25e6,12.276e6,40,0.2,0,632,0.73e-3,1,1,1,1,0,1,0); Fs: 4e06 CN0: 40 dbHz Doppler: 632 Hz Delay: 0.73e-3 s x 4e6 sps/s = 2920 sps gnss-sdr-0.0.6/src/tests/signal_samples/Galileo_E1_ID_1_Fs_4Msps_8ms.dat0000644000175000017500000076400012576764164025240 0ustar carlescarles =S2% 18 (8r =(q =2 pV9= =z =dse ib9y 9{ =Ĺ! =$0׹M 9M 9 d: [': = =g! _*: 2: =';) =%GE 9?N: ϰV: =r_ ='i r:} rz: =^h =  : ,:B = =Htc R: :! =o =\d: W:y ղ: =Lj ='Td : W:z =S)ɺ =Cκ M:& ݍ: =ۺ =]2ຢ :7 =) == =} t =\ A:o : = ={} ;a ;x ‚ ; r: ; =wp =L3Tn n;` /;4 = mqf =< =ba =\^  ; #;& =s%V =}'JS 4);s ,; =.J =yg0G ء2;w g5;B 7; A9; =9<99 =O=;6 ?;n B;= =#*E'- =F =I' =M"K# d\M;{ UP; Q; = TƖ =mW3 =~X] =}[ ]; {,_;W =lfa =id{ Gf; +h;s Sk; l; =nf =q =5s3^ =;v r;Q x;h ;a =Ы1F =ЬS =r> ={ : ';= M;2 .b;. y;X' =& =% = ɶ  = ; ; =) ="j ; p; l¿; ӟ; = =û =_û =UŻ {s; );L ;' =Bɻ =Hmʻ{ ; 3%;p =Bλma =|λvX ;; ; =ιһ:= =ӻ =`Ի* =Fջ! [; N; ;R ; =ۻ1 =.ۻ% =[ݻ =ݻ, ;Ѓ @>; &;z Bz;Sv =Hã =y`=m =a滤 =滂 ;w_ .;Z =Lf =y\ -;L ;H =D1= =ﻫ2 ,;9 ;| O;-0 (\;S+ =\z]="! =Ƕ=@; q;s;= =!lƥ=~ b =K= hc<;< p..<<n+<@=+=0U|/1<"9C<(><,=s?2@kO="Wf=]^<gX< =/Y{=_{<6Z]=`N0a< [=&l^<-:tҼҴ<ټ<ϼ6̼<<[f<Ҽc<ȼ<߾ü<&ɼʼnV<}7ża< <ļļ<ɼg<'ļY:̼w߼٫<߼8<<'}o<'<`<]}xV=V=($V=h><0==8T`=E8 = u=x E= k =⻦=׀> =#d; ];'*;, ;5ۻ<=໾2 =;9 Y;PjD׻W=^ܻN =A;U ;Ellһ s=׻uj =л}=ȭջw = ;~ .;tfT; X;NCʻ+=-;]; 4̻\ =7Ż=ʻ =lû=v;5&; ƻ =Xh=9R;Z; %;n; O = 㸻2 =̷;I ;' Ӻ =hi% =K =^\_1 =E;P7 \7;( ;!C w;v3 ر8 =cԫT =PC =Ȧ@` =쏨;f :;R W ='K#w =)4;| к;f ; z;Jp Z u =Ϙ =h~ =Oݣ ={;\ c֮ = =x; ;% 7; ; kדH =Ֆ0 =d =qT =r;Q a; 0;$ H2;I  =͍{ =;& AӇ; m3 =I =';K s; [" =ÄT =+, = =_; =c;F[; .Xk = C\'=Y;;W?=/(P =M;W }P;$@N&=.bG =!J*=B =@; TC;.9i<; >;v1<2= 5 =7%5=n1Z =C= T =; ;#?M?=@e# = ;' ;i?ť;0 [;*?>=: D> =m:B .:= s==RsP = :rT X =:=[:&:e: f bպoj =պi7=9:_6w:w Tĺ{ =ú2=~ =N<0=>:.=:~ ҩ˕ =o4*=:(R: 0ٚ:%:# Ha =CM=nԷ =B6-=d_:&Lr:n 1pi =9d4=-[:N: E4 => @G=7:>`+: À" =;i =&: : #: 99 tڹ =4g˹b =趹 =!9 A9 6> =_| =;9_ G79 ډ8% d88 E8 =0 =7\ =cu88 =; g t*9 =K9F =oJ ^ "9, =\9kU =X7X ҹJ J9 =d9c =VUg \ u 5m NEy 8G(:t =?0:w =6::'k =A:~ =Jс /U\ \< YgR o:M =w: =M Vf> ߉:d9 =: =; : =¾:f$ =7:C =׬: =n#G & \ ! :~ =o: =: =Y:} =M̺ TѺ պf pں Ȕ: = : =:] =:Y =cu C F J K; ='L; ='  _M ; =E+ ;Z =b:}  P;4 =;j =>d Ox U; =;Q = K #i /[%; =&;8 =Q); =E&+;+ =[-% /;= =%2; =&5 S06 &e8; =;;Y =.> ?K 27A; =D; =6G sGc ĺKE ;Lb nN; =R;& =6T UL ;W;ª =[; =] ] `; = d; =ld;r =3i; =@Xk ko 5m;+i =Ar; =3`t spU u;N =%{; =g} | ; ~;4 =`; =/7E 򫂻 x ݄ ; = f ; =.W; = ]; =̇; =" Z Џ F D; =;e =1۷ ƿ ҟ; =(y;C =ߚ;_ =;9 = T?L _;˨ =;0} = v 㽢ӝ _ݣ; =*h;8c =\ n;) Z; =CǦ;QI =ߧB ᷫM} p5 lt s;o =U;" =,m$ Upa ͎;\ =; =˵;S =]; = ;% =C;S> =a8 _Y C.  ; =; =+»K 濻~ ^; =j;} ={-;N =o;C =2Ȼ #tƻ! ; =; =?3ͻv Tʻu kϻA lͻh ;_b =; =?ӻ _ѻ,O (w;H =-; =A;; =Td;r =kڻ! ׻( u;G" =;o =޻7h Kܻ b; =9;Q =TCI X+;=;`1 =J) \;$! =$;=6B!S e9Sy l; =|;=  ;N = ;M=; =9;=PQtoG a)rvm 6;8 =;^=ʼ;q =;P=w IYU r~&<= <= #!'+<= <=?!M ,} B<"=BB1^B>C=eC`D<=XE< ;=qE<=`F<=F GpGY<=ZZ< =_[=][7&\a\\<ܛ=y]<==^vi^np^fg<=gijg1kkHVo<3X鼶^ N[ٺܝ<<X ͼRKϼB<<<4C<鿼ͼٔuμ*<2@Z<&<<Ȅ<ּI{Lۼ<'߼7 ڼMŬ'==<>:8u@=7<=<)9?=j8=Uw<_v(;y<D; ,sB膢8$"m=;L?~5bm5=_;@w=;l95WM'5=T;ɯ=%;I<˰:ԼΌ:5%;K=.5»#=O7+.,^w=S{>0$=oZ\0'[81~5=㾣="c>{=Ze <sX?=2}7=,2<ԭ,=8˼{=~8U;=1Ģ=ArA=o<= ?a=B.= Y;t+=sμ+J< t=¼ =5pGG=!{q<%P=$)<$=5m輗=P+<ʼbec<*Vt4 Ut<[1n([<*#=XnE=ܕg=0ꊽtgo=x<]&^<;< __<0 t< 聼ȝ<<ԝt <:< ꝼkEGR=3IIpX<'vI<ȒI09l=rK-^=R-J'=#2<7¼ 7=Q&O=&=af<8O+8=%%= <5T<!<+ Nd<;;; 8+<<;%_-U;@,;Ѽ%&np8;8u;j6M"&J=D/18=&ܖ:{>3d:ü]Q<:ü?<ϧ:wļ 㤺K<:mļ;F ;AI^J=AFj=:l:f\xK:K=@ ;O=)/ZKYb؜z :<8:80;H=R3H#)†*; _8=U ;">=V;.՛38.Y_+ :&<ĺ$:ش<RdG|;$=JH[;IG=QO;~9=c;Lv=fdFӻѵ%/I:e-:ou<;*:< ;=]ƴ>7A1|ڸ]X-;E<. //;&ϲ<<0MU8=>}<}B=㷽֋;>=@@<9 =7BF A;v<BQD;ɱE<==<=nϽ;< ߼;J<Ƥ<α=I<[==fJ`A=ؾF<=xyL<<=x)M <7򪱽2;ᰦ:TL=8=<:=Ԑ;<⎼O/;k<lxeK<%=L==:n!@Iܮ A%BԵB<䲵<:<=a6=邩="6h;VxbļZ59*N*==<>5=<Ԃռ8 ,kSNS<O<SZ T<<Th#T<7:DjVng4TnWYXd)z<'?{<ݿ|^<{=}<9{<3}L7{ `8ca=J=8 ==&}:)xx$}<*w5=}  8ʐtks {R[{rs<*> ci\ч3o<2<׼ƍ+CrJǼ=B=(=,<8Î_,j5=>=!=ٽ<)"Umg=xb~):<7N)<䑼)T< (<; (f<(<ۑ"Y(w:h璼'<'$ w,ᾼ ,=+<ῠ=|1=w$̞<]?j樽s3/3=Fû>a~iռB== Rg<}=gb<>:b μ=Cζ "Kݶ=k;)<]:;9,鼽m_J3>ӻ*3=N; =m[<<~92;y0y<"/;b).SƼ^_9b&H8@>C:ռ:<䗺Լ4:Ȱ<"Z/=y%=Ù;>|/ ;==͠=<Ƶ-4<>w<_ M҉;Iʬ< DSؑd<3m>=K=ѓD@a-</=>a==Rȼ(?<7K/~@ڻL]¼VA;3)=OY)Y<ʷڻI=$2<-$=y:ļ ӟ=?\:<<:X㚼n:<<^#3<XE=O=Ef;#=ͼϼ"=ͼ=F<МV&G=E"Ј7mC<5ގ×=Y=9޼mԯg=="u\ri<>o=s"ro F=ܼ =\=ꋽb=6#@`#=[W0=FW[=G<# 6<9ib5i<_5=`Z=L_=<֖q<6`rqL<%q<2bpv<.Cp<1(n=YXm< WG^<ʹF<̇+Fu|I<) *=$n=!<o<>0a=,dJ=? VR@2QR=@b=61FS=e0<((S뮍2ۺd<6:(:׺aٺ|><ԏ<ݎ:ƶ<]:ǒIA6< d;O;A(PYP=+;S=)X_J=!Ǻi1=,dB;ڱVyM̺K:jnM=K":o:=ZȺ> rLMJ:@M=:K=ҹwv9<9:<ʼ:ÙN:m֙<陼/ :< w:0 <;>2:&D<- .42RhuX;a=d:4=3q:1;I<;kȠ`"߻p8QT;}8=u;D=lK;]=F{f1=@|=;@<˜.[; J<3=[?S3ü4ʶ ӿ;cmy:;8y$ĻB Xv!v<;Q<.\ǻ#;uZ<)ǻG,F;2< Ȼ֢;yI<5ɻ~;~<ɻZC~b);}<{ʻ}I;(F}=Ǽ>!Xjȼ>="= =+#' _ɼ >:<>=$=lԙ=qR<<#R ļ(S'=)='Vμ|5f:ACj:=H,= <4=}`伹4S;듽RkSl<˹<9l7l=%=$*pe7h_/U===(=8f(V=*<'^<*^30Hsk?WMߪ}'=V'="X==mX슽1A&f=&=|PY==z]<1ѩ<~ˡV<3r[?<:[TS[T<^U[W<^[[E|90j6=4>9< ><2==*<*=<,"<eO<*e=PQ=r=?=/=XN<9P< bc<<;c3ib<;ab>м`^&g = %=??=<-a<;za Oa(ϻk$ϻ"<}D;Iϻ(^ü`=3<%2=:>;#&\< ;xX /< ; j<;V%5|bB3޼,-<+;'޼N) ;0}ݼ8p b*XUOýc+=;*=^M;,П7<Ɲ:뼛qȆ<:4=[%;S=:-=ɘ:=34%;½.Vg׼v%"cO˹H<9pȹoּ\<9Kּ 9I6SҹxQCUQ=\9#=p9PΐE<¶.)!7V<,ф=v8벑t:I= d1=_!P=J=:Oq:<ϼJ:ܔ9 <~ӹFP<ϼ :N<&μ7,:VEF: 6<7g, :ƙ<[%˖!:<$ 0" :kb<>="=#W0n=/i=H쵽zh<>e="ڵ=PkӵT<=Z<@e=XF<=˃<<\D%n<9=5&p<=h<<N<ۣ";䝭<ՎM2;<; ##9=X8=uT<9):<9=m:8=Ԋ񐴽G<_9<<"ʻ% ;ٟ;y<뻂ꐼ;:ua <5q<4).5R+=nGP<9<&*#zf9=Ӝ/!<51U<=Zt=>D6=aߕ=x$d]=]w=m&d=:f<|e<5; [h<Ɉ<.hh<~ =l<#{i8|d =] =D^=4冽 x=~ꥂ=f<@U=Yd{={mp=X0輛r=@M=<hI`=GVh=*:<%e҆=g:e=IkdB;ep<|>.= ==5Ql<.<ΡG k<̣<p<᣼X< < 8 FM<<\5l<<6{rY==C<=<#x&ħ<m;N<`};Ν2<};/):=ND$B=;B< [ke=à B=.;B<`(';n9<;i;ݣ<;a߭==p:zk< :)~fa>=Ns=C9:1" :> %Ul:4T=࿹==_9au<8^!문G;eIU5;Ŝ<v;Q< +zѻI6 ;yf<<=;I=!TƼ)V;a0 j"ɼl;R\<nqɼ3O4; <5^6;;b>;< ;j;<n}ͼN/՞}I;<6=s;.=TND֐/ E;< E.&F;Eڏ1T5&CṮu#U#$Je-T;;b=T<]fPTua*,T߶;Tx><`M<ļ ?0`0(᝽0=E=r<@n0=<j=x;=Y=;᥽( gc&Qc==<'w=ռyl2rds<h= =j<ֱ=hܼxi i=m=<Œ= i޼yqji?vX@x0doW38{Wj<|a{<v(|w<|t<t<\s<|s'ώ- t=Js=PF=o<<skl C1@G<?<N?&̓<>?3<.ʻ:-W=4-=:9.=<󶥼 1<<0<,0i~= r+=v.=*.ڦ/=s<==C==L-=芢<4-?ɨL=>ZA<<}< <;٣_ <|~ <)D> Q< @ڼ6n _G6=V^ŻU=*e<ε=_* m>=k <==<쵽Z?x/ ?=jp <{<;ID5;Ǹ(Fb=ɻh==;ڸ=A<฽H@[@=W;2=%; SWyW=cu=;D__O<; Z ~& k== ;i>}si)r%;UW`R~C:qث<|H<]øsc:ܸFzz;>HF=mh= c%ƼϽ;$<*`<<8=#\%ma<7J%=M=%na << k<3t<.\:/<1E<ܗ/u-/<ˌ=mT%0!=a!<9b<4p)=Y=*K =/9G=),ZY<+=Rռx=?'(<2< )=u)P<}[K cp}-d=~<3~2&=nc= f~=5< T$M=蝽gF=Sr=m<7+ )<==H<㮼sH*/\=ȼIg3== Q }<f&=e<;7#`7=Z%=|: <( <'p< os<5><=ۻ=@D=Z "=!=#lļÄ<5w<(BO B=av6=_-B=<<C <1|2=0t C=<CW<٦=-u<ֻ& ud&=H=LAO=TC=<!Cf< q'=n{=@ =o&0>=%C=#m(=ִ=x<# dk<;)W;EWm=_ػA=;=;I;SS<8=;#;7é,q1.;<8e/៟W0;<02(П ߻5DGe'K L<=nW<»=^Y`;<"aaYTb;/t y;3<~z]R?|;<)}~;ۦ<Ѝ<==%l9=~{9 y# [y;ׅ<;=ڴ朻"SBl;k<.2=;lB2̉e4?[2>:·ALr}Mq}J>==<81=mNOgUN 󂽁{׈()ڶ=N<5==P…rƌ<[<ጼUnd_U=a0_=!F=P=<=o@^=]==4<|=?<}=&h=ΖOh74߼"RqI"<#z! y<}!<y)!>y< 4=<=lU4=74A4dԼeyn?ky<< qy7\wyyy< < =W?==n;zP Lz< <^z9 Tqz<&t <8=J=<=a<=uz<T `< ۪=^j9=k=BD(=//9=<J9Ǽ?ϥS=<R<1;ڇg <=O;K⣽ X=o =&^>=<`>FAN j=[ =id>=],}=(aq*K F= ==O=}= i=c>= ~ !ѥxͼ=/< ]<=

_xw)ͦ==(u! =tC<+;D=ǭV==:='n6&Ga6=[<|== <({Y86 +6=/ 2/*8I<.T;ɼ/R<<:(=/=d:5I==D;ռ-P܅<J:ռOC`<<:1<j9aXgռ%99ۡC<˘9ANK/=ʭ$:E=(:AC½aΝq`/Q6ռ8k;ɸ}/=ڃ_?=! =4J6<0?T;MHq<ݶ<ϳ=ͼ*H=XsɼW5; <= =6f=_NL=>=qbK2(=>((<"fL=Uf=q^8=ZԼ,d;ko=םB=q=^q=pta<}/rށ/#Ii#5k>=Rž =IYg=Z==%6=u<\L6\<={ BW<^ < W W=rkx<k<ВǼpjȫ< 1j<Ǽ;XSV7X<); iXX*:Ǖ=8ؼ`>=36<:r>x*=T0[<;[<\<;w\JR\<9 <#~<<0~bt<|Ю {<8zC8=5ծ=.<׮x<584)x8=q4=LpRٻ.<@MY 4=Sؼ=Zr=5<><絽҃ۻjB=;RB9J<(U~:<J9;Ƅ=κ<<<;=&:A1<Ӵ;GwG=zP l=:ItJ o 6=;=ʺgt;I;9;k-PԻ&=k/J=g; GJD;$Ȼs =^\J=$E^6= ˻T=;`<<;5zN=KK=H;'K;ҳB̳=+ ?gfK=c;;{K;!1=Z2K=,/;K#;ءK:ȼ5 LQL=vgx=;rd=;*L7 ĘL=oa=yt=L}4=_:_p4;g;gʱam=Aκ?J4=ٸG;::-McH:%4eC;ĿT=̿=f4=7ýyM=f=n;~M:lM)9Z%5B<9*6չ=<9S拻y1.$.μ%;<\'μ(;<NAms<[s={;M=UN;,<'3Rͼ5;9_ɼ-ٗ.;<A0 1;+<0k;6Lm?;U<@hu:=B;<צC>E;7יƖHgV<5=kVҋ5VsռQ.eûͣ;凣<>(Ļ0B~;<#>= <16=b,2=o<==E<֩=8>ۻϨ;"X<6̱<6===G.y#'I꡽}pz06ó<@6= =5=n q5<5=s!=~=1<J<1_:2<<{"B<F<:BJ==U.{</E=*=<&=)e}Q6IӼ9T=:==\荁g 3 == =U= |3]s~+v~pr킁< 3r<q.Ł<(q<0恼tzq<<]<+fR9w^ZX=< =rKe==d=D=<1/uT%c+[[E<[<`_Z y޼zAU=Z<L KJd"Gt<^G2DKECi<C<*BU<$P<5=lK b:K%=K<"B>="<0뱼[<ߖ;Y3)'<;?<`;D䪼L`<`N;⪼俶(:aL!;={<8="r<ߪ< ;ߪ*Yy-<`;T *<;;;%RߪZe7;;=:w ;=ºO=RmIz<7<:p:|;/=QM G=ctȺ'ğg:<̺ @=z@ p{<<黫Ҡ%+;*ǟ<H<4<T=ꬽ6'=L9=8A=1mѠ=R9Q&>=?<:s{<̙J{E<}#{=/<_/=4/ڕ=L?<{maz'N=\ʒ=N~m'=?']<󒒽pO=[=O&= &X<,HVP=^=YT<>N=Ӽ|5<ߴ|<[6|b6<|<27)< kwak<v=p6U!p=]H<ə?wzi[ºiڏ<<Y<)l0Y-slR%=ȼ`]=B߼)=<<̻RIZ< <蹁z<;< :ߘ=Yռ#0= =BX=6ʳ=z(=y<(=(2c<4g(.cql(= =b< a[B=|;(X*<.4;^̹l<F=he(<>n%=]<(>&<`;)wX@ſ<7c?Þi5=)6h<VP;-VV=Ili=ǒ;<-<):ㆼF·:Fݼ'S<:ܼԺy<[s@=AĢU=tV:U/;x*F2=%Ⱥ7#U=:U;j鹱@卺e:$֪<F;#=4/; qC=2,5C5ЪX"a6d>M;/L=@; B=:+<γ :< LLoݿ,>:ᐲ<ĺ!4:ر ¼?;<A6ürC;qC<5]2/7J^̝;<ﻛǬŷ+$a3zH3U{<3=(<DKH<<4&/_ ͹ ==t= =d=yw.7<7=<=T@=Y$;0D<[/ U;<^ =3<(=3.ŷO+K#j(0^1==<.'=@<]+=ވ0=<=0,(E+t0<|<0y1<<1Š)b'&ܫ2k23<=^=L?#ǚ`F#L]O¼H<=G=!=RH{üS<]=:qI==\O籥oP<¥]2pϼ<=wD^=:=pm˦m<2Bky>wxd {Q0Ss=<&3-k[U=([=%=p< &@0bZ=y<痖=R1\=l=sR<{j޼Ɨ%W=9<&>=4E6> 렽C h-c<,ǻ =Uc=3}B= 9 =ֹ<ۣ=<=<:i#< #_<"<)퍼/"=S4=<=5;=:!f]#!=%< =4:=+H96C!Q洼<<`><<䳍[{<<鯍< [8<ԍ<<)S2q2=;<[?=(=7 << c~<<@&:3㹼(V3=<&נ= &=HhT(3 <7Y3<'3'3={#@4n:Y4=<="=6p"04': <e'<7<ed<<"X8eļT7UG7=;F<$=<0M>=H4)4C>ɨx<Ս;C]O;MnCeÅ<@d;Ӝbȳ<=pa;.9_q9ܻ q9=7f;e?=sZ<1JDaY-D=S;2=n;l=[;U=;8=O;hW_wHS!R4;Ǡ `;b ;BdMW;>qM={J[=tލ:]<Ѩ :":G< T<.̼C:t<ͼh:9ֱ=/0TN=ȋ>`Nw;1v;xNՐ;;Q=HN=䕻Mμ;<ϼ=;:<<$6K:k<qG:r$<: ϼr5);<*0=2O=;!#Wj9;E=gHP=BZ P0 <k<翽R߂ء/+{˼;F[iؿ;<`՘ݶ;} <>»?=[u墬={ݼ¥<`h?v<6?=aww=m)gX<>!y<&B;9<;̻r4;o<6<βO%;!<((ػ'+;b<10ڻ^5;eמȼ7o<ɡ+=军=_P+Zժ<hz;='m <&%=lErL,=L漆.V=GxD&<_xG/9:H<.=>f#/=iOTؐ=@_<-_<#^דj <"=/9X=K#]ȗ=nݼM=PH`0 ;=s<<6 8=qΩ<ٲr_=7ɩ=6=橽]< -( =üP.7=)_ʗ<. r%=ԮM%=HᖼB =].2m<1<0̽[Z1@ؽ=%<;*0x^<"; = ӹ=!TX>=_Z%=qx=ȷ=m͏<%2ML<);-<N ] <å=Z+h>=<:h>=?<<ߞ<i<voՎ<'; F<;=_< ;!K.-rBBL>=Cb==.̧<@>y<>==;Cܗ߻y< ڻ1<)Ż6\7> <q=8?<<8 < u༫ &9j<B^V4Rg9^qG9D<ɹXy9m<4۹Ă>LW~#X;_]=:V=JqҺV9c0kP5;p=:V=u޼|:g<6Ձ3ݼJ:; Ԫ g=r>ݼoX;U;qym 0Dz8/<=ߢo*=9=q<6=T<;ktgXv\׸<;a<*`<`<#L`$H<`<m,_|<7_^(y< =P[=^s=7u[^Z9xJ y"6z<{ <z {<;<~Ɖ= =$*=Q5*CVsyV=_=%=V)==l):eWi*ALJ<NjVZ]==k==ckC?!*==:2l=;=}]sZ.5H@eHK<_.LP4> rL<L=LL<0=<>M=dMX89X<]9<)Xm9$<<iZ5Nj<42<0{b+2=lO=K'=T+<։+w+G?L¼b=_ SZ =[M=_)rAo==b<9;==^bƒ k=Ci<<<1RѼ<ƒ<-ѼPQRJ#JJ=< =<|y &y<@;x?v.~x<#;o-=t==6<h}CLfv}Ѫv<;PvNv<;uyѧsu<;+u Yt<;N=˼=C<Q=<|<QΤȼJݼ[<<#=q<;U3q.eq?fPe< <>;S袼=j<<<;{q<<;R_%>@<84!==^;b=\9' <"%;:?QK*ξ=(<>=r;@=;"=LC#<ܖ!Ar}=٣C=aB=0;=M<\$C\砻;eC=;(=;<;*r;*=ܩe<{@Ͽ;1;[< nU;ٯ<%'ƽ<»}#;=<û?<;<Ļ~<sћ;1h;~;_<+#̽;I(;<׻Դ.;횴<6;wn<`;=o=x.1o;wm;< t;H|W;㡣<+ֻ;ˣ<\׻U4in<-ud<]=t 켏Y4=npG9=K7xU=1<갽\<1oz3;~<7捤;v;=>#/=^b/篛<=H=.=G.<ԩK=TƩ=/r6.= )..< !=*0=60/<էf=c=S[-<;-=PR9==L<ٝ8<<{qV<@th<<є<5 <5Í=_o<8=*.=ʼڊ<8"m[Z""< <"׉H"<;<#q$#<,>X=@$m==m =x޼u!=7=^K^=+Ko=d=o3 =߼ p<)!dc2^<3c<y^)ch^<=|}=  =❀Fd~==~Y=T@)l=4=.==;).=i=b'<@6><4'=&<&g=<&7u<# N=!unN~=R$=Ҽ%=^TKޛ=g<-$DL=9,YT̟<"T=\{<**Ҽ+==˚=.J8O>;= >==b ;1e=<;QK$Y<㭻g2<ˡ7v<=&;w ;]D9I<9;M|>Q<ا<N;맼V< ;ĥ;`[[ߙ=<>J<Ϧ=/>=`<>ߒ<㴽=A;Ex<;ts卻fc<鿇ŒT<ܪR8=Aջ<=jF;Ci8ZC=.-==!0T=E믻H;=GZ;p8;v3, <:}[} ;z佼]` -<;QFw9<4[–=QF=K8q9=9=(Wh1J== ;.":KJ"|ż8ѹ6~9J=9~7=|9^J=4ԹtJ-Uw x#s7l%:87=s8:=GB2{7d=:7=Pq:t=Ȍ㹁 ļ9a=?7ghںUH:H=X:68=:H=\;h=b挵/#QHW}:d^<텥ɞ:=1>d""%h;<&;@<=)귽UnF@~ij;&@=g-<=d);<*/Ʊ5+;U< -T2A.;+ ԓ;mE<;BwR;~z VgY;C>wjVK=klx\<|l<ޑ=?='2<='ow3: =m=& M.Cy c'<=$=Z=!9-?<<] v*<Ŋ<2G眊cc-h<c<#h b*W A={ =[=}==΃= ==4~q[w<"GSyU=ux==Mk!l?o<2¼A+M=W+=/3=.7=ƒ<= !=R ]<0 <{]Tr<=p<~&=\#0;**Kл8?=/X<Ư=a<߯>ż{?qV ?=7(U<*=leIJi>=I<=L<#<;`̻V.ͫ?9)&ȵc˵=ԇ<>=d <ŬL=^d< <=U;PS;O1D=?<><ո=#m><==;=g 5x<3;㳼 2ڳ<0;г'/ƳC>=7;@=;@xu =}<@=E;(:$<; в<<<;.?=_l;Z=3<鸽`\a?ZE b Vذ=&;c=;BH*$(PGU<ȑ:6}<}ۆ:l9<A:n]ط== :0=̺_>pD$H=<>;T==nF:o<5de,}^<><:? <6:,D=5:Gj=l;pcBCES <98-!L<`9Gl>ʹYdE=H:3=:,pjE[#Y<9!#ޤPb>VEYݼ=Kp=fJG=d7亠G:[;T=yaG=y~Gu;赽-r;*J:0<]G6p:C;U [ @@;~<AŢAQC;ǩ<|D멼fF;<;G}=>$[F;=߻ 5xZ<9xAĿ;.˵<]GX^;a<ϐ_,`;<;uuYg<=b=aDi7K<=2ﻒ[<\;'Wzm<=nJ<=8u:<;V<鶽{-<=(;=.ʪ;<<0G;<:j:TҖ;f;v׸<`Ⅽ;"3w̠=po׼+X<*=WY6=鼎/~<*' [Eün!<\Q6=F"(l5=CI5<$)=<()5<ڻ@A<۲y9冧9=P=e4/=gL@B=&mx%<5<&<{QϨQ<j&s<֔M=P졼~5`<ʡ<` `< =uY|=$Ҽct<=^Z=|Ђ%7<<8 i8<&o{epCW=^="=c0=c=Ns2c~~<)=lBX=>W]+=<Ӛ.Ǽ=YIt=H=ąq<>ݵƼg=ҼJ(=k<=c!¼!=1B>Š=B= =+˼v(=<(r<=6l~J?<#.=;<-<"-FR'=9.<-<=)< Ú)2'<'< ,=?谼=)=z<)GG+=b]&d<9&<'=s<> $@= ꤼE)=U|<)B#="=2n)='Ţ<)"=~=X{)=~9!0=o=03=è<33cz={挥=3= <3=} < <於  Ė=N'=4l;,z<;;;<[B?=&%Ц==Ӧ<&;e;һ<"<=󴴽x<-|w< KH<%<=?F %==s#K=`ȼ%`={n=u(=t:]K<>:}z,z8=#=o;4r;;8X:W<0:bҿ!B<ɺ_3;:70L:=yCu=rK={';<;C8;﻽k; ǃ';ER$E= ɶ=e\_<+:d̻±<\ :w}<=JDN:|H|9:J:ErG?9v׬=Ģ:nܺ=+ٺ=.>YƺҺ V{6>%b::>=T:Ⱥ= 9K<UTJ,9\<ez:;e/B=aٷ;tV=఺q :<|V:h=pSY>oѻT๽&Pһ!U1`{A=c;LA=:<ҺD: <|غ<;T=r~u;~A=xNsA|}T:M<=YÍ:De<mﺼqSMֳ:*³<=S;@="ʻ#@Sɻ>Qͻ5@TMEQvF_%`;h\<b/6c;ܻ似VA˼ cAddf1: 1< 1=f =O=l1ҙ1x@<1=ZR=֩=񉛼$11= 覼<<'z< =#䫨N3){-=T"-1:ןc7Q&#BbdC@ypϼ 6%DN_E<-D<ܜ<<7DK/D<leB8bx^xifx=N=5<.=1aay<{Pz==q<'B=qgANIr}= =~h==@_I@Px|9K=މ=7<q]L\]<&LG宖!c R༽G=ϋ<>< 6R> < ><9ǗMK{#Lܼ#=W<=L=yeϼ/Z=9=u=B=m =q< ¼젽.B=A=:!=@< >΢<=<򢼧=fָ(p<`(C;PY={:=֞=_5=;ꞽ( 5KK,:ü*k,=<$= 4=đ7$ʑ<.$<ё# ב#<]-1<%=b{<ɧ=-=䧽0-.6%b4<<ш+AaA=1<=<+&[YOj=<.9AļE<태;$H]7;Ž<ЫU==`;T=H]^׻)=Wט==T;q=>[;ǺS@O>=a=;;=[;?=Cy;mWB=8;g&_>.=9= 9<=)aĿv9<녹]_ 9o۫9=hG0%M;FGȹ:ΤPD:<I{mN:<<Sc X:ۣ<\;;<*/=9K=T;EK;? s-L^;,L=Bٻ]=><[ʼB];<^Rʼ`;t2V{E<L#;L==I,;_ʼgmj;<l:"^<{1IN;s1=һA'=Vcݰ=TtK=yK;vɰQY<<49"N:;Q<;2!<;ཽp<}nGu'<NG==.(===s?/<"FS*{BB ><<<=J>#K<8<(6=DIH=')Ǽ'`<67$KD<^A>=ʓ=mZ'<7>=<,=tw,,w<@E= Signal contains random telemetry bits 0 -> No telemetry %flag_local = 1 -> Signal will be used as a local replica %flag_noise = 1 -> Signal contains noise 0 -> signal is noise-free s = GPS_L1(4e6,1.99e6,42,0.2,0,1680,131e-6,1,1,0,0); fs: 4e06 CN0: 42 dbHz Doppler: -1680 Hz Delay: 131e-6 s x 4e6 sps/s = 524 sps ============================================================================================================= Matlab analysis: Probing data (/media/DATA/Proyectos/Signals/signal.dat)... Raw IF data plotted (run setSettings or change settings in "initSettings.m" to reconfigure) Enter "1" to initiate GNSS processing or "0" to exit : 1 Starting processing... Acquiring satellites... (01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) *=========*=====*===============*===========*=============*========* | Channel | PRN | Frequency | Doppler | Code Offset | Status | *=========*=====*===============*===========*=============*========* | 1 | 1 | -1.67847e+03 | -1678 | 525 | T | *=========*=====*===============*===========*=============*========* Tracking started at 31-May-2012 12:55:03 Tracking is over (elapsed time 00:00:00) Saving Acq & Tracking results to file "trackingResults.mat" gnss-sdr-0.0.6/src/tests/signal_samples/GPS_L1_CA_ID_1_Fs_4Msps_2ms.dat0000644000175000017500000017500012576764164024655 0ustar carlescarlesV?yV7 3U س@U74T3hS7V4URblyHR7C4,QP7ï4iOXM7#4eLഺbK74 JH75G.GE7:T5. DeiocB7LN$5Ԩ@+S>7~15=7~;7=59C77e5&h$$7Fl56|!So7G r5PptG7}v5/q0x27Ny5$z 7%{5` U{^7*{5E!z6ly5 >x6ipv55*4tl|6+q5ܶjn'6Jj5̶f/6Tb5dN]]9N6W5/yQ6K5D?6e5=5iC5ւ6,5t#p6b6J5&P7<=6٢5b+sد64ŴvX5k4g5?ni4`oF/5/3Oށ`5S4}3%i4ȬÃ5^4ݔ50q44z;㴰652,<GA6Z05W}OGm6^E^5Du 65Am6f%5ͮ,Q(65Ŷ&ȵ;65ܶ]65B66Hu/=;M 7-"6(- 7_(6.0"7t696(sAc.7J64uSs:7٥\6`@e]LF79o68LixS$R79.6#X0]7b6cc i7~ 6 oFu7}6e{ĤA7[6nq76VwV97 6`Ŷ:7V6ΔѶV7<6tsܶA7̍6 yϢ7=q6ws3I76XKV7`[7|Xo7 7Ϛv 277úM7)72ѿH;*M7 h7ķ/Z.7a"7ɷY%7/)7Cη_e,i7͛/7ҷ2 7 67;׷@9b7yw<7۷6?7B7߷F7FI7ʍuLv7hO7TRA'7U7c7Yө7q1\7\Y*K_7_b7oew7Ryh7S}kA 72zn7qlpq7H_t7YFwK70%z7,y_|w7v7}F7ʢ7P[8{L7-𘆷&8߇7A8Y7Yw87ߍfB87n8#79*81)7uV8 78D̖7흗a8e7iY#'8י718?7\Dz8;7?8 )72fT8 737Zs7[%7˞7㞷 e7Q7]ꞷb7 ٞ7?797?QLz77+q777ܻ,b7 07e,瓛757෺)7<[7۷{%7T7dZַx7r7CзK77ʷƑH7h7ķ%7r7xڋ,)7C/75Ƿp S7 7̰ݵ47g7dz|Υ7 }7x!7bs7e1g5o/7Cj7Z'e7_7uĉ~lZ57T7y)Oֆy71 I7spKB#g7<7Fb^6=U7m/7mK8(=%B7!78Zg.77$9h )7`7w7?6zֶ6G6ζd}Y66磶$D6nr|6pNV D606zt }5I5z^d-4?|4446oq5m5\'xV6'I6݂uw66u|ȋ{6;6ⶠڶ@66G D77E"b.7,77:F":$G7G7vSU `7b7@lp&y7~7^т;7΍7}h@7}7zZ7ˀ7KG!k7 ֺ7V֞·-7o{7kҷQ7n7ηoⷵ77A۷:'787!7h8\E n7A8i.87;8g/ 8 8 1x$8(8p-%818168h;8?!8TD8$vH'8M8*YR-8W8]0C[538N`8m6Se<88j8Θ;nW>8s8wA x+C8k}8lF#aI88K|AN8u8P犸RS8%[8UGϏDX8C8Z\]8j.8m_⣙na8P8dFf8s8b|hwCj88Ql^cn8Ъ8QpYAr8氯8$tv8y8x*z8^8xf|Ż;)~8)8Ë[ƀ88zGŸ`88p%Mɸ8QJ8j֙θN88 -Ӹ8q8@c׸lڇ88m#ܸZ8U8จ88ym丟88X:N88(Nu8#%8ƌ:$`88>U|K8H8ȍ8L8^ &A8P[8\Nup89Q}n?89=qJz8T?9ektU8988 H9vꍸV긍89x\ !A8N 9\ ۭ8!B 9Y ?8}k 9 58~ 9Ɗ P8{9ԉ|Q8_9Lj`78,9Eˉ589`1綅8){9\P89ē1т8a95L`9809d"89R}a{89yw8J9u%s89qo8 v9.mGgk8!9ji3g8n9dfBީb89V`]8+9[1(Y8aJ9Vy{3T8nH9 Q5 O8% 9L I8 9WGG3 D8} 9A 1?89s<&j98"N965mN489J?1Ne.809+ r(8J9%s"8ޭ8bx8878 8U 88 3 8*o8Kh}8Y8ḽ7k8?۸7i8ZW,ո78g߷~θ״78ӷǸp7 8ǷV7q8MȻqݸڵ78J^!7p*8\9#h72 8% 㠸aߒ78G)'bj}7 8^܁jx7(8zmb7 8WzL7Vq8F2B gq772!^8I;-\YT"7sJ8op@7P68},d"6!8|<=4<=6m<=TzBx[|Txޟ2tJ#p5?lbbgbc< =_<=S[<=`W=}SQ½9OOHQ½"KKw½G{p½C½f>B½P:$½Ģ6½27½g.½4s*ýb*& ½m9"K"ý#½=K@ýE ý\ýn #ý׃ 2xý.6ý;Q=;_=;Eb=C;=;'q=;=;~=5;=;=;E0ýfĽA#ýqَ Ľ6ý|/Ľ]kԩý0w['=ĽzJ;\C=|9;=);N=;=,ݶýU']Ľ9κjýeĽ?:mh=V:"=p:/n=95=q{ý86=l=M=A<)>ýՃDJ=}.=C'=:{v=4=-^=o'=G=: = X="ල =b1 =d =Rѷ =p' =o=Hɵ= =i̝9=v=ش=}==ܵf=D=s,O=r೽k= 6={{R==7=2f=B =0ij != =E"=" =#=4na%=dr%=}'=(ı=](\=l*O=<*=++=5-=Q-=TC/=$/=/=1ym=]1"=2=筽4=Hq4=qh6=5AR75=*47I=M$9v= 9E=9= ;=;= ><O=͑>=&>KҪ= ^@uk=S@GT=(B=-#Bթ=C|^=6D=zD=DF=F=bH=pnH=B&J=|08J=fKF=L=LR=IN=iO=Ӧ?O=R'Q=CPQ=jR=걥S=ऽT=T=T2XV=*V=ƣX=PX=8k/Y=~Z= Z`=AT\K=I\Iϡ=p^=]^<=_PM=`Ǩ= fa=Ia=sc=~cg}=CdBz=/0e=f==g=(ZI=I?p=پ<Ь= >=<:V=C64<$½.< ý+<='b="=M}w=k½8U=F-eý;;iFĽf ;ý6:?[Ľ:ýQ:nĽ2: ýe:Ľ\$:=BĹv=;=8$ 9G=F9g=^':s=h:ȵ=L:`=8I:Vý?׺;ĽAý ĽR+ýJ}-Ľ??ýEbNĽu`½}@oĽ!½ (Ľ|͑½sĽz½LبĽt)=H;nx=g;=1;X=;iG½ٻ%Ľt<(%½qC-Ľ<½?ĽQQup=ׂ <=B<=<=[2<{= <{=u Zԓ=< =<B={8="=o!==_B=:==&>=2ϩ=w;= = @=Z=V=={=yB==L?==[=D=#o=VpA=3ZBDFFb.DvH%BF`멽]JǦaG)=кH= =L==J=s=N='OQ AMXBQҤtOORRPXT>ѣRLYZVNoTO Xʢ8VkYE(Xߣa[rY+|=Z==]==xm\=K=ȅ_=KmX`%_ UXa~`qT=wa=\=nd=[Ǟ=Vqc=쵟=-f=&b/fU f޹yh agj=%h==~j=.= ^j==yl==[l=de=n=]=m=丛=Ȥo=ǚ=!o=} =7q=%0=1q=㙽 r̐smJs)V`u =u=a=P>v=4M=rw=ė=w=uxcBy!ז9gz~H{5= |=V=|==0}=D=H~=lUr>N{yJV`kMY*===WL=@9=PG=BZ===M===ŏ==k==F ={=R=it=O=6=$=;=ؓ=y===׌==p?=ƈ==a==.=[==o!u9{il=+Êng=͋==<===]===J=㛇==+8=C= چ=W=z=&==b =r=z=T=.==2=А=Dm=;==̃==y=o==R͐=n=S=B=K|={=n=|=*=E*=ڷ=R=%ؒ=b=g= ===z=DL~=51=Z=Õ=I|=ܔ= ~=io=){==_zܕ{Tnxe2x=ۖ=8y=i=qkv==w==~t=+=u=U=XO/0)O얦rNƦ@MG]L[nK'J=է=rI=:=JH=]R=H=ͨ={2GE vEFDǃC:i@BSAʪ2f@aqx?=٫=Z?=l=h===o==.=;= =;=ʺ=A9==:=}F=Z8=dr=^I8=,ѭ=F6=c=p6=Z= =4=L= 4=q=Y2==,2=j=Ku0=!= 1=z=ҏ.==S/=v=S,==-=%=*=wV=)*u'!쯽(@%2N"'+0$记L%C@$"Eu#'8 Ml&!: =x=S====me=Q=N=m=5v= =.=]=C=6=9=[\==Z=X= Ҷ=D==Xڳ,-ud VKZcz ѴҸY =1 = =MI= =w===EHQ .p % #V^6t뺽9RPFaR3\鶽TηDB1;Sx~b򼰽޼o<?>|꼰Ey Tɸ+缨Rc޼ 3㼗ڼH9߼ּdž5=ۼXfҼùD>׼μ<Ӽʼ: =[e QjӈŽb]guña/ŽӅ]<=vQ< =b,U<\=hI< ̾=`EܾHƽP=JD@@ƽ?5X7`ƽ-- ;w$)=r;==y;I=:;P==;PS=;=b=,Ȍ;[=;r=w;`=gScǽNPEfǽ}L.SP ;ϝ=;h= :=%:g=tfǽ9u*zcǽ0U@C9=cf@9[=ݔ#={9~:Oǽe V:S>:Fǽ 㱺@=̺=&F4==G;,;ǽ7;N;ǽ~X;*p;ƽy;A܈;{ƽ?7==2=zV]=IJM=I=û=jŻ= =ԻK=Iֻ@=仉c=5滣=;Xt;7ƽ[;ũX<ƽ \= == =8,=!v=d}$=@$:e=S(<[e0޸Cc<2W=X:A=ig@=%٩C=6C-ڪ=C'=dES=DO=G˩=īFB=bKIB=sH=*Kʸ=9J=rLk-=K|=4N֠=M(=m]P =}O1j=bP=$R=<{"R=$T=IS=7 xV=EU=8~]{V6=Y;=6X=}Z=6YD=u\=[Q=5^Qy=_=(-7^=M`=񓡽_=n`ǟ=aKc᫠=Mwbl1=d='d=pfPr=ef=OQhӞ=&i= Zh=?j=㝽/j=H+jA1=Gm =lf=nM=E*nz=tpe=oW=U,r=r=Er= gt=Y s=pŘ׷t=t=wJ =LWvї=x)b=*w,=:/z鶗=ly={ =,{I=V} ]=|9=z~r=y\~=x:=6<=M=%À==Ł=Yi==Q<=6=_=ڑ=hᐽGp=%E=o20=Pnᐅ=m*=OQZ=1x=`=tl=CV=rl>)=,=p=U͌؈=n'=}= =մ\=D:=@=iމ$ȋ=ԉӋ=j%\~==ٌ~=팽=G=R=FA-=b=i=L=w=y="A /=Z=/=@d=#mO= =6낽O=w}=",=b=$X=C񀽍 =Mg=u,ea=I ڶ~=@o~=}==LO| u=o{ԫ=ֲz<"=zP=yVΗ=ɋx =twXy=v=u?#=s_u9=0t ̙=isڙ=/rs=x+rz=p:=pmo=dhjn=n=/l=C~l=k=Wj=wݫ=>==ي;=񜬽`;= /:=H=F99Ŭ=7u7ԭ=ih7Q|6=߸4=鋮4=n2=(2=t01=z0=쮽8/=p(=M. *=$.i=t,3=WF,1ְV+=O)=Gu)=;İ'=}'=7%=o$%=$=q=,#Ʋ=a"S=M!0= ²=m=) 1=_=4"=f= 8 = ˴=Lv=Q-=.`:=8=rII==ă>=4qM==XLR=}=cJn =2 =Z = =Jwb =㷽=ٷ/=9=9==J=ḽ===3=Tb<ă<밹Y<ҹ< m< =`4}=c=d=J=FOi=B~`}=s|J=u=Et½1-p<3i<½g=+3=k#ƙ'$+G%#P&C'׬}'pU)4)$谽 +`+]yg-A[- H/mƮ./^I)1BJ1%$Y3ͭ<2q4NL4@9L6Ϭ2q6!8O>8kHv:kΫ :ͬcN6ɪ+=ԫ?)EAj?TA(-2A\ԪC4:BNRnE=VF=o=E=s=#H=1=dG=7FHHèJPJT;9L=@M=H=EL=l=HO==shN= = Q=/=v&P=S=R==NQ=ZIR}lrUˣ`|T줽0Wk;J6VZXnW9ǣkZ|=[=Dϡ=Z=.=<]= <=7\= P=^==Y]=z=Ʀ`=jaȟ y`Ϡ0c1*bE=c=^=le=N=d=7G=3bg==af== i==h==xj=͵vk4j*m?l;lnnmț%mp]_oW=)`p=͚=!r=q=Mr=$=st= Ҙ=4s=z= v=1=Nu=$Ϙ=w=9=?v=H"=5y==_x=&t=zz=d{{l}T|=n}=/b=Wn='\= = =T{=x=\R==R>= ==¹钽`P2 h֑=9===I=|>=f=J=mYdxmI@LΆ<O΍هXχ?$GNtZŌ/E3ʊ4_⊽މ㥋AË:߈==Έ=Ɍ= =ˌ===\ꍽ톽эhAG%}=ӎ==ȏ==~=5=j=؄吽Ń|㾃===w==ٺ=ā==]p䁽 ғ2%2 ŀ=c=~==>==+ }==Ą~=U= f{='J=|= =Ly==iw{==x==y=}t=pv=#=upws v1Du=H=lq=t=Ys=/:= o=;=nԙ7Uq@3mjo]휽n=C=j=I=Xm=B=h=ܛ=ak=ҙ==g=n=j=EC=υe=='h==Dc==f=Ò=ub=F=6a3eShdYjz_9 ^=S8=a=E=\=ß=C`=#=bn_yt<@Z]Xn\oZV qbZRT)T=|l=W=D==UR=w=% V=#ئ=DU%O SMc9M=4z=P=Ơ=:K== 6O=G6=VN8H}0LwF8JD9I6%)C2zIGū[A kEwS-?|(>=Ze=B=M%=<=_ި= A=U=A;=qV=m6?=7=39=ͩ=e==㾮=xa7=C=;=`D=T5= =s4T8 29g 6R05ګ|%5Y $/JL)K3ʉX]2=iȱ=b,==k0=qD=*=e=ɡ.=ھ=(=ԭ=v,=7=u&=B=w*=î=A$=ޯ=(=<$=L##=9=5"RO#&QѴyY $;$B|Y'dR"2!g  6F{C`s=K+====%=51=]`=@Ւ8+^&"|Z𸽾 HѦ =K===m =O=z =dݹ= ] Bഽ eP?=n===)= ͵==@=krMXp /o_' #j֭I÷qI0%%½ ;5ý)#6X½2=(<=Ľzz(ý9k ĽwmYxýH;=!:;='; =;=);9=h:*=:=:5=s@ŽQO½U޽xH8d=vW7s=[=\s;=ezu=1n=ھ=Q㺆=0_;Ž;;]½}#;{Ža1;D½PDE;NŽR;]+½@f;dŽr;½;Ž};Kܔ;KŽ;<=]=㊲=g¾=»=Hϻ&=ӻl=J໕=`K=,= *=;<ŽR=ż=D=[$ɼ=<żƺ=-ͼU==V4ɼ‰=4Ѽ=\+ͼL=t9ռ6=!Ѽ =;ټQ=ռ\ι=:ݼ:= ټm=7Ъ=ݼM=1vT=|S =?)/=&ʸ==5=P= t>׷=[@"= &@ ={B!=CA=dDv=vC=ZD= [@G=@%F=rF=Jh=Hp=K-=KL=J=#N=HJL=OmqM1=QS=LOH=S =yT=䦽Q= XV=kYS=S碢=%Y=CU=[4=W/V=\=аX=u^5=DZ=`M=:[\=eb$1=Pc=n/^=a]8%e=ie_=%kf=⡽Ia=)h=Z6b=rYܘc=kv= eU=1Om=Lf=o+p=,he=h=q=V+pj=lJs={k=>Vu= spm=8w=ޜw꒜=o=y=J'qϕ=dq=VuZ|=jx]s=~=zt=, P=ݙ5Kv=@XĀ=n>1=yxG= M=Ly=z=C6P= Y|=9[(= }=Ǐ=p l~=Ӆ=?e==I=e=?]A=䙁=䌽xK=c(N=*=="pl=mʴ=:W=>H=$=鋽;E=O=ꏽʅ=ǁ=<4z=Ň҆f=ZD=s*=o e=1Y=Ϗ=-=\x=en=*T-=s;D=dm=J芽=dӒ=/=Ȑ]=M@@o=L#=|댽^= {]= =俕=9@V~=3w̅=鎽*|=,e=ϒL{=$ᗽ6=L;y=“Pi=A㐽?x=D=v=7ʁ=1.u= q=גäs=?N&=}r=|Г=8TqM=}u=o=%|=:n=vz=l@=xga=k=wI=si=]u=Sgx%=siH=/jfà=qp q=: d=No=tڙKxb=GRm=Iz|`=ߢk=K_=vFj=;]=j @h=TV\=wf=UZ=0d=X=迥b= -HW=Na=Ȟ֪U=R=T=mV^=!y<=dm=ǘ==?=깽=z v=:ot= n=3gjc<ýa<@[<@ýY;=½ȍ;=T;=#I =#m=J_/=L=)>-=p+=`H== :=;L=Ժ=oĽa/:w`ý}Fb:cĽe!:lý 9UĽ8xý=gĽGй<ý)Ľ5/mýĽCýٺtyĽFý| !fĽ[=rV/;~=>?;E=pP;ݬ=Y`;-ývpN!ĽýnĽAݵýoý ý5*ýPܼ=ú;Y= ;C=:;x=;ýۻ,hýýXCýLN0=E;3=F<=q<٨=N < =b=1=/=3~:==_3==xY<=%=9w5=+=2>==`C7=Ѧ=- @=5=9=R =A=]=:==C=`B=<=7=ME=Ǧ=l>==SG=&L=5@=b= I=ϥ=A={f=J=iK*D M앤QnFV=QG==p@P=4ף=/I==R=W=J==>S=#֢=L=^M._V:BONDXK=X=zN=QQ=!=Z=Fʠ=ؤS=܇ЄT)<]f'DVy^7=k_=8=X==ta==Z= =d c=(=f[\=J=d='=^=¢=qf==_==h==a=C%hb^jI dANo'l=l==f=I=Jn=S=ih= aDiBp{jȐ!r꘽lAޜtNX:_n*u+Л=vv={= p==x=a= r=psQzhu繕=}u==|= "=w=8=~=P=JMy=}==s=az=%=^=T=9|==M==G~=BE=y =唽h̑\`%#-2ސ=P==J:===kl=FA==U=<=}===} =w=_=V=lۄ=,=[=G==-=LJ=ʎ^!췌m݆Gӈ@=v=֌=܉==wڈ=w ==h==A= 9=D=m=v==;tJTD 猽 gawY'!:A=,=O=*O=r=5===Ct:.u6j3Ӑ؃Z|v!KƂ_\=Cj= =\ג=ɉ=B =R= ==9=D=Q==*J==l =~== :~=Ǖ=m|==+|=I=;z= =;{=9=y=ϻ=$y==dw=U=3x={=u==qv=/[=t==y"u==Qr==s==roQ ?qʛn뒚o-y"Zl&n '[jM؀lӝhK`j~j=Ԟ=Vf= $=|h=H}=ٛd==ac fxb jd'F`Ab á^a(f I`=/=[=_s=A^=-X=*Z=v=JY,B\FWʡviZf䤽qY=2='T=q=W=ͥ="S==&V=g=^Q==nT==O='=R==M==mP=+= L=.=)KoZNaI񥽛LTGrJA*XE$D=2= ,H===C=\=cF=J=~EЫk@mClZԞ>꨽==(=V@=&=;==%.?=ī=J:==\==/=2J8=L=;;=~=Cy6==9=v3={4= =7=Ӳ=691W;5nS0-/==iJ2=A'=W-=`='l0=*=ف+=ӭ=B.=u=)=[F=Ī,="=m+\Dz&𮽔): %#a"!$==&=j=F"==T%=S=k =@v=A,#=&==}=A!=-==O=U=d==+=ysq3QsZ/G&ròZEz+͟ac0÷Հ{#=QR= =ޏ===) =r= = =S =V=} =e===* =o=====l)=w=4ڦT%JuH躽=C=<=<b=<=Zػ4ZqI%X^ɸp{y!<4L=<޼=P<=&<&=O< =ý6ĻĽ*gTý;^=W;)=p;q=š;2=h;h=-;:=+r;l=0s;DA=b(DĽ ]Qsý.qA IĽLT0yýF LĽHýL9:OĽuܺýf:={:P=r:=j0:9P=x9=/09N=4j=аK=v:IĽI\:ý3:EĽ*n:ý;Ѻ$=;= =٫4=<+;/Ľt;;Oý\L;(&Ľ\ =m=F ~= =O ==5=?=b; ý;5ý;ý+y;Uýj;|ý`;8ý;jý$;ݭý򻸣=L=}=6=ܲ \P=_=sd,=h<>½2l<[zp<8]tC5=* i=F>ֵ=P==kе=E,=hp=㴽$=[=Ѐό=FE=&q=P)U/=&T=绳=M=?=_@=eA=&䪽A= Bĩ=bDi(=D9=5Fϩ=AFޭ=H *=H =#I"=I=K '=yK2=uMˣ=H\N=aN=;((P=ܦO=jPK=R=WR=ġT= T2!=iV=BUD=0Xw=lW0=!Y=YX=ݸ[I_=kZ=3{]\Ѣ=q\,#=E]=ՠ `=6^=7a=DibW =wfa;J=$vd=& co=)1f=d =ggd=OLfg=i͞=gĜ=XkW6=i =AUj=lΛrm=Pfk=(o=ݵErp h=^Sn.="r|˛=/o='s-=E}q ޘ=|u=s+4=)s=ޗw=ʝgu=3y=vz"=[w0=4|&=GyT=}`=zԔ=av=Y|k%=}=a͓=qw~=,==k=j%Ԁ=O= S=7<=S=Q=WJ =q*A=2Z=G.⊎=چ=ꄽӍ==-=gA=` c=+==֍=ӇC=Ge==Œ=J։ҋ===MT=\`P= = =ԉI=}Ɏ=q= !Tˌ*=>ᏽ=}=>5=#/n?=Rs=ߎs}=7=.nc=M4=Y'= r%=쐽3=$^=(n=g=l .=2w=Պ~ޕ=Rh5=6|=㖽7=F~z=+9~=ty=\; ;}=Xw=?嘽{=?u=э;y=]施Yt=V9=s3=wޗ=,qu-=Yu7u=՘bo="gks=,xom=Ĝq=zZl=Nep=뻚Tj=gn=|\-i=Y l=/|g=>Hk=e=ٟRi=8U7d==#ec=f.$=aW= e俞=`=NcZ=p^ħ]=̢`=8A[=_Q^=٠FZ=4]=`qX=r[=yȤ=ŐZS=VdV=X\=%bT2XS=(!V=ƣQ=XT=uY"P=<R=m뤽@mN=çP=m|rL=IN=s AJ=Ψ$M=~DI=RTK=)G=ԩI=^E=TG=BD=ӪE==D=rpA=BCQ=B? ==A$===uc?1=(<= =2=nc:`v=Q;w:=7='8=} 5= 6=b&4= 5=ねZ2=9­=Et1 =H2B=/<&=d0P]ýKWG =w ý`?:uŽ9Yýsn9qŽʷ=ґ9= :s=$ N:=T:ý᧺Ž*ʺý麘Ľ"=XQ;=S&;0=8; =sHG;^ýWIĽmjlýmxĽӅ=3!;(=;=7;=; ½|ɭĽ ½B=);ry= };'=;b=o;=mo;'J=S;r=~;E0=<"ĽV7½KĽ]{ ½ýl½ýwW½% BL=%<̘=b]*<4=M-<'v=B2bAMý*G: J½,aOA@R½W˛sZF½M_{bj=Kf<\=Ml=<-)=>%ճ¹f =$=2=====IJ=Һ ==!=.T="=G=#===y$=۱=%=o=RV&=n=%z'=F=1(=j=_\)=k=& *===+="=+= =-=m=-==P.=O=͑/=ݮ|0~1aO2l]3㭽l!4 85d5 ^7f=K8=أ=V8==Y$:=r!=s:=߫XY;m8C=?=8=S?==~A= =GA=)ƩwBE;D<";D/=BE=V=F=k=FF=.=H=-Ĩ̮Iڗ{INA\}K 8KK=NL=z=0N=0=M==hO=DZPUdPG*BRRsT+-iS:V3UČ$X3WiYgUX0sM[_ΡZ䢽H]3;\#=]= =U_=I=A^=z=4a=1b]4a[8@db Ue&}dsg}fܞiiۜgDHkv8\iC lYj,n=lt5p#I,n}כ[qo9]sYqv=ׇ=4====׋3ӍֿQևd又`@HVL=ɤ=G=^=}=f\=劊==,yRuZnKm4$a0،C쇽p:)^(z]@nfY=K=>=#=W=[=zx=֒=/s L9EMd>[N~H}=h=ʆ=sA=R{==r=Y==pz==}==x=3m= x•\f{vly7x=#=..t=j=0Lw=.=?r==]u=К=q=B=ns=q=Ino=`=gNr=r=Cm==Pp==m==i==q7hEj<ΞHf眽hed>g=Xc`*e aeʞ.c_$`ib;m^H`F\^բ[^B\bvYMޡX=+=HZ=D4=EV=Ƣ=OX==IU=u`=مV=1F=S=n=&T=̥=,Q==R=+R=V;P=(=Q=զ=N=#=uMO=3X=pL=T=u{M=ا=LLEJ!3JdHVƧG==G=wR=E=j=$F=Vͩ=J8E8 _Cbzb^CオA @=5Q=@="5=?=6ߪ=з>=#=eD==-=33=+===o+==)=FR=)=7=(\w'簽*&%wI%u/#񩱽W9#A! J =8=(v ==[=6==&=k==,==z=gK=====i==N=Q=`)==_=R=H=w===g==u#r%U yw == =:= =(=] =X==?=v =Z=J==\1=GI.N{?躽8E۷>M%X"¯/@hv9^pB켚AμI3p+Pftz#缆V༞0 ཽ#\ܼ;߼8`ؼ1`Dۼ]G<=,f<=L< =h<Ⱥ=j̼?庽OϼˇkȼDO˼׿N<=7m=Y>;=@rs=[@A=JB=b/B`Ʃ=]D^=-DJ=DD= F=يѼF=trH=H=}20J=Wka]J= K=^٧^,L=M=EzM=W2NTM=P8Pf=Pʥ=Qϥ=yRF=`S6=DTA¤=OUݜ=V<=!V=W=_X-e=Y=j[Z=>ꢽ([=wI\=#a,]5=z]=^=KF_=`=`B=lxb;y=b=Vc=Le=:d=꥞f=8f=sh=^%h=VWj= ei=rl=z`MOk=m=̜l=Uˆo=8pn=mAq=.Ro=xr=/ ʼnq=N=;jSQ=i91=8=J6s==1ʳ=_ӈM=f9=9=1=G_=ъp=3"?=%hd==@-=vČً=jʼn='=5,%=rb=PWo=?=@=Rʋ7ׅ=ُ=t=iNF=T!I=\r=ƍ=Uφ=nj=ے==YS=%%=/V|=`Z=_҃==˕='0}=mL=Jg{=g<=9쒽pTz=<=yM= ^ݓ=Jw=R,[c~=˔u=g|=js=㸕=?s=jnzU=pqƛ=x=ot=%9w1=-nڗn[m=&wt=tJk=!G)s= j=ʞ?q=kh=Uro==]f=J6n=aԚe=iel=J=kﴛ=6b=jI=`!`=CP}g='ko^=NBe=F=d=^[.=7c!=;Zyɤ=~a$=XXc=_w=&V V=ZG&]=LT={ݦef[='=rZ^=rQػ= X;=P%1-O=˖>V=VEvM=&PT=FK=fR=3УJ==y'IW=Oߜ=}lG =NWM=gD=:૽RKK=[C=gwI=rUA=h쬽ݢG=Bϕ?=9=>~=D=<2=C<>=1;޲=+Au=m9=1=O??=:7=p=,=m5[)=*;==4=91=T2N=#7V36=uq/=̱?4=𫽫-=%.=,z=&2৬=k)+=30?%>/=\t(=wT-=ӭk&=&=`%9=Lr*脮=t#g#=G۴G'=30!=E%=Ny=$=r=*"Q= \=0y=<=ܶ=h=2?=ֱ)=?=Ϸ=y=oai.==>=N=3=U=~ jA=V= 1= o=G : =d =36=q{ ==6 =`= c={@=s=a=U Ӷ==\0+t<=_k<~ST<<枼<^<輽 [=v;fĽOb3ýSpĽၻJ½;戻}Ľ~-=̚;?=ș;=h;=n;½fKsĽNĻj½ʻXĽ.Իk½4ۻnĽz½?XĽ M=V;P=Y(<5=s0XW=T\=ν8=I=:*9=Ĭ=:=$ =:=I=j<=l gU=ZFs=9)?sªu?=Y@=Ϫ=IA=="B=N=C=D>0 DfjFfFX6HpVHJn&J0K KsM|M 6=zN=j=;P==%8P==Q==Q=&=S==4S==YU==7jU=n=3AW= f="W=ݣ=XX=Ӣ=,X=K=Z=>=Z==js\==D\=F#=N+^==]=%=f_=|=©_==a==;Za=1b d=YcWuRe}'=rf=K=Zcf=ϊ=FTh=v{=Ih=0-:h]j돜jt{l=8Om=;=m=0 =Kn==n=h=ap=a=Op=Ú=w8r=u=[q=WorʙMte̘`ctJ#OBvϘ=w=8֗='v=%=sx=0=mx={=G?z== z=Eϖ={=={=8o|@˕!/~甽~g=ڜ[l饀<wk璽@b/;+#UO{ faGꐽvZ1}36goFU{ЎU Žqφ|ō=21==?·=L== =C=0^=4=0=%C='=|w=r==1=7=}=}=N<==1=i=~=^=1=C=ˈ=Qt={o=nӌ==i1==q=~W===M8= ̐=\>@[==""===F=c=Ր=P1g[JD%鑽 8=(K=J#=o=m==@a=v= M;[p<;~5 ~=2= +~=ȕ=Tp|=N=|= z={FҖz̅Jz0_x(rx0Żvɗ[(wjޘuhfuoss6qRp==Tq=G6=-Ho==o=Nߛ=m=L*=|cn=B=k=Û=El=!.=vk(fi!vTjb&g>hʞfyԝ g|mMdhTfeWbLc V`bO'_g`m]^-?[z> ].'b1\=t=Y==~Z== XW=̞=:xVo䢽W󤽨Tn8V\U=֥=uR=}<=S=Tk=PP=3Ĥ=~nO# QHMKOڧVK(MkJKQH{-J\F@AHDHzFCBűDU+<"A(B S?k>=֩=5@=~=қ<=Q=f>==:=̪=<==V8=F=:= =9J;6t{8ˮ2f4r16I`2謽Z4dǯ0]/=-=1=Ҁ=-= =/==@,=Q~=-=r= B*==+==+$x'0.)>^%"L'Z ޾# uoi%}q!᰽ ==ϑ"=%==Z= =S=e0====N=V=;=Yj=Pl=>=Y=ӵ==|&=Y xn<kuӶ$.7@y=ϙR괽Kx KXY^ ==9 =Iܵ=i =A=N=@;=t =k@=c=,=}==w= ====Q=؋=qH=j==Lٷ0 Ǻo20ď늸7jḽ[<й><=f7=<=i$= =rhw: >=$ lx=,2=j =‘=յ|$=is=g=?G=B=3 ⋵=g=^=_@=vn=⡳g=:x=M0==&='곽t=?Կ!=؉J!=Ʊ#=A(W#=L%=_Ų\$=Ѱ'=1a&=gUy)=(=ׯz{)=[,a=XI+=F.8=;/=Sð`-=W%1=X/=eխ0ʓ=4ҵ=r2=5G=6=)5=Gǿ8=֟g6=:=>.)8=8o<=Dpc:=g>=F=#<=%VH@=$Ѭ==+>T=C=H|@Ǩ=YA=(E=kgC=G=쪽Hǭ=ҧE=7J;0=^G(=ZL@=I=B1N0=@Jf=cK=UP=}mPM=\R=s駽@S⦧=O={U =UQo=[R=Ǣ0X=TT=e0Y=ʥZ8=VdK=O\"=-X=Lt^k=\Y=:`ܣ=y[{=a L=t]_ߞ=c=^LB=_=u$bf=Pܡ#1a=-U h=F@b=+i=ynd=<Ck=w f=u^Nm=|g=0Ԛrh2=oĒ= j=q=kW==BsU=3:mK=et촜=u=co=ء}sw= ,q=y= r=\Uz=vOt= h|=fϙiu=5 ~=&mw=D]i4x=N=&=y^= Sz=L{W=؁̖= |' =?=^~F]=^ol=[=8}==`=d=ف=J:妎=ԛ=5=Q,=G= $+=}=܄=a>-7= :==VQV==9=w͉=iև=s .=dG=>t=WEZ=td=[2=hN=6m=#B=i=݋=3=P҄=RА=CP==oّ=@膽d==ߒA=owr=o=-/==р=a{>=66=₽Efy=Mo}=H1W=t|=֖,Ԁ=㴓"z=z=[̗=*=۵x1n=}Lr=3wʕGrv=*^sz={ t=IHy=J=DoxC=r=Jv52=q=Wut=uo=rMs=sn}䙽_Bm= p=񐚽k=nn=۝=qn==0^in=[l<=gّg=XHθi=L;8pe=ןg=㝽c=Xe/f=ًKDb=񠽭hd=2`=q|b=/ٟ_=`=~Iv]= _=4#[=-u= [V=sU\z=jYۣ=ZY= =V=W=٬MSU= =T._=U=8Rݥ=9SrNR=O]P=ݘwP='N="v=MP=M=4/Lɧ=KЬ=#J^A=IF=TH=v!H&2G=f+BF=OfTE=©D= =iC =BP=A߂=Y@7=@@d=>˫=>`=F<:;=ڥG;= :=?6|):=}=H9=I47 =u7mS6=@Z4=+஽n4=s2=>ۭ=1찯=f42@=L/|:=j0冷=#-°=w.=C+I=W,+=b((=U*=&=.*=&Pֲ=\`'=$W=.%=("׳=A#*B=@; JV=! =tʱU=\=#f=6;=m|v=%^=Ӳ=V}~=;*J=󶽧=;=ꩳ===ʺ>=P=ㄸ== =1= ;a= * C=Gk=G =빵=4kY=e =Һj=|T=>8x=hj=ƶ=Qjͻ=W=f.=.Z=z=Bs==zR=۠xG= `2=i=jPy=n~=r=A⼄ḽm<zy<%L<{;u{:BýL9Ľc9[ýWĽ痹)sýx CĽPý҈}ĽZýʺ lĽliý@LĽý'2,ĽQ8ýcH=l|Y;='j;?= z;R=1;6=};=; =;'=q;h=?;[=2۶;%=;0=>;/=;=ě;8=IC;=;T?=;d=C;9E=nUZ=:=!==O =RҮ===L=DC"=i=è=޷=I5$==4=o=%&==U==0(=<+=_* =E=*=ܿ=!== +=S=D#=#$a$.v&紽0B:c(k2Ԫo5*gv4e,nJW6--58{/j:hx1屽@;ޢ=<=|i=/4=k=\>==(5=:=Ն@==&7=M=3ZB==9=z=r+D==gf;=U=E=#=2==R\={G=n=N>=ʭ== $T=Y=v~K=塩=U=ܡ=EM==ٗW=^= O=c=LNY=ߠ=P=|§=p[=S`=dR==A\=ߟ=XT={=c^=(:__V`׽Xۤ\ye ]ۢg񅜽i_DB=@`=ס=i=+=?Xb=)=Bk=1=Nd=x=%m==ge=ǟ=n=knoՙ0fhA=qIj\=j=Q=ws= t=l=C=:u==gn=?=v=*T=Lp=І=x=–=q=w͚=:y=/=Ns=敽[two{Q v`m}*w<~y%hy~65F=#=@A=]{=_=$Q==}=`Zj~?j _}$2=w=Ӑ=}F=.Y= :=(5==O==~=[=Б=觅==='#}Cᏽ6k\I zQψ[v==s=UU== =4=uX[H2'ڈ/菽Ԑ݃烽y &hɂ=Dȑ==o=T==ہ=3=Wr4c2j:Z==$~==:~=kp=}=$=2G|l㕽_{Wz[Puz8Ny==x=l=S*x=`F=pv==u:VzuQsKt%>rʊrЯp#R&q]\n7#o;-mShm8?{k꛽'\l\jih=]˜=i=V=:g=L`= Mh==\{gMdR>&e🽽bnў[b==Yc==a`==wa=߀=`ϡa]x)_Ml\w]@YZNE[X.5W=[|=2Y==V=2 =MyW==ϛVbhSݣ&TQi+P==@R=}Φ= O=:=+NOjL M/CL= u=_I=צ=*K=x=H=a`=O`I=0=BF==ʓG=- =}D=&o=JE=o=EB==C==@=1{=v"B==+?=0=3N@==:c===x>==w;=='<= =9= =o:=R=E8=A =8=S=:6=Ŏ=T5CϬ63O>4!,1oϭ]2v{/oNz0.̮..q?K,:J4,fް+==)==w)=}='=='==|%==%=L=u$=u=|$=)=l>"==%"==^g =lg=6 =Cu=G=߲=F=Գ=N2\`}= A=n==p$=S=z=SA=G=(=<=7=h=9=S=k=dژEEjz =:=Ţ == =\= =1=o 2XU ]|I'l@ظ57XQBqd=w==桸=z=߹=qn<==>ؼa罽C8Ӽ ^PԼB-ϼ‘_`м"˼Ļm̼t;Ǽ,< =}<x=<;=vW<=Z=ߺrڿ=,;׿ ;6Ƚz ; ҿgd8;.Ƚf@;t˿1Z;8%ȽEa;Ŀ:{;ȽzՀ;ۻ; Ƚ;ٲß;Uǽ":; e;ǽJl;k;%ǽ^;z[;ǽc;P3; ǽ^;y;ǽT4;kl<uǽ$3<]x =zԧ=p=߫Í===}<};u<.3<0 h9=UB=ta@.=p3D|=tBt=F#=F=ŪD=ɧH=IjF=C9FG=1K=Hd_=oMe =ZN=˨݊K=ȃ-P=/I=M=k{Q=ŧN=J\S=B?g=Db=`0h=W~rd=Dj=)䟽l*f=al=wH2g=Tn=Dhi=o= p=ZkHÙ=Gr=omf!=4=n=.Иt='o=--mv= eoq=lx=ݚs=䖽y=53zU=0gu=%|7=RvZF=gnss-sdr-0.0.6/src/tests/test_main.cc0000644000175000017500000001534012576764164017031 0ustar carlescarles/*! * \file test_main.cc * \brief This file implements all system tests. * \author Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "concurrent_map.h" #include "control_thread.h" #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_cnav_ephemeris.h" #include "gps_almanac.h" #include "gps_iono.h" #include "gps_cnav_iono.h" #include "gps_utc_model.h" #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" #include "sbas_ephemeris.h" #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" #include "sbas_satellite_correction.h" #include "sbas_time.h" using google::LogMessage; DECLARE_string(log_dir); #include "arithmetic/complex_carrier_test.cc" #include "arithmetic/conjugate_test.cc" #include "arithmetic/magnitude_squared_test.cc" #include "arithmetic/multiply_test.cc" #include "arithmetic/code_generation_test.cc" #include "configuration/file_configuration_test.cc" #include "configuration/in_memory_configuration_test.cc" #include "control_thread/control_message_factory_test.cc" #include "control_thread/control_thread_test.cc" #include "flowgraph/pass_through_test.cc" #include "flowgraph/gnss_flowgraph_test.cc" #include "gnss_block/gnss_block_factory_test.cc" #include "gnss_block/rtcm_printer_test.cc" #include "gnss_block/file_output_filter_test.cc" #include "gnss_block/file_signal_source_test.cc" #include "gnss_block/fir_filter_test.cc" #include "gnss_block/gps_l1_ca_pcps_acquisition_test.cc" #include "gnss_block/gps_l2_m_pcps_acquisition_test.cc" #include "gnss_block/gps_l1_ca_pcps_acquisition_gsoc2013_test.cc" //#include "gnss_block/gps_l1_ca_pcps_multithread_acquisition_gsoc2013_test.cc" #if OPENCL_BLOCKS_TEST #include "gnss_block/gps_l1_ca_pcps_opencl_acquisition_gsoc2013_test.cc" #endif #include "gnss_block/gps_l1_ca_pcps_quicksync_acquisition_gsoc2014_test.cc" #include "gnss_block/gps_l1_ca_pcps_tong_acquisition_gsoc2013_test.cc" #include "gnss_block/galileo_e1_pcps_ambiguous_acquisition_test.cc" #include "gnss_block/galileo_e1_pcps_ambiguous_acquisition_gsoc_test.cc" #include "gnss_block/galileo_e1_pcps_ambiguous_acquisition_gsoc2013_test.cc" #include "gnss_block/galileo_e1_pcps_8ms_ambiguous_acquisition_gsoc2013_test.cc" #include "gnss_block/galileo_e1_pcps_tong_ambiguous_acquisition_gsoc2013_test.cc" #include "gnss_block/galileo_e1_pcps_cccwsr_ambiguous_acquisition_gsoc2013_test.cc" #include "gnss_block/galileo_e1_pcps_quicksync_ambiguous_acquisition_gsoc2014_test.cc" #include "gnss_block/galileo_e1_dll_pll_veml_tracking_test.cc" #include "gnuradio_block/gnss_sdr_valve_test.cc" #include "gnuradio_block/direct_resampler_conditioner_cc_test.cc" #include "string_converter/string_converter_test.cc" //#include "gnss_block/galileo_e5a_pcps_acquisition_test.cc" //#include "gnss_block/galileo_e5a_pcps_acquisition_test_2.cc" #include "gnss_block/galileo_e5a_pcps_acquisition_gsoc2014_gensource_test.cc" #include "gnss_block/galileo_e5a_tracking_test.cc" #include "gnss_block/gps_l2_m_dll_pll_tracking_test.cc" // For GPS NAVIGATION (L1) concurrent_queue global_gps_ephemeris_queue; concurrent_queue global_gps_iono_queue; concurrent_queue global_gps_utc_model_queue; concurrent_queue global_gps_almanac_queue; concurrent_queue global_gps_acq_assist_queue; concurrent_queue global_gps_ref_location_queue; concurrent_queue global_gps_ref_time_queue; concurrent_map global_gps_ephemeris_map; concurrent_map global_gps_iono_map; concurrent_map global_gps_utc_model_map; concurrent_map global_gps_almanac_map; concurrent_map global_gps_acq_assist_map; concurrent_map global_gps_ref_location_map; concurrent_map global_gps_ref_time_map; // For GPS NAVIGATION (L2) concurrent_queue global_gps_cnav_ephemeris_queue; concurrent_map global_gps_cnav_ephemeris_map; concurrent_queue global_gps_cnav_iono_queue; concurrent_map global_gps_cnav_iono_map; // For GALILEO NAVIGATION concurrent_queue global_galileo_ephemeris_queue; concurrent_queue global_galileo_iono_queue; concurrent_queue global_galileo_utc_model_queue; concurrent_queue global_galileo_almanac_queue; concurrent_map global_galileo_ephemeris_map; concurrent_map global_galileo_iono_map; concurrent_map global_galileo_utc_model_map; concurrent_map global_galileo_almanac_map; // For SBAS CORRECTIONS concurrent_queue global_sbas_raw_msg_queue; concurrent_queue global_sbas_iono_queue; concurrent_queue global_sbas_sat_corr_queue; concurrent_queue global_sbas_ephemeris_queue; concurrent_map global_sbas_iono_map; concurrent_map global_sbas_sat_corr_map; concurrent_map global_sbas_ephemeris_map; int main(int argc, char **argv) { std::cout << "Running GNSS-SDR Tests..." << std::endl; int res = 0; testing::InitGoogleTest(&argc, argv); google::ParseCommandLineFlags(&argc, &argv, true); google::InitGoogleLogging(argv[0]); try { res = RUN_ALL_TESTS(); } catch(...) { LOG(WARNING) << "Unexpected catch"; } google::ShutDownCommandLineFlags(); return res; } gnss-sdr-0.0.6/src/algorithms/0000755000175000017500000000000012576764164015543 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/data_type_adapter/0000755000175000017500000000000012576764164021215 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/0000755000175000017500000000000012576764164024362 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_short_to_complex_short.h0000644000175000017500000000407512576764164033732 0ustar carlescarles/*! * \file interleaved_short_to_complex_short.h * \brief Adapts a short (16-bits) interleaved sample stream into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_INTERLEAVED_SHORT_TO_COMPLEX_SHORT_H_ #define GNSS_SDR_INTERLEAVED_SHORT_TO_COMPLEX_SHORT_H_ #include #include class interleaved_short_to_complex_short; typedef boost::shared_ptr interleaved_short_to_complex_short_sptr; interleaved_short_to_complex_short_sptr make_interleaved_short_to_complex_short(); /*! * \brief This class adapts a short (16-bits) interleaved sample stream * into a std::complex stream */ class interleaved_short_to_complex_short : public gr::sync_decimator { private: friend interleaved_short_to_complex_short_sptr make_interleaved_short_to_complex_short(); public: interleaved_short_to_complex_short(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_byte.cc0000644000175000017500000000505512576764164033477 0ustar carlescarles/*! * \file interleaved_byte_to_complex_byte.cc * \brief Adapts an 8-bits interleaved sample stream into a 16-bits complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "interleaved_byte_to_complex_byte.h" #include #include interleaved_byte_to_complex_byte_sptr make_interleaved_byte_to_complex_byte() { return interleaved_byte_to_complex_byte_sptr(new interleaved_byte_to_complex_byte()); } interleaved_byte_to_complex_byte::interleaved_byte_to_complex_byte() : sync_decimator("interleaved_byte_to_complex_byte", gr::io_signature::make (1, 1, sizeof(int8_t)), gr::io_signature::make (1, 1, sizeof(lv_8sc_t)), // lv_8sc_t is a Volk's typedef for std::complex 2) { const int alignment_multiple = volk_get_alignment() / sizeof(lv_8sc_t); set_alignment(std::max(1, alignment_multiple)); } int interleaved_byte_to_complex_byte::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const int8_t *in = (const int8_t *) input_items[0]; lv_8sc_t *out = (lv_8sc_t *) output_items[0]; // This could be put into a Volk kernel int8_t real_part; int8_t imag_part; for(int number = 0; number < 2 * noutput_items; number++) { // lv_cmake(r, i) defined at volk/volk_complex.h real_part = *in++; imag_part = *in++; *out++ = lv_cmake(real_part, imag_part); } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000236112576764164027124 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(DATA_TYPE_GR_BLOCKS_SOURCES interleaved_byte_to_complex_byte.cc interleaved_short_to_complex_short.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ) file(GLOB DATA_TYPE_GR_BLOCKS_HEADERS "*.h") add_library(data_type_gr_blocks ${DATA_TYPE_GR_BLOCKS_SOURCES} ${DATA_TYPE_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${DATA_TYPE_GR_BLOCKS_HEADERS}) target_link_libraries(data_type_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES})gnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_byte.h0000644000175000017500000000405512576764164033340 0ustar carlescarles/*! * \file interleaved_byte_to_complex_byte.h * \brief Adapts an 8-bits interleaved sample stream into a 16-bits complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_INTERLEAVED_BYTE_TO_COMPLEX_BYTE_H_ #define GNSS_SDR_INTERLEAVED_BYTE_TO_COMPLEX_BYTE_H_ #include #include class interleaved_byte_to_complex_byte; typedef boost::shared_ptr interleaved_byte_to_complex_byte_sptr; interleaved_byte_to_complex_byte_sptr make_interleaved_byte_to_complex_byte(); /*! * \brief This class adapts an 8-bits interleaved sample stream * into a 16-bits complex stream (std::complex) */ class interleaved_byte_to_complex_byte : public gr::sync_decimator { private: friend interleaved_byte_to_complex_byte_sptr make_interleaved_byte_to_complex_byte(); public: interleaved_byte_to_complex_byte(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_short_to_complex_short.ccgnss-sdr-0.0.6/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_short_to_complex_short.c0000644000175000017500000000512512576764164033722 0ustar carlescarles/*! * \file interleaved_short_to_complex_short.cc * \brief Adapts a short (16-bits) interleaved sample stream into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "interleaved_short_to_complex_short.h" #include #include interleaved_short_to_complex_short_sptr make_interleaved_short_to_complex_short() { return interleaved_short_to_complex_short_sptr(new interleaved_short_to_complex_short()); } interleaved_short_to_complex_short::interleaved_short_to_complex_short() : sync_decimator("interleaved_short_to_complex_short", gr::io_signature::make (1, 1, sizeof(int16_t)), gr::io_signature::make (1, 1, sizeof(lv_16sc_t)), // lv_16sc_t is a Volk's typedef for std::complex 2) { const int alignment_multiple = volk_get_alignment() / sizeof(lv_16sc_t); set_alignment(std::max(1, alignment_multiple)); } int interleaved_short_to_complex_short::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const int16_t *in = (const int16_t *) input_items[0]; lv_16sc_t *out = (lv_16sc_t *) output_items[0]; // This could be put into a Volk kernel int16_t real_part; int16_t imag_part; for(int number = 0; number < 2 * noutput_items; number++) { // lv_cmake(r, i) defined at volk/volk_complex.h real_part = *in++; imag_part = *in++; *out++ = lv_cmake(real_part, imag_part); } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/CMakeLists.txt0000644000175000017500000000143612576764164023761 0ustar carlescarles# # Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/0000755000175000017500000000000012576764164023020 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.cc0000644000175000017500000000600012576764164026327 0ustar carlescarles/*! * \file ibyte_to_cbyte.cc * \brief Adapts an I/Q interleaved byte (unsigned char) sample stream * into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "ibyte_to_cbyte.h" #include #include #include "configuration_interface.h" using google::LogMessage; IbyteToCbyte::IbyteToCbyte(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_input_item_type = "byte"; std::string default_output_item_type = "lv_8sc_t"; std::string default_dump_filename = "../data/input_filter.dat"; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); size_t item_size = sizeof(lv_8sc_t); ibyte_to_cbyte_ = make_interleaved_byte_to_complex_byte(); DLOG(INFO) << "data_type_adapter_(" << ibyte_to_cbyte_->unique_id() << ")"; if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } IbyteToCbyte::~IbyteToCbyte() {} void IbyteToCbyte::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(ibyte_to_cbyte_, 0, file_sink_, 0); } } void IbyteToCbyte::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(ibyte_to_cbyte_, 0, file_sink_, 0); } } gr::basic_block_sptr IbyteToCbyte::get_left_block() { return ibyte_to_cbyte_; } gr::basic_block_sptr IbyteToCbyte::get_right_block() { return ibyte_to_cbyte_; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/CMakeLists.txt0000644000175000017500000000307112576764164025561 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(DATATYPE_ADAPTER_SOURCES byte_to_short.cc ibyte_to_cbyte.cc ibyte_to_complex.cc ishort_to_cshort.cc ishort_to_complex.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/algorithms/data_type_adapter/gnuradio_blocks ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ) file(GLOB DATATYPE_ADAPTER_HEADERS "*.h") add_library(datatype_adapters ${DATATYPE_ADAPTER_SOURCES} ${DATATYPE_ADAPTER_HEADERS}) source_group(Headers FILES ${DATATYPE_ADAPTER_HEADERS}) add_dependencies(datatype_adapters glog-${glog_RELEASE}) target_link_libraries(datatype_adapters data_type_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.h0000644000175000017500000000525112576764164026570 0ustar carlescarles/*! * \file ishort_to_cshort.h * \brief Adapts a short interleaved sample stream into a std::complex stream * \author Carles Fernandez-Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_ISHORT_TO_CSHORT_H_ #define GNSS_SDR_ISHORT_TO_CSHORT_H_ #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" #include "interleaved_short_to_complex_short.h" class ConfigurationInterface; /*! * \brief Adapts a short integer (16 bits) interleaved sample stream into a std::complex stream * */ class IshortToCshort: public GNSSBlockInterface { public: IshortToCshort(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~IshortToCshort(); std::string role() { return role_; } //! Returns "Ishort_To_Cshort" std::string implementation() { return "Ishort_To_Cshort"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: interleaved_short_to_complex_short_sptr interleaved_short_to_complex_short_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; std::string output_item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; }; #endif gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.h0000644000175000017500000000541612576764164026544 0ustar carlescarles/*! * \file ibyte_to_complex.h * \brief Adapts an I/Q interleaved byte integer sample stream to a gr_complex (float) stream * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_IBYTE_TO_COMPLEX_H_ #define GNSS_SDR_IBYTE_TO_COMPLEX_H_ #include #include #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief Adapts an I/Q interleaved byte integer sample stream to a gr_complex (float) stream * */ class IbyteToComplex: public GNSSBlockInterface { public: IbyteToComplex(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~IbyteToComplex(); std::string role() { return role_; } //! Returns "Ibyte_To_Complex" std::string implementation() { return "Ibyte_To_Complex"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::blocks::interleaved_short_to_complex::sptr gr_interleaved_short_to_complex_; gr::blocks::char_to_short::sptr gr_char_to_short_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; std::string output_item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; }; #endif gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_complex.cc0000644000175000017500000000670612576764164026705 0ustar carlescarles/*! * \file ibyte_to_complex.cc * \brief Adapts an I/Q interleaved byte integer sample stream to a gr_complex (float) stream * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "ibyte_to_complex.h" #include #include "configuration_interface.h" using google::LogMessage; IbyteToComplex::IbyteToComplex(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_input_item_type = "byte"; std::string default_output_item_type = "gr_complex"; std::string default_dump_filename = "../data/input_filter.dat"; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); size_t item_size = sizeof(gr_complex); gr_interleaved_short_to_complex_ = gr::blocks::interleaved_short_to_complex::make(); gr_char_to_short_ = gr::blocks::char_to_short::make(); DLOG(INFO) << "data_type_adapter_(" << gr_interleaved_short_to_complex_->unique_id() << ")"; DLOG(INFO) << "data_type_adapter_(" << gr_char_to_short_->unique_id() << ")"; if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } IbyteToComplex::~IbyteToComplex() {} void IbyteToComplex::connect(gr::top_block_sptr top_block) { top_block->connect(gr_char_to_short_, 0, gr_interleaved_short_to_complex_ , 0); if (dump_) { top_block->connect(gr_interleaved_short_to_complex_, 0, file_sink_, 0); } } void IbyteToComplex::disconnect(gr::top_block_sptr top_block) { top_block->disconnect(gr_char_to_short_, 0, gr_interleaved_short_to_complex_ , 0); if (dump_) { top_block->disconnect(gr_interleaved_short_to_complex_, 0, file_sink_, 0); } } gr::basic_block_sptr IbyteToComplex::get_left_block() { return gr_char_to_short_; } gr::basic_block_sptr IbyteToComplex::get_right_block() { return gr_interleaved_short_to_complex_; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_complex.h0000644000175000017500000000526512576764164026742 0ustar carlescarles/*! * \file ishort_to_complex.h * \brief Adapts an I/Q interleaved short integer sample stream to a gr_complex (float) stream * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_ISHORT_TO_COMPLEX_H_ #define GNSS_SDR_ISHORT_TO_COMPLEX_H_ #include #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief Adapts an I/Q interleaved short integer sample stream to a gr_complex (float) stream * */ class IshortToComplex: public GNSSBlockInterface { public: IshortToComplex(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~IshortToComplex(); std::string role() { return role_; } //! Returns "Ishort_To_Complex" std::string implementation() { return "Ishort_To_Complex"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::blocks::interleaved_short_to_complex::sptr gr_interleaved_short_to_complex_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; std::string output_item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; }; #endif gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/byte_to_short.cc0000644000175000017500000000613512576764164026220 0ustar carlescarles/*! * \file byte_to_short.cc * \brief Adapts an 8-bits sample stream (IF) to a short int stream (IF) * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "byte_to_short.h" #include #include "configuration_interface.h" using google::LogMessage; ByteToShort::ByteToShort(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_input_item_type = "byte"; std::string default_output_item_type = "short"; std::string default_dump_filename = "../data/input_filter.dat"; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); size_t item_size = sizeof(short); gr_char_to_short_ = gr::blocks::char_to_short::make(); DLOG(INFO) << "data_type_adapter_(" << gr_char_to_short_->unique_id() << ")"; if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } ByteToShort::~ByteToShort() {} void ByteToShort::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(gr_char_to_short_, 0, file_sink_, 0); } else { DLOG(INFO) << "Nothing to connect internally"; } } void ByteToShort::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(gr_char_to_short_, 0, file_sink_, 0); } } gr::basic_block_sptr ByteToShort::get_left_block() { return gr_char_to_short_; } gr::basic_block_sptr ByteToShort::get_right_block() { return gr_char_to_short_; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_complex.cc0000644000175000017500000000640512576764164027075 0ustar carlescarles/*! * \file ishort_to_complex.cc * \brief Adapts an I/Q interleaved short integer sample stream to a gr_complex (float) stream * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "ishort_to_complex.h" #include #include "configuration_interface.h" using google::LogMessage; IshortToComplex::IshortToComplex(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_input_item_type = "short"; std::string default_output_item_type = "gr_complex"; std::string default_dump_filename = "../data/input_filter.dat"; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); size_t item_size = sizeof(gr_complex); gr_interleaved_short_to_complex_ = gr::blocks::interleaved_short_to_complex::make(); DLOG(INFO) << "data_type_adapter_(" << gr_interleaved_short_to_complex_->unique_id() << ")"; if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } IshortToComplex::~IshortToComplex() {} void IshortToComplex::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(gr_interleaved_short_to_complex_, 0, file_sink_, 0); } else { DLOG(INFO) << "Nothing to connect internally"; } } void IshortToComplex::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(gr_interleaved_short_to_complex_, 0, file_sink_, 0); } } gr::basic_block_sptr IshortToComplex::get_left_block() { return gr_interleaved_short_to_complex_; } gr::basic_block_sptr IshortToComplex::get_right_block() { return gr_interleaved_short_to_complex_; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/byte_to_short.h0000644000175000017500000000510712576764164026060 0ustar carlescarles/*! * \file byte_to_short.h * \brief Adapts an 8-bits sample stream (IF) to a short int stream (IF) * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_BYTE_TO_SHORT_H_ #define GNSS_SDR_BYTE_TO_SHORT_H_ #include #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief Adapts an 8-bits sample stream (IF) to a short int stream (IF) * */ class ByteToShort: public GNSSBlockInterface { public: ByteToShort(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~ByteToShort(); std::string role() { return role_; } //! Returns "Byte_To_Short" std::string implementation() { return "Byte_To_Short"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::blocks::char_to_short::sptr gr_char_to_short_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; std::string output_item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; }; #endif gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ishort_to_cshort.cc0000644000175000017500000000646012576764164026731 0ustar carlescarles/*! * \file ishort_to_cshort.cc * \brief Adapts an I/Q interleaved short integer (16 bits) sample stream * to a gr_complex (float) stream * \author Carles Fernandez-Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "ishort_to_cshort.h" #include #include #include "configuration_interface.h" using google::LogMessage; IshortToCshort::IshortToCshort(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_input_item_type = "short"; std::string default_output_item_type = "cshort"; std::string default_dump_filename = "../data/input_filter.dat"; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); size_t item_size = sizeof(lv_16sc_t); interleaved_short_to_complex_short_ = make_interleaved_short_to_complex_short(); DLOG(INFO) << "data_type_adapter_(" << interleaved_short_to_complex_short_->unique_id() << ")"; if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } IshortToCshort::~IshortToCshort() {} void IshortToCshort::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(interleaved_short_to_complex_short_, 0, file_sink_, 0); } else { DLOG(INFO) << "Nothing to connect internally"; } } void IshortToCshort::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(interleaved_short_to_complex_short_, 0, file_sink_, 0); } } gr::basic_block_sptr IshortToCshort::get_left_block() { return interleaved_short_to_complex_short_; } gr::basic_block_sptr IshortToCshort::get_right_block() { return interleaved_short_to_complex_short_; } gnss-sdr-0.0.6/src/algorithms/data_type_adapter/adapters/ibyte_to_cbyte.h0000644000175000017500000000525712576764164026206 0ustar carlescarles/*! * \file ibyte_to_cbyte.h * \brief \brief Adapts an I/Q interleaved byte (unsigned char) sample stream * into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_IBYTE_TO_CBYTE_H_ #define GNSS_SDR_IBYTE_TO_CBYTE_H_ #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" #include "interleaved_byte_to_complex_byte.h" class ConfigurationInterface; /*! * \briefAdapts an I/Q interleaved byte (unsigned char) sample stream * into a std::complex stream */ class IbyteToCbyte : public GNSSBlockInterface { public: IbyteToCbyte(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~IbyteToCbyte(); std::string role() { return role_; } //! Returns "Ibyte_To_Cbyte" std::string implementation() { return "Ibyte_To_Cbyte"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: interleaved_byte_to_complex_byte_sptr ibyte_to_cbyte_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; std::string output_item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; }; #endif gnss-sdr-0.0.6/src/algorithms/channel/0000755000175000017500000000000012576764164017153 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/channel/CMakeLists.txt0000644000175000017500000000141712576764164021716 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(libs)gnss-sdr-0.0.6/src/algorithms/channel/libs/0000755000175000017500000000000012576764164020104 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/channel/libs/CMakeLists.txt0000644000175000017500000000251712576764164022651 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(CHANNEL_FSM_SOURCES channel_fsm.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/channel/adapters ${Boost_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB CHANNEL_FSM_HEADERS "*.h") add_library(channel_fsm ${CHANNEL_FSM_SOURCES} ${CHANNEL_FSM_HEADERS}) source_group(Headers FILES ${CHANNEL_FSM_HEADERS}) add_dependencies(channel_fsm glog-${glog_RELEASE}) gnss-sdr-0.0.6/src/algorithms/channel/libs/channel_fsm.cc0000644000175000017500000001420712576764164022674 0ustar carlescarles/*! * \file channel_fsm.cc * \brief Implementation of a State Machine for channel using boost::statechart * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "channel_fsm.h" #include #include #include #include "control_message_factory.h" #include "channel.h" struct Ev_channel_start_acquisition: sc::event {}; struct Ev_channel_valid_acquisition: sc::event {}; struct Ev_channel_failed_acquisition_repeat: sc::event {}; struct Ev_channel_failed_acquisition_no_repeat: sc::event {}; struct Ev_channel_failed_tracking_standby: sc::event {}; //struct Ev_channel_failed_tracking_reacq: sc::event //{}; struct channel_idle_fsm_S0: public sc::state { public: // sc::transition(event, next state) typedef sc::transition reactions; channel_idle_fsm_S0(my_context ctx) : my_base(ctx) { //std::cout << "Enter Channel_Idle_S0 " << std::endl; } }; struct channel_acquiring_fsm_S1: public sc::state { public: typedef mpl::list, sc::transition, sc::transition > reactions; channel_acquiring_fsm_S1(my_context ctx) : my_base(ctx) { //std::cout << "Enter Channel_Acq_S1 " << std::endl; context ().start_acquisition(); } }; struct channel_tracking_fsm_S2: public sc::state { public: typedef mpl::list, sc::transition> reactions; channel_tracking_fsm_S2(my_context ctx) : my_base(ctx) { //std::cout << "Enter Channel_tracking_S2 " << std::endl; context ().start_tracking(); } }; struct channel_waiting_fsm_S3: public sc::state { public: typedef sc::transition reactions; channel_waiting_fsm_S3(my_context ctx) : my_base(ctx) { //std::cout << "Enter Channel_waiting_S3 " << std::endl; context ().request_satellite(); } // ~channel_waiting_fsm_S3(){} }; ChannelFsm::ChannelFsm() { acq_ = nullptr; trk_ = nullptr; channel_ = 0; initiate(); //start the FSM } ChannelFsm::ChannelFsm(AcquisitionInterface *acquisition) : acq_(acquisition) { trk_ = nullptr; channel_ = 0; initiate(); //start the FSM } void ChannelFsm::Event_start_acquisition() { this->process_event(Ev_channel_start_acquisition()); } void ChannelFsm::Event_valid_acquisition() { this->process_event(Ev_channel_valid_acquisition()); } void ChannelFsm::Event_failed_acquisition_repeat() { this->process_event(Ev_channel_failed_acquisition_repeat()); } void ChannelFsm::Event_failed_acquisition_no_repeat() { this->process_event(Ev_channel_failed_acquisition_no_repeat()); } // Something is wrong here, we are using a memory after it ts freed void ChannelFsm::Event_failed_tracking_standby() { this->process_event(Ev_channel_failed_tracking_standby()); } //void ChannelFsm::Event_failed_tracking_reacq() { // this->process_event(Ev_channel_failed_tracking_reacq()); //} void ChannelFsm::set_acquisition(AcquisitionInterface *acquisition) { acq_ = acquisition; } void ChannelFsm::set_tracking(TrackingInterface *tracking) { trk_ = tracking; } void ChannelFsm::set_queue(boost::shared_ptr queue) { queue_ = queue; } void ChannelFsm::set_channel(unsigned int channel) { channel_ = channel; } void ChannelFsm::start_acquisition() { acq_->reset(); } void ChannelFsm::start_tracking() { //LOG_AT_LEVEL(INFO) << "Channel " << channel_ //<< " passing prn code phase " << acq_->prn_code_phase(); //LOG_AT_LEVEL(INFO) << "Channel " << channel_ //<< " passing doppler freq shift " << acq_->doppler_freq_shift(); //LOG_AT_LEVEL(INFO) << "Channel " << channel_ //<< " passing acquisition sample stamp " //<< acq_->get_sample_stamp(); //trk_->set_prn_code_phase(acq_->prn_code_phase()); //trk_->set_doppler_freq_shift(acq_->doppler_freq_shift()); //trk_->set_acq_sample_stamp(acq_->get_sample_stamp()); trk_->start_tracking(); std::unique_ptr cmf(new ControlMessageFactory()); if (queue_ != gr::msg_queue::make()) { queue_->handle(cmf->GetQueueMessage(channel_, 1)); } } void ChannelFsm::request_satellite() { std::unique_ptr cmf(new ControlMessageFactory()); if (queue_ != gr::msg_queue::make()) { queue_->handle(cmf->GetQueueMessage(channel_, 0)); } } gnss-sdr-0.0.6/src/algorithms/channel/libs/channel_fsm.h0000644000175000017500000000560212576764164022535 0ustar carlescarles/*! * \file channel_fsm.h * \brief Interface of the State Machine for channel using boost::statechart * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CHANNEL_FSM_H #define GNSS_SDR_CHANNEL_FSM_H #include #include #include #include #include #include #include #include #include #include #include #include #include "acquisition_interface.h" #include "tracking_interface.h" #include "telemetry_decoder_interface.h" namespace sc = boost::statechart; namespace mpl = boost::mpl; struct channel_idle_fsm_S0; struct channel_acquiring_fsm_S1; struct channel_tracking_fsm_S2; struct channel_waiting_fsm_S3; /*! * \brief This class implements a State Machine for channel using boost::statechart */ class ChannelFsm: public sc::state_machine { public: ChannelFsm(); ChannelFsm(AcquisitionInterface *acquisition); void set_acquisition(AcquisitionInterface *acquisition); void set_tracking(TrackingInterface *tracking); void set_queue(boost::shared_ptr queue); void set_channel(unsigned int channel); void start_acquisition(); void start_tracking(); void request_satellite(); //FSM EVENTS void Event_start_acquisition(); void Event_valid_acquisition(); void Event_failed_acquisition_repeat(); void Event_failed_acquisition_no_repeat(); //void Event_gps_failed_tracking_reacq(); void Event_failed_tracking_standby(); private: AcquisitionInterface *acq_; TrackingInterface *trk_; boost::shared_ptr queue_; unsigned int channel_; }; #endif /*GNSS_SDR_CHANNEL_FSM_H*/ gnss-sdr-0.0.6/src/algorithms/channel/adapters/0000755000175000017500000000000012576764164020756 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/channel/adapters/channel.h0000644000175000017500000000756112576764164022550 0ustar carlescarles/*! * \file channel.h * \brief Interface of a GNSS channel. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2011. luis(at)epsilon-formacion.com * * It holds blocks for acquisition, tracking, * navigation data extraction and pseudorange calculation. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CHANNEL_H_ #define GNSS_SDR_CHANNEL_H_ #include #include #include "channel_interface.h" #include "channel_fsm.h" #include "control_message_factory.h" #include "concurrent_queue.h" #include "gnss_signal.h" #include "gnss_synchro.h" class ConfigurationInterface; class AcquisitionInterface; class TrackingInterface; class TelemetryDecoderInterface; /*! * \brief This class represents a GNSS channel. It wraps an AcquisitionInterface, * a Tracking Interface and a TelemetryDecoderInterface, and handles * their interaction through a Finite State Machine * */ class Channel: public ChannelInterface { public: //! Constructor Channel(ConfigurationInterface *configuration, unsigned int channel, GNSSBlockInterface *pass_through, AcquisitionInterface *acq, TrackingInterface *trk, TelemetryDecoderInterface *nav, std::string role, std::string implementation, boost::shared_ptr queue); //! Virtual destructor virtual ~Channel(); void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string role(){ return role_; } //! Returns "Channel" std::string implementation(){ return implementation_; } size_t item_size(){ return 0; } Gnss_Signal get_signal() const { return gnss_signal_; } AcquisitionInterface* acquisition(){ return acq_; } TrackingInterface* tracking(){ return trk_; } TelemetryDecoderInterface* telemetry(){ return nav_; } void start_acquisition(); //!< Start the State Machine void set_signal(const Gnss_Signal& gnss_signal_); //!< Sets the channel GNSS signal void start(); //!< Start the thread void standby(); /*! * \brief Set stop_ to true and blocks the calling thread until * the thread of the constructor has completed */ void stop(); private: GNSSBlockInterface *pass_through_; AcquisitionInterface *acq_; TrackingInterface *trk_; TelemetryDecoderInterface *nav_; std::string role_; std::string implementation_; unsigned int channel_; Gnss_Synchro gnss_synchro_; Gnss_Signal gnss_signal_; bool connected_; bool stop_; int message_; bool repeat_; ChannelFsm channel_fsm_; boost::shared_ptr queue_; concurrent_queue channel_internal_queue_; boost::thread ch_thread_; void run(); void process_channel_messages(); }; #endif /*GNSS_SDR_CHANNEL_H_*/ gnss-sdr-0.0.6/src/algorithms/channel/adapters/CMakeLists.txt0000644000175000017500000000276512576764164023530 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(CHANNEL_ADAPTER_SOURCES channel.cc) if(Boost_VERSION LESS 105000) add_definitions(-DOLD_BOOST=1) endif(Boost_VERSION LESS 105000) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/channel/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB CHANNEL_ADAPTER_HEADERS "*.h") add_library(channel_adapters ${CHANNEL_ADAPTER_SOURCES} ${CHANNEL_ADAPTER_HEADERS}) source_group(Headers FILES ${CHANNEL_ADAPTER_HEADERS}) target_link_libraries(channel_adapters channel_fsm ${GNURADIO_RUNTIME_LIBRARIES} ${Boost_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/channel/adapters/channel.cc0000644000175000017500000002156612576764164022707 0ustar carlescarles/*! * \file channel.cc * \brief Implementation of a GPS_L1_CA_Channel with a Finite State Machine * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2011. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "channel.h" #include #include #include #include #include #include #include #include #include #include #include "acquisition_interface.h" #include "tracking_interface.h" #include "telemetry_decoder_interface.h" #include "configuration_interface.h" #include "gnss_flowgraph.h" using google::LogMessage; // Constructor Channel::Channel(ConfigurationInterface *configuration, unsigned int channel, GNSSBlockInterface *pass_through, AcquisitionInterface *acq, TrackingInterface *trk, TelemetryDecoderInterface *nav, std::string role, std::string implementation, boost::shared_ptr queue) : pass_through_(pass_through), acq_(acq), trk_(trk), nav_(nav), role_(role), implementation_(implementation), channel_(channel), queue_(queue) { stop_ = false; acq_->set_channel(channel_); trk_->set_channel(channel_); nav_->set_channel(channel_); gnss_synchro_.Channel_ID = channel_; acq_->set_gnss_synchro(&gnss_synchro_); trk_->set_gnss_synchro(&gnss_synchro_); // IMPORTANT: Do not change the order between set_doppler_max, set_doppler_step and set_threshold unsigned int doppler_max = configuration->property("Acquisition_" + implementation_ + boost::lexical_cast(channel_) + ".doppler_max", 0); if(doppler_max == 0) doppler_max = configuration->property("Acquisition_" + implementation_+ ".doppler_max", 0); DLOG(INFO) << "Channel "<< channel_ << " Doppler_max = " << doppler_max; acq_->set_doppler_max(doppler_max); unsigned int doppler_step = configuration->property("Acquisition_" + implementation_ + boost::lexical_cast(channel_) + ".doppler_step" ,0); if(doppler_step == 0) doppler_step = configuration->property("Acquisition_" + implementation_+".doppler_step", 500); DLOG(INFO) << "Channel "<< channel_ << " Doppler_step = " << doppler_step; acq_->set_doppler_step(doppler_step); float threshold = configuration->property("Acquisition_" + implementation_ + boost::lexical_cast(channel_) + ".threshold", 0.0); if(threshold == 0.0) threshold = configuration->property("Acquisition_" + implementation_ + ".threshold", 0.0); acq_->set_threshold(threshold); acq_->init(); repeat_ = configuration->property("Acquisition_" + implementation_ + boost::lexical_cast(channel_) + ".repeat_satellite", false); DLOG(INFO) << "Channel " << channel_ << " satellite repeat = " << repeat_; acq_->set_channel_queue(&channel_internal_queue_); trk_->set_channel_queue(&channel_internal_queue_); channel_fsm_.set_acquisition(acq_); channel_fsm_.set_tracking(trk_); channel_fsm_.set_channel(channel_); channel_fsm_.set_queue(queue_); connected_ = false; message_ = 0; gnss_signal_ = Gnss_Signal(); } // Destructor Channel::~Channel() { delete acq_; delete trk_; delete nav_; delete pass_through_; } void Channel::connect(gr::top_block_sptr top_block) { if (connected_) { LOG(WARNING) << "channel already connected internally"; return; } pass_through_->connect(top_block); acq_->connect(top_block); trk_->connect(top_block); nav_->connect(top_block); top_block->connect(pass_through_->get_right_block(), 0, acq_->get_left_block(), 0); DLOG(INFO) << "pass_through_ -> acquisition"; top_block->connect(pass_through_->get_right_block(), 0, trk_->get_left_block(), 0); DLOG(INFO) << "pass_through_ -> tracking"; top_block->connect(trk_->get_right_block(), 0, nav_->get_left_block(), 0); DLOG(INFO) << "tracking -> telemetry_decoder"; connected_ = true; } void Channel::disconnect(gr::top_block_sptr top_block) { if (!connected_) { LOG(WARNING) << "Channel already disconnected internally"; return; } top_block->disconnect(pass_through_->get_right_block(), 0, acq_->get_left_block(), 0); top_block->disconnect(pass_through_->get_right_block(), 0, trk_->get_left_block(), 0); top_block->disconnect(trk_->get_right_block(), 0, nav_->get_left_block(), 0); pass_through_->disconnect(top_block); acq_->disconnect(top_block); trk_->disconnect(top_block); nav_->disconnect(top_block); connected_ = false; } gr::basic_block_sptr Channel::get_left_block() { return pass_through_->get_left_block(); } gr::basic_block_sptr Channel::get_right_block() { return nav_->get_right_block(); } void Channel::set_signal(const Gnss_Signal& gnss_signal) { gnss_signal_ = gnss_signal; std::string str_aux = gnss_signal_.get_signal_str(); const char * str = str_aux.c_str(); // get a C style null terminated string std::memcpy((void*)gnss_synchro_.Signal, str, 3); // copy string into synchro char array: 2 char + null gnss_synchro_.Signal[2] = 0; // make sure that string length is only two characters gnss_synchro_.PRN = gnss_signal_.get_satellite().get_PRN(); gnss_synchro_.System = gnss_signal_.get_satellite().get_system_short().c_str()[0]; acq_->set_local_code(); nav_->set_satellite(gnss_signal_.get_satellite()); } void Channel::start_acquisition() { channel_fsm_.Event_start_acquisition(); } void Channel::start() { ch_thread_ = boost::thread(&Channel::run, this); } void Channel::run() { while (!stop_) { channel_internal_queue_.wait_and_pop(message_); process_channel_messages(); } } void Channel::standby() { channel_fsm_.Event_failed_tracking_standby(); } /* * Set stop_ to true and blocks the calling thread until * the thread of the constructor has completed */ void Channel::stop() { channel_internal_queue_.push(0); //message to stop channel stop_ = true; /* When the boost::thread object that represents a thread of execution * is destroyed the thread becomes detached. Once a thread is detached, * it will continue executing until the invocation of the function or * callable object supplied on construction has completed, * or the program is terminated. In order to wait for a thread of * execution to finish, the join() or timed_join() member functions of * the boost::thread object must be used. join() will block the calling * thread until the thread represented by the boost::thread object * has completed. * NOTE: timed_join() is deprecated and only present up to Boost 1.56 * try_join_until() was introduced in Boost 1.50 */ #ifdef OLD_BOOST ch_thread_.timed_join(boost::posix_time::seconds(1)); #endif #ifndef OLD_BOOST ch_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); #endif } void Channel::process_channel_messages() { switch (message_) { case 0: DLOG(INFO) << "Stop channel " << channel_; break; case 1: DLOG(INFO) << "Channel " << channel_ << " ACQ SUCCESS satellite " << gnss_synchro_.System << " " << gnss_synchro_.PRN; channel_fsm_.Event_valid_acquisition(); break; case 2: DLOG(INFO) << "Channel " << channel_ << " ACQ FAILED satellite " << gnss_synchro_.System << " " << gnss_synchro_.PRN; if (repeat_ == true) { channel_fsm_.Event_failed_acquisition_repeat(); } else { channel_fsm_.Event_failed_acquisition_no_repeat(); } break; default: LOG(WARNING) << "Default case, invalid message."; break; } } gnss-sdr-0.0.6/src/algorithms/input_filter/0000755000175000017500000000000012576764164020247 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/input_filter/gnuradio_blocks/0000755000175000017500000000000012576764164023414 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000236512576764164026162 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(INPUT_FILTER_GR_BLOCKS_SOURCES beamformer.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_BLOCKS_INCLUDE_DIRS} ) file(GLOB INPUT_FILTER_GR_BLOCKS_HEADERS "*.h") add_library(input_filter_gr_blocks ${INPUT_FILTER_GR_BLOCKS_SOURCES} ${INPUT_FILTER_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS}) target_link_libraries(input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/input_filter/gnuradio_blocks/beamformer.h0000644000175000017500000000351612576764164025711 0ustar carlescarles/*! * \file beamformer.h * * \brief Simple spatial filter using RAW array input and beamforming coefficients * \author Javier Arribas jarribas (at) cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_BEAMFORMER_H #define GNSS_SDR_BEAMFORMER_H #include class beamformer; typedef boost::shared_ptr beamformer_sptr; beamformer_sptr make_beamformer(); /*! * \brief This class implements a real-time software-defined spatial filter using the CTTC GNSS experimental antenna array input and a set of dynamically reloadable weights */ class beamformer: public gr::sync_block { private: friend beamformer_sptr make_beamformer_sptr(); gr_complex* weight_vector; public: beamformer(); ~beamformer(); int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/input_filter/gnuradio_blocks/beamformer.cc0000644000175000017500000000550012576764164026042 0ustar carlescarles/*! * \file beamformer.cc * * \brief Unpacks byte samples to NSR 2 bits samples * \author Javier Arribas jarribas (at) cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "beamformer.h" #include #include #include #define GNSS_SDR_BEAMFORMER_CHANNELS 8 beamformer_sptr make_beamformer() { return beamformer_sptr(new beamformer()); } beamformer::beamformer() : gr::sync_block("beamformer", gr::io_signature::make(GNSS_SDR_BEAMFORMER_CHANNELS, GNSS_SDR_BEAMFORMER_CHANNELS,sizeof(gr_complex)), gr::io_signature::make(1, 1,sizeof(gr_complex))) { //initialize weight vector if (posix_memalign((void**)&weight_vector, 16, GNSS_SDR_BEAMFORMER_CHANNELS * sizeof(gr_complex)) == 0){}; for (int i=0;i. # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks)gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/0000755000175000017500000000000012576764164022052 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/input_filter/adapters/fir_filter.h0000644000175000017500000001001212576764164024342 0ustar carlescarles/*! * \file fir_filter.h * \brief Adapts a gnuradio gr_fir_filter designed with pm_remez * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_FIR_FILTER_H_ #define GNSS_SDR_FIR_FILTER_H_ #include #include #include #include #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" #include "complex_byte_to_float_x2.h" #include "byte_x2_to_complex_byte.h" #include "short_x2_to_cshort.h" #include "cshort_to_float_x2.h" class ConfigurationInterface; /*! * \brief This class adapts a GNU Radio gr_fir_filter designed with pm_remez * * See Parks-McClellan FIR filter design, http://en.wikipedia.org/wiki/Parks-McClellan_filter_design_algorithm * Calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response * given a set of band edges, the desired response on those bands, and the weight given * to the error in those bands. */ class FirFilter: public GNSSBlockInterface { public: //! Constructor FirFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); //! Destructor virtual ~FirFilter(); std::string role() { return role_; } //! Returns "Fir_Filter" std::string implementation() { return "Fir_Filter"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::filter::fir_filter_ccf::sptr fir_filter_ccf_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; std::string output_item_type_; std::string taps_item_type_; std::vector taps_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; void init(); complex_byte_to_float_x2_sptr cbyte_to_float_x2_; gr::filter::fir_filter_fff::sptr fir_filter_fff_1_; gr::filter::fir_filter_fff::sptr fir_filter_fff_2_; gr::blocks::float_to_char::sptr float_to_char_1_; gr::blocks::float_to_char::sptr float_to_char_2_; byte_x2_to_complex_byte_sptr char_x2_cbyte_; gr::blocks::float_to_complex::sptr float_to_complex_; cshort_to_float_x2_sptr cshort_to_float_x2_; gr::blocks::float_to_short::sptr float_to_short_1_; gr::blocks::float_to_short::sptr float_to_short_2_; short_x2_to_cshort_sptr short_x2_to_cshort_; }; #endif gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/beamformer_filter.h0000644000175000017500000000463412576764164025716 0ustar carlescarles/*! * \file beamformer_filter.h * \brief Interface of an adapter of a digital beamformer * \author Javier Arribas jarribas (at) cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_BEAMFORMER_FILTER_H_ #define GNSS_SDR_BEAMFORMER_FILTER_H_ #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief Interface of an adapter of a direct resampler conditioner block * to a SignalConditionerInterface */ class BeamformerFilter: public GNSSBlockInterface { public: BeamformerFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream); virtual ~BeamformerFilter(); std::string role() { return role_; } //! returns "Direct_Resampler" std::string implementation() { return "Beamformer_Filter"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; std::string item_type_; size_t item_size_; unsigned long long samples_; bool dump_; std::string dump_filename_; gr::block_sptr beamformer_; gr::block_sptr file_sink_; }; #endif /*GNSS_SDR_BEAMFORMER_FILTER_H_*/ gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/CMakeLists.txt0000644000175000017500000000322312576764164024612 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(INPUT_FILTER_ADAPTER_SOURCES fir_filter.cc freq_xlating_fir_filter.cc beamformer_filter.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ) file(GLOB INPUT_FILTER_ADAPTER_HEADERS "*.h") add_library(input_filter_adapters ${INPUT_FILTER_ADAPTER_SOURCES} ${INPUT_FILTER_ADAPTER_HEADERS}) source_group(Headers FILES ${INPUT_FILTER_ADAPTER_HEADERS}) add_dependencies(input_filter_adapters glog-${glog_RELEASE} gnss_sp_libs) target_link_libraries(input_filter_adapters input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} gnss_sp_libs) gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.h0000644000175000017500000001045412576764164027117 0ustar carlescarles/*! * \file freq_xlating_fir_filter.h * \brief Adapts a gnuradio gr_freq_xlating_fir_filter designed with gr_remez * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_FREQ_XLATING_FIR_FILTER_H_ #define GNSS_SDR_FREQ_XLATING_FIR_FILTER_H_ #include #include #include #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "gnss_block_interface.h" #include "short_x2_to_cshort.h" #include "complex_float_to_complex_byte.h" class ConfigurationInterface; /*! * \brief This class adapts a gnuradio gr_freq_xlating_fir_filter designed with pm_remez * * Construct a FIR filter with the given taps and a composite frequency * translation that shifts intermediate_freq_ down to zero Hz. The frequency * translation logically comes before the filtering operation. * * See Parks-McClellan FIR filter design, http://en.wikipedia.org/wiki/Parks-McClellan_filter_design_algorithm * Calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response * given a set of band edges, the desired response on those bands, and the weight given * to the error in those bands. */ class FreqXlatingFirFilter: public GNSSBlockInterface { public: FreqXlatingFirFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~FreqXlatingFirFilter(); std::string role() { return role_; } //! Returns "Freq_Xlating_Fir_Filter" std::string implementation() { return "Freq_Xlating_Fir_Filter"; } size_t item_size() { return 0; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::filter::freq_xlating_fir_filter_ccf::sptr freq_xlating_fir_filter_ccf_; gr::filter::freq_xlating_fir_filter_fcf::sptr freq_xlating_fir_filter_fcf_; gr::filter::freq_xlating_fir_filter_scf::sptr freq_xlating_fir_filter_scf_; ConfigurationInterface* config_; bool dump_; std::string dump_filename_; std::string input_item_type_; size_t input_size_; std::string output_item_type_; std::string taps_item_type_; std::vector taps_; double intermediate_freq_; double sampling_freq_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; gr::blocks::file_sink::sptr file_sink_; gr::blocks::complex_to_float::sptr complex_to_float_; gr::blocks::char_to_short::sptr gr_char_to_short_; gr::blocks::float_to_short::sptr float_to_short_1_; gr::blocks::float_to_short::sptr float_to_short_2_; short_x2_to_cshort_sptr short_x2_to_cshort_; complex_float_to_complex_byte_sptr complex_to_complex_byte_; void init(); }; #endif // GNSS_SDR_FREQ_XLATING_FIR_FILTER_H_ gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/fir_filter.cc0000644000175000017500000004472312576764164024520 0ustar carlescarles/*! * \file fir_filter.cc * \brief Adapts a gnuradio gr_fir_filter designed with gr_remez * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * Carles Fernandez-Prades, 2015 cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "fir_filter.h" #include #include #include #include #include "configuration_interface.h" using google::LogMessage; FirFilter::FirFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { size_t item_size; (*this).init(); if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); fir_filter_ccf_ = gr::filter::fir_filter_ccf::make(1, taps_); DLOG(INFO) << "input_filter(" << fir_filter_ccf_->unique_id() << ")"; if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("cshort") == 0)) { item_size = sizeof(lv_16sc_t); cshort_to_float_x2_ = make_cshort_to_float_x2(); fir_filter_fff_1_ = gr::filter::fir_filter_fff::make(1, taps_); fir_filter_fff_2_ = gr::filter::fir_filter_fff::make(1, taps_); DLOG(INFO) << "I input_filter(" << fir_filter_fff_1_->unique_id() << ")"; DLOG(INFO) << "Q input_filter(" << fir_filter_fff_2_->unique_id() << ")"; float_to_short_1_ = gr::blocks::float_to_short::make(); float_to_short_2_ = gr::blocks::float_to_short::make(); short_x2_to_cshort_ = make_short_x2_to_cshort(); if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); cshort_to_float_x2_ = make_cshort_to_float_x2(); fir_filter_fff_1_ = gr::filter::fir_filter_fff::make(1, taps_); fir_filter_fff_2_ = gr::filter::fir_filter_fff::make(1, taps_); DLOG(INFO) << "I input_filter(" << fir_filter_fff_1_->unique_id() << ")"; DLOG(INFO) << "Q input_filter(" << fir_filter_fff_2_->unique_id() << ")"; float_to_complex_ = gr::blocks::float_to_complex::make(); if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); fir_filter_fff_1_ = gr::filter::fir_filter_fff::make(1, taps_); fir_filter_fff_2_ = gr::filter::fir_filter_fff::make(1, taps_); DLOG(INFO) << "I input_filter(" << fir_filter_fff_1_->unique_id() << ")"; DLOG(INFO) << "Q input_filter(" << fir_filter_fff_2_->unique_id() << ")"; float_to_complex_ = gr::blocks::float_to_complex::make(); if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("cbyte") == 0)) { item_size = sizeof(lv_8sc_t); cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); fir_filter_fff_1_ = gr::filter::fir_filter_fff::make(1, taps_); fir_filter_fff_2_ = gr::filter::fir_filter_fff::make(1, taps_); DLOG(INFO) << "I input_filter(" << fir_filter_fff_1_->unique_id() << ")"; DLOG(INFO) << "Q input_filter(" << fir_filter_fff_2_->unique_id() << ")"; float_to_char_1_ = gr::blocks::float_to_char::make(); float_to_char_2_ = gr::blocks::float_to_char::make(); char_x2_cbyte_ = make_byte_x2_to_complex_byte(); if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } else { LOG(ERROR) << " Unknown item type conversion"; } } FirFilter::~FirFilter() {} void FirFilter::connect(gr::top_block_sptr top_block) { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->connect(fir_filter_ccf_, 0, file_sink_, 0); } else { DLOG(INFO) << "Nothing to connect internally"; } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("cshort") == 0)) { top_block->connect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->connect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->connect(fir_filter_fff_1_, 0, float_to_short_1_, 0); top_block->connect(fir_filter_fff_2_, 0, float_to_short_2_, 0); top_block->connect(float_to_short_1_, 0, short_x2_to_cshort_, 0); top_block->connect(float_to_short_2_, 0, short_x2_to_cshort_, 1); if (dump_) { top_block->connect(short_x2_to_cshort_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { top_block->connect(cbyte_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->connect(cbyte_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->connect(fir_filter_fff_1_, 0, float_to_complex_, 0); top_block->connect(fir_filter_fff_2_, 0, float_to_complex_, 1); if (dump_) { top_block->connect(float_to_complex_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("cbyte") == 0)) { top_block->connect(cbyte_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->connect(cbyte_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->connect(fir_filter_fff_1_, 0, float_to_char_1_, 0); top_block->connect(fir_filter_fff_2_, 0, float_to_char_2_, 0); top_block->connect(float_to_char_1_, 0, char_x2_cbyte_, 0); top_block->connect(float_to_char_2_, 0, char_x2_cbyte_, 1); if (dump_) { top_block->connect(char_x2_cbyte_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("gr_complex") == 0)) { top_block->connect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->connect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->connect(fir_filter_fff_1_, 0, float_to_complex_, 0); top_block->connect(fir_filter_fff_2_, 0, float_to_complex_, 1); if (dump_) { top_block->connect(float_to_complex_, 0, file_sink_, 0); } } else { LOG(ERROR) << " Unknown item type conversion"; } } void FirFilter::disconnect(gr::top_block_sptr top_block) { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->disconnect(fir_filter_ccf_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { top_block->disconnect(fir_filter_fff_2_, 0, float_to_complex_, 1); top_block->disconnect(fir_filter_fff_1_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->disconnect(cbyte_to_float_x2_, 0, fir_filter_fff_1_, 0); if (dump_) { top_block->disconnect(float_to_complex_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("cshort") == 0)) { top_block->disconnect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->disconnect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->disconnect(fir_filter_fff_1_, 0, float_to_short_1_, 0); top_block->disconnect(fir_filter_fff_2_, 0, float_to_short_2_, 0); top_block->disconnect(float_to_short_1_, 0, short_x2_to_cshort_, 0); top_block->disconnect(float_to_short_2_, 0, short_x2_to_cshort_, 1); if (dump_) { top_block->disconnect(short_x2_to_cshort_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("cbyte") == 0)) { top_block->disconnect(float_to_char_2_, 0, char_x2_cbyte_, 1); top_block->disconnect(float_to_char_1_, 0, char_x2_cbyte_, 0); top_block->disconnect(fir_filter_fff_2_, 0, float_to_char_2_, 0); top_block->disconnect(fir_filter_fff_1_, 0, float_to_char_1_, 0); top_block->disconnect(cbyte_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, fir_filter_fff_2_, 0); if (dump_) { top_block->disconnect(char_x2_cbyte_, 0, file_sink_, 0); } } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("gr_complex") == 0)) { top_block->disconnect(cshort_to_float_x2_, 0, fir_filter_fff_1_, 0); top_block->disconnect(cshort_to_float_x2_, 1, fir_filter_fff_2_, 0); top_block->disconnect(fir_filter_fff_1_, 0, float_to_complex_, 0); top_block->disconnect(fir_filter_fff_2_, 0, float_to_complex_, 1); if (dump_) { top_block->disconnect(float_to_complex_, 0, file_sink_, 0); } } else { LOG(ERROR) << " Unknown item type conversion"; } } gr::basic_block_sptr FirFilter::get_left_block() { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return fir_filter_ccf_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("cshort") == 0)) { return cshort_to_float_x2_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return cbyte_to_float_x2_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("cbyte") == 0)) { return cbyte_to_float_x2_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return cshort_to_float_x2_; } else { return nullptr; LOG(ERROR) << " Unknown item type conversion"; } } gr::basic_block_sptr FirFilter::get_right_block() { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return fir_filter_ccf_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("cshort") == 0)) { return short_x2_to_cshort_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return float_to_complex_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cbyte") == 0) && (output_item_type_.compare("cbyte") == 0)) { return char_x2_cbyte_; } else if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("cshort") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return float_to_complex_; } else { return nullptr; LOG(ERROR) << " unknown input filter item type"; } } void FirFilter::init() { std::string default_input_item_type = "gr_complex"; std::string default_output_item_type = "gr_complex"; std::string default_taps_item_type = "float"; std::string default_dump_filename = "../data/input_filter.dat"; int default_number_of_taps = 6; unsigned int default_number_of_bands = 2; std::vector default_bands = { 0.0, 0.4, 0.6, 1.0 }; std::vector default_ampl = { 1.0, 1.0, 0.0, 0.0 }; std::vector default_error_w = { 1.0, 1.0 }; std::string default_filter_type = "bandpass"; int default_grid_density = 16; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); output_item_type_ = config_->property(role_ + ".output_item_type", default_output_item_type); taps_item_type_ = config_->property(role_ + ".taps_item_type", default_taps_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); int number_of_taps = config_->property(role_ + ".number_of_taps", default_number_of_taps); unsigned int number_of_bands = config_->property(role_ + ".number_of_bands", default_number_of_bands); std::vector bands; std::vector ampl; std::vector error_w; std::string option; double option_value; for (unsigned int i = 0; i < number_of_bands; i++) { option = ".band" + boost::lexical_cast(i + 1) + "_begin"; option_value = config_->property(role_ + option, default_bands[i]); bands.push_back(option_value); option = ".band" + boost::lexical_cast(i + 1) + "_end"; option_value = config_->property(role_ + option, default_bands[i]); bands.push_back(option_value); option = ".ampl" + boost::lexical_cast(i + 1) + "_begin"; option_value = config_->property(role_ + option, default_bands[i]); ampl.push_back(option_value); option = ".ampl" + boost::lexical_cast(i + 1) + "_end"; option_value = config_->property(role_ + option, default_bands[i]); ampl.push_back(option_value); option = ".band" + boost::lexical_cast(i + 1) + "_error"; option_value = config_->property(role_ + option, default_bands[i]); error_w.push_back(option_value); } std::string filter_type = config_->property(role_ + ".filter_type", default_filter_type); int grid_density = config_->property(role_ + ".grid_density", default_grid_density); // pm_remez implements the Parks-McClellan FIR filter design. // It calculates the optimal (in the Chebyshev/minimax sense) FIR filter // impulse response given a set of band edges, the desired response on // those bands, and the weight given to the error in those bands. std::vector taps_d = gr::filter::pm_remez(number_of_taps - 1, bands, ampl, error_w, filter_type, grid_density); taps_.reserve(taps_d.size()); for (std::vector::iterator it = taps_d.begin(); it != taps_d.end(); it++) { taps_.push_back(float(*it)); } } gnss-sdr-0.0.6/src/algorithms/input_filter/adapters/freq_xlating_fir_filter.cc0000644000175000017500000004355412576764164027264 0ustar carlescarles/*! * \file freq_xlating_fir_filter.cc * \brief Adapts a gnuradio gr_freq_xlating_fir_filter designed with gr_remez * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "freq_xlating_fir_filter.h" #include #include #include #include #include #include "configuration_interface.h" using google::LogMessage; FreqXlatingFirFilter::FreqXlatingFirFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : config_(configuration), role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { size_t item_size; (*this).init(); int decimation_factor; int default_decimation_factor = 1; decimation_factor = config_->property(role_ + ".decimation_factor", default_decimation_factor); if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); //output input_size_ = sizeof(gr_complex); //input freq_xlating_fir_filter_ccf_ = gr::filter::freq_xlating_fir_filter_ccf::make(decimation_factor, taps_, intermediate_freq_, sampling_freq_); DLOG(INFO) << "input_filter(" << freq_xlating_fir_filter_ccf_->unique_id() << ")"; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("float") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); input_size_ = sizeof(float); //input freq_xlating_fir_filter_fcf_ = gr::filter::freq_xlating_fir_filter_fcf::make(decimation_factor, taps_, intermediate_freq_, sampling_freq_); DLOG(INFO) << "input_filter(" << freq_xlating_fir_filter_fcf_->unique_id() << ")"; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); input_size_ = sizeof(int16_t); //input freq_xlating_fir_filter_scf_ = gr::filter::freq_xlating_fir_filter_scf::make(decimation_factor, taps_, intermediate_freq_, sampling_freq_); DLOG(INFO) << "input_filter(" << freq_xlating_fir_filter_scf_->unique_id() << ")"; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("cshort") == 0)) { item_size = sizeof(lv_16sc_t); input_size_ = sizeof(int16_t); //input freq_xlating_fir_filter_scf_ = gr::filter::freq_xlating_fir_filter_scf::make(decimation_factor, taps_, intermediate_freq_, sampling_freq_); DLOG(INFO) << "input_filter(" << freq_xlating_fir_filter_scf_->unique_id() << ")"; complex_to_float_ = gr::blocks::complex_to_float::make(); float_to_short_1_ = gr::blocks::float_to_short::make(); float_to_short_2_ = gr::blocks::float_to_short::make(); short_x2_to_cshort_ = make_short_x2_to_cshort(); } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { item_size = sizeof(gr_complex); input_size_ = sizeof(int8_t); //input gr_char_to_short_ = gr::blocks::char_to_short::make(); freq_xlating_fir_filter_scf_ = gr::filter::freq_xlating_fir_filter_scf::make(decimation_factor, taps_, intermediate_freq_, sampling_freq_); DLOG(INFO) << "input_filter(" << freq_xlating_fir_filter_scf_->unique_id() << ")"; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("cbyte") == 0)) { item_size = sizeof(lv_8sc_t); input_size_ = sizeof(int8_t); //input gr_char_to_short_ = gr::blocks::char_to_short::make(); freq_xlating_fir_filter_scf_ = gr::filter::freq_xlating_fir_filter_scf::make(decimation_factor, taps_, intermediate_freq_, sampling_freq_); DLOG(INFO) << "input_filter(" << freq_xlating_fir_filter_scf_->unique_id() << ")"; complex_to_complex_byte_ = make_complex_float_to_complex_byte(); } else { LOG(ERROR) << " Unknown input filter input/output item type conversion"; item_size = sizeof(gr_complex); //avoids uninitialization input_size_ = sizeof(gr_complex); //avoids uninitialization } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; std::cout << "Dumping output into file " << dump_filename_ << std::endl; file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str()); } } FreqXlatingFirFilter::~FreqXlatingFirFilter() {} void FreqXlatingFirFilter::connect(gr::top_block_sptr top_block) { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->connect(freq_xlating_fir_filter_ccf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("float") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->connect(freq_xlating_fir_filter_fcf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->connect(freq_xlating_fir_filter_scf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("cshort") == 0)) { top_block->connect(freq_xlating_fir_filter_scf_, 0, complex_to_float_, 0); top_block->connect(complex_to_float_, 0, float_to_short_1_, 0); top_block->connect(complex_to_float_, 1, float_to_short_2_, 0); top_block->connect(float_to_short_1_, 0, short_x2_to_cshort_, 0); top_block->connect(float_to_short_2_, 0, short_x2_to_cshort_, 0); if (dump_) { top_block->connect(short_x2_to_cshort_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { top_block->connect(gr_char_to_short_, 0, freq_xlating_fir_filter_scf_, 0); if (dump_) { top_block->connect(freq_xlating_fir_filter_scf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("cbyte") == 0)) { top_block->connect(gr_char_to_short_, 0, freq_xlating_fir_filter_scf_, 0); top_block->connect(freq_xlating_fir_filter_scf_, 0, complex_to_complex_byte_, 0); if (dump_) { top_block->connect(complex_to_complex_byte_, 0, file_sink_, 0); } } else { LOG(ERROR) << " Unknown input filter input/output item type conversion"; } } void FreqXlatingFirFilter::disconnect(gr::top_block_sptr top_block) { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->disconnect(freq_xlating_fir_filter_ccf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("float") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->disconnect(freq_xlating_fir_filter_fcf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("gr_complex") == 0)) { if (dump_) { top_block->disconnect(freq_xlating_fir_filter_scf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("cshort") == 0)) { top_block->disconnect(freq_xlating_fir_filter_scf_, 0, complex_to_float_, 0); top_block->disconnect(complex_to_float_, 0, float_to_short_1_, 0); top_block->disconnect(complex_to_float_, 1, float_to_short_2_, 0); top_block->disconnect(float_to_short_1_, 0, short_x2_to_cshort_, 0); top_block->disconnect(float_to_short_2_, 0, short_x2_to_cshort_, 0); if (dump_) { top_block->disconnect(short_x2_to_cshort_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { top_block->disconnect(gr_char_to_short_, 0, freq_xlating_fir_filter_scf_, 0); if (dump_) { top_block->disconnect(freq_xlating_fir_filter_scf_, 0, file_sink_, 0); } } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("cbyte") == 0)) { top_block->disconnect(gr_char_to_short_, 0, freq_xlating_fir_filter_scf_, 0); top_block->disconnect(freq_xlating_fir_filter_scf_, 0, complex_to_complex_byte_, 0); if (dump_) { top_block->disconnect(complex_to_complex_byte_, 0, file_sink_, 0); } } else { LOG(ERROR) << " Unknown input filter input/output item type conversion"; } } gr::basic_block_sptr FreqXlatingFirFilter::get_left_block() { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_ccf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("float") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_fcf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_scf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("cshort") == 0)) { return freq_xlating_fir_filter_scf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return gr_char_to_short_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("cbyte") == 0)) { return gr_char_to_short_; } else { return nullptr; LOG(ERROR) << " Unknown input filter input/output item type conversion"; } } gr::basic_block_sptr FreqXlatingFirFilter::get_right_block() { if ((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("gr_complex") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_ccf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("float") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_fcf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_scf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("short") == 0) && (output_item_type_.compare("cshort") == 0)) { return short_x2_to_cshort_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("gr_complex") == 0)) { return freq_xlating_fir_filter_scf_; } else if((taps_item_type_.compare("float") == 0) && (input_item_type_.compare("byte") == 0) && (output_item_type_.compare("cbyte") == 0)) { return complex_to_complex_byte_; } else { return nullptr; LOG(ERROR) << " Unknown input filter input/output item type conversion"; } } void FreqXlatingFirFilter::init() { std::string default_input_item_type = "gr_complex"; std::string default_output_item_type = "gr_complex"; std::string default_taps_item_type = "float"; std::string default_dump_filename = "../data/input_filter.dat"; double default_intermediate_freq = 0; double default_sampling_freq = 4000000; int default_number_of_taps = 6; unsigned int default_number_of_bands = 2; std::vector default_bands = { 0.0, 0.4, 0.6, 1.0 }; std::vector default_ampl = { 1.0, 1.0, 0.0, 0.0 }; std::vector default_error_w = { 1.0, 1.0 }; std::string default_filter_type = "bandpass"; int default_grid_density = 16; DLOG(INFO) << "role " << role_; input_item_type_ = config_->property(role_ + ".input_item_type", default_input_item_type); output_item_type_ = config_->property(role_ + ".output_item_type", default_output_item_type); taps_item_type_ = config_->property(role_ + ".taps_item_type", default_taps_item_type); dump_ = config_->property(role_ + ".dump", false); dump_filename_ = config_->property(role_ + ".dump_filename", default_dump_filename); intermediate_freq_ = config_->property(role_ + ".IF", default_intermediate_freq); sampling_freq_ = config_->property(role_ + ".sampling_frequency", default_sampling_freq); int number_of_taps = config_->property(role_ + ".number_of_taps", default_number_of_taps); unsigned int number_of_bands = config_->property(role_ + ".number_of_bands", default_number_of_bands); std::vector bands; std::vector ampl; std::vector error_w; std::string option; double option_value; for (unsigned int i = 0; i < number_of_bands; i++) { option = ".band" + boost::lexical_cast(i + 1) + "_begin"; option_value = config_->property(role_ + option, default_bands[i]); bands.push_back(option_value); option = ".band" + boost::lexical_cast(i + 1) + "_end"; option_value = config_->property(role_ + option, default_bands[i]); bands.push_back(option_value); option = ".ampl" + boost::lexical_cast(i + 1) + "_begin"; option_value = config_->property(role_ + option, default_bands[i]); ampl.push_back(option_value); option = ".ampl" + boost::lexical_cast(i + 1) + "_end"; option_value = config_->property(role_ + option, default_bands[i]); ampl.push_back(option_value); option = ".band" + boost::lexical_cast(i + 1) + "_error"; option_value = config_->property(role_ + option, default_bands[i]); error_w.push_back(option_value); } std::string filter_type = config_->property(role_ + ".filter_type", default_filter_type); int grid_density = config_->property(role_ + ".grid_density", default_grid_density); std::vector taps_d = gr::filter::pm_remez(number_of_taps - 1, bands, ampl, error_w, filter_type, grid_density); taps_.reserve(taps_d.size()); for (std::vector::iterator it = taps_d.begin(); it != taps_d.end(); it++) { taps_.push_back(float(*it)); //std::cout<<"TAP="<. * * ------------------------------------------------------------------------- */ #include "beamformer_filter.h" #include #include #include "beamformer.h" #include "configuration_interface.h" using google::LogMessage; BeamformerFilter::BeamformerFilter( ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream) : role_(role), in_stream_(in_stream), out_stream_(out_stream) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/input_filter.dat"; item_type_ = configuration->property(role + ".item_type", default_item_type); dump_ = configuration->property(role + ".dump", false); DLOG(INFO) << "dump_ is " << dump_; dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); beamformer_ = make_beamformer(); DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "resampler(" << beamformer_->unique_id() << ")"; } else { LOG(WARNING) << item_type_ << " unrecognized item type for beamformer"; item_size_ = sizeof(gr_complex); } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } samples_ = 0; } BeamformerFilter::~BeamformerFilter() {} void BeamformerFilter::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(beamformer_, 0, file_sink_, 0); DLOG(INFO) << "connected beamformer output to file sink"; } else { DLOG(INFO) << "nothing to connect internally"; } } void BeamformerFilter::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(beamformer_, 0, file_sink_, 0); } } gr::basic_block_sptr BeamformerFilter::get_left_block() { return beamformer_; } gr::basic_block_sptr BeamformerFilter::get_right_block() { return beamformer_; } gnss-sdr-0.0.6/src/algorithms/signal_generator/0000755000175000017500000000000012576764164021066 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_generator/gnuradio_blocks/0000755000175000017500000000000012576764164024233 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_generator/gnuradio_blocks/signal_generator_c.h0000644000175000017500000001213212576764164030230 0ustar carlescarles/*! * \file signal_generator_c.h * \brief GNU Radio source block that generates synthesized GNSS signal. * \author Marc Molina, 2013. marc.molina.pena@gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SIGNAL_GENERATOR_C_H #define GNSS_SDR_SIGNAL_GENERATOR_C_H #include #include #include #include #include #include "gnss_signal.h" class signal_generator_c; /* * We use boost::shared_ptr's instead of raw pointers for all access * to gr_blocks (and many other data structures). The shared_ptr gets * us transparent reference counting, which greatly simplifies storage * management issues. * * See http://www.boost.org/libs/smart_ptr/smart_ptr.htm * * As a convention, the _sptr suffix indicates a boost::shared_ptr */ typedef boost::shared_ptr signal_generator_c_sptr; /*! * \brief Return a shared_ptr to a new instance of gen_source. * * To avoid accidental use of raw pointers, gen_source's * constructor is private. signal_make_generator_c is the public * interface for creating new instances. */ signal_generator_c_sptr signal_make_generator_c (std::vector signal1, std::vector system, const std::vector &PRN, const std::vector &CN0_dB, const std::vector &doppler_Hz, const std::vector &delay_chips,const std::vector &delay_sec, bool data_flag, bool noise_flag, unsigned int fs_in, unsigned int vector_length, float BW_BB); /*! * \brief This class generates synthesized GNSS signal. * \ingroup block * * \sa gen_source for a version that subclasses gr_block. */ class signal_generator_c : public gr::block { private: // The friend declaration allows gen_source to // access the private constructor. /* Create the signal_generator_c object*/ friend signal_generator_c_sptr signal_make_generator_c (std::vector signal1, std::vector system, const std::vector &PRN, const std::vector &CN0_dB, const std::vector &doppler_Hz, const std::vector &delay_chips,const std::vector &delay_sec, bool data_flag, bool noise_flag, unsigned int fs_in, unsigned int vector_length, float BW_BB); signal_generator_c (std::vector signal1, std::vector system, const std::vector &PRN, const std::vector &CN0_dB, const std::vector &doppler_Hz, const std::vector &delay_chips,const std::vector &delay_sec, bool data_flag, bool noise_flag, unsigned int fs_in, unsigned int vector_length, float BW_BB); void init(); void generate_codes(); std::vector signal_; std::vector system_; std::vector PRN_; std::vector CN0_dB_; std::vector doppler_Hz_; std::vector delay_chips_; std::vector delay_sec_; bool data_flag_; bool noise_flag_; unsigned int fs_in_; unsigned int num_sats_; unsigned int vector_length_; float BW_BB_; std::vector samples_per_code_; std::vector num_of_codes_per_vector_; std::vector data_bit_duration_ms_; std::vector ms_counter_; std::vector start_phase_rad_; std::vector current_data_bits_; std::vector current_data_bit_int_; std::vector data_modulation_; std::vector pilot_modulation_; boost::scoped_array sampled_code_data_; boost::scoped_array sampled_code_pilot_; gr::random* random_; gr_complex* complex_phase_; unsigned int work_counter_; public: ~signal_generator_c (); // public destructor // Where all the action really happens int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_SIGNAL_GENERATOR_C_H */ gnss-sdr-0.0.6/src/algorithms/signal_generator/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000315212576764164026774 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(SIGNAL_GENERATOR_BLOCK_SOURCES signal_generator_c.cc) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB SIGNAL_GENERATOR_BLOCK_HEADERS "*.h") add_library(signal_generator_blocks ${SIGNAL_GENERATOR_BLOCK_SOURCES} ${SIGNAL_GENERATOR_BLOCK_HEADERS}) source_group(Headers FILES ${SIGNAL_GENERATOR_BLOCK_HEADERS}) target_link_libraries(signal_generator_blocks gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_FFT_LIBRARIES} ${VOLK_LIBRARIES} ${ORC_LIBRARIES} ) gnss-sdr-0.0.6/src/algorithms/signal_generator/gnuradio_blocks/signal_generator_c.cc0000644000175000017500000003724312576764164030400 0ustar carlescarles/*! * \file signal_generator_c.cc * \brief GNU Radio source block that generates synthesized GNSS signal. * \author Marc Molina, 2013. marc.molina.pena@gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "signal_generator_c.h" #include #include #include #include #include #include "gps_sdr_signal_processing.h" #include "galileo_e1_signal_processing.h" #include "nco_lib.h" #include "galileo_e5_signal_processing.h" #include "Galileo_E5a.h" /* * Create a new instance of signal_generator_c and return * a boost shared_ptr. This is effectively the public constructor. */ signal_generator_c_sptr signal_make_generator_c (std::vector signal1, std::vector system, const std::vector &PRN, const std::vector &CN0_dB, const std::vector &doppler_Hz, const std::vector &delay_chips, const std::vector &delay_sec,bool data_flag, bool noise_flag, unsigned int fs_in, unsigned int vector_length, float BW_BB) { return gnuradio::get_initial_sptr(new signal_generator_c(signal1, system, PRN, CN0_dB, doppler_Hz, delay_chips,delay_sec, data_flag, noise_flag, fs_in, vector_length, BW_BB)); } /* * The private constructor */ signal_generator_c::signal_generator_c (std::vector signal1, std::vector system, const std::vector &PRN, const std::vector &CN0_dB, const std::vector &doppler_Hz, const std::vector &delay_chips,const std::vector &delay_sec ,bool data_flag, bool noise_flag, unsigned int fs_in, unsigned int vector_length, float BW_BB) : gr::block ("signal_gen_cc", gr::io_signature::make(0, 0, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(gr_complex) * vector_length)), signal_(signal1), system_(system), PRN_(PRN), CN0_dB_(CN0_dB), doppler_Hz_(doppler_Hz), delay_chips_(delay_chips), delay_sec_(delay_sec), data_flag_(data_flag), noise_flag_(noise_flag), fs_in_(fs_in), num_sats_(PRN.size()), vector_length_(vector_length), BW_BB_(BW_BB * static_cast(fs_in) / 2.0) { init(); generate_codes(); } void signal_generator_c::init() { work_counter_ = 0; complex_phase_ = static_cast(volk_malloc(vector_length_ * sizeof(gr_complex), volk_get_alignment())); // True if Galileo satellites are present bool galileo_signal = std::find(system_.begin(), system_.end(), "E") != system_.end(); for (unsigned int sat = 0; sat < num_sats_; sat++) { start_phase_rad_.push_back(0); current_data_bit_int_.push_back(1); current_data_bits_.push_back(gr_complex(1, 0)); ms_counter_.push_back(0); data_modulation_.push_back((Galileo_E5a_I_SECONDARY_CODE.at(0) == '0' ? 1 : -1)); pilot_modulation_.push_back((Galileo_E5a_Q_SECONDARY_CODE[PRN_[sat]].at(0) == '0' ? 1 : -1)); if (system_[sat] == "G") { samples_per_code_.push_back(round(static_cast(fs_in_) / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS))); num_of_codes_per_vector_.push_back(galileo_signal ? 4 * static_cast(Galileo_E1_C_SECONDARY_CODE_LENGTH) : 1); data_bit_duration_ms_.push_back(1e3 / GPS_CA_TELEMETRY_RATE_BITS_SECOND); } else if (system_[sat] == "E") { if (signal_[sat].at(0) == '5') { int codelen = static_cast(Galileo_E5a_CODE_LENGTH_CHIPS); samples_per_code_.push_back(round(static_cast(fs_in_) / (Galileo_E5a_CODE_CHIP_RATE_HZ / codelen))); num_of_codes_per_vector_.push_back(1); data_bit_duration_ms_.push_back(1e3/Galileo_E5a_SYMBOL_RATE_BPS); } else { samples_per_code_.push_back(round(static_cast(fs_in_) / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS))); num_of_codes_per_vector_.push_back(static_cast(Galileo_E1_C_SECONDARY_CODE_LENGTH)); data_bit_duration_ms_.push_back(1e3 / Galileo_E1_B_SYMBOL_RATE_BPS); } } } random_ = new gr::random(); } void signal_generator_c::generate_codes() { sampled_code_data_.reset(new gr_complex*[num_sats_]); sampled_code_pilot_.reset(new gr_complex*[num_sats_]); for (unsigned int sat = 0; sat < num_sats_; sat++) { sampled_code_data_[sat] = static_cast(std::malloc(vector_length_ * sizeof(gr_complex))); gr_complex code[64000]; //[samples_per_code_[sat]]; if (system_[sat] == "G") { // Generate one code-period of 1C signal gps_l1_ca_code_gen_complex_sampled(code, PRN_[sat], fs_in_, static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS) - delay_chips_[sat]); // Obtain the desired CN0 assuming that Pn = 1. if (noise_flag_) { for (unsigned int i = 0; i < samples_per_code_[sat]; i++) { code[i] *= sqrt(pow(10,CN0_dB_[sat] / 10) / BW_BB_); } } // Concatenate "num_of_codes_per_vector_" codes for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) { memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), code, sizeof(gr_complex) * samples_per_code_[sat]); } } else if (system_[sat] == "E") { if(signal_[sat].at(0) == '5') { char signal[3]; strcpy(signal, "5X"); galileo_e5_a_code_gen_complex_sampled(sampled_code_data_[sat] , signal, PRN_[sat], fs_in_, static_cast(Galileo_E5a_CODE_LENGTH_CHIPS) - delay_chips_[sat]); //noise if (noise_flag_) { for (unsigned int i = 0; i < vector_length_; i++) { sampled_code_data_[sat][i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); } } } else { // Generate one code-period of E1B signal bool cboc = true; char signal[3]; strcpy(signal, "1B"); galileo_e1_code_gen_complex_sampled(code, signal, cboc, PRN_[sat], fs_in_, static_cast(Galileo_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat]); // Obtain the desired CN0 assuming that Pn = 1. if (noise_flag_) { for (unsigned int i = 0; i < samples_per_code_[sat]; i++) { code[i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); } } // Concatenate "num_of_codes_per_vector_" codes for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++) { memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]), code, sizeof(gr_complex) * samples_per_code_[sat]); } // Generate E1C signal (25 code-periods, with secondary code) sampled_code_pilot_[sat] = static_cast(std::malloc(vector_length_ * sizeof(gr_complex))); strcpy(signal, "1C"); galileo_e1_code_gen_complex_sampled(sampled_code_pilot_[sat], signal, cboc, PRN_[sat], fs_in_, static_cast(Galileo_E1_B_CODE_LENGTH_CHIPS) - delay_chips_[sat], true); // Obtain the desired CN0 assuming that Pn = 1. if (noise_flag_) { for (unsigned int i = 0; i < vector_length_; i++) { sampled_code_pilot_[sat][i] *= sqrt(pow(10, CN0_dB_[sat] / 10) / BW_BB_ / 2); } } } } } } signal_generator_c::~signal_generator_c() { /* for (unsigned int sat = 0; sat < num_sats_; sat++) { std::free(sampled_code_data_[sat]); if (system_[sat] == "E" && signal_[sat].at(0) != '5') { std::free(sampled_code_pilot_[sat]); } } */ volk_free(complex_phase_); delete random_; } int signal_generator_c::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { gr_complex *out = (gr_complex *) output_items[0]; work_counter_++; unsigned int out_idx = 0; unsigned int i = 0; unsigned int k = 0; for (out_idx = 0; out_idx < vector_length_; out_idx++) { out[out_idx] = gr_complex(0.0,0.0); } for (unsigned int sat = 0; sat < num_sats_; sat++) { float phase_step_rad = -static_cast(GPS_TWO_PI) * doppler_Hz_[sat] / static_cast(fs_in_); fxp_nco(complex_phase_, vector_length_, start_phase_rad_[sat], phase_step_rad); start_phase_rad_[sat] += vector_length_ * phase_step_rad; out_idx = 0; if (system_[sat] == "G") { unsigned int delay_samples = (delay_chips_[sat] % static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS)) * samples_per_code_[sat] / GPS_L1_CA_CODE_LENGTH_CHIPS; for (i = 0; i < num_of_codes_per_vector_[sat]; i++) { for (k = 0; k < delay_samples; k++) { out[out_idx] += sampled_code_data_[sat][out_idx] * current_data_bits_[sat] * complex_phase_[out_idx]; out_idx++; } if (ms_counter_[sat] == 0 && data_flag_) { // New random data bit current_data_bits_[sat] = gr_complex((rand() % 2) == 0 ? 1 : -1, 0); } for (k = delay_samples; k < samples_per_code_[sat]; k++) { out[out_idx] += sampled_code_data_[sat][out_idx] * current_data_bits_[sat] * complex_phase_[out_idx]; out_idx++; } ms_counter_[sat] = (ms_counter_[sat] + static_cast(round(1e3*GPS_L1_CA_CODE_PERIOD))) % data_bit_duration_ms_[sat]; } } else if (system_[sat] == "E") { if(signal_[sat].at(0)=='5') { // EACH WORK outputs 1 modulated primary code int codelen = static_cast(Galileo_E5a_CODE_LENGTH_CHIPS); unsigned int delay_samples = (delay_chips_[sat] % codelen) * samples_per_code_[sat] / codelen; for (k = 0; k < delay_samples; k++) { out[out_idx] += (gr_complex(sampled_code_data_[sat][out_idx].real()*data_modulation_[sat], sampled_code_data_[sat][out_idx].imag()*pilot_modulation_[sat]) ) * complex_phase_[out_idx]; out_idx++; } if (ms_counter_[sat]%data_bit_duration_ms_[sat] == 0 && data_flag_) { // New random data bit current_data_bit_int_[sat] = (rand()%2) == 0 ? 1 : -1; } data_modulation_[sat] = current_data_bit_int_[sat] * (Galileo_E5a_I_SECONDARY_CODE.at((ms_counter_[sat]+delay_sec_[sat])%20)=='0' ? 1 : -1); pilot_modulation_[sat] = (Galileo_E5a_Q_SECONDARY_CODE[PRN_[sat] - 1].at((ms_counter_[sat] + delay_sec_[sat]) % 100)=='0' ? 1 : -1); ms_counter_[sat] = ms_counter_[sat] + static_cast(round(1e3*GALILEO_E5a_CODE_PERIOD)); for (k = delay_samples; k < samples_per_code_[sat]; k++) { out[out_idx] += (gr_complex(sampled_code_data_[sat][out_idx].real() * data_modulation_[sat] , sampled_code_data_[sat][out_idx].imag() * pilot_modulation_[sat]) ) * complex_phase_[out_idx]; out_idx++; } } else { unsigned int delay_samples = (delay_chips_[sat] % static_cast(Galileo_E1_B_CODE_LENGTH_CHIPS)) * samples_per_code_[sat] / Galileo_E1_B_CODE_LENGTH_CHIPS; for (i = 0; i < num_of_codes_per_vector_[sat]; i++) { for (k = 0; k < delay_samples; k++) { out[out_idx] += (sampled_code_data_[sat][out_idx] * current_data_bits_[sat] - sampled_code_pilot_[sat][out_idx]) * complex_phase_[out_idx]; out_idx++; } if (ms_counter_[sat] == 0 && data_flag_) { // New random data bit current_data_bits_[sat] = gr_complex((rand() % 2) == 0 ? 1 : -1, 0); } for (k = delay_samples; k < samples_per_code_[sat]; k++) { out[out_idx] += (sampled_code_data_[sat][out_idx] * current_data_bits_[sat] - sampled_code_pilot_[sat][out_idx]) * complex_phase_[out_idx]; out_idx++; } ms_counter_[sat] = (ms_counter_[sat] + static_cast(round(1e3 * Galileo_E1_CODE_PERIOD))) % data_bit_duration_ms_[sat]; } } } } if (noise_flag_) { for (out_idx = 0; out_idx < vector_length_; out_idx++) { out[out_idx] += gr_complex(random_->gasdev(),random_->gasdev()); } } // Tell runtime system how many output items we produced. return 1; } gnss-sdr-0.0.6/src/algorithms/signal_generator/CMakeLists.txt0000644000175000017500000000143312576764164023627 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) gnss-sdr-0.0.6/src/algorithms/signal_generator/adapters/0000755000175000017500000000000012576764164022671 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_generator/adapters/signal_generator.h0000644000175000017500000000527312576764164026374 0ustar carlescarles/*! * \file signal_generator.h * \brief Adapter of a class that generates synthesized GNSS signal. * \author Marc Molina, 2013. marc.molina.pena@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SIGNAL_GENERATOR_H_ #define GNSS_SDR_SIGNAL_GENERATOR_H_ #include #include #include #include #include #include #include "gnss_block_interface.h" #include "signal_generator_c.h" class ConfigurationInterface; /*! * \brief This class generates synthesized GNSS signal. * */ class SignalGenerator: public GNSSBlockInterface { public: SignalGenerator(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue); virtual ~SignalGenerator(); std::string role() { return role_; } /*! * \brief Returns "GNSSSignalGenerator". */ std::string implementation() { return "GNSSSignalGenerator"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; std::string item_type_; size_t item_size_; bool dump_; std::string dump_filename_; boost::shared_ptr gen_source_; gr::blocks::vector_to_stream::sptr vector_to_stream_; gr::blocks::file_sink::sptr file_sink_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_SIGNAL_GENERATOR_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_generator/adapters/CMakeLists.txt0000644000175000017500000000340412576764164025432 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(SIGNAL_GENERATOR_ADAPTER_SOURCES signal_generator.cc) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/signal_generator/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB SIGNAL_GENERATOR_ADAPTER_HEADERS "*.h") add_library(signal_generator_adapters ${SIGNAL_GENERATOR_ADAPTER_SOURCES} ${SIGNAL_GENERATOR_ADAPTER_HEADERS}) source_group(Headers FILES ${SIGNAL_GENERATOR_ADAPTER_HEADERS}) target_link_libraries(signal_generator_adapters gnss_sp_libs signal_generator_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} ) gnss-sdr-0.0.6/src/algorithms/signal_generator/adapters/signal_generator.cc0000644000175000017500000001471512576764164026533 0ustar carlescarles/*! * \file signal_generator.cc * \brief Adapter of a class that generates synthesized GNSS signal. * \author Marc Molina, 2013. marc.molina.pena@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "signal_generator.h" #include #include "configuration_interface.h" #include "Galileo_E1.h" #include "GPS_L1_CA.h" #include "Galileo_E5a.h" using google::LogMessage; SignalGenerator::SignalGenerator(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/gen_source.dat"; std::string default_system = "G"; std::string default_signal = "1C"; item_type_ = configuration->property(role + ".item_type", default_item_type); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); unsigned int fs_in = configuration->property("SignalSource.fs_hz", 4e6); bool data_flag = configuration->property("SignalSource.data_flag", false); bool noise_flag = configuration->property("SignalSource.noise_flag", false); float BW_BB = configuration->property("SignalSource.BW_BB", 1.0); unsigned int num_satellites = configuration->property("SignalSource.num_satellites", 1); std::vector signal1; std::vector system; std::vector PRN; std::vector CN0_dB; std::vector doppler_Hz; std::vector delay_chips; std::vector delay_sec; for (unsigned int sat_idx = 0; sat_idx < num_satellites; sat_idx++) { std::string sat = std::to_string(sat_idx); signal1.push_back(configuration->property("SignalSource.signal_" + sat, default_signal)); system.push_back(configuration->property("SignalSource.system_" + sat, default_system)); PRN.push_back(configuration->property("SignalSource.PRN_" + sat, 1)); CN0_dB.push_back(configuration->property("SignalSource.CN0_dB_" + sat, 10)); doppler_Hz.push_back(configuration->property("SignalSource.doppler_Hz_" + sat, 0)); delay_chips.push_back(configuration->property("SignalSource.delay_chips_" + sat, 0)); delay_sec.push_back(configuration->property("SignalSource.delay_sec_" + sat, 0)); } // If Galileo signal is present -> vector duration = 100 ms (25 * 4 ms) // If there is only GPS signal (Galileo signal not present) -> vector duration = 1 ms unsigned int vector_length = 0; if (std::find(system.begin(), system.end(), "E") != system.end()) { if (signal1[0].at(0)=='5') { vector_length = round((float) fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS)); } else { vector_length = round((float)fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)) * Galileo_E1_C_SECONDARY_CODE_LENGTH; } } else if (std::find(system.begin(), system.end(), "G") != system.end()) { vector_length = round((float)fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); } if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); DLOG(INFO) << "Item size " << item_size_; gen_source_ = signal_make_generator_c(signal1, system, PRN, CN0_dB, doppler_Hz, delay_chips, delay_sec, data_flag, noise_flag, fs_in, vector_length, BW_BB); vector_to_stream_ = gr::blocks::vector_to_stream::make(item_size_, vector_length); DLOG(INFO) << "vector_to_stream(" << vector_to_stream_->unique_id() << ")"; DLOG(INFO) << "gen_source(" << gen_source_->unique_id() << ")"; } else { LOG(WARNING) << item_type_ << " unrecognized item type for resampler"; item_size_ = sizeof(short); } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); } if (dump_) { DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } } SignalGenerator::~SignalGenerator() {} void SignalGenerator::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(gen_source_, 0, vector_to_stream_, 0); DLOG(INFO) << "connected gen_source to vector_to_stream"; if (dump_) { top_block->connect(vector_to_stream_, 0, file_sink_, 0); DLOG(INFO) << "connected vector_to_stream_ to file sink"; } } } void SignalGenerator::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(gen_source_, 0, vector_to_stream_, 0); if (dump_) { top_block->disconnect(vector_to_stream_, 0, file_sink_, 0); } } } gr::basic_block_sptr SignalGenerator::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; return gr::block_sptr(); } gr::basic_block_sptr SignalGenerator::get_right_block() { return vector_to_stream_; } gnss-sdr-0.0.6/src/algorithms/observables/0000755000175000017500000000000012576764164020052 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/0000755000175000017500000000000012576764164023217 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000301312576764164025754 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(OBS_GR_BLOCKS_SOURCES gps_l1_ca_observables_cc.cc galileo_e1_observables_cc.cc hybrid_observables_cc.cc mixed_observables_cc.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ) file(GLOB OBS_GR_BLOCKS_HEADERS "*.h") add_library(obs_gr_blocks ${OBS_GR_BLOCKS_SOURCES} ${OBS_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${OBS_GR_BLOCKS_HEADERS}) add_dependencies(obs_gr_blocks glog-${glog_RELEASE}) target_link_libraries(obs_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.h0000644000175000017500000000567712576764164027724 0ustar carlescarles/*! * \file hybrid_observables_cc.h * \brief Interface of the observables computation block for Galileo E1 * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_hybrid_observables_CC_H #define GNSS_SDR_hybrid_observables_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "galileo_navigation_message.h" #include "rinex_printer.h" #include "Galileo_E1.h" #include "gnss_synchro.h" class hybrid_observables_cc; typedef boost::shared_ptr hybrid_observables_cc_sptr; hybrid_observables_cc_sptr hybrid_make_observables_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); /*! * \brief This class implements a block that computes Galileo observables */ class hybrid_observables_cc : public gr::block { public: ~hybrid_observables_cc (); //void set_fs_in(unsigned long int fs_in) {d_fs_in = fs_in;}; int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); private: friend hybrid_observables_cc_sptr hybrid_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); hybrid_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); // class private vars boost::shared_ptr d_queue; bool d_dump; bool d_flag_averaging; unsigned int d_nchannels; int d_output_rate_ms; std::string d_dump_filename; std::ofstream d_dump_file; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/galileo_e1_observables_cc.h0000644000175000017500000000576312576764164030440 0ustar carlescarles/*! * \file galileo_e1_observables_cc.h * \brief Interface of the observables computation block for Galileo E1 * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_OBSERVABLES_CC_H #define GNSS_SDR_GALILEO_E1_OBSERVABLES_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "galileo_navigation_message.h" #include "rinex_printer.h" #include "Galileo_E1.h" #include "gnss_synchro.h" class galileo_e1_observables_cc; typedef boost::shared_ptr galileo_e1_observables_cc_sptr; galileo_e1_observables_cc_sptr galileo_e1_make_observables_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); /*! * \brief This class implements a block that computes Galileo observables */ class galileo_e1_observables_cc : public gr::block { public: ~galileo_e1_observables_cc (); //void set_fs_in(unsigned long int fs_in) {d_fs_in = fs_in;}; int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); private: friend galileo_e1_observables_cc_sptr galileo_e1_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); galileo_e1_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); // class private vars boost::shared_ptr d_queue; bool d_dump; bool d_flag_averaging; unsigned int d_nchannels; int d_output_rate_ms; std::string d_dump_filename; std::ofstream d_dump_file; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h0000644000175000017500000000557212576764164027543 0ustar carlescarles/*! * \file mixed_observables_cc.h * \brief Interface of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system) * \author Javier Arribas, 2015. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_MIXED_OBSERVABLES_CC_H_ #define GNSS_SDR_MIXED_OBSERVABLES_CC_H_ #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_navigation_message.h" #include "rinex_printer.h" #include "GPS_L1_CA.h" #include "gnss_synchro.h" class mixed_observables_cc; typedef boost::shared_ptr mixed_observables_cc_sptr; mixed_observables_cc_sptr mixed_make_observables_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); /*! * \brief This class implements a block that computes MIXED observables (Multi-frequency and Multi-system) */ class mixed_observables_cc : public gr::block { public: ~mixed_observables_cc (); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); private: friend mixed_observables_cc_sptr mixed_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); mixed_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); // class private vars boost::shared_ptr d_queue; bool d_dump; bool d_flag_averaging; unsigned int d_nchannels; int d_output_rate_ms; std::string d_dump_filename; std::ofstream d_dump_file; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc0000644000175000017500000002320012576764164027665 0ustar carlescarles/*! * \file mixed_observables_cc.cc * \brief Implementation of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system) * \author Javier Arribas, 2015. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "mixed_observables_cc.h" #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" using google::LogMessage; mixed_observables_cc_sptr mixed_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) { return mixed_observables_cc_sptr(new mixed_observables_cc(nchannels, queue, dump, dump_filename, output_rate_ms, flag_averaging)); } mixed_observables_cc::mixed_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : gr::block("mixed_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_output_rate_ms = output_rate_ms; d_dump_filename = dump_filename; d_flag_averaging = flag_averaging; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str() << std::endl; } catch (std::ifstream::failure& e) { LOG(WARNING) << "Exception opening observables dump file " << e.what() << std::endl; } } } } mixed_observables_cc::~mixed_observables_cc() { d_dump_file.close(); } bool MixedPairCompare_gnss_synchro_Prn_delay_ms(const std::pair& a, const std::pair& b) { return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms); } bool MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair& a, const std::pair& b) { return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol); } int mixed_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; // Get the input pointer Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Get the output pointer Gnss_Synchro current_gnss_synchro[d_nchannels]; std::map current_gnss_synchro_map; std::map::iterator gnss_synchro_iter; /* * 1. Read the GNSS SYNCHRO objects from available channels */ for (unsigned int i = 0; i < d_nchannels; i++) { //Copy the telemetry decoder data to local copy current_gnss_synchro[i] = in[i][0]; /* * 1.2 Assume no valid pseudoranges */ current_gnss_synchro[i].Flag_valid_pseudorange = false; current_gnss_synchro[i].Pseudorange_m = 0.0; if(current_gnss_synchro[i].Signal[0] == '2') { if (current_gnss_synchro[i].Flag_valid_word) //if this channel have valid word { //record the word structure in a map for pseudorange computation current_gnss_synchro_map.insert(std::pair(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i])); } } } /* * 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite) */ // if(current_gnss_synchro_map.size() > 0) // { // /* // * 2.1 Use CURRENT set of measurements and find the nearest satellite // * common RX time algorithm // */ // // what is the most recent symbol TOW in the current set? -> this will be the reference symbol // gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol); // double d_TOW_reference = gnss_synchro_iter->second.d_TOW_at_current_symbol; // double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms; // //int reference_channel= gnss_synchro_iter->second.Channel_ID; // // // Now compute RX time differences due to the PRN alignment in the correlators // double traveltime_ms; // double pseudorange_m; // double delta_rx_time_ms; // for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++) // { // // compute the required symbol history shift in order to match the reference symbol // delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms - d_ref_PRN_rx_time_ms; // //compute the pseudorange // traveltime_ms = (d_TOW_reference-gnss_synchro_iter->second.d_TOW_at_current_symbol)*1000.0 + delta_rx_time_ms + GPS_STARTOFFSET_ms; // pseudorange_m = traveltime_ms * GPS_C_m_ms; // [m] // // update the pseudorange object // current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second; // current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m; // current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true; // current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_at_current_symbol = round(d_TOW_reference*1000)/1000 + GPS_STARTOFFSET_ms/1000.0; // std::cout<<"Pseudorange_m="<second.Channel_ID].Pseudorange_m<. * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_observables_cc.h" #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" using google::LogMessage; gps_l1_ca_observables_cc_sptr gps_l1_ca_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) { return gps_l1_ca_observables_cc_sptr(new gps_l1_ca_observables_cc(nchannels, queue, dump, dump_filename, output_rate_ms, flag_averaging)); } gps_l1_ca_observables_cc::gps_l1_ca_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : gr::block("gps_l1_ca_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_output_rate_ms = output_rate_ms; d_dump_filename = dump_filename; d_flag_averaging = flag_averaging; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str() << std::endl; } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception opening observables dump file " << e.what() << std::endl; } } } } gps_l1_ca_observables_cc::~gps_l1_ca_observables_cc() { d_dump_file.close(); } bool pairCompare_gnss_synchro_Prn_delay_ms(const std::pair& a, const std::pair& b) { return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms); } bool pairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair& a, const std::pair& b) { return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol); } int gps_l1_ca_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; // Get the input pointer Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Get the output pointer Gnss_Synchro current_gnss_synchro[d_nchannels]; std::map current_gnss_synchro_map; std::map::iterator gnss_synchro_iter; /* * 1. Read the GNSS SYNCHRO objects from available channels */ for (unsigned int i = 0; i < d_nchannels; i++) { //Copy the telemetry decoder data to local copy current_gnss_synchro[i] = in[i][0]; /* * 1.2 Assume no valid pseudoranges */ current_gnss_synchro[i].Flag_valid_pseudorange = false; current_gnss_synchro[i].Pseudorange_m = 0.0; if (current_gnss_synchro[i].Flag_valid_word) //if this channel have valid word { //record the word structure in a map for pseudorange computation current_gnss_synchro_map.insert(std::pair(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i])); } } /* * 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite) */ if(current_gnss_synchro_map.size() > 0) { /* * 2.1 Use CURRENT set of measurements and find the nearest satellite * common RX time algorithm */ // what is the most recent symbol TOW in the current set? -> this will be the reference symbol gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), pairCompare_gnss_synchro_d_TOW_at_current_symbol); double d_TOW_reference = gnss_synchro_iter->second.d_TOW_at_current_symbol; double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms; //int reference_channel= gnss_synchro_iter->second.Channel_ID; // Now compute RX time differences due to the PRN alignment in the correlators double traveltime_ms; double pseudorange_m; double delta_rx_time_ms; for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++) { // compute the required symbol history shift in order to match the reference symbol delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms - d_ref_PRN_rx_time_ms; //compute the pseudorange traveltime_ms = (d_TOW_reference-gnss_synchro_iter->second.d_TOW_at_current_symbol)*1000.0 + delta_rx_time_ms + GPS_STARTOFFSET_ms; pseudorange_m = traveltime_ms * GPS_C_m_ms; // [m] // update the pseudorange object current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_at_current_symbol = round(d_TOW_reference*1000)/1000 + GPS_STARTOFFSET_ms/1000.0; } } if(d_dump == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; for (unsigned int i = 0; i < d_nchannels; i++) { tmp_double = current_gnss_synchro[i].d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].Prn_timestamp_ms; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].Pseudorange_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = (double)(current_gnss_synchro[i].Flag_valid_pseudorange==true); d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].PRN; d_dump_file.write((char*)&tmp_double, sizeof(double)); } } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what() << std::endl; } } consume_each(1); //one by one for (unsigned int i = 0; i < d_nchannels; i++) { *out[i] = current_gnss_synchro[i]; } return 1; // Output the observables } gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/hybrid_observables_cc.cc0000644000175000017500000002566012576764164030054 0ustar carlescarles/*! * \file hybrid_observables_cc.cc * \brief Implementation of the pseudorange computation block for Galileo E1 * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "hybrid_observables_cc.h" #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" using google::LogMessage; hybrid_observables_cc_sptr hybrid_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) { return hybrid_observables_cc_sptr(new hybrid_observables_cc(nchannels, queue, dump, dump_filename, output_rate_ms, flag_averaging)); } hybrid_observables_cc::hybrid_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : gr::block("hybrid_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_output_rate_ms = output_rate_ms; d_dump_filename = dump_filename; d_flag_averaging = flag_averaging; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception opening observables dump file " << e.what(); } } } } hybrid_observables_cc::~hybrid_observables_cc() { d_dump_file.close(); } bool Hybrid_pairCompare_gnss_synchro_Prn_delay_ms(const std::pair& a, const std::pair& b) { return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms); } bool Hybrid_pairCompare_gnss_synchro_d_TOW_hybrid_at_current_symbol(const std::pair& a, const std::pair& b) { return (a.second.d_TOW_hybrid_at_current_symbol) < (b.second.d_TOW_hybrid_at_current_symbol); } bool Hybrid_pairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair& a, const std::pair& b) { return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol); } int hybrid_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; // Get the input pointer Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Get the output pointer Gnss_Synchro current_gnss_synchro[d_nchannels]; std::map current_gnss_synchro_map; std::map current_gnss_synchro_map_gps_only; std::map::iterator gnss_synchro_iter; /* * 1. Read the GNSS SYNCHRO objects from available channels */ for (unsigned int i = 0; i < d_nchannels; i++) { //Copy the telemetry decoder data to local copy current_gnss_synchro[i] = in[i][0]; /* * 1.2 Assume no valid pseudoranges */ current_gnss_synchro[i].Flag_valid_pseudorange = false; current_gnss_synchro[i].Pseudorange_m = 0.0; if (current_gnss_synchro[i].Flag_valid_word) { //record the word structure in a map for pseudorange computation current_gnss_synchro_map.insert(std::pair(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i])); if (current_gnss_synchro[i].System == 'G') { current_gnss_synchro_map_gps_only.insert(std::pair(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i])); } } } /* * 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite) */ DLOG(INFO) << "gnss_synchro set size=" << current_gnss_synchro_map.size(); if(current_gnss_synchro_map.size() > 0)// and current_gnss_synchro_map_gps_only.size()>0) { /* * 2.1 Use CURRENT set of measurements and find the nearest satellite * common RX time algorithm */ // what is the most recent symbol TOW in the current set? -> this will be the reference symbol gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), Hybrid_pairCompare_gnss_synchro_d_TOW_hybrid_at_current_symbol); //gnss_synchro_iter = max_element(current_gnss_synchro_map_gps_only.begin(), current_gnss_synchro_map_gps_only.end(), Hybrid_pairCompare_gnss_synchro_d_TOW_hybrid_at_current_symbol); double d_TOW_reference = gnss_synchro_iter->second.d_TOW_hybrid_at_current_symbol; char ref_sat_system = gnss_synchro_iter->second.System; DLOG(INFO) << "d_TOW_hybrid_reference [ms] = " << d_TOW_reference * 1000; double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms; DLOG(INFO) << "ref_PRN_rx_time_ms [ms] = " << d_ref_PRN_rx_time_ms; //int reference_channel= gnss_synchro_iter->second.Channel_ID; // Now compute RX time differences due to the PRN alignment in the correlators double traveltime_ms; double pseudorange_m; double delta_rx_time_ms; double delta_TOW_ms; for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++) { // check and correct synchronization in cross-system pseudoranges! delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms - d_ref_PRN_rx_time_ms; delta_TOW_ms = (d_TOW_reference - gnss_synchro_iter->second.d_TOW_hybrid_at_current_symbol) * 1000.0; //compute the pseudorange traveltime_ms = delta_TOW_ms + delta_rx_time_ms + GALILEO_STARTOFFSET_ms; pseudorange_m = traveltime_ms * GALILEO_C_m_ms; // [m] DLOG(INFO) << "CH " << gnss_synchro_iter->second.Channel_ID << " tracking GNSS System " << gnss_synchro_iter->second.System << " has PRN start at= " << gnss_synchro_iter->second.Prn_timestamp_ms << " [ms], d_TOW_at_current_symbol = " << (gnss_synchro_iter->second.d_TOW_at_current_symbol) * 1000 << " [ms], d_TOW_hybrid_at_current_symbol = "<< (gnss_synchro_iter->second.d_TOW_hybrid_at_current_symbol) * 1000 << "[ms], delta_rx_time_ms = " << delta_rx_time_ms << "[ms], travel_time = " << traveltime_ms << ", pseudorange[m] = "<< pseudorange_m; // update the pseudorange object //current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_hybrid_at_current_symbol = round(d_TOW_reference * 1000) / 1000 + GALILEO_STARTOFFSET_ms / 1000.0; } } if(d_dump == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; for (unsigned int i = 0; i < d_nchannels ; i++) { tmp_double = current_gnss_synchro[i].d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].d_TOW_hybrid_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].Prn_timestamp_ms; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].Pseudorange_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = (double)(current_gnss_synchro[i].Flag_valid_pseudorange==true); d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].PRN; d_dump_file.write((char*)&tmp_double, sizeof(double)); } } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } consume_each(1); //consume one by one for (unsigned int i = 0; i < d_nchannels ; i++) { *out[i] = current_gnss_synchro[i]; } //todo: enable output when the hybrid algorithm is completed return 1; //Output the observables } gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/galileo_e1_observables_cc.cc0000644000175000017500000002146212576764164030570 0ustar carlescarles/*! * \file galileo_e1_observables_cc.cc * \brief Implementation of the pseudorange computation block for Galileo E1 * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_observables_cc.h" #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" using google::LogMessage; galileo_e1_observables_cc_sptr galileo_e1_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) { return galileo_e1_observables_cc_sptr(new galileo_e1_observables_cc(nchannels, queue, dump, dump_filename, output_rate_ms, flag_averaging)); } galileo_e1_observables_cc::galileo_e1_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) : gr::block("galileo_e1_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_output_rate_ms = output_rate_ms; d_dump_filename = dump_filename; d_flag_averaging = flag_averaging; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception opening observables dump file " << e.what(); } } } } galileo_e1_observables_cc::~galileo_e1_observables_cc() { d_dump_file.close(); } bool Galileo_pairCompare_gnss_synchro_Prn_delay_ms(const std::pair& a, const std::pair& b) { return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms); } bool Galileo_pairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair& a, const std::pair& b) { return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol); } int galileo_e1_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; // Get the input pointer Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Get the output pointer Gnss_Synchro current_gnss_synchro[d_nchannels]; std::map current_gnss_synchro_map; std::map::iterator gnss_synchro_iter; /* * 1. Read the GNSS SYNCHRO objects from available channels */ for (unsigned int i = 0; i < d_nchannels; i++) { //Copy the telemetry decoder data to local copy current_gnss_synchro[i] = in[i][0]; /* * 1.2 Assume no valid pseudoranges */ current_gnss_synchro[i].Flag_valid_pseudorange = false; current_gnss_synchro[i].Pseudorange_m = 0.0; if (current_gnss_synchro[i].Flag_valid_word) { //record the word structure in a map for pseudorange computation current_gnss_synchro_map.insert(std::pair(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i])); } } /* * 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite) */ if(current_gnss_synchro_map.size() > 0) { /* * 2.1 Use CURRENT set of measurements and find the nearest satellite * common RX time algorithm */ // what is the most recent symbol TOW in the current set? -> this will be the reference symbol gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), Galileo_pairCompare_gnss_synchro_d_TOW_at_current_symbol); double d_TOW_reference = gnss_synchro_iter->second.d_TOW_at_current_symbol; double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms; //int reference_channel= gnss_synchro_iter->second.Channel_ID; // Now compute RX time differences due to the PRN alignment in the correlators double traveltime_ms; double pseudorange_m; double delta_rx_time_ms; for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++) { // compute the required symbol history shift in order to match the reference symbol delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms-d_ref_PRN_rx_time_ms; //compute the pseudorange traveltime_ms = (d_TOW_reference - gnss_synchro_iter->second.d_TOW_at_current_symbol)*1000.0 + delta_rx_time_ms + GALILEO_STARTOFFSET_ms; pseudorange_m = traveltime_ms * GALILEO_C_m_ms; // [m] // update the pseudorange object //current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true; current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_at_current_symbol = round(d_TOW_reference*1000)/1000 + GALILEO_STARTOFFSET_ms/1000.0; } } if(d_dump == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; for (unsigned int i = 0; i < d_nchannels ; i++) { tmp_double = current_gnss_synchro[i].d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].Prn_timestamp_ms; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].Pseudorange_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = (double)(current_gnss_synchro[i].Flag_valid_pseudorange==true); d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_gnss_synchro[i].PRN; d_dump_file.write((char*)&tmp_double, sizeof(double)); } } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } consume_each(1); //one by one for (unsigned int i = 0; i < d_nchannels ; i++) { *out[i] = current_gnss_synchro[i]; } return 1; //Output the observables } gnss-sdr-0.0.6/src/algorithms/observables/gnuradio_blocks/gps_l1_ca_observables_cc.h0000644000175000017500000000564612576764164030267 0ustar carlescarles/*! * \file gps_l1_ca_observables_cc.h * \brief Interface of the pseudorange computation block for GPS L1 C/A * \author Javier Arribas, 2011. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_OBSERVABLES_CC_H #define GNSS_SDR_GPS_L1_CA_OBSERVABLES_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_navigation_message.h" #include "rinex_printer.h" #include "GPS_L1_CA.h" #include "gnss_synchro.h" class gps_l1_ca_observables_cc; typedef boost::shared_ptr gps_l1_ca_observables_cc_sptr; gps_l1_ca_observables_cc_sptr gps_l1_ca_make_observables_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); /*! * \brief This class implements a block that computes GPS L1 C/A observables */ class gps_l1_ca_observables_cc : public gr::block { public: ~gps_l1_ca_observables_cc (); //void set_fs_in(unsigned long int fs_in) {d_fs_in = fs_in;}; int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); private: friend gps_l1_ca_observables_cc_sptr gps_l1_ca_make_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); gps_l1_ca_observables_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging); // class private vars boost::shared_ptr d_queue; bool d_dump; bool d_flag_averaging; unsigned int d_nchannels; int d_output_rate_ms; std::string d_dump_filename; std::ofstream d_dump_file; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/CMakeLists.txt0000644000175000017500000000143212576764164022612 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks)gnss-sdr-0.0.6/src/algorithms/observables/adapters/0000755000175000017500000000000012576764164021655 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/observables/adapters/hybrid_observables.cc0000644000175000017500000000564012576764164026041 0ustar carlescarles/*! * \file hybrid_observables.cc * \brief Implementation of an adapter of a Galileo E1 observables block * to a ObservablesInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "hybrid_observables.h" #include "configuration_interface.h" #include "hybrid_observables_cc.h" #include using google::LogMessage; HybridObservables::HybridObservables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); std::string default_dump_filename = "./observables.dat"; DLOG(INFO) << "role " << role; bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); observables_ = hybrid_make_observables_cc(in_streams_, queue_, dump_, dump_filename_, output_rate_ms, flag_averaging); DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")"; } HybridObservables::~HybridObservables() {} void HybridObservables::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void HybridObservables::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr HybridObservables::get_left_block() { return observables_; } gr::basic_block_sptr HybridObservables::get_right_block() { return observables_; } gnss-sdr-0.0.6/src/algorithms/observables/adapters/gps_l1_ca_observables.h0000644000175000017500000000522412576764164026250 0ustar carlescarles/*! * \file gps_l1_ca_observables.h * \brief Interface of an adapter of a GPS L1 C/A observables block * to a ObservablesInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_OBSERVABLES_H_ #define GNSS_SDR_GPS_L1_CA_OBSERVABLES_H_ #include #include #include "observables_interface.h" #include "gps_l1_ca_observables_cc.h" class ConfigurationInterface; /*! * \brief This class implements an ObservablesInterface for GPS L1 C/A */ class GpsL1CaObservables : public ObservablesInterface { public: GpsL1CaObservables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaObservables(); std::string role() { return role_; } //! Returns "GPS_L1_CA_Observables" std::string implementation() { return "GPS_L1_CA_Observables"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation size_t item_size() { return sizeof(gr_complex); } private: gps_l1_ca_observables_cc_sptr observables_; bool dump_; //unsigned int fs_in_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/adapters/hybrid_observables.h0000644000175000017500000000523712576764164025705 0ustar carlescarles/*! * \file hybrid_observables.h * \brief Implementation of an adapter of a Galileo E1 observables block * to a ObservablesInterface * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_hybrid_observables_H_ #define GNSS_SDR_hybrid_observables_H_ #include #include #include "observables_interface.h" #include "hybrid_observables_cc.h" class ConfigurationInterface; /*! * \brief This class implements an ObservablesInterface for Galileo E1B */ class HybridObservables : public ObservablesInterface { public: HybridObservables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~HybridObservables(); std::string role() { return role_; } //! Returns "Hybrid_Observables" std::string implementation() { return "Hybrid_Observables"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation size_t item_size() { return sizeof(gr_complex); } private: hybrid_observables_cc_sptr observables_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/adapters/CMakeLists.txt0000644000175000017500000000274212576764164024422 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(OBS_ADAPTER_SOURCES gps_l1_ca_observables.cc galileo_e1_observables.cc hybrid_observables.cc mixed_observables.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/observables/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB OBS_ADAPTER_HEADERS "*.h") add_library(obs_adapters ${OBS_ADAPTER_SOURCES} ${OBS_ADAPTER_HEADERS}) source_group(Headers FILES ${OBS_ADAPTER_HEADERS}) target_link_libraries(obs_adapters obs_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/observables/adapters/galileo_e1_observables.cc0000644000175000017500000000571012576764164026557 0ustar carlescarles/*! * \file galileo_e1_observables.cc * \brief Implementation of an adapter of a Galileo E1 observables block * to a ObservablesInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_observables.h" #include "configuration_interface.h" #include "galileo_e1_observables_cc.h" #include using google::LogMessage; GalileoE1Observables::GalileoE1Observables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); std::string default_dump_filename = "./observables.dat"; DLOG(INFO) << "role " << role; bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); observables_ = galileo_e1_make_observables_cc(in_streams_, queue_, dump_, dump_filename_, output_rate_ms, flag_averaging); DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")"; } GalileoE1Observables::~GalileoE1Observables() {} void GalileoE1Observables::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GalileoE1Observables::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GalileoE1Observables::get_left_block() { return observables_; } gr::basic_block_sptr GalileoE1Observables::get_right_block() { return observables_; } gnss-sdr-0.0.6/src/algorithms/observables/adapters/mixed_observables.cc0000644000175000017500000000603312576764164025663 0ustar carlescarles/*! * \file mixed_observables.cc * \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system) * to a ObservablesInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "mixed_observables.h" #include "configuration_interface.h" #include "mixed_observables_cc.h" #include using google::LogMessage; MixedObservables::MixedObservables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); std::string default_dump_filename = "./observables.dat"; DLOG(INFO) << "role " << role; bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); //fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); observables_ = mixed_make_observables_cc(in_streams_, queue_, dump_, dump_filename_, output_rate_ms, flag_averaging); //observables_->set_fs_in(fs_in_); DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")"; } MixedObservables::~MixedObservables() {} void MixedObservables::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void MixedObservables::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr MixedObservables::get_left_block() { return observables_; } gr::basic_block_sptr MixedObservables::get_right_block() { return observables_; } gnss-sdr-0.0.6/src/algorithms/observables/adapters/gps_l1_ca_observables.cc0000644000175000017500000000604712576764164026412 0ustar carlescarles/*! * \file gps_l1_ca_observables.cc * \brief Implementation of an adapter of a GPS L1 C/A observables block * to a ObservablesInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_observables.h" #include "configuration_interface.h" #include "gps_l1_ca_observables_cc.h" #include using google::LogMessage; GpsL1CaObservables::GpsL1CaObservables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); std::string default_dump_filename = "./observables.dat"; DLOG(INFO) << "role " << role; bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); //fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); observables_ = gps_l1_ca_make_observables_cc(in_streams_, queue_, dump_, dump_filename_, output_rate_ms, flag_averaging); //observables_->set_fs_in(fs_in_); DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")"; } GpsL1CaObservables::~GpsL1CaObservables() {} void GpsL1CaObservables::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GpsL1CaObservables::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GpsL1CaObservables::get_left_block() { return observables_; } gr::basic_block_sptr GpsL1CaObservables::get_right_block() { return observables_; } gnss-sdr-0.0.6/src/algorithms/observables/adapters/galileo_e1_observables.h0000644000175000017500000000530612576764164026422 0ustar carlescarles/*! * \file galileo_e1_observables.h * \brief Implementation of an adapter of a Galileo E1 observables block * to a ObservablesInterface * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_OBSERVABLES_H_ #define GNSS_SDR_GALILEO_E1_OBSERVABLES_H_ #include #include #include "observables_interface.h" #include "galileo_e1_observables_cc.h" class ConfigurationInterface; /*! * \brief This class implements an ObservablesInterface for Galileo E1B */ class GalileoE1Observables : public ObservablesInterface { public: GalileoE1Observables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1Observables(); std::string role() { return role_; } //! Returns "Galileo_E1B_Observables" std::string implementation() { return "Galileo_E1B_Observables"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation size_t item_size() { return sizeof(gr_complex); } private: galileo_e1_observables_cc_sptr observables_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/observables/adapters/mixed_observables.h0000644000175000017500000000530212576764164025523 0ustar carlescarles/*! * \file mixed_observables.h * \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system) * to a ObservablesInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_MIXED_OBSERVABLES_H_ #define GNSS_SDR_MIXED_OBSERVABLES_H_ #include #include #include "observables_interface.h" #include "mixed_observables_cc.h" class ConfigurationInterface; /*! * \brief This class implements an ObservablesInterface for mixed observables block (muti-frequency and multi-system) */ class MixedObservables : public ObservablesInterface { public: MixedObservables(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~MixedObservables(); std::string role() { return role_; } //! Returns "Mixed_Observables" std::string implementation() { return "Mixed_Observables"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation size_t item_size() { return sizeof(gr_complex); } private: mixed_observables_cc_sptr observables_; bool dump_; //unsigned int fs_in_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/conditioner/0000755000175000017500000000000012576764164020060 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/conditioner/CMakeLists.txt0000644000175000017500000000143312576764164022621 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) #add_subdirectory(gnuradio_blocks)gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/0000755000175000017500000000000012576764164021663 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/conditioner/adapters/array_signal_conditioner.h0000644000175000017500000000564412576764164027115 0ustar carlescarles/*! * \file array_signal_conditioner.h * \brief It wraps blocks to change data type, filter and resample input data, adapted to array receiver * \author Javier Arribas jarribas (at) cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_ARRAY_SIGNAL_CONDITIONER_H_ #define GNSS_SDR_ARRAY_SIGNAL_CONDITIONER_H_ #include #include #include "gnss_block_interface.h" #include "control_message_factory.h" class ConfigurationInterface; class AcquisitionInterface; class TrackingInterface; class TelemetryDecoderInterface; /*! * \brief This class wraps blocks to change data_type_adapter, input_filter and resampler * to be applied to the input flow of sampled signal. */ class ArraySignalConditioner: public GNSSBlockInterface { public: //! Constructor ArraySignalConditioner(ConfigurationInterface *configuration, GNSSBlockInterface *data_type_adapt, GNSSBlockInterface *in_filt, GNSSBlockInterface *res, std::string role, std::string implementation, boost::shared_ptr queue); //! Virtual destructor virtual ~ArraySignalConditioner(); void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string role(){ return role_; } //! Returns "Signal_Conditioner" std::string implementation(){ return "Array_Signal_Conditioner"; } size_t item_size(){ return 0; } GNSSBlockInterface *data_type_adapter(){ return data_type_adapt_; } GNSSBlockInterface *input_filter(){ return in_filt_; } GNSSBlockInterface *resampler(){ return res_; } private: GNSSBlockInterface *data_type_adapt_; GNSSBlockInterface *in_filt_; GNSSBlockInterface *res_; std::string role_; std::string implementation_; bool connected_; //bool stop_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_SIGNAL_CONDITIONER_H_*/ gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/CMakeLists.txt0000644000175000017500000000265112576764164024427 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(COND_ADAPTER_SOURCES signal_conditioner.cc array_signal_conditioner.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB COND_ADAPTER_HEADERS "*.h") add_library(conditioner_adapters ${COND_ADAPTER_SOURCES} ${COND_ADAPTER_HEADERS}) source_group(Headers FILES ${COND_ADAPTER_HEADERS}) add_dependencies(conditioner_adapters glog-${glog_RELEASE})gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/signal_conditioner.h0000644000175000017500000000555612576764164025721 0ustar carlescarles/*! * \file signal_conditioner.h * \brief It wraps blocks to change data type, filter and resample input data. * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SIGNAL_CONDITIONER_H_ #define GNSS_SDR_SIGNAL_CONDITIONER_H_ #include #include #include "gnss_block_interface.h" #include "control_message_factory.h" class ConfigurationInterface; class AcquisitionInterface; class TrackingInterface; class TelemetryDecoderInterface; /*! * \brief This class wraps blocks to change data_type_adapter, input_filter and resampler * to be applied to the input flow of sampled signal. */ class SignalConditioner: public GNSSBlockInterface { public: //! Constructor SignalConditioner(ConfigurationInterface *configuration, GNSSBlockInterface *data_type_adapt, GNSSBlockInterface *in_filt, GNSSBlockInterface *res, std::string role, std::string implementation, boost::shared_ptr queue); //! Virtual destructor virtual ~SignalConditioner(); void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string role(){ return role_; } //! Returns "Signal_Conditioner" std::string implementation(){ return "Signal_Conditioner"; } size_t item_size(){ return 0; } GNSSBlockInterface *data_type_adapter(){ return data_type_adapt_; } GNSSBlockInterface *input_filter(){ return in_filt_; } GNSSBlockInterface *resampler(){ return res_; } private: GNSSBlockInterface *data_type_adapt_; GNSSBlockInterface *in_filt_; GNSSBlockInterface *res_; std::string role_; std::string implementation_; bool connected_; //bool stop_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_SIGNAL_CONDITIONER_H_*/ gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/array_signal_conditioner.cc0000644000175000017500000000734612576764164027254 0ustar carlescarles/*! * \file array_signal_conditioner.cc * \brief It wraps blocks to change data type, filter and resample input data, adapted to array receiver * \author Javier Arribas jarribas (at) cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "array_signal_conditioner.h" #include #include #include #include #include #include #include #include "gnss_flowgraph.h" using google::LogMessage; // Constructor ArraySignalConditioner::ArraySignalConditioner(ConfigurationInterface *configuration, GNSSBlockInterface *data_type_adapt, GNSSBlockInterface *in_filt, GNSSBlockInterface *res, std::string role, std::string implementation, boost::shared_ptr queue) : data_type_adapt_(data_type_adapt), in_filt_(in_filt), res_(res), role_(role), implementation_(implementation), queue_(queue) { connected_ = false; if(configuration){ }; } // Destructor ArraySignalConditioner::~ArraySignalConditioner() { delete data_type_adapt_; delete in_filt_; delete res_; } void ArraySignalConditioner::connect(gr::top_block_sptr top_block) { // note: the array signal conditioner do not have data type adapter, and must use the array input filter (multichannel) if (connected_) { LOG(WARNING) << "Array Signal conditioner already connected internally"; return; } //data_type_adapt_->connect(top_block); in_filt_->connect(top_block); res_->connect(top_block); //top_block->connect(data_type_adapt_->get_right_block(), 0, in_filt_->get_left_block(), 0); //DLOG(INFO) << "data_type_adapter -> input_filter"; top_block->connect(in_filt_->get_right_block(), 0, res_->get_left_block(), 0); DLOG(INFO) << "Array input_filter -> resampler"; connected_ = true; } void ArraySignalConditioner::disconnect(gr::top_block_sptr top_block) { if (!connected_) { LOG(WARNING) << "Array Signal conditioner already disconnected internally"; return; } //top_block->disconnect(data_type_adapt_->get_right_block(), 0, // in_filt_->get_left_block(), 0); top_block->disconnect(in_filt_->get_right_block(), 0, res_->get_left_block(), 0); //data_type_adapt_->disconnect(top_block); in_filt_->disconnect(top_block); res_->disconnect(top_block); connected_ = false; } gr::basic_block_sptr ArraySignalConditioner::get_left_block() { //return data_type_adapt_->get_left_block(); return in_filt_->get_left_block(); } gr::basic_block_sptr ArraySignalConditioner::get_right_block() { return res_->get_right_block(); } gnss-sdr-0.0.6/src/algorithms/conditioner/adapters/signal_conditioner.cc0000644000175000017500000000676312576764164026060 0ustar carlescarles/*! * \file signal_conditioner.cc * \brief It holds blocks to change data type, filter and resample input data. * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "signal_conditioner.h" #include #include #include #include #include #include #include #include "gnss_flowgraph.h" using google::LogMessage; // Constructor SignalConditioner::SignalConditioner(ConfigurationInterface *configuration, GNSSBlockInterface *data_type_adapt, GNSSBlockInterface *in_filt, GNSSBlockInterface *res, std::string role, std::string implementation, boost::shared_ptr queue) : data_type_adapt_(data_type_adapt), in_filt_(in_filt), res_(res), role_(role), implementation_(implementation), queue_(queue) { connected_ = false; if(configuration){ }; } // Destructor SignalConditioner::~SignalConditioner() { delete data_type_adapt_; delete in_filt_; delete res_; } void SignalConditioner::connect(gr::top_block_sptr top_block) { if (connected_) { LOG(WARNING) << "Signal conditioner already connected internally"; return; } data_type_adapt_->connect(top_block); in_filt_->connect(top_block); res_->connect(top_block); top_block->connect(data_type_adapt_->get_right_block(), 0, in_filt_->get_left_block(), 0); DLOG(INFO) << "data_type_adapter -> input_filter"; top_block->connect(in_filt_->get_right_block(), 0, res_->get_left_block(), 0); DLOG(INFO) << "input_filter -> resampler"; connected_ = true; } void SignalConditioner::disconnect(gr::top_block_sptr top_block) { if (!connected_) { LOG(WARNING) << "Signal conditioner already disconnected internally"; return; } top_block->disconnect(data_type_adapt_->get_right_block(), 0, in_filt_->get_left_block(), 0); top_block->disconnect(in_filt_->get_right_block(), 0, res_->get_left_block(), 0); data_type_adapt_->disconnect(top_block); in_filt_->disconnect(top_block); res_->disconnect(top_block); connected_ = false; } gr::basic_block_sptr SignalConditioner::get_left_block() { return data_type_adapt_->get_left_block(); } gr::basic_block_sptr SignalConditioner::get_right_block() { return res_->get_right_block(); } gnss-sdr-0.0.6/src/algorithms/CMakeLists.txt0000644000175000017500000000220012576764164020275 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(acquisition) add_subdirectory(channel) add_subdirectory(libs) add_subdirectory(conditioner) add_subdirectory(data_type_adapter) add_subdirectory(observables) add_subdirectory(telemetry_decoder) add_subdirectory(output_filter) add_subdirectory(resampler) add_subdirectory(signal_generator) add_subdirectory(signal_source) add_subdirectory(input_filter) add_subdirectory(tracking) add_subdirectory(PVT) gnss-sdr-0.0.6/src/algorithms/resampler/0000755000175000017500000000000012576764164017535 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/0000755000175000017500000000000012576764164022702 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cs.h0000644000175000017500000000536312576764164031470 0ustar carlescarles/*! * \file direct_resampler_conditioner_cs.h * \brief Nearest neighborhood resampler with * std::complex input and std::complex output * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H #define GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H #include #include class direct_resampler_conditioner_cs; typedef boost::shared_ptr direct_resampler_conditioner_cs_sptr; direct_resampler_conditioner_cs_sptr direct_resampler_make_conditioner_cs(double sample_freq_in, double sample_freq_out); /*! * \brief This class implements a direct resampler conditioner for std::complex * * Direct resampling without interpolation */ class direct_resampler_conditioner_cs: public gr::block { private: friend direct_resampler_conditioner_cs_sptr direct_resampler_make_conditioner_cs(double sample_freq_in, double sample_freq_out); double d_sample_freq_in; double d_sample_freq_out; uint32_t d_phase; uint32_t d_lphase; uint32_t d_phase_step; unsigned int d_history; direct_resampler_conditioner_cs(double sample_freq_in, double sample_freq_out); public: ~direct_resampler_conditioner_cs(); unsigned int sample_freq_in() const { return d_sample_freq_in; } unsigned int sample_freq_out() const { return d_sample_freq_out; } void forecast(int noutput_items, gr_vector_int &ninput_items_required); int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H */ gnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000245312576764164025446 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(RESAMPLER_GR_BLOCKS_SOURCES direct_resampler_conditioner_cc.cc direct_resampler_conditioner_cs.cc direct_resampler_conditioner_cb.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ) file(GLOB RESAMPLER_GR_BLOCKS_HEADERS "*.h") add_library(resampler_gr_blocks ${RESAMPLER_GR_BLOCKS_SOURCES} ${RESAMPLER_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${RESAMPLER_GR_BLOCKS_HEADERS}) add_dependencies(resampler_gr_blocks glog-${glog_RELEASE})gnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cc.cc0000644000175000017500000001072212576764164031601 0ustar carlescarles/*! * \file direct_resampler_conditioner_cc.cc * \brief Nearest neighborhood resampler with * gr_complex input and gr_complex output * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "direct_resampler_conditioner_cc.h" #include #include #include #include using google::LogMessage; direct_resampler_conditioner_cc_sptr direct_resampler_make_conditioner_cc( double sample_freq_in, double sample_freq_out) { return direct_resampler_conditioner_cc_sptr( new direct_resampler_conditioner_cc(sample_freq_in, sample_freq_out)); } direct_resampler_conditioner_cc::direct_resampler_conditioner_cc( double sample_freq_in, double sample_freq_out) : gr::block("direct_resampler_conditioner_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(gr_complex))), d_sample_freq_in(sample_freq_in), d_sample_freq_out(sample_freq_out), d_phase(0), d_lphase(0), d_history(1) { // Computes the phase step multiplying the resampling ratio by 2^32 = 4294967296 const double two_32 = 4294967296.0; if (d_sample_freq_in >= d_sample_freq_out) { d_phase_step = static_cast(floor(two_32 * sample_freq_out / sample_freq_in)); } else { d_phase_step = static_cast(floor(two_32 * sample_freq_in / sample_freq_out)); } set_relative_rate(1.0 * sample_freq_out / sample_freq_in); set_output_multiple(1); } direct_resampler_conditioner_cc::~direct_resampler_conditioner_cc() { } void direct_resampler_conditioner_cc::forecast(int noutput_items, gr_vector_int &ninput_items_required) { int nreqd = std::max(static_cast(1), static_cast(static_cast(noutput_items + 1) * sample_freq_in() / sample_freq_out()) + history() - 1); unsigned ninputs = ninput_items_required.size(); for (unsigned i = 0; i < ninputs; i++) { ninput_items_required[i] = nreqd; } } int direct_resampler_conditioner_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const gr_complex *in = (const gr_complex *)input_items[0]; gr_complex *out = (gr_complex *)output_items[0]; int lcv = 0; int count = 0; if (d_sample_freq_in >= d_sample_freq_out) { while ((lcv < noutput_items)) { if (d_phase <= d_lphase) { out[lcv] = *in; lcv++; } d_lphase = d_phase; d_phase += d_phase_step; in++; count++; } } else { while ((lcv < noutput_items)) { d_lphase = d_phase; d_phase += d_phase_step; if (d_phase <= d_lphase) { in++; count++; } out[lcv] = *in; lcv++; } } consume_each(std::min(count, ninput_items[0])); return lcv; } gnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cc.h0000644000175000017500000000575112576764164031451 0ustar carlescarles/*! * \file direct_resampler_conditioner_cc.h * * \brief Nearest neighborhood resampler with * gr_complex input and gr_complex output * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * This block takes in a signal stream and performs direct * resampling. * The theory behind this block can be found in Chapter 7.5 of * the following book. * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CC_H #define GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CC_H #include #include class direct_resampler_conditioner_cc; typedef boost::shared_ptr direct_resampler_conditioner_cc_sptr; direct_resampler_conditioner_cc_sptr direct_resampler_make_conditioner_cc(double sample_freq_in, double sample_freq_out); /*! * \brief This class implements a direct resampler conditioner for complex data * * Direct resampling without interpolation */ class direct_resampler_conditioner_cc: public gr::block { private: friend direct_resampler_conditioner_cc_sptr direct_resampler_make_conditioner_cc(double sample_freq_in, double sample_freq_out); double d_sample_freq_in; //! Specifies the sampling frequency of the input signal double d_sample_freq_out; //! Specifies the sampling frequency of the output signal uint32_t d_phase; uint32_t d_lphase; uint32_t d_phase_step; unsigned int d_history; direct_resampler_conditioner_cc(double sample_freq_in, double sample_freq_out); public: ~direct_resampler_conditioner_cc(); unsigned int sample_freq_in() const { return d_sample_freq_in; } unsigned int sample_freq_out() const { return d_sample_freq_out; } void forecast(int noutput_items, gr_vector_int &ninput_items_required); int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CC_H */ gnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cs.cc0000644000175000017500000001022612576764164031620 0ustar carlescarles/*! * \file direct_resampler_conditioner_cs.cc * \brief Nearest neighborhood resampler with * complex short input and complex short output * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "direct_resampler_conditioner_cs.h" #include #include #include #include using google::LogMessage; direct_resampler_conditioner_cs_sptr direct_resampler_make_conditioner_cs( double sample_freq_in, double sample_freq_out) { return direct_resampler_conditioner_cs_sptr( new direct_resampler_conditioner_cs(sample_freq_in, sample_freq_out)); } direct_resampler_conditioner_cs::direct_resampler_conditioner_cs( double sample_freq_in, double sample_freq_out) : gr::block("direct_resampler_make_conditioner_cs", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)), gr::io_signature::make(1, 1, sizeof(lv_16sc_t))), d_sample_freq_in(sample_freq_in), d_sample_freq_out( sample_freq_out), d_phase(0), d_lphase(0), d_history(1) { const double two_32 = 4294967296.0; // Computes the phase step multiplying the resampling ratio by 2^32 = 4294967296 if (d_sample_freq_in >= d_sample_freq_out) { d_phase_step = static_cast(floor(two_32 * sample_freq_out / sample_freq_in)); } else { d_phase_step = static_cast(floor(two_32 * sample_freq_in / sample_freq_out)); } set_relative_rate(1.0 * sample_freq_out / sample_freq_in); set_output_multiple(1); } direct_resampler_conditioner_cs::~direct_resampler_conditioner_cs() { } void direct_resampler_conditioner_cs::forecast(int noutput_items, gr_vector_int &ninput_items_required) { int nreqd = std::max(static_cast(1), static_cast(static_cast(noutput_items + 1) * sample_freq_in() / sample_freq_out()) + history() - 1); unsigned ninputs = ninput_items_required.size(); for (unsigned i = 0; i < ninputs; i++) { ninput_items_required[i] = nreqd; } } int direct_resampler_conditioner_cs::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const lv_16sc_t *in = (const lv_16sc_t *)input_items[0]; lv_16sc_t *out = (lv_16sc_t *)output_items[0]; int lcv = 0; int count = 0; if (d_sample_freq_in >= d_sample_freq_out) { while ((lcv < noutput_items)) { if (d_phase <= d_lphase) { out[lcv] = *in; lcv++; } d_lphase = d_phase; d_phase += d_phase_step; in++; count++; } } else { while ((lcv < noutput_items)) { d_lphase = d_phase; d_phase += d_phase_step; if (d_phase <= d_lphase) { in++; count++; } out[lcv] = *in; lcv++; } } consume_each(std::min(count, ninput_items[0])); return lcv; } gnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cb.cc0000644000175000017500000001024212576764164031575 0ustar carlescarles/*! * \file direct_resampler_conditioner_cb.cc * \brief Nearest neighborhood resampler with std::complex * input and std::complex output * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "direct_resampler_conditioner_cb.h" #include #include #include #include using google::LogMessage; direct_resampler_conditioner_cb_sptr direct_resampler_make_conditioner_cb( double sample_freq_in, double sample_freq_out) { return direct_resampler_conditioner_cb_sptr( new direct_resampler_conditioner_cb(sample_freq_in, sample_freq_out)); } direct_resampler_conditioner_cb::direct_resampler_conditioner_cb( double sample_freq_in, double sample_freq_out) : gr::block("direct_resampler_make_conditioner_cb", gr::io_signature::make(1, 1, sizeof(lv_8sc_t)), gr::io_signature::make(1, 1, sizeof(lv_8sc_t))), d_sample_freq_in(sample_freq_in), d_sample_freq_out( sample_freq_out), d_phase(0), d_lphase(0), d_history(1) { const double two_32 = 4294967296.0; // Computes the phase step multiplying the resampling ratio by 2^32 = 4294967296 if (d_sample_freq_in >= d_sample_freq_out) { d_phase_step = static_cast(floor(two_32 * sample_freq_out / sample_freq_in)); } else { d_phase_step = static_cast(floor(two_32 * sample_freq_in / sample_freq_out)); } set_relative_rate(1.0 * sample_freq_out / sample_freq_in); set_output_multiple(1); } direct_resampler_conditioner_cb::~direct_resampler_conditioner_cb() { } void direct_resampler_conditioner_cb::forecast(int noutput_items, gr_vector_int &ninput_items_required) { int nreqd = std::max(static_cast(1), static_cast(static_cast(noutput_items + 1) * sample_freq_in() / sample_freq_out()) + history() - 1); unsigned ninputs = ninput_items_required.size(); for (unsigned i = 0; i < ninputs; i++) { ninput_items_required[i] = nreqd; } } int direct_resampler_conditioner_cb::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const lv_8sc_t *in = (const lv_8sc_t *)input_items[0]; lv_8sc_t *out = (lv_8sc_t *)output_items[0]; int lcv = 0; int count = 0; if (d_sample_freq_in >= d_sample_freq_out) { while ((lcv < noutput_items)) { if (d_phase <= d_lphase) { out[lcv] = *in; lcv++; } d_lphase = d_phase; d_phase += d_phase_step; in++; count++; } } else { while ((lcv < noutput_items)) { d_lphase = d_phase; d_phase += d_phase_step; if (d_phase <= d_lphase) { in++; count++; } out[lcv] = *in; lcv++; } } consume_each(std::min(count, ninput_items[0])); return lcv; } gnss-sdr-0.0.6/src/algorithms/resampler/gnuradio_blocks/direct_resampler_conditioner_cb.h0000644000175000017500000000540512576764164031444 0ustar carlescarles/*! * \file direct_resampler_conditioner_cb.h * \brief Nearest neighborhood resampler with * std::complex input and std::complex output * \author Luis Esteve, 2011. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CB_H #define GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CB_H #include #include class direct_resampler_conditioner_cb; typedef boost::shared_ptr direct_resampler_conditioner_cb_sptr; direct_resampler_conditioner_cb_sptr direct_resampler_make_conditioner_cb(double sample_freq_in, double sample_freq_out); /*! * \brief This class implements a direct resampler conditioner for std::complex * * Direct resampling without interpolation */ class direct_resampler_conditioner_cb: public gr::block { private: friend direct_resampler_conditioner_cb_sptr direct_resampler_make_conditioner_cb(double sample_freq_in, double sample_freq_out); double d_sample_freq_in; double d_sample_freq_out; uint32_t d_phase; uint32_t d_lphase; uint32_t d_phase_step; unsigned int d_history; direct_resampler_conditioner_cb(double sample_freq_in, double sample_freq_out); public: ~direct_resampler_conditioner_cb(); unsigned int sample_freq_in() const { return d_sample_freq_in; } unsigned int sample_freq_out() const { return d_sample_freq_out; } void forecast(int noutput_items, gr_vector_int &ninput_items_required); int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_CS_H */ gnss-sdr-0.0.6/src/algorithms/resampler/CMakeLists.txt0000644000175000017500000000143212576764164022275 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks)gnss-sdr-0.0.6/src/algorithms/resampler/adapters/0000755000175000017500000000000012576764164021340 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/resampler/adapters/direct_resampler_conditioner.cc0000644000175000017500000001155512576764164027577 0ustar carlescarles/*! * \file direct_resampler_conditioner.cc * \brief Implementation of an adapter of a direct resampler conditioner block * to a SignalConditionerInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "direct_resampler_conditioner.h" #include #include #include #include "direct_resampler_conditioner_cc.h" #include "direct_resampler_conditioner_cs.h" #include "direct_resampler_conditioner_cb.h" #include "configuration_interface.h" using google::LogMessage; DirectResamplerConditioner::DirectResamplerConditioner( ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream) : role_(role), in_stream_(in_stream), out_stream_(out_stream) { std::string default_item_type = "short"; std::string default_dump_file = "./data/signal_conditioner.dat"; sample_freq_in_ = configuration->property(role_ + ".sample_freq_in", (double)4000000.0); sample_freq_out_ = configuration->property(role_ + ".sample_freq_out", (double)2048000.0); item_type_ = configuration->property(role + ".item_type", default_item_type); dump_ = configuration->property(role + ".dump", false); DLOG(INFO) << "dump_ is " << dump_; dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); resampler_ = direct_resampler_make_conditioner_cc(sample_freq_in_, sample_freq_out_); DLOG(INFO) << "sample_freq_in " << sample_freq_in_; DLOG(INFO) << "sample_freq_out" << sample_freq_out_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "resampler(" << resampler_->unique_id() << ")"; } else if (item_type_.compare("cshort") == 0) { item_size_ = sizeof(lv_16sc_t); resampler_ = direct_resampler_make_conditioner_cs(sample_freq_in_, sample_freq_out_); DLOG(INFO) << "sample_freq_in " << sample_freq_in_; DLOG(INFO) << "sample_freq_out" << sample_freq_out_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "resampler(" << resampler_->unique_id() << ")"; } else if (item_type_.compare("cbyte") == 0) { item_size_ = sizeof(lv_8sc_t); resampler_ = direct_resampler_make_conditioner_cb(sample_freq_in_, sample_freq_out_); DLOG(INFO) << "sample_freq_in " << sample_freq_in_; DLOG(INFO) << "sample_freq_out" << sample_freq_out_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "resampler(" << resampler_->unique_id() << ")"; } else { LOG(WARNING) << item_type_ << " unrecognized item type for resampler"; item_size_ = sizeof(short); } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } } DirectResamplerConditioner::~DirectResamplerConditioner() {} void DirectResamplerConditioner::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(resampler_, 0, file_sink_, 0); DLOG(INFO) << "connected resampler to file sink"; } else { DLOG(INFO) << "nothing to connect internally"; } } void DirectResamplerConditioner::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(resampler_, 0, file_sink_, 0); } } gr::basic_block_sptr DirectResamplerConditioner::get_left_block() { return resampler_; } gr::basic_block_sptr DirectResamplerConditioner::get_right_block() { return resampler_; } gnss-sdr-0.0.6/src/algorithms/resampler/adapters/CMakeLists.txt0000644000175000017500000000247112576764164024104 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(RESAMPLER_ADAPTER_SOURCES direct_resampler_conditioner.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/algorithms/resampler/gnuradio_blocks ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ) file(GLOB RESAMPLER_ADAPTER_HEADERS "*.h") add_library(resampler_adapters ${RESAMPLER_ADAPTER_SOURCES} ${RESAMPLER_ADAPTER_HEADERS}) source_group(Headers FILES ${RESAMPLER_ADAPTER_HEADERS}) target_link_libraries(resampler_adapters resampler_gr_blocks) gnss-sdr-0.0.6/src/algorithms/resampler/adapters/direct_resampler_conditioner.h0000644000175000017500000000510012576764164027426 0ustar carlescarles/*! * \file direct_resampler_conditioner.h * \brief Interface of an adapter of a direct resampler conditioner block * to a SignalConditionerInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_H_ #define GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_H_ #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief Interface of an adapter of a direct resampler conditioner block * to a SignalConditionerInterface */ class DirectResamplerConditioner: public GNSSBlockInterface { public: DirectResamplerConditioner(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream); virtual ~DirectResamplerConditioner(); std::string role() { return role_; } //! returns "Direct_Resampler" std::string implementation() { return "Direct_Resampler"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; std::string item_type_; size_t item_size_; bool dump_; std::string dump_filename_; double sample_freq_in_; double sample_freq_out_; gr::block_sptr resampler_; gr::block_sptr file_sink_; }; #endif /*GNSS_SDR_DIRECT_RESAMPLER_CONDITIONER_H_*/ gnss-sdr-0.0.6/src/algorithms/tracking/0000755000175000017500000000000012576764164017345 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/0000755000175000017500000000000012576764211022503 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.cc0000644000175000017500000007350112576764164032277 0ustar carlescarles/*! * \file galileo_e1_tcp_connector_tracking_cc.cc * \brief Implementation of a TCP connector block based on Code DLL + carrier PLL * \author David Pubill, 2012. dpubill(at)cttc.es * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_tcp_connector_tracking_cc.h" #include #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "galileo_e1_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "GPS_L1_CA.h" #include "Galileo_E1.h" #include "control_message_factory.h" #include "tcp_communication.h" #include "tcp_packet_data.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; galileo_e1_tcp_connector_tracking_cc_sptr galileo_e1_tcp_connector_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips, size_t port_ch0) { return galileo_e1_tcp_connector_tracking_cc_sptr(new Galileo_E1_Tcp_Connector_Tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, very_early_late_space_chips, port_ch0)); } void Galileo_E1_Tcp_Connector_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = (int)d_vector_length*2; // set the required available samples in each call } Galileo_E1_Tcp_Connector_Tracking_cc::Galileo_E1_Tcp_Connector_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips, size_t port_ch0): gr::block("Galileo_E1_Tcp_Connector_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { this->set_relative_rate(1.0/vector_length); // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; // Initialize tracking ========================================== //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) d_very_early_late_spc_chips = very_early_late_space_chips; // Define very-early-late offset (in chips) //--- TCP CONNECTOR variables -------------------------------------------------------- d_port_ch0 = port_ch0; d_port = 0; d_listen_connection = true; d_control_id = 0; // Initialization of local code replica // Get space for a vector with the sinboc(1,1) replica sampled 2x/chip d_ca_code = static_cast(volk_malloc(((2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 4)) * sizeof(gr_complex), volk_get_alignment())); d_very_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_very_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_carr_sign = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Very_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Very_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_chips = Galileo_E1_CODE_CHIP_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = (int)d_vector_length; // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["E"] = std::string("Galileo"); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_next_rem_code_phase_samples = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_acc_code_phase_secs = 0.0; d_code_phase_samples = 0; d_next_prn_length_samples = 0; d_carrier_doppler_hz = 0.0; } void Galileo_E1_Tcp_Connector_Tracking_cc::start_tracking() { d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; // generate local reference ALWAYS starting at chip 2 (2 samples per chip) galileo_e1_code_gen_complex_sampled(&d_ca_code[2], d_acquisition_gnss_synchro->Signal, false, d_acquisition_gnss_synchro->PRN, 2*Galileo_E1_CODE_CHIP_RATE_HZ, 0); // Fill head and tail d_ca_code[0] = d_ca_code[(int)(2*Galileo_E1_B_CODE_LENGTH_CHIPS)]; d_ca_code[1] = d_ca_code[(int)(2*Galileo_E1_B_CODE_LENGTH_CHIPS+1)]; d_ca_code[(int)(2*Galileo_E1_B_CODE_LENGTH_CHIPS+2)] = d_ca_code[2]; d_ca_code[(int)(2*Galileo_E1_B_CODE_LENGTH_CHIPS+3)] = d_ca_code[3]; d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0.0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; d_current_prn_length_samples = d_vector_length; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void Galileo_E1_Tcp_Connector_Tracking_cc::update_local_code() { double tcode_half_chips; float rem_code_phase_half_chips; int associated_chip_index; int code_length_half_chips = (int)(2*Galileo_E1_B_CODE_LENGTH_CHIPS); double code_phase_step_chips; double code_phase_step_half_chips; int early_late_spc_samples; int very_early_late_spc_samples; int epl_loop_length_samples; // unified loop for VE, E, P, L, VL code vectors code_phase_step_chips = ((double)d_code_freq_chips) / ((double)d_fs_in); code_phase_step_half_chips = (2.0*(double)d_code_freq_chips) / ((double)d_fs_in); rem_code_phase_half_chips = d_rem_code_phase_samples * (2*d_code_freq_chips / d_fs_in); tcode_half_chips = -(double)rem_code_phase_half_chips; early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); very_early_late_spc_samples = round(d_very_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + very_early_late_spc_samples*2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 2 + round(fmod(tcode_half_chips - 2*d_very_early_late_spc_chips, code_length_half_chips)); d_very_early_code[i] = d_ca_code[associated_chip_index]; tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; } memcpy(d_early_code, &d_very_early_code[very_early_late_spc_samples - early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_prompt_code, &d_very_early_code[very_early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_late_code, &d_very_early_code[2*very_early_late_spc_samples - early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_very_late_code, &d_very_early_code[2*very_early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); } void Galileo_E1_Tcp_Connector_Tracking_cc::update_local_carrier() { float phase_rad, phase_step_rad; // Compute the carrier phase step for the K-1 carrier Doppler estimation phase_step_rad = (float)GPS_TWO_PI*d_carrier_doppler_hz / (float)d_fs_in; // Initialize the carrier phase with the remnant carrier phase of the K-2 loop phase_rad = d_rem_carr_phase_rad; for(int i = 0; i < d_current_prn_length_samples; i++) { d_carr_sign[i] = gr_complex(cos(phase_rad), -sin(phase_rad)); phase_rad += phase_step_rad; } } Galileo_E1_Tcp_Connector_Tracking_cc::~Galileo_E1_Tcp_Connector_Tracking_cc() { d_dump_file.close(); volk_free(d_very_early_code); volk_free(d_early_code); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_very_late_code); volk_free(d_carr_sign); volk_free(d_Very_Early); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); volk_free(d_Very_Late); volk_free(d_ca_code); delete[] d_Prompt_buffer; d_tcp_com.close_tcp_connection(d_port); } int Galileo_E1_Tcp_Connector_Tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // process vars float carr_error_filt_hz; float code_error_filt_chips; tcp_packet_data tcp_data; if (d_enable_tracking == true) { if (d_pull_in == true) { /* * Signal alignment (skip samples until the incoming signal is aligned with local replica) */ int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod((float)acq_to_trk_delay_samples, (float)d_current_prn_length_samples); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; consume_each(samples_offset); //shift input to perform alignment with local replica return 1; } // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Generate local code and carrier replicas (using \hat{f}_d(k-1)) update_local_code(); update_local_carrier(); // perform Early, Prompt and Late correlation d_correlator.Carrier_wipeoff_and_VEPL_volk(d_current_prn_length_samples, in, d_carr_sign, d_very_early_code, d_early_code, d_prompt_code, d_late_code, d_very_late_code, d_Very_Early, d_Early, d_Prompt, d_Late, d_Very_Late); // ################## TCP CONNECTOR ########################################################## //! Variable used for control d_control_id++; //! Send and receive a TCP packet boost::array tx_variables_array = {{d_control_id, (*d_Very_Early).real(), (*d_Very_Early).imag(), (*d_Early).real(), (*d_Early).imag(), (*d_Late).real(), (*d_Late).imag(), (*d_Very_Late).real(), (*d_Very_Late).imag(), (*d_Prompt).real(), (*d_Prompt).imag(), d_acq_carrier_doppler_hz, 1}}; d_tcp_com.send_receive_tcp_packet_galileo_e1(tx_variables_array, &tcp_data); // ################## PLL ########################################################## // PLL discriminator, carrier loop filter implementation and NCO command generation (TCP_connector) carr_error_filt_hz = tcp_data.proc_pack_carr_error; // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = Galileo_E1_CODE_CHIP_RATE_HZ + ((d_carrier_doppler_hz * Galileo_E1_CODE_CHIP_RATE_HZ) / Galileo_E1_FREQ_HZ); //carrier phase accumulator for (K) doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI*d_carrier_doppler_hz*Galileo_E1_CODE_PERIOD; //remnant carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI*d_carrier_doppler_hz*Galileo_E1_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI); // ################## DLL ########################################################## // DLL discriminator, carrier loop filter implementation and NCO command generation (TCP_connector) code_error_filt_chips = tcp_data.proc_pack_code_error; //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (Galileo_E1_CODE_PERIOD * code_error_filt_chips) / Galileo_E1_CODE_CHIP_RATE_HZ; //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer lenght based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / (double)d_code_freq_chips; T_prn_seconds = T_chip_seconds * Galileo_E1_B_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * (double)d_fs_in; K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * (double)d_fs_in; d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, Galileo_E1_B_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = (double)(*d_Prompt).real(); current_synchro_data.Prompt_Q = (double)(*d_Prompt).imag(); // Tracking_timestamp_secs is aligned with the PRN start sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_next_prn_length_samples + (double)d_next_rem_code_phase_samples)/(double)d_fs_in; current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_rem_code_phase_samples)/(double)d_fs_in; d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = (double)d_acc_carrier_phase_rad; current_synchro_data.Carrier_Doppler_hz = (double)d_carrier_doppler_hz; current_synchro_data.CN0_dB_hz = (double)d_CN0_SNV_dB_Hz; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; LOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } else { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); LOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output streams pointer // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; //! When tracking is disabled an array of 1's is sent to maintain the TCP connection boost::array tx_variables_array = {{1,1,1,1,1,1,1,1,1,1,1,1,0}}; d_tcp_com.send_receive_tcp_packet_galileo_e1(tx_variables_array, &tcp_data); } if(d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file float prompt_I; float prompt_Q; float tmp_VE, tmp_E, tmp_P, tmp_L, tmp_VL; float tmp_float; tmp_float=0; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_VE = std::abs(*d_Very_Early); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); tmp_VL = std::abs(*d_Very_Late); try { // EPR d_dump_file.write((char*)&tmp_VE, sizeof(float)); d_dump_file.write((char*)&tmp_E, sizeof(float)); d_dump_file.write((char*)&tmp_P, sizeof(float)); d_dump_file.write((char*)&tmp_L, sizeof(float)); d_dump_file.write((char*)&tmp_VL, sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write((char*)&prompt_I, sizeof(float)); d_dump_file.write((char*)&prompt_Q, sizeof(float)); // PRN start sample stamp d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); // carrier and code frequency d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); d_dump_file.write((char*)&d_code_freq_chips, sizeof(float)); //PLL commands d_dump_file.write((char*)&tmp_float, sizeof(float)); d_dump_file.write((char*)&carr_error_filt_hz, sizeof(float)); //DLL commands d_dump_file.write((char*)&tmp_float, sizeof(float)); d_dump_file.write((char*)&code_error_filt_chips, sizeof(float)); // CN0 and carrier lock test d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_double = (double)(d_sample_counter+d_current_prn_length_samples); d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } consume_each(d_current_prn_length_samples); // this is needed in gr::block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false } void Galileo_E1_Tcp_Connector_Tracking_cc::set_channel(unsigned int channel) { d_channel = channel; LOG(INFO) << "Tracking Channel set to " << d_channel; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_filename.append(boost::lexical_cast(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } //! Listen for connections on a TCP port if (d_listen_connection == true) { d_port = d_port_ch0 + d_channel; d_listen_connection = d_tcp_com.listen_tcp_connection(d_port, d_port_ch0); } } void Galileo_E1_Tcp_Connector_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Galileo_E1_Tcp_Connector_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; // Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); //DLOG(INFO) << "Tracking code phase set to " << d_acq_code_phase_samples; //DLOG(INFO) << "Tracking carrier doppler set to " << d_acq_carrier_doppler_hz; //DLOG(INFO) << "Tracking Satellite set to " << d_satellite; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.cc0000644000175000017500000007371512576764164031554 0ustar carlescarles/*! * \file gps_l1_ca_dll_fll_pll_tracking_cc.cc * \brief Implementation of a code DLL + carrier FLL/PLL tracking block * \author Javier Arribas, 2011. jarribas(at)cttc.es * * This file implements the code Delay Locked Loop (DLL) + carrier * Phase Locked Loop (PLL) helped with a carrier Frequency Locked Loop (FLL) * according to the algorithms described in: * E.D. Kaplan and C. Hegarty, Understanding GPS. Principles and * Applications, Second Edition, Artech House Publishers, 2005. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_fll_pll_tracking_cc.h" #include #include #include #include #include #include #include "gnss_synchro.h" #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "tracking_FLL_PLL_filter.h" #include "control_message_factory.h" #include "gnss_flowgraph.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; gps_l1_ca_dll_fll_pll_tracking_cc_sptr gps_l1_ca_dll_fll_pll_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { return gps_l1_ca_dll_fll_pll_tracking_cc_sptr(new Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, order, fll_bw_hz, pll_bw_hz,dll_bw_hz, early_late_space_chips)); } void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = d_vector_length * 2; //set the required available samples in each call } Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : gr::block("Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_acquisition_gnss_synchro = NULL; d_if_freq = static_cast(if_freq); d_fs_in = static_cast(fs_in); d_vector_length = vector_length; d_early_late_spc_chips = static_cast(early_late_space_chips); // Define early-late offset (in chips) d_dump_filename = dump_filename; // Initialize tracking variables ========================================== d_carrier_loop_filter.set_params(fll_bw_hz, pll_bw_hz,order); d_code_loop_filter = Tracking_2nd_DLL_filter(GPS_L1_CA_CODE_PERIOD); d_code_loop_filter.set_DLL_BW(dll_bw_hz); // Get space for a vector with the C/A code replica sampled 1x/chip d_ca_code = static_cast(volk_malloc((GPS_L1_CA_CODE_LENGTH_CHIPS + 2) * sizeof(gr_complex), volk_get_alignment())); // Get space for the resampled early / prompt / late local replicas d_early_code = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); // space for carrier wipeoff and signal baseband vectors d_carr_sign = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); // sample synchronization d_sample_counter = 0; d_acq_sample_stamp = 0; d_last_seg = 0;// this is for debug output only d_code_phase_samples = 0; d_enable_tracking = false; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["G"] = std::string("GPS"); systemName["R"] = std::string("GLONASS"); systemName["S"] = std::string("SBAS"); systemName["E"] = std::string("Galileo"); systemName["C"] = std::string("Compass"); d_channel_internal_queue = 0; //d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0; d_code_freq_hz = 0.0; d_rem_carr_phase = 0.0; d_rem_code_phase_samples = 0.0; d_acq_code_phase_samples = 0; d_acq_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_acc_code_phase_samples = 0; d_FLL_discriminator_hz = 0.0; d_pull_in = false; d_FLL_wait = 1; } void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk */ d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; acq_trk_diff_samples = static_cast(d_sample_counter) - static_cast(d_acq_sample_stamp); acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / d_fs_in; //doppler effect // Fd=(C/(C+Vr))*F double radial_velocity; radial_velocity = (GPS_L1_FREQ_HZ + d_acq_carrier_doppler_hz) / GPS_L1_FREQ_HZ; // new chip and prn sequence periods based on acq Doppler double T_chip_mod_seconds; double T_prn_mod_seconds; double T_prn_mod_samples; d_code_freq_hz = radial_velocity * GPS_L1_CA_CODE_RATE_HZ; T_chip_mod_seconds = 1 / d_code_freq_hz; T_prn_mod_seconds = T_chip_mod_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_mod_samples = T_prn_mod_seconds * d_fs_in; d_current_prn_length_samples = round(T_prn_mod_samples); double T_prn_true_seconds = GPS_L1_CA_CODE_LENGTH_CHIPS / GPS_L1_CA_CODE_RATE_HZ; double T_prn_true_samples = T_prn_true_seconds * d_fs_in; double T_prn_diff_seconds; T_prn_diff_seconds = T_prn_true_seconds - T_prn_mod_seconds; double N_prn_diff; N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds; double corrected_acq_phase_samples, delay_correction_samples; corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * d_fs_in), T_prn_true_samples); if (corrected_acq_phase_samples < 0) { corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples; } delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples; d_acq_code_phase_samples = corrected_acq_phase_samples; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(d_acq_carrier_doppler_hz); d_FLL_wait = 1; // generate local reference ALWAYS starting at chip 1 (1 sample per chip) gps_l1_ca_code_gen_complex(&d_ca_code[1], d_acquisition_gnss_synchro->PRN, 0); d_ca_code[0] = d_ca_code[static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS)]; d_ca_code[static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS) + 1] = d_ca_code[1]; d_carrier_lock_fail_counter = 0; d_Prompt_prev = 0; d_rem_code_phase_samples = 0; d_rem_carr_phase = 0; d_FLL_discriminator_hz = 0; d_rem_code_phase_samples = 0; d_acc_carrier_phase_rad = 0; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking Gnss_Satellite(systemName[&d_acquisition_gnss_synchro->System], d_acquisition_gnss_synchro->PRN) d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]= " << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]= " << d_acq_code_phase_samples << std::endl; } void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::update_local_code() { double tcode_chips; double rem_code_phase_chips; double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; int associated_chip_index; int code_length_chips = static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS); code_phase_step_chips = d_code_freq_hz / d_fs_in; rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_hz / d_fs_in); // unified loop for E, P, L code vectors tcode_chips = -rem_code_phase_chips; // Alternative EPL code generation (40% of speed improvement!) early_late_spc_samples = round(d_early_late_spc_chips/code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + early_late_spc_samples*2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); d_early_code[i] = d_ca_code[associated_chip_index]; tcode_chips = tcode_chips + code_phase_step_chips; } memcpy(d_prompt_code,&d_early_code[early_late_spc_samples],d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_late_code,&d_early_code[early_late_spc_samples*2],d_current_prn_length_samples* sizeof(gr_complex)); // for (int i=0; itelemetry_decoder Gnss_Synchro current_synchro_data; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; /* * Receiver signal alignment */ if (d_pull_in == true) { int samples_offset; double acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); // /todo: Check if the sample counter sent to the next block as a time reference should be incremented AFTER sended or BEFORE d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; consume_each(samples_offset); //shift input to perform alignment with local replica // make an output to not stop the rest of the processing blocks current_synchro_data.Prompt_I = 0.0; current_synchro_data.Prompt_Q = 0.0; current_synchro_data.Tracking_timestamp_secs = static_cast(d_sample_counter) / d_fs_in; current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; return 1; } update_local_code(); update_local_carrier(); // perform Early, Prompt and Late correlation d_correlator.Carrier_wipeoff_and_EPL_volk(d_current_prn_length_samples, in, d_carr_sign, d_early_code, d_prompt_code, d_late_code, d_Early, d_Prompt, d_Late); // check for samples consistency (this should be done before in the receiver / here only if the source is a file) if (std::isnan((*d_Prompt).real()) == true or std::isnan((*d_Prompt).imag()) == true )// or std::isinf(in[i].real())==true or std::isinf(in[i].imag())==true) { const int samples_available = ninput_items[0]; d_sample_counter = d_sample_counter + samples_available; LOG(WARNING) << "Detected NaN samples at sample number " << d_sample_counter; consume_each(samples_available); // make an output to not stop the rest of the processing blocks current_synchro_data.Prompt_I = 0.0; current_synchro_data.Prompt_Q = 0.0; current_synchro_data.Tracking_timestamp_secs = static_cast(d_sample_counter) / d_fs_in; current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; return 1; } /* * DLL, FLL, and PLL discriminators */ // Compute DLL error code_error_chips = dll_nc_e_minus_l_normalized(*d_Early, *d_Late); // Compute DLL filtered error code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //compute FLL error correlation_time_s = (static_cast(d_current_prn_length_samples)) / d_fs_in; if (d_FLL_wait == 1) { d_Prompt_prev = *d_Prompt; d_FLL_wait = 0; } else { d_FLL_discriminator_hz = fll_four_quadrant_atan(d_Prompt_prev, *d_Prompt, 0, correlation_time_s) / GPS_TWO_PI; d_Prompt_prev = *d_Prompt; d_FLL_wait = 1; } // Compute PLL error PLL_discriminator_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / GPS_TWO_PI; /* * DLL and FLL+PLL filter and get current carrier Doppler and code frequency */ carr_nco_hz = d_carrier_loop_filter.get_carrier_error(d_FLL_discriminator_hz, PLL_discriminator_hz, correlation_time_s); d_carrier_doppler_hz = d_if_freq + carr_nco_hz; d_code_freq_hz = GPS_L1_CA_CODE_RATE_HZ + (((d_carrier_doppler_hz + d_if_freq) * GPS_L1_CA_CODE_RATE_HZ) / GPS_L1_FREQ_HZ); /*! * \todo Improve the lock detection algorithm! */ // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; //d_CN0_SNV_dB_Hz = gps_l1_ca_CN0_SNV(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in); d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GPS_L1_CA_CODE_LENGTH_CHIPS); d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // ###### TRACKING UNLOCK NOTIFICATION ##### if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter/d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; LOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } else { if (floor(d_sample_counter/d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter/d_fs_in); LOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } //predict the next loop PRN period length prediction double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; T_chip_seconds = 1 / static_cast(d_code_freq_hz); T_prn_seconds = T_chip_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * d_fs_in; float code_error_filt_samples; code_error_filt_samples = T_prn_seconds * code_error_filt_chips * T_chip_seconds * static_cast(d_fs_in); //[seconds] d_acc_code_phase_samples = d_acc_code_phase_samples + code_error_filt_samples; K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_samples; d_current_prn_length_samples = round(K_blk_samples); //round to a discrete sample //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the PRN start sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples) / (double)d_fs_in; current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples))/static_cast(d_fs_in); d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad; current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz; current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz; current_synchro_data.Flag_valid_tracking = true; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output streams pointer d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; } if(d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file float prompt_I; float prompt_Q; float tmp_E, tmp_P, tmp_L; float tmp_float; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); try { // EPR d_dump_file.write((char*)&tmp_E, sizeof(float)); d_dump_file.write((char*)&tmp_P, sizeof(float)); d_dump_file.write((char*)&tmp_L, sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write((char*)&prompt_I, sizeof(float)); d_dump_file.write((char*)&prompt_Q, sizeof(float)); // PRN start sample stamp d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); // accumulated carrier phase tmp_float = (float)d_acc_carrier_phase_rad; d_dump_file.write((char*)&tmp_float, sizeof(float)); // carrier and code frequency tmp_float = (float)d_carrier_doppler_hz; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_float = (float)d_code_freq_hz; d_dump_file.write((char*)&tmp_float, sizeof(float)); //PLL commands tmp_float = (float)PLL_discriminator_hz; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_float = (float)carr_nco_hz; d_dump_file.write((char*)&tmp_float, sizeof(float)); //DLL commands tmp_float = (float)code_error_chips; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_float = (float)code_error_filt_chips; d_dump_file.write((char*)&tmp_float, sizeof(float)); // CN0 and carrier lock test tmp_float = (float)d_CN0_SNV_dB_Hz; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_float = (float)d_carrier_lock_test; d_dump_file.write((char*)&tmp_float, sizeof(float)); // AUX vars (for debug purposes) tmp_float = (float)d_rem_code_phase_samples; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_double = (double)(d_sample_counter + d_current_prn_length_samples); d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (std::ifstream::failure e) { LOG(INFO) << "Exception writing trk dump file "<< e.what() << std::endl; } } consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false } void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::set_channel(unsigned int channel) { d_channel = channel; LOG(INFO) << "Tracking Channel set to " << d_channel; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_filename.append(boost::lexical_cast(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } } void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro=p_gnss_synchro; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.h0000755000175000017500000001432312576764164031746 0ustar carlescarles/*! * \file galileo_e1_dll_pll_veml_tracking_cc.h * \brief Implementation of a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_DLL_PLL_VEML_TRACKING_CC_H #define GNSS_SDR_GALILEO_E1_DLL_PLL_VEML_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" class galileo_e1_dll_pll_veml_tracking_cc; typedef boost::shared_ptr galileo_e1_dll_pll_veml_tracking_cc_sptr; galileo_e1_dll_pll_veml_tracking_cc_sptr galileo_e1_dll_pll_veml_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips); /*! * \brief This class implements a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals */ class galileo_e1_dll_pll_veml_tracking_cc: public gr::block { public: ~galileo_e1_dll_pll_veml_tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend galileo_e1_dll_pll_veml_tracking_cc_sptr galileo_e1_dll_pll_veml_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips); galileo_e1_dll_pll_veml_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; float d_early_late_spc_chips; float d_very_early_late_spc_chips; gr_complex* d_ca_code; gr_complex* d_very_early_code; gr_complex* d_early_code; gr_complex* d_prompt_code; gr_complex* d_late_code; gr_complex* d_very_late_code; gr_complex* d_carr_sign; gr_complex *d_Very_Early; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; gr_complex *d_Very_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; double d_acc_carrier_phase_rad; double d_acc_code_phase_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GALILEO_E1_DLL_PLL_VEML_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.h0000644000175000017500000001361412576764164031424 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking_gpu_cc.h * \brief Implementation of a code DLL + carrier PLL tracking block, GPU ACCELERATED * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_GPU_CC_H #define GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_GPU_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_sdr_signal_processing.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "cuda_multicorrelator.h" class Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc; typedef boost::shared_ptr gps_l1_ca_dll_pll_tracking_gpu_cc_sptr; gps_l1_ca_dll_pll_tracking_gpu_cc_sptr gps_l1_ca_dll_pll_make_tracking_gpu_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); /*! * \brief This class implements a DLL + PLL tracking loop block */ class Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc: public gr::block { public: ~Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l1_ca_dll_pll_tracking_gpu_cc_sptr gps_l1_ca_dll_pll_make_tracking_gpu_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; double d_early_late_spc_chips; //GPU HOST PINNED MEMORY IN/OUT VECTORS gr_complex* in_gpu; gr_complex* d_carr_sign_gpu; gr_complex* d_local_codes_gpu; float* d_local_code_shift_chips; gr_complex* d_corr_outs_gpu; cuda_multicorrelator *multicorrelator_gpu; gr_complex* d_ca_code; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; float d_acc_carrier_phase_rad; float d_code_phase_samples; float d_acc_code_phase_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_GPU_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000475012576764211025251 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # if(ENABLE_CUDA) set(OPT_TRACKING_BLOCKS ${OPT_TRACKING_BLOCKS} gps_l1_ca_dll_pll_tracking_gpu_cc.cc) set(OPT_TRACKING_INCLUDES ${OPT_TRACKING_INCLUDES} ${CUDA_INCLUDE_DIRS}) set(OPT_TRACKING_LIBRARIES ${OPT_TRACKING_LIBRARIES} ${CUDA_LIBRARIES}) endif(ENABLE_CUDA) set(TRACKING_GR_BLOCKS_SOURCES galileo_e1_dll_pll_veml_tracking_cc.cc galileo_volk_e1_dll_pll_veml_tracking_cc.cc galileo_e1_tcp_connector_tracking_cc.cc gps_l1_ca_dll_fll_pll_tracking_cc.cc gps_l1_ca_dll_pll_optim_tracking_cc.cc gps_l1_ca_dll_pll_tracking_cc.cc gps_l1_ca_tcp_connector_tracking_cc.cc galileo_e5a_dll_pll_tracking_cc.cc gps_l2_m_dll_pll_tracking_cc.cc ${OPT_TRACKING_BLOCKS} ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/libs ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_GNSSSDR_INCLUDE_DIRS} ${OPT_TRACKING_INCLUDES} ) if(ENABLE_GENERIC_ARCH) add_definitions( -DGENERIC_ARCH=1 ) endif(ENABLE_GENERIC_ARCH) file(GLOB TRACKING_GR_BLOCKS_HEADERS "*.h") add_library(tracking_gr_blocks ${TRACKING_GR_BLOCKS_SOURCES} ${TRACKING_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${TRACKING_GR_BLOCKS_HEADERS}) target_link_libraries(tracking_gr_blocks tracking_lib ${GNURADIO_RUNTIME_LIBRARIES} gnss_sp_libs ${Boost_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ${OPT_TRACKING_LIBRARIES}) if(NOT VOLK_GNSSSDR_FOUND) add_dependencies(tracking_gr_blocks volk_gnsssdr_module) endif(NOT VOLK_GNSSSDR_FOUND) gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_fll_pll_tracking_cc.h0000644000175000017500000001444512576764164031411 0ustar carlescarles/*! * \file gps_l1_ca_dll_fll_pll_tracking_cc.h * \brief Interface of a code DLL + carrier FLL/PLL tracking block * \author Javier Arribas, 2011. jarribas(at)cttc.es * * This is the interface of a code Delay Locked Loop (DLL) + * carrier Phase Locked Loop (PLL) helped with a carrier Frequency Locked * Loop (FLL) according to the algorithms described in: * E.D. Kaplan and C. Hegarty, Understanding GPS. Principles and * Applications, Second Edition, Artech House Publishers, 2005. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_FLL_PLL_TRACKING_CC_H #define GNSS_SDR_GPS_L1_CA_DLL_FLL_PLL_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_sdr_signal_processing.h" #include "tracking_FLL_PLL_filter.h" #include "tracking_2nd_DLL_filter.h" #include "gnss_synchro.h" #include "correlator.h" class Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc; typedef boost::shared_ptr gps_l1_ca_dll_fll_pll_tracking_cc_sptr; gps_l1_ca_dll_fll_pll_tracking_cc_sptr gps_l1_ca_dll_fll_pll_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); /*! * \brief This class implements a DLL and a FLL assisted PLL tracking loop block */ class Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc: public gr::block { public: ~Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc(); void set_channel(unsigned int channel); void start_tracking(); void update_local_code(); void update_local_carrier(); void set_FLL_and_PLL_BW(float fll_bw_hz,float pll_bw_hz); /* * \brief Satellite signal synchronization parameters uses shared memory between acquisition and tracking */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void set_channel_queue(concurrent_queue *channel_internal_queue); /* * \brief just like gr_block::general_work, only this arranges to call consume_each for you * * The user must override work to define the signal processing code */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l1_ca_dll_fll_pll_tracking_cc_sptr gps_l1_ca_dll_fll_pll_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); Gps_L1_Ca_Dll_Fll_Pll_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, int order, float fll_bw_hz, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); void CN0_estimation_and_lock_detectors(); // class private vars Gnss_Synchro* d_acquisition_gnss_synchro; boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; unsigned int d_channel; int d_last_seg; double d_if_freq; double d_fs_in; gr_complex* d_ca_code; gr_complex* d_early_code; gr_complex* d_late_code; gr_complex* d_prompt_code; gr_complex* d_carr_sign; gr_complex* d_Early; gr_complex* d_Prompt; gr_complex* d_Late; gr_complex d_Prompt_prev; double d_early_late_spc_chips; double d_carrier_doppler_hz; double d_code_freq_hz; double d_code_phase_samples; int d_current_prn_length_samples; //int d_next_prn_length_samples; int d_FLL_wait; double d_rem_carr_phase; double d_rem_code_phase_samples; //double d_next_rem_code_phase_samples; bool d_pull_in; // acquisition double d_acq_code_phase_samples; double d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // FLL + PLL filter double d_FLL_discriminator_hz; // This is a class variable because FLL needs to have memory Tracking_FLL_PLL_filter d_carrier_loop_filter; double d_acc_carrier_phase_rad; double d_acc_code_phase_samples; Tracking_2nd_DLL_filter d_code_loop_filter; unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; double d_carrier_lock_test; double d_CN0_SNV_dB_Hz; double d_carrier_lock_threshold; int d_carrier_lock_fail_counter; bool d_enable_tracking; std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GPS_L1_CA_DLL_FLL_PLL_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.h0000644000175000017500000001324512576764164030423 0ustar carlescarles/*! * \file gps_l2_m_dll_pll_tracking_cc.h * \brief Interface of a code DLL + carrier PLL tracking block * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L2_M_DLL_PLL_TRACKING_CC_H #define GNSS_SDR_GPS_L2_M_DLL_PLL_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" class gps_l2_m_dll_pll_tracking_cc; typedef boost::shared_ptr gps_l2_m_dll_pll_tracking_cc_sptr; gps_l2_m_dll_pll_tracking_cc_sptr gps_l2_m_dll_pll_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); /*! * \brief This class implements a DLL + PLL tracking loop block */ class gps_l2_m_dll_pll_tracking_cc: public gr::block { public: ~gps_l2_m_dll_pll_tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l2_m_dll_pll_tracking_cc_sptr gps_l2_m_dll_pll_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); gps_l2_m_dll_pll_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; double d_early_late_spc_chips; gr_complex* d_ca_code; gr_complex* d_early_code; gr_complex* d_late_code; gr_complex* d_prompt_code; gr_complex* d_carr_sign; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; float d_acc_carrier_phase_rad; float d_code_phase_samples; float d_acc_code_phase_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GPS_L2_M_DLL_PLL_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_volk_e1_dll_pll_veml_tracking_cc.h0000644000175000017500000001660712576764164033005 0ustar carlescarles/*! * \file galileo_volk_e1_dll_pll_veml_tracking_cc.h * \brief Implementation of a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALIELEO_VOLK_E1_DLL_PLL_VEML_TRACKING_CC_H #define GNSS_SDR_GALIELEO_VOLK_E1_DLL_PLL_VEML_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" class galileo_volk_e1_dll_pll_veml_tracking_cc; typedef boost::shared_ptr galileo_volk_e1_dll_pll_veml_tracking_cc_sptr; galileo_volk_e1_dll_pll_veml_tracking_cc_sptr galileo_volk_e1_dll_pll_veml_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips); /*! * \brief This class implements a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals */ class galileo_volk_e1_dll_pll_veml_tracking_cc: public gr::block { public: ~galileo_volk_e1_dll_pll_veml_tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend galileo_volk_e1_dll_pll_veml_tracking_cc_sptr galileo_volk_e1_dll_pll_veml_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips); galileo_volk_e1_dll_pll_veml_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; float d_early_late_spc_chips; float d_very_early_late_spc_chips; gr_complex* d_ca_code; gr_complex* d_very_early_code; gr_complex* d_early_code; gr_complex* d_prompt_code; gr_complex* d_late_code; gr_complex* d_very_late_code; gr_complex* d_carr_sign; lv_16sc_t* d_very_early_code16; lv_16sc_t* d_early_code16; lv_16sc_t* d_prompt_code16; lv_16sc_t* d_late_code16; lv_16sc_t* d_very_late_code16; lv_16sc_t* d_carr_sign16; lv_16sc_t* in16; lv_8sc_t* d_very_early_code8; lv_8sc_t* d_early_code8; lv_8sc_t* d_prompt_code8; lv_8sc_t* d_late_code8; lv_8sc_t* d_very_late_code8; lv_8sc_t* d_carr_sign8; lv_8sc_t* in8; gr_complex *d_Very_Early; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; gr_complex *d_Very_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; double d_acc_carrier_phase_rad; double d_acc_code_phase_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GALIELEO_VOLK_E1_DLL_PLL_VEML_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.cc0000644000175000017500000007622412576764164032133 0ustar carlescarles/*! * \file gps_l1_ca_tcp_connector_tracking_cc.cc * \brief Implementation of a TCP connector block based on Code DLL + carrier PLL * \author David Pubill, 2012. dpubill(at)cttc.es * Javier Arribas, 2011. jarribas(at)cttc.es * * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_tcp_connector_tracking_cc.h" #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "gps_sdr_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "GPS_L1_CA.h" #include "control_message_factory.h" #include "tcp_communication.h" #include "tcp_packet_data.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; gps_l1_ca_tcp_connector_tracking_cc_sptr gps_l1_ca_tcp_connector_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, size_t port_ch0) { return gps_l1_ca_tcp_connector_tracking_cc_sptr(new Gps_L1_Ca_Tcp_Connector_Tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, port_ch0)); } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = (int)d_vector_length*2; //set the required available samples in each call } Gps_L1_Ca_Tcp_Connector_Tracking_cc::Gps_L1_Ca_Tcp_Connector_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, size_t port_ch0) : gr::block("Gps_L1_Ca_Tcp_Connector_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; // Initialize tracking ========================================== d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) //--- TCP CONNECTOR variables -------------------------------------------------------- d_port_ch0 = port_ch0; d_port = 0; d_listen_connection = true; d_control_id = 0; // Initialization of local code replica // Get space for a vector with the C/A code replica sampled 1x/chip d_ca_code = static_cast(volk_malloc((GPS_L1_CA_CODE_LENGTH_CHIPS + 2) * sizeof(gr_complex), volk_get_alignment())); d_carr_sign = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // Get space for the resampled early / prompt / late local replicas d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // space for carrier wipeoff and signal baseband vectors d_carr_sign = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_hz = GPS_L1_CA_CODE_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = (int)d_vector_length; // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["G"] = std::string("GPS"); systemName["R"] = std::string("GLONASS"); systemName["S"] = std::string("SBAS"); systemName["E"] = std::string("Galileo"); systemName["C"] = std::string("Compass"); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_next_rem_code_phase_samples = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_code_phase_samples = 0; d_next_prn_length_samples = 0; d_code_phase_step_chips = 0.0; } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk */ d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; // jarribas: this patch correct a situation where the tracking sample counter // is equal to 0 (remains in the initial state) at the first acquisition to tracking transition // of the receiver operation when is connecting to simulink server. // if (d_sample_counterPRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::update_local_code() { double tcode_chips; double rem_code_phase_chips; int associated_chip_index; int code_length_chips = (int)GPS_L1_CA_CODE_LENGTH_CHIPS; double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; // unified loop for E, P, L code vectors code_phase_step_chips = ((double)d_code_freq_hz) / ((double)d_fs_in); rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_hz / d_fs_in); tcode_chips = -rem_code_phase_chips; // Alternative EPL code generation (40% of speed improvement!) early_late_spc_samples = round(d_early_late_spc_chips/code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples+early_late_spc_samples*2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); d_early_code[i] = d_ca_code[associated_chip_index]; tcode_chips = tcode_chips + d_code_phase_step_chips; } memcpy(d_prompt_code,&d_early_code[early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_late_code,&d_early_code[early_late_spc_samples*2], d_current_prn_length_samples* sizeof(gr_complex)); } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::update_local_carrier() { float phase_rad, phase_step_rad; phase_step_rad = (float)GPS_TWO_PI*d_carrier_doppler_hz / (float)d_fs_in; phase_rad = d_rem_carr_phase_rad; for(int i = 0; i < d_current_prn_length_samples; i++) { d_carr_sign[i] = gr_complex(cos(phase_rad), -sin(phase_rad)); phase_rad += phase_step_rad; } d_rem_carr_phase_rad = fmod(phase_rad, GPS_TWO_PI); d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + d_rem_carr_phase_rad; } Gps_L1_Ca_Tcp_Connector_Tracking_cc::~Gps_L1_Ca_Tcp_Connector_Tracking_cc() { d_dump_file.close(); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_early_code); volk_free(d_carr_sign); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); volk_free(d_ca_code); delete[] d_Prompt_buffer; d_tcp_com.close_tcp_connection(d_port); } int Gps_L1_Ca_Tcp_Connector_Tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // process vars float carr_error; float carr_nco; float code_error; float code_nco; tcp_packet_data tcp_data; if (d_enable_tracking == true) { /* * Receiver signal alignment */ if (d_pull_in == true) { int samples_offset; // 28/11/2011 ACQ to TRK transition BUG CORRECTION float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_next_prn_length_samples - fmod((float)acq_to_trk_delay_samples, (float)d_next_prn_length_samples); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); // /todo: Check if the sample counter sent to the next block as a time reference should be incremented AFTER sended or BEFORE d_sample_counter_seconds = d_sample_counter_seconds + (((double)samples_offset) / (double)d_fs_in); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; consume_each(samples_offset); //shift input to perform alignement with local replica return 1; } // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; const gr_complex* in = (gr_complex*) input_items[0]; //PRN start block alignement Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Update the prn length based on code freq (variable) and // sampling frequency (fixed) // variable code PRN sample block size d_current_prn_length_samples = d_next_prn_length_samples; update_local_code(); update_local_carrier(); // perform Early, Prompt and Late correlation d_correlator.Carrier_wipeoff_and_EPL_volk(d_current_prn_length_samples, in, d_carr_sign, d_early_code, d_prompt_code, d_late_code, d_Early, d_Prompt, d_Late); // check for samples consistency (this should be done before in the receiver / here only if the source is a file) if (std::isnan((*d_Prompt).real()) == true or std::isnan((*d_Prompt).imag()) == true )// or std::isinf(in[i].real())==true or std::isinf(in[i].imag())==true) { const int samples_available = ninput_items[0]; d_sample_counter = d_sample_counter + samples_available; LOG(WARNING) << "Detected NaN samples at sample number " << d_sample_counter; consume_each(samples_available); // make an output to not stop the rest of the processing blocks current_synchro_data.Prompt_I = 0.0; current_synchro_data.Prompt_Q = 0.0; current_synchro_data.Tracking_timestamp_secs = d_sample_counter_seconds; current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; return 1; } //! Variable used for control d_control_id++; //! Send and receive a TCP packet boost::array tx_variables_array = {{d_control_id, (*d_Early).real(), (*d_Early).imag(), (*d_Late).real(), (*d_Late).imag(), (*d_Prompt).real(), (*d_Prompt).imag(), d_acq_carrier_doppler_hz, 1}}; d_tcp_com.send_receive_tcp_packet_gps_l1_ca(tx_variables_array, &tcp_data); //! Recover the tracking data code_error = tcp_data.proc_pack_code_error; carr_error = tcp_data.proc_pack_carr_error; // Modify carrier freq based on NCO command d_carrier_doppler_hz = tcp_data.proc_pack_carrier_doppler_hz; // Modify code freq based on NCO command code_nco = 1/(1/GPS_L1_CA_CODE_RATE_HZ - code_error/GPS_L1_CA_CODE_LENGTH_CHIPS); d_code_freq_hz = code_nco; // Update the phasestep based on code freq (variable) and // sampling frequency (fixed) d_code_phase_step_chips = d_code_freq_hz / (float)d_fs_in; //[chips] // variable code PRN sample block size double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; T_chip_seconds = 1 / (double)d_code_freq_hz; T_prn_seconds = T_chip_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * (double)d_fs_in; d_rem_code_phase_samples = d_next_rem_code_phase_samples; K_blk_samples = T_prn_samples + d_rem_code_phase_samples;//-code_error*(double)d_fs_in; // Update the current PRN delay (code phase in samples) double T_prn_true_seconds = GPS_L1_CA_CODE_LENGTH_CHIPS / GPS_L1_CA_CODE_RATE_HZ; double T_prn_true_samples = T_prn_true_seconds * (double)d_fs_in; d_code_phase_samples = d_code_phase_samples + T_prn_samples - T_prn_true_samples; if (d_code_phase_samples < 0) { d_code_phase_samples = T_prn_true_samples + d_code_phase_samples; } d_code_phase_samples = fmod(d_code_phase_samples, T_prn_true_samples); d_next_prn_length_samples = round(K_blk_samples); //round to a discrete samples d_next_rem_code_phase_samples = K_blk_samples - d_next_prn_length_samples; //rounding error /*! * \todo Improve the lock detection algorithm! */ // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GPS_L1_CA_CODE_LENGTH_CHIPS); d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // ###### TRACKING UNLOCK NOTIFICATION ##### if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = (double)(*d_Prompt).real(); current_synchro_data.Prompt_Q = (double)(*d_Prompt).imag(); // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??) current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_rem_code_phase_samples)/(double)d_fs_in; //compute remnant code phase samples AFTER the Tracking timestamp d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Tracking_timestamp_secs = d_sample_counter_seconds; current_synchro_data.Carrier_phase_rads = (double)d_acc_carrier_phase_rad; current_synchro_data.Carrier_Doppler_hz = (double)d_carrier_doppler_hz; current_synchro_data.Code_phase_secs = (double)d_code_phase_samples * (1/(float)d_fs_in); current_synchro_data.CN0_dB_hz = (double)d_CN0_SNV_dB_Hz; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; LOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } else { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); LOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output streams pointer // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; //! When tracking is disabled an array of 1's is sent to maintain the TCP connection boost::array tx_variables_array = {{1,1,1,1,1,1,1,1,0}}; d_tcp_com.send_receive_tcp_packet_gps_l1_ca(tx_variables_array, &tcp_data); } if(d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file float prompt_I; float prompt_Q; float tmp_E, tmp_P, tmp_L; float tmp_float; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); try { // EPR d_dump_file.write((char*)&tmp_E, sizeof(float)); d_dump_file.write((char*)&tmp_P, sizeof(float)); d_dump_file.write((char*)&tmp_L, sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write((char*)&prompt_I, sizeof(float)); d_dump_file.write((char*)&prompt_Q, sizeof(float)); // PRN start sample stamp //tmp_float=(float)d_sample_counter; d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); // carrier and code frequency d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); //PLL commands d_dump_file.write((char*)&carr_error, sizeof(float)); d_dump_file.write((char*)&carr_nco, sizeof(float)); //DLL commands d_dump_file.write((char*)&code_error, sizeof(float)); d_dump_file.write((char*)&code_nco, sizeof(float)); // CN0 and carrier lock test d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); // AUX vars (for debug purposes) tmp_float = 0; d_dump_file.write((char*)&tmp_float, sizeof(float)); d_dump_file.write((char*)&d_sample_counter_seconds, sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates d_sample_counter_seconds = d_sample_counter_seconds + ( ((double)d_current_prn_length_samples) / (double)d_fs_in ); d_sample_counter += d_current_prn_length_samples; //count for the processed samples return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::set_channel(unsigned int channel) { d_channel = channel; LOG(INFO) << "Tracking Channel set to " << d_channel; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_filename.append(boost::lexical_cast(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } //! Listen for connections on a TCP port if (d_listen_connection == true) { d_port = d_port_ch0 + d_channel; d_listen_connection = d_tcp_com.listen_tcp_connection(d_port, d_port_ch0); } } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Gps_L1_Ca_Tcp_Connector_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; // Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); //DLOG(INFO) << "Tracking code phase set to " << d_acq_code_phase_samples; //DLOG(INFO) << "Tracking carrier doppler set to " << d_acq_carrier_doppler_hz; //DLOG(INFO) << "Tracking Satellite set to " << d_satellite; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_optim_tracking_cc.cc0000644000175000017500000007200412576764164032115 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_optim_tracking_cc.cc * \brief Implementation of a code DLL + carrier PLL tracking block * \author Javier Arribas, 2012. jarribas(at)cttc.es * GPS L1 TRACKING MODULE OPTIMIZED FOR SPEED: * - Code Doppler is not compensated in the local replica * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_pll_optim_tracking_cc.h" #include #include #include #include #include #include #include "gnss_synchro.h" #include "gps_sdr_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "GPS_L1_CA.h" #include "nco_lib.h" #include "control_message_factory.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; gps_l1_ca_dll_pll_optim_tracking_cc_sptr gps_l1_ca_dll_pll_make_optim_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { return gps_l1_ca_dll_pll_optim_tracking_cc_sptr(new Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips)); } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = d_gnuradio_forecast_samples; //set the required available samples in each call } Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : gr::block("Gps_L1_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_gnuradio_forecast_samples = static_cast(d_vector_length) * 2; d_dump_filename = dump_filename; // Initialize tracking ========================================== d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the C/A code replica sampled 1x/chip d_ca_code = static_cast(volk_malloc((GPS_L1_CA_CODE_LENGTH_CHIPS + 2) * sizeof(gr_complex), volk_get_alignment())); // Get space for the resampled early / prompt / late local replicas d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // space for carrier wipeoff and signal baseband vectors d_carr_sign = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; //d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["G"] = std::string("GPS"); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_code_phase_samples = 0.0; d_acc_code_phase_secs = 0.0; } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::start_tracking() { // correct the code phase according to the delay between acq and trk d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; acq_trk_diff_samples = static_cast(d_sample_counter) - static_cast(d_acq_sample_stamp); //-d_vector_length; LOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples; acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / static_cast(d_fs_in); //doppler effect // Fd=(C/(C+Vr))*F float radial_velocity; radial_velocity = (GPS_L1_FREQ_HZ + d_acq_carrier_doppler_hz) / GPS_L1_FREQ_HZ; // new chip and prn sequence periods based on acq Doppler float T_chip_mod_seconds; float T_prn_mod_seconds; float T_prn_mod_samples; d_code_freq_chips = radial_velocity * GPS_L1_CA_CODE_RATE_HZ; T_chip_mod_seconds = 1/d_code_freq_chips; T_prn_mod_seconds = T_chip_mod_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_mod_samples = T_prn_mod_seconds * static_cast(d_fs_in); d_current_prn_length_samples = round(T_prn_mod_samples); float T_prn_true_seconds = GPS_L1_CA_CODE_LENGTH_CHIPS / GPS_L1_CA_CODE_RATE_HZ; float T_prn_true_samples = T_prn_true_seconds * static_cast(d_fs_in); float T_prn_diff_seconds = T_prn_true_seconds - T_prn_mod_seconds; float N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds; float corrected_acq_phase_samples, delay_correction_samples; corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast(d_fs_in)), T_prn_true_samples); if (corrected_acq_phase_samples < 0) { corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples; } delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples; d_acq_code_phase_samples = corrected_acq_phase_samples; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); //initialize the carrier filter d_code_loop_filter.initialize(); //initialize the code filter // generate local reference ALWAYS starting at chip 1 (1 sample per chip) gps_l1_ca_code_gen_complex(&d_ca_code[1], d_acquisition_gnss_synchro->PRN, 0); d_ca_code[0] = d_ca_code[static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS)]; d_ca_code[static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS) + 1] = d_ca_code[1]; //****************************************************************************** // Experimental: pre-sampled local signal replica at nominal code frequency. // No code doppler correction double tcode_chips; int associated_chip_index; int code_length_chips = static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS); double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; // unified loop for E, P, L code vectors code_phase_step_chips = (static_cast(d_code_freq_chips)) / (static_cast(d_fs_in)); tcode_chips = 0; // Alternative EPL code generation (40% of speed improvement!) early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples +early_late_spc_samples*2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); d_early_code[i] = d_ca_code[associated_chip_index]; tcode_chips = tcode_chips + code_phase_step_chips; } memcpy(d_prompt_code, &d_early_code[early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_late_code, &d_early_code[early_late_spc_samples*2], d_current_prn_length_samples* sizeof(gr_complex)); //****************************************************************************** d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_code_phase_samples = d_acq_code_phase_samples; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples << std::endl; } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::update_local_code() { double tcode_chips; double rem_code_phase_chips; int associated_chip_index; int code_length_chips = static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS); double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; // unified loop for E, P, L code vectors code_phase_step_chips = (static_cast(d_code_freq_chips)) / (static_cast(d_fs_in)); rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / d_fs_in); tcode_chips = -rem_code_phase_chips; //EPL code generation early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + early_late_spc_samples*2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); d_early_code[i] = d_ca_code[associated_chip_index]; tcode_chips = tcode_chips + code_phase_step_chips; } memcpy(d_prompt_code, &d_early_code[early_late_spc_samples], d_current_prn_length_samples* sizeof(gr_complex)); memcpy(d_late_code, &d_early_code[early_late_spc_samples*2], d_current_prn_length_samples* sizeof(gr_complex)); } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::update_local_carrier() { float phase_step_rad; phase_step_rad = static_cast(GPS_TWO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); fxp_nco(d_carr_sign, d_current_prn_length_samples, d_rem_carr_phase_rad, phase_step_rad); } Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::~Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc() { d_dump_file.close(); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_early_code); volk_free(d_carr_sign); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); delete[] d_ca_code; delete[] d_Prompt_buffer; } // Tracking signal processing int Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; float carr_error_hz; float carr_error_filt_hz; float code_error_chips; float code_error_filt_chips; if (d_enable_tracking == true) { /* * Receiver signal alignment */ if (d_pull_in == true) { int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; consume_each(samples_offset); //shift input to perform alignment with local replica return 1; } // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; //PRN start block alignment Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Generate local code and carrier replicas (using \hat{f}_d(k-1)) //update_local_code(); //disabled in the speed optimized tracking! update_local_carrier(); // perform Early, Prompt and Late correlation #if USING_VOLK_CW_EPL_CORR_CUSTOM d_correlator.Carrier_wipeoff_and_EPL_volk_custom(d_current_prn_length_samples, in, d_carr_sign, d_early_code, d_prompt_code, d_late_code, d_Early, d_Prompt, d_Late); #else d_correlator.Carrier_wipeoff_and_EPL_volk(d_current_prn_length_samples, in, d_carr_sign, d_early_code, d_prompt_code, d_late_code, d_Early, d_Prompt, d_Late); #endif // ################## PLL ########################################################## // PLL discriminator carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast(GPS_TWO_PI); // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ + ((d_carrier_doppler_hz * GPS_L1_CA_CODE_RATE_HZ) / GPS_L1_FREQ_HZ); //carrier phase accumulator for (K) doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD; //remnant carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI); // ################## DLL ########################################################## // DLL discriminator code_error_chips = dll_nc_e_minus_l_normalized(*d_Early, *d_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (GPS_L1_CA_CODE_PERIOD * code_error_filt_chips) / GPS_L1_CA_CODE_RATE_HZ; //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GPS_L1_CA_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the PRN start sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples) / static_cast(d_fs_in); current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl; std::cout << tmp_str_stream.rdbuf(); LOG(INFO) << tmp_str_stream.rdbuf(); } tmp_str_stream << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", Doppler=" << d_carrier_doppler_hz << " [Hz] CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]" << std::endl; //std::cout << tmp_str_stream.rdbuf() << std::flush; LOG(INFO) << tmp_str_stream.rdbuf(); //if (d_channel == 0 || d_last_seg==5) d_carrier_lock_fail_counter=500; //DEBUG: force unlock! } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output streams pointer // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; } if(d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file float prompt_I; float prompt_Q; float tmp_E, tmp_P, tmp_L; float tmp_float; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); try { // EPR d_dump_file.write((char*)&tmp_E, sizeof(float)); d_dump_file.write((char*)&tmp_P, sizeof(float)); d_dump_file.write((char*)&tmp_L, sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write((char*)&prompt_I, sizeof(float)); d_dump_file.write((char*)&prompt_Q, sizeof(float)); // PRN start sample stamp //tmp_float=(float)d_sample_counter; d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); // carrier and code frequency d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); d_dump_file.write((char*)&d_code_freq_chips, sizeof(float)); //PLL commands d_dump_file.write((char*)&carr_error_hz, sizeof(float)); d_dump_file.write((char*)&carr_error_filt_hz, sizeof(float)); //DLL commands d_dump_file.write((char*)&code_error_chips, sizeof(float)); d_dump_file.write((char*)&code_error_filt_chips, sizeof(float)); // CN0 and carrier lock test d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write((char*)&tmp_float, sizeof(float)); tmp_double = (double)(d_sample_counter + d_current_prn_length_samples); d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (std::ifstream::failure& e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } consume_each(d_current_prn_length_samples); // this is necesary in gr_block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::set_channel(unsigned int channel) { d_channel = channel; LOG(INFO) << "Tracking Channel set to " << d_channel; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_filename.append(boost::lexical_cast(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure& e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.h0000644000175000017500000001343312576764164030550 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking_cc.h * \brief Interface of a code DLL + carrier PLL tracking block * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_CC_H #define GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_sdr_signal_processing.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" class Gps_L1_Ca_Dll_Pll_Tracking_cc; typedef boost::shared_ptr gps_l1_ca_dll_pll_tracking_cc_sptr; gps_l1_ca_dll_pll_tracking_cc_sptr gps_l1_ca_dll_pll_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); /*! * \brief This class implements a DLL + PLL tracking loop block */ class Gps_L1_Ca_Dll_Pll_Tracking_cc: public gr::block { public: ~Gps_L1_Ca_Dll_Pll_Tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l1_ca_dll_pll_tracking_cc_sptr gps_l1_ca_dll_pll_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); Gps_L1_Ca_Dll_Pll_Tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; double d_early_late_spc_chips; gr_complex* d_ca_code; gr_complex* d_early_code; gr_complex* d_late_code; gr_complex* d_prompt_code; gr_complex* d_carr_sign; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; float d_acc_carrier_phase_rad; float d_code_phase_samples; float d_acc_code_phase_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.cc0000644000175000017500000010572512576764164031232 0ustar carlescarles/*! * \file galileo_e5a_dll_fll_pll_tracking_cc.h * \brief Implementation of a code DLL + carrier PLL * tracking block for Galileo E5a signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *

    *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
* * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5a_dll_pll_tracking_cc.h" #include #include #include #include #include #include // fixed point sine and cosine #include #include "gnss_synchro.h" #include "galileo_e5_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "Galileo_E5a.h" #include "Galileo_E1.h" #include "control_message_factory.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; galileo_e5a_dll_pll_tracking_cc_sptr galileo_e5a_dll_pll_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float pll_bw_init_hz, float dll_bw_init_hz, int ti_ms, float early_late_space_chips) { return galileo_e5a_dll_pll_tracking_cc_sptr(new Galileo_E5a_Dll_Pll_Tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, pll_bw_init_hz, dll_bw_init_hz, ti_ms, early_late_space_chips)); } void Galileo_E5a_Dll_Pll_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = static_cast(d_vector_length)*2; //set the required available samples in each call } Galileo_E5a_Dll_Pll_Tracking_cc::Galileo_E5a_Dll_Pll_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float pll_bw_init_hz, float dll_bw_init_hz, int ti_ms, float early_late_space_chips) : gr::block("Galileo_E5a_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { this->set_relative_rate(1.0/vector_length); // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; d_code_loop_filter = Tracking_2nd_DLL_filter(GALILEO_E5a_CODE_PERIOD); d_carrier_loop_filter = Tracking_2nd_PLL_filter(GALILEO_E5a_CODE_PERIOD); d_current_ti_ms = 1; // initializes with 1ms of integration time until secondary code lock d_ti_ms = ti_ms; d_dll_bw_hz = dll_bw_hz; d_pll_bw_hz = pll_bw_hz; d_dll_bw_init_hz = dll_bw_init_hz; d_pll_bw_init_hz = pll_bw_init_hz; // Initialize tracking ========================================== d_code_loop_filter.set_DLL_BW(d_dll_bw_init_hz); d_carrier_loop_filter.set_PLL_BW(d_pll_bw_init_hz); //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the E5a primary code replicas sampled 1x/chip d_codeQ = new gr_complex[static_cast(Galileo_E5a_CODE_LENGTH_CHIPS) + 2]; d_codeI = new gr_complex[static_cast(Galileo_E5a_CODE_LENGTH_CHIPS) + 2]; d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_data_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_carr_sign = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (complex number) d_Early = gr_complex(0, 0); d_Prompt = gr_complex(0, 0); d_Late = gr_complex(0, 0); d_Prompt_data = gr_complex(0, 0); //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_chips = Galileo_E5a_CODE_CHIP_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; //Filter error vars d_code_error_filt_secs = 0.0; // sample synchronization d_sample_counter = 0; d_acq_sample_stamp = 0; d_last_seg = 0; d_first_transition = false; d_secondary_lock = false; d_secondary_delay = 0; d_integration_counter = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; tmp_E = 0; tmp_P = 0; tmp_L = 0; d_acq_code_phase_samples = 0; d_acq_carrier_doppler_hz = 0; d_carrier_doppler_hz = 0; d_acc_carrier_phase_rad = 0; d_code_phase_samples = 0; d_acc_code_phase_secs = 0; d_state = 0; systemName["E"] = std::string("Galileo"); } Galileo_E5a_Dll_Pll_Tracking_cc::~Galileo_E5a_Dll_Pll_Tracking_cc () { d_dump_file.close(); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_early_code); volk_free(d_carr_sign); volk_free(d_prompt_data_code); delete[] d_codeI; delete[] d_codeQ; delete[] d_Prompt_buffer; } void Galileo_E5a_Dll_Pll_Tracking_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk */ d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; acq_trk_diff_samples = static_cast(d_sample_counter) - static_cast(d_acq_sample_stamp);//-d_vector_length; LOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples; acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / static_cast(d_fs_in); //doppler effect // Fd=(C/(C+Vr))*F float radial_velocity; radial_velocity = (Galileo_E5a_FREQ_HZ + d_acq_carrier_doppler_hz)/Galileo_E5a_FREQ_HZ; // new chip and prn sequence periods based on acq Doppler float T_chip_mod_seconds; float T_prn_mod_seconds; float T_prn_mod_samples; d_code_freq_chips = radial_velocity * Galileo_E5a_CODE_CHIP_RATE_HZ; T_chip_mod_seconds = 1/d_code_freq_chips; T_prn_mod_seconds = T_chip_mod_seconds * Galileo_E5a_CODE_LENGTH_CHIPS; T_prn_mod_samples = T_prn_mod_seconds * static_cast(d_fs_in); d_current_prn_length_samples = round(T_prn_mod_samples); float T_prn_true_seconds = Galileo_E5a_CODE_LENGTH_CHIPS / Galileo_E5a_CODE_CHIP_RATE_HZ; float T_prn_true_samples = T_prn_true_seconds * static_cast(d_fs_in); float T_prn_diff_seconds; T_prn_diff_seconds = T_prn_true_seconds - T_prn_mod_seconds; float N_prn_diff; N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds; float corrected_acq_phase_samples, delay_correction_samples; corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast(d_fs_in)), T_prn_true_samples); if (corrected_acq_phase_samples < 0) { corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples; } delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples; d_acq_code_phase_samples = corrected_acq_phase_samples; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); // initialize the carrier filter d_code_loop_filter.initialize(); // initialize the code filter // generate local reference ALWAYS starting at chip 1 (1 sample per chip) char sig[3]; strcpy(sig,"5Q"); galileo_e5_a_code_gen_complex_primary(&d_codeQ[1], d_acquisition_gnss_synchro->PRN, sig); d_codeQ[0] = d_codeQ[static_cast(Galileo_E5a_CODE_LENGTH_CHIPS)]; d_codeQ[static_cast(Galileo_E5a_CODE_LENGTH_CHIPS) + 1] = d_codeQ[1]; strcpy(sig,"5I"); galileo_e5_a_code_gen_complex_primary(&d_codeI[1], d_acquisition_gnss_synchro->PRN, sig); d_codeI[0] = d_codeI[static_cast(Galileo_E5a_CODE_LENGTH_CHIPS)]; d_codeI[static_cast(Galileo_E5a_CODE_LENGTH_CHIPS) + 1] = d_codeI[1]; d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_code_phase_samples = d_acq_code_phase_samples; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_state = 1; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void Galileo_E5a_Dll_Pll_Tracking_cc::acquire_secondary() { // 1. Transform replica to 1 and -1 int sec_code_signed[Galileo_E5a_Q_SECONDARY_CODE_LENGTH]; for (unsigned int i = 0; i < Galileo_E5a_Q_SECONDARY_CODE_LENGTH; i++) { if (Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(i) == '0') { sec_code_signed[i] = 1; } else { sec_code_signed[i] = -1; } } // 2. Transform buffer to 1 and -1 int in_corr[CN0_ESTIMATION_SAMPLES]; for (unsigned int i = 0; i < CN0_ESTIMATION_SAMPLES; i++) { if (d_Prompt_buffer[i].real() >0) { in_corr[i] = 1; } else { in_corr[i] = -1; } } // 3. Serial search int out_corr; int current_best_ = 0; for (unsigned int i = 0; i < Galileo_E5a_Q_SECONDARY_CODE_LENGTH; i++) { out_corr = 0; for (unsigned int j = 0; j < CN0_ESTIMATION_SAMPLES; j++) { //reverse replica sign since i*i=-1 (conjugated complex) out_corr += in_corr[j] * -sec_code_signed[(j+i) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH]; } if (abs(out_corr) > current_best_) { current_best_ = abs(out_corr); d_secondary_delay = i; } } if (current_best_ == CN0_ESTIMATION_SAMPLES) // all bits correlate { d_secondary_lock = true; d_secondary_delay = (d_secondary_delay + CN0_ESTIMATION_SAMPLES - 1) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH; } } void Galileo_E5a_Dll_Pll_Tracking_cc::update_local_code() { double tcode_chips; double rem_code_phase_chips; int associated_chip_index; int associated_chip_index_data; int code_length_chips = static_cast(Galileo_E5a_CODE_LENGTH_CHIPS); double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; // unified loop for E, P, L code vectors code_phase_step_chips = static_cast(d_code_freq_chips) / static_cast(d_fs_in); rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / d_fs_in); tcode_chips = -rem_code_phase_chips; // Alternative EPL code generation (40% of speed improvement!) early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + early_late_spc_samples * 2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); associated_chip_index_data = 1 + round(fmod(tcode_chips, code_length_chips)); d_early_code[i] = d_codeQ[associated_chip_index]; d_prompt_data_code[i] = d_codeI[associated_chip_index_data]; tcode_chips = tcode_chips + code_phase_step_chips; } memcpy(d_prompt_code, &d_early_code[early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_late_code, &d_early_code[early_late_spc_samples * 2], d_current_prn_length_samples * sizeof(gr_complex)); } void Galileo_E5a_Dll_Pll_Tracking_cc::update_local_carrier() { float sin_f, cos_f; float phase_step_rad = static_cast(2 * GALILEO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); int phase_rad_i = gr::fxpt::float_to_fixed(d_rem_carr_phase_rad); for(int i = 0; i < d_current_prn_length_samples; i++) { gr::fxpt::sincos(phase_rad_i, &sin_f, &cos_f); d_carr_sign[i] = std::complex(cos_f, -sin_f); phase_rad_i += phase_step_rad_i; } } int Galileo_E5a_Dll_Pll_Tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // process vars float carr_error_hz; float carr_error_filt_hz; float code_error_chips; float code_error_filt_chips; // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output streams pointer // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; /* States: 0 Tracking not enabled * 1 Pull-in of primary code (alignment). * 3 Tracking algorithm. Correlates EPL each loop and accumulates the result * until it reaches integration time. */ switch (d_state) { case 0: { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } d_Early = gr_complex(0,0); d_Prompt = gr_complex(0,0); d_Late = gr_complex(0,0); d_Prompt_data = gr_complex(0,0); d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; break; } case 1: { int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples DLOG(INFO) << " samples_offset=" << samples_offset; d_state = 2; // start in Ti = 1 code, until secondary code lock. // make an output to not stop the rest of the processing blocks current_synchro_data.Prompt_I = 0.0; current_synchro_data.Prompt_Q = 0.0; current_synchro_data.Tracking_timestamp_secs = static_cast(d_sample_counter) / static_cast(d_fs_in); current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; consume_each(samples_offset); //shift input to perform alignment with local replica return 1; break; } case 2: { // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; //PRN start block alignment gr_complex sec_sign_Q; gr_complex sec_sign_I; // Secondary code Chip if (d_secondary_lock) { // sec_sign_Q = gr_complex((Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(d_secondary_delay)=='0' ? 1 : -1),0); // sec_sign_I = gr_complex((Galileo_E5a_I_SECONDARY_CODE.at(d_secondary_delay%Galileo_E5a_I_SECONDARY_CODE_LENGTH)=='0' ? 1 : -1),0); sec_sign_Q = gr_complex((Galileo_E5a_Q_SECONDARY_CODE[d_acquisition_gnss_synchro->PRN-1].at(d_secondary_delay) == '0' ? -1 : 1), 0); sec_sign_I = gr_complex((Galileo_E5a_I_SECONDARY_CODE.at(d_secondary_delay % Galileo_E5a_I_SECONDARY_CODE_LENGTH) == '0' ? -1 : 1), 0); } else { sec_sign_Q = gr_complex(1.0, 0.0); sec_sign_I = gr_complex(1.0, 0.0); } // Reset integration counter if (d_integration_counter == d_current_ti_ms) { d_integration_counter = 0; } //Generate local code and carrier replicas (using \hat{f}_d(k-1)) if (d_integration_counter == 0) { update_local_code(); update_local_carrier(); // Reset accumulated values d_Early = gr_complex(0,0); d_Prompt = gr_complex(0,0); d_Late = gr_complex(0,0); } gr_complex single_early; gr_complex single_prompt; gr_complex single_late; // perform carrier wipe-off and compute Early, Prompt and Late // correlation of 1 primary code d_correlator.Carrier_wipeoff_and_EPL_volk_IQ(d_current_prn_length_samples, in, d_carr_sign, d_early_code, d_prompt_code, d_late_code, d_prompt_data_code, &single_early, &single_prompt, &single_late, &d_Prompt_data); // Accumulate results (coherent integration since there are no bit transitions in pilot signal) d_Early += single_early * sec_sign_Q; d_Prompt += single_prompt * sec_sign_Q; d_Late += single_late * sec_sign_Q; d_Prompt_data *= sec_sign_I; d_integration_counter++; // check for samples consistency (this should be done before in the receiver / here only if the source is a file) if (std::isnan((d_Prompt).real()) == true or std::isnan((d_Prompt).imag()) == true ) // or std::isinf(in[i].real())==true or std::isinf(in[i].imag())==true) { const int samples_available = ninput_items[0]; d_sample_counter = d_sample_counter + samples_available; LOG(WARNING) << "Detected NaN samples at sample number " << d_sample_counter; consume_each(samples_available); // make an output to not stop the rest of the processing blocks current_synchro_data.Prompt_I = 0.0; current_synchro_data.Prompt_Q = 0.0; current_synchro_data.Tracking_timestamp_secs = static_cast(d_sample_counter) / static_cast(d_fs_in); current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; *out[0] = current_synchro_data; return 1; } // ################## PLL ########################################################## // PLL discriminator if (d_integration_counter == d_current_ti_ms) { if (d_secondary_lock == true) { carr_error_hz = pll_four_quadrant_atan(d_Prompt) / static_cast(GALILEO_PI) * 2; } else { carr_error_hz = pll_cloop_two_quadrant_atan(d_Prompt) / static_cast(GALILEO_PI) * 2; } // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = Galileo_E5a_CODE_CHIP_RATE_HZ + ((d_carrier_doppler_hz * Galileo_E5a_CODE_CHIP_RATE_HZ) / Galileo_E5a_FREQ_HZ); } //carrier phase accumulator for (K) doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + 2*GALILEO_PI * d_carrier_doppler_hz * GALILEO_E5a_CODE_PERIOD; //remanent carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + 2*GALILEO_PI * d_carrier_doppler_hz * GALILEO_E5a_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, 2*GALILEO_PI); // ################## DLL ########################################################## if (d_integration_counter == d_current_ti_ms) { // DLL discriminator code_error_chips = dll_nc_e_minus_l_normalized(d_Early, d_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator d_code_error_filt_secs = (GALILEO_E5a_CODE_PERIOD * code_error_filt_chips) / Galileo_E5a_CODE_CHIP_RATE_HZ; //[seconds] } d_acc_code_phase_secs = d_acc_code_phase_secs + d_code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * Galileo_E5a_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + d_code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES-1) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = d_Prompt; d_cn0_estimation_counter++; } else { d_Prompt_buffer[d_cn0_estimation_counter] = d_Prompt; // ATTEMPT SECONDARY CODE ACQUISITION if (d_secondary_lock == false) { acquire_secondary(); // changes d_secondary_lock and d_secondary_delay if (d_secondary_lock == true) { std::cout << "Secondary code locked." << std::endl; d_current_ti_ms = d_ti_ms; // Change loop parameters ========================================== d_code_loop_filter.set_pdi(d_current_ti_ms * GALILEO_E5a_CODE_PERIOD); d_carrier_loop_filter.set_pdi(d_current_ti_ms * GALILEO_E5a_CODE_PERIOD); d_code_loop_filter.set_DLL_BW(d_dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(d_pll_bw_hz); } else { std::cout << "Secondary code delay couldn't be resolved." << std::endl; d_carrier_lock_fail_counter++; if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_state = 0; // TODO: check if disabling tracking is consistent with the channel state machine } } } else // Secondary lock achieved, monitor carrier lock. { // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in,d_current_ti_ms * Galileo_E5a_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_state = 0; } } } d_cn0_estimation_counter = 0; } if (d_secondary_lock && (d_secondary_delay % Galileo_E5a_I_SECONDARY_CODE_LENGTH) == 0) { d_first_transition = true; } // ########### Output the tracking data to navigation and PVT ########## // The first Prompt output not equal to 0 is synchronized with the transition of a navigation data bit. if (d_secondary_lock && d_first_transition) { current_synchro_data.Prompt_I = static_cast((d_Prompt_data).real()); current_synchro_data.Prompt_Q = static_cast((d_Prompt_data).imag()); // Tracking_timestamp_secs is aligned with the PRN start sample current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_current_prn_length_samples) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_tracking = false; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; std::cout << "Galileo E5 Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz] "<<"Doppler="<PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz] "<<"Doppler="<(d_Early); tmp_P = std::abs(d_Prompt); tmp_L = std::abs(d_Late); } try { // EPR d_dump_file.write(reinterpret_cast(&tmp_E), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_P), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_L), sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write(reinterpret_cast(&prompt_I), sizeof(float)); d_dump_file.write(reinterpret_cast(&prompt_Q), sizeof(float)); // PRN start sample stamp d_dump_file.write(reinterpret_cast(&d_sample_counter), sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write(reinterpret_cast(&d_acc_carrier_phase_rad), sizeof(float)); // carrier and code frequency d_dump_file.write(reinterpret_cast(&d_carrier_doppler_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_code_freq_chips), sizeof(float)); //PLL commands d_dump_file.write(reinterpret_cast(&carr_error_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&carr_error_filt_hz), sizeof(float)); //DLL commands d_dump_file.write(reinterpret_cast(&code_error_chips), sizeof(float)); d_dump_file.write(reinterpret_cast(&code_error_filt_chips), sizeof(float)); // CN0 and carrier lock test d_dump_file.write(reinterpret_cast(&d_CN0_SNV_dB_Hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_carrier_lock_test), sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); tmp_double = static_cast(d_sample_counter + d_current_prn_length_samples); d_dump_file.write(reinterpret_cast(&tmp_double), sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } d_secondary_delay = (d_secondary_delay + 1) % Galileo_E5a_Q_SECONDARY_CODE_LENGTH; d_sample_counter += d_current_prn_length_samples; //count for the processed samples consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false } void Galileo_E5a_Dll_Pll_Tracking_cc::set_channel(unsigned int channel) { d_channel = channel; LOG(INFO) << "Tracking Channel set to " << d_channel; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_filename.append(boost::lexical_cast(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str() << std::endl; } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what() << std::endl; } } } } void Galileo_E5a_Dll_Pll_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Galileo_E5a_Dll_Pll_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e5a_dll_pll_tracking_cc.h0000644000175000017500000001502512576764164031065 0ustar carlescarles/*! * \file galileo_e5a_dll_fll_pll_tracking_cc.h * \brief Implementation of a code DLL + carrier PLL * tracking block for Galileo E5a signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
    *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
* * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E5A_DLL_PLL_TRACKING_CC_H_ #define GNSS_SDR_GALILEO_E5A_DLL_PLL_TRACKING_CC_H_ #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_sdr_signal_processing.h" // #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" class Galileo_E5a_Dll_Pll_Tracking_cc; typedef boost::shared_ptr galileo_e5a_dll_pll_tracking_cc_sptr; galileo_e5a_dll_pll_tracking_cc_sptr galileo_e5a_dll_pll_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float pll_bw_init_hz, float dll_bw_init_hz, int ti_ms, float early_late_space_chips); /*! * \brief This class implements a DLL + PLL tracking loop block */ class Galileo_E5a_Dll_Pll_Tracking_cc: public gr::block { public: ~Galileo_E5a_Dll_Pll_Tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend galileo_e5a_dll_pll_tracking_cc_sptr galileo_e5a_dll_pll_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float pll_bw_init_hz, float dll_bw_init_hz, int ti_ms, float early_late_space_chips); Galileo_E5a_Dll_Pll_Tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float pll_bw_init_hz, float dll_bw_init_hz, int ti_ms, float early_late_space_chips); void update_local_code(); void update_local_carrier(); void acquire_secondary(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; int d_current_ti_ms; int d_ti_ms; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; double d_early_late_spc_chips; float d_dll_bw_hz; float d_pll_bw_hz; float d_dll_bw_init_hz; float d_pll_bw_init_hz; gr_complex* d_codeQ; gr_complex* d_codeI; gr_complex* d_early_code; gr_complex* d_late_code; gr_complex* d_prompt_code; gr_complex* d_prompt_data_code; gr_complex* d_carr_sign; gr_complex d_Early; gr_complex d_Prompt; gr_complex d_Late; gr_complex d_Prompt_data; float tmp_E; float tmp_P; float tmp_L; // remaining code phase and carrier phase between tracking loops float d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars float d_code_freq_chips; float d_carrier_doppler_hz; float d_acc_carrier_phase_rad; float d_code_phase_samples; float d_acc_code_phase_secs; float d_code_error_filt_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars int d_state; bool d_first_transition; // Secondary code acquisition bool d_secondary_lock; int d_secondary_delay; int d_integration_counter; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif /* GNSS_SDR_GALILEO_E5A_DLL_PLL_TRACKING_CC_H_ */ gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_gpu_cc.cc0000644000175000017500000006655512576764211031567 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking_gpu_cc.cc * \brief Implementation of a code DLL + carrier PLL tracking block, GPU ACCELERATED * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_pll_tracking_gpu_cc.h" #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "gps_sdr_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "GPS_L1_CA.h" #include "control_message_factory.h" #include // volk_alignment #include /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; gps_l1_ca_dll_pll_tracking_gpu_cc_sptr gps_l1_ca_dll_pll_make_tracking_gpu_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { return gps_l1_ca_dll_pll_tracking_gpu_cc_sptr(new Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips)); } void Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = static_cast(d_vector_length) * 2; //set the required available samples in each call } Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : gr::block("Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; // Initialize tracking ========================================== d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the C/A code replica sampled 1x/chip //d_ca_code = static_cast(volk_malloc((GPS_L1_CA_CODE_LENGTH_CHIPS + 2) * sizeof(gr_complex), volk_get_alignment())); d_ca_code = static_cast(volk_malloc((GPS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(gr_complex), volk_get_alignment())); multicorrelator_gpu = new cuda_multicorrelator(); int N_CORRELATORS = 3; //local code resampler on CPU (old) //multicorrelator_gpu->init_cuda(0, NULL, 2 * d_vector_length , 2 * d_vector_length , N_CORRELATORS); //local code resampler on GPU (new) multicorrelator_gpu->init_cuda_integrated_resampler(0, NULL, 2 * d_vector_length , GPS_L1_CA_CODE_LENGTH_CHIPS , N_CORRELATORS); // Get space for the resampled early / prompt / late local replicas cudaHostAlloc((void**)&d_local_code_shift_chips, N_CORRELATORS * sizeof(float), cudaHostAllocMapped ); //allocate host memory //pinned memory mode - use special function to get OS-pinned memory cudaHostAlloc((void**)&in_gpu, 2 * d_vector_length * sizeof(gr_complex), cudaHostAllocMapped ); //old local codes vector // (cudaHostAlloc((void**)&d_local_codes_gpu, (V_LEN * sizeof(gr_complex))*N_CORRELATORS, cudaHostAllocWriteCombined )); //new integrated shifts // (cudaHostAlloc((void**)&d_local_codes_gpu, (2 * d_vector_length * sizeof(gr_complex)), cudaHostAllocWriteCombined )); // correlator outputs (scalar) cudaHostAlloc((void**)&d_corr_outs_gpu ,sizeof(gr_complex)*N_CORRELATORS, cudaHostAllocWriteCombined ); //map to EPL pointers d_Early = &d_corr_outs_gpu[0]; d_Prompt = &d_corr_outs_gpu[1]; d_Late = &d_corr_outs_gpu[2]; //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; //d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["G"] = std::string("GPS"); systemName["S"] = std::string("SBAS"); set_relative_rate(1.0/((double)d_vector_length*2)); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_code_phase_samples = 0.0; d_acc_code_phase_secs = 0.0; //set_min_output_buffer((long int)300); } void Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk */ d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; acq_trk_diff_samples = static_cast(d_sample_counter) - static_cast(d_acq_sample_stamp);//-d_vector_length; DLOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples; acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / static_cast(d_fs_in); //doppler effect // Fd=(C/(C+Vr))*F float radial_velocity = (GPS_L1_FREQ_HZ + d_acq_carrier_doppler_hz) / GPS_L1_FREQ_HZ; // new chip and prn sequence periods based on acq Doppler float T_chip_mod_seconds; float T_prn_mod_seconds; float T_prn_mod_samples; d_code_freq_chips = radial_velocity * GPS_L1_CA_CODE_RATE_HZ; T_chip_mod_seconds = 1/d_code_freq_chips; T_prn_mod_seconds = T_chip_mod_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_mod_samples = T_prn_mod_seconds * static_cast(d_fs_in); d_current_prn_length_samples = round(T_prn_mod_samples); float T_prn_true_seconds = GPS_L1_CA_CODE_LENGTH_CHIPS / GPS_L1_CA_CODE_RATE_HZ; float T_prn_true_samples = T_prn_true_seconds * static_cast(d_fs_in); float T_prn_diff_seconds= T_prn_true_seconds - T_prn_mod_seconds; float N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds; float corrected_acq_phase_samples, delay_correction_samples; corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast(d_fs_in)), T_prn_true_samples); if (corrected_acq_phase_samples < 0) { corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples; } delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples; d_acq_code_phase_samples = corrected_acq_phase_samples; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); // initialize the carrier filter d_code_loop_filter.initialize(); // initialize the code filter // generate local reference ALWAYS starting at chip 1 (1 sample per chip) gps_l1_ca_code_gen_complex(d_ca_code, d_acquisition_gnss_synchro->PRN, 0); d_local_code_shift_chips[0]=-d_early_late_spc_chips; d_local_code_shift_chips[1]=0.0; d_local_code_shift_chips[2]=d_early_late_spc_chips; multicorrelator_gpu->set_local_code_and_taps(GPS_L1_CA_CODE_LENGTH_CHIPS,d_ca_code, d_local_code_shift_chips,3); d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_code_phase_samples = d_acq_code_phase_samples; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::~Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc() { d_dump_file.close(); cudaFreeHost(in_gpu); cudaFreeHost(d_carr_sign_gpu); cudaFreeHost(d_corr_outs_gpu); cudaFreeHost(d_local_code_shift_chips); multicorrelator_gpu->free_cuda(); delete(multicorrelator_gpu); volk_free(d_ca_code); delete[] d_Prompt_buffer; } int Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // process vars float carr_error_hz = 0.0; float carr_error_filt_hz = 0.0; float code_error_chips = 0.0; float code_error_filt_chips = 0.0; // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data = Gnss_Synchro(); if (d_enable_tracking == true) { // Receiver signal alignment if (d_pull_in == true) { int samples_offset; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; samples_offset = round(d_acq_code_phase_samples)+d_current_prn_length_samples - acq_to_trk_delay_samples%d_current_prn_length_samples; d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; *out[0] = current_synchro_data; consume_each(samples_offset); //shift input to perform alignment with local replica return 1; } // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; // UPDATE NCO COMMAND float phase_step_rad = static_cast(GPS_TWO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); //code resampler on GPU (new) float code_phase_step_chips = static_cast(d_code_freq_chips) / static_cast(d_fs_in); float rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / d_fs_in); cudaProfilerStart(); multicorrelator_gpu->Carrier_wipeoff_multicorrelator_resampler_cuda( d_corr_outs_gpu, in, d_rem_carr_phase_rad, phase_step_rad, code_phase_step_chips, rem_code_phase_chips, d_current_prn_length_samples, 3); cudaProfilerStop(); // ################## PLL ########################################################## // PLL discriminator carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast(GPS_TWO_PI); // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ + ((d_carrier_doppler_hz * GPS_L1_CA_CODE_RATE_HZ) / GPS_L1_FREQ_HZ); //carrier phase accumulator for (K) doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD; //remanent carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI); // ################## DLL ########################################################## // DLL discriminator code_error_chips = dll_nc_e_minus_l_normalized(*d_Early, *d_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (GPS_L1_CA_CODE_PERIOD * code_error_filt_chips) / GPS_L1_CA_CODE_RATE_HZ; //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + static_cast(code_error_filt_secs) * static_cast(d_fs_in); //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GPS_L1_CA_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the NEXT PRN start sample (Hybridization problem!) //compute remnant code phase samples BEFORE the Tracking timestamp //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples)/static_cast(d_fs_in); // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??) current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); //compute remnant code phase samples AFTER the Tracking timestamp d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter)/static_cast(d_fs_in); // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; DLOG(INFO) << "GPS L1 C/A Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]" << std::endl; //if (d_last_seg==5) d_carrier_lock_fail_counter=500; //DEBUG: force unlock! } } else { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); DLOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); current_synchro_data.System = {'G'}; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; } if(d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file float prompt_I; float prompt_Q; float tmp_E, tmp_P, tmp_L; float tmp_float; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); try { // EPR d_dump_file.write(reinterpret_cast(&tmp_E), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_P), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_L), sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write(reinterpret_cast(&prompt_I), sizeof(float)); d_dump_file.write(reinterpret_cast(&prompt_Q), sizeof(float)); // PRN start sample stamp //tmp_float=(float)d_sample_counter; d_dump_file.write(reinterpret_cast(&d_sample_counter), sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write(reinterpret_cast(&d_acc_carrier_phase_rad), sizeof(float)); // carrier and code frequency d_dump_file.write(reinterpret_cast(&d_carrier_doppler_hz), sizeof(float)); tmp_float=d_code_freq_chips; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); //PLL commands d_dump_file.write(reinterpret_cast(&carr_error_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&carr_error_filt_hz), sizeof(float)); //DLL commands d_dump_file.write(reinterpret_cast(&code_error_chips), sizeof(float)); d_dump_file.write(reinterpret_cast(&code_error_filt_chips), sizeof(float)); // CN0 and carrier lock test d_dump_file.write(reinterpret_cast(&d_CN0_SNV_dB_Hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_carrier_lock_test), sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); tmp_double = static_cast(d_sample_counter + d_current_prn_length_samples); d_dump_file.write(reinterpret_cast(&tmp_double), sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples //LOG(INFO)<<"GPS tracking output end on CH="<d_channel << " SAMPLE STAMP="<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str() << std::endl; } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what() << std::endl; } } } } void Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Gps_L1_Ca_Dll_Pll_Tracking_GPU_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_tcp_connector_tracking_cc.h0000644000175000017500000001464712576764164031776 0ustar carlescarles/*! * \file gps_l1_ca_tcp_connector_tracking_cc.h * \brief Interface of a TCP connector block based on code DLL + carrier PLL * \author David Pubill, 2012. dpubill(at)cttc.es * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_TCP_CONNECTOR_TRACKING_CC_H #define GNSS_SDR_GPS_L1_CA_TCP_CONNECTOR_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_sdr_signal_processing.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" #include "tcp_communication.h" class Gps_L1_Ca_Tcp_Connector_Tracking_cc; typedef boost::shared_ptr gps_l1_ca_tcp_connector_tracking_cc_sptr; gps_l1_ca_tcp_connector_tracking_cc_sptr gps_l1_ca_tcp_connector_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, size_t port_ch0); /*! * \brief This class implements a DLL + PLL tracking loop block */ class Gps_L1_Ca_Tcp_Connector_Tracking_cc: public gr::block { public: ~Gps_L1_Ca_Tcp_Connector_Tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); /* * \brief just like gr_block::general_work, only this arranges to call consume_each for you * * The user must override work to define the signal processing code */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l1_ca_tcp_connector_tracking_cc_sptr gps_l1_ca_tcp_connector_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, size_t port_ch0); Gps_L1_Ca_Tcp_Connector_Tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, size_t port_ch0); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; double d_early_late_spc_chips; double d_code_phase_step_chips; gr_complex* d_ca_code; gr_complex* d_early_code; gr_complex* d_late_code; gr_complex* d_prompt_code; gr_complex* d_carr_sign; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; double d_next_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_hz; double d_carrier_doppler_hz; double d_acc_carrier_phase_rad; double d_code_phase_samples; size_t d_port_ch0; size_t d_port; int d_listen_connection; float d_control_id; tcp_communication d_tcp_com; //PRN period in samples int d_current_prn_length_samples; int d_next_prn_length_samples; double d_sample_counter_seconds; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GPS_L1_CA_TCP_CONNECTOR_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_volk_e1_dll_pll_veml_tracking_cc.cc0000644000175000017500000010360412576764164033135 0ustar carlescarles/*! * \file galileo_volk_e1_dll_pll_veml_tracking_cc.cc * \brief Implementation of a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_volk_e1_dll_pll_veml_tracking_cc.h" #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "galileo_e1_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "Galileo_E1.h" #include "control_message_factory.h" #include "volk_gnsssdr/volk_gnsssdr.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; galileo_volk_e1_dll_pll_veml_tracking_cc_sptr galileo_volk_e1_dll_pll_veml_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips) { return galileo_volk_e1_dll_pll_veml_tracking_cc_sptr(new galileo_volk_e1_dll_pll_veml_tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, very_early_late_space_chips)); } void galileo_volk_e1_dll_pll_veml_tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = static_cast(d_vector_length) * 2; //set the required available samples in each call } galileo_volk_e1_dll_pll_veml_tracking_cc::galileo_volk_e1_dll_pll_veml_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips): gr::block("galileo_volk_e1_dll_pll_veml_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { this->set_relative_rate(1.0/vector_length); // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; d_code_loop_filter = Tracking_2nd_DLL_filter(Galileo_E1_CODE_PERIOD); d_carrier_loop_filter = Tracking_2nd_PLL_filter(Galileo_E1_CODE_PERIOD); // Initialize tracking ========================================== // Set bandwidth of code and carrier loop filters d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); // Correlator spacing d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) d_very_early_late_spc_chips = very_early_late_space_chips; // Define very-early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the sinboc(1,1) replica sampled 2x/chip d_ca_code = static_cast(volk_malloc((2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 4) * sizeof(gr_complex), volk_get_alignment())); d_very_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_very_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_carr_sign = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_very_early_code16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); d_early_code16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); d_prompt_code16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); d_late_code16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); d_very_late_code16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); d_carr_sign16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); in16=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment())); d_very_early_code8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); d_early_code8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); d_prompt_code8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); d_late_code8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); d_very_late_code8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); d_carr_sign8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); in8=static_cast(volk_malloc(2 * d_vector_length * sizeof(lv_8sc_t), volk_get_alignment())); // correlator outputs (scalar) d_Very_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Very_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Initializations ------------------------------ // Initial code frequency basis of NCO d_code_freq_chips = static_cast(Galileo_E1_CODE_CHIP_RATE_HZ); // Residual code phase (in chips) d_rem_code_phase_samples = 0.0; // Residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; //d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["E"] = std::string("Galileo"); *d_Very_Early = gr_complex(0,0); *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); *d_Very_Late = gr_complex(0,0); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_acc_code_phase_secs = 0.0; } void galileo_volk_e1_dll_pll_veml_tracking_cc::start_tracking() { d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); // initialize the carrier filter d_code_loop_filter.initialize(); // initialize the code filter // generate local reference ALWAYS starting at chip 2 (2 samples per chip) galileo_e1_code_gen_complex_sampled(&d_ca_code[2], d_acquisition_gnss_synchro->Signal, false, d_acquisition_gnss_synchro->PRN, 2 * Galileo_E1_CODE_CHIP_RATE_HZ, 0); // Fill head and tail d_ca_code[0] = d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS)]; d_ca_code[1] = d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 1)]; d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 2)] = d_ca_code[2]; d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 3)] = d_ca_code[3]; d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0.0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; d_current_prn_length_samples = d_vector_length; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0, 1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void galileo_volk_e1_dll_pll_veml_tracking_cc::update_local_code() { double tcode_half_chips; float rem_code_phase_half_chips; int code_length_half_chips = static_cast(Galileo_E1_B_CODE_LENGTH_CHIPS) * 2; double code_phase_step_chips; double code_phase_step_half_chips; int early_late_spc_samples; int very_early_late_spc_samples; int epl_loop_length_samples; // unified loop for VE, E, P, L, VL code vectors code_phase_step_chips = (static_cast(d_code_freq_chips)) / (static_cast(d_fs_in)); code_phase_step_half_chips = (2.0 * static_cast(d_code_freq_chips)) / (static_cast(d_fs_in)); rem_code_phase_half_chips = d_rem_code_phase_samples * (2*d_code_freq_chips / d_fs_in); tcode_half_chips = - static_cast(rem_code_phase_half_chips); early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); very_early_late_spc_samples = round(d_very_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + very_early_late_spc_samples * 2; //HERE YOU CAN CHOOSE THE DESIRED VOLK IMPLEMENTATION //volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_manual(d_very_early_code, (float) d_very_early_late_spc_chips, (float) code_length_half_chips, (float) code_phase_step_half_chips, (float) tcode_half_chips, d_ca_code, epl_loop_length_samples, "generic"); volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc(d_very_early_code, (float) d_very_early_late_spc_chips, (float) code_length_half_chips, (float) code_phase_step_half_chips, (float) tcode_half_chips, d_ca_code, epl_loop_length_samples); memcpy(d_early_code, &d_very_early_code[very_early_late_spc_samples - early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_prompt_code, &d_very_early_code[very_early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_late_code, &d_very_early_code[very_early_late_spc_samples + early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_very_late_code, &d_very_early_code[2 * very_early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); } void galileo_volk_e1_dll_pll_veml_tracking_cc::update_local_carrier() { float phase_rad, phase_step_rad; // Compute the carrier phase step for the K-1 carrier doppler estimation phase_step_rad = static_cast(GPS_TWO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); // Initialize the carrier phase with the remanent carrier phase of the K-2 loop phase_rad = d_rem_carr_phase_rad; //HERE YOU CAN CHOOSE THE DESIRED VOLK IMPLEMENTATION //volk_gnsssdr_s32f_x2_update_local_carrier_32fc_manual(d_carr_sign, phase_rad, phase_step_rad, d_current_prn_length_samples, "generic"); //volk_gnsssdr_s32f_x2_update_local_carrier_32fc_manual(d_carr_sign, phase_rad, phase_step_rad, d_current_prn_length_samples, "u_sse2"); volk_gnsssdr_s32f_x2_update_local_carrier_32fc(d_carr_sign, phase_rad, phase_step_rad, d_current_prn_length_samples); } galileo_volk_e1_dll_pll_veml_tracking_cc::~galileo_volk_e1_dll_pll_veml_tracking_cc() { d_dump_file.close(); volk_free(d_very_early_code); volk_free(d_early_code); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_very_late_code); volk_free(d_carr_sign); volk_free(d_Very_Early); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); volk_free(d_Very_Late); volk_free(d_ca_code); volk_free(d_very_early_code16); volk_free(d_early_code16); volk_free(d_prompt_code16); volk_free(d_late_code16); volk_free(d_very_late_code16); volk_free(d_carr_sign16); volk_free(in16); volk_free(d_very_early_code8); volk_free(d_early_code8); volk_free(d_prompt_code8); volk_free(d_late_code8); volk_free(d_very_late_code8); volk_free(d_carr_sign8); volk_free(in8); delete[] d_Prompt_buffer; } int galileo_volk_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items,gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { float carr_error_hz; float carr_error_filt_hz; float code_error_chips; float code_error_filt_chips; if (d_enable_tracking == true) { if (d_pull_in == true) { /* * Signal alignment (skip samples until the incoming signal is aligned with local replica) */ int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; consume_each(samples_offset); //shift input to perform alignment with local replica return 1; } // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data = Gnss_Synchro(); // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Generate local code and carrier replicas (using \hat{f}_d(k-1)) update_local_code(); update_local_carrier(); // perform carrier wipe-off and compute Very Early, Early, Prompt, Late and Very Late correlation //HERE YOU CAN CHOOSE THE DESIRED VOLK IMPLEMENTATION //Float implementation: //volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5(d_Very_Early, d_Early, d_Prompt, d_Late, d_Very_Late, in, d_carr_sign, d_very_early_code, d_early_code, d_prompt_code, d_late_code, d_very_late_code, d_current_prn_length_samples, "generic"); //volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5(d_Very_Early, d_Early, d_Prompt, d_Late, d_Very_Late, in, d_carr_sign, d_very_early_code, d_early_code, d_prompt_code, d_late_code, d_very_late_code, d_current_prn_length_samples, "u_avx"); //Integer 16 bits implementation /*volk_gnsssdr_32fc_convert_16ic(d_very_early_code16, d_very_early_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_16ic(d_early_code16, d_early_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_16ic(d_prompt_code16, d_prompt_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_16ic(d_late_code16, d_late_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_16ic(d_very_late_code16, d_very_late_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_16ic(in16, in, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_16ic(d_carr_sign16, d_carr_sign, d_current_prn_length_samples); volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5(d_Very_Early, d_Early, d_Prompt, d_Late, d_Very_Late, in16, d_carr_sign16, d_very_early_code16, d_early_code16, d_prompt_code16, d_late_code16, d_very_late_code16, d_current_prn_length_samples);*/ //Integer 8 bits implementation volk_gnsssdr_32fc_convert_8ic(d_very_early_code8, d_very_early_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_8ic(d_early_code8, d_early_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_8ic(d_prompt_code8, d_prompt_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_8ic(d_late_code8, d_late_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_8ic(d_very_late_code8, d_very_late_code, d_current_prn_length_samples); volk_gnsssdr_32fc_convert_8ic(d_carr_sign8, d_carr_sign, d_current_prn_length_samples); volk_gnsssdr_32fc_s32f_convert_8ic(in8, in, 4, d_current_prn_length_samples); volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5(d_Very_Early, d_Early, d_Prompt, d_Late, d_Very_Late, in8, d_carr_sign8, d_very_early_code8, d_early_code8, d_prompt_code8, d_late_code8, d_very_late_code8, d_current_prn_length_samples); // ################## PLL ########################################################## // PLL discriminator carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast(GPS_TWO_PI); // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = Galileo_E1_CODE_CHIP_RATE_HZ + ((d_carrier_doppler_hz * Galileo_E1_CODE_CHIP_RATE_HZ) / Galileo_E1_FREQ_HZ); //carrier phase accumulator for (K) Doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD; //remnant carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI); // ################## DLL ########################################################## // DLL discriminator code_error_chips = dll_nc_vemlp_normalized(*d_Very_Early, *d_Early, *d_Late, *d_Very_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (Galileo_E1_CODE_PERIOD * code_error_filt_chips) / Galileo_E1_CODE_CHIP_RATE_HZ; //[seconds] //code_error_filt_secs=T_prn_seconds*code_error_filt_chips*T_chip_seconds*static_cast(d_fs_in); //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer lenght based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * Galileo_E1_B_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, Galileo_E1_B_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking results to Telemetry block ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the NEXT PRN start sample (Hybridization problem!) //compute remnant code phase samples BEFORE the Tracking timestamp //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + // (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples) / static_cast(d_fs_in); // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??) current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); //compute remnant code phase samples AFTER the Tracking timestamp d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } tmp_str_stream << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", Doppler=" << d_carrier_doppler_hz << " [Hz] CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]" << std::endl; LOG(INFO) << tmp_str_stream.rdbuf() << std::flush; //if (d_channel == 0 || d_last_seg==5) d_carrier_lock_fail_counter=500; //DEBUG: force unlock! } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output stream pointer // GNSS_SYNCHRO OBJECTto interchange data between tracking->telemetry_decoder d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; } if(d_dump) { // Dump results to file float prompt_I; float prompt_Q; float tmp_VE, tmp_E, tmp_P, tmp_L, tmp_VL; float tmp_float; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_VE = std::abs(*d_Very_Early); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); tmp_VL = std::abs(*d_Very_Late); try { // Dump correlators output d_dump_file.write(reinterpret_cast(&tmp_VE), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_E), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_P), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_L), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_VL), sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write(reinterpret_cast(&prompt_I), sizeof(float)); d_dump_file.write(reinterpret_cast(&prompt_Q), sizeof(float)); // PRN start sample stamp d_dump_file.write(reinterpret_cast(&d_sample_counter), sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write(reinterpret_cast(&d_acc_carrier_phase_rad), sizeof(float)); // carrier and code frequency d_dump_file.write(reinterpret_cast(&d_carrier_doppler_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_code_freq_chips), sizeof(float)); //PLL commands d_dump_file.write(reinterpret_cast(&carr_error_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&carr_error_filt_hz), sizeof(float)); //DLL commands d_dump_file.write(reinterpret_cast(&code_error_chips), sizeof(float)); d_dump_file.write(reinterpret_cast(&code_error_filt_chips), sizeof(float)); // CN0 and carrier lock test d_dump_file.write(reinterpret_cast(&d_CN0_SNV_dB_Hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_carrier_lock_test), sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); tmp_double = static_cast(d_sample_counter + d_current_prn_length_samples); d_dump_file.write(reinterpret_cast(&tmp_double), sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what() << std::endl; } } consume_each(d_current_prn_length_samples); // this is required for gr_block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples //std::cout<<"Galileo tracking output at sample "<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what() << std::endl; } } } } void galileo_volk_e1_dll_pll_veml_tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void galileo_volk_e1_dll_pll_veml_tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; // Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); //DLOG(INFO) << "Tracking code phase set to " << d_acq_code_phase_samples; //DLOG(INFO) << "Tracking carrier doppler set to " << d_acq_carrier_doppler_hz; //DLOG(INFO) << "Tracking Satellite set to " << d_satellite; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l2_m_dll_pll_tracking_cc.cc0000644000175000017500000007632712576764164030573 0ustar carlescarles/*! * \file gps_l2_m_dll_pll_tracking_cc.cc * \brief Implementation of a code DLL + carrier PLL tracking block * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l2_m_dll_pll_tracking_cc.h" #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "gps_l2c_signal.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "GPS_L2C.h" #include "control_message_factory.h" /*! * \todo Include in definition header file */ #define GPS_L2M_CN0_ESTIMATION_SAMPLES 10 #define GPS_L2M_MINIMUM_VALID_CN0 25 #define GPS_L2M_MAXIMUM_LOCK_FAIL_COUNTER 50 #define GPS_L2M_CARRIER_LOCK_THRESHOLD 0.75 using google::LogMessage; gps_l2_m_dll_pll_tracking_cc_sptr gps_l2_m_dll_pll_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { return gps_l2_m_dll_pll_tracking_cc_sptr(new gps_l2_m_dll_pll_tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips)); } void gps_l2_m_dll_pll_tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = static_cast(d_vector_length) * 2; //set the required available samples in each call } gps_l2_m_dll_pll_tracking_cc::gps_l2_m_dll_pll_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : gr::block("gps_l2_m_dll_pll_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; // DLL/PLL filter initialization d_carrier_loop_filter=Tracking_2nd_PLL_filter(GPS_L2_M_PERIOD); d_code_loop_filter=Tracking_2nd_DLL_filter(GPS_L2_M_PERIOD); // Initialize tracking ========================================== d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the C/A code replica sampled 1x/chip d_ca_code = static_cast(volk_malloc((GPS_L2_M_CODE_LENGTH_CHIPS + 2) * sizeof(gr_complex), volk_get_alignment())); // Get space for the resampled early / prompt / late local replicas d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // space for carrier wipeoff and signal baseband vectors d_carr_sign = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_chips = GPS_L2_M_CODE_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; //d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[GPS_L2M_CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = GPS_L2M_CARRIER_LOCK_THRESHOLD; systemName["G"] = std::string("GPS"); set_relative_rate(1.0/((double)d_vector_length*2)); //set_min_output_buffer((long int)300); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_code_phase_samples = 0.0; d_acc_code_phase_secs = 0.0; LOG(INFO) << "d_vector_length" << d_vector_length; } void gps_l2_m_dll_pll_tracking_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk */ d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; acq_trk_diff_samples = static_cast(d_sample_counter) - static_cast(d_acq_sample_stamp);//-d_vector_length; LOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples; acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / static_cast(d_fs_in); //doppler effect // Fd=(C/(C+Vr))*F float radial_velocity = (GPS_L2_FREQ_HZ + d_acq_carrier_doppler_hz) / GPS_L2_FREQ_HZ; // new chip and prn sequence periods based on acq Doppler float T_chip_mod_seconds; float T_prn_mod_seconds; float T_prn_mod_samples; d_code_freq_chips = radial_velocity * GPS_L2_M_CODE_RATE_HZ; T_chip_mod_seconds = 1/d_code_freq_chips; T_prn_mod_seconds = T_chip_mod_seconds * GPS_L2_M_CODE_LENGTH_CHIPS; T_prn_mod_samples = T_prn_mod_seconds * static_cast(d_fs_in); d_current_prn_length_samples = round(T_prn_mod_samples); float T_prn_true_seconds = GPS_L2_M_CODE_LENGTH_CHIPS / GPS_L2_M_CODE_RATE_HZ; float T_prn_true_samples = T_prn_true_seconds * static_cast(d_fs_in); float T_prn_diff_seconds= T_prn_true_seconds - T_prn_mod_seconds; float N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds; float corrected_acq_phase_samples, delay_correction_samples; corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast(d_fs_in)), T_prn_true_samples); if (corrected_acq_phase_samples < 0) { corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples; } delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples; //TODO: debug the algorithm implementation and enable correction //d_acq_code_phase_samples = corrected_acq_phase_samples; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); // initialize the carrier filter d_code_loop_filter.initialize(); // initialize the code filter // generate local reference ALWAYS starting at chip 1 (1 sample per chip) gps_l2c_m_code_gen_complex(&d_ca_code[1], d_acquisition_gnss_synchro->PRN); d_ca_code[0] = d_ca_code[static_cast(GPS_L2_M_CODE_LENGTH_CHIPS)]; d_ca_code[static_cast(GPS_L2_M_CODE_LENGTH_CHIPS) + 1] = d_ca_code[1]; d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_code_phase_samples = d_acq_code_phase_samples; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) <<" whith Doppler="<PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void gps_l2_m_dll_pll_tracking_cc::update_local_code() { double tcode_chips; double rem_code_phase_chips; int associated_chip_index; int code_length_chips = static_cast(GPS_L2_M_CODE_LENGTH_CHIPS); double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; // unified loop for E, P, L code vectors code_phase_step_chips = static_cast(d_code_freq_chips) / static_cast(d_fs_in); rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / d_fs_in); tcode_chips = -rem_code_phase_chips; // Alternative EPL code generation (40% of speed improvement!) early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + early_late_spc_samples * 2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); d_early_code[i] = d_ca_code[associated_chip_index]; tcode_chips = tcode_chips + code_phase_step_chips; } memcpy(d_prompt_code, &d_early_code[early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_late_code, &d_early_code[early_late_spc_samples * 2], d_current_prn_length_samples * sizeof(gr_complex)); } void gps_l2_m_dll_pll_tracking_cc::update_local_carrier() { float phase_rad, phase_step_rad; phase_step_rad = static_cast(GPS_L2_TWO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); phase_rad = d_rem_carr_phase_rad; for(int i = 0; i < d_current_prn_length_samples; i++) { d_carr_sign[i] = gr_complex(cos(phase_rad), -sin(phase_rad)); phase_rad += phase_step_rad; } //d_rem_carr_phase_rad = fmod(phase_rad, GPS_L2_TWO_PI); //d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + d_rem_carr_phase_rad; } gps_l2_m_dll_pll_tracking_cc::~gps_l2_m_dll_pll_tracking_cc() { d_dump_file.close(); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_early_code); volk_free(d_carr_sign); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); volk_free(d_ca_code); delete[] d_Prompt_buffer; } int gps_l2_m_dll_pll_tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // process vars float carr_error_hz=0; float carr_error_filt_hz=0; float code_error_chips=0; float code_error_filt_chips=0; // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data = Gnss_Synchro(); // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; //PRN start block alignment Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; if (d_enable_tracking == true) { // Receiver signal alignment if (d_pull_in == true) { int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = (d_sample_counter - (d_acq_sample_stamp-d_current_prn_length_samples)); acq_trk_shif_correction_samples = -fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);//+(1.5*(d_fs_in/GPS_L2_M_CODE_RATE_HZ))); // /todo: Check if the sample counter sent to the next block as a time reference should be incremented AFTER sended or BEFORE //d_sample_counter_seconds = d_sample_counter_seconds + (((double)samples_offset) / static_cast(d_fs_in)); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; std::cout<<" acq_to_trk_delay_samples="<(d_sample_counter) / static_cast(d_fs_in); current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; return 1; } // ################## PLL ########################################################## // PLL discriminator carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast(GPS_L2_TWO_PI); // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = GPS_L2_M_CODE_RATE_HZ + ((d_carrier_doppler_hz * GPS_L2_M_CODE_RATE_HZ) / GPS_L2_FREQ_HZ); //carrier phase accumulator for (K) doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_L2_TWO_PI * d_carrier_doppler_hz * GPS_L2_M_PERIOD; //remanent carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_L2_TWO_PI * d_carrier_doppler_hz * GPS_L2_M_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_L2_TWO_PI); // ################## DLL ########################################################## // DLL discriminator code_error_chips = dll_nc_e_minus_l_normalized(*d_Early, *d_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (GPS_L2_M_PERIOD * code_error_filt_chips) / GPS_L2_M_CODE_RATE_HZ; //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * GPS_L2_M_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < GPS_L2M_CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, GPS_L2M_CN0_ESTIMATION_SAMPLES, d_fs_in, GPS_L2_M_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, GPS_L2M_CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < GPS_L2M_MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > GPS_L2M_MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the NEXT PRN start sample (Hybridization problem!) //compute remnant code phase samples BEFORE the Tracking timestamp //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples)/static_cast(d_fs_in); // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??) current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); //compute remnant code phase samples AFTER the Tracking timestamp d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter)/static_cast(d_fs_in); // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_tracking = true; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; std::cout << "GPS L2C M Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz] "<<"Doppler="<PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz] "<<"Doppler="<(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); try { // EPR d_dump_file.write(reinterpret_cast(&tmp_E), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_P), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_L), sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write(reinterpret_cast(&prompt_I), sizeof(float)); d_dump_file.write(reinterpret_cast(&prompt_Q), sizeof(float)); // PRN start sample stamp //tmp_float=(float)d_sample_counter; d_dump_file.write(reinterpret_cast(&d_sample_counter), sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write(reinterpret_cast(&d_acc_carrier_phase_rad), sizeof(float)); // carrier and code frequency d_dump_file.write(reinterpret_cast(&d_carrier_doppler_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_code_freq_chips), sizeof(float)); //PLL commands d_dump_file.write(reinterpret_cast(&carr_error_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&carr_error_filt_hz), sizeof(float)); //DLL commands d_dump_file.write(reinterpret_cast(&code_error_chips), sizeof(float)); d_dump_file.write(reinterpret_cast(&code_error_filt_chips), sizeof(float)); // CN0 and carrier lock test d_dump_file.write(reinterpret_cast(&d_CN0_SNV_dB_Hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_carrier_lock_test), sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); tmp_double = static_cast(d_sample_counter + d_current_prn_length_samples); d_dump_file.write(reinterpret_cast(&tmp_double), sizeof(double)); } catch (std::ifstream::failure& e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples //LOG(INFO)<<"GPS L2 tracking output end on CH="<d_channel << " SAMPLE STAMP="<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str() << std::endl; } catch (std::ifstream::failure& e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what() << std::endl; } } } } void gps_l2_m_dll_pll_tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void gps_l2_m_dll_pll_tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc0000644000175000017500000007464212576764164030717 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking_cc.cc * \brief Implementation of a code DLL + carrier PLL tracking block * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_pll_tracking_cc.h" #include #include #include #include #include #include #include // fixed point sine and cosine #include #include "gnss_synchro.h" #include "gps_sdr_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "GPS_L1_CA.h" #include "control_message_factory.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; gps_l1_ca_dll_pll_tracking_cc_sptr gps_l1_ca_dll_pll_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) { return gps_l1_ca_dll_pll_tracking_cc_sptr(new Gps_L1_Ca_Dll_Pll_Tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips)); } void Gps_L1_Ca_Dll_Pll_Tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = static_cast(d_vector_length) * 2; //set the required available samples in each call } Gps_L1_Ca_Dll_Pll_Tracking_cc::Gps_L1_Ca_Dll_Pll_Tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips) : gr::block("Gps_L1_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; // Initialize tracking ========================================== d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); //--- DLL variables -------------------------------------------------------- d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the C/A code replica sampled 1x/chip d_ca_code = static_cast(volk_malloc((GPS_L1_CA_CODE_LENGTH_CHIPS + 2) * sizeof(gr_complex), volk_get_alignment())); // Get space for the resampled early / prompt / late local replicas d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // space for carrier wipeoff and signal baseband vectors d_carr_sign = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Perform initializations ------------------------------ // define initial code frequency basis of NCO d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ; // define residual code phase (in chips) d_rem_code_phase_samples = 0.0; // define residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; //d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["G"] = std::string("GPS"); systemName["S"] = std::string("SBAS"); set_relative_rate(1.0/((double)d_vector_length*2)); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_code_phase_samples = 0.0; d_acc_code_phase_secs = 0.0; //set_min_output_buffer((long int)300); } void Gps_L1_Ca_Dll_Pll_Tracking_cc::start_tracking() { /* * correct the code phase according to the delay between acq and trk */ d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; long int acq_trk_diff_samples; float acq_trk_diff_seconds; acq_trk_diff_samples = static_cast(d_sample_counter) - static_cast(d_acq_sample_stamp);//-d_vector_length; DLOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples; acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / static_cast(d_fs_in); //doppler effect // Fd=(C/(C+Vr))*F float radial_velocity = (GPS_L1_FREQ_HZ + d_acq_carrier_doppler_hz) / GPS_L1_FREQ_HZ; // new chip and prn sequence periods based on acq Doppler float T_chip_mod_seconds; float T_prn_mod_seconds; float T_prn_mod_samples; d_code_freq_chips = radial_velocity * GPS_L1_CA_CODE_RATE_HZ; T_chip_mod_seconds = 1/d_code_freq_chips; T_prn_mod_seconds = T_chip_mod_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_mod_samples = T_prn_mod_seconds * static_cast(d_fs_in); d_current_prn_length_samples = round(T_prn_mod_samples); float T_prn_true_seconds = GPS_L1_CA_CODE_LENGTH_CHIPS / GPS_L1_CA_CODE_RATE_HZ; float T_prn_true_samples = T_prn_true_seconds * static_cast(d_fs_in); float T_prn_diff_seconds= T_prn_true_seconds - T_prn_mod_seconds; float N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds; float corrected_acq_phase_samples, delay_correction_samples; corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast(d_fs_in)), T_prn_true_samples); if (corrected_acq_phase_samples < 0) { corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples; } delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples; d_acq_code_phase_samples = corrected_acq_phase_samples; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); // initialize the carrier filter d_code_loop_filter.initialize(); // initialize the code filter // generate local reference ALWAYS starting at chip 1 (1 sample per chip) gps_l1_ca_code_gen_complex(&d_ca_code[1], d_acquisition_gnss_synchro->PRN, 0); d_ca_code[0] = d_ca_code[static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS)]; d_ca_code[static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS) + 1] = d_ca_code[1]; d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_code_phase_samples = d_acq_code_phase_samples; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0,1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " Code Phase correction [samples]=" << delay_correction_samples << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void Gps_L1_Ca_Dll_Pll_Tracking_cc::update_local_code() { double tcode_chips; double rem_code_phase_chips; int associated_chip_index; int code_length_chips = static_cast(GPS_L1_CA_CODE_LENGTH_CHIPS); double code_phase_step_chips; int early_late_spc_samples; int epl_loop_length_samples; // unified loop for E, P, L code vectors code_phase_step_chips = static_cast(d_code_freq_chips) / static_cast(d_fs_in); rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / d_fs_in); tcode_chips = -rem_code_phase_chips; // Alternative EPL code generation (40% of speed improvement!) early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + early_late_spc_samples * 2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 1 + round(fmod(tcode_chips - d_early_late_spc_chips, code_length_chips)); d_early_code[i] = d_ca_code[associated_chip_index]; tcode_chips = tcode_chips + code_phase_step_chips; } memcpy(d_prompt_code, &d_early_code[early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_late_code, &d_early_code[early_late_spc_samples * 2], d_current_prn_length_samples * sizeof(gr_complex)); } void Gps_L1_Ca_Dll_Pll_Tracking_cc::update_local_carrier() { float sin_f, cos_f; float phase_step_rad = static_cast(GPS_TWO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); int phase_rad_i = gr::fxpt::float_to_fixed(d_rem_carr_phase_rad); for(int i = 0; i < d_current_prn_length_samples; i++) { gr::fxpt::sincos(phase_rad_i, &sin_f, &cos_f); d_carr_sign[i] = std::complex(cos_f, -sin_f); phase_rad_i += phase_step_rad_i; } //d_rem_carr_phase_rad = fmod(phase_rad, GPS_TWO_PI); //d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + d_rem_carr_phase_rad; } Gps_L1_Ca_Dll_Pll_Tracking_cc::~Gps_L1_Ca_Dll_Pll_Tracking_cc() { d_dump_file.close(); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_early_code); volk_free(d_carr_sign); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); volk_free(d_ca_code); delete[] d_Prompt_buffer; } int Gps_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // process vars float carr_error_hz; float carr_error_filt_hz; float code_error_chips; float code_error_filt_chips; // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; //PRN start block alignment Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data = Gnss_Synchro(); if (d_enable_tracking == true) { // Receiver signal alignment if (d_pull_in == true) { int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); // /todo: Check if the sample counter sent to the next block as a time reference should be incremented AFTER sended or BEFORE //d_sample_counter_seconds = d_sample_counter_seconds + (((double)samples_offset) / static_cast(d_fs_in)); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; //std::cout<<" samples_offset="<(d_sample_counter) / static_cast(d_fs_in); current_synchro_data.Carrier_phase_rads = 0.0; current_synchro_data.Code_phase_secs = 0.0; current_synchro_data.CN0_dB_hz = 0.0; current_synchro_data.Flag_valid_tracking = false; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; return 1; } // ################## PLL ########################################################## // PLL discriminator carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast(GPS_TWO_PI); // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ + ((d_carrier_doppler_hz * GPS_L1_CA_CODE_RATE_HZ) / GPS_L1_FREQ_HZ); //carrier phase accumulator for (K) doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD; //remanent carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI); // ################## DLL ########################################################## // DLL discriminator code_error_chips = dll_nc_e_minus_l_normalized(*d_Early, *d_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (GPS_L1_CA_CODE_PERIOD * code_error_filt_chips) / GPS_L1_CA_CODE_RATE_HZ; //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * GPS_L1_CA_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GPS_L1_CA_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking data to navigation and PVT ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the NEXT PRN start sample (Hybridization problem!) //compute remnant code phase samples BEFORE the Tracking timestamp //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples)/static_cast(d_fs_in); // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??) current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); //compute remnant code phase samples AFTER the Tracking timestamp d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter)/static_cast(d_fs_in); // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // debug: Second counter in channel 0 if (d_channel == 0) { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); std::cout << "Current input signal time = " << d_last_seg << " [s]" << std::endl; DLOG(INFO) << "GPS L1 C/A Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]" << std::endl; //if (d_last_seg==5) d_carrier_lock_fail_counter=500; //DEBUG: force unlock! } } else { if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); DLOG(INFO) << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]"; } } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); current_synchro_data.System = {'G'}; current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; } if(d_dump) { // MULTIPLEXED FILE RECORDING - Record results to file float prompt_I; float prompt_Q; float tmp_E, tmp_P, tmp_L; float tmp_float; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); try { // EPR d_dump_file.write(reinterpret_cast(&tmp_E), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_P), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_L), sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write(reinterpret_cast(&prompt_I), sizeof(float)); d_dump_file.write(reinterpret_cast(&prompt_Q), sizeof(float)); // PRN start sample stamp //tmp_float=(float)d_sample_counter; d_dump_file.write(reinterpret_cast(&d_sample_counter), sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write(reinterpret_cast(&d_acc_carrier_phase_rad), sizeof(float)); // carrier and code frequency d_dump_file.write(reinterpret_cast(&d_carrier_doppler_hz), sizeof(float)); tmp_float=d_code_freq_chips; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); //PLL commands d_dump_file.write(reinterpret_cast(&carr_error_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&carr_error_filt_hz), sizeof(float)); //DLL commands d_dump_file.write(reinterpret_cast(&code_error_chips), sizeof(float)); d_dump_file.write(reinterpret_cast(&code_error_filt_chips), sizeof(float)); // CN0 and carrier lock test d_dump_file.write(reinterpret_cast(&d_CN0_SNV_dB_Hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_carrier_lock_test), sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); tmp_double = static_cast(d_sample_counter + d_current_prn_length_samples); d_dump_file.write(reinterpret_cast(&tmp_double), sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what(); } } consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples //LOG(INFO)<<"GPS tracking output end on CH="<d_channel << " SAMPLE STAMP="<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str() << std::endl; } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what() << std::endl; } } } } void Gps_L1_Ca_Dll_Pll_Tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void Gps_L1_Ca_Dll_Pll_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_tcp_connector_tracking_cc.h0000644000175000017500000001501312576764164032133 0ustar carlescarles/*! * \file galileo_e1_tcp_connector_tracking_cc.h * \brief Interface of a TCP connector block based on code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals * \author David Pubill, 2012. dpubill(at)cttc.es * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_CC_H #define GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" #include "correlator.h" #include "tcp_communication.h" class Galileo_E1_Tcp_Connector_Tracking_cc; typedef boost::shared_ptr galileo_e1_tcp_connector_tracking_cc_sptr; galileo_e1_tcp_connector_tracking_cc_sptr galileo_e1_tcp_connector_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips, size_t port_ch0); /*! * \brief This class implements a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals */ class Galileo_E1_Tcp_Connector_Tracking_cc: public gr::block { public: ~Galileo_E1_Tcp_Connector_Tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend galileo_e1_tcp_connector_tracking_cc_sptr galileo_e1_tcp_connector_make_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips, size_t port_ch0); Galileo_E1_Tcp_Connector_Tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips, size_t port_ch0); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; float d_early_late_spc_chips; float d_very_early_late_spc_chips; gr_complex* d_ca_code; gr_complex* d_very_early_code; gr_complex* d_early_code; gr_complex* d_prompt_code; gr_complex* d_late_code; gr_complex* d_very_late_code; gr_complex* d_carr_sign; gr_complex *d_Very_Early; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; gr_complex *d_Very_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_next_rem_code_phase_samples; float d_rem_carr_phase_rad; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; float d_acc_carrier_phase_rad; float d_acc_code_phase_secs; float d_code_phase_samples; size_t d_port_ch0; size_t d_port; int d_listen_connection; float d_control_id; tcp_communication d_tcp_com; //PRN period in samples int d_current_prn_length_samples; int d_next_prn_length_samples; //double d_sample_counter_seconds; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc0000755000175000017500000007211212576764164032104 0ustar carlescarles/*! * \file galileo_e1_dll_pll_veml_tracking_cc.cc * \brief Implementation of a code DLL + carrier PLL VEML (Very Early * Minus Late) tracking block for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_dll_pll_veml_tracking_cc.h" #include #include #include #include #include #include #include // fixed point sine and cosine #include #include "gnss_synchro.h" #include "galileo_e1_signal_processing.h" #include "tracking_discriminators.h" #include "lock_detectors.h" #include "Galileo_E1.h" #include "control_message_factory.h" /*! * \todo Include in definition header file */ #define CN0_ESTIMATION_SAMPLES 20 #define MINIMUM_VALID_CN0 25 #define MAXIMUM_LOCK_FAIL_COUNTER 50 #define CARRIER_LOCK_THRESHOLD 0.85 using google::LogMessage; galileo_e1_dll_pll_veml_tracking_cc_sptr galileo_e1_dll_pll_veml_make_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips) { return galileo_e1_dll_pll_veml_tracking_cc_sptr(new galileo_e1_dll_pll_veml_tracking_cc(if_freq, fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, very_early_late_space_chips)); } void galileo_e1_dll_pll_veml_tracking_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = static_cast(d_vector_length) * 2; //set the required available samples in each call } galileo_e1_dll_pll_veml_tracking_cc::galileo_e1_dll_pll_veml_tracking_cc( long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips, float very_early_late_space_chips): gr::block("galileo_e1_dll_pll_veml_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { this->set_relative_rate(1.0/vector_length); // initialize internal vars d_queue = queue; d_dump = dump; d_if_freq = if_freq; d_fs_in = fs_in; d_vector_length = vector_length; d_dump_filename = dump_filename; d_code_loop_filter = Tracking_2nd_DLL_filter(Galileo_E1_CODE_PERIOD); d_carrier_loop_filter = Tracking_2nd_PLL_filter(Galileo_E1_CODE_PERIOD); // Initialize tracking ========================================== // Set bandwidth of code and carrier loop filters d_code_loop_filter.set_DLL_BW(dll_bw_hz); d_carrier_loop_filter.set_PLL_BW(pll_bw_hz); // Correlator spacing d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips) d_very_early_late_spc_chips = very_early_late_space_chips; // Define very-early-late offset (in chips) // Initialization of local code replica // Get space for a vector with the sinboc(1,1) replica sampled 2x/chip d_ca_code = static_cast(volk_malloc((2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 4) * sizeof(gr_complex), volk_get_alignment())); d_very_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_early_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_prompt_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_very_late_code = static_cast(volk_malloc(2 * d_vector_length * sizeof(gr_complex), volk_get_alignment())); d_carr_sign = static_cast(volk_malloc(2*d_vector_length * sizeof(gr_complex), volk_get_alignment())); // correlator outputs (scalar) d_Very_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Early = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Prompt = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); d_Very_Late = static_cast(volk_malloc(sizeof(gr_complex), volk_get_alignment())); //--- Initializations ------------------------------ // Initial code frequency basis of NCO d_code_freq_chips = static_cast(Galileo_E1_CODE_CHIP_RATE_HZ); // Residual code phase (in chips) d_rem_code_phase_samples = 0.0; // Residual carrier phase d_rem_carr_phase_rad = 0.0; // sample synchronization d_sample_counter = 0; //d_sample_counter_seconds = 0; d_acq_sample_stamp = 0; d_enable_tracking = false; d_pull_in = false; d_last_seg = 0; d_current_prn_length_samples = static_cast(d_vector_length); // CN0 estimation and lock detector buffers d_cn0_estimation_counter = 0; d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES]; d_carrier_lock_test = 1; d_CN0_SNV_dB_Hz = 0; d_carrier_lock_fail_counter = 0; d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD; systemName["E"] = std::string("Galileo"); *d_Very_Early = gr_complex(0,0); *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); *d_Very_Late = gr_complex(0,0); d_channel_internal_queue = 0; d_acquisition_gnss_synchro = 0; d_channel = 0; d_acq_code_phase_samples = 0.0; d_acq_carrier_doppler_hz = 0.0; d_carrier_doppler_hz = 0.0; d_acc_carrier_phase_rad = 0.0; d_acc_code_phase_secs = 0.0; } void galileo_e1_dll_pll_veml_tracking_cc::start_tracking() { d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples; d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz; d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples; // DLL/PLL filter initialization d_carrier_loop_filter.initialize(); // initialize the carrier filter d_code_loop_filter.initialize(); // initialize the code filter // generate local reference ALWAYS starting at chip 2 (2 samples per chip) galileo_e1_code_gen_complex_sampled(&d_ca_code[2], d_acquisition_gnss_synchro->Signal, false, d_acquisition_gnss_synchro->PRN, 2 * Galileo_E1_CODE_CHIP_RATE_HZ, 0); // Fill head and tail d_ca_code[0] = d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS)]; d_ca_code[1] = d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 1)]; d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 2)] = d_ca_code[2]; d_ca_code[static_cast(2 * Galileo_E1_B_CODE_LENGTH_CHIPS + 3)] = d_ca_code[3]; d_carrier_lock_fail_counter = 0; d_rem_code_phase_samples = 0.0; d_rem_carr_phase_rad = 0; d_acc_carrier_phase_rad = 0; d_acc_code_phase_secs = 0; d_carrier_doppler_hz = d_acq_carrier_doppler_hz; d_current_prn_length_samples = d_vector_length; std::string sys_ = &d_acquisition_gnss_synchro->System; sys = sys_.substr(0, 1); // DEBUG OUTPUT std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl; LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel; // enable tracking d_pull_in = true; d_enable_tracking = true; LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz << " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples; } void galileo_e1_dll_pll_veml_tracking_cc::update_local_code() { double tcode_half_chips; float rem_code_phase_half_chips; int associated_chip_index; int code_length_half_chips = static_cast(Galileo_E1_B_CODE_LENGTH_CHIPS) * 2; double code_phase_step_chips; double code_phase_step_half_chips; int early_late_spc_samples; int very_early_late_spc_samples; int epl_loop_length_samples; // unified loop for VE, E, P, L, VL code vectors code_phase_step_chips = (static_cast(d_code_freq_chips)) / (static_cast(d_fs_in)); code_phase_step_half_chips = (2.0 * static_cast(d_code_freq_chips)) / (static_cast(d_fs_in)); rem_code_phase_half_chips = d_rem_code_phase_samples * (2*d_code_freq_chips / d_fs_in); tcode_half_chips = - static_cast(rem_code_phase_half_chips); early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips); very_early_late_spc_samples = round(d_very_early_late_spc_chips / code_phase_step_chips); epl_loop_length_samples = d_current_prn_length_samples + very_early_late_spc_samples * 2; for (int i = 0; i < epl_loop_length_samples; i++) { associated_chip_index = 2 + round(fmod(tcode_half_chips - 2 * d_very_early_late_spc_chips, code_length_half_chips)); d_very_early_code[i] = d_ca_code[associated_chip_index]; tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; } memcpy(d_early_code, &d_very_early_code[very_early_late_spc_samples - early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_prompt_code, &d_very_early_code[very_early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_late_code, &d_very_early_code[very_early_late_spc_samples + early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); memcpy(d_very_late_code, &d_very_early_code[2 * very_early_late_spc_samples], d_current_prn_length_samples * sizeof(gr_complex)); } void galileo_e1_dll_pll_veml_tracking_cc::update_local_carrier() { float sin_f, cos_f; float phase_step_rad = static_cast(2 * GALILEO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); int phase_rad_i = gr::fxpt::float_to_fixed(d_rem_carr_phase_rad); for(int i = 0; i < d_current_prn_length_samples; i++) { gr::fxpt::sincos(phase_rad_i, &sin_f, &cos_f); d_carr_sign[i] = std::complex(cos_f, -sin_f); phase_rad_i += phase_step_rad_i; } } galileo_e1_dll_pll_veml_tracking_cc::~galileo_e1_dll_pll_veml_tracking_cc() { d_dump_file.close(); volk_free(d_very_early_code); volk_free(d_early_code); volk_free(d_prompt_code); volk_free(d_late_code); volk_free(d_very_late_code); volk_free(d_carr_sign); volk_free(d_Very_Early); volk_free(d_Early); volk_free(d_Prompt); volk_free(d_Late); volk_free(d_Very_Late); volk_free(d_ca_code); delete[] d_Prompt_buffer; } int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items,gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { float carr_error_hz; float carr_error_filt_hz; float code_error_chips; float code_error_filt_chips; if (d_enable_tracking == true) { if (d_pull_in == true) { /* * Signal alignment (skip samples until the incoming signal is aligned with local replica) */ int samples_offset; float acq_trk_shif_correction_samples; int acq_to_trk_delay_samples; acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp; acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast(acq_to_trk_delay_samples), static_cast(d_current_prn_length_samples)); samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples); d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples d_pull_in = false; consume_each(samples_offset); //shift input to perform alignment with local replica return 1; } // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder Gnss_Synchro current_synchro_data; // Fill the acquisition data current_synchro_data = *d_acquisition_gnss_synchro; // Block input data and block output stream pointers const gr_complex* in = (gr_complex*) input_items[0]; Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; // Generate local code and carrier replicas (using \hat{f}_d(k-1)) update_local_code(); update_local_carrier(); // perform carrier wipe-off and compute Very Early, Early, Prompt, Late and Very Late correlation d_correlator.Carrier_wipeoff_and_VEPL_volk(d_current_prn_length_samples, in, d_carr_sign, d_very_early_code, d_early_code, d_prompt_code, d_late_code, d_very_late_code, d_Very_Early, d_Early, d_Prompt, d_Late, d_Very_Late); // ################## PLL ########################################################## // PLL discriminator carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast(GPS_TWO_PI); // Carrier discriminator filter carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz); // New carrier Doppler frequency estimation d_carrier_doppler_hz = d_acq_carrier_doppler_hz + carr_error_filt_hz; // New code Doppler frequency estimation d_code_freq_chips = Galileo_E1_CODE_CHIP_RATE_HZ + ((d_carrier_doppler_hz * Galileo_E1_CODE_CHIP_RATE_HZ) / Galileo_E1_FREQ_HZ); //carrier phase accumulator for (K) Doppler estimation d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD; //remnant carrier phase to prevent overflow in the code NCO d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD; d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI); // ################## DLL ########################################################## // DLL discriminator code_error_chips = dll_nc_vemlp_normalized(*d_Very_Early, *d_Early, *d_Late, *d_Very_Late); //[chips/Ti] // Code discriminator filter code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); //[chips/second] //Code phase accumulator float code_error_filt_secs; code_error_filt_secs = (Galileo_E1_CODE_PERIOD * code_error_filt_chips) / Galileo_E1_CODE_CHIP_RATE_HZ; //[seconds] //code_error_filt_secs=T_prn_seconds*code_error_filt_chips*T_chip_seconds*static_cast(d_fs_in); //[seconds] d_acc_code_phase_secs = d_acc_code_phase_secs + code_error_filt_secs; // ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT ####################### // keep alignment parameters for the next input buffer double T_chip_seconds; double T_prn_seconds; double T_prn_samples; double K_blk_samples; // Compute the next buffer lenght based in the new period of the PRN sequence and the code phase error estimation T_chip_seconds = 1 / static_cast(d_code_freq_chips); T_prn_seconds = T_chip_seconds * Galileo_E1_B_CODE_LENGTH_CHIPS; T_prn_samples = T_prn_seconds * static_cast(d_fs_in); K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast(d_fs_in); d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // ####### CN0 ESTIMATION AND LOCK DETECTORS ###### if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES) { // fill buffer with prompt correlator output values d_Prompt_buffer[d_cn0_estimation_counter] = *d_Prompt; d_cn0_estimation_counter++; } else { d_cn0_estimation_counter = 0; // Code lock indicator d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, Galileo_E1_B_CODE_LENGTH_CHIPS); // Carrier lock indicator d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES); // Loss of lock detection if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0) { d_carrier_lock_fail_counter++; } else { if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--; } if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER) { std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl; LOG(INFO) << "Loss of lock in channel " << d_channel << "!"; std::unique_ptr cmf(new ControlMessageFactory()); if (d_queue != gr::msg_queue::sptr()) { d_queue->handle(cmf->GetQueueMessage(d_channel, 2)); } d_carrier_lock_fail_counter = 0; d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine } } // ########### Output the tracking results to Telemetry block ########## current_synchro_data.Prompt_I = static_cast((*d_Prompt).real()); current_synchro_data.Prompt_Q = static_cast((*d_Prompt).imag()); // Tracking_timestamp_secs is aligned with the NEXT PRN start sample (Hybridization problem!) //compute remnant code phase samples BEFORE the Tracking timestamp //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample //current_synchro_data.Tracking_timestamp_secs = ((double)d_sample_counter + // (double)d_current_prn_length_samples + (double)d_rem_code_phase_samples) / static_cast(d_fs_in); // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??) current_synchro_data.Tracking_timestamp_secs = (static_cast(d_sample_counter) + static_cast(d_rem_code_phase_samples)) / static_cast(d_fs_in); //compute remnant code phase samples AFTER the Tracking timestamp d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0 current_synchro_data.Code_phase_secs = 0; current_synchro_data.Carrier_phase_rads = static_cast(d_acc_carrier_phase_rad); current_synchro_data.Carrier_Doppler_hz = static_cast(d_carrier_doppler_hz); current_synchro_data.CN0_dB_hz = static_cast(d_CN0_SNV_dB_Hz); current_synchro_data.Flag_valid_pseudorange = false; *out[0] = current_synchro_data; // ########## DEBUG OUTPUT /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } tmp_str_stream << "Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << ", Doppler=" << d_carrier_doppler_hz << " [Hz] CN0 = " << d_CN0_SNV_dB_Hz << " [dB-Hz]" << std::endl; LOG(INFO) << tmp_str_stream.rdbuf() << std::flush; //if (d_channel == 0 || d_last_seg==5) d_carrier_lock_fail_counter=500; //DEBUG: force unlock! } } else { // ########## DEBUG OUTPUT (TIME ONLY for channel 0 when tracking is disabled) /*! * \todo The stop timer has to be moved to the signal source! */ // stream to collect cout calls to improve thread safety std::stringstream tmp_str_stream; if (floor(d_sample_counter / d_fs_in) != d_last_seg) { d_last_seg = floor(d_sample_counter / d_fs_in); if (d_channel == 0) { // debug: Second counter in channel 0 tmp_str_stream << "Current input signal time = " << d_last_seg << " [s]" << std::endl << std::flush; std::cout << tmp_str_stream.rdbuf() << std::flush; } } *d_Early = gr_complex(0,0); *d_Prompt = gr_complex(0,0); *d_Late = gr_complex(0,0); Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //block output stream pointer // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder d_acquisition_gnss_synchro->Flag_valid_pseudorange = false; *out[0] = *d_acquisition_gnss_synchro; } if(d_dump) { // Dump results to file float prompt_I; float prompt_Q; float tmp_VE, tmp_E, tmp_P, tmp_L, tmp_VL; float tmp_float; double tmp_double; prompt_I = (*d_Prompt).real(); prompt_Q = (*d_Prompt).imag(); tmp_VE = std::abs(*d_Very_Early); tmp_E = std::abs(*d_Early); tmp_P = std::abs(*d_Prompt); tmp_L = std::abs(*d_Late); tmp_VL = std::abs(*d_Very_Late); try { // Dump correlators output d_dump_file.write(reinterpret_cast(&tmp_VE), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_E), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_P), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_L), sizeof(float)); d_dump_file.write(reinterpret_cast(&tmp_VL), sizeof(float)); // PROMPT I and Q (to analyze navigation symbols) d_dump_file.write(reinterpret_cast(&prompt_I), sizeof(float)); d_dump_file.write(reinterpret_cast(&prompt_Q), sizeof(float)); // PRN start sample stamp d_dump_file.write(reinterpret_cast(&d_sample_counter), sizeof(unsigned long int)); // accumulated carrier phase d_dump_file.write(reinterpret_cast(&d_acc_carrier_phase_rad), sizeof(float)); // carrier and code frequency d_dump_file.write(reinterpret_cast(&d_carrier_doppler_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_code_freq_chips), sizeof(float)); //PLL commands d_dump_file.write(reinterpret_cast(&carr_error_hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&carr_error_filt_hz), sizeof(float)); //DLL commands d_dump_file.write(reinterpret_cast(&code_error_chips), sizeof(float)); d_dump_file.write(reinterpret_cast(&code_error_filt_chips), sizeof(float)); // CN0 and carrier lock test d_dump_file.write(reinterpret_cast(&d_CN0_SNV_dB_Hz), sizeof(float)); d_dump_file.write(reinterpret_cast(&d_carrier_lock_test), sizeof(float)); // AUX vars (for debug purposes) tmp_float = d_rem_code_phase_samples; d_dump_file.write(reinterpret_cast(&tmp_float), sizeof(float)); tmp_double = static_cast(d_sample_counter + d_current_prn_length_samples); d_dump_file.write(reinterpret_cast(&tmp_double), sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing trk dump file " << e.what() << std::endl; } } consume_each(d_current_prn_length_samples); // this is required for gr_block derivates d_sample_counter += d_current_prn_length_samples; //count for the processed samples //std::cout<<"Galileo tracking output at sample "<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what() << std::endl; } } } } void galileo_e1_dll_pll_veml_tracking_cc::set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } void galileo_e1_dll_pll_veml_tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_acquisition_gnss_synchro = p_gnss_synchro; // Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); //DLOG(INFO) << "Tracking code phase set to " << d_acq_code_phase_samples; //DLOG(INFO) << "Tracking carrier doppler set to " << d_acq_carrier_doppler_hz; //DLOG(INFO) << "Tracking Satellite set to " << d_satellite; } gnss-sdr-0.0.6/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_optim_tracking_cc.h0000644000175000017500000001446112576764164031762 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_optim_tracking_cc.h * \brief Implementation of a code DLL + carrier PLL tracking block * \author Javier Arribas, 2012. jarribas(at)cttc.es * GPS L1 TRACKING MODULE OPTIMIZED FOR SPEED: * - Code Doppler is not compensated in the local replica * Code DLL + carrier PLL according to the algorithms described in: * [1] K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_OPTIM_TRACKING_CC_H #define GNSS_SDR_GPS_L1_CA_DLL_PLL_OPTIM_TRACKING_CC_H #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gps_sdr_signal_processing.h" #include "gnss_synchro.h" #include "tracking_2nd_DLL_filter.h" #include "tracking_2nd_PLL_filter.h" #include "correlator.h" class Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc; typedef boost::shared_ptr gps_l1_ca_dll_pll_optim_tracking_cc_sptr; gps_l1_ca_dll_pll_optim_tracking_cc_sptr gps_l1_ca_dll_pll_make_optim_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); /*! * \brief This class implements a DLL + PLL tracking loop block */ class Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc: public gr::block { public: ~Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc(); void set_channel(unsigned int channel); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); void set_channel_queue(concurrent_queue *channel_internal_queue); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l1_ca_dll_pll_optim_tracking_cc_sptr gps_l1_ca_dll_pll_make_optim_tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); Gps_L1_Ca_Dll_Pll_Optim_Tracking_cc(long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump, std::string dump_filename, float pll_bw_hz, float dll_bw_hz, float early_late_space_chips); void update_local_code(); void update_local_carrier(); // tracking configuration vars boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; unsigned int d_vector_length; bool d_dump; Gnss_Synchro* d_acquisition_gnss_synchro; unsigned int d_channel; int d_last_seg; long d_if_freq; long d_fs_in; double d_early_late_spc_chips; gr_complex* d_ca_code; gr_complex* d_early_code; gr_complex* d_late_code; gr_complex* d_prompt_code; gr_complex* d_carr_sign; gr_complex *d_Early; gr_complex *d_Prompt; gr_complex *d_Late; // remaining code phase and carrier phase between tracking loops double d_rem_code_phase_samples; float d_rem_carr_phase_rad; // PLL and DLL filter library Tracking_2nd_DLL_filter d_code_loop_filter; Tracking_2nd_PLL_filter d_carrier_loop_filter; // acquisition float d_acq_code_phase_samples; float d_acq_carrier_doppler_hz; // correlator Correlator d_correlator; // tracking vars double d_code_freq_chips; float d_carrier_doppler_hz; float d_acc_carrier_phase_rad; float d_code_phase_samples; float d_acc_code_phase_secs; //PRN period in samples int d_current_prn_length_samples; //processing samples counters unsigned long int d_sample_counter; unsigned long int d_acq_sample_stamp; // CN0 estimation and lock detector int d_cn0_estimation_counter; gr_complex* d_Prompt_buffer; float d_carrier_lock_test; float d_CN0_SNV_dB_Hz; float d_carrier_lock_threshold; int d_carrier_lock_fail_counter; // control vars int d_gnuradio_forecast_samples; bool d_enable_tracking; bool d_pull_in; // file dump std::string d_dump_filename; std::ofstream d_dump_file; std::map systemName; std::string sys; }; #endif //GNSS_SDR_GPS_L1_CA_DLL_PLL_OPTIM_TRACKING_CC_H gnss-sdr-0.0.6/src/algorithms/tracking/CMakeLists.txt0000644000175000017500000000146112576764164022107 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) add_subdirectory(libs)gnss-sdr-0.0.6/src/algorithms/tracking/libs/0000755000175000017500000000000012576764211020267 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/tracking/libs/cuda_multicorrelator.cu0000644000175000017500000006412112576764211025047 0ustar carlescarles/*! * \file cuda_multicorrelator.cu * \brief High optimized CUDA GPU vector multiTAP correlator class * \authors
    *
  • Javier Arribas, 2015. jarribas(at)cttc.es *
* * Class that implements a high optimized vector multiTAP correlator class for NVIDIA CUDA GPUs * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ /////////////////////////////////////////////////////////////////////////////// // On G80-class hardware 24-bit multiplication takes 4 clocks per warp // (the same as for floating point multiplication and addition), // whereas full 32-bit multiplication takes 16 clocks per warp. // So if integer multiplication operands are guaranteed to fit into 24 bits // (always lie withtin [-8M, 8M - 1] range in signed case), // explicit 24-bit multiplication is preferred for performance. /////////////////////////////////////////////////////////////////////////////// #define IMUL(a, b) __mul24(a, b) #include "cuda_multicorrelator.h" #include // For the CUDA runtime routines (prefixed with "cuda_") #include #define ACCUM_N 256 __global__ void scalarProdGPUCPXxN_shifts_chips( GPU_Complex *d_corr_out, GPU_Complex *d_sig_in, GPU_Complex *d_local_code_in, float *d_shifts_chips, float code_length_chips, float code_phase_step_chips, float rem_code_phase_chips, int vectorN, int elementN ) { //Accumulators cache __shared__ GPU_Complex accumResult[ACCUM_N]; //////////////////////////////////////////////////////////////////////////// // Cycle through every pair of vectors, // taking into account that vector counts can be different // from total number of thread blocks //////////////////////////////////////////////////////////////////////////// for (int vec = blockIdx.x; vec < vectorN; vec += gridDim.x) { //int vectorBase = IMUL(elementN, vec); //int vectorEnd = elementN; //////////////////////////////////////////////////////////////////////// // Each accumulator cycles through vectors with // stride equal to number of total number of accumulators ACCUM_N // At this stage ACCUM_N is only preferred be a multiple of warp size // to meet memory coalescing alignment constraints. //////////////////////////////////////////////////////////////////////// for (int iAccum = threadIdx.x; iAccum < ACCUM_N; iAccum += blockDim.x) { GPU_Complex sum = GPU_Complex(0,0); for (int pos = iAccum; pos < elementN; pos += ACCUM_N) { //sum = sum + d_sig_in[pos-vectorBase] * d_nco_in[pos-vectorBase] * d_local_codes_in[pos]; //sum = sum + d_sig_in[pos-vectorBase] * d_local_codes_in[pos]; //sum.multiply_acc(d_sig_in[pos],d_local_codes_in[pos+d_shifts_samples[vec]]); // 1.resample local code for the current shift float local_code_chip_index= fmod(code_phase_step_chips*(float)pos + d_shifts_chips[vec] - rem_code_phase_chips, code_length_chips); //TODO: Take into account that in multitap correlators, the shifts can be negative! if (local_code_chip_index<0.0) local_code_chip_index+=code_length_chips; // 2.correlate sum.multiply_acc(d_sig_in[pos],d_local_code_in[__float2int_rd(local_code_chip_index)]); } accumResult[iAccum] = sum; } //////////////////////////////////////////////////////////////////////// // Perform tree-like reduction of accumulators' results. // ACCUM_N has to be power of two at this stage //////////////////////////////////////////////////////////////////////// for (int stride = ACCUM_N / 2; stride > 0; stride >>= 1) { __syncthreads(); for (int iAccum = threadIdx.x; iAccum < stride; iAccum += blockDim.x) { accumResult[iAccum] += accumResult[stride + iAccum]; } } if (threadIdx.x == 0) { d_corr_out[vec] = accumResult[0]; } } } /////////////////////////////////////////////////////////////////////////////// // Calculate scalar products of VectorN vectors of ElementN elements on GPU // Parameters restrictions: // 1) ElementN is strongly preferred to be a multiple of warp size to // meet alignment constraints of memory coalescing. // 2) ACCUM_N must be a power of two. /////////////////////////////////////////////////////////////////////////////// __global__ void scalarProdGPUCPXxN_shifts( GPU_Complex *d_corr_out, GPU_Complex *d_sig_in, GPU_Complex *d_local_codes_in, int *d_shifts_samples, int vectorN, int elementN ) { //Accumulators cache __shared__ GPU_Complex accumResult[ACCUM_N]; //////////////////////////////////////////////////////////////////////////// // Cycle through every pair of vectors, // taking into account that vector counts can be different // from total number of thread blocks //////////////////////////////////////////////////////////////////////////// for (int vec = blockIdx.x; vec < vectorN; vec += gridDim.x) { int vectorBase = IMUL(elementN, vec); int vectorEnd = vectorBase + elementN; //////////////////////////////////////////////////////////////////////// // Each accumulator cycles through vectors with // stride equal to number of total number of accumulators ACCUM_N // At this stage ACCUM_N is only preferred be a multiple of warp size // to meet memory coalescing alignment constraints. //////////////////////////////////////////////////////////////////////// for (int iAccum = threadIdx.x; iAccum < ACCUM_N; iAccum += blockDim.x) { GPU_Complex sum = GPU_Complex(0,0); for (int pos = vectorBase + iAccum; pos < vectorEnd; pos += ACCUM_N) { //sum = sum + d_sig_in[pos-vectorBase] * d_nco_in[pos-vectorBase] * d_local_codes_in[pos]; //sum = sum + d_sig_in[pos-vectorBase] * d_local_codes_in[pos]; sum.multiply_acc(d_sig_in[pos-vectorBase],d_local_codes_in[pos-vectorBase+d_shifts_samples[vec]]); } accumResult[iAccum] = sum; } //////////////////////////////////////////////////////////////////////// // Perform tree-like reduction of accumulators' results. // ACCUM_N has to be power of two at this stage //////////////////////////////////////////////////////////////////////// for (int stride = ACCUM_N / 2; stride > 0; stride >>= 1) { __syncthreads(); for (int iAccum = threadIdx.x; iAccum < stride; iAccum += blockDim.x) { accumResult[iAccum] += accumResult[stride + iAccum]; } } if (threadIdx.x == 0) { d_corr_out[vec] = accumResult[0]; } } } __global__ void scalarProdGPUCPXxN( GPU_Complex *d_corr_out, GPU_Complex *d_sig_in, GPU_Complex *d_local_codes_in, int vectorN, int elementN ) { //Accumulators cache __shared__ GPU_Complex accumResult[ACCUM_N]; //////////////////////////////////////////////////////////////////////////// // Cycle through every pair of vectors, // taking into account that vector counts can be different // from total number of thread blocks //////////////////////////////////////////////////////////////////////////// for (int vec = blockIdx.x; vec < vectorN; vec += gridDim.x) { //int vectorBase = IMUL(elementN, vec); //int vectorEnd = vectorBase + elementN; //////////////////////////////////////////////////////////////////////// // Each accumulator cycles through vectors with // stride equal to number of total number of accumulators ACCUM_N // At this stage ACCUM_N is only preferred be a multiple of warp size // to meet memory coalescing alignment constraints. //////////////////////////////////////////////////////////////////////// for (int iAccum = threadIdx.x; iAccum < ACCUM_N; iAccum += blockDim.x) { GPU_Complex sum = GPU_Complex(0,0); //for (int pos = vectorBase + iAccum; pos < vectorEnd; pos += ACCUM_N) for (int pos = iAccum; pos < elementN; pos += ACCUM_N) { //sum = sum + d_sig_in[pos-vectorBase] * d_nco_in[pos-vectorBase] * d_local_codes_in[pos]; //sum = sum + d_sig_in[pos-vectorBase] * d_local_codes_in[pos]; //sum.multiply_acc(d_sig_in[pos-vectorBase],d_local_codes_in[pos]); sum.multiply_acc(d_sig_in[pos],d_local_codes_in[pos]); } accumResult[iAccum] = sum; } //////////////////////////////////////////////////////////////////////// // Perform tree-like reduction of accumulators' results. // ACCUM_N has to be power of two at this stage //////////////////////////////////////////////////////////////////////// for (int stride = ACCUM_N / 2; stride > 0; stride >>= 1) { __syncthreads(); for (int iAccum = threadIdx.x; iAccum < stride; iAccum += blockDim.x) { accumResult[iAccum] += accumResult[stride + iAccum]; } } if (threadIdx.x == 0) { d_corr_out[vec] = accumResult[0]; } } } //*********** CUDA processing ************** // Treads: a minimal parallel execution code on GPU // Blocks: a set of N threads /** * CUDA Kernel Device code * * Computes the vectorial product of A and B into C. The 3 vectors have the same * number of elements numElements. */ __global__ void CUDA_32fc_x2_multiply_32fc( GPU_Complex *A, GPU_Complex *B, GPU_Complex *C, int numElements) { for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < numElements; i += blockDim.x * gridDim.x) { C[i] = A[i] * B[i]; } } /** * CUDA Kernel Device code * * Computes the carrier Doppler wipe-off by integrating the NCO in the CUDA kernel */ __global__ void CUDA_32fc_Doppler_wipeoff( GPU_Complex *sig_out, GPU_Complex *sig_in, float rem_carrier_phase_in_rad, float phase_step_rad, int numElements) { //*** NCO CPU code (GNURadio FXP NCO) //float sin_f, cos_f; //float phase_step_rad = static_cast(2 * GALILEO_PI) * d_carrier_doppler_hz / static_cast(d_fs_in); //int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); //int phase_rad_i = gr::fxpt::float_to_fixed(d_rem_carr_phase_rad); // //for(int i = 0; i < d_current_prn_length_samples; i++) // { // gr::fxpt::sincos(phase_rad_i, &sin_f, &cos_f); // d_carr_sign[i] = std::complex(cos_f, -sin_f); // phase_rad_i += phase_step_rad_i; // } // CUDA version of floating point NCO and vector dot product integrated float sin; float cos; for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < numElements; i += blockDim.x * gridDim.x) { __sincosf(rem_carrier_phase_in_rad + i*phase_step_rad, &sin, &cos); sig_out[i] = sig_in[i] * GPU_Complex(cos,-sin); } } /** * CUDA Kernel Device code * * Computes the vectorial product of A and B into C. The 3 vectors have the same * number of elements numElements. */ __global__ void CUDA_32fc_x2_add_32fc( GPU_Complex *A, GPU_Complex *B, GPU_Complex *C, int numElements) { for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < numElements; i += blockDim.x * gridDim.x) { C[i] = A[i] + B[i]; } } bool cuda_multicorrelator::init_cuda(const int argc, const char **argv, int signal_length_samples, int local_codes_length_samples, int n_correlators) { // use command-line specified CUDA device, otherwise use device with highest Gflops/s // findCudaDevice(argc, (const char **)argv); // cudaDeviceProp prop; // int num_devices, device; // cudaGetDeviceCount(&num_devices); // if (num_devices > 1) { // int max_multiprocessors = 0, max_device = 0; // for (device = 0; device < num_devices; device++) { // cudaDeviceProp properties; // cudaGetDeviceProperties(&properties, device); // if (max_multiprocessors < properties.multiProcessorCount) { // max_multiprocessors = properties.multiProcessorCount; // max_device = device; // } // printf("Found GPU device # %i\n",device); // } // //cudaSetDevice(max_device); // // //set random device! // cudaSetDevice(rand() % num_devices); //generates a random number between 0 and num_devices to split the threads between GPUs // // cudaGetDeviceProperties( &prop, max_device ); // //debug code // if (prop.canMapHostMemory != 1) { // printf( "Device can not map memory.\n" ); // } // printf("L2 Cache size= %u \n",prop.l2CacheSize); // printf("maxThreadsPerBlock= %u \n",prop.maxThreadsPerBlock); // printf("maxGridSize= %i \n",prop.maxGridSize[0]); // printf("sharedMemPerBlock= %lu \n",prop.sharedMemPerBlock); // printf("deviceOverlap= %i \n",prop.deviceOverlap); // printf("multiProcessorCount= %i \n",prop.multiProcessorCount); // }else{ // int whichDevice; // cudaGetDevice( &whichDevice ); // cudaGetDeviceProperties( &prop, whichDevice ); // //debug code // if (prop.canMapHostMemory != 1) { // printf( "Device can not map memory.\n" ); // } // // printf("L2 Cache size= %u \n",prop.l2CacheSize); // printf("maxThreadsPerBlock= %u \n",prop.maxThreadsPerBlock); // printf("maxGridSize= %i \n",prop.maxGridSize[0]); // printf("sharedMemPerBlock= %lu \n",prop.sharedMemPerBlock); // printf("deviceOverlap= %i \n",prop.deviceOverlap); // printf("multiProcessorCount= %i \n",prop.multiProcessorCount); // } // (cudaFuncSetCacheConfig(CUDA_32fc_x2_multiply_x2_dot_prod_32fc_, cudaFuncCachePreferShared)); // ALLOCATE GPU MEMORY FOR INPUT/OUTPUT and INTERNAL vectors size_t size = signal_length_samples * sizeof(GPU_Complex); cudaMalloc((void **)&d_sig_in, size); // (cudaMalloc((void **)&d_nco_in, size)); cudaMalloc((void **)&d_sig_doppler_wiped, size); // old version: all local codes are independent vectors // (cudaMalloc((void **)&d_local_codes_in, size*n_correlators)); // new version: only one vector with extra samples to shift the local code for the correlator set // Required: The last correlator tap in d_shifts_samples has the largest sample shift size_t size_local_code_bytes = local_codes_length_samples * sizeof(GPU_Complex); cudaMalloc((void **)&d_local_codes_in, size_local_code_bytes); cudaMalloc((void **)&d_shifts_samples, sizeof(int)*n_correlators); //scalars cudaMalloc((void **)&d_corr_out, sizeof(std::complex)*n_correlators); // Launch the Vector Add CUDA Kernel threadsPerBlock = 256; blocksPerGrid =(int)(signal_length_samples+threadsPerBlock-1)/threadsPerBlock; cudaStreamCreate (&stream1) ; cudaStreamCreate (&stream2) ; return true; } bool cuda_multicorrelator::init_cuda_integrated_resampler( const int argc, const char **argv, int signal_length_samples, int code_length_chips, int n_correlators ) { // use command-line specified CUDA device, otherwise use device with highest Gflops/s // findCudaDevice(argc, (const char **)argv); // cudaDeviceProp prop; // int num_devices, device; // cudaGetDeviceCount(&num_devices); // if (num_devices > 1) { // int max_multiprocessors = 0, max_device = 0; // for (device = 0; device < num_devices; device++) { // cudaDeviceProp properties; // cudaGetDeviceProperties(&properties, device); // if (max_multiprocessors < properties.multiProcessorCount) { // max_multiprocessors = properties.multiProcessorCount; // max_device = device; // } // printf("Found GPU device # %i\n",device); // } // //cudaSetDevice(max_device); // // //set random device! // cudaSetDevice(rand() % num_devices); //generates a random number between 0 and num_devices to split the threads between GPUs // // cudaGetDeviceProperties( &prop, max_device ); // //debug code // if (prop.canMapHostMemory != 1) { // printf( "Device can not map memory.\n" ); // } // printf("L2 Cache size= %u \n",prop.l2CacheSize); // printf("maxThreadsPerBlock= %u \n",prop.maxThreadsPerBlock); // printf("maxGridSize= %i \n",prop.maxGridSize[0]); // printf("sharedMemPerBlock= %lu \n",prop.sharedMemPerBlock); // printf("deviceOverlap= %i \n",prop.deviceOverlap); // printf("multiProcessorCount= %i \n",prop.multiProcessorCount); // }else{ // int whichDevice; // cudaGetDevice( &whichDevice ); // cudaGetDeviceProperties( &prop, whichDevice ); // //debug code // if (prop.canMapHostMemory != 1) { // printf( "Device can not map memory.\n" ); // } // // printf("L2 Cache size= %u \n",prop.l2CacheSize); // printf("maxThreadsPerBlock= %u \n",prop.maxThreadsPerBlock); // printf("maxGridSize= %i \n",prop.maxGridSize[0]); // printf("sharedMemPerBlock= %lu \n",prop.sharedMemPerBlock); // printf("deviceOverlap= %i \n",prop.deviceOverlap); // printf("multiProcessorCount= %i \n",prop.multiProcessorCount); // } // (cudaFuncSetCacheConfig(CUDA_32fc_x2_multiply_x2_dot_prod_32fc_, cudaFuncCachePreferShared)); // ALLOCATE GPU MEMORY FOR INPUT/OUTPUT and INTERNAL vectors size_t size = signal_length_samples * sizeof(GPU_Complex); cudaMalloc((void **)&d_sig_in, size); cudaMemset(d_sig_in,0,size); // (cudaMalloc((void **)&d_nco_in, size)); cudaMalloc((void **)&d_sig_doppler_wiped, size); cudaMemset(d_sig_doppler_wiped,0,size); cudaMalloc((void **)&d_local_codes_in, sizeof(std::complex)*code_length_chips); cudaMemset(d_local_codes_in,0,sizeof(std::complex)*code_length_chips); d_code_length_chips=code_length_chips; cudaMalloc((void **)&d_shifts_chips, sizeof(float)*n_correlators); cudaMemset(d_shifts_chips,0,sizeof(float)*n_correlators); //scalars cudaMalloc((void **)&d_corr_out, sizeof(std::complex)*n_correlators); cudaMemset(d_corr_out,0,sizeof(std::complex)*n_correlators); // Launch the Vector Add CUDA Kernel threadsPerBlock = 256; blocksPerGrid =(int)(signal_length_samples+threadsPerBlock-1)/threadsPerBlock; cudaStreamCreate (&stream1) ; cudaStreamCreate (&stream2) ; return true; } bool cuda_multicorrelator::set_local_code_and_taps( int code_length_chips, const std::complex* local_codes_in, float *shifts_chips, int n_correlators ) { // local code CPU -> GPU copy memory cudaMemcpyAsync(d_local_codes_in, local_codes_in, sizeof(GPU_Complex)*code_length_chips, cudaMemcpyHostToDevice,stream1); d_code_length_chips=(float)code_length_chips; // Correlator shifts vector CPU -> GPU copy memory (fractional chip shifts are allowed!) cudaMemcpyAsync(d_shifts_chips, shifts_chips, sizeof(float)*n_correlators, cudaMemcpyHostToDevice,stream1); return true; } bool cuda_multicorrelator::Carrier_wipeoff_multicorrelator_cuda( std::complex* corr_out, const std::complex* sig_in, const std::complex* local_codes_in, float rem_carrier_phase_in_rad, float phase_step_rad, const int *shifts_samples, int signal_length_samples, int n_correlators) { size_t memSize = signal_length_samples * sizeof(std::complex); // input signal CPU -> GPU copy memory cudaMemcpyAsync(d_sig_in, sig_in, memSize, cudaMemcpyHostToDevice, stream1); //***** NOTICE: NCO is computed on-the-fly, not need to copy NCO into GPU! **** // (cudaMemcpyAsync(d_nco_in, nco_in, memSize, // cudaMemcpyHostToDevice, stream1)); // old version: all local codes are independent vectors // (cudaMemcpyAsync(d_local_codes_in, local_codes_in, memSize*n_correlators, // cudaMemcpyHostToDevice, stream2)); // new version: only one vector with extra samples to shift the local code for the correlator set // Required: The last correlator tap in d_shifts_samples has the largest sample shift // local code CPU -> GPU copy memory cudaMemcpyAsync(d_local_codes_in, local_codes_in, memSize+sizeof(std::complex)*shifts_samples[n_correlators-1], cudaMemcpyHostToDevice, stream2); // Correlator shifts vector CPU -> GPU copy memory cudaMemcpyAsync(d_shifts_samples, shifts_samples, sizeof(int)*n_correlators, cudaMemcpyHostToDevice, stream2); //Launch carrier wipe-off kernel here, while local codes are being copied to GPU! cudaStreamSynchronize(stream1); CUDA_32fc_Doppler_wipeoff<<>>(d_sig_doppler_wiped, d_sig_in,rem_carrier_phase_in_rad,phase_step_rad, signal_length_samples); //printf("CUDA kernel launch with %d blocks of %d threads\n", blocksPerGrid, threadsPerBlock); //wait for Doppler wipeoff end... cudaStreamSynchronize(stream1); cudaStreamSynchronize(stream2); // (cudaDeviceSynchronize()); //old // scalarProdGPUCPXxN<<>>( // d_corr_out, // d_sig_doppler_wiped, // d_local_codes_in, // 3, // signal_length_samples // ); //new //launch the multitap correlator scalarProdGPUCPXxN_shifts<<>>( d_corr_out, d_sig_doppler_wiped, d_local_codes_in, d_shifts_samples, n_correlators, signal_length_samples ); cudaGetLastError(); //wait for correlators end... cudaStreamSynchronize(stream2); // Copy the device result vector in device memory to the host result vector // in host memory. //scalar products (correlators outputs) cudaMemcpy(corr_out, d_corr_out, sizeof(std::complex)*n_correlators, cudaMemcpyDeviceToHost); return true; } bool cuda_multicorrelator::Carrier_wipeoff_multicorrelator_resampler_cuda( std::complex* corr_out, const std::complex* sig_in, float rem_carrier_phase_in_rad, float phase_step_rad, float code_phase_step_chips, float rem_code_phase_chips, int signal_length_samples, int n_correlators) { size_t memSize = signal_length_samples * sizeof(std::complex); // input signal CPU -> GPU copy memory cudaMemcpyAsync(d_sig_in, sig_in, memSize, cudaMemcpyHostToDevice, stream2); //***** NOTICE: NCO is computed on-the-fly, not need to copy NCO into GPU! **** //Launch carrier wipe-off kernel here, while local codes are being copied to GPU! cudaStreamSynchronize(stream2); CUDA_32fc_Doppler_wipeoff<<>>(d_sig_doppler_wiped, d_sig_in,rem_carrier_phase_in_rad,phase_step_rad, signal_length_samples); //wait for Doppler wipeoff end... cudaStreamSynchronize(stream1); cudaStreamSynchronize(stream2); //launch the multitap correlator with integrated local code resampler! scalarProdGPUCPXxN_shifts_chips<<>>( d_corr_out, d_sig_doppler_wiped, d_local_codes_in, d_shifts_chips, d_code_length_chips, code_phase_step_chips, rem_code_phase_chips, n_correlators, signal_length_samples ); cudaGetLastError(); //wait for correlators end... cudaStreamSynchronize(stream1); // Copy the device result vector in device memory to the host result vector // in host memory. //scalar products (correlators outputs) cudaMemcpyAsync(corr_out, d_corr_out, sizeof(std::complex)*n_correlators, cudaMemcpyDeviceToHost,stream1); cudaStreamSynchronize(stream1); return true; } cuda_multicorrelator::cuda_multicorrelator() { d_sig_in=NULL; d_nco_in=NULL; d_sig_doppler_wiped=NULL; d_local_codes_in=NULL; d_shifts_samples=NULL; d_shifts_chips=NULL; d_corr_out=NULL; threadsPerBlock=0; blocksPerGrid=0; d_code_length_chips=0; } bool cuda_multicorrelator::free_cuda() { // Free device global memory if (d_sig_in!=NULL) cudaFree(d_sig_in); if (d_nco_in!=NULL) cudaFree(d_nco_in); if (d_sig_doppler_wiped!=NULL) cudaFree(d_sig_doppler_wiped); if (d_local_codes_in!=NULL) cudaFree(d_local_codes_in); if (d_corr_out!=NULL) cudaFree(d_corr_out); if (d_shifts_samples!=NULL) cudaFree(d_shifts_samples); if (d_shifts_chips!=NULL) cudaFree(d_shifts_chips); cudaStreamDestroy(stream1) ; cudaStreamDestroy(stream2) ; // Reset the device and exit // cudaDeviceReset causes the driver to clean up all state. While // not mandatory in normal operation, it is good practice. It is also // needed to ensure correct operation when the application is being // profiled. Calling cudaDeviceReset causes all profile data to be // flushed before the application exits // (cudaDeviceReset()); return true; } gnss-sdr-0.0.6/src/algorithms/tracking/libs/lock_detectors.h0000644000175000017500000001007412576764164023455 0ustar carlescarles/*! * \file lock_detectors.h * \brief Interface of a library with a set of code and carrier phase lock detectors. * * SNV_CN0 is a Carrier-to-Noise (CN0) estimator * based on the Signal-to-Noise Variance (SNV) estimator [1]. * Carrier lock detector using normalised estimate of the cosine * of twice the carrier phase error [2]. * * [1] Marco Pini, Emanuela Falletti and Maurizio Fantino, "Performance * Evaluation of C/N0 Estimators using a Real Time GNSS Software Receiver," * IEEE 10th International Symposium on Spread Spectrum Techniques and * Applications, pp.28-30, August 2008. * * [2] Van Dierendonck, A.J. (1996), Global Positioning System: Theory and * Applications, * Volume I, Chapter 8: GPS Receivers, AJ Systems, Los Altos, CA 94024. * Inc.: 329-407. * \authors
    *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
* ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_LOCK_DETECTORS_H_ #define GNSS_SDR_LOCK_DETECTORS_H_ #include /*! \brief CN0_SNV is a Carrier-to-Noise (CN0) estimator * based on the Signal-to-Noise Variance (SNV) estimator * * Signal-to-Noise (SNR) (\f$\rho\f$) estimator using the Signal-to-Noise Variance (SNV) estimator: * \f{equation} * \hat{\rho}=\frac{\hat{P}_s}{\hat{P}_n}=\frac{\hat{P}_s}{\hat{P}_{tot}-\hat{P}_s}, * \f} * where \f$\hat{P}_s=\left(\frac{1}{N}\sum^{N-1}_{i=0}|Re(Pc(i))|\right)^2\f$ is the estimation of the signal power, * \f$\hat{P}_{tot}=\frac{1}{N}\sum^{N-1}_{i=0}|Pc(i)|^2\f$ is the estimator of the total power, \f$|\cdot|\f$ is the absolute value, * \f$Re(\cdot)\f$ stands for the real part of the value, and \f$Pc(i)\f$ is the prompt correlator output for the sample index i. * * The SNR value is converted to CN0 [dB-Hz], taking to account the receiver bandwidth and the PRN code gain, using the following formula: * \f{equation} * CN0_{dB}=10*log(\hat{\rho})+10*log(\frac{f_s}{2})-10*log(L_{PRN}), * \f} * where \f$f_s\f$ is the sampling frequency and \f$L_{PRN}\f$ is the PRN sequence length. * Ref: Marco Pini, Emanuela Falletti and Maurizio Fantino, "Performance * Evaluation of C/N0 Estimators using a Real Time GNSS Software Receiver," * IEEE 10th International Symposium on Spread Spectrum Techniques and * Applications, pp.28-30, August 2008. */ float cn0_svn_estimator(gr_complex* Prompt_buffer, int length, long fs_in, double code_length); /*! \brief A carrier lock detector * * The Carrier Phase Lock Detector block uses the estimate of the cosine of twice the carrier phase error is given by * \f{equation} * C2\phi=\frac{NBD}{NBP}, * \f} * where \f$NBD=(\sum^{N-1}_{i=0}|Im(Pc(i))|)^2+(\sum^{N-1}_{i=0}|Re(Pc(i))|)^2\f$, * \f$NBP=\sum^{N-1}_{i=0}Im(Pc(i))^2-\sum^{N-1}_{i=0}Re(Pc(i))^2\f$, and * \f$Pc(i)\f$ is the prompt correlator output for the sample index i. * Ref: Van Dierendonck, A.J. (1996), Global Positioning System: Theory and * Applications, * Volume I, Chapter 8: GPS Receivers, AJ Systems, Los Altos, CA 94024. * Inc.: 329-407. */ float carrier_lock_detector(gr_complex* Prompt_buffer, int length); #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_discriminators.cc0000644000175000017500000001047412576764164025527 0ustar carlescarles/*! * \file tracking_discriminators.cc * \brief Implementation of a library with a set of code tracking * and carrier tracking discriminators that is used by the tracking algorithms. * \authors
    *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
* * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "tracking_discriminators.h" #include // All the outputs are in RADIANS /* * FLL four quadrant arctan discriminator: * \f{equation} * \frac{\phi_2-\phi_1}{t_2-t1}=\frac{ATAN2(cross,dot)}{t_1-t_2}, * \f} * where \f$cross=I_{PS1}Q_{PS2}-I_{PS2}Q_{PS1}\f$ and \f$dot=I_{PS1}I_{PS2}+Q_{PS1}Q_{PS2}\f$, * \f$I_{PS1},Q_{PS1}\f$ are the inphase and quadrature prompt correlator outputs respectively at sample time \f$t_1\f$, and * \f$I_{PS2},Q_{PS2}\f$ are the inphase and quadrature prompt correlator outputs respectively at sample time \f$t_2\f$. The output is in [radians/second]. */ float fll_four_quadrant_atan(gr_complex prompt_s1, gr_complex prompt_s2, float t1, float t2) { float cross, dot; dot = prompt_s1.real()*prompt_s2.real() + prompt_s1.imag()*prompt_s2.imag(); cross = prompt_s1.real()*prompt_s2.imag() - prompt_s2.real()*prompt_s1.imag(); return atan2(cross, dot) / (t2-t1); } /* * PLL four quadrant arctan discriminator: * \f{equation} * \phi=ATAN2(Q_{PS},I_{PS}), * \f} * where \f$I_{PS1},Q_{PS1}\f$ are the inphase and quadrature prompt correlator outputs respectively. The output is in [radians]. */ float pll_four_quadrant_atan(gr_complex prompt_s1) { return atan2(prompt_s1.imag(), prompt_s1.real()); } /* * PLL Costas loop two quadrant arctan discriminator: * \f{equation} * \phi=ATAN\left(\frac{Q_{PS}}{I_{PS}}\right), * \f} * where \f$I_{PS1},Q_{PS1}\f$ are the inphase and quadrature prompt correlator outputs respectively. The output is in [radians]. */ float pll_cloop_two_quadrant_atan(gr_complex prompt_s1) { if (prompt_s1.real() != 0.0) { return atan(prompt_s1.imag() / prompt_s1.real()); } else { return 0; } } /* * DLL Noncoherent Early minus Late envelope normalized discriminator: * \f{equation} * error=\frac{E-L}{E+L}, * \f} * where \f$E=\sqrt{I_{ES}^2+Q_{ES}^2}\f$ is the Early correlator output absolute value and * \f$L=\sqrt{I_{LS}^2+Q_{LS}^2}\f$ is the Late correlator output absolute value. The output is in [chips]. */ float dll_nc_e_minus_l_normalized(gr_complex early_s1, gr_complex late_s1) { float P_early, P_late; P_early = std::abs(early_s1); P_late = std::abs(late_s1); return (P_early - P_late) / ((P_early + P_late)); } /* * DLL Noncoherent Very Early Minus Late Power (VEMLP) normalized discriminator, using the outputs * of four correlators, Very Early (VE), Early (E), Late (L) and Very Late (VL): * \f{equation} * error=\frac{E-L}{E+L}, * \f} * where \f$E=\sqrt{I_{VE}^2+Q_{VE}^2+I_{E}^2+Q_{E}^2}\f$ and * \f$L=\sqrt{I_{VL}^2+Q_{VL}^2+I_{L}^2+Q_{L}^2}\f$ . The output is in [chips]. */ float dll_nc_vemlp_normalized(gr_complex very_early_s1, gr_complex early_s1, gr_complex late_s1, gr_complex very_late_s1) { float P_early, P_late; P_early = std::sqrt(std::norm(very_early_s1) + std::norm(early_s1)); P_late = std::sqrt(std::norm(very_late_s1) + std::norm(late_s1)); return (P_early - P_late) / ((P_early + P_late)); } gnss-sdr-0.0.6/src/algorithms/tracking/libs/CMakeLists.txt0000644000175000017500000000452512576764211023035 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # if(ENABLE_CUDA) # Append current NVCC flags by something, eg comput capability # set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} --gpu-architecture sm_30) list(APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30; -std=c++11;-O3; -use_fast_math -default-stream per-thread") set(CUDA_PROPAGATE_HOST_FLAGS OFF) CUDA_INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}) set(LIB_TYPE STATIC) #set the lib type CUDA_ADD_LIBRARY(CUDA_CORRELATOR_LIB ${LIB_TYPE} cuda_multicorrelator.h cuda_multicorrelator.cu) set(OPT_TRACKING_LIBRARIES ${OPT_TRACKING_LIBRARIES} CUDA_CORRELATOR_LIB) set(OPT_TRACKING_INCLUDES ${OPT_TRACKING_INCLUDES} ${CUDA_INCLUDE_DIRS} ) endif(ENABLE_CUDA) set(TRACKING_LIB_SOURCES correlator.cc lock_detectors.cc tcp_communication.cc tcp_packet_data.cc tracking_2nd_DLL_filter.cc tracking_2nd_PLL_filter.cc tracking_discriminators.cc tracking_FLL_PLL_filter.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${VOLK_INCLUDE_DIRS} ${OPT_TRACKING_INCLUDES} ) if(ENABLE_GENERIC_ARCH) add_definitions( -DGENERIC_ARCH=1 ) endif(ENABLE_GENERIC_ARCH) if (SSE3_AVAILABLE) add_definitions( -DHAVE_SSE3=1 ) endif(SSE3_AVAILABLE) file(GLOB TRACKING_LIB_HEADERS "*.h") add_library(tracking_lib ${TRACKING_LIB_SOURCES} ${TRACKING_LIB_HEADERS}) source_group(Headers FILES ${TRACKING_LIB_HEADERS}) target_link_libraries(tracking_lib ${OPT_TRACKING_LIBRARIES} ${VOLK_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/tracking/libs/correlator.cc0000644000175000017500000001461212576764164022765 0ustar carlescarles/*! * \file correlator.cc * \brief Highly optimized vector correlator class * \authors
    *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
* * Class that implements a high optimized vector correlator class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "correlator.h" #include #if USING_VOLK_CW_EPL_CORR_CUSTOM #define LV_HAVE_SSE3 #include "volk_cw_epl_corr.h" #endif unsigned long Correlator::next_power_2(unsigned long v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; } void Correlator::Carrier_wipeoff_and_EPL_generic(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code,gr_complex* E_out, gr_complex* P_out, gr_complex* L_out) { gr_complex bb_signal_sample(0,0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(int i=0; i < signal_length_samples; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; } } void Correlator::Carrier_wipeoff_and_EPL_volk(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out) { gr_complex* bb_signal = static_cast(volk_malloc(signal_length_samples * sizeof(gr_complex), volk_get_alignment())); volk_32fc_x2_multiply_32fc(bb_signal, input, carrier, signal_length_samples); volk_32fc_x2_dot_prod_32fc(E_out, bb_signal, E_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(P_out, bb_signal, P_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(L_out, bb_signal, L_code, signal_length_samples); volk_free(bb_signal); } //void Correlator::Carrier_wipeoff_and_EPL_volk_IQ(int prn_length_samples,int integration_time ,const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* P_data_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* P_data_out) //{ // gr_complex* bb_signal = static_cast(volk_malloc(signal_length_samples * sizeof(gr_complex), volk_get_alignment())); // volk_32fc_x2_multiply_32fc(bb_signal, input, carrier, integration_time * prn_length_samples); // volk_32fc_x2_dot_prod_32fc(E_out, bb_signal, E_code, integration_time * prn_length_samples); // volk_32fc_x2_dot_prod_32fc(P_out, bb_signal, P_code, integration_time * prn_length_samples); // volk_32fc_x2_dot_prod_32fc(L_out, bb_signal, L_code, integration_time * prn_length_samples); // // Vector of Prompts of I code // for (int i = 0; i < integration_time; i++) // { // volk_32fc_x2_dot_prod_32fc(&P_data_out[i], &bb_signal[i*prn_length_samples], P_data_code, prn_length_samples); // } // // volk_free(bb_signal); //} void Correlator::Carrier_wipeoff_and_EPL_volk_IQ(int signal_length_samples ,const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* P_data_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* P_data_out) { gr_complex* bb_signal = static_cast(volk_malloc(signal_length_samples * sizeof(gr_complex), volk_get_alignment())); volk_32fc_x2_multiply_32fc(bb_signal, input, carrier, signal_length_samples); volk_32fc_x2_dot_prod_32fc(E_out, bb_signal, E_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(P_out, bb_signal, P_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(L_out, bb_signal, L_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(P_data_out, bb_signal, P_data_code, signal_length_samples); volk_free(bb_signal); } void Correlator::Carrier_wipeoff_and_VEPL_volk(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* VE_code, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* VL_code, gr_complex* VE_out, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* VL_out) { gr_complex* bb_signal = static_cast(volk_malloc(signal_length_samples * sizeof(gr_complex), volk_get_alignment())); volk_32fc_x2_multiply_32fc(bb_signal, input, carrier, signal_length_samples); volk_32fc_x2_dot_prod_32fc(VE_out, bb_signal, VE_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(E_out, bb_signal, E_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(P_out, bb_signal, P_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(L_out, bb_signal, L_code, signal_length_samples); volk_32fc_x2_dot_prod_32fc(VL_out, bb_signal, VL_code, signal_length_samples); volk_free(bb_signal); } Correlator::Correlator () {} Correlator::~Correlator () {} #if USING_VOLK_CW_EPL_CORR_CUSTOM void Correlator::Carrier_wipeoff_and_EPL_volk_custom(int signal_length_samples, const gr_complex* input, gr_complex* carrier,gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out) { volk_cw_epl_corr_u(input, carrier, E_code, P_code, L_code, E_out, P_out, L_out, signal_length_samples); } #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.cc0000644000175000017500000000622112576764164025213 0ustar carlescarles/*! * \file tracking_2nd_DLL_filter.cc * \brief Implementation of a 2nd order DLL filter for code tracking loop. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Class that implements 2 order PLL filter for code tracking loop. * The algorithm is described in : * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.~H.~Jensen, A Software-Defined * GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "tracking_2nd_DLL_filter.h" void Tracking_2nd_DLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k) { // Solve natural frequency float Wn; Wn = lbw*8*zeta / (4*zeta*zeta + 1); // solve for t1 & t2 *tau1 = k / (Wn * Wn); *tau2 = (2.0 * zeta) / Wn; } void Tracking_2nd_DLL_filter::set_DLL_BW(float dll_bw_hz) { //Calculate filter coefficient values d_dllnoisebandwidth = dll_bw_hz; calculate_lopp_coef(&d_tau1_code, &d_tau2_code, d_dllnoisebandwidth, d_dlldampingratio, 1.0);// Calculate filter coefficient values } void Tracking_2nd_DLL_filter::initialize() { // code tracking loop parameters d_old_code_nco = 0.0; d_old_code_error = 0.0; } float Tracking_2nd_DLL_filter::get_code_nco(float DLL_discriminator) { float code_nco; code_nco = d_old_code_nco + (d_tau2_code/d_tau1_code)*(DLL_discriminator - d_old_code_error) + (DLL_discriminator+d_old_code_error) * (d_pdi_code/(2*d_tau1_code)); //code_nco = d_old_code_nco + (d_tau2_code/d_tau1_code)*(DLL_discriminator - d_old_code_error) + DLL_discriminator * (d_pdi_code/d_tau1_code); d_old_code_nco = code_nco; d_old_code_error = DLL_discriminator; //[chips] return code_nco; } Tracking_2nd_DLL_filter::Tracking_2nd_DLL_filter (float pdi_code) { d_pdi_code = pdi_code;// Summation interval for code d_dlldampingratio = 0.7; } Tracking_2nd_DLL_filter::Tracking_2nd_DLL_filter () { d_pdi_code = 0.001;// Summation interval for code d_dlldampingratio = 0.7; } Tracking_2nd_DLL_filter::~Tracking_2nd_DLL_filter () {} void Tracking_2nd_DLL_filter::set_pdi(float pdi_code) { d_pdi_code = pdi_code; // Summation interval for code } gnss-sdr-0.0.6/src/algorithms/tracking/libs/cuda_multicorrelator.h0000644000175000017500000001247712576764164024705 0ustar carlescarles/*! * \file cuda_multicorrelator.h * \brief High optimized CUDA GPU vector multiTAP correlator class * \authors
    *
  • Javier Arribas, 2015. jarribas(at)cttc.es *
* * Class that implements a high optimized vector multiTAP correlator class for NVIDIA CUDA GPUs * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef CUDA_MULTICORRELATOR_H_ #define CUDA_MULTICORRELATOR_H_ #ifdef __CUDACC__ #define CUDA_CALLABLE_MEMBER_GLOBAL __global__ #define CUDA_CALLABLE_MEMBER_DEVICE __device__ #else #define CUDA_CALLABLE_MEMBER_GLOBAL #define CUDA_CALLABLE_MEMBER_DEVICE #endif #include #include #include // GPU new internal data types for complex numbers struct GPU_Complex { float r; float i; CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex() {}; CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex( float a, float b ) : r(a), i(b) {} CUDA_CALLABLE_MEMBER_DEVICE float magnitude2( void ) { return r * r + i * i; } CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex operator*(const GPU_Complex& a) { #ifdef __CUDACC__ return GPU_Complex(__fmul_rn(r, a.r) - __fmul_rn(i, a.i), __fmul_rn(i, a.r) + __fmul_rn(r, a.i)); #else return GPU_Complex(r*a.r - i*a.i, i*a.r + r*a.i); #endif } CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex operator+(const GPU_Complex& a) { return GPU_Complex(r + a.r, i + a.i); } CUDA_CALLABLE_MEMBER_DEVICE void operator+=(const GPU_Complex& a) { r += a.r; i += a.i; } CUDA_CALLABLE_MEMBER_DEVICE void multiply_acc(const GPU_Complex& a, const GPU_Complex& b) { //c=a*b+c //real part //c.r=(a.r*b.r - a.i*b.i)+c.r #ifdef __CUDACC__ r = __fmaf_rn(a.r, b.r, r); r = __fmaf_rn(-a.i, b.i, r); //imag part i = __fmaf_rn(a.i, b.r, i); i = __fmaf_rn(a.r, b.i, i); #else r = (a.r*b.r - a.i*b.i) + r; i = (a.i*b.r - a.r*b.i) + i; #endif } }; struct GPU_Complex_Short { float r; float i; CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex_Short( short int a, short int b ) : r(a), i(b) {} CUDA_CALLABLE_MEMBER_DEVICE float magnitude2( void ) { return r * r + i * i; } CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex_Short operator*(const GPU_Complex_Short& a) { return GPU_Complex_Short(r*a.r - i*a.i, i*a.r + r*a.i); } CUDA_CALLABLE_MEMBER_DEVICE GPU_Complex_Short operator+(const GPU_Complex_Short& a) { return GPU_Complex_Short(r+a.r, i+a.i); } }; /*! * \brief Class that implements carrier wipe-off and correlators using NVIDIA CUDA GPU accelerators. */ class cuda_multicorrelator { public: cuda_multicorrelator(); bool init_cuda(const int argc, const char **argv, int signal_length_samples, int local_codes_length_samples, int n_correlators); bool init_cuda_integrated_resampler( const int argc, const char **argv, int signal_length_samples, int code_length_chips, int n_correlators ); bool set_local_code_and_taps( int code_length_chips, const std::complex* local_codes_in, float *shifts_chips, int n_correlators ); bool free_cuda(); bool Carrier_wipeoff_multicorrelator_cuda( std::complex* corr_out, const std::complex* sig_in, const std::complex* local_codes_in, float rem_carrier_phase_in_rad, float phase_step_rad, const int *shifts_samples, int signal_length_samples, int n_correlators); bool Carrier_wipeoff_multicorrelator_resampler_cuda( std::complex* corr_out, const std::complex* sig_in, float rem_carrier_phase_in_rad, float phase_step_rad, float code_phase_step_chips, float rem_code_phase_chips, int signal_length_samples, int n_correlators); private: // Allocate the device input vectors GPU_Complex *d_sig_in; GPU_Complex *d_nco_in; GPU_Complex *d_sig_doppler_wiped; GPU_Complex *d_local_codes_in; GPU_Complex *d_corr_out; int *d_shifts_samples; float *d_shifts_chips; float d_code_length_chips; int threadsPerBlock; int blocksPerGrid; cudaStream_t stream1; cudaStream_t stream2; int num_gpu_devices; int selected_device; }; #endif /* CUDA_MULTICORRELATOR_H_ */ gnss-sdr-0.0.6/src/algorithms/tracking/libs/tcp_communication.h0000644000175000017500000000373412576764164024171 0ustar carlescarles/*! * \file tcp_communication.h * \brief Interface of the TCP communication class * \author David Pubill, 2011. dpubill(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TCP_COMMUNICATION_H_ #define GNSS_SDR_TCP_COMMUNICATION_H_ #include #include #include "tcp_packet_data.h" #define NUM_TX_VARIABLES_GALILEO_E1 13 #define NUM_TX_VARIABLES_GPS_L1_CA 9 #define NUM_RX_VARIABLES 4 /*! * \brief TCP communication class */ class tcp_communication { public: tcp_communication(); ~tcp_communication(); int listen_tcp_connection(size_t d_port_, size_t d_port_ch0_); void send_receive_tcp_packet_galileo_e1(boost::array buf, tcp_packet_data *tcp_data_); void send_receive_tcp_packet_gps_l1_ca(boost::array buf, tcp_packet_data *tcp_data_); void close_tcp_connection(size_t d_port_); private: boost::asio::io_service io_service_; boost::asio::ip::tcp::socket tcp_socket_; }; #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tcp_packet_data.cc0000644000175000017500000000250512576764164023715 0ustar carlescarles/*! * \file tcp_packet_data.cc * \brief Interface of the TCP packet data class * \author David Pubill, 2011. dpubill(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "tcp_packet_data.h" tcp_packet_data::tcp_packet_data() { proc_pack_code_error = 0; proc_pack_carr_error = 0; proc_pack_carrier_doppler_hz = 0; } tcp_packet_data::~tcp_packet_data() {} gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.h0000644000175000017500000000506612576764164025077 0ustar carlescarles/*! * \file tracking_2nd_PLL_filter.h * \brief Interface of a 2nd order PLL filter for carrier tracking loop * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Class that implements 2 order PLL filter for tracking carrier loop. * The algorithm is described in * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H. Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TRACKING_2ND_PLL_FILTER_H_ #define GNSS_SDR_TRACKING_2ND_PLL_FILTER_H_ /*! * \brief This class implements a 2nd order PLL filter for carrier tracking loop. * * The algorithm is described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S. H. Jensen, A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. */ class Tracking_2nd_PLL_filter { private: // PLL filter parameters float d_tau1_carr = 0; float d_tau2_carr = 0; float d_pdi_carr = 0; float d_pllnoisebandwidth = 0; float d_plldampingratio = 0; float d_old_carr_error = 0; float d_old_carr_nco = 0; void calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k); public: void set_PLL_BW(float pll_bw_hz); //! Set PLL loop bandwidth [Hz] void set_pdi(float pdi_carr); //! Set Summation interval for code [s] void initialize(); float get_carrier_nco(float PLL_discriminator); Tracking_2nd_PLL_filter(float pdi_carr); Tracking_2nd_PLL_filter(); ~Tracking_2nd_PLL_filter(); }; #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_2nd_PLL_filter.cc0000644000175000017500000000666712576764164025245 0ustar carlescarles/*! * \file tracking_2nd_PLL_filter.cc * \brief Implementation of a 2nd order PLL filter for tracking carrier loop. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Class that implements 2 order PLL filter for tracking carrier loop. The algorithm * is described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.~H.~Jensen, A Software-Defined * GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "tracking_2nd_PLL_filter.h" void Tracking_2nd_PLL_filter::calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k) { // Solve natural frequency float Wn; Wn = lbw*8*zeta / (4*zeta*zeta + 1); // solve for t1 & t2 *tau1 = k / (Wn * Wn); *tau2 = (2.0 * zeta) / Wn; } void Tracking_2nd_PLL_filter::set_PLL_BW(float pll_bw_hz) { //Calculate filter coefficient values d_pllnoisebandwidth = pll_bw_hz; calculate_lopp_coef(&d_tau1_carr, &d_tau2_carr, d_pllnoisebandwidth, d_plldampingratio, 0.25); // Calculate filter coefficient values } void Tracking_2nd_PLL_filter::initialize() { // carrier/Costas loop parameters d_old_carr_nco = 0.0; d_old_carr_error = 0.0; } /* * PLL second order FIR filter * Req Input in [Hz/Ti] * The output is in [Hz/s]. */ float Tracking_2nd_PLL_filter::get_carrier_nco(float PLL_discriminator) { float carr_nco; carr_nco = d_old_carr_nco + (d_tau2_carr/d_tau1_carr)*(PLL_discriminator - d_old_carr_error) + (PLL_discriminator + d_old_carr_error) * (d_pdi_carr/(2*d_tau1_carr)); //carr_nco = d_old_carr_nco + (d_tau2_carr/d_tau1_carr)*(PLL_discriminator - d_old_carr_error) + PLL_discriminator * (d_pdi_carr/d_tau1_carr); d_old_carr_nco = carr_nco; d_old_carr_error = PLL_discriminator; return carr_nco; } Tracking_2nd_PLL_filter::Tracking_2nd_PLL_filter (float pdi_carr) { //--- PLL variables -------------------------------------------------------- d_pdi_carr = pdi_carr;// Summation interval for carrier //d_plldampingratio = 0.65; d_plldampingratio = 0.7; } Tracking_2nd_PLL_filter::Tracking_2nd_PLL_filter () { //--- PLL variables -------------------------------------------------------- d_pdi_carr = 0.001;// Summation interval for carrier d_plldampingratio = 0.7; } Tracking_2nd_PLL_filter::~Tracking_2nd_PLL_filter () {} void Tracking_2nd_PLL_filter::set_pdi(float pdi_carr) { d_pdi_carr = pdi_carr; // Summation interval for code } gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_FLL_PLL_filter.cc0000644000175000017500000001025212576764164025160 0ustar carlescarles/*! * \file tracking_FLL_PLL_filter.cc * \brief Implementation of a hybrid FLL and PLL filter for tracking carrier loop * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Class that implements hybrid FLL and PLL filter for tracking carrier loop * Filter design (Kaplan 2nd ed., Pag. 181 Fig. 181) * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "tracking_FLL_PLL_filter.h" #include void Tracking_FLL_PLL_filter::set_params(float fll_bw_hz, float pll_bw_hz, int order) { /* * Filter design (Kaplan 2nd ed., Pag. 181 Fig. 181) */ d_order=order; if (d_order==3) { /* * 3rd order PLL with 2nd order FLL assist */ d_pll_b3 = 2.400; d_pll_a3 = 1.100; d_pll_a2 = 1.414; d_pll_w0p = pll_bw_hz / 0.7845; d_pll_w0p2 = d_pll_w0p * d_pll_w0p; d_pll_w0p3 = d_pll_w0p2 * d_pll_w0p; d_pll_w0f = fll_bw_hz / 0.53; d_pll_w0f2 = d_pll_w0f * d_pll_w0f; } else { /* * 2nd order PLL with 1st order FLL assist */ d_pll_a2 = 1.414; d_pll_w0p = pll_bw_hz / 0.53; d_pll_w0p2 = d_pll_w0p * d_pll_w0p; d_pll_w0f = fll_bw_hz / 0.25; } } void Tracking_FLL_PLL_filter::initialize(float d_acq_carrier_doppler_hz) { if (d_order==3) { d_pll_x = 2.0 * d_acq_carrier_doppler_hz; d_pll_w = 0; } else { d_pll_w = d_acq_carrier_doppler_hz; d_pll_x = 0; } } float Tracking_FLL_PLL_filter::get_carrier_error(float FLL_discriminator, float PLL_discriminator, float correlation_time_s) { float carrier_error_hz; if (d_order==3) { /* * 3rd order PLL with 2nd order FLL assist */ d_pll_w = d_pll_w + correlation_time_s * (d_pll_w0p3 * PLL_discriminator + d_pll_w0f2 * FLL_discriminator); d_pll_x = d_pll_x + correlation_time_s * (0.5*d_pll_w + d_pll_a2 * d_pll_w0f * FLL_discriminator + d_pll_a3 * d_pll_w0p2 * PLL_discriminator); carrier_error_hz = 0.5*d_pll_x + d_pll_b3 * d_pll_w0p * PLL_discriminator; } else { /* * 2nd order PLL with 1st order FLL assist */ float pll_w_new; pll_w_new = d_pll_w + PLL_discriminator * d_pll_w0p2 * correlation_time_s + FLL_discriminator * d_pll_w0f * correlation_time_s; carrier_error_hz = 0.5 * (pll_w_new + d_pll_w) + d_pll_a2 * d_pll_w0p * PLL_discriminator; d_pll_w = pll_w_new; /*std::cout<<" d_pll_w = "< *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * Class that implements a high optimized vector correlator class * using the volk library * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CORRELATOR_H_ #define GNSS_SDR_CORRELATOR_H_ #include #include #include #if !defined(GENERIC_ARCH) && HAVE_SSE3 #define USING_VOLK_CW_EPL_CORR_CUSTOM 1 #endif /*! * \brief Class that implements carrier wipe-off and correlators. * * Implemented versions: * - Generic: Standard C++ implementation. * - Volk: uses VOLK (Vector-Optimized Library of Kernels) and uses the processor's SIMD instruction sets. See http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk * */ class Correlator { public: void Carrier_wipeoff_and_EPL_generic(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out); void Carrier_wipeoff_and_EPL_volk(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out); void Carrier_wipeoff_and_VEPL_volk(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* VE_code, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* VL_code, gr_complex* VE_out, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* VL_out); // void Carrier_wipeoff_and_EPL_volk_IQ(int prn_length_samples,int integration_time ,const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* P_data_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* P_data_out); void Carrier_wipeoff_and_EPL_volk_IQ(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* P_data_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* P_data_out); Correlator(); ~Correlator(); #if USING_VOLK_CW_EPL_CORR_CUSTOM void Carrier_wipeoff_and_EPL_volk_custom(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out); #endif private: unsigned long next_power_2(unsigned long v); }; #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tcp_communication.cc0000644000175000017500000001106112576764164024317 0ustar carlescarles/*! * \file tcp_communication.cc * \brief Implementation of the TCP communication class * \author David Pubill, 2011. dpubill(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "tcp_packet_data.h" #include "tcp_communication.h" #include #include tcp_communication::tcp_communication() : tcp_socket_(io_service_) {} tcp_communication::~tcp_communication() {} int tcp_communication::listen_tcp_connection(size_t d_port_, size_t d_port_ch0_) { try { // Specify IP type and port boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), d_port_); boost::asio::ip::tcp::acceptor acceptor(io_service_, endpoint); if (d_port_ == d_port_ch0_) { std::cout << "Server ready. Listening for TCP connections..." << std::endl; } // Reuse the IP address for each connection acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); // Listen for a connection and accept it acceptor.listen(12); acceptor.accept(tcp_socket_); std::cout << "Socket accepted on port " << d_port_ << std::endl; } catch(std::exception& e) { std::cerr << "Exception: " << e.what() << std::endl; } return false; } void tcp_communication::send_receive_tcp_packet_galileo_e1(boost::array buf, tcp_packet_data *tcp_data_) { int controlc = 0; boost::array readbuf; float d_control_id_ = buf.data()[0]; try { // Send a TCP packet tcp_socket_.write_some(boost::asio::buffer(buf)); // Read the received TCP packet tcp_socket_.read_some(boost::asio::buffer(readbuf)); //! Control. The GNSS-SDR program ends if an error in a TCP packet is detected. if (d_control_id_ != readbuf.data()[0]) { throw "Packet error!"; } // Recover the variables received tcp_data_->proc_pack_code_error = readbuf.data()[1]; tcp_data_->proc_pack_carr_error = readbuf.data()[2]; tcp_data_->proc_pack_carrier_doppler_hz = readbuf.data()[3]; } catch(std::exception& e) { std::cerr << "Exception: " << e.what() << ". Please press Ctrl+C to end the program." << std::endl; std::cin >> controlc; } return; } void tcp_communication::send_receive_tcp_packet_gps_l1_ca(boost::array buf, tcp_packet_data *tcp_data_) { int controlc = 0; boost::array readbuf; float d_control_id_ = buf.data()[0]; try { // Send a TCP packet tcp_socket_.write_some(boost::asio::buffer(buf)); // Read the received TCP packet tcp_socket_.read_some(boost::asio::buffer(readbuf)); //! Control. The GNSS-SDR program ends if an error in a TCP packet is detected. if (d_control_id_ != readbuf.data()[0]) { throw "Packet error!"; } // Recover the variables received tcp_data_->proc_pack_code_error = readbuf.data()[1]; tcp_data_->proc_pack_carr_error = readbuf.data()[2]; tcp_data_->proc_pack_carrier_doppler_hz = readbuf.data()[3]; } catch(std::exception& e) { std::cerr << "Exception: " << e.what() << ". Please press Ctrl+C to end the program." << std::endl; std::cin >> controlc; } return; } void tcp_communication::close_tcp_connection(size_t d_port_) { // Close the TCP connection tcp_socket_.close(); std::cout << "Socket closed on port " << d_port_ << std::endl; return; } gnss-sdr-0.0.6/src/algorithms/tracking/libs/lock_detectors.cc0000644000175000017500000001050412576764164023611 0ustar carlescarles/*! * \file lock_detectors.cc * \brief Implementation of a library with a set of code and carrier phase lock detectors. * * SNV_CN0 is a Carrier-to-Noise (CN0) estimator * based on the Signal-to-Noise Variance (SNV) estimator [1]. * Carrier lock detector using normalised estimate of the cosine * of twice the carrier phase error [2]. * * [1] Marco Pini, Emanuela Falletti and Maurizio Fantino, "Performance * Evaluation of C/N0 Estimators using a Real Time GNSS Software Receiver," * IEEE 10th International Symposium on Spread Spectrum Techniques and * Applications, pp.28-30, August 2008. * * [2] Van Dierendonck, A.J. (1996), Global Positioning System: Theory and * Applications, * Volume I, Chapter 8: GPS Receivers, AJ Systems, Los Altos, CA 94024. * Inc.: 329-407. * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "lock_detectors.h" #include "GPS_L1_CA.h" #include "Galileo_E1.h" /* * Signal-to-Noise (SNR) (\f$\rho\f$) estimator using the Signal-to-Noise Variance (SNV) estimator: * \f{equation} * \hat{\rho}=\frac{\hat{P}_s}{\hat{P}_n}=\frac{\hat{P}_s}{\hat{P}_{tot}-\hat{P}_s}, * \f} * where \f$\hat{P}_s=\left(\frac{1}{N}\sum^{N-1}_{i=0}|Re(Pc(i))|\right)^2\f$ is the estimation of the signal power, * \f$\hat{P}_{tot}=\frac{1}{N}\sum^{N-1}_{i=0}|Pc(i)|^2\f$ is the estimator of the total power, \f$|\cdot|\f$ is the absolute value, * \f$Re(\cdot)\f$ stands for the real part of the value, and \f$Pc(i)\f$ is the prompt correlator output for the sample index i. * * The SNR value is converted to CN0 [dB-Hz], taking to account the receiver bandwidth and the PRN code gain, using the following formula: * \f{equation} * CN0_{dB}=10*log(\hat{\rho})+10*log(\frac{f_s}{2})-10*log(L_{PRN}), * \f} * where \f$f_s\f$ is the sampling frequency and \f$L_{PRN}\f$ is the PRN sequence length. * */ float cn0_svn_estimator(gr_complex* Prompt_buffer, int length, long fs_in, double code_length) { float SNR = 0; float SNR_dB_Hz = 0; float Psig = 0; float Ptot = 0; for (int i=0; i *
  • Javier Arribas, 2011. jarribas(at)cttc.es *
  • Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * Library with a set of code tracking and carrier tracking discriminators * that is used by the tracking algorithms. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TRACKING_DISCRIMINATORS_H_ #define GNSS_SDR_TRACKING_DISCRIMINATORS_H_ #include /*! brief FLL four quadrant arctan discriminator * * FLL four quadrant arctan discriminator: * \f{equation} * \frac{\phi_2-\phi_1}{t_2-t1}=\frac{ATAN2(cross,dot)}{t_1-t_2}, * \f} * where \f$cross=I_{PS1}Q_{PS2}-I_{PS2}Q_{PS1}\f$ and \f$dot=I_{PS1}I_{PS2}+Q_{PS1}Q_{PS2}\f$, * \f$I_{PS1},Q_{PS1}\f$ are the inphase and quadrature prompt correlator outputs respectively at sample time \f$t_1\f$, and * \f$I_{PS2},Q_{PS2}\f$ are the inphase and quadrature prompt correlator outputs respectively at sample time \f$t_2\f$. The output is in [radians/second]. */ float fll_four_quadrant_atan(gr_complex prompt_s1, gr_complex prompt_s2, float t1, float t2); /*! \brief PLL four quadrant arctan discriminator * * PLL four quadrant arctan discriminator: * \f{equation} * \phi=ATAN2(Q_{PS},I_{PS}), * \f} * where \f$I_{PS1},Q_{PS1}\f$ are the inphase and quadrature prompt correlator outputs respectively. The output is in [radians]. */ float pll_four_quadrant_atan(gr_complex prompt_s1); /*! \brief PLL Costas loop two quadrant arctan discriminator * * PLL Costas loop two quadrant arctan discriminator: * \f{equation} * \phi=ATAN\left(\frac{Q_{PS}}{I_{PS}}\right), * \f} * where \f$I_{PS1},Q_{PS1}\f$ are the inphase and quadrature prompt correlator outputs respectively. The output is in [radians]. */ float pll_cloop_two_quadrant_atan(gr_complex prompt_s1); /*! \brief DLL Noncoherent Early minus Late envelope normalized discriminator * * DLL Noncoherent Early minus Late envelope normalized discriminator: * \f{equation} * error=\frac{E-L}{E+L}, * \f} * where \f$E=\sqrt{I_{ES}^2+Q_{ES}^2}\f$ is the Early correlator output absolute value and * \f$L=\sqrt{I_{LS}^2+Q_{LS}^2}\f$ is the Late correlator output absolute value. The output is in [chips]. */ float dll_nc_e_minus_l_normalized(gr_complex early_s1, gr_complex late_s1); /*! \brief DLL Noncoherent Very Early Minus Late Power (VEMLP) normalized discriminator * * DLL Noncoherent Very Early Minus Late Power (VEMLP) normalized discriminator, using the outputs * of four correlators, Very Early (VE), Early (E), Late (L) and Very Late (VL): * \f{equation} * error=\frac{E-L}{E+L}, * \f} * where \f$E=\sqrt{I_{VE}^2+Q_{VE}^2+I_{E}^2+Q_{E}^2}\f$ and * \f$L=\sqrt{I_{VL}^2+Q_{VL}^2+I_{L}^2+Q_{L}^2}\f$ . The output is in [chips]. */ float dll_nc_vemlp_normalized(gr_complex very_early_s1, gr_complex early_s1, gr_complex late_s1, gr_complex very_late_s1); #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_FLL_PLL_filter.h0000644000175000017500000000365612576764164025034 0ustar carlescarles/*! * \file tracking_FLL_PLL_filter.h * \brief Interface of a hybrid FLL and PLL filter for tracking carrier loop * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TRACKING_FLL_PLL_FILTER_H_ #define GNSS_SDR_TRACKING_FLL_PLL_FILTER_H_ /*! * \brief This class implements a hybrid FLL and PLL filter for tracking carrier loop */ class Tracking_FLL_PLL_filter { private: // FLL + PLL filter parameters int d_order; float d_pll_w; float d_pll_w0p3; float d_pll_w0f2; float d_pll_x; float d_pll_a2; float d_pll_w0f; float d_pll_a3; float d_pll_w0p2; float d_pll_b3; float d_pll_w0p; public: void set_params(float fll_bw_hz, float pll_bw_hz, int order); void initialize(float d_acq_carrier_doppler_hz); float get_carrier_error(float FLL_discriminator, float PLL_discriminator, float correlation_time_s); Tracking_FLL_PLL_filter(); ~Tracking_FLL_PLL_filter(); }; #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/volk_cw_epl_corr.h0000644000175000017500000001633112576764164024004 0ustar carlescarles/*! * \file volk_cw_epl_corr.h * \brief Implements the carrier wipe-off function and the Early-Prompt-Late * correlators in a single SSE-enabled loop. * * \author Javier Arribas 2012, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_VOLK_CW_EPL_CORR_H_ #define GNSS_SDR_VOLK_CW_EPL_CORR_H_ #include #include #include #include #include /*! * TODO: Code the SSE4 version and benchmark it */ #ifdef LV_HAVE_SSE3 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_cw_epl_corr_u(const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 2; lv_32fc_t dotProduct_E; memset(&dotProduct_E, 0x0, 2*sizeof(float)); lv_32fc_t dotProduct_P; memset(&dotProduct_P, 0x0, 2*sizeof(float)); lv_32fc_t dotProduct_L; memset(&dotProduct_L, 0x0, 2*sizeof(float)); // Aux vars __m128 x, y, yl, yh, z, tmp1, tmp2, z_E, z_P, z_L; z_E = _mm_setzero_ps(); z_P = _mm_setzero_ps(); z_L = _mm_setzero_ps(); //input and output vectors //lv_32fc_t* _input_BB = input_BB; const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm_loadu_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_loadu_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di //_mm_storeu_ps((float*)_input_BB,z); // Store the results back into the _input_BB container // correlation E,P,L (3x vector scalar product) // Early //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi x = z; y = _mm_load_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm_add_ps(z_E, z); // Add the complex multiplication results together // Prompt //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm_add_ps(z_P, z); // Add the complex multiplication results together // Late //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm_add_ps(z_L, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 2; _input += 2; //_input_BB += 2; _E_code += 2; _P_code += 2; _L_code +=2; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_E[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_P[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_L[2]; //__VOLK_ATTR_ALIGNED(16) lv_32fc_t _input_BB; _mm_store_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector dotProduct_E += ( dotProductVector_E[0] + dotProductVector_E[1] ); dotProduct_P += ( dotProductVector_P[0] + dotProductVector_P[1] ); dotProduct_L += ( dotProductVector_L[0] + dotProductVector_L[1] ); if((num_points % 2) != 0) { //_input_BB = (*_input) * (*_carrier); dotProduct_E += (*_input) * (*_E_code)*(*_carrier); dotProduct_P += (*_input) * (*_P_code)*(*_carrier); dotProduct_L += (*_input) * (*_L_code)*(*_carrier); } *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; } #endif /* LV_HAVE_SSE */ #endif /* GNSS_SDR_VOLK_CW_EPL_CORR_H_ */ gnss-sdr-0.0.6/src/algorithms/tracking/libs/tracking_2nd_DLL_filter.h0000644000175000017500000000523312576764164025057 0ustar carlescarles/*! * \file tracking_2nd_DLL_filter.h * \brief Interface of a 2nd order DLL filter for code tracking loop. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Class that implements a 2nd order PLL filter for code tracking loop. * The algorithm is described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S. H. Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TRACKING_2ND_DLL_FILTER_H_ #define GNSS_SDR_TRACKING_2ND_DLL_FILTER_H_ /*! * \brief This class implements a 2nd order DLL filter for code tracking loop. * * The algorithm is described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S. H. Jensen, A Software-Defined GPS * and Galileo Receiver. A Single-Frequency Approach, * Birkhauser, 2007, Applied and Numerical Harmonic Analysis. */ class Tracking_2nd_DLL_filter { private: // PLL filter parameters float d_tau1_code = 0; float d_tau2_code = 0; float d_pdi_code = 0; float d_dllnoisebandwidth = 0; float d_dlldampingratio = 0; float d_old_code_error = 0; float d_old_code_nco = 0; void calculate_lopp_coef(float* tau1,float* tau2, float lbw, float zeta, float k); public: void set_DLL_BW(float dll_bw_hz); //! Set DLL filter bandwidth [Hz] void set_pdi(float pdi_code); //! Set Summation interval for code [s] void initialize(); //! Start tracking with acquisition information float get_code_nco(float DLL_discriminator); //! Numerically controlled oscillator Tracking_2nd_DLL_filter(float pdi_code); Tracking_2nd_DLL_filter(); ~Tracking_2nd_DLL_filter(); }; #endif gnss-sdr-0.0.6/src/algorithms/tracking/libs/tcp_packet_data.h0000644000175000017500000000267312576764164023565 0ustar carlescarles/*! * \file tcp_packet_data.h * \brief Interface of the TCP data packet class * \author David Pubill, 2011. dpubill(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TCP_PACKET_DATA_H_ #define GNSS_SDR_TCP_PACKET_DATA_H_ /*! * \brief Class that implements a TCP data packet */ class tcp_packet_data { public: tcp_packet_data(); ~tcp_packet_data(); float proc_pack_code_error; float proc_pack_carr_error; float proc_pack_carrier_doppler_hz; }; #endif gnss-sdr-0.0.6/src/algorithms/tracking/adapters/0000755000175000017500000000000012576764164021150 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_volk_e1_dll_pll_veml_tracking.h0000644000175000017500000000707512576764164030775 0ustar carlescarles/*! * \file galileo_volk_e1_dll_pll_veml_tracking.h * \brief Adapts a DLL+PLL VEML (Very Early Minus Late) tracking loop block * to a TrackingInterface for Galileo E1 signals using volk_gnsssdr * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_VOLK_E1_DLL_PLL_VEML_TRACKING_H_ #define GNSS_SDR_GALILEO_VOLK_E1_DLL_PLL_VEML_TRACKING_H_ #include #include #include "tracking_interface.h" #include "galileo_volk_e1_dll_pll_veml_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class Adapts a DLL+PLL VEML (Very Early Minus Late) tracking * loop block to a TrackingInterface for Galileo E1 signals */ class GalileoVolkE1DllPllVemlTracking : public TrackingInterface { public: GalileoVolkE1DllPllVemlTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoVolkE1DllPllVemlTracking(); std::string role() { return role_; } //! Returns "Galileo_volk_E1_DLL_PLL_VEML_Tracking" std::string implementation() { return "Galileo_volk_E1_DLL_PLL_VEML_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: galileo_volk_e1_dll_pll_veml_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GALILEO_VOLK_E1_DLL_PLL_VEML_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_fll_pll_tracking.cc0000644000175000017500000001255212576764164027535 0ustar carlescarles/*! * \file gps_l1_ca_dll_fll_pll_tracking.cc * \brief Implementation of an adapter of a code DLL + carrier FLL/PLL tracking * loop for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * This file implements the code Delay Locked Loop (DLL) + carrier Phase * Locked Loop (PLL) helped with a carrier Frequency Locked Loop (FLL) * according to the algorithms described in: * E.D. Kaplan and C. Hegarty, Understanding GPS. Principles and * Applications, Second Edition, Artech House Publishers, 2005. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_fll_pll_tracking.h" #include #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaDllFllPllTracking::GpsL1CaDllFllPllTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float fll_bw_hz; float dll_bw_hz; float early_late_space_chips; int order; item_type = configuration->property(role + ".item_type",default_item_type); //vector_length = configuration->property(role + ".vector_length", 2048); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); order = configuration->property(role + ".order", 2); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); fll_bw_hz = configuration->property(role + ".fll_bw_hz", 100.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = gps_l1_ca_dll_fll_pll_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, order, fll_bw_hz, pll_bw_hz, dll_bw_hz, early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GpsL1CaDllFllPllTracking::~GpsL1CaDllFllPllTracking() {} void GpsL1CaDllFllPllTracking::start_tracking() { tracking_->start_tracking(); } void GpsL1CaDllFllPllTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } void GpsL1CaDllFllPllTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GpsL1CaDllFllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { return tracking_->set_gnss_synchro(p_gnss_synchro); } void GpsL1CaDllFllPllTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GpsL1CaDllFllPllTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL1CaDllFllPllTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GpsL1CaDllFllPllTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.h0000644000175000017500000000667112576764164027422 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking_gpu.h * \brief Implementation of an adapter of a DLL+PLL tracking loop block using GPU accelerated functions * for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_GPU_H_ #define GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_GPU_H_ #include #include #include "tracking_interface.h" #include "gps_l1_ca_dll_pll_tracking_gpu_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop using GPU accelerated functions */ class GpsL1CaDllPllTrackingGPU : public TrackingInterface { public: GpsL1CaDllPllTrackingGPU(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaDllPllTrackingGPU(); std::string role() { return role_; } //! Returns "GPS_L1_CA_DLL_PLL_Tracking_GPU" std::string implementation() { return "GPS_L1_CA_DLL_PLL_Tracking_GPU"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: gps_l1_ca_dll_pll_tracking_gpu_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_GPU_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.h0000644000175000017500000000660312576764164026414 0ustar carlescarles/*! * \file gps_l2_m_dll_pll_tracking.h * \brief Interface of an adapter of a DLL+PLL tracking loop block * for GPS L1 C/A to a TrackingInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_gps_l2_m_dll_pll_tracking_H_ #define GNSS_SDR_gps_l2_m_dll_pll_tracking_H_ #include #include #include "tracking_interface.h" #include "gps_l2_m_dll_pll_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop */ class GpsL2MDllPllTracking : public TrackingInterface { public: GpsL2MDllPllTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL2MDllPllTracking(); std::string role() { return role_; } //! Returns "gps_l2_m_dll_pll_tracking" std::string implementation() { return "gps_l2_m_dll_pll_tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: gps_l2_m_dll_pll_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_gps_l2_m_dll_pll_tracking_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.cc0000644000175000017500000001276312576764164030273 0ustar carlescarles/*! * \file gps_l1_ca_tcp_connector_tracking.cc * \brief Implementation of an adapter of a TCP connector block based on code DLL + carrier PLL * \author David Pubill, 2012. dpubill(at)cttc.es * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_tcp_connector_tracking.h" #include #include "GPS_L1_CA.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1TcpConnectorTracking::GalileoE1TcpConnectorTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; float very_early_late_space_chips; size_t port_ch0; item_type = configuration->property(role + ".item_type",default_item_type); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.15); very_early_late_space_chips = configuration->property(role + ".very_early_late_space_chips", 0.6); port_ch0 = configuration->property(role + ".port_ch0", 2060); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = galileo_e1_tcp_connector_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, very_early_late_space_chips, port_ch0); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GalileoE1TcpConnectorTracking::~GalileoE1TcpConnectorTracking() {} void GalileoE1TcpConnectorTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GalileoE1TcpConnectorTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GalileoE1TcpConnectorTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GalileoE1TcpConnectorTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GalileoE1TcpConnectorTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GalileoE1TcpConnectorTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GalileoE1TcpConnectorTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GalileoE1TcpConnectorTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_fll_pll_tracking.h0000644000175000017500000000625112576764164027376 0ustar carlescarles/*! * \file gps_l1_ca_dll_fll_pll_tracking.h * \brief Interface of an adapter of a code DLL + carrier FLL/PLL tracking * loop for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * This is the interface of a code Delay Locked Loop (DLL) + carrier * Phase Locked Loop (PLL) helped with a carrier Frequency Locked Loop (FLL) * according to the algorithms described in: * E.D. Kaplan and C. Hegarty, Understanding GPS. Principles and * Applications, Second Edition, Artech House Publishers, 2005. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_FLL_PLL_TRACKING_H_ #define GNSS_SDR_GPS_L1_CA_DLL_FLL_PLL_TRACKING_H_ #include #include #include "tracking_interface.h" #include "gps_l1_ca_dll_fll_pll_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL/FLL Assisted tracking loop */ class GpsL1CaDllFllPllTracking : public TrackingInterface { public: GpsL1CaDllFllPllTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaDllFllPllTracking(); std::string role() { return role_; } //! Returns "GPS_L1_CA_DLL_FLL_PLL_Tracking" std::string implementation() { return "GPS_L1_CA_DLL_FLL_PLL_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void set_channel(unsigned int channel); void set_channel_queue(concurrent_queue *channel_internal_queue); void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); void start_tracking(); private: gps_l1_ca_dll_fll_pll_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GPS_L1_CA_DLL_FLL_PLL_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/CMakeLists.txt0000644000175000017500000000407712576764164023720 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # if(ENABLE_CUDA) set(OPT_TRACKING_ADAPTERS ${OPT_TRACKING_ADAPTERS} gps_l1_ca_dll_pll_tracking_gpu.cc) set(OPT_TRACKING_INCLUDE_DIRS ${OPT_TRACKING_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS}) endif(ENABLE_CUDA) set(TRACKING_ADAPTER_SOURCES galileo_e1_dll_pll_veml_tracking.cc galileo_volk_e1_dll_pll_veml_tracking.cc galileo_e1_tcp_connector_tracking.cc gps_l1_ca_dll_fll_pll_tracking.cc gps_l1_ca_dll_pll_optim_tracking.cc gps_l1_ca_dll_pll_tracking.cc gps_l1_ca_tcp_connector_tracking.cc galileo_e5a_dll_pll_tracking.cc gps_l2_m_dll_pll_tracking.cc ${OPT_TRACKING_ADAPTERS} ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/libs ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${OPT_TRACKING_INCLUDE_DIRS} ) file(GLOB TRACKING_ADAPTER_HEADERS "*.h") add_library(tracking_adapters ${TRACKING_ADAPTER_SOURCES} ${TRACKING_ADAPTER_HEADERS}) source_group(Headers FILES ${TRACKING_ADAPTER_HEADERS}) target_link_libraries(tracking_adapters tracking_gr_blocks gnss_sp_libs) gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.cc0000644000175000017500000001216712576764164026702 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking.cc * \brief Implementation of an adapter of a DLL+PLL tracking loop block * for GPS L1 C/A to a TrackingInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_pll_tracking.h" #include #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; item_type = configuration->property(role + ".item_type", default_item_type); //vector_length = configuration->property(role + ".vector_length", 2048); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = gps_l1_ca_dll_pll_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GpsL1CaDllPllTracking::~GpsL1CaDllPllTracking() {} void GpsL1CaDllPllTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GpsL1CaDllPllTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GpsL1CaDllPllTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GpsL1CaDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GpsL1CaDllPllTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GpsL1CaDllPllTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL1CaDllPllTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GpsL1CaDllPllTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.cc0000644000175000017500000001252212576764164030113 0ustar carlescarles/*! * \file gps_l1_ca_tcp_connector_tracking.cc * \brief Implementation of an adapter of a TCP connector block based on code DLL + carrier PLL * \author David Pubill, 2012. dpubill(at)cttc.es * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_tcp_connector_tracking.h" #include #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaTcpConnectorTracking::GpsL1CaTcpConnectorTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; size_t port_ch0; item_type = configuration->property(role + ".item_type",default_item_type); //vector_length = configuration->property(role + ".vector_length", 2048); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); port_ch0 = configuration->property(role + ".port_ch0", 2060); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = gps_l1_ca_tcp_connector_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, port_ch0); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GpsL1CaTcpConnectorTracking::~GpsL1CaTcpConnectorTracking() {} void GpsL1CaTcpConnectorTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GpsL1CaTcpConnectorTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GpsL1CaTcpConnectorTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GpsL1CaTcpConnectorTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GpsL1CaTcpConnectorTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GpsL1CaTcpConnectorTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL1CaTcpConnectorTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GpsL1CaTcpConnectorTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_tcp_connector_tracking.h0000644000175000017500000000705512576764164030133 0ustar carlescarles/*! * \file galileo_e1_tcp_connector_tracking.h * \brief Interface of an adapter of a TCP connector block based on code DLL + carrier PLL * for Galileo E1 to a TrackingInterface * \author David Pubill, 2012. dpubill(at)cttc.es * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_H_ #define GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_H_ #include #include #include "tracking_interface.h" #include "galileo_e1_tcp_connector_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop */ class GalileoE1TcpConnectorTracking : public TrackingInterface { public: GalileoE1TcpConnectorTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1TcpConnectorTracking(); std::string role() { return role_; } //! Returns "Galileo_E1_TCP_CONNECTOR_Tracking" std::string implementation() { return "Galileo_E1_TCP_CONNECTOR_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: galileo_e1_tcp_connector_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GALILEO_E1_TCP_CONNECTOR_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_tcp_connector_tracking.h0000644000175000017500000000673512576764164027766 0ustar carlescarles/*! * \file gps_l1_ca_tcp_connector_tracking.h * \brief Interface of an adapter of a TCP connector block based on code DLL + carrier PLL * for GPS L1 C/A to a TrackingInterface * \author David Pubill, 2012. dpubill(at)cttc.es * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_TCP_CONNECTOR_TRACKING_H_ #define GNSS_SDR_GPS_L1_CA_TCP_CONNECTOR_TRACKING_H_ #include #include #include "tracking_interface.h" #include "gps_l1_ca_tcp_connector_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop */ class GpsL1CaTcpConnectorTracking : public TrackingInterface { public: GpsL1CaTcpConnectorTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaTcpConnectorTracking(); std::string role() { return role_; } //! Returns "GPS_L1_CA_TCP_CONNECTOR_Tracking" std::string implementation() { return "GPS_L1_CA_TCP_CONNECTOR_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: gps_l1_ca_tcp_connector_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GPS_L1_CA_TCP_CONNECTOR_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking_gpu.cc0000644000175000017500000001220612576764164027547 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking_gpu.cc * \brief Implementation of an adapter of a DLL+PLL tracking loop block using GPU accelerated functions * for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_pll_tracking_gpu.h" #include #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaDllPllTrackingGPU::GpsL1CaDllPllTrackingGPU( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; item_type = configuration->property(role + ".item_type", default_item_type); //vector_length = configuration->property(role + ".vector_length", 2048); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = gps_l1_ca_dll_pll_make_tracking_gpu_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GpsL1CaDllPllTrackingGPU::~GpsL1CaDllPllTrackingGPU() {} void GpsL1CaDllPllTrackingGPU::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GpsL1CaDllPllTrackingGPU::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GpsL1CaDllPllTrackingGPU::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GpsL1CaDllPllTrackingGPU::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GpsL1CaDllPllTrackingGPU::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GpsL1CaDllPllTrackingGPU::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL1CaDllPllTrackingGPU::get_left_block() { return tracking_; } gr::basic_block_sptr GpsL1CaDllPllTrackingGPU::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.cc0000644000175000017500000001304312576764164027212 0ustar carlescarles/*! * \file galileo_e5a_dll_fll_pll_tracking.cc * \brief Adapts a code DLL + carrier PLL * tracking block to a TrackingInterface for Galileo E5a signals * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E5a data and pilot Signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5a_dll_pll_tracking.h" #include #include "Galileo_E5a.h" #include "configuration_interface.h" using google::LogMessage; GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float pll_bw_init_hz; float dll_bw_init_hz; int ti_ms; float early_late_space_chips; item_type = configuration->property(role + ".item_type", default_item_type); //vector_length = configuration->property(role + ".vector_length", 2048); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 12000000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 5.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); pll_bw_init_hz = configuration->property(role + ".pll_bw_init_hz", 20.0); dll_bw_init_hz = configuration->property(role + ".dll_bw_init_hz", 20.0); ti_ms = configuration->property(role + ".ti_ms", 3); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = galileo_e5a_dll_pll_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, pll_bw_init_hz, dll_bw_init_hz, ti_ms, early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GalileoE5aDllPllTracking::~GalileoE5aDllPllTracking() {} void GalileoE5aDllPllTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GalileoE5aDllPllTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GalileoE5aDllPllTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GalileoE5aDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GalileoE5aDllPllTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GalileoE5aDllPllTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GalileoE5aDllPllTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GalileoE5aDllPllTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_tracking.h0000644000175000017500000000661612576764164026546 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_tracking.h * \brief Interface of an adapter of a DLL+PLL tracking loop block * for GPS L1 C/A to a TrackingInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_H_ #define GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_H_ #include #include #include "tracking_interface.h" #include "gps_l1_ca_dll_pll_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop */ class GpsL1CaDllPllTracking : public TrackingInterface { public: GpsL1CaDllPllTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaDllPllTracking(); std::string role() { return role_; } //! Returns "GPS_L1_CA_DLL_PLL_Tracking" std::string implementation() { return "GPS_L1_CA_DLL_PLL_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: gps_l1_ca_dll_pll_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GPS_L1_CA_DLL_PLL_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l2_m_dll_pll_tracking.cc0000644000175000017500000001172512576764164026553 0ustar carlescarles/*! * \file gps_l2_m_dll_pll_tracking.cc * \brief Implementation of an adapter of a DLL+PLL tracking loop block * for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l2_m_dll_pll_tracking.h" #include #include "GPS_L2C.h" #include "configuration_interface.h" using google::LogMessage; GpsL2MDllPllTracking::GpsL2MDllPllTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; item_type = configuration->property(role + ".item_type", default_item_type); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (GPS_L2_M_CODE_RATE_HZ / GPS_L2_M_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = gps_l2_m_dll_pll_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GpsL2MDllPllTracking::~GpsL2MDllPllTracking() {} void GpsL2MDllPllTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GpsL2MDllPllTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GpsL2MDllPllTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GpsL2MDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GpsL2MDllPllTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GpsL2MDllPllTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL2MDllPllTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GpsL2MDllPllTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.h0000755000175000017500000000676612576764164027753 0ustar carlescarles/*! * \file galileo_e1_dll_pll_veml_tracking.h * \brief Adapts a DLL+PLL VEML (Very Early Minus Late) tracking loop block * to a TrackingInterface for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_DLL_PLL_VEML_TRACKING_H_ #define GNSS_SDR_GALILEO_E1_DLL_PLL_VEML_TRACKING_H_ #include #include #include "tracking_interface.h" #include "galileo_e1_dll_pll_veml_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class Adapts a DLL+PLL VEML (Very Early Minus Late) tracking * loop block to a TrackingInterface for Galileo E1 signals */ class GalileoE1DllPllVemlTracking : public TrackingInterface { public: GalileoE1DllPllVemlTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1DllPllVemlTracking(); std::string role() { return role_; } //! Returns "Galileo_E1_DLL_PLL_VEML_Tracking" std::string implementation() { return "Galileo_E1_DLL_PLL_VEML_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: galileo_e1_dll_pll_veml_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GALILEO_E1_DLL_PLL_VEML_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_optim_tracking.h0000644000175000017500000000701112576764164027744 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_optim_tracking.h * \brief Interface of an adapter of a speed optimized DLL+PLL tracking loop block * for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2012. jarribas(at)cttc.es * * GPS L1 TRACKING MODULE OPTIMIZED FOR SPEED: * - Code Doppler is not compensated in the local replica * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_OPTIM_TRACKING_H_ #define GNSS_SDR_GPS_L1_CA_DLL_PLL_OPTIM_TRACKING_H_ #include #include #include "tracking_interface.h" #include "gps_l1_ca_dll_pll_optim_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop */ class GpsL1CaDllPllOptimTracking : public TrackingInterface { public: GpsL1CaDllPllOptimTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaDllPllOptimTracking(); std::string role() { return role_; } //! Returns "GPS_L1_CA_DLL_PLL_Optim_Tracking" std::string implementation() { return "GPS_L1_CA_DLL_PLL_Optim_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: gps_l1_ca_dll_pll_optim_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif // GNSS_SDR_GPS_L1_CA_DLL_PLL_OPTIM_TRACKING_H_ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_optim_tracking.cc0000644000175000017500000001245412576764164030111 0ustar carlescarles/*! * \file gps_l1_ca_dll_pll_optim_tracking.cc * \brief Interface of an adapter of a speed optimized DLL+PLL tracking loop block * for GPS L1 C/A to a TrackingInterface * \author Javier Arribas, 2012. jarribas(at)cttc.es * * GPS L1 TRACKING MODULE OPTIMIZED FOR SPEED: * - Code Doppler is not compensated in the local replica * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkha user, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_dll_pll_optim_tracking.h" #include #include #include #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaDllPllOptimTracking::GpsL1CaDllPllOptimTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; item_type = configuration->property(role + ".item_type",default_item_type); //vector_length = configuration->property(role + ".vector_length", 2048); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = gps_l1_ca_dll_pll_make_optim_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GpsL1CaDllPllOptimTracking::~GpsL1CaDllPllOptimTracking() {} void GpsL1CaDllPllOptimTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GpsL1CaDllPllOptimTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GpsL1CaDllPllOptimTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GpsL1CaDllPllOptimTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GpsL1CaDllPllOptimTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GpsL1CaDllPllOptimTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL1CaDllPllOptimTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GpsL1CaDllPllOptimTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e1_dll_pll_veml_tracking.cc0000755000175000017500000001245412576764164030100 0ustar carlescarles/*! * \file galileo_e1_dll_pll_veml_tracking.cc * \brief Adapts a DLL+PLL VEML (Very Early Minus Late) tracking loop block * to a TrackingInterface for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_dll_pll_veml_tracking.h" #include #include "GPS_L1_CA.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; float very_early_late_space_chips; item_type = configuration->property(role + ".item_type", default_item_type); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.15); very_early_late_space_chips = configuration->property(role + ".very_early_late_space_chips", 0.6); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = galileo_e1_dll_pll_veml_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, very_early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GalileoE1DllPllVemlTracking::~GalileoE1DllPllVemlTracking() {} void GalileoE1DllPllVemlTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GalileoE1DllPllVemlTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GalileoE1DllPllVemlTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GalileoE1DllPllVemlTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GalileoE1DllPllVemlTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GalileoE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GalileoE1DllPllVemlTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GalileoE1DllPllVemlTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking.h0000644000175000017500000000665212576764164027064 0ustar carlescarles/*! * \file galileo_e5a_dll_fll_pll_tracking.h * \brief Adapts a code DLL + carrier PLL * tracking block to a TrackingInterface for Galileo E5a signals * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E5a data and pilot Signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E5A_DLL_PLL_TRACKING_H_ #define GNSS_SDR_GALILEO_E5A_DLL_PLL_TRACKING_H_ #include #include #include "tracking_interface.h" #include "galileo_e5a_dll_pll_tracking_cc.h" class ConfigurationInterface; /*! * \brief This class implements a code DLL + carrier PLL tracking loop */ class GalileoE5aDllPllTracking : public TrackingInterface { public: GalileoE5aDllPllTracking(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE5aDllPllTracking(); std::string role() { return role_; } //! Returns "Galileo_E5a_DLL_PLL_Tracking" std::string implementation() { return "Galileo_E5a_DLL_PLL_Tracking"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set tracking channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); void start_tracking(); private: galileo_e5a_dll_pll_tracking_cc_sptr tracking_; size_t item_size_; unsigned int channel_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif /* GNSS_SDR_GALILEO_E5A_DLL_PLL_TRACKING_H_ */ gnss-sdr-0.0.6/src/algorithms/tracking/adapters/galileo_volk_e1_dll_pll_veml_tracking.cc0000644000175000017500000001255212576764164031127 0ustar carlescarles/*! * \file galileo_volk_e1_dll_pll_veml_tracking.cc * \brief Adapts a DLL+PLL VEML (Very Early Minus Late) tracking loop block * to a TrackingInterface for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Code DLL + carrier PLL according to the algorithms described in: * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach, Birkhauser, 2007 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_volk_e1_dll_pll_veml_tracking.h" #include #include "GPS_L1_CA.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoVolkE1DllPllVemlTracking::GalileoVolkE1DllPllVemlTracking( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { DLOG(INFO) << "role " << role; //################# CONFIGURATION PARAMETERS ######################## int fs_in; int vector_length; int f_if; bool dump; std::string dump_filename; std::string item_type; std::string default_item_type = "gr_complex"; float pll_bw_hz; float dll_bw_hz; float early_late_space_chips; float very_early_late_space_chips; item_type = configuration->property(role + ".item_type",default_item_type); fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); f_if = configuration->property(role + ".if", 0); dump = configuration->property(role + ".dump", false); pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0); early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.15); very_early_late_space_chips = configuration->property(role + ".very_early_late_space_chips", 0.6); std::string default_dump_filename = "./track_ch"; dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused! vector_length = std::round(fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); //################# MAKE TRACKING GNURadio object ################### if (item_type.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); tracking_ = galileo_volk_e1_dll_pll_veml_make_tracking_cc( f_if, fs_in, vector_length, queue_, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips, very_early_late_space_chips); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type << " unknown tracking item type."; } channel_ = 0; channel_internal_queue_ = 0; DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")"; } GalileoVolkE1DllPllVemlTracking::~GalileoVolkE1DllPllVemlTracking() {} void GalileoVolkE1DllPllVemlTracking::start_tracking() { tracking_->start_tracking(); } /* * Set tracking channel unique ID */ void GalileoVolkE1DllPllVemlTracking::set_channel(unsigned int channel) { channel_ = channel; tracking_->set_channel(channel); } /* * Set tracking channel internal queue */ void GalileoVolkE1DllPllVemlTracking::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; tracking_->set_channel_queue(channel_internal_queue_); } void GalileoVolkE1DllPllVemlTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { tracking_->set_gnss_synchro(p_gnss_synchro); } void GalileoVolkE1DllPllVemlTracking::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to connect, now the tracking uses gr_sync_decimator } void GalileoVolkE1DllPllVemlTracking::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GalileoVolkE1DllPllVemlTracking::get_left_block() { return tracking_; } gr::basic_block_sptr GalileoVolkE1DllPllVemlTracking::get_right_block() { return tracking_; } gnss-sdr-0.0.6/src/algorithms/output_filter/0000755000175000017500000000000012576764164020450 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/output_filter/CMakeLists.txt0000644000175000017500000000137012576764164023211 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters)gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/0000755000175000017500000000000012576764164022253 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/output_filter/adapters/CMakeLists.txt0000644000175000017500000000260412576764164025015 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(OUTPUTFILTER_ADAPTER_SOURCES file_output_filter.cc null_sink_output_filter.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB OUTPUTFILTER_ADAPTER_HEADERS "*.h") add_library(out_adapters ${OUTPUTFILTER_ADAPTER_SOURCES} ${OUTPUTFILTER_ADAPTER_HEADERS}) source_group(Headers FILES ${OUTPUTFILTER_ADAPTER_HEADERS}) add_dependencies(out_adapters glog-${glog_RELEASE}) target_link_libraries(out_adapters ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/file_output_filter.h0000644000175000017500000000463012576764164026333 0ustar carlescarles/*! * \file file_output_filter.h * \brief Interface of an adapter of a file output filter block to an * OutputFilterInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_FILE_OUTPUT_FILTER_H_ #define GNSS_SDR_FILE_OUTPUT_FILTER_H_ #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief An output filter that sends its output * to a file without any change in the data format. */ class FileOutputFilter : public GNSSBlockInterface { public: FileOutputFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams); virtual ~FileOutputFilter(); std::string role() { return role_; } std::string implementation() { return "File_Output_Filter"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::blocks::file_sink::sptr file_sink_; size_t item_size_; std::string filename_; std::string item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; }; #endif /*GNSS_SDR_FILE_OUTPUT_FILTER_H_*/ gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/file_output_filter.cc0000644000175000017500000000603312576764164026470 0ustar carlescarles/*! * \file file_output_filter.cc * \brief Implementation of an adapter of a file output filter block * to an OutputFilterInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "file_output_filter.h" #include #include #include "configuration_interface.h" using google::LogMessage; FileOutputFilter::FileOutputFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) { std::string default_filename = "./output.dat"; std::string default_item_type = "short"; filename_ = configuration->property(role + ".filename", default_filename); item_type_ = configuration->property(role + ".item_type", default_item_type); if(item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); } else if(item_type_.compare("float") == 0) { item_size_ = sizeof(float); } else if(item_type_.compare("short") == 0) { item_size_ = sizeof(short); } else { LOG(WARNING) << item_type_ << " Unrecognized item type. Using short."; item_size_ = sizeof(short); } file_sink_ = gr::blocks::file_sink::make(item_size_, filename_.c_str()); DLOG(INFO) << "file sink(" << file_sink_->unique_id() << ")"; } FileOutputFilter::~FileOutputFilter() {} void FileOutputFilter::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; DLOG(INFO) << "nothing to connect internally"; } void FileOutputFilter::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect internally } gr::basic_block_sptr FileOutputFilter::get_left_block() { return file_sink_; } gr::basic_block_sptr FileOutputFilter::get_right_block() { //return file_sink_;//gr_block_sptr(); return gr::blocks::file_sink::sptr(); } gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/null_sink_output_filter.cc0000644000175000017500000000574112576764164027554 0ustar carlescarles/*! * \file null_sink_output_filter.cc * \brief Implementation of an adapter of a null sink output filter block to an * OutputFilterInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "null_sink_output_filter.h" #include #include #include "configuration_interface.h" using google::LogMessage; NullSinkOutputFilter::NullSinkOutputFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) { std::string default_item_type = "short"; item_type_ = configuration->property(role + ".item_type", default_item_type); if(item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); } else if(item_type_.compare("short") == 0) { item_size_ = sizeof(short); } else if(item_type_.compare("float") == 0) { item_size_ = sizeof(float); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using float"; item_size_ = sizeof(float); } sink_ = gr::blocks::null_sink::make(item_size_); DLOG(INFO) << "null_sink(" << sink_->unique_id() << ")"; } NullSinkOutputFilter::~NullSinkOutputFilter() {} void NullSinkOutputFilter::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; DLOG(INFO) << "nothing to connect internally"; } void NullSinkOutputFilter::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect } gr::basic_block_sptr NullSinkOutputFilter::get_left_block() { return sink_; } gr::basic_block_sptr NullSinkOutputFilter::get_right_block() { LOG(WARNING) << "Right block of a signal sink should not be retrieved"; //return gr::blocks::sptr::make(); return sink_; } gnss-sdr-0.0.6/src/algorithms/output_filter/adapters/null_sink_output_filter.h0000644000175000017500000000506012576764164027410 0ustar carlescarles/*! * \file null_sink_output_filter.h * \brief Interface of an adapter of a null sink output filter block to an * OutputFilterInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * This class represents an implementation of an output filter that * sends its input to a null sink. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_NULL_SINK_OUTPUT_FILTER_H_ #define GNSS_SDR_NULL_SINK_OUTPUT_FILTER_H_ #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class implements a null sink output filter */ class NullSinkOutputFilter : public GNSSBlockInterface { public: NullSinkOutputFilter(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams); virtual ~NullSinkOutputFilter(); std::string item_type() { return item_type_; } std::string role() { return role_; } //! Returns "Null_Sink_Output_Filter" std::string implementation() { return "Null_Sink_Output_Filter"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: gr::blocks::null_sink::sptr sink_; size_t item_size_; std::string item_type_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; }; #endif /*GNSS_SDR_NULL_SINK_OUTPUT_FILTER_H_*/ gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/0000755000175000017500000000000012576764164021242 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/0000755000175000017500000000000012576764164024407 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.h0000644000175000017500000001302212576764164033145 0ustar carlescarles/*! * \file galileo_e1b_telemetry_decoder_cc.h * \brief Interface of a Galileo INAV message demodulator block * \author Javier Arribas 2013 jarribas(at)cttc.es, * Mara Branzanti 2013 mara.branzanti(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1B_TELEMETRY_DECODER_CC_H #define GNSS_SDR_GALILEO_E1B_TELEMETRY_DECODER_CC_H #include #include #include #include #include #include #include #include "Galileo_E1.h" #include "concurrent_queue.h" #include "gnss_satellite.h" #include "galileo_navigation_message.h" #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" class galileo_e1b_telemetry_decoder_cc; typedef boost::shared_ptr galileo_e1b_telemetry_decoder_cc_sptr; galileo_e1b_telemetry_decoder_cc_sptr galileo_e1b_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); /*! * \brief This class implements a block that decodes the INAV data defined in Galileo ICD * */ class galileo_e1b_telemetry_decoder_cc : public gr::block { public: ~galileo_e1b_telemetry_decoder_cc(); void set_satellite(Gnss_Satellite satellite); //!< Set satellite PRN void set_channel(int channel); //!< Set receiver's channel int flag_even_word_arrived; void set_ephemeris_queue(concurrent_queue *ephemeris_queue); //!< Set the satellite data queue void set_iono_queue(concurrent_queue *iono_queue); //!< Set the iono data queue void set_almanac_queue(concurrent_queue *almanac_queue); //!< Set the almanac data queue void set_utc_model_queue(concurrent_queue *utc_model_queue); //!< Set the UTC model queue /*! * \brief Set decimation factor to average the GPS synchronization estimation output from the tracking module. */ void set_decimation(int decimation); /*! * \brief This is where all signal processing takes place */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); /*! * \brief Function which tells the scheduler how many input items * are required to produce noutput_items output items. */ void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend galileo_e1b_telemetry_decoder_cc_sptr galileo_e1b_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in,unsigned int vector_length, boost::shared_ptr queue, bool dump); galileo_e1b_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); void viterbi_decoder(double *page_part_symbols, int *page_part_bits); void deinterleaver(int rows, int cols, double *in, double *out); void decode_word(double *symbols,int frame_length); unsigned short int d_preambles_bits[GALILEO_INAV_PREAMBLE_LENGTH_BITS]; signed int *d_preambles_symbols; unsigned int d_samples_per_symbol; int d_symbols_per_preamble; long unsigned int d_sample_counter; long unsigned int d_preamble_index; unsigned int d_stat; bool d_flag_frame_sync; bool d_flag_parity; bool d_flag_preamble; int d_CRC_error_counter; long d_fs_in; // navigation message vars Galileo_Navigation_Message d_nav; // Galileo ephemeris queue concurrent_queue *d_ephemeris_queue; // ionospheric parameters queue concurrent_queue *d_iono_queue; // UTC model parameters queue concurrent_queue *d_utc_model_queue; // Almanac queue concurrent_queue *d_almanac_queue; boost::shared_ptr d_queue; unsigned int d_vector_length; bool d_dump; Gnss_Satellite d_satellite; int d_channel; // output averaging and decimation int d_average_count; int d_decimation_output_factor; double d_preamble_time_seconds; double d_TOW_at_Preamble; double d_TOW_at_current_symbol; double Prn_timestamp_at_preamble_ms; bool flag_TOW_set; double delta_t; //GPS-GALILEO time offset std::string d_dump_filename; std::ofstream d_dump_file; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000321712576764164027152 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(TELEMETRY_DECODER_GR_BLOCKS_SOURCES gps_l1_ca_telemetry_decoder_cc.cc gps_l2_m_telemetry_decoder_cc.cc galileo_e1b_telemetry_decoder_cc.cc sbas_l1_telemetry_decoder_cc.cc galileo_e5a_telemetry_decoder_cc.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB TELEMETRY_DECODER_GR_BLOCKS_HEADERS "*.h") add_library(telemetry_decoder_gr_blocks ${TELEMETRY_DECODER_GR_BLOCKS_SOURCES} ${TELEMETRY_DECODER_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${TELEMETRY_DECODER_GR_BLOCKS_HEADERS}) target_link_libraries(telemetry_decoder_gr_blocks telemetry_decoder_lib gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.cc0000644000175000017500000004164312576764164033002 0ustar carlescarles/*! * \file gps_l1_ca_telemetry_decoder_cc.cc * \brief Implementation of a NAV message demodulator block based on * Kay Borre book MATLAB-based GPS receiver * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ /*! * \todo Clean this code and move the telemetry definitions to GPS_L1_CA system definitions file */ #include "gps_l1_ca_telemetry_decoder_cc.h" #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" #ifndef _rotl #define _rotl(X,N) ((X << N) ^ (X >> (32-N))) // Used in the parity check algorithm #endif using google::LogMessage; /*! * \todo name and move the magic numbers to GPS_L1_CA.h */ gps_l1_ca_telemetry_decoder_cc_sptr gps_l1_ca_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) { return gps_l1_ca_telemetry_decoder_cc_sptr(new gps_l1_ca_telemetry_decoder_cc(satellite, if_freq, fs_in, vector_length, queue, dump)); } void gps_l1_ca_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { for (unsigned i = 0; i < 3; i++) { ninput_items_required[i] = d_samples_per_bit * 8; //set the required sample history } } gps_l1_ca_telemetry_decoder_cc::gps_l1_ca_telemetry_decoder_cc( Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) : gr::block("gps_navigation_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); d_vector_length = vector_length; d_samples_per_bit = ( GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS ) / GPS_CA_TELEMETRY_RATE_BITS_SECOND; d_fs_in = fs_in; //d_preamble_duration_seconds = (1.0 / GPS_CA_TELEMETRY_RATE_BITS_SECOND) * GPS_CA_PREAMBLE_LENGTH_BITS; //std::cout<<"d_preamble_duration_seconds="<d_preambles_bits, (unsigned short int*)preambles_bits, GPS_CA_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int)); // preamble bits to sampled symbols d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * GPS_CA_PREAMBLE_LENGTH_BITS * d_samples_per_bit); int n = 0; for (int i = 0; i < GPS_CA_PREAMBLE_LENGTH_BITS; i++) { for (unsigned int j = 0; j < d_samples_per_bit; j++) { if (d_preambles_bits[i] == 1) { d_preambles_symbols[n] = 1; } else { d_preambles_symbols[n] = -1; } n++; } } d_sample_counter = 0; //d_preamble_code_phase_seconds = 0; d_stat = 0; d_preamble_index = 0; d_symbol_accumulator = 0; d_symbol_accumulator_counter = 0; d_frame_bit_index = 0; d_preamble_time_seconds = 0; d_flag_frame_sync = false; d_GPS_frame_4bytes = 0; d_prev_GPS_frame_4bytes = 0; d_flag_parity = false; d_TOW_at_Preamble = 0; d_TOW_at_current_symbol = 0; flag_TOW_set = false; d_average_count = 0; d_flag_preamble = false; d_word_number = 0; d_decimation_output_factor = 1; d_channel = 0; Prn_timestamp_at_preamble_ms = 0.0; //set_history(d_samples_per_bit*8); // At least a history of 8 bits are needed to correlate with the preamble } gps_l1_ca_telemetry_decoder_cc::~gps_l1_ca_telemetry_decoder_cc() { delete d_preambles_symbols; d_dump_file.close(); } bool gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(unsigned int gpsword) { unsigned int d1, d2, d3, d4, d5, d6, d7, t, parity; /* XOR as many bits in parallel as possible. The magic constants pick up bits which are to be XOR'ed together to implement the GPS parity check algorithm described in IS-GPS-200E. This avoids lengthy shift- and-xor loops. */ d1 = gpsword & 0xFBFFBF00; d2 = _rotl(gpsword,1) & 0x07FFBF01; d3 = _rotl(gpsword,2) & 0xFC0F8100; d4 = _rotl(gpsword,3) & 0xF81FFE02; d5 = _rotl(gpsword,4) & 0xFC00000E; d6 = _rotl(gpsword,5) & 0x07F00001; d7 = _rotl(gpsword,6) & 0x00003000; t = d1 ^ d2 ^ d3 ^ d4 ^ d5 ^ d6 ^ d7; // Now XOR the 5 6-bit fields together to produce the 6-bit final result. parity = t ^ _rotl(t,6) ^ _rotl(t,12) ^ _rotl(t,18) ^ _rotl(t,24); parity = parity & 0x3F; if (parity == (gpsword & 0x3F)) return(true); else return(false); } int gps_l1_ca_telemetry_decoder_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int corr_value = 0; int preamble_diff = 0; Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; d_sample_counter++; //count for the processed samples // ########### Output the tracking data to navigation and PVT ########## const Gnss_Synchro **in = (const Gnss_Synchro **) &input_items[0]; //Get the input samples pointer // TODO Optimize me! //******* preamble correlation ******** for (unsigned int i = 0; i < d_samples_per_bit*8; i++) { if (in[0][i].Prompt_I < 0) // symbols clipping { corr_value -= d_preambles_symbols[i]; } else { corr_value += d_preambles_symbols[i]; } } d_flag_preamble = false; //******* frame sync ****************** if (abs(corr_value) >= 160) { //TODO: Rewrite with state machine if (d_stat == 0) { d_GPS_FSM.Event_gps_word_preamble(); d_preamble_index = d_sample_counter;//record the preamble sample stamp LOG(INFO) << "Preamble detection for SAT " << this->d_satellite; d_symbol_accumulator = 0; //sync the symbol to bits integrator d_symbol_accumulator_counter = 0; d_frame_bit_index = 8; d_stat = 1; // enter into frame pre-detection status } else if (d_stat == 1) //check 6 seconds of preamble separation { preamble_diff = d_sample_counter - d_preamble_index; if (abs(preamble_diff - 6000) < 1) { d_GPS_FSM.Event_gps_word_preamble(); d_flag_preamble = true; d_preamble_index = d_sample_counter; //record the preamble sample stamp (t_P) d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs;// - d_preamble_duration_seconds; //record the PRN start sample index associated to the preamble if (!d_flag_frame_sync) { d_flag_frame_sync = true; LOG(INFO) <<" Frame sync SAT " << this->d_satellite << " with preamble start at " << d_preamble_time_seconds << " [s]"; } } } } else { if (d_stat == 1) { preamble_diff = d_sample_counter - d_preamble_index; if (preamble_diff > 6001) { LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite << " preamble_diff= " << preamble_diff; d_stat = 0; //lost of frame sync d_flag_frame_sync = false; flag_TOW_set = false; } } } //******* SYMBOL TO BIT ******* d_symbol_accumulator += in[0][d_samples_per_bit*8 - 1].Prompt_I; // accumulate the input value in d_symbol_accumulator d_symbol_accumulator_counter++; if (d_symbol_accumulator_counter == 20) { if (d_symbol_accumulator > 0) { //symbol to bit d_GPS_frame_4bytes += 1; //insert the telemetry bit in LSB } d_symbol_accumulator = 0; d_symbol_accumulator_counter = 0; //******* bits to words ****** d_frame_bit_index++; if (d_frame_bit_index == 30) { d_frame_bit_index = 0; // parity check // Each word in wordbuff is composed of: // Bits 0 to 29 = the GPS data word // Bits 30 to 31 = 2 LSBs of the GPS word ahead. // prepare the extended frame [-2 -1 0 ... 30] if (d_prev_GPS_frame_4bytes & 0x00000001) { d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x40000000; } if (d_prev_GPS_frame_4bytes & 0x00000002) { d_GPS_frame_4bytes = d_GPS_frame_4bytes | 0x80000000; } /* Check that the 2 most recently logged words pass parity. Have to first invert the data bits according to bit 30 of the previous word. */ if(d_GPS_frame_4bytes & 0x40000000) { d_GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR) } if (gps_l1_ca_telemetry_decoder_cc::gps_word_parityCheck(d_GPS_frame_4bytes)) { memcpy(&d_GPS_FSM.d_GPS_frame_4bytes, &d_GPS_frame_4bytes, sizeof(char)*4); d_GPS_FSM.d_preamble_time_ms = d_preamble_time_seconds*1000.0; d_GPS_FSM.Event_gps_word_valid(); d_flag_parity = true; } else { d_GPS_FSM.Event_gps_word_invalid(); d_flag_parity = false; } d_prev_GPS_frame_4bytes = d_GPS_frame_4bytes; // save the actual frame d_GPS_frame_4bytes = d_GPS_frame_4bytes & 0; } else { d_GPS_frame_4bytes <<= 1; //shift 1 bit left the telemetry word } } // output the frame consume_each(1); //one by one Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block //1. Copy the current tracking output current_synchro_data = in[0][0]; //2. Add the telemetry decoder information if (this->d_flag_preamble == true and d_GPS_FSM.d_nav.d_TOW > 0) //update TOW at the preamble instant (todo: check for valid d_TOW) // JAVI: 30/06/2014 // TOW, in GPS, is referred to the START of the SUBFRAME, that is, THE FIRST SYMBOL OF THAT SUBFRAME, NOT THE PREAMBLE. // thus, no correction should be done. d_TOW_at_Preamble should be renamed to d_TOW_at_subframe_start. // Sice we detected the preable, then, we are in the last symbol of that preamble, or just at the start of the first subframe symbol. { d_TOW_at_Preamble = d_GPS_FSM.d_nav.d_TOW + GPS_SUBFRAME_SECONDS; //we decoded the current TOW when the last word of the subframe arrive, so, we have a lag of ONE SUBFRAME d_TOW_at_current_symbol = d_TOW_at_Preamble;//GPS_L1_CA_CODE_PERIOD;// + (double)GPS_CA_PREAMBLE_LENGTH_BITS/(double)GPS_CA_TELEMETRY_RATE_BITS_SECOND; Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0; if (flag_TOW_set == false) { flag_TOW_set = true; } } else { d_TOW_at_current_symbol = d_TOW_at_current_symbol + GPS_L1_CA_CODE_PERIOD; } current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; // to be used in the hybrid configuration current_synchro_data.Flag_valid_word = (d_flag_frame_sync == true and d_flag_parity == true and flag_TOW_set == true); current_synchro_data.Flag_preamble = d_flag_preamble; current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0; current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; if(d_dump == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; tmp_double = d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_synchro_data.Prn_timestamp_ms; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = d_TOW_at_Preamble; d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } //todo: implement averaging d_average_count++; if (d_average_count == d_decimation_output_factor) { d_average_count = 0; //3. Make the output (copy the object contents to the GNURadio reserved memory) *out[0] = current_synchro_data; //std::cout<<"GPS L1 TLM output on CH="<d_channel << " SAMPLE STAMP="<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.h0000644000175000017500000001303512576764164033154 0ustar carlescarles/*! * \file galileo_e5a_telemetry_decoder_cc.cc * \brief Implementation of a Galileo FNAV message demodulator block * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E5A_TELEMETRY_DECODER_CC_H_ #define GNSS_SDR_GALILEO_E5A_TELEMETRY_DECODER_CC_H_ #include #include #include #include #include #include //#include #include "Galileo_E5a.h" #include "concurrent_queue.h" #include "gnss_satellite.h" #include "galileo_fnav_message.h" #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" //#include "convolutional.h" class galileo_e5a_telemetry_decoder_cc; typedef boost::shared_ptr galileo_e5a_telemetry_decoder_cc_sptr; galileo_e5a_telemetry_decoder_cc_sptr galileo_e5a_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); /*! * \brief This class implements a block that decodes the FNAV data defined in Galileo ICD * */ class galileo_e5a_telemetry_decoder_cc : public gr::block { public: ~galileo_e5a_telemetry_decoder_cc(); void set_satellite(Gnss_Satellite satellite); //!< Set satellite PRN void set_channel(int channel); //!< Set receiver's channel void set_ephemeris_queue(concurrent_queue *ephemeris_queue); //!< Set the satellite data queue void set_iono_queue(concurrent_queue *iono_queue); //!< Set the iono data queue void set_almanac_queue(concurrent_queue *almanac_queue); //!< Set the almanac data queue void set_utc_model_queue(concurrent_queue *utc_model_queue); //!< Set the UTC model queue /*! * \brief This is where all signal processing takes place */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); /*! * \brief Function which tells the scheduler how many input items * are required to produce noutput_items output items. */ void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend galileo_e5a_telemetry_decoder_cc_sptr galileo_e5a_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in,unsigned int vector_length, boost::shared_ptr queue, bool dump); galileo_e5a_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); void viterbi_decoder(double *page_part_symbols, int *page_part_bits); void deinterleaver(int rows, int cols, double *in, double *out); void decode_word(double *page_symbols,int frame_length); signed int d_preamble_bits[GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; // signed int d_page_symbols[GALILEO_FNAV_SYMBOLS_PER_PAGE + GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; double d_page_symbols[GALILEO_FNAV_SYMBOLS_PER_PAGE + GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; // signed int *d_preamble_symbols; double d_current_symbol; long unsigned int d_symbol_counter; int d_prompt_counter; int d_sign_init; long unsigned int d_sample_counter; long unsigned int d_preamble_index; bool d_preamble_lock; bool d_flag_frame_sync; int d_state; bool d_flag_preamble; int d_CRC_error_counter; long d_fs_in; // navigation message vars Galileo_Fnav_Message d_nav; // Galileo ephemeris queue concurrent_queue *d_ephemeris_queue; // ionospheric parameters queue concurrent_queue *d_iono_queue; // UTC model parameters queue concurrent_queue *d_utc_model_queue; // Almanac queue concurrent_queue *d_almanac_queue; boost::shared_ptr d_queue; unsigned int d_vector_length; bool d_dump; Gnss_Satellite d_satellite; int d_channel; double d_preamble_time_seconds; double d_TOW_at_Preamble; double d_TOW_at_current_symbol; double Prn_timestamp_at_preamble_ms; bool flag_TOW_set; std::string d_dump_filename; std::ofstream d_dump_file; }; #endif /* GNSS_SDR_GALILEO_E5A_TELEMETRY_DECODER_CC_H_ */ gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2_m_telemetry_decoder_cc.h0000644000175000017500000001410412576764164032506 0ustar carlescarles/*! * \file gps_l2_m_telemetry_decoder_cc.h * \brief Interface of a NAV message demodulator block based on * Kay Borre book MATLAB-based GPS receiver * \author Javier Arribas, 2015. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_CC_H #define GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_CC_H #include // for copy #include #include #include #include // for pair #include #include #include #include #include "gnss_satellite.h" #include "viterbi_decoder.h" #include "gps_cnav_navigation_message.h" #include "gps_cnav_ephemeris.h" #include "gps_cnav_iono.h" #include "concurrent_queue.h" #include "GPS_L2C.h" class gps_l2_m_telemetry_decoder_cc; typedef boost::shared_ptr gps_l2_m_telemetry_decoder_cc_sptr; gps_l2_m_telemetry_decoder_cc_sptr gps_l2_m_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); /*! * \brief This class implements a block that decodes the SBAS integrity and corrections data defined in RTCA MOPS DO-229 * */ class gps_l2_m_telemetry_decoder_cc : public gr::block { public: ~gps_l2_m_telemetry_decoder_cc(); void set_satellite(Gnss_Satellite satellite); //!< Set satellite PRN void set_channel(int channel); //!< Set receiver's channel // queues to communicate broadcasted CNAV data to other blocks of GNSS-SDR void set_iono_queue(concurrent_queue *iono_queue); //!< Set iono queue void set_ephemeris_queue(concurrent_queue *ephemeris_queue); //!< Set ephemeris queue void set_decimation(int decimation); /*! * \brief This is where all signal processing takes place */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); /*! * \brief Function which tells the scheduler how many input items * are required to produce noutput_items output items. */ void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l2_m_telemetry_decoder_cc_sptr gps_l2_m_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in,unsigned int vector_length, boost::shared_ptr queue, bool dump); gps_l2_m_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); void viterbi_decoder(double *page_part_symbols, int *page_part_bits); void align_samples(); concurrent_queue *d_iono_queue; concurrent_queue *d_ephemeris_queue; long d_fs_in; bool d_dump; Gnss_Satellite d_satellite; int d_channel; std::string d_dump_filename; std::ofstream d_dump_file; double d_TOW_at_current_symbol; double d_TOW_at_Preamble; bool d_flag_valid_word; bool d_flag_invert_input_symbols; bool d_flag_invert_buffer_symbols; int d_decimation_output_factor; int d_average_count; size_t d_block_size; //!< number of samples which are processed during one invocation of the algorithms std::vector d_sample_buf; //!< input buffer holding the samples to be processed in one block typedef std::pair> msg_candiate_int_t; typedef std::pair> msg_candiate_char_t; // helper class for symbol alignment and Viterbi decoding class symbol_aligner_and_decoder { public: symbol_aligner_and_decoder(); ~symbol_aligner_and_decoder(); void reset(); bool get_bits(const std::vector & symbols, std::vector & bits); private: int d_KK; Viterbi_Decoder * d_vd1; Viterbi_Decoder * d_vd2; double d_past_symbol; } d_symbol_aligner_and_decoder; // helper class for detecting the preamble and collect the corresponding message candidates class frame_detector { public: void reset(); void get_frame_candidates(const std::vector & bits, std::vector>> & msg_candidates); private: std::deque d_buffer; } d_frame_detector; // helper class for checking the CRC of the message candidates class crc_verifier { public: void reset(); void get_valid_frames(const std::vector & msg_candidates, std::vector & valid_msgs); private: typedef boost::crc_optimal<24, 0x1864CFBu, 0x0, 0x0, false, false> crc_24_q_type; crc_24_q_type d_checksum_agent; void zerropad_front_and_convert_to_bytes(const std::vector & msg_candidate, std::vector & bytes); void zerropad_back_and_convert_to_bytes(const std::vector & msg_candidate, std::vector & bytes); } d_crc_verifier; Gps_CNAV_Navigation_Message d_CNAV_Message; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.cc0000644000175000017500000005516712576764164032504 0ustar carlescarles/*! * \file sbas_l1_telemetry_decoder_cc.cc * \brief Implementation of a SBAS telemetry data decoder block * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" #include "sbas_l1_telemetry_decoder_cc.h" using google::LogMessage; // logging levels #define EVENT 2 // logs important events which don't occur every block #define FLOW 3 // logs the function calls of block processing functions #define SAMP_SYNC 4 // about 1 log entry per sample -> high output #define LMORE 5 // sbas_l1_telemetry_decoder_cc_sptr sbas_l1_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) { return sbas_l1_telemetry_decoder_cc_sptr(new sbas_l1_telemetry_decoder_cc(satellite, if_freq, fs_in, vector_length, queue, dump)); } sbas_l1_telemetry_decoder_cc::sbas_l1_telemetry_decoder_cc( Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) : gr::block("sbas_l1_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_dump = dump; d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); LOG(INFO) << "SBAS L1 TELEMETRY PROCESSING: satellite " << d_satellite; d_fs_in = fs_in; d_block_size = d_samples_per_symbol * d_symbols_per_bit * d_block_size_in_bits; d_channel = 0; set_output_multiple (1); } sbas_l1_telemetry_decoder_cc::~sbas_l1_telemetry_decoder_cc() { d_dump_file.close(); } void sbas_l1_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { unsigned ninputs = ninput_items_required.size (); for (unsigned i = 0; i < ninputs; i++) ninput_items_required[i] = noutput_items; VLOG(LMORE) << "forecast(): " << "noutput_items=" << noutput_items << "\tninput_items_required ninput_items_required.size()=" << ninput_items_required.size(); } int sbas_l1_telemetry_decoder_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { VLOG(FLOW) << "general_work(): " << "noutput_items=" << noutput_items << "\toutput_items real size=" << output_items.size() << "\tninput_items size=" << ninput_items.size() << "\tinput_items real size=" << input_items.size() << "\tninput_items[0]=" << ninput_items[0]; // get pointers on in- and output gnss-synchro objects const Gnss_Synchro *in = (const Gnss_Synchro *) input_items[0]; // input Gnss_Synchro *out = (Gnss_Synchro *) output_items[0]; // output // store the time stamp of the first sample in the processed sample block double sample_stamp = in[0].Tracking_timestamp_secs; // copy correlation samples into samples vector for (int i = 0; i < noutput_items; i++) { // check if channel is in tracking state //if(in[i].Prompt_I != in[i].Prompt_Q) // TODO: check for real condition { d_sample_buf.push_back(in[i].Prompt_I); } } // decode only if enough samples in buffer if(d_sample_buf.size() >= d_block_size) { // align correlation samples in pairs // and obtain the symbols by summing the paired correlation samples std::vector symbols; bool sample_alignment = d_sample_aligner.get_symbols(d_sample_buf, symbols); // align symbols in pairs // and obtain the bits by decoding the symbol pairs std::vector bits; bool symbol_alignment = d_symbol_aligner_and_decoder.get_bits(symbols, bits); // search for preambles // and extract the corresponding message candidates std::vector msg_candidates; d_frame_detector.get_frame_candidates(bits, msg_candidates); // verify checksum // and return the valid messages std::vector valid_msgs; d_crc_verifier.get_valid_frames(msg_candidates, valid_msgs); // compute message sample stamp // and fill messages in SBAS raw message objects std::vector sbas_raw_msgs; for(std::vector::const_iterator it = valid_msgs.begin(); it != valid_msgs.end(); ++it) { int message_sample_offset = (sample_alignment ? 0 : -1) + d_samples_per_symbol*(symbol_alignment ? -1 : 0) + d_samples_per_symbol * d_symbols_per_bit * it->first; double message_sample_stamp = sample_stamp + ((double)message_sample_offset)/1000; VLOG(EVENT) << "message_sample_stamp=" << message_sample_stamp << " (sample_stamp=" << sample_stamp << " sample_alignment=" << sample_alignment << " symbol_alignment=" << symbol_alignment << " relative_preamble_start=" << it->first << " message_sample_offset=" << message_sample_offset << ")"; Sbas_Raw_Msg sbas_raw_msg(message_sample_stamp, this->d_satellite.get_PRN(), it->second); sbas_raw_msgs.push_back(sbas_raw_msg); } // parse messages // and send them to the SBAS raw message queue for(std::vector::iterator it = sbas_raw_msgs.begin(); it != sbas_raw_msgs.end(); it++) { std::cout << "SBAS message type " << it->get_msg_type() << " from PRN" << it->get_prn() << " received" << std::endl; sbas_telemetry_data.update(*it); } // clear all processed samples in the input buffer d_sample_buf.clear(); } // UPDATE GNSS SYNCHRO DATA // actually the SBAS telemetry decoder doesn't support ranging Gnss_Synchro * current_synchro_data = out; //structure to save the synchronization information and send the output object to the next block for (int i = 0; i < noutput_items; i++) { //1. Copy the current tracking output current_synchro_data[i] = in[i]; //2. Add the telemetry decoder information current_synchro_data[i].Flag_valid_word = false; // indicate to observable block that this synchro object isn't valid for pseudorange computation } consume_each(noutput_items); // tell scheduler input items consumed return noutput_items; // tell scheduler output items produced } void sbas_l1_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite) { d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); LOG(INFO) << "SBAS telemetry decoder in channel " << this->d_channel << " set to satellite " << d_satellite; } void sbas_l1_telemetry_decoder_cc::set_channel(int channel) { d_channel = channel; LOG(INFO) << "SBAS channel set to " << channel; } // ### helper class for sample alignment ### sbas_l1_telemetry_decoder_cc::sample_aligner::sample_aligner() { d_n_smpls_in_history = 3; d_iir_par = 0.05; reset(); } sbas_l1_telemetry_decoder_cc::sample_aligner::~sample_aligner() {} void sbas_l1_telemetry_decoder_cc::sample_aligner::reset() { d_past_sample = 0; d_corr_paired = 0; d_corr_shifted = 0; d_aligned = true; } /* * samples length must be a multiple of two */ bool sbas_l1_telemetry_decoder_cc::sample_aligner::get_symbols(const std::vector samples, std::vector &symbols) { double smpls[d_n_smpls_in_history]; double corr_diff; bool stand_by = true; double sym; VLOG(FLOW) << "get_symbols(): " << "d_past_sample=" << d_past_sample << "\tsamples size=" << samples.size(); for (unsigned int i_sym = 0; i_sym < samples.size()/sbas_l1_telemetry_decoder_cc::d_samples_per_symbol; i_sym++) { // get the next samples for (int i = 0; i < d_n_smpls_in_history; i++) { smpls[i] = ((int)i_sym)*sbas_l1_telemetry_decoder_cc::d_samples_per_symbol + i - 1 == -1 ? d_past_sample : samples[i_sym*sbas_l1_telemetry_decoder_cc::d_samples_per_symbol + i - 1]; } // update the pseudo correlations (IIR method) of the two possible alignments d_corr_paired = d_iir_par*smpls[1]*smpls[2] + (1 - d_iir_par)*d_corr_paired; d_corr_shifted = d_iir_par*smpls[0]*smpls[1] + (1 - d_iir_par)*d_corr_shifted; // decide which alignment is the correct one corr_diff = std::abs(d_corr_paired - d_corr_shifted); stand_by = d_aligned ? corr_diff < d_corr_paired/2 : corr_diff < d_corr_shifted/2; if (!stand_by) { d_aligned = d_corr_paired >= d_corr_shifted; } // sum the correct pair of samples to a symbol, depending on the current alignment d_align sym = smpls[0 + int(d_aligned)*2] + smpls[1]; symbols.push_back(sym); // sample alignment debug output VLOG(SAMP_SYNC) << std::setprecision(5) << "smplp: " << std::setw(6) << smpls[0] << " " << "smpl0: " << std::setw(6) << smpls[1] << " " << "smpl1: " << std::setw(6) << smpls[2] << "\t" //<< "Flag_valid_tracking: " << std::setw(1) << in[0][0].Flag_valid_tracking << " " << std::setw(1) << in[0][0].Flag_valid_tracking << "\t" << "d_corr_paired: " << std::setw(10) << d_corr_paired << "\t" << "d_corr_shifted: " << std::setw(10) << d_corr_shifted << "\t" << "corr_diff: " << std::setw(10) << corr_diff << "\t" << "stand_by: " << std::setw(1) << stand_by << "\t" << "d_aligned: " << std::setw(1) << d_aligned << "\t" << "sym: " << std::setw(10) << sym << "\t"; } // save last sample for next block double temp; temp = samples.back(); d_past_sample = (temp); return d_aligned; } // ### helper class for symbol alignment and viterbi decoding ### sbas_l1_telemetry_decoder_cc::symbol_aligner_and_decoder::symbol_aligner_and_decoder() { // convolutional code properties d_KK = 7; int nn = 2; int g_encoder[nn]; g_encoder[0] = 121; g_encoder[1] = 91; d_vd1 = new Viterbi_Decoder(g_encoder, d_KK, nn); d_vd2 = new Viterbi_Decoder(g_encoder, d_KK, nn); d_past_symbol = 0; } sbas_l1_telemetry_decoder_cc::symbol_aligner_and_decoder::~symbol_aligner_and_decoder() { delete d_vd1; delete d_vd2; } void sbas_l1_telemetry_decoder_cc::symbol_aligner_and_decoder::reset() { d_past_symbol = 0; d_vd1->reset(); d_vd2->reset(); } bool sbas_l1_telemetry_decoder_cc::symbol_aligner_and_decoder::get_bits(const std::vector symbols, std::vector &bits) { const int traceback_depth = 5*d_KK; int nbits_requested = symbols.size()/d_symbols_per_bit; int nbits_decoded; // fill two vectors with the two possible symbol alignments std::vector symbols_vd1(symbols); // aligned symbol vector -> copy input symbol vector std::vector symbols_vd2; // shifted symbol vector -> add past sample in front of input vector symbols_vd2.push_back(d_past_symbol); for (std::vector::const_iterator symbol_it = symbols.begin(); symbol_it != symbols.end() - 1; ++symbol_it) { symbols_vd2.push_back(*symbol_it); } // arrays for decoded bits int * bits_vd1 = new int[nbits_requested]; int * bits_vd2 = new int[nbits_requested]; // decode float metric_vd1 = d_vd1->decode_continuous(symbols_vd1.data(), traceback_depth, bits_vd1, nbits_requested, nbits_decoded); float metric_vd2 = d_vd2->decode_continuous(symbols_vd2.data(), traceback_depth, bits_vd2, nbits_requested, nbits_decoded); // choose the bits with the better metric for (int i = 0; i < nbits_decoded; i++) { if (metric_vd1 > metric_vd2) {// symbols aligned bits.push_back(bits_vd1[i]); } else {// symbols shifted bits.push_back(bits_vd2[i]); } } d_past_symbol = symbols.back(); delete[] bits_vd1; delete[] bits_vd2; return metric_vd1 > metric_vd2; } // ### helper class for detecting the preamble and collect the corresponding message candidates ### void sbas_l1_telemetry_decoder_cc::frame_detector::reset() { d_buffer.clear(); } void sbas_l1_telemetry_decoder_cc::frame_detector::get_frame_candidates(const std::vector bits, std::vector>> &msg_candidates) { std::stringstream ss; unsigned int sbas_msg_length = 250; std::vector> preambles = {{0, 1, 0, 1, 0, 0, 1 ,1}, {1, 0, 0, 1, 1, 0, 1, 0}, {1, 1, 0, 0, 0, 1, 1, 0}}; VLOG(FLOW) << "get_frame_candidates(): " << "d_buffer.size()=" << d_buffer.size() << "\tbits.size()=" << bits.size(); ss << "copy bits "; int count = 0; // copy new bits into the working buffer for (std::vector::const_iterator bit_it = bits.begin(); bit_it < bits.end(); ++bit_it) { d_buffer.push_back(*bit_it); ss << *bit_it; count++; } VLOG(SAMP_SYNC) << ss.str() << " into working buffer (" << count << " bits)"; int relative_preamble_start = 0; while(d_buffer.size() >= sbas_msg_length) { // compare with all preambles for (std::vector>::iterator preample_it = preambles.begin(); preample_it < preambles.end(); ++preample_it) { bool preamble_detected = true; bool inv_preamble_detected = true; // compare the buffer bits with the preamble bits for (std::vector::iterator preample_bit_it = preample_it->begin(); preample_bit_it < preample_it->end(); ++preample_bit_it) { preamble_detected = *preample_bit_it == d_buffer[preample_bit_it - preample_it->begin()] ? preamble_detected : false ; inv_preamble_detected = *preample_bit_it != d_buffer[preample_bit_it - preample_it->begin()] ? inv_preamble_detected : false ; } if (preamble_detected || inv_preamble_detected) { // copy candidate std::vector candidate; std::copy(d_buffer.begin(), d_buffer.begin() + sbas_msg_length, std::back_inserter(candidate)); if(inv_preamble_detected) { // invert bits for (std::vector::iterator candidate_bit_it = candidate.begin(); candidate_bit_it != candidate.end(); candidate_bit_it++) *candidate_bit_it = *candidate_bit_it == 0 ? 1 : 0; } msg_candidates.push_back(std::pair>(relative_preamble_start, candidate)); ss.str(""); ss << "preamble " << preample_it - preambles.begin() << (inv_preamble_detected?" inverted":" normal") << " detected! candidate="; for (std::vector::iterator bit_it = candidate.begin(); bit_it < candidate.end(); ++bit_it) ss << *bit_it; VLOG(EVENT) << ss.str(); } } relative_preamble_start++; // remove bit in front d_buffer.pop_front(); } } // ### helper class for checking the CRC of the message candidates ### void sbas_l1_telemetry_decoder_cc::crc_verifier::reset() { } void sbas_l1_telemetry_decoder_cc::crc_verifier::get_valid_frames(const std::vector msg_candidates, std::vector &valid_msgs) { std::stringstream ss; VLOG(FLOW) << "get_valid_frames(): " << "msg_candidates.size()=" << msg_candidates.size(); // for each candidate for (std::vector::const_iterator candidate_it = msg_candidates.begin(); candidate_it < msg_candidates.end(); ++candidate_it) { // convert to bytes std::vector candidate_bytes; zerropad_back_and_convert_to_bytes(candidate_it->second, candidate_bytes); // verify CRC d_checksum_agent.reset(0); d_checksum_agent.process_bytes(candidate_bytes.data(), candidate_bytes.size()); unsigned int crc = d_checksum_agent.checksum(); VLOG(SAMP_SYNC) << "candidate " << candidate_it - msg_candidates.begin() << ": final crc remainder= " << std::hex << crc << std::setfill(' ') << std::resetiosflags(std::ios::hex); // the final remainder must be zero for a valid message, because the CRC is done over the received CRC value if (crc == 0) { valid_msgs.push_back(msg_candiate_char_t(candidate_it->first, candidate_bytes)); ss << "Valid message found!"; } else { ss << "Not a valid message."; } ss << " Relbitoffset=" << candidate_it->first << " content="; for (std::vector::iterator byte_it = candidate_bytes.begin(); byte_it < candidate_bytes.end(); ++byte_it) { ss << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)(*byte_it); } VLOG(SAMP_SYNC) << ss.str() << std::setfill(' ') << std::resetiosflags(std::ios::hex) << std::endl; } } void sbas_l1_telemetry_decoder_cc::crc_verifier::zerropad_back_and_convert_to_bytes(const std::vector msg_candidate, std::vector &bytes) { std::stringstream ss; const size_t bits_per_byte = 8; unsigned char byte = 0; VLOG(LMORE) << "zerropad_back_and_convert_to_bytes():" << byte; for (std::vector::const_iterator candidate_bit_it = msg_candidate.begin(); candidate_bit_it < msg_candidate.end(); ++candidate_bit_it) { int idx_bit = candidate_bit_it - msg_candidate.begin(); int bit_pos_in_current_byte = (bits_per_byte - 1) - (idx_bit % bits_per_byte); byte |= (unsigned char)(*candidate_bit_it) << bit_pos_in_current_byte; ss << *candidate_bit_it; if (idx_bit % bits_per_byte == bits_per_byte - 1) { bytes.push_back(byte); VLOG(LMORE) << ss.str() << " -> byte=" << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)byte; ss.str(""); byte = 0; } } bytes.push_back(byte); // implies: insert 6 zeros at the end to fit the 250bits into a multiple of bytes VLOG(LMORE) << " -> byte=" << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)byte << std::setfill(' ') << std::resetiosflags(std::ios::hex); } void sbas_l1_telemetry_decoder_cc::crc_verifier::zerropad_front_and_convert_to_bytes(const std::vector msg_candidate, std::vector &bytes) { std::stringstream ss; const size_t bits_per_byte = 8; unsigned char byte = 0; int idx_bit = 6; // insert 6 zeros at the front to fit the 250bits into a multiple of bytes VLOG(LMORE) << "zerropad_front_and_convert_to_bytes():" << byte; for (std::vector::const_iterator candidate_bit_it = msg_candidate.begin(); candidate_bit_it < msg_candidate.end(); ++candidate_bit_it) { int bit_pos_in_current_byte = (bits_per_byte - 1) - (idx_bit % bits_per_byte); byte |= (unsigned char)(*candidate_bit_it) << bit_pos_in_current_byte; ss << *candidate_bit_it; if (idx_bit % bits_per_byte == bits_per_byte - 1) { bytes.push_back(byte); VLOG(LMORE) << ss.str() << " -> byte=" << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)byte; ss.str(""); byte = 0; } idx_bit++; } VLOG(LMORE) << " -> byte=" << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)byte << std::setfill(' ') << std::resetiosflags(std::ios::hex); } void sbas_l1_telemetry_decoder_cc::set_raw_msg_queue(concurrent_queue *raw_msg_queue) { sbas_telemetry_data.set_raw_msg_queue(raw_msg_queue); } void sbas_l1_telemetry_decoder_cc::set_iono_queue(concurrent_queue *iono_queue) { sbas_telemetry_data.set_iono_queue(iono_queue); } void sbas_l1_telemetry_decoder_cc::set_sat_corr_queue(concurrent_queue *sat_corr_queue) { sbas_telemetry_data.set_sat_corr_queue(sat_corr_queue); } void sbas_l1_telemetry_decoder_cc::set_ephemeris_queue(concurrent_queue *ephemeris_queue) { sbas_telemetry_data.set_ephemeris_queue(ephemeris_queue); } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l2_m_telemetry_decoder_cc.cc0000644000175000017500000005763712576764164032666 0ustar carlescarles/*! * \file gps_l2_m_telemetry_decoder_cc.cc * \brief Implementation of a NAV message demodulator block based on * Kay Borre book MATLAB-based GPS receiver * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include "gnss_synchro.h" #include "gps_l2_m_telemetry_decoder_cc.h" using google::LogMessage; // logging levels #define EVENT 2 // logs important events which don't occur every block #define FLOW 3 // logs the function calls of block processing functions #define SAMP_SYNC 4 // about 1 log entry per sample -> high output #define LMORE 5 // gps_l2_m_telemetry_decoder_cc_sptr gps_l2_m_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) { return gps_l2_m_telemetry_decoder_cc_sptr(new gps_l2_m_telemetry_decoder_cc(satellite, if_freq, fs_in, vector_length, queue, dump)); } gps_l2_m_telemetry_decoder_cc::gps_l2_m_telemetry_decoder_cc( Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) : gr::block("gps_l2_m_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_dump = dump; d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); LOG(INFO) << "GPS L2C M TELEMETRY PROCESSING: satellite " << d_satellite; d_fs_in = fs_in; d_block_size = GPS_L2_SAMPLES_PER_SYMBOL * GPS_L2_SYMBOLS_PER_BIT * GPS_L2_CNAV_DATA_PAGE_BITS * 2; // two CNAV frames d_decimation_output_factor = 0; //set_output_multiple (1); d_average_count = 0; d_flag_invert_buffer_symbols = false; d_flag_invert_input_symbols = false; d_channel = 0; d_iono_queue = 0; d_ephemeris_queue = 0; d_flag_valid_word = false; d_TOW_at_current_symbol = 0; d_TOW_at_Preamble = 0; //set_history(d_samples_per_bit*8); // At least a history of 8 bits are needed to correlate with the preamble } gps_l2_m_telemetry_decoder_cc::~gps_l2_m_telemetry_decoder_cc() { d_dump_file.close(); } void gps_l2_m_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { unsigned ninputs = ninput_items_required.size (); for (unsigned i = 0; i < ninputs; i++) ninput_items_required[i] = noutput_items; //LOG(INFO) << "forecast(): " << "noutput_items=" << noutput_items << "\tninput_items_required ninput_items_required.size()=" << ninput_items_required.size(); } void gps_l2_m_telemetry_decoder_cc::set_decimation(int decimation) { d_decimation_output_factor = decimation; } int gps_l2_m_telemetry_decoder_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // get pointers on in- and output gnss-synchro objects const Gnss_Synchro *in = (const Gnss_Synchro *) input_items[0]; // input Gnss_Synchro *out = (Gnss_Synchro *) output_items[0]; // output // store the time stamp of the first sample in the processed sample block double sample_stamp = in[0].Tracking_timestamp_secs; bool flag_new_cnav_frame = false; int last_frame_preamble_start = 0; // copy correlation samples into samples vector d_sample_buf.push_back(in[0].Prompt_I); consume_each(1); //one by one // decode only if enough samples in buffer if(d_sample_buf.size() >= d_block_size) { if (in[0].Flag_valid_tracking == false) // check if the tracking is locked { //LOG(INFO)<< "Discarting channel "<::iterator symbol_it = d_sample_buf.begin(); symbol_it != d_sample_buf.end(); symbol_it++) { *symbol_it = -(*symbol_it); } //LOG(INFO)<<"Inverting buffer symbols"; } // align symbols in pairs // and obtain the bits by decoding the symbols (viterbi decoder) // they can be already aligned or shifted by one position std::vector bits; bool symbol_alignment = d_symbol_aligner_and_decoder.get_bits(d_sample_buf, bits); //std::stringstream ss; //for (std::vector::const_iterator bit_it = bits.begin(); bit_it < bits.end(); ++bit_it) // { // ss << *bit_it; // } // LOG(INFO) << "get_bits=" << ss.str() << std::endl; // search for preambles // and extract the corresponding message candidates std::vector msg_candidates; d_frame_detector.get_frame_candidates(bits, msg_candidates); // verify checksum // and return the valid messages std::vector valid_msgs; d_crc_verifier.get_valid_frames(msg_candidates, valid_msgs); if (valid_msgs.size() == 0) { if (d_flag_invert_buffer_symbols == d_flag_invert_input_symbols) { d_flag_invert_buffer_symbols = not d_flag_invert_buffer_symbols; } else {//already tested the symbol inversion but CRC still fail LOG(INFO) << "Discarting this buffer, no CNAV frames detected CH " << this->d_channel; break; } } else { //at least one frame has good CRC, keep the invert sign for the next frames d_flag_invert_input_symbols = d_flag_invert_buffer_symbols; std::vector tmp_msg; std::string msg; LOG(INFO) << valid_msgs.size() << " GOOD L2C CNAV FRAME DETECTED! CH " <d_channel; for (unsigned int i = 0;i < valid_msgs.size(); i++) { tmp_msg = valid_msgs.at(i).second; d_CNAV_Message.decode_page(tmp_msg); //std::cout << "Valid CNAV frame with relative preamble start at " << valid_msgs.at(i).first << std::endl; flag_new_cnav_frame = true; d_flag_valid_word = true; last_frame_preamble_start = valid_msgs.at(i).first; // 4. Push the new navigation data to the queues if (d_CNAV_Message.have_new_ephemeris() == true) { // get ephemeris object for this SV Gps_CNAV_Ephemeris ephemeris = d_CNAV_Message.get_ephemeris(); //notice that the read operation will clear the valid flag std::cout << "New GPS CNAV Ephemeris received for SV " << ephemeris.i_satellite_PRN << std::endl; d_ephemeris_queue->push(ephemeris); } if (d_CNAV_Message.have_new_iono() == true) { Gps_CNAV_Iono iono = d_CNAV_Message.get_iono(); //notice that the read operation will clear the valid flag std::cout << "New GPS CNAV IONO model received for SV " << d_satellite.get_PRN() << std::endl; d_iono_queue->push(iono); } } break; } } } // clear all processed samples in the input buffer d_sample_buf.clear(); } // UPDATE GNSS SYNCHRO DATA Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block //1. Copy the current tracking output current_synchro_data = in[0]; if (d_flag_valid_word == true) { double Prn_timestamp_at_preamble_ms = 0; //2. Add the telemetry decoder information if (flag_new_cnav_frame == true) { //update TOW at the preamble instant Prn_timestamp_at_preamble_ms = (in[0].Tracking_timestamp_secs * 1000.0) - (d_block_size - last_frame_preamble_start) * GPS_L2_M_PERIOD; d_TOW_at_Preamble = d_CNAV_Message.d_TOW - GPS_L2_CNAV_DATA_PAGE_DURATION_S; d_TOW_at_current_symbol = d_TOW_at_Preamble + (d_block_size - last_frame_preamble_start) * GPS_L2_M_PERIOD; current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; current_synchro_data.Flag_preamble = false; current_synchro_data.Prn_timestamp_ms = in[0].Tracking_timestamp_secs * 1000.0; current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; } else { d_TOW_at_current_symbol = d_TOW_at_Preamble + (d_block_size - last_frame_preamble_start) * GPS_L2_M_PERIOD; current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol; current_synchro_data.Flag_preamble = false; current_synchro_data.Prn_timestamp_ms = in[0].Tracking_timestamp_secs * 1000.0; current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; } current_synchro_data.Flag_valid_word = true; } else { current_synchro_data.Flag_valid_word = false; } d_average_count++; if (d_average_count == d_decimation_output_factor) { d_average_count = 0; //3. Make the output (copy the object contents to the GNURadio reserved memory) out[0] = current_synchro_data; //std::cout<<"GPS L2 TLM output on CH="<d_channel << " SAMPLE STAMP="<d_channel << " set to satellite " << d_satellite; } void gps_l2_m_telemetry_decoder_cc::set_channel(int channel) { d_channel = channel; LOG(INFO) << "GPS L2C CNAV channel set to " << channel; } // ### helper class for symbol alignment and viterbi decoding ### gps_l2_m_telemetry_decoder_cc::symbol_aligner_and_decoder::symbol_aligner_and_decoder() { // convolutional code properties d_KK = 7; int nn = 2; int g_encoder[nn]; g_encoder[0] = 121; //171o g_encoder[1] = 91; //133o d_vd1 = new Viterbi_Decoder(g_encoder, d_KK, nn); d_vd2 = new Viterbi_Decoder(g_encoder, d_KK, nn); d_past_symbol = 0; } gps_l2_m_telemetry_decoder_cc::symbol_aligner_and_decoder::~symbol_aligner_and_decoder() { delete d_vd1; delete d_vd2; } void gps_l2_m_telemetry_decoder_cc::symbol_aligner_and_decoder::reset() { d_past_symbol = 0; d_vd1->reset(); d_vd2->reset(); } bool gps_l2_m_telemetry_decoder_cc::symbol_aligner_and_decoder::get_bits(const std::vector & symbols, std::vector & bits) { const int traceback_depth = 5 * d_KK; int nbits_requested = symbols.size() / GPS_L2_SYMBOLS_PER_BIT; int nbits_decoded; // fill two vectors with the two possible symbol alignments std::vector symbols_vd1(symbols); // aligned symbol vector -> copy input symbol vector std::vector symbols_vd2; // shifted symbol vector -> add past sample in front of input vector symbols_vd2.push_back(d_past_symbol); for (std::vector::const_iterator symbol_it = symbols.begin(); symbol_it != symbols.end() - 1; ++symbol_it) { symbols_vd2.push_back(*symbol_it); } // arrays for decoded bits int * bits_vd1 = new int[nbits_requested]; int * bits_vd2 = new int[nbits_requested]; // decode float metric_vd1 = d_vd1->decode_continuous(symbols_vd1.data(), traceback_depth, bits_vd1, nbits_requested, nbits_decoded); float metric_vd2 = d_vd2->decode_continuous(symbols_vd2.data(), traceback_depth, bits_vd2, nbits_requested, nbits_decoded); //LOG(INFO)<<"metric_vd1="<::const_iterator bit_it = bits.begin(); bit_it < bits.end(); ++bit_it) { d_buffer.push_back(*bit_it); //ss << *bit_it; count++; } //LOG(INFO) << ss.str() << " into working buffer (" << count << " bits)"; int relative_preamble_start = 0; while(d_buffer.size() >= cnav_msg_length) { // compare with all preambles for (std::vector>::iterator preample_it = preambles.begin(); preample_it < preambles.end(); ++preample_it) { bool preamble_detected = true; bool inv_preamble_detected = true; // compare the buffer bits with the preamble bits for (std::vector::iterator preample_bit_it = preample_it->begin(); preample_bit_it < preample_it->end(); ++preample_bit_it) { preamble_detected = *preample_bit_it == d_buffer[preample_bit_it - preample_it->begin()] ? preamble_detected : false ; inv_preamble_detected = *preample_bit_it != d_buffer[preample_bit_it - preample_it->begin()] ? inv_preamble_detected : false ; } if (preamble_detected || inv_preamble_detected) { // copy candidate std::vector candidate; std::copy(d_buffer.begin(), d_buffer.begin() + cnav_msg_length, std::back_inserter(candidate)); if(inv_preamble_detected) { // invert bits for (std::vector::iterator candidate_bit_it = candidate.begin(); candidate_bit_it != candidate.end(); candidate_bit_it++) *candidate_bit_it = *candidate_bit_it == 0 ? 1 : 0; } msg_candidates.push_back(std::pair>(relative_preamble_start, candidate)); //ss.str(""); //ss << "preamble " << preample_it - preambles.begin() << (inv_preamble_detected?" inverted":" normal") << " detected! candidate="; //for (std::vector::iterator bit_it = candidate.begin(); bit_it < candidate.end(); ++bit_it) // ss << *bit_it; //LOG(INFO) << ss.str(); } } relative_preamble_start++; // remove bit in front d_buffer.pop_front(); } } // ### helper class for checking the CRC of the message candidates ### void gps_l2_m_telemetry_decoder_cc::crc_verifier::reset() { } void gps_l2_m_telemetry_decoder_cc::crc_verifier::get_valid_frames(const std::vector & msg_candidates, std::vector & valid_msgs) { std::vector tmp_msg; LOG(INFO) << "get_valid_frames(): " << "msg_candidates.size()=" << msg_candidates.size(); // for each candidate for (std::vector::const_iterator candidate_it = msg_candidates.begin(); candidate_it < msg_candidates.end(); ++candidate_it) { // convert to bytes std::vector candidate_bytes; zerropad_back_and_convert_to_bytes(candidate_it->second, candidate_bytes); // verify CRC d_checksum_agent.reset(0); d_checksum_agent.process_bytes(candidate_bytes.data(), candidate_bytes.size()); unsigned int crc = d_checksum_agent.checksum(); //LOG(INFO) << "candidate " << ": final crc remainder= " << std::hex << crc // << std::setfill(' ') << std::resetiosflags(std::ios::hex); // the final remainder must be zero for a valid message, because the CRC is done over the received CRC value if (crc == 0) { valid_msgs.push_back(msg_candiate_int_t(candidate_it->first, candidate_it->second)); std::cout << "Valid CNAV message found!"< & msg_candidate, std::vector & bytes) { //std::stringstream ss; const size_t bits_per_byte = 8; unsigned char byte = 0; //LOG(INFO) << "zerropad_back_and_convert_to_bytes():" << byte; for (std::vector::const_iterator candidate_bit_it = msg_candidate.begin(); candidate_bit_it < msg_candidate.end(); ++candidate_bit_it) { int idx_bit = candidate_bit_it - msg_candidate.begin(); int bit_pos_in_current_byte = (bits_per_byte - 1) - (idx_bit % bits_per_byte); byte |= (unsigned char)(*candidate_bit_it) << bit_pos_in_current_byte; // ss << *candidate_bit_it; if (idx_bit % bits_per_byte == bits_per_byte - 1) { bytes.push_back(byte); //LOG(INFO) << ss.str() << " -> byte=" << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)byte; ss.str(""); byte = 0; } } bytes.push_back(byte); // implies: insert 6 zeros at the end to fit the 250bits into a multiple of bytes //LOG(INFO) << " -> byte=" << std::setw(2) // << std::setfill('0') << std::hex << (unsigned int)byte // << std::setfill(' ') << std::resetiosflags(std::ios::hex); } void gps_l2_m_telemetry_decoder_cc::crc_verifier::zerropad_front_and_convert_to_bytes(const std::vector & msg_candidate, std::vector & bytes) { //std::stringstream ss; const size_t bits_per_byte = 8; unsigned char byte = 0; int idx_bit = 6; // insert 6 zeros at the front to fit the 250bits into a multiple of bytes //LOG(INFO) << "zerropad_front_and_convert_to_bytes():" << byte; for (std::vector::const_iterator candidate_bit_it = msg_candidate.begin(); candidate_bit_it < msg_candidate.end(); ++candidate_bit_it) { int bit_pos_in_current_byte = (bits_per_byte - 1) - (idx_bit % bits_per_byte); byte |= (unsigned char)(*candidate_bit_it) << bit_pos_in_current_byte; // ss << *candidate_bit_it; if (idx_bit % bits_per_byte == bits_per_byte - 1) { bytes.push_back(byte); //LOG(INFO) << ss.str() << " -> byte=" << std::setw(2) // << std::setfill('0') << std::hex << (unsigned int)byte; ss.str(""); byte = 0; } idx_bit++; } //LOG(INFO) << " -> byte=" << std::setw(2) // << std::setfill('0') << std::hex << (unsigned int)byte // << std::setfill(' ') << std::resetiosflags(std::ios::hex); } void gps_l2_m_telemetry_decoder_cc::set_iono_queue(concurrent_queue *iono_queue) { d_iono_queue = iono_queue; } void gps_l2_m_telemetry_decoder_cc::set_ephemeris_queue(concurrent_queue *ephemeris_queue) { d_ephemeris_queue = ephemeris_queue; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/gps_l1_ca_telemetry_decoder_cc.h0000644000175000017500000001240712576764164032640 0ustar carlescarles/*! * \file gps_l1_ca_telemetry_decoder_cc.h * \brief Interface of a NAV message demodulator block based on * Kay Borre book MATLAB-based GPS receiver * \author Javier Arribas, 2011. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H #define GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_CC_H #include #include #include #include #include "GPS_L1_CA.h" #include "gps_l1_ca_subframe_fsm.h" #include "concurrent_queue.h" #include "gnss_satellite.h" class gps_l1_ca_telemetry_decoder_cc; typedef boost::shared_ptr gps_l1_ca_telemetry_decoder_cc_sptr; gps_l1_ca_telemetry_decoder_cc_sptr gps_l1_ca_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); /*! * \brief This class implements a block that decodes the NAV data defined in IS-GPS-200E * */ class gps_l1_ca_telemetry_decoder_cc : public gr::block { public: ~gps_l1_ca_telemetry_decoder_cc(); void set_satellite(Gnss_Satellite satellite); //!< Set satellite PRN void set_channel(int channel); //!< Set receiver's channel /*! * \brief Set decimation factor to average the GPS synchronization estimation output from the tracking module. */ void set_decimation(int decimation); /*! * \brief Set the satellite data queue */ void set_ephemeris_queue(concurrent_queue *ephemeris_queue){d_GPS_FSM.d_ephemeris_queue = ephemeris_queue;} //!< Set the ephemeris data queue void set_iono_queue(concurrent_queue *iono_queue){d_GPS_FSM.d_iono_queue = iono_queue;} //!< Set the iono data queue void set_almanac_queue(concurrent_queue *almanac_queue){d_GPS_FSM.d_almanac_queue = almanac_queue;} //!< Set the almanac data queue void set_utc_model_queue(concurrent_queue *utc_model_queue){d_GPS_FSM.d_utc_model_queue = utc_model_queue;} //!< Set the UTC model data queue /*! * \brief This is where all signal processing takes place */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); /*! * \brief Function which tells the scheduler how many input items * are required to produce noutput_items output items. */ void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend gps_l1_ca_telemetry_decoder_cc_sptr gps_l1_ca_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in,unsigned int vector_length, boost::shared_ptr queue, bool dump); gps_l1_ca_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); bool gps_word_parityCheck(unsigned int gpsword); // constants unsigned short int d_preambles_bits[GPS_CA_PREAMBLE_LENGTH_BITS]; // class private vars signed int *d_preambles_symbols; unsigned int d_samples_per_bit; long unsigned int d_sample_counter; long unsigned int d_preamble_index; unsigned int d_stat; bool d_flag_frame_sync; // symbols double d_symbol_accumulator; short int d_symbol_accumulator_counter; //bits and frame unsigned short int d_frame_bit_index; unsigned int d_GPS_frame_4bytes; unsigned int d_prev_GPS_frame_4bytes; bool d_flag_parity; bool d_flag_preamble; int d_word_number; // output averaging and decimation int d_average_count; int d_decimation_output_factor; long d_fs_in; //double d_preamble_duration_seconds; // navigation message vars Gps_Navigation_Message d_nav; GpsL1CaSubframeFsm d_GPS_FSM; boost::shared_ptr d_queue; unsigned int d_vector_length; bool d_dump; Gnss_Satellite d_satellite; int d_channel; //std::deque d_prn_start_sample_history; double d_preamble_time_seconds; double d_TOW_at_Preamble; double d_TOW_at_current_symbol; double Prn_timestamp_at_preamble_ms; bool flag_TOW_set; std::string d_dump_filename; std::ofstream d_dump_file; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e1b_telemetry_decoder_cc.cc0000644000175000017500000005662012576764164033316 0ustar carlescarles/*! * \file galileo_e1b_telemetry_decoder_cc.cc * \brief Implementation of a Galileo INAV message demodulator block * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1b_telemetry_decoder_cc.h" #include #include #include #include #include #include #include #include "control_message_factory.h" #include "galileo_navigation_message.h" #include "gnss_synchro.h" #include "convolutional.h" #define CRC_ERROR_LIMIT 6 using google::LogMessage; galileo_e1b_telemetry_decoder_cc_sptr galileo_e1b_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) { return galileo_e1b_telemetry_decoder_cc_sptr(new galileo_e1b_telemetry_decoder_cc(satellite, if_freq, fs_in, vector_length, queue, dump)); } void galileo_e1b_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = GALILEO_INAV_PAGE_SYMBOLS; // set the required sample history } void galileo_e1b_telemetry_decoder_cc::viterbi_decoder(double *page_part_symbols, int *page_part_bits) { int CodeLength = 240; int DataLength; int nn, KK, mm, max_states; int g_encoder[2]; nn = 2; // Coding rate 1/n KK = 7; // Constraint Length g_encoder[0] = 121; // Polynomial G1 g_encoder[1] = 91; // Polynomial G2 mm = KK - 1; max_states = 1 << mm; /* 2^mm */ DataLength = (CodeLength/nn) - mm; /* create appropriate transition matrices */ int *out0, *out1, *state0, *state1; out0 = (int*)calloc( max_states, sizeof(int) ); out1 = (int*)calloc( max_states, sizeof(int) ); state0 = (int*)calloc( max_states, sizeof(int) ); state1 = (int*)calloc( max_states, sizeof(int) ); nsc_transit( out0, state0, 0, g_encoder, KK, nn ); nsc_transit( out1, state1, 1, g_encoder, KK, nn ); Viterbi(page_part_bits, out0, state0, out1, state1, page_part_symbols, KK, nn, DataLength ); /* Clean up memory */ free( out0 ); free( out1 ); free( state0 ); free( state1 ); } void galileo_e1b_telemetry_decoder_cc::deinterleaver(int rows, int cols, double *in, double *out) { for (int r = 0; r < rows; r++) { for(int c = 0; c < cols; c++) { out[c*rows + r] = in[r*cols + c]; } } } galileo_e1b_telemetry_decoder_cc::galileo_e1b_telemetry_decoder_cc( Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) : gr::block("galileo_e1b_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); LOG(INFO) << "Initializing GALILEO E1B TELEMETRY PROCESSING"; d_vector_length = vector_length; d_samples_per_symbol = ( Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS ) / Galileo_E1_B_SYMBOL_RATE_BPS; d_fs_in = fs_in; // set the preamble unsigned short int preambles_bits[GALILEO_INAV_PREAMBLE_LENGTH_BITS] = GALILEO_INAV_PREAMBLE; d_symbols_per_preamble = GALILEO_INAV_PREAMBLE_LENGTH_BITS * d_samples_per_symbol; memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GALILEO_INAV_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int)); // preamble bits to sampled symbols d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * d_symbols_per_preamble); int n = 0; for (int i = 0; i < GALILEO_INAV_PREAMBLE_LENGTH_BITS; i++) { for (unsigned int j = 0; j < d_samples_per_symbol; j++) { if (d_preambles_bits[i] == 1) { d_preambles_symbols[n] = 1; } else { d_preambles_symbols[n] = -1; } n++; } } d_sample_counter = 0; d_stat = 0; d_preamble_index = 0; d_preamble_time_seconds = 0; d_flag_frame_sync = false; d_flag_parity = false; d_TOW_at_Preamble = 0; d_TOW_at_current_symbol = 0; delta_t = 0; d_CRC_error_counter = 0; flag_even_word_arrived = 0; d_flag_preamble = false; d_ephemeris_queue = 0; d_utc_model_queue = 0; d_almanac_queue = 0; d_iono_queue = 0; d_channel = 0; Prn_timestamp_at_preamble_ms = 0.0; flag_TOW_set = false; d_average_count = 0; d_decimation_output_factor = 1; } galileo_e1b_telemetry_decoder_cc::~galileo_e1b_telemetry_decoder_cc() { delete d_preambles_symbols; d_dump_file.close(); } void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols,int frame_length) { double page_part_symbols_deint[frame_length]; // 1. De-interleave deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint); // 2. Viterbi decoder // 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder) // 2.2 Take into account the possible inversion of the polarity due to PLL lock at 180� for (int i = 0; i < frame_length; i++) { if ((i + 1) % 2 == 0) { page_part_symbols_deint[i] = -page_part_symbols_deint[i]; } } int page_part_bits[frame_length/2]; viterbi_decoder(page_part_symbols_deint, page_part_bits); // 3. Call the Galileo page decoder std::string page_String; for(int i = 0; i < (frame_length/2); i++) { if (page_part_bits[i] > 0) { page_String.push_back('1'); } else { page_String.push_back('0'); } } if (page_part_bits[0] == 1) { // DECODE COMPLETE WORD (even + odd) and TEST CRC d_nav.split_page(page_String, flag_even_word_arrived); if(d_nav.flag_CRC_test == true) { LOG(INFO) << "Galileo CRC correct on channel " << d_channel << " from satellite " << d_satellite; std::cout << "Galileo CRC correct on channel " << d_channel << " from satellite " << d_satellite << std::endl; } else { std::cout << "Galileo CRC error on channel " << d_channel << " from satellite " << d_satellite << std::endl; LOG(INFO) << "Galileo CRC error on channel " << d_channel << " from satellite " << d_satellite; } flag_even_word_arrived = 0; } else { // STORE HALF WORD (even page) d_nav.split_page(page_String.c_str(), flag_even_word_arrived); flag_even_word_arrived = 1; } // 4. Push the new navigation data to the queues if (d_nav.have_new_ephemeris() == true) { // get ephemeris object for this SV Galileo_Ephemeris ephemeris = d_nav.get_ephemeris();//notice that the read operation will clear the valid flag //std::cout<<"New Galileo Ephemeris received for SV "<push(ephemeris); } if (d_nav.have_new_iono_and_GST() == true) { Galileo_Iono iono = d_nav.get_iono(); //notice that the read operation will clear the valid flag //std::cout<<"New Galileo IONO model (and UTC) received for SV "<push(iono); } if (d_nav.have_new_utc_model() == true) { Galileo_Utc_Model utc_model = d_nav.get_utc_model(); //notice that the read operation will clear the valid flag //std::cout<<"New Galileo UTC model received for SV "<push(utc_model); } if (d_nav.have_new_almanac() == true) { Galileo_Almanac almanac = d_nav.get_almanac(); d_almanac_queue->push(almanac); //debug std::cout << "Galileo almanac received!" << std::endl; LOG(INFO) << "GPS_to_Galileo time conversion:"; LOG(INFO) << "A0G=" << almanac.A_0G_10; LOG(INFO) << "A1G=" << almanac.A_1G_10; LOG(INFO) << "T0G=" << almanac.t_0G_10; LOG(INFO) << "WN_0G_10=" << almanac.WN_0G_10; LOG(INFO) << "Current parameters:"; LOG(INFO) << "d_TOW_at_current_symbol=" << d_TOW_at_current_symbol; LOG(INFO) << "d_nav.WN_0=" << d_nav.WN_0; delta_t = almanac.A_0G_10 + almanac.A_1G_10 * (d_TOW_at_current_symbol - almanac.t_0G_10 + 604800 * (fmod((d_nav.WN_0 - almanac.WN_0G_10), 64))); LOG(INFO) << "delta_t=" << delta_t << "[s]"; } } int galileo_e1b_telemetry_decoder_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int corr_value = 0; int preamble_diff = 0; Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; d_sample_counter++; //count for the processed samples // ########### Output the tracking data to navigation and PVT ########## const Gnss_Synchro **in = (const Gnss_Synchro **) &input_items[0]; //Get the input samples pointer // TODO Optimize me! //******* preamble correlation ******** for (int i = 0; i < d_symbols_per_preamble; i++) { if (in[0][i].Prompt_I < 0) // symbols clipping { corr_value -= d_preambles_symbols[i]; } else { corr_value += d_preambles_symbols[i]; } } d_flag_preamble = false; //******* frame sync ****************** if (d_stat == 0) //no preamble information { if (abs(corr_value) >= d_symbols_per_preamble) { d_preamble_index = d_sample_counter;//record the preamble sample stamp LOG(INFO) << "Preamble detection for Galileo SAT " << this->d_satellite; d_stat = 1; // enter into frame pre-detection status } } else if (d_stat == 1) // posible preamble lock { if (abs(corr_value) >= d_symbols_per_preamble) { //check preamble separation preamble_diff = d_sample_counter - d_preamble_index; if (abs(preamble_diff - GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS) == 0) { //try to decode frame LOG(INFO) << "Starting page decoder for Galileo SAT " << this->d_satellite; d_preamble_index = d_sample_counter; //record the preamble sample stamp d_stat = 2; } else { if (preamble_diff > GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS) { d_stat = 0; // start again } } } } else if (d_stat == 2) { if (d_sample_counter == d_preamble_index + GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS) { // NEW Galileo page part is received // 0. fetch the symbols into an array int frame_length = GALILEO_INAV_PAGE_PART_SYMBOLS - d_symbols_per_preamble; double page_part_symbols[frame_length]; for (int i = 0; i < frame_length; i++) { if (corr_value > 0) { page_part_symbols[i] = in[0][i + d_symbols_per_preamble].Prompt_I; // because last symbol of the preamble is just received now! } else { page_part_symbols[i] = -in[0][i + d_symbols_per_preamble].Prompt_I; // because last symbol of the preamble is just received now! } } //call the decoder decode_word(page_part_symbols, frame_length); if (d_nav.flag_CRC_test == true) { d_CRC_error_counter = 0; d_flag_preamble = true; //valid preamble indicator (initialized to false every work()) d_preamble_index = d_sample_counter; //record the preamble sample stamp (t_P) d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs; // - d_preamble_duration_seconds; //record the PRN start sample index associated to the preamble if (!d_flag_frame_sync) { d_flag_frame_sync = true; LOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at " << d_preamble_time_seconds << " [s]"; } } else { d_CRC_error_counter++; d_preamble_index = d_sample_counter; //record the preamble sample stamp if (d_CRC_error_counter > CRC_ERROR_LIMIT) { LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite; d_flag_frame_sync = false; d_stat = 0; } } } } consume_each(1); //one by one // UPDATE GNSS SYNCHRO DATA Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block //1. Copy the current tracking output current_synchro_data = in[0][0]; //2. Add the telemetry decoder information if (this->d_flag_preamble == true and d_nav.flag_TOW_set == true) //update TOW at the preamble instant // JAVI: 30/06/2014 // TOW, in Galileo, is referred to the START of the PAGE PART, that is, THE FIRST SYMBOL OF THAT PAGE, NOT THE PREAMBLE. // thus, no correction should be done. d_TOW_at_Preamble should be renamed to d_TOW_at_page_start. // Since we detected the preamble, then, we are in the last symbol of that preamble, or just at the start of the first page symbol. //flag preamble is true after the all page (even and odd) is received. I/NAV page period is 2 SECONDS { Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0; if(d_nav.flag_TOW_5 == true) //page 5 arrived and decoded, so we are in the odd page (since Tow refers to the even page, we have to add 1 sec) { //std::cout<< "Using TOW_5 for timestamping" << std::endl; d_TOW_at_Preamble = d_nav.TOW_5 + GALILEO_INAV_PAGE_PART_SECONDS; //TOW_5 refers to the even preamble, but when we decode it we are in the odd part, so 1 second later /* 1 sec (GALILEO_INAV_PAGE_PART_SYMBOLS*GALILEO_E1_CODE_PERIOD) is added because * if we have a TOW value it means that we are at the beginning of the last page part * (GNU Radio history keeps in a buffer the rest of the incoming frame part)*/ d_TOW_at_current_symbol = d_TOW_at_Preamble;//-GALILEO_E1_CODE_PERIOD;//+ (double)GALILEO_INAV_PREAMBLE_LENGTH_BITS/(double)GALILEO_TELEMETRY_RATE_BITS_SECOND; d_nav.flag_TOW_5 = false; } else if(d_nav.flag_TOW_6 == true) //page 6 arrived and decoded, so we are in the odd page (since Tow refers to the even page, we have to add 1 sec) { //std::cout<< "Using TOW_6 for timestamping" << std::endl; d_TOW_at_Preamble = d_nav.TOW_6 + GALILEO_INAV_PAGE_PART_SECONDS; //TOW_6 refers to the even preamble, but when we decode it we are in the odd part, so 1 second later /* 1 sec (GALILEO_INAV_PAGE_PART_SYMBOLS*GALILEO_E1_CODE_PERIOD) is added because * if we have a TOW value it means that we are at the beginning of the last page part * (GNU Radio history keeps in a buffer the rest of the incoming frame part)*/ d_TOW_at_current_symbol = d_TOW_at_Preamble;//-GALILEO_E1_CODE_PERIOD;//+ (double)GALILEO_INAV_PREAMBLE_LENGTH_BITS/(double)GALILEO_TELEMETRY_RATE_BITS_SECOND; d_nav.flag_TOW_6 = false; } else { //this page has no timing information d_TOW_at_Preamble = d_TOW_at_Preamble + GALILEO_INAV_PAGE_SECONDS; d_TOW_at_current_symbol = d_TOW_at_current_symbol + GALILEO_E1_CODE_PERIOD;// + GALILEO_INAV_PAGE_PART_SYMBOLS*GALILEO_E1_CODE_PERIOD; } } else //if there is not a new preamble, we define the TOW of the current symbol { d_TOW_at_current_symbol = d_TOW_at_current_symbol + GALILEO_E1_CODE_PERIOD; } //if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true) if(d_nav.flag_GGTO_1 == true and d_nav.flag_GGTO_2 == true and d_nav.flag_GGTO_3 == true and d_nav.flag_GGTO_4 == true) //all GGTO parameters arrived { delta_t = d_nav.A_0G_10 + d_nav.A_1G_10 * (d_TOW_at_current_symbol - d_nav.t_0G_10 + 604800.0 * (fmod((d_nav.WN_0 - d_nav.WN_0G_10), 64))); } if (d_flag_frame_sync == true and d_nav.flag_TOW_set == true) { current_synchro_data.Flag_valid_word = true; } else { current_synchro_data.Flag_valid_word = false; } DLOG(INFO) << "delta_t = " << delta_t; current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.d_TOW_hybrid_at_current_symbol = current_synchro_data.d_TOW_at_current_symbol - delta_t; //delta_t = t_gal - t_gps ----> t_gps = t_gal -delta_t current_synchro_data.Flag_preamble = d_flag_preamble; current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0; current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; if(d_dump == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; tmp_double = d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_synchro_data.Prn_timestamp_ms; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = d_TOW_at_Preamble; d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } //todo: implement averaging d_average_count++; if (d_average_count == d_decimation_output_factor) { d_average_count = 0; //3. Make the output (copy the object contents to the GNURadio reserved memory) *out[0] = current_synchro_data; //std::cout<<"GPS L1 TLM output on CH="<d_channel << " SAMPLE STAMP="<(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } } void galileo_e1b_telemetry_decoder_cc::set_ephemeris_queue(concurrent_queue *ephemeris_queue) { d_ephemeris_queue = ephemeris_queue; } void galileo_e1b_telemetry_decoder_cc::set_iono_queue(concurrent_queue *iono_queue) { d_iono_queue = iono_queue; } void galileo_e1b_telemetry_decoder_cc::set_almanac_queue(concurrent_queue *almanac_queue) { d_almanac_queue = almanac_queue; } void galileo_e1b_telemetry_decoder_cc::set_utc_model_queue(concurrent_queue *utc_model_queue) { d_utc_model_queue = utc_model_queue; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_e5a_telemetry_decoder_cc.cc0000644000175000017500000005474412576764164033326 0ustar carlescarles/*! * \file galileo_e5a_telemetry_decoder_cc.cc * \brief Implementation of a Galileo FNAV message demodulator block * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5a_telemetry_decoder_cc.h" #include #include #include #include #include #include #include #include "control_message_factory.h" //#include "galileo_navigation_message.h" #include "galileo_fnav_message.h" #include "gnss_synchro.h" #include "convolutional.h" //#include //#include "galileo_e1b_telemetry_decoder_cc.h" #define CRC_ERROR_LIMIT 6 using google::LogMessage; galileo_e5a_telemetry_decoder_cc_sptr galileo_e5a_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) { return galileo_e5a_telemetry_decoder_cc_sptr(new galileo_e5a_telemetry_decoder_cc(satellite, if_freq, fs_in, vector_length, queue, dump)); } void galileo_e5a_telemetry_decoder_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { //ninput_items_required[0] = GALILEO_FNAV_SAMPLES_PER_PAGE; // set the required sample history ninput_items_required[0] = GALILEO_FNAV_CODES_PER_PREAMBLE; } void galileo_e5a_telemetry_decoder_cc::viterbi_decoder(double *page_part_symbols, int *page_part_bits) { // int CodeLength = 240; int CodeLength = 488; int DataLength; int nn, KK, mm, max_states; int g_encoder[2]; nn = 2; // Coding rate 1/n KK = 7; // Constraint Length g_encoder[0] = 121; // Polynomial G1 g_encoder[1] = 91; // Polynomial G2 // g_encoder[0] = 171; // Polynomial G1 // g_encoder[1] = 133; // Polynomial G2 mm = KK - 1; max_states = 1 << mm; // 2^mm DataLength = (CodeLength/nn) - mm; //create appropriate transition matrices int *out0, *out1, *state0, *state1; out0 = (int*)calloc( max_states, sizeof(int) ); out1 = (int*)calloc( max_states, sizeof(int) ); state0 = (int*)calloc( max_states, sizeof(int) ); state1 = (int*)calloc( max_states, sizeof(int) ); nsc_transit( out0, state0, 0, g_encoder, KK, nn ); nsc_transit( out1, state1, 1, g_encoder, KK, nn ); Viterbi(page_part_bits, out0, state0, out1, state1, page_part_symbols, KK, nn, DataLength ); //Clean up memory free( out0 ); free( out1 ); free( state0 ); free( state1 ); } void galileo_e5a_telemetry_decoder_cc::deinterleaver(int rows, int cols, double *in, double *out) { for (int r = 0; r < rows; r++) { for(int c = 0; c < cols; c++) { out[c*rows + r] = in[r*cols + c]; } } } void galileo_e5a_telemetry_decoder_cc::decode_word(double *page_symbols,int frame_length) { double page_symbols_deint[frame_length]; // 1. De-interleave galileo_e5a_telemetry_decoder_cc::deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint); // 2. Viterbi decoder // 2.1 Take into account the NOT gate in G2 polynomial (Galileo ICD Figure 13, FEC encoder) // 2.2 Take into account the possible inversion of the polarity due to PLL lock at 180� for (int i = 0; i < frame_length; i++) { if ((i + 1) % 2 == 0) { page_symbols_deint[i] = -page_symbols_deint[i]; } } int page_bits[frame_length/2]; galileo_e5a_telemetry_decoder_cc::viterbi_decoder(page_symbols_deint, page_bits); // 3. Call the Galileo page decoder std::string page_String; for(int i = 0; i < frame_length; i++) { if (page_bits[i] > 0) { page_String.push_back('1'); } else { page_String.push_back('0'); } } // DECODE COMPLETE WORD (even + odd) and TEST CRC d_nav.split_page(page_String); if(d_nav.flag_CRC_test == true) { LOG(INFO) << "Galileo CRC correct on channel " << d_channel << " from satellite " << d_satellite; std::cout << "Galileo CRC correct on channel " << d_channel << " from satellite " << d_satellite << std::endl; } else { std::cout << "Galileo CRC error on channel " << d_channel << " from satellite " << d_satellite << std::endl; LOG(INFO)<< "Galileo CRC error on channel " << d_channel << " from satellite " << d_satellite; } // 4. Push the new navigation data to the queues if (d_nav.have_new_ephemeris() == true) { // get ephemeris object for this SV Galileo_Ephemeris ephemeris = d_nav.get_ephemeris();//notice that the read operation will clear the valid flag //std::cout<<"New Galileo Ephemeris received for SV "<push(ephemeris); } if (d_nav.have_new_iono_and_GST() == true) { Galileo_Iono iono = d_nav.get_iono(); //notice that the read operation will clear the valid flag //std::cout<<"New Galileo IONO model (and UTC) received for SV "<push(iono); } if (d_nav.have_new_utc_model() == true) { Galileo_Utc_Model utc_model = d_nav.get_utc_model(); //notice that the read operation will clear the valid flag //std::cout<<"New Galileo UTC model received for SV "<push(utc_model); } } galileo_e5a_telemetry_decoder_cc::galileo_e5a_telemetry_decoder_cc( Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump) : gr::block("galileo_e5a_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(Gnss_Synchro))) { // initialize internal vars d_queue = queue; d_dump = dump; d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); LOG(INFO) << "GALILEO E5A TELEMETRY PROCESSING: satellite " << d_satellite; d_vector_length = vector_length; //d_samples_per_symbol = ( Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS ) / Galileo_E1_B_SYMBOL_RATE_BPS; d_fs_in = fs_in; // set the preamble //unsigned short int preambles_bits[GALILEO_FNAV_PREAMBLE_LENGTH_BITS] = GALILEO_FNAV_PREAMBLE; for (int i = 0; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) { if (GALILEO_FNAV_PREAMBLE.at(i) == '0') { d_preamble_bits[i] = 1; } else { d_preamble_bits[i] = -1; } } // memcpy((unsigned short int*)this->d_preambles_bits, (unsigned short int*)preambles_bits, GALILEO_FNAV_PREAMBLE_LENGTH_BITS*sizeof(unsigned short int)); // // preamble bits to sampled symbols // d_preambles_symbols = (signed int*)malloc(sizeof(signed int) * GALILEO_FNAV_SAMPLES_PER_PREAMBLE); // int n = 0; // for (int i = 0; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) // { // for (unsigned int j = 0; j < GALILEO_FNAV_SAMPLES_PER_SYMBOL; j++) // { // if (d_preambles_bits[i] == 1) // { // d_preambles_symbols[n] = 1; // } // else // { // d_preambles_symbols[n] = -1; // } // n++; // } // } // d_sample_counter = 0; d_state = 0; d_preamble_lock = false; d_preamble_index = 0; d_preamble_time_seconds = 0; d_flag_frame_sync = false; d_current_symbol = 0; d_prompt_counter = 0; d_symbol_counter = 0; d_TOW_at_Preamble = 0; d_TOW_at_current_symbol = 0; d_CRC_error_counter = 0; d_sign_init = 0; d_flag_preamble = false; d_ephemeris_queue = 0; d_iono_queue = 0; d_utc_model_queue = 0; d_almanac_queue = 0; d_channel = 0; Prn_timestamp_at_preamble_ms = 0; flag_TOW_set = false; } galileo_e5a_telemetry_decoder_cc::~galileo_e5a_telemetry_decoder_cc() { d_dump_file.close(); } int galileo_e5a_telemetry_decoder_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // const Gnss_Synchro **in = (const Gnss_Synchro **) &input_items[0]; //Get the input samples pointer Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; /* Terminology: Prompt: output from tracking Prompt correlator (Prompt samples) * Symbol: encoded navigation bits. 1 symbol = 20 samples in E5a * Bit: decoded navigation bits forming words as described in Galileo ICD * States: 0 Receiving dummy samples. * 1 Preamble not locked * 3 Preamble lock */ switch (d_state) { case 0: { if (in[0][0].Prompt_I != 0) { d_current_symbol += in[0][0].Prompt_I; if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1) { if (d_current_symbol > 0) { d_page_symbols[d_symbol_counter] = 1; } else { d_page_symbols[d_symbol_counter] = -1; } d_current_symbol = 0; d_symbol_counter++; d_prompt_counter = 0; if (d_symbol_counter == GALILEO_FNAV_PREAMBLE_LENGTH_BITS-1) { d_state = 1; } } else { d_prompt_counter++; } } break; } case 1: { d_current_symbol += in[0][0].Prompt_I; if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1) { if (d_current_symbol > 0) { d_page_symbols[d_symbol_counter] = 1; } else { d_page_symbols[d_symbol_counter] = -1; } // d_page_symbols[d_symbol_counter] = d_current_symbol_float/(float)GALILEO_FNAV_CODES_PER_SYMBOL; d_current_symbol = 0; d_symbol_counter++; d_prompt_counter = 0; // **** Attempt Preamble correlation **** bool corr_flag=true; int corr_sign = 0; // sequence can be found inverted // corr_sign = d_preamble_bits[0] * d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; // for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) // { // if ((d_preamble_bits[i] * d_page_symbols[i + d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]) != corr_sign) // { // //exit for if one bit doesn't correlate // corr_flag=false; // break; // } // } // check if the preamble starts positive correlated or negative correlated if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0) // symbols clipping { corr_sign=-d_preamble_bits[0]; } else { corr_sign=d_preamble_bits[0]; } // the preamble is fully correlated only if maintains corr_sign along the whole sequence for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) { if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS + i] < 0 && d_preamble_bits[i]+corr_sign != 0) { //exit for corr_flag=false; break; } if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS + i] > 0 && d_preamble_bits[i]+corr_sign == 0) { //exit for corr_flag=false; break; } } // if (corr_flag==true) // preamble fully correlates { d_preamble_index = d_sample_counter - GALILEO_FNAV_CODES_PER_PREAMBLE;//record the preamble sample stamp. Remember correlation appears at the end of the preamble in this design LOG(INFO) << "Preamble detection for Galileo SAT " << this->d_satellite << std::endl; d_symbol_counter = 0; // d_page_symbols start right after preamble and finish at the end of next preamble. d_state = 2; // preamble lock } if (d_symbol_counter >= GALILEO_FNAV_SYMBOLS_PER_PAGE + GALILEO_FNAV_PREAMBLE_LENGTH_BITS) { d_symbol_counter = GALILEO_FNAV_PREAMBLE_LENGTH_BITS; // prevents overflow } } else { d_prompt_counter++; } break; } case 2: { d_current_symbol += in[0][0].Prompt_I; if (d_prompt_counter == GALILEO_FNAV_CODES_PER_SYMBOL - 1) { if (d_current_symbol > 0) { d_page_symbols[d_symbol_counter] = 1; } else { d_page_symbols[d_symbol_counter] = -1; } // d_page_symbols[d_symbol_counter] = d_current_symbol_float/(float)GALILEO_FNAV_CODES_PER_SYMBOL; d_current_symbol = 0; d_symbol_counter++; d_prompt_counter = 0; // At the right sample stamp, check preamble synchro if (d_sample_counter == d_preamble_index + GALILEO_FNAV_CODES_PER_PAGE + GALILEO_FNAV_CODES_PER_PREAMBLE) { // **** Attempt Preamble correlation **** bool corr_flag = true; int corr_sign = 0; // sequence can be found inverted // corr_sign = d_preamble_bits[0] * d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]; // for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) // { // if ((d_preamble_bits[i] * d_page_symbols[i + d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS]) != corr_sign) // { // //exit for if one bit doesn't correlate // corr_flag=false; // break; // } // } // check if the preamble starts positive correlated or negative correlated if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS] < 0) // symbols clipping { corr_sign=-d_preamble_bits[0]; } else { corr_sign=d_preamble_bits[0]; } // the preamble is fully correlated only if maintains corr_sign along the whole sequence for (int i = 1; i < GALILEO_FNAV_PREAMBLE_LENGTH_BITS; i++) { if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS + i] < 0 && d_preamble_bits[i]+corr_sign != 0) { //exit for corr_flag=false; break; } if (d_page_symbols[d_symbol_counter - GALILEO_FNAV_PREAMBLE_LENGTH_BITS + i] > 0 && d_preamble_bits[i]+corr_sign == 0) { //exit for corr_flag=false; break; } } // if (corr_flag==true) // NEW PREAMBLE RECEIVED. DECODE PAGE { d_preamble_index = d_sample_counter - GALILEO_FNAV_CODES_PER_PREAMBLE;//record the preamble sample stamp // DECODE WORD decode_word(d_page_symbols, GALILEO_FNAV_SYMBOLS_PER_PAGE - GALILEO_FNAV_PREAMBLE_LENGTH_BITS); // CHECK CRC if (d_nav.flag_CRC_test == true) { d_CRC_error_counter = 0; d_flag_preamble = true; //valid preamble indicator (initialized to false every work()) d_preamble_time_seconds = in[0][0].Tracking_timestamp_secs - (static_cast(GALILEO_FNAV_CODES_PER_PAGE+GALILEO_FNAV_CODES_PER_PREAMBLE) * GALILEO_E5a_CODE_PERIOD); //record the PRN start sample index associated to the preamble start. if (!d_flag_frame_sync) { d_flag_frame_sync = true; LOG(INFO) <<" Frame sync SAT " << this->d_satellite << " with preamble start at " << d_preamble_time_seconds << " [s]"; } d_symbol_counter = 0; // d_page_symbols start right after preamble and finish at the end of next preamble. } else { d_CRC_error_counter++; if (d_CRC_error_counter > CRC_ERROR_LIMIT) { LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite; d_state = 1; d_symbol_counter = GALILEO_FNAV_PREAMBLE_LENGTH_BITS; // prevents overflow d_flag_frame_sync = false; } else { d_symbol_counter = 0; // d_page_symbols start right after preamble and finish at the end of next preamble. } } } } } else { d_prompt_counter++; } break; } } consume_each(1); // UPDATE GNSS SYNCHRO DATA Gnss_Synchro current_synchro_data; //structure to save the synchronization information and send the output object to the next block //1. Copy the current tracking output current_synchro_data = in[0][0]; //2. Add the telemetry decoder information if (this->d_flag_preamble == true and d_nav.flag_TOW_set == true) //update TOW at the preamble instant //We expect a preamble each 10 seconds (FNAV page period) { Prn_timestamp_at_preamble_ms = d_preamble_time_seconds * 1000; //Prn_timestamp_at_preamble_ms = in[0][0].Tracking_timestamp_secs * 1000.0; if (d_nav.flag_TOW_1 == true) { d_TOW_at_Preamble = d_nav.FNAV_TOW_1; d_TOW_at_current_symbol = d_TOW_at_Preamble + (static_cast(GALILEO_FNAV_CODES_PER_PAGE+GALILEO_FNAV_CODES_PER_PREAMBLE) * GALILEO_E5a_CODE_PERIOD); d_nav.flag_TOW_1 = false; } if (d_nav.flag_TOW_2 == true) { d_TOW_at_Preamble = d_nav.FNAV_TOW_2; d_TOW_at_current_symbol = d_TOW_at_Preamble + (static_cast(GALILEO_FNAV_CODES_PER_PAGE+GALILEO_FNAV_CODES_PER_PREAMBLE) * GALILEO_E5a_CODE_PERIOD); d_nav.flag_TOW_2 = false; } if (d_nav.flag_TOW_3 == true) { d_TOW_at_Preamble = d_nav.FNAV_TOW_3; d_TOW_at_current_symbol = d_TOW_at_Preamble + (static_cast(GALILEO_FNAV_CODES_PER_PAGE+GALILEO_FNAV_CODES_PER_PREAMBLE) * GALILEO_E5a_CODE_PERIOD); d_nav.flag_TOW_3 = false; } if (d_nav.flag_TOW_4 == true) { d_TOW_at_Preamble = d_nav.FNAV_TOW_4; d_TOW_at_current_symbol = d_TOW_at_Preamble + (static_cast(GALILEO_FNAV_CODES_PER_PAGE+GALILEO_FNAV_CODES_PER_PREAMBLE) * GALILEO_E5a_CODE_PERIOD); d_nav.flag_TOW_4 = false; } else { //this page has no timming information d_TOW_at_Preamble = d_TOW_at_Preamble + GALILEO_FNAV_SECONDS_PER_PAGE; d_TOW_at_current_symbol = d_TOW_at_current_symbol + GALILEO_E5a_CODE_PERIOD; } } else //if there is not a new preamble, we define the TOW of the current symbol { d_TOW_at_current_symbol = d_TOW_at_current_symbol + GALILEO_E5a_CODE_PERIOD; } //if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true) if (d_flag_frame_sync == true and d_nav.flag_TOW_set == true) { current_synchro_data.Flag_valid_word = true; } else { current_synchro_data.Flag_valid_word = false; } current_synchro_data.d_TOW = d_TOW_at_Preamble; current_synchro_data.d_TOW_at_current_symbol = d_TOW_at_current_symbol; current_synchro_data.Flag_preamble = d_flag_preamble; current_synchro_data.Prn_timestamp_ms = in[0][0].Tracking_timestamp_secs * 1000.0; current_synchro_data.Prn_timestamp_at_preamble_ms = Prn_timestamp_at_preamble_ms; if(d_dump == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; tmp_double = d_TOW_at_current_symbol; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = current_synchro_data.Prn_timestamp_ms; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = d_TOW_at_Preamble; d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } d_sample_counter++; //count for the processed samples //3. Make the output (copy the object contents to the GNURadio reserved memory) *out[0] = current_synchro_data; return 1; } void galileo_e5a_telemetry_decoder_cc::set_satellite(Gnss_Satellite satellite) { d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); DLOG(INFO) << "Setting decoder Finite State Machine to satellite " << d_satellite; DLOG(INFO) << "Navigation Satellite set to " << d_satellite; } void galileo_e5a_telemetry_decoder_cc::set_channel(int channel) { d_channel = channel; LOG(INFO) << "Navigation channel set to " << channel; // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_filename = "telemetry"; d_dump_filename.append(boost::lexical_cast(d_channel)); d_dump_filename.append(".dat"); d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str(); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what(); } } } } void galileo_e5a_telemetry_decoder_cc::set_ephemeris_queue(concurrent_queue *ephemeris_queue) { d_ephemeris_queue = ephemeris_queue; } void galileo_e5a_telemetry_decoder_cc::set_iono_queue(concurrent_queue *iono_queue) { d_iono_queue = iono_queue; } void galileo_e5a_telemetry_decoder_cc::set_almanac_queue(concurrent_queue *almanac_queue) { d_almanac_queue = almanac_queue; } void galileo_e5a_telemetry_decoder_cc::set_utc_model_queue(concurrent_queue *utc_model_queue) { d_utc_model_queue = utc_model_queue; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/gnuradio_blocks/sbas_l1_telemetry_decoder_cc.h0000644000175000017500000001467712576764164032347 0ustar carlescarles/*! * \file sbas_l1_telemetry_decoder_cc.h * \brief Interface of a SBAS telemetry data decoder block * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_CC_H #define GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_CC_H #include // for copy #include #include #include #include // for pair #include #include #include #include #include "gnss_satellite.h" #include "viterbi_decoder.h" #include "sbas_telemetry_data.h" class sbas_l1_telemetry_decoder_cc; typedef boost::shared_ptr sbas_l1_telemetry_decoder_cc_sptr; sbas_l1_telemetry_decoder_cc_sptr sbas_l1_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); /*! * \brief This class implements a block that decodes the SBAS integrity and corrections data defined in RTCA MOPS DO-229 * */ class sbas_l1_telemetry_decoder_cc : public gr::block { public: ~sbas_l1_telemetry_decoder_cc(); void set_satellite(Gnss_Satellite satellite); //!< Set satellite PRN void set_channel(int channel); //!< Set receiver's channel // queues to communicate broadcasted SBAS data to other blocks of GNSS-SDR void set_raw_msg_queue(concurrent_queue *raw_msg_queue); //!< Set raw msg queue void set_iono_queue(concurrent_queue *iono_queue); //!< Set iono queue void set_sat_corr_queue(concurrent_queue *sat_corr_queue); //!< Set sat correction queue void set_ephemeris_queue(concurrent_queue *ephemeris_queue); //!< Set SBAS ephemeis queue /*! * \brief This is where all signal processing takes place */ int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); /*! * \brief Function which tells the scheduler how many input items * are required to produce noutput_items output items. */ void forecast (int noutput_items, gr_vector_int &ninput_items_required); private: friend sbas_l1_telemetry_decoder_cc_sptr sbas_l1_make_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in,unsigned int vector_length, boost::shared_ptr queue, bool dump); sbas_l1_telemetry_decoder_cc(Gnss_Satellite satellite, long if_freq, long fs_in, unsigned int vector_length, boost::shared_ptr queue, bool dump); void viterbi_decoder(double *page_part_symbols, int *page_part_bits); void align_samples(); static const int d_samples_per_symbol = 2; static const int d_symbols_per_bit = 2; static const int d_block_size_in_bits = 30; long d_fs_in; bool d_dump; Gnss_Satellite d_satellite; int d_channel; std::string d_dump_filename; std::ofstream d_dump_file; size_t d_block_size; //!< number of samples which are processed during one invocation of the algorithms std::vector d_sample_buf; //!< input buffer holding the samples to be processed in one block typedef std::pair> msg_candiate_int_t; typedef std::pair> msg_candiate_char_t; // helper class for sample alignment class sample_aligner { public: sample_aligner(); ~sample_aligner(); void reset(); /* * samples length must be a multiple of two * for block operation */ bool get_symbols(const std::vector samples, std::vector &symbols); private: int d_n_smpls_in_history ; double d_iir_par; double d_corr_paired; double d_corr_shifted; bool d_aligned; double d_past_sample; } d_sample_aligner; // helper class for symbol alignment and Viterbi decoding class symbol_aligner_and_decoder { public: symbol_aligner_and_decoder(); ~symbol_aligner_and_decoder(); void reset(); bool get_bits(const std::vector symbols, std::vector &bits); private: int d_KK; Viterbi_Decoder * d_vd1; Viterbi_Decoder * d_vd2; double d_past_symbol; } d_symbol_aligner_and_decoder; // helper class for detecting the preamble and collect the corresponding message candidates class frame_detector { public: void reset(); void get_frame_candidates(const std::vector bits, std::vector>> &msg_candidates); private: std::deque d_buffer; } d_frame_detector; // helper class for checking the CRC of the message candidates class crc_verifier { public: void reset(); void get_valid_frames(const std::vector msg_candidates, std::vector &valid_msgs); private: typedef boost::crc_optimal<24, 0x1864CFBu, 0x0, 0x0, false, false> crc_24_q_type; crc_24_q_type d_checksum_agent; void zerropad_front_and_convert_to_bytes(const std::vector msg_candidate, std::vector &bytes); void zerropad_back_and_convert_to_bytes(const std::vector msg_candidate, std::vector &bytes); } d_crc_verifier; Sbas_Telemetry_Data sbas_telemetry_data; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/CMakeLists.txt0000644000175000017500000000146112576764164024004 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) add_subdirectory(libs)gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/0000755000175000017500000000000012576764164022173 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/viterbi_decoder.cc0000644000175000017500000004630012576764164025636 0ustar carlescarles/*! * \file viterbi_decoder.cc * \brief Implementation of a Viterbi decoder class based on the Iterative Solutions * Coded Modulation Library by Matthew C. Valenti * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "viterbi_decoder.h" #include #include // logging #define EVENT 2 // logs important events which don't occur every block #define FLOW 3 // logs the function calls of block processing functions #define BLOCK 4 // once per block #define SAMPLE 5 // about one log entry per sample #define LMORE 6 // many entries per sample / very specific stuff #define MAXLOG 1e7 /* Define infinity */ Viterbi_Decoder::Viterbi_Decoder(const int g_encoder[], const int KK, const int nn) { d_nn = nn; // Coding rate 1/n d_KK = KK; // Constraint Length // derived code properties d_mm = d_KK - 1; d_states = 1 << d_mm; /* 2^mm */ d_number_symbols = 1 << d_nn; /* 2^nn */ /* create appropriate transition matrices (trellis) */ d_out0 = new int[d_states]; d_out1 = new int[d_states]; d_state0 = new int[d_states]; d_state1 = new int[d_states]; nsc_transit(d_out0, d_state0, 0, g_encoder, d_KK, d_nn); nsc_transit(d_out1, d_state1, 1, g_encoder, d_KK, d_nn); // initialise trellis state d_trellis_state_is_initialised = false; Viterbi_Decoder::init_trellis_state(); } Viterbi_Decoder::~Viterbi_Decoder() { // trellis definition delete[] d_out0; delete[] d_out1; delete[] d_state0; delete[] d_state1; // init trellis state delete[] d_pm_t; delete[] d_rec_array; delete[] d_metric_c; } void Viterbi_Decoder::reset() { init_trellis_state(); } /* Function decode_block() Description: Uses the Viterbi algorithm to perform hard-decision decoding of a convolutional code. Input parameters: r[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). LL The number of data bits to be decoded (doesn't include the mm zero-tail-bits) Output parameters: output_u_int[] Hard decisions on the data bits (without the mm zero-tail-bits) */ float Viterbi_Decoder::decode_block(const double input_c[], int output_u_int[], const int LL) { int state; int decoding_length_mismatch; VLOG(FLOW) << "decode_block(): LL=" << LL; // init init_trellis_state(); // do add compare select do_acs(input_c, LL+d_mm); // tail, no need to output -> traceback, but don't decode state = do_traceback(d_mm); // traceback and decode decoding_length_mismatch = do_tb_and_decode(d_mm, LL, state, output_u_int, d_indicator_metric); VLOG(FLOW) << "decoding length mismatch: " << decoding_length_mismatch; return d_indicator_metric; } float Viterbi_Decoder::decode_continuous(const double sym[], const int traceback_depth, int bits[], const int nbits_requested, int &nbits_decoded) { int state; int decoding_length_mismatch; VLOG(FLOW) << "decode_continuous(): nbits_requested=" << nbits_requested; // do add compare select do_acs(sym, nbits_requested); // the ML sequence in the newest part of the trellis can not be decoded // since it depends on the future values -> traceback, but don't decode state = do_traceback(traceback_depth); // traceback and decode decoding_length_mismatch = do_tb_and_decode(traceback_depth, nbits_requested, state, bits, d_indicator_metric); nbits_decoded = nbits_requested + decoding_length_mismatch; VLOG(FLOW) << "decoding length mismatch (continuous decoding): " << decoding_length_mismatch; return d_indicator_metric; } void Viterbi_Decoder::init_trellis_state() { int state; // if trellis state has been initialised, free old state memory if(d_trellis_state_is_initialised) { // init trellis state delete[] d_pm_t; delete[] d_rec_array; delete[] d_metric_c; } // reserve new trellis state memory d_pm_t = new float[d_states]; d_trellis_paths = std::deque(); d_rec_array = new float[d_nn]; d_metric_c = new float[d_number_symbols]; d_trellis_state_is_initialised = true; /* initialize trellis */ for (state = 0; state < d_states; state++) { d_pm_t[state] = -MAXLOG; //d_pm_t_next[state] = -MAXLOG; } d_pm_t[0] = 0; /* start in all-zeros state */ d_indicator_metric = 0; } int Viterbi_Decoder::do_acs(const double sym[], int nbits) { int t, i, state_at_t; float metric; float max_val; float * pm_t_next = new float[d_states]; /* t: * - state: state at t * - d_prev_section[state_at_t]: path metric at t for state state_at_t * - d_out0[state_at_t]: sent symbols for a data bit 0 if state is state_at_t at time t * */ for (state_at_t = 0; state_at_t < d_states; state_at_t++) { pm_t_next[state_at_t] = -MAXLOG; } /* go through trellis */ for (t = 0; t < nbits; t++) { /* Temporarily store the received symbols current decoding step */ for (i = 0; i < d_nn; i++) d_rec_array[i] = (float) sym[d_nn * t + i]; /* precompute all possible branch metrics */ for (i = 0; i < d_number_symbols; i++) { d_metric_c[i] = gamma(d_rec_array, i, d_nn); VLOG(LMORE) << "metric for (tx_sym=" << i << "|ry_sym=(" << d_rec_array[0] << ", " << d_rec_array[1] << ") = " << d_metric_c[i]; } // find the survivor branches leading the trellis states at t+1 Prev next_trellis_states(d_states, t+1); /* step through all states */ for (state_at_t = 0; state_at_t < d_states; state_at_t++) { int next_state_if_0 = d_state0[state_at_t]; int next_state_if_1 = d_state1[state_at_t]; /* hypothesis: info bit is a zero */ int bm_0 = d_metric_c[d_out0[state_at_t]]; metric = d_pm_t[state_at_t] + bm_0; // path metric + zerobranch metric /* store new metric if more than metric in storage */ if (metric > pm_t_next[next_state_if_0]) { pm_t_next[next_state_if_0] = metric; next_trellis_states.set_current_state_as_ancestor_of_next_state(next_state_if_0, state_at_t); next_trellis_states.set_decoded_bit_for_next_state(next_state_if_0, 0); next_trellis_states.set_survivor_branch_metric_of_next_state(next_state_if_0, bm_0); } /* hypothesis: info bit is a one */ int bm_1 = d_metric_c[d_out1[state_at_t]]; metric = d_pm_t[state_at_t] + bm_1; // path metric + onebranch metric /* store new metric if more than metric in storage */ if (metric > pm_t_next[next_state_if_1]) { pm_t_next[next_state_if_1] = metric; next_trellis_states.set_current_state_as_ancestor_of_next_state(next_state_if_1, state_at_t); next_trellis_states.set_decoded_bit_for_next_state(next_state_if_1, 1); next_trellis_states.set_survivor_branch_metric_of_next_state(next_state_if_1, bm_1); } } d_trellis_paths.push_front(next_trellis_states); /* normalize -> afterwards, the largest metric value is always 0 */ //max_val = 0; max_val = -MAXLOG; for (state_at_t = 0; state_at_t < d_states; state_at_t++) { if (pm_t_next[state_at_t] > max_val) { max_val = pm_t_next[state_at_t]; } } VLOG(LMORE) << "max_val at t=" << t << ": " << max_val; for (state_at_t = 0; state_at_t < d_states; state_at_t++) { d_pm_t[state_at_t] = pm_t_next[state_at_t] - max_val; pm_t_next[state_at_t] = -MAXLOG; } } delete[] pm_t_next; return t; } int Viterbi_Decoder::do_traceback(size_t traceback_length) { // traceback_length is in bits int state; std::deque::iterator it; VLOG(FLOW) << "do_traceback(): traceback_length=" << traceback_length << std::endl; if (d_trellis_paths.size() < traceback_length) { traceback_length = d_trellis_paths.size(); } state = 0; // maybe start not at state 0, but at state with best metric for (it = d_trellis_paths.begin(); it < d_trellis_paths.begin() + traceback_length; ++it) { state = it->get_anchestor_state_of_current_state(state); } return state; } int Viterbi_Decoder::do_tb_and_decode(int traceback_length, int requested_decoding_length, int state, int output_u_int[], float& indicator_metric) { int n_of_branches_for_indicator_metric = 500; int t_out; std::deque::iterator it; int decoding_length_mismatch; int overstep_length; int n_im = 0; VLOG(FLOW) << "do_tb_and_decode(): requested_decoding_length=" << requested_decoding_length; // decode only decode_length bits -> overstep newer bits which are too much decoding_length_mismatch = d_trellis_paths.size() - (traceback_length + requested_decoding_length); VLOG(BLOCK) << "decoding_length_mismatch=" << decoding_length_mismatch; overstep_length = decoding_length_mismatch >= 0 ? decoding_length_mismatch : 0; VLOG(BLOCK) << "overstep_length=" << overstep_length; for (it = d_trellis_paths.begin() + traceback_length; it < d_trellis_paths.begin() + traceback_length + overstep_length; ++it) { state = it->get_anchestor_state_of_current_state(state); } t_out = d_trellis_paths.end() - (d_trellis_paths.begin() + traceback_length + overstep_length) - 1;//requested_decoding_length-1; indicator_metric = 0; for (it = d_trellis_paths.begin() + traceback_length + overstep_length; it < d_trellis_paths.end(); ++it) { if(it - (d_trellis_paths.begin() + traceback_length + overstep_length) < n_of_branches_for_indicator_metric) { n_im++; indicator_metric += it->get_metric_of_current_state(state); VLOG(SAMPLE) << "@t=" << it->get_t() << " b=" << it->get_bit_of_current_state(state) << " sm=" << indicator_metric << " d=" << it->get_metric_of_current_state(state); } output_u_int[t_out] = it->get_bit_of_current_state(state); state = it->get_anchestor_state_of_current_state(state); t_out--; } if(n_im > 0) { indicator_metric /= n_im; } VLOG(BLOCK) << "indicator metric: " << indicator_metric; // remove old states if (d_trellis_paths.begin() + traceback_length + overstep_length <= d_trellis_paths.end()) { d_trellis_paths.erase(d_trellis_paths.begin() + traceback_length+overstep_length, d_trellis_paths.end()); } return decoding_length_mismatch; } /* function Gamma() Description: Computes the branch metric used for decoding. Output parameters: (returned float) The metric between the hypothetical symbol and the recevieved vector Input parameters: rec_array The received vector, of length nn symbol The hypothetical symbol nn The length of the received vector This function is used by siso() */ float Viterbi_Decoder::gamma(float rec_array[], int symbol, int nn) { float rm = 0; int i; int mask; float txsym; mask = 1; for (i = 0; i < nn; i++) { //if (symbol & mask) rm += rec_array[nn - i - 1]; txsym = symbol & mask ? 1 : -1; rm += txsym * rec_array[nn - i - 1]; mask = mask << 1; } //rm = rm > 50 ? rm : -1000; return (rm); } /* function that creates the transit and output vectors */ void Viterbi_Decoder::nsc_transit(int output_p[], int trans_p[], int input, const int g[], int KK, int nn) { int nextstate[1]; int state, states; states = (1 << (KK - 1)); /* The number of states: 2^mm */ /* Determine the output and next state for each possible starting state */ for (state = 0; state < states; state++) { output_p[state] = nsc_enc_bit(nextstate, input, state, g, KK, nn); trans_p[state] = nextstate[0]; } return; } /* Function nsc_enc_bit() Description: Convolutionally encodes a single bit using a rate 1/n encoder. Takes in one input bit at a time, and produces a n-bit output. Input parameters: input The input data bit (i.e. a 0 or 1). state_in The starting state of the encoder (an int from 0 to 2^m-1). g[] An n-element vector containing the code generators in binary form. KK The constraint length of the convolutional code. nn number of symbols bits per input bits (rate 1/nn) Output parameters: output_p[] An n-element vector containing the encoded bits. state_out_p[] An integer containing the final state of the encoder (i.e. the state after encoding this bit) This function is used by rsc_encode(), nsc_transit(), rsc_transit(), and nsc_transit() */ int Viterbi_Decoder::nsc_enc_bit(int state_out_p[], int input, int state_in, const int g[], int KK, int nn) { /* declare variables */ int state, i; int out = 0; /* create a word made up of state and new input */ state = (input << (KK - 1)) ^ state_in; /* AND the word with the generators */ for (i = 0; i < nn; i++) { /* update output symbol */ out = (out << 1) + parity_counter(state & g[i], KK); } /* shift the state to make the new state */ state_out_p[0] = state >> 1; return (out); } /* function parity_counter() Description: Determines if a symbol has odd (1) or even (0) parity Output parameters: (returned int): The symbol's parity = 1 for odd and 0 for even Input parameters: symbol: The integer-valued symbol length: The highest bit position in the symbol This function is used by nsc_enc_bit(), rsc_enc_bit(), and rsc_tail() */ int Viterbi_Decoder::parity_counter(int symbol, int length) { int counter; int temp_parity = 0; for (counter = 0; counter < length; counter++) { temp_parity = temp_parity ^ (symbol & 1); symbol = symbol >> 1; } return (temp_parity); } // prev helper class Viterbi_Decoder::Prev::Prev(int states, int t) { this->t = t; num_states=states; state = new int[states]; bit = new int[states]; metric = new float[states]; refcount = new int; *refcount = 1; memset(state,0,sizeof(int)*num_states); memset(bit,0,sizeof(int)*num_states); memset(metric,0,sizeof(float)*num_states); } // copy constructor Viterbi_Decoder::Prev::Prev(const Prev& prev) { refcount = prev.refcount; (*refcount)++; t = prev.t; state = prev.state; num_states=prev.num_states; bit = prev.bit; metric = prev.metric; VLOG(LMORE) << "Prev(" << "?" << ", " << t << ")" << " copy, new refcount = " << *refcount; } // assignment constructor Viterbi_Decoder::Prev& Viterbi_Decoder::Prev::operator=(const Prev& other) { // check for self-assignment if(&other == this) { return *this; } // handle old resources if(*refcount == 1) { // if they are not used anymore -> unallocate them delete[] state; delete[] bit; delete[] metric; delete refcount; } else { // this object is not anymore using them (*refcount)--; } // increase ref counter for this resource set refcount = other.refcount; (*refcount)++; // take over resources t = other.t; state = other.state; bit = other.bit; metric = other.metric; VLOG(LMORE) << "Prev(" << "?" << ", " << t << ")" << " assignment, new refcount = " << *refcount; return *this; } Viterbi_Decoder::Prev::~Prev() { if (*refcount == 1) { delete[] state; delete[] bit; delete[] metric; delete refcount; //std::cout << "~Prev(" << "?" << ", " << t << ")" << " destructor with delete" << std::endl; } else { (*refcount)--; VLOG(LMORE) << "~Prev(" << "?" << ", " << t << ")" << " destructor after copy, new refcount = " << *refcount; } } int Viterbi_Decoder::Prev::get_anchestor_state_of_current_state(int current_state) { //std::cout << "get prev state: for state " << current_state << " at time " << t << ", the prev state at time " << t-1 << " is " << state[current_state] << std::endl; if (num_states>current_state) { return state[current_state]; }else{ //std::cout<<"alarm "<<"num_states="<current_state) { return bit[current_state]; }else{ return 0; } } float Viterbi_Decoder::Prev::get_metric_of_current_state(int current_state) { if (num_states>current_state) { return metric[current_state]; }else{ return 0; } } int Viterbi_Decoder::Prev::get_t() { return t; } void Viterbi_Decoder::Prev::set_current_state_as_ancestor_of_next_state(int next_state, int current_state) { if (num_states>next_state) { state[next_state] = current_state; } } void Viterbi_Decoder::Prev::set_decoded_bit_for_next_state(int next_state, int bit) { if (num_states>next_state) { this->bit[next_state] = bit; } } void Viterbi_Decoder::Prev::set_survivor_branch_metric_of_next_state(int next_state, float metric) { if (num_states>next_state) { this->metric[next_state] = metric; } } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/gps_l1_ca_subframe_fsm.cc0000644000175000017500000002203512576764164027065 0ustar carlescarles/*! * \file gps_l1_ca_subframe_fsm.cc * \brief Implementation of a GPS NAV message word-to-subframe decoder state machine * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_subframe_fsm.h" #include #include //************ GPS WORD TO SUBFRAME DECODER STATE MACHINE ********** struct Ev_gps_word_valid : sc::event {}; struct Ev_gps_word_invalid : sc::event{}; struct Ev_gps_word_preamble : sc::event{}; struct gps_subframe_fsm_S0: public sc::state { public: // sc::transition(event,next_status) typedef sc::transition< Ev_gps_word_preamble, gps_subframe_fsm_S1 > reactions; gps_subframe_fsm_S0(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S0 "< { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S2 > > reactions; gps_subframe_fsm_S1(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S1 "< { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S3 > > reactions; gps_subframe_fsm_S2(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S2 "<().gps_word_to_subframe(0); } }; struct gps_subframe_fsm_S3: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S4 > > reactions; gps_subframe_fsm_S3(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S3 "<().gps_word_to_subframe(1); } }; struct gps_subframe_fsm_S4: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S5 > > reactions; gps_subframe_fsm_S4(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S4 "<().gps_word_to_subframe(2); } }; struct gps_subframe_fsm_S5: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S6 > > reactions; gps_subframe_fsm_S5(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S5 "<().gps_word_to_subframe(3); } }; struct gps_subframe_fsm_S6: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S7 > > reactions; gps_subframe_fsm_S6(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S6 "<().gps_word_to_subframe(4); } }; struct gps_subframe_fsm_S7: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S8 > > reactions; gps_subframe_fsm_S7(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S7 "<().gps_word_to_subframe(5); } }; struct gps_subframe_fsm_S8: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S9 > > reactions; gps_subframe_fsm_S8(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S8 "<().gps_word_to_subframe(6); } }; struct gps_subframe_fsm_S9: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S10 > > reactions; gps_subframe_fsm_S9(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S9 "<().gps_word_to_subframe(7); } }; struct gps_subframe_fsm_S10: public sc::state { public: typedef mpl::list, sc::transition< Ev_gps_word_valid, gps_subframe_fsm_S11 > > reactions; gps_subframe_fsm_S10(my_context ctx): my_base( ctx ) { //std::cout<<"Enter S10 "<().gps_word_to_subframe(8); } }; struct gps_subframe_fsm_S11: public sc::state { public: typedef sc::transition< Ev_gps_word_preamble, gps_subframe_fsm_S1 > reactions; gps_subframe_fsm_S11(my_context ctx): my_base( ctx ) { //std::cout<<"Completed GPS Subframe!"<().gps_word_to_subframe(9); context< GpsL1CaSubframeFsm >().gps_subframe_to_nav_msg(); //decode the subframe // DECODE SUBFRAME //std::cout<<"Enter S11"<d_subframe); //decode the subframe std::cout << "NAV Message: received subframe " << subframe_ID << " from satellite " << Gnss_Satellite(std::string("GPS"), i_satellite_PRN) << std::endl; d_nav.i_satellite_PRN = i_satellite_PRN; d_nav.i_channel_ID = i_channel_ID; d_nav.d_subframe_timestamp_ms = this->d_preamble_time_ms; switch (subframe_ID) { case 3: //we have a new set of ephemeris data for the current SV if (d_nav.satellite_validation() == true) { // get ephemeris object for this SV (mandatory) Gps_Ephemeris ephemeris = d_nav.get_ephemeris(); d_ephemeris_queue->push(ephemeris); } break; case 4: // Possible IONOSPHERE and UTC model update (page 18) if (d_nav.flag_iono_valid == true) { Gps_Iono iono = d_nav.get_iono(); //notice that the read operation will clear the valid flag d_iono_queue->push(iono); } if (d_nav.flag_utc_model_valid == true) { Gps_Utc_Model utc_model = d_nav.get_utc_model(); //notice that the read operation will clear the valid flag d_utc_model_queue->push(utc_model); } break; case 5: // get almanac (if available) //TODO: implement almanac reader in navigation_message break; default: break; } } void GpsL1CaSubframeFsm::Event_gps_word_valid() { this->process_event(Ev_gps_word_valid()); } void GpsL1CaSubframeFsm::Event_gps_word_invalid() { this->process_event(Ev_gps_word_invalid()); } void GpsL1CaSubframeFsm::Event_gps_word_preamble() { this->process_event(Ev_gps_word_preamble()); } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/CMakeLists.txt0000644000175000017500000000265412576764164024742 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(TELEMETRY_DECODER_LIB_SOURCES gps_l1_ca_subframe_fsm.cc viterbi_decoder.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/adapters ${Boost_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ) file(GLOB TELEMETRY_DECODER_LIB_HEADERS "*.h") add_library(telemetry_decoder_lib ${TELEMETRY_DECODER_LIB_SOURCES} ${TELEMETRY_DECODER_LIB_HEADERS}) source_group(Headers FILES ${TELEMETRY_DECODER_LIB_HEADERS}) target_link_libraries(telemetry_decoder_lib gnss_system_parameters)gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/convolutional.h0000644000175000017500000005333712576764164025253 0ustar carlescarles/*! * \file convolutional.h * \brief General functions used to implement convolutional encoding. * \author Matthew C. Valenti * * ------------------------------------------------------------------------- * * Copyright (C) 2006-2008 Matthew C. Valenti * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This file is a derived work of the original file, which had this note: * * Last updated on May 22, 2008 * * The functions in this file are part of the Iterative Solutions * Coded Modulation Library. The Iterative Solutions Coded Modulation * Library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, * or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //#ifndef GNSS_SDR_CONVOLUTIONAL_H_ //#define GNSS_SDR_CONVOLUTIONAL_H_ /* define constants used throughout the library */ #define MAXLOG 1e7 /* Define infinity */ /*! * \brief Converts an integer symbol into a vector of bits * * \param[out] binvec_p The binary vector * \param[in] symbol The integer-valued symbol * \param[in] length The length of the binary vector * * This function is used by conv_encode() */ static void itob(int binvec_p[], int symbol, int length) { int counter; /* Go through each bit in the vector */ for (counter = 0; counter < length; counter++) { binvec_p[length - counter - 1] = (symbol & 1); symbol = symbol >> 1; } return; } /*! * \brief Determines if a symbol has odd (1) or even (0) parity * Output parameters: * \return (returned int): The symbol's parity = 1 for odd and 0 for even * * \param[in] symbol The integer-valued symbol * \param[in] length The highest bit position in the symbol * * This function is used by nsc_enc_bit(), rsc_enc_bit(), and rsc_tail() */ static int parity_counter(int symbol, int length) { int counter; int temp_parity = 0; for (counter = 0; counter < length; counter++) { temp_parity = temp_parity^(symbol & 1); symbol = symbol >> 1; } return(temp_parity); } /*! * \brief Convolutionally encodes a single bit using a rate 1/n encoder. * Takes in one input bit at a time, and produces a n-bit output. * * \param[in] input The input data bit (i.e. a 0 or 1). * \param[in] state_in The starting state of the encoder (an int from 0 to 2^m-1). * \param[in] g[] An n-element vector containing the code generators in binary form. * \param[in] KK The constraint length of the convolutional code. * \param[out] output_p[] An n-element vector containing the encoded bits. * \param[out] state_out_p[] An integer containing the final state of the encoder * (i.e. the state after encoding this bit) * * This function is used by rsc_encode(), nsc_transit(), rsc_transit(), and nsc_transit() */ static int nsc_enc_bit(int state_out_p[], int input, int state_in, int g[], int KK, int nn) { /* declare variables */ int state, i; int out_ = 0; /* create a word made up of state and new input */ state = (input << (KK - 1))^state_in; /* AND the word with the generators */ for (i = 0; i < nn; i++) { /* update output symbol */ out_ = (out_ << 1) + parity_counter(state & g[i], KK); } /* shift the state to make the new state */ state_out_p[0] = state >> 1; return(out_); } /*! * \brief like nsc_enc_bit() but for a RSC code */ static int rsc_enc_bit(int state_out_p[], int input, int state_in, int g[], int KK, int nn) { /* declare variables */ int state, i, out_, a_k; /* systematic output */ out_ = input; /* determine feedback bit */ a_k = input^parity_counter(g[0]&state_in, KK); /* create a word made up of state and feedback bit */ state = (a_k << (KK - 1))^state_in; /* AND the word with the generators */ for (i = 1; i < nn; i++) { /* update output symbol */ out_ = (out_ << 1) + parity_counter(state & g[i], KK); } /* shift the state to make the new state */ state_out_p[0] = state >> 1; return(out_); } /*! * \brief Function that creates the transit and output vectors */ static void nsc_transit(int output_p[], int trans_p[], int input, int g[], int KK, int nn) { int nextstate[1]; int state, states; states = (1 << (KK - 1)); /* The number of states: 2^mm */ /* Determine the output and next state for each possible starting state */ for(state = 0; state < states; state++) { output_p[state] = nsc_enc_bit(nextstate, input, state, g, KK, nn); trans_p[state] = nextstate[0]; } return; } /*! * \brief Calculates the "transition matrix" for the trellis. * This information tells the decoder what the next state and output bits * will be given the current state and input bit. * * \param[in] input Either 0 or 1 --- the input data bit. * \param[in] g[] A two element vector containing the code generators. * \param[in] KK The constraint length of the convolutional code. * \param[out] output_p[] A vector of length max_states = 2^(KK-1) containing * the output symbols. * \param[out] trans_p[] A vector of length max_states that tells the decoder * what the next state will be given the input and current state. * * This function is used by turbo_decode() */ static void rsc_transit(int output_p[], int trans_p[], int input, int g[], int KK, int nn ) { int nextstate[1]; int state, states; states = 1 << (KK - 1); // The number of states: 2^mm // Determine the output and next state for each possible starting state for(state = 0; state < states; state++) { output_p[state] = rsc_enc_bit( nextstate, input, state, g, KK, nn ); trans_p[state] = nextstate[0]; } return; } /*! * \brief determines the tail for a RSC code */ static void rsc_tail(int tail_p[], int g[], int max_states, int mm ) { int state; /* Determine the tail for each state */ for(state = 0; state < max_states; state++) { /* determine feedback word */ tail_p[state] = parity_counter(g[0]&state, mm); } return; } /*! * \brief Perform convolutional encoding */ static void conv_encode(int output_p[], int input[], int out0[], int state0[], int out1[], int state1[], int tail[], int KK, int LL, int nn) { int i, j, outsym; int *bin_vec; int state = 0; /* Negative value in "tail" is a flag that this is a tail-biting NSC code. Determine initial state */ if ( tail[0] < 0 ) { for (i = LL - KK + 1; i < LL; i++) { if (input[i]) { /* Determine next state */ state = state1[state]; } else { /* Determine next state */ state = state0[state]; } } } bin_vec = (int*)calloc( nn, sizeof(int) ); /* encode data bits one bit at a time */ for (i = 0; i < LL; i++) { if (input[i]) { /* Input is a one */ outsym = out1[state]; /* The output symbol */ /* Determine next state */ state = state1[state]; } else { /* Input is a zero */ outsym = out0[state]; /* The output symbol */ /* Determine next state */ state = state0[state]; } /* Convert symbol to a binary vector */ itob( bin_vec, outsym, nn ); /* Assign to output */ for (j = 0; j < nn; j++) output_p[nn*i + j] = bin_vec[j]; } /* encode tail if needed */ if (tail[0] >= 0) { for (i = LL; i < LL + KK - 1; i++) { if (tail[state]) { /* Input is a one */ outsym = out1[state]; /* The output symbol */ /* Determine next state */ state = state1[state]; } else { /* Input is a zero */ outsym = out0[state]; /* The output symbol */ /* Determine next state */ state = state0[state]; } /* Convert symbol to a binary vector */ itob( bin_vec, outsym, nn ); /* Assign to output */ for (j = 0; j < nn; j++) output_p[nn*i + j] = bin_vec[j]; } } free(bin_vec); return; } /*! * \brief Computes the branch metric used for decoding. * \return (returned float) The metric between the hypothetical symbol and the received vector * \param[in] rec_array The received vector, of length nn * \param[in] symbol The hypothetical symbol * \param[in] nn The length of the received vector * * This function is used by siso() */ static float Gamma(float rec_array[], int symbol, int nn) { float rm = 0; int i; int mask = 1; for (i = 0; i < nn; i++) { if (symbol & mask) rm += rec_array[nn - i - 1]; mask = mask << 1; } return(rm); } /*! * \brief Uses the Viterbi algorithm to perform hard-decision decoding of a convolutional code. * \param[in] out0[] The output bits for each state if input is a 0 (generated by rsc_transit). * \param[in] state0[] The next state if input is a 0 (generated by rsc_transit). * \param[in] out1[] The output bits for each state if input is a 1 (generated by rsc_transit). * \param[in] state1[] The next state if input is a 1 (generated by rsc_transit). * \param[in] r[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). * \param[in] KK The constraint length of the convolutional code. * \param[in] LL The number of data bits. * \param[out] output_u_int[] Hard decisions on the data bits * */ static void Viterbi(int output_u_int[], int out0[], int state0[], int out1[], int state1[], double input_c[], int KK, int nn, int LL) { int i, t, state, mm, states; int number_symbols; float metric; float *prev_section, *next_section; int *prev_bit; int *prev_state; float *metric_c; /* Set of all possible branch metrics */ float *rec_array; /* Received values for one trellis section */ float max_val; /* some derived constants */ mm = KK - 1; states = 1 << mm; /* 2^mm */ number_symbols = 1 << nn; /* 2^nn */ /* dynamically allocate memory */ prev_section = (float*)calloc( states, sizeof(float) ); next_section = (float*)calloc( states, sizeof(float) ); prev_bit = (int*)calloc( states*(LL + mm), sizeof(int) ); prev_state = (int*)calloc( states*(LL + mm), sizeof(int) ); rec_array = (float*)calloc( nn, sizeof(float) ); metric_c = (float*)calloc( number_symbols, sizeof(float) ); /* initialize trellis */ for (state = 0; state < states; state++) { prev_section[state] = -MAXLOG; next_section[state] = -MAXLOG; } prev_section[0] = 0; /* start in all-zeros state */ /* go through trellis */ for (t = 0; t < LL + mm; t++) { for (i = 0; i < nn; i++) rec_array[i] = (float)input_c[nn*t + i]; /* precompute all possible branch metrics */ for (i = 0; i < number_symbols; i++) metric_c[i] = Gamma( rec_array, i, nn ); /* step through all states */ for (state = 0; state < states; state++) { /* hypothesis: info bit is a zero */ metric = prev_section[state] + metric_c[ out0[ state ] ]; /* store new metric if more than metric in storage */ if ( metric > next_section[state0[state]] ) { next_section[state0[state]] = metric; prev_state[t*states + state0[state]] = state; prev_bit[t*states + state0[state]] = 0; } /* hypothesis: info bit is a one */ metric = prev_section[state] + metric_c[ out1[ state ] ]; /* store new metric if more than metric in storage */ if ( metric > next_section[state1[state]] ) { next_section[state1[state]] = metric; prev_state[t*states + state1[state]] = state; prev_bit[t*states + state1[state]] = 1; } } /* normalize */ max_val = 0; for (state = 0; state < states; state++) { if (next_section[state] > max_val) { max_val = next_section[state]; } } for (state = 0; state < states; state++) { prev_section[state] = next_section[state] - max_val; next_section[state] = -MAXLOG; } } /* trace-back operation */ state = 0; /* tail, no need to output */ for (t = LL + mm - 1; t >= LL; t--) { state = prev_state[t*states + state]; } for (t = LL - 1; t >= 0; t--) { output_u_int[t] = prev_bit[t*states + state]; state = prev_state[t*states + state]; } /* free the dynamically allocated memory */ free(prev_section); free(next_section); free(prev_bit); free(prev_state); free(rec_array); free(metric_c); } /*! * \brief Uses the Viterbi algorithm to perform hard-decision decoding of a tail-biting convolutional code. * Input parameters: * out0[] The output bits for each state if input is a 0 (generated by rsc_transit). * state0[] The next state if input is a 0 (generated by rsc_transit). * out1[] The output bits for each state if input is a 1 (generated by rsc_transit). * state1[] The next state if input is a 1 (generated by rsc_transit). * r[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). * KK The constraint length of the convolutional code. * LL The number of data bits. * depth head and tail decoding length [Ref. W. Sung, Electronics Letters, vol. 36, no. 7] * Output parameters: * output_u_int[] Hard decisions on the data bits */ static void ViterbiTb(int output_u_int[], int out0[], int state0[], int out1[], int state1[], double input_c[], int KK, int nn, int LL, int depth) { int i, t, state, mm, states, max_state; int number_symbols, starting_bit; float metric; float *prev_section, *next_section; int *prev_bit; int *prev_state; float *metric_c; /* Set of all possible branch metrics */ float *rec_array; /* Received values for one trellis section */ float max_val; /* some derived constants */ mm = KK - 1; states = 1 << mm; /* 2^mm */ number_symbols = 1 << nn; /* 2^nn */ /* dynamically allocate memory */ prev_section = (float*)calloc( states, sizeof(float) ); next_section = (float*)calloc( states, sizeof(float) ); prev_bit = (int*)calloc( states*(LL + depth), sizeof(int) ); prev_state = (int*)calloc( states*(LL + depth), sizeof(int) ); rec_array = (float*)calloc( nn, sizeof(float) ); metric_c = (float*)calloc( number_symbols, sizeof(float) ); /* initialize trellis */ for (state = 0; state < states; state++) { prev_section[state] = 0; /* equally likely starting state */ next_section[state] = -MAXLOG; } /* go through trellis */ for (t = -depth; t < LL + depth; t++) { /* determine the corresponding data bits */ starting_bit = nn*(t % LL); if (starting_bit < 0 ) starting_bit = nn*LL + starting_bit; for (i = 0; i < nn; i++) { rec_array[i] = (float)input_c[starting_bit+i]; } /* precompute all possible branch metrics */ for (i = 0; i < number_symbols; i++) metric_c[i] = Gamma( rec_array, i, nn ); /* step through all states */ for (state = 0; state < states; state++) { /* hypothesis: info bit is a zero */ metric = prev_section[state] + metric_c[ out0[ state ] ]; /* store new metric if more than metric in storage */ if ( metric > next_section[state0[state]] ) { next_section[state0[state]] = metric; if (t >= 0) { prev_state[t*states+state0[state]] = state; prev_bit[t*states+state0[state]] = 0; } } /* hypothesis: info bit is a one */ metric = prev_section[state] + metric_c[ out1[ state ] ]; /* store new metric if more than metric in storage */ if ( metric > next_section[state1[state]] ) { next_section[state1[state]] = metric; if (t >= 0) { prev_state[t*states+state1[state]] = state; prev_bit[t*states+state1[state]] = 1; } } } /* normalize */ max_val = 0; for (state = 0; state < states; state++) { if (next_section[state] > max_val) { max_val = next_section[state]; max_state = state; } } for (state = 0; state < states; state++) { prev_section[state] = next_section[state] - max_val; next_section[state] = -MAXLOG; } } /* trace-back operation */ state = max_state; /* tail, no need to output */ for (t = LL + depth - 1; t >= LL; t--) { state = prev_state[t*states + state]; } for (t = LL - 1; t >= 0; t--) { output_u_int[t] = prev_bit[t*states + state]; state = prev_state[t*states + state]; } /* free the dynamically allocated memory */ free(prev_section); free(next_section); free(prev_bit); free(prev_state); free(rec_array); free(metric_c); } //#endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/viterbi_decoder.h0000644000175000017500000001023112576764164025472 0ustar carlescarles/*! * \file viterbi_decoder.h * \brief Interface of a Viterbi decoder class based on the Iterative Solutions * Coded Modulation Library by Matthew C. Valenti * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_VITERBI_DECODER_H_ #define GNSS_SDR_VITERBI_DECODER_H_ #include #include /*! * \brief Class that implements a Viterbi decoder */ class Viterbi_Decoder { public: Viterbi_Decoder(const int g_encoder[], const int KK, const int nn); ~Viterbi_Decoder(); void reset(); /*! * \brief Uses the Viterbi algorithm to perform hard-decision decoding of a convolutional code. * * \param[in] input_c[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). * \param[in] LL The number of data bits to be decoded (does not include the mm zero-tail-bits) * * \return output_u_int[] Hard decisions on the data bits (without the mm zero-tail-bits) */ float decode_block(const double input_c[], int* output_u_int, const int LL); float decode_continuous(const double sym[], const int traceback_depth, int output_u_int[], const int nbits_requested, int &nbits_decoded); private: class Prev { public: int num_states; Prev(int states, int t); Prev(const Prev& prev); Prev& operator=(const Prev& other); ~Prev(); int get_anchestor_state_of_current_state(int current_state); int get_bit_of_current_state(int current_state); float get_metric_of_current_state(int current_state); int get_t(); void set_current_state_as_ancestor_of_next_state(int next_state, int current_state); void set_decoded_bit_for_next_state(int next_state, int bit); void set_survivor_branch_metric_of_next_state(int next_state, float metric); private: int t; int * state; int * bit; float * metric; int * refcount; }; // code properties int d_KK; int d_nn; // derived code properties int d_mm; int d_states; int d_number_symbols; // trellis definition int* d_out0; int* d_state0; int* d_out1; int* d_state1; // trellis state float *d_pm_t; std::deque d_trellis_paths; float *d_metric_c; /* Set of all possible branch metrics */ float *d_rec_array; /* Received values for one trellis section */ bool d_trellis_state_is_initialised; // measures float d_indicator_metric; // operations on the trellis (change decoder state) void init_trellis_state(); int do_acs(const double sym[], int nbits); int do_traceback(size_t traceback_length); int do_tb_and_decode(int traceback_length, int requested_decoding_length, int state, int bits[], float& indicator_metric); // branch metric function float gamma(float rec_array[], int symbol, int nn); // trellis generation void nsc_transit(int output_p[], int trans_p[], int input, const int g[], int KK, int nn); int nsc_enc_bit(int state_out_p[], int input, int state_in, const int g[], int KK, int nn); int parity_counter(int symbol, int length); }; #endif /* GNSS_SDR_VITERBI_DECODER_H_ */ gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/libs/gps_l1_ca_subframe_fsm.h0000644000175000017500000001000012576764164026714 0ustar carlescarles/*! * \file gps_l1_ca_subframe_fsm.h * \brief Interface of a GPS NAV message word-to-subframe decoder state machine * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_SUBFRAME_FSM_H_ #define GNSS_SDR_GPS_L1_CA_SUBFRAME_FSM_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include #include #include "GPS_L1_CA.h" #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_iono.h" #include "gps_almanac.h" #include "gps_utc_model.h" namespace sc = boost::statechart; namespace mpl = boost::mpl; struct gps_subframe_fsm_S0; struct gps_subframe_fsm_S1; struct gps_subframe_fsm_S2; struct gps_subframe_fsm_S3; struct gps_subframe_fsm_S4; struct gps_subframe_fsm_S5; struct gps_subframe_fsm_S6; struct gps_subframe_fsm_S7; struct gps_subframe_fsm_S8; struct gps_subframe_fsm_S9; struct gps_subframe_fsm_S10; struct gps_subframe_fsm_S11; /*! * \brief This class implements a Finite State Machine that handles the decoding * of the GPS L1 C/A NAV message */ class GpsL1CaSubframeFsm : public sc::state_machine< GpsL1CaSubframeFsm, gps_subframe_fsm_S0 > { public: GpsL1CaSubframeFsm(); //!< The constructor starts the Finite State Machine // channel and satellite info int i_channel_ID; //!< Channel id unsigned int i_satellite_PRN; //!< Satellite PRN number concurrent_queue *d_ephemeris_queue; //!< Ephemeris queue concurrent_queue *d_iono_queue; //!< Ionospheric parameters queue concurrent_queue *d_utc_model_queue; //!< UTC model parameters queue concurrent_queue *d_almanac_queue; //!< Almanac queue Gps_Navigation_Message d_nav; //!< GPS L1 C/A navigation message object // GPS SV and System parameters Gps_Ephemeris ephemeris; //!< Object that handles GPS ephemeris parameters Gps_Almanac almanac; //!< Object that handles GPS almanac data Gps_Utc_Model utc_model; //!< Object that handles UTM model parameters Gps_Iono iono; //!< Object that handles ionospheric parameters char d_subframe[GPS_SUBFRAME_LENGTH]; char d_GPS_frame_4bytes[GPS_WORD_LENGTH]; double d_preamble_time_ms; void gps_word_to_subframe(int position); //!< inserts the word in the correct position of the subframe /*! * \brief This function decodes a NAv message subframe and pushes the information to the right queues */ void gps_subframe_to_nav_msg(); //FSM EVENTS void Event_gps_word_valid(); //!< FSM event: the received word is valid void Event_gps_word_invalid(); //!< FSM event: the received word is not valid void Event_gps_word_preamble(); //!< FSM event: word preamble detected }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/0000755000175000017500000000000012576764164023045 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.h0000644000175000017500000000546312576764164030635 0ustar carlescarles/*! * \file gps_l1_ca_telemetry_decoder.h * \brief Interface of an adapter of a GPS L1 C/A NAV data decoder block * to a TelemetryDecoderInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_H_ #define GNSS_SDR_GPS_L1_CA_TELEMETRY_DECODER_H_ #include #include #include "telemetry_decoder_interface.h" #include "gps_l1_ca_telemetry_decoder_cc.h" class ConfigurationInterface; /*! * \brief This class implements a NAV data decoder for GPS L1 C/A */ class GpsL1CaTelemetryDecoder : public TelemetryDecoderInterface { public: GpsL1CaTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaTelemetryDecoder(); std::string role() { return role_; } //! Returns "GPS_L1_CA_Telemetry_Decoder" std::string implementation() { return "GPS_L1_CA_Telemetry_Decoder"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void set_satellite(Gnss_Satellite satellite); void set_channel(int channel){telemetry_decoder_->set_channel(channel);} void reset() { return; } size_t item_size() { return 0; } private: gps_l1_ca_telemetry_decoder_cc_sptr telemetry_decoder_; Gnss_Satellite satellite_; int channel_; unsigned int vector_length_; std::string item_type_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/CMakeLists.txt0000644000175000017500000000335012576764164025606 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(TELEMETRY_DECODER_ADAPTER_SOURCES gps_l1_ca_telemetry_decoder.cc gps_l2_m_telemetry_decoder.cc galileo_e1b_telemetry_decoder.cc sbas_l1_telemetry_decoder.cc galileo_e5a_telemetry_decoder.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/libs ${Boost_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB TELEMETRY_DECODER_ADAPTER_HEADERS "*.h") add_library(telemetry_decoder_adapters ${TELEMETRY_DECODER_ADAPTER_SOURCES} ${TELEMETRY_DECODER_ADAPTER_HEADERS}) source_group(Headers FILES ${TELEMETRY_DECODER_ADAPTER_HEADERS}) target_link_libraries(telemetry_decoder_adapters telemetry_decoder_gr_blocks gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.h0000644000175000017500000000603312576764164031145 0ustar carlescarles/*! * \file galileo_e5a_telemetry_decoder.h * \brief Interface of an adapter of a GALILEO E5a FNAV data decoder block * to a TelemetryDecoderInterface * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E5A_TELEMETRY_DECODER_H_ #define GNSS_SDR_GALILEO_E5A_TELEMETRY_DECODER_H_ #include #include #include "telemetry_decoder_interface.h" #include "galileo_e5a_telemetry_decoder_cc.h" class ConfigurationInterface; /*! * \brief This class implements a NAV data decoder for Galileo INAV frames in E1B radio link */ class GalileoE5aTelemetryDecoder: public TelemetryDecoderInterface { public: GalileoE5aTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE5aTelemetryDecoder(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E5a_Telemetry_Decoder" */ std::string implementation() { return "Galileo_E5A_Telemetry_Decoder"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void set_satellite(Gnss_Satellite satellite); void set_channel(int channel){telemetry_decoder_->set_channel(channel);} void reset() { return; } size_t item_size() { return 0; } private: galileo_e5a_telemetry_decoder_cc_sptr telemetry_decoder_; Gnss_Satellite satellite_; int channel_; unsigned int vector_length_; std::string item_type_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif /* GNSS_SDR_GALILEO_E5A_TELEMETRY_DECODER_H_ */ gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l2_m_telemetry_decoder.h0000644000175000017500000000544712576764164030511 0ustar carlescarles/*! * \file gps_l2_m_telemetry_decoder.h * \brief Interface of an adapter of a GPS L1 C/A NAV data decoder block * to a TelemetryDecoderInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_H_ #define GNSS_SDR_GPS_L2_M_TELEMETRY_DECODER_H_ #include #include #include "telemetry_decoder_interface.h" #include "gps_l2_m_telemetry_decoder_cc.h" class ConfigurationInterface; /*! * \brief This class implements a NAV data decoder for GPS L2 M */ class GpsL2MTelemetryDecoder : public TelemetryDecoderInterface { public: GpsL2MTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL2MTelemetryDecoder(); std::string role() { return role_; } //! Returns "gps_l2_m_telemetry_decoder" std::string implementation() { return "gps_l2_m_telemetry_decoder"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void set_satellite(Gnss_Satellite satellite); void set_channel(int channel){telemetry_decoder_->set_channel(channel);} void reset() { return; } size_t item_size() { return 0; } private: gps_l2_m_telemetry_decoder_cc_sptr telemetry_decoder_; Gnss_Satellite satellite_; int channel_; unsigned int vector_length_; std::string item_type_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.h0000644000175000017500000000551512576764164030327 0ustar carlescarles/*! * \file sbas_l1_telemetry_decoder.h * \brief Interface of an adapter of a SBAS telemetry data decoder block * to a TelemetryDecoderInterface * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_H_ #define GNSS_SDR_SBAS_L1_TELEMETRY_DECODER_H_ #include #include #include "telemetry_decoder_interface.h" #include "sbas_l1_telemetry_decoder_cc.h" class ConfigurationInterface; /*! * \brief This class implements a NAV data decoder for SBAS frames in L1 radio link */ class SbasL1TelemetryDecoder : public TelemetryDecoderInterface { public: SbasL1TelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~SbasL1TelemetryDecoder(); std::string role() { return role_; } /*! * \brief Returns "SBAS_L1_Telemetry_Decoder" */ std::string implementation() { return "SBAS_L1_Telemetry_Decoder"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void set_satellite(Gnss_Satellite satellite); void set_channel(int channel){ telemetry_decoder_->set_channel(channel); } void reset() { return; } size_t item_size() { return 0; } private: sbas_l1_telemetry_decoder_cc_sptr telemetry_decoder_; Gnss_Satellite satellite_; int channel_; unsigned int vector_length_; std::string item_type_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l2_m_telemetry_decoder.cc0000644000175000017500000001060712576764164030641 0ustar carlescarles/*! * \file gps_l2_m_telemetry_decoder.cc * \brief Implementation of an adapter of a GPS L2C M NAV data decoder block * to a TelemetryDecoderInterface * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l2_m_telemetry_decoder.h" #include #include #include "gps_cnav_ephemeris.h" #include "gps_almanac.h" #include "gps_cnav_iono.h" #include "gps_cnav_utc_model.h" #include "configuration_interface.h" #include "concurrent_queue.h" extern concurrent_queue global_gps_cnav_ephemeris_queue; extern concurrent_queue global_gps_cnav_iono_queue; //extern concurrent_queue global_gps_utc_model_queue; //extern concurrent_queue global_gps_almanac_queue; using google::LogMessage; GpsL2MTelemetryDecoder::GpsL2MTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./navigation.dat"; DLOG(INFO) << "role " << role; DLOG(INFO) << "vector length " << vector_length_; vector_length_ = configuration->property(role + ".vector_length", 2048); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); int fs_in; fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); // make telemetry decoder object telemetry_decoder_ = gps_l2_m_make_telemetry_decoder_cc(satellite_, 0, (long)fs_in, vector_length_, queue_, dump_); // TODO fix me DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")"; // set the navigation msg queue; telemetry_decoder_->set_ephemeris_queue(&global_gps_cnav_ephemeris_queue); telemetry_decoder_->set_iono_queue(&global_gps_cnav_iono_queue); //telemetry_decoder_->set_almanac_queue(&global_gps_almanac_queue); //telemetry_decoder_->set_utc_model_queue(&global_gps_utc_model_queue); //decimation factor int decimation_factor = configuration->property(role + ".decimation_factor", 1); telemetry_decoder_->set_decimation(decimation_factor); LOG(INFO) << "global navigation message queue assigned to telemetry_decoder (" << telemetry_decoder_->unique_id() << ")" << "role " << role; channel_ = 0; } GpsL2MTelemetryDecoder::~GpsL2MTelemetryDecoder() {} void GpsL2MTelemetryDecoder::set_satellite(Gnss_Satellite satellite) { satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); telemetry_decoder_->set_satellite(satellite_); DLOG(INFO) << "TELEMETRY DECODER: satellite set to " << satellite_; } void GpsL2MTelemetryDecoder::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GpsL2MTelemetryDecoder::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GpsL2MTelemetryDecoder::get_left_block() { return telemetry_decoder_; } gr::basic_block_sptr GpsL2MTelemetryDecoder::get_right_block() { return telemetry_decoder_; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/gps_l1_ca_telemetry_decoder.cc0000644000175000017500000001053212576764164030764 0ustar carlescarles/*! * \file gps_l1_ca_telemetry_decoder.cc * \brief Implementation of an adapter of a GPS L1 C/A NAV data decoder block * to a TelemetryDecoderInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_telemetry_decoder.h" #include #include #include "gps_ephemeris.h" #include "gps_almanac.h" #include "gps_iono.h" #include "gps_utc_model.h" #include "configuration_interface.h" #include "gps_l1_ca_telemetry_decoder_cc.h" extern concurrent_queue global_gps_ephemeris_queue; extern concurrent_queue global_gps_iono_queue; extern concurrent_queue global_gps_utc_model_queue; extern concurrent_queue global_gps_almanac_queue; using google::LogMessage; GpsL1CaTelemetryDecoder::GpsL1CaTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./navigation.dat"; DLOG(INFO) << "role " << role; DLOG(INFO) << "vector length " << vector_length_; vector_length_ = configuration->property(role + ".vector_length", 2048); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); int fs_in; fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); // make telemetry decoder object telemetry_decoder_ = gps_l1_ca_make_telemetry_decoder_cc(satellite_, 0, (long)fs_in, vector_length_, queue_, dump_); // TODO fix me DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")"; // set the navigation msg queue; telemetry_decoder_->set_ephemeris_queue(&global_gps_ephemeris_queue); telemetry_decoder_->set_iono_queue(&global_gps_iono_queue); telemetry_decoder_->set_almanac_queue(&global_gps_almanac_queue); telemetry_decoder_->set_utc_model_queue(&global_gps_utc_model_queue); //decimation factor int decimation_factor = configuration->property(role + ".decimation_factor", 1); telemetry_decoder_->set_decimation(decimation_factor); DLOG(INFO) << "global navigation message queue assigned to telemetry_decoder ("<< telemetry_decoder_->unique_id() << ")"; channel_ = 0; } GpsL1CaTelemetryDecoder::~GpsL1CaTelemetryDecoder() {} void GpsL1CaTelemetryDecoder::set_satellite(Gnss_Satellite satellite) { satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); telemetry_decoder_->set_satellite(satellite_); DLOG(INFO) << "TELEMETRY DECODER: satellite set to " << satellite_; } void GpsL1CaTelemetryDecoder::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GpsL1CaTelemetryDecoder::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GpsL1CaTelemetryDecoder::get_left_block() { return telemetry_decoder_; } gr::basic_block_sptr GpsL1CaTelemetryDecoder::get_right_block() { return telemetry_decoder_; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.h0000644000175000017500000000571212576764164031145 0ustar carlescarles/*! * \file galileo_e1b_telemetry_decoder.h * \brief Interface of an adapter of a GALILEO E1B NAV data decoder block * to a TelemetryDecoderInterface * \author Javier Arribas 2013 jarribas(at)cttc.es, * Mara Branzanti 2013. mara.branzanti(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1B_TELEMETRY_DECODER_H_ #define GNSS_SDR_GALILEO_E1B_TELEMETRY_DECODER_H_ #include #include #include "telemetry_decoder_interface.h" #include "galileo_e1b_telemetry_decoder_cc.h" #include "gnss_satellite.h" class ConfigurationInterface; /*! * \brief This class implements a NAV data decoder for Galileo INAV frames in E1B radio link */ class GalileoE1BTelemetryDecoder : public TelemetryDecoderInterface { public: GalileoE1BTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1BTelemetryDecoder(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E1B_Telemetry_Decoder" */ std::string implementation() { return "Galileo_E1B_Telemetry_Decoder"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void set_satellite(Gnss_Satellite satellite); void set_channel(int channel){telemetry_decoder_->set_channel(channel);} void reset() { return; } size_t item_size() { return 0; } private: galileo_e1b_telemetry_decoder_cc_sptr telemetry_decoder_; Gnss_Satellite satellite_; int channel_; unsigned int vector_length_; std::string item_type_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e1b_telemetry_decoder.cc0000644000175000017500000001057212576764164031303 0ustar carlescarles/*! * \file galileo_e1b_telemetry_decoder.cc * \brief Implementation of an adapter of a Galileo INAV data decoder block * to a TelemetryDecoderInterface * \author Javier Arribas 2013. jarribas(at)cttc.es, * Mara Branzanti 2013. mara.branzanti(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1b_telemetry_decoder.h" #include #include #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" #include "configuration_interface.h" #include "galileo_e1b_telemetry_decoder_cc.h" extern concurrent_queue global_galileo_ephemeris_queue; extern concurrent_queue global_galileo_iono_queue; extern concurrent_queue global_galileo_utc_model_queue; extern concurrent_queue global_galileo_almanac_queue; using google::LogMessage; GalileoE1BTelemetryDecoder::GalileoE1BTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./navigation.dat"; DLOG(INFO) << "role " << role; DLOG(INFO) << "vector length " << vector_length_; vector_length_ = configuration->property(role + ".vector_length", 2048); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); int fs_in; fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); // make telemetry decoder object telemetry_decoder_ = galileo_e1b_make_telemetry_decoder_cc(satellite_, 0, (long)fs_in, vector_length_, queue_, dump_); // TODO fix me DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")"; // set the navigation msg queue; telemetry_decoder_->set_ephemeris_queue(&global_galileo_ephemeris_queue); telemetry_decoder_->set_iono_queue(&global_galileo_iono_queue); telemetry_decoder_->set_almanac_queue(&global_galileo_almanac_queue); telemetry_decoder_->set_utc_model_queue(&global_galileo_utc_model_queue); //decimation factor int decimation_factor = configuration->property(role + ".decimation_factor", 1); telemetry_decoder_->set_decimation(decimation_factor); channel_ = 0; } GalileoE1BTelemetryDecoder::~GalileoE1BTelemetryDecoder() {} void GalileoE1BTelemetryDecoder::set_satellite(Gnss_Satellite satellite) { satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); telemetry_decoder_->set_satellite(satellite_); DLOG(INFO) << "GALILEO TELEMETRY DECODER: satellite set to " << satellite_; } void GalileoE1BTelemetryDecoder::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GalileoE1BTelemetryDecoder::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GalileoE1BTelemetryDecoder::get_left_block() { return telemetry_decoder_; } gr::basic_block_sptr GalileoE1BTelemetryDecoder::get_right_block() { return telemetry_decoder_; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/galileo_e5a_telemetry_decoder.cc0000644000175000017500000001055112576764164031303 0ustar carlescarles/*! * \file galileo_e5a_telemetry_decoder.h * \brief Interface of an adapter of a GALILEO E5a FNAV data decoder block * to a TelemetryDecoderInterface * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5a_telemetry_decoder.h" #include #include #include #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" #include "configuration_interface.h" extern concurrent_queue global_galileo_ephemeris_queue; extern concurrent_queue global_galileo_iono_queue; extern concurrent_queue global_galileo_utc_model_queue; extern concurrent_queue global_galileo_almanac_queue; using google::LogMessage; GalileoE5aTelemetryDecoder::GalileoE5aTelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./navigation.dat"; DLOG(INFO) << "role " << role; DLOG(INFO) << "vector length " << vector_length_; vector_length_ = configuration->property(role + ".vector_length", 2048); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); int fs_in; fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); // make telemetry decoder object telemetry_decoder_ = galileo_e5a_make_telemetry_decoder_cc(satellite_, 0, (long)fs_in, vector_length_, queue_, dump_); // TODO fix me DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")"; // set the navigation msg queue; telemetry_decoder_->set_ephemeris_queue(&global_galileo_ephemeris_queue); telemetry_decoder_->set_iono_queue(&global_galileo_iono_queue); telemetry_decoder_->set_almanac_queue(&global_galileo_almanac_queue); telemetry_decoder_->set_utc_model_queue(&global_galileo_utc_model_queue); DLOG(INFO) << "global navigation message queue assigned to telemetry_decoder ("<< telemetry_decoder_->unique_id() << ")"; channel_ = 0; } GalileoE5aTelemetryDecoder::~GalileoE5aTelemetryDecoder() {} void GalileoE5aTelemetryDecoder::set_satellite(Gnss_Satellite satellite) { satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); telemetry_decoder_->set_satellite(satellite_); DLOG(INFO) << "TELEMETRY DECODER: satellite set to " << satellite_; } void GalileoE5aTelemetryDecoder::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GalileoE5aTelemetryDecoder::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GalileoE5aTelemetryDecoder::get_left_block() { return telemetry_decoder_; } gr::basic_block_sptr GalileoE5aTelemetryDecoder::get_right_block() { return telemetry_decoder_; } gnss-sdr-0.0.6/src/algorithms/telemetry_decoder/adapters/sbas_l1_telemetry_decoder.cc0000644000175000017500000001013212576764164030454 0ustar carlescarles/*! * \file sbas_l1_telemetry_decoder.cc * \brief Implementation of an adapter of a SBAS telemetry data decoder block * to a TelemetryDecoderInterface * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "sbas_l1_telemetry_decoder.h" #include #include #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" #include "sbas_satellite_correction.h" #include "sbas_ephemeris.h" #include "configuration_interface.h" #include "sbas_l1_telemetry_decoder_cc.h" extern concurrent_queue global_sbas_raw_msg_queue; extern concurrent_queue global_sbas_iono_queue; extern concurrent_queue global_sbas_sat_corr_queue; extern concurrent_queue global_sbas_ephemeris_queue; using google::LogMessage; SbasL1TelemetryDecoder::SbasL1TelemetryDecoder(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./navigation.dat"; DLOG(INFO) << "role " << role; DLOG(INFO) << "vector length " << vector_length_; vector_length_ = configuration->property(role + ".vector_length", 2048); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); int fs_in; fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); // make telemetry decoder object telemetry_decoder_ = sbas_l1_make_telemetry_decoder_cc(satellite_, 0, (long)fs_in, vector_length_, queue_, dump_); // TODO fix me channel_ = 0; DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")"; // set the queues; telemetry_decoder_->set_raw_msg_queue(&global_sbas_raw_msg_queue); telemetry_decoder_->set_iono_queue(&global_sbas_iono_queue); telemetry_decoder_->set_sat_corr_queue(&global_sbas_sat_corr_queue); telemetry_decoder_->set_ephemeris_queue(&global_sbas_ephemeris_queue); } SbasL1TelemetryDecoder::~SbasL1TelemetryDecoder() {} void SbasL1TelemetryDecoder::set_satellite(Gnss_Satellite satellite) { satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); telemetry_decoder_->set_satellite(satellite_); DLOG(INFO) << "SBAS TELEMETRY DECODER: satellite set to " << satellite_; } void SbasL1TelemetryDecoder::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void SbasL1TelemetryDecoder::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr SbasL1TelemetryDecoder::get_left_block() { return telemetry_decoder_; } gr::basic_block_sptr SbasL1TelemetryDecoder::get_right_block() { return telemetry_decoder_; } gnss-sdr-0.0.6/src/algorithms/libs/0000755000175000017500000000000012576764211016465 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/short_x2_to_cshort.h0000644000175000017500000000347712576764164022514 0ustar carlescarles/*! * \file short_x2_to_cshort.h * \brief Adapts two short streams into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SHORT_X2_TO_CSHORT_H_ #define GNSS_SDR_SHORT_X2_TO_CSHORT_H_ #include #include class short_x2_to_cshort; typedef boost::shared_ptr short_x2_to_cshort_sptr; short_x2_to_cshort_sptr make_short_x2_to_cshort(); /*! * \brief This class adapts two short streams into a std::complex stream */ class short_x2_to_cshort : public gr::sync_block { private: friend short_x2_to_cshort_sptr make_short_x2_to_cshort(); public: short_x2_to_cshort(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/libs/cl.hpp0000644000175000017500000103524312576764164017613 0ustar carlescarles/******************************************************************************* * Copyright (c) 2008-2013 The Khronos Group Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and/or associated documentation files (the * "Materials"), to deal in the Materials without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Materials, and to * permit persons to whom the Materials are furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Materials. * * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. ******************************************************************************/ /*! \file * * \brief C++ bindings for OpenCL 1.0 (rev 48), OpenCL 1.1 (rev 33) and * OpenCL 1.2 (rev 15) * \author Benedict R. Gaster, Laurent Morichetti and Lee Howes * * Additions and fixes from: * Brian Cole, March 3rd 2010 and April 2012 * Matt Gruenke, April 2012. * Bruce Merry, February 2013. * * \version 1.2.5 * \date June 2013 * * Optional extension support * * cl * cl_ext_device_fission * #define USE_CL_DEVICE_FISSION */ /*! \mainpage * \section intro Introduction * For many large applications C++ is the language of choice and so it seems * reasonable to define C++ bindings for OpenCL. * * * The interface is contained with a single C++ header file \em cl.hpp and all * definitions are contained within the namespace \em cl. There is no additional * requirement to include \em cl.h and to use either the C++ or original C * bindings it is enough to simply include \em cl.hpp. * * The bindings themselves are lightweight and correspond closely to the * underlying C API. Using the C++ bindings introduces no additional execution * overhead. * * For detail documentation on the bindings see: * * The OpenCL C++ Wrapper API 1.2 (revision 09) * http://www.khronos.org/registry/cl/specs/opencl-cplusplus-1.2.pdf * * \section example Example * * The following example shows a general use case for the C++ * bindings, including support for the optional exception feature and * also the supplied vector and string classes, see following sections for * decriptions of these features. * * \code * #define __CL_ENABLE_EXCEPTIONS * * #if defined(__APPLE__) || defined(__MACOSX) * #include * #else * #include * #endif * #include * #include * #include * * const char * helloStr = "__kernel void " * "hello(void) " * "{ " * " " * "} "; * * int * main(void) * { * cl_int err = CL_SUCCESS; * try { * * std::vector platforms; * cl::Platform::get(&platforms); * if (platforms.size() == 0) { * std::cout << "Platform size 0\n"; * return -1; * } * * cl_context_properties properties[] = * { CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0}; * cl::Context context(CL_DEVICE_TYPE_CPU, properties); * * std::vector devices = context.getInfo(); * * cl::Program::Sources source(1, * std::make_pair(helloStr,strlen(helloStr))); * cl::Program program_ = cl::Program(context, source); * program_.build(devices); * * cl::Kernel kernel(program_, "hello", &err); * * cl::Event event; * cl::CommandQueue queue(context, devices[0], 0, &err); * queue.enqueueNDRangeKernel( * kernel, * cl::NullRange, * cl::NDRange(4,4), * cl::NullRange, * NULL, * &event); * * event.wait(); * } * catch (cl::Error err) { * std::cerr * << "ERROR: " * << err.what() * << "(" * << err.err() * << ")" * << std::endl; * } * * return EXIT_SUCCESS; * } * * \endcode * */ #ifndef CL_HPP_ #define CL_HPP_ #ifdef _WIN32 #include #include #include #include #if defined(__CL_ENABLE_EXCEPTIONS) #include #endif // #if defined(__CL_ENABLE_EXCEPTIONS) #pragma push_macro("max") #undef max #if defined(USE_DX_INTEROP) #include #include #endif #endif // _WIN32 // #if defined(USE_CL_DEVICE_FISSION) #include #endif #if defined(__APPLE__) || defined(__MACOSX) #include #include #include #else #include #include #endif // !__APPLE__ // To avoid accidentally taking ownership of core OpenCL types // such as cl_kernel constructors are made explicit // under OpenCL 1.2 #if defined(CL_VERSION_1_2) && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) #define __CL_EXPLICIT_CONSTRUCTORS explicit #else // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) #define __CL_EXPLICIT_CONSTRUCTORS #endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) // Define deprecated prefixes and suffixes to ensure compilation // in case they are not pre-defined #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED) #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED #endif // #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED) #if !defined(CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED) #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED #endif // #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED) #if !defined(CL_CALLBACK) #define CL_CALLBACK #endif //CL_CALLBACK #include #include #if !defined(__NO_STD_VECTOR) #include #endif #if !defined(__NO_STD_STRING) #include #endif #if defined(linux) || defined(__APPLE__) || defined(__MACOSX) #include #include #include #endif // linux #include /*! \namespace cl * * \brief The OpenCL C++ bindings are defined within this namespace. * */ namespace cl { class Memory; /** * Deprecated APIs for 1.2 */ #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) #define __INIT_CL_EXT_FCN_PTR(name) \ if(!pfn_##name) { \ pfn_##name = (PFN_##name) \ clGetExtensionFunctionAddress(#name); \ if(!pfn_##name) { \ } \ } #endif // #if defined(CL_VERSION_1_1) #if defined(CL_VERSION_1_2) #define __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, name) \ if(!pfn_##name) { \ pfn_##name = (PFN_##name) \ clGetExtensionFunctionAddressForPlatform(platform, #name); \ if(!pfn_##name) { \ } \ } #endif // #if defined(CL_VERSION_1_1) class Program; class Device; class Context; class CommandQueue; class Memory; class Buffer; #if defined(__CL_ENABLE_EXCEPTIONS) /*! \brief Exception class * * This may be thrown by API functions when __CL_ENABLE_EXCEPTIONS is defined. */ class Error : public std::exception { private: cl_int err_; const char * errStr_; public: /*! \brief Create a new CL error exception for a given error code * and corresponding message. * * \param err error code value. * * \param errStr a descriptive string that must remain in scope until * handling of the exception has concluded. If set, it * will be returned by what(). */ Error(cl_int err, const char * errStr = NULL) : err_(err), errStr_(errStr) {} ~Error() throw() {} /*! \brief Get error string associated with exception * * \return A memory pointer to the error message string. */ virtual const char * what() const throw () { if (errStr_ == NULL) { return "empty"; } else { return errStr_; } } /*! \brief Get error code associated with exception * * \return The error code. */ cl_int err(void) const { return err_; } }; #define __ERR_STR(x) #x #else #define __ERR_STR(x) NULL #endif // __CL_ENABLE_EXCEPTIONS namespace detail { #if defined(__CL_ENABLE_EXCEPTIONS) static inline cl_int errHandler ( cl_int err, const char * errStr = NULL) { if (err != CL_SUCCESS) { throw Error(err, errStr); } return err; } #else static inline cl_int errHandler (cl_int err, const char * errStr = NULL) { (void) errStr; // suppress unused variable warning return err; } #endif // __CL_ENABLE_EXCEPTIONS } //! \cond DOXYGEN_DETAIL #if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS) #define __GET_DEVICE_INFO_ERR __ERR_STR(clGetDeviceInfo) #define __GET_PLATFORM_INFO_ERR __ERR_STR(clGetPlatformInfo) #define __GET_DEVICE_IDS_ERR __ERR_STR(clGetDeviceIDs) #define __GET_PLATFORM_IDS_ERR __ERR_STR(clGetPlatformIDs) #define __GET_CONTEXT_INFO_ERR __ERR_STR(clGetContextInfo) #define __GET_EVENT_INFO_ERR __ERR_STR(clGetEventInfo) #define __GET_EVENT_PROFILE_INFO_ERR __ERR_STR(clGetEventProfileInfo) #define __GET_MEM_OBJECT_INFO_ERR __ERR_STR(clGetMemObjectInfo) #define __GET_IMAGE_INFO_ERR __ERR_STR(clGetImageInfo) #define __GET_SAMPLER_INFO_ERR __ERR_STR(clGetSamplerInfo) #define __GET_KERNEL_INFO_ERR __ERR_STR(clGetKernelInfo) #if defined(CL_VERSION_1_2) #define __GET_KERNEL_ARG_INFO_ERR __ERR_STR(clGetKernelArgInfo) #endif // #if defined(CL_VERSION_1_2) #define __GET_KERNEL_WORK_GROUP_INFO_ERR __ERR_STR(clGetKernelWorkGroupInfo) #define __GET_PROGRAM_INFO_ERR __ERR_STR(clGetProgramInfo) #define __GET_PROGRAM_BUILD_INFO_ERR __ERR_STR(clGetProgramBuildInfo) #define __GET_COMMAND_QUEUE_INFO_ERR __ERR_STR(clGetCommandQueueInfo) #define __CREATE_CONTEXT_ERR __ERR_STR(clCreateContext) #define __CREATE_CONTEXT_FROM_TYPE_ERR __ERR_STR(clCreateContextFromType) #define __GET_SUPPORTED_IMAGE_FORMATS_ERR __ERR_STR(clGetSupportedImageFormats) #define __CREATE_BUFFER_ERR __ERR_STR(clCreateBuffer) #define __COPY_ERR __ERR_STR(cl::copy) #define __CREATE_SUBBUFFER_ERR __ERR_STR(clCreateSubBuffer) #define __CREATE_GL_BUFFER_ERR __ERR_STR(clCreateFromGLBuffer) #define __CREATE_GL_RENDER_BUFFER_ERR __ERR_STR(clCreateFromGLBuffer) #define __GET_GL_OBJECT_INFO_ERR __ERR_STR(clGetGLObjectInfo) #if defined(CL_VERSION_1_2) #define __CREATE_IMAGE_ERR __ERR_STR(clCreateImage) #define __CREATE_GL_TEXTURE_ERR __ERR_STR(clCreateFromGLTexture) #define __IMAGE_DIMENSION_ERR __ERR_STR(Incorrect image dimensions) #endif // #if defined(CL_VERSION_1_2) #define __CREATE_SAMPLER_ERR __ERR_STR(clCreateSampler) #define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR __ERR_STR(clSetMemObjectDestructorCallback) #define __CREATE_USER_EVENT_ERR __ERR_STR(clCreateUserEvent) #define __SET_USER_EVENT_STATUS_ERR __ERR_STR(clSetUserEventStatus) #define __SET_EVENT_CALLBACK_ERR __ERR_STR(clSetEventCallback) #define __WAIT_FOR_EVENTS_ERR __ERR_STR(clWaitForEvents) #define __CREATE_KERNEL_ERR __ERR_STR(clCreateKernel) #define __SET_KERNEL_ARGS_ERR __ERR_STR(clSetKernelArg) #define __CREATE_PROGRAM_WITH_SOURCE_ERR __ERR_STR(clCreateProgramWithSource) #define __CREATE_PROGRAM_WITH_BINARY_ERR __ERR_STR(clCreateProgramWithBinary) #if defined(CL_VERSION_1_2) #define __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR __ERR_STR(clCreateProgramWithBuiltInKernels) #endif // #if defined(CL_VERSION_1_2) #define __BUILD_PROGRAM_ERR __ERR_STR(clBuildProgram) #if defined(CL_VERSION_1_2) #define __COMPILE_PROGRAM_ERR __ERR_STR(clCompileProgram) #endif // #if defined(CL_VERSION_1_2) #define __CREATE_KERNELS_IN_PROGRAM_ERR __ERR_STR(clCreateKernelsInProgram) #define __CREATE_COMMAND_QUEUE_ERR __ERR_STR(clCreateCommandQueue) #define __SET_COMMAND_QUEUE_PROPERTY_ERR __ERR_STR(clSetCommandQueueProperty) #define __ENQUEUE_READ_BUFFER_ERR __ERR_STR(clEnqueueReadBuffer) #define __ENQUEUE_READ_BUFFER_RECT_ERR __ERR_STR(clEnqueueReadBufferRect) #define __ENQUEUE_WRITE_BUFFER_ERR __ERR_STR(clEnqueueWriteBuffer) #define __ENQUEUE_WRITE_BUFFER_RECT_ERR __ERR_STR(clEnqueueWriteBufferRect) #define __ENQEUE_COPY_BUFFER_ERR __ERR_STR(clEnqueueCopyBuffer) #define __ENQEUE_COPY_BUFFER_RECT_ERR __ERR_STR(clEnqueueCopyBufferRect) #define __ENQUEUE_FILL_BUFFER_ERR __ERR_STR(clEnqueueFillBuffer) #define __ENQUEUE_READ_IMAGE_ERR __ERR_STR(clEnqueueReadImage) #define __ENQUEUE_WRITE_IMAGE_ERR __ERR_STR(clEnqueueWriteImage) #define __ENQUEUE_COPY_IMAGE_ERR __ERR_STR(clEnqueueCopyImage) #define __ENQUEUE_FILL_IMAGE_ERR __ERR_STR(clEnqueueFillImage) #define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR __ERR_STR(clEnqueueCopyImageToBuffer) #define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR __ERR_STR(clEnqueueCopyBufferToImage) #define __ENQUEUE_MAP_BUFFER_ERR __ERR_STR(clEnqueueMapBuffer) #define __ENQUEUE_MAP_IMAGE_ERR __ERR_STR(clEnqueueMapImage) #define __ENQUEUE_UNMAP_MEM_OBJECT_ERR __ERR_STR(clEnqueueUnMapMemObject) #define __ENQUEUE_NDRANGE_KERNEL_ERR __ERR_STR(clEnqueueNDRangeKernel) #define __ENQUEUE_TASK_ERR __ERR_STR(clEnqueueTask) #define __ENQUEUE_NATIVE_KERNEL __ERR_STR(clEnqueueNativeKernel) #if defined(CL_VERSION_1_2) #define __ENQUEUE_MIGRATE_MEM_OBJECTS_ERR __ERR_STR(clEnqueueMigrateMemObjects) #endif // #if defined(CL_VERSION_1_2) #define __ENQUEUE_ACQUIRE_GL_ERR __ERR_STR(clEnqueueAcquireGLObjects) #define __ENQUEUE_RELEASE_GL_ERR __ERR_STR(clEnqueueReleaseGLObjects) #define __RETAIN_ERR __ERR_STR(Retain Object) #define __RELEASE_ERR __ERR_STR(Release Object) #define __FLUSH_ERR __ERR_STR(clFlush) #define __FINISH_ERR __ERR_STR(clFinish) #define __VECTOR_CAPACITY_ERR __ERR_STR(Vector capacity error) /** * CL 1.2 version that uses device fission. */ #if defined(CL_VERSION_1_2) #define __CREATE_SUB_DEVICES __ERR_STR(clCreateSubDevices) #else #define __CREATE_SUB_DEVICES __ERR_STR(clCreateSubDevicesEXT) #endif // #if defined(CL_VERSION_1_2) /** * Deprecated APIs for 1.2 */ #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) #define __ENQUEUE_MARKER_ERR __ERR_STR(clEnqueueMarker) #define __ENQUEUE_WAIT_FOR_EVENTS_ERR __ERR_STR(clEnqueueWaitForEvents) #define __ENQUEUE_BARRIER_ERR __ERR_STR(clEnqueueBarrier) #define __UNLOAD_COMPILER_ERR __ERR_STR(clUnloadCompiler) #define __CREATE_GL_TEXTURE_2D_ERR __ERR_STR(clCreateFromGLTexture2D) #define __CREATE_GL_TEXTURE_3D_ERR __ERR_STR(clCreateFromGLTexture3D) #define __CREATE_IMAGE2D_ERR __ERR_STR(clCreateImage2D) #define __CREATE_IMAGE3D_ERR __ERR_STR(clCreateImage3D) #endif // #if defined(CL_VERSION_1_1) #endif // __CL_USER_OVERRIDE_ERROR_STRINGS //! \endcond /** * CL 1.2 marker and barrier commands */ #if defined(CL_VERSION_1_2) #define __ENQUEUE_MARKER_WAIT_LIST_ERR __ERR_STR(clEnqueueMarkerWithWaitList) #define __ENQUEUE_BARRIER_WAIT_LIST_ERR __ERR_STR(clEnqueueBarrierWithWaitList) #endif // #if defined(CL_VERSION_1_2) #if !defined(__USE_DEV_STRING) && !defined(__NO_STD_STRING) typedef std::string STRING_CLASS; #elif !defined(__USE_DEV_STRING) /*! \class string * \brief Simple string class, that provides a limited subset of std::string * functionality but avoids many of the issues that come with that class. * \note Deprecated. Please use std::string as default or * re-define the string class to match the std::string * interface by defining STRING_CLASS */ class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED string CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED { private: ::size_t size_; char * str_; public: //! \brief Constructs an empty string, allocating no memory. string(void) : size_(0), str_(NULL) { } /*! \brief Constructs a string populated from an arbitrary value of * specified size. * * An extra '\0' is added, in case none was contained in str. * * \param str the initial value of the string instance. Note that '\0' * characters receive no special treatment. If NULL, * the string is left empty, with a size of 0. * * \param size the number of characters to copy from str. */ string(const char * str, ::size_t size) : size_(size), str_(NULL) { if( size > 0 ) { str_ = new char[size_+1]; if (str_ != NULL) { memcpy(str_, str, size_ * sizeof(char)); str_[size_] = '\0'; } else { size_ = 0; } } } /*! \brief Constructs a string populated from a null-terminated value. * * \param str the null-terminated initial value of the string instance. * If NULL, the string is left empty, with a size of 0. */ string(const char * str) : size_(0), str_(NULL) { if( str ) { size_= ::strlen(str); } if( size_ > 0 ) { str_ = new char[size_ + 1]; if (str_ != NULL) { memcpy(str_, str, (size_ + 1) * sizeof(char)); } } } void resize( ::size_t n ) { if( size_ == n ) { return; } if (n == 0) { if( str_ ) { delete [] str_; } str_ = NULL; size_ = 0; } else { char *newString = new char[n + 1]; int copySize = n; if( size_ < n ) { copySize = size_; } size_ = n; if(str_) { memcpy(newString, str_, (copySize + 1) * sizeof(char)); } if( copySize < size_ ) { memset(newString + copySize, 0, size_ - copySize); } newString[size_] = '\0'; delete [] str_; str_ = newString; } } const char& operator[] ( ::size_t pos ) const { return str_[pos]; } char& operator[] ( ::size_t pos ) { return str_[pos]; } /*! \brief Copies the value of another string to this one. * * \param rhs the string to copy. * * \returns a reference to the modified instance. */ string& operator=(const string& rhs) { if (this == &rhs) { return *this; } if( str_ != NULL ) { delete [] str_; str_ = NULL; size_ = 0; } if (rhs.size_ == 0 || rhs.str_ == NULL) { str_ = NULL; size_ = 0; } else { str_ = new char[rhs.size_ + 1]; size_ = rhs.size_; if (str_ != NULL) { memcpy(str_, rhs.str_, (size_ + 1) * sizeof(char)); } else { size_ = 0; } } return *this; } /*! \brief Constructs a string by copying the value of another instance. * * \param rhs the string to copy. */ string(const string& rhs) : size_(0), str_(NULL) { *this = rhs; } //! \brief Destructor - frees memory used to hold the current value. ~string() { delete[] str_; str_ = NULL; } //! \brief Queries the length of the string, excluding any added '\0's. ::size_t size(void) const { return size_; } //! \brief Queries the length of the string, excluding any added '\0's. ::size_t length(void) const { return size(); } /*! \brief Returns a pointer to the private copy held by this instance, * or "" if empty/unset. */ const char * c_str(void) const { return (str_) ? str_ : "";} }; typedef cl::string STRING_CLASS; #endif // #elif !defined(__USE_DEV_STRING) #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR) #define VECTOR_CLASS std::vector #elif !defined(__USE_DEV_VECTOR) #define VECTOR_CLASS cl::vector #if !defined(__MAX_DEFAULT_VECTOR_SIZE) #define __MAX_DEFAULT_VECTOR_SIZE 10 #endif /*! \class vector * \brief Fixed sized vector implementation that mirroring * * \note Deprecated. Please use std::vector as default or * re-define the vector class to match the std::vector * interface by defining VECTOR_CLASS * \note Not recommended for use with custom objects as * current implementation will construct N elements * * std::vector functionality. * \brief Fixed sized vector compatible with std::vector. * * \note * This differs from std::vector<> not just in memory allocation, * but also in terms of when members are constructed, destroyed, * and assigned instead of being copy constructed. * * \param T type of element contained in the vector. * * \param N maximum size of the vector. */ template class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED vector CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED { private: T data_[N]; unsigned int size_; public: //! \brief Constructs an empty vector with no memory allocated. vector() : size_(static_cast(0)) {} //! \brief Deallocates the vector's memory and destroys all of its elements. ~vector() { clear(); } //! \brief Returns the number of elements currently contained. unsigned int size(void) const { return size_; } /*! \brief Empties the vector of all elements. * \note * This does not deallocate memory but will invoke destructors * on contained elements. */ void clear() { while(!empty()) { pop_back(); } } /*! \brief Appends an element after the last valid element. * Calling this on a vector that has reached capacity will throw an * exception if exceptions are enabled. */ void push_back (const T& x) { if (size() < N) { new (&data_[size_]) T(x); size_++; } else { detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR); } } /*! \brief Removes the last valid element from the vector. * Calling this on an empty vector will throw an exception * if exceptions are enabled. */ void pop_back(void) { if (size_ != 0) { --size_; data_[size_].~T(); } else { detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR); } } /*! \brief Constructs with a value copied from another. * * \param vec the vector to copy. */ vector(const vector& vec) : size_(vec.size_) { if (size_ != 0) { assign(vec.begin(), vec.end()); } } /*! \brief Constructs with a specified number of initial elements. * * \param size number of initial elements. * * \param val value of initial elements. */ vector(unsigned int size, const T& val = T()) : size_(0) { for (unsigned int i = 0; i < size; i++) { push_back(val); } } /*! \brief Overwrites the current content with that copied from another * instance. * * \param rhs vector to copy. * * \returns a reference to this. */ vector& operator=(const vector& rhs) { if (this == &rhs) { return *this; } if (rhs.size_ != 0) { assign(rhs.begin(), rhs.end()); } else { clear(); } return *this; } /*! \brief Tests equality against another instance. * * \param vec the vector against which to compare. */ bool operator==(vector &vec) { if (size() != vec.size()) { return false; } for( unsigned int i = 0; i < size(); ++i ) { if( operator[](i) != vec[i] ) { return false; } } return true; } //! \brief Conversion operator to T*. operator T* () { return data_; } //! \brief Conversion operator to const T*. operator const T* () const { return data_; } //! \brief Tests whether this instance has any elements. bool empty (void) const { return size_==0; } //! \brief Returns the maximum number of elements this instance can hold. unsigned int max_size (void) const { return N; } //! \brief Returns the maximum number of elements this instance can hold. unsigned int capacity () const { return N; } /*! \brief Returns a reference to a given element. * * \param index which element to access. * * \note * The caller is responsible for ensuring index is >= 0 and < size(). */ T& operator[](int index) { return data_[index]; } /*! \brief Returns a const reference to a given element. * * \param index which element to access. * * \note * The caller is responsible for ensuring index is >= 0 and < size(). */ const T& operator[](int index) const { return data_[index]; } /*! \brief Assigns elements of the vector based on a source iterator range. * * \param start Beginning iterator of source range * \param end Enditerator of source range * * \note * Will throw an exception if exceptions are enabled and size exceeded. */ template void assign(I start, I end) { clear(); while(start != end) { push_back(*start); start++; } } /*! \class iterator * \brief Const iterator class for vectors */ class iterator { private: const vector *vec_; int index_; /** * Internal iterator constructor to capture reference * to the vector it iterates over rather than taking * the vector by copy. */ iterator (const vector &vec, int index) : vec_(&vec) { if( !vec.empty() ) { index_ = index; } else { index_ = -1; } } public: iterator(void) : index_(-1), vec_(NULL) { } iterator(const iterator& rhs) : vec_(rhs.vec_), index_(rhs.index_) { } ~iterator(void) {} static iterator begin(const cl::vector &vec) { iterator i(vec, 0); return i; } static iterator end(const cl::vector &vec) { iterator i(vec, vec.size()); return i; } bool operator==(iterator i) { return ((vec_ == i.vec_) && (index_ == i.index_)); } bool operator!=(iterator i) { return (!(*this==i)); } iterator& operator++() { ++index_; return *this; } iterator operator++(int) { iterator retVal(*this); ++index_; return retVal; } iterator& operator--() { --index_; return *this; } iterator operator--(int) { iterator retVal(*this); --index_; return retVal; } const T& operator *() const { return (*vec_)[index_]; } }; iterator begin(void) { return iterator::begin(*this); } iterator begin(void) const { return iterator::begin(*this); } iterator end(void) { return iterator::end(*this); } iterator end(void) const { return iterator::end(*this); } T& front(void) { return data_[0]; } T& back(void) { return data_[size_]; } const T& front(void) const { return data_[0]; } const T& back(void) const { return data_[size_-1]; } }; #endif // #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR) namespace detail { #define __DEFAULT_NOT_INITIALIZED 1 #define __DEFAULT_BEING_INITIALIZED 2 #define __DEFAULT_INITIALIZED 4 /* * Compare and exchange primitives are needed for handling of defaults */ inline int compare_exchange(volatile int * dest, int exchange, int comparand) { #ifdef _WIN32 return (int)(InterlockedCompareExchange( (volatile long*)dest, (long)exchange, (long)comparand)); #elif defined(__APPLE__) || defined(__MACOSX) return OSAtomicOr32Orig((uint32_t)exchange, (volatile uint32_t*)dest); #else // !_WIN32 || defined(__APPLE__) || defined(__MACOSX) return (__sync_val_compare_and_swap( dest, comparand, exchange)); #endif // !_WIN32 } inline void fence() { _mm_mfence(); } }; // namespace detail /*! \brief class used to interface between C++ and * OpenCL C calls that require arrays of size_t values, whose * size is known statically. */ template class size_t { private: ::size_t data_[N]; public: //! \brief Initialize size_t to all 0s size_t() { for( int i = 0; i < N; ++i ) { data_[i] = 0; } } ::size_t& operator[](int index) { return data_[index]; } const ::size_t& operator[](int index) const { return data_[index]; } //! \brief Conversion operator to T*. operator ::size_t* () { return data_; } //! \brief Conversion operator to const T*. operator const ::size_t* () const { return data_; } }; namespace detail { // Generic getInfoHelper. The final parameter is used to guide overload // resolution: the actual parameter passed is an int, which makes this // a worse conversion sequence than a specialization that declares the // parameter as an int. template inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long) { return f(name, sizeof(T), param, NULL); } // Specialized getInfoHelper for VECTOR_CLASS params template inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS* param, long) { ::size_t required; cl_int err = f(name, 0, NULL, &required); if (err != CL_SUCCESS) { return err; } T* value = (T*) alloca(required); err = f(name, required, value, NULL); if (err != CL_SUCCESS) { return err; } param->assign(&value[0], &value[required/sizeof(T)]); return CL_SUCCESS; } /* Specialization for reference-counted types. This depends on the * existence of Wrapper::cl_type, and none of the other types having the * cl_type member. Note that simplify specifying the parameter as Wrapper * does not work, because when using a derived type (e.g. Context) the generic * template will provide a better match. */ template inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS* param, int, typename T::cl_type = 0) { ::size_t required; cl_int err = f(name, 0, NULL, &required); if (err != CL_SUCCESS) { return err; } typename T::cl_type * value = (typename T::cl_type *) alloca(required); err = f(name, required, value, NULL); if (err != CL_SUCCESS) { return err; } ::size_t elements = required / sizeof(typename T::cl_type); param->assign(&value[0], &value[elements]); for (::size_t i = 0; i < elements; i++) { if (value[i] != NULL) { err = (*param)[i].retain(); if (err != CL_SUCCESS) { return err; } } } return CL_SUCCESS; } // Specialized for getInfo template inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS* param, int) { cl_int err = f(name, param->size() * sizeof(char *), &(*param)[0], NULL); if (err != CL_SUCCESS) { return err; } return CL_SUCCESS; } // Specialized GetInfoHelper for STRING_CLASS params template inline cl_int getInfoHelper(Func f, cl_uint name, STRING_CLASS* param, long) { ::size_t required; cl_int err = f(name, 0, NULL, &required); if (err != CL_SUCCESS) { return err; } char* value = (char*) alloca(required); err = f(name, required, value, NULL); if (err != CL_SUCCESS) { return err; } *param = value; return CL_SUCCESS; } // Specialized GetInfoHelper for cl::size_t params template inline cl_int getInfoHelper(Func f, cl_uint name, size_t* param, long) { ::size_t required; cl_int err = f(name, 0, NULL, &required); if (err != CL_SUCCESS) { return err; } ::size_t* value = (::size_t*) alloca(required); err = f(name, required, value, NULL); if (err != CL_SUCCESS) { return err; } for(int i = 0; i < N; ++i) { (*param)[i] = value[i]; } return CL_SUCCESS; } template struct ReferenceHandler; /* Specialization for reference-counted types. This depends on the * existence of Wrapper::cl_type, and none of the other types having the * cl_type member. Note that simplify specifying the parameter as Wrapper * does not work, because when using a derived type (e.g. Context) the generic * template will provide a better match. */ template inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_type = 0) { typename T::cl_type value; cl_int err = f(name, sizeof(value), &value, NULL); if (err != CL_SUCCESS) { return err; } *param = value; if (value != NULL) { err = param->retain(); if (err != CL_SUCCESS) { return err; } } return CL_SUCCESS; } #define __PARAM_NAME_INFO_1_0(F) \ F(cl_platform_info, CL_PLATFORM_PROFILE, STRING_CLASS) \ F(cl_platform_info, CL_PLATFORM_VERSION, STRING_CLASS) \ F(cl_platform_info, CL_PLATFORM_NAME, STRING_CLASS) \ F(cl_platform_info, CL_PLATFORM_VENDOR, STRING_CLASS) \ F(cl_platform_info, CL_PLATFORM_EXTENSIONS, STRING_CLASS) \ \ F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \ F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, ::size_t) \ F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, VECTOR_CLASS< ::size_t>) \ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \ F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \ F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \ F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, ::size_t) \ F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, ::size_t) \ F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, ::size_t) \ F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, ::size_t) \ F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, ::size_t) \ F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \ F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, ::size_t) \ F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \ F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \ F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \ F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \ F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \ F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\ F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \ F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \ F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \ F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \ F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \ F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \ F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \ F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, ::size_t) \ F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \ F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \ F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \ F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \ F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties) \ F(cl_device_info, CL_DEVICE_PLATFORM, cl_platform_id) \ F(cl_device_info, CL_DEVICE_NAME, STRING_CLASS) \ F(cl_device_info, CL_DEVICE_VENDOR, STRING_CLASS) \ F(cl_device_info, CL_DRIVER_VERSION, STRING_CLASS) \ F(cl_device_info, CL_DEVICE_PROFILE, STRING_CLASS) \ F(cl_device_info, CL_DEVICE_VERSION, STRING_CLASS) \ F(cl_device_info, CL_DEVICE_EXTENSIONS, STRING_CLASS) \ \ F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \ F(cl_context_info, CL_CONTEXT_DEVICES, VECTOR_CLASS) \ F(cl_context_info, CL_CONTEXT_PROPERTIES, VECTOR_CLASS) \ \ F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \ F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \ F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \ F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_uint) \ \ F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \ F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \ F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \ F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \ \ F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \ F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \ F(cl_mem_info, CL_MEM_SIZE, ::size_t) \ F(cl_mem_info, CL_MEM_HOST_PTR, void*) \ F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \ F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \ F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \ \ F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \ F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, ::size_t) \ F(cl_image_info, CL_IMAGE_ROW_PITCH, ::size_t) \ F(cl_image_info, CL_IMAGE_SLICE_PITCH, ::size_t) \ F(cl_image_info, CL_IMAGE_WIDTH, ::size_t) \ F(cl_image_info, CL_IMAGE_HEIGHT, ::size_t) \ F(cl_image_info, CL_IMAGE_DEPTH, ::size_t) \ \ F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \ F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \ F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_addressing_mode) \ F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_filter_mode) \ F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_bool) \ \ F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \ F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \ F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \ F(cl_program_info, CL_PROGRAM_DEVICES, VECTOR_CLASS) \ F(cl_program_info, CL_PROGRAM_SOURCE, STRING_CLASS) \ F(cl_program_info, CL_PROGRAM_BINARY_SIZES, VECTOR_CLASS< ::size_t>) \ F(cl_program_info, CL_PROGRAM_BINARIES, VECTOR_CLASS) \ \ F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \ F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, STRING_CLASS) \ F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, STRING_CLASS) \ \ F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, STRING_CLASS) \ F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \ F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \ F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \ F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \ \ F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, ::size_t) \ F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::size_t<3>) \ F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \ \ F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \ F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \ F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \ F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties) #if defined(CL_VERSION_1_1) #define __PARAM_NAME_INFO_1_1(F) \ F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\ F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \ F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \ F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \ F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \ F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \ F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \ \ F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \ F(cl_mem_info, CL_MEM_OFFSET, ::size_t) \ \ F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, ::size_t) \ F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \ \ F(cl_event_info, CL_EVENT_CONTEXT, cl::Context) #endif // CL_VERSION_1_1 #if defined(CL_VERSION_1_2) #define __PARAM_NAME_INFO_1_2(F) \ F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer) \ \ F(cl_program_info, CL_PROGRAM_NUM_KERNELS, ::size_t) \ F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, STRING_CLASS) \ \ F(cl_program_build_info, CL_PROGRAM_BINARY_TYPE, cl_program_binary_type) \ \ F(cl_kernel_info, CL_KERNEL_ATTRIBUTES, STRING_CLASS) \ \ F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \ F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \ F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, STRING_CLASS) \ F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, STRING_CLASS) \ \ F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl_device_id) \ F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, VECTOR_CLASS) \ F(cl_device_info, CL_DEVICE_PARTITION_TYPE, VECTOR_CLASS) \ F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint) \ F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, ::size_t) \ F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \ F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, STRING_CLASS) #endif // #if defined(CL_VERSION_1_2) #if defined(USE_CL_DEVICE_FISSION) #define __PARAM_NAME_DEVICE_FISSION(F) \ F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl_device_id) \ F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, VECTOR_CLASS) \ F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, VECTOR_CLASS) \ F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \ F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, VECTOR_CLASS) #endif // USE_CL_DEVICE_FISSION template struct param_traits {}; #define __CL_DECLARE_PARAM_TRAITS(token, param_name, T) \ struct token; \ template<> \ struct param_traits \ { \ enum { value = param_name }; \ typedef T param_type; \ }; __PARAM_NAME_INFO_1_0(__CL_DECLARE_PARAM_TRAITS) #if defined(CL_VERSION_1_1) __PARAM_NAME_INFO_1_1(__CL_DECLARE_PARAM_TRAITS) #endif // CL_VERSION_1_1 #if defined(CL_VERSION_1_2) __PARAM_NAME_INFO_1_2(__CL_DECLARE_PARAM_TRAITS) #endif // CL_VERSION_1_1 #if defined(USE_CL_DEVICE_FISSION) __PARAM_NAME_DEVICE_FISSION(__CL_DECLARE_PARAM_TRAITS); #endif // USE_CL_DEVICE_FISSION #ifdef CL_PLATFORM_ICD_SUFFIX_KHR __CL_DECLARE_PARAM_TRAITS(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR, STRING_CLASS) #endif #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong) #endif #ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_FREE_MEMORY_AMD, VECTOR_CLASS< ::size_t>) #endif #ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD, cl_uint) #endif #ifdef CL_DEVICE_SIMD_WIDTH_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_WIDTH_AMD, cl_uint) #endif #ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD, cl_uint) #endif #ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WAVEFRONT_WIDTH_AMD, cl_uint) #endif #ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD, cl_uint) #endif #ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD, cl_uint) #endif #ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD, cl_uint) #endif #ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD, cl_uint) #endif #ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_LOCAL_MEM_BANKS_AMD, cl_uint) #endif #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint) #endif #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint) #endif #ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint) #endif #ifdef CL_DEVICE_WARP_SIZE_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint) #endif #ifdef CL_DEVICE_GPU_OVERLAP_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool) #endif #ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool) #endif #ifdef CL_DEVICE_INTEGRATED_MEMORY_NV __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool) #endif // Convenience functions template inline cl_int getInfo(Func f, cl_uint name, T* param) { return getInfoHelper(f, name, param, 0); } template struct GetInfoFunctor0 { Func f_; const Arg0& arg0_; cl_int operator ()( cl_uint param, ::size_t size, void* value, ::size_t* size_ret) { return f_(arg0_, param, size, value, size_ret); } }; template struct GetInfoFunctor1 { Func f_; const Arg0& arg0_; const Arg1& arg1_; cl_int operator ()( cl_uint param, ::size_t size, void* value, ::size_t* size_ret) { return f_(arg0_, arg1_, param, size, value, size_ret); } }; template inline cl_int getInfo(Func f, const Arg0& arg0, cl_uint name, T* param) { GetInfoFunctor0 f0 = { f, arg0 }; return getInfoHelper(f0, name, param, 0); } template inline cl_int getInfo(Func f, const Arg0& arg0, const Arg1& arg1, cl_uint name, T* param) { GetInfoFunctor1 f0 = { f, arg0, arg1 }; return getInfoHelper(f0, name, param, 0); } template struct ReferenceHandler { }; #if defined(CL_VERSION_1_2) /** * OpenCL 1.2 devices do have retain/release. */ template <> struct ReferenceHandler { /** * Retain the device. * \param device A valid device created using createSubDevices * \return * CL_SUCCESS if the function executed successfully. * CL_INVALID_DEVICE if device was not a valid subdevice * CL_OUT_OF_RESOURCES * CL_OUT_OF_HOST_MEMORY */ static cl_int retain(cl_device_id device) { return ::clRetainDevice(device); } /** * Retain the device. * \param device A valid device created using createSubDevices * \return * CL_SUCCESS if the function executed successfully. * CL_INVALID_DEVICE if device was not a valid subdevice * CL_OUT_OF_RESOURCES * CL_OUT_OF_HOST_MEMORY */ static cl_int release(cl_device_id device) { return ::clReleaseDevice(device); } }; #else // #if defined(CL_VERSION_1_2) /** * OpenCL 1.1 devices do not have retain/release. */ template <> struct ReferenceHandler { // cl_device_id does not have retain(). static cl_int retain(cl_device_id) { return CL_SUCCESS; } // cl_device_id does not have release(). static cl_int release(cl_device_id) { return CL_SUCCESS; } }; #endif // #if defined(CL_VERSION_1_2) template <> struct ReferenceHandler { // cl_platform_id does not have retain(). static cl_int retain(cl_platform_id) { return CL_SUCCESS; } // cl_platform_id does not have release(). static cl_int release(cl_platform_id) { return CL_SUCCESS; } }; template <> struct ReferenceHandler { static cl_int retain(cl_context context) { return ::clRetainContext(context); } static cl_int release(cl_context context) { return ::clReleaseContext(context); } }; template <> struct ReferenceHandler { static cl_int retain(cl_command_queue queue) { return ::clRetainCommandQueue(queue); } static cl_int release(cl_command_queue queue) { return ::clReleaseCommandQueue(queue); } }; template <> struct ReferenceHandler { static cl_int retain(cl_mem memory) { return ::clRetainMemObject(memory); } static cl_int release(cl_mem memory) { return ::clReleaseMemObject(memory); } }; template <> struct ReferenceHandler { static cl_int retain(cl_sampler sampler) { return ::clRetainSampler(sampler); } static cl_int release(cl_sampler sampler) { return ::clReleaseSampler(sampler); } }; template <> struct ReferenceHandler { static cl_int retain(cl_program program) { return ::clRetainProgram(program); } static cl_int release(cl_program program) { return ::clReleaseProgram(program); } }; template <> struct ReferenceHandler { static cl_int retain(cl_kernel kernel) { return ::clRetainKernel(kernel); } static cl_int release(cl_kernel kernel) { return ::clReleaseKernel(kernel); } }; template <> struct ReferenceHandler { static cl_int retain(cl_event event) { return ::clRetainEvent(event); } static cl_int release(cl_event event) { return ::clReleaseEvent(event); } }; // Extracts version number with major in the upper 16 bits, minor in the lower 16 static cl_uint getVersion(const char *versionInfo) { int highVersion = 0; int lowVersion = 0; int index = 7; while(versionInfo[index] != '.' ) { highVersion *= 10; highVersion += versionInfo[index]-'0'; ++index; } ++index; while(versionInfo[index] != ' ' ) { lowVersion *= 10; lowVersion += versionInfo[index]-'0'; ++index; } return (highVersion << 16) | lowVersion; } static cl_uint getPlatformVersion(cl_platform_id platform) { ::size_t size = 0; clGetPlatformInfo(platform, CL_PLATFORM_VERSION, 0, NULL, &size); char *versionInfo = (char *) alloca(size); clGetPlatformInfo(platform, CL_PLATFORM_VERSION, size, &versionInfo[0], &size); return getVersion(versionInfo); } static cl_uint getDevicePlatformVersion(cl_device_id device) { cl_platform_id platform; clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(platform), &platform, NULL); return getPlatformVersion(platform); } #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) static cl_uint getContextPlatformVersion(cl_context context) { // The platform cannot be queried directly, so we first have to grab a // device and obtain its context ::size_t size = 0; clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &size); if (size == 0) return 0; cl_device_id *devices = (cl_device_id *) alloca(size); clGetContextInfo(context, CL_CONTEXT_DEVICES, size, devices, NULL); return getDevicePlatformVersion(devices[0]); } #endif // #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) template class Wrapper { public: typedef T cl_type; protected: cl_type object_; public: Wrapper() : object_(NULL) { } Wrapper(const cl_type &obj) : object_(obj) { } ~Wrapper() { if (object_ != NULL) { release(); } } Wrapper(const Wrapper& rhs) { object_ = rhs.object_; if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); } } Wrapper& operator = (const Wrapper& rhs) { if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); } object_ = rhs.object_; if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); } return *this; } Wrapper& operator = (const cl_type &rhs) { if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); } object_ = rhs; return *this; } cl_type operator ()() const { return object_; } cl_type& operator ()() { return object_; } protected: template friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type); cl_int retain() const { return ReferenceHandler::retain(object_); } cl_int release() const { return ReferenceHandler::release(object_); } }; template <> class Wrapper { public: typedef cl_device_id cl_type; protected: cl_type object_; bool referenceCountable_; static bool isReferenceCountable(cl_device_id device) { bool retVal = false; if (device != NULL) { int version = getDevicePlatformVersion(device); if(version > ((1 << 16) + 1)) { retVal = true; } } return retVal; } public: Wrapper() : object_(NULL), referenceCountable_(false) { } Wrapper(const cl_type &obj) : object_(obj), referenceCountable_(false) { referenceCountable_ = isReferenceCountable(obj); } ~Wrapper() { if (object_ != NULL) { release(); } } Wrapper(const Wrapper& rhs) { object_ = rhs.object_; referenceCountable_ = isReferenceCountable(object_); if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); } } Wrapper& operator = (const Wrapper& rhs) { if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); } object_ = rhs.object_; referenceCountable_ = rhs.referenceCountable_; if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); } return *this; } Wrapper& operator = (const cl_type &rhs) { if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); } object_ = rhs; referenceCountable_ = isReferenceCountable(object_); return *this; } cl_type operator ()() const { return object_; } cl_type& operator ()() { return object_; } protected: template friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type); template friend inline cl_int getInfoHelper(Func, cl_uint, VECTOR_CLASS*, int, typename U::cl_type); cl_int retain() const { if( referenceCountable_ ) { return ReferenceHandler::retain(object_); } else { return CL_SUCCESS; } } cl_int release() const { if( referenceCountable_ ) { return ReferenceHandler::release(object_); } else { return CL_SUCCESS; } } }; } // namespace detail //! \endcond /*! \stuct ImageFormat * \brief Adds constructors and member functions for cl_image_format. * * \see cl_image_format */ struct ImageFormat : public cl_image_format { //! \brief Default constructor - performs no initialization. ImageFormat(){} //! \brief Initializing constructor. ImageFormat(cl_channel_order order, cl_channel_type type) { image_channel_order = order; image_channel_data_type = type; } //! \brief Assignment operator. ImageFormat& operator = (const ImageFormat& rhs) { if (this != &rhs) { this->image_channel_data_type = rhs.image_channel_data_type; this->image_channel_order = rhs.image_channel_order; } return *this; } }; /*! \brief Class interface for cl_device_id. * * \note Copies of these objects are inexpensive, since they don't 'own' * any underlying resources or data structures. * * \see cl_device_id */ class Device : public detail::Wrapper { public: //! \brief Default constructor - initializes to NULL. Device() : detail::Wrapper() { } /*! \brief Copy constructor. * * This simply copies the device ID value, which is an inexpensive operation. */ Device(const Device& device) : detail::Wrapper(device) { } /*! \brief Constructor from cl_device_id. * * This simply copies the device ID value, which is an inexpensive operation. */ Device(const cl_device_id &device) : detail::Wrapper(device) { } /*! \brief Returns the first device on the default context. * * \see Context::getDefault() */ static Device getDefault(cl_int * err = NULL); /*! \brief Assignment operator from Device. * * This simply copies the device ID value, which is an inexpensive operation. */ Device& operator = (const Device& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_device_id. * * This simply copies the device ID value, which is an inexpensive operation. */ Device& operator = (const cl_device_id& rhs) { detail::Wrapper::operator=(rhs); return *this; } //! \brief Wrapper for clGetDeviceInfo(). template cl_int getInfo(cl_device_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetDeviceInfo, object_, name, param), __GET_DEVICE_INFO_ERR); } //! \brief Wrapper for clGetDeviceInfo() that returns by value. template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_device_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } /** * CL 1.2 version */ #if defined(CL_VERSION_1_2) //! \brief Wrapper for clCreateSubDevicesEXT(). cl_int createSubDevices( const cl_device_partition_property * properties, VECTOR_CLASS* devices) { cl_uint n = 0; cl_int err = clCreateSubDevices(object_, properties, 0, NULL, &n); if (err != CL_SUCCESS) { return detail::errHandler(err, __CREATE_SUB_DEVICES); } cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id)); err = clCreateSubDevices(object_, properties, n, ids, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __CREATE_SUB_DEVICES); } devices->assign(&ids[0], &ids[n]); return CL_SUCCESS; } #endif // #if defined(CL_VERSION_1_2) /** * CL 1.1 version that uses device fission. */ #if defined(CL_VERSION_1_1) #if defined(USE_CL_DEVICE_FISSION) cl_int createSubDevices( const cl_device_partition_property_ext * properties, VECTOR_CLASS* devices) { typedef CL_API_ENTRY cl_int ( CL_API_CALL * PFN_clCreateSubDevicesEXT)( cl_device_id /*in_device*/, const cl_device_partition_property_ext * /* properties */, cl_uint /*num_entries*/, cl_device_id * /*out_devices*/, cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1; static PFN_clCreateSubDevicesEXT pfn_clCreateSubDevicesEXT = NULL; __INIT_CL_EXT_FCN_PTR(clCreateSubDevicesEXT); cl_uint n = 0; cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0, NULL, &n); if (err != CL_SUCCESS) { return detail::errHandler(err, __CREATE_SUB_DEVICES); } cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id)); err = pfn_clCreateSubDevicesEXT(object_, properties, n, ids, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __CREATE_SUB_DEVICES); } devices->assign(&ids[0], &ids[n]); return CL_SUCCESS; } #endif // #if defined(USE_CL_DEVICE_FISSION) #endif // #if defined(CL_VERSION_1_1) }; /*! \brief Class interface for cl_platform_id. * * \note Copies of these objects are inexpensive, since they don't 'own' * any underlying resources or data structures. * * \see cl_platform_id */ class Platform : public detail::Wrapper { public: //! \brief Default constructor - initializes to NULL. Platform() : detail::Wrapper() { } /*! \brief Copy constructor. * * This simply copies the platform ID value, which is an inexpensive operation. */ Platform(const Platform& platform) : detail::Wrapper(platform) { } /*! \brief Constructor from cl_platform_id. * * This simply copies the platform ID value, which is an inexpensive operation. */ Platform(const cl_platform_id &platform) : detail::Wrapper(platform) { } /*! \brief Assignment operator from Platform. * * This simply copies the platform ID value, which is an inexpensive operation. */ Platform& operator = (const Platform& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_platform_id. * * This simply copies the platform ID value, which is an inexpensive operation. */ Platform& operator = (const cl_platform_id& rhs) { detail::Wrapper::operator=(rhs); return *this; } //! \brief Wrapper for clGetPlatformInfo(). cl_int getInfo(cl_platform_info name, STRING_CLASS* param) const { return detail::errHandler( detail::getInfo(&::clGetPlatformInfo, object_, name, param), __GET_PLATFORM_INFO_ERR); } //! \brief Wrapper for clGetPlatformInfo() that returns by value. template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_platform_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } /*! \brief Gets a list of devices for this platform. * * Wraps clGetDeviceIDs(). */ cl_int getDevices( cl_device_type type, VECTOR_CLASS* devices) const { cl_uint n = 0; if( devices == NULL ) { return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR); } cl_int err = ::clGetDeviceIDs(object_, type, 0, NULL, &n); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_DEVICE_IDS_ERR); } cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id)); err = ::clGetDeviceIDs(object_, type, n, ids, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_DEVICE_IDS_ERR); } devices->assign(&ids[0], &ids[n]); return CL_SUCCESS; } #if defined(USE_DX_INTEROP) /*! \brief Get the list of available D3D10 devices. * * \param d3d_device_source. * * \param d3d_object. * * \param d3d_device_set. * * \param devices returns a vector of OpenCL D3D10 devices found. The cl::Device * values returned in devices can be used to identify a specific OpenCL * device. If \a devices argument is NULL, this argument is ignored. * * \return One of the following values: * - CL_SUCCESS if the function is executed successfully. * * The application can query specific capabilities of the OpenCL device(s) * returned by cl::getDevices. This can be used by the application to * determine which device(s) to use. * * \note In the case that exceptions are enabled and a return value * other than CL_SUCCESS is generated, then cl::Error exception is * generated. */ cl_int getDevices( cl_d3d10_device_source_khr d3d_device_source, void * d3d_object, cl_d3d10_device_set_khr d3d_device_set, VECTOR_CLASS* devices) const { typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)( cl_platform_id platform, cl_d3d10_device_source_khr d3d_device_source, void * d3d_object, cl_d3d10_device_set_khr d3d_device_set, cl_uint num_entries, cl_device_id * devices, cl_uint* num_devices); if( devices == NULL ) { return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR); } static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR = NULL; __INIT_CL_EXT_FCN_PTR_PLATFORM(object_, clGetDeviceIDsFromD3D10KHR); cl_uint n = 0; cl_int err = pfn_clGetDeviceIDsFromD3D10KHR( object_, d3d_device_source, d3d_object, d3d_device_set, 0, NULL, &n); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_DEVICE_IDS_ERR); } cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id)); err = pfn_clGetDeviceIDsFromD3D10KHR( object_, d3d_device_source, d3d_object, d3d_device_set, n, ids, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_DEVICE_IDS_ERR); } devices->assign(&ids[0], &ids[n]); return CL_SUCCESS; } #endif /*! \brief Gets a list of available platforms. * * Wraps clGetPlatformIDs(). */ static cl_int get( VECTOR_CLASS* platforms) { cl_uint n = 0; if( platforms == NULL ) { return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR); } cl_int err = ::clGetPlatformIDs(0, NULL, &n); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_PLATFORM_IDS_ERR); } cl_platform_id* ids = (cl_platform_id*) alloca( n * sizeof(cl_platform_id)); err = ::clGetPlatformIDs(n, ids, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_PLATFORM_IDS_ERR); } platforms->assign(&ids[0], &ids[n]); return CL_SUCCESS; } /*! \brief Gets the first available platform. * * Wraps clGetPlatformIDs(), returning the first result. */ static cl_int get( Platform * platform) { cl_uint n = 0; if( platform == NULL ) { return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR); } cl_int err = ::clGetPlatformIDs(0, NULL, &n); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_PLATFORM_IDS_ERR); } cl_platform_id* ids = (cl_platform_id*) alloca( n * sizeof(cl_platform_id)); err = ::clGetPlatformIDs(n, ids, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_PLATFORM_IDS_ERR); } *platform = ids[0]; return CL_SUCCESS; } /*! \brief Gets the first available platform, returning it by value. * * Wraps clGetPlatformIDs(), returning the first result. */ static Platform get( cl_int * errResult = NULL) { Platform platform; cl_uint n = 0; cl_int err = ::clGetPlatformIDs(0, NULL, &n); if (err != CL_SUCCESS) { detail::errHandler(err, __GET_PLATFORM_IDS_ERR); if (errResult != NULL) { *errResult = err; } } cl_platform_id* ids = (cl_platform_id*) alloca( n * sizeof(cl_platform_id)); err = ::clGetPlatformIDs(n, ids, NULL); if (err != CL_SUCCESS) { detail::errHandler(err, __GET_PLATFORM_IDS_ERR); } if (errResult != NULL) { *errResult = err; } return ids[0]; } static Platform getDefault( cl_int *errResult = NULL ) { return get(errResult); } #if defined(CL_VERSION_1_2) //! \brief Wrapper for clUnloadCompiler(). cl_int unloadCompiler() { return ::clUnloadPlatformCompiler(object_); } #endif // #if defined(CL_VERSION_1_2) }; // class Platform /** * Deprecated APIs for 1.2 */ #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) /** * Unload the OpenCL compiler. * \note Deprecated for OpenCL 1.2. Use Platform::unloadCompiler instead. */ inline CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int UnloadCompiler() CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED; inline cl_int UnloadCompiler() { return ::clUnloadCompiler(); } #endif // #if defined(CL_VERSION_1_1) /*! \brief Class interface for cl_context. * * \note Copies of these objects are shallow, meaning that the copy will refer * to the same underlying cl_context as the original. For details, see * clRetainContext() and clReleaseContext(). * * \see cl_context */ class Context : public detail::Wrapper { private: static volatile int default_initialized_; static Context default_; static volatile cl_int default_error_; public: /*! \brief Destructor. * * This calls clReleaseContext() on the value held by this instance. */ ~Context() { } /*! \brief Constructs a context including a list of specified devices. * * Wraps clCreateContext(). */ Context( const VECTOR_CLASS& devices, cl_context_properties* properties = NULL, void (CL_CALLBACK * notifyFptr)( const char *, const void *, ::size_t, void *) = NULL, void* data = NULL, cl_int* err = NULL) { cl_int error; ::size_t numDevices = devices.size(); cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id)); for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { deviceIDs[deviceIndex] = (devices[deviceIndex])(); } object_ = ::clCreateContext( properties, (cl_uint) numDevices, deviceIDs, notifyFptr, data, &error); detail::errHandler(error, __CREATE_CONTEXT_ERR); if (err != NULL) { *err = error; } } Context( const Device& device, cl_context_properties* properties = NULL, void (CL_CALLBACK * notifyFptr)( const char *, const void *, ::size_t, void *) = NULL, void* data = NULL, cl_int* err = NULL) { cl_int error; cl_device_id deviceID = device(); object_ = ::clCreateContext( properties, 1, &deviceID, notifyFptr, data, &error); detail::errHandler(error, __CREATE_CONTEXT_ERR); if (err != NULL) { *err = error; } } /*! \brief Constructs a context including all devices of a specified type. * * Wraps clCreateContextFromType(). */ Context( cl_device_type type, cl_context_properties* properties = NULL, void (CL_CALLBACK * notifyFptr)( const char *, const void *, ::size_t, void *) = NULL, void* data = NULL, cl_int* err = NULL) { cl_int error; #if !defined(__APPLE__) || !defined(__MACOS) cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 }; if (properties == NULL) { prop[1] = (cl_context_properties)Platform::get(&error)(); if (error != CL_SUCCESS) { detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR); if (err != NULL) { *err = error; return; } } properties = &prop[0]; } #endif object_ = ::clCreateContextFromType( properties, type, notifyFptr, data, &error); detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR); if (err != NULL) { *err = error; } } /*! \brief Returns a singleton context including all devices of CL_DEVICE_TYPE_DEFAULT. * * \note All calls to this function return the same cl_context as the first. */ static Context getDefault(cl_int * err = NULL) { int state = detail::compare_exchange( &default_initialized_, __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED); if (state & __DEFAULT_INITIALIZED) { if (err != NULL) { *err = default_error_; } return default_; } if (state & __DEFAULT_BEING_INITIALIZED) { // Assume writes will propagate eventually... while(default_initialized_ != __DEFAULT_INITIALIZED) { detail::fence(); } if (err != NULL) { *err = default_error_; } return default_; } cl_int error; default_ = Context( CL_DEVICE_TYPE_DEFAULT, NULL, NULL, NULL, &error); detail::fence(); default_error_ = error; // Assume writes will propagate eventually... default_initialized_ = __DEFAULT_INITIALIZED; detail::fence(); if (err != NULL) { *err = default_error_; } return default_; } //! \brief Default constructor - initializes to NULL. Context() : detail::Wrapper() { } /*! \brief Copy constructor. * * This calls clRetainContext() on the parameter's cl_context. */ Context(const Context& context) : detail::Wrapper(context) { } /*! \brief Constructor from cl_context - takes ownership. * * This effectively transfers ownership of a refcount on the cl_context * into the new Context object. */ __CL_EXPLICIT_CONSTRUCTORS Context(const cl_context& context) : detail::Wrapper(context) { } /*! \brief Assignment operator from Context. * * This calls clRetainContext() on the parameter and clReleaseContext() on * the previous value held by this instance. */ Context& operator = (const Context& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_context - takes ownership. * * This effectively transfers ownership of a refcount on the rhs and calls * clReleaseContext() on the value previously held by this instance. */ Context& operator = (const cl_context& rhs) { detail::Wrapper::operator=(rhs); return *this; } //! \brief Wrapper for clGetContextInfo(). template cl_int getInfo(cl_context_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetContextInfo, object_, name, param), __GET_CONTEXT_INFO_ERR); } //! \brief Wrapper for clGetContextInfo() that returns by value. template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_context_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } /*! \brief Gets a list of supported image formats. * * Wraps clGetSupportedImageFormats(). */ cl_int getSupportedImageFormats( cl_mem_flags flags, cl_mem_object_type type, VECTOR_CLASS* formats) const { cl_uint numEntries; cl_int err = ::clGetSupportedImageFormats( object_, flags, type, 0, NULL, &numEntries); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR); } ImageFormat* value = (ImageFormat*) alloca(numEntries * sizeof(ImageFormat)); err = ::clGetSupportedImageFormats( object_, flags, type, numEntries, (cl_image_format*) value, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR); } formats->assign(&value[0], &value[numEntries]); return CL_SUCCESS; } }; inline Device Device::getDefault(cl_int * err) { cl_int error; Device device; Context context = Context::getDefault(&error); detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); if (error != CL_SUCCESS) { if (err != NULL) { *err = error; } } else { device = context.getInfo()[0]; if (err != NULL) { *err = CL_SUCCESS; } } return device; } #ifdef _WIN32 __declspec(selectany) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED; __declspec(selectany) Context Context::default_; __declspec(selectany) volatile cl_int Context::default_error_ = CL_SUCCESS; #else __attribute__((weak)) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED; __attribute__((weak)) Context Context::default_; __attribute__((weak)) volatile cl_int Context::default_error_ = CL_SUCCESS; #endif /*! \brief Class interface for cl_event. * * \note Copies of these objects are shallow, meaning that the copy will refer * to the same underlying cl_event as the original. For details, see * clRetainEvent() and clReleaseEvent(). * * \see cl_event */ class Event : public detail::Wrapper { public: /*! \brief Destructor. * * This calls clReleaseEvent() on the value held by this instance. */ ~Event() { } //! \brief Default constructor - initializes to NULL. Event() : detail::Wrapper() { } /*! \brief Copy constructor. * * This calls clRetainEvent() on the parameter's cl_event. */ Event(const Event& event) : detail::Wrapper(event) { } /*! \brief Constructor from cl_event - takes ownership. * * This effectively transfers ownership of a refcount on the cl_event * into the new Event object. */ Event(const cl_event& event) : detail::Wrapper(event) { } /*! \brief Assignment operator from cl_event - takes ownership. * * This effectively transfers ownership of a refcount on the rhs and calls * clReleaseEvent() on the value previously held by this instance. */ Event& operator = (const Event& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_event. * * This calls clRetainEvent() on the parameter and clReleaseEvent() on * the previous value held by this instance. */ Event& operator = (const cl_event& rhs) { detail::Wrapper::operator=(rhs); return *this; } //! \brief Wrapper for clGetEventInfo(). template cl_int getInfo(cl_event_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetEventInfo, object_, name, param), __GET_EVENT_INFO_ERR); } //! \brief Wrapper for clGetEventInfo() that returns by value. template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_event_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } //! \brief Wrapper for clGetEventProfilingInfo(). template cl_int getProfilingInfo(cl_profiling_info name, T* param) const { return detail::errHandler(detail::getInfo( &::clGetEventProfilingInfo, object_, name, param), __GET_EVENT_PROFILE_INFO_ERR); } //! \brief Wrapper for clGetEventProfilingInfo() that returns by value. template typename detail::param_traits::param_type getProfilingInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_profiling_info, name>::param_type param; cl_int result = getProfilingInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } /*! \brief Blocks the calling thread until this event completes. * * Wraps clWaitForEvents(). */ cl_int wait() const { return detail::errHandler( ::clWaitForEvents(1, &object_), __WAIT_FOR_EVENTS_ERR); } #if defined(CL_VERSION_1_1) /*! \brief Registers a user callback function for a specific command execution status. * * Wraps clSetEventCallback(). */ cl_int setCallback( cl_int type, void (CL_CALLBACK * pfn_notify)(cl_event, cl_int, void *), void * user_data = NULL) { return detail::errHandler( ::clSetEventCallback( object_, type, pfn_notify, user_data), __SET_EVENT_CALLBACK_ERR); } #endif /*! \brief Blocks the calling thread until every event specified is complete. * * Wraps clWaitForEvents(). */ static cl_int waitForEvents(const VECTOR_CLASS& events) { return detail::errHandler( ::clWaitForEvents( (cl_uint) events.size(), (cl_event*)&events.front()), __WAIT_FOR_EVENTS_ERR); } }; #if defined(CL_VERSION_1_1) /*! \brief Class interface for user events (a subset of cl_event's). * * See Event for details about copy semantics, etc. */ class UserEvent : public Event { public: /*! \brief Constructs a user event on a given context. * * Wraps clCreateUserEvent(). */ UserEvent( const Context& context, cl_int * err = NULL) { cl_int error; object_ = ::clCreateUserEvent( context(), &error); detail::errHandler(error, __CREATE_USER_EVENT_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. UserEvent() : Event() { } //! \brief Copy constructor - performs shallow copy. UserEvent(const UserEvent& event) : Event(event) { } //! \brief Assignment Operator - performs shallow copy. UserEvent& operator = (const UserEvent& rhs) { if (this != &rhs) { Event::operator=(rhs); } return *this; } /*! \brief Sets the execution status of a user event object. * * Wraps clSetUserEventStatus(). */ cl_int setStatus(cl_int status) { return detail::errHandler( ::clSetUserEventStatus(object_,status), __SET_USER_EVENT_STATUS_ERR); } }; #endif /*! \brief Blocks the calling thread until every event specified is complete. * * Wraps clWaitForEvents(). */ inline static cl_int WaitForEvents(const VECTOR_CLASS& events) { return detail::errHandler( ::clWaitForEvents( (cl_uint) events.size(), (cl_event*)&events.front()), __WAIT_FOR_EVENTS_ERR); } /*! \brief Class interface for cl_mem. * * \note Copies of these objects are shallow, meaning that the copy will refer * to the same underlying cl_mem as the original. For details, see * clRetainMemObject() and clReleaseMemObject(). * * \see cl_mem */ class Memory : public detail::Wrapper { public: /*! \brief Destructor. * * This calls clReleaseMemObject() on the value held by this instance. */ ~Memory() {} //! \brief Default constructor - initializes to NULL. Memory() : detail::Wrapper() { } /*! \brief Copy constructor - performs shallow copy. * * This calls clRetainMemObject() on the parameter's cl_mem. */ Memory(const Memory& memory) : detail::Wrapper(memory) { } /*! \brief Constructor from cl_mem - takes ownership. * * This effectively transfers ownership of a refcount on the cl_mem * into the new Memory object. */ __CL_EXPLICIT_CONSTRUCTORS Memory(const cl_mem& memory) : detail::Wrapper(memory) { } /*! \brief Assignment operator from Memory. * * This calls clRetainMemObject() on the parameter and clReleaseMemObject() * on the previous value held by this instance. */ Memory& operator = (const Memory& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_mem - takes ownership. * * This effectively transfers ownership of a refcount on the rhs and calls * clReleaseMemObject() on the value previously held by this instance. */ Memory& operator = (const cl_mem& rhs) { detail::Wrapper::operator=(rhs); return *this; } //! \brief Wrapper for clGetMemObjectInfo(). template cl_int getInfo(cl_mem_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetMemObjectInfo, object_, name, param), __GET_MEM_OBJECT_INFO_ERR); } //! \brief Wrapper for clGetMemObjectInfo() that returns by value. template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_mem_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } #if defined(CL_VERSION_1_1) /*! \brief Registers a callback function to be called when the memory object * is no longer needed. * * Wraps clSetMemObjectDestructorCallback(). * * Repeated calls to this function, for a given cl_mem value, will append * to the list of functions called (in reverse order) when memory object's * resources are freed and the memory object is deleted. * * \note * The registered callbacks are associated with the underlying cl_mem * value - not the Memory class instance. */ cl_int setDestructorCallback( void (CL_CALLBACK * pfn_notify)(cl_mem, void *), void * user_data = NULL) { return detail::errHandler( ::clSetMemObjectDestructorCallback( object_, pfn_notify, user_data), __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR); } #endif }; // Pre-declare copy functions class Buffer; template< typename IteratorType > cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer ); template< typename IteratorType > cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator ); /*! \brief Class interface for Buffer Memory Objects. * * See Memory for details about copy semantics, etc. * * \see Memory */ class Buffer : public Memory { public: /*! \brief Constructs a Buffer in a specified context. * * Wraps clCreateBuffer(). * * \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was * specified. Note alignment & exclusivity requirements. */ Buffer( const Context& context, cl_mem_flags flags, ::size_t size, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error); detail::errHandler(error, __CREATE_BUFFER_ERR); if (err != NULL) { *err = error; } } /*! \brief Constructs a Buffer in the default context. * * Wraps clCreateBuffer(). * * \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was * specified. Note alignment & exclusivity requirements. * * \see Context::getDefault() */ Buffer( cl_mem_flags flags, ::size_t size, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; Context context = Context::getDefault(err); object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error); detail::errHandler(error, __CREATE_BUFFER_ERR); if (err != NULL) { *err = error; } } /*! * \brief Construct a Buffer from a host container via iterators. * If useHostPtr is specified iterators must be random access. */ template< typename IteratorType > Buffer( IteratorType startIterator, IteratorType endIterator, bool readOnly, bool useHostPtr = false, cl_int* err = NULL) { typedef typename std::iterator_traits::value_type DataType; cl_int error; cl_mem_flags flags = 0; if( readOnly ) { flags |= CL_MEM_READ_ONLY; } else { flags |= CL_MEM_READ_WRITE; } if( useHostPtr ) { flags |= CL_MEM_USE_HOST_PTR; } ::size_t size = sizeof(DataType)*(endIterator - startIterator); Context context = Context::getDefault(err); if( useHostPtr ) { object_ = ::clCreateBuffer(context(), flags, size, static_cast(&*startIterator), &error); } else { object_ = ::clCreateBuffer(context(), flags, size, 0, &error); } detail::errHandler(error, __CREATE_BUFFER_ERR); if (err != NULL) { *err = error; } if( !useHostPtr ) { error = cl::copy(startIterator, endIterator, *this); detail::errHandler(error, __CREATE_BUFFER_ERR); if (err != NULL) { *err = error; } } } //! \brief Default constructor - initializes to NULL. Buffer() : Memory() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Buffer(const Buffer& buffer) : Memory(buffer) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Buffer(const cl_mem& buffer) : Memory(buffer) { } /*! \brief Assignment from Buffer - performs shallow copy. * * See Memory for further details. */ Buffer& operator = (const Buffer& rhs) { if (this != &rhs) { Memory::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Buffer& operator = (const cl_mem& rhs) { Memory::operator=(rhs); return *this; } #if defined(CL_VERSION_1_1) /*! \brief Creates a new buffer object from this. * * Wraps clCreateSubBuffer(). */ Buffer createSubBuffer( cl_mem_flags flags, cl_buffer_create_type buffer_create_type, const void * buffer_create_info, cl_int * err = NULL) { Buffer result; cl_int error; result.object_ = ::clCreateSubBuffer( object_, flags, buffer_create_type, buffer_create_info, &error); detail::errHandler(error, __CREATE_SUBBUFFER_ERR); if (err != NULL) { *err = error; } return result; } #endif }; #if defined (USE_DX_INTEROP) /*! \brief Class interface for creating OpenCL buffers from ID3D10Buffer's. * * This is provided to facilitate interoperability with Direct3D. * * See Memory for details about copy semantics, etc. * * \see Memory */ class BufferD3D10 : public Buffer { public: typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)( cl_context context, cl_mem_flags flags, ID3D10Buffer* buffer, cl_int* errcode_ret); /*! \brief Constructs a BufferD3D10, in a specified context, from a * given ID3D10Buffer. * * Wraps clCreateFromD3D10BufferKHR(). */ BufferD3D10( const Context& context, cl_mem_flags flags, ID3D10Buffer* bufobj, cl_int * err = NULL) { static PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR = NULL; #if defined(CL_VERSION_1_2) vector props = context.getInfo(); cl_platform platform = -1; for( int i = 0; i < props.size(); ++i ) { if( props[i] == CL_CONTEXT_PLATFORM ) { platform = props[i+1]; } } __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clCreateFromD3D10BufferKHR); #endif #if defined(CL_VERSION_1_1) __INIT_CL_EXT_FCN_PTR(clCreateFromD3D10BufferKHR); #endif cl_int error; object_ = pfn_clCreateFromD3D10BufferKHR( context(), flags, bufobj, &error); detail::errHandler(error, __CREATE_GL_BUFFER_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. BufferD3D10() : Buffer() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ BufferD3D10(const BufferD3D10& buffer) : Buffer(buffer) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS BufferD3D10(const cl_mem& buffer) : Buffer(buffer) { } /*! \brief Assignment from BufferD3D10 - performs shallow copy. * * See Memory for further details. */ BufferD3D10& operator = (const BufferD3D10& rhs) { if (this != &rhs) { Buffer::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ BufferD3D10& operator = (const cl_mem& rhs) { Buffer::operator=(rhs); return *this; } }; #endif /*! \brief Class interface for GL Buffer Memory Objects. * * This is provided to facilitate interoperability with OpenGL. * * See Memory for details about copy semantics, etc. * * \see Memory */ class BufferGL : public Buffer { public: /*! \brief Constructs a BufferGL in a specified context, from a given * GL buffer. * * Wraps clCreateFromGLBuffer(). */ BufferGL( const Context& context, cl_mem_flags flags, GLuint bufobj, cl_int * err = NULL) { cl_int error; object_ = ::clCreateFromGLBuffer( context(), flags, bufobj, &error); detail::errHandler(error, __CREATE_GL_BUFFER_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. BufferGL() : Buffer() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ BufferGL(const BufferGL& buffer) : Buffer(buffer) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS BufferGL(const cl_mem& buffer) : Buffer(buffer) { } /*! \brief Assignment from BufferGL - performs shallow copy. * * See Memory for further details. */ BufferGL& operator = (const BufferGL& rhs) { if (this != &rhs) { Buffer::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ BufferGL& operator = (const cl_mem& rhs) { Buffer::operator=(rhs); return *this; } //! \brief Wrapper for clGetGLObjectInfo(). cl_int getObjectInfo( cl_gl_object_type *type, GLuint * gl_object_name) { return detail::errHandler( ::clGetGLObjectInfo(object_,type,gl_object_name), __GET_GL_OBJECT_INFO_ERR); } }; /*! \brief Class interface for GL Render Buffer Memory Objects. * * This is provided to facilitate interoperability with OpenGL. * * See Memory for details about copy semantics, etc. * * \see Memory */ class BufferRenderGL : public Buffer { public: /*! \brief Constructs a BufferRenderGL in a specified context, from a given * GL Renderbuffer. * * Wraps clCreateFromGLRenderbuffer(). */ BufferRenderGL( const Context& context, cl_mem_flags flags, GLuint bufobj, cl_int * err = NULL) { cl_int error; object_ = ::clCreateFromGLRenderbuffer( context(), flags, bufobj, &error); detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. BufferRenderGL() : Buffer() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ BufferRenderGL(const BufferGL& buffer) : Buffer(buffer) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS BufferRenderGL(const cl_mem& buffer) : Buffer(buffer) { } /*! \brief Assignment from BufferGL - performs shallow copy. * * See Memory for further details. */ BufferRenderGL& operator = (const BufferRenderGL& rhs) { if (this != &rhs) { Buffer::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ BufferRenderGL& operator = (const cl_mem& rhs) { Buffer::operator=(rhs); return *this; } //! \brief Wrapper for clGetGLObjectInfo(). cl_int getObjectInfo( cl_gl_object_type *type, GLuint * gl_object_name) { return detail::errHandler( ::clGetGLObjectInfo(object_,type,gl_object_name), __GET_GL_OBJECT_INFO_ERR); } }; /*! \brief C++ base class for Image Memory objects. * * See Memory for details about copy semantics, etc. * * \see Memory */ class Image : public Memory { protected: //! \brief Default constructor - initializes to NULL. Image() : Memory() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Image(const Image& image) : Memory(image) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Image(const cl_mem& image) : Memory(image) { } /*! \brief Assignment from Image - performs shallow copy. * * See Memory for further details. */ Image& operator = (const Image& rhs) { if (this != &rhs) { Memory::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Image& operator = (const cl_mem& rhs) { Memory::operator=(rhs); return *this; } public: //! \brief Wrapper for clGetImageInfo(). template cl_int getImageInfo(cl_image_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetImageInfo, object_, name, param), __GET_IMAGE_INFO_ERR); } //! \brief Wrapper for clGetImageInfo() that returns by value. template typename detail::param_traits::param_type getImageInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_image_info, name>::param_type param; cl_int result = getImageInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } }; #if defined(CL_VERSION_1_2) /*! \brief Class interface for 1D Image Memory objects. * * See Memory for details about copy semantics, etc. * * \see Memory */ class Image1D : public Image { public: /*! \brief Constructs a 1D Image in a specified context. * * Wraps clCreateImage(). */ Image1D( const Context& context, cl_mem_flags flags, ImageFormat format, ::size_t width, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE1D; desc.image_width = width; desc.image_row_pitch = 0; desc.num_mip_levels = 0; desc.num_samples = 0; desc.buffer = 0; object_ = ::clCreateImage( context(), flags, &format, &desc, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. Image1D() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Image1D(const Image1D& image1D) : Image(image1D) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Image1D(const cl_mem& image1D) : Image(image1D) { } /*! \brief Assignment from Image1D - performs shallow copy. * * See Memory for further details. */ Image1D& operator = (const Image1D& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Image1D& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; /*! \class Image1DBuffer * \brief Image interface for 1D buffer images. */ class Image1DBuffer : public Image { public: Image1DBuffer( const Context& context, cl_mem_flags flags, ImageFormat format, ::size_t width, const Buffer &buffer, cl_int* err = NULL) { cl_int error; cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; desc.image_width = width; desc.image_row_pitch = 0; desc.num_mip_levels = 0; desc.num_samples = 0; desc.buffer = buffer(); object_ = ::clCreateImage( context(), flags, &format, &desc, NULL, &error); detail::errHandler(error, __CREATE_IMAGE_ERR); if (err != NULL) { *err = error; } } Image1DBuffer() { } Image1DBuffer(const Image1DBuffer& image1D) : Image(image1D) { } __CL_EXPLICIT_CONSTRUCTORS Image1DBuffer(const cl_mem& image1D) : Image(image1D) { } Image1DBuffer& operator = (const Image1DBuffer& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } Image1DBuffer& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; /*! \class Image1DArray * \brief Image interface for arrays of 1D images. */ class Image1DArray : public Image { public: Image1DArray( const Context& context, cl_mem_flags flags, ImageFormat format, ::size_t arraySize, ::size_t width, ::size_t rowPitch, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE1D_ARRAY; desc.image_array_size = arraySize; desc.image_width = width; desc.image_row_pitch = rowPitch; desc.num_mip_levels = 0; desc.num_samples = 0; desc.buffer = 0; object_ = ::clCreateImage( context(), flags, &format, &desc, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE_ERR); if (err != NULL) { *err = error; } } Image1DArray() { } Image1DArray(const Image1DArray& imageArray) : Image(imageArray) { } __CL_EXPLICIT_CONSTRUCTORS Image1DArray(const cl_mem& imageArray) : Image(imageArray) { } Image1DArray& operator = (const Image1DArray& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } Image1DArray& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; #endif // #if defined(CL_VERSION_1_2) /*! \brief Class interface for 2D Image Memory objects. * * See Memory for details about copy semantics, etc. * * \see Memory */ class Image2D : public Image { public: /*! \brief Constructs a 1D Image in a specified context. * * Wraps clCreateImage(). */ Image2D( const Context& context, cl_mem_flags flags, ImageFormat format, ::size_t width, ::size_t height, ::size_t row_pitch = 0, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; bool useCreateImage; #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) // Run-time decision based on the actual platform { cl_uint version = detail::getContextPlatformVersion(context()); useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above } #elif defined(CL_VERSION_1_2) useCreateImage = true; #else useCreateImage = false; #endif #if defined(CL_VERSION_1_2) if (useCreateImage) { cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE2D; desc.image_width = width; desc.image_height = height; desc.image_row_pitch = row_pitch; desc.num_mip_levels = 0; desc.num_samples = 0; desc.buffer = 0; object_ = ::clCreateImage( context(), flags, &format, &desc, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE_ERR); if (err != NULL) { *err = error; } } #endif // #if defined(CL_VERSION_1_2) #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) if (!useCreateImage) { object_ = ::clCreateImage2D( context(), flags,&format, width, height, row_pitch, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE2D_ERR); if (err != NULL) { *err = error; } } #endif // #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) } //! \brief Default constructor - initializes to NULL. Image2D() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Image2D(const Image2D& image2D) : Image(image2D) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Image2D(const cl_mem& image2D) : Image(image2D) { } /*! \brief Assignment from Image2D - performs shallow copy. * * See Memory for further details. */ Image2D& operator = (const Image2D& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Image2D& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; #if !defined(CL_VERSION_1_2) /*! \brief Class interface for GL 2D Image Memory objects. * * This is provided to facilitate interoperability with OpenGL. * * See Memory for details about copy semantics, etc. * * \see Memory * \note Deprecated for OpenCL 1.2. Please use ImageGL instead. */ class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED Image2DGL CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED : public Image2D { public: /*! \brief Constructs an Image2DGL in a specified context, from a given * GL Texture. * * Wraps clCreateFromGLTexture2D(). */ Image2DGL( const Context& context, cl_mem_flags flags, GLenum target, GLint miplevel, GLuint texobj, cl_int * err = NULL) { cl_int error; object_ = ::clCreateFromGLTexture2D( context(), flags, target, miplevel, texobj, &error); detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. Image2DGL() : Image2D() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Image2DGL(const Image2DGL& image) : Image2D(image) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Image2DGL(const cl_mem& image) : Image2D(image) { } /*! \brief Assignment from Image2DGL - performs shallow copy. * * See Memory for further details. */ Image2DGL& operator = (const Image2DGL& rhs) { if (this != &rhs) { Image2D::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Image2DGL& operator = (const cl_mem& rhs) { Image2D::operator=(rhs); return *this; } }; #endif // #if !defined(CL_VERSION_1_2) #if defined(CL_VERSION_1_2) /*! \class Image2DArray * \brief Image interface for arrays of 2D images. */ class Image2DArray : public Image { public: Image2DArray( const Context& context, cl_mem_flags flags, ImageFormat format, ::size_t arraySize, ::size_t width, ::size_t height, ::size_t rowPitch, ::size_t slicePitch, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE2D_ARRAY; desc.image_array_size = arraySize; desc.image_width = width; desc.image_height = height; desc.image_row_pitch = rowPitch; desc.image_slice_pitch = slicePitch; desc.num_mip_levels = 0; desc.num_samples = 0; desc.buffer = 0; object_ = ::clCreateImage( context(), flags, &format, &desc, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE_ERR); if (err != NULL) { *err = error; } } Image2DArray() { } Image2DArray(const Image2DArray& imageArray) : Image(imageArray) { } __CL_EXPLICIT_CONSTRUCTORS Image2DArray(const cl_mem& imageArray) : Image(imageArray) { } Image2DArray& operator = (const Image2DArray& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } Image2DArray& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; #endif // #if defined(CL_VERSION_1_2) /*! \brief Class interface for 3D Image Memory objects. * * See Memory for details about copy semantics, etc. * * \see Memory */ class Image3D : public Image { public: /*! \brief Constructs a 3D Image in a specified context. * * Wraps clCreateImage(). */ Image3D( const Context& context, cl_mem_flags flags, ImageFormat format, ::size_t width, ::size_t height, ::size_t depth, ::size_t row_pitch = 0, ::size_t slice_pitch = 0, void* host_ptr = NULL, cl_int* err = NULL) { cl_int error; bool useCreateImage; #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) // Run-time decision based on the actual platform { cl_uint version = detail::getContextPlatformVersion(context()); useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above } #elif defined(CL_VERSION_1_2) useCreateImage = true; #else useCreateImage = false; #endif #if defined(CL_VERSION_1_2) if (useCreateImage) { cl_image_desc desc; desc.image_type = CL_MEM_OBJECT_IMAGE3D; desc.image_width = width; desc.image_height = height; desc.image_depth = depth; desc.image_row_pitch = row_pitch; desc.image_slice_pitch = slice_pitch; desc.num_mip_levels = 0; desc.num_samples = 0; desc.buffer = 0; object_ = ::clCreateImage( context(), flags, &format, &desc, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE_ERR); if (err != NULL) { *err = error; } } #endif // #if defined(CL_VERSION_1_2) #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) if (!useCreateImage) { object_ = ::clCreateImage3D( context(), flags, &format, width, height, depth, row_pitch, slice_pitch, host_ptr, &error); detail::errHandler(error, __CREATE_IMAGE3D_ERR); if (err != NULL) { *err = error; } } #endif // #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) } //! \brief Default constructor - initializes to NULL. Image3D() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Image3D(const Image3D& image3D) : Image(image3D) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Image3D(const cl_mem& image3D) : Image(image3D) { } /*! \brief Assignment from Image3D - performs shallow copy. * * See Memory for further details. */ Image3D& operator = (const Image3D& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Image3D& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; #if !defined(CL_VERSION_1_2) /*! \brief Class interface for GL 3D Image Memory objects. * * This is provided to facilitate interoperability with OpenGL. * * See Memory for details about copy semantics, etc. * * \see Memory */ class Image3DGL : public Image3D { public: /*! \brief Constructs an Image3DGL in a specified context, from a given * GL Texture. * * Wraps clCreateFromGLTexture3D(). */ Image3DGL( const Context& context, cl_mem_flags flags, GLenum target, GLint miplevel, GLuint texobj, cl_int * err = NULL) { cl_int error; object_ = ::clCreateFromGLTexture3D( context(), flags, target, miplevel, texobj, &error); detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR); if (err != NULL) { *err = error; } } //! \brief Default constructor - initializes to NULL. Image3DGL() : Image3D() { } /*! \brief Copy constructor - performs shallow copy. * * See Memory for further details. */ Image3DGL(const Image3DGL& image) : Image3D(image) { } /*! \brief Constructor from cl_mem - takes ownership. * * See Memory for further details. */ __CL_EXPLICIT_CONSTRUCTORS Image3DGL(const cl_mem& image) : Image3D(image) { } /*! \brief Assignment from Image3DGL - performs shallow copy. * * See Memory for further details. */ Image3DGL& operator = (const Image3DGL& rhs) { if (this != &rhs) { Image3D::operator=(rhs); } return *this; } /*! \brief Assignment from cl_mem - performs shallow copy. * * See Memory for further details. */ Image3DGL& operator = (const cl_mem& rhs) { Image3D::operator=(rhs); return *this; } }; #endif // #if !defined(CL_VERSION_1_2) #if defined(CL_VERSION_1_2) /*! \class ImageGL * \brief general image interface for GL interop. * We abstract the 2D and 3D GL images into a single instance here * that wraps all GL sourced images on the grounds that setup information * was performed by OpenCL anyway. */ class ImageGL : public Image { public: ImageGL( const Context& context, cl_mem_flags flags, GLenum target, GLint miplevel, GLuint texobj, cl_int * err = NULL) { cl_int error; object_ = ::clCreateFromGLTexture( context(), flags, target, miplevel, texobj, &error); detail::errHandler(error, __CREATE_GL_TEXTURE_ERR); if (err != NULL) { *err = error; } } ImageGL() : Image() { } ImageGL(const ImageGL& image) : Image(image) { } __CL_EXPLICIT_CONSTRUCTORS ImageGL(const cl_mem& image) : Image(image) { } ImageGL& operator = (const ImageGL& rhs) { if (this != &rhs) { Image::operator=(rhs); } return *this; } ImageGL& operator = (const cl_mem& rhs) { Image::operator=(rhs); return *this; } }; #endif // #if defined(CL_VERSION_1_2) /*! \brief Class interface for cl_sampler. * * \note Copies of these objects are shallow, meaning that the copy will refer * to the same underlying cl_sampler as the original. For details, see * clRetainSampler() and clReleaseSampler(). * * \see cl_sampler */ class Sampler : public detail::Wrapper { public: /*! \brief Destructor. * * This calls clReleaseSampler() on the value held by this instance. */ ~Sampler() { } //! \brief Default constructor - initializes to NULL. Sampler() { } /*! \brief Constructs a Sampler in a specified context. * * Wraps clCreateSampler(). */ Sampler( const Context& context, cl_bool normalized_coords, cl_addressing_mode addressing_mode, cl_filter_mode filter_mode, cl_int* err = NULL) { cl_int error; object_ = ::clCreateSampler( context(), normalized_coords, addressing_mode, filter_mode, &error); detail::errHandler(error, __CREATE_SAMPLER_ERR); if (err != NULL) { *err = error; } } /*! \brief Copy constructor - performs shallow copy. * * This calls clRetainSampler() on the parameter's cl_sampler. */ Sampler(const Sampler& sampler) : detail::Wrapper(sampler) { } /*! \brief Constructor from cl_sampler - takes ownership. * * This effectively transfers ownership of a refcount on the cl_sampler * into the new Sampler object. */ Sampler(const cl_sampler& sampler) : detail::Wrapper(sampler) { } /*! \brief Assignment operator from Sampler. * * This calls clRetainSampler() on the parameter and clReleaseSampler() * on the previous value held by this instance. */ Sampler& operator = (const Sampler& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_sampler - takes ownership. * * This effectively transfers ownership of a refcount on the rhs and calls * clReleaseSampler() on the value previously held by this instance. */ Sampler& operator = (const cl_sampler& rhs) { detail::Wrapper::operator=(rhs); return *this; } //! \brief Wrapper for clGetSamplerInfo(). template cl_int getInfo(cl_sampler_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetSamplerInfo, object_, name, param), __GET_SAMPLER_INFO_ERR); } //! \brief Wrapper for clGetSamplerInfo() that returns by value. template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_sampler_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } }; class Program; class CommandQueue; class Kernel; //! \brief Class interface for specifying NDRange values. class NDRange { private: size_t<3> sizes_; cl_uint dimensions_; public: //! \brief Default constructor - resulting range has zero dimensions. NDRange() : dimensions_(0) { } //! \brief Constructs one-dimensional range. NDRange(::size_t size0) : dimensions_(1) { sizes_[0] = size0; } //! \brief Constructs two-dimensional range. NDRange(::size_t size0, ::size_t size1) : dimensions_(2) { sizes_[0] = size0; sizes_[1] = size1; } //! \brief Constructs three-dimensional range. NDRange(::size_t size0, ::size_t size1, ::size_t size2) : dimensions_(3) { sizes_[0] = size0; sizes_[1] = size1; sizes_[2] = size2; } /*! \brief Conversion operator to const ::size_t *. * * \returns a pointer to the size of the first dimension. */ operator const ::size_t*() const { return (const ::size_t*) sizes_; } //! \brief Queries the number of dimensions in the range. ::size_t dimensions() const { return dimensions_; } }; //! \brief A zero-dimensional range. static const NDRange NullRange; //! \brief Local address wrapper for use with Kernel::setArg struct LocalSpaceArg { ::size_t size_; }; namespace detail { template struct KernelArgumentHandler { static ::size_t size(const T&) { return sizeof(T); } static T* ptr(T& value) { return &value; } }; template <> struct KernelArgumentHandler { static ::size_t size(const LocalSpaceArg& value) { return value.size_; } static void* ptr(LocalSpaceArg&) { return NULL; } }; } //! \endcond /*! __local * \brief Helper function for generating LocalSpaceArg objects. * Deprecated. Replaced with Local. */ inline CL_EXT_PREFIX__VERSION_1_1_DEPRECATED LocalSpaceArg __local(::size_t size) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED; inline LocalSpaceArg __local(::size_t size) { LocalSpaceArg ret = { size }; return ret; } /*! Local * \brief Helper function for generating LocalSpaceArg objects. */ inline LocalSpaceArg Local(::size_t size) { LocalSpaceArg ret = { size }; return ret; } //class KernelFunctor; /*! \brief Class interface for cl_kernel. * * \note Copies of these objects are shallow, meaning that the copy will refer * to the same underlying cl_kernel as the original. For details, see * clRetainKernel() and clReleaseKernel(). * * \see cl_kernel */ class Kernel : public detail::Wrapper { public: inline Kernel(const Program& program, const char* name, cl_int* err = NULL); /*! \brief Destructor. * * This calls clReleaseKernel() on the value held by this instance. */ ~Kernel() { } //! \brief Default constructor - initializes to NULL. Kernel() { } /*! \brief Copy constructor - performs shallow copy. * * This calls clRetainKernel() on the parameter's cl_kernel. */ Kernel(const Kernel& kernel) : detail::Wrapper(kernel) { } /*! \brief Constructor from cl_kernel - takes ownership. * * This effectively transfers ownership of a refcount on the cl_kernel * into the new Kernel object. */ __CL_EXPLICIT_CONSTRUCTORS Kernel(const cl_kernel& kernel) : detail::Wrapper(kernel) { } /*! \brief Assignment operator from Kernel. * * This calls clRetainKernel() on the parameter and clReleaseKernel() * on the previous value held by this instance. */ Kernel& operator = (const Kernel& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } /*! \brief Assignment operator from cl_kernel - takes ownership. * * This effectively transfers ownership of a refcount on the rhs and calls * clReleaseKernel() on the value previously held by this instance. */ Kernel& operator = (const cl_kernel& rhs) { detail::Wrapper::operator=(rhs); return *this; } template cl_int getInfo(cl_kernel_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetKernelInfo, object_, name, param), __GET_KERNEL_INFO_ERR); } template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_kernel_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } #if defined(CL_VERSION_1_2) template cl_int getArgInfo(cl_uint argIndex, cl_kernel_arg_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetKernelArgInfo, object_, argIndex, name, param), __GET_KERNEL_ARG_INFO_ERR); } template typename detail::param_traits::param_type getArgInfo(cl_uint argIndex, cl_int* err = NULL) const { typename detail::param_traits< detail::cl_kernel_arg_info, name>::param_type param; cl_int result = getArgInfo(argIndex, name, ¶m); if (err != NULL) { *err = result; } return param; } #endif // #if defined(CL_VERSION_1_2) template cl_int getWorkGroupInfo( const Device& device, cl_kernel_work_group_info name, T* param) const { return detail::errHandler( detail::getInfo( &::clGetKernelWorkGroupInfo, object_, device(), name, param), __GET_KERNEL_WORK_GROUP_INFO_ERR); } template typename detail::param_traits::param_type getWorkGroupInfo(const Device& device, cl_int* err = NULL) const { typename detail::param_traits< detail::cl_kernel_work_group_info, name>::param_type param; cl_int result = getWorkGroupInfo(device, name, ¶m); if (err != NULL) { *err = result; } return param; } template cl_int setArg(cl_uint index, T value) { return detail::errHandler( ::clSetKernelArg( object_, index, detail::KernelArgumentHandler::size(value), detail::KernelArgumentHandler::ptr(value)), __SET_KERNEL_ARGS_ERR); } cl_int setArg(cl_uint index, ::size_t size, void* argPtr) { return detail::errHandler( ::clSetKernelArg(object_, index, size, argPtr), __SET_KERNEL_ARGS_ERR); } }; /*! \class Program * \brief Program interface that implements cl_program. */ class Program : public detail::Wrapper { public: typedef VECTOR_CLASS > Binaries; typedef VECTOR_CLASS > Sources; Program( const STRING_CLASS& source, cl_int* err = NULL) { cl_int error; const char * strings = source.c_str(); const ::size_t length = source.size(); Context context = Context::getDefault(err); object_ = ::clCreateProgramWithSource( context(), (cl_uint)1, &strings, &length, &error); detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); if (error == CL_SUCCESS) { error = ::clBuildProgram( object_, 0, NULL, "", NULL, NULL); detail::errHandler(error, __BUILD_PROGRAM_ERR); } if (err != NULL) { *err = error; } } Program( const STRING_CLASS& source, bool build, cl_int* err = NULL) { cl_int error; const char * strings = source.c_str(); const ::size_t length = source.size(); Context context = Context::getDefault(err); object_ = ::clCreateProgramWithSource( context(), (cl_uint)1, &strings, &length, &error); detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); if (error == CL_SUCCESS && build) { error = ::clBuildProgram( object_, 0, NULL, "", NULL, NULL); detail::errHandler(error, __BUILD_PROGRAM_ERR); } if (err != NULL) { *err = error; } } Program( const Context& context, const STRING_CLASS& source, bool build = false, cl_int* err = NULL) { cl_int error; const char * strings = source.c_str(); const ::size_t length = source.size(); object_ = ::clCreateProgramWithSource( context(), (cl_uint)1, &strings, &length, &error); detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); if (error == CL_SUCCESS && build) { error = ::clBuildProgram( object_, 0, NULL, "", NULL, NULL); detail::errHandler(error, __BUILD_PROGRAM_ERR); } if (err != NULL) { *err = error; } } Program( const Context& context, const Sources& sources, cl_int* err = NULL) { cl_int error; const ::size_t n = (::size_t)sources.size(); ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t)); const char** strings = (const char**) alloca(n * sizeof(const char*)); for (::size_t i = 0; i < n; ++i) { strings[i] = sources[(int)i].first; lengths[i] = sources[(int)i].second; } object_ = ::clCreateProgramWithSource( context(), (cl_uint)n, strings, lengths, &error); detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); if (err != NULL) { *err = error; } } /** * Construct a program object from a list of devices and a per-device list of binaries. * \param context A valid OpenCL context in which to construct the program. * \param devices A vector of OpenCL device objects for which the program will be created. * \param binaries A vector of pairs of a pointer to a binary object and its length. * \param binaryStatus An optional vector that on completion will be resized to * match the size of binaries and filled with values to specify if each binary * was successfully loaded. * Set to CL_SUCCESS if the binary was successfully loaded. * Set to CL_INVALID_VALUE if the length is 0 or the binary pointer is NULL. * Set to CL_INVALID_BINARY if the binary provided is not valid for the matching device. * \param err if non-NULL will be set to CL_SUCCESS on successful operation or one of the following errors: * CL_INVALID_CONTEXT if context is not a valid context. * CL_INVALID_VALUE if the length of devices is zero; or if the length of binaries does not match the length of devices; * or if any entry in binaries is NULL or has length 0. * CL_INVALID_DEVICE if OpenCL devices listed in devices are not in the list of devices associated with context. * CL_INVALID_BINARY if an invalid program binary was encountered for any device. binaryStatus will return specific status for each device. * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the OpenCL implementation on the host. */ Program( const Context& context, const VECTOR_CLASS& devices, const Binaries& binaries, VECTOR_CLASS* binaryStatus = NULL, cl_int* err = NULL) { cl_int error; const ::size_t numDevices = devices.size(); // Catch size mismatch early and return if(binaries.size() != numDevices) { error = CL_INVALID_VALUE; detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR); if (err != NULL) { *err = error; } return; } ::size_t* lengths = (::size_t*) alloca(numDevices * sizeof(::size_t)); const unsigned char** images = (const unsigned char**) alloca(numDevices * sizeof(const unsigned char**)); for (::size_t i = 0; i < numDevices; ++i) { images[i] = (const unsigned char*)binaries[i].first; lengths[i] = binaries[(int)i].second; } cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id)); for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { deviceIDs[deviceIndex] = (devices[deviceIndex])(); } if(binaryStatus) { binaryStatus->resize(numDevices); } object_ = ::clCreateProgramWithBinary( context(), (cl_uint) devices.size(), deviceIDs, lengths, images, binaryStatus != NULL ? &binaryStatus->front() : NULL, &error); detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR); if (err != NULL) { *err = error; } } #if defined(CL_VERSION_1_2) /** * Create program using builtin kernels. * \param kernelNames Semi-colon separated list of builtin kernel names */ Program( const Context& context, const VECTOR_CLASS& devices, const STRING_CLASS& kernelNames, cl_int* err = NULL) { cl_int error; ::size_t numDevices = devices.size(); cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id)); for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { deviceIDs[deviceIndex] = (devices[deviceIndex])(); } object_ = ::clCreateProgramWithBuiltInKernels( context(), (cl_uint) devices.size(), deviceIDs, kernelNames.c_str(), &error); detail::errHandler(error, __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR); if (err != NULL) { *err = error; } } #endif // #if defined(CL_VERSION_1_2) Program() { } Program(const Program& program) : detail::Wrapper(program) { } __CL_EXPLICIT_CONSTRUCTORS Program(const cl_program& program) : detail::Wrapper(program) { } Program& operator = (const Program& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } Program& operator = (const cl_program& rhs) { detail::Wrapper::operator=(rhs); return *this; } cl_int build( const VECTOR_CLASS& devices, const char* options = NULL, void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, void* data = NULL) const { ::size_t numDevices = devices.size(); cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id)); for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { deviceIDs[deviceIndex] = (devices[deviceIndex])(); } return detail::errHandler( ::clBuildProgram( object_, (cl_uint) devices.size(), deviceIDs, options, notifyFptr, data), __BUILD_PROGRAM_ERR); } cl_int build( const char* options = NULL, void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, void* data = NULL) const { return detail::errHandler( ::clBuildProgram( object_, 0, NULL, options, notifyFptr, data), __BUILD_PROGRAM_ERR); } #if defined(CL_VERSION_1_2) cl_int compile( const char* options = NULL, void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, void* data = NULL) const { return detail::errHandler( ::clCompileProgram( object_, 0, NULL, options, 0, NULL, NULL, notifyFptr, data), __COMPILE_PROGRAM_ERR); } #endif template cl_int getInfo(cl_program_info name, T* param) const { return detail::errHandler( detail::getInfo(&::clGetProgramInfo, object_, name, param), __GET_PROGRAM_INFO_ERR); } template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_program_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } template cl_int getBuildInfo( const Device& device, cl_program_build_info name, T* param) const { return detail::errHandler( detail::getInfo( &::clGetProgramBuildInfo, object_, device(), name, param), __GET_PROGRAM_BUILD_INFO_ERR); } template typename detail::param_traits::param_type getBuildInfo(const Device& device, cl_int* err = NULL) const { typename detail::param_traits< detail::cl_program_build_info, name>::param_type param; cl_int result = getBuildInfo(device, name, ¶m); if (err != NULL) { *err = result; } return param; } cl_int createKernels(VECTOR_CLASS* kernels) { cl_uint numKernels; cl_int err = ::clCreateKernelsInProgram(object_, 0, NULL, &numKernels); if (err != CL_SUCCESS) { return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR); } Kernel* value = (Kernel*) alloca(numKernels * sizeof(Kernel)); err = ::clCreateKernelsInProgram( object_, numKernels, (cl_kernel*) value, NULL); if (err != CL_SUCCESS) { return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR); } kernels->assign(&value[0], &value[numKernels]); return CL_SUCCESS; } }; #if defined(CL_VERSION_1_2) inline Program linkProgram( Program input1, Program input2, const char* options = NULL, void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, void* data = NULL, cl_int* err = NULL) { cl_int err_local = CL_SUCCESS; cl_program programs[2] = { input1(), input2() }; Context ctx = input1.getInfo(); cl_program prog = ::clLinkProgram( ctx(), 0, NULL, options, 2, programs, notifyFptr, data, &err_local); detail::errHandler(err_local,__COMPILE_PROGRAM_ERR); if (err != NULL) { *err = err_local; } return Program(prog); } inline Program linkProgram( VECTOR_CLASS inputPrograms, const char* options = NULL, void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, void* data = NULL, cl_int* err = NULL) { cl_int err_local = CL_SUCCESS; cl_program * programs = (cl_program*) alloca(inputPrograms.size() * sizeof(cl_program)); if (programs != NULL) { for (unsigned int i = 0; i < inputPrograms.size(); i++) { programs[i] = inputPrograms[i](); } } cl_program prog = ::clLinkProgram( Context::getDefault()(), 0, NULL, options, (cl_uint)inputPrograms.size(), programs, notifyFptr, data, &err_local); detail::errHandler(err_local,__COMPILE_PROGRAM_ERR); if (err != NULL) { *err = err_local; } return Program(prog); } #endif template<> inline VECTOR_CLASS cl::Program::getInfo(cl_int* err) const { VECTOR_CLASS< ::size_t> sizes = getInfo(); VECTOR_CLASS binaries; for (VECTOR_CLASS< ::size_t>::iterator s = sizes.begin(); s != sizes.end(); ++s) { char *ptr = NULL; if (*s != 0) ptr = new char[*s]; binaries.push_back(ptr); } cl_int result = getInfo(CL_PROGRAM_BINARIES, &binaries); if (err != NULL) { *err = result; } return binaries; } inline Kernel::Kernel(const Program& program, const char* name, cl_int* err) { cl_int error; object_ = ::clCreateKernel(program(), name, &error); detail::errHandler(error, __CREATE_KERNEL_ERR); if (err != NULL) { *err = error; } } /*! \class CommandQueue * \brief CommandQueue interface for cl_command_queue. */ class CommandQueue : public detail::Wrapper { private: static volatile int default_initialized_; static CommandQueue default_; static volatile cl_int default_error_; public: CommandQueue( cl_command_queue_properties properties, cl_int* err = NULL) { cl_int error; Context context = Context::getDefault(&error); detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); if (error != CL_SUCCESS) { if (err != NULL) { *err = error; } } else { Device device = context.getInfo()[0]; object_ = ::clCreateCommandQueue( context(), device(), properties, &error); detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); if (err != NULL) { *err = error; } } } CommandQueue( const Context& context, const Device& device, cl_command_queue_properties properties = 0, cl_int* err = NULL) { cl_int error; object_ = ::clCreateCommandQueue( context(), device(), properties, &error); detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); if (err != NULL) { *err = error; } } static CommandQueue getDefault(cl_int * err = NULL) { int state = detail::compare_exchange( &default_initialized_, __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED); if (state & __DEFAULT_INITIALIZED) { if (err != NULL) { *err = default_error_; } return default_; } if (state & __DEFAULT_BEING_INITIALIZED) { // Assume writes will propagate eventually... while(default_initialized_ != __DEFAULT_INITIALIZED) { detail::fence(); } if (err != NULL) { *err = default_error_; } return default_; } cl_int error; Context context = Context::getDefault(&error); detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); if (error != CL_SUCCESS) { if (err != NULL) { *err = error; } } else { Device device = context.getInfo()[0]; default_ = CommandQueue(context, device, 0, &error); detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); if (err != NULL) { *err = error; } } detail::fence(); default_error_ = error; // Assume writes will propagate eventually... default_initialized_ = __DEFAULT_INITIALIZED; detail::fence(); if (err != NULL) { *err = default_error_; } return default_; } CommandQueue() { } CommandQueue(const CommandQueue& commandQueue) : detail::Wrapper(commandQueue) { } CommandQueue(const cl_command_queue& commandQueue) : detail::Wrapper(commandQueue) { } CommandQueue& operator = (const CommandQueue& rhs) { if (this != &rhs) { detail::Wrapper::operator=(rhs); } return *this; } CommandQueue& operator = (const cl_command_queue& rhs) { detail::Wrapper::operator=(rhs); return *this; } template cl_int getInfo(cl_command_queue_info name, T* param) const { return detail::errHandler( detail::getInfo( &::clGetCommandQueueInfo, object_, name, param), __GET_COMMAND_QUEUE_INFO_ERR); } template typename detail::param_traits::param_type getInfo(cl_int* err = NULL) const { typename detail::param_traits< detail::cl_command_queue_info, name>::param_type param; cl_int result = getInfo(name, ¶m); if (err != NULL) { *err = result; } return param; } cl_int enqueueReadBuffer( const Buffer& buffer, cl_bool blocking, ::size_t offset, ::size_t size, void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueReadBuffer( object_, buffer(), blocking, offset, size, ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_READ_BUFFER_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueWriteBuffer( const Buffer& buffer, cl_bool blocking, ::size_t offset, ::size_t size, const void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueWriteBuffer( object_, buffer(), blocking, offset, size, ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_WRITE_BUFFER_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueCopyBuffer( const Buffer& src, const Buffer& dst, ::size_t src_offset, ::size_t dst_offset, ::size_t size, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueCopyBuffer( object_, src(), dst(), src_offset, dst_offset, size, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQEUE_COPY_BUFFER_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueReadBufferRect( const Buffer& buffer, cl_bool blocking, const size_t<3>& buffer_offset, const size_t<3>& host_offset, const size_t<3>& region, ::size_t buffer_row_pitch, ::size_t buffer_slice_pitch, ::size_t host_row_pitch, ::size_t host_slice_pitch, void *ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueReadBufferRect( object_, buffer(), blocking, (const ::size_t *)buffer_offset, (const ::size_t *)host_offset, (const ::size_t *)region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_READ_BUFFER_RECT_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueWriteBufferRect( const Buffer& buffer, cl_bool blocking, const size_t<3>& buffer_offset, const size_t<3>& host_offset, const size_t<3>& region, ::size_t buffer_row_pitch, ::size_t buffer_slice_pitch, ::size_t host_row_pitch, ::size_t host_slice_pitch, void *ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueWriteBufferRect( object_, buffer(), blocking, (const ::size_t *)buffer_offset, (const ::size_t *)host_offset, (const ::size_t *)region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_WRITE_BUFFER_RECT_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueCopyBufferRect( const Buffer& src, const Buffer& dst, const size_t<3>& src_origin, const size_t<3>& dst_origin, const size_t<3>& region, ::size_t src_row_pitch, ::size_t src_slice_pitch, ::size_t dst_row_pitch, ::size_t dst_slice_pitch, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueCopyBufferRect( object_, src(), dst(), (const ::size_t *)src_origin, (const ::size_t *)dst_origin, (const ::size_t *)region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQEUE_COPY_BUFFER_RECT_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #if defined(CL_VERSION_1_2) /** * Enqueue a command to fill a buffer object with a pattern * of a given size. The pattern is specified a as vector. * \tparam PatternType The datatype of the pattern field. * The pattern type must be an accepted OpenCL data type. */ template cl_int enqueueFillBuffer( const Buffer& buffer, PatternType pattern, ::size_t offset, ::size_t size, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueFillBuffer( object_, buffer(), static_cast(&pattern), sizeof(PatternType), offset, size, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_FILL_BUFFER_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #endif // #if defined(CL_VERSION_1_2) cl_int enqueueReadImage( const Image& image, cl_bool blocking, const size_t<3>& origin, const size_t<3>& region, ::size_t row_pitch, ::size_t slice_pitch, void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueReadImage( object_, image(), blocking, (const ::size_t *) origin, (const ::size_t *) region, row_pitch, slice_pitch, ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_READ_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueWriteImage( const Image& image, cl_bool blocking, const size_t<3>& origin, const size_t<3>& region, ::size_t row_pitch, ::size_t slice_pitch, void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueWriteImage( object_, image(), blocking, (const ::size_t *) origin, (const ::size_t *) region, row_pitch, slice_pitch, ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_WRITE_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueCopyImage( const Image& src, const Image& dst, const size_t<3>& src_origin, const size_t<3>& dst_origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueCopyImage( object_, src(), dst(), (const ::size_t *) src_origin, (const ::size_t *)dst_origin, (const ::size_t *) region, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_COPY_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #if defined(CL_VERSION_1_2) /** * Enqueue a command to fill an image object with a specified color. * \param fillColor is the color to use to fill the image. * This is a four component RGBA floating-point color value if * the image channel data type is not an unnormalized signed or * unsigned data type. */ cl_int enqueueFillImage( const Image& image, cl_float4 fillColor, const size_t<3>& origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueFillImage( object_, image(), static_cast(&fillColor), (const ::size_t *) origin, (const ::size_t *) region, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_FILL_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } /** * Enqueue a command to fill an image object with a specified color. * \param fillColor is the color to use to fill the image. * This is a four component RGBA signed integer color value if * the image channel data type is an unnormalized signed integer * type. */ cl_int enqueueFillImage( const Image& image, cl_int4 fillColor, const size_t<3>& origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueFillImage( object_, image(), static_cast(&fillColor), (const ::size_t *) origin, (const ::size_t *) region, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_FILL_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } /** * Enqueue a command to fill an image object with a specified color. * \param fillColor is the color to use to fill the image. * This is a four component RGBA unsigned integer color value if * the image channel data type is an unnormalized unsigned integer * type. */ cl_int enqueueFillImage( const Image& image, cl_uint4 fillColor, const size_t<3>& origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueFillImage( object_, image(), static_cast(&fillColor), (const ::size_t *) origin, (const ::size_t *) region, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_FILL_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #endif // #if defined(CL_VERSION_1_2) cl_int enqueueCopyImageToBuffer( const Image& src, const Buffer& dst, const size_t<3>& src_origin, const size_t<3>& region, ::size_t dst_offset, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueCopyImageToBuffer( object_, src(), dst(), (const ::size_t *) src_origin, (const ::size_t *) region, dst_offset, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueCopyBufferToImage( const Buffer& src, const Image& dst, ::size_t src_offset, const size_t<3>& dst_origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueCopyBufferToImage( object_, src(), dst(), src_offset, (const ::size_t *) dst_origin, (const ::size_t *) region, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } void* enqueueMapBuffer( const Buffer& buffer, cl_bool blocking, cl_map_flags flags, ::size_t offset, ::size_t size, const VECTOR_CLASS* events = NULL, Event* event = NULL, cl_int* err = NULL) const { cl_int error; void * result = ::clEnqueueMapBuffer( object_, buffer(), blocking, flags, offset, size, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (cl_event*) event, &error); detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); if (err != NULL) { *err = error; } return result; } void* enqueueMapImage( const Image& buffer, cl_bool blocking, cl_map_flags flags, const size_t<3>& origin, const size_t<3>& region, ::size_t * row_pitch, ::size_t * slice_pitch, const VECTOR_CLASS* events = NULL, Event* event = NULL, cl_int* err = NULL) const { cl_int error; void * result = ::clEnqueueMapImage( object_, buffer(), blocking, flags, (const ::size_t *) origin, (const ::size_t *) region, row_pitch, slice_pitch, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (cl_event*) event, &error); detail::errHandler(error, __ENQUEUE_MAP_IMAGE_ERR); if (err != NULL) { *err = error; } return result; } cl_int enqueueUnmapMemObject( const Memory& memory, void* mapped_ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueUnmapMemObject( object_, memory(), mapped_ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_UNMAP_MEM_OBJECT_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #if defined(CL_VERSION_1_2) /** * Enqueues a marker command which waits for either a list of events to complete, * or all previously enqueued commands to complete. * * Enqueues a marker command which waits for either a list of events to complete, * or if the list is empty it waits for all commands previously enqueued in command_queue * to complete before it completes. This command returns an event which can be waited on, * i.e. this event can be waited on to insure that all events either in the event_wait_list * or all previously enqueued commands, queued before this command to command_queue, * have completed. */ cl_int enqueueMarkerWithWaitList( const VECTOR_CLASS *events = 0, Event *event = 0) { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueMarkerWithWaitList( object_, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_MARKER_WAIT_LIST_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } /** * A synchronization point that enqueues a barrier operation. * * Enqueues a barrier command which waits for either a list of events to complete, * or if the list is empty it waits for all commands previously enqueued in command_queue * to complete before it completes. This command blocks command execution, that is, any * following commands enqueued after it do not execute until it completes. This command * returns an event which can be waited on, i.e. this event can be waited on to insure that * all events either in the event_wait_list or all previously enqueued commands, queued * before this command to command_queue, have completed. */ cl_int enqueueBarrierWithWaitList( const VECTOR_CLASS *events = 0, Event *event = 0) { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueBarrierWithWaitList( object_, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_BARRIER_WAIT_LIST_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } /** * Enqueues a command to indicate with which device a set of memory objects * should be associated. */ cl_int enqueueMigrateMemObjects( const VECTOR_CLASS &memObjects, cl_mem_migration_flags flags, const VECTOR_CLASS* events = NULL, Event* event = NULL ) { cl_event tmp; cl_mem* localMemObjects = static_cast(alloca(memObjects.size() * sizeof(cl_mem))); for( int i = 0; i < (int)memObjects.size(); ++i ) { localMemObjects[i] = memObjects[i](); } cl_int err = detail::errHandler( ::clEnqueueMigrateMemObjects( object_, (cl_uint)memObjects.size(), static_cast(localMemObjects), flags, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_UNMAP_MEM_OBJECT_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #endif // #if defined(CL_VERSION_1_2) cl_int enqueueNDRangeKernel( const Kernel& kernel, const NDRange& offset, const NDRange& global, const NDRange& local = NullRange, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueNDRangeKernel( object_, kernel(), (cl_uint) global.dimensions(), offset.dimensions() != 0 ? (const ::size_t*) offset : NULL, (const ::size_t*) global, local.dimensions() != 0 ? (const ::size_t*) local : NULL, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_NDRANGE_KERNEL_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueTask( const Kernel& kernel, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueTask( object_, kernel(), (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_TASK_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueNativeKernel( void (CL_CALLBACK *userFptr)(void *), std::pair args, const VECTOR_CLASS* mem_objects = NULL, const VECTOR_CLASS* mem_locs = NULL, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_mem * mems = (mem_objects != NULL && mem_objects->size() > 0) ? (cl_mem*) alloca(mem_objects->size() * sizeof(cl_mem)) : NULL; if (mems != NULL) { for (unsigned int i = 0; i < mem_objects->size(); i++) { mems[i] = ((*mem_objects)[i])(); } } cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueNativeKernel( object_, userFptr, args.first, args.second, (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, mems, (mem_locs != NULL) ? (const void **) &mem_locs->front() : NULL, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_NATIVE_KERNEL); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } /** * Deprecated APIs for 1.2 */ #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int enqueueMarker(Event* event = NULL) const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED { return detail::errHandler( ::clEnqueueMarker(object_, (cl_event*) event), __ENQUEUE_MARKER_ERR); } CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int enqueueWaitForEvents(const VECTOR_CLASS& events) const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED { return detail::errHandler( ::clEnqueueWaitForEvents( object_, (cl_uint) events.size(), (const cl_event*) &events.front()), __ENQUEUE_WAIT_FOR_EVENTS_ERR); } #endif // #if defined(CL_VERSION_1_1) cl_int enqueueAcquireGLObjects( const VECTOR_CLASS* mem_objects = NULL, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueAcquireGLObjects( object_, (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_ACQUIRE_GL_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueReleaseGLObjects( const VECTOR_CLASS* mem_objects = NULL, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueReleaseGLObjects( object_, (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_RELEASE_GL_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #if defined (USE_DX_INTEROP) typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueAcquireD3D10ObjectsKHR)( cl_command_queue command_queue, cl_uint num_objects, const cl_mem* mem_objects, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event); typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)( cl_command_queue command_queue, cl_uint num_objects, const cl_mem* mem_objects, cl_uint num_events_in_wait_list, const cl_event* event_wait_list, cl_event* event); cl_int enqueueAcquireD3D10Objects( const VECTOR_CLASS* mem_objects = NULL, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { static PFN_clEnqueueAcquireD3D10ObjectsKHR pfn_clEnqueueAcquireD3D10ObjectsKHR = NULL; #if defined(CL_VERSION_1_2) cl_context context = getInfo(); cl::Device device(getInfo()); cl_platform_id platform = device.getInfo(); __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clEnqueueAcquireD3D10ObjectsKHR); #endif #if defined(CL_VERSION_1_1) __INIT_CL_EXT_FCN_PTR(clEnqueueAcquireD3D10ObjectsKHR); #endif cl_event tmp; cl_int err = detail::errHandler( pfn_clEnqueueAcquireD3D10ObjectsKHR( object_, (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_ACQUIRE_GL_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } cl_int enqueueReleaseD3D10Objects( const VECTOR_CLASS* mem_objects = NULL, const VECTOR_CLASS* events = NULL, Event* event = NULL) const { static PFN_clEnqueueReleaseD3D10ObjectsKHR pfn_clEnqueueReleaseD3D10ObjectsKHR = NULL; #if defined(CL_VERSION_1_2) cl_context context = getInfo(); cl::Device device(getInfo()); cl_platform_id platform = device.getInfo(); __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clEnqueueReleaseD3D10ObjectsKHR); #endif // #if defined(CL_VERSION_1_2) #if defined(CL_VERSION_1_1) __INIT_CL_EXT_FCN_PTR(clEnqueueReleaseD3D10ObjectsKHR); #endif // #if defined(CL_VERSION_1_1) cl_event tmp; cl_int err = detail::errHandler( pfn_clEnqueueReleaseD3D10ObjectsKHR( object_, (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_RELEASE_GL_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } #endif /** * Deprecated APIs for 1.2 */ #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int enqueueBarrier() const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED { return detail::errHandler( ::clEnqueueBarrier(object_), __ENQUEUE_BARRIER_ERR); } #endif // #if defined(CL_VERSION_1_1) cl_int flush() const { return detail::errHandler(::clFlush(object_), __FLUSH_ERR); } cl_int finish() const { return detail::errHandler(::clFinish(object_), __FINISH_ERR); } }; #ifdef _WIN32 __declspec(selectany) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED; __declspec(selectany) CommandQueue CommandQueue::default_; __declspec(selectany) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS; #else __attribute__((weak)) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED; __attribute__((weak)) CommandQueue CommandQueue::default_; __attribute__((weak)) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS; #endif inline cl_int enqueueReadBuffer( const Buffer& buffer, cl_bool blocking, ::size_t offset, ::size_t size, void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueReadBuffer(buffer, blocking, offset, size, ptr, events, event); } inline cl_int enqueueWriteBuffer( const Buffer& buffer, cl_bool blocking, ::size_t offset, ::size_t size, const void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueWriteBuffer(buffer, blocking, offset, size, ptr, events, event); } inline void* enqueueMapBuffer( const Buffer& buffer, cl_bool blocking, cl_map_flags flags, ::size_t offset, ::size_t size, const VECTOR_CLASS* events = NULL, Event* event = NULL, cl_int* err = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); if (err != NULL) { *err = error; } void * result = ::clEnqueueMapBuffer( queue(), buffer(), blocking, flags, offset, size, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (cl_event*) event, &error); detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); if (err != NULL) { *err = error; } return result; } inline cl_int enqueueUnmapMemObject( const Memory& memory, void* mapped_ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); if (error != CL_SUCCESS) { return error; } cl_event tmp; cl_int err = detail::errHandler( ::clEnqueueUnmapMemObject( queue(), memory(), mapped_ptr, (events != NULL) ? (cl_uint) events->size() : 0, (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, (event != NULL) ? &tmp : NULL), __ENQUEUE_UNMAP_MEM_OBJECT_ERR); if (event != NULL && err == CL_SUCCESS) *event = tmp; return err; } inline cl_int enqueueCopyBuffer( const Buffer& src, const Buffer& dst, ::size_t src_offset, ::size_t dst_offset, ::size_t size, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueCopyBuffer(src, dst, src_offset, dst_offset, size, events, event); } /** * Blocking copy operation between iterators and a buffer. */ template< typename IteratorType > inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer ) { typedef typename std::iterator_traits::value_type DataType; cl_int error; ::size_t length = endIterator-startIterator; ::size_t byteLength = length*sizeof(DataType); DataType *pointer = static_cast(enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_WRITE, 0, byteLength, 0, 0, &error)); // if exceptions enabled, enqueueMapBuffer will throw if( error != CL_SUCCESS ) { return error; } #if defined(_MSC_VER) std::copy( startIterator, endIterator, stdext::checked_array_iterator( pointer, length)); #else std::copy(startIterator, endIterator, pointer); #endif Event endEvent; error = enqueueUnmapMemObject(buffer, pointer, 0, &endEvent); // if exceptions enabled, enqueueUnmapMemObject will throw if( error != CL_SUCCESS ) { return error; } endEvent.wait(); return CL_SUCCESS; } /** * Blocking copy operation between iterators and a buffer. */ template< typename IteratorType > inline cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator ) { typedef typename std::iterator_traits::value_type DataType; cl_int error; ::size_t length = endIterator-startIterator; ::size_t byteLength = length*sizeof(DataType); DataType *pointer = static_cast(enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_READ, 0, byteLength, 0, 0, &error)); // if exceptions enabled, enqueueMapBuffer will throw if( error != CL_SUCCESS ) { return error; } std::copy(pointer, pointer + length, startIterator); Event endEvent; error = enqueueUnmapMemObject(buffer, pointer, 0, &endEvent); // if exceptions enabled, enqueueUnmapMemObject will throw if( error != CL_SUCCESS ) { return error; } endEvent.wait(); return CL_SUCCESS; } #if defined(CL_VERSION_1_1) inline cl_int enqueueReadBufferRect( const Buffer& buffer, cl_bool blocking, const size_t<3>& buffer_offset, const size_t<3>& host_offset, const size_t<3>& region, ::size_t buffer_row_pitch, ::size_t buffer_slice_pitch, ::size_t host_row_pitch, ::size_t host_slice_pitch, void *ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueReadBufferRect( buffer, blocking, buffer_offset, host_offset, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, events, event); } inline cl_int enqueueWriteBufferRect( const Buffer& buffer, cl_bool blocking, const size_t<3>& buffer_offset, const size_t<3>& host_offset, const size_t<3>& region, ::size_t buffer_row_pitch, ::size_t buffer_slice_pitch, ::size_t host_row_pitch, ::size_t host_slice_pitch, void *ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueWriteBufferRect( buffer, blocking, buffer_offset, host_offset, region, buffer_row_pitch, buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, events, event); } inline cl_int enqueueCopyBufferRect( const Buffer& src, const Buffer& dst, const size_t<3>& src_origin, const size_t<3>& dst_origin, const size_t<3>& region, ::size_t src_row_pitch, ::size_t src_slice_pitch, ::size_t dst_row_pitch, ::size_t dst_slice_pitch, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueCopyBufferRect( src, dst, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch, events, event); } #endif inline cl_int enqueueReadImage( const Image& image, cl_bool blocking, const size_t<3>& origin, const size_t<3>& region, ::size_t row_pitch, ::size_t slice_pitch, void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueReadImage( image, blocking, origin, region, row_pitch, slice_pitch, ptr, events, event); } inline cl_int enqueueWriteImage( const Image& image, cl_bool blocking, const size_t<3>& origin, const size_t<3>& region, ::size_t row_pitch, ::size_t slice_pitch, void* ptr, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueWriteImage( image, blocking, origin, region, row_pitch, slice_pitch, ptr, events, event); } inline cl_int enqueueCopyImage( const Image& src, const Image& dst, const size_t<3>& src_origin, const size_t<3>& dst_origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueCopyImage( src, dst, src_origin, dst_origin, region, events, event); } inline cl_int enqueueCopyImageToBuffer( const Image& src, const Buffer& dst, const size_t<3>& src_origin, const size_t<3>& region, ::size_t dst_offset, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueCopyImageToBuffer( src, dst, src_origin, region, dst_offset, events, event); } inline cl_int enqueueCopyBufferToImage( const Buffer& src, const Image& dst, ::size_t src_offset, const size_t<3>& dst_origin, const size_t<3>& region, const VECTOR_CLASS* events = NULL, Event* event = NULL) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.enqueueCopyBufferToImage( src, dst, src_offset, dst_origin, region, events, event); } inline cl_int flush(void) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.flush(); } inline cl_int finish(void) { cl_int error; CommandQueue queue = CommandQueue::getDefault(&error); if (error != CL_SUCCESS) { return error; } return queue.finish(); } // Kernel Functor support // New interface as of September 2011 // Requires the C++11 std::tr1::function (note do not support TR1) // Visual Studio 2010 and GCC 4.2 struct EnqueueArgs { CommandQueue queue_; const NDRange offset_; const NDRange global_; const NDRange local_; VECTOR_CLASS events_; EnqueueArgs(NDRange global) : queue_(CommandQueue::getDefault()), offset_(NullRange), global_(global), local_(NullRange) { } EnqueueArgs(NDRange global, NDRange local) : queue_(CommandQueue::getDefault()), offset_(NullRange), global_(global), local_(local) { } EnqueueArgs(NDRange offset, NDRange global, NDRange local) : queue_(CommandQueue::getDefault()), offset_(offset), global_(global), local_(local) { } EnqueueArgs(Event e, NDRange global) : queue_(CommandQueue::getDefault()), offset_(NullRange), global_(global), local_(NullRange) { events_.push_back(e); } EnqueueArgs(Event e, NDRange global, NDRange local) : queue_(CommandQueue::getDefault()), offset_(NullRange), global_(global), local_(local) { events_.push_back(e); } EnqueueArgs(Event e, NDRange offset, NDRange global, NDRange local) : queue_(CommandQueue::getDefault()), offset_(offset), global_(global), local_(local) { events_.push_back(e); } EnqueueArgs(const VECTOR_CLASS &events, NDRange global) : queue_(CommandQueue::getDefault()), offset_(NullRange), global_(global), local_(NullRange), events_(events) { } EnqueueArgs(const VECTOR_CLASS &events, NDRange global, NDRange local) : queue_(CommandQueue::getDefault()), offset_(NullRange), global_(global), local_(local), events_(events) { } EnqueueArgs(const VECTOR_CLASS &events, NDRange offset, NDRange global, NDRange local) : queue_(CommandQueue::getDefault()), offset_(offset), global_(global), local_(local), events_(events) { } EnqueueArgs(CommandQueue &queue, NDRange global) : queue_(queue), offset_(NullRange), global_(global), local_(NullRange) { } EnqueueArgs(CommandQueue &queue, NDRange global, NDRange local) : queue_(queue), offset_(NullRange), global_(global), local_(local) { } EnqueueArgs(CommandQueue &queue, NDRange offset, NDRange global, NDRange local) : queue_(queue), offset_(offset), global_(global), local_(local) { } EnqueueArgs(CommandQueue &queue, Event e, NDRange global) : queue_(queue), offset_(NullRange), global_(global), local_(NullRange) { events_.push_back(e); } EnqueueArgs(CommandQueue &queue, Event e, NDRange global, NDRange local) : queue_(queue), offset_(NullRange), global_(global), local_(local) { events_.push_back(e); } EnqueueArgs(CommandQueue &queue, Event e, NDRange offset, NDRange global, NDRange local) : queue_(queue), offset_(offset), global_(global), local_(local) { events_.push_back(e); } EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS &events, NDRange global) : queue_(queue), offset_(NullRange), global_(global), local_(NullRange), events_(events) { } EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS &events, NDRange global, NDRange local) : queue_(queue), offset_(NullRange), global_(global), local_(local), events_(events) { } EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS &events, NDRange offset, NDRange global, NDRange local) : queue_(queue), offset_(offset), global_(global), local_(local), events_(events) { } }; namespace detail { class NullType {}; template struct SetArg { static void set (Kernel kernel, T0 arg) { kernel.setArg(index, arg); } }; template struct SetArg { static void set (Kernel, NullType) { } }; template < typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31 > class KernelFunctorGlobal { private: Kernel kernel_; public: KernelFunctorGlobal( Kernel kernel) : kernel_(kernel) {} KernelFunctorGlobal( const Program& program, const STRING_CLASS name, cl_int * err = NULL) : kernel_(program, name.c_str(), err) {} Event operator() ( const EnqueueArgs& args, T0 t0, T1 t1 = NullType(), T2 t2 = NullType(), T3 t3 = NullType(), T4 t4 = NullType(), T5 t5 = NullType(), T6 t6 = NullType(), T7 t7 = NullType(), T8 t8 = NullType(), T9 t9 = NullType(), T10 t10 = NullType(), T11 t11 = NullType(), T12 t12 = NullType(), T13 t13 = NullType(), T14 t14 = NullType(), T15 t15 = NullType(), T16 t16 = NullType(), T17 t17 = NullType(), T18 t18 = NullType(), T19 t19 = NullType(), T20 t20 = NullType(), T21 t21 = NullType(), T22 t22 = NullType(), T23 t23 = NullType(), T24 t24 = NullType(), T25 t25 = NullType(), T26 t26 = NullType(), T27 t27 = NullType(), T28 t28 = NullType(), T29 t29 = NullType(), T30 t30 = NullType(), T31 t31 = NullType() ) { Event event; SetArg<0, T0>::set(kernel_, t0); SetArg<1, T1>::set(kernel_, t1); SetArg<2, T2>::set(kernel_, t2); SetArg<3, T3>::set(kernel_, t3); SetArg<4, T4>::set(kernel_, t4); SetArg<5, T5>::set(kernel_, t5); SetArg<6, T6>::set(kernel_, t6); SetArg<7, T7>::set(kernel_, t7); SetArg<8, T8>::set(kernel_, t8); SetArg<9, T9>::set(kernel_, t9); SetArg<10, T10>::set(kernel_, t10); SetArg<11, T11>::set(kernel_, t11); SetArg<12, T12>::set(kernel_, t12); SetArg<13, T13>::set(kernel_, t13); SetArg<14, T14>::set(kernel_, t14); SetArg<15, T15>::set(kernel_, t15); SetArg<16, T16>::set(kernel_, t16); SetArg<17, T17>::set(kernel_, t17); SetArg<18, T18>::set(kernel_, t18); SetArg<19, T19>::set(kernel_, t19); SetArg<20, T20>::set(kernel_, t20); SetArg<21, T21>::set(kernel_, t21); SetArg<22, T22>::set(kernel_, t22); SetArg<23, T23>::set(kernel_, t23); SetArg<24, T24>::set(kernel_, t24); SetArg<25, T25>::set(kernel_, t25); SetArg<26, T26>::set(kernel_, t26); SetArg<27, T27>::set(kernel_, t27); SetArg<28, T28>::set(kernel_, t28); SetArg<29, T29>::set(kernel_, t29); SetArg<30, T30>::set(kernel_, t30); SetArg<31, T31>::set(kernel_, t31); args.queue_.enqueueNDRangeKernel( kernel_, args.offset_, args.global_, args.local_, &args.events_, &event); return event; } }; //------------------------------------------------------------------------------------------------------ template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31> struct functionImplementation_ { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 32)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25, T26 arg26, T27 arg27, T28 arg28, T29 arg29, T30 arg30, T31 arg31) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, arg31); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 31)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25, T26 arg26, T27 arg27, T28 arg28, T29 arg29, T30 arg30) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 30)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25, T26 arg26, T27 arg27, T28 arg28, T29 arg29) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 29)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25, T26 arg26, T27 arg27, T28 arg28) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 28)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25, T26 arg26, T27 arg27) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 27)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25, T26 arg26) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 26)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24, T25 arg25) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 25)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23, T24 arg24) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 24)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22, T23 arg23) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 23)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21, T22 arg22) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 22)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20, T21 arg21) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 21)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19, T20 arg20) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 20)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18, T19 arg19) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 19)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17, T18 arg18) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 18)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, T17 arg17) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 17)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 16)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 15)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 14)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 13)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 12)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 11)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 10)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, T8, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 9)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7, T8); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, T7, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 8)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6, T7); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, T6, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 7)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5, T6); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5, arg6); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4, typename T5> struct functionImplementation_ < T0, T1, T2, T3, T4, T5, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 6)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4, T5); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4, arg5); } }; template< typename T0, typename T1, typename T2, typename T3, typename T4> struct functionImplementation_ < T0, T1, T2, T3, T4, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 5)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3, T4); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3, arg4); } }; template< typename T0, typename T1, typename T2, typename T3> struct functionImplementation_ < T0, T1, T2, T3, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 4)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2, T3); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2, T3 arg3) { return functor_( enqueueArgs, arg0, arg1, arg2, arg3); } }; template< typename T0, typename T1, typename T2> struct functionImplementation_ < T0, T1, T2, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, T2, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 3)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1, T2); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1, T2 arg2) { return functor_( enqueueArgs, arg0, arg1, arg2); } }; template< typename T0, typename T1> struct functionImplementation_ < T0, T1, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, T1, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 2)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0, T1); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0, T1 arg1) { return functor_( enqueueArgs, arg0, arg1); } }; template< typename T0> struct functionImplementation_ < T0, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> { typedef detail::KernelFunctorGlobal< T0, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType, NullType> FunctorType; FunctorType functor_; functionImplementation_(const FunctorType &functor) : functor_(functor) { #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 1)) // Fail variadic expansion for dev11 static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it."); #endif } //! \brief Return type of the functor typedef Event result_type; //! \brief Function signature of kernel functor with no event dependency. typedef Event type_( const EnqueueArgs&, T0); Event operator()( const EnqueueArgs& enqueueArgs, T0 arg0) { return functor_( enqueueArgs, arg0); } }; } // namespace detail //---------------------------------------------------------------------------------------------- template < typename T0, typename T1 = detail::NullType, typename T2 = detail::NullType, typename T3 = detail::NullType, typename T4 = detail::NullType, typename T5 = detail::NullType, typename T6 = detail::NullType, typename T7 = detail::NullType, typename T8 = detail::NullType, typename T9 = detail::NullType, typename T10 = detail::NullType, typename T11 = detail::NullType, typename T12 = detail::NullType, typename T13 = detail::NullType, typename T14 = detail::NullType, typename T15 = detail::NullType, typename T16 = detail::NullType, typename T17 = detail::NullType, typename T18 = detail::NullType, typename T19 = detail::NullType, typename T20 = detail::NullType, typename T21 = detail::NullType, typename T22 = detail::NullType, typename T23 = detail::NullType, typename T24 = detail::NullType, typename T25 = detail::NullType, typename T26 = detail::NullType, typename T27 = detail::NullType, typename T28 = detail::NullType, typename T29 = detail::NullType, typename T30 = detail::NullType, typename T31 = detail::NullType > struct make_kernel : public detail::functionImplementation_< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31 > { public: typedef detail::KernelFunctorGlobal< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31 > FunctorType; make_kernel( const Program& program, const STRING_CLASS name, cl_int * err = NULL) : detail::functionImplementation_< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31 >( FunctorType(program, name, err)) {} make_kernel( const Kernel kernel) : detail::functionImplementation_< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31 >( FunctorType(kernel)) {} }; //---------------------------------------------------------------------------------------------------------------------- #undef __ERR_STR #if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS) #undef __GET_DEVICE_INFO_ERR #undef __GET_PLATFORM_INFO_ERR #undef __GET_DEVICE_IDS_ERR #undef __GET_CONTEXT_INFO_ERR #undef __GET_EVENT_INFO_ERR #undef __GET_EVENT_PROFILE_INFO_ERR #undef __GET_MEM_OBJECT_INFO_ERR #undef __GET_IMAGE_INFO_ERR #undef __GET_SAMPLER_INFO_ERR #undef __GET_KERNEL_INFO_ERR #undef __GET_KERNEL_ARG_INFO_ERR #undef __GET_KERNEL_WORK_GROUP_INFO_ERR #undef __GET_PROGRAM_INFO_ERR #undef __GET_PROGRAM_BUILD_INFO_ERR #undef __GET_COMMAND_QUEUE_INFO_ERR #undef __CREATE_CONTEXT_ERR #undef __CREATE_CONTEXT_FROM_TYPE_ERR #undef __GET_SUPPORTED_IMAGE_FORMATS_ERR #undef __CREATE_BUFFER_ERR #undef __CREATE_SUBBUFFER_ERR #undef __CREATE_IMAGE2D_ERR #undef __CREATE_IMAGE3D_ERR #undef __CREATE_SAMPLER_ERR #undef __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR #undef __CREATE_USER_EVENT_ERR #undef __SET_USER_EVENT_STATUS_ERR #undef __SET_EVENT_CALLBACK_ERR #undef __SET_PRINTF_CALLBACK_ERR #undef __WAIT_FOR_EVENTS_ERR #undef __CREATE_KERNEL_ERR #undef __SET_KERNEL_ARGS_ERR #undef __CREATE_PROGRAM_WITH_SOURCE_ERR #undef __CREATE_PROGRAM_WITH_BINARY_ERR #undef __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR #undef __BUILD_PROGRAM_ERR #undef __CREATE_KERNELS_IN_PROGRAM_ERR #undef __CREATE_COMMAND_QUEUE_ERR #undef __SET_COMMAND_QUEUE_PROPERTY_ERR #undef __ENQUEUE_READ_BUFFER_ERR #undef __ENQUEUE_WRITE_BUFFER_ERR #undef __ENQUEUE_READ_BUFFER_RECT_ERR #undef __ENQUEUE_WRITE_BUFFER_RECT_ERR #undef __ENQEUE_COPY_BUFFER_ERR #undef __ENQEUE_COPY_BUFFER_RECT_ERR #undef __ENQUEUE_READ_IMAGE_ERR #undef __ENQUEUE_WRITE_IMAGE_ERR #undef __ENQUEUE_COPY_IMAGE_ERR #undef __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR #undef __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR #undef __ENQUEUE_MAP_BUFFER_ERR #undef __ENQUEUE_MAP_IMAGE_ERR #undef __ENQUEUE_UNMAP_MEM_OBJECT_ERR #undef __ENQUEUE_NDRANGE_KERNEL_ERR #undef __ENQUEUE_TASK_ERR #undef __ENQUEUE_NATIVE_KERNEL #undef __CL_EXPLICIT_CONSTRUCTORS #undef __UNLOAD_COMPILER_ERR #endif //__CL_USER_OVERRIDE_ERROR_STRINGS #undef __CL_FUNCTION_TYPE // Extensions /** * Deprecated APIs for 1.2 */ #if defined(CL_VERSION_1_1) #undef __INIT_CL_EXT_FCN_PTR #endif // #if defined(CL_VERSION_1_1) #undef __CREATE_SUB_DEVICES #if defined(USE_CL_DEVICE_FISSION) #undef __PARAM_NAME_DEVICE_FISSION #endif // USE_CL_DEVICE_FISSION #undef __DEFAULT_NOT_INITIALIZED #undef __DEFAULT_BEING_INITIALIZED #undef __DEFAULT_INITIALIZED } // namespace cl #ifdef _WIN32 #pragma pop_macro("max") #endif // _WIN32 #endif // CL_HPP_ gnss-sdr-0.0.6/src/algorithms/libs/clFFT.h0000644000175000017500000001147412576764164017612 0ustar carlescarles // // File: clFFT.h // // Version: <1.0> // // Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") // in consideration of your agreement to the following terms, and your use, // installation, modification or redistribution of this Apple software // constitutes acceptance of these terms. If you do not agree with these // terms, please do not use, install, modify or redistribute this Apple // software. // // In consideration of your agreement to abide by the following terms, and // subject to these terms, Apple grants you a personal, non - exclusive // license, under Apple's copyrights in this original Apple software ( the // "Apple Software" ), to use, reproduce, modify and redistribute the Apple // Software, with or without modifications, in source and / or binary forms; // provided that if you redistribute the Apple Software in its entirety and // without modifications, you must retain this notice and the following text // and disclaimers in all such redistributions of the Apple Software. Neither // the name, trademarks, service marks or logos of Apple Inc. may be used to // endorse or promote products derived from the Apple Software without specific // prior written permission from Apple. Except as expressly stated in this // notice, no other rights or licenses, express or implied, are granted by // Apple herein, including but not limited to any patent rights that may be // infringed by your derivative works or by other works in which the Apple // Software may be incorporated. // // The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO // WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED // WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION // ALONE OR IN COMBINATION WITH YOUR PRODUCTS. // // IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR // CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION // AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER // UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR // OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright ( C ) 2008 Apple Inc. All Rights Reserved. // //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __CLFFT_H #define __CLFFT_H #ifdef __cplusplus extern "C" { #endif #include #ifdef __APPLE__ #include #else #include #endif // XForm type typedef enum { clFFT_Forward = -1, clFFT_Inverse = 1 }clFFT_Direction; // XForm dimension typedef enum { clFFT_1D = 0, clFFT_2D = 1, clFFT_3D = 3 }clFFT_Dimension; // XForm Data type typedef enum { clFFT_SplitComplexFormat = 0, clFFT_InterleavedComplexFormat = 1 }clFFT_DataFormat; typedef struct { unsigned int x; unsigned int y; unsigned int z; }clFFT_Dim3; typedef struct { float *real; float *imag; } clFFT_SplitComplex; typedef struct { float real; float imag; }clFFT_Complex; typedef void* clFFT_Plan; clFFT_Plan clFFT_CreatePlan( cl_context context, clFFT_Dim3 n, clFFT_Dimension dim, clFFT_DataFormat dataFormat, cl_int *error_code ); void clFFT_DestroyPlan( clFFT_Plan plan ); cl_int clFFT_ExecuteInterleaved( cl_command_queue queue, clFFT_Plan plan, cl_int batchSize, clFFT_Direction dir, cl_mem data_in, cl_mem data_out, cl_int num_events, cl_event *event_list, cl_event *event ); cl_int clFFT_ExecutePlannar( cl_command_queue queue, clFFT_Plan plan, cl_int batchSize, clFFT_Direction dir, cl_mem data_in_real, cl_mem data_in_imag, cl_mem data_out_real, cl_mem data_out_imag, cl_int num_events, cl_event *event_list, cl_event *event ); cl_int clFFT_1DTwistInterleaved(clFFT_Plan Plan, cl_command_queue queue, cl_mem array, size_t numRows, size_t numCols, size_t startRow, size_t rowsToProcess, clFFT_Direction dir); cl_int clFFT_1DTwistPlannar(clFFT_Plan Plan, cl_command_queue queue, cl_mem array_real, cl_mem array_imag, size_t numRows, size_t numCols, size_t startRow, size_t rowsToProcess, clFFT_Direction dir); void clFFT_DumpPlan( clFFT_Plan plan, FILE *file); #ifdef __cplusplus } #endif #endif gnss-sdr-0.0.6/src/algorithms/libs/gps_sdr_signal_processing.h0000644000175000017500000000406112576764164024100 0ustar carlescarles/*! * \file gps_sdr_signal_processing.h * \brief This class implements various functions for GPS L1 CA signals * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_SDR_SIGNAL_PROCESSING_H_ #define GNSS_SDR_GPS_SDR_SIGNAL_PROCESSING_H_ #include #include #include "GPS_L1_CA.h" //!Generates complex GPS L1 C/A code for the desired SV ID and code shift, and sampled to specific sampling frequency void gps_l1_ca_code_gen_complex(std::complex* _dest, signed int _prn, unsigned int _chip_shift); //! Generates N complex GPS L1 C/A codes for the desired SV ID and code shift void gps_l1_ca_code_gen_complex_sampled(std::complex* _dest, unsigned int _prn, signed int _fs, unsigned int _chip_shift, unsigned int _ncodes); //! Generates complex GPS L1 C/A code for the desired SV ID and code shift void gps_l1_ca_code_gen_complex_sampled(std::complex* _dest, unsigned int _prn, signed int _fs, unsigned int _chip_shift); #endif /* GNSS_SDR_GPS_SDR_SIGNAL_PROCESSING_H_ */ gnss-sdr-0.0.6/src/algorithms/libs/complex_byte_to_float_x2.h0000644000175000017500000000365212576764164023645 0ustar carlescarles/*! * \file complex_byte_to_float_x2.h * \brief Adapts a std::complex stream into two 16-bits (short) streams * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_COMPLEX_BYTE_TO_FLOAT_X2_H_ #define GNSS_SDR_COMPLEX_BYTE_TO_FLOAT_X2_H_ #include #include class complex_byte_to_float_x2; typedef boost::shared_ptr complex_byte_to_float_x2_sptr; complex_byte_to_float_x2_sptr make_complex_byte_to_float_x2(); /*! * \brief This class adapts a std::complex stream * into two 16-bits (short) streams */ class complex_byte_to_float_x2 : public gr::sync_block { private: friend complex_byte_to_float_x2_sptr make_complex_byte_to_float_x2(); public: complex_byte_to_float_x2(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/libs/gps_l2c_signal.cc0000644000175000017500000001055312576764164021675 0ustar carlescarles/*! * \file gps_l2c_signal.cc * \brief This class implements signal generators for the GPS L2C signals * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include int32_t gps_l2c_m_shift(int32_t x) { return static_cast((x >> 1)^((x & 1) * 0445112474)); } void gps_l2c_m_code(int32_t * _dest, unsigned int _prn) { int32_t x; x = GPS_L2C_M_INIT_REG[ _prn - 1]; for (int n = 0; n < GPS_L2_M_CODE_LENGTH_CHIPS; n++) { _dest[n] = (int8_t)(x&1); x = gps_l2c_m_shift(x); } } void gps_l2c_m_code_gen_complex(std::complex* _dest, unsigned int _prn) { int32_t* _code = new int32_t[GPS_L2_M_CODE_LENGTH_CHIPS]; if (_prn > 0 and _prn < 51) { gps_l2c_m_code(_code, _prn); } for (signed int i = 0; i < GPS_L2_M_CODE_LENGTH_CHIPS; i++) { _dest[i] = std::complex(1.0 - 2.0 * _code[i], 0.0); } delete[] _code; } /* * Generates complex GPS L2C M code for the desired SV ID and sampled to specific sampling frequency */ void gps_l2c_m_code_gen_complex_sampled(std::complex* _dest, unsigned int _prn, signed int _fs) { int32_t* _code = new int32_t[GPS_L2_M_CODE_LENGTH_CHIPS]; if (_prn > 0 and _prn < 51) { gps_l2c_m_code(_code, _prn); } signed int _samplesPerCode, _codeValueIndex; float _ts; float _tc; const signed int _codeLength = GPS_L2_M_CODE_LENGTH_CHIPS; //--- Find number of samples per spreading code ---------------------------- _samplesPerCode = static_cast(static_cast(_fs) / (static_cast(GPS_L2_M_CODE_RATE_HZ) / static_cast(_codeLength))); //--- Find time constants -------------------------------------------------- _ts = 1.0 / static_cast(_fs); // Sampling period in sec _tc = 1.0 / static_cast(GPS_L2_M_CODE_RATE_HZ); // C/A chip period in sec float aux; for (signed int i = 0; i < _samplesPerCode; i++) { //=== Digitizing ======================================================= //--- Make index array to read C/A code values ------------------------- // The length of the index array depends on the sampling frequency - // number of samples per millisecond (because one C/A code period is one // millisecond). //TODO: Check this formula! Seems to start with an extra sample _codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1; //aux = (_ts * (i + 1)) / _tc; //_codeValueIndex = static_cast(static_cast(aux)) - 1; //--- Make the digitized version of the C/A code ----------------------- // The "upsampled" code is made by selecting values form the CA code // chip array (caCode) for the time instances of each sample. if (i == _samplesPerCode - 1) { //--- Correct the last index (due to number rounding issues) ----------- _dest[i] = std::complex(1.0 - 2.0 * _code[_codeLength - 1], 0); } else { _dest[i] = std::complex(1.0 - 2.0 * _code[_codeValueIndex], 0); //repeat the chip -> upsample } } delete[] _code; } gnss-sdr-0.0.6/src/algorithms/libs/gps_sdr_signal_processing.cc0000644000175000017500000001417312576764164024243 0ustar carlescarles/*! * \file gps_sdr_signal_processing.cc * \brief This class implements various functions for GPS L1 CA signals * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_sdr_signal_processing.h" #include #include auto auxCeil = [](float x){ return static_cast(static_cast((x)+1)); }; void gps_l1_ca_code_gen_complex(std::complex* _dest, signed int _prn, unsigned int _chip_shift) { const unsigned int _code_length = 1023; bool G1[_code_length]; bool G2[_code_length]; bool G1_register[10], G2_register[10]; bool feedback1, feedback2; bool aux; unsigned int lcv, lcv2; unsigned int delay; signed int prn_idx; /* G2 Delays as defined in GPS-ISD-200D */ const signed int delays[51] = {5 /*PRN1*/, 6, 7, 8, 17, 18, 139, 140, 141, 251, 252, 254 ,255, 256, 257, 258, 469, 470, 471, 472, 473, 474, 509, 512, 513, 514, 515, 516, 859, 860, 861, 862 /*PRN32*/, 145 /*PRN120*/, 175, 52, 21, 237, 235, 886, 657, 634, 762, 355, 1012, 176, 603, 130, 359, 595, 68, 386 /*PRN138*/}; // compute delay array index for given PRN number if(120 <= _prn && _prn <= 138) { prn_idx = _prn - 88; // SBAS PRNs are at array indices 31 to 50 (offset: -120+33-1 =-88) //prn_idx = _prn - 87; // SBAS PRNs are at array indices 31 to 50 (offset: -120+33 =-87) } else { prn_idx = _prn - 1; } /* A simple error check */ if((prn_idx < 0) || (prn_idx > 51)) return; for(lcv = 0; lcv < 10; lcv++) { G1_register[lcv] = 1; G2_register[lcv] = 1; } /* Generate G1 & G2 Register */ for(lcv = 0; lcv < _code_length; lcv++) { G1[lcv] = G1_register[0]; G2[lcv] = G2_register[0]; feedback1 = G1_register[7]^G1_register[0]; feedback2 = (G2_register[8] + G2_register[7] + G2_register[4] + G2_register[2] + G2_register[1] + G2_register[0]) & 0x1; for(lcv2 = 0; lcv2 < 9; lcv2++) { G1_register[lcv2] = G1_register[lcv2 + 1]; G2_register[lcv2] = G2_register[lcv2 + 1]; } G1_register[9] = feedback1; G2_register[9] = feedback2; } /* Set the delay */ delay = _code_length - delays[prn_idx]; delay += _chip_shift; delay %= _code_length; /* Generate PRN from G1 and G2 Registers */ for(lcv = 0; lcv < _code_length; lcv++) { aux = G1[(lcv + _chip_shift) % _code_length]^G2[delay]; if(aux == true) { _dest[lcv] = std::complex(1, 0); } else { _dest[lcv] = std::complex(-1, 0); } delay++; delay %= _code_length; } } /* * Generates complex GPS L1 C/A code for the desired SV ID and sampled to specific sampling frequency */ void gps_l1_ca_code_gen_complex_sampled(std::complex* _dest, unsigned int _prn, signed int _fs, unsigned int _chip_shift) { // This function is based on the GNU software GPS for MATLAB in the Kay Borre book std::complex _code[1023]; signed int _samplesPerCode, _codeValueIndex; float _ts; float _tc; float aux; const signed int _codeFreqBasis = 1023000; //Hz const signed int _codeLength = 1023; //--- Find number of samples per spreading code ---------------------------- _samplesPerCode = static_cast(static_cast(_fs) / static_cast(_codeFreqBasis / _codeLength)); //--- Find time constants -------------------------------------------------- _ts = 1.0 / static_cast(_fs); // Sampling period in sec _tc = 1.0 / static_cast(_codeFreqBasis); // C/A chip period in sec gps_l1_ca_code_gen_complex(_code, _prn, _chip_shift); //generate C/A code 1 sample per chip for (signed int i = 0; i < _samplesPerCode; i++) { //=== Digitizing ======================================================= //--- Make index array to read C/A code values ------------------------- // The length of the index array depends on the sampling frequency - // number of samples per millisecond (because one C/A code period is one // millisecond). // _codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1; aux = (_ts * (i + 1)) / _tc; _codeValueIndex = auxCeil( aux ) - 1; //--- Make the digitized version of the C/A code ----------------------- // The "upsampled" code is made by selecting values form the CA code // chip array (caCode) for the time instances of each sample. if (i == _samplesPerCode - 1) { //--- Correct the last index (due to number rounding issues) ----------- _dest[i] = _code[_codeLength - 1]; } else { _dest[i] = _code[_codeValueIndex]; //repeat the chip -> upsample } } } gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/0000755000175000017500000000000012576764164022557 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/0000755000175000017500000000000012576764164025275 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/0000755000175000017500000000000012576764164026251 5ustar carlescarles././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_machines.tmpl.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_machines.tmpl.0000644000175000017500000000346012576764164033615 0ustar carlescarles/* * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_LIBVOLK_GNSSSDR_MACHINES_H #define INCLUDED_LIBVOLK_GNSSSDR_MACHINES_H #include #include #include #include __VOLK_DECL_BEGIN struct volk_gnsssdr_machine { const unsigned int caps; //capabilities (i.e., archs compiled into this machine, in the volk_gnsssdr_get_lvarch format) const char *name; const size_t alignment; //the maximum byte alignment required for functions in this library #for $kern in $kernels const char *$(kern.name)_name; const char *$(kern.name)_impl_names[$(len($archs))]; const int $(kern.name)_impl_deps[$(len($archs))]; const bool $(kern.name)_impl_alignment[$(len($archs))]; const $(kern.pname) $(kern.name)_impls[$(len($archs))]; const size_t $(kern.name)_n_impls; #end for }; #for $machine in $machines #ifdef LV_MACHINE_$(machine.name.upper()) extern struct volk_gnsssdr_machine volk_gnsssdr_machine_$(machine.name); #endif #end for __VOLK_DECL_END #endif //INCLUDED_LIBVOLK_GNSSSDR_MACHINES_H ././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_machine_xxx.tmpl.cgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_machine_xxx.tm0000644000175000017500000000557312576764164033736 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #set $this_machine = $machine_dict[$args[0]] #set $arch_names = $this_machine.arch_names #for $arch in $this_machine.archs #define LV_HAVE_$(arch.name.upper()) 1 #end for #include #include "volk_gnsssdr_machines.h" #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #for $kern in $kernels #include #end for ######################################################################## #def make_arch_have_list($archs) $(' | '.join(['(1 << LV_%s)'%a.name.upper() for a in $archs]))#slurp #end def ######################################################################## #def make_impl_name_list($impls) {$(', '.join(['"%s"'%i.name for i in $impls]))}#slurp #end def ######################################################################## #def make_impl_align_list($impls) {$(', '.join(['true' if i.is_aligned else 'false' for i in $impls]))}#slurp #end def ######################################################################## #def make_impl_deps_list($impls) {$(', '.join([' | '.join(['(1 << LV_%s)'%d.upper() for d in i.deps]) for i in $impls]))}#slurp #end def ######################################################################## #def make_impl_fcn_list($name, $impls) {$(', '.join(['%s_%s'%($name, i.name) for i in $impls]))}#slurp #end def struct volk_gnsssdr_machine volk_gnsssdr_machine_$(this_machine.name) = { $make_arch_have_list($this_machine.archs), "$this_machine.name", $this_machine.alignment, #for $kern in $kernels #set $impls = $kern.get_impls($arch_names) "$kern.name", ##//kernel name $make_impl_name_list($impls), ##//list of kernel implementations by name $make_impl_deps_list($impls), ##//list of arch dependencies per implementation $make_impl_align_list($impls), ##//alignment required? for each implementation $make_impl_fcn_list($kern.name, $impls), ##//pointer to each implementation $(len($impls)), ##//number of implementations listed here #end for }; ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_machines.tmpl.cgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_machines.tmpl.0000644000175000017500000000221712576764164033614 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include "volk_gnsssdr_machines.h" struct volk_gnsssdr_machine *volk_gnsssdr_machines[] = { #for $machine in $machines #ifdef LV_MACHINE_$(machine.name.upper()) &volk_gnsssdr_machine_$(machine.name), #endif #end for }; unsigned int n_volk_gnsssdr_machines = sizeof(volk_gnsssdr_machines)/sizeof(*volk_gnsssdr_machines); gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr.tmpl.h0000644000175000017500000000556312576764164032124 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_VOLK_GNSSSDR_RUNTIME #define INCLUDED_VOLK_GNSSSDR_RUNTIME #include #include #include #include #include #include #include __VOLK_DECL_BEGIN typedef struct volk_gnsssdr_func_desc { const char **impl_names; const int *impl_deps; const bool *impl_alignment; const size_t n_impls; } volk_gnsssdr_func_desc_t; //! Prints a list of machines available VOLK_API void volk_gnsssdr_list_machines(void); //! Returns the name of the machine this instance will use VOLK_API const char* volk_gnsssdr_get_machine(void); //! Get the machine alignment in bytes VOLK_API size_t volk_gnsssdr_get_alignment(void); /*! * The VOLK_OR_PTR macro is a convenience macro * for checking the alignment of a set of pointers. * Example usage: * volk_gnsssdr_is_aligned(VOLK_OR_PTR((VOLK_OR_PTR(p0, p1), p2))) */ #define VOLK_OR_PTR(ptr0, ptr1) \ (const void *)(((intptr_t)(ptr0)) | ((intptr_t)(ptr1))) /*! * Is the pointer on a machine alignment boundary? * * Note: for performance reasons, this function * is not usable until another volk_gnsssdr API call is made * which will perform certain initialization tasks. * * \param ptr the pointer to some memory buffer * \return 1 for alignment boundary, else 0 */ VOLK_API bool volk_gnsssdr_is_aligned(const void *ptr); #for $kern in $kernels //! A function pointer to the dispatcher implementation extern VOLK_API $kern.pname $kern.name; //! A function pointer to the fastest aligned implementation extern VOLK_API $kern.pname $(kern.name)_a; //! A function pointer to the fastest unaligned implementation extern VOLK_API $kern.pname $(kern.name)_u; //! Call into a specific implementation given by name extern VOLK_API void $(kern.name)_manual($kern.arglist_full, const char* impl_name); //! Get description paramaters for this kernel extern VOLK_API volk_gnsssdr_func_desc_t $(kern.name)_get_func_desc(void); #end for __VOLK_DECL_END #endif /*INCLUDED_VOLK_GNSSSDR_RUNTIME*/ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr.tmpl.c0000644000175000017500000001412712576764164032113 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include "volk_gnsssdr_machines.h" #include #include #include "volk_gnsssdr_rank_archs.h" #include #include #include #include static size_t __alignment = 0; static intptr_t __alignment_mask = 0; struct volk_gnsssdr_machine *get_machine(void) { extern struct volk_gnsssdr_machine *volk_gnsssdr_machines[]; extern unsigned int n_volk_gnsssdr_machines; static struct volk_gnsssdr_machine *machine = NULL; if(machine != NULL) return machine; else { unsigned int max_score = 0; unsigned int i; struct volk_gnsssdr_machine *max_machine = NULL; for(i=0; icaps & (~volk_gnsssdr_get_lvarch()))) { if(volk_gnsssdr_machines[i]->caps > max_score) { max_score = volk_gnsssdr_machines[i]->caps; max_machine = volk_gnsssdr_machines[i]; } } } machine = max_machine; printf("Using Volk machine: %s\n", machine->name); __alignment = machine->alignment; __alignment_mask = (intptr_t)(__alignment-1); return machine; } } void volk_gnsssdr_list_machines(void) { extern struct volk_gnsssdr_machine *volk_gnsssdr_machines[]; extern unsigned int n_volk_gnsssdr_machines; unsigned int i; for(i=0; icaps & (~volk_gnsssdr_get_lvarch()))) { printf("%s;", volk_gnsssdr_machines[i]->name); } } printf("\n"); } const char* volk_gnsssdr_get_machine(void) { extern struct volk_gnsssdr_machine *volk_gnsssdr_machines[]; extern unsigned int n_volk_gnsssdr_machines; static struct volk_gnsssdr_machine *machine = NULL; if(machine != NULL) return machine->name; else { unsigned int max_score = 0; unsigned int i; struct volk_gnsssdr_machine *max_machine = NULL; for(i=0; icaps & (~volk_gnsssdr_get_lvarch()))) { if(volk_gnsssdr_machines[i]->caps > max_score) { max_score = volk_gnsssdr_machines[i]->caps; max_machine = volk_gnsssdr_machines[i]; } } } machine = max_machine; return machine->name; } } size_t volk_gnsssdr_get_alignment(void) { get_machine(); //ensures alignment is set return __alignment; } bool volk_gnsssdr_is_aligned(const void *ptr) { return ((intptr_t)(ptr) & __alignment_mask) == 0; } #define LV_HAVE_GENERIC #define LV_HAVE_DISPATCHER #for $kern in $kernels #if $kern.has_dispatcher #include //pulls in the dispatcher #end if static inline void __$(kern.name)_d($kern.arglist_full) { #if $kern.has_dispatcher $(kern.name)_dispatcher($kern.arglist_names); return; #end if if (volk_gnsssdr_is_aligned( #set $num_open_parens = 0 #for $arg_type, $arg_name in $kern.args #if '*' in $arg_type VOLK_OR_PTR($arg_name, #set $num_open_parens += 1 #end if #end for 0$(')'*$num_open_parens) )){ $(kern.name)_a($kern.arglist_names); } else{ $(kern.name)_u($kern.arglist_names); } } static inline void __init_$(kern.name)(void) { const char *name = get_machine()->$(kern.name)_name; const char **impl_names = get_machine()->$(kern.name)_impl_names; const int *impl_deps = get_machine()->$(kern.name)_impl_deps; const bool *alignment = get_machine()->$(kern.name)_impl_alignment; const size_t n_impls = get_machine()->$(kern.name)_n_impls; const size_t index_a = volk_gnsssdr_rank_archs(name, impl_names, impl_deps, alignment, n_impls, true/*aligned*/); const size_t index_u = volk_gnsssdr_rank_archs(name, impl_names, impl_deps, alignment, n_impls, false/*unaligned*/); $(kern.name)_a = get_machine()->$(kern.name)_impls[index_a]; $(kern.name)_u = get_machine()->$(kern.name)_impls[index_u]; assert($(kern.name)_a); assert($(kern.name)_u); $(kern.name) = &__$(kern.name)_d; } static inline void __$(kern.name)_a($kern.arglist_full) { __init_$(kern.name)(); $(kern.name)_a($kern.arglist_names); } static inline void __$(kern.name)_u($kern.arglist_full) { __init_$(kern.name)(); $(kern.name)_u($kern.arglist_names); } static inline void __$(kern.name)($kern.arglist_full) { __init_$(kern.name)(); $(kern.name)($kern.arglist_names); } $kern.pname $(kern.name)_a = &__$(kern.name)_a; $kern.pname $(kern.name)_u = &__$(kern.name)_u; $kern.pname $(kern.name) = &__$(kern.name); void $(kern.name)_manual($kern.arglist_full, const char* impl_name) { const int index = volk_gnsssdr_get_index( get_machine()->$(kern.name)_impl_names, get_machine()->$(kern.name)_n_impls, impl_name ); get_machine()->$(kern.name)_impls[index]( $kern.arglist_names ); } volk_gnsssdr_func_desc_t $(kern.name)_get_func_desc(void) { const char **impl_names = get_machine()->$(kern.name)_impl_names; const int *impl_deps = get_machine()->$(kern.name)_impl_deps; const bool *alignment = get_machine()->$(kern.name)_impl_alignment; const size_t n_impls = get_machine()->$(kern.name)_n_impls; volk_gnsssdr_func_desc_t desc = { impl_names, impl_deps, alignment, n_impls }; return desc; } #end for gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_cpu.tmpl.c0000644000175000017500000001176112576764164032763 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include struct VOLK_CPU volk_gnsssdr_cpu; #if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64) #define VOLK_CPU_x86 #endif #if defined(VOLK_CPU_x86) //implement get cpuid for gcc compilers using a system or local copy of cpuid.h #if defined(__GNUC__) #if defined(HAVE_CPUID_H) #include #else #include "gcc_x86_cpuid.h" #endif #define cpuid_x86(op, r) __get_cpuid(op, (unsigned int *)r+0, (unsigned int *)r+1, (unsigned int *)r+2, (unsigned int *)r+3) /* Return Intel AVX extended CPU capabilities register. * This function will bomb on non-AVX-capable machines, so * check for AVX capability before executing. */ #if ((__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 2) || (__clang_major__ >= 3)) && defined(HAVE_XGETBV) static inline unsigned long long _xgetbv(unsigned int index){ unsigned int eax, edx; __asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(index)); return ((unsigned long long)edx << 32) | eax; } #define __xgetbv() _xgetbv(0) #else #define __xgetbv() 0 #endif //implement get cpuid for MSVC compilers using __cpuid intrinsic #elif defined(_MSC_VER) && defined(HAVE_INTRIN_H) #include #define cpuid_x86(op, r) __cpuid(((int*)r), op) #if defined(_XCR_XFEATURE_ENABLED_MASK) #define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK) #else #define __xgetbv() 0 #endif #else #error "A get cpuid for volk_gnsssdr is not available on this compiler..." #endif //defined(__GNUC__) #endif //defined(VOLK_CPU_x86) static inline unsigned int cpuid_x86_bit(unsigned int reg, unsigned int op, unsigned int bit) { #if defined(VOLK_CPU_x86) unsigned int regs[4]; cpuid_x86(op, regs); return regs[reg] >> bit & 0x01; #else return 0; #endif } static inline unsigned int check_extended_cpuid(unsigned int val) { #if defined(VOLK_CPU_x86) unsigned int regs[4]; cpuid_x86(0x80000000, regs); return regs[0] >= val; #else return 0; #endif } static inline unsigned int get_avx_enabled(void) { #if defined(VOLK_CPU_x86) return __xgetbv() & 0x6; #else return 0; #endif } //neon detection is linux specific #if defined(__arm__) && defined(__linux__) #include #include #include #define VOLK_CPU_ARM #endif static int has_neon(void){ #if defined(VOLK_CPU_ARM) FILE *auxvec_f; unsigned long auxvec[2]; unsigned int found_neon = 0; auxvec_f = fopen("/proc/self/auxv", "rb"); if(!auxvec_f) return 0; size_t r = 1; //so auxv is basically 32b of ID and 32b of value //so it goes like this while(!found_neon && r) { r = fread(auxvec, sizeof(unsigned long), 2, auxvec_f); if((auxvec[0] == AT_HWCAP) && (auxvec[1] & HWCAP_NEON)) found_neon = 1; } fclose(auxvec_f); return found_neon; #else return 0; #endif } static int has_ppc(void){ #ifdef __PPC__ return 1; #else return 0; #endif } #for $arch in $archs static int i_can_has_$arch.name (void) { #for $check, $params in $arch.checks if ($(check)($(', '.join($params))) == 0) return 0; #end for return 1; } #end for #if defined(HAVE_FENV_H) #if defined(FE_TONEAREST) #include static inline void set_float_rounding(void){ fesetround(FE_TONEAREST); } #else static inline void set_float_rounding(void){ //do nothing } #endif #elif defined(_MSC_VER) #include static inline void set_float_rounding(void){ unsigned int cwrd; _controlfp_s(&cwrd, 0, 0); _controlfp_s(&cwrd, _RC_NEAR, _MCW_RC); } #else static inline void set_float_rounding(void){ //do nothing } #endif void volk_gnsssdr_cpu_init() { #for $arch in $archs volk_gnsssdr_cpu.has_$arch.name = &i_can_has_$arch.name; #end for set_float_rounding(); } unsigned int volk_gnsssdr_get_lvarch() { unsigned int retval = 0; volk_gnsssdr_cpu_init(); #for $arch in $archs retval += volk_gnsssdr_cpu.has_$(arch.name)() << LV_$(arch.name.upper()); #end for return retval; } ././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_config_fixed.tmpl.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_config_fixed.t0000644000175000017500000000171112576764164033660 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_VOLK_GNSSSDR_CONFIG_FIXED_H #define INCLUDED_VOLK_GNSSSDR_CONFIG_FIXED_H #for $i, $arch in enumerate($archs) #define LV_$(arch.name.upper()) $i #end for #endif /*INCLUDED_VOLK_GNSSSDR_CONFIG_FIXED*/ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_cpu.tmpl.h0000644000175000017500000000217712576764164032771 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_VOLK_GNSSSDR_CPU_H #define INCLUDED_VOLK_GNSSSDR_CPU_H #include __VOLK_DECL_BEGIN struct VOLK_CPU { #for $arch in $archs int (*has_$arch.name) (); #end for }; extern struct VOLK_CPU volk_gnsssdr_cpu; void volk_gnsssdr_cpu_init (); unsigned int volk_gnsssdr_get_lvarch (); __VOLK_DECL_END #endif /*INCLUDED_VOLK_GNSSSDR_CPU_H*/ ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_typedefs.tmpl.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/tmpl/volk_gnsssdr_typedefs.tmpl.0000644000175000017500000000200312576764164033641 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_VOLK_GNSSSDR_TYPEDEFS #define INCLUDED_VOLK_GNSSSDR_TYPEDEFS #include #include #for $kern in $kernels typedef void (*$(kern.pname))($kern.arglist_types); #end for #endif /*INCLUDED_VOLK_GNSSSDR_TYPEDEFS*/ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/README.txt0000644000175000017500000000407112576764164026775 0ustar carlescarles ######################################################################## # Adding proto-kernels to the module ######################################################################## 1) Add your proto-kernels inside the kernels/ folder, and the ORC implementations inside the orc/ folder. Add the macros implementations inside the /kernels/CommonMacros folder. (those folders are found in the root of the volk_gnsssdr module) 2) Add one profiling line for each of the proto-kernels inside the /apps/volk_gnsssdr_profile.cc file. 3) Add one test line for each of the proto-kernels inside the /lib/testqa.cc file. ######################################################################## # Modifications to allow profiling of some proto-kernels with special parameters ######################################################################## Some of the proto-kernels that GNSS-SDR needs are not supported by the profiling environment of the volk_gnsssdr module. In order to profile them some modifications need to be done to two files: 1) src/algorithms/libs/volk_gnsssdr/lib/qa_utils.cc At the first part of this file there are defined the parameters supported by the environment. The number after run_cast_test indicates the total number of parameters passed to the proto-kernel (input +output parameters). The other part indicates the type of the data passed. Inside func(....) you will need to add the same number of buffs[ ] that the one specified after run_cast_test. 2) src/algorithms/libs/volk_gnsssdr/lib/qa_utils.h In the header you will need to add typedefs for the new definitions made in the .cc file. Take care: you will need to add the same number of void * that the one specified after run_cast_test. 3) To be able to use volk_gnsssdr and default volk functions at the same time in the same file, it is required to add the template files that volk_gnsssdr module uses at build time to generate some headers. The files are found inside tmpl/: volk_gnsssdr.tmpl.h volk_gnsssdr_typedefs.tmpl.h volk_gnsssdr_machines.tmpl.h volk_gnsssdr_cpu.tmpl.h volk_gnsssdr_config_fixed.tmpl.h gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/0000755000175000017500000000000012576764164026060 5ustar carlescarles././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_s8ic_multiply_8ic.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_s8ic_multip0000644000175000017500000000315412576764164033607 0ustar carlescarles# # ORC implementation: multiplies a group of 16 bits vectors by one constant vector # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ORC code that multiplies a group of 16 bits vectors # (8 bits the real part and 8 bits the imaginary part) by one constant vector # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl .source 2 src1 .param 2 src2real .param 2 src2imag .dest 2 dst .temp 2 iqprod .temp 1 real .temp 1 imag .temp 1 rr .temp 1 ii .temp 1 ri .temp 1 ir x2 mullb iqprod, src1, src2real splitwb ir, rr, iqprod x2 mullb iqprod, src1, src2imag splitwb ii, ri, iqprod subb real, rr, ii addb imag, ri, ir mergebw dst, real, imag ././@LongLink0000644000000000000000000000016200000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_magnitude_squared_8i.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_magnitude_s0000644000175000017500000000270612576764164033650 0ustar carlescarles# # ORC implementation: calculates the magnitude squared of a 16 bits vector # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ORC code that calculates the magnitude squared of a # 16 bits vector (8 bits the real part and 8 bits the imaginary part) # result = (real*real) + (imag*imag) # # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8ic_magnitude_squared_8i_a_orc_impl .source 2 src1 .dest 1 dst .temp 2 iqprod .temp 1 ac .temp 1 bd x2 mullb iqprod, src1, src1 splitwb bd, ac, iqprod addb dst, ac, bd ././@LongLink0000644000000000000000000000017700000000000011610 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_16sc_magnitude_32f_aligned16_orc_impl.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_16sc_magnitude_0000644000175000017500000000223712576764164033555 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # .function volk_gnsssdr_16ic_magnitude_32f_a_orc_impl .source 4 src .dest 4 dst .floatparam 4 scalar .temp 4 reall .temp 4 imagl .temp 2 reals .temp 2 imags .temp 4 realf .temp 4 imagf .temp 4 sumf splitlw reals, imags, src convswl reall, reals convswl imagl, imags convlf realf, reall convlf imagf, imagl divf realf, realf, scalar divf imagf, imagf, scalar mulf realf, realf, realf mulf imagf, imagf, imagf addf sumf, realf, imagf sqrtf dst, sumf ././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_x2_dot_prod_8ic.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_x2_dot_prod0000644000175000017500000000330712576764164033572 0ustar carlescarles# # ORC implementation: multiplies two 16 bits vectors and accumulates them # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ORC code that multiplies two 16 bits vectors (8 bits the real part # and 8 bits the imaginary part) and accumulates them # # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8ic_x2_dot_prod_8ic_a_orc_impl .source 2 src1 .source 2 src2 .accumulator 2 accreal .accumulator 2 accimag .temp 2 iqprod .temp 1 real .temp 1 imag .temp 2 real2 .temp 2 imag2 .temp 1 ac .temp 1 bd .temp 2 swapped x2 mullb iqprod, src1, src2 splitwb bd, ac, iqprod subb real, ac, bd swapw swapped, src1 x2 mullb iqprod, swapped, src2 splitwb bd, ac, iqprod addb imag, ac, bd mergebw real2, 0, real accw accreal, real2 mergebw imag2, 0, imag accw accimag, imag2 ././@LongLink0000644000000000000000000000015000000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_32f_x2_add_32f.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_32f_x2_add_32f.0000644000175000017500000000151512576764164033146 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # .function volk_gnsssdr_32f_x2_add_32f_a_orc_impl .dest 4 dst .source 4 src1 .source 4 src2 addf dst, src1, src2 ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_conjugate_8ic.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_conjugate_80000644000175000017500000000260612576764164033556 0ustar carlescarles# # ORC implementation: calculates the conjugate of a 16 bits vector # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # ORC code that calculates the conjugate of a # 16 bits vector (8 bits the real part and 8 bits the imaginary part) # result = (real*real) + (imag*imag) # # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl .source 2 src1 .dest 2 dst .temp 2 merged mergebw merged, 1, -1 x2 mullb dst, merged, src1 ././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_x2_multiply_8ic.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_x2_multiply0000644000175000017500000000304512576764164033636 0ustar carlescarles# # ORC implementation: multiplies two 16 bits vectors # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ORC code that multiplies two 16 bits vectors (8 bits the real part # and 8 bits the imaginary part) # # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8ic_x2_multiply_8ic_a_orc_impl .source 2 src1 .source 2 src2 .dest 2 dst .temp 2 iqprod .temp 1 real .temp 1 imag .temp 1 ac .temp 1 bd .temp 2 swapped x2 mullb iqprod, src1, src2 splitwb bd, ac, iqprod subb real, ac, bd swapw swapped, src1 x2 mullb iqprod, swapped, src2 splitwb bd, ac, iqprod addb imag, ac, bd mergebw dst, real, imag ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8i_accumulator_s8i.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8i_accumulator_0000644000175000017500000000241712576764164033663 0ustar carlescarles# # ORC implementation: 8 bits (char) scalar accumulator # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # ORC code that implements an accumulator of char values # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8i_accumulator_s8i_a_orc_impl .source 1 src1 .accumulator 2 acc .temp 2 sum mergebw sum, 0, src1 accw acc, sum ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_32fc_x2_multiply_32fc.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_32fc_x2_multipl0000644000175000017500000000210612576764164033514 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # .function volk_gnsssdr_32fc_x2_multiply_32fc_a_orc_impl .source 8 src1 .source 8 src2 .dest 8 dst .temp 8 iqprod .temp 4 real .temp 4 imag .temp 4 ac .temp 4 bd .temp 8 swapped x2 mulf iqprod, src1, src2 splitql bd, ac, iqprod subf real, ac, bd swaplq swapped, src1 x2 mulf iqprod, swapped, src2 splitql bd, ac, iqprod addf imag, ac, bd mergelq dst, real, imag ././@LongLink0000644000000000000000000000016300000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8ic_x5_cw_epl_c0000644000175000017500000000746412576764164033546 0ustar carlescarles# # ORC implementation: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 16 bits vectors # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ORC code that performs the carrier wipe-off mixing and the # Early, Prompt, and Late correlation with 16 bits vectors (8 bits the # real part and 8 bits the imaginary part): # - The carrier wipe-off is done by multiplying the input signal by the # carrier (multiplication of 16 bits vectors) It returns the input # signal in base band (BB) # - Early values are calculated by multiplying the input signal in BB by the # early code (multiplication of 16 bits vectors), accumulating the results # - Prompt values are calculated by multiplying the input signal in BB by the # prompt code (multiplication of 16 bits vectors), accumulating the results # - Late values are calculated by multiplying the input signal in BB by the # late code (multiplication of 16 bits vectors), accumulating the results # # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_first_a_orc_impl .source 2 input .source 2 carrier .source 2 E_code .source 2 P_code .accumulator 2 E_out_real .accumulator 2 E_out_imag .accumulator 2 P_out_real .accumulator 2 P_out_imag .temp 2 bb_signal_sample .temp 2 iqprod .temp 1 real .temp 1 imag .temp 1 ac .temp 1 bd .temp 2 swapped .temp 2 real2 .temp 2 imag2 x2 mullb iqprod, input, carrier splitwb bd, ac, iqprod subb real, ac, bd swapw swapped, input x2 mullb iqprod, swapped, carrier splitwb bd, ac, iqprod addb imag, ac, bd mergebw bb_signal_sample, real, imag swapw swapped, bb_signal_sample x2 mullb iqprod, bb_signal_sample, E_code splitwb bd, ac, iqprod subb real, ac, bd x2 mullb iqprod, swapped, E_code splitwb bd, ac, iqprod addb imag, ac, bd mergebw real2, 0, real mergebw imag2, 0, imag accw E_out_real, real2 accw E_out_imag, imag2 x2 mullb iqprod, bb_signal_sample, P_code splitwb bd, ac, iqprod subb real, ac, bd x2 mullb iqprod, swapped, P_code splitwb bd, ac, iqprod addb imag, ac, bd mergebw real2, 0, real mergebw imag2, 0, imag accw P_out_real, real2 accw P_out_imag, imag2 .function volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_second_a_orc_impl .source 2 input .source 2 carrier .source 2 L_code .accumulator 2 L_out_real .accumulator 2 L_out_imag .temp 2 bb_signal_sample .temp 2 iqprod .temp 1 real .temp 1 imag .temp 1 ac .temp 1 bd .temp 2 swapped .temp 2 real2 .temp 2 imag2 x2 mullb iqprod, input, carrier splitwb bd, ac, iqprod subb real, ac, bd swapw swapped, input x2 mullb iqprod, swapped, carrier splitwb bd, ac, iqprod addb imag, ac, bd mergebw bb_signal_sample, real, imag swapw swapped, bb_signal_sample x2 mullb iqprod, bb_signal_sample, L_code splitwb bd, ac, iqprod subb real, ac, bd x2 mullb iqprod, swapped, L_code splitwb bd, ac, iqprod addb imag, ac, bd mergebw real2, 0, real mergebw imag2, 0, imag accw L_out_real, real2 accw L_out_imag, imag2 ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8i_x2_add_8i.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8i_x2_add_8i.or0000644000175000017500000000230112576764164033355 0ustar carlescarles# # ORC implementation: adds pairs of 8 bits (char) scalars # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8i_x2_add_8i_a_orc_impl .dest 1 dst .source 1 src1 .source 1 src2 addb dst, src1, src2 ././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8u_x2_multiply_8u.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_8u_x2_multiply_0000644000175000017500000000240312576764164033643 0ustar carlescarles# # ORC implementation: multiplies unsigned char values # # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com # # # ORC code that multiplies unsigned char values (8 bits data) # # ------------------------------------------------------------------------- # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # GNSS-SDR is a software defined Global Navigation # Satellite Systems receiver # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # ------------------------------------------------------------------------- # .function volk_gnsssdr_8u_x2_multiply_8u_a_orc_impl .source 1 src1 .source 1 src2 .dest 1 dst mullb dst, src1, src2 ././@LongLink0000644000000000000000000000016200000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_32fc_s32fc_multiply_32fc.orcgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/orc/volk_gnsssdr_32fc_s32fc_mult0000644000175000017500000000212312576764164033375 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # .function volk_gnsssdr_32fc_s32fc_multiply_32fc_a_orc_impl .source 8 src1 .floatparam 8 scalar .dest 8 dst .temp 8 iqprod .temp 4 real .temp 4 imag .temp 4 ac .temp 4 bd .temp 8 swapped x2 mulf iqprod, src1, scalar splitql bd, ac, iqprod subf real, ac, bd swaplq swapped, src1 x2 mulf iqprod, swapped, scalar splitql bd, ac, iqprod addf imag, ac, bd mergelq dst, real, imag gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/0000755000175000017500000000000012576764164026720 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/0000755000175000017500000000000012576764164031436 5ustar carlescarles././@LongLink0000644000000000000000000000016000000000000011600 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_complex.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssd0000644000175000017500000000650012577072203033701 0ustar carlescarles/*! * \file volk_gnsssdr_complex.h * \brief Provide typedefs and operators for all complex types in C and C++. * \author Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDE_VOLK_COMPLEX_H #define INCLUDE_VOLK_COMPLEX_H #ifndef INCLUDED_VOLK_COMPLEX_H #define INCLUDED_VOLK_COMPLEX_H /*! * \brief Provide typedefs and operators for all complex types in C and C++. * * The typedefs encompass all signed integer and floating point types. * Each operator function is intended to work across all data types. * Under C++, these operators are defined as inline templates. * Under C, these operators are defined as preprocessor macros. * The use of macros makes the operators agnostic to the type. * * The following operator functions are defined: * - lv_cmake - make a complex type from components * - lv_creal - get the real part of the complex number * - lv_cimag - get the imaginary part of the complex number * - lv_conj - take the conjugate of the complex number */ #ifdef __cplusplus #include #include typedef std::complex lv_8sc_t; typedef std::complex lv_16sc_t; typedef std::complex lv_32sc_t; typedef std::complex lv_64sc_t; typedef std::complex lv_32fc_t; typedef std::complex lv_64fc_t; template inline std::complex lv_cmake(const T &r, const T &i){ return std::complex(r, i); } template inline typename T::value_type lv_creal(const T &x){ return x.real(); } template inline typename T::value_type lv_cimag(const T &x){ return x.imag(); } template inline T lv_conj(const T &x){ return std::conj(x); } #else /* __cplusplus */ #include typedef char complex lv_8sc_t; typedef short complex lv_16sc_t; typedef long complex lv_32sc_t; typedef long long complex lv_64sc_t; typedef float complex lv_32fc_t; typedef double complex lv_64fc_t; #define lv_cmake(r, i) ((r) + _Complex_I*(i)) // When GNUC is available, use the complex extensions. // The extensions always return the correct value type. // http://gcc.gnu.org/onlinedocs/gcc/Complex.html #ifdef __GNUC__ #define lv_creal(x) (__real__(x)) #define lv_cimag(x) (__imag__(x)) #define lv_conj(x) (~(x)) // When not available, use the c99 complex function family, // which always returns double regardless of the input type. #else /* __GNUC__ */ #define lv_creal(x) (creal(x)) #define lv_cimag(x) (cimag(x)) #define lv_conj(x) (conj(x)) #endif /* __GNUC__ */ #endif /* __cplusplus */ #endif #endif /* INCLUDE_VOLK_COMPLEX_H */ ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_common.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssd0000644000175000017500000000751212576764164033722 0ustar carlescarles/*! * \file volk_gnsssdr_common.h * \brief Cross-platform attribute macros * \author Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_LIBVOLK_COMMON_H #define INCLUDED_LIBVOLK_COMMON_H //////////////////////////////////////////////////////////////////////// // Cross-platform attribute macros //////////////////////////////////////////////////////////////////////// #if defined __GNUC__ # define __VOLK_ATTR_ALIGNED(x) __attribute__((aligned(x))) # define __VOLK_ATTR_UNUSED __attribute__((unused)) # define __VOLK_ATTR_INLINE __attribute__((always_inline)) # define __VOLK_ATTR_DEPRECATED __attribute__((deprecated)) # if __GNUC__ >= 4 # define __VOLK_ATTR_EXPORT __attribute__((visibility("default"))) # define __VOLK_ATTR_IMPORT __attribute__((visibility("default"))) # else # define __VOLK_ATTR_EXPORT # define __VOLK_ATTR_IMPORT # endif #elif _MSC_VER # define __VOLK_ATTR_ALIGNED(x) __declspec(align(x)) # define __VOLK_ATTR_UNUSED # define __VOLK_ATTR_INLINE __forceinline # define __VOLK_ATTR_DEPRECATED __declspec(deprecated) # define __VOLK_ATTR_EXPORT __declspec(dllexport) # define __VOLK_ATTR_IMPORT __declspec(dllimport) #else # define __VOLK_ATTR_ALIGNED(x) # define __VOLK_ATTR_UNUSED # define __VOLK_ATTR_INLINE # define __VOLK_ATTR_DEPRECATED # define __VOLK_ATTR_EXPORT # define __VOLK_ATTR_IMPORT #endif //////////////////////////////////////////////////////////////////////// // Ignore annoying warnings in MSVC //////////////////////////////////////////////////////////////////////// #if defined(_MSC_VER) # pragma warning(disable: 4244) //'conversion' conversion from 'type1' to 'type2', possible loss of data # pragma warning(disable: 4305) //'identifier' : truncation from 'type1' to 'type2' #endif //////////////////////////////////////////////////////////////////////// // C-linkage declaration macros // FIXME: due to the usage of complex.h, require gcc for c-linkage //////////////////////////////////////////////////////////////////////// #if defined(__cplusplus) && (__GNUC__) # define __VOLK_DECL_BEGIN extern "C" { # define __VOLK_DECL_END } #else # define __VOLK_DECL_BEGIN # define __VOLK_DECL_END #endif //////////////////////////////////////////////////////////////////////// // Define VOLK_API for library symbols // http://gcc.gnu.org/wiki/Visibility //////////////////////////////////////////////////////////////////////// #ifdef volk_gnsssdr_EXPORTS # define VOLK_API __VOLK_ATTR_EXPORT #else # define VOLK_API __VOLK_ATTR_IMPORT #endif //////////////////////////////////////////////////////////////////////// // The bit128 union used by some //////////////////////////////////////////////////////////////////////// #include #ifdef LV_HAVE_SSE #include #endif #ifdef LV_HAVE_SSE2 #include #endif union bit128{ uint16_t i16[8]; uint32_t i[4]; float f[4]; double d[2]; #ifdef LV_HAVE_SSE __m128 float_vec; #endif #ifdef LV_HAVE_SSE2 __m128i int_vec; __m128d double_vec; #endif }; #define bit128_p(x) ((union bit128 *)(x)) #endif /* INCLUDED_LIBVOLK_COMMON_H */ ././@LongLink0000644000000000000000000000015600000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_prefs.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssd0000644000175000017500000000307712576764164033724 0ustar carlescarles/*! * \file volk_gnsssdr_prefs.h * \brief Gets path to volk_gnsssdr_config profiling info and loads * prefs into global prefs struct * \author Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_VOLK_PREFS_H #define INCLUDED_VOLK_PREFS_H #include #include __VOLK_DECL_BEGIN typedef struct volk_gnsssdr_arch_pref { char name[128]; //name of the kernel char impl_a[128]; //best aligned impl char impl_u[128]; //best unaligned impl } volk_gnsssdr_arch_pref_t; /*! * \brief get path to volk_gnsssdr_config profiling info */ VOLK_API void volk_gnsssdr_get_config_path(char *); /*! * \brief load prefs into global prefs struct */ VOLK_API size_t volk_gnsssdr_load_preferences(volk_gnsssdr_arch_pref_t **); __VOLK_DECL_END #endif /* INCLUDED_VOLK_PREFS_H */ ././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_malloc.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssd0000644000175000017500000000503712576764164033722 0ustar carlescarles/*! * \file volk_gnsssdr_malloc.h * \brief The volk_gnsssdr_malloc function behaves like malloc in that it * returns a pointer to the allocated memory. * \author Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_VOLK_MALLOC_H #define INCLUDED_VOLK_MALLOC_H #include #include "volk_gnsssdr/volk_gnsssdr_common.h" __VOLK_DECL_BEGIN /*! * \brief Allocate \p size bytes of data aligned to \p alignment. * * \details * Because we don't have a standard method to allocate buffers in * memory that are guaranteed to be on an alignment, VOLK handles this * itself. The volk_gnsssdr_malloc function behaves like malloc in that it * returns a pointer to the allocated memory. However, it also takes * in an alignment specification, which is usually something like 16 or * 32 to ensure that the aligned memory is located on a particular * byte boundary for use with SIMD. * * Internally, the volk_gnsssdr_malloc first checks if the compiler is C11 * compliant and uses the new aligned_alloc method. If not, it checks * if the system is POSIX compliant and uses posix_memalign. If that * fails, volk_gnsssdr_malloc handles the memory allocation and alignment * internally. * * Because of the ways in which volk_gnsssdr_malloc may allocate memory, it is * important to always free volk_gnsssdr_malloc pointers using volk_gnsssdr_free. * * \param size The number of bytes to allocate. * \param alignment The byte alignment of the allocated memory. * \return pointer to aligned memory. */ VOLK_API void *volk_gnsssdr_malloc(size_t size, size_t alignment); /*! * \brief Free's memory allocated by volk_gnsssdr_malloc. * \param aptr The aligned pointer allocated by volk_gnsssdr_malloc. */ VOLK_API void volk_gnsssdr_free(void *aptr); __VOLK_DECL_END #endif /* INCLUDED_VOLK_MALLOC_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/constants.h0000644000175000017500000000250312576764164033623 0ustar carlescarles/*! * \file constants.h * \brief volk_gnsssdr constants * \author Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef GNSS_SDR_VOLK_GNSSSDR_CONSTANTS_H #define GNSS_SDR_VOLK_GNSSSDR_CONSTANTS_H #include __VOLK_DECL_BEGIN VOLK_API char* volk_gnsssdr_prefix(); VOLK_API char* volk_gnsssdr_build_date(); VOLK_API char* volk_gnsssdr_version(); VOLK_API char* volk_gnsssdr_c_compiler(); VOLK_API char* volk_gnsssdr_compiler_flags(); VOLK_API char* volk_gnsssdr_available_machines(); __VOLK_DECL_END #endif /* GNSS_SDR_VOLK_GNSSSDR_CONSTANTS_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/CMakeLists.txt0000644000175000017500000001677512576764164030055 0ustar carlescarles# # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Project setup ######################################################################## cmake_minimum_required(VERSION 2.6) if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type: None Debug Release RelWithDebInfo MinSizeRel") project(volk_gnsssdr) enable_language(CXX) enable_language(C) enable_testing() set(VERSION 0.1) set(LIBVER 0.0.0) option(ENABLE_STRIP "Create a stripped volk_gnsssdr_profile binary (without shared libraries)" OFF) set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) #allows this to be a sub-project set(CMAKE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) #allows this to be a sub-project set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) #location for custom "Modules" set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ######################################################################## # Environment setup ######################################################################## IF(NOT DEFINED BOOST_ROOT) SET(BOOST_ROOT ${CMAKE_INSTALL_PREFIX}) ENDIF() IF(NOT DEFINED CROSSCOMPILE_MULTILIB) SET(CROSSCOMPILE_MULTILIB "") ENDIF() SET(CROSSCOMPILE_MULTILIB ${CROSSCOMPILE_MULTILIB} CACHE STRING "Define \"true\" if you have and want to use multiple C development libs installed for cross compile") ######################################################################## # Dependencies setup ######################################################################## include(GrPython) #sets PYTHON_EXECUTABLE and PYTHON_DASH_B VOLK_PYTHON_CHECK_MODULE("python >= 2.5" sys "sys.version.split()[0] >= '2.5'" PYTHON_MIN_VER_FOUND) VOLK_PYTHON_CHECK_MODULE("Cheetah >= 2.0.0" Cheetah "Cheetah.Version >= '2.0.0'" CHEETAH_FOUND) if(NOT PYTHON_MIN_VER_FOUND) message(FATAL_ERROR "Python 2.5 or greater required to build VOLK_GNSSSDR") endif() if(NOT CHEETAH_FOUND) message(FATAL_ERROR "Cheetah templates required to build VOLK_GNSSSDR") endif() if(MSVC) if (NOT DEFINED BOOST_ALL_DYN_LINK) set(BOOST_ALL_DYN_LINK TRUE) endif() set(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking") if(BOOST_ALL_DYN_LINK) add_definitions(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc else(BOOST_ALL_DYN_LINK) unset(BOOST_REQUIRED_COMPONENTS) #empty components list for static link endif(BOOST_ALL_DYN_LINK) endif(MSVC) include(VolkBoost) if(NOT Boost_FOUND) message(FATAL_ERROR "VOLK_GNSSSDR Requires boost to build") endif() option(ENABLE_ORC "Enable Orc" True) if(ENABLE_ORC) find_package(ORC) else(ENABLE_ORC) message(STATUS "Disabling use of ORC") endif(ENABLE_ORC) ######################################################################## # Setup the package config file ######################################################################## #set variables found in the pc.in file set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix "\${prefix}") set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}") set(includedir "\${prefix}/include") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr.pc.in ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr.pc @ONLY) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig COMPONENT "volk_gnsssdr_devel" ) ######################################################################## # Install all headers in the include directories ######################################################################## set(VOLK_RUNTIME_DIR bin) set(VOLK_LIBRARY_DIR lib${LIB_SUFFIX}) set(VOLK_INCLUDE_DIR include) install( DIRECTORY ${CMAKE_SOURCE_DIR}/kernels/volk_gnsssdr DESTINATION include COMPONENT "volk_gnsssdr_devel" FILES_MATCHING PATTERN "*.h" ) install(FILES ${CMAKE_SOURCE_DIR}/include/volk_gnsssdr/volk_gnsssdr_prefs.h ${CMAKE_SOURCE_DIR}/include/volk_gnsssdr/volk_gnsssdr_complex.h ${CMAKE_SOURCE_DIR}/include/volk_gnsssdr/volk_gnsssdr_common.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr_cpu.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr_config_fixed.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr_typedefs.h ${CMAKE_SOURCE_DIR}/include/volk_gnsssdr/volk_gnsssdr_malloc.h DESTINATION include/volk_gnsssdr COMPONENT "volk_gnsssdr_devel" ) ######################################################################## # Install cmake search routine for external use ######################################################################## if(NOT CMAKE_MODULES_DIR) set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake) endif(NOT CMAKE_MODULES_DIR) install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/VolkConfig.cmake DESTINATION ${CMAKE_MODULES_DIR}/volk_gnsssdr COMPONENT "volk_gnsssdr_devel" ) ######################################################################## # On Apple only, set install name and use rpath correctly, if not already set ######################################################################## if(APPLE) if(NOT CMAKE_INSTALL_NAME_DIR) set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib CACHE PATH "Library Install Name Destination Directory" FORCE) endif(NOT CMAKE_INSTALL_NAME_DIR) if(NOT CMAKE_INSTALL_RPATH) set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib CACHE PATH "Library Install RPath" FORCE) endif(NOT CMAKE_INSTALL_RPATH) if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "Do Build Using Library Install RPath" FORCE) endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) endif(APPLE) ######################################################################## # Setup the library ######################################################################## add_subdirectory(lib) ######################################################################## # And the utility apps ######################################################################## add_subdirectory(apps) add_subdirectory(python/volk_gnsssdr_modtool) ######################################################################## # Create uninstall target ######################################################################## configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) ######################################################################## # Print summary ######################################################################## message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/0000755000175000017500000000000012576764164026740 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/README.txt0000644000175000017500000000522012576764164030435 0ustar carlescarles######################################################################## # How to create custom kernel dispatchers ######################################################################## A kernel dispatcher is kernel implementation that calls other kernel implementations. By default, a dispatcher is generated by the build system for every kernel such that: * the best aligned implemention is called when all pointer arguments are aligned, * and otherwise the best unaligned implementation is called. The author of a VOLK kernel may create a custom dispatcher, to be called in place of the automatically generated one. A custom dispatcher may be useful to handle head and tail cases, or to implement different alignment and bounds checking logic. ######################################################################## # Code for an example dispatcher w/ tail case ######################################################################## #include #ifdef LV_HAVE_DISPATCHER static inline void volk_gnsssdr_32f_x2_add_32f_dispatcher(float* cVector, const float* aVector, const float* bVector, unsigned int num_points) { const unsigned int num_points_r = num_points%4; const unsigned int num_points_x = num_points - num_points_r; if (volk_gnsssdr_is_aligned(VOLK_OR_PTR(cVector, VOLK_OR_PTR(aVector, bVector)))) { volk_gnsssdr_32f_x2_add_32f_a(cVector, aVector, bVector, num_points_x); } else { volk_gnsssdr_32f_x2_add_32f_u(cVector, aVector, bVector, num_points_x); } volk_gnsssdr_32f_x2_add_32f_g(cVector+num_points_x, aVector+num_points_x, bVector+num_points_x, num_points_r); } #endif //LV_HAVE_DISPATCHER ######################################################################## # Code for an example dispatcher w/ tail case and accumulator ######################################################################## #include #ifdef LV_HAVE_DISPATCHER static inline void volk_gnsssdr_32f_x2_dot_prod_32f_dispatcher(float * result, const float * input, const float * taps, unsigned int num_points) { const unsigned int num_points_r = num_points%16; const unsigned int num_points_x = num_points - num_points_r; if (volk_gnsssdr_is_aligned(VOLK_OR_PTR(input, taps))) { volk_gnsssdr_32f_x2_dot_prod_32f_a(result, input, taps, num_points_x); } else { volk_gnsssdr_32f_x2_dot_prod_32f_u(result, input, taps, num_points_x); } float result_tail = 0; volk_gnsssdr_32f_x2_dot_prod_32f_g(&result_tail, input+num_points_x, taps+num_points_x, num_points_r); *result += result_tail; } #endif //LV_HAVE_DISPATCHER gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/0000755000175000017500000000000012576764164031456 5ustar carlescarles././@LongLink0000644000000000000000000000016300000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8i_max_s8i.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002601712576764164033743 0ustar carlescarles/*! * \file volk_gnsssdr_8i_max_s8i.h * \brief Volk protokernel: calculates the maximum value in a group of 8 bits (char) scalars * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that returns the maximum value of a group of 8 bits (char) scalars * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8i_max_s8i_u_H #define INCLUDED_volk_gnsssdr_8i_max_s8i_u_H #include #include #include #ifdef LV_HAVE_SSE4_1 #include /*! \brief Returns the max value in src0 \param target The max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_max_s8i_u_sse4_1(char* target, const char* src0, unsigned int num_points) { if(num_points > 0) { const unsigned int sse_iters = num_points / 16; char* inputPtr = (char*)src0; char max = src0[0]; __VOLK_ATTR_ALIGNED(16) char maxValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_loadu_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); maxValues = _mm_blendv_epi8(currentValues, maxValues, compareResults); inputPtr += 16; } _mm_storeu_si128((__m128i*)maxValuesBuffer, maxValues); for(unsigned int i = 0; i<16; ++i) { if(maxValuesBuffer[i] > max) { max = maxValuesBuffer[i]; } } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { max = src0[i]; } } target[0] = max; } } #endif /*LV_HAVE_SSE4_1*/ #ifdef LV_HAVE_SSE2 #include /*! \brief Returns the max value in src0 \param target The max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_max_s8i_u_sse2(char* target, const char* src0, unsigned int num_points) { if(num_points > 0) { const unsigned int sse_iters = num_points / 16; char* inputPtr = (char*)src0; char max = src0[0]; unsigned short mask; __VOLK_ATTR_ALIGNED(16) char currentValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_loadu_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); mask = _mm_movemask_epi8(compareResults); if (mask != 0xFFFF) { _mm_storeu_si128((__m128i*)¤tValuesBuffer, currentValues); mask = ~mask; int i = 0; while (mask > 0) { if ((mask & 1) == 1) { if(currentValuesBuffer[i] > max) { max = currentValuesBuffer[i]; } } i++; mask >>= 1; } maxValues = _mm_set1_epi8(max); } inputPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { max = src0[i]; } } target[0] = max; } } #endif /*LV_HAVE_SSE2*/ #ifdef LV_HAVE_GENERIC /*! \brief Returns the max value in src0 \param target The max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_max_s8i_generic(char* target, const char* src0, unsigned int num_points) { if(num_points > 0) { char max = src0[0]; for(unsigned int i = 1; i < num_points; ++i) { if(src0[i] > max) { max = src0[i]; } } target[0] = max; } } #endif /*LV_HAVE_GENERIC*/ #endif /*INCLUDED_volk_gnsssdr_8i_max_s8i_u_H*/ #ifndef INCLUDED_volk_gnsssdr_8i_max_s8i_a_H #define INCLUDED_volk_gnsssdr_8i_max_s8i_a_H #include #include #include #ifdef LV_HAVE_SSE4_1 #include /*! \brief Returns the max value in src0 \param target The max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_max_s8i_a_sse4_1(char* target, const char* src0, unsigned int num_points) { if(num_points > 0) { const unsigned int sse_iters = num_points / 16; char* inputPtr = (char*)src0; char max = src0[0]; __VOLK_ATTR_ALIGNED(16) char maxValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_load_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); maxValues = _mm_blendv_epi8(currentValues, maxValues, compareResults); inputPtr += 16; } _mm_store_si128((__m128i*)maxValuesBuffer, maxValues); for(unsigned int i = 0; i<16; ++i) { if(maxValuesBuffer[i] > max) { max = maxValuesBuffer[i]; } } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { max = src0[i]; } } target[0] = max; } } #endif /*LV_HAVE_SSE4_1*/ #ifdef LV_HAVE_SSE2 #include /*! \brief Returns the max value in src0 \param target The max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_max_s8i_a_sse2(char* target, const char* src0, unsigned int num_points) { if(num_points > 0) { const unsigned int sse_iters = num_points / 16; char* inputPtr = (char*)src0; char max = src0[0]; unsigned short mask; __VOLK_ATTR_ALIGNED(16) char currentValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_load_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); mask = _mm_movemask_epi8(compareResults); if (mask != 0xFFFF) { _mm_store_si128((__m128i*)¤tValuesBuffer, currentValues); mask = ~mask; int i = 0; while (mask > 0) { if ((mask & 1) == 1) { if(currentValuesBuffer[i] > max) { max = currentValuesBuffer[i]; } } i++; mask >>= 1; } maxValues = _mm_set1_epi8(max); } inputPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { max = src0[i]; } } target[0] = max; } } #endif /*LV_HAVE_SSE2*/ #ifdef LV_HAVE_GENERIC /*! \brief Returns the max value in src0 \param target The max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_max_s8i_a_generic(char* target, const char* src0, unsigned int num_points) { if(num_points > 0) { if(num_points > 0) { char max = src0[0]; for(unsigned int i = 1; i < num_points; ++i) { if(src0[i] > max) { max = src0[i]; } } target[0] = max; } } } #endif /*LV_HAVE_GENERIC*/ #endif /*INCLUDED_volk_gnsssdr_8i_max_s8i_a_H*/ ././@LongLink0000644000000000000000000000017300000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8i_accumulator_s8i.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000001371112576764164033740 0ustar carlescarles/*! * \file volk_gnsssdr_8i_accumulator_s8i.h * \brief Volk protokernel: 8 bits (char) scalar accumulator * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that implements an accumulator of char values * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8i_accumulator_s8i_u_H #define INCLUDED_volk_gnsssdr_8i_accumulator_s8i_u_H #include #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_8i_accumulator_s8i_u_sse3(char* result, const char* inputBuffer, unsigned int num_points) { char returnValue = 0; const unsigned int sse_iters = num_points / 16; const char* aPtr = inputBuffer; __VOLK_ATTR_ALIGNED(16) char tempBuffer[16]; __m128i accumulator = _mm_setzero_si128(); __m128i aVal = _mm_setzero_si128(); for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm_lddqu_si128((__m128i*)aPtr); accumulator = _mm_add_epi8(accumulator, aVal); aPtr += 16; } _mm_storeu_si128((__m128i*)tempBuffer,accumulator); for(unsigned int i = 0; i<16; ++i) { returnValue += tempBuffer[i]; } for(unsigned int i = 0; i<(num_points % 16); ++i) { returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_8i_accumulator_s8i_generic(char* result, const char* inputBuffer, unsigned int num_points) { const char* aPtr = inputBuffer; char returnValue = 0; for(unsigned int number = 0;number < num_points; number++) { returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_8i_accumulator_s8i_u_H */ #ifndef INCLUDED_volk_gnsssdr_8i_accumulator_s8i_a_H #define INCLUDED_volk_gnsssdr_8i_accumulator_s8i_a_H #include #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_8i_accumulator_s8i_a_sse3(char* result, const char* inputBuffer, unsigned int num_points) { char returnValue = 0; const unsigned int sse_iters = num_points / 16; const char* aPtr = inputBuffer; __VOLK_ATTR_ALIGNED(16) char tempBuffer[16]; __m128i accumulator = _mm_setzero_si128(); __m128i aVal = _mm_setzero_si128(); for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm_load_si128((__m128i*)aPtr); accumulator = _mm_add_epi8(accumulator, aVal); aPtr += 16; } _mm_store_si128((__m128i*)tempBuffer,accumulator); for(unsigned int i = 0; i<16; ++i){ returnValue += tempBuffer[i]; } for(unsigned int i = 0; i<(num_points % 16); ++i) { returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_8i_accumulator_s8i_a_generic(char* result, const char* inputBuffer, unsigned int num_points) { const char* aPtr = inputBuffer; char returnValue = 0; for(unsigned int number = 0;number < num_points; number++) { returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ extern void volk_gnsssdr_8i_accumulator_s8i_a_orc_impl(short* result, const char* inputBuffer, unsigned int num_points); static inline void volk_gnsssdr_8i_accumulator_s8i_u_orc(char* result, const char* inputBuffer, unsigned int num_points) { short res = 0; char* resc = (char*)&res; resc++; volk_gnsssdr_8i_accumulator_s8i_a_orc_impl(&res, inputBuffer, num_points); *result = *resc; } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_8i_accumulator_s8i_a_H */ ././@LongLink0000644000000000000000000000017400000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_64f_accumulator_64f.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000001673012576764164033744 0ustar carlescarles/*! * \file volk_gnsssdr_64f_accumulator_64f.h * \brief Volk protokernel: 64 bits (double) scalar accumulator * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that implements an accumulator of char values * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_64f_accumulator_64f_u_H #define INCLUDED_volk_gnsssdr_64f_accumulator_64f_u_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_64f_accumulator_64f_u_avx(double* result,const double* inputBuffer, unsigned int num_points){ double returnValue = 0; const unsigned int sse_iters = num_points / 4; const double* aPtr = inputBuffer; __VOLK_ATTR_ALIGNED(32) double tempBuffer[4]; __m256d accumulator = _mm256_setzero_pd(); __m256d aVal = _mm256_setzero_pd(); for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm256_loadu_pd(aPtr); accumulator = _mm256_add_pd(accumulator, aVal); aPtr += 4; } _mm256_storeu_pd((double*)tempBuffer,accumulator); for(unsigned int i = 0; i<4; ++i){ returnValue += tempBuffer[i]; } for(unsigned int i = 0; i<(num_points % 4); ++i){ returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSE3 #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_64f_accumulator_64f_u_sse3(double* result,const double* inputBuffer, unsigned int num_points){ double returnValue = 0; const unsigned int sse_iters = num_points / 2; const double* aPtr = inputBuffer; __VOLK_ATTR_ALIGNED(16) double tempBuffer[2]; __m128d accumulator = _mm_setzero_pd(); __m128d aVal = _mm_setzero_pd(); for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm_loadu_pd(aPtr); accumulator = _mm_add_pd(accumulator, aVal); aPtr += 2; } _mm_storeu_pd((double*)tempBuffer,accumulator); for(unsigned int i = 0; i<2; ++i){ returnValue += tempBuffer[i]; } for(unsigned int i = 0; i<(num_points % 2); ++i){ returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_64f_accumulator_64f_generic(double* result,const double* inputBuffer, unsigned int num_points){ const double* aPtr = inputBuffer; double returnValue = 0; for(unsigned int number = 0;number < num_points; number++){ returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_64f_accumulator_64f_u_H */ #ifndef INCLUDED_volk_gnsssdr_64f_accumulator_64f_a_H #define INCLUDED_volk_gnsssdr_64f_accumulator_64f_a_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_64f_accumulator_64f_a_avx(double* result,const double* inputBuffer, unsigned int num_points){ double returnValue = 0; const unsigned int sse_iters = num_points / 4; const double* aPtr = inputBuffer; __VOLK_ATTR_ALIGNED(32) double tempBuffer[4]; __m256d accumulator = _mm256_setzero_pd(); __m256d aVal = _mm256_setzero_pd(); for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm256_load_pd(aPtr); accumulator = _mm256_add_pd(accumulator, aVal); aPtr += 4; } _mm256_store_pd((double*)tempBuffer,accumulator); for(unsigned int i = 0; i<4; ++i){ returnValue += tempBuffer[i]; } for(unsigned int i = 0; i<(num_points % 4); ++i){ returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSE3 #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_64f_accumulator_64f_a_sse3(double* result,const double* inputBuffer, unsigned int num_points){ double returnValue = 0; const unsigned int sse_iters = num_points / 2; const double* aPtr = inputBuffer; __VOLK_ATTR_ALIGNED(16) double tempBuffer[2]; __m128d accumulator = _mm_setzero_pd(); __m128d aVal = _mm_setzero_pd(); for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm_load_pd(aPtr); accumulator = _mm_add_pd(accumulator, aVal); aPtr += 2; } _mm_store_pd((double*)tempBuffer,accumulator); for(unsigned int i = 0; i<2; ++i){ returnValue += tempBuffer[i]; } for(unsigned int i = 0; i<(num_points % 2); ++i){ returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_64f_accumulator_64f_a_generic(double* result,const double* inputBuffer, unsigned int num_points){ const double* aPtr = inputBuffer; double returnValue = 0; for(unsigned int number = 0;number < num_points; number++){ returnValue += (*aPtr++); } *result = returnValue; } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_64f_accumulator_64f_a_H */ ././@LongLink0000644000000000000000000000017400000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x2_multiply_8ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000003205212576764164033737 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x2_multiply_8ic.h * \brief Volk protokernel: multiplies two 16 bits vectors * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that multiplies two 16 bits vectors (8 bits the real part * and 8 bits the imaginary part) * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8ic_x2_multiply_8ic_u_H #define INCLUDED_volk_gnsssdr_8ic_x2_multiply_8ic_u_H #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse2(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; const lv_8sc_t* b = bVector; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_loadu_si128((__m128i*)a); y = _mm_loadu_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); realc = _mm_and_si128 (realc, mult1); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imagc = _mm_and_si128 (imagc, mult1); imagc = _mm_slli_si128 (imagc, 1); totalc = _mm_or_si128 (realc, imagc); _mm_storeu_si128((__m128i*)c, totalc); a += 8; b += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = (*a++) * (*b++); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse4_1(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, zero; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; const lv_8sc_t* b = bVector; zero = _mm_setzero_si128(); mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_lddqu_si128((__m128i*)a); y = _mm_lddqu_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imagc = _mm_slli_si128 (imagc, 1); totalc = _mm_blendv_epi8 (imagc, realc, mult1); _mm_storeu_si128((__m128i*)c, totalc); a += 8; b += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = (*a++) * (*b++); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { lv_8sc_t* cPtr = cVector; const lv_8sc_t* aPtr = aVector; const lv_8sc_t* bPtr = bVector; for(unsigned int number = 0; number < num_points; number++) { *cPtr++ = (*aPtr++) * (*bPtr++); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_8ic_x2_multiply_8ic_u_H */ #ifndef INCLUDED_volk_gnsssdr_8ic_x2_multiply_8ic_a_H #define INCLUDED_volk_gnsssdr_8ic_x2_multiply_8ic_a_H #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse2(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; const lv_8sc_t* b = bVector; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_load_si128((__m128i*)a); y = _mm_load_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); realc = _mm_and_si128 (realc, mult1); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imagc = _mm_and_si128 (imagc, mult1); imagc = _mm_slli_si128 (imagc, 1); totalc = _mm_or_si128 (realc, imagc); _mm_store_si128((__m128i*)c, totalc); a += 8; b += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = (*a++) * (*b++); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse4_1(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, zero; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; const lv_8sc_t* b = bVector; zero = _mm_setzero_si128(); mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_load_si128((__m128i*)a); y = _mm_load_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imagc = _mm_slli_si128 (imagc, 1); totalc = _mm_blendv_epi8 (imagc, realc, mult1); _mm_store_si128((__m128i*)c, totalc); a += 8; b += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = (*a++) * (*b++); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { lv_8sc_t* cPtr = cVector; const lv_8sc_t* aPtr = aVector; const lv_8sc_t* bPtr = bVector; for(unsigned int number = 0; number < num_points; number++) { *cPtr++ = (*aPtr++) * (*bPtr++); } } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Multiplies the two input complex vectors and stores their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be multiplied \param bVector One of the vectors to be multiplied \param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector */ extern void volk_gnsssdr_8ic_x2_multiply_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points); static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points) { volk_gnsssdr_8ic_x2_multiply_8ic_a_orc_impl(cVector, aVector, bVector, num_points); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_8ic_x2_multiply_8ic_a_H */ ././@LongLink0000644000000000000000000000021400000000000011600 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002704512576764164033745 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc * \brief Volk protokernel: replaces the tracking function for update_local_code * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that replaces the tracking function for update_local_code * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_H #define INCLUDED_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_H #include #include #include #include #include "volk_gnsssdr/volk_gnsssdr_complex.h" #ifdef LV_HAVE_SSE4_1 #include /*! \brief Takes the conjugate of a complex vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of complex values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_sse4_1(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 4; __m128 tquot, fmod_num, fmod_result, associated_chip_index_array; __m128 tcode_half_chips_array = _mm_set_ps (tcode_half_chips_input+3*code_phase_step_half_chips, tcode_half_chips_input+2*code_phase_step_half_chips, tcode_half_chips_input+code_phase_step_half_chips, tcode_half_chips_input); __m128 code_phase_step_half_chips_array = _mm_set1_ps (code_phase_step_half_chips*4); __m128 d_very_early_late_spc_chips_Multiplied_by_2 = _mm_set1_ps (2*d_very_early_late_spc_chips); __m128 code_length_half_chips_array = _mm_set1_ps (code_length_half_chips); __m128 twos = _mm_set1_ps (2); __m128i associated_chip_index_array_int; __VOLK_ATTR_ALIGNED(16) int32_t output[4]; for (unsigned int i = 0; i < sse_iters; i++) { //fmod = numer - tquot * denom; tquot = numer/denom truncated //associated_chip_index = 2 + round(fmod(tcode_half_chips - 2*d_very_early_late_spc_chips, code_length_half_chips)); fmod_num = _mm_sub_ps (tcode_half_chips_array, d_very_early_late_spc_chips_Multiplied_by_2); tquot = _mm_div_ps (fmod_num, code_length_half_chips_array); tquot = _mm_round_ps (tquot, (_MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC) ); fmod_result = _mm_sub_ps (fmod_num, _mm_mul_ps (tquot, code_length_half_chips_array)); associated_chip_index_array = _mm_round_ps (fmod_result, (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC)); associated_chip_index_array = _mm_add_ps(twos, associated_chip_index_array); associated_chip_index_array_int = _mm_cvtps_epi32 (associated_chip_index_array); _mm_storeu_si128 ((__m128i*)output, associated_chip_index_array_int); //d_very_early_code[i] = d_ca_code[associated_chip_index]; *d_very_early_code++ = d_ca_code[output[0]]; *d_very_early_code++ = d_ca_code[output[1]]; *d_very_early_code++ = d_ca_code[output[2]]; *d_very_early_code++ = d_ca_code[output[3]]; //tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; tcode_half_chips_array = _mm_add_ps (tcode_half_chips_array, code_phase_step_half_chips_array); } if (num_points % 4 != 0) { __VOLK_ATTR_ALIGNED(16) float tcode_half_chips_stored[4]; _mm_storeu_ps ((float*)tcode_half_chips_stored, tcode_half_chips_array); int associated_chip_index; float tcode_half_chips = tcode_half_chips_stored[0]; float d_very_early_late_spc_chips_multiplied_by_2 = 2*d_very_early_late_spc_chips; for (unsigned int i = 0; i < num_points%4; i++) { associated_chip_index = 2 + round(fmod(tcode_half_chips - d_very_early_late_spc_chips_multiplied_by_2, code_length_half_chips)); d_very_early_code[i] = d_ca_code[associated_chip_index]; tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; } } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Takes the conjugate of a complex vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of complex values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_generic(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points) { int associated_chip_index; float tcode_half_chips = tcode_half_chips_input; float d_very_early_late_spc_chips_multiplied_by_2 = 2*d_very_early_late_spc_chips; for (unsigned int i = 0; i < num_points; i++) { associated_chip_index = 2 + round(fmod(tcode_half_chips - d_very_early_late_spc_chips_multiplied_by_2, code_length_half_chips)); d_very_early_code[i] = d_ca_code[associated_chip_index]; tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_H */ #ifndef INCLUDED_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_H #define INCLUDED_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_H #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include /*! \brief Takes the conjugate of a complex vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of complex values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_sse4_1(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 4; __m128 tquot, fmod_num, fmod_result, associated_chip_index_array; __m128 tcode_half_chips_array = _mm_set_ps (tcode_half_chips_input+3*code_phase_step_half_chips, tcode_half_chips_input+2*code_phase_step_half_chips, tcode_half_chips_input+code_phase_step_half_chips, tcode_half_chips_input); __m128 code_phase_step_half_chips_array = _mm_set1_ps (code_phase_step_half_chips*4); __m128 d_very_early_late_spc_chips_Multiplied_by_2 = _mm_set1_ps (2*d_very_early_late_spc_chips); __m128 code_length_half_chips_array = _mm_set1_ps (code_length_half_chips); __m128 twos = _mm_set1_ps (2); __m128i associated_chip_index_array_int; __VOLK_ATTR_ALIGNED(16) int32_t output[4]; for (unsigned int i = 0; i < sse_iters; i++) { //fmod = numer - tquot * denom; tquot = numer/denom truncated //associated_chip_index = 2 + round(fmod(tcode_half_chips - 2*d_very_early_late_spc_chips, code_length_half_chips)); fmod_num = _mm_sub_ps (tcode_half_chips_array, d_very_early_late_spc_chips_Multiplied_by_2); tquot = _mm_div_ps (fmod_num, code_length_half_chips_array); tquot = _mm_round_ps (tquot, (_MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC) ); fmod_result = _mm_sub_ps (fmod_num, _mm_mul_ps (tquot, code_length_half_chips_array)); associated_chip_index_array = _mm_round_ps (fmod_result, (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC)); associated_chip_index_array = _mm_add_ps(twos, associated_chip_index_array); associated_chip_index_array_int = _mm_cvtps_epi32 (associated_chip_index_array); _mm_store_si128 ((__m128i*)output, associated_chip_index_array_int); //d_very_early_code[i] = d_ca_code[associated_chip_index]; *d_very_early_code++ = d_ca_code[output[0]]; *d_very_early_code++ = d_ca_code[output[1]]; *d_very_early_code++ = d_ca_code[output[2]]; *d_very_early_code++ = d_ca_code[output[3]]; //tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; tcode_half_chips_array = _mm_add_ps (tcode_half_chips_array, code_phase_step_half_chips_array); } if (num_points % 4 != 0) { __VOLK_ATTR_ALIGNED(16) float tcode_half_chips_stored[4]; _mm_storeu_ps ((float*)tcode_half_chips_stored, tcode_half_chips_array); int associated_chip_index; float tcode_half_chips = tcode_half_chips_stored[0]; float d_very_early_late_spc_chips_multiplied_by_2 = 2*d_very_early_late_spc_chips; for (unsigned int i = 0; i < num_points%4; i++) { associated_chip_index = 2 + round(fmod(tcode_half_chips - d_very_early_late_spc_chips_multiplied_by_2, code_length_half_chips)); d_very_early_code[i] = d_ca_code[associated_chip_index]; tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; } } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Takes the conjugate of a complex vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of complex values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_generic(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points) { int associated_chip_index; float tcode_half_chips = tcode_half_chips_input; float d_very_early_late_spc_chips_multiplied_by_2 = 2*d_very_early_late_spc_chips; for (unsigned int i = 0; i < num_points; i++) { associated_chip_index = 2 + round(fmod(tcode_half_chips - d_very_early_late_spc_chips_multiplied_by_2, code_length_half_chips)); d_very_early_code[i] = d_ca_code[associated_chip_index]; tcode_half_chips = tcode_half_chips + code_phase_step_half_chips; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_H */ ././@LongLink0000644000000000000000000000020200000000000011575 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000011544112576764164033743 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 16 bits vectors * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Early, Prompt, and Late correlation with 16 bits vectors (8 bits the * real part and 8 bits the imaginary part): * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 16 bits vectors) It returns the input * signal in base band (BB) * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 16 bits vectors), accumulating the results * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 16 bits vectors), accumulating the results * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 16 bits vectors), accumulating the results * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_sse4_1(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample, real_E_code_acc, imag_E_code_acc, real_L_code_acc, imag_L_code_acc, real_P_code_acc, imag_P_code_acc; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_8sc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_8sc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_8sc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_si128(); imag_E_code_acc = _mm_setzero_si128(); real_L_code_acc = _mm_setzero_si128(); imag_L_code_acc = _mm_setzero_si128(); real_P_code_acc = _mm_setzero_si128(); imag_P_code_acc = _mm_setzero_si128(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_E_code_acc = _mm_add_epi16 (real_E_code_acc, real_output); imag_E_code_acc = _mm_add_epi16 (imag_E_code_acc, imag_output); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_L_code_acc = _mm_add_epi16 (real_L_code_acc, real_output); imag_L_code_acc = _mm_add_epi16 (imag_L_code_acc, imag_output); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_P_code_acc = _mm_add_epi16 (real_P_code_acc, real_output); imag_P_code_acc = _mm_add_epi16 (imag_P_code_acc, imag_output); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; L_code_ptr += 8; P_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_8sc_t E_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t L_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t P_dotProductVector[8]; imag_E_code_acc = _mm_slli_si128 (imag_E_code_acc, 1); output = _mm_blendv_epi8 (imag_E_code_acc, real_E_code_acc, mult1); _mm_storeu_si128((__m128i*)E_dotProductVector, output); imag_L_code_acc = _mm_slli_si128 (imag_L_code_acc, 1); output = _mm_blendv_epi8 (imag_L_code_acc, real_L_code_acc, mult1); _mm_storeu_si128((__m128i*)L_dotProductVector, output); imag_P_code_acc = _mm_slli_si128 (imag_P_code_acc, 1); output = _mm_blendv_epi8 (imag_P_code_acc, real_P_code_acc, mult1); _mm_storeu_si128((__m128i*)P_dotProductVector, output); for (int i = 0; i<8; ++i) { *E_out_ptr += E_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += bb_signal_sample * (*E_code_ptr++); *P_out_ptr += bb_signal_sample * (*P_code_ptr++); *L_out_ptr += bb_signal_sample * (*L_code_ptr++); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_sse2(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample, real_E_code_acc, imag_E_code_acc, real_L_code_acc, imag_L_code_acc, real_P_code_acc, imag_P_code_acc; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_8sc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_8sc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_8sc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_si128(); imag_E_code_acc = _mm_setzero_si128(); real_L_code_acc = _mm_setzero_si128(); imag_L_code_acc = _mm_setzero_si128(); real_P_code_acc = _mm_setzero_si128(); imag_P_code_acc = _mm_setzero_si128(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_loadu_si128((__m128i*)input_ptr); y = _mm_loadu_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y = _mm_loadu_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_E_code_acc = _mm_add_epi16 (real_E_code_acc, real_output); imag_E_code_acc = _mm_add_epi16 (imag_E_code_acc, imag_output); //Get late values y = _mm_loadu_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_L_code_acc = _mm_add_epi16 (real_L_code_acc, real_output); imag_L_code_acc = _mm_add_epi16 (imag_L_code_acc, imag_output); //Get prompt values y = _mm_loadu_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_P_code_acc = _mm_add_epi16 (real_P_code_acc, real_output); imag_P_code_acc = _mm_add_epi16 (imag_P_code_acc, imag_output); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; L_code_ptr += 8; P_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_8sc_t E_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t L_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t P_dotProductVector[8]; real_E_code_acc = _mm_and_si128 (real_E_code_acc, mult1); imag_E_code_acc = _mm_and_si128 (imag_E_code_acc, mult1); imag_E_code_acc = _mm_slli_si128 (imag_E_code_acc, 1); output = _mm_or_si128 (real_E_code_acc, imag_E_code_acc); _mm_storeu_si128((__m128i*)E_dotProductVector, output); real_L_code_acc = _mm_and_si128 (real_L_code_acc, mult1); imag_L_code_acc = _mm_and_si128 (imag_L_code_acc, mult1); imag_L_code_acc = _mm_slli_si128 (imag_L_code_acc, 1); output = _mm_or_si128 (real_L_code_acc, imag_L_code_acc); _mm_storeu_si128((__m128i*)L_dotProductVector, output); real_P_code_acc = _mm_and_si128 (real_P_code_acc, mult1); imag_P_code_acc = _mm_and_si128 (imag_P_code_acc, mult1); imag_P_code_acc = _mm_slli_si128 (imag_P_code_acc, 1); output = _mm_or_si128 (real_P_code_acc, imag_P_code_acc); _mm_storeu_si128((__m128i*)P_dotProductVector, output); for (int i = 0; i<8; ++i) { *E_out_ptr += E_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += bb_signal_sample * (*E_code_ptr++); *P_out_ptr += bb_signal_sample * (*P_code_ptr++); *L_out_ptr += bb_signal_sample * (*L_code_ptr++); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_generic(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { lv_8sc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_sse4_1(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample, real_E_code_acc, imag_E_code_acc, real_L_code_acc, imag_L_code_acc, real_P_code_acc, imag_P_code_acc; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_8sc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_8sc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_8sc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_si128(); imag_E_code_acc = _mm_setzero_si128(); real_L_code_acc = _mm_setzero_si128(); imag_L_code_acc = _mm_setzero_si128(); real_P_code_acc = _mm_setzero_si128(); imag_P_code_acc = _mm_setzero_si128(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_E_code_acc = _mm_add_epi16 (real_E_code_acc, real_output); imag_E_code_acc = _mm_add_epi16 (imag_E_code_acc, imag_output); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_L_code_acc = _mm_add_epi16 (real_L_code_acc, real_output); imag_L_code_acc = _mm_add_epi16 (imag_L_code_acc, imag_output); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_P_code_acc = _mm_add_epi16 (real_P_code_acc, real_output); imag_P_code_acc = _mm_add_epi16 (imag_P_code_acc, imag_output); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; L_code_ptr += 8; P_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_8sc_t E_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t L_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t P_dotProductVector[8]; imag_E_code_acc = _mm_slli_si128 (imag_E_code_acc, 1); output = _mm_blendv_epi8 (imag_E_code_acc, real_E_code_acc, mult1); _mm_store_si128((__m128i*)E_dotProductVector, output); imag_L_code_acc = _mm_slli_si128 (imag_L_code_acc, 1); output = _mm_blendv_epi8 (imag_L_code_acc, real_L_code_acc, mult1); _mm_store_si128((__m128i*)L_dotProductVector, output); imag_P_code_acc = _mm_slli_si128 (imag_P_code_acc, 1); output = _mm_blendv_epi8 (imag_P_code_acc, real_P_code_acc, mult1); _mm_store_si128((__m128i*)P_dotProductVector, output); for (int i = 0; i<8; ++i) { *E_out_ptr += E_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += bb_signal_sample * (*E_code_ptr++); *P_out_ptr += bb_signal_sample * (*P_code_ptr++); *L_out_ptr += bb_signal_sample * (*L_code_ptr++); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_sse2(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample, real_E_code_acc, imag_E_code_acc, real_L_code_acc, imag_L_code_acc, real_P_code_acc, imag_P_code_acc; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_8sc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_8sc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_8sc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_si128(); imag_E_code_acc = _mm_setzero_si128(); real_L_code_acc = _mm_setzero_si128(); imag_L_code_acc = _mm_setzero_si128(); real_P_code_acc = _mm_setzero_si128(); imag_P_code_acc = _mm_setzero_si128(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_E_code_acc = _mm_add_epi16 (real_E_code_acc, real_output); imag_E_code_acc = _mm_add_epi16 (imag_E_code_acc, imag_output); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_L_code_acc = _mm_add_epi16 (real_L_code_acc, real_output); imag_L_code_acc = _mm_add_epi16 (imag_L_code_acc, imag_output); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_P_code_acc = _mm_add_epi16 (real_P_code_acc, real_output); imag_P_code_acc = _mm_add_epi16 (imag_P_code_acc, imag_output); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; L_code_ptr += 8; P_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_8sc_t E_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t L_dotProductVector[8]; __VOLK_ATTR_ALIGNED(16) lv_8sc_t P_dotProductVector[8]; real_E_code_acc = _mm_and_si128 (real_E_code_acc, mult1); imag_E_code_acc = _mm_and_si128 (imag_E_code_acc, mult1); imag_E_code_acc = _mm_slli_si128 (imag_E_code_acc, 1); output = _mm_or_si128 (real_E_code_acc, imag_E_code_acc); _mm_store_si128((__m128i*)E_dotProductVector, output); real_L_code_acc = _mm_and_si128 (real_L_code_acc, mult1); imag_L_code_acc = _mm_and_si128 (imag_L_code_acc, mult1); imag_L_code_acc = _mm_slli_si128 (imag_L_code_acc, 1); output = _mm_or_si128 (real_L_code_acc, imag_L_code_acc); _mm_store_si128((__m128i*)L_dotProductVector, output); real_P_code_acc = _mm_and_si128 (real_P_code_acc, mult1); imag_P_code_acc = _mm_and_si128 (imag_P_code_acc, mult1); imag_P_code_acc = _mm_slli_si128 (imag_P_code_acc, 1); output = _mm_or_si128 (real_P_code_acc, imag_P_code_acc); _mm_store_si128((__m128i*)P_dotProductVector, output); for (unsigned int i = 0; i<8; ++i) { *E_out_ptr += E_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += bb_signal_sample * (*E_code_ptr++); *P_out_ptr += bb_signal_sample * (*P_code_ptr++); *L_out_ptr += bb_signal_sample * (*L_code_ptr++); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_generic(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { lv_8sc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; } } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ extern void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_first_a_orc_impl(short* E_out_real, short* E_out_imag, short* P_out_real, short* P_out_imag, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, unsigned int num_points); extern void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_second_a_orc_impl(short* L_out_real, short* L_out_imag, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* L_code, unsigned int num_points); static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_orc(lv_8sc_t* E_out, lv_8sc_t* P_out, lv_8sc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points){ short E_out_real = 0; short E_out_imag = 0; char* E_out_real_c = (char*)&E_out_real; E_out_real_c++; char* E_out_imag_c = (char*)&E_out_imag; E_out_imag_c++; short P_out_real = 0; short P_out_imag = 0; char* P_out_real_c = (char*)&P_out_real; P_out_real_c++; char* P_out_imag_c = (char*)&P_out_imag; P_out_imag_c++; short L_out_real = 0; short L_out_imag = 0; char* L_out_real_c = (char*)&L_out_real; L_out_real_c++; char* L_out_imag_c = (char*)&L_out_imag; L_out_imag_c++; volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_first_a_orc_impl( &E_out_real, &E_out_imag, &P_out_real, &P_out_imag, input, carrier, E_code, P_code, num_points); volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_second_a_orc_impl( &L_out_real, &L_out_imag, input, carrier, L_code, num_points); //ORC implementation of 8ic_x5_cw_epl_corr_8ic_x3 is done in two different functions because it seems that //in one function the length of the code gives memory problems (bad access, segmentation fault). //Also, the maximum number of accumulators that can be used is 4 (and we need 6). //The "carrier wipe-off" step is done two times: one in the first function and another one in the second. //Joining all the ORC code in one function would be quicker because the "carrier wipe-off" step would be done just //one time. *E_out = lv_cmake(*E_out_real_c, *E_out_imag_c); *P_out = lv_cmake(*P_out_real_c, *P_out_imag_c); *L_out = lv_cmake(*L_out_real_c, *L_out_imag_c); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_H */ ././@LongLink0000644000000000000000000000020500000000000011600 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000011460712576764164033746 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5 * \brief Volk protokernel: performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation with 64 bits vectors * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * VE, Early, Prompt, Late and VL correlation with 64 bits vectors (32 bits the * real part and 32 bits the imaginary part): * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 64 bits vectors) It returns the input * signal in base band (BB) * - VE values are calculated by multiplying the input signal in BB by the * VE code (multiplication of 64 bits vectors), accumulating the results * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 64 bits vectors), accumulating the results * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 64 bits vectors), accumulating the results * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 64 bits vectors), accumulating the results * - VL values are calculated by multiplying the input signal in BB by the * VL code (multiplication of 64 bits vectors), accumulating the results * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_u_H #include #include #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation \param input The input signal input \param carrier The carrier signal input \param VE_code VE PRN code replica input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param VL_code VL PRN code replica input \param VE_out VE correlation output \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param VL_out VL correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_u_avx(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* VE_code, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, const lv_32fc_t* VL_code, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 4; lv_32fc_t dotProduct_VE; lv_32fc_t dotProduct_E; lv_32fc_t dotProduct_P; lv_32fc_t dotProduct_L; lv_32fc_t dotProduct_VL; // Aux vars __m256 x, y, yl, yh, z, tmp1, tmp2, z_VE, z_E, z_P, z_L, z_VL; __m256 bb_signal_sample, bb_signal_sample_shuffled; z_VE = _mm256_setzero_ps(); z_E = _mm256_setzero_ps(); z_P = _mm256_setzero_ps(); z_L = _mm256_setzero_ps(); z_VL = _mm256_setzero_ps(); //input and output vectors const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _VE_code = VE_code; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; const lv_32fc_t* _VL_code = VL_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm256_loadu_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm256_loadu_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm256_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm256_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di bb_signal_sample = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di bb_signal_sample_shuffled = _mm256_shuffle_ps(bb_signal_sample,bb_signal_sample,0xB1); // Re-arrange bb_signal_sample to be ai,ar,bi,br // correlation VE,E,P,L,VL (5x vector scalar product) // VE y = _mm256_loadu_ps((float*)_VE_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VE = _mm256_add_ps(z_VE, z); // Add the complex multiplication results together // Early y = _mm256_loadu_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm256_add_ps(z_E, z); // Add the complex multiplication results together // Prompt y = _mm256_loadu_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm256_add_ps(z_P, z); // Add the complex multiplication results together // Late y = _mm256_loadu_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm256_add_ps(z_L, z); // Add the complex multiplication results together // VL y = _mm256_loadu_ps((float*)_VL_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VL = _mm256_add_ps(z_VL, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 4; _input += 4; _VE_code += 4; _E_code += 4; _P_code += 4; _L_code += 4; _VL_code += 4; } __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_VE[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_E[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_P[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_L[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_VL[4]; _mm256_storeu_ps((float*)dotProductVector_VE,z_VE); // Store the results back into the dot product vector _mm256_storeu_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm256_storeu_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm256_storeu_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector _mm256_storeu_ps((float*)dotProductVector_VL,z_VL); // Store the results back into the dot product vector dotProduct_VE = ( dotProductVector_VE[0] + dotProductVector_VE[1] + dotProductVector_VE[2] + dotProductVector_VE[3] ); dotProduct_E = ( dotProductVector_E[0] + dotProductVector_E[1] + dotProductVector_E[2] + dotProductVector_E[3] ); dotProduct_P = ( dotProductVector_P[0] + dotProductVector_P[1] + dotProductVector_P[2] + dotProductVector_P[3] ); dotProduct_L = ( dotProductVector_L[0] + dotProductVector_L[1] + dotProductVector_L[2] + dotProductVector_L[3] ); dotProduct_VL = ( dotProductVector_VL[0] + dotProductVector_VL[1] + dotProductVector_VL[2] + dotProductVector_VL[3] ); for (unsigned int i = 0; i<(num_points % 4); ++i) { dotProduct_VE += (*_input) * (*_VE_code++) * (*_carrier); dotProduct_E += (*_input) * (*_E_code++) * (*_carrier); dotProduct_P += (*_input) * (*_P_code++) * (*_carrier); dotProduct_L += (*_input) * (*_L_code++) * (*_carrier); dotProduct_VL += (*_input++) * (*_VL_code++) * (*_carrier++); } *VE_out = dotProduct_VE; *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; *VL_out = dotProduct_VL; } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSE3 #include /*! \brief Performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation \param input The input signal input \param carrier The carrier signal input \param VE_code VE PRN code replica input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param VL_code VL PRN code replica input \param VE_out VE correlation output \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param VL_out VL correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_u_sse3(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* VE_code, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, const lv_32fc_t* VL_code, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 2; lv_32fc_t dotProduct_VE; lv_32fc_t dotProduct_E; lv_32fc_t dotProduct_P; lv_32fc_t dotProduct_L; lv_32fc_t dotProduct_VL; // Aux vars __m128 x, y, yl, yh, z, tmp1, tmp2, z_VE, z_E, z_P, z_L, z_VL; __m128 bb_signal_sample, bb_signal_sample_shuffled; z_VE = _mm_setzero_ps(); z_E = _mm_setzero_ps(); z_P = _mm_setzero_ps(); z_L = _mm_setzero_ps(); z_VL = _mm_setzero_ps(); //input and output vectors const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _VE_code = VE_code; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; const lv_32fc_t* _VL_code = VL_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm_loadu_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_loadu_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di bb_signal_sample = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di bb_signal_sample_shuffled = _mm_shuffle_ps(bb_signal_sample,bb_signal_sample,0xB1); // Re-arrange bb_signal_sample to be ai,ar,bi,br // correlation VE,E,P,L,VL (5x vector scalar product) // VE y = _mm_loadu_ps((float*)_VE_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VE = _mm_add_ps(z_VE, z); // Add the complex multiplication results together // Early y = _mm_loadu_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm_add_ps(z_E, z); // Add the complex multiplication results together // Prompt y = _mm_loadu_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm_add_ps(z_P, z); // Add the complex multiplication results together // Late y = _mm_loadu_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm_add_ps(z_L, z); // Add the complex multiplication results together // VL //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_loadu_ps((float*)_VL_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VL = _mm_add_ps(z_VL, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 2; _input += 2; _VE_code += 2; _E_code += 2; _P_code += 2; _L_code +=2; _VL_code +=2; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_VE[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_E[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_P[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_L[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_VL[2]; _mm_storeu_ps((float*)dotProductVector_VE,z_VE); // Store the results back into the dot product vector _mm_storeu_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm_storeu_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm_storeu_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector _mm_storeu_ps((float*)dotProductVector_VL,z_VL); // Store the results back into the dot product vector dotProduct_VE = ( dotProductVector_VE[0] + dotProductVector_VE[1] ); dotProduct_E = ( dotProductVector_E[0] + dotProductVector_E[1] ); dotProduct_P = ( dotProductVector_P[0] + dotProductVector_P[1] ); dotProduct_L = ( dotProductVector_L[0] + dotProductVector_L[1] ); dotProduct_VL = ( dotProductVector_VL[0] + dotProductVector_VL[1] ); if((num_points % 2) != 0) { dotProduct_VE += (*_input) * (*_VE_code)*(*_carrier); dotProduct_E += (*_input) * (*_E_code)*(*_carrier); dotProduct_P += (*_input) * (*_P_code)*(*_carrier); dotProduct_L += (*_input) * (*_L_code)*(*_carrier); dotProduct_VL += (*_input) * (*_VL_code)*(*_carrier); } *VE_out = dotProduct_VE; *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; *VL_out = dotProduct_VL; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation \param input The input signal input \param carrier The carrier signal input \param VE_code VE PRN code replica input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param VL_code VL PRN code replica input \param VE_out VE correlation output \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param VL_out VL correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* VE_code, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, const lv_32fc_t* VL_code, unsigned int num_points) { lv_32fc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *VE_out += bb_signal_sample * VE_code[i]; *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; *VL_out += bb_signal_sample * VL_code[i]; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_H #include #include #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation \param input The input signal input \param carrier The carrier signal input \param VE_code VE PRN code replica input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param VL_code VL PRN code replica input \param VE_out VE correlation output \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param VL_out VL correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_avx(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* VE_code, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, const lv_32fc_t* VL_code, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 4; lv_32fc_t dotProduct_VE; lv_32fc_t dotProduct_E; lv_32fc_t dotProduct_P; lv_32fc_t dotProduct_L; lv_32fc_t dotProduct_VL; // Aux vars __m256 x, y, yl, yh, z, tmp1, tmp2, z_VE, z_E, z_P, z_L, z_VL; __m256 bb_signal_sample, bb_signal_sample_shuffled; z_VE = _mm256_setzero_ps(); z_E = _mm256_setzero_ps(); z_P = _mm256_setzero_ps(); z_L = _mm256_setzero_ps(); z_VL = _mm256_setzero_ps(); //input and output vectors const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _VE_code = VE_code; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; const lv_32fc_t* _VL_code = VL_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm256_load_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm256_load_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm256_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm256_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di bb_signal_sample = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di bb_signal_sample_shuffled = _mm256_shuffle_ps(bb_signal_sample,bb_signal_sample,0xB1); // Re-arrange bb_signal_sample to be ai,ar,bi,br // correlation VE,E,P,L,VL (5x vector scalar product) // VE y = _mm256_load_ps((float*)_VE_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VE = _mm256_add_ps(z_VE, z); // Add the complex multiplication results together // Early y = _mm256_load_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm256_add_ps(z_E, z); // Add the complex multiplication results together // Prompt y = _mm256_load_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm256_add_ps(z_P, z); // Add the complex multiplication results together // Late y = _mm256_load_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm256_add_ps(z_L, z); // Add the complex multiplication results together // VL y = _mm256_load_ps((float*)_VL_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm256_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm256_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm256_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm256_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm256_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VL = _mm256_add_ps(z_VL, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 4; _input += 4; _VE_code += 4; _E_code += 4; _P_code += 4; _L_code += 4; _VL_code += 4; } __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_VE[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_E[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_P[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_L[4]; __VOLK_ATTR_ALIGNED(32) lv_32fc_t dotProductVector_VL[4]; _mm256_store_ps((float*)dotProductVector_VE,z_VE); // Store the results back into the dot product vector _mm256_store_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm256_store_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm256_store_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector _mm256_store_ps((float*)dotProductVector_VL,z_VL); // Store the results back into the dot product vector dotProduct_VE = ( dotProductVector_VE[0] + dotProductVector_VE[1] + dotProductVector_VE[2] + dotProductVector_VE[3] ); dotProduct_E = ( dotProductVector_E[0] + dotProductVector_E[1] + dotProductVector_E[2] + dotProductVector_E[3] ); dotProduct_P = ( dotProductVector_P[0] + dotProductVector_P[1] + dotProductVector_P[2] + dotProductVector_P[3] ); dotProduct_L = ( dotProductVector_L[0] + dotProductVector_L[1] + dotProductVector_L[2] + dotProductVector_L[3] ); dotProduct_VL = ( dotProductVector_VL[0] + dotProductVector_VL[1] + dotProductVector_VL[2] + dotProductVector_VL[3] ); for (unsigned int i = 0; i<(num_points % 4); ++i) { dotProduct_VE += (*_input) * (*_VE_code++) * (*_carrier); dotProduct_E += (*_input) * (*_E_code++) * (*_carrier); dotProduct_P += (*_input) * (*_P_code++) * (*_carrier); dotProduct_L += (*_input) * (*_L_code++) * (*_carrier); dotProduct_VL += (*_input++) * (*_VL_code++) * (*_carrier++); } *VE_out = dotProduct_VE; *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; *VL_out = dotProduct_VL; } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSE3 #include /*! \brief Performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation \param input The input signal input \param carrier The carrier signal input \param VE_code VE PRN code replica input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param VL_code VL PRN code replica input \param VE_out VE correlation output \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param VL_out VL correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_sse3(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* VE_code, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, const lv_32fc_t* VL_code, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 2; lv_32fc_t dotProduct_VE; lv_32fc_t dotProduct_E; lv_32fc_t dotProduct_P; lv_32fc_t dotProduct_L; lv_32fc_t dotProduct_VL; // Aux vars __m128 x, y, yl, yh, z, tmp1, tmp2, z_VE, z_E, z_P, z_L, z_VL; __m128 bb_signal_sample, bb_signal_sample_shuffled; z_VE = _mm_setzero_ps(); z_E = _mm_setzero_ps(); z_P = _mm_setzero_ps(); z_L = _mm_setzero_ps(); z_VL = _mm_setzero_ps(); //input and output vectors const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _VE_code = VE_code; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; const lv_32fc_t* _VL_code = VL_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm_load_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di bb_signal_sample = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di bb_signal_sample_shuffled = _mm_shuffle_ps(bb_signal_sample,bb_signal_sample,0xB1); // Re-arrange bb_signal_sample to be ai,ar,bi,br // correlation VE,E,P,L,VL (5x vector scalar product) // VE y = _mm_load_ps((float*)_VE_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VE = _mm_add_ps(z_VE, z); // Add the complex multiplication results together // Early y = _mm_load_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm_add_ps(z_E, z); // Add the complex multiplication results together // Prompt y = _mm_load_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm_add_ps(z_P, z); // Add the complex multiplication results together // Late y = _mm_load_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm_add_ps(z_L, z); // Add the complex multiplication results together // VL //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_VL_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mul_ps(bb_signal_sample_shuffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_VL = _mm_add_ps(z_VL, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 2; _input += 2; _VE_code += 2; _E_code += 2; _P_code += 2; _L_code +=2; _VL_code +=2; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_VE[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_E[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_P[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_L[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_VL[2]; _mm_store_ps((float*)dotProductVector_VE,z_VE); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_VL,z_VL); // Store the results back into the dot product vector dotProduct_VE = ( dotProductVector_VE[0] + dotProductVector_VE[1] ); dotProduct_E = ( dotProductVector_E[0] + dotProductVector_E[1] ); dotProduct_P = ( dotProductVector_P[0] + dotProductVector_P[1] ); dotProduct_L = ( dotProductVector_L[0] + dotProductVector_L[1] ); dotProduct_VL = ( dotProductVector_VL[0] + dotProductVector_VL[1] ); if((num_points % 2) != 0) { dotProduct_VE += (*_input) * (*_VE_code)*(*_carrier); dotProduct_E += (*_input) * (*_E_code)*(*_carrier); dotProduct_P += (*_input) * (*_P_code)*(*_carrier); dotProduct_L += (*_input) * (*_L_code)*(*_carrier); dotProduct_VL += (*_input) * (*_VL_code)*(*_carrier); } *VE_out = dotProduct_VE; *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; *VL_out = dotProduct_VL; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation \param input The input signal input \param carrier The carrier signal input \param VE_code VE PRN code replica input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param VL_code VL PRN code replica input \param VE_out VE correlation output \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param VL_out VL correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* VE_code, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, const lv_32fc_t* VL_code, unsigned int num_points) { lv_32fc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *VE_out += bb_signal_sample * VE_code[i]; *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; *VL_out += bb_signal_sample * VL_code[i]; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5_a_H */ ././@LongLink0000644000000000000000000000017200000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_conjugate_8ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002720012576764164033736 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_conjugate_8ic.h * \brief Volk protokernel: calculates the conjugate of a 16 bits vector * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that calculates the conjugate of a * 16 bits vector (8 bits the real part and 8 bits the imaginary part) * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8ic_conjugate_8ic_u_H #define INCLUDED_volk_gnsssdr_8ic_conjugate_8ic_u_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_u_avx(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; __m256 tmp; __m128i tmp128lo, tmp128hi; __m256 conjugator1 = _mm256_castsi256_ps(_mm256_setr_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255)); __m128i conjugator2 = _mm_setr_epi8(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1); for (unsigned int i = 0; i < sse_iters; ++i) { tmp = _mm256_loadu_ps((float*)a); tmp = _mm256_xor_ps(tmp, conjugator1); tmp128lo = _mm256_castsi256_si128(_mm256_castps_si256(tmp)); tmp128lo = _mm_add_epi8(tmp128lo, conjugator2); tmp128hi = _mm256_extractf128_si256(_mm256_castps_si256(tmp),1); tmp128hi = _mm_add_epi8(tmp128hi, conjugator2); //tmp = _mm256_set_m128i(tmp128hi , tmp128lo); //not defined in some versions of immintrin.h tmp = _mm256_castsi256_ps(_mm256_insertf128_si256(_mm256_castsi128_si256(tmp128lo),(tmp128hi),1)); _mm256_storeu_ps((float*)c, tmp); a += 16; c += 16; } for (unsigned int i = 0; i<(num_points % 16); ++i) { *c++ = lv_conj(*a++); } } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSSE3 #include /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_u_ssse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; __m128i tmp; __m128i conjugator = _mm_setr_epi8(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1); for (unsigned int i = 0; i < sse_iters; ++i) { tmp = _mm_lddqu_si128((__m128i*)a); tmp = _mm_sign_epi8(tmp, conjugator); _mm_storeu_si128((__m128i*)c, tmp); a += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = lv_conj(*a++); } } #endif /* LV_HAVE_SSSE3 */ #ifdef LV_HAVE_SSE3 #include /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; __m128i tmp; __m128i conjugator1 = _mm_setr_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); __m128i conjugator2 = _mm_setr_epi8(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1); for (unsigned int i = 0; i < sse_iters; ++i) { tmp = _mm_lddqu_si128((__m128i*)a); tmp = _mm_xor_si128(tmp, conjugator1); tmp = _mm_add_epi8(tmp, conjugator2); _mm_storeu_si128((__m128i*)c, tmp); a += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = lv_conj(*a++); } } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { lv_8sc_t* cPtr = cVector; const lv_8sc_t* aPtr = aVector; unsigned int number = 0; for(number = 0; number < num_points; number++) { *cPtr++ = lv_conj(*aPtr++); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_8ic_conjugate_8ic_u_H */ #ifndef INCLUDED_volk_gnsssdr_8ic_conjugate_8ic_a_H #define INCLUDED_volk_gnsssdr_8ic_conjugate_8ic_a_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_avx(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; __m256 tmp; __m128i tmp128lo, tmp128hi; __m256 conjugator1 = _mm256_castsi256_ps(_mm256_setr_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255)); __m128i conjugator2 = _mm_setr_epi8(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1); for (unsigned int i = 0; i < sse_iters; ++i) { tmp = _mm256_load_ps((float*)a); tmp = _mm256_xor_ps(tmp, conjugator1); tmp128lo = _mm256_castsi256_si128(_mm256_castps_si256(tmp)); tmp128lo = _mm_add_epi8(tmp128lo, conjugator2); tmp128hi = _mm256_extractf128_si256(_mm256_castps_si256(tmp),1); tmp128hi = _mm_add_epi8(tmp128hi, conjugator2); //tmp = _mm256_set_m128i(tmp128hi , tmp128lo); //not defined in some versions of immintrin.h tmp = _mm256_castsi256_ps(_mm256_insertf128_si256(_mm256_castsi128_si256(tmp128lo),(tmp128hi),1)); _mm256_store_ps((float*)c, tmp); a += 16; c += 16; } for (unsigned int i = 0; i<(num_points % 16); ++i) { *c++ = lv_conj(*a++); } } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSSE3 #include /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_ssse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; __m128i tmp; __m128i conjugator = _mm_setr_epi8(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1); for (unsigned int i = 0; i < sse_iters; ++i) { tmp = _mm_load_si128((__m128i*)a); tmp = _mm_sign_epi8(tmp, conjugator); _mm_store_si128((__m128i*)c, tmp); a += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = lv_conj(*a++); } } #endif /* LV_HAVE_SSSE3 */ #ifdef LV_HAVE_SSE3 #include /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; __m128i tmp; __m128i conjugator1 = _mm_setr_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); __m128i conjugator2 = _mm_setr_epi8(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1); for (unsigned int i = 0; i < sse_iters; ++i) { tmp = _mm_load_si128((__m128i*)a); tmp = _mm_xor_si128(tmp, conjugator1); tmp = _mm_add_epi8(tmp, conjugator2); _mm_store_si128((__m128i*)c, tmp); a += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = lv_conj(*a++); } } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { lv_8sc_t* cPtr = cVector; const lv_8sc_t* aPtr = aVector; unsigned int number = 0; for(number = 0; number < num_points; number++) { *cPtr++ = lv_conj(*aPtr++); } } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Takes the conjugate of an unsigned char vector. \param cVector The vector where the results will be stored \param aVector Vector to be conjugated \param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector */ extern void volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points); static inline void volk_gnsssdr_8ic_conjugate_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) { volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl(cVector, aVector, num_points); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_8ic_conjugate_8ic_a_H */ ././@LongLink0000644000000000000000000000021100000000000011575 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000011063412576764164033742 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors, and accumulates the results into float32. This protokernel is called "safe" because it checks when the inputs have a -128 value, and replaces it with a -127 value. By doing this it avoids malfunctioning, but it lasts more time that the "unsafe" implementation. In order to avoid overflow, "input" and "carrier" must be values between —7 and 7 and "XX_code inputs" must be values between —127 and 127. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Very early, Early, Prompt, Late and very late correlation with 16 bits vectors (8 bits the * real part and 8 bits the imaginary part), and accumulates the result * in 32 bits single point values, returning float32 values: * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 16 bits vectors) It returns the input * signal in base band (BB) * - Very Early values are calculated by multiplying the input signal in BB by the * very early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Very Late values are calculated by multiplying the input signal in BB by the * very late code (multiplication of 16 bits vectors), accumulating the results into float32 values * * ------------------------------------------------------------------------- * Bits analysis * * input = 8 bits * carrier = 8 bits * XX_code = 8 bits * XX_out16 = 16 bits * bb_signal_sample = 8 bits * * bb_signal_sample = input*carrier -> 17 bits limited to 8 bits = input and carrier must be values between —7 and 7 to avoid overflow (3 bits) * * XX_out16 = XX_code*bb_signal_sample -> 17 bits limited to 16 bits = XX_code must be values between —127 and 127 to avoid overflow (7 bits) * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; __m128i minus128control; __m128i minus128 = _mm_set1_epi8 (-128); __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); __m128i rearrange_sequence = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); __m128i mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, x, check_sign_sequence, rearrange_sequence, y_aux, x_abs, real_output, imag_output) imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_storeu_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } if(num_points%8!=0) { lv_16sc_t bb_signal_sample; lv_16sc_t VE_code_value; lv_16sc_t E_code_value; lv_16sc_t P_code_value; lv_16sc_t L_code_value; lv_16sc_t VL_code_value; for(int i=0; i < num_points%8; ++i) { VE_code_value = *VE_code_ptr++; E_code_value = *E_code_ptr++; P_code_value = *P_code_ptr++; L_code_value = *L_code_ptr++; VL_code_value = *VL_code_ptr++; if(lv_creal(VE_code_value) == -128) { VE_code_value = lv_cmake(-127, lv_cimag(VE_code_value)); } if(lv_cimag(VE_code_value) == -128) { VE_code_value = lv_cmake(lv_creal(VE_code_value), -127); } if(lv_creal(E_code_value) == -128) { E_code_value = lv_cmake(-127, lv_cimag(E_code_value)); } if(lv_cimag(E_code_value) == -128) { E_code_value = lv_cmake(lv_creal(E_code_value), -127); } if(lv_creal(P_code_value) == -128) { P_code_value = lv_cmake(-127, lv_cimag(P_code_value)); } if(lv_cimag(P_code_value) == -128) { P_code_value = lv_cmake(lv_creal(P_code_value), -127); } if(lv_creal(L_code_value) == -128) { L_code_value = lv_cmake(-127, lv_cimag(L_code_value)); } if(lv_cimag(L_code_value) == -128) { L_code_value = lv_cmake(lv_creal(L_code_value), -127); } //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * VE_code_value); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * E_code_value); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * P_code_value); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * L_code_value); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * VL_code_value); } } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; lv_16sc_t VE_code_value; lv_16sc_t E_code_value; lv_16sc_t P_code_value; lv_16sc_t L_code_value; lv_16sc_t VL_code_value; lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points; ++i) { VE_code_value = VE_code[i]; E_code_value = E_code[i]; P_code_value = P_code[i]; L_code_value = L_code[i]; VL_code_value = VL_code[i]; if(lv_creal(VE_code_value) == -128) { VE_code_value = lv_cmake(-127, lv_cimag(VE_code_value)); } if(lv_cimag(VE_code_value) == -128) { VE_code_value = lv_cmake(lv_creal(VE_code_value), -127); } if(lv_creal(E_code_value) == -128) { E_code_value = lv_cmake(-127, lv_cimag(E_code_value)); } if(lv_cimag(E_code_value) == -128) { E_code_value = lv_cmake(lv_creal(E_code_value), -127); } if(lv_creal(P_code_value) == -128) { P_code_value = lv_cmake(-127, lv_cimag(P_code_value)); } if(lv_cimag(P_code_value) == -128) { P_code_value = lv_cmake(lv_creal(P_code_value), -127); } if(lv_creal(L_code_value) == -128) { L_code_value = lv_cmake(-127, lv_cimag(L_code_value)); } if(lv_cimag(L_code_value) == -128) { L_code_value = lv_cmake(lv_creal(L_code_value), -127); } if(lv_creal(VL_code_value) == -128) { VL_code_value = lv_cmake(-127, lv_cimag(VL_code_value)); } if(lv_cimag(VL_code_value) == -128) { VL_code_value = lv_cmake(lv_creal(VL_code_value), -127); } //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get very early, early, prompt, late and very late values for each *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code_value); *E_out += (lv_32fc_t) (bb_signal_sample * E_code_value); *P_out += (lv_32fc_t) (bb_signal_sample * P_code_value); *L_out += (lv_32fc_t) (bb_signal_sample * L_code_value); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code_value); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; __m128i minus128control; __m128i minus128 = _mm_set1_epi8 (-128); __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); __m128i rearrange_sequence = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); __m128i mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, x, check_sign_sequence, rearrange_sequence, y_aux, x_abs, real_output, imag_output) imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_load_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y = _mm_load_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_store_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } if(num_points%8!=0) { lv_16sc_t bb_signal_sample; lv_16sc_t VE_code_value; lv_16sc_t E_code_value; lv_16sc_t P_code_value; lv_16sc_t L_code_value; lv_16sc_t VL_code_value; for(int i=0; i < num_points%8; ++i) { VE_code_value = *VE_code_ptr++; E_code_value = *E_code_ptr++; P_code_value = *P_code_ptr++; L_code_value = *L_code_ptr++; VL_code_value = *VL_code_ptr++; if(lv_creal(VE_code_value) == -128) { VE_code_value = lv_cmake(-127, lv_cimag(VE_code_value)); } if(lv_cimag(VE_code_value) == -128) { VE_code_value = lv_cmake(lv_creal(VE_code_value), -127); } if(lv_creal(E_code_value) == -128) { E_code_value = lv_cmake(-127, lv_cimag(E_code_value)); } if(lv_cimag(E_code_value) == -128) { E_code_value = lv_cmake(lv_creal(E_code_value), -127); } if(lv_creal(P_code_value) == -128) { P_code_value = lv_cmake(-127, lv_cimag(P_code_value)); } if(lv_cimag(P_code_value) == -128) { P_code_value = lv_cmake(lv_creal(P_code_value), -127); } if(lv_creal(L_code_value) == -128) { L_code_value = lv_cmake(-127, lv_cimag(L_code_value)); } if(lv_cimag(L_code_value) == -128) { L_code_value = lv_cmake(lv_creal(L_code_value), -127); } //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * VE_code_value); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * E_code_value); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * P_code_value); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * L_code_value); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * VL_code_value); } } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; lv_16sc_t VE_code_value; lv_16sc_t E_code_value; lv_16sc_t P_code_value; lv_16sc_t L_code_value; lv_16sc_t VL_code_value; lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points; ++i) { VE_code_value = VE_code[i]; E_code_value = E_code[i]; P_code_value = P_code[i]; L_code_value = L_code[i]; VL_code_value = VL_code[i]; if(lv_creal(VE_code_value) == -128) { VE_code_value = lv_cmake(-127, lv_cimag(VE_code_value)); } if(lv_cimag(VE_code_value) == -128) { VE_code_value = lv_cmake(lv_creal(VE_code_value), -127); } if(lv_creal(E_code_value) == -128) { E_code_value = lv_cmake(-127, lv_cimag(E_code_value)); } if(lv_cimag(E_code_value) == -128) { E_code_value = lv_cmake(lv_creal(E_code_value), -127); } if(lv_creal(P_code_value) == -128) { P_code_value = lv_cmake(-127, lv_cimag(P_code_value)); } if(lv_cimag(P_code_value) == -128) { P_code_value = lv_cmake(lv_creal(P_code_value), -127); } if(lv_creal(L_code_value) == -128) { L_code_value = lv_cmake(-127, lv_cimag(L_code_value)); } if(lv_cimag(L_code_value) == -128) { L_code_value = lv_cmake(lv_creal(L_code_value), -127); } if(lv_creal(VL_code_value) == -128) { VL_code_value = lv_cmake(-127, lv_cimag(VL_code_value)); } if(lv_cimag(VL_code_value) == -128) { VL_code_value = lv_cmake(lv_creal(VL_code_value), -127); } //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get very early, early, prompt, late and very late values for each *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code_value); *E_out += (lv_32fc_t) (bb_signal_sample * E_code_value); *P_out += (lv_32fc_t) (bb_signal_sample * P_code_value); *L_out += (lv_32fc_t) (bb_signal_sample * L_code_value); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code_value); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_H */ ././@LongLink0000644000000000000000000000020400000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000004334112576764164033742 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_x5_cw_vepl_corr_32fc_x5 * \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt and Late correlation with 64 bits vectors * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Early, Prompt and Late correlation with 64 bits vectors (32 bits the * real part and 32 bits the imaginary part): * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 64 bits vectors) It returns the input * signal in base band (BB) * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 64 bits vectors), accumulating the results * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 64 bits vectors), accumulating the results * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 64 bits vectors), accumulating the results * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_H #include #include #include #include #include /*! * TODO: Code the SSE4 version and benchmark it */ #ifdef LV_HAVE_SSE3 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_sse3(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 2; lv_32fc_t dotProduct_E; memset(&dotProduct_E, 0x0, 2*sizeof(float)); lv_32fc_t dotProduct_P; memset(&dotProduct_P, 0x0, 2*sizeof(float)); lv_32fc_t dotProduct_L; memset(&dotProduct_L, 0x0, 2*sizeof(float)); // Aux vars __m128 x, y, yl, yh, z, tmp1, tmp2, z_E, z_P, z_L; z_E = _mm_setzero_ps(); z_P = _mm_setzero_ps(); z_L = _mm_setzero_ps(); //input and output vectors //lv_32fc_t* _input_BB = input_BB; const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm_loadu_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_loadu_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di //_mm_storeu_ps((float*)_input_BB,z); // Store the results back into the _input_BB container // correlation E,P,L (3x vector scalar product) // Early //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi x = z; y = _mm_load_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm_add_ps(z_E, z); // Add the complex multiplication results together // Prompt //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm_add_ps(z_P, z); // Add the complex multiplication results together // Late //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm_add_ps(z_L, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 2; _input += 2; //_input_BB += 2; _E_code += 2; _P_code += 2; _L_code +=2; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_E[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_P[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_L[2]; //__VOLK_ATTR_ALIGNED(16) lv_32fc_t _input_BB; _mm_store_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector dotProduct_E += ( dotProductVector_E[0] + dotProductVector_E[1] ); dotProduct_P += ( dotProductVector_P[0] + dotProductVector_P[1] ); dotProduct_L += ( dotProductVector_L[0] + dotProductVector_L[1] ); if((num_points % 2) != 0) { //_input_BB = (*_input) * (*_carrier); dotProduct_E += (*_input) * (*_E_code)*(*_carrier); dotProduct_P += (*_input) * (*_P_code)*(*_carrier); dotProduct_L += (*_input) * (*_L_code)*(*_carrier); } *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, unsigned int num_points) { lv_32fc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_sse3(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, unsigned int num_points) { unsigned int number = 0; const unsigned int halfPoints = num_points / 2; lv_32fc_t dotProduct_E; memset(&dotProduct_E, 0x0, 2*sizeof(float)); lv_32fc_t dotProduct_P; memset(&dotProduct_P, 0x0, 2*sizeof(float)); lv_32fc_t dotProduct_L; memset(&dotProduct_L, 0x0, 2*sizeof(float)); // Aux vars __m128 x, y, yl, yh, z, tmp1, tmp2, z_E, z_P, z_L; z_E = _mm_setzero_ps(); z_P = _mm_setzero_ps(); z_L = _mm_setzero_ps(); //input and output vectors //lv_32fc_t* _input_BB = input_BB; const lv_32fc_t* _input = input; const lv_32fc_t* _carrier = carrier; const lv_32fc_t* _E_code = E_code; const lv_32fc_t* _P_code = P_code; const lv_32fc_t* _L_code = L_code; for(;number < halfPoints; number++) { // carrier wipe-off (vector point-to-point product) x = _mm_load_ps((float*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di //_mm_storeu_ps((float*)_input_BB,z); // Store the results back into the _input_BB container // correlation E,P,L (3x vector scalar product) // Early //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi x = z; y = _mm_load_ps((float*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_E = _mm_add_ps(z_E, z); // Add the complex multiplication results together // Prompt //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_P = _mm_add_ps(z_P, z); // Add the complex multiplication results together // Late //x = _mm_load_ps((float*)_input_BB); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_load_ps((float*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yl = _mm_moveldup_ps(y); // Load yl with cr,cr,dr,dr yh = _mm_movehdup_ps(y); // Load yh with ci,ci,di,di x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp1 = _mm_mul_ps(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_ps(x,x,0xB1); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mul_ps(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di z = _mm_addsub_ps(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_L = _mm_add_ps(z_L, z); // Add the complex multiplication results together /*pointer increment*/ _carrier += 2; _input += 2; //_input_BB += 2; _E_code += 2; _P_code += 2; _L_code +=2; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_E[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_P[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_L[2]; //__VOLK_ATTR_ALIGNED(16) lv_32fc_t _input_BB; _mm_store_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm_store_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector dotProduct_E += ( dotProductVector_E[0] + dotProductVector_E[1] ); dotProduct_P += ( dotProductVector_P[0] + dotProductVector_P[1] ); dotProduct_L += ( dotProductVector_L[0] + dotProductVector_L[1] ); if((num_points % 2) != 0) { //_input_BB = (*_input) * (*_carrier); dotProduct_E += (*_input) * (*_E_code)*(*_carrier); dotProduct_P += (*_input) * (*_P_code)*(*_carrier); dotProduct_L += (*_input) * (*_L_code)*(*_carrier); } *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_32fc_t* input, const lv_32fc_t* carrier, const lv_32fc_t* E_code, const lv_32fc_t* P_code, const lv_32fc_t* L_code, unsigned int num_points) { lv_32fc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += bb_signal_sample * E_code[i]; *P_out += bb_signal_sample * P_code[i]; *L_out += bb_signal_sample * L_code[i]; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3_a_H */ ././@LongLink0000644000000000000000000000020400000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000005166012576764164033745 0ustar carlescarles/*! * \file volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 32 bits vectors * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Early, Prompt, and Late correlation with 32 bits vectors (16 bits the * real part and 16 bits the imaginary part): * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 32 bits vectors) It returns the input * signal in base band (BB) * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 32 bits vectors), accumulating the results * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 32 bits vectors), accumulating the results * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 32 bits vectors), accumulating the results * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_sse4_1(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_lddqu_si128((__m128i*)input_ptr); y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(x1, x2, realx, imagx) CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) //Adds the float 32 results real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; E_code_ptr += 4; P_code_ptr += 4; L_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { lv_16sc_t bb_signal_sample; lv_16sc_t tmp1; lv_16sc_t tmp2; lv_16sc_t tmp3; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; tmp1 = bb_signal_sample * E_code[i]; tmp2 = bb_signal_sample * P_code[i]; tmp3 = bb_signal_sample * L_code[i]; // Now get early, late, and prompt values for each *E_out += (lv_32fc_t)tmp1; *P_out += (lv_32fc_t)tmp2; *L_out += (lv_32fc_t)tmp3; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_sse4_1(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x1 = _mm_load_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_load_si128((__m128i*)input_ptr); y1 = _mm_load_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_load_si128((__m128i*)carrier_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(x1, x2, realx, imagx) CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y1 = _mm_load_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_load_si128((__m128i*)E_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) //Adds the float 32 results real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_load_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_load_si128((__m128i*)P_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_load_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_load_si128((__m128i*)L_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; E_code_ptr += 4; P_code_ptr += 4; L_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_store_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { lv_16sc_t bb_signal_sample; lv_16sc_t tmp1; lv_16sc_t tmp2; lv_16sc_t tmp3; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; tmp1 = bb_signal_sample * E_code[i]; tmp2 = bb_signal_sample * P_code[i]; tmp3 = bb_signal_sample * L_code[i]; // Now get early, late, and prompt values for each *E_out += (lv_32fc_t)tmp1; *P_out += (lv_32fc_t)tmp2; *L_out += (lv_32fc_t)tmp3; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_H */ ././@LongLink0000644000000000000000000000017100000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8i_index_max_16u.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000003730312576764164033743 0ustar carlescarles/*! * \file volk_gnsssdr_8i_index_max_16u.h * \brief Volk protokernel: calculates the index of the maximum value in a group of 8 bits (char) scalars * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that returns the index of the maximum value of a group of 8 bits (char) scalars * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8i_index_max_16u_u_H #define INCLUDED_volk_gnsssdr_8i_index_max_16u_u_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_u_avx(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0){ const unsigned int sse_iters = num_points / 32; char* basePtr = (char*)src0; char* inputPtr = (char*)src0; char max = src0[0]; unsigned int index = 0; __VOLK_ATTR_ALIGNED(32) char currentValuesBuffer[32]; __m256i ones, compareResults, currentValues; __m128i compareResultslo, compareResultshi, maxValues, lo, hi; ones = _mm256_set1_epi8(0xFF); maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm256_lddqu_si256((__m256i*)inputPtr); lo = _mm256_castsi256_si128(currentValues); hi = _mm256_extractf128_si256(currentValues,1); compareResultslo = _mm_cmpgt_epi8(maxValues, lo); compareResultshi = _mm_cmpgt_epi8(maxValues, hi); //compareResults = _mm256_set_m128i(compareResultshi , compareResultslo); //not defined in some versions of immintrin.h compareResults = _mm256_insertf128_si256(_mm256_castsi128_si256(compareResultslo),(compareResultshi),1); if (!_mm256_testc_si256(compareResults, ones)) { _mm256_storeu_si256((__m256i*)¤tValuesBuffer, currentValues); for(unsigned int i = 0; i < 32; i++) { if(currentValuesBuffer[i] > max) { index = inputPtr - basePtr + i; max = currentValuesBuffer[i]; } } maxValues = _mm_set1_epi8(max); } inputPtr += 32; } for(unsigned int i = 0; i<(num_points % 32); ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_AVX*/ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_u_sse4_1(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0){ const unsigned int sse_iters = num_points / 16; char* basePtr = (char*)src0; char* inputPtr = (char*)src0; char max = src0[0]; unsigned int index = 0; __VOLK_ATTR_ALIGNED(16) char currentValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_lddqu_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); if (!_mm_test_all_ones(compareResults)) { _mm_storeu_si128((__m128i*)¤tValuesBuffer, currentValues); for(unsigned int i = 0; i < 16; i++) { if(currentValuesBuffer[i] > max) { index = inputPtr - basePtr + i; max = currentValuesBuffer[i]; } } maxValues = _mm_set1_epi8(max); } inputPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_SSE4_1*/ #ifdef LV_HAVE_SSE2 #include /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_u_sse2(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0){ const unsigned int sse_iters = num_points / 16; char* basePtr = (char*)src0; char* inputPtr = (char*)src0; char max = src0[0]; unsigned int index = 0; unsigned short mask; __VOLK_ATTR_ALIGNED(16) char currentValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_loadu_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); mask = _mm_movemask_epi8(compareResults); if (mask != 0xFFFF) { _mm_storeu_si128((__m128i*)¤tValuesBuffer, currentValues); mask = ~mask; unsigned int i = 0; while (mask > 0) { if ((mask & 1) == 1) { if(currentValuesBuffer[i] > max) { index = inputPtr - basePtr + i; max = currentValuesBuffer[i]; } } i++; mask >>= 1; } maxValues = _mm_set1_epi8(max); } inputPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_SSE2*/ #ifdef LV_HAVE_GENERIC /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_generic(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0) { char max = src0[0]; unsigned int index = 0; for(unsigned int i = 1; i < num_points; ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_GENERIC*/ #endif /*INCLUDED_volk_gnsssdr_8i_index_max_16u_u_H*/ #ifndef INCLUDED_volk_gnsssdr_8i_index_max_16u_a_H #define INCLUDED_volk_gnsssdr_8i_index_max_16u_a_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_a_avx(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0){ const unsigned int sse_iters = num_points / 32; char* basePtr = (char*)src0; char* inputPtr = (char*)src0; char max = src0[0]; unsigned int index = 0; __VOLK_ATTR_ALIGNED(32) char currentValuesBuffer[32]; __m256i ones, compareResults, currentValues; __m128i compareResultslo, compareResultshi, maxValues, lo, hi; ones = _mm256_set1_epi8(0xFF); maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm256_load_si256((__m256i*)inputPtr); lo = _mm256_castsi256_si128(currentValues); hi = _mm256_extractf128_si256(currentValues,1); compareResultslo = _mm_cmpgt_epi8(maxValues, lo); compareResultshi = _mm_cmpgt_epi8(maxValues, hi); //compareResults = _mm256_set_m128i(compareResultshi , compareResultslo); //not defined in some versions of immintrin.h compareResults = _mm256_insertf128_si256(_mm256_castsi128_si256(compareResultslo),(compareResultshi),1); if (!_mm256_testc_si256(compareResults, ones)) { _mm256_store_si256((__m256i*)¤tValuesBuffer, currentValues); for(unsigned int i = 0; i < 32; i++) { if(currentValuesBuffer[i] > max) { index = inputPtr - basePtr + i; max = currentValuesBuffer[i]; } } maxValues = _mm_set1_epi8(max); } inputPtr += 32; } for(unsigned int i = 0; i<(num_points % 32); ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_AVX*/ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_a_sse4_1(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0){ const unsigned int sse_iters = num_points / 16; char* basePtr = (char*)src0; char* inputPtr = (char*)src0; char max = src0[0]; unsigned int index = 0; __VOLK_ATTR_ALIGNED(16) char currentValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_load_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); if (!_mm_test_all_ones(compareResults)) { _mm_store_si128((__m128i*)¤tValuesBuffer, currentValues); for(unsigned int i = 0; i < 16; i++) { if(currentValuesBuffer[i] > max) { index = inputPtr - basePtr + i; max = currentValuesBuffer[i]; } } maxValues = _mm_set1_epi8(max); } inputPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_SSE4_1*/ #ifdef LV_HAVE_SSE2 #include /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_a_sse2(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0){ const unsigned int sse_iters = num_points / 16; char* basePtr = (char*)src0; char* inputPtr = (char*)src0; char max = src0[0]; unsigned int index = 0; unsigned short mask; __VOLK_ATTR_ALIGNED(16) char currentValuesBuffer[16]; __m128i maxValues, compareResults, currentValues; maxValues = _mm_set1_epi8(max); for(unsigned int number = 0; number < sse_iters; number++) { currentValues = _mm_load_si128((__m128i*)inputPtr); compareResults = _mm_cmpgt_epi8(maxValues, currentValues); mask = _mm_movemask_epi8(compareResults); if (mask != 0xFFFF) { _mm_store_si128((__m128i*)¤tValuesBuffer, currentValues); mask = ~mask; unsigned int i = 0; while (mask > 0) { if ((mask & 1) == 1) { if(currentValuesBuffer[i] > max) { index = inputPtr - basePtr + i; max = currentValuesBuffer[i]; } } i++; mask >>= 1; } maxValues = _mm_set1_epi8(max); } inputPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_SSE2*/ #ifdef LV_HAVE_GENERIC /*! \brief Returns the index of the max value in src0 \param target The index of the max value in src0 \param src0 The buffer of data to be analysed \param num_points The number of values in src0 to be analysed */ static inline void volk_gnsssdr_8i_index_max_16u_a_generic(unsigned int* target, const char* src0, unsigned int num_points) { if(num_points > 0) { char max = src0[0]; unsigned int index = 0; for(unsigned int i = 1; i < num_points; ++i) { if(src0[i] > max) { index = i; max = src0[i]; } } target[0] = index; } } #endif /*LV_HAVE_GENERIC*/ #endif /*INCLUDED_volk_gnsssdr_8i_index_max_16u_a_H*/ ././@LongLink0000644000000000000000000000017400000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x2_dot_prod_8ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000004463112576764164033745 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x2_dot_prod_8ic.h * \brief Volk protokernel: multiplies two 16 bits vectors and accumulates them * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that multiplies two 16 bits vectors (8 bits the real part * and 8 bits the imaginary part) and accumulates them * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8ic_x2_dot_prod_8ic_u_H #define INCLUDED_volk_gnsssdr_8ic_x2_dot_prod_8ic_u_H #include #include #include #include #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_generic(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { /*lv_8sc_t* cPtr = result; const lv_8sc_t* aPtr = input; const lv_8sc_t* bPtr = taps; for(int number = 0; number < num_points; number++){ *cPtr += (*aPtr++) * (*bPtr++); }*/ char * res = (char*) result; char * in = (char*) input; char * tp = (char*) taps; unsigned int n_2_ccomplex_blocks = num_points/2; unsigned int isodd = num_points & 1; char sum0[2] = {0,0}; char sum1[2] = {0,0}; unsigned int i = 0; for(i = 0; i < n_2_ccomplex_blocks; ++i) { sum0[0] += in[0] * tp[0] - in[1] * tp[1]; sum0[1] += in[0] * tp[1] + in[1] * tp[0]; sum1[0] += in[2] * tp[2] - in[3] * tp[3]; sum1[1] += in[2] * tp[3] + in[3] * tp[2]; in += 4; tp += 4; } res[0] = sum0[0] + sum1[0]; res[1] = sum0[1] + sum1[1]; // Cleanup if we had an odd number of points for(i = 0; i < isodd; ++i) { *result += input[num_points - 1] * taps[num_points - 1]; } } #endif /*LV_HAVE_GENERIC*/ #ifdef LV_HAVE_SSE2 #include /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse2(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { lv_8sc_t dotProduct; memset(&dotProduct, 0x0, 2*sizeof(char)); const lv_8sc_t* a = input; const lv_8sc_t* b = taps; const unsigned int sse_iters = num_points/8; if (sse_iters>0) { __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc, realcacc, imagcacc; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); realcacc = _mm_setzero_si128(); imagcacc = _mm_setzero_si128(); for(unsigned int number = 0; number < sse_iters; number++) { x = _mm_loadu_si128((__m128i*)a); y = _mm_loadu_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); realcacc = _mm_add_epi16 (realcacc, realc); imagcacc = _mm_add_epi16 (imagcacc, imagc); a += 8; b += 8; } realcacc = _mm_and_si128 (realcacc, mult1); imagcacc = _mm_and_si128 (imagcacc, mult1); imagcacc = _mm_slli_si128 (imagcacc, 1); totalc = _mm_or_si128 (realcacc, imagcacc); __VOLK_ATTR_ALIGNED(16) lv_8sc_t dotProductVector[8]; _mm_storeu_si128((__m128i*)dotProductVector,totalc); // Store the results back into the dot product vector for (int i = 0; i<8; ++i) { dotProduct += dotProductVector[i]; } } for (unsigned int i = 0; i<(num_points % 8); ++i) { dotProduct += (*a++) * (*b++); } *result = dotProduct; } #endif /*LV_HAVE_SSE2*/ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse4_1(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { lv_8sc_t dotProduct; memset(&dotProduct, 0x0, 2*sizeof(char)); const lv_8sc_t* a = input; const lv_8sc_t* b = taps; const unsigned int sse_iters = num_points/8; if (sse_iters>0) { __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc, realcacc, imagcacc; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); realcacc = _mm_setzero_si128(); imagcacc = _mm_setzero_si128(); for(unsigned int number = 0; number < sse_iters; number++) { x = _mm_lddqu_si128((__m128i*)a); y = _mm_lddqu_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); realcacc = _mm_add_epi16 (realcacc, realc); imagcacc = _mm_add_epi16 (imagcacc, imagc); a += 8; b += 8; } imagcacc = _mm_slli_si128 (imagcacc, 1); totalc = _mm_blendv_epi8 (imagcacc, realcacc, mult1); __VOLK_ATTR_ALIGNED(16) lv_8sc_t dotProductVector[8]; _mm_storeu_si128((__m128i*)dotProductVector,totalc); // Store the results back into the dot product vector for (unsigned int i = 0; i<8; ++i) { dotProduct += dotProductVector[i]; } } for (unsigned int i = 0; i<(num_points % 8); ++i) { dotProduct += (*a++) * (*b++); } *result = dotProduct; } #endif /*LV_HAVE_SSE4_1*/ #endif /*INCLUDED_volk_gnsssdr_8ic_x2_dot_prod_8ic_u_H*/ #ifndef INCLUDED_volk_gnsssdr_8ic_x2_dot_prod_8ic_a_H #define INCLUDED_volk_gnsssdr_8ic_x2_dot_prod_8ic_a_H #include #include #include #include #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_generic(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { /*lv_8sc_t* cPtr = result; const lv_8sc_t* aPtr = input; const lv_8sc_t* bPtr = taps; for(int number = 0; number < num_points; number++){ *cPtr += (*aPtr++) * (*bPtr++); }*/ char * res = (char*) result; char * in = (char*) input; char * tp = (char*) taps; unsigned int n_2_ccomplex_blocks = num_points/2; unsigned int isodd = num_points & 1; char sum0[2] = {0,0}; char sum1[2] = {0,0}; unsigned int i = 0; for(i = 0; i < n_2_ccomplex_blocks; ++i) { sum0[0] += in[0] * tp[0] - in[1] * tp[1]; sum0[1] += in[0] * tp[1] + in[1] * tp[0]; sum1[0] += in[2] * tp[2] - in[3] * tp[3]; sum1[1] += in[2] * tp[3] + in[3] * tp[2]; in += 4; tp += 4; } res[0] = sum0[0] + sum1[0]; res[1] = sum0[1] + sum1[1]; // Cleanup if we had an odd number of points for(i = 0; i < isodd; ++i) { *result += input[num_points - 1] * taps[num_points - 1]; } } #endif /*LV_HAVE_GENERIC*/ #ifdef LV_HAVE_SSE2 #include /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse2(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { lv_8sc_t dotProduct; memset(&dotProduct, 0x0, 2*sizeof(char)); const lv_8sc_t* a = input; const lv_8sc_t* b = taps; const unsigned int sse_iters = num_points/8; if (sse_iters>0) { __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc, realcacc, imagcacc; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); realcacc = _mm_setzero_si128(); imagcacc = _mm_setzero_si128(); for(unsigned int number = 0; number < sse_iters; number++) { x = _mm_load_si128((__m128i*)a); y = _mm_load_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); realcacc = _mm_add_epi16 (realcacc, realc); imagcacc = _mm_add_epi16 (imagcacc, imagc); a += 8; b += 8; } realcacc = _mm_and_si128 (realcacc, mult1); imagcacc = _mm_and_si128 (imagcacc, mult1); imagcacc = _mm_slli_si128 (imagcacc, 1); totalc = _mm_or_si128 (realcacc, imagcacc); __VOLK_ATTR_ALIGNED(16) lv_8sc_t dotProductVector[8]; _mm_store_si128((__m128i*)dotProductVector,totalc); // Store the results back into the dot product vector for (unsigned int i = 0; i<8; ++i) { dotProduct += dotProductVector[i]; } } for (unsigned int i = 0; i<(num_points % 8); ++i) { dotProduct += (*a++) * (*b++); } *result = dotProduct; } #endif /*LV_HAVE_SSE2*/ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse4_1(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { lv_8sc_t dotProduct; memset(&dotProduct, 0x0, 2*sizeof(char)); const lv_8sc_t* a = input; const lv_8sc_t* b = taps; const unsigned int sse_iters = num_points/8; if (sse_iters>0) { __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc, realcacc, imagcacc; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); realcacc = _mm_setzero_si128(); imagcacc = _mm_setzero_si128(); for(unsigned int number = 0; number < sse_iters; number++) { x = _mm_load_si128((__m128i*)a); y = _mm_load_si128((__m128i*)b); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); realcacc = _mm_add_epi16 (realcacc, realc); imagcacc = _mm_add_epi16 (imagcacc, imagc); a += 8; b += 8; } imagcacc = _mm_slli_si128 (imagcacc, 1); totalc = _mm_blendv_epi8 (imagcacc, realcacc, mult1); __VOLK_ATTR_ALIGNED(16) lv_8sc_t dotProductVector[8]; _mm_store_si128((__m128i*)dotProductVector,totalc); // Store the results back into the dot product vector for (unsigned int i = 0; i<8; ++i) { dotProduct += dotProductVector[i]; } } for (unsigned int i = 0; i<(num_points % 8); ++i) { dotProduct += (*a++) * (*b++); } *result = dotProduct; } #endif /*LV_HAVE_SSE4_1*/ #ifdef LV_HAVE_ORC /*! \brief Multiplies the two input complex vectors and accumulates them, storing the result in the third vector \param cVector The vector where the accumulated result will be stored \param aVector One of the vectors to be multiplied and accumulated \param bVector One of the vectors to be multiplied and accumulated \param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector */ extern void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_orc_impl(short* resRealShort, short* resImagShort, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points); static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_orc(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) { short resReal = 0; char* resRealChar = (char*)&resReal; resRealChar++; short resImag = 0; char* resImagChar = (char*)&resImag; resImagChar++; volk_gnsssdr_8ic_x2_dot_prod_8ic_a_orc_impl(&resReal, &resImag, input, taps, num_points); *result = lv_cmake(*resRealChar, *resImagChar); } #endif /* LV_HAVE_ORC */ #endif /*INCLUDED_volk_gnsssdr_8ic_x2_dot_prod_8ic_a_H*/ ././@LongLink0000644000000000000000000000016500000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8i_x2_add_8i.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000001451012576764164033736 0ustar carlescarles/*! * \file volk_gnsssdr_8i_x2_add_8i.h * \brief Volk protokernel: adds pairs of 8 bits (char) scalars * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that adds pairs of 8 bits (char) scalars * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8i_x2_add_8i_u_H #define INCLUDED_volk_gnsssdr_8i_x2_add_8i_u_H #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Adds the two input vectors and store their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be added \param bVector One of the vectors to be added \param num_points The number of values in aVector and bVector to be added together and stored into cVector */ static inline void volk_gnsssdr_8i_x2_add_8i_u_sse2(char* cVector, const char* aVector, const char* bVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; char* cPtr = cVector; const char* aPtr = aVector; const char* bPtr= bVector; __m128i aVal, bVal, cVal; for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm_loadu_si128((__m128i*)aPtr); bVal = _mm_loadu_si128((__m128i*)bPtr); cVal = _mm_add_epi8(aVal, bVal); _mm_storeu_si128((__m128i*)cPtr,cVal); // Store the results back into the C container aPtr += 16; bPtr += 16; cPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { *cPtr++ = (*aPtr++) + (*bPtr++); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Adds the two input vectors and store their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be added \param bVector One of the vectors to be added \param num_points The number of values in aVector and bVector to be added together and stored into cVector */ static inline void volk_gnsssdr_8i_x2_add_8i_generic(char* cVector, const char* aVector, const char* bVector, unsigned int num_points) { char* cPtr = cVector; const char* aPtr = aVector; const char* bPtr= bVector; unsigned int number = 0; for(number = 0; number < num_points; number++) { *cPtr++ = (*aPtr++) + (*bPtr++); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_8i_x2_add_8i_u_H */ #ifndef INCLUDED_volk_gnsssdr_8i_x2_add_8i_a_H #define INCLUDED_volk_gnsssdr_8i_x2_add_8i_a_H #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Adds the two input vectors and store their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be added \param bVector One of the vectors to be added \param num_points The number of values in aVector and bVector to be added together and stored into cVector */ static inline void volk_gnsssdr_8i_x2_add_8i_a_sse2(char* cVector, const char* aVector, const char* bVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; char* cPtr = cVector; const char* aPtr = aVector; const char* bPtr= bVector; __m128i aVal, bVal, cVal; for(unsigned int number = 0; number < sse_iters; number++) { aVal = _mm_load_si128((__m128i*)aPtr); bVal = _mm_load_si128((__m128i*)bPtr); cVal = _mm_add_epi8(aVal, bVal); _mm_store_si128((__m128i*)cPtr,cVal); // Store the results back into the C container aPtr += 16; bPtr += 16; cPtr += 16; } for(unsigned int i = 0; i<(num_points % 16); ++i) { *cPtr++ = (*aPtr++) + (*bPtr++); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Adds the two input vectors and store their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be added \param bVector One of the vectors to be added \param num_points The number of values in aVector and bVector to be added together and stored into cVector */ static inline void volk_gnsssdr_8i_x2_add_8i_a_generic(char* cVector, const char* aVector, const char* bVector, unsigned int num_points) { char* cPtr = cVector; const char* aPtr = aVector; const char* bPtr= bVector; unsigned int number = 0; for(number = 0; number < num_points; number++) { *cPtr++ = (*aPtr++) + (*bPtr++); } } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Adds the two input vectors and store their results in the third vector \param cVector The vector where the results will be stored \param aVector One of the vectors to be added \param bVector One of the vectors to be added \param num_points The number of values in aVector and bVector to be added together and stored into cVector */ extern void volk_gnsssdr_8i_x2_add_8i_a_orc_impl(char* cVector, const char* aVector, const char* bVector, unsigned int num_points); static inline void volk_gnsssdr_8i_x2_add_8i_u_orc(char* cVector, const char* aVector, const char* bVector, unsigned int num_points) { volk_gnsssdr_8i_x2_add_8i_a_orc_impl(cVector, aVector, bVector, num_points); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_8i_x2_add_8i_a_H */ ././@LongLink0000644000000000000000000000020100000000000011574 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_magnitude_squared_8i.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000003214512576764164033742 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_magnitude_squared_8i.h * \brief Volk protokernel: calculates the magnitude squared of a 16 bits vector * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that calculates the magnitude squared of a * 16 bits vector (8 bits the real part and 8 bits the imaginary part) * result = (real*real) + (imag*imag) * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8ic_magnitude_squared_8i_u_H #define INCLUDED_volk_gnsssdr_8ic_magnitude_squared_8i_u_H #include #include #include #ifdef LV_HAVE_SSSE3 #include /*! \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector \param complexVector The vector containing the complex input values \param magnitudeVector The vector containing the real output values \param num_points The number of complex values in complexVector to be calculated and stored into cVector */ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_sse3(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; const char* complexVectorPtr = (char*)complexVector; char* magnitudeVectorPtr = magnitudeVector; __m128i zero, result8; __m128i avector, avectorhi, avectorlo, avectorlomult, avectorhimult, aadded, maska; __m128i bvector, bvectorhi, bvectorlo, bvectorlomult, bvectorhimult, badded, maskb; zero = _mm_setzero_si128(); maska = _mm_set_epi8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 14, 12, 10, 8, 6, 4, 2, 0); maskb = _mm_set_epi8(14, 12, 10, 8, 6, 4, 2, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80); for(unsigned int number = 0;number < sse_iters; number++) { avector = _mm_lddqu_si128((__m128i*)complexVectorPtr); avectorlo = _mm_unpacklo_epi8 (avector, zero); avectorhi = _mm_unpackhi_epi8 (avector, zero); avectorlomult = _mm_mullo_epi16 (avectorlo, avectorlo); avectorhimult = _mm_mullo_epi16 (avectorhi, avectorhi); aadded = _mm_hadd_epi16 (avectorlomult, avectorhimult); complexVectorPtr += 16; bvector = _mm_lddqu_si128((__m128i*)complexVectorPtr); bvectorlo = _mm_unpacklo_epi8 (bvector, zero); bvectorhi = _mm_unpackhi_epi8 (bvector, zero); bvectorlomult = _mm_mullo_epi16 (bvectorlo, bvectorlo); bvectorhimult = _mm_mullo_epi16 (bvectorhi, bvectorhi); badded = _mm_hadd_epi16 (bvectorlomult, bvectorhimult); complexVectorPtr += 16; result8 = _mm_or_si128(_mm_shuffle_epi8(aadded, maska), _mm_shuffle_epi8(badded, maskb)); _mm_storeu_si128((__m128i*)magnitudeVectorPtr, result8); magnitudeVectorPtr += 16; } for (unsigned int i = 0; i<(num_points % 16); ++i) { const char valReal = *complexVectorPtr++; const char valImag = *complexVectorPtr++; *magnitudeVectorPtr++ = (valReal * valReal) + (valImag * valImag); } } #endif /* LV_HAVE_SSSE3 */ //#ifdef LV_HAVE_SSE //#include ///*! // \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector // \param complexVector The vector containing the complex input values // \param magnitudeVector The vector containing the real output values // \param num_points The number of complex values in complexVector to be calculated and stored into cVector // */ //static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_sse(float* magnitudeVector, const lv_32fc_t* complexVector, unsigned int num_points){ // unsigned int number = 0; // const unsigned int quarterPoints = num_points / 4; // // const float* complexVectorPtr = (float*)complexVector; // float* magnitudeVectorPtr = magnitudeVector; // // __m128 cplxValue1, cplxValue2, iValue, qValue, result; // for(;number < quarterPoints; number++){ // cplxValue1 = _mm_loadu_ps(complexVectorPtr); // complexVectorPtr += 4; // // cplxValue2 = _mm_loadu_ps(complexVectorPtr); // complexVectorPtr += 4; // // // Arrange in i1i2i3i4 format // iValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(2,0,2,0)); // // Arrange in q1q2q3q4 format // qValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(3,1,3,1)); // // iValue = _mm_mul_ps(iValue, iValue); // Square the I values // qValue = _mm_mul_ps(qValue, qValue); // Square the Q Values // // result = _mm_add_ps(iValue, qValue); // Add the I2 and Q2 values // // _mm_storeu_ps(magnitudeVectorPtr, result); // magnitudeVectorPtr += 4; // } // // number = quarterPoints * 4; // for(; number < num_points; number++){ // float val1Real = *complexVectorPtr++; // float val1Imag = *complexVectorPtr++; // *magnitudeVectorPtr++ = (val1Real * val1Real) + (val1Imag * val1Imag); // } //} //#endif /* LV_HAVE_SSE */ #ifdef LV_HAVE_GENERIC /*! \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector \param complexVector The vector containing the complex input values \param magnitudeVector The vector containing the real output values \param num_points The number of complex values in complexVector to be calculated and stored into cVector */ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_generic(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points) { const char* complexVectorPtr = (char*)complexVector; char* magnitudeVectorPtr = magnitudeVector; for(unsigned int number = 0; number < num_points; number++) { const char real = *complexVectorPtr++; const char imag = *complexVectorPtr++; *magnitudeVectorPtr++ = (real*real) + (imag*imag); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_magnitude_32f_u_H */ #ifndef INCLUDED_volk_gnsssdr_8ic_magnitude_squared_8i_a_H #define INCLUDED_volk_gnsssdr_8ic_magnitude_squared_8i_a_H #include #include #include #ifdef LV_HAVE_SSSE3 #include /*! \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector \param complexVector The vector containing the complex input values \param magnitudeVector The vector containing the real output values \param num_points The number of complex values in complexVector to be calculated and stored into cVector */ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_sse3(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; const char* complexVectorPtr = (char*)complexVector; char* magnitudeVectorPtr = magnitudeVector; __m128i zero, result8; __m128i avector, avectorhi, avectorlo, avectorlomult, avectorhimult, aadded, maska; __m128i bvector, bvectorhi, bvectorlo, bvectorlomult, bvectorhimult, badded, maskb; zero = _mm_setzero_si128(); maska = _mm_set_epi8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 14, 12, 10, 8, 6, 4, 2, 0); maskb = _mm_set_epi8(14, 12, 10, 8, 6, 4, 2, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80); for(unsigned int number = 0;number < sse_iters; number++) { avector = _mm_load_si128((__m128i*)complexVectorPtr); avectorlo = _mm_unpacklo_epi8 (avector, zero); avectorhi = _mm_unpackhi_epi8 (avector, zero); avectorlomult = _mm_mullo_epi16 (avectorlo, avectorlo); avectorhimult = _mm_mullo_epi16 (avectorhi, avectorhi); aadded = _mm_hadd_epi16 (avectorlomult, avectorhimult); complexVectorPtr += 16; bvector = _mm_load_si128((__m128i*)complexVectorPtr); bvectorlo = _mm_unpacklo_epi8 (bvector, zero); bvectorhi = _mm_unpackhi_epi8 (bvector, zero); bvectorlomult = _mm_mullo_epi16 (bvectorlo, bvectorlo); bvectorhimult = _mm_mullo_epi16 (bvectorhi, bvectorhi); badded = _mm_hadd_epi16 (bvectorlomult, bvectorhimult); complexVectorPtr += 16; result8 = _mm_or_si128(_mm_shuffle_epi8(aadded, maska), _mm_shuffle_epi8(badded, maskb)); _mm_store_si128((__m128i*)magnitudeVectorPtr, result8); magnitudeVectorPtr += 16; } for (unsigned int i = 0; i<(num_points % 16); ++i) { const char valReal = *complexVectorPtr++; const char valImag = *complexVectorPtr++; *magnitudeVectorPtr++ = (valReal * valReal) + (valImag * valImag); } } #endif /* LV_HAVE_SSSE3 */ //#ifdef LV_HAVE_SSE //#include ///*! // \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector // \param complexVector The vector containing the complex input values // \param magnitudeVector The vector containing the real output values // \param num_points The number of complex values in complexVector to be calculated and stored into cVector // */ //static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_sse(float* magnitudeVector, const lv_32fc_t* complexVector, unsigned int num_points){ // unsigned int number = 0; // const unsigned int quarterPoints = num_points / 4; // // const float* complexVectorPtr = (float*)complexVector; // float* magnitudeVectorPtr = magnitudeVector; // // __m128 cplxValue1, cplxValue2, iValue, qValue, result; // for(;number < quarterPoints; number++){ // cplxValue1 = _mm_load_ps(complexVectorPtr); // complexVectorPtr += 4; // // cplxValue2 = _mm_load_ps(complexVectorPtr); // complexVectorPtr += 4; // // // Arrange in i1i2i3i4 format // iValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(2,0,2,0)); // // Arrange in q1q2q3q4 format // qValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(3,1,3,1)); // // iValue = _mm_mul_ps(iValue, iValue); // Square the I values // qValue = _mm_mul_ps(qValue, qValue); // Square the Q Values // // result = _mm_add_ps(iValue, qValue); // Add the I2 and Q2 values // // _mm_store_ps(magnitudeVectorPtr, result); // magnitudeVectorPtr += 4; // } // // number = quarterPoints * 4; // for(; number < num_points; number++){ // float val1Real = *complexVectorPtr++; // float val1Imag = *complexVectorPtr++; // *magnitudeVectorPtr++ = (val1Real * val1Real) + (val1Imag * val1Imag); // } //} //#endif /* LV_HAVE_SSE */ #ifdef LV_HAVE_GENERIC /*! \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector \param complexVector The vector containing the complex input values \param magnitudeVector The vector containing the real output values \param num_points The number of complex values in complexVector to be calculated and stored into cVector */ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_generic(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points) { const char* complexVectorPtr = (char*)complexVector; char* magnitudeVectorPtr = magnitudeVector; for(unsigned int number = 0; number < num_points; number++) { const char real = *complexVectorPtr++; const char imag = *complexVectorPtr++; *magnitudeVectorPtr++ = (real*real) + (imag*imag); } } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Calculates the magnitude squared of complexVector and stores the results in magnitudeVector \param complexVector The vector containing the complex input values \param magnitudeVector The vector containing the real output values \param num_points The number of complex values in complexVector to be calculated and stored into cVector */ extern void volk_gnsssdr_8ic_magnitude_squared_8i_a_orc_impl(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points); static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_orc(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points) { volk_gnsssdr_8ic_magnitude_squared_8i_a_orc_impl(magnitudeVector, complexVector, num_points); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_32fc_magnitude_32f_a_H */ ././@LongLink0000644000000000000000000000017600000000000011607 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_s32f_convert_8ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002237312576764164033744 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_s32f_convert_8ic.h * \brief Volk protokernel: converts float32 complex values to 8 integer complex values taking care of overflow * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_32fc_s32f_convert_8ic_u_H #define INCLUDED_volk_gnsssdr_32fc_s32f_convert_8ic_u_H #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_u_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points) { const unsigned int sse_iters = num_points/8; float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; __m128 invScalar = _mm_set_ps1(1.0/scalar); float min_val = -128; float max_val = 127; __m128 inputVal1, inputVal2, inputVal3, inputVal4; __m128i intInputVal1, intInputVal2, intInputVal3, intInputVal4; __m128i int8InputVal; __m128 ret1, ret2, ret3, ret4; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++) { inputVal1 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal3 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal4 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal1 = _mm_mul_ps(inputVal1, invScalar); inputVal2 = _mm_mul_ps(inputVal2, invScalar); inputVal3 = _mm_mul_ps(inputVal3, invScalar); inputVal4 = _mm_mul_ps(inputVal4, invScalar); // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); ret3 = _mm_max_ps(_mm_min_ps(inputVal3, vmax_val), vmin_val); ret4 = _mm_max_ps(_mm_min_ps(inputVal4, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal3 = _mm_cvtps_epi32(ret3); intInputVal4 = _mm_cvtps_epi32(ret4); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); intInputVal2 = _mm_packs_epi32(intInputVal3, intInputVal4); int8InputVal = _mm_packs_epi16(intInputVal1, intInputVal2); _mm_storeu_si128((__m128i*)outputVectorPtr, int8InputVal); outputVectorPtr += 16; } float scaled = 0; for(unsigned int i = 0; i < (num_points%4)*4; i++) { scaled = inputVectorPtr[i]/scalar; if(scaled > max_val) scaled = max_val; else if(scaled < min_val) scaled = min_val; outputVectorPtr[i] = (int8_t)rintf(scaled); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points) { float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; float scaled = 0; float min_val = -128; float max_val = 127; for(unsigned int i = 0; i < num_points*2; i++) { scaled = (inputVectorPtr[i])/scalar; if(scaled > max_val) scaled = max_val; else if(scaled < min_val) scaled = min_val; outputVectorPtr[i] = (int8_t)rintf(scaled); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_s32f_convert_8ic_u_H */ #ifndef INCLUDED_volk_gnsssdr_32fc_s32f_convert_8ic_a_H #define INCLUDED_volk_gnsssdr_32fc_s32f_convert_8ic_a_H #include #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points) { const unsigned int sse_iters = num_points/8; float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; __m128 invScalar = _mm_set_ps1(1.0/scalar); float min_val = -128; float max_val = 127; __m128 inputVal1, inputVal2, inputVal3, inputVal4; __m128i intInputVal1, intInputVal2, intInputVal3, intInputVal4; __m128i int8InputVal; __m128 ret1, ret2, ret3, ret4; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++) { inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal3 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal4 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal1 = _mm_mul_ps(inputVal1, invScalar); inputVal2 = _mm_mul_ps(inputVal2, invScalar); inputVal3 = _mm_mul_ps(inputVal3, invScalar); inputVal4 = _mm_mul_ps(inputVal4, invScalar); // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); ret3 = _mm_max_ps(_mm_min_ps(inputVal3, vmax_val), vmin_val); ret4 = _mm_max_ps(_mm_min_ps(inputVal4, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal3 = _mm_cvtps_epi32(ret3); intInputVal4 = _mm_cvtps_epi32(ret4); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); intInputVal2 = _mm_packs_epi32(intInputVal3, intInputVal4); int8InputVal = _mm_packs_epi16(intInputVal1, intInputVal2); _mm_store_si128((__m128i*)outputVectorPtr, int8InputVal); outputVectorPtr += 16; } float scaled = 0; for(unsigned int i = 0; i < (num_points%4)*4; i++) { scaled = inputVectorPtr[i]/scalar; if(scaled > max_val) scaled = max_val; else if(scaled < min_val) scaled = min_val; outputVectorPtr[i] = (int8_t)rintf(scaled); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points) { float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; float scaled = 0; float min_val = -128; float max_val = 127; for(unsigned int i = 0; i < num_points*2; i++) { scaled = inputVectorPtr[i]/scalar; if(scaled > max_val) scaled = max_val; else if(scaled < min_val) scaled = min_val; outputVectorPtr[i] = (int8_t)rintf(scaled); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_s32f_convert_8ic_a_H */ ././@LongLink0000644000000000000000000000021100000000000011575 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000022135612576764164033746 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors using different methods: inside u_sse4_1_first there is one method, inside u_sse4_1_second there is another... This protokernel has been created to test the performance of different methods. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Very early, Early, Prompt, Late and very late correlation with 16 bits vectors (8 bits the * real part and 8 bits the imaginary part), and accumulates the result * in 32 bits single point values, returning float32 values: * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 16 bits vectors) It returns the input * signal in base band (BB) * - Very Early values are calculated by multiplying the input signal in BB by the * very early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Very Late values are calculated by multiplying the input signal in BB by the * very late code (multiplication of 16 bits vectors), accumulating the results into float32 values * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_first(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 VE_code_acc, E_code_acc, P_code_acc, L_code_acc, VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 output_ps_1, output_ps_2; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); VE_code_acc = _mm_setzero_ps(); E_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_1); VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_2); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); E_code_acc = _mm_add_ps (E_code_acc, output_ps_1); E_code_acc = _mm_add_ps (E_code_acc, output_ps_2); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); P_code_acc = _mm_add_ps (P_code_acc, output_ps_1); P_code_acc = _mm_add_ps (P_code_acc, output_ps_2); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); L_code_acc = _mm_add_ps (L_code_acc, output_ps_1); L_code_acc = _mm_add_ps (L_code_acc, output_ps_2); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_1); VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_2); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t VE_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t VL_dotProductVector[2]; _mm_storeu_ps((float*)VE_dotProductVector,VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)VL_dotProductVector,VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<2; ++i) { *VE_out_ptr += VE_dotProductVector[i]; *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *VL_out_ptr += VL_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_second(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i mult1, output, real_output, imag_output; __m128 VE_code_acc, E_code_acc, P_code_acc, L_code_acc, VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 output_ps_1, output_ps_2; __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); VE_code_acc = _mm_setzero_ps(); E_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); y_aux = _mm_sign_epi8 (y, x); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (x_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, x); imag_output = _mm_maddubs_epi16 (x_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_1); VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_2); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); E_code_acc = _mm_add_ps (E_code_acc, output_ps_1); E_code_acc = _mm_add_ps (E_code_acc, output_ps_2); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); P_code_acc = _mm_add_ps (P_code_acc, output_ps_1); P_code_acc = _mm_add_ps (P_code_acc, output_ps_2); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); L_code_acc = _mm_add_ps (L_code_acc, output_ps_1); L_code_acc = _mm_add_ps (L_code_acc, output_ps_2); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); output = _mm_blendv_epi8 (imag_output, real_output, mult1); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_1 = _mm_cvtepi32_ps(output_i32); input_i_1 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); input_i_2 = _mm_cvtepi8_epi32(output); output = _mm_srli_si128 (output, 4); output_i32 = _mm_add_epi32 (input_i_1, input_i_2); output_ps_2 = _mm_cvtepi32_ps(output_i32); VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_1); VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_2); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t VE_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t VL_dotProductVector[2]; _mm_storeu_ps((float*)VE_dotProductVector,VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)VL_dotProductVector,VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<2; ++i) { *VE_out_ptr += VE_dotProductVector[i]; *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *VL_out_ptr += VL_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_third(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i mult1, real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i real_output_i_1, real_output_i_2, imag_output_i_1, imag_output_i_2, real_output_i32, imag_output_i32; __m128 real_output_ps, imag_output_ps; __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); __m128i rearrange_sequence = _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); y_aux = _mm_sign_epi8 (y, x); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (x_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, x); imag_output = _mm_maddubs_epi16 (x_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_storeu_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } lv_16sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_fourth(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i real_output_i_1, real_output_i_2, imag_output_i_1, imag_output_i_2, real_output_i32, imag_output_i32; __m128 real_output_ps, imag_output_ps; __m128i minus128control; __m128i minus128 = _mm_set1_epi8 (-128); __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); __m128i rearrange_sequence = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); __m128i mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); y_aux = _mm_sign_epi8 (y, x); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (x_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, x); imag_output = _mm_maddubs_epi16 (x_abs, y_aux); imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); minus128control = _mm_cmpeq_epi8 (y, minus128); y = _mm_sub_epi8 (y, minus128control); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); minus128control = _mm_cmpeq_epi8 (y, minus128); y = _mm_sub_epi8 (y, minus128control); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); minus128control = _mm_cmpeq_epi8 (y, minus128); y = _mm_sub_epi8 (y, minus128control); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); minus128control = _mm_cmpeq_epi8 (y, minus128); y = _mm_sub_epi8 (y, minus128control); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, rearrange_sequence); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); minus128control = _mm_cmpeq_epi8 (y, minus128); y = _mm_sub_epi8 (y, minus128control); y_aux = _mm_sign_epi8 (y, bb_signal_sample_aux); y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence); real_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); y_aux = _mm_shuffle_epi8 (y, _mm_set_epi8 (14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1)); y_aux = _mm_sign_epi8 (y_aux, bb_signal_sample_aux); imag_output = _mm_maddubs_epi16 (bb_signal_sample_aux_abs, y_aux); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_storeu_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } lv_16sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; lv_16sc_t VE_code_value; lv_16sc_t E_code_value; lv_16sc_t P_code_value; lv_16sc_t L_code_value; lv_16sc_t VL_code_value; lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points; ++i) { VE_code_value = VE_code[i]; E_code_value = E_code[i]; P_code_value = P_code[i]; L_code_value = L_code[i]; VL_code_value = VL_code[i]; if(lv_creal(VE_code_value) == -128) { VE_code_value = lv_cmake(-127, lv_cimag(VE_code_value)); } if(lv_cimag(VE_code_value) == -128) { VE_code_value = lv_cmake(lv_creal(VE_code_value), -127); } if(lv_creal(E_code_value) == -128) { E_code_value = lv_cmake(-127, lv_cimag(E_code_value)); } if(lv_cimag(E_code_value) == -128) { E_code_value = lv_cmake(lv_creal(E_code_value), -127); } if(lv_creal(P_code_value) == -128) { P_code_value = lv_cmake(-127, lv_cimag(P_code_value)); } if(lv_cimag(P_code_value) == -128) { P_code_value = lv_cmake(lv_creal(P_code_value), -127); } if(lv_creal(L_code_value) == -128) { L_code_value = lv_cmake(-127, lv_cimag(L_code_value)); } if(lv_cimag(L_code_value) == -128) { L_code_value = lv_cmake(lv_creal(L_code_value), -127); } if(lv_creal(VL_code_value) == -128) { VL_code_value = lv_cmake(-127, lv_cimag(VL_code_value)); } if(lv_cimag(VL_code_value) == -128) { VL_code_value = lv_cmake(lv_creal(VL_code_value), -127); } //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get very early, early, prompt, late and very late values for each *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code_value); *E_out += (lv_32fc_t) (bb_signal_sample * E_code_value); *P_out += (lv_32fc_t) (bb_signal_sample * P_code_value); *L_out += (lv_32fc_t) (bb_signal_sample * L_code_value); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code_value); } } #endif /* LV_HAVE_GENERIC */ //#ifdef LV_HAVE_GENERIC //#include //#include //#include // //#ifndef MAX //#define MAX(a,b) ((a) > (b) ? a : b) //#endif // //#ifndef MIN //#define MIN(a,b) ((a) < (b) ? a : b) //#endif // ///*! // \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation // \param input The input signal input // \param carrier The carrier signal input // \param VE_code Very Early PRN code replica input // \param E_code Early PRN code replica input // \param P_code Prompt PRN code replica input // \param L_code Late PRN code replica input // \param VL_code Very Late PRN code replica input // \param VE_out Very Early correlation output // \param E_out Early correlation output // \param P_out Prompt correlation output // \param L_out Late correlation output // \param VL_out Very Late correlation output // \param num_points The number of complex values in vectors // */ //static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) //{ // *VE_out = 0; // *E_out = 0; // *P_out = 0; // *L_out = 0; // *VL_out = 0; // // lv_16sc_t VE_out16; // lv_16sc_t E_out16; // lv_16sc_t P_out16; // lv_16sc_t L_out16; // lv_16sc_t VL_out16; // // int32_t max = 32767; // int32_t min = -32768; // // int16_t real_real; // int16_t imag_imag; // int16_t real_imag; // int16_t imag_real; // int32_t out_real_32; // int32_t out_imag_32; // int16_t out_real_16; // int16_t out_imag_16; // int16_t aux1; // int16_t aux2; // // // lv_8sc_t bb_signal_sample = lv_cmake(0, 0); // // // perform very early, Early, Prompt, Late and very late correlation // for(int i=0; i < num_points; ++i) // { // //Perform the carrier wipe-off // bb_signal_sample = input[i] * carrier[i]; // // aux1 = (int16_t)lv_creal(bb_signal_sample); // aux2 = (int16_t)lv_creal(VE_code[i]); // real_real = aux1*aux2; // aux1 = (int16_t)lv_cimag(bb_signal_sample); // aux2 = (int16_t)lv_cimag(VE_code[i]); // imag_imag = aux1*aux2; // aux1 = (int16_t)lv_creal(bb_signal_sample); // aux2 = (int16_t)lv_cimag(VE_code[i]); // real_imag = aux1*aux2; // aux1 = (int16_t)lv_cimag(bb_signal_sample); // aux2 = (int16_t)lv_creal(VE_code[i]); // imag_real = aux1*aux2; // out_real_32 = (int32_t)real_real - (int32_t)imag_imag; // out_imag_32 = (int32_t)real_imag + (int32_t)imag_real; // out_real_16 = MIN(MAX(out_real_32, min), max); // out_imag_16 = MIN(MAX(out_imag_32, min), max); // VE_out16 = lv_cmake(out_real_16, out_imag_16); // // // // if(lv_creal(L_code[i]) == -128) // { // int8_t* L_pointer = (int8_t*)&L_code[i]; // *L_pointer = -127; // } // if(lv_cimag(L_code[i]) == -128) // { // int8_t* L_pointer = (int8_t*)&L_code[i]; // L_pointer++; // *L_pointer = -127; // } // aux1 = (int16_t)lv_creal(bb_signal_sample); // aux2 = (int16_t)lv_creal(L_code[i]); // real_real = aux1*aux2; // aux1 = (int16_t)lv_cimag(bb_signal_sample); // aux2 = (int16_t)lv_cimag(L_code[i]); // imag_imag = aux1*aux2; // aux1 = (int16_t)lv_creal(bb_signal_sample); // aux2 = (int16_t)lv_cimag(L_code[i]); // real_imag = aux1*aux2; // aux1 = (int16_t)lv_cimag(bb_signal_sample); // aux2 = (int16_t)lv_creal(L_code[i]); // imag_real = aux1*aux2; // out_real_32 = (int32_t)real_real - (int32_t)imag_imag; // out_imag_32 = (int32_t)real_imag + (int32_t)imag_real; // out_real_16 = MIN(MAX(out_real_32, min), max); // out_imag_16 = MIN(MAX(out_imag_32, min), max); // L_out16 = lv_cmake(out_real_16, out_imag_16); // // E_out16 = (lv_16sc_t)bb_signal_sample * (lv_16sc_t)E_code[i]; // P_out16 = (lv_16sc_t)bb_signal_sample * (lv_16sc_t)P_code[i]; // VL_out16 = (lv_16sc_t)bb_signal_sample * (lv_16sc_t)VL_code[i]; // // // *VE_out += (lv_32fc_t) VE_out16; // *E_out += (lv_32fc_t) E_out16; // *P_out += (lv_32fc_t) P_out16; // *L_out += (lv_32fc_t) L_out16; // *VL_out += (lv_32fc_t) VL_out16; // // //error en la parte real de L con 32 muestras // //*L_out = lv_cmake(12, 12); // } //} // //#endif /* LV_HAVE_GENERIC */ //#ifdef LV_HAVE_GENERIC ///*! // \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation // \param input The input signal input // \param carrier The carrier signal input // \param VE_code Very Early PRN code replica input // \param E_code Early PRN code replica input // \param P_code Prompt PRN code replica input // \param L_code Late PRN code replica input // \param VL_code Very Late PRN code replica input // \param VE_out Very Early correlation output // \param E_out Early correlation output // \param P_out Prompt correlation output // \param L_out Late correlation output // \param VL_out Very Late correlation output // \param num_points The number of complex values in vectors // */ //static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) //{ // lv_8sc_t bb_signal_sample; // // bb_signal_sample = lv_cmake(0, 0); // // *VE_out = 0; // *E_out = 0; // *P_out = 0; // *L_out = 0; // *VL_out = 0; // // perform very early, Early, Prompt, Late and very late correlation // for(int i=0; i < num_points; ++i) // { // //Perform the carrier wipe-off // bb_signal_sample = input[i] * carrier[i]; // // *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code[i]); // *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); // *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); // *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); // *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code[i]); // } //} // //#endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_H */ ././@LongLink0000644000000000000000000000017600000000000011607 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_s8ic_multiply_8ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002323412576764164033741 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_s8ic_multiply_8ic.h * \brief Volk protokernel: multiplies a group of 16 bits vectors by one constant vector * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that multiplies a group of 16 bits vectors * (8 bits the real part and 8 bits the imaginary part) by one constant vector * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8ic_s8ic_multiply_8ic_u_H #define INCLUDED_volk_gnsssdr_8ic_s8ic_multiply_8ic_u_H #include #include #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Multiplies the input vector by a scalar and stores the results in the third vector \param cVector The vector where the results will be stored \param aVector The vector to be multiplied \param scalar The complex scalar to multiply aVector \param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector */ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); y = _mm_set1_epi16 (*(short*)&scalar); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_lddqu_si128((__m128i*)a); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); realc = _mm_and_si128 (realc, mult1); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imagc = _mm_and_si128 (imagc, mult1); imagc = _mm_slli_si128 (imagc, 1); totalc = _mm_or_si128 (realc, imagc); _mm_storeu_si128((__m128i*)c, totalc); a += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = (*a++) * scalar; } } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the input vector by a scalar and stores the results in the third vector \param cVector The vector where the results will be stored \param aVector The vector to be multiplied \param scalar The complex scalar to multiply aVector \param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector */ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) { /*lv_8sc_t* cPtr = cVector; const lv_8sc_t* aPtr = aVector; for (int i = 0; i= 8) { *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; number -= 8; } // clean up any remaining while (number-- > 0) *cPtr++ = *aPtr++ * scalar; } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_x2_multiply_32fc_u_H */ #ifndef INCLUDED_volk_gnsssdr_8ic_s8ic_multiply_8ic_a_H #define INCLUDED_volk_gnsssdr_8ic_s8ic_multiply_8ic_a_H #include #include #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Multiplies the input vector by a scalar and stores the results in the third vector \param cVector The vector where the results will be stored \param aVector The vector to be multiplied \param scalar The complex scalar to multiply aVector \param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector */ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; lv_8sc_t* c = cVector; const lv_8sc_t* a = aVector; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); y = _mm_set1_epi16 (*(short*)&scalar); imagy = _mm_srli_si128 (y, 1); imagy = _mm_and_si128 (imagy, mult1); realy = _mm_and_si128 (y, mult1); for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_load_si128((__m128i*)a); imagx = _mm_srli_si128 (x, 1); imagx = _mm_and_si128 (imagx, mult1); realx = _mm_and_si128 (x, mult1); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); realc = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); realc = _mm_and_si128 (realc, mult1); imagc = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); imagc = _mm_and_si128 (imagc, mult1); imagc = _mm_slli_si128 (imagc, 1); totalc = _mm_or_si128 (realc, imagc); _mm_store_si128((__m128i*)c, totalc); a += 8; c += 8; } for (unsigned int i = 0; i<(num_points % 8); ++i) { *c++ = (*a++) * scalar; } } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the input vector by a scalar and stores the results in the third vector \param cVector The vector where the results will be stored \param aVector The vector to be multiplied \param scalar The complex scalar to multiply aVector \param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector */ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) { /*lv_8sc_t* cPtr = cVector; const lv_8sc_t* aPtr = aVector; for (int i = 0; i= 8){ *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; *cPtr++ = (*aPtr++) * scalar; number -= 8; } // clean up any remaining while (number-- > 0) *cPtr++ = *aPtr++ * scalar; } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Multiplies the input vector by a scalar and stores the results in the third vector \param cVector The vector where the results will be stored \param aVector The vector to be multiplied \param scalar The complex scalar to multiply aVector \param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector */ extern void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, const char scalarreal, const char scalarimag, unsigned int num_points); static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) { volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl(cVector, aVector, lv_creal(scalar), lv_cimag(scalar), num_points); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_32fc_x2_multiply_32fc_a_H */ ././@LongLink0000644000000000000000000000020500000000000011600 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000007106412576764164033745 0ustar carlescarles/*! * \file volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 32 bits vectors and returns float32 values. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Very Early, Early, Prompt, Late and Very Late correlation with 32 bits vectors (16 bits the * real part and 16 bits the imaginary part) and accumulates into float32 values, returning them: * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 32 bits vectors) It returns the input * signal in base band (BB) * - Very Early values are calculated by multiplying the input signal in BB by the * very early code (multiplication of 32 bits vectors), converting that to float32 and accumulating the results * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 32 bits vectors), converting that to float32 and accumulating the results * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 32 bits vectors), converting that to float32 and accumulating the results * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 32 bits vectors), converting that to float32 and accumulating the results * - Very Late values are calculated by multiplying the input signal in BB by the * very late code (multiplication of 32 bits vectors), converting that to float32 and accumulating the results * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Very Early, Early, Prompt, Late and Very Vate correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* VE_code, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, const lv_16sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_16sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++){ //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_lddqu_si128((__m128i*)input_ptr); y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(x1, x2, realx, imagx) CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get very early values y1 = _mm_lddqu_si128((__m128i*)VE_code_ptr); VE_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)VE_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y1 = _mm_lddqu_si128((__m128i*)VL_code_ptr); VL_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)VL_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; VE_code_ptr += 4; E_code_ptr += 4; P_code_ptr += 4; L_code_ptr += 4; VL_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_storeu_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Very Early, Early, Prompt, Late and Very Vate correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* VE_code, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, const lv_16sc_t* VL_code, unsigned int num_points) { lv_16sc_t bb_signal_sample; lv_16sc_t tmp1; lv_16sc_t tmp2; lv_16sc_t tmp3; lv_16sc_t tmp4; lv_16sc_t tmp5; bb_signal_sample = lv_cmake(0, 0); *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; tmp1 = bb_signal_sample * VE_code[i]; tmp2 = bb_signal_sample * E_code[i]; tmp3 = bb_signal_sample * P_code[i]; tmp4 = bb_signal_sample * L_code[i]; tmp5 = bb_signal_sample * VL_code[i]; // Now get early, late, and prompt values for each *VE_out += (lv_32fc_t)tmp1; *E_out += (lv_32fc_t)tmp2; *P_out += (lv_32fc_t)tmp3; *L_out += (lv_32fc_t)tmp4; *VL_out += (lv_32fc_t)tmp5; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Very Early, Early, Prompt, Late and Very Vate correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_a_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* VE_code, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, const lv_16sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_16sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++){ //Perform the carrier wipe-off x1 = _mm_load_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_load_si128((__m128i*)input_ptr); y1 = _mm_load_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_load_si128((__m128i*)carrier_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(x1, x2, realx, imagx) CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get very early values y1 = _mm_load_si128((__m128i*)VE_code_ptr); VE_code_ptr += 4; y2 = _mm_load_si128((__m128i*)VE_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y1 = _mm_load_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_load_si128((__m128i*)E_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_load_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_load_si128((__m128i*)P_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_load_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_load_si128((__m128i*)L_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y1 = _mm_load_si128((__m128i*)VL_code_ptr); VL_code_ptr += 4; y2 = _mm_load_si128((__m128i*)VL_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; VE_code_ptr += 4; E_code_ptr += 4; P_code_ptr += 4; L_code_ptr += 4; VL_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_store_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Very Early, Early, Prompt, Late and Very Vate correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_a_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* VE_code, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, const lv_16sc_t* VL_code, unsigned int num_points) { lv_16sc_t bb_signal_sample; lv_16sc_t tmp1; lv_16sc_t tmp2; lv_16sc_t tmp3; lv_16sc_t tmp4; lv_16sc_t tmp5; bb_signal_sample = lv_cmake(0, 0); *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; tmp1 = bb_signal_sample * VE_code[i]; tmp2 = bb_signal_sample * E_code[i]; tmp3 = bb_signal_sample * P_code[i]; tmp4 = bb_signal_sample * L_code[i]; tmp5 = bb_signal_sample * VL_code[i]; // Now get early, late, and prompt values for each *VE_out += (lv_32fc_t)tmp1; *E_out += (lv_32fc_t)tmp2; *P_out += (lv_32fc_t)tmp3; *L_out += (lv_32fc_t)tmp4; *VL_out += (lv_32fc_t)tmp5; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5_a_H */ ././@LongLink0000644000000000000000000000017100000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_convert_8ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000755000175000017500000002101212576764164033734 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_convert_8ic.h * \brief Volk protokernel: converts float32 complex values to 8 integer complex values taking care of overflow * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_32fc_convert_8ic_u_H #define INCLUDED_volk_gnsssdr_32fc_convert_8ic_u_H #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_8ic_u_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) { const unsigned int sse_iters = num_points/8; float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; float min_val = -128; float max_val = 127; __m128 inputVal1, inputVal2, inputVal3, inputVal4; __m128i intInputVal1, intInputVal2, intInputVal3, intInputVal4; __m128i int8InputVal; __m128 ret1, ret2, ret3, ret4; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++) { inputVal1 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal3 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal4 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); ret3 = _mm_max_ps(_mm_min_ps(inputVal3, vmax_val), vmin_val); ret4 = _mm_max_ps(_mm_min_ps(inputVal4, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal3 = _mm_cvtps_epi32(ret3); intInputVal4 = _mm_cvtps_epi32(ret4); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); intInputVal2 = _mm_packs_epi32(intInputVal3, intInputVal4); int8InputVal = _mm_packs_epi16(intInputVal1, intInputVal2); _mm_storeu_si128((__m128i*)outputVectorPtr, int8InputVal); outputVectorPtr += 16; } for(unsigned int i = 0; i < (num_points%4)*4; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int8_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_8ic_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) { float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; float min_val = -128; float max_val = 127; for(unsigned int i = 0; i < num_points*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int8_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_convert_8ic_u_H */ #ifndef INCLUDED_volk_gnsssdr_32fc_convert_8ic_a_H #define INCLUDED_volk_gnsssdr_32fc_convert_8ic_a_H #include #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_8ic_a_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) { const unsigned int sse_iters = num_points/8; float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; float min_val = -128; float max_val = 127; __m128 inputVal1, inputVal2, inputVal3, inputVal4; __m128i intInputVal1, intInputVal2, intInputVal3, intInputVal4; __m128i int8InputVal; __m128 ret1, ret2, ret3, ret4; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++) { inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal3 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal4 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); ret3 = _mm_max_ps(_mm_min_ps(inputVal3, vmax_val), vmin_val); ret4 = _mm_max_ps(_mm_min_ps(inputVal4, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal3 = _mm_cvtps_epi32(ret3); intInputVal4 = _mm_cvtps_epi32(ret4); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); intInputVal2 = _mm_packs_epi32(intInputVal3, intInputVal4); int8InputVal = _mm_packs_epi16(intInputVal1, intInputVal2); _mm_store_si128((__m128i*)outputVectorPtr, int8InputVal); outputVectorPtr += 16; } for(unsigned int i = 0; i < (num_points%4)*4; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int8_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 16 integer vector (8 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_8ic_a_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) { float* inputVectorPtr = (float*)inputVector; int8_t* outputVectorPtr = (int8_t*)outputVector; float min_val = -128; float max_val = 127; for(unsigned int i = 0; i < num_points*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int8_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_convert_8ic_a_H */ ././@LongLink0000644000000000000000000000017200000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8u_x2_multiply_8u.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002003512576764164033735 0ustar carlescarles/*! * \file volk_gnsssdr_8u_x2_multiply_8u.h * \brief Volk protokernel: multiplies unsigned char values * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that multiplies unsigned char values (8 bits data) * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_8u_x2_multiply_8u_u_H #define INCLUDED_volk_gnsssdr_8u_x2_multiply_8u_u_H #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Multiplies the two input unsigned char values and stores their results in the third unsigned char \param cChar The unsigned char where the results will be stored \param aChar One of the unsigned char to be multiplied \param bChar One of the unsigned char to be multiplied \param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar */ static inline void volk_gnsssdr_8u_x2_multiply_8u_u_sse3(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; __m128i x, y, x1, x2, y1, y2, mult1, x1_mult_y1, x2_mult_y2, tmp, tmp1, tmp2, totalc; unsigned char* c = cChar; const unsigned char* a = aChar; const unsigned char* b = bChar; for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_lddqu_si128((__m128i*)a); y = _mm_lddqu_si128((__m128i*)b); mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); x1 = _mm_srli_si128 (x, 1); x1 = _mm_and_si128 (x1, mult1); x2 = _mm_and_si128 (x, mult1); y1 = _mm_srli_si128 (y, 1); y1 = _mm_and_si128 (y1, mult1); y2 = _mm_and_si128 (y, mult1); x1_mult_y1 = _mm_mullo_epi16 (x1, y1); x2_mult_y2 = _mm_mullo_epi16 (x2, y2); tmp = _mm_and_si128 (x1_mult_y1, mult1); tmp1 = _mm_slli_si128 (tmp, 1); tmp2 = _mm_and_si128 (x2_mult_y2, mult1); totalc = _mm_or_si128 (tmp1, tmp2); _mm_storeu_si128((__m128i*)c, totalc); a += 16; b += 16; c += 16; } for (unsigned int i = 0; i<(num_points % 16); ++i) { *c++ = (*a++) * (*b++); } } #endif /* LV_HAVE_SSE3 */ #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the two input unsigned char values and stores their results in the third unisgned char \param cChar The unsigned char where the results will be stored \param aChar One of the unsigned char to be multiplied \param bChar One of the unsigned char to be multiplied \param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar */ static inline void volk_gnsssdr_8u_x2_multiply_8u_generic(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points) { unsigned char* cPtr = cChar; const unsigned char* aPtr = aChar; const unsigned char* bPtr = bChar; for(unsigned int number = 0; number < num_points; number++) { *cPtr++ = (*aPtr++) * (*bPtr++); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_8u_x2_multiply_8u_u_H */ #ifndef INCLUDED_volk_gnsssdr_8u_x2_multiply_8u_a_H #define INCLUDED_volk_gnsssdr_8u_x2_multiply_8u_a_H #include #include #ifdef LV_HAVE_SSE3 #include /*! \brief Multiplies the two input unsigned char values and stores their results in the third unisgned char \param cChar The unsigned char where the results will be stored \param aChar One of the unsigned char to be multiplied \param bChar One of the unsigned char to be multiplied \param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar */ static inline void volk_gnsssdr_8u_x2_multiply_8u_a_sse3(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points) { const unsigned int sse_iters = num_points / 16; __m128i x, y, x1, x2, y1, y2, mult1, x1_mult_y1, x2_mult_y2, tmp, tmp1, tmp2, totalc; unsigned char* c = cChar; const unsigned char* a = aChar; const unsigned char* b = bChar; for(unsigned int number = 0;number < sse_iters; number++) { x = _mm_load_si128((__m128i*)a); y = _mm_load_si128((__m128i*)b); mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); x1 = _mm_srli_si128 (x, 1); x1 = _mm_and_si128 (x1, mult1); x2 = _mm_and_si128 (x, mult1); y1 = _mm_srli_si128 (y, 1); y1 = _mm_and_si128 (y1, mult1); y2 = _mm_and_si128 (y, mult1); x1_mult_y1 = _mm_mullo_epi16 (x1, y1); x2_mult_y2 = _mm_mullo_epi16 (x2, y2); tmp = _mm_and_si128 (x1_mult_y1, mult1); tmp1 = _mm_slli_si128 (tmp, 1); tmp2 = _mm_and_si128 (x2_mult_y2, mult1); totalc = _mm_or_si128 (tmp1, tmp2); _mm_store_si128((__m128i*)c, totalc); a += 16; b += 16; c += 16; } for (unsigned int i = 0; i<(num_points % 16); ++i) { *c++ = (*a++) * (*b++); } } #endif /* LV_HAVE_SSE */ #ifdef LV_HAVE_GENERIC /*! \brief Multiplies the two input unsigned char values and stores their results in the third unisgned char \param cChar The unsigned char where the results will be stored \param aChar One of the unsigned char to be multiplied \param bChar One of the unsigned char to be multiplied \param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar */ static inline void volk_gnsssdr_8u_x2_multiply_8u_a_generic(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points) { unsigned char* cPtr = cChar; const unsigned char* aPtr = aChar; const unsigned char* bPtr = bChar; for(unsigned int number = 0; number < num_points; number++) { *cPtr++ = (*aPtr++) * (*bPtr++); } } #endif /* LV_HAVE_GENERIC */ #ifdef LV_HAVE_ORC /*! \brief Multiplies the two input unsigned char values and stores their results in the third unisgned char \param cChar The unsigned char where the results will be stored \param aChar One of the unsigned char to be multiplied \param bChar One of the unsigned char to be multiplied \param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar */ extern void volk_gnsssdr_8u_x2_multiply_8u_a_orc_impl(unsigned char* cVector, const unsigned char* aVector, const unsigned char* bVector, unsigned int num_points); static inline void volk_gnsssdr_8u_x2_multiply_8u_u_orc(unsigned char* cVector, const unsigned char* aVector, const unsigned char* bVector, unsigned int num_points) { volk_gnsssdr_8u_x2_multiply_8u_a_orc_impl(cVector, aVector, bVector, num_points); } #endif /* LV_HAVE_ORC */ #endif /* INCLUDED_volk_gnsssdr_8u_x2_multiply_8u_a_H */ ././@LongLink0000644000000000000000000000021300000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000007043312576764164033744 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors, and accumulates the results into float32. This protokernel is called "unsafe" because it does NOT check when the inputs have a -128 value. If you introduce a -128 value the protokernel will NOT operate properly (generic implementation will have different results than volk implementation). In order to avoid overflow, "input" and "carrier" must be values between —7 and 7 and "XX_code inputs" must be values between —127 and 127. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Very early, Early, Prompt, Late and very late correlation with 16 bits vectors (8 bits the * real part and 8 bits the imaginary part), and accumulates the result * in 32 bits single point values, returning float32 values: * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 16 bits vectors) It returns the input * signal in base band (BB) * - Very Early values are calculated by multiplying the input signal in BB by the * very early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Very Late values are calculated by multiplying the input signal in BB by the * very late code (multiplication of 16 bits vectors), accumulating the results into float32 values * * ------------------------------------------------------------------------- * Bits analysis * * input = 8 bits * carrier = 8 bits * XX_code = 8 bits * XX_out16 = 16 bits * bb_signal_sample = 8 bits * * bb_signal_sample = input*carrier -> 17 bits limited to 8 bits = input and carrier must be values between —7 and 7 to avoid overflow (3 bits) * * XX_out16 = XX_code*bb_signal_sample -> 17 bits limited to 16 bits = XX_code must be values between —127 and 127 to avoid overflow (7 bits) * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_u_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); __m128i rearrange_sequence = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); __m128i mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, x, check_sign_sequence, rearrange_sequence, y_aux, x_abs, real_output, imag_output) imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_storeu_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } lv_16sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get very early, early, prompt, late and very late values for each *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code[i]); *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, x_abs, y, y_aux, bb_signal_sample_aux, bb_signal_sample_aux_abs;; __m128i real_output, imag_output; __m128 real_VE_code_acc, imag_VE_code_acc, real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc, real_VL_code_acc, imag_VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 real_output_ps, imag_output_ps; __m128i check_sign_sequence = _mm_set_epi8 (255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1); __m128i rearrange_sequence = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1); __m128i mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; float VE_out_real = 0; float VE_out_imag = 0; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; float VL_out_real = 0; float VL_out_imag = 0; real_VE_code_acc = _mm_setzero_ps(); imag_VE_code_acc = _mm_setzero_ps(); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); real_VL_code_acc = _mm_setzero_ps(); imag_VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); x_abs = _mm_abs_epi8 (x); CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, x, check_sign_sequence, rearrange_sequence, y_aux, x_abs, real_output, imag_output) imag_output = _mm_slli_si128 (imag_output, 1); bb_signal_sample_aux = _mm_blendv_epi8 (imag_output, real_output, mult1); bb_signal_sample_aux_abs = _mm_abs_epi8 (bb_signal_sample_aux); //Get very early values y = _mm_load_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VE_code_acc = _mm_add_ps (real_VE_code_acc, real_output_ps); imag_VE_code_acc = _mm_add_ps (imag_VE_code_acc, imag_output_ps); //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); //Get very late values y = _mm_load_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_VL_code_acc = _mm_add_ps (real_VL_code_acc, real_output_ps); imag_VL_code_acc = _mm_add_ps (imag_VL_code_acc, imag_output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) float real_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VE_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_VL_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_VL_dotProductVector[4]; _mm_store_ps((float*)real_VE_dotProductVector,real_VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_VE_dotProductVector,imag_VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)real_VL_dotProductVector,real_VL_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)imag_VL_dotProductVector,imag_VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { VE_out_real += real_VE_dotProductVector[i]; VE_out_imag += imag_VE_dotProductVector[i]; E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; VL_out_real += real_VL_dotProductVector[i]; VL_out_imag += imag_VL_dotProductVector[i]; } *VE_out_ptr = lv_cmake(VE_out_real, VE_out_imag); *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); *VL_out_ptr = lv_cmake(VL_out_real, VL_out_imag); } lv_16sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * ((lv_16sc_t)*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get very early, early, prompt, late and very late values for each *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code[i]); *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_H */ ././@LongLink0000644000000000000000000000021200000000000011576 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_s32f_x2_update_local_carrier_32fc.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000010303312576764164033735 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc * \brief Volk protokernel: replaces the tracking function for update_local_carrier. Algorithm by Julien Pommier and Giovanni Garberoglio, modified by Andres Cecilia. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that replaces the tracking function for update_local_carrier. Algorithm by Julien Pommier and Giovanni Garberoglio, modified by Andres Cecilia. * * ------------------------------------------------------------------------- * * Copyright (C) 2007 Julien Pommier * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * * (this is the zlib license) * * ------------------------------------------------------------------------- * * Copyright (C) 2012 Giovanni Garberoglio * Interdisciplinary Laboratory for Computational Science (LISC) * Fondazione Bruno Kessler and University of Trento * via Sommarive, 18 * I-38123 Trento (Italy) * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc_u_H #define INCLUDED_volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc_u_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_avx(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points) { // float* pointer1 = (float*)&phase_rad_init; // *pointer1 = 0; // float* pointer2 = (float*)&phase_step_rad; // *pointer2 = 0.5; const unsigned int sse_iters = num_points / 8; __m256 _ps256_minus_cephes_DP1 = _mm256_set1_ps(-0.78515625f); __m256 _ps256_minus_cephes_DP2 = _mm256_set1_ps(-2.4187564849853515625e-4f); __m256 _ps256_minus_cephes_DP3 = _mm256_set1_ps(-3.77489497744594108e-8f); __m256 _ps256_sign_mask = _mm256_set1_ps(-0.f); __m128i _pi32avx_1 = _mm_set1_epi32(1); __m128i _pi32avx_inv1 = _mm_set1_epi32(~1); __m128i _pi32avx_2 = _mm_set1_epi32(2); __m128i _pi32avx_4 = _mm_set1_epi32(4); __m256 _ps256_cephes_FOPI = _mm256_set1_ps(1.27323954473516f); // 4 / PI __m256 _ps256_sincof_p0 = _mm256_set1_ps(-1.9515295891E-4f); __m256 _ps256_sincof_p1 = _mm256_set1_ps( 8.3321608736E-3f); __m256 _ps256_sincof_p2 = _mm256_set1_ps(-1.6666654611E-1f); __m256 _ps256_coscof_p0 = _mm256_set1_ps( 2.443315711809948E-005f); __m256 _ps256_coscof_p1 = _mm256_set1_ps(-1.388731625493765E-003f); __m256 _ps256_coscof_p2 = _mm256_set1_ps( 4.166664568298827E-002f); __m256 _ps256_1 = _mm256_set1_ps(1.f); __m256 _ps256_0p5 = _mm256_set1_ps(0.5f); __m256 phase_step_rad_array = _mm256_set1_ps(8*phase_step_rad); __m256 phase_rad_array, x, s, c, swap_sign_bit_sin, sign_bit_cos, poly_mask, z, tmp, y, y2, ysin1, ysin2; __m256 xmm1, xmm2, xmm3, sign_bit_sin; __m256i imm0, imm2, imm4, tmp256i; __m128i imm0_1, imm0_2, imm2_1, imm2_2, imm4_1, imm4_2; __VOLK_ATTR_ALIGNED(32) float sin_value[8]; __VOLK_ATTR_ALIGNED(32) float cos_value[8]; phase_rad_array = _mm256_set_ps (phase_rad_init+7*phase_step_rad, phase_rad_init+6*phase_step_rad, phase_rad_init+5*phase_step_rad, phase_rad_init+4*phase_step_rad, phase_rad_init+3*phase_step_rad, phase_rad_init+2*phase_step_rad, phase_rad_init+phase_step_rad, phase_rad_init); for(int i = 0; i < sse_iters; i++) { x = phase_rad_array; /* extract the sign bit (upper one) */ sign_bit_sin = _mm256_and_ps(x, _ps256_sign_mask); /* take the absolute value */ x = _mm256_xor_ps(x, sign_bit_sin); /* scale by 4/Pi */ y = _mm256_mul_ps(x, _ps256_cephes_FOPI); /* we use SSE2 routines to perform the integer ops */ //COPY_IMM_TO_XMM(_mm256_cvttps_epi32(y),imm2_1,imm2_2); tmp256i = _mm256_cvttps_epi32(y); imm2_1 = _mm256_extractf128_si256 (tmp256i, 0); imm2_2 = _mm256_extractf128_si256 (tmp256i, 1); imm2_1 = _mm_add_epi32(imm2_1, _pi32avx_1); imm2_2 = _mm_add_epi32(imm2_2, _pi32avx_1); imm2_1 = _mm_and_si128(imm2_1, _pi32avx_inv1); imm2_2 = _mm_and_si128(imm2_2, _pi32avx_inv1); //COPY_XMM_TO_IMM(imm2_1,imm2_2,imm2); //_mm256_set_m128i not defined in some versions of immintrin.h //imm2 = _mm256_set_m128i (imm2_2, imm2_1); imm2 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm2_1),(imm2_2),1); y = _mm256_cvtepi32_ps(imm2); imm4_1 = imm2_1; imm4_2 = imm2_2; imm0_1 = _mm_and_si128(imm2_1, _pi32avx_4); imm0_2 = _mm_and_si128(imm2_2, _pi32avx_4); imm0_1 = _mm_slli_epi32(imm0_1, 29); imm0_2 = _mm_slli_epi32(imm0_2, 29); //COPY_XMM_TO_IMM(imm0_1, imm0_2, imm0); //_mm256_set_m128i not defined in some versions of immintrin.h //imm0 = _mm256_set_m128i (imm0_2, imm0_1); imm0 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm0_1),(imm0_2),1); imm2_1 = _mm_and_si128(imm2_1, _pi32avx_2); imm2_2 = _mm_and_si128(imm2_2, _pi32avx_2); imm2_1 = _mm_cmpeq_epi32(imm2_1, _mm_setzero_si128()); imm2_2 = _mm_cmpeq_epi32(imm2_2, _mm_setzero_si128()); //COPY_XMM_TO_IMM(imm2_1, imm2_2, imm2); //_mm256_set_m128i not defined in some versions of immintrin.h //imm2 = _mm256_set_m128i (imm2_2, imm2_1); imm2 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm2_1),(imm2_2),1); swap_sign_bit_sin = _mm256_castsi256_ps(imm0); poly_mask = _mm256_castsi256_ps(imm2); /* The magic pass: "Extended precision modular arithmetic" x = ((x - y * DP1) - y * DP2) - y * DP3; */ xmm1 = _ps256_minus_cephes_DP1; xmm2 = _ps256_minus_cephes_DP2; xmm3 = _ps256_minus_cephes_DP3; xmm1 = _mm256_mul_ps(y, xmm1); xmm2 = _mm256_mul_ps(y, xmm2); xmm3 = _mm256_mul_ps(y, xmm3); x = _mm256_add_ps(x, xmm1); x = _mm256_add_ps(x, xmm2); x = _mm256_add_ps(x, xmm3); imm4_1 = _mm_sub_epi32(imm4_1, _pi32avx_2); imm4_2 = _mm_sub_epi32(imm4_2, _pi32avx_2); imm4_1 = _mm_andnot_si128(imm4_1, _pi32avx_4); imm4_2 = _mm_andnot_si128(imm4_2, _pi32avx_4); imm4_1 = _mm_slli_epi32(imm4_1, 29); imm4_2 = _mm_slli_epi32(imm4_2, 29); //COPY_XMM_TO_IMM(imm4_1, imm4_2, imm4); //_mm256_set_m128i not defined in some versions of immintrin.h //imm4 = _mm256_set_m128i (imm4_2, imm4_1); imm4 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm4_1),(imm4_2),1); sign_bit_cos = _mm256_castsi256_ps(imm4); sign_bit_sin = _mm256_xor_ps(sign_bit_sin, swap_sign_bit_sin); /* Evaluate the first polynom (0 <= x <= Pi/4) */ z = _mm256_mul_ps(x,x); y = _ps256_coscof_p0; y = _mm256_mul_ps(y, z); y = _mm256_add_ps(y, _ps256_coscof_p1); y = _mm256_mul_ps(y, z); y = _mm256_add_ps(y, _ps256_coscof_p2); y = _mm256_mul_ps(y, z); y = _mm256_mul_ps(y, z); tmp = _mm256_mul_ps(z, _ps256_0p5); y = _mm256_sub_ps(y, tmp); y = _mm256_add_ps(y, _ps256_1); /* Evaluate the second polynom (Pi/4 <= x <= 0) */ y2 = _ps256_sincof_p0; y2 = _mm256_mul_ps(y2, z); y2 = _mm256_add_ps(y2, _ps256_sincof_p1); y2 = _mm256_mul_ps(y2, z); y2 = _mm256_add_ps(y2, _ps256_sincof_p2); y2 = _mm256_mul_ps(y2, z); y2 = _mm256_mul_ps(y2, x); y2 = _mm256_add_ps(y2, x); /* select the correct result from the two polynoms */ xmm3 = poly_mask; ysin2 = _mm256_and_ps(xmm3, y2); ysin1 = _mm256_andnot_ps(xmm3, y); y2 = _mm256_sub_ps(y2,ysin2); y = _mm256_sub_ps(y, ysin1); xmm1 = _mm256_add_ps(ysin1,ysin2); xmm2 = _mm256_add_ps(y,y2); /* update the sign */ s = _mm256_xor_ps(xmm1, sign_bit_sin); c = _mm256_xor_ps(xmm2, sign_bit_cos); //GNSS-SDR needs to return -sin s = _mm256_xor_ps(s, _ps256_sign_mask); _mm256_storeu_ps ((float*)sin_value, s); _mm256_storeu_ps ((float*)cos_value, c); for(int i = 0; i < 8; i++) { d_carr_sign[i] = lv_cmake(cos_value[i], sin_value[i]); } d_carr_sign += 8; phase_rad_array = _mm256_add_ps (phase_rad_array, phase_step_rad_array); } if (num_points%8!=0) { __VOLK_ATTR_ALIGNED(32) float phase_rad_store[8]; _mm256_storeu_ps ((float*)phase_rad_store, phase_rad_array); float phase_rad = phase_rad_store[0]; for(int i = 0; i < num_points%8; i++) { *d_carr_sign = lv_cmake(cos(phase_rad), -sin(phase_rad)); d_carr_sign++; phase_rad += phase_step_rad; } } } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSE2 #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_sse2(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points) { // float* pointer1 = (float*)&phase_rad_init; // *pointer1 = 0; // float* pointer2 = (float*)&phase_step_rad; // *pointer2 = 0.5; const unsigned int sse_iters = num_points / 4; __m128 _ps_minus_cephes_DP1 = _mm_set1_ps(-0.78515625f); __m128 _ps_minus_cephes_DP2 = _mm_set1_ps(-2.4187564849853515625e-4f); __m128 _ps_minus_cephes_DP3 = _mm_set1_ps(-3.77489497744594108e-8f); __m128 _ps_sign_mask = _mm_set1_ps(-0.f); __m128i _pi32_1 = _mm_set1_epi32(1); __m128i _pi32_inv1 = _mm_set1_epi32(~1); __m128i _pi32_2 = _mm_set1_epi32(2); __m128i _pi32_4 = _mm_set1_epi32(4); __m128 _ps_cephes_FOPI = _mm_set1_ps(1.27323954473516f); // 4 / PI __m128 _ps_sincof_p0 = _mm_set1_ps(-1.9515295891E-4f); __m128 _ps_sincof_p1 = _mm_set1_ps( 8.3321608736E-3f); __m128 _ps_sincof_p2 = _mm_set1_ps(-1.6666654611E-1f); __m128 _ps_coscof_p0 = _mm_set1_ps( 2.443315711809948E-005f); __m128 _ps_coscof_p1 = _mm_set1_ps(-1.388731625493765E-003f); __m128 _ps_coscof_p2 = _mm_set1_ps( 4.166664568298827E-002f); __m128 _ps_1 = _mm_set1_ps(1.f); __m128 _ps_0p5 = _mm_set1_ps(0.5f); __m128 phase_step_rad_array = _mm_set1_ps(4*phase_step_rad); __m128 phase_rad_array, x, s, c, swap_sign_bit_sin, sign_bit_cos, poly_mask, z, tmp, y, y2, ysin1, ysin2; __m128 xmm1, xmm2, xmm3, sign_bit_sin; __m128i emm0, emm2, emm4; __VOLK_ATTR_ALIGNED(16) float sin_value[4]; __VOLK_ATTR_ALIGNED(16) float cos_value[4]; phase_rad_array = _mm_set_ps (phase_rad_init+3*phase_step_rad, phase_rad_init+2*phase_step_rad, phase_rad_init+phase_step_rad, phase_rad_init); for(unsigned int i = 0; i < sse_iters; i++) { x = phase_rad_array; /* extract the sign bit (upper one) */ sign_bit_sin = _mm_and_ps(x, _ps_sign_mask); /* take the absolute value */ x = _mm_xor_ps(x, sign_bit_sin); /* scale by 4/Pi */ y = _mm_mul_ps(x, _ps_cephes_FOPI); /* store the integer part of y in emm2 */ emm2 = _mm_cvttps_epi32(y); /* j=(j+1) & (~1) (see the cephes sources) */ emm2 = _mm_add_epi32(emm2, _pi32_1); emm2 = _mm_and_si128(emm2, _pi32_inv1); y = _mm_cvtepi32_ps(emm2); emm4 = emm2; /* get the swap sign flag for the sine */ emm0 = _mm_and_si128(emm2, _pi32_4); emm0 = _mm_slli_epi32(emm0, 29); swap_sign_bit_sin = _mm_castsi128_ps(emm0); /* get the polynom selection mask for the sine*/ emm2 = _mm_and_si128(emm2, _pi32_2); emm2 = _mm_cmpeq_epi32(emm2, _mm_setzero_si128()); poly_mask = _mm_castsi128_ps(emm2); /* The magic pass: "Extended precision modular arithmetic" x = ((x - y * DP1) - y * DP2) - y * DP3; */ xmm1 = _mm_mul_ps(y, _ps_minus_cephes_DP1); xmm2 = _mm_mul_ps(y, _ps_minus_cephes_DP2); xmm3 = _mm_mul_ps(y, _ps_minus_cephes_DP3); x = _mm_add_ps(_mm_add_ps(x, xmm1), _mm_add_ps(xmm2, xmm3)); emm4 = _mm_sub_epi32(emm4, _pi32_2); emm4 = _mm_andnot_si128(emm4, _pi32_4); emm4 = _mm_slli_epi32(emm4, 29); sign_bit_cos = _mm_castsi128_ps(emm4); sign_bit_sin = _mm_xor_ps(sign_bit_sin, swap_sign_bit_sin); /* Evaluate the first polynom (0 <= x <= Pi/4) */ z = _mm_mul_ps(x,x); y = _ps_coscof_p0; y = _mm_mul_ps(y, z); y = _mm_add_ps(y, _ps_coscof_p1); y = _mm_mul_ps(y, z); y = _mm_add_ps(y, _ps_coscof_p2); y = _mm_mul_ps(y, _mm_mul_ps(z, z)); tmp = _mm_mul_ps(z, _ps_0p5); y = _mm_sub_ps(y, tmp); y = _mm_add_ps(y, _ps_1); /* Evaluate the second polynom (Pi/4 <= x <= 0) */ y2 = _ps_sincof_p0; y2 = _mm_mul_ps(y2, z); y2 = _mm_add_ps(y2, _ps_sincof_p1); y2 = _mm_mul_ps(y2, z); y2 = _mm_add_ps(y2, _ps_sincof_p2); y2 = _mm_mul_ps(y2, _mm_mul_ps(z, x)); y2 = _mm_add_ps(y2, x); /* select the correct result from the two polynoms */ xmm3 = poly_mask; ysin2 = _mm_and_ps(xmm3, y2); ysin1 = _mm_andnot_ps(xmm3, y); y2 = _mm_sub_ps(y2,ysin2); y = _mm_sub_ps(y, ysin1); xmm1 = _mm_add_ps(ysin1,ysin2); xmm2 = _mm_add_ps(y,y2); /* update the sign */ s = _mm_xor_ps(xmm1, sign_bit_sin); c = _mm_xor_ps(xmm2, sign_bit_cos); //GNSS-SDR needs to return -sin s = _mm_xor_ps(s, _ps_sign_mask); _mm_storeu_ps ((float*)sin_value, s); _mm_storeu_ps ((float*)cos_value, c); for(unsigned int e = 0; e < 4; e++) { d_carr_sign[e] = lv_cmake(cos_value[e], sin_value[e]); } d_carr_sign += 4; phase_rad_array = _mm_add_ps (phase_rad_array, phase_step_rad_array); } if (num_points%4!=0) { __VOLK_ATTR_ALIGNED(16) float phase_rad_store[4]; _mm_storeu_ps ((float*)phase_rad_store, phase_rad_array); float phase_rad = phase_rad_store[0]; for(unsigned int i = 0; i < num_points%4; i++) { *d_carr_sign = lv_cmake(cos(phase_rad), -sin(phase_rad)); d_carr_sign++; phase_rad += phase_step_rad; } } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_generic(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points) { // float* pointer1 = (float*)&phase_rad_init; // *pointer1 = 0; // float* pointer2 = (float*)&phase_step_rad; // *pointer2 = 0.5; float phase_rad = phase_rad_init; for(unsigned int i = 0; i < num_points; i++) { *d_carr_sign = lv_cmake(cos(phase_rad), -sin(phase_rad)); d_carr_sign++; phase_rad += phase_step_rad; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc_u_H */ #ifndef INCLUDED_volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc_a_H #define INCLUDED_volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc_a_H #include #include #include #ifdef LV_HAVE_AVX #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_avx(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points) { // float* pointer1 = (float*)&phase_rad_init; // *pointer1 = 0; // float* pointer2 = (float*)&phase_step_rad; // *pointer2 = 0.5; const unsigned int sse_iters = num_points / 8; __m256 _ps256_minus_cephes_DP1 = _mm256_set1_ps(-0.78515625f); __m256 _ps256_minus_cephes_DP2 = _mm256_set1_ps(-2.4187564849853515625e-4f); __m256 _ps256_minus_cephes_DP3 = _mm256_set1_ps(-3.77489497744594108e-8f); __m256 _ps256_sign_mask = _mm256_set1_ps(-0.f); __m128i _pi32avx_1 = _mm_set1_epi32(1); __m128i _pi32avx_inv1 = _mm_set1_epi32(~1); __m128i _pi32avx_2 = _mm_set1_epi32(2); __m128i _pi32avx_4 = _mm_set1_epi32(4); __m256 _ps256_cephes_FOPI = _mm256_set1_ps(1.27323954473516f); // 4 / PI __m256 _ps256_sincof_p0 = _mm256_set1_ps(-1.9515295891E-4f); __m256 _ps256_sincof_p1 = _mm256_set1_ps( 8.3321608736E-3f); __m256 _ps256_sincof_p2 = _mm256_set1_ps(-1.6666654611E-1f); __m256 _ps256_coscof_p0 = _mm256_set1_ps( 2.443315711809948E-005f); __m256 _ps256_coscof_p1 = _mm256_set1_ps(-1.388731625493765E-003f); __m256 _ps256_coscof_p2 = _mm256_set1_ps( 4.166664568298827E-002f); __m256 _ps256_1 = _mm256_set1_ps(1.f); __m256 _ps256_0p5 = _mm256_set1_ps(0.5f); __m256 phase_step_rad_array = _mm256_set1_ps(8*phase_step_rad); __m256 phase_rad_array, x, s, c, swap_sign_bit_sin, sign_bit_cos, poly_mask, z, tmp, y, y2, ysin1, ysin2; __m256 xmm1, xmm2, xmm3, sign_bit_sin; __m256i imm0, imm2, imm4, tmp256i; __m128i imm0_1, imm0_2, imm2_1, imm2_2, imm4_1, imm4_2; __VOLK_ATTR_ALIGNED(32) float sin_value[8]; __VOLK_ATTR_ALIGNED(32) float cos_value[8]; phase_rad_array = _mm256_set_ps (phase_rad_init + 7*phase_step_rad, phase_rad_init + 6*phase_step_rad, phase_rad_init + 5*phase_step_rad, phase_rad_init + 4*phase_step_rad, phase_rad_init + 3*phase_step_rad, phase_rad_init + 2*phase_step_rad, phase_rad_init + phase_step_rad, phase_rad_init); for(int i = 0; i < sse_iters; i++) { x = phase_rad_array; /* extract the sign bit (upper one) */ sign_bit_sin = _mm256_and_ps(x, _ps256_sign_mask); /* take the absolute value */ x = _mm256_xor_ps(x, sign_bit_sin); /* scale by 4/Pi */ y = _mm256_mul_ps(x, _ps256_cephes_FOPI); /* we use SSE2 routines to perform the integer ops */ //COPY_IMM_TO_XMM(_mm256_cvttps_epi32(y),imm2_1,imm2_2); tmp256i = _mm256_cvttps_epi32(y); imm2_1 = _mm256_extractf128_si256 (tmp256i, 0); imm2_2 = _mm256_extractf128_si256 (tmp256i, 1); imm2_1 = _mm_add_epi32(imm2_1, _pi32avx_1); imm2_2 = _mm_add_epi32(imm2_2, _pi32avx_1); imm2_1 = _mm_and_si128(imm2_1, _pi32avx_inv1); imm2_2 = _mm_and_si128(imm2_2, _pi32avx_inv1); //COPY_XMM_TO_IMM(imm2_1,imm2_2,imm2); //_mm256_set_m128i not defined in some versions of immintrin.h //imm2 = _mm256_set_m128i (imm2_2, imm2_1); imm2 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm2_1),(imm2_2),1); y = _mm256_cvtepi32_ps(imm2); imm4_1 = imm2_1; imm4_2 = imm2_2; imm0_1 = _mm_and_si128(imm2_1, _pi32avx_4); imm0_2 = _mm_and_si128(imm2_2, _pi32avx_4); imm0_1 = _mm_slli_epi32(imm0_1, 29); imm0_2 = _mm_slli_epi32(imm0_2, 29); //COPY_XMM_TO_IMM(imm0_1, imm0_2, imm0); //_mm256_set_m128i not defined in some versions of immintrin.h //imm0 = _mm256_set_m128i (imm0_2, imm0_1); imm0 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm0_1),(imm0_2),1); imm2_1 = _mm_and_si128(imm2_1, _pi32avx_2); imm2_2 = _mm_and_si128(imm2_2, _pi32avx_2); imm2_1 = _mm_cmpeq_epi32(imm2_1, _mm_setzero_si128()); imm2_2 = _mm_cmpeq_epi32(imm2_2, _mm_setzero_si128()); //COPY_XMM_TO_IMM(imm2_1, imm2_2, imm2); //_mm256_set_m128i not defined in some versions of immintrin.h //imm2 = _mm256_set_m128i (imm2_2, imm2_1); imm2 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm2_1),(imm2_2),1); swap_sign_bit_sin = _mm256_castsi256_ps(imm0); poly_mask = _mm256_castsi256_ps(imm2); /* The magic pass: "Extended precision modular arithmetic" x = ((x - y * DP1) - y * DP2) - y * DP3; */ xmm1 = _ps256_minus_cephes_DP1; xmm2 = _ps256_minus_cephes_DP2; xmm3 = _ps256_minus_cephes_DP3; xmm1 = _mm256_mul_ps(y, xmm1); xmm2 = _mm256_mul_ps(y, xmm2); xmm3 = _mm256_mul_ps(y, xmm3); x = _mm256_add_ps(x, xmm1); x = _mm256_add_ps(x, xmm2); x = _mm256_add_ps(x, xmm3); imm4_1 = _mm_sub_epi32(imm4_1, _pi32avx_2); imm4_2 = _mm_sub_epi32(imm4_2, _pi32avx_2); imm4_1 = _mm_andnot_si128(imm4_1, _pi32avx_4); imm4_2 = _mm_andnot_si128(imm4_2, _pi32avx_4); imm4_1 = _mm_slli_epi32(imm4_1, 29); imm4_2 = _mm_slli_epi32(imm4_2, 29); //COPY_XMM_TO_IMM(imm4_1, imm4_2, imm4); //_mm256_set_m128i not defined in some versions of immintrin.h //imm4 = _mm256_set_m128i (imm4_2, imm4_1); imm4 = _mm256_insertf128_si256(_mm256_castsi128_si256(imm4_1),(imm4_2),1); sign_bit_cos = _mm256_castsi256_ps(imm4); sign_bit_sin = _mm256_xor_ps(sign_bit_sin, swap_sign_bit_sin); /* Evaluate the first polynom (0 <= x <= Pi/4) */ z = _mm256_mul_ps(x,x); y = _ps256_coscof_p0; y = _mm256_mul_ps(y, z); y = _mm256_add_ps(y, _ps256_coscof_p1); y = _mm256_mul_ps(y, z); y = _mm256_add_ps(y, _ps256_coscof_p2); y = _mm256_mul_ps(y, z); y = _mm256_mul_ps(y, z); tmp = _mm256_mul_ps(z, _ps256_0p5); y = _mm256_sub_ps(y, tmp); y = _mm256_add_ps(y, _ps256_1); /* Evaluate the second polynom (Pi/4 <= x <= 0) */ y2 = _ps256_sincof_p0; y2 = _mm256_mul_ps(y2, z); y2 = _mm256_add_ps(y2, _ps256_sincof_p1); y2 = _mm256_mul_ps(y2, z); y2 = _mm256_add_ps(y2, _ps256_sincof_p2); y2 = _mm256_mul_ps(y2, z); y2 = _mm256_mul_ps(y2, x); y2 = _mm256_add_ps(y2, x); /* select the correct result from the two polynoms */ xmm3 = poly_mask; ysin2 = _mm256_and_ps(xmm3, y2); ysin1 = _mm256_andnot_ps(xmm3, y); y2 = _mm256_sub_ps(y2,ysin2); y = _mm256_sub_ps(y, ysin1); xmm1 = _mm256_add_ps(ysin1,ysin2); xmm2 = _mm256_add_ps(y,y2); /* update the sign */ s = _mm256_xor_ps(xmm1, sign_bit_sin); c = _mm256_xor_ps(xmm2, sign_bit_cos); //GNSS-SDR needs to return -sin s = _mm256_xor_ps(s, _ps256_sign_mask); _mm256_store_ps ((float*)sin_value, s); _mm256_store_ps ((float*)cos_value, c); for(int i = 0; i < 8; i++) { d_carr_sign[i] = lv_cmake(cos_value[i], sin_value[i]); } d_carr_sign += 8; phase_rad_array = _mm256_add_ps (phase_rad_array, phase_step_rad_array); } if (num_points%8!=0) { __VOLK_ATTR_ALIGNED(32) float phase_rad_store[8]; _mm256_store_ps ((float*)phase_rad_store, phase_rad_array); float phase_rad = phase_rad_store[0]; for(int i = 0; i < num_points%8; i++) { *d_carr_sign = lv_cmake(cos(phase_rad), -sin(phase_rad)); d_carr_sign++; phase_rad += phase_step_rad; } } } #endif /* LV_HAVE_AVX */ #ifdef LV_HAVE_SSE2 #include /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_sse2(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points) { // float* pointer1 = (float*)&phase_rad_init; // *pointer1 = 0; // float* pointer2 = (float*)&phase_step_rad; // *pointer2 = 0.5; const unsigned int sse_iters = num_points / 4; __m128 _ps_minus_cephes_DP1 = _mm_set1_ps(-0.78515625f); __m128 _ps_minus_cephes_DP2 = _mm_set1_ps(-2.4187564849853515625e-4f); __m128 _ps_minus_cephes_DP3 = _mm_set1_ps(-3.77489497744594108e-8f); __m128 _ps_sign_mask = _mm_set1_ps(-0.f); __m128i _pi32_1 = _mm_set1_epi32(1); __m128i _pi32_inv1 = _mm_set1_epi32(~1); __m128i _pi32_2 = _mm_set1_epi32(2); __m128i _pi32_4 = _mm_set1_epi32(4); __m128 _ps_cephes_FOPI = _mm_set1_ps(1.27323954473516f); // 4 / PI __m128 _ps_sincof_p0 = _mm_set1_ps(-1.9515295891E-4f); __m128 _ps_sincof_p1 = _mm_set1_ps( 8.3321608736E-3f); __m128 _ps_sincof_p2 = _mm_set1_ps(-1.6666654611E-1f); __m128 _ps_coscof_p0 = _mm_set1_ps( 2.443315711809948E-005f); __m128 _ps_coscof_p1 = _mm_set1_ps(-1.388731625493765E-003f); __m128 _ps_coscof_p2 = _mm_set1_ps( 4.166664568298827E-002f); __m128 _ps_1 = _mm_set1_ps(1.f); __m128 _ps_0p5 = _mm_set1_ps(0.5f); __m128 phase_step_rad_array = _mm_set1_ps(4*phase_step_rad); __m128 phase_rad_array, x, s, c, swap_sign_bit_sin, sign_bit_cos, poly_mask, z, tmp, y, y2, ysin1, ysin2; __m128 xmm1, xmm2, xmm3, sign_bit_sin; __m128i emm0, emm2, emm4; __VOLK_ATTR_ALIGNED(16) float sin_value[4]; __VOLK_ATTR_ALIGNED(16) float cos_value[4]; phase_rad_array = _mm_set_ps (phase_rad_init+3*phase_step_rad, phase_rad_init+2*phase_step_rad, phase_rad_init+phase_step_rad, phase_rad_init); for(unsigned int i = 0; i < sse_iters; i++) { x = phase_rad_array; /* extract the sign bit (upper one) */ sign_bit_sin = _mm_and_ps(x, _ps_sign_mask); /* take the absolute value */ x = _mm_xor_ps(x, sign_bit_sin); /* scale by 4/Pi */ y = _mm_mul_ps(x, _ps_cephes_FOPI); /* store the integer part of y in emm2 */ emm2 = _mm_cvttps_epi32(y); /* j=(j+1) & (~1) (see the cephes sources) */ emm2 = _mm_add_epi32(emm2, _pi32_1); emm2 = _mm_and_si128(emm2, _pi32_inv1); y = _mm_cvtepi32_ps(emm2); emm4 = emm2; /* get the swap sign flag for the sine */ emm0 = _mm_and_si128(emm2, _pi32_4); emm0 = _mm_slli_epi32(emm0, 29); swap_sign_bit_sin = _mm_castsi128_ps(emm0); /* get the polynom selection mask for the sine*/ emm2 = _mm_and_si128(emm2, _pi32_2); emm2 = _mm_cmpeq_epi32(emm2, _mm_setzero_si128()); poly_mask = _mm_castsi128_ps(emm2); /* The magic pass: "Extended precision modular arithmetic" x = ((x - y * DP1) - y * DP2) - y * DP3; */ xmm1 = _mm_mul_ps(y, _ps_minus_cephes_DP1); xmm2 = _mm_mul_ps(y, _ps_minus_cephes_DP2); xmm3 = _mm_mul_ps(y, _ps_minus_cephes_DP3); x = _mm_add_ps(_mm_add_ps(x, xmm1), _mm_add_ps(xmm2, xmm3)); emm4 = _mm_sub_epi32(emm4, _pi32_2); emm4 = _mm_andnot_si128(emm4, _pi32_4); emm4 = _mm_slli_epi32(emm4, 29); sign_bit_cos = _mm_castsi128_ps(emm4); sign_bit_sin = _mm_xor_ps(sign_bit_sin, swap_sign_bit_sin); /* Evaluate the first polynom (0 <= x <= Pi/4) */ z = _mm_mul_ps(x,x); y = _ps_coscof_p0; y = _mm_mul_ps(y, z); y = _mm_add_ps(y, _ps_coscof_p1); y = _mm_mul_ps(y, z); y = _mm_add_ps(y, _ps_coscof_p2); y = _mm_mul_ps(y, _mm_mul_ps(z, z)); tmp = _mm_mul_ps(z, _ps_0p5); y = _mm_sub_ps(y, tmp); y = _mm_add_ps(y, _ps_1); /* Evaluate the second polynom (Pi/4 <= x <= 0) */ y2 = _ps_sincof_p0; y2 = _mm_mul_ps(y2, z); y2 = _mm_add_ps(y2, _ps_sincof_p1); y2 = _mm_mul_ps(y2, z); y2 = _mm_add_ps(y2, _ps_sincof_p2); y2 = _mm_mul_ps(y2, _mm_mul_ps(z, x)); y2 = _mm_add_ps(y2, x); /* select the correct result from the two polynoms */ xmm3 = poly_mask; ysin2 = _mm_and_ps(xmm3, y2); ysin1 = _mm_andnot_ps(xmm3, y); y2 = _mm_sub_ps(y2,ysin2); y = _mm_sub_ps(y, ysin1); xmm1 = _mm_add_ps(ysin1,ysin2); xmm2 = _mm_add_ps(y,y2); /* update the sign */ s = _mm_xor_ps(xmm1, sign_bit_sin); c = _mm_xor_ps(xmm2, sign_bit_cos); //GNSS-SDR needs to return -sin s = _mm_xor_ps(s, _ps_sign_mask); _mm_store_ps ((float*)sin_value, s); _mm_store_ps ((float*)cos_value, c); for(unsigned int e = 0; e < 4; e++) { d_carr_sign[e] = lv_cmake(cos_value[e], sin_value[e]); } d_carr_sign += 4; phase_rad_array = _mm_add_ps (phase_rad_array, phase_step_rad_array); } if (num_points % 4 != 0) { __VOLK_ATTR_ALIGNED(16) float phase_rad_store[4]; _mm_store_ps ((float*)phase_rad_store, phase_rad_array); float phase_rad = phase_rad_store[0]; for(unsigned int i = 0; i < num_points%4; i++) { *d_carr_sign = lv_cmake(cos(phase_rad), -sin(phase_rad)); d_carr_sign++; phase_rad += phase_step_rad; } } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Accumulates the values in the input buffer \param result The accumulated result \param inputBuffer The buffer of data to be accumulated \param num_points The number of values in inputBuffer to be accumulated */ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_generic(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points) { // float* pointer1 = (float*)&phase_rad_init; // *pointer1 = 0; // float* pointer2 = (float*)&phase_step_rad; // *pointer2 = 0.5; float phase_rad = phase_rad_init; for(unsigned int i = 0; i < num_points; i++) { *d_carr_sign = lv_cmake(cos(phase_rad), -sin(phase_rad)); d_carr_sign++; phase_rad += phase_step_rad; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc_a_H */ ././@LongLink0000644000000000000000000000020400000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000011556312576764164033750 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors, and accumulates the results into float32. In order to avoid overflow, If input, carrier and XX_code have the same number of bits, they must be values between —3 and 3 (2 bits). * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Very early, Early, Prompt, Late and very late correlation with 16 bits vectors (8 bits the * real part and 8 bits the imaginary part), and accumulates the result * in 32 bits single point values, returning float32 values: * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 16 bits vectors) It returns the input * signal in base band (BB) * - Very Early values are calculated by multiplying the input signal in BB by the * very early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Very Late values are calculated by multiplying the input signal in BB by the * very late code (multiplication of 16 bits vectors), accumulating the results into float32 values * * ------------------------------------------------------------------------- * Bits analysis * * input = 8 bits * carrier = 8 bits * XX_code = 8 bits * XX_out = 8 bits * bb_signal_sample = 8 bits * * bb_signal_sample = input*carrier -> 17 bits limited to 8 bits = input and carrier must be values between —7 and 7 to avoid overflow (3 bits) * * XX_out16 = XX_code*bb_signal_sample -> 17 bits limited to 8 bits = XX_code and bb_signal_sample must be values between —7 and 7 to avoid overflow (3 bits) * * conclusion = input and carrier must be values between —1 and 1 (1 bit) and XX_code must be values between —7 and 7 to avoid overflow (3 bits) * If input, carrier and XX_code have the same number of bits, they must be values between —3 and 3 to avoid overflow (2 bits). * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 VE_code_acc, E_code_acc, P_code_acc, L_code_acc, VL_code_acc; __m128i input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2; __m128 output_ps; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); VE_code_acc = _mm_setzero_ps(); E_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get very early values y = _mm_lddqu_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) VE_code_acc = _mm_add_ps (VE_code_acc, output_ps); //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) E_code_acc = _mm_add_ps (E_code_acc, output_ps); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) P_code_acc = _mm_add_ps (P_code_acc, output_ps); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) L_code_acc = _mm_add_ps (L_code_acc, output_ps); //Get very late values y = _mm_lddqu_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) VL_code_acc = _mm_add_ps (VL_code_acc, output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t VE_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t VL_dotProductVector[2]; _mm_storeu_ps((float*)VE_dotProductVector,VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)VL_dotProductVector,VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<2; ++i) { *VE_out_ptr += VE_dotProductVector[i]; *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *VL_out_ptr += VL_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_sse2(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 VE_code_acc, E_code_acc, P_code_acc, L_code_acc, VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 output_ps_1, output_ps_2; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); VE_code_acc = _mm_setzero_ps(); E_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_loadu_si128((__m128i*)input_ptr); y = _mm_loadu_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get very early values y = _mm_loadu_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_1); VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_2); //Get early values y = _mm_loadu_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) E_code_acc = _mm_add_ps (E_code_acc, output_ps_1); E_code_acc = _mm_add_ps (E_code_acc, output_ps_2); //Get prompt values y = _mm_loadu_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) P_code_acc = _mm_add_ps (P_code_acc, output_ps_1); P_code_acc = _mm_add_ps (P_code_acc, output_ps_2); //Get late values y = _mm_loadu_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) L_code_acc = _mm_add_ps (L_code_acc, output_ps_1); L_code_acc = _mm_add_ps (L_code_acc, output_ps_2); //Get very late values y = _mm_loadu_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_1); VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_2); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t VE_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t VL_dotProductVector[2]; _mm_storeu_ps((float*)VE_dotProductVector,VE_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)VL_dotProductVector,VL_code_acc); // Store the results back into the dot product vector for (unsigned int i = 0; i<2; ++i) { *VE_out_ptr += VE_dotProductVector[i]; *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *VL_out_ptr += VL_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { lv_8sc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; // perform very early, Early, Prompt, Late and very late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code[i]); *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_sse4_1(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 VE_code_acc, E_code_acc, P_code_acc, L_code_acc, VL_code_acc; __m128i input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2; __m128 output_ps; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); VE_code_acc = _mm_setzero_ps(); E_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get very early values y = _mm_load_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) VE_code_acc = _mm_add_ps (VE_code_acc, output_ps); //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) E_code_acc = _mm_add_ps (E_code_acc, output_ps); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) P_code_acc = _mm_add_ps (P_code_acc, output_ps); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) L_code_acc = _mm_add_ps (L_code_acc, output_ps); //Get very late values y = _mm_load_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) VL_code_acc = _mm_add_ps (VL_code_acc, output_ps); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t VE_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t VL_dotProductVector[2]; _mm_store_ps((float*)VE_dotProductVector,VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)VL_dotProductVector,VL_code_acc); // Store the results back into the dot product vector for (int i = 0; i<2; ++i) { *VE_out_ptr += VE_dotProductVector[i]; *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *VL_out_ptr += VL_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_sse2(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 VE_code_acc, E_code_acc, P_code_acc, L_code_acc, VL_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 output_ps_1, output_ps_2; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* VE_code_ptr = VE_code; lv_32fc_t* VE_out_ptr = VE_out; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* VL_code_ptr = VL_code; lv_32fc_t* VL_out_ptr = VL_out; *VE_out_ptr = 0; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; *VL_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); VE_code_acc = _mm_setzero_ps(); E_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); VL_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get very early values y = _mm_load_si128((__m128i*)VE_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_1); VE_code_acc = _mm_add_ps (VE_code_acc, output_ps_2); //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) E_code_acc = _mm_add_ps (E_code_acc, output_ps_1); E_code_acc = _mm_add_ps (E_code_acc, output_ps_2); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) P_code_acc = _mm_add_ps (P_code_acc, output_ps_1); P_code_acc = _mm_add_ps (P_code_acc, output_ps_2); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) L_code_acc = _mm_add_ps (L_code_acc, output_ps_1); L_code_acc = _mm_add_ps (L_code_acc, output_ps_2); //Get very late values y = _mm_load_si128((__m128i*)VL_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_1); VL_code_acc = _mm_add_ps (VL_code_acc, output_ps_2); input_ptr += 8; carrier_ptr += 8; VE_code_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; VL_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t VE_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t VL_dotProductVector[2]; _mm_store_ps((float*)VE_dotProductVector,VE_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)VL_dotProductVector,VL_code_acc); // Store the results back into the dot product vector for (unsigned int i = 0; i<2; ++i) { *VE_out_ptr += VE_dotProductVector[i]; *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; *VL_out_ptr += VL_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get very early, early, prompt, late and very late values for each *VE_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VE_code_ptr++)); *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); *VL_out_ptr += (lv_32fc_t) (bb_signal_sample * (*VL_code_ptr++)); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param VE_code Very Early PRN code replica input \param E_code Early PRN code replica input \param P_code Prompt PRN code replica input \param L_code Late PRN code replica input \param VL_code Very Late PRN code replica input \param VE_out Very Early correlation output \param E_out Early correlation output \param P_out Prompt correlation output \param L_out Late correlation output \param VL_out Very Late correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_generic(lv_32fc_t* VE_out, lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, lv_32fc_t* VL_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* VE_code, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, const lv_8sc_t* VL_code, unsigned int num_points) { lv_8sc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *VE_out = 0; *E_out = 0; *P_out = 0; *L_out = 0; *VL_out = 0; // perform very early, Early, Prompt, Late and very late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; *VE_out += (lv_32fc_t) (bb_signal_sample * VE_code[i]); *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); *VL_out += (lv_32fc_t) (bb_signal_sample * VL_code[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_H */ ././@LongLink0000644000000000000000000000021100000000000011575 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000022754512576764164033754 0ustar carlescarles/*! * \file volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 32 bits vectors using different methods: inside u_sse4_1_first there is one method, inside u_sse4_1_second there is another... This protokernel has been created to test the performance of different methods. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Early, Prompt, and Late correlation with 32 bits vectors (16 bits the * real part and 16 bits the imaginary part): * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 32 bits vectors) It returns the input * signal in base band (BB) * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 32 bits vectors), accumulating the results * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 32 bits vectors), accumulating the results * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 32 bits vectors), accumulating the results * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_first(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 4; __m128i x, y, yaux, yl, yh, tmp1, tmp2, z, bb_signal_sample, bb_signal_sample_suffled; __m128 z_ps_1, z_ps_2, z_E, z_P, z_L; __m128i z_i_1, z_i_2; lv_32fc_t dotProduct_E; lv_32fc_t dotProduct_P; lv_32fc_t dotProduct_L; z_E = _mm_setzero_ps(); z_P = _mm_setzero_ps(); z_L = _mm_setzero_ps(); const lv_16sc_t* _input = input; const lv_16sc_t* _carrier = carrier; const lv_16sc_t* _E_code = E_code; const lv_16sc_t* _P_code = P_code; const lv_16sc_t* _L_code = L_code; dotProduct_E = 0; dotProduct_P = 0; dotProduct_L = 0; if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)_input); // Load the ar + ai, br + bi as ar,ai,br,bi y = _mm_lddqu_si128((__m128i*)_carrier); // Load the cr + ci, dr + di as cr,ci,dr,di // Load yl with cr,cr,dr,dr // Load yh with ci,ci,di,di yaux = _mm_shuffle_epi8 (y, _mm_set_epi8 (15, 14, 11, 10, 7, 6, 3, 2, 13, 12, 9, 8, 5, 4, 1, 0)); yl = _mm_unpacklo_epi16(yaux, yaux); yh = _mm_unpackhi_epi16(yaux, yaux); tmp1 = _mm_mullo_epi16(x,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr x = _mm_shuffle_epi8 (x, _mm_set_epi8 (13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2)); // Re-arrange x to be ai,ar,bi,br tmp2 = _mm_mullo_epi16(x,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di tmp2 = _mm_mullo_epi16(tmp2,_mm_set_epi16 (1, -1, 1, -1, 1, -1, 1, -1)); bb_signal_sample = _mm_add_epi16(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di bb_signal_sample_suffled = _mm_shuffle_epi8 (bb_signal_sample, _mm_set_epi8 (13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2)); // Re-arrange bb_signal_sample to be ai,ar,bi,br // correlation E,P,L (3x vector scalar product) // Early y = _mm_lddqu_si128((__m128i*)_E_code); // Load the cr + ci, dr + di as cr,ci,dr,di yaux = _mm_shuffle_epi8 (y, _mm_set_epi8 (15, 14, 11, 10, 7, 6, 3, 2, 13, 12, 9, 8, 5, 4, 1, 0)); yl = _mm_unpacklo_epi16(yaux, yaux); yh = _mm_unpackhi_epi16(yaux, yaux); tmp1 = _mm_mullo_epi16(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mullo_epi16(bb_signal_sample_suffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di tmp2 = _mm_mullo_epi16(tmp2,_mm_set_epi16 (1, -1, 1, -1, 1, -1, 1, -1)); z = _mm_add_epi16(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_i_1 = _mm_cvtepi16_epi32(z); z_ps_1 = _mm_cvtepi32_ps(z_i_1); z = _mm_srli_si128 (z, 8); z_i_2 = _mm_cvtepi16_epi32(z); z_ps_2 = _mm_cvtepi32_ps(z_i_2); z_E = _mm_add_ps(z_E, z_ps_1); // Add the complex multiplication results together z_E = _mm_add_ps(z_E, z_ps_2); // Add the complex multiplication results together // Prompt y = _mm_lddqu_si128((__m128i*)_P_code); // Load the cr + ci, dr + di as cr,ci,dr,di yaux = _mm_shuffle_epi8 (y, _mm_set_epi8 (15, 14, 11, 10, 7, 6, 3, 2, 13, 12, 9, 8, 5, 4, 1, 0)); yl = _mm_unpacklo_epi16(yaux, yaux); yh = _mm_unpackhi_epi16(yaux, yaux); tmp1 = _mm_mullo_epi16(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mullo_epi16(bb_signal_sample_suffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di tmp2 = _mm_mullo_epi16(tmp2,_mm_set_epi16 (1, -1, 1, -1, 1, -1, 1, -1)); z = _mm_add_epi16(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_i_1 = _mm_cvtepi16_epi32(z); z_ps_1 = _mm_cvtepi32_ps(z_i_1); z = _mm_srli_si128 (z, 8); z_i_2 = _mm_cvtepi16_epi32(z); z_ps_2 = _mm_cvtepi32_ps(z_i_2); z_P = _mm_add_ps(z_P, z_ps_1); // Add the complex multiplication results together z_P = _mm_add_ps(z_P, z_ps_2); // Add the complex multiplication results together // Late y = _mm_lddqu_si128((__m128i*)_L_code); // Load the cr + ci, dr + di as cr,ci,dr,di yaux = _mm_shuffle_epi8 (y, _mm_set_epi8 (15, 14, 11, 10, 7, 6, 3, 2, 13, 12, 9, 8, 5, 4, 1, 0)); yl = _mm_unpacklo_epi16(yaux, yaux); yh = _mm_unpackhi_epi16(yaux, yaux); tmp1 = _mm_mullo_epi16(bb_signal_sample,yl); // tmp1 = ar*cr,ai*cr,br*dr,bi*dr tmp2 = _mm_mullo_epi16(bb_signal_sample_suffled,yh); // tmp2 = ai*ci,ar*ci,bi*di,br*di tmp2 = _mm_mullo_epi16(tmp2,_mm_set_epi16 (1, -1, 1, -1, 1, -1, 1, -1)); z = _mm_add_epi16(tmp1,tmp2); // ar*cr-ai*ci, ai*cr+ar*ci, br*dr-bi*di, bi*dr+br*di z_i_1 = _mm_cvtepi16_epi32(z); z_ps_1 = _mm_cvtepi32_ps(z_i_1); z = _mm_srli_si128 (z, 8); z_i_2 = _mm_cvtepi16_epi32(z); z_ps_2 = _mm_cvtepi32_ps(z_i_2); z_L = _mm_add_ps(z_L, z_ps_1); // Add the complex multiplication results together z_L = _mm_add_ps(z_L, z_ps_2); // Add the complex multiplication results together _input += 4; _carrier += 4; _E_code += 4; _L_code += 4; _P_code += 4; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_E[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_P[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t dotProductVector_L[2]; _mm_storeu_ps((float*)dotProductVector_E,z_E); // Store the results back into the dot product vector _mm_storeu_ps((float*)dotProductVector_P,z_P); // Store the results back into the dot product vector _mm_storeu_ps((float*)dotProductVector_L,z_L); // Store the results back into the dot product vector dotProduct_E = ( dotProductVector_E[0] + dotProductVector_E[1] ); dotProduct_P = ( dotProductVector_P[0] + dotProductVector_P[1] ); dotProduct_L = ( dotProductVector_L[0] + dotProductVector_L[1] ); } for(unsigned int i=0; i < num_points%4; ++i) { dotProduct_E += (lv_32fc_t)((*_input) * (*_E_code++)*(*_carrier)); dotProduct_P += (lv_32fc_t)((*_input) * (*_P_code++)*(*_carrier)); dotProduct_L += (lv_32fc_t)((*_input++) * (*_L_code++)*(*_carrier++)); } *E_out = dotProduct_E; *P_out = dotProduct_P; *L_out = dotProduct_L; } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_second(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128i real_output_i_1, real_output_i_2, imag_output_i_1, imag_output_i_2; __m128 real_output_ps_1, real_output_ps_2, imag_output_ps_1, imag_output_ps_2; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_lddqu_si128((__m128i*)input_ptr); y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x1, 2); imagx = _mm_blend_epi16 (x2, imagx, 85); realx = _mm_slli_si128 (x2, 2); realx = _mm_blend_epi16 (realx, x1, 85); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output_ps_1 = _mm_cvtepi32_ps(real_output_i_1); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_ps_2 = _mm_cvtepi32_ps(real_output_i_2); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output_ps_1 = _mm_cvtepi32_ps(imag_output_i_1); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_ps_2 = _mm_cvtepi32_ps(imag_output_i_2); real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps_1); real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps_2); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps_1); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps_2); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output_ps_1 = _mm_cvtepi32_ps(real_output_i_1); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_ps_2 = _mm_cvtepi32_ps(real_output_i_2); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output_ps_1 = _mm_cvtepi32_ps(imag_output_i_1); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_ps_2 = _mm_cvtepi32_ps(imag_output_i_2); real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps_1); real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps_2); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps_1); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps_2); //Get late values y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output_ps_1 = _mm_cvtepi32_ps(real_output_i_1); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_ps_2 = _mm_cvtepi32_ps(real_output_i_2); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output_ps_1 = _mm_cvtepi32_ps(imag_output_i_1); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_ps_2 = _mm_cvtepi32_ps(imag_output_i_2); real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps_1); real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps_2); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps_1); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps_2); input_ptr += 4; carrier_ptr += 4; E_code_ptr += 4; L_code_ptr += 4; P_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_third(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; unsigned int index = 0; unsigned int indexPlus4 = 0; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, real_output_i32, imag_output_i32; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128i real_output_i_1, real_output_i_2, imag_output_i_1, imag_output_i_2; __m128 real_output_ps, imag_output_ps; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(index = 0;index < 8*sse_iters; index+=8) { indexPlus4 = index + 4; //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)&input_ptr[index]); x2 = _mm_lddqu_si128((__m128i*)&input_ptr[indexPlus4]); y1 = _mm_lddqu_si128((__m128i*)&carrier_ptr[index]); y2 = _mm_lddqu_si128((__m128i*)&carrier_ptr[indexPlus4]); imagx = _mm_srli_si128 (x1, 2); imagx = _mm_blend_epi16 (x2, imagx, 85); realx = _mm_slli_si128 (x2, 2); realx = _mm_blend_epi16 (realx, x1, 85); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y1 = _mm_lddqu_si128((__m128i*)&E_code_ptr[index]); y2 = _mm_lddqu_si128((__m128i*)&E_code_ptr[indexPlus4]); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)&P_code_ptr[index]); y2 = _mm_lddqu_si128((__m128i*)&P_code_ptr[indexPlus4]); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_lddqu_si128((__m128i*)&L_code_ptr[index]); y2 = _mm_lddqu_si128((__m128i*)&L_code_ptr[indexPlus4]); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(; index < num_points; index++) { //Perform the carrier wipe-off bb_signal_sample = input_ptr[index] * carrier_ptr[index]; // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * E_code_ptr[index]); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * P_code_ptr[index]); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * L_code_ptr[index]); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_fourth(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, real_output_i32, imag_output_i32; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128i real_output_i_1, real_output_i_2, imag_output_i_1, imag_output_i_2; __m128 real_output_ps, imag_output_ps; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_lddqu_si128((__m128i*)input_ptr); y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); imagx = _mm_srli_si128 (x1, 2); imagx = _mm_blend_epi16 (x2, imagx, 85); realx = _mm_slli_si128 (x2, 2); realx = _mm_blend_epi16 (realx, x1, 85); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (realx, realy); imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); //Get early values y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); imagy = _mm_srli_si128 (y1, 2); imagy = _mm_blend_epi16 (y2, imagy, 85); realy = _mm_slli_si128 (y2, 2); realy = _mm_blend_epi16 (realy, y1, 85); realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); real_output_i_1 = _mm_cvtepi16_epi32(real_output); real_output = _mm_srli_si128 (real_output, 8); real_output_i_2 = _mm_cvtepi16_epi32(real_output); real_output_i32 = _mm_add_epi32 (real_output_i_1, real_output_i_2); real_output_ps = _mm_cvtepi32_ps(real_output_i32); imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); imag_output = _mm_srli_si128 (imag_output, 8); imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); imag_output_i32 = _mm_add_epi32 (imag_output_i_1, imag_output_i_2); imag_output_ps = _mm_cvtepi32_ps(imag_output_i32); real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; E_code_ptr += 4; L_code_ptr += 4; P_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_fifth(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy; __m128i input_i_1, input_i_2, output_i32; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i realx, imagx, realy, imagy, real_output, imag_output; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128 real_output_ps, imag_output_ps; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_lddqu_si128((__m128i*)input_ptr); y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(x1, x2, realx, imagx) CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(real_bb_signal_sample, imag_bb_signal_sample, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output) CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(real_output, input_i_1, input_i_2, output_i32, real_output_ps) CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(imag_output, input_i_1, input_i_2, output_i32, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(real_bb_signal_sample, imag_bb_signal_sample, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output) CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(real_output, input_i_1, input_i_2, output_i32, real_output_ps) CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(imag_output, input_i_1, input_i_2, output_i32, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(real_bb_signal_sample, imag_bb_signal_sample, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output) CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(real_output, input_i_1, input_i_2, output_i32, real_output_ps) CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(imag_output, input_i_1, input_i_2, output_i32, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; E_code_ptr += 4; L_code_ptr += 4; P_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_sixth(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy; __m128i input_i_1, input_i_2, output_i32; __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; __m128i realx, imagx, realy, imagy, real_output, imag_output; __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; __m128 real_output_ps, imag_output_ps; float E_out_real = 0; float E_out_imag = 0; float P_out_real = 0; float P_out_imag = 0; float L_out_real = 0; float L_out_imag = 0; const lv_16sc_t* input_ptr = input; const lv_16sc_t* carrier_ptr = carrier; const lv_16sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_16sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_16sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; real_E_code_acc = _mm_setzero_ps(); imag_E_code_acc = _mm_setzero_ps(); real_P_code_acc = _mm_setzero_ps(); imag_P_code_acc = _mm_setzero_ps(); real_L_code_acc = _mm_setzero_ps(); imag_L_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x1 = _mm_lddqu_si128((__m128i*)input_ptr); input_ptr += 4; x2 = _mm_lddqu_si128((__m128i*)input_ptr); y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); carrier_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(x1, x2, realx, imagx) CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); E_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps); imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps); //Get prompt values y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); P_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps); imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps); //Get late values y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); L_code_ptr += 4; y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps) real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps); imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps); input_ptr += 4; carrier_ptr += 4; E_code_ptr += 4; L_code_ptr += 4; P_code_ptr += 4; } __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<4; ++i) { E_out_real += real_E_dotProductVector[i]; E_out_imag += imag_E_dotProductVector[i]; P_out_real += real_P_dotProductVector[i]; P_out_imag += imag_P_dotProductVector[i]; L_out_real += real_L_dotProductVector[i]; L_out_imag += imag_L_dotProductVector[i]; } *E_out_ptr = lv_cmake(E_out_real, E_out_imag); *P_out_ptr = lv_cmake(P_out_real, P_out_imag); *L_out_ptr = lv_cmake(L_out_real, L_out_imag); } lv_16sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { lv_16sc_t bb_signal_sample; lv_16sc_t tmp1; lv_16sc_t tmp2; lv_16sc_t tmp3; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; tmp1 = bb_signal_sample * E_code[i]; tmp2 = bb_signal_sample * P_code[i]; tmp3 = bb_signal_sample * L_code[i]; // Now get early, late, and prompt values for each *E_out += (lv_32fc_t)tmp1; *P_out += (lv_32fc_t)tmp2; *L_out += (lv_32fc_t)tmp3; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_H #include #include #include #include #include // //#ifdef LV_HAVE_SSE4_1 //#include ///*! // \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation // \param input The input signal input // \param carrier The carrier signal input // \param E_code Early PRN code replica input // \param P_code Early PRN code replica input // \param L_code Early PRN code replica input // \param E_out Early correlation output // \param P_out Early correlation output // \param L_out Early correlation output // \param num_points The number of complex values in vectors // */ //static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_sse4_1(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) //{ // const unsigned int sse_iters = num_points / 8; // // __m128i x1, x2, y1, y2, real_bb_signal_sample, imag_bb_signal_sample; // __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output; // // __m128 real_E_code_acc, imag_E_code_acc, real_P_code_acc, imag_P_code_acc, real_L_code_acc, imag_L_code_acc; // __m128i real_output_i_1, real_output_i_2, imag_output_i_1, imag_output_i_2; // __m128 real_output_ps_1, real_output_ps_2, imag_output_ps_1, imag_output_ps_2; // // float E_out_real = 0; // float E_out_imag = 0; // float P_out_real = 0; // float P_out_imag = 0; // float L_out_real = 0; // float L_out_imag = 0; // // const lv_16sc_t* input_ptr = input; // const lv_16sc_t* carrier_ptr = carrier; // // const lv_16sc_t* E_code_ptr = E_code; // lv_32fc_t* E_out_ptr = E_out; // const lv_16sc_t* L_code_ptr = L_code; // lv_32fc_t* L_out_ptr = L_out; // const lv_16sc_t* P_code_ptr = P_code; // lv_32fc_t* P_out_ptr = P_out; // // *E_out_ptr = 0; // *P_out_ptr = 0; // *L_out_ptr = 0; // // mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); // // real_E_code_acc = _mm_setzero_ps(); // imag_E_code_acc = _mm_setzero_ps(); // real_P_code_acc = _mm_setzero_ps(); // imag_P_code_acc = _mm_setzero_ps(); // real_L_code_acc = _mm_setzero_ps(); // imag_L_code_acc = _mm_setzero_ps(); // // if (sse_iters>0) // { // for(int number = 0;number < sse_iters; number++){ // // //Perform the carrier wipe-off // x1 = _mm_lddqu_si128((__m128i*)input_ptr); // input_ptr += 4; // x2 = _mm_lddqu_si128((__m128i*)input_ptr); // // y1 = _mm_lddqu_si128((__m128i*)carrier_ptr); // carrier_ptr += 4; // y2 = _mm_lddqu_si128((__m128i*)carrier_ptr); // // imagx = _mm_srli_si128 (x1, 2); // imagx = _mm_blend_epi16 (x2, imagx, 85); // realx = _mm_slli_si128 (x2, 2); // realx = _mm_blend_epi16 (realx, x1, 85); // // imagy = _mm_srli_si128 (y1, 2); // imagy = _mm_blend_epi16 (y2, imagy, 85); // realy = _mm_slli_si128 (y2, 2); // realy = _mm_blend_epi16 (realy, y1, 85); // // realx_mult_realy = _mm_mullo_epi16 (realx, realy); // imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy); // realx_mult_imagy = _mm_mullo_epi16 (realx, imagy); // imagx_mult_realy = _mm_mullo_epi16 (imagx, realy); // // real_bb_signal_sample = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); // imag_bb_signal_sample = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); // // //Get early values // y1 = _mm_lddqu_si128((__m128i*)E_code_ptr); // E_code_ptr += 4; // y2 = _mm_lddqu_si128((__m128i*)E_code_ptr); // // imagy = _mm_srli_si128 (y1, 2); // imagy = _mm_blend_epi16 (y2, imagy, 85); // realy = _mm_slli_si128 (y2, 2); // realy = _mm_blend_epi16 (realy, y1, 85); // // realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); // imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); // realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); // imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); // // real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); // imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); // // real_output_i_1 = _mm_cvtepi16_epi32(real_output); // real_output_ps_1 = _mm_cvtepi32_ps(real_output_i_1); // real_output = _mm_srli_si128 (real_output, 8); // real_output_i_2 = _mm_cvtepi16_epi32(real_output); // real_output_ps_2 = _mm_cvtepi32_ps(real_output_i_2); // // imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); // imag_output_ps_1 = _mm_cvtepi32_ps(imag_output_i_1); // imag_output = _mm_srli_si128 (imag_output, 8); // imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); // imag_output_ps_2 = _mm_cvtepi32_ps(imag_output_i_2); // // real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps_1); // real_E_code_acc = _mm_add_ps (real_E_code_acc, real_output_ps_2); // imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps_1); // imag_E_code_acc = _mm_add_ps (imag_E_code_acc, imag_output_ps_2); // // //Get prompt values // y1 = _mm_lddqu_si128((__m128i*)P_code_ptr); // P_code_ptr += 4; // y2 = _mm_lddqu_si128((__m128i*)P_code_ptr); // // imagy = _mm_srli_si128 (y1, 2); // imagy = _mm_blend_epi16 (y2, imagy, 85); // realy = _mm_slli_si128 (y2, 2); // realy = _mm_blend_epi16 (realy, y1, 85); // // realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); // imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); // realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); // imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); // // real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); // imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); // // real_output_i_1 = _mm_cvtepi16_epi32(real_output); // real_output_ps_1 = _mm_cvtepi32_ps(real_output_i_1); // real_output = _mm_srli_si128 (real_output, 8); // real_output_i_2 = _mm_cvtepi16_epi32(real_output); // real_output_ps_2 = _mm_cvtepi32_ps(real_output_i_2); // // imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); // imag_output_ps_1 = _mm_cvtepi32_ps(imag_output_i_1); // imag_output = _mm_srli_si128 (imag_output, 8); // imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); // imag_output_ps_2 = _mm_cvtepi32_ps(imag_output_i_2); // // real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps_1); // real_P_code_acc = _mm_add_ps (real_P_code_acc, real_output_ps_2); // imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps_1); // imag_P_code_acc = _mm_add_ps (imag_P_code_acc, imag_output_ps_2); // // //Get late values // y1 = _mm_lddqu_si128((__m128i*)L_code_ptr); // L_code_ptr += 4; // y2 = _mm_lddqu_si128((__m128i*)L_code_ptr); // // imagy = _mm_srli_si128 (y1, 2); // imagy = _mm_blend_epi16 (y2, imagy, 85); // realy = _mm_slli_si128 (y2, 2); // realy = _mm_blend_epi16 (realy, y1, 85); // // realx_mult_realy = _mm_mullo_epi16 (real_bb_signal_sample, realy); // imagx_mult_imagy = _mm_mullo_epi16 (imag_bb_signal_sample, imagy); // realx_mult_imagy = _mm_mullo_epi16 (real_bb_signal_sample, imagy); // imagx_mult_realy = _mm_mullo_epi16 (imag_bb_signal_sample, realy); // // real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy); // imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); // // real_output_i_1 = _mm_cvtepi16_epi32(real_output); // real_output_ps_1 = _mm_cvtepi32_ps(real_output_i_1); // real_output = _mm_srli_si128 (real_output, 8); // real_output_i_2 = _mm_cvtepi16_epi32(real_output); // real_output_ps_2 = _mm_cvtepi32_ps(real_output_i_2); // // imag_output_i_1 = _mm_cvtepi16_epi32(imag_output); // imag_output_ps_1 = _mm_cvtepi32_ps(imag_output_i_1); // imag_output = _mm_srli_si128 (imag_output, 8); // imag_output_i_2 = _mm_cvtepi16_epi32(imag_output); // imag_output_ps_2 = _mm_cvtepi32_ps(imag_output_i_2); // // real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps_1); // real_L_code_acc = _mm_add_ps (real_L_code_acc, real_output_ps_2); // imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps_1); // imag_L_code_acc = _mm_add_ps (imag_L_code_acc, imag_output_ps_2); // // input_ptr += 4; // carrier_ptr += 4; // E_code_ptr += 4; // L_code_ptr += 4; // P_code_ptr += 4; // } // // __VOLK_ATTR_ALIGNED(16) float real_E_dotProductVector[4]; // __VOLK_ATTR_ALIGNED(16) float imag_E_dotProductVector[4]; // __VOLK_ATTR_ALIGNED(16) float real_P_dotProductVector[4]; // __VOLK_ATTR_ALIGNED(16) float imag_P_dotProductVector[4]; // __VOLK_ATTR_ALIGNED(16) float real_L_dotProductVector[4]; // __VOLK_ATTR_ALIGNED(16) float imag_L_dotProductVector[4]; // // _mm_storeu_ps((float*)real_E_dotProductVector,real_E_code_acc); // Store the results back into the dot product vector // _mm_storeu_ps((float*)imag_E_dotProductVector,imag_E_code_acc); // Store the results back into the dot product vector // _mm_storeu_ps((float*)real_P_dotProductVector,real_P_code_acc); // Store the results back into the dot product vector // _mm_storeu_ps((float*)imag_P_dotProductVector,imag_P_code_acc); // Store the results back into the dot product vector // _mm_storeu_ps((float*)real_L_dotProductVector,real_L_code_acc); // Store the results back into the dot product vector // _mm_storeu_ps((float*)imag_L_dotProductVector,imag_L_code_acc); // Store the results back into the dot product vector // // for (int i = 0; i<4; ++i) // { // E_out_real += real_E_dotProductVector[i]; // E_out_imag += imag_E_dotProductVector[i]; // P_out_real += real_P_dotProductVector[i]; // P_out_imag += imag_P_dotProductVector[i]; // L_out_real += real_L_dotProductVector[i]; // L_out_imag += imag_L_dotProductVector[i]; // } // *E_out_ptr = lv_cmake(E_out_real, E_out_imag); // *P_out_ptr = lv_cmake(P_out_real, P_out_imag); // *L_out_ptr = lv_cmake(L_out_real, L_out_imag); // } // // lv_16sc_t bb_signal_sample; // for(int i=0; i < num_points%8; ++i) // { // //Perform the carrier wipe-off // bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // // Now get early, late, and prompt values for each // *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); // *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); // *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); // } //} //#endif /* LV_HAVE_SSE4_1 */ // #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_16sc_t* input, const lv_16sc_t* carrier, const lv_16sc_t* E_code, const lv_16sc_t* P_code, const lv_16sc_t* L_code, unsigned int num_points) { lv_16sc_t bb_signal_sample; lv_16sc_t tmp1; lv_16sc_t tmp2; lv_16sc_t tmp3; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; tmp1 = bb_signal_sample * E_code[i]; tmp2 = bb_signal_sample * P_code[i]; tmp3 = bb_signal_sample * L_code[i]; // Now get early, late, and prompt values for each *E_out += (lv_32fc_t)tmp1; *P_out += (lv_32fc_t)tmp2; *L_out += (lv_32fc_t)tmp3; } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_a_H */ ././@LongLink0000644000000000000000000000020300000000000011576 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000006714412576764164033751 0ustar carlescarles/*! * \file volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3.h * \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 16 bits vectors, and accumulates the results into float32. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * Volk protokernel that performs the carrier wipe-off mixing and the * Early, Prompt, and Late correlation with 16 bits vectors (8 bits the * real part and 8 bits the imaginary part), and accumulates the result * in 32 bits single point values, returning float32 values: * - The carrier wipe-off is done by multiplying the input signal by the * carrier (multiplication of 16 bits vectors) It returns the input * signal in base band (BB) * - Early values are calculated by multiplying the input signal in BB by the * early code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Prompt values are calculated by multiplying the input signal in BB by the * prompt code (multiplication of 16 bits vectors), accumulating the results into float32 values * - Late values are calculated by multiplying the input signal in BB by the * late code (multiplication of 16 bits vectors), accumulating the results into float32 values * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_sse4_1(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 E_code_acc, P_code_acc, L_code_acc; __m128i input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2; __m128 output_ps; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); E_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_lddqu_si128((__m128i*)input_ptr); y = _mm_lddqu_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y = _mm_lddqu_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) E_code_acc = _mm_add_ps (E_code_acc, output_ps); //Get prompt values y = _mm_lddqu_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) P_code_acc = _mm_add_ps (P_code_acc, output_ps); //Get late values y = _mm_lddqu_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) L_code_acc = _mm_add_ps (L_code_acc, output_ps); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; _mm_storeu_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<2; ++i) { *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_sse2(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 E_code_acc, P_code_acc, L_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 output_ps_1, output_ps_2; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); E_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_loadu_si128((__m128i*)input_ptr); y = _mm_loadu_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y = _mm_loadu_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) E_code_acc = _mm_add_ps (E_code_acc, output_ps_1); E_code_acc = _mm_add_ps (E_code_acc, output_ps_2); //Get prompt values y = _mm_loadu_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) P_code_acc = _mm_add_ps (P_code_acc, output_ps_1); P_code_acc = _mm_add_ps (P_code_acc, output_ps_2); //Get late values y = _mm_loadu_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) L_code_acc = _mm_add_ps (L_code_acc, output_ps_1); L_code_acc = _mm_add_ps (L_code_acc, output_ps_2); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; _mm_storeu_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_storeu_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector for (unsigned int i = 0; i<2; ++i) { *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { lv_8sc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_H */ #ifndef INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_H #define INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_H #include #include #include #include #include #ifdef LV_HAVE_SSE4_1 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_sse4_1(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 E_code_acc, P_code_acc, L_code_acc; __m128i input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2; __m128 output_ps; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); E_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) E_code_acc = _mm_add_ps (E_code_acc, output_ps); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) P_code_acc = _mm_add_ps (P_code_acc, output_ps); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) L_code_acc = _mm_add_ps (L_code_acc, output_ps); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; _mm_store_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector for (int i = 0; i<2; ++i) { *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 #include #include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h" #include "CommonMacros/CommonMacros.h" /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_sse2(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { const unsigned int sse_iters = num_points / 8; __m128i x, y, real_bb_signal_sample, imag_bb_signal_sample; __m128i mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, output, real_output, imag_output; __m128 E_code_acc, P_code_acc, L_code_acc; __m128i input_i_1, input_i_2, output_i32; __m128 output_ps_1, output_ps_2; const lv_8sc_t* input_ptr = input; const lv_8sc_t* carrier_ptr = carrier; const lv_8sc_t* E_code_ptr = E_code; lv_32fc_t* E_out_ptr = E_out; const lv_8sc_t* L_code_ptr = L_code; lv_32fc_t* L_out_ptr = L_out; const lv_8sc_t* P_code_ptr = P_code; lv_32fc_t* P_out_ptr = P_out; *E_out_ptr = 0; *P_out_ptr = 0; *L_out_ptr = 0; mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255); E_code_acc = _mm_setzero_ps(); L_code_acc = _mm_setzero_ps(); P_code_acc = _mm_setzero_ps(); if (sse_iters>0) { for(unsigned int number = 0;number < sse_iters; number++) { //Perform the carrier wipe-off x = _mm_load_si128((__m128i*)input_ptr); y = _mm_load_si128((__m128i*)carrier_ptr); CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(x, mult1, realx, imagx) CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy) CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_bb_signal_sample, imag_bb_signal_sample) //Get early values y = _mm_load_si128((__m128i*)E_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) E_code_acc = _mm_add_ps (E_code_acc, output_ps_1); E_code_acc = _mm_add_ps (E_code_acc, output_ps_2); //Get prompt values y = _mm_load_si128((__m128i*)P_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) P_code_acc = _mm_add_ps (P_code_acc, output_ps_1); P_code_acc = _mm_add_ps (P_code_acc, output_ps_2); //Get late values y = _mm_load_si128((__m128i*)L_code_ptr); CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) L_code_acc = _mm_add_ps (L_code_acc, output_ps_1); L_code_acc = _mm_add_ps (L_code_acc, output_ps_2); input_ptr += 8; carrier_ptr += 8; E_code_ptr += 8; P_code_ptr += 8; L_code_ptr += 8; } __VOLK_ATTR_ALIGNED(16) lv_32fc_t E_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t P_dotProductVector[2]; __VOLK_ATTR_ALIGNED(16) lv_32fc_t L_dotProductVector[2]; _mm_store_ps((float*)E_dotProductVector,E_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)P_dotProductVector,P_code_acc); // Store the results back into the dot product vector _mm_store_ps((float*)L_dotProductVector,L_code_acc); // Store the results back into the dot product vector for (unsigned int i = 0; i<2; ++i) { *E_out_ptr += E_dotProductVector[i]; *P_out_ptr += P_dotProductVector[i]; *L_out_ptr += L_dotProductVector[i]; } } lv_8sc_t bb_signal_sample; for(unsigned int i=0; i < num_points%8; ++i) { //Perform the carrier wipe-off bb_signal_sample = (*input_ptr++) * (*carrier_ptr++); // Now get early, late, and prompt values for each *E_out_ptr += (lv_32fc_t) (bb_signal_sample * (*E_code_ptr++)); *P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++)); *L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++)); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation \param input The input signal input \param carrier The carrier signal input \param E_code Early PRN code replica input \param P_code Early PRN code replica input \param L_code Early PRN code replica input \param E_out Early correlation output \param P_out Early correlation output \param L_out Early correlation output \param num_points The number of complex values in vectors */ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_generic(lv_32fc_t* E_out, lv_32fc_t* P_out, lv_32fc_t* L_out, const lv_8sc_t* input, const lv_8sc_t* carrier, const lv_8sc_t* E_code, const lv_8sc_t* P_code, const lv_8sc_t* L_code, unsigned int num_points) { lv_8sc_t bb_signal_sample; bb_signal_sample = lv_cmake(0, 0); *E_out = 0; *P_out = 0; *L_out = 0; // perform Early, Prompt and Late correlation for(unsigned int i=0; i < num_points; ++i) { //Perform the carrier wipe-off bb_signal_sample = input[i] * carrier[i]; // Now get early, late, and prompt values for each *E_out += (lv_32fc_t) (bb_signal_sample * E_code[i]); *P_out += (lv_32fc_t) (bb_signal_sample * P_code[i]); *L_out += (lv_32fc_t) (bb_signal_sample * L_code[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_H */ ././@LongLink0000644000000000000000000000017200000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_convert_16ic.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssd0000644000175000017500000002574112576764164033746 0ustar carlescarles/*! * \file volk_gnsssdr_32fc_convert_16ic.h * \brief Volk protokernel: converts float32 complex values to 16 integer complex values taking care of overflow * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_volk_gnsssdr_32fc_convert_16ic_u_H #define INCLUDED_volk_gnsssdr_32fc_convert_16ic_u_H #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_16ic_u_sse2(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){ const unsigned int sse_iters = num_points/4; float* inputVectorPtr = (float*)inputVector; int16_t* outputVectorPtr = (int16_t*)outputVector; float min_val = -32768; float max_val = 32767; __m128 inputVal1, inputVal2; __m128i intInputVal1, intInputVal2; __m128 ret1, ret2; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++){ inputVal1 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); _mm_storeu_si128((__m128i*)outputVectorPtr, intInputVal1); outputVectorPtr += 8; } for(unsigned int i = 0; i < (num_points%4)*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_SSE #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_16ic_u_sse(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){ const unsigned int sse_iters = num_points/4; float* inputVectorPtr = (float*)inputVector; int16_t* outputVectorPtr = (int16_t*)outputVector; float min_val = -32768; float max_val = 32767; __m128 inputVal1, inputVal2; __m128i intInputVal1, intInputVal2; __m128 ret1, ret2; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++){ inputVal1 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4; // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); _mm_storeu_si128((__m128i*)outputVectorPtr, intInputVal1); outputVectorPtr += 8; } for(unsigned int i = 0; i < (num_points%4)*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_SSE */ #ifdef LV_HAVE_GENERIC /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_16ic_generic(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){ float* inputVectorPtr = (float*)inputVector; int16_t* outputVectorPtr = (int16_t*)outputVector; float min_val = -32768; float max_val = 32767; for(unsigned int i = 0; i < num_points*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_convert_16ic_u_H */ #ifndef INCLUDED_volk_gnsssdr_32fc_convert_16ic_a_H #define INCLUDED_volk_gnsssdr_32fc_convert_16ic_a_H #include #include #include #include #ifdef LV_HAVE_SSE2 #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse2(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){ const unsigned int sse_iters = num_points/4; float* inputVectorPtr = (float*)inputVector; int16_t* outputVectorPtr = (int16_t*)outputVector; float min_val = -32768; float max_val = 32767; __m128 inputVal1, inputVal2; __m128i intInputVal1, intInputVal2; __m128 ret1, ret2; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++) { inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); _mm_store_si128((__m128i*)outputVectorPtr, intInputVal1); outputVectorPtr += 8; } for(unsigned int i = 0; i < (num_points%4)*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_SSE #include /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) { const unsigned int sse_iters = num_points/4; float* inputVectorPtr = (float*)inputVector; int16_t* outputVectorPtr = (int16_t*)outputVector; float min_val = -32768; float max_val = 32767; __m128 inputVal1, inputVal2; __m128i intInputVal1, intInputVal2; __m128 ret1, ret2; __m128 vmin_val = _mm_set_ps1(min_val); __m128 vmax_val = _mm_set_ps1(max_val); for(unsigned int i = 0;i < sse_iters; i++) { inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4; // Clip ret1 = _mm_max_ps(_mm_min_ps(inputVal1, vmax_val), vmin_val); ret2 = _mm_max_ps(_mm_min_ps(inputVal2, vmax_val), vmin_val); intInputVal1 = _mm_cvtps_epi32(ret1); intInputVal2 = _mm_cvtps_epi32(ret2); intInputVal1 = _mm_packs_epi32(intInputVal1, intInputVal2); _mm_store_si128((__m128i*)outputVectorPtr, intInputVal1); outputVectorPtr += 8; } for(unsigned int i = 0; i < (num_points%4)*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_SSE */ #ifdef LV_HAVE_GENERIC /*! \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) \param inputVector The floating point input data buffer \param outputVector The 16 bit output data buffer \param num_points The number of data values to be converted */ static inline void volk_gnsssdr_32fc_convert_16ic_a_generic(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) { float* inputVectorPtr = (float*)inputVector; int16_t* outputVectorPtr = (int16_t*)outputVector; float min_val = -32768; float max_val = 32767; for(unsigned int i = 0; i < num_points*2; i++) { if(inputVectorPtr[i] > max_val) inputVectorPtr[i] = max_val; else if(inputVectorPtr[i] < min_val) inputVectorPtr[i] = min_val; outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); } } #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_convert_16ic_a_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/0000755000175000017500000000000012576764164031335 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/README.txt0000644000175000017500000000630512576764164033037 0ustar carlescarles#################################################################### Common Macros inside volk_gnsssdr module #################################################################### First of all, sorry for making you need to read this: macros are evil, they can not be debugged, you do not know where the errors come from, syntax is annoying.. BUT this is the only way I found that allows to share one piece of code between various proto-kernels without performance penalties. Inline functions have been tested, and they introduce a really small time penalty, but it becomes huge because of long loops, with thousands of samples. #################################################################### Syntax #################################################################### In order to allow better understanding of the code we created the macros with a specific syntax: 1) Inside CommonMacros.h you will find macros for common operations. we will explain the syntax with an example: example: CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output) First of all, you find the characters "CM", which means CommonMacros. After that the type and the amount of inputs is placed: "_16IC_X4" (16 bits complex integers, four inputs). The syntax for type is the same as the one used with volk protokernels, refer to GNURadio documentation for more help. The it comes the name of the macro ("_SCALAR_PRODUCT"), and after that the type and the amount of outputs ("_16IC_X2"). Finally it is placed the SSE minimum version needed to run ("_U_SSE2"). In the arguments you will find (from left to right) the inputs (four inputs: realx, imagx, realy, imagy), some variables that the macro needs to work (realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy) and finally the outputs (two outputs: real_output, imag_output). The variables that the macro needs are specified when calling it in order to avoid after-compile problems: if you want to use a macro you will need to declare all the variables it needs before, or you will not be able to compile. 2) Inside all the other headers, CommonMacros_XXXXXX.h you will find macros for a specific group of proto-kernels. The syntax is the same as the CommonMacros.h #################################################################### Workflow #################################################################### In order to use the macros easily, we usually test the code without macros inside a testing proto-kernel, where you are able to test it, debug it and use breakpoints. When it works we place code inside a macro an I test it again. #################################################################### Why macros #################################################################### 1) They are the only way we could find for sharing code between proto-kernels without performance penalty. 2) It is true that they are really difficult to debug, but if you work with them responsibly it is not so hard. Volk_gnsssdr checks all the SSE proto-kernels implementations results against the generic implementation results, so if your macro is not working you will appreciate it after profiling it.././@LongLink0000644000000000000000000000017500000000000011606 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/CommonMacro0000644000175000017500000001327112576764164033476 0ustar carlescarles/*! * \file CommonMacros_8ic_cw_corr_32fc.h * \brief Common macros used inside the 8ic_cw_corr_32fc volk protokernels. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_CommonMacros_8ic_cw_corr_32fc_u_H #define INCLUDED_gnsssdr_CommonMacros_8ic_cw_corr_32fc_u_H #include "CommonMacros/CommonMacros.h" #ifdef LV_HAVE_SSE4_1 /*! \brief Macros for U_SSE4_1 */ #ifndef CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1 #define CM_8IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps)\ CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy)\ CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(real_bb_signal_sample, imag_bb_signal_sample, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output)\ \ imag_output = _mm_slli_si128 (imag_output, 1);\ output = _mm_blendv_epi8 (imag_output, real_output, mult1);\ \ CM_8IC_CONVERT_AND_ACC_32FC_U_SSE4_1(output, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps) #endif /* CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1 */ #ifndef CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1 #define CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, minus128, minus128control, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps)\ CM_8IC_CONTROLMINUS128_8IC_U_SSE2(y, minus128, minus128control)\ CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output)\ CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(real_output, input_i_1, input_i_2, output_i32, real_output_ps)\ CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(imag_output, input_i_1, input_i_2, output_i32, imag_output_ps) #endif /* CM_8IC_X2_CW_CORR_SAFE_32FC_X2_U_SSE4_1 */ #ifndef CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1 #define CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps)\ CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, bb_signal_sample_aux, check_sign_sequence, rearrange_sequence, y_aux, bb_signal_sample_aux_abs, real_output, imag_output)\ CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(real_output, input_i_1, input_i_2, output_i32, real_output_ps)\ CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(imag_output, input_i_1, input_i_2, output_i32, imag_output_ps) #endif /* CM_8IC_X2_CW_CORR_UNSAFE_32FC_X2_U_SSE4_1 */ #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 /*! \brief Macros for U_SSE2 */ #ifndef CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2 #define CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2(y, mult1, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2)\ CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(y, mult1, realy, imagy)\ CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(real_bb_signal_sample, imag_bb_signal_sample, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output)\ \ real_output = _mm_and_si128 (real_output, mult1);\ imag_output = _mm_and_si128 (imag_output, mult1);\ imag_output = _mm_slli_si128 (imag_output, 1);\ output = _mm_or_si128 (real_output, imag_output);\ \ CM_8IC_CONVERT_AND_ACC_32FC_U_SSE2(output, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2) #endif /* CM_8IC_X2_CW_CORR_32FC_X2_U_SSE2 */ #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Macros for U_GENERIC */ #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_CommonMacros_8ic_cw_corr_32fc_u_H */ #ifndef INCLUDED_gnsssdr_CommonMacros_8ic_cw_corr_32fc_a_H #define INCLUDED_gnsssdr_CommonMacros_8ic_cw_corr_32fc_a_H #ifdef LV_HAVE_SSE4_1 /*! \brief Macros for A_SSE4_1 */ #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Macros for A_GENERIC */ #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_CommonMacros_8ic_cw_corr_32fc_a_H */ ././@LongLink0000644000000000000000000000015000000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/CommonMacros.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/CommonMacro0000644000175000017500000001557012576764164033502 0ustar carlescarles/*! * \file CommonMacros.h * \brief Common macros used inside the volk protokernels. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_CommonMacros_u_H #define INCLUDED_gnsssdr_CommonMacros_u_H #ifdef LV_HAVE_SSE4_1 /*! \brief Macros for U_SSE4_1 */ #ifndef CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1 #define CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(input1, input2, real, imag)\ imag = _mm_srli_si128 (input1, 2);\ imag = _mm_blend_epi16 (input2, imag, 85);\ real = _mm_slli_si128 (input2, 2);\ real = _mm_blend_epi16 (real, input1, 85); #endif /* CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1 */ #ifndef CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1 #define CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(input, input_i_1, input_i_2, output_i32, output_ps)\ input_i_1 = _mm_cvtepi16_epi32(input);\ input = _mm_srli_si128 (input, 8);\ input_i_2 = _mm_cvtepi16_epi32(input);\ output_i32 = _mm_add_epi32 (input_i_1, input_i_2);\ output_ps = _mm_cvtepi32_ps(output_i32); #endif /* CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1 */ #ifndef CM_8IC_CONVERT_AND_ACC_32FC_U_SSE4_1 #define CM_8IC_CONVERT_AND_ACC_32FC_U_SSE4_1(input, input_i_1, input_i_2, output_i32, output_i32_1, output_i32_2, output_ps)\ input_i_1 = _mm_cvtepi8_epi32(input);\ input = _mm_srli_si128 (input, 4);\ input_i_2 = _mm_cvtepi8_epi32(input);\ input = _mm_srli_si128 (input, 4);\ output_i32_1 = _mm_add_epi32 (input_i_1, input_i_2);\ input_i_1 = _mm_cvtepi8_epi32(input);\ input = _mm_srli_si128 (input, 4);\ input_i_2 = _mm_cvtepi8_epi32(input);\ input = _mm_srli_si128 (input, 4);\ output_i32_2 = _mm_add_epi32 (input_i_1, input_i_2);\ output_i32 = _mm_add_epi32 (output_i32_1, output_i32_2);\ output_ps = _mm_cvtepi32_ps(output_i32); #endif /* CM_8IC_CONVERT_AND_ACC_32FC_U_SSE4_1 */ #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 /*! \brief Macros for U_SSE2 */ #ifdef LV_HAVE_SSSE3 /*! \brief Macros for U_SSSE3 */ #ifndef CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3 #define CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3(y, x, check_sign_sequence, rearrange_sequence, y_aux, x_abs, real_output, imag_output)\ y_aux = _mm_sign_epi8 (y, x);\ y_aux = _mm_sign_epi8 (y_aux, check_sign_sequence);\ real_output = _mm_maddubs_epi16 (x_abs, y_aux);\ \ y_aux = _mm_shuffle_epi8 (y, rearrange_sequence);\ y_aux = _mm_sign_epi8 (y_aux, x);\ imag_output = _mm_maddubs_epi16 (x_abs, y_aux); #endif /* CM_8IC_X2_SCALAR_PRODUCT_16IC_X2_U_SSSE3 */ #endif /* LV_HAVE_SSSE3 */ #ifndef CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2 #define CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output)\ realx_mult_realy = _mm_mullo_epi16 (realx, realy);\ imagx_mult_imagy = _mm_mullo_epi16 (imagx, imagy);\ realx_mult_imagy = _mm_mullo_epi16 (realx, imagy);\ imagx_mult_realy = _mm_mullo_epi16 (imagx, realy);\ real_output = _mm_sub_epi16 (realx_mult_realy, imagx_mult_imagy);\ imag_output = _mm_add_epi16 (realx_mult_imagy, imagx_mult_realy); #endif /* CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2 */ #ifndef CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2 #define CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2(input, mult1, real, imag)\ imag = _mm_srli_si128 (input, 1);\ imag = _mm_and_si128 (imag, mult1);\ real = _mm_and_si128 (input, mult1); #endif /* CM_8IC_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE2 */ #ifndef CM_8IC_CONVERT_AND_ACC_32FC_U_SSE2 #define CM_8IC_CONVERT_AND_ACC_32FC_U_SSE2(input, input_i_1, input_i_2, output_i32, output_ps_1, output_ps_2)\ input_i_1 = _mm_unpacklo_epi8(_mm_setzero_si128(), input);\ input_i_2 = _mm_unpacklo_epi16(_mm_setzero_si128(), input_i_1);\ input_i_1 = _mm_unpackhi_epi16(_mm_setzero_si128(), input_i_1);\ input_i_1 = _mm_srai_epi32(input_i_1, 24);\ input_i_2 = _mm_srai_epi32(input_i_2, 24);\ output_i32 = _mm_add_epi32(input_i_1, input_i_2);\ output_ps_1 = _mm_cvtepi32_ps(output_i32);\ \ input_i_1 = _mm_unpackhi_epi8(_mm_setzero_si128(), input);\ input_i_2 = _mm_unpacklo_epi16(_mm_setzero_si128(), input_i_1);\ input_i_1 = _mm_unpackhi_epi16(_mm_setzero_si128(), input_i_1);\ input_i_1 = _mm_srai_epi32(input_i_1, 24);\ input_i_2 = _mm_srai_epi32(input_i_2, 24);\ output_i32 = _mm_add_epi32(input_i_1, input_i_2);\ output_ps_2 = _mm_cvtepi32_ps(output_i32); #endif /* CM_8IC_CONVERT_AND_ACC_32FC_U_SSE2 */ #ifndef CM_8IC_CONTROLMINUS128_8IC_U_SSE2 #define CM_8IC_CONTROLMINUS128_8IC_U_SSE2(y, minus128, minus128control)\ minus128control = _mm_cmpeq_epi8 (y, minus128);\ y = _mm_sub_epi8 (y, minus128control); #endif /* CM_8IC_CONTROLMINUS128_8IC_U_SSE2 */ #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Macros for U_GENERIC */ #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_CommonMacros_u_H */ #ifndef INCLUDED_gnsssdr_CommonMacros_a_H #define INCLUDED_gnsssdr_CommonMacros_a_H #ifdef LV_HAVE_SSE4_1 /*! \brief Macros for A_SSE4_1 */ #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_SSE2 /*! \brief Macros for U_SSE2 */ #endif /* LV_HAVE_SSE2 */ #ifdef LV_HAVE_GENERIC /*! \brief Macros for A_GENERIC */ #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_CommonMacros_a_H */ ././@LongLink0000644000000000000000000000017600000000000011607 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/CommonMacros/CommonMacro0000644000175000017500000000567112576764164033503 0ustar carlescarles/*! * \file CommonMacros_16ic_cw_corr_32fc.h * \brief Common macros used inside the 16ic_cw_corr_32fc volk protokernels. * \authors
      *
    • Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef INCLUDED_gnsssdr_CommonMacros_16ic_cw_corr_32fc_u_H #define INCLUDED_gnsssdr_CommonMacros_16ic_cw_corr_32fc_u_H #include "CommonMacros/CommonMacros.h" #ifdef LV_HAVE_SSE4_1 /*! \brief Macros for U_SSE4_1 */ #ifndef CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1 #define CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1(y1, y2, realy, imagy, real_bb_signal_sample, imag_bb_signal_sample,realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output, input_i_1, input_i_2, output_i32, real_output_ps, imag_output_ps)\ CM_16IC_X2_REARRANGE_VECTOR_INTO_REAL_IMAG_16IC_X2_U_SSE4_1(y1, y2, realy, imagy)\ CM_16IC_X4_SCALAR_PRODUCT_16IC_X2_U_SSE2(real_bb_signal_sample, imag_bb_signal_sample, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, real_output, imag_output)\ CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(real_output, input_i_1, input_i_2, output_i32, real_output_ps)\ CM_16IC_CONVERT_AND_ACC_32FC_U_SSE4_1(imag_output, input_i_1, input_i_2, output_i32, imag_output_ps) #endif /* CM_16IC_X2_CW_CORR_32FC_X2_U_SSE4_1 */ #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Macros for U_GENERIC */ #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_CommonMacros_16ic_cw_corr_32fc_u_H */ #ifndef INCLUDED_gnsssdr_CommonMacros_16ic_cw_corr_32fc_a_H #define INCLUDED_gnsssdr_CommonMacros_16ic_cw_corr_32fc_a_H #ifdef LV_HAVE_SSE4_1 /*! \brief Macros for A_SSE4_1 */ #endif /* LV_HAVE_SSE4_1 */ #ifdef LV_HAVE_GENERIC /*! \brief Macros for A_GENERIC */ #endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_gnsssdr_CommonMacros_16ic_cw_corr_32fc_a_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/0000755000175000017500000000000012576764164026355 5ustar carlescarles././@LongLink0000644000000000000000000000015000000000000011577 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/CMakeParseArgumentsCopy.cmakegnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/CMakeParseArgumentsCopy.cm0000644000175000017500000001340312576764164033373 0ustar carlescarles# CMAKE_PARSE_ARGUMENTS( args...) # # CMAKE_PARSE_ARGUMENTS() is intended to be used in macros or functions for # parsing the arguments given to that macro or function. # It processes the arguments and defines a set of variables which hold the # values of the respective options. # # The argument contains all options for the respective macro, # i.e. keywords which can be used when calling the macro without any value # following, like e.g. the OPTIONAL keyword of the install() command. # # The argument contains all keywords for this macro # which are followed by one value, like e.g. DESTINATION keyword of the # install() command. # # The argument contains all keywords for this macro # which can be followed by more than one value, like e.g. the TARGETS or # FILES keywords of the install() command. # # When done, CMAKE_PARSE_ARGUMENTS() will have defined for each of the # keywords listed in , and # a variable composed of the given # followed by "_" and the name of the respective keyword. # These variables will then hold the respective value from the argument list. # For the keywords this will be TRUE or FALSE. # # All remaining arguments are collected in a variable # _UNPARSED_ARGUMENTS, this can be checked afterwards to see whether # your macro was called with unrecognized parameters. # # As an example here a my_install() macro, which takes similar arguments as the # real install() command: # # function(MY_INSTALL) # set(options OPTIONAL FAST) # set(oneValueArgs DESTINATION RENAME) # set(multiValueArgs TARGETS CONFIGURATIONS) # cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # ... # # Assume my_install() has been called like this: # my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub) # # After the cmake_parse_arguments() call the macro will have set the following # variables: # MY_INSTALL_OPTIONAL = TRUE # MY_INSTALL_FAST = FALSE (this option was not used when calling my_install() # MY_INSTALL_DESTINATION = "bin" # MY_INSTALL_RENAME = "" (was not used) # MY_INSTALL_TARGETS = "foo;bar" # MY_INSTALL_CONFIGURATIONS = "" (was not used) # MY_INSTALL_UNPARSED_ARGUMENTS = "blub" (no value expected after "OPTIONAL" # # You can the continue and process these variables. # # Keywords terminate lists of values, e.g. if directly after a one_value_keyword # another recognized keyword follows, this is interpreted as the beginning of # the new option. # E.g. my_install(TARGETS foo DESTINATION OPTIONAL) would result in # MY_INSTALL_DESTINATION set to "OPTIONAL", but MY_INSTALL_DESTINATION would # be empty and MY_INSTALL_OPTIONAL would be set to TRUE therefor. #============================================================================= # Copyright 2010 Alexander Neundorf # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) if(__CMAKE_PARSE_ARGUMENTS_INCLUDED) return() endif() set(__CMAKE_PARSE_ARGUMENTS_INCLUDED TRUE) function(CMAKE_PARSE_ARGUMENTS prefix _optionNames _singleArgNames _multiArgNames) # first set all result variables to empty/FALSE foreach(arg_name ${_singleArgNames} ${_multiArgNames}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${_optionNames}) set(${prefix}_${option} FALSE) endforeach(option) set(${prefix}_UNPARSED_ARGUMENTS) set(insideValues FALSE) set(currentArgName) # now iterate over all arguments and fill the result variables foreach(currentArg ${ARGN}) list(FIND _optionNames "${currentArg}" optionIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _singleArgNames "${currentArg}" singleArgIndex) # ... then this marks the end of the arguments belonging to this keyword list(FIND _multiArgNames "${currentArg}" multiArgIndex) # ... then this marks the end of the arguments belonging to this keyword if(${optionIndex} EQUAL -1 AND ${singleArgIndex} EQUAL -1 AND ${multiArgIndex} EQUAL -1) if(insideValues) if("${insideValues}" STREQUAL "SINGLE") set(${prefix}_${currentArgName} ${currentArg}) set(insideValues FALSE) elseif("${insideValues}" STREQUAL "MULTI") list(APPEND ${prefix}_${currentArgName} ${currentArg}) endif() else(insideValues) list(APPEND ${prefix}_UNPARSED_ARGUMENTS ${currentArg}) endif(insideValues) else() if(NOT ${optionIndex} EQUAL -1) set(${prefix}_${currentArg} TRUE) set(insideValues FALSE) elseif(NOT ${singleArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "SINGLE") elseif(NOT ${multiArgIndex} EQUAL -1) set(currentArgName ${currentArg}) set(${prefix}_${currentArgName}) set(insideValues "MULTI") endif() endif() endforeach(currentArg) # propagate the result variables to the caller: foreach(arg_name ${_singleArgNames} ${_multiArgNames} ${_optionNames}) set(${prefix}_${arg_name} ${${prefix}_${arg_name}} PARENT_SCOPE) endforeach(arg_name) set(${prefix}_UNPARSED_ARGUMENTS ${${prefix}_UNPARSED_ARGUMENTS} PARENT_SCOPE) endfunction(CMAKE_PARSE_ARGUMENTS _options _singleArgs _multiArgs) gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/msvc/0000755000175000017500000000000012576764164027325 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/msvc/config.h0000644000175000017500000000474512576764164030755 0ustar carlescarles#ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_CONFIG_H_ // [ #define _MSC_CONFIG_H_ //////////////////////////////////////////////////////////////////////// // enable inline functions for C code //////////////////////////////////////////////////////////////////////// #ifndef __cplusplus # define inline __inline #endif //////////////////////////////////////////////////////////////////////// // signed size_t //////////////////////////////////////////////////////////////////////// #include typedef ptrdiff_t ssize_t; //////////////////////////////////////////////////////////////////////// // rint functions //////////////////////////////////////////////////////////////////////// #include static inline long lrint(double x){return (long)(x > 0.0 ? x + 0.5 : x - 0.5);} static inline long lrintf(float x){return (long)(x > 0.0f ? x + 0.5f : x - 0.5f);} static inline long long llrint(double x){return (long long)(x > 0.0 ? x + 0.5 : x - 0.5);} static inline long long llrintf(float x){return (long long)(x > 0.0f ? x + 0.5f : x - 0.5f);} static inline double rint(double x){return (x > 0.0)? floor(x + 0.5) : ceil(x - 0.5);} static inline float rintf(float x){return (x > 0.0f)? floorf(x + 0.5f) : ceilf(x - 0.5f);} //////////////////////////////////////////////////////////////////////// // math constants //////////////////////////////////////////////////////////////////////// #define INFINITY HUGE_VAL # define M_E 2.7182818284590452354 /* e */ # define M_LOG2E 1.4426950408889634074 /* log_2 e */ # define M_LOG10E 0.43429448190325182765 /* log_10 e */ # define M_LN2 0.69314718055994530942 /* log_e 2 */ # define M_LN10 2.30258509299404568402 /* log_e 10 */ # define M_PI 3.14159265358979323846 /* pi */ # define M_PI_2 1.57079632679489661923 /* pi/2 */ # define M_PI_4 0.78539816339744830962 /* pi/4 */ # define M_1_PI 0.31830988618379067154 /* 1/pi */ # define M_2_PI 0.63661977236758134308 /* 2/pi */ # define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ # define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ # define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ //////////////////////////////////////////////////////////////////////// // random and srandom //////////////////////////////////////////////////////////////////////// #include static inline long int random (void) { return rand(); } static inline void srandom (unsigned int seed) { srand(seed); } #endif // _MSC_CONFIG_H_ ] gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/msvc/stdint.h0000644000175000017500000001713012576764164031005 0ustar carlescarles// ISO C9x compliant stdint.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006-2008 Alexander Chemeris // // 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 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. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_STDINT_H_ // [ #define _MSC_STDINT_H_ #if _MSC_VER > 1000 #pragma once #endif #include // For Visual Studio 6 in C++ mode and for many Visual Studio versions when // compiling for ARM we should wrap include with 'extern "C++" {}' // or compiler give many errors like this: // error C2733: second C linkage of overloaded function 'wmemchr' not allowed #ifdef __cplusplus extern "C" { #endif # include #ifdef __cplusplus } #endif // Define _W64 macros to mark types changing their size, like intptr_t. #ifndef _W64 # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 # define _W64 __w64 # else # define _W64 # endif #endif // 7.18.1 Integer types // 7.18.1.1 Exact-width integer types // Visual Studio 6 and Embedded Visual C++ 4 doesn't // realize that, e.g. char has the same size as __int8 // so we give up on __intX for them. #if (_MSC_VER < 1300) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else typedef signed __int8 int8_t; typedef signed __int16 int16_t; typedef signed __int32 int32_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; // 7.18.1.2 Minimum-width integer types typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; // 7.18.1.3 Fastest minimum-width integer types typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; // 7.18.1.4 Integer types capable of holding object pointers #ifdef _WIN64 // [ typedef signed __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else // _WIN64 ][ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; #endif // _WIN64 ] // 7.18.1.5 Greatest-width integer types typedef int64_t intmax_t; typedef uint64_t uintmax_t; // 7.18.2 Limits of specified-width integer types #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 // 7.18.2.1 Limits of exact-width integer types #define INT8_MIN ((int8_t)_I8_MIN) #define INT8_MAX _I8_MAX #define INT16_MIN ((int16_t)_I16_MIN) #define INT16_MAX _I16_MAX #define INT32_MIN ((int32_t)_I32_MIN) #define INT32_MAX _I32_MAX #define INT64_MIN ((int64_t)_I64_MIN) #define INT64_MAX _I64_MAX #define UINT8_MAX _UI8_MAX #define UINT16_MAX _UI16_MAX #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX // 7.18.2.2 Limits of minimum-width integer types #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX // 7.18.2.3 Limits of fastest minimum-width integer types #define INT_FAST8_MIN INT8_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MIN INT16_MIN #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MIN INT64_MIN #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX // 7.18.2.4 Limits of integer types capable of holding object pointers #ifdef _WIN64 // [ # define INTPTR_MIN INT64_MIN # define INTPTR_MAX INT64_MAX # define UINTPTR_MAX UINT64_MAX #else // _WIN64 ][ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX #endif // _WIN64 ] // 7.18.2.5 Limits of greatest-width integer types #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX // 7.18.3 Limits of other integer types #ifdef _WIN64 // [ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX #else // _WIN64 ][ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX #endif // _WIN64 ] #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX #ifndef SIZE_MAX // [ # ifdef _WIN64 // [ # define SIZE_MAX _UI64_MAX # else // _WIN64 ][ # define SIZE_MAX _UI32_MAX # endif // _WIN64 ] #endif // SIZE_MAX ] // WCHAR_MIN and WCHAR_MAX are also defined in #ifndef WCHAR_MIN // [ # define WCHAR_MIN 0 #endif // WCHAR_MIN ] #ifndef WCHAR_MAX // [ # define WCHAR_MAX _UI16_MAX #endif // WCHAR_MAX ] #define WINT_MIN 0 #define WINT_MAX _UI16_MAX #endif // __STDC_LIMIT_MACROS ] // 7.18.4 Limits of other integer types #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 // 7.18.4.1 Macros for minimum-width integer constants #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 #define INT32_C(val) val##i32 #define INT64_C(val) val##i64 #define UINT8_C(val) val##ui8 #define UINT16_C(val) val##ui16 #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 // 7.18.4.2 Macros for greatest-width integer constants #ifndef INTMAX_C #define INTMAX_C INT64_C #endif #ifndef UINTMAX_C #define UINTMAX_C UINT64_C #endif #endif // __STDC_CONSTANT_MACROS ] #endif // _MSC_STDINT_H_ ] gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/msvc/stdbool.h0000644000175000017500000000241312576764164031144 0ustar carlescarles/* * Copyright (C) 2005, 2006 Apple Computer, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #ifndef STDBOOL_WIN32_H #define STDBOOL_WIN32_H #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef __cplusplus typedef unsigned char bool; #define true 1 #define false 0 #ifndef CASSERT #define CASSERT(exp, name) typedef int dummy##name [(exp) ? 1 : -1]; #endif CASSERT(sizeof(bool) == 1, bool_is_one_byte) CASSERT(true, true_is_true) CASSERT(!false, false_is_false) #endif #endif gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/msvc/inttypes.h0000644000175000017500000001727112576764164031365 0ustar carlescarles// ISO C9x compliant inttypes.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006 Alexander Chemeris // // 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 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. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_INTTYPES_H_ // [ #define _MSC_INTTYPES_H_ #if _MSC_VER > 1000 #pragma once #endif #include // 7.8 Format conversion of integer types typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; // 7.8.1 Macros for format specifiers // The fprintf macros for signed integers are: #define PRId8 "d" #define PRIi8 "i" #define PRIdLEAST8 "d" #define PRIiLEAST8 "i" #define PRIdFAST8 "d" #define PRIiFAST8 "i" #define PRId16 "hd" #define PRIi16 "hi" #define PRIdLEAST16 "hd" #define PRIiLEAST16 "hi" #define PRIdFAST16 "hd" #define PRIiFAST16 "hi" #define PRId32 "I32d" #define PRIi32 "I32i" #define PRIdLEAST32 "I32d" #define PRIiLEAST32 "I32i" #define PRIdFAST32 "I32d" #define PRIiFAST32 "I32i" #define PRId64 "I64d" #define PRIi64 "I64i" #define PRIdLEAST64 "I64d" #define PRIiLEAST64 "I64i" #define PRIdFAST64 "I64d" #define PRIiFAST64 "I64i" #define PRIdMAX "I64d" #define PRIiMAX "I64i" #define PRIdPTR "Id" #define PRIiPTR "Ii" // The fprintf macros for unsigned integers are: #define PRIo8 "o" #define PRIu8 "u" #define PRIx8 "x" #define PRIX8 "X" #define PRIoLEAST8 "o" #define PRIuLEAST8 "u" #define PRIxLEAST8 "x" #define PRIXLEAST8 "X" #define PRIoFAST8 "o" #define PRIuFAST8 "u" #define PRIxFAST8 "x" #define PRIXFAST8 "X" #define PRIo16 "ho" #define PRIu16 "hu" #define PRIx16 "hx" #define PRIX16 "hX" #define PRIoLEAST16 "ho" #define PRIuLEAST16 "hu" #define PRIxLEAST16 "hx" #define PRIXLEAST16 "hX" #define PRIoFAST16 "ho" #define PRIuFAST16 "hu" #define PRIxFAST16 "hx" #define PRIXFAST16 "hX" #define PRIo32 "I32o" #define PRIu32 "I32u" #define PRIx32 "I32x" #define PRIX32 "I32X" #define PRIoLEAST32 "I32o" #define PRIuLEAST32 "I32u" #define PRIxLEAST32 "I32x" #define PRIXLEAST32 "I32X" #define PRIoFAST32 "I32o" #define PRIuFAST32 "I32u" #define PRIxFAST32 "I32x" #define PRIXFAST32 "I32X" #define PRIo64 "I64o" #define PRIu64 "I64u" #define PRIx64 "I64x" #define PRIX64 "I64X" #define PRIoLEAST64 "I64o" #define PRIuLEAST64 "I64u" #define PRIxLEAST64 "I64x" #define PRIXLEAST64 "I64X" #define PRIoFAST64 "I64o" #define PRIuFAST64 "I64u" #define PRIxFAST64 "I64x" #define PRIXFAST64 "I64X" #define PRIoMAX "I64o" #define PRIuMAX "I64u" #define PRIxMAX "I64x" #define PRIXMAX "I64X" #define PRIoPTR "Io" #define PRIuPTR "Iu" #define PRIxPTR "Ix" #define PRIXPTR "IX" // The fscanf macros for signed integers are: #define SCNd8 "d" #define SCNi8 "i" #define SCNdLEAST8 "d" #define SCNiLEAST8 "i" #define SCNdFAST8 "d" #define SCNiFAST8 "i" #define SCNd16 "hd" #define SCNi16 "hi" #define SCNdLEAST16 "hd" #define SCNiLEAST16 "hi" #define SCNdFAST16 "hd" #define SCNiFAST16 "hi" #define SCNd32 "ld" #define SCNi32 "li" #define SCNdLEAST32 "ld" #define SCNiLEAST32 "li" #define SCNdFAST32 "ld" #define SCNiFAST32 "li" #define SCNd64 "I64d" #define SCNi64 "I64i" #define SCNdLEAST64 "I64d" #define SCNiLEAST64 "I64i" #define SCNdFAST64 "I64d" #define SCNiFAST64 "I64i" #define SCNdMAX "I64d" #define SCNiMAX "I64i" #ifdef _WIN64 // [ # define SCNdPTR "I64d" # define SCNiPTR "I64i" #else // _WIN64 ][ # define SCNdPTR "ld" # define SCNiPTR "li" #endif // _WIN64 ] // The fscanf macros for unsigned integers are: #define SCNo8 "o" #define SCNu8 "u" #define SCNx8 "x" #define SCNX8 "X" #define SCNoLEAST8 "o" #define SCNuLEAST8 "u" #define SCNxLEAST8 "x" #define SCNXLEAST8 "X" #define SCNoFAST8 "o" #define SCNuFAST8 "u" #define SCNxFAST8 "x" #define SCNXFAST8 "X" #define SCNo16 "ho" #define SCNu16 "hu" #define SCNx16 "hx" #define SCNX16 "hX" #define SCNoLEAST16 "ho" #define SCNuLEAST16 "hu" #define SCNxLEAST16 "hx" #define SCNXLEAST16 "hX" #define SCNoFAST16 "ho" #define SCNuFAST16 "hu" #define SCNxFAST16 "hx" #define SCNXFAST16 "hX" #define SCNo32 "lo" #define SCNu32 "lu" #define SCNx32 "lx" #define SCNX32 "lX" #define SCNoLEAST32 "lo" #define SCNuLEAST32 "lu" #define SCNxLEAST32 "lx" #define SCNXLEAST32 "lX" #define SCNoFAST32 "lo" #define SCNuFAST32 "lu" #define SCNxFAST32 "lx" #define SCNXFAST32 "lX" #define SCNo64 "I64o" #define SCNu64 "I64u" #define SCNx64 "I64x" #define SCNX64 "I64X" #define SCNoLEAST64 "I64o" #define SCNuLEAST64 "I64u" #define SCNxLEAST64 "I64x" #define SCNXLEAST64 "I64X" #define SCNoFAST64 "I64o" #define SCNuFAST64 "I64u" #define SCNxFAST64 "I64x" #define SCNXFAST64 "I64X" #define SCNoMAX "I64o" #define SCNuMAX "I64u" #define SCNxMAX "I64x" #define SCNXMAX "I64X" #ifdef _WIN64 // [ # define SCNoPTR "I64o" # define SCNuPTR "I64u" # define SCNxPTR "I64x" # define SCNXPTR "I64X" #else // _WIN64 ][ # define SCNoPTR "lo" # define SCNuPTR "lu" # define SCNxPTR "lx" # define SCNXPTR "lX" #endif // _WIN64 ] // 7.8.2 Functions for greatest-width integer types // 7.8.2.1 The imaxabs function #define imaxabs _abs64 // 7.8.2.2 The imaxdiv function // This is modified version of div() function from Microsoft's div.c found // in %MSVC.NET%\crt\src\div.c #ifdef STATIC_IMAXDIV // [ static #else // STATIC_IMAXDIV ][ _inline #endif // STATIC_IMAXDIV ] imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) { imaxdiv_t result; result.quot = numer / denom; result.rem = numer % denom; if (numer < 0 && result.rem > 0) { // did division wrong; must fix up ++result.quot; result.rem -= denom; } return result; } // 7.8.2.3 The strtoimax and strtoumax functions #define strtoimax _strtoi64 #define strtoumax _strtoui64 // 7.8.2.4 The wcstoimax and wcstoumax functions #define wcstoimax _wcstoi64 #define wcstoumax _wcstoui64 #endif // _MSC_INTTYPES_H_ ] gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/cmake_uninstall.cmake.in0000644000175000017500000000201212576764164033130 0ustar carlescarlesif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") foreach(file ${files}) message(STATUS "Uninstalling $ENV{DESTDIR}${file}") if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") exec_program( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") endif(NOT "${rm_retval}" STREQUAL 0) else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File $ENV{DESTDIR}${file} does not exist.") endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") endforeach(file)gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/VolkBoost.cmake0000644000175000017500000000754512576764164031314 0ustar carlescarles# Copyright 2010-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_VOLK_BOOST_CMAKE) return() endif() set(__INCLUDED_VOLK_BOOST_CMAKE TRUE) ######################################################################## # Setup Boost and handle some system specific things ######################################################################## set(BOOST_REQUIRED_COMPONENTS filesystem system unit_test_framework program_options ) if(UNIX AND NOT BOOST_ROOT AND EXISTS "/usr/lib64") list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix endif(UNIX AND NOT BOOST_ROOT AND EXISTS "/usr/lib64") if(MSVC) set(BOOST_REQUIRED_COMPONENTS ${BOOST_REQUIRED_COMPONENTS} chrono) if (NOT DEFINED BOOST_ALL_DYN_LINK) set(BOOST_ALL_DYN_LINK TRUE) endif() set(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking") if(BOOST_ALL_DYN_LINK) add_definitions(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc else(BOOST_ALL_DYN_LINK) unset(BOOST_REQUIRED_COMPONENTS) #empty components list for static link endif(BOOST_ALL_DYN_LINK) endif(MSVC) find_package(Boost "1.35" COMPONENTS ${BOOST_REQUIRED_COMPONENTS}) # This does not allow us to disable specific versions. It is used # internally by cmake to know the formation newer versions. As newer # Boost version beyond what is shown here are produced, we must extend # this list. To disable Boost versions, see below. set(Boost_ADDITIONAL_VERSIONS "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39" "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44" "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49" "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54" "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59" "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64" "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69" ) # Boost 1.52 disabled, see https://svn.boost.org/trac/boost/ticket/7669 # Similar problems with Boost 1.46 and 1.47. OPTION(ENABLE_BAD_BOOST "Enable known bad versions of Boost" OFF) if(ENABLE_BAD_BOOST) MESSAGE(STATUS "Enabling use of known bad versions of Boost.") endif(ENABLE_BAD_BOOST) # For any unsuitable Boost version, add the version number below in # the following format: XXYYZZ # Where: # XX is the major version ('10' for version 1) # YY is the minor version number ('46' for 1.46) # ZZ is the patcher version number (typically just '00') set(Boost_NOGO_VERSIONS 104600 104601 104700 105200 ) foreach(ver ${Boost_NOGO_VERSIONS}) if(${Boost_VERSION} EQUAL ${ver}) if(NOT ENABLE_BAD_BOOST) MESSAGE(STATUS "WARNING: Found a known bad version of Boost (v${Boost_VERSION}). Disabling.") set(Boost_FOUND FALSE) else(NOT ENABLE_BAD_BOOST) MESSAGE(STATUS "WARNING: Found a known bad version of Boost (v${Boost_VERSION}). Continuing anyway.") set(Boost_FOUND TRUE) endif(NOT ENABLE_BAD_BOOST) endif(${Boost_VERSION} EQUAL ${ver}) endforeach(ver) gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/VolkConfig.cmake0000644000175000017500000000117212576764164031421 0ustar carlescarlesINCLUDE(FindPkgConfig) PKG_CHECK_MODULES(PC_VOLK volk_gnsssdr) FIND_PATH( VOLK_INCLUDE_DIRS NAMES volk_gnsssdr/volk_gnsssdr.h HINTS $ENV{VOLK_DIR}/include ${PC_VOLK_INCLUDEDIR} PATHS /usr/local/include /usr/include ) FIND_LIBRARY( VOLK_LIBRARIES NAMES volk_gnsssdr HINTS $ENV{VOLK_DIR}/lib ${PC_VOLK_LIBDIR} PATHS /usr/local/lib /usr/local/lib64 /usr/lib /usr/lib64 ) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS) gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/FindORC.cmake0000644000175000017500000000207612576764164030610 0ustar carlescarlesFIND_PACKAGE(PkgConfig) PKG_CHECK_MODULES(PC_ORC "orc-0.4 > 0.4.11") FIND_PROGRAM(ORCC_EXECUTABLE orcc HINTS ${PC_ORC_TOOLSDIR} PATHS ${ORC_ROOT}/bin ${CMAKE_INSTALL_PREFIX}/bin) FIND_PATH(ORC_INCLUDE_DIR NAMES orc/orc.h HINTS ${PC_ORC_INCLUDEDIR} PATHS ${ORC_ROOT}/include/orc-0.4 ${CMAKE_INSTALL_PREFIX}/include/orc-0.4) FIND_PATH(ORC_LIBRARY_DIR NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX} HINTS ${PC_ORC_LIBDIR} PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) FIND_LIBRARY(ORC_LIB orc-0.4 HINTS ${PC_ORC_LIBRARY_DIRS} PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) LIST(APPEND ORC_LIBRARY ${ORC_LIB} ) SET(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR}) SET(ORC_LIBRARIES ${ORC_LIBRARY}) SET(ORC_LIBRARY_DIRS ${ORC_LIBRARY_DIR}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ORC "orc files" ORC_LIBRARY ORC_INCLUDE_DIR ORCC_EXECUTABLE) mark_as_advanced(ORC_INCLUDE_DIR ORC_LIBRARY ORCC_EXECUTABLE) gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Packaging/0000755000175000017500000000000012576764164030241 5ustar carlescarles././@LongLink0000644000000000000000000000016100000000000011601 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Packaging/volk_gnsssdr_profile-manpagegnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Packaging/volk_gnsssdr_pro0000644000175000017500000000515612576764164033571 0ustar carlescarles.\" Manpage for volk_gnsssdr_profile .\" Contact carles.fernandez@cttc.es to correct errors or typos. .TH volk_gnsssdr_profile 1 "02 Sep 2015" "0.0.6" "volk_gnsssdr_profile man page" .SH NAME \fBvolk_gnsssdr_profile\fR \- Profiler application for libvolk_gnsssdr functions. .SH SYNOPSIS \fBvolk_gnsssdr_profile\fR [OPTION] .SH DESCRIPTION The Vector-Optimized Library of Kernels of GNSS-SDR (VOLK_GNSSSDR) is a software library that provides developers with an interface to use Single Input - Multiple Data (SIMD) instructions, which are of special interest for operations that are in the receiver's critical path of the processing load. .TP Processors providing SIMD instruction sets compute with multiple processing elements that perform the same operation on multiple data points simultaneously, thus exploiting data-level parallelism, an can be found in most modern desktop and laptop personal computers. In a nutshell, VOLK_GNSSSDR implements in assembly language optimized versions of computationally-intensive operations for different processor architectures that are commonly found in modern computers. In order to use the most optimized version for the specific processor(s) of the host machine running the software receiver (that is, the implementation than runs the fastest). .TP \fBvolk_gnsssdr_profile\fR is a program that tests all known VOLK_GNSSSDR kernels (that is, basic processing components like adders, multipliers, correlators, and much more) for each architecture supported by the host machine, measuring their performance. When finished, the profiler writes to $HOME/.volk_gnsssdr/volk_gnsssdr_config the best architecture for each VOLK_GSSSDR function. This file is read when using a function to know the best version to execute. .SH OPTIONS \fBvolk_gnsssdr_profile\fR takes the following options: .TP \fB-h\fR [ \fB--help\fR ] Print help message. .TP \fB-b\fR [ \fB--benchmark\fR ] [ \fB=arg(=1)\fR ] (\fB=0\fR) Run all kernels (benchmark mode). .TP \fB-R\fR [ \fB--tests-regex\fR ] Run tests matching regular expression. .TP \fB-j\fR [ \fB--json\fR ] \fI\fR JSON output file. .SH SEE ALSO .BR gnss-sdr (1) \.TP Check http://gnss-sdr.org for more information. .SH HISTORY This library was originally developed by Andres Cecilia Luque in the framework of the Summer of Code in Space program (SOCIS 2014) by the European Space Agency (ESA), and then integrated into \fBgnss-sdr\fR. This software is based on the VOLK library available at https://gnuradio.org/redmine/projects/gnuradio/wiki/Volk .SH BUGS No known bugs. .SH AUTHOR Andres Cecilia Luque (a.cecilia.luque@gmail.com) \.TP Carles Fernandez-Prades (carles.fernandez@cttc.es)gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/GrPython.cmake0000644000175000017500000002224712576764164031140 0ustar carlescarles# Copyright 2010-2011,2013 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. if(DEFINED __INCLUDED_VOLK_PYTHON_CMAKE) return() endif() set(__INCLUDED_VOLK_PYTHON_CMAKE TRUE) ######################################################################## # Setup the python interpreter: # This allows the user to specify a specific interpreter, # or finds the interpreter via the built-in cmake module. ######################################################################## #this allows the user to override PYTHON_EXECUTABLE if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) #otherwise if not set, try to automatically find it else(PYTHON_EXECUTABLE) #use the built-in find script find_package(PythonInterp 2) #and if that fails use the find program routine if(NOT PYTHONINTERP_FOUND) find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5) if(PYTHON_EXECUTABLE) set(PYTHONINTERP_FOUND TRUE) endif(PYTHON_EXECUTABLE) endif(NOT PYTHONINTERP_FOUND) endif(PYTHON_EXECUTABLE) #make the path to the executable appear in the cmake gui set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter") #make sure we can use -B with python (introduced in 2.6) if(PYTHON_EXECUTABLE) execute_process( COMMAND ${PYTHON_EXECUTABLE} -B -c "" OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT ) if(PYTHON_HAS_DASH_B_RESULT EQUAL 0) set(PYTHON_DASH_B "-B") endif() endif(PYTHON_EXECUTABLE) ######################################################################## # Check for the existence of a python module: # - desc a string description of the check # - mod the name of the module to import # - cmd an additional command to run # - have the result variable to set ######################################################################## macro(VOLK_PYTHON_CHECK_MODULE desc mod cmd have) #message(STATUS "") message(STATUS "Python checking for ${desc}") execute_process( COMMAND ${PYTHON_EXECUTABLE} -c " ######################################### try: import ${mod} except: try: ${mod} except: exit(-1) try: assert ${cmd} except: exit(-1) #########################################" RESULT_VARIABLE ${have} ) if(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - found") set(${have} TRUE) else(${have} EQUAL 0) message(STATUS "Python checking for ${desc} - not found") set(${have} FALSE) endif(${have} EQUAL 0) endmacro(VOLK_PYTHON_CHECK_MODULE) ######################################################################## # Sets the python installation directory VOLK_PYTHON_DIR ######################################################################## execute_process(COMMAND ${PYTHON_EXECUTABLE} -c " from distutils import sysconfig print sysconfig.get_python_lib(plat_specific=True, prefix='') " OUTPUT_VARIABLE VOLK_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) file(TO_CMAKE_PATH ${VOLK_PYTHON_DIR} VOLK_PYTHON_DIR) ######################################################################## # Create an always-built target with a unique name # Usage: VOLK_UNIQUE_TARGET( ) ######################################################################## function(VOLK_UNIQUE_TARGET desc) file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) add_custom_target(${_target} ALL DEPENDS ${ARGN}) endfunction(VOLK_UNIQUE_TARGET) ######################################################################## # Install python sources (also builds and installs byte-compiled python) ######################################################################## function(VOLK_PYTHON_INSTALL) include(CMakeParseArgumentsCopy) CMAKE_PARSE_ARGUMENTS(VOLK_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN}) #################################################################### if(VOLK_PYTHON_INSTALL_FILES) #################################################################### install(${ARGN}) #installs regular python files #create a list of all generated files unset(pysrcfiles) unset(pycfiles) unset(pyofiles) foreach(pyfile ${VOLK_PYTHON_INSTALL_FILES}) get_filename_component(pyfile ${pyfile} ABSOLUTE) list(APPEND pysrcfiles ${pyfile}) #determine if this file is in the source or binary directory file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile}) string(LENGTH "${source_rel_path}" source_rel_path_len) file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile}) string(LENGTH "${binary_rel_path}" binary_rel_path_len) #and set the generated path appropriately if(${source_rel_path_len} GREATER ${binary_rel_path_len}) set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path}) else() set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path}) endif() list(APPEND pycfiles ${pygenfile}c) list(APPEND pyofiles ${pygenfile}o) #ensure generation path exists get_filename_component(pygen_path ${pygenfile} PATH) file(MAKE_DIRECTORY ${pygen_path}) endforeach(pyfile) #the command to generate the pyc files add_custom_command( DEPENDS ${pysrcfiles} OUTPUT ${pycfiles} COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles} ) #the command to generate the pyo files add_custom_command( DEPENDS ${pysrcfiles} OUTPUT ${pyofiles} COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles} ) #create install rule and add generated files to target list set(python_install_gen_targets ${pycfiles} ${pyofiles}) install(FILES ${python_install_gen_targets} DESTINATION ${VOLK_PYTHON_INSTALL_DESTINATION} COMPONENT ${VOLK_PYTHON_INSTALL_COMPONENT} ) #################################################################### elseif(VOLK_PYTHON_INSTALL_PROGRAMS) #################################################################### file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native) if (CMAKE_CROSSCOMPILING) set(pyexe_native "/usr/bin/env python") endif() foreach(pyfile ${VOLK_PYTHON_INSTALL_PROGRAMS}) get_filename_component(pyfile_name ${pyfile} NAME) get_filename_component(pyfile ${pyfile} ABSOLUTE) string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe") list(APPEND python_install_gen_targets ${pyexefile}) get_filename_component(pyexefile_path ${pyexefile} PATH) file(MAKE_DIRECTORY ${pyexefile_path}) add_custom_command( OUTPUT ${pyexefile} DEPENDS ${pyfile} COMMAND ${PYTHON_EXECUTABLE} -c "open('${pyexefile}','w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())" COMMENT "Shebangin ${pyfile_name}" VERBATIM ) #on windows, python files need an extension to execute get_filename_component(pyfile_ext ${pyfile} EXT) if(WIN32 AND NOT pyfile_ext) set(pyfile_name "${pyfile_name}.py") endif() install(PROGRAMS ${pyexefile} RENAME ${pyfile_name} DESTINATION ${VOLK_PYTHON_INSTALL_DESTINATION} COMPONENT ${VOLK_PYTHON_INSTALL_COMPONENT} ) endforeach(pyfile) endif() VOLK_UNIQUE_TARGET("pygen" ${python_install_gen_targets}) endfunction(VOLK_PYTHON_INSTALL) ######################################################################## # Write the python helper script that generates byte code files ######################################################################## file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py " import sys, py_compile files = sys.argv[1:] srcs, gens = files[:len(files)/2], files[len(files)/2:] for src, gen in zip(srcs, gens): py_compile.compile(file=src, cfile=gen, doraise=True) ") gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/0000755000175000017500000000000012576764164026240 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/volk_gnsssdr_profile.cc0000644000175000017500000002665712576764164033025 0ustar carlescarles/* -*- c++ -*- */ /* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include "qa_utils.h" namespace fs = boost::filesystem; void write_json(std::ofstream &json_file, std::vector results) { json_file << "{" << std::endl; json_file << " \"volk_tests\": [" << std::endl; size_t len = results.size(); size_t i = 0; BOOST_FOREACH(volk_gnsssdr_test_results_t &result, results) { json_file << " {" << std::endl; json_file << " \"name\": \"" << result.name << "\"," << std::endl; json_file << " \"vlen\": " << result.vlen << "," << std::endl; json_file << " \"iter\": " << result.iter << "," << std::endl; json_file << " \"best_arch_a\": \"" << result.best_arch_a << "\"," << std::endl; json_file << " \"best_arch_u\": \"" << result.best_arch_u << "\"," << std::endl; json_file << " \"results\": {" << std::endl; size_t results_len = result.results.size(); size_t ri = 0; typedef std::pair tpair; BOOST_FOREACH(tpair pair, result.results) { volk_gnsssdr_test_time_t time = pair.second; json_file << " \"" << time.name << "\": {" << std::endl; json_file << " \"name\": \"" << time.name << "\"," << std::endl; json_file << " \"time\": " << time.time << "," << std::endl; json_file << " \"units\": \"" << time.units << "\"" << std::endl; json_file << " }" ; if(ri+1 != results_len) { json_file << ","; } json_file << std::endl; ri++; } json_file << " }" << std::endl; json_file << " }"; if(i+1 != len) { json_file << ","; } json_file << std::endl; i++; } json_file << " ]" << std::endl; json_file << "}" << std::endl; } int main(int argc, char *argv[]) { // Adding program options boost::program_options::options_description desc("Options"); desc.add_options() ("help,h", "Print help messages") ("benchmark,b", boost::program_options::value()->default_value( false ) ->implicit_value( true ), "Run all kernels (benchmark mode)") ("tests-regex,R", boost::program_options::value(), "Run tests matching regular expression.") ("json,j", boost::program_options::value(), "JSON output file") ; // Handle the options that were given boost::program_options::variables_map vm; bool benchmark_mode; std::string kernel_regex; bool store_results = true; std::ofstream json_file; try { boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm); boost::program_options::notify(vm); benchmark_mode = vm.count("benchmark")?vm["benchmark"].as():false; if ( vm.count("tests-regex" ) ) { kernel_regex = vm["tests-regex"].as(); store_results = false; std::cout << "Warning: using a regexp will not save results to a config" << std::endl; } else { kernel_regex = ".*"; store_results = true; } } catch (boost::program_options::error& error) { std::cerr << "Error: " << error.what() << std::endl << std::endl; std::cerr << desc << std::endl; return 1; } /** --help option */ if ( vm.count("help") ) { std::cout << "The GNSS-SDR VOLK profiler." << std::endl << desc << std::endl; return 0; } if ( vm.count("json") ) { json_file.open( vm["json"].as().c_str() ); } // Run tests std::vector results; //VOLK_PROFILE(volk_gnsssdr_16i_x5_add_quad_16i_x4, 1e-4, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_16i_branch_4_state_8, 1e-4, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_16i_max_star_16i, 0, 0, 204602, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_16i_max_star_horizontal_16i, 0, 0, 204602, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_16i_permute_and_scalar_add, 1e-4, 0, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_16i_x4_quad_max_star_16i, 1e-4, 0, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_32fc_x2_conjugate_dot_prod_32fc, 1e-4, 0, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_32fc_s32f_x2_power_spectral_density_32f, 1e-4, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_32f_s32f_32f_fm_detect_32f, 1e-4, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_32u_popcnt, 0, 0, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_64u_popcnt, 0, 0, 2046, 10000, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_32fc_s32fc_multiply_32fc, 1e-4, lv_32fc_t(1.0, 0.5), 204602, 1000, &results, benchmark_mode, kernel_regex); //GNSS-SDR PROTO-KERNELS //lv_32fc_t sfv = lv_cmake((float)1, (float)2); //example: VOLK_PROFILE(volk_gnsssdr_8ic_s8ic_multiply_8ic, 1e-4, sfv, 204602, 1000, &results, benchmark_mode, kernel_regex); //CAN NOT BE TESTED YET BECAUSE VOLK MODULE DOES NOT SUPPORT IT: //VOLK_PROFILE(volk_gnsssdr_s32f_x2_update_local_carrier_32fc, 1e-4, 0, 16007, 1, &results, benchmark_mode, kernel_regex); //VOLK_PROFILE(volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc, 1e-4, 0, 7, 1, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_32fc_convert_16ic, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_32fc_convert_8ic, 1e-4, 0, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_32fc_s32f_convert_8ic, 1e-4, 5, 16000, 250, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8i_accumulator_s8i, 1e-4, 0, 204602, 10000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8i_index_max_16u, 3, 0, 204602, 5000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8i_max_s8i, 3, 0, 204602, 5000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8i_x2_add_8i, 1e-4, 0, 204602, 10000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_conjugate_8ic, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_magnitude_squared_8i, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_s8ic_multiply_8ic, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x2_dot_prod_8ic, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8ic_x2_multiply_8ic, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_8u_x2_multiply_8u, 1e-4, 0, 204602, 1000, &results, benchmark_mode, kernel_regex); VOLK_PROFILE(volk_gnsssdr_64f_accumulator_64f, 1e-4, 0, 16000, 1000, &results, benchmark_mode, kernel_regex); // Until we can update the config on a kernel by kernel basis // do not overwrite volk_config when using a regex. if(store_results) { char path[1024]; volk_gnsssdr_get_config_path(path); const fs::path config_path(path); if (not fs::exists(config_path.branch_path())) { std::cout << "Creating " << config_path.branch_path() << "..." << std::endl; fs::create_directories(config_path.branch_path()); } std::cout << "Writing " << config_path << "..." << std::endl; std::ofstream config(config_path.string().c_str()); if(!config.is_open()) { //either we don't have write access or we don't have the dir yet std::cout << "Error opening file " << config_path << std::endl; } config << " # this file is generated by volk_gnsssdr_profile.\n # the function name is followed by the preferred architecture.\n"; BOOST_FOREACH(volk_gnsssdr_test_results_t result, results) { config << result.config_name << " " << result.best_arch_a << " " << result.best_arch_u << std::endl; } config.close(); } else { std::cout << "Warning: config not generated" << std::endl; } } gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/volk_gnsssdr-config-info.cc0000644000175000017500000000532712576764164033470 0ustar carlescarles/* -*- c++ -*- */ /* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #if HAVE_CONFIG_H #include #endif #include #include #include "volk_gnsssdr/constants.h" #include "volk_gnsssdr/volk_gnsssdr.h" namespace po = boost::program_options; int main(int argc, char **argv) { po::options_description desc("Program options: volk_gnsssdr-config-info [options]"); po::variables_map vm; desc.add_options() ("help,h", "print help message") ("prefix", "print VOLK installation prefix") ("builddate", "print VOLK build date (RFC2822 format)") ("cc", "print VOLK C compiler version") ("cflags", "print VOLK CFLAGS") ("all-machines", "print VOLK machines built into library") ("avail-machines", "print VOLK machines the current platform can use") ("machine", "print the VOLK machine that will be used") ("version,v", "print VOLK version") ; try { po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); } catch (po::error& error){ std::cerr << "Error: " << error.what() << std::endl << std::endl; std::cerr << desc << std::endl; return 1; } if(vm.size() == 0 || vm.count("help")) { std::cout << desc << std::endl; return 1; } if(vm.count("prefix")) std::cout << volk_gnsssdr_prefix() << std::endl; if(vm.count("builddate")) std::cout << volk_gnsssdr_build_date() << std::endl; if(vm.count("version")) std::cout << volk_gnsssdr_version() << std::endl; if(vm.count("cc")) std::cout << volk_gnsssdr_c_compiler() << std::endl; if(vm.count("cflags")) std::cout << volk_gnsssdr_compiler_flags() << std::endl; // stick an extra ';' to make output of this and avail-machines the // same structure for easier parsing if(vm.count("all-machines")) std::cout << volk_gnsssdr_available_machines() << ";" << std::endl; if(vm.count("avail-machines")) { volk_gnsssdr_list_machines(); } if(vm.count("machine")) { std::cout << volk_gnsssdr_get_machine() << std::endl; } return 0; } gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/apps/CMakeLists.txt0000644000175000017500000000465412576764164031011 0ustar carlescarles# # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Setup profiler ######################################################################## if(Boost_FOUND) if(MSVC) include_directories(${CMAKE_SOURCE_DIR}/cmake/msvc) endif(MSVC) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include ${CMAKE_SOURCE_DIR}/lib ${CMAKE_BINARY_DIR}/lib ${Boost_INCLUDE_DIRS} ) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(Clang_required_link "c++") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(Clang_required_link "") endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # MAKE volk_gnsssdr_profile add_executable(volk_gnsssdr_profile ${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr_profile.cc ${CMAKE_SOURCE_DIR}/lib/qa_utils.cc ) target_link_libraries(volk_gnsssdr_profile volk_gnsssdr ${Boost_LIBRARIES} ${Clang_required_link}) add_dependencies(volk_gnsssdr_profile volk_gnsssdr) if(ENABLE_STRIP) if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) set_target_properties(volk_gnsssdr_profile PROPERTIES LINK_FLAGS "-s") endif(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32) endif(ENABLE_STRIP) install( TARGETS volk_gnsssdr_profile DESTINATION bin COMPONENT "volk_gnsssdr" ) # MAKE volk_gnsssdr-config-info add_executable(volk_gnsssdr-config-info volk_gnsssdr-config-info.cc) target_link_libraries(volk_gnsssdr-config-info volk_gnsssdr ${Boost_LIBRARIES} ${Clang_required_link}) add_dependencies(volk_gnsssdr-config-info volk_gnsssdr) install( TARGETS volk_gnsssdr-config-info DESTINATION bin COMPONENT "volk_gnsssdr" ) endif(Boost_FOUND) gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/0000755000175000017500000000000012576764164026616 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/0000755000175000017500000000000012576764164033071 5ustar carlescarles././@LongLink0000644000000000000000000000015700000000000011606 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/CMakeLists.txtgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/CMak0000644000175000017500000000232712576764164033633 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # Install python files and apps ######################################################################## include(GrPython) VOLK_PYTHON_INSTALL( FILES __init__.py cfg.py volk_gnsssdr_modtool_generate.py DESTINATION ${VOLK_PYTHON_DIR}/volk_gnsssdr_modtool COMPONENT "volk_gnsssdr" ) VOLK_PYTHON_INSTALL( PROGRAMS volk_gnsssdr_modtool DESTINATION ${VOLK_RUNTIME_DIR} COMPONENT "volk_gnsssdr" ) ././@LongLink0000644000000000000000000000016500000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/volk_gnsssdr_modtoolgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/volk0000644000175000017500000001226612576764164033776 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # from volk_gnsssdr_modtool import volk_gnsssdr_modtool, volk_gnsssdr_modtool_config from optparse import OptionParser, OptionGroup import exceptions import os import sys if __name__ == '__main__': parser = OptionParser(); actions = OptionGroup(parser, 'Actions'); actions.add_option('-i', '--install', action='store_true', help='Create a new volk_gnsssdr module.') parser.add_option('-b', '--base_path', action='store', default=None, help='Base path for action. By default, volk_gnsssdr_modtool.cfg loads this value.') parser.add_option('-n', '--kernel_name', action='store', default=None, help='Kernel name for action. No default') parser.add_option('-c', '--config', action='store', dest='config_file', default=None, help='Config file for volk_gnsssdr_modtool. By default, volk_gnsssdr_modtool.cfg in the local directory will be used/created.') actions.add_option('-a', '--add_kernel', action='store_true', help='Add kernel from existing volk_gnsssdr module. Requires: -n. Optional: -b') actions.add_option('-A', '--add_all_kernels', action='store_true', help='Add all kernels from existing volk_gnsssdr module. Optional: -b') actions.add_option('-x', '--remove_kernel', action='store_true', help='Remove kernel from module. Required: -n. Optional: -b') actions.add_option('-l', '--list', action='store_true', help='List all kernels in the base.') actions.add_option('-k', '--kernels', action='store_true', help='List all kernels in the module.') actions.add_option('-r', '--remote_list', action='store_true', help='List all available kernels in remote volk_gnsssdr module. Requires: -b.') actions.add_option('-m', '--moo', action='store_true', help='Have you mooed today?') parser.add_option_group(actions) (options, args) = parser.parse_args(); if len(sys.argv) < 2: parser.print_help() elif options.moo: print " (__) " print " (oo) " print " /------\/ " print " / | || " print " * /\---/\ " print " ~~ ~~ " else: my_cfg = volk_gnsssdr_modtool_config(options.config_file); my_modtool = volk_gnsssdr_modtool(my_cfg.get_map(my_cfg.config_name)); if options.install: my_modtool.make_module_skeleton(); my_modtool.write_default_cfg(my_cfg.cfg); if options.add_kernel: if not options.kernel_name: raise exceptions.IOError("This action requires the -n option."); else: name = options.kernel_name; if options.base_path: base = options.base_path; else: base = my_cfg.cfg.get(my_cfg.config_name, 'base'); my_modtool.import_kernel(name, base); if options.remove_kernel: if not options.kernel_name: raise exceptions.IOError("This action requires the -n option."); else: name = options.kernel_name; my_modtool.remove_kernel(name); if options.add_all_kernels: if options.base_path: base = options.base_path; else: base = my_cfg.cfg.get(my_cfg.config_name, 'base'); kernelset = my_modtool.get_current_kernels(base); for i in kernelset: my_modtool.import_kernel(i, base); if options.remote_list: if not options.base_path: raise exceptions.IOError("This action requires the -b option. Try -l or -k for listing kernels in the base or the module.") else: base = options.base_path; kernelset = my_modtool.get_current_kernels(base); for i in kernelset: print i; if options.list: kernelset = my_modtool.get_current_kernels(); for i in kernelset: print i; if options.kernels: dest = my_cfg.cfg.get(my_cfg.config_name, 'destination'); name = my_cfg.cfg.get(my_cfg.config_name, 'name'); base = os.path.join(dest, 'volk_gnsssdr_' + name); kernelset = my_modtool.get_current_kernels(base); for i in kernelset: print i; ././@LongLink0000644000000000000000000000020100000000000011574 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/volk_gnsssdr_modtool_generate.pygnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/volk0000644000175000017500000003463512576764164034002 0ustar carlescarles# # Copyright 2013 Free Software Foundation, Inc. # # This file is part of GNU Radio # # GNU Radio is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Radio is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Radio; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # import os import glob import sys import re import glob import shutil import exceptions from sets import Set class volk_gnsssdr_modtool: def __init__(self, cfg): self.volk_gnsssdr = re.compile('volk_gnsssdr'); self.remove_after_underscore = re.compile("_.*"); self.volk_gnsssdr_run_tests = re.compile('^\s*VOLK_RUN_TESTS.*\n', re.MULTILINE); self.volk_gnsssdr_profile = re.compile('^\s*(VOLK_PROFILE|VOLK_PUPPET_PROFILE).*\n', re.MULTILINE); self.my_dict = cfg; self.lastline = re.compile('\s*char path\[1024\];.*'); self.badassert = re.compile('^\s*assert\(toked\[0\] == "volk_gnsssdr_.*\n', re.MULTILINE); self.goodassert = ' assert(toked[0] == "volk_gnsssdr");\n' self.baderase = re.compile('^\s*toked.erase\(toked.begin\(\)\);.*\n', re.MULTILINE); self.gooderase = ' toked.erase(toked.begin());\n toked.erase(toked.begin());\n'; def get_basename(self, base=None): if not base: base = self.my_dict['base'] candidate = base.split('/')[-1]; if len(candidate.split('_')) == 1: return ''; else: return candidate.split('_')[-1]; def get_current_kernels(self, base=None): if not base: base = self.my_dict['base'] name = self.get_basename(); else: name = self.get_basename(base); if name == '': hdr_files = glob.glob(os.path.join(base, "kernels/volk_gnsssdr/*.h")); begins = re.compile("(?<=volk_gnsssdr_).*") else: hdr_files = glob.glob(os.path.join(base, "kernels/volk_gnsssdr_" + name + "/*.h")); begins = re.compile("(?<=volk_gnsssdr_" + name + "_).*") datatypes = []; functions = []; for line in hdr_files: subline = re.search(".*\.h.*", os.path.basename(line)) if subline: subsubline = begins.search(subline.group(0)); if subsubline: dtype = self.remove_after_underscore.sub("", subsubline.group(0)); subdtype = re.search("[0-9]+[A-z]+", dtype); if subdtype: datatypes.append(subdtype.group(0)); datatypes = set(datatypes); for line in hdr_files: for dt in datatypes: if dt in line: #subline = re.search("(?<=volk_gnsssdr_)" + dt + ".*(?=\.h)", line); subline = re.search(begins.pattern[:-2] + dt + ".*(?=\.h)", line); if subline: functions.append(subline.group(0)); return set(functions); def make_module_skeleton(self): dest = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name']) if os.path.exists(dest): raise exceptions.IOError("Destination %s already exits!"%(dest)); if not os.path.exists(os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'kernels/volk_gnsssdr_' + self.my_dict['name'])): os.makedirs(os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'kernels/volk_gnsssdr_' + self.my_dict['name'])) current_kernel_names = self.get_current_kernels(); for root, dirnames, filenames in os.walk(self.my_dict['base']): for name in filenames: t_table = map(lambda a: re.search(a, name), current_kernel_names); t_table = set(t_table); if t_table == set([None]): infile = os.path.join(root, name); instring = open(infile, 'r').read(); outstring = re.sub(self.volk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], instring); newname = re.sub(self.volk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], name); relpath = os.path.relpath(infile, self.my_dict['base']); newrelpath = re.sub(self.volk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], relpath); dest = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], os.path.dirname(newrelpath), newname); if not os.path.exists(os.path.dirname(dest)): os.makedirs(os.path.dirname(dest)) open(dest, 'w+').write(outstring); infile = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'lib/testqa.cc'); instring = open(infile, 'r').read(); outstring = re.sub(self.volk_gnsssdr_run_tests, '', instring); open(infile, 'w+').write(outstring); infile = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'apps/volk_gnsssdr_' + self.my_dict['name'] + '_profile.cc'); instring = open(infile, 'r').read(); outstring = re.sub(self.volk_gnsssdr_profile, '', instring); open(infile, 'w+').write(outstring); infile = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'lib/qa_utils.cc'); instring = open(infile, 'r').read(); outstring = re.sub(self.badassert, self.goodassert, instring); outstring = re.sub(self.baderase, self.gooderase, outstring); open(infile, 'w+').write(outstring); def write_default_cfg(self, cfg): outfile = open(os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'volk_gnsssdr_modtool.cfg'), 'wb'); cfg.write(outfile); outfile.close(); def convert_kernel(self, oldvolk_gnsssdr, name, base, inpath, top): infile = os.path.join(inpath, 'kernels/' + top[:-1] + '/' + top + name + '.h'); instring = open(infile, 'r').read(); outstring = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], instring); newname = 'volk_gnsssdr_' + self.my_dict['name'] + '_' + name + '.h'; relpath = os.path.relpath(infile, base); newrelpath = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], relpath); dest = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], os.path.dirname(newrelpath), newname); if not os.path.exists(os.path.dirname(dest)): os.makedirs(os.path.dirname(dest)) open(dest, 'w+').write(outstring); # copy orc proto-kernels if they exist for orcfile in glob.glob(inpath + '/orc/' + top + name + '*.orc'): if os.path.isfile(orcfile): instring = open(orcfile, 'r').read(); outstring = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], instring); newname = 'volk_gnsssdr_' + self.my_dict['name'] + '_' + name + '.orc'; relpath = os.path.relpath(orcfile, base); newrelpath = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], relpath); dest = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], os.path.dirname(newrelpath), newname); if not os.path.exists(os.path.dirname(dest)): os.makedirs(os.path.dirname(dest)); open(dest, 'w+').write(outstring) def remove_kernel(self, name): basename = self.my_dict['name']; if len(basename) > 0: top = 'volk_gnsssdr_' + basename + '_'; else: top = 'volk_gnsssdr_' base = os.path.join(self.my_dict['destination'], top[:-1]) ; if not name in self.get_current_kernels(): raise exceptions.IOError("Requested kernel %s is not in module %s"%(name,base)); inpath = os.path.abspath(base); kernel = re.compile(name) search_kernels = Set([kernel]) profile = re.compile('^\s*VOLK_PROFILE') puppet = re.compile('^\s*VOLK_PUPPET') src_dest = os.path.join(inpath, 'apps/', top[:-1] + '_profile.cc'); infile = open(src_dest); otherlines = infile.readlines(); open(src_dest, 'w+').write(''); for otherline in otherlines: write_okay = True; if kernel.search(otherline): write_okay = False; if puppet.match(otherline): args = re.search("(?<=VOLK_PUPPET_PROFILE).*", otherline) m_func = args.group(0).split(',')[0]; func = re.search('(?<=' + top + ').*', m_func); search_kernels.add(re.compile(func.group(0))); if write_okay: open(src_dest, 'a').write(otherline); src_dest = os.path.join(inpath, 'lib/testqa.cc') infile = open(src_dest); otherlines = infile.readlines(); open(src_dest, 'w+').write(''); for otherline in otherlines: write_okay = True; for kernel in search_kernels: if kernel.search(otherline): write_okay = False; if write_okay: open(src_dest, 'a').write(otherline); for kernel in search_kernels: infile = os.path.join(inpath, 'kernels/' + top[:-1] + '/' + top + kernel.pattern + '.h'); print "Removing kernel %s"%(kernel.pattern) if os.path.exists(infile): os.remove(infile); # remove the orc proto-kernels if they exist. There are no puppets here # so just need to glob for files matching kernel name print glob.glob(inpath + '/orc/' + top + name + '*.orc'); for orcfile in glob.glob(inpath + '/orc/' + top + name + '*.orc'): print orcfile if(os.path.exists(orcfile)): os.remove(orcfile); def import_kernel(self, name, base): if not (base): base = self.my_dict['base']; basename = self.getbasename(); else: basename = self.get_basename(base); if not name in self.get_current_kernels(base): raise exceptions.IOError("Requested kernel %s is not in module %s"%(name,base)); inpath = os.path.abspath(base); if len(basename) > 0: top = 'volk_gnsssdr_' + basename + '_'; else: top = 'volk_gnsssdr_' oldvolk_gnsssdr = re.compile(top[:-1]); self.convert_kernel(oldvolk_gnsssdr, name, base, inpath, top); kernel = re.compile(name) search_kernels = Set([kernel]) profile = re.compile('^\s*VOLK_PROFILE') puppet = re.compile('^\s*VOLK_PUPPET') infile = open(os.path.join(inpath, 'apps/', oldvolk_gnsssdr.pattern + '_profile.cc')); otherinfile = open(os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'apps/volk_gnsssdr_' + self.my_dict['name'] + '_profile.cc')); dest = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'apps/volk_gnsssdr_' + self.my_dict['name'] + '_profile.cc'); lines = infile.readlines(); otherlines = otherinfile.readlines(); open(dest, 'w+').write(''); insert = False; inserted = False for otherline in otherlines: if self.lastline.match(otherline): insert = True; if insert and not inserted: inserted = True; for line in lines: if kernel.search(line): if profile.match(line): outline = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], line); open(dest, 'a').write(outline); elif puppet.match(line): outline = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], line); open(dest, 'a').write(outline); args = re.search("(?<=VOLK_PUPPET_PROFILE).*", line) m_func = args.group(0).split(',')[0]; func = re.search('(?<=' + top + ').*', m_func); search_kernels.add(re.compile(func.group(0))); self.convert_kernel(oldvolk_gnsssdr, func.group(0), base, inpath, top); write_okay = True; for kernel in search_kernels: if kernel.search(otherline): write_okay = False if write_okay: open(dest, 'a').write(otherline); for kernel in search_kernels: print "Adding kernel %s from module %s"%(kernel.pattern,base) infile = open(os.path.join(inpath, 'lib/testqa.cc')); otherinfile = open(os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'lib/testqa.cc')); dest = os.path.join(self.my_dict['destination'], 'volk_gnsssdr_' + self.my_dict['name'], 'lib/testqa.cc'); lines = infile.readlines(); otherlines = otherinfile.readlines(); open(dest, 'w+').write(''); inserted = False; insert = False for otherline in otherlines: if (re.match('\s*', otherline) == None or re.match('\s*#.*', otherline) == None): insert = True; if insert and not inserted: inserted = True; for line in lines: for kernel in search_kernels: if kernel.search(line): if self.volk_gnsssdr_run_tests.match(line): outline = re.sub(oldvolk_gnsssdr, 'volk_gnsssdr_' + self.my_dict['name'], line); open(dest, 'a').write(outline); write_okay = True; for kernel in search_kernels: if kernel.search(otherline): write_okay = False if write_okay: open(dest, 'a').write(otherline); ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/__init__.pygnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/__in0000644000175000017500000000154212576764164033722 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # from cfg import volk_gnsssdr_modtool_config from volk_gnsssdr_modtool_generate import volk_gnsssdr_modtool ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/cfg.pygnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/cfg.0000644000175000017500000000677112576764164033644 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # import ConfigParser import sys import os import exceptions import re class volk_gnsssdr_modtool_config: def key_val_sub(self, num, stuff, section): return re.sub('\$' + 'k' + str(num), stuff[num][0], (re.sub('\$' + str(num), stuff[num][1], section[1][num]))); def verify(self): for i in self.verification: self.verify_section(i) def remap(self): for i in self.remapification: self.verify_section(i) def verify_section(self, section): stuff = self.cfg.items(section[0]) for i in range(len(section[1])): eval(self.key_val_sub(i, stuff, section)) try: val = eval(self.key_val_sub(i, stuff, section)) if val == False: raise exceptions.ValueError except ValueError: raise exceptions.ValueError('Verification function returns False... key:%s, val:%s'%(stuff[i][0], stuff[i][1])) except: raise exceptions.IOError('bad configuration... key:%s, val:%s'%(stuff[i][0], stuff[i][1])) def __init__(self, cfg=None): self.config_name = 'config' self.config_defaults = ['name', 'destination', 'base'] self.config_defaults_remap = ['1', 'self.cfg.set(self.config_name, \'$k1\', os.path.realpath(os.path.expanduser(\'$1\')))', 'self.cfg.set(self.config_name, \'$k2\', os.path.realpath(os.path.expanduser(\'$2\')))'] self.config_defaults_verify = ['re.match(\'[a-zA-Z0-9]+$\', \'$0\')', 'os.path.exists(\'$1\')', 'os.path.exists(\'$2\')'] self.remapification = [(self.config_name, self.config_defaults_remap)] self.verification = [(self.config_name, self.config_defaults_verify)] default = os.path.join(os.getcwd(), 'volk_gnsssdr_modtool.cfg') icfg = ConfigParser.RawConfigParser() if cfg: icfg.read(cfg) elif os.path.exists(default): icfg.read(default) else: print "Initializing config file..." icfg.add_section(self.config_name) for kn in self.config_defaults: rv = raw_input("%s: "%(kn)) icfg.set(self.config_name, kn, rv) self.cfg = icfg self.remap() self.verify() def read_map(self, name, inp): if self.cfg.has_section(name): self.cfg.remove_section(name) self.cfg.add_section(name) for i in inp: self.cfg.set(name, i, inp[i]) def get_map(self, name): retval = {} stuff = self.cfg.items(name) for i in stuff: retval[i[0]] = i[1] return retval ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/READMEgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/python/volk_gnsssdr_modtool/READ0000644000175000017500000001066612576764164033540 0ustar carlescarlesThe volk_gnsssdr_modtool tool is installed along with VOLK as a way of helping to construct, add to, and interogate the VOLK library or companion libraries. volk_gnsssdr_modtool is installed into $prefix/bin. VOLK modtool enables creating standalone (out-of-tree) VOLK modules and provides a few tools for sharing VOLK kernels between VOLK modules. If you need to design or work with VOLK kernels away from the canonical VOLK library, this is the tool. If you need to tailor your own VOLK library for whatever reason, this is the tool. The canonical VOLK library installs a volk_gnsssdr.h and a libvolk_gnsssdr.so. Your own library will install volk_gnsssdr_$name.h and libvolk_gnsssdr_$name.so. Ya Gronk? Good. There isn't a substantial difference between the canonical VOLK module and any other VOLK module. They're all peers. Any module created via VOLK modtool will come complete with a default volk_gnsssdr_modtool.cfg file associating the module with the base from which it came, its distinctive $name and its destination (or path). These values (created from user input if VOLK modtool runs without a user-supplied config file or a default config file) serve as default values for some VOLK modtool actions. It's more or less intended for the user to change directories to the top level of a created VOLK module and then run volk_gnsssdr_modtool to take advantage of the values stored in the default volk_gnsssdr_modtool.cfg file. Apart from creating new VOLK modules, VOLK modtool allows you to list the names of kernels in other modules, list the names of kernels in the current module, add kernels from another module into the current module, and remove kernels from the current module. When moving kernels between modules, VOLK modtool does its best to keep the qa and profiling code for those kernels intact. If the base has a test or a profiling call for some kernel, those calls will follow the kernel when VOLK modtool adds that kernel. If QA or profiling requires a puppet kernel, the puppet kernel will follow the original kernel when VOLK modtool adds that original kernel. VOLK modtool respects puppets. ====================================================================== Installing a new VOLK Library: Run the command "volk_gnsssdr_modtool -i". This will ask you three questions: name: // the name to give your VOLK library: volk_gnsssdr_ destination: // directory new source tree is built under -- must exists. // It will create /volk_gnsssdr_ base: // the directory containing the original VOLK source code The name provided must be alphanumeric (and cannot start with a number). No special characters including dashes and underscores are allowed. This will build a new skeleton directory in the destination provided with the name volk_gnsssdr_. It will contain the necessary structure to build: mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/volk_gnsssdr ../ make sudo make install Right now, the library is empty and contains no kernels. Kernels can be added from another VOLK library using the '-a' option. If not specified, the kernel will be extracted from the base VOLK directory. Using the '-b' allows us to specify another VOLK library to use for this purpose. volk_gnsssdr_modtool -a -n 32fc_x2_conjugate_dot_prod_32fc This will put the code for the new kernel into /volk_gnsssdr_/kernels/volk_gnsssdr_/ Other kernels must be added by hand. See the following webpages for more information about creating VOLK kernels: http://gnuradio.org/doc/doxygen/volk_gnsssdr_guide.html http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk ====================================================================== OPTIONS Options for Adding and Removing Kernels: -a, --add_kernel Add kernel from existing VOLK module. Uses the base VOLK module unless -b is used. Use -n to specify the kernel name. Requires: -n. Optional: -b -A, --add_all_kernels Add all kernels from existing VOLK module. Uses the base VOLK module unless -b is used. Optional: -b -x, --remove_kernel Remove kernel from module. Required: -n. Optional: -b Options for Listing Kernels: -l, --list Lists all kernels available in the base VOLK module. -k, --kernels Lists all kernels in this VOLK module. -r, --remote-list Lists all kernels in another VOLK module that is specified using the -b option. gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/0000755000175000017500000000000012576764211026034 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.h0000644000175000017500000001400112576764164030031 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef GNSS_SDR_VOLK_QA_UTILS_H #define GNSS_SDR_VOLK_QA_UTILS_H #include #include #include #include #include #include #include #include struct volk_gnsssdr_type_t { bool is_float; bool is_scalar; bool is_signed; bool is_complex; int size; std::string str; }; volk_gnsssdr_type_t volk_gnsssdr_type_from_string(std::string); float uniform(void); void random_floats(float *buf, unsigned n); class volk_gnsssdr_test_time_t { public: std::string name; double time; std::string units; }; class volk_gnsssdr_test_results_t { public: std::string name; std::string config_name; int vlen; int iter; std::map results; std::string best_arch_a; std::string best_arch_u; }; bool run_volk_gnsssdr_tests( volk_gnsssdr_func_desc_t, void(*)(), std::string, float, lv_32fc_t, int, int, std::vector *results = NULL, std::string puppet_master_name = "NULL", bool benchmark_mode=false, std::string kernel_regex="" ); #define VOLK_RUN_TESTS(func, tol, scalar, len, iter) \ BOOST_AUTO_TEST_CASE(func##_test) { \ BOOST_CHECK_EQUAL(run_volk_gnsssdr_tests( \ func##_get_func_desc(), (void (*)())func##_manual, \ std::string(#func), tol, scalar, len, iter, 0, "NULL"), \ 0); \ } #define VOLK_PROFILE(func, tol, scalar, len, iter, results, bnmode, kernel_regex) run_volk_gnsssdr_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), tol, scalar, len, iter, results, "NULL", bnmode, kernel_regex) #define VOLK_PUPPET_PROFILE(func, puppet_master_func, tol, scalar, len, iter, results, bnmode, kernel_regex) run_volk_gnsssdr_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), tol, scalar, len, iter, results, std::string(#puppet_master_func), bnmode, kernel_regex) typedef void (*volk_gnsssdr_fn_1arg)(void *, unsigned int, const char*); //one input, operate in place typedef void (*volk_gnsssdr_fn_2arg)(void *, void *, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_3arg)(void *, void *, void *, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_4arg)(void *, void *, void *, void *, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_1arg_s32f)(void *, float, unsigned int, const char*); //one input vector, one scalar float input typedef void (*volk_gnsssdr_fn_2arg_s32f)(void *, void *, float, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_3arg_s32f)(void *, void *, void *, float, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_1arg_s32fc)(void *, lv_32fc_t, unsigned int, const char*); //one input vector, one scalar float input typedef void (*volk_gnsssdr_fn_2arg_s32fc)(void *, void *, lv_32fc_t, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_3arg_s32fc)(void *, void *, void *, lv_32fc_t, unsigned int, const char*); //ADDED BY GNSS-SDR. START typedef void (*volk_gnsssdr_fn_1arg_s8i)(void *, char, unsigned int, const char*); //one input vector, one scalar char input typedef void (*volk_gnsssdr_fn_2arg_s8i)(void *, void *, char, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_3arg_s8i)(void *, void *, void *, char, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_1arg_s8ic)(void *, lv_8sc_t, unsigned int, const char*); //one input vector, one scalar lv_8sc_t vector input typedef void (*volk_gnsssdr_fn_2arg_s8ic)(void *, void *, lv_8sc_t, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_3arg_s8ic)(void *, void *, void *, lv_8sc_t, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_8arg)(void *, void *, void *, void *, void *, void *, void *, void *, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_8arg_s32f)(void *, void *, void *, void *, void *, void *, void *, void *, float, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_8arg_s32fc)(void *, void *, void *, void *, void *, void *, void *, void *, lv_32fc_t, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_8arg_s8i)(void *, void *, void *, void *, void *, void *, void *, void *, char, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_8arg_s8ic)(void *, void *, void *, void *, void *, void *, void *, void *, lv_8sc_t, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_12arg)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_12arg_s32f)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, float, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_12arg_s32fc)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, lv_32fc_t, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_12arg_s8i)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, char, unsigned int, const char*); typedef void (*volk_gnsssdr_fn_12arg_s8ic)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, lv_8sc_t, unsigned int, const char*); //ADDED BY GNSS-SDR. END #endif // GNSS_SDR_VOLK_QA_UTILS_H gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_add_quad_aligned16.cc0000644000175000017500000001003312576764164033115 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include //test for sse2 #ifndef LV_HAVE_SSE2 void qa_16s_add_quad_aligned16::t1() { printf("sse2 not available... no test performed\n"); } #else void qa_16s_add_quad_aligned16::t1() { volk_gnsssdr_environment_init(); clock_t start, end; double total; const int vlen = 3200; const int ITERS = 100000; __VOLK_ATTR_ALIGNED(16) short input0[vlen]; __VOLK_ATTR_ALIGNED(16) short input1[vlen]; __VOLK_ATTR_ALIGNED(16) short input2[vlen]; __VOLK_ATTR_ALIGNED(16) short input3[vlen]; __VOLK_ATTR_ALIGNED(16) short input4[vlen]; __VOLK_ATTR_ALIGNED(16) short output0[vlen]; __VOLK_ATTR_ALIGNED(16) short output1[vlen]; __VOLK_ATTR_ALIGNED(16) short output2[vlen]; __VOLK_ATTR_ALIGNED(16) short output3[vlen]; __VOLK_ATTR_ALIGNED(16) short output01[vlen]; __VOLK_ATTR_ALIGNED(16) short output11[vlen]; __VOLK_ATTR_ALIGNED(16) short output21[vlen]; __VOLK_ATTR_ALIGNED(16) short output31[vlen]; for(int i = 0; i < vlen; ++i) { short plus0 = ((short) (rand() - (RAND_MAX/2))) >> 2; short minus0 = ((short) (rand() - (RAND_MAX/2))) >> 2; short plus1 = ((short) (rand() - (RAND_MAX/2))) >> 2; short minus1 = ((short) (rand() - (RAND_MAX/2))) >> 2; short plus2 = ((short) (rand() - (RAND_MAX/2))) >> 2; short minus2 = ((short) (rand() - (RAND_MAX/2))) >> 2; short plus3 = ((short) (rand() - (RAND_MAX/2))) >> 2; short minus3 = ((short) (rand() - (RAND_MAX/2))) >> 2; short plus4 = ((short) (rand() - (RAND_MAX/2))) >> 2; short minus4 = ((short) (rand() - (RAND_MAX/2))) >> 2; input0[i] = plus0 - minus0; input1[i] = plus1 - minus1; input2[i] = plus2 - minus2; input3[i] = plus3 - minus3; input4[i] = plus4 - minus4; } printf("16s_add_quad_aligned\n"); start = clock(); for(int count = 0; count < ITERS; ++count) { volk_gnsssdr_16s_add_quad_aligned16_manual(output0, output1, output2, output3, input0, input1, input2, input3, input4, vlen << 1 , "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("generic_time: %f\n", total); start = clock(); for(int count = 0; count < ITERS; ++count) { volk_gnsssdr_16s_add_quad_aligned16_manual(output01, output11, output21, output31, input0, input1, input2, input3, input4, vlen << 1 , "sse2"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse2_time: %f\n", total); for(int i = 0; i < 1; ++i) { //printf("inputs: %d, %d\n", input0[i*2], input0[i*2 + 1]); //printf("generic... %d, ssse3... %d\n", output0[i], output1[i]); } for(int i = 0; i < vlen; ++i) { //printf("%d...%d\n", output0[i], output01[i]); CPPUNIT_ASSERT_EQUAL(output0[i], output01[i]); CPPUNIT_ASSERT_EQUAL(output1[i], output11[i]); CPPUNIT_ASSERT_EQUAL(output2[i], output21[i]); CPPUNIT_ASSERT_EQUAL(output3[i], output31[i]); } } #endif gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_utils.cc0000644000175000017500000011513012576764164030174 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include "qa_utils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include float uniform() { return 2.0 * ((float) rand() / RAND_MAX - 0.5); // uniformly (-1, 1) } template void random_floats (t *buf, unsigned n) { for (unsigned i = 0; i < n; i++) buf[i] = uniform (); } void load_random_data(void *data, volk_gnsssdr_type_t type, unsigned int n) { if(type.is_complex) n *= 2; if(type.is_float) { if(type.size == 8) random_floats((double *)data, n); else random_floats((float *)data, n); } else { float int_max = float(uint64_t(2) << (type.size*8)); if(type.is_signed) int_max /= 2.0; for(unsigned int i=0; i 8 or < 1"; //no shenanigans here } } } } static std::vector get_arch_list(volk_gnsssdr_func_desc_t desc) { std::vector archlist; for(size_t i = 0; i < desc.n_impls; i++) { //if(!(archs[i+1] & volk_gnsssdr_get_lvarch())) continue; //this arch isn't available on this pc archlist.push_back(std::string(desc.impl_names[i])); } return archlist; } volk_gnsssdr_type_t volk_gnsssdr_type_from_string(std::string name) { volk_gnsssdr_type_t type; type.is_float = false; type.is_scalar = false; type.is_complex = false; type.is_signed = false; type.size = 0; type.str = name; if(name.size() < 2) throw std::string("name too short to be a datatype"); //is it a scalar? if(name[0] == 's') { type.is_scalar = true; name = name.substr(1, name.size()-1); } //get the data size size_t last_size_pos = name.find_last_of("0123456789"); if(last_size_pos == std::string::npos) throw std::string("no size spec in type ").append(name); //will throw if malformed int size = boost::lexical_cast(name.substr(0, last_size_pos+1)); assert(((size % 8) == 0) && (size <= 64) && (size != 0)); type.size = size/8; //in bytes for(size_t i=last_size_pos+1; i < name.size(); i++) { switch (name[i]) { case 'f': type.is_float = true; break; case 'i': type.is_signed = true; break; case 'c': type.is_complex = true; break; case 'u': type.is_signed = false; break; default: throw; } } return type; } static void get_signatures_from_name(std::vector &inputsig, std::vector &outputsig, std::string name) { boost::char_separator sep("_"); boost::tokenizer > tok(name, sep); std::vector toked; tok.assign(name); toked.assign(tok.begin(), tok.end()); assert(toked[0] == "volk"); toked.erase(toked.begin()); toked.erase(toked.begin()); //ok. we're assuming a string in the form //(sig)_(multiplier-opt)_..._(name)_(sig)_(multiplier-opt)_..._(alignment) enum { SIDE_INPUT, SIDE_NAME, SIDE_OUTPUT } side = SIDE_INPUT; std::string fn_name; volk_gnsssdr_type_t type; BOOST_FOREACH(std::string token, toked) { try { type = volk_gnsssdr_type_from_string(token); if(side == SIDE_NAME) side = SIDE_OUTPUT; //if this is the first one after the name... if(side == SIDE_INPUT) inputsig.push_back(type); else outputsig.push_back(type); } catch (...) { if(token[0] == 'x') { //it's a multiplier if(side == SIDE_INPUT) assert(inputsig.size() > 0); else assert(outputsig.size() > 0); int multiplier = boost::lexical_cast(token.substr(1, token.size()-1)); //will throw if invalid for(int i=1; i &buffs, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], vlen, arch.c_str()); } inline void run_cast_test2(volk_gnsssdr_fn_2arg func, std::vector &buffs, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], vlen, arch.c_str()); } inline void run_cast_test3(volk_gnsssdr_fn_3arg func, std::vector &buffs, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], vlen, arch.c_str()); } inline void run_cast_test4(volk_gnsssdr_fn_4arg func, std::vector &buffs, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], vlen, arch.c_str()); } inline void run_cast_test1_s32f(volk_gnsssdr_fn_1arg_s32f func, std::vector &buffs, float scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], scalar, vlen, arch.c_str()); } inline void run_cast_test2_s32f(volk_gnsssdr_fn_2arg_s32f func, std::vector &buffs, float scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], scalar, vlen, arch.c_str()); } inline void run_cast_test3_s32f(volk_gnsssdr_fn_3arg_s32f func, std::vector &buffs, float scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], scalar, vlen, arch.c_str()); } inline void run_cast_test1_s32fc(volk_gnsssdr_fn_1arg_s32fc func, std::vector &buffs, lv_32fc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], scalar, vlen, arch.c_str()); } inline void run_cast_test2_s32fc(volk_gnsssdr_fn_2arg_s32fc func, std::vector &buffs, lv_32fc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], scalar, vlen, arch.c_str()); } inline void run_cast_test3_s32fc(volk_gnsssdr_fn_3arg_s32fc func, std::vector &buffs, lv_32fc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], scalar, vlen, arch.c_str()); } //ADDED BY GNSS-SDR. START inline void run_cast_test1_s8i(volk_gnsssdr_fn_1arg_s8i func, std::vector &buffs, char scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], scalar, vlen, arch.c_str()); } inline void run_cast_test2_s8i(volk_gnsssdr_fn_2arg_s8i func, std::vector &buffs, char scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], scalar, vlen, arch.c_str()); } inline void run_cast_test3_s8i(volk_gnsssdr_fn_3arg_s8i func, std::vector &buffs, char scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], scalar, vlen, arch.c_str()); } inline void run_cast_test1_s8ic(volk_gnsssdr_fn_1arg_s8ic func, std::vector &buffs, lv_8sc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], scalar, vlen, arch.c_str()); } inline void run_cast_test2_s8ic(volk_gnsssdr_fn_2arg_s8ic func, std::vector &buffs, lv_8sc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], scalar, vlen, arch.c_str()); } inline void run_cast_test3_s8ic(volk_gnsssdr_fn_3arg_s8ic func, std::vector &buffs, lv_8sc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], scalar, vlen, arch.c_str()); } inline void run_cast_test8(volk_gnsssdr_fn_8arg func, std::vector &buffs, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], vlen, arch.c_str()); } inline void run_cast_test8_s8i(volk_gnsssdr_fn_8arg_s8i func, std::vector &buffs, char scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], scalar, vlen, arch.c_str()); } inline void run_cast_test8_s8ic(volk_gnsssdr_fn_8arg_s8ic func, std::vector &buffs, lv_8sc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], scalar, vlen, arch.c_str()); } inline void run_cast_test8_s32f(volk_gnsssdr_fn_8arg_s32f func, std::vector &buffs, float scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], scalar, vlen, arch.c_str()); } inline void run_cast_test8_s32fc(volk_gnsssdr_fn_8arg_s32fc func, std::vector &buffs, lv_32fc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], scalar, vlen, arch.c_str()); } inline void run_cast_test12(volk_gnsssdr_fn_12arg func, std::vector &buffs, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], buffs[8], buffs[9], buffs[10], buffs[11], vlen, arch.c_str()); } inline void run_cast_test12_s8i(volk_gnsssdr_fn_12arg_s8i func, std::vector &buffs, char scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], buffs[8], buffs[9], buffs[10], buffs[11], scalar, vlen, arch.c_str()); } inline void run_cast_test12_s8ic(volk_gnsssdr_fn_12arg_s8ic func, std::vector &buffs, lv_8sc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], buffs[8], buffs[9], buffs[10], buffs[11], scalar, vlen, arch.c_str()); } inline void run_cast_test12_s32f(volk_gnsssdr_fn_12arg_s32f func, std::vector &buffs, float scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], buffs[8], buffs[9], buffs[10], buffs[11], scalar, vlen, arch.c_str()); } inline void run_cast_test12_s32fc(volk_gnsssdr_fn_12arg_s32fc func, std::vector &buffs, lv_32fc_t scalar, unsigned int vlen, unsigned int iter, std::string arch) { while(iter--) func(buffs[0], buffs[1], buffs[2], buffs[3], buffs[4], buffs[5], buffs[6], buffs[7], buffs[8], buffs[9], buffs[10], buffs[11], scalar, vlen, arch.c_str()); } //ADDED BY GNSS-SDR. END // This function is a nop that helps resolve GNU Radio bugs 582 and 583. // Without this the cast in run_volk_gnsssdr_tests for tol_i = static_cast(float tol) // won't happen on armhf (reported on cortex A9 and A15). void lv_force_cast_hf( int tol_i, float tol_f) { int diff_i = 1; float diff_f = 1; if( diff_i > tol_i ) std::cout << "" ; if( diff_f > tol_f ) std::cout << "" ; } template bool fcompare(t *in1, t *in2, unsigned int vlen, float tol) { bool fail = false; int print_max_errs = 10; for(unsigned int i=0; i tol ) { fail = true; if(print_max_errs-- > 0) { std::cout << "offset " << i << " in1: " << t(((t *)(in1))[i]) << " in2: " << t(((t *)(in2))[i]) << std::endl; } } } // the primary test is the percent different greater than given tol else if(fabs(((t *)(in1))[i] - ((t *)(in2))[i])/(((t *)in1)[i]) > tol) { fail = true; if(print_max_errs-- > 0) { std::cout << "offset " << i << " in1: " << t(((t *)(in1))[i]) << " in2: " << t(((t *)(in2))[i]) << std::endl; } } } return fail; } template bool ccompare(t *in1, t *in2, unsigned int vlen, float tol) { bool fail = false; int print_max_errs = 10; for(unsigned int i=0; i<2*vlen; i+=2) { t diff[2] = { in1[i] - in2[i], in1[i+1] - in2[i+1] }; t err = std::sqrt(diff[0] * diff[0] + diff[1] * diff[1]); t norm = std::sqrt(in1[i] * in1[i] + in1[i+1] * in1[i+1]); // for very small numbers we'll see round off errors due to limited // precision. So a special test case... if (norm < 1e-30) { if (err > tol) { fail = true; if(print_max_errs-- > 0) { std::cout << "offset " << i/2 << " in1: " << in1[i] << " + " << in1[i+1] << "j in2: " << in2[i] << " + " << in2[i+1] << "j" << std::endl; } } } // the primary test is the percent different greater than given tol else if((err / norm) > tol) { fail = true; if(print_max_errs-- > 0) { std::cout << "offset " << i/2 << " in1: " << in1[i] << " + " << in1[i+1] << "j in2: " << in2[i] << " + " << in2[i+1] << "j" << std::endl; } } } return fail; } template bool icompare(t *in1, t *in2, unsigned int vlen, unsigned int tol) { bool fail = false; int print_max_errs = 10; for(unsigned int i=0; i tol) { fail = true; if(print_max_errs-- > 0) { std::cout << "offset " << i << " in1: " << static_cast(t(((t *)(in1))[i])) << " in2: " << static_cast(t(((t *)(in2))[i])) << std::endl; } } } return fail; } class volk_gnsssdr_qa_aligned_mem_pool { public: void *get_new(size_t size) { size_t alignment = volk_gnsssdr_get_alignment(); void* ptr = volk_gnsssdr_malloc(size, alignment); memset(ptr, 0x00, size); _mems.push_back(ptr); return ptr; } ~volk_gnsssdr_qa_aligned_mem_pool() { for(unsigned int ii = 0; ii < _mems.size(); ++ii) { volk_gnsssdr_free(_mems[ii]); } } private: std::vector _mems; }; bool run_volk_gnsssdr_tests(volk_gnsssdr_func_desc_t desc, void (*manual_func)(), std::string name, float tol, lv_32fc_t scalar, int vlen, int iter, std::vector *results, std::string puppet_master_name, bool benchmark_mode, std::string kernel_regex ) { boost::xpressive::sregex kernel_expression = boost::xpressive::sregex::compile(kernel_regex); if( !boost::xpressive::regex_search(name, kernel_expression) ) { // in this case we have a regex and are only looking to test one kernel return false; } if(results) { results->push_back(volk_gnsssdr_test_results_t()); results->back().name = name; results->back().vlen = vlen; results->back().iter = iter; } std::cout << "RUN_VOLK_TESTS: " << name << "(" << vlen << "," << iter << ")" << std::endl; // The multiply and lv_force_cast_hf are work arounds for GNU Radio bugs 582 and 583 // The bug is the casting/assignment below do not happen, which results in false // positives when testing for errors in fcompare and icompare. // Since this only happens on armhf (reported for Cortex A9 and A15) combined with // the following fixes it is suspected to be a compiler bug. // Bug 1272024 on launchpad has been filed with Linaro GCC. const float tol_f = tol*1.0000001; const unsigned int tol_i = static_cast(tol); lv_force_cast_hf( tol_i, tol_f ); //first let's get a list of available architectures for the test std::vector arch_list = get_arch_list(desc); if((!benchmark_mode) && (arch_list.size() < 2)) { std::cout << "no architectures to test" << std::endl; return false; } //something that can hang onto memory and cleanup when this function exits volk_gnsssdr_qa_aligned_mem_pool mem_pool; //now we have to get a function signature by parsing the name std::vector inputsig, outputsig; get_signatures_from_name(inputsig, outputsig, name); //pull the input scalars into their own vector std::vector inputsc; for(size_t i=0; i inbuffs; BOOST_FOREACH(volk_gnsssdr_type_t sig, inputsig) { if(!sig.is_scalar) //we don't make buffers for scalars inbuffs.push_back(mem_pool.get_new(vlen*sig.size*(sig.is_complex ? 2 : 1))); } for(size_t i=0; i > test_data; for(size_t i=0; i arch_buffs; for(size_t j=0; j both_sigs; both_sigs.insert(both_sigs.end(), outputsig.begin(), outputsig.end()); both_sigs.insert(both_sigs.end(), inputsig.begin(), inputsig.end()); //now run the test clock_t start, end; std::vector profile_times; for(size_t i = 0; i < arch_list.size(); i++) { start = clock(); switch(both_sigs.size()) { case 1: if(inputsc.size() == 0) { run_cast_test1((volk_gnsssdr_fn_1arg)(manual_func), test_data[i], vlen, iter, arch_list[i]); } else if(inputsc.size() == 1 && inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test1_s32fc((volk_gnsssdr_fn_1arg_s32fc)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test1_s32f((volk_gnsssdr_fn_1arg_s32f)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } //ADDED BY GNSS-SDR. START else if(inputsc.size() == 1 && !inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test1_s8ic((volk_gnsssdr_fn_1arg_s8ic)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test1_s8i((volk_gnsssdr_fn_1arg_s8i)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } //ADDED BY GNSS-SDR. END else throw "unsupported 1 arg function >1 scalars"; break; case 2: if(inputsc.size() == 0) { run_cast_test2((volk_gnsssdr_fn_2arg)(manual_func), test_data[i], vlen, iter, arch_list[i]); } else if(inputsc.size() == 1 && inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test2_s32fc((volk_gnsssdr_fn_2arg_s32fc)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test2_s32f((volk_gnsssdr_fn_2arg_s32f)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } //ADDED BY GNSS-SDR. START else if(inputsc.size() == 1 && !inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test2_s8ic((volk_gnsssdr_fn_2arg_s8ic)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test2_s8i((volk_gnsssdr_fn_2arg_s8i)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } //ADDED BY GNSS-SDR. END else throw "unsupported 2 arg function >1 scalars"; break; case 3: if(inputsc.size() == 0) { run_cast_test3((volk_gnsssdr_fn_3arg)(manual_func), test_data[i], vlen, iter, arch_list[i]); } else if(inputsc.size() == 1 && inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test3_s32fc((volk_gnsssdr_fn_3arg_s32fc)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test3_s32f((volk_gnsssdr_fn_3arg_s32f)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } //ADDED BY GNSS-SDR. START else if(inputsc.size() == 1 && !inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test3_s8ic((volk_gnsssdr_fn_3arg_s8ic)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test3_s8i((volk_gnsssdr_fn_3arg_s8i)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } //ADDED BY GNSS-SDR. END else throw "unsupported 3 arg function >1 scalars"; break; case 4: run_cast_test4((volk_gnsssdr_fn_4arg)(manual_func), test_data[i], vlen, iter, arch_list[i]); break; //ADDED BY GNSS-SDR. START case 8: if(inputsc.size() == 0) { run_cast_test8((volk_gnsssdr_fn_8arg)(manual_func), test_data[i], vlen, iter, arch_list[i]); } else if(inputsc.size() == 1 && inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test8_s32fc((volk_gnsssdr_fn_8arg_s32fc)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test8_s32f((volk_gnsssdr_fn_8arg_s32f)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } else if(inputsc.size() == 1 && !inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test8_s8ic((volk_gnsssdr_fn_8arg_s8ic)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test8_s8i((volk_gnsssdr_fn_8arg_s8i)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } else throw "unsupported 8 arg function >1 scalars"; break; case 12: if(inputsc.size() == 0) { run_cast_test12((volk_gnsssdr_fn_12arg)(manual_func), test_data[i], vlen, iter, arch_list[i]); } else if(inputsc.size() == 1 && inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test12_s32fc((volk_gnsssdr_fn_12arg_s32fc)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test12_s32f((volk_gnsssdr_fn_12arg_s32f)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } else if(inputsc.size() == 1 && !inputsc[0].is_float) { if(inputsc[0].is_complex) { run_cast_test12_s8ic((volk_gnsssdr_fn_12arg_s8ic)(manual_func), test_data[i], scalar, vlen, iter, arch_list[i]); } else { run_cast_test12_s8i((volk_gnsssdr_fn_12arg_s8i)(manual_func), test_data[i], scalar.real(), vlen, iter, arch_list[i]); } } else throw "unsupported 12 arg function >1 scalars"; break; //ADDED BY GNSS-SDR. END default: throw "no function handler for this signature"; break; } end = clock(); double arch_time = 1000.0 * (double)(end-start)/(double)CLOCKS_PER_SEC; std::cout << arch_list[i] << " completed in " << arch_time << "ms" << std::endl; if(results) { volk_gnsssdr_test_time_t result; result.name = arch_list[i]; result.time = arch_time; result.units = "ms"; results->back().results[result.name] = result; } profile_times.push_back(arch_time); } //and now compare each output to the generic output //first we have to know which output is the generic one, they aren't in order... size_t generic_offset=0; for(size_t i=0; i arch_results; for(size_t i=0; i::max(); double best_time_u = std::numeric_limits::max(); std::string best_arch_a = "generic"; std::string best_arch_u = "generic"; for(size_t i=0; i < arch_list.size(); i++) { if((profile_times[i] < best_time_u) && arch_results[i] && desc.impl_alignment[i] == 0) { best_time_u = profile_times[i]; best_arch_u = arch_list[i]; } if((profile_times[i] < best_time_a) && arch_results[i]) { best_time_a = profile_times[i]; best_arch_a = arch_list[i]; } } std::cout << "Best aligned arch: " << best_arch_a << std::endl; std::cout << "Best unaligned arch: " << best_arch_u << std::endl; if(results) { if(puppet_master_name == "NULL") { results->back().config_name = name; } else { results->back().config_name = puppet_master_name; } results->back().best_arch_a = best_arch_a; results->back().best_arch_u = best_arch_u; } return fail_global; } ././@LongLink0000644000000000000000000000015500000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_branch_4_state_8_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_branch_4_state_8_alig0000644000175000017500000001203412576764164033243 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include //test for ssse3 #ifndef LV_HAVE_SSSE3 void qa_16s_branch_4_state_8_aligned16::t1() { printf("ssse3 not available... no test performed\n"); } #else void qa_16s_branch_4_state_8_aligned16::t1() { const int num_iters = 1000000; const int vlen = 32; static char permute0[16]__attribute__((aligned(16))) = {0x0e, 0x0f, 0x0a, 0x0b, 0x04, 0x05, 0x00, 0x01, 0x0c, 0x0d, 0x08, 0x09, 0x06, 0x07, 0x02, 0x03}; static char permute1[16]__attribute__((aligned(16))) = {0x0c, 0x0d, 0x08, 0x09, 0x06, 0x07, 0x02, 0x03, 0x0e, 0x0f, 0x0a, 0x0b, 0x04, 0x05, 0x00, 0x01}; static char permute2[16]__attribute__((aligned(16))) = {0x02, 0x03, 0x06, 0x07, 0x08, 0x09, 0x0c, 0x0d, 0x00, 0x01, 0x04, 0x05, 0x0a, 0x0b, 0x0e, 0x0f}; static char permute3[16]__attribute__((aligned(16))) = {0x00, 0x01, 0x04, 0x05, 0x0a, 0x0b, 0x0e, 0x0f, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09, 0x0c, 0x0d}; static char* permuters[4] = {permute0, permute1, permute2, permute3}; unsigned int num_bytes = vlen << 1; volk_gnsssdr_environment_init(); clock_t start, end; double total; __VOLK_ATTR_ALIGNED(16) short target[vlen]; __VOLK_ATTR_ALIGNED(16) short target2[vlen]; __VOLK_ATTR_ALIGNED(16) short target3[vlen]; __VOLK_ATTR_ALIGNED(16) short src0[vlen]; __VOLK_ATTR_ALIGNED(16) short permute_indexes[vlen] = { 7, 5, 2, 0, 6, 4, 3, 1, 6, 4, 3, 1, 7, 5, 2, 0, 1, 3, 4, 6, 0, 2, 5, 7, 0, 2, 5, 7, 1, 3, 4, 6 }; __VOLK_ATTR_ALIGNED(16) short cntl0[vlen] = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; __VOLK_ATTR_ALIGNED(16) short cntl1[vlen] = { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; __VOLK_ATTR_ALIGNED(16) short cntl2[vlen] = { 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000 }; __VOLK_ATTR_ALIGNED(16) short cntl3[vlen] = { 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff }; __VOLK_ATTR_ALIGNED(16) short scalars[4] = {1, 2, 3, 4}; for(int i = 0; i < vlen; ++i) { src0[i] = i; } printf("16s_branch_4_state_8_aligned\n"); start = clock(); for(int i = 0; i < num_iters; ++i) { volk_gnsssdr_16s_permute_and_scalar_add_aligned16_manual(target, src0, permute_indexes, cntl0, cntl1, cntl2, cntl3, scalars, num_bytes, "sse2"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("permute_and_scalar_add_time: %f\n", total); start = clock(); for(int i = 0; i < num_iters; ++i) { volk_gnsssdr_16s_branch_4_state_8_aligned16_manual(target2, src0, permuters, cntl2, cntl3, scalars, "ssse3"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("branch_4_state_8_time, ssse3: %f\n", total); start = clock(); for(int i = 0; i < num_iters; ++i) { volk_gnsssdr_16s_branch_4_state_8_aligned16_manual(target3, src0, permuters, cntl2, cntl3, scalars, "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("permute_and_scalar_add_time, generic: %f\n", total); for(int i = 0; i < vlen; ++i) { printf("psa... %d, b4s8... %d\n", target[i], target3[i]); } for(int i = 0; i < vlen; ++i) { CPPUNIT_ASSERT(target[i] == target2[i]); CPPUNIT_ASSERT(target[i] == target3[i]); } } #endif ././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_quad_max_star_aligned16.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_quad_max_star_aligned0000644000175000017500000000224212576764164033453 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_16S_QUAD_MAX_STAR_ALIGNED16_H #define INCLUDED_QA_16S_QUAD_MAX_STAR_ALIGNED16_H #include #include class qa_16s_quad_max_star_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_16s_quad_max_star_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_16S_QUAD_MAX_STAR_ALIGNED16_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt0000644000175000017500000006025312576764211030602 0ustar carlescarles# # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # ######################################################################## # header file detection ######################################################################## include(CheckIncludeFile) CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H) if(HAVE_CPUID_H) add_definitions(-DHAVE_CPUID_H) endif() CHECK_INCLUDE_FILE(intrin.h HAVE_INTRIN_H) if(HAVE_INTRIN_H) add_definitions(-DHAVE_INTRIN_H) endif() CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H) if(HAVE_FENV_H) add_definitions(-DHAVE_FENV_H) endif() CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H) if(HAVE_DLFCN_H) add_definitions(-DHAVE_DLFCN_H) list(APPEND volk_gnsssdr_libraries ${CMAKE_DL_LIBS}) endif() ######################################################################## # Setup the compiler name ######################################################################## set(COMPILER_NAME ${CMAKE_C_COMPILER_ID}) if(MSVC) #its not set otherwise set(COMPILER_NAME MSVC) endif() message(STATUS "Compiler name: ${COMPILER_NAME}") if(NOT DEFINED COMPILER_NAME) message(FATAL_ERROR "COMPILER_NAME undefined. Volk build may not support this compiler.") endif() ######################################################################## # Special clang flag so flag checks can fail ######################################################################## if(COMPILER_NAME MATCHES "GNU") include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-Werror=unused-command-line-argument" HAVE_WERROR_UNUSED_CMD_LINE_ARG) if(HAVE_WERROR_UNUSED_CMD_LINE_ARG) set(VOLK_FLAG_CHECK_FLAGS "-Werror=unused-command-line-argument") endif() endif() ######################################################################## # check for posix_memalign, since some OSs do not internally define # _XOPEN_SOURCE or _POSIX_C_SOURCE; they leave this to the user. ######################################################################## include(CheckFunctionExists) CHECK_FUNCTION_EXISTS(posix_memalign HAVE_POSIX_MEMALIGN) if(HAVE_POSIX_MEMALIGN) add_definitions(-DHAVE_POSIX_MEMALIGN) endif(HAVE_POSIX_MEMALIGN) if(NOT DEFINED _XOPEN_SOURCE) add_definitions(-D_XOPEN_SOURCE=700) endif(NOT DEFINED _XOPEN_SOURCE) ######################################################################## # detect x86 flavor of CPU ######################################################################## if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(i.86|x86|x86_64|amd64)$") message(STATUS "x86* CPU detected") set(CPU_IS_x86 TRUE) endif() ######################################################################## # determine passing architectures based on compile flag tests ######################################################################## execute_process( COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${CMAKE_SOURCE_DIR}/gen/volk_gnsssdr_compile_utils.py --mode "arch_flags" --compiler "${COMPILER_NAME}" OUTPUT_VARIABLE arch_flag_lines OUTPUT_STRIP_TRAILING_WHITESPACE ) macro(check_arch arch_name) set(flags ${ARGN}) set(have_${arch_name} TRUE) foreach(flag ${flags}) include(CheckCXXCompilerFlag) set(have_flag have${flag}) execute_process( #make the have_flag have nice alphanum chars (just for looks/not necessary) COMMAND ${PYTHON_EXECUTABLE} -c "import re; print(re.sub('\\W', '_', '${have_flag}'))" OUTPUT_VARIABLE have_flag OUTPUT_STRIP_TRAILING_WHITESPACE ) if(VOLK_FLAG_CHECK_FLAGS) set(CMAKE_REQUIRED_FLAGS ${VOLK_FLAG_CHECK_FLAGS}) endif() CHECK_CXX_COMPILER_FLAG(${flag} ${have_flag}) unset(CMAKE_REQUIRED_FLAGS) if (NOT ${have_flag}) set(have_${arch_name} FALSE) endif() endforeach() if (have_${arch_name}) list(APPEND available_archs ${arch_name}) endif() endmacro(check_arch) foreach(line ${arch_flag_lines}) string(REGEX REPLACE "," ";" arch_flags ${line}) check_arch(${arch_flags}) endforeach(line) macro(OVERRULE_ARCH arch reason) message(STATUS "${reason}, Overruled arch ${arch}") list(REMOVE_ITEM available_archs ${arch}) endmacro(OVERRULE_ARCH) ######################################################################## # eliminate AVX on if not on x86, or if the compiler does not accept # the xgetbv instruction, or {if not cross-compiling and the xgetbv # executable does not function correctly}. ######################################################################## set(HAVE_XGETBV 0) set(HAVE_AVX_CVTPI32_PS 0) if(CPU_IS_x86) # check to see if the compiler/linker works with xgetb instruction file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c "unsigned long long _xgetbv(unsigned int index) { unsigned int eax, edx; __asm__ __volatile__(\"xgetbv\" : \"=a\"(eax), \"=d\"(edx) : \"c\"(index)); return ((unsigned long long)edx << 32) | eax; } int main (void) { (void) _xgetbv(0); return (0); }") execute_process(COMMAND ${CMAKE_C_COMPILER} -o ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE avx_compile_result) if(NOT ${avx_compile_result} EQUAL 0) OVERRULE_ARCH(avx "Compiler or linker missing xgetbv instruction") elseif(NOT CROSSCOMPILE_MULTILIB) execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE avx_exe_result) if(NOT ${avx_exe_result} EQUAL 0) OVERRULE_ARCH(avx "CPU missing xgetbv") else() set(HAVE_XGETBV 1) endif() else() # cross compiling and compiler/linker seems to work; assume working set(HAVE_XGETBV 1) endif() file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c) ######################################################################### # eliminate AVX if cvtpi32_ps intrinsic fails like some versions of clang ######################################################################### # check to see if the compiler/linker works with cvtpi32_ps instrinsic when using AVX file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c "#include \nint main (void) {__m128 __a; __m64 __b; __m128 foo = _mm_cvtpi32_ps(__a, __b); return (0); }") execute_process(COMMAND ${CMAKE_C_COMPILER} -mavx -o ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE avx_compile_result) if(NOT ${avx_compile_result} EQUAL 0) OVERRULE_ARCH(avx "Compiler missing cvtpi32_ps instrinsic") elseif(NOT CROSSCOMPILE_MULTILIB) execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE avx_exe_result) if(NOT ${avx_exe_result} EQUAL 0) OVERRULE_ARCH(avx "CPU missing cvtpi32_ps") else() set(HAVE_AVX_CVTPI32_PS 1) endif() else() set(HAVE_AVX_CVTPI32_PS 1) endif() file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c) # Disable SSE4a if Clang is less than version 3.2 if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") # Figure out the version of Clang if(CMAKE_VERSION VERSION_LESS "2.8.10") # Exctract the Clang version from the --version string. # In cmake 2.8.10, we can just use CMAKE_C_COMPILER_VERSION # without having to go through these string manipulations execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE clang_version) string(REGEX MATCH "[0-9].[0-9]" CMAKE_C_COMPILER_VERSION ${clang_version}) endif(CMAKE_VERSION VERSION_LESS "2.8.10") if(CMAKE_C_COMPILER_VERSION VERSION_LESS "3.2") OVERRULE_ARCH(sse4_a "Clang >= 3.2 required for SSE4a") endif(CMAKE_C_COMPILER_VERSION VERSION_LESS "3.2") endif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") endif(CPU_IS_x86) if(${HAVE_XGETBV}) add_definitions(-DHAVE_XGETBV) endif() if(${HAVE_AVX_CVTPI32_PS}) add_definitions(-DHAVE_AVX_CVTPI32_PS) endif() ######################################################################## # if the CPU is not x86, eliminate all Intel SIMD ######################################################################## if(NOT CPU_IS_x86) OVERRULE_ARCH(3dnow "Architecture is not x86 or x86_64") OVERRULE_ARCH(mmx "Architecture is not x86 or x86_64") OVERRULE_ARCH(sse "Architecture is not x86 or x86_64") OVERRULE_ARCH(sse2 "Architecture is not x86 or x86_64") OVERRULE_ARCH(sse3 "Architecture is not x86 or x86_64") OVERRULE_ARCH(ssse3 "Architecture is not x86 or x86_64") OVERRULE_ARCH(sse4_a "Architecture is not x86 or x86_64") OVERRULE_ARCH(sse4_1 "Architecture is not x86 or x86_64") OVERRULE_ARCH(sse4_2 "Architecture is not x86 or x86_64") OVERRULE_ARCH(avx "Architecture is not x86 or x86_64") endif(NOT CPU_IS_x86) ######################################################################## # implement overruling in the ORC case, # since ORC always passes flag detection ######################################################################## find_package(ORC) if(NOT ORC_FOUND) OVERRULE_ARCH(orc "ORC support not found") endif() ######################################################################## # implement overruling in the non-multilib case # this makes things work when both -m32 and -m64 pass ######################################################################## if(NOT CROSSCOMPILE_MULTILIB AND CPU_IS_x86) if( CMAKE_SIZEOF_VOID_P EQUAL 8 ) OVERRULE_ARCH(32 "CPU width is 64 bits") endif() if( CMAKE_SIZEOF_VOID_P EQUAL 4 ) OVERRULE_ARCH(64 "CPU width is 32 bits") endif() #MSVC 64 bit does not have MMX, overrule it if (CMAKE_SIZEOF_VOID_P EQUAL 8 AND MSVC) OVERRULE_ARCH(mmx "No MMX for Win64") endif() endif() ######################################################################## # done overrules! print the result ######################################################################## message(STATUS "Available architectures: ${available_archs}") ######################################################################## # determine available machines given the available architectures ######################################################################## execute_process( COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${CMAKE_SOURCE_DIR}/gen/volk_gnsssdr_compile_utils.py --mode "machines" --archs "${available_archs}" OUTPUT_VARIABLE available_machines OUTPUT_STRIP_TRAILING_WHITESPACE ) ######################################################################## # Implement machine overruling for redundant machines: # A machine is redundant when expansion rules occur, # and the arch superset passes configuration checks. # When this occurs, eliminate the redundant machines # to avoid unnecessary compilation of subset machines. ######################################################################## foreach(arch mmx orc 64 32) foreach(machine_name ${available_machines}) string(REPLACE "_${arch}" "" machine_name_no_arch ${machine_name}) if (${machine_name} STREQUAL ${machine_name_no_arch}) else() list(REMOVE_ITEM available_machines ${machine_name_no_arch}) endif() endforeach(machine_name) endforeach(arch) ######################################################################## # done overrules! print the result ######################################################################## message(STATUS "Available machines: ${available_machines}") ######################################################################## # Create rules to run the volk_gnsssdr generator ######################################################################## #dependencies are all python, xml, and header implementation files file(GLOB xml_files ${CMAKE_SOURCE_DIR}/gen/*.xml) file(GLOB py_files ${CMAKE_SOURCE_DIR}/gen/*.py) file(GLOB h_files ${CMAKE_SOURCE_DIR}/kernels/volk_gnsssdr/*.h) macro(gen_template tmpl output) list(APPEND volk_gnsssdr_gen_sources ${output}) add_custom_command( OUTPUT ${output} DEPENDS ${xml_files} ${py_files} ${h_files} ${tmpl} COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${CMAKE_SOURCE_DIR}/gen/volk_gnsssdr_tmpl_utils.py --input ${tmpl} --output ${output} ${ARGN} ) endmacro(gen_template) make_directory(${CMAKE_BINARY_DIR}/include/volk_gnsssdr) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr.tmpl.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr.h) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr.tmpl.c ${CMAKE_BINARY_DIR}/lib/volk_gnsssdr.c) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_typedefs.tmpl.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr_typedefs.h) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_cpu.tmpl.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr_cpu.h) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_cpu.tmpl.c ${CMAKE_BINARY_DIR}/lib/volk_gnsssdr_cpu.c) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_config_fixed.tmpl.h ${CMAKE_BINARY_DIR}/include/volk_gnsssdr/volk_gnsssdr_config_fixed.h) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_machines.tmpl.h ${CMAKE_BINARY_DIR}/lib/volk_gnsssdr_machines.h) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_machines.tmpl.c ${CMAKE_BINARY_DIR}/lib/volk_gnsssdr_machines.c) set(BASE_CFLAGS NONE) STRING(TOUPPER ${CMAKE_BUILD_TYPE} CBTU) MESSAGE(STATUS BUILT TYPE ${CBTU}) MESSAGE(STATUS "Base cflags = ${CMAKE_C_FLAGS_${CBTU}} ${CMAKE_C_FLAGS}") set(COMPILER_INFO "") IF(MSVC) IF(MSVC90) #Visual Studio 9 SET(cmake_c_compiler_version "Microsoft Visual Studio 9.0") ELSE(MSVC10) #Visual Studio 10 SET(cmake_c_compiler_version "Microsoft Visual Studio 10.0") ELSE(MSVC11) #Visual Studio 11 SET(cmake_c_compiler_version "Microsoft Visual Studio 11.0") ELSE(MSVC12) #Visual Studio 12 SET(cmake_c_compiler_version "Microsoft Visual Studio 12.0") ENDIF() ELSE() execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE cmake_c_compiler_version) ENDIF(MSVC) set(COMPILER_INFO "${CMAKE_C_COMPILER}:::${CMAKE_C_FLAGS_${GRCBTU}} ${CMAKE_C_FLAGS}\n${CMAKE_CXX_COMPILER}:::${CMAKE_CXX_FLAGS_${GRCBTU}} ${CMAKE_CXX_FLAGS}\n" ) foreach(machine_name ${available_machines}) #generate machine source set(machine_source ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_machine_${machine_name}.c) gen_template(${CMAKE_SOURCE_DIR}/tmpl/volk_gnsssdr_machine_xxx.tmpl.c ${machine_source} ${machine_name}) #determine machine flags execute_process( COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${CMAKE_SOURCE_DIR}/gen/volk_gnsssdr_compile_utils.py --mode "machine_flags" --machine "${machine_name}" --compiler "${COMPILER_NAME}" OUTPUT_VARIABLE ${machine_name}_flags OUTPUT_STRIP_TRAILING_WHITESPACE ) MESSAGE(STATUS "BUILD INFO ::: ${machine_name} ::: ${COMPILER_NAME} ::: ${CMAKE_C_FLAGS_${CBTU}} ${CMAKE_C_FLAGS} ${${machine_name}_flags}") set(COMPILER_INFO "${COMPILER_INFO}${machine_name}:::${COMPILER_NAME}:::${CMAKE_C_FLAGS_${CBTU}} ${CMAKE_C_FLAGS} ${${machine_name}_flags}\n" ) if(${machine_name}_flags) set_source_files_properties(${machine_source} PROPERTIES COMPILE_FLAGS "${${machine_name}_flags}") endif() #add to available machine defs string(TOUPPER LV_MACHINE_${machine_name} machine_def) list(APPEND machine_defs ${machine_def}) endforeach(machine_name) # Convert to a C string to compile and display properly string(STRIP "${cmake_c_compiler_version}" cmake_c_compiler_version) string(STRIP ${COMPILER_INFO} COMPILER_INFO) MESSAGE(STATUS "Compiler Version: ${cmake_c_compiler_version}") string(REPLACE "\n" " \\n" cmake_c_compiler_version ${cmake_c_compiler_version}) string(REPLACE "\n" " \\n" COMPILER_INFO ${COMPILER_INFO}) ######################################################################## # Set local include directories first ######################################################################## include_directories( ${CMAKE_BINARY_DIR}/include ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/kernels ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) ######################################################################## # Handle ASM support # on by default, but let users turn it off ######################################################################## if(${CMAKE_VERSION} VERSION_GREATER "2.8.9") set(ASM_ARCHS_AVAILABLE "armv7") set(FULL_C_FLAGS "${CMAKE_C_FLAGS}" "${CMAKE_CXX_COMPILER_ARG1}") # sort through a list of all architectures we have ASM for # if we find one that matches our current system architecture # set up the assembler flags and include the source files foreach(ARCH ${ASM_ARCHS_AVAILABLE}) string(REGEX MATCH "${ARCH}" ASM_ARCH "${FULL_C_FLAGS}") if( ASM_ARCH STREQUAL "armv7" ) message(STATUS "---- Adding ASM files") # we always use ATT syntax message(STATUS "-- Detected armv7 architecture; enabling ASM") # setup architecture specific assembler flags set(ARCH_ASM_FLAGS "-mfpu=neon -g") # then add the files include_directories(${CMAKE_SOURCE_DIR}/kernels/volk_gnsssdr/asm/neon) file(GLOB asm_files ${CMAKE_SOURCE_DIR}/kernels/volk_gnsssdr/asm/neon/*.s) foreach(asm_file ${asm_files}) list(APPEND volk_gnsssdr_sources ${asm_file}) message(STATUS "Adding source file: ${asm_file}") endforeach(asm_file) endif() enable_language(ASM) set(CMAKE_ASM_FLAGS ${ARCH_ASM_FLAGS}) message(STATUS "c flags: ${FULL_C_FLAGS}") message(STATUS "asm flags: ${CMAKE_ASM_FLAGS}") endforeach(ARCH) else(${CMAKE_VERSION} VERSION_GREATER "2.8.9") message(STATUS "Not enabling ASM support. CMake >= 2.8.10 required.") foreach(machine_name ${available_machines}) string(REGEX MATCH "neon" NEON_MACHINE ${machine_name}) if( NEON_MACHINE STREQUAL "neon") message(FATAL_ERROR "CMake >= 2.8.10 is required for ARM NEON support") endif() endforeach() endif(${CMAKE_VERSION} VERSION_GREATER "2.8.9") ######################################################################## # Handle orc support ######################################################################## if(ORC_FOUND) #setup orc library usage include_directories(${ORC_INCLUDE_DIRS}) link_directories(${ORC_LIBRARY_DIRS}) list(APPEND volk_gnsssdr_libraries ${ORC_LIBRARIES}) #setup orc functions file(GLOB orc_files ${CMAKE_SOURCE_DIR}/orc/*.orc) foreach(orc_file ${orc_files}) #extract the name for the generated c source from the orc file get_filename_component(orc_file_name_we ${orc_file} NAME_WE) set(orcc_gen ${CMAKE_CURRENT_BINARY_DIR}/${orc_file_name_we}.c) #create a rule to generate the source and add to the list of sources add_custom_command( COMMAND ${ORCC_EXECUTABLE} --include math.h --implementation -o ${orcc_gen} ${orc_file} DEPENDS ${orc_file} OUTPUT ${orcc_gen} ) list(APPEND volk_gnsssdr_sources ${orcc_gen}) endforeach(orc_file) else() message(STATUS "Did not find liborc and orcc, disabling orc support...") endif() ######################################################################## # Handle the generated constants ######################################################################## execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import time;print time.strftime('%a, %d %b %Y %H:%M:%S', time.gmtime())" OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "Loading build date ${BUILD_DATE} into constants...") message(STATUS "Loading version ${VERSION} into constants...") #double escape for windows backslash path separators string(REPLACE "\\" "\\\\" prefix ${prefix}) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/constants.c.in ${CMAKE_CURRENT_BINARY_DIR}/constants.c @ONLY) list(APPEND volk_gnsssdr_sources ${CMAKE_CURRENT_BINARY_DIR}/constants.c) ######################################################################## # Setup the volk_gnsssdr sources list and library ######################################################################## if(NOT WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif() list(APPEND volk_gnsssdr_sources ${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr_prefs.c ${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr_rank_archs.c ${CMAKE_CURRENT_SOURCE_DIR}/volk_gnsssdr_malloc.c ${volk_gnsssdr_gen_sources} ) #set the machine definitions where applicable set_source_files_properties( ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr.c ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_machines.c PROPERTIES COMPILE_DEFINITIONS "${machine_defs}") if(MSVC) #add compatibility includes for stdint types include_directories(${CMAKE_SOURCE_DIR}/cmake/msvc) add_definitions(-DHAVE_CONFIG_H) #compile the sources as C++ due to the lack of complex.h under MSVC set_source_files_properties(${volk_gnsssdr_sources} PROPERTIES LANGUAGE CXX) endif() #create the volk_gnsssdr runtime library #MODIFICATIONS BY GNSS-SDR file(GLOB orc ${CMAKE_SOURCE_DIR}/orc/*.orc) file(GLOB CommonMacros ${CMAKE_SOURCE_DIR}/kernels/CommonMacros/*.h ${CMAKE_SOURCE_DIR}/kernels/CommonMacros/README.txt) #add_library(volk_gnsssdr SHARED ${volk_gnsssdr_sources}) if(ENABLE_STATIC_LIBS) add_library(volk_gnsssdr STATIC ${volk_gnsssdr_sources} ${h_files} ${CommonMacros} ${orc}) else(ENABLE_STATIC_LIBS) add_library(volk_gnsssdr SHARED ${volk_gnsssdr_sources} ${h_files} ${CommonMacros} ${orc}) endif(ENABLE_STATIC_LIBS) source_group("Kernels" FILES ${h_files}) source_group("Common Macros" FILES ${CommonMacros}) source_group("ORC Files" FILES ${orc}) #END OF MODIFICATIONS target_link_libraries(volk_gnsssdr ${volk_gnsssdr_libraries}) set_target_properties(volk_gnsssdr PROPERTIES SOVERSION ${LIBVER}) set_target_properties(volk_gnsssdr PROPERTIES DEFINE_SYMBOL "volk_gnsssdr_EXPORTS") install(TARGETS volk_gnsssdr LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_runtime" # .so file ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_devel" # .lib file RUNTIME DESTINATION bin COMPONENT "volk_gnsssdr_runtime" # .dll file ) if(ENABLE_STATIC_LIBS) add_library(volk_gnsssdr_static STATIC ${volk_gnsssdr_sources}) if(NOT WIN32) set_target_properties(volk_gnsssdr_static PROPERTIES OUTPUT_NAME volk_gnsssdr) endif(NOT WIN32) install(TARGETS volk_gnsssdr_static ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_devel" # .lib file ) endif(ENABLE_STATIC_LIBS) ######################################################################## # Build the QA test application ######################################################################## if(Boost_FOUND) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc PROPERTIES COMPILE_DEFINITIONS "BOOST_TEST_DYN_LINK;BOOST_TEST_MAIN" ) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) add_executable(test_all ${CMAKE_CURRENT_SOURCE_DIR}/testqa.cc ${CMAKE_CURRENT_SOURCE_DIR}/qa_utils.cc ) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(Clang_required_link "c++") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(Clang_required_link "") endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") target_link_libraries(test_all volk_gnsssdr ${Boost_LIBRARIES} ${Clang_required_link}) add_test(qa_volk_gnsssdr_test_all test_all) endif(Boost_FOUND) gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32f_index_max_aligned16.h0000644000175000017500000000221612576764164033156 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_32F_INDEX_MAX_ALIGNED16_H #define INCLUDED_QA_32F_INDEX_MAX_ALIGNED16_H #include #include class qa_32f_index_max_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_32f_index_max_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_32F_INDEX_MAX_ALIGNED16_H */ ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32f_index_max_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32f_index_max_aligned16.c0000644000175000017500000000623012576764164033151 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include #include #define ERR_DELTA (1e-4) #define NUM_ITERS 1000000 #define VEC_LEN 3097 static float uniform() { return 2.0 * ((float) rand() / RAND_MAX - 0.5); // uniformly (-1, 1) } static void random_floats (float *buf, unsigned n) { unsigned int i = 0; for (; i < n; i++) { buf[i] = uniform () * 32767; } } #ifndef LV_HAVE_SSE void qa_32f_index_max_aligned16::t1() { printf("sse not available... no test performed\n"); } #else void qa_32f_index_max_aligned16::t1() { const int vlen = VEC_LEN; volk_gnsssdr_runtime_init(); volk_gnsssdr_environment_init(); int ret; unsigned int* target_sse4_1; unsigned int* target_sse; unsigned int* target_generic; float* src0 ; unsigned int i_target_sse4_1; target_sse4_1 = &i_target_sse4_1; unsigned int i_target_sse; target_sse = &i_target_sse; unsigned int i_target_generic; target_generic = &i_target_generic; ret = posix_memalign((void**)&src0, 16, vlen *sizeof(float)); random_floats((float*)src0, vlen); printf("32f_index_max_aligned16\n"); clock_t start, end; double total; start = clock(); for(int k = 0; k < NUM_ITERS; ++k) { volk_gnsssdr_32f_index_max_aligned16_manual(target_generic, src0, vlen, "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("generic time: %f\n", total); start = clock(); for(int k = 0; k < NUM_ITERS; ++k) { volk_gnsssdr_32f_index_max_aligned16_manual(target_sse, src0, vlen, "sse2"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse time: %f\n", total); start = clock(); for(int k = 0; k < NUM_ITERS; ++k) { get_volk_gnsssdr_runtime()->volk_gnsssdr_32f_index_max_aligned16(target_sse4_1, src0, vlen); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse4.1 time: %f\n", total); printf("generic: %u, sse: %u, sse4.1: %u\n", target_generic[0], target_sse[0], target_sse4_1[0]); CPPUNIT_ASSERT_EQUAL(target_generic[0], target_sse[0]); CPPUNIT_ASSERT_EQUAL(target_generic[0], target_sse4_1[0]); free(src0); } #endif /*LV_HAVE_SSE3*/ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/volk_gnsssdr_rank_archs.h0000644000175000017500000000317612576764164033134 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef GNSS_SDR_VOLK_GNSSSDR_RANK_ARCHS_H #define GNSS_SDR_VOLK_GNSSSDR_RANK_ARCHS_H #include #include #ifdef __cplusplus extern "C" { #endif int volk_gnsssdr_get_index( const char *impl_names[], //list of implementations by name const size_t n_impls, //number of implementations available const char *impl_name //the implementation name to find ); int volk_gnsssdr_rank_archs( const char *kern_name, //name of the kernel to rank const char *impl_names[], //list of implementations by name const int* impl_deps, //requirement mask per implementation const bool* alignment, //alignment status of each implementation size_t n_impls, //number of implementations available const bool align //if false, filter aligned implementations ); #ifdef __cplusplus } #endif #endif /* GNSS_SDR_VOLK_GNSSSDR_RANK_ARCHS_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32f_fm_detect_aligned16.h0000644000175000017500000000221512576764164033133 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_32F_FM_DETECT_ALIGNED16_H #define INCLUDED_QA_32F_FM_DETECT_ALIGNED16_H #include #include class qa_32f_fm_detect_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_32f_fm_detect_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_32F_FM_DETECT_ALIGNED16_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/volk_gnsssdr_malloc.c0000644000175000017500000000672112576764164032262 0ustar carlescarles/* * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include "volk_gnsssdr/volk_gnsssdr_malloc.h" #include #include #include /* * For #defines used to determine support for allocation functions, * see: http://linux.die.net/man/3/aligned_alloc */ // Otherwise, test if we are a POSIX or X/Open system // This only has a restriction that alignment be a power of 2and a // multiple of sizeof(void *). #if _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || HAVE_POSIX_MEMALIGN void *volk_gnsssdr_malloc(size_t size, size_t alignment) { void *ptr; // quoting posix_memalign() man page: // "alignment must be a power of two and a multiple of sizeof(void *)" // volk_get_alignment() could return 1 for some machines (e.g. generic_orc) if (alignment == 1) return malloc(size); int err = posix_memalign(&ptr, alignment, size); if(err == 0) { return ptr; } else { fprintf(stderr, "VOLK: Error allocating memory " "(posix_memalign: error %d: %s)\n", err, strerror(err)); return NULL; } } void volk_gnsssdr_free(void *ptr) { free(ptr); } // _aligned_malloc has no restriction on size, // available on Windows since Visual C++ 2005 #elif _MSC_VER >= 1400 void *volk_gnsssdr_malloc(size_t size, size_t alignment) { void *ptr = _aligned_malloc(size, alignment); if(ptr == NULL) { fprintf(stderr, "VOLK: Error allocating memory (_aligned_malloc)\n"); } return ptr; } void volk_gnsssdr_free(void *ptr) { _aligned_free(ptr); } // No standard handlers; we'll do it ourselves. #else // _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || HAVE_POSIX_MEMALIGN struct block_info { void *real; }; void * volk_gnsssdr_malloc(size_t size, size_t alignment) { void *real, *user; struct block_info *info; /* At least align to sizeof our struct */ if (alignment < sizeof(struct block_info)) alignment = sizeof(struct block_info); /* Alloc */ real = malloc(size + (2 * alignment - 1)); /* Get pointer to the various zones */ user = (void *)((((uintptr_t) real) + sizeof(struct block_info) + alignment - 1) & ~(alignment - 1)); info = (struct block_info *)(((uintptr_t)user) - sizeof(struct block_info)); /* Store the info for the free */ info->real = real; /* Return pointer to user */ return user; } void volk_gnsssdr_free(void *ptr) { struct block_info *info; /* Get the real pointer */ info = (struct block_info *)(((uintptr_t)ptr) - sizeof(struct block_info)); /* Release real pointer */ free(info->real); } #endif // _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || HAVE_POSIX_MEMALIGN //#endif // _ISOC11_SOURCE ././@LongLink0000644000000000000000000000017000000000000011601 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_power_spectral_density_32f_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_power_spectral_densi0000644000175000017500000000547212576764164033507 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include //test for sse3 #ifndef LV_HAVE_SSE3 void qa_32fc_power_spectral_density_32f_aligned16::t1() { printf("sse3 not available... no test performed\n"); } #else void qa_32fc_power_spectral_density_32f_aligned16::t1() { volk_gnsssdr_environment_init(); clock_t start, end; double total; const int vlen = 3201; const int ITERS = 10000; __VOLK_ATTR_ALIGNED(16) std::complex input0[vlen]; __VOLK_ATTR_ALIGNED(16) float output_generic[vlen]; __VOLK_ATTR_ALIGNED(16) float output_sse3[vlen]; const float scalar = vlen; const float rbw = 1.7; float* inputLoad = (float*)input0; for(int i = 0; i < 2*vlen; ++i) { inputLoad[i] = (((float) (rand() - (RAND_MAX/2))) / static_cast((RAND_MAX/2))); } printf("32fc_power_spectral_density_32f_aligned\n"); start = clock(); for(int count = 0; count < ITERS; ++count) { volk_gnsssdr_32fc_power_spectral_density_32f_aligned16_manual(output_generic, input0, scalar, rbw, vlen, "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("generic_time: %f\n", total); start = clock(); for(int count = 0; count < ITERS; ++count) { volk_gnsssdr_32fc_power_spectral_density_32f_aligned16_manual(output_sse3, input0, scalar, rbw, vlen, "sse3"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse3_time: %f\n", total); //for(int i = 0; i < 1; ++i) { //printf("inputs: %d, %d\n", input0[i*2], input0[i*2 + 1]); //printf("generic... %d, ssse3... %d\n", output0[i], output1[i]); //} for(int i = 0; i < vlen; ++i) { //printf("%d...%d\n", output0[i], output01[i]); CPPUNIT_ASSERT_DOUBLES_EQUAL(output_generic[i], output_sse3[i], fabs(output_generic[i]*1e-4)); } } #endif gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/testqa.cc0000644000175000017500000000726212576764164027662 0ustar carlescarles/* * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include "qa_utils.h" #include #include //GNSS-SDR PROTO-KERNELS VOLK_RUN_TESTS(volk_gnsssdr_8ic_x2_multiply_8ic, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8u_x2_multiply_8u, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x2_dot_prod_8ic, 1e-4, 0, 204603, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_s8ic_multiply_8ic, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_conjugate_8ic, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8i_x2_add_8i, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8i_index_max_16u, 3, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8i_accumulator_s8i, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_magnitude_squared_8i, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8i_max_s8i, 3, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_64f_accumulator_64f, 3, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_32fc_convert_16ic, 3, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_32fc_s32f_convert_8ic, 3, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_32fc_convert_8ic, 3, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_32fc_x5_cw_epl_corr_32fc_x3, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_32fc_x7_cw_vepl_corr_32fc_x5, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc, 1e-4, 0, 20462, 1); VOLK_RUN_TESTS(volk_gnsssdr_s32f_x2_update_local_carrier_32fc, 1e-4, 0, 20462, 1); //VOLK_RUN_TESTS(volk_gnsssdr_16i_x5_add_quad_16i_x4, 1e-4, 2046, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_16i_branch_4_state_8, 1e-4, 2046, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_16i_max_star_16i, 0, 0, 20462, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_16i_max_star_horizontal_16i, 0, 0, 20462, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_16i_permute_and_scalar_add, 1e-4, 0, 2046, 1000); //VOLK_RUN_TESTS(volk_gnsssdr_16i_x4_quad_max_star_16i, 1e-4, 0, 2046, 1000); //VOLK_RUN_TESTS(volk_gnsssdr_16i_32fc_dot_prod_32fc, 1e-4, 0, 204602, 1); //VOLK_RUN_TESTS(volk_gnsssdr_32fc_x2_conjugate_dot_prod_32fc, 1e-4, 0, 2046, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_32fc_s32f_x2_power_spectral_density_32f, 1e-4, 2046, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_32f_s32f_32f_fm_detect_32f, 1e-4, 2046, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_32u_popcnt, 0, 0, 2046, 10000); //VOLK_RUN_TESTS(volk_gnsssdr_64u_popcnt, 0, 0, 2046, 10000); gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/constants.c.in0000644000175000017500000000233612576764164030634 0ustar carlescarles/* -*- c++ -*- */ /* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #if HAVE_CONFIG_H #include #endif #include char* volk_gnsssdr_prefix() { return "@prefix@"; } char* volk_gnsssdr_build_date() { return "@BUILD_DATE@"; } char* volk_gnsssdr_version() { return "@VERSION@"; } char* volk_gnsssdr_c_compiler() { return "@cmake_c_compiler_version@"; } char* volk_gnsssdr_compiler_flags() { return "@COMPILER_INFO@"; } char* volk_gnsssdr_available_machines() { return "@available_machines@"; } ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32f_fm_detect_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32f_fm_detect_aligned16.c0000644000175000017500000000511212576764164033125 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include //test for sse #ifndef LV_HAVE_SSE void qa_32f_fm_detect_aligned16::t1() { printf("sse not available... no test performed\n"); } #else void qa_32f_fm_detect_aligned16::t1() { volk_gnsssdr_environment_init(); clock_t start, end; double total; const int vlen = 3201; const int ITERS = 10000; __VOLK_ATTR_ALIGNED(16) float input0[vlen]; __VOLK_ATTR_ALIGNED(16) float output0[vlen]; __VOLK_ATTR_ALIGNED(16) float output01[vlen]; for(int i = 0; i < vlen; ++i) { input0[i] = ((float) (rand() - (RAND_MAX/2))) / static_cast((RAND_MAX/2)); } printf("32f_fm_detect_aligned\n"); start = clock(); float save = 0.1; for(int count = 0; count < ITERS; ++count) { volk_gnsssdr_32f_fm_detect_aligned16_manual(output0, input0, 1.0, &save, vlen, "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("generic_time: %f\n", total); start = clock(); save = 0.1; for(int count = 0; count < ITERS; ++count) { volk_gnsssdr_32f_fm_detect_aligned16_manual(output01, input0, 1.0, &save, vlen, "sse"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse_time: %f\n", total); //for(int i = 0; i < 1; ++i) // { //printf("inputs: %d, %d\n", input0[i*2], input0[i*2 + 1]); //printf("generic... %d, ssse3... %d\n", output0[i], output1[i]); //} for(int i = 0; i < vlen; ++i) { //printf("%d...%d\n", output0[i], output01[i]); CPPUNIT_ASSERT_DOUBLES_EQUAL(output0[i], output01[i], fabs(output0[i]) * 1e-4); } } #endif ././@LongLink0000644000000000000000000000016300000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_permute_and_scalar_add_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_permute_and_scalar_ad0000644000175000017500000000573512576764164033446 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include //test for sse2 #ifndef LV_HAVE_SSE2 void qa_16s_permute_and_scalar_add_aligned16::t1() { printf("sse2 not available... no test performed\n"); } #else void qa_16s_permute_and_scalar_add_aligned16::t1() { const int vlen = 64; unsigned int num_bytes = vlen << 1; volk_gnsssdr_environment_init(); clock_t start, end; double total; __VOLK_ATTR_ALIGNED(16) short target[vlen]; __VOLK_ATTR_ALIGNED(16) short target2[vlen]; __VOLK_ATTR_ALIGNED(16) short src0[vlen]; __VOLK_ATTR_ALIGNED(16) short permute_indexes[vlen]; __VOLK_ATTR_ALIGNED(16) short cntl0[vlen]; __VOLK_ATTR_ALIGNED(16) short cntl1[vlen]; __VOLK_ATTR_ALIGNED(16) short cntl2[vlen]; __VOLK_ATTR_ALIGNED(16) short cntl3[vlen]; __VOLK_ATTR_ALIGNED(16) short scalars[4] = {1, 2, 3, 4}; for(int i = 0; i < vlen; ++i) { src0[i] = i; permute_indexes[i] = (3 * i)%vlen; cntl0[i] = 0xff; cntl1[i] = 0xff * (i%2); cntl2[i] = 0xff * ((i>>1)%2); cntl3[i] = 0xff * ((i%4) == 3); } printf("16s_permute_and_scalar_add_aligned\n"); start = clock(); for(int i = 0; i < 100000; ++i) { volk_gnsssdr_16s_permute_and_scalar_add_aligned16_manual(target, src0, permute_indexes, cntl0, cntl1, cntl2, cntl3, scalars, num_bytes, "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("generic_time: %f\n", total); start = clock(); for(int i = 0; i < 100000; ++i) { volk_gnsssdr_16s_permute_and_scalar_add_aligned16_manual(target2, src0, permute_indexes, cntl0, cntl1, cntl2, cntl3, scalars, num_bytes, "sse2"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse2_time: %f\n", total); //for(int i = 0; i < vlen; ++i) { //printf("generic... %d, sse2... %d\n", target[i], target2[i]); //} for(int i = 0; i < vlen; ++i) { CPPUNIT_ASSERT(target[i] == target2[i]); } } #endif ././@LongLink0000644000000000000000000000016700000000000011607 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_power_spectral_density_32f_aligned16.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_power_spectral_densi0000644000175000017500000000234712576764164033505 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_32FC_POWER_SPECTRAL_DENSITY_32F_ALIGNED16_H #define INCLUDED_QA_32FC_POWER_SPECTRAL_DENSITY_32F_ALIGNED16_H #include #include class qa_32fc_power_spectral_density_32f_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_32fc_power_spectral_density_32f_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_32FC_POWER_SPECTRAL_DENSITY_32F_ALIGNED16_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/volk_gnsssdr_rank_archs.c0000644000175000017500000001006612576764164033123 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include #if __GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 4 #define __popcnt __builtin_popcount #else inline unsigned __popcnt(unsigned num) { unsigned pop = 0; while(num) { if (num & 0x1) pop++; num >>= 1; } return pop; } #endif int volk_gnsssdr_get_index( const char *impl_names[], //list of implementations by name const size_t n_impls, //number of implementations available const char *impl_name //the implementation name to find ) { unsigned int i; for (i = 0; i < n_impls; i++) { if(!strncmp(impl_names[i], impl_name, 20)) { return i; } } //TODO return -1; //something terrible should happen here printf("Volk warning: no arch found, returning generic impl\n"); return volk_gnsssdr_get_index(impl_names, n_impls, "generic"); //but we'll fake it for now } int volk_gnsssdr_rank_archs( const char *kern_name, //name of the kernel to rank const char *impl_names[], //list of implementations by name const int* impl_deps, //requirement mask per implementation const bool* alignment, //alignment status of each implementation size_t n_impls, //number of implementations available const bool align //if false, filter aligned implementations ) { size_t i; static volk_gnsssdr_arch_pref_t *volk_gnsssdr_arch_prefs; static size_t n_arch_prefs = 0; static int prefs_loaded = 0; if(!prefs_loaded) { n_arch_prefs = volk_gnsssdr_load_preferences(&volk_gnsssdr_arch_prefs); prefs_loaded = 1; } // If we've defined VOLK_GENERIC to be anything, always return the // 'generic' kernel. Used in GR's QA code. char *gen_env = getenv("VOLK_GENERIC"); if(gen_env) { return volk_gnsssdr_get_index(impl_names, n_impls, "generic"); } //now look for the function name in the prefs list for(i = 0; i < n_arch_prefs; i++) { if(!strncmp(kern_name, volk_gnsssdr_arch_prefs[i].name, sizeof(volk_gnsssdr_arch_prefs[i].name))) //found it { const char *impl_name = align? volk_gnsssdr_arch_prefs[i].impl_a : volk_gnsssdr_arch_prefs[i].impl_u; return volk_gnsssdr_get_index(impl_names, n_impls, impl_name); } } //return the best index with the largest deps size_t best_index_a = 0; size_t best_index_u = 0; int best_value_a = -1; int best_value_u = -1; for(i = 0; i < n_impls; i++) { const signed val = __popcnt(impl_deps[i]); if (alignment[i] && val > best_value_a) { best_index_a = i; best_value_a = val; } if (!alignment[i] && val > best_value_u) { best_index_u = i; best_value_u = val; } } //when align and we found a best aligned, use it if (align && best_value_a != -1) return best_index_a; //otherwise return the best unaligned return best_index_u; } gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/volk_gnsssdr_prefs.c0000644000175000017500000000432612576764164032131 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include void volk_gnsssdr_get_config_path(char *path) { if (!path) return; const char *suffix = "/.volk_gnsssdr/volk_gnsssdr_config"; char *home = NULL; if (home == NULL) home = getenv("HOME"); if (home == NULL) home = getenv("APPDATA"); if (home == NULL) { path[0] = 0; return; } strncpy(path, home, 512); strcat(path, suffix); } size_t volk_gnsssdr_load_preferences(volk_gnsssdr_arch_pref_t **prefs_res) { FILE *config_file; char path[512], line[512]; size_t n_arch_prefs = 0; volk_gnsssdr_arch_pref_t *prefs = NULL; //get the config path volk_gnsssdr_get_config_path(path); if (!path[0]) return n_arch_prefs; //no prefs found config_file = fopen(path, "r"); if(!config_file) return n_arch_prefs; //no prefs found //reset the file pointer and write the prefs into volk_gnsssdr_arch_prefs while(fgets(line, sizeof(line), config_file) != NULL) { prefs = (volk_gnsssdr_arch_pref_t *) realloc(prefs, (n_arch_prefs+1) * sizeof(*prefs)); volk_gnsssdr_arch_pref_t *p = prefs + n_arch_prefs; if(sscanf(line, "%s %s %s", p->name, p->impl_a, p->impl_u) == 3 && !strncmp(p->name, "volk_gnsssdr_", 5)) { n_arch_prefs++; } } fclose(config_file); *prefs_res = prefs; return n_arch_prefs; } ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_index_max_aligned16.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_index_max_aligned16.0000644000175000017500000000222212576764164033146 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_32FC_INDEX_MAX_ALIGNED16_H #define INCLUDED_QA_32FC_INDEX_MAX_ALIGNED16_H #include #include class qa_32fc_index_max_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_32fc_index_max_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_32FC_INDEX_MAX_ALIGNED16_H */ ././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_quad_max_star_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_quad_max_star_aligned0000644000175000017500000000525312576764164033460 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include //test for sse2 #ifndef LV_HAVE_SSE2 void qa_16s_quad_max_star_aligned16::t1() { printf("sse2 not available... no test performed\n"); } #else void qa_16s_quad_max_star_aligned16::t1() { const int vlen = 34; __VOLK_ATTR_ALIGNED(16) short input0[vlen]; __VOLK_ATTR_ALIGNED(16) short input1[vlen]; __VOLK_ATTR_ALIGNED(16) short input2[vlen]; __VOLK_ATTR_ALIGNED(16) short input3[vlen]; __VOLK_ATTR_ALIGNED(16) short output0[vlen]; __VOLK_ATTR_ALIGNED(16) short output1[vlen]; for(int i = 0; i < vlen; ++i) { short plus0 = (short) (rand() - (RAND_MAX/2)); short plus1 = (short) (rand() - (RAND_MAX/2)); short plus2 = (short) (rand() - (RAND_MAX/2)); short plus3 = (short) (rand() - (RAND_MAX/2)); short minus0 = (short) (rand() - (RAND_MAX/2)); short minus1 = (short) (rand() - (RAND_MAX/2)); short minus2 = (short) (rand() - (RAND_MAX/2)); short minus3 = (short) (rand() - (RAND_MAX/2)); input0[i] = plus0 - minus0; input1[i] = plus1 - minus1; input2[i] = plus2 - minus2; input3[i] = plus3 - minus3; } volk_gnsssdr_16s_quad_max_star_aligned16_manual(output0, input0, input1, input2, input3, 2*vlen, "generic"); volk_gnsssdr_16s_quad_max_star_aligned16_manual(output1, input0, input1, input2, input3, 2*vlen, "sse2"); printf("16s_quad_max_star_aligned\n"); for(int i = 0; i < vlen; ++i) { printf("generic... %d, sse2... %d, inputs: %d, %d, %d, %d\n", output0[i], output1[i], input0[i], input1[i], input2[i], input3[i]); } for(int i = 0; i < vlen; ++i) { CPPUNIT_ASSERT_EQUAL(output0[i], output1[i]); } } #endif gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/gcc_x86_cpuid.h0000644000175000017500000001236212576764164030645 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ /* %ecx */ #define bit_SSE3 (1 << 0) #define bit_PCLMUL (1 << 1) #define bit_SSSE3 (1 << 9) #define bit_FMA (1 << 12) #define bit_CMPXCHG16B (1 << 13) #define bit_SSE4_1 (1 << 19) #define bit_SSE4_2 (1 << 20) #define bit_MOVBE (1 << 22) #define bit_POPCNT (1 << 23) #define bit_AES (1 << 25) #define bit_XSAVE (1 << 26) #define bit_OSXSAVE (1 << 27) #define bit_AVX (1 << 28) #define bit_F16C (1 << 29) #define bit_RDRND (1 << 30) /* %edx */ #define bit_CMPXCHG8B (1 << 8) #define bit_CMOV (1 << 15) #define bit_MMX (1 << 23) #define bit_FXSAVE (1 << 24) #define bit_SSE (1 << 25) #define bit_SSE2 (1 << 26) /* Extended Features */ /* %ecx */ #define bit_LAHF_LM (1 << 0) #define bit_ABM (1 << 5) #define bit_SSE4a (1 << 6) #define bit_XOP (1 << 11) #define bit_LWP (1 << 15) #define bit_FMA4 (1 << 16) #define bit_TBM (1 << 21) /* %edx */ #define bit_MMXEXT (1 << 22) #define bit_LM (1 << 29) #define bit_3DNOWP (1 << 30) #define bit_3DNOW (1 << 31) /* Extended Features (%eax == 7) */ #define bit_FSGSBASE (1 << 0) #define bit_BMI (1 << 3) #if defined(__i386__) && defined(__PIC__) /* %ebx may be the PIC register. */ #if __GNUC__ >= 3 #define __cpuid(level, a, b, c, d) \ __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \ "cpuid\n\t" \ "xchg{l}\t{%%}ebx, %1\n\t" \ : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ : "0" (level)) #define __cpuid_count(level, count, a, b, c, d) \ __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \ "cpuid\n\t" \ "xchg{l}\t{%%}ebx, %1\n\t" \ : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ : "0" (level), "2" (count)) #else /* Host GCCs older than 3.0 weren't supporting Intel asm syntax nor alternatives in i386 code. */ #define __cpuid(level, a, b, c, d) \ __asm__ ("xchgl\t%%ebx, %1\n\t" \ "cpuid\n\t" \ "xchgl\t%%ebx, %1\n\t" \ : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ : "0" (level)) #define __cpuid_count(level, count, a, b, c, d) \ __asm__ ("xchgl\t%%ebx, %1\n\t" \ "cpuid\n\t" \ "xchgl\t%%ebx, %1\n\t" \ : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ : "0" (level), "2" (count)) #endif #else #define __cpuid(level, a, b, c, d) \ __asm__ ("cpuid\n\t" \ : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ : "0" (level)) #define __cpuid_count(level, count, a, b, c, d) \ __asm__ ("cpuid\n\t" \ : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ : "0" (level), "2" (count)) #endif /* Return highest supported input value for cpuid instruction. ext can be either 0x0 or 0x8000000 to return highest supported value for basic or extended cpuid information. Function returns 0 if cpuid is not supported or whatever cpuid returns in eax register. If sig pointer is non-null, then first four bytes of the signature (as found in ebx register) are returned in location pointed by sig. */ static __inline unsigned int __get_cpuid_max (unsigned int __ext, unsigned int *__sig) { unsigned int __eax, __ebx, __ecx, __edx; #ifndef __x86_64__ /* See if we can use cpuid. On AMD64 we always can. */ #if __GNUC__ >= 3 __asm__ ("pushf{l|d}\n\t" "pushf{l|d}\n\t" "pop{l}\t%0\n\t" "mov{l}\t{%0, %1|%1, %0}\n\t" "xor{l}\t{%2, %0|%0, %2}\n\t" "push{l}\t%0\n\t" "popf{l|d}\n\t" "pushf{l|d}\n\t" "pop{l}\t%0\n\t" "popf{l|d}\n\t" : "=&r" (__eax), "=&r" (__ebx) : "i" (0x00200000)); #else /* Host GCCs older than 3.0 weren't supporting Intel asm syntax nor alternatives in i386 code. */ __asm__ ("pushfl\n\t" "pushfl\n\t" "popl\t%0\n\t" "movl\t%0, %1\n\t" "xorl\t%2, %0\n\t" "pushl\t%0\n\t" "popfl\n\t" "pushfl\n\t" "popl\t%0\n\t" "popfl\n\t" : "=&r" (__eax), "=&r" (__ebx) : "i" (0x00200000)); #endif if (!((__eax ^ __ebx) & 0x00200000)) return 0; #endif /* Host supports cpuid. Return highest supported cpuid input value. */ __cpuid (__ext, __eax, __ebx, __ecx, __edx); if (__sig) *__sig = __ebx; return __eax; } /* Return cpuid data for requested cpuid level, as found in returned eax, ebx, ecx and edx registers. The function checks if cpuid is supported and returns 1 for valid cpuid information or 0 for unsupported cpuid level. All pointers are required to be non-null. */ static __inline int __get_cpuid (unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx) { unsigned int __ext = __level & 0x80000000; if (__get_cpuid_max (__ext, 0) < __level) return 0; __cpuid (__level, *__eax, *__ebx, *__ecx, *__edx); return 1; } ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_branch_4_state_8_aligned16.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_branch_4_state_8_alig0000644000175000017500000000226012576764164033243 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_16S_BRANCH_4_STATE_8_ALIGNED16_H #define INCLUDED_QA_16S_BRANCH_4_STATE_8_ALIGNED16_H #include #include class qa_16s_branch_4_state_8_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_16s_branch_4_state_8_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_16S_BRANCH_4_STATE_8_ALIGNED16_H */ ././@LongLink0000644000000000000000000000016200000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_permute_and_scalar_add_aligned16.hgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_permute_and_scalar_ad0000644000175000017500000000231612576764164033436 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_16S_PERMUTE_AND_SCALAR_ADD_ALIGNED16_H #define INCLUDED_QA_16S_PERMUTE_AND_SCALAR_ADD_ALIGNED16_H #include #include class qa_16s_permute_and_scalar_add_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_16s_permute_and_scalar_add_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_16S_PERMUTE_AND_SCALAR_ADD_ALIGNED16_H */ ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_index_max_aligned16.ccgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_32fc_index_max_aligned16.0000644000175000017500000000513712576764164033156 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #include #include #include #include #include #define ERR_DELTA (1e-4) #define NUM_ITERS 1000000 #define VEC_LEN 3096 static float uniform() { return 2.0 * ((float) rand() / RAND_MAX - 0.5); // uniformly (-1, 1) } static void random_floats (float *buf, unsigned n) { unsigned int i = 0; for (; i < n; i++) { buf[i] = uniform () * 32767; } } #ifndef LV_HAVE_SSE3 void qa_32fc_index_max_aligned16::t1() { printf("sse3 not available... no test performed\n"); } #else void qa_32fc_index_max_aligned16::t1() { const int vlen = VEC_LEN; volk_gnsssdr_environment_init(); int ret; unsigned int* target; unsigned int* target_generic; std::complex* src0 ; unsigned int i_target; target = &i_target; unsigned int i_target_generic; target_generic = &i_target_generic; ret = posix_memalign((void**)&src0, 16, vlen << 3); random_floats((float*)src0, vlen * 2); printf("32fc_index_max_aligned16\n"); clock_t start, end; double total; start = clock(); for(int k = 0; k < NUM_ITERS; ++k) { volk_gnsssdr_32fc_index_max_aligned16_manual(target_generic, src0, vlen << 3, "generic"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("generic time: %f\n", total); start = clock(); for(int k = 0; k < NUM_ITERS; ++k) { volk_gnsssdr_32fc_index_max_aligned16_manual(target, src0, vlen << 3, "sse3"); } end = clock(); total = (double)(end-start)/(double)CLOCKS_PER_SEC; printf("sse3 time: %f\n", total); printf("generic: %u, sse3: %u\n", target_generic[0], target[0]); CPPUNIT_ASSERT_DOUBLES_EQUAL(target_generic[0], target[0], 1.1); free(src0); } #endif /*LV_HAVE_SSE3*/ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/qa_16s_add_quad_aligned16.h0000644000175000017500000000221612576764164032763 0ustar carlescarles/* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . */ #ifndef INCLUDED_QA_16S_ADD_QUAD_ALIGNED16_H #define INCLUDED_QA_16S_ADD_QUAD_ALIGNED16_H #include #include class qa_16s_add_quad_aligned16 : public CppUnit::TestCase { CPPUNIT_TEST_SUITE (qa_16s_add_quad_aligned16); CPPUNIT_TEST (t1); CPPUNIT_TEST_SUITE_END (); private: void t1 (); }; #endif /* INCLUDED_QA_16S_ADD_QUAD_ALIGNED16_H */ gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/volk_gnsssdr.pc.in0000644000175000017500000000047412576764164030751 0ustar carlescarlesprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ LV_CXXFLAGS=@LV_CXXFLAGS@ Name: volk_gnsssdr Description: VOLK_GNSSSDR: Vector Optimized Library of Kernels specific for GNSS-SDR Requires: Version: @VERSION@ Libs: -L${libdir} -lvolk_gnsssdr Cflags: -I${includedir} ${LV_CXXFLAGS} gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/0000755000175000017500000000000012576764164026046 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_arch_defs.py0000644000175000017500000000610512576764164033136 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # archs = list() arch_dict = dict() class arch_class: def __init__(self, flags, checks, **kwargs): for key, cast, failval in ( ('name', str, None), ('environment', str, None), ('include', str, None), ('alignment', int, 1) ): try: setattr(self, key, cast(kwargs[key])) except: setattr(self, key, failval) self.checks = checks assert(self.name) self._flags = flags def is_supported(self, compiler): if not self._flags.keys(): return True return compiler in self._flags.keys() def get_flags(self, compiler): try: return self._flags[compiler] except KeyError: return list() def __repr__(self): return self.name def register_arch(**kwargs): arch = arch_class(**kwargs) archs.append(arch) arch_dict[arch.name] = arch ######################################################################## # register the arches ######################################################################## #TODO skip the XML and put it here from xml.dom import minidom import os gendir = os.path.dirname(__file__) archs_xml = minidom.parse(os.path.join(gendir, 'archs.xml')).getElementsByTagName('arch') for arch_xml in archs_xml: kwargs = dict() for attr in arch_xml.attributes.keys(): kwargs[attr] = arch_xml.attributes[attr].value for node in arch_xml.childNodes: try: name = node.tagName val = arch_xml.getElementsByTagName(name)[0].firstChild.data kwargs[name] = val except: pass checks = list() for check_xml in arch_xml.getElementsByTagName("check"): name = check_xml.attributes["name"].value params = list() for param_xml in check_xml.getElementsByTagName("param"): params.append(param_xml.firstChild.data) checks.append([name, params]) flags = dict() for flag_xml in arch_xml.getElementsByTagName("flag"): name = flag_xml.attributes["compiler"].value if not flags.has_key(name): flags[name] = list() flags[name].append(flag_xml.firstChild.data) #force kwargs keys to be of type str, not unicode for py25 kwargs = dict((str(k), v) for k, v in kwargs.iteritems()) register_arch(flags=flags, checks=checks, **kwargs) if __name__ == '__main__': print archs gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml0000644000175000017500000001177212576764164027700 0ustar carlescarles -maltivec 16 -mfloat-abi=softfp -mfloat-abi=hard -mfpu=neon -funsafe-math-optimizations 16 -m32 0x80000001 3 0x80000001 29 -m64 -m64 3 0x80000001 31 -m3dnow -m3dnow 8 3 0x80000001 5 -msse4.2 -msse4.2 16 2 0x00000001 23 -mpopcnt -mpopcnt /arch:AVX 3 0x00000001 23 -mmmx -mmmx /arch:SSE 8 3 0x00000001 25 -msse -msse /arch:SSE _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); xmmintrin.h 16 3 0x00000001 26 -msse2 -msse2 /arch:SSE2 16 2 0x00000001 0 -msse3 -msse3 /arch:AVX _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); pmmintrin.h 16 2 0x00000001 9 -mssse3 -mssse3 /arch:AVX 16 2 0x80000001 6 -msse4a -msse4a 16 2 0x00000001 19 -msse4.1 -msse4.1 /arch:AVX 16 2 0x00000001 20 -msse4.2 -msse4.2 /arch:AVX 16 2 0x00000001 28 2 0x00000001 27 -mavx -mavx /arch:AVX 32 gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_tmpl_utils.py0000644000175000017500000000455612576764164033424 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # import os import re import sys import optparse import volk_gnsssdr_arch_defs import volk_gnsssdr_machine_defs import volk_gnsssdr_kernel_defs from Cheetah import Template def __escape_pre_processor(code): out = list() for line in code.splitlines(): m = re.match('^(\s*)#(\s*)(\w+)(.*)$', line) if m: p0, p1, fcn, stuff = m.groups() conly = fcn in ('include', 'define', 'ifdef', 'ifndef', 'endif', 'elif', 'pragma') both = fcn in ('if', 'else') istmpl = '$' in stuff if 'defined' in stuff: istmpl = False if conly or (both and not istmpl): line = '%s\\#%s%s%s'%(p0, p1, fcn, stuff) out.append(line) return '\n'.join(out) def __parse_tmpl(_tmpl, **kwargs): defs = { 'archs': volk_gnsssdr_arch_defs.archs, 'arch_dict': volk_gnsssdr_arch_defs.arch_dict, 'machines': volk_gnsssdr_machine_defs.machines, 'machine_dict': volk_gnsssdr_machine_defs.machine_dict, 'kernels': volk_gnsssdr_kernel_defs.kernels, } defs.update(kwargs) _tmpl = __escape_pre_processor(_tmpl) _tmpl = """ /* this file was generated by volk_gnsssdr template utils, do not edit! */ """ + _tmpl return str(Template.Template(_tmpl, defs)) def main(): parser = optparse.OptionParser() parser.add_option('--input', type='string') parser.add_option('--output', type='string') (opts, args) = parser.parse_args() output = __parse_tmpl(open(opts.input).read(), args=args) if opts.output: open(opts.output, 'w').write(output) else: print output if __name__ == '__main__': main() gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_machine_defs.py0000644000175000017500000000543112576764164033626 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # from volk_gnsssdr_arch_defs import arch_dict machines = list() machine_dict = dict() class machine_class: def __init__(self, name, archs): self.name = name self.archs = list() self.arch_names = list() for arch_name in archs: if not arch_name: continue arch = arch_dict[arch_name] self.archs.append(arch) self.arch_names.append(arch_name) self.alignment = max(map(lambda a: a.alignment, self.archs)) def __repr__(self): return self.name def register_machine(name, archs): for i, arch_name in enumerate(archs): if '|' in arch_name: #handle special arch names with the '|' for arch_sub in arch_name.split('|'): if arch_sub: register_machine(name+'_'+arch_sub, archs[:i] + [arch_sub] + archs[i+1:]) else: register_machine(name, archs[:i] + archs[i+1:]) return machine = machine_class(name=name, archs=archs) machines.append(machine) machine_dict[machine.name] = machine ######################################################################## # register the machines ######################################################################## #TODO skip the XML and put it here from xml.dom import minidom import os gendir = os.path.dirname(__file__) machines_xml = minidom.parse(os.path.join(gendir, 'machines.xml')).getElementsByTagName('machine') for machine_xml in machines_xml: kwargs = dict() for attr in machine_xml.attributes.keys(): kwargs[attr] = machine_xml.attributes[attr].value for node in machine_xml.childNodes: try: name = node.tagName val = machine_xml.getElementsByTagName(name)[0].firstChild.data kwargs[name] = val except: pass kwargs['archs'] = kwargs['archs'].split() #force kwargs keys to be of type str, not unicode for py25 kwargs = dict((str(k), v) for k, v in kwargs.iteritems()) register_machine(**kwargs) if __name__ == '__main__': print machines gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml0000644000175000017500000000230712576764164030361 0ustar carlescarles generic orc| generic neon softfp|hardfp orc| generic 32|64| mmx| sse sse2 orc| generic 32|64 mmx sse sse2 sse3 orc| generic 32|64 mmx sse sse2 sse3 ssse3 orc| generic 32|64 mmx sse sse2 sse3 sse4_a popcount orc| generic 32|64 mmx sse sse2 sse3 ssse3 sse4_1 orc| generic 32|64 mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount orc| generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount avx orc| generic altivec gnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_kernel_defs.py0000644000175000017500000001774512576764164033515 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # import os import re import sys import glob ######################################################################## # Strip comments from a c/cpp file. # Input is code string, output is code string without comments. # http://stackoverflow.com/questions/241327/python-snippet-to-remove-c-and-c-comments ######################################################################## def comment_remover(text): def replacer(match): s = match.group(0) if s.startswith('/'): return "" else: return s pattern = re.compile( r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"', re.DOTALL | re.MULTILINE ) return re.sub(pattern, replacer, text) ######################################################################## # Split code into nested sections according to ifdef preprocessor macros ######################################################################## def split_into_nested_ifdef_sections(code): sections = list() section = '' header = 'text' in_section_depth = 0 for i, line in enumerate(code.splitlines()): m = re.match('^(\s*)#(\s*)(\w+)(.*)$', line) line_is = 'normal' if m: p0, p1, fcn, stuff = m.groups() if fcn in ('if', 'ifndef', 'ifdef'): line_is = 'if' if fcn in ('else', 'elif'): line_is = 'else' if fcn in ('endif',): line_is = 'end' if line_is == 'if': in_section_depth += 1 if line_is == 'end': in_section_depth -= 1 if in_section_depth == 1 and line_is == 'if': sections.append((header, section)) section = '' header = line continue if in_section_depth == 1 and line_is == 'else': sections.append((header, section)) section = '' header = line continue if in_section_depth == 0 and line_is == 'end': sections.append((header, section)) section = '' header = 'text' continue section += line + '\n' sections.append((header, section)) #and pack remainder into sections sections = [sec for sec in sections if sec[1].strip()] #filter empty sections #recurse into non-text sections to fill subsections for i, (header, section) in enumerate(sections): if header == 'text': continue sections[i] = (header, split_into_nested_ifdef_sections(section)) return sections ######################################################################## # Recursive print of sections to test code above ######################################################################## def print_sections(sections, indent = ' '): for header, body in sections: if header == 'text': print indent, ('\n'+indent).join(body.splitlines()) continue print indent.replace(' ', '-') + '>', header print_sections(body, indent + ' ') ######################################################################## # Flatten a section to just body text ######################################################################## def flatten_section_text(sections): output = '' for hdr, bdy in sections: if hdr != 'text': output += flatten_section_text(bdy) else: output += bdy return output ######################################################################## # Extract kernel info from section, represent as an implementation ######################################################################## class impl_class: def __init__(self, kern_name, header, body): #extract LV_HAVE_* self.deps = set(map(str.lower, re.findall('LV_HAVE_(\w+)', header))) #extract function suffix and args body = flatten_section_text(body) try: fcn_matcher = re.compile('^.*(%s\\w*)\\s*\\((.*)$'%kern_name, re.DOTALL | re.MULTILINE) body = body.split('{')[0].rsplit(')', 1)[0] #get the part before the open ){ bracket m = fcn_matcher.match(body) impl_name, the_rest = m.groups() self.name = impl_name.replace(kern_name+'_', '') self.args = list() fcn_args = the_rest.split(',') for fcn_arg in fcn_args: arg_matcher = re.compile('^\s*(.*\\W)\s*(\w+)\s*$', re.DOTALL | re.MULTILINE) m = arg_matcher.match(fcn_arg) arg_type, arg_name = m.groups() self.args.append((arg_type, arg_name)) except Exception as ex: raise Exception, 'I cant parse the function prototype from: %s in %s\n%s'%(kern_name, body, ex) assert self.name self.is_aligned = self.name.startswith('a_') def __repr__(self): return self.name ######################################################################## # Get sets of LV_HAVE_* from the code ######################################################################## def extract_lv_haves(code): haves = list() for line in code.splitlines(): if not line.strip().startswith('#'): continue have_set = set(map(str.lower, re.findall('LV_HAVE_(\w+)', line))) if have_set: haves.append(have_set) return haves ######################################################################## # Represent a processing kernel, parse from file ######################################################################## class kernel_class: def __init__(self, kernel_file): self.name = os.path.splitext(os.path.basename(kernel_file))[0] self.pname = self.name.replace('volk_gnsssdr_', 'p_') code = open(kernel_file, 'r').read() code = comment_remover(code) sections = split_into_nested_ifdef_sections(code) self._impls = list() for header, section in sections: if 'ifndef' not in header.lower(): continue for sub_hdr, body in section: if 'if' not in sub_hdr.lower(): continue if 'LV_HAVE_' not in sub_hdr: continue self._impls.append(impl_class( kern_name=self.name, header=sub_hdr, body=body, )) assert(self._impls) self.has_dispatcher = False for impl in self._impls: if impl.name == 'dispatcher': self._impls.remove(impl) self.has_dispatcher = True break self.args = self._impls[0].args self.arglist_types = ', '.join([a[0] for a in self.args]) self.arglist_full = ', '.join(['%s %s'%a for a in self.args]) self.arglist_names = ', '.join([a[1] for a in self.args]) def get_impls(self, archs): archs = set(archs) impls = list() for impl in self._impls: if impl.deps.intersection(archs) == impl.deps: impls.append(impl) return impls def __repr__(self): return self.name ######################################################################## # Extract information from the VOLK kernels ######################################################################## __file__ = os.path.abspath(__file__) srcdir = os.path.dirname(os.path.dirname(__file__)) kernel_files = glob.glob(os.path.join(srcdir, "kernels", "volk_gnsssdr", "*.h")) kernels = map(kernel_class, kernel_files) if __name__ == '__main__': print kernels ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_compile_utils.pygnss-sdr-0.0.6/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/volk_gnsssdr_compile_utils.p0000644000175000017500000000431312576764164033676 0ustar carlescarles#!/usr/bin/env python # # Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # import optparse import volk_gnsssdr_arch_defs import volk_gnsssdr_machine_defs def do_arch_flags_list(compiler): output = list() for arch in volk_gnsssdr_arch_defs.archs: if not arch.is_supported(compiler): continue fields = [arch.name] + arch.get_flags(compiler) output.append(','.join(fields)) print ';'.join(output) def do_machines_list(arch_names): output = list() for machine in volk_gnsssdr_machine_defs.machines: machine_arch_set = set(machine.arch_names) if set(arch_names).intersection(machine_arch_set) == machine_arch_set: output.append(machine.name) print ';'.join(output) def do_machine_flags_list(compiler, machine_name): output = list() machine = volk_gnsssdr_machine_defs.machine_dict[machine_name] for arch in machine.archs: output.extend(arch.get_flags(compiler)) print ' '.join(output) def main(): parser = optparse.OptionParser() parser.add_option('--mode', type='string') parser.add_option('--compiler', type='string') parser.add_option('--archs', type='string') parser.add_option('--machine', type='string') (opts, args) = parser.parse_args() if opts.mode == 'arch_flags': return do_arch_flags_list(opts.compiler.lower()) if opts.mode == 'machines': return do_machines_list(opts.archs.split(';')) if opts.mode == 'machine_flags': return do_machine_flags_list(opts.compiler.lower(), opts.machine) if __name__ == '__main__': main() gnss-sdr-0.0.6/src/algorithms/libs/gnss_sdr_valve.cc0000644000175000017500000000517412576764164022031 0ustar carlescarles/*! * \file gnss_sdr_valve.cc * \brief Implementation of a GNU Radio block that sends a STOP message to the * control queue right after a specific number of samples have passed through it. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_sdr_valve.h" #include // for min #include #include "control_message_factory.h" gnss_sdr_valve::gnss_sdr_valve (size_t sizeof_stream_item, unsigned long long nitems, gr::msg_queue::sptr queue) : gr::sync_block("valve", gr::io_signature::make(1, 1, sizeof_stream_item), gr::io_signature::make(1, 1, sizeof_stream_item) ), d_nitems(nitems), d_ncopied_items(0), d_queue(queue) {} boost::shared_ptr gnss_sdr_make_valve (size_t sizeof_stream_item, unsigned long long nitems, gr::msg_queue::sptr queue) { boost::shared_ptr valve_(new gnss_sdr_valve(sizeof_stream_item, nitems, queue)); return valve_; } int gnss_sdr_valve::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { if (d_ncopied_items >= d_nitems) { ControlMessageFactory* cmf = new ControlMessageFactory(); d_queue->handle(cmf->GetQueueMessage(200,0)); delete cmf; return -1; // Done! } unsigned long long n = std::min(d_nitems - d_ncopied_items, (long long unsigned int)noutput_items); if (n == 0) return 0; memcpy (output_items[0], input_items[0], n * input_signature()->sizeof_stream_item(0)); d_ncopied_items += n; return n; } gnss-sdr-0.0.6/src/algorithms/libs/fft_execute.cc0000644000175000017500000003400112576764164021302 0ustar carlescarles // // File: fft_execute.cpp // // Version: <1.0> // // Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") // in consideration of your agreement to the following terms, and your use, // installation, modification or redistribution of this Apple software // constitutes acceptance of these terms. If you do not agree with these // terms, please do not use, install, modify or redistribute this Apple // software.¬ // // In consideration of your agreement to abide by the following terms, and // subject to these terms, Apple grants you a personal, non - exclusive // license, under Apple's copyrights in this original Apple software ( the // "Apple Software" ), to use, reproduce, modify and redistribute the Apple // Software, with or without modifications, in source and / or binary forms; // provided that if you redistribute the Apple Software in its entirety and // without modifications, you must retain this notice and the following text // and disclaimers in all such redistributions of the Apple Software. Neither // the name, trademarks, service marks or logos of Apple Inc. may be used to // endorse or promote products derived from the Apple Software without specific // prior written permission from Apple. Except as expressly stated in this // notice, no other rights or licenses, express or implied, are granted by // Apple herein, including but not limited to any patent rights that may be // infringed by your derivative works or by other works in which the Apple // Software may be incorporated. // // The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO // WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED // WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION // ALONE OR IN COMBINATION WITH YOUR PRODUCTS. // // IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR // CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION // AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER // UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR // OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright ( C ) 2008 Apple Inc. All Rights Reserved. // //////////////////////////////////////////////////////////////////////////////////////////////////// #include "fft_internal.h" #include "clFFT.h" #include #include #include #define max(a,b) (((a)>(b)) ? (a) : (b)) #define min(a,b) (((a)<(b)) ? (a) : (b)) static cl_int allocateTemporaryBufferInterleaved(cl_fft_plan *plan, cl_uint batchSize) { cl_int err = CL_SUCCESS; if(plan->temp_buffer_needed && plan->last_batch_size != batchSize) { plan->last_batch_size = batchSize; size_t tmpLength = plan->n.x * plan->n.y * plan->n.z * batchSize * 2 * sizeof(cl_float); if(plan->tempmemobj) clReleaseMemObject(plan->tempmemobj); plan->tempmemobj = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err); } return err; } static cl_int allocateTemporaryBufferPlannar(cl_fft_plan *plan, cl_uint batchSize) { cl_int err = CL_SUCCESS; cl_int terr; if(plan->temp_buffer_needed && plan->last_batch_size != batchSize) { plan->last_batch_size = batchSize; size_t tmpLength = plan->n.x * plan->n.y * plan->n.z * batchSize * sizeof(cl_float); if(plan->tempmemobj_real) clReleaseMemObject(plan->tempmemobj_real); if(plan->tempmemobj_imag) clReleaseMemObject(plan->tempmemobj_imag); plan->tempmemobj_real = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err); plan->tempmemobj_imag = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &terr); err |= terr; } return err; } void getKernelWorkDimensions(cl_fft_plan *plan, cl_fft_kernel_info *kernelInfo, cl_int *batchSize, size_t *gWorkItems, size_t *lWorkItems) { *lWorkItems = kernelInfo->num_workitems_per_workgroup; int numWorkGroups = kernelInfo->num_workgroups; int numXFormsPerWG = kernelInfo->num_xforms_per_workgroup; switch(kernelInfo->dir) { case cl_fft_kernel_x: *batchSize *= (plan->n.y * plan->n.z); numWorkGroups = (*batchSize % numXFormsPerWG) ? (*batchSize/numXFormsPerWG + 1) : (*batchSize/numXFormsPerWG); numWorkGroups *= kernelInfo->num_workgroups; break; case cl_fft_kernel_y: *batchSize *= plan->n.z; numWorkGroups *= *batchSize; break; case cl_fft_kernel_z: numWorkGroups *= *batchSize; break; } *gWorkItems = numWorkGroups * *lWorkItems; } cl_int clFFT_ExecuteInterleaved( cl_command_queue queue, clFFT_Plan Plan, cl_int batchSize, clFFT_Direction dir, cl_mem data_in, cl_mem data_out, cl_int num_events, cl_event *event_list, cl_event *event ) { int s; cl_fft_plan *plan = (cl_fft_plan *) Plan; if(plan->format != clFFT_InterleavedComplexFormat) return CL_INVALID_VALUE; cl_int err; size_t gWorkItems, lWorkItems; int inPlaceDone; cl_int isInPlace = data_in == data_out ? 1 : 0; if((err = allocateTemporaryBufferInterleaved(plan, batchSize)) != CL_SUCCESS) return err; cl_mem memObj[3]; memObj[0] = data_in; memObj[1] = data_out; memObj[2] = plan->tempmemobj; cl_fft_kernel_info *kernelInfo = plan->kernel_info; int numKernels = plan->num_kernels; int numKernelsOdd = numKernels & 1; int currRead = 0; int currWrite = 1; // at least one external dram shuffle (transpose) required if(plan->temp_buffer_needed) { // in-place transform if(isInPlace) { inPlaceDone = 0; currRead = 1; currWrite = 2; } else { currWrite = (numKernels & 1) ? 1 : 2; } while(kernelInfo) { if( isInPlace && numKernelsOdd && !inPlaceDone && kernelInfo->in_place_possible) { currWrite = currRead; inPlaceDone = 1; } s = batchSize; getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems); err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj[currRead]); err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj[currWrite]); err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_int), &dir); err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_int), &s); err |= clEnqueueNDRangeKernel(queue, kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, 0, NULL, NULL); if(err) return err; currRead = (currWrite == 1) ? 1 : 2; currWrite = (currWrite == 1) ? 2 : 1; kernelInfo = kernelInfo->next; } } // no dram shuffle (transpose required) transform // all kernels can execute in-place. else { while(kernelInfo) { s = batchSize; getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems); err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj[currRead]); err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj[currWrite]); err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_int), &dir); err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_int), &s); err |= clEnqueueNDRangeKernel(queue, kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, 0, NULL, NULL); if(err) return err; currRead = 1; currWrite = 1; kernelInfo = kernelInfo->next; } } return err; } cl_int clFFT_ExecutePlannar( cl_command_queue queue, clFFT_Plan Plan, cl_int batchSize, clFFT_Direction dir, cl_mem data_in_real, cl_mem data_in_imag, cl_mem data_out_real, cl_mem data_out_imag, cl_int num_events, cl_event *event_list, cl_event *event) { int s; cl_fft_plan *plan = (cl_fft_plan *) Plan; if(plan->format != clFFT_SplitComplexFormat) return CL_INVALID_VALUE; cl_int err; size_t gWorkItems, lWorkItems; int inPlaceDone; cl_int isInPlace = ((data_in_real == data_out_real) && (data_in_imag == data_out_imag)) ? 1 : 0; if((err = allocateTemporaryBufferPlannar(plan, batchSize)) != CL_SUCCESS) return err; cl_mem memObj_real[3]; cl_mem memObj_imag[3]; memObj_real[0] = data_in_real; memObj_real[1] = data_out_real; memObj_real[2] = plan->tempmemobj_real; memObj_imag[0] = data_in_imag; memObj_imag[1] = data_out_imag; memObj_imag[2] = plan->tempmemobj_imag; cl_fft_kernel_info *kernelInfo = plan->kernel_info; int numKernels = plan->num_kernels; int numKernelsOdd = numKernels & 1; int currRead = 0; int currWrite = 1; // at least one external dram shuffle (transpose) required if(plan->temp_buffer_needed) { // in-place transform if(isInPlace) { inPlaceDone = 0; currRead = 1; currWrite = 2; } else { currWrite = (numKernels & 1) ? 1 : 2; } while(kernelInfo) { if( isInPlace && numKernelsOdd && !inPlaceDone && kernelInfo->in_place_possible) { currWrite = currRead; inPlaceDone = 1; } s = batchSize; getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems); err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj_real[currRead]); err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj_imag[currRead]); err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_mem), &memObj_real[currWrite]); err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_mem), &memObj_imag[currWrite]); err |= clSetKernelArg(kernelInfo->kernel, 4, sizeof(cl_int), &dir); err |= clSetKernelArg(kernelInfo->kernel, 5, sizeof(cl_int), &s); err |= clEnqueueNDRangeKernel(queue, kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, 0, NULL, NULL); if(err) return err; currRead = (currWrite == 1) ? 1 : 2; currWrite = (currWrite == 1) ? 2 : 1; kernelInfo = kernelInfo->next; } } // no dram shuffle (transpose required) transform else { while(kernelInfo) { s = batchSize; getKernelWorkDimensions(plan, kernelInfo, &s, &gWorkItems, &lWorkItems); err |= clSetKernelArg(kernelInfo->kernel, 0, sizeof(cl_mem), &memObj_real[currRead]); err |= clSetKernelArg(kernelInfo->kernel, 1, sizeof(cl_mem), &memObj_imag[currRead]); err |= clSetKernelArg(kernelInfo->kernel, 2, sizeof(cl_mem), &memObj_real[currWrite]); err |= clSetKernelArg(kernelInfo->kernel, 3, sizeof(cl_mem), &memObj_imag[currWrite]); err |= clSetKernelArg(kernelInfo->kernel, 4, sizeof(cl_int), &dir); err |= clSetKernelArg(kernelInfo->kernel, 5, sizeof(cl_int), &s); err |= clEnqueueNDRangeKernel(queue, kernelInfo->kernel, 1, NULL, &gWorkItems, &lWorkItems, 0, NULL, NULL); if(err) return err; currRead = 1; currWrite = 1; kernelInfo = kernelInfo->next; } } return err; } cl_int clFFT_1DTwistInterleaved(clFFT_Plan Plan, cl_command_queue queue, cl_mem array, unsigned numRows, unsigned numCols, unsigned startRow, unsigned rowsToProcess, clFFT_Direction dir) { cl_fft_plan *plan = (cl_fft_plan *) Plan; unsigned int N = numRows*numCols; unsigned int nCols = numCols; unsigned int sRow = startRow; unsigned int rToProcess = rowsToProcess; int d = dir; int err = 0; cl_device_id device_id; err = clGetCommandQueueInfo(queue, CL_QUEUE_DEVICE, sizeof(cl_device_id), &device_id, NULL); if(err) return err; size_t gSize; err = clGetKernelWorkGroupInfo(plan->twist_kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &gSize, NULL); if(err) return err; gSize = min(128, gSize); size_t numGlobalThreads[1] = { max(numCols / gSize, 1)*gSize }; size_t numLocalThreads[1] = { gSize }; err |= clSetKernelArg(plan->twist_kernel, 0, sizeof(cl_mem), &array); err |= clSetKernelArg(plan->twist_kernel, 1, sizeof(unsigned int), &sRow); err |= clSetKernelArg(plan->twist_kernel, 2, sizeof(unsigned int), &nCols); err |= clSetKernelArg(plan->twist_kernel, 3, sizeof(unsigned int), &N); err |= clSetKernelArg(plan->twist_kernel, 4, sizeof(unsigned int), &rToProcess); err |= clSetKernelArg(plan->twist_kernel, 5, sizeof(int), &d); err |= clEnqueueNDRangeKernel(queue, plan->twist_kernel, 1, NULL, numGlobalThreads, numLocalThreads, 0, NULL, NULL); return err; } cl_int clFFT_1DTwistPlannar(clFFT_Plan Plan, cl_command_queue queue, cl_mem array_real, cl_mem array_imag, unsigned numRows, unsigned numCols, unsigned startRow, unsigned rowsToProcess, clFFT_Direction dir) { cl_fft_plan *plan = (cl_fft_plan *) Plan; unsigned int N = numRows*numCols; unsigned int nCols = numCols; unsigned int sRow = startRow; unsigned int rToProcess = rowsToProcess; int d = dir; int err = 0; cl_device_id device_id; err = clGetCommandQueueInfo(queue, CL_QUEUE_DEVICE, sizeof(cl_device_id), &device_id, NULL); if(err) return err; size_t gSize; err = clGetKernelWorkGroupInfo(plan->twist_kernel, device_id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &gSize, NULL); if(err) return err; gSize = min(128, gSize); size_t numGlobalThreads[1] = { max(numCols / gSize, 1)*gSize }; size_t numLocalThreads[1] = { gSize }; err |= clSetKernelArg(plan->twist_kernel, 0, sizeof(cl_mem), &array_real); err |= clSetKernelArg(plan->twist_kernel, 1, sizeof(cl_mem), &array_imag); err |= clSetKernelArg(plan->twist_kernel, 2, sizeof(unsigned int), &sRow); err |= clSetKernelArg(plan->twist_kernel, 3, sizeof(unsigned int), &nCols); err |= clSetKernelArg(plan->twist_kernel, 4, sizeof(unsigned int), &N); err |= clSetKernelArg(plan->twist_kernel, 5, sizeof(unsigned int), &rToProcess); err |= clSetKernelArg(plan->twist_kernel, 6, sizeof(int), &d); err |= clEnqueueNDRangeKernel(queue, plan->twist_kernel, 1, NULL, numGlobalThreads, numLocalThreads, 0, NULL, NULL); return err; } gnss-sdr-0.0.6/src/algorithms/libs/galileo_e1_signal_processing.h0000644000175000017500000000564012576764164024444 0ustar carlescarles/*! * \file galileo_e1_signal_processing.h * \brief This library implements various functions for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_SIGNAL_PROCESSING_H_ #define GNSS_SDR_GALILEO_E1_SIGNAL_PROCESSING_H_ #include #include #include #include "Galileo_E1.h" #include "gnss_signal_processing.h" /*! * \brief This function generates Galileo E1 code (one sample per chip). * */ void galileo_e1_code_gen_int(int* _dest, char _Signal[3], signed int _prn, unsigned int _chip_shift); /*! * \brief This function generates Galileo E1 sinboc(1,1) code (minimum 2 samples per chip), * the _codeLength variable must be a multiple of 2*4092. * */ void galileo_e1_sinboc_11_gen(std::complex* _dest, int* _prn, unsigned int _codeLength); /*! * \brief This function generates Galileo E1 sinboc(6,1) code (minimum 12 samples per chip), * the _codeLength variable must be a multiple of 12*4092. * */ void galileo_e1_sinboc_61_gen(std::complex* _dest, int* _prn, unsigned int _codeLength); /*! * \brief This function generates Galileo E1 cboc code (12 samples per chip). * */ void galileo_e1_cboc_gen(std::complex* _dest, int* _prn, char _Signal[3]); /*! * \brief This function generates Galileo E1 code (can select E1B or E1C, cboc or sinboc * and the sample frequency _fs). * */ void galileo_e1_code_gen_complex_sampled(std::complex* _dest, char _Signal[3], bool _cboc, unsigned int _prn, signed int _fs, unsigned int _chip_shift, bool _secondary_flag); /*! * \brief galileo_e1_code_gen_complex_sampled without _secondary_flag for backward compatibility. */ void galileo_e1_code_gen_complex_sampled(std::complex* _dest, char _Signal[3], bool _cboc, unsigned int _prn, signed int _fs, unsigned int _chip_shift); #endif /* GNSS_SDR_GALILEO_E1_SIGNAL_PROCESSING_H_ */ gnss-sdr-0.0.6/src/algorithms/libs/fft_base_kernels.h0000644000175000017500000003355212576764164022151 0ustar carlescarles // // File: fft_base_kernels.h // // Version: <1.0> // // Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") // in consideration of your agreement to the following terms, and your use, // installation, modification or redistribution of this Apple software // constitutes acceptance of these terms. If you do not agree with these // terms, please do not use, install, modify or redistribute this Apple // software. // // In consideration of your agreement to abide by the following terms, and // subject to these terms, Apple grants you a personal, non - exclusive // license, under Apple's copyrights in this original Apple software ( the // "Apple Software" ), to use, reproduce, modify and redistribute the Apple // Software, with or without modifications, in source and / or binary forms; // provided that if you redistribute the Apple Software in its entirety and // without modifications, you must retain this notice and the following text // and disclaimers in all such redistributions of the Apple Software. Neither // the name, trademarks, service marks or logos of Apple Inc. may be used to // endorse or promote products derived from the Apple Software without specific // prior written permission from Apple. Except as expressly stated in this // notice, no other rights or licenses, express or implied, are granted by // Apple herein, including but not limited to any patent rights that may be // infringed by your derivative works or by other works in which the Apple // Software may be incorporated. // // The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO // WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED // WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION // ALONE OR IN COMBINATION WITH YOUR PRODUCTS. // // IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR // CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION // AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER // UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR // OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright ( C ) 2008 Apple Inc. All Rights Reserved. // //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __CL_FFT_BASE_KERNELS_ #define __CL_FFT_BASE_KERNELS_ #include using namespace std; static string baseKernels = string( "#ifndef M_PI\n" "#define M_PI 0x1.921fb54442d18p+1\n" "#endif\n" "#define complexMul(a,b) ((float2)(mad(-(a).y, (b).y, (a).x * (b).x), mad((a).y, (b).x, (a).x * (b).y)))\n" "#define conj(a) ((float2)((a).x, -(a).y))\n" "#define conjTransp(a) ((float2)(-(a).y, (a).x))\n" "\n" "#define fftKernel2(a,dir) \\\n" "{ \\\n" " float2 c = (a)[0]; \\\n" " (a)[0] = c + (a)[1]; \\\n" " (a)[1] = c - (a)[1]; \\\n" "}\n" "\n" "#define fftKernel2S(d1,d2,dir) \\\n" "{ \\\n" " float2 c = (d1); \\\n" " (d1) = c + (d2); \\\n" " (d2) = c - (d2); \\\n" "}\n" "\n" "#define fftKernel4(a,dir) \\\n" "{ \\\n" " fftKernel2S((a)[0], (a)[2], dir); \\\n" " fftKernel2S((a)[1], (a)[3], dir); \\\n" " fftKernel2S((a)[0], (a)[1], dir); \\\n" " (a)[3] = (float2)(dir)*(conjTransp((a)[3])); \\\n" " fftKernel2S((a)[2], (a)[3], dir); \\\n" " float2 c = (a)[1]; \\\n" " (a)[1] = (a)[2]; \\\n" " (a)[2] = c; \\\n" "}\n" "\n" "#define fftKernel4s(a0,a1,a2,a3,dir) \\\n" "{ \\\n" " fftKernel2S((a0), (a2), dir); \\\n" " fftKernel2S((a1), (a3), dir); \\\n" " fftKernel2S((a0), (a1), dir); \\\n" " (a3) = (float2)(dir)*(conjTransp((a3))); \\\n" " fftKernel2S((a2), (a3), dir); \\\n" " float2 c = (a1); \\\n" " (a1) = (a2); \\\n" " (a2) = c; \\\n" "}\n" "\n" "#define bitreverse8(a) \\\n" "{ \\\n" " float2 c; \\\n" " c = (a)[1]; \\\n" " (a)[1] = (a)[4]; \\\n" " (a)[4] = c; \\\n" " c = (a)[3]; \\\n" " (a)[3] = (a)[6]; \\\n" " (a)[6] = c; \\\n" "}\n" "\n" "#define fftKernel8(a,dir) \\\n" "{ \\\n" " const float2 w1 = (float2)(0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f); \\\n" " const float2 w3 = (float2)(-0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f); \\\n" " float2 c; \\\n" " fftKernel2S((a)[0], (a)[4], dir); \\\n" " fftKernel2S((a)[1], (a)[5], dir); \\\n" " fftKernel2S((a)[2], (a)[6], dir); \\\n" " fftKernel2S((a)[3], (a)[7], dir); \\\n" " (a)[5] = complexMul(w1, (a)[5]); \\\n" " (a)[6] = (float2)(dir)*(conjTransp((a)[6])); \\\n" " (a)[7] = complexMul(w3, (a)[7]); \\\n" " fftKernel2S((a)[0], (a)[2], dir); \\\n" " fftKernel2S((a)[1], (a)[3], dir); \\\n" " fftKernel2S((a)[4], (a)[6], dir); \\\n" " fftKernel2S((a)[5], (a)[7], dir); \\\n" " (a)[3] = (float2)(dir)*(conjTransp((a)[3])); \\\n" " (a)[7] = (float2)(dir)*(conjTransp((a)[7])); \\\n" " fftKernel2S((a)[0], (a)[1], dir); \\\n" " fftKernel2S((a)[2], (a)[3], dir); \\\n" " fftKernel2S((a)[4], (a)[5], dir); \\\n" " fftKernel2S((a)[6], (a)[7], dir); \\\n" " bitreverse8((a)); \\\n" "}\n" "\n" "#define bitreverse4x4(a) \\\n" "{ \\\n" " float2 c; \\\n" " c = (a)[1]; (a)[1] = (a)[4]; (a)[4] = c; \\\n" " c = (a)[2]; (a)[2] = (a)[8]; (a)[8] = c; \\\n" " c = (a)[3]; (a)[3] = (a)[12]; (a)[12] = c; \\\n" " c = (a)[6]; (a)[6] = (a)[9]; (a)[9] = c; \\\n" " c = (a)[7]; (a)[7] = (a)[13]; (a)[13] = c; \\\n" " c = (a)[11]; (a)[11] = (a)[14]; (a)[14] = c; \\\n" "}\n" "\n" "#define fftKernel16(a,dir) \\\n" "{ \\\n" " const float w0 = 0x1.d906bcp-1f; \\\n" " const float w1 = 0x1.87de2ap-2f; \\\n" " const float w2 = 0x1.6a09e6p-1f; \\\n" " fftKernel4s((a)[0], (a)[4], (a)[8], (a)[12], dir); \\\n" " fftKernel4s((a)[1], (a)[5], (a)[9], (a)[13], dir); \\\n" " fftKernel4s((a)[2], (a)[6], (a)[10], (a)[14], dir); \\\n" " fftKernel4s((a)[3], (a)[7], (a)[11], (a)[15], dir); \\\n" " (a)[5] = complexMul((a)[5], (float2)(w0, dir*w1)); \\\n" " (a)[6] = complexMul((a)[6], (float2)(w2, dir*w2)); \\\n" " (a)[7] = complexMul((a)[7], (float2)(w1, dir*w0)); \\\n" " (a)[9] = complexMul((a)[9], (float2)(w2, dir*w2)); \\\n" " (a)[10] = (float2)(dir)*(conjTransp((a)[10])); \\\n" " (a)[11] = complexMul((a)[11], (float2)(-w2, dir*w2)); \\\n" " (a)[13] = complexMul((a)[13], (float2)(w1, dir*w0)); \\\n" " (a)[14] = complexMul((a)[14], (float2)(-w2, dir*w2)); \\\n" " (a)[15] = complexMul((a)[15], (float2)(-w0, dir*-w1)); \\\n" " fftKernel4((a), dir); \\\n" " fftKernel4((a) + 4, dir); \\\n" " fftKernel4((a) + 8, dir); \\\n" " fftKernel4((a) + 12, dir); \\\n" " bitreverse4x4((a)); \\\n" "}\n" "\n" "#define bitreverse32(a) \\\n" "{ \\\n" " float2 c1, c2; \\\n" " c1 = (a)[2]; (a)[2] = (a)[1]; c2 = (a)[4]; (a)[4] = c1; c1 = (a)[8]; (a)[8] = c2; c2 = (a)[16]; (a)[16] = c1; (a)[1] = c2; \\\n" " c1 = (a)[6]; (a)[6] = (a)[3]; c2 = (a)[12]; (a)[12] = c1; c1 = (a)[24]; (a)[24] = c2; c2 = (a)[17]; (a)[17] = c1; (a)[3] = c2; \\\n" " c1 = (a)[10]; (a)[10] = (a)[5]; c2 = (a)[20]; (a)[20] = c1; c1 = (a)[9]; (a)[9] = c2; c2 = (a)[18]; (a)[18] = c1; (a)[5] = c2; \\\n" " c1 = (a)[14]; (a)[14] = (a)[7]; c2 = (a)[28]; (a)[28] = c1; c1 = (a)[25]; (a)[25] = c2; c2 = (a)[19]; (a)[19] = c1; (a)[7] = c2; \\\n" " c1 = (a)[22]; (a)[22] = (a)[11]; c2 = (a)[13]; (a)[13] = c1; c1 = (a)[26]; (a)[26] = c2; c2 = (a)[21]; (a)[21] = c1; (a)[11] = c2; \\\n" " c1 = (a)[30]; (a)[30] = (a)[15]; c2 = (a)[29]; (a)[29] = c1; c1 = (a)[27]; (a)[27] = c2; c2 = (a)[23]; (a)[23] = c1; (a)[15] = c2; \\\n" "}\n" "\n" "#define fftKernel32(a,dir) \\\n" "{ \\\n" " fftKernel2S((a)[0], (a)[16], dir); \\\n" " fftKernel2S((a)[1], (a)[17], dir); \\\n" " fftKernel2S((a)[2], (a)[18], dir); \\\n" " fftKernel2S((a)[3], (a)[19], dir); \\\n" " fftKernel2S((a)[4], (a)[20], dir); \\\n" " fftKernel2S((a)[5], (a)[21], dir); \\\n" " fftKernel2S((a)[6], (a)[22], dir); \\\n" " fftKernel2S((a)[7], (a)[23], dir); \\\n" " fftKernel2S((a)[8], (a)[24], dir); \\\n" " fftKernel2S((a)[9], (a)[25], dir); \\\n" " fftKernel2S((a)[10], (a)[26], dir); \\\n" " fftKernel2S((a)[11], (a)[27], dir); \\\n" " fftKernel2S((a)[12], (a)[28], dir); \\\n" " fftKernel2S((a)[13], (a)[29], dir); \\\n" " fftKernel2S((a)[14], (a)[30], dir); \\\n" " fftKernel2S((a)[15], (a)[31], dir); \\\n" " (a)[17] = complexMul((a)[17], (float2)(0x1.f6297cp-1f, dir*0x1.8f8b84p-3f)); \\\n" " (a)[18] = complexMul((a)[18], (float2)(0x1.d906bcp-1f, dir*0x1.87de2ap-2f)); \\\n" " (a)[19] = complexMul((a)[19], (float2)(0x1.a9b662p-1f, dir*0x1.1c73b4p-1f)); \\\n" " (a)[20] = complexMul((a)[20], (float2)(0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f)); \\\n" " (a)[21] = complexMul((a)[21], (float2)(0x1.1c73b4p-1f, dir*0x1.a9b662p-1f)); \\\n" " (a)[22] = complexMul((a)[22], (float2)(0x1.87de2ap-2f, dir*0x1.d906bcp-1f)); \\\n" " (a)[23] = complexMul((a)[23], (float2)(0x1.8f8b84p-3f, dir*0x1.f6297cp-1f)); \\\n" " (a)[24] = complexMul((a)[24], (float2)(0x0p+0f, dir*0x1p+0f)); \\\n" " (a)[25] = complexMul((a)[25], (float2)(-0x1.8f8b84p-3f, dir*0x1.f6297cp-1f)); \\\n" " (a)[26] = complexMul((a)[26], (float2)(-0x1.87de2ap-2f, dir*0x1.d906bcp-1f)); \\\n" " (a)[27] = complexMul((a)[27], (float2)(-0x1.1c73b4p-1f, dir*0x1.a9b662p-1f)); \\\n" " (a)[28] = complexMul((a)[28], (float2)(-0x1.6a09e6p-1f, dir*0x1.6a09e6p-1f)); \\\n" " (a)[29] = complexMul((a)[29], (float2)(-0x1.a9b662p-1f, dir*0x1.1c73b4p-1f)); \\\n" " (a)[30] = complexMul((a)[30], (float2)(-0x1.d906bcp-1f, dir*0x1.87de2ap-2f)); \\\n" " (a)[31] = complexMul((a)[31], (float2)(-0x1.f6297cp-1f, dir*0x1.8f8b84p-3f)); \\\n" " fftKernel16((a), dir); \\\n" " fftKernel16((a) + 16, dir); \\\n" " bitreverse32((a)); \\\n" "}\n\n" ); static string twistKernelInterleaved = string( "__kernel void \\\n" "clFFT_1DTwistInterleaved(__global float2 *in, unsigned int startRow, unsigned int numCols, unsigned int N, unsigned int numRowsToProcess, int dir) \\\n" "{ \\\n" " float2 a, w; \\\n" " float ang; \\\n" " unsigned int j; \\\n" " unsigned int i = get_global_id(0); \\\n" " unsigned int startIndex = i; \\\n" " \\\n" " if(i < numCols) \\\n" " { \\\n" " for(j = 0; j < numRowsToProcess; j++) \\\n" " { \\\n" " a = in[startIndex]; \\\n" " ang = 2.0f * M_PI * dir * i * (startRow + j) / N; \\\n" " w = (float2)(native_cos(ang), native_sin(ang)); \\\n" " a = complexMul(a, w); \\\n" " in[startIndex] = a; \\\n" " startIndex += numCols; \\\n" " } \\\n" " } \\\n" "} \\\n" ); static string twistKernelPlannar = string( "__kernel void \\\n" "clFFT_1DTwistSplit(__global float *in_real, __global float *in_imag , unsigned int startRow, unsigned int numCols, unsigned int N, unsigned int numRowsToProcess, int dir) \\\n" "{ \\\n" " float2 a, w; \\\n" " float ang; \\\n" " unsigned int j; \\\n" " unsigned int i = get_global_id(0); \\\n" " unsigned int startIndex = i; \\\n" " \\\n" " if(i < numCols) \\\n" " { \\\n" " for(j = 0; j < numRowsToProcess; j++) \\\n" " { \\\n" " a = (float2)(in_real[startIndex], in_imag[startIndex]); \\\n" " ang = 2.0f * M_PI * dir * i * (startRow + j) / N; \\\n" " w = (float2)(native_cos(ang), native_sin(ang)); \\\n" " a = complexMul(a, w); \\\n" " in_real[startIndex] = a.x; \\\n" " in_imag[startIndex] = a.y; \\\n" " startIndex += numCols; \\\n" " } \\\n" " } \\\n" "} \\\n" ); #endif gnss-sdr-0.0.6/src/algorithms/libs/CMakeLists.txt0000644000175000017500000000537612576764164021247 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(GNSS_SPLIBS_SOURCES gps_l2c_signal.cc galileo_e1_signal_processing.cc gnss_sdr_valve.cc gnss_signal_processing.cc gps_sdr_signal_processing.cc nco_lib.cc pass_through.cc galileo_e5_signal_processing.cc complex_byte_to_float_x2.cc byte_x2_to_complex_byte.cc cshort_to_float_x2.cc short_x2_to_cshort.cc complex_float_to_complex_byte.cc ) if(OPENCL_FOUND) set(GNSS_SPLIBS_SOURCES ${GNSS_SPLIBS_SOURCES} fft_execute.cc # Needs OpenCL fft_setup.cc # Needs OpenCL fft_kernelstring.cc # Needs OpenCL ) endif(OPENCL_FOUND) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/core/interfaces ${Boost_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_BLOCKS_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ${VOLK_GNSSSDR_INCLUDE_DIRS} ) if(OPENCL_FOUND) include_directories( ${OPENCL_INCLUDE_DIRS} ) if(OS_IS_MACOSX) set(OPT_LIBRARIES ${OPT_LIBRARIES} "-framework OpenCL") else(OS_IS_MACOSX) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${OPENCL_LIBRARIES}) endif(OS_IS_MACOSX) endif(OPENCL_FOUND) file(GLOB GNSS_SPLIBS_HEADERS "*.h") add_library(gnss_sp_libs ${GNSS_SPLIBS_SOURCES} ${GNSS_SPLIBS_HEADERS}) source_group(Headers FILES ${GNSS_SPLIBS_HEADERS}) target_link_libraries(gnss_sp_libs ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES} ${ORC_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FFT_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} ${OPT_LIBRARIES} gnss_rx ) if(NOT VOLK_GNSSSDR_FOUND) add_dependencies(gnss_sp_libs volk_gnsssdr_module) endif(NOT VOLK_GNSSSDR_FOUND) gnss-sdr-0.0.6/src/algorithms/libs/galileo_e5_signal_processing.cc0000644000175000017500000001261512576764164024606 0ustar carlescarles/*! * \file galileo_e5_signal_processing.cc * \brief This library implements various functions for Galileo E5 signals such * as replica code generation * \author Marc Sales, 2014. marcsales92(at)gmail.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5_signal_processing.h" void galileo_e5_a_code_gen_complex_primary(std::complex* _dest, signed int _prn, char _Signal[3]) { unsigned int prn = _prn - 1; unsigned int index = 0; int a[4]; if ((_prn < 1) || (_prn > 50)) { return; } if (_Signal[0] == '5' && _Signal[1] == 'Q') { for (size_t i = 0; i < Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1; i++) { hex_to_binary_converter(a, Galileo_E5a_Q_PRIMARY_CODE[prn].at(i)); _dest[index] = std::complex(0.0, float(a[0])); _dest[index + 1] = std::complex(0.0, float(a[1])); _dest[index + 2] = std::complex(0.0, float(a[2])); _dest[index + 3] = std::complex(0.0, float(a[3])); index = index + 4; } // last 2 bits are filled up zeros hex_to_binary_converter(a, Galileo_E5a_Q_PRIMARY_CODE[prn].at(Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1)); _dest[index] = std::complex(float(0.0), a[0]); _dest[index + 1] = std::complex(float(0.0), a[1]); } else if (_Signal[0] == '5' && _Signal[1] == 'I') { for (size_t i = 0; i < Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1; i++) { hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(i)); _dest[index] = std::complex(float(a[0]), 0.0); _dest[index + 1] = std::complex(float(a[1]), 0.0); _dest[index + 2] = std::complex(float(a[2]), 0.0); _dest[index + 3] = std::complex(float(a[3]), 0.0); index = index + 4; } // last 2 bits are filled up zeros hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1)); _dest[index] = std::complex(float(a[0]), 0.0); _dest[index + 1] = std::complex(float(a[1]), 0.0); } else if (_Signal[0] == '5' && _Signal[1] == 'X') { int b[4]; for (size_t i = 0; i < Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1; i++) { hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(i)); hex_to_binary_converter(b, Galileo_E5a_Q_PRIMARY_CODE[prn].at(i)); _dest[index] = std::complex(float(a[0]),float(b[0])); _dest[index + 1] = std::complex(float(a[1]),float(b[1])); _dest[index + 2] = std::complex(float(a[2]),float(b[2])); _dest[index + 3] = std::complex(float(a[3]),float(b[3])); index = index + 4; } // last 2 bits are filled up zeros hex_to_binary_converter(a, Galileo_E5a_I_PRIMARY_CODE[prn].at(Galileo_E5a_I_PRIMARY_CODE[prn].length() - 1)); hex_to_binary_converter(b, Galileo_E5a_Q_PRIMARY_CODE[prn].at(Galileo_E5a_Q_PRIMARY_CODE[prn].length() - 1)); _dest[index] = std::complex(float(a[0]), float(b[0])); _dest[index + 1] = std::complex(float(a[1]), float(b[1])); } } void galileo_e5_a_code_gen_complex_sampled(std::complex* _dest, char _Signal[3], unsigned int _prn, signed int _fs, unsigned int _chip_shift) { unsigned int _samplesPerCode; unsigned int delay; const unsigned int _codeLength = Galileo_E5a_CODE_LENGTH_CHIPS; const int _codeFreqBasis = Galileo_E5a_CODE_CHIP_RATE_HZ; std::complex* _code = new std::complex[_codeLength](); galileo_e5_a_code_gen_complex_primary(_code , _prn , _Signal); _samplesPerCode = static_cast(static_cast(_fs) / ( static_cast(_codeFreqBasis) / static_cast(_codeLength))); delay = ((_codeLength - _chip_shift) % _codeLength) * _samplesPerCode / _codeLength; if (_fs != _codeFreqBasis) { std::complex* _resampled_signal; if (posix_memalign((void**)&_resampled_signal, 16, _samplesPerCode * sizeof(gr_complex)) == 0){}; resampler(_code, _resampled_signal, _codeFreqBasis, _fs, _codeLength, _samplesPerCode); //resamples code to fs delete[] _code; _code = _resampled_signal; } for (unsigned int i = 0; i < _samplesPerCode; i++) { _dest[(i + delay) % _samplesPerCode] = _code[i]; } if (_fs != _codeFreqBasis) { free(_code); } else { delete[] _code; } } gnss-sdr-0.0.6/src/algorithms/libs/galileo_e1_signal_processing.cc0000644000175000017500000002033012576764164024573 0ustar carlescarles/*! * \file galileo_e1_signal_processing.cc * \brief This library implements various functions for Galileo E1 signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_signal_processing.h" #include void galileo_e1_code_gen_int(int* _dest, char _Signal[3], signed int _prn, unsigned int _chip_shift) { std::string _galileo_signal = _Signal; signed int prn = _prn - 1; int index = 0; /* A simple error check */ if ((_prn < 1) || (_prn > 50)) { return; } if (_galileo_signal.rfind("1B") != std::string::npos && _galileo_signal.length() >= 2) { for (size_t i = 0; i < Galileo_E1_B_PRIMARY_CODE[prn].length(); i++) { hex_to_binary_converter(&_dest[index], Galileo_E1_B_PRIMARY_CODE[prn].at(i)); index = index + 4; } } else if (_galileo_signal.rfind("1C") != std::string::npos && _galileo_signal.length() >= 2) { for (size_t i = 0; i < Galileo_E1_C_PRIMARY_CODE[prn].length(); i++) { hex_to_binary_converter(&_dest[index], Galileo_E1_C_PRIMARY_CODE[prn].at(i)); index = index + 4; } } else { return; } } void galileo_e1_sinboc_11_gen(std::complex* _dest, int* _prn, unsigned int _length_out) { const unsigned int _length_in = Galileo_E1_B_CODE_LENGTH_CHIPS; unsigned int _period = (unsigned int) (_length_out / _length_in); for (unsigned int i = 0; i < _length_in; i++) { for (unsigned int j = 0; j < (_period / 2); j++) { _dest[i * _period + j] = std::complex((float) _prn[i], 0.0); } for (unsigned int j = (_period / 2); j < _period; j++) { _dest[i * _period + j] = std::complex((float) (- _prn[i]), 0.0); } } } void galileo_e1_sinboc_61_gen(std::complex* _dest, int* _prn, unsigned int _length_out) { const unsigned int _length_in = Galileo_E1_B_CODE_LENGTH_CHIPS; unsigned int _period = (unsigned int) (_length_out / _length_in); for (unsigned int i = 0; i < _length_in; i++) { for (unsigned int j = 0; j < _period; j += 2) { _dest[i * _period + j] = std::complex((float) _prn[i], 0.0); } for (unsigned int j = 1; j < _period; j += 2) { _dest[i * _period + j] = std::complex((float) (- _prn[i]), 0.0); } } } void galileo_e1_gen(std::complex* _dest, int* _prn, char _Signal[3]) { std::string _galileo_signal = _Signal; const unsigned int _codeLength = 12 * Galileo_E1_B_CODE_LENGTH_CHIPS; const float alpha = sqrt(10.0 / 11.0); const float beta = sqrt(1.0 / 11.0); std::complex sinboc_11[12 * 4092]; // _codeLength not accepted by Clang std::complex sinboc_61[12 * 4092]; galileo_e1_sinboc_11_gen(sinboc_11, _prn, _codeLength); //generate sinboc(1,1) 12 samples per chip galileo_e1_sinboc_61_gen(sinboc_61, _prn, _codeLength); //generate sinboc(6,1) 12 samples per chip if (_galileo_signal.rfind("1B") != std::string::npos && _galileo_signal.length() >= 2) { for (unsigned int i = 0; i < _codeLength; i++) { _dest[i] = alpha * sinboc_11[i] + beta * sinboc_61[i]; } } else if (_galileo_signal.rfind("1C") != std::string::npos && _galileo_signal.length() >= 2) { for (unsigned int i = 0; i < _codeLength; i++) { _dest[i] = alpha * sinboc_11[i] - beta * sinboc_61[i]; } } else return; } void galileo_e1_code_gen_complex_sampled(std::complex* _dest, char _Signal[3], bool _cboc, unsigned int _prn, signed int _fs, unsigned int _chip_shift, bool _secondary_flag) { // This function is based on the GNU software GPS for MATLAB in Kay Borre's book std::string _galileo_signal = _Signal; unsigned int _samplesPerCode; const int _codeFreqBasis = Galileo_E1_CODE_CHIP_RATE_HZ; //Hz unsigned int _codeLength = Galileo_E1_B_CODE_LENGTH_CHIPS; int primary_code_E1_chips[(int)Galileo_E1_B_CODE_LENGTH_CHIPS]; _samplesPerCode = static_cast( static_cast(_fs) / (static_cast(_codeFreqBasis )/ static_cast(_codeLength))); const int _samplesPerChip = (_cboc == true) ? 12 : 2; const unsigned int delay = (((int)Galileo_E1_B_CODE_LENGTH_CHIPS - _chip_shift) % (int)Galileo_E1_B_CODE_LENGTH_CHIPS) * _samplesPerCode / Galileo_E1_B_CODE_LENGTH_CHIPS; galileo_e1_code_gen_int(primary_code_E1_chips, _Signal, _prn, 0); //generate Galileo E1 code, 1 sample per chip std::complex* _signal_E1; _codeLength = _samplesPerChip * Galileo_E1_B_CODE_LENGTH_CHIPS; _signal_E1 = new std::complex[_codeLength]; if (_cboc == true) { galileo_e1_gen(_signal_E1, primary_code_E1_chips, _Signal); //generate cboc 12 samples per chip } else { galileo_e1_sinboc_11_gen(_signal_E1, primary_code_E1_chips, _codeLength); //generate sinboc(1,1) 2 samples per chip } if (_fs != _samplesPerChip * _codeFreqBasis) { std::complex* _resampled_signal = new std::complex[_samplesPerCode]; resampler(_signal_E1, _resampled_signal, _samplesPerChip * _codeFreqBasis, _fs, _codeLength, _samplesPerCode); //resamples code to fs delete[] _signal_E1; _signal_E1 = _resampled_signal; } if (_galileo_signal.rfind("1C") != std::string::npos && _galileo_signal.length() >= 2 && _secondary_flag) { std::complex* _signal_E1C_secondary = new std::complex [(int)Galileo_E1_C_SECONDARY_CODE_LENGTH * _samplesPerCode]; for (unsigned int i = 0; i < (int)Galileo_E1_C_SECONDARY_CODE_LENGTH; i++) { for (unsigned k = 0; k < _samplesPerCode; k++) { _signal_E1C_secondary[i*_samplesPerCode + k] = _signal_E1[k] * (Galileo_E1_C_SECONDARY_CODE.at(i) == '0' ? std::complex(1,0) : std::complex(-1,0)); } } _samplesPerCode *= (int)Galileo_E1_C_SECONDARY_CODE_LENGTH; delete[] _signal_E1; _signal_E1 = _signal_E1C_secondary; } for (unsigned int i = 0; i < _samplesPerCode; i++) { _dest[(i + delay) % _samplesPerCode] = _signal_E1[i]; } delete[] _signal_E1; } void galileo_e1_code_gen_complex_sampled(std::complex* _dest, char _Signal[3], bool _cboc, unsigned int _prn, signed int _fs, unsigned int _chip_shift) { galileo_e1_code_gen_complex_sampled(_dest, _Signal, _cboc, _prn, _fs, _chip_shift, false); } gnss-sdr-0.0.6/src/algorithms/libs/gnss_sdr_valve.h0000644000175000017500000000453412576764164021672 0ustar carlescarles/*! * \file gnss_sdr_valve.h * \brief Interface of a GNU Radio block that sends a STOP message to the * control queue right after a specific number of samples have passed through it. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_SDR_VALVE_H_ #define GNSS_SDR_GNSS_SDR_VALVE_H_ #include #include #include #include boost::shared_ptr gnss_sdr_make_valve (size_t sizeof_stream_item, unsigned long long nitems, gr::msg_queue::sptr queue); /*! * \brief Implementation of a GNU Radio block that sends a STOP message to the * control queue right after a specific number of samples have passed through it. */ class gnss_sdr_valve : public gr::sync_block { friend boost::shared_ptr gnss_sdr_make_valve(size_t sizeof_stream_item, unsigned long long nitems, gr::msg_queue::sptr queue); gnss_sdr_valve (size_t sizeof_stream_item, unsigned long long nitems, gr::msg_queue::sptr queue); unsigned long long d_nitems; unsigned long long d_ncopied_items; gr::msg_queue::sptr d_queue; public: int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /*GNSS_SDR_GNSS_SDR_VALVE_H_*/ gnss-sdr-0.0.6/src/algorithms/libs/complex_byte_to_float_x2.cc0000644000175000017500000000436612576764164024006 0ustar carlescarles/*! * \file complex_byte_to_float_x2.cc * \brief Adapts a std::complex stream into two 16-bits (short) streams * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "complex_byte_to_float_x2.h" #include #include complex_byte_to_float_x2_sptr make_complex_byte_to_float_x2() { return complex_byte_to_float_x2_sptr(new complex_byte_to_float_x2()); } complex_byte_to_float_x2::complex_byte_to_float_x2() : sync_block("complex_byte_to_float_x2", gr::io_signature::make (1, 1, sizeof(lv_8sc_t)), // lv_8sc_t is a Volk's typedef for std::complex gr::io_signature::make (2, 2, sizeof(float))) { const int alignment_multiple = volk_get_alignment() / sizeof(float); set_alignment(std::max(1, alignment_multiple)); } int complex_byte_to_float_x2::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const lv_8sc_t *in = (const lv_8sc_t *) input_items[0]; float *out0 = (float*) output_items[0]; float *out1 = (float*) output_items[1]; const float scalar = 1; volk_8ic_s32f_deinterleave_32f_x2(out0, out1, in, scalar, noutput_items); return noutput_items; } gnss-sdr-0.0.6/src/algorithms/libs/complex_float_to_complex_byte.h0000644000175000017500000000372212576764164024761 0ustar carlescarles/*! * \file complex_float_to_complex_byte.h * \brief Adapts a gr_complex stream into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_COMPLEX_FLOAT_TO_COMPLEX_BYTE_H_ #define GNSS_SDR_COMPLEX_FLOAT_TO_COMPLEX_BYTE_H_ #include #include class complex_float_to_complex_byte; typedef boost::shared_ptr complex_float_to_complex_byte_sptr; complex_float_to_complex_byte_sptr make_complex_float_to_complex_byte(); /*! * \brief This class adapts a gr_complex stream into a std::complex stream */ class complex_float_to_complex_byte : public gr::sync_block { private: friend complex_float_to_complex_byte_sptr make_complex_float_to_complex_byte(); public: complex_float_to_complex_byte(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/libs/byte_x2_to_complex_byte.cc0000644000175000017500000000506012576764164023634 0ustar carlescarles/*! * \file byte_x2_to_complex_byte.cc * \brief Adapts two signed char streams into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "byte_x2_to_complex_byte.h" #include #include byte_x2_to_complex_byte_sptr make_byte_x2_to_complex_byte() { return byte_x2_to_complex_byte_sptr(new byte_x2_to_complex_byte()); } byte_x2_to_complex_byte::byte_x2_to_complex_byte() : sync_block("byte_x2_to_complex_byte", gr::io_signature::make (2, 2, sizeof(int8_t)), // int8_t, defined in stdint.h and included in volk.h (signed char) gr::io_signature::make (1, 1, sizeof(lv_8sc_t))) // lv_8sc_t is a Volk's typedef for std::complex { const int alignment_multiple = volk_get_alignment() / sizeof(lv_8sc_t); set_alignment(std::max(1, alignment_multiple)); } int byte_x2_to_complex_byte::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const int8_t *in0 = (const int8_t *) input_items[0]; const int8_t *in1 = (const int8_t *) input_items[1]; lv_8sc_t *out = (lv_8sc_t *) output_items[0]; // This could be put into a volk kernel int8_t real_part; int8_t imag_part; for(int number = 0; number < noutput_items; number++) { // lv_cmake(r, i) defined at volk/volk_complex.h real_part = *in0++; imag_part = *in1++; *out++ = lv_cmake(real_part, imag_part); } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/libs/cshort_to_float_x2.h0000644000175000017500000000351412576764164022452 0ustar carlescarles/*! * \file cshort_to_float_x2.h * \brief Adapts a std::complex stream into two float streams * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CSHORT_TO_FLOAT_X2_H_ #define GNSS_SDR_CSHORT_TO_FLOAT_X2_H_ #include #include class cshort_to_float_x2; typedef boost::shared_ptr cshort_to_float_x2_sptr; cshort_to_float_x2_sptr make_cshort_to_float_x2(); /*! * \brief This class adapts a std::complex stream * into two 32-bits (float) streams */ class cshort_to_float_x2 : public gr::sync_block { private: friend cshort_to_float_x2_sptr make_cshort_to_float_x2(); public: cshort_to_float_x2(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/libs/complex_float_to_complex_byte.cc0000644000175000017500000000437612576764164025125 0ustar carlescarles/*! * \file complex_float_to_complex_byte.cc * \brief Adapts a gr_complex stream into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "complex_float_to_complex_byte.h" #include #include #include "volk_gnsssdr/volk_gnsssdr.h" complex_float_to_complex_byte_sptr make_complex_float_to_complex_byte() { return complex_float_to_complex_byte_sptr(new complex_float_to_complex_byte()); } complex_float_to_complex_byte::complex_float_to_complex_byte() : sync_block("complex_float_to_complex_byte", gr::io_signature::make (1, 1, sizeof(gr_complex)), gr::io_signature::make (1, 1, sizeof(lv_8sc_t))) // lv_8sc_t is a Volk's typedef for std::complex { const int alignment_multiple = volk_get_alignment() / sizeof(lv_8sc_t); set_alignment(std::max(1, alignment_multiple)); } int complex_float_to_complex_byte::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const gr_complex *in = (const gr_complex *) input_items[0]; lv_8sc_t *out = (lv_8sc_t*) output_items[0]; volk_gnsssdr_32fc_convert_8ic(out, in, noutput_items); return noutput_items; } gnss-sdr-0.0.6/src/algorithms/libs/pass_through.cc0000644000175000017500000000756312576764164021524 0ustar carlescarles/*! * \file pass_through.cc * \brief Implementation of a block that just puts its input in its * output. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pass_through.h" #include #include #include #include #include "configuration_interface.h" using google::LogMessage; Pass_Through::Pass_Through(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams) { std::string default_item_type = "gr_complex"; std::string input_type = configuration->property(role + ".input_item_type", default_item_type); std::string output_type = configuration->property(role + ".output_item_type", default_item_type); if(input_type.compare(output_type) != 0) { LOG(WARNING) << "input_item_type and output_item_type are different in a Pass_Through implementation! Taking " << input_type << ", but item_size will supersede it."; } item_type_ = configuration->property(role + ".item_type", input_type); vector_size_ = configuration->property(role + ".vector_size", 1); if(item_type_.compare("float") == 0) { item_size_ = sizeof(float); } else if(item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); } else if(item_type_.compare("short") == 0) { item_size_ = sizeof(int16_t); } else if(item_type_.compare("ishort") == 0) { item_size_ = sizeof(int16_t); } else if(item_type_.compare("cshort") == 0) { item_size_ = sizeof(lv_16sc_t); } else if(item_type_.compare("byte") == 0) { item_size_ = sizeof(int8_t); } else if(item_type_.compare("ibyte") == 0) { item_size_ = sizeof(int8_t); } else if(item_type_.compare("cbyte") == 0) { item_size_ = sizeof(lv_8sc_t); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using float"; item_size_ = sizeof(float); } kludge_copy_ = gr::blocks::copy::make(item_size_); DLOG(INFO) << "kludge_copy(" << kludge_copy_->unique_id() << ")"; } Pass_Through::~Pass_Through() {} void Pass_Through::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; DLOG(INFO) << "nothing to connect internally"; } void Pass_Through::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr Pass_Through::get_left_block() { return kludge_copy_; } gr::basic_block_sptr Pass_Through::get_right_block() { return kludge_copy_; } gnss-sdr-0.0.6/src/algorithms/libs/nco_lib.cc0000644000175000017500000000656612576764164020425 0ustar carlescarles/*! * \file nco_lib.cc * \brief A set of Numeric Controlled Oscillator (NCO) functions to generate the carrier wipeoff signal, * regardless of system used * * \author Javier Arribas 2012, jarribas(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "nco_lib.h" void fxp_nco(std::complex *dest, int n_samples, float start_phase_rad, float phase_step_rad) { int phase_rad_i; phase_rad_i = gr::fxpt::float_to_fixed(start_phase_rad); int phase_step_rad_i; phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); float sin_f,cos_f; for(int i = 0; i < n_samples; i++) { //using temp variables gr::fxpt::sincos(-phase_rad_i,&sin_f,&cos_f); dest[i] = gr_complex(cos_f, sin_f); phase_rad_i += phase_step_rad_i; } } void fxp_nco_cpyref(std::complex *dest, int n_samples, float start_phase_rad, float phase_step_rad) { int phase_rad_i; phase_rad_i = gr::fxpt::float_to_fixed(start_phase_rad); int phase_step_rad_i; phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); float* vector_cpx; vector_cpx = (float*)dest; for(int i = 0; i < n_samples; i++) { //using references (maybe it can be a problem for c++11 ?) //gr_fxpt::sincos(phase_rad_i,&d_carr_sign[i].imag(),&d_carr_sign[i].real()); gr::fxpt::sincos(-phase_rad_i, &vector_cpx[i*2+1], &vector_cpx[i*2]); phase_rad_i += phase_step_rad_i; } } void fxp_nco_IQ_split(float* I, float* Q , int n_samples,float start_phase_rad, float phase_step_rad) { int phase_rad_i; phase_rad_i = gr::fxpt::float_to_fixed(start_phase_rad); int phase_step_rad_i; phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad); float sin_f,cos_f; for(int i = 0; i < n_samples; i++) { gr::fxpt::sincos(-phase_rad_i,&sin_f,&cos_f); I[i] = cos_f; Q[i] = sin_f; phase_rad_i += phase_step_rad_i; } } void std_nco(std::complex *dest, int n_samples, float start_phase_rad, float phase_step_rad) { float phase_rad; phase_rad = start_phase_rad; for(int i = 0; i < n_samples; i++) { // Using std::cos and std::sin dest[i] = gr_complex(std::cos(phase_rad), -std::sin(phase_rad)); phase_rad = phase_rad+phase_step_rad; } } gnss-sdr-0.0.6/src/algorithms/libs/fft_setup.cc0000644000175000017500000002646112576764164021013 0ustar carlescarles // // File: fft_setup.cpp // // Version: <1.0> // // Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") // in consideration of your agreement to the following terms, and your use, // installation, modification or redistribution of this Apple software // constitutes acceptance of these terms. If you do not agree with these // terms, please do not use, install, modify or redistribute this Apple // software. // // In consideration of your agreement to abide by the following terms, and // subject to these terms, Apple grants you a personal, non - exclusive // license, under Apple's copyrights in this original Apple software ( the // "Apple Software" ), to use, reproduce, modify and redistribute the Apple // Software, with or without modifications, in source and / or binary forms; // provided that if you redistribute the Apple Software in its entirety and // without modifications, you must retain this notice and the following text // and disclaimers in all such redistributions of the Apple Software. Neither // the name, trademarks, service marks or logos of Apple Inc. may be used to // endorse or promote products derived from the Apple Software without specific // prior written permission from Apple. Except as expressly stated in this // notice, no other rights or licenses, express or implied, are granted by // Apple herein, including but not limited to any patent rights that may be // infringed by your derivative works or by other works in which the Apple // Software may be incorporated. // // The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO // WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED // WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION // ALONE OR IN COMBINATION WITH YOUR PRODUCTS. // // IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR // CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION // AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER // UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR // OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright ( C ) 2008 Apple Inc. All Rights Reserved. // //////////////////////////////////////////////////////////////////////////////////////////////////// #include "fft_internal.h" #include "fft_base_kernels.h" #include #include #include #include #include #include #include #include using namespace std; extern void getKernelWorkDimensions(cl_fft_plan *plan, cl_fft_kernel_info *kernelInfo, cl_int *batchSize, size_t *gWorkItems, size_t *lWorkItems); static void getBlockConfigAndKernelString(cl_fft_plan *plan) { plan->temp_buffer_needed = 0; *plan->kernel_string += baseKernels; if(plan->format == clFFT_SplitComplexFormat) *plan->kernel_string += twistKernelPlannar; else *plan->kernel_string += twistKernelInterleaved; switch(plan->dim) { case clFFT_1D: FFT1D(plan, cl_fft_kernel_x); break; case clFFT_2D: FFT1D(plan, cl_fft_kernel_x); FFT1D(plan, cl_fft_kernel_y); break; case clFFT_3D: FFT1D(plan, cl_fft_kernel_x); FFT1D(plan, cl_fft_kernel_y); FFT1D(plan, cl_fft_kernel_z); break; default: return; } plan->temp_buffer_needed = 0; cl_fft_kernel_info *kInfo = plan->kernel_info; while(kInfo) { plan->temp_buffer_needed |= !kInfo->in_place_possible; kInfo = kInfo->next; } } static void deleteKernelInfo(cl_fft_kernel_info *kInfo) { if(kInfo) { if(kInfo->kernel_name) free(kInfo->kernel_name); if(kInfo->kernel) clReleaseKernel(kInfo->kernel); free(kInfo); } } static void destroy_plan(cl_fft_plan *Plan) { cl_fft_kernel_info *kernel_info = Plan->kernel_info; while(kernel_info) { cl_fft_kernel_info *tmp = kernel_info->next; deleteKernelInfo(kernel_info); kernel_info = tmp; } Plan->kernel_info = NULL; if(Plan->kernel_string) { delete Plan->kernel_string; Plan->kernel_string = NULL; } if(Plan->twist_kernel) { clReleaseKernel(Plan->twist_kernel); Plan->twist_kernel = NULL; } if(Plan->program) { clReleaseProgram(Plan->program); Plan->program = NULL; } if(Plan->tempmemobj) { clReleaseMemObject(Plan->tempmemobj); Plan->tempmemobj = NULL; } if(Plan->tempmemobj_real) { clReleaseMemObject(Plan->tempmemobj_real); Plan->tempmemobj_real = NULL; } if(Plan->tempmemobj_imag) { clReleaseMemObject(Plan->tempmemobj_imag); Plan->tempmemobj_imag = NULL; } } static int createKernelList(cl_fft_plan *plan) { cl_program program = plan->program; cl_fft_kernel_info *kernel_info = plan->kernel_info; cl_int err; while(kernel_info) { kernel_info->kernel = clCreateKernel(program, kernel_info->kernel_name, &err); if(!kernel_info->kernel || err != CL_SUCCESS) return err; kernel_info = kernel_info->next; } if(plan->format == clFFT_SplitComplexFormat) plan->twist_kernel = clCreateKernel(program, "clFFT_1DTwistSplit", &err); else plan->twist_kernel = clCreateKernel(program, "clFFT_1DTwistInterleaved", &err); if(!plan->twist_kernel || err) return err; return CL_SUCCESS; } int getMaxKernelWorkGroupSize(cl_fft_plan *plan, unsigned int *max_wg_size, unsigned int num_devices, cl_device_id *devices) { int reg_needed = 0; *max_wg_size = std::numeric_limits::max(); int err; unsigned wg_size; unsigned int i; for(i = 0; i < num_devices; i++) { cl_fft_kernel_info *kInfo = plan->kernel_info; while(kInfo) { err = clGetKernelWorkGroupInfo(kInfo->kernel, devices[i], CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wg_size, NULL); if(err != CL_SUCCESS) return -1; if(wg_size < kInfo->num_workitems_per_workgroup) reg_needed |= 1; if(*max_wg_size > wg_size) *max_wg_size = wg_size; kInfo = kInfo->next; } } return reg_needed; } #define ERR_MACRO(err) { \ if( err != CL_SUCCESS) \ { \ if(error_code) \ *error_code = err; \ clFFT_DestroyPlan((clFFT_Plan) plan); \ return (clFFT_Plan) NULL; \ } \ } clFFT_Plan clFFT_CreatePlan(cl_context context, clFFT_Dim3 n, clFFT_Dimension dim, clFFT_DataFormat dataFormat, cl_int *error_code ) { int i; cl_int err; int isPow2 = 1; cl_fft_plan *plan = NULL; ostringstream kString; int num_devices; int gpu_found = 0; cl_device_id devices[16]; size_t ret_size; cl_device_type device_type; if(!context) ERR_MACRO(CL_INVALID_VALUE); isPow2 |= n.x && !( (n.x - 1) & n.x ); isPow2 |= n.y && !( (n.y - 1) & n.y ); isPow2 |= n.z && !( (n.z - 1) & n.z ); if(!isPow2) ERR_MACRO(CL_INVALID_VALUE); if( (dim == clFFT_1D && (n.y != 1 || n.z != 1)) || (dim == clFFT_2D && n.z != 1) ) ERR_MACRO(CL_INVALID_VALUE); plan = (cl_fft_plan *) malloc(sizeof(cl_fft_plan)); if(!plan) ERR_MACRO(CL_OUT_OF_RESOURCES); plan->context = context; clRetainContext(context); plan->n = n; plan->dim = dim; plan->format = dataFormat; plan->kernel_info = 0; plan->num_kernels = 0; plan->twist_kernel = 0; plan->program = 0; plan->temp_buffer_needed = 0; plan->last_batch_size = 0; plan->tempmemobj = 0; plan->tempmemobj_real = 0; plan->tempmemobj_imag = 0; plan->max_localmem_fft_size = 2048; plan->max_work_item_per_workgroup = 256; plan->max_radix = 16; plan->min_mem_coalesce_width = 16; plan->num_local_mem_banks = 16; patch_kernel_source: plan->kernel_string = new string(""); if(!plan->kernel_string) ERR_MACRO(CL_OUT_OF_RESOURCES); getBlockConfigAndKernelString(plan); const char *source_str = plan->kernel_string->c_str(); plan->program = clCreateProgramWithSource(context, 1, (const char**) &source_str, NULL, &err); ERR_MACRO(err); err = clGetContextInfo(context, CL_CONTEXT_DEVICES, sizeof(devices), devices, &ret_size); ERR_MACRO(err); num_devices = (int)(ret_size / sizeof(cl_device_id)); for(i = 0; i < num_devices; i++) { err = clGetDeviceInfo(devices[i], CL_DEVICE_TYPE, sizeof(device_type), &device_type, NULL); ERR_MACRO(err); if(device_type == CL_DEVICE_TYPE_GPU) { gpu_found = 1; err = clBuildProgram(plan->program, 1, &devices[i], "-cl-mad-enable", NULL, NULL); if (err != CL_SUCCESS) { char *build_log; char devicename[200]; size_t log_size; err = clGetProgramBuildInfo(plan->program, devices[i], CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); ERR_MACRO(err); build_log = (char *) malloc(log_size + 1); err = clGetProgramBuildInfo(plan->program, devices[i], CL_PROGRAM_BUILD_LOG, log_size, build_log, NULL); ERR_MACRO(err); err = clGetDeviceInfo(devices[i], CL_DEVICE_NAME, sizeof(devicename), devicename, NULL); ERR_MACRO(err); fprintf(stdout, "FFT program build log on device %s\n", devicename); fprintf(stdout, "%s\n", build_log); free(build_log); ERR_MACRO(err); } } } if(!gpu_found) ERR_MACRO(CL_INVALID_CONTEXT); err = createKernelList(plan); ERR_MACRO(err); // we created program and kernels based on "some max work group size (default 256)" ... this work group size // may be larger than what kernel may execute with ... if thats the case we need to regenerate the kernel source // setting this as limit i.e max group size and rebuild. unsigned int max_kernel_wg_size; int patching_req = getMaxKernelWorkGroupSize(plan, &max_kernel_wg_size, num_devices, devices); if(patching_req == -1) { ERR_MACRO(err); } if(patching_req) { destroy_plan(plan); plan->max_work_item_per_workgroup = max_kernel_wg_size; goto patch_kernel_source; } cl_fft_kernel_info *kInfo = plan->kernel_info; while(kInfo) { plan->num_kernels++; kInfo = kInfo->next; } if(error_code) *error_code = CL_SUCCESS; return (clFFT_Plan) plan; } void clFFT_DestroyPlan(clFFT_Plan plan) { cl_fft_plan *Plan = (cl_fft_plan *) plan; if(Plan) { destroy_plan(Plan); clReleaseContext(Plan->context); free(Plan); } } void clFFT_DumpPlan( clFFT_Plan Plan, FILE *file) { size_t gDim, lDim; FILE *out; if(!file) out = stdout; else out = file; cl_fft_plan *plan = (cl_fft_plan *) Plan; cl_fft_kernel_info *kInfo = plan->kernel_info; while(kInfo) { cl_int s = 1; getKernelWorkDimensions(plan, kInfo, &s, &gDim, &lDim); fprintf(out, "Run kernel %s with global dim = {%zd*BatchSize}, local dim={%zd}\n", kInfo->kernel_name, gDim, lDim); kInfo = kInfo->next; } fprintf(out, "%s\n", plan->kernel_string->c_str()); } gnss-sdr-0.0.6/src/algorithms/libs/fft_kernelstring.cc0000644000175000017500000014421112576764164022354 0ustar carlescarles // // File: fft_kernelstring.cpp // // Version: <1.0> // // Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") // in consideration of your agreement to the following terms, and your use, // installation, modification or redistribution of this Apple software // constitutes acceptance of these terms. If you do not agree with these // terms, please do not use, install, modify or redistribute this Apple // software. // // In consideration of your agreement to abide by the following terms, and // subject to these terms, Apple grants you a personal, non - exclusive // license, under Apple's copyrights in this original Apple software ( the // "Apple Software" ), to use, reproduce, modify and redistribute the Apple // Software, with or without modifications, in source and / or binary forms; // provided that if you redistribute the Apple Software in its entirety and // without modifications, you must retain this notice and the following text // and disclaimers in all such redistributions of the Apple Software. Neither // the name, trademarks, service marks or logos of Apple Inc. may be used to // endorse or promote products derived from the Apple Software without specific // prior written permission from Apple. Except as expressly stated in this // notice, no other rights or licenses, express or implied, are granted by // Apple herein, including but not limited to any patent rights that may be // infringed by your derivative works or by other works in which the Apple // Software may be incorporated. // // The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO // WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED // WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION // ALONE OR IN COMBINATION WITH YOUR PRODUCTS. // // IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR // CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION // AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER // UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR // OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright ( C ) 2008 Apple Inc. All Rights Reserved. // //////////////////////////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include #include "fft_internal.h" #include "clFFT.h" using namespace std; #define max(A,B) ((A) > (B) ? (A) : (B)) #define min(A,B) ((A) < (B) ? (A) : (B)) static string num2str(int num) { char temp[200]; sprintf(temp, "%d", num); return string(temp); } // For any n, this function decomposes n into factors for loacal memory tranpose // based fft. Factors (radices) are sorted such that the first one (radixArray[0]) // is the largest. This base radix determines the number of registers used by each // work item and product of remaining radices determine the size of work group needed. // To make things concrete with and example, suppose n = 1024. It is decomposed into // 1024 = 16 x 16 x 4. Hence kernel uses float2 a[16], for local in-register fft and // needs 16 x 4 = 64 work items per work group. So kernel first performance 64 length // 16 ffts (64 work items working in parallel) following by transpose using local // memory followed by again 64 length 16 ffts followed by transpose using local memory // followed by 256 length 4 ffts. For the last step since with size of work group is // 64 and each work item can array for 16 values, 64 work items can compute 256 length // 4 ffts by each work item computing 4 length 4 ffts. // Similarly for n = 2048 = 8 x 8 x 8 x 4, each work group has 8 x 8 x 4 = 256 work // iterms which each computes 256 (in-parallel) length 8 ffts in-register, followed // by transpose using local memory, followed by 256 length 8 in-register ffts, followed // by transpose using local memory, followed by 256 length 8 in-register ffts, followed // by transpose using local memory, followed by 512 length 4 in-register ffts. Again, // for the last step, each work item computes two length 4 in-register ffts and thus // 256 work items are needed to compute all 512 ffts. // For n = 32 = 8 x 4, 4 work items first compute 4 in-register // lenth 8 ffts, followed by transpose using local memory followed by 8 in-register // length 4 ffts, where each work item computes two length 4 ffts thus 4 work items // can compute 8 length 4 ffts. However if work group size of say 64 is choosen, // each work group can compute 64/ 4 = 16 size 32 ffts (batched transform). // Users can play with these parameters to figure what gives best performance on // their particular device i.e. some device have less register space thus using // smaller base radix can avoid spilling ... some has small local memory thus // using smaller work group size may be required etc static void getRadixArray(unsigned int n, unsigned int *radixArray, unsigned int *numRadices, unsigned int maxRadix) { if(maxRadix > 1) { maxRadix = min(n, maxRadix); unsigned int cnt = 0; while(n > maxRadix) { radixArray[cnt++] = maxRadix; n /= maxRadix; } radixArray[cnt++] = n; *numRadices = cnt; return; } switch(n) { case 2: *numRadices = 1; radixArray[0] = 2; break; case 4: *numRadices = 1; radixArray[0] = 4; break; case 8: *numRadices = 1; radixArray[0] = 8; break; case 16: *numRadices = 2; radixArray[0] = 8; radixArray[1] = 2; break; case 32: *numRadices = 2; radixArray[0] = 8; radixArray[1] = 4; break; case 64: *numRadices = 2; radixArray[0] = 8; radixArray[1] = 8; break; case 128: *numRadices = 3; radixArray[0] = 8; radixArray[1] = 4; radixArray[2] = 4; break; case 256: *numRadices = 4; radixArray[0] = 4; radixArray[1] = 4; radixArray[2] = 4; radixArray[3] = 4; break; case 512: *numRadices = 3; radixArray[0] = 8; radixArray[1] = 8; radixArray[2] = 8; break; case 1024: *numRadices = 3; radixArray[0] = 16; radixArray[1] = 16; radixArray[2] = 4; break; case 2048: *numRadices = 4; radixArray[0] = 8; radixArray[1] = 8; radixArray[2] = 8; radixArray[3] = 4; break; default: *numRadices = 0; return; } } static void insertHeader(string &kernelString, string &kernelName, clFFT_DataFormat dataFormat) { if(dataFormat == clFFT_SplitComplexFormat) kernelString += string("__kernel void ") + kernelName + string("(__global float *in_real, __global float *in_imag, __global float *out_real, __global float *out_imag, int dir, int S)\n"); else kernelString += string("__kernel void ") + kernelName + string("(__global float2 *in, __global float2 *out, int dir, int S)\n"); } static void insertVariables(string &kStream, int maxRadix) { kStream += string(" int i, j, r, indexIn, indexOut, index, tid, bNum, xNum, k, l;\n"); kStream += string(" int s, ii, jj, offset;\n"); kStream += string(" float2 w;\n"); kStream += string(" float ang, angf, ang1;\n"); kStream += string(" __local float *lMemStore, *lMemLoad;\n"); kStream += string(" float2 a[") + num2str(maxRadix) + string("];\n"); kStream += string(" int lId = get_local_id( 0 );\n"); kStream += string(" int groupId = get_group_id( 0 );\n"); } static void formattedLoad(string &kernelString, int aIndex, int gIndex, clFFT_DataFormat dataFormat) { if(dataFormat == clFFT_InterleavedComplexFormat) kernelString += string(" a[") + num2str(aIndex) + string("] = in[") + num2str(gIndex) + string("];\n"); else { kernelString += string(" a[") + num2str(aIndex) + string("].x = in_real[") + num2str(gIndex) + string("];\n"); kernelString += string(" a[") + num2str(aIndex) + string("].y = in_imag[") + num2str(gIndex) + string("];\n"); } } static void formattedStore(string &kernelString, int aIndex, int gIndex, clFFT_DataFormat dataFormat) { if(dataFormat == clFFT_InterleavedComplexFormat) kernelString += string(" out[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("];\n"); else { kernelString += string(" out_real[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("].x;\n"); kernelString += string(" out_imag[") + num2str(gIndex) + string("] = a[") + num2str(aIndex) + string("].y;\n"); } } static int insertGlobalLoadsAndTranspose(string &kernelString, int N, int numWorkItemsPerXForm, int numXFormsPerWG, int R0, int mem_coalesce_width, clFFT_DataFormat dataFormat) { int log2NumWorkItemsPerXForm = (int) log2(numWorkItemsPerXForm); int groupSize = numWorkItemsPerXForm * numXFormsPerWG; int i, j; int lMemSize = 0; if(numXFormsPerWG > 1) kernelString += string(" s = S & ") + num2str(numXFormsPerWG - 1) + string(";\n"); if(numWorkItemsPerXForm >= mem_coalesce_width) { if(numXFormsPerWG > 1) { kernelString += string(" ii = lId & ") + num2str(numWorkItemsPerXForm-1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n"); kernelString += string(" if( !s || (groupId < get_num_groups(0)-1) || (jj < s) ) {\n"); kernelString += string(" offset = mad24( mad24(groupId, ") + num2str(numXFormsPerWG) + string(", jj), ") + num2str(N) + string(", ii );\n"); if(dataFormat == clFFT_InterleavedComplexFormat) { kernelString += string(" in += offset;\n"); kernelString += string(" out += offset;\n"); } else { kernelString += string(" in_real += offset;\n"); kernelString += string(" in_imag += offset;\n"); kernelString += string(" out_real += offset;\n"); kernelString += string(" out_imag += offset;\n"); } for(i = 0; i < R0; i++) formattedLoad(kernelString, i, i*numWorkItemsPerXForm, dataFormat); kernelString += string(" }\n"); } else { kernelString += string(" ii = lId;\n"); kernelString += string(" jj = 0;\n"); kernelString += string(" offset = mad24(groupId, ") + num2str(N) + string(", ii);\n"); if(dataFormat == clFFT_InterleavedComplexFormat) { kernelString += string(" in += offset;\n"); kernelString += string(" out += offset;\n"); } else { kernelString += string(" in_real += offset;\n"); kernelString += string(" in_imag += offset;\n"); kernelString += string(" out_real += offset;\n"); kernelString += string(" out_imag += offset;\n"); } for(i = 0; i < R0; i++) formattedLoad(kernelString, i, i*numWorkItemsPerXForm, dataFormat); } } else if( N >= mem_coalesce_width ) { int numInnerIter = N / mem_coalesce_width; int numOuterIter = numXFormsPerWG / ( groupSize / mem_coalesce_width ); kernelString += string(" ii = lId & ") + num2str(mem_coalesce_width - 1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str((int)log2(mem_coalesce_width)) + string(";\n"); kernelString += string(" lMemStore = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); kernelString += string(" offset = mad24( groupId, ") + num2str(numXFormsPerWG) + string(", jj);\n"); kernelString += string(" offset = mad24( offset, ") + num2str(N) + string(", ii );\n"); if(dataFormat == clFFT_InterleavedComplexFormat) { kernelString += string(" in += offset;\n"); kernelString += string(" out += offset;\n"); } else { kernelString += string(" in_real += offset;\n"); kernelString += string(" in_imag += offset;\n"); kernelString += string(" out_real += offset;\n"); kernelString += string(" out_imag += offset;\n"); } kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n"); for(i = 0; i < numOuterIter; i++ ) { kernelString += string(" if( jj < s ) {\n"); for(j = 0; j < numInnerIter; j++ ) formattedLoad(kernelString, i * numInnerIter + j, j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * N, dataFormat); kernelString += string(" }\n"); if(i != numOuterIter - 1) kernelString += string(" jj += ") + num2str(groupSize / mem_coalesce_width) + string(";\n"); } kernelString += string("}\n "); kernelString += string("else {\n"); for(i = 0; i < numOuterIter; i++ ) { for(j = 0; j < numInnerIter; j++ ) formattedLoad(kernelString, i * numInnerIter + j, j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * N, dataFormat); } kernelString += string("}\n"); kernelString += string(" ii = lId & ") + num2str(numWorkItemsPerXForm - 1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n"); kernelString += string(" lMemLoad = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii);\n"); for( i = 0; i < numOuterIter; i++ ) { for( j = 0; j < numInnerIter; j++ ) { kernelString += string(" lMemStore[") + num2str(j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * (N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i * numInnerIter + j) + string("].x;\n"); } } kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < R0; i++ ) kernelString += string(" a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < numOuterIter; i++ ) { for( j = 0; j < numInnerIter; j++ ) { kernelString += string(" lMemStore[") + num2str(j * mem_coalesce_width + i * ( groupSize / mem_coalesce_width ) * (N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i * numInnerIter + j) + string("].y;\n"); } } kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < R0; i++ ) kernelString += string(" a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG; } else { kernelString += string(" offset = mad24( groupId, ") + num2str(N * numXFormsPerWG) + string(", lId );\n"); if(dataFormat == clFFT_InterleavedComplexFormat) { kernelString += string(" in += offset;\n"); kernelString += string(" out += offset;\n"); } else { kernelString += string(" in_real += offset;\n"); kernelString += string(" in_imag += offset;\n"); kernelString += string(" out_real += offset;\n"); kernelString += string(" out_imag += offset;\n"); } kernelString += string(" ii = lId & ") + num2str(N-1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str((int)log2(N)) + string(";\n"); kernelString += string(" lMemStore = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n"); for( i = 0; i < R0; i++ ) { kernelString += string(" if(jj < s )\n"); formattedLoad(kernelString, i, i*groupSize, dataFormat); if(i != R0 - 1) kernelString += string(" jj += ") + num2str(groupSize / N) + string(";\n"); } kernelString += string("}\n"); kernelString += string("else {\n"); for( i = 0; i < R0; i++ ) { formattedLoad(kernelString, i, i*groupSize, dataFormat); } kernelString += string("}\n"); if(numWorkItemsPerXForm > 1) { kernelString += string(" ii = lId & ") + num2str(numWorkItemsPerXForm - 1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str(log2NumWorkItemsPerXForm) + string(";\n"); kernelString += string(" lMemLoad = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); } else { kernelString += string(" ii = 0;\n"); kernelString += string(" jj = lId;\n"); kernelString += string(" lMemLoad = sMem + mul24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(");\n"); } for( i = 0; i < R0; i++ ) kernelString += string(" lMemStore[") + num2str(i * ( groupSize / N ) * ( N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i) + string("].x;\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < R0; i++ ) kernelString += string(" a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < R0; i++ ) kernelString += string(" lMemStore[") + num2str(i * ( groupSize / N ) * ( N + numWorkItemsPerXForm )) + string("] = a[") + num2str(i) + string("].y;\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < R0; i++ ) kernelString += string(" a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i * numWorkItemsPerXForm) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG; } return lMemSize; } static int insertGlobalStoresAndTranspose(string &kernelString, int N, int maxRadix, int Nr, int numWorkItemsPerXForm, int numXFormsPerWG, int mem_coalesce_width, clFFT_DataFormat dataFormat) { int groupSize = numWorkItemsPerXForm * numXFormsPerWG; int i, j, k, ind; int lMemSize = 0; int numIter = maxRadix / Nr; string indent = string(""); if( numWorkItemsPerXForm >= mem_coalesce_width ) { if(numXFormsPerWG > 1) { kernelString += string(" if( !s || (groupId < get_num_groups(0)-1) || (jj < s) ) {\n"); indent = string(" "); } for(i = 0; i < maxRadix; i++) { j = i % numIter; k = i / numIter; ind = j * Nr + k; formattedStore(kernelString, ind, i*numWorkItemsPerXForm, dataFormat); } if(numXFormsPerWG > 1) kernelString += string(" }\n"); } else if( N >= mem_coalesce_width ) { int numInnerIter = N / mem_coalesce_width; int numOuterIter = numXFormsPerWG / ( groupSize / mem_coalesce_width ); kernelString += string(" lMemLoad = sMem + mad24( jj, ") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); kernelString += string(" ii = lId & ") + num2str(mem_coalesce_width - 1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str((int)log2(mem_coalesce_width)) + string(";\n"); kernelString += string(" lMemStore = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); for( i = 0; i < maxRadix; i++ ) { j = i % numIter; k = i / numIter; ind = j * Nr + k; kernelString += string(" lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].x;\n"); } kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < numOuterIter; i++ ) for( j = 0; j < numInnerIter; j++ ) kernelString += string(" a[") + num2str(i*numInnerIter + j) + string("].x = lMemStore[") + num2str(j*mem_coalesce_width + i*( groupSize / mem_coalesce_width )*(N + numWorkItemsPerXForm)) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < maxRadix; i++ ) { j = i % numIter; k = i / numIter; ind = j * Nr + k; kernelString += string(" lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].y;\n"); } kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < numOuterIter; i++ ) for( j = 0; j < numInnerIter; j++ ) kernelString += string(" a[") + num2str(i*numInnerIter + j) + string("].y = lMemStore[") + num2str(j*mem_coalesce_width + i*( groupSize / mem_coalesce_width )*(N + numWorkItemsPerXForm)) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n"); for(i = 0; i < numOuterIter; i++ ) { kernelString += string(" if( jj < s ) {\n"); for(j = 0; j < numInnerIter; j++ ) formattedStore(kernelString, i*numInnerIter + j, j*mem_coalesce_width + i*(groupSize/mem_coalesce_width)*N, dataFormat); kernelString += string(" }\n"); if(i != numOuterIter - 1) kernelString += string(" jj += ") + num2str(groupSize / mem_coalesce_width) + string(";\n"); } kernelString += string("}\n"); kernelString += string("else {\n"); for(i = 0; i < numOuterIter; i++ ) { for(j = 0; j < numInnerIter; j++ ) formattedStore(kernelString, i*numInnerIter + j, j*mem_coalesce_width + i*(groupSize/mem_coalesce_width)*N, dataFormat); } kernelString += string("}\n"); lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG; } else { kernelString += string(" lMemLoad = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); kernelString += string(" ii = lId & ") + num2str(N - 1) + string(";\n"); kernelString += string(" jj = lId >> ") + num2str((int) log2(N)) + string(";\n"); kernelString += string(" lMemStore = sMem + mad24( jj,") + num2str(N + numWorkItemsPerXForm) + string(", ii );\n"); for( i = 0; i < maxRadix; i++ ) { j = i % numIter; k = i / numIter; ind = j * Nr + k; kernelString += string(" lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].x;\n"); } kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < maxRadix; i++ ) kernelString += string(" a[") + num2str(i) + string("].x = lMemStore[") + num2str(i*( groupSize / N )*( N + numWorkItemsPerXForm )) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < maxRadix; i++ ) { j = i % numIter; k = i / numIter; ind = j * Nr + k; kernelString += string(" lMemLoad[") + num2str(i*numWorkItemsPerXForm) + string("] = a[") + num2str(ind) + string("].y;\n"); } kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); for( i = 0; i < maxRadix; i++ ) kernelString += string(" a[") + num2str(i) + string("].y = lMemStore[") + num2str(i*( groupSize / N )*( N + numWorkItemsPerXForm )) + string("];\n"); kernelString += string(" barrier( CLK_LOCAL_MEM_FENCE );\n"); kernelString += string("if((groupId == get_num_groups(0)-1) && s) {\n"); for( i = 0; i < maxRadix; i++ ) { kernelString += string(" if(jj < s ) {\n"); formattedStore(kernelString, i, i*groupSize, dataFormat); kernelString += string(" }\n"); if( i != maxRadix - 1) kernelString += string(" jj +=") + num2str(groupSize / N) + string(";\n"); } kernelString += string("}\n"); kernelString += string("else {\n"); for( i = 0; i < maxRadix; i++ ) { formattedStore(kernelString, i, i*groupSize, dataFormat); } kernelString += string("}\n"); lMemSize = (N + numWorkItemsPerXForm) * numXFormsPerWG; } return lMemSize; } static void insertfftKernel(string &kernelString, int Nr, int numIter) { int i; for(i = 0; i < numIter; i++) { kernelString += string(" fftKernel") + num2str(Nr) + string("(a+") + num2str(i*Nr) + string(", dir);\n"); } } static void insertTwiddleKernel(string &kernelString, int Nr, int numIter, int Nprev, int len, int numWorkItemsPerXForm) { int z, k; int logNPrev = (int)log2(Nprev); for(z = 0; z < numIter; z++) { if(z == 0) { if(Nprev > 1) kernelString += string(" angf = (float) (ii >> ") + num2str(logNPrev) + string(");\n"); else kernelString += string(" angf = (float) ii;\n"); } else { if(Nprev > 1) kernelString += string(" angf = (float) ((") + num2str(z*numWorkItemsPerXForm) + string(" + ii) >>") + num2str(logNPrev) + string(");\n"); else kernelString += string(" angf = (float) (") + num2str(z*numWorkItemsPerXForm) + string(" + ii);\n"); } for(k = 1; k < Nr; k++) { int ind = z*Nr + k; //float fac = (float) (2.0 * M_PI * (double) k / (double) len); kernelString += string(" ang = dir * ( 2.0f * M_PI * ") + num2str(k) + string(".0f / ") + num2str(len) + string(".0f )") + string(" * angf;\n"); kernelString += string(" w = (float2)(native_cos(ang), native_sin(ang));\n"); kernelString += string(" a[") + num2str(ind) + string("] = complexMul(a[") + num2str(ind) + string("], w);\n"); } } } static int getPadding(int numWorkItemsPerXForm, int Nprev, int numWorkItemsReq, int numXFormsPerWG, int Nr, int numBanks, int *offset, int *midPad) { if((numWorkItemsPerXForm <= Nprev) || (Nprev >= numBanks)) *offset = 0; else { int numRowsReq = ((numWorkItemsPerXForm < numBanks) ? numWorkItemsPerXForm : numBanks) / Nprev; int numColsReq = 1; if(numRowsReq > Nr) numColsReq = numRowsReq / Nr; numColsReq = Nprev * numColsReq; *offset = numColsReq; } if(numWorkItemsPerXForm >= numBanks || numXFormsPerWG == 1) *midPad = 0; else { int bankNum = ( (numWorkItemsReq + *offset) * Nr ) & (numBanks - 1); if( bankNum >= numWorkItemsPerXForm ) *midPad = 0; else *midPad = numWorkItemsPerXForm - bankNum; } int lMemSize = ( numWorkItemsReq + *offset) * Nr * numXFormsPerWG + *midPad * (numXFormsPerWG - 1); return lMemSize; } static void insertLocalStores(string &kernelString, int numIter, int Nr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, string &comp) { int z, k; for(z = 0; z < numIter; z++) { for(k = 0; k < Nr; k++) { int index = k*(numWorkItemsReq + offset) + z*numWorkItemsPerXForm; kernelString += string(" lMemStore[") + num2str(index) + string("] = a[") + num2str(z*Nr + k) + string("].") + comp + string(";\n"); } } kernelString += string(" barrier(CLK_LOCAL_MEM_FENCE);\n"); } static void insertLocalLoads(string &kernelString, int n, int Nr, int Nrn, int Nprev, int Ncurr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, string &comp) { int numWorkItemsReqN = n / Nrn; int interBlockHNum = max( Nprev / numWorkItemsPerXForm, 1 ); int interBlockHStride = numWorkItemsPerXForm; int vertWidth = max(numWorkItemsPerXForm / Nprev, 1); vertWidth = min( vertWidth, Nr); int vertNum = Nr / vertWidth; int vertStride = ( n / Nr + offset ) * vertWidth; int iter = max( numWorkItemsReqN / numWorkItemsPerXForm, 1); int intraBlockHStride = (numWorkItemsPerXForm / (Nprev*Nr)) > 1 ? (numWorkItemsPerXForm / (Nprev*Nr)) : 1; intraBlockHStride *= Nprev; int stride = numWorkItemsReq / Nrn; int i; for(i = 0; i < iter; i++) { int ii = i / (interBlockHNum * vertNum); int zz = i % (interBlockHNum * vertNum); int jj = zz % interBlockHNum; int kk = zz / interBlockHNum; int z; for(z = 0; z < Nrn; z++) { int st = kk * vertStride + jj * interBlockHStride + ii * intraBlockHStride + z * stride; kernelString += string(" a[") + num2str(i*Nrn + z) + string("].") + comp + string(" = lMemLoad[") + num2str(st) + string("];\n"); } } kernelString += string(" barrier(CLK_LOCAL_MEM_FENCE);\n"); } static void insertLocalLoadIndexArithmatic(string &kernelString, int Nprev, int Nr, int numWorkItemsReq, int numWorkItemsPerXForm, int numXFormsPerWG, int offset, int midPad) { int Ncurr = Nprev * Nr; int logNcurr = (int)log2(Ncurr); int logNprev = (int)log2(Nprev); int incr = (numWorkItemsReq + offset) * Nr + midPad; if(Ncurr < numWorkItemsPerXForm) { if(Nprev == 1) kernelString += string(" j = ii & ") + num2str(Ncurr - 1) + string(";\n"); else kernelString += string(" j = (ii & ") + num2str(Ncurr - 1) + string(") >> ") + num2str(logNprev) + string(";\n"); if(Nprev == 1) kernelString += string(" i = ii >> ") + num2str(logNcurr) + string(";\n"); else kernelString += string(" i = mad24(ii >> ") + num2str(logNcurr) + string(", ") + num2str(Nprev) + string(", ii & ") + num2str(Nprev - 1) + string(");\n"); } else { if(Nprev == 1) kernelString += string(" j = ii;\n"); else kernelString += string(" j = ii >> ") + num2str(logNprev) + string(";\n"); if(Nprev == 1) kernelString += string(" i = 0;\n"); else kernelString += string(" i = ii & ") + num2str(Nprev - 1) + string(";\n"); } if(numXFormsPerWG > 1) kernelString += string(" i = mad24(jj, ") + num2str(incr) + string(", i);\n"); kernelString += string(" lMemLoad = sMem + mad24(j, ") + num2str(numWorkItemsReq + offset) + string(", i);\n"); } static void insertLocalStoreIndexArithmatic(string &kernelString, int numWorkItemsReq, int numXFormsPerWG, int Nr, int offset, int midPad) { if(numXFormsPerWG == 1) { kernelString += string(" lMemStore = sMem + ii;\n"); } else { kernelString += string(" lMemStore = sMem + mad24(jj, ") + num2str((numWorkItemsReq + offset)*Nr + midPad) + string(", ii);\n"); } } static void createLocalMemfftKernelString(cl_fft_plan *plan) { unsigned int radixArray[10]; unsigned int numRadix; unsigned int n = plan->n.x; assert(n <= plan->max_work_item_per_workgroup * plan->max_radix && "signal lenght too big for local mem fft\n"); getRadixArray(n, radixArray, &numRadix, 0); assert(numRadix > 0 && "no radix array supplied\n"); if(n/radixArray[0] > plan->max_work_item_per_workgroup) getRadixArray(n, radixArray, &numRadix, plan->max_radix); assert(radixArray[0] <= plan->max_radix && "max radix choosen is greater than allowed\n"); assert(n/radixArray[0] <= plan->max_work_item_per_workgroup && "required work items per xform greater than maximum work items allowed per work group for local mem fft\n"); unsigned int tmpLen = 1; unsigned int i; for(i = 0; i < numRadix; i++) { assert( radixArray[i] && !( (radixArray[i] - 1) & radixArray[i] ) ); tmpLen *= radixArray[i]; } assert(tmpLen == n && "product of radices choosen doesnt match the length of signal\n"); int offset, midPad; string localString(""), kernelName(""); clFFT_DataFormat dataFormat = plan->format; string *kernelString = plan->kernel_string; cl_fft_kernel_info **kInfo = &plan->kernel_info; int kCount = 0; while(*kInfo) { kInfo = &(*kInfo)->next; kCount++; } kernelName = string("fft") + num2str(kCount); *kInfo = (cl_fft_kernel_info *) malloc(sizeof(cl_fft_kernel_info)); (*kInfo)->kernel = 0; (*kInfo)->lmem_size = 0; (*kInfo)->num_workgroups = 0; (*kInfo)->num_workitems_per_workgroup = 0; (*kInfo)->dir = cl_fft_kernel_x; (*kInfo)->in_place_possible = 1; (*kInfo)->next = NULL; (*kInfo)->kernel_name = (char *) malloc(sizeof(char)*(kernelName.size()+1)); strcpy((*kInfo)->kernel_name, kernelName.c_str()); unsigned int numWorkItemsPerXForm = n / radixArray[0]; unsigned int numWorkItemsPerWG = numWorkItemsPerXForm <= 64 ? 64 : numWorkItemsPerXForm; assert(numWorkItemsPerWG <= plan->max_work_item_per_workgroup); int numXFormsPerWG = numWorkItemsPerWG / numWorkItemsPerXForm; (*kInfo)->num_workgroups = 1; (*kInfo)->num_xforms_per_workgroup = numXFormsPerWG; (*kInfo)->num_workitems_per_workgroup = numWorkItemsPerWG; unsigned int *N = radixArray; unsigned int maxRadix = N[0]; unsigned int lMemSize = 0; insertVariables(localString, maxRadix); lMemSize = insertGlobalLoadsAndTranspose(localString, n, numWorkItemsPerXForm, numXFormsPerWG, maxRadix, plan->min_mem_coalesce_width, dataFormat); (*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size; string xcomp = string("x"); string ycomp = string("y"); unsigned int Nprev = 1; unsigned int len = n; unsigned int r; for(r = 0; r < numRadix; r++) { int numIter = N[0] / N[r]; int numWorkItemsReq = n / N[r]; int Ncurr = Nprev * N[r]; insertfftKernel(localString, N[r], numIter); if(r < (numRadix - 1)) { insertTwiddleKernel(localString, N[r], numIter, Nprev, len, numWorkItemsPerXForm); lMemSize = getPadding(numWorkItemsPerXForm, Nprev, numWorkItemsReq, numXFormsPerWG, N[r], plan->num_local_mem_banks, &offset, &midPad); (*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size; insertLocalStoreIndexArithmatic(localString, numWorkItemsReq, numXFormsPerWG, N[r], offset, midPad); insertLocalLoadIndexArithmatic(localString, Nprev, N[r], numWorkItemsReq, numWorkItemsPerXForm, numXFormsPerWG, offset, midPad); insertLocalStores(localString, numIter, N[r], numWorkItemsPerXForm, numWorkItemsReq, offset, xcomp); insertLocalLoads(localString, n, N[r], N[r+1], Nprev, Ncurr, numWorkItemsPerXForm, numWorkItemsReq, offset, xcomp); insertLocalStores(localString, numIter, N[r], numWorkItemsPerXForm, numWorkItemsReq, offset, ycomp); insertLocalLoads(localString, n, N[r], N[r+1], Nprev, Ncurr, numWorkItemsPerXForm, numWorkItemsReq, offset, ycomp); Nprev = Ncurr; len = len / N[r]; } } lMemSize = insertGlobalStoresAndTranspose(localString, n, maxRadix, N[numRadix - 1], numWorkItemsPerXForm, numXFormsPerWG, plan->min_mem_coalesce_width, dataFormat); (*kInfo)->lmem_size = (lMemSize > (*kInfo)->lmem_size) ? lMemSize : (*kInfo)->lmem_size; insertHeader(*kernelString, kernelName, dataFormat); *kernelString += string("{\n"); if((*kInfo)->lmem_size) *kernelString += string(" __local float sMem[") + num2str((*kInfo)->lmem_size) + string("];\n"); *kernelString += localString; *kernelString += string("}\n"); } // For n larger than what can be computed using local memory fft, global transposes // multiple kernel launces is needed. For these sizes, n can be decomposed using // much larger base radices i.e. say n = 262144 = 128 x 64 x 32. Thus three kernel // launches will be needed, first computing 64 x 32, length 128 ffts, second computing // 128 x 32 length 64 ffts, and finally a kernel computing 128 x 64 length 32 ffts. // Each of these base radices can futher be divided into factors so that each of these // base ffts can be computed within one kernel launch using in-register ffts and local // memory transposes i.e for the first kernel above which computes 64 x 32 ffts on length // 128, 128 can be decomposed into 128 = 16 x 8 i.e. 8 work items can compute 8 length // 16 ffts followed by transpose using local memory followed by each of these eight // work items computing 2 length 8 ffts thus computing 16 length 8 ffts in total. This // means only 8 work items are needed for computing one length 128 fft. If we choose // work group size of say 64, we can compute 64/8 = 8 length 128 ffts within one // work group. Since we need to compute 64 x 32 length 128 ffts in first kernel, this // means we need to launch 64 x 32 / 8 = 256 work groups with 64 work items in each // work group where each work group is computing 8 length 128 ffts where each length // 128 fft is computed by 8 work items. Same logic can be applied to other two kernels // in this example. Users can play with difference base radices and difference // decompositions of base radices to generates different kernels and see which gives // best performance. Following function is just fixed to use 128 as base radix void getGlobalRadixInfo(int n, int *radix, int *R1, int *R2, int *numRadices) { int baseRadix = min(n, 128); int numR = 0; int N = n; while(N > baseRadix) { N /= baseRadix; numR++; } for(int i = 0; i < numR; i++) radix[i] = baseRadix; radix[numR] = N; numR++; *numRadices = numR; for(int i = 0; i < numR; i++) { int B = radix[i]; if(B <= 8) { R1[i] = B; R2[i] = 1; continue; } int r1 = 2; int r2 = B / r1; while(r2 > r1) { r1 *=2; r2 = B / r1; } R1[i] = r1; R2[i] = r2; } } static void createGlobalFFTKernelString(cl_fft_plan *plan, int n, int BS, cl_fft_kernel_dir dir, int vertBS) { int i, j, k, t; int radixArr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int R1Arr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int R2Arr[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int radix, R1, R2; int numRadices; int maxThreadsPerBlock = plan->max_work_item_per_workgroup; int maxArrayLen = plan->max_radix; int batchSize = plan->min_mem_coalesce_width; clFFT_DataFormat dataFormat = plan->format; int vertical = (dir == cl_fft_kernel_x) ? 0 : 1; getGlobalRadixInfo(n, radixArr, R1Arr, R2Arr, &numRadices); int numPasses = numRadices; string localString(""), kernelName(""); string *kernelString = plan->kernel_string; cl_fft_kernel_info **kInfo = &plan->kernel_info; int kCount = 0; while(*kInfo) { kInfo = &(*kInfo)->next; kCount++; } int N = n; int m = (int)log2(n); int Rinit = vertical ? BS : 1; batchSize = vertical ? min(BS, batchSize) : batchSize; int passNum; for(passNum = 0; passNum < numPasses; passNum++) { localString.clear(); kernelName.clear(); radix = radixArr[passNum]; R1 = R1Arr[passNum]; R2 = R2Arr[passNum]; int strideI = Rinit; for(i = 0; i < numPasses; i++) if(i != passNum) strideI *= radixArr[i]; int strideO = Rinit; for(i = 0; i < passNum; i++) strideO *= radixArr[i]; int threadsPerXForm = R2; batchSize = R2 == 1 ? plan->max_work_item_per_workgroup : batchSize; batchSize = min(batchSize, strideI); int threadsPerBlock = batchSize * threadsPerXForm; threadsPerBlock = min(threadsPerBlock, maxThreadsPerBlock); batchSize = threadsPerBlock / threadsPerXForm; assert(R2 <= R1); assert(R1*R2 == radix); assert(R1 <= maxArrayLen); assert(threadsPerBlock <= maxThreadsPerBlock); int numIter = R1 / R2; int gInInc = threadsPerBlock / batchSize; int lgStrideO = (int)log2(strideO); int numBlocksPerXForm = strideI / batchSize; int numBlocks = numBlocksPerXForm; if(!vertical) numBlocks *= BS; else numBlocks *= vertBS; kernelName = string("fft") + num2str(kCount); *kInfo = (cl_fft_kernel_info *) malloc(sizeof(cl_fft_kernel_info)); (*kInfo)->kernel = 0; if(R2 == 1) (*kInfo)->lmem_size = 0; else { if(strideO == 1) (*kInfo)->lmem_size = (radix + 1)*batchSize; else (*kInfo)->lmem_size = threadsPerBlock*R1; } (*kInfo)->num_workgroups = numBlocks; (*kInfo)->num_xforms_per_workgroup = 1; (*kInfo)->num_workitems_per_workgroup = threadsPerBlock; (*kInfo)->dir = dir; if( (passNum == (numPasses - 1)) && (numPasses & 1) ) (*kInfo)->in_place_possible = 1; else (*kInfo)->in_place_possible = 0; (*kInfo)->next = NULL; (*kInfo)->kernel_name = (char *) malloc(sizeof(char)*(kernelName.size()+1)); strcpy((*kInfo)->kernel_name, kernelName.c_str()); insertVariables(localString, R1); if(vertical) { localString += string("xNum = groupId >> ") + num2str((int)log2(numBlocksPerXForm)) + string(";\n"); localString += string("groupId = groupId & ") + num2str(numBlocksPerXForm - 1) + string(";\n"); localString += string("indexIn = mad24(groupId, ") + num2str(batchSize) + string(", xNum << ") + num2str((int)log2(n*BS)) + string(");\n"); localString += string("tid = mul24(groupId, ") + num2str(batchSize) + string(");\n"); localString += string("i = tid >> ") + num2str(lgStrideO) + string(";\n"); localString += string("j = tid & ") + num2str(strideO - 1) + string(";\n"); int stride = radix*Rinit; for(i = 0; i < passNum; i++) stride *= radixArr[i]; localString += string("indexOut = mad24(i, ") + num2str(stride) + string(", j + ") + string("(xNum << ") + num2str((int) log2(n*BS)) + string("));\n"); localString += string("bNum = groupId;\n"); } else { int lgNumBlocksPerXForm = (int)log2(numBlocksPerXForm); localString += string("bNum = groupId & ") + num2str(numBlocksPerXForm - 1) + string(";\n"); localString += string("xNum = groupId >> ") + num2str(lgNumBlocksPerXForm) + string(";\n"); localString += string("indexIn = mul24(bNum, ") + num2str(batchSize) + string(");\n"); localString += string("tid = indexIn;\n"); localString += string("i = tid >> ") + num2str(lgStrideO) + string(";\n"); localString += string("j = tid & ") + num2str(strideO - 1) + string(";\n"); int stride = radix*Rinit; for(i = 0; i < passNum; i++) stride *= radixArr[i]; localString += string("indexOut = mad24(i, ") + num2str(stride) + string(", j);\n"); localString += string("indexIn += (xNum << ") + num2str(m) + string(");\n"); localString += string("indexOut += (xNum << ") + num2str(m) + string(");\n"); } // Load Data int lgBatchSize = (int)log2(batchSize); localString += string("tid = lId;\n"); localString += string("i = tid & ") + num2str(batchSize - 1) + string(";\n"); localString += string("j = tid >> ") + num2str(lgBatchSize) + string(";\n"); localString += string("indexIn += mad24(j, ") + num2str(strideI) + string(", i);\n"); if(dataFormat == clFFT_SplitComplexFormat) { localString += string("in_real += indexIn;\n"); localString += string("in_imag += indexIn;\n"); for(j = 0; j < R1; j++) localString += string("a[") + num2str(j) + string("].x = in_real[") + num2str(j*gInInc*strideI) + string("];\n"); for(j = 0; j < R1; j++) localString += string("a[") + num2str(j) + string("].y = in_imag[") + num2str(j*gInInc*strideI) + string("];\n"); } else { localString += string("in += indexIn;\n"); for(j = 0; j < R1; j++) localString += string("a[") + num2str(j) + string("] = in[") + num2str(j*gInInc*strideI) + string("];\n"); } localString += string("fftKernel") + num2str(R1) + string("(a, dir);\n"); if(R2 > 1) { // twiddle for(k = 1; k < R1; k++) { localString += string("ang = dir*(2.0f*M_PI*") + num2str(k) + string("/") + num2str(radix) + string(")*j;\n"); localString += string("w = (float2)(native_cos(ang), native_sin(ang));\n"); localString += string("a[") + num2str(k) + string("] = complexMul(a[") + num2str(k) + string("], w);\n"); } // shuffle numIter = R1 / R2; localString += string("indexIn = mad24(j, ") + num2str(threadsPerBlock*numIter) + string(", i);\n"); localString += string("lMemStore = sMem + tid;\n"); localString += string("lMemLoad = sMem + indexIn;\n"); for(k = 0; k < R1; k++) localString += string("lMemStore[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].x;\n"); localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); for(k = 0; k < numIter; k++) for(t = 0; t < R2; t++) localString += string("a[") + num2str(k*R2+t) + string("].x = lMemLoad[") + num2str(t*batchSize + k*threadsPerBlock) + string("];\n"); localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); for(k = 0; k < R1; k++) localString += string("lMemStore[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].y;\n"); localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); for(k = 0; k < numIter; k++) for(t = 0; t < R2; t++) localString += string("a[") + num2str(k*R2+t) + string("].y = lMemLoad[") + num2str(t*batchSize + k*threadsPerBlock) + string("];\n"); localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); for(j = 0; j < numIter; j++) localString += string("fftKernel") + num2str(R2) + string("(a + ") + num2str(j*R2) + string(", dir);\n"); } // twiddle if(passNum < (numPasses - 1)) { localString += string("l = ((bNum << ") + num2str(lgBatchSize) + string(") + i) >> ") + num2str(lgStrideO) + string(";\n"); localString += string("k = j << ") + num2str((int)log2(R1/R2)) + string(";\n"); localString += string("ang1 = dir*(2.0f*M_PI/") + num2str(N) + string(")*l;\n"); for(t = 0; t < R1; t++) { localString += string("ang = ang1*(k + ") + num2str((t%R2)*R1 + (t/R2)) + string(");\n"); localString += string("w = (float2)(native_cos(ang), native_sin(ang));\n"); localString += string("a[") + num2str(t) + string("] = complexMul(a[") + num2str(t) + string("], w);\n"); } } // Store Data if(strideO == 1) { localString += string("lMemStore = sMem + mad24(i, ") + num2str(radix + 1) + string(", j << ") + num2str((int)log2(R1/R2)) + string(");\n"); localString += string("lMemLoad = sMem + mad24(tid >> ") + num2str((int)log2(radix)) + string(", ") + num2str(radix+1) + string(", tid & ") + num2str(radix-1) + string(");\n"); for(i = 0; i < R1/R2; i++) for(j = 0; j < R2; j++) localString += string("lMemStore[ ") + num2str(i + j*R1) + string("] = a[") + num2str(i*R2+j) + string("].x;\n"); localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); if(threadsPerBlock >= radix) { for(i = 0; i < R1; i++) localString += string("a[") + num2str(i) + string("].x = lMemLoad[") + num2str(i*(radix+1)*(threadsPerBlock/radix)) + string("];\n"); } else { int innerIter = radix/threadsPerBlock; int outerIter = R1/innerIter; for(i = 0; i < outerIter; i++) for(j = 0; j < innerIter; j++) localString += string("a[") + num2str(i*innerIter+j) + string("].x = lMemLoad[") + num2str(j*threadsPerBlock + i*(radix+1)) + string("];\n"); } localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); for(i = 0; i < R1/R2; i++) for(j = 0; j < R2; j++) localString += string("lMemStore[ ") + num2str(i + j*R1) + string("] = a[") + num2str(i*R2+j) + string("].y;\n"); localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); if(threadsPerBlock >= radix) { for(i = 0; i < R1; i++) localString += string("a[") + num2str(i) + string("].y = lMemLoad[") + num2str(i*(radix+1)*(threadsPerBlock/radix)) + string("];\n"); } else { int innerIter = radix/threadsPerBlock; int outerIter = R1/innerIter; for(i = 0; i < outerIter; i++) for(j = 0; j < innerIter; j++) localString += string("a[") + num2str(i*innerIter+j) + string("].y = lMemLoad[") + num2str(j*threadsPerBlock + i*(radix+1)) + string("];\n"); } localString += string("barrier(CLK_LOCAL_MEM_FENCE);\n"); localString += string("indexOut += tid;\n"); if(dataFormat == clFFT_SplitComplexFormat) { localString += string("out_real += indexOut;\n"); localString += string("out_imag += indexOut;\n"); for(k = 0; k < R1; k++) localString += string("out_real[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].x;\n"); for(k = 0; k < R1; k++) localString += string("out_imag[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("].y;\n"); } else { localString += string("out += indexOut;\n"); for(k = 0; k < R1; k++) localString += string("out[") + num2str(k*threadsPerBlock) + string("] = a[") + num2str(k) + string("];\n"); } } else { localString += string("indexOut += mad24(j, ") + num2str(numIter*strideO) + string(", i);\n"); if(dataFormat == clFFT_SplitComplexFormat) { localString += string("out_real += indexOut;\n"); localString += string("out_imag += indexOut;\n"); for(k = 0; k < R1; k++) localString += string("out_real[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("].x;\n"); for(k = 0; k < R1; k++) localString += string("out_imag[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("].y;\n"); } else { localString += string("out += indexOut;\n"); for(k = 0; k < R1; k++) localString += string("out[") + num2str(((k%R2)*R1 + (k/R2))*strideO) + string("] = a[") + num2str(k) + string("];\n"); } } insertHeader(*kernelString, kernelName, dataFormat); *kernelString += string("{\n"); if((*kInfo)->lmem_size) *kernelString += string(" __local float sMem[") + num2str((*kInfo)->lmem_size) + string("];\n"); *kernelString += localString; *kernelString += string("}\n"); N /= radix; kInfo = &(*kInfo)->next; kCount++; } } void FFT1D(cl_fft_plan *plan, cl_fft_kernel_dir dir) { unsigned int radixArray[10]; unsigned int numRadix; switch(dir) { case cl_fft_kernel_x: if(plan->n.x > plan->max_localmem_fft_size) { createGlobalFFTKernelString(plan, plan->n.x, 1, cl_fft_kernel_x, 1); } else if(plan->n.x > 1) { getRadixArray(plan->n.x, radixArray, &numRadix, 0); if(plan->n.x / radixArray[0] <= plan->max_work_item_per_workgroup) { createLocalMemfftKernelString(plan); } else { getRadixArray(plan->n.x, radixArray, &numRadix, plan->max_radix); if(plan->n.x / radixArray[0] <= plan->max_work_item_per_workgroup) createLocalMemfftKernelString(plan); else createGlobalFFTKernelString(plan, plan->n.x, 1, cl_fft_kernel_x, 1); } } break; case cl_fft_kernel_y: if(plan->n.y > 1) createGlobalFFTKernelString(plan, plan->n.y, plan->n.x, cl_fft_kernel_y, 1); break; case cl_fft_kernel_z: if(plan->n.z > 1) createGlobalFFTKernelString(plan, plan->n.z, plan->n.x*plan->n.y, cl_fft_kernel_z, 1); default: return; } } gnss-sdr-0.0.6/src/algorithms/libs/cshort_to_float_x2.cc0000644000175000017500000000426212576764164022611 0ustar carlescarles/*! * \file cshort_to_float_x2.cc * \brief Adapts a std::complex stream into two float streams * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "cshort_to_float_x2.h" #include #include cshort_to_float_x2_sptr make_cshort_to_float_x2() { return cshort_to_float_x2_sptr(new cshort_to_float_x2()); } cshort_to_float_x2::cshort_to_float_x2() : sync_block("cshort_to_float_x2", gr::io_signature::make (1, 1, sizeof(lv_16sc_t)), // lv_8sc_t is a Volk's typedef for std::complex gr::io_signature::make (2, 2, sizeof(float))) { const int alignment_multiple = volk_get_alignment() / sizeof(lv_16sc_t); set_alignment(std::max(1, alignment_multiple)); } int cshort_to_float_x2::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const lv_16sc_t *in = (const lv_16sc_t *) input_items[0]; float *out0 = (float*) output_items[0]; float *out1 = (float*) output_items[1]; const float scalar = 1; volk_16ic_s32f_deinterleave_32f_x2(out0, out1, in, scalar, noutput_items); return noutput_items; } gnss-sdr-0.0.6/src/algorithms/libs/galileo_e5_signal_processing.h0000644000175000017500000000434012576764164024444 0ustar carlescarles/*! * \file galileo_e5_signal_processing.cc * \brief This library implements various functions for Galileo E5 signals such * as replica code generation * \author Marc Sales, 2014. marcsales92(at)gmail.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_ #define GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_ #include #include #include #include "Galileo_E5a.h" #include "gnss_signal_processing.h" /*! * \brief Generates Galileo E5a code at 1 sample/chip * bool _pilot generates E5aQ code if true and E5aI (data signal) if false. */ void galileo_e5_a_code_gen_complex_primary(std::complex* _dest, signed int _prn, char _Signal[3]); void galileo_e5_a_code_gen_tiered(std::complex* _dest,std::complex* _primary ,unsigned int _prn, char _Signal[3]); /*! * \brief Generates Galileo E5a complex code, shifted to the desired chip and sampled at a frequency fs * bool _pilot generates E5aQ code if true and E5aI (data signal) if false. */ void galileo_e5_a_code_gen_complex_sampled(std::complex* _dest, char _Signal[3], unsigned int _prn, signed int _fs, unsigned int _chip_shift); #endif /* GNSS_SDR_GALILEO_E5_SIGNAL_PROCESSING_H_ */ gnss-sdr-0.0.6/src/algorithms/libs/pass_through.h0000644000175000017500000000502612576764164021356 0ustar carlescarles/*! * \file pass_through.h * \brief Interface of a block that just puts its input in its * output. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PASS_THROUGH_H_ #define GNSS_SDR_PASS_THROUGH_H_ #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class implements a block that connects input and output (does nothing) */ class Pass_Through : public GNSSBlockInterface { public: Pass_Through(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream); virtual ~Pass_Through(); std::string role() { return role_; } //! returns "Pass_Through" std::string implementation() { return "Pass_Through"; } std::string item_type() { return item_type_; } size_t vector_size() { return vector_size_; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string item_type_; size_t vector_size_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; //gr_kludge_copy_sptr kludge_copy_; gr::blocks::copy::sptr kludge_copy_; size_t item_size_; }; #endif /*GNSS_SDR_PASS_THROUGH_H_*/ gnss-sdr-0.0.6/src/algorithms/libs/nco_lib.h0000644000175000017500000000674712576764164020270 0ustar carlescarles/*! * \file nco_lib.h * \brief A set of Numeric Controlled Oscillator (NCO) functions to generate the carrier wipeoff signal, * regardless of system used * * \author Javier Arribas 2012, jarribas(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_NCO_LIB_CC_H_ #define GNSS_SDR_NCO_LIB_CC_H_ #include #include //#include //#include /*! * \brief Implements a complex conjugate exponential vector in std::complex *d_carr_sign * containing int n_samples, with the starting phase float start_phase_rad and the pase step between vector elements * float phase_step_rad. This function uses a SSE CORDIC implementation. * */ void sse_nco(std::complex *dest, int n_samples,float start_phase_rad, float phase_step_rad); /*! * \brief Implements a complex conjugate exponential vector in std::complex *d_carr_sign * containing int n_samples, with the starting phase float start_phase_rad and the pase step between vector elements * float phase_step_rad. This function uses the GNU Radio fixed point CORDIC implementation. * */ void fxp_nco(std::complex *dest, int n_samples,float start_phase_rad, float phase_step_rad); /*! * \brief Implements a complex conjugate exponential vector in std::complex *d_carr_sign * containing int n_samples, with the starting phase float start_phase_rad and the pase step between vector elements * float phase_step_rad. This function uses the stdlib sin() and cos() implementation. * */ void std_nco(std::complex *dest, int n_samples,float start_phase_rad, float phase_step_rad); /*! * \brief Implements a complex conjugate exponential vector in std::complex *d_carr_sign * containing int n_samples, with the starting phase float start_phase_rad and the pase step between vector elements * float phase_step_rad. This function uses the GNU Radio fixed point CORDIC implementation. * */ void fxp_nco_cpyref(std::complex *dest, int n_samples,float start_phase_rad, float phase_step_rad); /*! * \brief Implements a complex conjugate exponential vector in two separated float arrays (In-phase and Quadrature) * containing int n_samples, with the starting phase float start_phase_rad and the pase step between vector elements * float phase_step_rad. This function uses the GNU Radio fixed point CORDIC implementation. * */ void fxp_nco_IQ_split(float* I, float* Q, int n_samples,float start_phase_rad, float phase_step_rad); #endif //NCO_LIB_CC_H gnss-sdr-0.0.6/src/algorithms/libs/gnss_signal_processing.h0000644000175000017500000000437112576764164023415 0ustar carlescarles/*! * \file gnss_signal_processing.h * \brief This library gathers a few functions used by the algorithms of gnss-sdr, * regardless of system used * * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_SIGNAL_PROCESSING_H_ #define GNSS_SDR_GNSS_SIGNAL_PROCESSING_H_ #include #include #include "GPS_L1_CA.h" /*! * \brief This function generates a complex exponential in _dest. * */ void complex_exp_gen(std::complex* _dest, double _f, double _fs, unsigned int _samps); /*! * \brief This function generates a conjugate complex exponential in _dest. * */ void complex_exp_gen_conj(std::complex* _dest, double _f, double _fs, unsigned int _samps); /*! * \brief This function makes a conversion from hex (the input is a char) * to binary (the output are 4 ints with +1 or -1 values). * */ void hex_to_binary_converter(int * _dest, char _from); /*! * \brief This function resamples a sequence of complex values. * */ void resampler(std::complex* _from, std::complex* _dest, float _fs_in, float _fs_out, unsigned int _length_in, unsigned int _length_out); #endif /* GNSS_SDR_GNSS_SIGNAL_PROCESSING_H_ */ gnss-sdr-0.0.6/src/algorithms/libs/short_x2_to_cshort.cc0000644000175000017500000000465312576764164022647 0ustar carlescarles/*! * \file short_x2_to_cshort.cc * \brief Adapts two short streams into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "short_x2_to_cshort.h" #include #include short_x2_to_cshort_sptr make_short_x2_to_cshort() { return short_x2_to_cshort_sptr(new short_x2_to_cshort()); } short_x2_to_cshort::short_x2_to_cshort() : sync_block("short_x2_to_cshort", gr::io_signature::make (2, 2, sizeof(short)), gr::io_signature::make (1, 1, sizeof(lv_16sc_t))) // lv_8sc_t is a Volk's typedef for std::complex { const int alignment_multiple = volk_get_alignment() / sizeof(lv_16sc_t); set_alignment(std::max(1, alignment_multiple)); } int short_x2_to_cshort::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const short *in0 = (const short *) input_items[0]; const short *in1 = (const short *) input_items[1]; lv_16sc_t *out = (lv_16sc_t *) output_items[0]; // This could be put into a volk kernel short real_part; short imag_part; for(int number = 0; number < noutput_items; number++) { // lv_cmake(r, i) defined at volk/volk_complex.h real_part = *in0++; imag_part = *in1++; *out++ = lv_cmake(real_part, imag_part); } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/libs/gps_l2c_signal.h0000644000175000017500000000330212576764164021531 0ustar carlescarles/*! * \file gps_l2c_signal.h * \brief This class implements signal generators for the GPS L2C signals * \author Javier Arribas, 2015. jarribas(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_GPS_L2C_SIGNAL_H_ #define GNSS_GPS_L2C_SIGNAL_H_ #include #include #include "GPS_L2C.h" //!Generates complex GPS L2C M code for the desired SV ID void gps_l2c_m_code_gen_complex(std::complex* _dest, unsigned int _prn); //! Generates complex GPS L2C M code for the desired SV ID, and sampled to specific sampling frequency void gps_l2c_m_code_gen_complex_sampled(std::complex* _dest, unsigned int _prn, signed int _fs); #endif /* GNSS_GPS_L2C_SIGNAL_H_ */ gnss-sdr-0.0.6/src/algorithms/libs/byte_x2_to_complex_byte.h0000644000175000017500000000362612576764164023504 0ustar carlescarles/*! * \file byte_x2_to_complex_byte.h * \brief Adapts two signed char streams into a std::complex stream * \author Carles Fernandez Prades, cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_BYTE_X2_TO_COMPLEX_BYTE_H_ #define GNSS_SDR_BYTE_X2_TO_COMPLEX_BYTE_H_ #include #include class byte_x2_to_complex_byte; typedef boost::shared_ptr byte_x2_to_complex_byte_sptr; byte_x2_to_complex_byte_sptr make_byte_x2_to_complex_byte(); /*! * \brief This class adapts two signed char streams * into a std::complex stream */ class byte_x2_to_complex_byte : public gr::sync_block { private: friend byte_x2_to_complex_byte_sptr make_byte_x2_to_complex_byte(); public: byte_x2_to_complex_byte(); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/libs/gnss_signal_processing.cc0000644000175000017500000001100012576764164023536 0ustar carlescarles/*! * \file gnss_signal_processing.cc * \brief This library gathers a few functions used by the algorithms of gnss-sdr, * regardless of system used * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_signal_processing.h" #include auto auxCeil2 = [](float x){ return static_cast(static_cast((x)+1)); }; void complex_exp_gen(std::complex* _dest, double _f, double _fs, unsigned int _samps) { gr::fxpt_nco d_nco; d_nco.set_freq((GPS_TWO_PI * _f) / _fs); d_nco.sincos(_dest, _samps, 1); } void complex_exp_gen_conj(std::complex* _dest, double _f, double _fs, unsigned int _samps) { gr::fxpt_nco d_nco; d_nco.set_freq(-(GPS_TWO_PI * _f) / _fs); d_nco.sincos(_dest, _samps, 1); } void hex_to_binary_converter(int * _dest, char _from) { switch(_from) { case '0': *(_dest) = 1; *(_dest+1) = 1; *(_dest+2) = 1; *(_dest+3) = 1; break; case '1': *(_dest) = 1; *(_dest+1) = 1; *(_dest+2) = 1; *(_dest+3) = -1; break; case '2': *(_dest) = 1; *(_dest+1) = 1; *(_dest+2) = -1; *(_dest+3) = 1; break; case '3': *(_dest) = 1; *(_dest+1) = 1; *(_dest+2) = -1; *(_dest+3) = -1; break; case '4': *(_dest) = 1; *(_dest+1) = -1; *(_dest+2) = 1; *(_dest+3) = 1; break; case '5': *(_dest) = 1; *(_dest+1) = -1; *(_dest+2) = 1; *(_dest+3) = -1; break; case '6': *(_dest) = 1; *(_dest+1) = -1; *(_dest+2) = -1; *(_dest+3) = 1; break; case '7': *(_dest) = 1; *(_dest+1) = -1; *(_dest+2) = -1; *(_dest+3) = -1; break; case '8': *(_dest) = -1; *(_dest+1) = 1; *(_dest+2) = 1; *(_dest+3) = 1; break; case '9': *(_dest) = -1; *(_dest+1) = 1; *(_dest+2) = 1; *(_dest+3) = -1; break; case 'A': *(_dest) = -1; *(_dest+1) = 1; *(_dest+2) = -1; *(_dest+3) = 1; break; case 'B': *(_dest) = -1; *(_dest+1) = 1; *(_dest+2) = -1; *(_dest+3) = -1; break; case 'C': *(_dest) = -1; *(_dest+1) = -1; *(_dest+2) = 1; *(_dest+3) = 1; break; case 'D': *(_dest) = -1; *(_dest+1) = -1; *(_dest+2) = 1; *(_dest+3) = -1; break; case 'E': *(_dest) = -1; *(_dest+1) = -1; *(_dest+2) = -1; *(_dest+3) = 1; break; case 'F': *(_dest) = -1; *(_dest+1) = -1; *(_dest+2) = -1; *(_dest+3) = -1; break; } } void resampler(std::complex* _from, std::complex* _dest, float _fs_in, float _fs_out, unsigned int _length_in, unsigned int _length_out) { unsigned int _codeValueIndex; float aux; //--- Find time constants -------------------------------------------------- const float _t_in = 1 / _fs_in; // Incoming sampling period in sec const float _t_out = 1 / _fs_out; // Out sampling period in sec for (unsigned int i = 0; i < _length_out - 1; i++) { //=== Digitizing ======================================================= //--- compute index array to read sampled values ------------------------- //_codeValueIndex = ceil((_t_out * ((float)i + 1)) / _t_in) - 1; aux = (_t_out * (i + 1)) / _t_in; _codeValueIndex = auxCeil2(aux) - 1; //if repeat the chip -> upsample by nearest neighborhood interpolation _dest[i] = _from[_codeValueIndex]; } //--- Correct the last index (due to number rounding issues) ----------- _dest[_length_out - 1] = _from[_length_in - 1]; } gnss-sdr-0.0.6/src/algorithms/libs/fft_internal.h0000644000175000017500000001567412576764164021335 0ustar carlescarles // // File: fft_internal.h // // Version: <1.0> // // Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") // in consideration of your agreement to the following terms, and your use, // installation, modification or redistribution of this Apple software // constitutes acceptance of these terms. If you do not agree with these // terms, please do not use, install, modify or redistribute this Apple // software. // // In consideration of your agreement to abide by the following terms, and // subject to these terms, Apple grants you a personal, non - exclusive // license, under Apple's copyrights in this original Apple software ( the // "Apple Software" ), to use, reproduce, modify and redistribute the Apple // Software, with or without modifications, in source and / or binary forms; // provided that if you redistribute the Apple Software in its entirety and // without modifications, you must retain this notice and the following text // and disclaimers in all such redistributions of the Apple Software. Neither // the name, trademarks, service marks or logos of Apple Inc. may be used to // endorse or promote products derived from the Apple Software without specific // prior written permission from Apple. Except as expressly stated in this // notice, no other rights or licenses, express or implied, are granted by // Apple herein, including but not limited to any patent rights that may be // infringed by your derivative works or by other works in which the Apple // Software may be incorporated. // // The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO // WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED // WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION // ALONE OR IN COMBINATION WITH YOUR PRODUCTS. // // IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR // CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION // AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER // UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR // OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright ( C ) 2008 Apple Inc. All Rights Reserved. // //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __CLFFT_INTERNAL_H #define __CLFFT_INTERNAL_H #include "clFFT.h" #include #include #include using namespace std; typedef enum kernel_dir_t { cl_fft_kernel_x, cl_fft_kernel_y, cl_fft_kernel_z }cl_fft_kernel_dir; typedef struct kernel_info_t { cl_kernel kernel; char *kernel_name; unsigned lmem_size; unsigned num_workgroups; unsigned num_xforms_per_workgroup; unsigned num_workitems_per_workgroup; cl_fft_kernel_dir dir; int in_place_possible; kernel_info_t *next; }cl_fft_kernel_info; typedef struct { // context in which fft resources are created and kernels are executed cl_context context; // size of signal clFFT_Dim3 n; // dimension of transform ... must be either 1D, 2D or 3D clFFT_Dimension dim; // data format ... must be either interleaved or plannar clFFT_DataFormat format; // string containing kernel source. Generated at runtime based on // n, dim, format and other parameters string *kernel_string; // CL program containing source and kernel this particular // n, dim, data format cl_program program; // linked list of kernels which needs to be executed for this fft cl_fft_kernel_info *kernel_info; // number of kernels int num_kernels; // twist kernel for virtualizing fft of very large sizes that do not // fit in GPU global memory cl_kernel twist_kernel; // flag indicating if temporary intermediate buffer is needed or not. // this depends on fft kernels being executed and if transform is // in-place or out-of-place. e.g. Local memory fft (say 1D 1024 ... // one that does not require global transpose do not need temporary buffer) // 2D 1024x1024 out-of-place fft however do require intermediate buffer. // If temp buffer is needed, its allocation is lazy i.e. its not allocated // until its needed cl_int temp_buffer_needed; // Batch size is runtime parameter and size of temporary buffer (if needed) // depends on batch size. Allocation of temporary buffer is lazy i.e. its // only created when needed. Once its created at first call of clFFT_Executexxx // it is not allocated next time if next time clFFT_Executexxx is called with // batch size different than the first call. last_batch_size caches the last // batch size with which this plan is used so that we dont keep allocating/deallocating // temp buffer if same batch size is used again and again. unsigned last_batch_size; // temporary buffer for interleaved plan cl_mem tempmemobj; // temporary buffer for planner plan. Only one of tempmemobj or // (tempmemobj_real, tempmemobj_imag) pair is valid (allocated) depending // data format of plan (plannar or interleaved) cl_mem tempmemobj_real, tempmemobj_imag; // Maximum size of signal for which local memory transposed based // fft is sufficient i.e. no global mem transpose (communication) // is needed unsigned max_localmem_fft_size; // Maximum work items per work group allowed. This, along with max_radix below controls // maximum local memory being used by fft kernels of this plan. Set to 256 by default unsigned max_work_item_per_workgroup; // Maximum base radix for local memory fft ... this controls the maximum register // space used by work items. Currently defaults to 16 unsigned max_radix; // Device depended parameter that tells how many work-items need to be read consecutive // values to make sure global memory access by work-items of a work-group result in // coalesced memory access to utilize full bandwidth e.g. on NVidia tesla, this is 16 unsigned min_mem_coalesce_width; // Number of local memory banks. This is used to geneate kernel with local memory // transposes with appropriate padding to avoid bank conflicts to local memory // e.g. on NVidia it is 16. unsigned num_local_mem_banks; }cl_fft_plan; void FFT1D(cl_fft_plan *plan, cl_fft_kernel_dir dir); #endif gnss-sdr-0.0.6/src/algorithms/acquisition/0000755000175000017500000000000012576764164020073 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/0000755000175000017500000000000012576764164023240 5ustar carlescarles././@LongLink0000644000000000000000000000015300000000000011602 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.ccgnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf0000644000175000017500000011616712576764164033661 0ustar carlescarles/*! * \file galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E5a data and pilot Signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5a_noncoherent_iq_acquisition_caf_cc.h" #include #include #include #include #include #include "gnss_signal_processing.h" #include "control_message_factory.h" using google::LogMessage; galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename, bool both_signal_components_, int CAF_window_hz_, int Zero_padding_) { return galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr( new galileo_e5a_noncoherentIQ_acquisition_caf_cc(sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, bit_transition_flag, queue, dump, dump_filename, both_signal_components_, CAF_window_hz_, Zero_padding_)); } galileo_e5a_noncoherentIQ_acquisition_caf_cc::galileo_e5a_noncoherentIQ_acquisition_caf_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename, bool both_signal_components_, int CAF_window_hz_, int Zero_padding_) : gr::block("galileo_e5a_noncoherentIQ_acquisition_caf_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(0, 0, sizeof(gr_complex))) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; if (Zero_padding_ > 0) { d_sampled_ms = 1; } else { d_sampled_ms = sampled_ms; } d_fft_size = sampled_ms * d_samples_per_ms; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_bit_transition_flag = bit_transition_flag; d_buffer_count = 0; d_both_signal_components = both_signal_components_; d_CAF_window_hz = CAF_window_hz_; d_inbuffer = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_fft_code_I_A = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitudeIA = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); if (d_both_signal_components == true) { d_fft_code_Q_A = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitudeQA = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); } else { d_fft_code_Q_A = 0; d_magnitudeQA = 0; } // IF COHERENT INTEGRATION TIME > 1 if (d_sampled_ms > 1) { d_fft_code_I_B = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitudeIB = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); if (d_both_signal_components == true) { d_fft_code_Q_B = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitudeQB = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); } else { d_fft_code_Q_B = 0; d_magnitudeQB = 0; } } else { d_fft_code_I_B = 0; d_magnitudeIB = 0; d_fft_code_Q_B = 0; d_magnitudeQB = 0; } // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_doppler_step = 250; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_CAF_vector = 0; d_CAF_vector_I = 0; d_CAF_vector_Q = 0; d_channel = 0; d_gr_stream_buffer = 0; } galileo_e5a_noncoherentIQ_acquisition_caf_cc::~galileo_e5a_noncoherentIQ_acquisition_caf_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } volk_free(d_inbuffer); volk_free(d_fft_code_I_A); volk_free(d_magnitudeIA); if (d_both_signal_components == true) { volk_free(d_fft_code_Q_A); volk_free(d_magnitudeQA); } // IF INTEGRATION TIME > 1 if (d_sampled_ms > 1) { volk_free(d_fft_code_I_B); volk_free(d_magnitudeIB); if (d_both_signal_components == true) { volk_free(d_fft_code_Q_B); volk_free(d_magnitudeQB); } } if (d_CAF_window_hz > 0) { volk_free(d_CAF_vector); volk_free(d_CAF_vector_I); if (d_both_signal_components == true) { volk_free(d_CAF_vector_Q); } } delete d_fft_if; delete d_ifft; if (d_dump) { d_dump_file.close(); } } void galileo_e5a_noncoherentIQ_acquisition_caf_cc::set_local_code(std::complex * codeI, std::complex * codeQ ) { // DATA SIGNAL // Three replicas of data primary code. CODE A: (1,1,1) memcpy(d_fft_if->get_inbuf(), codeI, sizeof(gr_complex)*d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_I_A,d_fft_if->get_outbuf(),d_fft_size); // SAME FOR PILOT SIGNAL if (d_both_signal_components == true) { // Three replicas of pilot primary code. CODE A: (1,1,1) memcpy(d_fft_if->get_inbuf(), codeQ, sizeof(gr_complex)*d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_Q_A,d_fft_if->get_outbuf(),d_fft_size); } // IF INTEGRATION TIME > 1 code, we need to evaluate the other possible combination // Note: max integration time allowed = 3ms (dealt in adapter) if (d_sampled_ms > 1) { // DATA CODE B: First replica is inverted (0,1,1) volk_32fc_s32fc_multiply_32fc(&(d_fft_if->get_inbuf())[0], &codeI[0], gr_complex(-1,0), d_samples_per_code); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_I_B,d_fft_if->get_outbuf(),d_fft_size); if (d_both_signal_components == true) { // PILOT CODE B: First replica is inverted (0,1,1) volk_32fc_s32fc_multiply_32fc(&(d_fft_if->get_inbuf())[0], &codeQ[0], gr_complex(-1,0), d_samples_per_code); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_Q_B,d_fft_if->get_outbuf(),d_fft_size); } } } void galileo_e5a_noncoherentIQ_acquisition_caf_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); doppler <= static_cast(d_doppler_max); doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); } /* CAF Filtering to resolve doppler ambiguity. Phase and quadrature must be processed * separately before non-coherent integration */ // if (d_CAF_filter) if (d_CAF_window_hz > 0) { d_CAF_vector = static_cast(volk_malloc(d_num_doppler_bins * sizeof(float), volk_get_alignment())); d_CAF_vector_I = static_cast(volk_malloc(d_num_doppler_bins * sizeof(float), volk_get_alignment())); if (d_both_signal_components == true) { d_CAF_vector_Q = static_cast(volk_malloc(d_num_doppler_bins * sizeof(float), volk_get_alignment())); } } } void galileo_e5a_noncoherentIQ_acquisition_caf_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int galileo_e5a_noncoherentIQ_acquisition_caf_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { /* * By J.Arribas, L.Esteve, M.Molina and M.Sales * Acquisition strategy (Kay Borre book + CFAR threshold): * 1. Compute the input signal power estimation * 2. Doppler serial search loop * 3. Perform the FFT-based circular convolution (parallel time search) * 4. OPTIONAL: CAF filter to avoid doppler ambiguity * 5. Record the maximum peak and the associated synchronization parameters * 6. Compute the test statistics and compare to the threshold * 7. Declare positive or negative acquisition using a message queue */ int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL /* States: 0 Stop Channel * 1 Load the buffer until it reaches fft_size * 2 Acquisition algorithm * 3 Positive acquisition * 4 Negative acquisition */ switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_state = 1; } d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; } case 1: { const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer unsigned int buff_increment; if (ninput_items[0] + d_buffer_count <= d_fft_size) { buff_increment = ninput_items[0]; } else { buff_increment = (d_fft_size - d_buffer_count); } memcpy(&d_inbuffer[d_buffer_count], in, sizeof(gr_complex) * buff_increment); // If buffer will be full in next iteration if (d_buffer_count >= d_fft_size - d_gr_stream_buffer) { d_state = 2; } d_buffer_count += buff_increment; d_sample_counter += buff_increment; // sample counter consume_each(buff_increment); break; } case 2: { // Fill last part of the buffer and reset counter const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer if (d_buffer_count < d_fft_size) { memcpy(&d_inbuffer[d_buffer_count], in, sizeof(gr_complex)*(d_fft_size-d_buffer_count)); } d_sample_counter += d_fft_size-d_buffer_count; // sample counter // initialize acquisition algorithm int doppler; unsigned int indext = 0; unsigned int indext_IA = 0; unsigned int indext_IB = 0; unsigned int indext_QA = 0; unsigned int indext_QB = 0; float magt = 0.0; float magt_IA = 0.0; float magt_IB = 0.0; float magt_QA = 0.0; float magt_QB = 0.0; float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); d_input_power = 0.0; d_mag = 0.0; d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitudeIA, d_inbuffer, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitudeIA, d_fft_size); d_input_power /= static_cast(d_fft_size); // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), d_inbuffer, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // CODE IA // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_I_A, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Search maximum volk_32fc_magnitude_squared_32f(d_magnitudeIA, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext_IA, d_magnitudeIA, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt_IA = d_magnitudeIA[indext_IA] / (fft_normalization_factor * fft_normalization_factor); if (d_both_signal_components == true) { // REPEAT FOR ALL CODES. CODE_QA volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_Q_A, d_fft_size); d_ifft->execute(); volk_32fc_magnitude_squared_32f(d_magnitudeQA, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext_QA, d_magnitudeQA, d_fft_size); magt_QA = d_magnitudeQA[indext_QA] / (fft_normalization_factor * fft_normalization_factor); } if (d_sampled_ms > 1) // If Integration time > 1 code { // REPEAT FOR ALL CODES. CODE_IB volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_I_B, d_fft_size); d_ifft->execute(); volk_32fc_magnitude_squared_32f(d_magnitudeIB, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext_IB, d_magnitudeIB, d_fft_size); magt_IB = d_magnitudeIB[indext_IB] / (fft_normalization_factor * fft_normalization_factor); if (d_both_signal_components == true) { // REPEAT FOR ALL CODES. CODE_QB volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_Q_B, d_fft_size); d_ifft->execute(); volk_32fc_magnitude_squared_32f(d_magnitudeQB, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext_QB, d_magnitudeQB, d_fft_size); magt_QB = d_magnitudeIB[indext_QB] / (fft_normalization_factor * fft_normalization_factor); } } // Integrate noncoherently the two best combinations (I² + Q²) // and store the result in the I channel. // If CAF filter to resolve doppler ambiguity is needed, // peak is stored before non-coherent integration. if (d_sampled_ms > 1) // T_integration > 1 code { if (magt_IA >= magt_IB) { // if (d_CAF_filter) {d_CAF_vector_I[doppler_index] = magt_IA;} if (d_CAF_window_hz > 0) {d_CAF_vector_I[doppler_index] = d_magnitudeIA[indext_IA];} if (d_both_signal_components) { // Integrate non-coherently I+Q if (magt_QA >= magt_QB) { // if (d_CAF_filter) {d_CAF_vector_Q[doppler_index] = magt_QA;} if (d_CAF_window_hz > 0) {d_CAF_vector_Q[doppler_index] = d_magnitudeQA[indext_QA];} for (unsigned int i=0; i 0) {d_CAF_vector_Q[doppler_index] = d_magnitudeQB[indext_QB];} for (unsigned int i=0; i 0) {d_CAF_vector_I[doppler_index] = d_magnitudeIB[indext_IB];} if (d_both_signal_components) { // Integrate non-coherently I+Q if (magt_QA >= magt_QB) { //if (d_CAF_filter) {d_CAF_vector_Q[doppler_index] = magt_QA;} if (d_CAF_window_hz > 0) {d_CAF_vector_Q[doppler_index] = d_magnitudeQA[indext_QA];} for (unsigned int i=0; i 0) {d_CAF_vector_Q[doppler_index] = d_magnitudeQB[indext_QB];} for (unsigned int i=0; i 0) {d_CAF_vector_I[doppler_index] = d_magnitudeIA[indext_IA];} if (d_both_signal_components) { // if (d_CAF_filter) {d_CAF_vector_Q[doppler_index] = magt_QA;} if (d_CAF_window_hz > 0) {d_CAF_vector_Q[doppler_index] = d_magnitudeQA[indext_QA];} // NON-Coherent integration of only 1 code for (unsigned int i=0; iAcq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // 5- Compute the test statistics and compare to the threshold d_test_statistics = d_mag / d_input_power; } } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = sizeof(float) * (d_fft_size); // noncomplex file write filename.str(""); filename << "../data/test_statistics_E5a_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); if (d_sampled_ms > 1) // If integration time > 1 code { if (magt_IA >= magt_IB) { d_dump_file.write((char*)d_magnitudeIA, n); } else { d_dump_file.write((char*)d_magnitudeIB, n); } } else { d_dump_file.write((char*)d_magnitudeIA, n); } d_dump_file.close(); } } // std::cout << "d_mag " << d_mag << ".d_sample_counter " << d_sample_counter << ". acq delay " << d_gnss_synchro->Acq_delay_samples<< " indext "<< indext << std::endl; // 6 OPTIONAL: CAF filter to avoid Doppler ambiguity in bit transition. if (d_CAF_window_hz > 0) { int CAF_bins_half; float* accum = static_cast(volk_malloc(sizeof(float), volk_get_alignment())); CAF_bins_half = d_CAF_window_hz / (2 * d_doppler_step); float weighting_factor; weighting_factor = 0.5 / static_cast(CAF_bins_half); // weighting_factor = 0; // std::cout << "weighting_factor " << weighting_factor << std::endl; // Initialize first iterations for (int doppler_index=0; doppler_index < CAF_bins_half; doppler_index++) { d_CAF_vector[doppler_index] = 0; // volk_32f_accumulator_s32f_a(&d_CAF_vector[doppler_index], d_CAF_vector_I, CAF_bins_half+doppler_index+1); for (int i = 0; i < CAF_bins_half + doppler_index + 1; i++) { d_CAF_vector[doppler_index] += d_CAF_vector_I[i] * (1 - weighting_factor * static_cast((doppler_index - i))); } // d_CAF_vector[doppler_index] /= CAF_bins_half+doppler_index+1; d_CAF_vector[doppler_index] /= 1 + CAF_bins_half+doppler_index - weighting_factor * CAF_bins_half * (CAF_bins_half + 1) / 2 - weighting_factor*doppler_index*(doppler_index+1)/2; // triangles = [n*(n+1)/2] if (d_both_signal_components) { accum[0] = 0; // volk_32f_accumulator_s32f_a(&accum[0], d_CAF_vector_Q, CAF_bins_half+doppler_index+1); for (int i = 0; i < CAF_bins_half + doppler_index + 1; i++) { accum[0] += d_CAF_vector_Q[i] * (1 - weighting_factor * static_cast(abs(doppler_index - i))); } // accum[0] /= CAF_bins_half+doppler_index+1; accum[0] /= 1 + CAF_bins_half + doppler_index - weighting_factor * CAF_bins_half * (CAF_bins_half + 1) / 2 - weighting_factor * doppler_index * (doppler_index + 1) / 2; // triangles = [n*(n+1)/2] d_CAF_vector[doppler_index] += accum[0]; } } // Body loop for (unsigned int doppler_index = CAF_bins_half;doppler_index((doppler_index - i))); } // d_CAF_vector[doppler_index] /= 2*CAF_bins_half+1; d_CAF_vector[doppler_index] /= 1 + 2 * CAF_bins_half - 2 * weighting_factor * CAF_bins_half * (CAF_bins_half + 1) / 2; if (d_both_signal_components) { accum[0] = 0; // volk_32f_accumulator_s32f_a(&accum[0], &d_CAF_vector_Q[doppler_index-CAF_bins_half], 2*CAF_bins_half); for (int i = doppler_index-CAF_bins_half; i < doppler_index + CAF_bins_half + 1; i++) { accum[0] += d_CAF_vector_Q[i] * (1 - weighting_factor * static_cast((doppler_index - i))); } // accum[0] /= 2*CAF_bins_half+1; accum[0] /= 1 + 2 * CAF_bins_half - 2 * weighting_factor * CAF_bins_half * (CAF_bins_half + 1) / 2; d_CAF_vector[doppler_index] += accum[0]; } } // Final iterations for (int doppler_index = d_num_doppler_bins - CAF_bins_half; doppler_index < d_num_doppler_bins; doppler_index++) { d_CAF_vector[doppler_index] = 0; // volk_32f_accumulator_s32f_a(&d_CAF_vector[doppler_index], &d_CAF_vector_I[doppler_index-CAF_bins_half], CAF_bins_half + (d_num_doppler_bins-doppler_index)); for (int i = doppler_index - CAF_bins_half; i < d_num_doppler_bins; i++) { d_CAF_vector[doppler_index] += d_CAF_vector_I[i] * (1 - weighting_factor * (abs(doppler_index - i))); } // d_CAF_vector[doppler_index] /= CAF_bins_half+(d_num_doppler_bins-doppler_index); d_CAF_vector[doppler_index] /= 1 + CAF_bins_half + (d_num_doppler_bins - doppler_index - 1) - weighting_factor * CAF_bins_half * (CAF_bins_half + 1) / 2 - weighting_factor * (d_num_doppler_bins - doppler_index - 1) * (d_num_doppler_bins - doppler_index) / 2; if (d_both_signal_components) { accum[0] = 0; // volk_32f_accumulator_s32f_a(&accum[0], &d_CAF_vector_Q[doppler_index-CAF_bins_half], CAF_bins_half + (d_num_doppler_bins-doppler_index)); for (int i = doppler_index-CAF_bins_half; i < d_num_doppler_bins; i++) { accum[0] += d_CAF_vector_Q[i] * (1 - weighting_factor * (abs(doppler_index - i))); } // accum[0] /= CAF_bins_half+(d_num_doppler_bins-doppler_index); accum[0] /= 1 + CAF_bins_half + (d_num_doppler_bins - doppler_index - 1) - weighting_factor * CAF_bins_half * (CAF_bins_half + 1) / 2 - weighting_factor * (d_num_doppler_bins - doppler_index - 1) * (d_num_doppler_bins - doppler_index) / 2; d_CAF_vector[doppler_index] += accum[0]; } } // Recompute the maximum doppler peak volk_32f_index_max_16u(&indext, d_CAF_vector, d_num_doppler_bins); doppler = -static_cast(d_doppler_max) + d_doppler_step * indext; d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); // Dump if required, appended at the end of the file if (d_dump) { std::stringstream filename; std::streamsize n = sizeof(float) * (d_num_doppler_bins); // noncomplex file write filename.str(""); filename << "../data/test_statistics_E5a_sat_" << d_gnss_synchro->PRN << "_CAF.dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_CAF_vector, n); d_dump_file.close(); } volk_free(accum); } if (d_well_count == d_max_dwells) { if (d_test_statistics > d_threshold) { d_state = 3; // Positive acquisition } else { d_state = 4; // Negative acquisition } } else { d_state = 1; } consume_each(d_fft_size - d_buffer_count); d_buffer_count = 0; break; } case 3: { // 7.1- Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; } case 4: { // 7.2- Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc0000644000175000017500000004135012576764164030623 0ustar carlescarles/*! * \file pcps_tong_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition with * Tong algorithm. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * Acquisition strategy (Kaplan book + CFAR threshold). *
      *
    1. Compute the input signal power estimation. *
    2. Doppler serial search loop. *
    3. Perform the FFT-based circular convolution (parallel time search). *
    4. Compute the tests statistics for all the cells. *
    5. Accumulate the grid of tests statistics with the previous grids. *
    6. Record the maximum peak and the associated synchronization parameters. *
    7. Compare the maximum averaged test statistics with a threshold. *
    8. If the test statistics exceeds the threshold, increment the Tong counter. *
    9. Otherwise, decrement the Tong counter. *
    10. If the Tong counter is equal to a given maximum value, declare positive *
    11. acquisition. If the Tong counter is equa to zero, declare negative *
    12. acquisition. Otherwise, process the next block. *
    * * Kaplan book: D.Kaplan, J.Hegarty, "Understanding GPS. Principles * and Applications", Artech House, 2006, pp 223-227 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_tong_acquisition_cc.h" #include #include #include #include #include "control_message_factory.h" #include "gnss_signal_processing.h" using google::LogMessage; pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc( unsigned int sampled_ms, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, unsigned int tong_init_val, unsigned int tong_max_val, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return pcps_tong_acquisition_cc_sptr( new pcps_tong_acquisition_cc(sampled_ms, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, tong_init_val, tong_max_val, queue, dump, dump_filename)); } pcps_tong_acquisition_cc::pcps_tong_acquisition_cc( unsigned int sampled_ms, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, unsigned int tong_init_val, unsigned int tong_max_val, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) : gr::block("pcps_tong_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_well_count = 0; d_tong_max_val = tong_max_val; d_tong_init_val = tong_init_val; d_tong_count = d_tong_init_val; d_doppler_max = doppler_max; d_fft_size = d_sampled_ms * d_samples_per_ms; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_fft_codes = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_doppler_step = 0; d_grid_data = 0; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_channel = 0; } pcps_tong_acquisition_cc::~pcps_tong_acquisition_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); volk_free(d_grid_data[i]); } delete[] d_grid_doppler_wipeoffs; delete[] d_grid_data; } volk_free(d_fft_codes); volk_free(d_magnitude); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } } void pcps_tong_acquisition_cc::set_local_code(std::complex * code) { memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex)*d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } void pcps_tong_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); doppler <= static_cast(d_doppler_max); doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals and allocate data grid. d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; d_grid_data = new float*[d_num_doppler_bins]; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); d_grid_data[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); for (unsigned int i = 0; i < d_fft_size; i++) { d_grid_data[doppler_index][i] = 0; } } } void pcps_tong_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_well_count = 0; d_tong_count = d_tong_init_val; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { for (unsigned int i = 0; i < d_fft_size; i++) { d_grid_data[doppler_index][i] = 0; } } } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int pcps_tong_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_tong_count = d_tong_init_val; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { for (unsigned int i = 0; i < d_fft_size; i++) { d_grid_data[doppler_index][i] = 0; } } d_state = 1; } d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; } case 1: { // initialize acquisition algorithm int doppler; unsigned int indext = 0; float magt = 0.0; const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); d_input_power = 0.0; d_mag = 0.0; d_sample_counter += d_fft_size; // sample counter d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= static_cast(d_fft_size); // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Compute magnitude volk_32fc_magnitude_squared_32f(d_magnitude, d_ifft->get_outbuf(), d_fft_size); // Compute vector of test statistics corresponding to current doppler index. volk_32f_s32f_multiply_32f(d_magnitude, d_magnitude, 1/(fft_normalization_factor*fft_normalization_factor*d_input_power), d_fft_size); // Accumulate test statistics in d_grid_data. volk_32f_x2_add_32f(d_grid_data[doppler_index], d_magnitude, d_grid_data[doppler_index], d_fft_size); // Search maximum volk_32f_index_max_16u(&indext, d_grid_data[doppler_index], d_fft_size); magt = d_grid_data[doppler_index][indext]; // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; d_gnss_synchro->Acq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } // 5- Compute the test statistics and compare to the threshold d_test_statistics = d_mag; if (d_test_statistics > d_threshold*d_well_count) { d_tong_count++; if (d_tong_count == d_tong_max_val) { d_state = 2; // Positive acquisition } } else { d_tong_count--; if (d_tong_count == 0) { d_state = 3; // Negative acquisition } } consume_each(1); break; } case 2: { // 6.1- Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); break; } case 3: { // 6.2- Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.h0000644000175000017500000002021012576764164032030 0ustar carlescarles/*! * \file pcps_multithread_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition * * Acquisition strategy (Kay Borre book + CFAR threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform the FFT-based circular convolution (parallel time search) *
    4. Record the maximum peak and the associated synchronization parameters *
    5. Compute the test statistics and compare to the threshold *
    6. Declare positive or negative acquisition using a message queue *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkha user, 2007. pp 81-84 * * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_MULTITHREAD_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_MULTITHREAD_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_multithread_acquisition_cc; typedef boost::shared_ptr pcps_multithread_acquisition_cc_sptr; pcps_multithread_acquisition_cc_sptr pcps_make_multithread_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition. * * Check \ref Navitec2012 "An Open Source Galileo E1 Software Receiver", * Algorithm 1, for a pseudocode description of this implementation. */ class pcps_multithread_acquisition_cc: public gr::block { private: friend pcps_multithread_acquisition_cc_sptr pcps_make_multithread_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); pcps_multithread_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_codes; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; float d_input_power; float d_test_statistics; bool d_bit_transition_flag; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_core_working; bool d_dump; unsigned int d_channel; std::string d_dump_filename; gr_complex** d_in_buffer; std::vector d_sample_counter_buffer; unsigned int d_in_dwell_count; public: /*! * \brief Default destructor. */ ~pcps_multithread_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void acquisition_core(); }; #endif /* GNSS_SDR_PCPS_MULTITHREAD_ACQUISITION_CC_H_*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.h0000644000175000017500000001773312576764164030475 0ustar carlescarles/*! * \file pcps_tong_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition with * Tong algorithm. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * Acquisition strategy (Kaplan book + CFAR threshold). *
      *
    1. Compute the input signal power estimation. *
    2. Doppler serial search loop. *
    3. Perform the FFT-based circular convolution (parallel time search). *
    4. Compute the tests statistics for all the cells. *
    5. Accumulate the grid of tests statistics with the previous grids. *
    6. Record the maximum peak and the associated synchronization parameters. *
    7. Compare the maximum averaged test statistics with a threshold. *
    8. If the test statistics exceeds the threshold, increment the Tong counter. *
    9. Otherwise, decrement the Tong counter. *
    10. If the Tong counter is equal to a given maximum value, declare positive *
    11. acquisition. If the Tong counter is equa to zero, declare negative *
    12. acquisition. Otherwise, process the next block. *
    * * Kaplan book: D.Kaplan, J.Hegarty, "Understanding GPS. Principles * and Applications", Artech House, 2006, pp 223-227 * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_TONG_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_TONG_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_tong_acquisition_cc; typedef boost::shared_ptr pcps_tong_acquisition_cc_sptr; pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc(unsigned int sampled_ms, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, unsigned int tong_init_val, unsigned int tong_max_val, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition with * Tong algorithm. */ class pcps_tong_acquisition_cc: public gr::block { private: friend pcps_tong_acquisition_cc_sptr pcps_tong_make_acquisition_cc(unsigned int sampled_ms, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, unsigned int tong_init_val, unsigned int tong_max_val, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); pcps_tong_acquisition_cc(unsigned int sampled_ms, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, unsigned int tong_init_val, unsigned int tong_max_val, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_well_count; unsigned int d_tong_count; unsigned int d_tong_init_val; unsigned int d_tong_max_val; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_codes; float** d_grid_data; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; float d_input_power; float d_test_statistics; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~pcps_tong_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for TONG acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of TONG algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_PCPS_TONG_ACQUISITION_CC_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.h0000644000175000017500000001600012576764164031713 0ustar carlescarles/*! * \file galileo_pcps_8ms_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition for * Galileo E1 signals with coherent integration time = 8 ms (two codes) * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_8MS_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_8MS_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class galileo_pcps_8ms_acquisition_cc; typedef boost::shared_ptr galileo_pcps_8ms_acquisition_cc_sptr; galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition for * Galileo E1 signals with coherent integration time = 8 ms (two codes) */ class galileo_pcps_8ms_acquisition_cc: public gr::block { private: friend galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); galileo_pcps_8ms_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_code_A; gr_complex* d_fft_code_B; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; float d_input_power; float d_test_statistics; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~galileo_pcps_8ms_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_PCPS_8MS_ACQUISITION_CC_H_*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.h0000644000175000017500000001722112576764164031335 0ustar carlescarles/*! * \file pcps_assisted_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition with assistance and multi-dwells * * Acquisition strategy (Kay Borre book + CFAR threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform the FFT-based circular convolution (parallel time search) *
    4. Record the maximum peak and the associated synchronization parameters *
    5. Compute the test statistics and compare to the threshold *
    6. Declare positive or negative acquisition using a message queue *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkha user, 2007. pp 81-84 * * \authors
      *
    • Javier Arribas, 2013. jarribas(at)cttc.es *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_ASSISTED_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_ASSISTED_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_assisted_acquisition_cc; typedef boost::shared_ptr pcps_assisted_acquisition_cc_sptr; pcps_assisted_acquisition_cc_sptr pcps_make_assisted_acquisition_cc(int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition. * * Check \ref Navitec2012 "An Open Source Galileo E1 Software Receiver", * Algorithm 1, for a pseudocode description of this implementation. */ class pcps_assisted_acquisition_cc: public gr::block { private: friend pcps_assisted_acquisition_cc_sptr pcps_make_assisted_acquisition_cc(int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename); pcps_assisted_acquisition_cc(int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); int compute_and_accumulate_grid(gr_vector_const_void_star &input_items); float estimate_input_power(gr_vector_const_void_star &input_items); double search_maximum(); void get_assistance(); void reset_grid(); void redefine_grid(); void free_grid_memory(); long d_fs_in; long d_freq; int d_samples_per_ms; int d_max_dwells; unsigned int d_doppler_resolution; int d_gnuradio_forecast_samples; float d_threshold; std::string d_satellite_str; int d_doppler_max; int d_doppler_min; int d_config_doppler_max; int d_config_doppler_min; int d_num_doppler_points; int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex* d_carrier; gr_complex* d_fft_codes; float** d_grid_data; gr_complex** d_grid_doppler_wipeoffs; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_input_power; float d_test_statistics; boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; int d_state; bool d_active; bool d_disable_assist; int d_well_count; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~pcps_assisted_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_test_statistics; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); }; #endif /* GNSS_SDR_PCPS_assisted_acquisition_cc_H_*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc0000644000175000017500000004701512576764164032326 0ustar carlescarles/*! * \file pcps_acquisition_fine_doppler_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search Acquisition with multi-dwells and fine Doppler estimation * \authors
      *
    • Javier Arribas, 2013. jarribas(at)cttc.es *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_acquisition_fine_doppler_cc.h" #include // std::rotate #include #include #include #include #include "nco_lib.h" #include "concurrent_map.h" #include "gnss_signal_processing.h" #include "gps_sdr_signal_processing.h" #include "control_message_factory.h" using google::LogMessage; pcps_acquisition_fine_doppler_cc_sptr pcps_make_acquisition_fine_doppler_cc( int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename) { return pcps_acquisition_fine_doppler_cc_sptr( new pcps_acquisition_fine_doppler_cc(max_dwells, sampled_ms, doppler_max, doppler_min, freq, fs_in, samples_per_ms, queue, dump, dump_filename)); } pcps_acquisition_fine_doppler_cc::pcps_acquisition_fine_doppler_cc( int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename) : gr::block("pcps_acquisition_fine_doppler_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(0, 0, sizeof(gr_complex))) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_sampled_ms = sampled_ms; d_config_doppler_max = doppler_max; d_config_doppler_min = doppler_min; d_fft_size = d_sampled_ms * d_samples_per_ms; // HS Acquisition d_max_dwells = max_dwells; d_gnuradio_forecast_samples = d_fft_size; d_input_power = 0.0; d_state = 0; d_carrier = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_fft_codes = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_num_doppler_points = 0; d_doppler_step = 0; d_grid_data = 0; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_well_count = 0; d_channel = 0; } void pcps_acquisition_fine_doppler_cc::set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; // Create the search grid array d_num_doppler_points = floor(std::abs(d_config_doppler_max - d_config_doppler_min) / d_doppler_step); d_grid_data = new float*[d_num_doppler_points]; for (int i = 0; i < d_num_doppler_points; i++) { d_grid_data[i] = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); } update_carrier_wipeoff(); } void pcps_acquisition_fine_doppler_cc::free_grid_memory() { for (int i = 0; i < d_num_doppler_points; i++) { volk_free(d_grid_data[i]); delete[] d_grid_doppler_wipeoffs[i]; } delete d_grid_data; delete d_grid_doppler_wipeoffs; } pcps_acquisition_fine_doppler_cc::~pcps_acquisition_fine_doppler_cc() { volk_free(d_carrier); volk_free(d_fft_codes); volk_free(d_magnitude); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } free_grid_memory(); } void pcps_acquisition_fine_doppler_cc::set_local_code(std::complex * code) { memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex) * d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } void pcps_acquisition_fine_doppler_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_input_power = 0.0; d_state = 0; } void pcps_acquisition_fine_doppler_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = d_gnuradio_forecast_samples ; //set the required available samples in each call } void pcps_acquisition_fine_doppler_cc::reset_grid() { d_well_count = 0; for (int i=0; i(GPS_TWO_PI) * doppler_hz / static_cast(d_fs_in); d_grid_doppler_wipeoffs[doppler_index] = new gr_complex[d_fft_size]; fxp_nco(d_grid_doppler_wipeoffs[doppler_index], d_fft_size,0, phase_step_rad); } } double pcps_acquisition_fine_doppler_cc::search_maximum() { float magt = 0.0; float fft_normalization_factor; int index_doppler = 0; unsigned int tmp_intex_t; unsigned int index_time = 0; for (int i=0;i magt) { magt = d_grid_data[i][tmp_intex_t]; //std::cout<(d_fft_size) * static_cast(d_fft_size); magt = magt / (fft_normalization_factor * fft_normalization_factor); // 5- Compute the test statistics and compare to the threshold d_test_statistics = magt/(d_input_power*std::sqrt(d_well_count)); // 4- record the maximum peak and the associated synchronization parameters d_gnss_synchro->Acq_delay_samples = static_cast(index_time); d_gnss_synchro->Acq_doppler_hz = static_cast(index_doppler * d_doppler_step + d_config_doppler_min); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << d_gnss_synchro->Acq_doppler_hz << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_grid_data[index_doppler], n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } return d_test_statistics; } float pcps_acquisition_fine_doppler_cc::estimate_input_power(gr_vector_const_void_star &input_items) { const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer // Compute the input signal power estimation float power = 0; volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&power, d_magnitude, d_fft_size); power /= static_cast(d_fft_size); return power; } int pcps_acquisition_fine_doppler_cc::compute_and_accumulate_grid(gr_vector_const_void_star &input_items) { // initialize acquisition algorithm const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_config_doppler_max << ", doppler_step: " << d_doppler_step; // 2- Doppler frequency search loop float* p_tmp_vector = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); for (int doppler_index = 0; doppler_index < d_num_doppler_points; doppler_index++) { // doppler search steps // Perform the carrier wipe-off volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); // compute the inverse FFT d_ifft->execute(); // save the grid matrix delay file volk_32fc_magnitude_squared_32f(p_tmp_vector, d_ifft->get_outbuf(), d_fft_size); const float* old_vector = d_grid_data[doppler_index]; volk_32f_x2_add_32f(d_grid_data[doppler_index], old_vector, p_tmp_vector, d_fft_size); } volk_free(p_tmp_vector); return d_fft_size; } int pcps_acquisition_fine_doppler_cc::estimate_Doppler(gr_vector_const_void_star &input_items, int available_samples) { // Direct FFT int zero_padding_factor = 16; int fft_size_extended = d_fft_size * zero_padding_factor; gr::fft::fft_complex *fft_operator = new gr::fft::fft_complex(fft_size_extended, true); //zero padding the entire vector memset(fft_operator->get_inbuf(), 0, fft_size_extended * sizeof(gr_complex)); //1. generate local code aligned with the acquisition code phase estimation gr_complex *code_replica = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); gps_l1_ca_code_gen_complex_sampled(code_replica, d_gnss_synchro->PRN, d_fs_in, 0); int shift_index = static_cast(d_gnss_synchro->Acq_delay_samples); // Rotate to align the local code replica using acquisition time delay estimation if (shift_index != 0) { std::rotate(code_replica, code_replica + (d_fft_size - shift_index), code_replica + d_fft_size - 1); } //2. Perform code wipe-off const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer volk_32fc_x2_multiply_32fc(fft_operator->get_inbuf(), in, code_replica, d_fft_size); // 3. Perform the FFT (zero padded!) fft_operator->execute(); // 4. Compute the magnitude and find the maximum float* p_tmp_vector = static_cast(volk_malloc(fft_size_extended * sizeof(float), volk_get_alignment())); volk_32fc_magnitude_squared_32f(p_tmp_vector, fft_operator->get_outbuf(), fft_size_extended); unsigned int tmp_index_freq = 0; volk_32f_index_max_16u(&tmp_index_freq, p_tmp_vector, fft_size_extended); //case even int counter = 0; float fftFreqBins[fft_size_extended]; memset(fftFreqBins, 0, fft_size_extended * sizeof(float)); for (int k=0; k < (fft_size_extended / 2); k++) { fftFreqBins[counter] = ((static_cast(d_fs_in) / 2.0) * static_cast(k)) / (static_cast(fft_size_extended) / 2.0); counter++; } for (int k = fft_size_extended / 2; k > 0; k--) { fftFreqBins[counter] = ((-static_cast(d_fs_in) / 2) * static_cast(k)) / (static_cast(fft_size_extended) / 2.0); counter++; } // 5. Update the Doppler estimation in Hz if (std::abs(fftFreqBins[tmp_index_freq] - d_gnss_synchro->Acq_doppler_hz) < 1000) { d_gnss_synchro->Acq_doppler_hz = static_cast(fftFreqBins[tmp_index_freq]); //std::cout<<"FFT maximum present at "<PRN << ".dat"; // d_dump_file.open(filename.str().c_str(), std::ios::out // | std::ios::binary); // d_dump_file.write((char*)code_replica, n); //write directly |abs(x)|^2 in this Doppler bin? // d_dump_file.close(); // // filename.str(""); // filename << "../data/signal_prn_" << d_gnss_synchro->PRN << ".dat"; // d_dump_file.open(filename.str().c_str(), std::ios::out // | std::ios::binary); // d_dump_file.write((char*)in, n); //write directly |abs(x)|^2 in this Doppler bin? // d_dump_file.close(); // // // n = sizeof(float) * (fft_size_extended); // filename.str(""); // filename << "../data/fft_prn_" << d_gnss_synchro->PRN << ".dat"; // d_dump_file.open(filename.str().c_str(), std::ios::out // | std::ios::binary); // d_dump_file.write((char*)p_tmp_vector, n); //write directly |abs(x)|^2 in this Doppler bin? // d_dump_file.close(); } // free memory!! delete fft_operator; volk_free(code_replica); volk_free(p_tmp_vector); return d_fft_size; } int pcps_acquisition_fine_doppler_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { /*! * TODO: High sensitivity acquisition algorithm: * State Mechine: * S0. StandBy. If d_active==1 -> S1 * S1. ComputeGrid. Perform the FFT acqusition doppler and delay grid. * Accumulate the search grid matrix (#doppler_bins x #fft_size) * Compare maximum to threshold and decide positive or negative * If T>=gamma -> S4 else * If d_well_count S2 * else -> S5. * S4. Positive_Acq: Send message and stop acq -> S0 * S5. Negative_Acq: Send message and stop acq -> S0 */ switch (d_state) { case 0: // S0. StandBy //DLOG(INFO) <<"S0"<= d_max_dwells) { d_state = 2; } break; case 2: // Compute test statistics and decide //DLOG(INFO) <<"S2"< d_threshold) { d_state = 3; //perform fine doppler estimation } else { d_state = 5; //negative acquisition } break; case 3: // Fine doppler estimation //DLOG(INFO) <<"S3"<System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; // Send message to channel queue //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL d_channel_internal_queue->push(1); // 1-> positive acquisition d_state = 0; break; case 5: // Negative_Acq //DLOG(INFO) <<"S5"<System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; // Send message to channel queue //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL d_channel_internal_queue->push(2); // 2-> negative acquisition d_state = 0; break; default: d_state = 0; break; } //DLOG(INFO)<<"d_sample_counter="<. * * ------------------------------------------------------------------------- */ #include "pcps_quicksync_acquisition_cc.h" #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_signal_processing.h" using google::LogMessage; pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc( unsigned int folding_factor, unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return pcps_quicksync_acquisition_cc_sptr( new pcps_quicksync_acquisition_cc( folding_factor, sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, bit_transition_flag, queue, dump, dump_filename)); } pcps_quicksync_acquisition_cc::pcps_quicksync_acquisition_cc( unsigned int folding_factor, unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename): gr::block("pcps_quicksync_acquisition_cc", gr::io_signature::make(1, 1, (sizeof(gr_complex)*sampled_ms * samples_per_ms )), gr::io_signature::make(0, 0, (sizeof(gr_complex)*sampled_ms * samples_per_ms ))) { //DLOG(INFO) << "START CONSTRUCTOR"; d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_bit_transition_flag = bit_transition_flag; d_folding_factor = folding_factor; //fft size is reduced. d_fft_size = (d_samples_per_code) / d_folding_factor; d_fft_codes = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_samples_per_code * d_folding_factor * sizeof(float), volk_get_alignment())); d_magnitude_folded = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); d_possible_delay = new unsigned int[d_folding_factor]; d_corr_output_f = new float[d_folding_factor]; /*Create the d_code signal , which would store the values of the code in its original form to perform later correlation in time domain*/ d_code = new gr_complex[d_samples_per_code](); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_corr_acumulator = 0; d_signal_folded = 0; d_code_folded = new gr_complex[d_fft_size](); d_noise_floor_power = 0; d_doppler_resolution = 0; d_threshold = 0; d_doppler_step = 0; d_grid_doppler_wipeoffs = 0; d_fft_if2 = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_channel = 0; //d_code_folded = 0; // DLOG(INFO) << "END CONSTRUCTOR"; } pcps_quicksync_acquisition_cc::~pcps_quicksync_acquisition_cc() { //DLOG(INFO) << "START DESTROYER"; if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } volk_free(d_fft_codes); volk_free(d_magnitude); volk_free(d_magnitude_folded); delete d_ifft; delete d_fft_if; delete d_code; delete d_possible_delay; delete d_corr_output_f; delete[] d_code_folded; if (d_dump) { d_dump_file.close(); } // DLOG(INFO) << "END DESTROYER"; } void pcps_quicksync_acquisition_cc::set_local_code(std::complex* code) { /*save a local copy of the code without the folding process to perform corre- lation in time in the final steps of the acquisition stage*/ memcpy(d_code, code, sizeof(gr_complex) * d_samples_per_code); //d_code_folded = new gr_complex[d_fft_size](); memcpy(d_fft_if->get_inbuf(), d_code_folded, sizeof(gr_complex) * (d_fft_size)); /*perform folding of the code by the factorial factor parameter. Notice that folding of the code in the time stage would result in a downsampled spectrum in the frequency domain after applying the fftw operation*/ for (unsigned int i = 0; i < d_folding_factor; i++) { std::transform ((code + i * d_fft_size), (code + ((i + 1) * d_fft_size)) , d_fft_if->get_inbuf(), d_fft_if->get_inbuf(), std::plus()); } d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } void pcps_quicksync_acquisition_cc::init() { //DLOG(INFO) << "START init"; d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; if(d_doppler_step == 0) d_doppler_step = 250; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); doppler <= static_cast(d_doppler_max); doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_samples_per_code * d_folding_factor); } // DLOG(INFO) << "end init"; } void pcps_quicksync_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_active = 1; } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int pcps_quicksync_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { /* * By J.Arribas, L.Esteve and M.Molina * Acquisition strategy (Kay Borre book + CFAR threshold): * 1. Compute the input signal power estimation * 2. Doppler serial search loop * 3. Perform the FFT-based circular convolution (parallel time search) * 4. Record the maximum peak and the associated synchronization parameters * 5. Compute the test statistics and compare to the threshold * 6. Declare positive or negative acquisition using a message queue */ //DLOG(INFO) << "START GENERAL WORK"; int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL //std::cout<<"general_work in quicksync gnuradio block"<Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_state = 1; } d_sample_counter += d_sampled_ms * d_samples_per_ms * ninput_items[0]; // sample counter consume_each(ninput_items[0]); //DLOG(INFO) << "END CASE 0"; break; } case 1: { /* initialize acquisition implementing the QuickSync algorithm*/ //DLOG(INFO) << "START CASE 1"; int doppler; unsigned int indext = 0; float magt = 0.0; const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer gr_complex* in_temp = static_cast(volk_malloc(d_samples_per_code * d_folding_factor * sizeof(gr_complex), volk_get_alignment())); gr_complex* in_temp_folded = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); /*Create a signal to store a signal of size 1ms, to perform correlation in time. No folding on this data is required*/ gr_complex* in_1code = static_cast(volk_malloc(d_samples_per_code * sizeof(gr_complex), volk_get_alignment())); /*Stores the values of the correlation output between the local code and the signal with doppler shift corrected */ gr_complex* corr_output = static_cast(volk_malloc(d_samples_per_code * sizeof(gr_complex), volk_get_alignment())); /*Stores a copy of the folded version of the signal.This is used for the FFT operations in future steps of excecution*/ // gr_complex in_folded[d_fft_size]; float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); d_input_power = 0.0; d_mag = 0.0; d_test_statistics = 0.0; d_noise_floor_power = 0.0; d_sample_counter += d_sampled_ms * d_samples_per_ms; // sample counter d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,algorithm: pcps_quicksync_acquisition" << " ,folding factor: " << d_folding_factor << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step << ", Signal Size: " << d_samples_per_code * d_folding_factor; /* 1- Compute the input signal power estimation. This operation is being performed in a signal of size nxp */ volk_32fc_magnitude_squared_32f(d_magnitude, in, d_samples_per_code * d_folding_factor); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_samples_per_code * d_folding_factor); d_input_power /= static_cast(d_samples_per_code * d_folding_factor); for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { /*Ensure that the signal is going to start with all samples at zero. This is done to avoid over acumulation when performing the folding process to be stored in d_fft_if->get_inbuf()*/ d_signal_folded = new gr_complex[d_fft_size](); memcpy( d_fft_if->get_inbuf(), d_signal_folded, sizeof(gr_complex) * (d_fft_size)); /*Doppler search steps and then multiplication of the incoming signal with the doppler wipeoffs to eliminate frequency offset */ doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; /*Perform multiplication of the incoming signal with the complex exponential vector. This removes the frequency doppler shift offset*/ volk_32fc_x2_multiply_32fc(in_temp, in, d_grid_doppler_wipeoffs[doppler_index], d_samples_per_code * d_folding_factor); /*Perform folding of the carrier wiped-off incoming signal. Since superlinear method is being used the folding factor in the incoming raw data signal is of d_folding_factor^2*/ for ( int i = 0; i < static_cast(d_folding_factor * d_folding_factor); i++) { std::transform ((in_temp + i * d_fft_size), (in_temp + ((i + 1) * d_fft_size)) , d_fft_if->get_inbuf(), d_fft_if->get_inbuf(), std::plus()); } /* 3- Perform the FFT-based convolution (parallel time search) Compute the FFT of the carrier wiped--off incoming signal*/ d_fft_if->execute(); /*Multiply carrier wiped--off, Fourier transformed incoming signal with the local FFT'd code reference using SIMD operations with VOLK library*/ volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); /* compute the inverse FFT of the aliased signal*/ d_ifft->execute(); /* Compute the magnitude and get the maximum value with its index position*/ volk_32fc_magnitude_squared_32f(d_magnitude_folded, d_ifft->get_outbuf(), d_fft_size); /* Normalize the maximum value to correct the scale factor introduced by FFTW*/ //volk_32f_s32f_multiply_32f_a(d_magnitude_folded,d_magnitude_folded, // (1 / (fft_normalization_factor * fft_normalization_factor)), d_fft_size); volk_32f_index_max_16u(&indext, d_magnitude_folded, d_fft_size); magt = d_magnitude_folded[indext] / (fft_normalization_factor * fft_normalization_factor); delete[] d_signal_folded; // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; /* In case that d_bit_transition_flag = true, we compare the potentially new maximum test statistics (d_mag/d_input_power) with the value in d_test_statistics. When the second dwell is being processed, the value of d_mag/d_input_power could be lower than d_test_statistics (i.e, the maximum test statistics in the previous dwell is greater than current d_mag/d_input_power). Note that d_test_statistics is not restarted between consecutive dwells in multidwell operation.*/ if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag) { unsigned int detected_delay_samples_folded = 0; detected_delay_samples_folded = (indext % d_samples_per_code); gr_complex complex_acumulator[100]; //gr_complex complex_acumulator[d_folding_factor]; for (int i = 0; i < static_cast(d_folding_factor); i++) { d_possible_delay[i] = detected_delay_samples_folded + (i) * d_fft_size; } for ( int i = 0; i < static_cast(d_folding_factor); i++) { /*Copy a signal of 1 code length into suggested buffer. The copied signal must have doppler effect corrected*/ memcpy(in_1code,&in_temp[d_possible_delay[i]], sizeof(gr_complex) * (d_samples_per_code)); /*Perform multiplication of the unmodified local generated code with the incoming signal with doppler effect corrected and accumulates its value. This is indeed correlation in time for an specific value of a shift*/ volk_32fc_x2_multiply_32fc(corr_output, in_1code, d_code, d_samples_per_code); for(int j = 0; j < d_samples_per_code; j++) { complex_acumulator[i] += (corr_output[j]); } } /*Obtain maximun value of correlation given the possible delay selected */ volk_32fc_magnitude_squared_32f(d_corr_output_f, complex_acumulator, d_folding_factor); volk_32f_index_max_16u(&indext, d_corr_output_f, d_folding_factor); /*Now save the real code phase in the gnss_syncro block for use in other stages*/ d_gnss_synchro->Acq_delay_samples = static_cast(d_possible_delay[indext]); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; /* 5- Compute the test statistics and compare to the threshold d_test_statistics = 2 * d_fft_size * d_mag / d_input_power;*/ d_test_statistics = d_mag / d_input_power; //delete complex_acumulator; } } // Record results to file if required if (d_dump) { /*Since QuickSYnc performs a folded correlation in frequency by means of the FFT, it is esential to also keep the values obtained from the possible delay to show how it is maximize*/ std::stringstream filename; std::streamsize n = sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System << "_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_magnitude_folded, n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } if (!d_bit_transition_flag) { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } } else { if (d_well_count == d_max_dwells) // d_max_dwells = 2 { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else { d_state = 3; // Negative acquisition } } } volk_free(in_temp); volk_free(in_temp_folded); volk_free(in_1code); volk_free(corr_output); consume_each(1); break; } case 2: { //DLOG(INFO) << "START CASE 2"; // 6.1- Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "folding factor " << d_folding_factor; DLOG(INFO) << "possible delay correlation output"; for (int i = 0; i < static_cast(d_folding_factor); i++) DLOG(INFO) << d_possible_delay[i] << "\t\t\t" << d_corr_output_f[i]; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude folded " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_sampled_ms * d_samples_per_ms * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); //DLOG(INFO) << "END CASE 2"; break; } case 3: { //DLOG(INFO) << "START CASE 3"; // 6.2- Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "folding factor "<(d_folding_factor); i++) DLOG(INFO) << d_possible_delay[i] << "\t\t\t" << d_corr_output_f[i]; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude folded " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_sampled_ms * d_samples_per_ms * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); //DLOG(INFO) << "END CASE 3"; break; } } //DLOG(INFO) << "END GENERAL WORK"; return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.h0000644000175000017500000001742412576764164027443 0ustar carlescarles/*! * \file pcps_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition * * Acquisition strategy (Kay Borre book + CFAR threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform the FFT-based circular convolution (parallel time search) *
    4. Record the maximum peak and the associated synchronization parameters *
    5. Compute the test statistics and compare to the threshold *
    6. Declare positive or negative acquisition using a message queue *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkha user, 2007. pp 81-84 * * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_acquisition_cc; typedef boost::shared_ptr pcps_acquisition_cc_sptr; pcps_acquisition_cc_sptr pcps_make_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition. * * Check \ref Navitec2012 "An Open Source Galileo E1 Software Receiver", * Algorithm 1, for a pseudocode description of this implementation. */ class pcps_acquisition_cc: public gr::block { private: friend pcps_acquisition_cc_sptr pcps_make_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); pcps_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; //unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_codes; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; float d_input_power; float d_test_statistics; bool d_bit_transition_flag; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~pcps_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_PCPS_ACQUISITION_CC_H_*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000421312576764164026000 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(ACQ_GR_BLOCKS_SOURCES pcps_acquisition_cc.cc pcps_multithread_acquisition_cc.cc pcps_assisted_acquisition_cc.cc pcps_acquisition_fine_doppler_cc.cc pcps_tong_acquisition_cc.cc pcps_cccwsr_acquisition_cc.cc pcps_quicksync_acquisition_cc.cc galileo_pcps_8ms_acquisition_cc.cc galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc ) if(OPENCL_FOUND) set(ACQ_GR_BLOCKS_SOURCES ${ACQ_GR_BLOCKS_SOURCES} pcps_opencl_acquisition_cc.cc) endif(OPENCL_FOUND) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) if(OPENCL_FOUND) include_directories( ${OPENCL_INCLUDE_DIRS} ) if(OS_IS_MACOSX) set(OPT_LIBRARIES ${OPT_LIBRARIES} "-framework OpenCL") else(OS_IS_MACOSX) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${OPENCL_LIBRARIES}) endif(OS_IS_MACOSX) endif(OPENCL_FOUND) file(GLOB ACQ_GR_BLOCKS_HEADERS "*.h") add_library(acq_gr_blocks ${ACQ_GR_BLOCKS_SOURCES} ${ACQ_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${ACQ_GR_BLOCKS_HEADERS}) target_link_libraries(acq_gr_blocks gnss_sp_libs gnss_system_parameters ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_FFT_LIBRARIES} ${VOLK_LIBRARIES} ${OPT_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc0000644000175000017500000004244612576764164031502 0ustar carlescarles/*! * \file pcps_assisted_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search Acquisition with assistance and multi-dwells * \authors
      *
    • Javier Arribas, 2013. jarribas(at)cttc.es *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_assisted_acquisition_cc.h" #include #include #include #include #include "nco_lib.h" #include "concurrent_map.h" #include "gnss_signal_processing.h" #include "control_message_factory.h" #include "gps_acq_assist.h" extern concurrent_map global_gps_acq_assist_map; using google::LogMessage; pcps_assisted_acquisition_cc_sptr pcps_make_assisted_acquisition_cc( int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename) { return pcps_assisted_acquisition_cc_sptr( new pcps_assisted_acquisition_cc(max_dwells, sampled_ms, doppler_max, doppler_min, freq, fs_in, samples_per_ms, queue, dump, dump_filename)); } pcps_assisted_acquisition_cc::pcps_assisted_acquisition_cc( int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename) : gr::block("pcps_assisted_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)), gr::io_signature::make(0, 0, sizeof(gr_complex))) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_sampled_ms = sampled_ms; d_config_doppler_max = doppler_max; d_config_doppler_min = doppler_min; d_fft_size = d_sampled_ms * d_samples_per_ms; // HS Acquisition d_max_dwells = max_dwells; d_gnuradio_forecast_samples = d_fft_size*4; d_input_power = 0.0; d_state = 0; d_disable_assist = false; d_fft_codes = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_carrier = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_doppler_max = 0; d_doppler_min = 0; d_num_doppler_points = 0; d_doppler_step = 0; d_grid_data = 0; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_well_count = 0; d_channel = 0; } void pcps_assisted_acquisition_cc::set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } void pcps_assisted_acquisition_cc::free_grid_memory() { for (int i = 0; i < d_num_doppler_points; i++) { delete[] d_grid_data[i]; delete[] d_grid_doppler_wipeoffs[i]; } delete d_grid_data; } pcps_assisted_acquisition_cc::~pcps_assisted_acquisition_cc() { volk_free(d_carrier); volk_free(d_fft_codes); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } } void pcps_assisted_acquisition_cc::set_local_code(std::complex * code) { memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex)*d_fft_size); } void pcps_assisted_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_input_power = 0.0; d_state = 0; d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } void pcps_assisted_acquisition_cc::forecast (int noutput_items, gr_vector_int &ninput_items_required) { ninput_items_required[0] = d_gnuradio_forecast_samples ; //set the required available samples in each call } void pcps_assisted_acquisition_cc::get_assistance() { Gps_Acq_Assist gps_acq_assisistance; if (global_gps_acq_assist_map.read(this->d_gnss_synchro->PRN, gps_acq_assisistance)==true) { //TODO: use the LO tolerance here if (gps_acq_assisistance.dopplerUncertainty >= 1000) { d_doppler_max = gps_acq_assisistance.d_Doppler0 + gps_acq_assisistance.dopplerUncertainty*2; d_doppler_min = gps_acq_assisistance.d_Doppler0 - gps_acq_assisistance.dopplerUncertainty*2; } else { d_doppler_max = gps_acq_assisistance.d_Doppler0 + 1000; d_doppler_min = gps_acq_assisistance.d_Doppler0 - 1000; } this->d_disable_assist = false; std::cout << "Acq assist ENABLED for GPS SV "<< this->d_gnss_synchro->PRN <<" (Doppler max,Doppler min)=(" << d_doppler_max << "," << d_doppler_min << ")" << std::endl; } else { this->d_disable_assist = true; std::cout << "Acq assist DISABLED for GPS SV "<< this->d_gnss_synchro->PRN << std::endl; } } void pcps_assisted_acquisition_cc::reset_grid() { d_well_count = 0; for (int i = 0; i < d_num_doppler_points; i++) { for (unsigned int j = 0; j < d_fft_size; j++) { d_grid_data[i][j] = 0.0; } } } void pcps_assisted_acquisition_cc::redefine_grid() { if (this->d_disable_assist == true) { d_doppler_max = d_config_doppler_max; d_doppler_min = d_config_doppler_min; } // Create the search grid array d_num_doppler_points = floor(std::abs(d_doppler_max - d_doppler_min) / d_doppler_step); d_grid_data = new float*[d_num_doppler_points]; for (int i = 0; i < d_num_doppler_points; i++) { d_grid_data[i] = new float[d_fft_size]; } // create the carrier Doppler wipeoff signals int doppler_hz; float phase_step_rad; d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_points]; for (int doppler_index = 0; doppler_index < d_num_doppler_points; doppler_index++) { doppler_hz = d_doppler_min + d_doppler_step*doppler_index; // doppler search steps // compute the carrier doppler wipe-off signal and store it phase_step_rad = static_cast(GPS_TWO_PI) * doppler_hz / static_cast(d_fs_in); d_grid_doppler_wipeoffs[doppler_index] = new gr_complex[d_fft_size]; fxp_nco(d_grid_doppler_wipeoffs[doppler_index], d_fft_size, 0, phase_step_rad); } } double pcps_assisted_acquisition_cc::search_maximum() { float magt = 0.0; float fft_normalization_factor; int index_doppler = 0; unsigned int tmp_intex_t; unsigned int index_time = 0; for (int i=0;i magt) { magt = d_grid_data[i][index_time]; index_doppler = i; index_time = tmp_intex_t; } } // Normalize the maximum value to correct the scale factor introduced by FFTW fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); magt = magt / (fft_normalization_factor * fft_normalization_factor); // 5- Compute the test statistics and compare to the threshold d_test_statistics = 2 * d_fft_size * magt / (d_input_power * d_well_count); // 4- record the maximum peak and the associated synchronization parameters d_gnss_synchro->Acq_delay_samples = static_cast(index_time); d_gnss_synchro->Acq_doppler_hz = static_cast(index_doppler * d_doppler_step + d_doppler_min); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System << "_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << d_gnss_synchro->Acq_doppler_hz << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_grid_data[index_doppler], n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } return d_test_statistics; } float pcps_assisted_acquisition_cc::estimate_input_power(gr_vector_const_void_star &input_items) { const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer // 1- Compute the input signal power estimation float* p_tmp_vector = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); volk_32fc_magnitude_squared_32f(p_tmp_vector, in, d_fft_size); const float* p_const_tmp_vector = p_tmp_vector; float power; volk_32f_accumulator_s32f(&power, p_const_tmp_vector, d_fft_size); volk_free(p_tmp_vector); return ( power / static_cast(d_fft_size)); } int pcps_assisted_acquisition_cc::compute_and_accumulate_grid(gr_vector_const_void_star &input_items) { // initialize acquisition algorithm const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 2- Doppler frequency search loop float* p_tmp_vector = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); for (int doppler_index = 0; doppler_index < d_num_doppler_points; doppler_index++) { // doppler search steps // Perform the carrier wipe-off volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); // compute the inverse FFT d_ifft->execute(); // save the grid matrix delay file volk_32fc_magnitude_squared_32f(p_tmp_vector, d_ifft->get_outbuf(), d_fft_size); const float* old_vector = d_grid_data[doppler_index]; volk_32f_x2_add_32f(d_grid_data[doppler_index], old_vector, p_tmp_vector, d_fft_size); } volk_free(p_tmp_vector); return d_fft_size; } int pcps_assisted_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { /*! * TODO: High sensitivity acquisition algorithm: * State Mechine: * S0. StandBy. If d_active==1 -> S1 * S1. GetAssist. Define search grid with assistance information. Reset grid matrix -> S2 * S2. ComputeGrid. Perform the FFT acqusition doppler and delay grid. * Accumulate the search grid matrix (#doppler_bins x #fft_size) * Compare maximum to threshold and decide positive or negative * If T>=gamma -> S4 else * If d_well_count S2 * else if !disable_assist -> S3 * else -> S5. * S3. RedefineGrid. Open the grid search to unasisted acquisition. Reset counters and grid. -> S2 * S4. Positive_Acq: Send message and stop acq -> S0 * S5. Negative_Acq: Send message and stop acq -> S0 */ switch (d_state) { case 0: // S0. StandBy if (d_active == true) d_state = 1; d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; case 1: // S1. GetAssist get_assistance(); redefine_grid(); reset_grid(); d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); d_state = 2; break; case 2: // S2. ComputeGrid int consumed_samples; consumed_samples = compute_and_accumulate_grid(input_items); d_well_count++; if (d_well_count >= d_max_dwells) { d_state=3; } d_sample_counter += consumed_samples; consume_each(consumed_samples); break; case 3: // Compute test statistics and decide d_input_power = estimate_input_power(input_items); d_test_statistics = search_maximum(); if (d_test_statistics > d_threshold) { d_state = 5; } else { if (d_disable_assist == false) { d_disable_assist = true; std::cout << "Acq assist DISABLED for GPS SV "<< this->d_gnss_synchro->PRN << std::endl; d_state = 4; } else { d_state = 6; } } d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; case 4: // RedefineGrid free_grid_memory(); redefine_grid(); reset_grid(); d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); d_state = 2; break; case 5: // Positive_Acq DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; // Send message to channel queue //0=STOP_CHANNEL 1=ACQ_SUCCESS 2=ACQ_FAIL d_channel_internal_queue->push(1); // 1-> positive acquisition free_grid_memory(); // consume samples to not block the GNU Radio flowgraph d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); d_state = 0; break; case 6: // Negative_Acq DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; // Send message to channel queue //0=STOP_CHANNEL 1=ACQ_SUCCESS 2=ACQ_FAIL d_channel_internal_queue->push(2); // 2-> negative acquisition free_grid_memory(); // consume samples to not block the GNU Radio flowgraph d_sample_counter += ninput_items[0]; // sample counter consume_each(ninput_items[0]); d_state = 0; break; default: d_state = 0; break; } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc0000644000175000017500000004332112576764164032176 0ustar carlescarles/*! * \file pcps_multithread_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search Acquisition * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_multithread_acquisition_cc.h" #include #include #include #include #include "gnss_signal_processing.h" #include "control_message_factory.h" using google::LogMessage; pcps_multithread_acquisition_cc_sptr pcps_make_multithread_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return pcps_multithread_acquisition_cc_sptr( new pcps_multithread_acquisition_cc(sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, bit_transition_flag, queue, dump, dump_filename)); } pcps_multithread_acquisition_cc::pcps_multithread_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) : gr::block("pcps_multithread_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_core_working = false; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; d_fft_size = d_sampled_ms * d_samples_per_ms; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_bit_transition_flag = bit_transition_flag; d_in_dwell_count = 0; d_in_buffer = new gr_complex*[d_max_dwells]; //todo: do something if posix_memalign fails for (unsigned int i = 0; i < d_max_dwells; i++) { d_in_buffer[i] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); } d_fft_codes = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_doppler_step = 0; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_channel = 0; } pcps_multithread_acquisition_cc::~pcps_multithread_acquisition_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } for (unsigned int i = 0; i < d_max_dwells; i++) { volk_free(d_in_buffer[i]); } delete[] d_in_buffer; volk_free(d_fft_codes); volk_free(d_magnitude); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } } void pcps_multithread_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = (int)(-d_doppler_max); doppler <= (int)d_doppler_max; doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; for (unsigned int doppler_index=0;doppler_index(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -(int)d_doppler_max + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); } } void pcps_multithread_acquisition_cc::set_local_code(std::complex * code) { memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex)*d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } void pcps_multithread_acquisition_cc::acquisition_core() { // initialize acquisition algorithm int doppler; unsigned int indext = 0; float magt = 0.0; float fft_normalization_factor = (float)d_fft_size * (float)d_fft_size; gr_complex* in = d_in_buffer[d_well_count]; unsigned long int samplestamp = d_sample_counter_buffer[d_well_count]; d_input_power = 0.0; d_mag = 0.0; d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= (float)d_fft_size; // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -(int)d_doppler_max + d_doppler_step*doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Search maximum volk_32fc_magnitude_squared_32f(d_magnitude, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext, d_magnitude, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt = d_magnitude[indext] / (fft_normalization_factor * fft_normalization_factor); // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; // In case that d_bit_transition_flag = true, we compare the potentially // new maximum test statistics (d_mag/d_input_power) with the value in // d_test_statistics. When the second dwell is being processed, the value // of d_mag/d_input_power could be lower than d_test_statistics (i.e, // the maximum test statistics in the previous dwell is greater than // current d_mag/d_input_power). Note that d_test_statistics is not // restarted between consecutive dwells in multidwell operation. if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag) { d_gnss_synchro->Acq_delay_samples = (double)(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = (double)doppler; d_gnss_synchro->Acq_samplestamp_samples = samplestamp; // 5- Compute the test statistics and compare to the threshold //d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; d_test_statistics = d_mag / d_input_power; } } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } if (!d_bit_transition_flag) { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } } else { if (d_well_count == d_max_dwells) // d_max_dwells = 2 { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else { d_state = 3; // Negative acquisition } } } d_core_working = false; } void pcps_multithread_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_in_dwell_count = 0; d_sample_counter_buffer.clear(); } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int pcps_multithread_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_in_dwell_count = 0; d_sample_counter_buffer.clear(); d_state = 1; } d_sample_counter += d_fft_size * ninput_items[0]; // sample counter break; } case 1: { if (d_in_dwell_count < d_max_dwells) { // Fill internal buffer with d_max_dwells signal blocks. This step ensures that // consecutive signal blocks will be processed in multi-dwell operation. This is // essential when d_bit_transition_flag = true. unsigned int num_dwells = std::min((int)(d_max_dwells-d_in_dwell_count),ninput_items[0]); for (unsigned int i = 0; i < num_dwells; i++) { memcpy(d_in_buffer[d_in_dwell_count++], (gr_complex*)input_items[i], sizeof(gr_complex)*d_fft_size); d_sample_counter += d_fft_size; d_sample_counter_buffer.push_back(d_sample_counter); } if (ninput_items[0] > (int)num_dwells) { d_sample_counter += d_fft_size * (ninput_items[0]-num_dwells); } } else { // We already have d_max_dwells consecutive blocks in the internal buffer, // just skip input blocks. d_sample_counter += d_fft_size * ninput_items[0]; } // We create a new thread to process next block if the following // conditions are fulfilled: // 1. There are new blocks in d_in_buffer that have not been processed yet // (d_well_count < d_in_dwell_count). // 2. No other acquisition_core thead is working (!d_core_working). // 3. d_state==1. We need to check again d_state because it can be modified at any // moment by the external thread (may have changed since checked in the switch()). // If the external thread has already declared positive (d_state=2) or negative // (d_state=3) acquisition, we don't have to process next block!! if ((d_well_count < d_in_dwell_count) && !d_core_working && d_state==1) { d_core_working = true; boost::thread(&pcps_multithread_acquisition_cc::acquisition_core, this); } break; } case 2: { // Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); break; } case 3: { // Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } consume_each(ninput_items[0]); return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.h0000644000175000017500000001736612576764164032176 0ustar carlescarles/*! * \file pcps_acquisition_fine_doppler_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition with multi-dwells and fine Doppler estimation * * Acquisition strategy (Kay Borre book + CFAR threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform the FFT-based circular convolution (parallel time search) *
    4. Record the maximum peak and the associated synchronization parameters *
    5. Compute the test statistics and compare to the threshold *
    6. Declare positive or negative acquisition using a message queue *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkha user, 2007. pp 81-84 * * \authors
      *
    • Javier Arribas, 2013. jarribas(at)cttc.es *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_ACQUISITION_FINE_DOPPLER_CC_H_ #define GNSS_SDR_PCPS_ACQUISITION_FINE_DOPPLER_CC_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_acquisition_fine_doppler_cc; typedef boost::shared_ptr pcps_acquisition_fine_doppler_cc_sptr; pcps_acquisition_fine_doppler_cc_sptr pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition. * * Check \ref Navitec2012 "An Open Source Galileo E1 Software Receiver", * Algorithm 1, for a pseudocode description of this implementation. */ class pcps_acquisition_fine_doppler_cc: public gr::block { private: friend pcps_acquisition_fine_doppler_cc_sptr pcps_make_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename); pcps_acquisition_fine_doppler_cc(int max_dwells, unsigned int sampled_ms, int doppler_max, int doppler_min, long freq, long fs_in, int samples_per_ms, boost::shared_ptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); int compute_and_accumulate_grid(gr_vector_const_void_star &input_items); int estimate_Doppler(gr_vector_const_void_star &input_items, int available_samples); float estimate_input_power(gr_vector_const_void_star &input_items); double search_maximum(); void reset_grid(); void update_carrier_wipeoff(); void free_grid_memory(); long d_fs_in; long d_freq; int d_samples_per_ms; int d_max_dwells; unsigned int d_doppler_resolution; int d_gnuradio_forecast_samples; float d_threshold; std::string d_satellite_str; int d_config_doppler_max; int d_config_doppler_min; int d_num_doppler_points; int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex* d_carrier; gr_complex* d_fft_codes; float* d_magnitude; float** d_grid_data; gr_complex** d_grid_doppler_wipeoffs; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_input_power; float d_test_statistics; boost::shared_ptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; int d_state; bool d_active; int d_well_count; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~pcps_acquisition_fine_doppler_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_test_statistics; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_config_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void forecast (int noutput_items, gr_vector_int &ninput_items_required); }; #endif /* pcps_acquisition_fine_doppler_cc*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.h0000644000175000017500000002150212576764164030773 0ustar carlescarles/*! * \file pcps_opencl_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition * using OpenCL to offload some functions to the GPU. * * Acquisition strategy (Kay Borre book + CFAR threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform the FFT-based circular convolution (parallel time search) *
    4. Record the maximum peak and the associated synchronization parameters *
    5. Compute the test statistics and compare to the threshold *
    6. Declare positive or negative acquisition using a message queue *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkha user, 2007. pp 81-84 * * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_OPENCL_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_OPENCL_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "fft_internal.h" #include "gnss_synchro.h" #ifdef __APPLE__ #include "cl.hpp" #else #include #endif class pcps_opencl_acquisition_cc; typedef boost::shared_ptr pcps_opencl_acquisition_cc_sptr; pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition. * * Check \ref Navitec2012 "An Open Source Galileo E1 Software Receiver", * Algorithm 1, for a pseudocode description of this implementation. */ class pcps_opencl_acquisition_cc: public gr::block { private: friend pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); pcps_opencl_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); int init_opencl_environment(std::string kernel_filename); long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned int d_fft_size_pow2; int* d_max_doppler_indexs; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_codes; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; float d_input_power; float d_test_statistics; bool d_bit_transition_flag; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_core_working; bool d_dump; unsigned int d_channel; std::string d_dump_filename; gr_complex* d_zero_vector; gr_complex** d_in_buffer; std::vector d_sample_counter_buffer; unsigned int d_in_dwell_count; cl::Platform d_cl_platform; cl::Device d_cl_device; cl::Context d_cl_context; cl::Program d_cl_program; cl::Buffer* d_cl_buffer_in; cl::Buffer* d_cl_buffer_fft_codes; cl::Buffer* d_cl_buffer_1; cl::Buffer* d_cl_buffer_2; cl::Buffer* d_cl_buffer_magnitude; cl::Buffer** d_cl_buffer_grid_doppler_wipeoffs; cl::CommandQueue* d_cl_queue; clFFT_Plan d_cl_fft_plan; cl_int d_cl_fft_batch_size; int d_opencl; public: /*! * \brief Default destructor. */ ~pcps_opencl_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void acquisition_core_volk(); void acquisition_core_opencl(); }; #endif gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.h0000644000175000017500000002053612576764164031532 0ustar carlescarles/*! * \file pcps_quicksync_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search Acquisition with the * QuickSync Algorithm * * Acquisition strategy (Kay Borre book CFAR + threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform folding of the incoming signal and local generated code *
    4. Perform the FFT-based circular convolution (parallel time search) *
    5. Record the maximum peak and the associated synchronization parameters *
    6. Compute the test statistics and compare to the threshold *
    7. Declare positive or negative acquisition using a message queue *
    8. Obtain the adequate acquisition parameters by correlating the incoming * signal shifted by the possible folded delays *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkha user, 2007. pp 81-84 * * \date Jun2 2014 * \author Damian Miralles Sanchez, dmiralles2009@gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_QUICKSYNC_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_QUICKSYNC_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_quicksync_acquisition_cc; typedef boost::shared_ptr pcps_quicksync_acquisition_cc_sptr; pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc(unsigned int folding_factor, unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition with * the implementation of the Sparse QuickSync Algorithm. * * Check \ref Navitec2012 "Faster GPS via the Sparse Fourier Transform", * for details of its implementation and functionality. */ class pcps_quicksync_acquisition_cc: public gr::block { private: friend pcps_quicksync_acquisition_cc_sptr pcps_quicksync_make_acquisition_cc(unsigned int folding_factor, unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); pcps_quicksync_acquisition_cc(unsigned int folding_factor, unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); gr_complex* d_code; unsigned int d_folding_factor; // also referred in the paper as 'p' float* d_corr_acumulator; unsigned int* d_possible_delay; float* d_corr_output_f; float* d_magnitude_folded; gr_complex* d_signal_folded; gr_complex* d_code_folded; float d_noise_floor_power; long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_codes; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_fft_if2; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; float d_input_power; float d_test_statistics; bool d_bit_transition_flag; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~pcps_quicksync_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_PCPS_ACQUISITION_CC_H_*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc0000644000175000017500000004300412576764164031136 0ustar carlescarles/*! * \file pcps_cccwsr_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search acquisition * with Coherent Channel Combining With Sign Recovery scheme. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * D.Borio, C.O'Driscoll, G.Lachapelle, "Coherent, Noncoherent and * Differentially Coherent Combining Techniques for Acquisition of * New Composite GNSS Signals", IEEE Transactions On Aerospace and * Electronic Systems vol. 45 no. 3, July 2009, section IV * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_cccwsr_acquisition_cc.h" #include #include #include #include #include "gnss_signal_processing.h" #include "control_message_factory.h" using google::LogMessage; pcps_cccwsr_acquisition_cc_sptr pcps_cccwsr_make_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return pcps_cccwsr_acquisition_cc_sptr( new pcps_cccwsr_acquisition_cc(sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, queue, dump, dump_filename)); } pcps_cccwsr_acquisition_cc::pcps_cccwsr_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) : gr::block("pcps_cccwsr_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; d_fft_size = d_sampled_ms * d_samples_per_ms; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_fft_code_data = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_fft_code_pilot = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_data_correlation = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_pilot_correlation = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_correlation_plus = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_correlation_minus = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_doppler_step = 0; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_channel = 0; } pcps_cccwsr_acquisition_cc::~pcps_cccwsr_acquisition_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } volk_free(d_fft_code_data); volk_free(d_fft_code_pilot); volk_free(d_data_correlation); volk_free(d_pilot_correlation); volk_free(d_correlation_plus); volk_free(d_correlation_minus); volk_free(d_magnitude); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } } void pcps_cccwsr_acquisition_cc::set_local_code(std::complex* code_data, std::complex* code_pilot) { // Data code (E1B) memcpy(d_fft_if->get_inbuf(), code_data, sizeof(gr_complex) * d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_data,d_fft_if->get_outbuf(),d_fft_size); // Pilot code (E1C) memcpy(d_fft_if->get_inbuf(), code_pilot, sizeof(gr_complex) * d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code, volk_32fc_conjugate_32fc(d_fft_code_pilot, d_fft_if->get_outbuf(), d_fft_size); } void pcps_cccwsr_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); doppler <= static_cast(d_doppler_max); doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); } } void pcps_cccwsr_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int pcps_cccwsr_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_state = 1; } d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; } case 1: { // initialize acquisition algorithm int doppler; unsigned int indext = 0; unsigned int indext_plus = 0; unsigned int indext_minus = 0; float magt = 0.0; float magt_plus = 0.0; float magt_minus = 0.0; const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); d_sample_counter += d_fft_size; // sample counter d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= static_cast(d_fft_size); // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd data code reference (E1B) using SIMD operations // with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_data, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Copy the result of the correlation between wiped--off signal and data code in // d_data_correlation. memcpy(d_data_correlation, d_ifft->get_outbuf(), sizeof(gr_complex)*d_fft_size); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd pilot code reference (E1C) using SIMD operations // with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_pilot, d_fft_size); // Compute the inverse FFT d_ifft->execute(); // Copy the result of the correlation between wiped--off signal and pilot code in // d_data_correlation. memcpy(d_pilot_correlation, d_ifft->get_outbuf(), sizeof(gr_complex)*d_fft_size); for (unsigned int i = 0; i < d_fft_size; i++) { d_correlation_plus[i] = std::complex( d_data_correlation[i].real() - d_pilot_correlation[i].imag(), d_data_correlation[i].imag() + d_pilot_correlation[i].real()); d_correlation_minus[i] = std::complex( d_data_correlation[i].real() + d_pilot_correlation[i].imag(), d_data_correlation[i].imag() - d_pilot_correlation[i].real()); } volk_32fc_magnitude_squared_32f(d_magnitude, d_correlation_plus, d_fft_size); volk_32f_index_max_16u(&indext_plus, d_magnitude, d_fft_size); magt_plus = d_magnitude[indext_plus] / (fft_normalization_factor * fft_normalization_factor); volk_32fc_magnitude_squared_32f(d_magnitude, d_correlation_minus, d_fft_size); volk_32f_index_max_16u(&indext_minus, d_magnitude, d_fft_size); magt_minus = d_magnitude[indext_minus] / (fft_normalization_factor * fft_normalization_factor); if (magt_plus >= magt_minus) { magt = magt_plus; indext = indext_plus; } else { magt = magt_minus; indext = indext_minus; } // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; d_gnss_synchro->Acq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } // 5- Compute the test statistics and compare to the threshold //d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; d_test_statistics = d_mag / d_input_power; // 6- Declare positive or negative acquisition using a message queue if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } consume_each(1); break; } case 2: { // 6.1- Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); break; } case 3: { // 6.2- Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc0000644000175000017500000010053712576764164031137 0ustar carlescarles/*! * \file pcps_opencl_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search Acquisition * using OpenCL to offload some functions to the GPU. * * Acquisition strategy (Kay Borre book + CFAR threshold). *
      *
    1. Compute the input signal power estimation *
    2. Doppler serial search loop *
    3. Perform the FFT-based circular convolution (parallel time search) *
    4. Record the maximum peak and the associated synchronization parameters *
    5. Compute the test statistics and compare to the threshold *
    6. Declare positive or negative acquisition using a message queue *
    * * Kay Borre book: K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen, * "A Software-Defined GPS and Galileo Receiver. A Single-Frequency * Approach", Birkhauser, 2007. pp 81-84 * * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_opencl_acquisition_cc.h" #include #include #include #include #include #include #include #include #include "gnss_signal_processing.h" #include "control_message_factory.h" #include "fft_base_kernels.h" #include "fft_internal.h" using google::LogMessage; pcps_opencl_acquisition_cc_sptr pcps_make_opencl_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return pcps_opencl_acquisition_cc_sptr( new pcps_opencl_acquisition_cc(sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, bit_transition_flag, queue, dump, dump_filename)); } pcps_opencl_acquisition_cc::pcps_opencl_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) : gr::block("pcps_opencl_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_core_working = false; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; d_fft_size = d_sampled_ms * d_samples_per_ms; d_fft_size_pow2 = pow(2, ceil(log2(2 * d_fft_size))); d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_bit_transition_flag = bit_transition_flag; d_in_dwell_count = 0; d_cl_fft_batch_size = 1; d_in_buffer = new gr_complex*[d_max_dwells]; for (unsigned int i = 0; i < d_max_dwells; i++) { d_in_buffer[i] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); } d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); d_fft_codes = static_cast(volk_malloc(d_fft_size_pow2 * sizeof(gr_complex), volk_get_alignment())); d_zero_vector = static_cast(volk_malloc((d_fft_size_pow2 - d_fft_size) * sizeof(gr_complex), volk_get_alignment())); for (unsigned int i = 0; i < (d_fft_size_pow2-d_fft_size); i++) { d_zero_vector[i] = gr_complex(0.0,0.0); } d_opencl = init_opencl_environment("math_kernel.cl"); if (d_opencl != 0) { // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); } // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; } pcps_opencl_acquisition_cc::~pcps_opencl_acquisition_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } for (unsigned int i = 0; i < d_max_dwells; i++) { volk_free(d_in_buffer[i]); } delete[] d_in_buffer; volk_free(d_fft_codes); volk_free(d_magnitude); volk_free(d_zero_vector); if (d_opencl == 0) { delete d_cl_queue; delete d_cl_buffer_in; delete d_cl_buffer_1; delete d_cl_buffer_2; delete d_cl_buffer_magnitude; delete d_cl_buffer_fft_codes; if(d_num_doppler_bins > 0) { delete[] d_cl_buffer_grid_doppler_wipeoffs; } clFFT_DestroyPlan(d_cl_fft_plan); } else { delete d_ifft; delete d_fft_if; } if (d_dump) { d_dump_file.close(); } } int pcps_opencl_acquisition_cc::init_opencl_environment(std::string kernel_filename) { //get all platforms (drivers) std::vector all_platforms; cl::Platform::get(&all_platforms); if(all_platforms.size()==0) { std::cout << "No OpenCL platforms found. Check OpenCL installation!" << std::endl; return 1; } d_cl_platform = all_platforms[0]; //get default platform std::cout << "Using platform: " << d_cl_platform.getInfo() << std::endl; //get default GPU device of the default platform std::vector gpu_devices; d_cl_platform.getDevices(CL_DEVICE_TYPE_GPU, &gpu_devices); if(gpu_devices.size()==0) { std::cout << "No GPU devices found. Check OpenCL installation!" << std::endl; return 2; } d_cl_device = gpu_devices[0]; std::vector device; device.push_back(d_cl_device); std::cout << "Using device: " << d_cl_device.getInfo() << std::endl; cl::Context context(device); d_cl_context = context; // build the program from the source in the file std::ifstream kernel_file(kernel_filename, std::ifstream::in); std::string kernel_code(std::istreambuf_iterator(kernel_file), (std::istreambuf_iterator())); kernel_file.close(); // std::cout << "Kernel code: \n" << kernel_code << std::endl; cl::Program::Sources sources; sources.push_back({kernel_code.c_str(),kernel_code.length()}); cl::Program program(context,sources); if(program.build(device)!=CL_SUCCESS) { std::cout << " Error building: " << program.getBuildInfo(device[0]) << std::endl; return 3; } d_cl_program = program; // create buffers on the device d_cl_buffer_in = new cl::Buffer(d_cl_context, CL_MEM_READ_WRITE, sizeof(gr_complex)*d_fft_size); d_cl_buffer_fft_codes = new cl::Buffer(d_cl_context, CL_MEM_READ_WRITE, sizeof(gr_complex)*d_fft_size_pow2); d_cl_buffer_1 = new cl::Buffer(d_cl_context, CL_MEM_READ_WRITE, sizeof(gr_complex)*d_fft_size_pow2); d_cl_buffer_2 = new cl::Buffer(d_cl_context, CL_MEM_READ_WRITE, sizeof(gr_complex)*d_fft_size_pow2); d_cl_buffer_magnitude = new cl::Buffer(d_cl_context, CL_MEM_READ_WRITE, sizeof(float)*d_fft_size); //create queue to which we will push commands for the device. d_cl_queue = new cl::CommandQueue(d_cl_context,d_cl_device); //create FFT plan cl_int err; clFFT_Dim3 dim = {d_fft_size_pow2, 1, 1}; d_cl_fft_plan = clFFT_CreatePlan(d_cl_context(), dim, clFFT_1D, clFFT_InterleavedComplexFormat, &err); if (err != 0) { delete d_cl_queue; delete d_cl_buffer_in; delete d_cl_buffer_1; delete d_cl_buffer_2; delete d_cl_buffer_magnitude; delete d_cl_buffer_fft_codes; std::cout << "Error creating OpenCL FFT plan." << std::endl; return 4; } return 0; } void pcps_opencl_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); doppler <= static_cast(d_doppler_max); doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; if (d_opencl == 0) { d_cl_buffer_grid_doppler_wipeoffs = new cl::Buffer*[d_num_doppler_bins]; } for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler= -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); if (d_opencl == 0) { d_cl_buffer_grid_doppler_wipeoffs[doppler_index] = new cl::Buffer(d_cl_context, CL_MEM_READ_WRITE, sizeof(gr_complex)*d_fft_size); d_cl_queue->enqueueWriteBuffer(*(d_cl_buffer_grid_doppler_wipeoffs[doppler_index]), CL_TRUE, 0, sizeof(gr_complex)*d_fft_size, d_grid_doppler_wipeoffs[doppler_index]); } } // zero padding in buffer_1 (FFT input) if (d_opencl == 0) { d_cl_queue->enqueueWriteBuffer(*d_cl_buffer_1, CL_TRUE, sizeof(gr_complex)*d_fft_size, sizeof(gr_complex)*(d_fft_size_pow2 - d_fft_size), d_zero_vector); } } void pcps_opencl_acquisition_cc::set_local_code(std::complex * code) { if(d_opencl == 0) { d_cl_queue->enqueueWriteBuffer(*d_cl_buffer_2, CL_TRUE, 0, sizeof(gr_complex)*d_fft_size, code); d_cl_queue->enqueueWriteBuffer(*d_cl_buffer_2, CL_TRUE, sizeof(gr_complex)*d_fft_size, sizeof(gr_complex)*(d_fft_size_pow2 - 2*d_fft_size), d_zero_vector); d_cl_queue->enqueueWriteBuffer(*d_cl_buffer_2, CL_TRUE, sizeof(gr_complex) *(d_fft_size_pow2 - d_fft_size), sizeof(gr_complex)*d_fft_size, code); clFFT_ExecuteInterleaved((*d_cl_queue)(), d_cl_fft_plan, d_cl_fft_batch_size, clFFT_Forward, (*d_cl_buffer_2)(), (*d_cl_buffer_2)(), 0, NULL, NULL); //Conjucate the local code cl::Kernel kernel = cl::Kernel(d_cl_program, "conj_vector"); kernel.setArg(0, *d_cl_buffer_2); //input kernel.setArg(1, *d_cl_buffer_fft_codes); //output d_cl_queue->enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(d_fft_size_pow2), cl::NullRange); } else { memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex)*d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } } void pcps_opencl_acquisition_cc::acquisition_core_volk() { // initialize acquisition algorithm int doppler; unsigned int indext = 0; float magt = 0.0; float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); gr_complex* in = d_in_buffer[d_well_count]; unsigned long int samplestamp = d_sample_counter_buffer[d_well_count]; d_input_power = 0.0; d_mag = 0.0; d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= static_cast(d_fft_size); // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Search maximum volk_32fc_magnitude_squared_32f(d_magnitude, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext, d_magnitude, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt = d_magnitude[indext] / (fft_normalization_factor * fft_normalization_factor); // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; // In case that d_bit_transition_flag = true, we compare the potentially // new maximum test statistics (d_mag/d_input_power) with the value in // d_test_statistics. When the second dwell is being processed, the value // of d_mag/d_input_power could be lower than d_test_statistics (i.e, // the maximum test statistics in the previous dwell is greater than // current d_mag/d_input_power). Note that d_test_statistics is not // restarted between consecutive dwells in multidwell operation. if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag) { d_gnss_synchro->Acq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = samplestamp; // 5- Compute the test statistics and compare to the threshold //d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; d_test_statistics = d_mag / d_input_power; } } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } if (!d_bit_transition_flag) { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } } else { if (d_well_count == d_max_dwells) // d_max_dwells = 2 { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else { d_state = 3; // Negative acquisition } } } d_core_working = false; } void pcps_opencl_acquisition_cc::acquisition_core_opencl() { // initialize acquisition algorithm int doppler; unsigned int indext = 0; float magt = 0.0; float fft_normalization_factor = (static_cast(d_fft_size_pow2) * static_cast(d_fft_size)); //This works, but I am not sure why. gr_complex* in = d_in_buffer[d_well_count]; unsigned long int samplestamp = d_sample_counter_buffer[d_well_count]; d_input_power = 0.0; d_mag = 0.0; // write input vector in buffer of OpenCL device d_cl_queue->enqueueWriteBuffer(*d_cl_buffer_in, CL_TRUE, 0, sizeof(gr_complex)*d_fft_size, in); d_well_count++; // struct timeval tv; // long long int begin = 0; // long long int end = 0; // gettimeofday(&tv, NULL); // begin = tv.tv_sec *1e6 + tv.tv_usec; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= static_cast(d_fft_size); cl::Kernel kernel; // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step*doppler_index; //Multiply input signal with doppler wipe-off kernel = cl::Kernel(d_cl_program, "mult_vectors"); kernel.setArg(0, *d_cl_buffer_in); //input 1 kernel.setArg(1, *d_cl_buffer_grid_doppler_wipeoffs[doppler_index]); //input 2 kernel.setArg(2, *d_cl_buffer_1); //output d_cl_queue->enqueueNDRangeKernel(kernel,cl::NullRange, cl::NDRange(d_fft_size), cl::NullRange); // In the previous operation, we store the result in the first d_fft_size positions // of d_cl_buffer_1. The rest d_fft_size_pow2-d_fft_size already have zeros // (zero-padding is made in init() for optimization purposes). clFFT_ExecuteInterleaved((*d_cl_queue)(), d_cl_fft_plan, d_cl_fft_batch_size, clFFT_Forward,(*d_cl_buffer_1)(), (*d_cl_buffer_2)(), 0, NULL, NULL); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference kernel = cl::Kernel(d_cl_program, "mult_vectors"); kernel.setArg(0, *d_cl_buffer_2); //input 1 kernel.setArg(1, *d_cl_buffer_fft_codes); //input 2 kernel.setArg(2, *d_cl_buffer_2); //output d_cl_queue->enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(d_fft_size_pow2), cl::NullRange); // compute the inverse FFT clFFT_ExecuteInterleaved((*d_cl_queue)(), d_cl_fft_plan, d_cl_fft_batch_size, clFFT_Inverse, (*d_cl_buffer_2)(), (*d_cl_buffer_2)(), 0, NULL, NULL); // Compute magnitude kernel = cl::Kernel(d_cl_program, "magnitude_squared"); kernel.setArg(0, *d_cl_buffer_2); //input 1 kernel.setArg(1, *d_cl_buffer_magnitude); //output d_cl_queue->enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(d_fft_size), cl::NullRange); // This is the only function that blocks this thread until all previously enqueued // OpenCL commands are completed. d_cl_queue->enqueueReadBuffer(*d_cl_buffer_magnitude, CL_TRUE, 0, sizeof(float)*d_fft_size,d_magnitude); // Search maximum // @TODO: find an efficient way to search the maximum with OpenCL in the GPU. volk_32f_index_max_16u(&indext, d_magnitude, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt = d_magnitude[indext] / (fft_normalization_factor * fft_normalization_factor); // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; // In case that d_bit_transition_flag = true, we compare the potentially // new maximum test statistics (d_mag/d_input_power) with the value in // d_test_statistics. When the second dwell is being processed, the value // of d_mag/d_input_power could be lower than d_test_statistics (i.e, // the maximum test statistics in the previous dwell is greater than // current d_mag/d_input_power). Note that d_test_statistics is not // restarted between consecutive dwells in multidwell operation. if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag) { d_gnss_synchro->Acq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = samplestamp; // 5- Compute the test statistics and compare to the threshold //d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; d_test_statistics = d_mag / d_input_power; } } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System << "_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } // gettimeofday(&tv, NULL); // end = tv.tv_sec *1e6 + tv.tv_usec; // std::cout << "Acq time = " << (end-begin) << " us" << std::endl; if (!d_bit_transition_flag) { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } } else { if (d_well_count == d_max_dwells) // d_max_dwells = 2 { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else { d_state = 3; // Negative acquisition } } } d_core_working = false; } void pcps_multithread_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_in_dwell_count = 0; d_sample_counter_buffer.clear(); } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int pcps_opencl_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_in_dwell_count = 0; d_sample_counter_buffer.clear(); d_state = 1; } d_sample_counter += d_fft_size * ninput_items[0]; // sample counter break; } case 1: { if (d_in_dwell_count < d_max_dwells) { // Fill internal buffer with d_max_dwells signal blocks. This step ensures that // consecutive signal blocks will be processed in multi-dwell operation. This is // essential when d_bit_transition_flag = true. unsigned int num_dwells = std::min(static_cast(d_max_dwells-d_in_dwell_count), ninput_items[0]); for (unsigned int i = 0; i < num_dwells; i++) { memcpy(d_in_buffer[d_in_dwell_count++], (gr_complex*)input_items[i], sizeof(gr_complex)*d_fft_size); d_sample_counter += d_fft_size; d_sample_counter_buffer.push_back(d_sample_counter); } if (ninput_items[0] > static_cast(num_dwells)) { d_sample_counter += d_fft_size * (ninput_items[0] - num_dwells); } } else { // We already have d_max_dwells consecutive blocks in the internal buffer, // just skip input blocks. d_sample_counter += d_fft_size * ninput_items[0]; } // We create a new thread to process next block if the following // conditions are fulfilled: // 1. There are new blocks in d_in_buffer that have not been processed yet // (d_well_count < d_in_dwell_count). // 2. No other acquisition_core thead is working (!d_core_working). // 3. d_state==1. We need to check again d_state because it can be modified at any // moment by the external thread (may have changed since checked in the switch()). // If the external thread has already declared positive (d_state=2) or negative // (d_state=3) acquisition, we don't have to process next block!! if ((d_well_count < d_in_dwell_count) && !d_core_working && d_state == 1) { d_core_working = true; if (d_opencl == 0) { // Use OpenCL implementation boost::thread(&pcps_opencl_acquisition_cc::acquisition_core_opencl, this); } else { // Use Volk implementation boost::thread(&pcps_opencl_acquisition_cc::acquisition_core_volk, this); } } break; } case 2: { // Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); break; } case 3: { // Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } consume_each(ninput_items[0]); return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc0000644000175000017500000003776012576764164027606 0ustar carlescarles/*! * \file pcps_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search Acquisition * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "pcps_acquisition_cc.h" #include #include #include #include #include #include "gnss_signal_processing.h" #include "control_message_factory.h" using google::LogMessage; pcps_acquisition_cc_sptr pcps_make_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return pcps_acquisition_cc_sptr( new pcps_acquisition_cc(sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, bit_transition_flag, queue, dump, dump_filename)); } pcps_acquisition_cc::pcps_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) : gr::block("pcps_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; d_fft_size = d_sampled_ms * d_samples_per_ms; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_bit_transition_flag = bit_transition_flag; d_threshold = 0.0; d_doppler_step = 250; d_code_phase = 0; d_test_statistics = 0.0; d_channel = 0; d_doppler_freq = 0.0; d_fft_codes = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_gnss_synchro = 0; d_channel_internal_queue = 0; d_grid_doppler_wipeoffs = 0; } pcps_acquisition_cc::~pcps_acquisition_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } volk_free(d_fft_codes); volk_free(d_magnitude); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } } void pcps_acquisition_cc::set_local_code(std::complex * code) { memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex) * d_fft_size); d_fft_if->execute(); // We need the FFT of local code volk_32fc_conjugate_32fc(d_fft_codes, d_fft_if->get_outbuf(), d_fft_size); } void pcps_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; d_num_doppler_bins = ceil( static_cast(static_cast(d_doppler_max) - static_cast(-d_doppler_max)) / static_cast(d_doppler_step)); // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen(d_grid_doppler_wipeoffs[doppler_index], d_freq - doppler, d_fs_in, d_fft_size); } } void pcps_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int pcps_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { /* * By J.Arribas, L.Esteve and M.Molina * Acquisition strategy (Kay Borre book + CFAR threshold): * 1. Compute the input signal power estimation * 2. Doppler serial search loop * 3. Perform the FFT-based circular convolution (parallel time search) * 4. Record the maximum peak and the associated synchronization parameters * 5. Compute the test statistics and compare to the threshold * 6. Declare positive or negative acquisition using a message queue */ int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_state = 1; } d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; } case 1: { // initialize acquisition algorithm int doppler; unsigned int indext = 0; float magt = 0.0; const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); d_input_power = 0.0; d_mag = 0.0; d_sample_counter += d_fft_size; // sample counter d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= static_cast(d_fft_size); // 2- Doppler frequency search loop for (unsigned int doppler_index=0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code reference using SIMD operations with VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Search maximum volk_32fc_magnitude_squared_32f(d_magnitude, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext, d_magnitude, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt = d_magnitude[indext] / (fft_normalization_factor * fft_normalization_factor); // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; // In case that d_bit_transition_flag = true, we compare the potentially // new maximum test statistics (d_mag/d_input_power) with the value in // d_test_statistics. When the second dwell is being processed, the value // of d_mag/d_input_power could be lower than d_test_statistics (i.e, // the maximum test statistics in the previous dwell is greater than // current d_mag/d_input_power). Note that d_test_statistics is not // restarted between consecutive dwells in multidwell operation. if (d_test_statistics < (d_mag / d_input_power) || !d_bit_transition_flag) { d_gnss_synchro->Acq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // 5- Compute the test statistics and compare to the threshold //d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; d_test_statistics = d_mag / d_input_power; } } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } if (!d_bit_transition_flag) { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } } else { if (d_well_count == d_max_dwells) // d_max_dwells = 2 { if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else { d_state = 3; // Negative acquisition } } } consume_each(1); break; } case 2: { // 6.1- Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); break; } case 3: { // 6.2- Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.h0000644000175000017500000001675712576764164031017 0ustar carlescarles/*! * \file pcps_cccwsr_acquisition_cc.h * \brief This class implements a Parallel Code Phase Search acquisition * with Coherent Channel Combining With Sign Recovery scheme. * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * D.Borio, C.O'Driscoll, G.Lachapelle, "Coherent, Noncoherent and * Differentially Coherent Combining Techniques for Acquisition of * New Composite GNSS Signals", IEEE Transactions On Aerospace and * Electronic Systems vol. 45 no. 3, July 2009, section IV * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PCPS_CCCWSR_ACQUISITION_CC_H_ #define GNSS_SDR_PCPS_CCCWSR_ACQUISITION_CC_H_ #include #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class pcps_cccwsr_acquisition_cc; typedef boost::shared_ptr pcps_cccwsr_acquisition_cc_sptr; pcps_cccwsr_acquisition_cc_sptr pcps_cccwsr_make_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); /*! * \brief This class implements a Parallel Code Phase Search Acquisition with * Coherent Channel Combining With Sign Recovery scheme. */ class pcps_cccwsr_acquisition_cc: public gr::block { private: friend pcps_cccwsr_acquisition_cc_sptr pcps_cccwsr_make_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); pcps_cccwsr_acquisition_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); long d_fs_in; long d_freq; int d_samples_per_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_sampled_ms; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_code_data; gr_complex* d_fft_code_pilot; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitude; gr_complex* d_data_correlation; gr_complex* d_pilot_correlation; gr_complex* d_correlation_plus; gr_complex* d_correlation_minus; float d_input_power; float d_test_statistics; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_dump; unsigned int d_channel; std::string d_dump_filename; public: /*! * \brief Default destructor. */ ~pcps_cccwsr_acquisition_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for CCCWSR acquisition algorithm. * \param data_code - Pointer to the data PRN code. * \param pilot_code - Pointer to the pilot PRN code. */ void set_local_code(std::complex * code_data, std::complex * code_pilot); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of CCCWSR algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Coherent Channel Combining With Sign Recovery Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GNSS_SDR_PCPS_CCCWSR_ACQUISITION_CC_H_*/ gnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc0000644000175000017500000003745612576764164032073 0ustar carlescarles/*! * \file galileo_pcps_8ms_acquisition_cc.cc * \brief This class implements a Parallel Code Phase Search Acquisition for * Galileo E1 signals with coherent integration time = 8 ms (two codes) * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_pcps_8ms_acquisition_cc.h" #include #include #include #include #include "gnss_signal_processing.h" #include "control_message_factory.h" using google::LogMessage; galileo_pcps_8ms_acquisition_cc_sptr galileo_pcps_8ms_make_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) { return galileo_pcps_8ms_acquisition_cc_sptr( new galileo_pcps_8ms_acquisition_cc(sampled_ms, max_dwells, doppler_max, freq, fs_in, samples_per_ms, samples_per_code, queue, dump, dump_filename)); } galileo_pcps_8ms_acquisition_cc::galileo_pcps_8ms_acquisition_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, gr::msg_queue::sptr queue, bool dump, std::string dump_filename) : gr::block("galileo_pcps_8ms_acquisition_cc", gr::io_signature::make(1, 1, sizeof(gr_complex) * sampled_ms * samples_per_ms), gr::io_signature::make(0, 0, sizeof(gr_complex) * sampled_ms * samples_per_ms)) { d_sample_counter = 0; // SAMPLE COUNTER d_active = false; d_state = 0; d_queue = queue; d_freq = freq; d_fs_in = fs_in; d_samples_per_ms = samples_per_ms; d_samples_per_code = samples_per_code; d_sampled_ms = sampled_ms; d_max_dwells = max_dwells; d_well_count = 0; d_doppler_max = doppler_max; d_fft_size = d_sampled_ms * d_samples_per_ms; d_mag = 0; d_input_power = 0.0; d_num_doppler_bins = 0; d_fft_code_A = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_fft_code_B = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); d_magnitude = static_cast(volk_malloc(d_fft_size * sizeof(float), volk_get_alignment())); // Direct FFT d_fft_if = new gr::fft::fft_complex(d_fft_size, true); // Inverse FFT d_ifft = new gr::fft::fft_complex(d_fft_size, false); // For dumping samples into a file d_dump = dump; d_dump_filename = dump_filename; d_doppler_resolution = 0; d_threshold = 0; d_doppler_step = 0; d_grid_doppler_wipeoffs = 0; d_gnss_synchro = 0; d_code_phase = 0; d_doppler_freq = 0; d_test_statistics = 0; d_channel_internal_queue = 0; d_channel = 0; } galileo_pcps_8ms_acquisition_cc::~galileo_pcps_8ms_acquisition_cc() { if (d_num_doppler_bins > 0) { for (unsigned int i = 0; i < d_num_doppler_bins; i++) { volk_free(d_grid_doppler_wipeoffs[i]); } delete[] d_grid_doppler_wipeoffs; } volk_free(d_fft_code_A); volk_free(d_fft_code_B); volk_free(d_magnitude); delete d_ifft; delete d_fft_if; if (d_dump) { d_dump_file.close(); } } void galileo_pcps_8ms_acquisition_cc::set_local_code(std::complex * code) { // code A: two replicas of a primary code memcpy(d_fft_if->get_inbuf(), code, sizeof(gr_complex)*d_fft_size); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_A, d_fft_if->get_outbuf(), d_fft_size); // code B: two replicas of a primary code; the second replica is inverted. volk_32fc_s32fc_multiply_32fc(&(d_fft_if->get_inbuf())[d_samples_per_code], &code[d_samples_per_code], gr_complex(-1,0), d_samples_per_code); d_fft_if->execute(); // We need the FFT of local code //Conjugate the local code volk_32fc_conjugate_32fc(d_fft_code_B, d_fft_if->get_outbuf(), d_fft_size); } void galileo_pcps_8ms_acquisition_cc::init() { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_mag = 0.0; d_input_power = 0.0; // Count the number of bins d_num_doppler_bins = 0; for (int doppler = static_cast(-d_doppler_max); doppler <= static_cast(d_doppler_max); doppler += d_doppler_step) { d_num_doppler_bins++; } // Create the carrier Doppler wipeoff signals d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins]; for (unsigned int doppler_index=0; doppler_index < d_num_doppler_bins; doppler_index++) { d_grid_doppler_wipeoffs[doppler_index] = static_cast(volk_malloc(d_fft_size * sizeof(gr_complex), volk_get_alignment())); int doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; complex_exp_gen_conj(d_grid_doppler_wipeoffs[doppler_index], d_freq + doppler, d_fs_in, d_fft_size); } } void galileo_pcps_8ms_acquisition_cc::set_state(int state) { d_state = state; if (d_state == 1) { d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; } else if (d_state == 0) {} else { LOG(ERROR) << "State can only be set to 0 or 1"; } } int galileo_pcps_8ms_acquisition_cc::general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL switch (d_state) { case 0: { if (d_active) { //restart acquisition variables d_gnss_synchro->Acq_delay_samples = 0.0; d_gnss_synchro->Acq_doppler_hz = 0.0; d_gnss_synchro->Acq_samplestamp_samples = 0; d_well_count = 0; d_mag = 0.0; d_input_power = 0.0; d_test_statistics = 0.0; d_state = 1; } d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); break; } case 1: { // initialize acquisition algorithm int doppler; unsigned int indext = 0; unsigned int indext_A = 0; unsigned int indext_B = 0; float magt = 0.0; float magt_A = 0.0; float magt_B = 0.0; const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer float fft_normalization_factor = static_cast(d_fft_size) * static_cast(d_fft_size); d_input_power = 0.0; d_mag = 0.0; d_sample_counter += d_fft_size; // sample counter d_well_count++; DLOG(INFO) << "Channel: " << d_channel << " , doing acquisition of satellite: " << d_gnss_synchro->System << " "<< d_gnss_synchro->PRN << " ,sample stamp: " << d_sample_counter << ", threshold: " << d_threshold << ", doppler_max: " << d_doppler_max << ", doppler_step: " << d_doppler_step; // 1- Compute the input signal power estimation volk_32fc_magnitude_squared_32f(d_magnitude, in, d_fft_size); volk_32f_accumulator_s32f(&d_input_power, d_magnitude, d_fft_size); d_input_power /= static_cast(d_fft_size); // 2- Doppler frequency search loop for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++) { // doppler search steps doppler = -static_cast(d_doppler_max) + d_doppler_step * doppler_index; volk_32fc_x2_multiply_32fc(d_fft_if->get_inbuf(), in, d_grid_doppler_wipeoffs[doppler_index], d_fft_size); // 3- Perform the FFT-based convolution (parallel time search) // Compute the FFT of the carrier wiped--off incoming signal d_fft_if->execute(); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code A reference using SIMD operations with // VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_A, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Search maximum volk_32fc_magnitude_squared_32f(d_magnitude, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext_A, d_magnitude, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt_A = d_magnitude[indext_A] / (fft_normalization_factor * fft_normalization_factor); // Multiply carrier wiped--off, Fourier transformed incoming signal // with the local FFT'd code B reference using SIMD operations with // VOLK library volk_32fc_x2_multiply_32fc(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_code_B, d_fft_size); // compute the inverse FFT d_ifft->execute(); // Search maximum volk_32fc_magnitude_squared_32f(d_magnitude, d_ifft->get_outbuf(), d_fft_size); volk_32f_index_max_16u(&indext_B, d_magnitude, d_fft_size); // Normalize the maximum value to correct the scale factor introduced by FFTW magt_B = d_magnitude[indext_B] / (fft_normalization_factor * fft_normalization_factor); // Take the greater magnitude if (magt_A >= magt_B) { magt = magt_A; indext = indext_A; } else { magt = magt_B; indext = indext_B; } // 4- record the maximum peak and the associated synchronization parameters if (d_mag < magt) { d_mag = magt; d_gnss_synchro->Acq_delay_samples = static_cast(indext % d_samples_per_code); d_gnss_synchro->Acq_doppler_hz = static_cast(doppler); d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; } // Record results to file if required if (d_dump) { std::stringstream filename; std::streamsize n = 2 * sizeof(float) * (d_fft_size); // complex file write filename.str(""); filename << "../data/test_statistics_" << d_gnss_synchro->System <<"_" << d_gnss_synchro->Signal << "_sat_" << d_gnss_synchro->PRN << "_doppler_" << doppler << ".dat"; d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); d_dump_file.write((char*)d_ifft->get_outbuf(), n); //write directly |abs(x)|^2 in this Doppler bin? d_dump_file.close(); } } // 5- Compute the test statistics and compare to the threshold //d_test_statistics = 2 * d_fft_size * d_mag / d_input_power; d_test_statistics = d_mag / d_input_power; if (d_test_statistics > d_threshold) { d_state = 2; // Positive acquisition } else if (d_well_count == d_max_dwells) { d_state = 3; // Negative acquisition } consume_each(1); break; } case 2: { // 6.1- Declare positive acquisition using a message queue DLOG(INFO) << "positive acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 1; d_channel_internal_queue->push(acquisition_message); break; } case 3: { // 6.2- Declare negative acquisition using a message queue DLOG(INFO) << "negative acquisition"; DLOG(INFO) << "satellite " << d_gnss_synchro->System << " " << d_gnss_synchro->PRN; DLOG(INFO) << "sample_stamp " << d_sample_counter; DLOG(INFO) << "test statistics value " << d_test_statistics; DLOG(INFO) << "test statistics threshold " << d_threshold; DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples; DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz; DLOG(INFO) << "magnitude " << d_mag; DLOG(INFO) << "input signal power " << d_input_power; d_active = false; d_state = 0; d_sample_counter += d_fft_size * ninput_items[0]; // sample counter consume_each(ninput_items[0]); acquisition_message = 2; d_channel_internal_queue->push(acquisition_message); break; } } return noutput_items; } ././@LongLink0000644000000000000000000000015200000000000011601 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.hgnss-sdr-0.0.6/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf0000644000175000017500000002101412576764164033643 0ustar carlescarles/*! * \file galileo_e5a_noncoherent_iq_acquisition_caf_cc.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E5a data and pilot Signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GALILEO_E5A_NONCOHERENT_IQ_ACQUISITION_CAF_CC_H_ #define GALILEO_E5A_NONCOHERENT_IQ_ACQUISITION_CAF_CC_H_ #include #include #include #include #include #include #include #include #include #include "concurrent_queue.h" #include "gnss_synchro.h" class galileo_e5a_noncoherentIQ_acquisition_caf_cc; typedef boost::shared_ptr galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr; galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc(unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename, bool both_signal_components_, int CAF_window_hz_, int Zero_padding_); /*! * \brief This class implements a Parallel Code Phase Search Acquisition. * * Check \ref Navitec2012 "An Open Source Galileo E1 Software Receiver", * Algorithm 1, for a pseudocode description of this implementation. */ class galileo_e5a_noncoherentIQ_acquisition_caf_cc: public gr::block { private: friend galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr galileo_e5a_noncoherentIQ_make_acquisition_caf_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename, bool both_signal_components_, int CAF_window_hz_, int Zero_padding_); galileo_e5a_noncoherentIQ_acquisition_caf_cc( unsigned int sampled_ms, unsigned int max_dwells, unsigned int doppler_max, long freq, long fs_in, int samples_per_ms, int samples_per_code, bool bit_transition_flag, gr::msg_queue::sptr queue, bool dump, std::string dump_filename, bool both_signal_components_, int CAF_window_hz_, int Zero_padding_); void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift, int doppler_offset); float estimate_input_power(gr_complex *in ); long d_fs_in; long d_freq; int d_samples_per_ms; int d_sampled_ms; int d_samples_per_code; unsigned int d_doppler_resolution; float d_threshold; std::string d_satellite_str; unsigned int d_doppler_max; unsigned int d_doppler_step; unsigned int d_max_dwells; unsigned int d_well_count; unsigned int d_fft_size; unsigned long int d_sample_counter; gr_complex** d_grid_doppler_wipeoffs; unsigned int d_num_doppler_bins; gr_complex* d_fft_code_I_A; gr_complex* d_fft_code_I_B; gr_complex* d_fft_code_Q_A; gr_complex* d_fft_code_Q_B; gr_complex* d_inbuffer; gr::fft::fft_complex* d_fft_if; gr::fft::fft_complex* d_ifft; Gnss_Synchro *d_gnss_synchro; unsigned int d_code_phase; float d_doppler_freq; float d_mag; float* d_magnitudeIA; float* d_magnitudeIB; float* d_magnitudeQA; float* d_magnitudeQB; float d_input_power; float d_test_statistics; bool d_bit_transition_flag; gr::msg_queue::sptr d_queue; concurrent_queue *d_channel_internal_queue; std::ofstream d_dump_file; bool d_active; int d_state; bool d_dump; bool d_both_signal_components; // bool d_CAF_filter; int d_CAF_window_hz; float* d_CAF_vector; float* d_CAF_vector_I; float* d_CAF_vector_Q; // double* d_CAF_vector; // double* d_CAF_vector_I; // double* d_CAF_vector_Q; unsigned int d_channel; std::string d_dump_filename; unsigned int d_buffer_count; unsigned int d_gr_stream_buffer; public: /*! * \brief Default destructor. */ ~galileo_e5a_noncoherentIQ_acquisition_caf_cc(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to exchange synchronization data between acquisition and tracking blocks. * \param p_gnss_synchro Satellite information shared by the processing blocks. */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) { d_gnss_synchro = p_gnss_synchro; } /*! * \brief Returns the maximum peak of grid search. */ unsigned int mag() { return d_mag; } /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for PCPS acquisition algorithm. * \param code - Pointer to the PRN code. */ void set_local_code(std::complex * code, std::complex * codeQ); /*! * \brief Starts acquisition algorithm, turning from standby mode to * active mode * \param active - bool that activates/deactivates the block. */ void set_active(bool active) { d_active = active; } /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); /*! * \brief Set acquisition channel unique ID * \param channel - receiver channel. */ void set_channel(unsigned int channel) { d_channel = channel; } /*! * \brief Set statistics threshold of PCPS algorithm. * \param threshold - Threshold for signal detection (check \ref Navitec2012, * Algorithm 1, for a definition of this threshold). */ void set_threshold(float threshold) { d_threshold = threshold; } /*! * \brief Set maximum Doppler grid search * \param doppler_max - Maximum Doppler shift considered in the grid search [Hz]. */ void set_doppler_max(unsigned int doppler_max) { d_doppler_max = doppler_max; } /*! * \brief Set Doppler steps for the grid search * \param doppler_step - Frequency bin of the search grid [Hz]. */ void set_doppler_step(unsigned int doppler_step) { d_doppler_step = doppler_step; } /*! * \brief Set tracking channel internal queue. * \param channel_internal_queue - Channel's internal blocks information queue. */ void set_channel_queue(concurrent_queue *channel_internal_queue) { d_channel_internal_queue = channel_internal_queue; } /*! * \brief Parallel Code Phase Search Acquisition signal processing. */ int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif /* GALILEO_E5A_NONCOHERENT_IQ_ACQUISITION_CAF_CC_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/CMakeLists.txt0000644000175000017500000000143412576764164022635 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/0000755000175000017500000000000012576764164021676 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.h0000644000175000017500000001156712576764164027220 0ustar carlescarles/*! * \file gps_l2_m_pcps_acquisition.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L2 M signals * \authors
      *
    • Javier Arribas, 2015. jarribas(at)cttc.es *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L2_M_PCPS_ACQUISITION_H_ #define GNSS_SDR_GPS_L2_M_PCPS_ACQUISITION_H_ #include #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_acquisition_cc.h" #include "cshort_to_float_x2.h" #include "complex_byte_to_float_x2.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS acquisition block to an AcquisitionInterface * for GPS L2 M signals */ class GpsL2MPcpsAcquisition: public AcquisitionInterface { public: GpsL2MPcpsAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL2MPcpsAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L2_M_PCPS_Acquisition" */ std::string implementation() { return "GPS_L2_M_PCPS_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for GPS L2/M PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; gr::blocks::float_to_complex::sptr float_to_complex_; cshort_to_float_x2_sptr cshort_to_float_x2_; complex_byte_to_float_x2_sptr cbyte_to_float_x2_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GPS_L2_M_PCPS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_multithread_acquisition.cc0000644000175000017500000002036512576764164032102 0ustar carlescarles/*! * \file gps_l1_ca_pcps_multithread_acquisition.cc * \brief Adapts a multithread PCPS acquisition block to an * AcquisitionInterface for GPS L1 C/A signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_multithread_acquisition.h" #include #include #include #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsMultithreadAcquisition::GpsL1CaPcpsMultithreadAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); bit_transition_flag_ = configuration_->property("Acquisition.bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- code_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * sampled_ms_; code_= new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_multithread_acquisition_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, code_length_, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GpsL1CaPcpsMultithreadAcquisition::~GpsL1CaPcpsMultithreadAcquisition() { delete[] code_; } void GpsL1CaPcpsMultithreadAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GpsL1CaPcpsMultithreadAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_ + boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa == 0.0) { pfa = configuration_->property(role_+".pfa", 0.0); } if(pfa == 0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GpsL1CaPcpsMultithreadAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GpsL1CaPcpsMultithreadAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GpsL1CaPcpsMultithreadAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GpsL1CaPcpsMultithreadAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GpsL1CaPcpsMultithreadAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GpsL1CaPcpsMultithreadAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsMultithreadAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { std::complex* code = new std::complex[code_length_]; gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); for (unsigned int i = 0; i < sampled_ms_; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; } } void GpsL1CaPcpsMultithreadAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } float GpsL1CaPcpsMultithreadAcquisition::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel "<< channel_ << " Pfa = " << pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GpsL1CaPcpsMultithreadAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GpsL1CaPcpsMultithreadAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GpsL1CaPcpsMultithreadAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GpsL1CaPcpsMultithreadAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.h0000644000175000017500000001051012576764164031230 0ustar carlescarles/*! * \file gps_l1_ca_pcps_assisted_acquisition.h * \brief Adapts a PCPS Assisted acquisition block to an AcquisitionInterface for * GPS L1 C/A signals * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PCPS_ASSISTED_ACQUISITION_H_ #define GNSS_SDR_GPS_L1_CA_PCPS_ASSISTED_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_assisted_acquisition_cc.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS acquisition block to an AcquisitionInterface * for GPS L1 C/A signals */ class GpsL1CaPcpsAssistedAcquisition: public AcquisitionInterface { public: GpsL1CaPcpsAssistedAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsAssistedAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_Assisted_Acquisition" */ std::string implementation() { return "GPS_L1_CA_PCPS_Assisted_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); private: pcps_assisted_acquisition_cc_sptr acquisition_cc_; size_t item_size_; std::string item_type_; unsigned int vector_length_; //unsigned int satellite_; unsigned int channel_; float threshold_; int doppler_max_; unsigned int doppler_step_; int doppler_min_; unsigned int sampled_ms_; int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif /* GNSS_SDR_GPS_L1_CA_PCPS_ASSISTED_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.h0000644000175000017500000001067012576764164032066 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition_fine_doppler.h * \brief Adapts a PCPS acquisition block with fine Doppler estimation to an AcquisitionInterface for * GPS L1 C/A signals * \authors
      *
    • Javier Arribas, 2013. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_FINE_DOPPLER_H_ #define GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_FINE_DOPPLER_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_acquisition_fine_doppler_cc.h" class ConfigurationInterface; /*! * \brief This class Adapts a PCPS acquisition block with fine Doppler estimation to an AcquisitionInterface for * GPS L1 C/A signals */ class GpsL1CaPcpsAcquisitionFineDoppler: public AcquisitionInterface { public: GpsL1CaPcpsAcquisitionFineDoppler(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsAcquisitionFineDoppler(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_Acquisition_Fine_Doppler" */ std::string implementation() { return "GPS_L1_CA_PCPS_Acquisition_Fine_Doppler"; } size_t item_size() { return item_size_; } void connect(boost::shared_ptr top_block); void disconnect(boost::shared_ptr top_block); boost::shared_ptr get_left_block(); boost::shared_ptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); private: pcps_acquisition_fine_doppler_cc_sptr acquisition_cc_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int channel_; float threshold_; int doppler_max_; unsigned int doppler_step_; int doppler_min_; unsigned int sampled_ms_; int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; }; #endif /* GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_FINE_DOPPLER_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.h0000644000175000017500000001154112576764164033653 0ustar carlescarles/*! * \file galileo_e1_pcps_quicksync_ambiguous_acquisition.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for Galileo E1 Signals * \date June, 2014 * \author Damian Miralles Sanchez. dmiralles2009@gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PCPS_QUICKSYNC_AMBIGUOUS_ACQUISITION_H_ #define GNSS_SDR_GALILEO_E1_PCPS_QUICKSYNC_AMBIGUOUS_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_quicksync_acquisition_cc.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS acquisition block to an * AcquisitionInterface for Galileo E1 Signals */ class GalileoE1PcpsQuickSyncAmbiguousAcquisition: public AcquisitionInterface { public: GalileoE1PcpsQuickSyncAmbiguousAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1PcpsQuickSyncAmbiguousAcquisition(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E1_PCPS_Ambiguous_Acquisition" */ std::string implementation() { return "Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for Galileo E1 PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_quicksync_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; unsigned int folding_factor_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GALILEO_E1_PCPS_QUICKSYNC_AMBIGUOUS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.cc0000644000175000017500000002611112576764164027473 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L1 C/A signals * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_acquisition.h" #include #include #include #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsAcquisition::GpsL1CaPcpsAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); //float pfa = configuration_->property(role + ".pfa", 0.0); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- code_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * sampled_ms_; code_= new gr_complex[vector_length_]; // if (item_type_.compare("gr_complex") == 0 ) // { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_acquisition_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, code_length_, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; // } if (item_type_.compare("cshort") == 0) { cshort_to_float_x2_ = make_cshort_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); } if (item_type_.compare("cbyte") == 0) { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); } //} //else // { // LOG(WARNING) << item_type_ // << " unknown acquisition item type"; // } channel_ = 0; threshold_ = 0.0; doppler_max_ = 0; doppler_step_ = 0; gnss_synchro_ = 0; channel_internal_queue_ = 0; } GpsL1CaPcpsAcquisition::~GpsL1CaPcpsAcquisition() { delete[] code_; } void GpsL1CaPcpsAcquisition::set_channel(unsigned int channel) { channel_ = channel; //if (item_type_.compare("gr_complex") == 0) //{ acquisition_cc_->set_channel(channel_); //} } void GpsL1CaPcpsAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_ + boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa == 0.0) { pfa = configuration_->property(role_ + ".pfa", 0.0); threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) << "Channel " << channel_ << " Threshold = " << threshold_; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_threshold(threshold_); // } } void GpsL1CaPcpsAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_doppler_max(doppler_max_); // } } void GpsL1CaPcpsAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_doppler_step(doppler_step_); // } } void GpsL1CaPcpsAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_channel_queue(channel_internal_queue_); // } } void GpsL1CaPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_gnss_synchro(gnss_synchro_); // } } signed int GpsL1CaPcpsAcquisition::mag() { // // if (item_type_.compare("gr_complex") == 0) // { return acquisition_cc_->mag(); // } // else // { // return 0; // } } void GpsL1CaPcpsAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsAcquisition::set_local_code() { // if (item_type_.compare("gr_complex") == 0) // { std::complex* code = new std::complex[code_length_]; gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); for (unsigned int i = 0; i < sampled_ms_; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; // } } void GpsL1CaPcpsAcquisition::reset() { // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_active(true); // } } void GpsL1CaPcpsAcquisition::set_state(int state) { // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_state(state); // } } float GpsL1CaPcpsAcquisition::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_<< " Pfa = " << pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GpsL1CaPcpsAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cshort") == 0) { top_block->connect(cshort_to_float_x2_, 0, float_to_complex_, 0); top_block->connect(cshort_to_float_x2_, 1, float_to_complex_, 1); top_block->connect(float_to_complex_, 0, stream_to_vector_, 0); top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cbyte") == 0) { top_block->connect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->connect(cbyte_to_float_x2_, 1, float_to_complex_, 1); top_block->connect(float_to_complex_, 0, stream_to_vector_, 0); top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } else { LOG(WARNING) << item_type_ << " unknown acquisition item type"; } } void GpsL1CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cshort") == 0) { // Since a short-based acq implementation is not available, // we just convert cshorts to gr_complex top_block->disconnect(cshort_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cshort_to_float_x2_, 1, float_to_complex_, 1); top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0); top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cbyte") == 0) { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0); top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } else { LOG(WARNING) << item_type_ << " unknown acquisition item type"; } } gr::basic_block_sptr GpsL1CaPcpsAcquisition::get_left_block() { if (item_type_.compare("gr_complex") == 0) { return stream_to_vector_; } else if (item_type_.compare("cshort") == 0) { return cshort_to_float_x2_; } else if (item_type_.compare("cbyte") == 0) { return cbyte_to_float_x2_; } else { LOG(WARNING) << item_type_ << " unknown acquisition item type"; return nullptr; } } gr::basic_block_sptr GpsL1CaPcpsAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.h0000644000175000017500000001113212576764164032345 0ustar carlescarles/*! * \file galileo_e1_pcps_8ms_ambiguous_acquisition.h * \brief Adapts a PCPS 8ms acquisition block to an * AcquisitionInterface for Galileo E1 Signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PCPS_8MS_AMBIGUOUS_ACQUISITION_H_ #define GNSS_SDR_GALILEO_E1_PCPS_8MS_AMBIGUOUS_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "galileo_pcps_8ms_acquisition_cc.h" class ConfigurationInterface; /*! * \brief Adapts a PCPS 8ms acquisition block to an * AcquisitionInterface for Galileo E1 Signals */ class GalileoE1Pcps8msAmbiguousAcquisition: public AcquisitionInterface { public: GalileoE1Pcps8msAmbiguousAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1Pcps8msAmbiguousAcquisition(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition" */ std::string implementation() { return "Galileo_E1_PCPS_8ms_Ambiguous_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for Galileo E1 PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); private: ConfigurationInterface* configuration_; galileo_pcps_8ms_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GALILEO_E1_PCPS_8MS_AMBIGUOUS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.cc0000644000175000017500000002012012576764164031025 0ustar carlescarles/*! * \file gps_l1_ca_pcps_opencl_acquisition.cc * \brief Adapts an OpenCL PCPS acquisition block to an * AcquisitionInterface for GPS L1 C/A signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_opencl_acquisition.h" #include #include #include #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsOpenClAcquisition::GpsL1CaPcpsOpenClAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); bit_transition_flag_ = configuration_->property("Acquisition.bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- code_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * sampled_ms_; code_ = new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_opencl_acquisition_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, code_length_, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GpsL1CaPcpsOpenClAcquisition::~GpsL1CaPcpsOpenClAcquisition() { delete[] code_; } void GpsL1CaPcpsOpenClAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GpsL1CaPcpsOpenClAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_ + boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa==0.0) { pfa = configuration_->property(role_+".pfa", 0.0); } if(pfa==0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GpsL1CaPcpsOpenClAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GpsL1CaPcpsOpenClAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GpsL1CaPcpsOpenClAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GpsL1CaPcpsOpenClAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GpsL1CaPcpsOpenClAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GpsL1CaPcpsOpenClAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsOpenClAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { std::complex* code = new std::complex[code_length_]; gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); for (unsigned int i = 0; i < sampled_ms_; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; } } void GpsL1CaPcpsOpenClAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } float GpsL1CaPcpsOpenClAcquisition::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_ << " Pfa = " << pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GpsL1CaPcpsOpenClAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GpsL1CaPcpsOpenClAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GpsL1CaPcpsOpenClAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GpsL1CaPcpsOpenClAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.cc0000644000175000017500000002211012576764164032741 0ustar carlescarles/*! * \file galileo_e1_pcps_tong_ambiguous_acquisition.cc * \brief Adapts a PCPS Tong acquisition block to an Acq1uisitionInterface for * Galileo E1 Signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pcps_tong_ambiguous_acquisition.h" #include #include #include #include #include "galileo_e1_signal_processing.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1PcpsTongAmbiguousAcquisition::GalileoE1PcpsTongAmbiguousAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "../data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 4); if (sampled_ms_ % 4 != 0) { sampled_ms_ = (int)(sampled_ms_/4) * 4; LOG(WARNING) << "coherent_integration_time should be multiple of " << "Galileo code length (4 ms). coherent_integration_time = " << sampled_ms_ << " ms will be used."; } tong_init_val_ = configuration->property(role + ".tong_init_val", 1); tong_max_val_ = configuration->property(role + ".tong_max_val", 2); dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code (4 ms) ----------------- code_length_ = round( fs_in_ / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * (int)(sampled_ms_/4); int samples_per_ms = code_length_ / 4; code_ = new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_tong_make_acquisition_cc(sampled_ms_, shift_resolution_, if_, fs_in_, samples_per_ms, code_length_, tong_init_val_, tong_max_val_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; bit_transition_flag_ = false; } GalileoE1PcpsTongAmbiguousAcquisition::~GalileoE1PcpsTongAmbiguousAcquisition() { delete[] code_; } void GalileoE1PcpsTongAmbiguousAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GalileoE1PcpsTongAmbiguousAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_+ boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa == 0.0) pfa = configuration_->property(role_+".pfa", 0.0); if(pfa == 0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GalileoE1PcpsTongAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GalileoE1PcpsTongAmbiguousAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GalileoE1PcpsTongAmbiguousAcquisition::set_gnss_synchro( Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GalileoE1PcpsTongAmbiguousAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GalileoE1PcpsTongAmbiguousAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GalileoE1PcpsTongAmbiguousAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { bool cboc = configuration_->property( "Acquisition" + boost::lexical_cast(channel_) + ".cboc", false); std::complex * code = new std::complex[code_length_]; galileo_e1_code_gen_complex_sampled(code, gnss_synchro_->Signal, cboc, gnss_synchro_->PRN, fs_in_, 0, false); for (unsigned int i = 0; i < sampled_ms_/4; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; } } void GalileoE1PcpsTongAmbiguousAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } void GalileoE1PcpsTongAmbiguousAcquisition::set_state(int state) { acquisition_cc_->set_state(state); } float GalileoE1PcpsTongAmbiguousAcquisition::calculate_threshold(float pfa) { unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_ << " Pfa = " << pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0-pfa,exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GalileoE1PcpsTongAmbiguousAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GalileoE1PcpsTongAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GalileoE1PcpsTongAmbiguousAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GalileoE1PcpsTongAmbiguousAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l2_m_pcps_acquisition.cc0000644000175000017500000002627012576764164027353 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L1 C/A signals * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l2_m_pcps_acquisition.h" #include #include #include #include #include #include #include "gps_l2c_signal.h" #include "GPS_L2C.h" #include "configuration_interface.h" using google::LogMessage; GpsL2MPcpsAcquisition::GpsL2MPcpsAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; LOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); //float pfa = configuration_->property(role + ".pfa", 0.0); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- code_length_ = round((double)fs_in_ / (GPS_L2_M_CODE_RATE_HZ / (double)GPS_L2_M_CODE_LENGTH_CHIPS)); vector_length_ = code_length_; code_= new gr_complex[vector_length_]; // if (item_type_.compare("gr_complex") == 0 ) // { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_acquisition_cc(1, max_dwells_, shift_resolution_, if_, fs_in_, code_length_, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; // } if (item_type_.compare("cshort") == 0) { cshort_to_float_x2_ = make_cshort_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); } if (item_type_.compare("cbyte") == 0) { cbyte_to_float_x2_ = make_complex_byte_to_float_x2(); float_to_complex_ = gr::blocks::float_to_complex::make(); } //} //else // { // LOG(WARNING) << item_type_ // << " unknown acquisition item type"; // } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GpsL2MPcpsAcquisition::~GpsL2MPcpsAcquisition() { delete[] code_; } void GpsL2MPcpsAcquisition::set_channel(unsigned int channel) { channel_ = channel; //if (item_type_.compare("gr_complex") == 0) //{ acquisition_cc_->set_channel(channel_); //} } void GpsL2MPcpsAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_ + boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa == 0.0) { pfa = configuration_->property(role_ + ".pfa", 0.0); } if(pfa == 0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); // } } void GpsL2MPcpsAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_doppler_max(doppler_max_); // } } // Be aware that Doppler step should be set to 2/(3T) Hz, where T is the coherent integration time (GPS L2 period is 0.02s) // Doppler bin minimum size= 33 Hz void GpsL2MPcpsAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_doppler_step(doppler_step_); // } } void GpsL2MPcpsAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_channel_queue(channel_internal_queue_); // } } void GpsL2MPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_gnss_synchro(gnss_synchro_); // } } signed int GpsL2MPcpsAcquisition::mag() { // // if (item_type_.compare("gr_complex") == 0) // { return acquisition_cc_->mag(); // } // else // { // return 0; // } } void GpsL2MPcpsAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL2MPcpsAcquisition::set_local_code() { // if (item_type_.compare("gr_complex") == 0) // { gps_l2c_m_code_gen_complex_sampled(code_, gnss_synchro_->PRN, fs_in_); acquisition_cc_->set_local_code(code_); // //debug // std::ofstream d_dump_file; // std::stringstream filename; // std::streamsize n = 2 * sizeof(float) * (code_length_); // complex file write // filename.str(""); // filename << "../data/local_prn_sampled.dat"; // d_dump_file.open(filename.str().c_str(), std::ios::out | std::ios::binary); // d_dump_file.write((char*)code_, n); // d_dump_file.close(); // } } void GpsL2MPcpsAcquisition::reset() { // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_active(true); // } } void GpsL2MPcpsAcquisition::set_state(int state) { // if (item_type_.compare("gr_complex") == 0) // { acquisition_cc_->set_state(state); // } } float GpsL2MPcpsAcquisition::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_<< " Pfa = " << pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GpsL2MPcpsAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cshort") == 0) { top_block->connect(cshort_to_float_x2_, 0, float_to_complex_, 0); top_block->connect(cshort_to_float_x2_, 1, float_to_complex_, 1); top_block->connect(float_to_complex_, 0, stream_to_vector_, 0); top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cbyte") == 0) { top_block->connect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->connect(cbyte_to_float_x2_, 1, float_to_complex_, 1); top_block->connect(float_to_complex_, 0, stream_to_vector_, 0); top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } else { LOG(WARNING) << item_type_ << " unknown acquisition item type"; } } void GpsL2MPcpsAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cshort") == 0) { // Since a short-based acq implementation is not available, // we just convert cshorts to gr_complex top_block->disconnect(cshort_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cshort_to_float_x2_, 1, float_to_complex_, 1); top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0); top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } else if (item_type_.compare("cbyte") == 0) { // Since a byte-based acq implementation is not available, // we just convert cshorts to gr_complex top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0); top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1); top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0); top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } else { LOG(WARNING) << item_type_ << " unknown acquisition item type"; } } gr::basic_block_sptr GpsL2MPcpsAcquisition::get_left_block() { if (item_type_.compare("gr_complex") == 0) { return stream_to_vector_; } else if (item_type_.compare("cshort") == 0) { return cshort_to_float_x2_; } else if (item_type_.compare("cbyte") == 0) { return cbyte_to_float_x2_; } else { LOG(WARNING) << item_type_ << " unknown acquisition item type"; return nullptr; } } gr::basic_block_sptr GpsL2MPcpsAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/CMakeLists.txt0000644000175000017500000000430612576764164024441 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(ACQ_ADAPTER_SOURCES gps_l1_ca_pcps_acquisition.cc gps_l1_ca_pcps_multithread_acquisition.cc gps_l1_ca_pcps_assisted_acquisition.cc gps_l1_ca_pcps_acquisition_fine_doppler.cc gps_l1_ca_pcps_tong_acquisition.cc gps_l1_ca_pcps_quicksync_acquisition.cc gps_l2_m_pcps_acquisition.cc galileo_e1_pcps_ambiguous_acquisition.cc galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc galileo_e1_pcps_quicksync_ambiguous_acquisition.cc galileo_e1_pcps_tong_ambiguous_acquisition.cc galileo_e1_pcps_8ms_ambiguous_acquisition.cc galileo_e5a_noncoherent_iq_acquisition_caf.cc ) if(OPENCL_FOUND) set(ACQ_ADAPTER_SOURCES ${ACQ_ADAPTER_SOURCES} gps_l1_ca_pcps_opencl_acquisition.cc) endif(OPENCL_FOUND) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${Boost_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_BLOCKS_INCLUDE_DIRS} ) file(GLOB ACQ_ADAPTER_HEADERS "*.h") add_library(acq_adapters ${ACQ_ADAPTER_SOURCES} ${ACQ_ADAPTER_HEADERS}) source_group(Headers FILES ${ACQ_ADAPTER_HEADERS}) target_link_libraries(acq_adapters gnss_sp_libs acq_gr_blocks ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_assisted_acquisition.cc0000644000175000017500000001331412576764164031373 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L1 C/A Signals * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_assisted_acquisition.h" #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsAssistedAcquisition::GpsL1CaPcpsAssistedAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration->property(role + ".item_type", default_item_type); fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration->property(role + ".ifreq", 0); dump_ = configuration->property(role + ".dump", false); doppler_max_ = configuration->property(role + ".doppler_max", 5000); doppler_min_ = configuration->property(role + ".doppler_min", -5000); sampled_ms_ = configuration->property(role + ".coherent_integration_time_ms", 1); max_dwells_= configuration->property(role + ".max_dwells", 1); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- vector_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); code_= new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_assisted_acquisition_cc(max_dwells_,sampled_ms_, doppler_max_, doppler_min_, if_, fs_in_, vector_length_, queue_, dump_, dump_filename_); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GpsL1CaPcpsAssistedAcquisition::~GpsL1CaPcpsAssistedAcquisition() { delete[] code_; } void GpsL1CaPcpsAssistedAcquisition::set_channel(unsigned int channel) { channel_ = channel; acquisition_cc_->set_channel(channel_); } void GpsL1CaPcpsAssistedAcquisition::set_threshold(float threshold) { threshold_ = threshold; acquisition_cc_->set_threshold(threshold_); } void GpsL1CaPcpsAssistedAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; acquisition_cc_->set_doppler_max(doppler_max_); } void GpsL1CaPcpsAssistedAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; acquisition_cc_->set_doppler_step(doppler_step_); } void GpsL1CaPcpsAssistedAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; acquisition_cc_->set_channel_queue(channel_internal_queue_); } void GpsL1CaPcpsAssistedAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; acquisition_cc_->set_gnss_synchro(gnss_synchro_); } signed int GpsL1CaPcpsAssistedAcquisition::mag() { return acquisition_cc_->mag(); } void GpsL1CaPcpsAssistedAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsAssistedAcquisition::set_local_code() { gps_l1_ca_code_gen_complex_sampled(code_, gnss_synchro_->PRN, fs_in_, 0); acquisition_cc_->set_local_code(code_); } void GpsL1CaPcpsAssistedAcquisition::reset() { acquisition_cc_->set_active(true); } void GpsL1CaPcpsAssistedAcquisition::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } void GpsL1CaPcpsAssistedAcquisition::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } gr::basic_block_sptr GpsL1CaPcpsAssistedAcquisition::get_left_block() { return acquisition_cc_; } gr::basic_block_sptr GpsL1CaPcpsAssistedAcquisition::get_right_block() { return acquisition_cc_; } ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.ccgnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_quicksync_ambiguous_acquisition.c0000644000175000017500000002610212576764164033645 0ustar carlescarles/*! * \file galileo_e1_pcps_quicksync_ambiguous_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E1 Signals using the QuickSync Algorithm * \author Damian Miralles, 2014. dmiralles2009@gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pcps_quicksync_ambiguous_acquisition.h" #include #include #include #include #include #include "galileo_e1_signal_processing.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1PcpsQuickSyncAmbiguousAcquisition::GalileoE1PcpsQuickSyncAmbiguousAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "../data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 8); /*--- Find number of samples per spreading code (4 ms) -----------------*/ code_length_ = round( fs_in_ / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); int samples_per_ms = round(code_length_ / 4.0); /*Calculate the folding factor value based on the formula described in the paper. This may be a bug, but acquisition also work by variying the folding factor at va- lues different that the expressed in the paper. In adition, it is important to point out that by making the folding factor smaller we were able to get QuickSync work with Galileo. Future work should be directed to test this asumption statistically.*/ //folding_factor_ = (unsigned int)ceil(sqrt(log2(code_length_))); folding_factor_ = configuration_->property(role + ".folding_factor", 2); if (sampled_ms_ % (folding_factor_*4) != 0) { LOG(WARNING) << "QuickSync Algorithm requires a coherent_integration_time" << " multiple of "<<(folding_factor_*4)<<"ms, Value entered " <property(role + ".bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); code_ = new gr_complex[code_length_]; LOG(INFO) << "Vector Length: " << vector_length_ << ", Samples per ms: " << samples_per_ms << ", Folding factor: " << folding_factor_ << ", Sampled ms: " << sampled_ms_ << ", Code Length: " << code_length_; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_quicksync_make_acquisition_cc(folding_factor_, sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, samples_per_ms, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector_quicksync(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition_quicksync(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GalileoE1PcpsQuickSyncAmbiguousAcquisition::~GalileoE1PcpsQuickSyncAmbiguousAcquisition() { delete[] code_; } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_+ boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); if(pfa==0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_gnss_synchro( Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GalileoE1PcpsQuickSyncAmbiguousAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { bool cboc = configuration_->property( "Acquisition" + boost::lexical_cast(channel_) + ".cboc", false); std::complex * code = new std::complex[code_length_]; galileo_e1_code_gen_complex_sampled(code, gnss_synchro_->Signal, cboc, gnss_synchro_->PRN, fs_in_, 0, false); for (unsigned int i = 0; i < (sampled_ms_/(folding_factor_*4)); i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } // memcpy(code_, code,sizeof(gr_complex)*code_length_); acquisition_cc_->set_local_code(code_); delete[] code; code = NULL; } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::set_state(int state) { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_state(state); } } float GalileoE1PcpsQuickSyncAmbiguousAcquisition::calculate_threshold(float pfa) { unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_ << " Pfa = " << pfa; unsigned int ncells = code_length_ / folding_factor_ * frequency_bins; double exponent = 1.0 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = static_cast(code_length_) / static_cast(folding_factor_); boost::math::exponential_distribution mydist (lambda); float threshold = static_cast(quantile(mydist,val)); return threshold; } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GalileoE1PcpsQuickSyncAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GalileoE1PcpsQuickSyncAmbiguousAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GalileoE1PcpsQuickSyncAmbiguousAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.cc0000644000175000017500000002426712576764164031576 0ustar carlescarles/*! * \file gps_l1_ca_pcps_quicksync_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L1 C/A signals using the QuickSync Algorithm * \author Damian Miralles, 2014. dmiralles2009@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_quicksync_acquisition.h" #include #include #include #include #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsQuickSyncAcquisition::GpsL1CaPcpsQuickSyncAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 4); //--- Find number of samples per spreading code ------------------------- code_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); /*Calculate the folding factor value based on the calculations*/ unsigned int temp = (unsigned int)ceil(sqrt(log2(code_length_))); folding_factor_ = configuration_->property(role + ".folding_factor", temp); if ( sampled_ms_ % folding_factor_ != 0) { LOG(WARNING) << "QuickSync Algorithm requires a coherent_integration_time" << " multiple of " << folding_factor_ << "ms, Value entered " << sampled_ms_ << " ms"; if(sampled_ms_ < folding_factor_) { sampled_ms_ = (int) folding_factor_; } else { sampled_ms_ = (int)(sampled_ms_/folding_factor_) * folding_factor_; } LOG(WARNING) <<" Coherent_integration_time of " << sampled_ms_ << " ms will be used instead."; } vector_length_ = code_length_ * sampled_ms_; bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); int samples_per_ms = round(code_length_); code_ = new gr_complex[code_length_](); /*Object relevant information for debugging*/ LOG(INFO) << "Implementation: " << this->implementation() << ", Vector Length: " << vector_length_ << ", Samples per ms: " << samples_per_ms << ", Folding factor: " << folding_factor_ << ", Sampled ms: " << sampled_ms_ << ", Code Length: " << code_length_; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_quicksync_make_acquisition_cc(folding_factor_, sampled_ms_, max_dwells_,shift_resolution_, if_, fs_in_, samples_per_ms, code_length_,bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, code_length_*folding_factor_); DLOG(INFO) << "stream_to_vector_quicksync(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GpsL1CaPcpsQuickSyncAcquisition::~GpsL1CaPcpsQuickSyncAcquisition() { delete[] code_; } void GpsL1CaPcpsQuickSyncAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GpsL1CaPcpsQuickSyncAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_ + boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa == 0.0) { pfa = configuration_->property(role_ + ".pfa", 0.0); } if(pfa == 0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GpsL1CaPcpsQuickSyncAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GpsL1CaPcpsQuickSyncAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GpsL1CaPcpsQuickSyncAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GpsL1CaPcpsQuickSyncAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GpsL1CaPcpsQuickSyncAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GpsL1CaPcpsQuickSyncAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsQuickSyncAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { std::complex* code = new std::complex[code_length_](); gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); for (unsigned int i = 0; i < (sampled_ms_/folding_factor_); i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } //memcpy(code_, code,sizeof(gr_complex)*code_length_); acquisition_cc_->set_local_code(code_); delete[] code; } } void GpsL1CaPcpsQuickSyncAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } void GpsL1CaPcpsQuickSyncAcquisition::set_state(int state) { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_state(state); } } float GpsL1CaPcpsQuickSyncAcquisition::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_<< " Pfa = " << pfa; unsigned int ncells = (code_length_ / folding_factor_) * frequency_bins; double exponent = 1.0 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = static_cast(code_length_) / static_cast(folding_factor_); boost::math::exponential_distribution mydist (lambda); float threshold = static_cast(quantile(mydist,val)); return threshold; } void GpsL1CaPcpsQuickSyncAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GpsL1CaPcpsQuickSyncAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GpsL1CaPcpsQuickSyncAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GpsL1CaPcpsQuickSyncAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition.h0000644000175000017500000001204712576764164027340 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L1 C/A signals * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena(at)gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_H_ #define GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_H_ #include #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_acquisition_cc.h" #include "cshort_to_float_x2.h" #include "complex_byte_to_float_x2.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS acquisition block to an AcquisitionInterface * for GPS L1 C/A signals */ class GpsL1CaPcpsAcquisition: public AcquisitionInterface { public: GpsL1CaPcpsAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_Acquisition" */ std::string implementation() { return "GPS_L1_CA_PCPS_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for GPS L1/CA PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; gr::blocks::float_to_complex::sptr float_to_complex_; cshort_to_float_x2_sptr cshort_to_float_x2_; complex_byte_to_float_x2_sptr cbyte_to_float_x2_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.h0000644000175000017500000001150012576764164030360 0ustar carlescarles/*! * \file gps_l1_ca_pcps_tong_acquisition.h * \brief Adapts a PCPS Tong acquisition block to an AcquisitionInterface for * GPS L1 C/A signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_TONG_ACQUISITION_H_ #define GNSS_SDR_GPS_L1_CA_TONG_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_tong_acquisition_cc.h" #include "configuration_interface.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS Tong acquisition block to an * AcquisitionInterface for GPS L1 C/A signals */ class GpsL1CaPcpsTongAcquisition: public AcquisitionInterface { public: GpsL1CaPcpsTongAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsTongAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_Tong_Acquisition" */ std::string implementation() { return "GPS_L1_CA_PCPS_Tong_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of TONG algorithm */ void set_threshold(float threshold); /*! bit_transition_flag_ = configuration_->property("Acquisition.bit_transition_flag", false); * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for GPS L1/CA TONG acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_tong_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int tong_init_val_; unsigned int tong_max_val_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GPS_L1_CA_TONG_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_tong_acquisition.cc0000644000175000017500000002034212576764164030522 0ustar carlescarles/*! * \file gps_l1_ca_pcps_tong_acquisition.cc * \brief Adapts a PCPS Tong acquisition block to an AcquisitionInterface for * GPS L1 C/A signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_tong_acquisition.h" #include #include #include #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsTongAcquisition::GpsL1CaPcpsTongAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); tong_init_val_ = configuration->property(role + ".tong_init_val", 1); tong_max_val_ = configuration->property(role + ".tong_max_val", 2); dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- code_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * sampled_ms_; code_= new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_tong_make_acquisition_cc(sampled_ms_, shift_resolution_, if_, fs_in_, code_length_, code_length_, tong_init_val_, tong_max_val_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; bit_transition_flag_ = false; } GpsL1CaPcpsTongAcquisition::~GpsL1CaPcpsTongAcquisition() { delete[] code_; } void GpsL1CaPcpsTongAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GpsL1CaPcpsTongAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_ + boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa==0.0) { pfa = configuration_->property(role_+".pfa", 0.0); } if(pfa==0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GpsL1CaPcpsTongAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GpsL1CaPcpsTongAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GpsL1CaPcpsTongAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GpsL1CaPcpsTongAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GpsL1CaPcpsTongAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GpsL1CaPcpsTongAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsTongAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { std::complex* code = new std::complex[code_length_]; gps_l1_ca_code_gen_complex_sampled(code, gnss_synchro_->PRN, fs_in_, 0); for (unsigned int i = 0; i < sampled_ms_; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; } } void GpsL1CaPcpsTongAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } void GpsL1CaPcpsTongAcquisition::set_state(int state) { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_state(state); } } float GpsL1CaPcpsTongAcquisition::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel "<< channel_ <<" Pfa = "<< pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa,exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist, val); return threshold; } void GpsL1CaPcpsTongAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GpsL1CaPcpsTongAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GpsL1CaPcpsTongAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GpsL1CaPcpsTongAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_8ms_ambiguous_acquisition.cc0000644000175000017500000002161512576764164032512 0ustar carlescarles/*! * \file galileo_e1_pcps_8ms_ambiguous_acquisition.cc * \brief Adapts a Galileo PCPS 8ms acquisition block to an * AcquisitionInterface for Galileo E1 Signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pcps_8ms_ambiguous_acquisition.h" #include #include #include #include #include #include "galileo_e1_signal_processing.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1Pcps8msAmbiguousAcquisition::GalileoE1Pcps8msAmbiguousAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "../data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 4); if (sampled_ms_ % 4 != 0) { sampled_ms_ = (int)(sampled_ms_/4) * 4; LOG(WARNING) << "coherent_integration_time should be multiple of " << "Galileo code length (4 ms). coherent_integration_time = " << sampled_ms_ << " ms will be used."; } max_dwells_ = configuration_->property(role + ".max_dwells", 1); dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code (4 ms) ----------------- code_length_ = round( fs_in_ / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * (int)(sampled_ms_/4); int samples_per_ms = code_length_ / 4; code_ = new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = galileo_pcps_8ms_make_acquisition_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, samples_per_ms, code_length_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GalileoE1Pcps8msAmbiguousAcquisition::~GalileoE1Pcps8msAmbiguousAcquisition() { delete[] code_; } void GalileoE1Pcps8msAmbiguousAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GalileoE1Pcps8msAmbiguousAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_+ boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); if(pfa==0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GalileoE1Pcps8msAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GalileoE1Pcps8msAmbiguousAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GalileoE1Pcps8msAmbiguousAcquisition::set_gnss_synchro( Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GalileoE1Pcps8msAmbiguousAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GalileoE1Pcps8msAmbiguousAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GalileoE1Pcps8msAmbiguousAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { bool cboc = configuration_->property( "Acquisition" + boost::lexical_cast(channel_) + ".cboc", false); std::complex * code = new std::complex[code_length_]; galileo_e1_code_gen_complex_sampled(code, gnss_synchro_->Signal, cboc, gnss_synchro_->PRN, fs_in_, 0, false); for (unsigned int i = 0; i < sampled_ms_/4; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; } } void GalileoE1Pcps8msAmbiguousAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } float GalileoE1Pcps8msAmbiguousAcquisition::calculate_threshold(float pfa) { unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_ << " Pfa = " << pfa; unsigned int ncells = vector_length_*frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa,exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GalileoE1Pcps8msAmbiguousAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GalileoE1Pcps8msAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GalileoE1Pcps8msAmbiguousAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GalileoE1Pcps8msAmbiguousAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fine_doppler.cc0000644000175000017500000001342412576764164032224 0ustar carlescarles/*! * \file gps_l1_ca_pcps_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * GPS L1 C/A Signals * \authors
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pcps_acquisition_fine_doppler.h" #include #include #include #include "gps_sdr_signal_processing.h" #include "GPS_L1_CA.h" #include "configuration_interface.h" using google::LogMessage; GpsL1CaPcpsAcquisitionFineDoppler::GpsL1CaPcpsAcquisitionFineDoppler( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_( queue) { std::string default_item_type = "gr_complex"; std::string default_dump_filename = "./data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration->property(role + ".item_type", default_item_type); fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); if_ = configuration->property(role + ".ifreq", 0); dump_ = configuration->property(role + ".dump", false); doppler_max_ = configuration->property(role + ".doppler_max", 5000); doppler_min_ = configuration->property(role + ".doppler_min", -5000); sampled_ms_ = configuration->property(role + ".coherent_integration_time_ms", 1); max_dwells_= configuration->property(role + ".max_dwells", 1); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code ------------------------- vector_length_ = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); code_= new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_acquisition_fine_doppler_cc(max_dwells_,sampled_ms_, doppler_max_, doppler_min_, if_, fs_in_, vector_length_, queue_, dump_, dump_filename_); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } channel_ = 0; threshold_ = 0.0; doppler_step_ = 0; gnss_synchro_ = 0; channel_internal_queue_ = 0; } GpsL1CaPcpsAcquisitionFineDoppler::~GpsL1CaPcpsAcquisitionFineDoppler() { delete[] code_; } void GpsL1CaPcpsAcquisitionFineDoppler::set_channel(unsigned int channel) { channel_ = channel; acquisition_cc_->set_channel(channel_); } void GpsL1CaPcpsAcquisitionFineDoppler::set_threshold(float threshold) { threshold_ = threshold; acquisition_cc_->set_threshold(threshold_); } void GpsL1CaPcpsAcquisitionFineDoppler::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; acquisition_cc_->set_doppler_max(doppler_max_); } void GpsL1CaPcpsAcquisitionFineDoppler::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; acquisition_cc_->set_doppler_step(doppler_step_); } void GpsL1CaPcpsAcquisitionFineDoppler::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; acquisition_cc_->set_channel_queue(channel_internal_queue_); } void GpsL1CaPcpsAcquisitionFineDoppler::set_gnss_synchro(Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; acquisition_cc_->set_gnss_synchro(gnss_synchro_); } signed int GpsL1CaPcpsAcquisitionFineDoppler::mag() { return acquisition_cc_->mag(); } void GpsL1CaPcpsAcquisitionFineDoppler::init() { acquisition_cc_->init(); set_local_code(); } void GpsL1CaPcpsAcquisitionFineDoppler::set_local_code() { gps_l1_ca_code_gen_complex_sampled(code_, gnss_synchro_->PRN, fs_in_, 0); acquisition_cc_->set_local_code(code_); } void GpsL1CaPcpsAcquisitionFineDoppler::reset() { acquisition_cc_->set_active(true); } void GpsL1CaPcpsAcquisitionFineDoppler::connect(boost::shared_ptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } void GpsL1CaPcpsAcquisitionFineDoppler::disconnect(boost::shared_ptr top_block) { if(top_block) { /* top_block is not null */}; //nothing to disconnect, now the tracking uses gr_sync_decimator } boost::shared_ptr GpsL1CaPcpsAcquisitionFineDoppler::get_left_block() { return acquisition_cc_; } boost::shared_ptr GpsL1CaPcpsAcquisitionFineDoppler::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_opencl_acquisition.h0000644000175000017500000001107512576764164030700 0ustar carlescarles/*! * \file gps_l1_ca_pcps_opencl_acquisition.h * \brief Adapts an OpenCL PCPS acquisition block to an * AcquisitionInterface for GPS L1 C/A signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PCPS_OPENCL_ACQUISITION_H_ #define GNSS_SDR_GPS_L1_CA_PCPS_OPENCL_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_opencl_acquisition_cc.h" class ConfigurationInterface; /*! * \brief This class adapts an OpenCL PCPS acquisition block to an * AcquisitionInterface for GPS L1 C/A signals */ class GpsL1CaPcpsOpenClAcquisition: public AcquisitionInterface { public: GpsL1CaPcpsOpenClAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsOpenClAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_OpenCl_Acquisition" */ std::string implementation() { return "GPS_L1_CA_PCPS_OpenCl_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for GPS L1/CA PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); private: ConfigurationInterface* configuration_; pcps_opencl_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GPS_L1_CA_PCPS_OPENCL_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.cc0000644000175000017500000002204312576764164031717 0ustar carlescarles/*! * \file galileo_e1_pcps_ambiguous_acquisition.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E1 Signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pcps_ambiguous_acquisition.h" #include #include #include #include #include "galileo_e1_signal_processing.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1PcpsAmbiguousAcquisition::GalileoE1PcpsAmbiguousAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "../data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 4); if (sampled_ms_ % 4 != 0) { sampled_ms_ = (int)(sampled_ms_/4) * 4; LOG(WARNING) << "coherent_integration_time should be multiple of " << "Galileo code length (4 ms). coherent_integration_time = " << sampled_ms_ << " ms will be used."; } bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false); if (!bit_transition_flag_) { max_dwells_ = configuration_->property(role + ".max_dwells", 1); } else { max_dwells_ = 2; } dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code (4 ms) ----------------- code_length_ = round( fs_in_ / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); int samples_per_ms = round(code_length_ / 4.0); vector_length_ = sampled_ms_ * samples_per_ms; code_ = new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_make_acquisition_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, samples_per_ms, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GalileoE1PcpsAmbiguousAcquisition::~GalileoE1PcpsAmbiguousAcquisition() { delete[] code_; } void GalileoE1PcpsAmbiguousAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GalileoE1PcpsAmbiguousAcquisition::set_threshold(float threshold) { float pfa = configuration_->property(role_+ boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); if(pfa==0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GalileoE1PcpsAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GalileoE1PcpsAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GalileoE1PcpsAmbiguousAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GalileoE1PcpsAmbiguousAcquisition::set_gnss_synchro( Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GalileoE1PcpsAmbiguousAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GalileoE1PcpsAmbiguousAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GalileoE1PcpsAmbiguousAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { bool cboc = configuration_->property( "Acquisition" + boost::lexical_cast(channel_) + ".cboc", false); std::complex * code = new std::complex[code_length_]; galileo_e1_code_gen_complex_sampled(code, gnss_synchro_->Signal, cboc, gnss_synchro_->PRN, fs_in_, 0, false); for (unsigned int i = 0; i < sampled_ms_/4; i++) { memcpy(&(code_[i*code_length_]), code, sizeof(gr_complex)*code_length_); } acquisition_cc_->set_local_code(code_); delete[] code; } } void GalileoE1PcpsAmbiguousAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } void GalileoE1PcpsAmbiguousAcquisition::set_state(int state) { acquisition_cc_->set_state(state); } float GalileoE1PcpsAmbiguousAcquisition::calculate_threshold(float pfa) { unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) <<"Channel "<connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GalileoE1PcpsAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GalileoE1PcpsAmbiguousAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GalileoE1PcpsAmbiguousAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.h0000644000175000017500000001164712576764164032542 0ustar carlescarles/*! * \file galileo_e5a_noncoherent_iq_acquisition_caf.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E5a data and pilot Signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GALILEO_E5A_NONCOHERENT_IQ_ACQUISITION_CAF_H_ #define GALILEO_E5A_NONCOHERENT_IQ_ACQUISITION_CAF_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "galileo_e5a_noncoherent_iq_acquisition_caf_cc.h" class ConfigurationInterface; class GalileoE5aNoncoherentIQAcquisitionCaf: public AcquisitionInterface { public: GalileoE5aNoncoherentIQAcquisitionCaf(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE5aNoncoherentIQAcquisitionCaf(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E5a_Noncoherent_IQ_Acquisition_CAF" */ std::string implementation() { return "Galileo_E5a_Noncoherent_IQ_Acquisition_CAF"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local Galileo E5a code for PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If set to 1, ensures that acquisition starts at the * first available sample. * \param state - int=1 forces start of acquisition */ void set_state(int state); private: ConfigurationInterface* configuration_; galileo_e5a_noncoherentIQ_acquisition_caf_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; int Zero_padding; int CAF_window_hz_; std::complex * codeI_; std::complex * codeQ_; bool both_signal_components; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GALILEO_E5A_NONCOHERENT_IQ_ACQUISITION_CAF_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_multithread_acquisition.h0000644000175000017500000001117412576764164031742 0ustar carlescarles/*! * \file gps_l1_ca_pcps_multithread_acquisition.h * \brief Adapts a multithread PCPS acquisition block to an * AcquisitionInterface for GPS L1 C/A signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PCPS_MULTITHREAD_ACQUISITION_H_ #define GNSS_SDR_GPS_L1_CA_PCPS_MULTITHREAD_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_multithread_acquisition_cc.h" class ConfigurationInterface; /*! * \brief This class adapts a multithread PCPS acquisition block to an * AcquisitionInterface for GPS L1 C/A signals */ class GpsL1CaPcpsMultithreadAcquisition: public AcquisitionInterface { public: GpsL1CaPcpsMultithreadAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsMultithreadAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_Multithread_Acquisition" */ std::string implementation() { return "GPS_L1_CA_PCPS_Multithread_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for GPS L1/CA PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); private: ConfigurationInterface* configuration_; pcps_multithread_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GPS_L1_CA_PCPS_MULTITHREAD_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_quicksync_acquisition.h0000644000175000017500000001152712576764164031433 0ustar carlescarles/*! * \file gps_l1_ca_pcps_quicksync_acquisition.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for GPS L1 C/A signals implementing the QuickSync Algorithm. * \date June, 2014 * \author Damian Miralles Sanchez. dmiralles2009@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PCPS_QUICKSYNC_ACQUISITION_H_ #define GNSS_SDR_GPS_L1_CA_PCPS_QUICKSYNC_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_quicksync_acquisition_cc.h" #include "configuration_interface.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS acquisition block to an AcquisitionInterface * for GPS L1 C/A signals */ class GpsL1CaPcpsQuickSyncAcquisition: public AcquisitionInterface { public: GpsL1CaPcpsQuickSyncAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPcpsQuickSyncAcquisition(); std::string role() { return role_; } /*! * \brief Returns "GPS_L1_CA_PCPS_QuickSync_Acquisition" */ std::string implementation() { return "GPS_L1_CA_PCPS_QuickSync_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for GPS L1/CA PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_quicksync_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; unsigned int folding_factor_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GPS_L1_CA_PCPS_QUICKSYNC_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.h0000644000175000017500000001135712576764164033133 0ustar carlescarles/*! * \file galileo_e1_pcps_cccwsr_ambiguous_acquisition.h * \brief Adapts a PCPS CCCWSR acquisition block to an AcquisitionInterface for * Galileo E1 Signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PCPS_CCCWSR_AMBIGUOUS_ACQUISITION_H_ #define GNSS_SDR_GALILEO_E1_PCPS_CCCWSR_AMBIGUOUS_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_cccwsr_acquisition_cc.h" class ConfigurationInterface; /*! * \brief Adapts a PCPS CCCWSR acquisition block to an AcquisitionInterface * for Galileo E1 Signals */ class GalileoE1PcpsCccwsrAmbiguousAcquisition: public AcquisitionInterface { public: GalileoE1PcpsCccwsrAmbiguousAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1PcpsCccwsrAmbiguousAcquisition(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition" */ std::string implementation() { return "Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of CCCWSR algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_cccwsr_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; //unsigned int satellite_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_data_; std::complex * code_pilot_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GALILEO_E1_PCPS_CCCWSR_AMBIGUOUS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_tong_ambiguous_acquisition.h0000644000175000017500000001144412576764164032613 0ustar carlescarles/*! * \file galileo_e1_pcps_tong_ambiguous_acquisition.h * \brief Adapts a PCPS Tong acquisition block to an AcquisitionInterface for * Galileo E1 Signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PCPS_TONG_AMBIGUOUS_ACQUISITION_H_ #define GNSS_SDR_GALILEO_E1_PCPS_TONG_AMBIGUOUS_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_tong_acquisition_cc.h" class ConfigurationInterface; /*! * \brief Adapts a PCPS Tong acquisition block to an AcquisitionInterface * for Galileo E1 Signals */ class GalileoE1PcpsTongAmbiguousAcquisition: public AcquisitionInterface { public: GalileoE1PcpsTongAmbiguousAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1PcpsTongAmbiguousAcquisition(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition" */ std::string implementation() { return "Galileo_E1_PCPS_Tong_Ambiguous_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of TONG algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for Galileo E1 TONG acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_tong_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int tong_init_val_; unsigned int tong_max_val_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GALILEO_E1_PCPS_TONG_AMBIGUOUS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition.h0000644000175000017500000001131612576764164031562 0ustar carlescarles/*! * \file galileo_e1_pcps_ambiguous_acquisition.h * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E1 Signals * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PCPS_AMBIGUOUS_ACQUISITION_H_ #define GNSS_SDR_GALILEO_E1_PCPS_AMBIGUOUS_ACQUISITION_H_ #include #include #include #include "gnss_synchro.h" #include "acquisition_interface.h" #include "pcps_acquisition_cc.h" class ConfigurationInterface; /*! * \brief This class adapts a PCPS acquisition block to an * AcquisitionInterface for Galileo E1 Signals */ class GalileoE1PcpsAmbiguousAcquisition: public AcquisitionInterface { public: GalileoE1PcpsAmbiguousAcquisition(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1PcpsAmbiguousAcquisition(); std::string role() { return role_; } /*! * \brief Returns "Galileo_E1_PCPS_Ambiguous_Acquisition" */ std::string implementation() { return "Galileo_E1_PCPS_Ambiguous_Acquisition"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); /*! * \brief Set acquisition/tracking common Gnss_Synchro object pointer * to efficiently exchange synchronization data between acquisition and * tracking blocks */ void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro); /*! * \brief Set acquisition channel unique ID */ void set_channel(unsigned int channel); /*! * \brief Set statistics threshold of PCPS algorithm */ void set_threshold(float threshold); /*! * \brief Set maximum Doppler off grid search */ void set_doppler_max(unsigned int doppler_max); /*! * \brief Set Doppler steps for the grid search */ void set_doppler_step(unsigned int doppler_step); /*! * \brief Set tracking channel internal queue */ void set_channel_queue(concurrent_queue *channel_internal_queue); /*! * \brief Initializes acquisition algorithm. */ void init(); /*! * \brief Sets local code for Galileo E1 PCPS acquisition algorithm. */ void set_local_code(); /*! * \brief Returns the maximum peak of grid search */ signed int mag(); /*! * \brief Restart acquisition algorithm */ void reset(); /*! * \brief If state = 1, it forces the block to start acquiring from the first sample */ void set_state(int state); private: ConfigurationInterface* configuration_; pcps_acquisition_cc_sptr acquisition_cc_; gr::blocks::stream_to_vector::sptr stream_to_vector_; size_t item_size_; std::string item_type_; unsigned int vector_length_; unsigned int code_length_; bool bit_transition_flag_; unsigned int channel_; float threshold_; unsigned int doppler_max_; unsigned int doppler_step_; unsigned int shift_resolution_; unsigned int sampled_ms_; unsigned int max_dwells_; long fs_in_; long if_; bool dump_; std::string dump_filename_; std::complex * code_; Gnss_Synchro * gnss_synchro_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; concurrent_queue *channel_internal_queue_; float calculate_threshold(float pfa); }; #endif /* GNSS_SDR_GALILEO_E1_PCPS_AMBIGUOUS_ACQUISITION_H_ */ gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc0000644000175000017500000002116212576764164033264 0ustar carlescarles/*! * \file galileo_e1_pcps_cccwsr_ambiguous_acquisition.cc * \brief Adapts a PCPS CCCWSR acquisition block to an AcquisitionInterface for * Galileo E1 Signals * \author Marc Molina, 2013. marc.molina.pena(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pcps_cccwsr_ambiguous_acquisition.h" #include #include #include #include #include #include "galileo_e1_signal_processing.h" #include "Galileo_E1.h" #include "configuration_interface.h" using google::LogMessage; GalileoE1PcpsCccwsrAmbiguousAcquisition::GalileoE1PcpsCccwsrAmbiguousAcquisition( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "../data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 4); if (sampled_ms_ % 4 != 0) { sampled_ms_ = static_cast(sampled_ms_ / 4) * 4; LOG(WARNING) << "coherent_integration_time should be multiple of " << "Galileo code length (4 ms). coherent_integration_time = " << sampled_ms_ << " ms will be used."; } max_dwells_ = configuration_->property(role + ".max_dwells", 1); dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code (4 ms) ----------------- code_length_ = round( fs_in_ / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); vector_length_ = code_length_ * static_cast(sampled_ms_ / 4); int samples_per_ms = code_length_ / 4; code_data_ = new gr_complex[vector_length_]; code_pilot_ = new gr_complex[vector_length_]; if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = pcps_cccwsr_make_acquisition_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, samples_per_ms, code_length_, queue_, dump_, dump_filename_); stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_); DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")"; DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")"; } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; } GalileoE1PcpsCccwsrAmbiguousAcquisition::~GalileoE1PcpsCccwsrAmbiguousAcquisition() { delete[] code_data_; delete[] code_pilot_; } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_threshold(float threshold) { // float pfa = configuration_->property(role_+ boost::lexical_cast(channel_) + ".pfa", 0.0); // if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); // if(pfa==0.0) // { // threshold_ = threshold; // } // else // { // threshold_ = calculate_threshold(pfa); // } threshold_ = threshold; DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_gnss_synchro( Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GalileoE1PcpsCccwsrAmbiguousAcquisition::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::init() { acquisition_cc_->init(); set_local_code(); } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_local_code() { if (item_type_.compare("gr_complex") == 0) { bool cboc = configuration_->property( "Acquisition" + boost::lexical_cast(channel_) + ".cboc", false); char signal[3]; strcpy(signal, "1B"); galileo_e1_code_gen_complex_sampled(code_data_, signal, cboc, gnss_synchro_->PRN, fs_in_, 0, false); strcpy(signal, "1C"); galileo_e1_code_gen_complex_sampled(code_pilot_, signal, cboc, gnss_synchro_->PRN, fs_in_, 0, false); acquisition_cc_->set_local_code(code_data_, code_pilot_); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::set_state(int state) { acquisition_cc_->set_state(state); } float GalileoE1PcpsCccwsrAmbiguousAcquisition::calculate_threshold(float pfa) { if(pfa){ /* Not implemented*/}; return 0.0; } void GalileoE1PcpsCccwsrAmbiguousAcquisition::connect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0); } } void GalileoE1PcpsCccwsrAmbiguousAcquisition::disconnect(gr::top_block_sptr top_block) { if (item_type_.compare("gr_complex") == 0) { top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0); } } gr::basic_block_sptr GalileoE1PcpsCccwsrAmbiguousAcquisition::get_left_block() { return stream_to_vector_; } gr::basic_block_sptr GalileoE1PcpsCccwsrAmbiguousAcquisition::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/acquisition/adapters/galileo_e5a_noncoherent_iq_acquisition_caf.cc0000644000175000017500000002450612576764164032676 0ustar carlescarles/*! * \file galileo_e5a_noncoherent_iq_acquisition_caf.cc * \brief Adapts a PCPS acquisition block to an AcquisitionInterface for * Galileo E5a data and pilot Signals * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    • Luis Esteve, 2012. luis(at)epsilon-formacion.com *
    • Marc Molina, 2013. marc.molina.pena@gmail.com *
    * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e5a_noncoherent_iq_acquisition_caf.h" #include #include #include #include #include #include #include "galileo_e5_signal_processing.h" #include "Galileo_E5a.h" #include "configuration_interface.h" using google::LogMessage; GalileoE5aNoncoherentIQAcquisitionCaf::GalileoE5aNoncoherentIQAcquisitionCaf( ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { configuration_ = configuration; std::string default_item_type = "gr_complex"; std::string default_dump_filename = "../data/acquisition.dat"; DLOG(INFO) << "role " << role; item_type_ = configuration_->property(role + ".item_type", default_item_type); fs_in_ = configuration_->property("GNSS-SDR.internal_fs_hz", 32000000); if_ = configuration_->property(role + ".ifreq", 0); dump_ = configuration_->property(role + ".dump", false); shift_resolution_ = configuration_->property(role + ".doppler_max", 15); CAF_window_hz_ = configuration_->property(role + ".CAF_window_hz",0); Zero_padding = configuration_->property(role + ".Zero_padding",0); sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1); if (sampled_ms_ > 3) { sampled_ms_=3; DLOG(INFO) << "Coherent integration time should be 3 ms or less. Changing to 3ms "; std::cout<<"Too high coherent integration time. Changing to 3ms" << std::endl; } if (Zero_padding > 0) { sampled_ms_ = 2; DLOG(INFO) << "Zero padding activated. Changing to 1ms code + 1ms zero padding "; std::cout<<"Zero padding activated. Changing to 1ms code + 1ms zero padding" << std::endl; } max_dwells_ = configuration_->property(role + ".max_dwells", 1); dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename); //--- Find number of samples per spreading code (1ms)------------------------- code_length_ = round(fs_in_/ Galileo_E5a_CODE_CHIP_RATE_HZ*Galileo_E5a_CODE_LENGTH_CHIPS); vector_length_=code_length_ * sampled_ms_; codeI_= new gr_complex[vector_length_]; codeQ_= new gr_complex[vector_length_]; both_signal_components = false; std::string sig_ = configuration_->property("Channel.signal", std::string("5X")); if (sig_.at(0) == '5' && sig_.at(1) == 'X') { both_signal_components = true; } if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); acquisition_cc_ = galileo_e5a_noncoherentIQ_make_acquisition_caf_cc(sampled_ms_, max_dwells_, shift_resolution_, if_, fs_in_, code_length_, code_length_, bit_transition_flag_, queue_, dump_, dump_filename_, both_signal_components, CAF_window_hz_,Zero_padding); } else { item_size_ = sizeof(gr_complex); LOG(WARNING) << item_type_ << " unknown acquisition item type"; } gnss_synchro_ = 0; threshold_ = 0.0; doppler_max_ = 5000; doppler_step_ = 250; channel_internal_queue_ = 0; channel_ = 0; bit_transition_flag_ = false; } GalileoE5aNoncoherentIQAcquisitionCaf::~GalileoE5aNoncoherentIQAcquisitionCaf() { delete[] codeI_; delete[] codeQ_; } void GalileoE5aNoncoherentIQAcquisitionCaf::set_channel(unsigned int channel) { channel_ = channel; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel(channel_); } } void GalileoE5aNoncoherentIQAcquisitionCaf::set_threshold(float threshold) { float pfa = configuration_->property(role_+ boost::lexical_cast(channel_) + ".pfa", 0.0); if(pfa==0.0) pfa = configuration_->property(role_+".pfa", 0.0); if(pfa==0.0) { threshold_ = threshold; } else { threshold_ = calculate_threshold(pfa); } DLOG(INFO) <<"Channel "<set_threshold(threshold_); } } void GalileoE5aNoncoherentIQAcquisitionCaf::set_doppler_max(unsigned int doppler_max) { doppler_max_ = doppler_max; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_max(doppler_max_); } } void GalileoE5aNoncoherentIQAcquisitionCaf::set_doppler_step(unsigned int doppler_step) { doppler_step_ = doppler_step; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_doppler_step(doppler_step_); } } void GalileoE5aNoncoherentIQAcquisitionCaf::set_channel_queue( concurrent_queue *channel_internal_queue) { channel_internal_queue_ = channel_internal_queue; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_channel_queue(channel_internal_queue_); } } void GalileoE5aNoncoherentIQAcquisitionCaf::set_gnss_synchro( Gnss_Synchro* gnss_synchro) { gnss_synchro_ = gnss_synchro; if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_gnss_synchro(gnss_synchro_); } } signed int GalileoE5aNoncoherentIQAcquisitionCaf::mag() { if (item_type_.compare("gr_complex") == 0) { return acquisition_cc_->mag(); } else { return 0; } } void GalileoE5aNoncoherentIQAcquisitionCaf::init() { acquisition_cc_->init(); set_local_code(); } void GalileoE5aNoncoherentIQAcquisitionCaf::set_local_code() { if (item_type_.compare("gr_complex")==0) { std::complex* codeI = new std::complex[code_length_]; std::complex* codeQ = new std::complex[code_length_]; if (gnss_synchro_->Signal[0] == '5' && gnss_synchro_->Signal[1] == 'X') { char a[3]; strcpy(a,"5I"); galileo_e5_a_code_gen_complex_sampled(codeI, a, gnss_synchro_->PRN, fs_in_, 0); strcpy(a,"5Q"); galileo_e5_a_code_gen_complex_sampled(codeQ, a, gnss_synchro_->PRN, fs_in_, 0); } else { galileo_e5_a_code_gen_complex_sampled(codeI, gnss_synchro_->Signal, gnss_synchro_->PRN, fs_in_, 0); } // WARNING: 3ms are coherently integrated. Secondary sequence (1,1,1) // is generated, and modulated in the 'block'. if (Zero_padding == 0) // if no zero_padding { for (unsigned int i = 0; i < sampled_ms_; i++) { memcpy(&(codeI_[i*code_length_]), codeI, sizeof(gr_complex)*code_length_); if (gnss_synchro_->Signal[0] == '5' && gnss_synchro_->Signal[1] == 'X') { memcpy(&(codeQ_[i*code_length_]), codeQ, sizeof(gr_complex)*code_length_); } } } else { // 1ms code + 1ms zero padding memcpy(&(codeI_[0]), codeI, sizeof(gr_complex)*code_length_); if (gnss_synchro_->Signal[0] == '5' && gnss_synchro_->Signal[1] == 'X') { memcpy(&(codeQ_[0]), codeQ, sizeof(gr_complex)*code_length_); } } acquisition_cc_->set_local_code(codeI_,codeQ_); delete[] codeI; delete[] codeQ; } } void GalileoE5aNoncoherentIQAcquisitionCaf::reset() { if (item_type_.compare("gr_complex") == 0) { acquisition_cc_->set_active(true); } } float GalileoE5aNoncoherentIQAcquisitionCaf::calculate_threshold(float pfa) { //Calculate the threshold unsigned int frequency_bins = 0; for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_) { frequency_bins++; } DLOG(INFO) << "Channel " << channel_ << " Pfa = " << pfa; unsigned int ncells = vector_length_ * frequency_bins; double exponent = 1 / static_cast(ncells); double val = pow(1.0 - pfa, exponent); double lambda = double(vector_length_); boost::math::exponential_distribution mydist (lambda); float threshold = (float)quantile(mydist,val); return threshold; } void GalileoE5aNoncoherentIQAcquisitionCaf::set_state(int state) { acquisition_cc_->set_state(state); } void GalileoE5aNoncoherentIQAcquisitionCaf::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally } void GalileoE5aNoncoherentIQAcquisitionCaf::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect internally } gr::basic_block_sptr GalileoE5aNoncoherentIQAcquisitionCaf::get_left_block() { return acquisition_cc_; } gr::basic_block_sptr GalileoE5aNoncoherentIQAcquisitionCaf::get_right_block() { return acquisition_cc_; } gnss-sdr-0.0.6/src/algorithms/PVT/0000755000175000017500000000000012576764164016214 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/0000755000175000017500000000000012576764164021361 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc0000644000175000017500000003614112576764164025063 0ustar carlescarles/*! * \file gps_l1_ca_pvt_cc.cc * \brief Implementation of a Position Velocity and Time computation block for GPS L1 C/A * \author Javier Arribas, 2011. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pvt_cc.h" #include #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" #include "concurrent_map.h" #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" using google::LogMessage; extern concurrent_map global_gps_ephemeris_map; extern concurrent_map global_gps_iono_map; extern concurrent_map global_gps_utc_model_map; extern concurrent_queue global_sbas_raw_msg_queue; extern concurrent_map global_sbas_iono_map; extern concurrent_map global_sbas_sat_corr_map; extern concurrent_map global_sbas_ephemeris_map; gps_l1_ca_pvt_cc_sptr gps_l1_ca_make_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname) { return gps_l1_ca_pvt_cc_sptr(new gps_l1_ca_pvt_cc(nchannels, queue, dump, dump_filename, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname)); } gps_l1_ca_pvt_cc::gps_l1_ca_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname) : gr::block("gps_l1_ca_pvt_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(gr_complex)) ) { d_output_rate_ms = output_rate_ms; d_display_rate_ms = display_rate_ms; d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_dump_filename = dump_filename; std::string dump_ls_pvt_filename = dump_filename; //initialize kml_printer std::string kml_dump_filename; kml_dump_filename = d_dump_filename; kml_dump_filename.append(".kml"); d_kml_dump = std::make_shared(); d_kml_dump->set_headers(kml_dump_filename); //initialize nmea_printer d_nmea_printer = std::make_shared(nmea_dump_filename, flag_nmea_tty_port, nmea_dump_devname); d_dump_filename.append("_raw.dat"); dump_ls_pvt_filename.append("_ls_pvt.dat"); d_averaging_depth = averaging_depth; d_flag_averaging = flag_averaging; d_ls_pvt = std::make_shared((int)nchannels, dump_ls_pvt_filename, d_dump); d_ls_pvt->set_averaging_depth(d_averaging_depth); d_sample_counter = 0; d_last_sample_nav_output = 0; d_rx_time = 0.0; b_rinex_header_writen = false; b_rinex_header_updated = false; b_rinex_sbs_header_writen = false; rp = std::make_shared(); // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "PVT dump enabled Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(INFO) << "Exception opening PVT dump file " << e.what(); } } } } gps_l1_ca_pvt_cc::~gps_l1_ca_pvt_cc() {} bool pseudoranges_pairCompare_min(const std::pair& a, const std::pair& b) { return (a.second.Pseudorange_m) < (b.second.Pseudorange_m); } int gps_l1_ca_pvt_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { d_sample_counter++; std::map gnss_pseudoranges_map; Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; //Get the input pointer //Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0]; //Get the output pointer for (unsigned int i = 0; i < d_nchannels; i++) { if (in[i][0].Flag_valid_pseudorange == true) { gnss_pseudoranges_map.insert(std::pair(in[i][0].PRN, in[i][0])); // store valid pseudoranges in a map d_rx_time = in[i][0].d_TOW_at_current_symbol; // all the channels have the same RX timestamp (common RX time pseudoranges) } } // ############ 1. READ EPHEMERIS/UTC_MODE/IONO FROM GLOBAL MAPS #### d_ls_pvt->gps_ephemeris_map = global_gps_ephemeris_map.get_map_copy(); if (global_gps_utc_model_map.size() > 0) { // UTC MODEL data is shared for all the GPS satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_gps_utc_model_map.read(i, d_ls_pvt->gps_utc_model); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } if (global_gps_iono_map.size() > 0) { // IONO data is shared for all the GPS satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_gps_iono_map.read(i, d_ls_pvt->gps_iono); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } // update SBAS data collections if (global_sbas_iono_map.size() > 0) { // SBAS ionospheric correction is shared for all the GPS satellites. Read always at ID=0 global_sbas_iono_map.read(0, d_ls_pvt->sbas_iono); } d_ls_pvt->sbas_sat_corr_map = global_sbas_sat_corr_map.get_map_copy(); d_ls_pvt->sbas_ephemeris_map = global_sbas_ephemeris_map.get_map_copy(); // read SBAS raw messages directly from queue and write them into rinex file Sbas_Raw_Msg sbas_raw_msg; while (global_sbas_raw_msg_queue.try_pop(sbas_raw_msg)) { // create the header of not yet done if(!b_rinex_sbs_header_writen) { rp->rinex_sbs_header(rp->sbsFile); b_rinex_sbs_header_writen = true; } // Define the RX time of the SBAS message by using the GPS time. // It has only an effect if there has not been yet a SBAS MT12 available // when the message was received. if(sbas_raw_msg.get_rx_time_obj().is_related() == false && gnss_pseudoranges_map.size() > 0 && d_ls_pvt->gps_ephemeris_map.size() > 0) { // doesn't matter which channel/satellite we choose Gnss_Synchro gs = gnss_pseudoranges_map.begin()->second; Gps_Ephemeris eph = d_ls_pvt->gps_ephemeris_map.begin()->second; double relative_rx_time = gs.Tracking_timestamp_secs; int gps_week = eph.i_GPS_week; double gps_sec = gs.d_TOW_at_current_symbol; Sbas_Time_Relation time_rel(relative_rx_time, gps_week, gps_sec); sbas_raw_msg.relate(time_rel); } // send the message to the rinex logger if it has a valid GPS time stamp if(sbas_raw_msg.get_rx_time_obj().is_related()) { rp->log_rinex_sbs(rp->sbsFile, sbas_raw_msg); } } // ############ 2 COMPUTE THE PVT ################################ if (gnss_pseudoranges_map.size() > 0 and d_ls_pvt->gps_ephemeris_map.size() > 0) { // compute on the fly PVT solution //mod 8/4/2012 Set the PVT computation rate in this block if ((d_sample_counter % d_output_rate_ms) == 0) { bool pvt_result; pvt_result = d_ls_pvt->get_PVT(gnss_pseudoranges_map, d_rx_time, d_flag_averaging); if (pvt_result == true) { d_kml_dump->print_position(d_ls_pvt, d_flag_averaging); d_nmea_printer->Print_Nmea_Line(d_ls_pvt, d_flag_averaging); if (!b_rinex_header_writen) { std::map::iterator gps_ephemeris_iter; gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) { rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, d_rx_time); rp->rinex_nav_header(rp->navFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model); b_rinex_header_writen = true; // do not write header anymore } } if(b_rinex_header_writen) // Put here another condition to separate annotations (e.g 30 s) { // Limit the RINEX navigation output rate to 1/6 seg // Notice that d_sample_counter period is 1ms (for GPS correlators) if ((d_sample_counter - d_last_sample_nav_output) >= 6000) { rp->log_rinex_nav(rp->navFile, d_ls_pvt->gps_ephemeris_map); d_last_sample_nav_output = d_sample_counter; } std::map::iterator gps_ephemeris_iter; gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) { rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map); } if (!b_rinex_header_updated && (d_ls_pvt->gps_utc_model.d_A0 != 0)) { rp->update_obs_header(rp->obsFile, d_ls_pvt->gps_utc_model); rp->update_nav_header(rp->navFile, d_ls_pvt->gps_utc_model, d_ls_pvt->gps_iono); b_rinex_header_updated = true; } } } } // DEBUG MESSAGE: Display position in console output if (((d_sample_counter % d_display_rate_ms) == 0) and d_ls_pvt->b_valid_position == true) { std::cout << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d << " [deg], Height= " << d_ls_pvt->d_height_m << " [m]" << std::endl; LOG(INFO) << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d << " [deg], Height= " << d_ls_pvt->d_height_m << " [m]"; LOG(INFO) << "Dilution of Precision at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " is HDOP = " << d_ls_pvt->d_HDOP << " VDOP = " << d_ls_pvt->d_VDOP <<" TDOP = " << d_ls_pvt->d_TDOP << " GDOP = " << d_ls_pvt->d_GDOP; } // MULTIPLEXED FILE RECORDING - Record results to file if(d_dump == true) { try { double tmp_double; for (unsigned int i = 0; i < d_nchannels ; i++) { tmp_double = in[i][0].Pseudorange_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = 0; d_dump_file.write((char*)&tmp_double, sizeof(double)); d_dump_file.write((char*)&d_rx_time, sizeof(double)); } } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } } consume_each(1); //one by one return noutput_items; } gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.h0000644000175000017500000001205612576764164025075 0ustar carlescarles/*! * \file galileo_e1_pvt_cc.h * \brief Interface of a Position Velocity and Time computation block for Galileo E1 * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PVT_CC_H #define GNSS_SDR_GALILEO_E1_PVT_CC_H #include #include #include #include #include #include #include #include #include "galileo_navigation_message.h" #include "galileo_ephemeris.h" #include "galileo_utc_model.h" #include "galileo_iono.h" #include "nmea_printer.h" #include "kml_printer.h" #include "rinex_printer.h" #include "galileo_e1_ls_pvt.h" #include "GPS_L1_CA.h" #include "Galileo_E1.h" class galileo_e1_pvt_cc; typedef boost::shared_ptr galileo_e1_pvt_cc_sptr; galileo_e1_pvt_cc_sptr galileo_e1_make_pvt_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); /*! * \brief This class implements a block that computes the PVT solution with Galileo E1 signals */ class galileo_e1_pvt_cc : public gr::block { private: friend galileo_e1_pvt_cc_sptr galileo_e1_make_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); galileo_e1_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); boost::shared_ptr d_queue; bool d_dump; bool b_rinex_header_writen; bool b_rinex_header_updated; std::shared_ptr rp; unsigned int d_nchannels; std::string d_dump_filename; std::ofstream d_dump_file; int d_averaging_depth; bool d_flag_averaging; int d_output_rate_ms; int d_display_rate_ms; long unsigned int d_sample_counter; long unsigned int d_last_sample_nav_output; std::shared_ptr d_kml_dump; std::shared_ptr d_nmea_printer; double d_rx_time; std::shared_ptr d_ls_pvt; bool pseudoranges_pairCompare_min(const std::pair& a, const std::pair& b); public: ~galileo_e1_pvt_cc (); //!< Default destructor int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); //!< PVT Signal Processing }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc0000644000175000017500000003331112576764164025230 0ustar carlescarles/*! * \file galileo_e1_pvt_cc.cc * \brief Implementation of a Position Velocity and Time computation block for GPS L1 C/A * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pvt_cc.h" #include #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" #include "concurrent_map.h" using google::LogMessage; extern concurrent_map global_galileo_ephemeris_map; extern concurrent_map global_galileo_iono_map; extern concurrent_map global_galileo_utc_model_map; extern concurrent_map global_galileo_almanac_map; galileo_e1_pvt_cc_sptr galileo_e1_make_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname) { return galileo_e1_pvt_cc_sptr(new galileo_e1_pvt_cc(nchannels, queue, dump, dump_filename, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname)); } galileo_e1_pvt_cc::galileo_e1_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname) : gr::block("galileo_e1_pvt_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(gr_complex))) { d_output_rate_ms = output_rate_ms; d_display_rate_ms = display_rate_ms; d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_dump_filename = dump_filename; std::string dump_ls_pvt_filename = dump_filename; //initialize kml_printer std::string kml_dump_filename; kml_dump_filename = d_dump_filename; kml_dump_filename.append(".kml"); d_kml_dump = std::make_shared(); d_kml_dump->set_headers(kml_dump_filename); //initialize nmea_printer d_nmea_printer = std::make_shared(nmea_dump_filename, flag_nmea_tty_port, nmea_dump_devname); d_dump_filename.append("_raw.dat"); dump_ls_pvt_filename.append("_ls_pvt.dat"); d_averaging_depth = averaging_depth; d_flag_averaging = flag_averaging; d_ls_pvt = std::make_shared(nchannels, dump_ls_pvt_filename, d_dump); d_ls_pvt->set_averaging_depth(d_averaging_depth); d_sample_counter = 0; d_last_sample_nav_output = 0; d_rx_time = 0.0; b_rinex_header_writen = false; b_rinex_header_updated = false; rp = std::make_shared(); // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "PVT dump enabled Log file: " << d_dump_filename.c_str(); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception opening PVT dump file " << e.what(); } } } } galileo_e1_pvt_cc::~galileo_e1_pvt_cc() {} bool galileo_e1_pvt_cc::pseudoranges_pairCompare_min(const std::pair& a, const std::pair& b) { return (a.second.Pseudorange_m) < (b.second.Pseudorange_m); } int galileo_e1_pvt_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { d_sample_counter++; std::map gnss_pseudoranges_map; Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; //Get the input pointer for (unsigned int i = 0; i < d_nchannels; i++) { if (in[i][0].Flag_valid_pseudorange == true) { gnss_pseudoranges_map.insert(std::pair(in[i][0].PRN, in[i][0])); // store valid pseudoranges in a map d_rx_time = in[i][0].d_TOW_at_current_symbol; // all the channels have the same RX timestamp (common RX time pseudoranges) } } // ############ 1. READ EPHEMERIS/UTC_MODE/IONO FROM GLOBAL MAPS #### if (global_galileo_ephemeris_map.size() > 0) { d_ls_pvt->galileo_ephemeris_map = global_galileo_ephemeris_map.get_map_copy(); } if (global_galileo_utc_model_map.size() > 0) { // UTC MODEL data is shared for all the Galileo satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_galileo_utc_model_map.read(i, d_ls_pvt->galileo_utc_model); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } if (global_galileo_iono_map.size() > 0) { // IONO data is shared for all Galileo satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_galileo_iono_map.read(i, d_ls_pvt->galileo_iono); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } if (global_galileo_almanac_map.size() > 0) { // ALMANAC data is shared for all Galileo satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_galileo_almanac_map.read(i, d_ls_pvt->galileo_almanac); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } // ############ 2 COMPUTE THE PVT ################################ if (gnss_pseudoranges_map.size() > 0 and d_ls_pvt->galileo_ephemeris_map.size() > 0) { // compute on the fly PVT solution if ((d_sample_counter % d_output_rate_ms) == 0) { bool pvt_result; pvt_result = d_ls_pvt->get_PVT(gnss_pseudoranges_map, d_rx_time, d_flag_averaging); if (pvt_result == true) { d_kml_dump->print_position_galileo(d_ls_pvt, d_flag_averaging); //ToDo: Implement Galileo RINEX and Galileo NMEA outputs // d_nmea_printer->Print_Nmea_Line(d_ls_pvt, d_flag_averaging); // if (!b_rinex_header_writen) { std::map::iterator galileo_ephemeris_iter; galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end()) { rp->rinex_obs_header(rp->obsFile, galileo_ephemeris_iter->second, d_rx_time); rp->rinex_nav_header(rp->navGalFile, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model, d_ls_pvt->galileo_almanac); b_rinex_header_writen = true; // do not write header anymore } } if(b_rinex_header_writen) // Put here another condition to separate annotations (e.g 30 s) { // Limit the RINEX navigation output rate to 1/6 seg // Notice that d_sample_counter period is 4ms (for Galileo correlators) if ((d_sample_counter - d_last_sample_nav_output) >= 6000) { rp->log_rinex_nav(rp->navGalFile, d_ls_pvt->galileo_ephemeris_map); d_last_sample_nav_output = d_sample_counter; } std::map::iterator galileo_ephemeris_iter; galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end()) { rp->log_rinex_obs(rp->obsFile, galileo_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map); } if (!b_rinex_header_updated && (d_ls_pvt->galileo_utc_model.A0_6 != 0)) { rp->update_nav_header(rp->navGalFile, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model, d_ls_pvt->galileo_almanac); rp->update_obs_header(rp->obsFile, d_ls_pvt->galileo_utc_model); b_rinex_header_updated = true; } } } } // DEBUG MESSAGE: Display position in console output if (((d_sample_counter % d_display_rate_ms) == 0) and d_ls_pvt->b_valid_position == true) { std::cout << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d << " [deg], Height= " << d_ls_pvt->d_height_m << " [m]" << std::endl; LOG(INFO) << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d << " [deg], Height= " << d_ls_pvt->d_height_m << " [m]"; LOG(INFO) << "Dilution of Precision at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " is HDOP = " << d_ls_pvt->d_HDOP << " VDOP = " << d_ls_pvt->d_VDOP <<" TDOP = " << d_ls_pvt->d_TDOP << " GDOP = " << d_ls_pvt->d_GDOP; } // MULTIPLEXED FILE RECORDING - Record results to file if(d_dump == true) { try { double tmp_double; for (unsigned int i = 0; i < d_nchannels; i++) { tmp_double = in[i][0].Pseudorange_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = 0; d_dump_file.write((char*)&tmp_double, sizeof(double)); d_dump_file.write((char*)&d_rx_time, sizeof(double)); } } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } } consume_each(1); //one by one return 0; } gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000262712576764164024130 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(PVT_GR_BLOCKS_SOURCES gps_l1_ca_pvt_cc.cc galileo_e1_pvt_cc.cc hybrid_pvt_cc.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs ${ARMADILLO_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB PVT_GR_BLOCKS_HEADERS "*.h") add_library(pvt_gr_blocks ${PVT_GR_BLOCKS_SOURCES} ${PVT_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${PVT_GR_BLOCKS_HEADERS}) target_link_libraries(pvt_gr_blocks pvt_lib ${ARMADILLO_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cc0000644000175000017500000004207412576764164024516 0ustar carlescarles/*! * \file hybrid_pvt_cc.cc * \brief Implementation of a Position Velocity and Time computation block for GPS L1 C/A * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "hybrid_pvt_cc.h" #include #include #include #include #include #include #include #include #include #include #include "control_message_factory.h" #include "gnss_synchro.h" #include "concurrent_map.h" using google::LogMessage; extern concurrent_map global_galileo_ephemeris_map; extern concurrent_map global_galileo_iono_map; extern concurrent_map global_galileo_utc_model_map; extern concurrent_map global_galileo_almanac_map; extern concurrent_map global_gps_ephemeris_map; extern concurrent_map global_gps_iono_map; extern concurrent_map global_gps_utc_model_map; hybrid_pvt_cc_sptr hybrid_make_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname) { return hybrid_pvt_cc_sptr(new hybrid_pvt_cc(nchannels, queue, dump, dump_filename, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname)); } hybrid_pvt_cc::hybrid_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname) : gr::block("hybrid_pvt_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)), gr::io_signature::make(1, 1, sizeof(gr_complex))) { d_output_rate_ms = output_rate_ms; d_display_rate_ms = display_rate_ms; d_queue = queue; d_dump = dump; d_nchannels = nchannels; d_dump_filename = dump_filename; std::string dump_ls_pvt_filename = dump_filename; //initialize kml_printer std::string kml_dump_filename; kml_dump_filename = d_dump_filename; kml_dump_filename.append(".kml"); d_kml_dump = std::make_shared(); d_kml_dump->set_headers(kml_dump_filename); //initialize nmea_printer d_nmea_printer = std::make_shared(nmea_dump_filename, flag_nmea_tty_port, nmea_dump_devname); d_dump_filename.append("_raw.dat"); dump_ls_pvt_filename.append("_ls_pvt.dat"); d_averaging_depth = averaging_depth; d_flag_averaging = flag_averaging; d_ls_pvt = std::make_shared((int)nchannels, dump_ls_pvt_filename, d_dump); d_ls_pvt->set_averaging_depth(d_averaging_depth); d_sample_counter = 0; d_last_sample_nav_output = 0; d_rx_time = 0.0; d_TOW_at_curr_symbol_constellation = 0.0; b_rinex_header_writen = false; b_rinex_header_updated = false; rp = std::make_shared(); // ############# ENABLE DATA FILE LOG ################# if (d_dump == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit ); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "PVT dump enabled Log file: " << d_dump_filename.c_str(); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception opening PVT dump file " << e.what(); } } } } hybrid_pvt_cc::~hybrid_pvt_cc() {} bool hybrid_pvt_cc::pseudoranges_pairCompare_min(const std::pair& a, const std::pair& b) { return (a.second.Pseudorange_m) < (b.second.Pseudorange_m); } int hybrid_pvt_cc::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { d_sample_counter++; bool arrived_galileo_almanac = false; std::map gnss_pseudoranges_map; Gnss_Synchro **in = (Gnss_Synchro **) &input_items[0]; //Get the input pointer for (unsigned int i = 0; i < d_nchannels; i++) { if (in[i][0].Flag_valid_pseudorange == true) { gnss_pseudoranges_map.insert(std::pair(in[i][0].PRN, in[i][0])); // store valid pseudoranges in a map //d_rx_time = in[i][0].d_TOW_at_current_symbol; // all the channels have the same RX timestamp (common RX time pseudoranges) d_TOW_at_curr_symbol_constellation = in[i][0].d_TOW_at_current_symbol; // d_TOW_at_current_symbol not corrected by delta t (just for debug) d_rx_time = in[i][0].d_TOW_hybrid_at_current_symbol; // hybrid rx time, all the channels have the same RX timestamp (common RX time pseudoranges) } } // ############ 1. READ GALILEO EPHEMERIS/UTC_MODE/IONO FROM GLOBAL MAPS #### if (global_galileo_ephemeris_map.size() > 0) { d_ls_pvt->galileo_ephemeris_map = global_galileo_ephemeris_map.get_map_copy(); } if (global_galileo_utc_model_map.size() > 0) { // UTC MODEL data is shared for all the Galileo satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_galileo_utc_model_map.read(i, d_ls_pvt->galileo_utc_model); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } if (global_galileo_iono_map.size() > 0) { // IONO data is shared for all Galileo satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_galileo_iono_map.read(i, d_ls_pvt->galileo_iono); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } if (global_galileo_almanac_map.size() > 0) { // data is shared for all Galileo satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { arrived_galileo_almanac = global_galileo_almanac_map.read(i, d_ls_pvt->galileo_almanac); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } // ############ 1. READ GPS EPHEMERIS/UTC_MODE/IONO FROM GLOBAL MAPS #### if (global_gps_ephemeris_map.size() > 0) { d_ls_pvt->gps_ephemeris_map = global_gps_ephemeris_map.get_map_copy(); } if (global_gps_utc_model_map.size() > 0) { // UTC MODEL data is shared for all the GPS satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_gps_utc_model_map.read(i, d_ls_pvt->gps_utc_model); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } if (global_gps_iono_map.size() > 0) { // IONO data is shared for all the GPS satellites. Read always at a locked channel signed int i = 0; while(true) { if (in[i][0].Flag_valid_pseudorange == true) { global_gps_iono_map.read(i, d_ls_pvt->gps_iono); break; } i++; if (i == (signed int)d_nchannels - 1) { break; } } } // ############ 2 COMPUTE THE PVT ################################ // ToDo: relax this condition because the receiver should work even with NO GALILEO SATELLITES //if (gnss_pseudoranges_map.size() > 0 and d_ls_pvt->galileo_ephemeris_map.size() > 0 and d_ls_pvt->gps_ephemeris_map.size() > 0) if (gnss_pseudoranges_map.size() > 0) { //std::cout << "Both GPS and Galileo ephemeris map have been filled " << std::endl; // compute on the fly PVT solution if ((d_sample_counter % d_output_rate_ms) == 0) { bool pvt_result; pvt_result = d_ls_pvt->get_PVT(gnss_pseudoranges_map, d_rx_time, d_flag_averaging); if (pvt_result == true) { d_kml_dump->print_position_hybrid(d_ls_pvt, d_flag_averaging); //ToDo: Implement Galileo RINEX and Galileo NMEA outputs // d_nmea_printer->Print_Nmea_Line(d_ls_pvt, d_flag_averaging); // if (!b_rinex_header_writen) // & we have utc data in nav message! { std::map::iterator galileo_ephemeris_iter; galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); std::map::iterator gps_ephemeris_iter; gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); if ((galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end()) && (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) ) { if (arrived_galileo_almanac) { rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time); rp->rinex_nav_header(rp->navMixFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model, d_ls_pvt->galileo_almanac); b_rinex_header_writen = true; // do not write header anymore } } } if(b_rinex_header_writen) // Put here another condition to separate annotations (e.g 30 s) { // Limit the RINEX navigation output rate to 1/6 seg // Notice that d_sample_counter period is 4ms (for Galileo correlators) if ((d_sample_counter - d_last_sample_nav_output) >= 6000) { rp->log_rinex_nav(rp->navMixFile, d_ls_pvt->gps_ephemeris_map, d_ls_pvt->galileo_ephemeris_map); d_last_sample_nav_output = d_sample_counter; } std::map::iterator galileo_ephemeris_iter; galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.begin(); std::map::iterator gps_ephemeris_iter; gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.begin(); if ((galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end()) || (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) ) { rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, galileo_ephemeris_iter->second, d_rx_time, gnss_pseudoranges_map); } if (!b_rinex_header_updated && (d_ls_pvt->gps_utc_model.d_A0 != 0)) { rp->update_obs_header(rp->obsFile, d_ls_pvt->gps_utc_model); rp->update_nav_header(rp->navMixFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model, d_ls_pvt->galileo_almanac); b_rinex_header_updated = true; } } } } // DEBUG MESSAGE: Display position in console output if (((d_sample_counter % d_display_rate_ms) == 0) and d_ls_pvt->b_valid_position == true) { std::cout << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC using "<< d_ls_pvt->d_valid_observations<<" observations is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d << " [deg], Height= " << d_ls_pvt->d_height_m << " [m]" << std::endl; LOG(INFO) << "Position at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC using "<< d_ls_pvt->d_valid_observations<<" observations is Lat = " << d_ls_pvt->d_latitude_d << " [deg], Long = " << d_ls_pvt->d_longitude_d << " [deg], Height= " << d_ls_pvt->d_height_m << " [m]"; std::cout << "Dilution of Precision at " << boost::posix_time::to_simple_string(d_ls_pvt->d_position_UTC_time) << " UTC using "<< d_ls_pvt->d_valid_observations<<" observations is HDOP = " << d_ls_pvt->d_HDOP << " VDOP = " << d_ls_pvt->d_VDOP <<" TDOP = " << d_ls_pvt->d_TDOP << " GDOP = " << d_ls_pvt->d_GDOP << std::endl; } // MULTIPLEXED FILE RECORDING - Record results to file if(d_dump == true) { try { double tmp_double; for (unsigned int i = 0; i < d_nchannels; i++) { tmp_double = in[i][0].Pseudorange_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); tmp_double = 0; d_dump_file.write((char*)&tmp_double, sizeof(double)); d_dump_file.write((char*)&d_rx_time, sizeof(double)); } } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing observables dump file " << e.what(); } } } consume_each(1); //one by one return noutput_items; } gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.h0000644000175000017500000001156112576764164024724 0ustar carlescarles/*! * \file gps_l1_ca_pvt_cc.h * \brief Interface of a Position Velocity and Time computation block for GPS L1 C/A * \author Javier Arribas, 2011. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PVT_CC_H #define GNSS_SDR_GPS_L1_CA_PVT_CC_H #include #include #include #include #include #include #include #include #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_utc_model.h" #include "gps_iono.h" #include "nmea_printer.h" #include "kml_printer.h" #include "rinex_printer.h" #include "gps_l1_ca_ls_pvt.h" #include "GPS_L1_CA.h" class gps_l1_ca_pvt_cc; typedef boost::shared_ptr gps_l1_ca_pvt_cc_sptr; gps_l1_ca_pvt_cc_sptr gps_l1_ca_make_pvt_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); /*! * \brief This class implements a block that computes the PVT solution */ class gps_l1_ca_pvt_cc : public gr::block { private: friend gps_l1_ca_pvt_cc_sptr gps_l1_ca_make_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); gps_l1_ca_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); boost::shared_ptr d_queue; bool d_dump; bool b_rinex_header_writen; bool b_rinex_sbs_header_writen; bool b_rinex_header_updated; std::shared_ptr rp; unsigned int d_nchannels; std::string d_dump_filename; std::ofstream d_dump_file; int d_averaging_depth; bool d_flag_averaging; int d_output_rate_ms; int d_display_rate_ms; long unsigned int d_sample_counter; long unsigned int d_last_sample_nav_output; std::shared_ptr d_kml_dump; std::shared_ptr d_nmea_printer; double d_rx_time; std::shared_ptr d_ls_pvt; public: ~gps_l1_ca_pvt_cc (); //!< Default destructor int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); //!< PVT Signal Processing }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.h0000644000175000017500000001222112576764164024347 0ustar carlescarles/*! * \file hybrid_pvt_cc.h * \brief Interface of a Position Velocity and Time computation block for Galileo E1 * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_HYBRID_PVT_CC_H #define GNSS_SDR_HYBRID_PVT_CC_H #include #include #include #include #include #include #include #include #include "galileo_navigation_message.h" #include "galileo_ephemeris.h" #include "galileo_utc_model.h" #include "galileo_iono.h" #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_utc_model.h" #include "gps_iono.h" #include "nmea_printer.h" #include "kml_printer.h" #include "rinex_printer.h" #include "hybrid_ls_pvt.h" #include "GPS_L1_CA.h" #include "Galileo_E1.h" class hybrid_pvt_cc; typedef boost::shared_ptr hybrid_pvt_cc_sptr; hybrid_pvt_cc_sptr hybrid_make_pvt_cc(unsigned int n_channels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); /*! * \brief This class implements a block that computes the PVT solution with Galileo E1 signals */ class hybrid_pvt_cc : public gr::block { private: friend hybrid_pvt_cc_sptr hybrid_make_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); hybrid_pvt_cc(unsigned int nchannels, boost::shared_ptr queue, bool dump, std::string dump_filename, int averaging_depth, bool flag_averaging, int output_rate_ms, int display_rate_ms, bool flag_nmea_tty_port, std::string nmea_dump_filename, std::string nmea_dump_devname); boost::shared_ptr d_queue; bool d_dump; bool b_rinex_header_writen; bool b_rinex_header_updated; std::shared_ptr rp; unsigned int d_nchannels; std::string d_dump_filename; std::ofstream d_dump_file; int d_averaging_depth; bool d_flag_averaging; int d_output_rate_ms; int d_display_rate_ms; long unsigned int d_sample_counter; long unsigned int d_last_sample_nav_output; std::shared_ptr d_kml_dump; std::shared_ptr d_nmea_printer; double d_rx_time; double d_TOW_at_curr_symbol_constellation; std::shared_ptr d_ls_pvt; bool pseudoranges_pairCompare_min(const std::pair& a, const std::pair& b); public: ~hybrid_pvt_cc (); //!< Default destructor int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); //!< PVT Signal Processing }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/CMakeLists.txt0000644000175000017500000000146212576764164020757 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) add_subdirectory(libs) gnss-sdr-0.0.6/src/algorithms/PVT/libs/0000755000175000017500000000000012576764164017145 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/PVT/libs/nmea_printer.h0000644000175000017500000000603112576764164022001 0ustar carlescarles/*! * \file nmea_printer.h * \brief Interface of a NMEA 2.1 printer for GNSS-SDR * This class provides a implementation of a subset of the NMEA-0183 standard for interfacing * marine electronic devices as defined by the National Marine Electronics Association (NMEA). * See http://www.nmea.org/ for the NMEA 183 standard * * \author Javier Arribas, 2012. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_NMEA_PRINTER_H_ #define GNSS_SDR_NMEA_PRINTER_H_ #include #include #include #include "gps_l1_ca_ls_pvt.h" /*! * \brief This class provides a implementation of a subset of the NMEA-0183 standard for interfacing * marine electronic devices as defined by the National Marine Electronics Association (NMEA). * * See http://en.wikipedia.org/wiki/NMEA_0183 */ class Nmea_Printer { public: /*! * \brief Default constructor. */ Nmea_Printer(std::string filename, bool flag_nmea_tty_port, std::string nmea_dump_filename); /*! * \brief Print NMEA PVT and satellite info to the initialized device */ bool Print_Nmea_Line(const std::shared_ptr& position, bool print_average_values); /*! * \brief Default destructor. */ ~Nmea_Printer(); private: std::string nmea_filename; // String with the NMEA log filename std::ofstream nmea_file_descriptor; // Output file stream for NMEA log file std::string nmea_devname; int nmea_dev_descriptor; // NMEA serial device descriptor (i.e. COM port) std::shared_ptr d_PVT_data; int init_serial(std::string serial_device); //serial port control void close_serial(); std::string get_GPGGA(); // fix data std::string get_GPGSV(); // satellite data std::string get_GPGSA(); // overall satellite reception data std::string get_GPRMC(); // minimum recommended data std::string get_UTC_NMEA_time(boost::posix_time::ptime d_position_UTC_time); std::string longitude_to_hm(double longitude); std::string latitude_to_hm(double lat); char checkSum(std::string sentence); }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/libs/kml_printer.h0000644000175000017500000000400312576764164021641 0ustar carlescarles/*! * \file kml_printer.h * \brief Interface of a class that prints PVT information to a kml file * \author Javier Arribas, 2011. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_KML_PRINTER_H_ #define GNSS_SDR_KML_PRINTER_H_ #include #include #include #include #include "gps_l1_ca_ls_pvt.h" #include "galileo_e1_ls_pvt.h" #include "hybrid_ls_pvt.h" /*! * \brief Prints PVT information to OGC KML format file (can be viewed with Google Earth) * * See http://www.opengeospatial.org/standards/kml */ class Kml_Printer { private: std::ofstream kml_file; public: bool set_headers(std::string filename); bool print_position(const std::shared_ptr& position, bool print_average_values); bool print_position_galileo(const std::shared_ptr& position, bool print_average_values); bool print_position_hybrid(const std::shared_ptr& position, bool print_average_values); bool close_file(); Kml_Printer(); ~Kml_Printer(); }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/libs/rtcm_printer.cc0000644000175000017500000002576412576764164022202 0ustar carlescarles/*! * \file rtcm_printer.cc * \brief Implementation of a RTCM 3.2 printer for GNSS-SDR * This class provides a implementation of a subset of the RTCM Standard 10403.2 * for Differential GNSS Services * * \author Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "rtcm_printer.h" #include // for O_RDWR #include // for tcgetattr #include // for std::reverse #include // for std::stringstream #include // for to_upper_copy #include #include #include #include using google::LogMessage; //DEFINE_string(RTCM_version, "3.2", "Specifies the RTCM Version"); Rtcm_Printer::Rtcm_Printer(std::string filename, bool flag_rtcm_tty_port, std::string rtcm_dump_devname) { rtcm_filename = filename; rtcm_file_descriptor.open(rtcm_filename.c_str(), std::ios::out); if (rtcm_file_descriptor.is_open()) { DLOG(INFO) << "RTCM printer writing on " << rtcm_filename.c_str(); } rtcm_devname = rtcm_dump_devname; if (flag_rtcm_tty_port == true) { rtcm_dev_descriptor = init_serial(rtcm_devname.c_str()); if (rtcm_dev_descriptor != -1) { DLOG(INFO) << "RTCM printer writing on " << rtcm_devname.c_str(); } } else { rtcm_dev_descriptor = -1; } Rtcm_Printer::reset_data_fields(); preamble = std::bitset<8>("11010011"); reserved_field = std::bitset<6>("000000"); } Rtcm_Printer::~Rtcm_Printer() { if (rtcm_file_descriptor.is_open()) { long pos; rtcm_file_descriptor.close(); pos = rtcm_file_descriptor.tellp(); if (pos == 0) { if(remove(rtcm_filename.c_str()) != 0) LOG(INFO) << "Error deleting temporary file"; } } close_serial(); } int Rtcm_Printer::init_serial(std::string serial_device) { /*! * Opens the serial device and sets the default baud rate for a NMEA transmission (9600,8,N,1) */ int fd = 0; struct termios options; long BAUD; long DATABITS; long STOPBITS; long PARITYON; long PARITY; fd = open(serial_device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) return fd; // failed to open TTY port if(fcntl(fd, F_SETFL, 0) == -1) LOG(INFO) << "Error enabling direct I/O"; // clear all flags on descriptor, enable direct I/O tcgetattr(fd, &options); // read serial port options BAUD = B9600; //BAUD = B38400; DATABITS = CS8; STOPBITS = 0; PARITYON = 0; PARITY = 0; options.c_cflag = BAUD | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD; // enable receiver, set 8 bit data, ignore control lines //options.c_cflag |= (CLOCAL | CREAD | CS8); options.c_iflag = IGNPAR; // set the new port options tcsetattr(fd, TCSANOW, &options); return fd; } void Rtcm_Printer::close_serial() { if (rtcm_dev_descriptor != -1) { close(rtcm_dev_descriptor); } } void Rtcm_Printer::reset_data_fields() { //DF001.reset(); DF002.reset(); DF003.reset(); DF004.reset(); DF005.reset(); DF006.reset(); DF007.reset(); DF008.reset(); DF009.reset(); DF010.reset(); DF011.reset(); DF012.reset(); DF013.reset(); DF014.reset(); DF015.reset(); // Contents of GPS Satellite Ephemeris Data, Message Type 1019 DF071.reset(); DF076.reset(); DF077.reset(); DF078.reset(); DF079.reset(); DF081.reset(); DF082.reset(); DF083.reset(); DF084.reset(); DF085.reset(); DF086.reset(); DF087.reset(); DF088.reset(); DF089.reset(); DF090.reset(); DF091.reset(); DF092.reset(); DF093.reset(); DF094.reset(); DF095.reset(); DF096.reset(); DF097.reset(); DF098.reset(); DF099.reset(); DF100.reset(); DF101.reset(); DF102.reset(); DF103.reset(); DF137.reset(); // Contents of Galileo F/NAV Satellite Ephemeris Data, Message Type 1045 DF252.reset(); DF289.reset(); DF290.reset(); DF291.reset(); DF292.reset(); DF293.reset(); DF294.reset(); DF295.reset(); DF296.reset(); DF297.reset(); DF298.reset(); DF299.reset(); DF300.reset(); DF301.reset(); DF302.reset(); DF303.reset(); DF304.reset(); DF305.reset(); DF306.reset(); DF307.reset(); DF308.reset(); DF309.reset(); DF310.reset(); DF311.reset(); DF312.reset(); DF314.reset(); DF315.reset(); } /* Stationary Antenna Reference Point, No Height Information * Reference Station Id = 2003 GPS Service supported, but not GLONASS or Galileo ARP ECEF-X = 1114104.5999 meters ARP ECEF-Y = -4850729.7108 meters ARP ECEF-Z = 3975521.4643 meters Expected output: D3 00 13 3E D7 D3 02 02 98 0E DE EF 34 B4 BD 62 AC 09 41 98 6F 33 36 0B 98 */ std::bitset<152> Rtcm_Printer::get_M1005_test () { unsigned int m1005 = 1005; unsigned int reference_station_id = 2003; // Max: 4095 long long int ECEF_X = 11141045999; // Resolution 0.0001 m long long int ECEF_Y = -48507297108; // Resolution 0.0001 m long long int ECEF_Z = 39755214643; // Resolution 0.0001 m unsigned int itrf_realization_year = 0; // Reserved std::bitset<1> DF001; DF002 = std::bitset<12>(m1005); DF003 = std::bitset<12>(reference_station_id); DF021 = std::bitset<6>(itrf_realization_year); DF022 = std::bitset<1>("1"); // GPS DF023 = std::bitset<1>("0"); // Glonass DF024 = std::bitset<1>("0"); // Galileo DF141 = std::bitset<1>("0"); // 0: Real, physical reference station DF001 = std::bitset<1>("0"); // Reserved, set to 0 DF025 = std::bitset<38>(ECEF_X); // ECEF-X in 0.0001 m DF142 = std::bitset<1>("0"); // Single Receiver Oscillator Indicator DF026 = std::bitset<38>(ECEF_Y); // ECEF-Y in 0.0001 m DF364 = std::bitset<2>("00"); // Quarter Cycle Indicator DF027 = std::bitset<38>(ECEF_Z); // ECEF-Z in 0.0001 m std::string message = DF002.to_string() + DF003.to_string() + DF021.to_string() + DF022.to_string() + DF023.to_string() + DF024.to_string() + DF141.to_string() + DF025.to_string() + DF142.to_string() + DF001.to_string() + DF026.to_string() + DF364.to_string() + DF027.to_string() ; std::bitset<152> test_msg(message); return test_msg; } std::string Rtcm_Printer::print_M1005_test () { std::bitset<152> m1005 = get_M1005_test(); unsigned int msg_length_bits = m1005.to_string().length(); unsigned int msg_length_bytes = std::ceil(static_cast(msg_length_bits) / 8.0); message_length = std::bitset<10>(msg_length_bytes); unsigned int zeros_to_fill = 8*msg_length_bytes - msg_length_bits; std::string b(zeros_to_fill, '0'); std::string msg_content = m1005.to_string() + b; std::string msg_without_crc = preamble.to_string() + reserved_field.to_string() + message_length.to_string() + msg_content; return Rtcm_Printer::add_CRC(msg_without_crc); } std::bitset<122> Rtcm_Printer::get_M1001() { unsigned int m1001 = 1001; unsigned int reference_station_id = 1234; // Max: 4095 DF002 = std::bitset<12>(m1001); DF003 = std::bitset<12>(reference_station_id); //DF004 = std::bitset<30> //DF005 = std::bitset<1> //DF006 = std::bitset<5> DF007 = std::bitset<1>("0"); //DF008 = std::bitset<3> std::bitset<122> fake_msg; fake_msg.reset(); return fake_msg; } void Rtcm_Printer::print_M1001 () { std::bitset<122> m1001 = get_M1001(); unsigned int msg_length_bits = m1001.to_string().length(); unsigned int msg_length_bytes = std::ceil(static_cast(msg_length_bits) / 8.0); message_length = std::bitset<10>(msg_length_bytes); unsigned int zeros_to_fill = 8*msg_length_bytes - msg_length_bits; std::string b(zeros_to_fill, '0'); message_length = std::bitset<10>(static_cast(msg_length_bytes)); std::string msg_content = m1001.to_string() + b; std::string msg_without_crc = preamble.to_string() + reserved_field.to_string() + message_length.to_string() + msg_content; std::string message = Rtcm_Printer::add_CRC(msg_without_crc); } std::bitset<138> Rtcm_Printer::get_M1002 () { std::bitset<138> fake_msg; fake_msg.reset(); return fake_msg; } std::bitset<488> Rtcm_Printer::get_M1019 () { std::bitset<488> fake_msg; fake_msg.reset(); return fake_msg; } std::bitset<496> Rtcm_Printer::get_M1045 () { std::bitset<496> fake_msg; fake_msg.reset(); return fake_msg; } std::string Rtcm_Printer::add_CRC (const std::string& message_without_crc) { // ****** Computes Qualcomm CRC-24Q ****** // 1) Converts the string to a vector of unsigned char: boost::dynamic_bitset frame_bits(message_without_crc); std::vector bytes; boost::to_block_range(frame_bits, std::back_inserter(bytes)); std::reverse(bytes.begin(),bytes.end()); // 2) Computes CRC CRC_RTCM.process_bytes(bytes.data(), bytes.size()); crc_frame = std::bitset<24>(CRC_RTCM.checksum()); // 3) Builds the complete message std::string complete_message = message_without_crc + crc_frame.to_string(); return bin_to_hex(complete_message); } std::string Rtcm_Printer::bin_to_hex(const std::string& s) { std::string s_aux; std::stringstream ss; for(int i = 0; i < s.length() - 1; i = i + 32) { s_aux.assign(s, i, 32); std::bitset<32> bs(s_aux); unsigned n = bs.to_ulong(); ss << std::hex << n; } //return ss.str(); return boost::to_upper_copy(ss.str()); } gnss-sdr-0.0.6/src/algorithms/PVT/libs/hybrid_ls_pvt.cc0000644000175000017500000011503412576764164022330 0ustar carlescarles/*! * \file galileo_e1_ls_pvt.cc * \brief Implementation of a Least Squares Position, Velocity, and Time * (PVT) solver, based on K.Borre's Matlab receiver. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "hybrid_ls_pvt.h" #include #include "Galileo_E1.h" using google::LogMessage; hybrid_ls_pvt::hybrid_ls_pvt(int nchannels, std::string dump_filename, bool flag_dump_to_file) { // init empty ephemeris for all the available GNSS channels d_nchannels = nchannels; d_Gal_ephemeris = new Galileo_Navigation_Message[nchannels]; d_GPS_ephemeris = new Gps_Navigation_Message[nchannels]; d_dump_filename = dump_filename; d_flag_dump_enabled = flag_dump_to_file; d_averaging_depth = 0; d_galileo_current_time = 0; b_valid_position = false; d_latitude_d = 0.0; d_longitude_d = 0.0; d_height_m = 0.0; d_avg_latitude_d = 0.0; d_avg_longitude_d = 0.0; d_avg_height_m = 0.0; d_x_m = 0.0; d_y_m = 0.0; d_z_m = 0.0; d_GDOP = 0.0; d_PDOP = 0.0; d_HDOP = 0.0; d_VDOP = 0.0; d_TDOP = 0.0; d_flag_averaging = false; d_valid_observations = 0; d_valid_GPS_obs = 0; d_valid_GAL_obs = 0; count_valid_position = 0; // ############# ENABLE DATA FILE LOG ################# if (d_flag_dump_enabled == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "PVT lib dump enabled Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception opening PVT lib dump file " << e.what(); } } } } void hybrid_ls_pvt::set_averaging_depth(int depth) { d_averaging_depth = depth; } hybrid_ls_pvt::~hybrid_ls_pvt() { d_dump_file.close(); delete[] d_Gal_ephemeris; delete[] d_GPS_ephemeris; } arma::vec hybrid_ls_pvt::rotateSatellite(double traveltime, const arma::vec & X_sat) { /* * Returns rotated satellite ECEF coordinates due to Earth * rotation during signal travel time * * Inputs: * travelTime - signal travel time * X_sat - satellite's ECEF coordinates * * Returns: * X_sat_rot - rotated satellite's coordinates (ECEF) */ //--- Find rotation angle -------------------------------------------------- double omegatau; omegatau = OMEGA_EARTH_DOT * traveltime; //--- Build a rotation matrix ---------------------------------------------- arma::mat R3 = arma::zeros(3,3); R3(0, 0) = cos(omegatau); R3(0, 1) = sin(omegatau); R3(0, 2) = 0.0; R3(1, 0) = -sin(omegatau); R3(1, 1) = cos(omegatau); R3(1, 2) = 0.0; R3(2, 0) = 0.0; R3(2, 1) = 0.0; R3(2, 2) = 1; //--- Do the rotation ------------------------------------------------------ arma::vec X_sat_rot; X_sat_rot = R3 * X_sat; return X_sat_rot; } arma::vec hybrid_ls_pvt::leastSquarePos(const arma::mat & satpos, const arma::vec & obs, const arma::mat & w) { /* Computes the Least Squares Solution. * Inputs: * satpos - Satellites positions in ECEF system: [X; Y; Z;] * obs - Observations - the pseudorange measurements to each satellite * w - weigths vector * * Returns: * pos - receiver position and receiver clock error * (in ECEF system: [X, Y, Z, dt]) */ //=== Initialization ======================================================= int nmbOfIterations = 10; // TODO: include in config int nmbOfSatellites; nmbOfSatellites = satpos.n_cols; //Armadillo arma::vec pos = "0.0 0.0 0.0 0.0"; arma::mat A; arma::mat omc; arma::mat az; arma::mat el; A = arma::zeros(nmbOfSatellites, 4); omc = arma::zeros(nmbOfSatellites, 1); az = arma::zeros(1, nmbOfSatellites); el = arma::zeros(1, nmbOfSatellites); arma::mat X = satpos; arma::vec Rot_X; double rho2; double traveltime; double trop = 0.0; double dlambda; double dphi; double h; arma::mat mat_tmp; arma::vec x; //=== Iteratively find receiver position =================================== for (int iter = 0; iter < nmbOfIterations; iter++) { for (int i = 0; i < nmbOfSatellites; i++) { if (iter == 0) { //--- Initialize variables at the first iteration -------------- Rot_X = X.col(i); //Armadillo trop = 0.0; } else { //--- Update equations ----------------------------------------- rho2 = (X(0, i) - pos(0)) * (X(0, i) - pos(0)) + (X(1, i) - pos(1)) * (X(1, i) - pos(1)) + (X(2, i) - pos(2)) * (X(2, i) - pos(2)); traveltime = sqrt(rho2) / GALILEO_C_m_s; //--- Correct satellite position (do to earth rotation) -------- Rot_X = rotateSatellite(traveltime, X.col(i)); //armadillo //--- Find DOA and range of satellites topocent(&d_visible_satellites_Az[i], &d_visible_satellites_El[i], &d_visible_satellites_Distance[i], pos.subvec(0,2), Rot_X - pos.subvec(0, 2)); if(traveltime < 0.1 && nmbOfSatellites > 3) { //--- Find receiver's height togeod(&dphi, &dlambda, &h, 6378137.0, 298.257223563, pos(0), pos(1), pos(2)); //--- Find delay due to troposphere (in meters) tropo(&trop, sin(d_visible_satellites_El[i] * GALILEO_PI/180.0), h / 1000.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0); if(trop > 50.0 ) trop = 0.0; } } //--- Apply the corrections ---------------------------------------- omc(i) = (obs(i) - norm(Rot_X - pos.subvec(0, 2), 2) - pos(3) - trop); // Armadillo //--- Construct the A matrix --------------------------------------- //Armadillo A(i,0) = (-(Rot_X(0) - pos(0))) / obs(i); A(i,1) = (-(Rot_X(1) - pos(1))) / obs(i); A(i,2) = (-(Rot_X(2) - pos(2))) / obs(i); A(i,3) = 1.0; } //--- Find position update --------------------------------------------- x = arma::solve(w*A, w*omc); // Armadillo //--- Apply position update -------------------------------------------- pos = pos + x; if (arma::norm(x,2) < 1e-4) { break; // exit the loop because we assume that the LS algorithm has converged (err < 0.1 cm) } } try { //-- compute the Dilution Of Precision values d_Q = arma::inv(arma::htrans(A)*A); } catch(std::exception& e) { d_Q = arma::zeros(4,4); } return pos; } bool hybrid_ls_pvt::get_PVT(std::map gnss_pseudoranges_map, double hybrid_current_time, bool flag_averaging) { std::map::iterator gnss_pseudoranges_iter; std::map::iterator galileo_ephemeris_iter; std::map::iterator gps_ephemeris_iter; int valid_pseudoranges = gnss_pseudoranges_map.size(); arma::mat W = arma::eye(valid_pseudoranges, valid_pseudoranges); // channels weights matrix arma::vec obs = arma::zeros(valid_pseudoranges); // pseudoranges observation vector arma::mat satpos = arma::zeros(3, valid_pseudoranges); // satellite positions matrix int Galileo_week_number = 0; int GPS_week; double utc = 0; double utc_tx_corrected = 0; //utc computed at tx_time_corrected, added for Galileo constellation (in GPS utc is directly computed at TX_time_corrected_s) double TX_time_corrected_s; double SV_clock_bias_s = 0; d_flag_averaging = flag_averaging; // ******************************************************************************** // ****** PREPARE THE LEAST SQUARES DATA (SV POSITIONS MATRIX AND OBS VECTORS) **** // ******************************************************************************** int valid_obs = 0; //valid observations counter int obs_counter = 0; int valid_obs_GPS_counter = 0; int valid_obs_GALILEO_counter = 0; for(gnss_pseudoranges_iter = gnss_pseudoranges_map.begin(); gnss_pseudoranges_iter != gnss_pseudoranges_map.end(); gnss_pseudoranges_iter++) { if (gnss_pseudoranges_iter->second.System == 'E') { //std::cout << "Satellite System: " << gnss_pseudoranges_iter->second.System <first); if (galileo_ephemeris_iter != galileo_ephemeris_map.end()) { /*! * \todo Place here the satellite CN0 (power level, or weight factor) */ W(obs_counter, obs_counter) = 1; // COMMON RX TIME PVT ALGORITHM MODIFICATION (Like RINEX files) // first estimate of transmit time //Galileo_week_number = galileo_ephemeris_iter->second.WN_5;//for GST //double sec_in_day = 86400; //double day_in_week = 7; // t = WN*sec_in_day*day_in_week + TOW; // t is Galileo System Time to use to compute satellite positions double Rx_time = hybrid_current_time; double Tx_time = Rx_time - gnss_pseudoranges_iter->second.Pseudorange_m/GALILEO_C_m_s; // 2- compute the clock drift using the clock model (broadcast) for this SV SV_clock_bias_s = galileo_ephemeris_iter->second.sv_clock_drift(Tx_time); // 3- compute the current ECEF position for this SV using corrected TX time TX_time_corrected_s = Tx_time - SV_clock_bias_s; galileo_ephemeris_iter->second.satellitePosition(TX_time_corrected_s); satpos(0,obs_counter) = galileo_ephemeris_iter->second.d_satpos_X; satpos(1,obs_counter) = galileo_ephemeris_iter->second.d_satpos_Y; satpos(2,obs_counter) = galileo_ephemeris_iter->second.d_satpos_Z; // 5- fill the observations vector with the corrected pseudoranges obs(obs_counter) = gnss_pseudoranges_iter->second.Pseudorange_m + SV_clock_bias_s*GALILEO_C_m_s; d_visible_satellites_IDs[valid_obs] = galileo_ephemeris_iter->second.i_satellite_PRN; d_visible_satellites_CN0_dB[valid_obs] = gnss_pseudoranges_iter->second.CN0_dB_hz; valid_obs++; valid_obs_GALILEO_counter ++; Galileo_week_number = galileo_ephemeris_iter->second.WN_5; //for GST //debug double GST = galileo_ephemeris_iter->second.Galileo_System_Time(Galileo_week_number, hybrid_current_time); utc = galileo_utc_model.GST_to_UTC_time(GST, Galileo_week_number); // this shoud be removed and it should be considered the utc_tx_corrected utc_tx_corrected = galileo_utc_model.GST_to_UTC_time(TX_time_corrected_s, Galileo_week_number); //std::cout<<"Gal UTC at TX_time_corrected_s = "<first; } } else if (gnss_pseudoranges_iter->second.System == 'G') { //std::cout << "Satellite System: " << gnss_pseudoranges_iter->second.System <first); if (gps_ephemeris_iter != gps_ephemeris_map.end()) { /*! * \todo Place here the satellite CN0 (power level, or weight factor) */ W(obs_counter, obs_counter) = 1; // COMMON RX TIME PVT ALGORITHM MODIFICATION (Like RINEX files) // first estimate of transmit time double Rx_time = hybrid_current_time; double Tx_time = Rx_time - gnss_pseudoranges_iter->second.Pseudorange_m/GPS_C_m_s; // 2- compute the clock drift using the clock model (broadcast) for this SV SV_clock_bias_s = gps_ephemeris_iter->second.sv_clock_drift(Tx_time); // 3- compute the current ECEF position for this SV using corrected TX time TX_time_corrected_s = Tx_time - SV_clock_bias_s; gps_ephemeris_iter->second.satellitePosition(TX_time_corrected_s); satpos(0, obs_counter) = gps_ephemeris_iter->second.d_satpos_X; satpos(1, obs_counter) = gps_ephemeris_iter->second.d_satpos_Y; satpos(2, obs_counter) = gps_ephemeris_iter->second.d_satpos_Z; // 5- fill the observations vector with the corrected pseudorranges obs(obs_counter) = gnss_pseudoranges_iter->second.Pseudorange_m + SV_clock_bias_s*GPS_C_m_s; d_visible_satellites_IDs[valid_obs] = gps_ephemeris_iter->second.i_satellite_PRN; d_visible_satellites_CN0_dB[valid_obs] = gnss_pseudoranges_iter->second.CN0_dB_hz; valid_obs++; valid_obs_GPS_counter++; // SV ECEF DEBUG OUTPUT DLOG(INFO) << "(new)ECEF satellite SV ID=" << gps_ephemeris_iter->second.i_satellite_PRN << " X=" << gps_ephemeris_iter->second.d_satpos_X << " [m] Y=" << gps_ephemeris_iter->second.d_satpos_Y << " [m] Z=" << gps_ephemeris_iter->second.d_satpos_Z << " [m] PR_obs=" << obs(obs_counter) << " [m]"; // compute the UTC time for this SV (just to print the asociated UTC timestamp) GPS_week = gps_ephemeris_iter->second.i_GPS_week; utc = gps_utc_model.utc_time(TX_time_corrected_s, GPS_week); } else // the ephemeris are not available for this SV { // no valid pseudorange for the current SV W(obs_counter, obs_counter) = 0; // SV de-activated obs(obs_counter) = 1; // to avoid algorithm problems (divide by zero) DLOG(INFO) << "No ephemeris data for SV " << gnss_pseudoranges_iter->first; } } obs_counter++; } // ******************************************************************************** // ****** SOLVE LEAST SQUARES****************************************************** // ******************************************************************************** d_valid_observations = valid_obs; d_valid_GPS_obs = valid_obs_GPS_counter; d_valid_GAL_obs = valid_obs_GALILEO_counter; LOG(INFO) << "HYBRID PVT: valid observations=" << valid_obs; if (valid_obs >= 4) { arma::vec mypos; DLOG(INFO) << "satpos=" << satpos; DLOG(INFO) << "obs="<< obs; DLOG(INFO) << "W=" << W; mypos = leastSquarePos(satpos, obs, W); // Compute GST and Gregorian time double GST = galileo_ephemeris_map.find(gnss_pseudoranges_iter->first)->second.Galileo_System_Time(Galileo_week_number, hybrid_current_time); utc = galileo_utc_model.GST_to_UTC_time(GST, Galileo_week_number); // get time string Gregorian calendar boost::posix_time::time_duration t = boost::posix_time::seconds(utc); // 22 August 1999 00:00 last Galileo start GST epoch (ICD sec 5.1.2) boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); d_position_UTC_time = p_time; DLOG(INFO) << "HYBRID Position at TOW=" << hybrid_current_time << " in ECEF (X,Y,Z) = " << mypos; cart2geo(static_cast(mypos(0)), static_cast(mypos(1)), static_cast(mypos(2)), 4); //ToDo: Find an Observables/PVT random bug with some satellite configurations that gives an erratic PVT solution (i.e. height>50 km) if (d_height_m > 50000) { b_valid_position = false; LOG(INFO) << "Hybrid Position at " << boost::posix_time::to_simple_string(p_time) << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d << " [deg], Height= " << d_height_m << " [m]"; //std::cout << "Hybrid Position at " << boost::posix_time::to_simple_string(p_time) // << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d // << " [deg], Height= " << d_height_m << " [m]" << std::endl; return false; } LOG(INFO) << "Hybrid Position at " << boost::posix_time::to_simple_string(p_time) << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d << " [deg], Height= " << d_height_m << " [m]"; // ###### Compute DOPs ######## // 1- Rotation matrix from ECEF coordinates to ENU coordinates // ref: http://www.navipedia.net/index.php/Transformations_between_ECEF_and_ENU_coordinates arma::mat F = arma::zeros(3,3); F(0,0) = -sin(GPS_TWO_PI*(d_longitude_d/360.0)); F(0,1) = -sin(GPS_TWO_PI*(d_latitude_d/360.0))*cos(GPS_TWO_PI*(d_longitude_d/360.0)); F(0,2) = cos(GPS_TWO_PI*(d_latitude_d/360.0))*cos(GPS_TWO_PI*(d_longitude_d/360.0)); F(1,0) = cos((GPS_TWO_PI*d_longitude_d)/360.0); F(1,1) = -sin((GPS_TWO_PI*d_latitude_d)/360.0)*sin((GPS_TWO_PI*d_longitude_d)/360.0); F(1,2) = cos((GPS_TWO_PI*d_latitude_d/360.0))*sin((GPS_TWO_PI*d_longitude_d)/360.0); F(2,0) = 0; F(2,1) = cos((GPS_TWO_PI*d_latitude_d)/360.0); F(2,2) = sin((GPS_TWO_PI*d_latitude_d/360.0)); // 2- Apply the rotation to the latest covariance matrix (available in ECEF from LS) arma::mat Q_ECEF = d_Q.submat(0, 0, 2, 2); arma::mat DOP_ENU = arma::zeros(3, 3); try { DOP_ENU = arma::htrans(F)*Q_ECEF*F; d_GDOP = sqrt(arma::trace(DOP_ENU)); // Geometric DOP d_PDOP = sqrt(DOP_ENU(0,0) + DOP_ENU(1,1) + DOP_ENU(2,2)); // PDOP d_HDOP = sqrt(DOP_ENU(0,0) + DOP_ENU(1,1)); // HDOP d_VDOP = sqrt(DOP_ENU(2,2)); // VDOP d_TDOP = sqrt(d_Q(3,3)); // TDOP } catch(std::exception& ex) { d_GDOP = -1; // Geometric DOP d_PDOP = -1; // PDOP d_HDOP = -1; // HDOP d_VDOP = -1; // VDOP d_TDOP = -1; // TDOP } // ######## LOG FILE ######### if(d_flag_dump_enabled == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; // PVT GPS time tmp_double = hybrid_current_time; d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position East [m] tmp_double = mypos(0); d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position North [m] tmp_double = mypos(1); d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position Up [m] tmp_double = mypos(2); d_dump_file.write((char*)&tmp_double, sizeof(double)); // User clock offset [s] tmp_double = mypos(3); d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Latitude [deg] tmp_double = d_latitude_d; d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Longitude [deg] tmp_double = d_longitude_d; d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Height [m] tmp_double = d_height_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing PVT LS dump file "<< e.what(); } } // MOVING AVERAGE PVT if (flag_averaging == true) { if (d_hist_longitude_d.size() == (unsigned int)d_averaging_depth) { // Pop oldest value d_hist_longitude_d.pop_back(); d_hist_latitude_d.pop_back(); d_hist_height_m.pop_back(); // Push new values d_hist_longitude_d.push_front(d_longitude_d); d_hist_latitude_d.push_front(d_latitude_d); d_hist_height_m.push_front(d_height_m); d_avg_latitude_d = 0; d_avg_longitude_d = 0; d_avg_height_m = 0; for (unsigned int i = 0; i < d_hist_longitude_d.size(); i++) { d_avg_latitude_d = d_avg_latitude_d + d_hist_latitude_d.at(i); d_avg_longitude_d = d_avg_longitude_d + d_hist_longitude_d.at(i); d_avg_height_m = d_avg_height_m + d_hist_height_m.at(i); } d_avg_latitude_d = d_avg_latitude_d / static_cast(d_averaging_depth); d_avg_longitude_d = d_avg_longitude_d / static_cast(d_averaging_depth); d_avg_height_m = d_avg_height_m / static_cast(d_averaging_depth); b_valid_position = true; return true; //indicates that the returned position is valid } else { // int current_depth=d_hist_longitude_d.size(); // Push new values d_hist_longitude_d.push_front(d_longitude_d); d_hist_latitude_d.push_front(d_latitude_d); d_hist_height_m.push_front(d_height_m); d_avg_latitude_d = d_latitude_d; d_avg_longitude_d = d_longitude_d; d_avg_height_m = d_height_m; b_valid_position = false; return false; //indicates that the returned position is not valid yet } } else { b_valid_position = true; return true; //indicates that the returned position is valid } } else { b_valid_position = false; return false; } return false; } void hybrid_ls_pvt::cart2geo(double X, double Y, double Z, int elipsoid_selection) { /* Conversion of Cartesian coordinates (X,Y,Z) to geographical coordinates (latitude, longitude, h) on a selected reference ellipsoid. Choices of Reference Ellipsoid for Geographical Coordinates 0. International Ellipsoid 1924 1. International Ellipsoid 1967 2. World Geodetic System 1972 3. Geodetic Reference System 1980 4. World Geodetic System 1984 */ const double a[5] = {6378388.0, 6378160.0, 6378135.0, 6378137.0, 6378137.0}; const double f[5] = {1.0 / 297.0, 1.0 / 298.247, 1.0 / 298.26, 1.0 / 298.257222101, 1.0 / 298.257223563}; double lambda = atan2(Y, X); double ex2 = (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] / ((1.0 - f[elipsoid_selection]) * (1.0 - f[elipsoid_selection])); double c = a[elipsoid_selection] * sqrt(1.0 + ex2); double phi = atan(Z / ((sqrt(X * X + Y * Y) * (1.0 - (2.0 - f[elipsoid_selection])) * f[elipsoid_selection]))); double h = 0.1; double oldh = 0.0; double N; int iterations = 0; do { oldh = h; N = c / sqrt(1 + ex2 * (cos(phi) * cos(phi))); phi = atan(Z / ((sqrt(X * X + Y * Y) * (1.0 - (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] * N / (N + h) )))); h = sqrt(X * X + Y * Y) / cos(phi) - N; iterations = iterations + 1; if (iterations > 100) { LOG(WARNING) << "Failed to approximate h with desired precision. h-oldh= " << h - oldh; break; } } while (std::abs(h - oldh) > 1.0e-12); d_latitude_d = phi * 180.0 / GPS_PI; d_longitude_d = lambda * 180.0 / GPS_PI; d_height_m = h; } void hybrid_ls_pvt::togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z) { /* Subroutine to calculate geodetic coordinates latitude, longitude, height given Cartesian coordinates X,Y,Z, and reference ellipsoid values semi-major axis (a) and the inverse of flattening (finv). The output units of angular quantities will be in decimal degrees (15.5 degrees not 15 deg 30 min). The output units of h will be the same as the units of X,Y,Z,a. Inputs: a - semi-major axis of the reference ellipsoid finv - inverse of flattening of the reference ellipsoid X,Y,Z - Cartesian coordinates Outputs: dphi - latitude dlambda - longitude h - height above reference ellipsoid Based in a Matlab function by Kai Borre */ *h = 0; double tolsq = 1.e-10; // tolerance to accept convergence int maxit = 10; // max number of iterations double rtd = 180.0 / GPS_PI; // compute square of eccentricity double esq; if (finv < 1.0E-20) { esq = 0.0; } else { esq = (2.0 - 1.0 / finv) / finv; } // first guess double P = sqrt(X*X + Y*Y); // P is distance from spin axis //direct calculation of longitude if (P > 1.0E-20) { *dlambda = atan2(Y, X) * rtd; } else { *dlambda = 0; } // correct longitude bound if (*dlambda < 0) { *dlambda = *dlambda + 360.0; } double r = sqrt(P*P + Z*Z); // r is distance from origin (0,0,0) double sinphi; if (r > 1.0E-20) { sinphi = Z/r; } else { sinphi = 0; } *dphi = asin(sinphi); // initial value of height = distance from origin minus // approximate distance from origin to surface of ellipsoid if (r < 1.0E-20) { *h = 0; return; } *h = r - a*(1.0 - sinphi*sinphi/finv); // iterate double cosphi; double N_phi; double dP; double dZ; double oneesq = 1.0 - esq; for (int i = 0; i < maxit; i++) { sinphi = sin(*dphi); cosphi = cos(*dphi); // compute radius of curvature in prime vertical direction N_phi = a / sqrt(1 - esq*sinphi*sinphi); // compute residuals in P and Z dP = P - (N_phi + (*h)) * cosphi; dZ = Z - (N_phi*oneesq + (*h)) * sinphi; // update height and latitude *h = *h + (sinphi*dZ + cosphi*dP); *dphi = *dphi + (cosphi*dZ - sinphi*dP)/(N_phi + (*h)); // test for convergence if ((dP*dP + dZ*dZ) < tolsq) { break; } if (i == (maxit - 1)) { LOG(WARNING) << "The computation of geodetic coordinates did not converge"; } } *dphi = (*dphi) * rtd; } void hybrid_ls_pvt::topocent(double *Az, double *El, double *D, const arma::vec & x, const arma::vec & dx) { /* Transformation of vector dx into topocentric coordinate system with origin at x Inputs: x - vector origin coordinates (in ECEF system [X; Y; Z;]) dx - vector ([dX; dY; dZ;]). Outputs: D - vector length. Units like the input Az - azimuth from north positive clockwise, degrees El - elevation angle, degrees Based on a Matlab function by Kai Borre */ double lambda; double phi; double h; double dtr = GPS_PI/180.0; double a = 6378137.0; // semi-major axis of the reference ellipsoid WGS-84 double finv = 298.257223563; // inverse of flattening of the reference ellipsoid WGS-84 // Transform x into geodetic coordinates togeod(&phi, &lambda, &h, a, finv, x(0), x(1), x(2)); double cl = cos(lambda * dtr); double sl = sin(lambda * dtr); double cb = cos(phi * dtr); double sb = sin(phi * dtr); arma::mat F = arma::zeros(3,3); F(0,0) = -sl; F(0,1) = -sb*cl; F(0,2) = cb*cl; F(1,0) = cl; F(1,1) = -sb*sl; F(1,2) = cb*sl; F(2,0) = 0; F(2,1) = cb; F(2,2) = sb; arma::vec local_vector; local_vector = arma::htrans(F) * dx; double E = local_vector(0); double N = local_vector(1); double U = local_vector(2); double hor_dis; hor_dis = sqrt(E*E + N*N); if (hor_dis < 1.0E-20) { *Az = 0; *El = 90; } else { *Az = atan2(E, N)/dtr; *El = atan2(U, hor_dis)/dtr; } if (*Az < 0) { *Az = *Az + 360.0; } *D = sqrt(dx(0)*dx(0) + dx(1)*dx(1) + dx(2)*dx(2)); } void hybrid_ls_pvt::tropo(double *ddr_m, double sinel, double hsta_km, double p_mb, double t_kel, double hum, double hp_km, double htkel_km, double hhum_km) { /* Inputs: sinel - sin of elevation angle of satellite hsta_km - height of station in km p_mb - atmospheric pressure in mb at height hp_km t_kel - surface temperature in degrees Kelvin at height htkel_km hum - humidity in % at height hhum_km hp_km - height of pressure measurement in km htkel_km - height of temperature measurement in km hhum_km - height of humidity measurement in km Outputs: ddr_m - range correction (meters) Reference Goad, C.C. & Goodman, L. (1974) A Modified Hopfield Tropospheric Refraction Correction Model. Paper presented at the American Geophysical Union Annual Fall Meeting, San Francisco, December 12-17 Translated to C++ by Carles Fernandez from a Matlab implementation by Kai Borre */ const double a_e = 6378.137; // semi-major axis of earth ellipsoid const double b0 = 7.839257e-5; const double tlapse = -6.5; const double em = -978.77 / (2.8704e6 * tlapse * 1.0e-5); double tkhum = t_kel + tlapse * (hhum_km - htkel_km); double atkel = 7.5*(tkhum - 273.15) / (237.3 + tkhum - 273.15); double e0 = 0.0611 * hum * pow(10, atkel); double tksea = t_kel - tlapse * htkel_km; double tkelh = tksea + tlapse * hhum_km; double e0sea = e0 * pow((tksea / tkelh), (4 * em)); double tkelp = tksea + tlapse * hp_km; double psea = p_mb * pow((tksea / tkelp), em); if(sinel < 0) { sinel = 0.0; } double tropo_delay = 0.0; bool done = false; double refsea = 77.624e-6 / tksea; double htop = 1.1385e-5 / refsea; refsea = refsea * psea; double ref = refsea * pow(((htop - hsta_km) / htop), 4); double a; double b; double rtop; while(1) { rtop = pow((a_e + htop), 2) - pow((a_e + hsta_km), 2) * (1 - pow(sinel, 2)); // check to see if geometry is crazy if(rtop < 0) { rtop = 0; } rtop = sqrt(rtop) - (a_e + hsta_km) * sinel; a = -sinel / (htop - hsta_km); b = -b0 * (1 - pow(sinel,2)) / (htop - hsta_km); arma::vec rn = arma::vec(8); rn.zeros(); for(int i = 0; i<8; i++) { rn(i) = pow(rtop, (i+1+1)); } arma::rowvec alpha = {2 * a, 2 * pow(a, 2) + 4 * b /3, a * (pow(a, 2) + 3 * b), pow(a, 4)/5 + 2.4 * pow(a, 2) * b + 1.2 * pow(b, 2), 2 * a * b * (pow(a, 2) + 3 * b)/3, pow(b, 2) * (6 * pow(a, 2) + 4 * b) * 1.428571e-1, 0, 0}; if(pow(b, 2) > 1.0e-35) { alpha(6) = a * pow(b, 3) /2; alpha(7) = pow(b, 4) / 9; } double dr = rtop; arma::mat aux_ = alpha * rn; dr = dr + aux_(0, 0); tropo_delay = tropo_delay + dr * ref * 1000; if(done == true) { *ddr_m = tropo_delay; break; } done = true; refsea = (371900.0e-6 / tksea - 12.92e-6) / tksea; htop = 1.1385e-5 * (1255 / tksea + 0.05) / refsea; ref = refsea * e0sea * pow(((htop - hsta_km) / htop), 4); } } gnss-sdr-0.0.6/src/algorithms/PVT/libs/CMakeLists.txt0000644000175000017500000000316712576764164021714 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_definitions( -DGNSS_SDR_VERSION="${VERSION}" ) set(PVT_LIB_SOURCES gps_l1_ca_ls_pvt.cc galileo_e1_ls_pvt.cc hybrid_ls_pvt.cc kml_printer.cc rinex_printer.cc nmea_printer.cc rtcm_printer.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/adapters ${Boost_INCLUDE_DIRS} ${ARMADILLO_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ) file(GLOB PVT_LIB_HEADERS "*.h") add_library(pvt_lib ${PVT_LIB_SOURCES} ${PVT_LIB_HEADERS}) source_group(Headers FILES ${PVT_LIB_HEADERS}) add_dependencies(pvt_lib armadillo-${armadillo_RELEASE} glog-${glog_RELEASE}) target_link_libraries(pvt_lib ${Boost_LIBRARIES} ${GFlags_LIBS} ${GLOG_LIBRARIES} ${ARMADILLO_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/PVT/libs/galileo_e1_ls_pvt.cc0000644000175000017500000010276412576764164023056 0ustar carlescarles/*! * \file galileo_e1_ls_pvt.cc * \brief Implementation of a Least Squares Position, Velocity, and Time * (PVT) solver, based on K.Borre's Matlab receiver. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_ls_pvt.h" #include #include "Galileo_E1.h" using google::LogMessage; galileo_e1_ls_pvt::galileo_e1_ls_pvt(int nchannels, std::string dump_filename, bool flag_dump_to_file) { // init empty ephemeris for all the available GNSS channels d_nchannels = nchannels; d_ephemeris = new Galileo_Navigation_Message[nchannels]; d_dump_filename = dump_filename; d_flag_dump_enabled = flag_dump_to_file; d_averaging_depth = 0; d_galileo_current_time = 0; b_valid_position = false; // ############# ENABLE DATA FILE LOG ################# if (d_flag_dump_enabled == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "PVT lib dump enabled Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception opening PVT lib dump file " << e.what(); } } } d_valid_observations = 0; d_latitude_d = 0.0; d_longitude_d = 0.0; d_height_m = 0.0; d_avg_latitude_d = 0.0; d_avg_longitude_d = 0.0; d_avg_height_m = 0.0; d_x_m = 0.0; d_y_m = 0.0; d_z_m = 0.0; d_GDOP = 0.0; d_PDOP = 0.0; d_HDOP = 0.0; d_VDOP = 0.0; d_TDOP = 0.0; d_flag_averaging = false; } void galileo_e1_ls_pvt::set_averaging_depth(int depth) { d_averaging_depth = depth; } galileo_e1_ls_pvt::~galileo_e1_ls_pvt() { d_dump_file.close(); delete[] d_ephemeris; } arma::vec galileo_e1_ls_pvt::rotateSatellite(double traveltime, const arma::vec & X_sat) { /* * Returns rotated satellite ECEF coordinates due to Earth * rotation during signal travel time * * Inputs: * travelTime - signal travel time * X_sat - satellite's ECEF coordinates * * Returns: * X_sat_rot - rotated satellite's coordinates (ECEF) */ //--- Find rotation angle -------------------------------------------------- double omegatau; omegatau = GALILEO_OMEGA_EARTH_DOT * traveltime; //--- Build a rotation matrix ---------------------------------------------- arma::mat R3 = arma::zeros(3,3); R3(0, 0) = cos(omegatau); R3(0, 1) = sin(omegatau); R3(0, 2) = 0.0; R3(1, 0) = -sin(omegatau); R3(1, 1) = cos(omegatau); R3(1, 2) = 0.0; R3(2, 0) = 0.0; R3(2, 1) = 0.0; R3(2, 2) = 1.0; //--- Do the rotation ------------------------------------------------------ arma::vec X_sat_rot; X_sat_rot = R3 * X_sat; return X_sat_rot; } arma::vec galileo_e1_ls_pvt::leastSquarePos(const arma::mat & satpos, const arma::vec & obs, const arma::mat & w) { /* Computes the Least Squares Solution. * Inputs: * satpos - Satellites positions in ECEF system: [X; Y; Z;] * obs - Observations - the pseudorange measurements to each satellite * w - weigths vector * * Returns: * pos - receiver position and receiver clock error * (in ECEF system: [X, Y, Z, dt]) */ //=== Initialization ======================================================= int nmbOfIterations = 10; // TODO: include in config int nmbOfSatellites; nmbOfSatellites = satpos.n_cols; //Armadillo arma::vec pos = "0.0 0.0 0.0 0.0"; arma::mat A; arma::mat omc; arma::mat az; arma::mat el; A = arma::zeros(nmbOfSatellites, 4); omc = arma::zeros(nmbOfSatellites, 1); az = arma::zeros(1, nmbOfSatellites); el = arma::zeros(1, nmbOfSatellites); arma::mat X = satpos; arma::vec Rot_X; double rho2; double traveltime; double trop = 0.0; double dlambda; double dphi; double h; arma::mat mat_tmp; arma::vec x; //=== Iteratively find receiver position =================================== for (int iter = 0; iter < nmbOfIterations; iter++) { for (int i = 0; i < nmbOfSatellites; i++) { if (iter == 0) { //--- Initialize variables at the first iteration -------------- Rot_X = X.col(i); //Armadillo trop = 0.0; } else { //--- Update equations ----------------------------------------- rho2 = (X(0, i) - pos(0)) * (X(0, i) - pos(0)) + (X(1, i) - pos(1)) * (X(1, i) - pos(1)) + (X(2, i) - pos(2)) * (X(2, i) - pos(2)); traveltime = sqrt(rho2) / GALILEO_C_m_s; //--- Correct satellite position (do to earth rotation) -------- Rot_X = rotateSatellite(traveltime, X.col(i)); //armadillo //--- Find DOA and range of satellites topocent(&d_visible_satellites_Az[i], &d_visible_satellites_El[i], &d_visible_satellites_Distance[i], pos.subvec(0,2), Rot_X - pos.subvec(0, 2)); if(traveltime < 0.1 && nmbOfSatellites > 3) { //--- Find receiver's height togeod(&dphi, &dlambda, &h, 6378137.0, 298.257223563, pos(0), pos(1), pos(2)); //--- Find delay due to troposphere (in meters) tropo(&trop, sin(d_visible_satellites_El[i] * GALILEO_PI / 180.0), h / 1000.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0); if(trop > 50.0 ) trop = 0.0; } } //--- Apply the corrections ---------------------------------------- omc(i) = (obs(i) - norm(Rot_X - pos.subvec(0, 2), 2) - pos(3) - trop); // Armadillo //--- Construct the A matrix --------------------------------------- //Armadillo A(i,0) = (-(Rot_X(0) - pos(0))) / obs(i); A(i,1) = (-(Rot_X(1) - pos(1))) / obs(i); A(i,2) = (-(Rot_X(2) - pos(2))) / obs(i); A(i,3) = 1.0; } //--- Find position update --------------------------------------------- x = arma::solve(w*A, w*omc); // Armadillo //--- Apply position update -------------------------------------------- pos = pos + x; if (arma::norm(x,2) < 1e-4) { break; // exit the loop because we assume that the LS algorithm has converged (err < 0.1 cm) } } try { //-- compute the Dilution Of Precision values d_Q = arma::inv(arma::htrans(A)*A); } catch(std::exception& e) { d_Q = arma::zeros(4,4); } return pos; } bool galileo_e1_ls_pvt::get_PVT(std::map gnss_pseudoranges_map, double galileo_current_time, bool flag_averaging) { std::map::iterator gnss_pseudoranges_iter; std::map::iterator galileo_ephemeris_iter; int valid_pseudoranges = gnss_pseudoranges_map.size(); arma::mat W = arma::eye(valid_pseudoranges, valid_pseudoranges); // channels weights matrix arma::vec obs = arma::zeros(valid_pseudoranges); // pseudoranges observation vector arma::mat satpos = arma::zeros(3, valid_pseudoranges); // satellite positions matrix int Galileo_week_number = 0; double utc = 0.0; double TX_time_corrected_s = 0.0; double SV_clock_bias_s = 0.0; d_flag_averaging = flag_averaging; // ******************************************************************************** // ****** PREPARE THE LEAST SQUARES DATA (SV POSITIONS MATRIX AND OBS VECTORS) **** // ******************************************************************************** int valid_obs = 0; //valid observations counter int obs_counter = 0; for(gnss_pseudoranges_iter = gnss_pseudoranges_map.begin(); gnss_pseudoranges_iter != gnss_pseudoranges_map.end(); gnss_pseudoranges_iter++) { // 1- find the ephemeris for the current SV observation. The SV PRN ID is the map key galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_pseudoranges_iter->first); if (galileo_ephemeris_iter != galileo_ephemeris_map.end()) { /*! * \todo Place here the satellite CN0 (power level, or weight factor) */ W(obs_counter, obs_counter) = 1.0; // COMMON RX TIME PVT ALGORITHM MODIFICATION (Like RINEX files) // first estimate of transmit time //Galileo_week_number = galileo_ephemeris_iter->second.WN_5;//for GST //double sec_in_day = 86400; //double day_in_week = 7; // t = WN*sec_in_day*day_in_week + TOW; // t is Galileo System Time to use to compute satellite positions //JAVIER VERSION: double Rx_time = galileo_current_time; //to compute satellite position we need GST = WN+TOW (everything expressed in seconds) //double Rx_time = galileo_current_time + Galileo_week_number*sec_in_day*day_in_week; double Tx_time = Rx_time - gnss_pseudoranges_iter->second.Pseudorange_m / GALILEO_C_m_s; // 2- compute the clock drift using the clock model (broadcast) for this SV, including relativistic effect SV_clock_bias_s = galileo_ephemeris_iter->second.sv_clock_drift(Tx_time); // 3- compute the current ECEF position for this SV using corrected TX time TX_time_corrected_s = Tx_time - SV_clock_bias_s; galileo_ephemeris_iter->second.satellitePosition(TX_time_corrected_s); satpos(0,obs_counter) = galileo_ephemeris_iter->second.d_satpos_X; satpos(1,obs_counter) = galileo_ephemeris_iter->second.d_satpos_Y; satpos(2,obs_counter) = galileo_ephemeris_iter->second.d_satpos_Z; // 4- fill the observations vector with the corrected pseudoranges obs(obs_counter) = gnss_pseudoranges_iter->second.Pseudorange_m + SV_clock_bias_s * GALILEO_C_m_s; d_visible_satellites_IDs[valid_obs] = galileo_ephemeris_iter->second.i_satellite_PRN; d_visible_satellites_CN0_dB[valid_obs] = gnss_pseudoranges_iter->second.CN0_dB_hz; valid_obs++; Galileo_week_number = galileo_ephemeris_iter->second.WN_5; //for GST double GST = galileo_ephemeris_map.find(gnss_pseudoranges_iter->first)->second.Galileo_System_Time(Galileo_week_number, galileo_current_time); utc = galileo_utc_model.GST_to_UTC_time(GST, Galileo_week_number); // get time string gregorian calendar boost::posix_time::time_duration t = boost::posix_time::seconds(utc); // 22 August 1999 00:00 last Galileo start GST epoch (ICD sec 5.1.2) boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); d_position_UTC_time = p_time; LOG(INFO) << "Galileo RX time at " << boost::posix_time::to_simple_string(p_time); //end debug // SV ECEF DEBUG OUTPUT DLOG(INFO) << "ECEF satellite SV ID=" << galileo_ephemeris_iter->second.i_satellite_PRN << " X=" << galileo_ephemeris_iter->second.d_satpos_X << " [m] Y=" << galileo_ephemeris_iter->second.d_satpos_Y << " [m] Z=" << galileo_ephemeris_iter->second.d_satpos_Z << " [m] PR_obs=" << obs(obs_counter) << " [m]"; } else // the ephemeris are not available for this SV { // no valid pseudorange for the current SV W(obs_counter, obs_counter) = 0; // SV de-activated obs(obs_counter) = 1; // to avoid algorithm problems (divide by zero) DLOG(INFO) << "No ephemeris data for SV "<< gnss_pseudoranges_iter->first; } obs_counter++; } // ******************************************************************************** // ****** SOLVE LEAST SQUARES****************************************************** // ******************************************************************************** d_valid_observations = valid_obs; LOG(INFO) << "Galileo PVT: valid observations=" << valid_obs; if (valid_obs >= 4) { arma::vec mypos; DLOG(INFO) << "satpos=" << satpos; DLOG(INFO) << "obs="<< obs; DLOG(INFO) << "W=" << W; mypos = leastSquarePos(satpos, obs, W); // Compute GST and Gregorian time //double GST = galileo_ephemeris_iter->second.Galileo_System_Time(Galileo_week_number, galileo_current_time); double GST = galileo_ephemeris_map.find(gnss_pseudoranges_iter->first)->second.Galileo_System_Time(Galileo_week_number, galileo_current_time); utc = galileo_utc_model.GST_to_UTC_time(GST, Galileo_week_number); // get time string Gregorian calendar boost::posix_time::time_duration t = boost::posix_time::seconds(utc); // 22 August 1999 00:00 last Galileo start GST epoch (ICD sec 5.1.2) boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); d_position_UTC_time = p_time; DLOG(INFO) << "Galileo Position at TOW=" << galileo_current_time << " in ECEF (X,Y,Z) = " << mypos; cart2geo(static_cast(mypos(0)), static_cast(mypos(1)), static_cast(mypos(2)), 4); //ToDo: Find an Observables/PVT random bug with some satellite configurations that gives an erratic PVT solution (i.e. height>50 km) if (d_height_m > 50000) { b_valid_position = false; return false; } LOG(INFO) << "Galileo Position at " << boost::posix_time::to_simple_string(p_time) << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d << " [deg], Height= " << d_height_m << " [m]"; std::cout << "Galileo Position at " << boost::posix_time::to_simple_string(p_time) << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d << " [deg], Height= " << d_height_m << " [m]" << std::endl; // ###### Compute DOPs ######## // 1- Rotation matrix from ECEF coordinates to ENU coordinates // ref: http://www.navipedia.net/index.php/Transformations_between_ECEF_and_ENU_coordinates arma::mat F = arma::zeros(3,3); F(0,0) = -sin(GPS_TWO_PI * (d_longitude_d/360.0)); F(0,1) = -sin(GPS_TWO_PI * (d_latitude_d/360.0)) * cos(GPS_TWO_PI * (d_longitude_d/360.0)); F(0,2) = cos(GPS_TWO_PI * (d_latitude_d/360.0)) * cos(GPS_TWO_PI * (d_longitude_d/360.0)); F(1,0) = cos((GPS_TWO_PI * d_longitude_d)/360.0); F(1,1) = -sin((GPS_TWO_PI * d_latitude_d)/360.0) * sin((GPS_TWO_PI * d_longitude_d)/360.0); F(1,2) = cos((GPS_TWO_PI * d_latitude_d/360.0)) * sin((GPS_TWO_PI * d_longitude_d)/360.0); F(2,0) = 0; F(2,1) = cos((GPS_TWO_PI * d_latitude_d)/360.0); F(2,2) = sin((GPS_TWO_PI * d_latitude_d/360.0)); // 2- Apply the rotation to the latest covariance matrix (available in ECEF from LS) arma::mat Q_ECEF = d_Q.submat(0, 0, 2, 2); arma::mat DOP_ENU = arma::zeros(3, 3); try { DOP_ENU = arma::htrans(F) * Q_ECEF * F; d_GDOP = sqrt(arma::trace(DOP_ENU)); // Geometric DOP d_PDOP = sqrt(DOP_ENU(0,0) + DOP_ENU(1,1) + DOP_ENU(2,2)); // PDOP d_HDOP = sqrt(DOP_ENU(0,0) + DOP_ENU(1,1)); // HDOP d_VDOP = sqrt(DOP_ENU(2,2)); // VDOP d_TDOP = sqrt(d_Q(3,3)); // TDOP } catch(std::exception& ex) { d_GDOP = -1; // Geometric DOP d_PDOP = -1; // PDOP d_HDOP = -1; // HDOP d_VDOP = -1; // VDOP d_TDOP = -1; // TDOP } // ######## LOG FILE ######### if(d_flag_dump_enabled == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; // PVT GPS time tmp_double = galileo_current_time; d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position East [m] tmp_double = mypos(0); d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position North [m] tmp_double = mypos(1); d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position Up [m] tmp_double = mypos(2); d_dump_file.write((char*)&tmp_double, sizeof(double)); // User clock offset [s] tmp_double = mypos(3); d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Latitude [deg] tmp_double = d_latitude_d; d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Longitude [deg] tmp_double = d_longitude_d; d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Height [m] tmp_double = d_height_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (const std::ifstream::failure& e) { LOG(WARNING) << "Exception writing PVT LS dump file "<< e.what(); } } // MOVING AVERAGE PVT if (flag_averaging == true) { if (d_hist_longitude_d.size() == (unsigned int)d_averaging_depth) { // Pop oldest value d_hist_longitude_d.pop_back(); d_hist_latitude_d.pop_back(); d_hist_height_m.pop_back(); // Push new values d_hist_longitude_d.push_front(d_longitude_d); d_hist_latitude_d.push_front(d_latitude_d); d_hist_height_m.push_front(d_height_m); d_avg_latitude_d = 0; d_avg_longitude_d = 0; d_avg_height_m = 0; for (unsigned int i = 0; i < d_hist_longitude_d.size(); i++) { d_avg_latitude_d = d_avg_latitude_d + d_hist_latitude_d.at(i); d_avg_longitude_d = d_avg_longitude_d + d_hist_longitude_d.at(i); d_avg_height_m = d_avg_height_m + d_hist_height_m.at(i); } d_avg_latitude_d = d_avg_latitude_d / static_cast(d_averaging_depth); d_avg_longitude_d = d_avg_longitude_d / static_cast(d_averaging_depth); d_avg_height_m = d_avg_height_m / static_cast(d_averaging_depth); b_valid_position = true; return true; //indicates that the returned position is valid } else { // int current_depth=d_hist_longitude_d.size(); // Push new values d_hist_longitude_d.push_front(d_longitude_d); d_hist_latitude_d.push_front(d_latitude_d); d_hist_height_m.push_front(d_height_m); d_avg_latitude_d = d_latitude_d; d_avg_longitude_d = d_longitude_d; d_avg_height_m = d_height_m; b_valid_position = false; return false; //indicates that the returned position is not valid yet } } else { b_valid_position = true; return true; //indicates that the returned position is valid } } else { b_valid_position = false; return false; } return false; } void galileo_e1_ls_pvt::cart2geo(double X, double Y, double Z, int elipsoid_selection) { /* Conversion of Cartesian coordinates (X,Y,Z) to geographical coordinates (latitude, longitude, h) on a selected reference ellipsoid. Choices of Reference Ellipsoid for Geographical Coordinates 0. International Ellipsoid 1924 1. International Ellipsoid 1967 2. World Geodetic System 1972 3. Geodetic Reference System 1980 4. World Geodetic System 1984 */ const double a[5] = {6378388.0, 6378160.0, 6378135.0, 6378137.0, 6378137.0}; const double f[5] = {1.0 / 297.0, 1.0 / 298.247, 1.0 / 298.26, 1.0 / 298.257222101, 1.0 / 298.257223563}; double lambda = atan2(Y, X); double ex2 = (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] / ((1.0 - f[elipsoid_selection]) * (1.0 - f[elipsoid_selection])); double c = a[elipsoid_selection] * sqrt(1.0 + ex2); double phi = atan(Z / ((sqrt(X * X + Y * Y) * (1.0 - (2.0 - f[elipsoid_selection])) * f[elipsoid_selection]))); double h = 0.1; double oldh = 0.0; double N; int iterations = 0; do { oldh = h; N = c / sqrt(1 + ex2 * (cos(phi) * cos(phi))); phi = atan(Z / ((sqrt(X * X + Y * Y) * (1.0 - (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] * N / (N + h) )))); h = sqrt(X * X + Y * Y) / cos(phi) - N; iterations = iterations + 1; if (iterations > 100) { LOG(WARNING) << "Failed to approximate h with desired precision. h-oldh= " << h - oldh; break; } } while (std::abs(h - oldh) > 1.0e-12); d_latitude_d = phi * 180.0 / GALILEO_PI; d_longitude_d = lambda * 180.0 / GALILEO_PI; d_height_m = h; } void galileo_e1_ls_pvt::togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z) { /* Subroutine to calculate geodetic coordinates latitude, longitude, height given Cartesian coordinates X,Y,Z, and reference ellipsoid values semi-major axis (a) and the inverse of flattening (finv). The output units of angular quantities will be in decimal degrees (15.5 degrees not 15 deg 30 min). The output units of h will be the same as the units of X,Y,Z,a. Inputs: a - semi-major axis of the reference ellipsoid finv - inverse of flattening of the reference ellipsoid X,Y,Z - Cartesian coordinates Outputs: dphi - latitude dlambda - longitude h - height above reference ellipsoid Based in a Matlab function by Kai Borre */ *h = 0; double tolsq = 1.e-10; // tolerance to accept convergence int maxit = 10; // max number of iterations double rtd = 180.0 / GPS_PI; // compute square of eccentricity double esq; if (finv < 1.0E-20) { esq = 0.0; } else { esq = (2.0 - 1.0 / finv) / finv; } // first guess double P = sqrt(X * X + Y * Y); // P is distance from spin axis //direct calculation of longitude if (P > 1.0E-20) { *dlambda = atan2(Y, X) * rtd; } else { *dlambda = 0.0; } // correct longitude bound if (*dlambda < 0) { *dlambda = *dlambda + 360.0; } double r = sqrt(P * P + Z * Z); // r is distance from origin (0,0,0) double sinphi; if (r > 1.0E-20) { sinphi = Z/r; } else { sinphi = 0.0; } *dphi = asin(sinphi); // initial value of height = distance from origin minus // approximate distance from origin to surface of ellipsoid if (r < 1.0E-20) { *h = 0; return; } *h = r - a * (1 - sinphi * sinphi/finv); // iterate double cosphi; double N_phi; double dP; double dZ; double oneesq = 1.0 - esq; for (int i = 0; i < maxit; i++) { sinphi = sin(*dphi); cosphi = cos(*dphi); // compute radius of curvature in prime vertical direction N_phi = a / sqrt(1 - esq * sinphi * sinphi); // compute residuals in P and Z dP = P - (N_phi + (*h)) * cosphi; dZ = Z - (N_phi * oneesq + (*h)) * sinphi; // update height and latitude *h = *h + (sinphi * dZ + cosphi * dP); *dphi = *dphi + (cosphi * dZ - sinphi * dP)/(N_phi + (*h)); // test for convergence if ((dP * dP + dZ * dZ) < tolsq) { break; } if (i == (maxit - 1)) { LOG(WARNING) << "The computation of geodetic coordinates did not converge"; } } *dphi = (*dphi) * rtd; } void galileo_e1_ls_pvt::topocent(double *Az, double *El, double *D, const arma::vec & x, const arma::vec & dx) { /* Transformation of vector dx into topocentric coordinate system with origin at x Inputs: x - vector origin coordinates (in ECEF system [X; Y; Z;]) dx - vector ([dX; dY; dZ;]). Outputs: D - vector length. Units like the input Az - azimuth from north positive clockwise, degrees El - elevation angle, degrees Based on a Matlab function by Kai Borre */ double lambda; double phi; double h; double dtr = GALILEO_PI/180.0; double a = 6378137.0; // semi-major axis of the reference ellipsoid WGS-84 double finv = 298.257223563; // inverse of flattening of the reference ellipsoid WGS-84 // Transform x into geodetic coordinates togeod(&phi, &lambda, &h, a, finv, x(0), x(1), x(2)); double cl = cos(lambda * dtr); double sl = sin(lambda * dtr); double cb = cos(phi * dtr); double sb = sin(phi * dtr); arma::mat F = arma::zeros(3,3); F(0,0) = -sl; F(0,1) = -sb * cl; F(0,2) = cb * cl; F(1,0) = cl; F(1,1) = -sb * sl; F(1,2) = cb * sl; F(2,0) = 0.0; F(2,1) = cb; F(2,2) = sb; arma::vec local_vector; local_vector = arma::htrans(F) * dx; double E = local_vector(0); double N = local_vector(1); double U = local_vector(2); double hor_dis; hor_dis = sqrt(E * E + N * N); if (hor_dis < 1.0E-20) { *Az = 0.0; *El = 90.0; } else { *Az = atan2(E, N)/dtr; *El = atan2(U, hor_dis)/dtr; } if (*Az < 0) { *Az = *Az + 360.0; } *D = sqrt(dx(0) * dx(0) + dx(1) * dx(1) + dx(2) * dx(2)); } void galileo_e1_ls_pvt::tropo(double *ddr_m, double sinel, double hsta_km, double p_mb, double t_kel, double hum, double hp_km, double htkel_km, double hhum_km) { /* Inputs: sinel - sin of elevation angle of satellite hsta_km - height of station in km p_mb - atmospheric pressure in mb at height hp_km t_kel - surface temperature in degrees Kelvin at height htkel_km hum - humidity in % at height hhum_km hp_km - height of pressure measurement in km htkel_km - height of temperature measurement in km hhum_km - height of humidity measurement in km Outputs: ddr_m - range correction (meters) Reference Goad, C.C. & Goodman, L. (1974) A Modified Hopfield Tropospheric Refraction Correction Model. Paper presented at the American Geophysical Union Annual Fall Meeting, San Francisco, December 12-17 Translated to C++ by Carles Fernandez from a Matlab implementation by Kai Borre */ const double a_e = 6378.137; // semi-major axis of earth ellipsoid const double b0 = 7.839257e-5; const double tlapse = -6.5; const double em = -978.77 / (2.8704e6 * tlapse * 1.0e-5); double tkhum = t_kel + tlapse * (hhum_km - htkel_km); double atkel = 7.5 * (tkhum - 273.15) / (237.3 + tkhum - 273.15); double e0 = 0.0611 * hum * pow(10, atkel); double tksea = t_kel - tlapse * htkel_km; double tkelh = tksea + tlapse * hhum_km; double e0sea = e0 * pow((tksea / tkelh), (4 * em)); double tkelp = tksea + tlapse * hp_km; double psea = p_mb * pow((tksea / tkelp), em); if(sinel < 0) { sinel = 0.0; } double tropo_delay = 0.0; bool done = false; double refsea = 77.624e-6 / tksea; double htop = 1.1385e-5 / refsea; refsea = refsea * psea; double ref = refsea * pow(((htop - hsta_km) / htop), 4); double a; double b; double rtop; while(1) { rtop = pow((a_e + htop), 2) - pow((a_e + hsta_km), 2) * (1 - pow(sinel, 2)); // check to see if geometry is crazy if(rtop < 0) { rtop = 0; } rtop = sqrt(rtop) - (a_e + hsta_km) * sinel; a = -sinel / (htop - hsta_km); b = -b0 * (1 - pow(sinel,2)) / (htop - hsta_km); arma::vec rn = arma::vec(8); rn.zeros(); for(int i = 0; i<8; i++) { rn(i) = pow(rtop, (i+1+1)); } arma::rowvec alpha = {2 * a, 2 * pow(a, 2) + 4 * b /3, a * (pow(a, 2) + 3 * b), pow(a, 4)/5 + 2.4 * pow(a, 2) * b + 1.2 * pow(b, 2), 2 * a * b * (pow(a, 2) + 3 * b)/3, pow(b, 2) * (6 * pow(a, 2) + 4 * b) * 1.428571e-1, 0, 0}; if(pow(b, 2) > 1.0e-35) { alpha(6) = a * pow(b, 3) /2; alpha(7) = pow(b, 4) / 9; } double dr = rtop; arma::mat aux_ = alpha * rn; dr = dr + aux_(0, 0); tropo_delay = tropo_delay + dr * ref * 1000; if(done == true) { *ddr_m = tropo_delay; break; } done = true; refsea = (371900.0e-6 / tksea - 12.92e-6) / tksea; htop = 1.1385e-5 * (1255 / tksea + 0.05) / refsea; ref = refsea * e0sea * pow(((htop - hsta_km) / htop), 4); } } gnss-sdr-0.0.6/src/algorithms/PVT/libs/nmea_printer.cc0000644000175000017500000004741112576764164022146 0ustar carlescarles/*! * \file kml_printer.cc * \brief Implementation of a NMEA 2.1 printer for GNSS-SDR * This class provides a implementation of a subset of the NMEA-0183 standard for interfacing * marine electronic devices as defined by the National Marine Electronics Association (NMEA). * See http://www.nmea.org/ for the NMEA 183 standard * * \author Javier Arribas, 2012. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "nmea_printer.h" #include #include #include #include #include #include "GPS_L1_CA.h" using google::LogMessage; //DEFINE_string(NMEA_version, "2.1", "Specifies the NMEA version (2.1)"); Nmea_Printer::Nmea_Printer(std::string filename, bool flag_nmea_tty_port, std::string nmea_dump_devname) { nmea_filename = filename; nmea_file_descriptor.open(nmea_filename.c_str(), std::ios::out); if (nmea_file_descriptor.is_open()) { DLOG(INFO) << "NMEA printer writing on " << nmea_filename.c_str(); } nmea_devname = nmea_dump_devname; if (flag_nmea_tty_port == true) { nmea_dev_descriptor = init_serial(nmea_devname.c_str()); if (nmea_dev_descriptor != -1) { DLOG(INFO) << "NMEA printer writing on " << nmea_devname.c_str(); } } else { nmea_dev_descriptor = -1; } } Nmea_Printer::~Nmea_Printer() { if (nmea_file_descriptor.is_open()) { nmea_file_descriptor.close(); } close_serial(); } int Nmea_Printer::init_serial (std::string serial_device) { /*! * Opens the serial device and sets the default baud rate for a NMEA transmission (9600,8,N,1) */ int fd = 0; struct termios options; long BAUD; long DATABITS; long STOPBITS; long PARITYON; long PARITY; fd = open(serial_device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) return fd; //failed to open TTY port if(fcntl(fd, F_SETFL, 0) == -1) LOG(INFO) << "Error enabling direct I/O"; // clear all flags on descriptor, enable direct I/O tcgetattr(fd, &options); // read serial port options BAUD = B9600; //BAUD = B38400; DATABITS = CS8; STOPBITS = 0; PARITYON = 0; PARITY = 0; options.c_cflag = BAUD | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD; // enable receiver, set 8 bit data, ignore control lines //options.c_cflag |= (CLOCAL | CREAD | CS8); options.c_iflag = IGNPAR; // set the new port options tcsetattr(fd, TCSANOW, &options); return fd; } void Nmea_Printer::close_serial () { if (nmea_dev_descriptor != -1) { close(nmea_dev_descriptor); } } bool Nmea_Printer::Print_Nmea_Line(const std::shared_ptr& pvt_data, bool print_average_values) { std::string GPRMC; std::string GPGGA; std::string GPGSA; std::string GPGSV; // set the new PVT data d_PVT_data = pvt_data; // generate the NMEA sentences //GPRMC GPRMC = get_GPRMC(); //GPGGA (Global Positioning System Fixed Data) GPGGA = get_GPGGA(); //GPGSA GPGSA = get_GPGSA(); //GPGSV GPGSV = get_GPGSV(); // write to log file try { //GPRMC nmea_file_descriptor << GPRMC; //GPGGA (Global Positioning System Fixed Data) nmea_file_descriptor << GPGGA; //GPGSA nmea_file_descriptor << GPGSA; //GPGSV nmea_file_descriptor << GPGSV; } catch(std::exception ex) { DLOG(INFO) << "NMEA printer can not write on output file" << nmea_filename.c_str();; } //write to serial device if (nmea_dev_descriptor!=-1) { try { int n_bytes_written; //GPRMC n_bytes_written = write(nmea_dev_descriptor, GPRMC.c_str(), GPRMC.length()); //GPGGA (Global Positioning System Fixed Data) n_bytes_written = write(nmea_dev_descriptor, GPGGA.c_str(), GPGGA.length()); //GPGSA n_bytes_written = write(nmea_dev_descriptor, GPGSA.c_str(), GPGSA.length()); //GPGSV n_bytes_written = write(nmea_dev_descriptor, GPGSV.c_str(), GPGSV.length()); } catch(std::exception ex) { DLOG(INFO) << "NMEA printer can not write on serial device" << nmea_filename.c_str();; } } return true; } char Nmea_Printer::checkSum(std::string sentence) { char check = 0; // iterate over the string, XOR each byte with the total sum: for (unsigned int c = 0; c < sentence.length(); c++) { check = char(check ^ sentence.at(c)); } // return the result return check; } std::string Nmea_Printer::latitude_to_hm(double lat) { bool north; if (lat < 0.0) { north = false; lat = -lat ; } else { north = true; } int deg = static_cast(lat); double mins = lat - static_cast(deg); mins *= 60.0 ; std::ostringstream out_string; out_string.setf(std::ios::fixed, std::ios::floatfield); out_string.fill('0'); out_string.width(2); out_string << deg; out_string.width(6); out_string.precision(4); out_string << mins; if (north == true) { out_string << ",N"; } else { out_string << ",S"; } return out_string.str(); } std::string Nmea_Printer::longitude_to_hm(double longitude) { bool east; if (longitude < 0.0) { east = false; longitude = -longitude ; } else { east = true; } int deg = static_cast(longitude); double mins = longitude - static_cast(deg); mins *= 60.0 ; std::ostringstream out_string; out_string.setf(std::ios::fixed, std::ios::floatfield); out_string.width(3); out_string.fill('0'); out_string << deg; out_string.width(6); out_string.precision(4); out_string << mins; if (east == true) { out_string << ",E"; } else { out_string << ",W"; } return out_string.str(); } std::string Nmea_Printer::get_UTC_NMEA_time(boost::posix_time::ptime d_position_UTC_time) { //UTC Time: hhmmss.sss std::stringstream sentence_str; boost::posix_time::time_duration td = d_position_UTC_time.time_of_day(); int utc_hours; int utc_mins; int utc_seconds; int utc_milliseconds; utc_hours = td.hours(); utc_mins = td.minutes(); utc_seconds = td.seconds(); utc_milliseconds = td.total_milliseconds() - td.total_seconds()*1000; if (utc_hours < 10) sentence_str << "0"; // two digits for hours sentence_str << utc_hours; if (utc_mins < 10) sentence_str << "0"; // two digits for minutes sentence_str << utc_mins; if (utc_seconds < 10) sentence_str << "0"; // two digits for seconds sentence_str << utc_seconds; if (utc_milliseconds < 10) { sentence_str << ".00"; // three digits for ms sentence_str << utc_milliseconds; } else if (utc_milliseconds < 100) { sentence_str << ".0"; // three digits for ms sentence_str << utc_milliseconds; } else { sentence_str << "."; // three digits for ms sentence_str << utc_milliseconds; } return sentence_str.str(); } std::string Nmea_Printer::get_GPRMC() { // Sample -> $GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,*10 bool valid_fix = d_PVT_data->b_valid_position; // ToDo: Compute speed and course over ground double speed_over_ground_knots = 0; double course_over_ground_deg = 0; //boost::posix_time::ptime d_position_UTC_time=boost::posix_time::microsec_clock::universal_time(); std::stringstream sentence_str; //GPRMC (RMC-Recommended,Minimum Specific GNSS Data) std::string sentence_header; sentence_header = "$GPRMC,"; sentence_str << sentence_header; //UTC Time: hhmmss.sss sentence_str << get_UTC_NMEA_time(d_PVT_data->d_position_UTC_time); //Status: A: data valid, V: data NOT valid if (valid_fix == true) { sentence_str << ",A"; } else { sentence_str << ",V"; }; if (d_PVT_data->d_flag_averaging == true) { // Latitude ddmm.mmmm,(N or S) sentence_str << "," << latitude_to_hm(d_PVT_data->d_avg_latitude_d); // longitude dddmm.mmmm,(E or W) sentence_str << "," << longitude_to_hm(d_PVT_data->d_avg_longitude_d); } else { // Latitude ddmm.mmmm,(N or S) sentence_str << "," << latitude_to_hm(d_PVT_data->d_latitude_d); // longitude dddmm.mmmm,(E or W) sentence_str << "," << longitude_to_hm(d_PVT_data->d_longitude_d); } //Speed over ground (knots) sentence_str << ","; sentence_str.setf(std::ios::fixed, std::ios::floatfield); sentence_str.precision(2); sentence_str << speed_over_ground_knots; //course over ground (degrees) sentence_str << ","; sentence_str.setf(std::ios::fixed, std::ios::floatfield); sentence_str.precision(2); sentence_str << course_over_ground_deg; // Date ddmmyy boost::gregorian::date sentence_date = d_PVT_data->d_position_UTC_time.date(); unsigned int year = sentence_date.year(); unsigned int day = sentence_date.day(); unsigned int month = sentence_date.month(); sentence_str << ","; sentence_str.width(2); sentence_str.fill('0'); sentence_str << day; sentence_str.width(2); sentence_str.fill('0'); sentence_str << month; std::stringstream year_strs; year_strs << std::dec << year; sentence_str << std::dec << year_strs.str().substr(2); //Magnetic Variation (degrees) // ToDo: Implement magnetic compass sentence_str << ","; //Magnetic Variation (E or W) // ToDo: Implement magnetic compass sentence_str << ","; // Checksum char checksum; std::string tmpstr; tmpstr = sentence_str.str(); checksum = checkSum(tmpstr.substr(1)); sentence_str << "*"; sentence_str.width(2); sentence_str.fill('0'); sentence_str << std::hex << static_cast(checksum); // end NMEA sentence sentence_str << "\r\n"; return sentence_str.str(); } std::string Nmea_Printer::get_GPGSA() { //$GPGSA,A,3,07,02,26,27,09,04,15, , , , , ,1.8,1.0,1.5*33 // GSA-GNSS DOP and Active Satellites bool valid_fix = d_PVT_data->b_valid_position; int n_sats_used = d_PVT_data->d_valid_observations; double pdop = d_PVT_data->d_PDOP; double hdop = d_PVT_data->d_HDOP; double vdop = d_PVT_data->d_VDOP; std::stringstream sentence_str; std::string sentence_header; sentence_header = "$GPGSA,"; sentence_str << sentence_header; // mode1: // (M) Manual-forced to operate in 2D or 3D mode // (A) Automatic-allowed to automatically switch 2D/3D std::string mode1 = "M"; sentence_str << mode1; // mode2: // 1 fix not available // 2 fix 2D // 3 fix 3D if (valid_fix==true) { sentence_str << ",3"; } else { sentence_str << ",1"; }; // Used satellites for (int i=0; i<12; i++) { sentence_str << ","; if (i < n_sats_used) { sentence_str.width(2); sentence_str.fill('0'); sentence_str << d_PVT_data->d_visible_satellites_IDs[i]; } } // PDOP sentence_str << ","; sentence_str.setf(std::ios::fixed, std::ios::floatfield); sentence_str.width(2); sentence_str.precision(1); sentence_str.fill('0'); sentence_str << pdop; //HDOP sentence_str<<","; sentence_str.setf(std::ios::fixed, std::ios::floatfield); sentence_str.width(2); sentence_str.precision(1); sentence_str.fill('0'); sentence_str << hdop; //VDOP sentence_str << ","; sentence_str.setf(std::ios::fixed, std::ios::floatfield); sentence_str.width(2); sentence_str.precision(1); sentence_str.fill('0'); sentence_str << vdop; // Checksum char checksum; std::string tmpstr; tmpstr = sentence_str.str(); checksum = checkSum(tmpstr.substr(1)); sentence_str << "*"; sentence_str.width(2); sentence_str.fill('0'); sentence_str << std::hex << static_cast(checksum); // end NMEA sentence sentence_str << "\r\n"; return sentence_str.str(); } std::string Nmea_Printer::get_GPGSV() { // GSV-GNSS Satellites in View // Notice that NMEA 2.1 only supports 12 channels int n_sats_used = d_PVT_data->d_valid_observations; std::stringstream sentence_str; std::stringstream frame_str; std::string sentence_header; sentence_header = "$GPGSV,"; char checksum; std::string tmpstr; // 1st step: How many GPGSV frames we need? (up to 3) // Each frame contains up to 4 satellites int n_frames; n_frames = std::ceil((static_cast(n_sats_used)) / 4.0); // generate the frames int current_satellite = 0; for (int i=1; i<(n_frames+1); i++) { frame_str.str(""); frame_str << sentence_header; // number of messages frame_str << n_frames; // message number frame_str << ","; frame_str << i; // total number of satellites in view frame_str << ","; frame_str.width(2); frame_str.fill('0'); frame_str << std::dec << n_sats_used; //satellites info for (int j=0; j<4; j++) { // write satellite info frame_str << ","; frame_str.width(2); frame_str.fill('0'); frame_str << std::dec << d_PVT_data->d_visible_satellites_IDs[current_satellite]; frame_str << ","; frame_str.width(2); frame_str.fill('0'); frame_str << std::dec << static_cast(d_PVT_data->d_visible_satellites_El[current_satellite]); frame_str << ","; frame_str.width(3); frame_str.fill('0'); frame_str << std::dec << static_cast(d_PVT_data->d_visible_satellites_Az[current_satellite]); frame_str << ","; frame_str.width(2); frame_str.fill('0'); frame_str << std::dec << static_cast(d_PVT_data->d_visible_satellites_CN0_dB[current_satellite]); current_satellite++; if (current_satellite == n_sats_used) { break; } } // frame checksum tmpstr = frame_str.str(); checksum = checkSum(tmpstr.substr(1)); frame_str << "*"; frame_str.width(2); frame_str.fill('0'); frame_str << std::hex << static_cast(checksum); // end NMEA sentence frame_str << "\r\n"; //add frame to sentence sentence_str << frame_str.str(); } return sentence_str.str(); //$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71 } std::string Nmea_Printer::get_GPGGA() { //boost::posix_time::ptime d_position_UTC_time=boost::posix_time::microsec_clock::universal_time(); bool valid_fix = d_PVT_data->b_valid_position; int n_channels = d_PVT_data->d_valid_observations;//d_nchannels double hdop = d_PVT_data->d_HDOP; double MSL_altitude; if (d_PVT_data->d_flag_averaging == true) { MSL_altitude = d_PVT_data->d_avg_height_m; } else { MSL_altitude = d_PVT_data->d_height_m; } std::stringstream sentence_str; //GPGGA (Global Positioning System Fixed Data) std::string sentence_header; sentence_header = "$GPGGA,"; sentence_str << sentence_header; //UTC Time: hhmmss.sss sentence_str << get_UTC_NMEA_time(d_PVT_data->d_position_UTC_time); if (d_PVT_data->d_flag_averaging == true) { // Latitude ddmm.mmmm,(N or S) sentence_str << "," << latitude_to_hm(d_PVT_data->d_avg_latitude_d); // longitude dddmm.mmmm,(E or W) sentence_str << "," << longitude_to_hm(d_PVT_data->d_avg_longitude_d); } else { // Latitude ddmm.mmmm,(N or S) sentence_str << "," << latitude_to_hm(d_PVT_data->d_latitude_d); // longitude dddmm.mmmm,(E or W) sentence_str << "," << longitude_to_hm(d_PVT_data->d_longitude_d); } // Position fix indicator // 0 - Fix not available or invalid // 1 - GPS SPS Mode, fix valid // 2 - Differential GPS, SPS Mode, fix valid // 3-5 - Not supported // 6 - Dead Reckoning Mode, fix valid // ToDo: Update PVT module to identify the fix mode if (valid_fix == true) { sentence_str << ",1"; } else { sentence_str << ",0"; } // Number of satellites used in PVT sentence_str << ","; if (n_channels < 10) { sentence_str << '0' << n_channels; } else { sentence_str << n_channels; } // HDOP sentence_str << ","; sentence_str.setf(std::ios::fixed, std::ios::floatfield); sentence_str.width(2); sentence_str.precision(1); sentence_str.fill('0'); sentence_str << hdop; // MSL Altitude sentence_str << ","; sentence_str.precision(1); sentence_str << MSL_altitude; sentence_str << ",M"; // Geoid-to-ellipsoid separation. Ellipsoid altitude = MSL Altitude + Geoid Separation. // ToDo: Compute this value sentence_str << ","; sentence_str << "0.0"; sentence_str << ",M"; // Age of Diff. Corr. (Seconds) Null fields when DGPS is not used // Diff. Ref. Station ID (0000) // ToDo: Implement this fields for Differential GPS sentence_str << ","; sentence_str << "0.0,0000"; // Checksum char checksum; std::string tmpstr; tmpstr = sentence_str.str(); checksum = checkSum(tmpstr.substr(1)); sentence_str << "*"; sentence_str.width(2); sentence_str.fill('0'); sentence_str << std::hex << static_cast(checksum); // end NMEA sentence sentence_str << "\r\n"; return sentence_str.str(); //$GPGGA,104427.591,5920.7009,N,01803.2938,E,1,05,3.3,78.2,M,23.2,M,0.0,0000*4A } gnss-sdr-0.0.6/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.cc0000644000175000017500000007717512576764164022714 0ustar carlescarles/*! * \file gps_l1_ca_ls_pvt.cc * \brief Implementation of a Least Squares Position, Velocity, and Time * (PVT) solver, based on K.Borre's Matlab receiver. * \author Javier Arribas, 2011. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_ls_pvt.h" #include #include using google::LogMessage; DEFINE_bool(tropo, true, "Apply tropospheric correction"); gps_l1_ca_ls_pvt::gps_l1_ca_ls_pvt(int nchannels, std::string dump_filename, bool flag_dump_to_file) { // init empty ephemeris for all the available GNSS channels d_nchannels = nchannels; d_ephemeris = new Gps_Navigation_Message[nchannels]; d_dump_filename = dump_filename; d_flag_dump_enabled = flag_dump_to_file; d_averaging_depth = 0; d_GPS_current_time = 0; b_valid_position = false; d_valid_observations = 0; d_latitude_d = 0.0; d_longitude_d = 0.0; d_height_m = 0.0; d_avg_latitude_d = 0.0; d_avg_longitude_d = 0.0; d_avg_height_m = 0.0; d_x_m = 0.0; d_y_m = 0.0; d_z_m = 0.0; d_GDOP = 0.0; d_PDOP = 0.0; d_HDOP = 0.0; d_VDOP = 0.0; d_TDOP = 0.0; d_flag_averaging = false; // ############# ENABLE DATA FILE LOG ################# if (d_flag_dump_enabled == true) { if (d_dump_file.is_open() == false) { try { d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit); d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary); LOG(INFO) << "PVT lib dump enabled Log file: " << d_dump_filename.c_str(); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception opening PVT lib dump file " << e.what(); } } } } void gps_l1_ca_ls_pvt::set_averaging_depth(int depth) { d_averaging_depth = depth; } gps_l1_ca_ls_pvt::~gps_l1_ca_ls_pvt() { d_dump_file.close(); delete[] d_ephemeris; } arma::vec gps_l1_ca_ls_pvt::rotateSatellite(double traveltime, const arma::vec & X_sat) { /* * Returns rotated satellite ECEF coordinates due to Earth * rotation during signal travel time * * Inputs: * travelTime - signal travel time * X_sat - satellite's ECEF coordinates * * Returns: * X_sat_rot - rotated satellite's coordinates (ECEF) */ //--- Find rotation angle -------------------------------------------------- double omegatau; omegatau = OMEGA_EARTH_DOT * traveltime; //--- Build a rotation matrix ---------------------------------------------- arma::mat R3 = arma::zeros(3,3); R3(0, 0) = cos(omegatau); R3(0, 1) = sin(omegatau); R3(0, 2) = 0.0; R3(1, 0) = -sin(omegatau); R3(1, 1) = cos(omegatau); R3(1, 2) = 0.0; R3(2, 0) = 0.0; R3(2, 1) = 0.0; R3(2, 2) = 1.0; //--- Do the rotation ------------------------------------------------------ arma::vec X_sat_rot; X_sat_rot = R3 * X_sat; return X_sat_rot; } arma::vec gps_l1_ca_ls_pvt::leastSquarePos(const arma::mat & satpos, const arma::vec & obs, const arma::mat & w) { /* Computes the Least Squares Solution. * Inputs: * satpos - Satellites positions in ECEF system: [X; Y; Z;] * obs - Observations - the pseudorange measurements to each satellite * w - weigths vector * * Returns: * pos - receiver position and receiver clock error * (in ECEF system: [X, Y, Z, dt]) */ //=== Initialization ======================================================= int nmbOfIterations = 10; // TODO: include in config int nmbOfSatellites; nmbOfSatellites = satpos.n_cols; //Armadillo arma::vec pos = "0.0 0.0 0.0 0.0"; arma::mat A; arma::mat omc; arma::mat az; arma::mat el; A = arma::zeros(nmbOfSatellites, 4); omc = arma::zeros(nmbOfSatellites, 1); az = arma::zeros(1, nmbOfSatellites); el = arma::zeros(1, nmbOfSatellites); arma::mat X = satpos; arma::vec Rot_X; double rho2; double traveltime; double trop = 0.0; double dlambda; double dphi; double h; arma::mat mat_tmp; arma::vec x; //=== Iteratively find receiver position =================================== for (int iter = 0; iter < nmbOfIterations; iter++) { for (int i = 0; i < nmbOfSatellites; i++) { if (iter == 0) { //--- Initialize variables at the first iteration -------------- Rot_X = X.col(i); //Armadillo trop = 0.0; } else { //--- Update equations ----------------------------------------- rho2 = (X(0, i) - pos(0)) * (X(0, i) - pos(0)) + (X(1, i) - pos(1)) * (X(1, i) - pos(1)) + (X(2, i) - pos(2)) * (X(2, i) - pos(2)); traveltime = sqrt(rho2) / GPS_C_m_s; //--- Correct satellite position (do to earth rotation) -------- Rot_X = rotateSatellite(traveltime, X.col(i)); //armadillo //--- Find satellites' DOA topocent(&d_visible_satellites_Az[i], &d_visible_satellites_El[i], &d_visible_satellites_Distance[i], pos.subvec(0,2), Rot_X - pos.subvec(0,2)); if(FLAGS_tropo) { if(traveltime < 0.1 && nmbOfSatellites > 3) { //--- Find receiver's height togeod(&dphi, &dlambda, &h, 6378137.0, 298.257223563, pos(0), pos(1), pos(2)); //--- Find delay due to troposphere (in meters) tropo(&trop, sin(d_visible_satellites_El[i] * GPS_PI / 180.0), h / 1000, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0); if(trop > 50.0 ) trop = 0.0; } } } //--- Apply the corrections ---------------------------------------- omc(i) = (obs(i) - norm(Rot_X - pos.subvec(0,2),2) - pos(3) - trop); // Armadillo //--- Construct the A matrix --------------------------------------- //Armadillo A(i,0) = (-(Rot_X(0) - pos(0))) / obs(i); A(i,1) = (-(Rot_X(1) - pos(1))) / obs(i); A(i,2) = (-(Rot_X(2) - pos(2))) / obs(i); A(i,3) = 1.0; } //--- Find position update --------------------------------------------- x = arma::solve(w*A, w*omc); // Armadillo //--- Apply position update -------------------------------------------- pos = pos + x; if (arma::norm(x, 2) < 1e-4) { break; // exit the loop because we assume that the LS algorithm has converged (err < 0.1 cm) } } try { //-- compute the Dilution Of Precision values d_Q = arma::inv(arma::htrans(A)*A); } catch(std::exception& e) { d_Q = arma::zeros(4, 4); } return pos; } bool gps_l1_ca_ls_pvt::get_PVT(std::map gnss_pseudoranges_map, double GPS_current_time, bool flag_averaging) { std::map::iterator gnss_pseudoranges_iter; std::map::iterator gps_ephemeris_iter; int valid_pseudoranges = gnss_pseudoranges_map.size(); arma::mat W = arma::eye(valid_pseudoranges, valid_pseudoranges); //channels weights matrix arma::vec obs = arma::zeros(valid_pseudoranges); // pseudoranges observation vector arma::mat satpos = arma::zeros(3, valid_pseudoranges); //satellite positions matrix int GPS_week = 0; double utc = 0; double TX_time_corrected_s; double SV_clock_bias_s = 0; d_flag_averaging = flag_averaging; // ******************************************************************************** // ****** PREPARE THE LEAST SQUARES DATA (SV POSITIONS MATRIX AND OBS VECTORS) **** // ******************************************************************************** int valid_obs = 0; //valid observations counter int obs_counter = 0; for(gnss_pseudoranges_iter = gnss_pseudoranges_map.begin(); gnss_pseudoranges_iter != gnss_pseudoranges_map.end(); gnss_pseudoranges_iter++) { // 1- find the ephemeris for the current SV observation. The SV PRN ID is the map key gps_ephemeris_iter = gps_ephemeris_map.find(gnss_pseudoranges_iter->first); if (gps_ephemeris_iter != gps_ephemeris_map.end()) { /*! * \todo Place here the satellite CN0 (power level, or weight factor) */ W(obs_counter, obs_counter) = 1; // COMMON RX TIME PVT ALGORITHM MODIFICATION (Like RINEX files) // first estimate of transmit time double Rx_time = GPS_current_time; double Tx_time = Rx_time - gnss_pseudoranges_iter->second.Pseudorange_m / GPS_C_m_s; // 2- compute the clock drift using the clock model (broadcast) for this SV, including relativistic effect SV_clock_bias_s = gps_ephemeris_iter->second.sv_clock_drift(Tx_time); //- gps_ephemeris_iter->second.d_TGD; // 3- compute the current ECEF position for this SV using corrected TX time TX_time_corrected_s = Tx_time - SV_clock_bias_s; gps_ephemeris_iter->second.satellitePosition(TX_time_corrected_s); satpos(0, obs_counter) = gps_ephemeris_iter->second.d_satpos_X; satpos(1, obs_counter) = gps_ephemeris_iter->second.d_satpos_Y; satpos(2, obs_counter) = gps_ephemeris_iter->second.d_satpos_Z; // 4- fill the observations vector with the corrected pseudoranges obs(obs_counter) = gnss_pseudoranges_iter->second.Pseudorange_m + SV_clock_bias_s * GPS_C_m_s; d_visible_satellites_IDs[valid_obs] = gps_ephemeris_iter->second.i_satellite_PRN; d_visible_satellites_CN0_dB[valid_obs] = gnss_pseudoranges_iter->second.CN0_dB_hz; valid_obs++; // SV ECEF DEBUG OUTPUT DLOG(INFO) << "(new)ECEF satellite SV ID=" << gps_ephemeris_iter->second.i_satellite_PRN << " X=" << gps_ephemeris_iter->second.d_satpos_X << " [m] Y=" << gps_ephemeris_iter->second.d_satpos_Y << " [m] Z=" << gps_ephemeris_iter->second.d_satpos_Z << " [m] PR_obs=" << obs(obs_counter) << " [m]"; // compute the UTC time for this SV (just to print the associated UTC timestamp) GPS_week = gps_ephemeris_iter->second.i_GPS_week; utc = gps_utc_model.utc_time(TX_time_corrected_s, GPS_week); } else // the ephemeris are not available for this SV { // no valid pseudorange for the current SV W(obs_counter, obs_counter) = 0; // SV de-activated obs(obs_counter) = 1; // to avoid algorithm problems (divide by zero) DLOG(INFO) << "No ephemeris data for SV " << gnss_pseudoranges_iter->first; } obs_counter++; } // ******************************************************************************** // ****** SOLVE LEAST SQUARES****************************************************** // ******************************************************************************** d_valid_observations = valid_obs; LOG(INFO) << "(new)PVT: valid observations=" << valid_obs; if (valid_obs >= 4) { arma::vec mypos; DLOG(INFO) << "satpos=" << satpos; DLOG(INFO) << "obs=" << obs; DLOG(INFO) << "W=" << W; mypos = leastSquarePos(satpos, obs, W); DLOG(INFO) << "(new)Position at TOW=" << GPS_current_time << " in ECEF (X,Y,Z) = " << mypos; gps_l1_ca_ls_pvt::cart2geo(mypos(0), mypos(1), mypos(2), 4); //ToDo: Find an Observables/PVT random bug with some satellite configurations that gives an erratic PVT solution (i.e. height>50 km) if (d_height_m > 50000) { b_valid_position = false; return false; } // Compute UTC time and print PVT solution double secondsperweek = 604800.0; // number of seconds in one week (7*24*60*60) boost::posix_time::time_duration t = boost::posix_time::seconds(utc + secondsperweek * static_cast(GPS_week)); // 22 August 1999 last GPS time roll over boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); d_position_UTC_time = p_time; LOG(INFO) << "(new)Position at " << boost::posix_time::to_simple_string(p_time) << " is Lat = " << d_latitude_d << " [deg], Long = " << d_longitude_d << " [deg], Height= " << d_height_m << " [m]"; // ###### Compute DOPs ######## // 1- Rotation matrix from ECEF coordinates to ENU coordinates // ref: http://www.navipedia.net/index.php/Transformations_between_ECEF_and_ENU_coordinates arma::mat F=arma::zeros(3,3); F(0,0) = -sin(GPS_TWO_PI*(d_longitude_d/360.0)); F(0,1) = -sin(GPS_TWO_PI*(d_latitude_d/360.0))*cos(GPS_TWO_PI*(d_longitude_d/360.0)); F(0,2) = cos(GPS_TWO_PI*(d_latitude_d/360.0))*cos(GPS_TWO_PI*(d_longitude_d/360.0)); F(1,0) = cos((GPS_TWO_PI*d_longitude_d)/360.0); F(1,1) = -sin((GPS_TWO_PI*d_latitude_d)/360.0)*sin((GPS_TWO_PI*d_longitude_d)/360.0); F(1,2) = cos((GPS_TWO_PI*d_latitude_d/360.0))*sin((GPS_TWO_PI*d_longitude_d)/360.0); F(2,0) = 0; F(2,1) = cos((GPS_TWO_PI*d_latitude_d)/360.0); F(2,2) = sin((GPS_TWO_PI*d_latitude_d/360.0)); // 2- Apply the rotation to the latest covariance matrix (available in ECEF from LS) arma::mat Q_ECEF = d_Q.submat(0, 0, 2, 2); arma::mat DOP_ENU = arma::zeros(3, 3); try { DOP_ENU = arma::htrans(F)*Q_ECEF*F; d_GDOP = sqrt(arma::trace(DOP_ENU)); // Geometric DOP d_PDOP = sqrt(DOP_ENU(0, 0) + DOP_ENU(1, 1) + DOP_ENU(2, 2));// PDOP d_HDOP = sqrt(DOP_ENU(0, 0) + DOP_ENU(1, 1)); // HDOP d_VDOP = sqrt(DOP_ENU(2, 2)); // VDOP d_TDOP = sqrt(d_Q(3, 3)); // TDOP } catch(std::exception& ex) { d_GDOP = -1; // Geometric DOP d_PDOP = -1; // PDOP d_HDOP = -1; // HDOP d_VDOP = -1; // VDOP d_TDOP = -1; // TDOP } // ######## LOG FILE ######### if(d_flag_dump_enabled == true) { // MULTIPLEXED FILE RECORDING - Record results to file try { double tmp_double; // PVT GPS time tmp_double = GPS_current_time; d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position East [m] tmp_double = mypos(0); d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position North [m] tmp_double = mypos(1); d_dump_file.write((char*)&tmp_double, sizeof(double)); // ECEF User Position Up [m] tmp_double = mypos(2); d_dump_file.write((char*)&tmp_double, sizeof(double)); // User clock offset [s] tmp_double = mypos(3); d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Latitude [deg] tmp_double = d_latitude_d; d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Longitude [deg] tmp_double = d_longitude_d; d_dump_file.write((char*)&tmp_double, sizeof(double)); // GEO user position Height [m] tmp_double = d_height_m; d_dump_file.write((char*)&tmp_double, sizeof(double)); } catch (std::ifstream::failure e) { LOG(WARNING) << "Exception writing PVT LS dump file " << e.what(); } } // MOVING AVERAGE PVT if (flag_averaging == true) { if (d_hist_longitude_d.size() == (unsigned int)d_averaging_depth) { // Pop oldest value d_hist_longitude_d.pop_back(); d_hist_latitude_d.pop_back(); d_hist_height_m.pop_back(); // Push new values d_hist_longitude_d.push_front(d_longitude_d); d_hist_latitude_d.push_front(d_latitude_d); d_hist_height_m.push_front(d_height_m); d_avg_latitude_d = 0; d_avg_longitude_d = 0; d_avg_height_m = 0; for (unsigned int i = 0; i < d_hist_longitude_d.size(); i++) { d_avg_latitude_d = d_avg_latitude_d + d_hist_latitude_d.at(i); d_avg_longitude_d = d_avg_longitude_d + d_hist_longitude_d.at(i); d_avg_height_m = d_avg_height_m + d_hist_height_m.at(i); } d_avg_latitude_d = d_avg_latitude_d / static_cast(d_averaging_depth); d_avg_longitude_d = d_avg_longitude_d / static_cast(d_averaging_depth); d_avg_height_m = d_avg_height_m / static_cast(d_averaging_depth); b_valid_position = true; return true; //indicates that the returned position is valid } else { //int current_depth=d_hist_longitude_d.size(); // Push new values d_hist_longitude_d.push_front(d_longitude_d); d_hist_latitude_d.push_front(d_latitude_d); d_hist_height_m.push_front(d_height_m); d_avg_latitude_d = d_latitude_d; d_avg_longitude_d = d_longitude_d; d_avg_height_m = d_height_m; b_valid_position = false; return false; //indicates that the returned position is not valid yet } } else { b_valid_position = true; return true; //indicates that the returned position is valid } } else { b_valid_position = false; return false; } } void gps_l1_ca_ls_pvt::cart2geo(double X, double Y, double Z, int elipsoid_selection) { /* Conversion of Cartesian coordinates (X,Y,Z) to geographical coordinates (latitude, longitude, h) on a selected reference ellipsoid. Choices of Reference Ellipsoid for Geographical Coordinates 0. International Ellipsoid 1924 1. International Ellipsoid 1967 2. World Geodetic System 1972 3. Geodetic Reference System 1980 4. World Geodetic System 1984 */ const double a[5] = {6378388.0, 6378160.0, 6378135.0, 6378137.0, 6378137.0}; const double f[5] = {1.0 / 297.0, 1.0 / 298.247, 1.0 / 298.26, 1.0 / 298.257222101, 1.0 / 298.257223563}; double lambda = atan2(Y,X); double ex2 = (2.0 - f[elipsoid_selection]) * f[elipsoid_selection] / ((1.0 - f[elipsoid_selection]) * (1.0 - f[elipsoid_selection])); double c = a[elipsoid_selection] * sqrt(1.0 + ex2); double phi = atan(Z / ((sqrt(X * X + Y * Y) * (1.0 - (2.0 - f[elipsoid_selection])) * f[elipsoid_selection]))); double h = 0.1; double oldh = 0.0; double N; int iterations = 0; do { oldh = h; N = c / sqrt(1 + ex2 * (cos(phi) * cos(phi))); phi = atan(Z / ((sqrt(X*X + Y*Y) * (1.0 - (2.0 -f[elipsoid_selection]) * f[elipsoid_selection] * N / (N + h) )))); h = sqrt(X * X + Y * Y) / cos(phi) - N; iterations = iterations + 1; if (iterations > 100) { LOG(WARNING) << "Failed to approximate h with desired precision. h-oldh= " << h - oldh; break; } } while (std::abs(h - oldh) > 1.0e-12); d_latitude_d = phi * 180.0 / GPS_PI; d_longitude_d = lambda * 180.0 / GPS_PI; d_height_m = h; } void gps_l1_ca_ls_pvt::togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z) { /* Subroutine to calculate geodetic coordinates latitude, longitude, height given Cartesian coordinates X,Y,Z, and reference ellipsoid values semi-major axis (a) and the inverse of flattening (finv). The output units of angular quantities will be in decimal degrees (15.5 degrees not 15 deg 30 min). The output units of h will be the same as the units of X,Y,Z,a. Inputs: a - semi-major axis of the reference ellipsoid finv - inverse of flattening of the reference ellipsoid X,Y,Z - Cartesian coordinates Outputs: dphi - latitude dlambda - longitude h - height above reference ellipsoid Based in a Matlab function by Kai Borre */ *h = 0; double tolsq = 1.e-10; // tolerance to accept convergence int maxit = 10; // max number of iterations double rtd = 180/GPS_PI; // compute square of eccentricity double esq; if (finv < 1.0E-20) { esq = 0; } else { esq = (2 - 1/finv) / finv; } // first guess double P = sqrt(X*X + Y*Y); // P is distance from spin axis //direct calculation of longitude if (P > 1.0E-20) { *dlambda = atan2(Y,X) * rtd; } else { *dlambda = 0; } // correct longitude bound if (*dlambda < 0) { *dlambda = *dlambda + 360.0; } double r = sqrt(P * P + Z * Z); // r is distance from origin (0,0,0) double sinphi; if (r > 1.0E-20) { sinphi = Z/r; } else { sinphi = 0.0; } *dphi = asin(sinphi); // initial value of height = distance from origin minus // approximate distance from origin to surface of ellipsoid if (r < 1.0E-20) { *h = 0; return; } *h = r - a * (1 - sinphi * sinphi / finv); // iterate double cosphi; double N_phi; double dP; double dZ; double oneesq = 1.0 - esq; for (int i = 0; i < maxit; i++) { sinphi = sin(*dphi); cosphi = cos(*dphi); // compute radius of curvature in prime vertical direction N_phi = a / sqrt(1 - esq * sinphi * sinphi); // compute residuals in P and Z dP = P - (N_phi + (*h)) * cosphi; dZ = Z - (N_phi*oneesq + (*h)) * sinphi; // update height and latitude *h = *h + (sinphi * dZ + cosphi * dP); *dphi = *dphi + (cosphi * dZ - sinphi * dP)/(N_phi + (*h)); // test for convergence if ((dP * dP + dZ * dZ) < tolsq) { break; } if (i == (maxit - 1)) { LOG(WARNING) << "The computation of geodetic coordinates did not converge"; } } *dphi = (*dphi) * rtd; } void gps_l1_ca_ls_pvt::topocent(double *Az, double *El, double *D, const arma::vec & x, const arma::vec & dx) { /* Transformation of vector dx into topocentric coordinate system with origin at x Inputs: x - vector origin coordinates (in ECEF system [X; Y; Z;]) dx - vector ([dX; dY; dZ;]). Outputs: D - vector length. Units like the input Az - azimuth from north positive clockwise, degrees El - elevation angle, degrees Based on a Matlab function by Kai Borre */ double lambda; double phi; double h; double dtr = GPS_PI / 180.0; double a = 6378137.0; // semi-major axis of the reference ellipsoid WGS-84 double finv = 298.257223563; // inverse of flattening of the reference ellipsoid WGS-84 // Transform x into geodetic coordinates togeod(&phi, &lambda, &h, a, finv, x(0), x(1), x(2)); double cl = cos(lambda * dtr); double sl = sin(lambda * dtr); double cb = cos(phi * dtr); double sb = sin(phi * dtr); arma::mat F = arma::zeros(3,3); F(0,0) = -sl; F(0,1) = -sb * cl; F(0,2) = cb * cl; F(1,0) = cl; F(1,1) = -sb * sl; F(1,2) = cb * sl; F(2,0) = 0; F(2,1) = cb; F(2,2) = sb; arma::vec local_vector; local_vector = arma::htrans(F) * dx; double E = local_vector(0); double N = local_vector(1); double U = local_vector(2); double hor_dis; hor_dis = sqrt(E * E + N * N); if (hor_dis < 1.0E-20) { *Az = 0; *El = 90; } else { *Az = atan2(E, N) / dtr; *El = atan2(U, hor_dis) / dtr; } if (*Az < 0) { *Az = *Az + 360.0; } *D = sqrt(dx(0) * dx(0) + dx(1) * dx(1) + dx(2) * dx(2)); } void gps_l1_ca_ls_pvt::tropo(double *ddr_m, double sinel, double hsta_km, double p_mb, double t_kel, double hum, double hp_km, double htkel_km, double hhum_km) { /* Inputs: sinel - sin of elevation angle of satellite hsta_km - height of station in km p_mb - atmospheric pressure in mb at height hp_km t_kel - surface temperature in degrees Kelvin at height htkel_km hum - humidity in % at height hhum_km hp_km - height of pressure measurement in km htkel_km - height of temperature measurement in km hhum_km - height of humidity measurement in km Outputs: ddr_m - range correction (meters) Reference Goad, C.C. & Goodman, L. (1974) A Modified Hopfield Tropospheric Refraction Correction Model. Paper presented at the American Geophysical Union Annual Fall Meeting, San Francisco, December 12-17 Translated to C++ by Carles Fernandez from a Matlab implementation by Kai Borre */ const double a_e = 6378.137; // semi-major axis of earth ellipsoid const double b0 = 7.839257e-5; const double tlapse = -6.5; const double em = -978.77 / (2.8704e6 * tlapse * 1.0e-5); double tkhum = t_kel + tlapse * (hhum_km - htkel_km); double atkel = 7.5 * (tkhum - 273.15) / (237.3 + tkhum - 273.15); double e0 = 0.0611 * hum * pow(10, atkel); double tksea = t_kel - tlapse * htkel_km; double tkelh = tksea + tlapse * hhum_km; double e0sea = e0 * pow((tksea / tkelh), (4 * em)); double tkelp = tksea + tlapse * hp_km; double psea = p_mb * pow((tksea / tkelp), em); if(sinel < 0) { sinel = 0.0; } double tropo_delay = 0.0; bool done = false; double refsea = 77.624e-6 / tksea; double htop = 1.1385e-5 / refsea; refsea = refsea * psea; double ref = refsea * pow(((htop - hsta_km) / htop), 4); double a; double b; double rtop; while(1) { rtop = pow((a_e + htop), 2) - pow((a_e + hsta_km), 2) * (1 - pow(sinel, 2)); // check to see if geometry is crazy if(rtop < 0) { rtop = 0; } rtop = sqrt(rtop) - (a_e + hsta_km) * sinel; a = -sinel / (htop - hsta_km); b = -b0 * (1 - pow(sinel,2)) / (htop - hsta_km); arma::vec rn = arma::vec(8); rn.zeros(); for(int i = 0; i<8; i++) { rn(i) = pow(rtop, (i+1+1)); } arma::rowvec alpha = {2 * a, 2 * pow(a, 2) + 4 * b /3, a * (pow(a, 2) + 3 * b), pow(a, 4)/5 + 2.4 * pow(a, 2) * b + 1.2 * pow(b, 2), 2 * a * b * (pow(a, 2) + 3 * b)/3, pow(b, 2) * (6 * pow(a, 2) + 4 * b) * 1.428571e-1, 0, 0}; if(pow(b, 2) > 1.0e-35) { alpha(6) = a * pow(b, 3) /2; alpha(7) = pow(b, 4) / 9; } double dr = rtop; arma::mat aux_ = alpha * rn; dr = dr + aux_(0, 0); tropo_delay = tropo_delay + dr * ref * 1000; if(done == true) { *ddr_m = tropo_delay; break; } done = true; refsea = (371900.0e-6 / tksea - 12.92e-6) / tksea; htop = 1.1385e-5 * (1255 / tksea + 0.05) / refsea; ref = refsea * e0sea * pow(((htop - hsta_km) / htop), 4); } } gnss-sdr-0.0.6/src/algorithms/PVT/libs/rtcm_printer.h0000644000175000017500000001451612576764164022035 0ustar carlescarles/*! * \file rtcm_printer.h * \brief Interface of a RTCM 3.2 printer for GNSS-SDR * This class provides a implementation of a subset of the RTCM Standard 10403.2 * for Differential GNSS Services * * \author Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_RTCM_PRINTER_H_ #define GNSS_SDR_RTCM_PRINTER_H_ #include // std::bitset #include // std::ofstream #include // std::cout #include // std::string #include #include /*! * \brief This class provides a implementation of a subset of the RTCM Standard 10403.2 messages */ class Rtcm_Printer { public: /*! * \brief Default constructor. */ Rtcm_Printer(std::string filename, bool flag_rtcm_tty_port, std::string rtcm_dump_filename); /*! * \brief Print RTCM 3.2 messages to the initialized device */ //bool Print_Nmea_Line(gps_l1_ca_ls_pvt* position, bool print_average_values); /*! * \brief Default destructor. */ ~Rtcm_Printer(); void print_M1001(); std::string print_M1005_test(); private: std::string rtcm_filename; // String with the RTCM log filename std::ofstream rtcm_file_descriptor; // Output file stream for RTCM log file std::string rtcm_devname; int rtcm_dev_descriptor; // RTCM serial device descriptor (i.e. COM port) //gps_l1_ca_ls_pvt* d_PVT_data; int init_serial (std::string serial_device); //serial port control void close_serial (); //std::bitset<8> DF001; std::bitset<12> DF002; std::bitset<12> DF003; std::bitset<30> DF004; std::bitset<1> DF005; std::bitset<5> DF006; std::bitset<1> DF007; std::bitset<3> DF008; std::bitset<6> DF009; std::bitset<1> DF010; std::bitset<24> DF011; std::bitset<20> DF012; std::bitset<7> DF013; std::bitset<8> DF014; std::bitset<8> DF015; std::bitset<6> DF021; std::bitset<1> DF022; std::bitset<1> DF023; std::bitset<1> DF024; std::bitset<38> DF025; std::bitset<38> DF026; std::bitset<38> DF027; // Contents of GPS Satellite Ephemeris Data, Message Type 1019 std::bitset<8> DF071; std::bitset<10> DF076; std::bitset<4> DF077; std::bitset<2> DF078; std::bitset<14> DF079; std::bitset<16> DF081; std::bitset<8> DF082; std::bitset<16> DF083; std::bitset<22> DF084; std::bitset<10> DF085; std::bitset<16> DF086; std::bitset<16> DF087; std::bitset<32> DF088; std::bitset<16> DF089; std::bitset<32> DF090; std::bitset<16> DF091; std::bitset<32> DF092; std::bitset<16> DF093; std::bitset<16> DF094; std::bitset<32> DF095; std::bitset<16> DF096; std::bitset<32> DF097; std::bitset<16> DF098; std::bitset<32> DF099; std::bitset<24> DF100; std::bitset<8> DF101; std::bitset<6> DF102; std::bitset<1> DF103; std::bitset<1> DF137; std::bitset<1> DF141; std::bitset<1> DF142; // Contents of Galileo F/NAV Satellite Ephemeris Data, Message Type 1045 std::bitset<6> DF252; std::bitset<12> DF289; std::bitset<10> DF290; std::bitset<8> DF291; std::bitset<14> DF292; std::bitset<14> DF293; std::bitset<6> DF294; std::bitset<21> DF295; std::bitset<31> DF296; std::bitset<16> DF297; std::bitset<32> DF298; std::bitset<14> DF299; std::bitset<16> DF300; std::bitset<32> DF301; std::bitset<16> DF302; std::bitset<32> DF303; std::bitset<14> DF304; std::bitset<16> DF305; std::bitset<32> DF306; std::bitset<16> DF307; std::bitset<32> DF308; std::bitset<16> DF309; std::bitset<32> DF310; std::bitset<24> DF311; std::bitset<10> DF312; std::bitset<2> DF314; std::bitset<1> DF315; std::bitset<2> DF364; // Content of message header for MSM1, MSM2, MSM3, MSM4, MSM5, MSM6 and MSM7 std::bitset<1> DF393; std::bitset<1> DF394; std::bitset<1> DF395; std::bitset<1> DF396; //variable std::bitset<1> DF409; std::bitset<1> DF411; std::bitset<1> DF412; std::bitset<1> DF417; std::bitset<1> DF418; // Content of Satellite data for MSM4 and MSM6 std::vector > DF397; // 8*NSAT std::vector > DF398; // 10*NSAT // Content of Satellite data for MSM5 and MSM7 std::vector > DF399; // 14*NSAT // Messages std::bitset<64> message1001_header; std::bitset<58> message1001_content; std::bitset<64> message1002_header; std::bitset<74> message1002_content; std::bitset<488> message1019_content; std::bitset<496> message1045_content; std::bitset<169> MSM_header; // 169+X std::vector > MSM4_content; // 18 * Nsat std::vector > MSM5_content; // 36 * Nsat std::bitset<122> get_M1001(); std::bitset<138> get_M1002(); // GPS observables std::bitset<488> get_M1019(); // GPS ephemeris std::bitset<496> get_M1045(); // Galileo ephemeris std::bitset<152> get_M1005_test(); void reset_data_fields (); // Transport Layer std::bitset<8> preamble; std::bitset<6> reserved_field; std::bitset<10> message_length; std::bitset<24> crc_frame; typedef boost::crc_optimal<24, 0x1864CFBu, 0x0, 0x0, false, false> crc_24_q_type; crc_24_q_type CRC_RTCM; std::string add_CRC(const std::string& m); std::string bin_to_hex(const std::string& s); }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/libs/rinex_printer.cc0000644000175000017500000044062512576764164022357 0ustar carlescarles/*! * \file rinex_printer.cc * \brief Implementation of a RINEX 2.11 / 3.02 printer * See http://igscb.jpl.nasa.gov/igscb/data/format/rinex302.pdf * \author Carles Fernandez Prades, 2011. cfernandez(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "rinex_printer.h" #include // for getlogin_r() #include // for min and max #include // for floor #include // for getenv() #include #include #include #include #include #include #include #include #include #include using google::LogMessage; DEFINE_string(RINEX_version, "3.02", "Specifies the RINEX version (2.11 or 3.02)"); Rinex_Printer::Rinex_Printer() { navfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_GPS_NAV"); obsfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_OBS"); sbsfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_SBAS"); navGalfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_GAL_NAV"); navMixfilename = Rinex_Printer::createFilename("RINEX_FILE_TYPE_MIXED_NAV"); Rinex_Printer::navFile.open(navfilename, std::ios::out | std::ios::in | std::ios::app); Rinex_Printer::obsFile.open(obsfilename, std::ios::out | std::ios::in | std::ios::app); Rinex_Printer::sbsFile.open(sbsfilename, std::ios::out | std::ios::app); Rinex_Printer::navGalFile.open(navGalfilename, std::ios::out | std::ios::in | std::ios::app); Rinex_Printer::navMixFile.open(navMixfilename, std::ios::out | std::ios::in | std::ios::app); // RINEX v3.02 codes satelliteSystem["GPS"] = "G"; satelliteSystem["GLONASS"] = "R"; satelliteSystem["SBAS payload"] = "S"; satelliteSystem["Galileo"] = "E"; satelliteSystem["Beidou"] = "C"; satelliteSystem["Mixed"] = "M"; observationCode["GPS_L1_CA"] = "1C"; // "1C" GPS L1 C/A observationCode["GPS_L1_P"] = "1P"; // "1P" GPS L1 P observationCode["GPS_L1_Z_TRACKING"] = "1W"; // "1W" GPS L1 Z-tracking and similar (AS on) observationCode["GPS_L1_Y"] = "1Y"; // "1Y" GPS L1 Y observationCode["GPS_L1_M "] = "1M"; // "1M" GPS L1 M observationCode["GPS_L1_CODELESS"] = "1N"; // "1N" GPS L1 codeless observationCode["GPS_L2_CA"] = "2C"; // "2C" GPS L2 C/A observationCode["L2_SEMI_CODELESS"] = "2D"; // "2D" GPS L2 L1(C/A)+(P2-P1) semi-codeless observationCode["GPS_L2_L2CM"] = "2S"; // "2S" GPS L2 L2C (M) observationCode["GPS_L2_L2CL"] = "2L"; // "2L" GPS L2 L2C (L) observationCode["GPS_L2_L2CML"] = "2X"; // "2X" GPS L2 L2C (M+L) observationCode["GPS_L2_P"] = "2P"; // "2P" GPS L2 P observationCode["GPS_L2_Z_TRACKING"] = "2W"; // "2W" GPS L2 Z-tracking and similar (AS on) observationCode["GPS_L2_Y"] = "2Y"; // "2Y" GPS L2 Y observationCode["GPS_L2_M"] = "2M"; // "2M" GPS GPS L2 M observationCode["GPS_L2_codeless"] = "2N"; // "2N" GPS L2 codeless observationCode["GPS_L5_I"] = "5I"; // "5I" GPS L5 I observationCode["GPS_L5_Q"] = "5Q"; // "5Q" GPS L5 Q observationCode["GPS_L5_IQ"] = "5X"; // "5X" GPS L5 I+Q observationCode["GLONASS_G1_CA"] = "1C"; // "1C" GLONASS G1 C/A observationCode["GLONASS_G1_P"] = "1P"; // "1P" GLONASS G1 P observationCode["GLONASS_G2_CA"] = "2C"; // "2C" GLONASS G2 C/A (Glonass M) observationCode["GLONASS_G2_P"] = "2P"; // "2P" GLONASS G2 P observationCode["GALILEO_E1_A"] = "1A"; // "1A" GALILEO E1 A (PRS) observationCode["GALILEO_E1_B"] = "1B"; // "1B" GALILEO E1 B (I/NAV OS/CS/SoL) observationCode["GALILEO_E1_C"] = "1C"; // "1C" GALILEO E1 C (no data) observationCode["GALILEO_E1_BC"] = "1X"; // "1X" GALILEO E1 B+C observationCode["GALILEO_E1_ABC"] = "1Z"; // "1Z" GALILEO E1 A+B+C observationCode["GALILEO_E5a_I"] = "5I"; // "5I" GALILEO E5a I (F/NAV OS) observationCode["GALILEO_E5a_Q"] = "5Q"; // "5Q" GALILEO E5a Q (no data) observationCode["GALILEO_E5aIQ"] = "5X"; // "5X" GALILEO E5a I+Q observationCode["GALILEO_E5b_I"] = "7I"; // "7I" GALILEO E5b I observationCode["GALILEO_E5b_Q"] = "7Q"; // "7Q" GALILEO E5b Q observationCode["GALILEO_E5b_IQ"] = "7X"; // "7X" GALILEO E5b I+Q observationCode["GALILEO_E5_I"] = "8I"; // "8I" GALILEO E5 I observationCode["GALILEO_E5_Q"] = "8Q"; // "8Q" GALILEO E5 Q observationCode["GALILEO_E5_IQ"] = "8X"; // "8X" GALILEO E5 I+Q observationCode["GALILEO_E56_A"] = "6A"; // "6A" GALILEO E6 A observationCode["GALILEO_E56_B"] = "6B"; // "6B" GALILEO E6 B observationCode["GALILEO_E56_B"] = "6C"; // "6C" GALILEO E6 C observationCode["GALILEO_E56_BC"] = "6X"; // "6X" GALILEO E6 B+C observationCode["GALILEO_E56_ABC"] = "6Z"; // "6Z" GALILEO E6 A+B+C observationCode["SBAS_L1_CA"] = "1C"; // "1C" SBAS L1 C/A observationCode["SBAS_L5_I"] = "5I"; // "5I" SBAS L5 I observationCode["SBAS_L5_Q"] = "5Q"; // "5Q" SBAS L5 Q observationCode["SBAS_L5_IQ"] = "5X"; // "5X" SBAS L5 I+Q observationCode["COMPASS_E2_I"] = "2I"; observationCode["COMPASS_E2_Q"] = "2Q"; observationCode["COMPASS_E2_IQ"] = "2X"; observationCode["COMPASS_E5b_I"] = "7I"; observationCode["COMPASS_E5b_Q"] = "7Q"; observationCode["COMPASS_E5b_IQ"] = "7X"; observationCode["COMPASS_E6_I"] = "6I"; observationCode["COMPASS_E6_Q"] = "6Q"; observationCode["COMPASS_E6_IQ"] = "6X"; observationType["PSEUDORANGE"] = "C"; observationType["CARRIER_PHASE"] = "L"; observationType["DOPPLER"] = "D"; observationType["SIGNAL_STRENGTH"] = "S"; // RINEX v2.10 and v2.11 codes observationType["PSEUDORANGE_CA_v2"] = "C"; observationType["PSEUDORANGE_P_v2"] = "P"; observationType["CARRIER_PHASE_CA_v2"] = "L"; observationType["DOPPLER_v2"] = "D"; observationType["SIGNAL_STRENGTH_v2"] = "S"; observationCode["GPS_L1_CA_v2"] = "1"; if ( FLAGS_RINEX_version.compare("3.01") == 0 ) { version = 3; stringVersion = "3.01"; } else if ( FLAGS_RINEX_version.compare("3.02") == 0 ) { version = 3; stringVersion = "3.02"; } else if ( FLAGS_RINEX_version.compare("3") == 0 ) { version = 3; stringVersion = "3.02"; } else if ( FLAGS_RINEX_version.compare("2.11") == 0 ) { version = 2; stringVersion = "2.11"; } else if ( FLAGS_RINEX_version.compare("2.10") == 0 ) { version = 2; stringVersion = "2.10"; } else if ( FLAGS_RINEX_version.compare("2") == 0 ) { version = 2; stringVersion = "2.11"; } else { LOG(WARNING) << "Unknown RINEX version " << FLAGS_RINEX_version << " (must be 2.11 or 3.02). Using 3.02"; version = 3; stringVersion = "3.02"; } numberTypesObservations = 4; // Number of available types of observable in the system } Rinex_Printer::~Rinex_Printer() { // close RINEX files long posn, poso, poss, posng, posmn; posn = navFile.tellp(); poso = obsFile.tellp(); poss = sbsFile.tellp(); posng = navGalFile.tellp(); posmn = navMixFile.tellp(); Rinex_Printer::navFile.close(); Rinex_Printer::obsFile.close(); Rinex_Printer::sbsFile.close(); Rinex_Printer::navGalFile.close(); // If nothing written, erase the files. if (posn == 0) { if(remove(navfilename.c_str()) != 0) LOG(INFO) << "Error deleting temporary file"; } if (poso == 0) { if(remove(obsfilename.c_str()) != 0) LOG(INFO) << "Error deleting temporary file"; } if (poss == 0) { if(remove(sbsfilename.c_str()) != 0) LOG(INFO) << "Error deleting temporary file"; } if (posng == 0) { if(remove(navGalfilename.c_str()) != 0) LOG(INFO) << "Error deleting temporary file"; } if (posmn == 0) { if(remove(navMixfilename.c_str()) != 0) LOG(INFO) << "Error deleting temporary file"; } } void Rinex_Printer::lengthCheck(const std::string& line) { if (line.length() != 80) { LOG(ERROR) << "Bad defined RINEX line: " << line.length() << " characters (must be 80)" << std::endl << line << std::endl << "----|---1|0---|---2|0---|---3|0---|---4|0---|---5|0---|---6|0---|---7|0---|---8|" << std::endl; } } std::string Rinex_Printer::createFilename(std::string type) { const std::string stationName = "GSDR"; // 4-character station name designator boost::gregorian::date today = boost::gregorian::day_clock::local_day(); const int dayOfTheYear = today.day_of_year(); std::stringstream strm0; if (dayOfTheYear < 100) strm0 << "0"; // three digits for day of the year if (dayOfTheYear < 10) strm0 << "0"; // three digits for day of the year strm0 << dayOfTheYear; std::string dayOfTheYearTag=strm0.str(); std::map fileType; fileType.insert(std::pair("RINEX_FILE_TYPE_OBS", "O")); // O - Observation file. fileType.insert(std::pair("RINEX_FILE_TYPE_GPS_NAV", "N")); // N - GPS navigation message file. fileType.insert(std::pair("RINEX_FILE_TYPE_MET", "M")); // M - Meteorological data file. fileType.insert(std::pair("RINEX_FILE_TYPE_GLO_NAV", "G")); // G - GLONASS navigation file. fileType.insert(std::pair("RINEX_FILE_TYPE_GAL_NAV", "L")); // L - Galileo navigation message file. fileType.insert(std::pair("RINEX_FILE_TYPE_MIXED_NAV", "P")); // P - Mixed GNSS navigation message file. fileType.insert(std::pair("RINEX_FILE_TYPE_GEO_NAV", "H")); // H - SBAS Payload navigation message file. fileType.insert(std::pair("RINEX_FILE_TYPE_SBAS", "B")); // B - SBAS broadcast data file. fileType.insert(std::pair("RINEX_FILE_TYPE_CLK", "C")); // C - Clock file. fileType.insert(std::pair("RINEX_FILE_TYPE_SUMMARY", "S")); // S - Summary file (used e.g., by IGS, not a standard!). boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time(); tm pt_tm = boost::posix_time::to_tm(pt); int local_hour = pt_tm.tm_hour; std::stringstream strm; strm << local_hour; std::map Hmap; Hmap.insert(std::pair("0", "a")); Hmap.insert(std::pair("1", "b")); Hmap.insert(std::pair("2", "c")); Hmap.insert(std::pair("3", "d")); Hmap.insert(std::pair("4", "e")); Hmap.insert(std::pair("5", "f")); Hmap.insert(std::pair("6", "g")); Hmap.insert(std::pair("7", "h")); Hmap.insert(std::pair("8", "i")); Hmap.insert(std::pair("9", "j")); Hmap.insert(std::pair("10", "k")); Hmap.insert(std::pair("11", "l")); Hmap.insert(std::pair("12", "m")); Hmap.insert(std::pair("13", "n")); Hmap.insert(std::pair("14", "o")); Hmap.insert(std::pair("15", "p")); Hmap.insert(std::pair("16", "q")); Hmap.insert(std::pair("17", "r")); Hmap.insert(std::pair("18", "s")); Hmap.insert(std::pair("19", "t")); Hmap.insert(std::pair("20", "u")); Hmap.insert(std::pair("21", "v")); Hmap.insert(std::pair("22", "w")); Hmap.insert(std::pair("23", "x")); std::string hourTag = Hmap[strm.str()]; int local_minute = pt_tm.tm_min; std::stringstream strm2; if (local_minute<10) strm2 << "0"; // at least two digits for minutes strm2 << local_minute; std::string minTag = strm2.str(); int local_year = pt_tm.tm_year - 100; // 2012 is 112 std::stringstream strm3; strm3 << local_year; std::string yearTag = strm3.str(); std::string typeOfFile = fileType[type]; std::string filename(stationName + dayOfTheYearTag + hourTag + minTag + "." + yearTag + typeOfFile); return filename; } std::string Rinex_Printer::getLocalTime() { std::string line; line += std::string("GNSS-SDR"); line += std::string(12, ' '); std::string username; char c_username[20] = {0}; int nGet = getlogin_r(c_username, sizeof(c_username) - 1); if (nGet == 0) { username = c_username; } else { username = "UNKNOWN USER"; } line += Rinex_Printer::leftJustify(username, 20); boost::gregorian::date today = boost::gregorian::day_clock::local_day(); boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("UTC")); boost::local_time::local_date_time pt = boost::local_time::local_sec_clock::local_time(zone); tm pt_tm = boost::local_time::to_tm(pt); std::stringstream strmHour; int utc_hour = pt_tm.tm_hour; if (utc_hour < 10) strmHour << "0"; // two digits for hours strmHour << utc_hour; std::stringstream strmMin; int utc_minute = pt_tm.tm_min; if (utc_minute < 10) strmMin << "0"; // two digits for minutes strmMin << utc_minute; if (version == 2) { int day = pt_tm.tm_mday; line += Rinex_Printer::rightJustify(boost::lexical_cast(day), 2); line += std::string("-"); std::map months; months[0] = "JAN"; months[1] = "FEB"; months[2] = "MAR"; months[3] = "APR"; months[4] = "MAY"; months[5] = "JUN"; months[6] = "JUL"; months[7] = "AUG"; months[8] = "SEP"; months[9] = "OCT"; months[10] = "NOV"; months[11] = "DEC"; line += months[pt_tm.tm_mon]; line += std::string("-"); line += boost::lexical_cast(pt_tm.tm_year - 100); line += std::string(1, ' '); line += strmHour.str(); line += std::string(":"); line += strmMin.str(); line += std::string(5, ' '); } if (version == 3) { line += boost::gregorian::to_iso_string(today); line += std::string(1, ' '); line += strmHour.str(); line += strmMin.str(); std::stringstream strm2; int utc_seconds = pt_tm.tm_sec; if (utc_seconds < 10) strm2 << "0"; // two digits for seconds strm2 << utc_seconds; line += strm2.str(); line += std::string(1, ' '); line += std::string("UTC"); line += std::string(1, ' '); } return line; } void Rinex_Printer::rinex_nav_header(std::fstream& out, const Galileo_Iono& iono, const Galileo_Utc_Model& utc_model, const Galileo_Almanac& galileo_almanac) { std::string line; stringVersion = "3.02"; version = 3; // -------- Line 1 line = std::string(5, ' '); line += stringVersion; line += std::string(11, ' '); line += std::string("N: GNSS NAV DATA"); line += std::string(4, ' '); line += std::string("E: GALILEO"); line += std::string(10, ' '); line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); line += Rinex_Printer::getLocalTime(); line += std::string("PGM / RUN BY / DATE"); line += std::string(1, ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("GALILEO NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line ionospheric info 1 line.clear(); line += std::string("GAL "); line += std::string(1, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.ai0_5, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.ai1_5, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.ai2_5, 10, 2), 12); double zero = 0.0; line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(zero, 10, 2), 12); line += std::string(7, ' '); line += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line system time correction line.clear(); line += std::string("GAUT"); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.A0_6, 16, 2), 18); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.A1_6, 15, 2), 16); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.t0t_6), 7); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.WNot_6), 5); line += std::string(10, ' '); line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line system time correction 2 line.clear(); line += std::string("GPGA"); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_0G_10, 16, 2), 18); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_1G_10, 15, 2), 16); line += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.t_0G_10), 7); line += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.WN_0G_10), 5); line += std::string(10, ' '); line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 6 leap seconds // For leap second information, see http://www.endruntechnologies.com/leap.htm line.clear(); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.Delta_tLS_6), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.Delta_tLSF_6), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.WN_LSF_6), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.DN_6), 6); line += std::string(36, ' '); line += Rinex_Printer::leftJustify("LEAP SECONDS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- End of Header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::update_nav_header(std::fstream& out, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& utc_model, const Galileo_Almanac& galileo_almanac) { std::vector data; std::string line_aux; long pos = out.tellp(); out.seekp(0); data.clear(); bool no_more_finds = false; std::string line_str; while(!out.eof()) { std::getline(out, line_str); if(!no_more_finds) { line_aux.clear(); if ((line_str.find("GAL", 0) != std::string::npos) && (line_str.find("IONOSPHERIC CORR", 59) != std::string::npos)) { line_aux += std::string("GAL "); line_aux += std::string(1, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai0_5, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai1_5, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai2_5, 10, 2), 12); double zero = 0.0; line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(zero, 10, 2), 12); line_aux += std::string(7, ' '); line_aux += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GAUT", 0) != std::string::npos) && (line_str.find("TIME SYSTEM CORR", 59) != std::string::npos)) { line_aux += std::string("GAUT"); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.A0_6, 16, 2), 18); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.A1_6, 15, 2), 16); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.t0t_6), 7); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.WNot_6), 5); line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GPGA", 0) != std::string::npos) && (line_str.find("TIME SYSTEM CORR", 59) != std::string::npos)) { line_aux += std::string("GPGA"); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_0G_10, 16, 2), 18); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_1G_10, 15, 2), 16); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.t_0G_10), 7); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.WN_0G_10), 5); line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); data.push_back(line_aux); } else if (line_str.find("LEAP SECONDS", 59) != std::string::npos) { line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.Delta_tLS_6), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.Delta_tLSF_6), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.WN_LSF_6), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.DN_6), 6); line_aux += std::string(36, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } else { data.push_back(line_str); } } out.close(); out.open(navGalfilename, std::ios::out | std::ios::trunc); out.seekp(0); for (int i = 0; i < (int) data.size() - 1; i++) { out << data[i] << std::endl; } out.close(); out.open(navGalfilename, std::ios::out | std::ios::app); out.seekp(pos); std::cout << "The RINEX Navigation file header has been updated with UTC and IONO info." << std::endl; } void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Utc_Model& utc_model, const Gps_Iono& iono) { std::vector data; std::string line_aux; long pos = out.tellp(); out.seekp(0); data.clear(); bool no_more_finds = false; std::string line_str; while(!out.eof()) { std::getline(out, line_str); if(!no_more_finds) { line_aux.clear(); if (version == 2) { if (line_str.find("ION ALPHA", 59) != std::string::npos) { line_aux += std::string(2, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha0, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha1, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha2, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha3, 10, 2), 12); line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("ION ALPHA", 20); data.push_back(line_aux); } else if (line_str.find("ION BETA", 59) != std::string::npos) { line_aux += std::string(2, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta0, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta1, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta2, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta3, 10, 2), 12); line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("ION BETA", 20); data.push_back(line_aux); } else if (line_str.find("DELTA-UTC", 59) != std::string::npos) { line_aux += std::string(3, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 18, 2), 19); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 18, 2), 19); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_t_OT), 9); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_T + 1024), 9); // valid until 2019 line_aux += std::string(1, ' '); line_aux += Rinex_Printer::leftJustify("DELTA-UTC: A0,A1,T,W", 20); data.push_back(line_aux); } else if (line_str.find("LEAP SECONDS", 59) != std::string::npos) { line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LS), 6); line_aux += std::string(54, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } if (version == 3) { if (line_str.find("GPSA", 0) != std::string::npos) { line_aux += std::string("GPSA"); line_aux += std::string(1, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha0, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha1, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha2, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha3, 10, 2), 12); line_aux += std::string(7, ' '); line_aux += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); data.push_back(line_aux); } else if (line_str.find("GPSB", 0) != std::string::npos) { line_aux += std::string("GPSB"); line_aux += std::string(1, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta0, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta1, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta2, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta3, 10, 2), 12); line_aux += std::string(7, ' '); line_aux += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); data.push_back(line_aux); } else if (line_str.find("GPUT", 0) != std::string::npos) { line_aux += std::string("GPUT"); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 16, 2), 18); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 15, 2), 16); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_t_OT), 7); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_T + 1024), 5); // valid until 2019 line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); data.push_back(line_aux); } else if (line_str.find("LEAP SECONDS", 59) != std::string::npos) { line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LS), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LSF), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_LSF), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_DN), 6); line_aux += std::string(36, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } } else { data.push_back(line_str); } } out.close(); out.open(navfilename, std::ios::out | std::ios::trunc); out.seekp(0); for (int i = 0; i < (int) data.size() - 1; i++) { out << data[i] << std::endl; } out.close(); out.open(navfilename, std::ios::out | std::ios::app); out.seekp(pos); std::cout << "The RINEX Navigation file header has been updated with UTC and IONO info." << std::endl; } void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& iono, const Gps_Utc_Model& utc_model) { std::string line; // -------- Line 1 line = std::string(5, ' '); line += stringVersion; line += std::string(11, ' '); if (version == 2) { line += std::string("N: GPS NAV DATA"); line += std::string(25, ' '); } if (version == 3 ) { line += std::string("N: GNSS NAV DATA"); line += std::string(4, ' '); //! \todo Add here other systems... line += std::string("G: GPS"); line += std::string(14, ' '); // ... } line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); line += Rinex_Printer::getLocalTime(); line += std::string("PGM / RUN BY / DATE"); line += std::string(1, ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 3 line.clear(); line += Rinex_Printer::leftJustify("GPS NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line ionospheric info 1 line.clear(); if (version == 2) { line += std::string(2, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha0, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha1, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha2, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha3, 10, 2), 12); line += std::string(10, ' '); line += Rinex_Printer::leftJustify("ION ALPHA", 20); } if (version == 3) { line += std::string("GPSA"); line += std::string(1, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha0, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha1, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha2, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_alpha3, 10, 2), 12); line += std::string(7, ' '); line += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line ionospheric info 2 line.clear(); if (version == 2) { line += std::string(2, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta0, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta1, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta2, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta3, 10, 2), 12); line += std::string(10, ' '); line += Rinex_Printer::leftJustify("ION BETA", 20); } if (version == 3) { line += std::string("GPSB"); line += std::string(1, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta0, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta1, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta2, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(iono.d_beta3, 10, 2), 12); line += std::string(7, ' '); line += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 5 system time correction line.clear(); if (version == 2) { line += std::string(3, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 18, 2), 19); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 18, 2), 19); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_t_OT), 9); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_T + 1024), 9); // valid until 2019 line += std::string(1, ' '); line += Rinex_Printer::leftJustify("DELTA-UTC: A0,A1,T,W", 20); } if (version == 3) { line += std::string("GPUT"); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A0, 16, 2), 18); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(utc_model.d_A1, 15, 2), 16); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_t_OT), 7); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_T + 1024), 5); // valid until 2019 /* if ( SBAS ) { line += string(1, ' '); line += leftJustify(asString(d_t_OT_SBAS),5); line += string(1, ' '); line += leftJustify(asString(d_WN_T_SBAS),2); line += string(1, ' '); } else */ line += std::string(10, ' '); line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 6 leap seconds // For leap second information, see http://www.endruntechnologies.com/leap.htm line.clear(); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LS), 6); if (version == 2) { line += std::string(54, ' '); } if (version == 3) { line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LSF), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_LSF), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_DN), 6); line += std::string(36, ' '); } line += Rinex_Printer::leftJustify("LEAP SECONDS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- End of Header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::update_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Galileo_Almanac& galileo_almanac) { std::vector data; std::string line_aux; long pos = out.tellp(); out.seekp(0); data.clear(); bool no_more_finds = false; std::string line_str; while(!out.eof()) { std::getline(out, line_str); if(!no_more_finds) { line_aux.clear(); if (line_str.find("GPSA", 0) != std::string::npos) { line_aux += std::string("GPSA"); line_aux += std::string(1, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha0, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha1, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha2, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha3, 10, 2), 12); line_aux += std::string(7, ' '); line_aux += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GAL", 0) != std::string::npos) && (line_str.find("IONOSPHERIC CORR", 59) != std::string::npos)) { line_aux += std::string("GAL "); line_aux += std::string(1, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai0_5, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai1_5, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai2_5, 10, 2), 12); double zero = 0.0; line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(zero, 10, 2), 12); line_aux += std::string(7, ' '); line_aux += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GPSB", 0) != std::string::npos) && (line_str.find("IONOSPHERIC CORR", 59) != std::string::npos)) { line_aux += std::string("GPSB"); line_aux += std::string(1, ' '); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_beta0, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_beta1, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_beta2, 10, 2), 12); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_beta3, 10, 2), 12); line_aux += std::string(7, ' '); line_aux += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GPUT", 0) != std::string::npos) && (line_str.find("TIME SYSTEM CORR", 59) != std::string::npos)) { line_aux += std::string("GPUT"); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.d_t_OT), 7); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.i_WN_T + 1024), 5); // valid until 2019 line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GAUT", 0) != std::string::npos) && (line_str.find("TIME SYSTEM CORR", 59) != std::string::npos)) { line_aux += std::string("GAUT"); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_utc_model.A0_6, 16, 2), 18); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_utc_model.A1_6, 15, 2), 16); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.t0t_6), 7); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.WNot_6), 5); line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); data.push_back(line_aux); } else if ((line_str.find("GPGA", 0) != std::string::npos) && (line_str.find("TIME SYSTEM CORR", 59) != std::string::npos)) { line_aux += std::string("GPGA"); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_0G_10, 16, 2), 18); line_aux += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_1G_10, 15, 2), 16); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.t_0G_10), 7); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.WN_0G_10), 5); line_aux += std::string(10, ' '); line_aux += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); data.push_back(line_aux); } else if (line_str.find("LEAP SECONDS", 59) != std::string::npos) { line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.d_DeltaT_LS), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.d_DeltaT_LSF), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.i_WN_LSF), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.i_DN), 6); line_aux += std::string(36, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } else { data.push_back(line_str); } } out.close(); out.open(navMixfilename, std::ios::out | std::ios::trunc); out.seekp(0); for (int i = 0; i < (int) data.size() - 1; i++) { out << data[i] << std::endl; } out.close(); out.open(navMixfilename, std::ios::out | std::ios::app); out.seekp(pos); std::cout << "The RINEX Navigation file header has been updated with UTC and IONO info." << std::endl; } void Rinex_Printer::rinex_nav_header(std::fstream& out, const Gps_Iono& gps_iono, const Gps_Utc_Model& gps_utc_model, const Galileo_Iono& galileo_iono, const Galileo_Utc_Model& galileo_utc_model, const Galileo_Almanac& galileo_almanac) { std::string line; stringVersion = "3.02"; version = 3; // -------- Line 1 line = std::string(5, ' '); line += stringVersion; line += std::string(11, ' '); line += std::string("N: GNSS NAV DATA"); line += std::string(4, ' '); line += std::string("M: MIXED"); line += std::string(12, ' '); line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); line += Rinex_Printer::getLocalTime(); line += std::string("PGM / RUN BY / DATE"); line += std::string(1, ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("GNSS NAVIGATION MESSAGE FILE GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line ionospheric info 1 line.clear(); line += std::string("GAL "); line += std::string(1, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai0_5, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai1_5, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_iono.ai2_5, 10, 2), 12); double zero = 0.0; line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(zero, 10, 2), 12); line += std::string(7, ' '); line += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line ionospheric info 2 line.clear(); line += std::string("GPSA"); line += std::string(1, ' '); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha0, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha1, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha2, 10, 2), 12); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_iono.d_alpha3, 10, 2), 12); line += std::string(7, ' '); line += Rinex_Printer::leftJustify("IONOSPHERIC CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line system time correction line.clear(); line += std::string("GAUT"); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_utc_model.A0_6, 16, 2), 18); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_utc_model.A1_6, 15, 2), 16); line += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.t0t_6), 7); line += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.WNot_6), 5); line += std::string(10, ' '); line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line system time correction 2 line.clear(); line += std::string("GPGA"); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_0G_10, 16, 2), 18); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(galileo_almanac.A_1G_10, 15, 2), 16); line += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.t_0G_10), 7); line += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_almanac.WN_0G_10), 5); line += std::string(10, ' '); line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line system time correction 3 line.clear(); line += std::string("GPUT"); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A0, 16, 2), 18); line += Rinex_Printer::rightJustify(Rinex_Printer::doub2for(gps_utc_model.d_A1, 15, 2), 16); line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.d_t_OT), 7); line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.i_WN_T + 1024), 5); // valid until 2019 line += std::string(10, ' '); line += Rinex_Printer::leftJustify("TIME SYSTEM CORR", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 6 leap seconds // For leap second information, see http://www.endruntechnologies.com/leap.htm line.clear(); line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.d_DeltaT_LS), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.d_DeltaT_LSF), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.i_WN_LSF), 6); line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_utc_model.i_DN), 6); line += std::string(36, ' '); line += Rinex_Printer::leftJustify("LEAP SECONDS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- End of Header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::rinex_sbs_header(std::fstream& out) { std::string line; // -------- Line 1 line.clear(); line = std::string(5, ' '); line += std::string("2.10"); line += std::string(11, ' '); line += Rinex_Printer::leftJustify("B SBAS DATA",20); line += std::string(20, ' '); line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); line += Rinex_Printer::leftJustify("GNSS-SDR", 20); std::string username; char c_username[20] = {0}; int nGet = getlogin_r(c_username, sizeof(c_username) - 1); if (nGet == 0) { username = c_username; } else { username = "UNKNOWN USER"; } line += Rinex_Printer::leftJustify(username, 20); // Date of file creation (dd-mmm-yy hhmm) boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("UTC")); boost::local_time::local_date_time pt = boost::local_time::local_sec_clock::local_time(zone); tm pt_tm = boost::local_time::to_tm(pt); std::stringstream strYear; int utc_year = pt.date().year(); utc_year -= 2000; // two digits for year strYear << utc_year; std::stringstream strMonth; int utc_month = pt.date().month().as_number(); if (utc_month < 10) strMonth << "0"; // two digits for months strMonth << utc_month; std::stringstream strmDay; int utc_day = pt.date().day().as_number(); if (utc_day < 10) strmDay << "0"; // two digits for days strmDay << utc_day; std::stringstream strmHour; int utc_hour = pt_tm.tm_hour; if (utc_hour < 10) strmHour << "0"; // two digits for hours strmHour << utc_hour; std::stringstream strmMin; int utc_minute = pt_tm.tm_min; if (utc_minute < 10) strmMin << "0"; // two digits for minutes strmMin << utc_minute; std::string time_str; time_str += strmDay.str(); time_str += "-"; time_str += strMonth.str(); time_str += "-"; time_str += strYear.str(); time_str += " "; time_str += strmHour.str(); time_str += strmMin.str(); line += Rinex_Printer::leftJustify(time_str, 20); line += Rinex_Printer::leftJustify("PGM / RUN BY / DATE", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 3 line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("REC INDEX/TYPE/VERS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT 1 line.clear(); line += Rinex_Printer::leftJustify("BROADCAST DATA FILE FOR GEO SV, GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT 2 line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- End of Header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map& eph_map) { std::string line; std::map::const_iterator gps_ephemeris_iter; for(gps_ephemeris_iter = eph_map.begin(); gps_ephemeris_iter != eph_map.end(); gps_ephemeris_iter++) { // -------- SV / EPOCH / SV CLK boost::posix_time::ptime p_utc_time = Rinex_Printer::compute_GPS_time(gps_ephemeris_iter->second, gps_ephemeris_iter->second.d_Toc); std::string timestring = boost::posix_time::to_iso_string(p_utc_time); std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); std::string seconds (timestring, 13, 2); if (version == 2) { line += Rinex_Printer::rightJustify(boost::lexical_cast(gps_ephemeris_iter->second.i_satellite_PRN), 2); line += std::string(1, ' '); std::string year (timestring, 2, 2); line += year; line += std::string(1, ' '); if(boost::lexical_cast(month) < 10) { line += std::string(1, ' '); line += std::string(month, 1, 1); } else { line += month; } line += std::string(1, ' '); if(boost::lexical_cast(day) < 10) { line += std::string(1, ' '); line += std::string(day, 1, 1); } else { line += day; } line += std::string(1, ' '); if(boost::lexical_cast(hour) < 10) { line += std::string(1, ' '); line += std::string(hour, 1, 1); } else { line += hour; } line += std::string(1, ' '); if(boost::lexical_cast(minutes) < 10) { line += std::string(1, ' '); line += std::string(minutes, 1, 1); } else { line += minutes; } line += std::string(1, ' '); if(boost::lexical_cast(seconds) < 10) { line += std::string(1, ' '); line += std::string(seconds, 1, 1); } else { line += seconds; } line += std::string(1, '.'); std::string decimal = std::string("0"); if (timestring.size() > 16) { std::string decimal (timestring, 16, 1); } line += decimal; line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_A_f0, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_A_f1, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_A_f2, 18, 2); line += std::string(1, ' '); } if (version == 3) { line += satelliteSystem["GPS"]; if (gps_ephemeris_iter->second.i_satellite_PRN < 10) line += std::string("0"); line += boost::lexical_cast(gps_ephemeris_iter->second.i_satellite_PRN); std::string year (timestring, 0, 4); line += std::string(1, ' '); line += year; line += std::string(1, ' '); line += month; line += std::string(1, ' '); line += day; line += std::string(1, ' '); line += hour; line += std::string(1, ' '); line += minutes; line += std::string(1, ' '); line += seconds; line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_A_f0, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_A_f1, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_A_f2, 18, 2); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 1 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } // If there is a discontinued reception the ephemeris is not validated if (gps_ephemeris_iter->second.d_IODE_SF2 == gps_ephemeris_iter->second.d_IODE_SF3) { line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_IODE_SF2, 18, 2); } else { LOG(WARNING) << "Discontinued reception of Frame 2 and 3"; } line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Crs, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Delta_n, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_M_0, 18, 2); if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 2 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Cuc, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_e_eccentricity, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Cus, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_sqrt_A, 18, 2); if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 3 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Toe, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Cic, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_OMEGA0, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Cis, 18, 2); if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 4 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_i_0, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_Crc, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_OMEGA, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_OMEGA_DOT, 18, 2); if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 5 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_IDOT, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(static_cast(gps_ephemeris_iter->second.i_code_on_L2), 18, 2); line += std::string(1, ' '); double GPS_week_continuous_number = static_cast(gps_ephemeris_iter->second.i_GPS_week + 1024); // valid until April 7, 2019 (check http://www.colorado.edu/geography/gcraft/notes/gps/gpseow.htm) line += Rinex_Printer::doub2for(GPS_week_continuous_number, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(static_cast(gps_ephemeris_iter->second.i_code_on_L2), 18, 2); if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 6 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } line += Rinex_Printer::doub2for(static_cast(gps_ephemeris_iter->second.i_SV_accuracy), 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(static_cast(gps_ephemeris_iter->second.i_SV_health), 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_TGD, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_IODC, 18, 2); if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 7 line.clear(); if (version == 2) { line += std::string(4, ' '); } if (version == 3) { line += std::string(5, ' '); } line += Rinex_Printer::doub2for(gps_ephemeris_iter->second.d_TOW, 18, 2); line += std::string(1, ' '); double curve_fit_interval = 4; if (gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.i_satellite_PRN).compare("IIA")) { // Block II/IIA (Table 20-XI IS-GPS-200E ) if ( (gps_ephemeris_iter->second.d_IODC > 239) && (gps_ephemeris_iter->second.d_IODC < 248) ) curve_fit_interval = 8; if ( ( (gps_ephemeris_iter->second.d_IODC > 247) && (gps_ephemeris_iter->second.d_IODC < 256) ) || (gps_ephemeris_iter->second.d_IODC == 496) ) curve_fit_interval = 14; if ( (gps_ephemeris_iter->second.d_IODC > 496) && (gps_ephemeris_iter->second.d_IODC < 504) ) curve_fit_interval = 26; if ( (gps_ephemeris_iter->second.d_IODC > 503) && (gps_ephemeris_iter->second.d_IODC < 511) ) curve_fit_interval = 50; if ( ( (gps_ephemeris_iter->second.d_IODC > 751) && (gps_ephemeris_iter->second.d_IODC < 757) ) || (gps_ephemeris_iter->second.d_IODC == 511) ) curve_fit_interval = 74; if ( gps_ephemeris_iter->second.d_IODC == 757 ) curve_fit_interval = 98; } if ((gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.i_satellite_PRN).compare("IIR") == 0) || (gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.i_satellite_PRN).compare("IIR-M") == 0) || (gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.i_satellite_PRN).compare("IIF") == 0) || (gps_ephemeris_iter->second.satelliteBlock.at(gps_ephemeris_iter->second.i_satellite_PRN).compare("IIIA") == 0) ) { // Block IIR/IIR-M/IIF/IIIA (Table 20-XII IS-GPS-200E ) if ( (gps_ephemeris_iter->second.d_IODC > 239) && (gps_ephemeris_iter->second.d_IODC < 248)) curve_fit_interval = 8; if ( ( (gps_ephemeris_iter->second.d_IODC > 247) && (gps_ephemeris_iter->second.d_IODC < 256)) || (gps_ephemeris_iter->second.d_IODC == 496) ) curve_fit_interval = 14; if ( ( (gps_ephemeris_iter->second.d_IODC > 496) && (gps_ephemeris_iter->second.d_IODC < 504)) || ( (gps_ephemeris_iter->second.d_IODC > 1020) && (gps_ephemeris_iter->second.d_IODC < 1024) ) ) curve_fit_interval = 26; } line += Rinex_Printer::doub2for(curve_fit_interval, 18, 2); line += std::string(1, ' '); line += std::string(18, ' '); // spare line += std::string(1, ' '); line += std::string(18, ' '); // spare if (version == 2) { line += std::string(1, ' '); } Rinex_Printer::lengthCheck(line); out << line << std::endl; line.clear(); } } void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map& eph_map) { std::string line; std::map::const_iterator galileo_ephemeris_iter; line.clear(); for(galileo_ephemeris_iter = eph_map.begin(); galileo_ephemeris_iter != eph_map.end(); galileo_ephemeris_iter++) { // -------- SV / EPOCH / SV CLK boost::posix_time::ptime p_utc_time = Rinex_Printer::compute_Galileo_time(galileo_ephemeris_iter->second, galileo_ephemeris_iter->second.t0e_1); std::string timestring = boost::posix_time::to_iso_string(p_utc_time); std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); std::string seconds (timestring, 13, 2); line += satelliteSystem["Galileo"]; if (galileo_ephemeris_iter->second.i_satellite_PRN < 10) line += std::string("0"); line += boost::lexical_cast(galileo_ephemeris_iter->second.i_satellite_PRN); std::string year (timestring, 0, 4); line += std::string(1, ' '); line += year; line += std::string(1, ' '); line += month; line += std::string(1, ' '); line += day; line += std::string(1, ' '); line += hour; line += std::string(1, ' '); line += minutes; line += std::string(1, ' '); line += seconds; line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.af0_4, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.af1_4, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.af2_4, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 1 line.clear(); line += std::string(5, ' '); line += Rinex_Printer::doub2for(static_cast(galileo_ephemeris_iter->second.IOD_ephemeris), 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_rs_3, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.delta_n_3, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.M0_1, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 2 line.clear(); line += std::string(5, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_uc_3, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.e_1, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_us_3, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.A_1, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 3 line.clear(); line += std::string(5, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.t0e_1, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_ic_4, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.OMEGA_0_2, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_is_4, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 4 line.clear(); line += std::string(5, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.i_0_2, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.C_rc_3, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.omega_2, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.OMEGA_dot_3, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 5 line.clear(); line += std::string(5, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.iDot_2, 18, 2); line += std::string(1, ' '); //double one = 1.0; // INAV E1-B std::string iNAVE1B("1000000001"); int data_source_INAV = Rinex_Printer::toInt(iNAVE1B, 10); line += Rinex_Printer::doub2for(static_cast(data_source_INAV), 18, 2); line += std::string(1, ' '); double GST_week = static_cast(galileo_ephemeris_iter->second.WN_5); double num_GST_rollovers = floor((GST_week + 1024.0) / 4096.0 ); double Galileo_week_continuous_number = GST_week + 1024.0 + num_GST_rollovers * 4096.0; line += Rinex_Printer::doub2for(Galileo_week_continuous_number, 18, 2); line += std::string(1, ' '); double zero = 0.0; line += Rinex_Printer::doub2for(zero, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 6 line.clear(); line += std::string(5, ' '); //line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.SISA_3, 18, 2); line += Rinex_Printer::doub2for(zero, 18, 2); // *************** CHANGE THIS WHEN GALILEO SIGNAL IS VALID line += std::string(1, ' '); std::string E1B_HS; std::string E5B_HS; if(galileo_ephemeris_iter->second.E1B_HS_5 == 0) E1B_HS = "00"; if(galileo_ephemeris_iter->second.E1B_HS_5 == 1) E1B_HS = "01"; if(galileo_ephemeris_iter->second.E1B_HS_5 == 2) E1B_HS = "10"; if(galileo_ephemeris_iter->second.E1B_HS_5 == 3) E1B_HS = "11"; if(galileo_ephemeris_iter->second.E5b_HS_5 == 0) E5B_HS = "00"; if(galileo_ephemeris_iter->second.E5b_HS_5 == 1) E5B_HS = "01"; if(galileo_ephemeris_iter->second.E5b_HS_5 == 2) E5B_HS = "10"; if(galileo_ephemeris_iter->second.E5b_HS_5 == 3) E5B_HS = "11"; if(E1B_HS == "11") LOG(WARNING) << "Signal Component currently in Test"; if(E1B_HS == "10") LOG(WARNING) << "Signal will be out of service"; if(E1B_HS == "01") LOG(WARNING) << "Signal out of service"; E1B_HS = "00"; // *************** CHANGE THIS WHEN GALILEO SIGNAL IS VALID std::string E1B_DVS = boost::lexical_cast(galileo_ephemeris_iter->second.E1B_DVS_5); if(E1B_DVS == "1") LOG(WARNING) << "Navigation data without guarantee"; E1B_DVS = "0"; // *************** CHANGE THIS WHEN GALILEO SIGNAL IS VALID std::string SVhealth_str = E5B_HS + boost::lexical_cast(galileo_ephemeris_iter->second.E5b_DVS_5) + "11" + "1" + E1B_DVS + E1B_HS + boost::lexical_cast(galileo_ephemeris_iter->second.E1B_DVS_5); SVhealth_str = "000000000"; // *************** CHANGE THIS WHEN GALILEO SIGNAL IS VALID int SVhealth = Rinex_Printer::toInt(SVhealth_str, 9); line += Rinex_Printer::doub2for(static_cast(SVhealth), 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.BGD_E1E5a_5, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.BGD_E1E5b_5, 18, 2); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- BROADCAST ORBIT - 7 line.clear(); line += std::string(5, ' '); line += Rinex_Printer::doub2for(galileo_ephemeris_iter->second.TOW_5, 18, 2); line += std::string(1, ' '); line += Rinex_Printer::doub2for(zero, 18, 2); line += std::string(1, ' '); line += std::string(18, ' '); // spare line += std::string(1, ' '); line += std::string(18, ' '); // spare Rinex_Printer::lengthCheck(line); out << line << std::endl; line.clear(); } } void Rinex_Printer::log_rinex_nav(std::fstream& out, const std::map& gps_eph_map, const std::map& galileo_eph_map) { version = 3; stringVersion = "3.02"; Rinex_Printer::log_rinex_nav(out, gps_eph_map); Rinex_Printer::log_rinex_nav(out, galileo_eph_map); } void Rinex_Printer::update_obs_header(std::fstream& out, const Gps_Utc_Model& utc_model) { std::vector data; std::string line_aux; out.seekp(0); data.clear(); bool no_more_finds = false; std::string line_str; while(!out.eof()) { std::getline(out, line_str); if(!no_more_finds) { line_aux.clear(); if (version == 2) { if (line_str.find("TIME OF FIRST OBS", 59) != std::string::npos) // TIME OF FIRST OBS last header annotation might change in the future { data.push_back(line_str); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LS), 6); line_aux += std::string(54, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } if (version == 3) { if (line_str.find("TIME OF FIRST OBS", 59) != std::string::npos) { data.push_back(line_str); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LS), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.d_DeltaT_LSF), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_WN_LSF), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(utc_model.i_DN), 6); line_aux += std::string(36, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } } else { data.push_back(line_str); } } out.close(); out.open(obsfilename, std::ios::out | std::ios::trunc); out.seekp(0); for (int i = 0; i < (int) data.size() - 1; i++) { out << data[i] << std::endl; } out.close(); out.open(obsfilename, std::ios::out | std::ios::in | std::ios::app); out.seekp(0, std::ios_base::end); } void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& eph, const double d_TOW_first_observation) { std::string line; // -------- Line 1 line = std::string(5, ' '); line += stringVersion; line += std::string(11, ' '); line += Rinex_Printer::leftJustify("OBSERVATION DATA", 20); line += satelliteSystem["GPS"]; line += std::string(19, ' '); line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); if (version == 2) { line += Rinex_Printer::leftJustify("BLANK OR G = GPS, R = GLONASS, E = GALILEO, M = MIXED", 60); } if (version == 3) { line += Rinex_Printer::leftJustify("G = GPS R = GLONASS E = GALILEO S = GEO M = MIXED", 60); } line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 3 line.clear(); line += Rinex_Printer::getLocalTime(); line += std::string("PGM / RUN BY / DATE"); line += std::string(1, ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("GPS OBSERVATION DATA FILE GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line MARKER NAME line.clear(); line += Rinex_Printer::leftJustify("DEFAULT MARKER NAME", 60); // put a flag or a property, line += Rinex_Printer::leftJustify("MARKER NAME", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line MARKER TYPE //line.clear(); //line += Rinex_Printer::leftJustify("GROUND_CRAFT", 20); // put a flag or a property //line += std::string(40, ' '); //line += Rinex_Printer::leftJustify("MARKER TYPE", 20); //Rinex_Printer::lengthCheck(line); //out << line << std::endl; // -------- Line OBSERVER / AGENCY line.clear(); std::string username; char c_username[20] = {0}; int nGet = getlogin_r(c_username, sizeof(c_username) - 1); if (nGet == 0) { username = c_username; } else { username = "UNKNOWN USER"; } line += leftJustify(username, 20); line += Rinex_Printer::leftJustify("CTTC", 40); // add flag and property line += Rinex_Printer::leftJustify("OBSERVER / AGENCY", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line REC / TYPE VERS line.clear(); line += Rinex_Printer::leftJustify("GNSS-SDR", 20); // add flag and property line += Rinex_Printer::leftJustify("Software Receiver", 20); // add flag and property //line += Rinex_Printer::leftJustify(google::VersionString(), 20); // add flag and property if(gnss_sdr_version.length() > 20) gnss_sdr_version.resize(9, ' '); line += Rinex_Printer::leftJustify(gnss_sdr_version, 20); line += Rinex_Printer::leftJustify("REC # / TYPE / VERS", 20); lengthCheck(line); out << line << std::endl; // -------- ANTENNA TYPE line.clear(); line += Rinex_Printer::leftJustify("Antenna number", 20); // add flag and property line += Rinex_Printer::leftJustify("Antenna type", 20); // add flag and property line += std::string(20, ' '); line += Rinex_Printer::leftJustify("ANT # / TYPE", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- APPROX POSITION (optional for moving platforms) // put here real data! double antena_x = 0.0; double antena_y = 0.0; double antena_z = 0.0; line.clear(); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_x, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_y, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_z, 4), 14); line += std::string(18, ' '); line += Rinex_Printer::leftJustify("APPROX POSITION XYZ", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- ANTENNA: DELTA H/E/N // put here real data! double antena_h = 0.0; double antena_e = 0.0; double antena_n = 0.0; line.clear(); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_h, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_e, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_n, 4), 14); line += std::string(18, ' '); line += Rinex_Printer::leftJustify("ANTENNA: DELTA H/E/N", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; if (version==2) { // --------- WAVELENGHT FACTOR // put here real data! line.clear(); line +=Rinex_Printer::rightJustify("1",6); line +=Rinex_Printer::rightJustify("1",6); line += std::string(48, ' '); line += Rinex_Printer::leftJustify("WAVELENGTH FACT L1/2", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } if (version==3) { // -------- SYS / OBS TYPES // one line per available system line.clear(); line += satelliteSystem["GPS"]; line += std::string(2, ' '); std::stringstream strm; numberTypesObservations = 4; strm << numberTypesObservations; line += Rinex_Printer::rightJustify(strm.str(), 3); // per type of observation // GPS L1 PSEUDORANGE line += std::string(1, ' '); line += observationType["PSEUDORANGE"]; line += observationCode["GPS_L1_CA"]; // GPS L1 PHASE line += std::string(1, ' '); line += observationType["CARRIER_PHASE"]; line += observationCode["GPS_L1_CA"]; // GPS DOPPLER L1 line += std::string(1, ' '); line += observationType["DOPPLER"]; line += observationCode["GPS_L1_CA"]; // GPS L1 CA SIGNAL STRENGTH line += std::string(1, ' '); line += observationType["SIGNAL_STRENGTH"]; line += observationCode["GPS_L1_CA"]; line += std::string(60-line.size(), ' '); line += Rinex_Printer::leftJustify("SYS / # / OBS TYPES", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } if (version==2) { // -------- SYS / OBS TYPES line.clear(); std::stringstream strm; strm << numberTypesObservations; line += Rinex_Printer::rightJustify(strm.str(), 6); // per type of observation // GPS L1 PSEUDORANGE line += Rinex_Printer::rightJustify(observationType["PSEUDORANGE_CA_v2"], 5); line += observationCode["GPS_L1_CA_v2"]; // GPS L1 PHASE line += Rinex_Printer::rightJustify(observationType["CARRIER_PHASE_CA_v2"], 5); line += observationCode["GPS_L1_CA_v2"]; // GPS DOPPLER L1 line += Rinex_Printer::rightJustify(observationType["DOPPLER_v2"], 5); line += observationCode["GPS_L1_CA_v2"]; // GPS L1 SIGNAL STRENGTH line += Rinex_Printer::rightJustify(observationType["SIGNAL_STRENGTH_v2"], 5); line += observationCode["GPS_L1_CA_v2"]; line += std::string(60-line.size(), ' '); line += Rinex_Printer::leftJustify("# / TYPES OF OBSERV", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } if (version==3) { // -------- Signal Strength units line.clear(); line += Rinex_Printer::leftJustify("DBHZ", 20); line += std::string(40, ' '); line += Rinex_Printer::leftJustify("SIGNAL STRENGTH UNIT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } // -------- TIME OF FIRST OBS line.clear(); boost::posix_time::ptime p_gps_time = Rinex_Printer::compute_GPS_time(eph,d_TOW_first_observation); std::string timestring = boost::posix_time::to_iso_string(p_gps_time); std::string year (timestring, 0, 4); std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); double gps_t = d_TOW_first_observation; double seconds = fmod(gps_t, 60); line += Rinex_Printer::rightJustify(year, 6); line += Rinex_Printer::rightJustify(month, 6); line += Rinex_Printer::rightJustify(day, 6); line += Rinex_Printer::rightJustify(hour, 6); line += Rinex_Printer::rightJustify(minutes, 6); line += Rinex_Printer::rightJustify(asString(seconds, 7), 13); line += Rinex_Printer::rightJustify(std::string("GPS"), 8); line += std::string(9, ' '); line += Rinex_Printer::leftJustify("TIME OF FIRST OBS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- SYS /PHASE SHIFTS // -------- end of header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::update_obs_header(std::fstream& out, const Galileo_Utc_Model& galileo_utc_model) { std::vector data; std::string line_aux; out.seekp(0); data.clear(); bool no_more_finds = false; std::string line_str; while(!out.eof()) { std::getline(out, line_str); if(!no_more_finds) { line_aux.clear(); if (line_str.find("TIME OF FIRST OBS", 59) != std::string::npos) { data.push_back(line_str); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.Delta_tLS_6), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.Delta_tLSF_6), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.WN_LSF_6), 6); line_aux += Rinex_Printer::rightJustify(boost::lexical_cast(galileo_utc_model.DN_6), 6); line_aux += std::string(36, ' '); line_aux += Rinex_Printer::leftJustify("LEAP SECONDS", 20); data.push_back(line_aux); } else if (line_str.find("END OF HEADER", 59) != std::string::npos) { data.push_back(line_str); no_more_finds = true; } else { data.push_back(line_str); } } else { data.push_back(line_str); } } out.close(); out.open(obsfilename, std::ios::out | std::ios::trunc); out.seekp(0); for (int i = 0; i < (int) data.size() - 1; i++) { out << data[i] << std::endl; } out.close(); out.open(obsfilename, std::ios::out | std::ios::in |std::ios::app); out.seekp(0, std::ios_base::end); } void Rinex_Printer::rinex_obs_header(std::fstream& out, const Galileo_Ephemeris& eph, const double d_TOW_first_observation) { std::string line; version = 3; // -------- Line 1 line = std::string(5, ' '); line += "3.02"; line += std::string(11, ' '); line += Rinex_Printer::leftJustify("OBSERVATION DATA", 20); line += satelliteSystem["Galileo"]; line += std::string(19, ' '); line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); line += Rinex_Printer::leftJustify("G = GPS R = GLONASS E = GALILEO S = GEO M = MIXED", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 3 line.clear(); line += Rinex_Printer::getLocalTime(); line += std::string("PGM / RUN BY / DATE"); line += std::string(1, ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("GALILEO OBSERVATION DATA FILE GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line MARKER NAME line.clear(); line += Rinex_Printer::leftJustify("DEFAULT MARKER NAME", 60); // put a flag or a property, line += Rinex_Printer::leftJustify("MARKER NAME", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line MARKER TYPE //line.clear(); //line += Rinex_Printer::leftJustify("NON_GEODETIC", 20); // put a flag or a property //line += std::string(40, ' '); //line += Rinex_Printer::leftJustify("MARKER TYPE", 20); //Rinex_Printer::lengthCheck(line); //out << line << std::endl; // -------- Line OBSERVER / AGENCY line.clear(); std::string username; char c_username[20] = {0}; int nGet = getlogin_r(c_username, sizeof(c_username) - 1); if (nGet == 0) { username = c_username; } else { username = "UNKNOWN USER"; } line += leftJustify(username, 20); line += Rinex_Printer::leftJustify("CTTC", 40); // add flag and property line += Rinex_Printer::leftJustify("OBSERVER / AGENCY", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line REC / TYPE VERS line.clear(); line += Rinex_Printer::leftJustify("GNSS-SDR", 20); // add flag and property line += Rinex_Printer::leftJustify("Software Receiver", 20); // add flag and property //line += Rinex_Printer::leftJustify(google::VersionString(), 20); // add flag and property if(gnss_sdr_version.length() > 20) gnss_sdr_version.resize(9, ' '); line += Rinex_Printer::leftJustify(gnss_sdr_version, 20); line += Rinex_Printer::leftJustify("REC # / TYPE / VERS", 20); lengthCheck(line); out << line << std::endl; // -------- ANTENNA TYPE line.clear(); line += Rinex_Printer::leftJustify("Antenna number", 20); // add flag and property line += Rinex_Printer::leftJustify("Antenna type", 20); // add flag and property line += std::string(20, ' '); line += Rinex_Printer::leftJustify("ANT # / TYPE", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- APPROX POSITION (optional for moving platforms) // put here real data! double antena_x = 0.0; double antena_y = 0.0; double antena_z = 0.0; line.clear(); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_x, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_y, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_z, 4), 14); line += std::string(18, ' '); line += Rinex_Printer::leftJustify("APPROX POSITION XYZ", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- ANTENNA: DELTA H/E/N // put here real data! double antena_h = 0.0; double antena_e = 0.0; double antena_n = 0.0; line.clear(); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_h, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_e, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_n, 4), 14); line += std::string(18, ' '); line += Rinex_Printer::leftJustify("ANTENNA: DELTA H/E/N", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- SYS / OBS TYPES // one line per available system line.clear(); line += satelliteSystem["Galileo"]; line += std::string(2, ' '); line += Rinex_Printer::rightJustify("4", 3); line += std::string(1, ' '); line += observationType["PSEUDORANGE"]; line += observationCode["GALILEO_E1_B"]; line += std::string(1, ' '); line += observationType["CARRIER_PHASE"]; line += observationCode["GALILEO_E1_B"]; line += std::string(1, ' '); line += observationType["DOPPLER"]; line += observationCode["GALILEO_E1_B"]; line += std::string(1, ' '); line += observationType["SIGNAL_STRENGTH"]; line += observationCode["GALILEO_E1_B"]; line += std::string(60-line.size(), ' '); line += Rinex_Printer::leftJustify("SYS / # / OBS TYPES", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Signal Strength units line.clear(); line += Rinex_Printer::leftJustify("DBHZ", 20); line += std::string(40, ' '); line += Rinex_Printer::leftJustify("SIGNAL STRENGTH UNIT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- TIME OF FIRST OBS line.clear(); boost::posix_time::ptime p_galileo_time = Rinex_Printer::compute_Galileo_time(eph, d_TOW_first_observation); std::string timestring=boost::posix_time::to_iso_string(p_galileo_time); std::string year (timestring, 0, 4); std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); double galileo_t = d_TOW_first_observation; double seconds = fmod(galileo_t, 60); line += Rinex_Printer::rightJustify(year, 6); line += Rinex_Printer::rightJustify(month, 6); line += Rinex_Printer::rightJustify(day, 6); line += Rinex_Printer::rightJustify(hour, 6); line += Rinex_Printer::rightJustify(minutes, 6); line += Rinex_Printer::rightJustify(asString(seconds, 7), 13); line += Rinex_Printer::rightJustify(std::string("GAL"), 8); line += std::string(9, ' '); line += Rinex_Printer::leftJustify("TIME OF FIRST OBS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- SYS /PHASE SHIFTS // -------- end of header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::rinex_obs_header(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, const double d_TOW_first_observation) { if(galileo_eph.e_1){} // avoid warning, not needed std::string line; version = 3; // -------- Line 1 line = std::string(5, ' '); line += "3.02"; line += std::string(11, ' '); line += Rinex_Printer::leftJustify("OBSERVATION DATA", 20); line += satelliteSystem["Mixed"]; line += std::string(19, ' '); line += std::string("RINEX VERSION / TYPE"); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 2 line.clear(); line += Rinex_Printer::leftJustify("G = GPS R = GLONASS E = GALILEO S = GEO M = MIXED", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line 3 line.clear(); line += Rinex_Printer::getLocalTime(); line += std::string("PGM / RUN BY / DATE"); line += std::string(1, ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("MIXED (GPS/GALILEO) OBSERVATION DATA FILE GENERATED BY GNSS-SDR", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); std::string gnss_sdr_version(GNSS_SDR_VERSION); line += "GNSS-SDR VERSION "; line += Rinex_Printer::leftJustify(gnss_sdr_version, 43); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line COMMENT line.clear(); line += Rinex_Printer::leftJustify("See http://gnss-sdr.org", 60); line += Rinex_Printer::leftJustify("COMMENT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line MARKER NAME line.clear(); line += Rinex_Printer::leftJustify("DEFAULT MARKER NAME", 60); // put a flag or a property, line += Rinex_Printer::leftJustify("MARKER NAME", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line MARKER TYPE //line.clear(); //line += Rinex_Printer::leftJustify("NON_GEODETIC", 20); // put a flag or a property //line += std::string(40, ' '); //line += Rinex_Printer::leftJustify("MARKER TYPE", 20); //Rinex_Printer::lengthCheck(line); //out << line << std::endl; // -------- Line OBSERVER / AGENCY line.clear(); std::string username; char c_username[20] = {0}; int nGet = getlogin_r(c_username, sizeof(c_username) - 1); if (nGet == 0) { username = c_username; } else { username = "UNKNOWN USER"; } line += leftJustify(username, 20); line += Rinex_Printer::leftJustify("CTTC", 40); // add flag and property line += Rinex_Printer::leftJustify("OBSERVER / AGENCY", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Line REC / TYPE VERS line.clear(); line += Rinex_Printer::leftJustify("GNSS-SDR", 20); // add flag and property line += Rinex_Printer::leftJustify("Software Receiver", 20); // add flag and property //line += Rinex_Printer::leftJustify(google::VersionString(), 20); // add flag and property if(gnss_sdr_version.length() > 20) gnss_sdr_version.resize(9, ' '); line += Rinex_Printer::leftJustify(gnss_sdr_version, 20); line += Rinex_Printer::leftJustify("REC # / TYPE / VERS", 20); lengthCheck(line); out << line << std::endl; // -------- ANTENNA TYPE line.clear(); line += Rinex_Printer::leftJustify("Antenna number", 20); // add flag and property line += Rinex_Printer::leftJustify("Antenna type", 20); // add flag and property line += std::string(20, ' '); line += Rinex_Printer::leftJustify("ANT # / TYPE", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- APPROX POSITION (optional for moving platforms) // put here real data! double antena_x = 0.0; double antena_y = 0.0; double antena_z = 0.0; line.clear(); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_x, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_y, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_z, 4), 14); line += std::string(18, ' '); line += Rinex_Printer::leftJustify("APPROX POSITION XYZ", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- ANTENNA: DELTA H/E/N // put here real data! double antena_h = 0.0; double antena_e = 0.0; double antena_n = 0.0; line.clear(); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_h, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_e, 4), 14); line += Rinex_Printer::rightJustify(Rinex_Printer::asString(antena_n, 4), 14); line += std::string(18, ' '); line += Rinex_Printer::leftJustify("ANTENNA: DELTA H/E/N", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- SYS / OBS TYPES // one line per available system line.clear(); line += satelliteSystem["GPS"]; line += std::string(2, ' '); std::stringstream strm; numberTypesObservations = 4; strm << numberTypesObservations; line += Rinex_Printer::rightJustify(strm.str(), 3); // per type of observation // GPS L1 PSEUDORANGE line += std::string(1, ' '); line += observationType["PSEUDORANGE"]; line += observationCode["GPS_L1_CA"]; // GPS L1 PHASE line += std::string(1, ' '); line += observationType["CARRIER_PHASE"]; line += observationCode["GPS_L1_CA"]; // GPS DOPPLER L1 line += std::string(1, ' '); line += observationType["DOPPLER"]; line += observationCode["GPS_L1_CA"]; // GPS L1 CA SIGNAL STRENGTH line += std::string(1, ' '); line += observationType["SIGNAL_STRENGTH"]; line += observationCode["GPS_L1_CA"]; line += std::string(60-line.size(), ' '); line += Rinex_Printer::leftJustify("SYS / # / OBS TYPES", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; line.clear(); line += satelliteSystem["Galileo"]; line += std::string(2, ' '); line += Rinex_Printer::rightJustify("4", 3); line += std::string(1, ' '); line += observationType["PSEUDORANGE"]; line += observationCode["GALILEO_E1_B"]; line += std::string(1, ' '); line += observationType["CARRIER_PHASE"]; line += observationCode["GALILEO_E1_B"]; line += std::string(1, ' '); line += observationType["DOPPLER"]; line += observationCode["GALILEO_E1_B"]; line += std::string(1, ' '); line += observationType["SIGNAL_STRENGTH"]; line += observationCode["GALILEO_E1_B"]; line += std::string(60-line.size(), ' '); line += Rinex_Printer::leftJustify("SYS / # / OBS TYPES", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- Signal Strength units line.clear(); line += Rinex_Printer::leftJustify("DBHZ", 20); line += std::string(40, ' '); line += Rinex_Printer::leftJustify("SIGNAL STRENGTH UNIT", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- TIME OF FIRST OBS line.clear(); boost::posix_time::ptime p_gps_time = Rinex_Printer::compute_GPS_time(gps_eph, d_TOW_first_observation); std::string timestring=boost::posix_time::to_iso_string(p_gps_time); std::string year (timestring, 0, 4); std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); double gps_t = d_TOW_first_observation; double seconds = fmod(gps_t, 60); line += Rinex_Printer::rightJustify(year, 6); line += Rinex_Printer::rightJustify(month, 6); line += Rinex_Printer::rightJustify(day, 6); line += Rinex_Printer::rightJustify(hour, 6); line += Rinex_Printer::rightJustify(minutes, 6); line += Rinex_Printer::rightJustify(asString(seconds, 7), 13); line += Rinex_Printer::rightJustify(std::string("GPS"), 8); line += std::string(9, ' '); line += Rinex_Printer::leftJustify("TIME OF FIRST OBS", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; // -------- end of header line.clear(); line += std::string(60, ' '); line += Rinex_Printer::leftJustify("END OF HEADER", 20); Rinex_Printer::lengthCheck(line); out << line << std::endl; } void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& eph, const double obs_time, const std::map& pseudoranges) { // RINEX observations timestamps are GPS timestamps. std::string line; boost::posix_time::ptime p_gps_time = Rinex_Printer::compute_GPS_time(eph, obs_time); std::string timestring = boost::posix_time::to_iso_string(p_gps_time); //double utc_t = nav_msg.utc_time(nav_msg.sv_clock_correction(obs_time)); //double gps_t = eph.sv_clock_correction(obs_time); double gps_t = obs_time; std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); if (version == 2) { line.clear(); std::string year (timestring, 2, 2); line += std::string(1, ' '); line += year; line += std::string(1, ' '); if (month.compare(0, 1 , "0") == 0) { line += std::string(1, ' '); line += month.substr(1, 1); } else { line += month; } line += std::string(1, ' '); if (day.compare(0, 1 , "0") == 0) { line += std::string(1, ' '); line += day.substr(1, 1); } else { line += day; } line += std::string(1, ' '); line += hour; line += std::string(1, ' '); line += minutes; line += std::string(1, ' '); double second_ = fmod(gps_t, 60); if (second_ < 10) { line += std::string(1, ' '); } line += Rinex_Printer::asString(second_, 7); line += std::string(2, ' '); // Epoch flag 0: OK 1: power failure between previous and current epoch <1: Special event line += std::string(1, '0'); //Number of satellites observed in current epoch int numSatellitesObserved = 0; std::map::const_iterator pseudoranges_iter; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { numSatellitesObserved++; } line += Rinex_Printer::rightJustify(boost::lexical_cast(numSatellitesObserved), 3); for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { line += satelliteSystem["GPS"]; if (static_cast(pseudoranges_iter->first) < 10) line += std::string(1, '0'); line += boost::lexical_cast(static_cast(pseudoranges_iter->first)); } // Receiver clock offset (optional) //line += rightJustify(asString(clockOffset, 12), 15); line += std::string(80 - line.size(), ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { std::string lineObs; lineObs.clear(); line.clear(); // GPS L1 PSEUDORANGE line += std::string(2, ' '); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Pseudorange_m, 3), 14); //Loss of lock indicator (LLI) int lli = 0; // Include in the observation!! if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } // Signal Strength Indicator (SSI) int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // GPS L1 CA PHASE lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // GPS L1 CA DOPPLER lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); //GPS L1 SIGNAL STRENGTH lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' '); out << lineObs << std::endl; } } if (version == 3) { std::string year (timestring, 0, 4); line += std::string(1, '>'); line += std::string(1, ' '); line += year; line += std::string(1, ' '); line += month; line += std::string(1, ' '); line += day; line += std::string(1, ' '); line += hour; line += std::string(1, ' '); line += minutes; line += std::string(1, ' '); double seconds = fmod(gps_t, 60); // Add extra 0 if seconds are < 10 if (seconds < 10) { line +=std::string(1, '0'); } line += Rinex_Printer::asString(seconds, 7); line += std::string(2, ' '); // Epoch flag 0: OK 1: power failure between previous and current epoch <1: Special event line += std::string(1, '0'); //Number of satellites observed in current epoch int numSatellitesObserved = 0; std::map::const_iterator pseudoranges_iter; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { numSatellitesObserved++; } line += Rinex_Printer::rightJustify(boost::lexical_cast(numSatellitesObserved), 3); // Receiver clock offset (optional) //line += rightJustify(asString(clockOffset, 12), 15); line += std::string(80 - line.size(), ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { std::string lineObs; lineObs.clear(); lineObs += satelliteSystem["GPS"]; if (static_cast(pseudoranges_iter->first) < 10) lineObs += std::string(1, '0'); lineObs += boost::lexical_cast(static_cast(pseudoranges_iter->first)); //lineObs += std::string(2, ' '); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Pseudorange_m, 3), 14); //Loss of lock indicator (LLI) int lli = 0; // Include in the observation!! if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } // Signal Strength Indicator (SSI) int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // GPS L1 CA PHASE lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // GPS L1 CA DOPPLER lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); //GPS L1 SIGNAL STRENGTH lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' '); out << lineObs << std::endl; } } } void Rinex_Printer::log_rinex_obs(std::fstream& out, const Galileo_Ephemeris& eph, double obs_time, const std::map& pseudoranges) { // RINEX observations timestamps are Galileo timestamps. // See http://gage14.upc.es/gLAB/HTML/Observation_Rinex_v3.01.html std::string line; boost::posix_time::ptime p_galileo_time = Rinex_Printer::compute_Galileo_time(eph, obs_time); std::string timestring = boost::posix_time::to_iso_string(p_galileo_time); //double utc_t = nav_msg.utc_time(nav_msg.sv_clock_correction(obs_time)); //double gps_t = eph.sv_clock_correction(obs_time); double galileo_t = obs_time; std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); std::string year (timestring, 0, 4); line += std::string(1, '>'); line += std::string(1, ' '); line += year; line += std::string(1, ' '); line += month; line += std::string(1, ' '); line += day; line += std::string(1, ' '); line += hour; line += std::string(1, ' '); line += minutes; line += std::string(1, ' '); double seconds = fmod(galileo_t, 60); // Add extra 0 if seconds are < 10 if (seconds < 10) { line +=std::string(1, '0'); } line += Rinex_Printer::asString(seconds, 7); line += std::string(2, ' '); // Epoch flag 0: OK 1: power failure between previous and current epoch <1: Special event line += std::string(1, '0'); //Number of satellites observed in current epoch int numSatellitesObserved = 0; std::map::const_iterator pseudoranges_iter; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { numSatellitesObserved++; } line += Rinex_Printer::rightJustify(boost::lexical_cast(numSatellitesObserved), 3); // Receiver clock offset (optional) //line += rightJustify(asString(clockOffset, 12), 15); line += std::string(80 - line.size(), ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { std::string lineObs; lineObs.clear(); lineObs += satelliteSystem["Galileo"]; if (static_cast(pseudoranges_iter->first) < 10) lineObs += std::string(1, '0'); lineObs += boost::lexical_cast(static_cast(pseudoranges_iter->first)); //lineObs += std::string(2, ' '); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Pseudorange_m, 3), 14); //Loss of lock indicator (LLI) int lli = 0; // Include in the observation!! if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } // Signal Strength Indicator (SSI) int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // Galileo E1B PHASE lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads / (2 * GALILEO_PI), 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // Galileo E1B DOPPLER lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // Galileo E1B SIGNAL STRENGTH lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' '); out << lineObs << std::endl; } } void Rinex_Printer::log_rinex_obs(std::fstream& out, const Gps_Ephemeris& gps_eph, const Galileo_Ephemeris& galileo_eph, double gps_obs_time, const std::map& pseudoranges) { if(galileo_eph.e_1){} // avoid warning, not needed std::string line; boost::posix_time::ptime p_gps_time = Rinex_Printer::compute_GPS_time(gps_eph, gps_obs_time); std::string timestring = boost::posix_time::to_iso_string(p_gps_time); //double utc_t = nav_msg.utc_time(nav_msg.sv_clock_correction(obs_time)); //double gps_t = eph.sv_clock_correction(obs_time); double gps_t = gps_obs_time; std::string month (timestring, 4, 2); std::string day (timestring, 6, 2); std::string hour (timestring, 9, 2); std::string minutes (timestring, 11, 2); std::string year (timestring, 0, 4); line += std::string(1, '>'); line += std::string(1, ' '); line += year; line += std::string(1, ' '); line += month; line += std::string(1, ' '); line += day; line += std::string(1, ' '); line += hour; line += std::string(1, ' '); line += minutes; line += std::string(1, ' '); double seconds = fmod(gps_t, 60); // Add extra 0 if seconds are < 10 if (seconds < 10) { line +=std::string(1, '0'); } line += Rinex_Printer::asString(seconds, 7); line += std::string(2, ' '); // Epoch flag 0: OK 1: power failure between previous and current epoch <1: Special event line += std::string(1, '0'); //Number of satellites observed in current epoch int numSatellitesObserved = 0; std::map::const_iterator pseudoranges_iter; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { numSatellitesObserved++; } line += Rinex_Printer::rightJustify(boost::lexical_cast(numSatellitesObserved), 3); // Receiver clock offset (optional) //line += rightJustify(asString(clockOffset, 12), 15); line += std::string(80 - line.size(), ' '); Rinex_Printer::lengthCheck(line); out << line << std::endl; std::string s; for(pseudoranges_iter = pseudoranges.begin(); pseudoranges_iter != pseudoranges.end(); pseudoranges_iter++) { std::string lineObs; lineObs.clear(); s.assign(1, pseudoranges_iter->second.System); if(s.compare("G") == 0) lineObs += satelliteSystem["GPS"]; if(s.compare("E") == 0) lineObs += satelliteSystem["Galileo"]; if (static_cast(pseudoranges_iter->first) < 10) lineObs += std::string(1, '0'); lineObs += boost::lexical_cast(static_cast(pseudoranges_iter->first)); lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Pseudorange_m, 3), 14); //Loss of lock indicator (LLI) int lli = 0; // Include in the observation!! if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } // Signal Strength Indicator (SSI) int ssi = Rinex_Printer::signalStrength(pseudoranges_iter->second.CN0_dB_hz); lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // PHASE lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_phase_rads/GPS_TWO_PI, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // DOPPLER lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.Carrier_Doppler_hz, 3), 14); if (lli == 0) { lineObs += std::string(1, ' '); } else { lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(lli), 1); } lineObs += Rinex_Printer::rightJustify(Rinex_Printer::asString(ssi), 1); // SIGNAL STRENGTH lineObs += Rinex_Printer::rightJustify(asString(pseudoranges_iter->second.CN0_dB_hz, 3), 14); if (lineObs.size() < 80) lineObs += std::string(80 - lineObs.size(), ' '); out << lineObs << std::endl; } } // represents GPS time (week, TOW) in the date time format of the Gregorian calendar. // -> Leap years are considered, but leap seconds not. void Rinex_Printer::to_date_time(int gps_week, int gps_tow, int &year, int &month, int &day, int &hour, int &minute, int &second) { int days_per_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // seconds in a not leap year const int secs_per_day = 24*60*60; const int secs_per_week = 7*secs_per_day; const int secs_per_normal_year = 365*secs_per_day; const int secs_per_leap_year = secs_per_normal_year + secs_per_day; // the GPS epoch is 06.01.1980 00:00, i.e. midnight 5. / 6. January 1980 // -> seconds since then int secs_since_gps_epoch = gps_week*secs_per_week + gps_tow; // find year, consider leap years bool is_leap_year; int remaining_secs = secs_since_gps_epoch + 5*secs_per_day; for (int y = 1980; true ; y++) { is_leap_year = y%4 == 0 && (y%100 != 0 || y%400 == 0); int secs_in_year_y = is_leap_year ? secs_per_leap_year : secs_per_normal_year; if (secs_in_year_y <= remaining_secs) { remaining_secs -= secs_in_year_y; } else { year = y; //std::cout << "year: year=" << year << " secs_in_year_y="<< secs_in_year_y << " remaining_secs="<< remaining_secs << std::endl; break; } //std::cout << "year: y=" << y << " secs_in_year_y="<< secs_in_year_y << " remaining_secs="<< remaining_secs << std::endl; } // find month for (int m = 1; true ; m++) { int secs_in_month_m = days_per_month[m-1]*secs_per_day; if (is_leap_year && m == 2 ) // consider February of leap year { secs_in_month_m += secs_per_day; } if (secs_in_month_m <= remaining_secs) { remaining_secs -= secs_in_month_m; } else { month = m; //std::cout << "month: month=" << month << " secs_in_month_m="<< secs_in_month_m << " remaining_secs="<< remaining_secs << std::endl; break; } //std::cout << "month: m=" << m << " secs_in_month_m="<< secs_in_month_m << " remaining_secs="<< remaining_secs << std::endl; } day = remaining_secs/secs_per_day+1; remaining_secs = remaining_secs%secs_per_day; hour = remaining_secs/(60*60); remaining_secs = remaining_secs%(60*60); minute = remaining_secs/60; second = remaining_secs%60; } void Rinex_Printer::log_rinex_sbs(std::fstream& out, const Sbas_Raw_Msg& sbs_message) { // line 1: PRN / EPOCH / RCVR std::stringstream line1; // SBAS PRN line1 << sbs_message.get_prn(); line1 << " "; // gps time of reception int gps_week; double gps_sec; if(sbs_message.get_rx_time_obj().get_gps_time(gps_week, gps_sec)) { int year; int month; int day; int hour; int minute; int second; double gps_sec_one_digit_precicion = round(gps_sec *10)/10; // to prevent rounding towards 60.0sec in the stream output int gps_tow = trunc(gps_sec_one_digit_precicion); double sub_sec = gps_sec_one_digit_precicion - double(gps_tow); to_date_time(gps_week, gps_tow, year, month, day, hour, minute, second); line1 << asFixWidthString(year, 2, '0') << " " << asFixWidthString(month, 2, '0') << " " << asFixWidthString(day, 2, '0') << " " << asFixWidthString(hour, 2, '0') << " " << asFixWidthString(minute, 2, '0') << " " << rightJustify(asString(double(second)+sub_sec,1),4,' '); } else { line1 << std::string(19, ' '); } line1 << " "; // band line1 << "L1"; line1 << " "; // Length of data message (bytes) line1 << asFixWidthString(sbs_message.get_msg().size(), 3, ' '); line1 << " "; // File-internal receiver index line1 << " 0"; line1 << " "; // Transmission System Identifier line1 << "SBA"; line1 << std::string(35, ' '); lengthCheck(line1.str()); out << line1.str() << std::endl; // DATA RECORD - 1 std::stringstream line2; line2 << " "; // Message frame identifier if (sbs_message.get_msg_type() < 10) line2 << " "; line2 << sbs_message.get_msg_type(); line2 << std::string(4, ' '); // First 18 bytes of message (hex) std::vector msg = sbs_message.get_msg(); for (size_t i = 0; i < 18 && i < msg.size(); ++i) { line2 << std::hex << std::setfill('0') << std::setw(2); line2 << int(msg[i]) << " "; } line2 << std::string(19, ' '); lengthCheck(line2.str()); out << line2.str() << std::endl; // DATA RECORD - 2 std::stringstream line3; line3 << std::string(7, ' '); // Remaining bytes of message (hex) for (size_t i = 18; i < 36 && i < msg.size(); ++i) { line3 << std::hex << std::setfill('0') << std::setw(2); line3 << int(msg[i]) << " "; } line3 << std::string(31, ' '); lengthCheck(line3.str()); out << line3.str() << std::endl; } int Rinex_Printer::signalStrength(const double snr) { int ss; ss = int ( std::min( std::max( int (floor(snr/6)) , 1), 9) ); return ss; } boost::posix_time::ptime Rinex_Printer::compute_UTC_time(const Gps_Navigation_Message& nav_msg) { // if we are processing a file -> wait to leap second to resolve the ambiguity else take the week from the local system time //: idea resolve the ambiguity with the leap second http://www.colorado.edu/geography/gcraft/notes/gps/gpseow.htm const double utc_t = nav_msg.utc_time(nav_msg.d_TOW); boost::posix_time::time_duration t = boost::posix_time::millisec((utc_t + 604800 * static_cast(nav_msg.i_GPS_week)) * 1000); boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); return p_time; } boost::posix_time::ptime Rinex_Printer::compute_GPS_time(const Gps_Ephemeris& eph, const double obs_time) { // The RINEX v2.11 v3.00 format uses GPS time for the observations epoch, not UTC time, thus, no leap seconds needed here. // (see Section 3 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex211.txt) // (see Pag. 17 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex300.pdf) // --??? No time correction here, since it will be done in the RINEX processor const double gps_t = obs_time; boost::posix_time::time_duration t = boost::posix_time::millisec((gps_t + 604800 * static_cast(eph.i_GPS_week % 1024)) * 1000); boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); return p_time; } boost::posix_time::ptime Rinex_Printer::compute_Galileo_time(const Galileo_Ephemeris& eph, const double obs_time) { // The RINEX v2.11 v3.00 format uses Galileo time for the observations epoch, not UTC time, thus, no leap seconds needed here. // (see Pag. 17 in http://igscb.jpl.nasa.gov/igscb/data/format/rinex301.pdf) // --??? No time correction here, since it will be done in the RINEX processor double galileo_t = obs_time; boost::posix_time::time_duration t = boost::posix_time::millisec((galileo_t + 604800 * static_cast(eph.WN_5)) * 1000); // boost::posix_time::ptime p_time(boost::gregorian::date(1999, 8, 22), t); return p_time; } /* enum RINEX_enumMarkerType { GEODETIC, //!< GEODETIC Earth-fixed, high-precision monumentation NON_GEODETIC, //!< NON_GEODETIC Earth-fixed, low-precision monumentation SPACEBORNE, //!< SPACEBORNE Orbiting space vehicle AIRBORNE , //!< AIRBORNE Aircraft, balloon, etc. WATER_CRAFT, //!< WATER_CRAFT Mobile water craft GROUND_CRAFT, //!< GROUND_CRAFT Mobile terrestrial vehicle FIXED_BUOY, //!< FIXED_BUOY "Fixed" on water surface FLOATING_BUOY, //!< FLOATING_BUOY Floating on water surface FLOATING_ICE, //!< FLOATING_ICE Floating ice sheet, etc. GLACIER, //!< GLACIER "Fixed" on a glacier BALLISTIC, //!< BALLISTIC Rockets, shells, etc ANIMAL, //!< ANIMAL Animal carrying a receiver HUMAN //!< HUMAN Human being }; */ gnss-sdr-0.0.6/src/algorithms/PVT/libs/rinex_printer.h0000644000175000017500000005526612576764164022224 0ustar carlescarles/*! * \file rinex_printer.h * \brief Interface of a RINEX 2.11 / 3.01 printer * See http://igscb.jpl.nasa.gov/igscb/data/format/rinex301.pdf * * Receiver Independent EXchange Format (RINEX): * The first proposal for the Receiver Independent Exchange Format RINEX * was developed by the Astronomical Institute of the University of Berne * for the easy exchange of the GPS data to be collected during the large * European GPS campaign EUREF 89, which involved more than 60 GPS receivers * of 4 different manufacturers. * The governing aspect during the development was the fact that most geodetic * processing software for GPS data use a well-defined set of observables: * 1) The carrier-phase measurement at one or both carriers (actually being a * measurement on the beat frequency between the received carrier of the * satellite signal and a receiver-generated reference frequency). * 2) The pseudorange (code) measurement , equivalent to the difference * of the time of reception (expressed in the time frame of the receiver) * and the time of transmission (expressed in the time frame of the satellite) * of a distinct satellite signal. * 3) The observation time being the reading of the receiver clock at the * instant of validity of the carrier-phase and/or the code measurements. * Note: A collection of the formats currently used by the IGS can be found * here: http://igscb.jpl.nasa.gov/components/formats.html * \author Carles Fernandez Prades, 2011. cfernandez(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_RINEX_PRINTER_H_ #define GNSS_SDR_RINEX_PRINTER_H_ #include #include #include #include // for stringstream #include // for setprecision #include #include #include "gps_navigation_message.h" #include "gps_utc_model.h" #include "gps_iono.h" #include "galileo_navigation_message.h" #include "sbas_telemetry_data.h" #include "GPS_L1_CA.h" #include "Galileo_E1.h" #include "gnss_synchro.h" class Sbas_Raw_Msg; /*! * \brief Class that handles the generation of Receiver * INdependent EXchange format (RINEX) files */ class Rinex_Printer { public: /*! * \brief Default constructor. Creates GPS Navigation and Observables RINEX files and their headers */ Rinex_Printer(); /*! * \brief Default destructor. Closes GPS Navigation and Observables RINEX files */ ~Rinex_Printer(); std::fstream obsFile ; // & eph_map); /*! * \brief Writes data from the Galileo navigation message into the RINEX file */ void log_rinex_nav(std::fstream & out, const std::map & eph_map); /*! * \brief Writes data from the Mixed (GPS/Galileo) navigation message into the RINEX file */ void log_rinex_nav(std::fstream & out, const std::map & gps_eph_map, const std::map & galileo_eph_map); /*! * \brief Writes GPS observables into the RINEX file */ void log_rinex_obs(std::fstream & out, const Gps_Ephemeris & eph, double obs_time, const std::map & pseudoranges); /*! * \brief Writes Galileo observables into the RINEX file */ void log_rinex_obs(std::fstream & out, const Galileo_Ephemeris & eph, double obs_time, const std::map & pseudoranges); /*! * \brief Writes Galileo observables into the RINEX file */ void log_rinex_obs(std::fstream & out, const Gps_Ephemeris & gps_eph, const Galileo_Ephemeris & galileo_eph, const double gps_obs_time, const std::map & pseudoranges); /*! * \brief Represents GPS time in the date time format. Leap years are considered, but leap seconds are not. */ void to_date_time(int gps_week, int gps_tow, int & year, int & month, int & day, int & hour, int & minute, int & second); /*! * \brief Writes raw SBAS messages into the RINEX file */ void log_rinex_sbs(std::fstream & out, const Sbas_Raw_Msg & sbs_message); void update_nav_header(std::fstream & out, const Gps_Utc_Model & gps_utc, const Gps_Iono & gps_iono); void update_nav_header(std::fstream & out, const Gps_Iono & gps_iono, const Gps_Utc_Model & gps_utc_model, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & galileo_utc_model, const Galileo_Almanac& galileo_almanac); void update_nav_header(std::fstream & out, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & utc_model, const Galileo_Almanac & galileo_almanac); void update_obs_header(std::fstream & out, const Gps_Utc_Model & utc_model); void update_obs_header(std::fstream & out, const Galileo_Utc_Model & galileo_utc_model); std::map satelliteSystem; // observationType; // observationCode; // 0.87654E-0004 or -0.1234E00005. */ inline std::string & sci2for(std::string & aStr, const std::string::size_type startPos = 0, const std::string::size_type length = std::string::npos, const std::string::size_type expLen = 3, const bool checkSwitch = true); /* * Convert double precision floating point to a string * containing the number in FORTRAN notation. * As an example, the number 156360 becomes ".15636D6". * @param d number to convert. * @param length length (in characters) of number, including exponent. * @param expLen length (in characters of exponent, including sign. * @param checkSwitch if true, keeps the exponential sanity check for * exponentials above three characters in length. If false, it removes * that check. * @return a string containing \a d in FORTRAN notation. */ inline std::string doub2for(const double & d, const std::string::size_type length, const std::string::size_type expLen, const bool checkSwitch = true); /* * Convert a string to a double precision floating point number. * @param s string containing a number. * @return double representation of string. */ inline double asDouble(const std::string & s) { return strtod(s.c_str(), 0); } inline int toInt(std::string bitString, int sLength); /* * Convert a string to an integer. * @param s string containing a number. * @return long integer representation of string. */ inline long asInt(const std::string & s) { return strtol(s.c_str(), 0, 10); } /* * Convert a double to a string in fixed notation. * @param x double. * @param precision the number of decimal places you want displayed. * @return string representation of \a x. */ inline std::string asString(const double x, const std::string::size_type precision = 17); /* * Convert a long double to a string in fixed notation. * @param x long double. * @param precision the number of decimal places you want displayed. * @return string representation of \a x. */ inline std::string asString(const long double x, const std::string::size_type precision = 21); /* * Convert any old object to a string. * The class must have stream operators defined. * @param x object to turn into a string. * @return string representation of \a x. */ template inline std::string asString(const X x); inline std::string asFixWidthString(const int x, const int width, char fill_digit); }; // Implementation of inline functions (modified versions from GPSTk http://www.gpstk.org) inline std::string & Rinex_Printer::leftJustify(std::string & s, const std::string::size_type length, const char pad) { if(length < s.length()) { s = s.substr(0, length); } else { s.append(length-s.length(), pad); } return s; } // if the string is bigger than length, truncate it from the left. // otherwise, add pad characters to its left. inline std::string & Rinex_Printer::rightJustify(std::string & s, const std::string::size_type length, const char pad) { if(length < s.length()) { s = s.substr(s.length()-length, std::string::npos); } else { s.insert((std::string::size_type)0, length-s.length(), pad); } return s; } inline std::string Rinex_Printer::doub2for(const double & d, const std::string::size_type length, const std::string::size_type expLen, const bool checkSwitch) { short exponentLength = expLen; /* Validate the assumptions regarding the input arguments */ if (exponentLength < 0) exponentLength = 1; if (exponentLength > 3 && checkSwitch) exponentLength = 3; std::string toReturn = doub2sci(d, length, exponentLength, true, checkSwitch); sci2for(toReturn, 0, length, exponentLength, checkSwitch); return toReturn; } inline std::string Rinex_Printer::doub2sci(const double & d, const std::string::size_type length, const std::string::size_type expLen, const bool showSign, const bool checkSwitch) { std::string toReturn; short exponentLength = expLen; /* Validate the assumptions regarding the input arguments */ if (exponentLength < 0) exponentLength = 1; if (exponentLength > 3 && checkSwitch) exponentLength = 3; std::stringstream c; c.setf(std::ios::scientific, std::ios::floatfield); // length - 3 for special characters ('.', 'e', '+' or '-') // - exponentlength (e04) // - 1 for the digit before the decimal (2.) // and if showSign == true, // an extra -1 for '-' or ' ' if it's positive or negative int expSize = 0; if (showSign) expSize = 1; c.precision(length - 3 - exponentLength - 1 - expSize); c << d; c >> toReturn; return toReturn; } inline std::string & Rinex_Printer::sci2for(std::string & aStr, const std::string::size_type startPos, const std::string::size_type length, const std::string::size_type expLen, const bool checkSwitch) { std::string::size_type idx = aStr.find('.', startPos); int expAdd = 0; std::string exp; long iexp; //If checkSwitch is false, always redo the exponential. Otherwise, //set it to false. bool redoexp =! checkSwitch; // Check for decimal place within specified boundaries if ((idx == 0) || (idx >= (startPos + length - expLen - 1))) { // Error: no decimal point in string } // Here, account for the possibility that there are // no numbers to the left of the decimal, but do not // account for the possibility of non-scientific // notation (more than one digit to the left of the // decimal) if ((idx > startPos) && (idx >= 1)) { redoexp = true; // Swap digit and decimal. aStr[static_cast(idx)] = aStr[static_cast(idx - 1)]; aStr[static_cast(idx - 1)] = '.'; // Only add one to the exponent if the number is non-zero if (asDouble(aStr.substr(startPos, length)) != 0.0) expAdd = 1; } idx = aStr.find('e', startPos); if (idx == std::string::npos) { idx = aStr.find('E', startPos); if (idx == std::string::npos) { // Error: no 'e' or 'E' in string"; } } // Change the exponent character to D normally, or E of checkSwitch is false. if (checkSwitch) aStr[idx] = 'D'; else aStr[idx] = 'E'; // Change the exponent itself if (redoexp) { exp = aStr.substr(idx + 1, std::string::npos); iexp = asInt(exp); iexp += expAdd; aStr.erase(idx + 1); if (iexp < 0) { aStr += "-"; iexp -= iexp*2; } else aStr += "+"; aStr += Rinex_Printer::rightJustify(asString(iexp),expLen,'0'); } // if the number is positive, append a space // (if it's negative, there's a leading '-' if (aStr[0] == '.') { aStr.insert((std::string::size_type)0, 1, ' '); } //If checkSwitch is false, add on one leading zero to the string if (!checkSwitch) { aStr.insert((std::string::size_type)1, 1, '0'); } return aStr; } // end sci2for inline std::string asString(const long double x, const std::string::size_type precision) { std::ostringstream ss; ss << std::fixed << std::setprecision(precision) << x ; return ss.str(); } inline std::string Rinex_Printer::asString(const double x, const std::string::size_type precision) { std::ostringstream ss; ss << std::fixed << std::setprecision(precision) << x; return ss.str(); } inline std::string Rinex_Printer::asFixWidthString(const int x, const int width, char fill_digit) { std::ostringstream ss; ss << std::setfill(fill_digit) << std::setw(width) << x; return ss.str().substr(ss.str().size() - width); } inline long asInt(const std::string & s) { return strtol(s.c_str(), 0, 10); } inline int Rinex_Printer::toInt(std::string bitString, int sLength) { int tempInt; int num = 0; for(int i = 0; i < sLength; i++) { tempInt = bitString[i]-'0'; num |= (1 << (sLength - 1 - i)) * tempInt; } return num; } template inline std::string Rinex_Printer::asString(const X x) { std::ostringstream ss; ss << x; return ss.str(); } #endif gnss-sdr-0.0.6/src/algorithms/PVT/libs/kml_printer.cc0000644000175000017500000001452512576764164022011 0ustar carlescarles/*! * \file kml_printer.cc * \brief Implementation of a class that prints PVT information to a kml file * \author Javier Arribas, 2011. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "kml_printer.h" #include #include using google::LogMessage; bool Kml_Printer::set_headers(std::string filename) { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); kml_file.open(filename.c_str()); if (kml_file.is_open()) { DLOG(INFO) << "KML printer writing on " << filename.c_str(); // Set iostream numeric format and precision kml_file.setf(kml_file.fixed, kml_file.floatfield); kml_file << std::setprecision(14); kml_file << "" << std::endl << "" << std::endl << " " << std::endl << " GNSS Track" << std::endl << " GNSS-SDR Receiver position log file created at " << asctime (timeinfo) << " " << std::endl << "" << std::endl << "" << std::endl << "GNSS-SDR PVT" << std::endl << "GNSS-SDR position log" << std::endl << "#yellowLineGreenPoly" << std::endl << "" << std::endl << "0" << std::endl << "1" << std::endl << "absolute" << std::endl << "" << std::endl; return true; } else { return false; } } bool Kml_Printer::print_position(const std::shared_ptr& position, bool print_average_values) { double latitude; double longitude; double height; std::shared_ptr position_ = position; if (print_average_values == false) { latitude = position_->d_latitude_d; longitude = position_->d_longitude_d; height = position_->d_height_m; } else { latitude = position_->d_avg_latitude_d; longitude = position_->d_avg_longitude_d; height = position_->d_avg_height_m; } if (kml_file.is_open()) { kml_file << longitude << "," << latitude << "," << height << std::endl; return true; } else { return false; } } //ToDo: make the class ls_pvt generic and heritate the particular gps/gal/glo ls_pvt in order to // reuse kml_printer functions bool Kml_Printer::print_position_galileo(const std::shared_ptr& position, bool print_average_values) { double latitude; double longitude; double height; std::shared_ptr position_ = position; if (print_average_values == false) { latitude = position_->d_latitude_d; longitude = position_->d_longitude_d; height = position_->d_height_m; } else { latitude = position_->d_avg_latitude_d; longitude = position_->d_avg_longitude_d; height = position_->d_avg_height_m; } if (kml_file.is_open()) { kml_file << longitude << "," << latitude << "," << height << std::endl; return true; } else { return false; } } bool Kml_Printer::print_position_hybrid(const std::shared_ptr& position, bool print_average_values) { double latitude; double longitude; double height; if (print_average_values == false) { latitude = position->d_latitude_d; longitude = position->d_longitude_d; height = position->d_height_m; } else { latitude = position->d_avg_latitude_d; longitude = position->d_avg_longitude_d; height = position->d_avg_height_m; } if (kml_file.is_open()) { kml_file << longitude << "," << latitude << "," << height << std::endl; return true; } else { return false; } } bool Kml_Printer::close_file() { if (kml_file.is_open()) { kml_file << "" << std::endl << "" << std::endl << "" << std::endl << "" << std::endl << ""; kml_file.close(); return true; } else { return false; } } Kml_Printer::Kml_Printer () {} Kml_Printer::~Kml_Printer () { close_file(); } gnss-sdr-0.0.6/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.h0000644000175000017500000001277612576764164022552 0ustar carlescarles/*! * \file gps_l1_ca_ls_pvt.h * \brief Interface of a Least Squares Position, Velocity, and Time (PVT) * solver, based on K.Borre's Matlab receiver. * \author Javier Arribas, 2011. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_LS_PVT_H_ #define GNSS_SDR_GPS_L1_CA_LS_PVT_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include "gnss_synchro.h" #include "GPS_L1_CA.h" #include "gps_ephemeris.h" #include "gps_navigation_message.h" #include "gps_utc_model.h" #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" #include "sbas_satellite_correction.h" #include "sbas_ephemeris.h" #define PVT_MAX_CHANNELS 24 /*! * \brief This class implements a simple PVT Least Squares solution */ class gps_l1_ca_ls_pvt { private: arma::vec leastSquarePos(const arma::mat & satpos, const arma::vec & obs, const arma::mat & w); arma::vec rotateSatellite(double traveltime, const arma::vec & X_sat); void topocent(double *Az, double *El, double *D, const arma::vec & x, const arma::vec & dx); void togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z); void tropo(double *ddr_m, double sinel, double hsta_km, double p_mb, double t_kel, double hum, double hp_km, double htkel_km, double hhum_km); public: int d_nchannels; //!< Number of available channels for positioning int d_valid_observations; //!< Number of valid pseudorange observations (valid satellites) int d_visible_satellites_IDs[PVT_MAX_CHANNELS]; //!< Array with the IDs of the valid satellites double d_visible_satellites_El[PVT_MAX_CHANNELS]; //!< Array with the LOS Elevation of the valid satellites double d_visible_satellites_Az[PVT_MAX_CHANNELS]; //!< Array with the LOS Azimuth of the valid satellites double d_visible_satellites_Distance[PVT_MAX_CHANNELS]; //!< Array with the LOS Distance of the valid satellites double d_visible_satellites_CN0_dB[PVT_MAX_CHANNELS]; //!< Array with the IDs of the valid satellites Gps_Navigation_Message* d_ephemeris; // new ephemeris storage std::map gps_ephemeris_map; //!< Map storing new Gps_Ephemeris Gps_Utc_Model gps_utc_model; Gps_Iono gps_iono; Sbas_Ionosphere_Correction sbas_iono; std::map sbas_sat_corr_map; std::map sbas_ephemeris_map; double d_GPS_current_time; boost::posix_time::ptime d_position_UTC_time; bool b_valid_position; double d_latitude_d; //!< Latitude in degrees double d_longitude_d; //!< Longitude in degrees double d_height_m; //!< Height [m] //averaging std::deque d_hist_latitude_d; std::deque d_hist_longitude_d; std::deque d_hist_height_m; int d_averaging_depth; //!< Length of averaging window double d_avg_latitude_d; //!< Averaged latitude in degrees double d_avg_longitude_d; //!< Averaged longitude in degrees double d_avg_height_m; //!< Averaged height [m] double d_x_m; double d_y_m; double d_z_m; // DOP estimations arma::mat d_Q; double d_GDOP; double d_PDOP; double d_HDOP; double d_VDOP; double d_TDOP; bool d_flag_dump_enabled; bool d_flag_averaging; std::string d_dump_filename; std::ofstream d_dump_file; void set_averaging_depth(int depth); gps_l1_ca_ls_pvt(int nchannels,std::string dump_filename, bool flag_dump_to_file); ~gps_l1_ca_ls_pvt(); bool get_PVT(std::map gnss_pseudoranges_map, double GPS_current_time, bool flag_averaging); /*! * \brief Conversion of Cartesian coordinates (X,Y,Z) to geographical * coordinates (d_latitude_d, d_longitude_d, d_height_m) on a selected reference ellipsoid. * * \param[in] X [m] Cartesian coordinate * \param[in] Y [m] Cartesian coordinate * \param[in] Z [m] Cartesian coordinate * \param[in] elipsoid_selection. Choices of Reference Ellipsoid for Geographical Coordinates: * 0 - International Ellipsoid 1924. * 1 - International Ellipsoid 1967. * 2 - World Geodetic System 1972. * 3 - Geodetic Reference System 1980. * 4 - World Geodetic System 1984. * */ void cart2geo(double X, double Y, double Z, int elipsoid_selection); }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/libs/galileo_e1_ls_pvt.h0000644000175000017500000001243012576764164022706 0ustar carlescarles/*! * \file galileo_e1_ls_pvt.h * \brief Interface of a Least Squares Position, Velocity, and Time (PVT) * solver, based on K.Borre's Matlab receiver. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_LS_PVT_H_ #define GNSS_SDR_GALILEO_E1_LS_PVT_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include "GPS_L1_CA.h" #include "galileo_navigation_message.h" #include "gnss_synchro.h" #include "galileo_ephemeris.h" #include "galileo_utc_model.h" #define PVT_MAX_CHANNELS 24 /*! * \brief This class implements a simple PVT Least Squares solution */ class galileo_e1_ls_pvt { private: arma::vec leastSquarePos(const arma::mat & satpos, const arma::vec & obs, const arma::mat & w); arma::vec rotateSatellite(double traveltime, const arma::vec & X_sat); void topocent(double *Az, double *El, double *D, const arma::vec & x, const arma::vec & dx); void togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z); void tropo(double *ddr_m, double sinel, double hsta_km, double p_mb, double t_kel, double hum, double hp_km, double htkel_km, double hhum_km); public: int d_nchannels; //!< Number of available channels for positioning int d_valid_observations; //!< Number of valid pseudorange observations (valid satellites) int d_visible_satellites_IDs[PVT_MAX_CHANNELS]; //!< Array with the IDs of the valid satellites double d_visible_satellites_El[PVT_MAX_CHANNELS]; //!< Array with the LOS Elevation of the valid satellites double d_visible_satellites_Az[PVT_MAX_CHANNELS]; //!< Array with the LOS Azimuth of the valid satellites double d_visible_satellites_Distance[PVT_MAX_CHANNELS]; //!< Array with the LOS Distance of the valid satellites double d_visible_satellites_CN0_dB[PVT_MAX_CHANNELS]; //!< Array with the IDs of the valid satellites Galileo_Navigation_Message* d_ephemeris; std::map galileo_ephemeris_map; //!< Map storing new Galileo_Ephemeris Galileo_Utc_Model galileo_utc_model; Galileo_Iono galileo_iono; Galileo_Almanac galileo_almanac; double d_galileo_current_time; boost::posix_time::ptime d_position_UTC_time; bool b_valid_position; double d_latitude_d; //!< Latitude in degrees double d_longitude_d; //!< Longitude in degrees double d_height_m; //!< Height [m] //averaging std::deque d_hist_latitude_d; std::deque d_hist_longitude_d; std::deque d_hist_height_m; int d_averaging_depth; //!< Length of averaging window double d_avg_latitude_d; //!< Averaged latitude in degrees double d_avg_longitude_d; //!< Averaged longitude in degrees double d_avg_height_m; //!< Averaged height [m] double d_x_m; double d_y_m; double d_z_m; // DOP estimations arma::mat d_Q; double d_GDOP; double d_PDOP; double d_HDOP; double d_VDOP; double d_TDOP; bool d_flag_dump_enabled; bool d_flag_averaging; std::string d_dump_filename; std::ofstream d_dump_file; void set_averaging_depth(int depth); galileo_e1_ls_pvt(int nchannels,std::string dump_filename, bool flag_dump_to_file); ~galileo_e1_ls_pvt(); bool get_PVT(std::map gnss_pseudoranges_map, double galileo_current_time, bool flag_averaging); /*! * \brief Conversion of Cartesian coordinates (X,Y,Z) to geographical * coordinates (d_latitude_d, d_longitude_d, d_height_m) on a selected reference ellipsoid. * * \param[in] X [m] Cartesian coordinate * \param[in] Y [m] Cartesian coordinate * \param[in] Z [m] Cartesian coordinate * \param[in] elipsoid_selection. Choices of Reference Ellipsoid for Geographical Coordinates: * 0 - International Ellipsoid 1924. * 1 - International Ellipsoid 1967. * 2 - World Geodetic System 1972. * 3 - Geodetic Reference System 1980. * 4 - World Geodetic System 1984. * */ void cart2geo(double X, double Y, double Z, int elipsoid_selection); }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/libs/hybrid_ls_pvt.h0000644000175000017500000001364212576764164022174 0ustar carlescarles/*! * \file galileo_e1_ls_pvt.h * \brief Interface of a Least Squares Position, Velocity, and Time (PVT) * solver, based on K.Borre's Matlab receiver. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_HYBRID_LS_PVT_H_ #define GNSS_SDR_HYBRID_LS_PVT_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "GPS_L1_CA.h" #include "galileo_navigation_message.h" #include "gps_navigation_message.h" #include "gnss_synchro.h" #include "galileo_ephemeris.h" #include "galileo_utc_model.h" #include "gps_ephemeris.h" #include "gps_utc_model.h" #define PVT_MAX_CHANNELS 24 /*! * \brief This class implements a simple PVT Least Squares solution */ class hybrid_ls_pvt { private: arma::vec leastSquarePos(const arma::mat & satpos, const arma::vec & obs, const arma::mat & w); arma::vec rotateSatellite(double traveltime, const arma::vec & X_sat); void topocent(double *Az, double *El, double *D, const arma::vec & x, const arma::vec & dx); void togeod(double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z); void tropo(double *ddr_m, double sinel, double hsta_km, double p_mb, double t_kel, double hum, double hp_km, double htkel_km, double hhum_km); public: int d_nchannels; //!< Number of available channels for positioning int d_valid_observations; //!< Number of valid pseudorange observations (valid satellites) int d_valid_GPS_obs; //!< Number of valid GPS pseudorange observations (valid GPS satellites) -- used for hybrid configuration int d_valid_GAL_obs; //!< Number of valid GALILEO pseudorange observations (valid GALILEO satellites) -- used for hybrid configuration int d_visible_satellites_IDs[PVT_MAX_CHANNELS]; //!< Array with the IDs of the valid satellites double d_visible_satellites_El[PVT_MAX_CHANNELS]; //!< Array with the LOS Elevation of the valid satellites double d_visible_satellites_Az[PVT_MAX_CHANNELS]; //!< Array with the LOS Azimuth of the valid satellites double d_visible_satellites_Distance[PVT_MAX_CHANNELS]; //!< Array with the LOS Distance of the valid satellites double d_visible_satellites_CN0_dB[PVT_MAX_CHANNELS]; //!< Array with the IDs of the valid satellites Galileo_Navigation_Message* d_Gal_ephemeris; Gps_Navigation_Message* d_GPS_ephemeris; std::map galileo_ephemeris_map; //!< Map storing new Galileo_Ephemeris std::map gps_ephemeris_map; //!< Map storing new Galileo_Ephemeris Galileo_Utc_Model galileo_utc_model; Galileo_Iono galileo_iono; Galileo_Almanac galileo_almanac; Gps_Utc_Model gps_utc_model; Gps_Iono gps_iono; double d_galileo_current_time; boost::posix_time::ptime d_position_UTC_time; bool b_valid_position; int count_valid_position; double d_latitude_d; //!< Latitude in degrees double d_longitude_d; //!< Longitude in degrees double d_height_m; //!< Height [m] //averaging std::deque d_hist_latitude_d; std::deque d_hist_longitude_d; std::deque d_hist_height_m; int d_averaging_depth; //!< Length of averaging window double d_avg_latitude_d; //!< Averaged latitude in degrees double d_avg_longitude_d; //!< Averaged longitude in degrees double d_avg_height_m; //!< Averaged height [m] double d_x_m; double d_y_m; double d_z_m; // DOP estimations arma::mat d_Q; double d_GDOP; double d_PDOP; double d_HDOP; double d_VDOP; double d_TDOP; bool d_flag_dump_enabled; bool d_flag_averaging; std::string d_dump_filename; std::ofstream d_dump_file; void set_averaging_depth(int depth); hybrid_ls_pvt(int nchannels,std::string dump_filename, bool flag_dump_to_file); ~hybrid_ls_pvt(); bool get_PVT(std::map gnss_pseudoranges_map, double hybrid_current_time, bool flag_averaging); /*! * \brief Conversion of Cartesian coordinates (X,Y,Z) to geographical * coordinates (d_latitude_d, d_longitude_d, d_height_m) on a selected reference ellipsoid. * * \param[in] X [m] Cartesian coordinate * \param[in] Y [m] Cartesian coordinate * \param[in] Z [m] Cartesian coordinate * \param[in] elipsoid_selection. Choices of Reference Ellipsoid for Geographical Coordinates: * 0 - International Ellipsoid 1924. * 1 - International Ellipsoid 1967. * 2 - World Geodetic System 1972. * 3 - Geodetic Reference System 1980. * 4 - World Geodetic System 1984. * */ void cart2geo(double X, double Y, double Z, int elipsoid_selection); }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/adapters/0000755000175000017500000000000012576764164020017 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/PVT/adapters/CMakeLists.txt0000644000175000017500000000274212576764164022564 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(PVT_ADAPTER_SOURCES gps_l1_ca_pvt.cc galileo_e1_pvt.cc hybrid_pvt.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs ${ARMADILLO_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ) file(GLOB PVT_ADAPTER_HEADERS "*.h") add_library(pvt_adapters ${PVT_ADAPTER_SOURCES} ${PVT_ADAPTER_HEADERS}) source_group(Headers FILES ${PVT_ADAPTER_HEADERS}) target_link_libraries(pvt_adapters pvt_gr_blocks ${ARMADILLO_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES}) gnss-sdr-0.0.6/src/algorithms/PVT/adapters/galileo_e1_pvt.cc0000644000175000017500000000733412576764164023227 0ustar carlescarles/*! * \file galileo_e1_pvt.cc * \brief Implementation of an adapter of a GALILEO E1 PVT solver block to a * PvtInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_e1_pvt.h" #include #include "configuration_interface.h" #include "galileo_e1_pvt_cc.h" using google::LogMessage; GalileoE1Pvt::GalileoE1Pvt(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { // dump parameters std::string default_dump_filename = "./pvt.dat"; std::string default_nmea_dump_filename = "./nmea_pvt.nmea"; std::string default_nmea_dump_devname = "/dev/tty1"; DLOG(INFO) << "role " << role; dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); // moving average depth parameters int averaging_depth; averaging_depth = configuration->property(role + ".averaging_depth", 10); bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); // output rate int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); // display rate int display_rate_ms; display_rate_ms = configuration->property(role + ".display_rate_ms", 500); // NMEA Printer settings bool flag_nmea_tty_port; flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false); std::string nmea_dump_filename; nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename); std::string nmea_dump_devname; nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname); // make PVT object pvt_ = galileo_e1_make_pvt_cc(in_streams_, queue_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname); DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")"; } GalileoE1Pvt::~GalileoE1Pvt() {} void GalileoE1Pvt::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GalileoE1Pvt::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GalileoE1Pvt::get_left_block() { return pvt_; } gr::basic_block_sptr GalileoE1Pvt::get_right_block() { return pvt_; } gnss-sdr-0.0.6/src/algorithms/PVT/adapters/gps_l1_ca_pvt.h0000644000175000017500000000502512576764164022713 0ustar carlescarles/*! * \file gps_l1_ca_pvt.h * \brief Interface of an adapter of a GPS L1 C/A PVT solver block to a * PvtInterface * Position Velocity and Time * \author Javier Arribas, 2011. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_PVT_H_ #define GNSS_SDR_GPS_L1_CA_PVT_H_ #include #include #include "pvt_interface.h" #include "gps_l1_ca_pvt_cc.h" class ConfigurationInterface; /*! * \brief This class implements a PvtInterface for GPS L1 C/A */ class GpsL1CaPvt : public PvtInterface { public: GpsL1CaPvt(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GpsL1CaPvt(); std::string role() { return role_; } //! Returns "GPS_L1_CA_PVT" std::string implementation() { return "GPS_L1_CA_PVT"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation. Returns sizeof(gr_complex) size_t item_size() { return sizeof(gr_complex); } private: gps_l1_ca_pvt_cc_sptr pvt_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/adapters/galileo_e1_pvt.h0000644000175000017500000000503512576764164023065 0ustar carlescarles/*! * \file galileo_e1_pvt.h * \brief Interface of an adapter of a GALILEO E1 PVT solver block to a * PvtInterface. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_PVT_H_ #define GNSS_SDR_GALILEO_E1_PVT_H_ #include #include #include "pvt_interface.h" #include "galileo_e1_pvt_cc.h" class ConfigurationInterface; /*! * \brief This class implements a PvtInterface for Galileo E1 */ class GalileoE1Pvt : public PvtInterface { public: GalileoE1Pvt(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~GalileoE1Pvt(); std::string role() { return role_; } //! Returns "GALILEO_E1_PVT" std::string implementation() { return "GALILEO_E1_PVT"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation. Returns sizeof(gr_complex) size_t item_size() { return sizeof(gr_complex); } private: galileo_e1_pvt_cc_sptr pvt_; bool dump_; //unsigned int fs_in_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/PVT/adapters/hybrid_pvt.cc0000644000175000017500000000726412576764164022511 0ustar carlescarles/*! * \file hybrid_pvt.cc * \brief Implementation of an adapter of a GALILEO E1 PVT solver block to a * PvtInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "hybrid_pvt.h" #include #include "configuration_interface.h" #include "hybrid_pvt_cc.h" using google::LogMessage; HybridPvt::HybridPvt(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { // dump parameters std::string default_dump_filename = "./pvt.dat"; std::string default_nmea_dump_filename = "./nmea_pvt.nmea"; std::string default_nmea_dump_devname = "/dev/tty1"; DLOG(INFO) << "role " << role; dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); // moving average depth parameters int averaging_depth; averaging_depth = configuration->property(role + ".averaging_depth", 10); bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); // output rate int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); // display rate int display_rate_ms; display_rate_ms = configuration->property(role + ".display_rate_ms", 500); // NMEA Printer settings bool flag_nmea_tty_port; flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false); std::string nmea_dump_filename; nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename); std::string nmea_dump_devname; nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname); // make PVT object pvt_ = hybrid_make_pvt_cc(in_streams_, queue_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname); DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")"; } HybridPvt::~HybridPvt() {} void HybridPvt::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void HybridPvt::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr HybridPvt::get_left_block() { return pvt_; } gr::basic_block_sptr HybridPvt::get_right_block() { return pvt_; } gnss-sdr-0.0.6/src/algorithms/PVT/adapters/gps_l1_ca_pvt.cc0000644000175000017500000000730712576764164023056 0ustar carlescarles/*! * \file gps_l1_ca_pvt.cc * \brief Implementation of an adapter of a GPS L1 C/A PVT solver block to a * PvtInterface * \author Javier Arribas, 2011. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_l1_ca_pvt.h" #include #include "configuration_interface.h" #include "gps_l1_ca_pvt_cc.h" using google::LogMessage; GpsL1CaPvt::GpsL1CaPvt(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { // dump parameters std::string default_dump_filename = "./pvt.dat"; std::string default_nmea_dump_filename = "./nmea_pvt.nmea"; std::string default_nmea_dump_devname = "/dev/tty1"; DLOG(INFO) << "role " << role; dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); // moving average depth parameters int averaging_depth; averaging_depth = configuration->property(role + ".averaging_depth", 10); bool flag_averaging; flag_averaging = configuration->property(role + ".flag_averaging", false); // output rate int output_rate_ms; output_rate_ms = configuration->property(role + ".output_rate_ms", 500); // display rate int display_rate_ms; display_rate_ms = configuration->property(role + ".display_rate_ms", 500); // NMEA Printer settings bool flag_nmea_tty_port; flag_nmea_tty_port = configuration->property(role + ".flag_nmea_tty_port", false); std::string nmea_dump_filename; nmea_dump_filename = configuration->property(role + ".nmea_dump_filename", default_nmea_dump_filename); std::string nmea_dump_devname; nmea_dump_devname = configuration->property(role + ".nmea_dump_devname", default_nmea_dump_devname); // make PVT object pvt_ = gps_l1_ca_make_pvt_cc(in_streams_, queue_, dump_, dump_filename_, averaging_depth, flag_averaging, output_rate_ms, display_rate_ms, flag_nmea_tty_port, nmea_dump_filename, nmea_dump_devname); DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")"; } GpsL1CaPvt::~GpsL1CaPvt() {} void GpsL1CaPvt::connect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to connect internally DLOG(INFO) << "nothing to connect internally"; } void GpsL1CaPvt::disconnect(gr::top_block_sptr top_block) { if(top_block) { /* top_block is not null */}; // Nothing to disconnect } gr::basic_block_sptr GpsL1CaPvt::get_left_block() { return pvt_; } gr::basic_block_sptr GpsL1CaPvt::get_right_block() { return pvt_; } gnss-sdr-0.0.6/src/algorithms/PVT/adapters/hybrid_pvt.h0000644000175000017500000000473512576764164022353 0ustar carlescarles/*! * \file hybrid_pvt.h * \brief Interface of an adapter of a GALILEO E1 PVT solver block to a * PvtInterface. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_HYBRID_PVT_H_ #define GNSS_SDR_HYBRID_PVT_H_ #include #include #include "pvt_interface.h" #include "hybrid_pvt_cc.h" class ConfigurationInterface; /*! * \brief This class implements a PvtInterface for Galileo E1 */ class HybridPvt : public PvtInterface { public: HybridPvt(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~HybridPvt(); std::string role() { return role_; } //! Returns "Hybrid_Pvt" std::string implementation() { return "Hybrid_PVT"; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); void reset() { return; } //! All blocks must have an item_size() function implementation. Returns sizeof(gr_complex) size_t item_size() { return sizeof(gr_complex); } private: hybrid_pvt_cc_sptr pvt_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; boost::shared_ptr queue_; }; #endif gnss-sdr-0.0.6/src/algorithms/signal_source/0000755000175000017500000000000012576764164020400 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/0000755000175000017500000000000012576764164023545 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/unpack_intspir_1bit_samples.cc0000644000175000017500000000560212576764164031553 0ustar carlescarles/*! * \file unpack_intspir_1bit_samples.cc * * \brief Unpacks SPIR int samples to NSR 1 bit samples * \author Fran Fabra fabra (at) ice.csic.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is not part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "unpack_intspir_1bit_samples.h" #include #include unpack_intspir_1bit_samples_sptr make_unpack_intspir_1bit_samples() { return unpack_intspir_1bit_samples_sptr(new unpack_intspir_1bit_samples()); } unpack_intspir_1bit_samples::unpack_intspir_1bit_samples() : sync_interpolator("unpack_intspir_1bit_samples", gr::io_signature::make(1, 1, sizeof(int)), gr::io_signature::make(1, 1, sizeof(float)), 2) {} unpack_intspir_1bit_samples::~unpack_intspir_1bit_samples() {} int unpack_intspir_1bit_samples::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const signed int *in = (const signed int *)input_items[0]; float *out = (float*)output_items[0]; int n = 0; int channel = 1; for(int i = 0; i < noutput_items/2; i++) { // Read packed input sample (1 byte = 1 complex sample) // For historical reasons, values are float versions of short int limits (32767) signed int val = in[i]; if(((val >> ((channel - 1)*2)) & 1) == 1) { out[n++] = static_cast(32767.0); } else { out[n++] = static_cast(-32767.0); } if(((val >> (2*channel - 1)) & 1) == 1) { out[n++] = static_cast(32767.0); } else { out[n++] = static_cast(-32767.0); } } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/CMakeLists.txt0000644000175000017500000000300712576764164026305 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(SIGNAL_SOURCE_GR_BLOCKS_SOURCES unpack_byte_2bit_samples.cc unpack_byte_2bit_cpx_samples.cc unpack_intspir_1bit_samples.cc rtl_tcp_signal_source_c.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ) file(GLOB SIGNAL_SOURCE_GR_BLOCKS_HEADERS "*.h") add_library(signal_source_gr_blocks ${SIGNAL_SOURCE_GR_BLOCKS_SOURCES} ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS}) source_group(Headers FILES ${SIGNAL_SOURCE_GR_BLOCKS_HEADERS}) target_link_libraries(signal_source_gr_blocks signal_source_lib ${GNURADIO_RUNTIME_LIBRARIES} ${Boost_LIBRARIES}) add_dependencies(signal_source_gr_blocks glog-${glog_RELEASE}) gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.cc0000644000175000017500000002410612576764164030745 0ustar carlescarles/*! * \file rtl_tcp_signal_source_c.cc * \brief An rtl_tcp signal source reader. * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * This module contains logic taken from gr-omsosdr * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "rtl_tcp_signal_source_c.h" #include "rtl_tcp_commands.h" #include #include #include using google::LogMessage; namespace ip = boost::asio::ip; using boost::asio::ip::tcp; // Buffer constants // TODO: Make these configurable enum { RTL_TCP_BUFFER_SIZE = 1024 * 16, // 16 KB RTL_TCP_PAYLOAD_SIZE = 1024 * 4 // 4 KB }; rtl_tcp_signal_source_c_sptr rtl_tcp_make_signal_source_c(const std::string &address, short port, bool flip_iq) { return gnuradio::get_initial_sptr (new rtl_tcp_signal_source_c (address, port, flip_iq)); } rtl_tcp_signal_source_c::rtl_tcp_signal_source_c(const std::string &address, short port, bool flip_iq) : gr::sync_block ("rtl_tcp_signal_source_c", gr::io_signature::make(0, 0, 0), gr::io_signature::make(1, 1, sizeof(gr_complex))), socket_ (io_service_), data_ (RTL_TCP_PAYLOAD_SIZE), flip_iq_(flip_iq), buffer_ (RTL_TCP_BUFFER_SIZE), unread_ (0) { boost::system::error_code ec; // 1. Setup lookup table for (unsigned i = 0; i < 0xff; i++) { lookup_[i] = ((float)(i & 0xff) - 127.4f) * (1.0f / 128.0f); } // 2. Set socket options ip::address addr = ip::address::from_string (address, ec); if (ec) { std::cout << address << " is not an IP address" << std::endl; LOG (ERROR) << address << " is not an IP address"; return; } ip::tcp::endpoint ep (addr, port); socket_.open (ep.protocol( ), ec); if (ec) { std::cout << "Failed to open socket." << std::endl; LOG (ERROR) << "Failed to open socket."; } socket_.set_option (boost::asio::socket_base::reuse_address (true), ec); if (ec) { std::cout << "Failed to set reuse address option: " << ec << std::endl; LOG (WARNING) << "Failed to set reuse address option"; } socket_.set_option (boost::asio::socket_base::linger (true, 0), ec); if (ec) { std::cout << "Failed to set linger option: " << ec << std::endl; LOG (WARNING) << "Failed to set linger option"; } // 3. Connect socket socket_.connect(ep, ec); if (ec) { std::cout << "Failed to connect to " << addr << ":" << port << "(" << ec << ")" << std::endl; LOG (ERROR) << "Failed to connect to " << addr << ":" << port << "(" << ec << ")"; return; } std::cout << "Connected to " << addr << ":" << port << std::endl; LOG (INFO) << "Connected to " << addr << ":" << port; // 4. Set nodelay socket_.set_option (tcp::no_delay (true), ec); if (ec) { std::cout << "Failed to set no delay option." << std::endl; LOG (WARNING) << "Failed to set no delay option"; } // 5. Receive dongle info ec = info_.read (socket_); if (ec) { std::cout << "Failed to read dongle info." << std::endl; LOG (WARNING) << "Failed to read dongle info"; } else if (info_.is_valid ()) { std::cout << "Found " << info_.get_type_name() << " tuner." << std::endl; LOG (INFO) << "Found " << info_.get_type_name() << " tuner."; } // 6. Start reading boost::asio::async_read (socket_, boost::asio::buffer (data_), boost::bind (&rtl_tcp_signal_source_c::handle_read, this, _1, _2)); boost::thread (boost::bind (&boost::asio::io_service::run, &io_service_)); } rtl_tcp_signal_source_c::~rtl_tcp_signal_source_c() { io_service_.stop (); } int rtl_tcp_signal_source_c::work (int noutput_items, gr_vector_const_void_star &/*input_items*/, gr_vector_void_star &output_items) { gr_complex *out = reinterpret_cast ( output_items[0] ); int i = 0; if (io_service_.stopped ()) { return -1; } { boost::mutex::scoped_lock lock (mutex_); not_empty_.wait (lock, boost::bind (&rtl_tcp_signal_source_c::not_empty, this)); for ( ; i < noutput_items && unread_ > 1; i++ ) { float re = buffer_[--unread_]; float im = buffer_[--unread_]; if (flip_iq_) { out[i] = gr_complex (im, re); } else { out[i] = gr_complex (re, im); } } } not_full_.notify_one (); return i == 0 ? -1 : i; } void rtl_tcp_signal_source_c::set_frequency (int frequency) { boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_FREQUENCY, frequency, socket_); if (ec) { std::cout << "Failed to set frequency" << std::endl; LOG (WARNING) << "Failed to set frequency"; } } void rtl_tcp_signal_source_c::set_sample_rate (int sample_rate) { boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_SAMPLE_RATE, sample_rate, socket_); if (ec) { std::cout << "Failed to set sample rate" << std::endl; LOG (WARNING) << "Failed to set sample rate"; } } void rtl_tcp_signal_source_c::set_agc_mode (bool agc) { boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_GAIN_MODE, !agc, socket_); if (ec) { std::cout << "Failed to set gain mode" << std::endl; LOG (WARNING) << "Failed to set gain mode"; } ec = rtl_tcp_command (RTL_TCP_SET_AGC_MODE, agc, socket_); if (ec) { std::cout << "Failed to set gain mode" << std::endl; LOG (WARNING) << "Failed to set gain mode"; } } void rtl_tcp_signal_source_c::set_gain (int gain) { unsigned clipped = static_cast (info_.clip_gain (gain) * 10.0); boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_GAIN, clipped, socket_); if (ec) { std::cout << "Failed to set gain" << std::endl; LOG (WARNING) << "Failed to set gain"; } } void rtl_tcp_signal_source_c::set_if_gain (int gain) { // from gr-osmosdr struct range { double start, stop, step; }; if (info_.get_tuner_type () != rtl_tcp_dongle_info::TUNER_E4000) { return; } std::vector ranges = { { -3, 6, 9 }, { 0, 9, 3 }, { 0, 9, 3 }, { 0, 2, 1 }, { 3, 15, 3}, { 3, 15, 3} }; std::map gains; for (int i = 0; i < static_cast(ranges.size ()); i++) { gains[i+1] = ranges[i].start; } for (int i = ranges.size() - 1; i >= 0; i--) { const range &r = ranges[i]; double error = gain; for (double g = r.start; g < r.stop; g += r.step) { double sum = 0; for (int j = 0; j < static_cast ( gains.size() ); j++) { if (i == j) { sum += g; } else { sum += gains[j + 1]; } } double err = std::abs (gain - sum); if (err < error) { error = err; gains[i+1] = g; } } } for (unsigned stage = 1; stage <= gains.size(); stage++) { int stage_gain = static_cast( gains[stage] * 10 ); unsigned param = (stage << 16) | (stage_gain & 0xffff); boost::system::error_code ec = rtl_tcp_command (RTL_TCP_SET_IF_GAIN, param, socket_); if (ec) { std::cout << "Failed to set if gain" << std::endl; LOG (WARNING) << "Failed to set if gain"; } } } void rtl_tcp_signal_source_c::handle_read (const boost::system::error_code &ec, size_t bytes_transferred) { if (ec) { std::cout << "Error during read: " << ec << std::endl; LOG (WARNING) << "Error during read: " << ec; boost::mutex::scoped_lock lock (mutex_); io_service_.stop (); not_empty_.notify_one (); } else { { // Unpack read data boost::mutex::scoped_lock lock (mutex_); not_full_.wait (lock, boost::bind (&rtl_tcp_signal_source_c::not_full, this)); for (size_t i = 0; i < bytes_transferred; i++) { while (!not_full( )) { // uh-oh, buffer overflow // wait until there's space for more not_empty_.notify_one (); // needed? not_full_.wait (lock, boost::bind (&rtl_tcp_signal_source_c::not_full, this)); } buffer_.push_front (lookup_[data_[i]]); unread_++; } } // let woker know that more data is available not_empty_.notify_one (); // Read some more boost::asio::async_read (socket_, boost::asio::buffer (data_), boost::bind (&rtl_tcp_signal_source_c::handle_read, this, _1, _2)); } } gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/unpack_intspir_1bit_samples.h0000644000175000017500000000372412576764164031420 0ustar carlescarles/*! * \file unpack_intspir_1bit_samples.h * * \brief Unpacks SPIR int samples to NSR 1 bit samples * \author Fran Fabra fabra (at) ice.csic.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is not part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_UNPACK_INTSPIR_1BIT_SAMPLES_H #define GNSS_SDR_UNPACK_INTSPIR_1BIT_SAMPLES_H #include class unpack_intspir_1bit_samples; typedef boost::shared_ptr unpack_intspir_1bit_samples_sptr; unpack_intspir_1bit_samples_sptr make_unpack_intspir_1bit_samples(); /*! * \brief This class implements conversion between byte packet samples to 2bit samples * 1 byte = 4 2bit samples */ class unpack_intspir_1bit_samples: public gr::sync_interpolator { private: friend unpack_intspir_1bit_samples_sptr make_unpack_intspir_1bit_samples_sptr(); public: unpack_intspir_1bit_samples(); ~unpack_intspir_1bit_samples(); int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/unpack_byte_2bit_samples.h0000644000175000017500000000365112576764164030673 0ustar carlescarles/*! * \file unpack_byte_2bit_samples.h * * \brief Unpacks byte samples to NSR 2 bits samples * \author Javier Arribas jarribas (at) cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_UNPACK_BYTE_2BIT_SAMPLES_H #define GNSS_SDR_UNPACK_BYTE_2BIT_SAMPLES_H #include class unpack_byte_2bit_samples; typedef boost::shared_ptr unpack_byte_2bit_samples_sptr; unpack_byte_2bit_samples_sptr make_unpack_byte_2bit_samples(); /*! * \brief This class implements conversion between byte packet samples to 2bit samples * 1 byte = 4 2bit samples */ class unpack_byte_2bit_samples: public gr::sync_interpolator { private: friend unpack_byte_2bit_samples_sptr make_unpack_byte_2bit_samples_sptr(); public: unpack_byte_2bit_samples(); ~unpack_byte_2bit_samples(); int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/unpack_byte_2bit_cpx_samples.h0000644000175000017500000000422412576764164031542 0ustar carlescarles/*! * \file unpack_byte_2bit_cpx_samples.h * * \brief Unpacks byte samples to 2 bits complex samples. * Packing Order * Most Significant Nibble - Sample n * Least Significant Nibble - Sample n+1 * Packing order in Nibble Q1 Q0 I1 I0 * \author Javier Arribas jarribas (at) cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_UNPACK_BYTE_2BIT_CPX_SAMPLES_H #define GNSS_SDR_UNPACK_BYTE_2BIT_CPX_SAMPLES_H #include class unpack_byte_2bit_cpx_samples; typedef boost::shared_ptr unpack_byte_2bit_cpx_samples_sptr; unpack_byte_2bit_cpx_samples_sptr make_unpack_byte_2bit_cpx_samples(); /*! * \brief This class implements conversion between byte packet samples to 2bit_cpx samples * 1 byte = 2 x complex 2bit I, + 2bit Q samples */ class unpack_byte_2bit_cpx_samples: public gr::sync_interpolator { private: friend unpack_byte_2bit_cpx_samples_sptr make_unpack_byte_2bit_cpx_samples_sptr(); public: unpack_byte_2bit_cpx_samples(); ~unpack_byte_2bit_cpx_samples(); int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; #endif gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/unpack_byte_2bit_cpx_samples.cc0000644000175000017500000000764412576764164031711 0ustar carlescarles/*! * \file unpack_byte_2bit_cpx_samples.cc * * \brief Unpacks byte samples to 2 bits complex samples. * Packing Order * Most Significant Nibble - Sample n * Least Significant Nibble - Sample n+1 * Packing order in Nibble Q1 Q0 I1 I0 * \author Javier Arribas jarribas (at) cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "unpack_byte_2bit_cpx_samples.h" #include #include struct byte_2bit_struct { signed two_bit_sample:2; // <- 2 bits wide only }; unpack_byte_2bit_cpx_samples_sptr make_unpack_byte_2bit_cpx_samples() { return unpack_byte_2bit_cpx_samples_sptr(new unpack_byte_2bit_cpx_samples()); } unpack_byte_2bit_cpx_samples::unpack_byte_2bit_cpx_samples() : sync_interpolator("unpack_byte_2bit_cpx_samples", gr::io_signature::make(1, 1, sizeof(signed char)), gr::io_signature::make(1, 1, sizeof(short)), 4) {} unpack_byte_2bit_cpx_samples::~unpack_byte_2bit_cpx_samples() {} int unpack_byte_2bit_cpx_samples::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const signed char *in = (const signed char *)input_items[0]; short *out = (short*)output_items[0]; byte_2bit_struct sample; int n = 0; for(int i = 0; i < noutput_items/4; i++) { // Read packed input sample (1 byte = 2 complex samples) //* Packing Order //* Most Significant Nibble - Sample n //* Least Significant Nibble - Sample n+1 //* Packing order in Nibble Q1 Q0 I1 I0 //normal // signed char c = in[i]; // //Q[n] // sample.two_bit_sample = (c>>6) & 3; // out[n++] = (2*(short)sample.two_bit_sample+1); // //I[n] // sample.two_bit_sample = (c>>4) & 3; // out[n++] = (2*(short)sample.two_bit_sample+1); // //Q[n+1] // sample.two_bit_sample = (c>>2) & 3; // out[n++] = (2*(short)sample.two_bit_sample+1); // //I[n+1] // sample.two_bit_sample = c & 3; // out[n++] = (2*(short)sample.two_bit_sample+1); //I/Q swap signed char c = in[i]; //I[n] sample.two_bit_sample = (c >> 4) & 3; out[n++] = (2*(short)sample.two_bit_sample + 1); //Q[n] sample.two_bit_sample = (c >> 6) & 3; out[n++] = (2*(short)sample.two_bit_sample + 1); //I[n+1] sample.two_bit_sample = c & 3; out[n++] = (2*(short)sample.two_bit_sample + 1); //Q[n+1] sample.two_bit_sample = (c >> 2) & 3; out[n++] = (2*(short)sample.two_bit_sample + 1); } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/rtl_tcp_signal_source_c.h0000644000175000017500000000756612576764164030622 0ustar carlescarles/*! * \file rtl_tcp_signal_source_c.h * \brief Interface of an rtl_tcp signal source reader. * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * The implementation of this block is a combination of various helpful * sources. The data format and command structure is taken from the * original Osmocom rtl_tcp_source_f (http://git.osmocom.org/gr-osmosdr). * The aynchronous reading code comes from the examples provides * by Boost.Asio and the bounded buffer producer-consumer solution is * taken from the Boost.CircularBuffer examples (http://boost.org/). * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H #define GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H #include "rtl_tcp_dongle_info.h" #include #include #include #include #include #include #include class rtl_tcp_signal_source_c; typedef boost::shared_ptr rtl_tcp_signal_source_c_sptr; rtl_tcp_signal_source_c_sptr rtl_tcp_make_signal_source_c(const std::string &address, short port, bool flip_iq = false); /*! * \brief This class reads interleaved I/Q samples * from an rtl_tcp server and outputs complex types. */ class rtl_tcp_signal_source_c : public gr::sync_block { public: ~rtl_tcp_signal_source_c(); int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); void set_frequency (int frequency); void set_sample_rate (int sample_rate); void set_agc_mode (bool agc); void set_gain (int gain); void set_if_gain (int gain); private: typedef boost::circular_buffer_space_optimized buffer_type; friend rtl_tcp_signal_source_c_sptr rtl_tcp_make_signal_source_c(const std::string &address, short port, bool flip_iq); rtl_tcp_signal_source_c(const std::string &address, short port, bool flip_iq); rtl_tcp_dongle_info info_; // IO members boost::asio::io_service io_service_; boost::asio::ip::tcp::socket socket_; std::vector data_; bool flip_iq_; // producer-consumer helpers boost::mutex mutex_; boost::condition not_full_; boost::condition not_empty_; buffer_type buffer_; size_t unread_; // lookup for scaling data boost::array lookup_; // async read callback void handle_read (const boost::system::error_code &ec, size_t bytes_transferred); inline bool not_full ( ) const { return unread_ < buffer_.capacity( ); } inline bool not_empty ( ) const { return unread_ > 0 || io_service_.stopped (); } }; #endif //GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_C_H gnss-sdr-0.0.6/src/algorithms/signal_source/gnuradio_blocks/unpack_byte_2bit_samples.cc0000644000175000017500000000551312576764164031030 0ustar carlescarles/*! * \file unpack_byte_2bit_samples.cc * * \brief Unpacks byte samples to NSR 2 bits samples * \author Javier Arribas jarribas (at) cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "unpack_byte_2bit_samples.h" #include #include struct byte_2bit_struct { signed two_bit_sample:2; // <- 2 bits wide only }; unpack_byte_2bit_samples_sptr make_unpack_byte_2bit_samples() { return unpack_byte_2bit_samples_sptr(new unpack_byte_2bit_samples()); } unpack_byte_2bit_samples::unpack_byte_2bit_samples() : sync_interpolator("unpack_byte_2bit_samples", gr::io_signature::make(1, 1, sizeof(signed char)), gr::io_signature::make(1, 1, sizeof(float)), 4) {} unpack_byte_2bit_samples::~unpack_byte_2bit_samples() {} int unpack_byte_2bit_samples::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { const signed char *in = (const signed char *)input_items[0]; float *out = (float*)output_items[0]; byte_2bit_struct sample; int n = 0; for(int i = 0; i < noutput_items/4; i++) { // Read packed input sample (1 byte = 4 samples) signed char c = in[i]; sample.two_bit_sample = c & 3; out[n++] = (float)sample.two_bit_sample; sample.two_bit_sample = (c>>2) & 3; out[n++] = (float)sample.two_bit_sample; sample.two_bit_sample = (c>>4) & 3; out[n++] = (float)sample.two_bit_sample; sample.two_bit_sample = (c>>6) & 3; out[n++] = (float)sample.two_bit_sample; } return noutput_items; } gnss-sdr-0.0.6/src/algorithms/signal_source/CMakeLists.txt0000644000175000017500000000146212576764164023143 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(libs) add_subdirectory(adapters) add_subdirectory(gnuradio_blocks) gnss-sdr-0.0.6/src/algorithms/signal_source/libs/0000755000175000017500000000000012576764164021331 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_source/libs/rtl_tcp_commands.cc0000644000175000017500000000344312576764164025174 0ustar carlescarles/*! * \file rtl_tcp_commands.cc * \brief Defines methods for communicating with rtl_tcp * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * This file contains information taken from librtlsdr: * http://git.osmocom.org/rtl-sdr/ * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "rtl_tcp_commands.h" #include using boost::asio::ip::tcp; boost::system::error_code rtl_tcp_command (RTL_TCP_COMMAND id, unsigned param, tcp::socket &socket) { // Data payload unsigned char data[sizeof (unsigned char) + sizeof (unsigned)]; data[0] = static_cast (id); unsigned nparam = boost::asio::detail::socket_ops::host_to_network_long (param); ::memcpy (&data[1], &nparam, sizeof (nparam)); boost::system::error_code ec; socket.send (boost::asio::buffer (data), 0, ec); return ec; } gnss-sdr-0.0.6/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.cc0000644000175000017500000001014112576764164025647 0ustar carlescarles/*! * \file rtl_tcp_dongle_info.cc * \brief Defines methods for retrieving and validating rtl_tcp donle * info. * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * This file contains information taken from librtlsdr: * http://git.osmocom.org/rtl-sdr/ * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "rtl_tcp_dongle_info.h" #include #include using boost::asio::ip::tcp; rtl_tcp_dongle_info::rtl_tcp_dongle_info () : tuner_type_ (0), tuner_gain_count_ (0) { ::memset (magic_, 0, sizeof (magic_)); } boost::system::error_code rtl_tcp_dongle_info::read (tcp::socket &socket) { boost::system::error_code ec; unsigned char data[sizeof (char) * 4 + sizeof (uint32_t) * 2]; socket.receive (boost::asio::buffer (data), 0, ec); if (!ec) { ::memcpy (magic_, data, 4); uint32_t type; ::memcpy (&type, &data[4], 4); tuner_type_ = boost::asio::detail::socket_ops::network_to_host_long (type); uint32_t count; ::memcpy (&count, &data[8], 4); tuner_gain_count_ = boost::asio::detail::socket_ops::network_to_host_long (count); } return ec; } const char *rtl_tcp_dongle_info::get_type_name () const { switch (get_tuner_type()) { default: return "UNKNOWN"; case TUNER_E4000: return "E4000"; case TUNER_FC0012: return "FC0012"; case TUNER_FC0013: return "FC0013"; case TUNER_FC2580: return "FC2580"; case TUNER_R820T: return "R820T"; case TUNER_R828D: return "R828D"; } } double rtl_tcp_dongle_info::clip_gain (int gain) const { // the following gain values have been copied from librtlsdr // all gain values are expressed in tenths of a dB std::vector gains; switch (get_tuner_type()) { case TUNER_E4000: gains = { -10, 15, 40, 65, 90, 115, 140, 165, 190, 215, 240, 290, 340, 420 }; break; case TUNER_FC0012: gains = { -99, -40, 71, 179, 192 }; break; case TUNER_FC0013: gains = { -99, -73, -65, -63, -60, -58, -54, 58, 61, 63, 65, 67, 68, 70, 71, 179, 181, 182, 184, 186, 188, 191, 197 }; break; case TUNER_R820T: gains = { 0, 9, 14, 27, 37, 77, 87, 125, 144, 157, 166, 197, 207, 229, 254, 280, 297, 328, 338, 364, 372, 386, 402, 421, 434, 439, 445, 480, 496 }; break; default: // no gains break; } // clip if (gains.size() == 0) { // no defined gains to clip to return gain; } else { double last_stop = gains.front (); BOOST_FOREACH (double g, gains) { g /= 10.0; if (gain < g) { if (std::abs (gain - g) < std::abs (gain - last_stop)) { return g; } else { return last_stop; } } last_stop = g; } return last_stop; } } bool rtl_tcp_dongle_info::is_valid () const { return ::memcmp (magic_, "RTL0", 4) == 0; } gnss-sdr-0.0.6/src/algorithms/signal_source/libs/CMakeLists.txt0000644000175000017500000000207612576764164024076 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set (SIGNAL_SOURCE_LIB_SOURCES rtl_tcp_commands.cc rtl_tcp_dongle_info.cc) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${Boost_INCLUDE_DIRS} ) file(GLOB SIGNAL_SOURCE_LIB_HEADERS "*.h") add_library(signal_source_lib ${SIGNAL_SOURCE_LIB_SOURCES} ${SIGNAL_SOURCE_LIB_HEADERS}) source_group(Headers FILES ${SIGNAL_SOURCE_LIB_HEADERS})gnss-sdr-0.0.6/src/algorithms/signal_source/libs/rtl_tcp_dongle_info.h0000644000175000017500000000427612576764164025525 0ustar carlescarles/*! * \file rtl_tcp_dongle_info.h * \brief Interface for a structure sent by rtl_tcp defining the hardware. * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * This file contains information taken from librtlsdr: * http://git.osmocom.org/rtl-sdr/ * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_RTL_TCP_DONGLE_INFO_H #define GNSS_SDR_RTL_TCP_DONGLE_INFO_H #include /*! * \brief This class represents the dongle information * which is sent by rtl_tcp. */ class rtl_tcp_dongle_info { public: enum { TUNER_UNKNOWN = 0, TUNER_E4000, TUNER_FC0012, TUNER_FC0013, TUNER_FC2580, TUNER_R820T, TUNER_R828D }; private: char magic_[4]; uint32_t tuner_type_; uint32_t tuner_gain_count_; public: rtl_tcp_dongle_info (); boost::system::error_code read ( boost::asio::ip::tcp::socket &socket); bool is_valid () const; const char *get_type_name () const; double clip_gain (int gain) const; inline uint32_t get_tuner_type () const { return tuner_type_; } inline uint32_t get_tuner_gain_count () const { return tuner_gain_count_; } }; #endif // GNSS_SDR_RTL_TCP_DONGLE_INFO_H gnss-sdr-0.0.6/src/algorithms/signal_source/libs/rtl_tcp_commands.h0000644000175000017500000000351712576764164025040 0ustar carlescarles/*! * \file rtl_tcp_commands.h * \brief Defines structures and constants for communicating with rtl_tcp * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * This file contains information taken from librtlsdr: * http://git.osmocom.org/rtl-sdr/ * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_RTL_TCP_COMMANDS_H #define GNSS_SDR_RTL_TCP_COMMANDS_H #include /// Command IDs for configuration rtl_tcp enum RTL_TCP_COMMAND { RTL_TCP_SET_FREQUENCY = 1, RTL_TCP_SET_SAMPLE_RATE = 2, RTL_TCP_SET_GAIN_MODE = 3, RTL_TCP_SET_GAIN = 4, RTL_TCP_SET_IF_GAIN = 6, RTL_TCP_SET_AGC_MODE = 8 }; /*! * \brief Send a command to rtl_tcp over the given socket. */ boost::system::error_code rtl_tcp_command (RTL_TCP_COMMAND id, unsigned param, boost::asio::ip::tcp::socket &socket); #endif // GNSS_SDR_RTL_TCP_COMMANDS_H gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/0000755000175000017500000000000012576764164022203 5ustar carlescarlesgnss-sdr-0.0.6/src/algorithms/signal_source/adapters/gen_signal_source.h0000644000175000017500000000502112576764164026040 0ustar carlescarles/*! * \file gen_signal_source.h * \brief It wraps blocks that generates synthesized GNSS signal and filters * it. * \author Marc Molina, 2013. marc.molina.pena@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GEN_SIGNAL_SOURCE_H_ #define GNSS_SDR_GEN_SIGNAL_SOURCE_H_ #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class wraps blocks that generates synthesized GNSS signal and * filters the signal. */ class GenSignalSource: public GNSSBlockInterface { public: //! Constructor GenSignalSource(ConfigurationInterface *configuration, GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter, std::string role, boost::shared_ptr queue); //! Virtual destructor virtual ~GenSignalSource(); void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string role(){ return role_; } //! Returns "Signal Source" std::string implementation(){ return "Signal Source"; } size_t item_size(){ return 0; } GNSSBlockInterface *signal_generator(){ return signal_generator_; } GNSSBlockInterface *output_filter(){ return filter_; } private: GNSSBlockInterface *signal_generator_; GNSSBlockInterface *filter_; std::string role_; std::string implementation_; bool connected_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_GEN_SIGNAL_SOURCE_H*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/flexiband_signal_source.cc0000644000175000017500000001274412576764164027373 0ustar carlescarles/*! * \file raw_array_signal_source.cc * \brief CTTC Experimental GNSS 8 channels array signal source * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "flexiband_signal_source.h" #include #include #include #include #include "configuration_interface.h" using google::LogMessage; FlexibandSignalSource::FlexibandSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { std::string default_item_type = "byte"; item_type_ = configuration->property(role + ".item_type", default_item_type); std::string default_firmware_file = "flexiband_I-1b.bit"; firmware_filename_ = configuration->property(role + ".firmware_file", default_firmware_file); gain1_ = configuration->property(role + ".gain1", 0); // check gain DAC values for Flexiband frontend! gain2_ = configuration->property(role + ".gain2", 0); // check gain DAC values for Flexiband frontend! gain3_ = configuration->property(role + ".gain3", 0); // check gain DAC values for Flexiband frontend! AGC_ = configuration->property(role + ".AGC", true); // enabled AGC by default flag_read_file = configuration->property(role + ".flag_read_file", false); //disable read samples from file by default std::string default_signal_file = "flexiband_frame_samples.bin"; signal_file = configuration->property(role + ".signal_file", default_signal_file); usb_packet_buffer_size_ = configuration->property(role + ".usb_packet_buffer", 128); RF_channels_ = configuration->property(role + ".RF_channels", 1); if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); flexiband_source_ = gr::teleorbit::frontend::make(firmware_filename_.c_str(), gain1_, gain2_, gain3_, AGC_, usb_packet_buffer_size_, signal_file.c_str(), flag_read_file); //create I, Q -> gr_complex type conversion blocks for (int n = 0; n < (RF_channels_ * 2); n++) { char_to_float.push_back(gr::blocks::char_to_float::make()); } for (int n = 0; n < RF_channels_; n++) { float_to_complex_.push_back(gr::blocks::float_to_complex::make()); } DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "Firmware file " << firmware_filename_; DLOG(INFO) << "flexiband_source_(" << flexiband_source_->unique_id() << ")"; } else { LOG(WARNING) << item_type_ << " unrecognized item type for flexiband_source_"; item_size_ = sizeof(gr_complex); } } FlexibandSignalSource::~FlexibandSignalSource() {} void FlexibandSignalSource::connect(gr::top_block_sptr top_block) { for (int n = 0; n < (RF_channels_ * 2); n++) { top_block->connect(flexiband_source_, n, char_to_float.at(n), 0); DLOG(INFO) << "connected flexiband_source_ to char_to_float CH" << n; } for (int n = 0; n < RF_channels_; n++) { top_block->connect(char_to_float.at(n * 2), 0, float_to_complex_.at(n), 0); top_block->connect(char_to_float.at(n * 2 + 1), 0, float_to_complex_.at(n), 1); DLOG(INFO) << "connected char_to_float to float_to_complex_ CH" << n; } } void FlexibandSignalSource::disconnect(gr::top_block_sptr top_block) { for (int n = 0; n < (RF_channels_ * 2); n++) { top_block->disconnect(flexiband_source_, n, char_to_float.at(n), 0); DLOG(INFO) << "disconnect flexiband_source_ to char_to_float CH" << n; } for (int n = 0; n < RF_channels_; n++) { top_block->disconnect(char_to_float.at(n * 2), 0, float_to_complex_.at(n), 0); top_block->disconnect(char_to_float.at(n * 2 + 1), 0, float_to_complex_.at(n), 1); DLOG(INFO) << "disconnect char_to_float to float_to_complex_ CH" << n; } } gr::basic_block_sptr FlexibandSignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; return gr::block_sptr(); } gr::basic_block_sptr FlexibandSignalSource::get_right_block() { return get_right_block(0); } gr::basic_block_sptr FlexibandSignalSource::get_right_block(int RF_channel) { return float_to_complex_.at(RF_channel); } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/gn3s_signal_source.cc0000644000175000017500000000740312576764164026305 0ustar carlescarles/*! * \file gn3s_signal_source.cc * \brief GN3S USB dongle GPS RF front-end signal sampler driver * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gn3s_signal_source.h" #include #include #include #include #include #include "configuration_interface.h" using google::LogMessage; Gn3sSignalSource::Gn3sSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { std::string default_item_type = "short"; std::string default_dump_file = "./data/gn3s_source.dat"; item_type_ = configuration->property(role + ".item_type", default_item_type); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); gn3s_source_ = gn3s_make_source_cc(); DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "gn3s_source(" << gn3s_source_->unique_id() << ")"; } // else if (item_type_.compare("short") == 0) // { // item_size_ = sizeof(short); // resampler_ = direct_resampler_make_conditioner_ss(sample_freq_in_, // sample_freq_out_); // } else { LOG(WARNING) << item_type_ << " unrecognized item type for resampler"; item_size_ = sizeof(short); } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); } if (dump_) { DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } } Gn3sSignalSource::~Gn3sSignalSource() {} void Gn3sSignalSource::connect(gr::top_block_sptr top_block) { if (dump_) { top_block->connect(gn3s_source_, 0, file_sink_, 0); DLOG(INFO) << "connected gn3s_source to file sink"; } else { DLOG(INFO) << "nothing to connect internally"; } } void Gn3sSignalSource::disconnect(gr::top_block_sptr top_block) { if (dump_) { top_block->disconnect(gn3s_source_, 0, file_sink_, 0); } } gr::basic_block_sptr Gn3sSignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; return gr::block_sptr(); } gr::basic_block_sptr Gn3sSignalSource::get_right_block() { return gn3s_source_; } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/file_signal_source.h0000644000175000017500000000663412576764164026221 0ustar carlescarles/*! * \file file_signal_source.h * \brief Interface of a class that reads signals samples from a file * and adapts it to a SignalSourceInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * This class represents a file signal source. Internally it uses a GNU Radio's * gr_file_source as a connector to the data. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_FILE_SIGNAL_SOURCE_H_ #include #include #include #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief Class that reads signals samples from a file * and adapts it to a SignalSourceInterface */ class FileSignalSource: public GNSSBlockInterface { public: FileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~FileSignalSource(); std::string role() { return role_; } /*! * \brief Returns "File_Signal_Source". */ std::string implementation() { return "File_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string filename() { return filename_; } std::string item_type() { return item_type_; } bool repeat() { return repeat_; } long sampling_frequency() { return sampling_frequency_; } long samples() { return samples_; } private: unsigned long long samples_; long sampling_frequency_; std::string filename_; std::string item_type_; bool repeat_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; gr::blocks::file_source::sptr file_source_; boost::shared_ptr valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; boost::shared_ptr queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; }; #endif /*GNSS_SDR_FILE_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/nsr_file_signal_source.h0000644000175000017500000000713412576764164027077 0ustar carlescarles/*! * \file nsr_file_signal_source.h * \brief Implementation of a class that reads signals samples from a NSR 2 bits sampler front-end file * and adapts it to a SignalSourceInterface. More information about the front-end here * http://www.ifen.com/products/sx-scientific-gnss-solutions/nsr-software-receiver.html * \author Javier Arribas, 2013 jarribas(at)cttc.es * * This class represents a file signal source. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_ #include #include #include #include #include #include #include "gnss_block_interface.h" #include "unpack_byte_2bit_samples.h" class ConfigurationInterface; /*! * \brief Class that reads signals samples from a file * and adapts it to a SignalSourceInterface */ class NsrFileSignalSource: public GNSSBlockInterface { public: NsrFileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~NsrFileSignalSource(); std::string role() { return role_; } /*! * \brief Returns "Nsr_File_Signal_Source". */ std::string implementation() { return "Nsr_File_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string filename() { return filename_; } std::string item_type() { return item_type_; } bool repeat() { return repeat_; } long sampling_frequency() { return sampling_frequency_; } long samples() { return samples_; } private: unsigned long long samples_; long sampling_frequency_; std::string filename_; std::string item_type_; bool repeat_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; gr::blocks::file_source::sptr file_source_; unpack_byte_2bit_samples_sptr unpack_byte_; boost::shared_ptr valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; boost::shared_ptr queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; }; #endif /*GNSS_SDR_NSR_FILE_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc0000644000175000017500000001701612576764164027122 0ustar carlescarles/*! * \file osmosdr_signal_source.cc * \brief Signal source for the Realtek RTL2832U USB dongle DVB-T receiver * (see http://sdr.osmocom.org/trac/wiki/rtl-sdr for more information) * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "osmosdr_signal_source.h" #include #include #include #include #include "configuration_interface.h" #include "gnss_sdr_valve.h" #include "GPS_L1_CA.h" using google::LogMessage; OsmosdrSignalSource::OsmosdrSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { // DUMP PARAMETERS std::string empty = ""; std::string default_dump_file = "./data/signal_source.dat"; std::string default_item_type = "gr_complex"; samples_ = configuration->property(role + ".samples", 0); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); // OSMOSDR Driver parameters AGC_enabled_ = configuration->property(role + ".AGC_enabled", true); freq_ = configuration->property(role + ".freq", GPS_L1_FREQ_HZ); gain_ = configuration->property(role + ".gain", (double)40.0); rf_gain_ = configuration->property(role + ".rf_gain", (double)40.0); if_gain_ = configuration->property(role + ".if_gain", (double)40.0); sample_rate_ = configuration->property(role + ".sampling_frequency", (double)2.0e6); item_type_ = configuration->property(role + ".item_type", default_item_type); osmosdr_args_ = configuration->property(role + ".osmosdr_args", std::string( )); if (item_type_.compare("short") == 0) { item_size_ = sizeof(short); } else if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); // 1. Make the driver instance try { if (!osmosdr_args_.empty()) { std::cout << "OsmoSdr arguments: " << osmosdr_args_ << std::endl; LOG(INFO) << "OsmoSdr arguments: " << osmosdr_args_; } osmosdr_source_ = osmosdr::source::make(osmosdr_args_); } catch( boost::exception & e ) { DLOG(FATAL) << "Boost exception: " << boost::diagnostic_information(e); } // 2 set sampling rate osmosdr_source_->set_sample_rate(sample_rate_); std::cout << boost::format("Actual RX Rate: %f [SPS]...") % (osmosdr_source_->get_sample_rate()) << std::endl ; LOG(INFO) << boost::format("Actual RX Rate: %f [SPS]...") % (osmosdr_source_->get_sample_rate()); // 3. set rx frequency osmosdr_source_->set_center_freq(freq_); std::cout << boost::format("Actual RX Freq: %f [Hz]...") % (osmosdr_source_->get_center_freq()) << std::endl ; LOG(INFO) << boost::format("Actual RX Freq: %f [Hz]...") % (osmosdr_source_->get_center_freq()); // TODO: Assign the remnant IF from the PLL tune error std::cout << boost::format("PLL Frequency tune error %f [Hz]...") % (osmosdr_source_->get_center_freq() - freq_) ; LOG(INFO) << boost::format("PLL Frequency tune error %f [Hz]...") % (osmosdr_source_->get_center_freq() - freq_) ; // 4. set rx gain if (this->AGC_enabled_ == true) { osmosdr_source_->set_gain_mode(true); std::cout << "AGC enabled" << std::endl; LOG(INFO) << "AGC enabled"; } else { osmosdr_source_->set_gain_mode(false); osmosdr_source_->set_gain(gain_, 0); osmosdr_source_->set_if_gain(rf_gain_, 0); osmosdr_source_->set_bb_gain(if_gain_, 0); std::cout << boost::format("Actual RX Gain: %f dB...") % osmosdr_source_->get_gain() << std::endl; LOG(INFO) << boost::format("Actual RX Gain: %f dB...") % osmosdr_source_->get_gain(); } } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using short."; item_size_ = sizeof(short); } if (samples_ != 0) { DLOG(INFO) << "Send STOP signal after " << samples_ << " samples"; valve_ = gnss_sdr_make_valve(item_size_, samples_, queue_); DLOG(INFO) << "valve(" << valve_->unique_id() << ")"; } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } } OsmosdrSignalSource::~OsmosdrSignalSource() {} void OsmosdrSignalSource::connect(gr::top_block_sptr top_block) { if (samples_ != 0) { top_block->connect(osmosdr_source_, 0, valve_, 0); DLOG(INFO) << "connected osmosdr source to valve"; if (dump_) { top_block->connect(valve_, 0, file_sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } else { if (dump_) { top_block->connect(osmosdr_source_, 0, file_sink_, 0); DLOG(INFO) << "connected osmosdr source to file sink"; } } } void OsmosdrSignalSource::disconnect(gr::top_block_sptr top_block) { if (samples_ != 0) { top_block->disconnect(osmosdr_source_, 0, valve_, 0); if (dump_) { top_block->disconnect(valve_, 0, file_sink_, 0); } } else { if (dump_) { top_block->disconnect(osmosdr_source_, 0, file_sink_, 0); } } } gr::basic_block_sptr OsmosdrSignalSource::get_left_block() { LOG(WARNING) << "Trying to get signal source left block."; return gr::basic_block_sptr(); } gr::basic_block_sptr OsmosdrSignalSource::get_right_block() { if (samples_ != 0) { return valve_; } else { return osmosdr_source_; } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.h0000644000175000017500000000724612576764164030622 0ustar carlescarles/*! * \file two_bit_cpx_file_signal_source.h * \brief Interface of a class that reads signals samples from a 2 bit complex sampler front-end file * and adapts it to a SignalSourceInterface. * \author Javier Arribas, 2015 jarribas(at)cttc.es * * This class represents a file signal source. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_ #include #include #include #include #include #include #include #include "gnss_block_interface.h" #include "unpack_byte_2bit_cpx_samples.h" class ConfigurationInterface; /*! * \brief Class that reads signals samples from a file * and adapts it to a SignalSourceInterface */ class TwoBitCpxFileSignalSource: public GNSSBlockInterface { public: TwoBitCpxFileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~TwoBitCpxFileSignalSource(); std::string role() { return role_; } /*! * \brief Returns "Two_Bit_Cpx_File_Signal_Source". */ std::string implementation() { return "Two_Bit_Cpx_File_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string filename() { return filename_; } std::string item_type() { return item_type_; } bool repeat() { return repeat_; } long sampling_frequency() { return sampling_frequency_; } long samples() { return samples_; } private: unsigned long long samples_; long sampling_frequency_; std::string filename_; std::string item_type_; bool repeat_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; gr::blocks::file_source::sptr file_source_; unpack_byte_2bit_cpx_samples_sptr unpack_byte_; gr::blocks::interleaved_short_to_complex::sptr inter_shorts_to_cpx_; boost::shared_ptr valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; boost::shared_ptr queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; }; #endif /*GNSS_SDR_TWO_BIT_CPX_FILE_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/gn3s_signal_source.h0000644000175000017500000000503312576764164026144 0ustar carlescarles/*! * \file gn3s_signal_source.h * \brief GN3S USB dongle GPS RF front-end signal sampler driver * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GN3S_SIGNAL_SOURCE_H_ #define GN3S_SIGNAL_SOURCE_H_ #include #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class reads samples from a GN3S USB dongle, a RF front-end signal sampler */ class Gn3sSignalSource: public GNSSBlockInterface { public: Gn3sSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue); virtual ~Gn3sSignalSource(); std::string role() { return role_; } /*! * \brief Returns "Gn3sSignalSource". */ std::string implementation() { return "Gn3sSignalSource"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; std::string item_type_; size_t item_size_; long samples_; bool dump_; std::string dump_filename_; gr::block_sptr gn3s_source_; gr::blocks::file_sink::sptr file_sink_; boost::shared_ptr queue_; }; #endif /*GN3S_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/two_bit_cpx_file_signal_source.cc0000644000175000017500000003177312576764164030762 0ustar carlescarles/*! * \file two_bit_cpx_file_signal_source.cc * \brief Implementation of a class that reads signals samples from a 2 bit complex sampler front-end file * and adapts it to a SignalSourceInterface. * \author Javier Arribas, 2015 jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "two_bit_cpx_file_signal_source.h" #include #include #include #include #include #include #include #include "gnss_sdr_valve.h" #include "configuration_interface.h" using google::LogMessage; //DEFINE_string(two_bit_cpx_signal_source, "-", // "If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); TwoBitCpxFileSignalSource::TwoBitCpxFileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_filename = "../data/my_capture.dat"; std::string default_item_type = "byte"; std::string default_dump_filename = "../data/my_capture_dump.dat"; samples_ = configuration->property(role + ".samples", 0); sampling_frequency_ = configuration->property(role + ".sampling_frequency", 0); filename_ = configuration->property(role + ".filename", default_filename); // override value with commandline flag, if present //if (FLAGS_nsr_signal_source.compare("-") != 0) filename_= FLAGS_nsr_signal_source; item_type_ = configuration->property(role + ".item_type", default_item_type); repeat_ = configuration->property(role + ".repeat", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); enable_throttle_control_ = configuration->property(role + ".enable_throttle_control", false); if (item_type_.compare("byte") == 0) { item_size_ = sizeof(char); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using byte."; item_size_ = sizeof(char); } try { file_source_ = gr::blocks::file_source::make(item_size_, filename_.c_str(), repeat_); unpack_byte_ = make_unpack_byte_2bit_cpx_samples(); inter_shorts_to_cpx_ = gr::blocks::interleaved_short_to_complex::make(false,true); //I/Q swap enabled } catch (const std::exception &e) { std::cerr << "The receiver was configured to work with a file signal source " << std::endl << "but the specified file is unreachable by GNSS-SDR." << std::endl << "Please modify your configuration file" << std::endl << "and point SignalSource.filename to a valid raw data file. Then:" << std::endl << "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf" << std::endl << "Examples of configuration files available at:" << std::endl << GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/" << std::endl; LOG(WARNING) << "file_signal_source: Unable to open the samples file " << filename_.c_str() << ", exiting the program."; throw(e); } DLOG(INFO) << "file_source(" << file_source_->unique_id() << ")"; if (samples_ == 0) // read all file { /*! * BUG workaround: The GNU Radio file source does not stop the receiver after reaching the End of File. * A possible solution is to compute the file length in samples using file size, excluding the last 2 milliseconds, and enable always the * valve block */ std::ifstream file (filename_.c_str(), std::ios::in | std::ios::binary | std::ios::ate); std::ifstream::pos_type size; if (file.is_open()) { size = file.tellg(); LOG(INFO) << "Total samples in the file= " << floor((double)size / (double)item_size()); } else { std::cout << "file_signal_source: Unable to open the samples file " << filename_.c_str() << std::endl; LOG(ERROR) << "file_signal_source: Unable to open the samples file " << filename_.c_str(); } std::cout << std::setprecision(16); std::cout << "Processing file " << filename_ << ", which contains " << (double)size << " [bytes]" << std::endl; if (size > 0) { int sample_packet_factor = 2; // 1 byte -> 2 samples samples_ = floor((double)size / (double)item_size())*sample_packet_factor; samples_ = samples_- ceil(0.002 * (double)sampling_frequency_); //process all the samples available in the file excluding the last 2 ms } } CHECK(samples_ > 0) << "File does not contain enough samples to process."; double signal_duration_s; signal_duration_s = (double)samples_ * ( 1 /(double)sampling_frequency_); LOG(INFO) << "Total number samples to be processed= " << samples_ << " GNSS signal duration= " << signal_duration_s << " [s]"; std::cout << "GNSS signal recorded time to be processed: " << signal_duration_s << " [s]" << std::endl; valve_ = gnss_sdr_make_valve(sizeof(gr_complex), samples_, queue_); DLOG(INFO) << "valve(" << valve_->unique_id() << ")"; if (dump_) { //sink_ = gr_make_file_sink(item_size_, dump_filename_.c_str()); sink_ = gr::blocks::file_sink::make(sizeof(gr_complex), dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << sink_->unique_id() << ")"; } if (enable_throttle_control_) { throttle_ = gr::blocks::throttle::make(sizeof(gr_complex), sampling_frequency_); } DLOG(INFO) << "File source filename " << filename_; DLOG(INFO) << "Samples " << samples_; DLOG(INFO) << "Sampling frequency " << sampling_frequency_; DLOG(INFO) << "Item type " << item_type_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "Repeat " << repeat_; DLOG(INFO) << "Dump " << dump_; DLOG(INFO) << "Dump filename " << dump_filename_; } TwoBitCpxFileSignalSource::~TwoBitCpxFileSignalSource() {} void TwoBitCpxFileSignalSource::connect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,inter_shorts_to_cpx_,0); top_block->connect(inter_shorts_to_cpx_, 0,throttle_,0); DLOG(INFO) << "connected file source to throttle"; top_block->connect(throttle_, 0, valve_, 0); DLOG(INFO) << "connected throttle to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } else { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,inter_shorts_to_cpx_,0); top_block->connect(inter_shorts_to_cpx_, 0,valve_,0); DLOG(INFO) << "connected file source to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,inter_shorts_to_cpx_,0); top_block->connect(inter_shorts_to_cpx_, 0,throttle_,0); DLOG(INFO) << "connected file source to throttle"; if (dump_) { top_block->connect(throttle_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } else { if (dump_) { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,inter_shorts_to_cpx_,0); top_block->connect(inter_shorts_to_cpx_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } } } void TwoBitCpxFileSignalSource::disconnect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->connect(unpack_byte_, 0,throttle_,0); DLOG(INFO) << "disconnected unpack_byte_ to throttle_"; top_block->disconnect(throttle_, 0, valve_, 0); DLOG(INFO) << "disconnected throttle to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } else { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->disconnect(unpack_byte_, 0, valve_, 0); DLOG(INFO) << "disconnected unpack_byte_ to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->disconnect(unpack_byte_, 0, throttle_, 0); DLOG(INFO) << "disconnected unpack_byte_ to throttle"; if (dump_) { top_block->disconnect(unpack_byte_, 0, sink_, 0); DLOG(INFO) << "disconnected funpack_byte_ to sink"; } } else { if (dump_) { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->disconnect(unpack_byte_, 0, sink_, 0); DLOG(INFO) << "disconnected unpack_byte_ to sink"; } } } } gr::basic_block_sptr TwoBitCpxFileSignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; //return gr_block_sptr(); return gr::blocks::file_source::sptr(); } gr::basic_block_sptr TwoBitCpxFileSignalSource::get_right_block() { if (samples_ > 0) { return valve_; } else { if (enable_throttle_control_ == true) { return throttle_; } else { return unpack_byte_; } } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/CMakeLists.txt0000644000175000017500000001572412576764164024754 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # # Optional drivers if(ENABLE_GN3S) ############################################## # GN3S (USB dongle) ############################################## # find_package(GrGN3S) # if not found, build it with ExternalPackage_Add include(ExternalProject) ExternalProject_Add( gr-gn3s SOURCE_DIR ${CMAKE_SOURCE_DIR}/drivers/gr-gn3s BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../../../gr-gn3s UPDATE_COMMAND "" PATCH_COMMAND "" INSTALL_COMMAND "" ) # Set up variables set(GRGN3S_INCLUDE_DIRS ${GRGN3S_DIR}/include ${GRGN3S_DIR} ${GRGN3S_DIR}/src) set(GRGN3S_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/../../../../gr-gn3s/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gr-gn3s${CMAKE_SHARED_LIBRARY_SUFFIX}" ) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GRGN3S_LIBRARIES}) set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GRGN3S_INCLUDE_DIRS}) set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} gn3s_signal_source.cc) # Copy GN3S firmware binary file to install folder message(STATUS "Copying the GN3S firmware binary file to install folder") file(COPY ${CMAKE_SOURCE_DIR}/firmware/GN3S_v2/bin/gn3s_firmware.ihx DESTINATION ${CMAKE_SOURCE_DIR}/install/ ) endif(ENABLE_GN3S) if(ENABLE_FLEXIBAND) ############################################## # TELEORBIT FLEXIBAND FRONTEND ADAPTER ############################################## if(OS_IS_MACOSX) set(MACOSX_ARGS "-DCMAKE_CXX_COMPILER=/usr/bin/clang++") endif(OS_IS_MACOSX) find_package(Teleorbit REQUIRED) if(NOT TELEORBIT_FOUND) message(FATAL_ERROR "Teleorbit Flexiband GNURadio driver required to build gnss-sdr with the optional FLEXIBAND adapter") endif(NOT TELEORBIT_FOUND) # Set up variables set(FLEXIBAND_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${TELEORBIT_INCLUDE_DIR}/teleorbit ) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${TELEORBIT_LIBRARIES}) set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${FLEXIBAND_DRIVER_INCLUDE_DIRS}) set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} flexiband_signal_source.cc) endif(ENABLE_FLEXIBAND) if(ENABLE_ARRAY) ############################################## # GRDBFCTTC GNSS EXPERIMENTAL ARRAY PROTOTYPE ############################################## if(OS_IS_MACOSX) set(MACOSX_ARGS "-DCMAKE_CXX_COMPILER=/usr/bin/clang++") endif(OS_IS_MACOSX) # find_package(GrDbfcttc) # if not found, build it with ExternalPackage_Add include(ExternalProject) ExternalProject_Add( gr-dbfcttc SOURCE_DIR ${CMAKE_SOURCE_DIR}/drivers/gr-dbfcttc BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/../../../../gr-dbfcttc UPDATE_COMMAND "" PATCH_COMMAND "" CMAKE_ARGS ${MACOSX_ARGS} INSTALL_COMMAND "" ) # Set up variables set(GRDBFCTTC_INCLUDE_DIRS ${GRDBFCTTC_DIR}/include ${GRDBFCTTC_DIR} ${GRDBFCTTC_DIR}/src) set(GRDBFCTTC_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/../../../../gr-dbfcttc/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnuradio-dbfcttc${CMAKE_SHARED_LIBRARY_SUFFIX}" ) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GRDBFCTTC_LIBRARIES}) set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GRDBFCTTC_INCLUDE_DIRS}) set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} raw_array_signal_source.cc) endif(ENABLE_ARRAY) if(ENABLE_OSMOSDR) ################################################################################ # OsmoSDR - http://sdr.osmocom.org/trac/ ################################################################################ find_package(GrOsmoSDR REQUIRED) if(NOT GROSMOSDR_FOUND) message(FATAL_ERROR "gr-osmosdr required to build gnss-sdr with the optional OSMOSDR driver") endif(NOT GROSMOSDR_FOUND) # set OSMO include dirs set(OSMO_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${GROSMOSDR_INCLUDE_DIR}/osmosdr ) set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} osmosdr_signal_source.cc) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${GROSMOSDR_LIBRARIES}) set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${OSMO_DRIVER_INCLUDE_DIRS}) endif(ENABLE_OSMOSDR) if(ENABLE_UHD) set(OPT_DRIVER_SOURCES ${OPT_DRIVER_SOURCES} uhd_signal_source.cc) set(OPT_LIBRARIES ${OPT_LIBRARIES} ${UHD_LIBRARIES} ${GNURADIO_UHD_LIBRARIES}) set(OPT_DRIVER_INCLUDE_DIRS ${OPT_DRIVER_INCLUDE_DIRS} ${UHD_INCLUDE_DIRS}) endif(ENABLE_UHD) set(SIGNAL_SOURCE_ADAPTER_SOURCES file_signal_source.cc gen_signal_source.cc nsr_file_signal_source.cc spir_file_signal_source.cc rtl_tcp_signal_source.cc ${OPT_DRIVER_SOURCES} ) if(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) set(SIGNAL_SOURCE_ADAPTER_SOURCES ${SIGNAL_SOURCE_ADAPTER_SOURCES} two_bit_cpx_file_signal_source.cc ) endif(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${OPT_DRIVER_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/gnuradio_blocks ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${VOLK_INCLUDE_DIRS} ) if(ARCH_64BITS) add_definitions(-DARCH_64BITS=1) endif(ARCH_64BITS) add_definitions(-DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}") file(GLOB SIGNAL_SOURCE_ADAPTER_HEADERS "*.h") add_library(signal_source_adapters ${SIGNAL_SOURCE_ADAPTER_SOURCES} ${SIGNAL_SOURCE_ADAPTER_HEADERS}) source_group(Headers FILES ${SIGNAL_SOURCE_ADAPTER_HEADERS}) target_link_libraries(signal_source_adapters signal_source_gr_blocks ${Boost_LIBRARIES} ${GNURADIO_PMT_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${OPT_LIBRARIES} gnss_sp_libs ) gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/spir_file_signal_source.cc0000644000175000017500000003102112576764164027400 0ustar carlescarles/*! * \file spir_file_signal_source.cc * \brief Implementation of a class that reads signals samples from a SPIR file * and adapts it to a SignalSourceInterface. * \author Fran Fabra, 2014 fabra(at)ice.csic.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is not part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "spir_file_signal_source.h" #include #include #include #include #include #include #include #include "gnss_sdr_valve.h" #include "configuration_interface.h" using google::LogMessage; DEFINE_string(spir_signal_source, "-", "If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); SpirFileSignalSource::SpirFileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_filename = "../data/my_capture.dat"; std::string default_item_type = "int"; std::string default_dump_filename = "../data/my_capture_dump.dat"; samples_ = configuration->property(role + ".samples", 0); sampling_frequency_ = configuration->property(role + ".sampling_frequency", 0); filename_ = configuration->property(role + ".filename", default_filename); // override value with commandline flag, if present if (FLAGS_spir_signal_source.compare("-") != 0) filename_= FLAGS_spir_signal_source; item_type_ = configuration->property(role + ".item_type", default_item_type); repeat_ = configuration->property(role + ".repeat", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); enable_throttle_control_ = configuration->property(role + ".enable_throttle_control", false); if (item_type_.compare("int") == 0) { item_size_ = sizeof(int); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using int."; item_size_ = sizeof(int); } try { file_source_ = gr::blocks::file_source::make(item_size_, filename_.c_str(), repeat_); unpack_intspir_ = make_unpack_intspir_1bit_samples(); } catch (const std::exception &e) { std::cerr << "The receiver was configured to work with a file signal source " << std::endl << "but the specified file is unreachable by GNSS-SDR." << std::endl << "Please modify your configuration file" << std::endl << "and point SignalSource.filename to a valid raw data file. Then:" << std::endl << "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf" << std::endl << "Examples of configuration files available at:" << std::endl << GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/" << std::endl; LOG(WARNING) << "file_signal_source: Unable to open the samples file " << filename_.c_str() << ", exiting the program."; throw(e); } DLOG(INFO) << "file_source(" << file_source_->unique_id() << ")"; if (samples_ == 0) // read all file { /*! * BUG workaround: The GNU Radio file source does not stop the receiver after reaching the End of File. * A possible solution is to compute the file length in samples using file size, excluding the last 100 milliseconds, and enable always the * valve block */ std::ifstream file (filename_.c_str(), std::ios::in | std::ios::binary | std::ios::ate); std::ifstream::pos_type size; if (file.is_open()) { size = file.tellg(); LOG(INFO) << "Total samples in the file= " << floor((double)size / (double)item_size()); } else { std::cout << "file_signal_source: Unable to open the samples file " << filename_.c_str() << std::endl; LOG(ERROR) << "file_signal_source: Unable to open the samples file " << filename_.c_str(); } std::cout << std::setprecision(16); std::cout << "Processing file " << filename_ << ", which contains " << (double)size << " [bytes]" << std::endl; if (size > 0) { int sample_packet_factor = 1; // 1 int -> 1 complex sample (I&Q from 1 channel) samples_ = floor((double)size / (double)item_size())*sample_packet_factor; samples_ = samples_- ceil(0.002 * (double)sampling_frequency_); //process all the samples available in the file excluding the last 2 ms } } CHECK(samples_ > 0) << "File does not contain enough samples to process."; double signal_duration_s; signal_duration_s = (double)samples_ * ( 1 /(double)sampling_frequency_); LOG(INFO) << "Total number samples to be processed= " << samples_ << " GNSS signal duration= " << signal_duration_s << " [s]"; std::cout << "GNSS signal recorded time to be processed: " << signal_duration_s << " [s]" << std::endl; valve_ = gnss_sdr_make_valve(sizeof(float), samples_, queue_); DLOG(INFO) << "valve(" << valve_->unique_id() << ")"; if (dump_) { //sink_ = gr_make_file_sink(item_size_, dump_filename_.c_str()); sink_ = gr::blocks::file_sink::make(sizeof(float), dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << sink_->unique_id() << ")"; } if (enable_throttle_control_) { throttle_ = gr::blocks::throttle::make(sizeof(float), sampling_frequency_); } DLOG(INFO) << "File source filename " << filename_; DLOG(INFO) << "Samples " << samples_; DLOG(INFO) << "Sampling frequency " << sampling_frequency_; DLOG(INFO) << "Item type " << item_type_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "Repeat " << repeat_; DLOG(INFO) << "Dump " << dump_; DLOG(INFO) << "Dump filename " << dump_filename_; } SpirFileSignalSource::~SpirFileSignalSource() {} void SpirFileSignalSource::connect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, unpack_intspir_, 0); top_block->connect(unpack_intspir_, 0,throttle_,0); DLOG(INFO) << "connected file source to throttle"; top_block->connect(throttle_, 0, valve_, 0); DLOG(INFO) << "connected throttle to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } else { top_block->connect(file_source_, 0, unpack_intspir_, 0); top_block->connect(unpack_intspir_, 0,valve_,0); DLOG(INFO) << "connected file source to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, unpack_intspir_, 0); top_block->connect(unpack_intspir_, 0,throttle_,0); DLOG(INFO) << "connected file source to throttle"; if (dump_) { top_block->connect(throttle_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } else { if (dump_) { top_block->connect(file_source_, 0, unpack_intspir_, 0); top_block->connect(unpack_intspir_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } } } void SpirFileSignalSource::disconnect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, unpack_intspir_, 0); DLOG(INFO) << "disconnected file source to unpack_intspir_"; top_block->connect(unpack_intspir_, 0,throttle_,0); DLOG(INFO) << "disconnected unpack_intspir_ to throttle_"; top_block->disconnect(throttle_, 0, valve_, 0); DLOG(INFO) << "disconnected throttle to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } else { top_block->disconnect(file_source_, 0, unpack_intspir_, 0); DLOG(INFO) << "disconnected file source to unpack_intspir_"; top_block->disconnect(unpack_intspir_, 0, valve_, 0); DLOG(INFO) << "disconnected unpack_intspir_ to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, unpack_intspir_, 0); DLOG(INFO) << "disconnected file source to unpack_intspir_"; top_block->disconnect(unpack_intspir_, 0, throttle_, 0); DLOG(INFO) << "disconnected unpack_intspir_ to throttle"; if (dump_) { top_block->disconnect(unpack_intspir_, 0, sink_, 0); DLOG(INFO) << "disconnected funpack_intspir_ to sink"; } } else { if (dump_) { top_block->disconnect(file_source_, 0, unpack_intspir_, 0); DLOG(INFO) << "disconnected file source to unpack_intspir_"; top_block->disconnect(unpack_intspir_, 0, sink_, 0); DLOG(INFO) << "disconnected unpack_intspir_ to sink"; } } } } gr::basic_block_sptr SpirFileSignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; //return gr_block_sptr(); return gr::blocks::file_source::sptr(); } gr::basic_block_sptr SpirFileSignalSource::get_right_block() { if (samples_ > 0) { return valve_; } else { if (enable_throttle_control_ == true) { return throttle_; } else { return unpack_intspir_; } } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/file_signal_source.cc0000644000175000017500000003170312576764164026352 0ustar carlescarles/*! * \file file_signal_source.cc * \brief Implementation of a class that reads signals samples from a file * and adapts it to a SignalSourceInterface * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Javier Arribas, 2011 jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "file_signal_source.h" #include #include #include #include #include #include #include #include #include "gnss_sdr_valve.h" #include "configuration_interface.h" using google::LogMessage; DEFINE_string(signal_source, "-", "If defined, path to the file containing the signal samples (overrides the configuration file)"); FileSignalSource::FileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_filename = "./example_capture.dat"; std::string default_item_type = "short"; std::string default_dump_filename = "./my_capture.dat"; samples_ = configuration->property(role + ".samples", 0); sampling_frequency_ = configuration->property(role + ".sampling_frequency", 0); filename_ = configuration->property(role + ".filename", default_filename); // override value with commandline flag, if present if (FLAGS_signal_source.compare("-") != 0) filename_= FLAGS_signal_source; item_type_ = configuration->property(role + ".item_type", default_item_type); repeat_ = configuration->property(role + ".repeat", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); enable_throttle_control_ = configuration->property(role + ".enable_throttle_control", false); std::string s = "InputFilter"; //double IF = configuration->property(s + ".IF", 0.0); if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); } else if (item_type_.compare("float") == 0) { item_size_ = sizeof(float); } else if (item_type_.compare("short") == 0) { item_size_ = sizeof(int16_t); } else if (item_type_.compare("ishort") == 0) { item_size_ = sizeof(int16_t); } else if (item_type_.compare("byte") == 0) { item_size_ = sizeof(int8_t); } else if (item_type_.compare("ibyte") == 0) { item_size_ = sizeof(int8_t); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using gr_complex."; item_size_ = sizeof(gr_complex); } try { file_source_ = gr::blocks::file_source::make(item_size_, filename_.c_str(), repeat_); } catch (const std::exception &e) { if (filename_.compare(default_filename) == 0) { std::cerr << "The configuration file has not been found." << std::endl << "Please create a configuration file based on the examples at the 'conf/' folder " << std::endl << "and then generate your own GNSS Software Defined Receiver by doing:" << std::endl << "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf" << std::endl; } else { std::cerr << "The receiver was configured to work with a file signal source " << std::endl << "but the specified file is unreachable by GNSS-SDR." << std::endl << "Please modify your configuration file" << std::endl << "and point SignalSource.filename to a valid raw data file. Then:" << std::endl << "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf" << std::endl << "Examples of configuration files available at:" << std::endl << GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/" << std::endl; } LOG(INFO) << "file_signal_source: Unable to open the samples file " << filename_.c_str() << ", exiting the program."; throw(e); } DLOG(INFO) << "file_source(" << file_source_->unique_id() << ")"; if (samples_ == 0) // read all file { /*! * BUG workaround: The GNU Radio file source does not stop the receiver after reaching the End of File. * A possible solution is to compute the file length in samples using file size, excluding the last 100 milliseconds, and enable always the * valve block */ std::ifstream file (filename_.c_str(), std::ios::in | std::ios::binary | std::ios::ate); std::ifstream::pos_type size; if (file.is_open()) { size = file.tellg(); DLOG(INFO) << "Total samples in the file= " << floor(static_cast(size) / static_cast(item_size())); } else { std::cout << "file_signal_source: Unable to open the samples file " << filename_.c_str() << std::endl; LOG(ERROR) << "file_signal_source: Unable to open the samples file " << filename_.c_str(); } std::cout << std::setprecision(16); std::cout << "Processing file " << filename_ << ", which contains " << static_cast(size) << " [bytes]" << std::endl; if (size > 0) { samples_ = floor(static_cast(size) / static_cast(item_size()) - ceil(0.002 * static_cast(sampling_frequency_))); //process all the samples available in the file excluding at least the last 1 ms } } CHECK(samples_ > 0) << "File does not contain enough samples to process."; double signal_duration_s; signal_duration_s = static_cast(samples_) * ( 1 / static_cast(sampling_frequency_)); if ((item_type_.compare("gr_complex") != 0) || (item_type_.compare("ishort") != 0) || (item_type_.compare("ibyte") != 0) ) // signal is complex (interleaved) { signal_duration_s /= 2; } DLOG(INFO) << "Total number samples to be processed= " << samples_ << " GNSS signal duration= " << signal_duration_s << " [s]"; std::cout << "GNSS signal recorded time to be processed: " << signal_duration_s << " [s]" << std::endl; valve_ = gnss_sdr_make_valve(item_size_, samples_, queue_); DLOG(INFO) << "valve(" << valve_->unique_id() << ")"; if (dump_) { sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << sink_->unique_id() << ")"; } if (enable_throttle_control_) { throttle_ = gr::blocks::throttle::make(item_size_, sampling_frequency_); } DLOG(INFO) << "File source filename " << filename_; DLOG(INFO) << "Samples " << samples_; DLOG(INFO) << "Sampling frequency " << sampling_frequency_; DLOG(INFO) << "Item type " << item_type_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "Repeat " << repeat_; DLOG(INFO) << "Dump " << dump_; DLOG(INFO) << "Dump filename " << dump_filename_; } FileSignalSource::~FileSignalSource() {} void FileSignalSource::connect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, throttle_, 0); DLOG(INFO) << "connected file source to throttle"; top_block->connect(throttle_, 0, valve_, 0); DLOG(INFO) << "connected throttle to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } else { top_block->connect(file_source_, 0, valve_, 0); DLOG(INFO) << "connected file source to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, throttle_, 0); DLOG(INFO) << "connected file source to throttle"; if (dump_) { top_block->connect(file_source_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } else { if (dump_) { top_block->connect(file_source_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } } } void FileSignalSource::disconnect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, throttle_, 0); DLOG(INFO) << "disconnected file source to throttle"; top_block->disconnect(throttle_, 0, valve_, 0); DLOG(INFO) << "disconnected throttle to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } else { top_block->disconnect(file_source_, 0, valve_, 0); DLOG(INFO) << "disconnected file source to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, throttle_, 0); DLOG(INFO) << "disconnected file source to throttle"; if (dump_) { top_block->disconnect(file_source_, 0, sink_, 0); DLOG(INFO) << "disconnected file source to sink"; } } else { if (dump_) { top_block->disconnect(file_source_, 0, sink_, 0); DLOG(INFO) << "disconnected file source to sink"; } } } } gr::basic_block_sptr FileSignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; return gr::blocks::file_source::sptr(); } gr::basic_block_sptr FileSignalSource::get_right_block() { if (samples_ > 0) { return valve_; } else { if (enable_throttle_control_ == true) { return throttle_; } else { return file_source_; } } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/flexiband_signal_source.h0000644000175000017500000000624212576764164027231 0ustar carlescarles/*! * \file raw_array_signal_source.h * \brief Signal Source adapter for the Teleorbit Flexiband front-end device. * This adapter requires a Flexiband GNURadio driver installed (not included with GNSS-SDR) * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef FLEXIBAND_SIGNAL_SOURCE_H_ #define FLEXIBAND_SIGNAL_SOURCE_H_ #include #include #include #include #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class configures and reads samples from Teleorbit Flexiband front-end. * This software requires a Flexiband GNU Radio driver installed (not included with GNSS-SDR). */ class FlexibandSignalSource: public GNSSBlockInterface { public: FlexibandSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue); virtual ~FlexibandSignalSource(); std::string role() { return role_; } /*! * \brief Returns "Flexiband_Signal_Source". */ std::string implementation() { return "Flexiband_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); gr::basic_block_sptr get_right_block(int RF_channel); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; std::string item_type_; size_t item_size_; std::string firmware_filename_; int gain1_; int gain2_; int gain3_; int usb_packet_buffer_size_; bool AGC_; std::string signal_file; bool flag_read_file; int RF_channels_; gr::block_sptr flexiband_source_; std::vector> char_to_float; std::vector> float_to_complex_; boost::shared_ptr queue_; }; #endif /*FLEXIBAND_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/spir_file_signal_source.h0000644000175000017500000000664312576764164027256 0ustar carlescarles/*! * \file spir_file_signal_source.h * \brief Implementation of a class that reads signals samples from a SPIR file * and adapts it to a SignalSourceInterface. * \author Fran Fabra, 2014 fabra(at)ice.csic.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is not part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_ #define GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_ #include #include #include #include #include #include #include "gnss_block_interface.h" #include "unpack_intspir_1bit_samples.h" class ConfigurationInterface; /*! * \brief Class that reads signals samples from a file * and adapts it to a SignalSourceInterface */ class SpirFileSignalSource: public GNSSBlockInterface { public: SpirFileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); virtual ~SpirFileSignalSource(); std::string role() { return role_; } /*! * \brief Returns "Spir_File_Signal_Source". */ std::string implementation() { return "Spir_File_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); std::string filename() { return filename_; } std::string item_type() { return item_type_; } bool repeat() { return repeat_; } long sampling_frequency() { return sampling_frequency_; } long samples() { return samples_; } private: unsigned long long samples_; long sampling_frequency_; std::string filename_; std::string item_type_; bool repeat_; bool dump_; std::string dump_filename_; std::string role_; unsigned int in_streams_; unsigned int out_streams_; gr::blocks::file_source::sptr file_source_; unpack_intspir_1bit_samples_sptr unpack_intspir_; boost::shared_ptr valve_; gr::blocks::file_sink::sptr sink_; gr::blocks::throttle::sptr throttle_; boost::shared_ptr queue_; size_t item_size_; // Throttle control bool enable_throttle_control_; }; #endif /*GNSS_SDR_SPIR_FILE_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/uhd_signal_source.cc0000644000175000017500000003164412576764164026217 0ustar carlescarles/*! * \file uhd_signal_source.cc * \brief Universal Hardware Driver signal source * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "uhd_signal_source.h" #include #include #include #include #include #include "configuration_interface.h" #include "gnss_sdr_valve.h" #include "GPS_L1_CA.h" using google::LogMessage; UhdSignalSource::UhdSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { // DUMP PARAMETERS std::string empty = ""; std::string default_dump_file = "./data/signal_source.dat"; std::string default_item_type = "cshort"; // UHD COMMON PARAMETERS uhd::device_addr_t dev_addr; device_address_ = configuration->property(role + ".device_address", empty); // When left empty, the device discovery routines will search all // available transports on the system (ethernet, usb...). // To narrow down the discovery process to a particular device, // specify a transport key/value pair specific to your device. if (empty.compare(device_address_) != 0) // if not empty { dev_addr["addr"] = device_address_; } subdevice_ = configuration->property(role + ".subdevice", empty); clock_source_ = configuration->property(role + ".clock_source", std::string("internal")); RF_channels_ = configuration->property(role + ".RF_channels", 1); sample_rate_ = configuration->property(role + ".sampling_frequency", (double)4.0e6); item_type_ = configuration->property(role + ".item_type", default_item_type); if (RF_channels_ == 1) { // Single RF channel UHD operation (backward compatible config file format) samples_.push_back(configuration->property(role + ".samples", 0)); dump_.push_back(configuration->property(role + ".dump", false)); dump_filename_.push_back(configuration->property(role + ".dump_filename", default_dump_file)); freq_.push_back(configuration->property(role + ".freq", GPS_L1_FREQ_HZ)); gain_.push_back(configuration->property(role + ".gain", (double)50.0)); IF_bandwidth_hz_.push_back(configuration->property(role + ".IF_bandwidth_hz", sample_rate_/2)); } else { // multiple RF channels selected for (int i = 0; i < RF_channels_; i++) { // Single RF channel UHD operation (backward compatible config file format) samples_.push_back(configuration->property(role + ".samples" + boost::lexical_cast(i), 0)); dump_.push_back(configuration->property(role + ".dump" + boost::lexical_cast(i), false)); dump_filename_.push_back(configuration->property(role + ".dump_filename" + boost::lexical_cast(i), default_dump_file)); freq_.push_back(configuration->property(role + ".freq" + boost::lexical_cast(i), GPS_L1_FREQ_HZ)); gain_.push_back(configuration->property(role + ".gain" + boost::lexical_cast(i), (double)50.0)); IF_bandwidth_hz_.push_back(configuration->property(role + ".IF_bandwidth_hz" + boost::lexical_cast(i), sample_rate_/2)); } } // 1. Make the uhd driver instance //uhd_source_= uhd::usrp::multi_usrp::make(dev_addr); // single source // param: device_addr the address to identify the hardware // param: io_type the desired output data type // fc64: Complex floating point (64-bit floats) range [-1.0, +1.0]. // fc32: Complex floating point (32-bit floats) range [-1.0, +1.0]. // sc16: Complex signed integer (16-bit integers) range [-32768, +32767]. // sc8: Complex signed integer (8-bit integers) range [-128, 127]. if (item_type_.compare("cbyte") == 0) { item_size_ = sizeof(lv_8sc_t); uhd_stream_args_ = uhd::stream_args_t("sc8"); } else if (item_type_.compare("cshort") == 0) { item_size_ = sizeof(lv_16sc_t); uhd_stream_args_ = uhd::stream_args_t("sc16"); } else if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); uhd_stream_args_ = uhd::stream_args_t("fc32"); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using cshort."; item_size_ = sizeof(lv_16sc_t); uhd_stream_args_ = uhd::stream_args_t("sc16"); } // select the number of channels and the subdevice specifications for (int i = 0; i < RF_channels_; i++) { uhd_stream_args_.channels.push_back(i); } // 1.2 Make the UHD source object uhd_source_ = gr::uhd::usrp_source::make(dev_addr, uhd_stream_args_); // Set subdevice specification string for USRP family devices. It is composed of: // : // For motherboards: All USRP family motherboards have a first slot named A:. // The USRP1 has two daughterboard subdevice slots, known as A: and B:. // For daughterboards, see http://files.ettus.com/uhd_docs/manual/html/dboards.html // "0" is valid for DBSRX, DBSRX2, WBX Series // Dual channel example: "A:0 B:0" // TODO: Add support for multiple motherboards (i.e. four channels "A:0 B:0 A:1 B1") uhd_source_->set_subdev_spec(subdevice_, 0); // 2.1 set sampling clock reference // Set the clock source for the usrp device. // Options: internal, external, or MIMO uhd_source_->set_clock_source(clock_source_); // 2.2 set the sample rate for the usrp device uhd_source_->set_samp_rate(sample_rate_); // the actual sample rate may differ from the rate set std::cout << boost::format("Sampling Rate for the USRP device: %f [sps]...") % (uhd_source_->get_samp_rate()) << std::endl; LOG(INFO) << boost::format("Sampling Rate for the USRP device: %f [sps]...") % (uhd_source_->get_samp_rate()); std::vector sensor_names; for (int i = 0; i < RF_channels_; i++) { std::cout << "UHD RF CHANNEL #" << i << " SETTINGS" << std::endl; // 3. Tune the usrp device to the desired center frequency uhd_source_->set_center_freq(freq_.at(i), i); std::cout << boost::format("Actual USRP center freq.: %f [Hz]...") % (uhd_source_->get_center_freq(i)) << std::endl; LOG(INFO) << boost::format("Actual USRP center freq. set to: %f [Hz]...") % (uhd_source_->get_center_freq(i)); // TODO: Assign the remnant IF from the PLL tune error std::cout << boost::format("PLL Frequency tune error %f [Hz]...") % (uhd_source_->get_center_freq(i) - freq_.at(i)) << std::endl; LOG(INFO) << boost::format("PLL Frequency tune error %f [Hz]...") % (uhd_source_->get_center_freq(i) - freq_.at(i)); // 4. set the gain for the daughterboard uhd_source_->set_gain(gain_.at(i), i); std::cout << boost::format("Actual daughterboard gain set to: %f dB...") % uhd_source_->get_gain(i) << std::endl; LOG(INFO) << boost::format("Actual daughterboard gain set to: %f dB...") % uhd_source_->get_gain(i); //5. Set the bandpass filter on the RF frontend std::cout << boost::format("Setting RF bandpass filter bandwidth to: %f [Hz]...") % IF_bandwidth_hz_.at(i) << std::endl; uhd_source_->set_bandwidth(IF_bandwidth_hz_.at(i), i); //set the antenna (optional) //uhd_source_->set_antenna(ant); // We should wait? #include // boost::this_thread::sleep(boost::posix_time::seconds(1)); // Check out the status of the lo_locked sensor (boolean for LO lock state) sensor_names = uhd_source_->get_sensor_names(i); if (std::find(sensor_names.begin(), sensor_names.end(), "lo_locked") != sensor_names.end()) { uhd::sensor_value_t lo_locked = uhd_source_->get_sensor("lo_locked", i); std::cout << boost::format("Check for front-end %s ...") % lo_locked.to_pp_string() << " is "; if (lo_locked.to_bool() == true) { std::cout << "Locked" << std::endl; } else { std::cout << "UNLOCKED!" << std::endl; } //UHD_ASSERT_THROW(lo_locked.to_bool()); } } for (int i = 0; i < RF_channels_; i++) { if (samples_.at(i) != 0) { LOG(INFO) << "RF_channel "<< i << " Send STOP signal after " << samples_.at(i) << " samples"; valve_.push_back(gnss_sdr_make_valve(item_size_, samples_.at(i), queue_)); DLOG(INFO) << "valve(" << valve_.at(i)->unique_id() << ")"; } if (dump_.at(i)) { LOG(INFO) << "RF_channel "<< i << "Dumping output into file " << dump_filename_.at(i); file_sink_.push_back(gr::blocks::file_sink::make(item_size_, dump_filename_.at(i).c_str())); DLOG(INFO) << "file_sink(" << file_sink_.at(i)->unique_id() << ")"; } } } UhdSignalSource::~UhdSignalSource() {} void UhdSignalSource::connect(gr::top_block_sptr top_block) { for (int i = 0; i < RF_channels_; i++) { if (samples_.at(i) != 0) { top_block->connect(uhd_source_, i, valve_.at(i), 0); DLOG(INFO) << "connected usrp source to valve RF Channel " << i; if (dump_.at(i)) { top_block->connect(valve_.at(i), 0, file_sink_.at(i), 0); DLOG(INFO) << "connected valve to file sink RF Channel " << i; } } else { if (dump_.at(i)) { top_block->connect(uhd_source_, i, file_sink_.at(i), 0); DLOG(INFO) << "connected usrp source to file sink RF Channel " << i; } } } } void UhdSignalSource::disconnect(gr::top_block_sptr top_block) { for (int i = 0; i < RF_channels_; i++) { if (samples_.at(i) != 0) { top_block->disconnect(uhd_source_, i, valve_.at(i), 0); LOG(INFO) << "UHD source disconnected"; if (dump_.at(i)) { top_block->disconnect(valve_.at(i), 0, file_sink_.at(i), 0); } } else { if (dump_.at(i)) { top_block->disconnect(uhd_source_, i, file_sink_.at(i), 0); } } } } gr::basic_block_sptr UhdSignalSource::get_left_block() { LOG(WARNING) << "Trying to get signal source left block."; //return gr_basic_block_sptr(); return gr::uhd::usrp_source::sptr(); } gr::basic_block_sptr UhdSignalSource::get_right_block() { return get_right_block(0); } gr::basic_block_sptr UhdSignalSource::get_right_block(int RF_channel) { //TODO: There is a incoherence here: Multichannel UHD is a single block with multiple outputs, but if the sample limit is enabled, the output is a multiple block! if (samples_.at(RF_channel) != 0) { return valve_.at(RF_channel); } else { return uhd_source_; } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.h0000644000175000017500000000615212576764164026744 0ustar carlescarles/*! * \file rtl_tcp_signal_source.h * \brief Signal source which reads from rtl_tcp. * (see http://sdr.osmocom.org/trac/wiki/rtl-sdr for more information) * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H #define GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H #include #include #include #include #include #include #include "rtl_tcp_signal_source_c.h" #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class reads from rtl_tcp, which streams interleaved * I/Q samples over TCP. * (see http://sdr.osmocom.org/trac/wiki/rtl-sdr) */ class RtlTcpSignalSource: public GNSSBlockInterface { public: RtlTcpSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue); virtual ~RtlTcpSignalSource(); std::string role() { return role_; } /*! * \brief Returns "RtlTcp_Signal_Source" */ std::string implementation() { return "RtlTcp_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; // rtl_tcp settings std::string address_; short port_; bool AGC_enabled_; double sample_rate_; bool flip_iq_; unsigned int in_stream_; unsigned int out_stream_; double freq_; double gain_; double if_gain_; double rf_gain_; std::string item_type_; size_t item_size_; long samples_; bool dump_; std::string dump_filename_; rtl_tcp_signal_source_c_sptr signal_source_; boost::shared_ptr valve_; gr::blocks::file_sink::sptr file_sink_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_RTL_TCP_SIGNAL_SOURCE_H */ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/osmosdr_signal_source.h0000644000175000017500000000614112576764164026761 0ustar carlescarles/*! * \file osmosdr_signal_source.h * \brief Signal source wrapper for OsmoSDR-compatible front-ends, such as * HackRF or Realtek's RTL2832U-based USB dongle DVB-T receivers * (see http://sdr.osmocom.org/trac/wiki/rtl-sdr for more information) * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_ #define GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_ #include #include #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class reads samples OsmoSDR-compatible front-ends, such as * HackRF or Realtek's RTL2832U-based USB dongle DVB-T receivers * (see http://sdr.osmocom.org/trac/wiki/rtl-sdr) */ class OsmosdrSignalSource: public GNSSBlockInterface { public: OsmosdrSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue); virtual ~OsmosdrSignalSource(); std::string role() { return role_; } /*! * \brief Returns "Osmosdr_Signal_Source" */ std::string implementation() { return "Osmosdr_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; // UHD SETTINGS bool AGC_enabled_; double sample_rate_; unsigned int in_stream_; unsigned int out_stream_; double freq_; double gain_; double if_gain_; double rf_gain_; std::string item_type_; size_t item_size_; long samples_; bool dump_; std::string dump_filename_; osmosdr::source::sptr osmosdr_source_; std::string osmosdr_args_; boost::shared_ptr valve_; gr::blocks::file_sink::sptr file_sink_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_OSMOSDR_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/gen_signal_source.cc0000644000175000017500000000573412576764164026211 0ustar carlescarles/*! * \file gen_signal_source.cc * \brief It wraps blocks that generates synthesized GNSS signal and filters * it. * \author Marc Molina, 2013. marc.molina.pena@gmail.com * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gen_signal_source.h" #include #include #include #include #include #include #include using google::LogMessage; // Constructor GenSignalSource::GenSignalSource(ConfigurationInterface *configuration, GNSSBlockInterface *signal_generator, GNSSBlockInterface *filter, std::string role, boost::shared_ptr queue) : signal_generator_(signal_generator), filter_(filter), role_(role), queue_(queue) { connected_ = false; } // Destructor GenSignalSource::~GenSignalSource() { delete signal_generator_; delete filter_; } void GenSignalSource::connect(gr::top_block_sptr top_block) { if (connected_) { LOG(WARNING) << "Signal conditioner already connected internally"; return; } signal_generator_->connect(top_block); filter_->connect(top_block); top_block->connect(signal_generator_->get_right_block(), 0, filter_->get_left_block(), 0); DLOG(INFO) << "signal_generator -> filter"; connected_ = true; } void GenSignalSource::disconnect(gr::top_block_sptr top_block) { if (!connected_) { LOG(WARNING) << "Signal conditioner already disconnected internally"; return; } top_block->disconnect(signal_generator_->get_right_block(), 0, filter_->get_left_block(), 0); signal_generator_->disconnect(top_block); filter_->disconnect(top_block); connected_ = false; } gr::basic_block_sptr GenSignalSource::get_left_block() { return signal_generator_->get_left_block(); } gr::basic_block_sptr GenSignalSource::get_right_block() { return filter_->get_right_block(); } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/raw_array_signal_source.h0000644000175000017500000000514712576764164027267 0ustar carlescarles/*! * \file raw_array_signal_source.h * \brief CTTC Experimental GNSS 8 channels array signal source * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef RAW_ARRAY_SIGNAL_SOURCE_H_ #define RAW_ARRAY_SIGNAL_SOURCE_H_ #include #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class reads samples from a GN3S USB dongle, a RF front-end signal sampler */ class RawArraySignalSource: public GNSSBlockInterface { public: RawArraySignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue); virtual ~RawArraySignalSource(); std::string role() { return role_; } /*! * \brief Returns "RawArraySignalSource". */ std::string implementation() { return "Raw_Array_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; std::string item_type_; size_t item_size_; long samples_; bool dump_; std::string dump_filename_; std::string eth_device_; gr::block_sptr raw_array_source_; gr::blocks::file_sink::sptr file_sink_; boost::shared_ptr queue_; }; #endif /*RAW_ARRAY_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/nsr_file_signal_source.cc0000644000175000017500000003107612576764164027237 0ustar carlescarles/*! * \file nsr_file_signal_source.cc * \brief Implementation of a class that reads signals samples from a NSR 2 bits sampler front-end file * and adapts it to a SignalSourceInterface. More information about the front-end here * http://www.ifen.com/products/sx-scientific-gnss-solutions/nsr-software-receiver.html * \author Javier Arribas, 2013 jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "nsr_file_signal_source.h" #include #include #include #include #include #include #include #include "gnss_sdr_valve.h" #include "configuration_interface.h" using google::LogMessage; DEFINE_string(nsr_signal_source, "-", "If defined, path to the file containing the NSR (byte to 2-bit packed) signal samples (overrides the configuration file)"); NsrFileSignalSource::NsrFileSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) : role_(role), in_streams_(in_streams), out_streams_(out_streams), queue_(queue) { std::string default_filename = "../data/my_capture.dat"; std::string default_item_type = "byte"; std::string default_dump_filename = "../data/my_capture_dump.dat"; samples_ = configuration->property(role + ".samples", 0); sampling_frequency_ = configuration->property(role + ".sampling_frequency", 0); filename_ = configuration->property(role + ".filename", default_filename); // override value with commandline flag, if present if (FLAGS_nsr_signal_source.compare("-") != 0) filename_= FLAGS_nsr_signal_source; item_type_ = configuration->property(role + ".item_type", default_item_type); repeat_ = configuration->property(role + ".repeat", false); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename); enable_throttle_control_ = configuration->property(role + ".enable_throttle_control", false); if (item_type_.compare("byte") == 0) { item_size_ = sizeof(char); } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using byte."; item_size_ = sizeof(char); } try { file_source_ = gr::blocks::file_source::make(item_size_, filename_.c_str(), repeat_); unpack_byte_ = make_unpack_byte_2bit_samples(); } catch (const std::exception &e) { std::cerr << "The receiver was configured to work with a file signal source " << std::endl << "but the specified file is unreachable by GNSS-SDR." << std::endl << "Please modify your configuration file" << std::endl << "and point SignalSource.filename to a valid raw data file. Then:" << std::endl << "$ gnss-sdr --config_file=/path/to/my_GNSS_SDR_configuration.conf" << std::endl << "Examples of configuration files available at:" << std::endl << GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/" << std::endl; LOG(WARNING) << "file_signal_source: Unable to open the samples file " << filename_.c_str() << ", exiting the program."; throw(e); } DLOG(INFO) << "file_source(" << file_source_->unique_id() << ")"; if (samples_ == 0) // read all file { /*! * BUG workaround: The GNU Radio file source does not stop the receiver after reaching the End of File. * A possible solution is to compute the file length in samples using file size, excluding the last 2 milliseconds, and enable always the * valve block */ std::ifstream file (filename_.c_str(), std::ios::in | std::ios::binary | std::ios::ate); std::ifstream::pos_type size; if (file.is_open()) { size = file.tellg(); LOG(INFO) << "Total samples in the file= " << floor((double)size / (double)item_size()); } else { std::cout << "file_signal_source: Unable to open the samples file " << filename_.c_str() << std::endl; LOG(ERROR) << "file_signal_source: Unable to open the samples file " << filename_.c_str(); } std::cout << std::setprecision(16); std::cout << "Processing file " << filename_ << ", which contains " << (double)size << " [bytes]" << std::endl; if (size > 0) { int sample_packet_factor = 4; // 1 byte -> 4 samples samples_ = floor((double)size / (double)item_size())*sample_packet_factor; samples_ = samples_- ceil(0.002 * (double)sampling_frequency_); //process all the samples available in the file excluding the last 2 ms } } CHECK(samples_ > 0) << "File does not contain enough samples to process."; double signal_duration_s; signal_duration_s = (double)samples_ * ( 1 /(double)sampling_frequency_); LOG(INFO) << "Total number samples to be processed= " << samples_ << " GNSS signal duration= " << signal_duration_s << " [s]"; std::cout << "GNSS signal recorded time to be processed: " << signal_duration_s << " [s]" << std::endl; valve_ = gnss_sdr_make_valve(sizeof(float), samples_, queue_); DLOG(INFO) << "valve(" << valve_->unique_id() << ")"; if (dump_) { //sink_ = gr_make_file_sink(item_size_, dump_filename_.c_str()); sink_ = gr::blocks::file_sink::make(sizeof(float), dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << sink_->unique_id() << ")"; } if (enable_throttle_control_) { throttle_ = gr::blocks::throttle::make(sizeof(float), sampling_frequency_); } DLOG(INFO) << "File source filename " << filename_; DLOG(INFO) << "Samples " << samples_; DLOG(INFO) << "Sampling frequency " << sampling_frequency_; DLOG(INFO) << "Item type " << item_type_; DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "Repeat " << repeat_; DLOG(INFO) << "Dump " << dump_; DLOG(INFO) << "Dump filename " << dump_filename_; } NsrFileSignalSource::~NsrFileSignalSource() {} void NsrFileSignalSource::connect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,throttle_,0); DLOG(INFO) << "connected file source to throttle"; top_block->connect(throttle_, 0, valve_, 0); DLOG(INFO) << "connected throttle to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } else { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,valve_,0); DLOG(INFO) << "connected file source to valve"; if (dump_) { top_block->connect(valve_, 0, sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0,throttle_,0); DLOG(INFO) << "connected file source to throttle"; if (dump_) { top_block->connect(throttle_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } else { if (dump_) { top_block->connect(file_source_, 0, unpack_byte_, 0); top_block->connect(unpack_byte_, 0, sink_, 0); DLOG(INFO) << "connected file source to sink"; } } } } void NsrFileSignalSource::disconnect(gr::top_block_sptr top_block) { if (samples_ > 0) { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->connect(unpack_byte_, 0,throttle_,0); DLOG(INFO) << "disconnected unpack_byte_ to throttle_"; top_block->disconnect(throttle_, 0, valve_, 0); DLOG(INFO) << "disconnected throttle to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } else { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->disconnect(unpack_byte_, 0, valve_, 0); DLOG(INFO) << "disconnected unpack_byte_ to valve"; if (dump_) { top_block->disconnect(valve_, 0, sink_, 0); DLOG(INFO) << "disconnected valve to file sink"; } } } else { if (enable_throttle_control_ == true) { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->disconnect(unpack_byte_, 0, throttle_, 0); DLOG(INFO) << "disconnected unpack_byte_ to throttle"; if (dump_) { top_block->disconnect(unpack_byte_, 0, sink_, 0); DLOG(INFO) << "disconnected funpack_byte_ to sink"; } } else { if (dump_) { top_block->disconnect(file_source_, 0, unpack_byte_, 0); DLOG(INFO) << "disconnected file source to unpack_byte_"; top_block->disconnect(unpack_byte_, 0, sink_, 0); DLOG(INFO) << "disconnected unpack_byte_ to sink"; } } } } gr::basic_block_sptr NsrFileSignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; //return gr_block_sptr(); return gr::blocks::file_source::sptr(); } gr::basic_block_sptr NsrFileSignalSource::get_right_block() { if (samples_ > 0) { return valve_; } else { if (enable_throttle_control_ == true) { return throttle_; } else { return unpack_byte_; } } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/rtl_tcp_signal_source.cc0000644000175000017500000001476312576764164027111 0ustar carlescarles/*! * \file rtl_tcp_signal_source.cc * \brief Signal source for the Realtek RTL2832U USB dongle DVB-T receiver * over TCP. * (see http://sdr.osmocom.org/trac/wiki/rtl-sdr for more information) * \author Anthony Arnold, 2015. anthony.arnold(at)uqconnect.edu.au * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "rtl_tcp_signal_source.h" #include #include #include #include "configuration_interface.h" #include "gnss_sdr_valve.h" #include "GPS_L1_CA.h" using google::LogMessage; RtlTcpSignalSource::RtlTcpSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { // DUMP PARAMETERS std::string empty = ""; std::string default_dump_file = "./data/signal_source.dat"; std::string default_item_type = "gr_complex"; samples_ = configuration->property(role + ".samples", 0); dump_ = configuration->property(role + ".dump", false); dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); // rtl_tcp PARAMTERS std::string default_address = "127.0.0.1"; short default_port = 1234; AGC_enabled_ = configuration->property(role + ".AGC_enabled", true); freq_ = configuration->property(role + ".freq", GPS_L1_FREQ_HZ); gain_ = configuration->property(role + ".gain", (double)40.0); rf_gain_ = configuration->property(role + ".rf_gain", (double)40.0); if_gain_ = configuration->property(role + ".if_gain", (double)40.0); sample_rate_ = configuration->property(role + ".sampling_frequency", (double)2.0e6); item_type_ = configuration->property(role + ".item_type", default_item_type); address_ = configuration->property(role + ".address", default_address); port_ = configuration->property(role + ".port", default_port); flip_iq_ = configuration->property(role + ".flip_iq", false); if (item_type_.compare("short") == 0) { item_size_ = sizeof(short); } else if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); // 1. Make the gr block try { std::cout << "Connecting to " << address_ << ":" << port_ << std::endl; LOG (INFO) << "Connecting to " << address_ << ":" << port_; signal_source_ = rtl_tcp_make_signal_source_c (address_, port_, flip_iq_); } catch( boost::exception & e ) { DLOG(FATAL) << "Boost exception: " << boost::diagnostic_information(e); } // 2 set sampling rate signal_source_->set_sample_rate(sample_rate_); // 3. set rx frequency signal_source_->set_frequency(freq_); // 4. set rx gain signal_source_->set_agc_mode(true); if (this->AGC_enabled_ == true) { std::cout << "AGC enabled" << std::endl; LOG(INFO) << "AGC enabled"; signal_source_->set_agc_mode(true); } else { std::cout << "AGC disabled" << std::endl; LOG(INFO) << "AGC disabled"; signal_source_->set_agc_mode(false); std::cout << "Setting gain to " << gain_ << std::endl; LOG(INFO) << "Setting gain to " << gain_; signal_source_->set_gain(gain_); std::cout << "Setting IF gain to " << if_gain_ << std::endl; LOG(INFO) << "Setting IF gain to " << if_gain_; signal_source_->set_if_gain(if_gain_); } } else { LOG(WARNING) << item_type_ << " unrecognized item type. Using short."; item_size_ = sizeof(short); } if (samples_ != 0) { DLOG(INFO) << "Send STOP signal after " << samples_ << " samples"; valve_ = gnss_sdr_make_valve(item_size_, samples_, queue_); DLOG(INFO) << "valve(" << valve_->unique_id() << ")"; } if (dump_) { DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } } RtlTcpSignalSource::~RtlTcpSignalSource() {} void RtlTcpSignalSource::connect(gr::top_block_sptr top_block) { if ( samples_ ) { top_block->connect (signal_source_, 0, valve_, 0); DLOG(INFO) << "connected rtl tcp source to valve"; if ( dump_ ) { top_block->connect(valve_, 0, file_sink_, 0); DLOG(INFO) << "connected valve to file sink"; } } else if ( dump_ ) { top_block->connect(signal_source_, 0, file_sink_, 0); DLOG(INFO) << "connected rtl tcp source to file sink"; } } void RtlTcpSignalSource::disconnect(gr::top_block_sptr top_block) { if ( samples_ ) { top_block->disconnect (signal_source_, 0, valve_, 0); if ( dump_ ) { top_block->disconnect(valve_, 0, file_sink_, 0); } } else if ( dump_ ) { top_block->disconnect(signal_source_, 0, file_sink_, 0); } } gr::basic_block_sptr RtlTcpSignalSource::get_left_block() { LOG(WARNING) << "Trying to get signal source left block."; return gr::basic_block_sptr(); } gr::basic_block_sptr RtlTcpSignalSource::get_right_block() { if (samples_ != 0) { return valve_; } else { return signal_source_; } } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/raw_array_signal_source.cc0000644000175000017500000001110012576764164027407 0ustar carlescarles/*! * \file raw_array_signal_source.cc * \brief CTTC Experimental GNSS 8 channels array signal source * \author Javier Arribas, jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "raw_array_signal_source.h" #include #include #include #include #include "configuration_interface.h" using google::LogMessage; RawArraySignalSource::RawArraySignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, gr::msg_queue::sptr queue) : role_(role), in_stream_(in_stream), out_stream_(out_stream), queue_(queue) { std::string default_item_type = "gr_complex"; std::string default_dump_file = "./data/raw_array_source.dat"; item_type_ = configuration->property(role + ".item_type", default_item_type); //dump_ = configuration->property(role + ".dump", false); //dump_filename_ = configuration->property(role + ".dump_filename", default_dump_file); dump_=false; std::string default_ethernet_dev = "eth0"; eth_device_ = configuration->property(role + ".ethernet_dev", default_ethernet_dev); int channels_; channels_ = configuration->property(role + ".channels", 8); int snapshots_per_frame_; snapshots_per_frame_ = configuration->property(role + ".snapshots_per_frame", 80); int inter_frame_delay_; inter_frame_delay_ = configuration->property(role + ".inter_frame_delay", 10); int sampling_freq_; sampling_freq_ = configuration->property(role + ".sampling_freq", 5000000); if (item_type_.compare("gr_complex") == 0) { item_size_ = sizeof(gr_complex); raw_array_source_ = gr::dbfcttc::raw_array::make(eth_device_.c_str(),channels_,snapshots_per_frame_,inter_frame_delay_,sampling_freq_); DLOG(INFO) << "Item size " << item_size_; DLOG(INFO) << "raw_array_source(" << raw_array_source_->unique_id() << ")"; } // else if (item_type_.compare("short") == 0) // { // item_size_ = sizeof(short); // resampler_ = direct_resampler_make_conditioner_ss(sample_freq_in_, // sample_freq_out_); // } else { LOG(WARNING) << item_type_ << " unrecognized item type for raw_array_source_"; item_size_ = sizeof(gr_complex); } if (dump_) { //TODO: multichannel recorder DLOG(INFO) << "Dumping output into file " << dump_filename_; file_sink_ = gr::blocks::file_sink::make(item_size_, dump_filename_.c_str()); } if (dump_) { DLOG(INFO) << "file_sink(" << file_sink_->unique_id() << ")"; } } RawArraySignalSource::~RawArraySignalSource() {} void RawArraySignalSource::connect(gr::top_block_sptr top_block) { if (dump_) { //TODO: multichannel recorder top_block->connect(raw_array_source_, 0, file_sink_, 0); DLOG(INFO) << "connected raw_array_source_ to file sink"; } else { DLOG(INFO) << "nothing to connect internally"; } } void RawArraySignalSource::disconnect(gr::top_block_sptr top_block) { if (dump_) { //TODO: multichannel recorder top_block->disconnect(raw_array_source_, 0, file_sink_, 0); } } gr::basic_block_sptr RawArraySignalSource::get_left_block() { LOG(WARNING) << "Left block of a signal source should not be retrieved"; return gr::block_sptr(); } gr::basic_block_sptr RawArraySignalSource::get_right_block() { return raw_array_source_; } gnss-sdr-0.0.6/src/algorithms/signal_source/adapters/uhd_signal_source.h0000644000175000017500000000623712576764164026061 0ustar carlescarles/*! * \file uhd_signal_source.h * \brief Interface for the Universal Hardware Driver signal source * \author Javier Arribas, 2012. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_UHD_SIGNAL_SOURCE_H_ #define GNSS_SDR_UHD_SIGNAL_SOURCE_H_ #include #include #include #include #include #include #include #include "gnss_block_interface.h" class ConfigurationInterface; /*! * \brief This class reads samples from a UHD device (see http://code.ettus.com/redmine/ettus/projects/uhd/wiki) */ class UhdSignalSource: public GNSSBlockInterface { public: UhdSignalSource(ConfigurationInterface* configuration, std::string role, unsigned int in_stream, unsigned int out_stream, boost::shared_ptr queue); virtual ~UhdSignalSource(); std::string role() { return role_; } /*! * \brief Returns "UHD_Signal_Source" */ std::string implementation() { return "UHD_Signal_Source"; } size_t item_size() { return item_size_; } void connect(gr::top_block_sptr top_block); void disconnect(gr::top_block_sptr top_block); gr::basic_block_sptr get_left_block(); gr::basic_block_sptr get_right_block(); gr::basic_block_sptr get_right_block(int RF_channel); private: std::string role_; unsigned int in_stream_; unsigned int out_stream_; gr::uhd::usrp_source::sptr uhd_source_; // UHD SETTINGS uhd::stream_args_t uhd_stream_args_; std::string device_address_; double sample_rate_; int RF_channels_; std::string item_type_; size_t item_size_; std::string subdevice_; std::string clock_source_; std::vector freq_; std::vector gain_; std::vector IF_bandwidth_hz_; std::vector samples_; std::vector dump_; std::vector dump_filename_; std::vector> valve_; std::vector file_sink_; boost::shared_ptr queue_; }; #endif /*GNSS_SDR_UHD_SIGNAL_SOURCE_H_*/ gnss-sdr-0.0.6/src/CMakeLists.txt0000644000175000017500000000153112576764164016132 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(algorithms) add_subdirectory(core) add_subdirectory(main) add_subdirectory(tests) add_subdirectory(utils) gnss-sdr-0.0.6/src/utils/0000755000175000017500000000000012576764164014532 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gpstk/0000755000175000017500000000000012576764164015662 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/0000755000175000017500000000000012576764164017366 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/CMakeModules/0000755000175000017500000000000012576764164021677 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/CMakeModules/FindGPSTK.cmake0000644000175000017500000000534712576764164024403 0ustar carlescarles# - Find gpstk library # Find the native gpstk includes and library # This module defines # GPSTK_INCLUDE_DIR, where to find tiff.h, etc. # GPSTK_LIBRARIES, libraries to link against to use GPSTK. # GPSTK_FOUND, If false, do not try to use GPSTK. # also defined, but not for general use are # GPSTK_LIBRARY, where to find the GPSTK library. FIND_PATH(GPSTK_INCLUDE_DIR gpstk/Matrix.hpp) FIND_PATH(GEOMATICS_INCLUDE_DIR gpstk/random.hpp) FIND_PATH(PROCFRAME_INCLUDE_DIR gpstk/SolverWMS.hpp) FIND_PATH(VDRAW_INCLUDE_DIR gpstk/Layout.hpp) FIND_PATH(VPLOT_INCLUDE_DIR gpstk/ScatterPlot.hpp) FIND_PATH(RXIO_INCLUDE_DIR gpstk/EphReader.hpp) SET(GPSTK_NAMES ${GPSTK_NAMES} gpstk libgpstk) FIND_LIBRARY(GPSTK_LIBRARY NAMES ${GPSTK_NAMES} ) SET(GEOMATICS_NAMES ${GEOMATICS_NAMES} geomatics libgeomatics) FIND_LIBRARY(GEOMATICS_LIBRARY NAMES ${GEOMATICS_NAMES} ) SET(PROCFRAME_NAMES ${PROCFRAME_NAMES} procframe libprocframe) FIND_LIBRARY(PROCFRAME_LIBRARY NAMES ${PROCFRAME_NAMES} ) SET(VDRAW_NAMES ${VDRAW_NAMES} vdraw libvdraw) FIND_LIBRARY(VDRAW_LIBRARY NAMES ${VDRAW_NAMES} ) SET(VPLOT_NAMES ${VPLOT_NAMES} vplot libvplot) FIND_LIBRARY(VPLOT_LIBRARY NAMES ${VPLOT_NAMES} ) SET(RXIO_NAMES ${RXIO_NAMES} rxio librxio) FIND_LIBRARY(RXIO_LIBRARY NAMES ${RXIO_NAMES} ) # handle the QUIETLY and REQUIRED arguments and set GPSTK_FOUND to TRUE if # all listed variables are TRUE INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GPSTK DEFAULT_MSG GPSTK_LIBRARY GPSTK_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOMATICS DEFAULT_MSG GEOMATICS_LIBRARY GEOMATICS_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROCFRAME DEFAULT_MSG PROCFRAME_LIBRARY PROCFRAME_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VDRAW DEFAULT_MSG VDRAW_LIBRARY VDRAW_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(VPLOT DEFAULT_MSG VPLOT_LIBRARY VPLOT_INCLUDE_DIR) FIND_PACKAGE_HANDLE_STANDARD_ARGS(RXIO DEFAULT_MSG RXIO_LIBRARY RXIO_INCLUDE_DIR) IF(GPSTK_FOUND) SET( GPSTK_LIBRARIES ${GPSTK_LIBRARY} ) ENDIF(GPSTK_FOUND) IF(GEOMATICS_FOUND) SET( GEOMATICS_LIBRARIES ${GEOMATICS_LIBRARY} ) ENDIF(GEOMATICS_FOUND) IF(PROCFRAME_FOUND) SET( PROCFRAME_LIBRARIES ${PROCFRAME_LIBRARY} ) ENDIF(PROCFRAME_FOUND) IF(VDRAW_FOUND) SET( VDRAW_LIBRARIES ${VDRAW_LIBRARY} ) ENDIF(VDRAW_FOUND) IF(VPLOT_FOUND) SET( VPLOT_LIBRARIES ${VPLOT_LIBRARY} ) ENDIF(VPLOT_FOUND) IF(RXIO_FOUND) SET( RXIO_LIBRARIES ${RXIO_LIBRARY} ) ENDIF(RXIO_FOUND) MARK_AS_ADVANCED(GPSTK_INCLUDE_DIR GPSTK_LIBRARY) MARK_AS_ADVANCED(GEOMATICS_INCLUDE_DIR GEOMATICS_LIBRARY) MARK_AS_ADVANCED(PROCFRAME_INCLUDE_DIR PROCFRAME_LIBRARY) MARK_AS_ADVANCED(VDRAW_INCLUDE_DIR VDRAW_LIBRARY) MARK_AS_ADVANCED(VPLOT_INCLUDE_DIR VPLOT_LIBRARY) MARK_AS_ADVANCED(RXIO_INCLUDE_DIR RXIO_LIBRARY) gnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/CMakeModules/FindGLOG.cmake0000644000175000017500000000557612576764164024247 0ustar carlescarles# - Try to find the Google Glog library # # This module defines the following variables # # GLOG_FOUND - Was Glog found # GLOG_INCLUDE_DIRS - the Glog include directories # GLOG_LIBRARIES - Link to this # # This module accepts the following variables # # GLOG_ROOT - Can be set to Glog install path or Windows build path # #============================================================================= # FindGlog.cmake, adapted from FindBullet.cmake which has the following # copyright - #----------------------------------------------------------------------------- # Copyright 2009 Kitware, Inc. # Copyright 2009 Philip Lowman # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) if (NOT DEFINED GLOG_ROOT) set (GLOG_ROOT /usr /usr/local) endif (NOT DEFINED GLOG_ROOT) if(MSVC) set(LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/Release) else(MSVC) set (LIB_PATHS ${GLOG_ROOT} ${GLOG_ROOT}/lib) endif(MSVC) macro(_FIND_GLOG_LIBRARIES _var) find_library(${_var} NAMES ${ARGN} PATHS ${LIB_PATHS} PATH_SUFFIXES lib ) mark_as_advanced(${_var}) endmacro() macro(_GLOG_APPEND_LIBRARIES _list _release) set(_debug ${_release}_DEBUG) if(${_debug}) set(${_list} ${${_list}} optimized ${${_release}} debug ${${_debug}}) else() set(${_list} ${${_list}} ${${_release}}) endif() endmacro() if(MSVC) find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h PATHS ${GLOG_ROOT}/src/windows ${GLOG_ROOT}/src/windows/glog ) else(MSVC) # Linux/OS X builds find_path(GLOG_INCLUDE_DIR NAMES raw_logging.h PATHS ${GLOG_ROOT}/include/glog ) endif(MSVC) # Find the libraries if(MSVC) _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.lib) else(MSVC) # Linux/OS X builds _FIND_GLOG_LIBRARIES(GLOG_LIBRARIES libglog.so) endif(MSVC) message("glog library = " ${GLOG_LIBRARIES}) # handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if # all listed variables are TRUE include("${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake") FIND_PACKAGE_HANDLE_STANDARD_ARGS(Glog DEFAULT_MSG GLOG_LIBRARIES) if(MSVC) string(REGEX REPLACE "/glog$" "" VAR_WITHOUT ${GLOG_INCLUDE_DIR}) string(REGEX REPLACE "/windows$" "" VAR_WITHOUT ${VAR_WITHOUT}) set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS} "${VAR_WITHOUT}") string(REGEX REPLACE "/libglog.lib" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES}) else(MSVC) # Linux/OS X builds set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR}) string(REGEX REPLACE "/libglog.so" "" GLOG_LIBRARIES_DIR ${GLOG_LIBRARIES}) endif(MSVC) if(GLOG_FOUND) # _GLOG_APPEND_LIBRARIES(GLOG GLOG_LIBRARIES) endif() gnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/CMakeLists.txt0000644000175000017500000000342312576764164022130 0ustar carlescarles# CMAKE for GPSTK by Javier Arribas 2012 cmake_minimum_required (VERSION 2.6) project (gnsspvt_project) include_directories(${gnsspvt_project_SOURCE_DIR}/src) add_library (kml_printer_gpstk ${gnsspvt_project_SOURCE_DIR}/src/kml_printer_gpstk.cpp) add_executable(gnsspvt ${gnsspvt_project_SOURCE_DIR}/src/gnsspvt.cpp) target_link_libraries (gnsspvt kml_printer_gpstk) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/") find_package(GPSTK REQUIRED) if ( NOT GPSTK_FOUND ) message(FATAL_ERROR "GPSTK library not found!") endif( NOT GPSTK_FOUND ) find_package(GLOG REQUIRED) if ( NOT GLOG_FOUND ) message(FATAL_ERROR "GLOG library not found!") endif( NOT GLOG_FOUND ) include_directories(${GLOG_INCLUDE_DIRS}) # IMPORTANT NOTICE: The GPSTK linking order is critical. First it is required to link agains libprocframe to avoid vtable errors include_directories(${GPSTK_INCLUDE_DIR}/gpstk ${GEOMATICS_INCLUDE_DIR} ${PROCFRAME_INCLUDE_DIR} ${VDRAW_INCLUDE_DIR} ${VPLOT_INCLUDE_DIR} ${RXIO_INCLUDE_DIR}) # set(LIBS ${LIBS} ${GPSTK_LIBRARIES} ${GEOMATICS_LIBRARIES} ${VDRAW_LIBRARIES} ${VPLOT_LIBRARIES} ${RXIO_LIBRARIES}) set(LIBS ${LIBS} ${PROCFRAME_LIBRARIES} ${GPSTK_LIBRARIES} ${GEOMATICS_LIBRARIES} ${GLOG_LIBRARIES}) target_link_libraries(gnsspvt ${LIBS}) message(STATUS "GPSTK_INCLUDE_DIR="${GLOG_LIBRARIES}) #message(STATUS "GPSTK_LIBRARIES=${GPSTK_LIBRARIES}") #message(STATUS "LIBS=${LIBS}") # debug info: print all variables #get_cmake_property(_variableNames VARIABLES) #foreach (_variableName ${_variableNames}) # message(STATUS "${_variableName}=${${_variableName}}") #endforeach() #get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) #foreach(dir ${dirs}) # message(STATUS "INCLUDE_DIRECTORIES='${dir}'") #endforeach() gnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/src/0000755000175000017500000000000012576764164020155 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/src/gnsspvt.cpp0000644000175000017500000004733412576764164022400 0ustar carlescarles/*! * \file gnsspvt.cpp * \brief Adapted version of high level gpstk PVT solver to read RINEX files, * compute the position, velocity and time solution, and write Google Earth KML output file. * The input Observables and Navigation files can be RINEX 2.10 or RINEX 3.00. * It is a modified version of the example5.cpp code provided in gpstk source code. * * \author Javier Arribas, 2012. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ // Modified Example program Nro 5 for GPSTk // This program shows how to use some high-level GPSTk classes // Basic input/output C++ class #include // Classes for handling observations RINEX files (data) #include "gpstk/Rinex3ObsData.hpp" #include "gpstk/Rinex3ObsStream.hpp" // Class to easily extract data from Rinex3ObsData objects #include "gpstk/ExtractData.hpp" // Classes for handling satellite navigation parameters RINEX files // (Broadcast ephemerides) #include "gpstk/Rinex3NavHeader.hpp" #include "gpstk/Rinex3NavData.hpp" #include "gpstk/Rinex3NavStream.hpp" // Class to store satellite broadcast navigation data #include "gpstk/GPSEphemerisStore.hpp" // Class to model GPS data for a mobile receiver #include "gpstk/ModeledPR.hpp" #include "gpstk/GNSSconstants.hpp" #include "gpstk/CommonTime.hpp" #include "gpstk/SatID.hpp" #include "gpstk/Matrix.hpp" #include "gpstk/XvtStore.hpp" #include "gpstk/TropModel.hpp" // Class to model the tropospheric delays #include "gpstk/TropModel.hpp" // Classes to model ans store ionospheric delays #include "gpstk/IonoModel.hpp" #include "gpstk/IonoModelStore.hpp" // Class to solve the equations system using a Weighted Least Mean Square method #include "gpstk/SolverWMS.hpp" // Class to compute the weights to be used for each satellite #include "gpstk/MOPSWeight.hpp" // Basic framework for programs in the GPSTk. The 'process()' method MUST // be implemented #include "gpstk/BasicFramework.hpp" #include "gpstk/geometry.hpp" // DEG_TO_RAD // Time-class year-day-second #include "gpstk/YDSTime.hpp" #include "kml_printer_gpstk.h" using namespace std; using namespace gpstk; // A new class is declared that will handle program behaviour // This class inherits from BasicFramework class gpstk_solver : public BasicFramework { public: // Constructor declaration gpstk_solver(char* arg0); ~gpstk_solver(); protected: // Method that will take care of processing virtual void process(); // Method that hold code to be run BEFORE processing virtual void spinUp(); virtual int Prepare( const CommonTime& Tr, std::vector& Satellite, std::vector& Pseudorange, const XvtStore& Eph ); virtual int Prepare2( const CommonTime& Tr, const Vector& Satellite, const Vector& Pseudorange, const XvtStore& Eph ); private: // These field represent options at command line interface (CLI) CommandOptionWithArg dataFile; CommandOptionWithArg navFile; CommandOptionWithArg kmlFile; Kml_Printer_gpstk kml_printer; // If you want to share objects and variables among methods, you'd // better declare them here Rinex3ObsStream rObsFile; // Object to read Rinex observation data files Rinex3ObsData rData; // Object to store Rinex observation data Rinex3NavStream rNavFile; // Object to read Rinex navigation data files Rinex3NavData rNavData; // Object to store Rinex navigation data Rinex3NavHeader rNavHeader; // Object to read the header of Rinex // navigation data files IonoModelStore ionoStore; // Object to store ionospheric models GPSEphemerisStore bceStore; // Object to store ephemeris ModeledPR modelPR; // Declare a ModeledReferencePR object MOPSTropModel mopsTM; // Declare a MOPSTropModel object ExtractData obsC1; // Declare an ExtractData object int indexC1; // Index to "C1" observation bool useFormerPos; // Flag indicating if we have an a priori // position Position formerPosition; // Object to store the former position IonoModel ioModel; // Declare a Ionospheric Model object SolverWMS solver; // Declare an object to apply WMS method MOPSWeight mopsWeights; // Object to compute satellites' weights }; // Let's implement constructor details gpstk_solver::gpstk_solver(char* arg0) : BasicFramework(arg0, "\nProgram to print the position solution in ECEF " "and longitude, latitude, height, based in C1 and " "given a RINEX observations file and a RINEX " "broadcast navigation file.\n\n" "The output is: \n" " Time(sec) X(m) Y(m) Z(m) Lon(deg) " " Lat(deg) Height(m)\n"), // Option initialization. "true" means a mandatory option dataFile(CommandOption::stdType, 'i', "datainput", " [-i|--datainput] Name of RINEX observations file.", true), navFile(CommandOption::stdType, 'n', "navinput", " [-n|--navinput] Name of RINEX broadcast navigation file.", true), kmlFile(CommandOption::stdType, 'k', "kmloutput", " [-n|--navinput] Name of KML output file.", true) { // These options may appear just once at CLI dataFile.setMaxCount(1); navFile.setMaxCount(1); kmlFile.setMaxCount(1); } // End of constructor details /* Method to set an a priori position of receiver using * Bancroft's method. * * @param Tr Time of observation * @param Satellite std::vector of satellites in view * @param Pseudorange std::vector of pseudoranges measured from * rover station to satellites * @param Eph Satellites Ephemeris * * @return * 0 if OK * -1 if problems arose */ int gpstk_solver::Prepare( const CommonTime& Tr, std::vector& Satellite, std::vector& Pseudorange, const XvtStore& Eph ) { Matrix SVP; Bancroft Ban; Vector vPos; PRSolution2 raimObj; try { cerr << "Tr=" <::iterator it = Satellite.begin() ; it != Satellite.end(); ++it) { cerr << "SatID=" << *it<& Satellite, const Vector& Pseudorange, const XvtStore& Eph ) { int i; std::vector vSat; std::vector vPR; // Convert from gpstk::Vector to std::vector for (i = 0; i < (int)Satellite.size(); i++) { vSat.push_back(Satellite[i]); } for (i = 0; i < (int)Pseudorange.size(); i++) { vPR.push_back(Pseudorange[i]); } return Prepare(Tr, vSat, vPR, Eph); } // End of method 'ModeledPR::Prepare()' // Method that will be executed AFTER initialization but BEFORE processing void gpstk_solver::spinUp() { //open KML output file if (kml_printer.set_headers(kmlFile.getValue()[0].c_str())!=true) { cerr << "Problem creating the kml file "<> roh; // We need the index pointing to C1-type observations try { indexC1 = roh.getObsIndex( "C1" ); } catch(...) { cerr << "The observation file doesn't have C1 pseudoranges." << endl; exit(1); } // Activate failbit to enable exceptions rNavFile.exceptions(ios::failbit); // Read nav file and store unique list of ephemerides try { rNavFile.open(navFile.getValue()[0].c_str(), std::ios::in); } catch(...) { cerr << "Problem opening file " << navFile.getValue()[0].c_str() << endl; cerr << "Maybe it doesn't exist or you don't have proper read " << "permissions." << endl; exit (-1); } // We will need to read ionospheric parameters (Klobuchar model) from // the file header rNavFile >> rNavHeader; // Let's feed the ionospheric model (Klobuchar type) from data in the // navigation (ephemeris) file header. First, we must check if there are // valid ionospheric correction parameters in the header if(rNavHeader.valid & Rinex3NavHeader::validIonoCorrGPS) { // Extract the Alpha and Beta parameters from the header double* ionAlpha = rNavHeader.mapIonoCorr["GPSA"].param; double* ionBeta = rNavHeader.mapIonoCorr["GPSB"].param; // Feed the ionospheric model with the parameters ioModel.setModel(ionAlpha, ionBeta); } else { cerr << "WARNING: Navigation file " << navFile.getValue()[0].c_str() << " doesn't have valid ionospheric correction parameters." << endl; } // WARNING-WARNING-WARNING: In this case, the same model will be used // for the full data span ionoStore.addIonoModel(CommonTime::BEGINNING_OF_TIME, ioModel); // Storing the ephemeris in "bceStore" while (rNavFile >> rNavData) { bceStore.addEphemeris(rNavData); rNavData.dump(cerr); cerr<> rData ) { // Begin usable data with enough number of satellites if( (rData.epochFlag == 0 || rData.epochFlag == 1) && (rData.numSVs > 3) ) { // Number of satellites with valid data in this epoch int validSats = 0; int prepareResult; double rxAltitude; // Receiver altitude for tropospheric model double rxLatitude; // Receiver latitude for tropospheric model // We need to extract C1 data from this epoch. Skip epoch if not // enough data (4 SV at least) is available if( obsC1.getData(rData, indexC1) < 4 ) { // The former position will not be valid next time useFormerPos = false; continue; } // If possible, use former position as a priori if( useFormerPos ) { prepareResult = modelPR.Prepare(formerPosition); // We need to seed this kind of tropospheric model with // receiver altitude rxAltitude = formerPosition.getAltitude(); rxLatitude = formerPosition.getGeodeticLatitude(); } else { // Use Bancroft method is no a priori position is available cerr << "Bancroft method was used at epoch " << static_cast(rData.time).sod << endl; Prepare2( rData.time,obsC1.availableSV,obsC1.obsData,bceStore ); prepareResult = modelPR.Prepare( rData.time, obsC1.availableSV, obsC1.obsData, bceStore ); // We need to seed this kind of tropospheric model with // receiver altitude rxAltitude = modelPR.rxPos.getAltitude(); rxLatitude = modelPR.rxPos.getGeodeticLatitude(); } // If there were problems with Prepare(), skip this epoch if( prepareResult ) { // The former position will not be valid next time useFormerPos = false; continue; } // If there were no problems, let's feed the tropospheric model mopsTM.setReceiverHeight(rxAltitude); mopsTM.setReceiverLatitude(rxLatitude); mopsTM.setDayOfYear(static_cast(rData.time).doy); // Now, let's compute the GPS model for our observable (C1) validSats = modelPR.Compute( rData.time, obsC1.availableSV, obsC1.obsData, bceStore, &mopsTM, &ionoStore ); // Only get into further computations if there are enough // satellites if( validSats >= 4 ) { // Now let's solve the navigation equations using the WMS method try { // First, compute the satellites' weights int goodSv = mopsWeights.getWeights( rData.time, modelPR.availableSV, bceStore, modelPR.ionoCorrections, modelPR.elevationSV, modelPR.azimuthSV, modelPR.rxPos ); // Some minimum checking is in order if ( goodSv != (int)modelPR.prefitResiduals.size() ) continue; // Then, solve the system solver.Compute( modelPR.prefitResiduals, modelPR.geoMatrix, mopsWeights.weightsVector ); } catch( InvalidSolver& e ) { cerr << "Couldn't solve equations system at epoch " << static_cast(rData.time).sod << endl; cerr << e << endl; // The former position will not be valid next time useFormerPos = false; continue; } // With "solver", we got the difference vector between the // a priori position and the computed, 'real' position. Then, // let's convert the solution to a Position object Position solPos( (modelPR.rxPos.X() + solver.solution[0]), (modelPR.rxPos.Y() + solver.solution[1]), (modelPR.rxPos.Z() + solver.solution[2]) ); // Print results cout << static_cast(rData.time).sod << " "; // Output field #1 cout << "X="<= 4 )' else { // The former position will not be valid next time useFormerPos = false; } } // End of 'if( (rData.epochFlag == 0 || rData.epochFlag == 1) &&...' else { // The former position will not be valid next time useFormerPos = false; } } // End of 'while( rObsFile >> rData )' return; } // End of 'gpstk_solver::process()' gpstk_solver::~gpstk_solver() { kml_printer.close_file(); } // Main function int main(int argc, char* argv[]) { try { gpstk_solver program(argv[0]); if (!program.initialize(argc, argv)) return 0; if (!program.run()) return 1; return 0; } catch(Exception& e) { cout << "Problem: " << e << endl; return 1; } catch(...) { cout << "Unknown error." << endl; return 1; } return 0; } // End of 'main()' gnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/src/kml_printer_gpstk.h0000644000175000017500000000330612576764164024066 0ustar carlescarles/*! * \file kml_printer.h * \brief Interface of a class that prints PVT information to a kml file * for GPSTK data structures * \author Javier Arribas, 2012. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_KML_PRINTER_H_ #define GNSS_SDR_KML_PRINTER_H_ #include #include #include "gpstk/Position.hpp" /*! * \brief Prints PVT information to OGC KML format file (can be viewed with Google Earth) * * See http://www.opengeospatial.org/standards/kml */ class Kml_Printer_gpstk { private: std::ofstream kml_file; public: bool set_headers(std::string filename); bool print_position(gpstk::Position position); bool close_file(); Kml_Printer_gpstk(); ~Kml_Printer_gpstk(); }; #endif gnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/src/kml_printer_gpstk.cpp0000644000175000017500000001045412576764164024423 0ustar carlescarles/*! * \file kml_printer.cc * \brief Implementation of a class that prints PVT information to a kml file * for GPSTK data structures * \author Javier Arribas, 2012. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "kml_printer_gpstk.h" #include #include #include bool Kml_Printer_gpstk::set_headers(std::string filename) { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); kml_file.open(filename.c_str()); if (kml_file.is_open()) { DLOG(INFO) << "KML printer writing on " << filename.c_str(); // Set iostream numeric format and precision kml_file.setf(kml_file.fixed,kml_file.floatfield); kml_file << std::setprecision(14); kml_file << "" << std::endl << "" << std::endl << " " << std::endl << " GNSS Track" << std::endl << " GNSS-SDR Receiver position log file created at " << asctime (timeinfo) << " " << std::endl << "" << std::endl << "" << std::endl << "GNSS-SDR PVT" << std::endl << "GNSS-SDR position log" << std::endl << "#yellowLineGreenPoly" << std::endl << "" << std::endl << "0" << std::endl << "1" << std::endl << "absolute" << std::endl << "" << std::endl; return true; } else { return false; } } bool Kml_Printer_gpstk::print_position(gpstk::Position position) { double latitude; double longitude; double height; latitude = position.geodeticLatitude(); longitude = position.getLongitude(); if (longitude>190) { longitude=longitude-360; } height = position.getHeight(); if (kml_file.is_open()) { kml_file << longitude << "," << latitude << "," << height << std::endl; return true; } else { return false; } } bool Kml_Printer_gpstk::close_file() { if (kml_file.is_open()) { kml_file << "" << std::endl << "" << std::endl << "" << std::endl << "" << std::endl << ""; kml_file.close(); return true; } else { return false; } } Kml_Printer_gpstk::Kml_Printer_gpstk () {} Kml_Printer_gpstk::~Kml_Printer_gpstk () {} gnss-sdr-0.0.6/src/utils/gpstk/gnsspvt/README0000644000175000017500000000350712576764164020253 0ustar carlescarlesABOUT GNSSPVT ---------------------- This program uses the high level GpsTk classes to implement a simple PVT solver that uses RINEX files as an input. The output is written both in the console and in a Google Earth KML file. HOW TO BUILD GNSSPVT ---------------------- Installation in Ubuntu 11.04, 11.10, 12.04 (32 and 64 bits) ----------------------------------------------------------- - Install CMake through your OS's package manager or by some other means. - Install GpsTk: The following procedure will build and install the GPSTk. Ensure that prerequisites such as jam have been installed. Download the GPSTk source distribution from http://www.gpstk.org/bin/view/Documentation/GPSTkDownloads Extract the GPSTk tarball. For example, using GNU tar tar xvzf gpstk.tar.gz Change into the gpstk/dev directory (if using Subversion) or the gpstk/ directory (if using the tarball)and type jam To build the source documentation using doxygen: doxygen To install GPSTk as a system library in /usr/local, assume root privileges then execute jam install To install to a different directory, define the environment variable PREFIX to point to the root of the installation - Download, unzip, configure, build and install glog, a Google's library that implements application-level logging: $ wget http://google-glog.googlecode.com/files/glog-0.3.2.tar.gz $ tar xvfz glog-0.3.2.tar.gz $ cd glog-0.3.2 $ ./configure $ make $ sudo make install - Go to GNSSPVT root directory and compile the gnsspvt: $ cd gnss-sdr/src/utils/gpstk/gnsspvt/ $ mkdir build $ cd build $ cmake ../ $ make If everything goes well, the executable file is available in the build directory. USAGE ---------------------- ./gnsspvt -i path_to_rinex_observable_file -n path_to_rinex_navigation_file -k path_to_kml_output_file gnss-sdr-0.0.6/src/utils/front-end-cal/0000755000175000017500000000000012576764164017163 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/front-end-cal/front_end_cal.h0000644000175000017500000001266412576764164022142 0ustar carlescarles/*! * \file front_end_cal.h * \brief Interface of the Front-end calibration program. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_FRONT_END_CAL_H_ #define GNSS_SDR_FRONT_END_CAL_H_ #include #include "file_configuration.h" #include "concurrent_map.h" class FrontEndCal { private: std::shared_ptr configuration_; /*! * \brief LLA2ECEF Convert geodetic coordinates to Earth-centered Earth-fixed * (ECEF) coordinates. P = LLA2ECEF( LLA ) converts an M-by-3 array of geodetic coordinates * (latitude, longitude and altitude), LLA, to an M-by-3 array of ECEF * coordinates, P. LLA is in [degrees degrees meters]. P is in meters. * The default ellipsoid planet is WGS84. Original copyright (c) by Kai Borre. */ arma::vec lla2ecef(const arma::vec & lla); /*! * GEODETIC2ECEF Convert geodetic to geocentric (ECEF) coordinates * [X, Y, Z] = GEODETIC2ECEF(PHI, LAMBDA, H, ELLIPSOID) converts geodetic * point locations specified by the coordinate arrays PHI (geodetic * latitude in radians), LAMBDA (longitude in radians), and H (ellipsoidal * height) to geocentric Cartesian coordinates X, Y, and Z. The geodetic * coordinates refer to the reference ellipsoid specified by ELLIPSOID (a * row vector with the form [semimajor axis, eccentricity]). H must use * the same units as the semimajor axis; X, Y, and Z will be expressed in * these units also. * * The geocentric Cartesian coordinate system is fixed with respect to the * Earth, with its origin at the center of the ellipsoid and its X-, Y-, * and Z-axes intersecting the surface at the following points: * PHI LAMBDA * X-axis: 0 0 (Equator at the Prime Meridian) * Y-axis: 0 pi/2 (Equator at 90-degrees East * Z-axis: pi/2 0 (North Pole) * * A common synonym is Earth-Centered, Earth-Fixed coordinates, or ECEF. * * See also ECEF2GEODETIC, ECEF2LV, GEODETIC2GEOCENTRICLAT, LV2ECEF. * * Copyright 2004-2009 The MathWorks, Inc. * $Revision: 1.1.6.4 $ $Date: 2009/04/15 23:34:46 $ * Reference * --------- * Paul R. Wolf and Bon A. Dewitt, "Elements of Photogrammetry with * Applications in GIS," 3rd Ed., McGraw-Hill, 2000 (Appendix F-3). */ arma::vec geodetic2ecef(double phi, double lambda, double h, const arma::vec & ellipsoid); /*! * \brief Reads the ephemeris data from an external XML file * */ bool read_assistance_from_XML(); /*! * \brief Connects to Secure User Location Protocol (SUPL) server to obtain * the current GPS ephemeris and GPS assistance data. * */ int Get_SUPL_Assist(); const std::string eph_default_xml_filename = "./gps_ephemeris.xml"; public: /*! * \brief Sets the configuration data required by get_ephemeris function * */ void set_configuration(std::shared_ptr configuration); /*! * \brief This function connects to a Secure User Location Protocol (SUPL) server to obtain * the current GPS ephemeris and GPS assistance data. It requires the configuration parameters set by * set_configuration function. * */ bool get_ephemeris(); /*! * \brief This function estimates the GPS L1 satellite Doppler frequency [Hz] using the following data: * 1- Orbital model from the ephemeris * 2- Approximate GPS Time of Week (TOW) * 3- Approximate receiver Latitude and Longitude (WGS-84) * */ double estimate_doppler_from_eph(unsigned int PRN, double TOW, double lat, double lon, double height); /*! * \brief This function models the Elonics E4000 + RTL2832 front-end * Inputs: * f_bb_true_Hz - Ideal output frequency in baseband [Hz] * f_in_bb_meas_Hz - measured output frequency in baseband [Hz] * Outputs: * estimated_fs_Hz - Sampling frequency estimation based on the * measurements and the front-end model * estimated_f_if_bb_Hz - Equivalent bb if frequency estimation based on the * measurements and the front-end model * Front-end TUNER Elonics E4000 + RTL2832 sampler For GPS L1 1575.42 MHz * */ void GPS_L1_front_end_model_E4000(double f_bb_true_Hz,double f_bb_meas_Hz,double fs_nominal_hz, double *estimated_fs_Hz, double *estimated_f_if_Hz, double *f_osc_err_ppm ); FrontEndCal(); ~FrontEndCal(); }; #endif gnss-sdr-0.0.6/src/utils/front-end-cal/CMakeLists.txt0000644000175000017500000001024512576764164021725 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # #if(ENABLE_OSMOSDR) set(FRONT_END_CAL_SOURCES front_end_cal.cc) include_directories( ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/core/libs ${CMAKE_SOURCE_DIR}/src/core/libs/supl ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/gnuradio_blocks ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNURADIO_BLOCKS_INCLUDE_DIRS} ${ARMADILLO_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${VOLK_GNSSSDR_INCLUDE_DIRS} ) file(GLOB FRONT_END_CAL_HEADERS "*.h") add_library(front_end_cal_lib ${FRONT_END_CAL_SOURCES} ${FRONT_END_CAL_HEADERS}) source_group(Headers FILES ${FRONT_END_CAL_HEADERS}) target_link_libraries(front_end_cal_lib ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GFlags_LIBS} ${GLOG_LIBRARIES} ${ARMADILLO_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} gnss_rx gnss_sp_libs ) add_dependencies(front_end_cal_lib glog-${glog_RELEASE} armadillo-${armadillo_RELEASE}) add_definitions( -DGNSS_SDR_VERSION="${VERSION}" ) add_definitions( -DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}" ) add_executable(front-end-cal ${CMAKE_CURRENT_SOURCE_DIR}/main.cc) add_custom_command(TARGET front-end-cal POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_SOURCE_DIR}/install/$) target_link_libraries(front-end-cal ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${Boost_LIBRARIES} ${GFlags_LIBS} ${GLOG_LIBRARIES} ${ARMADILLO_LIBRARIES} gnss_rx gnss_sp_libs front_end_cal_lib ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ) install(TARGETS front-end-cal RUNTIME DESTINATION bin COMPONENT "front-end-cal" ) find_program(GZIP gzip /bin /usr/bin /usr/local/bin /opt/local/bin /sbin ) if(NOT GZIP_NOTFOUND) execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/manpage/front-end-cal-manpage WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE "${CMAKE_BINARY_DIR}/front-end-cal.1.gz") install(FILES ${CMAKE_BINARY_DIR}/front-end-cal.1.gz DESTINATION share/man/man1) endif(NOT GZIP_NOTFOUND) #endif(ENABLE_OSMOSDR) gnss-sdr-0.0.6/src/utils/front-end-cal/front_end_cal.cc0000644000175000017500000004410712576764164022275 0ustar carlescarles/*! * \file front_end_cal.cc * \brief Implementation of the Front-end calibration program. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "front_end_cal.h" #include #include #include #include #include #include #include #include #include #include #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_cnav_ephemeris.h" #include "gps_almanac.h" #include "gps_iono.h" #include "gps_cnav_iono.h" #include "gps_utc_model.h" #include "gnss_sdr_supl_client.h" extern concurrent_map global_gps_ephemeris_map; extern concurrent_map global_gps_iono_map; extern concurrent_map global_gps_utc_model_map; extern concurrent_map global_gps_almanac_map; extern concurrent_map global_gps_acq_assist_map; FrontEndCal::FrontEndCal() {} FrontEndCal::~FrontEndCal() {} bool FrontEndCal::read_assistance_from_XML() { gnss_sdr_supl_client supl_client_ephemeris_; std::string eph_xml_filename = "gps_ephemeris.xml"; std::cout << "SUPL: Trying to read GPS ephemeris from XML file " << eph_xml_filename << std::endl; LOG(INFO) << "SUPL: Trying to read GPS ephemeris from XML file " << eph_xml_filename; if (supl_client_ephemeris_.load_ephemeris_xml(eph_xml_filename) == true) { std::map::iterator gps_eph_iter; for(gps_eph_iter = supl_client_ephemeris_.gps_ephemeris_map.begin(); gps_eph_iter != supl_client_ephemeris_.gps_ephemeris_map.end(); gps_eph_iter++) { std::cout << "SUPL: Read XML Ephemeris for GPS SV " << gps_eph_iter->first << std::endl; LOG(INFO) << "SUPL: Read XML Ephemeris for GPS SV " << gps_eph_iter->first; LOG(INFO) << "New Ephemeris record inserted with Toe=" << gps_eph_iter->second.d_Toe << " and GPS Week=" << gps_eph_iter->second.i_GPS_week; global_gps_ephemeris_map.write(gps_eph_iter->second.i_satellite_PRN, gps_eph_iter->second); } return true; } else { std::cout << "ERROR: SUPL client error reading XML" << std::endl; LOG(WARNING) << "ERROR: SUPL client error reading XML"; return false; } } int FrontEndCal::Get_SUPL_Assist() { //######### GNSS Assistance ################################# gnss_sdr_supl_client supl_client_acquisition_; gnss_sdr_supl_client supl_client_ephemeris_; int supl_mcc; // Current network MCC (Mobile country code), 3 digits. int supl_mns; //Current network MNC (Mobile Network code), 2 or 3 digits. int supl_lac; // Current network LAC (Location area code),16 bits, 1-65520 are valid values. int supl_ci; // Cell Identity (16 bits, 0-65535 are valid values). // GNSS Assistance configuration int error = 0; bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false); if (enable_gps_supl_assistance == true) //SUPL SERVER TEST. Not operational yet! { LOG(INFO) << "SUPL RRLP GPS assistance enabled!"; std::string default_acq_server = "supl.nokia.com"; std::string default_eph_server = "supl.google.com"; supl_client_ephemeris_.server_name = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_server", default_acq_server); supl_client_acquisition_.server_name = configuration_->property("GNSS-SDR.SUPL_gps_acquisition_server", default_eph_server); supl_client_ephemeris_.server_port = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_port", 7275); supl_client_acquisition_.server_port = configuration_->property("GNSS-SDR.SUPL_gps_acquisition_port", 7275); supl_mcc = configuration_->property("GNSS-SDR.SUPL_MCC", 244); supl_mns = configuration_->property("GNSS-SDR.SUPL_MNS", 5); std::string default_lac = "0x59e2"; std::string default_ci = "0x31b0"; try { supl_lac = boost::lexical_cast(configuration_->property("GNSS-SDR.SUPL_LAC", default_lac)); } catch(boost::bad_lexical_cast &) { supl_lac = 0x59e2; } try { supl_ci = boost::lexical_cast(configuration_->property("GNSS-SDR.SUPL_CI", default_ci)); } catch(boost::bad_lexical_cast &) { supl_ci = 0x31b0; } bool SUPL_read_gps_assistance_xml = configuration_->property("GNSS-SDR.SUPL_read_gps_assistance_xml", false); if (SUPL_read_gps_assistance_xml == true) { // read assistance from file read_assistance_from_XML(); } else { // Request ephemeris from SUPL server supl_client_ephemeris_.request = 1; LOG(INFO) << "SUPL: Trying to read GPS ephemeris from SUPL server..."; std::cout << "SUPL: Trying to read GPS ephemeris from SUPL server..." << std::endl; error = supl_client_ephemeris_.get_assistance(supl_mcc, supl_mns, supl_lac, supl_ci); if (error == 0) { std::map::iterator gps_eph_iter; for(gps_eph_iter = supl_client_ephemeris_.gps_ephemeris_map.begin(); gps_eph_iter != supl_client_ephemeris_.gps_ephemeris_map.end(); gps_eph_iter++) { LOG(INFO) << "SUPL: Received Ephemeris for GPS SV " << gps_eph_iter->first; std::cout << "SUPL: Received Ephemeris for GPS SV " << gps_eph_iter->first << std::endl; LOG(INFO) << "New Ephemeris record inserted with Toe=" << gps_eph_iter->second.d_Toe << " and GPS Week=" << gps_eph_iter->second.i_GPS_week; global_gps_ephemeris_map.write(gps_eph_iter->second.i_satellite_PRN, gps_eph_iter->second); } //Save ephemeris to XML file std::string eph_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename); if (supl_client_ephemeris_.save_ephemeris_map_xml(eph_xml_filename, supl_client_ephemeris_.gps_ephemeris_map) == true) { LOG(INFO) << "SUPL: XML Ephemeris file created."; } } else { LOG(WARNING) << "ERROR: SUPL client for Ephemeris returned " << error; std::cout << "ERROR in SUPL client. Please check your Internet connection and SUPL server configuration" << std::endl; } // Request almanac , IONO and UTC Model supl_client_ephemeris_.request = 0; LOG(INFO) << "SUPL: Try read Almanac, Iono, Utc Model, Ref Time and Ref Location from SUPL server..."; error = supl_client_ephemeris_.get_assistance(supl_mcc, supl_mns, supl_lac, supl_ci); if (error == 0) { std::map::iterator gps_alm_iter; for(gps_alm_iter = supl_client_ephemeris_.gps_almanac_map.begin(); gps_alm_iter != supl_client_ephemeris_.gps_almanac_map.end(); gps_alm_iter++) { LOG(INFO) << "SUPL: Received Almanac for GPS SV " << gps_alm_iter->first; std::cout << "SUPL: Received Almanac for GPS SV " << gps_alm_iter->first << std::endl; global_gps_almanac_map.write(gps_alm_iter->first, gps_alm_iter->second); } if (supl_client_ephemeris_.gps_iono.valid == true) { LOG(INFO) << "SUPL: Received GPS Iono"; std::cout << "SUPL: Received GPS Iono" << std::endl; global_gps_iono_map.write(0,supl_client_ephemeris_.gps_iono); } if (supl_client_ephemeris_.gps_utc.valid == true) { LOG(INFO) << "SUPL: Received GPS UTC Model"; std::cout << "SUPL: Received GPS UTC Model" << std::endl; global_gps_utc_model_map.write(0, supl_client_ephemeris_.gps_utc); } } else { LOG(WARNING) << "ERROR: SUPL client for Almanac returned " << error; std::cout << "ERROR in SUPL client. Please check your Internet connection and SUPL server configuration" << std::endl; } // Request acquisition assistance supl_client_acquisition_.request = 2; LOG(INFO) << "SUPL: Trying to read Acquisition assistance from SUPL server..."; std::cout << "SUPL: Trying to read Acquisition assistance from SUPL server..." << std::endl; error = supl_client_acquisition_.get_assistance(supl_mcc, supl_mns, supl_lac, supl_ci); if (error == 0) { std::map::iterator gps_acq_iter; for(gps_acq_iter = supl_client_acquisition_.gps_acq_map.begin(); gps_acq_iter != supl_client_acquisition_.gps_acq_map.end(); gps_acq_iter++) { LOG(INFO) << "SUPL: Received Acquisition assistance for GPS SV " << gps_acq_iter->first; std::cout << "SUPL: Received Acquisition assistance for GPS SV " << gps_acq_iter->first << std::endl; LOG(INFO) << "New acq assist record inserted"; global_gps_acq_assist_map.write(gps_acq_iter->second.i_satellite_PRN, gps_acq_iter->second); } } else { LOG(WARNING) << "ERROR: SUPL client for Acquisition assistance returned " << error; std::cout << "ERROR in SUPL client. Please check your Internet connection and SUPL server configuration" << std::endl; } } } return error; } void FrontEndCal::set_configuration(std::shared_ptr configuration) { configuration_ = configuration; } bool FrontEndCal::get_ephemeris() { bool read_ephemeris_from_xml = configuration_->property("GNSS-SDR.read_eph_from_xml", false); if (read_ephemeris_from_xml == true) { std::cout << "Trying to read ephemeris from XML file..." << std::endl; LOG(INFO) << "Trying to read ephemeris from XML file..."; if (read_assistance_from_XML() == false) { std::cout << "ERROR: Could not read Ephemeris file: Trying to get ephemeris from SUPL server..." << std::endl; LOG(INFO) << "ERROR: Could not read Ephemeris file: Trying to get ephemeris from SUPL server..."; if (Get_SUPL_Assist() == 1) { return true; } else { return false; } } else { return true; } } else { std::cout << "Trying to read ephemeris from SUPL server..." << std::endl; LOG(INFO) << "Trying to read ephemeris from SUPL server..."; if (Get_SUPL_Assist() == 0) { return true; } else { return false; } } } arma::vec FrontEndCal::lla2ecef(const arma::vec & lla) { // WGS84 flattening double f = 1.0 / 298.257223563; // WGS84 equatorial radius double R = 6378137.0; arma::vec ellipsoid = "0.0 0.0"; double phi = (lla(0) / 360.0) * GPS_TWO_PI; double lambda = (lla(1) / 360.0) * GPS_TWO_PI; ellipsoid(0) = R; ellipsoid(1) = sqrt(1.0 - (1.0 - f)*(1.0 - f)); arma::vec ecef = "0.0 0.0 0.0 0.0"; ecef = geodetic2ecef(phi, lambda, lla(3), ellipsoid); return ecef; } arma::vec FrontEndCal::geodetic2ecef(double phi, double lambda, double h, const arma::vec & ellipsoid) { double a = ellipsoid(0); double e2 = ellipsoid(1)*ellipsoid(1); double sinphi = sin(phi); double cosphi = cos(phi); double N = a / sqrt(1.0 - e2 * sinphi*sinphi); arma::vec ecef = "0.0 0.0 0.0 0.0"; ecef(0) = (N + h) * cosphi * cos(lambda); ecef(1) = (N + h) * cosphi * sin(lambda); ecef(2) = (N*(1.0 - e2) + h) * sinphi; return ecef; } double FrontEndCal::estimate_doppler_from_eph(unsigned int PRN, double TOW, double lat, double lon, double height) { int num_secs = 10; double step_secs = 0.5; // Observer position ECEF arma::vec obs_ecef = "0.0 0.0 0.0 0.0"; arma::vec lla = "0.0 0.0 0.0 0.0"; lla(0) = lat; lla(1) = lon; lla(2) = height; obs_ecef = lla2ecef(lla); // Satellite positions ECEF std::map eph_map; eph_map = global_gps_ephemeris_map.get_map_copy(); std::map::iterator eph_it; eph_it = eph_map.find(PRN); if (eph_it!=eph_map.end()) { arma::vec SV_pos_ecef = "0.0 0.0 0.0 0.0"; double obs_time_start, obs_time_stop; obs_time_start = TOW - num_secs/2; obs_time_stop = TOW + num_secs/2; int n_points = round((obs_time_stop - obs_time_start)/step_secs); arma::vec ranges = arma::zeros(n_points, 1); double obs_time = obs_time_start; for (int i=0; isecond.satellitePosition(obs_time); SV_pos_ecef(0) = eph_it->second.d_satpos_X; SV_pos_ecef(1) = eph_it->second.d_satpos_Y; SV_pos_ecef(2) = eph_it->second.d_satpos_Z; // SV distances to observer (true range) ranges(i) = arma::norm(SV_pos_ecef - obs_ecef, 2); obs_time += step_secs; } // Observer to satellite radial velocity // Numeric derivative: Positive slope means that the distance from obs to // satellite is increasing arma::vec obs_to_sat_velocity; obs_to_sat_velocity = (ranges.subvec(1, (n_points - 1)) - ranges.subvec(0, (n_points - 2)))/step_secs; // Doppler equations are formulated accounting for positive velocities if the // tx and rx are approaching to each other. So, the satellite velocity must // be redefined as: obs_to_sat_velocity = -obs_to_sat_velocity; //Doppler estimation arma::vec Doppler_Hz; Doppler_Hz = (obs_to_sat_velocity/GPS_C_m_s)*GPS_L1_FREQ_HZ; double mean_Doppler_Hz; mean_Doppler_Hz = arma::mean(Doppler_Hz); return mean_Doppler_Hz; } else { throw(1); } } void FrontEndCal::GPS_L1_front_end_model_E4000(double f_bb_true_Hz, double f_bb_meas_Hz, double fs_nominal_hz, double *estimated_fs_Hz, double *estimated_f_if_Hz, double *f_osc_err_ppm) { const double f_osc_n = 28.8e6; //PLL registers settings (according to E4000 datasheet) const double N = 109.0; const double Y = 65536.0; const double X = 26487.0; const double R = 2.0; // Obtained RF center frequency double f_rf_pll = (f_osc_n * (N + X / Y)) /R; // RF frequency error caused by fractional PLL roundings double f_bb_err_pll = GPS_L1_FREQ_HZ - f_rf_pll; // Measured F_rf error double f_rf_err = (f_bb_meas_Hz - f_bb_true_Hz) - f_bb_err_pll; double f_osc_err_hz = (f_rf_err*R)/(N+X/Y); // OJO,segun los datos gnss, la IF positiva hace disminuir la fs!! f_osc_err_hz = -f_osc_err_hz; *f_osc_err_ppm = f_osc_err_hz/(f_osc_n/1e6); double frac = fs_nominal_hz/f_osc_n; *estimated_fs_Hz = frac*(f_osc_n + f_osc_err_hz); *estimated_f_if_Hz = f_rf_err; } gnss-sdr-0.0.6/src/utils/front-end-cal/main.cc0000644000175000017500000005310412576764164020421 0ustar carlescarles/*! * \file main.cc * \brief Main file of the Front-end calibration program. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef FRONT_END_CAL_VERSION #define FRONT_END_CAL_VERSION "0.0.1" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "concurrent_map.h" #include "file_configuration.h" #include "gps_l1_ca_pcps_acquisition_fine_doppler.h" #include "gnss_signal.h" #include "gnss_synchro.h" #include "gnss_block_factory.h" #include "gps_navigation_message.h" #include "gps_ephemeris.h" #include "gps_cnav_ephemeris.h" #include "gps_almanac.h" #include "gps_iono.h" #include "gps_cnav_iono.h" #include "gps_utc_model.h" #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" #include "sbas_satellite_correction.h" #include "sbas_ephemeris.h" #include "sbas_time.h" #include "gnss_sdr_supl_client.h" #include "front_end_cal.h" using google::LogMessage; DECLARE_string(log_dir); std::string s1_(GNSSSDR_INSTALL_DIR); std::string s2_("/share/gnss-sdr/conf/front-end-cal.conf"); std::string s3_ = s1_ + s2_; DEFINE_string(config_file, s3_, "Path to the file containing the configuration parameters"); concurrent_queue global_gps_ephemeris_queue; concurrent_queue global_gps_iono_queue; concurrent_queue global_gps_utc_model_queue; concurrent_queue global_gps_almanac_queue; concurrent_queue global_gps_acq_assist_queue; concurrent_map global_gps_ephemeris_map; concurrent_map global_gps_iono_map; concurrent_map global_gps_utc_model_map; concurrent_map global_gps_almanac_map; concurrent_map global_gps_acq_assist_map; // For GPS NAVIGATION (L2) concurrent_queue global_gps_cnav_ephemeris_queue; concurrent_map global_gps_cnav_ephemeris_map; concurrent_queue global_gps_cnav_iono_queue; concurrent_map global_gps_cnav_iono_map; // For GALILEO NAVIGATION concurrent_queue global_galileo_ephemeris_queue; concurrent_queue global_galileo_iono_queue; concurrent_queue global_galileo_utc_model_queue; concurrent_queue global_galileo_almanac_queue; concurrent_map global_galileo_ephemeris_map; concurrent_map global_galileo_iono_map; concurrent_map global_galileo_utc_model_map; concurrent_map global_galileo_almanac_map; // For SBAS CORRECTIONS concurrent_queue global_sbas_raw_msg_queue; concurrent_queue global_sbas_iono_queue; concurrent_queue global_sbas_sat_corr_queue; concurrent_queue global_sbas_ephemeris_queue; concurrent_map global_sbas_iono_map; concurrent_map global_sbas_sat_corr_map; concurrent_map global_sbas_ephemeris_map; bool stop; concurrent_queue channel_internal_queue; GpsL1CaPcpsAcquisitionFineDoppler *acquisition; Gnss_Synchro *gnss_synchro; std::vector gnss_sync_vector; void wait_message() { while (!stop) { int message; channel_internal_queue.wait_and_pop(message); //std::cout<<"Acq mesage rx="<reset(); break; case 2: // negative acq //acquisition->reset(); break; case 3: stop = true; break; default: break; } } } bool front_end_capture(std::shared_ptr configuration) { gr::top_block_sptr top_block; GNSSBlockFactory block_factory; boost::shared_ptr queue; queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); std::shared_ptr source; try { source = block_factory.GetSignalSource(configuration, queue); } catch(const boost::exception_ptr & e) { std::cout << "Exception catched in creating source " << e << std::endl; return 0; } std::shared_ptr conditioner; try { conditioner = block_factory.GetSignalConditioner(configuration,queue); } catch(const boost::exception_ptr & e) { std::cout << "Exception catched in creating signal conditioner " << e << std::endl; return 0; } gr::block_sptr sink; sink = gr::blocks::file_sink::make(sizeof(gr_complex), "tmp_capture.dat"); //--- Find number of samples per spreading code --- long fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); int samples_per_code = round(fs_in_ / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); int nsamples = samples_per_code * 50; int skip_samples = fs_in_ * 5; // skip 5 seconds gr::block_sptr head = gr::blocks::head::make(sizeof(gr_complex), nsamples); gr::block_sptr skiphead = gr::blocks::skiphead::make(sizeof(gr_complex), skip_samples); try { source->connect(top_block); conditioner->connect(top_block); top_block->connect(source->get_right_block(), 0, conditioner->get_left_block(), 0); top_block->connect(conditioner->get_right_block(), 0, skiphead, 0); top_block->connect(skiphead, 0, head, 0); top_block->connect(head, 0, sink, 0); top_block->run(); } catch(const std::exception & e) { std::cout << "Failure connecting the GNU Radio blocks " << e.what() << std::endl; return false; } //delete conditioner; //delete source; return true; } static time_t utc_time(int week, long tow) { time_t t; /* Jan 5/6 midnight 1980 - beginning of GPS time as Unix time */ t = 315964801; /* soon week will wrap again, uh oh... */ /* TS 44.031: GPSTOW, range 0-604799.92, resolution 0.08 sec, 23-bit presentation */ /* The factor 0.08 was applied in the ephemeris SUPL class */ /* here the tow is in [s] */ t += (1024 + week) * 604800 + tow; return t; } int main(int argc, char** argv) { const std::string intro_help( std::string("\n RTL-SDR E4000 RF front-end center frequency and sampling rate calibration tool that uses GPS signals\n") + "Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)\n" + "This program comes with ABSOLUTELY NO WARRANTY;\n" + "See COPYING file to see a copy of the General Public License\n \n"); google::SetUsageMessage(intro_help); google::SetVersionString(FRONT_END_CAL_VERSION); google::ParseCommandLineFlags(&argc, &argv, true); std::cout << "Initializing... Please wait." << std::endl; google::InitGoogleLogging(argv[0]); if (FLAGS_log_dir.empty()) { std::cout << "Logging will be done at " << "/tmp" << std::endl << "Use front-end-cal --log_dir=/path/to/log to change that." << std::endl; } else { const boost::filesystem::path p (FLAGS_log_dir); if (!boost::filesystem::exists(p)) { std::cout << "The path " << FLAGS_log_dir << " does not exist, attempting to create it" << std::endl; boost::filesystem::create_directory(p); } std::cout << "Logging with be done at " << FLAGS_log_dir << std::endl; } // 0. Instantiate the FrontEnd Calibration class FrontEndCal front_end_cal; // 1. Load configuration parameters from config file std::shared_ptr configuration = std::make_shared(FLAGS_config_file); front_end_cal.set_configuration(configuration); // 2. Get SUPL information from server: Ephemeris record, assistance info and TOW if (front_end_cal.get_ephemeris() == true) { std::cout << "SUPL data received OK!" << std::endl; } else { std::cout << "Failure connecting to SUPL server" < Acquisition_10m) gr::top_block_sptr top_block; boost::shared_ptr queue; queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Acquisition test"); // Satellite signal definition gnss_synchro = new Gnss_Synchro(); gnss_synchro->Channel_ID = 0; gnss_synchro->System = 'G'; std::string signal = "1C"; signal.copy(gnss_synchro->Signal, 2, 0); gnss_synchro->PRN = 1; long fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000); GNSSBlockFactory block_factory; acquisition = new GpsL1CaPcpsAcquisitionFineDoppler(configuration.get(), "Acquisition", 1, 1, queue); acquisition->set_channel(1); acquisition->set_gnss_synchro(gnss_synchro); acquisition->set_channel_queue(&channel_internal_queue); acquisition->set_threshold(configuration->property("Acquisition.threshold", 0.0)); acquisition->set_doppler_max(configuration->property("Acquisition.doppler_max", 10000)); acquisition->set_doppler_step(configuration->property("Acquisition.doppler_step", 250)); gr::block_sptr source; source = gr::blocks::file_source::make(sizeof(gr_complex), "tmp_capture.dat"); //gr_basic_block_sptr head = gr_make_head(sizeof(gr_complex), nsamples); //gr_head_sptr head_sptr = boost::dynamic_pointer_cast(head); //head_sptr->set_length(nsamples); //head_sptr->reset(); try { acquisition->connect(top_block); top_block->connect(source, 0, acquisition->get_left_block(), 0); } catch(const std::exception & e) { std::cout << "Failure connecting the GNU Radio blocks: " << e.what() << std::endl; } // 5. Run the flowgraph // Get visible GPS satellites (positive acquisitions with Doppler measurements) // Compute Doppler estimations std::map doppler_measurements_map; std::map cn0_measurements_map; boost::thread ch_thread; // record startup time struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; bool start_msg = true; for (unsigned int PRN=1; PRN<33; PRN++) { gnss_synchro->PRN = PRN; acquisition->set_gnss_synchro(gnss_synchro); acquisition->init(); acquisition->reset(); stop = false; try { ch_thread = boost::thread(wait_message); } catch(const boost::thread_resource_error & e) { LOG(INFO) << "Exception catched (thread resource error)"; } top_block->run(); if (start_msg == true) { std::cout << "Searching for GPS Satellites in L1 band..." << std::endl; std::cout << "["; start_msg = false; } if (gnss_sync_vector.size()>0) { std::cout << " " << PRN << " "; double doppler_measurement_hz = 0; for (std::vector::iterator it = gnss_sync_vector.begin() ; it != gnss_sync_vector.end(); ++it) { doppler_measurement_hz += (*it).Acq_doppler_hz; } doppler_measurement_hz = doppler_measurement_hz/gnss_sync_vector.size(); doppler_measurements_map.insert(std::pair(PRN, doppler_measurement_hz)); } else { std::cout << " . "; } channel_internal_queue.push(3); try { ch_thread.join(); } catch(const boost::thread_resource_error & e) { LOG(INFO) << "Exception caught while joining threads."; } gnss_sync_vector.clear(); boost::dynamic_pointer_cast(source)->seek(0, 0); std::cout.flush(); } std::cout << "]" << std::endl; // report the elapsed time gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Total signal acquisition run time " << ((double)(end - begin))/1000000.0 << " [seconds]" << std::endl; //6. find TOW from SUPL assistance double current_TOW = 0; if (global_gps_ephemeris_map.size() > 0) { std::map Eph_map; Eph_map = global_gps_ephemeris_map.get_map_copy(); current_TOW = Eph_map.begin()->second.d_TOW; time_t t = utc_time(Eph_map.begin()->second.i_GPS_week, (long int)current_TOW); fprintf(stdout, "Reference Time:\n"); fprintf(stdout, " GPS Week: %d\n", Eph_map.begin()->second.i_GPS_week); fprintf(stdout, " GPS TOW: %ld %lf\n", (long int)current_TOW, (long int)current_TOW*0.08); fprintf(stdout, " ~ UTC: %s", ctime(&t)); std::cout << "Current TOW obtained from SUPL assistance = " << current_TOW << std::endl; } else { std::cout << "Unable to get Ephemeris SUPL assistance. TOW is unknown!" << std::endl; delete acquisition; delete gnss_synchro; google::ShutDownCommandLineFlags(); std::cout << "GNSS-SDR Front-end calibration program ended." << std::endl; return 0; } //Get user position from config file (or from SUPL using GSM Cell ID) double lat_deg = configuration->property("GNSS-SDR.init_latitude_deg", 41.0); double lon_deg = configuration->property("GNSS-SDR.init_longitude_deg", 2.0); double altitude_m = configuration->property("GNSS-SDR.init_altitude_m", 100); std::cout << "Reference location (defined in config file):" << std::endl; std::cout << "Latitude=" << lat_deg << " [�]" << std::endl; std::cout << "Longitude=" << lon_deg << " [�]" << std::endl; std::cout << "Altitude=" << altitude_m << " [m]" << std::endl; if (doppler_measurements_map.size() == 0) { std::cout << "Sorry, no GPS satellites detected in the front-end capture, please check the antenna setup..." << std::endl; delete acquisition; delete gnss_synchro; google::ShutDownCommandLineFlags(); std::cout << "GNSS-SDR Front-end calibration program ended." << std::endl; return 0; } std::map f_if_estimation_Hz_map; std::map f_fs_estimation_Hz_map; std::map f_ppm_estimation_Hz_map; std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2) << "Doppler analysis results:" << std::endl; std::cout << "SV ID Measured [Hz] Predicted [Hz]" << std::endl; for (std::map::iterator it = doppler_measurements_map.begin() ; it != doppler_measurements_map.end(); ++it) { try { double doppler_estimated_hz; doppler_estimated_hz = front_end_cal.estimate_doppler_from_eph(it->first, current_TOW, lat_deg, lon_deg, altitude_m); std::cout << " " << it->first << " " << it->second << " " << doppler_estimated_hz << std::endl; // 7. Compute front-end IF and sampling frequency estimation // Compare with the measurements and compute clock drift using FE model double estimated_fs_Hz, estimated_f_if_Hz, f_osc_err_ppm; front_end_cal.GPS_L1_front_end_model_E4000(doppler_estimated_hz, it->second,fs_in_, &estimated_fs_Hz, &estimated_f_if_Hz, &f_osc_err_ppm ); f_if_estimation_Hz_map.insert(std::pair(it->first,estimated_f_if_Hz)); f_fs_estimation_Hz_map.insert(std::pair(it->first,estimated_fs_Hz)); f_ppm_estimation_Hz_map.insert(std::pair(it->first,f_osc_err_ppm)); } catch(const std::logic_error & e) { std::cout << "Logic error catched: " << e.what() << std::endl; } catch(const boost::lock_error & e) { std::cout << "Exception catched while reading ephemeris" << std::endl; } catch(int ex) { std::cout << " " << it->first << " " << it->second << " (Eph not found)" << std::endl; } } // FINAL FE estimations double mean_f_if_Hz = 0; double mean_fs_Hz = 0; double mean_osc_err_ppm = 0; int n_elements = f_if_estimation_Hz_map.size(); for (std::map::iterator it = f_if_estimation_Hz_map.begin() ; it != f_if_estimation_Hz_map.end(); ++it) { mean_f_if_Hz += (*it).second; mean_fs_Hz += f_fs_estimation_Hz_map.find((*it).first)->second; mean_osc_err_ppm += f_ppm_estimation_Hz_map.find((*it).first)->second; } mean_f_if_Hz /= n_elements; mean_fs_Hz /= n_elements; mean_osc_err_ppm /= n_elements; std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2) << "Parameters estimation for Elonics E4000 Front-End:" << std::endl; std::cout << "Sampling frequency =" << mean_fs_Hz << " [Hz]" << std::endl; std::cout << "IF bias present in baseband=" << mean_f_if_Hz << " [Hz]" << std::endl; std::cout << "Reference oscillator error =" << mean_osc_err_ppm << " [ppm]" << std::endl; std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2) << "Corrected Doppler vs. Predicted" << std::endl; std::cout << "SV ID Corrected [Hz] Predicted [Hz]" << std::endl; for (std::map::iterator it = doppler_measurements_map.begin() ; it != doppler_measurements_map.end(); ++it) { try { double doppler_estimated_hz; doppler_estimated_hz = front_end_cal.estimate_doppler_from_eph(it->first, current_TOW, lat_deg, lon_deg, altitude_m); std::cout << " " << it->first << " " << it->second - mean_f_if_Hz << " " << doppler_estimated_hz << std::endl; } catch(const std::logic_error & e) { std::cout << "Logic error catched: " << e.what() << std::endl; } catch(const boost::lock_error & e) { std::cout << "Exception catched while reading ephemeris" << std::endl; } catch(int ex) { std::cout << " " << it->first << " " << it->second - mean_f_if_Hz << " (Eph not found)" << std::endl; } } // 8. Generate GNSS-SDR config file. delete acquisition; delete gnss_synchro; google::ShutDownCommandLineFlags(); std::cout << "GNSS-SDR Front-end calibration program ended." << std::endl; } gnss-sdr-0.0.6/src/utils/CMakeLists.txt0000644000175000017500000000137612576764164017301 0ustar carlescarles# Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(front-end-cal) gnss-sdr-0.0.6/src/utils/matlab/0000755000175000017500000000000012576764164015772 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_pvt_raw_plot_sample.m0000644000175000017500000000040112576764164024134 0ustar carlescarles% Read PVG raw dump %clear all; samplingFreq = 64e6/16; %[Hz] channels=4; path='/home/javier/workspace/gnss-sdr-ref/trunk/install/'; pvt_raw_log_path=[path 'PVT_raw.dat']; GNSS_PVT_raw= gps_l1_ca_read_pvt_raw_dump(channels,pvt_raw_log_path); gnss-sdr-0.0.6/src/utils/matlab/plot_acq_grid_gsoc_e5.m0000644000175000017500000000774112576764164022374 0ustar carlescarles% /*! % * \file plot_acq_grid_gsoc_e5.m % * \brief Read GNSS-SDR Acquisition dump binary file using the provided % function and plot acquisition grid of acquisition statistic of PRN sat. % CAF input must be 0 or 1 depending if the user desires to read the file % that resolves doppler ambiguity or not. % % This function analyzes a experiment performed by Marc Sales in the framework % of the Google Summer of Code (GSoC) 2014, with the collaboration of Luis Esteve, Javier Arribas % and Carles Fernández, related to the extension of GNSS-SDR to Galileo. % % * \author Marc Sales marcsales92(at)gmail.com, Luis Esteve, 2014. luis(at)epsilon-formacion.com % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2014 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function plot_acq_grid_gsoc_e5(sat,CAF) path='/home/marc/git/gnss-sdr/data/'; file=[path 'test_statistics_E5a_sat_' num2str(sat) '_doppler_0.dat']; sampling_freq_Hz=32E6 %Doppler_max_Hz = 14875 %Doppler_min_Hz = -15000 %Doppler_step_Hz = 125 Doppler_max_Hz = 10000 Doppler_min_Hz = -10000 Doppler_step_Hz = 250 % read files %x=read_complex_binary (file); %x=load_complex_data(file); % complex %l_y=length(x); myFile = java.io.File(file); flen = length(myFile); l_y=flen/4;% float Doppler_axes=Doppler_min_Hz:Doppler_step_Hz:Doppler_max_Hz; l_x=length(Doppler_axes); acq_grid = zeros(l_x,l_y); index=0; for k=Doppler_min_Hz:Doppler_step_Hz:Doppler_max_Hz index=index+1; filename=[path 'test_statistics_E5a_sat_' num2str(sat) '_doppler_' num2str(k) '.dat']; fid=fopen(filename,'r'); xx=fread(fid,'float');%floats from squared correlation %xx=load_complex_data (filename); %complex acq_grid(index,:)=abs(xx); end [fila,col]=find(acq_grid==max(max(acq_grid))); if (CAF > 0) filename=[path 'test_statistics_E5a_sat_' num2str(sat) '_CAF.dat']; fid=fopen(filename,'r'); xx=fread(fid,'float');%floats from squared correlation acq_grid(:,col(1))=abs(xx); Doppler_error_Hz = Doppler_axes(xx==max(xx)) maximum_correlation_peak = max(xx) else Doppler_error_Hz = Doppler_axes(fila) maximum_correlation_peak = max(max(acq_grid)) end delay_error_sps = col -1 noise_grid=acq_grid; delay_span=floor(3*sampling_freq_Hz/(1.023e7)); Doppler_span=floor(500/Doppler_step_Hz); noise_grid(fila-Doppler_span:fila+Doppler_span,col-delay_span:col+delay_span)=0; n=numel(noise_grid)-(2*delay_span+1)*(2*Doppler_span+1); noise_floor= sum(sum(noise_grid))/n Gain_dbs = 10*log10(maximum_correlation_peak/noise_floor) %% Plot 3D FULL RESOLUTION [X,Y] = meshgrid(Doppler_axes,1:1:l_y); figure; surf(X,Y,acq_grid'); xlabel('Doppler(Hz)');ylabel('Code Delay(samples)');title(['GLRT statistic of Galileo Parallel Code Phase Search Acquisition. PRN ' num2str(sat)]); end function x=load_complex_data(file) fid = fopen(file,'r'); %fid = fopen('signal_source.dat','r'); myFile = java.io.File(file); flen = length(myFile); num_samples=flen/8; % 8 bytes (2 single floats) per complex sample for k=1:num_samples a(1:2) = fread(fid, 2, 'float'); x(k) = a(1) + a(2)*1i; k=k+1; end end gnss-sdr-0.0.6/src/utils/matlab/galileo_e5a_dll_pll_plot_sample_64bits.m0000644000175000017500000000720412576764164025615 0ustar carlescarles% /*! % * \file galileo_e5a_dll_pll_plot_sample_64bits.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, Marc Sales 2014. jarribas(at)cttc.es % marcsales92@gmail.com % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2014 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ close all; clear all; samplingFreq = 64e6/32; %[Hz] channels=1; %path='/home/javier/workspace/gnss-sdr/trunk/install/'; path='/home/marc/git/gnss-sdr/data/'; clear PRN_absolute_sample_start; for N=1:1:channels tracking_log_path=[path 'e5a_tracking_ch_' num2str(N-1) '.dat']; GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump_64bits(tracking_log_path); end % GNSS-SDR format conversion to MATLAB GPS receiver for N=1:1:channels trackResults(N).status='T'; %fake track trackResults(N).codeFreq=GNSS_tracking(N).code_freq_hz.'; trackResults(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz.'; trackResults(N).dllDiscr = GNSS_tracking(N).code_error.'; trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.'; trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.'; trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.'; trackResults(N).I_PN=GNSS_tracking(N).prompt_I.'; trackResults(N).Q_PN=GNSS_tracking(N).prompt_Q.'; trackResults(N).Q_P=zeros(1,length(GNSS_tracking(N).P)); trackResults(N).I_P=GNSS_tracking(N).P.'; trackResults(N).I_E= GNSS_tracking(N).E.'; trackResults(N).I_L = GNSS_tracking(N).L.'; trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); trackResults(N).Q_L =zeros(1,length(GNSS_tracking(N).E)); trackResults(N).PRN=N; %fake PRN % Use original MATLAB tracking plot function settings.numberOfChannels=channels; settings.msToProcess=length(GNSS_tracking(N).E); plotTrackingE5a(N,trackResults,settings) end for N=1:1:channels % figure; % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); % figure; % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); % title(['Navigation constellation plot for channel ' num2str(N)]); % figure; % % plot(GNSS_tracking(N).prompt_Q,'r'); % hold on; % plot(GNSS_tracking(N).prompt_I); % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); % figure; t=0:length(GNSS_tracking(N).carrier_doppler_hz)-1; t=t/1000; plot(t,GNSS_tracking(N).carrier_doppler_hz/1000); xlabel('Time(s)');ylabel('Doppler(KHz)');title(['Doppler frequency channel ' num2str(N)]); endgnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_observables_plot_sample.m0000644000175000017500000000042312576764164024765 0ustar carlescarles% Read observables dump %clear all; samplingFreq = 64e6/16; %[Hz] channels=4; path='/home/gnss/workspace/gnss-sdr/trunk/install/'; observables_log_path=[path 'observables.dat']; GNSS_observables= gps_l1_ca_read_observables_dump(channels,observables_log_path); gnss-sdr-0.0.6/src/utils/matlab/plotTrackingE5a.m0000644000175000017500000001512412576764164021147 0ustar carlescarlesfunction plotTracking(channelList, trackResults, settings) %This function plots the tracking results for the given channel list. % %plotTracking(channelList, trackResults, settings) % % Inputs: % channelList - list of channels to be plotted. % trackResults - tracking results from the tracking function. % settings - receiver settings. %-------------------------------------------------------------------------- % SoftGNSS v3.0 % % Copyright (C) Darius Plausinaitis % Written by Darius Plausinaitis %-------------------------------------------------------------------------- %This program is free software; you can redistribute it and/or %modify it under the terms of the GNU General Public License %as published by the Free Software Foundation; either version 2 %of the License, or (at your option) any later version. % %This program is distributed in the hope that it will be useful, %but WITHOUT ANY WARRANTY; without even the implied warranty of %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %GNU General Public License for more details. % %You should have received a copy of the GNU General Public License %along with this program; if not, write to the Free Software %Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, %USA. %-------------------------------------------------------------------------- %CVS record: %$Id: plotTracking.m,v 1.5.2.23 2006/08/14 14:45:14 dpl Exp $ % Protection - if the list contains incorrect channel numbers channelList = intersect(channelList, 1:settings.numberOfChannels); %=== For all listed channels ============================================== for channelNr = channelList %% Select (or create) and clear the figure ================================ % The number 200 is added just for more convenient handling of the open % figure windows, when many figures are closed and reopened. % Figures drawn or opened by the user, will not be "overwritten" by % this function. figure(channelNr +200); clf(channelNr +200); set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ... ' (PRN ', ... num2str(trackResults(channelNr).PRN), ... ') results']); %% Draw axes ============================================================== % Row 1 handles(1, 1) = subplot(3, 3, 1); handles(1, 2) = subplot(3, 3, [2 3]); % Row 2 handles(2, 1) = subplot(3, 3, 4); handles(2, 2) = subplot(3, 3, [5 6]); % Row 3 handles(3, 1) = subplot(3, 3, 7); handles(3, 2) = subplot(3, 3, 8); handles(3, 3) = subplot(3, 3, 9); %% Plot all figures ======================================================= timeAxisInSeconds = (1:settings.msToProcess)/1000; %----- Discrete-Time Scatter Plot --------------------------------- plot(handles(1, 1), trackResults(channelNr).I_PN,... trackResults(channelNr).Q_PN, ... '.'); grid (handles(1, 1)); axis (handles(1, 1), 'equal'); title (handles(1, 1), 'Discrete-Time Scatter Plot'); xlabel(handles(1, 1), 'I prompt'); ylabel(handles(1, 1), 'Q prompt'); %----- Nav bits --------------------------------------------------- plot (handles(1, 2), timeAxisInSeconds, ... trackResults(channelNr).I_PN); grid (handles(1, 2)); title (handles(1, 2), 'Bits of the navigation message'); xlabel(handles(1, 2), 'Time (s)'); axis (handles(1, 2), 'tight'); %----- PLL discriminator unfiltered-------------------------------- plot (handles(2, 1), timeAxisInSeconds, ... trackResults(channelNr).pllDiscr, 'r'); grid (handles(2, 1)); axis (handles(2, 1), 'tight'); xlabel(handles(2, 1), 'Time (s)'); ylabel(handles(2, 1), 'Amplitude'); title (handles(2, 1), 'Raw PLL discriminator'); %----- Correlation ------------------------------------------------ plot(handles(2, 2), timeAxisInSeconds, ... [sqrt(trackResults(channelNr).I_E.^2 + ... trackResults(channelNr).Q_E.^2)', ... sqrt(trackResults(channelNr).I_P.^2 + ... trackResults(channelNr).Q_P.^2)', ... sqrt(trackResults(channelNr).I_L.^2 + ... trackResults(channelNr).Q_L.^2)'], ... '-*'); grid (handles(2, 2)); title (handles(2, 2), 'Correlation results'); xlabel(handles(2, 2), 'Time (s)'); axis (handles(2, 2), 'tight'); hLegend = legend(handles(2, 2), '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... '$\sqrt{I_{L}^2 + Q_{L}^2}$'); %set interpreter from tex to latex. This will draw \sqrt correctly set(hLegend, 'Interpreter', 'Latex'); %----- PLL discriminator filtered---------------------------------- plot (handles(3, 1), timeAxisInSeconds, ... trackResults(channelNr).pllDiscrFilt, 'b'); grid (handles(3, 1)); axis (handles(3, 1), 'tight'); xlabel(handles(3, 1), 'Time (s)'); ylabel(handles(3, 1), 'Amplitude'); title (handles(3, 1), 'Filtered PLL discriminator'); %----- DLL discriminator unfiltered-------------------------------- plot (handles(3, 2), timeAxisInSeconds, ... trackResults(channelNr).dllDiscr, 'r'); grid (handles(3, 2)); axis (handles(3, 2), 'tight'); xlabel(handles(3, 2), 'Time (s)'); ylabel(handles(3, 2), 'Amplitude'); title (handles(3, 2), 'Raw DLL discriminator'); %----- DLL discriminator filtered---------------------------------- plot (handles(3, 3), timeAxisInSeconds, ... trackResults(channelNr).dllDiscrFilt, 'b'); grid (handles(3, 3)); axis (handles(3, 3), 'tight'); xlabel(handles(3, 3), 'Time (s)'); ylabel(handles(3, 3), 'Amplitude'); title (handles(3, 3), 'Filtered DLL discriminator'); end % for channelNr = channelList gnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_dll_fll_pll_plot_sample.m0000644000175000017500000001053012576764164024735 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_fll_pll_plot_sample.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ %close all; %clear all; samplingFreq = 64e6/16; %[Hz] channels=4; path='/home/javier/workspace/gnss-sdr-ref/trunk/install/'; for N=1:1:channels tracking_log_path=[path 'tracking_ch_' num2str(N-1) '.dat']; GNSS_tracking(N)= gps_l1_ca_dll_fll_pll_read_tracking_dump(tracking_log_path,samplingFreq); end % GNSS-SDR format conversion to MATLAB GPS receiver channel_PRN_ID=[32,14,20,11]; tracking_loop_start=1;%10001; tracking_loop_end=70000; for N=1:1:channels trackResults_sdr(N).status='T'; %fake track trackResults_sdr(N).codeFreq=GNSS_tracking(N).code_freq_hz(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).dllDiscr = GNSS_tracking(N).code_error_chips(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).dllDiscrFilt = GNSS_tracking(N).code_phase_samples(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).pllDiscr = GNSS_tracking(N).PLL_discriminator_hz(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).pllDiscrFilt = GNSS_tracking(N).carr_nco(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).absoluteSample = (GNSS_tracking(N).var2(tracking_loop_start:tracking_loop_end)+GNSS_tracking(N).var1(tracking_loop_start:tracking_loop_end)).'; trackResults_sdr(N).prn_delay_ms = 1000*trackResults_sdr(N).absoluteSample/samplingFreq; %trackResults_sdr(N).absoluteSample = (GNSS_tracking(N).PRN_start_sample(tracking_loop_start:tracking_loop_end)+GNSS_tracking(N).var1(tracking_loop_start:tracking_loop_end)).'; trackResults_sdr(N).I_P=GNSS_tracking(N).prompt_I(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).Q_P=GNSS_tracking(N).prompt_Q(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).I_E= GNSS_tracking(N).E(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).I_L = GNSS_tracking(N).L(tracking_loop_start:tracking_loop_end).'; trackResults_sdr(N).Q_E = zeros(1,tracking_loop_end-tracking_loop_start+1); trackResults_sdr(N).Q_L =zeros(1,tracking_loop_end-tracking_loop_start+1); trackResults_sdr(N).PRN=channel_PRN_ID(N); % Use original MATLAB tracking plot function settings.numberOfChannels=channels; settings.msToProcess=tracking_loop_end-tracking_loop_start+1; %plotTracking(N,trackResults_sdr,settings) end % for N=1:1:channels % figure; % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); % figure; % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); % title(['Navigation constellation plot for channel ' num2str(N)]); % figure; % % plot(GNSS_tracking(N).prompt_Q,'r'); % hold on; % plot(GNSS_tracking(N).prompt_I); % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); % end gnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_dll_pll_plot_sample.m0000644000175000017500000000645212576764164024110 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_pll_plot_sample.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ close all; clear all; samplingFreq = 64e6/16; %[Hz] channels=4; path='/home/javier/workspace/gnss-sdr/trunk/install/'; clear PRN_absolute_sample_start; for N=1:1:channels tracking_log_path=[path 'tracking_ch_' num2str(N-1) '.dat']; GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump(tracking_log_path); end % GNSS-SDR format conversion to MATLAB GPS receiver for N=1:1:channels trackResults(N).status='T'; %fake track trackResults(N).codeFreq=GNSS_tracking(N).code_freq_hz.'; trackResults(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz.'; trackResults(N).dllDiscr = GNSS_tracking(N).code_error.'; trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.'; trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.'; trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.'; trackResults(N).I_P=GNSS_tracking(N).prompt_I.'; trackResults(N).Q_P=GNSS_tracking(N).prompt_Q.'; trackResults(N).I_E= GNSS_tracking(N).E.'; trackResults(N).I_L = GNSS_tracking(N).L.'; trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); trackResults(N).Q_L =zeros(1,length(GNSS_tracking(N).E)); trackResults(N).PRN=N; %fake PRN % Use original MATLAB tracking plot function settings.numberOfChannels=channels; settings.msToProcess=length(GNSS_tracking(N).E); plotTracking(N,trackResults,settings) end % for N=1:1:channels % figure; % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); % figure; % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); % title(['Navigation constellation plot for channel ' num2str(N)]); % figure; % % plot(GNSS_tracking(N).prompt_Q,'r'); % hold on; % plot(GNSS_tracking(N).prompt_I); % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); % end gnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_telemetry_plot_sample.m0000644000175000017500000000316112576764164024472 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_fll_pll_plot_sample.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ %close all; %clear all; samplingFreq = 64e6/16; %[Hz] channels=4; path='/home/javier/workspace/gnss-sdr-ref/trunk/install/'; clear PRN_absolute_sample_start; for N=1:1:channels telemetry_log_path=[path 'telemetry' num2str(N-1) '.dat']; GNSS_telemetry(N)= gps_l1_ca_read_telemetry_dump(telemetry_log_path); end gnss-sdr-0.0.6/src/utils/matlab/galileo_e1b_observables_plot_sample.m0000644000175000017500000000130212576764164025275 0ustar carlescarles% Read observables dump clear all; close all; %IFEN NSR Sampler Fs=20480000 % GNSS-SDR decimation factor 8 samplingFreq = 20480000/8; %[Hz] channels=4; path='/home/gnss/workspace/gnss-sdr/trunk/install/'; observables_log_path=[path 'observables.dat']; GNSS_observables= gps_l1_ca_read_observables_dump(channels,observables_log_path); skip=9000; ref_channel=1; plot(GNSS_observables.d_TOW_at_current_symbol(ref_channel,skip:end),GNSS_observables.Pseudorange_m(:,skip:end).') title('psudoranges'); figure plot(GNSS_observables.d_TOW_at_current_symbol(ref_channel,skip:end),GNSS_observables.Prn_timestamp_ms(:,skip:end).') title('Prn_timestamps'); gnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_dll_pll_plot_sample_64bits.m0000644000175000017500000000710412576764164025276 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_pll_plot_sample_64bits.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ close all; clear all; samplingFreq = 64e6/32; %[Hz] channels=1; %path='/home/javier/workspace/gnss-sdr/trunk/install/'; path='/home/luis/dev/gnss-sdr/trunk/data/'; clear PRN_absolute_sample_start; for N=1:1:channels tracking_log_path=[path 'tracking_ch_' num2str(N-1) '.dat']; GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump_64bits(tracking_log_path); end % GNSS-SDR format conversion to MATLAB GPS receiver for N=1:1:channels trackResults(N).status='T'; %fake track trackResults(N).codeFreq=GNSS_tracking(N).code_freq_hz.'; trackResults(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz.'; trackResults(N).dllDiscr = GNSS_tracking(N).code_error.'; trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.'; trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.'; trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.'; trackResults(N).I_P=GNSS_tracking(N).prompt_I.'; trackResults(N).Q_P=GNSS_tracking(N).prompt_Q.'; trackResults(N).I_E= GNSS_tracking(N).E.'; trackResults(N).I_L = GNSS_tracking(N).L.'; trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); trackResults(N).Q_L =zeros(1,length(GNSS_tracking(N).E)); trackResults(N).PRN=N; %fake PRN % Use original MATLAB tracking plot function settings.numberOfChannels=channels; settings.msToProcess=length(GNSS_tracking(N).E); plotTracking(N,trackResults,settings) end for N=1:1:channels % figure; % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); % figure; % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); % title(['Navigation constellation plot for channel ' num2str(N)]); % figure; % % plot(GNSS_tracking(N).prompt_Q,'r'); % hold on; % plot(GNSS_tracking(N).prompt_I); % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); % figure; t=0:length(GNSS_tracking(N).carrier_doppler_hz)-1; t=t/1000; plot(t,GNSS_tracking(N).carrier_doppler_hz/1000); xlabel('Time(s)');ylabel('Doppler(KHz)');title(['Doppler frequency channel ' num2str(N)]); end gnss-sdr-0.0.6/src/utils/matlab/help_script1.m0000644000175000017500000000214412576764164020546 0ustar carlescarles%help script to compare GNSS-SDR Preambles starts channel=3; % From GNSS_SDR telemetry decoder % 1 find preambles indexes preambles_index=find(GNSS_telemetry(channel).Preamble_symbol_counter==0); % 2 Get associated timestamp ms preambles_timestamp_sdr_ms=GNSS_telemetry(channel).prn_delay_ms(preambles_index); % From Matlab receiver [firstSubFrame, activeChnList, javi_subFrameStart_sample] = findPreambles(trackResults_sdr,settings); preambles_timestamp_matlab_ms=trackResults_sdr(channel).prn_delay_ms(javi_subFrameStart_sample(channel,1:6)); %Compare common_start_index=max(find(abs(preambles_timestamp_sdr_ms-preambles_timestamp_matlab_ms(1))<2000)); error_ms=preambles_timestamp_sdr_ms(common_start_index:(common_start_index+length(preambles_timestamp_matlab_ms)-1))-preambles_timestamp_matlab_ms.' % figure % stem(tracking_loop_start+javi_subFrameStart_sample(channel,:),1000*trackResults_sdr(channel).absoluteSample(javi_subFrameStart_sample(channel,:))/settings.samplingFreq); % % hold on; % % plot(GNSS_observables.preamble_delay_ms(channel,:)); % % plot(GNSS_observables.prn_delay_ms(channel,:),'r')gnss-sdr-0.0.6/src/utils/matlab/libs/0000755000175000017500000000000012576764164016723 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/matlab/libs/gps_l1_ca_dll_pll_read_observables_dump.m0000644000175000017500000000500312576764164027040 0ustar carlescarles% Javier Arribas 2011 function [observables] = gps_l1_ca_dll_pll_read_observables_dump (channels, filename, count) %% usage: read_tracking_dat (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_double_vars=5; double_size_bytes=8; skip_bytes_each_read=double_size_bytes*num_double_vars*channels; bytes_shift=0; if (m) usage (m); end if (nargin < 3) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else for N=1:1:channels observables.preamble_delay_ms(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved observables.prn_delay_ms(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved observables.Pseudorange_m(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved observables.Pseudorange_symbol_shift(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved observables.PRN(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved end fclose (f); %%%%%%%% output vars %%%%%%%% % for (unsigned int i=0; i. % * % * ------------------------------------------------------------------------- % */ function [navSolutions] = gps_l1_ca_pvt_read_pvt_dump (filename, count) %% usage: gps_l1_ca_pvt_read_pvt_dump (filename, [count]) %% %% open GNSS-SDR PVT binary log file .dat and return the contents %% % % // PVT GPS time % tmp_double=GPS_current_time; % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // ECEF User Position East [m] % tmp_double=mypos(0); % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // ECEF User Position North [m] % tmp_double=mypos(1); % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // ECEF User Position Up [m] % tmp_double=mypos(2); % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // User clock offset [s] % tmp_double=mypos(3); % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // GEO user position Latitude [deg] % tmp_double=d_latitude_d; % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // GEO user position Longitude [deg] % tmp_double=d_longitude_d; % d_dump_file.write((char*)&tmp_double, sizeof(double)); % // GEO user position Height [m] % tmp_double=d_height_m; % d_dump_file.write((char*)&tmp_double, sizeof(double)); m = nargchk (1,2,nargin); num_double_vars=8; double_size_bytes=8; skip_bytes_each_read=double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 3) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else GPS_current_time = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved ECEF_X = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved ECEF_Y = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved ECEF_Z = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved Clock_Offset = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved Lat = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved Long = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved Height = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved fclose (f); end navSolutions.X=ECEF_X.'; navSolutions.Y=ECEF_Y.'; navSolutions.Z=ECEF_Z.'; navSolutions.dt=Clock_Offset.'; navSolutions.latitude=Lat.'; navSolutions.longitude=Long.'; navSolutions.height=Height.'; navSolutions.TransmitTime=GPS_current_time.'; gnss-sdr-0.0.6/src/utils/matlab/libs/plotTracking.m0000644000175000017500000001512112576764164021542 0ustar carlescarlesfunction plotTracking(channelList, trackResults, settings) %This function plots the tracking results for the given channel list. % %plotTracking(channelList, trackResults, settings) % % Inputs: % channelList - list of channels to be plotted. % trackResults - tracking results from the tracking function. % settings - receiver settings. %-------------------------------------------------------------------------- % SoftGNSS v3.0 % % Copyright (C) Darius Plausinaitis % Written by Darius Plausinaitis %-------------------------------------------------------------------------- %This program is free software; you can redistribute it and/or %modify it under the terms of the GNU General Public License %as published by the Free Software Foundation; either version 2 %of the License, or (at your option) any later version. % %This program is distributed in the hope that it will be useful, %but WITHOUT ANY WARRANTY; without even the implied warranty of %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %GNU General Public License for more details. % %You should have received a copy of the GNU General Public License %along with this program; if not, write to the Free Software %Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, %USA. %-------------------------------------------------------------------------- %CVS record: %$Id: plotTracking.m,v 1.5.2.23 2006/08/14 14:45:14 dpl Exp $ % Protection - if the list contains incorrect channel numbers channelList = intersect(channelList, 1:settings.numberOfChannels); %=== For all listed channels ============================================== for channelNr = channelList %% Select (or create) and clear the figure ================================ % The number 200 is added just for more convenient handling of the open % figure windows, when many figures are closed and reopened. % Figures drawn or opened by the user, will not be "overwritten" by % this function. figure(channelNr +200); clf(channelNr +200); set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ... ' (PRN ', ... num2str(trackResults(channelNr).PRN), ... ') results']); %% Draw axes ============================================================== % Row 1 handles(1, 1) = subplot(3, 3, 1); handles(1, 2) = subplot(3, 3, [2 3]); % Row 2 handles(2, 1) = subplot(3, 3, 4); handles(2, 2) = subplot(3, 3, [5 6]); % Row 3 handles(3, 1) = subplot(3, 3, 7); handles(3, 2) = subplot(3, 3, 8); handles(3, 3) = subplot(3, 3, 9); %% Plot all figures ======================================================= timeAxisInSeconds = (1:settings.msToProcess)/1000; %----- Discrete-Time Scatter Plot --------------------------------- plot(handles(1, 1), trackResults(channelNr).I_P,... trackResults(channelNr).Q_P, ... '.'); grid (handles(1, 1)); axis (handles(1, 1), 'equal'); title (handles(1, 1), 'Discrete-Time Scatter Plot'); xlabel(handles(1, 1), 'I prompt'); ylabel(handles(1, 1), 'Q prompt'); %----- Nav bits --------------------------------------------------- plot (handles(1, 2), timeAxisInSeconds, ... trackResults(channelNr).I_P); grid (handles(1, 2)); title (handles(1, 2), 'Bits of the navigation message'); xlabel(handles(1, 2), 'Time (s)'); axis (handles(1, 2), 'tight'); %----- PLL discriminator unfiltered-------------------------------- plot (handles(2, 1), timeAxisInSeconds, ... trackResults(channelNr).pllDiscr, 'r'); grid (handles(2, 1)); axis (handles(2, 1), 'tight'); xlabel(handles(2, 1), 'Time (s)'); ylabel(handles(2, 1), 'Amplitude'); title (handles(2, 1), 'Raw PLL discriminator'); %----- Correlation ------------------------------------------------ plot(handles(2, 2), timeAxisInSeconds, ... [sqrt(trackResults(channelNr).I_E.^2 + ... trackResults(channelNr).Q_E.^2)', ... sqrt(trackResults(channelNr).I_P.^2 + ... trackResults(channelNr).Q_P.^2)', ... sqrt(trackResults(channelNr).I_L.^2 + ... trackResults(channelNr).Q_L.^2)'], ... '-*'); grid (handles(2, 2)); title (handles(2, 2), 'Correlation results'); xlabel(handles(2, 2), 'Time (s)'); axis (handles(2, 2), 'tight'); hLegend = legend(handles(2, 2), '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... '$\sqrt{I_{L}^2 + Q_{L}^2}$'); %set interpreter from tex to latex. This will draw \sqrt correctly set(hLegend, 'Interpreter', 'Latex'); %----- PLL discriminator filtered---------------------------------- plot (handles(3, 1), timeAxisInSeconds, ... trackResults(channelNr).pllDiscrFilt, 'b'); grid (handles(3, 1)); axis (handles(3, 1), 'tight'); xlabel(handles(3, 1), 'Time (s)'); ylabel(handles(3, 1), 'Amplitude'); title (handles(3, 1), 'Filtered PLL discriminator'); %----- DLL discriminator unfiltered-------------------------------- plot (handles(3, 2), timeAxisInSeconds, ... trackResults(channelNr).dllDiscr, 'r'); grid (handles(3, 2)); axis (handles(3, 2), 'tight'); xlabel(handles(3, 2), 'Time (s)'); ylabel(handles(3, 2), 'Amplitude'); title (handles(3, 2), 'Raw DLL discriminator'); %----- DLL discriminator filtered---------------------------------- plot (handles(3, 3), timeAxisInSeconds, ... trackResults(channelNr).dllDiscrFilt, 'b'); grid (handles(3, 3)); axis (handles(3, 3), 'tight'); xlabel(handles(3, 3), 'Time (s)'); ylabel(handles(3, 3), 'Amplitude'); title (handles(3, 3), 'Filtered DLL discriminator'); end % for channelNr = channelList gnss-sdr-0.0.6/src/utils/matlab/libs/gps_l1_ca_dll_pll_read_tracking_dump_64bits.m0000644000175000017500000001677712576764164027552 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_pll_read_tracking_dump.m % * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function [GNSS_tracking] = gps_l1_ca_dll_pll_read_tracking_dump_64bits (filename, count) %% usage: gps_l1_ca_dll_pll_read_tracking_dump_64bits (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_float_vars=15; num_unsigned_long_int_vars=1; num_double_vars=1; double_size_bytes=8; unsigned_long_int_size_bytes=8; float_size_bytes=4; skip_bytes_each_read=float_size_bytes*num_float_vars+unsigned_long_int_size_bytes*num_unsigned_long_int_vars+double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 2) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else v1 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v2 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v3 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v4 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v5 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v6 = fread (f, count, 'uint64',skip_bytes_each_read-unsigned_long_int_size_bytes); bytes_shift=bytes_shift+unsigned_long_int_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v7 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v8 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v9 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v10 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v11 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v12 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v13 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v14 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v15 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v16 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v17 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); fclose (f); %%%%%%%% output vars %%%%%%%% % // EPR % d_dump_file.write((char*)&tmp_E, sizeof(float)); % d_dump_file.write((char*)&tmp_P, sizeof(float)); % d_dump_file.write((char*)&tmp_L, sizeof(float)); % // PROMPT I and Q (to analyze navigation symbols) % d_dump_file.write((char*)&prompt_I, sizeof(float)); % d_dump_file.write((char*)&prompt_Q, sizeof(float)); % // PRN start sample stamp % //tmp_float=(float)d_sample_counter; % d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); % // accumulated carrier phase % d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); % % // carrier and code frequency % d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); % d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); % % //PLL commands % d_dump_file.write((char*)&carr_error, sizeof(float)); % d_dump_file.write((char*)&carr_nco, sizeof(float)); % % //DLL commands % d_dump_file.write((char*)&code_error, sizeof(float)); % d_dump_file.write((char*)&code_nco, sizeof(float)); % % // CN0 and carrier lock test % d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); % d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); % % // AUX vars (for debug purposes) % tmp_float=0; % d_dump_file.write((char*)&tmp_float, sizeof(float)); % d_dump_file.write((char*)&d_sample_counter_seconds, sizeof(double)); E=v1; P=v2; L=v3; prompt_I=v4; prompt_Q=v5; PRN_start_sample=v6; acc_carrier_phase_rad=v7; carrier_doppler_hz=v8; code_freq_hz=v9; carr_error=v10; carr_nco=v11; code_error=v12; code_nco=v13; CN0_SNV_dB_Hz=v14; carrier_lock_test=v15; var1=v16; var2=v17; GNSS_tracking.E=E; GNSS_tracking.P=P; GNSS_tracking.L=L; GNSS_tracking.prompt_I=prompt_I; GNSS_tracking.prompt_Q=prompt_Q; GNSS_tracking.PRN_start_sample=PRN_start_sample; GNSS_tracking.acc_carrier_phase_rad=acc_carrier_phase_rad; GNSS_tracking.carrier_doppler_hz=carrier_doppler_hz; GNSS_tracking.code_freq_hz=code_freq_hz; GNSS_tracking.carr_error=carr_error; GNSS_tracking.carr_nco=carr_nco; GNSS_tracking.code_error=code_error; GNSS_tracking.code_nco=code_nco; GNSS_tracking.CN0_SNV_dB_Hz=CN0_SNV_dB_Hz; GNSS_tracking.carrier_lock_test=carrier_lock_test; GNSS_tracking.var1=var1; GNSS_tracking.var2=var2; end gnss-sdr-0.0.6/src/utils/matlab/libs/galileo_e1_dll_pll_veml_read_tracking_dump.m0000644000175000017500000002120512576764164027531 0ustar carlescarles% /*! % * \file galileo_e1_dll_pll_veml_read_tracking_dump.m % * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. % * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function [GNSS_tracking] = galileo_e1_dll_pll_veml_read_tracking_dump (filename, count) %% usage: galileo_e1_dll_pll_veml_read_tracking_dump (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_float_vars=17; num_unsigned_long_int_vars=1; num_double_vars=1; double_size_bytes=8; unsigned_long_int_size_bytes=8; float_size_bytes=4; skip_bytes_each_read=float_size_bytes*num_float_vars+unsigned_long_int_size_bytes*num_unsigned_long_int_vars+double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 2) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else v1 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v2 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v3 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v4 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v5 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v6 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v7 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v8 = fread (f, count, 'uint64',skip_bytes_each_read-unsigned_long_int_size_bytes); bytes_shift=bytes_shift+unsigned_long_int_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v9 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v10 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v11 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v12 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v13 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v14 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v15 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v16 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v17 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v18 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v19 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); fclose (f); %%%%%%%% output vars %%%%%%%% % // EPR % d_dump_file.write((char*)&tmp_VE, sizeof(float)); % d_dump_file.write((char*)&tmp_E, sizeof(float)); % d_dump_file.write((char*)&tmp_P, sizeof(float)); % d_dump_file.write((char*)&tmp_L, sizeof(float)); % d_dump_file.write((char*)&tmp_VL, sizeof(float)); % // PROMPT I and Q (to analyze navigation symbols) % d_dump_file.write((char*)&prompt_I, sizeof(float)); % d_dump_file.write((char*)&prompt_Q, sizeof(float)); % // PRN start sample stamp % //tmp_float=(float)d_sample_counter; % d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); % // accumulated carrier phase % d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); % % // carrier and code frequency % d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); % d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); % % //PLL commands % d_dump_file.write((char*)&carr_error, sizeof(float)); % d_dump_file.write((char*)&carr_nco, sizeof(float)); % % //DLL commands % d_dump_file.write((char*)&code_error, sizeof(float)); % d_dump_file.write((char*)&code_nco, sizeof(float)); % % // CN0 and carrier lock test % d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); % d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); % % // AUX vars (for debug purposes) % tmp_float = d_rem_code_phase_samples; % d_dump_file.write((char*)&tmp_float, sizeof(float)); % tmp_double=(double)(d_sample_counter+d_current_prn_length_samples); % d_dump_file.write((char*)&tmp_double, sizeof(double)); VE=v1; E=v2; P=v3; L=v4; VL=v5; prompt_I=v6; prompt_Q=v7; PRN_start_sample=v8; acc_carrier_phase_rad=v9; carrier_doppler_hz=v10; code_freq_hz=v11; carr_error=v12; carr_nco=v13; code_error=v14; code_nco=v15; CN0_SNV_dB_Hz=v16; carrier_lock_test=v17; var1=v18; var2=v19; GNSS_tracking.VE=VE; GNSS_tracking.E=E; GNSS_tracking.P=P; GNSS_tracking.L=L; GNSS_tracking.VL=VL; GNSS_tracking.prompt_I=prompt_I; GNSS_tracking.prompt_Q=prompt_Q; GNSS_tracking.PRN_start_sample=PRN_start_sample; GNSS_tracking.acc_carrier_phase_rad=acc_carrier_phase_rad; GNSS_tracking.carrier_doppler_hz=carrier_doppler_hz; GNSS_tracking.code_freq_hz=code_freq_hz; GNSS_tracking.carr_error=carr_error; GNSS_tracking.carr_nco=carr_nco; GNSS_tracking.code_error=code_error; GNSS_tracking.code_nco=code_nco; GNSS_tracking.CN0_SNV_dB_Hz=CN0_SNV_dB_Hz; GNSS_tracking.carrier_lock_test=carrier_lock_test; GNSS_tracking.var1=var1; GNSS_tracking.var2=var2; end gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/0000755000175000017500000000000012576764164021366 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/togeod.m0000644000175000017500000000551412576764164023032 0ustar carlescarlesfunction [dphi, dlambda, h] = togeod(a, finv, X, Y, Z) %TOGEOD Subroutine to calculate geodetic coordinates latitude, longitude, % height given Cartesian coordinates X,Y,Z, and reference ellipsoid % values semi-major axis (a) and the inverse of flattening (finv). % %[dphi, dlambda, h] = togeod(a, finv, X, Y, Z); % % The units of linear parameters X,Y,Z,a must all agree (m,km,mi,ft,..etc) % The output units of angular quantities will be in decimal degrees % (15.5 degrees not 15 deg 30 min). The output units of h will be the % same as the units of X,Y,Z,a. % % Inputs: % a - semi-major axis of the reference ellipsoid % finv - inverse of flattening of the reference ellipsoid % X,Y,Z - Cartesian coordinates % % Outputs: % dphi - latitude % dlambda - longitude % h - height above reference ellipsoid % Copyright (C) 1987 C. Goad, Columbus, Ohio % Reprinted with permission of author, 1996 % Fortran code translated into MATLAB % Kai Borre 03-30-96 % % CVS record: % $Id: togeod.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ %========================================================================== h = 0; tolsq = 1.e-10; maxit = 10; % compute radians-to-degree factor rtd = 180/pi; % compute square of eccentricity if finv < 1.e-20 esq = 0; else esq = (2 - 1/finv) / finv; end oneesq = 1 - esq; % first guess % P is distance from spin axis P = sqrt(X^2+Y^2); % direct calculation of longitude if P > 1.e-20 dlambda = atan2(Y,X) * rtd; else dlambda = 0; end if (dlambda < 0) dlambda = dlambda + 360; end % r is distance from origin (0,0,0) r = sqrt(P^2 + Z^2); if r > 1.e-20 sinphi = Z/r; else sinphi = 0; end dphi = asin(sinphi); % initial value of height = distance from origin minus % approximate distance from origin to surface of ellipsoid if r < 1.e-20 h = 0; return end h = r - a*(1-sinphi*sinphi/finv); % iterate for i = 1:maxit sinphi = sin(dphi); cosphi = cos(dphi); % compute radius of curvature in prime vertical direction N_phi = a/sqrt(1-esq*sinphi*sinphi); % compute residuals in P and Z dP = P - (N_phi + h) * cosphi; dZ = Z - (N_phi*oneesq + h) * sinphi; % update height and latitude h = h + (sinphi*dZ + cosphi*dP); dphi = dphi + (cosphi*dZ - sinphi*dP)/(N_phi + h); % test for convergence if (dP*dP + dZ*dZ < tolsq) break; end % Not Converged--Warn user if i == maxit fprintf([' Problem in TOGEOD, did not converge in %2.0f',... ' iterations\n'], i); end end % for i = 1:maxit dphi = dphi * rtd; %%%%%%%% end togeod.m %%%%%%%%%%%%%%%%%%%%%% gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/findUtmZone.m0000644000175000017500000000513212576764164024007 0ustar carlescarlesfunction utmZone = findUtmZone(latitude, longitude) %Function finds the UTM zone number for given longitude and latitude. %The longitude value must be between -180 (180 degree West) and 180 (180 %degree East) degree. The latitude must be within -80 (80 degree South) and %84 (84 degree North). % %utmZone = findUtmZone(latitude, longitude); % %Latitude and longitude must be in decimal degrees (e.g. 15.5 degrees not %15 deg 30 min). %-------------------------------------------------------------------------- % SoftGNSS v3.0 % % Copyright (C) Darius Plausinaitis % Written by Darius Plausinaitis %-------------------------------------------------------------------------- %This program is free software; you can redistribute it and/or %modify it under the terms of the GNU General Public License %as published by the Free Software Foundation; either version 2 %of the License, or (at your option) any later version. % %This program is distributed in the hope that it will be useful, %but WITHOUT ANY WARRANTY; without even the implied warranty of %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %GNU General Public License for more details. % %You should have received a copy of the GNU General Public License %along with this program; if not, write to the Free Software %Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, %USA. %========================================================================== %CVS record: %$Id: findUtmZone.m,v 1.1.2.2 2006/08/22 13:45:59 dpl Exp $ %% Check value bounds ===================================================== if ((longitude > 180) || (longitude < -180)) error('Longitude value exceeds limits (-180:180).'); end if ((latitude > 84) || (latitude < -80)) error('Latitude value exceeds limits (-80:84).'); end %% Find zone ============================================================== % Start at 180 deg west = -180 deg utmZone = fix((180 + longitude)/ 6) + 1; %% Correct zone numbers for particular areas ============================== if (latitude > 72) % Corrections for zones 31 33 35 37 if ((longitude >= 0) && (longitude < 9)) utmZone = 31; elseif ((longitude >= 9) && (longitude < 21)) utmZone = 33; elseif ((longitude >= 21) && (longitude < 33)) utmZone = 35; elseif ((longitude >= 33) && (longitude < 42)) utmZone = 37; end elseif ((latitude >= 56) && (latitude < 64)) % Correction for zone 32 if ((longitude >= 3) && (longitude < 12)) utmZone = 32; end endgnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/clsin.m0000644000175000017500000000115312576764164022654 0ustar carlescarlesfunction result = clsin(ar, degree, argument) %Clenshaw summation of sinus of argument. % %result = clsin(ar, degree, argument); % Written by Kai Borre % December 20, 1995 % % See also WGS2UTM or CART2UTM % % CVS record: % $Id: clsin.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ %========================================================================== cos_arg = 2 * cos(argument); hr1 = 0; hr = 0; for t = degree : -1 : 1 hr2 = hr1; hr1 = hr; hr = ar(t) + cos_arg*hr1 - hr2; end result = hr * sin(argument); %%%%%%%%%%%%%%%%%%%%%%% end clsin.m %%%%%%%%%%%%%%%%%%%%%gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/geo2cart.m0000644000175000017500000000300712576764164023252 0ustar carlescarlesfunction [X, Y, Z] = geo2cart(phi, lambda, h, i) %GEO2CART Conversion of geographical coordinates (phi, lambda, h) to %Cartesian coordinates (X, Y, Z). % %[X, Y, Z] = geo2cart(phi, lambda, h, i); % %Format for phi and lambda: [degrees minutes seconds]. %h, X, Y, and Z are in meters. % %Choices i of Reference Ellipsoid % 1. International Ellipsoid 1924 % 2. International Ellipsoid 1967 % 3. World Geodetic System 1972 % 4. Geodetic Reference System 1980 % 5. World Geodetic System 1984 % % Inputs: % phi - geocentric latitude (format [degrees minutes seconds]) % lambda - geocentric longitude (format [degrees minutes seconds]) % h - height % i - reference ellipsoid type % % Outputs: % X, Y, Z - Cartesian coordinates (meters) %Kai Borre 10-13-98 %Copyright (c) by Kai Borre % % CVS record: % $Id: geo2cart.m,v 1.1.2.7 2006/08/22 13:45:59 dpl Exp $ %========================================================================== b = phi(1) + phi(2)/60 + phi(3)/3600; b = b*pi / 180; l = lambda(1) + lambda(2)/60 + lambda(3)/3600; l = l*pi / 180; a = [6378388 6378160 6378135 6378137 6378137]; f = [1/297 1/298.247 1/298.26 1/298.257222101 1/298.257223563]; ex2 = (2-f(i))*f(i) / ((1-f(i))^2); c = a(i) * sqrt(1+ex2); N = c / sqrt(1 + ex2*cos(b)^2); X = (N+h) * cos(b) * cos(l); Y = (N+h) * cos(b) * sin(l); Z = ((1-f(i))^2*N + h) * sin(b); %%%%%%%%%%%%%% end geo2cart.m %%%%%%%%%%%%%%%%%%%%%%%% gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/deg2dms.m0000644000175000017500000000200212576764164023063 0ustar carlescarlesfunction dmsOutput = deg2dms(deg) %DEG2DMS Conversion of degrees to degrees, minutes, and seconds. %The output format (dms format) is: (degrees*100 + minutes + seconds/100) % Written by Kai Borre % February 7, 2001 % Updated by Darius Plausinaitis %%% Save the sign for later processing neg_arg = false; if deg < 0 % Only positive numbers should be used while spliting into deg/min/sec deg = -deg; neg_arg = true; end %%% Split degrees minutes and seconds int_deg = floor(deg); decimal = deg - int_deg; min_part = decimal*60; min = floor(min_part); sec_part = min_part - floor(min_part); sec = sec_part*60; %%% Check for overflow if sec == 60 min = min + 1; sec = 0; end if min == 60 int_deg = int_deg + 1; min = 0; end %%% Construct the output dmsOutput = int_deg * 100 + min + sec/100; %%% Correct the sign if neg_arg == true dmsOutput = -dmsOutput; end %%%%%%%%%%%%%%%%%%% end deg2dms.m %%%%%%%%%%%%%%%%gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/mat2dms.m0000644000175000017500000001017212576764164023114 0ustar carlescarlesfunction dmsvec = mat2dms(d,m,s,n) %MAT2DMS Converts a [deg min sec] matrix to vector format % % dms = MAT2DMS(d,m,s) converts a deg:min:sec matrix into a vector % format. The vector format is dms = 100*deg + min + sec/100. % This allows d,m,s triple to be compressed into a single value, % which can then be employed similar to a degree or radian vector. % The inputs d, m and s must be of equal size. Minutes and % second must be between 0 and 60. % % dms = MAT2DMS(mat) assumes and input matrix of [d m s]. This is % useful only for single column vectors for d, m and s. % % dms = MAT2DMS(d,m) and dms = MAT2DMS([d m]) assume that seconds % are zero, s = 0. % % dms = MAT2DMS(d,m,s,n) uses n as the accuracy of the seconds % calculation. n = -2 uses accuracy in the hundredths position, % n = 0 uses accuracy in the units position. Default is n = -5. % For further discussion of the input n, see ROUNDN. % % See also DMS2MAT % Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc. % Written by: E. Byrns, E. Brown % $Revision: 1.10 $ $Date: 2002/03/20 21:25:51 $ if nargin == 0 error('Incorrect number of arguments') elseif nargin==1 if size(d,2)== 3 s = d(:,3); m = d(:,2); d = d(:,1); elseif size(d,2)== 2 m = d(:,2); d = d(:,1); s = zeros(size(d)); elseif size(d,2) == 0 d = []; m = []; s = []; else error('Single input matrices must be n-by-2 or n-by-3.'); end n = -5; elseif nargin == 2 s = zeros(size(d)); n = -5; elseif nargin == 3 n = -5; end % Test for empty arguments if isempty(d) & isempty(m) & isempty(s); dmsvec = []; return; end % Don't let seconds be rounded beyond the tens place. % If you did, then 55 seconds rounds to 100, which is not good. if n == 2; n = 1; end % Complex argument tests if any([~isreal(d) ~isreal(m) ~isreal(s)]) warning('Imaginary parts of complex ANGLE argument ignored') d = real(d); m = real(m); s = real(s); end % Dimension and value tests if ~isequal(size(d),size(m),size(s)) error('Inconsistent dimensions for input arguments') elseif any(rem(d(~isnan(d)),1) ~= 0 | rem(m(~isnan(m)),1) ~= 0) error('Degrees and minutes must be integers') end if any(abs(m) > 60) | any (abs(m) < 0) % Actually algorithm allows for error('Minutes must be >= 0 and < 60') % up to exactly 60 seconds or % 60 minutes, but the error message elseif any(abs(s) > 60) | any(abs(s) < 0) % doesn't reflect this so that angst error('Seconds must be >= 0 and < 60') % is minimized in the user docs end % Ensure that only one negative sign is present and at the correct location if any((s<0 & m<0) | (s<0 & d<0) | (m<0 & d<0) ) error('Multiple negative entries in a DMS specification') elseif any((s<0 & (m~=0 | d~= 0)) | (m<0 & d~=0)) error('Incorrect negative DMS specification') end % Construct a sign vector which has +1 when % angle >= 0 and -1 when angle < 0. Note that the sign of the % angle is associated with the largest nonzero component of d:m:s negvec = (d<0) | (m<0) | (s<0); signvec = ~negvec - negvec; % Convert to all positive numbers. Allows for easier % adjusting at 60 seconds and 60 minutes d = abs(d); m = abs(m); s = abs(s); % Truncate seconds to a specified accuracy to eliminate round-off errors [s,msg] = roundn(s,n); if ~isempty(msg); error(msg); end % Adjust for 60 seconds or 60 minutes. If s > 60, this can only be % from round-off during roundn since s > 60 is already tested above. % This round-off effect has happened though. indx = find(s >= 60); if ~isempty(indx); m(indx) = m(indx) + 1; s(indx) = 0; end % The user can not put minutes > 60 as input. However, the line % above may create minutes > 60 (since the user can put in m == 60), % thus, the test below includes the greater than condition. indx = find(m >= 60); if ~isempty(indx); d(indx) = d(indx) + 1; m(indx) = m(indx)-60; end % Construct the dms vector format dmsvec = signvec .* (100*d + m + s/100); gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/roundn.m0000644000175000017500000000234112576764164023051 0ustar carlescarlesfunction [x,msg] = roundn(x,n) %ROUNDN Rounds input data at specified power of 10 % % y = ROUNDN(x) rounds the input data x to the nearest hundredth. % % y = ROUNDN(x,n) rounds the input data x at the specified power % of tens position. For example, n = -2 rounds the input data to % the 10E-2 (hundredths) position. % % [y,msg] = ROUNDN(...) returns the text of any error condition % encountered in the output variable msg. % % See also ROUND % Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc. % Written by: E. Byrns, E. Brown % $Revision: 1.9 $ $Date: 2002/03/20 21:26:19 $ msg = []; % Initialize output if nargin == 0 error('Incorrect number of arguments') elseif nargin == 1 n = -2; end % Test for scalar n if max(size(n)) ~= 1 msg = 'Scalar accuracy required'; if nargout < 2; error(msg); end return elseif ~isreal(n) warning('Imaginary part of complex N argument ignored') n = real(n); end % Compute the exponential factors for rounding at specified % power of 10. Ensure that n is an integer. factors = 10 ^ (fix(-n)); % Set the significant digits for the input data x = round(x * factors) / factors;gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/clksin.m0000644000175000017500000000166112576764164023033 0ustar carlescarlesfunction [re, im] = clksin(ar, degree, arg_real, arg_imag) %Clenshaw summation of sinus with complex argument %[re, im] = clksin(ar, degree, arg_real, arg_imag); % Written by Kai Borre % December 20, 1995 % % See also WGS2UTM or CART2UTM % % CVS record: % $Id: clksin.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ %========================================================================== sin_arg_r = sin(arg_real); cos_arg_r = cos(arg_real); sinh_arg_i = sinh(arg_imag); cosh_arg_i = cosh(arg_imag); r = 2 * cos_arg_r * cosh_arg_i; i =-2 * sin_arg_r * sinh_arg_i; hr1 = 0; hr = 0; hi1 = 0; hi = 0; for t = degree : -1 : 1 hr2 = hr1; hr1 = hr; hi2 = hi1; hi1 = hi; z = ar(t) + r*hr1 - i*hi - hr2; hi = i*hr1 + r*hi1 - hi2; hr = z; end r = sin_arg_r * cosh_arg_i; i = cos_arg_r * sinh_arg_i; re = r*hr - i*hi; im = r*hi + i*hr; gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/e_r_corr.m0000644000175000017500000000215712576764164023343 0ustar carlescarlesfunction X_sat_rot = e_r_corr(traveltime, X_sat) %E_R_CORR Returns rotated satellite ECEF coordinates due to Earth %rotation during signal travel time % %X_sat_rot = e_r_corr(traveltime, X_sat); % % Inputs: % travelTime - signal travel time % X_sat - satellite's ECEF coordinates % % Outputs: % X_sat_rot - rotated satellite's coordinates (ECEF) %Written by Kai Borre %Copyright (c) by Kai Borre % % CVS record: % $Id: e_r_corr.m,v 1.1.1.1.2.6 2006/08/22 13:45:59 dpl Exp $ %========================================================================== Omegae_dot = 7.292115147e-5; % rad/sec %--- Find rotation angle -------------------------------------------------- omegatau = Omegae_dot * traveltime; %--- Make a rotation matrix ----------------------------------------------- R3 = [ cos(omegatau) sin(omegatau) 0; -sin(omegatau) cos(omegatau) 0; 0 0 1]; %--- Do the rotation ------------------------------------------------------ X_sat_rot = R3 * X_sat; %%%%%%%% end e_r_corr.m %%%%%%%%%%%%%%%%%%%%gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/dms2deg.m0000644000175000017500000000041212576764164023066 0ustar carlescarles function deg = dms2deg(dms) %DMS2DEG Conversion of degrees, minutes, and seconds to degrees. % Written by Javier Arribas 2011 % December 7, 2011 %if (dms(1)>=0) deg=dms(1)+dms(2)/60+dms(3)/3600; %else %deg=dms(1)-dms(2)/60-dms(3)/3600; %end gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/cart2utm.m0000644000175000017500000001217612576764164023314 0ustar carlescarlesfunction [E, N, U] = cart2utm(X, Y, Z, zone) %CART2UTM Transformation of (X,Y,Z) to (N,E,U) in UTM, zone 'zone'. % %[E, N, U] = cart2utm(X, Y, Z, zone); % % Inputs: % X,Y,Z - Cartesian coordinates. Coordinates are referenced % with respect to the International Terrestrial Reference % Frame 1996 (ITRF96) % zone - UTM zone of the given position % % Outputs: % E, N, U - UTM coordinates (Easting, Northing, Uping) %Kai Borre -11-1994 %Copyright (c) by Kai Borre % % CVS record: % $Id: cart2utm.m,v 1.1.1.1.2.6 2007/01/30 09:45:12 dpl Exp $ %This implementation is based upon %O. Andersson & K. Poder (1981) Koordinattransformationer % ved Geod\ae{}tisk Institut. Landinspekt\oe{}ren % Vol. 30: 552--571 and Vol. 31: 76 % %An excellent, general reference (KW) is %R. Koenig & K.H. Weise (1951) Mathematische Grundlagen der % h\"oheren Geod\"asie und Kartographie. % Erster Band, Springer Verlag % Explanation of variables used: % f flattening of ellipsoid % a semi major axis in m % m0 1 - scale at central meridian; for UTM 0.0004 % Q_n normalized meridian quadrant % E0 Easting of central meridian % L0 Longitude of central meridian % bg constants for ellipsoidal geogr. to spherical geogr. % gb constants for spherical geogr. to ellipsoidal geogr. % gtu constants for ellipsoidal N, E to spherical N, E % utg constants for spherical N, E to ellipoidal N, E % tolutm tolerance for utm, 1.2E-10*meridian quadrant % tolgeo tolerance for geographical, 0.00040 second of arc % B, L refer to latitude and longitude. Southern latitude is negative % International ellipsoid of 1924, valid for ED50 a = 6378388; f = 1/297; ex2 = (2-f)*f / ((1-f)^2); c = a * sqrt(1+ex2); vec = [X; Y; Z-4.5]; alpha = .756e-6; R = [ 1 -alpha 0; alpha 1 0; 0 0 1]; trans = [89.5; 93.8; 127.6]; scale = 0.9999988; v = scale*R*vec + trans; % coordinate vector in ED50 L = atan2(v(2), v(1)); N1 = 6395000; % preliminary value B = atan2(v(3)/((1-f)^2*N1), norm(v(1:2))/N1); % preliminary value U = 0.1; oldU = 0; iterations = 0; while abs(U-oldU) > 1.e-4 oldU = U; N1 = c/sqrt(1+ex2*(cos(B))^2); B = atan2(v(3)/((1-f)^2*N1+U), norm(v(1:2))/(N1+U) ); U = norm(v(1:2))/cos(B)-N1; iterations = iterations + 1; if iterations > 100 fprintf('Failed to approximate U with desired precision. U-oldU: %e.\n', U-oldU); break; end end %Normalized meridian quadrant, KW p. 50 (96), p. 19 (38b), p. 5 (21) m0 = 0.0004; n = f / (2-f); m = n^2 * (1/4 + n*n/64); w = (a*(-n-m0+m*(1-m0))) / (1+n); Q_n = a + w; %Easting and longitude of central meridian E0 = 500000; L0 = (zone-30)*6 - 3; %Check tolerance for reverse transformation tolutm = pi/2 * 1.2e-10 * Q_n; tolgeo = 0.000040; %Coefficients of trigonometric series %ellipsoidal to spherical geographical, KW p. 186--187, (51)-(52) % bg[1] = n*(-2 + n*(2/3 + n*(4/3 + n*(-82/45)))); % bg[2] = n^2*(5/3 + n*(-16/15 + n*(-13/9))); % bg[3] = n^3*(-26/15 + n*34/21); % bg[4] = n^4*1237/630; %spherical to ellipsoidal geographical, KW p. 190--191, (61)-(62) % gb[1] = n*(2 + n*(-2/3 + n*(-2 + n*116/45))); % gb[2] = n^2*(7/3 + n*(-8/5 + n*(-227/45))); % gb[3] = n^3*(56/15 + n*(-136/35)); % gb[4] = n^4*4279/630; %spherical to ellipsoidal N, E, KW p. 196, (69) % gtu[1] = n*(1/2 + n*(-2/3 + n*(5/16 + n*41/180))); % gtu[2] = n^2*(13/48 + n*(-3/5 + n*557/1440)); % gtu[3] = n^3*(61/240 + n*(-103/140)); % gtu[4] = n^4*49561/161280; %ellipsoidal to spherical N, E, KW p. 194, (65) % utg[1] = n*(-1/2 + n*(2/3 + n*(-37/96 + n*1/360))); % utg[2] = n^2*(-1/48 + n*(-1/15 + n*437/1440)); % utg[3] = n^3*(-17/480 + n*37/840); % utg[4] = n^4*(-4397/161280); %With f = 1/297 we get bg = [-3.37077907e-3; 4.73444769e-6; -8.29914570e-9; 1.58785330e-11]; gb = [ 3.37077588e-3; 6.62769080e-6; 1.78718601e-8; 5.49266312e-11]; gtu = [ 8.41275991e-4; 7.67306686e-7; 1.21291230e-9; 2.48508228e-12]; utg = [-8.41276339e-4; -5.95619298e-8; -1.69485209e-10; -2.20473896e-13]; %Ellipsoidal latitude, longitude to spherical latitude, longitude neg_geo = 'FALSE'; if B < 0 neg_geo = 'TRUE '; end Bg_r = abs(B); [res_clensin] = clsin(bg, 4, 2*Bg_r); Bg_r = Bg_r + res_clensin; L0 = L0*pi / 180; Lg_r = L - L0; %Spherical latitude, longitude to complementary spherical latitude % i.e. spherical N, E cos_BN = cos(Bg_r); Np = atan2(sin(Bg_r), cos(Lg_r)*cos_BN); Ep = atanh(sin(Lg_r) * cos_BN); %Spherical normalized N, E to ellipsoidal N, E Np = 2 * Np; Ep = 2 * Ep; [dN, dE] = clksin(gtu, 4, Np, Ep); Np = Np/2; Ep = Ep/2; Np = Np + dN; Ep = Ep + dE; N = Q_n * Np; E = Q_n*Ep + E0; if neg_geo == 'TRUE ' N = -N + 20000000; end; %%%%%%%%%%%%%%%%%%%% end cart2utm.m %%%%%%%%%%%%%%%%%%%%gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/check_t.m0000644000175000017500000000124712576764164023150 0ustar carlescarlesfunction corrTime = check_t(time) %CHECK_T accounting for beginning or end of week crossover. % %corrTime = check_t(time); % % Inputs: % time - time in seconds % % Outputs: % corrTime - corrected time (seconds) %Kai Borre 04-01-96 %Copyright (c) by Kai Borre % % CVS record: % $Id: check_t.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ %========================================================================== half_week = 302400; % seconds corrTime = time; if time > half_week corrTime = time - 2*half_week; elseif time < -half_week corrTime = time + 2*half_week; end %%%%%%% end check_t.m %%%%%%%%%%%%%%%%%gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/satpos.m0000644000175000017500000001207212576764164023057 0ustar carlescarlesfunction [satPositions, satClkCorr] = satpos(transmitTime, prnList, ... eph, settings) %SATPOS Computation of satellite coordinates X,Y,Z at TRANSMITTIME for %given ephemeris EPH. Coordinates are computed for each satellite in the %list PRNLIST. %[satPositions, satClkCorr] = satpos(transmitTime, prnList, eph, settings); % % Inputs: % transmitTime - transmission time % prnList - list of PRN-s to be processed % eph - ephemerides of satellites % settings - receiver settings % % Outputs: % satPositions - position of satellites (in ECEF system [X; Y; Z;]) % satClkCorr - correction of satellite clocks %-------------------------------------------------------------------------- % SoftGNSS v3.0 %-------------------------------------------------------------------------- %Based on Kai Borre 04-09-96 %Copyright (c) by Kai Borre %Updated by Darius Plausinaitis, Peter Rinder and Nicolaj Bertelsen % % CVS record: % $Id: satpos.m,v 1.1.2.17 2007/01/30 09:45:12 dpl Exp $ %% Initialize constants =================================================== numOfSatellites = size(prnList, 2); % GPS constatns gpsPi = 3.1415926535898; % Pi used in the GPS coordinate % system %--- Constants for satellite position calculation ------------------------- Omegae_dot = 7.2921151467e-5; % Earth rotation rate, [rad/s] GM = 3.986005e14; % Universal gravitational constant times % the mass of the Earth, [m^3/s^2] F = -4.442807633e-10; % Constant, [sec/(meter)^(1/2)] %% Initialize results ===================================================== satClkCorr = zeros(1, numOfSatellites); satPositions = zeros(3, numOfSatellites); %% Process each satellite ================================================= for satNr = 1 : numOfSatellites prn = prnList(satNr); %% Find initial satellite clock correction -------------------------------- %--- Find time difference --------------------------------------------- dt = check_t(transmitTime - eph(prn).t_oc); %--- Calculate clock correction --------------------------------------- satClkCorr(satNr) = (eph(prn).a_f2 * dt + eph(prn).a_f1) * dt + ... eph(prn).a_f0 - ... eph(prn).T_GD; time = transmitTime - satClkCorr(satNr); %% Find satellite's position ---------------------------------------------- %Restore semi-major axis a = eph(prn).sqrtA * eph(prn).sqrtA; %Time correction tk = check_t(time - eph(prn).t_oe); %Initial mean motion n0 = sqrt(GM / a^3); %Mean motion n = n0 + eph(prn).deltan; %Mean anomaly M = eph(prn).M_0 + n * tk; %Reduce mean anomaly to between 0 and 360 deg M = rem(M + 2*gpsPi, 2*gpsPi); %Initial guess of eccentric anomaly E = M; %--- Iteratively compute eccentric anomaly ---------------------------- for ii = 1:10 E_old = E; E = M + eph(prn).e * sin(E); dE = rem(E - E_old, 2*gpsPi); if abs(dE) < 1.e-12 % Necessary precision is reached, exit from the loop break; end end %Reduce eccentric anomaly to between 0 and 360 deg E = rem(E + 2*gpsPi, 2*gpsPi); %Compute relativistic correction term dtr = F * eph(prn).e * eph(prn).sqrtA * sin(E); %Calculate the true anomaly nu = atan2(sqrt(1 - eph(prn).e^2) * sin(E), cos(E)-eph(prn).e); %Compute angle phi phi = nu + eph(prn).omega; %Reduce phi to between 0 and 360 deg phi = rem(phi, 2*gpsPi); %Correct argument of latitude u = phi + ... eph(prn).C_uc * cos(2*phi) + ... eph(prn).C_us * sin(2*phi); %Correct radius r = a * (1 - eph(prn).e*cos(E)) + ... eph(prn).C_rc * cos(2*phi) + ... eph(prn).C_rs * sin(2*phi); %Correct inclination i = eph(prn).i_0 + eph(prn).iDot * tk + ... eph(prn).C_ic * cos(2*phi) + ... eph(prn).C_is * sin(2*phi); %Compute the angle between the ascending node and the Greenwich meridian Omega = eph(prn).omega_0 + (eph(prn).omegaDot - Omegae_dot)*tk - ... Omegae_dot * eph(prn).t_oe; %Reduce to between 0 and 360 deg Omega = rem(Omega + 2*gpsPi, 2*gpsPi); %--- Compute satellite coordinates ------------------------------------ satPositions(1, satNr) = cos(u)*r * cos(Omega) - sin(u)*r * cos(i)*sin(Omega); satPositions(2, satNr) = cos(u)*r * sin(Omega) + sin(u)*r * cos(i)*cos(Omega); satPositions(3, satNr) = sin(u)*r * sin(i); %% Include relativistic correction in clock correction -------------------- satClkCorr(satNr) = (eph(prn).a_f2 * dt + eph(prn).a_f1) * dt + ... eph(prn).a_f0 - ... eph(prn).T_GD + dtr; end % for satNr = 1 : numOfSatellites gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/topocent.m0000644000175000017500000000261212576764164023400 0ustar carlescarlesfunction [Az, El, D] = topocent(X, dx) %TOPOCENT Transformation of vector dx into topocentric coordinate % system with origin at X. % Both parameters are 3 by 1 vectors. % %[Az, El, D] = topocent(X, dx); % % Inputs: % X - vector origin corrdinates (in ECEF system [X; Y; Z;]) % dx - vector ([dX; dY; dZ;]). % % Outputs: % D - vector length. Units like units of the input % Az - azimuth from north positive clockwise, degrees % El - elevation angle, degrees %Kai Borre 11-24-96 %Copyright (c) by Kai Borre % % CVS record: % $Id: topocent.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ %========================================================================== dtr = pi/180; [phi, lambda, h] = togeod(6378137, 298.257223563, X(1), X(2), X(3)); cl = cos(lambda * dtr); sl = sin(lambda * dtr); cb = cos(phi * dtr); sb = sin(phi * dtr); F = [-sl -sb*cl cb*cl; cl -sb*sl cb*sl; 0 cb sb]; local_vector = F' * dx; E = local_vector(1); N = local_vector(2); U = local_vector(3); hor_dis = sqrt(E^2 + N^2); if hor_dis < 1.e-20 Az = 0; El = 90; else Az = atan2(E, N)/dtr; El = atan2(U, hor_dis)/dtr; end if Az < 0 Az = Az + 360; end D = sqrt(dx(1)^2 + dx(2)^2 + dx(3)^2); %%%%%%%%% end topocent.m %%%%%%%%%gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/cart2geo.m0000644000175000017500000000357312576764164023262 0ustar carlescarlesfunction [phi, lambda, h] = cart2geo(X, Y, Z, i) %CART2GEO Conversion of Cartesian coordinates (X,Y,Z) to geographical %coordinates (phi, lambda, h) on a selected reference ellipsoid. % %[phi, lambda, h] = cart2geo(X, Y, Z, i); % % Choices i of Reference Ellipsoid for Geographical Coordinates % 1. International Ellipsoid 1924 % 2. International Ellipsoid 1967 % 3. World Geodetic System 1972 % 4. Geodetic Reference System 1980 % 5. World Geodetic System 1984 %Kai Borre 10-13-98 %Copyright (c) by Kai Borre %Revision: 1.0 Date: 1998/10/23 % % CVS record: % $Id: cart2geo.m,v 1.1.2.3 2007/01/29 15:22:49 dpl Exp $ %========================================================================== a = [6378388 6378160 6378135 6378137 6378137]; f = [1/297 1/298.247 1/298.26 1/298.257222101 1/298.257223563]; lambda = atan2(Y,X); ex2 = (2-f(i))*f(i)/((1-f(i))^2); c = a(i)*sqrt(1+ex2); phi = atan(Z/((sqrt(X^2+Y^2)*(1-(2-f(i)))*f(i)))); h = 0.1; oldh = 0; iterations = 0; while abs(h-oldh) > 1.e-12 oldh = h; N = c/sqrt(1+ex2*cos(phi)^2); phi = atan(Z/((sqrt(X^2+Y^2)*(1-(2-f(i))*f(i)*N/(N+h))))); h = sqrt(X^2+Y^2)/cos(phi)-N; iterations = iterations + 1; if iterations > 100 fprintf('Failed to approximate h with desired precision. h-oldh: %e.\n', h-oldh); break; end end phi = phi*180/pi; % b = zeros(1,3); % b(1,1) = fix(phi); % b(2,1) = fix(rem(phi,b(1,1))*60); % b(3,1) = (phi-b(1,1)-b(1,2)/60)*3600; lambda = lambda*180/pi; % l = zeros(1,3); % l(1,1) = fix(lambda); % l(2,1) = fix(rem(lambda,l(1,1))*60); % l(3,1) = (lambda-l(1,1)-l(1,2)/60)*3600; %fprintf('\n phi =%3.0f %3.0f %8.5f',b(1),b(2),b(3)) %fprintf('\n lambda =%3.0f %3.0f %8.5f',l(1),l(2),l(3)) %fprintf('\n h =%14.3f\n',h) %%%%%%%%%%%%%% end cart2geo.m %%%%%%%%%%%%%%%%%%% gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/leastSquarePos.m0000644000175000017500000001055512576764164024525 0ustar carlescarlesfunction [pos, el, az, dop] = leastSquarePos(satpos, obs, settings) %Function calculates the Least Square Solution. % %[pos, el, az, dop] = leastSquarePos(satpos, obs, settings); % % Inputs: % satpos - Satellites positions (in ECEF system: [X; Y; Z;] - % one column per satellite) % obs - Observations - the pseudorange measurements to each % satellite: % (e.g. [20000000 21000000 .... .... .... .... ....]) % settings - receiver settings % % Outputs: % pos - receiver position and receiver clock error % (in ECEF system: [X, Y, Z, dt]) % el - Satellites elevation angles (degrees) % az - Satellites azimuth angles (degrees) % dop - Dilutions Of Precision ([GDOP PDOP HDOP VDOP TDOP]) %-------------------------------------------------------------------------- % SoftGNSS v3.0 %-------------------------------------------------------------------------- %Based on Kai Borre %Copyright (c) by Kai Borre %Updated by Darius Plausinaitis, Peter Rinder and Nicolaj Bertelsen % % CVS record: % $Id: leastSquarePos.m,v 1.1.2.12 2006/08/22 13:45:59 dpl Exp $ %========================================================================== %=== Initialization ======================================================= nmbOfIterations = 7; dtr = pi/180; pos = zeros(4, 1); X = satpos; nmbOfSatellites = size(satpos, 2); A = zeros(nmbOfSatellites, 4); omc = zeros(nmbOfSatellites, 1); az = zeros(1, nmbOfSatellites); el = az; %=== Iteratively find receiver position =================================== for iter = 1:nmbOfIterations for i = 1:nmbOfSatellites if iter == 1 %--- Initialize variables at the first iteration -------------- Rot_X = X(:, i); trop = 2; else %--- Update equations ----------------------------------------- rho2 = (X(1, i) - pos(1))^2 + (X(2, i) - pos(2))^2 + ... (X(3, i) - pos(3))^2; traveltime = sqrt(rho2) / settings.c ; %--- Correct satellite position (do to earth rotation) -------- Rot_X = e_r_corr(traveltime, X(:, i)); %--- Find the elevation angel of the satellite ---------------- [az(i), el(i), dist] = topocent(pos(1:3, :), Rot_X - pos(1:3, :)); if (settings.useTropCorr == 1) %--- Calculate tropospheric correction -------------------- trop = tropo(sin(el(i) * dtr), ... 0.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0); else % Do not calculate or apply the tropospheric corrections trop = 0; end end % if iter == 1 ... ... else %--- Apply the corrections ---------------------------------------- omc(i) = (obs(i) - norm(Rot_X - pos(1:3), 'fro') - pos(4) - trop); %--- Construct the A matrix --------------------------------------- A(i, :) = [ (-(Rot_X(1) - pos(1))) / obs(i) ... (-(Rot_X(2) - pos(2))) / obs(i) ... (-(Rot_X(3) - pos(3))) / obs(i) ... 1 ]; end % for i = 1:nmbOfSatellites % These lines allow the code to exit gracefully in case of any errors if rank(A) ~= 4 pos = zeros(1, 4); return end %--- Find position update --------------------------------------------- x = A \ omc; %--- Apply position update -------------------------------------------- pos = pos + x; end % for iter = 1:nmbOfIterations pos = pos'; %=== Calculate Dilution Of Precision ====================================== if nargout == 4 %--- Initialize output ------------------------------------------------ dop = zeros(1, 5); %--- Calculate DOP ---------------------------------------------------- Q = inv(A'*A); dop(1) = sqrt(trace(Q)); % GDOP dop(2) = sqrt(Q(1,1) + Q(2,2) + Q(3,3)); % PDOP dop(3) = sqrt(Q(1,1) + Q(2,2)); % HDOP dop(4) = sqrt(Q(3,3)); % VDOP dop(5) = sqrt(Q(4,4)); % TDOP end gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/dms2mat.m0000644000175000017500000000653312576764164023122 0ustar carlescarlesfunction [dout,mout,sout] = dms2mat(dms,n) %DMS2MAT Converts a dms vector format to a [deg min sec] matrix % % [d,m,s] = DMS2MAT(dms) converts a dms vector format to a % deg:min:sec matrix. The vector format is dms = 100*deg + min + sec/100. % This allows compressed dms data to be expanded to a d,m,s triple, % for easier reporting and viewing of the data. % % [d,m,s] = DMS2MAT(dms,n) uses n digits in the accuracy of the % seconds calculation. n = -2 uses accuracy in the hundredths position, % n = 0 uses accuracy in the units position. Default is n = -5. % For further discussion of the input n, see ROUNDN. % % mat = DMS2MAT(...) returns a single output argument of mat = [d m s]. % This is useful only if the input dms is a single column vector. % % See also MAT2DMS % Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc. % Written by: E. Byrns, E. Brown % $Revision: 1.10 $ $Date: 2002/03/20 21:25:06 $ if nargin == 0 error('Incorrect number of arguments') elseif nargin == 1 n = -5; end % Test for empty arguments if isempty(dms); dout = []; mout = []; sout = []; return; end % Test for complex arguments if ~isreal(dms) warning('Imaginary parts of complex ANGLE argument ignored') dms = real(dms); end % Don't let seconds be rounded beyond the tens place. % If you did, then 55 seconds rounds to 100, which is not good. if n == 2; n = 1; end % Construct a sign vector which has +1 when dms >= 0 and -1 when dms < 0. signvec = sign(dms); signvec = signvec + (signvec == 0); % Ensure +1 when dms = 0 % Decompress the dms data vector dms = abs(dms); d = fix(dms/100); % Degrees m = fix(dms) - abs(100*d); % Minutes [s,msg] = roundn(100*rem(dms,1),n); % Seconds: Truncate to roundoff error if ~isempty(msg); error(msg); end % Adjust for 60 seconds or 60 minutes. % Test for seconds > 60 to allow for round-off from roundn, % Test for minutes > 60 as a ripple effect from seconds > 60 indx = find(s >= 60); if ~isempty(indx); m(indx) = m(indx) + 1; s(indx) = s(indx) - 60; end indx = find(m >= 60); if ~isempty(indx); d(indx) = d(indx) + 1; m(indx) = m(indx) - 60; end % Data consistency checks if any(m > 59) | any (m < 0) error('Minutes must be >= 0 and <= 59') elseif any(s >= 60) | any( s < 0) error('Seconds must be >= 0 and < 60') end % Determine where to store the sign of the angle. It should be % associated with the largest nonzero component of d:m:s. dsign = signvec .* (d~=0); msign = signvec .* (d==0 & m~=0); ssign = signvec .* (d==0 & m==0 & s~=0); % In the application of signs below, the comparison with 0 is used so that % the sign vector contains only +1 and -1. Any zero occurances causes % data to be lost when the sign has been applied to a higher component % of d:m:s. Use fix function to eliminate potential round-off errors. d = ((dsign==0) + dsign).*fix(d); % Apply signs to the degrees m = ((msign==0) + msign).*fix(m); % Apply signs to minutes s = ((ssign==0) + ssign).*s; % Apply signs to seconds % Set the output arguments if nargout <= 1 dout = [d m s]; elseif nargout == 3 dout = d; mout = m; sout = s; else error('Invalid number of output arguments') end gnss-sdr-0.0.6/src/utils/matlab/libs/geoFunctions/tropo.m0000644000175000017500000000552412576764164022715 0ustar carlescarlesfunction ddr = tropo(sinel, hsta, p, tkel, hum, hp, htkel, hhum) %TROPO Calculation of tropospheric correction. % The range correction ddr in m is to be subtracted from % pseudo-ranges and carrier phases % %ddr = tropo(sinel, hsta, p, tkel, hum, hp, htkel, hhum); % % Inputs: % sinel - sin of elevation angle of satellite % hsta - height of station in km % p - atmospheric pressure in mb at height hp % tkel - surface temperature in degrees Kelvin at height htkel % hum - humidity in % at height hhum % hp - height of pressure measurement in km % htkel - height of temperature measurement in km % hhum - height of humidity measurement in km % % Outputs: % ddr - range correction (meters) % % Reference % Goad, C.C. & Goodman, L. (1974) A Modified Tropospheric % Refraction Correction Model. Paper presented at the % American Geophysical Union Annual Fall Meeting, San % Francisco, December 12-17 % A Matlab reimplementation of a C code from driver. % Kai Borre 06-28-95 % % CVS record: % $Id: tropo.m,v 1.1.1.1.2.4 2006/08/22 13:46:00 dpl Exp $ %========================================================================== a_e = 6378.137; % semi-major axis of earth ellipsoid b0 = 7.839257e-5; tlapse = -6.5; tkhum = tkel + tlapse*(hhum-htkel); atkel = 7.5*(tkhum-273.15) / (237.3+tkhum-273.15); e0 = 0.0611 * hum * 10^atkel; tksea = tkel - tlapse*htkel; em = -978.77 / (2.8704e6*tlapse*1.0e-5); tkelh = tksea + tlapse*hhum; e0sea = e0 * (tksea/tkelh)^(4*em); tkelp = tksea + tlapse*hp; psea = p * (tksea/tkelp)^em; if sinel < 0 sinel = 0; end tropo = 0; done = 'FALSE'; refsea = 77.624e-6 / tksea; htop = 1.1385e-5 / refsea; refsea = refsea * psea; ref = refsea * ((htop-hsta)/htop)^4; while 1 rtop = (a_e+htop)^2 - (a_e+hsta)^2*(1-sinel^2); % check to see if geometry is crazy if rtop < 0 rtop = 0; end rtop = sqrt(rtop) - (a_e+hsta)*sinel; a = -sinel/(htop-hsta); b = -b0*(1-sinel^2) / (htop-hsta); rn = zeros(8,1); for i = 1:8 rn(i) = rtop^(i+1); end alpha = [2*a, 2*a^2+4*b/3, a*(a^2+3*b),... a^4/5+2.4*a^2*b+1.2*b^2, 2*a*b*(a^2+3*b)/3,... b^2*(6*a^2+4*b)*1.428571e-1, 0, 0]; if b^2 > 1.0e-35 alpha(7) = a*b^3/2; alpha(8) = b^4/9; end dr = rtop; dr = dr + alpha*rn; tropo = tropo + dr*ref*1000; if done == 'TRUE ' ddr = tropo; break; end done = 'TRUE '; refsea = (371900.0e-6/tksea-12.92e-6)/tksea; htop = 1.1385e-5 * (1255/tksea+0.05)/refsea; ref = refsea * e0sea * ((htop-hsta)/htop)^4; end; %%%%%%%%% end tropo.m %%%%%%%%%%%%%%%%%%% gnss-sdr-0.0.6/src/utils/matlab/libs/plotVEMLTracking.m0000644000175000017500000001602712576764164022234 0ustar carlescarlesfunction plotVEMLTracking(channelList, trackResults, settings) %This function plots the tracking results for the given channel list. % %plotTracking(channelList, trackResults, settings) % % Inputs: % channelList - list of channels to be plotted. % trackResults - tracking results from the tracking function. % settings - receiver settings. %-------------------------------------------------------------------------- % SoftGNSS v3.0 % % Copyright (C) Darius Plausinaitis % Written by Darius Plausinaitis %-------------------------------------------------------------------------- %This program is free software; you can redistribute it and/or %modify it under the terms of the GNU General Public License %as published by the Free Software Foundation; either version 2 %of the License, or (at your option) any later version. % %This program is distributed in the hope that it will be useful, %but WITHOUT ANY WARRANTY; without even the implied warranty of %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %GNU General Public License for more details. % %You should have received a copy of the GNU General Public License %along with this program; if not, write to the Free Software %Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, %USA. %-------------------------------------------------------------------------- %CVS record: %$Id: plotTracking.m,v 1.5.2.23 2006/08/14 14:45:14 dpl Exp $ % Protection - if the list contains incorrect channel numbers channelList = intersect(channelList, 1:settings.numberOfChannels); %=== For all listed channels ============================================== for channelNr = channelList %% Select (or create) and clear the figure ================================ % The number 200 is added just for more convenient handling of the open % figure windows, when many figures are closed and reopened. % Figures drawn or opened by the user, will not be "overwritten" by % this function. figure(channelNr +200); clf(channelNr +200); set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ... ' (PRN ', ... num2str(trackResults(channelNr).PRN), ... ') results']); %% Draw axes ============================================================== % Row 1 handles(1, 1) = subplot(3, 3, 1); handles(1, 2) = subplot(3, 3, [2 3]); % Row 2 handles(2, 1) = subplot(3, 3, 4); handles(2, 2) = subplot(3, 3, [5 6]); % Row 3 handles(3, 1) = subplot(3, 3, 7); handles(3, 2) = subplot(3, 3, 8); handles(3, 3) = subplot(3, 3, 9); %% Plot all figures ======================================================= timeAxisInSeconds = (1:4:settings.msToProcess)/1000; %----- Discrete-Time Scatter Plot --------------------------------- plot(handles(1, 1), trackResults(channelNr).I_P,... trackResults(channelNr).Q_P, ... '.'); grid (handles(1, 1)); axis (handles(1, 1), 'equal'); title (handles(1, 1), 'Discrete-Time Scatter Plot'); xlabel(handles(1, 1), 'I prompt'); ylabel(handles(1, 1), 'Q prompt'); %----- Nav bits --------------------------------------------------- plot (handles(1, 2), timeAxisInSeconds, ... trackResults(channelNr).I_P); grid (handles(1, 2)); title (handles(1, 2), 'Bits of the navigation message'); xlabel(handles(1, 2), 'Time (s)'); axis (handles(1, 2), 'tight'); %----- PLL discriminator unfiltered-------------------------------- plot (handles(2, 1), timeAxisInSeconds, ... trackResults(channelNr).pllDiscr, 'r'); grid (handles(2, 1)); axis (handles(2, 1), 'tight'); xlabel(handles(2, 1), 'Time (s)'); ylabel(handles(2, 1), 'Amplitude'); title (handles(2, 1), 'Raw PLL discriminator'); %----- Correlation ------------------------------------------------ plot(handles(2, 2), timeAxisInSeconds, ... [sqrt(trackResults(channelNr).I_VE.^2 + ... trackResults(channelNr).Q_VE.^2)', ... sqrt(trackResults(channelNr).I_E.^2 + ... trackResults(channelNr).Q_E.^2)', ... sqrt(trackResults(channelNr).I_P.^2 + ... trackResults(channelNr).Q_P.^2)', ... sqrt(trackResults(channelNr).I_L.^2 + ... trackResults(channelNr).Q_L.^2)', ... sqrt(trackResults(channelNr).I_VL.^2 + ... trackResults(channelNr).Q_VL.^2)'], ... '-*'); grid (handles(2, 2)); title (handles(2, 2), 'Correlation results'); xlabel(handles(2, 2), 'Time (s)'); axis (handles(2, 2), 'tight'); hLegend = legend(handles(2, 2), '$\sqrt{I_{VE}^2 + Q_{VE}^2}$', ... '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... '$\sqrt{I_{L}^2 + Q_{L}^2}$', ... '$\sqrt{I_{VL}^2 + Q_{VL}^2}$'); %set interpreter from tex to latex. This will draw \sqrt correctly set(hLegend, 'Interpreter', 'Latex'); %----- PLL discriminator filtered---------------------------------- plot (handles(3, 1), timeAxisInSeconds, ... trackResults(channelNr).pllDiscrFilt, 'b'); grid (handles(3, 1)); axis (handles(3, 1), 'tight'); xlabel(handles(3, 1), 'Time (s)'); ylabel(handles(3, 1), 'Amplitude'); title (handles(3, 1), 'Filtered PLL discriminator'); %----- DLL discriminator unfiltered-------------------------------- plot (handles(3, 2), timeAxisInSeconds, ... trackResults(channelNr).dllDiscr, 'r'); grid (handles(3, 2)); axis (handles(3, 2), 'tight'); xlabel(handles(3, 2), 'Time (s)'); ylabel(handles(3, 2), 'Amplitude'); title (handles(3, 2), 'Raw DLL discriminator'); %----- DLL discriminator filtered---------------------------------- plot (handles(3, 3), timeAxisInSeconds, ... trackResults(channelNr).dllDiscrFilt, 'b'); grid (handles(3, 3)); axis (handles(3, 3), 'tight'); xlabel(handles(3, 3), 'Time (s)'); ylabel(handles(3, 3), 'Amplitude'); title (handles(3, 3), 'Filtered DLL discriminator'); end % for channelNr = channelList gnss-sdr-0.0.6/src/utils/matlab/libs/gps_l1_ca_read_telemetry_dump.m0000644000175000017500000000325212576764164025045 0ustar carlescarles% Javier Arribas 2011 function [telemetry] = gps_l1_ca_read_telemetry_dump (filename, count) %% usage: read_tracking_dat (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_double_vars=3; double_size_bytes=8; skip_bytes_each_read=double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 3) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else telemetry.preamble_delay_ms = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved telemetry.prn_delay_ms = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved telemetry.Preamble_symbol_counter = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved fclose (f); %%%%%%%% output vars %%%%%%%% % { % double tmp_double; % tmp_double = current_synchro_data.Preamble_delay_ms; % d_dump_file.write((char*)&tmp_double, sizeof(double)); % tmp_double = current_synchro_data.Prn_delay_ms; % d_dump_file.write((char*)&tmp_double, sizeof(double)); % tmp_double = current_synchro_data.Preamble_symbol_counter; % d_dump_file.write((char*)&tmp_double, sizeof(double)); % } end gnss-sdr-0.0.6/src/utils/matlab/libs/gps_l1_ca_dll_fll_pll_read_tracking_dump.m0000644000175000017500000001704112576764164027175 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_fll_pll_read_tracking_dump.m % * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function [GNSS_tracking] = gps_l1_ca_dll_fll_pll_read_tracking_dump (filename, samplingFreq, count) %% usage: gps_l1_ca_dll_fll_pll_read_tracking_dump (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,3,nargin); num_float_vars=16; num_double_vars=1; double_size_bytes=8; float_size_bytes=4; skip_bytes_each_read=float_size_bytes*num_float_vars+double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 3) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else v1 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v2 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v3 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v4 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v5 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v6 = fread (f, count, 'uint32',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v7 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v8 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v9 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v10 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v11 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v12 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v13 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v14 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v15 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v16 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v17 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); fclose (f); %%%%%%%% output vars %%%%%%%% % // EPR % d_dump_file.write((char*)&tmp_E, sizeof(float)); % d_dump_file.write((char*)&tmp_P, sizeof(float)); % d_dump_file.write((char*)&tmp_L, sizeof(float)); % // PROMPT I and Q (to analyze navigation symbols) % d_dump_file.write((char*)&prompt_I, sizeof(float)); % d_dump_file.write((char*)&prompt_Q, sizeof(float)); % // PRN start sample stamp % //tmp_float=(float)d_sample_counter; % d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); % // accumulated carrier phase % d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); % % // carrier and code frequency % d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); % d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); % % //PLL commands % d_dump_file.write((char*)&PLL_discriminator_hz, sizeof(float)); % d_dump_file.write((char*)&carr_nco_hz, sizeof(float)); % % //DLL commands % d_dump_file.write((char*)&code_error_chips, sizeof(float)); % d_dump_file.write((char*)&d_code_phase_samples, sizeof(float)); % % // CN0 and carrier lock test % d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); % d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); % % // AUX vars (for debug purposes) % tmp_float=0; % d_dump_file.write((char*)&tmp_float, sizeof(float)); % d_dump_file.write((char*)&d_sample_counter_seconds, sizeof(double)); E=v1; P=v2; L=v3; prompt_I=v4; prompt_Q=v5; PRN_start_sample=v6; acc_carrier_phase_rad=v7; carrier_doppler_hz=v8; code_freq_hz=v9; PLL_discriminator_hz=v10; carr_nco_hz=v11; code_error_chips=v12; code_phase_samples=v13; CN0_SNV_dB_Hz=v14; carrier_lock_test=v15; var1=v16; var2=v17; GNSS_tracking.E=E; GNSS_tracking.P=P; GNSS_tracking.L=L; GNSS_tracking.prompt_I=prompt_I; GNSS_tracking.prompt_Q=prompt_Q; GNSS_tracking.PRN_start_sample=PRN_start_sample; GNSS_tracking.acc_carrier_phase_rad=acc_carrier_phase_rad; GNSS_tracking.carrier_doppler_hz=carrier_doppler_hz; GNSS_tracking.code_freq_hz=code_freq_hz; GNSS_tracking.PLL_discriminator_hz=PLL_discriminator_hz; GNSS_tracking.carr_nco=carr_nco_hz; GNSS_tracking.code_error_chips=code_error_chips; GNSS_tracking.code_phase_samples=code_phase_samples; GNSS_tracking.CN0_SNV_dB_Hz=CN0_SNV_dB_Hz; GNSS_tracking.carrier_lock_test=carrier_lock_test; GNSS_tracking.var1=var1; GNSS_tracking.var2=var2; GNSS_tracking.prn_delay_ms=1000*(GNSS_tracking.var2+GNSS_tracking.var1)./samplingFreq; end gnss-sdr-0.0.6/src/utils/matlab/libs/gps_l1_ca_dll_pll_read_tracking_dump.m0000644000175000017500000001653512576764164026347 0ustar carlescarles% /*! % * \file gps_l1_ca_dll_pll_read_tracking_dump.m % * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function [GNSS_tracking] = gps_l1_ca_dll_pll_read_tracking_dump (filename, count) %% usage: gps_l1_ca_dll_pll_read_tracking_dump (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_float_vars=16; num_double_vars=1; double_size_bytes=8; float_size_bytes=4; skip_bytes_each_read=float_size_bytes*num_float_vars+double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 2) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else v1 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v2 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v3 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v4 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v5 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v6 = fread (f, count, 'uint32',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v7 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v8 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v9 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v10 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v11 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v12 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v13 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v14 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v15 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v16 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v17 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); fclose (f); %%%%%%%% output vars %%%%%%%% % // EPR % d_dump_file.write((char*)&tmp_E, sizeof(float)); % d_dump_file.write((char*)&tmp_P, sizeof(float)); % d_dump_file.write((char*)&tmp_L, sizeof(float)); % // PROMPT I and Q (to analyze navigation symbols) % d_dump_file.write((char*)&prompt_I, sizeof(float)); % d_dump_file.write((char*)&prompt_Q, sizeof(float)); % // PRN start sample stamp % //tmp_float=(float)d_sample_counter; % d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); % // accumulated carrier phase % d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); % % // carrier and code frequency % d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); % d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); % % //PLL commands % d_dump_file.write((char*)&carr_error, sizeof(float)); % d_dump_file.write((char*)&carr_nco, sizeof(float)); % % //DLL commands % d_dump_file.write((char*)&code_error, sizeof(float)); % d_dump_file.write((char*)&code_nco, sizeof(float)); % % // CN0 and carrier lock test % d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); % d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); % % // AUX vars (for debug purposes) % tmp_float=0; % d_dump_file.write((char*)&tmp_float, sizeof(float)); % d_dump_file.write((char*)&d_sample_counter_seconds, sizeof(double)); E=v1; P=v2; L=v3; prompt_I=v4; prompt_Q=v5; PRN_start_sample=v6; acc_carrier_phase_rad=v7; carrier_doppler_hz=v8; code_freq_hz=v9; carr_error=v10; carr_nco=v11; code_error=v12; code_nco=v13; CN0_SNV_dB_Hz=v14; carrier_lock_test=v15; var1=v16; var2=v17; GNSS_tracking.E=E; GNSS_tracking.P=P; GNSS_tracking.L=L; GNSS_tracking.prompt_I=prompt_I; GNSS_tracking.prompt_Q=prompt_Q; GNSS_tracking.PRN_start_sample=PRN_start_sample; GNSS_tracking.acc_carrier_phase_rad=acc_carrier_phase_rad; GNSS_tracking.carrier_doppler_hz=carrier_doppler_hz; GNSS_tracking.code_freq_hz=code_freq_hz; GNSS_tracking.carr_error=carr_error; GNSS_tracking.carr_nco=carr_nco; GNSS_tracking.code_error=code_error; GNSS_tracking.code_nco=code_nco; GNSS_tracking.CN0_SNV_dB_Hz=CN0_SNV_dB_Hz; GNSS_tracking.carrier_lock_test=carrier_lock_test; GNSS_tracking.var1=var1; GNSS_tracking.var2=var2; end gnss-sdr-0.0.6/src/utils/matlab/libs/gps_l1_ca_read_pvt_raw_dump.m0000644000175000017500000000327512576764164024522 0ustar carlescarles% Javier Arribas 2011 function [pvt_raw] = gps_l1_ca_read_pvt_raw_dump (channels, filename, count) %% usage: read_tracking_dat (filename, [count]) %% %% open GNSS-SDR pvt binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_double_vars=3; double_size_bytes=8; skip_bytes_each_read=double_size_bytes*num_double_vars*channels; bytes_shift=0; if (m) usage (m); end if (nargin < 3) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else for N=1:1:channels pvt_raw.Pseudorange_m(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved pvt_raw.Pseudorange_symbol_shift(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved pvt_raw.tx_time(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); bytes_shift=bytes_shift+double_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved end fclose (f); %%%%%%%% output vars %%%%%%%% % for (unsigned int i=0; i. % * % * ------------------------------------------------------------------------- % */ function [GNSS_tracking] = galileo_e1_dll_pll_veml_read_tracking_dump_32bits (filename, count) %% usage: galileo_e1_dll_pll_veml_read_tracking_dump (filename, [count]) %% %% open GNSS-SDR tracking binary log file .dat and return the contents %% m = nargchk (1,2,nargin); num_float_vars=17; num_unsigned_long_int_vars=1; num_double_vars=1; double_size_bytes=8; unsigned_long_int_size_bytes=4; float_size_bytes=4; skip_bytes_each_read=float_size_bytes*num_float_vars+unsigned_long_int_size_bytes*num_unsigned_long_int_vars+double_size_bytes*num_double_vars; bytes_shift=0; if (m) usage (m); end if (nargin < 2) count = Inf; end %loops_counter = fread (f, count, 'uint32',4*12); f = fopen (filename, 'rb'); if (f < 0) else v1 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v2 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v3 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v4 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v5 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v6 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v7 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v8 = fread (f, count, 'uint32',skip_bytes_each_read-unsigned_long_int_size_bytes); bytes_shift=bytes_shift+unsigned_long_int_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v9 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v10 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v11 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v12 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v13 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v14 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v15 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v16 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v17 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v18 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); bytes_shift=bytes_shift+float_size_bytes; fseek(f,bytes_shift,'bof'); % move to next interleaved float v19 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); fclose (f); %%%%%%%% output vars %%%%%%%% % // EPR % d_dump_file.write((char*)&tmp_VE, sizeof(float)); % d_dump_file.write((char*)&tmp_E, sizeof(float)); % d_dump_file.write((char*)&tmp_P, sizeof(float)); % d_dump_file.write((char*)&tmp_L, sizeof(float)); % d_dump_file.write((char*)&tmp_VL, sizeof(float)); % // PROMPT I and Q (to analyze navigation symbols) % d_dump_file.write((char*)&prompt_I, sizeof(float)); % d_dump_file.write((char*)&prompt_Q, sizeof(float)); % // PRN start sample stamp % //tmp_float=(float)d_sample_counter; % d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); % // accumulated carrier phase % d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); % % // carrier and code frequency % d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); % d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); % % //PLL commands % d_dump_file.write((char*)&carr_error, sizeof(float)); % d_dump_file.write((char*)&carr_nco, sizeof(float)); % % //DLL commands % d_dump_file.write((char*)&code_error, sizeof(float)); % d_dump_file.write((char*)&code_nco, sizeof(float)); % % // CN0 and carrier lock test % d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); % d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); % % // AUX vars (for debug purposes) % tmp_float = d_rem_code_phase_samples; % d_dump_file.write((char*)&tmp_float, sizeof(float)); % tmp_double=(double)(d_sample_counter+d_current_prn_length_samples); % d_dump_file.write((char*)&tmp_double, sizeof(double)); VE=v1; E=v2; P=v3; L=v4; VL=v5; prompt_I=v6; prompt_Q=v7; PRN_start_sample=v8; acc_carrier_phase_rad=v9; carrier_doppler_hz=v10; code_freq_hz=v11; carr_error=v12; carr_nco=v13; code_error=v14; code_nco=v15; CN0_SNV_dB_Hz=v16; carrier_lock_test=v17; var1=v18; var2=v19; GNSS_tracking.VE=VE; GNSS_tracking.E=E; GNSS_tracking.P=P; GNSS_tracking.L=L; GNSS_tracking.VL=VL; GNSS_tracking.prompt_I=prompt_I; GNSS_tracking.prompt_Q=prompt_Q; GNSS_tracking.PRN_start_sample=PRN_start_sample; GNSS_tracking.acc_carrier_phase_rad=acc_carrier_phase_rad; GNSS_tracking.carrier_doppler_hz=carrier_doppler_hz; GNSS_tracking.code_freq_hz=code_freq_hz; GNSS_tracking.carr_error=carr_error; GNSS_tracking.carr_nco=carr_nco; GNSS_tracking.code_error=code_error; GNSS_tracking.code_nco=code_nco; GNSS_tracking.CN0_SNV_dB_Hz=CN0_SNV_dB_Hz; GNSS_tracking.carrier_lock_test=carrier_lock_test; GNSS_tracking.var1=var1; GNSS_tracking.var2=var2; end gnss-sdr-0.0.6/src/utils/matlab/libs/plotNavigation.m0000644000175000017500000001745012576764164022106 0ustar carlescarles% /*! % * \file plotNavigation.m % * \brief % Functions plots variations of coordinates over time and a 3D position % plot. It plots receiver coordinates in UTM system or coordinate offsets if % the true UTM receiver coordinates are provided. % * \author Darius Plausinaitis % * Modified by Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function plotNavigation(navSolutions, settings,plot_skyplot) %Functions plots variations of coordinates over time and a 3D position %plot. It plots receiver coordinates in UTM system or coordinate offsets if %the true UTM receiver coordinates are provided. % %plotNavigation(navSolutions, settings) % % Inputs: % navSolutions - Results from navigation solution function. It % contains measured pseudoranges and receiver % coordinates. % settings - Receiver settings. The true receiver coordinates % are contained in this structure. % plot_skyplot - If ==1 then use satellite coordinates to plot the % the satellite positions %% Plot results in the necessary data exists ============================== if (~isempty(navSolutions)) %% If reference position is not provided, then set reference position %% to the average postion if isnan(settings.truePosition.E) || isnan(settings.truePosition.N) ... || isnan(settings.truePosition.U) %=== Compute mean values ========================================== % Remove NaN-s or the output of the function MEAN will be NaN. refCoord.E = mean(navSolutions.E(~isnan(navSolutions.E))); refCoord.N = mean(navSolutions.N(~isnan(navSolutions.N))); refCoord.U = mean(navSolutions.U(~isnan(navSolutions.U))); %Also convert geodetic coordinates to deg:min:sec vector format meanLongitude = dms2mat(deg2dms(... mean(navSolutions.longitude(~isnan(navSolutions.longitude)))), -5); meanLatitude = dms2mat(deg2dms(... mean(navSolutions.latitude(~isnan(navSolutions.latitude)))), -5); LatLong_str=[num2str(meanLatitude(1)), 'º', ... num2str(meanLatitude(2)), '''', ... num2str(meanLatitude(3)), '''''', ... ',', ... num2str(meanLongitude(1)), 'º', ... num2str(meanLongitude(2)), '''', ... num2str(meanLongitude(3)), ''''''] refPointLgText = ['Mean Position\newline Lat: ', ... num2str(meanLatitude(1)), '{\circ}', ... num2str(meanLatitude(2)), '{\prime}', ... num2str(meanLatitude(3)), '{\prime}{\prime}', ... '\newline Lng: ', ... num2str(meanLongitude(1)), '{\circ}', ... num2str(meanLongitude(2)), '{\prime}', ... num2str(meanLongitude(3)), '{\prime}{\prime}', ... '\newline Hgt: ', ... num2str(mean(navSolutions.height(~isnan(navSolutions.height))), '%+6.1f')]; else % compute the mean error for static receiver mean_position.E = mean(navSolutions.E(~isnan(navSolutions.E))); mean_position.N = mean(navSolutions.N(~isnan(navSolutions.N))); mean_position.U = mean(navSolutions.U(~isnan(navSolutions.U))); refCoord.E = settings.truePosition.E; refCoord.N = settings.truePosition.N; refCoord.U = settings.truePosition.U; error_meters=sqrt((mean_position.E-refCoord.E)^2+(mean_position.N-refCoord.N)^2+(mean_position.U-refCoord.U)^2); refPointLgText = ['Reference Position, Mean 3D error = ' num2str(error_meters) ' [m]']; end figureNumber = 300; % The 300 is chosen for more convenient handling of the open % figure windows, when many figures are closed and reopened. Figures % drawn or opened by the user, will not be "overwritten" by this % function if the auto numbering is not used. %=== Select (or create) and clear the figure ========================== figure(figureNumber); clf (figureNumber); set (figureNumber, 'Name', 'Navigation solutions'); %--- Draw axes -------------------------------------------------------- handles(1, 1) = subplot(4, 2, 1 : 4); handles(3, 1) = subplot(4, 2, [5, 7]); handles(3, 2) = subplot(4, 2, [6, 8]); %% Plot all figures ======================================================= %--- Coordinate differences in UTM system ----------------------------- plot(handles(1, 1), [(navSolutions.E - refCoord.E)', ... (navSolutions.N - refCoord.N)',... (navSolutions.U - refCoord.U)']); title (handles(1, 1), 'Coordinates variations in UTM system'); legend(handles(1, 1), 'E', 'N', 'U'); xlabel(handles(1, 1), ['Measurement period: ', ... num2str(settings.navSolPeriod), 'ms']); ylabel(handles(1, 1), 'Variations (m)'); grid (handles(1, 1)); axis (handles(1, 1), 'tight'); %--- Position plot in UTM system -------------------------------------- plot3 (handles(3, 1), navSolutions.E - refCoord.E, ... navSolutions.N - refCoord.N, ... navSolutions.U - refCoord.U, '+'); hold (handles(3, 1), 'on'); %Plot the reference point plot3 (handles(3, 1), 0, 0, 0, 'r+', 'LineWidth', 1.5, 'MarkerSize', 10); hold (handles(3, 1), 'off'); view (handles(3, 1), 0, 90); axis (handles(3, 1), 'equal'); grid (handles(3, 1), 'minor'); legend(handles(3, 1), 'Measurements', refPointLgText); title (handles(3, 1), 'Positions in UTM system (3D plot)'); xlabel(handles(3, 1), 'East (m)'); ylabel(handles(3, 1), 'North (m)'); zlabel(handles(3, 1), 'Upping (m)'); if (plot_skyplot==1) %--- Satellite sky plot ----------------------------------------------- skyPlot(handles(3, 2), ... navSolutions.channel.az, ... navSolutions.channel.el, ... navSolutions.channel.PRN(:, 1)); title (handles(3, 2), ['Sky plot (mean PDOP: ', ... num2str(mean(navSolutions.DOP(2,:))), ')']); end else disp('plotNavigation: No navigation data to plot.'); end % if (~isempty(navSolutions)) gnss-sdr-0.0.6/src/utils/matlab/galileo_e1_dll_pll_veml_plot_sample_64bits.m0000644000175000017500000000757012576764164026501 0ustar carlescarles% /*! % * \file galileo_l1_ca_dll_pll_vml_plot_sample_64bits.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ close all; clear all; samplingFreq = 64e6/8; %[Hz] channels=1; %path='/home/javier/workspace/gnss-sdr/trunk/install/'; path='/home/luis/dev/gnss-sdr/trunk/data/'; clear PRN_absolute_sample_start; for N=1:1:channels tracking_log_path=[path 'veml_tracking_ch_' num2str(N-1) '.dat']; GNSS_tracking(N)= galileo_e1_dll_pll_veml_read_tracking_dump(tracking_log_path); end % GNSS-SDR format conversion to MATLAB GPS receiver for N=1:1:channels trackResults(N).status='T'; %fake track trackResults(N).codeFreq=GNSS_tracking(N).code_freq_hz.'; trackResults(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz.'; trackResults(N).dllDiscr = GNSS_tracking(N).code_error.'; trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.'; trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.'; trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.'; trackResults(N).I_P=GNSS_tracking(N).prompt_I.'; trackResults(N).Q_P=GNSS_tracking(N).prompt_Q.'; trackResults(N).I_VE= GNSS_tracking(N).VE.'; trackResults(N).I_E= GNSS_tracking(N).E.'; trackResults(N).I_L = GNSS_tracking(N).L.'; trackResults(N).I_VL = GNSS_tracking(N).VL.'; trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE)); trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); trackResults(N).Q_L =zeros(1,length(GNSS_tracking(N).L)); trackResults(N).Q_VL =zeros(1,length(GNSS_tracking(N).VL)); trackResults(N).PRN=N; %fake PRN % Use original MATLAB tracking plot function settings.numberOfChannels=channels; settings.msToProcess=length(GNSS_tracking(N).E)*4; plotVEMLTracking(N,trackResults,settings) end % for N=1:1:channels % % figure; % % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); % % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); % % figure; % % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); % % title(['Navigation constellation plot for channel ' num2str(N)]); % % figure; % % % % plot(GNSS_tracking(N).prompt_Q,'r'); % % hold on; % % plot(GNSS_tracking(N).prompt_I); % % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); % % % figure; % t=0:4:length(GNSS_tracking(N).carrier_doppler_hz)*4-1; % t=t/1000; % plot(t,GNSS_tracking(N).carrier_doppler_hz/1000); % xlabel('Time(s)');ylabel('Doppler(KHz)');title(['Doppler frequency channel ' num2str(N)]); % end gnss-sdr-0.0.6/src/utils/matlab/galileo_e1_dll_pll_veml_plot_sample_32bits.m0000644000175000017500000000761512576764164026474 0ustar carlescarles% /*! % * \file galileo_l1_ca_dll_pll_vml_plot_sample_64bits.m % * \brief Read GNSS-SDR Tracking dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ close all; clear all; samplingFreq = 20480000/4; %[Hz] channels=8; %path='/home/javier/workspace/gnss-sdr/trunk/install/'; path='/home/gnss/workspace/gnss-sdr/trunk/data/'; clear PRN_absolute_sample_start; for N=1:1:channels tracking_log_path=[path 'veml_tracking_ch_' num2str(N-1) '.dat']; GNSS_tracking(N)= galileo_e1_dll_pll_veml_read_tracking_dump_32bits(tracking_log_path); end % GNSS-SDR format conversion to MATLAB GPS receiver for N=1:1:channels trackResults(N).status = 'T'; %fake track trackResults(N).codeFreq = GNSS_tracking(N).code_freq_hz.'; trackResults(N).carrFreq = GNSS_tracking(N).carrier_doppler_hz.'; trackResults(N).dllDiscr = GNSS_tracking(N).code_error.'; trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.'; trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.'; trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.'; trackResults(N).I_P = GNSS_tracking(N).prompt_I.'; trackResults(N).Q_P = GNSS_tracking(N).prompt_Q.'; trackResults(N).I_VE = GNSS_tracking(N).VE.'; trackResults(N).I_E = GNSS_tracking(N).E.'; trackResults(N).I_L = GNSS_tracking(N).L.'; trackResults(N).I_VL = GNSS_tracking(N).VL.'; trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE)); trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); trackResults(N).Q_L = zeros(1,length(GNSS_tracking(N).L)); trackResults(N).Q_VL = zeros(1,length(GNSS_tracking(N).VL)); trackResults(N).PRN = N; %fake PRN % Use original MATLAB tracking plot function settings.numberOfChannels = channels; settings.msToProcess = length(GNSS_tracking(N).E)*4; plotVEMLTracking(N,trackResults,settings) end % for N=1:1:channels % % figure; % % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); % % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); % % figure; % % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); % % title(['Navigation constellation plot for channel ' num2str(N)]); % % figure; % % % % plot(GNSS_tracking(N).prompt_Q,'r'); % % hold on; % % plot(GNSS_tracking(N).prompt_I); % % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); % % % figure; % t=0:4:length(GNSS_tracking(N).carrier_doppler_hz)*4-1; % t=t/1000; % plot(t,GNSS_tracking(N).carrier_doppler_hz/1000); % xlabel('Time(s)');ylabel('Doppler(KHz)');title(['Doppler frequency channel ' num2str(N)]); % end gnss-sdr-0.0.6/src/utils/matlab/gps_l1_ca_pvt_plot_sample_agilent_cap2.m0000644000175000017500000000533412576764164025705 0ustar carlescarles% /*! % * \file gps_l1_ca_pvt_plot_sample.m % * \brief Read GNSS-SDR PVT dump binary file using the provided % function and plot some internal variables % * \author Javier Arribas, 2011. jarribas(at)cttc.es % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ close all; clear all; % True position of the antenna in UTM system (if known). Otherwise enter % all NaN's and mean position will be used as a reference . settings.truePosition.E = nan; settings.truePosition.N = nan; settings.truePosition.U = nan; settings.navSolPeriod=100; %[ms] filename='/home/javier/workspace/gnss-sdr/trunk/install/PVT.dat'; navSolutions = gps_l1_ca_pvt_read_pvt_dump (filename); % Reference position for Agilent cap2.dat (San Francisco static scenario) % Scenario latitude is 37.8194388888889 N37 49 9.98 % Scenario longitude is -122.4784944 W122 28 42.58 % Scenario elevation is 35 meters. lat=[37 49 9.98]; long=[-122 -28 -42.58]; lat_deg=dms2deg(lat); long_deg=dms2deg(long); h=35; %Choices i of Reference Ellipsoid % 1. International Ellipsoid 1924 % 2. International Ellipsoid 1967 % 3. World Geodetic System 1972 % 4. Geodetic Reference System 1980 % 5. World Geodetic System 1984 [X, Y, Z]=geo2cart(lat, long, h, 5); % geographical to cartesian conversion %=== Convert to UTM coordinate system ============================= utmZone = findUtmZone(lat_deg, long_deg); [settings.truePosition.E, ... settings.truePosition.N, ... settings.truePosition.U] = cart2utm(X, Y, Z, utmZone); for k=1:1:length(navSolutions.X) [navSolutions.E(k), ... navSolutions.N(k), ... navSolutions.U(k)]=cart2utm(navSolutions.X(k), navSolutions.Y(k), navSolutions.Z(k), utmZone); end plot_skyplot=0; plotNavigation(navSolutions,settings,plot_skyplot); gnss-sdr-0.0.6/src/utils/matlab/plot_acq_grid_gsoc.m0000644000175000017500000000556612576764164022006 0ustar carlescarles% /*! % * \file plot_acq_grid_gsoc.m % * \brief Read GNSS-SDR Acquisition dump binary file using the provided % function and plot acquisition grid of acquisition statistic of PRN sat % % This function analyzes a experiment performed by Luis Esteve in the framework % of the Google Summer of Code (GSoC) 2012, with the collaboration of Javier Arribas % and Carles Fernández, related to the extension of GNSS-SDR to Galileo. % % * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com % * ------------------------------------------------------------------------- % * % * Copyright (C) 2010-2011 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ------------------------------------------------------------------------- % */ function plot_acq_grid_gsoc(sat) file=['test_statistics_E_1C_sat_' num2str(sat) '_doppler_0.dat']; sampling_freq_Hz=4E6 Doppler_max_Hz = 9875 Doppler_min_Hz = -10000 Doppler_step_Hz = 125 % read files x=read_complex_binary (file); l_y=length(x); Doppler_axes=Doppler_min_Hz:Doppler_step_Hz:Doppler_max_Hz; l_x=length(Doppler_axes); acq_grid = zeros(l_x,l_y); index=0; for k=Doppler_min_Hz:Doppler_step_Hz:Doppler_max_Hz index=index+1; filename=['test_statistics_E_1C_sat_' num2str(sat) '_doppler_' num2str(k) '.dat']; acq_grid(index,:)=abs(read_complex_binary (filename)); end maximum_correlation_peak = max(max(acq_grid)) [fila,col]=find(acq_grid==max(max(acq_grid))); delay_error_sps = col -1 Doppler_error_Hz = Doppler_axes(fila) noise_grid=acq_grid; delay_span=floor(3*sampling_freq_Hz/(1.023e6)); Doppler_span=floor(500/Doppler_step_Hz); noise_grid(fila-Doppler_span:fila+Doppler_span,col-delay_span:col+delay_span)=0; n=numel(noise_grid)-(2*delay_span+1)*(2*Doppler_span+1); noise_floor= sum(sum(noise_grid))/n Gain_dbs = 10*log10(maximum_correlation_peak/noise_floor) %% Plot 3D FULL RESOLUTION [X,Y] = meshgrid(Doppler_axes,1:1:l_y); figure; surf(X,Y,acq_grid'); xlabel('Doppler(Hz)');ylabel('Code Delay(samples)');title(['GLRT statistic of Galileo Parallel Code Phase Search Acquisition. Local replica: E1C cboc PRN ' num2str(sat)]); endgnss-sdr-0.0.6/src/utils/matlab/help_script2.m0000644000175000017500000000035312576764164020547 0ustar carlescarles% compare pseudoranges close all; % GNSS SDR plot(GNSS_PVT_raw.tx_time(1,1:300).'-200/settings.samplingFreq,GNSS_PVT_raw.Pseudorange_m(1,1:300).') % MATLAB hold on; plot(navSolutions.transmitTime,navSolutions.channel.rawP(1,:),'g') gnss-sdr-0.0.6/src/utils/gnuplot/0000755000175000017500000000000012576764164016222 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gnuplot/8_GPS_accuracy_precision.jpeg0000644000175000017500000015415212576764164023706 0ustar carlescarlesJFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90 C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S(((((((((((((((((((((((((((((((((((((((((((((((vxZ_]cڽϥo˗08YN!<+hW_?n^W ^%ң{I20f(pN2Bj?Js6jznn,@yKzLH0W_/tZ~&SY]rw=剜! }/*+]/y=4IoEZQ1𯙴dNqźPOǬ޿Y.4sf?Ѡɰߌ8(+;1z> I+?Y^xoGUZIъSs;#4hO|*Ţ_ƉZ xn̺X-ٌW*;  _k7_3o7 сc2^ FFx~?x'ǯzU|"e6jn c$Ajwm G_X+;}\Ǝ 4WO,~k&5N{k.MZ@i%8U$+r{Z#TmMR> Zi2C+"K$^s[{nǎiT%̛Stp+ZxsuO^QZG{GK[ Ie!f#z^E񯅮dеhKy%૴n+zonki+kZѴdgR y(|yk|Qo_ J~06ou4{VL$έo|ܶa">/0[#,HYvXF#G@HMy'e°k^6 q8zV;.D1Yl48S%-tWo>.GoO> xÞ.~'i5ja&b݁ x ̝@kxտ>&x-cjV&&hdy/# ),0U|?' |[ږ}ӵZͧʼYI\q}Ѽwͦx6~-.J׭oq|;AMzeV7W߉ui|/GPDJhfC M_jZPXLe;[o&xKhk4xcƑ=8]gj[j33 b q r2W~~tm{> Mi5Bmإϛ N g#wl~𝥆i~biWV6h2)C[p j+~8~ؾ H\~w/[ߋD/2(@]'?|;Z]?BmY4}#\O dPнY,rgc$iP{5xľ>mIx-KYI NA1ܞ _MÞ2O jO|[>iZ1XVpqDD$ Uo~(Z׺G,.cК[d , [s|P߃|g01]'lttZB\ae[r|o(sh'xcQyxƾݷXu𷈮t{I221(pIWA_!q/|G}Oƣi7*e,KG*H`r>b@>Ģ|IT%_ݦi!`Zmf3C͂Fڏ~8l|?}RZpkD I4LЄܥ9*8J+۞Ț'l'j i^4-ܤA%-UmWxI#~~WOjvF5&*=m 1p!<@VQ_*_Os/ok6?t]C4伟s[~c*不rxx6(ϊjWzWty-b$ŝwv/# E|~-7>h~^*ӵ+)MDue``A+(_? n5ڗ_rOOS_Z:jQ-w M¶vו_ #;o4oiZ'ú&gR۳ώ'h3 -r~>m3iGQXi,!-&TH) }x_WŚ`]v2-{ԉXRB1$-@Pο+7#֚FNn-]-<9a mc q_;EIӼkGE4%I!Xe,nq]o'XW]uM:k}JK{F{ H2:{ו_ǺoI|e:M3VIYYwh )U k(JO!w];?졿ymLkIJm 0y]9 <_p?@4?;K)KdT$$Q-;QLy'rV/b)$mU,hMW|[}>~<'/xJ!Ty<\T5RI+'_Ωln{lWTY0GeR,X+`7*|mZ7ëm-kM9 .lxZhPUpnIմPĶ2Cg w­It_Wm棢jjbdycKkuG:{_u/ xk'KӴ.-֜)/4?E\_tQ@։㟋-H[+]*ᅆƍ1tāK5ٟߏt/:W+mW)XŬ7c-\R++Li @Ҋ~k*u LjWReQ ufceU!U X}K7 >|'O^1ѣtMN\ӿAkK%#/-c(|>$u?>yBl&R~n|Ԝ{nǶeq~:6!H(?0FkOo/eLj/_ T5$>Z"*" *2ORMwa7YxK&Zxwn+d"HG8v?lK; ϥ[c"˨-Ks*;n S!@ɯ~~/5xZw>-w}:-1MBE%J۲[2GV+hlGyv|'O^1ѣtMN\ӿAkK%#/-c$ N~xE׸|0nlK᧖塚 t ,*:m[?:~0xHJg i<5{Ya"nH$#Jq캅߈?gڣ⇍/< Wvӎ5͔/[KȮ:6dK?^ zxS<:wJlJ2GG t֯t=VOgt1YNd#l6vk((((((((((((((('>$xs家tҚkb7<ϛ+xߞk(((((((((((((((((((((((((((((((((((((((-:O;:k֯㑨5`SmO}nfk(h_/Ě%ص:cs嬞LZ$oV(8`A 7.?Xbf3W›woUQ o] U^QUX/g[Bע#+}j}2Kokm$;&qscO7?4|g:H3Ik5ÍI9 o] UG)v>U|=}WN?_t4:g+K[kHfS$APy??VG췤:7-uu}Ɩmui"U.J13@[7ĭg~;վ2|@u촉jt9]ͥ&.'rauM*|oS[xó?YYhZpկ$[GF 41ڼ3_>  ?:޻.Rt/^)H `)v>U]E{U? tQx%6ѧ4?xU$ӝHycR%6«9w@U o] U\|JѼGKM'' [ZW+AvNeܺP h>Wq(*7.?ߋ|@VS~.|=ʪ?M*h*7.?S?ï^+Yo> h$Դ[+SN`-Ԑ#&]62bXcWP›woUQ o] U^EyW)v>U]E{UPzg"[/f?C KѦh#2K؅I M*bV$ zwJwIӎP›woUQ o] U^EyW)v>Ur7]tߍ>=tNV46\WK ne#J|Zy[$rZVeyO$H{@m o] UG)v>Uz_]E{T›woUW@U o] U\|EOx_7^;CPL"[{mIcYe kF0I5%SѕHWM5x!zqP›woUQ o] U^EyW)v>U]E{UPzg"[/f?C KѦh#2K؅I M*bV$ zwJwIӎP›woUQ o] U^EyW)v>Ur<;oN[b6ͧj:' -&G03_@W~N'@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~?k?LjZMc'^@)Wڧ?iG>)дHx_ESZGN͜gjxͭ|<6|K}M:lk Aٝ pq'>, ]k~$t趻~ѨImorr̪2y,S@%g'[~Ս/׵?z,n./b|3jRmV}#7~]-桦VE.Gю m os.{{+f;<=2mG¾"|M;[IwEwJ6 0 9|en_^$wW? Cx=O^-!iȏY9y*pk¶o|aw;i3]q_DvW6O'F>uYg/>9$go'~b\h^]8_fyۜ<,QEQE~gb|м]F1py:]>6'>Ry[sy}mǗsV((*i9OR:Vu?HtZ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (<ߵx_7-n3 *\|:jC5?,ι=[KBraR,)LHKp?B >tu>)"5tV k5&k?C5zyWc&gHf;Qw,:ßx>4ۍjK!vr$y[?񽇊~*x>{Gˠjokjʸ`ʎت1#? $&b"3s- e.md.Z7-Z^cnh_)lt=#߃|9fxww) jFRNE*>#*Lb I?qߴ7yx]ԯ-5m7qsߵ!6lPw#qygυ<%gL{7ic62"J~Jb.pƼ ow M.iͥڌn-Wms]⭵Ɯ|9sG\%鸎UQV]P`WK|AF|Fvs7v2 "^pP~ϺNloҵ kMk8dբ[巂5rO7~~i_m2 VFѨCK r>Z^U7? ~F M*@mۃc5ŷ-\dcx|xCmhŞ|;9]2\nK[t]Ϸq#'8_/AOxJ> <1yMt}69*4{3[t?^_&Z~KYEr/AO)5Q@'4oݽy |\( g,EmQJ["BYbg }ѸӒ%MogSܨR1hlBl>I'pj95;i7$2^@ބɴ/$OhQU'7yky{ݿv9|U^c$J#{vxw#{&Ҽ<:|9&&qhz+iosm58òs0HtbkX\oWMK/9K!߻O.-Jt ZF--\$nqLW,Rn*eR0QM^Jz\׃<3[zԮfmG;$őcʁ7ʞ*zߴM^g^f7oݎ~1}'9z&s&y66_6w0W#'/x lQYjw)iu0oHe1;\ h^I?>I+^Sݜl;EgǩܽII&FrF"Mx,yuF^FrCF+>}'9:̗FL"j)7).O$^cB.[[ Lksb߼;! jĚZ]L4ǒLin oBd~b@@4(iCdϵAhkh3Go|$9.4`tJ-oq @BQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEֿxOZzuF< UndII'hmK{xPGQ(TE@h*>2ؙ _O5!V<O |ˏ{s\-+F-Pg|!NX<23;<;x/Sߋ> .t;:WΥc2wWtrdqq,kX+Gmr0\s^W|W|]kο}'4^4/Ш(0f<`8{Zo~N\^Μ. 62Egh_Mow]tXj,l40De)&c#3N:Ű?uoEoYA4Xʖ&#k7{K sxAӓj B;A%d<{I}Vs[:0\E%Ŕ !t`ΤUپ7R>GVi'oM*JPrInh7$ӥի;f$Ѽ7 gUլ7\;ncI,NDU{mXө(B\6WIvz謹qNYIt䴬 I' 8|WMox{Iӵ.֮/o-m!P{o :i"/t55c)(9ERkSm>e}mY=/fhQEFEPTed,UMqaee;G^^qr=$cM}jֱ 2Lr@%9@QEQESXj,l40De)&c#3N:YIn{k{V'ˍ ˵cN3@Q@yW-$H_#? CPEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_O5!VXbf3Wg_^m(mo{kZEZjl $`8oxzWIm^1~tr H-Q#Bib3ϴQ@8[~6z.Kÿ'xR/kw ӴmN;e|ـX(=kgN4? "׌[/|[m C[0Dc-MT(m~p8l +?LՌ6[JfPBL@:dBܝ ((8{$k5ċt"  ]}Т'ХmGV` ُ;T`}`H5 m*k xskXW#U>?rC.u޿z>"M).akKW'ڋ>Wso)rypإG Un<٫8~o ;]K +sHi:5AF N"" AX#'cK ]_–lzTko ,+�yXv%<=KxIm$M6?Y/msIA!U$䐩|@Ưkfk>Dl5k#)de;Xg a++ӯO+8ҋNeVM-qRIKo]ҨQܨKyFYr!T0ywƧ5Y^=Tn"/|l<{^(]2pQadnŞ1G}x\2h핎*3_)]pA HBRf㙼5kMSH_.`2g ˾4`IDa}v~v_yN(RdN.)rGFyG˭Yx;{- GK)\wv]DRA>0c.δ?>nwy{1[uk 4,o"~C)GX+ԛW\r/4kY1-&8`|3v9yXGZXڭB+[DH`0IPQ@Q@_o~'>g߻yx9ݞb:̗FL"j)7).O$^cB ( [I֑c!ӫkʿio'ZG~ԇNU((((((((((((((((Z Q<֦h?>ݶAp9hw׋ߋ 4O5Nf{̶(F!JC<Wosĺ/>xok񾕨i{6LIdyэm,\eK$%Ҵ)uIH^grʠ$S{UrNP~?k?LjZMc']> |=qw-ׄ K2mGw`2Ѣ?GgEg*[KW,S=-BA.3dgZh}>3vnh~yiǙ;7u۞q5^?iQZZڦfX$2Ht\a[$y4TO zCDʤ܏)vpsbhmOwvgPLa\(]I$`烊-ޗK}.m6٠fQ^ M Q68lM?^*lvwŵo8=$'{{7۵nn@OEu6v2\Yn$R1 ķ͐3I>h~yiǙ;7u۞q4biY>xx6h`Oإ:kOȦp j yvB=?7Vu0W,PrI8bTe#\E5 /|-,-h r, !I Be$ڿktOSBq(4';'+5&G}OMXOj &е(FTo7U'$+ _OA% [Zä[mF\$_,k#r>`EѴ{'[e{)jͺD||8+Úcxv;9?ar5Θ,RC6N2|3zѽ>k&ҵʞ+i}r luvǚxDn<5jlg݁2v`DO|[E \GiAMǘPo*F(ًBg\N z]i#qgo* )IIS爭7WPԥZo(,y[o`ceUEµGψ8Z+]מ]{v8-\DJJʔ8(W$/V-u/^+^Q/otE/EwW1䪙#!x uO1|1ҮL55pIc,'CEx CcmO3 ?8M#Ğ12Och[[EveDPʩYFg /E6{i #2ȡDb22A( -gxgQwk&y-uJ8J\u~*ERֱJ>jkcwᘼ{ ֩ሠҵI P!^Nʜ |xÓ|!s{{\Ipu"% WdR w ߕˣGz_] , B:u _Ei-GXZHΟe}Hb73`[qI$ ]JI!i :#r!#Ք^-{OAa]R,HFD 2@ݙbo=Wmt?`5{utn^8"cTvI"۸V0Q5ݥ5ߢwdy&UXɿl In iEsJMJ]Sf[<-Z9 *rs!Wr0p̘'<ܷ_TgʚWii64jT->+oӣ ,C1킝[jPLʻEG=X?iQZZڦfX$2Ht\a[$y5#h{뵍=c BN>`#<P*z=a J">>P@ Trx{J7q @&K "f:ʛԑdwDwI VzZk\ ȶj_)w-MWj7\ƈ=EikjeZJ'`@ !qlr9Mm=ٞB]1spv'0(]OGuWR!\۩]G`c^UK:?s:uz,ҥ}2n3B!I$6@9<+io.oC|? &~.i3Wzq@@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_O5!VXbf3WEPEP~${nnMDvn3˷^^u<'fعߟ߿5b ( M" dgh2Dכߪ (kx@kug"f9#L߇ƍXZr_s`l >֗ye= F'nmǶ~Jp77Q{:j+o}{ƜwrLd _d'z_xG -COo46Lh'yrJvAb4|/MTV{E799%r]knItjjȬ`6| |||cM9tG ]om`u]" edws⿊>#gUxb_[xƹ8k71ڈ;Iu:7 &?W?R9 ]|MҟLm3\NOGFF5If$Cs_1dVJ)ɧ;ݫZUvlh, GRqZQd6yt )WmKt- I[Ŭ[*/e|4A @JDCH*z,x4\wgcae ח*4.Lh_zVo ]__uxZ==942Ku}EY<6R%:{Yd|(Wdϙ<2)*0n95-^U~yR<qUJ:{>u&ۓ*oFJ{Px_uӿi /^;,Ɠ&f2NQh|C%e 4HV]Ikm:][M,s$T*u/ ~߳+*h$s[ nt wKO5;[ܘD"twiM <{/: ךNpt1DXkhUMJj&ӆ*Ua-UwOy[UnNjbqJbi.Y(F 2ӞroG'6'5?Ioj>8Mnj:^5Ͷi-㿚U@%q*V#$-0&$9U'`HZGi7^(Oi ڴZ:LOl{r3,?AE(ǩX[]³$W2` ^u'?isُ߳Q\YߧsiҔVxr4ܶVѧhDbjd֛scr 7FA{*土Bsϣ_qig6(܅"$Mg_fIvV]L{[Z#&I`H' rkBj϶w)|07l;sgP( (3"LBOk71=#^gBڿ&O+n|3/wms=QE_#? CWו~N'@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE|wlS[!ԵτEM#F \HRp9ӚemN4֝[Gwm:HyH4?O5!VXbf3WEPEP~ {mf$tv^17:Nřשt,J mI'/8vPEPs'Ĉ#1/4g@wM*spT]&{fn$@Awv^s˯lj5OI.$`8lz oO zCDʤ܏)vpsbhQ@s>+[Ʃ}qqֿK+`I Op8cȮ_@t:O[T짿he{U&E`[>PL?j߳!%n{!8?1Y 1w1 6rpOqz;¬o(׋]?;lگ'=χ^'=I,R]/;<1dfʫyۤk<>-~?~(ׇY6$V $,-͉ 2O m0YxcS_aǞ${-W\K+>^2ICzsxľ>qxEӯ;k'Mo0~%H`M $s2''QR۶|-?|q-;M}RΙ᏶ ѽι)2&FY%r#!>d:W|)y[R~xPլn!LfZ,tgb/$ƑMrW>og=QJmyY $1^-FP2۳Wi$g^)X7F7%(.Q挥*9M5k ŏAxwGi47ӢX帷  I# m|WW麴|a^\]jy6b{{#*`?/MC/>x{N/4ۇԵ B֭s"2QGl˷xĐ? ~ Z/u Ov]Z5"mĶ:&Ibz#-{?xux QEQEg_u..D.SnR\:HxƅS*oRDDEU&d'3:@Q@yW-$H_#? CPEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\44 |^ uM y/r|SfϾ M3OퟧJKM[%C'}E|e|Tŏn 05|+\7 n#~'c񫬾2]kn^O倘7ӌPQHNOJZkʌцXdhữWo ~2ؙ x3Jcw+xN<_ iμ6r__G;Xɬ|d3Yh>H5SityfM)65<+ 3QxC|y>I<mۜX3Umtq"8I#ʢc1f -@[`Zny23888'\15%rF%I x`WpjĐjRnRmkG)yW_4lg i@kDIXɈLiV<{@]ho'>gv6㍻swvNUҼ>osg=բm]h3E F#q,'irlU882(#A 晩x66"X<@-E>d;Ǚ&0FOZ׼R7 Vd \ b˝7Gq!NV6@ 8$@<WSDS[L!"BLrC78H5SityfM)65<+ 3QxC|y>I<mۜX9Km;WZ=#Wt[[\ (7> %n_(~џ~g޲~54{xP*s&@ʑ m #ƯFD#X~'Yk:X^s}[XtجG1Lr۴hz: 2_BdIFI|-6⟃z}';{{{d3F46di "ygjUO roe^A 8JU>yS-M6RWRqbp8$n<8gW]ޓ Zjٺu "]Eo(H"$KcV|l٢WZ:X<Y5-I$Q} 㤱YQ~뿴Wx4>Zg_%$̷.,z$˻>!_j~1zSZj~ Xdex-/h1=Ӏ퀀:00猓ruٶ}{,+^HUW*FN*-s{5 Ero"wm_ǂ`]Q(SǧN![6F 0V$M&cp/iݮaln{j0dEe#rޒ(*%a fG 4> R>iᝣ{E*ӭ&0vn%_oo<χzn++.o&GQ~$>N/mwtZ=.c3 >ִFJ687rq 'ysFnC|y>I<mۜr"ݍѬ]V}@{p[}+6b˖c].Ɗdj*Sj5}wWtuM ޕ6LM!?x32z+zğ$ -&e%)#և j^.,uO>,ou4d9%gHTm@q#J=G{{, ȬA޼v;@>SD[Sj+榓ѫz7U6Jktғo#Z9Hºc?0ehRļm[L=o.$VQGˀ8JKiku5Zb$2l]#MQG--U,eEpGEIF>b8?/84Z{ҷ6@݉d>gpp6qOZESXEm"t+m|݌㌎jRnRmkG)yW_4lg Ee=̦ hg]eKn0@+S$pj^ͮPn$[G $y9T_4lc,ÃA$_EX.4/.QnbzF8΅Shnm:j m| l㌞,Z{"6H݁c>grpwGZEgm./,&FrǑuAv~`9/>Ki8.w  (GCp߶~o/_*i9OR:=V((((((((((((((#/{>j_^n|?>x/>+)vw/0c_hڵ^zB7WrP)g݈ Ā$|i~4_>?-[ɥ7Y/$?qh2*ْ]ŁP+$kxΞ"E#ɭAx|؁31G?_K׍ qѼ6Na>P\MÔy95:NcVZ{o鷰ͭ夫,3$GRC+)0$An((*>2ؙ _O5!V ( (+}λGVwy{;[{V~ {mf$tv^17:W3*[»"F@U՘5VOTֿo{NSo" \Dq#>s:O柴llo׌n/4_EM&kY$[0%`&P]x]@|@u:WT,i,eKVVuP=~`rc(Xz*j5bi5~ӸWo|Xk~خ}6fhڍ4f!!/BHa;2.tZ^hcJpFT'VW_y6w^Cu8yQ5҈'w=GJtת S0+Iݤm|2esύ^3Ηi[Bnb$_2Uqv b9(2EAvOL}IwcR临Hb mݖI ʮEm|ʏ)__e-d"/,nN|f/[| ޳yOx[>!Eż0<HYv3܎T0>5G*5U'$[jEҰfYdp2u)Gœ'%yї@/dxB7%F&fYPe]yƽ G'EhFjIR%srJrbZhY͓{IRzmVuI;&mdK3:9E*IBKU (b6nË-w[u ~]{c%ZDˁ²}"+5J$*I'yC~7{MG/ģVg; 8#s|,Eeh&@i,&xwlxZmօs\_G<HWCͿmx+쵭aq$ªt ռBtaRK+;謚S٧g:'Z/iMSWM(?}&ݧ7)F||ӥ|5K'.V{;O\|6$hu~)hxKEGMfBxݢ"nUhwMg7o|5BMGs>.4m^+(Q͊:B6< q_.3] ^tMsCKWSfin _ .J~2FgC G(mɵ]Uky+]馺|k9OBl58P$6QM7)9rIQ9iʹS^K/:~]ZΝ%ŷt6~aeDki &`^TTpI \/<ڧhVzIit=#̴D +2 )J=7_> |8 i _wK^H.I[1Dixc$ iuό:_\kzt=9 ȳ[i_,mbfg[&|>_~-mˀWf8CpTN|so&61\e-t:͕K1Z1H\;k3S:ݣmy{csѤm $$m u>e4Vցa[b\ s5Q!1?/xsA]~uX ѣ 09V׭u]wfS^+ߖQWizWngݲKVtEFKoF [Y#d ۷6?wh`%hj(jw8NPQݻ;Yie׸W#7:gMI.0$C/O\6ힺ?|B*oy?n>|3v9yXGZXڭB+[DH`0IPQ@Q@_o~'>g߻yx9ݞb:̗FL"j)7).O$^cB ( [I֑c!ӫkʿio'ZG~ԇNU(((((((((((((('Şs]gzݯt]bm>h%CeʱRq125XUm/suyw* "y؀ ,HM|Aϋt=_=OVfTA-lBb(ľTًWOI<'m/Ѽ7ZEmƓɂ$ƛl*$rIf 5w7h|]M$5EE>lDYX"y⯥(ȵy'u[k]-crvnBc6;]oV$wu g5-Mw>y8@'kڇ]jeΥ>a-ѐk[|&9Mc'^^UXɬ|d3Yg]1ZGc3&rS &S[þuЙ6䟘iCdϵq _|yjy?ٖB$H@Urd B+miW>m>Kf#er4ܒ%4_祌FRx$)I)J2i&Ӳk]*Om g4sPB/Hqu9;Qs@ ,H@*߁Iox:χX.%M)+($PwP$o⹸t ]xOWg$KԮ`IH!IQY[s2-? U H{[]5c}Vkey!dC#.L+5B[!N|V=\ ohSڛ#m\wMJ^g?mO^ǂ<7r5:""嵗t2ƷleHR{ߍ/ S|EcYkZy+qz[$ 2[sA"y nr7 s-5/4Iuo,=֥P|3M̖e ) i_ hD1o-y[vv)@[}%014q6?iw kK5SD`qɈ*X2Q?<9免ޏxu#&f2K 6rr $/o#&CGfumksŚՐ OaEr.uk]jﴜի饄L3UU:s~FI %bNn۴Oz,ٍ-&Kyǣi%TG$nDž."@" 1Z_i6R?زM7GZ\}I#~m;:3O߇uo:DОJX) L#hiik_4~_m/nBѵ^Ah,(>!&x d9 %z%Mҥ+ǝV|[N]MV"2u *NqUdI\UNpZ( O:?~ Þ,+$7>ct:[] fgy"/s,Zξ =oƾ!E-fY[xcaYR$A\eUmO6#>)t٬u}u֣\ 63gDXB(B4m|{J~&_#;kZZՅ"]e͡iDv[H˫mHϢ*`me_kYs}&*UE'~jm۝IE76g''(N)#ٯD%E)(nwW3Gw$lvϚ v"Gj]WFT3kܭ ur G<~Rj"#k2׼[kVo=CȊ ,.Q$`!Cte'yHNfn30h3F %9*rG\5}絾W֫QSMGoiII.^N/K::+\>/WvvorO{j&TD1(d}[;qѷw/ik1oI<;\ȓi^KG@;Κ!%4uVzZѽ롡\uNaӴp,ԯ9 G~z+QPy,Hm#Vx6! ~1F{~5sg4]K+N-I>6)(jE=jN`jh ׎9⣓SKKxC)-: LBOTx z4%裂cx v@%}B J+>=N-f:MI47g| 7m+?)c546 .I\ =q\Jt ZF--\$nqG&rS &S[þuЙ6䟘 "f:ʛԑdwDwI Vz<̿ٛa{T?Jw Cn|#^c$J#{vxw#{&Ҽ<:ESkTi,-4l,\ϐA2zf{%:}ʋ-#.vx7 .W~N'^&rS &S[þuЙ6䟘eH?W&~ӿ9?_ھ}~@@QEQEQEQEQEQEQEQEQEQEQEQEQEQE[S,6O- ีIѰ*R  |7&qJth`iv@֍;4!,STO܁GH1|]gj+7ÿ?㟆^!fKQ||QգQ">[k@;G?o5/ٿ>;>OonZhaY]ya+C >0M [[$R cH $(] ȗVEuL:u]5uHvoC2+zW**-_O5!VXbf3WEPEP~${nnMDvn3˷^^u<'fعߟ߿5b (9Aea\i7vTvVhO(<$pv'm^\;bܫpL0W7>9EӚ"xE'R2W ᙯ'x^T_=IJ˖-;Rb@I t2QEBxuV!l٣kUz0G ̏&68"<<=?i֩75M5ۭjq!ym`|3Xg%Y[hPSHXTՂF "4 Y(Mk:= >Wf|ܭ4եMYs~2_>=Miac}siqi~x}zD6V)7cCI07ߍ>LWVkdDtw06 Bbra,_x1/sA7^o kCM,mqD Om%~eg|_+g{Ğ2qiZOg;gw7H *ÿUӎZ=4g.< I*pnWovWNМ_4uMy_E Mn;.{}YXftpKD2 P؞xIi(+=['~$3>'x k+6IڌR5h_BW 4}>kf#Nt1 =FnP$rYq^/|%e\k  ;'WhG@ZC ''Q%u{6moKh>g<ʓ:u9sœcF.ғ 4#]E$@/D_xOa-b.x;Snm6u,D*4م1Dѿz'>W5kK'm[fͼG1+J rWe=*:l>Ayqp/0ٺ[L̩$yl G_&;Jݵ޽iw0]G⑯I-s ,1Eue`$>\挵K|tj}[ jTQ WtqwnMZ[~?jwßjo`mۢvRF8fuL 02>y{}g[kaSxSԖt6֊ 4bI0r".6|Z·}M/%I] xTEUsڼfĂX/3ڷ|5ǑQ7džb)UUFr{+~=1S:p9o>d{_;Z4rZ/tF R_kpVŵf+?0NZ~. ver$KpRS#UWbPP\ޝs:G<3-{(ʱ3}pXQ)A7Io xB@մ=SBZo-TWq +A F,/m_ᇆh^Gu~-("E(qOaO,i Oĺ>-mZ-Hn#OaE~((*>2ؙ _O5!V ( (3KXk5ti%,O+*QЪv,uK'bUPmlrI9~yăr ( h:eP[;$Ti2͑[ٜs':|̷Zx[Եr&U&yO F{@<'hK?2hFu@_Ht5d֭5Q#$F9n:4d"~ G\dhޗo k|OwۋVK1N" v)òE|,.|G>%k=CD0۽Z;^A@̅LA-S-9 /IEݴ{ky cu$2Ïk,.[ zI+), 4-䳌QL F1 @[6w[l5B8ha+NMk1nh^IN\N-2|#sixZAXX&YVR .ެ|'*߇?aۯO'$ ډW'1<ukMVXjW42H H…Ƭ6*H2FxfZ>; JԒmFr]'sǑJ7m~<|C/ ]6=[P]~Ϸ4 \CôMe0yowR-Ӭ~,z+=B9_.2F2E^WJ_xJӬ55G>~'y!c#0@3`[?~~5Ƈ-dYSOeX0ksmo5+ر8'VwzIhկ,''^Bէ{Uw NR&s(^ZA[◊>)zO x{Z'ԿGկLa7{ eE!2̀GowZO.tOD+cZmibƓ^JL^c*+ $#0ׄucݑquO.LO 6d@ȍ]x-t-KY5+kiJr+eޥ327#ݮy?3ؚiOg90o7oKZ-l\VZoro\kfQ6*g` b,d#8#8v2w .i99nF;%Mn: lcNKYۻ1OX`+S 1đDHQaTE@kUEkp6I <Ъz33,92ױ/7^8EPEP|5[Y@E9%㤋׌hU8r$ADY]fBz<~㩫QEW~N'^^UK:?s:uzQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5]nmlK%)kxl!y |C^x7zxoxu{9P)c$m`&<Ɩ@XnUv5xGOԼE᩼!ήn4Y!{b,$eBxݎXɬ|d3Ykʿk5&k?C5t^ -ܷ^'|/u.<ɴ]FNS@'m._L{[LRi 0͐O< kC+O3vn{=hk{.^|%71oz?*OWı>5 h⟱ZcQ9\rb@濳nꝷ%QXTNqyvj/'w+\ o\{GY|?SnMost]͘d Y'дRj$4>Ѵkۋ#F$TMQ#i{G:^i[fuh  B2!AEy?wSҵ6]v|nO˱B|LLƼGh47_[][[/ӗVT?,75d-ћ_m:-cv!& ؎HT|;s^ǖ~!<OPҼI-hbQ)(nc—ocqiw )$9(ZGemfhoúƑG,T}>kzZ"chSJr[F3R짻z?Oj>o-K5tK{y k VG䌯Ь7.n}.#o ڦKc°=䱘Ԑy$cgzs-m5ahvl 9Fe 6Ӗ]_lDc)¤i%Zmvܤkg]O1ċ/fq⛽.7Yd \ 298)ڝxwL˳D=1RF2z hf%PZOu٬A@L;-Q@vM'ç(q̓w]I<Ţm!Ek+ 2I# :%AU>h~yiǙ;7u۞q5^?iQZZڦfX$2Ht\a[$y4nhQTF]m%W7 hq 9Ѵ{'[e{)jͺD||8Eʧ+&bdk# e+-?v B8-իokw) M! uU=e˧隍tcQjw e98Eg*+K[T,Q=+@I+d&mOwvgPLa\(]I$`烊ES]OGuWR!\۩]G`cOiR]Zfr!h w\a x$JWcd /C.N3p?zqǂM>/SW0D\IJl^-mSLK[ID$:.0NG<Т޻X3(K0n.$0s iN6*RՄ+u+A p1@+ʿio'ZG~ԇNETVYܦ{Z)4]f'x-e(x>5nΨ*G@V*>Ct-7LZحfrOBѹf$O1-t;mLi$9U"$F\ zg7Ρ&}iOZTh4/{Wwmih^ >.xJKK k9-#JLeTڈ$*Z\Mnjwzou)[ig7صP8 dNƝaca]Gi5XCM{ t1T\qIrpr1[%cϜWmHlx͟Wh<#Vb0P"|0S^5_iDu(R Lw3* ȐH.-_&)gwum5P?j>>iO^x&kY$[0%`&P]x]EƅQ@Q@Wm'Rgϗ`nٞv88@kUEkp6I <Т((}BmO|2vۏ/;ڬV|5[Y@E9%㤋׌hPEP^UK:?s:uzyW-$HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW_f&|4>%4{<;C%#v}ƊAg@,Յ{yWc&gHfU*>2ؙ QEQENřשt,J mI'/8vU;e Y%3)7#O69<1؊@Q@Sf[<-Z9 *r|:wdm&lrd+`ʍQWI%8G6J%MwQEQN&cܩIAAWtGt~8jSXj,l40De)&c#3N:@U{mBkma[I7 fB:P4KbSf[<-Z9 *rxj©hXZ5ؐ|#{B$hh̿B||0HAZԴtFPnuH,dR ~xGZm5 S@'QYÕI#; 6pr&]EahAEƝ%ͼ0`7[ թ@UXɬ|d3Yf Vo<3ڜyqӝxl夿1 wXbf3W|jRnRmkG)yW_4lg ce:X|ycn8۷9wjEg--U,eEpGEIF>b8?/84Z{ҷ6@݉d>gpp6qOZEaB &)IefKA\ T]*^YJMh## r>^0l[}λGVwy{;[{P}_~cOgoݍnݪpj^ͮPn$[G $y9T_4lc,ÃEShnm:j m| l㌞<8'08O|"۹E#ʯs:O柴llo׌n$T[yGF(|`u·>V<$f~ێ6yڬQ@KU{6YAm$Q|Q^ͰGP-Abbm q֮Q@-@=kb]nx13c98;#qZ߄=g߻yx9ݞb3Umtq"8I#ʢc1f _>|%xS,42_n "Im12YُUEKm65j(BM)hz4׮5PdZآ)@[2 gN8Yz^YK|aj'Tʙ>H܃r=WWi'O|66c7wQlC+O|3?{~mvH5SityfM)65<+ 3Qxdֺ۴ʒ673r(Nsڶ*oy?n>|3v9yW TZZY ċh$'*撍|Řp~^p$hnm:j m| l㌞rj\E" vVj9 Mҥ4֎R80h.G#Bǃy}C|b {F߻&Ivʯo͇R6jr8pj^ͮPn$[G $y9T_4lc,Ãa>6'>Ry[sy}mǗsV(E+sl Pmؘo&C~ggdb(E ?v32:(>H5SityfM)65<+ 3Qx[MtH|?g&~G ?Ӈ~[ǷzyW-$HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyWc&gHfU*>2ؙ QEQEG^Yk3I(!g& 2y]WrNSfk@5]8 lbz#-{?xux QEQEg_u..D.SnR\:HxƅS*oRDDEU&d'3:@Q@yW-$H_#? CPEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq$ xKzjvwj< k]Ç>cцl)-| }ce_~8u(md9FJ`9]S⇍imr൏9Ś/uJW]>$+;x&@7HyI٫ĞoOj _ ˥C59 QăbN] ''WXbf3Wו~?k?LjgDܶeZ𮩥c[ƭOBq?xd-10Qnu|snC{f;w^f6n8 V|z崖";̢V8bHˡMȼy#jޡK٨y1k) ۉDAX-֠Z-AYIR~ 9Uҵu [h涛e xa%(b2î@&mɎm)l.X2s#PGS hQUy^v!eu9ՏG=yW/nq37gssP+>=rKK[Q +YL1$eЦ^Ƕo;y1cfsqEgǮ[Iikr#!Ek)$܋R6 ͚ݝtM:@*]il iYa?y(eu9+ ^卒F ;dupFxCW+.+a{asr)ث#<\mİ#9"15$z崖";̢V8bHˡMȼyESmV{)s5&-e!]߻;q!蛈eu9ׇ?3G#w4/o>@@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׉fEj?>*^|>~^Ht]m-ϾFp2ı 8uTP~?k?LjZMc'^@Q@Q@]|o+;-qV+?LՌ6[JfPBL@:dBܝ (*ڼO>O~wſg^1*gqIk2D Xɔ|ie<EPEPUg}wg3*gz8"4ĵmbZ$6 CrO"4((jЛ)<<̾ݶ9p ~d6`|6'>Ry[sy}mǗsV+>㭬tm`tr yvrE4((*i9OR:Vu?HtZ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (<Xbf3Wו~?k?LjZ((bZkԺp%UyI$H;W*jYU'SqE\(3-֞-AISs ʧ|Zy[$rZVeyO$H{@((*E=jN`jh ׎9U=Y4{$\Ak(YmWq\((LWSz ",3!=p?tqʧX$h` ˺SLG\'gޜt5r ( |̷Zx[Եr&U&yO F{W*]il iYa?0IuN]7Wv2yrk $ލ@Vʀ(ψ'^x&Hyo[m;چ$P,5Ē.ۦby;{cqÿ]uCMFt[6`CI,Jg*Xϥ|kᎧ&?OO9ahѨӣpfs>vn~>&]GĖ]✉HN4~?k?LjZgWY޷kXO?: P"nBrFT3f_uz_>8!?|#AqCW4G?i 'P[X77B#ӯ_,J}0Ig=Ex=: akDiB/#4rvƃ-4G?h*i 'Q  @ÏNU_*<avoƻIYBYt˓vc;19/f_uT\]csg,@m)2FMQrțtbQ^U  @ÏN??@EyW3O/?:f_uzr &oMt{=FeMъXRD<ͬ7`|#AqCSIiVZfw;M-l>!x(`*F*@EyW3O/?:f_uz_>8!?|#AqC*n3}n8DW_G|֒V Exn58p1[Ox@&(F6eiJ8G#m4G?h*i 'Q  @ÏNU_*<avoƻIYBYt˓vc;19/f_uT\]csg,@m)2FMQrțtbQ^U  @ÏN??@EyW3O/?:f_uzr &oMt{=FeMъXRD<ͬ7`|#AqCSIiVZfw;M-l>!x(`*F*@EyW3O/?:f_uz_>8!?|#AqC*n3}n8DW_G|֒V Exn58p1[Ox@&(F6eiJ8G#m4G?h*i 'Q  @ÏNU*i9OR:f_u 3x'0{mCox[IwkǍK8eGQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQU5mZ@үu=NNl{˹V(`UPIb@hw;D&iz߄-GO kq4׶T7VD 6ѝwIߴ,^mi5𦸗wWy-6W#mUw7c4Q@W) c 3sR^w{?~ߛ4_ּ'T.;E Fl[0sQ"o1"=WE74 "^EPDas@((ƿ+JS -ⳅ*##(,Up5+]/-ZŞ8Uc"Ci6IV]Vp:c 5{AY?b+$'Vo9cܞ澟(xM~xÿ~)xyE-vzWM 呚4!'/ ωr<[jWIL4mpﴠo0'h((ͽὯOث~jq_-cw#&E*b#cۃ8ᇊ%_ xBO;rQEQE|q⯉?Ca} k;[/A0G7.#FmĮF Mt$WO}^7PE2fm3-QEW⦝w!]BzZiU7쭲 XGw,xRkثIfP~qxU]_SA{EZh['4uQ@Q@m}k_>|EO:Xivo30E&2/*q{Xx3@%X:H14r(+t+Gŏċ=G n;4k+ eG<ݒuGnr5 n3/5&ťn$JfYc!1dT0>((((((((((((((((貣#taVzuߴ 9g^ F5ݹͯ-XKR 2#3?|t>:k?>%xyW{T~Vl3>}@ӃYcl$9aH2{(Z((+Xn$2(a^k|_3|?񷌮s5ŜQbVFqÜ8&iJXXko9(U^}@Q@|wƽSվ#iOiv־EU#+veR m2+j(W/ |7+|Iծn.&6ZtF߻~F1Ɗ((W?#їVWO]>k VOb :&;7^ϣ鋡A'u;Vu՚Bd?1V(([3' x R}gM%y'Haʫ#:c xn 8:U66CD'Šբ ( ??_}E//iqhӋx3"~V c|]J=VQińiTi$(?$?O#E>U(((((((((((((((((((((((((((((((((((_GMkƟOŚw<}S.n[\ _$RUa#vH_Mдb|A?\6l][#1+HL/"20E}wE|⇂i]@g4>0oH^xAީ.p!FY E}\F__f=I6ڵ&+"nd0E@p/ ơ+MkCmء+_leg*?$_ۚ#Qjo9`۶Փ X6׋cve6N`l:HʰH?e_Nוr >xgׁ?M:Ot)72JY;rǮEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPgnss-sdr-0.0.6/src/utils/gnuplot/8_sat_accuracy_precision.jpeg0000644000175000017500000014202312576764164024036 0ustar carlescarlesJFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90 C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S(((((((((((((((((((((((((((((((((((((((((((?[_3Ose.vx@E| 7V㿃|Ixź z~mosЛ^1m-(kP;LMRא^ZU-2HrOIj?Sjz62hڎX:jVڊ2؍-1iR~`noϋ񯃯[kaiQs\m>iF9& G\VcI>,wٯo5gNCZ46v4hd UDڭpk?~%|#!UV]1!t>jD!(̧t4e/mKWWx5:>&,ڵ\RZ&$l=Gj߅4/)Ѧt7` iu 4TWO-^Kt;Uf㛭 ǡ\3,ŷgVF!?]_Ŀ[@wXix+n4 [;RVY@]ێ8S\b+b [  Vs,|ĿDd'na'#;~ )w¶rKҼW2>"4_ڔXHξbɽp@AQ_.|& Oٓ"Tߋ׵+7Eוu/"Z,FX)G KX0H8c<9ǁR3ح ]yê6Y rFE{EnON|='B֚/--cӦ=hdYG #mvuzOv?y563"ػmQ€;*+ |Ey[Z<=?5;5eF,QP #Qx,՝BqY![ 2W🍼Sþ.xXT.m,rxXd3 , Bà9C\ S.OZiگ4ͣYL@ʌp2uh?b&iJoW)Md5KEoړ h@rMwǩ[:R4w]E&YpRE6P}E|~>ѯ5{o_?GxG2薓pʎvlgh'D:IVR2##IE|uk@?홠5ω^15=F?Ă ER#A;@Rkk^-|Eig"[U e, a!#הWzυ颾6gmjoJωn|K4=O(W:t(e0H͢bww{e8+"}ۊo ~'<}6X5Z߆uBo1uF!\HȠhmooX75ãI^\7\DQ\|^1>'HaὍ]}-HMia" #A,bۛds4W̾|!M3ῃ,tZ|am'̷Rԭ$j'ݑY~p6x\|@ݕxbMm5W<|$yW%H|Z}W–:Ώ/]g8VuxGppqkgx^ xzGe[mZޏm?RмK#:Bꛇ">Cc֥>>m۹ v"a 73,X`^)cy â>^~Vj]4;~*ӭ8/뻀9,z@f_>!/úOOh9 mJ'{wd{Y%HUaO? |5Z<*ڔ$GZLCK^ITr⢀>3uTYcZ.0YcV6[PpH9Yx7ψ>#zeZSj6VwVE=8!I៏~& gP\4vPV9sB)5+omd]S4 _<LA e,j(?_mvQk[5ĻM [v]cM zqpw*akR^ zφ<{zSX^RccwܢO>ŞmOr܅Q]B>[I$' q>N|k$x+ gRm nO V&xh[׹mC)pr3[gK?س|c{{%}IFȨfyeةbv;`e}7;lֺ6n-w.dgc31ff=K޺Jo_ Aoᧅ4=^ otkxQeN8"OǏӮxYJu˻i#F.b)\8=sfY28$W׋>2x< hן ~-϶fȸgX0u(<,߳yxkVRмO૝Z+ L|p>%Kgypb||D>(hzTo6&1C%0:Q@XDTҐqqOiN{O5Ɵi@%BDc#f'?hχ^+Wn+wL`1k Ii 9-x&[kG}lHj\^QttL|'񷉯lxG[Կ:_ |@5xjlG>1n8U4#L8rFVUESKY]ׁm|'ZxkŨasTɴ39vߵOBwįx_۞[5[OYXx;Key4YEy"%F 7ψ .obj> L*Oi$M'@<x|2׼~ =mf>k閶3g$:L "csܡ_~ h? ,i*G|x E"C$vR"Cs9#JO<i x߁ԼMxL]>KXb 9a@?J@;|i𶵪ؿve_hL'M cwq_DE|w׌>3h?xz;b8gu?dzt] ώgo/kD}F=ŢVܨw}瞸Vo O?W uĺu\`G"3"߼#6:_^,⟏ W<5^|3&X>ۉ_"c@sg5/'g-rᾛhu AywZ[ KO g z`IxůitYa}%"h@gK=LnO}Oĺ'߃ZNh7w6ŭ]@I‡&2C-^s h^%e7^_^˥I4 MuG2X4P?4xSZ< ~!\\y3+(Fʪ/'ϓ?#N9jhcZЦt[eݔWqåc̐ւ ("ܠyn!G^=+ᗆ,/FKŞoq2co6;+e}/)a 22(HeG|kPPjv^ֵ'AHgLe%G</\JFS_IC־ eu^[o>Ϩ]6g;Gb8&Vxt0\H^IdsǒOzh?oZ|\uVcG~}'S_^MSu:HB|W<3K"iZLJm|78lmF-dZ5Pa¾â>9ؖ?7񯆼/uY_>0_J+is 1,=5~.)< u۾iq` y7NܟK'ź|/i^3lh/>ec9eJK"efnz(ܨ(((((((((((((((((((((((((((((((((((((+//ѥۯ%ksúubi5}BY>d-#d/18 hn2oo‰>x[4}rN{}BU%K$(HAǚ;p=Gm_ nJvZRLS4ޱT--" ]GU]E{U'5R?x3 z/$H/˧GHHˆLX  o] UG)v>Uw4U|R,4}FyP>=\??4>*7']OKo&Q-<[+3ɑߗ$M*7.?hK? b֞,]ԺƏiw=FOR@J &mKWWx5:>&,ڵ\RZ&$l=@xĭ~~2|@յ,y>j4]˥n s{HM*ύ?,jc>(-90tE{}jy7elewsu|;/ s DŽۋZ٣W2*IApY0 o] UG)v>U;w։Ckj^$Kl7y'#F_$q^wog1zl`YexA/ v9_]E{T›woUW-T|N^xGY_!j_iwmƛeko&"4 0r;x;N'yaΟ]G;%ݶek4O/rZ509b7.?ߋ|@~̚6(;ۍGRsuyw+K4L;%XI$S~.|=ʪ?M*h*7.?ߋ|@VS~.|=ʪ>:⿅ OMKE4IU]E{UP›woUQ o] U^EyW)v>U]E{UP |4-sX=3@5smm&K$F.J›woUWJjO>|ʍkbN8ˏy\*7.?ߋ|@VS~.|=ʪ?M*h*7.?CL[~%|{z^iz44s\{X"Z=Jo xTZNku32pX ڀ<⯎]#sUwZ}|=Ǫɦܢ :;~K|b+mVPK,V yCډjMm eg4o [bY!I t=^iit73:e]I} yčG?7)['-'%赕]hyϲVBxkS}ϊWWk?zwXVFi/" C2J>>yR?^S__FJ 1|]7qz>iQx';hi3i1; 4cHCeM}E|5| xo>Chў>k9u}k(ɲʠq]1!YJ:Awlo Dn$eX0}E|2~K|-Q O;YѴ wY:A3 UX\(((&V&R[ywoô!Pc',嵨NPVoTiMSIݻv[ (6 ( (39 Cmu5b'$q3A>U`=c=kBoy>w&#;|?ųn8X(("LBOk71=#^gBڿ&O+n|3/wms=Q@Q@Q@U?:&xK*Z<3Ŀ]WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^U?:&xK*Z<3Ŀ]Pƚɫ7.||t>%EZO/=?Y+f%£ "fmx]\#4ivB[Jt7PK ^A7R؂G_1x:D~ {O6Lˤ7-KL+kpp)%>r~xo0|#ĺ:&'uOoާlIu9uP9?Ǔߴ]5xo@>7!wxDE\uqm 嫮ıa$ oa煾?H~&7RY-#{ -7H@2( F7h /ڛ5ShVYXXɥޡ$?Vs AcY\|F~]Zm.O|%E1@ ܲ)Hk⧅>5k>OZk~6JEqo,6vlI8۽>||@Ǎ]7S׎ngWDⰵ&]b]XAi(((((("Zm߈ꖱJ_y][q s1&Bkt .USMRx(,J|d`y?q~<^ﲾmnQT`QEQEgqk81bg.$Ř{0:VSҙަ| <|q!J@Q@Q@g_u..D.SnR\:HxƅS*oRDDEU&d'3:EPEPEPxN% Vt?L/hUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW!Kυ x]CLzX@-f3>m:OZL̺]KQRWu|Q9ezu<_x[ wZ}{m+PZCFc%O4ny\ݞ1+4OPtp*$؜. k` ݁'m^Oئlmᛮ|`d>0/ ӎ}YoKoM~WϺV}3^ĸyQ+y3D[ץ|t |Au|=I?"Cw߷߲tH>J˱'K@t~NLQĦr~Fˍ??<)Oj&L4M ťq$D4r.FTAK,U!*9@g>5_UPEPEPEPEPEPEPEyW/YO֫cIӒ~ŨJVܘ#AĬpuىVFK*J=$nf&2R(((u%e46G$ʃe'lC+O|3?{~mv<@(E],HHri(YFP/zV#۱16L8@4|Ha$㌸p\EĖ$+x@J2_hPTrH5SityfM)65<+ 3QxТC+O|3?{~mv85QijyfK(7-bCy>frͻ[; @PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP _ oH.ocvA2BbIiy_vZS:?mg2X4{F,jzht?L/hU^#ybgBU[~u'W#ڿ'CV |7lyo8y&𶛮jW>jS w|˺[S5f|- > +Z_!g eA% .J_JC:NJ3G-gFn >U^$qIk2D Xɔ|ie<@Q@Q@Vc]SKYZQ-&Ia܈rhB(((+?%6k$)mG yEPEPEP{y-'dgom9vR kY7W8!aZQEQEUtWImϙe^1wgX#k%ѵ=ȁڊsKIТ(((ʼG'Ov^^U?:&xK*Z(((((((((((((((((+ʼG'Ov^^U?:&xK*Z( ( ()3-֞-AISs ʧ|Zy[$rZVeyO$H{W(((z2i̗B*۝7/^x㚹Tg/,RsleU;Onn4r(((ϤXަ^ƪpvx*SѕHWM5x!zqP( ( ()LjSP>|͍Tkb>8%y\zRڸ{$ϟ1e!ؓ2=ssW(((q3^MH ;̄xSW*JWcd /C.N3p?zq( ( (<t?L/hU^#ybgBU(((((((((((((((+~1| KZ ./{\JpN798g]]^i I|Lp,H*go8_+0<{!8YYl))8 PוxN% Vt?L/hTQEQEQEgr@Hky1HYɔ|WhfU~Z}|7;-:V(((ZWSXڭ[rDùЀH`2FVW~s'Syhϗ`ߎv8 QEQEQE @kVupId6,F Ъڿ_? 3b((( H$]MyI,LdX2eZЪ?j[Oɷ/{yylۻs1V((($S=еƅ1CHקЪ ?a۟3nuK VT]v$x?:w/oPi=퇇|Cuduf zB m<5lH$%uiXŁ-q01y4gxGd(z%xWśX~_ 뚑K}oWMbfGmpKn6NוxN% ;2r}f4.\*9& w`\p2@uɇ>V|8f~͸ێwnxެQ@ϪKV{;5i@nܤq呼]OL.-DPmI`em sҮQ@]@kk`px/9;8G$dkxIF%B|hQ@4OE R1x'Mqc:X}TZ٭Jkv#',|Tr~n2df[<-Z9 *rV|8f~͸ێwnxޟsnv%Bb`)O Ճa.N<=&[;(2AePUk_e$e[}-Vu,ojIZos՞nP.#[)y9do(lc*qOfMif,[A;n@@P򍥉xд 4]?NZ$WO+˸S\ӿ[Mip{кDPmI[o"A~g#t35Km:=wB ϟy2B`DVa 8.~^[ +$[bJy>L.ҜGG;j3]Iv)5.I}'Sh1Bm2Q,gc9cyȗmt cČ.a8bxʜaq\cr: [Z1_4;˜ 琻I9 BƜH[.BJ> Kq<-Gk^O)/3?<~m5'ξq|OFkױqϪKV{;5i@nܤq呼]OL.-DPmI`em sҸ |eGx] ^0ppǮ+S a0R^]fO{8, Jkgn[e5P/d#7D\116cFN9Q>-.,e"6pGvF~P879Wahla;>gn6۳6ϪKV{;5i@nܤq呼]ONu%vK^yLCL_*p[[u&苆&&y8=(ҙަ| <|q!J@OKK;6YH$aQ+E_<~ggۍv獽g[ GNYJdB[EԛVȐy8*Me M LMx3pzVZ=ꚼiLE E38<,u̅+cz|-.,e"6pGvF~P8797hla;>gn6۳6PFCW&^"'>CyV^0ۛ;v@WxN% V ( ( ( ( ( ( ( ( ( ( ( ( ( +gxĺ#ǭߛ  i6o\Z3\ɴMraֵZiR {[ox~IfTDEbHM}EygONg&M [6fqܯ͖ ЭzQEQE^#ybgBU*?ekkg[ E vQ(ww:eܿem v̜Ŝ9d+O'iַWv:˷L]9GA`8 K>N.RPb'%}/[GFKVxxӮ u{r٫6M%f~!Xjы+]5%C|Ԃ3Rѹ*:*%4SL I>c0R R|5odP񍎞Dh:he2\)"xF[Cqn:^]jZUܥoh0`AA8Vؘ֎_|^]]9a1qPAjItX?/ݖݢ+=➔4|Ha$㌸p\K) בd@U(Q ((*JWcd /C.N3p?zqςHxu3 X ڱ>\h^]8M}cHP)5>j/;Iu+d֮ǧLeP8cl9}Фc-⏌ [&7O:ԲhE7bpbdp@Vi_]| avm;.7m6xV֟|eevI<?#7pvU((+ʼG'Ov^^U?:&xK*Z( ( (+δ?>nwy{1[uV~{fn$@Awv^s˯QEKZ֬|;\ZY&fI8I ^sHž!~ o]! od.L?'1x/Y? y~nm5]ɔb?s ܄$g WWAjcI %f!ww}`8i5+|i-մVjB(i% bc\܇_G'F]^I Y>oiE35, G_ SQu2Jԭf66;fw,) wc\ٝMOWԯY#Gce:?*Fdxtfv*џ;T=*hHK+^(ދVX#/-e/SJkBFLyF$ڛF4I74o e<;xwN-lW7-ldD[rȿ*|ђ̌e(?ֆ2Uy I^|4voK-幖+Z1# J7g 3`5&ޜh+Bş!g i; jάlݴ),-+K3Gti=JW5|&ft ȣ]7>rWo3čA7/3Kӭ=aAvv281@Nݚ_"Z湭  g<0r?{pfOo5s|9T|1'q;A'?|4[Oqua6o&=d>l9&=?:} ڵŕ2d+&!%vwI]SSf3|$ԕMrVge95kRNT=u5ʖo;zWm'Rgϗ`nٞv88xO /dڔ= iyY pFU3nu4-#>S2h~tYôcvKlF䁵ҧ.Y'n?ay)i'%ZijvU8{; -392H&Iude*;gÚ4+Z'%4P=A kÝS䭯eR$;7nM&Fx)Gp^[/ʶۉbcġX ^ppl5=:~/"hː@e8 ^ne*Eڬ-%6mJ507 y׻%]49']w}Xmּ5( @|()P@H@WWNv+s-WT֍?4Oyn:* TZJ/2N/~<;͓o^ٷwlbV~H-f\.fr2OY chWqQ@Q@WOhMVf_~qv{Uς8xk2]X0>\]8ܤ7xOL-SZCH$dIQ.F`|:gH'qpc Z4\~aֲt?_| !|Ao:G<9c=C-Fyg) +"`9AWxN% V+ω _ 1 x&%hhdM eV&_}u5ieT&KSr$v+$q3?>I+^Sݜl;EgǩܽII&FrF"Mx,yuF^FrCF+>}'9 U5NrKHŢű |$>M#9RakPɥ[Mo αc{"6:3 /̽=7~)a.[ʲW92VHʮ(0bDHyh{mQPM+]6J-]-<&[F}/eF0Z5Mi)5%O]/z~(YڦomCm:imtL壅YR I\ae);|H'Hqu{3 !>,#V2`v6l>I|Uu=/L~ө:YYjPGpk{9(cIcFyr;F&h-ωby۾WvpK'ݖNi0aq̯ΨqVS!JFXt!F*\:vGN2=9iy&GW_;Va%?cJU՞eyf2+1sok~$ iDVv_Ľ[7R,a˵BʱZ·Qy3_Hx$ +~Ѭ^i_Ťj}5Aru Z^Rt8FWfE'V!yaK`iiZp';{We|ekӼ/pla˽$g*2ܤd0'Ы+~ ~-_iڜ%W$Nl3K,HVtvIJJUw0ԧD)`_ж4,:MŻ!M+&ݟvG.tW[Re' ܓJn&{INvx⟆<_UyJp,۰G+|ޱ^_FnKڅdHrð0I=2MwV5hܺJK+6oF8\?-Jy~iTNJ][y;;Kb0~T򺄽fﺿG35M@65Py(>Cܔ95r˘U~,G$%nw&a;O&-Jt ZF--\$nq{՗(5;i7$2^@ބɴ/$OLg$O})6cvX^c$J#{vxw#{&Ҽ<:#_LzOan`b|>ѓʧ1Tޤ #LO\?gu4-Jt ZF--\$nqgF/5ILJ.srm/O(=@7(iCdϵE–Eb;dI<|G\s@(5;i7$2^@ބɴ/$OLg$O})6cvyؙ_.Ыk#Zjj ? ~>꺪ė+5 OlҡxSB׎<(-?b|?=bkjZ=X[$`NH W~۾ּAOԴ w^<54Vad 4f> ,I+^/>~?2C<=a376l}b J{E`n UAbA#袊(>.ƿ Anj6rזqg˸Ur<1ki6h?+3sQ}Ъ?j>>iO^xW|QYo8%ԤԞBuU p{`]yώ?3xY('5L!\QjimQ\ۭݴ9uIPh0pAS#KE{&ϤiIYp%? >iuOhYX7;I#0DT:"ʊ+Úk]CuPGf92$ӏ,Q^4*OFϊ͸}cTeG%8ȓѳ<; ~V< 29.Tdb[i™@_3Sx^}rx!+9-A-`UP6Qz4Ht .ot; .-[yU2! G0 \<[isufkZQ6̫"*2Ȯ>2NO %%WLp9% Ǔ8j*ReY:tm&MK7-v;Dsrs{y'Z)#4>gGB%{C'Wg eɩHֺfg9HL,MA+6ywk if>O>l!ڇl|FuxmJ-. oOr!hDFFfY ]W,CF } ({K9.k]+$|kVTT<-7|MNQz_ǑG ZŽXYI$Zt-%;9c€͘<~vEtf:)ּ4- ,%|;F,oxr)OS丹}JRe@fԦ-7$Jyeᮃ.q,zl\-D;+G(F*6 cLGLfYd!𒧅t# R*i)sIsFJ (&ӊIs@me1Sbp^|<]OJi'FQjK{[.KJ~hh$5-[Ŷ7sebciAWȈ)G11p~־O@ ,e-irֿh"EH&의6CD6~_|?hEˡXj" +o?4BcFfi.GF l,k` W'ѿߊu xv7]FK͈Bb 7Py׹>~-KƫᯉA 㴵xVqH՜((+> :-t-`/jqyvcs5t*}BmO|2vۏ/;ڀ,QEQEQE^#ybgBU*?`31d 1rk; }G>[V|gť;X7-#*.'Wu?MV'<"]tMg%"i E*ۖO&{KVj^Sj~!t-fLF+eIRH(((t?L/hU^#ybgBU(((?SLֳ\HLa JLK/9؍ |̷Zx[Եr&U&yO F{W(9uF0~ZE9mU[mjl`yjsɁ^&!8 3m.nNo4Brb]O+>+?1.լ֭k($ɰDX95_CgFë_ҵ _j&?^Ky$ - '(/fe4K\A![YmTV]]'U^b5U4h7FAmo3j bWhFz-ZMlq$v3Fғ#, <wwF|77m3O%i'VA_4lCnY(drK;Ps1,pI'2qXГ++^s%wxn-=qm\V:XRRQ4Rh8h]sbt I<6Z]iw%GC5#J [ #Iq_9C;D ;:H"QCBsy6^a|? +]hIJɺ5 b3Y6._$(Ɵ4xr_V.RfjXHʗ1T#Exj'sh*l<jReζөNYF-%co˱pX$a>jUu,)1˖->W*wW^clu] *r,BG#6TBt&|O|Gxſۂ]{}Y56\$tc*#z.6,fOݕvuOb-)]G!!w.FK0W&w6ye"ܻ9 1()Q@^1uUsLn-ғqm-;I8J3改Hʓg<[o-סN0ZN q'e .jrsr e$Vƹ}#cv,p4s%`L>psG=8ȫ`Im[ua Q¼GڧNQۊ|_2ip?NjK?ij7.ɫ8̚nZ.X|I);_Ho[D-m j)w=yG$:讬F&*Mѵ{;+hy(=zw#I״=ZD KLK[t1dB;x#si֑^ cגTQtRԻ.Ze}VC<-7oo+jZ]O,M~?$ "@rhz?Ϗ{Xk~k-1i!*:_$|_?]x E׆|-W×> Ӯ%p9XdHmC7ow-ڷ$k+faG&&h>zT ٞu c$R0gMh֭ Tik}^54) ]Ny0Vܼ'ʯkklϽ|iz]:8tW΍!"08*GVy{.+R ]ÖQrQ%F$n"v$aIJ:hh(((+>㭬tm`tr yvrE4*LWSz ",3!=p?tq( ( (<t?L/hU^#ybgBU((((((((((((('_Wu=kᏍ5i,ߌ%]$ y' j VwUue6>zrs^Oe/+OI'uվb_7?vb|gz$_3+Ԟ긇zvnYlOYV}"R5'0HFU[W+?2A6k)ܑ$)t  yJx=>OBװǡCF ْ+$ EA^^Pb0SEl#Ɩd;*H#]sWxZo,#%y$Cm,A(Xr6(]rv 4S}ӫWFbt0Zy?$nm=$V$qFW块n~B4x/OԾ+[񦮺g#:femw4W_mݯG`21xEegja.ZI RN"\$y!!7H6j( #\U$Vڌ7Ym)'X-Į^UUVg9F+ S^f'N/yZr*zAKK^? e p޴$R7SqEVMG~- 5:m p5q#ExJAe MP$QCkzj6IUa(8P1_QX~]x¶~0۹n#I|2$-Ί D-x oLlaӧH{(ٕfub 8[GCLe:*r,V)4ܣ RRj.MWqSX⽏EJ񨽌\4Nh(N1is5[y"bUcV5BQ* =ؓJq= y!ީƝׯZ_\4%e*iE.kY+]w7t FΒj{_Si$Jͭ:lk6؛~|OǼts#@|ANܤv~_պ69&Vͯ?%b_ G_wN}wQqyP:y컶_r<\U}Q|`&;$nL\j3KK%[6ymd)PeV ƙ˲,MH5+Qo&?k X):6[FOon]-4aև.ܑs^%N4tQw)9hSi 4N'Jus<0Ir}RQEh'|09It J1kk UUHRIpOG|;м/Z^\: b*^ (=_^W^rM>劏`+,(*JWcd /C.N3p?zqςHxu3 X ڱ>\h^]8ѿf?ᯆ/|}j\5XUٶVFB'5_7;JuDIvK-oeD΀~e>"O>8i)xp^:DNx\Io Nn.eV.ʊ/rFh߫¾,B_Kᾧhe-ⳅ7 G;s)={yWؙ_.Ш9a"G~7~KAt_ZKæCh#y>iPd Pbl'wgKIku@GHw E  ]~%x/i15+Kkg6D@UK+[daPb+h'if$YKo˪{Ivtd8$0:7ӑ޲;&(ҳMrQs25}XeXBo%UR8w* fBDhˤvjz߉3R3[۳viF(Td䞵;ԭxKj>jwV-˛IZ]FW7ʅ$^/y\IkZa m3ERD*ϰ]-_ܼ?LOnFt(JGzR֌TڒG1:U)8Ve8/eYVsqN.Ӿ|4M9ĿfE0dR9PF/~>>4x({#j3Wj$})FsvI#MB>< |"ÿAGi:FpK//#T}豈'-I~|o6]VEͣM&-H..,YibJ7 +/fM.MF.)M9¤Nv#ެ/n,Yab2rp2*:{-=Q2B&>~`#<zpGe 3upLs˸?+1f1_'t.SK[IL4p㭬tm`tr yvrE,hh}037~yf۞35bH? [xZg}3lt5yWؙ_.Ыh(((((((((((((((((*?Y_u=O^'*JQntm;5_V]k/?eߎZaL cxKю+XyMij!9o)eyo0ƃlp6ƻ-#žggaZA"Oa.v8\ñG5IIӭTd$i'qmkϪ-Q ^<(ܛi;$Ǟ*I^~к|-wmR&5+Ȱƻc:yE#̉f߾p<;~g|/7ڎxV\\yzl1jvQp$m$n8dYIxju_ i|Fesح֥,KXْEYI< [t ?ifm!o6q5̱l!<c$J V⹽f˒mY-w[$gyle,d*JIF䛌NQ|Iٷ^q-kZ\M=΄$PKy+i3IrJ~Яs2"x+2G5jc~,䶶qtB(figa$o@OЏ|RhW ^iOZ خI7jLyۻd&oaV hZ-!}>+hRY$Ae$S#Th@}'qwO.zriԧ+I)kdRWe{Ij}&e1SeB&Q8f[n2SpwM8$<)YxmoR}_ʶ?㞖^:_=ڮO~m)h\m cb_ׂ|m 1x\kxj t C_ _ݵö\,LXW{k5z4?-ơE,Y!.b22)6qb'6MWRNӆ4o<) 3bVU*t[k)PRٹRN h.{RkZl4*ҡet{*T(ɷ+]G+-,gdrg6|#O_~J:_ wMw(kb]ͨ`:bE&40(_4o to~HҼ"mJDy͚Is""F 8ZqjZ5=ֺΕi,nm:3deػF[ >05V|ҩ%$+I!%N ꢺyzN JϷer֮^5<@Q#㌠rPʧ+-M<*6Ry8.>s95r8;((u{7"""*2GM\q+ ^卒F ;dupFxC@(((<3Ŀ]WוxN% V ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( <3Ŀ]WוxN% =V((( NHI]Mo#]08 ;2 _`t*ڼO>O~wſg^1*QEQE @kUunHw: H<Ъڿ~o#8b on~Ѩ>t #13ʗ$(\FSSi$,~" xKR=K6_I1 C1a 3_F2~OgZ\ W\,,V:Zj.pV_ESH-1#4x$u5U1m d6sl~)5 º̐ -FXx0vD$qh>"?vR%:܆8ZgIq:F*%xdcLC/Mh^soq}^o&[FG(H$~_UM|v5%?Cc)FqRWG:u*М|Rҵ":n_m^:ڴg\2`b1K4( @> kk{'i'ڢoy?n>|3v9yc*TӺi%-nEVj$z={}(K) בd@U(Q c%l|ͻg8b ( ( ςHxu3 X ڱ>\h^]8)?\x?'\OϮ[7ZLHT+¾,=įKᾙ *b.c"%Hw1{yWؙ_.Ш<iamgv(PD*G?_}y^G|yyvtX3iiki(C $EIR6޻X3(K0n.$0s\):+ةKVmԮ#01G'm._L{[LRi 0͐O< Т2vt-Zlsb7[ hO@jH=EikjeZJ'`@ !qlr9ѩ^"kk!g&RQ9]rSmOwvgPLa\(]I$`烊FlmTW6WibQ@x{J7q @&K ֿn4?n򼏴c󝛺8隱Eg*+K[T,Q=+@I+d&Դxl{}"%!*$r9 VgH"57me2[$6΄C0"$]OGuWR!\۩]G`cOiR]Zfr!h w\a xEWεw١w}gnyLx=EikjeZJ'`@ !qlr9օMm=ٞB]1spv'0(]OGuWR!\۩]G`cEg*[KW,S=-BA.3dѴt}"Mp4q3[q+R=$cM}jֱ 2Lr@%9@~ҢM2-m%° Hd¶I9jFѴ{kf{ t…|Fx8P5Ѵ{'[e{)jͺD||8-իokw) M! uZP_}y^G|yyvtWTVY{xV V'#MhQ@fe-&gc%i7ړ{y6;z6dclb-XBRH$YHm]\$&p2ʬGghP|ҥ}2n3B!I$6@9<*u۾ۼ#>XXaƪ5e{8!?|#AqCW4G?i 'P^U  @ÏN??@oUcx" wXN|*'2w|c$u ]\XLnl1FHɾ1Yp#A  @ÏNU??G3O/?:=Vf_u>8!Z) |_ML.h P yT84G?)_үtN{ ]YBWѯee$ =f_u>8!Z+ʿ|#AqC4G?h*i 'Q  @ÏNU_g|u$ iΏgڝL1K HvG3\3O/?:i? *L.qiP/E "HUPP((*i 'Q  @ÏNU??G3O/?:=Vf_u>8!~>[ìjs@i#!/͙L=w wk#VYYd!o,;7VfbrI5o??@EyW3O/?:f_uz_>8!?|#AqC*n3}n8DW_G|֒V 3O/?:G)VS \ ibhgvYQdr1(*i 'Q  @ÏNU??G3O/?:=Vf_u>8!.hw\-Eń+d8܌eXb7la;z+_>|BM{2x^ҴF=V{$ln.cA.\dMq!cecJuA~*F[X[[iԹW〃$j((j:{wve ^]ʱCHGv *K_/~,9~e+4Z?ʚw  R#EP<(g?kw-, h؉ rM3dTQEQEQ_8oK|um#—Gi8K$Er;1|~/_ x )_Cբ4kQudMҫmrNh( ( (N߲ oα}\i:mq+NI 8WĿ</O?ow5 F+! )3&#P9ڠ((C;7i~/oN]B4g0TWk/<%%Q{[N,4fKgt!w]_jOvm? <𕗊4WLL,(mW+dp((>)xg>.i.ڲ߸k(l;q:+sz Q>1Ox^I{m, @#DfQa׸~-C:'O[&Y-a6ѱ!A43Yc,gɠ((((((((((((((()*2:FeaGQ@[h 8PB_:xtDŽ>cѬ,|[/?Qu]?Ku$F$8_%fػ'袀 ( wv7yh?\TPK|Ak!m-,0ifnn98}^,ݠ|Ln|/:'ClY&uVf)PrO_ ( (<1?qiZn4N]Ib2HO̧9#$W)_~? ?w; HIo -iMԒLQP \H{QEQEW#_i>4 ȯcAyQnnc먠$1cߏ||X|eꋮ[%/7%y(c6I8-}'EQEQE|oUį>-CJaIg$g*BpIg%7yھJ_oj7k,}r8U8]hy8>W|Q=׌5;]&@ZLIB;;1U {}PEPEP ?g/ ?d|eh<])%ΕCk6I_|4#BmL^kۡS(ݑhR߈?}Eռ'_zi浩+i3ey#q;~l`)+I.]$->yaofYnۗܠ+) I| @Q__O;oKuo1u}.L-溇ݤ[nCIo4;OUN% pLT%*EV rv/Q__ُ g_s^/}"O`yﮡYTdX!(jkݡz~*_|.|A]2=r?|yi#رK8+燿i+?u.hZ_H27[Er̠ p##W]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy mS?%oDnxgSmŏΞ[Y#79 f,@^+G G}OĞ+R>!xk[ѣh"NȄ`elcIL(9?? ̞{5}R=SBYygn (2I }E|˿uSGy=6^F5)4-m#y#iSyUnA=:NG[:iRW F*IRT8$U(hiO_쬾Aoj#ϊ/"W3K|=iE>!7)q5>.o󘼽g nq] 𯁴\c.sx;~<Ȥ1=~v Vlm{(fSVXĠR FF wQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEgnss-sdr-0.0.6/src/utils/gnuplot/8_GALILEO_accuracy_precision.jpeg0000644000175000017500000015003012576764164024320 0ustar carlescarlesJFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90 C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S((((((((((((((((((((((((((((((((((((((((((((((NዯF|RѴcr/H\eNё}E|W2_ khnBqO~ ғrꖞ]Lrcmra9lc2E$:+4S:ω#M B@eaҵIHva(߃jG5xGnjg+6V^-JKKb;'&7nFJ[K~:\:9&/N2@,T@$WOO۟)"_h~uzn_G隅ĄQHΦMfPz}E|.~|-?-/<5x7z^$lLZhOpA2&Ǔt <1M;>uo4V+; aFUּ??  =k#yֺ,73{ x˜Q_4{/ [w#oݯJo-< [u&|F!eK/.VE [$wtW|6wu?+UZkg,w"lw q!dt7|!bOߵׇsF>3N;Y6NjibI,?̱\)"=Ҋ\ S.OZiگ4ͣYL@ʌp2umG5 M7ZʴhBd >J#<{KEԎ_ΞPG9UY,Hs# _(7kw0:,ry"C w);߉^2-"" -=oŷ6Y_B48ϩIYeT2vv 8$ Q_!(u_7>PS_[Oj#S9̆"ĩ(:۶V:?K&ሼA+Jѯ=Kas% #b`8SU8PӔWƾ63l5oO4KxڧUɫZKĹxK) ?s|?{;L7O5=V+ 8Qd`f*I*HZ~^|=xwO+% Bo ؆ddXt"kt[je|YKCm;U񦝣k)H]QFQ-?i/|>Ixq'{Ec.g!cGb1##2ڗߏ<#/FԴ|=/ \זic-@ndx˂q@B_=iׄ/Gigwö6mcS$f<5۟ᾕ=?WpkK|!ͧwE.f*&=69j+Ⱦψ: =uaxmii &];&UOi&@,ߺg{ I;dj`oMGK m|aşٗ].KR.t4.ŵ/$yp'+[5?&?m:_ j^ /-Q6tiۦ̲0* rM}E|m ^$if|Y;VM:l%It 6!XI;w K&t-s-Ծt7CscL_tP>G-⿃}jvzMڕZ&-H5)|u )o|ak+}nH-2fll"ړxr9qqu~{V|KxR״5;Vg9utlȻ|KKZx_w|sSopRJthUiD3lr%E|鿱&BO^1ǚgg}4Kα[4f%efEޱ24T/9c|Tz9M3^ mR.$ ~[n2stP_eAx+_-↯KYCIuH,4w>v&|$< xS:Nh+Қ+:|LY )Z,)6a3Vmx_ mAayOtdsHe\%7 JCº^ #Z3j:J,i_d&U #y`.Uv p`uoك[/7~j \zM U?YYl FϵC> I>x=-%/hP>..X Fȹ$ M{玾%Y|{Ҭ~(ygXxжaq Q#BBcrKG` /~?EJcchtcKΆ٭]6.φ>5Ҵ_Iƚd:W6ߔҥ^"cΓ`f]WC~ Acɦ/A[Sfv~Q@ |QW>~?pdgfۖ74P'gzx_XӴ,t>'|4s'|~zޱ KmWGaյ1;N\#5|z(ktO|'o,Ֆ;ĚU#]wbStl ^96;JA9~"/ώFmG:k-u6-%-̩"سawmQ@  nC\ςwa#<~|ye/ދjVZƹkixeh"dDْd#3l&w|{8| .:Suj5fJ򭥲 Hnו07[>?㮏g}_E=nMYZqO,E K8<,~ZgNm)kQ}#p>Hwؠ(((((((((((((((((((((((((((((((((((((((ɩӤ3 j9_ٮ?Z_ e6dڶfYh<No_I]}Z37>ZF\l2rS~.|=ʪ?k5&k?C5zyW)v>U]E{UUky<>.O-z/>֧$6Cakg76:i$~33Kox@>s]!-GNoĊA\›woUQ o] U^3E!_#h}xCGRM9ԇ5*[#l*St_]E{Uxĭ~~2|@յ,y>j4]˥n s{HS~.|=ʪ?M*h*7.?ߋ|@VS~.|=ʪ>:⿅ OMKE4IU]E{UP›woUQ o] U^E|x -ſvo>=A=/Pf[B9.t-mPi$ˎߋ|@&%aܱHttN8jyW)v>U]E{UP›woUW!|EwuK'%fPm\I8N9ć4]E{T›woUW@U o] UG)v>Uz_]E{U|_$G>=u_C5 (%$0P6$c_BU=Y4{$\Ak(YmWqy)v>U]E{UP›woUQ o] U^E|x -ſvo>=A=/Pf[B9.t-mPi$ˎߋ|@&%aܱHttN8jyW)v>U]E{UP›woUW)#þ6_/kSh|vc} ^ds1N(AyW-$HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyWc&gHfU*>2ؙ U}xC|q|S AĉY9-ŭpXqz?k/ ^)gjķڟӦ|}̩ogdYg?>|@WKO xS`XYݵvF}*_ouUL/]JXEvz޳mg3YHGRT8݌eHh|-eX /]]{SKn+Hw=֥&xg>1|.~n/z]R[jinktYx}߈>>?'ѯ⻉[Z6`;S C&|+-'|3z=Wq$hbJzZ>8uUO|S:'#EoBus&+of~?-·M} n%xoT|c^y~2x Iy_lߜmw϶(?j'ï_xNԬ.Ē(b$3 R|C1:C1:?ʟ?iC?ʟ?iCC1:'gcB֏ RKv`ީlpaG ((( $S=еƅ1CHקЪ ?a۟3ng߻yx9ݞb ( [I֑c!ӫkʿio'ZG~ԇNU((((((((((((((((("[&RB|ե0xzk/kxC<7Öm|w}re$MR0rv) ԟ|sgxQ y]n^Ue\x4O;oZGo _j8IgkOj/z1yAy7h(%5y?kxM+_ZִKMZ+]5~[x-SW,|-`Y>khFuF lm4#寥eSskkg|,k`ɄBݸ6>\s\[|_K7NJoYd1Za >YxWú|#XE-侈 UgEw1s OyGgtOm|ӗcMǹڣ5@-? S%h 伿MuP' Oy?i_//]exFiןhWu‚rVh|=\|A#l-mocnJ۬M67,X6ܑFRlݖi/Ks K^ } 4^ n-/:m)E`";A<^&rS &S[þuЙ6䟘FjV5$Ӆ]vM-/*JNТOo'>הg1~sqǩܽII&FrF"Mx,yu, :̗FL"j)7).O$^cBPޮ&;kX^+Es#4Cẁ39$\[*.Z,['ϒI2:EgɩܥIy!Ɩr&My'*xİɋ. 1,U5NrKHŢű |$>M#9Rabx|`&rS &S[þuЙ6䟘iCdϵI+^Sݜl;犯r&$Q۳þ܉6q [I֑c!ӫZe{} u $vx>vkL#M6NIJ|%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@=kA|%߾x*YhkZ ]DTx-ma$qDP0qMc'^^UXɬ|d3Yh~1t/L 7ȲҴm" F|g˂##<ÿڣþ9ݷ? /NӼc}Q3!uwG(fM?y?Ƶ¸/ڼO?5|AWֱ\<2~MB cZoZZ׼UwnYIlVl#5ʃt>=t <o^5:~[Yn$fFrF$'rq?Nx/~ce׼Cua8M#u+mO;GgKDGƐJե{G{'ڞ\+(M`=kǺG8յ֒=%_iSے}ھn??!|9[x6>{ynXcŰk((S^2%xƿhaOEmq};l;~\<]D'x{WwZ B~ wk@EyW.O <]D'x{+x:ǂ`>+W-g}9K>o a `Hg*e o*Hd``Z^brP.9*wڇ+%ۯdq?܍*y[ϳUBU1IfqvjVqm{omu՞Ɵ|<n4?xWJ[aӒ7E1 WhxЕ(ǹޝ}oey2ovwE"3dRsk~.u)熴5#GJKI,@UP j"*(Q[Vt\ͧ{%oz+(}[Vnk6#mx-3{ >nF*S]24 䲊D+6Pʹ;wx8884MW7SC Wp&DNS>v:z' _[/awyH6V#;SG ȝSW[:Z_]ynj^N]eȍSV\h:Xy*rON^'kj\ nS,Ǖ+1=gr@Hky1HYɔ|WhfSL񶅬m;?[qOQVd4I.7˰,0݀ӊÞ$2ZzeaT1@4Q\΍/oZɢj 劏-5PTed,UMqaee;G^^qr=$cM}jֱ 2Lr@%9@QEQESXj,l40De)&c#3N:YIn{k{V'ˍ ˵cN3@Q@yW-$H_#? CPEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_O5!VXbf3Wg_^m(mo{kZEZjl $`8oxzWIm^1~tr H-Q#Bib3ϴQ@8[~6z.Kÿ'xR/kw ӴmN;e|ـX(=kgN4? "׌[/|[m C[0Dc-MT(m~p8l +?LՌ6[JfPBL@:dBܝ ((8{$k5ċt"  ]}Т((gۤ֐^Ep\F*$NnGDu=C(# ^%e/\|e%O nԾW/"i+IFAP̃5n*r$\v vM&&NDze5KnS5zfݣKkze Ti,7e æ@Uah4(}'YieǠlk9)٭S[V*]XҼ9EKqw5Ml)Rw3eYeG ֣uw]E;$)V"dFEć7!>\}xwm_d|%GWcWöokXLȻ$@pZ&1Aeu\E3s])4ڳi3I]6̦iOhMVf_~qv{U|/Lh֤cZ̧ʊVT/1D$:p6kB(U~Z}|7;-:V+?SLֳ\HLa JLK/9؀ (35i%kkum!%yU9sx]RxA*5ͩ,s.: nڭ7v,zb ѧ>Oۼϟ/ݳ\]8ܤ&h~;96烈2أ)5+09 #m_o?aMῇ;񮳣V5: 2%F6qr9{9,KGJ,l&!{͞}*dUMFNU8q@mXɬ|d3Ykʿk5&k?C5t^ -ܷ^'|/u.<ɴ]FNS@'m._L{[LRi 0͐O< kC+OYGzbYٵ,HqC j]p2/bOiR]Zfr!h w\a xEWεw١w}gnyLx=EikjeZJ'`@ !qlr9Sf[<-Z9 *rM;%}rkOi'I3;1Q` QK*+K[T,Q=+@I+d&tgNi+SٵNTs?>%WV~údpu(y[j 'bz*6F]m%W7 hq 9r+|S?bLý+Be( Ѳ6;aAoeCVNV&ӌZyZ)'vEIrFSo7W ?c5O4+ RӲHc Z=c[v } Tm5? -_iTe!4CʘyYZ2Lҟ$|񏍾|wc3Z E.#i*M}%Sfx>o>t`NUhVDm{s?}⟆_uO7ձYOķ7'̓ q,i6,1[Ӓ>KsZ2b]F>i(v~Q^Eƻ.Gx#]&:-&m15׵P2[ <2#t;/ hZUmD -wRqщB-s FJq\Zϣ-I=}_T5jƚX[WlP2*)eVQhw~]iMgv"bxoWCQ[J)E=J/滠Rٗ$,ԠӞ.!FDE"U2d@~ω| |q~#ivW cq^_,J Wh0Xɒ87$5V~Nj=xOk=֡xkZ||0"d qIgFEo<ºe X[iYceV7:F#.HoƧ8*nu! #TS(I(M&ʭΫ^OMj}Ep&ig%Ƈp%*pq%#x5׶޻X3(K0n.$0s|\:+ةKVmԮ#01G'm._L{[LRi 0͐O< &cܩIAAWtGt~8jg65ijrtvu/hTVY{xV V'#MhQTF]m%W7 hq 9Ѵ{'[e{)jͺD||8 _#? CW*[KW,S=-BA.3d?O67g?|l?~}ߗQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UXɬ|d3Ykʿk5&k?C5zQEQEg@kDIXɈLiV<{U]|o+;-qV((NHI]Mo#]08 ;2 _`t*ڼO>O~wſg^1(Q@W-.K/E7گm!DM!sP0y+su74MC]hvpAyYKyLR0ɏ1FG~D&OSKiku5Zb$2l]#MKhmO8dIIj϶w)|07l;sgVJ4VnW۽V]q[[+CyO;_eݢkw3r6),Nl43ßy]jDƗk-& E $?7Ož&ZK֮#ONH(Is7M8؈y~< LU*FQTӼ|]n:xW^gxTZF|5ҼMSzwv5iVRbir#`);12EIe<8x/-/ Ƴ[yK` 'v2v5t7=?⦃_[Mu_.佅8v|:sg oo֩eZx-iB='Q7Byq筹2DEӳFdONYQFrkGz1UR.prYJ*MNZ[vj?l/xß |-@_jV`Zڵ#˸iHms(.F>x3ᯈ]cͯR5;/Z_xsTu a ig攍$ȆCl5eŤ_\|}75xjMZπşc{oEZ77-V8LLӼo!>QVex eU.?z|5YԣucvEϖӤ#E_a$!_ұYpӊjevvrg(K4i9;o5eZiYt/g~X.K(Cy \[_\g8a_Po#|=σx DѾ>)V}OšjzR%2ܢȒ4) Ž8mꏂ-NJ_&CӠCuc.عC7J Dlck!c#rmnHmmqڅ!*˂>[G( 3jehz. /FIh:Z%Kh14|* "{3EK;y+FgoTQEUUQ>Oۼϟ/ݳg߻yx9ݞb ( [I֑c!ӫkʿio'ZG~ԇNU(((((((((((((((((Tu)CZ "&Dzoo#Gqu.^$d~L)8\6kdN-AHP<Mc'^^UXɬ|d3Yh((?LՌ6[JfPBL@:dBܝ \k-~Km6gMUFɵnx+yt 26nugw(aYp=fEc VeYy.hU;eޥ327#ݮy?3ؚEP\#c휮[0=H0z^:+z>,2Tdz>]Y 1-mf[XV!Mj8$`ȭ 3>bz#-{?xuxj:]n_ZA{Mqȫ,R,8 +o/N>+v>?k(m5 jRXh[fIa>'R4^*_Yeifdvy9l<;~4x>k໹ g"NKfPBa 2nT[w/*\1RºO )^5$̣.fN5%Vhw~lywcٓZ k>'π<*[IY#ClИ[hPf]yN#xo+7}wnymx2!u{ig|ҚmIZB4SB[| J}; 5I7z_ZbB6(=WP">$|V?^ϢX/MFk4+gF$22/v"8ap8ږ{S =J=%%W+^J:ɧMQKG~| qFu]KkEh21uts(G.a}SďZgcBZt=L|1w[NZJfYf ywlx/O =ΈEt6"o& h[,U}J_XȌ>%/|W6wZO<[jM\X/K|嬪r/ҮJ4q{M5T;|ITSV-Gj ڧmv"?h =W@׊GJůCEI/l*KYA5_|9>~t__iq9-#K{;wL"$l&1S$I8^DQӍ5R7,d۔TdNMʢUf=6O{ŏ:xC$%č6u.52,@e1ǍdkoxGI_5jo'<9r|-jእ!"óHBpe h/SK0 pl W2 cbBe,=k_hA[~7Ÿ2O-AmVYv`V0l|#?(zSVz^*D.QXV PH+ y2w#Ufg鶚~iIb8@TDE* (k5&k?C5t^ Ҿ!X-GuS.=ws WF0z?k?LjZϒ T]*^YJMh## r>^0llC+O|3?{~mv Io\vvщdH>k$F9$T[yGF(|`d=!EQ4rVb!#U.hP}_~cOgoݍnݪpj^ͮPn$[G $y9T_4lc,ÃEShnm:j m| l㌞N H'˳9[6gp%.v|)1ć ;^"kk!g&RQ9]r$T[yGF(|`u·>V<$f~ێ6yڬQ@KU{6YAm$Q|Q%'ń6WV4fټŖ W %(&H{oQ6׵ގdl6# ;j-@=kb]nx13c98;#gVںv8aC ڗ0`FWrY t 1nkXWW&Mk `ɤuMAtD5FAyeX&Yy¬j+ -+5?}j~ {;V:}rC#U໹yYO1)W4 xSӭCYV{Q)o b;mF#ZX_/>_kN#S[s"y%ھ[F /ezss+sOF\m&ve6A~ _k Lt(G<Ȑ}dG52a[E NŝBPn1{V*f{u %:[yR))&|3jo[ <3 OݤQ፵b,(G>ur(QH_lt/?(YGa ?kO ~!~'hڦ^ VӒ"L"uB6MwK*bP'ÿß-E&F!- ;Q/,3ma.$\R*$}WF29(4懱sm>n?c:?߁>#xúe_e(ݝ俟$t[F"Dn5lgq<9p2PC.CO7~OQ4]]COynV-(&>&4?ǯUNEtՒ;71{#^E%1!ff/ϲjjq"]̱X<,' SjSs9ﶮIP]|mXobm<A1h[Iix泓̒EiUۉ% 8/| G*oGze+۱ѥstq5Ov ;}+/}/? ~=x;WbIFm>墿W1n8m1Yt]N KH4 huq^;k59bnY[l?K SSZ^ΌNuyUsRڥ ZN x[w:[jW Z͢=J9̋YT9y$G]g^tL0X趺cQavDv425@i-ik=B{t #3UrN A.=֭k$ɰmw$X958O 9V.g}ޯWN1nKvyUş|G'x᎛>]Γ8Qfrމm=e-@=kb]nx13c98;#G$T[yGF(|`Q\EqEzˤ]CC?3J?g?_ߛ=篠+ʿio'ZG~ԇNU((((((((((((((jK~3yZƗ{ۧmO^3 ϳ8]- :ciW{oiPܫ0DYwb$ 5/u:WkiwⅽK*|Z Jdq`T ?>;jkkzbb6 m2QDO?A;>,|4o O#;isph7^8G^Yk3I(!g& 2y]WrNQE^^u'?isُ߳b8{$k5ċt"  ]}Т(;}u_?3P) ׶O7MCZQVX8j϶w)|07l;sgT:&YǴ-K!U}I}A>@kUEkp6I <Т>|Q>.xvZmu[KK}FLt4٬e29 *T<(dGE4*ΔF--&&kWW <nl@$ծ|]o j'$E=wey>[U7&~V~uo x~N}KA6'ھg"y'[M˅ڇG߃cXּ+7QI5mCFF\B[/'p|)K < hwwxSS8@mn rKMb&~!|!?? xH_`kƱئgok |,\_gI,l7gkʩ- 5ww[uljf#N}ÿAcJ|'x\[[>_?PFaj,$ȯose~@ޓ 5wo`)wi>sX iV1$hw)>z54 zi'Ʃ$[ٶ(Q_|?/_JxO_+xoDCy'H#79,U,I8_?~ko~""Ij>^|؉!ʲD:)_KEPk_xO>9ע[)2܄0!MN-.M 4W|72m ?1S6>'7yky{ݿv9|@(;7$҈ݞ.HI#H+ިX[h4X%s? ϴd4X5֠.UAR~$U.~]p$3P;R XSKKxC)-: LBOTx_2h}y>W8ٍcw^=N-f:MI47g| 7m+?)cNnj 4LMkA8&^FrCF+>}'94Z9:;Y%́\daԢRaW8ٍcwbϏS{KYxM(DJX8}2>兺EW;c<|FO\s@е}cr+")۹.GE8<75hϤXަ^ƪpvx+otmtrL=N}-cQ┉ p'_Ú_xJCDDHT?vw 6 +]ãOд[-*ƥ.UڮFAYvzu4,ZřtnUdr>l˜!u>%. }o>tYp8XoݏL_i񎛣k? 3olil! Am6FrUP_Rahb2ʏ*dړUx6&N-j21rjkt~#A:×Mr Eg"DyC7#. 9\F!_!E8|];U$h[)!. rWqV ox[φoFZΥKԭ''h`o m$L}3=>E–Eb;dI<|G\s^f>Y5M>N+NϬRow\RKGsÓx O3z7|T7ӭO"iJr~jG8,+d@Z<//x&x7%kد~%-FXmi,Cs `F3`e4Rcf6o3j̹Z"iǙK1zaФxBm ]X[ܸI%J̲K\ []sƯl<)O+ M:AU-v\KI`|I(fFfHiϳ<.IvT 'yAIE65VY'g}'9 U5NrKHŢű |$>M#9Rava(mzZtĒiDon$or$W~RǑP4(m}2>兺EW;c<|FO\sBLdOQpbb؅>|O&[I֑c!ӫdRal_1xw⷇sVD:xw/4o2:j$Vgm`o8h0m7OGx~ߧiZMX`,!+,# E}5_1>!|sԵ]g W+kc<_v] ~r]7A7U5}9@Q@>뿱5SY(𮷩gU]F.;;fEuBzJT"P@<Xbf3Wו~?k?LjZ(($ua -҉?.ҭyvB}λGVwy{;[{PEPY%&Fa qwe%(U{y֟g|4/ccf?~μcw|P( ( ^/,m{ 闲rQA*N@赏{<;2\K("!F_*ܭ%9R3~vQ^&';ƺ?m<76?g#`RU1<8RU~%oxrk]Űlyc zs"mG?@W ^xOVਢtJ&GFx>_ľz(C@!1kT|vOƓԭ$۴pC<2(qwFҡIc(Wͨ>ܹEIj6+]鳐< Ş"Ɲ?jxGMe;]X,/,"R#\F 6IpL tkZ%hA|CWek(9c>c,ŞSK۽;QOm.Y"'Re`H H5___ |+/W}Zkh@3Md%1DX-cS$iI8%'xJ*wVD|y]{D0kz~3q{#E&d%p yגAOx6/ AacZ̶ֳj0%ǓLj891[UWW& w <1w0-5 e6Y-&;#\ d8(y֟g|4/ccf?~μcw|Vyk ר*rJ֩KrŨ7tu v^nmZAa–֖qA(TDE*  MC]>$c0x;~qyO<@x2ۉw t{ho,E7i$M4i3iEIY7Poq.bԺ[Eߓ  9 +Oo/爅_7inbi]̲fbq '*uVRrzVѫnކӘ(Š( $S=еƅ1CHקЪ ?a۟3nyn̙r8kR<^ ŰRCs V7r\"1Փ Qhxc.<%o?n]/̘NY1l(0+m+xw;Kf@,v2K^q1)Q|]W*r_ )zKVwVJY)_㟅=|@HOb]Y#:hx6mݰoHeLKn{fn$@Awv^s˯M/Z&&iVin1XLQ@+ p#/V2ioRhT?<qMVwsЌN)FbvZ+)6{(~fvyn\d~uMMT<^nyw[O*cG)۞Ǧ|R? _<-n Ni)仉V` LaF0\rZ /xI%γcnK]2kiCBYRV]..5vx`B~mcb'#uR{?'<%s_MCHd-H<.3Aʳ$0&a6[i9)JVJowrַ-~ ++k:FOkDqm=Ofcª :^>;oN4]].M}Bx +5"j9HR(Z:^(>; ².u5 yk<*nkY?4$yE=jN`jh ׎9JxPI){~Vm^[š|MbQ^AQEp ~d6`|q<сy1ɻ<*F=U>!~-M.9U$$#t |Z־8xž95>UEiB4vrMI1Fݵ?uoĞ/xjok3{n؇` (P7c4~?k?LjZMc']> |=qw-ׄ K2mGw`2Ѣ?GgEg*[KW,S=-BA.3dgZh}>3vn851m\ cH^2.I*[KW,S=-BA.3d4(ֿn4?n򼏴c󝛺8隯-mSLK[ID$:.0NG<ЪwuK'%fPm\I8N9ć46޻X3(K0n.$0sg:Vƒ4wOXcm1`f5nQYx{J7q @&K ֿn4?n򼏴c󝛺8Eg*+K[T,Q=+@I+d&mOwvgPLa\(]I$`烊Ted,UMqaee;G^^q.:+ةKVmԮ#01eZu[x Q/bcxJJ V,9kC+OXMc)ex8t+"#>iO^x&kY$[0%`&P]x]@Q@Q@Wm'Rgϗ`nٞv88@kUEkp6I <Т((}BmO|2vۏ/;ڬV|5[Y@E9%㤋׌hPEPU~Z}|7;-:V+?SLֳ\HLa JLK/9؀ ( ( >Oۼϟ/ݳgv6㍻swvP|pj^ͮPn$[G $y9T_4lc,Ã#E+sl Pmؘo&C~ggdP.Pirb.>_Ņ/\d Mҥ4֎R80h.G#ŷڼ뿴y>O>gws?ſN1jWu·>V<$f~ێ6yګ--U,eEpGEIF>b8?/8P6P/zV#۱16L8YMCÂ}M >{Cy/GB  ^r9ܪ?j>>iO^x AKK5iIqa]|]2G _~cOgoݍnݪWkINU%0HjJuv&&ɐ=jMb(E ?v32:^xVjyFWVŠ*LdܮIlIьj϶w)|07l;sgPC|y>I<mۜW TZZY ċh$'*撍|Řp~^p4( m^ͰGP-Abbm qօPdZآ)@[2 gN8W(}M^(xNb\^]7;b@s>Qv6]ho'>gv6㍻swv>6'>Ry[sy}mǗsV(>85QijyfK(7-nwy{1[u _~cOgoݍnݪpj^ͮPn$[G $y9T_4lc,ÃEShnm:j m| l㌞,Z{"6H݁c>grpwGZEgm./,&FrǑuAv~`9/5=]?LPv1yR\FcVWW{VWm'Rgϗ`nٞv88 KU{6YAm$Q|Q^ͰGP-Abbm q֮Q@-@=kb]nx13c98;#G$T[yGF(|`Q@o>/ۨoXOhd.UmFNG؎ TZZY ċh$'*撍|Řp~^p,'ڿ&O+n|3/wms=Shnm:j m| l㌞,Z{"6H݁c>grpwGZEgm./,&FrǑuAv~`9/>Ki8.w  (GCp߶~o/_*i9OR:=V((((((((((((((((((*>2ؙ _O5!V ( (3KXk5ti%,O+*QЪv,uK'bUPmlrI9~yăr ( t5-d?(.<.yu#B3-֞-AISs ( ( pEikk5"I lQ$EhU={ԜkUns\((>㭬tm`tr yvrE4*LWSz ",3!=p?tq(+?SLֳ\HLa JLK/9؍ |̷Zx[Եr&U&yO F{@((+?%6k$)mG yTfg,YSRsecUU;G^nqr(( #k%ѵ=ȁڊsKIЪq3^MH ;̄xSW((*i9OR:Vu?HtZ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (;ğ|?Oi~[mWR^.G!|˨`xbu0ͅ Oo/lKח 8,=L5sk^49 x{xվN8 vtV|vW&;U`@ MμANx5ch}lwnۜcbϏ\Gx#BS It)0"mV{)s5&-e!]߻;q!蛈Mr;KS L\ e&^G̠<>Ƕo;y1cfsqEgǮ[Iikr#!Ek)$܋R6 ͚ݝtM:@*Ei 5lh+ ӎ8ag@9RP÷^+/B|+oym6cQƷYvp U {tUG=yW/nq37gssUxi--nDw;D(e0pđBx?3:(Bڬ*R6jLZCvvC7x d.sxͬ( n#8=i'PX$h` ˺SLG\'gޜt5r0Ryb9>; $h/p"1f>y^v!z?∼W-GKχGfGz>,R $DMć=og]ÿ+ÑIZ-r]Y$2tMc'^^UXɬ|d3Yh((ڼ뿴y>O>gws?ſN1jgkyLJYɈLWhU{@Q@WWi'O|66c7wXN8I3Zq"1H+2,_b4((*oy?n>|3v9yXGZXڭB+[DH`0IPQ@Q@_o~'>g߻yx9ݞb:̗FL"j)7).O$^cB ( s:O柴llo׌nYp=fEc VeYy.hQEQEU}?_n~/|~fnsY 1-mf[XV!Mj8$`Ƞ ( (+ڿ&O+n|3/wms=g_u..D.SnR\:HxƅQE_#? CWו~N'@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~?k?LjZMc'^@Q@Q@YP z@NĪ)?vr`*SV[@Z8+*r^׋KSS=¢iiƀ8Mc'^Y>, >~ۢSicGA*MC.UʐFx   @ÏNU??G3O/?:=Vf_u>8!|!hZzu+[OF >_ss'\Z]asy,?@s("HE]qFNtPf_uz_>8!?|#AqCV>,.u41hW2yr||.Lc'2G%  @ÏN ]\XLnl1FHɾ1Yp#A +ʿ|#AqC4G?h*i 'Q  @ÏNU_g|u$ iΏgڝL1K HvG3\3O/?:i? *L.qiP/E "HUPP((*i 'Q  @ÏNU??G3O/?::?V7 oMg(kϙ]c<㨯S:ƧߎR+iH첣M)U'cqͿf_uz_>8!?|#AqCV>,.u41hW2yr||.Lc'2G%  @ÏN ]\XLnl1FHɾ1Yp#A +ʿ|#AqC4G?h*i 'Q  @ÏNU_g|u$ iΏgڝL1K HvG3\3O/?:i? *L.qiP/E "HUPP((*i 'Q  @ÏNU??G3O/?::?V7 oMg(kϙ]c<㨯S:ƧߎR+iH첣M)U'cqͿf_uz_>8!?|#AqC_#? CQ  @ÏN?foommOw}<.xcGԌ=V(((((((((((((((((*XUm/suyw* "y؀ ,HM[N~'h;/[n&Jh>Ӣ(?lxB2&.jA}g}߻t:+ׂ0|~1D%u[>'h;AH+`f`$M8d_TGH5f$Kȱu*c09hQ@~Qj~/6]6YwVpYaeƼ?kz~e[xjd[t fw)*kGLdp`h+'Uyd2J۝,{QEQ^7o鿴oxw/?յSVv3F< |a.GtPw>}=ժ>SRvf |Q@Q@|7x5-N?ExN$w$`ȵCXDv {pw|0D7k/\(I}"PUv’nZ:j( (<|}?,jN/ꫫh΢((-x+WO]GUv.m`DcE1%N?Ot{oQhD'R88.QEQE|c^uH8gև~ 𞆓\Q]X]eo١XC p睻@>΢h~]| nF-߆e&Mޛ@b,d>cf,FQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES]Tdu0 CN<{u:/xk^(滷2YpA1fRTpFqώMgĻ'f^|-罤pnI%U䑤#h 5PEPP}?h<_hק=sEgO/,k_C{orΛJOjJ͕VFu8##8՞ݟ|/pu8lm,"&OsEQEEqk @rE 3yfo6NJ -f_kĚAcl ]s^Ex[7\l|9^ ݉H|!a>\ˍ7%((h_Uφ7w[–jWRpd_8FbX)!1_~V9O@53uy'nF=(((7⎙|9 |#o;:ƙNf0 Rr8s'D<;XiZ|B xm;#E ϠU((~"ת~ڷm#Oi.0hq$qEnѬX-PE}mEq /o64־FKNo1EQEp> G$z2k{a[LPuX;Y^ב`QG|F}V=1t($.wqXnڳHVpL4;|_J@Q@Q@]~4_~$/oB650W/}$Ԭ]?JHr("d8QZPEP^gǎO-K%=-.-qpxYsP~u au[m_&Z+De/İB($q](((((((((((((((((((((((((((5s4 Ń⇈V!-E-> Χf&:澨_G:/o|Cе}? \efuf}E|k|_<-?a:eEgP$Wfr{?g[M']'qͩiW6iǨMK{aš|W <݌PQ_6;y_gNpK=\} 8˔_-of_[w͵|?&_AЮ r4#HidlYQN(+G|CxW᧋5o'm}B$0}#+*JιQ3? T|}⟂>A_bîg˩Gj6 ?6ʀm 򤃀2E>$)h'ՕTtjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|kxh |XNjv~%ҭKkpJl0nW3~5XxV_]>[kfݭ[\ yf8i RFF=PG<ɡ|&w\Fwu [+Ȇy'I0۩g3ǝ+z?ÉMZBjvԛ| N"!H m9.y?_ mZݠ)y w42\Fѱڧ+GkյO66v<٥5(0$H+о C_KLg V]Bv$[̆ȱ0 _~8>~ɾ|\ M1y{lvݼ9ڲ|U~FԚln,{) mI9V SL_򾝮[ >Ie6f[I^Y?y+3^GnX((((((((((((((((gnss-sdr-0.0.6/src/utils/gnuplot/8_GPS_GNSS_SDR_solutions.txt0000644000175000017500000113212612576764164023332 0ustar carlescarles time X [m] Y [m] Z [m] Long [deg] Lat [deg] h [m] E(Acc) [m] N(Acc) [m] Up(Acc) [m] E(Pre) [m] N(Pre) [m] Up(Pre) [m] Tot Sat Gal GPS GDOP 1999-Aug-27 09:09:17 4171696.06632 872121.00018 4730014.78492 11.80800 48.17152 534.75093 -0.05841 2.17880 10.16027 0.50199 0.85511 -0.63258 8 0 8 2.00 1999-Aug-27 09:09:17 4171695.88605 872119.68584 4730014.82036 11.80799 48.17152 534.48029 -1.30804 2.53433 9.88964 -0.74764 1.21065 -0.90322 8 0 8 2.00 1999-Aug-27 09:09:18 4171696.40670 872119.79288 4730014.34609 11.80799 48.17151 534.48137 -1.30981 1.82197 9.89072 -0.74941 0.49829 -0.90214 8 0 8 2.00 1999-Aug-27 09:09:18 4171698.20885 872120.51947 4730014.34802 11.80799 48.17150 535.75840 -0.96738 0.39802 11.16774 -0.40698 -0.92567 0.37488 8 0 8 2.00 1999-Aug-27 09:09:18 4171702.27793 872120.49428 4730015.18457 11.80798 48.17148 539.03457 -1.82470 -2.00813 14.44391 -1.26430 -3.33182 3.65105 8 0 8 2.00 1999-Aug-27 09:09:18 4171699.74782 872120.39698 4730014.70421 11.80799 48.17149 537.01172 -1.40220 -0.46825 12.42107 -0.84180 -1.79194 1.62821 8 0 8 2.00 1999-Aug-27 09:09:18 4171699.15761 872121.32123 4730014.44286 11.80800 48.17149 536.55782 -0.37673 -0.35299 11.96717 0.18367 -1.67667 1.17431 8 0 8 2.00 1999-Aug-27 09:09:18 4171695.94636 872120.49857 4730012.84683 11.80800 48.17151 533.16001 -0.52485 1.05026 8.56935 0.03555 -0.27343 -2.22350 8 0 8 2.00 1999-Aug-27 09:09:18 4171695.25129 872119.76318 4730014.45124 11.80799 48.17152 533.80143 -1.10245 2.73935 9.21077 -0.54205 1.41567 -1.58208 8 0 8 2.00 1999-Aug-27 09:09:18 4171695.16469 872121.05173 4730014.78341 11.80801 48.17152 534.16826 0.17655 2.82756 9.57760 0.73695 1.50387 -1.21525 8 0 8 2.00 1999-Aug-27 09:09:18 4171696.64867 872121.19256 4730016.40527 11.80801 48.17152 536.36473 0.01073 2.80533 11.77407 0.57113 1.48165 0.98122 8 0 8 2.00 1999-Aug-27 09:09:18 4171692.76552 872120.73763 4730014.38277 11.80801 48.17154 532.26070 0.36005 4.35816 7.67005 0.92045 3.03448 -3.12281 8 0 8 2.00 1999-Aug-27 09:09:18 4171695.49138 872121.53628 4730018.18595 11.80801 48.17154 536.98304 0.58400 4.78456 12.39238 1.14439 3.46088 1.59952 8 0 8 2.00 1999-Aug-27 09:09:18 4171696.93316 872121.12598 4730017.43636 11.80800 48.17153 537.30967 -0.11265 3.29562 12.71901 0.44775 1.97193 1.92616 8 0 8 2.00 1999-Aug-27 09:09:18 4171697.35095 872121.67098 4730018.84384 11.80801 48.17153 538.70555 0.33532 3.84645 14.11490 0.89572 2.52276 3.32204 8 0 8 2.00 1999-Aug-27 09:09:18 4171698.89293 872121.22674 4730019.31976 11.80800 48.17153 540.00615 -0.41506 3.10689 15.41549 0.14534 1.78320 4.62263 8 0 8 2.00 1999-Aug-27 09:09:18 4171699.15121 872121.54749 4730016.54754 11.80800 48.17151 538.15281 -0.15395 1.02080 13.56216 0.40645 -0.30289 2.76930 8 0 8 2.00 1999-Aug-27 09:09:18 4171694.90892 872119.71605 4730013.67957 11.80799 48.17152 532.99650 -1.07852 2.48162 8.40584 -0.51812 1.15794 -2.38701 8 0 8 2.00 1999-Aug-27 09:09:18 4171692.41588 872119.13610 4730013.11721 11.80799 48.17153 530.87088 -1.13603 4.01338 6.28022 -0.57564 2.68970 -4.51264 8 0 8 2.00 1999-Aug-27 09:09:18 4171699.63356 872120.55401 4730014.57715 11.80799 48.17149 536.86388 -1.22511 -0.49359 12.27323 -0.66471 -1.81728 1.48037 8 0 8 2.00 1999-Aug-27 09:09:18 4171700.85643 872120.06378 4730014.86843 11.80798 48.17149 537.81230 -1.95520 -1.11652 13.22165 -1.39481 -2.44020 2.42879 8 0 8 2.00 1999-Aug-27 09:09:18 4171701.89475 872121.33150 4730013.76763 11.80799 48.17147 537.84287 -0.92679 -2.80127 13.25221 -0.36639 -4.12496 2.45935 8 0 8 2.00 1999-Aug-27 09:09:18 4171700.18412 872122.62597 4730012.58046 11.80801 48.17147 536.01822 0.69034 -2.54268 11.42757 1.25074 -3.86637 0.63471 8 0 8 2.00 1999-Aug-27 09:09:18 4171697.57154 872120.46629 4730014.33879 11.80799 48.17151 535.32823 -0.88901 0.86481 10.73758 -0.32862 -0.45887 -0.05528 8 0 8 2.00 1999-Aug-27 09:09:18 4171700.00459 872121.36077 4730014.31739 11.80800 48.17149 537.02263 -0.51135 -1.06045 12.43197 0.04905 -2.38414 1.63911 8 0 8 2.00 1999-Aug-27 09:09:18 4171700.83364 872121.75541 4730014.81654 11.80800 48.17149 537.98962 -0.29471 -1.39244 13.39896 0.26568 -2.71613 2.60610 8 0 8 2.00 1999-Aug-27 09:09:18 4171691.05768 872120.37346 4730013.62547 11.80801 48.17154 530.53186 0.35307 5.15431 5.94120 0.91347 3.83062 -4.85166 8 0 8 2.00 1999-Aug-27 09:09:19 4171687.50657 872118.91940 4730009.49557 11.80800 48.17154 524.93791 -0.34355 5.21187 0.34725 0.21684 3.88819 -10.44560 8 0 8 2.00 1999-Aug-27 09:09:19 4171696.71721 872119.36081 4730014.10628 11.80798 48.17151 534.44641 -1.79628 1.50144 9.85576 -1.23588 0.17775 -0.93710 8 0 8 2.00 1999-Aug-27 09:09:19 4171696.31779 872118.42098 4730013.93628 11.80797 48.17151 533.93074 -2.63448 1.82270 9.34009 -2.07409 0.49901 -1.45277 8 0 8 2.00 1999-Aug-27 09:09:19 4171694.85857 872119.19354 4730014.00161 11.80798 48.17152 533.13229 -1.57967 2.81279 8.54163 -1.01927 1.48911 -2.25122 8 0 8 2.00 1999-Aug-27 09:09:19 4171696.32786 872120.53001 4730015.60726 11.80800 48.17152 535.47026 -0.57214 2.60815 10.87961 -0.01175 1.28447 0.08675 8 0 8 2.00 1999-Aug-27 09:09:19 4171695.06688 872120.80667 4730013.61388 11.80801 48.17152 533.19951 -0.04331 2.15630 8.60885 0.51709 0.83262 -2.18401 8 0 8 2.00 1999-Aug-27 09:09:19 4171697.29174 872119.77460 4730011.88774 11.80799 48.17149 533.22480 -1.50881 -0.46025 8.63414 -0.94842 -1.78393 -2.15871 8 0 8 2.00 1999-Aug-27 09:09:19 4171695.80482 872120.06301 4730012.41930 11.80799 48.17151 532.68960 -0.92223 0.93480 8.09895 -0.36184 -0.38889 -2.69391 8 0 8 2.00 1999-Aug-27 09:09:19 4171697.11970 872119.96889 4730013.32425 11.80799 48.17150 534.20942 -1.28343 0.59362 9.61877 -0.72304 -0.73007 -1.17409 8 0 8 2.00 1999-Aug-27 09:09:19 4171697.39820 872120.76331 4730013.51870 11.80800 48.17150 534.64452 -0.56281 0.39903 10.05387 -0.00241 -0.92465 -0.73899 8 0 8 2.00 1999-Aug-27 09:09:19 4171699.71186 872120.40542 4730015.27760 11.80799 48.17150 537.41665 -1.38658 -0.06091 12.82600 -0.82618 -1.38460 2.03314 8 0 8 2.00 1999-Aug-27 09:09:19 4171699.30564 872122.12980 4730014.83518 11.80801 48.17149 537.05714 0.38444 -0.32261 12.46649 0.94483 -1.64630 1.67363 8 0 8 2.00 1999-Aug-27 09:09:19 4171692.43846 872120.33396 4730012.61079 11.80801 48.17153 530.67173 0.03185 3.47653 6.08108 0.59224 2.15285 -4.71178 8 0 8 2.00 1999-Aug-27 09:09:19 4171693.21098 872121.69044 4730014.32957 11.80802 48.17153 532.64189 1.20155 3.85249 8.05123 1.76194 2.52881 -2.74162 8 0 8 2.00 1999-Aug-27 09:09:19 4171693.86721 872120.18962 4730014.45907 11.80800 48.17153 532.96195 -0.40181 3.68906 8.37129 0.15859 2.36538 -2.42157 8 0 8 2.00 1999-Aug-27 09:09:19 4171698.71781 872121.40717 4730017.22188 11.80800 48.17151 538.35323 -0.20261 1.80803 13.76257 0.35779 0.48434 2.96971 8 0 8 2.00 1999-Aug-27 09:09:19 4171699.98798 872122.00531 4730015.74601 11.80801 48.17150 538.16428 0.12295 -0.19387 13.57362 0.68335 -1.51756 2.78076 8 0 8 2.00 1999-Aug-27 09:09:19 4171702.23571 872124.12091 4730017.33868 11.80803 48.17149 541.10706 1.73383 -1.09374 16.51640 2.29422 -2.41743 5.72354 8 0 8 2.00 1999-Aug-27 09:09:19 4171703.66160 872123.93996 4730017.05561 11.80802 48.17148 541.80224 1.26492 -2.29494 17.21159 1.82532 -3.61863 6.41873 8 0 8 2.00 1999-Aug-27 09:09:19 4171700.17890 872122.19994 4730016.23255 11.80801 48.17150 538.67801 0.27440 -0.03833 14.08736 0.83480 -1.36202 3.29450 8 0 8 2.00 1999-Aug-27 09:09:19 4171697.52445 872121.64690 4730017.13141 11.80801 48.17152 537.53952 0.27625 2.58154 12.94886 0.83665 1.25786 2.15601 8 0 8 2.00 1999-Aug-27 09:09:19 4171694.37948 872120.48604 4730017.31347 11.80800 48.17154 535.46375 -0.21648 5.17383 10.87310 0.34392 3.85015 0.08024 8 0 8 2.00 1999-Aug-27 09:09:19 4171694.72972 872120.10541 4730015.28313 11.80800 48.17153 534.12754 -0.66073 3.62238 9.53688 -0.10034 2.29869 -1.25598 8 0 8 2.00 1999-Aug-27 09:09:19 4171698.19767 872120.41898 4730017.15531 11.80799 48.17152 537.82923 -1.06345 2.29369 13.23857 -0.50305 0.97000 2.44571 8 0 8 2.00 1999-Aug-27 09:09:19 4171698.26754 872119.74055 4730014.76840 11.80798 48.17150 536.00365 -1.74182 0.75434 11.41300 -1.18143 -0.56935 0.62014 8 0 8 2.00 1999-Aug-27 09:09:20 4171696.99939 872121.56118 4730012.25156 11.80801 48.17150 533.54887 0.29979 -0.27681 8.95822 0.86018 -1.60050 -1.83464 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.21647 872121.07300 4730009.54888 11.80801 48.17150 529.65169 0.39141 0.02501 5.06104 0.95181 -1.29868 -5.73182 8 0 8 2.00 1999-Aug-27 09:09:20 4171695.44362 872121.88269 4730012.56076 11.80802 48.17151 532.80755 0.93286 1.01512 8.21690 1.49325 -0.30857 -2.57596 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.83915 872119.52523 4730014.96864 11.80799 48.17153 533.88546 -1.25103 3.42129 9.29480 -0.69063 2.09761 -1.49805 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.83635 872120.68506 4730014.91086 11.80800 48.17153 533.99886 -0.11517 3.20795 9.40820 0.44523 1.88427 -1.38466 8 0 8 2.00 1999-Aug-27 09:09:20 4171695.79298 872121.03515 4730014.69556 11.80801 48.17152 534.51068 0.03176 2.31324 9.92002 0.59216 0.98955 -0.87283 8 0 8 2.00 1999-Aug-27 09:09:20 4171697.75683 872120.14324 4730014.16804 11.80799 48.17150 535.27786 -1.24315 0.66505 10.68721 -0.68275 -0.65863 -0.10565 8 0 8 2.00 1999-Aug-27 09:09:20 4171700.33516 872120.56118 4730015.29096 11.80799 48.17149 537.85475 -1.36166 -0.53037 13.26410 -0.80127 -1.85406 2.47124 8 0 8 2.00 1999-Aug-27 09:09:20 4171698.18473 872117.92565 4730013.18441 11.80796 48.17150 534.52161 -3.50137 0.03510 9.93096 -2.94097 -1.28858 -0.86190 8 0 8 2.00 1999-Aug-27 09:09:20 4171695.52019 872119.15720 4730014.94197 11.80798 48.17152 534.25993 -1.75063 2.96289 9.66928 -1.19023 1.63920 -1.12358 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.88506 872120.08880 4730014.02193 11.80800 48.17152 533.28690 -0.70877 2.67051 8.69625 -0.14838 1.34683 -2.09661 8 0 8 2.00 1999-Aug-27 09:09:20 4171693.82362 872120.37903 4730015.57385 11.80800 48.17154 533.79001 -0.20749 4.43542 9.19936 0.35291 3.11174 -1.59350 8 0 8 2.00 1999-Aug-27 09:09:20 4171693.83316 872119.22015 4730012.33073 11.80799 48.17152 531.22150 -1.34380 2.44232 6.63084 -0.78340 1.11864 -4.16201 8 0 8 2.00 1999-Aug-27 09:09:20 4171695.12240 872119.82948 4730012.90829 11.80799 48.17151 532.57663 -1.01118 1.79425 7.98597 -0.45078 0.47057 -2.80689 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.42510 872119.73886 4730013.51030 11.80799 48.17152 532.55765 -0.95718 2.71815 7.96699 -0.39679 1.39446 -2.82587 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.96146 872121.56456 4730012.63614 11.80802 48.17151 532.50555 0.72013 1.46557 7.91490 1.28052 0.14189 -2.87796 8 0 8 2.00 1999-Aug-27 09:09:20 4171697.88040 872121.63481 4730016.04733 11.80801 48.17151 536.96243 0.19158 1.60079 12.37178 0.75197 0.27711 1.57892 8 0 8 2.00 1999-Aug-27 09:09:20 4171700.17713 872123.03665 4730015.94819 11.80802 48.17149 538.57915 1.09376 -0.35426 13.98849 1.65416 -1.67795 3.19564 8 0 8 2.00 1999-Aug-27 09:09:20 4171699.17846 872122.03655 4730016.34697 11.80801 48.17150 538.08789 0.31919 0.79259 13.49724 0.87959 -0.53110 2.70438 8 0 8 2.00 1999-Aug-27 09:09:20 4171696.47075 872121.42370 4730014.25602 11.80801 48.17151 534.67863 0.27339 1.46651 10.08797 0.83378 0.14283 -0.70489 8 0 8 2.00 1999-Aug-27 09:09:20 4171693.84722 872120.90043 4730014.86401 11.80801 48.17153 533.34764 0.29806 3.86531 8.75699 0.85845 2.54163 -2.03587 8 0 8 2.00 1999-Aug-27 09:09:20 4171694.34839 872120.49578 4730014.82261 11.80800 48.17153 533.58873 -0.20059 3.53386 8.99808 0.35981 2.21018 -1.79478 8 0 8 2.00 1999-Aug-27 09:09:20 4171695.56278 872121.11545 4730015.15883 11.80801 48.17152 534.71657 0.15747 2.77786 10.12591 0.71787 1.45417 -0.66694 8 0 8 2.00 1999-Aug-27 09:09:20 4171688.86834 872119.94660 4730011.78669 11.80801 48.17155 527.67426 0.38325 5.58996 3.08361 0.94364 4.26627 -7.70925 8 0 8 2.00 1999-Aug-27 09:09:20 4171693.87341 872120.97816 4730013.78871 11.80801 48.17153 532.57410 0.36878 3.11724 7.98344 0.92918 1.79355 -2.80942 8 0 8 2.00 1999-Aug-27 09:09:21 4171692.49418 872120.61323 4730013.68775 11.80801 48.17153 531.54871 0.29381 4.11153 6.95805 0.85421 2.78785 -3.83480 8 0 8 2.00 1999-Aug-27 09:09:21 4171688.04342 872120.08485 4730011.73852 11.80801 48.17155 527.11874 0.68739 6.13843 2.52808 1.24778 4.81474 -8.26478 8 0 8 2.00 1999-Aug-27 09:09:21 4171690.26676 872119.77888 4730014.50173 11.80800 48.17156 530.58734 -0.06708 6.40623 5.99669 0.49332 5.08254 -4.79617 8 0 8 2.00 1999-Aug-27 09:09:21 4171694.50317 872122.32494 4730017.54632 11.80803 48.17154 535.96895 1.55819 4.95851 11.37829 2.11859 3.63482 0.58544 8 0 8 2.00 1999-Aug-27 09:09:21 4171692.79089 872120.98460 4730014.29909 11.80801 48.17154 532.24862 0.59660 4.24619 7.65797 1.15700 2.92251 -3.13489 8 0 8 2.00 1999-Aug-27 09:09:21 4171698.76090 872120.39522 4730016.70553 11.80799 48.17151 537.85850 -1.20196 1.58654 13.26785 -0.64156 0.26285 2.47499 8 0 8 2.00 1999-Aug-27 09:09:21 4171704.29728 872123.80645 4730017.80307 11.80802 48.17148 542.75595 1.00416 -2.23975 18.16530 1.56455 -3.56344 7.37244 8 0 8 2.00 1999-Aug-27 09:09:21 4171700.64259 872121.02241 4730014.97815 11.80799 48.17149 537.88529 -0.97311 -1.03355 13.29464 -0.41271 -2.35724 2.50178 8 0 8 2.00 1999-Aug-27 09:09:21 4171699.25135 872119.95723 4730013.41049 11.80798 48.17149 535.66361 -1.73104 -0.90187 11.07296 -1.17065 -2.22555 0.28010 8 0 8 2.00 1999-Aug-27 09:09:21 4171698.28300 872120.98618 4730012.00275 11.80800 48.17149 534.12293 -0.52571 -1.29130 9.53228 0.03468 -2.61499 -1.26058 8 0 8 2.00 1999-Aug-27 09:09:21 4171702.41054 872122.20164 4730014.76464 11.80800 48.17147 539.04123 -0.18061 -2.64525 14.45057 0.37979 -3.96893 3.65772 8 0 8 2.00 1999-Aug-27 09:09:21 4171700.92649 872119.24980 4730014.63659 11.80797 48.17149 537.57420 -2.76630 -1.19811 12.98354 -2.20590 -2.52180 2.19068 8 0 8 2.00 1999-Aug-27 09:09:21 4171700.93647 872120.16346 4730016.75805 11.80798 48.17150 539.28620 -1.87401 0.07010 14.69555 -1.31362 -1.25359 3.90269 8 0 8 2.00 1999-Aug-27 09:09:21 4171699.13405 872119.61011 4730016.43377 11.80798 48.17151 537.79244 -2.04682 1.25285 13.20179 -1.48642 -0.07084 2.40893 8 0 8 2.00 1999-Aug-27 09:09:21 4171698.23324 872120.78051 4730018.54953 11.80800 48.17153 538.94068 -0.71685 3.14243 14.35002 -0.15646 1.81874 3.55716 8 0 8 2.00 1999-Aug-27 09:09:21 4171698.42739 872119.73233 4730014.62931 11.80798 48.17150 536.00324 -1.78258 0.54624 11.41259 -1.22218 -0.77745 0.61973 8 0 8 2.00 1999-Aug-27 09:09:21 4171701.24371 872121.23133 4730018.80060 11.80799 48.17151 541.15449 -0.89161 1.04536 16.56383 -0.33121 -0.27833 5.77098 8 0 8 2.00 1999-Aug-27 09:09:21 4171700.03882 872122.95815 4730015.46396 11.80802 48.17149 538.11733 1.04523 -0.56435 13.52667 1.60563 -1.88804 2.73381 8 0 8 2.00 1999-Aug-27 09:09:21 4171697.74177 872121.47863 4730014.30574 11.80801 48.17150 535.55288 0.06707 0.56424 10.96223 0.62746 -0.75944 0.16937 8 0 8 2.00 1999-Aug-27 09:09:21 4171702.02315 872123.14743 4730015.99199 11.80802 48.17148 539.83197 0.82444 -1.68839 15.24132 1.38484 -3.01208 4.44846 8 0 8 2.00 1999-Aug-27 09:09:21 4171700.00113 872122.42775 4730015.48313 11.80801 48.17149 538.03462 0.53377 -0.44320 13.44397 1.09416 -1.76689 2.65111 8 0 8 2.00 1999-Aug-27 09:09:21 4171701.16441 872122.64495 4730018.18176 11.80801 48.17150 540.83451 0.50832 0.47494 16.24386 1.06872 -0.84874 5.45100 8 0 8 2.00 1999-Aug-27 09:09:21 4171697.28530 872121.05176 4730015.79983 11.80800 48.17152 536.30996 -0.25736 1.95869 11.71931 0.30304 0.63500 0.92645 8 0 8 2.00 1999-Aug-27 09:09:21 4171694.86685 872119.29764 4730013.91022 11.80799 48.17152 533.08380 -1.47947 2.72993 8.49315 -0.91907 1.40625 -2.29971 8 0 8 2.00 1999-Aug-27 09:09:21 4171693.51569 872119.52601 4730012.67172 11.80799 48.17152 531.31009 -0.97944 2.85465 6.71943 -0.41904 1.53096 -4.07343 8 0 8 2.00 1999-Aug-27 09:09:22 4171690.88592 872118.61848 4730013.90752 11.80799 48.17155 530.39040 -1.32963 5.73528 5.79974 -0.76923 4.41160 -4.99312 8 0 8 2.00 1999-Aug-27 09:09:22 4171692.52746 872119.09683 4730010.59881 11.80799 48.17152 529.06178 -1.19732 2.25845 4.47113 -0.63692 0.93477 -6.32173 8 0 8 2.00 1999-Aug-27 09:09:22 4171697.96983 872119.63185 4730016.19910 11.80798 48.17152 536.86055 -1.78730 1.94219 12.26990 -1.22691 0.61851 1.47704 8 0 8 2.00 1999-Aug-27 09:09:22 4171697.50798 872121.03459 4730016.00991 11.80800 48.17152 536.60952 -0.31974 1.93899 12.01887 0.24066 0.61531 1.22601 8 0 8 2.00 1999-Aug-27 09:09:22 4171694.63478 872119.17111 4730013.22461 11.80798 48.17152 532.40416 -1.55583 2.46125 7.81351 -0.99543 1.13757 -2.97935 8 0 8 2.00 1999-Aug-27 09:09:22 4171692.49931 872121.27124 4730014.45843 11.80802 48.17154 532.21613 0.93684 4.52143 7.62548 1.49724 3.19774 -3.16738 8 0 8 2.00 1999-Aug-27 09:09:22 4171696.61631 872121.17587 4730014.55722 11.80801 48.17151 534.96426 0.00102 1.59900 10.37361 0.56142 0.27532 -0.41925 8 0 8 2.00 1999-Aug-27 09:09:22 4171693.90220 872119.54058 4730010.59889 11.80799 48.17151 530.01982 -1.04427 1.18815 5.42917 -0.48387 -0.13554 -5.36369 8 0 8 2.00 1999-Aug-27 09:09:22 4171700.29891 872120.23397 4730014.91080 11.80798 48.17149 537.50316 -1.67453 -0.70757 12.91250 -1.11414 -2.03126 2.11964 8 0 8 2.00 1999-Aug-27 09:09:22 4171700.73872 872120.07867 4730017.23077 11.80798 48.17150 539.49778 -1.91654 0.54252 14.90713 -1.35614 -0.78117 4.11427 8 0 8 2.00 1999-Aug-27 09:09:22 4171695.39060 872119.68205 4730016.46018 11.80799 48.17153 535.37825 -1.21037 3.98988 10.78760 -0.64998 2.66620 -0.00526 8 0 8 2.00 1999-Aug-27 09:09:22 4171696.15920 872120.45485 4730016.73467 11.80800 48.17153 536.18998 -0.61120 3.49450 11.59933 -0.05081 2.17081 0.80647 8 0 8 2.00 1999-Aug-27 09:09:22 4171698.77574 872122.62338 4730016.30861 11.80802 48.17151 537.87650 0.97601 0.97126 13.28584 1.53641 -0.35243 2.49299 8 0 8 2.00 1999-Aug-27 09:09:22 4171696.06143 872121.09773 4730012.70430 11.80801 48.17150 533.21068 0.03809 0.77992 8.62003 0.59848 -0.54377 -2.17283 8 0 8 2.00 1999-Aug-27 09:09:22 4171698.80745 872123.16248 4730015.52177 11.80803 48.17150 537.38446 1.49721 0.34119 12.79381 2.05760 -0.98250 2.00095 8 0 8 2.00 1999-Aug-27 09:09:22 4171699.80683 872120.87722 4730013.81195 11.80799 48.17149 536.45092 -0.94420 -1.17957 11.86026 -0.38380 -2.50325 1.06740 8 0 8 2.00 1999-Aug-27 09:09:22 4171699.60136 872121.34962 4730012.32373 11.80800 48.17148 535.27231 -0.43975 -2.09423 10.68166 0.12065 -3.41792 -0.11120 8 0 8 2.00 1999-Aug-27 09:09:22 4171698.11557 872121.29054 4730015.23191 11.80800 48.17151 536.46136 -0.19353 0.93796 11.87070 0.36686 -0.38573 1.07785 8 0 8 2.00 1999-Aug-27 09:09:22 4171694.36863 872118.16382 4730013.70923 11.80797 48.17153 532.45407 -2.48734 3.13217 7.86341 -1.92695 1.80848 -2.92945 8 0 8 2.00 1999-Aug-27 09:09:22 4171695.40431 872120.65352 4730014.23353 11.80800 48.17152 533.86060 -0.26226 2.34679 9.26994 0.29813 1.02310 -1.52291 8 0 8 2.00 1999-Aug-27 09:09:22 4171695.10118 872120.16780 4730013.76995 11.80800 48.17152 533.25100 -0.67567 2.33278 8.66034 -0.11528 1.00910 -2.13251 8 0 8 2.00 1999-Aug-27 09:09:22 4171695.19665 872118.89598 4730012.49401 11.80798 48.17151 532.18899 -1.94012 1.60615 7.59834 -1.37972 0.28247 -3.19452 8 0 8 2.00 1999-Aug-27 09:09:22 4171697.01626 872120.78139 4730015.94960 11.80800 48.17152 536.20904 -0.46696 2.29603 11.61839 0.09344 0.97235 0.82553 8 0 8 2.00 1999-Aug-27 09:09:22 4171700.27502 872124.36651 4730017.07026 11.80804 48.17150 539.66064 2.37545 0.11987 15.06998 2.93585 -1.20381 4.27713 8 0 8 2.00 1999-Aug-27 09:09:22 4171701.59082 872125.47747 4730017.55732 11.80805 48.17149 541.03412 3.19364 -0.68442 16.44347 3.75404 -2.00810 5.65061 8 0 8 2.00 1999-Aug-27 09:09:23 4171701.74377 872123.61169 4730019.27097 11.80802 48.17150 542.15626 1.33605 0.63136 17.56561 1.89645 -0.69233 6.77275 8 0 8 2.00 1999-Aug-27 09:09:23 4171700.40382 872123.79576 4730017.35293 11.80803 48.17150 539.87746 1.79042 0.30147 15.28681 2.35082 -1.02222 4.49395 8 0 8 2.00 1999-Aug-27 09:09:23 4171703.87978 872122.47863 4730016.16442 11.80800 48.17147 541.08118 -0.21013 -2.82560 16.49052 0.35026 -4.14928 5.69766 8 0 8 2.00 1999-Aug-27 09:09:23 4171703.45808 872121.08026 4730017.96397 11.80799 48.17149 541.95598 -1.49262 -1.10466 17.36532 -0.93222 -2.42835 6.57246 8 0 8 2.00 1999-Aug-27 09:09:23 4171699.72388 872119.98180 4730016.06592 11.80798 48.17150 537.95410 -1.80369 0.52065 13.36344 -1.24329 -0.80304 2.57059 8 0 8 2.00 1999-Aug-27 09:09:23 4171698.59992 872121.33310 4730016.93166 11.80800 48.17151 538.04990 -0.25099 1.71176 13.45925 0.30941 0.38808 2.66639 8 0 8 2.00 1999-Aug-27 09:09:23 4171699.67899 872121.41363 4730016.82641 11.80800 48.17151 538.68688 -0.39298 0.84224 14.09623 0.16742 -0.48145 3.30337 8 0 8 2.00 1999-Aug-27 09:09:23 4171699.62290 872121.08301 4730015.76318 11.80800 48.17150 537.81288 -0.70512 0.22449 13.22223 -0.14473 -1.09920 2.42937 8 0 8 2.00 1999-Aug-27 09:09:23 4171701.67451 872120.80703 4730017.63286 11.80799 48.17150 540.50767 -1.39509 0.01707 15.91701 -0.83469 -1.30662 5.12415 8 0 8 2.00 1999-Aug-27 09:09:23 4171698.45889 872121.17270 4730015.58554 11.80800 48.17151 536.93290 -0.37913 0.94135 12.34224 0.18126 -0.38234 1.54938 8 0 8 2.00 1999-Aug-27 09:09:23 4171695.25417 872121.71540 4730013.26065 11.80802 48.17151 533.18257 0.80787 1.64556 8.59191 1.36826 0.32188 -2.20094 8 0 8 2.00 1999-Aug-27 09:09:23 4171692.27569 872119.24784 4730009.88592 11.80799 48.17152 528.38683 -0.99798 1.94364 3.79618 -0.43758 0.61995 -6.99668 8 0 8 2.00 1999-Aug-27 09:09:23 4171696.59465 872120.55718 4730009.69348 11.80800 48.17148 531.24150 -0.60015 -1.53450 6.65084 -0.03975 -2.85818 -4.14201 8 0 8 2.00 1999-Aug-27 09:09:23 4171693.87027 872119.94491 4730011.79914 11.80800 48.17152 530.94852 -0.64196 1.95023 6.35786 -0.08156 0.62655 -4.43499 8 0 8 2.00 1999-Aug-27 09:09:23 4171693.62076 872121.21537 4730013.03881 11.80801 48.17152 531.88275 0.65267 2.76523 7.29210 1.21307 1.44154 -3.50076 8 0 8 2.00 1999-Aug-27 09:09:23 4171697.10208 872120.62247 4730013.05306 11.80800 48.17150 534.08503 -0.64007 0.32595 9.49438 -0.07967 -0.99774 -1.29848 8 0 8 2.00 1999-Aug-27 09:09:23 4171697.20198 872122.82017 4730012.92004 11.80803 48.17150 534.35104 1.49068 -0.17073 9.76039 2.05107 -1.49442 -1.03247 8 0 8 2.00 1999-Aug-27 09:09:23 4171696.20403 872120.73201 4730014.99257 11.80800 48.17152 534.95895 -0.34908 2.25773 10.36830 0.21132 0.93405 -0.42456 8 0 8 2.00 1999-Aug-27 09:09:23 4171697.55230 872119.45140 4730016.34870 11.80798 48.17152 536.67484 -1.87850 2.37401 12.08418 -1.31810 1.05032 1.29133 8 0 8 2.00 1999-Aug-27 09:09:23 4171697.71616 872120.74176 4730013.67756 11.80800 48.17150 534.96751 -0.64897 0.27635 10.37686 -0.08857 -1.04734 -0.41600 8 0 8 2.00 1999-Aug-27 09:09:23 4171698.65261 872119.76049 4730014.52523 11.80798 48.17150 536.07655 -1.80110 0.30827 11.48589 -1.24071 -1.01542 0.69304 8 0 8 2.00 1999-Aug-27 09:09:23 4171700.77057 872121.23510 4730016.35719 11.80799 48.17150 539.02545 -0.79110 -0.23964 14.43479 -0.23070 -1.56332 3.64193 8 0 8 2.00 1999-Aug-27 09:09:23 4171698.88396 872119.69364 4730016.07676 11.80798 48.17151 537.37456 -1.91388 1.18444 12.78391 -1.35349 -0.13925 1.99105 8 0 8 2.00 1999-Aug-27 09:09:23 4171700.76840 872121.17525 4730016.74354 11.80799 48.17150 539.30375 -0.84924 0.02873 14.71310 -0.28884 -1.29496 3.92024 8 0 8 2.00 1999-Aug-27 09:09:23 4171700.63138 872121.42159 4730014.53158 11.80800 48.17149 537.59969 -0.58008 -1.38406 13.00904 -0.01968 -2.70774 2.21618 8 0 8 2.00 1999-Aug-27 09:09:24 4171702.35156 872120.64068 4730012.37503 11.80798 48.17146 537.00910 -1.69646 -3.95786 12.41844 -1.13606 -5.28154 1.62559 8 0 8 2.00 1999-Aug-27 09:09:24 4171699.91282 872119.01307 4730012.09608 11.80797 48.17148 534.98714 -2.79059 -2.11694 10.39648 -2.23020 -3.44063 -0.39637 8 0 8 2.00 1999-Aug-27 09:09:24 4171699.94506 872119.81074 4730012.63023 11.80798 48.17148 535.51505 -2.01639 -1.90586 10.92440 -1.45600 -3.22955 0.13154 8 0 8 2.00 1999-Aug-27 09:09:24 4171699.74207 872121.95179 4730014.54873 11.80801 48.17149 537.10430 0.12089 -0.80482 12.51364 0.68129 -2.12851 1.72079 8 0 8 2.00 1999-Aug-27 09:09:24 4171700.57314 872120.42580 4730014.39324 11.80798 48.17149 537.32270 -1.54287 -1.28200 12.73204 -0.98248 -2.60569 1.93918 8 0 8 2.00 1999-Aug-27 09:09:24 4171699.33310 872120.32239 4730014.09684 11.80799 48.17149 536.27823 -1.39034 -0.55944 11.68758 -0.82994 -1.88313 0.89472 8 0 8 2.00 1999-Aug-27 09:09:24 4171697.14398 872120.86363 4730014.82407 11.80800 48.17151 535.46495 -0.41259 1.43971 10.87430 0.14780 0.11603 0.08144 8 0 8 2.00 1999-Aug-27 09:09:24 4171699.48700 872120.47236 4730015.31533 11.80799 48.17150 537.30711 -1.27504 0.11805 12.71646 -0.71464 -1.20563 1.92360 8 0 8 2.00 1999-Aug-27 09:09:24 4171696.15722 872119.33904 4730012.33941 11.80798 48.17150 532.76131 -1.70300 0.73488 8.17066 -1.14260 -0.58881 -2.62220 8 0 8 2.00 1999-Aug-27 09:09:24 4171698.98685 872121.23890 4730014.84026 11.80800 48.17150 536.73124 -0.42238 0.04914 12.14059 0.13802 -1.27455 1.34773 8 0 8 2.00 1999-Aug-27 09:09:24 4171695.07266 872120.95475 4730015.36847 11.80801 48.17153 534.53090 0.10046 3.29965 9.94025 0.66086 1.97596 -0.85261 8 0 8 2.00 1999-Aug-27 09:09:24 4171698.78133 872121.41440 4730014.84369 11.80800 48.17150 536.62358 -0.20853 0.17457 12.03293 0.35187 -1.14911 1.24007 8 0 8 2.00 1999-Aug-27 09:09:24 4171697.30593 872121.39355 4730013.75679 11.80801 48.17150 534.84771 0.07297 0.52901 10.25706 0.63337 -0.79467 -0.53580 8 0 8 2.00 1999-Aug-27 09:09:24 4171697.12391 872121.11386 4730017.80195 11.80800 48.17153 537.70495 -0.16355 3.40215 13.11430 0.39685 2.07847 2.32144 8 0 8 2.00 1999-Aug-27 09:09:24 4171696.56955 872120.23107 4730016.81837 11.80799 48.17153 536.48968 -0.91422 3.28515 11.89903 -0.35382 1.96146 1.10617 8 0 8 2.00 1999-Aug-27 09:09:24 4171695.11351 872119.49595 4730017.40023 11.80799 48.17154 535.87245 -1.33583 4.84729 11.28179 -0.77543 3.52360 0.48893 8 0 8 2.00 1999-Aug-27 09:09:24 4171694.78969 872119.62586 4730014.84672 11.80799 48.17153 533.77606 -1.14240 3.36072 9.18540 -0.58200 2.03703 -1.60745 8 0 8 2.00 1999-Aug-27 09:09:24 4171700.33633 872120.75391 4730015.46899 11.80799 48.17149 538.01448 -1.17325 -0.44189 13.42382 -0.61285 -1.76557 2.63097 8 0 8 2.00 1999-Aug-27 09:09:24 4171697.01167 872121.58222 4730011.88278 11.80801 48.17149 533.28496 0.31787 -0.53492 8.69431 0.87827 -1.85860 -2.09855 8 0 8 2.00 1999-Aug-27 09:09:24 4171693.64754 872120.65812 4730011.90250 11.80801 48.17152 530.97747 0.10174 2.07286 6.38682 0.66213 0.74918 -4.40604 8 0 8 2.00 1999-Aug-27 09:09:24 4171692.26081 872120.67325 4730011.57983 11.80801 48.17152 529.83386 0.40032 2.86681 5.24321 0.96071 1.54313 -5.54965 8 0 8 2.00 1999-Aug-27 09:09:24 4171698.53981 872121.11428 4730015.80070 11.80800 48.17151 537.13807 -0.45288 1.03472 12.54742 0.10752 -0.28896 1.75456 8 0 8 2.00 1999-Aug-27 09:09:24 4171696.26879 872119.69321 4730015.05164 11.80799 48.17152 534.90348 -1.37915 2.40829 10.31283 -0.81876 1.08460 -0.48003 8 0 8 2.00 1999-Aug-27 09:09:24 4171694.69933 872118.71916 4730012.08588 11.80798 48.17151 531.53610 -2.01143 1.72366 6.94545 -1.45103 0.39998 -3.84741 8 0 8 2.00 1999-Aug-27 09:09:24 4171699.58368 872120.67641 4730013.31263 11.80799 48.17149 535.90577 -1.09509 -1.31918 11.31512 -0.53469 -2.64287 0.52226 8 0 8 2.00 1999-Aug-27 09:09:25 4171700.17170 872118.91897 4730014.17365 11.80797 48.17149 536.69138 -2.93567 -0.90588 12.10072 -2.37528 -2.22957 1.30786 8 0 8 2.00 1999-Aug-27 09:09:25 4171701.64183 872119.60517 4730013.82382 11.80797 48.17148 537.48403 -2.56483 -2.31610 12.89338 -2.00443 -3.63978 2.10052 8 0 8 2.00 1999-Aug-27 09:09:25 4171701.59558 872122.11899 4730016.02328 11.80800 48.17149 539.43582 -0.09474 -1.19885 14.84517 0.46566 -2.52253 4.05231 8 0 8 2.00 1999-Aug-27 09:09:25 4171703.61990 872121.01985 4730016.76083 11.80798 48.17148 541.15686 -1.58486 -2.01586 16.56621 -1.02447 -3.33954 5.77335 8 0 8 2.00 1999-Aug-27 09:09:25 4171701.09578 872121.60515 4730014.09368 11.80800 48.17148 537.60160 -0.49543 -2.04280 13.01094 0.06497 -3.36649 2.21808 8 0 8 2.00 1999-Aug-27 09:09:25 4171699.76782 872122.63650 4730016.47835 11.80802 48.17150 538.65239 0.78584 0.35887 14.06174 1.34623 -0.96482 3.26888 8 0 8 2.00 1999-Aug-27 09:09:25 4171694.37645 872120.50463 4730013.87324 11.80800 48.17152 532.90084 -0.19767 2.87892 8.31018 0.36273 1.55523 -2.48267 8 0 8 2.00 1999-Aug-27 09:09:25 4171690.96030 872118.32459 4730011.48687 11.80798 48.17153 528.59510 -1.63252 4.11150 4.00445 -1.07213 2.78782 -6.78841 8 0 8 2.00 1999-Aug-27 09:09:25 4171692.31018 872117.40922 4730011.46359 11.80797 48.17153 529.33403 -2.80474 3.25098 4.74337 -2.24435 1.92730 -6.04948 8 0 8 2.00 1999-Aug-27 09:09:25 4171695.52334 872118.85459 4730011.18502 11.80798 48.17150 531.42122 -2.04748 0.50122 6.83057 -1.48708 -0.82247 -3.96229 8 0 8 2.00 1999-Aug-27 09:09:25 4171696.07825 872121.17335 4730012.55148 11.80801 48.17150 533.11811 0.10865 0.65421 8.52745 0.66905 -0.66948 -2.26540 8 0 8 2.00 1999-Aug-27 09:09:25 4171693.49768 872120.90121 4730014.34574 11.80801 48.17153 532.73339 0.37035 3.77451 8.14273 0.93075 2.45083 -2.65013 8 0 8 2.00 1999-Aug-27 09:09:25 4171700.52163 872123.50052 4730019.02947 11.80803 48.17151 541.16334 1.47733 1.37866 16.57268 2.03772 0.05497 5.77982 8 0 8 2.00 1999-Aug-27 09:09:25 4171696.76605 872121.18363 4730015.45778 11.80801 48.17152 535.73412 -0.02203 2.08920 11.14347 0.53837 0.76551 0.35061 8 0 8 2.00 1999-Aug-27 09:09:25 4171693.76606 872119.32232 4730012.61168 11.80799 48.17152 531.40098 -1.23005 2.66305 6.81033 -0.66965 1.33937 -3.98253 8 0 8 2.00 1999-Aug-27 09:09:25 4171696.20759 872119.57829 4730013.34626 11.80799 48.17151 533.57709 -1.47911 1.33312 8.98644 -0.91872 0.00943 -1.80642 8 0 8 2.00 1999-Aug-27 09:09:25 4171697.28282 872122.01346 4730014.67278 11.80801 48.17151 535.59977 0.68449 1.06222 11.00912 1.24489 -0.26147 0.21626 8 0 8 2.00 1999-Aug-27 09:09:25 4171697.38868 872120.59481 4730014.87393 11.80800 48.17151 535.62516 -0.72580 1.33548 11.03451 -0.16540 0.01179 0.24165 8 0 8 2.00 1999-Aug-27 09:09:25 4171701.47703 872121.73941 4730015.89576 11.80800 48.17149 539.21161 -0.44202 -1.13954 14.62096 0.11837 -2.46322 3.82810 8 0 8 2.00 1999-Aug-27 09:09:25 4171698.56067 872121.95165 4730015.61104 11.80801 48.17150 537.12465 0.36251 0.76535 12.53399 0.92290 -0.55834 1.74113 8 0 8 2.00 1999-Aug-27 09:09:25 4171696.65831 872120.93186 4730015.95828 11.80800 48.17152 536.00237 -0.24642 2.53995 11.41171 0.31398 1.21627 0.61886 8 0 8 2.00 1999-Aug-27 09:09:25 4171698.12161 872120.99480 4730015.67877 11.80800 48.17151 536.75791 -0.48425 1.27665 12.16726 0.07614 -0.04704 1.37440 8 0 8 2.00 1999-Aug-27 09:09:25 4171699.22246 872122.04848 4730015.70174 11.80801 48.17150 537.63745 0.32186 0.32837 13.04680 0.88225 -0.99532 2.25394 8 0 8 2.00 1999-Aug-27 09:09:25 4171701.82105 872121.33286 4730013.71505 11.80799 48.17147 537.75576 -0.91038 -2.78278 13.16510 -0.34998 -4.10647 2.37224 8 0 8 2.00 1999-Aug-27 09:09:25 4171701.09452 872120.15846 4730011.31476 11.80798 48.17146 535.33265 -1.91125 -3.67456 10.74200 -1.35085 -4.99825 -0.05086 8 0 8 2.00 1999-Aug-27 09:09:26 4171699.31797 872121.96160 4730011.33167 11.80801 48.17147 534.43161 0.21727 -2.64246 9.84096 0.77767 -3.96615 -0.95190 8 0 8 2.00 1999-Aug-27 09:09:26 4171696.40654 872120.50838 4730010.91995 11.80800 48.17149 532.02594 -0.60942 -0.57192 7.43528 -0.04903 -1.89560 -3.35757 8 0 8 2.00 1999-Aug-27 09:09:26 4171697.43050 872120.78032 4730011.77655 11.80800 48.17149 533.36978 -0.55277 -0.78897 8.77913 0.00763 -2.11265 -2.01373 8 0 8 2.00 1999-Aug-27 09:09:26 4171694.44315 872121.78184 4730012.10140 11.80802 48.17151 531.79840 1.03887 1.45386 7.20774 1.59927 0.13018 -3.58511 8 0 8 2.00 1999-Aug-27 09:09:26 4171694.10709 872121.73487 4730015.54433 11.80802 48.17153 534.13810 1.06166 4.00224 9.54744 1.62205 2.67856 -1.24541 8 0 8 2.00 1999-Aug-27 09:09:26 4171695.71266 872121.88653 4730013.82285 11.80802 48.17151 533.92414 0.88156 1.65999 9.33349 1.44196 0.33631 -1.45937 8 0 8 2.00 1999-Aug-27 09:09:26 4171699.38466 872123.23049 4730016.78694 11.80803 48.17150 538.71327 1.44566 0.75356 14.12262 2.00606 -0.57013 3.32976 8 0 8 2.00 1999-Aug-27 09:09:26 4171704.47493 872124.91527 4730020.86486 11.80803 48.17149 545.30472 2.05316 -0.49648 20.71407 2.61356 -1.82017 9.92121 8 0 8 2.00 1999-Aug-27 09:09:26 4171700.20851 872122.02322 4730018.07017 11.80801 48.17151 540.04252 0.09536 1.19254 15.45186 0.65576 -0.13115 4.65900 8 0 8 2.00 1999-Aug-27 09:09:26 4171697.04585 872120.19022 4730015.12500 11.80799 48.17151 535.53323 -1.05167 1.81466 10.94257 -0.49127 0.49097 0.14972 8 0 8 2.00 1999-Aug-27 09:09:26 4171694.95298 872119.67251 4730012.73626 11.80799 48.17151 532.31642 -1.13015 1.82703 7.72577 -0.56976 0.50334 -3.06709 8 0 8 2.00 1999-Aug-27 09:09:26 4171698.15175 872120.05774 4730012.81519 11.80799 48.17149 534.51593 -1.40765 -0.51218 9.92528 -0.84725 -1.83586 -0.86758 8 0 8 2.00 1999-Aug-27 09:09:26 4171695.77711 872118.64724 4730013.51632 11.80797 48.17151 533.29574 -2.30238 1.90249 8.70508 -1.74198 0.57881 -2.08777 8 0 8 2.00 1999-Aug-27 09:09:26 4171698.30525 872120.50803 4730015.75047 11.80799 48.17151 536.86479 -0.99830 1.26475 12.27414 -0.43790 -0.05894 1.48128 8 0 8 2.00 1999-Aug-27 09:09:26 4171700.05296 872120.23959 4730013.14219 11.80798 48.17148 536.02550 -1.61870 -1.70852 11.43485 -1.05830 -3.03221 0.64199 8 0 8 2.00 1999-Aug-27 09:09:26 4171698.90391 872121.40123 4730014.81886 11.80800 48.17150 536.68330 -0.24650 0.07061 12.09265 0.31389 -1.25307 1.29979 8 0 8 2.00 1999-Aug-27 09:09:26 4171700.93193 872120.91958 4730017.11237 11.80799 48.17150 539.65044 -1.13297 0.19442 15.05979 -0.57257 -1.12927 4.26693 8 0 8 2.00 1999-Aug-27 09:09:26 4171700.82144 872120.99287 4730016.40920 11.80799 48.17150 539.06436 -1.03861 -0.20512 14.47370 -0.47822 -1.52881 3.68084 8 0 8 2.00 1999-Aug-27 09:09:26 4171698.73942 872121.03495 4730015.08746 11.80800 48.17150 536.72608 -0.57138 0.42556 12.13543 -0.01098 -0.89812 1.34257 8 0 8 2.00 1999-Aug-27 09:09:26 4171699.28037 872120.15913 4730013.84183 11.80798 48.17149 536.03151 -1.53936 -0.66616 11.44086 -0.97896 -1.98984 0.64800 8 0 8 2.00 1999-Aug-27 09:09:26 4171699.43631 872122.97877 4730017.68419 11.80802 48.17151 539.38122 1.18870 1.35265 14.79056 1.74910 0.02896 3.99771 8 0 8 2.00 1999-Aug-27 09:09:26 4171700.04339 872122.73179 4730014.54631 11.80802 48.17149 537.40564 0.82272 -1.14515 12.81498 1.38312 -2.46884 2.02213 8 0 8 2.00 1999-Aug-27 09:09:26 4171701.70405 872121.34926 4730016.74069 11.80799 48.17149 539.93616 -0.87037 -0.68214 15.34550 -0.30998 -2.00583 4.55265 8 0 8 2.00 1999-Aug-27 09:09:26 4171700.49068 872120.89603 4730015.81358 11.80799 48.17149 538.39140 -1.06572 -0.34633 13.80075 -0.50533 -1.67001 3.00789 8 0 8 2.00 1999-Aug-27 09:09:26 4171699.41637 872121.95778 4730019.48264 11.80801 48.17152 540.56897 0.19340 2.72227 15.97832 0.75380 1.39858 5.18546 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.45920 872121.56947 4730015.54654 11.80801 48.17152 535.65261 0.41844 2.31336 11.06195 0.97884 0.98968 0.26910 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.05996 872119.35928 4730012.55507 11.80798 48.17151 532.86128 -1.66328 0.94655 8.27063 -1.10289 -0.37714 -2.52223 8 0 8 2.00 1999-Aug-27 09:09:27 4171697.99070 872119.45592 4730014.78302 11.80798 48.17151 535.79498 -1.96378 1.00941 11.20433 -1.40338 -0.31428 0.41147 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.46530 872117.33389 4730015.60471 11.80796 48.17152 535.12191 -3.72876 2.99355 10.53125 -3.16836 1.66987 -0.26161 8 0 8 2.00 1999-Aug-27 09:09:27 4171697.96490 872118.64645 4730018.65970 11.80797 48.17153 538.55637 -2.75084 3.73702 13.96571 -2.19044 2.41334 3.17285 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.15191 872118.71406 4730015.46478 11.80797 48.17152 535.00141 -2.31366 2.91836 10.41075 -1.75327 1.59467 -0.38210 8 0 8 2.00 1999-Aug-27 09:09:27 4171695.06855 872119.28133 4730013.36696 11.80798 48.17152 532.80844 -1.53671 2.22300 8.21779 -0.97631 0.89931 -2.57507 8 0 8 2.00 1999-Aug-27 09:09:27 4171694.93976 872119.04421 4730012.44017 11.80798 48.17151 532.00141 -1.74245 1.73501 7.41076 -1.18206 0.41132 -3.38210 8 0 8 2.00 1999-Aug-27 09:09:27 4171693.96270 872120.09494 4730011.79726 11.80800 48.17151 531.02793 -0.51402 1.85868 6.43728 0.04637 0.53500 -4.35558 8 0 8 2.00 1999-Aug-27 09:09:27 4171695.67092 872120.01580 4730015.35043 11.80799 48.17152 534.77987 -0.94104 2.99443 10.18921 -0.38064 1.67075 -0.60365 8 0 8 2.00 1999-Aug-27 09:09:27 4171695.51089 872119.89420 4730015.16401 11.80799 48.17152 534.51989 -1.02733 3.00537 9.92924 -0.46693 1.68168 -0.86362 8 0 8 2.00 1999-Aug-27 09:09:27 4171698.79940 872119.96533 4730016.72082 11.80798 48.17151 537.83636 -1.63064 1.63421 13.24570 -1.07024 0.31052 2.45284 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.28314 872120.13448 4730013.15202 11.80799 48.17151 533.55758 -0.95015 1.06367 8.96693 -0.38976 -0.26001 -1.82593 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.37664 872120.81522 4730012.71253 11.80800 48.17150 533.38403 -0.30296 0.59858 8.79338 0.25744 -0.72511 -1.99948 8 0 8 2.00 1999-Aug-27 09:09:27 4171698.21921 872121.44258 4730014.95401 11.80800 48.17150 536.34269 -0.06592 0.65384 11.75203 0.49448 -0.66984 0.95917 8 0 8 2.00 1999-Aug-27 09:09:27 4171697.67009 872121.57648 4730015.44628 11.80801 48.17151 536.36931 0.17752 1.36224 11.77865 0.73792 0.03855 0.98580 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.21850 872123.88290 4730015.26992 11.80804 48.17152 535.60507 2.73217 1.95169 11.01441 3.29257 0.62800 0.22156 8 0 8 2.00 1999-Aug-27 09:09:27 4171693.60003 872122.60285 4730013.26021 11.80803 48.17152 532.22354 2.01503 2.71644 7.63289 2.57543 1.39275 -3.15997 8 0 8 2.00 1999-Aug-27 09:09:27 4171696.14842 872121.04628 4730016.20840 11.80801 48.17153 535.87151 -0.03009 3.06121 11.28086 0.53031 1.73752 0.48800 8 0 8 2.00 1999-Aug-27 09:09:27 4171697.47505 872120.07692 4730012.68315 11.80799 48.17150 533.97842 -1.25040 -0.10959 9.38777 -0.69000 -1.43328 -1.40509 8 0 8 2.00 1999-Aug-27 09:09:27 4171702.50503 872120.68762 4730016.92825 11.80798 48.17149 540.50850 -1.68192 -1.04039 15.91784 -1.12152 -2.36408 5.12498 8 0 8 2.00 1999-Aug-27 09:09:27 4171698.63401 872120.95423 4730016.25924 11.80800 48.17151 537.51940 -0.62882 1.29623 12.92874 -0.06842 -0.02746 2.13589 8 0 8 2.00 1999-Aug-27 09:09:27 4171701.02259 872119.93443 4730017.69381 11.80798 48.17150 540.00843 -2.11581 0.66627 15.41778 -1.55542 -0.65742 4.62492 8 0 8 2.00 1999-Aug-27 09:09:27 4171699.32600 872119.42852 4730013.73535 11.80798 48.17149 535.88225 -2.26385 -0.65904 11.29160 -1.70345 -1.98273 0.49874 8 0 8 2.00 1999-Aug-27 09:09:27 4171698.68327 872120.18889 4730015.34896 11.80799 48.17150 536.76883 -1.38804 0.76992 12.17817 -0.82764 -0.55376 1.38531 8 0 8 2.00 1999-Aug-27 09:09:28 4171697.81165 872120.76137 4730018.39320 11.80800 48.17153 538.54636 -0.64931 3.34859 13.95571 -0.08891 2.02490 3.16285 8 0 8 2.00 1999-Aug-27 09:09:28 4171700.60618 872121.04086 4730021.54642 11.80799 48.17153 542.75835 -0.94759 3.37060 18.16769 -0.38720 2.04691 7.37484 8 0 8 2.00 1999-Aug-27 09:09:28 4171696.55047 872120.56249 4730016.21715 11.80800 48.17152 536.07446 -0.58591 2.84757 11.48381 -0.02551 1.52388 0.69095 8 0 8 2.00 1999-Aug-27 09:09:28 4171694.77522 872120.24503 4730015.14350 11.80800 48.17153 534.07225 -0.53337 3.47478 9.48160 0.02702 2.15109 -1.31126 8 0 8 2.00 1999-Aug-27 09:09:28 4171696.01890 872119.72846 4730014.84175 11.80799 48.17152 534.58876 -1.29351 2.44520 9.99811 -0.73311 1.12152 -0.79475 8 0 8 2.00 1999-Aug-27 09:09:28 4171692.69495 872118.97234 4730011.15892 11.80799 48.17152 529.57150 -1.35344 2.52881 4.98084 -0.79304 1.20512 -5.81202 8 0 8 2.00 1999-Aug-27 09:09:28 4171692.84649 872118.15827 4730012.32221 11.80798 48.17153 530.42615 -2.18130 3.31822 5.83549 -1.62090 1.99453 -4.95736 8 0 8 2.00 1999-Aug-27 09:09:28 4171696.33167 872118.55329 4730012.19501 11.80797 48.17150 532.66036 -2.50781 0.63114 8.06970 -1.94742 -0.69254 -2.72315 8 0 8 2.00 1999-Aug-27 09:09:28 4171695.04953 872118.10498 4730012.07460 11.80797 48.17151 531.67249 -2.68428 1.55437 7.08184 -2.12388 0.23068 -3.71102 8 0 8 2.00 1999-Aug-27 09:09:28 4171699.57214 872119.16545 4730015.97531 11.80797 48.17150 537.67612 -2.57171 0.69537 13.08547 -2.01132 -0.62831 2.29261 8 0 8 2.00 1999-Aug-27 09:09:28 4171695.58995 872119.68773 4730014.33659 11.80799 48.17152 533.92678 -1.24560 2.42738 9.33613 -0.68520 1.10370 -1.45673 8 0 8 2.00 1999-Aug-27 09:09:28 4171697.64843 872119.82537 4730015.04305 11.80799 48.17151 535.81574 -1.53211 1.37613 11.22508 -0.97171 0.05245 0.43223 8 0 8 2.00 1999-Aug-27 09:09:28 4171701.31873 872121.92283 4730014.67684 11.80800 48.17148 538.22503 -0.23009 -1.86494 13.63438 0.33030 -3.18863 2.84152 8 0 8 2.00 1999-Aug-27 09:09:28 4171698.23280 872121.40446 4730011.13211 11.80800 48.17148 533.49849 -0.10601 -1.89910 8.90784 0.45438 -3.22278 -1.88502 8 0 8 2.00 1999-Aug-27 09:09:28 4171694.48574 872121.28277 4730010.63185 11.80801 48.17150 530.66307 0.54164 0.51885 6.07241 1.10204 -0.80483 -4.72045 8 0 8 2.00 1999-Aug-27 09:09:28 4171696.98661 872121.61651 4730012.85476 11.80801 48.17150 533.99754 0.35656 0.12635 9.40689 0.91696 -1.19733 -1.38597 8 0 8 2.00 1999-Aug-27 09:09:28 4171694.55711 872118.29822 4730012.32549 11.80797 48.17152 531.56436 -2.39436 2.05138 6.97371 -1.83396 0.72769 -3.81915 8 0 8 2.00 1999-Aug-27 09:09:28 4171697.21519 872118.78904 4730014.14288 11.80797 48.17151 534.72073 -2.45785 1.24983 10.13008 -1.89746 -0.07386 -0.66278 8 0 8 2.00 1999-Aug-27 09:09:28 4171698.48884 872120.82997 4730014.59317 11.80800 48.17150 536.16621 -0.72074 0.30995 11.57556 -0.16034 -1.01374 0.78270 8 0 8 2.00 1999-Aug-27 09:09:28 4171697.02598 872120.55191 4730014.79281 11.80800 48.17151 535.32210 -0.69357 1.55246 10.73144 -0.13317 0.22878 -0.06142 8 0 8 2.00 1999-Aug-27 09:09:28 4171700.54880 872121.67153 4730015.83830 11.80800 48.17149 538.55359 -0.31852 -0.49048 13.96294 0.24187 -1.81416 3.17008 8 0 8 2.00 1999-Aug-27 09:09:28 4171696.20338 872119.55454 4730013.78848 11.80799 48.17151 533.90062 -1.50150 1.63473 9.30996 -0.94110 0.31105 -1.48289 8 0 8 2.00 1999-Aug-27 09:09:28 4171691.21962 872118.09963 4730010.26796 11.80798 48.17153 527.82542 -1.90578 3.14377 3.23476 -1.34538 1.82008 -7.55809 8 0 8 2.00 1999-Aug-27 09:09:28 4171692.95673 872120.63511 4730013.86484 11.80801 48.17153 531.98560 0.22058 3.88892 7.39494 0.78097 2.56524 -3.39791 8 0 8 2.00 1999-Aug-27 09:09:28 4171694.66149 872120.50710 4730012.95803 11.80800 48.17152 532.40528 -0.25358 2.06027 7.81463 0.30682 0.73659 -2.97823 8 0 8 2.00 1999-Aug-27 09:09:29 4171693.61758 872120.41291 4730015.09486 11.80800 48.17154 533.30322 -0.13215 4.26110 8.71257 0.42824 2.93742 -2.08029 8 0 8 2.00 1999-Aug-27 09:09:29 4171697.51818 872120.61940 4730014.24136 11.80800 48.17151 535.24169 -0.72823 0.81540 10.65104 -0.16783 -0.50828 -0.14182 8 0 8 2.00 1999-Aug-27 09:09:29 4171697.58106 872119.94106 4730013.36511 11.80799 48.17150 534.53723 -1.40508 0.28861 9.94658 -0.84468 -1.03508 -0.84628 8 0 8 2.00 1999-Aug-27 09:09:29 4171696.05111 872121.86420 4730014.46920 11.80802 48.17151 534.62366 0.79044 1.84759 10.03300 1.35084 0.52390 -0.75986 8 0 8 2.00 1999-Aug-27 09:09:29 4171695.85753 872121.21044 4730014.27483 11.80801 48.17152 534.26324 0.19013 1.95885 9.67259 0.75052 0.63516 -1.12027 8 0 8 2.00 1999-Aug-27 09:09:29 4171692.62293 872118.65308 4730013.37197 11.80798 48.17153 531.12995 -1.65121 4.10591 6.53930 -1.09081 2.78223 -4.25356 8 0 8 2.00 1999-Aug-27 09:09:29 4171695.36568 872119.93707 4730017.84636 11.80799 48.17154 536.42969 -0.95565 4.89362 11.83903 -0.39525 3.56993 1.04617 8 0 8 2.00 1999-Aug-27 09:09:29 4171697.22642 872118.70625 4730016.93136 11.80797 48.17153 536.79459 -2.54118 3.11390 12.20394 -1.98079 1.79022 1.41108 8 0 8 2.00 1999-Aug-27 09:09:29 4171695.95607 872119.34787 4730015.31159 11.80798 48.17152 534.84592 -1.65319 2.86240 10.25526 -1.09280 1.53871 -0.53759 8 0 8 2.00 1999-Aug-27 09:09:29 4171698.15542 872121.46849 4730016.73285 11.80801 48.17151 537.63008 -0.02751 1.88273 13.03942 0.53289 0.55905 2.24657 8 0 8 2.00 1999-Aug-27 09:09:29 4171701.43723 872124.23937 4730020.38486 11.80803 48.17151 542.87182 2.01317 1.50209 18.28117 2.57357 0.17840 7.48831 8 0 8 2.00 1999-Aug-27 09:09:29 4171700.96003 872124.10109 4730019.91533 11.80803 48.17151 542.19158 1.97547 1.55810 17.60092 2.53587 0.23442 6.80807 8 0 8 2.00 1999-Aug-27 09:09:29 4171702.38031 872123.37573 4730020.69746 11.80802 48.17151 543.60253 0.97482 1.15439 19.01187 1.53522 -0.16930 8.21901 8 0 8 2.00 1999-Aug-27 09:09:29 4171698.58910 872122.10236 4730016.36782 11.80801 48.17151 537.72768 0.50421 1.22632 13.13702 1.06460 -0.09737 2.34417 8 0 8 2.00 1999-Aug-27 09:09:29 4171696.50006 872121.11585 4730014.25520 11.80801 48.17151 534.65514 -0.03394 1.49153 10.06448 0.52646 0.16784 -0.72837 8 0 8 2.00 1999-Aug-27 09:09:29 4171693.65296 872119.99769 4730013.74967 11.80800 48.17153 532.26729 -0.54583 3.40149 7.67664 0.01457 2.07781 -3.11622 8 0 8 2.00 1999-Aug-27 09:09:29 4171696.20766 872122.53795 4730015.28874 11.80802 48.17152 535.42847 1.41790 2.17723 10.83782 1.97829 0.85355 0.04496 8 0 8 2.00 1999-Aug-27 09:09:29 4171696.57512 872120.04048 4730014.10466 11.80799 48.17151 534.44520 -1.10192 1.50036 9.85455 -0.54152 0.17667 -0.93831 8 0 8 2.00 1999-Aug-27 09:09:29 4171697.90060 872120.73898 4730015.98371 11.80800 48.17151 536.80596 -0.68943 1.68023 12.21530 -0.12903 0.35654 1.42245 8 0 8 2.00 1999-Aug-27 09:09:29 4171700.46014 872120.72117 4730014.75355 11.80799 48.17149 537.55772 -1.23063 -1.00433 12.96707 -0.67023 -2.32801 2.17421 8 0 8 2.00 1999-Aug-27 09:09:29 4171700.57415 872121.85123 4730013.63979 11.80800 48.17148 536.95645 -0.14781 -2.00256 12.36580 0.41258 -3.32625 1.57294 8 0 8 2.00 1999-Aug-27 09:09:29 4171699.25826 872121.05627 4730015.58189 11.80800 48.17150 537.43611 -0.65668 0.37363 12.84546 -0.09628 -0.95006 2.05260 8 0 8 2.00 1999-Aug-27 09:09:29 4171695.72956 872121.47831 4730013.70623 11.80801 48.17151 533.79256 0.47852 1.63214 9.20191 1.03891 0.30845 -1.59095 8 0 8 2.00 1999-Aug-27 09:09:29 4171694.17733 872120.59947 4730012.70734 11.80800 48.17152 531.91503 -0.06409 2.23214 7.32438 0.49631 0.90846 -3.46848 8 0 8 2.00 1999-Aug-27 09:09:29 4171696.88305 872121.03559 4730013.59697 11.80800 48.17150 534.40372 -0.19087 0.78544 9.81306 0.36952 -0.53824 -0.97979 8 0 8 2.00 1999-Aug-27 09:09:30 4171701.64269 872122.38415 4730015.59587 11.80801 48.17148 539.18428 0.15517 -1.55868 14.59363 0.71557 -2.88236 3.80077 8 0 8 2.00 1999-Aug-27 09:09:30 4171699.24056 872122.70098 4730014.06409 11.80802 48.17149 536.51803 0.95685 -0.87648 11.92737 1.51725 -2.20016 1.13452 8 0 8 2.00 1999-Aug-27 09:09:30 4171694.70063 872121.52782 4730015.74840 11.80802 48.17153 534.64936 0.73753 3.73700 10.05871 1.29793 2.41331 -0.73415 8 0 8 2.00 1999-Aug-27 09:09:30 4171694.29301 872120.14778 4730015.58621 11.80800 48.17153 534.07408 -0.52989 4.13657 9.48342 0.03050 2.81289 -1.30943 8 0 8 2.00 1999-Aug-27 09:09:30 4171696.63353 872120.91509 4730013.77828 11.80800 48.17151 534.35949 -0.25777 1.10673 9.76884 0.30263 -0.21695 -1.02402 8 0 8 2.00 1999-Aug-27 09:09:30 4171697.17595 872121.12871 4730014.31358 11.80800 48.17151 535.14161 -0.15966 1.03552 10.55095 0.40074 -0.28816 -0.24190 8 0 8 2.00 1999-Aug-27 09:09:30 4171695.34992 872121.92875 4730013.10972 11.80802 48.17151 533.16173 0.99712 1.44254 8.57107 1.55751 0.11885 -2.22178 8 0 8 2.00 1999-Aug-27 09:09:30 4171697.38489 872122.19903 4730014.86162 11.80802 48.17151 535.83244 0.84525 1.08542 11.24179 1.40565 -0.23827 0.44893 8 0 8 2.00 1999-Aug-27 09:09:30 4171699.23888 872121.79720 4730017.57226 11.80801 48.17151 539.00769 0.07254 1.60216 14.41703 0.63294 0.27848 3.62418 8 0 8 2.00 1999-Aug-27 09:09:30 4171699.17776 872120.17996 4730017.82589 11.80799 48.17152 538.93608 -1.49797 2.06249 14.34542 -0.93758 0.73881 3.55257 8 0 8 2.00 1999-Aug-27 09:09:30 4171695.51540 872119.58019 4730016.51864 11.80799 48.17153 535.48938 -1.33561 3.95337 10.89872 -0.77521 2.62968 0.10587 8 0 8 2.00 1999-Aug-27 09:09:30 4171697.54801 872120.21206 4730019.09315 11.80799 48.17153 538.82086 -1.13305 4.09143 14.23021 -0.57265 2.76775 3.43735 8 0 8 2.00 1999-Aug-27 09:09:30 4171696.67689 872119.21265 4730015.34537 11.80798 48.17152 535.32317 -1.93305 2.37980 10.73252 -1.37265 1.05611 -0.06034 8 0 8 2.00 1999-Aug-27 09:09:30 4171692.89505 872118.40925 4730012.50340 11.80798 48.17153 530.62711 -1.94556 3.36536 6.03645 -1.38516 2.04168 -4.75641 8 0 8 2.00 1999-Aug-27 09:09:30 4171695.08675 872118.05343 4730010.81661 11.80797 48.17150 530.75237 -2.74235 0.69612 6.16171 -2.18195 -0.62756 -4.63115 8 0 8 2.00 1999-Aug-27 09:09:30 4171696.36912 872120.50320 4730015.79200 11.80800 48.17152 535.63119 -0.60683 2.70535 11.04054 -0.04643 1.38167 0.24768 8 0 8 2.00 1999-Aug-27 09:09:30 4171701.01218 872121.86039 4730021.49231 11.80800 48.17152 543.09490 -0.22848 2.91342 18.50425 0.33192 1.58973 7.71139 8 0 8 2.00 1999-Aug-27 09:09:30 4171697.22442 872119.82387 4730017.16852 11.80799 48.17153 537.12252 -1.44681 3.10311 12.53186 -0.88641 1.77942 1.73900 8 0 8 2.00 1999-Aug-27 09:09:30 4171700.43027 872121.72800 4730016.55302 11.80800 48.17150 539.01649 -0.23899 0.06401 14.42583 0.32140 -1.25967 3.63298 8 0 8 2.00 1999-Aug-27 09:09:30 4171699.07333 872122.59923 4730019.15486 11.80802 48.17152 540.18834 0.89148 2.65606 15.59768 1.45187 1.33238 4.80483 8 0 8 2.00 1999-Aug-27 09:09:30 4171692.73917 872121.47573 4730015.60356 11.80802 48.17154 533.25390 1.08792 5.07898 8.66325 1.64832 3.75530 -2.12961 8 0 8 2.00 1999-Aug-27 09:09:30 4171692.60237 872120.97868 4730015.80892 11.80801 48.17155 533.24979 0.62938 5.39151 8.65914 1.18978 4.06782 -2.13372 8 0 8 2.00 1999-Aug-27 09:09:30 4171690.60725 872121.56083 4730013.58654 11.80803 48.17155 530.37085 1.60749 5.27582 5.78019 2.16788 3.95213 -5.01267 8 0 8 2.00 1999-Aug-27 09:09:30 4171688.60919 872119.24947 4730009.20002 11.80800 48.17154 525.48251 -0.24610 4.16022 0.89185 0.31430 2.83654 -9.90101 8 0 8 2.00 1999-Aug-27 09:09:30 4171692.56569 872119.97236 4730012.02702 11.80800 48.17153 530.27045 -0.34813 3.04954 5.67980 0.21227 1.72586 -5.11306 8 0 8 2.00 1999-Aug-27 09:09:31 4171697.72143 872120.52088 4730014.62973 11.80799 48.17151 535.65032 -0.86626 0.94119 11.05966 -0.30586 -0.38250 0.26681 8 0 8 2.00 1999-Aug-27 09:09:31 4171701.15804 872120.80975 4730014.24601 11.80799 48.17148 537.64720 -1.28674 -1.86534 13.05655 -0.72634 -3.18903 2.26369 8 0 8 2.00 1999-Aug-27 09:09:31 4171697.07844 872119.06255 4730011.97287 11.80798 48.17150 533.05182 -2.16215 -0.13933 8.46117 -1.60175 -1.46301 -2.33169 8 0 8 2.00 1999-Aug-27 09:09:31 4171695.66382 872119.86198 4730011.95801 11.80799 48.17150 532.22639 -1.09016 0.76066 7.63574 -0.52976 -0.56303 -3.15712 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.86800 872120.08411 4730012.87469 11.80799 48.17150 533.72584 -1.11914 0.45982 9.13519 -0.55874 -0.86387 -1.65767 8 0 8 2.00 1999-Aug-27 09:09:31 4171693.62714 872120.05147 4730011.93252 11.80800 48.17152 530.90373 -0.48790 2.20027 6.31308 0.07249 0.87658 -4.47978 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.07608 872122.50109 4730014.29490 11.80802 48.17151 534.59699 1.40875 1.61603 10.00634 1.96914 0.29234 -0.78652 8 0 8 2.00 1999-Aug-27 09:09:31 4171697.83145 872122.55249 4730018.26177 11.80802 48.17152 538.70579 1.09985 2.97338 14.11513 1.66025 1.64969 3.32227 8 0 8 2.00 1999-Aug-27 09:09:31 4171697.66400 872122.31454 4730017.84333 11.80802 48.17152 538.25221 0.90120 2.85274 13.66156 1.46160 1.52905 2.86870 8 0 8 2.00 1999-Aug-27 09:09:31 4171695.66755 872122.91343 4730016.86073 11.80803 48.17153 536.29850 1.89596 3.56228 11.70785 2.45635 2.23860 0.91499 8 0 8 2.00 1999-Aug-27 09:09:31 4171694.01567 872121.70181 4730015.01432 11.80802 48.17153 533.67897 1.04800 3.72050 9.08832 1.60840 2.39681 -1.70454 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.68720 872120.51201 4730018.08785 11.80800 48.17153 537.55077 -0.66330 4.00311 12.96012 -0.10290 2.67942 2.16726 8 0 8 2.00 1999-Aug-27 09:09:31 4171698.63840 872120.13718 4730016.25562 11.80799 48.17151 537.40807 -1.42947 1.41519 12.81741 -0.86908 0.09150 2.02456 8 0 8 2.00 1999-Aug-27 09:09:31 4171694.42403 872119.46304 4730014.68014 11.80799 48.17153 533.39101 -1.22695 3.54116 8.80035 -0.66656 2.21747 -1.99250 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.14758 872119.90882 4730014.70763 11.80799 48.17152 534.59745 -1.14330 2.23440 10.00679 -0.58291 0.91071 -0.78607 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.38179 872119.79404 4730013.91005 11.80799 48.17151 534.14036 -1.30358 1.54916 9.54971 -0.74318 0.22547 -1.24315 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.71602 872119.75736 4730013.90662 11.80799 48.17151 534.35098 -1.40788 1.30869 9.76033 -0.84748 -0.01499 -1.03253 8 0 8 2.00 1999-Aug-27 09:09:31 4171695.07836 872119.44341 4730012.17439 11.80799 48.17151 531.94832 -1.38007 1.39580 7.35767 -0.81967 0.07211 -3.43519 8 0 8 2.00 1999-Aug-27 09:09:31 4171698.26005 872119.83954 4730014.42735 11.80798 48.17150 535.75814 -1.64340 0.51726 11.16748 -1.08300 -0.80643 0.37462 8 0 8 2.00 1999-Aug-27 09:09:31 4171700.50436 872121.49937 4730016.69636 11.80800 48.17150 539.14046 -0.47795 0.14043 14.54981 0.08244 -1.18326 3.75695 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.76335 872122.03322 4730017.33534 11.80802 48.17153 537.24735 0.81014 3.21377 12.65670 1.37053 1.89008 1.86384 8 0 8 2.00 1999-Aug-27 09:09:31 4171695.66942 872122.27058 4730016.34227 11.80802 48.17153 535.82566 1.26632 3.31318 11.23501 1.82672 1.98949 0.44215 8 0 8 2.00 1999-Aug-27 09:09:31 4171695.55052 872121.58596 4730017.65062 11.80801 48.17154 536.62952 0.62052 4.37684 12.03887 1.18092 3.05315 1.24601 8 0 8 2.00 1999-Aug-27 09:09:31 4171695.18186 872121.93718 4730018.07277 11.80802 48.17154 536.75136 1.03975 4.87370 12.16070 1.60015 3.55002 1.36785 8 0 8 2.00 1999-Aug-27 09:09:31 4171696.97378 872121.52652 4730016.88373 11.80801 48.17152 536.97906 0.27110 2.83636 12.38840 0.83150 1.51267 1.59554 8 0 8 2.00 1999-Aug-27 09:09:32 4171697.21127 872121.30171 4730016.57533 11.80801 48.17152 536.87361 0.00245 2.49176 12.28295 0.56285 1.16807 1.49010 8 0 8 2.00 1999-Aug-27 09:09:32 4171702.00213 872121.22742 4730019.01515 11.80799 48.17150 541.80891 -1.05063 0.63586 17.21826 -0.49024 -0.68783 6.42540 8 0 8 2.00 1999-Aug-27 09:09:32 4171699.91229 872119.79111 4730017.20794 11.80798 48.17151 538.90204 -2.02890 1.17393 14.31138 -1.46850 -0.14976 3.51853 8 0 8 2.00 1999-Aug-27 09:09:32 4171696.78514 872120.07854 4730012.13567 11.80799 48.17150 533.12032 -1.10764 0.02825 8.52967 -0.54724 -1.29543 -2.26319 8 0 8 2.00 1999-Aug-27 09:09:32 4171694.50918 872121.14374 4730010.13249 11.80801 48.17150 530.28730 0.40075 0.18993 5.69665 0.96115 -1.13376 -5.09621 8 0 8 2.00 1999-Aug-27 09:09:32 4171690.82123 872120.15686 4730008.30173 11.80801 48.17151 526.38098 0.18943 1.80937 1.79033 0.74983 0.48569 -9.00253 8 0 8 2.00 1999-Aug-27 09:09:32 4171694.96114 872121.10898 4730011.62040 11.80801 48.17151 531.68630 0.27424 0.85787 7.09565 0.83464 -0.46581 -3.69721 8 0 8 2.00 1999-Aug-27 09:09:32 4171693.94699 872121.56118 4730011.79999 11.80802 48.17151 531.21980 0.92441 1.64839 6.62915 1.48480 0.32470 -4.16371 8 0 8 2.00 1999-Aug-27 09:09:32 4171692.86553 872120.49465 4730012.77481 11.80801 48.17153 531.09467 0.10175 3.24991 6.50401 0.66215 1.92623 -4.28884 8 0 8 2.00 1999-Aug-27 09:09:32 4171695.47049 872120.50442 4730012.46803 11.80800 48.17151 532.56791 -0.42175 1.14383 7.97725 0.13865 -0.17985 -2.81560 8 0 8 2.00 1999-Aug-27 09:09:32 4171696.65905 872120.46183 4730013.36098 11.80800 48.17151 534.00335 -0.70666 0.87893 9.41269 -0.14626 -0.44475 -1.38017 8 0 8 2.00 1999-Aug-27 09:09:32 4171699.24414 872120.41123 4730013.99637 11.80799 48.17149 536.15743 -1.28518 -0.57511 11.56677 -0.72478 -1.89879 0.77392 8 0 8 2.00 1999-Aug-27 09:09:32 4171698.00759 872120.14192 4730013.39024 11.80799 48.17150 534.86181 -1.29575 -0.03636 10.27115 -0.73535 -1.36004 -0.52171 8 0 8 2.00 1999-Aug-27 09:09:32 4171698.83099 872120.17939 4730014.34490 11.80799 48.17150 536.11579 -1.42757 -0.00598 11.52513 -0.86717 -1.32966 0.73227 8 0 8 2.00 1999-Aug-27 09:09:32 4171701.98181 872119.91313 4730015.72577 11.80797 48.17149 539.16523 -2.33295 -1.34260 14.57457 -1.77255 -2.66629 3.78172 8 0 8 2.00 1999-Aug-27 09:09:32 4171694.15948 872119.82836 4730013.69402 11.80799 48.17152 532.53337 -0.81522 3.02076 7.94271 -0.25483 1.69708 -2.85015 8 0 8 2.00 1999-Aug-27 09:09:32 4171698.92632 872119.53374 4730014.11297 11.80798 48.17150 535.91709 -2.07906 -0.13174 11.32643 -1.51866 -1.45543 0.53358 8 0 8 2.00 1999-Aug-27 09:09:32 4171698.76445 872120.87921 4730014.03623 11.80800 48.17150 535.93785 -0.72894 -0.27001 11.34720 -0.16854 -1.59370 0.55434 8 0 8 2.00 1999-Aug-27 09:09:32 4171696.84013 872122.10972 4730015.42929 11.80802 48.17151 535.88764 0.86931 1.87495 11.29698 1.42970 0.55127 0.50413 8 0 8 2.00 1999-Aug-27 09:09:32 4171694.69114 872121.20485 4730013.63208 11.80801 48.17152 533.02213 0.42334 2.38178 8.43147 0.98373 1.05810 -2.36139 8 0 8 2.00 1999-Aug-27 09:09:32 4171693.53303 872121.67741 4730014.34000 11.80802 48.17153 532.85811 1.12288 3.62654 8.26745 1.68328 2.30285 -2.52540 8 0 8 2.00 1999-Aug-27 09:09:32 4171693.42338 872120.81205 4730013.56786 11.80801 48.17153 532.09308 0.29827 3.32353 7.50242 0.85867 1.99984 -3.29044 8 0 8 2.00 1999-Aug-27 09:09:32 4171697.62425 872121.90305 4730015.77275 11.80801 48.17151 536.62722 0.50656 1.56360 12.03657 1.06695 0.23992 1.24371 8 0 8 2.00 1999-Aug-27 09:09:32 4171699.26241 872121.29853 4730015.65849 11.80800 48.17150 537.52896 -0.42039 0.38475 12.93831 0.14001 -0.93894 2.14545 8 0 8 2.00 1999-Aug-27 09:09:32 4171697.72917 872119.77985 4730013.72279 11.80798 48.17150 534.87844 -1.59319 0.44370 10.28779 -1.03279 -0.87999 -0.50507 8 0 8 2.00 1999-Aug-27 09:09:33 4171699.42492 872118.90979 4730012.88667 11.80797 48.17149 535.24365 -2.79184 -1.21809 10.65300 -2.23144 -2.54177 -0.13986 8 0 8 2.00 1999-Aug-27 09:09:33 4171697.62183 872120.39743 4730015.52709 11.80799 48.17151 536.23712 -0.96671 1.63111 11.64647 -0.40632 0.30743 0.85361 8 0 8 2.00 1999-Aug-27 09:09:33 4171699.40322 872121.44393 4730018.48316 11.80800 48.17152 539.74551 -0.30688 2.14365 15.15486 0.25352 0.81997 4.36200 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.50861 872119.38235 4730016.40788 11.80798 48.17153 536.02821 -1.73251 3.18525 11.43755 -1.17211 1.86156 0.64470 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.11959 872120.27620 4730014.58602 11.80800 48.17152 534.53869 -0.77796 2.11769 9.94804 -0.21757 0.79400 -0.84482 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.40658 872120.88844 4730013.44628 11.80800 48.17151 533.96032 -0.23741 1.05491 9.36966 0.32299 -0.26877 -1.42319 8 0 8 2.00 1999-Aug-27 09:09:33 4171699.03437 872121.01847 4730014.50770 11.80800 48.17150 536.48437 -0.64786 -0.17369 11.89371 -0.08746 -1.49738 1.10086 8 0 8 2.00 1999-Aug-27 09:09:33 4171698.43446 872119.72760 4730014.16714 11.80798 48.17150 535.66283 -1.78866 0.23358 11.07217 -1.22826 -1.09011 0.27932 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.15422 872119.94071 4730014.97729 11.80799 48.17152 534.80707 -1.11344 2.40453 10.21642 -0.55305 1.08084 -0.57644 8 0 8 2.00 1999-Aug-27 09:09:33 4171698.66145 872119.94665 4730016.04554 11.80798 48.17151 537.24057 -1.62069 1.28733 12.64991 -1.06029 -0.03636 1.85706 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.09688 872119.97978 4730016.50487 11.80799 48.17153 535.91324 -1.06346 3.45914 11.32258 -0.50307 2.13546 0.52973 8 0 8 2.00 1999-Aug-27 09:09:33 4171697.51299 872119.10364 4730016.67140 11.80798 48.17152 536.84218 -2.21085 2.67092 12.25152 -1.65046 1.34723 1.45866 8 0 8 2.00 1999-Aug-27 09:09:33 4171698.41183 872119.91092 4730016.51625 11.80798 48.17151 537.42350 -1.60458 1.78876 12.83284 -1.04419 0.46508 2.03999 8 0 8 2.00 1999-Aug-27 09:09:33 4171698.25962 872119.88862 4730014.19551 11.80798 48.17150 535.59180 -1.59526 0.35547 11.00115 -1.03486 -0.96821 0.20829 8 0 8 2.00 1999-Aug-27 09:09:33 4171697.02705 872120.28396 4730012.93128 11.80799 48.17150 533.89911 -0.95607 0.35108 9.30846 -0.39567 -0.97260 -1.48440 8 0 8 2.00 1999-Aug-27 09:09:33 4171695.25583 872120.07197 4730015.60515 11.80799 48.17153 534.70636 -0.80112 3.45850 10.11571 -0.24072 2.13482 -0.67715 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.28938 872121.51344 4730014.75455 11.80801 48.17151 534.94396 0.39835 1.91759 10.35330 0.95874 0.59390 -0.43955 8 0 8 2.00 1999-Aug-27 09:09:33 4171695.16030 872120.62723 4730011.53066 11.80800 48.17150 531.68370 -0.23806 0.72622 7.09304 0.32234 -0.59746 -3.69982 8 0 8 2.00 1999-Aug-27 09:09:33 4171695.02384 872120.64595 4730011.62648 11.80800 48.17151 531.66857 -0.19182 0.88680 7.07792 0.36858 -0.43688 -3.71494 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.91601 872120.80654 4730012.17926 11.80800 48.17150 533.33758 -0.42182 -0.14914 8.74692 0.13858 -1.47282 -2.04594 8 0 8 2.00 1999-Aug-27 09:09:33 4171697.64558 872120.78756 4730015.07505 11.80800 48.17151 535.96903 -0.58970 1.25284 11.37837 -0.02930 -0.07085 0.58552 8 0 8 2.00 1999-Aug-27 09:09:33 4171693.61085 872122.11651 4730014.53447 11.80803 48.17153 533.11374 1.53678 3.63252 8.52309 2.09717 2.30883 -2.26977 8 0 8 2.00 1999-Aug-27 09:09:33 4171694.72678 872120.98541 4730013.18655 11.80801 48.17152 532.68346 0.20125 2.09212 8.09281 0.76165 0.76844 -2.70005 8 0 8 2.00 1999-Aug-27 09:09:33 4171696.76980 872121.56196 4730014.40681 11.80801 48.17151 535.00507 0.34753 1.32788 10.41442 0.90793 0.00419 -0.37844 8 0 8 2.00 1999-Aug-27 09:09:33 4171693.59671 872120.25449 4730013.51466 11.80800 48.17153 532.09050 -0.28296 3.24664 7.49985 0.27744 1.92295 -3.29301 8 0 8 2.00 1999-Aug-27 09:09:34 4171699.28132 872120.50191 4730017.23875 11.80799 48.17151 538.61011 -1.20403 1.54630 14.01946 -0.64363 0.22262 3.22660 8 0 8 2.00 1999-Aug-27 09:09:34 4171699.86172 872122.52524 4730018.26593 11.80801 48.17151 540.03051 0.65772 1.49948 15.43986 1.21812 0.17579 4.64700 8 0 8 2.00 1999-Aug-27 09:09:34 4171701.12598 872120.55104 4730018.00306 11.80799 48.17150 540.39051 -1.53342 0.70308 15.79985 -0.97302 -0.62061 5.00700 8 0 8 2.00 1999-Aug-27 09:09:34 4171708.37147 872121.90570 4730019.72723 11.80798 48.17146 546.58993 -1.69009 -3.63832 21.99927 -1.12969 -4.96200 11.20641 8 0 8 2.00 1999-Aug-27 09:09:34 4171703.20144 872119.61693 4730019.04888 11.80797 48.17150 542.39717 -2.87247 0.02918 17.80651 -2.31207 -1.29450 7.01365 8 0 8 2.00 1999-Aug-27 09:09:34 4171700.15044 872121.29836 4730016.95583 11.80800 48.17150 539.07533 -0.60228 0.60226 14.48468 -0.04188 -0.72143 3.69182 8 0 8 2.00 1999-Aug-27 09:09:34 4171697.86516 872120.21669 4730011.43870 11.80799 48.17149 533.32486 -1.19342 -1.24537 8.73420 -0.63302 -2.56905 -2.05866 8 0 8 2.00 1999-Aug-27 09:09:34 4171697.96791 872119.69143 4730013.95733 11.80798 48.17150 535.19699 -1.72859 0.43946 10.60634 -1.16820 -0.88422 -0.18652 8 0 8 2.00 1999-Aug-27 09:09:34 4171698.80346 872121.07641 4730013.12718 11.80800 48.17149 535.31286 -0.54390 -0.93479 10.72220 0.01650 -2.25847 -0.07066 8 0 8 2.00 1999-Aug-27 09:09:34 4171697.68479 872120.31293 4730015.46101 11.80799 48.17151 536.21745 -1.06230 1.55400 11.62680 -0.50191 0.23032 0.83394 8 0 8 2.00 1999-Aug-27 09:09:34 4171698.08641 872121.24988 4730015.79887 11.80800 48.17151 536.85924 -0.22736 1.34353 12.26858 0.33303 0.01984 1.47572 8 0 8 2.00 1999-Aug-27 09:09:34 4171696.75518 872120.52645 4730014.06298 11.80800 48.17151 534.59801 -0.66307 1.26714 10.00736 -0.10268 -0.05655 -0.78550 8 0 8 2.00 1999-Aug-27 09:09:34 4171694.69008 872118.20352 4730012.43216 11.80797 48.17152 531.71773 -2.51426 2.03997 7.12707 -1.95386 0.71629 -3.66578 8 0 8 2.00 1999-Aug-27 09:09:34 4171693.92961 872120.24470 4730013.62039 11.80800 48.17153 532.38526 -0.36065 3.07583 7.79461 0.19974 1.75215 -2.99825 8 0 8 2.00 1999-Aug-27 09:09:34 4171693.22238 872120.36607 4730013.27242 11.80800 48.17153 531.68086 -0.09714 3.34110 7.09021 0.46326 2.01742 -3.70265 8 0 8 2.00 1999-Aug-27 09:09:34 4171692.05442 872119.12393 4730014.20866 11.80799 48.17154 531.44655 -1.07399 5.00677 6.85590 -0.51359 3.68309 -3.93696 8 0 8 2.00 1999-Aug-27 09:09:34 4171694.53114 872121.02153 4730015.22175 11.80801 48.17153 534.07719 0.27664 3.58659 9.48654 0.83703 2.26291 -1.30632 8 0 8 2.00 1999-Aug-27 09:09:34 4171695.81222 872120.57806 4730015.25614 11.80800 48.17152 534.87858 -0.41960 2.74276 10.28792 0.14080 1.41908 -0.50493 8 0 8 2.00 1999-Aug-27 09:09:34 4171698.06618 872121.46356 4730016.26816 11.80801 48.17151 537.22488 -0.01407 1.63867 12.63423 0.54633 0.31498 1.84137 8 0 8 2.00 1999-Aug-27 09:09:34 4171699.01732 872119.70030 4730014.69030 11.80798 48.17150 536.42942 -1.93465 0.16151 11.83876 -1.37426 -1.16217 1.04591 8 0 8 2.00 1999-Aug-27 09:09:34 4171699.82202 872121.16891 4730015.59563 11.80800 48.17150 537.82974 -0.66178 -0.04558 13.23909 -0.10139 -1.36927 2.44623 8 0 8 2.00 1999-Aug-27 09:09:34 4171702.86784 872122.43685 4730017.59790 11.80801 48.17149 541.48304 -0.04395 -1.12515 16.89239 0.51645 -2.44883 6.09953 8 0 8 2.00 1999-Aug-27 09:09:34 4171702.63297 872122.24502 4730015.66322 11.80800 48.17148 539.86193 -0.18366 -2.21483 15.27127 0.37674 -3.53852 4.47841 8 0 8 2.00 1999-Aug-27 09:09:34 4171698.66254 872119.63600 4730012.37379 11.80798 48.17149 534.46291 -1.92499 -1.11480 9.87225 -1.36459 -2.43848 -0.92061 8 0 8 2.00 1999-Aug-27 09:09:34 4171697.02897 872120.82942 4730013.20924 11.80800 48.17150 534.18193 -0.42254 0.45188 9.59128 0.13786 -0.87181 -1.20158 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.35413 872121.80375 4730013.32505 11.80801 48.17150 534.61345 0.46463 0.14338 10.02280 1.02502 -1.18031 -0.77006 8 0 8 2.00 1999-Aug-27 09:09:35 4171696.44597 872120.61282 4730010.72912 11.80800 48.17149 531.92374 -0.51526 -0.74387 7.33308 0.04514 -2.06755 -3.45977 8 0 8 2.00 1999-Aug-27 09:09:35 4171695.36594 872120.34733 4730010.99191 11.80800 48.17150 531.37829 -0.55412 0.25962 6.78763 0.00627 -1.06407 -4.00522 8 0 8 2.00 1999-Aug-27 09:09:35 4171696.56324 872120.79878 4730013.25491 11.80800 48.17151 533.90775 -0.35723 0.82670 9.31709 0.20316 -0.49698 -1.47577 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.56720 872121.50942 4730014.70388 11.80801 48.17151 535.73980 0.13293 0.95240 11.14915 0.69332 -0.37128 0.35629 8 0 8 2.00 1999-Aug-27 09:09:35 4171698.25006 872119.86835 4730015.70630 11.80798 48.17151 536.70856 -1.61315 1.37308 12.11790 -1.05275 0.04940 1.32504 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.47598 872118.83529 4730014.64227 11.80797 48.17151 535.26940 -2.46594 1.38560 10.67875 -1.90555 0.06191 -0.11411 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.04959 872118.55109 4730013.83247 11.80797 48.17151 534.34886 -2.65688 1.19987 9.75820 -2.09648 -0.12381 -1.03465 8 0 8 2.00 1999-Aug-27 09:09:35 4171695.95069 872119.19402 4730015.53952 11.80798 48.17153 534.99125 -1.80269 3.04179 10.40059 -1.24229 1.71810 -0.39227 8 0 8 2.00 1999-Aug-27 09:09:35 4171693.49292 872119.03925 4730013.07133 11.80799 48.17153 531.52655 -1.45124 3.21198 6.93590 -0.89084 1.88830 -3.85696 8 0 8 2.00 1999-Aug-27 09:09:35 4171696.83615 872119.88164 4730015.95728 11.80799 48.17152 535.97439 -1.31081 2.56971 11.38374 -0.75041 1.24602 0.59088 8 0 8 2.00 1999-Aug-27 09:09:35 4171699.58061 872121.46155 4730017.91961 11.80800 48.17151 539.44378 -0.32594 1.63574 14.85313 0.23446 0.31205 4.06027 8 0 8 2.00 1999-Aug-27 09:09:35 4171699.45612 872122.39307 4730016.47007 11.80801 48.17150 538.40953 0.61135 0.61781 13.81887 1.17174 -0.70588 3.02602 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.32487 872121.59922 4730015.67403 11.80801 48.17151 536.31677 0.27042 1.76245 11.72611 0.83082 0.43877 0.93326 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.42957 872121.86201 4730016.07882 11.80801 48.17151 536.72260 0.50622 1.91597 12.13194 1.06662 0.59229 1.33908 8 0 8 2.00 1999-Aug-27 09:09:35 4171700.22852 872122.23658 4730017.06909 11.80801 48.17150 539.33874 0.30011 0.47778 14.74809 0.86050 -0.84590 3.95523 8 0 8 2.00 1999-Aug-27 09:09:35 4171696.45064 872119.53000 4730015.17631 11.80798 48.17152 535.09282 -1.57612 2.38368 10.50216 -1.01572 1.06000 -0.29070 8 0 8 2.00 1999-Aug-27 09:09:35 4171696.00356 872120.28397 4730014.02726 11.80800 48.17151 534.04766 -0.74662 1.82850 9.45700 -0.18622 0.50481 -1.33586 8 0 8 2.00 1999-Aug-27 09:09:35 4171694.99100 872120.59367 4730012.82991 11.80800 48.17151 532.53673 -0.23626 1.72129 7.94607 0.32413 0.39760 -2.84678 8 0 8 2.00 1999-Aug-27 09:09:35 4171696.60258 872121.95214 4730014.89366 11.80802 48.17151 535.31193 0.76367 1.71503 10.72128 1.32407 0.39135 -0.07158 8 0 8 2.00 1999-Aug-27 09:09:35 4171697.87955 872121.40642 4730013.75240 11.80801 48.17150 535.22065 -0.03181 0.10574 10.62999 0.52858 -1.21795 -0.16286 8 0 8 2.00 1999-Aug-27 09:09:35 4171695.59892 872119.39685 4730013.44616 11.80799 48.17151 533.22944 -1.53216 1.87137 8.63878 -0.97177 0.54768 -2.15408 8 0 8 2.00 1999-Aug-27 09:09:35 4171695.48999 872118.37937 4730014.52699 11.80797 48.17152 533.82485 -2.50582 2.82677 9.23420 -1.94543 1.50308 -1.55866 8 0 8 2.00 1999-Aug-27 09:09:35 4171695.51946 872118.63294 4730012.25455 11.80798 48.17151 532.18540 -2.26364 1.25112 7.59474 -1.70325 -0.07257 -3.19811 8 0 8 2.00 1999-Aug-27 09:09:35 4171692.90271 872117.84713 4730007.24512 11.80797 48.17150 526.63722 -2.49735 -0.06127 2.04657 -1.93696 -1.38496 -8.74629 8 0 8 2.00 1999-Aug-27 09:09:36 4171691.49051 872117.25739 4730005.97369 11.80797 48.17150 524.68747 -2.78563 0.21076 0.09681 -2.22523 -1.11293 -10.69605 8 0 8 2.00 1999-Aug-27 09:09:36 4171697.11850 872119.03844 4730011.99926 11.80798 48.17150 533.09434 -2.19394 -0.14727 8.50369 -1.63354 -1.47096 -2.28917 8 0 8 2.00 1999-Aug-27 09:09:36 4171697.22326 872118.14427 4730016.65148 11.80796 48.17152 536.50728 -3.09063 3.01525 11.91662 -2.53023 1.69156 1.12377 8 0 8 2.00 1999-Aug-27 09:09:36 4171694.39669 872118.54398 4730013.78273 11.80798 48.17153 532.57904 -2.12097 3.10274 7.98838 -1.56057 1.77906 -2.80447 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.58184 872119.94928 4730014.06818 11.80799 48.17152 533.75717 -0.98793 2.21442 9.16652 -0.42753 0.89073 -1.62634 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.00566 872120.37772 4730014.92336 11.80800 48.17153 534.07675 -0.45065 3.13966 9.48609 0.10975 1.81597 -1.30676 8 0 8 2.00 1999-Aug-27 09:09:36 4171692.81014 872119.18421 4730010.99778 11.80799 48.17152 529.55553 -1.16963 2.30502 4.96488 -0.60923 0.98134 -5.82798 8 0 8 2.00 1999-Aug-27 09:09:36 4171694.52287 872120.36450 4730010.80079 11.80800 48.17150 530.68787 -0.36479 0.74446 6.09722 0.19560 -0.57922 -4.69564 8 0 8 2.00 1999-Aug-27 09:09:36 4171700.30752 872122.07606 4730015.60292 11.80801 48.17149 538.27590 0.12682 -0.53315 13.68524 0.68721 -1.85684 2.89238 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.65064 872121.76281 4730014.43641 11.80802 48.17152 534.32396 0.77315 2.13328 9.73331 1.33355 0.80959 -1.05955 8 0 8 2.00 1999-Aug-27 09:09:36 4171696.32540 872121.31633 4730014.93405 11.80801 48.17152 535.07432 0.19803 2.04108 10.48367 0.75843 0.71740 -0.30919 8 0 8 2.00 1999-Aug-27 09:09:36 4171694.08971 872119.52159 4730015.00622 11.80799 48.17153 533.42373 -1.10123 3.99353 8.83307 -0.54083 2.66985 -1.95978 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.52061 872120.24332 4730013.64967 11.80800 48.17152 533.44548 -0.68758 1.93513 8.85483 -0.12719 0.61144 -1.93803 8 0 8 2.00 1999-Aug-27 09:09:36 4171696.71569 872121.29610 4730014.41147 11.80801 48.17151 534.93694 0.09837 1.41099 10.34629 0.65876 0.08730 -0.44657 8 0 8 2.00 1999-Aug-27 09:09:36 4171702.27376 872122.19924 4730017.69220 11.80800 48.17149 541.13307 -0.15496 -0.59272 16.54242 0.40543 -1.91641 5.74956 8 0 8 2.00 1999-Aug-27 09:09:36 4171698.50649 872119.52753 4730012.80096 11.80798 48.17149 534.66454 -1.99923 -0.69956 10.07388 -1.43884 -2.02324 -0.71898 8 0 8 2.00 1999-Aug-27 09:09:36 4171699.07462 872121.56962 4730015.98739 11.80800 48.17150 537.68845 -0.11661 0.69972 13.09779 0.44379 -0.62396 2.30494 8 0 8 2.00 1999-Aug-27 09:09:36 4171696.67511 872122.50627 4730012.84038 11.80802 48.17150 533.90491 1.29123 0.20830 9.31426 1.85163 -1.11539 -1.47860 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.56946 872120.59019 4730012.13965 11.80800 48.17151 532.39952 -0.35804 0.83957 7.80887 0.20235 -0.48411 -2.98399 8 0 8 2.00 1999-Aug-27 09:09:36 4171699.98802 872121.31653 4730013.55023 11.80800 48.17148 536.43413 -0.55126 -1.55325 11.84347 0.00914 -2.87693 1.05062 8 0 8 2.00 1999-Aug-27 09:09:36 4171697.80250 872121.74640 4730013.03644 11.80801 48.17149 534.68325 0.31674 -0.36738 10.09260 0.87714 -1.69106 -0.70026 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.93696 872121.90295 4730012.09481 11.80802 48.17150 532.78516 0.85173 0.34145 8.19451 1.41212 -0.98223 -2.59835 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.84480 872121.69328 4730012.81016 11.80801 48.17151 533.22943 0.66536 0.91771 8.63877 1.22576 -0.40597 -2.15408 8 0 8 2.00 1999-Aug-27 09:09:36 4171695.04357 872120.42302 4730014.05958 11.80800 48.17152 533.46404 -0.41406 2.52904 8.87339 0.14633 1.20536 -1.91947 8 0 8 2.00 1999-Aug-27 09:09:36 4171696.24344 872121.06228 4730015.90457 11.80801 48.17152 535.70933 -0.03386 2.78685 11.11867 0.52653 1.46316 0.32582 8 0 8 2.00 1999-Aug-27 09:09:37 4171693.44263 872120.98042 4730016.16529 11.80801 48.17154 534.06409 0.45914 5.01605 9.47344 1.01954 3.69236 -1.31942 8 0 8 2.00 1999-Aug-27 09:09:37 4171696.02366 872120.58354 4730015.12274 11.80800 48.17152 534.91794 -0.45750 2.49873 10.32729 0.10290 1.17505 -0.46557 8 0 8 2.00 1999-Aug-27 09:09:37 4171694.70894 872119.55184 4730013.01137 11.80799 48.17152 532.34564 -1.19834 2.20690 7.75499 -0.63794 0.88321 -3.03787 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.88447 872119.98281 4730014.36359 11.80798 48.17150 536.13780 -1.63093 -0.00255 11.54715 -1.07053 -1.32624 0.75429 8 0 8 2.00 1999-Aug-27 09:09:37 4171695.60032 872118.64288 4730010.78624 11.80798 48.17150 531.14543 -2.27047 0.21140 6.55478 -1.71007 -1.11228 -4.23808 8 0 8 2.00 1999-Aug-27 09:09:37 4171694.08106 872121.09215 4730013.98530 11.80801 48.17153 532.87169 0.43786 3.07951 8.28103 0.99826 1.75582 -2.51183 8 0 8 2.00 1999-Aug-27 09:09:37 4171691.22538 872120.25457 4730011.31036 11.80801 48.17153 528.90000 0.20237 3.50616 4.30935 0.76277 2.18248 -6.48351 8 0 8 2.00 1999-Aug-27 09:09:37 4171691.54630 872119.61168 4730014.47011 11.80800 48.17155 531.37623 -0.49258 5.47737 6.78558 0.06782 4.15369 -4.00728 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.60869 872120.75929 4730018.34504 11.80799 48.17152 539.03049 -0.81445 2.73545 14.43984 -0.25405 1.41176 3.64698 8 0 8 2.00 1999-Aug-27 09:09:37 4171697.69976 872120.98344 4730015.73357 11.80800 48.17151 536.52182 -0.40905 1.62262 11.93117 0.15135 0.29893 1.13831 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.39017 872122.76095 4730016.81731 11.80802 48.17151 538.02263 1.18957 1.57076 13.43198 1.74997 0.24708 2.63912 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.57029 872121.02755 4730018.49718 11.80800 48.17152 539.15540 -0.54401 2.82401 14.56475 0.01639 1.50033 3.77189 8 0 8 2.00 1999-Aug-27 09:09:37 4171701.32647 872121.50722 4730019.29340 11.80800 48.17151 541.61337 -0.63849 1.27158 17.02271 -0.07810 -0.05211 6.22986 8 0 8 2.00 1999-Aug-27 09:09:37 4171696.84721 872122.07441 4730016.42916 11.80802 48.17152 536.63249 0.83330 2.54198 12.04183 1.39370 1.21830 1.24898 8 0 8 2.00 1999-Aug-27 09:09:37 4171695.87386 872122.40752 4730013.79443 11.80802 48.17151 534.07930 1.35853 1.44402 9.48864 1.91893 0.12034 -1.30422 8 0 8 2.00 1999-Aug-27 09:09:37 4171696.67947 872122.63915 4730015.50826 11.80802 48.17152 535.91385 1.42042 1.96407 11.32320 1.98081 0.64039 0.53034 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.55431 872122.32682 4730014.70746 11.80802 48.17150 536.49839 0.73103 0.11017 11.90774 1.29143 -1.21351 1.11488 8 0 8 2.00 1999-Aug-27 09:09:37 4171693.80849 872121.01035 4730011.17499 11.80801 48.17151 530.58851 0.41357 1.41658 5.99786 0.97397 0.09290 -4.79500 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.04244 872122.43226 4730012.95954 11.80802 48.17149 534.87619 0.93899 -0.69825 10.28553 1.49939 -2.02194 -0.50733 8 0 8 2.00 1999-Aug-27 09:09:37 4171694.64738 872120.26629 4730008.96003 11.80800 48.17149 529.38412 -0.48640 -0.55899 4.79346 0.07399 -1.88268 -5.99940 8 0 8 2.00 1999-Aug-27 09:09:37 4171697.85162 872123.05508 4730012.88843 11.80803 48.17149 534.78362 1.58768 -0.70146 10.19297 2.14808 -2.02515 -0.59989 8 0 8 2.00 1999-Aug-27 09:09:37 4171700.61563 872123.27596 4730017.18426 11.80802 48.17150 539.81911 1.23828 0.11376 15.22845 1.79868 -1.20992 4.43559 8 0 8 2.00 1999-Aug-27 09:09:37 4171698.43581 872121.05763 4730014.89759 11.80800 48.17150 536.38951 -0.48705 0.51693 11.79885 0.07334 -0.80676 1.00599 8 0 8 2.00 1999-Aug-27 09:09:37 4171694.77402 872119.84318 4730015.80402 11.80799 48.17153 534.50881 -0.92648 3.97744 9.91815 -0.36608 2.65375 -0.87470 8 0 8 2.00 1999-Aug-27 09:09:37 4171696.48262 872119.07398 4730013.67040 11.80798 48.17151 533.92934 -2.02903 1.42559 9.33869 -1.46864 0.10190 -1.45417 8 0 8 2.00 1999-Aug-27 09:09:38 4171694.93509 872119.07012 4730015.93280 11.80798 48.17153 534.60441 -1.71614 4.06372 10.01375 -1.15574 2.74003 -0.77910 8 0 8 2.00 1999-Aug-27 09:09:38 4171693.15885 872118.95806 4730014.34136 11.80799 48.17154 532.24376 -1.46235 4.31501 7.65310 -0.90195 2.99132 -3.13976 8 0 8 2.00 1999-Aug-27 09:09:38 4171693.98307 872119.36781 4730014.46331 11.80799 48.17153 532.92859 -1.22994 3.73270 8.33794 -0.66954 2.40901 -2.45492 8 0 8 2.00 1999-Aug-27 09:09:38 4171692.82103 872120.59896 4730015.13101 11.80801 48.17154 532.83557 0.21295 4.83783 8.24492 0.77335 3.51414 -2.54794 8 0 8 2.00 1999-Aug-27 09:09:38 4171692.07555 872120.59957 4730012.61332 11.80801 48.17153 530.47297 0.36610 3.70241 5.88232 0.92650 2.37873 -4.91054 8 0 8 2.00 1999-Aug-27 09:09:38 4171697.83623 872120.02916 4730011.72810 11.80799 48.17149 533.49603 -1.37106 -1.00267 8.90537 -0.81067 -2.32636 -1.88748 8 0 8 2.00 1999-Aug-27 09:09:38 4171698.75223 872119.55535 4730012.51049 11.80798 48.17149 534.61231 -2.02229 -1.07676 10.02165 -1.46189 -2.40044 -0.77120 8 0 8 2.00 1999-Aug-27 09:09:38 4171697.35350 872119.44372 4730012.59464 11.80798 48.17150 533.74670 -1.84532 0.01658 9.15605 -1.28493 -1.30710 -1.63681 8 0 8 2.00 1999-Aug-27 09:09:38 4171696.89799 872120.30768 4730013.37937 11.80799 48.17150 534.15199 -0.90644 0.74043 9.56134 -0.34604 -0.58326 -1.23152 8 0 8 2.00 1999-Aug-27 09:09:38 4171693.99146 872122.16907 4730011.68825 11.80803 48.17151 531.24853 1.51033 1.44874 6.65788 2.07073 0.12506 -4.13498 8 0 8 2.00 1999-Aug-27 09:09:38 4171699.06929 872120.92377 4730013.77041 11.80800 48.17149 535.94486 -0.74771 -0.67642 11.35421 -0.18731 -2.00011 0.56135 8 0 8 2.00 1999-Aug-27 09:09:38 4171698.09780 872120.89598 4730012.04552 11.80800 48.17149 534.02159 -0.57611 -1.11394 9.43094 -0.01571 -2.43762 -1.36192 8 0 8 2.00 1999-Aug-27 09:09:38 4171697.62832 872120.08453 4730014.48188 11.80799 48.17151 535.41982 -1.27432 0.97703 10.82917 -0.71392 -0.34665 0.03631 8 0 8 2.00 1999-Aug-27 09:09:38 4171698.37965 872120.21252 4730014.80919 11.80799 48.17150 536.17164 -1.30279 0.62780 11.58099 -0.74239 -0.69589 0.78813 8 0 8 2.00 1999-Aug-27 09:09:38 4171700.21005 872120.77261 4730013.85652 11.80799 48.17148 536.73307 -1.12910 -1.42799 12.14242 -0.56870 -2.75167 1.34956 8 0 8 2.00 1999-Aug-27 09:09:38 4171696.37267 872120.32939 4730013.50859 11.80800 48.17151 533.90832 -0.77769 1.20646 9.31766 -0.21730 -0.11723 -1.47520 8 0 8 2.00 1999-Aug-27 09:09:38 4171695.67572 872118.84021 4730010.94539 11.80798 48.17150 531.34018 -2.09273 0.23245 6.74952 -1.53234 -1.09123 -4.04334 8 0 8 2.00 1999-Aug-27 09:09:38 4171697.02986 872120.00599 4730015.83543 11.80799 48.17152 536.02703 -1.22873 2.32820 11.43637 -0.66833 1.00452 0.64352 8 0 8 2.00 1999-Aug-27 09:09:38 4171697.45395 872119.42408 4730016.50221 11.80798 48.17152 536.72130 -1.88510 2.55228 12.13064 -1.32471 1.22860 1.33779 8 0 8 2.00 1999-Aug-27 09:09:38 4171696.55617 872120.85156 4730014.43792 11.80800 48.17151 534.79185 -0.30412 1.61276 10.20120 0.25628 0.28907 -0.59166 8 0 8 2.00 1999-Aug-27 09:09:38 4171694.89435 872120.71952 4730013.86291 11.80800 48.17152 533.26055 -0.09331 2.46151 8.66989 0.46709 1.13783 -2.12296 8 0 8 2.00 1999-Aug-27 09:09:38 4171692.49716 872119.92798 4730011.62320 11.80800 48.17152 529.91875 -0.37755 2.83699 5.32810 0.18285 1.51331 -5.46476 8 0 8 2.00 1999-Aug-27 09:09:38 4171698.75757 872120.40647 4730013.36202 11.80799 48.17149 535.36646 -1.19027 -0.64254 10.77581 -0.62987 -1.96623 -0.01705 8 0 8 2.00 1999-Aug-27 09:09:38 4171693.40070 872121.00298 4730014.59494 11.80801 48.17153 532.86966 0.48981 3.99592 8.27900 1.05020 2.67223 -2.51386 8 0 8 2.00 1999-Aug-27 09:09:38 4171698.66517 872121.52431 4730012.70301 11.80800 48.17149 534.96764 -0.07718 -1.18509 10.37698 0.48322 -2.50877 -0.41587 8 0 8 2.00 1999-Aug-27 09:09:39 4171695.15203 872119.94455 4730011.12579 11.80799 48.17150 531.28345 -0.90461 0.56633 6.69279 -0.34421 -0.75735 -4.10007 8 0 8 2.00 1999-Aug-27 09:09:39 4171692.91222 872119.42413 4730011.31360 11.80799 48.17152 529.89024 -0.95567 2.40461 5.29959 -0.39527 1.08092 -5.49327 8 0 8 2.00 1999-Aug-27 09:09:39 4171691.15859 872120.87789 4730012.05457 11.80802 48.17153 529.49601 0.82617 3.95615 4.90536 1.38657 2.63247 -5.88750 8 0 8 2.00 1999-Aug-27 09:09:39 4171694.41977 872121.57805 4730012.54706 11.80802 48.17151 532.08741 0.84417 1.79920 7.49675 1.40457 0.47552 -3.29610 8 0 8 2.00 1999-Aug-27 09:09:39 4171695.59139 872120.43760 4730013.39115 11.80800 48.17151 533.32556 -0.51190 1.68148 8.73491 0.04850 0.35779 -2.05795 8 0 8 2.00 1999-Aug-27 09:09:39 4171698.53769 872120.26984 4730013.58251 11.80799 48.17149 535.36858 -1.27901 -0.31429 10.77792 -0.71862 -1.63797 -0.01493 8 0 8 2.00 1999-Aug-27 09:09:39 4171697.70969 872120.31103 4730014.25080 11.80799 48.17150 535.33166 -1.06926 0.72904 10.74100 -0.50886 -0.59465 -0.05185 8 0 8 2.00 1999-Aug-27 09:09:39 4171697.38095 872120.39417 4730013.71053 11.80799 48.17150 534.72583 -0.92061 0.59583 10.13518 -0.36022 -0.72786 -0.65768 8 0 8 2.00 1999-Aug-27 09:09:39 4171697.79485 872119.28249 4730013.74564 11.80798 48.17150 534.87047 -2.09346 0.48687 10.27982 -1.53307 -0.83682 -0.51304 8 0 8 2.00 1999-Aug-27 09:09:39 4171698.91720 872120.86233 4730015.57009 11.80800 48.17150 537.17821 -0.77672 0.64409 12.58755 -0.21632 -0.67960 1.79470 8 0 8 2.00 1999-Aug-27 09:09:39 4171701.18089 872121.54729 4730017.43251 11.80800 48.17150 540.13718 -0.56948 0.13061 15.54652 -0.00909 -1.19307 4.75366 8 0 8 2.00 1999-Aug-27 09:09:39 4171699.74052 872120.27928 4730018.48044 11.80799 48.17152 539.80473 -1.51591 2.07340 15.21407 -0.95551 0.74972 4.42121 8 0 8 2.00 1999-Aug-27 09:09:39 4171697.18499 872119.92802 4730015.13635 11.80799 48.17151 535.59673 -1.33680 1.76072 11.00608 -0.77640 0.43703 0.21322 8 0 8 2.00 1999-Aug-27 09:09:39 4171698.09297 872120.62413 4730017.00237 11.80799 48.17152 537.67491 -0.84121 2.23678 13.08425 -0.28082 0.91309 2.29140 8 0 8 2.00 1999-Aug-27 09:09:39 4171698.66033 872120.96833 4730017.92186 11.80800 48.17152 538.77741 -0.62041 2.38368 14.18675 -0.06001 1.06000 3.39390 8 0 8 2.00 1999-Aug-27 09:09:39 4171695.45422 872120.14946 4730014.57213 11.80800 48.17152 534.07669 -0.76587 2.61306 9.48604 -0.20547 1.28938 -1.30682 8 0 8 2.00 1999-Aug-27 09:09:39 4171693.42354 872120.62029 4730014.16050 11.80801 48.17153 532.50862 0.11054 3.74788 7.91797 0.67094 2.42419 -2.87489 8 0 8 2.00 1999-Aug-27 09:09:39 4171693.89426 872121.81613 4730014.25517 11.80802 48.17153 533.04964 1.18475 3.28535 8.45898 1.74514 1.96166 -2.33387 8 0 8 2.00 1999-Aug-27 09:09:39 4171699.41413 872124.10661 4730017.58392 11.80804 48.17151 539.44595 2.29721 1.12998 14.85529 2.85761 -0.19371 4.06243 8 0 8 2.00 1999-Aug-27 09:09:39 4171700.18274 872122.32864 4730016.98796 11.80801 48.17150 539.26096 0.39959 0.44303 14.67031 0.95998 -0.88066 3.87745 8 0 8 2.00 1999-Aug-27 09:09:39 4171700.09325 872121.95425 4730015.39756 11.80801 48.17149 537.96638 0.05143 -0.49525 13.37573 0.61182 -1.81894 2.58287 8 0 8 2.00 1999-Aug-27 09:09:39 4171698.81576 872121.40443 4730015.00241 11.80800 48.17150 536.76297 -0.22534 0.25683 12.17231 0.33506 -1.06686 1.37945 8 0 8 2.00 1999-Aug-27 09:09:39 4171699.28642 872120.20719 4730013.81204 11.80799 48.17149 536.01982 -1.49355 -0.69776 11.42917 -0.93315 -2.02145 0.63631 8 0 8 2.00 1999-Aug-27 09:09:39 4171696.96069 872119.79952 4730011.42593 11.80799 48.17149 532.66798 -1.41668 -0.53058 8.07732 -0.85628 -1.85426 -2.71554 8 0 8 2.00 1999-Aug-27 09:09:39 4171697.55229 872120.85111 4730011.75205 11.80800 48.17149 533.44069 -0.50840 -0.90494 8.85003 0.05200 -2.22862 -1.94283 8 0 8 2.00 1999-Aug-27 09:09:40 4171695.29267 872118.67825 4730010.71330 11.80798 48.17150 530.89508 -2.17288 0.38176 6.30442 -1.61249 -0.94193 -4.48843 8 0 8 2.00 1999-Aug-27 09:09:40 4171695.24319 872119.38763 4730012.20358 11.80799 48.17151 532.07006 -1.46839 1.30355 7.47941 -0.90799 -0.02014 -3.31345 8 0 8 2.00 1999-Aug-27 09:09:40 4171694.72579 872118.38037 4730012.24280 11.80797 48.17151 531.62407 -2.34846 1.86067 7.03341 -1.78806 0.53699 -3.75944 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.67452 872119.33485 4730013.52711 11.80798 48.17150 534.63623 -2.01759 0.42091 10.04558 -1.45719 -0.90277 -0.74728 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.82608 872120.05972 4730012.91180 11.80799 48.17150 534.37559 -1.33907 -0.21051 9.78494 -0.77867 -1.53420 -1.00792 8 0 8 2.00 1999-Aug-27 09:09:40 4171695.80533 872119.69099 4730014.86321 11.80799 48.17152 534.46023 -1.28648 2.62100 9.86957 -0.72609 1.29731 -0.92328 8 0 8 2.00 1999-Aug-27 09:09:40 4171692.67895 872119.11809 4730011.72434 11.80799 48.17152 530.00226 -1.20750 2.89534 5.41161 -0.64710 1.57165 -5.38125 8 0 8 2.00 1999-Aug-27 09:09:40 4171691.45664 872121.35897 4730013.68363 11.80802 48.17154 530.97012 1.23609 4.75183 6.37947 1.79648 3.42815 -4.41339 8 0 8 2.00 1999-Aug-27 09:09:40 4171691.16821 872120.76859 4730011.61072 11.80802 48.17153 529.15664 0.71722 3.66979 4.56599 1.27762 2.34611 -6.22687 8 0 8 2.00 1999-Aug-27 09:09:40 4171694.84555 872121.34840 4730012.36005 11.80801 48.17151 532.19466 0.53225 1.39895 7.60401 1.09265 0.07527 -3.18885 8 0 8 2.00 1999-Aug-27 09:09:40 4171695.86518 872122.37059 4730013.40839 11.80802 48.17151 533.78094 1.32417 1.19853 9.19028 1.88456 -0.12515 -1.60257 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.45617 872121.03581 4730013.19940 11.80800 48.17150 534.48163 -0.30794 0.10226 9.89098 0.25246 -1.22142 -0.90188 8 0 8 2.00 1999-Aug-27 09:09:40 4171698.48020 872121.60317 4730016.10076 11.80801 48.17151 537.38947 0.03786 1.20377 12.79881 0.59826 -0.11991 2.00595 8 0 8 2.00 1999-Aug-27 09:09:40 4171700.74658 872122.11860 4730015.66166 11.80801 48.17149 538.61208 0.07861 -0.82071 14.02143 0.63901 -2.14439 3.22857 8 0 8 2.00 1999-Aug-27 09:09:40 4171700.82095 872121.21961 4730016.15657 11.80799 48.17149 538.90673 -0.81658 -0.40781 14.31608 -0.25618 -1.73150 3.52322 8 0 8 2.00 1999-Aug-27 09:09:40 4171699.66718 872122.36392 4730014.94434 11.80801 48.17149 537.40644 0.53962 -0.54921 12.81578 1.10002 -1.87289 2.02292 8 0 8 2.00 1999-Aug-27 09:09:40 4171698.11038 872120.88128 4730012.24206 11.80800 48.17149 534.17425 -0.59307 -0.98979 9.58359 -0.03268 -2.31348 -1.20926 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.60006 872121.74786 4730012.09196 11.80801 48.17149 533.84753 0.35960 -0.84983 9.25688 0.91999 -2.17351 -1.53598 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.60014 872121.18845 4730014.26184 11.80800 48.17150 535.38812 -0.18799 0.68251 10.79746 0.37241 -0.64117 0.00460 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.91842 872121.73975 4730013.75973 11.80801 48.17150 535.29698 0.28651 0.03145 10.70632 0.84691 -1.29223 -0.08653 8 0 8 2.00 1999-Aug-27 09:09:40 4171695.15522 872122.21755 4730015.22631 11.80802 48.17152 534.65120 1.31964 2.95207 10.06055 1.88004 1.62839 -0.73231 8 0 8 2.00 1999-Aug-27 09:09:40 4171697.37458 872120.47847 4730014.81229 11.80799 48.17151 535.55415 -0.83679 1.32239 10.96349 -0.27639 -0.00130 0.17064 8 0 8 2.00 1999-Aug-27 09:09:40 4171699.01698 872122.98577 4730013.90137 11.80802 48.17149 536.28969 1.28136 -0.86535 11.69904 1.84176 -2.18903 0.90618 8 0 8 2.00 1999-Aug-27 09:09:40 4171698.97986 872121.44571 4730014.16573 11.80800 48.17149 536.25228 -0.21851 -0.42714 11.66162 0.34188 -1.75083 0.86876 8 0 8 2.00 1999-Aug-27 09:09:40 4171694.18912 872120.61192 4730011.25548 11.80800 48.17151 530.84259 -0.05431 1.25339 6.25193 0.50608 -0.07030 -4.54093 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.15714 872121.60191 4730014.40438 11.80801 48.17151 535.26157 0.30738 1.03765 10.67091 0.86777 -0.28604 -0.12194 8 0 8 2.00 1999-Aug-27 09:09:41 4171700.23085 872123.47530 4730018.63114 11.80803 48.17151 540.67326 1.51214 1.32894 16.08261 2.07254 0.00526 5.28975 8 0 8 2.00 1999-Aug-27 09:09:41 4171699.59723 872122.87076 4730017.97253 11.80802 48.17151 539.68638 1.05005 1.44404 15.09573 1.61044 0.12035 4.30287 8 0 8 2.00 1999-Aug-27 09:09:41 4171698.65007 872121.55394 4730015.03897 11.80801 48.17150 536.70246 -0.04508 0.37926 12.11181 0.51531 -0.94442 1.31895 8 0 8 2.00 1999-Aug-27 09:09:41 4171701.61508 872120.26873 4730015.52614 11.80798 48.17149 538.82561 -1.90984 -1.26248 14.23495 -1.34944 -2.58616 3.44209 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.30997 872120.60706 4730013.70212 11.80800 48.17150 534.70228 -0.69770 0.60953 10.11163 -0.13730 -0.71415 -0.68123 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.72924 872120.32060 4730014.46824 11.80799 48.17151 535.50775 -1.06390 0.85834 10.91710 -0.50350 -0.46535 0.12424 8 0 8 2.00 1999-Aug-27 09:09:41 4171696.97215 872118.37119 4730016.35866 11.80797 48.17152 536.15613 -2.81713 2.96852 11.56548 -2.25673 1.64483 0.77262 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.03364 872119.39636 4730015.43828 11.80798 48.17152 535.65036 -1.82623 2.15354 11.05971 -1.26583 0.82985 0.26685 8 0 8 2.00 1999-Aug-27 09:09:41 4171695.27896 872120.73886 4730018.24424 11.80800 48.17154 536.77898 -0.15308 5.09995 12.18832 0.40731 3.77627 1.39547 8 0 8 2.00 1999-Aug-27 09:09:41 4171692.97992 872119.35118 4730014.80335 11.80799 48.17154 532.52485 -1.04093 4.69367 7.93419 -0.48054 3.36999 -2.85866 8 0 8 2.00 1999-Aug-27 09:09:41 4171692.78364 872120.66451 4730014.54407 11.80801 48.17154 532.38275 0.28477 4.46367 7.79210 0.84517 3.13999 -3.00076 8 0 8 2.00 1999-Aug-27 09:09:41 4171693.71699 872120.52385 4730014.08167 11.80801 48.17153 532.62828 -0.04391 3.49598 8.03763 0.51649 2.17230 -2.75523 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.27466 872122.78262 4730014.37126 11.80802 48.17150 535.47473 1.43905 0.74981 10.88408 1.99945 -0.57388 0.09122 8 0 8 2.00 1999-Aug-27 09:09:41 4171692.98978 872121.83057 4730011.10906 11.80802 48.17151 530.11687 1.38397 1.84469 5.52621 1.94437 0.52100 -5.26664 8 0 8 2.00 1999-Aug-27 09:09:41 4171694.65876 872120.61319 4730010.27301 11.80800 48.17150 530.41725 -0.14917 0.25544 5.82659 0.41123 -1.06824 -4.96626 8 0 8 2.00 1999-Aug-27 09:09:41 4171695.18119 872120.98903 4730010.73617 11.80801 48.17150 531.15470 0.11181 0.12597 6.56404 0.67220 -1.19772 -4.22881 8 0 8 2.00 1999-Aug-27 09:09:41 4171696.43156 872118.89827 4730013.28241 11.80798 48.17151 533.58292 -2.19058 1.23088 8.99226 -1.63018 -0.09281 -1.80060 8 0 8 2.00 1999-Aug-27 09:09:41 4171698.44302 872120.09438 4730013.71737 11.80799 48.17150 535.38332 -1.43139 -0.12854 10.79267 -0.87099 -1.45223 -0.00019 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.89623 872120.56540 4730014.62135 11.80799 48.17150 535.76426 -0.85845 0.80132 11.17360 -0.29805 -0.52237 0.38075 8 0 8 2.00 1999-Aug-27 09:09:41 4171700.53650 872119.58913 4730014.18655 11.80797 48.17149 537.03058 -2.35434 -1.26554 12.43992 -1.79395 -2.58922 1.64707 8 0 8 2.00 1999-Aug-27 09:09:41 4171697.10785 872120.46373 4730016.27228 11.80799 48.17152 536.46592 -0.79664 2.49286 11.87527 -0.23624 1.16917 1.08241 8 0 8 2.00 1999-Aug-27 09:09:41 4171696.72246 872121.25712 4730017.58308 11.80801 48.17153 537.29935 0.05883 3.52715 12.70870 0.61923 2.20346 1.91584 8 0 8 2.00 1999-Aug-27 09:09:41 4171696.54422 872120.37505 4730017.40870 11.80800 48.17153 536.93268 -0.76810 3.67536 12.34203 -0.20771 2.35168 1.54917 8 0 8 2.00 1999-Aug-27 09:09:41 4171696.85513 872120.19941 4730014.86649 11.80799 48.17151 535.21736 -1.00365 1.77996 10.62671 -0.44325 0.45628 -0.16615 8 0 8 2.00 1999-Aug-27 09:09:42 4171697.36181 872118.39137 4730014.55079 11.80797 48.17151 535.06613 -2.87711 1.47555 10.47548 -2.31671 0.15187 -0.31738 8 0 8 2.00 1999-Aug-27 09:09:42 4171700.29486 872119.08585 4730016.15221 11.80797 48.17150 538.26886 -2.79752 0.29835 13.67821 -2.23713 -1.02533 2.88535 8 0 8 2.00 1999-Aug-27 09:09:42 4171695.78933 872120.46729 4730017.56443 11.80800 48.17154 536.56853 -0.52334 4.31575 11.97787 0.03706 2.99206 1.18501 8 0 8 2.00 1999-Aug-27 09:09:42 4171696.17197 872120.84306 4730013.57114 11.80800 48.17151 533.89401 -0.23382 1.31623 9.30336 0.32657 -0.00746 -1.48950 8 0 8 2.00 1999-Aug-27 09:09:42 4171699.61109 872120.96823 4730015.46169 11.80799 48.17150 537.56485 -0.81505 0.04954 12.97420 -0.25465 -1.27414 2.18134 8 0 8 2.00 1999-Aug-27 09:09:42 4171697.76346 872119.98697 4730014.17450 11.80799 48.17150 535.26569 -1.39747 0.68835 10.67503 -0.83707 -0.63534 -0.11783 8 0 8 2.00 1999-Aug-27 09:09:42 4171696.89494 872120.19906 4730015.53561 11.80799 48.17152 535.74189 -1.01214 2.19721 11.15123 -0.45174 0.87353 0.35838 8 0 8 2.00 1999-Aug-27 09:09:42 4171695.81978 872120.13971 4730012.97252 11.80799 48.17151 533.12206 -0.85022 1.28113 8.53141 -0.28982 -0.04255 -2.26145 8 0 8 2.00 1999-Aug-27 09:09:42 4171695.33620 872120.60644 4730014.72257 11.80800 48.17152 534.17412 -0.29441 2.72979 9.58347 0.26599 1.40611 -1.20939 8 0 8 2.00 1999-Aug-27 09:09:42 4171697.47775 872120.60978 4730014.41898 11.80800 48.17151 535.34634 -0.72937 0.96482 10.75568 -0.16897 -0.35886 -0.03717 8 0 8 2.00 1999-Aug-27 09:09:42 4171694.40429 872120.32412 4730012.28650 11.80800 48.17151 531.71203 -0.38005 1.82793 7.12137 0.18034 0.50424 -3.67148 8 0 8 2.00 1999-Aug-27 09:09:42 4171694.16059 872120.54094 4730013.42581 11.80800 48.17152 532.43148 -0.11795 2.73242 7.84082 0.44244 1.40874 -2.95203 8 0 8 2.00 1999-Aug-27 09:09:42 4171695.09491 872121.20464 4730014.25094 11.80801 48.17152 533.74681 0.34051 2.50003 9.15616 0.90091 1.17635 -1.63670 8 0 8 2.00 1999-Aug-27 09:09:42 4171696.53188 872120.87809 4730012.84100 11.80800 48.17150 533.58967 -0.27318 0.56144 8.99902 0.28721 -0.76224 -1.79384 8 0 8 2.00 1999-Aug-27 09:09:42 4171692.26677 872119.67148 4730009.25792 11.80800 48.17151 527.97088 -0.58148 1.46673 3.38023 -0.02108 0.14304 -7.41263 8 0 8 2.00 1999-Aug-27 09:09:42 4171694.33169 872121.20333 4730013.59550 11.80801 48.17152 532.76001 0.49541 2.61980 8.16936 1.05581 1.29611 -2.62350 8 0 8 2.00 1999-Aug-27 09:09:42 4171695.44890 872119.90931 4730011.23702 11.80799 48.17150 531.55531 -0.99985 0.42937 6.96466 -0.43945 -0.89432 -3.82820 8 0 8 2.00 1999-Aug-27 09:09:42 4171697.73081 872119.89397 4730014.03555 11.80799 48.17150 535.12814 -1.48181 0.63368 10.53748 -0.92142 -0.69001 -0.25537 8 0 8 2.00 1999-Aug-27 09:09:42 4171696.98295 872118.64507 4730017.03042 11.80797 48.17153 536.70112 -2.55126 3.36688 12.11046 -1.99086 2.04319 1.31760 8 0 8 2.00 1999-Aug-27 09:09:42 4171699.30286 872117.80808 4730014.86369 11.80795 48.17150 536.48678 -3.84525 0.35741 11.89612 -3.28486 -0.96628 1.10326 8 0 8 2.00 1999-Aug-27 09:09:42 4171701.19840 872119.03803 4730014.54529 11.80796 48.17148 537.65477 -3.02923 -1.42504 13.06412 -2.46883 -2.74873 2.27126 8 0 8 2.00 1999-Aug-27 09:09:42 4171696.85464 872118.25789 4730015.04906 11.80797 48.17152 535.08812 -2.90398 2.19812 10.49747 -2.34358 0.87444 -0.29539 8 0 8 2.00 1999-Aug-27 09:09:42 4171693.75820 872120.79611 4730013.82056 11.80801 48.17153 532.49777 0.21416 3.25027 7.90712 0.77455 1.92659 -2.88574 8 0 8 2.00 1999-Aug-27 09:09:42 4171698.08504 872120.14797 4730013.75417 11.80799 48.17150 535.18438 -1.30567 0.14893 10.59372 -0.74528 -1.17476 -0.19913 8 0 8 2.00 1999-Aug-27 09:09:42 4171697.28623 872120.46076 4730015.77416 11.80799 48.17152 536.21079 -0.83605 2.03101 11.62013 -0.27565 0.70732 0.82728 8 0 8 2.00 1999-Aug-27 09:09:43 4171694.90418 872119.59313 4730016.13852 11.80799 48.17153 534.80891 -1.19787 4.14371 10.21825 -0.63747 2.82002 -0.57461 8 0 8 2.00 1999-Aug-27 09:09:43 4171695.13206 872119.77124 4730013.35911 11.80799 48.17152 532.91091 -1.07016 2.09674 8.32025 -0.50976 0.77305 -2.47260 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.16571 872119.67096 4730016.35857 11.80798 48.17152 536.45980 -1.58447 2.62908 11.86915 -1.02408 1.30540 1.07629 8 0 8 2.00 1999-Aug-27 09:09:43 4171699.18934 872120.57076 4730020.42699 11.80799 48.17153 540.93516 -1.11781 3.72913 16.34450 -0.55742 2.40545 5.55165 8 0 8 2.00 1999-Aug-27 09:09:43 4171698.40631 872121.04109 4730016.66561 11.80800 48.17151 537.68542 -0.49720 1.72007 13.09477 0.06320 0.39638 2.30191 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.09965 872121.75081 4730016.22639 11.80801 48.17152 536.60202 0.46489 2.27198 12.01137 1.02529 0.94829 1.21851 8 0 8 2.00 1999-Aug-27 09:09:43 4171696.06521 872122.54206 4730014.89379 11.80803 48.17152 535.04175 1.45108 2.01711 10.45109 2.01147 0.69343 -0.34176 8 0 8 2.00 1999-Aug-27 09:09:43 4171691.94580 872120.91463 4730010.15318 11.80802 48.17152 528.59810 0.70105 2.10833 4.00745 1.26144 0.78465 -6.78541 8 0 8 2.00 1999-Aug-27 09:09:43 4171695.93370 872120.36779 4730011.31158 11.80800 48.17150 531.98991 -0.65028 0.05558 7.39926 -0.08988 -1.26810 -3.39360 8 0 8 2.00 1999-Aug-27 09:09:43 4171696.30528 872120.33452 4730012.07169 11.80800 48.17150 532.79433 -0.75888 0.29655 8.20368 -0.19848 -1.02714 -2.58918 8 0 8 2.00 1999-Aug-27 09:09:43 4171693.65256 872119.78578 4730011.38595 11.80800 48.17151 530.47679 -0.75318 1.85773 5.88614 -0.19278 0.53404 -4.90672 8 0 8 2.00 1999-Aug-27 09:09:43 4171694.42287 872120.92124 4730011.78981 11.80801 48.17151 531.43554 0.20062 1.39208 6.84489 0.76102 0.06840 -3.94797 8 0 8 2.00 1999-Aug-27 09:09:43 4171696.60174 872121.72687 4730014.02268 11.80801 48.17151 534.63164 0.54334 1.16913 10.04098 1.10374 -0.15455 -0.75187 8 0 8 2.00 1999-Aug-27 09:09:43 4171693.45936 872121.25458 4730013.20758 11.80802 48.17152 531.90850 0.72408 2.98953 7.31785 1.28447 1.66585 -3.47501 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.21918 872120.93450 4730015.08153 11.80800 48.17151 535.71556 -0.35861 1.54576 11.12490 0.20179 0.22207 0.33204 8 0 8 2.00 1999-Aug-27 09:09:43 4171699.70612 872120.97369 4730016.30520 11.80799 48.17150 538.25617 -0.82916 0.54194 13.66551 -0.26877 -0.78175 2.87266 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.02645 872119.64872 4730014.70587 11.80798 48.17151 535.13435 -1.57775 1.63186 10.54369 -1.01735 0.30817 -0.24916 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.43101 872120.36149 4730015.65495 11.80799 48.17151 536.20292 -0.96284 1.86105 11.61227 -0.40245 0.53736 0.81941 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.65205 872120.19559 4730014.62481 11.80799 48.17151 535.55697 -1.17046 1.03812 10.96631 -0.61007 -0.28557 0.17346 8 0 8 2.00 1999-Aug-27 09:09:43 4171697.43022 872119.32991 4730013.03915 11.80798 48.17150 534.11248 -1.97243 0.27442 9.52182 -1.41204 -1.04926 -1.27103 8 0 8 2.00 1999-Aug-27 09:09:43 4171699.35400 872122.87431 4730015.32937 11.80802 48.17150 537.55855 1.10330 -0.14183 12.96790 1.66370 -1.46552 2.17504 8 0 8 2.00 1999-Aug-27 09:09:43 4171699.09081 872121.87906 4730015.75238 11.80801 48.17150 537.56612 0.18297 0.48399 12.97547 0.74336 -0.83969 2.18261 8 0 8 2.00 1999-Aug-27 09:09:43 4171696.97064 872121.97089 4730013.05812 11.80802 48.17150 534.18702 0.70671 0.21959 9.59637 1.26711 -1.10410 -1.19649 8 0 8 2.00 1999-Aug-27 09:09:43 4171691.76096 872120.49415 4730010.54077 11.80801 48.17152 528.70887 0.32729 2.56575 4.11822 0.88769 1.24206 -6.67464 8 0 8 2.00 1999-Aug-27 09:09:43 4171694.40816 872120.57044 4730015.12435 11.80800 48.17153 533.86277 -0.13974 3.68012 9.27212 0.42066 2.35644 -1.52074 8 0 8 2.00 1999-Aug-27 09:09:44 4171699.06843 872120.29562 4730018.88993 11.80799 48.17152 539.67335 -1.36238 2.83421 15.08269 -0.80199 1.51052 4.28984 8 0 8 2.00 1999-Aug-27 09:09:44 4171698.37365 872120.56215 4730017.82042 11.80799 48.17152 538.45924 -0.95933 2.58707 13.86858 -0.39893 1.26338 3.07573 8 0 8 2.00 1999-Aug-27 09:09:44 4171701.47020 872123.13160 4730020.47978 11.80802 48.17151 542.81290 0.92210 1.71026 18.22224 1.48249 0.38657 7.42939 8 0 8 2.00 1999-Aug-27 09:09:44 4171699.29855 872122.01117 4730017.12211 11.80801 48.17151 538.74041 0.26977 1.22581 14.14976 0.83017 -0.09787 3.35690 8 0 8 2.00 1999-Aug-27 09:09:44 4171702.56294 872121.88352 4730018.06390 11.80800 48.17149 541.55573 -0.52318 -0.50760 16.96507 0.03721 -1.83129 6.17221 8 0 8 2.00 1999-Aug-27 09:09:44 4171704.68765 872122.90472 4730017.94736 11.80801 48.17148 542.99524 0.04162 -2.29076 18.40459 0.60202 -3.61445 7.61173 8 0 8 2.00 1999-Aug-27 09:09:44 4171702.83030 872121.20817 4730017.33164 11.80799 48.17149 541.09245 -1.23895 -1.08798 16.50180 -0.67855 -2.41167 5.70894 8 0 8 2.00 1999-Aug-27 09:09:44 4171701.68100 872121.80029 4730017.50136 11.80800 48.17150 540.54947 -0.42417 -0.22681 15.95882 0.13623 -1.55050 5.16596 8 0 8 2.00 1999-Aug-27 09:09:44 4171699.47589 872120.18938 4730018.56309 11.80798 48.17152 539.68129 -1.54976 2.33525 15.09064 -0.98936 1.01156 4.29778 8 0 8 2.00 1999-Aug-27 09:09:44 4171701.41488 872121.11101 4730017.12194 11.80799 48.17150 539.99896 -1.04441 -0.18065 15.40831 -0.48402 -1.50434 4.61545 8 0 8 2.00 1999-Aug-27 09:09:44 4171698.91621 872121.45153 4730016.78209 11.80800 48.17151 538.16109 -0.19979 1.36326 13.57043 0.36061 0.03957 2.77758 8 0 8 2.00 1999-Aug-27 09:09:44 4171696.42893 872122.07185 4730016.33541 11.80802 48.17152 536.28923 0.91639 2.78494 11.69857 1.47679 1.46126 0.90572 8 0 8 2.00 1999-Aug-27 09:09:44 4171694.12929 872121.94016 4730014.87283 11.80802 48.17153 533.68024 1.25806 3.50692 9.08959 1.81846 2.18323 -1.70327 8 0 8 2.00 1999-Aug-27 09:09:44 4171694.98531 872121.97854 4730014.82167 11.80802 48.17152 534.20615 1.12046 2.84259 9.61550 1.68086 1.51891 -1.17736 8 0 8 2.00 1999-Aug-27 09:09:44 4171699.38040 872123.51326 4730018.79199 11.80803 48.17152 540.24313 1.72333 2.05072 15.65248 2.28373 0.72703 4.85962 8 0 8 2.00 1999-Aug-27 09:09:44 4171701.19544 872122.96775 4730018.29576 11.80802 48.17150 540.98376 0.81794 0.47912 16.39311 1.37834 -0.84457 5.60025 8 0 8 2.00 1999-Aug-27 09:09:44 4171701.04734 872122.46032 4730017.28098 11.80801 48.17150 540.06168 0.35156 -0.01224 15.47103 0.91196 -1.33593 4.67817 8 0 8 2.00 1999-Aug-27 09:09:44 4171697.30626 872119.66767 4730015.12546 11.80798 48.17151 535.63225 -1.61646 1.70471 11.04160 -1.05606 0.38102 0.24874 8 0 8 2.00 1999-Aug-27 09:09:44 4171696.58641 872120.45964 4730015.83831 11.80800 48.17152 535.80160 -0.69393 2.58439 11.21094 -0.13354 1.26070 0.41808 8 0 8 2.00 1999-Aug-27 09:09:44 4171699.06365 872122.05055 4730013.29856 11.80801 48.17149 535.74335 0.35639 -1.15880 11.15270 0.91678 -2.48249 0.35984 8 0 8 2.00 1999-Aug-27 09:09:44 4171698.47305 872121.47685 4730012.28886 11.80800 48.17149 534.52715 -0.08432 -1.31392 9.93649 0.47608 -2.63761 -0.85636 8 0 8 2.00 1999-Aug-27 09:09:44 4171700.71606 872123.14928 4730013.23811 11.80802 48.17147 536.92693 1.09373 -2.57188 12.33627 1.65412 -3.89556 1.54342 8 0 8 2.00 1999-Aug-27 09:09:44 4171699.04219 872122.27915 4730012.47326 11.80801 48.17148 535.14557 0.58454 -1.72840 10.55491 1.14494 -3.05209 -0.23794 8 0 8 2.00 1999-Aug-27 09:09:44 4171698.24141 872121.46138 4730015.72522 11.80800 48.17151 536.93440 -0.05206 1.14911 12.34375 0.50834 -0.17458 1.55089 8 0 8 2.00 1999-Aug-27 09:09:44 4171697.49344 872120.87994 4730016.53134 11.80800 48.17152 536.96747 -0.46814 2.32092 12.37681 0.09226 0.99723 1.58396 8 0 8 2.00 1999-Aug-27 09:09:45 4171699.18831 872120.17549 4730015.08552 11.80799 48.17150 536.90038 -1.50451 0.22792 12.30972 -0.94411 -1.09577 1.51686 8 0 8 2.00 1999-Aug-27 09:09:45 4171704.46175 872122.36491 4730019.01793 11.80800 48.17149 543.57184 -0.44054 -1.32971 18.98118 0.11986 -2.65340 8.18833 8 0 8 2.00 1999-Aug-27 09:09:45 4171701.72981 872120.24864 4730016.43186 11.80798 48.17149 539.57265 -1.95298 -0.73907 14.98200 -1.39258 -2.06276 4.18914 8 0 8 2.00 1999-Aug-27 09:09:45 4171697.81022 872118.62691 4730012.58844 11.80797 48.17150 533.92875 -2.73831 -0.19612 9.33810 -2.17792 -1.51980 -1.45476 8 0 8 2.00 1999-Aug-27 09:09:45 4171699.80723 872119.88539 4730015.50479 11.80798 48.17150 537.57723 -1.91511 0.10034 12.98658 -1.35472 -1.22335 2.19372 8 0 8 2.00 1999-Aug-27 09:09:45 4171696.82076 872119.03727 4730013.47561 11.80798 48.17151 533.99992 -2.13416 1.05465 9.40926 -1.57376 -0.26904 -1.38359 8 0 8 2.00 1999-Aug-27 09:09:45 4171697.46345 872121.56220 4730015.32490 11.80801 48.17151 536.14203 0.20582 1.43419 11.55137 0.76622 0.11050 0.75852 8 0 8 2.00 1999-Aug-27 09:09:45 4171694.11260 872120.23086 4730013.93035 11.80800 48.17153 532.73379 -0.41165 3.15119 8.14313 0.14875 1.82750 -2.64972 8 0 8 2.00 1999-Aug-27 09:09:45 4171696.16397 872121.93282 4730016.21624 11.80802 48.17152 536.00849 0.83451 2.91992 11.41784 1.39491 1.59623 0.62498 8 0 8 2.00 1999-Aug-27 09:09:45 4171697.53226 872121.09103 4730016.18361 11.80800 48.17152 536.76251 -0.26946 2.02852 12.17186 0.29094 0.70483 1.37900 8 0 8 2.00 1999-Aug-27 09:09:45 4171697.90088 872119.82757 4730015.35138 11.80798 48.17151 536.21058 -1.58162 1.39729 11.61993 -1.02122 0.07360 0.82707 8 0 8 2.00 1999-Aug-27 09:09:45 4171693.52498 872120.84335 4730015.38593 11.80801 48.17154 533.51840 0.30813 4.45712 8.92775 0.86852 3.13343 -1.86511 8 0 8 2.00 1999-Aug-27 09:09:45 4171699.05497 872119.19116 4730014.74349 11.80797 48.17150 536.42414 -2.44072 0.24716 11.83349 -1.88032 -1.07653 1.04063 8 0 8 2.00 1999-Aug-27 09:09:45 4171696.27166 872120.70632 4730015.52805 11.80800 48.17152 535.39861 -0.38807 2.56943 10.80796 0.17233 1.24575 0.01510 8 0 8 2.00 1999-Aug-27 09:09:45 4171698.72052 872121.41552 4730015.58134 11.80800 48.17150 537.13369 -0.19499 0.71069 12.54304 0.36540 -0.61299 1.75018 8 0 8 2.00 1999-Aug-27 09:09:45 4171699.72092 872119.54123 4730017.03135 11.80798 48.17151 538.61143 -2.23433 1.23383 14.02078 -1.67394 -0.08985 3.22792 8 0 8 2.00 1999-Aug-27 09:09:45 4171698.28179 872118.67400 4730016.30588 11.80797 48.17152 537.01305 -2.78872 1.93192 12.42239 -2.22833 0.60823 1.62953 8 0 8 2.00 1999-Aug-27 09:09:45 4171696.62529 872120.23990 4730015.59155 11.80799 48.17152 535.61312 -0.91698 2.42497 11.02247 -0.35659 1.10129 0.22961 8 0 8 2.00 1999-Aug-27 09:09:45 4171695.16861 872119.86765 4730010.69115 11.80799 48.17150 530.95990 -0.98327 0.27611 6.36925 -0.42287 -1.04758 -4.42361 8 0 8 2.00 1999-Aug-27 09:09:45 4171699.00666 872121.15480 4730014.91196 11.80800 48.17150 536.78612 -0.50875 0.09534 12.19547 0.05165 -1.22835 1.40261 8 0 8 2.00 1999-Aug-27 09:09:45 4171698.73384 872121.76362 4730016.54584 11.80801 48.17151 537.90859 0.14302 1.29113 13.31793 0.70341 -0.03255 2.52507 8 0 8 2.00 1999-Aug-27 09:09:45 4171703.25851 872122.89099 4730017.88546 11.80801 48.17149 542.01432 0.32064 -1.28757 17.42366 0.88104 -2.61125 6.63081 8 0 8 2.00 1999-Aug-27 09:09:45 4171698.81633 872122.43844 4730014.93906 11.80802 48.17150 536.85724 0.78667 0.05649 12.26659 1.34707 -1.26719 1.47373 8 0 8 2.00 1999-Aug-27 09:09:45 4171698.94009 872119.86354 4730015.85412 11.80798 48.17151 537.26849 -1.75907 0.96910 12.67783 -1.19867 -0.35458 1.88498 8 0 8 2.00 1999-Aug-27 09:09:45 4171701.15538 872122.56765 4730019.56439 11.80801 48.17151 541.84833 0.43450 1.41540 17.25767 0.99490 0.09171 6.46482 8 0 8 2.00 1999-Aug-27 09:09:46 4171701.68031 872122.94086 4730021.07828 11.80801 48.17152 543.37000 0.69240 1.98524 18.77934 1.25280 0.66155 7.98648 8 0 8 2.00 1999-Aug-27 09:09:46 4171701.39892 872124.24117 4730019.56615 11.80803 48.17151 542.23701 2.02278 0.98376 17.64636 2.58317 -0.33993 6.85350 8 0 8 2.00 1999-Aug-27 09:09:46 4171696.99921 872120.13765 4730013.75659 11.80799 48.17151 534.47595 -1.09358 0.94409 9.88530 -0.53318 -0.37959 -0.90756 8 0 8 2.00 1999-Aug-27 09:09:46 4171696.75308 872120.21404 4730013.80959 11.80799 48.17151 534.36520 -0.96845 1.14731 9.77454 -0.40805 -0.17637 -1.01831 8 0 8 2.00 1999-Aug-27 09:09:46 4171695.58049 872120.50575 4730013.18151 11.80800 48.17151 533.17153 -0.44296 1.53923 8.58088 0.11744 0.21554 -2.21198 8 0 8 2.00 1999-Aug-27 09:09:46 4171697.66598 872120.63455 4730015.09356 11.80800 48.17151 535.97526 -0.74364 1.27363 11.38460 -0.18324 -0.05006 0.59174 8 0 8 2.00 1999-Aug-27 09:09:46 4171699.37208 872119.76836 4730016.07145 11.80798 48.17150 537.69944 -1.94063 0.81348 13.10879 -1.38023 -0.51021 2.31593 8 0 8 2.00 1999-Aug-27 09:09:46 4171702.60860 872120.54463 4730017.82704 11.80798 48.17149 541.22632 -1.84309 -0.49472 16.63566 -1.28269 -1.81841 5.84281 8 0 8 2.00 1999-Aug-27 09:09:46 4171698.15320 872119.74798 4730016.63325 11.80798 48.17152 537.31961 -1.71115 2.08028 12.72896 -1.15075 0.75659 1.93610 8 0 8 2.00 1999-Aug-27 09:09:46 4171695.80354 872121.03971 4730013.61087 11.80801 48.17151 533.70995 0.03406 1.58146 9.11929 0.59445 0.25778 -1.67356 8 0 8 2.00 1999-Aug-27 09:09:46 4171697.41529 872120.94586 4730011.73169 11.80800 48.17149 533.34901 -0.38762 -0.83304 8.75836 0.17277 -2.15672 -2.03450 8 0 8 2.00 1999-Aug-27 09:09:46 4171698.94488 872121.23758 4730014.49183 11.80800 48.17150 536.44403 -0.41508 -0.15241 11.85337 0.14532 -1.47610 1.06052 8 0 8 2.00 1999-Aug-27 09:09:46 4171697.59621 872121.91489 4730014.12868 11.80801 48.17150 535.38546 0.52389 0.48581 10.79481 1.08428 -0.83787 0.00195 8 0 8 2.00 1999-Aug-27 09:09:46 4171695.53847 872121.58187 4730014.81530 11.80801 48.17152 534.50837 0.61899 2.49537 9.91772 1.17939 1.17168 -0.87514 8 0 8 2.00 1999-Aug-27 09:09:46 4171697.46972 872120.87346 4730016.66034 11.80800 48.17152 537.04722 -0.46962 2.42524 12.45657 0.09077 1.10155 1.66371 8 0 8 2.00 1999-Aug-27 09:09:46 4171693.80967 872120.40914 4730015.51110 11.80800 48.17154 533.73826 -0.17516 4.39917 9.14761 0.38524 3.07548 -1.64525 8 0 8 2.00 1999-Aug-27 09:09:46 4171692.89894 872120.43015 4730015.04162 11.80801 48.17154 532.79679 0.03177 4.74712 8.20613 0.59217 3.42344 -2.58673 8 0 8 2.00 1999-Aug-27 09:09:46 4171697.23779 872120.68836 4730015.01526 11.80800 48.17151 535.64473 -0.60335 1.52552 11.05408 -0.04296 0.20183 0.26122 8 0 8 2.00 1999-Aug-27 09:09:46 4171695.08164 872118.59333 4730009.80918 11.80798 48.17150 530.07203 -2.21283 -0.05434 5.48137 -1.65243 -1.37802 -5.31148 8 0 8 2.00 1999-Aug-27 09:09:46 4171698.12805 872120.28739 4730012.56566 11.80799 48.17149 534.34586 -1.17801 -0.69632 9.75521 -0.61762 -2.02000 -1.03765 8 0 8 2.00 1999-Aug-27 09:09:46 4171699.31309 872120.61188 4730016.26125 11.80799 48.17151 537.91748 -1.10288 0.85446 13.32682 -0.54248 -0.46922 2.53396 8 0 8 2.00 1999-Aug-27 09:09:46 4171700.52951 872122.43808 4730014.90380 11.80801 48.17149 537.94928 0.43575 -1.21652 13.35862 0.99615 -2.54020 2.56576 8 0 8 2.00 1999-Aug-27 09:09:46 4171702.46530 872121.46955 4730015.96240 11.80799 48.17148 539.86958 -0.90841 -1.77477 15.27892 -0.34801 -3.09845 4.48606 8 0 8 2.00 1999-Aug-27 09:09:46 4171701.48111 872120.31638 4730015.77507 11.80798 48.17149 538.93014 -1.83578 -1.00601 14.33949 -1.27538 -2.32970 3.54663 8 0 8 2.00 1999-Aug-27 09:09:46 4171697.04983 872119.32552 4730013.62044 11.80798 48.17151 534.29671 -1.89889 0.94021 9.70606 -1.33849 -0.38348 -1.08680 8 0 8 2.00 1999-Aug-27 09:09:47 4171693.39212 872118.26803 4730012.21691 11.80798 48.17152 530.71884 -2.18552 2.83329 6.12819 -1.62512 1.50960 -4.66467 8 0 8 2.00 1999-Aug-27 09:09:47 4171696.50159 872119.96726 4730015.15385 11.80799 48.17152 535.16901 -1.15854 2.26486 10.57835 -0.59815 0.94118 -0.21450 8 0 8 2.00 1999-Aug-27 09:09:47 4171696.39982 872119.26228 4730016.09353 11.80798 48.17153 535.70657 -1.82778 3.07326 11.11591 -1.26738 1.74958 0.32306 8 0 8 2.00 1999-Aug-27 09:09:47 4171696.30165 872120.01182 4730015.18970 11.80799 48.17152 535.07129 -1.07400 2.42781 10.48063 -0.51361 1.10412 -0.31223 8 0 8 2.00 1999-Aug-27 09:09:47 4171697.59902 872120.38681 4730014.63843 11.80799 48.17151 535.55860 -0.97244 1.05672 10.96795 -0.41204 -0.26697 0.17509 8 0 8 2.00 1999-Aug-27 09:09:47 4171693.88640 872119.29736 4730012.08050 11.80799 48.17152 531.08033 -1.27911 2.22484 6.48967 -0.71871 0.90116 -4.30318 8 0 8 2.00 1999-Aug-27 09:09:47 4171698.02314 872119.12096 4730013.90452 11.80797 48.17150 535.11584 -2.29829 0.45094 10.52518 -1.73789 -0.87274 -0.26768 8 0 8 2.00 1999-Aug-27 09:09:47 4171703.09006 872120.32763 4730015.06462 11.80798 48.17147 539.45260 -2.15401 -2.65507 14.86194 -1.59362 -3.97875 4.06908 8 0 8 2.00 1999-Aug-27 09:09:47 4171699.85682 872120.86545 4730015.72944 11.80799 48.17150 537.91075 -0.96595 0.06454 13.32009 -0.40555 -1.25914 2.52724 8 0 8 2.00 1999-Aug-27 09:09:47 4171700.59110 872121.95550 4730015.33521 11.80800 48.17149 538.24508 -0.04922 -0.90014 13.65443 0.51118 -2.22383 2.86157 8 0 8 2.00 1999-Aug-27 09:09:47 4171700.52317 872121.92729 4730016.67951 11.80800 48.17150 539.19858 -0.06293 0.05023 14.60793 0.49746 -1.27346 3.81507 8 0 8 2.00 1999-Aug-27 09:09:47 4171703.54971 872124.01203 4730019.50536 11.80802 48.17149 543.56446 1.35837 -0.59058 18.97381 1.91876 -1.91427 8.18095 8 0 8 2.00 1999-Aug-27 09:09:47 4171703.39844 872123.18357 4730016.96111 11.80801 48.17148 541.45681 0.57838 -2.05069 16.86616 1.13878 -3.37438 6.07330 8 0 8 2.00 1999-Aug-27 09:09:47 4171699.26239 872123.45521 4730015.23582 11.80803 48.17150 537.50832 1.69065 -0.22598 12.91766 2.25105 -1.54966 2.12481 8 0 8 2.00 1999-Aug-27 09:09:47 4171698.44764 872122.50948 4730014.65877 11.80802 48.17150 536.41741 0.93166 0.12765 11.82676 1.49205 -1.19603 1.03390 8 0 8 2.00 1999-Aug-27 09:09:47 4171697.00072 872120.81062 4730015.89677 11.80800 48.17152 536.16352 -0.43516 2.26767 11.57286 0.12523 0.94399 0.78001 8 0 8 2.00 1999-Aug-27 09:09:47 4171695.85051 872120.24647 4730013.65841 11.80800 48.17151 533.66778 -0.75201 1.69986 9.07712 -0.19161 0.37617 -1.71573 8 0 8 2.00 1999-Aug-27 09:09:47 4171696.10124 872119.92189 4730014.01141 11.80799 48.17151 534.05019 -1.12102 1.80190 9.45954 -0.56063 0.47821 -1.33332 8 0 8 2.00 1999-Aug-27 09:09:47 4171698.37700 872120.38939 4730016.31107 11.80799 48.17151 537.31317 -1.12911 1.60437 12.72251 -0.56871 0.28069 1.92966 8 0 8 2.00 1999-Aug-27 09:09:47 4171698.75589 872121.90718 4730016.98626 11.80801 48.17151 538.27075 0.27903 1.54687 13.68010 0.83942 0.22318 2.88724 8 0 8 2.00 1999-Aug-27 09:09:47 4171700.26448 872122.60285 4730018.15516 11.80801 48.17151 540.22148 0.65127 1.12001 15.63083 1.21167 -0.20368 4.83797 8 0 8 2.00 1999-Aug-27 09:09:47 4171700.20644 872121.73939 4730017.56083 11.80800 48.17151 539.62290 -0.18205 0.89765 15.03224 0.37835 -0.42604 4.23939 8 0 8 2.00 1999-Aug-27 09:09:47 4171698.85392 872120.49649 4730016.15512 11.80799 48.17151 537.52291 -1.12187 1.13619 12.93225 -0.56147 -0.18750 2.13939 8 0 8 2.00 1999-Aug-27 09:09:47 4171692.54528 872120.05363 4730012.07594 11.80800 48.17153 530.30467 -0.26440 3.08467 5.71401 0.29600 1.76098 -5.07884 8 0 8 2.00 1999-Aug-27 09:09:47 4171692.81701 872120.65564 4730012.03679 11.80801 48.17152 530.53504 0.26927 2.76857 5.94438 0.82966 1.44489 -4.84847 8 0 8 2.00 1999-Aug-27 09:09:48 4171692.34585 872120.69000 4730013.10348 11.80801 48.17153 531.02700 0.39931 3.81836 6.43634 0.95971 2.49467 -4.35651 8 0 8 2.00 1999-Aug-27 09:09:48 4171693.17136 872120.08749 4730010.89196 11.80800 48.17151 529.83575 -0.35938 1.83325 5.24510 0.20101 0.50957 -5.54776 8 0 8 2.00 1999-Aug-27 09:09:48 4171696.89069 872119.83396 4730014.71300 11.80799 48.17151 535.07633 -1.36864 1.70739 10.48567 -0.80824 0.38370 -0.30718 8 0 8 2.00 1999-Aug-27 09:09:48 4171697.43848 872122.22212 4730018.09870 11.80802 48.17153 538.28267 0.85688 3.20162 13.69201 1.41728 1.87794 2.89916 8 0 8 2.00 1999-Aug-27 09:09:48 4171695.70438 872120.10322 4730015.44187 11.80799 48.17152 534.88178 -0.86233 3.01768 10.29112 -0.30193 1.69400 -0.50174 8 0 8 2.00 1999-Aug-27 09:09:48 4171695.07286 872120.78931 4730014.85072 11.80800 48.17152 534.12265 -0.06152 2.97944 9.53200 0.49887 1.65576 -1.26086 8 0 8 2.00 1999-Aug-27 09:09:48 4171692.24402 872118.97366 4730008.80821 11.80799 48.17151 527.52570 -1.25988 1.28981 2.93505 -0.69948 -0.03387 -7.85781 8 0 8 2.00 1999-Aug-27 09:09:48 4171692.00807 872119.70585 4730011.48778 11.80800 48.17153 529.46825 -0.49489 3.13728 4.87760 0.06550 1.81359 -5.91526 8 0 8 2.00 1999-Aug-27 09:09:48 4171694.40315 872120.56424 4730010.76085 11.80800 48.17150 530.60723 -0.14478 0.77468 6.01657 0.41562 -0.54900 -4.77629 8 0 8 2.00 1999-Aug-27 09:09:48 4171696.64634 872119.57362 4730012.24942 11.80798 48.17150 533.04557 -1.57347 0.28234 8.45492 -1.01307 -1.04135 -2.33794 8 0 8 2.00 1999-Aug-27 09:09:48 4171699.33930 872121.22358 4730014.54619 11.80800 48.17149 536.74010 -0.50949 -0.40171 12.14944 0.05090 -1.72539 1.35659 8 0 8 2.00 1999-Aug-27 09:09:48 4171701.05397 872120.99469 4730016.20892 11.80799 48.17149 539.06716 -1.08442 -0.50856 14.47651 -0.52402 -1.83225 3.68365 8 0 8 2.00 1999-Aug-27 09:09:48 4171700.97163 872121.24429 4730015.32153 11.80799 48.17149 538.38624 -0.82324 -1.07837 13.79558 -0.26285 -2.40205 3.00273 8 0 8 2.00 1999-Aug-27 09:09:48 4171699.58707 872119.75490 4730017.86644 11.80798 48.17151 539.17548 -1.99780 1.85581 14.58482 -1.43740 0.53212 3.79197 8 0 8 2.00 1999-Aug-27 09:09:48 4171700.20093 872120.34760 4730017.04549 11.80798 48.17150 539.04535 -1.54326 0.77020 14.45470 -0.98286 -0.55349 3.66184 8 0 8 2.00 1999-Aug-27 09:09:48 4171698.90964 872119.13461 4730015.19794 11.80797 48.17150 536.66019 -2.46633 0.66485 12.06953 -1.90594 -0.65883 1.27667 8 0 8 2.00 1999-Aug-27 09:09:48 4171694.76704 872120.30830 4730014.11786 11.80800 48.17152 533.31129 -0.46977 2.78709 8.72064 0.09063 1.46341 -2.07222 8 0 8 2.00 1999-Aug-27 09:09:48 4171693.94766 872121.02047 4730014.42168 11.80801 48.17153 533.09999 0.39500 3.47876 8.50934 0.95540 2.15508 -2.28352 8 0 8 2.00 1999-Aug-27 09:09:48 4171695.44767 872123.38205 4730018.21088 11.80804 48.17154 537.22497 2.39966 4.55163 12.63431 2.96006 3.22794 1.84146 8 0 8 2.00 1999-Aug-27 09:09:48 4171697.14426 872124.28247 4730015.94800 11.80805 48.17151 536.76920 2.93385 1.66775 12.17854 3.49424 0.34406 1.38569 8 0 8 2.00 1999-Aug-27 09:09:48 4171697.95950 872121.38226 4730014.19699 11.80800 48.17150 535.60083 -0.07182 0.34761 11.01018 0.48858 -0.97608 0.21732 8 0 8 2.00 1999-Aug-27 09:09:48 4171697.15445 872121.15556 4730013.71186 11.80800 48.17150 534.68287 -0.12898 0.64582 10.09221 0.43142 -0.67786 -0.70064 8 0 8 2.00 1999-Aug-27 09:09:48 4171696.41619 872119.96715 4730015.21261 11.80799 48.17152 535.15703 -1.14117 2.36636 10.56638 -0.58077 1.04267 -0.22648 8 0 8 2.00 1999-Aug-27 09:09:48 4171699.98465 872120.25053 4730014.02060 11.80798 48.17149 536.63695 -1.59401 -1.07456 12.04629 -1.03361 -2.39825 1.25343 8 0 8 2.00 1999-Aug-27 09:09:48 4171696.53809 872119.16140 4730010.95459 11.80798 48.17149 531.95380 -1.95481 -0.43938 7.36315 -1.39441 -1.76306 -3.42971 8 0 8 2.00 1999-Aug-27 09:09:49 4171698.21589 872120.63006 4730013.44774 11.80799 48.17150 535.10725 -0.86057 -0.22437 10.51659 -0.30017 -1.54806 -0.27626 8 0 8 2.00 1999-Aug-27 09:09:49 4171700.16306 872120.57705 4730016.04850 11.80799 48.17150 538.30905 -1.31091 0.09794 13.71839 -0.75051 -1.22574 2.92553 8 0 8 2.00 1999-Aug-27 09:09:49 4171699.25356 872119.72042 4730015.75642 11.80798 48.17150 537.38079 -1.96330 0.69714 12.79014 -1.40290 -0.62654 1.99728 8 0 8 2.00 1999-Aug-27 09:09:49 4171696.61861 872118.83876 4730015.60215 11.80797 48.17152 535.42544 -2.28710 2.65056 10.83479 -1.72670 1.32688 0.04193 8 0 8 2.00 1999-Aug-27 09:09:49 4171698.53630 872122.04610 4730016.93435 11.80801 48.17151 538.10768 0.45994 1.65123 13.51703 1.02034 0.32754 2.72417 8 0 8 2.00 1999-Aug-27 09:09:49 4171697.06156 872121.20830 4730014.54500 11.80800 48.17151 535.25024 -0.05835 1.26116 10.65959 0.50204 -0.06252 -0.13327 8 0 8 2.00 1999-Aug-27 09:09:49 4171699.05235 872122.14843 4730017.06118 11.80801 48.17151 538.55303 0.45451 1.34382 13.96237 1.01490 0.02013 3.16951 8 0 8 2.00 1999-Aug-27 09:09:49 4171701.39029 872121.03000 4730015.57490 11.80799 48.17149 538.81908 -1.11868 -1.18209 14.22843 -0.55828 -2.50577 3.43557 8 0 8 2.00 1999-Aug-27 09:09:49 4171703.40345 872122.75532 4730018.38870 11.80801 48.17149 542.46540 0.15818 -1.03698 17.87475 0.71858 -2.36066 7.08189 8 0 8 2.00 1999-Aug-27 09:09:49 4171701.87405 872122.03830 4730015.66548 11.80800 48.17148 539.33998 -0.23071 -1.62827 14.74932 0.32969 -2.95195 3.95647 8 0 8 2.00 1999-Aug-27 09:09:49 4171698.74167 872120.58419 4730016.71836 11.80799 48.17151 537.88129 -1.01306 1.58031 13.29064 -0.45266 0.25663 2.49778 8 0 8 2.00 1999-Aug-27 09:09:49 4171697.85404 872118.80103 4730014.58622 11.80797 48.17151 535.46976 -2.57685 1.07769 10.87911 -2.01645 -0.24599 0.08625 8 0 8 2.00 1999-Aug-27 09:09:49 4171693.88898 872121.47559 4730012.31102 11.80802 48.17152 531.55105 0.85249 2.04456 6.96039 1.41289 0.72087 -3.83247 8 0 8 2.00 1999-Aug-27 09:09:49 4171692.73549 872122.13360 4730013.69224 11.80803 48.17153 531.91707 1.73262 3.70669 7.32641 2.29302 2.38300 -3.46645 8 0 8 2.00 1999-Aug-27 09:09:49 4171694.74505 872121.15787 4730014.22837 11.80801 48.17152 533.49523 0.36633 2.74730 8.90457 0.92672 1.42361 -1.88828 8 0 8 2.00 1999-Aug-27 09:09:49 4171694.12421 872121.61855 4730013.26923 11.80802 48.17152 532.43812 0.94429 2.49023 7.84746 1.50469 1.16654 -2.94539 8 0 8 2.00 1999-Aug-27 09:09:49 4171691.91409 872118.56063 4730010.82041 11.80798 48.17152 528.75333 -1.59665 2.93538 4.16268 -1.03625 1.61170 -6.63018 8 0 8 2.00 1999-Aug-27 09:09:49 4171692.34124 872119.63168 4730012.07041 11.80800 48.17153 530.10977 -0.63567 3.29414 5.51911 -0.07527 1.97045 -5.27375 8 0 8 2.00 1999-Aug-27 09:09:49 4171693.95044 872118.92806 4730011.36352 11.80798 48.17151 530.53748 -1.65370 1.75629 5.94683 -1.09331 0.43261 -4.84603 8 0 8 2.00 1999-Aug-27 09:09:49 4171698.77478 872123.61826 4730017.23896 11.80803 48.17151 538.70489 1.95004 1.44072 14.11424 2.51043 0.11703 3.32138 8 0 8 2.00 1999-Aug-27 09:09:49 4171696.31690 872121.93855 4730014.79278 11.80802 48.17151 535.04842 0.80883 1.85819 10.45776 1.36923 0.53451 -0.33509 8 0 8 2.00 1999-Aug-27 09:09:49 4171699.93122 872122.13353 4730014.69305 11.80801 48.17149 537.36011 0.26008 -0.87425 12.76946 0.82048 -2.19794 1.97660 8 0 8 2.00 1999-Aug-27 09:09:49 4171692.71934 872119.44921 4730010.43797 11.80799 48.17152 529.11529 -0.89166 1.95751 4.52463 -0.33126 0.63382 -6.26822 8 0 8 2.00 1999-Aug-27 09:09:49 4171694.34623 872120.27288 4730012.52534 11.80800 48.17152 531.84511 -0.41833 2.03737 7.25445 0.14207 0.71369 -3.53841 8 0 8 2.00 1999-Aug-27 09:09:49 4171698.31933 872121.58324 4730015.96913 11.80801 48.17151 537.18365 0.05127 1.23636 12.59299 0.61167 -0.08733 1.80014 8 0 8 2.00 1999-Aug-27 09:09:50 4171702.84287 872121.41183 4730016.87196 11.80799 48.17148 540.78592 -1.04217 -1.43477 16.19527 -0.48177 -2.75846 5.40241 8 0 8 2.00 1999-Aug-27 09:09:50 4171702.01651 872120.77607 4730015.78666 11.80799 48.17148 539.35102 -1.49537 -1.45889 14.76036 -0.93498 -2.78258 3.96750 8 0 8 2.00 1999-Aug-27 09:09:50 4171697.96665 872121.42282 4730014.00941 11.80801 48.17150 535.47126 -0.03358 0.21111 10.88061 0.52682 -1.11258 0.08775 8 0 8 2.00 1999-Aug-27 09:09:50 4171698.06741 872123.27025 4730014.87056 11.80803 48.17150 536.43084 1.75413 0.43023 11.84018 2.31453 -0.89346 1.04732 8 0 8 2.00 1999-Aug-27 09:09:50 4171697.47715 872122.11285 4730014.55863 11.80802 48.17151 535.65513 0.74202 0.82920 11.06447 1.30241 -0.49449 0.27162 8 0 8 2.00 1999-Aug-27 09:09:50 4171695.93099 872121.53096 4730013.84107 11.80801 48.17151 534.03172 0.48884 1.56712 9.44106 1.04923 0.24343 -1.35179 8 0 8 2.00 1999-Aug-27 09:09:50 4171698.33345 872121.06300 4730016.19552 11.80800 48.17151 537.29057 -0.46085 1.45637 12.69991 0.09955 0.13268 1.90706 8 0 8 2.00 1999-Aug-27 09:09:50 4171698.99778 872119.04693 4730014.73850 11.80797 48.17150 536.36341 -2.57019 0.30753 11.77275 -2.00980 -1.01615 0.97990 8 0 8 2.00 1999-Aug-27 09:09:50 4171700.49335 872120.52372 4730016.15343 11.80799 48.17150 538.59557 -1.43070 -0.06486 14.00492 -0.87031 -1.38854 3.21206 8 0 8 2.00 1999-Aug-27 09:09:50 4171698.95491 872119.42953 4730014.64769 11.80798 48.17150 536.31997 -2.18692 0.21990 11.72931 -1.62652 -1.10378 0.93646 8 0 8 2.00 1999-Aug-27 09:09:50 4171694.91363 872119.32794 4730011.01302 11.80799 48.17150 530.95964 -1.45938 0.75904 6.36899 -0.89899 -0.56465 -4.42387 8 0 8 2.00 1999-Aug-27 09:09:50 4171697.82660 872120.73732 4730015.03615 11.80800 48.17151 536.05135 -0.67591 1.10252 11.46070 -0.11552 -0.22117 0.66784 8 0 8 2.00 1999-Aug-27 09:09:50 4171694.91545 872119.66285 4730015.21448 11.80799 48.17153 534.13723 -1.13193 3.50861 9.54657 -0.57153 2.18492 -1.24628 8 0 8 2.00 1999-Aug-27 09:09:50 4171696.86850 872120.26149 4730015.84651 11.80799 48.17152 535.96481 -0.94562 2.41432 11.37416 -0.38522 1.09064 0.58130 8 0 8 2.00 1999-Aug-27 09:09:50 4171696.36160 872121.23412 4730014.59953 11.80801 48.17151 534.83747 0.11016 1.80412 10.24682 0.67055 0.48044 -0.54604 8 0 8 2.00 1999-Aug-27 09:09:50 4171701.56924 872120.98524 4730016.67753 11.80799 48.17149 539.75141 -1.19911 -0.57044 15.16076 -0.63871 -1.89412 4.36790 8 0 8 2.00 1999-Aug-27 09:09:50 4171697.96372 872120.36959 4730014.86898 11.80799 48.17151 535.96612 -1.06392 0.94709 11.37546 -0.50353 -0.37659 0.58261 8 0 8 2.00 1999-Aug-27 09:09:50 4171695.67864 872120.24905 4730015.51454 11.80800 48.17153 534.93902 -0.71431 3.06268 10.34836 -0.15392 1.73900 -0.44449 8 0 8 2.00 1999-Aug-27 09:09:50 4171695.61797 872119.66446 4730012.14034 11.80799 48.17151 532.30537 -1.27411 0.94581 7.71471 -0.71372 -0.37788 -3.07814 8 0 8 2.00 1999-Aug-27 09:09:50 4171694.70504 872120.00385 4730015.66271 11.80800 48.17153 534.38041 -0.75509 3.90900 9.78976 -0.19469 2.58532 -1.00310 8 0 8 2.00 1999-Aug-27 09:09:50 4171697.96362 872117.63495 4730013.26957 11.80796 48.17150 534.40106 -3.74068 0.29750 9.81040 -3.18028 -1.02619 -0.98246 8 0 8 2.00 1999-Aug-27 09:09:50 4171695.31041 872119.53022 4730015.41819 11.80799 48.17153 534.52875 -1.34258 3.37662 9.93810 -0.78218 2.05293 -0.85476 8 0 8 2.00 1999-Aug-27 09:09:50 4171697.58165 872120.93185 4730014.07771 11.80800 48.17150 535.20383 -0.43538 0.61233 10.61317 0.12502 -0.71135 -0.17969 8 0 8 2.00 1999-Aug-27 09:09:50 4171696.51831 872120.99038 4730016.69091 11.80800 48.17153 536.46489 -0.16049 3.12174 11.87423 0.39990 1.79805 1.08138 8 0 8 2.00 1999-Aug-27 09:09:50 4171693.97586 872119.92486 4730014.49029 11.80800 48.17153 533.02001 -0.68320 3.67101 8.42935 -0.12280 2.34732 -2.36350 8 0 8 2.00 1999-Aug-27 09:09:51 4171698.83160 872120.75418 4730016.64600 11.80799 48.17151 537.90928 -0.86506 1.44054 13.31863 -0.30467 0.11686 2.52577 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.18843 872119.27186 4730016.09547 11.80798 48.17153 535.57133 -1.77514 3.22728 10.98067 -1.21475 1.90360 0.18781 8 0 8 2.00 1999-Aug-27 09:09:51 4171697.89322 872120.01620 4730016.28941 11.80799 48.17152 536.93029 -1.39541 1.99969 12.33964 -0.83501 0.67600 1.54678 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.38829 872121.01874 4730015.74659 11.80800 48.17152 535.68023 -0.10612 2.58247 11.08957 0.45427 1.25879 0.29672 8 0 8 2.00 1999-Aug-27 09:09:51 4171700.25159 872121.10186 4730018.51246 11.80799 48.17151 540.27446 -0.81532 1.59657 15.68381 -0.25493 0.27288 4.89095 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.90037 872120.36655 4730016.36339 11.80799 48.17152 536.38510 -0.84930 2.71977 11.79445 -0.28890 1.39608 1.00159 8 0 8 2.00 1999-Aug-27 09:09:51 4171701.64901 872119.70392 4730014.45594 11.80797 48.17148 537.97323 -2.46964 -1.91482 13.38257 -1.90924 -3.23851 2.58971 8 0 8 2.00 1999-Aug-27 09:09:51 4171700.20246 872120.82816 4730016.33308 11.80799 48.17150 538.58109 -1.07318 0.22070 13.99043 -0.51278 -1.10299 3.19758 8 0 8 2.00 1999-Aug-27 09:09:51 4171702.14608 872122.16969 4730017.91153 11.80800 48.17149 541.20912 -0.15776 -0.34881 16.61847 0.40263 -1.67250 5.82561 8 0 8 2.00 1999-Aug-27 09:09:51 4171702.41600 872123.04642 4730018.46547 11.80801 48.17149 541.91773 0.64518 -0.30995 17.32708 1.20558 -1.63364 6.53422 8 0 8 2.00 1999-Aug-27 09:09:51 4171701.52501 872121.15522 4730017.63574 11.80799 48.17150 540.45975 -1.02367 0.07494 15.86909 -0.46328 -1.24875 5.07623 8 0 8 2.00 1999-Aug-27 09:09:51 4171702.39338 872121.07577 4730015.33413 11.80799 48.17148 539.30073 -1.27914 -2.08126 14.71008 -0.71874 -3.40495 3.91722 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.73145 872121.04089 4730012.73463 11.80800 48.17150 533.66292 -0.15467 0.32012 9.07226 0.40573 -1.00357 -1.72059 8 0 8 2.00 1999-Aug-27 09:09:51 4171697.67677 872122.41218 4730013.72534 11.80802 48.17150 535.20537 0.99416 0.08223 10.61471 1.55456 -1.24145 -0.17814 8 0 8 2.00 1999-Aug-27 09:09:51 4171695.86896 872121.72592 4730014.85420 11.80801 48.17152 534.77276 0.69237 2.25829 10.18210 1.25276 0.93461 -0.61075 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.10789 872122.22229 4730013.55864 11.80802 48.17151 534.03109 1.12933 1.14432 9.44044 1.68973 -0.17937 -1.35242 8 0 8 2.00 1999-Aug-27 09:09:51 4171695.48384 872121.78626 4730016.30946 11.80802 48.17153 535.61398 0.83023 3.50051 11.02332 1.39063 2.17682 0.23046 8 0 8 2.00 1999-Aug-27 09:09:51 4171691.53135 872119.74984 4730009.87138 11.80800 48.17152 527.95861 -0.35429 2.40029 3.36795 0.20611 1.07661 -7.42490 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.37945 872122.22381 4730014.64761 11.80802 48.17151 535.02001 1.07525 1.67226 10.42935 1.63565 0.34857 -0.36350 8 0 8 2.00 1999-Aug-27 09:09:51 4171695.04039 872121.88908 4730015.95157 11.80802 48.17153 535.07184 1.02162 3.56959 10.48119 1.58201 2.24590 -0.31167 8 0 8 2.00 1999-Aug-27 09:09:51 4171696.23661 872119.92847 4730013.67553 11.80799 48.17151 533.88918 -1.14229 1.47815 9.29853 -0.58189 0.15447 -1.49433 8 0 8 2.00 1999-Aug-27 09:09:51 4171692.28530 872118.72674 4730012.67859 11.80799 48.17153 530.40294 -1.51002 3.87852 5.81228 -0.94962 2.55484 -4.98057 8 0 8 2.00 1999-Aug-27 09:09:51 4171693.05010 872119.25337 4730012.77064 11.80799 48.17153 531.04265 -1.15103 3.30178 6.45200 -0.59064 1.97810 -4.34086 8 0 8 2.00 1999-Aug-27 09:09:51 4171691.22178 872118.53771 4730012.43732 11.80799 48.17154 529.50310 -1.47742 4.52215 4.91244 -0.91702 3.19847 -5.88041 8 0 8 2.00 1999-Aug-27 09:09:51 4171692.09931 872120.21916 4730013.08458 11.80801 48.17153 530.78771 -0.01112 4.05737 6.19706 0.54928 2.73369 -4.59580 8 0 8 2.00 1999-Aug-27 09:09:52 4171695.04379 872119.92570 4730015.55920 11.80799 48.17153 534.51374 -0.90091 3.60481 9.92309 -0.34051 2.28113 -0.86977 8 0 8 2.00 1999-Aug-27 09:09:52 4171693.23156 872118.99750 4730013.93497 11.80799 48.17153 531.99378 -1.43862 3.98494 7.40313 -0.87822 2.66126 -3.38973 8 0 8 2.00 1999-Aug-27 09:09:52 4171695.03156 872120.49094 4730012.72603 11.80800 48.17151 532.47177 -0.34513 1.63810 7.88112 0.21527 0.31441 -2.91174 8 0 8 2.00 1999-Aug-27 09:09:52 4171692.44555 872120.19115 4730011.21601 11.80800 48.17152 529.61756 -0.10939 2.56295 5.02691 0.45101 1.23926 -5.76595 8 0 8 2.00 1999-Aug-27 09:09:52 4171694.96610 872122.50465 4730013.16719 11.80803 48.17151 533.03259 1.63937 1.67300 8.44193 2.19976 0.34932 -2.35093 8 0 8 2.00 1999-Aug-27 09:09:52 4171699.52572 872122.18187 4730015.95146 11.80801 48.17150 538.03970 0.39037 0.25338 13.44904 0.95077 -1.07030 2.65619 8 0 8 2.00 1999-Aug-27 09:09:52 4171699.39159 872123.42002 4730017.00027 11.80803 48.17151 538.90262 1.62977 0.86188 14.31197 2.19016 -0.46181 3.51911 8 0 8 2.00 1999-Aug-27 09:09:52 4171700.85857 872121.23598 4730014.03652 11.80799 48.17148 537.35377 -0.80825 -1.85162 12.76312 -0.24785 -3.17530 1.97026 8 0 8 2.00 1999-Aug-27 09:09:52 4171695.99802 872121.62962 4730015.63340 11.80801 48.17152 535.42448 0.57169 2.69849 10.83383 1.13209 1.37480 0.04097 8 0 8 2.00 1999-Aug-27 09:09:52 4171696.81760 872122.02495 4730014.47354 11.80802 48.17151 535.14919 0.79094 1.26692 10.55853 1.35134 -0.05677 -0.23432 8 0 8 2.00 1999-Aug-27 09:09:52 4171696.77624 872121.03798 4730015.86061 11.80800 48.17152 536.02106 -0.16667 2.37262 11.43041 0.39372 1.04893 0.63755 8 0 8 2.00 1999-Aug-27 09:09:52 4171697.54798 872121.26017 4730014.07443 11.80800 48.17150 535.22421 -0.10711 0.58464 10.63355 0.45329 -0.73904 -0.15931 8 0 8 2.00 1999-Aug-27 09:09:52 4171693.40606 872120.75431 4730012.00122 11.80801 48.17152 530.90653 0.24531 2.30017 6.31587 0.80570 0.97648 -4.47699 8 0 8 2.00 1999-Aug-27 09:09:52 4171698.56341 872122.08972 4730014.39904 11.80801 48.17150 536.24216 0.49709 -0.06599 11.65150 1.05749 -1.38968 0.85864 8 0 8 2.00 1999-Aug-27 09:09:52 4171693.73627 872121.18501 4730013.50677 11.80801 48.17152 532.30271 0.59932 2.99770 7.71205 1.15972 1.67401 -3.08080 8 0 8 2.00 1999-Aug-27 09:09:52 4171696.12716 872120.24567 4730014.87457 11.80799 48.17152 534.75448 -0.80940 2.30926 10.16382 -0.24900 0.98558 -0.62904 8 0 8 2.00 1999-Aug-27 09:09:52 4171693.65943 872120.62653 4730013.27054 11.80801 48.17152 532.00031 0.06838 2.98136 7.40966 0.62877 1.65767 -3.38320 8 0 8 2.00 1999-Aug-27 09:09:52 4171695.65975 872119.17529 4730010.79326 11.80798 48.17150 531.26212 -1.76148 0.09155 6.67146 -1.20109 -1.23213 -4.12139 8 0 8 2.00 1999-Aug-27 09:09:52 4171697.36064 872119.74163 4730016.60157 11.80798 48.17152 536.77776 -1.55518 2.63819 12.18711 -0.99478 1.31451 1.39425 8 0 8 2.00 1999-Aug-27 09:09:52 4171698.10737 872120.08051 4730014.83040 11.80799 48.17151 535.99169 -1.37628 0.86067 11.40103 -0.81589 -0.46302 0.60817 8 0 8 2.00 1999-Aug-27 09:09:52 4171699.43396 872119.52246 4730015.30587 11.80798 48.17150 537.13581 -2.19398 0.29527 12.54516 -1.63359 -1.02841 1.75230 8 0 8 2.00 1999-Aug-27 09:09:52 4171698.65651 872119.95153 4730014.43009 11.80798 48.17150 536.03427 -1.61490 0.21284 11.44361 -1.05451 -1.11085 0.65075 8 0 8 2.00 1999-Aug-27 09:09:52 4171698.85831 872120.69157 4730013.06029 11.80799 48.17149 535.24630 -0.93181 -0.96071 10.65564 -0.37142 -2.28440 -0.13722 8 0 8 2.00 1999-Aug-27 09:09:52 4171702.09735 872123.13976 4730015.91420 11.80802 48.17148 539.82139 0.80175 -1.79321 15.23074 1.36215 -3.11690 4.43788 8 0 8 2.00 1999-Aug-27 09:09:52 4171702.62734 872123.95096 4730018.75188 11.80803 48.17149 542.39255 1.48733 -0.41100 17.80190 2.04773 -1.73469 7.00904 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.55810 872122.98705 4730018.84565 11.80802 48.17152 540.32731 1.17189 2.03714 15.73665 1.73229 0.71345 4.94380 8 0 8 2.00 1999-Aug-27 09:09:53 4171702.58397 872123.63153 4730018.69268 11.80802 48.17149 542.27653 1.18353 -0.37015 17.68588 1.74393 -1.69384 6.89302 8 0 8 2.00 1999-Aug-27 09:09:53 4171700.84003 872121.91546 4730015.96144 11.80800 48.17149 538.86875 -0.13936 -0.65797 14.27810 0.42104 -1.98165 3.48524 8 0 8 2.00 1999-Aug-27 09:09:53 4171698.83605 872121.90151 4730015.09620 11.80801 48.17150 536.91394 0.25708 0.22878 12.32328 0.81747 -1.09491 1.53043 8 0 8 2.00 1999-Aug-27 09:09:53 4171700.53178 872121.94771 4730014.08790 11.80801 48.17148 537.27587 -0.04471 -1.68753 12.68522 0.51569 -3.01121 1.89236 8 0 8 2.00 1999-Aug-27 09:09:53 4171695.59403 872118.37755 4730013.28540 11.80797 48.17151 532.96736 -2.52889 1.92315 8.37670 -1.96850 0.59946 -2.41616 8 0 8 2.00 1999-Aug-27 09:09:53 4171695.48056 872119.79763 4730013.15611 11.80799 48.17151 532.99074 -1.11564 1.70314 8.40008 -0.55524 0.37946 -2.39278 8 0 8 2.00 1999-Aug-27 09:09:53 4171692.67114 872119.28211 4730009.45309 11.80799 48.17151 528.32714 -1.04535 1.36132 3.73649 -0.48496 0.03764 -7.05637 8 0 8 2.00 1999-Aug-27 09:09:53 4171694.87757 872120.03120 4730011.45064 11.80800 48.17151 531.35817 -0.76362 0.96996 6.76751 -0.20323 -0.35373 -4.02534 8 0 8 2.00 1999-Aug-27 09:09:53 4171696.40916 872121.56224 4730012.62425 11.80801 48.17150 533.44143 0.42160 0.40208 8.85078 0.98200 -0.92160 -1.94208 8 0 8 2.00 1999-Aug-27 09:09:53 4171697.17786 872121.32476 4730013.35249 11.80801 48.17150 534.45346 0.03185 0.36328 9.86281 0.59224 -0.96040 -0.93005 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.43371 872120.90242 4730012.49127 11.80799 48.17148 535.22669 -0.84317 -1.79203 10.63603 -0.28278 -3.11572 -0.15683 8 0 8 2.00 1999-Aug-27 09:09:53 4171703.10351 872120.89149 4730014.17359 11.80798 48.17147 538.87438 -1.60484 -3.34508 14.28373 -1.04444 -4.66876 3.49087 8 0 8 2.00 1999-Aug-27 09:09:53 4171701.43138 872120.85068 4730013.92046 11.80799 48.17148 537.58864 -1.30260 -2.28806 12.99798 -0.74221 -3.61175 2.20513 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.00645 872119.88430 4730014.06178 11.80798 48.17150 535.97909 -1.75232 -0.27777 11.38844 -1.19192 -1.60145 0.59558 8 0 8 2.00 1999-Aug-27 09:09:53 4171698.56922 872120.59969 4730016.07177 11.80799 48.17151 537.28904 -0.96259 1.27252 12.69838 -0.40220 -0.05117 1.90553 8 0 8 2.00 1999-Aug-27 09:09:53 4171702.77367 872122.96953 4730017.52657 11.80801 48.17149 541.44111 0.49672 -1.18525 16.85045 1.05712 -2.50894 6.05760 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.57639 872121.08073 4730013.42677 11.80800 48.17149 536.04124 -0.69784 -1.29940 11.45059 -0.13744 -2.62309 0.65773 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.06515 872120.17241 4730014.85069 11.80799 48.17150 536.64458 -1.48231 0.16160 12.05393 -0.92192 -1.16208 1.26107 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.00560 872118.70622 4730015.36338 11.80797 48.17150 536.78764 -2.90530 0.77052 12.19699 -2.34490 -0.55317 1.40413 8 0 8 2.00 1999-Aug-27 09:09:53 4171697.49105 872120.49015 4730015.94210 11.80799 48.17152 536.47364 -0.84919 1.98914 11.88299 -0.28880 0.66545 1.09013 8 0 8 2.00 1999-Aug-27 09:09:53 4171696.04833 872120.90365 4730013.70680 11.80800 48.17151 533.92266 -0.14921 1.48764 9.33200 0.41119 0.16396 -1.46086 8 0 8 2.00 1999-Aug-27 09:09:53 4171697.41805 872121.32736 4730014.77169 11.80801 48.17151 535.66812 -0.01476 1.13417 11.07747 0.54564 -0.18952 0.28461 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.20192 872120.79325 4730013.27143 11.80799 48.17149 535.64181 -0.90260 -1.08603 11.05116 -0.34221 -2.40972 0.25830 8 0 8 2.00 1999-Aug-27 09:09:53 4171699.87114 872118.81715 4730014.46100 11.80797 48.17149 536.69540 -2.97383 -0.47950 12.10474 -2.41344 -1.80319 1.31188 8 0 8 2.00 1999-Aug-27 09:09:54 4171699.56085 872118.02418 4730015.71985 11.80796 48.17150 537.32264 -3.68653 0.70727 12.73199 -3.12613 -0.61642 1.93913 8 0 8 2.00 1999-Aug-27 09:09:54 4171701.47217 872120.01082 4730017.82587 11.80798 48.17150 540.41074 -2.13305 0.41478 15.82009 -1.57265 -0.90891 5.02723 8 0 8 2.00 1999-Aug-27 09:09:54 4171697.52389 872118.48211 4730015.10330 11.80797 48.17151 535.59601 -2.82146 1.71197 11.00536 -2.26106 0.38829 0.21250 8 0 8 2.00 1999-Aug-27 09:09:54 4171695.57627 872118.56208 4730016.61309 11.80797 48.17153 535.46055 -2.34463 4.12721 10.86989 -1.78423 2.80352 0.07703 8 0 8 2.00 1999-Aug-27 09:09:54 4171695.92575 872119.17136 4730017.70129 11.80798 48.17154 536.58271 -1.81976 4.50513 11.99205 -1.25936 3.18144 1.19919 8 0 8 2.00 1999-Aug-27 09:09:54 4171700.06956 872119.83335 4730014.76660 11.80798 48.17149 537.19132 -2.01974 -0.57537 12.60066 -1.45934 -1.89906 1.80780 8 0 8 2.00 1999-Aug-27 09:09:54 4171700.15925 872120.16104 4730016.04578 11.80798 48.17150 538.24776 -1.71733 0.16234 13.65710 -1.15694 -1.16135 2.86425 8 0 8 2.00 1999-Aug-27 09:09:54 4171698.98515 872121.26475 4730016.88240 11.80800 48.17151 538.25534 -0.39673 1.40834 13.66469 0.16367 0.08466 2.87183 8 0 8 2.00 1999-Aug-27 09:09:54 4171700.97122 872119.93400 4730018.34293 11.80798 48.17151 540.45853 -2.10573 1.13671 15.86788 -1.54533 -0.18698 5.07502 8 0 8 2.00 1999-Aug-27 09:09:54 4171701.80741 872121.47275 4730019.56718 11.80800 48.17151 542.12663 -0.77065 1.10864 17.53597 -0.21025 -0.21505 6.74311 8 0 8 2.00 1999-Aug-27 09:09:54 4171699.27688 872120.96832 4730016.71036 11.80800 48.17151 538.27714 -0.74658 1.12603 13.68648 -0.18618 -0.19766 2.89363 8 0 8 2.00 1999-Aug-27 09:09:54 4171699.35165 872119.53223 4730013.59905 11.80798 48.17149 535.81159 -2.16758 -0.78447 11.22093 -1.60718 -2.10816 0.42808 8 0 8 2.00 1999-Aug-27 09:09:54 4171696.04914 872118.70755 4730012.16756 11.80797 48.17150 532.47653 -2.29901 0.79538 7.88587 -1.73861 -0.52830 -2.90699 8 0 8 2.00 1999-Aug-27 09:09:54 4171697.64791 872120.01524 4730013.29576 11.80799 48.17150 534.53933 -1.34615 0.18228 9.94867 -0.78576 -1.14140 -0.84419 8 0 8 2.00 1999-Aug-27 09:09:54 4171698.50860 872121.40987 4730013.76595 11.80800 48.17149 535.64185 -0.15716 -0.34456 11.05120 0.40324 -1.66825 0.25834 8 0 8 2.00 1999-Aug-27 09:09:54 4171697.76601 872122.01250 4730018.21739 11.80801 48.17153 538.55630 0.58468 3.07385 13.96565 1.14508 1.75017 3.17279 8 0 8 2.00 1999-Aug-27 09:09:54 4171697.87418 872121.62715 4730016.09601 11.80801 48.17151 536.99360 0.18535 1.63896 12.40295 0.74575 0.31528 1.61009 8 0 8 2.00 1999-Aug-27 09:09:54 4171695.00694 872119.78269 4730014.73859 11.80799 48.17153 533.85871 -1.03335 3.10623 9.26805 -0.47295 1.78255 -1.52480 8 0 8 2.00 1999-Aug-27 09:09:54 4171692.98447 872119.03661 4730010.52806 11.80799 48.17151 529.29918 -1.34977 1.88712 4.70852 -0.78938 0.56343 -6.08433 8 0 8 2.00 1999-Aug-27 09:09:54 4171696.08776 872119.17869 4730010.66490 11.80798 48.17149 531.44633 -1.84574 -0.30675 6.85568 -1.28535 -1.63044 -3.93718 8 0 8 2.00 1999-Aug-27 09:09:54 4171696.88518 872119.27883 4730013.87921 11.80798 48.17151 534.37567 -1.91090 1.24000 9.78502 -1.35050 -0.08369 -1.00784 8 0 8 2.00 1999-Aug-27 09:09:54 4171700.50795 872120.62964 4730015.40532 11.80799 48.17149 538.06210 -1.33001 -0.59057 13.47145 -0.76961 -1.91426 2.67859 8 0 8 2.00 1999-Aug-27 09:09:54 4171696.69454 872120.26372 4730015.92500 11.80799 48.17152 535.91004 -0.90784 2.59321 11.31939 -0.34744 1.26953 0.52653 8 0 8 2.00 1999-Aug-27 09:09:54 4171699.74691 872119.07327 4730013.60269 11.80797 48.17149 536.00969 -2.69771 -1.00035 11.41903 -2.13732 -2.32404 0.62617 8 0 8 2.00 1999-Aug-27 09:09:54 4171698.25774 872120.25479 4730015.86336 11.80799 48.17151 536.88334 -1.23646 1.41330 12.29269 -0.67607 0.08962 1.49983 8 0 8 2.00 1999-Aug-27 09:09:55 4171694.66342 872121.26232 4730013.93001 11.80801 48.17152 533.23387 0.48527 2.59193 8.64322 1.04566 1.26825 -2.14964 8 0 8 2.00 1999-Aug-27 09:09:55 4171691.13996 872117.89442 4730013.14412 11.80798 48.17154 529.88857 -2.09035 5.15129 5.29791 -1.52996 3.82760 -5.49494 8 0 8 2.00 1999-Aug-27 09:09:55 4171691.61574 872117.93210 4730010.55596 11.80798 48.17153 528.27575 -2.15082 3.07246 3.68509 -1.59043 1.74878 -7.10777 8 0 8 2.00 1999-Aug-27 09:09:55 4171692.44866 872119.74001 4730011.37280 11.80800 48.17152 529.67486 -0.55162 2.73404 5.08420 0.00878 1.41035 -5.70865 8 0 8 2.00 1999-Aug-27 09:09:55 4171695.43700 872120.46172 4730011.32902 11.80800 48.17150 531.69148 -0.45669 0.41516 7.10083 0.10370 -0.90852 -3.69203 8 0 8 2.00 1999-Aug-27 09:09:55 4171698.73703 872120.82502 4730015.16480 11.80800 48.17150 536.75351 -0.77637 0.51090 12.16285 -0.21598 -0.81279 1.36999 8 0 8 2.00 1999-Aug-27 09:09:55 4171698.44296 872121.33724 4730014.26434 11.80800 48.17150 535.96047 -0.21481 0.04677 11.36981 0.34558 -1.27692 0.57696 8 0 8 2.00 1999-Aug-27 09:09:55 4171700.47405 872120.81030 4730014.41915 11.80799 48.17149 537.32979 -1.14623 -1.25108 12.73913 -0.58584 -2.57476 1.94628 8 0 8 2.00 1999-Aug-27 09:09:55 4171700.63064 872120.06416 4730016.11262 11.80798 48.17150 538.59206 -1.90863 -0.12214 14.00141 -1.34823 -1.44582 3.20855 8 0 8 2.00 1999-Aug-27 09:09:55 4171698.84239 872120.93929 4730016.47208 11.80800 48.17151 537.81200 -0.68609 1.28846 13.22134 -0.12569 -0.03523 2.42848 8 0 8 2.00 1999-Aug-27 09:09:55 4171695.09195 872118.84721 4730014.58941 11.80798 48.17153 533.67537 -1.96643 3.08738 9.08472 -1.40603 1.76369 -1.70814 8 0 8 2.00 1999-Aug-27 09:09:55 4171697.29848 872120.51168 4730012.46125 11.80800 48.17150 533.75714 -0.78871 -0.19508 9.16648 -0.22831 -1.51876 -1.62637 8 0 8 2.00 1999-Aug-27 09:09:55 4171695.89876 872121.66594 4730013.12868 11.80801 48.17151 533.49827 0.62755 1.09495 8.90761 1.18795 -0.22873 -1.88524 8 0 8 2.00 1999-Aug-27 09:09:55 4171694.73702 872121.00956 4730012.93178 11.80801 48.17151 532.50360 0.22280 1.91106 7.91294 0.78319 0.58737 -2.87992 8 0 8 2.00 1999-Aug-27 09:09:55 4171697.63379 872120.12947 4730017.11196 11.80799 48.17152 537.38932 -1.23145 2.72020 12.79866 -0.67105 1.39652 2.00581 8 0 8 2.00 1999-Aug-27 09:09:55 4171697.68904 872120.92572 4730014.98815 11.80800 48.17151 535.95150 -0.46335 1.14212 11.36084 0.09704 -0.18157 0.56799 8 0 8 2.00 1999-Aug-27 09:09:55 4171696.62000 872121.40895 4730015.03597 11.80801 48.17151 535.35521 0.22841 1.88006 10.76456 0.78881 0.55637 -0.02830 8 0 8 2.00 1999-Aug-27 09:09:55 4171696.80247 872122.90648 4730015.18747 11.80803 48.17151 535.79159 1.65692 1.61966 11.20094 2.21731 0.29597 0.40808 8 0 8 2.00 1999-Aug-27 09:09:55 4171696.34658 872121.43321 4730014.71267 11.80801 48.17151 534.93914 0.30811 1.86018 10.34848 0.86850 0.53649 -0.44437 8 0 8 2.00 1999-Aug-27 09:09:55 4171694.29667 872122.67858 4730015.04264 11.80803 48.17153 534.01681 1.94661 3.38549 9.42615 2.50700 2.06180 -1.36670 8 0 8 2.00 1999-Aug-27 09:09:55 4171692.13831 872120.65659 4730012.69678 11.80801 48.17153 530.58391 0.40908 3.70360 5.99326 0.96947 2.37992 -4.79960 8 0 8 2.00 1999-Aug-27 09:09:55 4171694.23194 872120.44410 4730014.42863 11.80800 48.17153 533.21209 -0.22734 3.36393 8.62143 0.33305 2.04025 -2.17142 8 0 8 2.00 1999-Aug-27 09:09:55 4171698.32126 872121.37567 4730014.16697 11.80800 48.17150 535.81371 -0.15230 0.06473 11.22306 0.40810 -1.25895 0.43020 8 0 8 2.00 1999-Aug-27 09:09:55 4171700.76351 872121.36473 4730014.66514 11.80800 48.17149 537.77771 -0.66277 -1.38269 13.18705 -0.10237 -2.70638 2.39420 8 0 8 2.00 1999-Aug-27 09:09:55 4171698.49522 872121.81732 4730017.24078 11.80801 48.17151 538.27798 0.24441 1.92044 13.68732 0.80481 0.59675 2.89446 8 0 8 2.00 1999-Aug-27 09:09:56 4171702.81391 872120.88969 4730019.62976 11.80798 48.17150 542.75072 -1.54733 0.50516 18.16006 -0.98694 -0.81853 7.36721 8 0 8 2.00 1999-Aug-27 09:09:56 4171701.38777 872121.82179 4730016.31742 11.80800 48.17149 539.47878 -0.34312 -0.80579 14.88813 0.21728 -2.12947 4.09527 8 0 8 2.00 1999-Aug-27 09:09:56 4171698.54403 872121.95492 4730016.61772 11.80801 48.17151 537.86435 0.36911 1.44834 13.27369 0.92950 0.12465 2.48084 8 0 8 2.00 1999-Aug-27 09:09:56 4171697.17901 872121.11271 4730014.63374 11.80800 48.17151 535.37999 -0.17595 1.24925 10.78934 0.38444 -0.07443 -0.00352 8 0 8 2.00 1999-Aug-27 09:09:56 4171697.09264 872121.25042 4730015.91479 11.80801 48.17152 536.29696 -0.02348 2.14559 11.70631 0.53691 0.82190 0.91345 8 0 8 2.00 1999-Aug-27 09:09:56 4171699.59055 872121.84221 4730017.91063 11.80801 48.17151 539.49553 0.04463 1.56446 14.90488 0.60503 0.24077 4.11202 8 0 8 2.00 1999-Aug-27 09:09:56 4171698.84582 872123.26530 4730017.29305 11.80803 48.17151 538.74340 1.59001 1.47880 14.15275 2.15040 0.15511 3.35989 8 0 8 2.00 1999-Aug-27 09:09:56 4171699.81090 872122.81339 4730017.99797 11.80802 48.17151 539.83699 0.95017 1.31390 15.24634 1.51057 -0.00979 4.45348 8 0 8 2.00 1999-Aug-27 09:09:56 4171695.03670 872121.57796 4730013.48874 11.80802 48.17152 533.19182 0.71784 1.97725 8.60116 1.27823 0.65357 -2.19169 8 0 8 2.00 1999-Aug-27 09:09:56 4171695.04848 872121.21140 4730012.33657 11.80801 48.17151 532.29094 0.35663 1.25617 7.70029 0.91702 -0.06751 -3.09257 8 0 8 2.00 1999-Aug-27 09:09:56 4171696.40730 872120.50518 4730012.20451 11.80800 48.17150 532.98318 -0.61271 0.28470 8.39253 -0.05231 -1.03899 -2.40033 8 0 8 2.00 1999-Aug-27 09:09:56 4171698.72748 872122.45637 4730013.79140 11.80802 48.17149 535.94652 0.82241 -0.64680 11.35587 1.38280 -1.97049 0.56301 8 0 8 2.00 1999-Aug-27 09:09:56 4171703.96739 872123.84066 4730015.02347 11.80802 48.17146 540.47407 1.10515 -3.85808 15.88342 1.66555 -5.18176 5.09056 8 0 8 2.00 1999-Aug-27 09:09:56 4171703.16871 872124.16891 4730018.17486 11.80803 48.17149 542.34574 1.58989 -1.22392 17.75508 2.15029 -2.54761 6.96222 8 0 8 2.00 1999-Aug-27 09:09:56 4171703.21681 872124.67995 4730017.42717 11.80803 48.17148 541.88974 2.08027 -1.83557 17.29909 2.64067 -3.15925 6.50623 8 0 8 2.01 1999-Aug-27 09:09:56 4171698.14915 872123.13212 4730014.62054 11.80803 48.17150 536.27904 1.60220 0.22493 11.68838 2.16260 -1.09876 0.89552 8 0 8 2.01 1999-Aug-27 09:09:56 4171695.66717 872121.19840 4730014.80982 11.80801 48.17152 534.53597 0.21730 2.45632 9.94532 0.77769 1.13263 -0.84754 8 0 8 2.01 1999-Aug-27 09:09:56 4171692.34626 872121.02784 4730013.88176 11.80802 48.17154 531.65330 0.72991 4.28558 7.06264 1.29031 2.96190 -3.73022 8 0 8 2.01 1999-Aug-27 09:09:56 4171692.34564 872120.26465 4730012.93450 11.80801 48.17153 530.84290 -0.01700 3.77068 6.25224 0.54340 2.44699 -4.54062 8 0 8 2.01 1999-Aug-27 09:09:56 4171693.95977 872120.82300 4730013.50194 11.80801 48.17152 532.39561 0.19923 2.88666 7.80495 0.75963 1.56298 -2.98790 8 0 8 2.01 1999-Aug-27 09:09:56 4171695.05282 872119.83008 4730012.62738 11.80799 48.17151 532.32197 -0.99635 1.65757 7.73131 -0.43595 0.33388 -3.06154 8 0 8 2.01 1999-Aug-27 09:09:56 4171696.47160 872120.57611 4730013.39240 11.80800 48.17151 533.91999 -0.55644 1.01918 9.32934 0.00396 -0.30451 -1.46352 8 0 8 2.01 1999-Aug-27 09:09:56 4171697.75946 872119.66939 4730013.00066 11.80798 48.17150 534.34505 -1.70751 -0.04315 9.75440 -1.14711 -1.36683 -1.03846 8 0 8 2.01 1999-Aug-27 09:09:56 4171703.14076 872121.84367 4730015.53427 11.80800 48.17147 540.04255 -0.68043 -2.61000 15.45189 -0.12003 -3.93369 4.65903 8 0 8 2.01 1999-Aug-27 09:09:56 4171698.28961 872119.68208 4730016.38749 11.80798 48.17151 537.21654 -1.80357 1.82693 12.62588 -1.24318 0.50325 1.83302 8 0 8 2.01 1999-Aug-27 09:09:57 4171696.78284 872120.08408 4730018.16576 11.80799 48.17153 537.61286 -1.10174 4.05057 13.02221 -0.54134 2.72689 2.22935 8 0 8 2.01 1999-Aug-27 09:09:57 4171698.09506 872121.58882 4730017.83281 11.80801 48.17152 538.42673 0.10263 2.64198 13.83607 0.66303 1.31829 3.04322 8 0 8 2.01 1999-Aug-27 09:09:57 4171694.53161 872120.85652 4730014.14116 11.80801 48.17152 533.24979 0.11503 2.89076 8.65913 0.67542 1.56707 -2.13372 8 0 8 2.01 1999-Aug-27 09:09:57 4171696.70845 872120.53157 4730012.67682 11.80800 48.17150 533.53531 -0.64849 0.37600 8.94466 -0.08810 -0.94768 -1.84820 8 0 8 2.01 1999-Aug-27 09:09:57 4171694.17822 872118.68139 4730010.44278 11.80798 48.17151 529.96643 -1.94176 1.01372 5.37577 -1.38136 -0.30997 -5.41709 8 0 8 2.01 1999-Aug-27 09:09:57 4171691.32413 872117.63219 4730011.88793 11.80797 48.17154 529.03697 -2.38472 4.21918 4.44632 -1.82432 2.89550 -6.34654 8 0 8 2.01 1999-Aug-27 09:09:57 4171692.97155 872119.33808 4730014.66730 11.80799 48.17154 532.41622 -1.05204 4.61105 7.82556 -0.49165 3.28736 -2.96729 8 0 8 2.01 1999-Aug-27 09:09:57 4171694.68080 872119.33214 4730014.88370 11.80799 48.17153 533.69244 -1.40763 3.50959 9.10178 -0.84723 2.18590 -1.69108 8 0 8 2.01 1999-Aug-27 09:09:57 4171696.92551 872119.56632 4730015.31227 11.80798 48.17152 535.50907 -1.63774 2.12246 10.91842 -1.07735 0.79877 0.12556 8 0 8 2.01 1999-Aug-27 09:09:57 4171697.91641 872121.05163 4730017.21901 11.80800 48.17152 537.77942 -0.38664 2.44485 13.18876 0.17376 1.12116 2.39591 8 0 8 2.01 1999-Aug-27 09:09:57 4171695.03465 872121.57041 4730012.91418 11.80802 48.17151 532.76131 0.71088 1.59672 8.17066 1.27127 0.27304 -2.62220 8 0 8 2.01 1999-Aug-27 09:09:57 4171693.25986 872122.16093 4730011.39838 11.80803 48.17151 530.55385 1.65207 1.79028 5.96319 2.21247 0.46659 -4.82967 8 0 8 2.01 1999-Aug-27 09:09:57 4171695.93617 872120.53982 4730011.61027 11.80800 48.17150 532.23757 -0.48239 0.22674 7.64692 0.07801 -1.09694 -3.14594 8 0 8 2.01 1999-Aug-27 09:09:57 4171696.66712 872121.13081 4730013.71981 11.80800 48.17151 534.36729 -0.05348 1.01035 9.77663 0.50692 -0.31334 -1.01622 8 0 8 2.01 1999-Aug-27 09:09:57 4171698.03720 872121.75260 4730015.20393 11.80801 48.17151 536.45241 0.27478 0.90600 11.86175 0.83518 -0.41769 1.06890 8 0 8 2.01 1999-Aug-27 09:09:57 4171695.58963 872119.54168 4730014.20065 11.80799 48.17152 533.80534 -1.38850 2.35923 9.21469 -0.82810 1.03554 -1.57817 8 0 8 2.01 1999-Aug-27 09:09:57 4171693.26667 872117.91775 4730013.36182 11.80797 48.17153 531.44227 -2.50270 3.74174 6.85161 -1.94231 2.41805 -3.94124 8 0 8 2.01 1999-Aug-27 09:09:57 4171693.04107 872118.77160 4730011.54268 11.80798 48.17152 530.05600 -1.62076 2.56290 5.46535 -1.06036 1.23921 -5.32751 8 0 8 2.01 1999-Aug-27 09:09:57 4171691.37081 872118.97351 4730014.02342 11.80799 48.17155 530.84173 -1.08133 5.40477 6.25108 -0.52094 4.08109 -4.54178 8 0 8 2.01 1999-Aug-27 09:09:57 4171695.89944 872120.24748 4730017.98876 11.80800 48.17154 536.92660 -0.76103 4.55194 12.33594 -0.20063 3.22825 1.54309 8 0 8 2.01 1999-Aug-27 09:09:57 4171693.60319 872120.27540 4730015.12961 11.80800 48.17154 533.30095 -0.26381 4.31574 8.71030 0.29658 2.99206 -2.08256 8 0 8 2.01 1999-Aug-27 09:09:57 4171694.51508 872119.88648 4730013.55454 11.80799 48.17152 532.66950 -0.83110 2.65951 8.07884 -0.27070 1.33583 -2.71401 8 0 8 2.01 1999-Aug-27 09:09:57 4171696.62682 872119.69056 4730014.88941 11.80799 48.17152 535.01596 -1.45501 2.03936 10.42530 -0.89461 0.71568 -0.36755 8 0 8 2.01 gnss-sdr-0.0.6/src/utils/gnuplot/8_GPS.plt0000644000175000017500000000211012576764164017615 0ustar carlescarles#set terminal pdf color font "Bold,14" #set output "IFEN_accuracy.pdf" set terminal jpeg font "Helvetica, 14" set output "8_GPS_accuracy_precision.jpeg" set grid set xrange [-8:8] set yrange [-8:8] set ylabel "North [m]" set xlabel "East [m]" set key Left left set title "IFEN simulated data, 8 GPS - Accuracy and Precision" file1="8_GPS_GNSS_SDR_solutions.txt" #file2="8_GAL_GNSS_SDR_solutions.txt" #file3="8_GPS_GNSS_SDR_solutions.txt" #values to copy from statistic file DRMS= 2.034509899 DUE_DRMS= 4.069019799 CEP= 1.678044871 #difference with respect to the reference position #values to copy from statistic file delta_E=-0.560 #gps delta_N=1.323 #gps set parametric #dummy variable is t for curves, u/v for surfaces set size square set angle degree set trange [0:360] #radius_6_GPS=6 plot file1 u 9:10 with points pointsize 0.3 lc rgb "red" notitle,\ DRMS*sin(t)+delta_E,DRMS*cos(t)+delta_N lw 3 lc rgb "black" title "DRMS",\ DUE_DRMS*sin(t)+delta_E,DUE_DRMS*cos(t)+delta_N lw 2 lc rgb "gray" title "2DRMS",\ CEP*sin(t)+delta_E,CEP*cos(t)+delta_N lw 1 lc rgb "black" title "CEP" gnss-sdr-0.0.6/src/utils/gnuplot/4_GPS_3_GAL_accuracy_precision.jpeg0000644000175000017500000013541712576764164024612 0ustar carlescarlesJFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90 C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S((((((((((((((((((((((((((((((((((((((((((((((:;P~?&5m_I{iڔ:sah5{JtQwPBc>?xJԭ+N',yyso9&r$C @E|3#|gռSc>q|I״{+=+זVZC2HL*JO? ~"xMյO,&֧qtO>F1#ljmǯ3^ln #\M{k/S;I*mA9'&?jIc^]Iw8P+^~[9|%i^+mk/JGB,n$g_1Adދt[G?߲ï\j=/A t MKĞ]{tJ?4R*{F@U_:nxiY}<]ZM~{lۿ""Sm & x G,uu?jC&wC\xL H:Q^ @|u'|:ӎaڇ- 14 Uq"̲& ߵ|=XoL֟LЭ~4F?2y% pY,u?k?4M/ Kӭ㽷xьc4MPoD8 ??iM᧌-#o-RhŵiK:")`@1zWáo PS_[Oj#S9̆"ĩ(>3߆7\'mO)k]DtHж@d5XjO>w TqZLR5ʕeP7?99}E|3B>=iZe1[6CI y|ݘ;eh3\jb=I5]B~ǧwM49R8C21` WLhyx& x^.VVfdI9 ~lq=~ +O(K7!񥝔Z4I,z%\$)#+#K44`rV3Oo~"ZC 7ȳյ(ZIvH2**&7g$9>|5_%ڗj{J'tnfx],tWWs'CA׮l/n5yt5k$C*7.#F~\(৆?.>^Z\EY!wC[Kk0 ܯr8W?~%'| Hm5X/o{5Hdu-(ۘzK[>x'#H{3-ͼq#2Q[(9\rzQ_.\Hk 7O~ ^g{mS@dS ֱLLb4.ΣqFso🎵|;Kh5͏KC$ 8ePoOgM4`tXEA/+S්uWt[^G`]̶SU- s&(O~WKo^2ky%ӭ$-a0M 8P3+믋:i׉Sxwvj82KFge+,~?up2b,&RA+Zf'}; kiMDjg25c$X7e݀הWmެt:6MwxV_x{RKYGp2qGf)3ƞ)oT🊵5q5C#y/QIe8~۞g i}ޡXiRo,#1P%vIRB~^|=xwO+% Bo ؆ddXt"=ڊ\ S.OZiگ4ͣYL@ʌp2u>,'_Z+4i.&ym[=E"K3|5o-20{'h$lNߢ>/g ផ|%E 7`\0/ |as>7t%Q { y$1 k'qxǟ*ϊmIirG-VXJLPTn4'G|5 BψgëtӘꋭPX.ϟ!PƁ/7ÆxܶYO]6% gVʥ1&v$5_|O_/>&O`>iZkaywUZ(t-xIޕv`3,WQLF^4{,>;^=|)s=:ZhQ |dE)ȉ-QWPzx|o/x?Z>n:Ηuf$C )"\>ny_З|'V𧋵+ jVjZxܬ$ ,тe;$b@(k Y>_5GԬsӼwdE ]$G>fĿ  ${{]$kŦeNe+; *q E|-Ooi1G5Ϡx21l|?]|%e:w4[DH3l`0+9O|+'z.lmtE"8W,Yr]ݙؖbĒI&>f/)׋u;6kWP0$xdj6zKZ޶X5]•26H'lQ@"hrA'Gφ~8eE?󪋨g ̊IX߶$ >ik6WGc}q,le L8̥YFFW?TP߰|s6Xыmjٍæq_s ^bH%7dƤ @H(⯆^oO~k |9iz^(4Q<ȋmg.cpҙ Bo#⨭t[IÚƃul yecq4@1 ,nqXFzt .4c/eny^i9w,䞁T.p㟍//ǚO!WDzWZK,ly`Ye|W^gh%}q0XQ<;8hNNJOZ(_^0?ioS<x;mƳzu;rDHO7Z1CW~~:-l~#iLjOxy4Zu2 1ifMS*(G,bsxŸAad].ͧ-b:Uw䪅SH\gcj7 &; OͬٙX%@$QUdn!,%gij%>yxI߿n|ϲ-n9ϊ|2NiXz}OupQh 68Oj(4/[?d | Hl:6aא$f3[>po/ψ:'>x7jyM*Km.;)6lrO E|K9~"/ώFmG:k-u6-%-̩"سawگ}3ÿ m. Adlu^xVyBrD p ;WtPğ~ h? |wG]#Vn[ScfAfC^`< ĸ#Ὴ FҾ)fc]+69/d9a;8 E~{Xh1ǖ^ɭ=֥ek6[&-@J&H<6:!6| |e^_7ɧܓEs=&&#8qQ@ֽ?s„J-xwCM>׏+/?C㩵=W]&[Vhl,į*[*";8]خ?.>4x[/:)_I%xb(CXGxJU>t nUΚn?gsoEѼCV]2YeiF<(|Q/[isx`Zho7R|X"˨>:w^O7 kkuGeDTd0'$`{ߋ|@S~.|=ʪZ(:vO6N?V-Ng;K$1L/r=_)v>Uz_]E{T›woUW@U o] UG)v>Uz_]E{T›woUW@U o] UG)v>Uz_]E{U|_$G>=u_C5 (%$0P6$c_BU=Y4{$\Ak(YmWqy)v>U]E{UP›woUQ o] U^EyW)v>U]E{UP›woUQ o] U^EyW)v>Ur>>4]sGM3@-Υmms&Ki\7E( %SUY&|O#( <̜8J soS~.|=ʪ?M*h*7.?ߋ|@VS~.|=ʪ?M*h*7.?ߋ|@VS~.|=ʪ?M*h-Wo_xE<3kd~LZ\q4¿Χ'^le<wsouk4"xH;pk (o-?Y~7J{ykYobcyuJe xඥ_ ,ot{b+V!:* L AW5᮫x_ºfg($dqʑ߄mi#TƽxL,P^7BXub34񯌾ǟk]CN5K;?zDŽ aKB[,72̑N+ Ss_5/^)_-wiv5P#ݙ qګ?<,v'%/Bh5xGq"C H#,B9 J;w~+OmWje&rVp7p>_7+k?>U߃0"ce3Dyb5 ]"++Xyn$j gv8 I<+Wu?U]Qkj0 `:x :JC1:s%{ E=,ڄ7i=ـ<O4@!T!CO}E|T!COO4@!PO4@!_3 %lr`$cx\+m! u<4GN߈ |Un<+ۖrɐ\LУԐB-? S%k|'__>7xKGś [K;4= q"cy+ݮՍW~O)4?^_&( 伿M/AOi_//]v^K[KpH<PjQEQEV-LK[YmV!"HS`ڎ $0$+BϤXަ^ƪpvx(Q@Q@Q@Q@g%bkչ `d(|Y=+Bj/SO>|#͑Tj>xˏw9\(((((ʼG'Ov^^U?:&xK*Z(((((((((((((((((+ʼG'Ov^^U?:&xK*Zמмg[}_CuW_hlORΉcY#WWMe#sJuI7ctg~+;vc~gg uY;[ݭfd&f/# iO_7⮑Vͨj:][ZpYYo.w1 H_<~̟FHb״oC#v)Łg W$`}#_%,SVo])neὣWp!K'9o'? He ƺMw>&۬]F(G*F v]TԴ"WE p>\qA89>^>m_ڄx+zI5|A.a#J]Z\yg;q<{'sľ?ďxLRI,`AI$#\((V;U1R (/4%U SG dEl z]_<]D'x{wZ^U B~ wkG.O z_<]D'x{[Ykjv/T ͼwmaEPEPTed,UMqaee;G^^qr=$cM}jֱ 2Lr@%9@QEQEQEQEOUVkT d>T(W2sP|(1*gAfk8ո@HbdUhB(((((*?% 5冓ɪAusyvPO;49EGU$ȠʼG'Ov^^g~%~_ gGVIsa)(HE`+݌hhM3|>ivql Jpqz εw١w}gnyL+>?iQZZڦfX$2Ht\a[$y5#h{뵍=c BN>`#<P*z=a J">>P@ UkE=:Vk4H!vI20O cԛI]wEeh:?kϴ ݍT *X=EikjeZJ'`@ !qlr9q8;kfV 6ZkT٧Т|K.\o4-| IrB>nH5vNn"n>{dejp#J+^lUI;uO_h yaV2)0nO0i<9mXŭ]AyJ.gb; \ !DU,㱚dhF2ovqZֿn4?n򼏴c󝛺84]+nӦ}I:jvm}(=EikjeZJ'`@ !qlr9./77y-| 78D(QlA'ZUiSGmqVXǧC-6b6@tYmW gT`ZI@.x=r]xgW.o3vnh~yiǙ;7u۞q5^?iQZZڦfX$2Ht\a[$y4ESmOwvgPLa\(]I$`烊FlmTW6Wib.U=UmPiτy*\q8-իokw) M! uQmLɤ[j̑PHy#8C s@V|~ҢM2-m%° Hd¶I9jFѴ{kf{ t…|Fx8 U5Ѵ{'[e{)jͺD||8-իokw) M! u@U_}y^G|yyvtWTVY{xV V'#MhQTF]m%W7 hq 9Ѵ{'[e{)jͺD||8 V|ҥ}2n3B!I$6@9<*u۾ۼ#>XBXZ d.Tc 8TDvminWRէU7NIٵFSѮ}ƞյ[]unVY"@c n.!1zqfSP7$AT IRXpvG<={˦a#23dK1;E.^bA&._Oִ6sYJP0+nWGl%Kp,B͎HRI=qiRjk{5L1jWMk]-KEk3C闶q\x 4[ 0wc9”}jM<-Wnm5Qӏ2Ek}ZV[vFKE7j+u8## kxCR5}]PI$4O pܸ_fyۜ<93]W@*sCqA4]צS4a<7c8@>J%ڑ@?I䚱WeU6krk{/S_ R'v-BŅ ?$?ړ&u>Bf8AMB1 U5Km -j U"Qs={߹gUGψ.^\6V[b3Gh򴼌0bg}"yBk"߿k7XfAݫQ՝FJNY7hӲw0kWZ5X4Qnmk,OKk>[8;mۼ-7*H G8`.}xf_[-};PH㓸eχ%j>&x5 .-G,}N2yʥ]ĺn3G]hI5u<[RqPrj|;>Tֺkͺѭ5 ];[9nXG6-rX;&fAF}ݼ^DG9 m8QO.{IY rI$&Imݶע鯕:iFTJMZZYm,5ֆi?c$I}ˌŘZEl|;[imY&ȡI9$I$\ |Wvҽ65e[<(>@4.Y~w$H[yO%pr2:Ⱓ_ ZJE4ӖOe+[x~桉+b%ԒӒM)Zڸ7سEWzY 1-mf[XV!Mj8$`ȭ 3>bz#-{?xux QET=jѭ zymGj8LS_1ۻl8 Q@BUeUܒ/B?A\6?Uҡi)[}XOybltBUeUܒ/B?AEPYpIe1unDpX8 9*Voe9JЪz2ڡKϟdU!2qq@(((((<3Ŀ]WוxN% V ( ( ( ( ( ( ( ( ( ( ( ( ( +gxĺ#ǭߛ  i6o\Z3\ɴMraֵZiR {[ox~IfTDEbHM}EygONg&M [6fqܯ͖ ЭzQEQE^#ybgBU*?[=?[?#L>d\J6Az1P,&5DS[KH4|c XM9NUz&ɤқMƷ=5{[t4ggSb@cʒ=wߌ6⋝6I&iw5F8m@X*Ih=cQo.ڼqqszL5%Z#" \fc /<yt;#jc܆9A pscn|sL>RRU!Υo9٧&mftWI+:T`*5iӕhs{Գ|Z)Yj 5ySKFRV!V+8 zI vwuCq/gD2F܍ю*Ua 麞o)$ӟ׍洝Ӗfy)u}(7%vTS+.~~2֭u[ѭ%qT poUo4jR$:uwyQ_. ~`GWQn/6fVNML>'~V+JMoUf6SC>"U7he2Fڠdxb[KMfjeksY9KXD#nʞA<=k~m$WwQ/vs8 f+";`tJ%ƊٻZ+oX䜰Eq@wiνIWS%ʡW[ͪbkOJjT/}I|^>έk.TH6Tnۜ(BTRSi;譥I[}V*29{K$ݤ}/SѕHWM5x!zqUKiku5Zb$2l]#MuQ@Q@pp|7֭|fDB=2}Of-UM[LZnlnWtF=# b[76RKwl6 $dt$5uU=UYP%jτR2\A8IvQ7VI!"Vcu ( ( ( ( (<t?L/hU^#ybgBU(((((((((((((?ϠZ|'=.Oi1g>M}cHP)5>j/;Iu+d֮ǧLeP8cl9}Фc-⏌ [&7O:ԲhE7bpbdp@Vi_]| avm;.7m6xV֟|eevI<?#7pvU((+ʼG'Ov^^U?:&xK*Z( ( mKr˻Lг [?xÏ^ kc%YaojnH;Ծ~-l)Wtο!p2; (f|Kmi&{kax."g*"rW?^FTY6ym_B{x "dA%h;?{Kfz鯖ɉ\T+OKGkv$9跚݅:{bL_O՘bL~%-4/")." in6($('?er=nBꭎ PA#=3+GO%բw}:FRg.v3ONl֭JMIFNI[w}uxxšgdtr[6x4cS'Yg w9?hO\xWI.ẞPmCJBH*7e6']ވ5 D-^ "$ၻ+վgQX5{6ONgڤem+r8]| VMsF]1~&Xf%rq慔79it^?/Cgm6.uɧLe_4@H!PxZ4o lеC]bP7WSB-$?2t;s+E4];BuAm-VRK?yfUȏ#V,^>S3 㯏^!>'߈/g{=̈́soOĨS͏% HX^pF)Ymh6XLv:KR:^)Fri+'ۍ{+HZ?C>xVƭ?bxT0M}f,ŵt'O=cǿ6ȓTlu l L&2a$!69V%>_f~i2],P/<5y2 HXm3o|'5妱e+zu7\ Xm+T! sOBR,cKދM7;j{U1l>r,!Kikus?H/j<$ҵ#\+EDj v2?Y-o7Iiuy=jD7 iUx2+ni|r.-o.ar[,1(a.6-7d(u \+^vy (0Pܭ## <+m~ӟ^Y|S1 5>0iTɨ2n#[76C}ף|2kxBιqi7dwQ*Fv!c|~>G߈ɠKumB-f_mb$r #'WTݝn[Rիid&Ӷ-ݮ^IKi-.k| u ZB ]G42$}U2xuxAsֺK!2,ʑpyiCODUU;h:yh}v9CO8Z*ڼy޾f1[7cq3V+?\ ,6^F.ȎK!G8#V 9@QEQEQEQEQEyWؙ_.ЫkʼG'Ov^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5x ;xZω5mֵٵ F?:y\#KbpT䚥d~О >Ӽ1|oѼ8=Z؆.HȒ,%l)d]+ yW:OjIIiU=BQ*{|U>z[O~  =#t2F0>^'>EQELᯃ <[K'%T*ĬKȋSҸ_/o~#BjpڵujJ"VU'̸4'.(988~⏁<;kP5}/PuΐOiiíd Coźuxr{[@47?R@VEq^r>*?W8ٍcwbϏS{KYxM(DJX8}2>兺EW;c<|FO\s@^ibmBt_ F S+6kZ%hc1XPm.|ø`>M dRa"NwgvikR:/Ҋ8ߑ[w_[Ógt[+ GY&aؘUYwAxf|ėvPt{{Z]Lg#,ʖ3!eܨu=mWQVuhgh)"#Ȍ{]z)J /~Kc3ʵMWiObpʶi{IjJSRqyN6n2vwrL4{k?ښ_,"dq#fJ!l`T۽X;lĚ ` nUPW ep^iz65v^!cކ1er:U:\լq 4EIb+FUM^g^f7oݎ~1RTTc}GP+ިX[h4X%s? ϴd5xM>esٮ$1&JnӒ=UmPiτy*\q8 :q,T}32.й-òAgKdPt2r۷pvv(RϏS{KYxM(DJX8}2>兺EW;c<|FO\s@(k}3=>E–Eb;dI<|G\sQɩܥIy!Ɩr&My'*xI+^Sݜl;犯r&$Q۳þ܉6q *_LzOan`b|>ѓз3)T\)iX!sO$ɸdu4rϓSKKxC)-: LBOTx M^g^f7oݎ~11u |QOnIrhPy YAPMF_*4/x‚.Gc-&-֥ݵJY!,pP|}z]ktK@|%MCZݮ!EmV@Fc˽ȬTcO/=#>x(cmFK ԧV,Q T1((#|k/V!iyai-myaw|%^Q,3AfƓx^/C$Dhث 0pdbЂ5wmem:Xr dqVm]AkM{緎Tae,K99rHZt7.V5}zԥ.W]֭kfZֵc*RԮR742IrIdu]+WZ+]GO;:d0^g2; Â?d v" Mv]Y$h_Fb2Ӧ vZWZj"ĺޙgk7no^\pBF<q* 1Ԫ$N:2jZ&o̯d㺾#*5Rj4)C^hɩivJ]?WgC¶ڼΠ4/f ݖٟRo$&'Hc7|.^!i rxYռH/g8T U#(@ʒ:~ݶx}j^%y5uۭh˛TDpE F12ZGo hms\`JEZo-$ї*ApB 8\>ģv4U-/wo4pX\^׳Q۴bKV|r!5!GtLW1,#9!v1/!h2y}|=coRu]7H,m-|9wxv)tFw;@;D,W5]:L5k}-4ByQ /*3j5Y[K&(;1YPrYpΦ*i;{+(⻄\lQj))'yJf|$p*jE>_b}$JҋPII8+XExfSݯflYK(Vc$2HK=p^.Gmr\] VF}:)'Se_&B(* 5s#xKⶔοumq/N_.͐*9RJm``I3O~G:\I}vYZņva 0@f? ˻7tP҆+ps+M[iW#zŸ(ᰴi}'NJMԦ+3TdkTޱn: <i;ź$'9]:<(- \(hQ,;B ˹-l&6d^Uq@TRϭ'oU"zũdPƱDC \X}CQzz%a`sI, ʔp4jSq(%ΥU׻uy5\>[F1I¼%8sΦH5G\Z{g⏌7m5'K,"̸dtx&` ォ!R7v.+5f5kRʛcb#U8\cOxGN4jG"VcngnBB(տgs .qw#nxZ,{%' }pTէ׍ENi$$N'˦/{ұpT2"QJN\{k^֝| ֵ-+~qL=ūD%$gqN쿼t*8o~_S 6IRTcfudH6<S3mp׺֣kguCW/qb?twׄq%R/G@Pك⇆b/aw."-6K)qy-u#@ ]Oj'nͻ?M4VIl}Qt%/Y4I$%Q]QEQEr? [=y4KWY_1dKĮ `imsKfḴéȺ]F XKĬq,L$SV(5TkZ< -K(0/,!_5$un^~T!^*T卥SSӵj2Iuѽm3)f4p**)rQN֒nܩ6^@^Zj%2i1[-HU1*g|Pz+g4mR45qimr79-zƟiZ:xkŚyw1uv.1Pr0[Vs>ֵ1"FK]mdqayFgug *(ԊOW4abTn׳aiӭVcV K3擌 `#>Vvo>(T[ ^崷-䷙!1,jR%!_+"mP/u}xZDE ݴ!- wfAC}3v9uM`ⴴ΁hx.%]`f|{'^OkvZ(Wm˕ҜRuRJ,TeyG1ev.Wv=_Z4] RK;˻qoi;F .v($$gs4I-|;Zb_q'xID\r^>jPKݥ,:eJ%[,rE;S Pyf{#Wi;#\Ƭ@Yi$=Ws(`7ea-8+O|]-z̟֡ݳI +EX[>XKYAK!ԙ[{6г2,j~E#!XH^ihޖKMRע]ocfZ'dޖKK4W[3EEos e&@h0 U#`A"WG(c (9?sF51sk5b܈q2s>U`sT7:u dgMINp$C \6?Uf[T)zyl0W1\|.1(Q@Q@Q@Q@Q@U?:&xK*Z<3Ŀ]WEPEPEPEPEPEPEPEPEPEPEPEPEPe+Oź_ xoQL{y.}Cl~uQEQEF k}WL<uH5-&M7FGEŭ(tӞ(U?hzltxzXEIm!A~Ͽ@$Ke^PX/;i*B6JK^ńojW3&4g,)͈4*X{u]qQÞT['骘xTœcw'Mko>(.mf^+]Qej{;yԣTbw7|B<#톣/|?ZqWeTd)ʭ/ } }PGO[B(ʳı3 pvr!uI3A[מTwKpB 7GJ^ {_]5K=Kx{]=tK hG[jZBA+m7_]Ji+r狇,eϙZNsK/y-\|ե/iJJ0Nei;.tF*^Oyg݌ck:ͭ3\D.'h1%pd𗁧Vj,ݧHຶb66ۀ2 ;F"9j{O k:\x~KHg m8*ys_ ʛN 0᛭wE6lCeuBU~D*KW]4-5i$Hwfx'pԐ}.DGPjxHIquFf`6G,"y=mw^ lG&y; w3qSI}{ơN6֪E()iuib|(ӥ NlҒuknW5 Gk/JLtKVe@2vcm|,W4;Ycw:\Hb%b…3U efc*O|24 5HBLV$ߴ%ljv'<?ctk|C-(D"3bXr=\VpIE_wJ0I+%o.c RJ+w(NǙF1m߆6}/j1btdu󤷻)@!gB1&T==eWqh^n.`|ᾶ_ 3$r2#2Їikozw(^j,Z>LSJ fO 3vb 2/J־"|o<>+^s.s <IJəapf,3'RPjZFY^ߥjqXi*t`l/}\nJ;I=)sKi60i+@Av9'4<]~647>N;$IJnQߟ3.p(IJeˢӢ=l<*XUh|+$tgmh(=4 &f$LWa0G #Que]jC#)Q"a-UYP%jτR2\A8^Ɨ]*B2ۣAڬAfk8ո@HbdUhB(((((*?O*ݺR|-cqNQ4i~"kpOYyBi~T=<5xI*th#GhbަI>lg̝pq]xꮗ/}{sy4h9f%T`}@P"{K{DH[FpQn5dnMm>`U]]َG,qsa'Jjr%๩i.h}N;Bz%(aܗ礝"IWPik wWu{vY7,mԦLom(-V8d vg]F>· XmeLml 6ug -iVt#qJcD6Cyh% OPny{oZxm҅6;M4hSg`Ydm?6Ӗ!Ɋ1Qqn[F8w^)bV(+ɻ'&xr)8ɦݷ>.dՋ^Vesplõ߇^5:Mϭh/d.Td`фkegfOݳNYr[emάmJJ\I>[J\UA2J vlV*ˑ0 Rn/oi<;Em үཪJ]m>IJ_ɴA\wĩOС8UH#g+|i9ퟨk𢯉YFX\AJU^Yn v1ZWWc|6=~v{?fv3jg%bkչ `d(|Y=(B(((((*?jB!+M$NVfBS :( %J)]Ye:N'WVvG"~xq%4_[m즖K=ue 9/֗>|HZ]l518#KJY[qM5/'m UKgzȗ$w2@,q2\Zo%o+ŸS,;]3M6_,oH dWIs¸x˙ZCSR=N29VҼ~'wԼ{E mnjQ\_1%vrI+|BGeqi}{kqzmgE/hI4J/ٟ?W0ejTBt7+''N)I]>hJ.)IFiKF>.<xVۧ3U}=."~ | Uˤ)\ǤJlx:Asg)PA*ñVRxC^%KԷK?E"JLLPdRICaxC\Iggm,i֭obT a~^1ӡQ_oB>E6m-;oMwCl4}.h%&YDm]AkM{緎Tae,K99rHZtmL5{^QM m`]23qs6taݷft:\no]ݓ$N[>6פ,}3 {TE+p00rG'1ެxSDs:q} |휂lp88+ӈnj;<IJ00z#taTVeB>ȪC5sW|YU%?k:> xu(Z/hyAw66vm9{yWؙ_.Ш-1ull0 >}85SZ.<7,VsV\s] ޕ6LM!?x32zбj\E" vVj%oj"-`īBp9C|y>I<mۜj>h7^8WkINU%0HjJuv&&ɐ=jMb(E ?v32:rAKK5iIqa]|]2GJ[9gSm%+(ܙc޲nsmK_4Hf]+";^&$` * .ߘ @e*Ǧp|JVZiou`hYkueͻ_Kt}ucugp!@KJCB<7> jږe&"e ӕL+s"I+<^1SU%%wMy4Z8춆aq WW4ַ~i庾 /iyttM--hȥX‡  ]swxFl<_Ū*}XBr78x2T*G_|2PZS$33vvc1ԂKEៀCMޱyʺYZ$ 7z,w v+|; Z""Ӗ*7z4v|eR)5pR5 i{ n'7)Z˚NJnyg&%/!KӬC+4 Z6UP9f*W+'մYa(m՝m!ڻecI`FB%d7r]5e߳qn2cڡCA<YZŮJkG7#FqhH=hzT0isC)ͷ'+5'%OjrV0*y:sFSOkY((4ՖW/^宱bFmeq*) 0p/ ]R 0k-csgmiy -lx_؞M?n֮_ `gSrhQ\\^\zK~RFp;*0BPܞ_VD}>9si]m-Z--u'{K+I8V;0m/ҐIP5mb(E ?v32:+3U6Jktғo#Z9Hºc?0e9.u[t l&3 Ī2,lU{y+?'co|cnlb8?/84Z{ҷ6@݉d>gpp6qOZESXEm"t+m|݌㌎jRnRmkG)yW_4lg EWu·>V<$f~ێ6yګ--U,eEpGEIF>b8?/8P6P/zV#۱16L8BŨ-slQ-[o3~g'duP|jRnRmkG)yW_4lg ce:X|ycn8۷9wjE|i8je/ah3V/=g{sg)l۵pyWؙ_.Ыh(((((((((((((((((*?-)sE,$,L[O5;Aׯ4J?O2WR<-V=p9H-vM?2'0ᑻ2A"v<6v[<0SG^Yk3I(!g& 2y]WrNd{TZQ]BYr=A'pg`+Z ( ( ( +'Y-iw]W;V80$~*y9(`>+in.%H K+TP2XsE5jy@ Pk E9VtgM8m1T{kFqwK]Ti֗Z\2-be|gVQՀ8|?$E,q+B9'* ʴ\h7~𶍧r ^m:XcZ<@N#8#kz{vlO=65\CE$q,dh+bc!((9ӌdo$䍍64NH?XV <a QHナ|a}; mUkk$SiPJw$ǷZe'OM'P+,$\ʶfWIð_i7cSyj$##ikќK+YեmZV=-}whԟժr)Yjҵjŏ xBí-O6N&m0 E'IWqQ@g%bkչ `d(|Y=+Bj/SO>|#͑Tj>xˏw9\(((((ʼG'Ov^^U?:&xK*Z(((((((((((((((((+ʼG'Ov^^U?:&xK*Z( ( ( ( (8 ZPi=,Gwm tRg7n]dKw(H(зՂ亜m"I8`fm2HVMq"(9I+1*gop4(;Fs6wᗒ<#ѮoX۵R+ݻ g'Q^+ќ.v8jې,En][·rәnrG'ǓOx%hyBTeg# .8@uEqs a!Bi(,W'bZ~Kv-5i`-TbVA QA$_E=cYTm.n#Ϫ[hW趰^jh.$؎?#= .w 9~*xwh3_N-̐ }h>6%X Rojq';\W[ךRԧ()85uWtGG.&YA<7Q]3![ x<ž5|B>vAlw"2A¡PT` ȼW^m?@ϝ)Q åcW@u2R-osmrHH89G9PVeENYu߲c0ZBoڮF|Y9E]-D2sKOP{=B=:{OPX(̀l]ۘ'QlxwZ2IԤuf)ZRFܸP zqlJnZd%!1QY, g= s*DOGMVA+g#9!)SVz=/յ7Wd완Sւҳo[/z\۷e+EuyxwQ.}J{m'h *;4+u6V[ĐA% `(izƧwY]e+mKo*oFbNr RTۥaBv׺]ZwwVв$U%/:+WnN7WAEW{EPTUf@I>H5s'h7^8G^Yk3I(!g& 2y]WrNQEQEQEQEd[k+k罵} [kDP[{3c >Oۼϟ/ݳT(W2sP|(1(Q@Q@Q@Q@Q@U?:&xK*Z<3Ŀ]WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~_o~ο|] =[J.f("(VbFC8{ԵNyj3t14;ET{eQRF#)Ԋw<1xkŋO xwzE.?*K0̑}b? |SV5MO>"ц-V rs0T.scוxN% V|ĭWIAiP[Z^h2E;BF^x5'k3#^U  @ÏN??@EyW3O/?:f_uz_>8!?|#AqCW4G?i 'P^U  @ÏN??@o8!Z+ʿ|#AqC4G?h*i 'Q  @ÏNU_g|u$ iΏgڝL1K HvG3\3O/?:i? *L.qiP/E "HUPP((*i 'Q  @ÏNU??G3O/?:=Vf_u>8!Z+ʿ|#AqC4G?kx~P7o6itgu[E/̙<7y/f_uTe?Vo]&b eE)k$YT {_>8!?|#AqCW4G?i 'P^U  @ÏN??@EyW3O/?:f_uz_>8!?|#AqCxN% V)o',vSi\'o& ^)%HUMo %@'^q^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UM[V4OSӴ(^U"E,;UTXEp|,h:;AAi2wB alt~~ߵ.nuOi}(x$qggm ) E] |ėL5m"{w`Ҭ1ހ Z ( ( ( (Sǁ;'/gB?7Nh2%u((((K? #ZгDtȂIvw# s@dQ^$M¾$xROB ݕeS$CFtvFpk(((>)xg>.i.ڲ߸k(l;q:+k>(s~oپ xi3%ж଀Y6RsOoُkE>hzZ2j.)UvmîI}{EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMtYQ:0+ = :D)1„jg׊߲%Υs㿀<]YuzMgCu"IlSjA+k(}ooƥg\΍)Përf +4(`g},zPEPEPEPUOyDby@~zU(OWY[:uhӮ|aympu$25M屏9۞k xr49Y4*esDEjQ@Q@Q@Q@Q@YH|ø7TMĚNizRQ$LܧS+/㆟;Mz7ĖI&Ub쨨.$f((((+Ⱦ(xc>;/hWO67P;&9th%U5P~Ͽ:|] ZW׍oWahD6%Q;PEPEPEPEP^AWi|!}v"K;}B.`|2̅_ceAg/㆟;Mz7ĖI&Ub쨨.$f(((((((((((((((((((((((((((*>2ؙ ×|/n>ɡX/5qtm)a4)Exo>"/WHZѴ2m ei}>]<Ѵ]y`VEX%|_ߴ:ǂDuI4I-/KtﭢXfPVQ+. ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (<㟀_7ZZ<36bO-ƛ\ @Y#wݭϡzdFU#, #>O)5hѴ WCxbB~ f2L&gfO|=? x__,O<۔iY$>eߋ:vUQ4"8A7Sy^^3[ݷo8x|rWl?y.cPXaGdRFBfleހ?;h$i ~ՋM75pϱԭ 2w?+ap+J_|BDƟ{iI663dīo,bP )##((((((((((((((((gnss-sdr-0.0.6/src/utils/gnuplot/4_GPS_3_GAL_GNSS_SDR_solutions.txt0000644000175000017500000113212612576764164024233 0ustar carlescarles time X [m] Y [m] Z [m] Long [deg] Lat [deg] h [m] E(Acc) [m] N(Acc) [m] Up(Acc) [m] E(Pre) [m] N(Pre) [m] Up(Pre) [m] Tot Sat Gal GPS GDOP 2013-Sep-20 09:11:16 4171693.97233 872117.53398 4730015.03429 11.80796 48.17154 533.09677 -3.02276 4.40094 8.50611 -1.20980 0.80488 -0.48942 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.33830 872116.34933 4730014.33700 11.80795 48.17154 532.00164 -4.05260 4.57900 7.41098 -2.23964 0.98294 -1.58455 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.05315 872118.15688 4730014.15668 11.80798 48.17154 531.92781 -2.22494 4.39110 7.33715 -0.41198 0.79504 -1.65838 7 3 4 2.38 2013-Sep-20 09:11:16 4171692.12670 872118.20356 4730011.97295 11.80798 48.17153 529.70220 -1.98967 3.60338 5.11154 -0.17671 0.00732 -3.88399 7 3 4 2.38 2013-Sep-20 09:11:16 4171696.84323 872121.85875 4730020.07446 11.80801 48.17154 539.31673 0.62302 5.00884 14.72607 2.43598 1.41277 5.73054 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.35432 872119.69457 4730016.43049 11.80800 48.17155 534.02857 -0.78142 5.45339 9.43792 1.03154 1.85733 0.44238 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.12694 872119.79577 4730015.98216 11.80800 48.17155 533.55988 -0.63583 5.30481 8.96922 1.17713 1.70875 -0.02631 7 3 4 2.38 2013-Sep-20 09:11:16 4171696.96879 872121.82141 4730019.17596 11.80801 48.17154 538.72409 0.56077 4.32373 14.13343 2.37373 0.72767 5.13790 7 3 4 2.38 2013-Sep-20 09:11:16 4171694.15949 872120.93965 4730016.49439 11.80801 48.17154 534.77171 0.27255 4.71888 10.18105 2.08550 1.12282 1.18552 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.75614 872120.79377 4730017.69730 11.80801 48.17155 535.38484 0.21229 5.83754 10.79418 2.02525 2.24148 1.79865 7 3 4 2.38 2013-Sep-20 09:11:16 4171695.61533 872122.42037 4730020.91833 11.80802 48.17156 539.22062 1.42402 6.38158 14.62996 3.23698 2.78552 5.63443 7 3 4 2.38 2013-Sep-20 09:11:16 4171694.88778 872121.15270 4730019.60309 11.80801 48.17155 537.59264 0.33206 6.22839 13.00198 2.14502 2.63233 4.00645 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.43914 872118.88386 4730017.86310 11.80798 48.17156 535.04081 -1.59233 6.47055 10.45015 0.22063 2.87448 1.45462 7 3 4 2.38 2013-Sep-20 09:11:16 4171692.22580 872118.12648 4730014.50631 11.80798 48.17154 531.64410 -2.08540 5.23236 7.05344 -0.27244 1.63630 -1.94209 7 3 4 2.38 2013-Sep-20 09:11:16 4171694.15704 872116.07742 4730015.59062 11.80795 48.17154 533.43313 -4.48630 4.85933 8.84247 -2.67334 1.26327 -0.15306 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.05163 872116.15088 4730014.39550 11.80795 48.17154 531.83101 -4.18818 4.85737 7.24035 -2.37522 1.26131 -1.75518 7 3 4 2.38 2013-Sep-20 09:11:16 4171691.44820 872115.16638 4730012.34165 11.80794 48.17154 529.11954 -4.82374 4.80727 4.52888 -3.01078 1.21121 -4.46665 7 3 4 2.38 2013-Sep-20 09:11:16 4171685.37039 872113.72974 4730008.72245 11.80794 48.17156 522.25911 -4.98626 7.04568 -2.33155 -3.17330 3.44962 -11.32708 7 3 4 2.38 2013-Sep-20 09:11:16 4171690.06034 872116.43183 4730013.82510 11.80796 48.17156 529.49163 -3.30106 6.61590 4.90098 -1.48811 3.01984 -4.09455 7 3 4 2.38 2013-Sep-20 09:11:16 4171691.23714 872116.64891 4730014.88922 11.80796 48.17156 531.08239 -3.32939 6.43413 6.49173 -1.51643 2.83807 -2.50380 7 3 4 2.38 2013-Sep-20 09:11:16 4171693.21171 872117.89698 4730015.57287 11.80797 48.17154 533.05111 -2.51180 5.25955 8.46046 -0.69884 1.66349 -0.53507 7 3 4 2.38 2013-Sep-20 09:11:16 4171690.94846 872116.12466 4730012.76005 11.80795 48.17155 529.23586 -3.78347 5.30468 4.64520 -1.97051 1.70861 -4.35033 7 3 4 2.38 2013-Sep-20 09:11:16 4171691.01303 872116.67548 4730012.29188 11.80796 48.17154 529.00432 -3.25752 4.86136 4.41366 -1.44456 1.26530 -4.58187 7 3 4 2.38 2013-Sep-20 09:11:17 4171686.92529 872115.59058 4730009.79479 11.80796 48.17155 524.32713 -3.48298 6.34298 -0.26352 -1.67003 2.74693 -9.25905 7 3 4 2.38 2013-Sep-20 09:11:17 4171689.09965 872117.40230 4730013.21592 11.80798 48.17156 528.54302 -2.15454 6.76235 3.95236 -0.34158 3.16630 -5.04317 7 3 4 2.38 2013-Sep-20 09:11:17 4171693.82864 872118.34509 4730017.17592 11.80798 48.17155 534.70949 -2.19941 5.81033 10.11883 -0.38645 2.21427 1.12330 7 3 4 2.38 2013-Sep-20 09:11:17 4171691.85980 872118.16204 4730017.17833 11.80798 48.17156 533.40107 -1.97569 7.27587 8.81041 -0.16274 3.67981 -0.18512 7 3 4 2.38 2013-Sep-20 09:11:17 4171691.77791 872117.74707 4730016.15426 11.80797 48.17156 532.52790 -2.36513 6.71592 7.93724 -0.55217 3.11986 -1.05829 7 3 4 2.38 2013-Sep-20 09:11:17 4171690.71021 872117.27718 4730014.77869 11.80797 48.17156 530.74179 -2.60659 6.64895 6.15114 -0.79363 3.05288 -2.84440 7 3 4 2.38 2013-Sep-20 09:11:17 4171689.81704 872118.53772 4730015.06359 11.80799 48.17156 530.54306 -1.18995 7.29820 5.95240 0.62301 3.70214 -3.04313 7 3 4 2.38 2013-Sep-20 09:11:17 4171691.55376 872116.79531 4730016.19778 11.80796 48.17156 532.28412 -3.25088 7.05356 7.69347 -1.43793 3.45749 -1.30207 7 3 4 2.38 2013-Sep-20 09:11:17 4171693.82776 872118.45535 4730018.91249 11.80798 48.17156 536.01796 -2.09131 6.95229 11.42730 -0.27835 3.35622 2.43177 7 3 4 2.38 2013-Sep-20 09:11:17 4171694.19655 872118.91481 4730019.87640 11.80798 48.17156 537.03965 -1.71703 7.25607 12.44900 0.09593 3.66001 3.45347 7 3 4 2.38 2013-Sep-20 09:11:17 4171691.86539 872117.99083 4730016.02995 11.80798 48.17156 532.52565 -2.14443 6.53204 7.93499 -0.33147 2.93598 -1.06054 7 3 4 2.38 2013-Sep-20 09:11:17 4171693.15533 872117.98759 4730017.59780 11.80797 48.17156 534.53554 -2.41156 6.63729 9.94488 -0.59860 3.04122 0.94935 7 3 4 2.38 2013-Sep-20 09:11:17 4171692.18121 872115.90348 4730016.83466 11.80795 48.17156 533.04657 -4.25223 7.15664 8.45591 -2.43927 3.56057 -0.53962 7 3 4 2.38 2013-Sep-20 09:11:17 4171688.42657 872114.52355 4730012.03638 11.80794 48.17156 526.83185 -4.83464 6.90560 2.24119 -3.02169 3.30954 -6.75434 7 3 4 2.38 2013-Sep-20 09:11:17 4171686.83368 872114.31800 4730010.30785 11.80794 48.17156 524.47597 -4.70988 6.94600 -0.11468 -2.89693 3.34994 -9.11022 7 3 4 2.38 2013-Sep-20 09:11:17 4171689.01630 872114.65818 4730011.81674 11.80794 48.17155 527.07153 -4.82353 6.30846 2.48087 -3.01057 2.71240 -6.51466 7 3 4 2.38 2013-Sep-20 09:11:17 4171689.59940 872113.40135 4730012.50944 11.80792 48.17156 527.79681 -6.17309 6.53677 3.20615 -4.36014 2.94071 -5.78938 7 3 4 2.38 2013-Sep-20 09:11:17 4171691.49667 872115.40807 4730015.71094 11.80794 48.17156 531.69477 -4.59708 6.98205 7.10411 -2.78412 3.38598 -1.89142 7 3 4 2.38 2013-Sep-20 09:11:17 4171690.13679 872116.03487 4730014.42512 11.80796 48.17156 529.93447 -3.70527 7.02083 5.34381 -1.89231 3.42477 -3.65172 7 3 4 2.38 2013-Sep-20 09:11:17 4171688.48177 872115.80343 4730011.69753 11.80796 48.17156 526.79005 -3.59313 6.44420 2.19940 -1.78018 2.84814 -6.79613 7 3 4 2.38 2013-Sep-20 09:11:17 4171691.34954 872115.59222 4730014.29031 11.80795 48.17155 530.56528 -4.38672 6.11386 5.97463 -2.57377 2.51780 -3.02091 7 3 4 2.38 2013-Sep-20 09:11:17 4171692.31645 872117.07132 4730015.85773 11.80796 48.17155 532.56628 -3.13678 6.22840 7.97562 -1.32382 2.63234 -1.01991 7 3 4 2.38 2013-Sep-20 09:11:17 4171693.22291 872119.00896 4730017.72048 11.80799 48.17156 534.81045 -1.42563 6.51407 10.21980 0.38733 2.91801 1.22427 7 3 4 2.38 2013-Sep-20 09:11:17 4171692.72321 872118.13057 4730016.70730 11.80798 48.17155 533.60942 -2.18318 6.33679 9.01876 -0.37022 2.74073 0.02323 7 3 4 2.38 2013-Sep-20 09:11:17 4171693.24503 872117.69714 4730017.55960 11.80797 48.17156 534.52598 -2.71422 6.59068 9.93533 -0.90126 2.99461 0.93980 7 3 4 2.38 2013-Sep-20 09:11:18 4171691.08816 872116.06995 4730015.06700 11.80795 48.17156 531.03859 -3.86561 6.74964 6.44794 -2.05265 3.15358 -2.54760 7 3 4 2.38 2013-Sep-20 09:11:18 4171690.44418 872115.43965 4730013.68149 11.80795 48.17156 529.49979 -4.35079 6.39145 4.90913 -2.53783 2.79539 -4.08640 7 3 4 2.38 2013-Sep-20 09:11:18 4171698.43425 872119.48630 4730014.15842 11.80798 48.17150 535.62326 -2.02481 0.26471 11.03261 -0.21185 -3.33135 2.03707 7 3 4 2.38 2013-Sep-20 09:11:18 4171699.68595 872120.78596 4730016.26269 11.80799 48.17150 538.18571 -1.00878 0.55692 13.59506 0.80418 -3.03914 4.59952 7 3 4 2.38 2013-Sep-20 09:11:18 4171697.25383 872120.30384 4730014.30052 11.80799 48.17151 535.07014 -0.98301 1.09579 10.47949 0.82995 -2.50027 1.48396 7 3 4 2.38 2013-Sep-20 09:11:18 4171693.89224 872119.29061 4730011.05323 11.80799 48.17151 530.31775 -1.28691 1.53652 5.72710 0.52605 -2.05954 -3.26844 7 3 4 2.38 2013-Sep-20 09:11:18 4171693.99654 872119.23313 4730012.34424 11.80799 48.17152 531.33999 -1.36451 2.33020 6.74933 0.44845 -1.26586 -2.24620 7 3 4 2.38 2013-Sep-20 09:11:18 4171695.13076 872120.86904 4730013.19185 11.80801 48.17151 532.93524 0.00468 1.81875 8.34458 1.81764 -1.77731 -0.65095 7 3 4 2.38 2013-Sep-20 09:11:18 4171694.40997 872119.59890 4730012.76392 11.80799 48.17152 531.97250 -1.09109 2.25276 7.38185 0.72187 -1.34330 -1.61369 7 3 4 2.38 2013-Sep-20 09:11:18 4171691.49595 872119.36997 4730010.96923 11.80800 48.17153 528.70172 -0.71887 3.21620 4.11107 1.09409 -0.37986 -4.88447 7 3 4 2.38 2013-Sep-20 09:11:18 4171694.91929 872120.89919 4730015.36048 11.80801 48.17153 534.41725 0.07747 3.41466 9.82660 1.89042 -0.18140 0.83106 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.49958 872120.85127 4730016.56994 11.80800 48.17153 536.34353 -0.29282 3.07593 11.75288 1.52014 -0.52013 2.75734 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.90910 872121.40991 4730017.29374 11.80801 48.17153 537.22644 0.17019 3.17476 12.63578 1.98315 -0.42131 3.64025 7 3 4 2.38 2013-Sep-20 09:11:18 4171697.26759 872120.99996 4730017.00067 11.80800 48.17152 537.18613 -0.30445 2.78034 12.59547 1.50851 -0.81572 3.59994 7 3 4 2.38 2013-Sep-20 09:11:18 4171698.17413 872122.27525 4730017.12289 11.80802 48.17152 538.04303 0.75835 2.00619 13.45237 2.57131 -1.58987 4.45684 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.15179 872121.89065 4730015.37314 11.80802 48.17152 535.36656 0.79573 2.37297 10.77590 2.60869 -1.22309 1.78037 7 3 4 2.38 2013-Sep-20 09:11:18 4171695.18910 872122.07684 4730014.71611 11.80802 48.17152 534.27394 1.17498 2.60857 9.68329 2.98794 -0.98750 0.68775 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.78909 872120.50855 4730013.65031 11.80800 48.17151 534.31021 -0.68753 0.96992 9.71955 1.12543 -2.62614 0.72402 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.91691 872120.01392 4730013.44362 11.80799 48.17151 534.17213 -1.19785 0.81427 9.58148 0.61511 -2.78179 0.58594 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.73519 872120.20544 4730013.29070 11.80799 48.17151 533.96569 -0.97320 0.81562 9.37504 0.83976 -2.78044 0.37950 7 3 4 2.38 2013-Sep-20 09:11:18 4171695.42505 872121.01961 4730012.32164 11.80801 48.17151 532.49947 0.09184 1.00080 7.90881 1.90480 -2.59526 -1.08672 7 3 4 2.38 2013-Sep-20 09:11:18 4171695.87389 872120.48848 4730014.33209 11.80800 48.17152 534.21805 -0.51990 2.09519 9.62740 1.29306 -1.50088 0.63186 7 3 4 2.38 2013-Sep-20 09:11:18 4171695.90048 872119.75316 4730013.94614 11.80799 48.17152 533.84748 -1.24511 1.93053 9.25682 0.56785 -1.66553 0.26129 7 3 4 2.38 2013-Sep-20 09:11:18 4171696.74939 872120.68241 4730014.13398 11.80800 48.17151 534.66842 -0.50923 1.29492 10.07776 1.30373 -2.30114 1.08223 7 3 4 2.38 2013-Sep-20 09:11:18 4171690.28984 872120.16318 4730010.86429 11.80801 48.17153 527.94444 0.30436 3.90497 3.35378 2.11732 0.30891 -5.64175 7 3 4 2.38 2013-Sep-20 09:11:19 4171689.17640 872120.49096 4730009.94144 11.80802 48.17153 526.57467 0.85305 4.05166 1.98401 2.66601 0.45560 -7.01152 7 3 4 2.38 2013-Sep-20 09:11:19 4171695.08288 872120.24787 4730014.08012 11.80800 48.17152 533.48111 -0.59355 2.54078 8.89045 1.21941 -1.05528 -0.10508 7 3 4 2.38 2013-Sep-20 09:11:19 4171697.78397 872121.75338 4730016.49995 11.80801 48.17152 537.25293 0.32736 1.95490 12.66228 2.14032 -1.64116 3.66674 7 3 4 2.38 2013-Sep-20 09:11:19 4171696.86836 872122.35693 4730016.35705 11.80802 48.17152 536.63112 1.10551 2.43539 12.04046 2.91847 -1.16067 3.04493 7 3 4 2.38 2013-Sep-20 09:11:19 4171697.83682 872122.88929 4730018.34490 11.80802 48.17152 538.81720 1.42842 2.97356 14.22655 3.24138 -0.62251 5.23101 7 3 4 2.38 2013-Sep-20 09:11:19 4171694.71701 872121.43601 4730015.63471 11.80801 48.17153 534.56280 0.64432 3.66323 9.97215 2.45728 0.06717 0.97662 7 3 4 2.38 2013-Sep-20 09:11:19 4171691.80256 872117.66279 4730011.39013 11.80797 48.17153 528.98252 -2.45267 3.53357 4.39187 -0.63971 -0.06249 -4.60366 7 3 4 2.38 2013-Sep-20 09:11:19 4171690.41152 872117.25164 4730010.27956 11.80797 48.17153 527.19082 -2.57046 3.87022 2.60016 -0.75750 0.27416 -6.39537 7 3 4 2.38 2013-Sep-20 09:11:19 4171692.07568 872117.33262 4730011.41932 11.80797 48.17153 529.13751 -2.83174 3.40418 4.54685 -1.01878 -0.19188 -4.44868 7 3 4 2.38 2013-Sep-20 09:11:19 4171691.61815 872117.65543 4730010.80166 11.80797 48.17153 528.42265 -2.42214 3.27675 3.83199 -0.60918 -0.31931 -5.16354 7 3 4 2.38 2013-Sep-20 09:11:19 4171695.46147 872118.75829 4730013.87402 11.80798 48.17152 533.37139 -2.12908 2.35433 8.78073 -0.31612 -1.24173 -0.21480 7 3 4 2.38 2013-Sep-20 09:11:19 4171696.08218 872120.66208 4730014.38537 11.80800 48.17152 534.41743 -0.39260 1.95233 9.82677 1.42036 -1.64374 0.83124 7 3 4 2.38 2013-Sep-20 09:11:19 4171691.21510 872119.56773 4730011.98245 11.80800 48.17153 529.30036 -0.46783 4.06661 4.70971 1.34513 0.47055 -4.28582 7 3 4 2.38 2013-Sep-20 09:11:19 4171693.34029 872120.71321 4730015.51992 11.80801 48.17154 533.47992 0.21853 4.70103 8.88926 2.03149 1.10497 -0.10627 7 3 4 2.38 2013-Sep-20 09:11:19 4171695.08296 872120.74421 4730017.59124 11.80800 48.17154 536.16518 -0.10773 4.80661 11.57453 1.70523 1.21055 2.57900 7 3 4 2.38 2013-Sep-20 09:11:19 4171696.95736 872120.77579 4730018.50428 11.80800 48.17153 538.07343 -0.46038 4.04356 13.48277 1.35258 0.44750 4.48724 7 3 4 2.38 2013-Sep-20 09:11:19 4171696.21489 872120.63733 4730016.75060 11.80800 48.17153 536.26311 -0.44398 3.43668 11.67245 1.36898 -0.15938 2.67692 7 3 4 2.38 2013-Sep-20 09:11:19 4171696.08334 872121.02813 4730015.74784 11.80801 48.17152 535.48337 -0.03454 2.80430 10.89271 1.77843 -0.79177 1.89718 7 3 4 2.38 2013-Sep-20 09:11:19 4171699.46538 872122.79974 4730018.14445 11.80802 48.17151 539.71873 1.00751 1.66569 15.12807 2.82047 -1.93037 6.13254 7 3 4 2.38 2013-Sep-20 09:11:19 4171697.17088 872121.27785 4730016.31399 11.80801 48.17152 536.64924 -0.01264 2.35056 12.05859 1.80032 -1.24550 3.06306 7 3 4 2.38 2013-Sep-20 09:11:19 4171695.44672 872120.32287 4730016.13813 11.80800 48.17153 535.26237 -0.59460 3.63646 10.67171 1.21836 0.04040 1.67618 7 3 4 2.38 2013-Sep-20 09:11:19 4171693.00983 872119.13721 4730014.84526 11.80799 48.17154 532.54640 -1.25649 4.73244 7.95575 0.55647 1.13638 -1.03979 7 3 4 2.38 2013-Sep-20 09:11:19 4171692.70593 872118.50845 4730013.09221 11.80798 48.17153 530.95594 -1.80977 3.88085 6.36528 0.00319 0.28479 -2.63025 7 3 4 2.38 2013-Sep-20 09:11:19 4171695.84252 872119.33060 4730015.73359 11.80798 48.17153 535.08389 -1.64686 3.22929 10.49323 0.16610 -0.36678 1.49770 7 3 4 2.38 2013-Sep-20 09:11:19 4171696.51959 872119.93155 4730015.12635 11.80799 48.17152 535.15540 -1.19717 2.23884 10.56474 0.61579 -1.35723 1.56921 7 3 4 2.38 2013-Sep-20 09:11:20 4171692.85378 872119.16464 4730012.29481 11.80799 48.17153 530.54783 -1.19771 3.14118 5.95717 0.61525 -0.45488 -3.03836 7 3 4 2.38 2013-Sep-20 09:11:20 4171690.07850 872117.72466 4730010.22010 11.80798 48.17153 526.99367 -2.03931 4.00134 2.40302 -0.22635 0.40528 -6.59252 7 3 4 2.38 2013-Sep-20 09:11:20 4171692.98867 872118.92389 4730013.65917 11.80799 48.17153 531.61967 -1.46097 3.98939 7.02901 0.35199 0.39333 -1.96652 7 3 4 2.38 2013-Sep-20 09:11:20 4171694.02280 872118.47920 4730015.30830 11.80798 48.17154 533.46290 -2.10787 4.40274 8.87224 -0.29491 0.80667 -0.12329 7 3 4 2.38 2013-Sep-20 09:11:20 4171694.02652 872119.35278 4730016.01707 11.80799 48.17154 534.11268 -1.25353 4.73951 9.52202 0.55943 1.14345 0.52649 7 3 4 2.38 2013-Sep-20 09:11:20 4171693.98481 872119.32145 4730016.08920 11.80799 48.17154 534.13492 -1.27567 4.82281 9.54427 0.53729 1.22674 0.54873 7 3 4 2.38 2013-Sep-20 09:11:20 4171694.41452 872119.07699 4730014.83638 11.80798 48.17153 533.44854 -1.60288 3.71115 8.85788 0.21008 0.11509 -0.13765 7 3 4 2.38 2013-Sep-20 09:11:20 4171695.54442 872118.07932 4730016.21266 11.80797 48.17153 535.07550 -2.81066 3.95700 10.48485 -0.99770 0.36093 1.48931 7 3 4 2.38 2013-Sep-20 09:11:20 4171692.77379 872115.55724 4730014.29761 11.80794 48.17154 531.49568 -4.71240 5.08525 6.90502 -2.89945 1.48919 -2.09051 7 3 4 2.38 2013-Sep-20 09:11:20 4171691.63001 872116.29920 4730015.24560 11.80796 48.17156 531.55668 -3.75209 6.43858 6.96602 -1.93914 2.84252 -2.02951 7 3 4 2.38 2013-Sep-20 09:11:20 4171692.43177 872117.84749 4730015.60467 11.80797 48.17155 532.55892 -2.40063 5.85717 7.96826 -0.58767 2.26111 -1.02727 7 3 4 2.38 2013-Sep-20 09:11:20 4171690.93293 872117.88614 4730015.00514 11.80798 48.17156 531.13903 -2.05609 6.54467 6.54837 -0.24314 2.94861 -2.44716 7 3 4 2.38 2013-Sep-20 09:11:20 4171690.12255 872117.31940 4730013.31246 11.80797 48.17155 529.27138 -2.44500 6.09331 4.68072 -0.63204 2.49725 -4.31481 7 3 4 2.38 2013-Sep-20 09:11:20 4171690.57084 872117.32037 4730013.29541 11.80797 48.17155 529.55145 -2.53579 5.75482 4.96079 -0.72283 2.15876 -4.03474 7 3 4 2.38 2013-Sep-20 09:11:20 4171690.32708 872117.65406 4730012.80684 11.80798 48.17155 529.07380 -2.15928 5.55590 4.48315 -0.34632 1.95984 -4.51239 7 3 4 2.38 2013-Sep-20 09:11:20 4171690.74432 872118.59802 4730013.31712 11.80799 48.17155 529.85524 -1.32068 5.44794 5.26458 0.49228 1.85188 -3.73095 7 3 4 2.38 2013-Sep-20 09:11:20 4171695.46123 872119.99967 4730019.08700 11.80799 48.17155 537.42506 -0.91393 5.64177 12.83440 0.89903 2.04570 3.83887 7 3 4 2.38 2013-Sep-20 09:11:20 4171697.78958 872121.40278 4730020.58578 11.80801 48.17154 540.25328 -0.01696 4.72912 15.66262 1.79600 1.13305 6.66709 7 3 4 2.38 2013-Sep-20 09:11:20 4171697.65886 872120.73541 4730021.23065 11.80800 48.17155 540.55739 -0.64346 5.35629 15.96673 1.16950 1.76022 6.97120 7 3 4 2.38 2013-Sep-20 09:11:20 4171694.20680 872119.75356 4730016.29950 11.80799 48.17154 534.49551 -0.89813 4.73525 9.90485 0.91483 1.13919 0.90932 7 3 4 2.38 2013-Sep-20 09:11:20 4171693.00595 872120.15279 4730016.85468 11.80800 48.17155 534.17978 -0.26161 5.92050 9.58912 1.55135 2.32444 0.59359 7 3 4 2.38 2013-Sep-20 09:11:20 4171695.73142 872121.45594 4730019.20489 11.80801 48.17155 537.88803 0.45624 5.30127 13.29737 2.26920 1.70521 4.30184 7 3 4 2.38 2013-Sep-20 09:11:20 4171693.12915 872119.60495 4730015.58147 11.80799 48.17154 533.23671 -0.82307 5.06507 8.64605 0.98989 1.46901 -0.34948 7 3 4 2.38 2013-Sep-20 09:11:20 4171688.46031 872118.71115 4730011.75505 11.80800 48.17155 527.21572 -0.74256 6.05485 2.62506 1.07040 2.45879 -6.37047 7 3 4 2.38 2013-Sep-20 09:11:20 4171691.32987 872118.55563 4730014.88759 11.80799 48.17155 531.40192 -1.48199 6.07467 6.81126 0.33097 2.47861 -2.18427 7 3 4 2.38 2013-Sep-20 09:11:21 4171689.56331 872118.20704 4730013.19481 11.80799 48.17155 528.93978 -1.46171 6.28739 4.34912 0.35125 2.69133 -4.64641 7 3 4 2.38 2013-Sep-20 09:11:21 4171685.92672 872117.71725 4730010.60163 11.80799 48.17156 524.56671 -1.19697 7.28512 -0.02395 0.61598 3.68906 -9.01948 7 3 4 2.38 2013-Sep-20 09:11:21 4171689.55584 872117.74212 4730015.45929 11.80798 48.17157 530.55883 -1.91527 7.87392 5.96817 -0.10231 4.27786 -3.02736 7 3 4 2.38 2013-Sep-20 09:11:21 4171691.81410 872118.12623 4730017.71418 11.80798 48.17157 533.76564 -2.00139 7.67202 9.17498 -0.18843 4.07596 0.17945 7 3 4 2.38 2013-Sep-20 09:11:21 4171689.64397 872116.59344 4730014.84388 11.80796 48.17157 530.00103 -3.05767 7.57438 5.41037 -1.24471 3.97832 -3.58516 7 3 4 2.38 2013-Sep-20 09:11:21 4171691.95807 872115.89947 4730014.75436 11.80795 48.17155 531.35024 -4.21050 5.93264 6.75958 -2.39754 2.33658 -2.23595 7 3 4 2.38 2013-Sep-20 09:11:21 4171694.41446 872116.84871 4730015.87431 11.80795 48.17154 533.91781 -3.78400 4.74316 9.32715 -1.97104 1.14710 0.33162 7 3 4 2.38 2013-Sep-20 09:11:21 4171692.43479 872115.10007 4730014.47253 11.80794 48.17155 531.34234 -5.09053 5.51887 6.75168 -3.27757 1.92281 -2.24385 7 3 4 2.38 2013-Sep-20 09:11:21 4171689.58404 872113.24592 4730011.76733 11.80792 48.17155 527.21260 -6.32209 6.07676 2.62194 -4.50913 2.48070 -6.37360 7 3 4 2.38 2013-Sep-20 09:11:21 4171687.85016 872113.63447 4730009.92018 11.80793 48.17155 524.75737 -5.58695 6.05030 0.16671 -3.77399 2.45424 -8.82882 7 3 4 2.38 2013-Sep-20 09:11:21 4171691.22319 872115.50950 4730013.20333 11.80795 48.17155 529.66156 -4.44183 5.49372 5.07090 -2.62888 1.89766 -3.92463 7 3 4 2.38 2013-Sep-20 09:11:21 4171693.69204 872115.61457 4730015.27022 11.80794 48.17154 532.82767 -4.84420 5.05539 8.23701 -3.03124 1.45933 -0.75852 7 3 4 2.38 2013-Sep-20 09:11:21 4171693.07652 872115.21531 4730014.89055 11.80794 48.17155 532.08847 -5.10905 5.31202 7.49781 -3.29610 1.71595 -1.49772 7 3 4 2.38 2013-Sep-20 09:11:21 4171695.51663 872117.05085 4730017.93873 11.80795 48.17155 536.20318 -3.81168 5.28522 11.61252 -1.99872 1.68915 2.61699 7 3 4 2.38 2013-Sep-20 09:11:21 4171696.10233 872118.79374 4730020.28856 11.80798 48.17155 538.57433 -2.22552 6.15937 13.98367 -0.41256 2.56330 4.98814 7 3 4 2.38 2013-Sep-20 09:11:21 4171693.70936 872116.51201 4730016.36786 11.80795 48.17155 533.77935 -3.96929 5.63794 9.18869 -2.15633 2.04187 0.19316 7 3 4 2.38 2013-Sep-20 09:11:21 4171695.52706 872116.89264 4730019.52815 11.80795 48.17155 537.37275 -3.96867 6.36172 12.78209 -2.15571 2.76566 3.78656 7 3 4 2.38 2013-Sep-20 09:11:21 4171694.44896 872118.09480 4730017.13388 11.80797 48.17155 535.04895 -2.57134 5.36801 10.45830 -0.75838 1.77195 1.46276 7 3 4 2.38 2013-Sep-20 09:11:21 4171691.96117 872116.26242 4730014.94807 11.80795 48.17155 531.54614 -3.85586 6.00422 6.95548 -2.04291 2.40816 -2.04005 7 3 4 2.38 2013-Sep-20 09:11:21 4171692.04492 872115.02243 4730015.45873 11.80794 48.17156 531.81210 -5.08675 6.47277 7.22144 -3.27379 2.87671 -1.77409 7 3 4 2.38 2013-Sep-20 09:11:21 4171690.01681 872114.32817 4730014.17249 11.80793 48.17156 529.43499 -5.35130 7.20009 4.84433 -3.53835 3.60403 -4.15120 7 3 4 2.38 2013-Sep-20 09:11:21 4171690.92253 872114.53345 4730015.36082 11.80793 48.17156 530.93973 -5.33570 7.30068 6.34907 -3.52275 3.70462 -2.64646 7 3 4 2.38 2013-Sep-20 09:11:21 4171688.97339 872114.44988 4730013.49620 11.80794 48.17157 528.26653 -5.01865 7.49156 3.67587 -3.20569 3.89550 -5.31966 7 3 4 2.38 2013-Sep-20 09:11:21 4171690.74024 872115.51489 4730015.40365 11.80795 48.17156 530.98658 -4.33773 7.31256 6.39592 -2.52477 3.71649 -2.59961 7 3 4 2.38 2013-Sep-20 09:11:21 4171688.97210 872115.14013 4730013.87611 11.80795 48.17157 528.64297 -4.34274 7.64062 4.05231 -2.52978 4.04456 -4.94322 7 3 4 2.38 2013-Sep-20 09:11:22 4171688.32594 872114.70694 4730017.04771 11.80794 48.17159 530.52536 -4.63454 10.29311 5.93469 -2.82158 6.69705 -3.06084 7 3 4 2.38 2013-Sep-20 09:11:22 4171686.97520 872114.42977 4730012.67178 11.80794 48.17157 526.34508 -4.62944 8.40225 1.75442 -2.81648 4.80619 -7.24111 7 3 4 2.38 2013-Sep-20 09:11:22 4171693.30293 872116.44529 4730018.38098 11.80795 48.17156 535.00500 -3.95143 7.28711 10.41434 -2.13847 3.69105 1.41881 7 3 4 2.38 2013-Sep-20 09:11:22 4171692.15763 872116.48477 4730017.47188 11.80796 48.17157 533.58533 -3.67842 7.51016 8.99467 -1.86546 3.91410 -0.00086 7 3 4 2.38 2013-Sep-20 09:11:22 4171689.71754 872114.78005 4730014.66291 11.80794 48.17157 529.66673 -4.84774 7.67653 5.07607 -3.03478 4.08047 -3.91946 7 3 4 2.38 2013-Sep-20 09:11:22 4171688.12062 872115.53051 4730014.92965 11.80795 48.17158 528.92545 -3.78638 8.90475 4.33479 -1.97343 5.30869 -4.66074 7 3 4 2.38 2013-Sep-20 09:11:22 4171692.01243 872116.52714 4730016.72361 11.80796 48.17156 532.93876 -3.60724 7.11059 8.34810 -1.79428 3.51452 -0.64743 7 3 4 2.38 2013-Sep-20 09:11:22 4171688.32605 872114.48080 4730011.21123 11.80794 48.17156 526.14554 -4.85592 6.43514 1.55488 -3.04296 2.83908 -7.44065 7 3 4 2.38 2013-Sep-20 09:11:22 4171693.82006 872115.87957 4730015.88761 11.80794 48.17155 533.40745 -4.61100 5.33335 8.81679 -2.79804 1.73729 -0.17874 7 3 4 2.38 2013-Sep-20 09:11:22 4171693.99055 872115.07751 4730018.31302 11.80793 48.17156 535.21657 -5.43097 6.94882 10.62591 -3.61801 3.35275 1.63038 7 3 4 2.38 2013-Sep-20 09:11:22 4171690.26858 872114.65413 4730016.10207 11.80794 48.17157 531.08165 -5.08376 8.25360 6.49099 -3.27080 4.65754 -2.50454 7 3 4 2.38 2013-Sep-20 09:11:22 4171692.16940 872116.63112 4730016.93195 11.80796 48.17156 533.21066 -3.53757 7.11918 8.62000 -1.72461 3.52312 -0.37553 7 3 4 2.38 2013-Sep-20 09:11:22 4171691.79160 872116.37251 4730016.01418 11.80796 48.17156 532.24487 -3.71340 6.82211 7.65421 -1.90044 3.22605 -1.34132 7 3 4 2.38 2013-Sep-20 09:11:22 4171689.71748 872115.07017 4730014.27800 11.80794 48.17156 529.41947 -4.56375 7.37564 4.82881 -2.75079 3.77958 -4.16672 7 3 4 2.38 2013-Sep-20 09:11:22 4171691.78194 872116.39084 4730017.56959 11.80796 48.17157 533.40007 -3.69348 7.86367 8.80941 -1.88053 4.26761 -0.18612 7 3 4 2.38 2013-Sep-20 09:11:22 4171691.89938 872114.84708 4730015.13309 11.80794 48.17156 531.45052 -5.22861 6.38850 6.85986 -3.41565 2.79244 -2.13567 7 3 4 2.38 2013-Sep-20 09:11:22 4171689.87221 872113.72188 4730013.12886 11.80793 48.17156 528.48020 -5.91517 6.70201 3.88954 -4.10221 3.10595 -5.10599 7 3 4 2.38 2013-Sep-20 09:11:22 4171689.10012 872113.31458 4730014.50949 11.80792 48.17157 528.94937 -6.15586 8.24800 4.35871 -4.34290 4.65194 -4.63682 7 3 4 2.38 2013-Sep-20 09:11:22 4171687.89357 872112.65870 4730013.17745 11.80792 48.17157 527.07968 -6.55096 8.33970 2.48902 -4.73800 4.74364 -6.50651 7 3 4 2.38 2013-Sep-20 09:11:22 4171690.62468 872115.64810 4730016.32879 11.80795 48.17157 531.61869 -4.18369 7.99351 7.02803 -2.37073 4.39745 -1.96750 7 3 4 2.38 2013-Sep-20 09:11:22 4171689.75297 872115.64942 4730014.07272 11.80795 48.17156 529.36873 -4.00402 7.12453 4.77807 -2.19106 3.52847 -4.21746 7 3 4 2.38 2013-Sep-20 09:11:22 4171693.28810 872116.93910 4730017.31292 11.80796 48.17156 534.26684 -3.46504 6.51033 9.67619 -1.65208 2.91427 0.68065 7 3 4 2.38 2013-Sep-20 09:11:22 4171695.98563 872118.16653 4730021.78172 11.80797 48.17156 539.52518 -2.81558 7.33592 14.93452 -1.00262 3.73985 5.93899 7 3 4 2.38 2013-Sep-20 09:11:22 4171697.11783 872120.37174 4730022.28911 11.80799 48.17156 540.94329 -0.88873 6.51224 16.35263 0.92423 2.91618 7.35710 7 3 4 2.38 2013-Sep-20 09:11:22 4171695.48569 872119.38854 4730020.67335 11.80799 48.17156 538.53969 -1.51712 6.77505 13.94903 0.29584 3.17899 4.95350 7 3 4 2.38 2013-Sep-20 09:11:23 4171695.47061 872118.34524 4730020.12538 11.80797 48.17156 537.97915 -2.53527 6.57970 13.38849 -0.72231 2.98364 4.39296 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.81562 872117.25637 4730018.29186 11.80796 48.17156 534.73117 -3.05779 7.45944 10.14051 -1.24483 3.86337 1.14498 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.16092 872114.76973 4730016.10991 11.80793 48.17156 532.33857 -5.35784 6.86097 7.74791 -3.54488 3.26491 -1.24762 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.87697 872114.47291 4730017.48267 11.80793 48.17156 533.78839 -5.79490 7.29946 9.19773 -3.98195 3.70340 0.20220 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.86069 872116.07764 4730017.23552 11.80795 48.17156 533.81260 -4.22081 6.90182 9.22194 -2.40785 3.30575 0.22641 7 3 4 2.38 2013-Sep-20 09:11:23 4171693.87686 872118.40258 4730018.95306 11.80798 48.17156 536.07304 -2.15301 6.95157 11.48238 -0.34005 3.35551 2.48685 7 3 4 2.38 2013-Sep-20 09:11:23 4171694.98367 872119.17613 4730019.43245 11.80798 48.17155 537.25834 -1.62231 6.34605 12.66768 0.19065 2.74998 3.67215 7 3 4 2.38 2013-Sep-20 09:11:23 4171695.21549 872119.60786 4730019.65619 11.80799 48.17155 537.63531 -1.24716 6.26035 13.04465 0.56580 2.66428 4.04912 7 3 4 2.38 2013-Sep-20 09:11:23 4171695.99088 872119.06174 4730019.64147 11.80798 48.17155 538.05598 -1.94039 5.76825 13.46532 -0.12743 2.17219 4.46979 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.45117 872118.44593 4730017.51592 11.80798 48.17156 534.07741 -1.81883 7.02639 9.48675 -0.00587 3.43033 0.49122 7 3 4 2.38 2013-Sep-20 09:11:23 4171687.29885 872117.29525 4730012.83925 11.80798 48.17157 527.07219 -1.89082 7.84095 2.48153 -0.07787 4.24489 -6.51400 7 3 4 2.38 2013-Sep-20 09:11:23 4171683.14258 872114.63254 4730008.28239 11.80796 48.17157 520.60012 -3.64668 8.23945 -3.99054 -1.83372 4.64339 -12.98607 7 3 4 2.38 2013-Sep-20 09:11:23 4171686.28035 872115.76735 4730009.89013 11.80796 48.17156 524.00129 -3.17797 6.85001 -0.58937 -1.36501 3.25395 -9.58490 7 3 4 2.38 2013-Sep-20 09:11:23 4171687.67267 872117.00778 4730014.37423 11.80798 48.17158 528.42077 -2.24871 8.63580 3.83011 -0.43575 5.03974 -5.16542 7 3 4 2.38 2013-Sep-20 09:11:23 4171687.19397 872117.35970 4730014.17360 11.80798 48.17158 528.00680 -1.80628 8.79749 3.41614 0.00668 5.20143 -5.57939 7 3 4 2.38 2013-Sep-20 09:11:23 4171688.80661 872116.60744 4730014.62659 11.80797 48.17157 529.29440 -2.87262 8.03808 4.70374 -1.05966 4.44202 -4.29179 7 3 4 2.38 2013-Sep-20 09:11:23 4171688.60392 872118.37171 4730014.15304 11.80799 48.17157 529.04999 -1.10420 7.60108 4.45934 0.70876 4.00502 -4.53620 7 3 4 2.38 2013-Sep-20 09:11:23 4171688.03548 872117.48240 4730014.82352 11.80798 48.17158 529.05717 -1.85837 8.59844 4.46651 -0.04542 5.00238 -4.52902 7 3 4 2.38 2013-Sep-20 09:11:23 4171691.45022 872117.54123 4730019.00948 11.80797 48.17158 534.41345 -2.49956 8.89047 9.82279 -0.68660 5.29441 0.82726 7 3 4 2.38 2013-Sep-20 09:11:23 4171688.58405 872116.29982 4730014.90400 11.80796 48.17157 529.31385 -3.12818 8.43232 4.72319 -1.31523 4.83626 -4.27234 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.02985 872117.87410 4730018.06185 11.80797 48.17157 534.13113 -2.29234 7.78497 9.54047 -0.47938 4.18890 0.54494 7 3 4 2.38 2013-Sep-20 09:11:23 4171690.47194 872116.45149 4730016.02004 11.80796 48.17157 531.39856 -3.36604 7.77650 6.80790 -1.55309 4.18044 -2.18763 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.92686 872118.76633 4730018.34805 11.80798 48.17156 535.05172 -1.60255 7.18553 10.46106 0.21041 3.58947 1.46553 7 3 4 2.38 2013-Sep-20 09:11:23 4171694.75491 872120.57368 4730019.23097 11.80800 48.17155 537.14960 -0.20752 6.16543 12.55894 1.60544 2.56937 3.56341 7 3 4 2.38 2013-Sep-20 09:11:23 4171692.01646 872118.24976 4730016.57278 11.80798 48.17156 533.06409 -1.92189 6.74439 8.47343 -0.10893 3.14832 -0.52210 7 3 4 2.38 2013-Sep-20 09:11:24 4171691.01468 872116.28329 4730014.34412 11.80796 48.17155 530.48109 -3.64175 6.28861 5.89043 -1.82879 2.69255 -3.10510 7 3 4 2.38 2013-Sep-20 09:11:24 4171689.06716 872114.68632 4730012.29307 11.80794 48.17156 527.46351 -4.80640 6.58474 2.87285 -2.99344 2.98868 -6.12268 7 3 4 2.38 2013-Sep-20 09:11:24 4171694.73608 872119.44056 4730010.88709 11.80799 48.17150 530.76527 -1.31281 0.78738 6.17462 0.50015 -2.80868 -2.82092 7 3 4 2.38 2013-Sep-20 09:11:24 4171693.72087 872119.68492 4730011.32274 11.80799 48.17151 530.46052 -0.86588 1.78113 5.86987 0.94708 -1.81493 -3.12567 7 3 4 2.38 2013-Sep-20 09:11:24 4171693.94370 872118.06655 4730011.54638 11.80797 48.17152 530.55176 -2.49560 2.01452 5.96111 -0.68264 -1.58154 -3.03442 7 3 4 2.38 2013-Sep-20 09:11:24 4171692.12249 872117.40179 4730009.68968 11.80797 48.17152 527.88867 -2.77361 2.20599 3.29802 -0.96065 -1.39007 -5.69752 7 3 4 2.38 2013-Sep-20 09:11:24 4171693.86774 872119.69170 4730012.79420 11.80799 48.17152 531.65378 -0.88929 2.65430 7.06312 0.92367 -0.94177 -1.93241 7 3 4 2.38 2013-Sep-20 09:11:24 4171693.32531 872117.33516 4730012.51212 11.80796 48.17153 530.76789 -3.08496 3.22113 6.17724 -1.27201 -0.37493 -2.81830 7 3 4 2.38 2013-Sep-20 09:11:24 4171692.47192 872117.94517 4730010.57339 11.80797 48.17152 528.84942 -2.31323 2.45762 4.25877 -0.50027 -1.13844 -4.73676 7 3 4 2.38 2013-Sep-20 09:11:24 4171695.01986 872119.00377 4730014.00965 11.80798 48.17152 533.21767 -1.79843 2.72945 8.62701 0.01453 -0.86661 -0.36852 7 3 4 2.38 2013-Sep-20 09:11:24 4171694.88813 872120.33154 4730015.53964 11.80800 48.17153 534.45295 -0.47180 3.64342 9.86229 1.34116 0.04736 0.86676 7 3 4 2.38 2013-Sep-20 09:11:24 4171695.65854 872119.35883 4730015.62841 11.80798 48.17153 534.88926 -1.58158 3.28902 10.29861 0.23138 -0.30704 1.30307 7 3 4 2.38 2013-Sep-20 09:11:24 4171692.29963 872117.57776 4730012.46967 11.80797 48.17153 530.09982 -2.63762 3.90394 5.50916 -0.82466 0.30788 -3.48637 7 3 4 2.38 2013-Sep-20 09:11:24 4171692.03831 872116.55714 4730014.60814 11.80796 48.17155 531.38342 -3.58316 5.67631 6.79276 -1.77020 2.08025 -2.20277 7 3 4 2.38 2013-Sep-20 09:11:24 4171692.67337 872117.02064 4730013.77478 11.80796 48.17154 531.24026 -3.25943 4.58668 6.64960 -1.44647 0.99062 -2.34593 7 3 4 2.38 2013-Sep-20 09:11:24 4171695.89232 872118.66842 4730018.17083 11.80797 48.17154 536.84212 -2.30521 4.91933 12.25146 -0.49225 1.32327 3.25593 7 3 4 2.38 2013-Sep-20 09:11:24 4171693.74490 872118.23743 4730015.79962 11.80797 48.17154 533.61459 -2.28765 4.96996 9.02394 -0.47470 1.37390 0.02841 7 3 4 2.38 2013-Sep-20 09:11:24 4171694.70598 872117.25327 4730014.62039 11.80796 48.17153 533.22897 -3.44766 3.63261 8.63832 -1.63470 0.03655 -0.35722 7 3 4 2.38 2013-Sep-20 09:11:24 4171692.92441 872118.47677 4730011.63261 11.80798 48.17152 530.00662 -1.88548 2.75292 5.41597 -0.07253 -0.84314 -3.57956 7 3 4 2.38 2013-Sep-20 09:11:24 4171691.52667 872118.87196 4730011.44362 11.80799 48.17153 529.00730 -1.21263 3.58611 4.41665 0.60032 -0.00995 -4.57889 7 3 4 2.38 2013-Sep-20 09:11:24 4171694.25462 872121.51872 4730015.11176 11.80802 48.17153 533.88257 0.81989 3.63911 9.29192 2.63285 0.04305 0.29638 7 3 4 2.38 2013-Sep-20 09:11:24 4171696.05999 872118.78231 4730016.87878 11.80798 48.17153 536.00435 -2.22805 3.91800 11.41370 -0.41509 0.32194 2.41816 7 3 4 2.38 2013-Sep-20 09:11:24 4171691.43406 872115.78258 4730012.57313 11.80795 48.17154 529.36688 -4.21768 4.87799 4.77623 -2.40472 1.28193 -4.21931 7 3 4 2.38 2013-Sep-20 09:11:24 4171689.02374 872114.43196 4730010.05337 11.80794 48.17154 525.73154 -5.04649 5.16153 1.14088 -3.23353 1.56547 -7.85465 7 3 4 2.38 2013-Sep-20 09:11:24 4171689.82579 872114.00495 4730009.74249 11.80793 48.17154 525.96520 -5.62860 4.43432 1.37454 -3.81564 0.83826 -7.62099 7 3 4 2.38 2013-Sep-20 09:11:25 4171692.94276 872114.53020 4730013.00038 11.80793 48.17154 530.49920 -5.75229 4.25348 5.90855 -3.93933 0.65742 -3.08698 7 3 4 2.38 2013-Sep-20 09:11:25 4171696.43597 872116.98179 4730015.20824 11.80795 48.17152 534.75928 -4.06741 2.80422 10.16862 -2.25445 -0.79184 1.17309 7 3 4 2.38 2013-Sep-20 09:11:25 4171697.42899 872118.36885 4730017.32999 11.80797 48.17153 537.17781 -2.91290 3.28345 12.58716 -1.09994 -0.31262 3.59163 7 3 4 2.38 2013-Sep-20 09:11:25 4171697.33026 872116.57227 4730016.99697 11.80794 48.17153 536.62004 -4.65126 3.40731 12.02938 -2.83830 -0.18876 3.03385 7 3 4 2.38 2013-Sep-20 09:11:25 4171696.09689 872117.06043 4730016.70701 11.80795 48.17153 535.66546 -3.92104 4.03909 11.07481 -2.10808 0.44302 2.07928 7 3 4 2.38 2013-Sep-20 09:11:25 4171696.46879 872118.51743 4730018.06942 11.80797 48.17154 537.12226 -2.57098 4.45426 12.53161 -0.75802 0.85820 3.53608 7 3 4 2.38 2013-Sep-20 09:11:25 4171693.42590 872118.06426 4730015.15919 11.80797 48.17154 532.90551 -2.39188 4.80193 8.31486 -0.57892 1.20587 -0.68067 7 3 4 2.38 2013-Sep-20 09:11:25 4171690.58025 872116.64729 4730012.69413 11.80796 48.17155 529.01769 -3.19656 5.44958 4.42704 -1.38360 1.85352 -4.56850 7 3 4 2.38 2013-Sep-20 09:11:25 4171691.12781 872116.15449 4730011.72512 11.80795 48.17154 528.58583 -3.79098 4.47912 3.99518 -1.97802 0.88306 -5.00036 7 3 4 2.38 2013-Sep-20 09:11:25 4171691.82827 872116.67823 4730011.86627 11.80796 48.17153 529.21974 -3.42165 3.98249 4.62908 -1.60869 0.38643 -4.36645 7 3 4 2.38 2013-Sep-20 09:11:25 4171693.99266 872119.22471 4730014.41203 11.80799 48.17153 532.87711 -1.37197 3.71332 8.28645 0.44099 0.11726 -0.70908 7 3 4 2.38 2013-Sep-20 09:11:25 4171692.83202 872118.52777 4730016.42282 11.80798 48.17155 533.52267 -1.81665 6.00714 8.93202 -0.00369 2.41108 -0.06352 7 3 4 2.38 2013-Sep-20 09:11:25 4171698.55650 872121.22407 4730021.03271 11.80800 48.17154 541.06256 -0.34883 4.49505 16.47190 1.46413 0.89899 7.47637 7 3 4 2.38 2013-Sep-20 09:11:25 4171695.04048 872119.56744 4730016.57388 11.80799 48.17154 535.21878 -1.25090 4.33855 10.62813 0.56206 0.74249 1.63259 7 3 4 2.38 2013-Sep-20 09:11:25 4171695.90497 872120.45805 4730017.43063 11.80800 48.17153 536.54305 -0.55605 4.14358 11.95240 1.25691 0.54751 2.95686 7 3 4 2.38 2013-Sep-20 09:11:25 4171696.09424 872119.26173 4730016.89450 11.80798 48.17153 536.10385 -1.76578 3.83040 11.51320 0.04718 0.23433 2.51766 7 3 4 2.38 2013-Sep-20 09:11:25 4171692.61374 872118.10090 4730013.36178 11.80798 48.17154 531.04101 -2.18982 4.19002 6.45035 -0.37686 0.59396 -2.54518 7 3 4 2.38 2013-Sep-20 09:11:25 4171694.36270 872118.03702 4730015.73834 11.80797 48.17154 533.94487 -2.61025 4.50905 9.35422 -0.79729 0.91298 0.35868 7 3 4 2.38 2013-Sep-20 09:11:25 4171697.04059 872118.20076 4730017.98789 11.80797 48.17153 537.39156 -2.99795 4.03113 12.80091 -1.18499 0.43506 3.80537 7 3 4 2.38 2013-Sep-20 09:11:25 4171696.55999 872119.84549 4730019.06078 11.80799 48.17154 538.10175 -1.28968 4.84638 13.51109 0.52328 1.25032 4.51556 7 3 4 2.38 2013-Sep-20 09:11:25 4171695.29187 872119.57062 4730017.30793 11.80799 48.17154 535.93029 -1.29924 4.64425 11.33963 0.51372 1.04819 2.34410 7 3 4 2.38 2013-Sep-20 09:11:25 4171693.87880 872117.74562 4730015.08127 11.80797 48.17154 533.09961 -2.79646 4.46822 8.50896 -0.98350 0.87216 -0.48657 7 3 4 2.38 2013-Sep-20 09:11:25 4171695.65525 872119.19908 4730016.35068 11.80798 48.17153 535.40351 -1.73728 3.79747 10.81285 0.07568 0.20140 1.81732 7 3 4 2.38 2013-Sep-20 09:11:25 4171699.08051 872120.38503 4730018.46706 11.80799 48.17152 539.37834 -1.27734 2.52976 14.78769 0.53562 -1.06631 5.79215 7 3 4 2.38 2013-Sep-20 09:11:25 4171698.36821 872119.86609 4730016.97570 11.80798 48.17152 537.73126 -1.63954 2.13383 13.14061 0.17342 -1.46224 4.14507 7 3 4 2.38 2013-Sep-20 09:11:26 4171695.45471 872119.69750 4730014.47563 11.80799 48.17152 533.94343 -1.20836 2.61727 9.35278 0.60460 -0.97879 0.35725 7 3 4 2.38 2013-Sep-20 09:11:26 4171691.42837 872117.31443 4730011.78606 11.80797 48.17153 528.98574 -2.71708 4.12367 4.39509 -0.90412 0.52761 -4.60044 7 3 4 2.38 2013-Sep-20 09:11:26 4171696.71907 872121.11664 4730009.75732 11.80800 48.17148 531.44664 -0.07799 -1.66798 6.85599 1.73497 -5.26404 -2.13955 7 3 4 2.38 2013-Sep-20 09:11:26 4171696.53243 872121.77257 4730011.51404 11.80801 48.17149 532.72333 0.60225 -0.46030 8.13268 2.41521 -4.05636 -0.86286 7 3 4 2.38 2013-Sep-20 09:11:26 4171697.99796 872122.74733 4730013.99782 11.80802 48.17150 535.66382 1.25649 -0.02142 11.07316 3.06945 -3.61748 2.07763 7 3 4 2.38 2013-Sep-20 09:11:26 4171696.37638 872121.71039 4730011.34412 11.80801 48.17149 532.48636 0.57332 -0.45033 7.89571 2.38628 -4.04639 -1.09983 7 3 4 2.38 2013-Sep-20 09:11:26 4171698.35090 872122.14956 4730013.71091 11.80801 48.17149 535.59885 0.59915 -0.37904 11.00820 2.41211 -3.97510 2.01266 7 3 4 2.38 2013-Sep-20 09:11:26 4171703.46376 872123.87039 4730019.69749 11.80802 48.17149 543.63218 1.23731 -0.37817 19.04153 3.05027 -3.97423 10.04599 7 3 4 2.38 2013-Sep-20 09:11:26 4171700.56430 872122.35069 4730016.45134 11.80801 48.17150 539.11320 0.34309 -0.19650 14.52254 2.15606 -3.79257 5.52701 7 3 4 2.38 2013-Sep-20 09:11:26 4171698.23291 872121.53889 4730013.56136 11.80801 48.17149 535.32705 0.02555 -0.29960 10.73639 1.83851 -3.89566 1.74086 7 3 4 2.38 2013-Sep-20 09:11:26 4171697.16465 872121.43782 4730013.15708 11.80801 48.17150 534.31466 0.14522 0.22536 9.72400 1.95818 -3.37070 0.72847 7 3 4 2.38 2013-Sep-20 09:11:26 4171698.34796 872120.87849 4730014.23452 11.80800 48.17150 535.81363 -0.64442 0.16612 11.22297 1.16854 -3.42995 2.22744 7 3 4 2.38 2013-Sep-20 09:11:26 4171695.76204 872118.60876 4730013.18849 11.80797 48.17151 533.03637 -2.33696 1.70071 8.44571 -0.52400 -1.89535 -0.54982 7 3 4 2.38 2013-Sep-20 09:11:26 4171699.44609 872120.90827 4730017.97351 11.80799 48.17151 539.32063 -0.83998 1.85417 14.72997 0.97298 -1.74189 5.73444 7 3 4 2.38 2013-Sep-20 09:11:26 4171698.64752 872119.43110 4730014.89668 11.80798 48.17150 536.30506 -2.12248 0.60993 11.71440 -0.30952 -2.98614 2.71887 7 3 4 2.38 2013-Sep-20 09:11:26 4171697.55984 872120.17978 4730014.86997 11.80799 48.17151 535.67731 -1.16707 1.27128 11.08665 0.64589 -2.32479 2.09112 7 3 4 2.38 2013-Sep-20 09:11:26 4171697.01947 872118.31837 4730015.09299 11.80797 48.17152 535.23671 -2.87851 2.09797 10.64606 -1.06555 -1.49809 1.65052 7 3 4 2.38 2013-Sep-20 09:11:26 4171696.65306 872117.98772 4730014.86804 11.80796 48.17152 534.78477 -3.12718 2.26563 10.19412 -1.31422 -1.33044 1.19859 7 3 4 2.38 2013-Sep-20 09:11:26 4171697.36222 872119.83651 4730014.54769 11.80799 48.17151 535.26130 -1.46263 1.25283 10.67065 0.35033 -2.34323 1.67512 7 3 4 2.38 2013-Sep-20 09:11:26 4171696.52404 872118.30901 4730013.17213 11.80797 48.17151 533.48070 -2.78630 1.17972 8.89004 -0.97334 -2.41634 -0.10549 7 3 4 2.38 2013-Sep-20 09:11:26 4171698.86385 872121.33989 4730017.74518 11.80800 48.17152 538.82931 -0.29835 2.06076 14.23865 1.51461 -1.53531 5.24312 7 3 4 2.38 2013-Sep-20 09:11:26 4171696.58909 872119.79233 4730014.38210 11.80799 48.17151 534.62719 -1.34768 1.71304 10.03654 0.46528 -1.88303 1.04100 7 3 4 2.38 2013-Sep-20 09:11:26 4171700.46335 872121.06357 4730017.83751 11.80799 48.17151 539.90455 -0.89613 0.99783 15.31389 0.91683 -2.59824 6.31836 7 3 4 2.38 2013-Sep-20 09:11:26 4171700.66830 872121.68466 4730017.35859 11.80800 48.17150 539.76623 -0.33013 0.43424 15.17557 1.48283 -3.16182 6.18004 7 3 4 2.38 2013-Sep-20 09:11:26 4171700.85203 872122.99020 4730019.80879 11.80802 48.17151 541.89009 0.91019 1.73522 17.29943 2.72315 -1.86085 8.30390 7 3 4 2.38 2013-Sep-20 09:11:27 4171698.23027 872122.52875 4730017.15334 11.80802 48.17152 538.13696 0.99500 1.94689 13.54630 2.80797 -1.64917 4.55077 7 3 4 2.38 2013-Sep-20 09:11:27 4171696.75157 872120.64933 4730014.79814 11.80800 48.17151 535.16023 -0.54206 1.74131 10.56957 1.27090 -1.85475 1.57404 7 3 4 2.38 2013-Sep-20 09:11:27 4171696.76416 872119.87706 4730013.78979 11.80799 48.17151 534.31169 -1.30056 1.17741 9.72103 0.51240 -2.41865 0.72550 7 3 4 2.38 2013-Sep-20 09:11:27 4171698.92258 872120.43430 4730016.84209 11.80799 48.17151 538.07113 -1.19680 1.55373 13.48048 0.61616 -2.04234 4.48494 7 3 4 2.38 2013-Sep-20 09:11:27 4171699.32516 872119.95899 4730019.37041 11.80798 48.17152 540.15303 -1.74442 3.01872 15.56238 0.06854 -0.57735 6.56684 7 3 4 2.38 2013-Sep-20 09:11:27 4171696.62232 872119.48749 4730015.38510 11.80798 48.17152 535.35466 -1.65286 2.40418 10.76401 0.16010 -1.19188 1.76847 7 3 4 2.38 2013-Sep-20 09:11:27 4171695.82406 872119.99204 4730012.96060 11.80799 48.17151 533.09582 -0.99563 1.29258 8.50517 0.81733 -2.30348 -0.49037 7 3 4 2.38 2013-Sep-20 09:11:27 4171697.16384 872120.84539 4730013.40883 11.80800 48.17150 534.42087 -0.43451 0.48418 9.83022 1.37845 -3.11188 0.83468 7 3 4 2.38 2013-Sep-20 09:11:27 4171694.88333 872120.47935 4730010.82835 11.80800 48.17150 530.95939 -0.32614 0.48241 6.36873 1.48682 -3.11365 -2.62680 7 3 4 2.38 2013-Sep-20 09:11:27 4171697.97785 872121.99028 4730014.31845 11.80801 48.17150 535.78629 0.51958 0.32252 11.19563 2.33254 -3.27354 2.20010 7 3 4 2.38 2013-Sep-20 09:11:27 4171698.45984 872122.18730 4730016.08542 11.80801 48.17151 537.44446 0.61380 1.11932 12.85381 2.42676 -2.47674 3.85827 7 3 4 2.38 2013-Sep-20 09:11:27 4171701.78809 872123.72444 4730018.20614 11.80802 48.17150 541.40713 1.43735 -0.12830 16.81648 3.25031 -3.72436 7.82094 7 3 4 2.38 2013-Sep-20 09:11:27 4171696.37122 872121.62406 4730011.62400 11.80801 48.17150 532.67977 0.48988 -0.24675 8.08911 2.30284 -3.84281 -0.90642 7 3 4 2.38 2013-Sep-20 09:11:27 4171695.20851 872120.51676 4730010.85522 11.80800 48.17150 531.19679 -0.35606 0.25745 6.60614 1.45690 -3.33861 -2.38940 7 3 4 2.38 2013-Sep-20 09:11:27 4171697.02880 872121.39072 4730013.54692 11.80801 48.17150 534.51004 0.12691 0.59162 9.91939 1.93988 -3.00445 0.92385 7 3 4 2.38 2013-Sep-20 09:11:27 4171698.35699 872122.09135 4730015.74924 11.80801 48.17151 537.11373 0.54092 0.98476 12.52307 2.35388 -2.61130 3.52754 7 3 4 2.38 2013-Sep-20 09:11:27 4171696.79047 872123.00365 4730015.42316 11.80803 48.17151 535.97264 1.75448 1.77078 11.38198 3.56744 -1.82529 2.38645 7 3 4 2.38 2013-Sep-20 09:11:27 4171695.26064 872122.85392 4730013.27502 11.80803 48.17151 533.35288 1.92098 1.47683 8.76223 3.73394 -2.11923 -0.23331 7 3 4 2.38 2013-Sep-20 09:11:27 4171698.51176 872122.27968 4730016.83279 11.80801 48.17151 538.04786 0.69360 1.56578 13.45721 2.50656 -2.03028 4.46167 7 3 4 2.38 2013-Sep-20 09:11:27 4171697.06947 872120.76356 4730013.38628 11.80800 48.17150 534.33130 -0.49530 0.55045 9.74065 1.31766 -3.04561 0.74511 7 3 4 2.38 2013-Sep-20 09:11:27 4171699.70373 872120.05775 4730016.30475 11.80798 48.17150 538.12928 -1.72522 0.68304 13.53862 0.08774 -2.91303 4.54309 7 3 4 2.38 2013-Sep-20 09:11:27 4171696.10559 872119.77345 4730013.66015 11.80799 48.17151 533.77103 -1.26721 1.58710 9.18038 0.54575 -2.00896 0.18485 7 3 4 2.38 2013-Sep-20 09:11:27 4171699.19207 872119.76258 4730016.24054 11.80798 48.17151 537.70715 -1.90945 1.05842 13.11649 -0.09649 -2.53764 4.12096 7 3 4 2.38 2013-Sep-20 09:11:27 4171694.38017 872117.19225 4730010.17298 11.80796 48.17151 529.69399 -3.44071 0.91355 5.10334 -1.62775 -2.68251 -3.89220 7 3 4 2.38 2013-Sep-20 09:11:27 4171694.22234 872117.85273 4730011.09932 11.80797 48.17151 530.37136 -2.76191 1.54574 5.78070 -0.94896 -2.05032 -3.21483 7 3 4 2.38 2013-Sep-20 09:11:28 4171695.11148 872119.04029 4730014.07009 11.80798 48.17152 533.32750 -1.78143 2.69736 8.73684 0.03153 -0.89870 -0.25869 7 3 4 2.38 2013-Sep-20 09:11:28 4171698.15677 872119.96893 4730018.03728 11.80799 48.17152 538.39830 -1.49561 2.98033 13.80764 0.31735 -0.61574 4.81211 7 3 4 2.38 2013-Sep-20 09:11:28 4171692.57672 872118.00723 4730011.52180 11.80798 48.17152 529.63301 -2.27394 3.00422 5.04235 -0.46098 -0.59184 -3.95318 7 3 4 2.38 2013-Sep-20 09:11:28 4171695.70734 872120.86786 4730014.12594 11.80800 48.17152 534.00749 -0.11447 2.02133 9.41684 1.69849 -1.57473 0.42130 7 3 4 2.38 2013-Sep-20 09:11:28 4171697.26853 872120.68400 4730015.72391 11.80800 48.17152 536.19225 -0.61391 1.97637 11.60160 1.19905 -1.61969 2.60607 7 3 4 2.38 2013-Sep-20 09:11:28 4171694.52444 872120.43586 4730012.73190 11.80800 48.17152 532.13760 -0.29526 2.02030 7.54694 1.51769 -1.57576 -1.44859 7 3 4 2.38 2013-Sep-20 09:11:28 4171692.39192 872118.57243 4730011.27480 11.80798 48.17152 529.40545 -1.68288 2.88810 4.81480 0.13008 -0.70796 -4.18073 7 3 4 2.38 2013-Sep-20 09:11:28 4171692.78390 872117.78744 4730010.16343 11.80797 48.17152 528.72607 -2.53147 1.98071 4.13542 -0.71851 -1.61535 -4.86012 7 3 4 2.38 2013-Sep-20 09:11:28 4171691.87487 872117.15786 4730009.97550 11.80797 48.17152 527.90672 -2.96171 2.61440 3.31606 -1.14875 -0.98165 -5.67947 7 3 4 2.38 2013-Sep-20 09:11:28 4171699.73964 872121.31398 4730017.51368 11.80800 48.17151 539.22498 -0.50293 1.27154 14.63432 1.31003 -2.32453 5.63879 7 3 4 2.38 2013-Sep-20 09:11:28 4171696.61637 872120.95475 4730015.62866 11.80800 48.17152 535.73250 -0.21543 2.34723 11.14185 1.59753 -1.24883 2.14631 7 3 4 2.38 2013-Sep-20 09:11:28 4171699.45129 872122.06901 4730018.32541 11.80801 48.17151 539.74464 0.29513 1.90808 15.15399 2.10809 -1.68799 6.15845 7 3 4 2.38 2013-Sep-20 09:11:28 4171697.16364 872119.64857 4730015.64253 11.80798 48.17152 535.92184 -1.60596 2.15647 11.33118 0.20700 -1.43959 2.33565 7 3 4 2.38 2013-Sep-20 09:11:28 4171693.87384 872118.79801 4730011.97069 11.80798 48.17152 530.92216 -1.76532 2.23691 6.33150 0.04764 -1.35915 -2.66403 7 3 4 2.38 2013-Sep-20 09:11:28 4171690.82398 872118.69498 4730010.21216 11.80799 48.17153 527.60682 -1.24207 3.30434 3.01617 0.57089 -0.29171 -5.97937 7 3 4 2.38 2013-Sep-20 09:11:28 4171691.81943 872118.46771 4730010.90035 11.80798 48.17153 528.73842 -1.66823 3.07190 4.14777 0.14473 -0.52416 -4.84776 7 3 4 2.38 2013-Sep-20 09:11:28 4171695.31081 872120.55540 4730015.15712 11.80800 48.17153 534.47438 -0.33917 3.04589 9.88373 1.47379 -0.55017 0.88819 7 3 4 2.38 2013-Sep-20 09:11:28 4171696.57652 872120.27903 4730016.16587 11.80799 48.17152 536.01457 -0.86870 2.83759 11.42392 0.94426 -0.75847 2.42838 7 3 4 2.38 2013-Sep-20 09:11:28 4171698.61181 872122.98260 4730016.69875 11.80802 48.17151 538.10922 1.36117 1.29624 13.51857 3.17413 -2.29982 4.52303 7 3 4 2.38 2013-Sep-20 09:11:28 4171695.15391 872121.11126 4730014.38076 11.80801 48.17152 533.86931 0.23703 2.55782 9.27866 2.04999 -1.03825 0.28312 7 3 4 2.38 2013-Sep-20 09:11:28 4171694.64640 872120.83946 4730012.58297 11.80801 48.17151 532.16131 0.07484 1.77048 7.57066 1.88780 -1.82558 -1.42488 7 3 4 2.38 2013-Sep-20 09:11:28 4171691.63031 872119.31195 4730011.21968 11.80799 48.17153 528.96813 -0.80316 3.29407 4.37747 1.00980 -0.30198 -4.61806 7 3 4 2.38 2013-Sep-20 09:11:28 4171689.25703 872118.79877 4730009.74856 11.80799 48.17153 526.25265 -0.81983 4.12224 1.66199 0.99313 0.52619 -7.33354 7 3 4 2.38 2013-Sep-20 09:11:28 4171689.90162 872120.13573 4730011.28216 11.80801 48.17154 527.99864 0.35694 4.47099 3.40798 2.16989 0.87493 -5.58755 7 3 4 2.38 2013-Sep-20 09:11:28 4171691.77881 872120.72587 4730012.57524 11.80801 48.17153 530.26812 0.55045 3.87419 5.67746 2.36341 0.27813 -3.31807 7 3 4 2.38 2013-Sep-20 09:11:29 4171692.45743 872120.72748 4730014.45920 11.80801 48.17154 532.11516 0.41316 4.63540 7.52450 2.22612 1.03934 -1.47103 7 3 4 2.38 2013-Sep-20 09:11:29 4171692.88042 872119.50118 4730013.40565 11.80799 48.17153 531.43888 -0.87374 3.81125 6.84823 0.93922 0.21519 -2.14731 7 3 4 2.38 2013-Sep-20 09:11:29 4171693.25078 872118.94429 4730013.69045 11.80799 48.17153 531.81687 -1.49464 3.81597 7.22621 0.31832 0.21990 -1.76932 7 3 4 2.38 2013-Sep-20 09:11:29 4171689.33849 872117.64902 4730011.45198 11.80798 48.17155 527.41821 -1.96192 5.37416 2.82756 -0.14896 1.77810 -6.16797 7 3 4 2.38 2013-Sep-20 09:11:29 4171691.67619 872118.95441 4730014.83285 11.80799 48.17155 531.64162 -1.16252 5.72476 7.05096 0.65043 2.12870 -1.94457 7 3 4 2.38 2013-Sep-20 09:11:29 4171690.74721 872117.78260 4730015.28347 11.80798 48.17156 531.21106 -2.11943 6.88154 6.62040 -0.30648 3.28548 -2.37513 7 3 4 2.38 2013-Sep-20 09:11:29 4171693.06028 872118.23964 4730018.20147 11.80798 48.17156 534.95771 -2.14540 7.07077 10.36705 -0.33244 3.47471 1.37152 7 3 4 2.38 2013-Sep-20 09:11:29 4171695.36513 872118.22820 4730018.55966 11.80797 48.17155 536.72763 -2.62825 5.63029 12.13698 -0.81529 2.03422 3.14145 7 3 4 2.38 2013-Sep-20 09:11:29 4171694.87433 872119.42778 4730018.09010 11.80799 48.17155 536.22106 -1.35362 5.49221 11.63041 0.45934 1.89615 2.63488 7 3 4 2.38 2013-Sep-20 09:11:29 4171698.50407 872122.34864 4730022.07376 11.80802 48.17154 541.95753 0.76268 5.05610 17.36688 2.57564 1.46003 8.37135 7 3 4 2.38 2013-Sep-20 09:11:29 4171699.62995 872122.88747 4730024.16930 11.80802 48.17155 544.32751 1.05971 5.55027 19.73685 2.87267 1.95421 10.74132 7 3 4 2.38 2013-Sep-20 09:11:29 4171696.84794 872121.87700 4730020.45151 11.80801 48.17154 539.60325 0.63992 5.25408 15.01260 2.45288 1.65801 6.01707 7 3 4 2.38 2013-Sep-20 09:11:29 4171699.64875 872122.48073 4730022.82808 11.80801 48.17154 543.28487 0.65774 4.70412 18.69421 2.47070 1.10805 9.69868 7 3 4 2.38 2013-Sep-20 09:11:29 4171695.56689 872120.80957 4730017.99886 11.80800 48.17154 536.79375 -0.14278 4.71553 12.20309 1.67018 1.11946 3.20756 7 3 4 2.38 2013-Sep-20 09:11:29 4171694.09739 872120.41500 4730016.23289 11.80800 48.17154 534.46472 -0.22830 4.66978 9.87407 1.58466 1.07371 0.87853 7 3 4 2.38 2013-Sep-20 09:11:29 4171689.51731 872117.48823 4730013.34802 11.80798 48.17156 528.92582 -2.15590 6.53273 4.33516 -0.34294 2.93667 -4.66037 7 3 4 2.38 2013-Sep-20 09:11:29 4171692.20834 872119.52321 4730015.80457 11.80800 48.17155 532.79070 -0.71465 5.89794 8.20004 1.09831 2.30188 -0.79549 7 3 4 2.38 2013-Sep-20 09:11:29 4171690.26954 872116.58989 4730011.80842 11.80796 48.17154 528.14705 -3.18916 5.09428 3.55640 -1.37621 1.49822 -5.43914 7 3 4 2.38 2013-Sep-20 09:11:29 4171692.63805 872117.70373 4730014.79942 11.80797 48.17154 532.07393 -2.58356 5.19162 7.48327 -0.77060 1.59555 -1.51226 7 3 4 2.38 2013-Sep-20 09:11:29 4171695.05242 872117.86474 4730016.05879 11.80797 48.17154 534.61039 -2.92001 4.24596 10.01973 -1.10706 0.64990 1.02420 7 3 4 2.38 2013-Sep-20 09:11:29 4171696.28618 872119.29977 4730017.75940 11.80798 48.17154 536.87882 -1.76782 4.26141 12.28816 0.04514 0.66534 3.29263 7 3 4 2.38 2013-Sep-20 09:11:29 4171696.24372 872119.42877 4730018.64861 11.80798 48.17154 537.53129 -1.63286 4.86573 12.94064 0.18010 1.26966 3.94510 7 3 4 2.38 2013-Sep-20 09:11:29 4171694.47531 872120.14495 4730017.91560 11.80800 48.17155 535.92844 -0.56997 5.55751 11.33778 1.24299 1.96145 2.34225 7 3 4 2.38 2013-Sep-20 09:11:29 4171692.02413 872118.75371 4730015.57320 11.80799 48.17155 532.39304 -1.43017 5.99533 7.80238 0.38279 2.39927 -1.19315 7 3 4 2.38 2013-Sep-20 09:11:29 4171692.68112 872118.02196 4730015.16433 11.80797 48.17155 532.41738 -2.28088 5.35504 7.82672 -0.46792 1.75898 -1.16881 7 3 4 2.38 2013-Sep-20 09:11:30 4171698.26892 872120.32798 4730019.17740 11.80799 48.17153 539.37006 -1.16711 3.60414 14.77941 0.64585 0.00807 5.78387 7 3 4 2.38 2013-Sep-20 09:11:30 4171693.83005 872119.05864 4730014.08610 11.80799 48.17153 532.50543 -1.50125 3.63988 7.91478 0.31171 0.04382 -1.08076 7 3 4 2.38 2013-Sep-20 09:11:30 4171698.20908 872122.93997 4730015.33242 11.80802 48.17150 536.82239 1.40186 0.68527 12.23174 3.21482 -2.91079 3.23620 7 3 4 2.38 2013-Sep-20 09:11:30 4171695.97666 872120.12333 4730013.88632 11.80799 48.17151 533.90315 -0.89835 1.77862 9.31250 0.91461 -1.81744 0.31696 7 3 4 2.38 2013-Sep-20 09:11:30 4171696.92966 872121.12356 4730013.16645 11.80800 48.17150 534.12535 -0.11430 0.45093 9.53470 1.69866 -3.14513 0.53916 7 3 4 2.38 2013-Sep-20 09:11:30 4171697.32508 872121.12276 4730014.01853 11.80800 48.17150 535.01829 -0.19600 0.73090 10.42764 1.61696 -2.86517 1.43211 7 3 4 2.38 2013-Sep-20 09:11:30 4171696.65321 872122.10532 4730013.16538 11.80802 48.17150 534.07807 0.90325 0.50214 9.48742 2.71621 -3.09392 0.49188 7 3 4 2.38 2013-Sep-20 09:11:30 4171698.16121 872123.04957 4730013.98422 11.80803 48.17150 535.80150 1.51893 -0.19564 11.21084 3.33190 -3.79170 2.21531 7 3 4 2.38 2013-Sep-20 09:11:30 4171699.64704 872122.89464 4730015.46791 11.80802 48.17150 537.85585 1.06324 -0.26627 13.26520 2.87620 -3.86233 4.26966 7 3 4 2.38 2013-Sep-20 09:11:30 4171700.85327 872122.27936 4730017.03292 11.80801 48.17150 539.72546 0.21413 -0.00854 15.13481 2.02710 -3.60461 6.13927 7 3 4 2.38 2013-Sep-20 09:11:30 4171696.34753 872120.12522 4730014.30993 11.80799 48.17151 534.46116 -0.97240 1.79033 9.87050 0.84056 -1.80573 0.87497 7 3 4 2.38 2013-Sep-20 09:11:30 4171700.59557 872122.80469 4730018.34648 11.80802 48.17151 540.60772 0.78109 0.97533 16.01707 2.59405 -2.62073 7.02153 7 3 4 2.38 2013-Sep-20 09:11:30 4171698.96544 872121.46834 4730015.70480 11.80800 48.17150 537.39278 -0.19341 0.60633 12.80212 1.61955 -2.98973 3.80659 7 3 4 2.38 2013-Sep-20 09:11:30 4171692.62677 872118.77648 4730009.87217 11.80799 48.17151 528.54145 -1.53120 1.75027 3.95080 0.28176 -1.84579 -5.04474 7 3 4 2.38 2013-Sep-20 09:11:30 4171693.56977 872118.49947 4730009.84089 11.80798 48.17151 529.09592 -1.99532 1.08384 4.50526 -0.18236 -2.51222 -4.49027 7 3 4 2.38 2013-Sep-20 09:11:30 4171696.54106 872121.05589 4730014.78581 11.80800 48.17151 535.06910 -0.10102 1.82464 10.47844 1.71194 -1.77142 1.48291 7 3 4 2.38 2013-Sep-20 09:11:30 4171699.28641 872121.68572 4730017.28730 11.80801 48.17151 538.81116 -0.04631 1.39445 14.22051 1.76665 -2.20161 5.22497 7 3 4 2.38 2013-Sep-20 09:11:30 4171697.35350 872120.28275 4730015.59475 11.80799 48.17151 536.09672 -1.02406 1.88944 11.50606 0.78890 -1.70663 2.51053 7 3 4 2.38 2013-Sep-20 09:11:30 4171697.41420 872120.14113 4730014.05201 11.80799 48.17151 534.96746 -1.17510 0.83790 10.37680 0.63786 -2.75817 1.38127 7 3 4 2.38 2013-Sep-20 09:11:30 4171698.63958 872121.94094 4730017.48684 11.80801 48.17152 538.57243 0.33587 1.96040 13.98178 2.14883 -1.63566 4.98624 7 3 4 2.38 2013-Sep-20 09:11:30 4171694.74321 872121.15456 4730014.74022 11.80801 48.17153 533.87498 0.36346 3.09049 9.28432 2.17642 -0.50557 0.28879 7 3 4 2.38 2013-Sep-20 09:11:30 4171697.29040 872123.02076 4730016.70891 11.80803 48.17152 537.25940 1.66893 2.26100 12.66875 3.48189 -1.33506 3.67321 7 3 4 2.38 2013-Sep-20 09:11:30 4171694.96024 872122.44852 4730013.85495 11.80803 48.17152 533.53358 1.58563 2.14450 8.94293 3.39859 -1.45156 -0.05261 7 3 4 2.38 2013-Sep-20 09:11:30 4171693.89942 872122.01331 4730011.53162 11.80802 48.17151 531.05048 1.37670 1.43517 6.45982 3.18966 -2.16089 -2.53571 7 3 4 2.38 2013-Sep-20 09:11:30 4171698.12185 872124.00491 4730015.22298 11.80804 48.17150 536.82924 2.46211 0.51352 12.23859 4.27507 -3.08254 3.24305 7 3 4 2.38 2013-Sep-20 09:11:31 4171701.76915 872124.39407 4730017.25623 11.80803 48.17149 540.77833 2.09668 -0.85009 16.18767 3.90964 -4.44615 7.19214 7 3 4 2.38 2013-Sep-20 09:11:31 4171701.62926 872123.10073 4730015.49390 11.80802 48.17148 539.19732 0.85934 -1.72614 14.60667 2.67230 -5.32221 5.61113 7 3 4 2.38 2013-Sep-20 09:11:31 4171696.83396 872120.51495 4730012.08727 11.80800 48.17150 533.17567 -0.69045 -0.10618 8.58502 1.12251 -3.70224 -0.41052 7 3 4 2.38 2013-Sep-20 09:11:31 4171697.41331 872121.31794 4730013.75052 11.80801 48.17150 534.90282 -0.02301 0.45804 10.31216 1.78996 -3.13802 1.31663 7 3 4 2.38 2013-Sep-20 09:11:31 4171696.98600 872120.95555 4730013.18712 11.80800 48.17150 534.15461 -0.29029 0.44923 9.56395 1.52267 -3.14683 0.56842 7 3 4 2.38 2013-Sep-20 09:11:31 4171694.04482 872120.43889 4730011.38615 11.80800 48.17151 530.82213 -0.19415 1.47217 6.23148 1.61881 -2.12389 -2.76405 7 3 4 2.38 2013-Sep-20 09:11:31 4171698.00385 872123.47444 4730014.18133 11.80803 48.17150 535.90363 1.96702 -0.01420 11.31297 3.77998 -3.61026 2.31744 7 3 4 2.38 2013-Sep-20 09:11:31 4171696.78061 872121.42378 4730014.12273 11.80801 48.17151 534.78159 0.21006 1.15161 10.19094 2.02302 -2.44446 1.19540 7 3 4 2.38 2013-Sep-20 09:11:31 4171695.68997 872120.95522 4730012.45193 11.80801 48.17151 532.76070 -0.02540 0.90428 8.17005 1.78756 -2.69178 -0.82549 7 3 4 2.38 2013-Sep-20 09:11:31 4171696.79229 872123.24570 4730012.80506 11.80803 48.17150 534.05600 1.99103 -0.01348 9.46534 3.80400 -3.60954 0.46981 7 3 4 2.38 2013-Sep-20 09:11:31 4171696.84384 872123.37869 4730012.15739 11.80803 48.17149 533.62519 2.11066 -0.50329 9.03454 3.92362 -4.09935 0.03900 7 3 4 2.38 2013-Sep-20 09:11:31 4171700.89634 872123.35249 4730017.20702 11.80802 48.17150 540.02976 1.25575 -0.08748 15.43911 3.06871 -3.68354 6.44357 7 3 4 2.38 2013-Sep-20 09:11:31 4171697.98251 872119.90541 4730014.38778 11.80799 48.17150 535.55647 -1.52212 0.68326 10.96581 0.29084 -2.91281 1.97028 7 3 4 2.38 2013-Sep-20 09:11:31 4171697.69756 872121.97965 4730014.15532 11.80801 48.17150 535.48031 0.56653 0.41978 10.88966 2.37949 -3.17628 1.89412 7 3 4 2.38 2013-Sep-20 09:11:31 4171700.52680 872122.92218 4730016.59934 11.80802 48.17150 539.27699 0.91016 -0.15759 14.68633 2.72312 -3.75365 5.69080 7 3 4 2.38 2013-Sep-20 09:11:31 4171698.39552 872121.11229 4730014.63178 11.80800 48.17150 536.17260 -0.42530 0.36071 11.58194 1.38766 -3.23535 2.58641 7 3 4 2.38 2013-Sep-20 09:11:31 4171699.86931 872122.24930 4730015.30119 11.80801 48.17149 537.78865 0.38606 -0.44118 13.19799 2.19902 -4.03724 4.20246 7 3 4 2.38 2013-Sep-20 09:11:31 4171698.03849 872122.27009 4730013.20913 11.80802 48.17149 535.03745 0.78106 -0.50419 10.44680 2.59402 -4.10025 1.45126 7 3 4 2.38 2013-Sep-20 09:11:31 4171699.01237 872121.03175 4730015.15030 11.80800 48.17150 536.95066 -0.63036 0.26888 12.36000 1.18260 -3.32718 3.36447 7 3 4 2.38 2013-Sep-20 09:11:31 4171700.38797 872122.29167 4730016.49317 11.80801 48.17150 539.02120 0.32141 -0.03100 14.43055 2.13437 -3.62706 5.43501 7 3 4 2.38 2013-Sep-20 09:11:31 4171699.84155 872123.17397 4730018.40310 11.80802 48.17151 540.20808 1.29684 1.50675 15.61743 3.10981 -2.08931 6.62190 7 3 4 2.38 2013-Sep-20 09:11:31 4171696.45219 872121.13268 4730015.80448 11.80801 48.17152 535.78062 -0.00767 2.55710 11.18997 1.80529 -1.03896 2.19443 7 3 4 2.38 2013-Sep-20 09:11:31 4171697.41566 872121.08123 4730017.47779 11.80800 48.17152 537.64941 -0.25519 2.97815 13.05875 1.55777 -0.61792 4.06322 7 3 4 2.38 2013-Sep-20 09:11:31 4171698.47013 872122.57172 4730018.46835 11.80802 48.17152 539.27927 0.98798 2.64238 14.68861 2.80094 -0.95369 5.69308 7 3 4 2.38 2013-Sep-20 09:11:31 4171699.76482 872122.20683 4730018.91852 11.80801 48.17152 540.41008 0.36587 2.05393 15.81942 2.17883 -1.54214 6.82389 7 3 4 2.38 2013-Sep-20 09:11:32 4171699.67571 872122.06987 4730017.84856 11.80801 48.17151 539.53594 0.25005 1.42624 14.94529 2.06301 -2.16982 5.94975 7 3 4 2.38 2013-Sep-20 09:11:32 4171700.17402 872121.07050 4730017.18905 11.80799 48.17150 539.23342 -0.83014 0.77534 14.64277 0.98282 -2.82072 5.64723 7 3 4 2.38 2013-Sep-20 09:11:32 4171699.94684 872120.69430 4730017.57383 11.80799 48.17151 539.32050 -1.15189 1.25502 14.72985 0.66107 -2.34105 5.73431 7 3 4 2.38 2013-Sep-20 09:11:32 4171695.86171 872120.08078 4730012.05899 11.80799 48.17150 532.46068 -0.91648 0.65030 7.87002 0.89648 -2.94576 -1.12551 7 3 4 2.38 2013-Sep-20 09:11:32 4171692.74376 872119.90583 4730009.63812 11.80800 48.17151 528.59753 -0.44970 1.33665 4.00688 1.36326 -2.25941 -4.98866 7 3 4 2.38 2013-Sep-20 09:11:32 4171693.11802 872121.32357 4730009.95869 11.80802 48.17151 529.27420 0.86146 1.06128 4.68355 2.67442 -2.53478 -4.31199 7 3 4 2.38 2013-Sep-20 09:11:32 4171694.62019 872121.63663 4730011.20999 11.80802 48.17150 531.22992 0.86051 0.75239 6.63927 2.67347 -2.84367 -2.35627 7 3 4 2.38 2013-Sep-20 09:11:32 4171693.08701 872120.82783 4730010.58198 11.80801 48.17151 529.65074 0.38255 1.57516 5.06009 2.19551 -2.02090 -3.93544 7 3 4 2.38 2013-Sep-20 09:11:32 4171693.56567 872120.52789 4730013.26995 11.80801 48.17153 531.92520 -0.00899 3.06439 7.33454 1.80397 -0.53167 -1.66099 7 3 4 2.38 2013-Sep-20 09:11:32 4171695.48776 872121.01770 4730013.87497 11.80801 48.17152 533.69760 0.07713 1.99127 9.10694 1.89009 -1.60479 0.11141 7 3 4 2.38 2013-Sep-20 09:11:32 4171696.54161 872120.89515 4730015.08405 11.80800 48.17152 535.26976 -0.25847 2.04764 10.67910 1.55449 -1.54842 1.68357 7 3 4 2.38 2013-Sep-20 09:11:32 4171698.14005 872121.86835 4730014.99570 11.80801 48.17150 536.38018 0.36704 0.67446 11.78952 2.18000 -2.92160 2.79399 7 3 4 2.38 2013-Sep-20 09:11:32 4171696.95949 872121.14289 4730014.46102 11.80800 48.17151 535.11211 -0.10149 1.28957 10.52145 1.71147 -2.30649 1.52592 7 3 4 2.38 2013-Sep-20 09:11:32 4171696.00914 872119.82210 4730013.46721 11.80799 48.17151 533.57095 -1.19985 1.52136 8.98029 0.61311 -2.07470 -0.01524 7 3 4 2.38 2013-Sep-20 09:11:32 4171701.40291 872121.95208 4730017.87108 11.80800 48.17150 540.66415 -0.21869 0.19944 16.07349 1.59427 -3.39662 7.07796 7 3 4 2.38 2013-Sep-20 09:11:32 4171695.65275 872121.52404 4730015.60274 11.80801 48.17152 535.16185 0.53900 2.94598 10.57119 2.35196 -0.65009 1.57566 7 3 4 2.38 2013-Sep-20 09:11:32 4171697.42165 872120.31319 4730016.56531 11.80799 48.17152 536.86857 -1.00820 2.48235 12.27791 0.80476 -1.11371 3.28238 7 3 4 2.38 2013-Sep-20 09:11:32 4171698.96464 872121.97876 4730017.99457 11.80801 48.17152 539.16812 0.30637 2.05615 14.57747 2.11933 -1.53992 5.58194 7 3 4 2.38 2013-Sep-20 09:11:32 4171695.54423 872120.87815 4730017.16218 11.80800 48.17154 536.16486 -0.07102 4.16361 11.57421 1.74194 0.56755 2.57867 7 3 4 2.38 2013-Sep-20 09:11:32 4171690.17505 872117.83562 4730010.78609 11.80798 48.17154 527.49359 -1.95045 4.29145 2.90293 -0.13749 0.69540 -6.09260 7 3 4 2.38 2013-Sep-20 09:11:32 4171692.12620 872119.79749 4730013.83103 11.80800 48.17154 531.30394 -0.42937 4.59987 6.71328 1.38359 1.00380 -2.28225 7 3 4 2.38 2013-Sep-20 09:11:32 4171691.00390 872118.66875 4730012.66655 11.80799 48.17154 529.54957 -1.30456 4.81397 4.95891 0.50839 1.21791 -4.03662 7 3 4 2.38 2013-Sep-20 09:11:32 4171695.61142 872119.94615 4730017.12012 11.80799 48.17154 536.05020 -0.99704 4.22866 11.45954 0.81592 0.63260 2.46401 7 3 4 2.38 2013-Sep-20 09:11:32 4171697.07143 872119.70939 4730017.66332 11.80799 48.17153 537.37573 -1.52756 3.56213 12.78507 0.28540 -0.03393 3.78954 7 3 4 2.38 2013-Sep-20 09:11:32 4171695.53907 872118.93159 4730014.25243 11.80798 48.17152 533.72766 -1.97533 2.52366 9.13700 -0.16237 -1.07240 0.14147 7 3 4 2.38 2013-Sep-20 09:11:33 4171693.38314 872116.17409 4730011.24903 11.80795 48.17152 529.70601 -4.23330 2.51364 5.11535 -2.42034 -1.08242 -3.88018 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.17525 872118.25789 4730014.26288 11.80797 48.17153 532.75322 -2.35569 3.62810 8.16256 -0.54273 0.03204 -0.83297 7 3 4 2.38 2013-Sep-20 09:11:33 4171696.14932 872119.23864 4730016.09468 11.80798 48.17153 535.54067 -1.79966 3.26034 10.95002 0.01330 -0.33572 1.95448 7 3 4 2.38 2013-Sep-20 09:11:33 4171695.66794 872118.17743 4730016.54258 11.80797 48.17153 535.41536 -2.73990 4.07197 10.82470 -0.92694 0.47591 1.82917 7 3 4 2.38 2013-Sep-20 09:11:33 4171692.65960 872117.00697 4730014.22706 11.80796 48.17154 531.56642 -3.26999 4.90043 6.97576 -1.45703 1.30437 -2.01977 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.86981 872118.65044 4730015.24167 11.80798 48.17153 533.98953 -2.11358 3.71441 9.39888 -0.30062 0.11834 0.40335 7 3 4 2.38 2013-Sep-20 09:11:33 4171696.18617 872118.65764 4730015.63173 11.80797 48.17152 535.14048 -2.37590 3.01331 10.54982 -0.56294 -0.58275 1.55429 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.95458 872117.40193 4730013.79240 11.80796 48.17152 532.79457 -3.35301 2.87643 8.20391 -1.54005 -0.71963 -0.79162 7 3 4 2.38 2013-Sep-20 09:11:33 4171695.80329 872119.19935 4730016.04300 11.80798 48.17153 535.27092 -1.76730 3.48426 10.68026 0.04566 -0.11181 1.68473 7 3 4 2.38 2013-Sep-20 09:11:33 4171697.16613 872119.18397 4730018.03988 11.80798 48.17153 537.64643 -2.06124 3.82431 13.05578 -0.24828 0.22824 4.06025 7 3 4 2.38 2013-Sep-20 09:11:33 4171695.34082 872118.39122 4730017.32410 11.80797 48.17154 535.81334 -2.46370 4.79916 11.22268 -0.65074 1.20310 2.22715 7 3 4 2.38 2013-Sep-20 09:11:33 4171697.92042 872119.02717 4730019.71352 11.80797 48.17154 539.36453 -2.36908 4.41421 14.77388 -0.55612 0.81814 5.77835 7 3 4 2.38 2013-Sep-20 09:11:33 4171696.31809 872117.99340 4730017.19117 11.80796 48.17153 536.29795 -3.05308 4.05837 11.70730 -1.24012 0.46231 2.71176 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.49039 872117.01224 4730014.71444 11.80796 48.17153 533.12542 -3.63947 3.88932 8.53477 -1.82651 0.29326 -0.46076 7 3 4 2.38 2013-Sep-20 09:11:33 4171692.15456 872116.40968 4730011.34855 11.80796 48.17153 529.01031 -3.75129 3.44018 4.41966 -1.93833 -0.15588 -4.57588 7 3 4 2.38 2013-Sep-20 09:11:33 4171693.74161 872117.77649 4730014.38891 11.80797 48.17153 532.49836 -2.73817 4.10184 7.90770 -0.92521 0.50578 -1.08783 7 3 4 2.38 2013-Sep-20 09:11:33 4171691.32930 872116.91961 4730011.11749 11.80796 48.17153 528.36901 -3.08327 3.81026 3.77835 -1.27031 0.21420 -5.21718 7 3 4 2.38 2013-Sep-20 09:11:33 4171689.40517 872115.46055 4730007.98031 11.80795 48.17153 524.57618 -4.11772 3.34396 -0.01447 -2.30476 -0.25210 -9.01001 7 3 4 2.38 2013-Sep-20 09:11:33 4171691.52175 872117.27570 4730011.72622 11.80797 48.17153 528.99682 -2.77411 4.02156 4.40617 -0.96115 0.42550 -4.58937 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.24856 872118.10446 4730013.56436 11.80797 48.17153 532.25964 -2.52088 3.13217 7.66899 -0.70792 -0.46389 -1.32655 7 3 4 2.38 2013-Sep-20 09:11:33 4171695.03155 872118.08511 4730015.18106 11.80797 48.17153 533.97281 -2.70004 3.64222 9.38215 -0.88708 0.04616 0.38662 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.44460 872119.92811 4730015.27935 11.80800 48.17153 533.91440 -0.77593 3.85485 9.32375 1.03703 0.25879 0.32821 7 3 4 2.38 2013-Sep-20 09:11:33 4171692.51924 872117.20533 4730012.79137 11.80796 48.17153 530.43206 -3.04711 4.01510 5.84141 -1.23415 0.41904 -3.15413 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.14532 872118.05045 4730014.36843 11.80797 48.17153 532.78402 -2.55262 3.75195 8.19337 -0.73966 0.15589 -0.80217 7 3 4 2.38 2013-Sep-20 09:11:33 4171694.60358 872119.09435 4730015.78673 11.80798 48.17154 534.28247 -1.62459 4.20440 9.69182 0.18837 0.60834 0.69629 7 3 4 2.38 2013-Sep-20 09:11:34 4171697.71712 872118.76036 4730018.49023 11.80797 48.17153 538.28388 -2.58864 3.78735 13.69322 -0.77567 0.19129 4.69769 7 3 4 2.38 2013-Sep-20 09:11:34 4171698.50526 872120.06490 4730020.36119 11.80799 48.17154 540.37053 -1.47298 4.26134 15.77987 0.33998 0.66527 6.78434 7 3 4 2.38 2013-Sep-20 09:11:34 4171700.01562 872119.60757 4730020.38900 11.80798 48.17153 541.31480 -2.22970 3.24800 16.72414 -0.41674 -0.34807 7.72861 7 3 4 2.38 2013-Sep-20 09:11:34 4171703.02134 872119.88652 4730021.20011 11.80797 48.17151 543.91936 -2.57172 1.55410 19.32871 -0.75876 -2.04197 10.33317 7 3 4 2.38 2013-Sep-20 09:11:34 4171700.68918 872119.11903 4730020.19398 11.80797 48.17152 541.54250 -2.84574 2.70115 16.95185 -1.03278 -0.89491 7.95631 7 3 4 2.38 2013-Sep-20 09:11:34 4171695.91369 872118.29525 4730016.78767 11.80797 48.17153 535.77449 -2.67486 4.03822 11.18383 -0.86190 0.44215 2.18830 7 3 4 2.38 2013-Sep-20 09:11:34 4171692.19223 872116.24494 4730011.91046 11.80795 48.17153 529.43112 -3.92026 3.81256 4.84047 -2.10730 0.21650 -4.15507 7 3 4 2.38 2013-Sep-20 09:11:34 4171692.60351 872115.67836 4730012.42184 11.80794 48.17153 530.00333 -4.55901 3.94003 5.41268 -2.74605 0.34397 -3.58286 7 3 4 2.38 2013-Sep-20 09:11:34 4171692.30553 872116.47974 4730011.77706 11.80796 48.17153 529.43772 -3.71361 3.60516 4.84707 -1.90065 0.00910 -4.14847 7 3 4 2.38 2013-Sep-20 09:11:34 4171692.75250 872116.39083 4730014.49148 11.80795 48.17154 531.74001 -3.89211 5.10296 7.14935 -2.07915 1.50690 -1.84618 7 3 4 2.38 2013-Sep-20 09:11:34 4171693.38938 872117.92347 4730014.57571 11.80797 48.17154 532.42768 -2.52222 4.46091 7.83702 -0.70926 0.86485 -1.15851 7 3 4 2.38 2013-Sep-20 09:11:34 4171693.41935 872118.32627 4730013.77584 11.80798 48.17153 531.90619 -2.13408 3.84420 7.31554 -0.32112 0.24814 -1.67999 7 3 4 2.38 2013-Sep-20 09:11:34 4171693.32380 872117.47642 4730014.12891 11.80797 48.17154 531.99093 -2.94639 4.27895 7.40027 -1.13343 0.68288 -1.59526 7 3 4 2.38 2013-Sep-20 09:11:34 4171692.65694 872118.51198 4730013.90922 11.80798 48.17154 531.53323 -1.79628 4.46092 6.94258 0.01668 0.86486 -2.05296 7 3 4 2.38 2013-Sep-20 09:11:34 4171691.90780 872118.74806 4730013.12016 11.80799 48.17154 530.48846 -1.41189 4.44509 5.89780 0.40106 0.84903 -3.09773 7 3 4 2.38 2013-Sep-20 09:11:34 4171691.70153 872117.98405 4730014.60682 11.80798 48.17155 531.35731 -2.11753 5.70350 6.76666 -0.30458 2.10744 -2.22888 7 3 4 2.38 2013-Sep-20 09:11:34 4171694.24309 872119.02442 4730017.39279 11.80798 48.17155 535.23435 -1.61927 5.54908 10.64369 0.19369 1.95302 1.64816 7 3 4 2.38 2013-Sep-20 09:11:34 4171693.32101 872117.94897 4730015.87242 11.80797 48.17155 533.35276 -2.48327 5.37167 8.76210 -0.67031 1.77561 -0.23343 7 3 4 2.38 2013-Sep-20 09:11:34 4171696.72265 872120.43472 4730018.33754 11.80800 48.17154 537.74942 -0.74620 4.15556 13.15877 1.06676 0.55950 4.16324 7 3 4 2.38 2013-Sep-20 09:11:34 4171695.24415 872118.29192 4730016.16456 11.80797 48.17153 534.87266 -2.54111 4.11152 10.28200 -0.72815 0.51546 1.28647 7 3 4 2.38 2013-Sep-20 09:11:34 4171697.46090 872121.11818 4730018.27307 11.80800 48.17153 538.27658 -0.22828 3.46990 13.68593 1.58469 -0.12617 4.69039 7 3 4 2.38 2013-Sep-20 09:11:34 4171698.36143 872121.15813 4730019.08653 11.80800 48.17153 539.47604 -0.37345 3.34948 14.88538 1.43951 -0.24659 5.88985 7 3 4 2.38 2013-Sep-20 09:11:34 4171698.97376 872121.73982 4730018.37301 11.80801 48.17152 539.42346 0.07062 2.33831 14.83281 1.88358 -1.25775 5.83728 7 3 4 2.38 2013-Sep-20 09:11:34 4171695.05377 872118.90064 4730014.60167 11.80798 48.17153 533.66687 -1.90632 3.11526 9.07622 -0.09336 -0.48080 0.08068 7 3 4 2.38 2013-Sep-20 09:11:34 4171693.98799 872119.37912 4730015.20478 11.80799 48.17154 533.48585 -1.21987 4.22187 8.89519 0.59309 0.62581 -0.10034 7 3 4 2.38 2013-Sep-20 09:11:35 4171691.59768 872118.10163 4730013.07446 11.80798 48.17154 530.16374 -1.98119 4.73938 5.57308 -0.16823 1.14332 -3.42245 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.69617 872117.92132 4730012.70509 11.80797 48.17153 530.58098 -2.38247 3.71933 5.99033 -0.56951 0.12327 -3.00521 7 3 4 2.38 2013-Sep-20 09:11:35 4171688.53303 872116.05191 4730008.85767 11.80796 48.17154 524.74133 -3.36041 4.47502 0.15067 -1.54745 0.87896 -8.84486 7 3 4 2.38 2013-Sep-20 09:11:35 4171691.67697 872117.48426 4730012.70439 11.80797 48.17154 529.85549 -2.60172 4.52888 5.26483 -0.78876 0.93282 -3.73070 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.43862 872117.97018 4730014.46605 11.80797 48.17154 531.73169 -2.28194 5.07412 7.14103 -0.46898 1.47806 -1.85450 7 3 4 2.38 2013-Sep-20 09:11:35 4171694.64348 872118.29297 4730016.79061 11.80797 48.17154 534.94719 -2.41717 4.96698 10.35653 -0.60421 1.37092 1.36100 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.44947 872117.08023 4730013.09106 11.80796 48.17154 530.59275 -3.15528 4.28492 6.00210 -1.34232 0.68886 -2.99343 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.69437 872116.96410 4730013.10921 11.80796 48.17153 530.75030 -3.31907 4.13611 6.15964 -1.50611 0.54005 -2.83589 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.00709 872116.98460 4730014.64964 11.80796 48.17155 531.45229 -3.15836 5.66159 6.86163 -1.34540 2.06552 -2.13390 7 3 4 2.38 2013-Sep-20 09:11:35 4171693.38478 872118.56309 4730016.72597 11.80798 48.17155 534.11422 -1.89519 5.80075 9.52356 -0.08223 2.20469 0.52803 7 3 4 2.38 2013-Sep-20 09:11:35 4171691.92834 872116.68487 4730015.17580 11.80796 48.17155 531.75205 -3.43563 6.11562 7.16139 -1.62268 2.51956 -1.83414 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.17088 872116.15307 4730016.47838 11.80795 48.17156 532.80841 -4.00581 6.88851 8.21775 -2.19285 3.29245 -0.77778 7 3 4 2.38 2013-Sep-20 09:11:35 4171691.32198 872116.78377 4730013.64684 11.80796 48.17155 530.23042 -3.21475 5.52314 5.63976 -1.40179 1.92708 -3.35577 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.39347 872118.10994 4730015.52382 11.80798 48.17155 532.50948 -2.13590 5.79117 7.91883 -0.32294 2.19511 -1.07670 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.04443 872118.25264 4730015.06071 11.80798 48.17155 531.95602 -1.92479 5.71514 7.36537 -0.11183 2.11908 -1.63016 7 3 4 2.38 2013-Sep-20 09:11:35 4171694.27706 872119.00306 4730015.56449 11.80798 48.17154 533.89126 -1.64712 4.30827 9.30060 0.16584 0.71220 0.30507 7 3 4 2.38 2013-Sep-20 09:11:35 4171693.83391 872118.08116 4730015.68319 11.80797 48.17154 533.56462 -2.45884 4.85122 8.97396 -0.64588 1.25516 -0.02157 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.03784 872117.65284 4730014.08187 11.80797 48.17154 531.14049 -2.51055 5.15861 6.54983 -0.69760 1.56255 -2.44570 7 3 4 2.38 2013-Sep-20 09:11:35 4171689.29288 872116.72334 4730011.77685 11.80797 48.17155 527.50418 -2.85867 5.76523 2.91352 -1.04571 2.16917 -6.08201 7 3 4 2.38 2013-Sep-20 09:11:35 4171689.57005 872117.26138 4730012.39955 11.80797 48.17155 528.22254 -2.38874 5.89631 3.63189 -0.57578 2.30026 -5.36364 7 3 4 2.38 2013-Sep-20 09:11:35 4171690.50515 872117.27741 4730012.22343 11.80797 48.17154 528.70393 -2.56440 5.09437 4.11327 -0.75144 1.49831 -4.88226 7 3 4 2.38 2013-Sep-20 09:11:35 4171692.20620 872117.64868 4730014.79210 11.80797 48.17155 531.77905 -2.54908 5.51011 7.18840 -0.73612 1.91405 -1.80714 7 3 4 2.38 2013-Sep-20 09:11:35 4171691.46176 872116.40297 4730014.09906 11.80796 48.17155 530.60667 -3.61609 5.78084 6.01602 -1.80313 2.18478 -2.97952 7 3 4 2.38 2013-Sep-20 09:11:35 4171688.67955 872114.80607 4730010.46651 11.80794 48.17155 525.86577 -4.60986 5.63106 1.27511 -2.79690 2.03500 -7.72042 7 3 4 2.38 2013-Sep-20 09:11:35 4171685.65827 872113.70093 4730005.62804 11.80794 48.17154 520.13733 -5.07336 4.77643 -4.45333 -3.26041 1.18037 -13.44886 7 3 4 2.38 2013-Sep-20 09:11:36 4171687.42392 872115.84245 4730007.08054 11.80796 48.17153 522.66450 -3.33847 4.13074 -1.92616 -1.52552 0.53468 -10.92169 7 3 4 2.38 2013-Sep-20 09:11:36 4171691.85291 872116.53905 4730011.65024 11.80796 48.17153 529.05585 -3.56293 3.84167 4.46519 -1.74998 0.24561 -4.53034 7 3 4 2.38 2013-Sep-20 09:11:36 4171702.17441 872123.29327 4730015.12890 11.80802 48.17148 539.30748 0.93624 -2.39654 14.71683 2.74920 -5.99261 5.72129 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.34949 872123.48151 4730013.28926 11.80803 48.17148 536.77109 1.49394 -2.32106 12.18044 3.30690 -5.91712 3.18490 7 3 4 2.38 2013-Sep-20 09:11:36 4171698.36269 872122.64152 4730011.34768 11.80802 48.17148 533.91274 1.07829 -2.03869 9.32208 2.89125 -5.63476 0.32654 7 3 4 2.38 2013-Sep-20 09:11:36 4171696.60207 872121.53814 4730010.82027 11.80801 48.17149 532.21984 0.35854 -0.93803 7.62919 2.17150 -4.53409 -1.36635 7 3 4 2.38 2013-Sep-20 09:11:36 4171697.57430 872122.02479 4730010.79413 11.80801 48.17148 532.90144 0.63594 -1.73879 8.31078 2.44890 -5.33485 -0.68475 7 3 4 2.38 2013-Sep-20 09:11:36 4171696.69283 872121.57935 4730009.73856 11.80801 48.17148 531.47868 0.38030 -1.73190 6.88803 2.19326 -5.32796 -2.10751 7 3 4 2.38 2013-Sep-20 09:11:36 4171703.24765 872124.67207 4730015.28909 11.80803 48.17147 540.31562 2.06625 -3.28275 15.72496 3.87921 -6.87882 6.72943 7 3 4 2.38 2013-Sep-20 09:11:36 4171698.26339 872123.31328 4730011.79445 11.80803 48.17148 534.27249 1.75615 -1.77075 9.68184 3.56911 -5.36681 0.68630 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.81223 872123.77116 4730015.44258 11.80803 48.17149 538.71723 1.68277 -1.26668 14.12657 3.49573 -4.86274 5.13103 7 3 4 2.38 2013-Sep-20 09:11:36 4171699.70693 872123.18767 4730014.44119 11.80802 48.17149 537.16989 1.33781 -1.03936 12.57923 3.15077 -4.63542 3.58370 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.16685 872123.40235 4730013.89245 11.80803 48.17148 537.09052 1.45383 -1.77351 12.49987 3.26679 -5.36957 3.50433 7 3 4 2.38 2013-Sep-20 09:11:36 4171701.92191 872123.96064 4730015.45634 11.80803 48.17148 539.47772 1.64116 -2.09577 14.88707 3.45413 -5.69183 5.89153 7 3 4 2.38 2013-Sep-20 09:11:36 4171703.21904 872122.72662 4730016.09006 11.80801 48.17148 540.62828 0.16782 -2.43107 16.03763 1.98078 -6.02713 7.04209 7 3 4 2.38 2013-Sep-20 09:11:36 4171699.46488 872120.20662 4730011.84254 11.80799 48.17148 534.66868 -1.53063 -2.14131 10.07803 0.28233 -5.73737 1.08249 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.06437 872120.75578 4730013.49475 11.80799 48.17148 536.36610 -1.11577 -1.56043 11.77544 0.69720 -5.15650 2.77991 7 3 4 2.38 2013-Sep-20 09:11:36 4171698.39779 872122.36705 4730012.19598 11.80802 48.17148 534.53029 0.80245 -1.45671 9.93964 2.61541 -5.05277 0.94410 7 3 4 2.38 2013-Sep-20 09:11:36 4171698.10795 872122.13058 4730011.03036 11.80801 48.17148 533.44027 0.63029 -1.98661 8.84961 2.44325 -5.58267 -0.14593 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.57115 872121.69513 4730012.42067 11.80800 48.17147 536.02477 -0.29999 -2.78961 11.43412 1.51297 -6.38568 2.43858 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.93226 872123.28020 4730013.87904 11.80802 48.17148 537.56352 1.17763 -2.32209 12.97286 2.99059 -5.91815 3.97733 7 3 4 2.38 2013-Sep-20 09:11:36 4171700.75112 872123.91081 4730014.83915 11.80803 48.17148 538.24674 1.83197 -1.64583 13.65609 3.64493 -5.24190 4.66055 7 3 4 2.38 2013-Sep-20 09:11:36 4171699.17370 872122.97452 4730014.21297 11.80802 48.17149 536.62265 1.23828 -0.77014 12.03199 3.05124 -4.36620 3.03646 7 3 4 2.38 2013-Sep-20 09:11:36 4171697.49318 872121.43767 4730013.31685 11.80801 48.17150 534.64815 0.07784 0.09232 10.05750 1.89081 -3.50374 1.06196 7 3 4 2.38 2013-Sep-20 09:11:36 4171698.70603 872122.24915 4730016.39227 11.80801 48.17151 537.84226 0.62396 1.13496 13.25161 2.43692 -2.46110 4.25607 7 3 4 2.38 2013-Sep-20 09:11:37 4171699.64980 872124.38108 4730017.70586 11.80804 48.17151 539.72811 2.51766 0.99756 15.13745 4.33062 -2.59851 6.14192 7 3 4 2.38 2013-Sep-20 09:11:37 4171701.49619 872124.71381 4730018.21005 11.80804 48.17150 541.35452 2.46551 -0.06365 16.76386 4.27847 -3.65971 7.76833 7 3 4 2.38 2013-Sep-20 09:11:37 4171698.10948 872121.94558 4730013.16343 11.80801 48.17149 535.00546 0.44889 -0.53696 10.41481 2.26185 -4.13303 1.41927 7 3 4 2.38 2013-Sep-20 09:11:37 4171700.34254 872122.31617 4730013.71245 11.80801 48.17148 536.92285 0.35468 -1.85607 12.33220 2.16765 -5.45213 3.33666 7 3 4 2.38 2013-Sep-20 09:11:37 4171697.29126 872120.77181 4730009.92721 11.80800 48.17148 531.89969 -0.53261 -1.91944 7.30904 1.28036 -5.51550 -1.68650 7 3 4 2.38 2013-Sep-20 09:11:37 4171696.36468 872121.95418 4730012.70064 11.80802 48.17150 533.52280 0.81436 0.42570 8.93214 2.62732 -3.17036 -0.06339 7 3 4 2.38 2013-Sep-20 09:11:37 4171693.52071 872120.35141 4730010.85368 11.80800 48.17151 530.07130 -0.17253 1.51267 5.48065 1.64043 -2.08338 -3.51489 7 3 4 2.38 2013-Sep-20 09:11:37 4171694.21808 872119.87618 4730012.26684 11.80800 48.17152 531.51469 -0.78041 2.01894 6.92404 1.03255 -1.57712 -2.07149 7 3 4 2.38 2013-Sep-20 09:11:37 4171699.64725 872121.47435 4730016.27362 11.80800 48.17150 538.26253 -0.32705 0.48747 13.67188 1.48592 -3.10859 4.67634 7 3 4 2.38 2013-Sep-20 09:11:37 4171698.45869 872121.37156 4730013.69074 11.80800 48.17149 535.54801 -0.18444 -0.35247 10.95735 1.62852 -3.94854 1.96182 7 3 4 2.38 2013-Sep-20 09:11:37 4171701.44532 872124.96146 4730017.51253 11.80804 48.17149 540.83535 2.71833 -0.52948 16.24470 4.53129 -4.12554 7.24916 7 3 4 2.38 2013-Sep-20 09:11:37 4171702.43442 872123.59979 4730019.67027 11.80802 48.17150 542.90302 1.18308 0.39572 18.31237 2.99604 -3.20034 9.31683 7 3 4 2.38 2013-Sep-20 09:11:37 4171702.96263 872122.89897 4730018.84735 11.80801 48.17149 542.53900 0.38899 -0.43148 17.94835 2.20195 -4.02755 8.95281 7 3 4 2.38 2013-Sep-20 09:11:37 4171698.45328 872122.05874 4730015.58370 11.80801 48.17150 537.04878 0.48930 0.80911 12.45813 2.30226 -2.78696 3.46259 7 3 4 2.38 2013-Sep-20 09:11:37 4171694.86074 872120.85417 4730011.98381 11.80801 48.17151 531.85678 0.04538 1.21232 7.26613 1.85834 -2.38374 -1.72940 7 3 4 2.38 2013-Sep-20 09:11:37 4171698.16079 872123.11351 4730014.34445 11.80803 48.17150 536.07837 1.58161 0.03515 11.48772 3.39457 -3.56091 2.49218 7 3 4 2.38 2013-Sep-20 09:11:37 4171697.67216 872122.75126 4730012.57389 11.80802 48.17149 534.39064 1.32701 -0.73402 9.79999 3.13997 -4.33008 0.80445 7 3 4 2.38 2013-Sep-20 09:11:37 4171694.36918 872121.78246 4730010.44551 11.80802 48.17150 530.51632 1.05461 0.40340 5.92567 2.86757 -3.19266 -3.06987 7 3 4 2.38 2013-Sep-20 09:11:37 4171697.53091 872123.01992 4730013.18609 11.80803 48.17150 534.79128 1.61889 -0.26367 10.20062 3.43185 -3.85973 1.20509 7 3 4 2.38 2013-Sep-20 09:11:37 4171692.58084 872120.04686 4730007.38116 11.80800 48.17150 526.82867 -0.27831 -0.07120 2.23801 1.53465 -3.66726 -6.75752 7 3 4 2.38 2013-Sep-20 09:11:37 4171697.22903 872123.06997 4730013.30691 11.80803 48.17150 534.69107 1.72966 0.02946 10.10042 3.54262 -3.56661 1.10488 7 3 4 2.38 2013-Sep-20 09:11:37 4171702.00159 872124.81621 4730018.74878 11.80804 48.17150 542.09984 2.46232 -0.08861 17.50919 4.27528 -3.68467 8.51365 7 3 4 2.38 2013-Sep-20 09:11:37 4171699.03849 872122.26550 4730014.44172 11.80801 48.17149 536.60808 0.57194 -0.41085 12.01742 2.38490 -4.00691 3.02189 7 3 4 2.38 2013-Sep-20 09:11:37 4171698.33644 872122.90021 4730015.37846 11.80802 48.17150 536.93441 1.33687 0.62915 12.34376 3.14983 -2.96691 3.34822 7 3 4 2.38 2013-Sep-20 09:11:37 4171696.92941 872120.61157 4730013.48427 11.80800 48.17150 534.29215 -0.61541 0.74113 9.70149 1.19755 -2.85493 0.70596 7 3 4 2.38 2013-Sep-20 09:11:38 4171694.83003 872120.11307 4730012.00876 11.80800 48.17151 531.75419 -0.67375 1.36436 7.16353 1.13921 -2.23170 -1.83200 7 3 4 2.38 2013-Sep-20 09:11:38 4171694.29561 872119.66756 4730012.90690 11.80799 48.17152 532.01377 -1.00048 2.42105 7.42311 0.81248 -1.17501 -1.57242 7 3 4 2.38 2013-Sep-20 09:11:38 4171695.78459 872120.74693 4730014.06901 11.80800 48.17152 533.99900 -0.24865 1.94546 9.40834 1.56431 -1.65060 0.41281 7 3 4 2.38 2013-Sep-20 09:11:38 4171695.17829 872121.34806 4730014.52255 11.80801 48.17152 534.02320 0.46383 2.59849 9.43255 2.27679 -0.99757 0.43701 7 3 4 2.38 2013-Sep-20 09:11:38 4171695.80358 872122.35036 4730013.77441 11.80802 48.17151 534.01070 1.31697 1.49064 9.42004 3.12993 -2.10542 0.42451 7 3 4 2.38 2013-Sep-20 09:11:38 4171699.41036 872121.69219 4730014.61764 11.80800 48.17149 536.90368 -0.06534 -0.47734 12.31303 1.74763 -4.07340 3.31749 7 3 4 2.38 2013-Sep-20 09:11:38 4171700.28814 872122.43242 4730014.60054 11.80801 48.17149 537.56496 0.47960 -1.24185 12.97430 2.29256 -4.83791 3.97877 7 3 4 2.38 2013-Sep-20 09:11:38 4171699.79749 872122.58613 4730014.21584 11.80802 48.17149 536.97899 0.73046 -1.16398 12.38834 2.54343 -4.76004 3.39280 7 3 4 2.38 2013-Sep-20 09:11:38 4171699.66989 872122.71737 4730015.47941 11.80802 48.17150 537.85515 0.88504 -0.24824 13.26449 2.69800 -3.84431 4.26896 7 3 4 2.38 2013-Sep-20 09:11:38 4171697.21377 872123.15776 4730014.82130 11.80803 48.17151 535.82153 1.81871 1.03715 11.23087 3.63167 -2.55892 2.23534 7 3 4 2.38 2013-Sep-20 09:11:38 4171699.69550 872122.49414 4730015.72594 11.80801 48.17150 538.02510 0.66129 -0.06847 13.43445 2.47426 -3.66453 4.43891 7 3 4 2.38 2013-Sep-20 09:11:38 4171697.25407 872120.78000 4730013.58386 11.80800 48.17150 534.60127 -0.51698 0.54507 10.01062 1.29598 -3.05099 1.01508 7 3 4 2.38 2013-Sep-20 09:11:38 4171698.16324 872120.67313 4730016.30488 11.80799 48.17151 537.20774 -0.80763 1.71289 12.61709 1.00533 -1.88317 3.62155 7 3 4 2.38 2013-Sep-20 09:11:38 4171697.97309 872120.26700 4730015.56609 11.80799 48.17151 536.47768 -1.16626 1.42081 11.88703 0.64670 -2.17525 2.89149 7 3 4 2.38 2013-Sep-20 09:11:38 4171698.82470 872120.58311 4730015.21194 11.80799 48.17150 536.81285 -1.03111 0.51528 12.22219 0.78185 -3.08078 3.22666 7 3 4 2.38 2013-Sep-20 09:11:38 4171694.43013 872119.04176 4730011.61351 11.80798 48.17151 531.05241 -1.64056 1.55579 6.46176 0.17240 -2.04027 -2.53378 7 3 4 2.38 2013-Sep-20 09:11:38 4171695.84638 872119.56749 4730012.40505 11.80799 48.17151 532.63849 -1.41578 0.97053 8.04783 0.39718 -2.62553 -0.94770 7 3 4 2.38 2013-Sep-20 09:11:38 4171697.41641 872119.98976 4730016.13799 11.80799 48.17152 536.50260 -1.32372 2.25051 11.91194 0.48924 -1.34555 2.91641 7 3 4 2.38 2013-Sep-20 09:11:38 4171699.76849 872120.99660 4730019.67286 11.80799 48.17152 540.80940 -0.81950 2.73886 16.21875 0.99346 -0.85720 7.22322 7 3 4 2.38 2013-Sep-20 09:11:38 4171694.59151 872118.85066 4730013.62077 11.80798 48.17152 532.62738 -1.86064 2.80588 8.03673 -0.04768 -0.79018 -0.95880 7 3 4 2.38 2013-Sep-20 09:11:38 4171694.13454 872119.45492 4730012.78140 11.80799 48.17152 531.78609 -1.17566 2.48726 7.19543 0.63730 -1.10880 -1.80010 7 3 4 2.38 2013-Sep-20 09:11:38 4171696.24993 872121.46734 4730014.67759 11.80801 48.17151 534.85456 0.36130 1.90207 10.26391 2.17426 -1.69400 1.26837 7 3 4 2.38 2013-Sep-20 09:11:38 4171699.76420 872121.32297 4730017.51433 11.80800 48.17151 539.24273 -0.49915 1.25269 14.65208 1.31381 -2.34337 5.65654 7 3 4 2.38 2013-Sep-20 09:11:38 4171698.01040 872122.58019 4730017.73545 11.80802 48.17152 538.43420 1.09035 2.48763 13.84354 2.90331 -1.10843 4.84801 7 3 4 2.38 2013-Sep-20 09:11:38 4171697.67112 872121.11745 4730014.13566 11.80800 48.17150 535.33073 -0.27201 0.55742 10.74008 1.54095 -3.03864 1.74454 7 3 4 2.38 2013-Sep-20 09:11:39 4171693.79715 872119.40079 4730011.39850 11.80799 48.17151 530.52799 -1.15961 1.81934 5.93734 0.65335 -1.77672 -3.05820 7 3 4 2.38 2013-Sep-20 09:11:39 4171692.08147 872118.93678 4730010.56863 11.80799 48.17152 528.72632 -1.26271 2.58803 4.13566 0.55024 -1.00803 -4.85987 7 3 4 2.38 2013-Sep-20 09:11:39 4171690.16639 872119.31617 4730010.17264 11.80800 48.17153 527.23288 -0.49946 3.66290 2.64223 1.31350 0.06685 -6.35331 7 3 4 2.38 2013-Sep-20 09:11:39 4171692.21881 872119.84399 4730011.10044 11.80800 48.17152 529.33606 -0.40281 2.70419 4.74540 1.41015 -0.89187 -4.25013 7 3 4 2.38 2013-Sep-20 09:11:39 4171691.87990 872117.85327 4730010.63123 11.80797 48.17152 528.49351 -2.28204 2.94201 3.90285 -0.46909 -0.65405 -5.09268 7 3 4 2.38 2013-Sep-20 09:11:39 4171696.55132 872119.18229 4730014.96199 11.80798 48.17152 534.95139 -1.93707 2.22034 10.36073 -0.12411 -1.37572 1.36520 7 3 4 2.38 2013-Sep-20 09:11:39 4171695.05237 872118.76362 4730013.87209 11.80798 48.17152 533.10361 -2.04015 2.65062 8.51296 -0.22719 -0.94545 -0.48258 7 3 4 2.38 2013-Sep-20 09:11:39 4171695.87467 872119.95571 4730014.95823 11.80799 48.17152 534.61243 -1.04156 2.59343 10.02177 0.77140 -1.00263 1.02624 7 3 4 2.38 2013-Sep-20 09:11:39 4171694.16429 872117.99137 4730012.43457 11.80797 48.17152 531.34734 -2.61433 2.45743 6.75668 -0.80137 -1.13863 -2.23885 7 3 4 2.38 2013-Sep-20 09:11:39 4171695.76512 872119.78539 4730014.68413 11.80799 48.17152 534.31342 -1.18585 2.51651 9.72277 0.62711 -1.07955 0.72724 7 3 4 2.38 2013-Sep-20 09:11:39 4171696.20366 872119.20794 4730013.69935 11.80798 48.17151 533.78709 -1.84083 1.62794 9.19644 -0.02787 -1.96813 0.20090 7 3 4 2.38 2013-Sep-20 09:11:39 4171698.78340 872120.28432 4730018.09366 11.80799 48.17152 538.89241 -1.31512 2.51279 14.30176 0.49784 -1.08328 5.30622 7 3 4 2.38 2013-Sep-20 09:11:39 4171693.86027 872118.25440 4730012.53331 11.80797 48.17152 531.25835 -2.29466 2.70491 6.66769 -0.48170 -0.89115 -2.32784 7 3 4 2.38 2013-Sep-20 09:11:39 4171694.06245 872118.48650 4730013.59975 11.80798 48.17153 532.21666 -2.10883 3.23327 7.62600 -0.29587 -0.36279 -1.36953 7 3 4 2.38 2013-Sep-20 09:11:39 4171695.31115 872119.04283 4730015.42568 11.80798 48.17153 534.46830 -1.81980 3.45539 9.87764 -0.00684 -0.14067 0.88211 7 3 4 2.38 2013-Sep-20 09:11:39 4171693.04180 872118.02664 4730012.21014 11.80797 48.17153 530.45217 -2.35010 3.12109 5.86151 -0.53714 -0.47497 -3.13402 7 3 4 2.38 2013-Sep-20 09:11:39 4171692.17508 872118.54262 4730012.68151 11.80798 48.17153 530.30803 -1.66769 3.98894 5.71738 0.14527 0.39288 -3.27816 7 3 4 2.38 2013-Sep-20 09:11:39 4171694.61132 872119.91889 4730015.43289 11.80799 48.17153 534.13639 -0.81908 3.83706 9.54573 0.99388 0.24100 0.55020 7 3 4 2.38 2013-Sep-20 09:11:39 4171696.15203 872119.93442 4730016.20250 11.80799 48.17153 535.71774 -1.11915 3.22418 11.12709 0.69381 -0.37188 2.13155 7 3 4 2.38 2013-Sep-20 09:11:39 4171695.44371 872117.84380 4730014.88587 11.80797 48.17153 533.98897 -3.02059 3.18153 9.39831 -1.20763 -0.41453 0.40278 7 3 4 2.38 2013-Sep-20 09:11:39 4171696.30208 872118.95604 4730014.86039 11.80798 48.17152 534.68210 -2.10753 2.36886 10.09145 -0.29457 -1.22720 1.09592 7 3 4 2.38 2013-Sep-20 09:11:39 4171698.60622 872120.97748 4730017.56997 11.80800 48.17152 538.48111 -0.60038 2.18708 13.89046 1.21259 -1.40898 4.89493 7 3 4 2.38 2013-Sep-20 09:11:39 4171697.45801 872118.92845 4730016.51467 11.80797 48.17152 536.66559 -2.37108 2.63321 12.07494 -0.55812 -0.96286 3.07941 7 3 4 2.38 2013-Sep-20 09:11:39 4171695.72625 872119.64693 4730013.85104 11.80799 48.17152 533.64838 -1.31343 2.01038 9.05773 0.49953 -1.58568 0.06219 7 3 4 2.38 2013-Sep-20 09:11:39 4171696.32005 872120.51919 4730013.86689 11.80800 48.17151 534.16686 -0.58114 1.45484 9.57620 1.23182 -2.14122 0.58067 7 3 4 2.38 2013-Sep-20 09:11:40 4171695.33687 872118.75088 4730013.43363 11.80798 48.17152 532.96088 -2.11084 2.15264 8.37023 -0.29788 -1.44342 -0.62531 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.68260 872118.20552 4730014.53494 11.80797 48.17153 533.27999 -2.51078 3.44747 8.68934 -0.69782 -0.14859 -0.30620 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.06620 872117.71535 4730014.07924 11.80797 48.17153 532.47115 -2.86444 3.66789 7.88050 -1.05148 0.07183 -1.11503 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.39674 872117.51677 4730014.24135 11.80796 48.17153 532.78062 -3.12645 3.56520 8.18997 -1.31350 -0.03086 -0.80557 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.80846 872118.27311 4730015.16754 11.80797 48.17153 533.84276 -2.47036 3.76725 9.25210 -0.65740 0.17119 0.25657 7 3 4 2.38 2013-Sep-20 09:11:40 4171693.79398 872118.40667 4730015.70730 11.80798 48.17154 533.60094 -2.13204 4.84680 9.01028 -0.31908 1.25073 0.01475 7 3 4 2.38 2013-Sep-20 09:11:40 4171691.52330 872117.94043 4730013.40438 11.80798 48.17154 530.33902 -2.12376 5.03824 5.74836 -0.31080 1.44218 -3.24717 7 3 4 2.38 2013-Sep-20 09:11:40 4171687.46651 872116.76168 4730010.21652 11.80797 48.17155 525.15451 -2.44741 6.05091 0.56385 -0.63445 2.45486 -8.43168 7 3 4 2.38 2013-Sep-20 09:11:40 4171688.87934 872117.39717 4730010.33489 11.80798 48.17154 526.25172 -2.11448 5.00247 1.66106 -0.30152 1.40641 -7.33447 7 3 4 2.38 2013-Sep-20 09:11:40 4171691.57456 872117.85122 4730012.30358 11.80798 48.17154 529.54006 -2.22157 4.28033 4.94940 -0.40861 0.68427 -4.04613 7 3 4 2.38 2013-Sep-20 09:11:40 4171692.99793 872119.69936 4730013.52572 11.80800 48.17153 531.63210 -0.70381 3.77540 7.04145 1.10915 0.17934 -1.95409 7 3 4 2.38 2013-Sep-20 09:11:40 4171695.73595 872119.86307 4730015.18328 11.80799 48.17152 534.67692 -1.10385 2.85882 10.08627 0.70911 -0.73724 1.09073 7 3 4 2.38 2013-Sep-20 09:11:40 4171697.73933 872120.51530 4730018.24373 11.80799 48.17153 538.35420 -0.87538 3.33917 13.76355 0.93758 -0.25689 4.76801 7 3 4 2.38 2013-Sep-20 09:11:40 4171698.66937 872121.08516 4730017.61373 11.80800 48.17152 538.56965 -0.50790 2.15379 13.97899 1.30507 -1.44228 4.98346 7 3 4 2.38 2013-Sep-20 09:11:40 4171699.90232 872120.94129 4730018.61923 11.80799 48.17152 540.10411 -0.90102 1.94701 15.51346 0.91194 -1.64906 6.51792 7 3 4 2.38 2013-Sep-20 09:11:40 4171695.14191 872119.32307 4730013.24628 11.80799 48.17152 532.77210 -1.51086 2.08265 8.18145 0.30210 -1.51341 -0.81409 7 3 4 2.38 2013-Sep-20 09:11:40 4171693.83963 872117.89918 4730011.28914 11.80797 48.17152 530.26931 -2.63813 1.94439 5.67866 -0.82517 -1.65167 -3.31688 7 3 4 2.38 2013-Sep-20 09:11:40 4171693.45120 872117.75738 4730012.00099 11.80797 48.17152 530.52683 -2.69744 2.72405 5.93617 -0.88449 -0.87201 -3.05936 7 3 4 2.38 2013-Sep-20 09:11:40 4171696.17673 872119.11094 4730016.47948 11.80798 48.17153 535.82787 -1.93026 3.51645 11.23721 -0.11730 -0.07961 2.24168 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.28757 872118.42380 4730013.85877 11.80798 48.17153 532.54806 -2.21628 3.25137 7.95741 -0.40332 -0.34469 -1.03812 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.33180 872119.00660 4730017.03950 11.80798 48.17154 535.02657 -1.65486 5.25149 10.43592 0.15810 1.65543 1.44039 7 3 4 2.38 2013-Sep-20 09:11:40 4171696.78354 872119.58199 4730017.33727 11.80798 48.17153 536.92745 -1.59335 3.57409 12.33679 0.21961 -0.02197 3.34126 7 3 4 2.38 2013-Sep-20 09:11:40 4171695.68705 872119.92995 4730014.88622 11.80799 48.17152 534.43277 -1.02838 2.68618 9.84212 0.78458 -0.90989 0.84658 7 3 4 2.38 2013-Sep-20 09:11:40 4171694.22509 872117.83827 4730013.24941 11.80797 48.17152 531.97331 -2.77663 2.97985 7.38266 -0.96367 -0.61622 -1.61287 7 3 4 2.38 2013-Sep-20 09:11:40 4171689.96012 872116.83412 4730008.65859 11.80797 48.17153 525.63132 -2.88678 3.18209 1.04066 -1.07382 -0.41396 -7.95487 7 3 4 2.38 2013-Sep-20 09:11:41 4171691.38027 872116.65118 4730010.70121 11.80796 48.17153 528.05545 -3.35645 3.53639 3.46480 -1.54350 -0.05967 -5.53073 7 3 4 2.38 2013-Sep-20 09:11:41 4171694.48496 872118.35256 4730014.77576 11.80797 48.17153 533.35049 -2.32640 3.72981 8.75983 -0.51344 0.13375 -0.23570 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.15594 872119.22320 4730014.74376 11.80798 48.17153 533.88346 -1.61149 3.08631 9.29281 0.20147 -0.50975 0.29728 7 3 4 2.38 2013-Sep-20 09:11:41 4171694.36281 872118.11227 4730012.24363 11.80797 48.17152 531.35115 -2.53661 2.16685 6.76050 -0.72365 -1.42921 -2.23504 7 3 4 2.38 2013-Sep-20 09:11:41 4171697.55286 872117.95070 4730015.08511 11.80796 48.17151 535.52886 -3.34756 1.75974 10.93820 -1.53459 -1.83632 1.94267 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.39658 872118.61666 4730013.68242 11.80798 48.17152 533.16693 -2.25444 2.29548 8.57627 -0.44148 -1.30059 -0.41926 7 3 4 2.38 2013-Sep-20 09:11:41 4171696.61744 872118.19582 4730016.00506 11.80797 48.17152 535.63716 -2.91620 3.01815 11.04651 -1.10324 -0.57791 2.05097 7 3 4 2.38 2013-Sep-20 09:11:41 4171697.99483 872117.76112 4730017.54330 11.80796 48.17153 537.62320 -3.62356 3.10565 13.03255 -1.81060 -0.49041 4.03701 7 3 4 2.38 2013-Sep-20 09:11:41 4171697.22129 872118.55258 4730015.78005 11.80797 48.17152 535.91237 -2.69055 2.37326 11.32171 -0.87759 -1.22280 2.32618 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.01079 872117.79503 4730017.05893 11.80797 48.17154 535.31895 -2.97973 4.95395 10.72829 -1.16677 1.35788 1.73276 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.93041 872119.29437 4730016.21431 11.80798 48.17153 535.49452 -1.70031 3.49130 10.90386 0.11265 -0.10476 1.90833 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.56906 872119.77451 4730017.03642 11.80799 48.17154 535.93675 -1.15638 4.22991 11.34609 0.65658 0.63385 2.35056 7 3 4 2.38 2013-Sep-20 09:11:41 4171693.12963 872118.09894 4730014.50123 11.80797 48.17154 532.22656 -2.29731 4.57394 7.63590 -0.48435 0.97788 -1.35963 7 3 4 2.38 2013-Sep-20 09:11:41 4171696.52198 872120.82464 4730016.38005 11.80800 48.17152 536.21302 -0.32347 2.93702 11.62237 1.48949 -0.65904 2.62684 7 3 4 2.38 2013-Sep-20 09:11:41 4171691.34314 872119.34149 4730010.42458 11.80800 48.17152 528.19223 -0.71548 2.96876 3.60158 1.09748 -0.62729 -5.39395 7 3 4 2.38 2013-Sep-20 09:11:41 4171690.38503 872117.03700 4730009.77749 11.80797 48.17153 526.77012 -2.77514 3.58744 2.17947 -0.96218 -0.00862 -6.81607 7 3 4 2.38 2013-Sep-20 09:11:41 4171689.38901 872116.05489 4730009.12805 11.80796 48.17153 525.50198 -3.53265 4.03055 0.91132 -1.71970 0.43450 -8.08421 7 3 4 2.38 2013-Sep-20 09:11:41 4171692.10762 872115.88953 4730012.13024 11.80795 48.17153 529.49116 -4.25083 4.07504 4.90050 -2.43787 0.47898 -4.09503 7 3 4 2.38 2013-Sep-20 09:11:41 4171693.73028 872116.71035 4730012.32584 11.80795 48.17152 530.80818 -3.77943 2.89680 6.21752 -1.96647 -0.69926 -2.77801 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.88788 872117.94738 4730015.89837 11.80797 48.17153 535.04751 -3.01009 3.51701 10.45686 -1.19713 -0.07906 1.46132 7 3 4 2.38 2013-Sep-20 09:11:41 4171696.59137 872116.51166 4730015.39974 11.80794 48.17152 534.93926 -4.55938 2.89029 10.34860 -2.74642 -0.70578 1.35307 7 3 4 2.38 2013-Sep-20 09:11:41 4171694.75802 872117.46824 4730015.97118 11.80796 48.17154 534.29881 -3.24789 4.46272 9.70816 -1.43493 0.86665 0.71262 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.06116 872118.25049 4730016.81629 11.80797 48.17154 535.23318 -2.54422 4.68594 10.64252 -0.73126 1.08988 1.64699 7 3 4 2.38 2013-Sep-20 09:11:41 4171695.29744 872117.66510 4730016.27334 11.80796 48.17154 534.90296 -3.16558 4.24077 10.31230 -1.35262 0.64471 1.31677 7 3 4 2.38 2013-Sep-20 09:11:41 4171692.03997 872115.19745 4730012.67715 11.80794 48.17154 529.76008 -4.91442 4.59465 5.16942 -3.10146 0.99859 -3.82611 7 3 4 2.38 2013-Sep-20 09:11:42 4171691.69622 872114.23758 4730012.73861 11.80793 48.17154 529.45048 -5.78363 5.03273 4.85982 -3.97067 1.43667 -4.13571 7 3 4 2.38 2013-Sep-20 09:11:42 4171695.00838 872115.54893 4730015.26337 11.80794 48.17153 533.67290 -5.17781 4.10073 9.08224 -3.36485 0.50467 0.08671 7 3 4 2.38 2013-Sep-20 09:11:42 4171699.50719 872122.00144 4730017.06109 11.80801 48.17151 538.82981 0.21755 1.03442 14.23916 2.03051 -2.56164 5.24362 7 3 4 2.38 2013-Sep-20 09:11:42 4171700.05510 872123.05700 4730014.20350 11.80802 48.17148 537.20222 1.13865 -1.43190 12.61157 2.95161 -5.02796 3.61603 7 3 4 2.38 2013-Sep-20 09:11:42 4171702.86397 872123.27704 4730016.61287 11.80802 48.17148 540.86118 0.77925 -1.90735 16.27053 2.59221 -5.50342 7.27499 7 3 4 2.38 2013-Sep-20 09:11:42 4171702.46330 872123.85432 4730016.19581 11.80802 48.17148 540.36764 1.42631 -1.98128 15.77699 3.23927 -5.57735 6.78145 7 3 4 2.38 2013-Sep-20 09:11:42 4171702.92321 872124.25454 4730017.67412 11.80803 48.17149 541.82404 1.72394 -1.39186 17.23339 3.53691 -4.98793 8.23785 7 3 4 2.38 2013-Sep-20 09:11:42 4171698.55279 872121.74361 4730012.80693 11.80801 48.17149 535.00164 0.16048 -1.06726 10.41099 1.97344 -4.66332 1.41545 7 3 4 2.38 2013-Sep-20 09:11:42 4171698.56858 872122.85636 4730014.22743 11.80802 48.17149 536.22229 1.24645 -0.30111 11.63163 3.05941 -3.89718 2.63610 7 3 4 2.38 2013-Sep-20 09:11:42 4171698.63660 872122.01350 4730013.73672 11.80801 48.17149 535.78601 0.40750 -0.54946 11.19536 2.22047 -4.14552 2.19982 7 3 4 2.38 2013-Sep-20 09:11:42 4171695.47402 872120.96570 4730010.91597 11.80801 48.17150 531.47665 0.02905 0.03585 6.88600 1.84201 -3.56021 -2.10954 7 3 4 2.38 2013-Sep-20 09:11:42 4171699.36836 872123.58556 4730014.99974 11.80803 48.17149 537.41937 1.79656 -0.48059 12.82872 3.60952 -4.07665 3.83318 7 3 4 2.38 2013-Sep-20 09:11:42 4171697.58076 872122.67576 4730013.87027 11.80802 48.17150 535.28666 1.27181 0.20873 10.69601 3.08478 -3.38733 1.70047 7 3 4 2.38 2013-Sep-20 09:11:42 4171696.03990 872120.80185 4730012.23244 11.80800 48.17150 532.80465 -0.24713 0.52606 8.21399 1.56583 -3.07000 -0.78154 7 3 4 2.38 2013-Sep-20 09:11:42 4171694.05788 872120.73886 4730009.97158 11.80801 48.17150 529.81754 0.09680 0.47353 5.22689 1.90976 -3.12253 -3.76865 7 3 4 2.38 2013-Sep-20 09:11:42 4171698.53561 872123.88715 4730014.99414 11.80804 48.17150 536.91274 2.26217 0.07708 12.32209 4.07513 -3.51898 3.32655 7 3 4 2.38 2013-Sep-20 09:11:42 4171695.42063 872120.97375 4730009.95379 11.80801 48.17149 530.72593 0.04785 -0.56811 6.13528 1.86081 -4.16417 -2.86026 7 3 4 2.38 2013-Sep-20 09:11:42 4171698.07027 872120.71496 4730013.70568 11.80800 48.17150 535.21598 -0.74767 0.04091 10.62532 1.06529 -3.55515 1.62979 7 3 4 2.38 2013-Sep-20 09:11:42 4171701.26008 872121.99655 4730019.84528 11.80800 48.17151 542.04805 -0.14594 1.61344 17.45739 1.66703 -1.98263 8.46186 7 3 4 2.38 2013-Sep-20 09:11:42 4171699.49519 872120.46778 4730015.50319 11.80799 48.17150 537.45182 -1.28120 0.23806 12.86117 0.53177 -3.35801 3.86564 7 3 4 2.38 2013-Sep-20 09:11:42 4171697.62291 872119.52208 4730012.74119 11.80798 48.17150 534.04247 -1.82376 -0.09413 9.45181 -0.01080 -3.69019 0.45628 7 3 4 2.38 2013-Sep-20 09:11:42 4171694.62236 872117.78011 4730012.59924 11.80797 48.17152 531.74024 -2.91485 2.26535 7.14958 -1.10190 -1.33071 -1.84595 7 3 4 2.38 2013-Sep-20 09:11:42 4171693.65536 872120.88448 4730012.01297 11.80801 48.17152 531.09578 0.32171 2.10632 6.50513 2.13467 -1.48974 -2.49041 7 3 4 2.38 2013-Sep-20 09:11:42 4171698.21532 872121.54179 4730013.42874 11.80801 48.17149 535.21714 0.03199 -0.37566 10.62649 1.84495 -3.97172 1.63095 7 3 4 2.38 2013-Sep-20 09:11:42 4171697.70221 872121.88561 4730014.48438 11.80801 48.17150 535.71571 0.47353 0.65018 11.12506 2.28649 -2.94588 2.12952 7 3 4 2.38 2013-Sep-20 09:11:43 4171698.97632 872123.21397 4730017.21291 11.80803 48.17151 538.76187 1.51305 1.33799 14.17122 3.32602 -2.25808 5.17568 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.85572 872122.71205 4730013.22186 11.80803 48.17150 534.33515 1.45570 0.29960 9.74450 3.26866 -3.29646 0.74896 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.42934 872121.11511 4730013.79256 11.80801 48.17151 534.26414 -0.02019 1.23469 9.67348 1.79277 -2.36137 0.67795 7 3 4 2.38 2013-Sep-20 09:11:43 4171698.56946 872121.85359 4730017.01072 11.80801 48.17151 538.15996 0.26472 1.70734 13.56931 2.07768 -1.88873 4.57377 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.55399 872121.21738 4730013.93058 11.80801 48.17151 534.46232 0.05440 1.22023 9.87166 1.86736 -2.37584 0.87613 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.31907 872121.98156 4730013.79148 11.80802 48.17151 534.30960 0.85049 1.18228 9.71894 2.66345 -2.41378 0.72341 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.80005 872123.09704 4730014.63144 11.80803 48.17151 535.40169 1.84394 1.22155 10.81104 3.65690 -2.37451 1.81550 7 3 4 2.38 2013-Sep-20 09:11:43 4171693.03799 872122.24869 4730010.30908 11.80803 48.17151 529.60930 1.78338 1.21226 5.01864 3.59634 -2.38380 -3.97689 7 3 4 2.38 2013-Sep-20 09:11:43 4171693.81796 872120.83701 4730010.44067 11.80801 48.17151 530.02385 0.24197 0.94639 5.43320 2.05493 -2.64967 -3.56233 7 3 4 2.38 2013-Sep-20 09:11:43 4171694.21596 872120.72049 4730010.56374 11.80801 48.17150 530.35948 0.04647 0.75594 5.76882 1.85943 -2.84012 -3.22671 7 3 4 2.38 2013-Sep-20 09:11:43 4171692.16679 872119.68621 4730009.92033 11.80800 48.17152 528.40121 -0.54660 1.97917 3.81056 1.26636 -1.61689 -5.18498 7 3 4 2.38 2013-Sep-20 09:11:43 4171692.27281 872120.21499 4730009.08908 11.80800 48.17151 527.92318 -0.05070 1.26685 3.33253 1.76226 -2.32921 -5.66301 7 3 4 2.38 2013-Sep-20 09:11:43 4171695.36635 872121.38607 4730012.84612 11.80801 48.17151 532.90197 0.46255 1.33751 8.31132 2.27551 -2.25855 -0.68422 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.26085 872123.52719 4730014.68452 11.80804 48.17151 535.14796 2.37532 1.58464 10.55731 4.18828 -2.01142 1.56177 7 3 4 2.38 2013-Sep-20 09:11:43 4171697.76869 872122.52374 4730015.07427 11.80802 48.17151 536.28575 1.08456 0.89779 11.69510 2.89752 -2.69828 2.69956 7 3 4 2.38 2013-Sep-20 09:11:43 4171700.38135 872122.61149 4730017.36812 11.80801 48.17150 539.71249 0.63581 0.50857 15.12184 2.44878 -3.08749 6.12630 7 3 4 2.38 2013-Sep-20 09:11:43 4171698.41908 872121.91985 4730015.78451 11.80801 48.17151 537.15713 0.36035 0.98915 12.56648 2.17331 -2.60691 3.57094 7 3 4 2.38 2013-Sep-20 09:11:43 4171697.57350 872121.72657 4730015.50262 11.80801 48.17151 536.36872 0.34419 1.44738 11.77806 2.15715 -2.14869 2.78253 7 3 4 2.38 2013-Sep-20 09:11:43 4171697.19139 872121.37009 4730014.50789 11.80801 48.17151 535.32942 0.07345 1.11704 10.73876 1.88641 -2.47902 1.74323 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.55256 872120.62970 4730012.92228 11.80800 48.17150 533.62984 -0.52055 0.63844 9.03919 1.29241 -2.95762 0.04366 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.00737 872121.68610 4730013.47920 11.80801 48.17151 533.83310 0.62506 1.24642 9.24245 2.43802 -2.34964 0.24691 7 3 4 2.38 2013-Sep-20 09:11:43 4171698.02769 872122.71453 4730016.32578 11.80802 48.17151 537.41342 1.21831 1.51442 12.82276 3.03127 -2.08164 3.82723 7 3 4 2.38 2013-Sep-20 09:11:43 4171695.51216 872121.87054 4730013.65028 11.80802 48.17151 533.66248 0.90693 1.69358 9.07183 2.71989 -1.90248 0.07630 7 3 4 2.38 2013-Sep-20 09:11:43 4171694.11996 872121.87562 4730013.28058 11.80802 48.17152 532.47889 1.19679 2.46169 7.88823 3.00975 -1.13437 -1.10730 7 3 4 2.38 2013-Sep-20 09:11:43 4171696.32565 872122.41884 4730016.65483 11.80802 48.17152 536.50717 1.27716 3.02038 11.91652 3.09012 -0.57568 2.92098 7 3 4 2.38 2013-Sep-20 09:11:44 4171701.72617 872123.74264 4730020.76439 11.80803 48.17151 543.27546 1.46783 1.62019 18.68481 3.28079 -1.97587 9.68927 7 3 4 2.38 2013-Sep-20 09:11:44 4171699.69382 872123.25741 4730017.85349 11.80802 48.17151 539.71350 1.40876 1.23524 15.12284 3.22172 -2.36082 6.12731 7 3 4 2.38 2013-Sep-20 09:11:44 4171699.96868 872123.80145 4730018.80916 11.80803 48.17151 540.67928 1.88503 1.58915 16.08862 3.69800 -2.00692 7.09309 7 3 4 2.38 2013-Sep-20 09:11:44 4171698.46443 872122.88125 4730017.60887 11.80802 48.17152 538.67736 1.29212 2.02615 14.08670 3.10509 -1.56992 5.09117 7 3 4 2.38 2013-Sep-20 09:11:44 4171699.82504 872121.57159 4730018.33994 11.80800 48.17151 539.93157 -0.26825 1.72100 15.34092 1.54471 -1.87506 6.34538 7 3 4 2.38 2013-Sep-20 09:11:44 4171700.84983 872122.18664 4730018.04104 11.80801 48.17150 540.46176 0.12408 0.68043 15.87110 1.93704 -2.91564 6.87557 7 3 4 2.38 2013-Sep-20 09:11:44 4171700.02603 872122.20930 4730017.32739 11.80801 48.17150 539.39531 0.31484 0.80189 14.80465 2.12780 -2.79417 5.80912 7 3 4 2.38 2013-Sep-20 09:11:44 4171700.88321 872123.24985 4730018.35492 11.80802 48.17150 540.86252 1.15796 0.70329 16.27187 2.97093 -2.89277 7.27633 7 3 4 2.38 2013-Sep-20 09:11:44 4171699.83229 872121.74728 4730019.16219 11.80800 48.17152 540.57298 -0.09775 2.23729 15.98232 1.71521 -1.35877 6.98679 7 3 4 2.38 2013-Sep-20 09:11:44 4171700.22968 872121.74100 4730019.46993 11.80800 48.17152 541.06084 -0.18523 2.15363 16.47019 1.62774 -1.44243 7.47465 7 3 4 2.38 2013-Sep-20 09:11:44 4171697.28353 872121.38206 4730016.80158 11.80801 48.17152 537.10033 0.06631 2.57768 12.50967 1.87927 -1.01838 3.51414 7 3 4 2.38 2013-Sep-20 09:11:44 4171696.66765 872122.03823 4730016.49416 11.80802 48.17152 536.55877 0.83462 2.72182 11.96811 2.64758 -0.87424 2.97258 7 3 4 2.38 2013-Sep-20 09:11:44 4171693.19642 872120.51544 4730014.10717 11.80801 48.17153 532.30631 0.05439 3.89396 7.71565 1.86734 0.29790 -1.27988 7 3 4 2.38 2013-Sep-20 09:11:44 4171692.61581 872119.70169 4730012.42552 11.80800 48.17153 530.56317 -0.62333 3.32002 5.97252 1.18963 -0.27604 -3.02302 7 3 4 2.38 2013-Sep-20 09:11:44 4171697.69682 872121.49580 4730017.11493 11.80801 48.17152 537.61914 0.09307 2.46787 13.02848 1.90603 -1.12819 4.03295 7 3 4 2.38 2013-Sep-20 09:11:44 4171698.44362 872120.94650 4730015.41258 11.80800 48.17151 536.76318 -0.59743 0.87163 12.17253 1.21553 -2.72444 3.17700 7 3 4 2.38 2013-Sep-20 09:11:44 4171697.33366 872119.76933 4730013.73028 11.80799 48.17150 534.62440 -1.52255 0.73877 10.03375 0.29041 -2.85729 1.03821 7 3 4 2.38 2013-Sep-20 09:11:44 4171694.84682 872118.06826 4730012.21083 11.80797 48.17151 531.63666 -2.67873 1.79867 7.04600 -0.86578 -1.79739 -1.94953 7 3 4 2.38 2013-Sep-20 09:11:44 4171698.92932 872121.20174 4730017.61631 11.80800 48.17152 538.75717 -0.44698 1.94812 14.16651 1.36598 -1.64794 5.17098 7 3 4 2.38 2013-Sep-20 09:11:44 4171697.31480 872120.42952 4730013.96343 11.80799 48.17150 534.87592 -0.87247 0.80734 10.28527 0.94049 -2.78872 1.28973 7 3 4 2.38 2013-Sep-20 09:11:44 4171695.54700 872119.09827 4730011.73559 11.80798 48.17151 531.88018 -1.81379 0.81398 7.28952 -0.00083 -2.78208 -1.70601 7 3 4 2.38 2013-Sep-20 09:11:44 4171695.92415 872119.30021 4730011.71264 11.80798 48.17150 532.13684 -1.69331 0.49279 7.54618 0.11965 -3.10327 -1.44935 7 3 4 2.38 2013-Sep-20 09:11:44 4171696.75421 872120.61532 4730012.83664 11.80800 48.17150 533.69571 -0.57588 0.43644 9.10506 1.23708 -3.15962 0.10952 7 3 4 2.38 2013-Sep-20 09:11:44 4171697.18058 872119.80199 4730015.06296 11.80799 48.17151 535.52198 -1.45926 1.73421 10.93132 0.35370 -1.86185 1.93579 7 3 4 2.38 2013-Sep-20 09:11:44 4171695.47432 872118.56029 4730015.20119 11.80797 48.17153 534.34169 -2.32552 3.26025 9.75103 -0.51256 -0.33582 0.75550 7 3 4 2.38 2013-Sep-20 09:11:45 4171696.92106 872118.97485 4730014.38560 11.80798 48.17151 534.73494 -2.21579 1.59789 10.14429 -0.40283 -1.99818 1.14876 7 3 4 2.38 2013-Sep-20 09:11:45 4171700.65103 872119.72245 4730018.41479 11.80798 48.17151 540.27419 -2.24728 1.45042 15.68353 -0.43432 -2.14564 6.68800 7 3 4 2.38 2013-Sep-20 09:11:45 4171699.00412 872118.91495 4730015.80963 11.80797 48.17151 537.14768 -2.70068 1.03738 12.55703 -0.88772 -2.55868 3.56149 7 3 4 2.38 2013-Sep-20 09:11:45 4171695.14395 872117.65192 4730012.45209 11.80796 48.17151 531.95358 -3.14707 1.80633 7.36292 -1.33411 -1.78973 -1.63261 7 3 4 2.38 2013-Sep-20 09:11:45 4171695.72429 872117.61892 4730013.84708 11.80796 48.17152 533.36738 -3.29812 2.31840 8.77673 -1.48516 -1.27766 -0.21880 7 3 4 2.38 2013-Sep-20 09:11:45 4171692.99613 872116.43126 4730011.66933 11.80795 48.17152 529.80166 -3.90238 3.03700 5.21100 -2.08942 -0.55906 -3.78453 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.67503 872117.79312 4730014.50836 11.80797 48.17154 532.54617 -2.70826 4.22753 7.95551 -0.89530 0.63147 -1.04002 7 3 4 2.38 2013-Sep-20 09:11:45 4171692.48662 872117.98010 4730012.96774 11.80797 48.17153 530.64792 -2.28205 4.03837 6.05726 -0.46909 0.44231 -2.93827 7 3 4 2.38 2013-Sep-20 09:11:45 4171692.44667 872118.05416 4730014.36462 11.80798 48.17154 531.67283 -2.20138 4.98780 7.08218 -0.38843 1.39174 -1.91336 7 3 4 2.38 2013-Sep-20 09:11:45 4171695.24201 872118.44845 4730017.21097 11.80797 48.17154 535.67235 -2.38746 4.78706 11.08169 -0.57450 1.19100 2.08616 7 3 4 2.38 2013-Sep-20 09:11:45 4171696.04418 872118.28056 4730016.91440 11.80797 48.17153 535.95210 -2.71594 4.02979 11.36144 -0.90298 0.43373 2.36591 7 3 4 2.38 2013-Sep-20 09:11:45 4171694.47708 872119.30626 4730017.63950 11.80799 48.17155 535.60940 -1.39127 5.49997 11.01874 0.42169 1.90391 2.02321 7 3 4 2.38 2013-Sep-20 09:11:45 4171696.35878 872116.78607 4730016.71307 11.80795 48.17153 535.80350 -4.24319 3.89395 11.21284 -2.43023 0.29789 2.21731 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.48997 872116.69908 4730015.98826 11.80796 48.17155 533.37880 -3.74129 5.51627 8.78814 -1.92833 1.92021 -0.20739 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.77693 872115.78824 4730015.74331 11.80794 48.17155 533.25930 -4.69157 5.28251 8.66865 -2.87861 1.68644 -0.32688 7 3 4 2.38 2013-Sep-20 09:11:45 4171695.04067 872115.25115 4730016.09580 11.80793 48.17154 534.27362 -5.47590 4.67773 9.68296 -3.66294 1.08167 0.68743 7 3 4 2.38 2013-Sep-20 09:11:45 4171695.11661 872115.64506 4730016.33873 11.80794 48.17154 534.55797 -5.10586 4.72429 9.96731 -3.29290 1.12823 0.97178 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.90853 872116.71688 4730015.53304 11.80795 48.17154 533.31527 -3.80951 4.90469 8.72461 -1.99655 1.30862 -0.27092 7 3 4 2.38 2013-Sep-20 09:11:45 4171689.58510 872114.57640 4730009.33773 11.80794 48.17154 525.58446 -5.01998 4.25280 0.99380 -3.20702 0.65674 -8.00173 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.83445 872116.27714 4730013.86054 11.80795 48.17153 531.96063 -4.22478 3.91037 7.36998 -2.41182 0.31431 -1.62555 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.08298 872116.17766 4730014.45916 11.80795 48.17154 531.90257 -4.16838 4.87286 7.31191 -2.35543 1.27680 -1.68362 7 3 4 2.38 2013-Sep-20 09:11:45 4171699.66080 872119.51994 4730019.51757 11.80798 48.17152 540.42188 -2.24287 2.93900 15.83122 -0.42991 -0.65707 6.83569 7 3 4 2.38 2013-Sep-20 09:11:45 4171694.41608 872117.01813 4730015.70995 11.80796 48.17154 533.81952 -3.61850 4.60654 9.22886 -1.80554 1.01048 0.23333 7 3 4 2.38 2013-Sep-20 09:11:45 4171693.77605 872114.30763 4730015.24612 11.80792 48.17154 532.68620 -6.14067 5.17733 8.09554 -4.32771 1.58127 -0.89999 7 3 4 2.38 2013-Sep-20 09:11:45 4171697.20011 872117.04643 4730020.44194 11.80795 48.17155 539.16679 -4.16050 5.72740 14.57613 -2.34754 2.13133 5.58060 7 3 4 2.38 2013-Sep-20 09:11:46 4171697.12070 872116.79851 4730020.87803 11.80795 48.17155 539.40607 -4.38692 6.11395 14.81541 -2.57396 2.51788 5.81988 7 3 4 2.38 2013-Sep-20 09:11:46 4171694.73166 872116.52792 4730018.25628 11.80795 48.17155 535.85601 -4.16292 6.14927 11.26535 -2.34996 2.55320 2.26982 7 3 4 2.38 2013-Sep-20 09:11:46 4171690.49338 872113.93585 4730014.10998 11.80793 48.17156 529.64597 -5.83284 6.87063 5.05531 -4.01988 3.27457 -3.94022 7 3 4 2.38 2013-Sep-20 09:11:46 4171690.57820 872114.69383 4730015.26692 11.80794 48.17156 530.66687 -5.10826 7.46475 6.07621 -3.29530 3.86869 -2.91932 7 3 4 2.38 2013-Sep-20 09:11:46 4171690.23836 872115.37738 4730013.71589 11.80795 48.17156 529.38257 -4.36963 6.57401 4.79191 -2.55667 2.97795 -4.20362 7 3 4 2.38 2013-Sep-20 09:11:46 4171692.10423 872115.81241 4730015.94300 11.80795 48.17156 532.31948 -4.32562 6.63202 7.72882 -2.51266 3.03596 -1.26671 7 3 4 2.38 2013-Sep-20 09:11:46 4171695.46646 872116.88487 4730018.42845 11.80795 48.17155 536.51269 -3.96388 5.67372 11.92203 -2.15092 2.07765 2.92650 7 3 4 2.38 2013-Sep-20 09:11:46 4171697.54324 872117.66769 4730020.00643 11.80796 48.17154 539.15105 -3.62260 5.09196 14.56039 -1.80964 1.49589 5.56486 7 3 4 2.38 2013-Sep-20 09:11:46 4171695.03344 872117.76110 4730017.28683 11.80797 48.17154 535.49892 -3.01758 5.09458 10.90826 -1.20462 1.49852 1.91273 7 3 4 2.38 2013-Sep-20 09:11:46 4171689.54412 872116.02111 4730011.78724 11.80796 48.17155 527.58010 -3.59746 5.69599 2.98944 -1.78450 2.09993 -6.00609 7 3 4 2.38 2013-Sep-20 09:11:46 4171689.48613 872115.32541 4730010.69518 11.80795 48.17154 526.63356 -4.26656 5.11606 2.04291 -2.45361 1.52000 -6.95263 7 3 4 2.38 2013-Sep-20 09:11:46 4171693.23548 872117.08600 4730014.57851 11.80796 48.17154 532.21501 -3.31048 4.70273 7.62435 -1.49752 1.10667 -1.37118 7 3 4 2.38 2013-Sep-20 09:11:46 4171691.70133 872117.74483 4730013.08448 11.80797 48.17154 530.19018 -2.35165 4.72487 5.59952 -0.53869 1.12881 -3.39601 7 3 4 2.38 2013-Sep-20 09:11:46 4171691.47294 872118.64957 4730012.90322 11.80799 48.17154 530.02949 -1.41931 4.63262 5.43883 0.39364 1.03656 -3.55670 7 3 4 2.38 2013-Sep-20 09:11:46 4171695.69404 872119.79656 4730016.92255 11.80799 48.17153 535.93649 -1.16038 4.05945 11.34583 0.65258 0.46339 2.35030 7 3 4 2.38 2013-Sep-20 09:11:46 4171693.37434 872119.48021 4730016.03558 11.80799 48.17154 533.71813 -0.99534 5.20810 9.12747 0.81762 1.61204 0.13194 7 3 4 2.38 2013-Sep-20 09:11:46 4171689.11622 872116.91119 4730012.31483 11.80797 48.17155 527.81537 -2.63865 6.22423 3.22472 -0.82569 2.62817 -5.77082 7 3 4 2.38 2013-Sep-20 09:11:46 4171691.05673 872116.23852 4730012.20286 11.80796 48.17154 528.90688 -3.69418 4.83675 4.31623 -1.88122 1.24069 -4.67930 7 3 4 2.38 2013-Sep-20 09:11:46 4171687.08951 872113.62082 4730006.48254 11.80793 48.17154 521.69741 -5.44466 4.31460 -2.89324 -3.63170 0.71854 -11.88878 7 3 4 2.38 2013-Sep-20 09:11:46 4171690.26826 872114.92558 4730010.28529 11.80794 48.17154 526.78414 -4.81799 4.33322 2.19348 -3.00503 0.73716 -6.80205 7 3 4 2.38 2013-Sep-20 09:11:46 4171693.27401 872116.30711 4730014.21569 11.80795 48.17154 531.86351 -4.08076 4.55143 7.27285 -2.26781 0.95537 -1.72268 7 3 4 2.38 2013-Sep-20 09:11:46 4171692.45740 872117.10685 4730011.34158 11.80796 48.17153 529.29794 -3.13085 3.10835 4.70729 -1.31789 -0.48771 -4.28824 7 3 4 2.38 2013-Sep-20 09:11:46 4171696.82856 872118.37766 4730015.96814 11.80797 48.17152 535.77228 -2.78141 2.81182 11.18163 -0.96845 -0.78424 2.18610 7 3 4 2.38 2013-Sep-20 09:11:46 4171695.06796 872117.24465 4730014.73665 11.80796 48.17153 533.55072 -3.53016 3.44744 8.96007 -1.71720 -0.14863 -0.03546 7 3 4 2.38 2013-Sep-20 09:11:46 4171693.40375 872117.89376 4730013.65089 11.80797 48.17153 531.74387 -2.55424 3.83820 7.15322 -0.74128 0.24214 -1.84231 7 3 4 2.38 2013-Sep-20 09:11:47 4171690.98939 872116.75487 4730013.46748 11.80796 48.17155 529.87572 -3.17497 5.65052 5.28506 -1.36201 2.05445 -3.71047 7 3 4 2.38 2013-Sep-20 09:11:47 4171693.70057 872118.08841 4730015.47165 11.80797 48.17154 533.32093 -2.42445 4.80629 8.73028 -0.61149 1.21023 -0.26526 7 3 4 2.38 2013-Sep-20 09:11:47 4171694.65632 872118.68334 4730016.61781 11.80798 48.17154 534.88008 -2.03768 4.78286 10.28942 -0.22472 1.18679 1.29389 7 3 4 2.38 2013-Sep-20 09:11:47 4171695.13273 872119.09675 4730017.61723 11.80798 48.17154 535.99221 -1.73051 5.03885 11.40156 0.08245 1.44279 2.40602 7 3 4 2.38 2013-Sep-20 09:11:47 4171695.76351 872119.75086 4730017.44981 11.80799 48.17154 536.36849 -1.21932 4.36739 11.77784 0.59364 0.77132 2.78231 7 3 4 2.38 2013-Sep-20 09:11:47 4171688.74263 872115.93827 4730010.16230 11.80796 48.17154 525.83478 -3.51453 5.20953 1.24412 -1.70158 1.61347 -7.75141 7 3 4 2.38 2013-Sep-20 09:11:47 4171692.87624 872116.89737 4730013.33047 11.80796 48.17154 531.02479 -3.42160 4.16119 6.43414 -1.60864 0.56513 -2.56140 7 3 4 2.38 2013-Sep-20 09:11:47 4171694.70101 872116.03797 4730013.68317 11.80794 48.17153 532.36151 -4.63622 3.19651 7.77086 -2.82326 -0.39955 -1.22467 7 3 4 2.38 2013-Sep-20 09:11:47 4171693.80431 872117.50124 4730014.65832 11.80797 48.17154 532.70248 -3.02043 4.27775 8.11182 -1.20747 0.68169 -0.88371 7 3 4 2.38 2013-Sep-20 09:11:47 4171695.18654 872118.38732 4730016.21216 11.80797 48.17154 534.88354 -2.43594 4.17073 10.29289 -0.62298 0.57466 1.29735 7 3 4 2.38 2013-Sep-20 09:11:47 4171693.64297 872117.00661 4730016.10385 11.80796 48.17155 533.60678 -3.47157 5.43488 9.01612 -1.65861 1.83882 0.02059 7 3 4 2.38 2013-Sep-20 09:11:47 4171697.91174 872119.55583 4730020.38997 11.80798 48.17154 539.93507 -1.84982 4.79106 15.34441 -0.03686 1.19499 6.34888 7 3 4 2.38 2013-Sep-20 09:11:47 4171695.89818 872117.83302 4730017.46794 11.80796 48.17154 536.20819 -3.12414 4.57369 11.61753 -1.31118 0.97762 2.62200 7 3 4 2.38 2013-Sep-20 09:11:47 4171692.66435 872117.87699 4730015.50583 11.80797 48.17155 532.64111 -2.41935 5.61712 8.05046 -0.60639 2.02106 -0.94508 7 3 4 2.38 2013-Sep-20 09:11:47 4171690.61610 872116.25976 4730012.31716 11.80796 48.17154 528.70731 -3.58322 5.23113 4.11665 -1.77027 1.63507 -4.87888 7 3 4 2.38 2013-Sep-20 09:11:47 4171691.78895 872116.15843 4730015.51246 11.80795 48.17156 531.84007 -3.92240 6.52208 7.24941 -2.10945 2.92602 -1.74612 7 3 4 2.38 2013-Sep-20 09:11:47 4171689.92838 872115.73951 4730011.57532 11.80795 48.17155 527.63460 -3.95173 5.31733 3.04394 -2.13877 1.72127 -5.95159 7 3 4 2.38 2013-Sep-20 09:11:47 4171689.76279 872114.81080 4730012.01678 11.80794 48.17155 527.72872 -4.82690 5.87412 3.13806 -3.01395 2.27806 -5.85747 7 3 4 2.38 2013-Sep-20 09:11:47 4171693.97631 872117.04790 4730016.44802 11.80796 48.17155 534.08648 -3.49937 5.41498 9.49582 -1.68641 1.81892 0.50029 7 3 4 2.38 2013-Sep-20 09:11:47 4171693.08580 872117.06716 4730016.84567 11.80796 48.17155 533.80409 -3.29828 6.32675 9.21343 -1.48533 2.73069 0.21790 7 3 4 2.38 2013-Sep-20 09:11:47 4171694.63630 872118.22336 4730017.54640 11.80797 48.17155 535.49617 -2.48384 5.48688 10.90551 -0.67088 1.89082 1.90998 7 3 4 2.38 2013-Sep-20 09:11:47 4171694.59244 872117.66422 4730017.34097 11.80796 48.17155 535.23817 -3.02217 5.46712 10.64751 -1.20921 1.87106 1.65198 7 3 4 2.38 2013-Sep-20 09:11:47 4171692.89093 872116.27044 4730016.17331 11.80795 48.17155 533.06715 -4.03827 6.14197 8.47649 -2.22531 2.54591 -0.51904 7 3 4 2.38 2013-Sep-20 09:11:47 4171689.08251 872116.36285 4730013.17182 11.80796 48.17156 528.35712 -3.16849 6.90395 3.76646 -1.35553 3.30789 -5.22907 7 3 4 2.38 2013-Sep-20 09:11:47 4171689.00221 872116.96672 4730012.74135 11.80797 48.17156 528.06635 -2.56096 6.58336 3.47569 -0.74800 2.98730 -5.51984 7 3 4 2.38 2013-Sep-20 09:11:48 4171690.27934 872118.28668 4730014.53656 11.80799 48.17156 530.41787 -1.53028 6.64781 5.82721 0.28267 3.05175 -3.16832 7 3 4 2.38 2013-Sep-20 09:11:48 4171689.61503 872117.12584 4730012.29829 11.80797 48.17155 528.15796 -2.53062 5.81664 3.56730 -0.71766 2.22058 -5.42823 7 3 4 2.38 2013-Sep-20 09:11:48 4171697.69484 872121.83809 4730013.51198 11.80801 48.17150 534.97984 0.42852 0.01431 10.38918 2.24148 -3.58175 1.39365 7 3 4 2.38 2013-Sep-20 09:11:48 4171699.41323 872123.69735 4730016.94187 11.80803 48.17150 538.91109 1.89680 0.76485 14.32043 3.70976 -2.83121 5.32490 7 3 4 2.38 2013-Sep-20 09:11:48 4171697.23671 872121.16590 4730014.83677 11.80800 48.17151 535.57620 -0.13569 1.33446 10.98554 1.67727 -2.26160 1.99001 7 3 4 2.38 2013-Sep-20 09:11:48 4171696.11857 872121.32280 4730013.75751 11.80801 48.17151 534.06349 0.24669 1.40631 9.47284 2.05965 -2.18975 0.47730 7 3 4 2.38 2013-Sep-20 09:11:48 4171693.93048 872120.74206 4730009.50335 11.80801 48.17150 529.38591 0.12600 0.25369 4.79526 1.93896 -3.34237 -4.20028 7 3 4 2.38 2013-Sep-20 09:11:48 4171691.22392 872118.98947 4730008.27636 11.80799 48.17151 526.46563 -1.03566 1.67674 1.87498 0.77730 -1.91931 -7.12055 7 3 4 2.38 2013-Sep-20 09:11:48 4171692.62390 872118.99280 4730010.34910 11.80799 48.17152 528.92448 -1.31888 2.03744 4.33382 0.49408 -1.55862 -4.66171 7 3 4 2.38 2013-Sep-20 09:11:48 4171695.67185 872120.23092 4730011.82413 11.80800 48.17150 532.18222 -0.73067 0.60925 7.59157 1.08229 -2.98681 -1.40397 7 3 4 2.38 2013-Sep-20 09:11:48 4171697.26857 872121.23280 4730013.48790 11.80800 48.17150 534.60103 -0.07672 0.40145 10.01037 1.73624 -3.19461 1.01484 7 3 4 2.38 2013-Sep-20 09:11:48 4171696.38356 872119.30156 4730013.56797 11.80798 48.17151 533.81941 -1.78600 1.39483 9.22876 0.02696 -2.20123 0.23322 7 3 4 2.38 2013-Sep-20 09:11:48 4171696.99760 872119.95043 4730012.74478 11.80799 48.17150 533.69540 -1.27651 0.29904 9.10474 0.53645 -3.29702 0.10921 7 3 4 2.38 2013-Sep-20 09:11:48 4171699.47353 872121.03693 4730016.38304 11.80800 48.17150 538.17097 -0.71966 0.75385 13.58031 1.09330 -2.84222 4.58478 7 3 4 2.38 2013-Sep-20 09:11:48 4171700.83789 872121.89492 4730016.81861 11.80800 48.17150 539.50327 -0.15902 -0.08163 14.91261 1.65394 -3.67769 5.91708 7 3 4 2.38 2013-Sep-20 09:11:48 4171700.21047 872121.18047 4730016.26686 11.80800 48.17150 538.58505 -0.72996 0.11698 13.99440 1.08300 -3.47909 4.99886 7 3 4 2.38 2013-Sep-20 09:11:48 4171698.07341 872122.61021 4730017.05131 11.80802 48.17152 537.96965 1.10684 1.98084 13.37900 2.91980 -1.61522 4.38346 7 3 4 2.38 2013-Sep-20 09:11:48 4171695.61837 872120.94942 4730015.36464 11.80801 48.17152 534.88356 -0.01643 2.89988 10.29290 1.79653 -0.69618 1.29737 7 3 4 2.38 2013-Sep-20 09:11:48 4171696.03979 872122.28542 4730016.25204 11.80802 48.17152 536.00223 1.20507 2.98060 11.41157 3.01803 -0.61547 2.41604 7 3 4 2.38 2013-Sep-20 09:11:48 4171698.28626 872123.80253 4730016.93000 11.80804 48.17151 538.18092 2.23037 1.56288 13.59026 4.04333 -2.03318 4.59473 7 3 4 2.38 2013-Sep-20 09:11:48 4171698.84194 872122.23112 4730016.23664 11.80801 48.17151 537.81256 0.57850 0.93479 13.22190 2.39146 -2.66127 4.22637 7 3 4 2.38 2013-Sep-20 09:11:48 4171697.44208 872121.25846 4730015.52416 11.80800 48.17151 536.23510 -0.08712 1.62898 11.64445 1.72584 -1.96709 2.64891 7 3 4 2.38 2013-Sep-20 09:11:48 4171693.20144 872117.82225 4730012.34069 11.80797 48.17153 530.62577 -2.58284 3.12288 6.03511 -0.76989 -0.47318 -2.96042 7 3 4 2.38 2013-Sep-20 09:11:48 4171694.69339 872117.78625 4730012.08336 11.80797 48.17151 531.40304 -2.92337 1.86857 6.81238 -1.11041 -1.72749 -2.18315 7 3 4 2.38 2013-Sep-20 09:11:48 4171692.48650 872117.23476 4730009.59715 11.80797 48.17151 528.03455 -3.01159 1.90425 3.44390 -1.19863 -1.69181 -5.55163 7 3 4 2.38 2013-Sep-20 09:11:49 4171694.63009 872117.83856 4730013.18767 11.80797 48.17152 532.19173 -2.85922 2.64323 7.60107 -1.04626 -0.95283 -1.39446 7 3 4 2.38 2013-Sep-20 09:11:49 4171695.74003 872117.84020 4730015.05488 11.80796 48.17153 534.30784 -3.08475 3.07867 9.71719 -1.27179 -0.51740 0.72165 7 3 4 2.38 2013-Sep-20 09:11:49 4171696.17236 872118.73918 4730015.00220 11.80797 48.17152 534.67350 -2.29326 2.59113 10.08284 -0.48030 -1.00494 1.08731 7 3 4 2.38 2013-Sep-20 09:11:49 4171695.14836 872118.29528 4730015.81412 11.80797 48.17153 534.54946 -2.51822 3.94717 9.95880 -0.70526 0.35110 0.96327 7 3 4 2.38 2013-Sep-20 09:11:49 4171697.09466 872120.86564 4730017.06207 11.80800 48.17152 537.10067 -0.40054 2.96791 12.51001 1.41243 -0.62815 3.51448 7 3 4 2.38 2013-Sep-20 09:11:49 4171694.39566 872119.69092 4730013.92643 11.80799 48.17152 532.84197 -0.99809 3.02444 8.25131 0.81487 -0.57162 -0.74422 7 3 4 2.38 2013-Sep-20 09:11:49 4171695.22683 872120.00869 4730014.99482 11.80799 48.17153 534.22401 -0.85713 3.08227 9.63336 0.95583 -0.51379 0.63783 7 3 4 2.38 2013-Sep-20 09:11:49 4171698.17039 872119.79034 4730016.98170 11.80798 48.17152 537.59625 -1.67321 2.29366 13.00560 0.13975 -1.30240 4.01006 7 3 4 2.38 2013-Sep-20 09:11:49 4171700.00517 872121.16161 4730019.98118 11.80800 48.17152 541.21617 -0.70641 2.74668 16.62552 1.10655 -0.84938 7.62998 7 3 4 2.38 2013-Sep-20 09:11:49 4171696.70779 872119.77758 4730015.76720 11.80799 48.17152 535.73477 -1.38640 2.55244 11.14411 0.42656 -1.04362 2.14858 7 3 4 2.38 2013-Sep-20 09:11:49 4171696.66262 872119.97368 4730016.26361 11.80799 48.17152 536.10194 -1.18520 2.88654 11.51129 0.62776 -0.70952 2.51575 7 3 4 2.38 2013-Sep-20 09:11:49 4171694.37549 872117.67545 4730012.91449 11.80797 48.17152 531.79970 -2.96678 2.67161 7.20905 -1.15382 -0.92445 -1.78648 7 3 4 2.38 2013-Sep-20 09:11:49 4171692.78864 872120.42133 4730012.62848 11.80801 48.17153 530.92544 0.04571 3.21959 6.33478 1.85867 -0.37647 -2.66075 7 3 4 2.38 2013-Sep-20 09:11:49 4171691.67008 872119.95033 4730012.44513 11.80800 48.17153 529.99435 -0.18642 3.98498 5.40370 1.62654 0.38893 -3.59184 7 3 4 2.38 2013-Sep-20 09:11:49 4171693.85862 872119.59939 4730014.13942 11.80799 48.17153 532.63761 -0.97779 3.57215 8.04695 0.83517 -0.02391 -0.94858 7 3 4 2.38 2013-Sep-20 09:11:49 4171693.43125 872119.70259 4730014.30431 11.80800 48.17153 532.49557 -0.78931 3.97809 7.90492 1.02365 0.38203 -1.09061 7 3 4 2.38 2013-Sep-20 09:11:49 4171692.15580 872118.33429 4730011.81589 11.80798 48.17153 529.62201 -1.86766 3.45748 5.03135 -0.05470 -0.13858 -3.96418 7 3 4 2.38 2013-Sep-20 09:11:49 4171693.77406 872119.05065 4730014.29676 11.80799 48.17153 532.62477 -1.49761 3.82243 8.03411 0.31535 0.22637 -0.96142 7 3 4 2.38 2013-Sep-20 09:11:49 4171693.03195 872117.05363 4730012.14337 11.80796 48.17153 530.26319 -3.30051 3.23211 5.67254 -1.48755 -0.36395 -3.32300 7 3 4 2.38 2013-Sep-20 09:11:49 4171697.31607 872120.67877 4730017.74234 11.80800 48.17153 537.72659 -0.62876 3.28858 13.13594 1.18420 -0.30748 4.14040 7 3 4 2.38 2013-Sep-20 09:11:49 4171694.36044 872119.19236 4730013.68970 11.80799 48.17152 532.57454 -1.47889 2.96828 7.98388 0.33407 -0.62778 -1.01165 7 3 4 2.38 2013-Sep-20 09:11:49 4171692.59801 872115.73907 4730012.36764 11.80795 48.17153 529.96764 -4.49845 3.89863 5.37699 -2.68550 0.30257 -3.61855 7 3 4 2.38 2013-Sep-20 09:11:49 4171689.94758 872115.41950 4730009.77543 11.80795 48.17154 526.26228 -4.26890 4.15177 1.67163 -2.45594 0.55571 -7.32391 7 3 4 2.38 2013-Sep-20 09:11:49 4171693.74943 872117.74347 4730013.76650 11.80797 48.17153 532.03517 -2.77209 3.68609 7.44451 -0.95913 0.09002 -1.55102 7 3 4 2.38 2013-Sep-20 09:11:49 4171693.95887 872116.76591 4730014.97435 11.80795 48.17154 532.93851 -3.77182 4.48790 8.34785 -1.95886 0.89184 -0.64768 7 3 4 2.38 2013-Sep-20 09:11:50 4171697.75983 872117.97296 4730016.75180 11.80796 48.17152 536.90892 -3.36812 2.71690 12.31827 -1.55516 -0.87916 3.32274 7 3 4 2.38 2013-Sep-20 09:11:50 4171700.12216 872119.45928 4730020.01987 11.80797 48.17152 541.08905 -2.39666 2.94673 16.49840 -0.58370 -0.64933 7.50286 7 3 4 2.38 2013-Sep-20 09:11:50 4171696.75390 872120.02024 4730016.38795 11.80799 48.17152 536.26053 -1.15831 2.89578 11.66987 0.65465 -0.70028 2.67434 7 3 4 2.38 2013-Sep-20 09:11:50 4171696.62038 872120.59208 4730017.36975 11.80800 48.17153 536.98299 -0.57125 3.56074 12.39234 1.24171 -0.03532 3.39681 7 3 4 2.38 2013-Sep-20 09:11:50 4171696.76241 872119.51678 4730017.25801 11.80798 48.17153 536.84570 -1.65286 3.54659 12.25505 0.16010 -0.04947 3.25951 7 3 4 2.38 2013-Sep-20 09:11:50 4171695.56478 872119.08565 4730016.07613 11.80798 48.17153 535.12439 -1.82979 3.69765 10.53373 -0.01683 0.10159 1.53820 7 3 4 2.38 2013-Sep-20 09:11:50 4171698.53396 872119.98790 4730018.83850 11.80798 48.17153 539.24414 -1.55422 3.23665 14.65348 0.25874 -0.35941 5.65795 7 3 4 2.38 2013-Sep-20 09:11:50 4171695.87045 872116.53449 4730013.98515 11.80795 48.17152 533.41769 -4.38952 2.46923 8.82703 -2.57656 -1.12683 -0.16850 7 3 4 2.38 2013-Sep-20 09:11:50 4171697.97419 872117.72189 4730017.39427 11.80796 48.17152 537.49332 -3.65773 3.02731 12.90267 -1.84477 -0.56876 3.90713 7 3 4 2.38 2013-Sep-20 09:11:50 4171695.07700 872116.24279 4730014.04631 11.80794 48.17153 532.90550 -4.51267 3.13321 8.31484 -2.69972 -0.46285 -0.68069 7 3 4 2.38 2013-Sep-20 09:11:50 4171690.26871 872114.89262 4730008.97535 11.80794 48.17153 525.80384 -4.85034 3.46430 1.21318 -3.03738 -0.13176 -7.78235 7 3 4 2.38 2013-Sep-20 09:11:50 4171692.75955 872114.89066 4730013.60601 11.80793 48.17154 530.88007 -5.36197 4.73605 6.28942 -3.54901 1.13999 -2.70612 7 3 4 2.38 2013-Sep-20 09:11:50 4171691.95948 872114.55133 4730013.66356 11.80793 48.17155 530.35437 -5.53039 5.40972 5.76372 -3.71744 1.81366 -3.23182 7 3 4 2.38 2013-Sep-20 09:11:50 4171695.09852 872116.36994 4730016.05607 11.80795 48.17154 534.43446 -4.39263 4.43844 9.84380 -2.57967 0.84238 0.84827 7 3 4 2.38 2013-Sep-20 09:11:50 4171695.34463 872117.88389 4730016.13615 11.80797 48.17153 534.86140 -2.96107 4.08150 10.27074 -1.14811 0.48543 1.27521 7 3 4 2.38 2013-Sep-20 09:11:50 4171697.40948 872116.71951 4730016.92576 11.80794 48.17153 536.63879 -4.52335 3.27958 12.04813 -2.71039 -0.31648 3.05260 7 3 4 2.38 2013-Sep-20 09:11:50 4171694.45550 872115.82908 4730014.01599 11.80794 48.17153 532.42074 -4.79045 3.62939 7.83009 -2.97749 0.03332 -1.16545 7 3 4 2.38 2013-Sep-20 09:11:50 4171692.99165 872115.24509 4730014.73675 11.80794 48.17155 531.92252 -5.06254 5.26681 7.33186 -3.24958 1.67075 -1.66367 7 3 4 2.38 2013-Sep-20 09:11:50 4171691.74799 872114.79843 4730012.34905 11.80794 48.17154 529.27054 -5.24525 4.64965 4.67988 -3.43229 1.05359 -4.31565 7 3 4 2.38 2013-Sep-20 09:11:50 4171693.02877 872116.02999 4730016.51231 11.80795 48.17155 533.37692 -4.30184 6.30418 8.78626 -2.48888 2.70812 -0.20927 7 3 4 2.38 2013-Sep-20 09:11:50 4171694.68827 872114.31880 4730015.55856 11.80792 48.17154 533.51602 -6.31641 4.71864 8.92536 -4.50345 1.12257 -0.07017 7 3 4 2.38 2013-Sep-20 09:11:50 4171693.77761 872115.95720 4730015.67837 11.80794 48.17154 533.23442 -4.52632 5.21293 8.64376 -2.71336 1.61687 -0.35177 7 3 4 2.38 2013-Sep-20 09:11:50 4171694.19630 872116.39989 4730015.12616 11.80795 48.17154 533.15667 -4.17868 4.47178 8.56601 -2.36572 0.87572 -0.42952 7 3 4 2.38 2013-Sep-20 09:11:50 4171696.24240 872117.91645 4730019.78765 11.80796 48.17155 538.17280 -3.11291 5.85692 13.58214 -1.29995 2.26085 4.58661 7 3 4 2.38 2013-Sep-20 09:11:50 4171694.55237 872117.87145 4730016.31592 11.80797 48.17154 534.47647 -2.81112 4.78114 9.88582 -0.99816 1.18508 0.89029 7 3 4 2.38 2013-Sep-20 09:11:51 4171698.37532 872118.47241 4730019.27226 11.80797 48.17153 539.25698 -3.00518 3.87273 14.66632 -1.19222 0.27666 5.67079 7 3 4 2.38 2013-Sep-20 09:11:51 4171695.64513 872116.77343 4730017.51389 11.80795 48.17154 535.93263 -4.10953 4.95047 11.34198 -2.29657 1.35441 2.34645 7 3 4 2.38 2013-Sep-20 09:11:51 4171697.24627 872118.24946 4730017.71783 11.80797 48.17153 537.33124 -2.99237 3.69357 12.74059 -1.17941 0.09751 3.74506 7 3 4 2.38 2013-Sep-20 09:11:51 4171694.97997 872117.37612 4730016.79286 11.80796 48.17154 535.04340 -3.38347 4.86285 10.45274 -1.57051 1.26679 1.45721 7 3 4 2.38 2013-Sep-20 09:11:51 4171697.09886 872117.20407 4730018.29927 11.80795 48.17154 537.52560 -3.98547 4.34826 12.93495 -2.17251 0.75219 3.93941 7 3 4 2.38 2013-Sep-20 09:11:51 4171696.40555 872118.35142 4730018.90254 11.80797 48.17154 537.67912 -2.72053 5.08132 13.08847 -0.90757 1.48525 4.09293 7 3 4 2.38 2013-Sep-20 09:11:51 4171696.82261 872116.98598 4730016.79506 11.80795 48.17153 536.19465 -4.14242 3.57984 11.60400 -2.32946 -0.01623 2.60847 7 3 4 2.38 2013-Sep-20 09:11:51 4171695.04422 872116.60407 4730017.14060 11.80795 48.17154 535.23910 -4.15233 5.16563 10.64844 -2.33937 1.56957 1.65291 7 3 4 2.38 2013-Sep-20 09:11:51 4171696.83739 872117.80959 4730018.86994 11.80796 48.17154 537.86279 -3.33927 4.82721 13.27213 -1.52631 1.23115 4.27660 7 3 4 2.38 2013-Sep-20 09:11:51 4171696.88781 872118.11252 4730019.84086 11.80796 48.17155 538.66052 -3.05306 5.39176 14.06986 -1.24010 1.79569 5.07433 7 3 4 2.38 2013-Sep-20 09:11:51 4171698.31688 872119.10025 4730020.39935 11.80797 48.17154 540.14435 -2.37867 4.57128 15.55370 -0.56571 0.97521 6.55816 7 3 4 2.38 2013-Sep-20 09:11:51 4171695.78621 872118.04903 4730016.47168 11.80797 48.17153 535.42222 -2.88978 3.95801 10.83156 -1.07682 0.36194 1.83603 7 3 4 2.38 2013-Sep-20 09:11:51 4171692.38286 872118.07919 4730014.09759 11.80798 48.17154 531.43561 -2.16383 4.85244 6.84496 -0.35087 1.25638 -2.15058 7 3 4 2.38 2013-Sep-20 09:11:51 4171692.35887 872118.42735 4730013.38822 11.80798 48.17154 530.93888 -1.81813 4.34377 6.34822 -0.00517 0.74771 -2.64731 7 3 4 2.38 2013-Sep-20 09:11:51 4171692.60829 872118.53458 4730015.06669 11.80798 48.17155 532.36704 -1.76420 5.26488 7.77639 0.04875 1.66881 -1.21914 7 3 4 2.38 2013-Sep-20 09:11:51 4171693.86023 872119.67146 4730015.99694 11.80799 48.17154 534.03262 -0.90757 4.79877 9.44196 0.90539 1.20271 0.44643 7 3 4 2.38 2013-Sep-20 09:11:51 4171693.24262 872118.83673 4730016.25767 11.80798 48.17155 533.70981 -1.59826 5.55040 9.11915 0.21470 1.95434 0.12362 7 3 4 2.38 2013-Sep-20 09:11:51 4171689.72170 872117.48003 4730010.70157 11.80798 48.17154 527.08614 -2.20574 4.61997 2.49548 -0.39279 1.02391 -6.50005 7 3 4 2.38 2013-Sep-20 09:11:51 4171692.52581 872118.33884 4730014.59485 11.80798 48.17154 531.93489 -1.93892 5.04021 7.34423 -0.12596 1.44415 -1.65130 7 3 4 2.38 2013-Sep-20 09:11:51 4171693.43458 872119.60432 4730017.75909 11.80799 48.17155 535.05865 -0.88619 6.29465 10.46799 0.92677 2.69859 1.47246 7 3 4 2.38 2013-Sep-20 09:11:51 4171690.49018 872116.37434 4730013.42103 11.80796 48.17155 529.46330 -3.44530 6.04167 4.87264 -1.63234 2.44561 -4.12289 7 3 4 2.38 2013-Sep-20 09:11:51 4171689.25240 872116.47891 4730013.04403 11.80796 48.17156 528.38864 -3.08965 6.67711 3.79798 -1.27669 3.08106 -5.19755 7 3 4 2.38 2013-Sep-20 09:11:51 4171690.69340 872117.89639 4730013.86928 11.80798 48.17155 530.13768 -1.99704 5.96031 5.54703 -0.18408 2.36425 -3.44850 7 3 4 2.38 2013-Sep-20 09:11:51 4171687.90866 872116.38325 4730011.14049 11.80797 48.17156 526.07998 -2.90831 6.40231 1.48933 -1.09536 2.80625 -7.50620 7 3 4 2.38 2013-Sep-20 09:11:51 4171689.50675 872118.23332 4730012.14242 11.80799 48.17155 528.12227 -1.42441 5.62280 3.53161 0.38855 2.02674 -5.46392 7 3 4 2.38 2013-Sep-20 09:11:52 4171690.09269 872116.77902 4730012.74738 11.80797 48.17155 528.75707 -2.96784 5.82063 4.16642 -1.15488 2.22457 -4.82912 7 3 4 2.38 2013-Sep-20 09:11:52 4171692.00020 872117.10328 4730016.50027 11.80796 48.17156 532.84299 -3.04078 6.88271 8.25233 -1.22782 3.28664 -0.74320 7 3 4 2.38 2013-Sep-20 09:11:52 4171689.01089 872115.62661 4730011.29080 11.80795 48.17155 526.80825 -3.87450 5.81399 2.21759 -2.06154 2.21794 -6.77794 7 3 4 2.38 2013-Sep-20 09:11:52 4171687.99712 872116.24031 4730010.84236 11.80796 48.17155 525.89607 -3.06633 6.16077 1.30542 -1.25337 2.56471 -7.69011 7 3 4 2.38 2013-Sep-20 09:11:52 4171686.24000 872115.26520 4730009.72699 11.80796 48.17156 523.78486 -3.66124 6.84721 -0.80580 -1.84828 3.25115 -9.80133 7 3 4 2.38 2013-Sep-20 09:11:52 4171692.85561 872117.24077 4730015.10000 11.80796 48.17155 532.37674 -3.08124 5.30399 7.78609 -1.26828 1.70792 -1.20945 7 3 4 2.38 2013-Sep-20 09:11:52 4171693.22025 872118.15040 4730017.42974 11.80798 48.17156 534.47490 -2.26548 6.45304 9.88424 -0.45253 2.85697 0.88871 7 3 4 2.38 2013-Sep-20 09:11:52 4171693.55565 872117.16666 4730015.95114 11.80796 48.17155 533.45783 -3.29704 5.37232 8.86718 -1.48408 1.77626 -0.12835 7 3 4 2.38 2013-Sep-20 09:11:52 4171690.96482 872116.76181 4730016.21891 11.80796 48.17157 531.91084 -3.16315 7.50231 7.32018 -1.35020 3.90625 -1.67535 7 3 4 2.38 2013-Sep-20 09:11:52 4171691.23538 872117.56932 4730016.96099 11.80797 48.17157 532.75062 -2.42810 7.67674 8.15996 -0.61514 4.08068 -0.83557 7 3 4 2.38 2013-Sep-20 09:11:52 4171690.59725 872115.76944 4730017.40408 11.80795 48.17158 532.41859 -4.05930 8.71213 7.82793 -2.24634 5.11607 -1.16760 7 3 4 2.38 2013-Sep-20 09:11:52 4171690.85914 872115.78250 4730015.10104 11.80795 48.17156 530.87523 -4.10012 6.98321 6.28457 -2.28716 3.38715 -2.71096 7 3 4 2.38 2013-Sep-20 09:11:52 4171687.57249 872115.36900 4730011.85321 11.80795 48.17156 526.25320 -3.83231 7.27748 1.66254 -2.01936 3.68142 -7.33299 7 3 4 2.38 2013-Sep-20 09:11:52 4171689.60871 872116.13960 4730012.73699 11.80796 48.17155 528.34614 -3.49469 6.26420 3.75548 -1.68173 2.66815 -5.24005 7 3 4 2.38 2013-Sep-20 09:11:52 4171687.40524 872116.51402 4730012.25067 11.80797 48.17157 526.59645 -2.67729 7.48994 2.00579 -0.86433 3.89388 -6.98974 7 3 4 2.38 2013-Sep-20 09:11:52 4171689.07301 872115.14207 4730012.66794 11.80795 48.17156 527.80886 -4.36149 6.76098 3.21820 -2.54854 3.16492 -5.77733 7 3 4 2.38 2013-Sep-20 09:11:52 4171688.24740 872115.72461 4730013.02406 11.80796 48.17157 527.61476 -3.62233 7.51183 3.02410 -1.80937 3.91577 -5.97143 7 3 4 2.38 2013-Sep-20 09:11:52 4171689.64800 872115.67283 4730012.14075 11.80795 48.17155 527.86380 -3.95963 5.90909 3.27314 -2.14667 2.31303 -5.72239 7 3 4 2.38 2013-Sep-20 09:11:52 4171691.27013 872116.01790 4730015.52910 11.80795 48.17156 531.49462 -3.95380 6.93302 6.90396 -2.14084 3.33696 -2.09157 7 3 4 2.38 2013-Sep-20 09:11:52 4171692.17933 872116.72878 4730015.28157 11.80796 48.17155 532.00070 -3.44402 5.99640 7.41004 -1.63106 2.40034 -1.58549 7 3 4 2.38 2013-Sep-20 09:11:52 4171696.95168 872118.42600 4730019.89214 11.80797 48.17155 538.78320 -2.75929 5.33158 14.19254 -0.94633 1.73551 5.19701 7 3 4 2.38 2013-Sep-20 09:11:52 4171695.79975 872118.53080 4730018.78050 11.80797 48.17155 537.21720 -2.42099 5.41443 12.62654 -0.60803 1.81837 3.63101 7 3 4 2.38 2013-Sep-20 09:11:52 4171693.44918 872117.45165 4730015.12135 11.80797 48.17154 532.80890 -2.99629 4.85313 8.21825 -1.18333 1.25707 -0.77729 7 3 4 2.38 2013-Sep-20 09:11:52 4171696.91616 872119.35273 4730018.88611 11.80798 48.17154 538.13685 -1.84490 4.54525 13.54619 -0.03194 0.94919 4.55066 7 3 4 2.38 2013-Sep-20 09:11:52 4171697.77986 872120.40746 4730020.41721 11.80799 48.17154 539.98549 -0.98923 4.77555 15.39484 0.82373 1.17948 6.39931 7 3 4 2.38 2013-Sep-20 09:11:53 4171694.80653 872117.67543 4730020.27882 11.80796 48.17156 537.56857 -3.05501 7.26852 12.97791 -1.24205 3.67246 3.98238 7 3 4 2.38 2013-Sep-20 09:11:53 4171694.05497 872116.07051 4730019.09673 11.80795 48.17156 535.97811 -4.47217 7.27307 11.38745 -2.65921 3.67700 2.39192 7 3 4 2.38 2013-Sep-20 09:11:53 4171693.48086 872116.46808 4730017.50238 11.80795 48.17156 534.46957 -3.96553 6.56792 9.87891 -2.15258 2.97185 0.88338 7 3 4 2.38 2013-Sep-20 09:11:53 4171693.55370 872117.95188 4730017.84278 11.80797 48.17156 534.97327 -2.52803 6.51555 10.38261 -0.71507 2.91949 1.38708 7 3 4 2.38 2013-Sep-20 09:11:53 4171694.24129 872118.36007 4730017.03530 11.80798 48.17155 534.87613 -2.26918 5.41328 10.28547 -0.45623 1.81722 1.28994 7 3 4 2.38 2013-Sep-20 09:11:53 4171689.65452 872114.76628 4730013.47883 11.80794 48.17156 528.74141 -4.84832 6.93493 4.15075 -3.03536 3.33887 -4.84478 7 3 4 2.38 2013-Sep-20 09:11:53 4171687.60106 872114.30672 4730012.83696 11.80794 48.17157 526.85992 -4.87795 8.07469 2.26926 -3.06499 4.47863 -6.72627 7 3 4 2.38 2013-Sep-20 09:11:53 4171687.25192 872114.90764 4730011.57511 11.80795 48.17156 525.77375 -4.21830 7.39617 1.18309 -2.40535 3.80011 -7.81244 7 3 4 2.38 2013-Sep-20 09:11:53 4171687.71972 872114.85189 4730011.84202 11.80795 48.17156 526.27041 -4.36860 7.24148 1.67975 -2.55564 3.64542 -7.31578 7 3 4 2.38 2013-Sep-20 09:11:53 4171688.12430 872115.33868 4730012.68062 11.80795 48.17156 527.22582 -3.97491 7.43143 2.63516 -2.16195 3.83537 -6.36037 7 3 4 2.38 2013-Sep-20 09:11:53 4171689.03967 872115.23753 4730013.41406 11.80795 48.17156 528.35608 -4.26123 7.26834 3.76542 -2.44827 3.67228 -5.23011 7 3 4 2.38 2013-Sep-20 09:11:53 4171690.64438 872115.56369 4730013.94193 11.80795 48.17156 529.84147 -4.27035 6.40021 5.25081 -2.45739 2.80414 -3.74472 7 3 4 2.38 2013-Sep-20 09:11:53 4171692.71611 872114.69113 4730015.46940 11.80793 48.17155 532.21299 -5.54839 6.04085 7.62233 -3.73543 2.44479 -1.37320 7 3 4 2.38 2013-Sep-20 09:11:53 4171691.22275 872114.73262 4730015.42079 11.80794 48.17156 531.20758 -5.20218 7.09134 6.61692 -3.38922 3.49527 -2.37861 7 3 4 2.38 2013-Sep-20 09:11:53 4171690.08443 872114.56734 4730014.62927 11.80794 48.17156 529.85215 -5.13103 7.41893 5.26148 -3.31807 3.82287 -3.73404 7 3 4 2.38 2013-Sep-20 09:11:53 4171690.84764 872115.02594 4730017.08521 11.80794 48.17157 532.24297 -4.83832 8.43021 7.65231 -3.02536 4.83415 -1.34322 7 3 4 2.38 2013-Sep-20 09:11:53 4171692.57768 872115.43641 4730018.09924 11.80794 48.17157 534.18394 -4.79055 7.78203 9.59328 -2.97759 4.18597 0.59775 7 3 4 2.38 2013-Sep-20 09:11:53 4171686.42411 872112.06870 4730011.60333 11.80791 48.17157 524.86696 -6.82777 8.45167 0.27630 -5.01482 4.85561 -8.71923 7 3 4 2.38 2013-Sep-20 09:11:53 4171686.46206 872112.35102 4730012.68539 11.80792 48.17158 525.73656 -6.55919 9.10257 1.14590 -4.74624 5.50651 -7.84963 7 3 4 2.38 2013-Sep-20 09:11:53 4171688.75169 872112.40442 4730015.91620 11.80791 48.17158 529.64592 -6.97546 9.57906 5.05525 -5.16250 5.98300 -3.94027 7 3 4 2.38 2013-Sep-20 09:11:53 4171689.42812 872114.48165 4730016.45616 11.80794 48.17158 530.77331 -5.08060 9.12905 6.18265 -3.26764 5.53299 -2.81288 7 3 4 2.38 2013-Sep-20 09:11:53 4171688.31794 872114.85852 4730015.25997 11.80795 48.17158 529.20869 -4.48453 9.08359 4.61803 -2.67157 5.48753 -4.37750 7 3 4 2.38 2013-Sep-20 09:11:53 4171686.67064 872113.32616 4730013.89299 11.80793 48.17158 526.90563 -5.64737 9.60710 2.31497 -3.83441 6.01104 -6.68056 7 3 4 2.38 2013-Sep-20 09:11:53 4171687.62632 872113.30638 4730013.45230 11.80793 48.17158 527.19841 -5.86230 8.61916 2.60775 -4.04934 5.02311 -6.38778 7 3 4 2.38 2013-Sep-20 09:11:53 4171687.54589 872111.64922 4730012.96994 11.80791 48.17158 526.56033 -7.46793 8.60882 1.96967 -5.65498 5.01277 -7.02586 7 3 4 2.38 2013-Sep-20 09:11:54 4171691.51168 872114.32802 4730017.48494 11.80793 48.17157 532.87906 -5.65734 8.31888 8.28840 -3.84439 4.72282 -0.70713 7 3 4 2.38 2013-Sep-20 09:11:54 4171691.82504 872114.51984 4730017.95495 11.80793 48.17157 533.46002 -5.53371 8.37453 8.86936 -3.72075 4.77846 -0.12617 7 3 4 2.38 2013-Sep-20 09:11:54 4171695.55088 872118.26611 4730015.58240 11.80797 48.17153 534.63557 -2.62914 3.50349 10.04492 -0.81618 -0.09258 1.04939 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.67499 872119.86523 4730017.70657 11.80799 48.17153 537.17043 -1.29390 3.85636 12.57977 0.51906 0.26030 3.58424 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.06520 872118.54670 4730018.58839 11.80797 48.17154 537.24951 -2.45974 5.09027 12.65885 -0.64678 1.49421 3.66332 7 3 4 2.38 2013-Sep-20 09:11:54 4171697.44169 872118.51567 4730016.78197 11.80797 48.17152 536.79779 -2.77179 2.88632 12.20713 -0.95883 -0.70975 3.21160 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.18880 872118.12150 4730016.40404 11.80797 48.17153 535.64451 -2.90123 3.60821 11.05385 -1.08827 0.01214 2.05832 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.77683 872119.67325 4730018.08203 11.80799 48.17153 537.49048 -1.50265 4.06176 12.89982 0.31031 0.46570 3.90429 7 3 4 2.38 2013-Sep-20 09:11:54 4171699.02001 872120.06924 4730019.85566 11.80798 48.17153 540.33046 -1.57407 3.54810 15.73981 0.23889 -0.04797 6.74427 7 3 4 2.38 2013-Sep-20 09:11:54 4171698.82588 872120.41467 4730019.60166 11.80799 48.17153 540.06160 -1.19622 3.46762 15.47095 0.61674 -0.12844 6.47541 7 3 4 2.38 2013-Sep-20 09:11:54 4171697.29935 872120.15303 4730017.94527 11.80799 48.17153 537.79515 -1.13995 3.51628 13.20449 0.67301 -0.07978 4.20896 7 3 4 2.38 2013-Sep-20 09:11:54 4171694.66465 872117.64772 4730013.33391 11.80796 48.17152 532.29721 -3.05310 2.74465 7.70656 -1.24014 -0.85141 -1.28898 7 3 4 2.38 2013-Sep-20 09:11:54 4171692.11116 872116.62846 4730011.91759 11.80796 48.17153 529.43585 -3.52826 3.81797 4.84519 -1.71530 0.22191 -4.15034 7 3 4 2.38 2013-Sep-20 09:11:54 4171693.99142 872117.41529 4730014.03835 11.80796 48.17153 532.35092 -3.14284 3.74092 7.76027 -1.32988 0.14486 -1.23527 7 3 4 2.38 2013-Sep-20 09:11:54 4171691.72624 872116.29942 4730011.10037 11.80795 48.17153 528.53073 -3.77157 3.60389 3.94008 -1.95861 0.00783 -5.05545 7 3 4 2.38 2013-Sep-20 09:11:54 4171695.11009 872118.59125 4730018.09022 11.80798 48.17155 536.26089 -2.22069 5.44788 11.67024 -0.40773 1.85182 2.67471 7 3 4 2.38 2013-Sep-20 09:11:54 4171694.25695 872117.25575 4730016.38096 11.80796 48.17154 534.24807 -3.35334 5.13387 9.65741 -1.54038 1.53781 0.66188 7 3 4 2.38 2013-Sep-20 09:11:54 4171693.02937 872116.83171 4730014.57371 11.80796 48.17154 532.04218 -3.51721 4.88864 7.45152 -1.70425 1.29257 -1.54401 7 3 4 2.38 2013-Sep-20 09:11:54 4171691.02841 872116.92619 4730010.81756 11.80797 48.17153 527.95000 -3.01526 3.82869 3.35934 -1.20231 0.23263 -5.63619 7 3 4 2.38 2013-Sep-20 09:11:54 4171692.96774 872117.52886 4730011.19043 11.80797 48.17152 529.57606 -2.82219 2.57096 4.98540 -1.00924 -1.02510 -4.01013 7 3 4 2.38 2013-Sep-20 09:11:54 4171693.60390 872117.65830 4730013.73263 11.80797 48.17153 531.90331 -2.82567 3.78262 7.31265 -1.01271 0.18656 -1.68288 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.10904 872118.55041 4730016.02482 11.80797 48.17153 535.36840 -2.46507 3.34808 10.77775 -0.65211 -0.24798 1.78222 7 3 4 2.38 2013-Sep-20 09:11:54 4171693.62821 872117.58298 4730016.42395 11.80797 48.17155 533.91432 -2.90438 5.57123 9.32367 -1.09142 1.97517 0.32814 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.74863 872117.80728 4730016.31728 11.80796 48.17153 535.90243 -3.32336 3.18993 11.31177 -1.51040 -0.40613 2.31624 7 3 4 2.38 2013-Sep-20 09:11:54 4171696.73840 872119.19594 4730018.25690 11.80798 48.17154 537.53056 -1.96199 4.27919 12.93990 -0.14903 0.68313 3.94437 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.85869 872119.28301 4730015.82901 11.80799 48.17154 533.85347 -1.28748 4.74714 9.26281 0.52547 1.15108 0.26728 7 3 4 2.38 2013-Sep-20 09:11:55 4171692.22913 872118.76933 4730014.20304 11.80799 48.17154 531.50802 -1.45683 4.92966 6.91736 0.35613 1.33360 -2.07817 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.70261 872119.31345 4730015.79369 11.80799 48.17154 533.72941 -1.22575 4.83278 9.13876 0.58720 1.23672 0.14322 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.19882 872119.82288 4730014.85422 11.80800 48.17154 532.77002 -0.62401 4.49602 8.17937 1.18895 0.89996 -0.81616 7 3 4 2.38 2013-Sep-20 09:11:55 4171692.32530 872118.05042 4730012.73710 11.80798 48.17153 530.38036 -2.18021 3.99150 5.78970 -0.36725 0.39544 -3.20583 7 3 4 2.38 2013-Sep-20 09:11:55 4171696.58322 872119.06658 4730017.54688 11.80798 48.17153 536.88253 -2.05686 3.93858 12.29188 -0.24390 0.34252 3.29635 7 3 4 2.38 2013-Sep-20 09:11:55 4171694.54147 872118.56212 4730014.96255 11.80798 48.17153 533.55516 -2.13284 3.78121 8.96450 -0.31988 0.18515 -0.03103 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.85205 872117.08864 4730013.83536 11.80796 48.17153 532.06411 -3.43407 3.75701 7.47345 -1.62111 0.16094 -1.52208 7 3 4 2.38 2013-Sep-20 09:11:55 4171694.94468 872116.72352 4730015.78012 11.80795 48.17154 534.17666 -4.01505 4.31271 9.58601 -2.20209 0.71665 0.59048 7 3 4 2.38 2013-Sep-20 09:11:55 4171695.16755 872118.14930 4730016.69910 11.80797 48.17154 535.20150 -2.66504 4.54562 10.61084 -0.85208 0.94955 1.61531 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.61509 872117.19836 4730016.43394 11.80796 48.17155 533.86071 -3.27818 5.64611 9.27006 -1.46522 2.05005 0.27452 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.09688 872117.15469 4730014.25086 11.80796 48.17154 531.88976 -3.21488 4.57484 7.29910 -1.40192 0.97878 -1.69643 7 3 4 2.38 2013-Sep-20 09:11:55 4171693.16336 872118.85560 4730015.04595 11.80798 48.17154 532.75774 -1.56356 4.79724 8.16708 0.24939 1.20117 -0.82845 7 3 4 2.38 2013-Sep-20 09:11:55 4171691.17820 872116.93284 4730013.18172 11.80796 48.17155 529.81033 -3.03940 5.29509 5.21967 -1.22644 1.69903 -3.77586 7 3 4 2.38 2013-Sep-20 09:11:55 4171696.49781 872119.37470 4730018.74999 11.80798 48.17154 537.76532 -1.73779 4.75625 13.17466 0.07517 1.16019 4.17913 7 3 4 2.38 2013-Sep-20 09:11:55 4171694.73266 872118.56638 4730016.69162 11.80798 48.17154 534.96896 -2.16780 4.79423 10.37830 -0.35484 1.19817 1.38277 7 3 4 2.38 2013-Sep-20 09:11:55 4171691.58568 872117.19325 4730013.85910 11.80797 48.17155 530.61661 -2.86789 5.40993 6.02595 -1.05493 1.81387 -2.96958 7 3 4 2.38 2013-Sep-20 09:11:55 4171691.02426 872116.64629 4730013.51827 11.80796 48.17155 529.92150 -3.28839 5.67551 5.33085 -1.47543 2.07945 -3.66469 7 3 4 2.38 2013-Sep-20 09:11:55 4171691.44401 872116.22770 4730013.94906 11.80795 48.17155 530.45940 -3.78401 5.72048 5.86874 -1.97106 2.12442 -3.12679 7 3 4 2.38 2013-Sep-20 09:11:55 4171690.78676 872117.59316 4730015.54571 11.80797 48.17156 531.40642 -2.31296 7.05647 6.81577 -0.50000 3.46041 -2.17977 7 3 4 2.38 2013-Sep-20 09:11:55 4171688.22556 872116.06109 4730011.55007 11.80796 48.17156 526.54808 -3.28850 6.49345 1.95743 -1.47554 2.89739 -7.03811 7 3 4 2.38 2013-Sep-20 09:11:55 4171689.65593 872115.23434 4730014.26024 11.80795 48.17156 529.38846 -4.39046 7.38365 4.79780 -2.57750 3.78759 -4.19773 7 3 4 2.38 2013-Sep-20 09:11:55 4171689.83049 872114.17239 4730013.38866 11.80793 48.17156 528.70804 -5.46566 6.83700 4.11738 -3.65270 3.24094 -4.87815 7 3 4 2.38 2013-Sep-20 09:11:55 4171691.12185 872113.74860 4730014.77388 11.80792 48.17156 530.52538 -6.14473 6.88354 5.93472 -4.33177 3.28748 -3.06081 7 3 4 2.38 2013-Sep-20 09:11:55 4171694.18539 872116.30189 4730019.20345 11.80795 48.17156 536.17434 -4.27238 7.21383 11.58368 -2.45942 3.61777 2.58815 7 3 4 2.38 2013-Sep-20 09:11:56 4171699.19494 872117.78896 4730022.47860 11.80795 48.17155 542.08794 -3.84189 5.51745 17.49728 -2.02893 1.92138 8.50175 7 3 4 2.38 2013-Sep-20 09:11:56 4171696.77203 872117.52171 4730019.27596 11.80796 48.17154 538.08338 -3.60768 5.18956 13.49272 -1.79472 1.59350 4.49719 7 3 4 2.38 gnss-sdr-0.0.6/src/utils/gnuplot/statistics/0000755000175000017500000000000012576764164020414 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/gnuplot/statistics/8_GPS_GNSS_SDR_statitics.txt0000644000175000017500000000161512576764164025471 0ustar carlescarlesNum of GPS observation 8 Num of GALILEO observation 0 GDOP mean= 2.002216944 ENU computed at (IFEN true coordinates): ref Longitude = 11.808005630, Ref Latitude = 48.171497670 for Accuracy ENU computed at (average coordinates) mean Longitude = 11.807998091, mean Latitude = 48.171509585 for Precision ACCURACY (respect true position) East offset [m] = -0.560396234, East st. dev = 1.105718017 Nord offset [m] = 1.323685667,Noth st. dev = 1.707810937 Up offset [m] = 10.792857384, Up st. dev = 3.121160956 DRMS= 2.034509899 DUE_DRMS= 4.069019799 CEP= 1.678044871 MRSE= 3.725704798 SEP= 7.079246885 PRECISION (respect average solution) East offset [m] = 0.000000000, East st. dev = 1.105718027 Nord offset [m] = -0.000000005, ,Noth st. dev = 1.707811217 Up offset [m]= -0.000000005, Up st. dev = 3.121160800 ---------------------------------------------------------------------------------------------- gnss-sdr-0.0.6/src/utils/gnuplot/statistics/4_GPS_3_GAL_GNSS_SDR_statitics.txt0000644000175000017500000000161512576764164026372 0ustar carlescarlesNum of GPS observation 4 Num of GALILEO observation 3 GDOP mean= 2.380532594 ENU computed at (IFEN true coordinates): ref Longitude = 11.808005630, Ref Latitude = 48.171497670 for Accuracy ENU computed at (average coordinates) mean Longitude = 11.807981252, mean Latitude = 48.171530020 for Precision ACCURACY (respect true position) East offset [m] = -1.812959237, East st. dev = 1.899085141 Nord offset [m] = 3.596061973,Noth st. dev = 2.422058671 Up offset [m] = 8.995532878, Up st. dev = 3.881428324 DRMS= 3.077806456 DUE_DRMS= 6.155612912 CEP= 2.565164055 MRSE= 4.953622757 SEP= 12.514572993 PRECISION (respect average solution) East offset [m] = 0.000000000, East st. dev = 1.899086239 Nord offset [m] = -0.000000001, ,Noth st. dev = 2.422059160 Up offset [m]= -0.000000003, Up st. dev = 3.881427482 ---------------------------------------------------------------------------------------------- gnss-sdr-0.0.6/src/utils/gnuplot/statistics/8_GAL_GNSS_SDR_statitics.txt0000644000175000017500000000161412576764164025442 0ustar carlescarlesNum of GPS observation 0 Num of GALILEO observation 8 GDOP mean= 1.769225604 ENU computed at (IFEN true coordinates): ref Longitude = 11.808005630, Ref Latitude = 48.171497670 for Accuracy ENU computed at (average coordinates) mean Longitude = 11.808021645, mean Latitude = 48.171514975 for Precision ACCURACY (respect true position) East offset [m] = 1.191616778, East st. dev = 1.370472661 Nord offset [m] = 1.923075914,Noth st. dev = 1.272461214 Up offset [m] = 13.774563698, Up st. dev = 3.492269580 DRMS= 1.870121081 DUE_DRMS= 3.740242162 CEP= 1.556390643 MRSE= 3.961476957 SEP= 8.003582836 PRECISION (respect average solution) East offset [m] = -0.000000002, East st. dev = 1.370472897 Nord offset [m] = -0.000000001, ,Noth st. dev = 1.272461012 Up offset [m]= 0.000000002, Up st. dev = 3.492269562 ---------------------------------------------------------------------------------------------- gnss-sdr-0.0.6/src/utils/gnuplot/8_GAL_GNSS_SDR_solutions.txt0000644000175000017500000113212612576764164023304 0ustar carlescarles time X [m] Y [m] Z [m] Long [deg] Lat [deg] h [m] E(Acc) [m] N(Acc) [m] Up(Acc) [m] E(Pre) [m] N(Pre) [m] Up(Pre) [m] Tot Sat Gal GPS GDOP 2013-Sep-20 09:11:06 4171690.09174 872117.69124 4730009.42695 11.80798 48.17153 526.40674 -2.07473 3.46782 1.81609 -3.26635 1.54475 -11.95848 8 8 0 1.77 2013-Sep-20 09:11:06 4171695.90195 872122.87945 4730017.22237 11.80803 48.17153 536.71635 1.81473 3.63768 12.12569 0.62312 1.71460 -1.64887 8 8 0 1.77 2013-Sep-20 09:11:06 4171695.87749 872123.03123 4730016.66439 11.80803 48.17153 536.30532 1.96830 3.26026 11.71466 0.77668 1.33718 -2.05990 8 8 0 1.77 2013-Sep-20 09:11:06 4171695.91773 872123.24279 4730016.35685 11.80803 48.17152 536.13130 2.16715 2.99355 11.54064 0.97554 1.07047 -2.23392 8 8 0 1.77 2013-Sep-20 09:11:06 4171695.80487 872123.64854 4730016.04804 11.80804 48.17152 535.88289 2.58741 2.80805 11.29223 1.39580 0.88497 -2.48233 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.04572 872123.57449 4730016.18529 11.80804 48.17152 536.13228 2.46564 2.73520 11.54162 1.27403 0.81213 -2.23294 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.85509 872123.52515 4730015.79008 11.80804 48.17151 536.35940 2.25173 1.88882 11.76875 1.06011 -0.03425 -2.00582 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.91214 872123.33123 4730015.96118 11.80803 48.17152 536.49768 2.05024 1.99089 11.90702 0.85862 0.06781 -1.86754 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.23707 872123.07517 4730016.02781 11.80803 48.17152 536.07170 1.93773 2.56675 11.48104 0.74612 0.64368 -2.29352 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.58685 872123.30575 4730016.13060 11.80803 48.17152 536.40809 2.09185 2.34502 11.81744 0.90024 0.42194 -1.95712 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.87751 872123.33042 4730016.34070 11.80803 48.17152 536.75776 2.05653 2.26937 12.16711 0.86491 0.34630 -1.60746 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.53195 872123.66688 4730015.87975 11.80804 48.17152 536.23462 2.45658 2.16271 11.64396 1.26497 0.23963 -2.13060 8 8 0 1.77 2013-Sep-20 09:11:06 4171696.57287 872123.68392 4730016.09343 11.80804 48.17152 536.42288 2.46489 2.27277 11.83222 1.27327 0.34969 -1.94234 8 8 0 1.77 2013-Sep-20 09:11:06 4171697.02839 872123.70216 4730016.50696 11.80804 48.17152 537.03087 2.38953 2.21352 12.44021 1.19791 0.29045 -1.33435 8 8 0 1.77 2013-Sep-20 09:11:06 4171697.69570 872123.58690 4730016.57371 11.80803 48.17151 537.50049 2.14015 1.78890 12.90984 0.94853 -0.13418 -0.86472 8 8 0 1.77 2013-Sep-20 09:11:06 4171698.06350 872123.88883 4730016.53937 11.80804 48.17151 537.75620 2.36043 1.45168 13.16555 1.16882 -0.47139 -0.60902 8 8 0 1.77 2013-Sep-20 09:11:06 4171698.67387 872123.60070 4730016.87180 11.80803 48.17151 538.36303 1.95350 1.27213 13.77238 0.76188 -0.65094 -0.00219 8 8 0 1.77 2013-Sep-20 09:11:06 4171698.33898 872123.79140 4730016.61963 11.80804 48.17151 537.98254 2.20869 1.31914 13.39188 1.01707 -0.60393 -0.38268 8 8 0 1.77 2013-Sep-20 09:11:06 4171698.10171 872124.16670 4730016.64385 11.80804 48.17151 537.89692 2.62460 1.45112 13.30627 1.43298 -0.47195 -0.46830 8 8 0 1.77 2013-Sep-20 09:11:06 4171699.18887 872124.09479 4730017.20895 11.80804 48.17151 539.01787 2.33174 1.04601 14.42722 1.14013 -0.87707 0.65266 8 8 0 1.77 2013-Sep-20 09:11:06 4171699.46096 872124.18783 4730017.06175 11.80804 48.17150 539.09851 2.36714 0.73520 14.50785 1.17552 -1.18787 0.73329 8 8 0 1.77 2013-Sep-20 09:11:06 4171698.71337 872124.28852 4730016.47044 11.80804 48.17151 538.18362 2.61867 0.87078 13.59296 1.42705 -1.05230 -0.18160 8 8 0 1.77 2013-Sep-20 09:11:06 4171698.84586 872124.44077 4730016.25661 11.80804 48.17150 538.13154 2.74060 0.60832 13.54089 1.54898 -1.31475 -0.23367 8 8 0 1.77 2013-Sep-20 09:11:06 4171699.23296 872124.29130 4730016.74645 11.80804 48.17150 538.72885 2.51508 0.67544 14.13819 1.32346 -1.24763 0.36363 8 8 0 1.77 2013-Sep-20 09:11:07 4171699.85309 872124.00482 4730016.76314 11.80803 48.17150 539.10700 2.10775 0.27795 14.51634 0.91614 -1.64512 0.74178 8 8 0 1.77 2013-Sep-20 09:11:07 4171700.44920 872124.15646 4730016.95920 11.80803 48.17150 539.66292 2.13420 -0.04921 15.07227 0.94259 -1.97229 1.29770 8 8 0 1.77 2013-Sep-20 09:11:07 4171700.84145 872124.12219 4730016.95783 11.80803 48.17149 539.91328 2.02039 -0.33099 15.32263 0.82877 -2.25407 1.54807 8 8 0 1.77 2013-Sep-20 09:11:07 4171702.64676 872123.97936 4730018.00266 11.80803 48.17149 541.85083 1.51116 -0.92916 17.26017 0.31954 -2.85224 3.48561 8 8 0 1.77 2013-Sep-20 09:11:07 4171702.80212 872124.05742 4730018.23628 11.80803 48.17149 542.13698 1.55577 -0.89858 17.54633 0.36415 -2.82166 3.77176 8 8 0 1.77 2013-Sep-20 09:11:07 4171703.15548 872123.78902 4730019.14642 11.80802 48.17149 543.00921 1.22074 -0.50841 18.41855 0.02912 -2.43149 4.64399 8 8 0 1.77 2013-Sep-20 09:11:07 4171703.66010 872123.52228 4730019.83110 11.80802 48.17149 543.81240 0.85639 -0.37918 19.22175 -0.33523 -2.30225 5.44719 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.12674 872123.19999 4730020.13818 11.80801 48.17149 544.30186 0.44543 -0.46560 19.71120 -0.74619 -2.38868 5.93664 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.39919 872123.03315 4730020.38764 11.80801 48.17149 544.64283 0.22637 -0.47251 20.05217 -0.96525 -2.39559 6.27761 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.36739 872123.08830 4730021.07685 11.80801 48.17150 545.14315 0.28685 0.00191 20.55250 -0.90477 -1.92117 6.77793 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.35253 872123.27179 4730020.94373 11.80801 48.17150 545.05931 0.46950 -0.10401 20.46865 -0.72212 -2.02709 6.69409 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.28703 872123.16709 4730021.26569 11.80801 48.17149 545.89495 0.17579 -0.55493 21.30429 -1.01583 -2.47801 7.52973 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.61945 872123.31400 4730020.46477 11.80801 48.17149 544.88241 0.45619 -0.62455 20.29176 -0.73542 -2.54763 6.51719 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.22865 872123.19679 4730020.98194 11.80801 48.17149 545.64946 0.21681 -0.70612 21.05881 -0.97481 -2.62920 7.28424 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.29153 872123.10987 4730021.28873 11.80801 48.17149 545.90725 0.11886 -0.53412 21.31659 -1.07276 -2.45720 7.54203 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.32056 872122.86269 4730021.39416 11.80800 48.17149 545.97103 -0.12903 -0.44730 21.38038 -1.32065 -2.37038 7.60581 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.21878 872122.83842 4730021.27904 11.80800 48.17149 545.81550 -0.13196 -0.44614 21.22484 -1.32357 -2.36922 7.45028 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.29993 872122.69109 4730021.34134 11.80800 48.17149 545.89478 -0.29278 -0.44130 21.30413 -1.48439 -2.36438 7.52956 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.12943 872122.44827 4730021.42910 11.80800 48.17150 545.81573 -0.49556 -0.22140 21.22508 -1.68718 -2.14448 7.45052 8 8 0 1.77 2013-Sep-20 09:11:07 4171705.27132 872122.20763 4730021.06649 11.80800 48.17149 545.60532 -0.76015 -0.53002 21.01467 -1.95177 -2.45310 7.24010 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.46387 872122.19636 4730020.56629 11.80800 48.17150 544.70397 -0.60595 -0.27295 20.11331 -1.79757 -2.19603 6.33875 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.09102 872122.00552 4730019.84640 11.80800 48.17149 543.89811 -0.71645 -0.45200 19.30745 -1.90807 -2.37508 5.53289 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.03068 872122.16931 4730020.09435 11.80800 48.17150 544.06583 -0.54379 -0.26761 19.47518 -1.73541 -2.19068 5.70061 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.54052 872121.95102 4730019.91054 11.80799 48.17149 544.23189 -0.86179 -0.72877 19.64124 -2.05341 -2.65185 5.86667 8 8 0 1.77 2013-Sep-20 09:11:07 4171704.52586 872121.68599 4730020.07563 11.80799 48.17149 544.30918 -1.11820 -0.56757 19.71852 -2.30982 -2.49064 5.94396 8 8 0 1.77 2013-Sep-20 09:11:08 4171703.46781 872121.59008 4730019.42381 11.80799 48.17150 543.11970 -0.99558 -0.21592 18.52905 -2.18720 -2.13900 4.75448 8 8 0 1.77 2013-Sep-20 09:11:08 4171703.56751 872121.39341 4730019.33126 11.80799 48.17149 543.08898 -1.20849 -0.32038 18.49832 -2.40010 -2.24346 4.72376 8 8 0 1.77 2013-Sep-20 09:11:08 4171703.78695 872121.17941 4730019.32935 11.80799 48.17149 543.20160 -1.46286 -0.44908 18.61094 -2.65448 -2.37215 4.83638 8 8 0 1.77 2013-Sep-20 09:11:08 4171702.38976 872121.19839 4730018.61087 11.80799 48.17150 541.75675 -1.15838 0.08795 17.16609 -2.34999 -1.83513 3.39153 8 8 0 1.77 2013-Sep-20 09:11:08 4171701.44190 872120.89196 4730017.97117 11.80799 48.17150 540.61951 -1.26436 0.39941 16.02885 -2.45597 -1.52367 2.25429 8 8 0 1.77 2013-Sep-20 09:11:08 4171701.17321 872120.84805 4730017.55023 11.80799 48.17150 540.12445 -1.25236 0.32134 15.53380 -2.44397 -1.60173 1.75923 8 8 0 1.77 2013-Sep-20 09:11:08 4171700.64844 872120.79280 4730016.99803 11.80799 48.17150 539.36288 -1.19905 0.34426 14.77222 -2.39066 -1.57882 0.99766 8 8 0 1.77 2013-Sep-20 09:11:08 4171700.72657 872120.72234 4730016.68361 11.80799 48.17150 539.16998 -1.28400 0.08833 14.57933 -2.47562 -1.83475 0.80476 8 8 0 1.77 2013-Sep-20 09:11:08 4171700.51847 872120.71210 4730016.79140 11.80799 48.17150 539.11306 -1.25145 0.31356 14.52240 -2.44306 -1.60951 0.74784 8 8 0 1.77 2013-Sep-20 09:11:08 4171699.59564 872120.58738 4730016.39961 11.80799 48.17150 538.20168 -1.18468 0.74438 13.61102 -2.37630 -1.17869 -0.16354 8 8 0 1.77 2013-Sep-20 09:11:08 4171699.69147 872120.74568 4730015.50668 11.80799 48.17150 537.62047 -1.04934 0.05485 13.02982 -2.24096 -1.86823 -0.74475 8 8 0 1.77 2013-Sep-20 09:11:08 4171699.67028 872120.96928 4730015.08224 11.80799 48.17150 537.32089 -0.82614 -0.24684 12.73023 -2.01776 -2.16992 -1.04433 8 8 0 1.77 2013-Sep-20 09:11:08 4171699.13180 872120.92148 4730014.75810 11.80800 48.17150 536.72132 -0.76274 -0.06298 12.13066 -1.95436 -1.98605 -1.64390 8 8 0 1.77 2013-Sep-20 09:11:08 4171698.54056 872120.79994 4730014.87738 11.80800 48.17150 536.40766 -0.76072 0.46634 11.81700 -1.95233 -1.45674 -1.95756 8 8 0 1.77 2013-Sep-20 09:11:08 4171698.50011 872120.78189 4730014.88532 11.80800 48.17150 536.38471 -0.77011 0.50389 11.79405 -1.96173 -1.41919 -1.98051 8 8 0 1.77 2013-Sep-20 09:11:08 4171698.01279 872120.82226 4730014.73284 11.80800 48.17150 535.95848 -0.63087 0.75149 11.36783 -1.82249 -1.17158 -2.40674 8 8 0 1.77 2013-Sep-20 09:11:08 4171697.64538 872120.79023 4730014.75466 11.80800 48.17151 535.73052 -0.58704 1.03890 11.13987 -1.77865 -0.88417 -2.63470 8 8 0 1.77 2013-Sep-20 09:11:08 4171697.90082 872120.86625 4730014.52607 11.80800 48.17150 535.73732 -0.56490 0.68855 11.14666 -1.75652 -1.23452 -2.62790 8 8 0 1.77 2013-Sep-20 09:11:08 4171696.84326 872120.98850 4730014.35915 11.80800 48.17151 534.93926 -0.22883 1.32995 10.34860 -1.42044 -0.59312 -3.42596 8 8 0 1.77 2013-Sep-20 09:11:08 4171695.60891 872120.90577 4730014.10071 11.80800 48.17152 533.92962 -0.05722 2.07051 9.33896 -1.24884 0.14744 -4.43560 8 8 0 1.77 2013-Sep-20 09:11:08 4171695.08337 872120.85036 4730013.77167 11.80801 48.17152 533.33381 -0.00391 2.24285 8.74315 -1.19553 0.31977 -5.03141 8 8 0 1.77 2013-Sep-20 09:11:08 4171694.09677 872120.84585 4730013.32604 11.80801 48.17152 532.35709 0.19357 2.66594 7.76644 -0.99805 0.74287 -6.00813 8 8 0 1.77 2013-Sep-20 09:11:08 4171694.13998 872120.97457 4730013.49489 11.80801 48.17152 532.52867 0.31072 2.72741 7.93802 -0.88090 0.80433 -5.83655 8 8 0 1.77 2013-Sep-20 09:11:08 4171693.90878 872120.92639 4730013.89902 11.80801 48.17153 532.67231 0.31087 3.17290 8.08166 -0.88075 1.24983 -5.69290 8 8 0 1.77 2013-Sep-20 09:11:08 4171693.35721 872120.96302 4730013.44275 11.80801 48.17153 531.97727 0.45959 3.26532 7.38661 -0.73202 1.34225 -6.38795 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.26965 872120.98206 4730013.41088 11.80801 48.17153 531.89896 0.49615 3.30504 7.30831 -0.69546 1.38196 -6.46625 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.42279 872120.46546 4730013.89642 11.80801 48.17153 532.29022 -0.04085 3.59593 7.69957 -1.23247 1.67285 -6.07499 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.28081 872120.22254 4730013.87537 11.80800 48.17153 532.14870 -0.24958 3.72248 7.55805 -1.44119 1.79940 -6.21652 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.05769 872120.19556 4730014.09385 11.80800 48.17153 532.16217 -0.23033 4.03504 7.57151 -1.42195 2.11197 -6.20305 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.16991 872120.29757 4730014.99737 11.80800 48.17154 532.92260 -0.15345 4.54019 8.33194 -1.34506 2.61712 -5.44262 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.51563 872120.33168 4730015.60656 11.80800 48.17154 533.60687 -0.19080 4.68910 9.01622 -1.38242 2.76602 -4.75834 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.82702 872120.32165 4730015.89222 11.80800 48.17154 534.02164 -0.26435 4.65402 9.43098 -1.45596 2.73095 -4.34358 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.23686 872120.22858 4730015.86014 11.80800 48.17154 533.59978 -0.23468 5.07726 9.00913 -1.42629 3.15419 -4.76544 8 8 0 1.77 2013-Sep-20 09:11:09 4171693.91039 872119.99872 4730016.40519 11.80800 48.17154 534.41423 -0.59750 4.98456 9.82357 -1.78911 3.06148 -3.95099 8 8 0 1.77 2013-Sep-20 09:11:09 4171694.67842 872119.82583 4730017.41799 11.80799 48.17154 535.64668 -0.92389 5.12616 11.05602 -2.11551 3.20309 -2.71854 8 8 0 1.77 2013-Sep-20 09:11:09 4171695.38824 872119.66040 4730018.64519 11.80799 48.17155 537.00190 -1.23108 5.45209 12.41124 -2.42269 3.52902 -1.36332 8 8 0 1.77 2013-Sep-20 09:11:09 4171696.14748 872119.48348 4730019.58292 11.80798 48.17155 538.17213 -1.55962 5.55068 13.58147 -2.75124 3.62760 -0.19309 8 8 0 1.77 2013-Sep-20 09:11:09 4171696.35202 872119.75902 4730020.40644 11.80799 48.17155 538.95689 -1.33176 5.90868 14.36624 -2.52338 3.98561 0.59167 8 8 0 1.77 2013-Sep-20 09:11:09 4171696.88313 872119.57599 4730020.96384 11.80798 48.17155 539.69397 -1.61960 5.92094 15.10331 -2.81122 3.99786 1.32875 8 8 0 1.77 2013-Sep-20 09:11:09 4171696.74152 872119.83100 4730021.09193 11.80799 48.17155 539.73177 -1.34102 6.07077 15.14111 -2.53263 4.14769 1.36655 8 8 0 1.77 2013-Sep-20 09:11:09 4171697.49636 872119.43551 4730021.60929 11.80798 48.17155 540.55606 -1.88260 5.92553 15.96540 -3.07421 4.00246 2.19084 8 8 0 1.77 2013-Sep-20 09:11:09 4171698.55101 872119.63121 4730022.17056 11.80798 48.17155 541.68946 -1.90686 5.50077 17.09880 -3.09848 3.57770 3.32424 8 8 0 1.77 2013-Sep-20 09:11:09 4171698.65235 872119.79319 4730022.74501 11.80798 48.17155 542.20576 -1.76904 5.78526 17.61510 -2.96066 3.86219 3.84054 8 8 0 1.77 2013-Sep-20 09:11:09 4171699.15523 872119.98931 4730023.14050 11.80798 48.17155 542.85551 -1.67998 5.65232 18.26485 -2.87160 3.72925 4.49029 8 8 0 1.77 2013-Sep-20 09:11:09 4171699.69836 872120.06239 4730022.99798 11.80798 48.17154 543.11383 -1.71959 5.14999 18.52317 -2.91121 3.22692 4.74861 8 8 0 1.77 2013-Sep-20 09:11:09 4171700.43395 872120.14453 4730023.06653 11.80798 48.17154 543.65630 -1.78971 4.64665 19.06565 -2.98132 2.72358 5.29108 8 8 0 1.77 2013-Sep-20 09:11:09 4171700.99916 872120.20326 4730023.33523 11.80798 48.17154 544.23351 -1.84789 4.40465 19.64285 -3.03950 2.48157 5.86829 8 8 0 1.77 2013-Sep-20 09:11:09 4171701.38000 872120.19520 4730023.24155 11.80798 48.17153 544.41120 -1.93370 4.06563 19.82055 -3.12532 2.14255 6.04598 8 8 0 1.77 2013-Sep-20 09:11:09 4171701.05789 872120.68972 4730022.56067 11.80799 48.17153 543.76107 -1.38374 3.77108 19.17041 -2.57536 1.84800 5.39585 8 8 0 1.77 2013-Sep-20 09:11:09 4171701.46908 872120.91525 4730022.18295 11.80799 48.17153 543.77882 -1.24712 3.18488 19.18816 -2.43874 1.26180 5.41360 8 8 0 1.77 2013-Sep-20 09:11:10 4171701.58023 872120.93919 4730022.09128 11.80799 48.17153 543.78632 -1.24643 3.03902 19.19567 -2.43805 1.11595 5.42111 8 8 0 1.77 2013-Sep-20 09:11:10 4171701.80771 872120.92451 4730022.17428 11.80799 48.17152 543.99467 -1.30735 2.93070 19.40402 -2.49897 1.00762 5.62945 8 8 0 1.77 2013-Sep-20 09:11:10 4171702.10623 872120.94227 4730021.68139 11.80799 48.17152 543.82469 -1.35106 2.38154 19.23404 -2.54268 0.45847 5.45947 8 8 0 1.77 2013-Sep-20 09:11:10 4171701.70547 872121.06963 4730021.31991 11.80799 48.17152 543.31111 -1.14438 2.41336 18.72045 -2.33600 0.49028 4.94589 8 8 0 1.77 2013-Sep-20 09:11:10 4171701.29361 872121.27502 4730020.42354 11.80799 48.17152 542.40235 -0.85906 2.08465 17.81169 -2.05068 0.16157 4.03713 8 8 0 1.77 2013-Sep-20 09:11:10 4171702.15788 872121.29444 4730020.53918 11.80799 48.17151 543.05535 -1.01690 1.52843 18.46470 -2.20852 -0.39465 4.69013 8 8 0 1.77 2013-Sep-20 09:11:10 4171701.31166 872121.48948 4730019.49044 11.80800 48.17151 541.74810 -0.65283 1.41649 17.15744 -1.84445 -0.50658 3.38288 8 8 0 1.77 2013-Sep-20 09:11:10 4171700.67722 872121.69934 4730018.88083 11.80800 48.17151 540.90834 -0.31758 1.44069 16.31769 -1.50920 -0.48239 2.54312 8 8 0 1.77 2013-Sep-20 09:11:10 4171700.47169 872121.57520 4730019.02829 11.80800 48.17151 540.86711 -0.39704 1.70787 16.27645 -1.58866 -0.21521 2.50189 8 8 0 1.77 2013-Sep-20 09:11:10 4171700.26985 872121.78261 4730018.47553 11.80800 48.17151 540.35177 -0.15272 1.45482 15.76112 -1.34433 -0.46826 1.98656 8 8 0 1.77 2013-Sep-20 09:11:10 4171699.73759 872122.01538 4730018.01140 11.80801 48.17151 539.69024 0.18405 1.49802 15.09959 -1.00757 -0.42506 1.32502 8 8 0 1.77 2013-Sep-20 09:11:10 4171700.16240 872121.76984 4730017.92161 11.80800 48.17151 539.86713 -0.14323 1.16572 15.27648 -1.33484 -0.75735 1.50191 8 8 0 1.77 2013-Sep-20 09:11:10 4171699.29143 872121.89182 4730017.54829 11.80801 48.17151 539.03704 0.15440 1.53343 14.44639 -1.03722 -0.38965 0.67183 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.64043 872122.24875 4730016.64809 11.80801 48.17151 537.99001 0.63700 1.35347 13.39936 -0.55462 -0.56960 -0.37521 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.18542 872122.54080 4730015.68603 11.80802 48.17151 537.01597 1.01597 0.99921 12.42531 -0.17564 -0.92386 -1.34925 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.10300 872123.04312 4730016.01069 11.80803 48.17151 537.27263 1.52453 1.19926 12.68198 0.33292 -0.72382 -1.09259 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.38702 872122.90404 4730016.09107 11.80802 48.17151 537.49895 1.33027 1.06691 12.90830 0.13866 -0.85616 -0.86627 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.97352 872122.98792 4730016.08821 11.80802 48.17150 537.89112 1.29236 0.62443 13.30047 0.10075 -1.29864 -0.47409 8 8 0 1.77 2013-Sep-20 09:11:10 4171699.03122 872123.03134 4730016.27658 11.80802 48.17150 538.07508 1.32306 0.70135 13.48443 0.13144 -1.22173 -0.29014 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.24631 872123.17208 4730015.22339 11.80803 48.17150 536.79713 1.62143 0.55001 12.20648 0.42982 -1.37307 -1.56809 8 8 0 1.77 2013-Sep-20 09:11:10 4171698.34021 872123.15179 4730015.39629 11.80803 48.17150 536.98449 1.58236 0.59992 12.39384 0.39074 -1.32315 -1.38073 8 8 0 1.77 2013-Sep-20 09:11:10 4171697.25542 872123.30277 4730015.09553 11.80803 48.17151 536.07285 1.95213 1.16755 11.48219 0.76052 -0.75553 -2.29237 8 8 0 1.77 2013-Sep-20 09:11:10 4171696.98971 872123.22913 4730014.99540 11.80803 48.17151 535.81474 1.93442 1.30580 11.22408 0.74281 -0.61728 -2.55048 8 8 0 1.77 2013-Sep-20 09:11:10 4171697.24527 872123.46579 4730014.80902 11.80803 48.17151 535.87498 2.11377 0.95902 11.28432 0.92216 -0.96406 -2.49024 8 8 0 1.77 2013-Sep-20 09:11:10 4171697.63081 872123.46298 4730014.65850 11.80803 48.17150 536.01411 2.03214 0.57786 11.42346 0.84052 -1.34521 -2.35111 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.58770 872123.52009 4730014.77275 11.80803 48.17150 536.07890 2.09685 0.67678 11.48824 0.90524 -1.24629 -2.28632 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.37301 872123.46831 4730014.35261 11.80803 48.17150 535.61862 2.09010 0.56108 11.02797 0.89849 -1.36199 -2.74660 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.62418 872123.51841 4730014.53636 11.80803 48.17150 535.92634 2.08774 0.49279 11.33569 0.89612 -1.43029 -2.43888 8 8 0 1.77 2013-Sep-20 09:11:11 4171698.05794 872123.35000 4730014.81075 11.80803 48.17150 536.39097 1.83414 0.38508 11.80032 0.64252 -1.53800 -1.97425 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.76922 872123.72142 4730014.69968 11.80804 48.17150 536.17041 2.25678 0.46496 11.57976 1.06516 -1.45812 -2.19480 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.49693 872124.08241 4730014.27280 11.80804 48.17150 535.72385 2.66585 0.32383 11.13320 1.47423 -1.59924 -2.64137 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.43463 872124.09685 4730013.67977 11.80804 48.17150 535.24326 2.69273 -0.02843 10.65260 1.50111 -1.95150 -3.12196 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.89277 872124.38960 4730013.65462 11.80804 48.17149 535.56354 2.88553 -0.42399 10.97289 1.69392 -2.34707 -2.80168 8 8 0 1.77 2013-Sep-20 09:11:11 4171696.87298 872124.47881 4730012.99203 11.80805 48.17150 534.41628 3.18155 -0.13567 9.82563 1.98993 -2.05874 -3.94894 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.14707 872124.58215 4730013.49125 11.80805 48.17150 534.98130 3.22661 -0.01841 10.39064 2.03499 -1.94149 -3.38392 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.36153 872124.61276 4730012.93030 11.80805 48.17149 534.70748 3.21268 -0.55359 10.11682 2.02107 -2.47667 -3.65774 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.74458 872124.69070 4730013.17259 11.80805 48.17149 535.14871 3.21059 -0.68328 10.55805 2.01897 -2.60636 -3.21651 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.43006 872124.96244 4730013.10714 11.80805 48.17149 534.93171 3.54094 -0.53897 10.34105 2.34933 -2.46204 -3.43351 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.89405 872125.08445 4730013.57194 11.80805 48.17149 535.59759 3.56543 -0.58602 11.00694 2.37381 -2.50910 -2.76763 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.76316 872125.18967 4730013.17045 11.80806 48.17149 535.22734 3.69520 -0.77434 10.63668 2.50358 -2.69742 -3.13788 8 8 0 1.77 2013-Sep-20 09:11:11 4171698.11365 872125.17006 4730013.59261 11.80805 48.17149 535.76803 3.60429 -0.74546 11.17738 2.41267 -2.66853 -2.59719 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.03236 872125.23536 4730013.06559 11.80806 48.17149 534.67837 3.88947 -0.31822 10.08772 2.69785 -2.24129 -3.68685 8 8 0 1.77 2013-Sep-20 09:11:11 4171696.70714 872125.55944 4730012.24128 11.80806 48.17149 533.89608 4.27324 -0.68016 9.30542 3.08162 -2.60324 -4.46914 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.00094 872125.50340 4730012.20750 11.80806 48.17149 534.05504 4.15827 -0.90844 9.46439 2.96665 -2.83151 -4.31018 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.67318 872125.34472 4730012.12995 11.80806 48.17148 534.41444 3.86539 -1.42628 9.82378 2.67377 -3.34935 -3.95078 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.01248 872125.23489 4730011.74546 11.80806 48.17149 533.68165 3.89307 -1.18404 9.09100 2.70146 -3.10712 -4.68357 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.11120 872124.97548 4730011.18131 11.80805 48.17148 533.29032 3.61895 -1.59272 8.69966 2.42734 -3.51580 -5.07490 8 8 0 1.77 2013-Sep-20 09:11:11 4171697.03702 872124.95784 4730010.96111 11.80805 48.17148 533.07541 3.61687 -1.68279 8.48475 2.42525 -3.60586 -5.28981 8 8 0 1.77 2013-Sep-20 09:11:11 4171696.45357 872124.92561 4730010.43556 11.80806 48.17148 532.29853 3.70472 -1.60280 7.70787 2.51310 -3.52588 -6.06669 8 8 0 1.77 2013-Sep-20 09:11:11 4171696.91253 872124.74980 4730011.04404 11.80805 48.17148 533.02755 3.43871 -1.50496 8.43689 2.24709 -3.42803 -5.33767 8 8 0 1.77 2013-Sep-20 09:11:12 4171697.48545 872124.56586 4730011.42133 11.80805 48.17148 533.65757 3.14142 -1.64317 9.06692 1.94980 -3.56624 -4.70765 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.54723 872124.67524 4730011.11138 11.80805 48.17149 532.82908 3.44048 -1.18224 8.23842 2.24886 -3.10531 -5.53614 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.43289 872124.31922 4730011.00900 11.80805 48.17149 532.62957 3.11539 -1.11283 8.03891 1.92377 -3.03590 -5.73565 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.02901 872124.19992 4730011.12240 11.80805 48.17149 532.43413 3.08126 -0.72443 7.84348 1.88964 -2.64751 -5.93109 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.93339 872124.10071 4730011.09896 11.80805 48.17149 532.34072 3.00372 -0.65519 7.75006 1.81210 -2.57827 -6.02450 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.67926 872123.79863 4730011.38134 11.80804 48.17150 532.34401 2.76003 -0.23545 7.75335 1.56841 -2.15853 -6.02121 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.41879 872123.66780 4730011.16299 11.80804 48.17150 531.99342 2.68527 -0.17115 7.40276 1.49365 -2.09422 -6.37180 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.30856 872123.72314 4730011.51216 11.80804 48.17150 532.18919 2.76199 0.13368 7.59854 1.57038 -1.78939 -6.17603 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.28496 872123.58033 4730011.37221 11.80804 48.17150 532.05001 2.62703 0.07933 7.45936 1.43542 -1.84374 -6.31521 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.59007 872123.70800 4730011.84700 11.80804 48.17150 532.62040 2.68957 0.15397 8.02975 1.49796 -1.76911 -5.74482 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.85486 872123.86528 4730012.08200 11.80804 48.17150 532.98983 2.78934 0.09357 8.39917 1.59772 -1.82950 -5.37539 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.37295 872123.74779 4730012.72629 11.80804 48.17150 533.79208 2.56831 0.16329 9.20143 1.37670 -1.75979 -4.57314 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.98598 872123.76908 4730014.43584 11.80804 48.17151 535.46903 2.46371 0.85301 10.87838 1.27209 -1.07006 -2.89619 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.63440 872124.14644 4730014.26565 11.80804 48.17151 535.16421 2.90503 0.93841 10.57355 1.71341 -0.98466 -3.20101 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.57511 872123.89087 4730013.64608 11.80804 48.17151 533.97616 2.87163 1.33681 9.38551 1.68001 -0.58627 -4.38906 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.74185 872123.78821 4730014.52518 11.80804 48.17151 534.72606 2.73702 1.81711 10.13540 1.54540 -0.10596 -3.63916 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.89201 872124.11853 4730015.45391 11.80805 48.17152 535.56120 3.02963 2.27660 10.97054 1.83801 0.35352 -2.80402 8 8 0 1.77 2013-Sep-20 09:11:12 4171695.93631 872124.20820 4730015.76936 11.80805 48.17152 535.83741 3.10834 2.44099 11.24676 1.91672 0.51791 -2.52780 8 8 0 1.77 2013-Sep-20 09:11:12 4171696.33357 872124.18666 4730016.35551 11.80805 48.17152 536.53057 3.00595 2.54543 11.93991 1.81434 0.62235 -1.83465 8 8 0 1.77 2013-Sep-20 09:11:12 4171697.09059 872124.12562 4730017.11472 11.80804 48.17152 537.58213 2.79129 2.50891 12.99147 1.59968 0.58583 -0.78309 8 8 0 1.77 2013-Sep-20 09:11:12 4171698.16713 872123.87417 4730017.85965 11.80804 48.17152 538.80565 2.32488 2.25884 14.21499 1.13326 0.33576 0.44043 8 8 0 1.77 2013-Sep-20 09:11:12 4171698.28094 872123.56217 4730018.14339 11.80803 48.17152 539.04879 1.99619 2.41263 14.45814 0.80457 0.48956 0.68358 8 8 0 1.77 2013-Sep-20 09:11:12 4171697.80614 872123.80347 4730017.99993 11.80804 48.17152 538.66488 2.32954 2.62646 14.07423 1.13793 0.70339 0.29966 8 8 0 1.77 2013-Sep-20 09:11:12 4171697.94351 872123.90236 4730018.20429 11.80804 48.17152 538.92033 2.39823 2.64748 14.32968 1.20661 0.72441 0.55511 8 8 0 1.77 2013-Sep-20 09:11:12 4171697.61721 872123.47607 4730018.19930 11.80803 48.17152 538.64543 2.04773 2.94715 14.05477 0.85611 1.02408 0.28021 8 8 0 1.77 2013-Sep-20 09:11:13 4171697.82659 872123.35474 4730019.40804 11.80803 48.17153 539.66624 1.88612 3.61905 15.07558 0.69450 1.69597 1.30102 8 8 0 1.77 2013-Sep-20 09:11:13 4171697.62176 872123.44606 4730019.62303 11.80803 48.17153 539.70519 2.01742 3.89790 15.11454 0.82581 1.97482 1.33997 8 8 0 1.77 2013-Sep-20 09:11:13 4171698.87431 872122.93110 4730020.42684 11.80802 48.17153 541.05152 1.25705 3.59891 16.46086 0.06543 1.67583 2.68630 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.44533 872122.87079 4730020.60214 11.80802 48.17153 541.54667 1.08116 3.30852 16.95601 -0.11045 1.38544 3.18145 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.59584 872123.03366 4730020.57068 11.80802 48.17153 541.64370 1.20979 3.15293 17.05304 0.01817 1.22985 3.27848 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.73775 872123.35389 4730020.38648 11.80803 48.17152 541.64279 1.49420 2.87775 17.05213 0.30259 0.95467 3.27757 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.64311 872123.35640 4730020.46653 11.80803 48.17152 541.64100 1.51603 2.99977 17.05034 0.32441 1.07670 3.27578 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.21712 872123.75488 4730020.29000 11.80803 48.17153 541.28576 1.99324 3.13200 16.69510 0.80162 1.20892 2.92054 8 8 0 1.77 2013-Sep-20 09:11:13 4171700.25337 872123.79198 4730020.93678 11.80803 48.17152 542.44922 1.81751 2.80187 17.85856 0.62589 0.87879 4.08400 8 8 0 1.77 2013-Sep-20 09:11:13 4171700.02449 872123.86560 4730020.94229 11.80803 48.17152 542.31395 1.93640 2.96125 17.72330 0.74479 1.03818 3.94874 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.96229 872124.35053 4730020.88645 11.80804 48.17152 542.29792 2.42380 2.89543 17.70727 1.23218 0.97236 3.93271 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.94223 872124.13060 4730020.96577 11.80804 48.17152 542.31392 2.21263 2.99650 17.72326 1.02101 1.07342 3.94870 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.95551 872124.62050 4730021.65044 11.80804 48.17153 542.89963 2.68944 3.36872 18.30897 1.49783 1.44564 4.53441 8 8 0 1.77 2013-Sep-20 09:11:13 4171700.47702 872124.58482 4730021.68841 11.80804 48.17152 543.26349 2.54781 3.01911 18.67283 1.35619 1.09603 4.89827 8 8 0 1.77 2013-Sep-20 09:11:13 4171700.28095 872124.73247 4730021.54846 11.80804 48.17153 543.05136 2.73245 3.04627 18.46070 1.54083 1.12319 4.68614 8 8 0 1.77 2013-Sep-20 09:11:13 4171700.07464 872125.24764 4730021.22221 11.80805 48.17152 542.74389 3.27894 2.90062 18.15324 2.08732 0.97754 4.37867 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.91011 872125.33933 4730021.13579 11.80805 48.17152 542.58460 3.40235 2.94901 17.99394 2.21074 1.02593 4.21938 8 8 0 1.77 2013-Sep-20 09:11:13 4171700.21068 872125.31471 4730021.20773 11.80805 48.17152 542.83105 3.31675 2.78151 18.24040 2.12514 0.85843 4.46583 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.77136 872125.25646 4730021.13332 11.80805 48.17153 542.48087 3.34963 3.06120 17.89022 2.15802 1.13812 4.11566 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.25129 872124.96823 4730020.66025 11.80805 48.17153 541.74954 3.17392 3.16899 17.15888 1.98230 1.24591 3.38432 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.53066 872124.82540 4730021.16397 11.80805 48.17153 542.28776 2.97695 3.32293 17.69710 1.78533 1.39985 3.92254 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.40051 872124.60406 4730020.82907 11.80804 48.17153 541.92305 2.78693 3.22826 17.33239 1.59531 1.30519 3.55783 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.47454 872124.44292 4730020.92136 11.80804 48.17153 542.01815 2.61405 3.26039 17.42749 1.42243 1.33731 3.65293 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.49669 872124.20162 4730020.61892 11.80804 48.17153 541.77431 2.37332 3.07932 17.18366 1.18170 1.15625 3.40910 8 8 0 1.77 2013-Sep-20 09:11:13 4171699.25102 872124.01342 4730020.01884 11.80804 48.17152 541.14111 2.23937 2.88701 16.55046 1.04776 0.96394 2.77589 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.91414 872124.18026 4730020.25250 11.80804 48.17153 541.11808 2.47162 3.26311 16.52742 1.28000 1.34004 2.75286 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.94558 872124.04481 4730020.46691 11.80804 48.17153 541.27989 2.33261 3.40383 16.68923 1.14099 1.48076 2.91467 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.48767 872123.97380 4730021.01330 11.80803 48.17153 542.03121 2.15217 3.38366 17.44055 0.96055 1.46058 3.66599 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.71391 872124.02221 4730021.77278 11.80803 48.17153 542.75143 2.15326 3.71776 18.16078 0.96164 1.79468 4.38621 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.66049 872123.79173 4730020.83737 11.80803 48.17153 541.98809 1.93859 3.16804 17.39743 0.74697 1.24496 3.62287 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.78546 872123.84826 4730021.08573 11.80803 48.17153 542.26244 1.96835 3.23390 17.67178 0.77673 1.31082 3.89722 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.12684 872123.52202 4730020.45431 11.80803 48.17153 541.31748 1.78378 3.34294 16.72683 0.59217 1.41986 2.95226 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.18592 872123.65229 4730020.31277 11.80803 48.17153 541.26836 1.89921 3.18559 16.67770 0.70759 1.26251 2.90314 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.46715 872123.57610 4730019.81331 11.80803 48.17153 540.41658 1.97172 3.38836 15.82592 0.78010 1.46529 2.05136 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.03759 872123.49818 4730018.52927 11.80803 48.17152 539.16874 1.98334 2.85722 14.57809 0.79173 0.93415 0.80353 8 8 0 1.77 2013-Sep-20 09:11:14 4171697.72851 872123.34570 4730018.02089 11.80803 48.17152 538.56735 1.89734 2.76687 13.97669 0.70572 0.84379 0.20213 8 8 0 1.77 2013-Sep-20 09:11:14 4171697.60037 872123.14062 4730017.86697 11.80803 48.17152 538.34102 1.72282 2.78896 13.75037 0.53121 0.86588 -0.02420 8 8 0 1.77 2013-Sep-20 09:11:14 4171696.84702 872122.94029 4730016.92208 11.80803 48.17152 537.11782 1.68089 2.73883 12.52717 0.48927 0.81575 -1.24740 8 8 0 1.77 2013-Sep-20 09:11:14 4171696.87150 872123.04146 4730016.81693 11.80803 48.17152 537.06926 1.77491 2.63542 12.47860 0.58329 0.71234 -1.29596 8 8 0 1.77 2013-Sep-20 09:11:14 4171697.51058 872122.74303 4730016.72694 11.80802 48.17152 537.37867 1.35202 2.15478 12.78801 0.16040 0.23170 -0.98655 8 8 0 1.77 2013-Sep-20 09:11:14 4171697.26988 872122.55436 4730016.04608 11.80802 48.17151 536.68845 1.21659 1.90504 12.09779 0.02498 -0.01804 -1.67677 8 8 0 1.77 2013-Sep-20 09:11:14 4171697.45279 872122.67920 4730016.10089 11.80802 48.17151 536.86573 1.30137 1.78915 12.27507 0.10975 -0.13393 -1.49949 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.38837 872122.65631 4730016.78045 11.80802 48.17151 537.97971 1.08751 1.56345 13.38906 -0.10411 -0.35963 -0.38551 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.62159 872122.57993 4730016.27659 11.80802 48.17151 537.74609 0.96503 1.06897 13.15543 -0.22659 -0.85411 -0.61913 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.47894 872122.27335 4730015.74495 11.80801 48.17151 537.21498 0.69412 0.86520 12.62432 -0.49749 -1.05788 -1.15024 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.10468 872122.29384 4730016.13299 11.80801 48.17150 537.91540 0.58613 0.66447 13.32474 -0.60549 -1.25861 -0.44982 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.96387 872122.26785 4730016.47982 11.80801 48.17151 538.07837 0.58950 1.00243 13.48771 -0.60211 -0.92064 -0.28685 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.90590 872122.05418 4730016.57869 11.80801 48.17151 538.08504 0.39222 1.14323 13.49438 -0.79939 -0.77985 -0.28018 8 8 0 1.77 2013-Sep-20 09:11:14 4171699.10318 872121.94893 4730016.31025 11.80801 48.17151 537.99943 0.24882 0.83636 13.40878 -0.94279 -1.08671 -0.36579 8 8 0 1.77 2013-Sep-20 09:11:14 4171698.64134 872122.04454 4730015.84442 11.80801 48.17151 537.36388 0.43692 0.84798 12.77323 -0.75469 -1.07509 -1.00133 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.08289 872121.82727 4730015.71550 11.80801 48.17151 536.87361 0.33853 1.20246 12.28296 -0.85309 -0.72062 -1.49160 8 8 0 1.77 2013-Sep-20 09:11:15 4171697.99540 872121.67586 4730015.42812 11.80801 48.17151 536.58170 0.20823 1.09770 11.99104 -0.98339 -0.82537 -1.78352 8 8 0 1.77 2013-Sep-20 09:11:15 4171697.96687 872121.49693 4730015.25202 11.80801 48.17151 536.40744 0.03891 1.02836 11.81678 -1.15270 -0.89472 -1.95778 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.49630 872121.24046 4730015.59721 11.80800 48.17151 536.97526 -0.32046 0.91152 12.38461 -1.51208 -1.01156 -1.38996 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.77450 872121.25695 4730015.85827 11.80800 48.17151 537.35364 -0.36125 0.88019 12.76299 -1.55287 -1.04289 -1.01157 8 8 0 1.77 2013-Sep-20 09:11:15 4171699.38934 872120.96868 4730016.41940 11.80800 48.17151 538.13379 -0.76924 0.84992 13.54313 -1.96086 -1.07316 -0.23143 8 8 0 1.77 2013-Sep-20 09:11:15 4171699.05633 872121.06619 4730016.09198 11.80800 48.17151 537.68573 -0.60564 0.85957 13.09508 -1.79726 -1.06350 -0.67949 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.63755 872121.10071 4730016.74233 11.80800 48.17151 537.90168 -0.48616 1.59348 13.31102 -1.67778 -0.32959 -0.46354 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.89157 872121.33224 4730016.92079 11.80800 48.17151 538.23207 -0.31151 1.49192 13.64142 -1.50313 -0.43116 -0.13315 8 8 0 1.77 2013-Sep-20 09:11:15 4171699.08367 872121.74411 4730017.22679 11.80801 48.17151 538.64170 0.05233 1.49307 14.05104 -1.13928 -0.43000 0.27648 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.79269 872121.52569 4730017.46809 11.80800 48.17151 538.60174 -0.10192 1.89953 14.01109 -1.29353 -0.02355 0.23652 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.52361 872121.65880 4730017.45044 11.80801 48.17152 538.43111 0.08343 2.06373 13.84045 -1.10818 0.14065 0.06589 8 8 0 1.77 2013-Sep-20 09:11:15 4171699.44786 872121.63614 4730018.24048 11.80800 48.17151 539.62005 -0.12788 1.91993 15.02939 -1.31950 -0.00314 1.25483 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.45350 872121.91485 4730017.62102 11.80801 48.17152 538.54739 0.34842 2.18958 13.95673 -0.84320 0.26650 0.18217 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.39682 872121.99148 4730017.57517 11.80801 48.17152 538.48668 0.43502 2.18866 13.89603 -0.75660 0.26559 0.12146 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.42624 872121.98868 4730017.76592 11.80801 48.17152 538.64764 0.42626 2.29484 14.05698 -0.76536 0.37176 0.28242 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.30969 872122.48771 4730017.39076 11.80802 48.17152 538.36011 0.93857 2.05356 13.76946 -0.25304 0.13048 -0.00511 8 8 0 1.77 2013-Sep-20 09:11:15 4171698.20917 872122.47823 4730016.57935 11.80802 48.17151 537.68858 0.94987 1.58719 13.09792 -0.24174 -0.33588 -0.67664 8 8 0 1.77 2013-Sep-20 09:11:15 4171697.79002 872122.42314 4730016.23356 11.80802 48.17151 537.14978 0.98172 1.67070 12.55913 -0.20990 -0.25237 -1.21544 8 8 0 1.77 2013-Sep-20 09:11:15 4171697.66796 872122.72080 4730016.34959 11.80802 48.17151 537.19719 1.29805 1.79172 12.60653 0.10644 -0.13135 -1.16803 8 8 0 1.77 2013-Sep-20 09:11:15 4171697.40522 872123.39023 4730016.18432 11.80803 48.17151 536.99388 2.00708 1.77107 12.40322 0.81547 -0.15201 -1.37134 8 8 0 1.77 2013-Sep-20 09:11:15 4171697.07807 872123.45260 4730015.62570 11.80803 48.17151 536.37257 2.13508 1.62762 11.78192 0.94347 -0.29545 -1.99264 8 8 0 1.77 2013-Sep-20 09:11:15 4171696.71097 872123.70059 4730014.69900 11.80804 48.17151 535.47625 2.45295 1.23955 10.88560 1.26133 -0.68353 -2.88897 8 8 0 1.77 2013-Sep-20 09:11:15 4171696.56606 872123.80873 4730014.77274 11.80804 48.17151 535.45136 2.58845 1.37793 10.86071 1.39683 -0.54515 -2.91385 8 8 0 1.77 2013-Sep-20 09:11:15 4171696.23405 872123.72735 4730014.17300 11.80804 48.17151 534.77663 2.57673 1.23253 10.18597 1.38511 -0.69055 -3.58859 8 8 0 1.77 2013-Sep-20 09:11:16 4171695.76749 872123.87198 4730014.16296 11.80804 48.17151 534.48432 2.81377 1.54408 9.89367 1.62215 -0.37900 -3.88090 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.02416 872123.73185 4730014.57571 11.80804 48.17151 534.94030 2.62409 1.65350 10.34965 1.43247 -0.26958 -3.42491 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.60945 872124.01511 4730014.61794 11.80804 48.17151 535.39250 2.78158 1.21157 10.80185 1.58996 -0.71150 -2.97272 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.07045 872123.98186 4730014.75445 11.80804 48.17151 535.79062 2.65470 0.97145 11.19997 1.46309 -0.95163 -2.57460 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.87884 872124.23799 4730014.68182 11.80805 48.17151 535.64637 2.94462 1.02370 11.05572 1.75300 -0.89937 -2.71885 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.17294 872124.09537 4730014.96779 11.80804 48.17151 536.03199 2.74483 1.02166 11.44133 1.55322 -0.90141 -2.33323 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.89121 872124.15618 4730014.37905 11.80804 48.17151 535.41768 2.86201 0.82524 10.82702 1.67040 -1.09784 -2.94754 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.35878 872123.86389 4730015.25049 11.80804 48.17151 536.33236 2.48022 1.10994 11.74170 1.28861 -0.81314 -2.03286 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.65807 872123.73390 4730015.20797 11.80804 48.17151 536.47831 2.29174 0.88311 11.88766 1.10013 -1.03997 -1.88691 8 8 0 1.77 2013-Sep-20 09:11:16 4171698.26866 872123.51200 4730015.81205 11.80803 48.17151 537.29675 1.94959 0.87445 12.70609 0.75798 -1.04862 -1.06847 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.98163 872123.30488 4730016.09369 11.80803 48.17151 537.29097 1.80558 1.30322 12.70032 0.61397 -0.61986 -1.07424 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.03311 872123.38044 4730016.50152 11.80803 48.17152 536.98599 2.07364 2.25551 12.39534 0.88203 0.33243 -1.37922 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.89834 872123.51321 4730017.03412 11.80804 48.17152 537.31300 2.23119 2.68875 12.72235 1.03957 0.76568 -1.05221 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.71739 872123.30362 4730016.89129 11.80803 48.17152 537.05984 2.06306 2.75744 12.46919 0.87145 0.83437 -1.30538 8 8 0 1.77 2013-Sep-20 09:11:16 4171696.76905 872123.05492 4730017.10611 11.80803 48.17152 537.21970 1.80905 2.90095 12.62905 0.61743 0.97787 -1.14552 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.67359 872122.75588 4730017.65716 11.80802 48.17152 538.17997 1.33124 2.65429 13.58932 0.13962 0.73122 -0.18525 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.08714 872122.79009 4730017.15099 11.80803 48.17152 537.42464 1.48473 2.73925 12.83399 0.29312 0.81617 -0.94057 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.52809 872122.85648 4730017.25585 11.80803 48.17152 537.79969 1.45949 2.47744 13.20903 0.26787 0.55436 -0.56553 8 8 0 1.77 2013-Sep-20 09:11:16 4171697.67236 872122.69889 4730017.77907 11.80802 48.17152 538.26224 1.27571 2.74518 13.67158 0.08409 0.82211 -0.10298 8 8 0 1.77 2013-Sep-20 09:11:16 4171698.07733 872122.47063 4730018.44767 11.80802 48.17152 538.99365 0.96941 2.93050 14.40300 -0.22220 1.00742 0.62843 8 8 0 1.77 2013-Sep-20 09:11:16 4171698.77564 872122.35047 4730018.48478 11.80802 48.17152 539.46075 0.70889 2.46424 14.87009 -0.48272 0.54117 1.09553 8 8 0 1.77 2013-Sep-20 09:11:16 4171698.93202 872122.39536 4730018.96685 11.80802 48.17152 539.92818 0.72083 2.66483 15.33753 -0.47078 0.74175 1.56296 8 8 0 1.77 2013-Sep-20 09:11:16 4171699.04167 872122.35148 4730018.76417 11.80801 48.17152 539.84274 0.65544 2.45638 15.25208 -0.53618 0.53331 1.47752 8 8 0 1.77 2013-Sep-20 09:11:16 4171699.40684 872122.21730 4730019.11357 11.80801 48.17152 540.32316 0.44938 2.44351 15.73251 -0.74224 0.52044 1.95794 8 8 0 1.77 2013-Sep-20 09:11:16 4171699.73210 872122.37134 4730019.90582 11.80801 48.17152 541.14684 0.53360 2.71113 16.55619 -0.65802 0.78806 2.78163 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.25783 872122.75230 4730020.46281 11.80802 48.17152 541.95707 0.79891 2.64105 17.36641 -0.39270 0.71798 3.59185 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.30094 872123.07921 4730020.17611 11.80802 48.17152 541.81619 1.11009 2.36855 17.22553 -0.08153 0.44548 3.45097 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.35673 872123.27467 4730019.86431 11.80802 48.17152 541.64694 1.29000 2.09012 17.05629 0.09838 0.16705 3.28173 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.64590 872123.00329 4730020.80627 11.80802 48.17152 542.50058 0.96518 2.54878 17.90993 -0.22644 0.62571 4.13536 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.78272 872122.85819 4730020.82988 11.80802 48.17152 542.58769 0.79516 2.48686 17.99703 -0.39646 0.56378 4.22247 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.25994 872122.80094 4730021.24616 11.80801 48.17152 543.20158 0.64147 2.42514 18.61093 -0.55015 0.50206 4.83636 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.62909 872122.50823 4730021.47266 11.80801 48.17152 543.57139 0.27941 2.35158 18.98074 -0.91221 0.42850 5.20618 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.71174 872122.49782 4730021.63640 11.80801 48.17152 543.74594 0.25231 2.40208 19.15528 -0.93931 0.47900 5.38072 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.59630 872122.19521 4730021.49558 11.80801 48.17152 543.52435 -0.02028 2.43851 18.93369 -1.21189 0.51543 5.15913 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.10367 872122.06529 4730021.15545 11.80800 48.17152 542.93158 -0.04665 2.59080 18.34093 -1.23826 0.66772 4.56636 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.63756 872121.95665 4730021.86297 11.80800 48.17152 543.79248 -0.26223 2.68980 19.20182 -1.45385 0.76673 5.42726 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.48390 872121.87848 4730021.77785 11.80800 48.17152 543.61808 -0.30731 2.75703 19.02742 -1.49893 0.83395 5.25286 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.98971 872121.83147 4730021.39755 11.80800 48.17152 543.00568 -0.25220 2.87102 18.41502 -1.44382 0.94795 4.64046 8 8 0 1.77 2013-Sep-20 09:11:17 4171701.19113 872121.70623 4730021.67298 11.80800 48.17152 543.32531 -0.41600 2.92690 18.73465 -1.60762 1.00382 4.96009 8 8 0 1.77 2013-Sep-20 09:11:17 4171700.60881 872121.66760 4730021.76511 11.80800 48.17153 543.00855 -0.33466 3.41896 18.41790 -1.52627 1.49588 4.64334 8 8 0 1.77 2013-Sep-20 09:11:17 4171699.71756 872121.37757 4730020.94067 11.80800 48.17153 541.77285 -0.43616 3.56342 17.18220 -1.62778 1.64034 3.40763 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.26359 872121.47589 4730020.37559 11.80801 48.17154 540.41606 -0.04240 4.23206 15.82541 -1.23401 2.30898 2.05085 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.54233 872121.69538 4730020.06529 11.80801 48.17153 540.39675 0.11541 3.78835 15.80610 -1.07620 1.86527 2.03154 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.96231 872121.86345 4730019.68954 11.80801 48.17153 540.41386 0.19399 3.20581 15.82321 -0.99763 1.28273 2.04865 8 8 0 1.77 2013-Sep-20 09:11:17 4171699.68697 872122.10618 4730019.81008 11.80801 48.17152 541.00986 0.28328 2.72064 16.41921 -0.90834 0.79756 2.64465 8 8 0 1.77 2013-Sep-20 09:11:17 4171699.05737 872122.54860 4730019.02664 11.80802 48.17152 540.07547 0.84518 2.58992 15.48481 -0.34643 0.66684 1.71025 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.57757 872122.69473 4730018.73724 11.80802 48.17152 539.56656 1.08640 2.72458 14.97590 -0.10522 0.80151 1.20134 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.39753 872123.19964 4730017.91848 11.80803 48.17152 538.90784 1.61747 2.23288 14.31718 0.42586 0.30980 0.54262 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.07742 872123.38382 4730017.83518 11.80803 48.17152 538.66194 1.86325 2.38272 14.07128 0.67164 0.45965 0.29672 8 8 0 1.77 2013-Sep-20 09:11:17 4171698.59805 872123.36775 4730018.14870 11.80803 48.17152 539.23322 1.74099 2.21452 14.64257 0.54937 0.29145 0.86800 8 8 0 1.77 2013-Sep-20 09:11:18 4171699.01191 872123.35087 4730018.56290 11.80803 48.17152 539.80973 1.63978 2.19147 15.21907 0.44816 0.26839 1.44451 8 8 0 1.77 2013-Sep-20 09:11:18 4171698.97188 872123.26281 4730018.28279 11.80803 48.17152 539.56285 1.56177 2.04728 14.97220 0.37016 0.12421 1.19763 8 8 0 1.77 2013-Sep-20 09:11:18 4171698.71650 872123.36825 4730017.93564 11.80803 48.17152 539.15186 1.71724 1.98596 14.56120 0.52563 0.06289 0.78664 8 8 0 1.77 2013-Sep-20 09:11:18 4171698.65601 872123.28131 4730018.10186 11.80803 48.17152 539.22436 1.64452 2.15419 14.63371 0.45290 0.23112 0.85915 8 8 0 1.77 2013-Sep-20 09:11:18 4171698.48721 872123.23660 4730017.66980 11.80803 48.17152 538.78612 1.63530 1.99599 14.19547 0.44368 0.07291 0.42091 8 8 0 1.77 2013-Sep-20 09:11:18 4171697.89940 872123.48445 4730017.12269 11.80803 48.17152 538.02855 1.99818 2.02206 13.43790 0.80657 0.09899 -0.33667 8 8 0 1.77 2013-Sep-20 09:11:18 4171697.78241 872123.34420 4730016.62738 11.80803 48.17151 537.56397 1.88485 1.79845 12.97331 0.69323 -0.12463 -0.80125 8 8 0 1.77 2013-Sep-20 09:11:18 4171697.27070 872123.21238 4730016.31093 11.80803 48.17152 536.97613 1.86052 1.98074 12.38548 0.66891 0.05767 -1.38908 8 8 0 1.77 2013-Sep-20 09:11:18 4171697.04476 872123.45873 4730015.62691 11.80803 48.17151 536.35257 2.14789 1.65179 11.76191 0.95628 -0.27129 -2.01265 8 8 0 1.77 2013-Sep-20 09:11:18 4171696.81462 872123.53696 4730015.41589 11.80804 48.17151 536.05578 2.27156 1.66699 11.46512 1.07995 -0.25608 -2.30944 8 8 0 1.77 2013-Sep-20 09:11:18 4171696.73928 872123.68661 4730015.23713 11.80804 48.17151 535.89381 2.43347 1.57991 11.30315 1.24185 -0.34316 -2.47141 8 8 0 1.77 2013-Sep-20 09:11:18 4171696.86044 872123.69440 4730015.14403 11.80804 48.17151 535.90459 2.41629 1.42827 11.31394 1.22468 -0.49481 -2.46063 8 8 0 1.77 2013-Sep-20 09:11:18 4171696.12220 872123.86922 4730014.99001 11.80804 48.17151 535.33177 2.73849 1.83735 10.74111 1.54688 -0.08573 -3.03345 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.43422 872124.19819 4730014.59030 11.80805 48.17152 534.62971 3.20127 2.02241 10.03906 2.00966 0.09933 -3.73551 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.57757 872124.52787 4730014.86230 11.80805 48.17152 534.97097 3.49464 2.04898 10.38031 2.30303 0.12591 -3.39425 8 8 0 1.77 2013-Sep-20 09:11:18 4171694.92657 872124.73326 4730014.20356 11.80806 48.17152 534.08317 3.82891 2.05317 9.49251 2.63730 0.13010 -4.28205 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.32272 872124.78485 4730014.57097 11.80806 48.17152 534.62258 3.79835 2.00139 10.03193 2.60673 0.07831 -3.74264 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.05832 872124.92389 4730014.45829 11.80806 48.17152 534.38500 3.98855 2.09789 9.79435 2.79693 0.17482 -3.98022 8 8 0 1.77 2013-Sep-20 09:11:18 4171694.64429 872124.85934 4730014.41449 11.80806 48.17152 534.07328 4.01008 2.38051 9.48263 2.81847 0.45743 -4.29194 8 8 0 1.77 2013-Sep-20 09:11:18 4171694.60342 872124.97553 4730014.06059 11.80806 48.17152 533.79875 4.13218 2.15658 9.20809 2.94056 0.23351 -4.56647 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.56341 872124.83096 4730014.66618 11.80806 48.17151 534.85695 3.79422 1.88230 10.26629 2.60260 -0.04077 -3.50827 8 8 0 1.77 2013-Sep-20 09:11:18 4171696.13787 872124.72235 4730014.93275 11.80805 48.17151 535.41575 3.57036 1.65764 10.82510 2.37874 -0.26544 -2.94947 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.76128 872124.58792 4730014.67370 11.80805 48.17151 534.95855 3.51584 1.78006 10.36789 2.32422 -0.14302 -3.40667 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.60814 872124.58599 4730014.91591 11.80805 48.17152 535.03880 3.54529 2.05357 10.44814 2.35367 0.13050 -3.32642 8 8 0 1.77 2013-Sep-20 09:11:18 4171695.36035 872124.32980 4730014.99277 11.80805 48.17152 534.89935 3.34522 2.32463 10.30870 2.15360 0.40155 -3.46587 8 8 0 1.77 2013-Sep-20 09:11:19 4171695.33369 872124.19849 4730014.79623 11.80805 48.17152 534.71758 3.22214 2.23302 10.12692 2.03053 0.30994 -3.64764 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.14726 872124.20623 4730015.45887 11.80805 48.17152 535.74348 3.06323 2.08036 11.15283 1.87162 0.15728 -2.62173 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.53708 872123.99906 4730015.14245 11.80804 48.17151 535.73390 2.78068 1.61661 11.14325 1.58906 -0.30647 -2.63131 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.21012 872123.84261 4730015.34223 11.80804 48.17152 535.64799 2.69445 2.01217 11.05733 1.50283 0.08910 -2.71723 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.94605 872123.86905 4730016.27008 11.80804 48.17152 536.82338 2.56973 2.09015 12.23273 1.37811 0.16708 -1.54184 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.97450 872123.66022 4730016.09887 11.80804 48.17152 536.68588 2.35950 1.98706 12.09522 1.16788 0.06399 -1.67934 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.29007 872123.59244 4730016.21878 11.80804 48.17151 536.97198 2.22858 1.84720 12.38132 1.03696 -0.07588 -1.39324 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.07984 872123.65501 4730015.82226 11.80804 48.17151 536.54781 2.33284 1.72656 11.95716 1.14123 -0.19652 -1.81741 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.15030 872123.32240 4730016.46139 11.80803 48.17152 537.02467 1.99286 2.15212 12.43401 0.80124 0.22904 -1.34055 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.19098 872123.03451 4730016.30652 11.80803 48.17152 536.89653 1.70273 2.06307 12.30588 0.51111 0.13999 -1.46869 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.51756 872122.69345 4730016.31784 11.80802 48.17151 537.07161 1.30207 1.88442 12.48096 0.11045 -0.03865 -1.29361 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.70450 872122.76573 4730016.13499 11.80803 48.17152 536.41448 1.53919 2.34448 11.82382 0.34757 0.42141 -1.95074 8 8 0 1.77 2013-Sep-20 09:11:19 4171696.87494 872122.64814 4730016.40702 11.80802 48.17152 536.71238 1.38921 2.41951 12.12173 0.19759 0.49644 -1.65283 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.31212 872122.47654 4730017.33342 11.80802 48.17152 537.66466 1.13178 2.74462 13.07400 -0.05983 0.82155 -0.70056 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.29013 872122.52262 4730017.32786 11.80802 48.17152 537.65245 1.18138 2.74993 13.06179 -0.01023 0.82686 -0.71277 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.10639 872122.33574 4730017.40037 11.80802 48.17152 537.56103 1.03606 2.96080 12.97037 -0.15555 1.03773 -0.80419 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.30020 872122.29259 4730017.58092 11.80802 48.17152 537.81619 0.95416 2.94643 13.22554 -0.23746 1.02335 -0.54903 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.20801 872122.53025 4730017.62047 11.80802 48.17152 537.81792 1.20566 3.00380 13.22726 0.01404 1.08073 -0.54730 8 8 0 1.77 2013-Sep-20 09:11:19 4171698.01302 872122.35572 4730018.02466 11.80802 48.17152 538.62078 0.87009 2.71282 14.03013 -0.32153 0.78975 0.25556 8 8 0 1.77 2013-Sep-20 09:11:19 4171697.90360 872122.47092 4730017.42859 11.80802 48.17152 538.12092 1.00524 2.37754 13.53026 -0.18637 0.45447 -0.24430 8 8 0 1.77 2013-Sep-20 09:11:19 4171698.30651 872122.71175 4730018.19742 11.80802 48.17152 538.98969 1.15852 2.55969 14.39904 -0.03309 0.63661 0.62447 8 8 0 1.77 2013-Sep-20 09:11:19 4171698.75000 872122.58293 4730018.09188 11.80802 48.17152 539.18297 0.94168 2.18547 14.59231 -0.24993 0.26239 0.81775 8 8 0 1.77 2013-Sep-20 09:11:19 4171698.96093 872122.61433 4730018.01857 11.80802 48.17152 539.27032 0.92925 1.97795 14.67967 -0.26237 0.05488 0.90510 8 8 0 1.77 2013-Sep-20 09:11:19 4171699.16651 872122.51885 4730018.41188 11.80802 48.17152 539.68457 0.79373 2.10485 15.09391 -0.39789 0.18178 1.31935 8 8 0 1.77 2013-Sep-20 09:11:19 4171699.27467 872122.63642 4730018.51296 11.80802 48.17152 539.84654 0.88668 2.07545 15.25589 -0.30494 0.15238 1.48132 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.27310 872122.82630 4730018.51648 11.80802 48.17152 539.87405 1.07286 2.04999 15.28339 -0.11875 0.12691 1.50883 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.52307 872122.59839 4730018.68419 11.80802 48.17152 540.13109 0.79862 2.01427 15.54043 -0.39300 0.09119 1.76587 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.39555 872122.52276 4730018.53608 11.80802 48.17152 539.92716 0.75068 2.02003 15.33651 -0.44094 0.09696 1.56194 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.66411 872122.59066 4730019.46820 11.80802 48.17152 540.80631 0.76220 2.43544 16.21566 -0.42942 0.51236 2.44109 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.08064 872122.48064 4730019.46887 11.80802 48.17152 540.41091 0.77390 2.87823 15.82025 -0.41772 0.95515 2.04569 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.20437 872122.70883 4730019.42476 11.80802 48.17152 540.48995 0.97194 2.72377 15.89929 -0.21968 0.80069 2.12473 8 8 0 1.77 2013-Sep-20 09:11:20 4171699.66187 872122.30732 4730020.19524 11.80801 48.17152 541.30792 0.48531 2.96514 16.71727 -0.70631 1.04206 2.94271 8 8 0 1.77 2013-Sep-20 09:11:20 4171698.79254 872122.23258 4730019.96085 11.80801 48.17153 540.55558 0.59004 3.45428 15.96493 -0.60158 1.53121 2.19036 8 8 0 1.77 2013-Sep-20 09:11:20 4171698.76187 872122.62245 4730019.44329 11.80802 48.17153 540.20311 0.97793 3.07205 15.61246 -0.21368 1.14897 1.83789 8 8 0 1.77 2013-Sep-20 09:11:20 4171698.06897 872122.92318 4730018.43003 11.80802 48.17152 539.03681 1.41410 2.85583 14.44616 0.22248 0.93275 0.67159 8 8 0 1.77 2013-Sep-20 09:11:20 4171697.94739 872122.73810 4730018.12768 11.80802 48.17152 538.70689 1.25781 2.77109 14.11624 0.06619 0.84801 0.34167 8 8 0 1.77 2013-Sep-20 09:11:20 4171697.60251 872122.55050 4730017.81273 11.80802 48.17152 538.22147 1.14475 2.84120 13.63081 -0.04687 0.91812 -0.14375 8 8 0 1.77 2013-Sep-20 09:11:20 4171697.59018 872122.39367 4730017.83808 11.80802 48.17152 538.21091 0.99377 2.89102 13.62025 -0.19785 0.96794 -0.15431 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.56053 872122.37574 4730017.29676 11.80802 48.17153 537.13296 1.18691 3.28374 12.54230 -0.00471 1.36067 -1.23226 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.92326 872122.08773 4730017.79658 11.80802 48.17153 537.70287 0.83077 3.39643 13.11222 -0.36085 1.47335 -0.66235 8 8 0 1.77 2013-Sep-20 09:11:20 4171697.09465 872122.07369 4730017.42650 11.80802 48.17152 537.53707 0.78195 3.02675 12.94642 -0.40966 1.10367 -0.82815 8 8 0 1.77 2013-Sep-20 09:11:20 4171697.31264 872122.04105 4730017.32319 11.80802 48.17152 537.59794 0.70540 2.80383 13.00728 -0.48622 0.88076 -0.76728 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.76097 872122.21946 4730016.73529 11.80802 48.17152 536.82410 0.99293 2.78693 12.23344 -0.19869 0.86386 -1.54112 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.84017 872121.85219 4730016.96757 11.80801 48.17152 536.99876 0.61722 2.94008 12.40810 -0.57440 1.01700 -1.36646 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.89973 872121.78744 4730017.09349 11.80801 48.17152 537.12263 0.54165 2.99048 12.53197 -0.64997 1.06741 -1.24259 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.25761 872122.04883 4730016.56199 11.80802 48.17153 536.34309 0.92890 3.06451 11.75244 -0.26271 1.14144 -2.02213 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.65603 872122.07354 4730017.12168 11.80802 48.17153 537.02359 0.87156 3.14341 12.43294 -0.32005 1.22033 -1.34162 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.16724 872122.19517 4730016.77955 11.80802 48.17153 536.46617 1.09064 3.25320 11.87552 -0.10097 1.33013 -1.89905 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.12766 872122.35818 4730017.13923 11.80802 48.17153 536.73060 1.25830 3.49708 12.13994 0.06669 1.57401 -1.63462 8 8 0 1.77 2013-Sep-20 09:11:20 4171696.51123 872122.29424 4730017.32557 11.80802 48.17153 537.11111 1.11723 3.35135 12.52046 -0.07438 1.42827 -1.25411 8 8 0 1.77 2013-Sep-20 09:11:21 4171697.04976 872122.26342 4730017.57212 11.80802 48.17153 537.64217 0.97686 3.12768 13.05152 -0.21476 1.20461 -0.72305 8 8 0 1.77 2013-Sep-20 09:11:21 4171697.23816 872122.07833 4730017.34295 11.80802 48.17152 537.56913 0.75713 2.86565 12.97847 -0.43449 0.94258 -0.79609 8 8 0 1.77 2013-Sep-20 09:11:21 4171697.53900 872122.18451 4730016.85821 11.80802 48.17152 537.41881 0.79951 2.30676 12.82815 -0.39211 0.38369 -0.94641 8 8 0 1.77 2013-Sep-20 09:11:21 4171697.65847 872122.30906 4730016.48693 11.80802 48.17152 537.23714 0.89697 1.95302 12.64648 -0.29465 0.02994 -1.12808 8 8 0 1.77 2013-Sep-20 09:11:21 4171697.52556 872122.12433 4730017.09298 11.80802 48.17152 537.57676 0.74335 2.48230 12.98610 -0.44827 0.55923 -0.78846 8 8 0 1.77 2013-Sep-20 09:11:21 4171698.01397 872121.97372 4730017.35973 11.80801 48.17152 538.07380 0.49598 2.32693 13.48314 -0.69564 0.40385 -0.29142 8 8 0 1.77 2013-Sep-20 09:11:21 4171698.80231 872122.14655 4730018.06228 11.80801 48.17152 539.13551 0.50383 2.19412 14.54485 -0.68779 0.27104 0.77029 8 8 0 1.77 2013-Sep-20 09:11:21 4171698.71250 872122.29870 4730017.98215 11.80801 48.17152 539.03794 0.67114 2.18298 14.44728 -0.52047 0.25991 0.67272 8 8 0 1.77 2013-Sep-20 09:11:21 4171699.10729 872122.07044 4730018.73306 11.80801 48.17152 539.82404 0.36692 2.43062 15.23338 -0.82469 0.50755 1.45882 8 8 0 1.77 2013-Sep-20 09:11:21 4171698.28009 872122.26908 4730018.27515 11.80802 48.17152 538.96995 0.73064 2.69829 14.37930 -0.46098 0.77522 0.60473 8 8 0 1.77 2013-Sep-20 09:11:21 4171699.19818 872122.29725 4730019.24244 11.80801 48.17152 540.29389 0.57034 2.66945 15.70323 -0.62128 0.74638 1.92867 8 8 0 1.77 2013-Sep-20 09:11:21 4171700.69256 872121.82900 4730020.69249 11.80800 48.17152 542.28600 -0.19381 2.61793 17.69534 -1.38543 0.69485 3.92078 8 8 0 1.77 2013-Sep-20 09:11:21 4171700.84964 872121.86280 4730021.03791 11.80800 48.17152 542.65054 -0.19286 2.72857 18.05989 -1.38448 0.80549 4.28532 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.16657 872122.08856 4730021.73122 11.80801 48.17152 543.40486 -0.03674 2.92535 18.81420 -1.22835 1.00228 5.03964 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.22798 872122.45284 4730021.79066 11.80801 48.17152 543.53895 0.30726 2.86466 18.94829 -0.88435 0.94158 5.17373 8 8 0 1.77 2013-Sep-20 09:11:21 4171700.68390 872122.55199 4730021.56941 11.80801 48.17153 543.03244 0.51566 3.09883 18.44179 -0.67596 1.17575 4.66722 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.10633 872122.77780 4730021.66301 11.80801 48.17152 543.40876 0.65025 2.81871 18.81811 -0.54137 0.89563 5.04354 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.53388 872122.88169 4730022.32459 11.80801 48.17152 544.19502 0.66444 2.93223 19.60436 -0.52717 1.00915 5.82980 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.08281 872122.95332 4730022.42754 11.80802 48.17153 543.98705 0.82687 3.31896 19.39639 -0.36475 1.39588 5.62183 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.69585 872123.01475 4730022.72729 11.80802 48.17153 544.61897 0.76155 3.06236 20.02832 -0.43007 1.13929 6.25376 8 8 0 1.77 2013-Sep-20 09:11:21 4171702.00964 872123.02682 4730023.12507 11.80802 48.17153 545.12187 0.70915 3.09693 20.53121 -0.48247 1.17385 6.75665 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.62224 872123.11548 4730023.00444 11.80802 48.17153 544.79118 0.87521 3.28552 20.20053 -0.31641 1.36245 6.42596 8 8 0 1.77 2013-Sep-20 09:11:21 4171702.21595 872122.67510 4730023.60782 11.80801 48.17153 545.56826 0.32266 3.32203 20.97761 -0.86896 1.39895 7.20305 8 8 0 1.77 2013-Sep-20 09:11:21 4171701.83706 872122.66981 4730023.60130 11.80801 48.17153 545.31534 0.39501 3.59485 20.72469 -0.79661 1.67177 6.95013 8 8 0 1.77 2013-Sep-20 09:11:21 4171702.58636 872122.56318 4730024.14919 11.80801 48.17153 546.19819 0.13731 3.42997 21.60753 -1.05431 1.50690 7.83297 8 8 0 1.77 2013-Sep-20 09:11:22 4171701.95182 872122.43491 4730023.93596 11.80801 48.17153 545.60757 0.14160 3.77015 21.01692 -1.05002 1.84707 7.24235 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.41310 872122.48657 4730023.94704 11.80801 48.17153 545.92400 0.09777 3.43321 21.33334 -1.09385 1.51013 7.55878 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.44279 872122.27459 4730023.48950 11.80800 48.17153 545.57352 -0.11580 3.13874 20.98286 -1.30742 1.21567 7.20830 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.64826 872122.07543 4730023.73818 11.80800 48.17153 545.86577 -0.35279 3.18509 21.27512 -1.54441 1.26201 7.50056 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.62559 872122.13798 4730023.36697 11.80800 48.17152 545.58290 -0.28693 2.94453 20.99224 -1.47855 1.02145 7.21768 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.27410 872122.14048 4730023.04507 11.80800 48.17152 545.11393 -0.21255 2.98584 20.52327 -1.40417 1.06277 6.74871 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.33847 872122.02619 4730022.91413 11.80800 48.17152 545.04279 -0.33759 2.86899 20.45213 -1.52921 0.94592 6.67757 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.47646 872122.03247 4730022.58428 11.80800 48.17152 544.88794 -0.35969 2.54741 20.29728 -1.55130 0.62433 6.52272 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.70174 872121.61386 4730022.82344 11.80799 48.17152 545.15608 -0.81554 2.60642 20.56542 -2.00716 0.68335 6.79086 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.77318 872121.79219 4730022.32239 11.80800 48.17152 544.85370 -0.65560 2.19297 20.26304 -1.84722 0.26990 6.48848 8 8 0 1.77 2013-Sep-20 09:11:22 4171702.31283 872121.63760 4730021.65430 11.80800 48.17152 544.03427 -0.71272 2.10676 19.44361 -1.90433 0.18368 5.66905 8 8 0 1.77 2013-Sep-20 09:11:22 4171701.63536 872121.75914 4730020.71023 11.80800 48.17152 542.90513 -0.45511 1.95275 18.31448 -1.64673 0.02968 4.53992 8 8 0 1.77 2013-Sep-20 09:11:22 4171701.14263 872121.72429 4730020.32085 11.80800 48.17152 542.28858 -0.38840 2.05778 17.69792 -1.58002 0.13470 3.92336 8 8 0 1.77 2013-Sep-20 09:11:22 4171701.04761 872121.94644 4730019.95171 11.80800 48.17151 541.98181 -0.15151 1.84703 17.39116 -1.34313 -0.07605 3.61659 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.80880 872121.67336 4730019.72100 11.80800 48.17151 541.61674 -0.36994 1.90899 17.02608 -1.56156 -0.01409 3.25152 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.89026 872121.57862 4730019.80591 11.80800 48.17151 541.72026 -0.47934 1.92064 17.12960 -1.67096 -0.00243 3.35504 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.47474 872121.47160 4730019.61736 11.80800 48.17152 541.29391 -0.49907 2.11429 16.70325 -1.69069 0.19121 2.92869 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.55331 872121.65886 4730018.80111 11.80800 48.17151 540.76253 -0.33185 1.48407 16.17188 -1.52347 -0.43901 2.39731 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.61488 872121.44608 4730018.76201 11.80800 48.17151 540.74454 -0.55273 1.44553 16.15389 -1.74434 -0.47754 2.37933 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.49863 872121.68465 4730018.66708 11.80800 48.17151 540.63048 -0.29541 1.43063 16.03982 -1.48703 -0.49244 2.26526 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.72713 872121.53659 4730019.24872 11.80800 48.17151 541.19285 -0.48710 1.67445 16.60219 -1.67872 -0.24863 2.82763 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.89901 872121.26161 4730018.92592 11.80799 48.17151 541.02698 -0.79143 1.37573 16.43632 -1.98305 -0.54734 2.66176 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.38213 872121.58721 4730018.76743 11.80800 48.17151 540.61591 -0.36695 1.59738 16.02525 -1.55857 -0.32569 2.25069 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.48126 872122.01041 4730018.68470 11.80801 48.17151 540.67673 0.02700 1.40538 16.08607 -1.16462 -0.51770 2.31151 8 8 0 1.77 2013-Sep-20 09:11:22 4171700.42981 872122.09768 4730018.93777 11.80801 48.17151 540.84362 0.12296 1.59838 16.25297 -1.06866 -0.32470 2.47840 8 8 0 1.77 2013-Sep-20 09:11:23 4171700.25674 872122.04299 4730018.60865 11.80801 48.17151 540.47794 0.10484 1.51346 15.88729 -1.08678 -0.40962 2.11272 8 8 0 1.77 2013-Sep-20 09:11:23 4171699.16549 872122.38864 4730018.10177 11.80801 48.17151 539.43505 0.66648 1.91864 14.84440 -0.52513 -0.00443 1.06983 8 8 0 1.77 2013-Sep-20 09:11:23 4171698.90923 872122.50577 4730017.52694 11.80802 48.17151 538.85542 0.83357 1.70434 14.26477 -0.35805 -0.21874 0.49021 8 8 0 1.77 2013-Sep-20 09:11:23 4171698.87469 872122.60967 4730017.19972 11.80802 48.17151 538.60323 0.94234 1.49546 14.01257 -0.24928 -0.42762 0.23801 8 8 0 1.77 2013-Sep-20 09:11:23 4171698.74918 872123.04708 4730016.52811 11.80802 48.17151 538.08054 1.39618 1.07241 13.48989 0.20456 -0.85066 -0.28468 8 8 0 1.77 2013-Sep-20 09:11:23 4171698.16746 872123.30345 4730016.20370 11.80803 48.17151 537.49406 1.76616 1.24126 12.90341 0.57454 -0.68181 -0.87116 8 8 0 1.77 2013-Sep-20 09:11:23 4171697.47430 872123.78172 4730015.50247 11.80804 48.17151 536.58432 2.37615 1.20625 11.99367 1.18453 -0.71682 -1.78090 8 8 0 1.77 2013-Sep-20 09:11:23 4171696.86109 872123.68251 4730014.85597 11.80804 48.17151 535.68875 2.40452 1.23749 11.09810 1.21291 -0.68558 -2.67647 8 8 0 1.77 2013-Sep-20 09:11:23 4171696.35236 872123.75839 4730015.45932 11.80804 48.17152 535.81660 2.58291 1.99936 11.22594 1.39129 0.07628 -2.54862 8 8 0 1.77 2013-Sep-20 09:11:23 4171695.94794 872124.22422 4730015.25092 11.80805 48.17152 535.46088 3.12163 2.08432 10.87022 1.93001 0.16124 -2.90434 8 8 0 1.77 2013-Sep-20 09:11:23 4171695.41651 872124.31269 4730015.18146 11.80805 48.17152 535.07428 3.31698 2.41211 10.48362 2.12537 0.48904 -3.29094 8 8 0 1.77 2013-Sep-20 09:11:23 4171695.64186 872124.48128 4730015.07744 11.80805 48.17152 535.16689 3.43589 2.15267 10.57623 2.24427 0.22960 -3.19833 8 8 0 1.77 2013-Sep-20 09:11:23 4171695.99033 872124.18767 4730015.78382 11.80805 48.17152 535.88065 3.07719 2.41436 11.28999 1.88557 0.49129 -2.48457 8 8 0 1.77 2013-Sep-20 09:11:23 4171695.50380 872124.63646 4730014.95546 11.80805 48.17152 535.00705 3.61603 2.14836 10.41639 2.42442 0.22528 -3.35817 8 8 0 1.77 2013-Sep-20 09:11:23 4171694.98197 872124.64948 4730014.60006 11.80806 48.17152 534.40335 3.73556 2.28997 9.81270 2.54395 0.36689 -3.96187 8 8 0 1.77 2013-Sep-20 09:11:23 4171694.31828 872124.71684 4730014.54467 11.80806 48.17152 533.93802 3.93731 2.72684 9.34736 2.74570 0.80376 -4.42720 8 8 0 1.77 2013-Sep-20 09:11:23 4171693.73938 872124.89906 4730014.04188 11.80806 48.17152 533.21034 4.23413 2.78598 8.61968 3.04252 0.86290 -5.15488 8 8 0 1.77 2013-Sep-20 09:11:23 4171693.33447 872124.85972 4730013.39787 11.80806 48.17152 532.46076 4.27848 2.65781 7.87011 3.08687 0.73474 -5.90445 8 8 0 1.77 2013-Sep-20 09:11:23 4171693.33025 872124.94481 4730013.19497 11.80806 48.17152 532.31843 4.36264 2.51260 7.72778 3.17102 0.58953 -6.04679 8 8 0 1.77 2013-Sep-20 09:11:23 4171693.53122 872124.97490 4730013.15073 11.80806 48.17152 532.42077 4.35096 2.33193 7.83011 3.15935 0.40885 -5.94445 8 8 0 1.77 2013-Sep-20 09:11:23 4171694.08680 872125.12819 4730013.06252 11.80806 48.17151 532.73863 4.38732 1.84449 8.14798 3.19571 -0.07858 -5.62659 8 8 0 1.77 2013-Sep-20 09:11:23 4171693.49335 872125.31109 4730012.56778 11.80807 48.17151 532.00754 4.68779 1.91951 7.41688 3.49618 -0.00356 -6.35768 8 8 0 1.77 2013-Sep-20 09:11:23 4171694.23364 872125.33371 4730012.45002 11.80807 48.17151 532.40613 4.55845 1.29758 7.81548 3.36683 -0.62549 -5.95909 8 8 0 1.77 2013-Sep-20 09:11:23 4171694.78063 872124.95911 4730012.82499 11.80806 48.17151 532.99149 4.07984 1.20581 8.40084 2.88822 -0.71727 -5.37373 8 8 0 1.77 2013-Sep-20 09:11:23 4171694.84330 872125.01134 4730012.54997 11.80806 48.17151 532.83460 4.11814 0.96872 8.24395 2.92652 -0.95436 -5.53062 8 8 0 1.77 2013-Sep-20 09:11:24 4171694.78080 872124.89122 4730012.57800 11.80806 48.17151 532.79829 4.01336 1.05132 8.20763 2.82174 -0.87176 -5.56693 8 8 0 1.77 2013-Sep-20 09:11:24 4171694.55134 872124.87342 4730012.17800 11.80806 48.17151 532.34801 4.04288 0.95463 7.75736 2.85127 -0.96845 -6.01721 8 8 0 1.77 2013-Sep-20 09:11:24 4171694.40329 872124.59192 4730012.24326 11.80806 48.17151 532.26158 3.79764 1.14906 7.67092 2.60602 -0.77401 -6.10364 8 8 0 1.77 2013-Sep-20 09:11:24 4171694.72814 872124.31088 4730012.39862 11.80805 48.17151 532.55105 3.45607 1.05859 7.96039 2.26445 -0.86449 -5.81417 8 8 0 1.77 2013-Sep-20 09:11:24 4171695.27170 872124.30449 4730012.36729 11.80805 48.17150 532.88166 3.33858 0.64221 8.29101 2.14697 -1.28087 -5.48356 8 8 0 1.77 2013-Sep-20 09:11:24 4171695.59018 872124.22692 4730012.68059 11.80805 48.17150 533.31243 3.19748 0.63069 8.72178 2.00587 -1.29239 -5.05279 8 8 0 1.77 2013-Sep-20 09:11:24 4171695.61785 872124.16338 4730012.64843 11.80805 48.17150 533.29786 3.12963 0.59875 8.70721 1.93801 -1.32433 -5.06736 8 8 0 1.77 2013-Sep-20 09:11:24 4171695.56272 872124.27940 4730012.24025 11.80805 48.17150 532.97356 3.25447 0.34905 8.38290 2.06285 -1.57403 -5.39166 8 8 0 1.77 2013-Sep-20 09:11:24 4171695.98208 872123.84131 4730012.65562 11.80804 48.17150 533.49703 2.73984 0.38699 8.90638 1.54823 -1.53608 -4.86819 8 8 0 1.77 2013-Sep-20 09:11:24 4171696.40650 872123.93324 4730012.83200 11.80804 48.17150 533.91807 2.74298 0.18104 9.32741 1.55136 -1.74204 -4.44715 8 8 0 1.77 2013-Sep-20 09:11:24 4171697.01401 872123.56027 4730013.64619 11.80804 48.17150 534.87043 2.25358 0.33779 10.27978 1.06197 -1.58528 -3.49479 8 8 0 1.77 2013-Sep-20 09:11:24 4171697.78434 872123.37628 4730014.04490 11.80803 48.17150 535.64528 1.91585 0.06988 11.05463 0.72423 -1.85319 -2.71994 8 8 0 1.77 2013-Sep-20 09:11:24 4171698.57004 872123.35096 4730014.80813 11.80803 48.17150 536.72344 1.73029 0.00967 12.13279 0.53867 -1.91340 -1.64177 8 8 0 1.77 2013-Sep-20 09:11:24 4171698.63797 872123.40502 4730015.23920 11.80803 48.17150 537.09637 1.76930 0.23936 12.50572 0.57769 -1.68371 -1.26885 8 8 0 1.77 2013-Sep-20 09:11:24 4171699.46071 872123.29389 4730016.27388 11.80803 48.17150 538.38927 1.49216 0.34626 13.79862 0.30055 -1.57682 0.02406 8 8 0 1.77 2013-Sep-20 09:11:24 4171699.00394 872123.28348 4730016.64307 11.80803 48.17151 538.36477 1.57544 0.92722 13.77412 0.38382 -0.99585 -0.00045 8 8 0 1.77 2013-Sep-20 09:11:24 4171699.14968 872123.07268 4730017.00955 11.80802 48.17151 538.70422 1.33928 1.09747 14.11357 0.14767 -0.82561 0.33900 8 8 0 1.77 2013-Sep-20 09:11:24 4171698.67452 872123.06323 4730016.30640 11.80802 48.17151 537.86881 1.42726 0.97654 13.27815 0.23564 -0.94653 -0.49641 8 8 0 1.77 2013-Sep-20 09:11:24 4171697.86922 872123.34143 4730016.19643 11.80803 48.17151 537.29913 1.86437 1.44815 12.70848 0.67275 -0.47492 -1.06608 8 8 0 1.77 2013-Sep-20 09:11:24 4171697.95299 872123.63161 4730016.52621 11.80803 48.17151 537.63916 2.13127 1.56274 13.04850 0.93965 -0.36034 -0.72606 8 8 0 1.77 2013-Sep-20 09:11:24 4171698.30013 872123.37775 4730017.15193 11.80803 48.17151 538.29737 1.81174 1.76555 13.70672 0.62013 -0.15753 -0.06785 8 8 0 1.77 2013-Sep-20 09:11:24 4171698.61127 872123.27377 4730017.20090 11.80803 48.17151 538.52278 1.64629 1.58712 13.93213 0.45467 -0.33595 0.15756 8 8 0 1.77 2013-Sep-20 09:11:24 4171698.70536 872123.09196 4730017.81255 11.80803 48.17152 539.01516 1.44907 1.95413 14.42450 0.25746 0.03106 0.64994 8 8 0 1.77 2013-Sep-20 09:11:24 4171699.32078 872123.10792 4730018.75535 11.80802 48.17152 540.12159 1.33877 2.13158 15.53094 0.14715 0.20850 1.75638 8 8 0 1.77 2013-Sep-20 09:11:24 4171700.44214 872122.69263 4730019.56567 11.80802 48.17151 541.40074 0.70279 1.91741 16.81009 -0.48882 -0.00567 3.03552 8 8 0 1.77 2013-Sep-20 09:11:25 4171700.87047 872122.61229 4730020.08077 11.80801 48.17152 542.05321 0.53650 1.96078 17.46256 -0.65512 0.03770 3.68800 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.04694 872122.35947 4730020.86237 11.80801 48.17151 543.36910 0.04828 1.66248 18.77845 -1.14333 -0.26060 5.00388 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.17856 872122.18386 4730020.40536 11.80800 48.17151 543.09052 -0.15054 1.28848 18.49986 -1.34216 -0.63460 4.72530 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.82370 872122.51184 4730020.74153 11.80801 48.17151 543.80692 0.03848 0.99212 19.21626 -1.15313 -0.93096 5.44170 8 8 0 1.77 2013-Sep-20 09:11:25 4171703.32821 872122.39124 4730021.23514 11.80800 48.17151 544.48761 -0.18281 0.97171 19.89695 -1.37442 -0.95137 6.12239 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.96839 872122.67505 4730020.93220 11.80801 48.17151 544.06572 0.16863 0.98885 19.47506 -1.02299 -0.93423 5.70050 8 8 0 1.77 2013-Sep-20 09:11:25 4171703.49831 872122.59217 4730021.58466 11.80801 48.17151 544.88651 -0.02094 1.05010 20.29586 -1.21255 -0.87298 6.52129 8 8 0 1.77 2013-Sep-20 09:11:25 4171703.58810 872122.25336 4730021.80658 11.80800 48.17151 545.06425 -0.37094 1.18428 20.47359 -1.56256 -0.73880 6.69903 8 8 0 1.77 2013-Sep-20 09:11:25 4171703.50841 872122.21588 4730022.54002 11.80800 48.17151 545.55364 -0.39132 1.73725 20.96298 -1.58294 -0.18583 7.18842 8 8 0 1.77 2013-Sep-20 09:11:25 4171703.34375 872122.34164 4730022.80422 11.80800 48.17152 545.66017 -0.23453 2.01437 21.06951 -1.42615 0.09129 7.29495 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.78201 872122.25393 4730023.00194 11.80800 48.17152 545.42884 -0.20544 2.56932 20.83819 -1.39705 0.64624 7.06362 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.77401 872122.25906 4730022.45941 11.80800 48.17152 545.02005 -0.19878 2.21256 20.42939 -1.39040 0.28948 6.65483 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.61148 872122.29617 4730022.39868 11.80800 48.17152 544.87376 -0.12919 2.28494 20.28310 -1.32081 0.36187 6.50854 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.43756 872122.22809 4730021.98278 11.80800 48.17152 544.44103 -0.16024 2.14481 19.85037 -1.35186 0.22173 6.07581 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.41514 872122.17541 4730021.44668 11.80800 48.17151 544.01974 -0.20722 1.81167 19.42908 -1.39884 -0.11141 5.65452 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.02984 872122.18943 4730021.14974 11.80800 48.17151 543.54887 -0.11466 1.89253 18.95821 -1.30628 -0.03055 5.18365 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.26815 872121.97079 4730021.35574 11.80800 48.17151 543.82809 -0.37744 1.88943 19.23744 -1.56905 -0.03364 5.46288 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.70269 872122.03374 4730021.52410 11.80800 48.17151 544.24580 -0.40474 1.67517 19.65515 -1.59636 -0.24791 5.88058 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.39376 872122.50537 4730020.78404 11.80801 48.17151 543.55705 0.12013 1.33504 18.96639 -1.07149 -0.58804 5.19183 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.54888 872122.53675 4730020.89914 11.80801 48.17151 543.74835 0.11911 1.29387 19.15770 -1.07251 -0.62921 5.38314 8 8 0 1.77 2013-Sep-20 09:11:25 4171702.35316 872122.91499 4730020.73096 11.80801 48.17151 543.54689 0.52940 1.26679 18.95624 -0.66222 -0.65628 5.18167 8 8 0 1.77 2013-Sep-20 09:11:25 4171701.88670 872123.24296 4730020.01185 11.80802 48.17151 542.75131 0.94587 1.07742 18.16065 -0.24575 -0.84565 4.38609 8 8 0 1.77 2013-Sep-20 09:11:25 4171701.13527 872123.05459 4730019.83813 11.80802 48.17151 542.10563 0.91526 1.53837 17.51498 -0.27636 -0.38470 3.74042 8 8 0 1.77 2013-Sep-20 09:11:25 4171700.10440 872123.37547 4730018.53072 11.80802 48.17151 540.50227 1.44030 1.36942 15.91161 0.24868 -0.55365 2.13705 8 8 0 1.77 2013-Sep-20 09:11:25 4171700.31801 872123.36362 4730018.74722 11.80802 48.17151 540.80142 1.38499 1.35981 16.21076 0.19337 -0.56327 2.43620 8 8 0 1.77 2013-Sep-20 09:11:26 4171699.92813 872123.31133 4730018.90982 11.80802 48.17151 540.66093 1.41359 1.76059 16.07028 0.22197 -0.16249 2.29572 8 8 0 1.77 2013-Sep-20 09:11:26 4171686.25644 872113.04668 4730002.40583 11.80793 48.17152 518.03750 -5.83618 2.29100 -6.55316 -7.02779 0.36793 -20.32772 8 8 0 1.77 2013-Sep-20 09:11:26 4171699.56855 872122.88902 4730018.11974 11.80802 48.17151 539.77984 1.07379 1.56035 15.18919 -0.11783 -0.36273 1.41462 8 8 0 1.77 2013-Sep-20 09:11:26 4171698.95488 872122.83635 4730017.57470 11.80802 48.17151 538.96593 1.14782 1.65249 14.37527 -0.04380 -0.27059 0.60071 8 8 0 1.77 2013-Sep-20 09:11:26 4171698.52139 872122.91328 4730017.74223 11.80802 48.17152 538.81828 1.31183 2.06866 14.22762 0.12021 0.14558 0.45306 8 8 0 1.77 2013-Sep-20 09:11:26 4171698.33324 872122.83087 4730017.73504 11.80802 48.17152 538.67886 1.26966 2.21366 14.08820 0.07805 0.29058 0.31364 8 8 0 1.77 2013-Sep-20 09:11:26 4171698.57027 872122.78294 4730017.69385 11.80802 48.17152 538.79635 1.17424 2.02062 14.20570 -0.01738 0.09754 0.43113 8 8 0 1.77 2013-Sep-20 09:11:26 4171697.87094 872122.80878 4730017.20228 11.80802 48.17152 537.97707 1.34264 2.19892 13.38641 0.15102 0.27584 -0.38815 8 8 0 1.77 2013-Sep-20 09:11:26 4171697.41115 872122.56544 4730016.69303 11.80802 48.17152 537.26425 1.19853 2.23177 12.67360 0.00692 0.30870 -1.10097 8 8 0 1.77 2013-Sep-20 09:11:26 4171696.96020 872122.58784 4730016.48740 11.80802 48.17152 536.81971 1.31274 2.42013 12.22905 0.12113 0.49705 -1.54551 8 8 0 1.77 2013-Sep-20 09:11:26 4171696.33252 872122.42855 4730015.88985 11.80802 48.17152 535.94297 1.28526 2.50372 11.35232 0.09364 0.58065 -2.42225 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.66835 872122.30662 4730015.53695 11.80802 48.17152 535.22980 1.30183 2.77139 10.63914 0.11021 0.84832 -3.13542 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.62194 872121.98928 4730016.07159 11.80802 48.17153 535.55458 1.00070 3.21019 10.96393 -0.19092 1.28711 -2.81064 8 8 0 1.77 2013-Sep-20 09:11:26 4171696.08143 872121.75290 4730016.38898 11.80801 48.17153 536.05877 0.67529 3.12275 11.46812 -0.51632 1.19968 -2.30645 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.52989 872121.73778 4730016.13000 11.80802 48.17153 535.50369 0.77335 3.35463 10.91303 -0.41826 1.43155 -2.86153 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.65018 872121.48345 4730016.54054 11.80801 48.17153 535.85342 0.49980 3.57946 11.26276 -0.69182 1.65638 -2.51180 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.38313 872121.29255 4730016.04228 11.80801 48.17153 535.28177 0.36758 3.47105 10.69111 -0.82403 1.54798 -3.08345 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.83768 872121.01103 4730015.58530 11.80801 48.17152 535.19955 -0.00100 2.87769 10.60890 -1.19262 0.95461 -3.16567 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.82594 872120.89886 4730015.42913 11.80800 48.17152 535.06021 -0.10840 2.79920 10.46956 -1.30001 0.87613 -3.30500 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.59724 872120.81960 4730015.20978 11.80800 48.17152 534.73666 -0.13918 2.83181 10.14600 -1.33079 0.90874 -3.62856 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.12172 872120.87485 4730014.56353 11.80801 48.17152 533.95223 0.01221 2.73923 9.36158 -1.17941 0.81616 -4.41299 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.14789 872120.86452 4730013.94300 11.80801 48.17152 533.50552 -0.00326 2.30789 8.91486 -1.19487 0.38481 -4.85970 8 8 0 1.77 2013-Sep-20 09:11:26 4171695.18999 872120.81862 4730014.02310 11.80800 48.17152 533.58642 -0.05680 2.33760 8.99577 -1.24841 0.41453 -4.77879 8 8 0 1.77 2013-Sep-20 09:11:26 4171694.99597 872120.81405 4730014.03766 11.80801 48.17152 533.47000 -0.02157 2.48952 8.87934 -1.21318 0.56645 -4.89522 8 8 0 1.77 2013-Sep-20 09:11:26 4171694.89505 872121.09917 4730013.41178 11.80801 48.17152 532.97666 0.27817 2.10225 8.38600 -0.91345 0.17918 -5.38856 8 8 0 1.77 2013-Sep-20 09:11:27 4171694.66456 872121.03217 4730013.18248 11.80801 48.17152 532.64619 0.25975 2.12766 8.05553 -0.93186 0.20458 -5.71903 8 8 0 1.77 2013-Sep-20 09:11:27 4171695.13153 872121.16667 4730013.53852 11.80801 48.17152 533.23468 0.29585 2.00400 8.64403 -0.89577 0.08093 -5.13054 8 8 0 1.77 2013-Sep-20 09:11:27 4171695.21893 872121.08356 4730013.02197 11.80801 48.17151 532.89549 0.19662 1.60844 8.30483 -0.99500 -0.31464 -5.46973 8 8 0 1.77 2013-Sep-20 09:11:27 4171695.34719 872121.08913 4730013.23862 11.80801 48.17151 533.14141 0.17582 1.65852 8.55076 -1.01579 -0.26456 -5.22381 8 8 0 1.77 2013-Sep-20 09:11:27 4171695.78405 872121.08917 4730013.08218 11.80801 48.17151 533.31002 0.08647 1.23555 8.71936 -1.10515 -0.68753 -5.05520 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.51473 872121.19700 4730012.97371 11.80801 48.17150 533.72090 0.04249 0.61383 9.13024 -1.14913 -1.30925 -4.64432 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.41898 872121.58683 4730013.01542 11.80801 48.17150 533.74267 0.44366 0.65204 9.15201 -0.74796 -1.27104 -4.62255 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.78157 872121.55351 4730013.08254 11.80801 48.17150 534.02483 0.33685 0.43742 9.43418 -0.85476 -1.48566 -4.34039 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.94521 872121.43326 4730013.19378 11.80801 48.17150 534.19814 0.18566 0.41058 9.60748 -1.00596 -1.51249 -4.16708 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.34722 872121.53376 4730013.01959 11.80801 48.17150 533.69169 0.40640 0.71525 9.10104 -0.78522 -1.20782 -4.67353 8 8 0 1.77 2013-Sep-20 09:11:27 4171695.80649 872121.63805 4730013.15818 11.80801 48.17151 533.45621 0.61913 1.18618 8.86555 -0.57248 -0.73690 -4.90901 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.26694 872121.68348 4730013.63981 11.80801 48.17151 534.12187 0.56938 1.16460 9.53121 -0.62224 -0.75847 -4.24335 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.86514 872121.65469 4730014.17177 11.80801 48.17151 534.90483 0.41878 1.08745 10.31418 -0.77283 -0.83562 -3.46039 8 8 0 1.77 2013-Sep-20 09:11:27 4171696.64572 872121.63862 4730014.60878 11.80801 48.17151 535.08503 0.44796 1.54138 10.49438 -0.74366 -0.38169 -3.28019 8 8 0 1.77 2013-Sep-20 09:11:27 4171697.26958 872121.42909 4730014.98613 11.80801 48.17151 535.74487 0.11520 1.36996 11.15422 -1.07641 -0.55312 -2.62034 8 8 0 1.77 2013-Sep-20 09:11:27 4171697.71455 872121.25431 4730015.45913 11.80800 48.17151 536.36394 -0.14694 1.38750 11.77329 -1.33855 -0.53558 -2.00127 8 8 0 1.77 2013-Sep-20 09:11:27 4171697.93379 872121.15119 4730015.58951 11.80800 48.17151 536.59014 -0.29274 1.33027 11.99948 -1.48436 -0.59281 -1.77508 8 8 0 1.77 2013-Sep-20 09:11:27 4171697.93831 872121.03476 4730015.93374 11.80800 48.17151 536.83370 -0.40763 1.57429 12.24304 -1.59924 -0.34878 -1.53152 8 8 0 1.77 2013-Sep-20 09:11:27 4171698.05693 872120.81900 4730016.72257 11.80800 48.17152 537.46948 -0.64309 2.04674 12.87883 -1.83471 0.12367 -0.89573 8 8 0 1.77 2013-Sep-20 09:11:27 4171698.85061 872120.85197 4730017.58196 11.80800 48.17152 538.63247 -0.77324 2.03596 14.04181 -1.96486 0.11288 0.26725 8 8 0 1.77 2013-Sep-20 09:11:27 4171699.06065 872120.99495 4730018.08383 11.80800 48.17152 539.16305 -0.67627 2.19566 14.57240 -1.86788 0.27258 0.79783 8 8 0 1.77 2013-Sep-20 09:11:27 4171700.12481 872120.98896 4730018.58090 11.80799 48.17151 540.22729 -0.89989 1.75190 15.63664 -2.09151 -0.17118 1.86207 8 8 0 1.77 2013-Sep-20 09:11:27 4171700.76326 872121.27936 4730019.54425 11.80800 48.17151 541.40154 -0.74628 1.88441 16.81088 -1.93790 -0.03866 3.03632 8 8 0 1.77 2013-Sep-20 09:11:27 4171700.78941 872121.59183 4730019.72916 11.80800 48.17152 541.59903 -0.44578 1.94100 17.00838 -1.63740 0.01793 3.23381 8 8 0 1.77 2013-Sep-20 09:11:27 4171701.07459 872121.92558 4730020.12946 11.80800 48.17152 542.12903 -0.17744 1.94908 17.53837 -1.36906 0.02600 3.76381 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.52982 872122.32645 4730019.99796 11.80801 48.17152 541.73013 0.32642 2.19759 17.13947 -0.86520 0.27452 3.36491 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.65498 872122.59203 4730020.40760 11.80801 48.17152 542.15331 0.56077 2.33899 17.56266 -0.63085 0.41592 3.78810 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.02892 872122.65950 4730020.58537 11.80801 48.17152 542.53909 0.55029 2.17452 17.94844 -0.64133 0.25145 4.17387 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.34994 872123.10874 4730021.06532 11.80802 48.17152 543.16759 0.92433 2.19196 18.57693 -0.26729 0.26888 4.80237 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.41566 872123.29479 4730021.36912 11.80802 48.17152 543.46225 1.09300 2.31826 18.87160 -0.09862 0.39518 5.09704 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.99465 872123.57060 4730021.46935 11.80803 48.17152 543.29975 1.44912 2.65012 18.70909 0.25751 0.72704 4.93453 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.32391 872123.59479 4730022.26359 11.80802 48.17152 544.10981 1.40542 2.93596 19.51915 0.21380 1.01288 5.74459 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.51905 872123.74322 4730021.91649 11.80803 48.17152 543.99881 1.51078 2.53952 19.40816 0.31916 0.61644 5.63360 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.22378 872124.03588 4730021.56745 11.80803 48.17152 543.58592 1.85767 2.47748 18.99526 0.66605 0.55440 5.22070 8 8 0 1.77 2013-Sep-20 09:11:28 4171701.17356 872124.18506 4730021.49768 11.80803 48.17152 543.52150 2.01397 2.44483 18.93085 0.82236 0.52176 5.15629 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.87815 872124.61377 4730021.22935 11.80804 48.17152 543.18723 2.49405 2.41597 18.59657 1.30244 0.49290 4.82201 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.53020 872124.46603 4730021.13499 11.80804 48.17152 542.86961 2.42065 2.62936 18.27895 1.22903 0.70628 4.50439 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.38751 872124.54003 4730021.76693 11.80804 48.17153 543.25745 2.52228 3.14359 18.66680 1.33066 1.22052 4.89224 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.48210 872124.29544 4730021.57373 11.80804 48.17152 543.14186 2.26351 2.98304 18.55120 1.07189 1.05997 4.77664 8 8 0 1.77 2013-Sep-20 09:11:28 4171700.38441 872124.59308 4730020.93156 11.80804 48.17152 542.64020 2.57484 2.58065 18.04954 1.38322 0.65757 4.27498 8 8 0 1.77 2013-Sep-20 09:11:28 4171699.43415 872124.94705 4730020.89155 11.80805 48.17153 542.03837 3.11577 3.19309 17.44771 1.92416 1.27001 3.67315 8 8 0 1.77 2013-Sep-20 09:11:28 4171698.99007 872124.84567 4730020.49424 11.80805 48.17153 541.43860 3.10742 3.26748 16.84794 1.91580 1.34441 3.07338 8 8 0 1.77 2013-Sep-20 09:11:28 4171698.59860 872124.96994 4730019.99661 11.80805 48.17153 540.82920 3.30916 3.20220 16.23854 2.11754 1.27912 2.46398 8 8 0 1.77 2013-Sep-20 09:11:28 4171697.72330 872125.14159 4730019.33605 11.80805 48.17153 539.78902 3.65630 3.37392 15.19836 2.46468 1.45084 1.42380 8 8 0 1.77 2013-Sep-20 09:11:28 4171697.44527 872125.13166 4730019.44510 11.80806 48.17153 539.68743 3.70347 3.65094 15.09677 2.51186 1.72787 1.32221 8 8 0 1.77 2013-Sep-20 09:11:28 4171697.46512 872125.25487 4730019.99327 11.80806 48.17153 540.12566 3.82001 3.98325 15.53501 2.62839 2.06017 1.76045 8 8 0 1.77 2013-Sep-20 09:11:28 4171697.81560 872125.36560 4730019.87160 11.80806 48.17153 540.27890 3.85668 3.62960 15.68824 2.66506 1.70652 1.91368 8 8 0 1.77 2013-Sep-20 09:11:28 4171696.76963 872125.46839 4730018.63366 11.80806 48.17153 538.68769 4.17133 3.55124 14.09703 2.97971 1.62816 0.32247 8 8 0 1.77 2013-Sep-20 09:11:28 4171696.98464 872125.66989 4730019.32905 11.80806 48.17153 539.37372 4.32457 3.82746 14.78306 3.13295 1.90438 1.00850 8 8 0 1.77 2013-Sep-20 09:11:28 4171697.18226 872125.51418 4730019.42882 11.80806 48.17153 539.55581 4.13171 3.77359 14.96515 2.94010 1.85051 1.19059 8 8 0 1.77 2013-Sep-20 09:11:29 4171696.78888 872125.47161 4730019.05047 11.80806 48.17153 539.01128 4.17055 3.81468 14.42062 2.97893 1.89160 0.64606 8 8 0 1.77 2013-Sep-20 09:11:29 4171696.21747 872125.23603 4730018.43986 11.80806 48.17153 538.15112 4.05688 3.86016 13.56046 2.86526 1.93709 -0.21410 8 8 0 1.77 2013-Sep-20 09:11:29 4171696.76275 872125.09584 4730018.79972 11.80806 48.17153 538.75610 3.80807 3.72381 14.16544 2.61646 1.80074 0.39088 8 8 0 1.77 2013-Sep-20 09:11:29 4171696.28458 872125.11895 4730018.54831 11.80806 48.17153 538.25977 3.92854 3.90139 13.66911 2.73693 1.97832 -0.10545 8 8 0 1.77 2013-Sep-20 09:11:29 4171695.51510 872125.05115 4730018.12311 11.80806 48.17154 537.43137 4.01964 4.18940 12.84071 2.82802 2.26632 -0.93385 8 8 0 1.77 2013-Sep-20 09:11:29 4171695.70442 872124.86531 4730017.79648 11.80806 48.17153 537.28621 3.79899 3.86183 12.69555 2.60738 1.93875 -1.07901 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.02534 872124.68272 4730018.82343 11.80805 48.17153 538.88880 3.34996 3.61109 14.29814 2.15834 1.68802 0.52358 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.56713 872124.37971 4730019.39175 11.80805 48.17153 539.62460 2.94249 3.64114 15.03394 1.75087 1.71807 1.25938 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.12832 872123.99445 4730020.12268 11.80804 48.17153 540.48301 2.45055 3.77803 15.89236 1.25893 1.85495 2.11779 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.23677 872123.78912 4730019.90767 11.80804 48.17153 540.36557 2.22737 3.58684 15.77492 1.03576 1.66376 2.00036 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.12558 872123.42339 4730019.83102 11.80803 48.17153 540.18596 1.89214 3.67259 15.59531 0.70052 1.74952 1.82074 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.66725 872123.35494 4730019.71138 11.80803 48.17153 539.78828 1.91892 3.93753 15.19763 0.72731 2.01446 1.42306 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.75030 872123.45811 4730019.76202 11.80803 48.17153 539.89431 2.00291 3.89500 15.30365 0.81129 1.97192 1.52909 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.37489 872123.34486 4730019.00344 11.80803 48.17153 539.06854 1.96888 3.68019 14.47789 0.77727 1.75711 0.70332 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.56450 872122.96377 4730019.47053 11.80803 48.17153 539.48836 1.55705 3.91150 14.89771 0.36543 1.98843 1.12314 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.72707 872122.88434 4730019.91797 11.80803 48.17153 539.91705 1.44604 4.10344 15.32639 0.25443 2.18036 1.55183 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.24957 872122.89020 4730020.15076 11.80802 48.17153 540.43239 1.34485 3.87669 15.84174 0.15324 1.95362 2.06718 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.09813 872122.65932 4730020.01098 11.80802 48.17153 540.19787 1.14985 3.92914 15.60721 -0.04177 2.00606 1.83265 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.08833 872122.36723 4730019.75361 11.80802 48.17153 539.95984 0.86594 3.80918 15.36918 -0.32567 1.88611 1.59462 8 8 0 1.77 2013-Sep-20 09:11:29 4171698.52223 872122.17729 4730019.92730 11.80801 48.17153 540.34658 0.59124 3.63750 15.75593 -0.60038 1.71442 1.98136 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.58285 872122.02297 4730019.52427 11.80801 48.17153 539.41199 0.63241 4.07741 14.82133 -0.55920 2.15434 1.04677 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.63924 872121.73716 4730019.17442 11.80801 48.17153 539.14910 0.34110 3.84655 14.55844 -0.85051 1.92347 0.78388 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.53461 872121.25933 4730018.70900 11.80800 48.17153 538.66879 -0.10520 3.68533 14.07814 -1.29681 1.76225 0.30357 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.81185 872121.15231 4730018.70755 11.80800 48.17153 538.83408 -0.26668 3.49847 14.24343 -1.45830 1.57539 0.46886 8 8 0 1.77 2013-Sep-20 09:11:29 4171697.67496 872120.88634 4730018.42482 11.80800 48.17153 538.49775 -0.49902 3.45032 13.90709 -1.69064 1.52724 0.13253 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.95798 872120.75057 4730018.08811 11.80800 48.17153 538.41308 -0.68983 3.04004 13.82242 -1.88145 1.11697 0.04786 8 8 0 1.77 2013-Sep-20 09:11:30 4171698.55581 872120.51012 4730017.92941 11.80799 48.17152 538.65226 -1.04753 2.53482 14.06161 -2.23915 0.61175 0.28704 8 8 0 1.77 2013-Sep-20 09:11:30 4171698.69187 872120.08389 4730017.76410 11.80799 48.17152 538.55974 -1.49258 2.39033 13.96908 -2.68420 0.46726 0.19452 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.87169 872120.29824 4730017.38550 11.80799 48.17152 537.77148 -1.11493 2.70337 13.18082 -2.30654 0.78030 -0.59374 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.64076 872120.39637 4730017.21192 11.80799 48.17152 537.50477 -0.97163 2.74108 12.91412 -2.16324 0.81801 -0.86045 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.03278 872120.41985 4730016.60230 11.80799 48.17152 536.65684 -0.82423 2.77439 12.06618 -2.01585 0.85131 -1.70838 8 8 0 1.77 2013-Sep-20 09:11:30 4171696.94921 872120.34663 4730016.54590 11.80799 48.17152 536.55027 -0.87880 2.80890 11.95961 -2.07041 0.88583 -1.81495 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.46511 872120.31730 4730016.54024 11.80799 48.17152 536.87882 -1.01307 2.43331 12.28817 -2.20469 0.51023 -1.48640 8 8 0 1.77 2013-Sep-20 09:11:30 4171696.87515 872120.54066 4730015.97554 11.80800 48.17152 536.10340 -0.67371 2.45295 11.51274 -1.86533 0.52988 -2.26182 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.25109 872120.60664 4730016.19866 11.80800 48.17152 536.52407 -0.68606 2.31749 11.93341 -1.87768 0.39442 -1.84115 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.34559 872120.99690 4730015.52703 11.80800 48.17151 536.13855 -0.32339 1.74114 11.54790 -1.51501 -0.18193 -2.22667 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.94952 872121.11802 4730015.65610 11.80800 48.17151 536.64550 -0.32842 1.36827 12.05485 -1.52004 -0.55481 -1.71972 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.68473 872121.41412 4730015.38473 11.80801 48.17151 536.31085 0.01560 1.33527 11.72020 -1.17602 -0.58781 -2.05437 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.64638 872121.41032 4730014.74579 11.80801 48.17151 535.80919 0.01973 0.93771 11.21854 -1.17189 -0.98537 -2.55603 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.52681 872121.37284 4730014.26884 11.80801 48.17150 535.37063 0.00750 0.71256 10.77998 -1.18412 -1.21052 -2.99459 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.39677 872121.46519 4730014.27092 11.80801 48.17150 535.29989 0.12451 0.79471 10.70923 -1.06711 -1.12837 -3.06533 8 8 0 1.77 2013-Sep-20 09:11:30 4171696.91048 872121.42730 4730014.21534 11.80801 48.17151 534.93586 0.18693 1.11811 10.34521 -1.00469 -0.80497 -3.42936 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.34401 872121.38274 4730014.32130 11.80801 48.17151 535.29174 0.05460 0.87936 10.70108 -1.13701 -1.04371 -3.07348 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.62437 872121.42704 4730014.61503 11.80801 48.17151 535.69967 0.04060 0.86401 11.10902 -1.15102 -1.05907 -2.66555 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.43824 872121.28637 4730014.15853 11.80800 48.17150 535.21881 -0.05902 0.71677 10.62815 -1.25063 -1.20630 -3.14641 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.18703 872121.33246 4730013.94351 11.80801 48.17150 534.90090 0.03751 0.74958 10.31024 -1.15411 -1.17350 -3.46432 8 8 0 1.77 2013-Sep-20 09:11:30 4171697.04976 872121.55004 4730013.39163 11.80801 48.17150 534.42975 0.27858 0.44847 9.83909 -0.91304 -1.47461 -3.93547 8 8 0 1.77 2013-Sep-20 09:11:30 4171696.25762 872121.59170 4730012.69762 11.80801 48.17150 533.40119 0.48145 0.55705 8.81054 -0.71016 -1.36602 -4.96403 8 8 0 1.77 2013-Sep-20 09:11:30 4171696.09445 872121.84912 4730012.59140 11.80802 48.17150 533.25066 0.76682 0.56597 8.66000 -0.42480 -1.35710 -5.11456 8 8 0 1.77 2013-Sep-20 09:11:30 4171696.35468 872122.09316 4730012.61714 11.80802 48.17150 533.47301 0.95244 0.35612 8.88236 -0.23918 -1.56696 -4.89220 8 8 0 1.77 2013-Sep-20 09:11:31 4171695.57440 872122.03615 4730011.71188 11.80802 48.17150 532.28133 1.05630 0.33020 7.69067 -0.13531 -1.59287 -6.08389 8 8 0 1.77 2013-Sep-20 09:11:31 4171695.30311 872122.12372 4730011.76943 11.80802 48.17150 532.15907 1.19754 0.55311 7.56841 0.00592 -1.36997 -6.20615 8 8 0 1.77 2013-Sep-20 09:11:31 4171695.80571 872122.02064 4730012.13599 11.80802 48.17150 532.74624 0.99379 0.44670 8.15558 -0.19783 -1.47637 -5.61898 8 8 0 1.77 2013-Sep-20 09:11:31 4171695.80804 872122.12795 4730012.24496 11.80802 48.17150 532.84360 1.09835 0.50131 8.25294 -0.09326 -1.42176 -5.52162 8 8 0 1.77 2013-Sep-20 09:11:31 4171695.58737 872122.15744 4730012.18541 11.80802 48.17150 532.65920 1.17238 0.61806 8.06854 -0.01924 -1.30501 -5.70602 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.08043 872122.35230 4730012.01069 11.80802 48.17150 532.87746 1.26221 0.11219 8.28681 0.07060 -1.81089 -5.48776 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.60004 872122.11846 4730012.39081 11.80802 48.17150 533.46799 0.92699 0.02236 8.87733 -0.26463 -1.90071 -4.89723 8 8 0 1.77 2013-Sep-20 09:11:31 4171697.05806 872122.17982 4730012.93349 11.80802 48.17150 534.17973 0.89332 0.04085 9.58908 -0.29829 -1.88222 -4.18549 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.98371 872122.24762 4730012.53119 11.80802 48.17150 533.84068 0.97491 -0.18355 9.25002 -0.21671 -2.10662 -4.52454 8 8 0 1.77 2013-Sep-20 09:11:31 4171697.39306 872122.65016 4730012.35033 11.80802 48.17149 534.02806 1.28516 -0.66412 9.43741 0.09355 -2.58719 -4.33715 8 8 0 1.77 2013-Sep-20 09:11:31 4171697.07385 872122.65968 4730012.33553 11.80802 48.17149 533.80995 1.35980 -0.44261 9.21930 0.16819 -2.36569 -4.55526 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.89636 872122.75231 4730012.64118 11.80803 48.17150 533.93449 1.48680 -0.12344 9.34383 0.29518 -2.04652 -4.43073 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.90097 872122.83998 4730012.49885 11.80803 48.17150 533.84341 1.57167 -0.23510 9.25275 0.38005 -2.15817 -4.52181 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.56988 872122.77570 4730012.12547 11.80803 48.17150 533.34028 1.57650 -0.23282 8.74962 0.38488 -2.15589 -5.02494 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.90638 872123.16968 4730012.90867 11.80803 48.17150 534.19731 1.89328 -0.01601 9.60665 0.70167 -1.93908 -4.16791 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.93262 872123.23397 4730013.37515 11.80803 48.17150 534.57081 1.95084 0.26615 9.98015 0.75922 -1.65692 -3.79441 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.44547 872123.11676 4730013.84584 11.80803 48.17151 534.58753 1.93580 0.95325 9.99688 0.74418 -0.96983 -3.77768 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.91712 872123.00276 4730014.14716 11.80803 48.17151 535.10440 1.72770 0.82757 10.51374 0.53608 -1.09551 -3.26082 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.90946 872122.96311 4730014.27723 11.80803 48.17151 535.19091 1.69045 0.92595 10.60025 0.49884 -0.99713 -3.17431 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.85995 872123.14457 4730014.79767 11.80803 48.17151 535.57116 1.87821 1.28147 10.98050 0.68659 -0.64161 -2.79406 8 8 0 1.77 2013-Sep-20 09:11:31 4171697.06111 872122.99213 4730014.87195 11.80803 48.17151 535.73701 1.68782 1.20753 11.14636 0.49620 -0.71555 -2.62821 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.82169 872122.98291 4730014.50520 11.80803 48.17151 535.30618 1.72779 1.13897 10.71552 0.53618 -0.78410 -3.05904 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.27066 872123.20205 4730014.31034 11.80803 48.17151 534.83118 2.05506 1.37752 10.24053 0.86344 -0.54555 -3.53403 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.66869 872123.31062 4730014.51046 11.80803 48.17151 535.25494 2.07988 1.20411 10.66429 0.88827 -0.71896 -3.11027 8 8 0 1.77 2013-Sep-20 09:11:31 4171696.89869 872123.13147 4730014.82167 11.80803 48.17151 535.61254 1.85745 1.27122 11.02188 0.66583 -0.65186 -2.75268 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.32813 872123.31435 4730014.33550 11.80803 48.17151 534.90277 2.15322 1.33526 10.31211 0.96160 -0.58782 -3.46245 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.18633 872123.20310 4730014.74184 11.80803 48.17151 535.09780 2.07334 1.72663 10.50715 0.88173 -0.19644 -3.26742 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.27298 872123.10448 4730014.63518 11.80803 48.17151 535.06143 1.95908 1.60734 10.47078 0.76746 -0.31573 -3.30379 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.10210 872123.03634 4730014.64304 11.80803 48.17151 534.94644 1.92734 1.74760 10.35579 0.73573 -0.17547 -3.41877 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.45372 872123.10537 4730014.93485 11.80803 48.17151 535.40283 1.92296 1.67523 10.81218 0.73135 -0.24785 -2.96238 8 8 0 1.77 2013-Sep-20 09:11:32 4171695.86908 872123.18824 4730014.32371 11.80803 48.17151 534.57711 2.12371 1.68144 9.98646 0.93209 -0.24163 -3.78811 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.20607 872123.06401 4730014.80380 11.80803 48.17151 535.13787 1.93315 1.77477 10.54722 0.74153 -0.14831 -3.22735 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.15347 872123.13235 4730015.53661 11.80803 48.17152 535.65892 2.01081 2.29142 11.06826 0.81920 0.36835 -2.70630 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.10099 872122.91880 4730015.59920 11.80803 48.17152 535.64215 1.81252 2.40401 11.05150 0.62090 0.48093 -2.72306 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.24578 872122.51715 4730016.02501 11.80802 48.17152 535.99915 1.38974 2.64362 11.40849 0.19812 0.72055 -2.36607 8 8 0 1.77 2013-Sep-20 09:11:32 4171696.72054 872122.33254 4730017.07891 11.80802 48.17152 537.06919 1.11189 3.02834 12.47853 -0.07973 1.10526 -1.29603 8 8 0 1.77 2013-Sep-20 09:11:32 4171697.13285 872122.48619 4730018.29592 11.80802 48.17153 538.26615 1.17791 3.51581 13.67550 -0.01371 1.59273 -0.09907 8 8 0 1.77 2013-Sep-20 09:11:32 4171697.43301 872122.61570 4730018.73323 11.80802 48.17153 538.80562 1.24326 3.56877 14.21497 0.05164 1.64570 0.44040 8 8 0 1.77 2013-Sep-20 09:11:32 4171697.83279 872122.26746 4730019.24052 11.80802 48.17153 539.39708 0.82058 3.66860 14.80642 -0.37104 1.74552 1.03186 8 8 0 1.77 2013-Sep-20 09:11:32 4171698.11794 872122.37574 4730020.06919 11.80802 48.17153 540.21547 0.86822 3.99675 15.62482 -0.32340 2.07367 1.85026 8 8 0 1.77 2013-Sep-20 09:11:32 4171698.54136 872122.49566 4730021.03681 11.80802 48.17154 541.22926 0.89895 4.31494 16.63861 -0.29266 2.39186 2.86404 8 8 0 1.77 2013-Sep-20 09:11:32 4171699.86273 872122.11376 4730022.35947 11.80801 48.17154 543.02530 0.25474 4.29148 18.43464 -0.93688 2.36841 4.66008 8 8 0 1.77 2013-Sep-20 09:11:32 4171699.80268 872122.20783 4730021.88027 11.80801 48.17153 542.64186 0.35911 4.00136 18.05121 -0.83251 2.07828 4.27664 8 8 0 1.77 2013-Sep-20 09:11:32 4171700.62569 872122.20454 4730022.52266 11.80801 48.17153 543.65734 0.18747 3.82999 19.06668 -1.00415 1.90691 5.29212 8 8 0 1.77 2013-Sep-20 09:11:32 4171701.64625 872122.16838 4730023.30237 11.80800 48.17153 544.89961 -0.05677 3.61112 20.30895 -1.24838 1.68804 6.53439 8 8 0 1.77 2013-Sep-20 09:11:32 4171700.59443 872122.18177 4730022.93324 11.80801 48.17153 543.93976 0.17158 4.13008 19.34910 -1.02004 2.20700 5.57454 8 8 0 1.77 2013-Sep-20 09:11:32 4171700.74012 872122.23819 4730022.31783 11.80801 48.17153 543.58400 0.19700 3.60479 18.99334 -0.99462 1.68171 5.21878 8 8 0 1.77 2013-Sep-20 09:11:32 4171700.60245 872122.27861 4730021.57296 11.80801 48.17153 542.94461 0.26473 3.20228 18.35395 -0.92688 1.27921 4.57939 8 8 0 1.77 2013-Sep-20 09:11:32 4171700.09069 872122.54839 4730020.67258 11.80801 48.17152 541.97645 0.63353 2.93395 17.38579 -0.55809 1.01087 3.61123 8 8 0 1.77 2013-Sep-20 09:11:32 4171700.17827 872122.49543 4730021.07262 11.80801 48.17153 542.32447 0.56377 3.14493 17.73382 -0.62785 1.22186 3.95925 8 8 0 1.77 2013-Sep-20 09:11:33 4171700.52122 872122.39584 4730021.11704 11.80801 48.17152 542.56786 0.39610 2.93960 17.97721 -0.79551 1.01652 4.20264 8 8 0 1.77 2013-Sep-20 09:11:33 4171700.50160 872122.53942 4730021.07448 11.80801 48.17152 542.54293 0.54066 2.90364 17.95227 -0.65095 0.98056 4.17771 8 8 0 1.77 2013-Sep-20 09:11:33 4171699.96097 872122.36479 4730020.57774 11.80801 48.17152 541.79604 0.48036 2.99331 17.20539 -0.71126 1.07023 3.43082 8 8 0 1.77 2013-Sep-20 09:11:33 4171699.87708 872122.52914 4730020.89270 11.80801 48.17153 541.99839 0.65840 3.23948 17.40774 -0.53322 1.31640 3.63318 8 8 0 1.77 2013-Sep-20 09:11:33 4171700.39593 872122.36514 4730020.89595 11.80801 48.17152 542.31713 0.39169 2.88823 17.72648 -0.79993 0.96515 3.95192 8 8 0 1.77 2013-Sep-20 09:11:33 4171700.84997 872122.28805 4730021.13728 11.80801 48.17152 542.78284 0.22332 2.72975 18.19218 -0.96829 0.80668 4.41762 8 8 0 1.77 2013-Sep-20 09:11:33 4171700.80172 872122.66262 4730021.11873 11.80801 48.17152 542.78863 0.59983 2.69546 18.19798 -0.59178 0.77238 4.42341 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.20726 872122.54494 4730020.99090 11.80801 48.17152 542.94205 0.40166 2.33236 18.35139 -0.78996 0.40929 4.57683 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.79912 872122.61896 4730021.71637 11.80801 48.17152 543.87909 0.35300 2.37321 19.28844 -0.83862 0.45013 5.51387 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.92734 872122.66132 4730021.76378 11.80801 48.17152 544.00391 0.36823 2.30484 19.41325 -0.82339 0.38176 5.63869 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.71728 872122.99727 4730021.38595 11.80802 48.17152 543.63109 0.74005 2.15486 19.04043 -0.45157 0.23178 5.26587 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.13521 872123.10929 4730020.58580 11.80802 48.17152 542.67018 0.96881 2.02870 18.07952 -0.22281 0.10562 4.30496 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.32333 872123.10249 4730020.89961 11.80802 48.17152 543.02589 0.92366 2.10181 18.43523 -0.26796 0.17873 4.66067 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.64359 872122.60096 4730021.57231 11.80801 48.17151 544.32055 0.16257 1.66394 19.72990 -1.02904 -0.25914 5.95534 8 8 0 1.77 2013-Sep-20 09:11:33 4171703.18094 872122.57524 4730021.77828 11.80801 48.17151 544.82130 0.02744 1.41329 20.23065 -1.16418 -0.50979 6.45608 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.50049 872122.75788 4730020.47607 11.80801 48.17151 543.43170 0.34545 1.01330 18.84105 -0.84616 -0.90978 5.06648 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.93086 872122.77874 4730020.11851 11.80801 48.17151 542.79626 0.48244 1.18713 18.20561 -0.70918 -0.73594 4.43104 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.33724 872122.68858 4730020.69325 11.80801 48.17151 543.47750 0.31103 1.28778 18.88685 -0.88059 -0.63530 5.11229 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.47075 872122.84113 4730019.74234 11.80801 48.17150 542.87691 0.43303 0.53297 18.28625 -0.75859 -1.39010 4.51169 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.13286 872123.00777 4730018.89500 11.80801 48.17150 542.04769 0.66528 0.18891 17.45704 -0.52633 -1.73416 3.68247 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.76657 872123.10940 4730019.35636 11.80801 48.17150 542.81902 0.63509 0.01889 18.22837 -0.55653 -1.90419 4.45380 8 8 0 1.77 2013-Sep-20 09:11:33 4171702.42018 872123.04641 4730019.25701 11.80801 48.17150 542.51027 0.64431 0.21489 17.91962 -0.54731 -1.70819 4.14505 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.84028 872123.36614 4730018.86866 11.80802 48.17150 541.88597 1.07595 0.33011 17.29532 -0.11567 -1.59297 3.52075 8 8 0 1.77 2013-Sep-20 09:11:33 4171701.14808 872123.15131 4730018.74197 11.80802 48.17150 541.31039 1.00731 0.78325 16.71974 -0.18431 -1.13982 2.94517 8 8 0 1.77 2013-Sep-20 09:11:33 4171700.53555 872123.31218 4730017.57763 11.80802 48.17150 540.06489 1.29012 0.42898 15.47424 0.09850 -1.49410 1.69967 8 8 0 1.77 2013-Sep-20 09:11:34 4171700.42117 872123.25576 4730017.54686 11.80802 48.17150 539.95960 1.25829 0.50049 15.36895 0.06668 -1.42258 1.59438 8 8 0 1.77 2013-Sep-20 09:11:34 4171700.20457 872123.16736 4730017.03642 11.80802 48.17150 539.42579 1.21609 0.33154 14.83514 0.02448 -1.59154 1.06057 8 8 0 1.77 2013-Sep-20 09:11:34 4171699.48898 872123.38902 4730016.53228 11.80803 48.17150 538.61325 1.57949 0.48346 14.02260 0.38788 -1.43962 0.24803 8 8 0 1.77 2013-Sep-20 09:11:34 4171699.10423 872123.31378 4730016.40570 11.80803 48.17150 538.25750 1.58458 0.69115 13.66685 0.39297 -1.23193 -0.10772 8 8 0 1.77 2013-Sep-20 09:11:34 4171698.53020 872123.35368 4730015.91311 11.80803 48.17150 537.52118 1.74110 0.77523 12.93052 0.54948 -1.14785 -0.84404 8 8 0 1.77 2013-Sep-20 09:11:34 4171698.50153 872123.20864 4730015.82793 11.80803 48.17150 537.41920 1.60500 0.76146 12.82854 0.41338 -1.16162 -0.94602 8 8 0 1.77 2013-Sep-20 09:11:34 4171698.36186 872122.83570 4730016.44436 11.80802 48.17151 537.73645 1.26853 1.33130 13.14580 0.07692 -0.59178 -0.62876 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.86285 872123.10170 4730016.43915 11.80803 48.17151 537.44312 1.63102 1.65122 12.85246 0.43940 -0.27185 -0.92210 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.51138 872123.13143 4730016.77232 11.80803 48.17152 537.46601 1.73204 2.12524 12.87535 0.54042 0.20216 -0.89921 8 8 0 1.77 2013-Sep-20 09:11:34 4171696.91445 872123.48157 4730016.67884 11.80804 48.17152 537.05446 2.19692 2.44489 12.46381 1.00530 0.52182 -1.31076 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.26836 872123.33992 4730016.78699 11.80803 48.17152 537.34675 1.98584 2.28048 12.75610 0.79423 0.35741 -1.01847 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.49048 872123.06464 4730017.13771 11.80803 48.17152 537.71552 1.67093 2.39435 13.12486 0.47932 0.47127 -0.64970 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.48935 872122.81882 4730017.21277 11.80802 48.17152 537.73716 1.43055 2.48271 13.14650 0.23894 0.55963 -0.62806 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.29650 872122.92735 4730017.19523 11.80803 48.17152 537.61301 1.57625 2.59512 13.02235 0.38463 0.67205 -0.75221 8 8 0 1.77 2013-Sep-20 09:11:34 4171696.80407 872122.82700 4730016.90491 11.80803 48.17152 537.06153 1.57879 2.77598 12.47088 0.38718 0.85290 -1.30368 8 8 0 1.77 2013-Sep-20 09:11:34 4171696.78524 872122.99113 4730016.45835 11.80803 48.17152 536.73889 1.74330 2.46688 12.14823 0.55168 0.54380 -1.62633 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.30776 872123.19322 4730017.55162 11.80803 48.17152 537.92221 1.83418 2.78404 13.33155 0.64257 0.86097 -0.44301 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.26132 872123.54045 4730017.62032 11.80803 48.17152 537.99047 2.18358 2.81079 13.39981 0.99196 0.88772 -0.37475 8 8 0 1.77 2013-Sep-20 09:11:34 4171696.82780 872124.11133 4730017.34288 11.80804 48.17152 537.57865 2.83109 2.85492 12.98799 1.63947 0.93184 -0.78657 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.46836 872124.32511 4730018.39105 11.80804 48.17153 538.80701 2.90926 3.05414 14.21635 1.71765 1.13106 0.44179 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.55276 872124.50549 4730018.71691 11.80805 48.17153 539.12953 3.06855 3.18239 14.53887 1.87694 1.25931 0.76431 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.55168 872124.51393 4730018.39441 11.80805 48.17152 538.88967 3.07703 2.96681 14.29902 1.88542 1.04373 0.52445 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.36481 872124.89308 4730018.29105 11.80805 48.17152 538.74240 3.48640 2.97637 14.15175 2.29478 1.05329 0.37719 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.26694 872125.02011 4730018.57381 11.80805 48.17153 538.90656 3.63077 3.21696 14.31590 2.43915 1.29388 0.54134 8 8 0 1.77 2013-Sep-20 09:11:34 4171697.67706 872125.05021 4730019.04317 11.80805 48.17153 539.52812 3.57632 3.22625 14.93747 2.38470 1.30317 1.16291 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.65767 872124.80853 4730019.75907 11.80805 48.17152 540.66873 3.13908 3.02531 16.07807 1.94747 1.10223 2.30351 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.51682 872124.76603 4730019.92156 11.80805 48.17153 540.69206 3.12630 3.24288 16.10141 1.93468 1.31981 2.32684 8 8 0 1.77 2013-Sep-20 09:11:35 4171697.78674 872124.63825 4730019.06154 11.80805 48.17153 539.55719 3.15063 3.22132 14.96653 1.95901 1.29824 1.19197 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.29502 872124.37519 4730019.82941 11.80804 48.17153 540.42526 2.78912 3.40280 15.83461 1.59751 1.47972 2.06004 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.28081 872124.54475 4730020.08474 11.80805 48.17153 540.62939 2.95800 3.55760 16.03873 1.76638 1.63452 2.26417 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.43010 872124.68264 4730019.54760 11.80805 48.17153 540.34542 3.06242 3.06946 15.75476 1.87080 1.14638 1.98020 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.61533 872124.57665 4730018.99425 11.80804 48.17152 540.03954 2.92077 2.58148 15.44889 1.72915 0.65841 1.67433 8 8 0 1.77 2013-Sep-20 09:11:35 4171697.52985 872124.81035 4730017.96036 11.80805 48.17152 538.59245 3.37165 2.64807 14.00179 2.18004 0.72499 0.22723 8 8 0 1.77 2013-Sep-20 09:11:35 4171697.44892 872124.28273 4730018.19984 11.80804 48.17152 538.64606 2.87175 2.94726 14.05540 1.68014 1.02419 0.28084 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.84425 872124.24928 4730018.11610 11.80805 48.17153 538.18437 2.96275 3.33755 13.59371 1.77114 1.41447 -0.18085 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.05476 872124.25250 4730017.70527 11.80805 48.17153 537.36331 3.12746 3.63891 12.77265 1.93584 1.71583 -1.00191 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.41720 872123.98307 4730017.99384 11.80804 48.17153 537.77816 2.78956 3.60808 13.18751 1.59794 1.68501 -0.58706 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.64325 872124.03123 4730018.07510 11.80804 48.17153 537.99286 2.79044 3.49006 13.40220 1.59882 1.56698 -0.37236 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.50813 872123.77058 4730017.61193 11.80804 48.17153 537.52395 2.56296 3.31946 12.93330 1.37135 1.39639 -0.84127 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.75877 872123.80649 4730017.11835 11.80804 48.17152 537.32468 2.54682 2.80200 12.73402 1.35521 0.87893 -1.04054 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.93473 872123.61640 4730017.06774 11.80804 48.17152 537.37588 2.32474 2.66890 12.78523 1.13313 0.74583 -0.98933 8 8 0 1.77 2013-Sep-20 09:11:35 4171697.01026 872123.53990 4730016.75921 11.80804 48.17152 537.18485 2.23441 2.41972 12.59420 1.04280 0.49664 -1.18037 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.75450 872123.48011 4730017.12431 11.80804 48.17152 537.28179 2.22822 2.85887 12.69113 1.03660 0.93579 -1.08343 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.56156 872123.46089 4730017.25945 11.80804 48.17153 537.25391 2.24889 3.09265 12.66326 1.05728 1.16957 -1.11130 8 8 0 1.77 2013-Sep-20 09:11:35 4171696.60040 872123.20806 4730017.40097 11.80803 48.17153 537.35022 1.99347 3.19725 12.75956 0.80185 1.27418 -1.01500 8 8 0 1.77 2013-Sep-20 09:11:35 4171697.69286 872123.10255 4730017.47997 11.80803 48.17152 538.10783 1.66663 2.46920 13.51717 0.47501 0.54613 -0.25739 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.61452 872123.20546 4730017.82572 11.80803 48.17152 538.98116 1.57876 2.01186 14.39051 0.38714 0.08878 0.61594 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.81027 872122.96455 4730017.84947 11.80802 48.17151 539.09376 1.30289 1.92165 14.50311 0.11127 -0.00142 0.72854 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.94150 872122.88799 4730017.67845 11.80802 48.17151 539.04155 1.20110 1.72356 14.45089 0.00949 -0.19951 0.67633 8 8 0 1.77 2013-Sep-20 09:11:35 4171698.78644 872122.53563 4730017.48346 11.80802 48.17151 538.74695 0.88792 1.76035 14.15629 -0.30369 -0.16273 0.38173 8 8 0 1.77 2013-Sep-20 09:11:36 4171698.71258 872122.54555 4730017.47869 11.80802 48.17151 538.69653 0.91275 1.80952 14.10587 -0.27887 -0.11355 0.33131 8 8 0 1.77 2013-Sep-20 09:11:36 4171692.08780 872117.62066 4730009.36614 11.80797 48.17152 527.65481 -2.55228 1.98215 3.06416 -3.74389 0.05907 -10.71041 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.42295 872122.68150 4730017.67368 11.80802 48.17151 539.32410 0.90046 1.40071 14.73344 -0.29116 -0.52237 0.95888 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.34739 872122.74404 4730017.51190 11.80802 48.17151 539.16276 0.97714 1.33839 14.57211 -0.21448 -0.58469 0.79754 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.57788 872122.43968 4730017.96182 11.80801 48.17151 539.60694 0.63205 1.51674 15.01629 -0.55957 -0.40634 1.24173 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.82119 872122.31826 4730018.04019 11.80801 48.17151 539.80760 0.46341 1.41005 15.21694 -0.72820 -0.51302 1.44238 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.93691 872122.20019 4730019.23629 11.80801 48.17152 540.75829 0.32416 2.14134 16.16764 -0.86746 0.21826 2.39307 8 8 0 1.77 2013-Sep-20 09:11:36 4171700.21565 872122.29495 4730019.22303 11.80801 48.17151 540.94331 0.35987 1.91474 16.35265 -0.83175 -0.00833 2.57809 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.68289 872122.42175 4730019.28578 11.80801 48.17152 540.65959 0.59301 2.32583 16.06893 -0.59860 0.40276 2.29437 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.17586 872122.30296 4730018.98768 11.80801 48.17152 540.09026 0.58049 2.51496 15.49961 -0.61113 0.59189 1.72504 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.55863 872122.33378 4730019.24155 11.80801 48.17152 540.53350 0.53234 2.40038 15.94285 -0.65928 0.47731 2.16828 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.30149 872122.11525 4730018.45649 11.80801 48.17152 539.75084 0.37105 2.09770 15.16018 -0.82057 0.17462 1.38562 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.50347 872121.95051 4730018.67473 11.80801 48.17152 540.02283 0.16846 2.12105 15.43217 -1.02315 0.19797 1.65761 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.93110 872122.07347 4730018.97306 11.80801 48.17152 540.54106 0.20131 1.98935 15.95041 -0.99031 0.06627 2.17584 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.81615 872122.02527 4730018.75454 11.80801 48.17152 540.29662 0.17765 1.93481 15.70597 -1.01396 0.01173 1.93141 8 8 0 1.77 2013-Sep-20 09:11:36 4171700.26621 872121.83560 4730018.56130 11.80800 48.17151 540.42053 -0.10010 1.50659 15.82988 -1.29172 -0.41648 2.05531 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.54501 872122.00064 4730018.16401 11.80801 48.17151 539.67623 0.20902 1.74250 15.08557 -0.98259 -0.18058 1.31101 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.70760 872122.10430 4730018.18608 11.80801 48.17151 539.81296 0.27722 1.62283 15.22230 -0.91439 -0.30025 1.44774 8 8 0 1.77 2013-Sep-20 09:11:36 4171700.17929 872121.62729 4730018.70168 11.80800 48.17151 540.43997 -0.28622 1.69537 15.84931 -1.47783 -0.22770 2.07475 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.92479 872121.77983 4730017.85113 11.80800 48.17151 539.66087 -0.08482 1.29051 15.07022 -1.27644 -0.63256 1.29565 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.19856 872121.68303 4730017.00367 11.80801 48.17151 538.54211 -0.03096 1.26979 13.95145 -1.22258 -0.65329 0.17689 8 8 0 1.77 2013-Sep-20 09:11:36 4171699.05166 872121.68371 4730017.12761 11.80801 48.17151 538.53865 -0.00024 1.45949 13.94800 -1.19186 -0.46359 0.17343 8 8 0 1.77 2013-Sep-20 09:11:36 4171698.83178 872121.65585 4730017.32318 11.80801 48.17151 538.53704 0.01749 1.75454 13.94639 -1.17413 -0.16854 0.17183 8 8 0 1.77 2013-Sep-20 09:11:36 4171697.67544 872121.59601 4730016.92800 11.80801 48.17152 537.47957 0.19554 2.34352 12.88891 -0.99608 0.42044 -0.88565 8 8 0 1.77 2013-Sep-20 09:11:36 4171696.75381 872121.63033 4730015.94438 11.80801 48.17152 536.14968 0.41772 2.35452 11.55902 -0.77389 0.43145 -2.21554 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.68678 872121.53815 4730015.90502 11.80801 48.17152 536.06401 0.34121 2.39122 11.47336 -0.85041 0.46814 -2.30121 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.78946 872121.23712 4730015.64127 11.80801 48.17152 535.89343 0.02555 2.18634 11.30278 -1.16607 0.26326 -2.47179 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.27050 872121.29362 4730015.79515 11.80801 48.17152 535.67703 0.18705 2.65885 11.08638 -1.00457 0.73578 -2.68819 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.15309 872121.44701 4730015.43961 11.80801 48.17152 535.35639 0.36122 2.48399 10.76574 -0.83040 0.56092 -3.00883 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.02501 872121.40946 4730015.47945 11.80801 48.17152 535.29734 0.35067 2.60971 10.70669 -0.84095 0.68664 -3.06788 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.34332 872121.48162 4730015.55857 11.80801 48.17152 535.57393 0.35616 2.41930 10.98328 -0.83545 0.49622 -2.79128 8 8 0 1.77 2013-Sep-20 09:11:37 4171697.09687 872121.37504 4730015.67203 11.80801 48.17152 536.13585 0.09764 1.96160 11.54519 -1.09397 0.03852 -2.22937 8 8 0 1.77 2013-Sep-20 09:11:37 4171697.42386 872121.49349 4730015.68264 11.80801 48.17151 536.37337 0.14667 1.71211 11.78272 -1.04495 -0.21096 -1.99185 8 8 0 1.77 2013-Sep-20 09:11:37 4171697.25907 872121.47626 4730015.53919 11.80801 48.17151 536.15656 0.16353 1.73926 11.56590 -1.02809 -0.18381 -2.20866 8 8 0 1.77 2013-Sep-20 09:11:37 4171697.41257 872121.73226 4730016.38176 11.80801 48.17152 536.91953 0.38269 2.15019 12.32888 -0.80892 0.22711 -1.44569 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.66260 872121.97635 4730016.02795 11.80802 48.17152 536.19963 0.77509 2.42402 11.60897 -0.41653 0.50094 -2.16559 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.52940 872122.07884 4730015.80709 11.80802 48.17152 535.96209 0.90267 2.35825 11.37144 -0.28895 0.43518 -2.40313 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.42724 872122.07034 4730015.85008 11.80802 48.17152 535.92628 0.91525 2.46273 11.33562 -0.27636 0.53966 -2.43894 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.03158 872122.19825 4730015.86903 11.80802 48.17152 535.69957 1.12142 2.74445 11.10891 -0.07020 0.82137 -2.66565 8 8 0 1.77 2013-Sep-20 09:11:37 4171696.52098 872122.29289 4730015.90855 11.80802 48.17152 536.06141 1.11391 2.39942 11.47075 -0.07770 0.47635 -2.30381 8 8 0 1.77 2013-Sep-20 09:11:37 4171695.43143 872122.56906 4730014.70352 11.80803 48.17152 534.48993 1.60719 2.34836 9.89927 0.41558 0.42529 -3.87529 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.98794 872122.92920 4730013.97303 11.80803 48.17152 533.70525 2.05046 2.12975 9.11460 0.85885 0.20668 -4.65997 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.79285 872122.92647 4730013.76788 11.80803 48.17152 533.42466 2.08771 2.13565 8.83401 0.89609 0.21257 -4.94056 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.28728 872122.93402 4730013.96065 11.80804 48.17152 533.23931 2.19856 2.63181 8.64865 1.00694 0.70873 -5.12591 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.60212 872123.07678 4730014.43498 11.80804 48.17152 533.81775 2.27387 2.69673 9.22710 1.08225 0.77366 -4.54747 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.59957 872123.41621 4730014.86278 11.80804 48.17152 534.18118 2.60664 2.93214 9.59052 1.41502 1.00907 -4.18404 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.71925 872123.65836 4730015.04824 11.80804 48.17152 534.43054 2.81918 2.93161 9.83989 1.62756 1.00853 -3.93467 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.40657 872123.74338 4730014.91773 11.80805 48.17153 534.14079 2.96638 3.05967 9.55014 1.77477 1.13659 -4.22443 8 8 0 1.77 2013-Sep-20 09:11:37 4171693.82276 872123.87665 4730014.40044 11.80805 48.17153 533.39241 3.21631 3.12018 8.80176 2.02469 1.19711 -4.97281 8 8 0 1.77 2013-Sep-20 09:11:37 4171694.43490 872123.87789 4730014.61609 11.80805 48.17152 533.95287 3.09225 2.81734 9.36222 1.90063 0.89426 -4.41234 8 8 0 1.77 2013-Sep-20 09:11:38 4171694.56204 872123.70075 4730015.20182 11.80804 48.17153 534.44815 2.89285 3.14223 9.85749 1.70123 1.21916 -3.91707 8 8 0 1.77 2013-Sep-20 09:11:38 4171694.88830 872123.56695 4730015.54855 11.80804 48.17153 534.90123 2.69511 3.15590 10.31057 1.50350 1.23283 -3.46399 8 8 0 1.77 2013-Sep-20 09:11:38 4171694.40509 872123.47126 4730015.61395 11.80804 48.17153 534.62147 2.70033 3.56655 10.03081 1.50871 1.64348 -3.74375 8 8 0 1.77 2013-Sep-20 09:11:38 4171694.81287 872123.60448 4730015.55851 11.80804 48.17153 534.86454 2.74728 3.21184 10.27389 1.55567 1.28876 -3.50068 8 8 0 1.77 2013-Sep-20 09:11:38 4171695.06552 872123.69697 4730015.22353 11.80804 48.17152 534.79248 2.78612 2.79006 10.20182 1.59450 0.86699 -3.57274 8 8 0 1.77 2013-Sep-20 09:11:38 4171695.13714 872123.96936 4730015.17086 11.80805 48.17152 534.83716 3.03809 2.66117 10.24650 1.84647 0.73809 -3.52806 8 8 0 1.77 2013-Sep-20 09:11:38 4171695.53773 872123.96143 4730015.20964 11.80805 48.17152 535.12647 2.94835 2.39605 10.53582 1.75673 0.47298 -3.23874 8 8 0 1.77 2013-Sep-20 09:11:38 4171695.58338 872124.17985 4730015.02429 11.80805 48.17152 535.04797 3.15280 2.20584 10.45731 1.96118 0.28277 -3.31725 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.24390 872124.05151 4730015.98736 11.80804 48.17152 536.17926 2.89202 2.38592 11.58861 1.70040 0.46284 -2.18596 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.13432 872124.13431 4730016.24343 11.80805 48.17152 536.30983 2.99549 2.62399 11.71918 1.80387 0.70091 -2.05539 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.63458 872124.14825 4730016.13636 11.80804 48.17152 536.55853 2.90676 2.18558 11.96787 1.71515 0.26251 -1.80669 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.17818 872123.87674 4730016.26463 11.80804 48.17152 536.31912 2.73439 2.64542 11.72846 1.54278 0.72234 -2.04610 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.47039 872123.99945 4730016.03400 11.80804 48.17152 536.35476 2.79471 2.25976 11.76410 1.60309 0.33669 -2.01046 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.72307 872123.89857 4730016.65270 11.80804 48.17152 536.96696 2.64425 2.50346 12.37630 1.45264 0.58038 -1.39826 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.48511 872124.07841 4730016.49433 11.80804 48.17152 536.71816 2.86898 2.54399 12.12750 1.67737 0.62091 -1.64706 8 8 0 1.77 2013-Sep-20 09:11:38 4171696.77053 872123.91100 4730017.14859 11.80804 48.17152 537.36915 2.64671 2.79766 12.77849 1.45509 0.87458 -0.99607 8 8 0 1.77 2013-Sep-20 09:11:38 4171697.76226 872124.02423 4730017.93984 11.80804 48.17152 538.62159 2.55460 2.58474 14.03094 1.36299 0.66166 0.25637 8 8 0 1.77 2013-Sep-20 09:11:38 4171697.80503 872124.02244 4730018.57734 11.80804 48.17152 539.12429 2.54410 2.97897 14.53363 1.35249 1.05589 0.75907 8 8 0 1.77 2013-Sep-20 09:11:38 4171698.31009 872123.51650 4730019.21589 11.80803 48.17153 539.86076 1.94552 3.11359 15.27010 0.75391 1.19051 1.49554 8 8 0 1.77 2013-Sep-20 09:11:38 4171698.69098 872123.15931 4730019.58334 11.80803 48.17153 540.33445 1.51794 3.13529 15.74380 0.32632 1.21222 1.96924 8 8 0 1.77 2013-Sep-20 09:11:38 4171698.72521 872122.93230 4730019.69460 11.80802 48.17153 540.40872 1.28873 3.21914 15.81807 0.09711 1.29606 2.04351 8 8 0 1.77 2013-Sep-20 09:11:38 4171698.66931 872122.71251 4730019.83349 11.80802 48.17153 540.44574 1.08503 3.38605 15.85508 -0.10658 1.46298 2.08052 8 8 0 1.77 2013-Sep-20 09:11:38 4171699.00295 872122.78526 4730020.35876 11.80802 48.17153 541.06486 1.08797 3.48191 16.47420 -0.10364 1.55884 2.69964 8 8 0 1.77 2013-Sep-20 09:11:38 4171700.11472 872122.80642 4730020.88670 11.80802 48.17152 542.18689 0.88117 3.01987 17.59624 -0.31044 1.09680 3.82167 8 8 0 1.77 2013-Sep-20 09:11:38 4171699.80387 872122.80827 4730020.90225 11.80802 48.17153 541.99581 0.94660 3.25669 17.40515 -0.24502 1.33361 3.63059 8 8 0 1.77 2013-Sep-20 09:11:39 4171699.70984 872122.81727 4730021.22894 11.80802 48.17153 542.17908 0.97465 3.54177 17.58843 -0.21697 1.61869 3.81387 8 8 0 1.77 2013-Sep-20 09:11:39 4171699.82524 872122.89495 4730021.46017 11.80802 48.17153 542.43733 1.02707 3.59996 17.84667 -0.16454 1.67688 4.07211 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.08447 872122.55080 4730021.35202 11.80801 48.17153 542.47899 0.63716 3.39124 17.88833 -0.55446 1.46816 4.11377 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.84119 872122.18652 4730021.89322 11.80801 48.17153 543.32654 0.12574 3.25578 18.73588 -1.06588 1.33270 4.96132 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.05830 872122.04611 4730022.34280 11.80800 48.17153 543.78410 -0.05613 3.41866 19.19344 -1.24775 1.49558 5.41888 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.75315 872122.03694 4730022.10137 11.80801 48.17153 543.40375 -0.00266 3.48161 18.81310 -1.19428 1.55854 5.03853 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.56624 872121.96730 4730022.35195 11.80801 48.17153 543.45895 -0.03259 3.79568 18.86829 -1.22420 1.87260 5.09373 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.19361 872121.94916 4730022.99533 11.80800 48.17153 544.34543 -0.17872 3.76992 19.75477 -1.37034 1.84684 5.98021 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.96928 872121.74727 4730022.88855 11.80800 48.17153 544.09187 -0.33043 3.89311 19.50121 -1.52205 1.97003 5.72665 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.42617 872121.82050 4730022.90283 11.80800 48.17153 544.41076 -0.35225 3.55823 19.82010 -1.54387 1.63516 6.04554 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.53088 872121.64036 4730022.80282 11.80800 48.17153 544.38000 -0.55000 3.44263 19.78935 -1.74162 1.51955 6.01479 8 8 0 1.77 2013-Sep-20 09:11:39 4171702.34254 872121.67101 4730022.76349 11.80800 48.17152 544.88472 -0.68609 2.81972 20.29407 -1.87771 0.89664 6.51950 8 8 0 1.77 2013-Sep-20 09:11:39 4171702.28366 872121.18544 4730023.27272 11.80799 48.17153 545.15947 -1.14934 3.27631 20.56881 -2.34096 1.35323 6.79425 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.47633 872121.32373 4730022.14251 11.80799 48.17153 543.80916 -0.84877 3.09033 19.21850 -2.04039 1.16726 5.44394 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.83881 872121.33110 4730021.77560 11.80800 48.17153 543.12059 -0.71110 3.30951 18.52994 -1.90271 1.38643 4.75538 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.43604 872121.04586 4730021.69105 11.80799 48.17153 542.75574 -0.90788 3.59039 18.16509 -2.09949 1.66731 4.39053 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.98825 872120.91235 4730021.57206 11.80799 48.17153 543.00933 -1.15157 3.12862 18.41868 -2.34319 1.20554 4.64412 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.84387 872121.02627 4730021.07622 11.80799 48.17152 542.56116 -1.01051 2.88588 17.97050 -2.20212 0.96281 4.19594 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.81682 872121.15354 4730021.32315 11.80799 48.17152 543.39766 -1.08503 2.32151 18.80701 -2.27665 0.39843 5.03244 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.24723 872121.27623 4730020.62791 11.80799 48.17152 542.52452 -0.84838 2.25458 17.93387 -2.04000 0.33151 4.15930 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.65371 872121.36783 4730020.99764 11.80799 48.17152 543.07787 -0.84190 2.19072 18.48721 -2.03352 0.26764 4.71265 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.85918 872121.70263 4730020.19240 11.80800 48.17152 542.00488 -0.35160 2.18216 17.41422 -1.54322 0.25908 3.63966 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.56389 872121.70693 4730020.33065 11.80800 48.17152 541.91572 -0.28696 2.48907 17.32507 -1.47858 0.56600 3.55050 8 8 0 1.77 2013-Sep-20 09:11:39 4171700.47592 872121.79982 4730019.85935 11.80800 48.17152 541.51979 -0.17803 2.22477 16.92913 -1.36965 0.30169 3.15457 8 8 0 1.77 2013-Sep-20 09:11:39 4171701.35448 872121.62620 4730019.94851 11.80800 48.17151 542.13604 -0.52777 1.66990 17.54539 -1.71939 -0.25317 3.77082 8 8 0 1.77 2013-Sep-20 09:11:40 4171701.03147 872121.56844 4730020.26469 11.80800 48.17152 542.15291 -0.51820 2.12517 17.56225 -1.70982 0.20209 3.78769 8 8 0 1.77 2013-Sep-20 09:11:40 4171700.45478 872121.84957 4730019.54638 11.80800 48.17152 541.27957 -0.12501 2.02387 16.68891 -1.31663 0.10080 2.91435 8 8 0 1.77 2013-Sep-20 09:11:40 4171699.17139 872121.87706 4730018.49289 11.80801 48.17152 539.66053 0.16452 2.25319 15.06988 -1.02710 0.33011 1.29531 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.92280 872122.10891 4730017.84977 11.80801 48.17152 538.39789 0.64697 2.69962 13.80723 -0.54465 0.77655 0.03267 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.14621 872122.20402 4730016.86091 11.80802 48.17152 537.16707 0.89897 2.59208 12.57642 -0.29264 0.66900 -1.19815 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.13207 872122.23190 4730016.85570 11.80802 48.17152 537.15776 0.92916 2.59467 12.56711 -0.26245 0.67159 -1.20746 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.40063 872122.34713 4730016.74587 11.80802 48.17152 537.26696 0.98700 2.30797 12.67631 -0.20461 0.38489 -1.09826 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.22457 872122.32399 4730016.24064 11.80802 48.17152 536.77241 1.00038 2.10297 12.18176 -0.19124 0.17989 -1.59281 8 8 0 1.77 2013-Sep-20 09:11:40 4171698.06326 872122.22972 4730016.51706 11.80802 48.17151 537.51300 0.73648 1.68997 12.92235 -0.45514 -0.23311 -0.85222 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.48522 872122.40385 4730015.81532 11.80802 48.17151 536.63653 1.02521 1.61704 12.04588 -0.16641 -0.30604 -1.72869 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.33030 872122.67752 4730014.96153 11.80802 48.17151 535.93655 1.32479 1.11890 11.34590 0.13318 -0.80417 -2.42867 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.92837 872122.58276 4730016.00451 11.80802 48.17151 537.09120 1.10965 1.39270 12.50055 -0.08197 -0.53037 -1.27402 8 8 0 1.77 2013-Sep-20 09:11:40 4171697.86454 872122.85176 4730015.72676 11.80802 48.17151 536.87928 1.38602 1.21301 12.28862 0.19440 -0.71007 -1.48594 8 8 0 1.77 2013-Sep-20 09:11:40 4171698.36123 872122.55819 4730016.22885 11.80802 48.17151 537.53759 0.99702 1.23034 12.94693 -0.19459 -0.69274 -0.82763 8 8 0 1.77 2013-Sep-20 09:11:40 4171698.45215 872122.84936 4730016.21352 11.80802 48.17151 537.62525 1.26343 1.10940 13.03460 0.07181 -0.81367 -0.73997 8 8 0 1.77 2013-Sep-20 09:11:40 4171698.63720 872123.07349 4730016.28996 11.80803 48.17151 537.83359 1.44494 0.99124 13.24294 0.25333 -0.93184 -0.53163 8 8 0 1.77 2013-Sep-20 09:11:40 4171698.94598 872123.06790 4730016.21553 11.80802 48.17150 537.97894 1.37628 0.71723 13.38828 0.18466 -1.20584 -0.38628 8 8 0 1.77 2013-Sep-20 09:11:40 4171699.18545 872123.28182 4730016.61339 11.80803 48.17150 538.46092 1.53667 0.77529 13.87027 0.34506 -1.14779 0.09570 8 8 0 1.77 2013-Sep-20 09:11:40 4171699.13623 872123.21815 4730016.21580 11.80803 48.17150 538.12384 1.48443 0.55574 13.53318 0.29281 -1.36733 -0.24138 8 8 0 1.77 2013-Sep-20 09:11:40 4171699.18814 872123.46754 4730016.66122 11.80803 48.17150 538.52366 1.71792 0.77690 13.93301 0.52630 -1.14617 0.15844 8 8 0 1.77 2013-Sep-20 09:11:40 4171699.92052 872123.45256 4730017.32933 11.80803 48.17150 539.49755 1.55339 0.69057 14.90689 0.36177 -1.23250 1.13233 8 8 0 1.77 2013-Sep-20 09:11:40 4171700.45994 872123.61056 4730017.19824 11.80803 48.17150 539.77355 1.59765 0.18562 15.18290 0.40604 -1.73746 1.40834 8 8 0 1.77 2013-Sep-20 09:11:40 4171700.16570 872123.75511 4730016.66704 11.80803 48.17150 539.20538 1.79936 0.02393 14.61473 0.60775 -1.89915 0.84016 8 8 0 1.77 2013-Sep-20 09:11:40 4171700.52505 872123.76365 4730016.45094 11.80803 48.17149 539.28010 1.73419 -0.38360 14.68945 0.54257 -2.30667 0.91488 8 8 0 1.77 2013-Sep-20 09:11:40 4171700.59958 872123.87449 4730016.61073 11.80803 48.17149 539.46295 1.82742 -0.34829 14.87229 0.63581 -2.27137 1.09773 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.03977 872123.41506 4730016.06913 11.80803 48.17150 538.63125 1.49228 -0.23112 14.04059 0.30066 -2.15419 0.26603 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.78730 872123.52751 4730016.16879 11.80803 48.17149 539.20883 1.44938 -0.72703 14.61818 0.25776 -2.65011 0.84361 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.15722 872123.53886 4730015.89908 11.80802 48.17149 539.25089 1.38479 -1.17844 14.66023 0.19317 -3.10152 0.88567 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.28142 872123.70878 4730016.07576 11.80803 48.17149 539.48680 1.52570 -1.17712 14.89615 0.33408 -3.10019 1.12158 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.25351 872123.61063 4730016.14594 11.80802 48.17149 539.50748 1.43533 -1.09499 14.91682 0.24372 -3.01806 1.14226 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.62854 872123.76804 4730015.83873 11.80803 48.17148 539.54487 1.51267 -1.59741 14.95422 0.32106 -3.52048 1.17965 8 8 0 1.77 2013-Sep-20 09:11:41 4171702.32314 872123.47508 4730016.69252 11.80802 48.17148 540.59451 1.08378 -1.48997 16.00386 -0.10784 -3.41305 2.22929 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.64336 872123.25849 4730016.32060 11.80802 48.17149 539.84406 1.01088 -1.20916 15.25341 -0.18074 -3.13224 1.47884 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.58960 872123.25338 4730016.73460 11.80802 48.17149 540.11676 1.01687 -0.89307 15.52611 -0.17474 -2.81614 1.75154 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.89835 872123.10856 4730016.94835 11.80802 48.17149 540.45783 0.81194 -0.95363 15.86717 -0.37968 -2.87671 2.09261 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.05306 872123.13763 4730016.73245 11.80802 48.17149 539.74912 1.01336 -0.48552 15.15846 -0.17826 -2.40859 1.38390 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.24597 872123.32675 4730017.45947 11.80802 48.17150 540.44259 1.15900 -0.17020 15.85194 -0.03262 -2.09328 2.07737 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.42575 872123.33472 4730017.53661 11.80802 48.17150 540.61851 1.13002 -0.25110 16.02786 -0.06160 -2.17418 2.25329 8 8 0 1.77 2013-Sep-20 09:11:41 4171701.23715 872123.28572 4730017.21918 11.80802 48.17149 540.25219 1.12065 -0.31776 15.66153 -0.07097 -2.24084 1.88697 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.90322 872122.88576 4730017.09056 11.80802 48.17150 539.88377 0.79749 -0.09900 15.29312 -0.39413 -2.02207 1.51855 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.84970 872122.84441 4730017.12197 11.80802 48.17150 539.86660 0.76796 -0.03271 15.27595 -0.42366 -1.95578 1.50138 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.57522 872122.55720 4730017.15672 11.80801 48.17150 539.67412 0.54299 0.23446 15.08346 -0.64862 -1.68862 1.30890 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.39594 872122.45672 4730017.03241 11.80801 48.17150 539.45074 0.48133 0.29764 14.86008 -0.71029 -1.62543 1.08552 8 8 0 1.77 2013-Sep-20 09:11:41 4171700.80498 872122.29960 4730017.06307 11.80801 48.17150 539.71916 0.24383 0.04370 15.12851 -0.94779 -1.87937 1.35394 8 8 0 1.77 2013-Sep-20 09:11:41 4171699.89102 872122.15259 4730016.48617 11.80801 48.17150 538.67260 0.28696 0.34800 14.08195 -0.90466 -1.57507 0.30739 8 8 0 1.77 2013-Sep-20 09:11:41 4171699.47421 872122.10703 4730016.29735 11.80801 48.17150 538.25360 0.32766 0.53304 13.66294 -0.86396 -1.39004 -0.11162 8 8 0 1.77 2013-Sep-20 09:11:41 4171699.66850 872122.11360 4730016.59772 11.80801 48.17150 538.60515 0.29433 0.59064 14.01449 -0.89729 -1.33244 0.23993 8 8 0 1.77 2013-Sep-20 09:11:41 4171699.84307 872122.07987 4730016.22762 11.80801 48.17150 538.43872 0.22559 0.22164 13.84807 -0.96602 -1.70144 0.07350 8 8 0 1.77 2013-Sep-20 09:11:41 4171699.30994 872121.99757 4730016.22422 11.80801 48.17150 538.07694 0.25413 0.62077 13.48628 -0.93749 -1.30230 -0.28828 8 8 0 1.77 2013-Sep-20 09:11:41 4171699.01634 872121.81703 4730016.78096 11.80801 48.17151 538.27549 0.13749 1.23373 13.68483 -1.05413 -0.68934 -0.08973 8 8 0 1.77 2013-Sep-20 09:11:42 4171698.67867 872121.85800 4730016.70871 11.80801 48.17151 538.00681 0.24669 1.42559 13.41616 -0.94493 -0.49748 -0.35841 8 8 0 1.77 2013-Sep-20 09:11:42 4171697.93864 872121.93373 4730016.51253 11.80801 48.17151 537.38789 0.47225 1.82297 12.79723 -0.71937 -0.10010 -0.97733 8 8 0 1.77 2013-Sep-20 09:11:42 4171698.65654 872121.82911 4730016.87767 11.80801 48.17151 538.11433 0.22294 1.55882 13.52367 -0.96867 -0.36425 -0.25089 8 8 0 1.77 2013-Sep-20 09:11:42 4171698.25166 872121.75893 4730016.31071 11.80801 48.17151 537.41798 0.23710 1.48672 12.82732 -0.95452 -0.43635 -0.94724 8 8 0 1.77 2013-Sep-20 09:11:42 4171698.08372 872121.74390 4730016.11703 11.80801 48.17151 537.16198 0.25675 1.48234 12.57132 -0.93487 -0.44073 -1.20324 8 8 0 1.77 2013-Sep-20 09:11:42 4171698.19400 872121.69853 4730015.64966 11.80801 48.17151 536.87952 0.18977 1.09714 12.28886 -1.00184 -0.82594 -1.48570 8 8 0 1.77 2013-Sep-20 09:11:42 4171697.44883 872121.90197 4730014.68147 11.80801 48.17151 535.69940 0.54139 0.96393 11.10875 -0.65022 -0.95914 -2.66582 8 8 0 1.77 2013-Sep-20 09:11:42 4171697.60936 872121.97606 4730014.99269 11.80801 48.17151 536.04621 0.58106 1.04311 11.45555 -0.61055 -0.87997 -2.31901 8 8 0 1.77 2013-Sep-20 09:11:42 4171697.30997 872121.94969 4730014.80540 11.80801 48.17151 535.70761 0.61652 1.14059 11.11696 -0.57510 -0.78248 -2.65760 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.67498 872122.30815 4730014.21412 11.80802 48.17151 534.90143 1.09734 1.15475 10.31078 -0.09428 -0.76832 -3.46379 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.14737 872122.25976 4730013.48930 11.80802 48.17151 534.01031 1.15793 1.06357 9.41965 -0.03369 -0.85951 -4.35491 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.58820 872122.25426 4730013.30308 11.80802 48.17151 533.50578 1.26698 1.34806 8.91513 0.07536 -0.57501 -4.85944 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.46016 872122.52534 4730013.66225 11.80803 48.17151 533.72681 1.55852 1.63965 9.13616 0.36690 -0.28343 -4.63840 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.53818 872122.49507 4730013.68190 11.80803 48.17151 533.78826 1.51292 1.60046 9.19761 0.32131 -0.32261 -4.57696 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.59275 872122.49625 4730014.22604 11.80803 48.17151 534.22952 1.50292 1.92337 9.63886 0.31130 0.00029 -4.13570 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.10915 872122.43456 4730014.12230 11.80803 48.17152 533.82810 1.54149 2.21632 9.23745 0.34988 0.29325 -4.53712 8 8 0 1.77 2013-Sep-20 09:11:42 4171694.77850 872122.56472 4730013.90581 11.80803 48.17152 533.46870 1.73656 2.29326 8.87805 0.54494 0.37019 -4.89652 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.47456 872122.64284 4730014.93579 11.80803 48.17152 534.70123 1.67058 2.46055 10.11057 0.47897 0.53748 -3.66399 8 8 0 1.77 2013-Sep-20 09:11:42 4171694.86781 872122.86137 4730014.62148 11.80803 48.17152 534.10077 2.00866 2.66017 9.51011 0.81704 0.73710 -4.26445 8 8 0 1.77 2013-Sep-20 09:11:42 4171695.25746 872122.98096 4730015.01290 11.80803 48.17152 534.66311 2.04598 2.61878 10.07245 0.85436 0.69570 -3.70211 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.01647 872122.67914 4730015.99900 11.80803 48.17152 535.85218 1.59522 2.76882 11.26152 0.40361 0.84574 -2.51304 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.45623 872122.47580 4730015.98330 11.80802 48.17152 536.09980 1.30620 2.46861 11.50915 0.11458 0.54554 -2.26542 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.67520 872122.25393 4730015.74760 11.80802 48.17152 536.03684 1.04421 2.18554 11.44618 -0.14740 0.26247 -2.32838 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.35253 872122.63876 4730015.55226 11.80803 48.17152 535.73316 1.48693 2.23194 11.14251 0.29532 0.30886 -2.63206 8 8 0 1.77 2013-Sep-20 09:11:42 4171696.71857 872123.03119 4730015.30768 11.80803 48.17151 535.84342 1.79615 1.74201 11.25277 0.60453 -0.18107 -2.52180 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.97698 872122.77646 4730015.99104 11.80803 48.17152 536.48654 1.49393 2.04810 11.89589 0.30231 0.12503 -1.87868 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.76492 872122.85934 4730015.55238 11.80803 48.17151 536.03255 1.61845 1.89759 11.44190 0.42684 -0.02548 -2.33267 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.84952 872123.24895 4730015.54934 11.80803 48.17151 536.13869 1.98251 1.77446 11.54803 0.79089 -0.14862 -2.22653 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.47072 872123.17954 4730015.01982 11.80803 48.17151 535.48737 1.99208 1.70819 10.89671 0.80047 -0.21489 -2.87785 8 8 0 1.77 2013-Sep-20 09:11:43 4171697.03787 872123.03775 4730015.53349 11.80803 48.17151 536.22101 1.73724 1.65871 11.63035 0.54562 -0.26437 -2.14421 8 8 0 1.77 2013-Sep-20 09:11:43 4171697.07897 872122.98161 4730015.23720 11.80803 48.17151 536.01940 1.67387 1.43969 11.42875 0.48226 -0.48338 -2.34582 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.47623 872123.03652 4730015.33817 11.80803 48.17152 535.70866 1.85096 1.93829 11.11801 0.65934 0.01521 -2.65656 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.14654 872123.00641 4730015.18816 11.80803 48.17152 535.37756 1.88895 2.08330 10.78691 0.69734 0.16022 -2.98766 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.39420 872123.38656 4730015.14689 11.80804 48.17151 535.56036 2.21038 1.81717 10.96970 1.01877 -0.10590 -2.80486 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.61796 872123.54419 4730015.24727 11.80804 48.17151 535.80273 2.31889 1.69688 11.21207 1.12727 -0.22620 -2.56249 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.02291 872123.50783 4730014.90679 11.80804 48.17151 535.15562 2.40507 1.90937 10.56497 1.21345 -0.01370 -3.20960 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.04014 872123.78410 4730014.70349 11.80804 48.17151 535.05308 2.67196 1.71909 10.46243 1.48035 -0.20399 -3.31213 8 8 0 1.77 2013-Sep-20 09:11:43 4171695.70521 872123.71814 4730014.36057 11.80804 48.17151 534.56992 2.67593 1.74475 9.97926 1.48432 -0.17833 -3.79530 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.43152 872123.86969 4730015.06849 11.80804 48.17151 535.59223 2.67565 1.66399 11.00158 1.48403 -0.25908 -2.77299 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.31613 872123.79782 4730014.34803 11.80804 48.17151 534.97025 2.62892 1.27864 10.37959 1.43730 -0.64443 -3.39497 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.50031 872123.68029 4730014.81575 11.80804 48.17151 535.42296 2.47618 1.47415 10.83230 1.28456 -0.44892 -2.94226 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.49082 872123.61267 4730014.66764 11.80804 48.17151 535.29718 2.41194 1.39261 10.70653 1.22032 -0.53046 -3.06804 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.80851 872123.90828 4730015.06081 11.80804 48.17151 535.83787 2.63628 1.37803 11.24722 1.44467 -0.54505 -2.52735 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.68423 872124.27510 4730015.10958 11.80805 48.17151 535.84314 3.02076 1.44526 11.25249 1.82915 -0.47781 -2.52207 8 8 0 1.77 2013-Sep-20 09:11:43 4171696.19785 872124.03702 4730014.73344 11.80804 48.17151 535.21287 2.88726 1.58548 10.62221 1.69564 -0.33760 -3.15235 8 8 0 1.77 2013-Sep-20 09:11:43 4171695.80435 872124.33822 4730014.77271 11.80805 48.17151 535.02636 3.26260 1.85274 10.43571 2.07099 -0.07033 -3.33886 8 8 0 1.77 2013-Sep-20 09:11:43 4171695.51952 872124.29262 4730014.48981 11.80805 48.17151 534.62341 3.27625 1.87878 10.03275 2.08464 -0.04430 -3.74181 8 8 0 1.77 2013-Sep-20 09:11:43 4171695.94955 872124.34511 4730015.05820 11.80805 48.17152 535.33482 3.23964 1.93618 10.74416 2.04802 0.01310 -3.03040 8 8 0 1.77 2013-Sep-20 09:11:43 4171695.70147 872124.15836 4730014.66480 11.80805 48.17151 534.85425 3.10760 1.88324 10.26360 1.91598 -0.03984 -3.51097 8 8 0 1.77 2013-Sep-20 09:11:43 4171695.55169 872123.99272 4730014.04912 11.80805 48.17151 534.27510 2.97612 1.60715 9.68445 1.78450 -0.31593 -4.09012 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.33438 872123.95169 4730014.32146 11.80805 48.17152 534.33058 2.98043 1.95353 9.73992 1.78881 0.03045 -4.03464 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.74072 872123.80592 4730014.69438 11.80804 48.17152 534.85382 2.75459 1.92808 10.26317 1.56297 0.00501 -3.51140 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.29452 872123.79905 4730014.35097 11.80804 48.17152 534.30571 2.83918 2.02556 9.71505 1.64756 0.10248 -4.05951 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.54611 872123.99294 4730014.27107 11.80805 48.17151 534.43687 2.97748 1.75920 9.84622 1.78586 -0.16387 -3.92834 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.96067 872124.12538 4730014.37722 11.80805 48.17151 534.80466 3.02229 1.50743 10.21401 1.83067 -0.41564 -3.56056 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.28197 872124.16881 4730013.77999 11.80805 48.17151 533.92252 3.20368 1.59754 9.33186 2.01206 -0.32554 -4.44270 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.25290 872124.19400 4730013.19159 11.80805 48.17151 533.46854 3.23428 1.22250 8.87788 2.04266 -0.70057 -4.89668 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.24055 872123.97978 4730013.54071 11.80805 48.17151 533.69138 3.02712 1.49699 9.10073 1.83550 -0.42608 -4.67383 8 8 0 1.77 2013-Sep-20 09:11:44 4171695.74913 872123.62641 4730014.70238 11.80804 48.17152 534.84077 2.57715 1.95466 10.25012 1.38554 0.03158 -3.52445 8 8 0 1.77 2013-Sep-20 09:11:44 4171696.64552 872123.35533 4730015.13090 11.80803 48.17151 535.70824 2.12838 1.62797 11.11758 0.93676 -0.29511 -2.65698 8 8 0 1.77 2013-Sep-20 09:11:44 4171696.89713 872123.09716 4730014.54717 11.80803 48.17151 535.40229 1.82418 1.09452 10.81164 0.63257 -0.82855 -2.96292 8 8 0 1.77 2013-Sep-20 09:11:44 4171696.80211 872122.99782 4730014.37511 11.80803 48.17151 535.19849 1.74639 1.06423 10.60784 0.55477 -0.85885 -3.16672 8 8 0 1.77 2013-Sep-20 09:11:44 4171697.00485 872122.87860 4730014.09844 11.80803 48.17150 535.10841 1.58821 0.75002 10.51776 0.39660 -1.17305 -3.25680 8 8 0 1.77 2013-Sep-20 09:11:44 4171697.08717 872122.87208 4730013.87906 11.80803 48.17150 534.99779 1.56498 0.54467 10.40714 0.37336 -1.37841 -3.36742 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.47976 872122.72102 4730014.79958 11.80802 48.17150 536.57216 1.13215 0.16588 11.98151 -0.05947 -1.75720 -1.79305 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.43171 872122.56928 4730014.74034 11.80802 48.17150 536.47595 0.99345 0.18455 11.88530 -0.19817 -1.73852 -1.88927 8 8 0 1.77 2013-Sep-20 09:11:44 4171699.10059 872122.19448 4730015.49516 11.80801 48.17150 537.42389 0.48972 0.25723 12.83324 -0.70190 -1.66584 -0.94133 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.68942 872122.44197 4730014.83165 11.80802 48.17150 536.69485 0.81610 0.07689 12.10419 -0.37551 -1.84618 -1.67037 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.48407 872122.73722 4730014.64980 11.80802 48.17150 536.46559 1.14712 0.06038 11.87493 -0.04449 -1.86270 -1.89963 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.56808 872122.70679 4730014.58921 11.80802 48.17150 536.47112 1.10015 -0.03667 11.88047 -0.09147 -1.95975 -1.89410 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.33519 872122.54320 4730014.29899 11.80802 48.17150 536.08052 0.98768 -0.03541 11.48986 -0.20394 -1.95849 -2.28470 8 8 0 1.77 2013-Sep-20 09:11:44 4171698.06374 872122.36906 4730014.63007 11.80802 48.17150 536.12626 0.87276 0.40993 11.53560 -0.31885 -1.51314 -2.23896 8 8 0 1.77 2013-Sep-20 09:11:44 4171697.35527 872122.20393 4730014.00595 11.80802 48.17150 535.17618 0.85611 0.53563 10.58552 -0.33551 -1.38745 -3.18904 8 8 0 1.77 2013-Sep-20 09:11:44 4171696.96537 872122.23825 4730013.39245 11.80802 48.17150 534.46919 0.96950 0.40563 9.87853 -0.22212 -1.51744 -3.89603 8 8 0 1.77 2013-Sep-20 09:11:44 4171697.14564 872122.31418 4730013.87948 11.80802 48.17150 534.96014 1.00693 0.58737 10.36949 -0.18469 -1.33571 -3.40508 8 8 0 1.77 2013-Sep-20 09:11:45 4171697.20998 872122.45729 4730014.24081 11.80802 48.17150 535.29091 1.13384 0.75959 10.70025 -0.05777 -1.16348 -3.07431 8 8 0 1.77 2013-Sep-20 09:11:45 4171697.55810 872122.46251 4730014.32625 11.80802 48.17150 535.58254 1.06772 0.56186 10.99189 -0.12390 -1.36122 -2.78268 8 8 0 1.77 2013-Sep-20 09:11:45 4171698.02675 872122.31732 4730014.72367 11.80802 48.17150 536.16479 0.82969 0.50723 11.57414 -0.36192 -1.41585 -2.20042 8 8 0 1.77 2013-Sep-20 09:11:45 4171697.85735 872122.22972 4730014.88644 11.80802 48.17150 536.16354 0.77861 0.75269 11.57289 -0.41301 -1.17038 -2.20168 8 8 0 1.77 2013-Sep-20 09:11:45 4171698.19975 872122.30750 4730015.69228 11.80802 48.17151 536.99814 0.78468 1.02850 12.40748 -0.40694 -0.89457 -1.36708 8 8 0 1.77 2013-Sep-20 09:11:45 4171698.11828 872122.01721 4730016.26904 11.80801 48.17151 537.33511 0.51720 1.51684 12.74445 -0.67441 -0.40624 -1.03011 8 8 0 1.77 2013-Sep-20 09:11:45 4171698.36364 872122.02906 4730016.60572 11.80801 48.17151 537.74777 0.47859 1.56060 13.15712 -0.71302 -0.36247 -0.61745 8 8 0 1.77 2013-Sep-20 09:11:45 4171697.97003 872122.03509 4730016.96931 11.80801 48.17152 537.76258 0.56504 2.08925 13.17192 -0.62657 0.16618 -0.60264 8 8 0 1.77 2013-Sep-20 09:11:45 4171698.11150 872121.74281 4730017.74519 11.80801 48.17152 538.39318 0.25000 2.54807 13.80252 -0.94162 0.62500 0.02796 8 8 0 1.77 2013-Sep-20 09:11:45 4171698.51446 872121.53447 4730018.09510 11.80801 48.17152 538.88852 -0.03639 2.51929 14.29787 -1.22801 0.59621 0.52330 8 8 0 1.77 2013-Sep-20 09:11:45 4171699.49571 872121.44185 4730018.38053 11.80800 48.17152 539.72913 -0.32785 2.00806 15.13847 -1.51946 0.08498 1.36391 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.30319 872121.34912 4730019.28864 11.80800 48.17152 540.92026 -0.58386 2.03887 16.32961 -1.77547 0.11579 2.55505 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.18771 872121.38148 4730019.42828 11.80800 48.17152 540.95334 -0.52854 2.21129 16.36269 -1.72016 0.28821 2.58812 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.31261 872121.53254 4730019.50423 11.80800 48.17152 541.11208 -0.40624 2.14781 16.52142 -1.59786 0.22473 2.74686 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.89777 872121.61524 4730019.60038 11.80800 48.17151 541.57700 -0.44503 1.77252 16.98635 -1.63665 -0.15056 3.21178 8 8 0 1.77 2013-Sep-20 09:11:45 4171701.43846 872121.50501 4730019.69455 11.80800 48.17151 541.98509 -0.66358 1.45776 17.39444 -1.85520 -0.46532 3.61987 8 8 0 1.77 2013-Sep-20 09:11:45 4171701.49240 872121.42833 4730019.58022 11.80800 48.17151 541.92464 -0.74968 1.35386 17.33399 -1.94129 -0.56922 3.55943 8 8 0 1.77 2013-Sep-20 09:11:45 4171701.07004 872121.33254 4730019.00074 11.80800 48.17151 541.20407 -0.75701 1.29007 16.61341 -1.94863 -0.63300 2.83885 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.97352 872121.32348 4730019.12476 11.80800 48.17151 541.23223 -0.74613 1.44457 16.64157 -1.93774 -0.47851 2.86701 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.89373 872121.23329 4730018.86608 11.80799 48.17151 540.97509 -0.81807 1.34399 16.38444 -2.00969 -0.57908 2.60987 8 8 0 1.77 2013-Sep-20 09:11:45 4171701.37283 872121.32846 4730019.41306 11.80799 48.17151 541.70840 -0.82296 1.34482 17.11775 -2.01458 -0.57826 3.34319 8 8 0 1.77 2013-Sep-20 09:11:45 4171701.83106 872120.93870 4730020.08757 11.80799 48.17151 542.45695 -1.29824 1.51987 17.86629 -2.48986 -0.40321 4.09173 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.94903 872120.81950 4730019.50724 11.80799 48.17151 541.43247 -1.23442 1.79435 16.84181 -2.42604 -0.12873 3.06725 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.77325 872120.83683 4730019.85572 11.80799 48.17152 541.57976 -1.18149 2.15232 16.98910 -2.37311 0.22925 3.21454 8 8 0 1.77 2013-Sep-20 09:11:45 4171700.20884 872121.00436 4730018.81691 11.80799 48.17151 540.46011 -0.90200 1.84566 15.86946 -2.09362 -0.07742 2.09489 8 8 0 1.77 2013-Sep-20 09:11:46 4171699.72112 872121.43452 4730018.67812 11.80800 48.17152 540.09702 -0.38115 2.04324 15.50636 -1.57277 0.12016 1.73180 8 8 0 1.77 gnss-sdr-0.0.6/src/utils/gnuplot/8_sat_accuracy_precision.plt0000644000175000017500000000270012576764164023705 0ustar carlescarles#to load the file digit from terminal: #> gnuplot 8_sat_IFEN_accuracy_precision.plt #set terminal pdf color font "Bold,14" #set output "IFEN_solutions_pdf" set terminal jpeg font "Helvetica, 14" set output "8_sat_accuracy_precision.jpeg" set grid set xrange [-15:15] set yrange [-10:20] set ylabel "North [m]" set xlabel "East [m]" set key Left left set title "Accuracy-Precision (with respect to CORRECT coordinates)- 2DRMS" file1="4_GPS_3_GAL_GNSS_SDR_solutions.txt" file2="8_GAL_GNSS_SDR_solutions.txt" file3="8_GPS_GNSS_SDR_solutions.txt" #values to copy from statistic file DRMS_1=2*3.077 #it is 2*DRMS combined DRMS_2=2*1.87 # gal DRMS_3=2*2.034 # gps #difference with respect to the reference position #values to copy from statistic file delta_E_1=-1.812 #combined delta_N_1= 3.596 #combined delta_E_2= 1.191 #gal delta_N_2= 1.923 #gal delta_E_3= -0.560 #gps delta_N_3= 1.323 #gps set parametric #dummy variable is t for curves, u/v for surfaces set size square set angle degree set trange [0:360] plot file1 u 9:10 with points pointsize 0.3 lc rgb "green" title "4 GPS-3 GAL",\ file3 u 9:10 with points pointsize 0.3 lc rgb "red" title "8 GPS",\ file2 u 9:10 with points pointsize 0.3 lc rgb "blue" title "8 GAL",\ DRMS_1*sin(t)+delta_E_1,DRMS_1*cos(t)+delta_N_1 lw 2 lc rgb "green" notitle,\ DRMS_3*sin(t)+delta_E_3,DRMS_3*cos(t)+delta_N_3 lw 2 lc rgb "red" notitle,\ DRMS_2*sin(t)+delta_E_2,DRMS_2*cos(t)+delta_N_2 lw 2 lc rgb "blue" notitle gnss-sdr-0.0.6/src/utils/gnuplot/4_GPS_3_GAL.plt0000644000175000017500000000216012576764164020523 0ustar carlescarles#set terminal pdf color font "Bold,14" #set output "IFEN_accuracy.pdf" set terminal jpeg font "Helvetica, 14" set output "4_GPS_3_GAL_accuracy_precision.jpeg" set grid set xrange [-10:10] set yrange [-5:15] set ylabel "North [m]" set xlabel "East [m]" set key Left left set title "IFEN simulated data, 4 GPS, 8 Gal - Accuracy and Precision" #file1="8_GPS_GNSS_SDR_solutions.txt" #file2="8_GAL_GNSS_SDR_solutions.txt" file3="4_GPS_3_GAL_GNSS_SDR_solutions.txt" #values to copy from statistic file DRMS= 3.077806456 DUE_DRMS= 6.155612912 CEP= 2.565164055 #difference with respect to the reference position #values to copy from statistic file delta_E= -1.812 # combined delta_N= 3.596 # combined set parametric #dummy variable is t for curves, u/v for surfaces set size square set angle degree set trange [0:360] #radius_6_GPS=6 plot file3 u 9:10 with points pointsize 0.3 lc rgb "green" notitle,\ DRMS*sin(t)+delta_E,DRMS*cos(t)+delta_N lw 3 lc rgb "black" title "DRMS",\ DUE_DRMS*sin(t)+delta_E,DUE_DRMS*cos(t)+delta_N lw 2 lc rgb "gray" title "2DRMS",\ CEP*sin(t)+delta_E,CEP*cos(t)+delta_N lw 1 lc rgb "black" title "CEP" gnss-sdr-0.0.6/src/utils/gnuplot/8_Galileo.plt0000644000175000017500000000213012576764164020542 0ustar carlescarles#set terminal pdf color font "Bold,14" #set output "IFEN_accuracy.pdf" set terminal jpeg font "Helvetica, 14" set output "8_GALILEO_accuracy_precision.jpeg" set grid set xrange [-8:8] set yrange [-8:8] set ylabel "North [m]" set xlabel "East [m]" set key Left left set title "IFEN simulated data, 8 Galileo - Accuracy and Precision" #file1="8_GPS_GNSS_SDR_solutions.txt" file2="8_GAL_GNSS_SDR_solutions.txt" #file3="8_GPS_GNSS_SDR_solutions.txt" #values to copy from statistic file DRMS= 1.870121081 DUE_DRMS= 3.740242162 CEP= 1.556390643 #difference with respect to the reference position #values to copy from statistic file delta_E=1.191 #galileo delta_N=1.923 #galileo set parametric #dummy variable is t for curves, u/v for surfaces set size square set angle degree set trange [0:360] #radius_6_GPS=6 plot file2 u 9:10 with points pointsize 0.3 lc rgb "blue" notitle,\ DRMS*sin(t)+delta_E,DRMS*cos(t)+delta_N lw 3 lc rgb "black" title "DRMS",\ DUE_DRMS*sin(t)+delta_E,DUE_DRMS*cos(t)+delta_N lw 2 lc rgb "gray" title "2DRMS",\ CEP*sin(t)+delta_E,CEP*cos(t)+delta_N lw 1 lc rgb "black" title "CEP" gnss-sdr-0.0.6/src/utils/simulink/0000755000175000017500000000000012576764164016365 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/simulink/Multi Thread/0000755000175000017500000000000012576764164020647 5ustar carlescarlesgnss-sdr-0.0.6/src/utils/simulink/Multi Thread/gnss_sdr_tcp_connector_tracking_lib.mdl0000644000175000017500000452020612576764164030630 0ustar carlescarlesLibrary { Name "gnss_sdr_tcp_connector_tracking_lib" Version 7.6 MdlSubVersion 0 SavedCharacterEncoding "windows-1252" LibraryType "BlockLibrary" SaveDefaultBlockParams on ScopeRefreshTime 0.035000 OverrideScopeRefreshTime on DisableAllScopes off MaxMDLFileLineLength 120 Created "Thu Mar 08 11:41:48 2012" Creator "David Pubill" UpdateHistory "UpdateHistoryNever" ModifiedByFormat "%" LastModifiedBy "gnss" ModifiedDateFormat "%" LastModifiedDate "Wed Jun 27 13:07:39 2012" RTWModifiedTimeStamp 262702783 ModelVersionFormat "1.%" ConfigurationManager "None" SampleTimeColors off SampleTimeAnnotations off LibraryLinkDisplay "none" WideLines off ShowLineDimensions off ShowPortDataTypes off ShowLoopsOnError on IgnoreBidirectionalLines off ShowStorageClass off ShowTestPointIcons on ShowSignalResolutionIcons on ShowViewerIcons on SortedOrder off ExecutionContextIcon off ShowLinearizationAnnotations on BlockNameDataTip off BlockParametersDataTip off BlockDescriptionStringDataTip off ToolBar on StatusBar on BrowserShowLibraryLinks off BrowserLookUnderMasks off SimulationMode "normal" LinearizationMsg "none" Profile off ParamWorkspaceSource "MATLABWorkspace" RecordCoverage off CovSaveName "covdata" CovMetricSettings "dw" CovNameIncrementing off CovHtmlReporting on CovForceBlockReductionOff on covSaveCumulativeToWorkspaceVar on CovSaveSingleToWorkspaceVar on CovCumulativeReport off CovReportOnPause on CovModelRefEnable "Off" CovExternalEMLEnable off ExtModeBatchMode off ExtModeEnableFloating on ExtModeTrigType "manual" ExtModeTrigMode "normal" ExtModeTrigPort "1" ExtModeTrigElement "any" ExtModeTrigDuration 1000 ExtModeTrigDurationFloating "auto" ExtModeTrigHoldOff 0 ExtModeTrigDelay 0 ExtModeTrigDirection "rising" ExtModeTrigLevel 0 ExtModeArchiveMode "off" ExtModeAutoIncOneShot off ExtModeIncDirWhenArm off ExtModeAddSuffixToVar off ExtModeWriteAllDataToWs off ExtModeArmWhenConnect on ExtModeSkipDownloadWhenConnect off ExtModeLogAll on ExtModeAutoUpdateStatusClock on ShowModelReferenceBlockVersion off ShowModelReferenceBlockIO off Array { Type "Handle" Dimension 1 Simulink.ConfigSet { $ObjectID 1 Version "1.10.0" Array { Type "Handle" Dimension 9 Simulink.SolverCC { $ObjectID 2 Version "1.10.0" StartTime "0.0" StopTime "10.0" AbsTol "auto" FixedStep "auto" InitialStep "auto" MaxNumMinSteps "-1" MaxOrder 5 ZcThreshold "auto" ConsecutiveZCsStepRelTol "10*128*eps" MaxConsecutiveZCs "1000" ExtrapolationOrder 4 NumberNewtonIterations 1 MaxStep "auto" MinStep "auto" MaxConsecutiveMinStep "1" RelTol "1e-3" SolverMode "Auto" ConcurrentTasks off Solver "VariableStepDiscrete" SolverName "VariableStepDiscrete" SolverJacobianMethodControl "auto" ShapePreserveControl "DisableAll" ZeroCrossControl "UseLocalSettings" ZeroCrossAlgorithm "Nonadaptive" AlgebraicLoopSolver "TrustRegion" SolverResetMethod "Fast" PositivePriorityOrder off AutoInsertRateTranBlk off SampleTimeConstraint "Unconstrained" InsertRTBMode "Whenever possible" } Simulink.DataIOCC { $ObjectID 3 Version "1.10.0" Decimation "1" ExternalInput "[t, u]" FinalStateName "xFinal" InitialState "xInitial" LimitDataPoints on MaxDataPoints "1000" LoadExternalInput off LoadInitialState off SaveFinalState off SaveCompleteFinalSimState off SaveFormat "Array" SaveOutput on SaveState off SignalLogging on DSMLogging on InspectSignalLogs off SaveTime on ReturnWorkspaceOutputs off StateSaveName "xout" TimeSaveName "tout" OutputSaveName "yout" SignalLoggingName "logsout" DSMLoggingName "dsmout" OutputOption "RefineOutputTimes" OutputTimes "[]" ReturnWorkspaceOutputsName "out" Refine "1" } Simulink.OptimizationCC { $ObjectID 4 Version "1.10.0" Array { Type "Cell" Dimension 8 Cell "BooleansAsBitfields" Cell "PassReuseOutputArgsAs" Cell "PassReuseOutputArgsThreshold" Cell "ZeroExternalMemoryAtStartup" Cell "ZeroInternalMemoryAtStartup" Cell "OptimizeModelRefInitCode" Cell "NoFixptDivByZeroProtection" Cell "UseSpecifiedMinMax" PropName "DisabledProps" } BlockReduction on BooleanDataType on ConditionallyExecuteInputs on InlineParams off UseIntDivNetSlope off UseSpecifiedMinMax off InlineInvariantSignals off OptimizeBlockIOStorage on BufferReuse on EnhancedBackFolding off StrengthReduction off ExpressionFolding on BooleansAsBitfields off BitfieldContainerType "uint_T" EnableMemcpy on MemcpyThreshold 64 PassReuseOutputArgsAs "Structure reference" ExpressionDepthLimit 2147483647 FoldNonRolledExpr on LocalBlockOutputs on RollThreshold 5 SystemCodeInlineAuto off StateBitsets off DataBitsets off UseTempVars off ZeroExternalMemoryAtStartup on ZeroInternalMemoryAtStartup on InitFltsAndDblsToZero off NoFixptDivByZeroProtection off EfficientFloat2IntCast off EfficientMapNaN2IntZero on OptimizeModelRefInitCode off LifeSpan "inf" MaxStackSize "Inherit from target" BufferReusableBoundary on SimCompilerOptimization "Off" AccelVerboseBuild off } Simulink.DebuggingCC { $ObjectID 5 Version "1.10.0" RTPrefix "error" ConsistencyChecking "none" ArrayBoundsChecking "none" SignalInfNanChecking "none" SignalRangeChecking "none" ReadBeforeWriteMsg "UseLocalSettings" WriteAfterWriteMsg "UseLocalSettings" WriteAfterReadMsg "UseLocalSettings" AlgebraicLoopMsg "warning" ArtificialAlgebraicLoopMsg "warning" SaveWithDisabledLinksMsg "warning" SaveWithParameterizedLinksMsg "none" CheckSSInitialOutputMsg on UnderspecifiedInitializationDetection "Classic" MergeDetectMultiDrivingBlocksExec "none" CheckExecutionContextPreStartOutputMsg off CheckExecutionContextRuntimeOutputMsg off SignalResolutionControl "UseLocalSettings" BlockPriorityViolationMsg "warning" MinStepSizeMsg "warning" TimeAdjustmentMsg "none" MaxConsecutiveZCsMsg "error" MaskedZcDiagnostic "warning" IgnoredZcDiagnostic "warning" SolverPrmCheckMsg "warning" InheritedTsInSrcMsg "warning" DiscreteInheritContinuousMsg "warning" MultiTaskDSMMsg "error" MultiTaskCondExecSysMsg "error" MultiTaskRateTransMsg "error" SingleTaskRateTransMsg "none" TasksWithSamePriorityMsg "warning" SigSpecEnsureSampleTimeMsg "warning" CheckMatrixSingularityMsg "none" IntegerOverflowMsg "warning" Int32ToFloatConvMsg "warning" ParameterDowncastMsg "error" ParameterOverflowMsg "error" ParameterUnderflowMsg "none" ParameterPrecisionLossMsg "warning" ParameterTunabilityLossMsg "warning" FixptConstUnderflowMsg "none" FixptConstOverflowMsg "none" FixptConstPrecisionLossMsg "none" UnderSpecifiedDataTypeMsg "none" UnnecessaryDatatypeConvMsg "none" VectorMatrixConversionMsg "none" InvalidFcnCallConnMsg "error" FcnCallInpInsideContextMsg "Use local settings" SignalLabelMismatchMsg "none" UnconnectedInputMsg "warning" UnconnectedOutputMsg "warning" UnconnectedLineMsg "warning" SFcnCompatibilityMsg "none" UniqueDataStoreMsg "none" BusObjectLabelMismatch "warning" RootOutportRequireBusObject "warning" AssertControl "UseLocalSettings" EnableOverflowDetection off ModelReferenceIOMsg "none" ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" ModelReferenceVersionMismatchMessage "none" ModelReferenceIOMismatchMessage "none" ModelReferenceCSMismatchMessage "none" UnknownTsInhSupMsg "warning" ModelReferenceDataLoggingMessage "warning" ModelReferenceSymbolNameMessage "warning" ModelReferenceExtraNoncontSigs "error" StateNameClashWarn "warning" SimStateInterfaceChecksumMismatchMsg "warning" InitInArrayFormatMsg "warning" StrictBusMsg "ErrorLevel1" BusNameAdapt "WarnAndRepair" NonBusSignalsTreatedAsBus "none" LoggingUnavailableSignals "error" BlockIODiagnostic "none" SFUnusedDataAndEventsDiag "warning" SFUnexpectedBacktrackingDiag "warning" SFInvalidInputDataAccessInChartInitDiag "warning" SFNoUnconditionalDefaultTransitionDiag "warning" SFTransitionOutsideNaturalParentDiag "warning" } Simulink.HardwareCC { $ObjectID 6 Version "1.10.0" ProdBitPerChar 8 ProdBitPerShort 16 ProdBitPerInt 32 ProdBitPerLong 32 ProdBitPerFloat 32 ProdBitPerDouble 64 ProdBitPerPointer 32 ProdLargestAtomicInteger "Char" ProdLargestAtomicFloat "None" ProdIntDivRoundTo "Undefined" ProdEndianess "Unspecified" ProdWordSize 32 ProdShiftRightIntArith on ProdHWDeviceType "32-bit Generic" TargetBitPerChar 8 TargetBitPerShort 16 TargetBitPerInt 32 TargetBitPerLong 32 TargetBitPerFloat 32 TargetBitPerDouble 64 TargetBitPerPointer 32 TargetLargestAtomicInteger "Char" TargetLargestAtomicFloat "None" TargetShiftRightIntArith on TargetIntDivRoundTo "Undefined" TargetEndianess "Unspecified" TargetWordSize 32 TargetTypeEmulationWarnSuppressLevel 0 TargetPreprocMaxBitsSint 32 TargetPreprocMaxBitsUint 32 TargetHWDeviceType "Specified" TargetUnknown off ProdEqTarget on } Simulink.ModelReferenceCC { $ObjectID 7 Version "1.10.0" UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" CheckModelReferenceTargetMessage "error" EnableParallelModelReferenceBuilds off ParallelModelReferenceErrorOnInvalidPool on ParallelModelReferenceMATLABWorkerInit "None" ModelReferenceNumInstancesAllowed "Multi" PropagateVarSize "Infer from blocks in model" ModelReferencePassRootInputsByReference on ModelReferenceMinAlgLoopOccurrences off PropagateSignalLabelsOutOfModel off SupportModelReferenceSimTargetCustomCode off } Simulink.SFSimCC { $ObjectID 8 Version "1.10.0" SFSimEnableDebug on SFSimOverflowDetection on SFSimEcho on SimBlas on SimCtrlC on SimExtrinsic on SimIntegrity on SimUseLocalCustomCode off SimParseCustomCode on SimBuildMode "sf_incremental_build" } Simulink.RTWCC { $BackupClass "Simulink.RTWCC" $ObjectID 9 Version "1.10.0" Array { Type "Cell" Dimension 7 Cell "IncludeHyperlinkInReport" Cell "GenerateTraceInfo" Cell "GenerateTraceReport" Cell "GenerateTraceReportSl" Cell "GenerateTraceReportSf" Cell "GenerateTraceReportEml" Cell "GenerateSLWebview" PropName "DisabledProps" } SystemTargetFile "grt.tlc" GenCodeOnly off MakeCommand "make_rtw" GenerateMakefile on TemplateMakefile "grt_default_tmf" GenerateReport off SaveLog off RTWVerbose on RetainRTWFile off ProfileTLC off TLCDebug off TLCCoverage off TLCAssert off ProcessScriptMode "Default" ConfigurationMode "Optimized" ConfigAtBuild off RTWUseLocalCustomCode off RTWUseSimCustomCode off IncludeHyperlinkInReport off LaunchReport off TargetLang "C" IncludeBusHierarchyInRTWFileBlockHierarchyMap off IncludeERTFirstTime off GenerateTraceInfo off GenerateTraceReport off GenerateTraceReportSl off GenerateTraceReportSf off GenerateTraceReportEml off GenerateCodeInfo off GenerateSLWebview off RTWCompilerOptimization "Off" CheckMdlBeforeBuild "Off" CustomRebuildMode "OnUpdate" Array { Type "Handle" Dimension 2 Simulink.CodeAppCC { $ObjectID 10 Version "1.10.0" Array { Type "Cell" Dimension 21 Cell "IgnoreCustomStorageClasses" Cell "IgnoreTestpoints" Cell "InsertBlockDesc" Cell "InsertPolySpaceComments" Cell "SFDataObjDesc" Cell "MATLABFcnDesc" Cell "SimulinkDataObjDesc" Cell "DefineNamingRule" Cell "SignalNamingRule" Cell "ParamNamingRule" Cell "InlinedPrmAccess" Cell "CustomSymbolStr" Cell "CustomSymbolStrGlobalVar" Cell "CustomSymbolStrType" Cell "CustomSymbolStrField" Cell "CustomSymbolStrFcn" Cell "CustomSymbolStrFcnArg" Cell "CustomSymbolStrBlkIO" Cell "CustomSymbolStrTmpVar" Cell "CustomSymbolStrMacro" Cell "ReqsInCode" PropName "DisabledProps" } ForceParamTrailComments off GenerateComments on IgnoreCustomStorageClasses on IgnoreTestpoints off IncHierarchyInIds off MaxIdLength 31 PreserveName off PreserveNameWithParent off ShowEliminatedStatement off IncAutoGenComments off SimulinkDataObjDesc off SFDataObjDesc off MATLABFcnDesc off IncDataTypeInIds off MangleLength 1 CustomSymbolStrGlobalVar "$R$N$M" CustomSymbolStrType "$N$R$M" CustomSymbolStrField "$N$M" CustomSymbolStrFcn "$R$N$M$F" CustomSymbolStrFcnArg "rt$I$N$M" CustomSymbolStrBlkIO "rtb_$N$M" CustomSymbolStrTmpVar "$N$M" CustomSymbolStrMacro "$R$N$M" DefineNamingRule "None" ParamNamingRule "None" SignalNamingRule "None" InsertBlockDesc off InsertPolySpaceComments off SimulinkBlockComments on MATLABSourceComments off EnableCustomComments off InlinedPrmAccess "Literals" ReqsInCode off UseSimReservedNames off } Simulink.GRTTargetCC { $BackupClass "Simulink.TargetCC" $ObjectID 11 Version "1.10.0" Array { Type "Cell" Dimension 16 Cell "GeneratePreprocessorConditionals" Cell "IncludeMdlTerminateFcn" Cell "CombineOutputUpdateFcns" Cell "SuppressErrorStatus" Cell "ERTCustomFileBanners" Cell "GenerateSampleERTMain" Cell "GenerateTestInterfaces" Cell "ModelStepFunctionPrototypeControlCompliant" Cell "CPPClassGenCompliant" Cell "MultiInstanceERTCode" Cell "PurelyIntegerCode" Cell "SupportComplex" Cell "SupportAbsoluteTime" Cell "SupportContinuousTime" Cell "SupportNonInlinedSFcns" Cell "PortableWordSizes" PropName "DisabledProps" } TargetFcnLib "ansi_tfl_table_tmw.mat" TargetLibSuffix "" TargetPreCompLibLocation "" TargetFunctionLibrary "ANSI_C" UtilityFuncGeneration "Auto" ERTMultiwordTypeDef "System defined" ERTCodeCoverageTool "None" ERTMultiwordLength 256 MultiwordLength 2048 GenerateFullHeader on GenerateSampleERTMain off GenerateTestInterfaces off IsPILTarget off ModelReferenceCompliant on ParMdlRefBuildCompliant on CompOptLevelCompliant on IncludeMdlTerminateFcn on GeneratePreprocessorConditionals "Disable all" CombineOutputUpdateFcns off CombineSignalStateStructs off SuppressErrorStatus off ERTFirstTimeCompliant off IncludeFileDelimiter "Auto" ERTCustomFileBanners off SupportAbsoluteTime on LogVarNameModifier "rt_" MatFileLogging on MultiInstanceERTCode off SupportNonFinite on SupportComplex on PurelyIntegerCode off SupportContinuousTime on SupportNonInlinedSFcns on SupportVariableSizeSignals off EnableShiftOperators on ParenthesesLevel "Nominal" PortableWordSizes off ModelStepFunctionPrototypeControlCompliant off CPPClassGenCompliant off AutosarCompliant off UseMalloc off ExtMode off ExtModeStaticAlloc off ExtModeTesting off ExtModeStaticAllocSize 1000000 ExtModeTransport 0 ExtModeMexFile "ext_comm" ExtModeIntrfLevel "Level1" RTWCAPISignals off RTWCAPIParams off RTWCAPIStates off GenerateASAP2 off } PropName "Components" } } hdlcoderui.hdlcc { $ObjectID 12 Version "1.10.0" Description "HDL Coder custom configuration component" Name "HDL Coder" Array { Type "Cell" Dimension 1 Cell "" PropName "HDLConfigFile" } HDLCActiveTab "0" } PropName "Components" } Name "Configuration" CurrentDlgPage "Solver" ConfigPrmDlgPosition " [ 400, 210, 1280, 840 ] " } PropName "ConfigurationSets" } BlockDefaults { ForegroundColor "black" BackgroundColor "white" DropShadow off NamePlacement "normal" FontName "Helvetica" FontSize 10 FontWeight "normal" FontAngle "normal" ShowName on BlockRotation 0 BlockMirror off } AnnotationDefaults { HorizontalAlignment "center" VerticalAlignment "middle" ForegroundColor "black" BackgroundColor "white" DropShadow off FontName "Helvetica" FontSize 10 FontWeight "normal" FontAngle "normal" UseDisplayTextAsClickCallback off } LineDefaults { FontName "Helvetica" FontSize 9 FontWeight "normal" FontAngle "normal" } BlockParameterDefaults { Block { BlockType Abs ZeroCross on SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on } Block { BlockType ComplexToRealImag Output "Real and imag" SampleTime "-1" } Block { BlockType Concatenate NumInputs "2" ConcatenateDimension "1" } Block { BlockType Constant Value "1" VectorParams1D on SamplingMode "Sample based" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit from 'Constant value'" LockScale off SampleTime "inf" FramePeriod "inf" PreserveConstantTs off } Block { BlockType DataTypeConversion OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit via back propagation" LockScale off ConvertRealWorld "Real World Value (RWV)" RndMeth "Zero" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Display Format "short" Decimation "10" Floating off SampleTime "-1" } Block { BlockType Fcn Expr "sin(u[1])" SampleTime "-1" } Block { BlockType Gain Gain "1" Multiplication "Element-wise(K.*u)" ParamMin "[]" ParamMax "[]" ParamDataTypeStr "Inherit: Same as input" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Inport Port "1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: auto" LockScale off BusOutputAsStruct off PortDimensions "-1" VarSizeSig "Inherit" SampleTime "-1" SignalType "auto" SamplingMode "auto" LatchByDelayingOutsideSignal off LatchInputForFeedbackSignals off Interpolate on } Block { BlockType Math Operator "exp" OutputSignalType "auto" SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on IntermediateResultsDataTypeStr "Inherit: Inherit via internal rule" AlgorithmType "Newton-Raphson" Iterations "3" } Block { BlockType Mux Inputs "4" DisplayOption "none" UseBusObject off BusObject "BusObject" NonVirtualBus off } Block { BlockType Outport Port "1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: auto" LockScale off BusOutputAsStruct off PortDimensions "-1" VarSizeSig "Inherit" SampleTime "-1" SignalType "auto" SamplingMode "auto" SourceOfInitialOutputValue "Dialog" OutputWhenDisabled "held" InitialOutput "[]" } Block { BlockType Product Inputs "2" Multiplication "Element-wise(.*)" CollapseMode "All dimensions" CollapseDim "1" InputSameDT on OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Zero" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType RealImagToComplex Input "Real and imag" ConstantPart "0" SampleTime "-1" } Block { BlockType SubSystem ShowPortLabels "FromPortIcon" Permissions "ReadWrite" PermitHierarchicalResolution "All" TreatAsAtomicUnit off CheckFcnCallInpInsideContextMsg off SystemSampleTime "-1" RTWFcnNameOpts "Auto" RTWFileNameOpts "Auto" RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" SimViewingDevice off DataTypeOverride "UseLocalSettings" DataTypeOverrideAppliesTo "AllNumericTypes" MinMaxOverflowLogging "UseLocalSettings" Variant off GeneratePreprocessorConditionals off } Block { BlockType Sum IconShape "rectangular" Inputs "++" CollapseMode "All dimensions" CollapseDim "1" InputSameDT on AccumDataTypeStr "Inherit: Inherit via internal rule" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Switch Criteria "u2 >= Threshold" Threshold "0" InputSameDT on OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit via internal rule" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on ZeroCross on SampleTime "-1" AllowDiffInputSizes off } Block { BlockType Terminator } Block { BlockType Trigonometry Operator "sin" ApproximationMethod "None" NumberOfIterations "11" OutputSignalType "auto" SampleTime "-1" } Block { BlockType UnitDelay X0 "0" InputProcessing "Inherited" SampleTime "1" StateMustResolveToSignalObject off RTWStateStorageClass "Auto" } } System { Name "gnss_sdr_tcp_connector_tracking_lib" Location [532, 307, 1230, 742] Open on ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" ReportName "simulink-default.rpt" SIDHighWatermark "2078" Block { BlockType Reference Name "Model Info" SID "2" Ports [] Position [15, 15, 436, 409] ForegroundColor "green" ShowName off LibraryVersion "1.233" FontName "Arial" SourceBlock "simulink/Model-Wide\nUtilities/Model Info" SourceType "CMBlock" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off InitialBlockCM "None" BlockCM "None" Frame "on" DisplayStringWithTags "/*! \n * \\file gnss_sdr_tcp_connector_tracking_lib.mdl\n * \\brief gnss_sdr_tcp_con" "nector_tracking Simulink library model. For \n * further information, please check the README_gnss_sdr_tcp_con" "nector_tracking.txt\n * file or the README_gnss_sdr_tcp_connector_parallel_tracking.txt\n * file for parallel " "computing execution.\n *\n * \\author David Pubill, 2012. dpubill(at)cttc.es\n * ----------------------------" "---------------------------------------------\n *\n * Copyright (C) 2010-2012 (see AUTHORS file for a list of" " contributors)\n *\n * GNSS-SDR is a software defined Global Navigation\n * Satellite Systems receiv" "er\n *\n * This file is part of GNSS-SDR.\n *\n * GNSS-SDR is free software: you can redistribute it and/or " "modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundati" "on, either version 3 of the License, or\n * at your option) any later version.\n *\n * GNSS-SDR is distribute" "d in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * M" "ERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n" " *\n * You should have received a copy of the GNU General Public License\n * along with GNSS-SDR. If not, see" " .\n *\n * ---------------------------------------------------------------------" "----\n */" MaskDisplayString "/*! \\n * \\file gnss_sdr_tcp_connector_tracking_lib.mdl\\n * \\brief gnss_sdr_tcp_c" "onnector_tracking Simulink library model. For \\n * further information, please check the README_gnss_sdr_tcp_" "connector_tracking.txt\\n * file or the README_gnss_sdr_tcp_connector_parallel_tracking.txt\\n * file for para" "llel computing execution.\\n *\\n * \\author David Pubill, 2012. dpubill(at)cttc.es\\n * --------------------" "-----------------------------------------------------\\n *\\n * Copyright (C) 2010-2012 (see AUTHORS file for" " a list of contributors)\\n *\\n * GNSS-SDR is a software defined Global Navigation\\n * Satellite S" "ystems receiver\\n *\\n * This file is part of GNSS-SDR.\\n *\\n * GNSS-SDR is free software: you can redist" "ribute it and/or modify\\n * it under the terms of the GNU General Public License as published by\\n * the Fre" "e Software Foundation, either version 3 of the License, or\\n * at your option) any later version.\\n *\\n * " "GNSS-SDR is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the imp" "lied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU General Public Li" "cense for more details.\\n *\\n * You should have received a copy of the GNU General Public License\\n * alon" "g with GNSS-SDR. If not, see .\\n *\\n * ---------------------------------------" "----------------------------------\\n */" HorizontalTextAlignment "Left" LeftAlignmentValue "0.02" SourceBlockDiagram "gnss_sdr_tcp_connector_tracking_lib" TagMaxNumber "20" } Block { BlockType SubSystem Name "gnss_sdr" SID "2052" Ports [] Position [460, 127, 605, 263] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr" Location [395, 454, 1025, 704] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType SubSystem Name "gnss_sdr_tcp_connector_tracking" SID "3" Ports [9, 5] Position [230, 26, 400, 224] AncestorBlock "simulink/User-Defined\nFunctions/gnss_sdr/gnss_sdr_tcp_connector_tracking" LibraryVersion "*1.267" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_tcp_connector_tracking" Location [191, 355, 936, 831] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11895" SIDPrevWatermark "11844" Block { BlockType Inport Name "control_id" SID "3:11618" Position [55, 13, 85, 27] IconDisplay "Port number" } Block { BlockType Inport Name "d_E_I" SID "3:11619" Position [55, 48, 85, 62] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "d_E_Q" SID "3:11620" Position [55, 83, 85, 97] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "d_L_I" SID "3:11621" Position [55, 128, 85, 142] Port "4" IconDisplay "Port number" } Block { BlockType Inport Name "d_L_Q" SID "3:11622" Position [55, 163, 85, 177] Port "5" IconDisplay "Port number" } Block { BlockType Inport Name "d_P_I" SID "3:11623" Position [55, 243, 85, 257] Port "6" IconDisplay "Port number" } Block { BlockType Inport Name "d_P_Q" SID "3:11624" Position [55, 278, 85, 292] Port "7" IconDisplay "Port number" } Block { BlockType Inport Name "d_acq_carrier_doppler_[Hz]" SID "3:11625" Position [55, 313, 85, 327] Port "8" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "3:11626" Position [55, 363, 85, 377] Port "9" IconDisplay "Port number" } Block { BlockType Abs Name "Abs" SID "3:11888" Position [295, 214, 315, 236] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs1" SID "3:11891" Position [295, 189, 315, 211] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs2" SID "3:11892" Position [295, 164, 315, 186] ShowName off SaturateOnIntegerOverflow off } Block { BlockType SubSystem Name "Carrier Tracking \n(PLL)" SID "3:11630" Ports [3, 2] Position [260, 244, 385, 396] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Carrier Tracking \n(PLL)" Location [119, 115, 924, 369] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "P" SID "3:11631" Position [55, 38, 85, 52] IconDisplay "Port number" } Block { BlockType Inport Name "d_acq_carrier_doppler_[Hz]" SID "3:11632" Position [55, 153, 85, 167] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "3:11633" Position [55, 213, 85, 227] Port "3" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3:11634" Position [160, 140, 200, 180] ShowName off OutDataTypeStr "double" } Block { BlockType Reference Name "Delay" SID "3:11635" Ports [1, 1] Position [470, 75, 500, 115] BlockRotation 270 ShowName off LibraryVersion "1.233" UserDataPersistent on UserData "DataTag0" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "Ti" } Block { BlockType SubSystem Name "Error\nAccumulator" SID "3:11636" Ports [2, 1] Position [575, 28, 685, 92] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Error\nAccumulator" Location [361, 424, 744, 624] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "e" SID "3:11637" Position [30, 23, 60, 37] IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "3:11638" Position [30, 58, 60, 72] Port "2" IconDisplay "Port number" } Block { BlockType Constant Name "Constant" SID "3:11639" Position [145, 85, 175, 115] ShowName off Value "0" SampleTime "-1" } Block { BlockType Sum Name "Sum2" SID "3:11640" Ports [2, 1] Position [90, 20, 110, 40] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Switch Name "Switch" SID "3:11641" Position [200, 12, 250, 118] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11642" Position [170, 135, 205, 175] BlockMirror on ShowName off SampleTime "-1" } Block { BlockType Outport Name "sum(e)" SID "3:11643" Position [325, 58, 355, 72] IconDisplay "Port number" } Line { SrcBlock "e" SrcPort 1 DstBlock "Sum2" DstPort 1 } Line { SrcBlock "Unit Delay" SrcPort 1 Points [-65, 0] DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 DstBlock "Switch" DstPort 1 } Line { SrcBlock "Switch" SrcPort 1 Points [25, 0] Branch { DstBlock "sum(e)" DstPort 1 } Branch { Points [0, 90] DstBlock "Unit Delay" DstPort 1 } } Line { SrcBlock "enable_tracking" SrcPort 1 DstBlock "Switch" DstPort 2 } Line { SrcBlock "Constant" SrcPort 1 DstBlock "Switch" DstPort 3 } } } Block { BlockType SubSystem Name "First-Order\nLow-Pass Filter" SID "3:11644" Ports [1, 1] Position [310, 21, 370, 69] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "First-Order\nLow-Pass Filter" Location [181, 144, 1019, 332] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In" SID "3:11645" Position [25, 28, 55, 42] IconDisplay "Port number" } Block { BlockType Constant Name "B" SID "3:11646" Position [15, 99, 65, 131] ShowName off Value "B_PLL" SampleTime "T" } Block { BlockType Product Name "Product" SID "3:11647" Ports [2, 1] Position [265, 92, 295, 123] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product1" SID "3:11648" Ports [2, 1] Position [170, 27, 205, 63] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum" SID "3:11649" Ports [2, 1] Position [410, 35, 430, 55] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SampleTime "T" } Block { BlockType Sum Name "Sum1" SID "3:11650" Ports [2, 1] Position [325, 100, 345, 120] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11651" Position [360, 140, 395, 180] BlockMirror on ShowName off SampleTime "T" } Block { BlockType Gain Name "gamma" SID "3:11652" Position [110, 40, 140, 70] Gain "(16*(0.707)^2*T) / (1 + 4*(0.707)^2);" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Gain Name "rho" SID "3:11653" Position [105, 104, 155, 126] Gain "(4*T) / (1 + 4*(0.707)^2)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out" SID "3:11654" Position [460, 38, 490, 52] IconDisplay "Port number" } Line { SrcBlock "rho" SrcPort 1 DstBlock "Product" DstPort 2 } Line { SrcBlock "gamma" SrcPort 1 DstBlock "Product1" DstPort 2 } Line { Labels [0, 0] SrcBlock "B" SrcPort 1 Points [15, 0] Branch { DstBlock "rho" DstPort 1 } Branch { Points [0, -60] DstBlock "gamma" DstPort 1 } } Line { SrcBlock "Product" SrcPort 1 DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Product1" SrcPort 1 Points [20, 0] Branch { Points [0, 55] DstBlock "Product" DstPort 1 } Branch { DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [70, 0] Branch { DstBlock "Sum" DstPort 2 } Branch { Points [0, 50] DstBlock "Unit Delay" DstPort 1 } } Line { Labels [0, 0] SrcBlock "Unit Delay" SrcPort 1 Points [-20, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "In" SrcPort 1 DstBlock "Product1" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "Out" DstPort 1 } } } Block { BlockType SubSystem Name "PLL Costas loop two \nquadrant arctan discriminator" SID "3:11866" Ports [1, 1] Position [150, 14, 210, 76] AncestorBlock "gnss_sdr_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_tcp_connector_tracking/Carrier Tracking \n" "(PLL)/atan2(Q,I)1/PLL Costas loop two quadrant arctan discriminator" LibraryVersion "*1.36" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "PLL Costas loop two \nquadrant arctan discriminator" Location [32, 150, 415, 234] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11859" SIDPrevWatermark "11859" Block { BlockType Inport Name "In" SID "3:11866:11670" Position [25, 38, 55, 52] IconDisplay "Port number" } Block { BlockType ComplexToRealImag Name "Complex to\nReal-Imag" SID "3:11866:11671" Ports [1, 2] Position [80, 28, 110, 57] ShowName off Output "Real and imag" } Block { BlockType Product Name "Divide" SID "3:11866:11672" Ports [2, 1] Position [150, 27, 180, 58] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Trigonometry Name "Trigonometric\nFunction" SID "3:11866:11673" Ports [1, 1] Position [220, 30, 250, 60] ShowName off Operator "atan" } Block { BlockType Outport Name "Out" SID "3:11866:11674" Position [285, 38, 315, 52] IconDisplay "Port number" } Line { SrcBlock "Divide" SrcPort 1 DstBlock "Trigonometric\nFunction" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 1 DstBlock "Divide" DstPort 1 } Line { SrcBlock "In" SrcPort 1 DstBlock "Complex to\nReal-Imag" DstPort 1 } Line { SrcBlock "Trigonometric\nFunction" SrcPort 1 DstBlock "Out" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 2 DstBlock "Divide" DstPort 2 } } } Block { BlockType Sum Name "Sum" SID "3:11658" Ports [2, 1] Position [475, 35, 495, 55] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "3:11659" Ports [2, 1] Position [510, 150, 530, 170] ShowName off IconShape "round" Inputs "++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Gain Name "[Hz] to [rad/Ti]" SID "3:11860" Position [285, 143, 355, 177] Gain "2*pi*Ti" } Block { BlockType Gain Name "[rad/Ti] to [rad/s]" SID "3:11664" Position [620, 142, 655, 178] Gain "1/Ti" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "carrier_error" SID "3:11679" Position [720, 53, 750, 67] IconDisplay "Port number" } Block { BlockType Outport Name "carrier_doppler" SID "3:11680" Position [720, 153, 750, 167] Port "2" IconDisplay "Port number" } Line { SrcBlock "Sum" SrcPort 1 DstBlock "Error\nAccumulator" DstPort 1 } Line { SrcBlock "Error\nAccumulator" SrcPort 1 DstBlock "carrier_error" DstPort 1 } Line { SrcBlock "P" SrcPort 1 DstBlock "PLL Costas loop two \nquadrant arctan discriminator" DstPort 1 } Line { SrcBlock "[rad/Ti] to [rad/s]" SrcPort 1 DstBlock "carrier_doppler" DstPort 1 } Line { SrcBlock "Delay" SrcPort 1 DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 DstBlock "[rad/Ti] to [rad/s]" DstPort 1 } Line { SrcBlock "d_acq_carrier_doppler_[Hz]" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "[Hz] to [rad/Ti]" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 Points [455, 0; 0, -145] DstBlock "Error\nAccumulator" DstPort 2 } Line { SrcBlock "[Hz] to [rad/Ti]" SrcPort 1 Points [125, 0] Branch { DstBlock "Delay" DstPort 1 } Branch { DstBlock "Sum2" DstPort 2 } } Line { SrcBlock "First-Order\nLow-Pass Filter" SrcPort 1 Points [75, 0] Branch { DstBlock "Sum" DstPort 1 } Branch { Points [0, -40; 70, 0] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "PLL Costas loop two \nquadrant arctan discriminator" SrcPort 1 DstBlock "First-Order\nLow-Pass Filter" DstPort 1 } } } Block { BlockType SubSystem Name "Code Tracking\n(DLL)" SID "3:11681" Ports [4, 1] Position [445, 41, 560, 224] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Code Tracking\n(DLL)" Location [159, 437, 775, 684] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "E" SID "3:11682" Position [25, 43, 55, 57] IconDisplay "Port number" } Block { BlockType Inport Name "P" SID "3:11683" Position [25, 78, 55, 92] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "3:11684" Position [25, 113, 55, 127] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "carrier_aid" SID "3:11685" Position [25, 183, 55, 197] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Delay" SID "3:11687" Ports [1, 1] Position [493, 130, 527, 160] BlockRotation 270 ShowName off LibraryVersion "1.233" UserDataPersistent on UserData "DataTag1" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "Ti" } Block { BlockType SubSystem Name "Early-Late Power" SID "3:11688" Ports [2, 1] Position [190, 16, 255, 154] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Early-Late Power" Location [509, 255, 823, 453] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "E" SID "3:11689" Position [15, 23, 45, 37] IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "3:11690" Position [15, 133, 45, 147] Port "2" IconDisplay "Port number" } Block { BlockType Math Name "E power" SID "3:11863" Ports [1, 1] Position [90, 15, 120, 45] Operator "magnitude^2" } Block { BlockType Math Name "L power" SID "3:11864" Ports [1, 1] Position [90, 125, 120, 155] Operator "magnitude^2" } Block { BlockType Sum Name "Sum" SID "3:11865" Ports [2, 1] Position [140, 75, 160, 95] ShowName off IconShape "round" Inputs "+|-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Gain Name "to [chip]" SID "3:11703" Position [185, 70, 215, 100] Gain "1/SFunSlope" } Block { BlockType Outport Name "Tau" SID "3:11704" Position [245, 78, 275, 92] IconDisplay "Port number" } Line { SrcBlock "to [chip]" SrcPort 1 DstBlock "Tau" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "to [chip]" DstPort 1 } Line { SrcBlock "L power" SrcPort 1 Points [25, 0] DstBlock "Sum" DstPort 2 } Line { SrcBlock "E power" SrcPort 1 Points [25, 0] DstBlock "Sum" DstPort 1 } Line { SrcBlock "E" SrcPort 1 DstBlock "E power" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "L power" DstPort 1 } } } Block { BlockType Gain Name "Gain" SID "3:11714" Position [350, 70, 380, 100] Gain "-1" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType SubSystem Name "Normalization" SID "3:11716" Ports [3, 3] Position [85, 35, 135, 135] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Normalization" Location [536, 524, 961, 789] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "E" SID "3:11717" Position [25, 28, 55, 42] IconDisplay "Port number" } Block { BlockType Inport Name "P" SID "3:11718" Position [25, 108, 55, 122] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "3:11719" Position [25, 198, 55, 212] Port "3" IconDisplay "Port number" } Block { BlockType Product Name "E Normalisation" SID "3:11720" Ports [2, 1] Position [270, 26, 315, 59] Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType Product Name "L Normalisation" SID "3:11721" Ports [2, 1] Position [270, 196, 315, 229] Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType Product Name "P Normalisation" SID "3:11722" Ports [2, 1] Position [270, 106, 315, 139] Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType SubSystem Name "Power Estimation" SID "3:11723" Ports [1, 1] Position [120, 126, 195, 184] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Power Estimation" Location [431, 459, 986, 620] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11724" Position [25, 78, 55, 92] IconDisplay "Port number" } Block { BlockType Abs Name "Abs(Im)" SID "3:11725" Position [175, 105, 205, 135] SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs(Re)" SID "3:11726" Position [175, 30, 205, 60] SaturateOnIntegerOverflow off } Block { BlockType ComplexToRealImag Name "Complex to\nReal-Imag" SID "3:11728" Ports [1, 2] Position [105, 68, 135, 97] Output "Real and imag" } Block { BlockType Math Name "Im^2" SID "3:11739" Ports [1, 1] Position [335, 105, 365, 135] Operator "square" } Block { BlockType SubSystem Name "Mean(Im)" SID "3:11747" Ports [1, 1] Position [240, 95, 300, 145] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Mean(Im)" Location [489, 513, 989, 689] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11748" Position [25, 83, 55, 97] IconDisplay "Port number" } Block { BlockType Gain Name "Gain" SID "3:11749" Position [340, 70, 385, 110] ShowName off Gain "1/10" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Integer Delay" SID "3:11750" Ports [1, 1] Position [125, 28, 160, 62] ShowName off LibraryVersion "1.302" UserDataPersistent on UserData "DataTag2" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "10" InputProcessing "Inherited" vinit "100" samptime "-1" } Block { BlockType Sum Name "Sum" SID "3:11751" Ports [3, 1] Position [195, 80, 215, 100] ShowName off IconShape "round" Inputs "-++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11752" Position [235, 118, 270, 152] BlockMirror on ShowName off X0 "100*10" SampleTime "-1" } Block { BlockType Outport Name "mean" SID "3:11753" Position [425, 83, 455, 97] IconDisplay "Port number" } Line { SrcBlock "Integer Delay" SrcPort 1 Points [40, 0] DstBlock "Sum" DstPort 1 } Line { SrcBlock "in" SrcPort 1 Points [30, 0] Branch { Points [0, -45] DstBlock "Integer Delay" DstPort 1 } Branch { DstBlock "Sum" DstPort 2 } } Line { SrcBlock "Gain" SrcPort 1 DstBlock "mean" DstPort 1 } Line { SrcBlock "Unit Delay" SrcPort 1 Points [-25, 0] DstBlock "Sum" DstPort 3 } Line { SrcBlock "Sum" SrcPort 1 Points [90, 0] Branch { DstBlock "Gain" DstPort 1 } Branch { Points [0, 45] DstBlock "Unit Delay" DstPort 1 } } } } Block { BlockType SubSystem Name "Mean(Re)" SID "3:11754" Ports [1, 1] Position [240, 20, 300, 70] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Mean(Re)" Location [489, 513, 989, 689] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11755" Position [25, 83, 55, 97] IconDisplay "Port number" } Block { BlockType Gain Name "Gain" SID "3:11756" Position [330, 70, 375, 110] Gain "1/10" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Integer Delay" SID "3:11757" Ports [1, 1] Position [125, 28, 160, 62] ShowName off LibraryVersion "1.302" UserDataPersistent on UserData "DataTag3" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "100" InputProcessing "Inherited" vinit "100" samptime "-1" } Block { BlockType Sum Name "Sum" SID "3:11758" Ports [3, 1] Position [195, 80, 215, 100] ShowName off IconShape "round" Inputs "-++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11759" Position [230, 118, 265, 152] BlockMirror on ShowName off X0 "100*10" SampleTime "-1" } Block { BlockType Outport Name "mean" SID "3:11760" Position [425, 83, 455, 97] IconDisplay "Port number" } Line { SrcBlock "Sum" SrcPort 1 Points [75, 0] Branch { Points [0, 45] DstBlock "Unit Delay" DstPort 1 } Branch { DstBlock "Gain" DstPort 1 } } Line { SrcBlock "Unit Delay" SrcPort 1 Points [-20, 0] DstBlock "Sum" DstPort 3 } Line { SrcBlock "Gain" SrcPort 1 DstBlock "mean" DstPort 1 } Line { SrcBlock "in" SrcPort 1 Points [30, 0] Branch { DstBlock "Sum" DstPort 2 } Branch { Points [0, -45] DstBlock "Integer Delay" DstPort 1 } } Line { SrcBlock "Integer Delay" SrcPort 1 Points [40, 0] DstBlock "Sum" DstPort 1 } } } Block { BlockType Math Name "Power\nto\nAmplitude" SID "3:11763" Ports [1, 1] Position [435, 70, 465, 100] Operator "sqrt" } Block { BlockType Math Name "Re^2" SID "3:11765" Ports [1, 1] Position [335, 30, 365, 60] Operator "square" } Block { BlockType Sum Name "Sum" SID "3:11769" Ports [2, 1] Position [380, 75, 400, 95] ShowName off IconShape "round" Inputs "+|+" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "out" SID "3:11777" Position [490, 78, 520, 92] IconDisplay "Port number" } Line { SrcBlock "Im^2" SrcPort 1 Points [20, 0] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Re^2" SrcPort 1 Points [20, 0] DstBlock "Sum" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 1 Points [15, 0; 0, -30] DstBlock "Abs(Re)" DstPort 1 } Line { SrcBlock "Abs(Re)" SrcPort 1 DstBlock "Mean(Re)" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 2 Points [20, 0] DstBlock "Abs(Im)" DstPort 1 } Line { SrcBlock "Abs(Im)" SrcPort 1 DstBlock "Mean(Im)" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "Power\nto\nAmplitude" DstPort 1 } Line { SrcBlock "Mean(Im)" SrcPort 1 DstBlock "Im^2" DstPort 1 } Line { SrcBlock "Mean(Re)" SrcPort 1 DstBlock "Re^2" DstPort 1 } Line { SrcBlock "in" SrcPort 1 DstBlock "Complex to\nReal-Imag" DstPort 1 } Line { SrcBlock "Power\nto\nAmplitude" SrcPort 1 DstBlock "out" DstPort 1 } } } Block { BlockType Outport Name "E'" SID "3:11778" Position [360, 38, 390, 52] IconDisplay "Port number" } Block { BlockType Outport Name "P'" SID "3:11779" Position [360, 118, 390, 132] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "L'" SID "3:11780" Position [360, 208, 390, 222] Port "3" IconDisplay "Port number" } Line { SrcBlock "P" SrcPort 1 Points [25, 0] Branch { DstBlock "P Normalisation" DstPort 1 } Branch { Labels [0, 0] Points [0, 40] DstBlock "Power Estimation" DstPort 1 } } Line { SrcBlock "E" SrcPort 1 DstBlock "E Normalisation" DstPort 1 } Line { SrcBlock "E Normalisation" SrcPort 1 DstBlock "E'" DstPort 1 } Line { SrcBlock "P Normalisation" SrcPort 1 DstBlock "P'" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "L Normalisation" DstPort 1 } Line { SrcBlock "L Normalisation" SrcPort 1 DstBlock "L'" DstPort 1 } Line { SrcBlock "Power Estimation" SrcPort 1 Points [30, 0; 0, 0] Branch { Points [0, -25] Branch { Points [0, -80] DstBlock "E Normalisation" DstPort 2 } Branch { DstBlock "P Normalisation" DstPort 2 } } Branch { Points [0, 65] DstBlock "L Normalisation" DstPort 2 } } } } Block { BlockType Sum Name "Sum" SID "3:11783" Ports [2, 1] Position [500, 75, 520, 95] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Terminator Name "Terminator" SID "3:11784" Position [155, 75, 175, 95] ShowName off } Block { BlockType SubSystem Name "Zero Order\nLow-Pass Filter" SID "3:11785" Ports [1, 1] Position [405, 59, 460, 111] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Zero Order\nLow-Pass Filter" Location [217, 135, 598, 254] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11894" Position [25, 28, 55, 42] IconDisplay "Port number" } Block { BlockType Constant Name "B" SID "3:11787" Position [15, 66, 65, 94] ShowName off Value "B_DLL" SampleTime "T" } Block { BlockType Fcn Name "Fcn" SID "3:11788" Position [100, 63, 245, 97] ShowName off Expr "(4*u*T) / (1 + 2*u*T);" } Block { BlockType Product Name "Product" SID "3:11789" Ports [2, 1] Position [285, 42, 315, 73] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "out" SID "3:11895" Position [345, 53, 375, 67] IconDisplay "Port number" } Line { SrcBlock "Fcn" SrcPort 1 Points [20, 0] DstBlock "Product" DstPort 2 } Line { SrcBlock "B" SrcPort 1 DstBlock "Fcn" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "out" DstPort 1 } Line { SrcBlock "in" SrcPort 1 Points [210, 0] DstBlock "Product" DstPort 1 } } } Block { BlockType Gain Name "[chip] to [s]" SID "3:11862" Position [290, 70, 320, 100] Gain "Tc" } Block { BlockType Gain Name "[rad/s] to [s/Ti]" SID "3:11795" Position [290, 174, 415, 206] Gain "-Ti/(2*pi*f0)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "code_error [s]" SID "3:11798" Position [565, 78, 595, 92] IconDisplay "Port number" } Line { SrcBlock "Gain" SrcPort 1 DstBlock "Zero Order\nLow-Pass Filter" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "Normalization" DstPort 3 } Line { SrcBlock "P" SrcPort 1 DstBlock "Normalization" DstPort 2 } Line { SrcBlock "E" SrcPort 1 DstBlock "Normalization" DstPort 1 } Line { SrcBlock "[chip] to [s]" SrcPort 1 DstBlock "Gain" DstPort 1 } Line { SrcBlock "Early-Late Power" SrcPort 1 DstBlock "[chip] to [s]" DstPort 1 } Line { SrcBlock "[rad/s] to [s/Ti]" SrcPort 1 Points [90, 0] DstBlock "Delay" DstPort 1 } Line { SrcBlock "carrier_aid" SrcPort 1 DstBlock "[rad/s] to [s/Ti]" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "code_error [s]" DstPort 1 } Line { SrcBlock "Delay" SrcPort 1 DstBlock "Sum" DstPort 2 } Line { SrcBlock "Normalization" SrcPort 3 DstBlock "Early-Late Power" DstPort 2 } Line { SrcBlock "Normalization" SrcPort 1 DstBlock "Early-Late Power" DstPort 1 } Line { SrcBlock "Normalization" SrcPort 2 DstBlock "Terminator" DstPort 1 } Line { SrcBlock "Zero Order\nLow-Pass Filter" SrcPort 1 DstBlock "Sum" DstPort 1 } } } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "3:11799" Position [580, 115, 620, 155] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3:11800" Position [180, 55, 220, 95] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "3:11801" Position [580, 340, 620, 380] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "3:11802" Position [580, 265, 620, 305] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "3:11803" Position [180, 135, 220, 175] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion6" SID "3:11804" Position [180, 250, 220, 290] ShowName off OutDataTypeStr "double" } Block { BlockType Mux Name "Mux" SID "3:11886" Ports [3, 1] Position [335, 159, 340, 241] ShowName off Inputs "3" DisplayOption "bar" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex" SID "3:11806" Ports [2, 1] Position [125, 36, 160, 109] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex1" SID "3:11807" Ports [2, 1] Position [125, 116, 160, 189] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex2" SID "3:11808" Ports [2, 1] Position [125, 231, 160, 304] ShowName off Input "Real and imag" } Block { BlockType Gain Name "[rad/s] to [Hz]" SID "3:11812" Position [485, 345, 515, 375] Gain "1/(2*pi)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "control_id_" SID "3:11813" Position [655, 13, 685, 27] IconDisplay "Port number" } Block { BlockType Outport Name "code_error_[s]" SID "3:11814" Position [655, 128, 685, 142] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "carrier_error" SID "3:11815" Position [655, 278, 685, 292] Port "3" IconDisplay "Port number" } Block { BlockType Outport Name "carrier_doppler_[Hz]" SID "3:11816" Position [655, 353, 685, 367] Port "4" IconDisplay "Port number" } Block { BlockType Outport Name "EPL Scope" SID "3:11893" Position [655, 423, 685, 437] Port "5" IconDisplay "Port number" } Line { SrcBlock "Carrier Tracking \n(PLL)" SrcPort 2 Points [15, 0] Branch { Points [0, -160] DstBlock "Code Tracking\n(DLL)" DstPort 4 } Branch { DstBlock "[rad/s] to [Hz]" DstPort 1 } } Line { SrcBlock "Code Tracking\n(DLL)" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "Carrier Tracking \n(PLL)" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex1" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex2" SrcPort 1 DstBlock "Data Type \nConversion6" DstPort 1 } Line { SrcBlock "d_E_I" SrcPort 1 DstBlock "Real-Imag to\nComplex" DstPort 1 } Line { SrcBlock "d_E_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex" DstPort 2 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "code_error_[s]" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "carrier_error" DstPort 1 } Line { SrcBlock "control_id" SrcPort 1 DstBlock "control_id_" DstPort 1 } Line { SrcBlock "d_L_I" SrcPort 1 DstBlock "Real-Imag to\nComplex1" DstPort 1 } Line { SrcBlock "d_L_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex1" DstPort 2 } Line { SrcBlock "d_P_I" SrcPort 1 DstBlock "Real-Imag to\nComplex2" DstPort 1 } Line { SrcBlock "d_P_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex2" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 Points [45, 0] Branch { Points [0, -10] DstBlock "Code Tracking\n(DLL)" DstPort 1 } Branch { Points [0, 100] DstBlock "Abs2" DstPort 1 } } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 Points [25, 0] Branch { DstBlock "Code Tracking\n(DLL)" DstPort 3 } Branch { Points [0, 70] DstBlock "Abs" DstPort 1 } } Line { SrcBlock "Data Type \nConversion6" SrcPort 1 Points [10, 0] Branch { DstBlock "Carrier Tracking \n(PLL)" DstPort 1 } Branch { Points [0, -160; 25, 0] Branch { DstBlock "Code Tracking\n(DLL)" DstPort 2 } Branch { Points [0, 90] DstBlock "Abs1" DstPort 1 } } } Line { SrcBlock "d_acq_carrier_doppler_[Hz]" SrcPort 1 DstBlock "Carrier Tracking \n(PLL)" DstPort 2 } Line { SrcBlock "[rad/s] to [Hz]" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "carrier_doppler_[Hz]" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 DstBlock "Carrier Tracking \n(PLL)" DstPort 3 } Line { SrcBlock "Abs" SrcPort 1 DstBlock "Mux" DstPort 3 } Line { SrcBlock "Abs1" SrcPort 1 DstBlock "Mux" DstPort 2 } Line { SrcBlock "Abs2" SrcPort 1 DstBlock "Mux" DstPort 1 } Line { SrcBlock "Mux" SrcPort 1 Points [50, 0; 0, 230] DstBlock "EPL Scope" DstPort 1 } } } Block { BlockType SubSystem Name "gnss_sdr_tcp_connector_tracking_rx" SID "6" Ports [0, 9] Position [25, 26, 195, 224] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_tcp_connector_tracking_rx" Location [6, 82, 455, 978] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "59" Block { BlockType Reference Name "Multiport\nSelector" SID "7" Ports [1, 36] Position [185, 25, 285, 1475] ShowName off LibraryVersion "1.462" SourceBlock "dspindex/Multiport\nSelector" SourceType "Multiport Selector" rowsOrCols "Rows" idxCellArray "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33," "34,35,36}" idxErrMode "Clip Index" } Block { BlockType Reference Name "RX" SID "8" Ports [0, 1] Position [30, 691, 165, 809] LibraryVersion "1.84" DialogController "instrumentcreatedialog" DialogControllerArgs "DataTag4" SourceBlock "instrumentlib/TCP//IP Receive" SourceType "TCP/IP Receive" Host "84.88.61.86" Port "2070" DataSize "36" EnableBlockingMode on Timeout "5" SampleTime "-1" DataType "uint8" ByteOrder "BigEndian" } Block { BlockType SubSystem Name "Subsystem" SID "9" Ports [4, 1] Position [395, 186, 500, 354] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "10" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "11" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "12" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "13" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "14" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "15" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "16" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "17" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "18" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "19" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "20" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "21" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "22" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "23" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "24" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "25" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "26" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "27" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "28" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "29" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "30" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "31" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "32" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "33" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "34" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "35" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "36" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "37" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "38" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "39" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "40" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "41" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "42" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "43" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "44" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "45" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "46" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "47" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "48" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "49" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "50" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "51" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "52" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "53" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "54" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "55" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "56" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "57" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "58" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "59" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "60" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "61" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "62" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "63" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "64" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "65" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "66" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "67" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "68" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "69" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "70" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "71" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "72" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "73" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "74" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "75" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "76" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "77" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "78" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "79" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "80" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "81" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "82" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "83" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "84" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "85" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "86" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "87" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "88" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "89" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "90" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "91" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "92" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "93" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "94" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "95" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "96" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "97" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "98" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "99" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "100" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "101" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "102" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "103" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "104" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "105" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "106" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "107" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "108" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "109" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "110" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "111" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "112" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "113" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "114" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "115" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "116" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "117" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "118" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "119" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "120" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "121" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "122" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "123" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "124" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "125" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "126" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "127" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "128" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "129" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "130" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "131" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "132" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "133" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "134" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "135" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "136" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "137" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "138" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "139" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "140" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "141" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "142" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "143" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "144" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "145" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "146" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "147" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "148" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "149" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "150" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "151" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "152" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "153" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "154" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "155" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "156" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "157" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "158" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "159" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "160" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "161" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "162" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "163" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "164" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "165" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "166" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "167" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "168" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "169" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "170" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "171" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "172" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "173" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "174" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "175" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "176" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "177" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "178" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "179" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "180" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "181" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "182" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "183" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "184" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "185" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "186" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "187" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "188" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "189" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "190" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "191" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "192" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "193" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "194" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "195" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "196" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "197" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "198" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "199" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "200" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "201" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "202" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "203" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "204" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "205" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "206" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "207" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "208" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "209" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "210" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "211" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "212" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "213" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "214" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "215" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "216" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "217" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "218" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "219" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "220" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "221" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "222" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "223" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "224" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "225" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "226" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "227" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "228" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "229" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "230" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "231" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "232" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "233" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_E_I" SID "234" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_E_I" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem1" SID "235" Ports [4, 1] Position [395, 346, 500, 514] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem1" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "236" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "237" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "238" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "239" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "240" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "241" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "242" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "243" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "244" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "245" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "246" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "247" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "248" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "249" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "250" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "251" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "252" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "253" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "254" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "255" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "256" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "257" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "258" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "259" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "260" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "261" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "262" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "263" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "264" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "265" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "266" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "267" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "268" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "269" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "270" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "271" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "272" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "273" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "274" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "275" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "276" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "277" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "278" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "279" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "280" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "281" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "282" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "283" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "284" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "285" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "286" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "287" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "288" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "289" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "290" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "291" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "292" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "293" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "294" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "295" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "296" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "297" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "298" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "299" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "300" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "301" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "302" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "303" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "304" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "305" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "306" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "307" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "308" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "309" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "310" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "311" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "312" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "313" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "314" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "315" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "316" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "317" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "318" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "319" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "320" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "321" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "322" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "323" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "324" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "325" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "326" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "327" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "328" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "329" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "330" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "331" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "332" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "333" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "334" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "335" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "336" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "337" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "338" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "339" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "340" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "341" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "342" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "343" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "344" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "345" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "346" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "347" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "348" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "349" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "350" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "351" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "352" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "353" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "354" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "355" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "356" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "357" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "358" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "359" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "360" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "361" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "362" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "363" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "364" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "365" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "366" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "367" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "368" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "369" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "370" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "371" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "372" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "373" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "374" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "375" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "376" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "377" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "378" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "379" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "380" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "381" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "382" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "383" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "384" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "385" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "386" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "387" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "388" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "389" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "390" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "391" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "392" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "393" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "394" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "395" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "396" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "397" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "398" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "399" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "400" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "401" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "402" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "403" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "404" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "405" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "406" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "407" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "408" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "409" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "410" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "411" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "412" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "413" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "414" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "415" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "416" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "417" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "418" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "419" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "420" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "421" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "422" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "423" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "424" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "425" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "426" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "427" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "428" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "429" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "430" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "431" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "432" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "433" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "434" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "435" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "436" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "437" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "438" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "439" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "440" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "441" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "442" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "443" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "444" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "445" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "446" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "447" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "448" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "449" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "450" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "451" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "452" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "453" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "454" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "455" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "456" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "457" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "458" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "459" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_E_Q" SID "460" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_E_Q" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem2" SID "461" Ports [4, 1] Position [395, 506, 500, 674] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem2" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "462" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "463" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "464" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "465" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "466" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "467" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "468" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "469" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "470" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "471" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "472" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "473" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "474" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "475" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "476" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "477" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "478" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "479" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "480" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "481" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "482" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "483" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "484" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "485" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "486" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "487" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "488" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "489" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "490" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "491" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "492" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "493" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "494" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "495" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "496" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "497" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "498" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "499" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "500" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "501" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "502" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "503" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "504" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "505" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "506" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "507" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "508" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "509" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "510" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "511" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "512" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "513" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "514" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "515" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "516" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "517" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "518" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "519" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "520" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "521" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "522" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "523" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "524" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "525" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "526" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "527" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "528" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "529" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "530" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "531" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "532" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "533" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "534" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "535" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "536" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "537" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "538" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "539" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "540" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "541" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "542" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "543" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "544" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "545" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "546" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "547" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "548" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "549" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "550" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "551" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "552" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "553" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "554" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "555" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "556" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "557" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "558" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "559" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "560" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "561" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "562" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "563" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "564" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "565" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "566" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "567" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "568" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "569" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "570" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "571" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "572" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "573" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "574" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "575" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "576" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "577" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "578" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "579" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "580" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "581" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "582" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "583" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "584" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "585" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "586" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "587" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "588" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "589" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "590" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "591" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "592" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "593" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "594" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "595" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "596" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "597" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "598" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "599" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "600" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "601" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "602" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "603" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "604" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "605" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "606" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "607" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "608" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "609" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "610" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "611" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "612" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "613" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "614" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "615" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "616" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "617" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "618" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "619" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "620" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "621" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "622" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "623" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "624" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "625" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "626" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "627" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "628" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "629" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "630" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "631" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "632" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "633" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "634" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "635" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "636" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "637" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "638" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "639" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "640" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "641" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "642" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "643" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "644" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "645" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "646" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "647" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "648" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "649" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "650" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "651" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "652" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "653" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "654" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "655" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "656" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "657" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "658" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "659" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "660" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "661" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "662" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "663" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "664" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "665" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "666" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "667" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "668" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "669" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "670" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "671" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "672" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "673" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "674" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "675" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "676" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "677" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "678" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "679" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "680" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "681" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "682" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "683" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "684" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "685" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_L_I" SID "686" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_L_I" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem3" SID "687" Ports [4, 1] Position [395, 666, 500, 834] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem3" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "688" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "689" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "690" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "691" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "692" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "693" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "694" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "695" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "696" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "697" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "698" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "699" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "700" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "701" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "702" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "703" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "704" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "705" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "706" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "707" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "708" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "709" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "710" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "711" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "712" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "713" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "714" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "715" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "716" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "717" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "718" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "719" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "720" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "721" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "722" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "723" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "724" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "725" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "726" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "727" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "728" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "729" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "730" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "731" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "732" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "733" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "734" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "735" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "736" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "737" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "738" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "739" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "740" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "741" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "742" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "743" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "744" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "745" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "746" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "747" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "748" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "749" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "750" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "751" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "752" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "753" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "754" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "755" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "756" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "757" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "758" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "759" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "760" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "761" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "762" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "763" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "764" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "765" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "766" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "767" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "768" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "769" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "770" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "771" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "772" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "773" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "774" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "775" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "776" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "777" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "778" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "779" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "780" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "781" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "782" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "783" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "784" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "785" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "786" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "787" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "788" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "789" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "790" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "791" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "792" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "793" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "794" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "795" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "796" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "797" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "798" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "799" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "800" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "801" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "802" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "803" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "804" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "805" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "806" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "807" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "808" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "809" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "810" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "811" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "812" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "813" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "814" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "815" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "816" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "817" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "818" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "819" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "820" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "821" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "822" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "823" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "824" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "825" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "826" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "827" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "828" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "829" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "830" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "831" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "832" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "833" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "834" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "835" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "836" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "837" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "838" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "839" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "840" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "841" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "842" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "843" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "844" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "845" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "846" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "847" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "848" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "849" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "850" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "851" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "852" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "853" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "854" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "855" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "856" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "857" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "858" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "859" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "860" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "861" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "862" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "863" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "864" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "865" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "866" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "867" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "868" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "869" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "870" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "871" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "872" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "873" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "874" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "875" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "876" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "877" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "878" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "879" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "880" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "881" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "882" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "883" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "884" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "885" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "886" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "887" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "888" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "889" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "890" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "891" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "892" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "893" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "894" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "895" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "896" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "897" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "898" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "899" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "900" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "901" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "902" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "903" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "904" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "905" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "906" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "907" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "908" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "909" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "910" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "911" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_L_Q" SID "912" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_L_Q" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem4" SID "913" Ports [4, 1] Position [395, 826, 500, 994] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem4" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "914" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "915" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "916" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "917" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "918" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "919" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "920" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "921" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "922" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "923" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "924" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "925" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "926" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "927" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "928" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "929" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "930" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "931" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "932" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "933" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "934" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "935" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "936" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "937" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "938" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "939" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "940" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "941" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "942" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "943" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "944" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "945" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "946" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "947" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "948" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "949" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "950" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "951" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "952" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "953" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "954" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "955" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "956" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "957" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "958" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "959" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "960" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "961" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "962" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "963" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "964" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "965" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "966" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "967" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "968" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "969" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "970" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "971" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "972" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "973" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "974" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "975" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "976" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "977" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "978" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "979" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "980" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "981" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "982" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "983" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "984" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "985" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "986" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "987" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "988" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "989" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "990" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "991" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "992" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "993" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "994" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "995" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "996" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "997" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "998" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "999" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1000" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1001" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1002" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1003" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1004" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1005" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1006" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1007" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1008" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1009" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1010" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1011" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1012" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1013" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1014" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1015" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1016" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1017" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1018" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1019" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1020" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1021" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1022" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1023" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1024" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1025" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1026" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1027" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1028" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1029" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1030" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1031" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1032" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1033" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1034" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1035" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1036" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1037" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1038" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1039" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1040" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1041" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1042" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1043" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1044" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1045" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1046" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1047" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1048" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1049" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1050" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1051" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1052" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1053" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1054" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1055" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1056" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1057" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1058" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1059" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1060" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1061" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1062" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1063" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1064" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1065" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1066" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1067" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1068" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1069" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1070" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1071" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1072" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1073" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1074" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1075" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1076" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1077" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1078" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1079" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1080" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1081" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1082" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1083" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1084" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1085" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1086" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1087" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1088" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1089" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1090" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1091" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1092" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1093" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1094" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1095" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1096" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1097" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1098" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1099" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1100" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1101" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1102" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1103" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1104" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1105" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1106" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1107" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1108" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1109" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1110" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1111" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1112" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1113" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1114" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1115" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1116" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1117" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1118" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1119" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1120" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1121" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1122" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1123" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1124" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1125" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1126" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1127" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1128" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1129" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1130" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1131" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1132" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "1133" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1134" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1135" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1136" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1137" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_P_I" SID "1138" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_P_I" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem5" SID "1139" Ports [4, 1] Position [395, 991, 500, 1149] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem5" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1140" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1141" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1142" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1143" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1144" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1145" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1146" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1147" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1148" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1149" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1150" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1151" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1152" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1153" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1154" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1155" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1156" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1157" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1158" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1159" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1160" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1161" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1162" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1163" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1164" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1165" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1166" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1167" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1168" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1169" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1170" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1171" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1172" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1173" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1174" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1175" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1176" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1177" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1178" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1179" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1180" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1181" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1182" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1183" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1184" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1185" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1186" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1187" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1188" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1189" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1190" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1191" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1192" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1193" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1194" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1195" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1196" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1197" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1198" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1199" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1200" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1201" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1202" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1203" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1204" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1205" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1206" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1207" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1208" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1209" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1210" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1211" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1212" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1213" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1214" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1215" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1216" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1217" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1218" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1219" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1220" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1221" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1222" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1223" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1224" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1225" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1226" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1227" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1228" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1229" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1230" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1231" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1232" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1233" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1234" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1235" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1236" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1237" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1238" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1239" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1240" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1241" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1242" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1243" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1244" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1245" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1246" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1247" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1248" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1249" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1250" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1251" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1252" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1253" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1254" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1255" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1256" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1257" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1258" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1259" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1260" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1261" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1262" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1263" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1264" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1265" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1266" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1267" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1268" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1269" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1270" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1271" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1272" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1273" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1274" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1275" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1276" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1277" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1278" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1279" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1280" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1281" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1282" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1283" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1284" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1285" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1286" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1287" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1288" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1289" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1290" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1291" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1292" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1293" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1294" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1295" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1296" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1297" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1298" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1299" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1300" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1301" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1302" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1303" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1304" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1305" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1306" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1307" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1308" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1309" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1310" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1311" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1312" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1313" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1314" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1315" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1316" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1317" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1318" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1319" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1320" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1321" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1322" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1323" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1324" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1325" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1326" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1327" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1328" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1329" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1330" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1331" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1332" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1333" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1334" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1335" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1336" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1337" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1338" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1339" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1340" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1341" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1342" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1343" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1344" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1345" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1346" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1347" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1348" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1349" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1350" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1351" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1352" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1353" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1354" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1355" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1356" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1357" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1358" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "1359" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1360" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1361" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1362" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1363" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_P_Q" SID "1364" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_P_Q" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem6" SID "1365" Ports [4, 1] Position [395, 1149, 500, 1311] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem6" Location [528, 347, 1021, 586] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1366" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1367" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1368" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1369" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1370" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1371" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1372" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1373" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1374" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1375" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1376" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1377" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1378" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1379" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1380" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1381" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1382" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1383" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1384" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1385" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1386" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1387" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1388" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1389" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1390" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1391" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1392" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1393" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1394" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1395" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1396" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1397" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1398" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1399" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1400" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1401" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1402" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1403" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1404" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1405" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1406" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1407" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1408" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1409" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1410" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1411" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1412" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1413" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1414" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1415" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1416" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1417" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1418" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1419" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1420" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1421" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1422" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1423" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1424" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1425" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1426" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1427" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1428" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1429" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1430" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1431" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1432" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1433" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1434" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1435" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1436" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1437" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1438" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1439" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1440" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1441" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1442" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1443" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1444" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1445" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1446" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1447" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1448" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1449" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1450" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1451" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1452" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1453" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1454" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1455" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1456" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1457" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1458" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1459" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1460" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1461" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1462" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1463" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1464" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1465" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1466" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1467" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1468" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1469" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1470" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1471" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1472" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1473" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1474" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1475" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1476" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1477" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1478" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1479" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1480" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1481" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1482" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1483" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1484" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1485" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1486" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1487" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1488" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1489" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1490" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1491" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1492" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1493" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1494" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1495" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1496" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1497" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1498" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1499" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1500" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1501" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1502" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1503" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1504" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1505" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1506" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1507" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1508" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1509" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1510" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1511" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1512" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1513" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1514" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1515" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1516" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1517" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1518" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1519" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1520" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1521" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1522" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1523" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1524" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1525" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1526" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1527" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1528" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1529" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1530" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1531" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1532" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1533" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1534" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1535" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1536" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1537" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1538" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1539" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1540" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1541" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1542" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1543" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1544" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1545" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1546" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1547" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1548" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1549" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1550" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1551" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1552" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1553" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1554" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1555" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1556" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1557" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1558" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1559" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1560" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1561" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1562" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1563" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1564" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1565" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1566" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1567" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1568" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1569" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1570" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1571" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1572" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1573" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1574" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1575" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1576" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1577" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1578" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1579" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1580" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1581" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1582" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1583" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1584" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "1585" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1586" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1587" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1588" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1589" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_acq_carrier_doppler_hz" SID "1590" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_acq_carrier_doppler_hz" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem7" SID "1591" Ports [4, 1] Position [395, 1310, 500, 1470] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem7" Location [528, 347, 1038, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1592" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1593" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1594" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1595" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1596" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1597" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1598" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1599" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1600" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1601" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1602" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1603" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1604" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1605" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1606" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1607" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1608" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1609" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1610" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1611" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1612" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1613" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1614" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1615" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1616" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1617" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1618" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1619" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1620" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1621" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1622" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1623" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1624" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1625" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1626" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1627" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1628" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1629" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1630" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1631" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1632" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1633" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1634" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1635" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1636" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1637" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1638" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1639" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1640" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1641" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1642" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1643" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1644" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1645" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1646" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1647" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1648" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1649" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1650" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1651" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1652" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1653" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1654" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1655" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1656" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1657" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1658" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1659" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1660" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1661" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1662" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1663" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1664" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1665" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1666" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1667" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1668" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1669" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1670" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1671" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1672" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1673" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1674" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1675" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1676" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1677" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1678" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1679" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1680" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1681" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1682" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1683" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1684" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1685" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1686" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1687" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1688" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1689" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1690" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1691" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1692" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1693" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1694" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1695" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1696" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1697" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1698" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1699" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1700" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1701" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1702" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1703" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1704" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1705" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1706" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1707" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1708" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1709" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1710" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1711" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1712" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1713" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1714" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1715" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1716" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1717" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1718" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1719" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1720" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1721" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1722" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1723" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1724" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1725" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1726" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1727" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1728" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1729" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1730" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1731" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1732" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1733" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1734" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1735" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1736" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1737" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1738" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1739" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1740" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1741" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1742" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1743" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1744" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1745" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1746" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1747" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1748" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1749" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1750" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1751" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1752" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1753" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1754" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1755" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1756" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1757" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1758" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1759" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1760" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1761" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1762" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1763" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1764" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1765" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1766" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1767" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1768" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1769" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1770" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1771" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1772" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1773" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1774" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1775" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1776" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1777" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1778" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1779" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1780" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1781" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1782" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1783" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1784" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1785" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1786" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1787" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1788" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1789" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1790" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1791" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1792" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1793" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1794" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1795" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1796" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1797" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1798" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1799" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1800" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1801" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1802" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1803" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1804" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1805" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1806" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1807" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1808" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1809" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1810" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "1811" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1812" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1813" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1814" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1815" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "enable_tracking" SID "1816" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "enable_tracking" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem8" SID "1817" Ports [4, 1] Position [395, 31, 500, 189] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem8" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1818" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1819" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1820" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1821" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1822" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1823" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1824" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1825" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1826" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1827" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1828" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1829" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1830" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1831" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1832" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1833" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1834" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1835" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1836" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1837" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1838" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1839" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1840" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1841" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1842" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1843" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1844" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1845" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1846" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1847" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1848" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1849" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1850" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1851" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1852" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1853" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1854" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1855" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1856" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1857" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1858" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1859" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1860" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1861" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1862" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1863" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1864" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1865" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1866" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1867" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1868" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1869" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1870" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1871" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1872" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1873" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1874" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1875" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1876" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1877" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1878" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1879" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1880" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1881" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1882" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1883" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1884" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1885" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1886" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1887" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1888" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1889" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1890" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1891" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1892" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1893" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1894" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1895" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1896" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1897" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1898" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1899" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1900" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1901" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1902" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1903" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1904" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1905" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1906" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1907" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1908" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1909" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1910" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1911" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1912" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1913" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1914" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1915" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1916" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1917" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1918" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1919" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1920" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1921" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1922" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1923" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1924" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1925" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1926" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1927" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1928" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1929" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1930" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1931" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1932" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1933" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1934" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1935" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1936" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1937" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1938" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1939" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1940" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1941" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1942" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1943" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1944" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1945" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1946" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1947" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1948" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1949" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1950" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1951" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1952" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1953" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1954" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1955" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1956" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1957" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1958" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1959" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1960" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1961" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1962" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1963" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1964" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1965" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1966" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1967" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1968" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1969" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1970" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1971" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1972" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1973" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1974" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1975" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1976" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1977" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1978" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1979" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1980" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1981" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1982" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1983" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1984" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1985" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1986" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1987" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1988" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1989" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1990" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1991" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1992" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1993" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1994" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1995" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1996" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1997" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1998" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1999" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2000" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2001" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2002" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2003" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2004" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2005" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2006" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2007" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2008" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2009" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2010" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2011" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2012" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2013" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2014" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2015" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2016" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2017" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2018" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2019" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2020" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2021" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2022" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2023" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2024" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2025" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2026" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2027" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2028" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2029" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2030" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2031" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2032" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2033" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2034" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2035" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2036" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "2037" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2038" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2039" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2040" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2041" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "control_id" SID "2042" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "control_id" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType Outport Name "control_id" SID "2043" Position [555, 103, 585, 117] IconDisplay "Port number" } Block { BlockType Outport Name "d_E_I" SID "2044" Position [560, 263, 590, 277] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "d_E_Q" SID "2045" Position [560, 423, 590, 437] Port "3" IconDisplay "Port number" } Block { BlockType Outport Name "d_L_I" SID "2046" Position [560, 583, 590, 597] Port "4" IconDisplay "Port number" } Block { BlockType Outport Name "d_L_Q" SID "2047" Position [560, 743, 590, 757] Port "5" IconDisplay "Port number" } Block { BlockType Outport Name "d_P_I" SID "2048" Position [560, 903, 590, 917] Port "6" IconDisplay "Port number" } Block { BlockType Outport Name "d_P_Q" SID "2049" Position [560, 1063, 590, 1077] Port "7" IconDisplay "Port number" } Block { BlockType Outport Name "d_acq_carrier_doppler_hz" SID "2050" Position [555, 1223, 585, 1237] Port "8" IconDisplay "Port number" } Block { BlockType Outport Name "enable_tracking" SID "2051" Position [560, 1383, 590, 1397] Port "9" IconDisplay "Port number" } Line { SrcBlock "RX" SrcPort 1 DstBlock "Multiport\nSelector" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 1 DstBlock "Subsystem8" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 2 DstBlock "Subsystem8" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 3 DstBlock "Subsystem8" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 4 DstBlock "Subsystem8" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 5 DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 6 DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 7 DstBlock "Subsystem" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 8 DstBlock "Subsystem" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 9 DstBlock "Subsystem1" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 10 DstBlock "Subsystem1" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 11 DstBlock "Subsystem1" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 12 DstBlock "Subsystem1" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 13 DstBlock "Subsystem2" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 14 DstBlock "Subsystem2" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 15 DstBlock "Subsystem2" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 16 DstBlock "Subsystem2" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 17 DstBlock "Subsystem3" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 18 DstBlock "Subsystem3" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 19 DstBlock "Subsystem3" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 20 DstBlock "Subsystem3" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 21 DstBlock "Subsystem4" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 22 DstBlock "Subsystem4" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 23 DstBlock "Subsystem4" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 24 DstBlock "Subsystem4" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 25 DstBlock "Subsystem5" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 26 DstBlock "Subsystem5" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 27 DstBlock "Subsystem5" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 28 DstBlock "Subsystem5" DstPort 4 } Line { SrcBlock "Subsystem4" SrcPort 1 DstBlock "d_P_I" DstPort 1 } Line { SrcBlock "Subsystem3" SrcPort 1 DstBlock "d_L_Q" DstPort 1 } Line { SrcBlock "Subsystem2" SrcPort 1 DstBlock "d_L_I" DstPort 1 } Line { SrcBlock "Subsystem1" SrcPort 1 DstBlock "d_E_Q" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 DstBlock "d_E_I" DstPort 1 } Line { SrcBlock "Subsystem8" SrcPort 1 DstBlock "control_id" DstPort 1 } Line { SrcBlock "Subsystem5" SrcPort 1 DstBlock "d_P_Q" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 29 DstBlock "Subsystem6" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 30 DstBlock "Subsystem6" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 31 DstBlock "Subsystem6" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 32 DstBlock "Subsystem6" DstPort 4 } Line { SrcBlock "Subsystem6" SrcPort 1 DstBlock "d_acq_carrier_doppler_hz" DstPort 1 } Line { SrcBlock "Subsystem7" SrcPort 1 DstBlock "enable_tracking" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 33 DstBlock "Subsystem7" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 34 DstBlock "Subsystem7" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 35 DstBlock "Subsystem7" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 36 DstBlock "Subsystem7" DstPort 4 } Annotation { Position [285, 79] } } } Block { BlockType SubSystem Name "gnss_sdr_tcp_connector_tracking_tx" SID "5" Ports [4] Position [430, 26, 600, 224] AncestorBlock "simulink/User-Defined\nFunctions/gnss_sdr/gnss_sdr_tcp_connector_tracking_tx" LibraryVersion "*1.267" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_tcp_connector_tracking_tx" Location [1137, 408, 1500, 698] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11844" SIDPrevWatermark "11844" Block { BlockType Inport Name "control_id" SID "5:11610" Position [30, 38, 60, 52] IconDisplay "Port number" } Block { BlockType Inport Name "code_error" SID "5:11611" Position [30, 98, 60, 112] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "carr_error" SID "5:11612" Position [30, 158, 60, 172] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "carrier_doppler_hz" SID "5:11613" Position [30, 218, 60, 232] Port "4" IconDisplay "Port number" } Block { BlockType Display Name "Display" SID "5:11614" Ports [1] Position [175, 234, 330, 266] ShowName off Format "long" Decimation "1" Lockdown off } Block { BlockType Reference Name "TX" SID "5:11615" Ports [1] Position [175, 77, 310, 193] LibraryVersion "1.84" DialogController "instrumentcreatedialog" DialogControllerArgs "DataTag5" SourceBlock "instrumentlib/TCP//IP Send" SourceType "TCP/IP Send" Host "84.88.61.86" Port "2070" EnableBlockingMode on Timeout "10" ByteOrder "LittleEndian" } Block { BlockType Concatenate Name "Vector\nConcatenate1" SID "5:11616" Ports [4, 1] Position [95, 12, 100, 258] BackgroundColor "black" ShowName off NumInputs "4" Mode "Vector" } Line { SrcBlock "carr_error" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 3 } Line { SrcBlock "code_error" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 2 } Line { SrcBlock "control_id" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 1 } Line { SrcBlock "Vector\nConcatenate1" SrcPort 1 Points [15, 0] Branch { DstBlock "TX" DstPort 1 } Branch { Points [0, 115] DstBlock "Display" DstPort 1 } } Line { SrcBlock "carrier_doppler_hz" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 4 } } } } } } } MatData { NumRecords 6 DataRecord { Tag DataTag5 Data " %)30 . : 8 ( 0 % \" $ ! 0 . . 8 ( ! " " % \" $ ' 0 0 !P '1C<&EP. * * ------------------------------------------------------------------------- */ IMPORTANT: Please, to use this tracking check the configuration file called 'gnss-sdr_tcp_connector_tracking.conf'. There are two major changes: 1.- Choose the [GPS_L1_CA_TCP_CONNECTOR_Tracking] tracking algorithm. 2.- Choose a tcp port for channel 0 (e.g. Tracking.port_ch0=2070;) A) HOW TO add a block to the Simulink Library repository of your Matlab installation --------------------------------------------------------------------------------- (These steps should be followed only the first time) 1.- Copy the content of this folder to a folder accessible from Simulink. 2.- In the Matlab Command Window type: >> simulink; to open the Simulink Library Browser. 3.- Right-click on the Simulink/User-Defined Functions of the Simulink Library menu, and click on "Open User-Defined Functions library" (Window_1). 4.- Open the library model 'gnss_sdr_tcp_connector_tracking_lib.mdl' (Window_2) 5.- If this is not the first time there should be an existing 'gnss-sdr' block in the 'User-Defined Functions' window that should be deleted before drag and drop the new 'gnss_sdr' block (which includes 3 blocks: - 'gnss_sdr_tcp_connector_tracking_rx' block - 'gnss_sdr_tcp_connector_tracking' block - 'gnss_sdr_tcp_connector_tracking_tx' block) from Window_2 to Window_1. A new message should appear: "This library is locked. The action performed requires it to be unlocked". Then, click on the "Unlock" button (the block will be copied) and close Window_2. 6.- Right-click on the 'gnss-sdr' block and click on "Link Options --> Disable link", repeat the action but now clicking on "Link Options --> Break link". This action disables and breaks the link with the original library model. 7.- On Window_1 save the "simulink/User-Defined Functions" library. To do that go to "File > Save". Then, close Window_1. 8.- From "Simulink Library Browser" window, press F5 to refresh and generate the new Simulink Library repository (it may take a few seconds). This completes the installation of the custom Simulink block. B) HOW TO use the "gnss_sdr_tcp_connector_parallel_tracking_start.m" script: ---------------------------------------------------------------- ----------------------- ------------------ ----------------------- | | | | | | | gnss_sdr_tcp_ | | gnss_sdr_tcp_ | | gnss_sdr_tcp_ | | connector_tracking_ | --> | connector_ | --> | connector_tracking_ | | rx | | tracking | | tx | | | | | | | ----------------------- ------------------ ----------------------- The 'gnss_sdr_tcp_connector_parallel_tracking_start.m' is the script that builds and configures a Simulink model for interacting with the GNSS-SDR platform through a TCP communication. Some 'User parameters' can be modified but, by default, these are the values assigned: %User parameters host = '84.88.61.86'; %Remote IP address (GNSS-SDR computer IP) port = 2070; %Remote port (GNSS-SDR computer port for Ch0) num_vars_rx = 9; %Number of variables expected from GNSS-SDR num_vars_tx = 4; %Number of variable to be transmitted to GNSS-SDR timeout = '40'; %Timeout in seconds 'host', 'port' and 'timeout' parameters configure both 'gnss_sdr_tcp_connector_tracking_rx' and 'gnss_sdr_tcp_connector_tracking_tx' blocks. The 'port' parameter sets the base port number for the first channel (ch0). Each of the subsequent channels increases their port by one unit (e.g. ch0_port=2070, ch1_port=2071,...). Also the name of the tracking block can be modified. It must match with the Simulink model name: %Name of the tracking block, it must match the Simulink model name tracking_block_name = 'gnss_sdr_tcp_connector_tracking'; To configure the MATLAB to work in parallel mode (the 'Parallel Computing' Toolbox must be installed in the MATLAB) type in the Matlab Command Window the following: >> matlabpool(C) where C is the number of cores of the computer to be used. Then it should appear a message like this one: "Destroying 1 pre-existing parallel job(s) created by matlabpool that were in the finished or failed state. Starting matlabpool using the 'local' configuration ... connected to 4 labs." Once the MATLAB is configured to work in parallel mode, type the following to run the script: >> gnss_sdr_tcp_connector_parallel_tracking_start(N,C); where N must match the number of channels configured in the GNSS-SDR platform and C is the same as before. Note: to stop working with the parallel mode type in the Command Window the following: >> matlabpool close C) HOW TO replace the tracking block of the library ------------------------------------------------ 1.- Open the library model 'gnss_sdr_tcp_connector_tracking_lib.mdl' 2.- Unlock the library. Click on "Edit > Unlock Library". 3.- Open the "gnss-sdr" block and change the "gnss_sdr_tcp_connector_tracking" block by another one. If the name is different it must be updated in the "gnss_sdr_tcp_connector_parallel_tracking_start.m" code (see section B) 4.- Save the new library. 5.- Go to section A and follow the instructions. gnss-sdr-0.0.6/src/utils/simulink/Multi Thread/gnss_sdr_tcp_connector_parallel_tracking_start.m0000644000175000017500000002260012576764164032542 0ustar carlescarles% /*! % * \file gnss_sdr_tcp_connector_tracking_start.m % * \brief This MATLAB function builds and configures a Simulink model % * for interacting with the GNSS-SDR platform through a TCP % * communication. Parallel Computing version. % * \author David Pubill, 2012. dpubill(at)cttc.es % * % * ---------------------------------------------------------------------- % * % * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ---------------------------------------------------------------------- % */ function gnss_sdr_tcp_connector_parallel_tracking_start(num_channels, num_cores) %The parallel for (parfor) loop allows to build and run a Simulink %model in parallel mode, programming different threads parfor i = 0:num_cores-1; %Open and close the Simulink Library simulink('open'); simulink('close'); %User parameters host = '84.88.61.86'; %Remote IP address (GNSS-SDR computer IP) port = 2070; %Remote port (GNSS-SDR computer port for Ch0) num_vars_rx = 9; %Number of variables expected from GNSS-SDR num_vars_tx = 4; %Number of variable to be transmitted to GNSS-SDR timeout = '40'; %Timeout [s] %Name of the tracking block, it must match the Simulink model name tracking_block_name = 'gnss_sdr_tcp_connector_tracking'; % Layout coordinates for the gnss_sdr_tcp_connector_tracking blocks X0 = 20; X1 = 170; Y0 = 20; Y1 = 140; X_offset = 200; Y_offset = 160; %Calculate the size of the data received from GNSS-SDR %(float = 4 bytes each variable) datasize_RX = num_vars_rx*4; %Create a Simulink model model_name = ['gnss_sdr_tcp_connector_parallel_tracking_aux_', num2str(i)]; new_system(model_name); open_system(model_name); %Set parameters to avoid warnings in the Command Window set_param(model_name,... 'InheritedTsInSrcMsg', 'none'); warning('off', 'Simulink:Commands:SetParamLinkChangeWarn'); %Assign values to the variables used by Simulink in the base workspace assignin('base', 'Ti', 1e-3); assignin('base', 'f0', 1.57542e9); assignin('base', 'SFunSlope', 3.5); assignin('base', 'Tc', 4e-3/4092); assignin('base', 'T', 1e-3); assignin('base', 'B_PLL', 50); assignin('base', 'B_DLL', 2); %Calculate some variables to control the number of blocks that %should content each Simulink model in function of the number of %cores specified min_num_blocks_per_model = floor(num_channels/num_cores); id = rem(num_channels,num_cores); if(i" LastModifiedBy "David Pubill" ModifiedDateFormat "%" LastModifiedDate "Fri Oct 19 12:46:31 2012" RTWModifiedTimeStamp 272551143 ModelVersionFormat "1.%" ConfigurationManager "None" SampleTimeColors off SampleTimeAnnotations off LibraryLinkDisplay "none" WideLines off ShowLineDimensions off ShowPortDataTypes off ShowLoopsOnError on IgnoreBidirectionalLines off ShowStorageClass off ShowTestPointIcons on ShowSignalResolutionIcons on ShowViewerIcons on SortedOrder off ExecutionContextIcon off ShowLinearizationAnnotations on BlockNameDataTip off BlockParametersDataTip off BlockDescriptionStringDataTip off ToolBar on StatusBar on BrowserShowLibraryLinks off BrowserLookUnderMasks off SimulationMode "normal" LinearizationMsg "none" Profile off ParamWorkspaceSource "MATLABWorkspace" RecordCoverage off CovSaveName "covdata" CovMetricSettings "dw" CovNameIncrementing off CovHtmlReporting on CovForceBlockReductionOff on covSaveCumulativeToWorkspaceVar on CovSaveSingleToWorkspaceVar on CovCumulativeReport off CovReportOnPause on CovModelRefEnable "Off" CovExternalEMLEnable off ExtModeBatchMode off ExtModeEnableFloating on ExtModeTrigType "manual" ExtModeTrigMode "normal" ExtModeTrigPort "1" ExtModeTrigElement "any" ExtModeTrigDuration 1000 ExtModeTrigDurationFloating "auto" ExtModeTrigHoldOff 0 ExtModeTrigDelay 0 ExtModeTrigDirection "rising" ExtModeTrigLevel 0 ExtModeArchiveMode "off" ExtModeAutoIncOneShot off ExtModeIncDirWhenArm off ExtModeAddSuffixToVar off ExtModeWriteAllDataToWs off ExtModeArmWhenConnect on ExtModeSkipDownloadWhenConnect off ExtModeLogAll on ExtModeAutoUpdateStatusClock on ShowModelReferenceBlockVersion off ShowModelReferenceBlockIO off Array { Type "Handle" Dimension 1 Simulink.ConfigSet { $ObjectID 1 Version "1.10.0" Array { Type "Handle" Dimension 9 Simulink.SolverCC { $ObjectID 2 Version "1.10.0" StartTime "0.0" StopTime "10.0" AbsTol "auto" FixedStep "auto" InitialStep "auto" MaxNumMinSteps "-1" MaxOrder 5 ZcThreshold "auto" ConsecutiveZCsStepRelTol "10*128*eps" MaxConsecutiveZCs "1000" ExtrapolationOrder 4 NumberNewtonIterations 1 MaxStep "auto" MinStep "auto" MaxConsecutiveMinStep "1" RelTol "1e-3" SolverMode "Auto" ConcurrentTasks off Solver "VariableStepDiscrete" SolverName "VariableStepDiscrete" SolverJacobianMethodControl "auto" ShapePreserveControl "DisableAll" ZeroCrossControl "UseLocalSettings" ZeroCrossAlgorithm "Nonadaptive" AlgebraicLoopSolver "TrustRegion" SolverResetMethod "Fast" PositivePriorityOrder off AutoInsertRateTranBlk off SampleTimeConstraint "Unconstrained" InsertRTBMode "Whenever possible" } Simulink.DataIOCC { $ObjectID 3 Version "1.10.0" Decimation "1" ExternalInput "[t, u]" FinalStateName "xFinal" InitialState "xInitial" LimitDataPoints on MaxDataPoints "1000" LoadExternalInput off LoadInitialState off SaveFinalState off SaveCompleteFinalSimState off SaveFormat "Array" SaveOutput on SaveState off SignalLogging on DSMLogging on InspectSignalLogs off SaveTime on ReturnWorkspaceOutputs off StateSaveName "xout" TimeSaveName "tout" OutputSaveName "yout" SignalLoggingName "logsout" DSMLoggingName "dsmout" OutputOption "RefineOutputTimes" OutputTimes "[]" ReturnWorkspaceOutputsName "out" Refine "1" } Simulink.OptimizationCC { $ObjectID 4 Version "1.10.0" Array { Type "Cell" Dimension 8 Cell "BooleansAsBitfields" Cell "PassReuseOutputArgsAs" Cell "PassReuseOutputArgsThreshold" Cell "ZeroExternalMemoryAtStartup" Cell "ZeroInternalMemoryAtStartup" Cell "OptimizeModelRefInitCode" Cell "NoFixptDivByZeroProtection" Cell "UseSpecifiedMinMax" PropName "DisabledProps" } BlockReduction on BooleanDataType on ConditionallyExecuteInputs on InlineParams off UseIntDivNetSlope off UseSpecifiedMinMax off InlineInvariantSignals off OptimizeBlockIOStorage on BufferReuse on EnhancedBackFolding off StrengthReduction off ExpressionFolding on BooleansAsBitfields off BitfieldContainerType "uint_T" EnableMemcpy on MemcpyThreshold 64 PassReuseOutputArgsAs "Structure reference" ExpressionDepthLimit 2147483647 FoldNonRolledExpr on LocalBlockOutputs on RollThreshold 5 SystemCodeInlineAuto off StateBitsets off DataBitsets off UseTempVars off ZeroExternalMemoryAtStartup on ZeroInternalMemoryAtStartup on InitFltsAndDblsToZero off NoFixptDivByZeroProtection off EfficientFloat2IntCast off EfficientMapNaN2IntZero on OptimizeModelRefInitCode off LifeSpan "inf" MaxStackSize "Inherit from target" BufferReusableBoundary on SimCompilerOptimization "Off" AccelVerboseBuild off } Simulink.DebuggingCC { $ObjectID 5 Version "1.10.0" RTPrefix "error" ConsistencyChecking "none" ArrayBoundsChecking "none" SignalInfNanChecking "none" SignalRangeChecking "none" ReadBeforeWriteMsg "UseLocalSettings" WriteAfterWriteMsg "UseLocalSettings" WriteAfterReadMsg "UseLocalSettings" AlgebraicLoopMsg "warning" ArtificialAlgebraicLoopMsg "warning" SaveWithDisabledLinksMsg "warning" SaveWithParameterizedLinksMsg "none" CheckSSInitialOutputMsg on UnderspecifiedInitializationDetection "Classic" MergeDetectMultiDrivingBlocksExec "none" CheckExecutionContextPreStartOutputMsg off CheckExecutionContextRuntimeOutputMsg off SignalResolutionControl "UseLocalSettings" BlockPriorityViolationMsg "warning" MinStepSizeMsg "warning" TimeAdjustmentMsg "none" MaxConsecutiveZCsMsg "error" MaskedZcDiagnostic "warning" IgnoredZcDiagnostic "warning" SolverPrmCheckMsg "warning" InheritedTsInSrcMsg "warning" DiscreteInheritContinuousMsg "warning" MultiTaskDSMMsg "error" MultiTaskCondExecSysMsg "error" MultiTaskRateTransMsg "error" SingleTaskRateTransMsg "none" TasksWithSamePriorityMsg "warning" SigSpecEnsureSampleTimeMsg "warning" CheckMatrixSingularityMsg "none" IntegerOverflowMsg "warning" Int32ToFloatConvMsg "warning" ParameterDowncastMsg "error" ParameterOverflowMsg "error" ParameterUnderflowMsg "none" ParameterPrecisionLossMsg "warning" ParameterTunabilityLossMsg "warning" FixptConstUnderflowMsg "none" FixptConstOverflowMsg "none" FixptConstPrecisionLossMsg "none" UnderSpecifiedDataTypeMsg "none" UnnecessaryDatatypeConvMsg "none" VectorMatrixConversionMsg "none" InvalidFcnCallConnMsg "error" FcnCallInpInsideContextMsg "Use local settings" SignalLabelMismatchMsg "none" UnconnectedInputMsg "warning" UnconnectedOutputMsg "warning" UnconnectedLineMsg "warning" SFcnCompatibilityMsg "none" UniqueDataStoreMsg "none" BusObjectLabelMismatch "warning" RootOutportRequireBusObject "warning" AssertControl "UseLocalSettings" EnableOverflowDetection off ModelReferenceIOMsg "none" ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" ModelReferenceVersionMismatchMessage "none" ModelReferenceIOMismatchMessage "none" ModelReferenceCSMismatchMessage "none" UnknownTsInhSupMsg "warning" ModelReferenceDataLoggingMessage "warning" ModelReferenceSymbolNameMessage "warning" ModelReferenceExtraNoncontSigs "error" StateNameClashWarn "warning" SimStateInterfaceChecksumMismatchMsg "warning" InitInArrayFormatMsg "warning" StrictBusMsg "ErrorLevel1" BusNameAdapt "WarnAndRepair" NonBusSignalsTreatedAsBus "none" LoggingUnavailableSignals "error" BlockIODiagnostic "none" SFUnusedDataAndEventsDiag "warning" SFUnexpectedBacktrackingDiag "warning" SFInvalidInputDataAccessInChartInitDiag "warning" SFNoUnconditionalDefaultTransitionDiag "warning" SFTransitionOutsideNaturalParentDiag "warning" } Simulink.HardwareCC { $ObjectID 6 Version "1.10.0" ProdBitPerChar 8 ProdBitPerShort 16 ProdBitPerInt 32 ProdBitPerLong 32 ProdBitPerFloat 32 ProdBitPerDouble 64 ProdBitPerPointer 32 ProdLargestAtomicInteger "Char" ProdLargestAtomicFloat "None" ProdIntDivRoundTo "Undefined" ProdEndianess "Unspecified" ProdWordSize 32 ProdShiftRightIntArith on ProdHWDeviceType "32-bit Generic" TargetBitPerChar 8 TargetBitPerShort 16 TargetBitPerInt 32 TargetBitPerLong 32 TargetBitPerFloat 32 TargetBitPerDouble 64 TargetBitPerPointer 32 TargetLargestAtomicInteger "Char" TargetLargestAtomicFloat "None" TargetShiftRightIntArith on TargetIntDivRoundTo "Undefined" TargetEndianess "Unspecified" TargetWordSize 32 TargetTypeEmulationWarnSuppressLevel 0 TargetPreprocMaxBitsSint 32 TargetPreprocMaxBitsUint 32 TargetHWDeviceType "Specified" TargetUnknown off ProdEqTarget on } Simulink.ModelReferenceCC { $ObjectID 7 Version "1.10.0" UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" CheckModelReferenceTargetMessage "error" EnableParallelModelReferenceBuilds off ParallelModelReferenceErrorOnInvalidPool on ParallelModelReferenceMATLABWorkerInit "None" ModelReferenceNumInstancesAllowed "Multi" PropagateVarSize "Infer from blocks in model" ModelReferencePassRootInputsByReference on ModelReferenceMinAlgLoopOccurrences off PropagateSignalLabelsOutOfModel off SupportModelReferenceSimTargetCustomCode off } Simulink.SFSimCC { $ObjectID 8 Version "1.10.0" SFSimEnableDebug on SFSimOverflowDetection on SFSimEcho on SimBlas on SimCtrlC on SimExtrinsic on SimIntegrity on SimUseLocalCustomCode off SimParseCustomCode on SimBuildMode "sf_incremental_build" } Simulink.RTWCC { $BackupClass "Simulink.RTWCC" $ObjectID 9 Version "1.10.0" Array { Type "Cell" Dimension 7 Cell "IncludeHyperlinkInReport" Cell "GenerateTraceInfo" Cell "GenerateTraceReport" Cell "GenerateTraceReportSl" Cell "GenerateTraceReportSf" Cell "GenerateTraceReportEml" Cell "GenerateSLWebview" PropName "DisabledProps" } SystemTargetFile "grt.tlc" GenCodeOnly off MakeCommand "make_rtw" GenerateMakefile on TemplateMakefile "grt_default_tmf" GenerateReport off SaveLog off RTWVerbose on RetainRTWFile off ProfileTLC off TLCDebug off TLCCoverage off TLCAssert off ProcessScriptMode "Default" ConfigurationMode "Optimized" ConfigAtBuild off RTWUseLocalCustomCode off RTWUseSimCustomCode off IncludeHyperlinkInReport off LaunchReport off TargetLang "C" IncludeBusHierarchyInRTWFileBlockHierarchyMap off IncludeERTFirstTime off GenerateTraceInfo off GenerateTraceReport off GenerateTraceReportSl off GenerateTraceReportSf off GenerateTraceReportEml off GenerateCodeInfo off GenerateSLWebview off RTWCompilerOptimization "Off" CheckMdlBeforeBuild "Off" CustomRebuildMode "OnUpdate" Array { Type "Handle" Dimension 2 Simulink.CodeAppCC { $ObjectID 10 Version "1.10.0" Array { Type "Cell" Dimension 21 Cell "IgnoreCustomStorageClasses" Cell "IgnoreTestpoints" Cell "InsertBlockDesc" Cell "InsertPolySpaceComments" Cell "SFDataObjDesc" Cell "MATLABFcnDesc" Cell "SimulinkDataObjDesc" Cell "DefineNamingRule" Cell "SignalNamingRule" Cell "ParamNamingRule" Cell "InlinedPrmAccess" Cell "CustomSymbolStr" Cell "CustomSymbolStrGlobalVar" Cell "CustomSymbolStrType" Cell "CustomSymbolStrField" Cell "CustomSymbolStrFcn" Cell "CustomSymbolStrFcnArg" Cell "CustomSymbolStrBlkIO" Cell "CustomSymbolStrTmpVar" Cell "CustomSymbolStrMacro" Cell "ReqsInCode" PropName "DisabledProps" } ForceParamTrailComments off GenerateComments on IgnoreCustomStorageClasses on IgnoreTestpoints off IncHierarchyInIds off MaxIdLength 31 PreserveName off PreserveNameWithParent off ShowEliminatedStatement off IncAutoGenComments off SimulinkDataObjDesc off SFDataObjDesc off MATLABFcnDesc off IncDataTypeInIds off MangleLength 1 CustomSymbolStrGlobalVar "$R$N$M" CustomSymbolStrType "$N$R$M" CustomSymbolStrField "$N$M" CustomSymbolStrFcn "$R$N$M$F" CustomSymbolStrFcnArg "rt$I$N$M" CustomSymbolStrBlkIO "rtb_$N$M" CustomSymbolStrTmpVar "$N$M" CustomSymbolStrMacro "$R$N$M" DefineNamingRule "None" ParamNamingRule "None" SignalNamingRule "None" InsertBlockDesc off InsertPolySpaceComments off SimulinkBlockComments on MATLABSourceComments off EnableCustomComments off InlinedPrmAccess "Literals" ReqsInCode off UseSimReservedNames off } Simulink.GRTTargetCC { $BackupClass "Simulink.TargetCC" $ObjectID 11 Version "1.10.0" Array { Type "Cell" Dimension 16 Cell "GeneratePreprocessorConditionals" Cell "IncludeMdlTerminateFcn" Cell "CombineOutputUpdateFcns" Cell "SuppressErrorStatus" Cell "ERTCustomFileBanners" Cell "GenerateSampleERTMain" Cell "GenerateTestInterfaces" Cell "ModelStepFunctionPrototypeControlCompliant" Cell "CPPClassGenCompliant" Cell "MultiInstanceERTCode" Cell "PurelyIntegerCode" Cell "SupportComplex" Cell "SupportAbsoluteTime" Cell "SupportContinuousTime" Cell "SupportNonInlinedSFcns" Cell "PortableWordSizes" PropName "DisabledProps" } TargetFcnLib "ansi_tfl_table_tmw.mat" TargetLibSuffix "" TargetPreCompLibLocation "" TargetFunctionLibrary "ANSI_C" UtilityFuncGeneration "Auto" ERTMultiwordTypeDef "System defined" ERTCodeCoverageTool "None" ERTMultiwordLength 256 MultiwordLength 2048 GenerateFullHeader on GenerateSampleERTMain off GenerateTestInterfaces off IsPILTarget off ModelReferenceCompliant on ParMdlRefBuildCompliant on CompOptLevelCompliant on IncludeMdlTerminateFcn on GeneratePreprocessorConditionals "Disable all" CombineOutputUpdateFcns off CombineSignalStateStructs off SuppressErrorStatus off ERTFirstTimeCompliant off IncludeFileDelimiter "Auto" ERTCustomFileBanners off SupportAbsoluteTime on LogVarNameModifier "rt_" MatFileLogging on MultiInstanceERTCode off SupportNonFinite on SupportComplex on PurelyIntegerCode off SupportContinuousTime on SupportNonInlinedSFcns on SupportVariableSizeSignals off EnableShiftOperators on ParenthesesLevel "Nominal" PortableWordSizes off ModelStepFunctionPrototypeControlCompliant off CPPClassGenCompliant off AutosarCompliant off UseMalloc off ExtMode off ExtModeStaticAlloc off ExtModeTesting off ExtModeStaticAllocSize 1000000 ExtModeTransport 0 ExtModeMexFile "ext_comm" ExtModeIntrfLevel "Level1" RTWCAPISignals off RTWCAPIParams off RTWCAPIStates off GenerateASAP2 off } PropName "Components" } } hdlcoderui.hdlcc { $ObjectID 12 Version "1.10.0" Description "HDL Coder custom configuration component" Name "HDL Coder" Array { Type "Cell" Dimension 1 Cell "" PropName "HDLConfigFile" } HDLCActiveTab "0" } PropName "Components" } Name "Configuration" CurrentDlgPage "Solver" ConfigPrmDlgPosition " [ 400, 210, 1280, 840 ] " } PropName "ConfigurationSets" } BlockDefaults { ForegroundColor "black" BackgroundColor "white" DropShadow off NamePlacement "normal" FontName "Helvetica" FontSize 10 FontWeight "normal" FontAngle "normal" ShowName on BlockRotation 0 BlockMirror off } AnnotationDefaults { HorizontalAlignment "center" VerticalAlignment "middle" ForegroundColor "black" BackgroundColor "white" DropShadow off FontName "Helvetica" FontSize 10 FontWeight "normal" FontAngle "normal" UseDisplayTextAsClickCallback off } LineDefaults { FontName "Helvetica" FontSize 9 FontWeight "normal" FontAngle "normal" } BlockParameterDefaults { Block { BlockType Abs ZeroCross on SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on } Block { BlockType ComplexToRealImag Output "Real and imag" SampleTime "-1" } Block { BlockType Concatenate NumInputs "2" ConcatenateDimension "1" } Block { BlockType Constant Value "1" VectorParams1D on SamplingMode "Sample based" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit from 'Constant value'" LockScale off SampleTime "inf" FramePeriod "inf" PreserveConstantTs off } Block { BlockType DataTypeConversion OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit via back propagation" LockScale off ConvertRealWorld "Real World Value (RWV)" RndMeth "Zero" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Display Format "short" Decimation "10" Floating off SampleTime "-1" } Block { BlockType Gain Gain "1" Multiplication "Element-wise(K.*u)" ParamMin "[]" ParamMax "[]" ParamDataTypeStr "Inherit: Same as input" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Inport Port "1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: auto" LockScale off BusOutputAsStruct off PortDimensions "-1" VarSizeSig "Inherit" SampleTime "-1" SignalType "auto" SamplingMode "auto" LatchByDelayingOutsideSignal off LatchInputForFeedbackSignals off Interpolate on } Block { BlockType Math Operator "exp" OutputSignalType "auto" SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on IntermediateResultsDataTypeStr "Inherit: Inherit via internal rule" AlgorithmType "Newton-Raphson" Iterations "3" } Block { BlockType Mux Inputs "4" DisplayOption "none" UseBusObject off BusObject "BusObject" NonVirtualBus off } Block { BlockType Outport Port "1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: auto" LockScale off BusOutputAsStruct off PortDimensions "-1" VarSizeSig "Inherit" SampleTime "-1" SignalType "auto" SamplingMode "auto" SourceOfInitialOutputValue "Dialog" OutputWhenDisabled "held" InitialOutput "[]" } Block { BlockType Product Inputs "2" Multiplication "Element-wise(.*)" CollapseMode "All dimensions" CollapseDim "1" InputSameDT on OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Zero" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType RealImagToComplex Input "Real and imag" ConstantPart "0" SampleTime "-1" } Block { BlockType Sqrt Operator "sqrt" OutputSignalType "auto" SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on IntermediateResultsDataTypeStr "Inherit: Inherit via internal rule" AlgorithmType "Exact" Iterations "3" } Block { BlockType SubSystem ShowPortLabels "FromPortIcon" Permissions "ReadWrite" PermitHierarchicalResolution "All" TreatAsAtomicUnit off CheckFcnCallInpInsideContextMsg off SystemSampleTime "-1" RTWFcnNameOpts "Auto" RTWFileNameOpts "Auto" RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" SimViewingDevice off DataTypeOverride "UseLocalSettings" DataTypeOverrideAppliesTo "AllNumericTypes" MinMaxOverflowLogging "UseLocalSettings" Variant off GeneratePreprocessorConditionals off } Block { BlockType Sum IconShape "rectangular" Inputs "++" CollapseMode "All dimensions" CollapseDim "1" InputSameDT on AccumDataTypeStr "Inherit: Inherit via internal rule" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Switch Criteria "u2 >= Threshold" Threshold "0" InputSameDT on OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit via internal rule" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on ZeroCross on SampleTime "-1" AllowDiffInputSizes off } Block { BlockType Trigonometry Operator "sin" ApproximationMethod "None" NumberOfIterations "11" OutputSignalType "auto" SampleTime "-1" } } System { Name "gnss_sdr_galileo_e1_tcp_connector_tracking_lib" Location [724, 337, 1557, 772] Open on ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" ReportName "simulink-default.rpt" SIDHighWatermark "4302" Block { BlockType Reference Name "Model Info" SID "2" Ports [] Position [15, 15, 517, 411] ForegroundColor "green" ShowName off LibraryVersion "1.310" FontName "Arial" SourceBlock "simulink/Model-Wide\nUtilities/Model Info" SourceType "CMBlock" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off InitialBlockCM "None" BlockCM "None" Frame "on" DisplayStringWithTags "/*! \n * \\file gnss_sdr_galileo_e1_tcp_connector_tracking_lib.mdl\n * \\brief gnss_" "sdr_galileo_e1_tcp_connector_tracking Simulink library model. For \n * further information, please check the R" "EADME_gnss_sdr_galileo_e1_tcp_connector_tracking.txt file.\n *\n * \\author David Pubill, 2012. dpubill(at)ctt" "c.es\n * -------------------------------------------------------------------------\n *\n * Copyright (C) 2010" "-2012 (see AUTHORS file for a list of contributors)\n *\n * GNSS-SDR is a software defined Global Navigation\n" " * Satellite Systems receiver\n *\n * This file is part of GNSS-SDR.\n *\n * GNSS-SDR is free soft" "ware: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as publish" "ed by\n * the Free Software Foundation, either version 3 of the License, or\n * at your option) any later vers" "ion.\n *\n * GNSS-SDR is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; withou" "t even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Gener" "al Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n" " * along with GNSS-SDR. If not, see .\n *\n * ---------------------------------" "----------------------------------------\n */" MaskDisplayString "/*! \\n * \\file gnss_sdr_galileo_e1_tcp_connector_tracking_lib.mdl\\n * \\brief gns" "s_sdr_galileo_e1_tcp_connector_tracking Simulink library model. For \\n * further information, please check th" "e README_gnss_sdr_galileo_e1_tcp_connector_tracking.txt file.\\n *\\n * \\author David Pubill, 2012. dpubill(a" "t)cttc.es\\n * -------------------------------------------------------------------------\\n *\\n * Copyright " "(C) 2010-2012 (see AUTHORS file for a list of contributors)\\n *\\n * GNSS-SDR is a software defined Global N" "avigation\\n * Satellite Systems receiver\\n *\\n * This file is part of GNSS-SDR.\\n *\\n * GNSS-" "SDR is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU General Public L" "icense as published by\\n * the Free Software Foundation, either version 3 of the License, or\\n * at your opt" "ion) any later version.\\n *\\n * GNSS-SDR is distributed in the hope that it will be useful,\\n * but WITHOU" "T ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. " " See the\\n * GNU General Public License for more details.\\n *\\n * You should have received a copy of the G" "NU General Public License\\n * along with GNSS-SDR. If not, see .\\n *\\n * ---" "----------------------------------------------------------------------\\n */" HorizontalTextAlignment "Left" LeftAlignmentValue "0.02" SourceBlockDiagram "gnss_sdr_galileo_e1_tcp_connector_tracking_lib" TagMaxNumber "20" } Block { BlockType SubSystem Name "gnss_sdr" SID "2052" Ports [] Position [580, 137, 725, 273] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr" Location [702, 290, 1436, 736] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType SubSystem Name "gnss_sdr_galileo_e1_tcp_connector_tracking" SID "2089" Ports [13, 5] Position [260, 16, 450, 394] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_galileo_e1_tcp_connector_tracking" Location [336, 160, 1165, 883] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "control_id" SID "2098" Position [55, 13, 85, 27] IconDisplay "Port number" } Block { BlockType Inport Name "d_vE_I" SID "2099" Position [55, 58, 85, 72] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "d_vE_Q" SID "2100" Position [55, 93, 85, 107] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "d_E_I" SID "2101" Position [55, 133, 85, 147] Port "4" IconDisplay "Port number" } Block { BlockType Inport Name "d_E_Q" SID "2102" Position [55, 168, 85, 182] Port "5" IconDisplay "Port number" } Block { BlockType Inport Name "d_L_I" SID "2103" Position [55, 208, 85, 222] Port "6" IconDisplay "Port number" } Block { BlockType Inport Name "d_L_Q" SID "2104" Position [55, 243, 85, 257] Port "7" IconDisplay "Port number" } Block { BlockType Inport Name "d_vL_I" SID "2105" Position [55, 283, 85, 297] Port "8" IconDisplay "Port number" } Block { BlockType Inport Name "d_vL_Q" SID "2106" Position [55, 318, 85, 332] Port "9" IconDisplay "Port number" } Block { BlockType Inport Name "d_P_I" SID "2107" Position [55, 523, 85, 537] Port "10" IconDisplay "Port number" } Block { BlockType Inport Name "d_P_Q" SID "2108" Position [55, 558, 85, 572] Port "11" IconDisplay "Port number" } Block { BlockType Inport Name "d_acq_carrier_doppler_Hz" SID "2109" Position [55, 593, 85, 607] Port "12" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "2110" Position [55, 643, 85, 657] Port "13" IconDisplay "Port number" } Block { BlockType Abs Name "Abs" SID "2111" Position [310, 439, 330, 461] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs1" SID "2112" Position [310, 414, 330, 436] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs2" SID "2113" Position [310, 389, 330, 411] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs3" SID "2114" Position [310, 464, 330, 486] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs4" SID "2115" Position [310, 364, 330, 386] ShowName off SaturateOnIntegerOverflow off } Block { BlockType SubSystem Name "Carrier Tracking (PLL)" SID "2116" Ports [3, 2] Position [250, 521, 415, 679] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Carrier Tracking (PLL)" Location [166, 531, 925, 785] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "P" SID "2117" Position [15, 43, 45, 57] IconDisplay "Port number" } Block { BlockType Inport Name "d_acq_carrier_doppler_Hz" SID "2118" Position [55, 203, 85, 217] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "2119" Position [175, 158, 205, 172] Port "3" IconDisplay "Port number" } Block { BlockType Constant Name "Constant" SID "2120" Position [510, 135, 540, 165] ShowName off Value "0" SampleTime "-1" } Block { BlockType SubSystem Name "PLL Filter" SID "2121" Ports [2, 1] Position [295, 20, 460, 135] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "PLL Filter" Location [166, 531, 1275, 944] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "carr_error" SID "4278" Position [30, 13, 60, 27] IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "4279" Position [30, 73, 60, 87] Port "2" IconDisplay "Port number" } Block { BlockType Constant Name "2*zeta" SID "4280" Position [300, 284, 350, 316] Value "2*zeta_PLL" SampleTime "-1" } Block { BlockType Sum Name "Add1" SID "4281" Ports [3, 1] Position [935, 141, 965, 279] ShowName off Inputs "+++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Constant Name "Constant4" SID "4282" Position [720, 155, 750, 185] ShowName off Value "0" SampleTime "-1" } Block { BlockType Constant Name "Constant5" SID "4283" Position [775, 350, 805, 380] ShowName off Value "0" SampleTime "-1" } Block { BlockType Constant Name "Constant6" SID "4284" Position [440, 100, 470, 130] ShowName off Value "0" SampleTime "-1" } Block { BlockType Reference Name "Delay1" SID "4285" Ports [1, 1] Position [955, 293, 985, 327] BlockMirror on NamePlacement "alternate" ShowName off LibraryVersion "1.310" UserDataPersistent on UserData "DataTag0" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "-1" } Block { BlockType Reference Name "Delay3" SID "4286" Ports [1, 1] Position [575, 63, 605, 97] NamePlacement "alternate" ShowName off LibraryVersion "1.310" UserDataPersistent on UserData "DataTag1" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "-1" } Block { BlockType Product Name "Divide4" SID "4287" Ports [2, 1] Position [370, 170, 405, 270] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off Port { PortNumber 1 Name "Tau1" RTWStorageClass "Auto" DataLoggingNameMode "SignalName" } } Block { BlockType Product Name "Divide5" SID "4288" Ports [2, 1] Position [370, 275, 405, 375] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off Port { PortNumber 1 Name "Tau2" RTWStorageClass "Auto" DataLoggingNameMode "SignalName" } } Block { BlockType Product Name "Divide6" SID "4289" Ports [2, 1] Position [545, 145, 580, 245] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Divide7" SID "4290" Ports [2, 1] Position [545, 255, 580, 355] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "4291" Ports [2, 1] Position [265, 225, 295, 265] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "4292" Ports [2, 1] Position [845, 106, 875, 224] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "4293" Ports [2, 1] Position [685, 274, 715, 316] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Subtract1" SID "4294" Ports [2, 1] Position [685, 35, 710, 95] ShowName off Inputs "+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch4" SID "4295" Position [485, 27, 535, 133] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch5" SID "4296" Position [825, 277, 875, 383] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch6" SID "4297" Position [765, 82, 815, 188] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Gain Name "Wn" SID "4298" Position [170, 227, 215, 263] Gain "(8*zeta_PLL)/(1+(4*(zeta_PLL)^2))" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Constant Name "d_pdi_carr" SID "4299" Position [475, 264, 525, 296] Value "d_pdi_carr" SampleTime "-1" } Block { BlockType Constant Name "k" SID "4300" Position [300, 179, 350, 211] Value "k_PLL" SampleTime "-1" } Block { BlockType Constant Name "lbw" SID "4301" Position [100, 229, 150, 261] Value "B_PLL" SampleTime "-1" } Block { BlockType Outport Name "carr_nco" SID "4302" Position [1040, 203, 1070, 217] IconDisplay "Port number" } Line { SrcBlock "d_pdi_carr" SrcPort 1 DstBlock "Divide7" DstPort 1 } Line { SrcBlock "Divide7" SrcPort 1 DstBlock "Product6" DstPort 2 } Line { SrcBlock "Add1" SrcPort 1 Points [45, 0] Branch { DstBlock "carr_nco" DstPort 1 } Branch { Points [0, 100] DstBlock "Delay1" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 DstBlock "Add1" DstPort 1 } Line { SrcBlock "Divide6" SrcPort 1 DstBlock "Product5" DstPort 2 } Line { SrcBlock "carr_error" SrcPort 1 Points [395, 0] Branch { Points [175, 0; 0, 30] Branch { Points [0, 235] DstBlock "Product6" DstPort 1 } Branch { DstBlock "Subtract1" DstPort 1 } } Branch { Points [0, 25] DstBlock "Switch4" DstPort 1 } } Line { Name "Tau2" Labels [0, 0] SrcBlock "Divide5" SrcPort 1 Points [35, 0; 0, -155] DstBlock "Divide6" DstPort 1 } Line { SrcBlock "2*zeta" SrcPort 1 DstBlock "Divide5" DstPort 1 } Line { SrcBlock "Product4" SrcPort 1 DstBlock "Divide4" DstPort 2 } Line { SrcBlock "k" SrcPort 1 DstBlock "Divide4" DstPort 1 } Line { Name "Tau1" Labels [0, 0] SrcBlock "Divide4" SrcPort 1 Points [55, 0] Branch { Points [0, 110] DstBlock "Divide7" DstPort 2 } Branch { DstBlock "Divide6" DstPort 2 } } Line { Labels [0, 0] SrcBlock "lbw" SrcPort 1 DstBlock "Wn" DstPort 1 } Line { SrcBlock "Wn" SrcPort 1 Points [15, 0] Branch { Points [10, 0] Branch { Points [0, 10] DstBlock "Product4" DstPort 2 } Branch { Points [0, -10] DstBlock "Product4" DstPort 1 } } Branch { Points [0, 105] DstBlock "Divide5" DstPort 2 } } Line { SrcBlock "Delay1" SrcPort 1 Points [-30, 0] DstBlock "Add1" DstPort 3 } Line { SrcBlock "Subtract1" SrcPort 1 Points [20, 0; 0, 35] DstBlock "Switch6" DstPort 1 } Line { SrcBlock "Switch6" SrcPort 1 DstBlock "Product5" DstPort 1 } Line { SrcBlock "Product6" SrcPort 1 DstBlock "Switch5" DstPort 1 } Line { SrcBlock "Switch5" SrcPort 1 Points [20, 0; 0, -120] DstBlock "Add1" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Switch5" DstPort 3 } Line { SrcBlock "Delay3" SrcPort 1 DstBlock "Subtract1" DstPort 2 } Line { SrcBlock "Constant6" SrcPort 1 DstBlock "Switch4" DstPort 3 } Line { SrcBlock "enable_tracking" SrcPort 1 Points [25, 0] Branch { Points [335, 0] Branch { Points [0, 55] DstBlock "Switch6" DstPort 2 } Branch { DstBlock "Switch4" DstPort 2 } } Branch { Points [0, 300; 660, 0; 0, -50] DstBlock "Switch5" DstPort 2 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Switch6" DstPort 3 } Line { SrcBlock "Switch4" SrcPort 1 DstBlock "Delay3" DstPort 1 } Annotation { Position [998, 349] } Annotation { Position [983, 334] } } } Block { BlockType SubSystem Name "PLL discriminator" SID "2149" Ports [1, 1] Position [75, 18, 185, 82] AncestorBlock "gnss_sdr_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_tcp_connector_tracking/Carrier Tracking \n" "(PLL)/atan2(Q,I)1/PLL Costas loop two quadrant arctan discriminator" LibraryVersion "*1.36" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "PLL discriminator" Location [259, 411, 754, 585] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11685" Block { BlockType Inport Name "P" SID "2149:11670" Position [15, 68, 45, 82] IconDisplay "Port number" } Block { BlockType Abs Name "Abs" SID "2149:11685" Position [250, 115, 280, 145] ShowName off SaturateOnIntegerOverflow off } Block { BlockType ComplexToRealImag Name "Complex to\nReal-Imag" SID "2149:11671" Ports [1, 2] Position [70, 35, 140, 110] ShowName off Output "Real and imag" } Block { BlockType Constant Name "Constant" SID "2149:11683" Position [315, 120, 345, 150] ShowName off Value "0" SampleTime "-1" } Block { BlockType Product Name "Divide" SID "2149:11672" Ports [2, 1] Position [210, 13, 230, 117] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch" SID "2149:11684" Position [365, 47, 415, 153] ShowName off Criteria "u2 > Threshold" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Trigonometry Name "Trigonometric\nFunction" SID "2149:11673" Ports [1, 1] Position [260, 43, 305, 87] ShowName off Operator "atan" } Block { BlockType Outport Name "carr_error" SID "2149:11674" Position [440, 93, 470, 107] IconDisplay "Port number" } Line { SrcBlock "Abs" SrcPort 1 Points [20, 0; 0, -30] DstBlock "Switch" DstPort 2 } Line { SrcBlock "Trigonometric\nFunction" SrcPort 1 DstBlock "Switch" DstPort 1 } Line { SrcBlock "Switch" SrcPort 1 DstBlock "carr_error" DstPort 1 } Line { SrcBlock "Constant" SrcPort 1 DstBlock "Switch" DstPort 3 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 2 Points [20, 0; 0, -50] DstBlock "Divide" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 1 Points [35, 0; 0, 35] Branch { DstBlock "Divide" DstPort 2 } Branch { Points [0, 40] DstBlock "Abs" DstPort 1 } } Line { SrcBlock "Divide" SrcPort 1 DstBlock "Trigonometric\nFunction" DstPort 1 } Line { SrcBlock "P" SrcPort 1 DstBlock "Complex to\nReal-Imag" DstPort 1 } } } Block { BlockType Sum Name "Subtract" SID "2150" Ports [2, 1] Position [575, 187, 605, 218] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch" SID "2151" Position [560, 62, 610, 168] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Gain Name "[rad/s] to [Hz]" SID "2152" Position [215, 34, 270, 66] ShowName off Gain "1/(2*pi)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "carr_nco" SID "2153" Position [655, 108, 685, 122] IconDisplay "Port number" } Block { BlockType Outport Name "carrier_doppler_Hz" SID "2154" Position [665, 198, 695, 212] Port "2" IconDisplay "Port number" } Line { SrcBlock "PLL discriminator" SrcPort 1 DstBlock "[rad/s] to [Hz]" DstPort 1 } Line { SrcBlock "P" SrcPort 1 DstBlock "PLL discriminator" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 Points [35, 0] Branch { Points [260, 0; 0, -50] DstBlock "Switch" DstPort 2 } Branch { Points [0, -60] DstBlock "PLL Filter" DstPort 2 } } Line { SrcBlock "PLL Filter" SrcPort 1 Points [20, 0] Branch { Points [0, 115] DstBlock "Subtract" DstPort 1 } Branch { DstBlock "Switch" DstPort 1 } } Line { SrcBlock "d_acq_carrier_doppler_Hz" SrcPort 1 DstBlock "Subtract" DstPort 2 } Line { SrcBlock "Subtract" SrcPort 1 DstBlock "carrier_doppler_Hz" DstPort 1 } Line { SrcBlock "Switch" SrcPort 1 DstBlock "carr_nco" DstPort 1 } Line { SrcBlock "Constant" SrcPort 1 DstBlock "Switch" DstPort 3 } Line { SrcBlock "[rad/s] to [Hz]" SrcPort 1 DstBlock "PLL Filter" DstPort 1 } } } Block { BlockType SubSystem Name "Code Tracking\n(DLL)" SID "2155" Ports [5, 1] Position [450, 44, 605, 426] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Code Tracking\n(DLL)" Location [514, 607, 1002, 858] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "vE" SID "2156" Position [25, 23, 55, 37] IconDisplay "Port number" } Block { BlockType Inport Name "E" SID "2157" Position [25, 58, 55, 72] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "2158" Position [25, 93, 55, 107] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "vL" SID "2159" Position [25, 128, 55, 142] Port "4" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "2160" Position [25, 173, 55, 187] Port "5" IconDisplay "Port number" } Block { BlockType SubSystem Name "DLL Filter" SID "2161" Ports [2, 1] Position [260, 36, 405, 229] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "DLL Filter" Location [158, 107, 1310, 563] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "code_error" SID "2162" Position [30, 13, 60, 27] IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "2163" Position [30, 73, 60, 87] Port "2" IconDisplay "Port number" } Block { BlockType Constant Name "2*zeta" SID "2164" Position [300, 284, 350, 316] Value "2*zeta_DLL" SampleTime "-1" } Block { BlockType Sum Name "Add" SID "2165" Ports [3, 1] Position [935, 141, 965, 279] ShowName off Inputs "+++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Constant Name "Constant" SID "2166" Position [720, 155, 750, 185] ShowName off Value "0" SampleTime "-1" } Block { BlockType Constant Name "Constant2" SID "2167" Position [775, 350, 805, 380] ShowName off Value "0" SampleTime "-1" } Block { BlockType Constant Name "Constant3" SID "2168" Position [440, 100, 470, 130] ShowName off Value "0" SampleTime "-1" } Block { BlockType Reference Name "Delay" SID "2169" Ports [1, 1] Position [955, 293, 985, 327] BlockMirror on NamePlacement "alternate" ShowName off LibraryVersion "1.310" UserDataPersistent on UserData "DataTag2" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "-1" } Block { BlockType Reference Name "Delay2" SID "2170" Ports [1, 1] Position [575, 63, 605, 97] NamePlacement "alternate" ShowName off LibraryVersion "1.310" UserDataPersistent on UserData "DataTag3" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "-1" } Block { BlockType Product Name "Divide" SID "2171" Ports [2, 1] Position [370, 170, 405, 270] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off Port { PortNumber 1 Name "Tau1" RTWStorageClass "Auto" DataLoggingNameMode "SignalName" } } Block { BlockType Product Name "Divide2" SID "2172" Ports [2, 1] Position [370, 275, 405, 375] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off Port { PortNumber 1 Name "Tau2" RTWStorageClass "Auto" DataLoggingNameMode "SignalName" } } Block { BlockType Product Name "Divide4" SID "2173" Ports [2, 1] Position [545, 145, 580, 245] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Divide5" SID "2174" Ports [2, 1] Position [545, 255, 580, 355] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product1" SID "2175" Ports [2, 1] Position [265, 225, 295, 265] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2176" Ports [2, 1] Position [845, 106, 875, 224] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2177" Ports [2, 1] Position [685, 274, 715, 316] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Subtract" SID "2178" Ports [2, 1] Position [685, 35, 710, 95] ShowName off Inputs "+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch1" SID "2179" Position [485, 27, 535, 133] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch2" SID "2180" Position [825, 277, 875, 383] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Switch Name "Switch4" SID "2181" Position [765, 82, 815, 188] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType Gain Name "Wn" SID "2182" Position [170, 227, 215, 263] Gain "(8*zeta_DLL)/(1+(4*(zeta_DLL)^2))" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Constant Name "d_pdi_code" SID "2183" Position [475, 264, 525, 296] Value "d_pdi_code" SampleTime "-1" } Block { BlockType Constant Name "k" SID "2184" Position [300, 179, 350, 211] Value "k_DLL" SampleTime "-1" } Block { BlockType Constant Name "lbw" SID "2185" Position [100, 229, 150, 261] Value "B_DLL" SampleTime "-1" } Block { BlockType Outport Name "code_nco" SID "2186" Position [1040, 203, 1070, 217] IconDisplay "Port number" } Line { SrcBlock "d_pdi_code" SrcPort 1 DstBlock "Divide5" DstPort 1 } Line { SrcBlock "Divide5" SrcPort 1 DstBlock "Product3" DstPort 2 } Line { SrcBlock "Add" SrcPort 1 Points [45, 0] Branch { DstBlock "code_nco" DstPort 1 } Branch { Points [0, 100] DstBlock "Delay" DstPort 1 } } Line { SrcBlock "Product2" SrcPort 1 DstBlock "Add" DstPort 1 } Line { SrcBlock "Divide4" SrcPort 1 DstBlock "Product2" DstPort 2 } Line { SrcBlock "code_error" SrcPort 1 Points [395, 0] Branch { Points [175, 0; 0, 30] Branch { Points [0, 235] DstBlock "Product3" DstPort 1 } Branch { DstBlock "Subtract" DstPort 1 } } Branch { Points [0, 25] DstBlock "Switch1" DstPort 1 } } Line { Name "Tau2" Labels [0, 0] SrcBlock "Divide2" SrcPort 1 Points [35, 0; 0, -155] DstBlock "Divide4" DstPort 1 } Line { SrcBlock "2*zeta" SrcPort 1 DstBlock "Divide2" DstPort 1 } Line { SrcBlock "Product1" SrcPort 1 DstBlock "Divide" DstPort 2 } Line { SrcBlock "k" SrcPort 1 DstBlock "Divide" DstPort 1 } Line { Name "Tau1" Labels [0, 0] SrcBlock "Divide" SrcPort 1 Points [55, 0] Branch { Points [0, 110] DstBlock "Divide5" DstPort 2 } Branch { DstBlock "Divide4" DstPort 2 } } Line { Labels [0, 0] SrcBlock "lbw" SrcPort 1 DstBlock "Wn" DstPort 1 } Line { SrcBlock "Wn" SrcPort 1 Points [15, 0] Branch { Points [10, 0] Branch { Points [0, 10] DstBlock "Product1" DstPort 2 } Branch { Points [0, -10] DstBlock "Product1" DstPort 1 } } Branch { Points [0, 105] DstBlock "Divide2" DstPort 2 } } Line { SrcBlock "Delay" SrcPort 1 Points [-30, 0] DstBlock "Add" DstPort 3 } Line { SrcBlock "Subtract" SrcPort 1 Points [20, 0; 0, 35] DstBlock "Switch4" DstPort 1 } Line { SrcBlock "Switch4" SrcPort 1 DstBlock "Product2" DstPort 1 } Line { SrcBlock "Product3" SrcPort 1 DstBlock "Switch2" DstPort 1 } Line { SrcBlock "Switch2" SrcPort 1 Points [20, 0; 0, -120] DstBlock "Add" DstPort 2 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Switch2" DstPort 3 } Line { SrcBlock "Delay2" SrcPort 1 DstBlock "Subtract" DstPort 2 } Line { SrcBlock "Constant3" SrcPort 1 DstBlock "Switch1" DstPort 3 } Line { SrcBlock "enable_tracking" SrcPort 1 Points [25, 0] Branch { Points [0, 0; 335, 0] Branch { Points [0, 55] DstBlock "Switch4" DstPort 2 } Branch { DstBlock "Switch1" DstPort 2 } } Branch { Points [0, 300; 660, 0; 0, -50] DstBlock "Switch2" DstPort 2 } } Line { SrcBlock "Constant" SrcPort 1 DstBlock "Switch4" DstPort 3 } Line { SrcBlock "Switch1" SrcPort 1 DstBlock "Delay2" DstPort 1 } Annotation { Position [998, 349] } Annotation { Position [983, 334] } } } Block { BlockType SubSystem Name "DLL discriminator" SID "2187" Ports [4, 1] Position [80, 13, 225, 152] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "DLL discriminator" Location [272, 238, 794, 581] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "vE" SID "2188" Position [20, 23, 50, 37] IconDisplay "Port number" } Block { BlockType Inport Name "E" SID "2189" Position [15, 108, 45, 122] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "2190" Position [15, 223, 45, 237] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "vL" SID "2191" Position [15, 293, 45, 307] Port "4" IconDisplay "Port number" } Block { BlockType Math Name "E power" SID "2192" Ports [1, 1] Position [95, 100, 125, 130] Operator "magnitude^2" } Block { BlockType Math Name "L power" SID "2193" Ports [1, 1] Position [90, 215, 120, 245] Operator "magnitude^2" } Block { BlockType Sqrt Name "Sqrt" SID "2194" Position [215, 65, 245, 95] ShowName off } Block { BlockType Sqrt Name "Sqrt1" SID "2195" Position [220, 250, 250, 280] ShowName off } Block { BlockType Sum Name "Sum" SID "2196" Ports [2, 1] Position [260, 145, 280, 165] ShowName off IconShape "round" Inputs "+|-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Sum Name "Sum1" SID "2197" Ports [2, 1] Position [320, 180, 340, 200] ShowName off IconShape "round" Inputs "+|+" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Sum Name "Sum2" SID "2198" Ports [2, 1] Position [160, 70, 180, 90] ShowName off IconShape "round" Inputs "+|+" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Sum Name "Sum3" SID "2199" Ports [2, 1] Position [155, 255, 175, 275] ShowName off IconShape "round" Inputs "+|+" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Product Name "vE Normalisation" SID "2200" Ports [2, 1] Position [390, 138, 435, 207] NamePlacement "alternate" ShowName off Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType Math Name "vE power" SID "2201" Ports [1, 1] Position [95, 15, 125, 45] Operator "magnitude^2" } Block { BlockType Math Name "vL power" SID "2202" Ports [1, 1] Position [90, 285, 120, 315] Operator "magnitude^2" } Block { BlockType Outport Name "code_error" SID "2203" Position [465, 168, 495, 182] IconDisplay "Port number" } Line { SrcBlock "vL power" SrcPort 1 Points [40, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Sum3" SrcPort 1 DstBlock "Sqrt1" DstPort 1 } Line { SrcBlock "L power" SrcPort 1 Points [40, 0] DstBlock "Sum3" DstPort 1 } Line { SrcBlock "E power" SrcPort 1 Points [40, 0] DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 DstBlock "Sqrt" DstPort 1 } Line { SrcBlock "vE Normalisation" SrcPort 1 DstBlock "code_error" DstPort 1 } Line { SrcBlock "Sum1" SrcPort 1 DstBlock "vE Normalisation" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "vE Normalisation" DstPort 1 } Line { SrcBlock "vL" SrcPort 1 DstBlock "vL power" DstPort 1 } Line { SrcBlock "vE" SrcPort 1 DstBlock "vE power" DstPort 1 } Line { SrcBlock "vE power" SrcPort 1 Points [40, 0] DstBlock "Sum2" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "L power" DstPort 1 } Line { SrcBlock "E" SrcPort 1 DstBlock "E power" DstPort 1 } Line { SrcBlock "Sqrt" SrcPort 1 Points [20, 0] Branch { Points [60, 0] DstBlock "Sum1" DstPort 1 } Branch { DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Sqrt1" SrcPort 1 Points [15, 0] Branch { Points [60, 0] DstBlock "Sum1" DstPort 2 } Branch { DstBlock "Sum" DstPort 2 } } } } Block { BlockType Outport Name "code_nco" SID "2204" Position [435, 128, 465, 142] IconDisplay "Port number" } Line { SrcBlock "vL" SrcPort 1 DstBlock "DLL discriminator" DstPort 4 } Line { SrcBlock "vE" SrcPort 1 DstBlock "DLL discriminator" DstPort 1 } Line { SrcBlock "E" SrcPort 1 DstBlock "DLL discriminator" DstPort 2 } Line { SrcBlock "L" SrcPort 1 DstBlock "DLL discriminator" DstPort 3 } Line { SrcBlock "DLL Filter" SrcPort 1 DstBlock "code_nco" DstPort 1 } Line { SrcBlock "DLL discriminator" SrcPort 1 DstBlock "DLL Filter" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 DstBlock "DLL Filter" DstPort 2 } } } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2205" Position [640, 215, 680, 255] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2206" Position [200, 140, 240, 180] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2207" Position [640, 620, 680, 660] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2208" Position [640, 540, 680, 580] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2209" Position [200, 215, 240, 255] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion6" SID "2210" Position [180, 530, 220, 570] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion7" SID "2211" Position [200, 65, 240, 105] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion8" SID "2212" Position [200, 290, 240, 330] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion9" SID "2213" Position [180, 580, 220, 620] ShowName off OutDataTypeStr "double" } Block { BlockType Mux Name "Mux" SID "2214" Ports [5, 1] Position [360, 359, 365, 491] ShowName off Inputs "5" DisplayOption "bar" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex" SID "2215" Ports [2, 1] Position [125, 121, 160, 194] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex1" SID "2216" Ports [2, 1] Position [125, 196, 160, 269] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex2" SID "2217" Ports [2, 1] Position [125, 511, 160, 584] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex3" SID "2218" Ports [2, 1] Position [125, 46, 160, 119] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex4" SID "2219" Ports [2, 1] Position [125, 271, 160, 344] ShowName off Input "Real and imag" } Block { BlockType Outport Name "control_id_" SID "2220" Position [725, 13, 755, 27] IconDisplay "Port number" } Block { BlockType Outport Name "code_nco" SID "2221" Position [725, 228, 755, 242] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "carr_nco" SID "2222" Position [725, 553, 755, 567] Port "3" IconDisplay "Port number" } Block { BlockType Outport Name "carrier_doppler_Hz" SID "2223" Position [725, 633, 755, 647] Port "4" IconDisplay "Port number" } Block { BlockType Outport Name "EPL Scope" SID "2224" Position [385, 418, 415, 432] Port "5" IconDisplay "Port number" } Line { SrcBlock "Data Type \nConversion8" SrcPort 1 Points [10, 0] Branch { DstBlock "Code Tracking\n(DLL)" DstPort 4 } Branch { Points [0, 165] DstBlock "Abs3" DstPort 1 } } Line { SrcBlock "Data Type \nConversion7" SrcPort 1 Points [50, 0] Branch { DstBlock "Code Tracking\n(DLL)" DstPort 1 } Branch { DstBlock "Abs4" DstPort 1 } } Line { SrcBlock "d_vL_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex4" DstPort 2 } Line { SrcBlock "d_vL_I" SrcPort 1 DstBlock "Real-Imag to\nComplex4" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex4" SrcPort 1 DstBlock "Data Type \nConversion8" DstPort 1 } Line { SrcBlock "d_vE_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex3" DstPort 2 } Line { SrcBlock "d_vE_I" SrcPort 1 DstBlock "Real-Imag to\nComplex3" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex3" SrcPort 1 DstBlock "Data Type \nConversion7" DstPort 1 } Line { SrcBlock "Mux" SrcPort 1 DstBlock "EPL Scope" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 Points [120, 0] Branch { DstBlock "Carrier Tracking (PLL)" DstPort 3 } Branch { Points [0, 60; 225, 0] DstBlock "Code Tracking\n(DLL)" DstPort 5 } } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "carrier_doppler_Hz" DstPort 1 } Line { SrcBlock "d_acq_carrier_doppler_Hz" SrcPort 1 DstBlock "Data Type \nConversion9" DstPort 1 } Line { SrcBlock "Data Type \nConversion6" SrcPort 1 Points [5, 0] Branch { DstBlock "Carrier Tracking (PLL)" DstPort 1 } Branch { Points [0, 0; 0, -125] DstBlock "Abs1" DstPort 1 } } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 Points [20, 0] Branch { Points [0, 215] DstBlock "Abs" DstPort 1 } Branch { DstBlock "Code Tracking\n(DLL)" DstPort 3 } } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 Points [40, 0] Branch { Points [0, 240] DstBlock "Abs2" DstPort 1 } Branch { DstBlock "Code Tracking\n(DLL)" DstPort 2 } } Line { SrcBlock "d_P_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex2" DstPort 2 } Line { SrcBlock "d_P_I" SrcPort 1 DstBlock "Real-Imag to\nComplex2" DstPort 1 } Line { SrcBlock "d_L_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex1" DstPort 2 } Line { SrcBlock "d_L_I" SrcPort 1 DstBlock "Real-Imag to\nComplex1" DstPort 1 } Line { SrcBlock "control_id" SrcPort 1 DstBlock "control_id_" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "carr_nco" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "code_nco" DstPort 1 } Line { SrcBlock "d_E_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex" DstPort 2 } Line { SrcBlock "d_E_I" SrcPort 1 DstBlock "Real-Imag to\nComplex" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex2" SrcPort 1 DstBlock "Data Type \nConversion6" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex1" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Carrier Tracking (PLL)" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "Code Tracking\n(DLL)" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "Carrier Tracking (PLL)" SrcPort 2 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "Abs4" SrcPort 1 DstBlock "Mux" DstPort 1 } Line { SrcBlock "Abs2" SrcPort 1 DstBlock "Mux" DstPort 2 } Line { SrcBlock "Abs1" SrcPort 1 DstBlock "Mux" DstPort 3 } Line { SrcBlock "Abs" SrcPort 1 DstBlock "Mux" DstPort 4 } Line { SrcBlock "Abs3" SrcPort 1 DstBlock "Mux" DstPort 5 } Line { SrcBlock "Data Type \nConversion9" SrcPort 1 DstBlock "Carrier Tracking (PLL)" DstPort 2 } } } Block { BlockType SubSystem Name "gnss_sdr_galileo_e1_tcp_connector_tracking_rx" SID "2088" Ports [0, 13] Position [25, 19, 205, 391] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_galileo_e1_tcp_connector_tracking_rx" Location [2, 82, 1670, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "41" Block { BlockType Reference Name "Multiport\nSelector" SID "2225" Ports [1, 52] Position [180, 19, 355, 2201] ShowName off LibraryVersion "1.462" SourceBlock "dspindex/Multiport\nSelector" SourceType "Multiport Selector" rowsOrCols "Rows" idxCellArray "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33," "34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52}" idxErrMode "Clip Index" } Block { BlockType Reference Name "RX" SID "2226" Ports [0, 1] Position [15, 1046, 150, 1164] LibraryVersion "1.84" DialogController "instrumentcreatedialog" DialogControllerArgs "DataTag4" SourceBlock "instrumentlib/TCP//IP Receive" SourceType "TCP/IP Receive" Host "84.88.61.86" Port "2070" DataSize "52" EnableBlockingMode on Timeout "5" SampleTime "-1" DataType "uint8" ByteOrder "BigEndian" } Block { BlockType SubSystem Name "Subsystem" SID "2227" Ports [4, 1] Position [525, 536, 630, 704] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2228" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2229" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2230" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2231" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2232" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2233" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2234" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2235" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2236" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2237" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2238" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2239" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2240" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2241" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2242" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2243" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2244" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2245" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2246" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2247" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2248" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2249" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2250" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2251" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2252" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2253" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2254" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2255" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2256" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2257" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2258" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2259" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2260" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2261" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2262" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2263" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2264" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2265" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2266" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2267" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2268" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2269" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2270" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2271" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2272" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2273" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2274" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2275" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2276" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2277" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2278" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2279" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2280" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2281" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2282" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2283" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2284" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2285" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2286" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2287" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2288" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2289" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2290" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2291" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2292" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2293" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2294" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2295" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2296" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2297" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2298" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2299" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2300" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2301" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2302" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2303" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2304" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2305" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2306" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2307" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2308" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2309" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2310" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2311" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2312" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2313" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2314" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2315" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2316" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2317" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2318" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "2319" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "2320" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "2321" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "2322" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "2323" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "2324" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "2325" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "2326" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "2327" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "2328" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "2329" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "2330" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "2331" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "2332" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "2333" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "2334" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "2335" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "2336" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "2337" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "2338" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "2339" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "2340" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "2341" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "2342" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "2343" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "2344" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "2345" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "2346" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "2347" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "2348" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "2349" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "2350" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "2351" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "2352" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "2353" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "2354" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "2355" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "2356" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "2357" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "2358" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "2359" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "2360" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "2361" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "2362" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "2363" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "2364" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "2365" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "2366" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "2367" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "2368" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2369" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "2370" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "2371" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "2372" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "2373" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "2374" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "2375" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "2376" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "2377" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "2378" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "2379" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "2380" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "2381" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "2382" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "2383" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "2384" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "2385" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "2386" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "2387" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "2388" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "2389" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "2390" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "2391" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "2392" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "2393" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "2394" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "2395" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "2396" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "2397" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "2398" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "2399" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "2400" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "2401" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "2402" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "2403" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "2404" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "2405" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "2406" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "2407" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "2408" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2409" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2410" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2411" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2412" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2413" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2414" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2415" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2416" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2417" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2418" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2419" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2420" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2421" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2422" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2423" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2424" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2425" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2426" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2427" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2428" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2429" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2430" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2431" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2432" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2433" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2434" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2435" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2436" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2437" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2438" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2439" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2440" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2441" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2442" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2443" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2444" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2445" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2446" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "2447" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2448" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2449" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2450" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2451" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_E_I" SID "2452" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_E_I" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem1" SID "2453" Ports [4, 1] Position [525, 701, 630, 869] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem1" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2454" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2455" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2456" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2457" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2458" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2459" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2460" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2461" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2462" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2463" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2464" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2465" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2466" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2467" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2468" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2469" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2470" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2471" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2472" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2473" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2474" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2475" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2476" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2477" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2478" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2479" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2480" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2481" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2482" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2483" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2484" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2485" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2486" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2487" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2488" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2489" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2490" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2491" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2492" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2493" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2494" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2495" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2496" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2497" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2498" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2499" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2500" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2501" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2502" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2503" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2504" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2505" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2506" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2507" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2508" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2509" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2510" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2511" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2512" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2513" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2514" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2515" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2516" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2517" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2518" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2519" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2520" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2521" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2522" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2523" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2524" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2525" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2526" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2527" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2528" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2529" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2530" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2531" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2532" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2533" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2534" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2535" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2536" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2537" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2538" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2539" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2540" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2541" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2542" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2543" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2544" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "2545" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "2546" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "2547" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "2548" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "2549" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "2550" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "2551" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "2552" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "2553" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "2554" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "2555" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "2556" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "2557" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "2558" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "2559" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "2560" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "2561" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "2562" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "2563" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "2564" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "2565" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "2566" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "2567" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "2568" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "2569" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "2570" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "2571" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "2572" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "2573" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "2574" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "2575" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "2576" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "2577" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "2578" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "2579" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "2580" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "2581" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "2582" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "2583" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "2584" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "2585" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "2586" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "2587" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "2588" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "2589" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "2590" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "2591" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "2592" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "2593" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "2594" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2595" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "2596" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "2597" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "2598" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "2599" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "2600" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "2601" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "2602" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "2603" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "2604" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "2605" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "2606" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "2607" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "2608" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "2609" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "2610" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "2611" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "2612" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "2613" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "2614" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "2615" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "2616" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "2617" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "2618" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "2619" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "2620" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "2621" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "2622" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "2623" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "2624" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "2625" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "2626" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "2627" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "2628" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "2629" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "2630" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "2631" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "2632" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "2633" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "2634" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2635" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2636" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2637" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2638" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2639" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2640" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2641" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2642" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2643" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2644" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2645" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2646" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2647" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2648" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2649" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2650" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2651" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2652" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2653" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2654" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2655" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2656" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2657" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2658" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2659" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2660" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2661" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2662" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2663" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2664" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2665" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2666" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2667" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2668" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2669" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2670" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2671" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2672" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "2673" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2674" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2675" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2676" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2677" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_E_Q" SID "2678" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_E_Q" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem10" SID "2679" Ports [4, 1] Position [525, 371, 630, 539] ShowName off AncestorBlock "gnss_sdr_galileo_e1_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_galileo_e1_tcp_connector_" "tracking_rx/Subsystem1" LibraryVersion "*1.82" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem10" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "460" Block { BlockType Inport Name "In1" SID "2679:236" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2679:237" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2679:238" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2679:239" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2679:240" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2679:241" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2679:242" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2679:243" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2679:244" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2679:245" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2679:246" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2679:247" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2679:248" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2679:249" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2679:250" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2679:251" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2679:252" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2679:253" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2679:254" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2679:255" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2679:256" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2679:257" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2679:258" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2679:259" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2679:260" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2679:261" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2679:262" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2679:263" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2679:264" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2679:265" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2679:266" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2679:267" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2679:268" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2679:269" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2679:270" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2679:271" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2679:272" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2679:273" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2679:274" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2679:275" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2679:276" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2679:277" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2679:278" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2679:279" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2679:280" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2679:281" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2679:282" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2679:283" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2679:284" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2679:285" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2679:286" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2679:287" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2679:288" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2679:289" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2679:290" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2679:291" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2679:292" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2679:293" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2679:294" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2679:295" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2679:296" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2679:297" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2679:298" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2679:299" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2679:300" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2679:301" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2679:302" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2679:303" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2679:304" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2679:305" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2679:306" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2679:307" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2679:308" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2679:309" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2679:310" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2679:311" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2679:312" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2679:313" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2679:314" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2679:315" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2679:316" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2679:317" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2679:318" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2679:319" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2679:320" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2679:321" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2679:322" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2679:323" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2679:324" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2679:325" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2679:326" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "2679:327" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "2679:328" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "2679:329" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "2679:330" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "2679:331" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "2679:332" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "2679:333" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "2679:334" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "2679:335" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "2679:336" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "2679:337" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "2679:338" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "2679:339" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "2679:340" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "2679:341" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "2679:342" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "2679:343" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "2679:344" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "2679:345" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "2679:346" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "2679:347" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "2679:348" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "2679:349" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "2679:350" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "2679:351" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "2679:352" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "2679:353" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "2679:354" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "2679:355" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "2679:356" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "2679:357" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "2679:358" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "2679:359" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "2679:360" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "2679:361" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "2679:362" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "2679:363" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "2679:364" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "2679:365" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "2679:366" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "2679:367" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "2679:368" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "2679:369" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "2679:370" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "2679:371" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "2679:372" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "2679:373" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "2679:374" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "2679:375" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "2679:376" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2679:377" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "2679:378" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "2679:379" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "2679:380" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "2679:381" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "2679:382" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "2679:383" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "2679:384" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "2679:385" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "2679:386" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "2679:387" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "2679:388" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "2679:389" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "2679:390" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "2679:391" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "2679:392" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "2679:393" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "2679:394" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "2679:395" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "2679:396" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "2679:397" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "2679:398" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "2679:399" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "2679:400" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "2679:401" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "2679:402" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "2679:403" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "2679:404" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "2679:405" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "2679:406" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "2679:407" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "2679:408" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "2679:409" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "2679:410" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "2679:411" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "2679:412" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "2679:413" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "2679:414" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "2679:415" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "2679:416" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2679:417" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2679:418" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2679:419" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2679:420" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2679:421" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2679:422" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2679:423" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2679:424" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2679:425" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2679:426" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2679:427" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2679:428" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2679:429" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2679:430" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2679:431" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2679:432" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2679:433" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2679:434" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2679:435" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2679:436" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2679:437" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2679:438" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2679:439" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2679:440" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2679:441" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2679:442" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2679:443" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2679:444" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2679:445" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2679:446" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2679:447" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2679:448" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2679:449" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2679:450" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2679:451" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2679:452" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2679:453" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2679:454" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "2679:455" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2679:456" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2679:457" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2679:458" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2679:459" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_vE_Q" SID "2679:460" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_vE_Q" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem11" SID "2680" Ports [4, 1] Position [525, 1191, 630, 1359] ShowName off AncestorBlock "gnss_sdr_galileo_e1_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_galileo_e1_tcp_connector_" "tracking_rx/Subsystem2" LibraryVersion "*1.82" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem11" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "686" Block { BlockType Inport Name "In1" SID "2680:462" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2680:463" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2680:464" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2680:465" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2680:466" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2680:467" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2680:468" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2680:469" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2680:470" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2680:471" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2680:472" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2680:473" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2680:474" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2680:475" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2680:476" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2680:477" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2680:478" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2680:479" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2680:480" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2680:481" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2680:482" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2680:483" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2680:484" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2680:485" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2680:486" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2680:487" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2680:488" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2680:489" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2680:490" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2680:491" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2680:492" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2680:493" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2680:494" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2680:495" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2680:496" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2680:497" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2680:498" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2680:499" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2680:500" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2680:501" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2680:502" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2680:503" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2680:504" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2680:505" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2680:506" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2680:507" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2680:508" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2680:509" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2680:510" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2680:511" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2680:512" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2680:513" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2680:514" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2680:515" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2680:516" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2680:517" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2680:518" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2680:519" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2680:520" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2680:521" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2680:522" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2680:523" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2680:524" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2680:525" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2680:526" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2680:527" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2680:528" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2680:529" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2680:530" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2680:531" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2680:532" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2680:533" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2680:534" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2680:535" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2680:536" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2680:537" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2680:538" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2680:539" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2680:540" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2680:541" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2680:542" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2680:543" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2680:544" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2680:545" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2680:546" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2680:547" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2680:548" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2680:549" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2680:550" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2680:551" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2680:552" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "2680:553" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "2680:554" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "2680:555" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "2680:556" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "2680:557" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "2680:558" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "2680:559" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "2680:560" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "2680:561" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "2680:562" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "2680:563" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "2680:564" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "2680:565" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "2680:566" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "2680:567" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "2680:568" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "2680:569" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "2680:570" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "2680:571" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "2680:572" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "2680:573" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "2680:574" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "2680:575" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "2680:576" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "2680:577" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "2680:578" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "2680:579" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "2680:580" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "2680:581" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "2680:582" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "2680:583" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "2680:584" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "2680:585" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "2680:586" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "2680:587" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "2680:588" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "2680:589" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "2680:590" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "2680:591" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "2680:592" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "2680:593" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "2680:594" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "2680:595" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "2680:596" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "2680:597" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "2680:598" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "2680:599" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "2680:600" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "2680:601" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "2680:602" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2680:603" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "2680:604" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "2680:605" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "2680:606" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "2680:607" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "2680:608" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "2680:609" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "2680:610" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "2680:611" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "2680:612" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "2680:613" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "2680:614" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "2680:615" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "2680:616" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "2680:617" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "2680:618" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "2680:619" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "2680:620" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "2680:621" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "2680:622" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "2680:623" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "2680:624" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "2680:625" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "2680:626" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "2680:627" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "2680:628" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "2680:629" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "2680:630" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "2680:631" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "2680:632" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "2680:633" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "2680:634" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "2680:635" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "2680:636" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "2680:637" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "2680:638" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "2680:639" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "2680:640" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "2680:641" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "2680:642" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2680:643" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2680:644" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2680:645" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2680:646" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2680:647" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2680:648" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2680:649" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2680:650" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2680:651" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2680:652" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2680:653" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2680:654" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2680:655" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2680:656" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2680:657" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2680:658" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2680:659" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2680:660" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2680:661" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2680:662" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2680:663" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2680:664" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2680:665" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2680:666" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2680:667" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2680:668" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2680:669" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2680:670" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2680:671" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2680:672" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2680:673" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2680:674" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2680:675" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2680:676" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2680:677" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2680:678" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2680:679" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2680:680" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "2680:681" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2680:682" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2680:683" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2680:684" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2680:685" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_vL_I" SID "2680:686" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_vL_I" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem12" SID "2681" Ports [4, 1] Position [525, 1351, 630, 1519] ShowName off AncestorBlock "gnss_sdr_galileo_e1_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_galileo_e1_tcp_connector_" "tracking_rx/Subsystem3" LibraryVersion "*1.82" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem12" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "912" Block { BlockType Inport Name "In1" SID "2681:688" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2681:689" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2681:690" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2681:691" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2681:692" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2681:693" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2681:694" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2681:695" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2681:696" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2681:697" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2681:698" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2681:699" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2681:700" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2681:701" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2681:702" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2681:703" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2681:704" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2681:705" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2681:706" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2681:707" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2681:708" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2681:709" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2681:710" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2681:711" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2681:712" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2681:713" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2681:714" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2681:715" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2681:716" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2681:717" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2681:718" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2681:719" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2681:720" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2681:721" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2681:722" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2681:723" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2681:724" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2681:725" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2681:726" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2681:727" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2681:728" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2681:729" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2681:730" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2681:731" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2681:732" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2681:733" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2681:734" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2681:735" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2681:736" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2681:737" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2681:738" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2681:739" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2681:740" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2681:741" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2681:742" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2681:743" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2681:744" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2681:745" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2681:746" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2681:747" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2681:748" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2681:749" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2681:750" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2681:751" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2681:752" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2681:753" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2681:754" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2681:755" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2681:756" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2681:757" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2681:758" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2681:759" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2681:760" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2681:761" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2681:762" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2681:763" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2681:764" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2681:765" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2681:766" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2681:767" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2681:768" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2681:769" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2681:770" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2681:771" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2681:772" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2681:773" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2681:774" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2681:775" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2681:776" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2681:777" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2681:778" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "2681:779" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "2681:780" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "2681:781" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "2681:782" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "2681:783" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "2681:784" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "2681:785" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "2681:786" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "2681:787" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "2681:788" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "2681:789" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "2681:790" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "2681:791" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "2681:792" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "2681:793" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "2681:794" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "2681:795" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "2681:796" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "2681:797" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "2681:798" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "2681:799" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "2681:800" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "2681:801" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "2681:802" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "2681:803" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "2681:804" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "2681:805" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "2681:806" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "2681:807" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "2681:808" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "2681:809" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "2681:810" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "2681:811" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "2681:812" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "2681:813" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "2681:814" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "2681:815" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "2681:816" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "2681:817" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "2681:818" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "2681:819" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "2681:820" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "2681:821" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "2681:822" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "2681:823" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "2681:824" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "2681:825" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "2681:826" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "2681:827" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "2681:828" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2681:829" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "2681:830" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "2681:831" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "2681:832" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "2681:833" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "2681:834" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "2681:835" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "2681:836" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "2681:837" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "2681:838" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "2681:839" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "2681:840" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "2681:841" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "2681:842" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "2681:843" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "2681:844" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "2681:845" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "2681:846" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "2681:847" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "2681:848" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "2681:849" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "2681:850" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "2681:851" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "2681:852" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "2681:853" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "2681:854" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "2681:855" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "2681:856" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "2681:857" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "2681:858" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "2681:859" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "2681:860" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "2681:861" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "2681:862" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "2681:863" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "2681:864" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "2681:865" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "2681:866" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "2681:867" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "2681:868" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2681:869" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2681:870" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2681:871" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2681:872" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2681:873" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2681:874" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2681:875" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2681:876" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2681:877" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2681:878" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2681:879" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2681:880" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2681:881" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2681:882" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2681:883" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2681:884" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2681:885" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2681:886" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2681:887" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2681:888" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2681:889" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2681:890" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2681:891" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2681:892" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2681:893" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2681:894" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2681:895" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2681:896" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2681:897" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2681:898" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2681:899" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2681:900" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2681:901" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2681:902" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2681:903" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2681:904" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2681:905" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2681:906" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "2681:907" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2681:908" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2681:909" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2681:910" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2681:911" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_vL_Q" SID "2681:912" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_vL_Q" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem2" SID "2682" Ports [4, 1] Position [525, 866, 630, 1034] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem2" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2683" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2684" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2685" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2686" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2687" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2688" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2689" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2690" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2691" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2692" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2693" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2694" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2695" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2696" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2697" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2698" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2699" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2700" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2701" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2702" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2703" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2704" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2705" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2706" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2707" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2708" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2709" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2710" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2711" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2712" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2713" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2714" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2715" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2716" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2717" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2718" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2719" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2720" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2721" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2722" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2723" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2724" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2725" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2726" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2727" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2728" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2729" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2730" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2731" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2732" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2733" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2734" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2735" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2736" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2737" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2738" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2739" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2740" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2741" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2742" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2743" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2744" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2745" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2746" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2747" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2748" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2749" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2750" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2751" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2752" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2753" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2754" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2755" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2756" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2757" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2758" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2759" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2760" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2761" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2762" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2763" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2764" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2765" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2766" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2767" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2768" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2769" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2770" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2771" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2772" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2773" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "2774" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "2775" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "2776" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "2777" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "2778" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "2779" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "2780" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "2781" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "2782" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "2783" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "2784" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "2785" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "2786" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "2787" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "2788" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "2789" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "2790" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "2791" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "2792" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "2793" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "2794" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "2795" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "2796" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "2797" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "2798" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "2799" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "2800" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "2801" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "2802" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "2803" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "2804" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "2805" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "2806" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "2807" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "2808" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "2809" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "2810" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "2811" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "2812" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "2813" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "2814" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "2815" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "2816" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "2817" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "2818" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "2819" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "2820" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "2821" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "2822" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "2823" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2824" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "2825" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "2826" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "2827" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "2828" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "2829" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "2830" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "2831" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "2832" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "2833" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "2834" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "2835" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "2836" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "2837" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "2838" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "2839" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "2840" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "2841" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "2842" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "2843" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "2844" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "2845" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "2846" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "2847" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "2848" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "2849" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "2850" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "2851" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "2852" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "2853" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "2854" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "2855" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "2856" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "2857" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "2858" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "2859" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "2860" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "2861" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "2862" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "2863" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "2864" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2865" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2866" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2867" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2868" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2869" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2870" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2871" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2872" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2873" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2874" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2875" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2876" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2877" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2878" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2879" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2880" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2881" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2882" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2883" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2884" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2885" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2886" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2887" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2888" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2889" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2890" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2891" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2892" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2893" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2894" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2895" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2896" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2897" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2898" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2899" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2900" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2901" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "2902" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2903" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2904" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2905" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2906" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_L_I" SID "2907" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_L_I" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem3" SID "2908" Ports [4, 1] Position [525, 1026, 630, 1194] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem3" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2909" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2910" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2911" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2912" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "2913" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "2914" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "2915" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "2916" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "2917" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "2918" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2919" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2920" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "2921" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "2922" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "2923" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2924" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "2925" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "2926" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "2927" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "2928" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "2929" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "2930" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "2931" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "2932" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "2933" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "2934" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "2935" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "2936" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "2937" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "2938" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "2939" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "2940" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "2941" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "2942" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "2943" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "2944" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "2945" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "2946" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "2947" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "2948" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "2949" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "2950" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "2951" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "2952" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "2953" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "2954" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "2955" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "2956" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "2957" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "2958" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "2959" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "2960" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "2961" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "2962" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "2963" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "2964" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "2965" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "2966" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "2967" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "2968" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "2969" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "2970" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "2971" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "2972" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "2973" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "2974" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "2975" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "2976" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "2977" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "2978" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "2979" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "2980" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "2981" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "2982" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "2983" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "2984" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "2985" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "2986" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "2987" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "2988" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "2989" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "2990" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "2991" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "2992" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "2993" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "2994" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "2995" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "2996" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "2997" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "2998" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "2999" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "3000" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "3001" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "3002" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "3003" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "3004" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "3005" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "3006" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "3007" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "3008" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "3009" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "3010" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "3011" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "3012" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "3013" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "3014" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "3015" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "3016" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "3017" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "3018" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "3019" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "3020" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "3021" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "3022" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "3023" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "3024" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "3025" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "3026" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "3027" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "3028" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "3029" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "3030" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "3031" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "3032" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "3033" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "3034" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "3035" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "3036" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "3037" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "3038" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "3039" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "3040" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "3041" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "3042" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "3043" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "3044" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "3045" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "3046" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "3047" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "3048" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "3049" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3050" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "3051" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "3052" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "3053" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "3054" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "3055" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "3056" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "3057" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "3058" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "3059" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "3060" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "3061" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "3062" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "3063" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "3064" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "3065" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "3066" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "3067" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "3068" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "3069" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "3070" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "3071" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "3072" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "3073" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "3074" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "3075" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "3076" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "3077" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "3078" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "3079" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "3080" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "3081" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "3082" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "3083" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "3084" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "3085" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "3086" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "3087" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "3088" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "3089" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "3090" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "3091" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "3092" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "3093" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "3094" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "3095" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "3096" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "3097" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "3098" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "3099" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "3100" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "3101" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "3102" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3103" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "3104" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "3105" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "3106" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "3107" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "3108" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "3109" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "3110" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "3111" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "3112" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "3113" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "3114" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "3115" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "3116" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "3117" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "3118" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "3119" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "3120" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "3121" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "3122" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "3123" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "3124" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "3125" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "3126" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3127" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "3128" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3129" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "3130" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "3131" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3132" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_L_Q" SID "3133" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_L_Q" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem4" SID "3134" Ports [4, 1] Position [525, 1516, 630, 1684] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem4" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3135" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3136" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3137" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3138" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "3139" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3140" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "3141" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "3142" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "3143" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "3144" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3145" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3146" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3147" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3148" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "3149" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3150" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "3151" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "3152" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "3153" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "3154" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "3155" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "3156" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "3157" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "3158" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "3159" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "3160" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "3161" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "3162" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "3163" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3164" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "3165" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "3166" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "3167" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "3168" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "3169" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "3170" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "3171" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "3172" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "3173" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "3174" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "3175" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3176" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3177" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3178" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "3179" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "3180" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "3181" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "3182" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "3183" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "3184" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "3185" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "3186" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "3187" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "3188" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "3189" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "3190" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "3191" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "3192" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "3193" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "3194" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "3195" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "3196" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "3197" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "3198" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "3199" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "3200" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "3201" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "3202" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "3203" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "3204" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "3205" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "3206" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "3207" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "3208" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "3209" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "3210" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "3211" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "3212" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "3213" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "3214" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "3215" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "3216" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "3217" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "3218" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "3219" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "3220" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "3221" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "3222" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "3223" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "3224" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "3225" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "3226" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "3227" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "3228" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "3229" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "3230" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "3231" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "3232" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "3233" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "3234" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "3235" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "3236" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "3237" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "3238" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "3239" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "3240" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "3241" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "3242" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "3243" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "3244" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "3245" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "3246" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "3247" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "3248" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "3249" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "3250" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "3251" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "3252" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "3253" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "3254" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "3255" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "3256" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "3257" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "3258" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "3259" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "3260" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "3261" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "3262" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "3263" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "3264" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "3265" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "3266" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "3267" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "3268" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "3269" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "3270" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "3271" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "3272" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "3273" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "3274" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "3275" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3276" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "3277" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "3278" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "3279" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "3280" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "3281" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "3282" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "3283" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "3284" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "3285" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "3286" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "3287" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "3288" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "3289" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "3290" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "3291" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "3292" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "3293" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "3294" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "3295" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "3296" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "3297" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "3298" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "3299" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "3300" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "3301" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "3302" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "3303" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "3304" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "3305" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "3306" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "3307" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "3308" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "3309" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "3310" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "3311" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "3312" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "3313" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "3314" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "3315" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "3316" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "3317" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "3318" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "3319" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "3320" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "3321" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "3322" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "3323" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "3324" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "3325" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "3326" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "3327" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "3328" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3329" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "3330" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "3331" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "3332" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "3333" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "3334" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "3335" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "3336" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "3337" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "3338" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "3339" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "3340" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "3341" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "3342" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "3343" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "3344" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "3345" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "3346" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "3347" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "3348" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "3349" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "3350" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "3351" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "3352" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3353" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "3354" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3355" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "3356" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "3357" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3358" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_P_I" SID "3359" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_P_I" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem5" SID "3360" Ports [4, 1] Position [525, 1681, 630, 1839] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem5" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3361" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3362" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3363" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3364" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "3365" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3366" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "3367" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "3368" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "3369" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "3370" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3371" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3372" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3373" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3374" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "3375" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3376" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "3377" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "3378" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "3379" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "3380" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "3381" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "3382" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "3383" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "3384" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "3385" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "3386" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "3387" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "3388" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "3389" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3390" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "3391" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "3392" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "3393" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "3394" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "3395" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "3396" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "3397" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "3398" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "3399" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "3400" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "3401" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3402" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3403" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3404" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "3405" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "3406" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "3407" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "3408" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "3409" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "3410" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "3411" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "3412" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "3413" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "3414" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "3415" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "3416" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "3417" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "3418" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "3419" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "3420" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "3421" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "3422" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "3423" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "3424" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "3425" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "3426" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "3427" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "3428" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "3429" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "3430" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "3431" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "3432" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "3433" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "3434" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "3435" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "3436" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "3437" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "3438" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "3439" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "3440" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "3441" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "3442" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "3443" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "3444" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "3445" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "3446" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "3447" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "3448" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "3449" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "3450" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "3451" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "3452" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "3453" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "3454" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "3455" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "3456" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "3457" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "3458" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "3459" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "3460" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "3461" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "3462" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "3463" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "3464" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "3465" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "3466" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "3467" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "3468" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "3469" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "3470" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "3471" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "3472" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "3473" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "3474" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "3475" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "3476" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "3477" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "3478" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "3479" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "3480" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "3481" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "3482" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "3483" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "3484" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "3485" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "3486" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "3487" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "3488" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "3489" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "3490" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "3491" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "3492" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "3493" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "3494" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "3495" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "3496" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "3497" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "3498" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "3499" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "3500" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "3501" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3502" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "3503" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "3504" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "3505" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "3506" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "3507" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "3508" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "3509" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "3510" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "3511" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "3512" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "3513" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "3514" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "3515" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "3516" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "3517" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "3518" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "3519" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "3520" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "3521" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "3522" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "3523" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "3524" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "3525" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "3526" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "3527" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "3528" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "3529" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "3530" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "3531" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "3532" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "3533" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "3534" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "3535" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "3536" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "3537" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "3538" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "3539" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "3540" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "3541" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "3542" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "3543" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "3544" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "3545" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "3546" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "3547" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "3548" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "3549" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "3550" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "3551" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "3552" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "3553" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "3554" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3555" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "3556" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "3557" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "3558" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "3559" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "3560" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "3561" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "3562" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "3563" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "3564" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "3565" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "3566" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "3567" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "3568" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "3569" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "3570" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "3571" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "3572" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "3573" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "3574" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "3575" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "3576" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "3577" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "3578" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3579" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "3580" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3581" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "3582" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "3583" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3584" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_P_Q" SID "3585" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_P_Q" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem6" SID "3586" Ports [4, 1] Position [525, 1839, 630, 2001] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem6" Location [528, 347, 1055, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3587" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3588" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3589" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3590" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "3591" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3592" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "3593" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "3594" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "3595" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "3596" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3597" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3598" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3599" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3600" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "3601" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3602" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "3603" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "3604" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "3605" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "3606" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "3607" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "3608" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "3609" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "3610" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "3611" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "3612" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "3613" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "3614" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "3615" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3616" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "3617" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "3618" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "3619" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "3620" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "3621" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "3622" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "3623" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "3624" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "3625" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "3626" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "3627" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3628" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3629" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3630" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "3631" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "3632" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "3633" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "3634" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "3635" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "3636" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "3637" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "3638" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "3639" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "3640" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "3641" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "3642" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "3643" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "3644" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "3645" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "3646" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "3647" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "3648" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "3649" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "3650" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "3651" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "3652" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "3653" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "3654" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "3655" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "3656" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "3657" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "3658" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "3659" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "3660" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "3661" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "3662" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "3663" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "3664" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "3665" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "3666" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "3667" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "3668" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "3669" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "3670" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "3671" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "3672" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "3673" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "3674" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "3675" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "3676" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "3677" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "3678" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "3679" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "3680" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "3681" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "3682" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "3683" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "3684" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "3685" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "3686" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "3687" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "3688" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "3689" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "3690" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "3691" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "3692" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "3693" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "3694" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "3695" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "3696" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "3697" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "3698" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "3699" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "3700" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "3701" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "3702" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "3703" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "3704" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "3705" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "3706" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "3707" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "3708" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "3709" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "3710" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "3711" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "3712" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "3713" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "3714" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "3715" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "3716" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "3717" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "3718" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "3719" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "3720" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "3721" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "3722" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "3723" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "3724" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "3725" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "3726" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "3727" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3728" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "3729" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "3730" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "3731" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "3732" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "3733" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "3734" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "3735" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "3736" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "3737" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "3738" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "3739" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "3740" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "3741" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "3742" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "3743" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "3744" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "3745" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "3746" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "3747" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "3748" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "3749" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "3750" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "3751" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "3752" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "3753" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "3754" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "3755" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "3756" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "3757" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "3758" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "3759" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "3760" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "3761" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "3762" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "3763" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "3764" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "3765" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "3766" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "3767" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "3768" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "3769" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "3770" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "3771" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "3772" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "3773" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "3774" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "3775" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "3776" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "3777" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "3778" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "3779" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "3780" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3781" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "3782" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "3783" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "3784" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "3785" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "3786" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "3787" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "3788" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "3789" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "3790" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "3791" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "3792" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "3793" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "3794" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "3795" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "3796" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "3797" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "3798" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "3799" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "3800" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "3801" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "3802" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "3803" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "3804" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3805" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "3806" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "3807" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "3808" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "3809" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "3810" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_acq_carrier_doppler_Hz" SID "3811" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_acq_carrier_doppler_Hz" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem7" SID "3812" Ports [4, 1] Position [525, 2000, 630, 2160] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem7" Location [528, 347, 1038, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3813" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3814" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3815" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3816" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "3817" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3818" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "3819" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "3820" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "3821" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "3822" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3823" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3824" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "3825" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "3826" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "3827" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3828" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "3829" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "3830" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "3831" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "3832" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "3833" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "3834" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "3835" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "3836" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "3837" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "3838" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "3839" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "3840" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "3841" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3842" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "3843" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "3844" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "3845" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "3846" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "3847" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "3848" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "3849" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "3850" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "3851" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "3852" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "3853" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "3854" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "3855" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "3856" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "3857" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "3858" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "3859" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "3860" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "3861" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "3862" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "3863" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "3864" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "3865" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "3866" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "3867" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "3868" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "3869" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "3870" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "3871" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "3872" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "3873" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "3874" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "3875" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "3876" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "3877" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "3878" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "3879" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "3880" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "3881" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "3882" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "3883" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "3884" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "3885" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "3886" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "3887" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "3888" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "3889" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "3890" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "3891" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "3892" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "3893" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "3894" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "3895" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "3896" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "3897" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "3898" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "3899" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "3900" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "3901" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "3902" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "3903" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "3904" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "3905" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "3906" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "3907" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "3908" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "3909" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "3910" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "3911" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "3912" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "3913" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "3914" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "3915" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "3916" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "3917" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "3918" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "3919" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "3920" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "3921" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "3922" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "3923" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "3924" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "3925" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "3926" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "3927" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "3928" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "3929" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "3930" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "3931" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "3932" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "3933" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "3934" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "3935" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "3936" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "3937" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "3938" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "3939" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "3940" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "3941" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "3942" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "3943" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "3944" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "3945" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "3946" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "3947" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "3948" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "3949" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "3950" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "3951" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "3952" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "3953" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "3954" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "3955" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "3956" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "3957" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "3958" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "3959" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "3960" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "3961" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "3962" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "3963" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "3964" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "3965" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "3966" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "3967" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "3968" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "3969" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "3970" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "3971" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "3972" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "3973" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "3974" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "3975" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "3976" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "3977" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "3978" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "3979" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "3980" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "3981" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "3982" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "3983" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "3984" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "3985" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "3986" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "3987" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "3988" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "3989" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "3990" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "3991" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "3992" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "3993" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "3994" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "3995" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "3996" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "3997" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "3998" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "3999" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "4000" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "4001" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "4002" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "4003" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "4004" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "4005" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "4006" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "4007" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "4008" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "4009" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "4010" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "4011" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "4012" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "4013" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "4014" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "4015" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "4016" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "4017" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "4018" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "4019" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "4020" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "4021" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "4022" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "4023" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "4024" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "4025" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "4026" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "4027" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "4028" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "4029" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "4030" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "4031" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "4032" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "4033" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "4034" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "4035" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "4036" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "enable_tracking" SID "4037" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "enable_tracking" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem8" SID "4038" Ports [4, 1] Position [525, 56, 630, 214] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem8" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "4039" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "4040" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "4041" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "4042" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "4043" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "4044" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "4045" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "4046" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "4047" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "4048" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "4049" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "4050" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "4051" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "4052" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "4053" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "4054" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "4055" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "4056" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "4057" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "4058" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "4059" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "4060" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "4061" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "4062" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "4063" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "4064" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "4065" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "4066" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "4067" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "4068" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "4069" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "4070" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "4071" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "4072" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "4073" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "4074" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "4075" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "4076" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "4077" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "4078" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "4079" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "4080" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "4081" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "4082" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "4083" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "4084" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "4085" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "4086" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "4087" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "4088" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "4089" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "4090" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "4091" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "4092" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "4093" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "4094" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "4095" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "4096" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "4097" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "4098" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "4099" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "4100" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "4101" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "4102" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "4103" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "4104" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "4105" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "4106" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "4107" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "4108" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "4109" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "4110" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "4111" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "4112" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "4113" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "4114" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "4115" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "4116" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "4117" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "4118" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "4119" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "4120" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "4121" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "4122" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "4123" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "4124" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "4125" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "4126" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "4127" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "4128" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "4129" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "4130" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "4131" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "4132" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "4133" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "4134" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "4135" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "4136" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "4137" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "4138" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "4139" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "4140" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "4141" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "4142" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "4143" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "4144" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "4145" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "4146" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "4147" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "4148" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "4149" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "4150" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "4151" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "4152" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "4153" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "4154" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "4155" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "4156" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "4157" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "4158" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "4159" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "4160" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "4161" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "4162" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "4163" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "4164" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "4165" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "4166" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "4167" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "4168" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "4169" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "4170" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "4171" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "4172" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "4173" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "4174" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "4175" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "4176" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "4177" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "4178" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "4179" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "4180" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "4181" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "4182" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "4183" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "4184" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "4185" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "4186" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "4187" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "4188" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "4189" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "4190" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "4191" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "4192" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "4193" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "4194" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "4195" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "4196" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "4197" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "4198" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "4199" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "4200" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "4201" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "4202" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "4203" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "4204" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "4205" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "4206" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "4207" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "4208" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "4209" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "4210" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "4211" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "4212" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "4213" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "4214" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "4215" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "4216" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "4217" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "4218" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "4219" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "4220" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "4221" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "4222" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "4223" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "4224" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "4225" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "4226" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "4227" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "4228" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "4229" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "4230" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "4231" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "4232" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "4233" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "4234" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "4235" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "4236" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "4237" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "4238" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "4239" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "4240" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "4241" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "4242" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "4243" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "4244" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "4245" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "4246" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "4247" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "4248" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "4249" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "4250" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "4251" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "4252" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "4253" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "4254" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "4255" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "4256" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "4257" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "4258" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "4259" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "4260" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "4261" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "4262" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "control_id" SID "4263" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "control_id" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem9" SID "4264" Ports [4, 1] Position [525, 211, 630, 379] ShowName off AncestorBlock "gnss_sdr_galileo_e1_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_galileo_e1_tcp_connector_" "tracking_rx/Subsystem" LibraryVersion "*1.82" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem9" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "234" Block { BlockType Inport Name "In1" SID "4264:10" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "4264:11" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "4264:12" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "4264:13" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "4264:14" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "4264:15" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "4264:16" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "4264:17" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "4264:18" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "4264:19" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "4264:20" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "4264:21" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "4264:22" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "4264:23" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "4264:24" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "4264:25" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "4264:26" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "4264:27" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "4264:28" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "4264:29" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "4264:30" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "4264:31" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "4264:32" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "4264:33" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "4264:34" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "4264:35" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "4264:36" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "4264:37" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "4264:38" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "4264:39" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "4264:40" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "4264:41" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "4264:42" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "4264:43" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "4264:44" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "4264:45" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "4264:46" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "4264:47" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "4264:48" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "4264:49" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "4264:50" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "4264:51" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "4264:52" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "4264:53" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "4264:54" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "4264:55" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "4264:56" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "4264:57" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "4264:58" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "4264:59" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "4264:60" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "4264:61" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "4264:62" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "4264:63" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "4264:64" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "4264:65" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "4264:66" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "4264:67" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "4264:68" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "4264:69" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "4264:70" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "4264:71" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "4264:72" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "4264:73" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "4264:74" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "4264:75" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "4264:76" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "4264:77" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "4264:78" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "4264:79" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "4264:80" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "4264:81" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "4264:82" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "4264:83" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "4264:84" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "4264:85" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "4264:86" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "4264:87" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "4264:88" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "4264:89" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "4264:90" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "4264:91" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "4264:92" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "4264:93" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "4264:94" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "4264:95" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "4264:96" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "4264:97" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "4264:98" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "4264:99" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "4264:100" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.308" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "4264:101" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "4264:102" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "4264:103" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "4264:104" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "4264:105" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "4264:106" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "4264:107" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "4264:108" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "4264:109" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "4264:110" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "4264:111" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "4264:112" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "4264:113" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "4264:114" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "4264:115" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "4264:116" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "4264:117" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "4264:118" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "4264:119" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "4264:120" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "4264:121" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "4264:122" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "4264:123" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "4264:124" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "4264:125" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "4264:126" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "4264:127" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "4264:128" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "4264:129" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "4264:130" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "4264:131" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "4264:132" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "4264:133" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "4264:134" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "4264:135" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "4264:136" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "4264:137" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "4264:138" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "4264:139" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "4264:140" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "4264:141" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "4264:142" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "4264:143" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "4264:144" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "4264:145" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "4264:146" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "4264:147" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "4264:148" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "4264:149" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "4264:150" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "4264:151" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "4264:152" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "4264:153" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "4264:154" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "4264:155" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "4264:156" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "4264:157" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "4264:158" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "4264:159" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "4264:160" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "4264:161" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "4264:162" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "4264:163" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "4264:164" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "4264:165" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "4264:166" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "4264:167" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "4264:168" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "4264:169" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "4264:170" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "4264:171" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "4264:172" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "4264:173" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "4264:174" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "4264:175" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "4264:176" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "4264:177" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "4264:178" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "4264:179" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "4264:180" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "4264:181" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "4264:182" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "4264:183" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "4264:184" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "4264:185" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "4264:186" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "4264:187" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "4264:188" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "4264:189" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "4264:190" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "4264:191" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "4264:192" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "4264:193" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "4264:194" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "4264:195" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "4264:196" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "4264:197" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "4264:198" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "4264:199" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "4264:200" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "4264:201" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "4264:202" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "4264:203" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "4264:204" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "4264:205" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "4264:206" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "4264:207" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "4264:208" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "4264:209" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "4264:210" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "4264:211" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "4264:212" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "4264:213" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "4264:214" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "4264:215" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "4264:216" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "4264:217" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "4264:218" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "4264:219" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "4264:220" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "4264:221" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "4264:222" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "4264:223" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "4264:224" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "4264:225" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "4264:226" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "4264:227" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "4264:228" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "4264:229" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "4264:230" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "4264:231" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "4264:232" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "4264:233" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_vE_I" SID "4264:234" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_vE_I" DstPort 1 } } } Block { BlockType Outport Name "control_id" SID "4265" Position [685, 128, 715, 142] IconDisplay "Port number" } Block { BlockType Outport Name "d_vE_I" SID "4266" Position [690, 288, 720, 302] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "d_vE_Q" SID "4267" Position [690, 448, 720, 462] Port "3" IconDisplay "Port number" } Block { BlockType Outport Name "d_E_I" SID "4268" Position [690, 613, 720, 627] Port "4" IconDisplay "Port number" } Block { BlockType Outport Name "d_E_Q" SID "4269" Position [690, 778, 720, 792] Port "5" IconDisplay "Port number" } Block { BlockType Outport Name "d_L_I" SID "4270" Position [690, 943, 720, 957] Port "6" IconDisplay "Port number" } Block { BlockType Outport Name "d_L_Q" SID "4271" Position [690, 1103, 720, 1117] Port "7" IconDisplay "Port number" } Block { BlockType Outport Name "d_vL_I" SID "4272" Position [690, 1268, 720, 1282] Port "8" IconDisplay "Port number" } Block { BlockType Outport Name "d_vL_Q" SID "4273" Position [690, 1428, 720, 1442] Port "9" IconDisplay "Port number" } Block { BlockType Outport Name "d_P_I" SID "4274" Position [690, 1593, 720, 1607] Port "10" IconDisplay "Port number" } Block { BlockType Outport Name "d_P_Q" SID "4275" Position [690, 1753, 720, 1767] Port "11" IconDisplay "Port number" } Block { BlockType Outport Name "d_acq_carrier_doppler_Hz" SID "4276" Position [690, 1913, 720, 1927] Port "12" IconDisplay "Port number" } Block { BlockType Outport Name "enable_tracking" SID "4277" Position [690, 2073, 720, 2087] Port "13" IconDisplay "Port number" } Line { SrcBlock "Multiport\nSelector" SrcPort 52 Points [150, 0] DstBlock "Subsystem7" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 51 Points [150, 0] DstBlock "Subsystem7" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 50 Points [150, 0] DstBlock "Subsystem7" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 49 Points [150, 0] DstBlock "Subsystem7" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 48 Points [150, 0] DstBlock "Subsystem6" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 47 Points [150, 0] DstBlock "Subsystem6" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 46 Points [150, 0] DstBlock "Subsystem6" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 45 Points [150, 0] DstBlock "Subsystem6" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 44 Points [150, 0] DstBlock "Subsystem5" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 43 Points [150, 0] DstBlock "Subsystem5" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 42 Points [150, 0] DstBlock "Subsystem5" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 41 Points [150, 0] DstBlock "Subsystem5" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 40 Points [150, 0] DstBlock "Subsystem4" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 39 Points [150, 0] DstBlock "Subsystem4" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 38 Points [150, 0] DstBlock "Subsystem4" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 37 Points [150, 0] DstBlock "Subsystem4" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 36 Points [150, 0] DstBlock "Subsystem12" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 35 Points [150, 0] DstBlock "Subsystem12" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 34 Points [150, 0] DstBlock "Subsystem12" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 33 Points [150, 0] DstBlock "Subsystem12" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 32 Points [150, 0] DstBlock "Subsystem11" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 31 Points [150, 0] DstBlock "Subsystem11" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 30 Points [150, 0] DstBlock "Subsystem11" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 29 Points [150, 0] DstBlock "Subsystem11" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 28 DstBlock "Subsystem3" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 27 DstBlock "Subsystem3" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 26 DstBlock "Subsystem3" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 25 DstBlock "Subsystem3" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 24 DstBlock "Subsystem2" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 23 DstBlock "Subsystem2" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 22 DstBlock "Subsystem2" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 21 DstBlock "Subsystem2" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 20 Points [150, 0] DstBlock "Subsystem1" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 19 Points [150, 0] DstBlock "Subsystem1" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 18 Points [150, 0] DstBlock "Subsystem1" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 17 Points [150, 0] DstBlock "Subsystem1" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 16 Points [150, 0] DstBlock "Subsystem" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 15 Points [150, 0] DstBlock "Subsystem" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 14 Points [150, 0] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 13 Points [0, -10] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 12 Points [0, -15] DstBlock "Subsystem10" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 11 Points [150, 0] DstBlock "Subsystem10" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 10 Points [0, -15] DstBlock "Subsystem10" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 9 Points [0, -15] DstBlock "Subsystem10" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 8 Points [0, -15] DstBlock "Subsystem9" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 7 Points [0, -15] DstBlock "Subsystem9" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 6 Points [0, -15] DstBlock "Subsystem9" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 5 Points [0, -15] DstBlock "Subsystem9" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 4 Points [0, -15] DstBlock "Subsystem8" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 3 Points [0, -15] DstBlock "Subsystem8" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 2 Points [0, -15] DstBlock "Subsystem8" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 1 Points [0, -15] DstBlock "Subsystem8" DstPort 1 } Line { SrcBlock "Subsystem11" SrcPort 1 DstBlock "d_vL_I" DstPort 1 } Line { SrcBlock "Subsystem12" SrcPort 1 DstBlock "d_vL_Q" DstPort 1 } Line { SrcBlock "Subsystem9" SrcPort 1 DstBlock "d_vE_I" DstPort 1 } Line { SrcBlock "Subsystem10" SrcPort 1 DstBlock "d_vE_Q" DstPort 1 } Line { SrcBlock "Subsystem7" SrcPort 1 DstBlock "enable_tracking" DstPort 1 } Line { SrcBlock "Subsystem6" SrcPort 1 DstBlock "d_acq_carrier_doppler_Hz" DstPort 1 } Line { SrcBlock "Subsystem5" SrcPort 1 DstBlock "d_P_Q" DstPort 1 } Line { SrcBlock "Subsystem8" SrcPort 1 DstBlock "control_id" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 DstBlock "d_E_I" DstPort 1 } Line { SrcBlock "Subsystem1" SrcPort 1 DstBlock "d_E_Q" DstPort 1 } Line { SrcBlock "Subsystem2" SrcPort 1 DstBlock "d_L_I" DstPort 1 } Line { SrcBlock "Subsystem3" SrcPort 1 DstBlock "d_L_Q" DstPort 1 } Line { SrcBlock "Subsystem4" SrcPort 1 DstBlock "d_P_I" DstPort 1 } Line { SrcBlock "RX" SrcPort 1 Points [0, 5] DstBlock "Multiport\nSelector" DstPort 1 } Annotation { Position [285, 79] } } } Block { BlockType SubSystem Name "gnss_sdr_galileo_e1_tcp_connector_tracking_tx" SID "2090" Ports [4] Position [495, 20, 710, 315] ShowPortLabels "SignalName" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_galileo_e1_tcp_connector_tracking_tx" Location [1137, 408, 1445, 698] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "control_id" SID "2091" Position [30, 38, 60, 52] IconDisplay "Port number" } Block { BlockType Inport Name "code_nco" SID "2092" Position [30, 98, 60, 112] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "carr_nco" SID "2093" Position [30, 158, 60, 172] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "carrier_doppler_Hz" SID "2094" Position [30, 218, 60, 232] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "TX" SID "2096" Ports [1] Position [140, 77, 275, 193] LibraryVersion "1.84" DialogController "instrumentcreatedialog" DialogControllerArgs "DataTag5" SourceBlock "instrumentlib/TCP//IP Send" SourceType "TCP/IP Send" Host "84.88.61.86" Port "2070" EnableBlockingMode on Timeout "5" ByteOrder "LittleEndian" } Block { BlockType Concatenate Name "Vector\nConcatenate1" SID "2097" Ports [4, 1] Position [95, 12, 100, 258] BackgroundColor "black" ShowName off NumInputs "4" Mode "Vector" } Line { SrcBlock "carrier_doppler_Hz" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 4 } Line { SrcBlock "Vector\nConcatenate1" SrcPort 1 DstBlock "TX" DstPort 1 } Line { SrcBlock "control_id" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 1 } Line { SrcBlock "code_nco" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 2 } Line { SrcBlock "carr_nco" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 3 } } } } } } } MatData { NumRecords 6 DataRecord { Tag DataTag5 Data " %)30 . : 8 ( 0 % \" $ ! 0 . . 8 ( ! " " % \" $ ' 0 0 !P '1C<&EP. * * ------------------------------------------------------------------------- */ IMPORTANT: Please, to use this tracking check the configuration file called 'gnss-sdr_tcp_connector_tracking.conf'. There are two major changes: 1.- Choose the [GPS_L1_CA_TCP_CONNECTOR_Tracking] tracking algorithm. 2.- Choose a tcp port for channel 0 (e.g. Tracking.port_ch0=2060;) A) HOW TO add a block to the Simulink Library repository of your Matlab installation --------------------------------------------------------------------------------- (These steps should be followed only the first time) 1.- Copy the content of this folder to a folder accessible from Simulink. 2.- In the Matlab Command Window type: >> simulink; to open the Simulink Library Browser. 3.- Right-click on the Simulink/User-Defined Functions of the Simulink Library menu, and click on "Open User-Defined Functions library" (Window_1) 4.- Open the library model 'gnss_sdr_tcp_connector_tracking_lib.mdl' (Window_2) 5.- If this is not the first time there should be an existing 'gnss-sdr' block in the 'User-Defined Functions' window that should be deleted before drag and drop the new 'gnss_sdr' block (which includes 3 blocks: - 'gnss_sdr_tcp_connector_tracking_rx' block - 'gnss_sdr_tcp_connector_tracking' block - 'gnss_sdr_tcp_connector_tracking_tx' block) from Window_2 to Window_1. A new message should appear: "This library is locked. The action performed requires it to be unlocked". Then, click on the "Unlock" button (the block will be copied) and close Window_2. 6.- Right-click on the 'gnss-sdr' block and click on "Link Options --> Disable link", repeat the action but now clicking on "Link Options --> Break link". This action disables and breaks the link with the original library model. 7.- On Window_1 save the "simulink/User-Defined Functions" library. To do that go to "File > Save". Then, close Window_1. 8.- From "Simulink Library Browser" window, press F5 to refresh and generate the new Simulink Library repository (it may take a few seconds). This completes the installation of the custom Simulink block. B) HOW TO use the "gnss_sdr_tcp_connector_tracking_start.m" script: ---------------------------------------------------------------- ----------------------- ------------------ ----------------------- | | | | | | | gnss_sdr_tcp_ | | gnss_sdr_tcp_ | | gnss_sdr_tcp_ | | connector_tracking_ | --> | connector_ | --> | connector_tracking_ | | rx | | tracking | | tx | | | | | | | ----------------------- ------------------ ----------------------- The 'gnss_sdr_tcp_connector_tracking_start.m' is the script that builds and configures a simulink model for interacting with the GNSS-SDR platform through a TCP communication. 'User parameters' can be modified but, by default, these are the values assigned: %User parameters host = '84.88.61.86'; %Remote IP address (GNSS-SDR computer IP) port = 2070; %Remote port (GNSS-SDR computer port for Ch0) num_vars_rx = 9; %Number of variables expected from GNSS-SDR num_vars_tx = 4; %Number of variable to be transmitted to GNSS-SDR timeout = '40'; %Timeout in seconds 'host', 'port' and 'timeout' parameters configure both 'gnss_sdr_tcp_connector_tracking_rx' and 'gnss_sdr_tcp_connector_tracking_tx' blocks. The 'port' parameter sets the base port number for the first channel (ch0). Each of the subsequent channels increases their port by one unit (e.g. ch0_port=2070, ch1_port=2071,...). Also the name of the tracking block can be modified. It must match with the Simulink model name: %Name of the tracking block, it must match the Simulink model name tracking_block_name = 'gnss_sdr_tcp_connector_tracking'; To run the script just type in the Matlab Command window the following: >>gnss_sdr_tcp_connector_tracking_start(N); where N must match the number of channels configured in the GNSS-SDR platform. C) HOW TO replace the tracking block of the library ------------------------------------------------ 1.- Open the library model 'gnss_sdr_tcp_connector_tracking_lib.mdl' 2.- Unlock the library. Click on "Edit > Unlock Library". 3.- Open the "gnss-sdr" block and change the "gnss_sdr_tcp_connector_tracking" block by another one. If the name is different it must be updated in the "gnss_sdr_tcp_connector_parallel_tracking_start.m" code (see section B) 4.- Save the new library. 5.- Go to section A and follow the instructions. gnss-sdr-0.0.6/src/utils/simulink/Single Thread/gnss_sdr_tcp_connector_tracking_lib.mdl0000644000175000017500000452020612576764164030757 0ustar carlescarlesLibrary { Name "gnss_sdr_tcp_connector_tracking_lib" Version 7.6 MdlSubVersion 0 SavedCharacterEncoding "windows-1252" LibraryType "BlockLibrary" SaveDefaultBlockParams on ScopeRefreshTime 0.035000 OverrideScopeRefreshTime on DisableAllScopes off MaxMDLFileLineLength 120 Created "Thu Mar 08 11:41:48 2012" Creator "David Pubill" UpdateHistory "UpdateHistoryNever" ModifiedByFormat "%" LastModifiedBy "gnss" ModifiedDateFormat "%" LastModifiedDate "Wed Jun 27 13:07:39 2012" RTWModifiedTimeStamp 262702783 ModelVersionFormat "1.%" ConfigurationManager "None" SampleTimeColors off SampleTimeAnnotations off LibraryLinkDisplay "none" WideLines off ShowLineDimensions off ShowPortDataTypes off ShowLoopsOnError on IgnoreBidirectionalLines off ShowStorageClass off ShowTestPointIcons on ShowSignalResolutionIcons on ShowViewerIcons on SortedOrder off ExecutionContextIcon off ShowLinearizationAnnotations on BlockNameDataTip off BlockParametersDataTip off BlockDescriptionStringDataTip off ToolBar on StatusBar on BrowserShowLibraryLinks off BrowserLookUnderMasks off SimulationMode "normal" LinearizationMsg "none" Profile off ParamWorkspaceSource "MATLABWorkspace" RecordCoverage off CovSaveName "covdata" CovMetricSettings "dw" CovNameIncrementing off CovHtmlReporting on CovForceBlockReductionOff on covSaveCumulativeToWorkspaceVar on CovSaveSingleToWorkspaceVar on CovCumulativeReport off CovReportOnPause on CovModelRefEnable "Off" CovExternalEMLEnable off ExtModeBatchMode off ExtModeEnableFloating on ExtModeTrigType "manual" ExtModeTrigMode "normal" ExtModeTrigPort "1" ExtModeTrigElement "any" ExtModeTrigDuration 1000 ExtModeTrigDurationFloating "auto" ExtModeTrigHoldOff 0 ExtModeTrigDelay 0 ExtModeTrigDirection "rising" ExtModeTrigLevel 0 ExtModeArchiveMode "off" ExtModeAutoIncOneShot off ExtModeIncDirWhenArm off ExtModeAddSuffixToVar off ExtModeWriteAllDataToWs off ExtModeArmWhenConnect on ExtModeSkipDownloadWhenConnect off ExtModeLogAll on ExtModeAutoUpdateStatusClock on ShowModelReferenceBlockVersion off ShowModelReferenceBlockIO off Array { Type "Handle" Dimension 1 Simulink.ConfigSet { $ObjectID 1 Version "1.10.0" Array { Type "Handle" Dimension 9 Simulink.SolverCC { $ObjectID 2 Version "1.10.0" StartTime "0.0" StopTime "10.0" AbsTol "auto" FixedStep "auto" InitialStep "auto" MaxNumMinSteps "-1" MaxOrder 5 ZcThreshold "auto" ConsecutiveZCsStepRelTol "10*128*eps" MaxConsecutiveZCs "1000" ExtrapolationOrder 4 NumberNewtonIterations 1 MaxStep "auto" MinStep "auto" MaxConsecutiveMinStep "1" RelTol "1e-3" SolverMode "Auto" ConcurrentTasks off Solver "VariableStepDiscrete" SolverName "VariableStepDiscrete" SolverJacobianMethodControl "auto" ShapePreserveControl "DisableAll" ZeroCrossControl "UseLocalSettings" ZeroCrossAlgorithm "Nonadaptive" AlgebraicLoopSolver "TrustRegion" SolverResetMethod "Fast" PositivePriorityOrder off AutoInsertRateTranBlk off SampleTimeConstraint "Unconstrained" InsertRTBMode "Whenever possible" } Simulink.DataIOCC { $ObjectID 3 Version "1.10.0" Decimation "1" ExternalInput "[t, u]" FinalStateName "xFinal" InitialState "xInitial" LimitDataPoints on MaxDataPoints "1000" LoadExternalInput off LoadInitialState off SaveFinalState off SaveCompleteFinalSimState off SaveFormat "Array" SaveOutput on SaveState off SignalLogging on DSMLogging on InspectSignalLogs off SaveTime on ReturnWorkspaceOutputs off StateSaveName "xout" TimeSaveName "tout" OutputSaveName "yout" SignalLoggingName "logsout" DSMLoggingName "dsmout" OutputOption "RefineOutputTimes" OutputTimes "[]" ReturnWorkspaceOutputsName "out" Refine "1" } Simulink.OptimizationCC { $ObjectID 4 Version "1.10.0" Array { Type "Cell" Dimension 8 Cell "BooleansAsBitfields" Cell "PassReuseOutputArgsAs" Cell "PassReuseOutputArgsThreshold" Cell "ZeroExternalMemoryAtStartup" Cell "ZeroInternalMemoryAtStartup" Cell "OptimizeModelRefInitCode" Cell "NoFixptDivByZeroProtection" Cell "UseSpecifiedMinMax" PropName "DisabledProps" } BlockReduction on BooleanDataType on ConditionallyExecuteInputs on InlineParams off UseIntDivNetSlope off UseSpecifiedMinMax off InlineInvariantSignals off OptimizeBlockIOStorage on BufferReuse on EnhancedBackFolding off StrengthReduction off ExpressionFolding on BooleansAsBitfields off BitfieldContainerType "uint_T" EnableMemcpy on MemcpyThreshold 64 PassReuseOutputArgsAs "Structure reference" ExpressionDepthLimit 2147483647 FoldNonRolledExpr on LocalBlockOutputs on RollThreshold 5 SystemCodeInlineAuto off StateBitsets off DataBitsets off UseTempVars off ZeroExternalMemoryAtStartup on ZeroInternalMemoryAtStartup on InitFltsAndDblsToZero off NoFixptDivByZeroProtection off EfficientFloat2IntCast off EfficientMapNaN2IntZero on OptimizeModelRefInitCode off LifeSpan "inf" MaxStackSize "Inherit from target" BufferReusableBoundary on SimCompilerOptimization "Off" AccelVerboseBuild off } Simulink.DebuggingCC { $ObjectID 5 Version "1.10.0" RTPrefix "error" ConsistencyChecking "none" ArrayBoundsChecking "none" SignalInfNanChecking "none" SignalRangeChecking "none" ReadBeforeWriteMsg "UseLocalSettings" WriteAfterWriteMsg "UseLocalSettings" WriteAfterReadMsg "UseLocalSettings" AlgebraicLoopMsg "warning" ArtificialAlgebraicLoopMsg "warning" SaveWithDisabledLinksMsg "warning" SaveWithParameterizedLinksMsg "none" CheckSSInitialOutputMsg on UnderspecifiedInitializationDetection "Classic" MergeDetectMultiDrivingBlocksExec "none" CheckExecutionContextPreStartOutputMsg off CheckExecutionContextRuntimeOutputMsg off SignalResolutionControl "UseLocalSettings" BlockPriorityViolationMsg "warning" MinStepSizeMsg "warning" TimeAdjustmentMsg "none" MaxConsecutiveZCsMsg "error" MaskedZcDiagnostic "warning" IgnoredZcDiagnostic "warning" SolverPrmCheckMsg "warning" InheritedTsInSrcMsg "warning" DiscreteInheritContinuousMsg "warning" MultiTaskDSMMsg "error" MultiTaskCondExecSysMsg "error" MultiTaskRateTransMsg "error" SingleTaskRateTransMsg "none" TasksWithSamePriorityMsg "warning" SigSpecEnsureSampleTimeMsg "warning" CheckMatrixSingularityMsg "none" IntegerOverflowMsg "warning" Int32ToFloatConvMsg "warning" ParameterDowncastMsg "error" ParameterOverflowMsg "error" ParameterUnderflowMsg "none" ParameterPrecisionLossMsg "warning" ParameterTunabilityLossMsg "warning" FixptConstUnderflowMsg "none" FixptConstOverflowMsg "none" FixptConstPrecisionLossMsg "none" UnderSpecifiedDataTypeMsg "none" UnnecessaryDatatypeConvMsg "none" VectorMatrixConversionMsg "none" InvalidFcnCallConnMsg "error" FcnCallInpInsideContextMsg "Use local settings" SignalLabelMismatchMsg "none" UnconnectedInputMsg "warning" UnconnectedOutputMsg "warning" UnconnectedLineMsg "warning" SFcnCompatibilityMsg "none" UniqueDataStoreMsg "none" BusObjectLabelMismatch "warning" RootOutportRequireBusObject "warning" AssertControl "UseLocalSettings" EnableOverflowDetection off ModelReferenceIOMsg "none" ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" ModelReferenceVersionMismatchMessage "none" ModelReferenceIOMismatchMessage "none" ModelReferenceCSMismatchMessage "none" UnknownTsInhSupMsg "warning" ModelReferenceDataLoggingMessage "warning" ModelReferenceSymbolNameMessage "warning" ModelReferenceExtraNoncontSigs "error" StateNameClashWarn "warning" SimStateInterfaceChecksumMismatchMsg "warning" InitInArrayFormatMsg "warning" StrictBusMsg "ErrorLevel1" BusNameAdapt "WarnAndRepair" NonBusSignalsTreatedAsBus "none" LoggingUnavailableSignals "error" BlockIODiagnostic "none" SFUnusedDataAndEventsDiag "warning" SFUnexpectedBacktrackingDiag "warning" SFInvalidInputDataAccessInChartInitDiag "warning" SFNoUnconditionalDefaultTransitionDiag "warning" SFTransitionOutsideNaturalParentDiag "warning" } Simulink.HardwareCC { $ObjectID 6 Version "1.10.0" ProdBitPerChar 8 ProdBitPerShort 16 ProdBitPerInt 32 ProdBitPerLong 32 ProdBitPerFloat 32 ProdBitPerDouble 64 ProdBitPerPointer 32 ProdLargestAtomicInteger "Char" ProdLargestAtomicFloat "None" ProdIntDivRoundTo "Undefined" ProdEndianess "Unspecified" ProdWordSize 32 ProdShiftRightIntArith on ProdHWDeviceType "32-bit Generic" TargetBitPerChar 8 TargetBitPerShort 16 TargetBitPerInt 32 TargetBitPerLong 32 TargetBitPerFloat 32 TargetBitPerDouble 64 TargetBitPerPointer 32 TargetLargestAtomicInteger "Char" TargetLargestAtomicFloat "None" TargetShiftRightIntArith on TargetIntDivRoundTo "Undefined" TargetEndianess "Unspecified" TargetWordSize 32 TargetTypeEmulationWarnSuppressLevel 0 TargetPreprocMaxBitsSint 32 TargetPreprocMaxBitsUint 32 TargetHWDeviceType "Specified" TargetUnknown off ProdEqTarget on } Simulink.ModelReferenceCC { $ObjectID 7 Version "1.10.0" UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" CheckModelReferenceTargetMessage "error" EnableParallelModelReferenceBuilds off ParallelModelReferenceErrorOnInvalidPool on ParallelModelReferenceMATLABWorkerInit "None" ModelReferenceNumInstancesAllowed "Multi" PropagateVarSize "Infer from blocks in model" ModelReferencePassRootInputsByReference on ModelReferenceMinAlgLoopOccurrences off PropagateSignalLabelsOutOfModel off SupportModelReferenceSimTargetCustomCode off } Simulink.SFSimCC { $ObjectID 8 Version "1.10.0" SFSimEnableDebug on SFSimOverflowDetection on SFSimEcho on SimBlas on SimCtrlC on SimExtrinsic on SimIntegrity on SimUseLocalCustomCode off SimParseCustomCode on SimBuildMode "sf_incremental_build" } Simulink.RTWCC { $BackupClass "Simulink.RTWCC" $ObjectID 9 Version "1.10.0" Array { Type "Cell" Dimension 7 Cell "IncludeHyperlinkInReport" Cell "GenerateTraceInfo" Cell "GenerateTraceReport" Cell "GenerateTraceReportSl" Cell "GenerateTraceReportSf" Cell "GenerateTraceReportEml" Cell "GenerateSLWebview" PropName "DisabledProps" } SystemTargetFile "grt.tlc" GenCodeOnly off MakeCommand "make_rtw" GenerateMakefile on TemplateMakefile "grt_default_tmf" GenerateReport off SaveLog off RTWVerbose on RetainRTWFile off ProfileTLC off TLCDebug off TLCCoverage off TLCAssert off ProcessScriptMode "Default" ConfigurationMode "Optimized" ConfigAtBuild off RTWUseLocalCustomCode off RTWUseSimCustomCode off IncludeHyperlinkInReport off LaunchReport off TargetLang "C" IncludeBusHierarchyInRTWFileBlockHierarchyMap off IncludeERTFirstTime off GenerateTraceInfo off GenerateTraceReport off GenerateTraceReportSl off GenerateTraceReportSf off GenerateTraceReportEml off GenerateCodeInfo off GenerateSLWebview off RTWCompilerOptimization "Off" CheckMdlBeforeBuild "Off" CustomRebuildMode "OnUpdate" Array { Type "Handle" Dimension 2 Simulink.CodeAppCC { $ObjectID 10 Version "1.10.0" Array { Type "Cell" Dimension 21 Cell "IgnoreCustomStorageClasses" Cell "IgnoreTestpoints" Cell "InsertBlockDesc" Cell "InsertPolySpaceComments" Cell "SFDataObjDesc" Cell "MATLABFcnDesc" Cell "SimulinkDataObjDesc" Cell "DefineNamingRule" Cell "SignalNamingRule" Cell "ParamNamingRule" Cell "InlinedPrmAccess" Cell "CustomSymbolStr" Cell "CustomSymbolStrGlobalVar" Cell "CustomSymbolStrType" Cell "CustomSymbolStrField" Cell "CustomSymbolStrFcn" Cell "CustomSymbolStrFcnArg" Cell "CustomSymbolStrBlkIO" Cell "CustomSymbolStrTmpVar" Cell "CustomSymbolStrMacro" Cell "ReqsInCode" PropName "DisabledProps" } ForceParamTrailComments off GenerateComments on IgnoreCustomStorageClasses on IgnoreTestpoints off IncHierarchyInIds off MaxIdLength 31 PreserveName off PreserveNameWithParent off ShowEliminatedStatement off IncAutoGenComments off SimulinkDataObjDesc off SFDataObjDesc off MATLABFcnDesc off IncDataTypeInIds off MangleLength 1 CustomSymbolStrGlobalVar "$R$N$M" CustomSymbolStrType "$N$R$M" CustomSymbolStrField "$N$M" CustomSymbolStrFcn "$R$N$M$F" CustomSymbolStrFcnArg "rt$I$N$M" CustomSymbolStrBlkIO "rtb_$N$M" CustomSymbolStrTmpVar "$N$M" CustomSymbolStrMacro "$R$N$M" DefineNamingRule "None" ParamNamingRule "None" SignalNamingRule "None" InsertBlockDesc off InsertPolySpaceComments off SimulinkBlockComments on MATLABSourceComments off EnableCustomComments off InlinedPrmAccess "Literals" ReqsInCode off UseSimReservedNames off } Simulink.GRTTargetCC { $BackupClass "Simulink.TargetCC" $ObjectID 11 Version "1.10.0" Array { Type "Cell" Dimension 16 Cell "GeneratePreprocessorConditionals" Cell "IncludeMdlTerminateFcn" Cell "CombineOutputUpdateFcns" Cell "SuppressErrorStatus" Cell "ERTCustomFileBanners" Cell "GenerateSampleERTMain" Cell "GenerateTestInterfaces" Cell "ModelStepFunctionPrototypeControlCompliant" Cell "CPPClassGenCompliant" Cell "MultiInstanceERTCode" Cell "PurelyIntegerCode" Cell "SupportComplex" Cell "SupportAbsoluteTime" Cell "SupportContinuousTime" Cell "SupportNonInlinedSFcns" Cell "PortableWordSizes" PropName "DisabledProps" } TargetFcnLib "ansi_tfl_table_tmw.mat" TargetLibSuffix "" TargetPreCompLibLocation "" TargetFunctionLibrary "ANSI_C" UtilityFuncGeneration "Auto" ERTMultiwordTypeDef "System defined" ERTCodeCoverageTool "None" ERTMultiwordLength 256 MultiwordLength 2048 GenerateFullHeader on GenerateSampleERTMain off GenerateTestInterfaces off IsPILTarget off ModelReferenceCompliant on ParMdlRefBuildCompliant on CompOptLevelCompliant on IncludeMdlTerminateFcn on GeneratePreprocessorConditionals "Disable all" CombineOutputUpdateFcns off CombineSignalStateStructs off SuppressErrorStatus off ERTFirstTimeCompliant off IncludeFileDelimiter "Auto" ERTCustomFileBanners off SupportAbsoluteTime on LogVarNameModifier "rt_" MatFileLogging on MultiInstanceERTCode off SupportNonFinite on SupportComplex on PurelyIntegerCode off SupportContinuousTime on SupportNonInlinedSFcns on SupportVariableSizeSignals off EnableShiftOperators on ParenthesesLevel "Nominal" PortableWordSizes off ModelStepFunctionPrototypeControlCompliant off CPPClassGenCompliant off AutosarCompliant off UseMalloc off ExtMode off ExtModeStaticAlloc off ExtModeTesting off ExtModeStaticAllocSize 1000000 ExtModeTransport 0 ExtModeMexFile "ext_comm" ExtModeIntrfLevel "Level1" RTWCAPISignals off RTWCAPIParams off RTWCAPIStates off GenerateASAP2 off } PropName "Components" } } hdlcoderui.hdlcc { $ObjectID 12 Version "1.10.0" Description "HDL Coder custom configuration component" Name "HDL Coder" Array { Type "Cell" Dimension 1 Cell "" PropName "HDLConfigFile" } HDLCActiveTab "0" } PropName "Components" } Name "Configuration" CurrentDlgPage "Solver" ConfigPrmDlgPosition " [ 400, 210, 1280, 840 ] " } PropName "ConfigurationSets" } BlockDefaults { ForegroundColor "black" BackgroundColor "white" DropShadow off NamePlacement "normal" FontName "Helvetica" FontSize 10 FontWeight "normal" FontAngle "normal" ShowName on BlockRotation 0 BlockMirror off } AnnotationDefaults { HorizontalAlignment "center" VerticalAlignment "middle" ForegroundColor "black" BackgroundColor "white" DropShadow off FontName "Helvetica" FontSize 10 FontWeight "normal" FontAngle "normal" UseDisplayTextAsClickCallback off } LineDefaults { FontName "Helvetica" FontSize 9 FontWeight "normal" FontAngle "normal" } BlockParameterDefaults { Block { BlockType Abs ZeroCross on SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on } Block { BlockType ComplexToRealImag Output "Real and imag" SampleTime "-1" } Block { BlockType Concatenate NumInputs "2" ConcatenateDimension "1" } Block { BlockType Constant Value "1" VectorParams1D on SamplingMode "Sample based" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit from 'Constant value'" LockScale off SampleTime "inf" FramePeriod "inf" PreserveConstantTs off } Block { BlockType DataTypeConversion OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit via back propagation" LockScale off ConvertRealWorld "Real World Value (RWV)" RndMeth "Zero" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Display Format "short" Decimation "10" Floating off SampleTime "-1" } Block { BlockType Fcn Expr "sin(u[1])" SampleTime "-1" } Block { BlockType Gain Gain "1" Multiplication "Element-wise(K.*u)" ParamMin "[]" ParamMax "[]" ParamDataTypeStr "Inherit: Same as input" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Inport Port "1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: auto" LockScale off BusOutputAsStruct off PortDimensions "-1" VarSizeSig "Inherit" SampleTime "-1" SignalType "auto" SamplingMode "auto" LatchByDelayingOutsideSignal off LatchInputForFeedbackSignals off Interpolate on } Block { BlockType Math Operator "exp" OutputSignalType "auto" SampleTime "-1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on IntermediateResultsDataTypeStr "Inherit: Inherit via internal rule" AlgorithmType "Newton-Raphson" Iterations "3" } Block { BlockType Mux Inputs "4" DisplayOption "none" UseBusObject off BusObject "BusObject" NonVirtualBus off } Block { BlockType Outport Port "1" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: auto" LockScale off BusOutputAsStruct off PortDimensions "-1" VarSizeSig "Inherit" SampleTime "-1" SignalType "auto" SamplingMode "auto" SourceOfInitialOutputValue "Dialog" OutputWhenDisabled "held" InitialOutput "[]" } Block { BlockType Product Inputs "2" Multiplication "Element-wise(.*)" CollapseMode "All dimensions" CollapseDim "1" InputSameDT on OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Zero" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType RealImagToComplex Input "Real and imag" ConstantPart "0" SampleTime "-1" } Block { BlockType SubSystem ShowPortLabels "FromPortIcon" Permissions "ReadWrite" PermitHierarchicalResolution "All" TreatAsAtomicUnit off CheckFcnCallInpInsideContextMsg off SystemSampleTime "-1" RTWFcnNameOpts "Auto" RTWFileNameOpts "Auto" RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" SimViewingDevice off DataTypeOverride "UseLocalSettings" DataTypeOverrideAppliesTo "AllNumericTypes" MinMaxOverflowLogging "UseLocalSettings" Variant off GeneratePreprocessorConditionals off } Block { BlockType Sum IconShape "rectangular" Inputs "++" CollapseMode "All dimensions" CollapseDim "1" InputSameDT on AccumDataTypeStr "Inherit: Inherit via internal rule" OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Same as first input" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on SampleTime "-1" } Block { BlockType Switch Criteria "u2 >= Threshold" Threshold "0" InputSameDT on OutMin "[]" OutMax "[]" OutDataTypeStr "Inherit: Inherit via internal rule" LockScale off RndMeth "Floor" SaturateOnIntegerOverflow on ZeroCross on SampleTime "-1" AllowDiffInputSizes off } Block { BlockType Terminator } Block { BlockType Trigonometry Operator "sin" ApproximationMethod "None" NumberOfIterations "11" OutputSignalType "auto" SampleTime "-1" } Block { BlockType UnitDelay X0 "0" InputProcessing "Inherited" SampleTime "1" StateMustResolveToSignalObject off RTWStateStorageClass "Auto" } } System { Name "gnss_sdr_tcp_connector_tracking_lib" Location [532, 307, 1230, 742] Open on ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" ReportName "simulink-default.rpt" SIDHighWatermark "2078" Block { BlockType Reference Name "Model Info" SID "2" Ports [] Position [15, 15, 436, 409] ForegroundColor "green" ShowName off LibraryVersion "1.233" FontName "Arial" SourceBlock "simulink/Model-Wide\nUtilities/Model Info" SourceType "CMBlock" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off InitialBlockCM "None" BlockCM "None" Frame "on" DisplayStringWithTags "/*! \n * \\file gnss_sdr_tcp_connector_tracking_lib.mdl\n * \\brief gnss_sdr_tcp_con" "nector_tracking Simulink library model. For \n * further information, please check the README_gnss_sdr_tcp_con" "nector_tracking.txt\n * file or the README_gnss_sdr_tcp_connector_parallel_tracking.txt\n * file for parallel " "computing execution.\n *\n * \\author David Pubill, 2012. dpubill(at)cttc.es\n * ----------------------------" "---------------------------------------------\n *\n * Copyright (C) 2010-2012 (see AUTHORS file for a list of" " contributors)\n *\n * GNSS-SDR is a software defined Global Navigation\n * Satellite Systems receiv" "er\n *\n * This file is part of GNSS-SDR.\n *\n * GNSS-SDR is free software: you can redistribute it and/or " "modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundati" "on, either version 3 of the License, or\n * at your option) any later version.\n *\n * GNSS-SDR is distribute" "d in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * M" "ERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n" " *\n * You should have received a copy of the GNU General Public License\n * along with GNSS-SDR. If not, see" " .\n *\n * ---------------------------------------------------------------------" "----\n */" MaskDisplayString "/*! \\n * \\file gnss_sdr_tcp_connector_tracking_lib.mdl\\n * \\brief gnss_sdr_tcp_c" "onnector_tracking Simulink library model. For \\n * further information, please check the README_gnss_sdr_tcp_" "connector_tracking.txt\\n * file or the README_gnss_sdr_tcp_connector_parallel_tracking.txt\\n * file for para" "llel computing execution.\\n *\\n * \\author David Pubill, 2012. dpubill(at)cttc.es\\n * --------------------" "-----------------------------------------------------\\n *\\n * Copyright (C) 2010-2012 (see AUTHORS file for" " a list of contributors)\\n *\\n * GNSS-SDR is a software defined Global Navigation\\n * Satellite S" "ystems receiver\\n *\\n * This file is part of GNSS-SDR.\\n *\\n * GNSS-SDR is free software: you can redist" "ribute it and/or modify\\n * it under the terms of the GNU General Public License as published by\\n * the Fre" "e Software Foundation, either version 3 of the License, or\\n * at your option) any later version.\\n *\\n * " "GNSS-SDR is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the imp" "lied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU General Public Li" "cense for more details.\\n *\\n * You should have received a copy of the GNU General Public License\\n * alon" "g with GNSS-SDR. If not, see .\\n *\\n * ---------------------------------------" "----------------------------------\\n */" HorizontalTextAlignment "Left" LeftAlignmentValue "0.02" SourceBlockDiagram "gnss_sdr_tcp_connector_tracking_lib" TagMaxNumber "20" } Block { BlockType SubSystem Name "gnss_sdr" SID "2052" Ports [] Position [460, 127, 605, 263] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr" Location [395, 454, 1025, 704] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType SubSystem Name "gnss_sdr_tcp_connector_tracking" SID "3" Ports [9, 5] Position [230, 26, 400, 224] AncestorBlock "simulink/User-Defined\nFunctions/gnss_sdr/gnss_sdr_tcp_connector_tracking" LibraryVersion "*1.267" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_tcp_connector_tracking" Location [191, 355, 936, 831] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11895" SIDPrevWatermark "11844" Block { BlockType Inport Name "control_id" SID "3:11618" Position [55, 13, 85, 27] IconDisplay "Port number" } Block { BlockType Inport Name "d_E_I" SID "3:11619" Position [55, 48, 85, 62] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "d_E_Q" SID "3:11620" Position [55, 83, 85, 97] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "d_L_I" SID "3:11621" Position [55, 128, 85, 142] Port "4" IconDisplay "Port number" } Block { BlockType Inport Name "d_L_Q" SID "3:11622" Position [55, 163, 85, 177] Port "5" IconDisplay "Port number" } Block { BlockType Inport Name "d_P_I" SID "3:11623" Position [55, 243, 85, 257] Port "6" IconDisplay "Port number" } Block { BlockType Inport Name "d_P_Q" SID "3:11624" Position [55, 278, 85, 292] Port "7" IconDisplay "Port number" } Block { BlockType Inport Name "d_acq_carrier_doppler_[Hz]" SID "3:11625" Position [55, 313, 85, 327] Port "8" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "3:11626" Position [55, 363, 85, 377] Port "9" IconDisplay "Port number" } Block { BlockType Abs Name "Abs" SID "3:11888" Position [295, 214, 315, 236] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs1" SID "3:11891" Position [295, 189, 315, 211] ShowName off SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs2" SID "3:11892" Position [295, 164, 315, 186] ShowName off SaturateOnIntegerOverflow off } Block { BlockType SubSystem Name "Carrier Tracking \n(PLL)" SID "3:11630" Ports [3, 2] Position [260, 244, 385, 396] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Carrier Tracking \n(PLL)" Location [119, 115, 924, 369] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "P" SID "3:11631" Position [55, 38, 85, 52] IconDisplay "Port number" } Block { BlockType Inport Name "d_acq_carrier_doppler_[Hz]" SID "3:11632" Position [55, 153, 85, 167] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "3:11633" Position [55, 213, 85, 227] Port "3" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3:11634" Position [160, 140, 200, 180] ShowName off OutDataTypeStr "double" } Block { BlockType Reference Name "Delay" SID "3:11635" Ports [1, 1] Position [470, 75, 500, 115] BlockRotation 270 ShowName off LibraryVersion "1.233" UserDataPersistent on UserData "DataTag0" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "Ti" } Block { BlockType SubSystem Name "Error\nAccumulator" SID "3:11636" Ports [2, 1] Position [575, 28, 685, 92] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Error\nAccumulator" Location [361, 424, 744, 624] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "e" SID "3:11637" Position [30, 23, 60, 37] IconDisplay "Port number" } Block { BlockType Inport Name "enable_tracking" SID "3:11638" Position [30, 58, 60, 72] Port "2" IconDisplay "Port number" } Block { BlockType Constant Name "Constant" SID "3:11639" Position [145, 85, 175, 115] ShowName off Value "0" SampleTime "-1" } Block { BlockType Sum Name "Sum2" SID "3:11640" Ports [2, 1] Position [90, 20, 110, 40] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Switch Name "Switch" SID "3:11641" Position [200, 12, 250, 118] ShowName off Threshold "1" InputSameDT off SaturateOnIntegerOverflow off } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11642" Position [170, 135, 205, 175] BlockMirror on ShowName off SampleTime "-1" } Block { BlockType Outport Name "sum(e)" SID "3:11643" Position [325, 58, 355, 72] IconDisplay "Port number" } Line { SrcBlock "e" SrcPort 1 DstBlock "Sum2" DstPort 1 } Line { SrcBlock "Unit Delay" SrcPort 1 Points [-65, 0] DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 DstBlock "Switch" DstPort 1 } Line { SrcBlock "Switch" SrcPort 1 Points [25, 0] Branch { DstBlock "sum(e)" DstPort 1 } Branch { Points [0, 90] DstBlock "Unit Delay" DstPort 1 } } Line { SrcBlock "enable_tracking" SrcPort 1 DstBlock "Switch" DstPort 2 } Line { SrcBlock "Constant" SrcPort 1 DstBlock "Switch" DstPort 3 } } } Block { BlockType SubSystem Name "First-Order\nLow-Pass Filter" SID "3:11644" Ports [1, 1] Position [310, 21, 370, 69] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "First-Order\nLow-Pass Filter" Location [181, 144, 1019, 332] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In" SID "3:11645" Position [25, 28, 55, 42] IconDisplay "Port number" } Block { BlockType Constant Name "B" SID "3:11646" Position [15, 99, 65, 131] ShowName off Value "B_PLL" SampleTime "T" } Block { BlockType Product Name "Product" SID "3:11647" Ports [2, 1] Position [265, 92, 295, 123] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product1" SID "3:11648" Ports [2, 1] Position [170, 27, 205, 63] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum" SID "3:11649" Ports [2, 1] Position [410, 35, 430, 55] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SampleTime "T" } Block { BlockType Sum Name "Sum1" SID "3:11650" Ports [2, 1] Position [325, 100, 345, 120] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11651" Position [360, 140, 395, 180] BlockMirror on ShowName off SampleTime "T" } Block { BlockType Gain Name "gamma" SID "3:11652" Position [110, 40, 140, 70] Gain "(16*(0.707)^2*T) / (1 + 4*(0.707)^2);" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Gain Name "rho" SID "3:11653" Position [105, 104, 155, 126] Gain "(4*T) / (1 + 4*(0.707)^2)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out" SID "3:11654" Position [460, 38, 490, 52] IconDisplay "Port number" } Line { SrcBlock "rho" SrcPort 1 DstBlock "Product" DstPort 2 } Line { SrcBlock "gamma" SrcPort 1 DstBlock "Product1" DstPort 2 } Line { Labels [0, 0] SrcBlock "B" SrcPort 1 Points [15, 0] Branch { DstBlock "rho" DstPort 1 } Branch { Points [0, -60] DstBlock "gamma" DstPort 1 } } Line { SrcBlock "Product" SrcPort 1 DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Product1" SrcPort 1 Points [20, 0] Branch { Points [0, 55] DstBlock "Product" DstPort 1 } Branch { DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [70, 0] Branch { DstBlock "Sum" DstPort 2 } Branch { Points [0, 50] DstBlock "Unit Delay" DstPort 1 } } Line { Labels [0, 0] SrcBlock "Unit Delay" SrcPort 1 Points [-20, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "In" SrcPort 1 DstBlock "Product1" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "Out" DstPort 1 } } } Block { BlockType SubSystem Name "PLL Costas loop two \nquadrant arctan discriminator" SID "3:11866" Ports [1, 1] Position [150, 14, 210, 76] AncestorBlock "gnss_sdr_tcp_connector_tracking_lib/gnss_sdr/gnss_sdr_tcp_connector_tracking/Carrier Tracking \n" "(PLL)/atan2(Q,I)1/PLL Costas loop two quadrant arctan discriminator" LibraryVersion "*1.36" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "PLL Costas loop two \nquadrant arctan discriminator" Location [32, 150, 415, 234] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11859" SIDPrevWatermark "11859" Block { BlockType Inport Name "In" SID "3:11866:11670" Position [25, 38, 55, 52] IconDisplay "Port number" } Block { BlockType ComplexToRealImag Name "Complex to\nReal-Imag" SID "3:11866:11671" Ports [1, 2] Position [80, 28, 110, 57] ShowName off Output "Real and imag" } Block { BlockType Product Name "Divide" SID "3:11866:11672" Ports [2, 1] Position [150, 27, 180, 58] ShowName off Inputs "*/" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Trigonometry Name "Trigonometric\nFunction" SID "3:11866:11673" Ports [1, 1] Position [220, 30, 250, 60] ShowName off Operator "atan" } Block { BlockType Outport Name "Out" SID "3:11866:11674" Position [285, 38, 315, 52] IconDisplay "Port number" } Line { SrcBlock "Divide" SrcPort 1 DstBlock "Trigonometric\nFunction" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 1 DstBlock "Divide" DstPort 1 } Line { SrcBlock "In" SrcPort 1 DstBlock "Complex to\nReal-Imag" DstPort 1 } Line { SrcBlock "Trigonometric\nFunction" SrcPort 1 DstBlock "Out" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 2 DstBlock "Divide" DstPort 2 } } } Block { BlockType Sum Name "Sum" SID "3:11658" Ports [2, 1] Position [475, 35, 495, 55] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "3:11659" Ports [2, 1] Position [510, 150, 530, 170] ShowName off IconShape "round" Inputs "++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Gain Name "[Hz] to [rad/Ti]" SID "3:11860" Position [285, 143, 355, 177] Gain "2*pi*Ti" } Block { BlockType Gain Name "[rad/Ti] to [rad/s]" SID "3:11664" Position [620, 142, 655, 178] Gain "1/Ti" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "carrier_error" SID "3:11679" Position [720, 53, 750, 67] IconDisplay "Port number" } Block { BlockType Outport Name "carrier_doppler" SID "3:11680" Position [720, 153, 750, 167] Port "2" IconDisplay "Port number" } Line { SrcBlock "Sum" SrcPort 1 DstBlock "Error\nAccumulator" DstPort 1 } Line { SrcBlock "Error\nAccumulator" SrcPort 1 DstBlock "carrier_error" DstPort 1 } Line { SrcBlock "P" SrcPort 1 DstBlock "PLL Costas loop two \nquadrant arctan discriminator" DstPort 1 } Line { SrcBlock "[rad/Ti] to [rad/s]" SrcPort 1 DstBlock "carrier_doppler" DstPort 1 } Line { SrcBlock "Delay" SrcPort 1 DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 DstBlock "[rad/Ti] to [rad/s]" DstPort 1 } Line { SrcBlock "d_acq_carrier_doppler_[Hz]" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "[Hz] to [rad/Ti]" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 Points [455, 0; 0, -145] DstBlock "Error\nAccumulator" DstPort 2 } Line { SrcBlock "[Hz] to [rad/Ti]" SrcPort 1 Points [125, 0] Branch { DstBlock "Delay" DstPort 1 } Branch { DstBlock "Sum2" DstPort 2 } } Line { SrcBlock "First-Order\nLow-Pass Filter" SrcPort 1 Points [75, 0] Branch { DstBlock "Sum" DstPort 1 } Branch { Points [0, -40; 70, 0] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "PLL Costas loop two \nquadrant arctan discriminator" SrcPort 1 DstBlock "First-Order\nLow-Pass Filter" DstPort 1 } } } Block { BlockType SubSystem Name "Code Tracking\n(DLL)" SID "3:11681" Ports [4, 1] Position [445, 41, 560, 224] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Code Tracking\n(DLL)" Location [159, 437, 775, 684] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "E" SID "3:11682" Position [25, 43, 55, 57] IconDisplay "Port number" } Block { BlockType Inport Name "P" SID "3:11683" Position [25, 78, 55, 92] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "3:11684" Position [25, 113, 55, 127] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "carrier_aid" SID "3:11685" Position [25, 183, 55, 197] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Delay" SID "3:11687" Ports [1, 1] Position [493, 130, 527, 160] BlockRotation 270 ShowName off LibraryVersion "1.233" UserDataPersistent on UserData "DataTag1" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "1" InputProcessing "Inherited" vinit "0.0" samptime "Ti" } Block { BlockType SubSystem Name "Early-Late Power" SID "3:11688" Ports [2, 1] Position [190, 16, 255, 154] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Early-Late Power" Location [509, 255, 823, 453] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "E" SID "3:11689" Position [15, 23, 45, 37] IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "3:11690" Position [15, 133, 45, 147] Port "2" IconDisplay "Port number" } Block { BlockType Math Name "E power" SID "3:11863" Ports [1, 1] Position [90, 15, 120, 45] Operator "magnitude^2" } Block { BlockType Math Name "L power" SID "3:11864" Ports [1, 1] Position [90, 125, 120, 155] Operator "magnitude^2" } Block { BlockType Sum Name "Sum" SID "3:11865" Ports [2, 1] Position [140, 75, 160, 95] ShowName off IconShape "round" Inputs "+|-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" } Block { BlockType Gain Name "to [chip]" SID "3:11703" Position [185, 70, 215, 100] Gain "1/SFunSlope" } Block { BlockType Outport Name "Tau" SID "3:11704" Position [245, 78, 275, 92] IconDisplay "Port number" } Line { SrcBlock "to [chip]" SrcPort 1 DstBlock "Tau" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "to [chip]" DstPort 1 } Line { SrcBlock "L power" SrcPort 1 Points [25, 0] DstBlock "Sum" DstPort 2 } Line { SrcBlock "E power" SrcPort 1 Points [25, 0] DstBlock "Sum" DstPort 1 } Line { SrcBlock "E" SrcPort 1 DstBlock "E power" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "L power" DstPort 1 } } } Block { BlockType Gain Name "Gain" SID "3:11714" Position [350, 70, 380, 100] Gain "-1" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType SubSystem Name "Normalization" SID "3:11716" Ports [3, 3] Position [85, 35, 135, 135] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Normalization" Location [536, 524, 961, 789] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "E" SID "3:11717" Position [25, 28, 55, 42] IconDisplay "Port number" } Block { BlockType Inport Name "P" SID "3:11718" Position [25, 108, 55, 122] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "L" SID "3:11719" Position [25, 198, 55, 212] Port "3" IconDisplay "Port number" } Block { BlockType Product Name "E Normalisation" SID "3:11720" Ports [2, 1] Position [270, 26, 315, 59] Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType Product Name "L Normalisation" SID "3:11721" Ports [2, 1] Position [270, 196, 315, 229] Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType Product Name "P Normalisation" SID "3:11722" Ports [2, 1] Position [270, 106, 315, 139] Inputs "*/" InputSameDT off RndMeth "Floor" } Block { BlockType SubSystem Name "Power Estimation" SID "3:11723" Ports [1, 1] Position [120, 126, 195, 184] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Power Estimation" Location [431, 459, 986, 620] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11724" Position [25, 78, 55, 92] IconDisplay "Port number" } Block { BlockType Abs Name "Abs(Im)" SID "3:11725" Position [175, 105, 205, 135] SaturateOnIntegerOverflow off } Block { BlockType Abs Name "Abs(Re)" SID "3:11726" Position [175, 30, 205, 60] SaturateOnIntegerOverflow off } Block { BlockType ComplexToRealImag Name "Complex to\nReal-Imag" SID "3:11728" Ports [1, 2] Position [105, 68, 135, 97] Output "Real and imag" } Block { BlockType Math Name "Im^2" SID "3:11739" Ports [1, 1] Position [335, 105, 365, 135] Operator "square" } Block { BlockType SubSystem Name "Mean(Im)" SID "3:11747" Ports [1, 1] Position [240, 95, 300, 145] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Mean(Im)" Location [489, 513, 989, 689] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11748" Position [25, 83, 55, 97] IconDisplay "Port number" } Block { BlockType Gain Name "Gain" SID "3:11749" Position [340, 70, 385, 110] ShowName off Gain "1/10" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Integer Delay" SID "3:11750" Ports [1, 1] Position [125, 28, 160, 62] ShowName off LibraryVersion "1.302" UserDataPersistent on UserData "DataTag2" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "10" InputProcessing "Inherited" vinit "100" samptime "-1" } Block { BlockType Sum Name "Sum" SID "3:11751" Ports [3, 1] Position [195, 80, 215, 100] ShowName off IconShape "round" Inputs "-++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11752" Position [235, 118, 270, 152] BlockMirror on ShowName off X0 "100*10" SampleTime "-1" } Block { BlockType Outport Name "mean" SID "3:11753" Position [425, 83, 455, 97] IconDisplay "Port number" } Line { SrcBlock "Integer Delay" SrcPort 1 Points [40, 0] DstBlock "Sum" DstPort 1 } Line { SrcBlock "in" SrcPort 1 Points [30, 0] Branch { Points [0, -45] DstBlock "Integer Delay" DstPort 1 } Branch { DstBlock "Sum" DstPort 2 } } Line { SrcBlock "Gain" SrcPort 1 DstBlock "mean" DstPort 1 } Line { SrcBlock "Unit Delay" SrcPort 1 Points [-25, 0] DstBlock "Sum" DstPort 3 } Line { SrcBlock "Sum" SrcPort 1 Points [90, 0] Branch { DstBlock "Gain" DstPort 1 } Branch { Points [0, 45] DstBlock "Unit Delay" DstPort 1 } } } } Block { BlockType SubSystem Name "Mean(Re)" SID "3:11754" Ports [1, 1] Position [240, 20, 300, 70] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Mean(Re)" Location [489, 513, 989, 689] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11755" Position [25, 83, 55, 97] IconDisplay "Port number" } Block { BlockType Gain Name "Gain" SID "3:11756" Position [330, 70, 375, 110] Gain "1/10" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Integer Delay" SID "3:11757" Ports [1, 1] Position [125, 28, 160, 62] ShowName off LibraryVersion "1.302" UserDataPersistent on UserData "DataTag3" SourceBlock "simulink/Discrete/Integer Delay" SourceType "Integer Delay" NumDelays "100" InputProcessing "Inherited" vinit "100" samptime "-1" } Block { BlockType Sum Name "Sum" SID "3:11758" Ports [3, 1] Position [195, 80, 215, 100] ShowName off IconShape "round" Inputs "-++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType UnitDelay Name "Unit Delay" SID "3:11759" Position [230, 118, 265, 152] BlockMirror on ShowName off X0 "100*10" SampleTime "-1" } Block { BlockType Outport Name "mean" SID "3:11760" Position [425, 83, 455, 97] IconDisplay "Port number" } Line { SrcBlock "Sum" SrcPort 1 Points [75, 0] Branch { Points [0, 45] DstBlock "Unit Delay" DstPort 1 } Branch { DstBlock "Gain" DstPort 1 } } Line { SrcBlock "Unit Delay" SrcPort 1 Points [-20, 0] DstBlock "Sum" DstPort 3 } Line { SrcBlock "Gain" SrcPort 1 DstBlock "mean" DstPort 1 } Line { SrcBlock "in" SrcPort 1 Points [30, 0] Branch { DstBlock "Sum" DstPort 2 } Branch { Points [0, -45] DstBlock "Integer Delay" DstPort 1 } } Line { SrcBlock "Integer Delay" SrcPort 1 Points [40, 0] DstBlock "Sum" DstPort 1 } } } Block { BlockType Math Name "Power\nto\nAmplitude" SID "3:11763" Ports [1, 1] Position [435, 70, 465, 100] Operator "sqrt" } Block { BlockType Math Name "Re^2" SID "3:11765" Ports [1, 1] Position [335, 30, 365, 60] Operator "square" } Block { BlockType Sum Name "Sum" SID "3:11769" Ports [2, 1] Position [380, 75, 400, 95] ShowName off IconShape "round" Inputs "+|+" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "out" SID "3:11777" Position [490, 78, 520, 92] IconDisplay "Port number" } Line { SrcBlock "Im^2" SrcPort 1 Points [20, 0] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Re^2" SrcPort 1 Points [20, 0] DstBlock "Sum" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 1 Points [15, 0; 0, -30] DstBlock "Abs(Re)" DstPort 1 } Line { SrcBlock "Abs(Re)" SrcPort 1 DstBlock "Mean(Re)" DstPort 1 } Line { SrcBlock "Complex to\nReal-Imag" SrcPort 2 Points [20, 0] DstBlock "Abs(Im)" DstPort 1 } Line { SrcBlock "Abs(Im)" SrcPort 1 DstBlock "Mean(Im)" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "Power\nto\nAmplitude" DstPort 1 } Line { SrcBlock "Mean(Im)" SrcPort 1 DstBlock "Im^2" DstPort 1 } Line { SrcBlock "Mean(Re)" SrcPort 1 DstBlock "Re^2" DstPort 1 } Line { SrcBlock "in" SrcPort 1 DstBlock "Complex to\nReal-Imag" DstPort 1 } Line { SrcBlock "Power\nto\nAmplitude" SrcPort 1 DstBlock "out" DstPort 1 } } } Block { BlockType Outport Name "E'" SID "3:11778" Position [360, 38, 390, 52] IconDisplay "Port number" } Block { BlockType Outport Name "P'" SID "3:11779" Position [360, 118, 390, 132] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "L'" SID "3:11780" Position [360, 208, 390, 222] Port "3" IconDisplay "Port number" } Line { SrcBlock "P" SrcPort 1 Points [25, 0] Branch { DstBlock "P Normalisation" DstPort 1 } Branch { Labels [0, 0] Points [0, 40] DstBlock "Power Estimation" DstPort 1 } } Line { SrcBlock "E" SrcPort 1 DstBlock "E Normalisation" DstPort 1 } Line { SrcBlock "E Normalisation" SrcPort 1 DstBlock "E'" DstPort 1 } Line { SrcBlock "P Normalisation" SrcPort 1 DstBlock "P'" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "L Normalisation" DstPort 1 } Line { SrcBlock "L Normalisation" SrcPort 1 DstBlock "L'" DstPort 1 } Line { SrcBlock "Power Estimation" SrcPort 1 Points [30, 0; 0, 0] Branch { Points [0, -25] Branch { Points [0, -80] DstBlock "E Normalisation" DstPort 2 } Branch { DstBlock "P Normalisation" DstPort 2 } } Branch { Points [0, 65] DstBlock "L Normalisation" DstPort 2 } } } } Block { BlockType Sum Name "Sum" SID "3:11783" Ports [2, 1] Position [500, 75, 520, 95] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Terminator Name "Terminator" SID "3:11784" Position [155, 75, 175, 95] ShowName off } Block { BlockType SubSystem Name "Zero Order\nLow-Pass Filter" SID "3:11785" Ports [1, 1] Position [405, 59, 460, 111] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Zero Order\nLow-Pass Filter" Location [217, 135, 598, 254] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "in" SID "3:11894" Position [25, 28, 55, 42] IconDisplay "Port number" } Block { BlockType Constant Name "B" SID "3:11787" Position [15, 66, 65, 94] ShowName off Value "B_DLL" SampleTime "T" } Block { BlockType Fcn Name "Fcn" SID "3:11788" Position [100, 63, 245, 97] ShowName off Expr "(4*u*T) / (1 + 2*u*T);" } Block { BlockType Product Name "Product" SID "3:11789" Ports [2, 1] Position [285, 42, 315, 73] ShowName off InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "out" SID "3:11895" Position [345, 53, 375, 67] IconDisplay "Port number" } Line { SrcBlock "Fcn" SrcPort 1 Points [20, 0] DstBlock "Product" DstPort 2 } Line { SrcBlock "B" SrcPort 1 DstBlock "Fcn" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "out" DstPort 1 } Line { SrcBlock "in" SrcPort 1 Points [210, 0] DstBlock "Product" DstPort 1 } } } Block { BlockType Gain Name "[chip] to [s]" SID "3:11862" Position [290, 70, 320, 100] Gain "Tc" } Block { BlockType Gain Name "[rad/s] to [s/Ti]" SID "3:11795" Position [290, 174, 415, 206] Gain "-Ti/(2*pi*f0)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "code_error [s]" SID "3:11798" Position [565, 78, 595, 92] IconDisplay "Port number" } Line { SrcBlock "Gain" SrcPort 1 DstBlock "Zero Order\nLow-Pass Filter" DstPort 1 } Line { SrcBlock "L" SrcPort 1 DstBlock "Normalization" DstPort 3 } Line { SrcBlock "P" SrcPort 1 DstBlock "Normalization" DstPort 2 } Line { SrcBlock "E" SrcPort 1 DstBlock "Normalization" DstPort 1 } Line { SrcBlock "[chip] to [s]" SrcPort 1 DstBlock "Gain" DstPort 1 } Line { SrcBlock "Early-Late Power" SrcPort 1 DstBlock "[chip] to [s]" DstPort 1 } Line { SrcBlock "[rad/s] to [s/Ti]" SrcPort 1 Points [90, 0] DstBlock "Delay" DstPort 1 } Line { SrcBlock "carrier_aid" SrcPort 1 DstBlock "[rad/s] to [s/Ti]" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 DstBlock "code_error [s]" DstPort 1 } Line { SrcBlock "Delay" SrcPort 1 DstBlock "Sum" DstPort 2 } Line { SrcBlock "Normalization" SrcPort 3 DstBlock "Early-Late Power" DstPort 2 } Line { SrcBlock "Normalization" SrcPort 1 DstBlock "Early-Late Power" DstPort 1 } Line { SrcBlock "Normalization" SrcPort 2 DstBlock "Terminator" DstPort 1 } Line { SrcBlock "Zero Order\nLow-Pass Filter" SrcPort 1 DstBlock "Sum" DstPort 1 } } } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "3:11799" Position [580, 115, 620, 155] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "3:11800" Position [180, 55, 220, 95] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "3:11801" Position [580, 340, 620, 380] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "3:11802" Position [580, 265, 620, 305] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "3:11803" Position [180, 135, 220, 175] ShowName off OutDataTypeStr "double" } Block { BlockType DataTypeConversion Name "Data Type \nConversion6" SID "3:11804" Position [180, 250, 220, 290] ShowName off OutDataTypeStr "double" } Block { BlockType Mux Name "Mux" SID "3:11886" Ports [3, 1] Position [335, 159, 340, 241] ShowName off Inputs "3" DisplayOption "bar" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex" SID "3:11806" Ports [2, 1] Position [125, 36, 160, 109] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex1" SID "3:11807" Ports [2, 1] Position [125, 116, 160, 189] ShowName off Input "Real and imag" } Block { BlockType RealImagToComplex Name "Real-Imag to\nComplex2" SID "3:11808" Ports [2, 1] Position [125, 231, 160, 304] ShowName off Input "Real and imag" } Block { BlockType Gain Name "[rad/s] to [Hz]" SID "3:11812" Position [485, 345, 515, 375] Gain "1/(2*pi)" ParamDataTypeStr "Inherit: Inherit via internal rule" OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "control_id_" SID "3:11813" Position [655, 13, 685, 27] IconDisplay "Port number" } Block { BlockType Outport Name "code_error_[s]" SID "3:11814" Position [655, 128, 685, 142] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "carrier_error" SID "3:11815" Position [655, 278, 685, 292] Port "3" IconDisplay "Port number" } Block { BlockType Outport Name "carrier_doppler_[Hz]" SID "3:11816" Position [655, 353, 685, 367] Port "4" IconDisplay "Port number" } Block { BlockType Outport Name "EPL Scope" SID "3:11893" Position [655, 423, 685, 437] Port "5" IconDisplay "Port number" } Line { SrcBlock "Carrier Tracking \n(PLL)" SrcPort 2 Points [15, 0] Branch { Points [0, -160] DstBlock "Code Tracking\n(DLL)" DstPort 4 } Branch { DstBlock "[rad/s] to [Hz]" DstPort 1 } } Line { SrcBlock "Code Tracking\n(DLL)" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "Carrier Tracking \n(PLL)" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex1" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Real-Imag to\nComplex2" SrcPort 1 DstBlock "Data Type \nConversion6" DstPort 1 } Line { SrcBlock "d_E_I" SrcPort 1 DstBlock "Real-Imag to\nComplex" DstPort 1 } Line { SrcBlock "d_E_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex" DstPort 2 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "code_error_[s]" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "carrier_error" DstPort 1 } Line { SrcBlock "control_id" SrcPort 1 DstBlock "control_id_" DstPort 1 } Line { SrcBlock "d_L_I" SrcPort 1 DstBlock "Real-Imag to\nComplex1" DstPort 1 } Line { SrcBlock "d_L_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex1" DstPort 2 } Line { SrcBlock "d_P_I" SrcPort 1 DstBlock "Real-Imag to\nComplex2" DstPort 1 } Line { SrcBlock "d_P_Q" SrcPort 1 DstBlock "Real-Imag to\nComplex2" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 Points [45, 0] Branch { Points [0, -10] DstBlock "Code Tracking\n(DLL)" DstPort 1 } Branch { Points [0, 100] DstBlock "Abs2" DstPort 1 } } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 Points [25, 0] Branch { DstBlock "Code Tracking\n(DLL)" DstPort 3 } Branch { Points [0, 70] DstBlock "Abs" DstPort 1 } } Line { SrcBlock "Data Type \nConversion6" SrcPort 1 Points [10, 0] Branch { DstBlock "Carrier Tracking \n(PLL)" DstPort 1 } Branch { Points [0, -160; 25, 0] Branch { DstBlock "Code Tracking\n(DLL)" DstPort 2 } Branch { Points [0, 90] DstBlock "Abs1" DstPort 1 } } } Line { SrcBlock "d_acq_carrier_doppler_[Hz]" SrcPort 1 DstBlock "Carrier Tracking \n(PLL)" DstPort 2 } Line { SrcBlock "[rad/s] to [Hz]" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "carrier_doppler_[Hz]" DstPort 1 } Line { SrcBlock "enable_tracking" SrcPort 1 DstBlock "Carrier Tracking \n(PLL)" DstPort 3 } Line { SrcBlock "Abs" SrcPort 1 DstBlock "Mux" DstPort 3 } Line { SrcBlock "Abs1" SrcPort 1 DstBlock "Mux" DstPort 2 } Line { SrcBlock "Abs2" SrcPort 1 DstBlock "Mux" DstPort 1 } Line { SrcBlock "Mux" SrcPort 1 Points [50, 0; 0, 230] DstBlock "EPL Scope" DstPort 1 } } } Block { BlockType SubSystem Name "gnss_sdr_tcp_connector_tracking_rx" SID "6" Ports [0, 9] Position [25, 26, 195, 224] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_tcp_connector_tracking_rx" Location [6, 82, 455, 978] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "59" Block { BlockType Reference Name "Multiport\nSelector" SID "7" Ports [1, 36] Position [185, 25, 285, 1475] ShowName off LibraryVersion "1.462" SourceBlock "dspindex/Multiport\nSelector" SourceType "Multiport Selector" rowsOrCols "Rows" idxCellArray "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33," "34,35,36}" idxErrMode "Clip Index" } Block { BlockType Reference Name "RX" SID "8" Ports [0, 1] Position [30, 691, 165, 809] LibraryVersion "1.84" DialogController "instrumentcreatedialog" DialogControllerArgs "DataTag4" SourceBlock "instrumentlib/TCP//IP Receive" SourceType "TCP/IP Receive" Host "84.88.61.86" Port "2070" DataSize "36" EnableBlockingMode on Timeout "5" SampleTime "-1" DataType "uint8" ByteOrder "BigEndian" } Block { BlockType SubSystem Name "Subsystem" SID "9" Ports [4, 1] Position [395, 186, 500, 354] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "10" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "11" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "12" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "13" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "14" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "15" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "16" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "17" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "18" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "19" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "20" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "21" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "22" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "23" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "24" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "25" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "26" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "27" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "28" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "29" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "30" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "31" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "32" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "33" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "34" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "35" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "36" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "37" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "38" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "39" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "40" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "41" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "42" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "43" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "44" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "45" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "46" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "47" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "48" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "49" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "50" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "51" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "52" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "53" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "54" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "55" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "56" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "57" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "58" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "59" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "60" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "61" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "62" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "63" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "64" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "65" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "66" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "67" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "68" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "69" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "70" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "71" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "72" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "73" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "74" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "75" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "76" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "77" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "78" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "79" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "80" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "81" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "82" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "83" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "84" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "85" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "86" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "87" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "88" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "89" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "90" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "91" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "92" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "93" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "94" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "95" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "96" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "97" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "98" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "99" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "100" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "101" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "102" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "103" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "104" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "105" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "106" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "107" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "108" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "109" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "110" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "111" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "112" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "113" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "114" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "115" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "116" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "117" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "118" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "119" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "120" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "121" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "122" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "123" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "124" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "125" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "126" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "127" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "128" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "129" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "130" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "131" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "132" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "133" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "134" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "135" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "136" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "137" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "138" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "139" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "140" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "141" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "142" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "143" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "144" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "145" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "146" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "147" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "148" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "149" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "150" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "151" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "152" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "153" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "154" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "155" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "156" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "157" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "158" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "159" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "160" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "161" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "162" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "163" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "164" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "165" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "166" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "167" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "168" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "169" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "170" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "171" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "172" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "173" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "174" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "175" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "176" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "177" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "178" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "179" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "180" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "181" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "182" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "183" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "184" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "185" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "186" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "187" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "188" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "189" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "190" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "191" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "192" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "193" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "194" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "195" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "196" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "197" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "198" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "199" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "200" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "201" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "202" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "203" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "204" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "205" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "206" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "207" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "208" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "209" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "210" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "211" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "212" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "213" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "214" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "215" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "216" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "217" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "218" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "219" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "220" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "221" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "222" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "223" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "224" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "225" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "226" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "227" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "228" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "229" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "230" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "231" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "232" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "233" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_E_I" SID "234" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_E_I" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem1" SID "235" Ports [4, 1] Position [395, 346, 500, 514] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem1" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "236" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "237" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "238" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "239" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "240" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "241" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "242" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "243" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "244" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "245" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "246" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "247" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "248" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "249" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "250" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "251" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "252" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "253" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "254" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "255" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "256" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "257" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "258" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "259" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "260" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "261" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "262" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "263" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "264" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "265" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "266" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "267" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "268" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "269" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "270" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "271" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "272" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "273" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "274" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "275" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "276" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "277" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "278" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "279" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "280" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "281" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "282" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "283" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "284" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "285" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "286" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "287" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "288" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "289" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "290" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "291" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "292" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "293" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "294" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "295" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "296" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "297" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "298" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "299" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "300" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "301" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "302" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "303" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "304" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "305" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "306" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "307" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "308" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "309" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "310" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "311" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "312" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "313" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "314" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "315" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "316" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "317" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "318" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "319" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "320" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "321" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "322" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "323" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "324" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "325" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "326" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "327" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "328" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "329" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "330" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "331" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "332" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "333" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "334" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "335" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "336" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "337" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "338" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "339" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "340" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "341" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "342" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "343" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "344" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "345" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "346" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "347" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "348" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "349" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "350" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "351" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "352" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "353" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "354" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "355" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "356" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "357" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "358" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "359" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "360" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "361" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "362" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "363" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "364" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "365" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "366" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "367" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "368" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "369" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "370" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "371" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "372" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "373" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "374" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "375" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "376" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "377" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "378" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "379" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "380" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "381" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "382" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "383" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "384" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "385" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "386" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "387" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "388" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "389" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "390" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "391" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "392" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "393" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "394" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "395" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "396" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "397" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "398" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "399" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "400" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "401" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "402" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "403" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "404" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "405" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "406" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "407" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "408" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "409" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "410" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "411" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "412" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "413" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "414" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "415" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "416" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "417" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "418" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "419" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "420" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "421" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "422" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "423" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "424" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "425" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "426" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "427" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "428" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "429" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "430" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "431" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "432" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "433" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "434" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "435" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "436" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "437" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "438" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "439" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "440" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "441" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "442" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "443" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "444" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "445" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "446" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "447" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "448" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "449" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "450" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "451" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "452" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "453" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "454" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "455" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "456" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "457" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "458" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "459" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_E_Q" SID "460" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_E_Q" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem2" SID "461" Ports [4, 1] Position [395, 506, 500, 674] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem2" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "462" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "463" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "464" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "465" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "466" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "467" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "468" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "469" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "470" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "471" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "472" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "473" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "474" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "475" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "476" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "477" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "478" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "479" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "480" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "481" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "482" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "483" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "484" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "485" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "486" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "487" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "488" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "489" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "490" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "491" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "492" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "493" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "494" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "495" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "496" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "497" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "498" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "499" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "500" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "501" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "502" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "503" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "504" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "505" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "506" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "507" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "508" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "509" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "510" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "511" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "512" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "513" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "514" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "515" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "516" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "517" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "518" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "519" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "520" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "521" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "522" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "523" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "524" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "525" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "526" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "527" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "528" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "529" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "530" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "531" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "532" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "533" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "534" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "535" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "536" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "537" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "538" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "539" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "540" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "541" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "542" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "543" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "544" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "545" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "546" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "547" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "548" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "549" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "550" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "551" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "552" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "553" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "554" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "555" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "556" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "557" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "558" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "559" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "560" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "561" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "562" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "563" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "564" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "565" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "566" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "567" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "568" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "569" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "570" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "571" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "572" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "573" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "574" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "575" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "576" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "577" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "578" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "579" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "580" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "581" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "582" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "583" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "584" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "585" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "586" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "587" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "588" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "589" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "590" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "591" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "592" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "593" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "594" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "595" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "596" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "597" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "598" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "599" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "600" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "601" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "602" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "603" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "604" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "605" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "606" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "607" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "608" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "609" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "610" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "611" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "612" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "613" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "614" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "615" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "616" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "617" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "618" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "619" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "620" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "621" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "622" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "623" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "624" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "625" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "626" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "627" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "628" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "629" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "630" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "631" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "632" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "633" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "634" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "635" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "636" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "637" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "638" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "639" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "640" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "641" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "642" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "643" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "644" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "645" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "646" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "647" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "648" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "649" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "650" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "651" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "652" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "653" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "654" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "655" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "656" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "657" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "658" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "659" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "660" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "661" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "662" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "663" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "664" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "665" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "666" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "667" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "668" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "669" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "670" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "671" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "672" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "673" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "674" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "675" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "676" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "677" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "678" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "679" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "680" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "681" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "682" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "683" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "684" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "685" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_L_I" SID "686" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_L_I" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem3" SID "687" Ports [4, 1] Position [395, 666, 500, 834] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem3" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "688" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "689" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "690" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "691" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "692" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "693" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "694" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "695" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "696" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "697" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "698" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "699" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "700" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "701" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "702" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "703" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "704" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "705" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "706" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "707" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "708" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "709" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "710" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "711" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "712" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "713" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "714" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "715" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "716" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "717" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "718" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "719" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "720" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "721" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "722" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "723" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "724" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "725" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "726" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "727" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "728" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "729" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "730" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "731" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "732" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "733" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "734" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "735" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "736" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "737" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "738" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "739" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "740" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "741" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "742" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "743" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "744" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "745" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "746" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "747" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "748" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "749" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "750" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "751" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "752" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "753" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "754" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "755" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "756" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "757" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "758" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "759" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "760" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "761" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "762" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "763" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "764" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "765" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "766" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "767" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "768" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "769" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "770" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "771" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "772" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "773" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "774" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "775" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "776" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "777" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "778" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "779" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "780" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "781" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "782" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "783" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "784" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "785" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "786" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "787" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "788" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "789" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "790" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "791" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "792" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "793" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "794" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "795" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "796" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "797" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "798" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "799" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "800" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "801" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "802" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "803" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "804" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "805" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "806" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "807" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "808" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "809" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "810" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "811" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "812" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "813" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "814" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "815" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "816" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "817" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "818" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "819" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "820" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "821" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "822" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "823" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "824" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "825" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "826" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "827" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "828" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "829" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "830" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "831" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "832" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "833" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "834" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "835" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "836" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "837" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "838" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "839" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "840" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "841" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "842" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "843" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "844" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "845" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "846" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "847" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "848" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "849" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "850" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "851" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "852" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "853" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "854" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "855" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "856" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "857" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "858" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "859" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "860" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "861" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "862" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "863" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "864" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "865" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "866" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "867" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "868" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "869" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "870" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "871" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "872" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "873" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "874" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "875" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "876" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "877" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "878" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "879" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "880" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "881" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "882" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "883" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "884" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "885" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "886" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "887" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "888" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "889" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "890" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "891" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "892" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "893" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "894" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "895" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "896" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "897" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "898" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "899" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "900" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "901" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "902" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "903" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "904" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "905" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "906" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "907" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "908" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "909" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "910" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "911" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_L_Q" SID "912" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_L_Q" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem4" SID "913" Ports [4, 1] Position [395, 826, 500, 994] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem4" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "914" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "915" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "916" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "917" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "918" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "919" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "920" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "921" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "922" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "923" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "924" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "925" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "926" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "927" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "928" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "929" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "930" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "931" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "932" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "933" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "934" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "935" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "936" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "937" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "938" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "939" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "940" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "941" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "942" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "943" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "944" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "945" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "946" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "947" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "948" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "949" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "950" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "951" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "952" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "953" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "954" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "955" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "956" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "957" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "958" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "959" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "960" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "961" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "962" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "963" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "964" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "965" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "966" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "967" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "968" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "969" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "970" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "971" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "972" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "973" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "974" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "975" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "976" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "977" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "978" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "979" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "980" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "981" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "982" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "983" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "984" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "985" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "986" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "987" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "988" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "989" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "990" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "991" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "992" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "993" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "994" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "995" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "996" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "997" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "998" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "999" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1000" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1001" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1002" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1003" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1004" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1005" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1006" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1007" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1008" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1009" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1010" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1011" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1012" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1013" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1014" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1015" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1016" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1017" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1018" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1019" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1020" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1021" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1022" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1023" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1024" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1025" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1026" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1027" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1028" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1029" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1030" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1031" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1032" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1033" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1034" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1035" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1036" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1037" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1038" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1039" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1040" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1041" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1042" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1043" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1044" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1045" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1046" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1047" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1048" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1049" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1050" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1051" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1052" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1053" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1054" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1055" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1056" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1057" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1058" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1059" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1060" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1061" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1062" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1063" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1064" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1065" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1066" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1067" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1068" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1069" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1070" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1071" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1072" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1073" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1074" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1075" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1076" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1077" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1078" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1079" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1080" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1081" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1082" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1083" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1084" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1085" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1086" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1087" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1088" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1089" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1090" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1091" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1092" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1093" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1094" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1095" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1096" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1097" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1098" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1099" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1100" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1101" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1102" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1103" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1104" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1105" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1106" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1107" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1108" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1109" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1110" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1111" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1112" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1113" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1114" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1115" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1116" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1117" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1118" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1119" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1120" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1121" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1122" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1123" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1124" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1125" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1126" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1127" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1128" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1129" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1130" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1131" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1132" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "1133" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1134" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1135" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1136" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1137" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_P_I" SID "1138" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_P_I" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem5" SID "1139" Ports [4, 1] Position [395, 991, 500, 1149] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem5" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1140" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1141" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1142" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1143" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1144" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1145" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1146" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1147" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1148" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1149" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1150" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1151" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1152" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1153" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1154" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1155" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1156" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1157" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1158" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1159" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1160" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1161" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1162" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1163" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1164" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1165" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1166" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1167" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1168" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1169" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1170" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1171" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1172" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1173" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1174" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1175" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1176" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1177" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1178" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1179" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1180" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1181" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1182" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1183" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1184" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1185" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1186" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1187" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1188" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1189" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1190" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1191" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1192" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1193" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1194" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1195" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1196" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1197" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1198" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1199" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1200" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1201" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1202" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1203" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1204" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1205" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1206" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1207" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1208" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1209" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1210" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1211" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1212" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1213" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1214" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1215" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1216" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1217" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1218" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1219" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1220" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1221" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1222" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1223" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1224" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1225" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1226" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1227" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1228" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1229" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1230" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1231" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1232" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1233" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1234" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1235" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1236" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1237" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1238" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1239" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1240" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1241" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1242" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1243" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1244" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1245" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1246" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1247" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1248" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1249" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1250" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1251" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1252" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1253" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1254" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1255" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1256" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1257" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1258" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1259" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1260" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1261" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1262" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1263" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1264" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1265" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1266" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1267" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1268" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1269" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1270" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1271" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1272" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1273" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1274" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1275" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1276" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1277" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1278" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1279" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1280" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1281" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1282" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1283" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1284" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1285" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1286" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1287" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1288" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1289" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1290" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1291" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1292" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1293" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1294" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1295" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1296" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1297" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1298" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1299" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1300" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1301" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1302" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1303" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1304" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1305" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1306" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1307" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1308" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1309" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1310" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1311" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1312" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1313" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1314" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1315" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1316" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1317" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1318" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1319" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1320" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1321" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1322" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1323" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1324" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1325" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1326" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1327" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1328" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1329" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1330" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1331" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1332" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1333" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1334" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1335" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1336" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1337" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1338" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1339" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1340" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1341" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1342" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1343" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1344" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1345" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1346" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1347" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1348" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1349" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1350" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1351" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1352" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1353" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1354" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1355" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1356" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1357" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1358" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "1359" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1360" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1361" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1362" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1363" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "d_P_Q" SID "1364" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_P_Q" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem6" SID "1365" Ports [4, 1] Position [395, 1149, 500, 1311] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem6" Location [528, 347, 1021, 586] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1366" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1367" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1368" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1369" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1370" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1371" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1372" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1373" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1374" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1375" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1376" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1377" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1378" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1379" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1380" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1381" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1382" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1383" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1384" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1385" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1386" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1387" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1388" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1389" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1390" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1391" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1392" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1393" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1394" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1395" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1396" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1397" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1398" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1399" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1400" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1401" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1402" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1403" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1404" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1405" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1406" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1407" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1408" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1409" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1410" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1411" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1412" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1413" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1414" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1415" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1416" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1417" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1418" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1419" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1420" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1421" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1422" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1423" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1424" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1425" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1426" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1427" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1428" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1429" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1430" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1431" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1432" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1433" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1434" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1435" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1436" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1437" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1438" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1439" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1440" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1441" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1442" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1443" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1444" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1445" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1446" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1447" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1448" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1449" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1450" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1451" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1452" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1453" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1454" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1455" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1456" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1457" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1458" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1459" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1460" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1461" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1462" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1463" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1464" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1465" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1466" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1467" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1468" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1469" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1470" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1471" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1472" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1473" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1474" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1475" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1476" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1477" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1478" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1479" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1480" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1481" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1482" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1483" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1484" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1485" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1486" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1487" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1488" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1489" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1490" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1491" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1492" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1493" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1494" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1495" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1496" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1497" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1498" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1499" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1500" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1501" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1502" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1503" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1504" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1505" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1506" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1507" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1508" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1509" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1510" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1511" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1512" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1513" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1514" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1515" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1516" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1517" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1518" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1519" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1520" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1521" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1522" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1523" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1524" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1525" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1526" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1527" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1528" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1529" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1530" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1531" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1532" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1533" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1534" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1535" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1536" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1537" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1538" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1539" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1540" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1541" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1542" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1543" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1544" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1545" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1546" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1547" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1548" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1549" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1550" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1551" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1552" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1553" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1554" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1555" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1556" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1557" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1558" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1559" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1560" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1561" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1562" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1563" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1564" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1565" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1566" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1567" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1568" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1569" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1570" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1571" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1572" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1573" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1574" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1575" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1576" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1577" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1578" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1579" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1580" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1581" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1582" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1583" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1584" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } Branch { Points [5, 0] Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } Branch { DstBlock "Math\nFunction2" DstPort 2 } } } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } Branch { Points [0, 80] Branch { Points [0, 150] Branch { Points [0, 155] Branch { Points [0, 175] Branch { Points [0, 180; 5, 0] Branch { Points [-5, 0; 0, 175] Branch { Points [0, 185] Branch { Points [0, 190] Branch { Points [0, 195] Branch { Points [0, 215] Branch { Points [0, 230] Branch { Points [0, 240] Branch { Points [0, 260] Branch { Points [0, 265] Branch { Points [0, 275] Branch { Points [0, 280] Branch { Points [0, 285] Branch { Points [0, 300] Branch { Points [0, 305] Branch { Points [0, 310] Branch { Points [0, 315] Branch { Points [0, 320] Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } } Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } } Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } } } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } Branch { DstBlock "Math\nFunction23" DstPort 2 } } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } Branch { DstBlock "Math\nFunction22" DstPort 2 } } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } Branch { DstBlock "Math\nFunction21" DstPort 2 } } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } Branch { DstBlock "Math\nFunction20" DstPort 2 } } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } Branch { DstBlock "Math\nFunction19" DstPort 2 } } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } Branch { DstBlock "Math\nFunction18" DstPort 2 } } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } Branch { DstBlock "Math\nFunction17" DstPort 2 } } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } Branch { DstBlock "Math\nFunction16" DstPort 2 } } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } Branch { DstBlock "Math\nFunction15" DstPort 2 } } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } Branch { DstBlock "Math\nFunction14" DstPort 2 } } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } Branch { DstBlock "Math\nFunction13" DstPort 2 } } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } Branch { DstBlock "Math\nFunction12" DstPort 2 } } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } Branch { DstBlock "Math\nFunction11" DstPort 2 } } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } Branch { DstBlock "Math\nFunction10" DstPort 2 } } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } Branch { DstBlock "Math\nFunction7" DstPort 2 } } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } } } Block { BlockType Sum Name "Sum" SID "1585" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1586" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1587" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1588" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1589" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } Branch { DstBlock "Sign" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } Branch { DstBlock "Exponent" DstPort 1 } } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { DstBlock "Data Type Conversion1" DstPort 1 } Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } Branch { DstBlock "Display3" DstPort 1 } } } } Block { BlockType Outport Name "d_acq_carrier_doppler_hz" SID "1590" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "d_acq_carrier_doppler_hz" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem7" SID "1591" Ports [4, 1] Position [395, 1310, 500, 1470] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem7" Location [528, 347, 1038, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1592" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1593" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1594" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1595" Position [25, 43, 55, 57] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1596" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1597" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1598" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1599" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1600" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1601" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1602" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1603" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1604" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1605" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1606" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1607" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1608" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1609" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1610" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1611" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1612" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1613" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1614" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1615" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1616" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1617" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1618" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1619" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1620" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1621" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1622" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1623" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1624" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1625" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1626" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1627" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1628" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1629" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1630" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1631" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1632" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1633" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1634" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1635" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1636" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1637" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1638" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1639" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1640" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1641" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1642" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1643" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1644" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1645" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1646" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1647" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1648" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1649" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1650" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1651" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1652" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1653" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1654" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1655" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1656" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1657" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1658" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1659" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1660" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1661" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1662" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1663" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1664" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1665" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1666" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1667" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1668" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1669" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1670" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1671" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1672" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1673" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1674" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1675" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1676" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1677" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1678" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1679" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1680" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1681" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1682" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1683" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1684" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1685" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1686" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1687" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1688" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1689" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1690" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1691" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1692" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1693" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1694" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1695" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1696" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1697" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1698" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1699" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1700" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1701" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1702" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1703" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1704" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1705" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1706" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1707" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1708" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1709" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1710" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1711" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1712" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1713" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1714" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1715" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1716" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1717" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1718" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1719" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1720" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1721" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1722" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1723" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1724" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1725" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1726" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1727" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1728" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1729" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1730" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1731" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1732" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1733" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1734" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1735" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1736" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1737" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1738" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1739" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1740" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1741" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1742" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1743" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1744" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1745" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1746" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1747" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1748" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1749" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1750" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1751" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1752" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1753" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1754" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1755" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1756" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1757" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1758" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1759" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1760" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1761" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1762" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1763" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1764" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1765" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1766" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1767" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1768" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1769" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1770" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1771" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1772" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1773" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "1774" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "1775" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "1776" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "1777" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "1778" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "1779" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "1780" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "1781" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "1782" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "1783" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "1784" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "1785" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1786" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "1787" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "1788" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "1789" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "1790" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "1791" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "1792" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "1793" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "1794" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "1795" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "1796" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "1797" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "1798" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "1799" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "1800" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "1801" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "1802" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "1803" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "1804" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "1805" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "1806" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "1807" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "1808" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "1809" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1810" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "1811" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "1812" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "1813" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "1814" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "1815" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "enable_tracking" SID "1816" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "enable_tracking" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType SubSystem Name "Subsystem8" SID "1817" Ports [4, 1] Position [395, 31, 500, 189] ShowName off MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem8" Location [528, 347, 1021, 603] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1818" Position [25, 178, 55, 192] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1819" Position [25, 133, 55, 147] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1820" Position [25, 88, 55, 102] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1821" Position [25, 48, 55, 62] Port "4" IconDisplay "Port number" } Block { BlockType DataTypeConversion Name "Data Type \nConversion1" SID "1822" Position [100, 75, 140, 115] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion2" SID "1823" Position [100, 120, 140, 160] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion3" SID "1824" Position [100, 165, 140, 205] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion4" SID "1825" Position [100, 30, 140, 70] ShowName off OutDataTypeStr "single" } Block { BlockType DataTypeConversion Name "Data Type \nConversion5" SID "1826" Position [365, 100, 405, 140] ShowName off OutDataTypeStr "single" } Block { BlockType SubSystem Name "hex2float" SID "1827" Ports [4, 1] Position [190, 25, 320, 210] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "hex2float" Location [13, 125, 1281, 839] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1828" Position [50, 48, 80, 62] IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1829" Position [25, 248, 55, 262] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "In3" SID "1830" Position [50, 433, 80, 447] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "In4" SID "1831" Position [50, 528, 80, 542] Port "4" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator" SID "1832" Ports [1, 1] Position [375, 161, 415, 199] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1833" Ports [1, 1] Position [255, 251, 295, 289] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator2" SID "1834" Ports [1, 1] Position [285, 26, 325, 64] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('10000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator3" SID "1835" Ports [1, 1] Position [255, 336, 295, 374] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('01111111')" BitMaskRealWorld "Stored Integer" } Block { BlockType Constant Name "Constant4" SID "1836" Position [855, 280, 885, 310] Value "127" } Block { BlockType Constant Name "Constant5" SID "1837" Position [650, 655, 740, 685] Value "8388608" } Block { BlockType Constant Name "Constant7" SID "1838" Position [740, 45, 770, 75] Value "-1" } Block { BlockType DataTypeConversion Name "Data Type Conversion" SID "1839" Position [105, 38, 180, 72] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion1" SID "1840" Position [105, 238, 180, 272] OutDataTypeStr "uint8" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion2" SID "1841" Position [110, 333, 185, 367] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion3" SID "1842" Position [105, 423, 180, 457] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion4" SID "1843" Position [105, 518, 180, 552] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion5" SID "1844" Position [800, 653, 875, 687] OutDataTypeStr "uint32" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType DataTypeConversion Name "Data Type Conversion7" SID "1845" Position [670, 118, 745, 152] OutDataTypeStr "double" RndMeth "Floor" SaturateOnIntegerOverflow off } Block { BlockType Display Name "Display3" SID "1846" Ports [1] Position [460, 162, 550, 188] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1847" Ports [1] Position [670, 217, 760, 243] Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Exponent" SID "1848" Ports [1] Position [715, 282, 805, 308] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Display Name "Mantissa" SID "1849" Ports [1] Position [1015, 558, 1295, 592] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction" SID "1850" Ports [2, 1] Position [825, 102, 855, 133] Operator "pow" } Block { BlockType Product Name "Product" SID "1851" Ports [2, 1] Position [1225, 277, 1255, 308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Reference Name "Shift\nArithmetic" SID "1852" Ports [1, 1] Position [565, 215, 645, 255] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-1" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic1" SID "1853" Ports [1, 1] Position [335, 255, 415, 295] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic2" SID "1854" Ports [1, 1] Position [360, 25, 440, 65] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "7" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic3" SID "1855" Ports [1, 1] Position [370, 335, 450, 375] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-16" nBinPtShiftRight "0" } Block { BlockType Reference Name "Shift\nArithmetic4" SID "1856" Ports [1, 1] Position [375, 420, 455, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Shift\nArithmetic" SourceType "Shift Arithmetic" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off nBitShiftRight "-8" nBinPtShiftRight "0" } Block { BlockType Display Name "Sign" SID "1857" Ports [1] Position [480, 32, 570, 58] BackgroundColor "cyan" Format "binary (Stored Integer)" Decimation "1" Lockdown off } Block { BlockType SubSystem Name "Subsystem" SID "1858" Ports [2, 1] Position [1125, 350, 1165, 410] MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "Subsystem" Location [2, 82, 1653, 1004] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" SID "1859" Position [25, 235, 55, 250] BlockRotation 270 IconDisplay "Port number" } Block { BlockType Inport Name "In2" SID "1860" Position [220, 358, 250, 372] Port "2" IconDisplay "Port number" } Block { BlockType Reference Name "Bitwise\nOperator1" SID "1861" Ports [1, 1] Position [410, 241, 450, 279] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0100000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator10" SID "1862" Ports [1, 1] Position [425, 1086, 465, 1124] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000001000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator11" SID "1863" Ports [1, 1] Position [425, 1266, 465, 1304] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000100000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator12" SID "1864" Ports [1, 1] Position [425, 1446, 465, 1484] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000010000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator13" SID "1865" Ports [1, 1] Position [425, 1636, 465, 1674] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000001000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator14" SID "1866" Ports [1, 1] Position [425, 1836, 465, 1874] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000100000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator15" SID "1867" Ports [1, 1] Position [425, 2046, 465, 2084] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000010000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator16" SID "1868" Ports [1, 1] Position [425, 2276, 465, 2314] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000001000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator17" SID "1869" Ports [1, 1] Position [425, 2521, 465, 2559] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000100000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator18" SID "1870" Ports [1, 1] Position [425, 2776, 465, 2814] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000010000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator19" SID "1871" Ports [1, 1] Position [425, 3041, 465, 3079] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000001000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator20" SID "1872" Ports [1, 1] Position [425, 3316, 465, 3354] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000100000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator21" SID "1873" Ports [1, 1] Position [425, 3596, 465, 3634] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000010000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator22" SID "1874" Ports [1, 1] Position [425, 3886, 465, 3924] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000001000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator23" SID "1875" Ports [1, 1] Position [425, 4181, 465, 4219] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000100000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator24" SID "1876" Ports [1, 1] Position [425, 4486, 465, 4524] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000010000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator25" SID "1877" Ports [1, 1] Position [425, 4796, 465, 4834] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000001000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator26" SID "1878" Ports [1, 1] Position [430, 5111, 470, 5149] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000100')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator27" SID "1879" Ports [1, 1] Position [430, 5431, 470, 5469] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000010')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator28" SID "1880" Ports [1, 1] Position [430, 5756, 470, 5794] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000000000000000000000001')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator6" SID "1881" Ports [1, 1] Position [415, 426, 455, 464] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0010000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator7" SID "1882" Ports [1, 1] Position [415, 576, 455, 614] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0001000000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator8" SID "1883" Ports [1, 1] Position [420, 736, 460, 774] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000100000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Bitwise\nOperator9" SID "1884" Ports [1, 1] Position [425, 906, 465, 944] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Bitwise\nOperator" SourceType "Bitwise Operator" logicop "AND" UseBitMask on NumInputPorts "1" BitMask "bin2dec('0000010000000000000000000')" BitMaskRealWorld "Stored Integer" } Block { BlockType Reference Name "Compare\nTo Zero1" SID "1885" Ports [1, 1] Position [480, 245, 510, 275] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero10" SID "1886" Ports [1, 1] Position [495, 1840, 525, 1870] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero11" SID "1887" Ports [1, 1] Position [495, 2050, 525, 2080] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero12" SID "1888" Ports [1, 1] Position [495, 2280, 525, 2310] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero13" SID "1889" Ports [1, 1] Position [495, 2525, 525, 2555] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero14" SID "1890" Ports [1, 1] Position [495, 2780, 525, 2810] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero15" SID "1891" Ports [1, 1] Position [495, 3045, 525, 3075] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero16" SID "1892" Ports [1, 1] Position [495, 3320, 525, 3350] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero17" SID "1893" Ports [1, 1] Position [495, 3600, 525, 3630] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero18" SID "1894" Ports [1, 1] Position [495, 3890, 525, 3920] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero19" SID "1895" Ports [1, 1] Position [495, 4185, 525, 4215] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero2" SID "1896" Ports [1, 1] Position [485, 430, 515, 460] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero20" SID "1897" Ports [1, 1] Position [495, 4490, 525, 4520] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero21" SID "1898" Ports [1, 1] Position [495, 4800, 525, 4830] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero22" SID "1899" Ports [1, 1] Position [500, 5115, 530, 5145] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero23" SID "1900" Ports [1, 1] Position [500, 5435, 530, 5465] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero24" SID "1901" Ports [1, 1] Position [500, 5760, 530, 5790] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero3" SID "1902" Ports [1, 1] Position [485, 580, 515, 610] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero4" SID "1903" Ports [1, 1] Position [490, 740, 520, 770] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero5" SID "1904" Ports [1, 1] Position [495, 910, 525, 940] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero6" SID "1905" Ports [1, 1] Position [495, 1090, 525, 1120] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero7" SID "1906" Ports [1, 1] Position [495, 1270, 525, 1300] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero8" SID "1907" Ports [1, 1] Position [495, 1450, 525, 1480] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Reference Name "Compare\nTo Zero9" SID "1908" Ports [1, 1] Position [495, 1640, 525, 1670] LibraryVersion "1.302" SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Zero" SourceType "Compare To Zero" ShowPortLabels "FromPortIcon" SystemSampleTime "-1" FunctionWithSeparateData off RTWMemSecFuncInitTerm "Inherit from model" RTWMemSecFuncExecute "Inherit from model" RTWMemSecDataConstants "Inherit from model" RTWMemSecDataInternal "Inherit from model" RTWMemSecDataParameters "Inherit from model" GeneratePreprocessorConditionals off relop ">" LogicOutDataTypeMode "uint8" ZeroCross off } Block { BlockType Constant Name "Constant1" SID "1909" Position [360, 145, 390, 175] Value "2" } Block { BlockType Constant Name "Constant10" SID "1910" Position [365, 480, 395, 510] Value "2" } Block { BlockType Constant Name "Constant11" SID "1911" Position [335, 550, 365, 580] } Block { BlockType Constant Name "Constant12" SID "1912" Position [370, 640, 400, 670] Value "2" } Block { BlockType Constant Name "Constant13" SID "1913" Position [340, 710, 370, 740] } Block { BlockType Constant Name "Constant14" SID "1914" Position [375, 810, 405, 840] Value "2" } Block { BlockType Constant Name "Constant15" SID "1915" Position [345, 880, 375, 910] } Block { BlockType Constant Name "Constant16" SID "1916" Position [375, 990, 405, 1020] Value "2" } Block { BlockType Constant Name "Constant17" SID "1917" Position [345, 1060, 375, 1090] } Block { BlockType Constant Name "Constant18" SID "1918" Position [375, 1170, 405, 1200] Value "2" } Block { BlockType Constant Name "Constant19" SID "1919" Position [345, 1240, 375, 1270] } Block { BlockType Constant Name "Constant2" SID "1920" Position [345, 400, 375, 430] } Block { BlockType Constant Name "Constant20" SID "1921" Position [375, 1350, 405, 1380] Value "2" } Block { BlockType Constant Name "Constant21" SID "1922" Position [345, 1420, 375, 1450] } Block { BlockType Constant Name "Constant22" SID "1923" Position [375, 1540, 405, 1570] Value "2" } Block { BlockType Constant Name "Constant23" SID "1924" Position [345, 1610, 375, 1640] } Block { BlockType Constant Name "Constant24" SID "1925" Position [375, 1740, 405, 1770] Value "2" } Block { BlockType Constant Name "Constant25" SID "1926" Position [345, 1810, 375, 1840] } Block { BlockType Constant Name "Constant26" SID "1927" Position [375, 1950, 405, 1980] Value "2" } Block { BlockType Constant Name "Constant27" SID "1928" Position [345, 2020, 375, 2050] } Block { BlockType Constant Name "Constant28" SID "1929" Position [375, 2180, 405, 2210] Value "2" } Block { BlockType Constant Name "Constant29" SID "1930" Position [345, 2250, 375, 2280] } Block { BlockType Constant Name "Constant30" SID "1931" Position [375, 2425, 405, 2455] Value "2" } Block { BlockType Constant Name "Constant31" SID "1932" Position [345, 2495, 375, 2525] } Block { BlockType Constant Name "Constant32" SID "1933" Position [375, 2680, 405, 2710] Value "2" } Block { BlockType Constant Name "Constant33" SID "1934" Position [345, 2750, 375, 2780] } Block { BlockType Constant Name "Constant34" SID "1935" Position [375, 2945, 405, 2975] Value "2" } Block { BlockType Constant Name "Constant35" SID "1936" Position [345, 3015, 375, 3045] } Block { BlockType Constant Name "Constant36" SID "1937" Position [375, 3220, 405, 3250] Value "2" } Block { BlockType Constant Name "Constant37" SID "1938" Position [345, 3290, 375, 3320] } Block { BlockType Constant Name "Constant38" SID "1939" Position [375, 3500, 405, 3530] Value "2" } Block { BlockType Constant Name "Constant39" SID "1940" Position [345, 3570, 375, 3600] } Block { BlockType Constant Name "Constant40" SID "1941" Position [375, 3790, 405, 3820] Value "2" } Block { BlockType Constant Name "Constant41" SID "1942" Position [345, 3860, 375, 3890] } Block { BlockType Constant Name "Constant42" SID "1943" Position [375, 4085, 405, 4115] Value "2" } Block { BlockType Constant Name "Constant43" SID "1944" Position [345, 4155, 375, 4185] } Block { BlockType Constant Name "Constant44" SID "1945" Position [375, 4390, 405, 4420] Value "2" } Block { BlockType Constant Name "Constant45" SID "1946" Position [345, 4460, 375, 4490] } Block { BlockType Constant Name "Constant46" SID "1947" Position [375, 4700, 405, 4730] Value "2" } Block { BlockType Constant Name "Constant47" SID "1948" Position [345, 4770, 375, 4800] } Block { BlockType Constant Name "Constant48" SID "1949" Position [380, 5015, 410, 5045] Value "2" } Block { BlockType Constant Name "Constant49" SID "1950" Position [350, 5085, 380, 5115] } Block { BlockType Constant Name "Constant50" SID "1951" Position [380, 5335, 410, 5365] Value "2" } Block { BlockType Constant Name "Constant51" SID "1952" Position [350, 5405, 380, 5435] } Block { BlockType Constant Name "Constant52" SID "1953" Position [380, 5660, 410, 5690] Value "2" } Block { BlockType Constant Name "Constant53" SID "1954" Position [350, 5730, 380, 5760] } Block { BlockType Constant Name "Constant8" SID "1955" Position [365, 330, 395, 360] Value "2" } Block { BlockType Display Name "Display1" SID "1956" Ports [1] Position [730, 507, 820, 533] Decimation "1" Lockdown off } Block { BlockType Display Name "Display2" SID "1957" Ports [1] Position [775, 657, 865, 683] Decimation "1" Lockdown off } Block { BlockType Display Name "Display3" SID "1958" Ports [1] Position [740, 857, 830, 883] Decimation "1" Lockdown off } Block { BlockType Display Name "Display4" SID "1959" Ports [1] Position [770, 1057, 860, 1083] Decimation "1" Lockdown off } Block { BlockType Display Name "Display5" SID "1960" Ports [1] Position [735, 332, 825, 358] Decimation "1" Lockdown off } Block { BlockType Display Name "Display6" SID "1961" Ports [1] Position [770, 1187, 860, 1213] Decimation "1" Lockdown off } Block { BlockType Display Name "Display7" SID "1962" Ports [1] Position [640, 197, 730, 223] Decimation "1" Lockdown off } Block { BlockType Display Name "Display8" SID "1963" Ports [1] Position [490, 317, 580, 343] Decimation "1" Lockdown off } Block { BlockType Math Name "Math\nFunction1" SID "1964" Ports [2, 1] Position [420, 177, 450, 208] Operator "pow" } Block { BlockType Math Name "Math\nFunction10" SID "1965" Ports [2, 1] Position [435, 1772, 465, 1803] Operator "pow" } Block { BlockType Math Name "Math\nFunction11" SID "1966" Ports [2, 1] Position [435, 1982, 465, 2013] Operator "pow" } Block { BlockType Math Name "Math\nFunction12" SID "1967" Ports [2, 1] Position [435, 2212, 465, 2243] Operator "pow" } Block { BlockType Math Name "Math\nFunction13" SID "1968" Ports [2, 1] Position [435, 2457, 465, 2488] Operator "pow" } Block { BlockType Math Name "Math\nFunction14" SID "1969" Ports [2, 1] Position [435, 2712, 465, 2743] Operator "pow" } Block { BlockType Math Name "Math\nFunction15" SID "1970" Ports [2, 1] Position [435, 2977, 465, 3008] Operator "pow" } Block { BlockType Math Name "Math\nFunction16" SID "1971" Ports [2, 1] Position [435, 3252, 465, 3283] Operator "pow" } Block { BlockType Math Name "Math\nFunction17" SID "1972" Ports [2, 1] Position [435, 3532, 465, 3563] Operator "pow" } Block { BlockType Math Name "Math\nFunction18" SID "1973" Ports [2, 1] Position [435, 3822, 465, 3853] Operator "pow" } Block { BlockType Math Name "Math\nFunction19" SID "1974" Ports [2, 1] Position [435, 4117, 465, 4148] Operator "pow" } Block { BlockType Math Name "Math\nFunction2" SID "1975" Ports [2, 1] Position [425, 362, 455, 393] Operator "pow" } Block { BlockType Math Name "Math\nFunction20" SID "1976" Ports [2, 1] Position [435, 4422, 465, 4453] Operator "pow" } Block { BlockType Math Name "Math\nFunction21" SID "1977" Ports [2, 1] Position [435, 4732, 465, 4763] Operator "pow" } Block { BlockType Math Name "Math\nFunction22" SID "1978" Ports [2, 1] Position [440, 5047, 470, 5078] Operator "pow" } Block { BlockType Math Name "Math\nFunction23" SID "1979" Ports [2, 1] Position [440, 5367, 470, 5398] Operator "pow" } Block { BlockType Math Name "Math\nFunction24" SID "1980" Ports [2, 1] Position [440, 5692, 470, 5723] Operator "pow" } Block { BlockType Math Name "Math\nFunction3" SID "1981" Ports [2, 1] Position [425, 512, 455, 543] Operator "pow" } Block { BlockType Math Name "Math\nFunction4" SID "1982" Ports [2, 1] Position [430, 672, 460, 703] Operator "pow" } Block { BlockType Math Name "Math\nFunction5" SID "1983" Ports [2, 1] Position [435, 842, 465, 873] Operator "pow" } Block { BlockType Math Name "Math\nFunction6" SID "1984" Ports [2, 1] Position [435, 1022, 465, 1053] Operator "pow" } Block { BlockType Math Name "Math\nFunction7" SID "1985" Ports [2, 1] Position [435, 1202, 465, 1233] Operator "pow" } Block { BlockType Math Name "Math\nFunction8" SID "1986" Ports [2, 1] Position [435, 1382, 465, 1413] Operator "pow" } Block { BlockType Math Name "Math\nFunction9" SID "1987" Ports [2, 1] Position [435, 1572, 465, 1603] Operator "pow" } Block { BlockType Product Name "Product1" SID "1988" Ports [2, 1] Position [555, 202, 585, 233] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product10" SID "1989" Ports [2, 1] Position [570, 1797, 600, 1828] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product11" SID "1990" Ports [2, 1] Position [570, 2007, 600, 2038] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product12" SID "1991" Ports [2, 1] Position [570, 2237, 600, 2268] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product13" SID "1992" Ports [2, 1] Position [570, 2482, 600, 2513] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product14" SID "1993" Ports [2, 1] Position [570, 2737, 600, 2768] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product15" SID "1994" Ports [2, 1] Position [570, 3002, 600, 3033] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product16" SID "1995" Ports [2, 1] Position [570, 3277, 600, 3308] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product17" SID "1996" Ports [2, 1] Position [570, 3557, 600, 3588] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product18" SID "1997" Ports [2, 1] Position [570, 3847, 600, 3878] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product19" SID "1998" Ports [2, 1] Position [570, 4142, 600, 4173] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product2" SID "1999" Ports [2, 1] Position [560, 387, 590, 418] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product20" SID "2000" Ports [2, 1] Position [570, 4447, 600, 4478] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product21" SID "2001" Ports [2, 1] Position [570, 4757, 600, 4788] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product22" SID "2002" Ports [2, 1] Position [575, 5072, 605, 5103] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product23" SID "2003" Ports [2, 1] Position [575, 5392, 605, 5423] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product24" SID "2004" Ports [2, 1] Position [575, 5717, 605, 5748] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product3" SID "2005" Ports [2, 1] Position [560, 537, 590, 568] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product4" SID "2006" Ports [2, 1] Position [565, 697, 595, 728] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product5" SID "2007" Ports [2, 1] Position [570, 867, 600, 898] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product6" SID "2008" Ports [2, 1] Position [570, 1047, 600, 1078] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product7" SID "2009" Ports [2, 1] Position [570, 1227, 600, 1258] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product8" SID "2010" Ports [2, 1] Position [570, 1407, 600, 1438] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Product Name "Product9" SID "2011" Ports [2, 1] Position [570, 1597, 600, 1628] InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2012" Ports [2, 1] Position [380, 380, 400, 400] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum10" SID "2013" Ports [2, 1] Position [380, 1400, 400, 1420] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum11" SID "2014" Ports [2, 1] Position [380, 1590, 400, 1610] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum12" SID "2015" Ports [2, 1] Position [380, 1790, 400, 1810] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum13" SID "2016" Ports [2, 1] Position [380, 2000, 400, 2020] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum14" SID "2017" Ports [2, 1] Position [380, 2230, 400, 2250] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum15" SID "2018" Ports [2, 1] Position [380, 2475, 400, 2495] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum16" SID "2019" Ports [2, 1] Position [380, 2730, 400, 2750] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum17" SID "2020" Ports [2, 1] Position [380, 2995, 400, 3015] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum18" SID "2021" Ports [2, 1] Position [380, 3270, 400, 3290] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum19" SID "2022" Ports [2, 1] Position [380, 3550, 400, 3570] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum20" SID "2023" Ports [2, 1] Position [380, 3840, 400, 3860] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum21" SID "2024" Ports [2, 1] Position [380, 4135, 400, 4155] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum22" SID "2025" Ports [2, 1] Position [380, 4440, 400, 4460] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum23" SID "2026" Ports [2, 1] Position [380, 4750, 400, 4770] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum24" SID "2027" Ports [2, 1] Position [385, 5065, 405, 5085] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum25" SID "2028" Ports [2, 1] Position [385, 5385, 405, 5405] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum26" SID "2029" Ports [2, 1] Position [385, 5710, 405, 5730] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum27" SID "2030" Ports [24, 1] Position [760, 3171, 820, 3479] ShowName off Inputs "|++++++++++++++++++++++++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum5" SID "2031" Ports [2, 1] Position [370, 530, 390, 550] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum6" SID "2032" Ports [2, 1] Position [375, 690, 395, 710] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum7" SID "2033" Ports [2, 1] Position [380, 860, 400, 880] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum8" SID "2034" Ports [2, 1] Position [380, 1040, 400, 1060] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum9" SID "2035" Ports [2, 1] Position [380, 1220, 400, 1240] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2036" Position [845, 3318, 875, 3332] IconDisplay "Port number" } Line { SrcBlock "Constant8" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction2" DstPort 1 } Line { SrcBlock "Bitwise\nOperator6" SrcPort 1 DstBlock "Compare\nTo Zero2" DstPort 1 } Line { SrcBlock "Compare\nTo Zero2" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product2" DstPort 2 } Line { SrcBlock "Math\nFunction2" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product2" DstPort 1 } Line { SrcBlock "Constant10" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction3" DstPort 1 } Line { SrcBlock "Bitwise\nOperator7" SrcPort 1 DstBlock "Compare\nTo Zero3" DstPort 1 } Line { SrcBlock "Compare\nTo Zero3" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product3" DstPort 2 } Line { SrcBlock "Math\nFunction3" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product3" DstPort 1 } Line { SrcBlock "Constant11" SrcPort 1 DstBlock "Sum5" DstPort 2 } Line { SrcBlock "Sum5" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, 10; -40, 0] DstBlock "Sum6" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction3" DstPort 2 } } Line { SrcBlock "Constant12" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction4" DstPort 1 } Line { SrcBlock "Bitwise\nOperator8" SrcPort 1 DstBlock "Compare\nTo Zero4" DstPort 1 } Line { SrcBlock "Compare\nTo Zero4" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product4" DstPort 2 } Line { SrcBlock "Math\nFunction4" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product4" DstPort 1 } Line { SrcBlock "Constant13" SrcPort 1 DstBlock "Sum6" DstPort 2 } Line { SrcBlock "Sum6" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-40, 0] DstBlock "Sum7" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction4" DstPort 2 } } Line { SrcBlock "Constant14" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction5" DstPort 1 } Line { SrcBlock "Bitwise\nOperator9" SrcPort 1 DstBlock "Compare\nTo Zero5" DstPort 1 } Line { SrcBlock "Compare\nTo Zero5" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product5" DstPort 2 } Line { SrcBlock "Math\nFunction5" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product5" DstPort 1 } Line { SrcBlock "Constant15" SrcPort 1 DstBlock "Sum7" DstPort 2 } Line { SrcBlock "Sum7" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum8" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction5" DstPort 2 } } Line { SrcBlock "Constant16" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction6" DstPort 1 } Line { SrcBlock "Bitwise\nOperator10" SrcPort 1 DstBlock "Compare\nTo Zero6" DstPort 1 } Line { SrcBlock "Compare\nTo Zero6" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product6" DstPort 2 } Line { SrcBlock "Math\nFunction6" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product6" DstPort 1 } Line { SrcBlock "Constant17" SrcPort 1 DstBlock "Sum8" DstPort 2 } Line { SrcBlock "Sum8" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [-45, 0] DstBlock "Sum9" DstPort 1 } Branch { Points [0, -5] DstBlock "Math\nFunction6" DstPort 2 } } Line { SrcBlock "Constant18" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction7" DstPort 1 } Line { SrcBlock "Bitwise\nOperator11" SrcPort 1 DstBlock "Compare\nTo Zero7" DstPort 1 } Line { SrcBlock "Compare\nTo Zero7" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product7" DstPort 2 } Line { SrcBlock "Math\nFunction7" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product7" DstPort 1 } Line { SrcBlock "Constant19" SrcPort 1 DstBlock "Sum9" DstPort 2 } Line { SrcBlock "Sum9" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction7" DstPort 2 } Branch { Points [0, 5; -50, 0] DstBlock "Sum10" DstPort 1 } } Line { SrcBlock "Constant20" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction8" DstPort 1 } Line { SrcBlock "Bitwise\nOperator12" SrcPort 1 DstBlock "Compare\nTo Zero8" DstPort 1 } Line { SrcBlock "Compare\nTo Zero8" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product8" DstPort 2 } Line { SrcBlock "Math\nFunction8" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product8" DstPort 1 } Line { SrcBlock "Constant21" SrcPort 1 DstBlock "Sum10" DstPort 2 } Line { SrcBlock "Sum10" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction8" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum11" DstPort 1 } } Line { SrcBlock "Constant22" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction9" DstPort 1 } Line { SrcBlock "Bitwise\nOperator13" SrcPort 1 DstBlock "Compare\nTo Zero9" DstPort 1 } Line { SrcBlock "Compare\nTo Zero9" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product9" DstPort 2 } Line { SrcBlock "Math\nFunction9" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product9" DstPort 1 } Line { SrcBlock "Constant23" SrcPort 1 DstBlock "Sum11" DstPort 2 } Line { SrcBlock "Sum11" SrcPort 1 Points [0, 0; 5, 0] Branch { Points [0, -5] DstBlock "Math\nFunction9" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum12" DstPort 1 } } Line { SrcBlock "Constant24" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction10" DstPort 1 } Line { SrcBlock "Bitwise\nOperator14" SrcPort 1 DstBlock "Compare\nTo Zero10" DstPort 1 } Line { SrcBlock "Compare\nTo Zero10" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product10" DstPort 2 } Line { SrcBlock "Math\nFunction10" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product10" DstPort 1 } Line { SrcBlock "Constant25" SrcPort 1 DstBlock "Sum12" DstPort 2 } Line { SrcBlock "Sum12" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction10" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum13" DstPort 1 } } Line { SrcBlock "Constant26" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction11" DstPort 1 } Line { SrcBlock "Bitwise\nOperator15" SrcPort 1 DstBlock "Compare\nTo Zero11" DstPort 1 } Line { SrcBlock "Compare\nTo Zero11" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product11" DstPort 2 } Line { SrcBlock "Math\nFunction11" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product11" DstPort 1 } Line { SrcBlock "Constant27" SrcPort 1 DstBlock "Sum13" DstPort 2 } Line { SrcBlock "Sum13" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction11" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum14" DstPort 1 } } Line { SrcBlock "Constant28" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction12" DstPort 1 } Line { SrcBlock "Bitwise\nOperator16" SrcPort 1 DstBlock "Compare\nTo Zero12" DstPort 1 } Line { SrcBlock "Compare\nTo Zero12" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product12" DstPort 2 } Line { SrcBlock "Math\nFunction12" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product12" DstPort 1 } Line { SrcBlock "Constant29" SrcPort 1 DstBlock "Sum14" DstPort 2 } Line { SrcBlock "Sum14" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction12" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum15" DstPort 1 } } Line { SrcBlock "Constant30" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction13" DstPort 1 } Line { SrcBlock "Bitwise\nOperator17" SrcPort 1 DstBlock "Compare\nTo Zero13" DstPort 1 } Line { SrcBlock "Compare\nTo Zero13" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product13" DstPort 2 } Line { SrcBlock "Math\nFunction13" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product13" DstPort 1 } Line { SrcBlock "Constant31" SrcPort 1 DstBlock "Sum15" DstPort 2 } Line { SrcBlock "Sum15" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction13" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum16" DstPort 1 } } Line { SrcBlock "Constant32" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction14" DstPort 1 } Line { SrcBlock "Bitwise\nOperator18" SrcPort 1 DstBlock "Compare\nTo Zero14" DstPort 1 } Line { SrcBlock "Compare\nTo Zero14" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product14" DstPort 2 } Line { SrcBlock "Math\nFunction14" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product14" DstPort 1 } Line { SrcBlock "Constant33" SrcPort 1 DstBlock "Sum16" DstPort 2 } Line { SrcBlock "Sum16" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction14" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum17" DstPort 1 } } Line { SrcBlock "Constant34" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction15" DstPort 1 } Line { SrcBlock "Bitwise\nOperator19" SrcPort 1 DstBlock "Compare\nTo Zero15" DstPort 1 } Line { SrcBlock "Compare\nTo Zero15" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product15" DstPort 2 } Line { SrcBlock "Math\nFunction15" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product15" DstPort 1 } Line { SrcBlock "Constant35" SrcPort 1 DstBlock "Sum17" DstPort 2 } Line { SrcBlock "Sum17" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction15" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum18" DstPort 1 } } Line { SrcBlock "Constant36" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction16" DstPort 1 } Line { SrcBlock "Bitwise\nOperator20" SrcPort 1 DstBlock "Compare\nTo Zero16" DstPort 1 } Line { SrcBlock "Compare\nTo Zero16" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product16" DstPort 2 } Line { SrcBlock "Math\nFunction16" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product16" DstPort 1 } Line { SrcBlock "Constant37" SrcPort 1 DstBlock "Sum18" DstPort 2 } Line { SrcBlock "Sum18" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction16" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum19" DstPort 1 } } Line { SrcBlock "Constant38" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction17" DstPort 1 } Line { SrcBlock "Bitwise\nOperator21" SrcPort 1 DstBlock "Compare\nTo Zero17" DstPort 1 } Line { SrcBlock "Compare\nTo Zero17" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product17" DstPort 2 } Line { SrcBlock "Math\nFunction17" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product17" DstPort 1 } Line { SrcBlock "Constant39" SrcPort 1 DstBlock "Sum19" DstPort 2 } Line { SrcBlock "Sum19" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction17" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum20" DstPort 1 } } Line { SrcBlock "Constant40" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction18" DstPort 1 } Line { SrcBlock "Bitwise\nOperator22" SrcPort 1 DstBlock "Compare\nTo Zero18" DstPort 1 } Line { SrcBlock "Compare\nTo Zero18" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product18" DstPort 2 } Line { SrcBlock "Math\nFunction18" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product18" DstPort 1 } Line { SrcBlock "Constant41" SrcPort 1 DstBlock "Sum20" DstPort 2 } Line { SrcBlock "Sum20" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction18" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum21" DstPort 1 } } Line { SrcBlock "Constant42" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction19" DstPort 1 } Line { SrcBlock "Bitwise\nOperator23" SrcPort 1 DstBlock "Compare\nTo Zero19" DstPort 1 } Line { SrcBlock "Compare\nTo Zero19" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product19" DstPort 2 } Line { SrcBlock "Math\nFunction19" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product19" DstPort 1 } Line { SrcBlock "Constant43" SrcPort 1 DstBlock "Sum21" DstPort 2 } Line { SrcBlock "Sum21" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction19" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum22" DstPort 1 } } Line { SrcBlock "Constant44" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction20" DstPort 1 } Line { SrcBlock "Bitwise\nOperator24" SrcPort 1 DstBlock "Compare\nTo Zero20" DstPort 1 } Line { SrcBlock "Compare\nTo Zero20" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product20" DstPort 2 } Line { SrcBlock "Math\nFunction20" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product20" DstPort 1 } Line { SrcBlock "Constant45" SrcPort 1 DstBlock "Sum22" DstPort 2 } Line { SrcBlock "Sum22" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction20" DstPort 2 } Branch { Points [-45, 0] DstBlock "Sum23" DstPort 1 } } Line { SrcBlock "Constant46" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction21" DstPort 1 } Line { SrcBlock "Bitwise\nOperator25" SrcPort 1 DstBlock "Compare\nTo Zero21" DstPort 1 } Line { SrcBlock "Compare\nTo Zero21" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product21" DstPort 2 } Line { SrcBlock "Math\nFunction21" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product21" DstPort 1 } Line { SrcBlock "Constant47" SrcPort 1 DstBlock "Sum23" DstPort 2 } Line { SrcBlock "Sum23" SrcPort 1 Points [5, 0; 0, -5] Branch { DstBlock "Math\nFunction21" DstPort 2 } Branch { Points [-40, 0] DstBlock "Sum24" DstPort 1 } } Line { SrcBlock "Constant48" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction22" DstPort 1 } Line { SrcBlock "Bitwise\nOperator26" SrcPort 1 DstBlock "Compare\nTo Zero22" DstPort 1 } Line { SrcBlock "Compare\nTo Zero22" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product22" DstPort 2 } Line { SrcBlock "Math\nFunction22" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product22" DstPort 1 } Line { SrcBlock "Constant49" SrcPort 1 DstBlock "Sum24" DstPort 2 } Line { SrcBlock "Sum24" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction22" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum25" DstPort 1 } } Line { SrcBlock "Constant50" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction23" DstPort 1 } Line { SrcBlock "Bitwise\nOperator27" SrcPort 1 DstBlock "Compare\nTo Zero23" DstPort 1 } Line { SrcBlock "Compare\nTo Zero23" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product23" DstPort 2 } Line { SrcBlock "Math\nFunction23" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product23" DstPort 1 } Line { SrcBlock "Constant51" SrcPort 1 DstBlock "Sum25" DstPort 2 } Line { SrcBlock "Sum25" SrcPort 1 Points [5, 0; 0, -5; 5, 0] Branch { DstBlock "Math\nFunction23" DstPort 2 } Branch { Points [-50, 0] DstBlock "Sum26" DstPort 1 } } Line { SrcBlock "Constant52" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction24" DstPort 1 } Line { SrcBlock "Bitwise\nOperator28" SrcPort 1 DstBlock "Compare\nTo Zero24" DstPort 1 } Line { SrcBlock "Compare\nTo Zero24" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product24" DstPort 2 } Line { SrcBlock "Math\nFunction24" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product24" DstPort 1 } Line { SrcBlock "Constant53" SrcPort 1 DstBlock "Sum26" DstPort 2 } Line { SrcBlock "Sum26" SrcPort 1 Points [5, 0; 0, -5] DstBlock "Math\nFunction24" DstPort 2 } Line { SrcBlock "Product2" SrcPort 1 Points [40, 0] Branch { Points [0, 2830] DstBlock "Sum27" DstPort 3 } Branch { Points [0, -60] DstBlock "Display5" DstPort 1 } } Line { SrcBlock "Product3" SrcPort 1 Points [105, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 4 } Branch { Points [0, -35] DstBlock "Display1" DstPort 1 } } Line { SrcBlock "Product4" SrcPort 1 Points [105, 0] Branch { Points [40, 0] DstBlock "Sum27" DstPort 5 } Branch { Points [0, -45] DstBlock "Display2" DstPort 1 } } Line { SrcBlock "Product5" SrcPort 1 Points [15, 0] Branch { Points [0, 2380] DstBlock "Sum27" DstPort 6 } Branch { Points [0, -15] DstBlock "Display3" DstPort 1 } } Line { SrcBlock "Product6" SrcPort 1 Points [40, 0; 0, 5] Branch { Points [0, 2205] DstBlock "Sum27" DstPort 7 } Branch { DstBlock "Display4" DstPort 1 } } Line { SrcBlock "Product7" SrcPort 1 Points [95, 0] Branch { Points [45, 0] DstBlock "Sum27" DstPort 8 } Branch { Points [0, -45] DstBlock "Display6" DstPort 1 } } Line { SrcBlock "Product8" SrcPort 1 Points [40, 0; 0, 1870] DstBlock "Sum27" DstPort 9 } Line { SrcBlock "Product9" SrcPort 1 Points [40, 0; 0, 1690] DstBlock "Sum27" DstPort 10 } Line { SrcBlock "Product10" SrcPort 1 Points [40, 0; 0, 1500] DstBlock "Sum27" DstPort 11 } Line { SrcBlock "Product11" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 12 } Line { SrcBlock "Product12" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 13 } Line { SrcBlock "Product13" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 14 } Line { SrcBlock "Product14" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 15 } Line { SrcBlock "Product15" SrcPort 1 Points [40, 0; 0, 345] DstBlock "Sum27" DstPort 16 } Line { SrcBlock "Product16" SrcPort 1 Points [40, 0; 0, 80] DstBlock "Sum27" DstPort 17 } Line { SrcBlock "Product17" SrcPort 1 Points [40, 0; 0, -190] DstBlock "Sum27" DstPort 18 } Line { SrcBlock "Product18" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 19 } Line { SrcBlock "Product19" SrcPort 1 Points [40, 0; 0, -755] DstBlock "Sum27" DstPort 20 } Line { SrcBlock "Product20" SrcPort 1 Points [140, 0] DstBlock "Sum27" DstPort 21 } Line { SrcBlock "Product21" SrcPort 1 Points [40, 0; 0, -1350] DstBlock "Sum27" DstPort 22 } Line { SrcBlock "Product22" SrcPort 1 Points [35, 0; 0, -1655] DstBlock "Sum27" DstPort 23 } Line { SrcBlock "Product23" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 2 } Line { SrcBlock "Product24" SrcPort 1 Points [135, 0] DstBlock "Sum27" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 Points [0, -10; 280, 0] Branch { Points [0, -20] DstBlock "Math\nFunction1" DstPort 2 } Branch { Points [0, 170] DstBlock "Sum1" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 80] Branch { DstBlock "Bitwise\nOperator6" DstPort 1 } Branch { Points [0, 150] Branch { DstBlock "Bitwise\nOperator7" DstPort 1 } Branch { Points [0, 155] Branch { Points [0, 5] DstBlock "Bitwise\nOperator8" DstPort 1 } Branch { Points [0, 175] Branch { DstBlock "Bitwise\nOperator9" DstPort 1 } Branch { Points [0, 180; 5, 0] Branch { DstBlock "Bitwise\nOperator10" DstPort 1 } Branch { Points [-5, 0; 0, 175] Branch { Points [0, 5] DstBlock "Bitwise\nOperator11" DstPort 1 } Branch { Points [0, 185] Branch { DstBlock "Bitwise\nOperator12" DstPort 1 } Branch { Points [0, 190] Branch { DstBlock "Bitwise\nOperator13" DstPort 1 } Branch { Points [0, 195] Branch { Points [0, 5] DstBlock "Bitwise\nOperator14" DstPort 1 } Branch { Points [0, 215] Branch { DstBlock "Bitwise\nOperator15" DstPort 1 } Branch { Points [0, 230] Branch { DstBlock "Bitwise\nOperator16" DstPort 1 } Branch { Points [0, 240] Branch { Points [0, 5] DstBlock "Bitwise\nOperator17" DstPort 1 } Branch { Points [0, 260] Branch { DstBlock "Bitwise\nOperator18" DstPort 1 } Branch { Points [0, 265] Branch { DstBlock "Bitwise\nOperator19" DstPort 1 } Branch { Points [0, 275] Branch { DstBlock "Bitwise\nOperator20" DstPort 1 } Branch { Points [0, 280] Branch { DstBlock "Bitwise\nOperator21" DstPort 1 } Branch { Points [0, 285] Branch { Points [0, 5] DstBlock "Bitwise\nOperator22" DstPort 1 } Branch { Points [0, 300] Branch { DstBlock "Bitwise\nOperator23" DstPort 1 } Branch { Points [0, 305] Branch { DstBlock "Bitwise\nOperator24" DstPort 1 } Branch { Points [0, 310] Branch { DstBlock "Bitwise\nOperator25" DstPort 1 } Branch { Points [0, 315] Branch { DstBlock "Bitwise\nOperator26" DstPort 1 } Branch { Points [0, 320] Branch { DstBlock "Bitwise\nOperator27" DstPort 1 } Branch { Points [0, 325] DstBlock "Bitwise\nOperator28" DstPort 1 } } } } } } } } } } } } } } } } } } } } } } } Branch { Points [0, -105] DstBlock "Bitwise\nOperator1" DstPort 1 } } Line { SrcBlock "Sum27" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "Constant1" SrcPort 1 Points [5, 0; 0, 25] DstBlock "Math\nFunction1" DstPort 1 } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 DstBlock "Compare\nTo Zero1" DstPort 1 } Line { SrcBlock "Compare\nTo Zero1" SrcPort 1 Points [10, 0; 0, -35] DstBlock "Product1" DstPort 2 } Line { SrcBlock "Math\nFunction1" SrcPort 1 Points [40, 0; 0, 15] DstBlock "Product1" DstPort 1 } Line { SrcBlock "Constant2" SrcPort 1 DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Sum1" SrcPort 1 Points [0, -5] Branch { Points [5, 0] Branch { DstBlock "Math\nFunction2" DstPort 2 } Branch { Points [0, -55] DstBlock "Display8" DstPort 1 } } Branch { Points [-50, 0] DstBlock "Sum5" DstPort 1 } } Line { SrcBlock "Product1" SrcPort 1 Points [15, 0] Branch { Points [0, -10] DstBlock "Display7" DstPort 1 } Branch { Points [110, 0; 0, 3225] DstBlock "Sum27" DstPort 24 } } } } Block { BlockType Sum Name "Sum" SID "2037" Ports [2, 1] Position [670, 290, 690, 310] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum1" SID "2038" Ports [3, 1] Position [845, 400, 875, 430] ShowName off IconShape "round" Inputs "|+++|" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum2" SID "2039" Ports [2, 1] Position [880, 235, 900, 255] ShowName off IconShape "round" Inputs "|+-" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Sum Name "Sum3" SID "2040" Ports [2, 1] Position [945, 625, 965, 645] ShowName off IconShape "round" Inputs "|++" InputSameDT off OutDataTypeStr "Inherit: Inherit via internal rule" SaturateOnIntegerOverflow off } Block { BlockType Outport Name "Out1" SID "2041" Position [1280, 288, 1310, 302] IconDisplay "Port number" } Line { SrcBlock "Bitwise\nOperator" SrcPort 1 Points [25, 0] Branch { DstBlock "Display3" DstPort 1 } Branch { Points [0, 55] DstBlock "Shift\nArithmetic" DstPort 1 } } Line { SrcBlock "Data Type Conversion" SrcPort 1 Points [50, 0] Branch { Points [0, 125] DstBlock "Bitwise\nOperator" DstPort 1 } Branch { Points [0, -10] DstBlock "Bitwise\nOperator2" DstPort 1 } } Line { SrcBlock "In2" SrcPort 1 Points [15, 0] Branch { Points [0, 95] DstBlock "Data Type Conversion2" DstPort 1 } Branch { DstBlock "Data Type Conversion1" DstPort 1 } } Line { SrcBlock "Data Type Conversion1" SrcPort 1 Points [25, 0; 0, 15] DstBlock "Bitwise\nOperator1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic" SrcPort 1 Points [0, -5] Branch { DstBlock "Display4" DstPort 1 } Branch { Points [5, 0] DstBlock "Sum" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator1" SrcPort 1 Points [10, 0; 0, 5] DstBlock "Shift\nArithmetic1" DstPort 1 } Line { SrcBlock "Shift\nArithmetic1" SrcPort 1 Points [155, 0; 0, 50] DstBlock "Sum" DstPort 2 } Line { SrcBlock "Sum" SrcPort 1 Points [0, -5; 5, 0] Branch { DstBlock "Exponent" DstPort 1 } Branch { Points [0, -50] DstBlock "Sum2" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator2" SrcPort 1 DstBlock "Shift\nArithmetic2" DstPort 1 } Line { SrcBlock "Shift\nArithmetic2" SrcPort 1 Points [10, 0] Branch { DstBlock "Sign" DstPort 1 } Branch { Points [0, 90] DstBlock "Data Type Conversion7" DstPort 1 } } Line { SrcBlock "Bitwise\nOperator3" SrcPort 1 DstBlock "Shift\nArithmetic3" DstPort 1 } Line { SrcBlock "Data Type Conversion2" SrcPort 1 Points [30, 0; 0, 5] DstBlock "Bitwise\nOperator3" DstPort 1 } Line { SrcBlock "Shift\nArithmetic3" SrcPort 1 Points [5, 0; 0, 10; 379, 0] DstBlock "Sum1" DstPort 1 } Line { SrcBlock "Data Type Conversion3" SrcPort 1 DstBlock "Shift\nArithmetic4" DstPort 1 } Line { SrcBlock "Shift\nArithmetic4" SrcPort 1 Points [370, 0] DstBlock "Sum1" DstPort 2 } Line { SrcBlock "Data Type Conversion4" SrcPort 1 Points [320, 0; 0, -64; 334, 0] DstBlock "Sum1" DstPort 3 } Line { SrcBlock "Sum1" SrcPort 1 Points [30, 0; 0, 155] Branch { Points [0, 5] DstBlock "Mantissa" DstPort 1 } Branch { Points [0, 65] DstBlock "Sum3" DstPort 1 } } Line { SrcBlock "Constant4" SrcPort 1 DstBlock "Sum2" DstPort 2 } Line { SrcBlock "Sum2" SrcPort 1 Points [0, 5; 45, 0; 0, 115] DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Sum3" SrcPort 1 Points [5, 0; 0, -240] DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Constant5" SrcPort 1 DstBlock "Data Type Conversion5" DstPort 1 } Line { SrcBlock "Data Type Conversion5" SrcPort 1 Points [75, 0] DstBlock "Sum3" DstPort 2 } Line { SrcBlock "Subsystem" SrcPort 1 Points [25, 0; 0, -30; 5, 0; 0, -50] DstBlock "Product" DstPort 2 } Line { SrcBlock "Constant7" SrcPort 1 Points [20, 0; 0, 50] DstBlock "Math\nFunction" DstPort 1 } Line { SrcBlock "Data Type Conversion7" SrcPort 1 Points [60, 0] DstBlock "Math\nFunction" DstPort 2 } Line { SrcBlock "Math\nFunction" SrcPort 1 Points [175, 0; 0, 165] DstBlock "Product" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type Conversion" DstPort 1 } Line { SrcBlock "Product" SrcPort 1 DstBlock "Out1" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type Conversion3" DstPort 1 } Line { SrcBlock "In4" SrcPort 1 DstBlock "Data Type Conversion4" DstPort 1 } } } Block { BlockType Outport Name "control_id" SID "2042" Position [440, 113, 470, 127] IconDisplay "Port number" OutputWhenDisabled "reset" InitialOutput "0" } Line { SrcBlock "Data Type \nConversion5" SrcPort 1 DstBlock "control_id" DstPort 1 } Line { SrcBlock "hex2float" SrcPort 1 DstBlock "Data Type \nConversion5" DstPort 1 } Line { SrcBlock "Data Type \nConversion4" SrcPort 1 DstBlock "hex2float" DstPort 1 } Line { SrcBlock "Data Type \nConversion1" SrcPort 1 DstBlock "hex2float" DstPort 2 } Line { SrcBlock "Data Type \nConversion2" SrcPort 1 DstBlock "hex2float" DstPort 3 } Line { SrcBlock "Data Type \nConversion3" SrcPort 1 DstBlock "hex2float" DstPort 4 } Line { SrcBlock "In4" SrcPort 1 Points [10, 0; 0, -5] DstBlock "Data Type \nConversion4" DstPort 1 } Line { SrcBlock "In3" SrcPort 1 DstBlock "Data Type \nConversion1" DstPort 1 } Line { SrcBlock "In2" SrcPort 1 DstBlock "Data Type \nConversion2" DstPort 1 } Line { SrcBlock "In1" SrcPort 1 DstBlock "Data Type \nConversion3" DstPort 1 } } } Block { BlockType Outport Name "control_id" SID "2043" Position [555, 103, 585, 117] IconDisplay "Port number" } Block { BlockType Outport Name "d_E_I" SID "2044" Position [560, 263, 590, 277] Port "2" IconDisplay "Port number" } Block { BlockType Outport Name "d_E_Q" SID "2045" Position [560, 423, 590, 437] Port "3" IconDisplay "Port number" } Block { BlockType Outport Name "d_L_I" SID "2046" Position [560, 583, 590, 597] Port "4" IconDisplay "Port number" } Block { BlockType Outport Name "d_L_Q" SID "2047" Position [560, 743, 590, 757] Port "5" IconDisplay "Port number" } Block { BlockType Outport Name "d_P_I" SID "2048" Position [560, 903, 590, 917] Port "6" IconDisplay "Port number" } Block { BlockType Outport Name "d_P_Q" SID "2049" Position [560, 1063, 590, 1077] Port "7" IconDisplay "Port number" } Block { BlockType Outport Name "d_acq_carrier_doppler_hz" SID "2050" Position [555, 1223, 585, 1237] Port "8" IconDisplay "Port number" } Block { BlockType Outport Name "enable_tracking" SID "2051" Position [560, 1383, 590, 1397] Port "9" IconDisplay "Port number" } Line { SrcBlock "RX" SrcPort 1 DstBlock "Multiport\nSelector" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 1 DstBlock "Subsystem8" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 2 DstBlock "Subsystem8" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 3 DstBlock "Subsystem8" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 4 DstBlock "Subsystem8" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 5 DstBlock "Subsystem" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 6 DstBlock "Subsystem" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 7 DstBlock "Subsystem" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 8 DstBlock "Subsystem" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 9 DstBlock "Subsystem1" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 10 DstBlock "Subsystem1" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 11 DstBlock "Subsystem1" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 12 DstBlock "Subsystem1" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 13 DstBlock "Subsystem2" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 14 DstBlock "Subsystem2" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 15 DstBlock "Subsystem2" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 16 DstBlock "Subsystem2" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 17 DstBlock "Subsystem3" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 18 DstBlock "Subsystem3" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 19 DstBlock "Subsystem3" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 20 DstBlock "Subsystem3" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 21 DstBlock "Subsystem4" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 22 DstBlock "Subsystem4" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 23 DstBlock "Subsystem4" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 24 DstBlock "Subsystem4" DstPort 4 } Line { SrcBlock "Multiport\nSelector" SrcPort 25 DstBlock "Subsystem5" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 26 DstBlock "Subsystem5" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 27 DstBlock "Subsystem5" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 28 DstBlock "Subsystem5" DstPort 4 } Line { SrcBlock "Subsystem4" SrcPort 1 DstBlock "d_P_I" DstPort 1 } Line { SrcBlock "Subsystem3" SrcPort 1 DstBlock "d_L_Q" DstPort 1 } Line { SrcBlock "Subsystem2" SrcPort 1 DstBlock "d_L_I" DstPort 1 } Line { SrcBlock "Subsystem1" SrcPort 1 DstBlock "d_E_Q" DstPort 1 } Line { SrcBlock "Subsystem" SrcPort 1 DstBlock "d_E_I" DstPort 1 } Line { SrcBlock "Subsystem8" SrcPort 1 DstBlock "control_id" DstPort 1 } Line { SrcBlock "Subsystem5" SrcPort 1 DstBlock "d_P_Q" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 29 DstBlock "Subsystem6" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 30 DstBlock "Subsystem6" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 31 DstBlock "Subsystem6" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 32 DstBlock "Subsystem6" DstPort 4 } Line { SrcBlock "Subsystem6" SrcPort 1 DstBlock "d_acq_carrier_doppler_hz" DstPort 1 } Line { SrcBlock "Subsystem7" SrcPort 1 DstBlock "enable_tracking" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 33 DstBlock "Subsystem7" DstPort 1 } Line { SrcBlock "Multiport\nSelector" SrcPort 34 DstBlock "Subsystem7" DstPort 2 } Line { SrcBlock "Multiport\nSelector" SrcPort 35 DstBlock "Subsystem7" DstPort 3 } Line { SrcBlock "Multiport\nSelector" SrcPort 36 DstBlock "Subsystem7" DstPort 4 } Annotation { Position [285, 79] } } } Block { BlockType SubSystem Name "gnss_sdr_tcp_connector_tracking_tx" SID "5" Ports [4] Position [430, 26, 600, 224] AncestorBlock "simulink/User-Defined\nFunctions/gnss_sdr/gnss_sdr_tcp_connector_tracking_tx" LibraryVersion "*1.267" MinAlgLoopOccurrences off PropExecContextOutsideSubsystem off RTWSystemCode "Auto" FunctionWithSeparateData off Opaque off RequestExecContextInheritance off MaskHideContents off System { Name "gnss_sdr_tcp_connector_tracking_tx" Location [1137, 408, 1500, 698] Open off ModelBrowserVisibility off ModelBrowserWidth 200 ScreenColor "white" PaperOrientation "landscape" PaperPositionMode "auto" PaperType "A4" PaperUnits "centimeters" TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" SIDHighWatermark "11844" SIDPrevWatermark "11844" Block { BlockType Inport Name "control_id" SID "5:11610" Position [30, 38, 60, 52] IconDisplay "Port number" } Block { BlockType Inport Name "code_error" SID "5:11611" Position [30, 98, 60, 112] Port "2" IconDisplay "Port number" } Block { BlockType Inport Name "carr_error" SID "5:11612" Position [30, 158, 60, 172] Port "3" IconDisplay "Port number" } Block { BlockType Inport Name "carrier_doppler_hz" SID "5:11613" Position [30, 218, 60, 232] Port "4" IconDisplay "Port number" } Block { BlockType Display Name "Display" SID "5:11614" Ports [1] Position [175, 234, 330, 266] ShowName off Format "long" Decimation "1" Lockdown off } Block { BlockType Reference Name "TX" SID "5:11615" Ports [1] Position [175, 77, 310, 193] LibraryVersion "1.84" DialogController "instrumentcreatedialog" DialogControllerArgs "DataTag5" SourceBlock "instrumentlib/TCP//IP Send" SourceType "TCP/IP Send" Host "84.88.61.86" Port "2070" EnableBlockingMode on Timeout "10" ByteOrder "LittleEndian" } Block { BlockType Concatenate Name "Vector\nConcatenate1" SID "5:11616" Ports [4, 1] Position [95, 12, 100, 258] BackgroundColor "black" ShowName off NumInputs "4" Mode "Vector" } Line { SrcBlock "carr_error" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 3 } Line { SrcBlock "code_error" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 2 } Line { SrcBlock "control_id" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 1 } Line { SrcBlock "Vector\nConcatenate1" SrcPort 1 Points [15, 0] Branch { DstBlock "TX" DstPort 1 } Branch { Points [0, 115] DstBlock "Display" DstPort 1 } } Line { SrcBlock "carrier_doppler_hz" SrcPort 1 DstBlock "Vector\nConcatenate1" DstPort 4 } } } } } } } MatData { NumRecords 6 DataRecord { Tag DataTag5 Data " %)30 . : 8 ( 0 % \" $ ! 0 . . 8 ( ! " " % \" $ ' 0 0 !P '1C<&EP. % * % * ---------------------------------------------------------------------- % */ function gnss_sdr_galileo_e1_tcp_connector_tracking_start(num_channels) %User parameters host = '84.88.61.86'; %Remote IP address (GNSS-SDR computer IP) port = 2070; %Remote port (GNSS-SDR computer port for Ch0) num_vars_rx = 13; %Number of variables expected from GNSS-SDR num_vars_tx = 4; %Number of variable to be transmitted to GNSS-SDR timeout = '10'; %Timeout [s] %name of the tracking block, it must match the name of the Simulink %model tracking_block_name = 'gnss_sdr_galileo_e1_tcp_connector_tracking'; % Layout coordinates for the first gnss_sdr_galileo_e1_tcp_connector_tracking % block and offset definitions X0 = 20; X1 = 170; Y0 = 20; Y1 = 140; X_offset = 200; Y_offset = 160; %Calculate the size of the data received from GNSS-SDR %(float = 4 bytes each variable) datasize_RX = num_vars_rx*4; %Create a Simulink model simulink('open'); new_system('gnss_sdr_galileo_e1_tcp_connector_tracking_aux'); open_system('gnss_sdr_galileo_e1_tcp_connector_tracking_aux'); %Set parameters to avoid warnings in the Command Window set_param('gnss_sdr_galileo_e1_tcp_connector_tracking_aux',... 'InheritedTsInSrcMsg', 'none'); warning('off', 'Simulink:Commands:SetParamLinkChangeWarn'); %Assign values to the variables used by Simulink in the base workspace %DLL assignin('base', 'B_DLL', 2); assignin('base', 'zeta_DLL', 0.7); assignin('base', 'k_DLL', 1); assignin('base', 'd_pdi_code', 0.004); %PLL assignin('base', 'B_PLL', 30); assignin('base', 'zeta_PLL', 0.65); assignin('base', 'k_PLL', 0.25); assignin('base', 'd_pdi_carr', 0.004); %Block generation from the Simulink Library for i = 0:num_channels-1; %Add and prepare an empty block to become the TCP connector block tcp_connector_block=['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_', num2str(i)]; add_block('simulink/Ports & Subsystems/Subsystem', tcp_connector_block); delete_line(tcp_connector_block,'In1/1', 'Out1/1') tcp_connector_tracking_i_In1 = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/In1']; tcp_connector_tracking_i_Out1 = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/Out1']; delete_block(tcp_connector_tracking_i_In1); delete_block(tcp_connector_tracking_i_Out1); %Add to the TCP connector block the receiver, the tracking and the %transmitter blocks tcp_connector_tracking_rx_block = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/gnss_sdr_galileo_e1_tcp_connector_tracking_rx']; tcp_connector_tracking_block = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/',tracking_block_name]; tcp_connector_tracking_tx_block = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/gnss_sdr_galileo_e1_tcp_connector_tracking_tx']; add_block('simulink/User-Defined Functions/gnss_sdr/gnss_sdr_galileo_e1_tcp_connector_tracking_rx',tcp_connector_tracking_rx_block); path_to_tracking_block = ['simulink/User-Defined Functions/gnss_sdr/', tracking_block_name]; add_block(path_to_tracking_block, tcp_connector_tracking_block); add_block('simulink/User-Defined Functions/gnss_sdr/gnss_sdr_galileo_e1_tcp_connector_tracking_tx',tcp_connector_tracking_tx_block); %Connect the receiver block to the tracking block for j=1:num_vars_rx; rx_out_ports =['gnss_sdr_galileo_e1_tcp_connector_tracking_rx/',num2str(j)]; tracking_in_ports =[tracking_block_name,'/',num2str(j)]; add_line(tcp_connector_block, rx_out_ports, tracking_in_ports) end %Connect the tracking block to the transmitter block for k=1:num_vars_tx; tracking_out_ports =[tracking_block_name,'/',num2str(k)]; tx_in_ports =['gnss_sdr_galileo_e1_tcp_connector_tracking_tx/',num2str(k)]; add_line(tcp_connector_block, tracking_out_ports, tx_in_ports) end %Add, place and connect two scopes in the TCP connector block name_scope_1 = [tcp_connector_block,'/Scope']; add_block('simulink/Sinks/Scope', name_scope_1, 'Position', [600 425 650 475]); set_param(name_scope_1, 'NumInputPorts', '5', 'LimitDataPoints', 'off'); add_line(tcp_connector_block, 'gnss_sdr_galileo_e1_tcp_connector_tracking_rx/10', 'Scope/1', 'autorouting','on') add_line(tcp_connector_block, 'gnss_sdr_galileo_e1_tcp_connector_tracking_rx/11', 'Scope/2', 'autorouting','on') tracking_scope_port3 = [tracking_block_name,'/2']; add_line(tcp_connector_block, tracking_scope_port3, 'Scope/3', 'autorouting','on') tracking_scope_port4 = [tracking_block_name,'/3']; add_line(tcp_connector_block, tracking_scope_port4, 'Scope/4', 'autorouting','on') tracking_scope_port5 = [tracking_block_name,'/4']; add_line(tcp_connector_block, tracking_scope_port5, 'Scope/5', 'autorouting','on') name_scope_2 = [tcp_connector_block,'/EPL']; add_block('simulink/Sinks/Scope', name_scope_2, 'Position', [475 500 525 550]); set_param(name_scope_2, 'LimitDataPoints', 'off'); tracking_scope2_port5 = [tracking_block_name,'/5']; add_line(tcp_connector_block, tracking_scope2_port5, 'EPL/1', 'autorouting','on') %Set the TCP receiver parameters tcp_receiver = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/gnss_sdr_galileo_e1_tcp_connector_tracking_rx/RX']; set_param(tcp_receiver, 'Port', num2str(port+i), 'Host', host, 'DataSize', num2str(datasize_RX), 'Timeout', timeout); %Set the TCP transmitter parameters tcp_transmitter = ['gnss_sdr_galileo_e1_tcp_connector_tracking_aux/gnss_sdr_galileo_e1_tcp_connector_tracking_',num2str(i),'/gnss_sdr_galileo_e1_tcp_connector_tracking_tx/TX']; set_param(tcp_transmitter, 'Port', num2str(port+i), 'Host', host,'Timeout', timeout); %New layout coordinates for each block X2 = X0 + floor(i/4)*X_offset; X3 = X1 + floor(i/4)*X_offset; Y2 = Y0 + (i-4*floor(i/4))*Y_offset; Y3 = Y1 + (i-4*floor(i/4))*Y_offset; %Place the block in the layout set_param(tcp_connector_block, 'Position', [X2 Y2 X3 Y3]); end %Set parameters to configure the model Solver set_param('gnss_sdr_galileo_e1_tcp_connector_tracking_aux',... 'SolverType', 'Fixed-step', 'Solver', 'FixedStepDiscrete',... 'FixedStep', 'auto', 'StopTime', 'inf'); %Save the model with a definitive name save_system('gnss_sdr_galileo_e1_tcp_connector_tracking_aux', 'gnss_sdr_galileo_e1_tcp_connector_tracking_ready'); simulink('close'); %Run the Simulink model set_param('gnss_sdr_galileo_e1_tcp_connector_tracking_ready','simulationcommand','start'); end ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootgnss-sdr-0.0.6/src/utils/simulink/Single Thread/README_gnss_sdr_galileo_e1_tcp_connector_tracking.txtgnss-sdr-0.0.6/src/utils/simulink/Single Thread/README_gnss_sdr_galileo_e1_tcp_connector_tracking.tx0000644000175000017500000001433612576764164033104 0ustar carlescarles /*! * \file README.txt * \brief How to add a block to the Simulink Library repository of Matlab, * how to use the "gnss_sdr_galileo_e1_tcp_connector_tracking_start.m" script and how * to replace the tracking block of the library. * * \author David Pubill, 2012. dpubill(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ IMPORTANT: Please, to use this tracking check the configuration file called 'gnss-sdr_galileo_e1_tcp_connector_tracking.conf'. There are two major changes: 1.- Choose the [Galileo_E1_TCP_CONNECTOR_Tracking] tracking algorithm. 2.- Choose a tcp port for channel 0 (e.g. Tracking.port_ch0=2070;) A) HOW TO add a block to the Simulink Library repository of your Matlab installation --------------------------------------------------------------------------------- (These steps should be followed only the first time) 1.- Copy the content of this folder to a folder accessible from Simulink. 2.- In the Matlab Command Window type: >> simulink; to open the Simulink Library Browser. 3.- Right-click on the Simulink/User-Defined Functions of the Simulink Library menu, and click on "Open User-Defined Functions library" (Window_1) 4.- Open the library model 'gnss_sdr_galileo_e1_tcp_connector_tracking_lib.mdl' (Window_2) 5.- If this is not the first time there should be an existing 'gnss-sdr' block in the 'User-Defined Functions' window that should be deleted before drag and drop the new 'gnss_sdr' block (which includes 3 blocks: - 'gnss_sdr_galileo_e1_tcp_connector_tracking_rx' block - 'gnss_sdr_galileo_e1_tcp_connector_tracking' block - 'gnss_sdr_galileo_e1_tcp_connector_tracking_tx' block) from Window_2 to Window_1. A new message should appear: "This library is locked. The action performed requires it to be unlocked". Then, click on the "Unlock" button (the block will be copied) and close Window_2. 6.- Right-click on the 'gnss-sdr' block and click on "Link Options --> Disable link", repeat the action but now clicking on "Link Options --> Break link". This action disables and breaks the link with the original library model. 7.- On Window_1 save the "simulink/User-Defined Functions" library. To do that go to "File > Save". Then, close Window_1. 8.- From "Simulink Library Browser" window, press F5 to refresh and generate the new Simulink Library repository (it may take a few seconds). This completes the installation of the custom Simulink block. B) HOW TO use the "gnss_sdr_galileo_e1_tcp_connector_tracking_start.m" script: ---------------------------------------------------------------- ---------------------- ---------------- ---------------------- | | | gnss_sdr_ | | | | gnss_sdr_galileo_e1_ | | galileo_e1_ | | gnss_sdr_galileo_e1_ | | tcp_connector_ | --> | tcp_connector_ | --> | tcp_connector_ | | tracking_rx | | tracking | | tracking_tx | | | | | | | ---------------------- ---------------- ---------------------- The 'gnss_sdr_galileo_e1_tcp_connector_tracking_start.m' is the script that builds and configures a simulink model for interacting with the GNSS-SDR platform through a TCP communication. 'User parameters' can be modified but, by default, these are the values assigned: %User parameters host = '84.88.61.86'; %Remote IP address (GNSS-SDR computer IP) port = 2070; %Remote port (GNSS-SDR computer port for Ch0) num_vars_rx = 13; %Number of variables expected from GNSS-SDR num_vars_tx = 4; %Number of variable to be transmitted to GNSS-SDR timeout = '10'; %Timeout in seconds 'host', 'port' and 'timeout' parameters configure both 'gnss_sdr_galileo_e1_tcp_connector_tracking_rx' and 'gnss_sdr_galileo_e1_tcp_connector_tracking_tx' blocks. The 'port' parameter sets the base port number for the first channel (ch0). Each of the subsequent channels increases their port by one unit (e.g. ch0_port=2070, ch1_port=2071,...). Also the name of the tracking block can be modified. It must match with the Simulink model name: %Name of the tracking block, it must match the Simulink model name tracking_block_name = 'gnss_sdr_galileo_e1_tcp_connector_tracking'; To run the script just type in the Matlab Command window the following: >>gnss_sdr_galileo_e1_tcp_connector_tracking_start(N); where N must match the number of channels configured in the GNSS-SDR platform. C) HOW TO replace the tracking block of the library ------------------------------------------------ 1.- Open the library model 'gnss_sdr_galileo_e1_tcp_connector_tracking_lib.mdl' 2.- Unlock the library. Click on "Edit > Unlock Library". 3.- Open the "gnss-sdr" block and change the "gnss_sdr_galileo_e1_tcp_connector_tracking" block by another one. If the name is different it must be updated in the "gnss_sdr_galileo_e1_tcp_connector_parallel_tracking_start.m" code (see section B) 4.- Save the new library. 5.- Go to section A and follow the instructions. gnss-sdr-0.0.6/src/utils/simulink/Single Thread/gnss_sdr_tcp_connector_tracking_start.m0000644000175000017500000002030212576764164031012 0ustar carlescarles% /*! % * \file gnss_sdr_tcp_connector_tracking_start.m % * \brief This MATLAB function builds and configures a simulink model % * for interacting with the GNSS-SDR platform through a TCP communication. % * \author David Pubill, 2012. dpubill(at)cttc.es % * % * ---------------------------------------------------------------------- % * % * Copyright (C) 2010-2012 (see AUTHORS file for a list of contributors) % * % * GNSS-SDR is a software defined Global Navigation % * Satellite Systems receiver % * % * This file is part of GNSS-SDR. % * % * GNSS-SDR is free software: you can redistribute it and/or modify % * it under the terms of the GNU General Public License as published by % * the Free Software Foundation, either version 3 of the License, or % * at your option) any later version. % * % * GNSS-SDR is distributed in the hope that it will be useful, % * but WITHOUT ANY WARRANTY; without even the implied warranty of % * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % * GNU General Public License for more details. % * % * You should have received a copy of the GNU General Public License % * along with GNSS-SDR. If not, see . % * % * ---------------------------------------------------------------------- % */ function gnss_sdr_tcp_connector_tracking_start(num_channels) %User parameters host = '84.88.61.86'; %Remote IP address (GNSS-SDR computer IP) port = 2070; %Remote port (GNSS-SDR computer port for Ch0) num_vars_rx = 9; %Number of variables expected from GNSS-SDR num_vars_tx = 4; %Number of variable to be transmitted to GNSS-SDR timeout = '40'; %Timeout [s] %name of the tracking block, it must match the name of the Simulink %model tracking_block_name = 'gnss_sdr_tcp_connector_tracking'; % Layout coordinates for the first gnss_sdr_tcp_connector_tracking % block and offset definitions X0 = 20; X1 = 170; Y0 = 20; Y1 = 140; X_offset = 200; Y_offset = 160; %Calculate the size of the data received from GNSS-SDR %(float = 4 bytes each variable) datasize_RX = num_vars_rx*4; %Create a Simulink model simulink('open'); new_system('gnss_sdr_tcp_connector_tracking_aux'); open_system('gnss_sdr_tcp_connector_tracking_aux'); %Set parameters to avoid warnings in the Command Window set_param('gnss_sdr_tcp_connector_tracking_aux',... 'InheritedTsInSrcMsg', 'none'); warning('off', 'Simulink:Commands:SetParamLinkChangeWarn'); %Assign values to the variables used by Simulink in the base workspace assignin('base', 'Ti', 1e-3); assignin('base', 'f0', 1.57542e9); assignin('base', 'SFunSlope', 3.5); assignin('base', 'Tc', 4e-3/4092); assignin('base', 'T', 1e-3); assignin('base', 'B_PLL', 50); assignin('base', 'B_DLL', 2); %Block generation from the Simulink Library for i = 0:num_channels-1; %Add and prepare an empty block to become the TCP connector block tcp_connector_block=['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_', num2str(i)]; add_block('simulink/Ports & Subsystems/Subsystem', tcp_connector_block); delete_line(tcp_connector_block,'In1/1', 'Out1/1') tcp_connector_tracking_i_In1 = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/In1']; tcp_connector_tracking_i_Out1 = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/Out1']; delete_block(tcp_connector_tracking_i_In1); delete_block(tcp_connector_tracking_i_Out1); %Add to the TCP connector block the receiver, the tracking and the %transmitter blocks tcp_connector_tracking_rx_block = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/gnss_sdr_tcp_connector_tracking_rx']; tcp_connector_tracking_block = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/',tracking_block_name]; tcp_connector_tracking_tx_block = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/gnss_sdr_tcp_connector_tracking_tx']; add_block('simulink/User-Defined Functions/gnss_sdr/gnss_sdr_tcp_connector_tracking_rx',tcp_connector_tracking_rx_block); path_to_tracking_block = ['simulink/User-Defined Functions/gnss_sdr/', tracking_block_name]; add_block(path_to_tracking_block, tcp_connector_tracking_block); add_block('simulink/User-Defined Functions/gnss_sdr/gnss_sdr_tcp_connector_tracking_tx',tcp_connector_tracking_tx_block); %Connect the receiver block to the tracking block for j=1:num_vars_rx; rx_out_ports =['gnss_sdr_tcp_connector_tracking_rx/',num2str(j)]; tracking_in_ports =[tracking_block_name,'/',num2str(j)]; add_line(tcp_connector_block, rx_out_ports, tracking_in_ports) end %Connect the tracking block to the transmitter block for k=1:num_vars_tx; tracking_out_ports =[tracking_block_name,'/',num2str(k)]; tx_in_ports =['gnss_sdr_tcp_connector_tracking_tx/',num2str(k)]; add_line(tcp_connector_block, tracking_out_ports, tx_in_ports) end %Add, place and connect two scopes in the TCP connector block name_scope_1 = [tcp_connector_block,'/Scope']; add_block('simulink/Sinks/Scope', name_scope_1, 'Position', [500 300 550 350]); set_param(name_scope_1, 'NumInputPorts', '4', 'LimitDataPoints', 'off'); add_line(tcp_connector_block, 'gnss_sdr_tcp_connector_tracking_rx/9', 'Scope/1', 'autorouting','on') tracking_scope_port2 = [tracking_block_name,'/2']; add_line(tcp_connector_block, tracking_scope_port2, 'Scope/2', 'autorouting','on') tracking_scope_port3 = [tracking_block_name,'/3']; add_line(tcp_connector_block, tracking_scope_port3, 'Scope/3', 'autorouting','on') tracking_scope_port4 = [tracking_block_name,'/4']; add_line(tcp_connector_block, tracking_scope_port4, 'Scope/4', 'autorouting','on') name_scope_2 = [tcp_connector_block,'/EPL']; add_block('simulink/Sinks/Scope', name_scope_2, 'Position', [500 400 550 450]); set_param(name_scope_2, 'LimitDataPoints', 'off'); tracking_scope2_port5 = [tracking_block_name,'/5']; add_line(tcp_connector_block, tracking_scope2_port5, 'EPL/1', 'autorouting','on') %Set the TCP receiver parameters tcp_receiver = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/gnss_sdr_tcp_connector_tracking_rx/RX']; set_param(tcp_receiver, 'Port', num2str(port+i), 'Host', host, 'DataSize', num2str(datasize_RX), 'Timeout', timeout); %Set the TCP transmitter parameters tcp_transmitter = ['gnss_sdr_tcp_connector_tracking_aux/gnss_sdr_tcp_connector_tracking_',num2str(i),'/gnss_sdr_tcp_connector_tracking_tx/TX']; set_param(tcp_transmitter, 'Port', num2str(port+i), 'Host', host,'Timeout', timeout); %New layout coordinates for each block X2 = X0 + floor(i/4)*X_offset; X3 = X1 + floor(i/4)*X_offset; Y2 = Y0 + (i-4*floor(i/4))*Y_offset; Y3 = Y1 + (i-4*floor(i/4))*Y_offset; %Place the block in the layout set_param(tcp_connector_block, 'Position', [X2 Y2 X3 Y3]); end %Set parameters to configure the model Solver set_param('gnss_sdr_tcp_connector_tracking_aux',... 'SolverType', 'Fixed-step', 'Solver', 'FixedStepDiscrete',... 'FixedStep', 'auto', 'StopTime', 'inf'); %Save the model with a definitive name save_system('gnss_sdr_tcp_connector_tracking_aux', 'gnss_sdr_tcp_connector_tracking_ready'); simulink('close'); %Run the Simulink model set_param('gnss_sdr_tcp_connector_tracking_ready','simulationcommand','start'); end gnss-sdr-0.0.6/src/main/0000755000175000017500000000000012576764164014316 5ustar carlescarlesgnss-sdr-0.0.6/src/main/CMakeLists.txt0000644000175000017500000001151312576764164017057 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(GNSS_SDR_OPTIONAL_LIBS "") set(GNSS_SDR_OPTIONAL_HEADERS "") if(ENABLE_GPERFTOOLS) if(GPERFTOOLS_FOUND) #set(GNSS_SDR_OPTIONAL_LIBS "${GNSS_SDR_OPTIONAL_LIBS};${GPERFTOOLS_LIBRARIES}") set(GNSS_SDR_OPTIONAL_LIBS "${GNSS_SDR_OPTIONAL_LIBS};${GPERFTOOLS_PROFILER};${GPERFTOOLS_TCMALLOC}") set(GNSS_SDR_OPTIONAL_HEADERS "${GNSS_SDR_OPTIONAL_HEADERS};${GPERFTOOLS_INCLUDE_DIR}") endif(GPERFTOOLS_FOUND) endif(ENABLE_GPERFTOOLS) if(ENABLE_UHD) set(GNSS_SDR_OPTIONAL_LIBS ${GNSS_SDR_OPTIONAL_LIBS} ${UHD_LIBRARIES} ${GNURADIO_UHD_LIBRARIES}) set(GNSS_SDR_OPTIONAL_HEADERS ${GNSS_SDR_OPTIONAL_HEADERS} ${UHD_INCLUDE_DIRS}) endif(ENABLE_UHD) if(ENABLE_CUDA) add_definitions(-DCUDA_GPU_ACCEL=1) set(GNSS_SDR_OPTIONAL_LIBS ${GNSS_SDR_OPTIONAL_LIBS} ${CUDA_LIBRARIES}) set(GNSS_SDR_OPTIONAL_HEADERS ${GNSS_SDR_OPTIONAL_HEADERS} ${CUDA_INCLUDE_DIRS}) endif(ENABLE_CUDA) include_directories( ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/receiver ${CMAKE_SOURCE_DIR}/src/core/libs ${CMAKE_SOURCE_DIR}/src/core/libs/supl ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${ARMADILLO_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${GNSS_SDR_OPTIONAL_HEADERS} ${VOLK_GNSSSDR_INCLUDE_DIRS} ${OPT_GNSSSDR_INCLUDE_DIRS} ) add_definitions( -DGNSS_SDR_VERSION="${VERSION}" ) if(OS_IS_MACOSX) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(MAC_LIBRARIES "-stdlib=libc++ -std=c++11 -framework Accelerate -lc++") endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") endif(OS_IS_MACOSX) add_executable(gnss-sdr ${CMAKE_CURRENT_SOURCE_DIR}/main.cc) add_custom_command(TARGET gnss-sdr POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_SOURCE_DIR}/install/$ ) target_link_libraries(gnss-sdr ${MAC_LIBRARIES} ${Boost_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FFT_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} ${GFlags_LIBS} ${GLOG_LIBRARIES} ${ARMADILLO_LIBRARIES} ${VOLK_GNSSSDR_LIBRARIES} ${ORC_LIBRARIES} ${GNSS_SDR_OPTIONAL_LIBS} gnss_sp_libs gnss_rx ) install(TARGETS gnss-sdr RUNTIME DESTINATION bin COMPONENT "gnss-sdr" ) install(DIRECTORY ${CMAKE_SOURCE_DIR}/conf DESTINATION share/gnss-sdr FILES_MATCHING PATTERN "*.conf" ) install(FILES ${CMAKE_SOURCE_DIR}/conf/gnss-sdr.conf DESTINATION share/gnss-sdr/conf RENAME default.conf) if(NOT VOLK_GNSSSDR_FOUND) install(PROGRAMS ${CMAKE_BINARY_DIR}/volk_gnsssdr_module/build/apps/volk_gnsssdr_profile DESTINATION bin) endif(NOT VOLK_GNSSSDR_FOUND) find_program(GZIP gzip /bin /usr/bin /usr/local/bin /opt/local/bin /sbin ) if(NOT GZIP_NOTFOUND) execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/docs/manpage/gnss-sdr-manpage WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE "${CMAKE_BINARY_DIR}/gnss-sdr.1.gz") install(FILES ${CMAKE_BINARY_DIR}/gnss-sdr.1.gz DESTINATION share/man/man1) if(NOT VOLK_GNSSSDR_FOUND) execute_process(COMMAND gzip -9 -c ${CMAKE_SOURCE_DIR}/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Packaging/volk_gnsssdr_profile-manpage WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_FILE "${CMAKE_BINARY_DIR}/volk_gnsssdr_profile.1.gz") install(FILES ${CMAKE_BINARY_DIR}/volk_gnsssdr_profile.1.gz DESTINATION share/man/man1) endif(NOT VOLK_GNSSSDR_FOUND) endif(NOT GZIP_NOTFOUND) gnss-sdr-0.0.6/src/main/main.cc0000644000175000017500000002021112576764164015545 0ustar carlescarles/*! * \file main.cc * \brief Main file of the GNSS-SDR program. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * It sets up the logging system, creates a ControlThread object, * makes it run, and releases memory back when the main thread has ended. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_VERSION #define GNSS_SDR_VERSION "0.0.6" #endif #ifndef GOOGLE_STRIP_LOG #define GOOGLE_STRIP_LOG 0 #endif #include #include #include #include #include #include #include #include #include #include #include #include "control_thread.h" #include "concurrent_queue.h" #include "concurrent_map.h" #include "gps_ephemeris.h" #include "gps_cnav_ephemeris.h" #include "gps_almanac.h" #include "gps_iono.h" #include "gps_cnav_iono.h" #include "gps_utc_model.h" #include "galileo_ephemeris.h" #include "galileo_almanac.h" #include "galileo_iono.h" #include "galileo_utc_model.h" #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" #include "sbas_satellite_correction.h" #include "sbas_ephemeris.h" #include "sbas_time.h" #if CUDA_GPU_ACCEL // For the CUDA runtime routines (prefixed with "cuda_") #include #endif using google::LogMessage; DECLARE_string(log_dir); /*! * \todo make this queue generic for all the GNSS systems (javi) */ /* * Concurrent queues that communicates the Telemetry Decoder * to the Observables modules */ // For GPS NAVIGATION (L1) concurrent_queue global_gps_ephemeris_queue; concurrent_queue global_gps_iono_queue; concurrent_queue global_gps_utc_model_queue; concurrent_queue global_gps_almanac_queue; concurrent_queue global_gps_acq_assist_queue; concurrent_queue global_gps_ref_location_queue; concurrent_queue global_gps_ref_time_queue; concurrent_map global_gps_ephemeris_map; concurrent_map global_gps_iono_map; concurrent_map global_gps_utc_model_map; concurrent_map global_gps_almanac_map; concurrent_map global_gps_acq_assist_map; concurrent_map global_gps_ref_time_map; concurrent_map global_gps_ref_location_map; // For GPS NAVIGATION (L2) concurrent_queue global_gps_cnav_ephemeris_queue; concurrent_map global_gps_cnav_ephemeris_map; concurrent_queue global_gps_cnav_iono_queue; concurrent_map global_gps_cnav_iono_map; // For GALILEO NAVIGATION concurrent_queue global_galileo_ephemeris_queue; concurrent_queue global_galileo_iono_queue; concurrent_queue global_galileo_utc_model_queue; concurrent_queue global_galileo_almanac_queue; concurrent_map global_galileo_ephemeris_map; concurrent_map global_galileo_iono_map; concurrent_map global_galileo_utc_model_map; concurrent_map global_galileo_almanac_map; // For SBAS CORRECTIONS concurrent_queue global_sbas_raw_msg_queue; concurrent_queue global_sbas_iono_queue; concurrent_queue global_sbas_sat_corr_queue; concurrent_queue global_sbas_ephemeris_queue; concurrent_map global_sbas_iono_map; concurrent_map global_sbas_sat_corr_map; concurrent_map global_sbas_ephemeris_map; int main(int argc, char** argv) { const std::string intro_help( std::string("\nGNSS-SDR is an Open Source GNSS Software Defined Receiver\n") + "Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)\n" + "This program comes with ABSOLUTELY NO WARRANTY;\n" + "See COPYING file to see a copy of the General Public License\n \n"); const std::string gnss_sdr_version(GNSS_SDR_VERSION); google::SetUsageMessage(intro_help); google::SetVersionString(gnss_sdr_version); google::ParseCommandLineFlags(&argc, &argv, true); std::cout << "Initializing GNSS-SDR v" << gnss_sdr_version << " ... Please wait." << std::endl; #if CUDA_GPU_ACCEL // Reset the device // cudaDeviceReset causes the driver to clean up all state. While // not mandatory in normal operation, it is good practice. It is also // needed to ensure correct operation when the application is being // profiled. Calling cudaDeviceReset causes all profile data to be // flushed before the application exits cudaDeviceReset(); std::cout << "Reset CUDA device done " << std::endl; #endif if(GOOGLE_STRIP_LOG == 0) { google::InitGoogleLogging(argv[0]); if (FLAGS_log_dir.empty()) { std::cout << "Logging will be done at " << boost::filesystem::temp_directory_path() << std::endl << "Use gnss-sdr --log_dir=/path/to/log to change that." << std::endl; } else { const boost::filesystem::path p (FLAGS_log_dir); if (!boost::filesystem::exists(p)) { std::cout << "The path " << FLAGS_log_dir << " does not exist, attempting to create it." << std::endl; boost::system::error_code ec; boost::filesystem::create_directory(p, ec); if(ec != 0) { std::cout << "Could not create the " << FLAGS_log_dir << " folder. GNSS-SDR program ended." << std::endl; google::ShutDownCommandLineFlags(); std::exit(0); } } std::cout << "Logging with be done at " << FLAGS_log_dir << std::endl; } } std::unique_ptr control_thread(new ControlThread()); // record startup time struct timeval tv; gettimeofday(&tv, NULL); long long int begin = tv.tv_sec * 1000000 + tv.tv_usec; try { control_thread->run(); } catch( boost::exception & e ) { LOG(FATAL) << "Boost exception: " << boost::diagnostic_information(e); } catch(std::exception const& ex) { LOG(FATAL) << "STD exception: " << ex.what(); } catch(...) { LOG(INFO) << "Unexpected catch"; } // report the elapsed time gettimeofday(&tv, NULL); long long int end = tv.tv_sec * 1000000 + tv.tv_usec; std::cout << "Total GNSS-SDR run time " << (static_cast(end - begin)) / 1000000.0 << " [seconds]" << std::endl; google::ShutDownCommandLineFlags(); std::cout << "GNSS-SDR program ended." << std::endl; } gnss-sdr-0.0.6/src/core/0000755000175000017500000000000012576764164014322 5ustar carlescarlesgnss-sdr-0.0.6/src/core/interfaces/0000755000175000017500000000000012576764164016445 5ustar carlescarlesgnss-sdr-0.0.6/src/core/interfaces/pvt_interface.h0000644000175000017500000000375712576764164021463 0ustar carlescarles/*! * \file pvt_interface.h * \brief This class represents an interface to a PVT block. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Abstract class for PVT solvers. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_PVT_INTERFACE_H_ #define GNSS_SDR_PVT_INTERFACE_H_ #include "gnss_block_interface.h" /*! * \brief This class represents an interface to a PVT block. * * Abstract class for PVT interfaces, derived from GNSSBlockInterface. * Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class PvtInterface : public GNSSBlockInterface { public: virtual void reset() = 0; }; #endif /* GNSS_SDR_PVT_INTERFACE_H_ */ gnss-sdr-0.0.6/src/core/interfaces/acquisition_interface.h0000644000175000017500000000537712576764164023202 0ustar carlescarles/*! * \file acquisition_interface.h * \brief Header file of the interface to an acquisition GNSS block. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2011. luis(at)epsilon-formacion.com * * This header file contains the interface to an abstract class * for acquisition algorithms. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_ACQUISITION_INTERFACE_H_ #define GNSS_SDR_ACQUISITION_INTERFACE_H_ #include "gnss_block_interface.h" #include "gnss_synchro.h" templateclass concurrent_queue; /*! \brief This abstract class represents an interface to an acquisition GNSS block. * * Abstract class for acquisition algorithms. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class AcquisitionInterface: public GNSSBlockInterface { public: //virtual void set_active(bool active) = 0; virtual void set_gnss_synchro(Gnss_Synchro* gnss_synchro) = 0; virtual void set_channel(unsigned int channel) = 0; virtual void set_threshold(float threshold) = 0; virtual void set_doppler_max(unsigned int doppler_max) = 0; virtual void set_doppler_step(unsigned int doppler_step) = 0; virtual void set_channel_queue(concurrent_queue *channel_internal_queue) = 0; virtual void init() = 0; virtual void set_local_code() = 0; virtual signed int mag() = 0; virtual void reset() = 0; }; #endif /* GNSS_SDR_ACQUISITION_INTERFACE */ gnss-sdr-0.0.6/src/core/interfaces/telemetry_decoder_interface.h0000644000175000017500000000430412576764164024336 0ustar carlescarles/*! * \file telemetry_decoder_interface.h * \brief This class represents an interface to a telemetry decoder block. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Abstract class for telemetry decoders. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TELEMETRY_DECODER_INTERFACE_H_ #define GNSS_SDR_TELEMETRY_DECODER_INTERFACE_H_ #include "gnss_block_interface.h" #include "gnss_satellite.h" /*! * \brief This abstract class represents an interface to a navigation GNSS block. * * Abstract class for navigation interfaces. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class TelemetryDecoderInterface : public GNSSBlockInterface { public: virtual void reset() = 0; virtual void set_satellite(Gnss_Satellite sat) = 0; virtual void set_channel(int channel) = 0; }; #endif /* GNSS_SDR_TELEMETRY_DECODER_INTERFACE_H_ */ gnss-sdr-0.0.6/src/core/interfaces/channel_interface.h0000644000175000017500000000445512576764164022256 0ustar carlescarles/*! * \file channel_interface.h * \brief This class represents an interface to a channel GNSS block. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2011. luis(at)epsilon-formacion.com * * Abstract class for channel blocks. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CHANNEL_INTERFACE_H_ #define GNSS_SDR_CHANNEL_INTERFACE_H_ #include "gnss_block_interface.h" #include "gnss_signal.h" /*! * \brief This abstract class represents an interface to a channel GNSS block. * * Abstract class for channel blocks. Since all its methods are pure virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class ChannelInterface: public GNSSBlockInterface { public: virtual Gnss_Signal get_signal() const = 0; virtual void start_acquisition() = 0; virtual void set_signal(const Gnss_Signal&) = 0; virtual void start() = 0; virtual void standby() = 0; virtual void stop() = 0; }; #endif /* GNSS_SDR_CHANNEL_INTERFACE_H_ */ gnss-sdr-0.0.6/src/core/interfaces/observables_interface.h0000644000175000017500000000410112576764164023141 0ustar carlescarles/*! * \file observables_interface.h * \brief This class represents an interface to an Observables block. * \author Javier Arribas, 2011. jarribas(at)cttc.es * * Abstract class for Observables modules. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_OBSERVABLES_INTERFACE_H_ #define GNSS_SDR_OBSERVABLES_INTERFACE_H_ #include "gnss_block_interface.h" /*! * \brief This abstract class represents an interface to an observables block. * * Abstract class for pseudorange_intefaces, derived from GNSSBlockInterface. * Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class ObservablesInterface : public GNSSBlockInterface { public: virtual void reset() = 0; }; #endif /* GNSS_SDR_OBSERVABLES_INTERFACE_H_ */ gnss-sdr-0.0.6/src/core/interfaces/gnss_block_interface.h0000644000175000017500000000553312576764164022770 0ustar carlescarles/*! * \file gnss_block_interface.h * \brief This interface represents a GNSS block. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * Abstract class for GNSS block interfaces. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_BLOCK_INTERFACE_H_ #define GNSS_SDR_GNSS_BLOCK_INTERFACE_H_ #include #include #include /*! * \brief This abstract class represents an interface to GNSS blocks. * * Abstract class for GNSS block interfaces. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class GNSSBlockInterface { public: virtual ~GNSSBlockInterface() {} virtual std::string role() = 0; virtual std::string implementation() = 0; virtual size_t item_size() = 0; virtual void connect(gr::top_block_sptr top_block) = 0; virtual void disconnect(gr::top_block_sptr top_block) = 0; virtual gr::basic_block_sptr get_left_block() = 0; virtual gr::basic_block_sptr get_right_block() = 0; virtual gr::basic_block_sptr get_left_block(int RF_channel) { assert(RF_channel >= 0); if (RF_channel == 0){}; // avoid unused param warning return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0; } virtual gr::basic_block_sptr get_right_block(int RF_channel) { assert(RF_channel >= 0); if (RF_channel == 0){}; // avoid unused param warning return NULL; // added to support raw array access (non pure virtual to allow left unimplemented)= 0; } }; #endif /*GNSS_SDR_GNSS_BLOCK_INTERFACE_H_*/ gnss-sdr-0.0.6/src/core/interfaces/configuration_interface.h0000644000175000017500000000546312576764164023515 0ustar carlescarles/*! * \file configuration_interface.h * \brief This class represents an interface to configuration parameters. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * The interface defines an accessor method that gets a parameter name as input * and returns the value of this parameter, a string, as output. * Property names are defined here. This is an abstract class for interfaces. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CONFIGURATION_INTERFACE_H_ #define GNSS_SDR_CONFIGURATION_INTERFACE_H_ #include /*! * \brief This abstract class represents an interface to configuration parameters. * * The interface defines an accessor method that gets a parameter name as input * and returns the value of this parameter, a string, as output. * Property names are defined here. This is an abstract class for interfaces. * Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. */ class ConfigurationInterface { public: virtual ~ConfigurationInterface() {} virtual std::string property(std::string property_name, std::string default_value) = 0; virtual bool property(std::string property_name, bool default_value) = 0; virtual long property(std::string property_name, long default_value) = 0; virtual int property(std::string property_name, int default_value) = 0; virtual unsigned int property(std::string property_name, unsigned int default_value) = 0; virtual float property(std::string property_name, float default_value) = 0; virtual double property(std::string property_name, double default_value) = 0; virtual void set_property(std::string property_name, std::string value) = 0; }; #endif /*GNSS_SDR_CONFIGURATION_INTERFACE_H_*/ gnss-sdr-0.0.6/src/core/interfaces/tracking_interface.h0000644000175000017500000000447012576764164022445 0ustar carlescarles/*! * \file tracking_interface.h * \brief This class represents an interface to a tracking block. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * Abstract class for tracking interfaces. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_TRACKING_INTERFACE_H_ #define GNSS_SDR_TRACKING_INTERFACE_H_ #include "gnss_block_interface.h" #include "gnss_synchro.h" templateclass concurrent_queue; /*! * \brief This abstract class represents an interface to a tracking block. * * Abstract class for tracking interfaces. Since all its methods are virtual, * this class cannot be instantiated directly, and a subclass can only be * instantiated directly if all inherited pure virtual methods have been * implemented by that class or a parent class. * */ class TrackingInterface : public GNSSBlockInterface { public: virtual void start_tracking() = 0; virtual void set_gnss_synchro(Gnss_Synchro* gnss_synchro) = 0; virtual void set_channel(unsigned int channel) = 0; virtual void set_channel_queue(concurrent_queue *channel_internal_queue) = 0; }; #endif /* GNSS_SDR_TRACKING_INTERFACE_H_ */ gnss-sdr-0.0.6/src/core/CMakeLists.txt0000644000175000017500000000146512576764164017070 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(system_parameters) add_subdirectory(libs) add_subdirectory(receiver) gnss-sdr-0.0.6/src/core/libs/0000755000175000017500000000000012576764164015253 5ustar carlescarlesgnss-sdr-0.0.6/src/core/libs/INIReader.cc0000644000175000017500000000741012576764164017326 0ustar carlescarles/*! * \file INIReader.cc * \brief This class reads an INI file into easy-to-access name/value pairs. * \author Brush Technologies, 2009. * * inih (INI Not Invented Here) is a simple .INI file parser written in C++. * It's only a couple of pages of code, and it was designed to be small * and simple, so it's good for embedded systems. To use it, just give * ini_parse() an INI file, and it will call a callback for every * name=value pair parsed, giving you strings for the section, name, * and value. It's done this way because it works well on low-memory * embedded systems, but also because it makes for a KISS implementation. * * ------------------------------------------------------------------------- * inih and INIReader are released under the New BSD license: * * Copyright (c) 2009, Brush Technology * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Brush Technology 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 BRUSH TECHNOLOGY ''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 BRUSH TECHNOLOGY 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. * * Go to the project home page for more info: * * http://code.google.com/p/inih/ * ------------------------------------------------------------------------- */ #include #include #include "ini.h" #include "INIReader.h" using std::string; INIReader::INIReader(string filename) { _error = ini_parse(filename.c_str(), ValueHandler, this); } int INIReader::ParseError() { return _error; } string INIReader::Get(string section, string name, string default_value) { string key = MakeKey(section, name); return _values.count(key) ? _values[key] : default_value; } long INIReader::GetInteger(string section, string name, long default_value) { string valstr = Get(section, name, ""); const char* value = valstr.c_str(); char* end; // This parses "1234" (decimal) and also "0x4D2" (hex) long n = strtol(value, &end, 0); return end > value ? n : default_value; } string INIReader::MakeKey(string section, string name) { string key = section + "." + name; // Convert to lower case to make lookups case-insensitive for (unsigned int i = 0; i < key.length(); i++) key[i] = tolower(key[i]); return key; } int INIReader::ValueHandler(void* user, const char* section, const char* name, const char* value) { INIReader* reader = (INIReader*)user; reader->_values[MakeKey(section, name)] = value; return 1; } gnss-sdr-0.0.6/src/core/libs/gnss_sdr_supl_client.cc0000644000175000017500000005516512576764164022021 0ustar carlescarles/*! * \file gnss_sdr_supl_client.c * \brief class that implements a C++ interface to external Secure User Location Protocol (SUPL) client library. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * TODO: put here supl.c author info * class that implements a C++ interface to external Secure User Location Protocol (SUPL) client library. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_sdr_supl_client.h" #include gnss_sdr_supl_client::gnss_sdr_supl_client() { mcc = 0; mns = 0; lac = 0; ci = 0; supl_ctx_new(&ctx); assist = {0}; server_port = 0; request = 0; } gnss_sdr_supl_client::~gnss_sdr_supl_client() {} void gnss_sdr_supl_client::print_assistance() { if (assist.set & SUPL_RRLP_ASSIST_REFTIME) { fprintf(stdout, "T %ld %ld %ld %ld\n", assist.time.gps_week, assist.time.gps_tow, assist.time.stamp.tv_sec, assist.time.stamp.tv_usec); } if (assist.set & SUPL_RRLP_ASSIST_UTC) { fprintf(stdout, "U %d %d %d %d %d %d %d %d\n", assist.utc.a0, assist.utc.a1, assist.utc.delta_tls, assist.utc.tot, assist.utc.wnt, assist.utc.wnlsf, assist.utc.dn, assist.utc.delta_tlsf); } if (assist.set & SUPL_RRLP_ASSIST_REFLOC) { fprintf(stdout, "L %f %f %d\n", assist.pos.lat, assist.pos.lon, assist.pos.uncertainty); } if (assist.set & SUPL_RRLP_ASSIST_IONO) { fprintf(stdout, "I %d %d %d %d %d %d %d %d\n", assist.iono.a0, assist.iono.a1, assist.iono.a2, assist.iono.a3, assist.iono.b0, assist.iono.b1, assist.iono.b2, assist.iono.b3); } if (assist.cnt_eph) { int i; fprintf(stdout, "E %d\n", assist.cnt_eph); for (i = 0; i < assist.cnt_eph; i++) { struct supl_ephemeris_s *e = &assist.eph[i]; fprintf(stdout, "e %d %d %d %d %d %d %d %d %d %d", e->prn, e->delta_n, e->M0, e->A_sqrt, e->OMEGA_0, e->i0, e->w, e->OMEGA_dot, e->i_dot, e->e); fprintf(stdout, " %d %d %d %d %d %d", e->Cuc, e->Cus, e->Crc, e->Crs, e->Cic, e->Cis); fprintf(stdout, " %d %d %d %d %d %d", e->toe, e->IODC, e->toc, e->AF0, e->AF1, e->AF2); fprintf(stdout, " %d %d %d %d %d\n", e->bits, e->ura, e->health, e->tgd, e->AODA); } } if (assist.cnt_alm) { int i; fprintf(stdout, "A %d\n", assist.cnt_alm); for (i = 0; i < assist.cnt_alm; i++) { struct supl_almanac_s *a = &assist.alm[i]; fprintf(stdout, "a %d %d %d %d %d ", a->prn, a->e, a->toa, a->Ksii, a->OMEGA_dot); fprintf(stdout, "%d %d %d %d %d %d\n", a->A_sqrt, a->OMEGA_0, a->w, a->M0, a->AF0, a->AF1); } } if (assist.cnt_acq) { int i; fprintf(stdout, "Q %d %d\n", assist.cnt_acq, assist.acq_time); for (i = 0; i < assist.cnt_acq; i++) { struct supl_acquis_s *q = &assist.acq[i]; fprintf(stdout, "q %d %d %d ", q->prn, q->parts, q->doppler0); if (q->parts & SUPL_ACQUIS_DOPPLER) { fprintf(stdout, "%d %d ", q->doppler1, q->d_win); } else { fprintf(stdout, "0 0 "); } fprintf(stdout, "%d %d %d %d ", q->code_ph, q->code_ph_int, q->bit_num, q->code_ph_win); if (q->parts & SUPL_ACQUIS_ANGLE) { fprintf(stdout, "%d %d\n", q->az, q->el); } else { fprintf(stdout, "0 0\n"); } } } } int gnss_sdr_supl_client::get_assistance(int i_mcc, int i_mns, int i_lac, int i_ci) { // SET SUPL CLIENT INFORMATION // GSM CELL PARAMETERS mcc = i_mcc; mns = i_mns; lac = i_lac; ci = i_ci; if (supl_ctx_new(&ctx)) {} // clean it before using supl_set_gsm_cell(&ctx, mcc, mns, lac, ci); // PERFORM SUPL COMMUNICATION char *cstr = new char[server_name.length() + 1]; strcpy(cstr, server_name.c_str()); int err; ctx.p.request = request; // select assistance info request from a pre-defined set //std::cout<<"mcc="<::iterator gps_almanac_iterator; for (int i = 0; i < assist.cnt_alm; i++) { struct supl_almanac_s *a = &assist.alm[i]; // Check if the SV is present in the map gps_almanac_iterator = this->gps_almanac_map.find(a->prn); // the SV is not present in the almanac data -> insert new SV register if (gps_almanac_iterator==gps_almanac_map.end()) { Gps_Almanac gps_almanac_entry; gps_almanac_map.insert(std::pair(a->prn, gps_almanac_entry)); gps_almanac_iterator = this->gps_almanac_map.find(a->prn); } gps_almanac_iterator->second.i_satellite_PRN = a->prn; gps_almanac_iterator->second.d_A_f0 = ((double)a->AF0)*pow(2.0, -20); gps_almanac_iterator->second.d_A_f1 = ((double)a->AF1)*pow(2.0, -38); gps_almanac_iterator->second.d_Delta_i = ((double)a->Ksii)*pow(2.0, -19); gps_almanac_iterator->second.d_OMEGA = ((double)a->w)*pow(2.0, -23); gps_almanac_iterator->second.d_OMEGA0 = ((double)a->OMEGA_0)*pow(2.0, -23); gps_almanac_iterator->second.d_sqrt_A = ((double)a->A_sqrt)*pow(2.0, -11); gps_almanac_iterator->second.d_OMEGA_DOT = ((double)a->OMEGA_dot)*pow(2.0, -38); gps_almanac_iterator->second.d_Toa = ((double)a->toa)*pow(2.0, 12); gps_almanac_iterator->second.d_e_eccentricity = ((double)a->toa)*pow(2.0, -21); gps_almanac_iterator->second.d_M_0 = ((double)a->M0)*pow(2.0, -23); } } // READ SV EPHEMERIS if (assist.cnt_eph) { std::map::iterator gps_eph_iterator; for (int i = 0; i < assist.cnt_eph; i++) { struct supl_ephemeris_s *e = &assist.eph[i]; // Check if the SV is present in the map gps_eph_iterator = this->gps_ephemeris_map.find(e->prn); // the SV is not present in the assistance data -> insert new SV register if (gps_eph_iterator == gps_ephemeris_map.end()) { Gps_Ephemeris gps_eph; gps_ephemeris_map.insert(std::pair(e->prn, gps_eph)); gps_eph_iterator = this->gps_ephemeris_map.find(e->prn); } if (gps_time.valid) { gps_eph_iterator->second.i_GPS_week = assist.time.gps_week; /* TS 44.031: GPSTOW, range 0-604799.92, resolution 0.08 sec, 23-bit presentation */ gps_eph_iterator->second.d_TOW = ((double)assist.time.gps_tow)*0.08; } else { gps_eph_iterator->second.i_GPS_week = 0; gps_eph_iterator->second.d_TOW = 0; } gps_eph_iterator->second.i_satellite_PRN = e->prn; // SV navigation model gps_eph_iterator->second.i_code_on_L2 = e->bits; gps_eph_iterator->second.i_SV_accuracy = e->ura; //User Range Accuracy (URA) gps_eph_iterator->second.i_SV_health = e->health; gps_eph_iterator->second.d_IODC = (double)e->IODC; //miss P flag (1 bit) //miss SF1 Reserved (87 bits) gps_eph_iterator->second.d_TGD = ((double)e->tgd)*T_GD_LSB; gps_eph_iterator->second.d_Toc = ((double)e->toc)*T_OC_LSB; gps_eph_iterator->second.d_A_f0 = ((double)e->AF0)*A_F0_LSB; gps_eph_iterator->second.d_A_f1 = ((double)e->AF1)*A_F1_LSB; gps_eph_iterator->second.d_A_f2 = ((double)e->AF2)*A_F2_LSB; gps_eph_iterator->second.d_Crc = ((double)e->Crc)*C_RC_LSB; gps_eph_iterator->second.d_Delta_n = ((double)e->delta_n)*DELTA_N_LSB; gps_eph_iterator->second.d_M_0 = ((double)e->M0)*M_0_LSB; gps_eph_iterator->second.d_Cuc = ((double)e->Cuc)*C_UC_LSB; gps_eph_iterator->second.d_e_eccentricity = ((double)e->e)*E_LSB; gps_eph_iterator->second.d_Cus = ((double)e->Cus)*C_US_LSB; gps_eph_iterator->second.d_sqrt_A = ((double)e->A_sqrt)*SQRT_A_LSB; gps_eph_iterator->second.d_Toe = ((double)e->toe)*T_OE_LSB; //miss fit interval flag (1 bit) gps_eph_iterator->second.i_AODO = e->AODA * AODO_LSB; gps_eph_iterator->second.d_Cic = ((double)e->Cic)*C_IC_LSB; gps_eph_iterator->second.d_OMEGA0 = ((double)e->OMEGA_0)*OMEGA_0_LSB; gps_eph_iterator->second.d_Cis = ((double)e->Cis)*C_IS_LSB; gps_eph_iterator->second.d_i_0 = ((double)e->i0)*I_0_LSB; gps_eph_iterator->second.d_Crs = ((double)e->Crs)*C_RS_LSB; gps_eph_iterator->second.d_OMEGA = ((double)e->w)*OMEGA_LSB; gps_eph_iterator->second.d_OMEGA_DOT = (double)e->OMEGA_dot*OMEGA_DOT_LSB; gps_eph_iterator->second.d_IDOT = ((double)e->i_dot)*I_DOT_LSB; } } // READ SV ACQUISITION ASSISTANCE if (assist.cnt_acq) { std::map::iterator gps_acq_iterator; for (int i = 0; i < assist.cnt_acq; i++) { struct supl_acquis_s *e = &assist.acq[i]; // Check if the SV is present in the map gps_acq_iterator=this->gps_acq_map.find(e->prn); // the SV is not present in the assistance data -> insert new SV register if (gps_acq_iterator == gps_acq_map.end()) { Gps_Acq_Assist gps_acq_assist; gps_acq_map.insert(std::pair(e->prn, gps_acq_assist)); gps_acq_iterator = this->gps_acq_map.find(e->prn); } // fill the acquisition assistance structure gps_acq_iterator->second.i_satellite_PRN = e->prn; gps_acq_iterator->second.d_TOW = (double)assist.acq_time; gps_acq_iterator->second.d_Doppler0 = (double)e->doppler0; gps_acq_iterator->second.d_Doppler1 = (double)e->doppler1; gps_acq_iterator->second.dopplerUncertainty = (double)e->d_win; gps_acq_iterator->second.Code_Phase = (double)e->code_ph; gps_acq_iterator->second.Code_Phase_int = (double)e->code_ph_int; gps_acq_iterator->second.Code_Phase_window = (double)e->code_ph_win; gps_acq_iterator->second.Azimuth = (double)e->az; gps_acq_iterator->second.Elevation = (double)e->el; gps_acq_iterator->second.GPS_Bit_Number = (double)e->bit_num; } } } bool gnss_sdr_supl_client::load_ephemeris_xml(const std::string file_name) { try { std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); boost::archive::xml_iarchive xml(ifs); gps_ephemeris_map.clear(); xml >> boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", this->gps_ephemeris_map); ifs.close(); LOG(INFO) << "Loaded Ephemeris map data"; } catch (std::exception& e) { LOG(ERROR) << e.what() << "File: " << file_name; return false; } return true; } bool gnss_sdr_supl_client::save_ephemeris_map_xml(const std::string file_name, std::map eph_map) { if (eph_map.size() > 0) { try { std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); boost::archive::xml_oarchive xml(ofs); xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", eph_map); ofs.close(); LOG(INFO) << "Saved Ephemeris map data"; } catch (std::exception& e) { LOG(ERROR) << e.what(); return false; } return true; } else { LOG(WARNING) << "Failed to save Ephemeris, map is empty"; return false; } } bool gnss_sdr_supl_client::load_utc_xml(const std::string file_name) { try { std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); boost::archive::xml_iarchive xml(ifs); xml >> boost::serialization::make_nvp("GNSS-SDR_utc_map", this->gps_utc); ifs.close(); LOG(INFO) << "Loaded UTC model data"; } catch (std::exception& e) { LOG(ERROR) << e.what() << "File: " << file_name; return false; } return true; } bool gnss_sdr_supl_client::save_utc_map_xml(const std::string file_name, std::map utc_map) { if (utc_map.size() > 0) { try { std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); boost::archive::xml_oarchive xml(ofs); xml << boost::serialization::make_nvp("GNSS-SDR_utc_map", utc_map); ofs.close(); LOG(INFO) << "Saved UTC Model data"; } catch (std::exception& e) { LOG(ERROR) << e.what(); return false; } return true; } else { LOG(WARNING) << "Failed to save UTC model, map is empty"; return false; } } bool gnss_sdr_supl_client::load_iono_xml(const std::string file_name) { try { std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); boost::archive::xml_iarchive xml(ifs); xml >> boost::serialization::make_nvp("GNSS-SDR_iono_map", this->gps_iono); ifs.close(); LOG(INFO) << "Loaded IONO model data"; } catch (std::exception& e) { LOG(ERROR) << e.what() << "File: " << file_name; return false; } return true; } bool gnss_sdr_supl_client::save_iono_map_xml(const std::string file_name, std::map iono_map) { if (iono_map.size() > 0) { try { std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); boost::archive::xml_oarchive xml(ofs); xml << boost::serialization::make_nvp("GNSS-SDR_iono_map", iono_map); ofs.close(); LOG(INFO) << "Saved IONO Model data"; } catch (std::exception& e) { LOG(ERROR) << e.what(); return false; } return true; } else { LOG(WARNING) << "Failed to save IONO model, map is empty"; return false; } } bool gnss_sdr_supl_client::load_ref_time_xml(const std::string file_name) { try { std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); boost::archive::xml_iarchive xml(ifs); xml >> boost::serialization::make_nvp("GNSS-SDR_ref_time_map", this->gps_time); ifs.close(); LOG(INFO) << "Loaded Ref Time data"; } catch (std::exception& e) { LOG(ERROR) << e.what() << "File: " << file_name; return false; } return true; } bool gnss_sdr_supl_client::save_ref_time_map_xml(const std::string file_name, std::map ref_time_map) { if (ref_time_map.size() > 0) { try { std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); boost::archive::xml_oarchive xml(ofs); xml << boost::serialization::make_nvp("GNSS-SDR_ref_time_map", ref_time_map); ofs.close(); LOG(INFO) << "Saved Ref Time data"; } catch (std::exception& e) { LOG(ERROR) << e.what(); return false; } return true; } else { LOG(WARNING) << "Failed to save Ref Time, map is empty"; return false; } } bool gnss_sdr_supl_client::load_ref_location_xml(const std::string file_name) { try { std::ifstream ifs(file_name.c_str(), std::ifstream::binary | std::ifstream::in); boost::archive::xml_iarchive xml(ifs); xml >> boost::serialization::make_nvp("GNSS-SDR_ref_location_map", this->gps_ref_loc); ifs.close(); LOG(INFO) << "Loaded Ref Location data"; } catch (std::exception& e) { LOG(ERROR) << e.what() << "File: " << file_name; return false; } return true; } bool gnss_sdr_supl_client::save_ref_location_map_xml(const std::string file_name, std::map ref_location_map) { if (ref_location_map.size() > 0) { try { std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out); boost::archive::xml_oarchive xml(ofs); xml << boost::serialization::make_nvp("GNSS-SDR_ref_location_map", ref_location_map); ofs.close(); LOG(INFO) << "Saved Ref Location data"; } catch (std::exception& e) { LOG(ERROR) << e.what(); return false; } return true; } else { LOG(WARNING) << "Failed to save Ref Location, map is empty"; return false; } } gnss-sdr-0.0.6/src/core/libs/CMakeLists.txt0000644000175000017500000000256712576764164020025 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # add_subdirectory(supl) set(CORE_LIBS_SOURCES ini.cc INIReader.cc string_converter.cc gnss_sdr_supl_client.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/libs/supl ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ) file(GLOB CORE_LIBS_HEADERS "*.h") add_library(rx_core_lib ${CORE_LIBS_SOURCES} ${CORE_LIBS_HEADERS}) source_group(Headers FILES ${CORE_LIBS_HEADERS}) target_link_libraries(rx_core_lib supl_library) gnss-sdr-0.0.6/src/core/libs/supl/0000755000175000017500000000000012576764211016227 5ustar carlescarlesgnss-sdr-0.0.6/src/core/libs/supl/asn/0000755000175000017500000000000012576764164017017 5ustar carlescarlesgnss-sdr-0.0.6/src/core/libs/supl/asn/supl-start.asn0000644000175000017500000000147412576764164021646 0ustar carlescarlesSUPL-START DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLSTART, SETCapabilities; IMPORTS LocationId, QoP FROM ULP-Components; SUPLSTART ::= SEQUENCE { sETCapabilities SETCapabilities, locationId LocationId, qoP QoP OPTIONAL, ...} SETCapabilities ::= SEQUENCE { posTechnology PosTechnology, prefMethod PrefMethod, posProtocol PosProtocol, ...} PosTechnology ::= SEQUENCE { agpsSETassisted BOOLEAN, agpsSETBased BOOLEAN, autonomousGPS BOOLEAN, aFLT BOOLEAN, eCID BOOLEAN, eOTD BOOLEAN, oTDOA BOOLEAN, ...} PrefMethod ::= ENUMERATED { agpsSETassistedPreferred, agpsSETBasedPreferred, noPreference} PosProtocol ::= SEQUENCE { tia801 BOOLEAN, rrlp BOOLEAN, rrc BOOLEAN, ...} END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-response.asn0000644000175000017500000000071612576764164022345 0ustar carlescarlesSUPL-RESPONSE DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLRESPONSE; IMPORTS PosMethod, SLPAddress FROM ULP-Components; SUPLRESPONSE ::= SEQUENCE { posMethod PosMethod, sLPAddress SLPAddress OPTIONAL, sETAuthKey SETAuthKey OPTIONAL, keyIdentity4 KeyIdentity4 OPTIONAL, ...} SETAuthKey ::= CHOICE { shortKey BIT STRING(SIZE (128)), longKey BIT STRING(SIZE (256)), ...} KeyIdentity4 ::= BIT STRING(SIZE (128)) END gnss-sdr-0.0.6/src/core/libs/supl/asn/rrlp-components.asn0000644000175000017500000013545512576764164022701 0ustar carlescarlesRRLP-Components -- { RRLP-Components } DEFINITIONS AUTOMATIC TAGS ::= BEGIN --IMPORTS -- Ext-GeographicalInformation , VelocityEstimate --FROM -- MAP-LCS-DataTypes { -- ccitt identified-organization (4) etsi (0) mobileDomain (0) -- gsm-Network (1) modules (3) map-LCS-DataTypes (25) version5 (5)} -- -- ExtensionContainer --FROM MAP-ExtensionDataTypes { -- ccitt identified-organization (4) etsi (0) mobileDomain (0) -- gsm-Network (1) modules (3) map-ExtensionDataTypes (21) version4 (4)} --; VelocityEstimate ::= INTEGER ExtensionContainer ::= INTEGER -- Add here other ASN.1 definitions presented below -- in chapters 4 and 5. -- add this definition to RRLP-Components module -- Measurement Position request component MsrPosition-Req ::= SEQUENCE { positionInstruct PositionInstruct, referenceAssistData ReferenceAssistData OPTIONAL, msrAssistData MsrAssistData OPTIONAL, systemInfoAssistData SystemInfoAssistData OPTIONAL, gps-AssistData GPS-AssistData OPTIONAL, extensionContainer ExtensionContainer OPTIONAL, ..., -- Release 98 extension element rel98-MsrPosition-Req-extension Rel98-MsrPosition-Req-Extension OPTIONAL, -- Release 5 extension element rel5-MsrPosition-Req-extension Rel5-MsrPosition-Req-Extension OPTIONAL -- Release 7 extension element -- rel7-MsrPosition-Req-extension Rel7-MsrPosition-Req-Extension OPTIONAL } -- add this defintion to RRLP-Components module -- Measurement Position response component MsrPosition-Rsp ::= SEQUENCE { multipleSets MultipleSets OPTIONAL, referenceIdentity ReferenceIdentity OPTIONAL, otd-MeasureInfo OTD-MeasureInfo OPTIONAL, locationInfo LocationInfo OPTIONAL, gps-MeasureInfo GPS-MeasureInfo OPTIONAL, locationError LocationError OPTIONAL, extensionContainer ExtensionContainer OPTIONAL, ..., -- Release extension here rel-98-MsrPosition-Rsp-Extension Rel-98-MsrPosition-Rsp-Extension OPTIONAL, rel-5-MsrPosition-Rsp-Extension Rel-5-MsrPosition-Rsp-Extension OPTIONAL -- rel-5-MsrPosition-Rsp-Extension and other possible future extensions -- are the only information elements that may be included in the 2nd -- MsrPosition-Rsp component when RRLP pseudo-segmentation is -- rel-7-MsrPosition-Rsp-Extension Rel-7-MsrPosition-Rsp-Extension OPTIONAL } -- add this defintion to RRLP-Components module -- Assistance Data component AssistanceData ::= SEQUENCE { referenceAssistData ReferenceAssistData OPTIONAL, msrAssistData MsrAssistData OPTIONAL, systemInfoAssistData SystemInfoAssistData OPTIONAL, gps-AssistData GPS-AssistData OPTIONAL, moreAssDataToBeSent MoreAssDataToBeSent OPTIONAL, -- If not present, interpret as only -- Assistance Data component used to -- deliver entire set of assistance -- data. extensionContainer ExtensionContainer OPTIONAL, ..., -- Release extension here rel98-AssistanceData-Extension Rel98-AssistanceData-Extension OPTIONAL, rel5-AssistanceData-Extension Rel5-AssistanceData-Extension OPTIONAL -- rel7-AssistanceData-Extension Rel7-AssistanceData-Extension OPTIONAL } -- add this defintion to RRLP-Components module -- Protocol Error component ProtocolError ::= SEQUENCE { errorCause ErrorCodes, extensionContainer ExtensionContainer OPTIONAL, ..., -- Release extensions here rel-5-ProtocolError-Extension Rel-5-ProtocolError-Extension OPTIONAL } -- add these defintions to RRLP-Components module -- Position instructions PositionInstruct ::= SEQUENCE { -- Method type methodType MethodType, positionMethod PositionMethod, measureResponseTime MeasureResponseTime, useMultipleSets UseMultipleSets, environmentCharacter EnvironmentCharacter OPTIONAL } -- MethodType ::= CHOICE { msAssisted AccuracyOpt, -- accuracy is optional msBased Accuracy, -- accuracy is mandatory msBasedPref Accuracy, -- accuracy is mandatory msAssistedPref Accuracy -- accuracy is mandatory } -- Accuracy of the location estimation AccuracyOpt ::= SEQUENCE { accuracy Accuracy OPTIONAL } -- The values of this field are defined in 3GPP TS 23.032 (Uncertainty code) Accuracy ::= INTEGER (0..127) -- Position Method PositionMethod ::= ENUMERATED { eotd (0), gps (1), gpsOrEOTD (2) } -- Measurement request response time MeasureResponseTime ::= INTEGER (0..7) -- useMultiple Sets, FFS! UseMultipleSets ::= ENUMERATED { multipleSets (0), -- multiple sets are allowed oneSet (1) -- sending of multiple is not allowed } -- Environment characterization EnvironmentCharacter ::= ENUMERATED { badArea (0), -- bad urban or suburban, heavy multipath and NLOS notBadArea (1), -- light multipath and NLOS mixedArea (2), -- not defined or mixed environment ... } -- E-OTD reference BTS for Assitance data IE ReferenceAssistData ::= SEQUENCE { bcchCarrier BCCHCarrier, -- BCCH carrier bsic BSIC, -- BSIC timeSlotScheme TimeSlotScheme, -- Timeslot scheme btsPosition BTSPosition OPTIONAL } -- ellipsoid point and -- ellipsoid point with altitude and uncertainty ellipsoid shapes are supported BTSPosition ::= Ext-GeographicalInformation -- RF channel number of BCCH BCCHCarrier ::= INTEGER (0..1023) -- Base station Identity Code BSIC ::= INTEGER (0..63) -- Timeslot scheme TimeSlotScheme ::= ENUMERATED { equalLength (0), variousLength (1) } -- Time slot (modulo) ModuloTimeSlot ::= INTEGER (0..3) -- E-OTD measurement assistance data IE -- The total number of neighbors in this element (MsrAssistData) -- and in SystemInfoAssistData element (presented neighbors -- can be at a maximum 15!) MsrAssistData ::= SEQUENCE { msrAssistList SeqOfMsrAssistBTS } SeqOfMsrAssistBTS ::= SEQUENCE (SIZE(1..15)) OF MsrAssistBTS MsrAssistBTS ::= SEQUENCE { bcchCarrier BCCHCarrier, -- BCCH carrier bsic BSIC, -- BSIC multiFrameOffset MultiFrameOffset, -- multiframe offset timeSlotScheme TimeSlotScheme, -- Timeslot scheme roughRTD RoughRTD, -- rough RTD value -- Location Calculation Assistance data is moved here calcAssistanceBTS CalcAssistanceBTS OPTIONAL } -- Multiframe offset MultiFrameOffset ::= INTEGER (0..51) -- The Multiframe Offset value 51 shall not be encoded by the transmitting entity and -- shall be treated by the receiving entity as 0. -- Rough RTD value between one base station and reference BTS RoughRTD ::= INTEGER (0..1250) -- The RoughRTD value 1250 shall not be encoded by the transmitting entity and shall -- be treated by the receiving entity as 0. -- E-OTD Measurement assistance data for system information List IE -- The total number of base stations in this element (SystemInfoAssistData -- presented neighbors) and in MsrAssistData element can be at a maximum 15. SystemInfoAssistData ::= SEQUENCE { systemInfoAssistList SeqOfSystemInfoAssistBTS } SeqOfSystemInfoAssistBTS::= SEQUENCE (SIZE(1..32)) OF SystemInfoAssistBTS -- whether n.th is present or not ? SystemInfoAssistBTS ::= CHOICE { notPresent NULL, present AssistBTSData } -- Actual assistance data for system information base station AssistBTSData ::= SEQUENCE { bsic BSIC, -- BSIC multiFrameOffset MultiFrameOffset, -- multiframe offset timeSlotScheme TimeSlotScheme, -- Timeslot scheme roughRTD RoughRTD, -- rough RTD value -- Location Calculation Assistance data calcAssistanceBTS CalcAssistanceBTS OPTIONAL } -- E-OTD Location calculation assistance data, -- CalcAssistanceBTS element is optional not subfields CalcAssistanceBTS ::= SEQUENCE { fineRTD FineRTD, -- fine RTD value between base stations referenceWGS84 ReferenceWGS84 -- reference coordinates } -- Coordinates of neighbour BTS, WGS-84 ellipsoid ReferenceWGS84 ::= SEQUENCE { relativeNorth RelDistance, -- relative distance (south negative) relativeEast RelDistance, -- relative distance (west negative) -- Relative Altitude is not always known relativeAlt RelativeAlt OPTIONAL -- relative altitude } -- Fine RTD value between this BTS and the reference BTS FineRTD ::= INTEGER (0..255) -- Relative north/east distance RelDistance ::= INTEGER (-200000..200000) -- Relative altitude RelativeAlt ::= INTEGER (-4000..4000) -- Measure position response IEs -- Reference Identity -- Multiple sets MultipleSets ::= SEQUENCE { -- number of reference sets nbrOfSets INTEGER (2..3), -- This field actually tells the number of reference BTSs nbrOfReferenceBTSs INTEGER (1..3), -- This field is conditional and included optionally only if -- nbrOfSets is 3 and number of reference BTSs is 2. referenceRelation ReferenceRelation OPTIONAL } -- Relation between refence BTSs and sets ReferenceRelation ::= ENUMERATED { secondBTSThirdSet (0), -- 1st BTS related to 1st and 2nd sets secondBTSSecondSet (1), -- 1st BTS related to 1st and 3rd sets firstBTSFirstSet (2) -- 1st BTS related to 1st set } -- Reference BTS Identity, this element contains number of -- BTSs told nbrOfReferenceBTSs field in Multiple sets element) ReferenceIdentity ::= SEQUENCE { -- Reference BTS list refBTSList SeqOfReferenceIdentityType } SeqOfReferenceIdentityType ::= SEQUENCE (SIZE(1..3)) OF ReferenceIdentityType -- Cell identity ReferenceIdentityType ::= CHOICE { bsicAndCarrier BSICAndCarrier, -- BSIC and Carrier ci CellID, -- Cell ID, LAC not needed requestIndex RequestIndex, -- Index to Requested Neighbor List systemInfoIndex SystemInfoIndex, -- Index to System info list, this type of ref. identity -- shall not be used by the MS unless it has received -- the SystemInfoAssistData from the SMLC for this cell. ciAndLAC CellIDAndLAC -- CI and LAC } BSICAndCarrier ::= SEQUENCE { carrier BCCHCarrier, bsic BSIC } RequestIndex ::= INTEGER (1..16) SystemInfoIndex ::= INTEGER (1..32) CellIDAndLAC ::= SEQUENCE { referenceLAC LAC, -- Location area code referenceCI CellID -- Cell identity } CellID ::= INTEGER (0..65535) LAC ::= INTEGER (0..65535) -- OTD-MeasureInfo OTD-MeasureInfo ::= SEQUENCE { -- Measurement info elements, OTD-MsrElement is repeated number of times -- told in nbrOfReferenceBTSs in MultipleSets, default value is 1 otdMsrFirstSets OTD-MsrElementFirst, -- if more than one sets are present this element is repeated -- NumberOfSets - 1 (-1 = first set) otdMsrRestSets SeqOfOTD-MsrElementRest OPTIONAL } SeqOfOTD-MsrElementRest ::= SEQUENCE (SIZE(1..2)) OF OTD-MsrElementRest -- OTD measurent information for 1 set OTD-MsrElementFirst ::= SEQUENCE { refFrameNumber INTEGER (0..42431), -- Frame number modulo 42432 referenceTimeSlot ModuloTimeSlot, toaMeasurementsOfRef TOA-MeasurementsOfRef OPTIONAL, stdResolution StdResolution, taCorrection INTEGER (0..960) OPTIONAL, -- TA correction -- measured neighbors in OTD measurements otd-FirstSetMsrs SeqOfOTD-FirstSetMsrs OPTIONAL } SeqOfOTD-FirstSetMsrs ::= SEQUENCE (SIZE(1..10)) OF OTD-FirstSetMsrs -- OTD measurent information 2 and 3 sets if exist OTD-MsrElementRest ::= SEQUENCE { refFrameNumber INTEGER (0..42431), -- Frame number modulo 42432 referenceTimeSlot ModuloTimeSlot, toaMeasurementsOfRef TOA-MeasurementsOfRef OPTIONAL, stdResolution StdResolution, taCorrection INTEGER (0..960) OPTIONAL, -- TA correction -- measured neighbors in OTD measurements otd-MsrsOfOtherSets SeqOfOTD-MsrsOfOtherSets OPTIONAL } SeqOfOTD-MsrsOfOtherSets ::= SEQUENCE (SIZE(1..10)) OF OTD-MsrsOfOtherSets -- Standard deviation of the TOA measurements from the reference BTS TOA-MeasurementsOfRef ::= SEQUENCE { refQuality RefQuality, numOfMeasurements NumOfMeasurements } RefQuality ::= INTEGER (0..31) -- St Dev of TOA of reference as defined in annex NumOfMeasurements ::= INTEGER (0..7) -- No. of measurements for RefQuality as defined in annex StdResolution ::= INTEGER (0..3) -- Values of resolution are defined in annex OTD-FirstSetMsrs ::= OTD-MeasurementWithID -- Neighbour info in OTD measurements 0-10 times in TD measurement info OTD-MsrsOfOtherSets ::= CHOICE { identityNotPresent OTD-Measurement, identityPresent OTD-MeasurementWithID } -- For this OTD measurement identity is same as the identity of BTS -- in the first set with same sequence number OTD-Measurement ::= SEQUENCE { nborTimeSlot ModuloTimeSlot, eotdQuality EOTDQuality, otdValue OTDValue } -- This measurement contains the BTS identity and measurement OTD-MeasurementWithID ::=SEQUENCE { neighborIdentity NeighborIdentity, nborTimeSlot ModuloTimeSlot, eotdQuality EOTDQuality, otdValue OTDValue } EOTDQuality ::= SEQUENCE { nbrOfMeasurements INTEGER (0..7), stdOfEOTD INTEGER (0..31) } NeighborIdentity ::= CHOICE { bsicAndCarrier BSICAndCarrier, -- BSIC and Carrier ci CellID, -- Cell ID, LAC not needed multiFrameCarrier MultiFrameCarrier, -- MultiFrameOffest and BSIC requestIndex RequestIndex, -- Index to Requested Neighbor List systemInfoIndex SystemInfoIndex, -- Index to System info list, this type of neighbour -- identity shall not be used by the MS unless it has -- received the SystemInfoAssistData from the SMLC for -- this cell. ciAndLAC CellIDAndLAC -- CI and LAC } -- Multiframe and carrier MultiFrameCarrier ::= SEQUENCE { bcchCarrier BCCHCarrier, multiFrameOffset MultiFrameOffset } -- OTD measurement value for neighbour OTDValue ::= INTEGER (0..39999) -- Location information IE LocationInfo ::= SEQUENCE { refFrame INTEGER (0..65535), -- Reference Frame number -- If refFrame is within (42432..65535), it shall be ignored by the receiver -- in that case the MS should provide GPS TOW if available gpsTOW INTEGER (0..14399999) OPTIONAL, -- GPS TOW fixType FixType, -- Note that applicable range for refFrame is 0 - 42431 -- Possible shapes carried in posEstimate are -- ellipsoid point, -- ellipsoid point with uncertainty circle -- ellipsoid point with uncertainty ellipse -- ellipsoid point with altitude and uncertainty ellipsoid posEstimate Ext-GeographicalInformation } FixType ::= INTEGER { twoDFix (0), threeDFix (1) } (0..1) -- GPS-Measurement information GPS-MeasureInfo ::= SEQUENCE { -- Measurement info elements -- user has to make sure that in this element is number of elements -- defined in reference BTS identity gpsMsrSetList SeqOfGPS-MsrSetElement } SeqOfGPS-MsrSetElement ::= SEQUENCE (SIZE(1..3)) OF GPS-MsrSetElement -- OTD measurent information 1-3 times in message GPS-MsrSetElement ::= SEQUENCE { refFrame INTEGER (0..65535) OPTIONAL, -- Reference Frame number gpsTOW GPSTOW24b, -- GPS TOW -- Note that applicable range for refFrame is 0 - 42431 --N_SAT can be read from number of elements of gps-msrList gps-msrList SeqOfGPS-MsrElement } -- 24 bit presentation for GPSTOW GPSTOW24b ::= INTEGER (0..14399999) -- measured elements in measurement parameters field SeqOfGPS-MsrElement ::= SEQUENCE (SIZE(1..16)) OF GPS-MsrElement GPS-MsrElement ::= SEQUENCE { satelliteID SatelliteID, -- Satellite identifier cNo INTEGER (0..63), -- carrier noise ratio doppler INTEGER (-32768..32767), -- doppler, mulltiply by 0.2 wholeChips INTEGER (0..1022), -- whole value of the code phase measurement fracChips INTEGER (0..1024), -- fractional value of the code phase measurement -- a value of 1024 shall not be encoded by the sender -- the receiver shall consider a value of 1024 to be -- invalid data mpathIndic MpathIndic, -- multipath indicator pseuRangeRMSErr INTEGER (0..63) -- index } -- Multipath indicator MpathIndic ::= ENUMERATED { notMeasured (0), low (1), medium (2), high (3) } -- Location error IE LocationError ::= SEQUENCE { locErrorReason LocErrorReason, additionalAssistanceData AdditionalAssistanceData OPTIONAL, ... } LocErrorReason ::= ENUMERATED { unDefined (0), notEnoughBTSs (1), notEnoughSats (2), eotdLocCalAssDataMissing (3), eotdAssDataMissing (4), gpsLocCalAssDataMissing (5), gpsAssDataMissing (6), methodNotSupported (7), notProcessed (8), refBTSForGPSNotServingBTS (9), refBTSForEOTDNotServingBTS (10), ..., notEnoughGANSSSats (11), ganssAssDataMissing (12), refBTSForGANSSNotServingBTS (13) } -- exception handling: -- an unrecognized value shall be treated the same as value 0 -- defines additional assistance data needed for any new location attempt -- MS shall retain any assistance data already received AdditionalAssistanceData ::= SEQUENCE { gpsAssistanceData GPSAssistanceData OPTIONAL, extensionContainer ExtensionContainer OPTIONAL, ..., ganssAssistanceData GANSSAssistanceData OPTIONAL } GPSAssistanceData ::= OCTET STRING (SIZE (1..maxGPSAssistanceData)) -- GPSAssistanceData has identical structure and encoding to octets 3 to n of the -- GPS Assistance Data IE in 3GPP TS 49.031 maxGPSAssistanceData INTEGER ::= 40 GANSSAssistanceData ::= OCTET STRING (SIZE (1..maxGANSSAssistanceData)) -- GANSSAssistanceData has identical structure and encoding to octets 3 to n of the -- GANSS Assistance Data IE in 3GPP TS 49.031 maxGANSSAssistanceData INTEGER ::= 40 -- Protocol Error Causes ErrorCodes ::= ENUMERATED { unDefined (0), missingComponet (1), incorrectData (2), missingIEorComponentElement (3), messageTooShort (4), unknowReferenceNumber (5), ... } -- exception handling: -- an unrecognized value shall be treated the same as value 0 -- GPS assistance data IE GPS-AssistData ::= SEQUENCE { controlHeader ControlHeader } -- More Assistance Data To Be Sent IE -- More Assistance Data Components On the Way indication for delivery of an entire set of assistance -- data in multiple Assistance Data components. MoreAssDataToBeSent ::= ENUMERATED { noMoreMessages (0), -- This is the only or last Assistance Data message used to deliver -- the entire set of assistance data. moreMessagesOnTheWay (1) -- The SMLC will send more Assistance Data messages or a final RRLP -- Measure Position Request message to deliver the -- the entire set of assistance data. } -- Control header of the GPS assistance data ControlHeader ::= SEQUENCE { -- Field type Present information referenceTime ReferenceTime OPTIONAL, refLocation RefLocation OPTIONAL, dgpsCorrections DGPSCorrections OPTIONAL, navigationModel NavigationModel OPTIONAL, ionosphericModel IonosphericModel OPTIONAL, utcModel UTCModel OPTIONAL, almanac Almanac OPTIONAL, acquisAssist AcquisAssist OPTIONAL, realTimeIntegrity SeqOf-BadSatelliteSet OPTIONAL } ReferenceTime ::= SEQUENCE { gpsTime GPSTime, gsmTime GSMTime OPTIONAL, gpsTowAssist GPSTOWAssist OPTIONAL } -- GPS Time includes week number and time-of-week (TOW) GPSTime ::= SEQUENCE { gpsTOW23b GPSTOW23b, gpsWeek GPSWeek } -- GPSTOW, range 0-604799.92, resolution 0.08 sec, 23-bit presentation GPSTOW23b ::= INTEGER (0..7559999) -- GPS week number GPSWeek ::= INTEGER (0..1023) -- GPSTOWAssist consists of TLM message, Anti-spoof flag, Alert flag, and 2 reserved bits in TLM Word -- for each visible satellite. -- N_SAT can be read from number of elements in GPSTOWAssist GPSTOWAssist ::= SEQUENCE (SIZE(1..12)) OF GPSTOWAssistElement GPSTOWAssistElement ::= SEQUENCE { satelliteID SatelliteID, tlmWord TLMWord, antiSpoof AntiSpoofFlag, alert AlertFlag, tlmRsvdBits TLMReservedBits } -- TLM Word, 14 bits TLMWord ::= INTEGER (0..16383) -- Anti-Spoof flag AntiSpoofFlag ::= INTEGER (0..1) -- Alert flag AlertFlag ::= INTEGER (0..1) -- Reserved bits in TLM word, MSB occurs earlier in TLM Word transmitted by satellite TLMReservedBits ::= INTEGER (0..3) GSMTime ::= SEQUENCE { bcchCarrier BCCHCarrier, -- BCCH carrier bsic BSIC, -- BSIC frameNumber FrameNumber, timeSlot TimeSlot, bitNumber BitNumber } -- Frame number FrameNumber ::= INTEGER (0..2097151) -- Time slot number TimeSlot ::= INTEGER (0..7) -- Bit number BitNumber ::= INTEGER (0..156) -- Reference Location IE RefLocation ::= SEQUENCE { threeDLocation Ext-GeographicalInformation } -- DGPS Corrections IE DGPSCorrections ::= SEQUENCE { gpsTOW INTEGER (0..604799), -- DGPS reference time status INTEGER (0..7), -- N_SAT can be read from number of elements of satList satList SeqOfSatElement } SeqOfSatElement ::= SEQUENCE (SIZE (1..16)) OF SatElement -- number of correction for satellites SatElement ::= SEQUENCE { satelliteID SatelliteID, --- Sequence number for ephemeris iode INTEGER (0..239), -- User Differential Range Error udre INTEGER (0..3), -- Pseudo Range Correction, range is -- -655.04 - +655.04, pseudoRangeCor INTEGER (-2047..2047), -- Pseudo Range Rate Correction, range is -- -4.064 - +4.064, rangeRateCor INTEGER (-127..127), -- Delta Pseudo Range Correction 2 deltaPseudoRangeCor2 INTEGER (-127..127), -- This IE shall be ignored by the receiver and -- set to zero by the sender -- Delta Pseudo Range Correction 2 deltaRangeRateCor2 INTEGER (-7..7), -- This IE shall be ignored by the receiver and -- set to zero by the sender -- Delta Pseudo Range Correction 3 deltaPseudoRangeCor3 INTEGER (-127..127), -- This IE shall be ignored by the receiver and -- set to zero by the sender -- Delta Pseudo Range Correction 3 deltaRangeRateCor3 INTEGER (-7..7) -- This IE shall be ignored by the receiver and -- set to zero by the sender } SatelliteID ::= INTEGER (0..63) -- identifies satellite -- Navigation Model IE NavigationModel ::= SEQUENCE { navModelList SeqOfNavModelElement } -- navigation model satellite list SeqOfNavModelElement ::= SEQUENCE (SIZE(1..16)) OF NavModelElement NavModelElement ::= SEQUENCE { satelliteID SatelliteID, satStatus SatStatus -- satellite status } -- the Status of the navigation model SatStatus ::= CHOICE { -- New satellite, new Navigation Model newSatelliteAndModelUC UncompressedEphemeris, -- Existing satellite, Existing Navigation Model oldSatelliteAndModel NULL, -- Existing satellite, new Navigation Model newNaviModelUC UncompressedEphemeris, ... } -- Uncompressed satellite emhemeris and clock corrections UncompressedEphemeris ::= SEQUENCE { ephemCodeOnL2 INTEGER (0..3), ephemURA INTEGER (0..15), ephemSVhealth INTEGER (0..63), ephemIODC INTEGER (0..1023), ephemL2Pflag INTEGER (0..1), ephemSF1Rsvd EphemerisSubframe1Reserved, ephemTgd INTEGER (-128..127), ephemToc INTEGER (0..37799), ephemAF2 INTEGER (-128..127), ephemAF1 INTEGER (-32768..32767), ephemAF0 INTEGER (-2097152..2097151), ephemCrs INTEGER (-32768..32767), ephemDeltaN INTEGER (-32768..32767), ephemM0 INTEGER (-2147483648..2147483647), ephemCuc INTEGER (-32768..32767), ephemE INTEGER (0..4294967295), ephemCus INTEGER (-32768..32767), ephemAPowerHalf INTEGER (0..4294967295), ephemToe INTEGER (0..37799), ephemFitFlag INTEGER (0..1), ephemAODA INTEGER (0..31), ephemCic INTEGER (-32768..32767), ephemOmegaA0 INTEGER (-2147483648..2147483647), ephemCis INTEGER (-32768..32767), ephemI0 INTEGER (-2147483648..2147483647), ephemCrc INTEGER (-32768..32767), ephemW INTEGER (-2147483648..2147483647), ephemOmegaADot INTEGER (-8388608..8388607), ephemIDot INTEGER (-8192..8191) } -- Reserved bits in subframe 1 of navigation message EphemerisSubframe1Reserved ::= SEQUENCE { reserved1 INTEGER (0..8388607), -- 23-bit field reserved2 INTEGER (0..16777215), -- 24-bit field reserved3 INTEGER (0..16777215), -- 24-bit field reserved4 INTEGER (0..65535) -- 16-bit field } -- Ionospheric Model IE IonosphericModel ::= SEQUENCE { alfa0 INTEGER (-128..127), alfa1 INTEGER (-128..127), alfa2 INTEGER (-128..127), alfa3 INTEGER (-128..127), beta0 INTEGER (-128..127), beta1 INTEGER (-128..127), beta2 INTEGER (-128..127), beta3 INTEGER (-128..127) } -- Universal Time Coordinate Model UTCModel ::= SEQUENCE { utcA1 INTEGER (-8388608..8388607), utcA0 INTEGER (-2147483648..2147483647), utcTot INTEGER (0..255), utcWNt INTEGER (0..255), utcDeltaTls INTEGER (-128..127), utcWNlsf INTEGER (0..255), utcDN INTEGER (-128..127), utcDeltaTlsf INTEGER (-128..127) } -- Almanac, Long term model -- NOTE: These are parameters are subset of the ephemeris -- NOTE: But with reduced resolution and accuracy Almanac ::= SEQUENCE { alamanacWNa INTEGER (0..255), -- Once per message -- navigation model satellite list. -- The size of almanacList is actually Nums_Sats_Total field almanacList SeqOfAlmanacElement } SeqOfAlmanacElement ::= SEQUENCE (SIZE(1..64)) OF AlmanacElement -- Almanac info once per satellite AlmanacElement ::= SEQUENCE { satelliteID SatelliteID, almanacE INTEGER (0..65535), alamanacToa INTEGER (0..255), almanacKsii INTEGER (-32768..32767), almanacOmegaDot INTEGER (-32768..32767), almanacSVhealth INTEGER (0..255), almanacAPowerHalf INTEGER (0..16777215), almanacOmega0 INTEGER (-8388608..8388607), almanacW INTEGER (-8388608..8388607), almanacM0 INTEGER (-8388608..8388607), almanacAF0 INTEGER (-1024..1023), almanacAF1 INTEGER (-1024..1023) } -- Acquisition Assistance AcquisAssist ::= SEQUENCE { -- Number of Satellites can be read from acquistList timeRelation TimeRelation, -- Acquisition assistance list -- The size of Number of Satellites is actually Number of Satellites field acquisList SeqOfAcquisElement } SeqOfAcquisElement ::= SEQUENCE (SIZE(1..16)) OF AcquisElement -- the relationship between GPS time and air-interface timing TimeRelation ::= SEQUENCE { -- gpsTOW GPSTOW23b, -- 23b presentation gsmTime GSMTime OPTIONAL } -- data occuring per number of satellites AcquisElement ::= SEQUENCE { svid SatelliteID, -- Doppler 0th order term, -- -5120.0 - 5117.5 Hz (= -2048 - 2047 with 2.5 Hz resolution) doppler0 INTEGER (-2048..2047), addionalDoppler AddionalDopplerFields OPTIONAL, codePhase INTEGER (0..1022), -- Code Phase intCodePhase INTEGER (0..19), -- Integer Code Phase gpsBitNumber INTEGER (0..3), -- GPS bit number codePhaseSearchWindow INTEGER (0..15), -- Code Phase Search Window addionalAngle AddionalAngleFields OPTIONAL } AddionalDopplerFields ::= SEQUENCE { -- Doppler 1st order term, -1.0 - +0.5 Hz/sec -- (= -42 + (0 to 63) with 1/42 Hz/sec. resolution) doppler1 INTEGER (0..63), dopplerUncertainty INTEGER (0..7) -- a sender shall not encode any DopplerUncertainty value in the range 5 to 7 -- a receiver shall ignore any value between 5 and 7. } AddionalAngleFields ::= SEQUENCE { -- azimuth angle, 0 - 348.75 deg (= 0 - 31 with 11.25 deg resolution) azimuth INTEGER (0..31), -- elevation angle, 0 - 78.75 deg (= 0 - 7 with 11.25 deg resolution) elevation INTEGER (0..7) } -- Real-Time Integrity -- number of bad satellites can be read from this element SeqOf-BadSatelliteSet ::= SEQUENCE (SIZE(1..16)) OF SatelliteID -- Extension Elements -- Release 98 Extensions here Rel98-MsrPosition-Req-Extension ::= SEQUENCE { rel98-Ext-ExpOTD Rel98-Ext-ExpOTD OPTIONAL, -- ExpectedOTD extension ..., gpsTimeAssistanceMeasurementRequest NULL OPTIONAL, gpsReferenceTimeUncertainty GPSReferenceTimeUncertainty OPTIONAL -- Further R98 extensions here } Rel98-AssistanceData-Extension ::= SEQUENCE { rel98-Ext-ExpOTD Rel98-Ext-ExpOTD OPTIONAL, -- ExpectedOTD extension ..., gpsTimeAssistanceMeasurementRequest NULL OPTIONAL, gpsReferenceTimeUncertainty GPSReferenceTimeUncertainty OPTIONAL -- Further R98 extensions here } -- Release 98 ExpOTD extension Rel98-Ext-ExpOTD ::= SEQUENCE { -- If MsrAssistBTS is included in message, msrAssistData-R98-ExpOTD shall be included. msrAssistData-R98-ExpOTD MsrAssistData-R98-ExpOTD OPTIONAL, -- If SystemInfoAssistaData is included in message, systemInfoAssistData-R98-ExpOTD shall be -- included. systemInfoAssistData-R98-ExpOTD SystemInfoAssistData-R98-ExpOTD OPTIONAL } -- MsrAssistData R98 extension MsrAssistData-R98-ExpOTD ::= SEQUENCE { msrAssistList-R98-ExpOTD SeqOfMsrAssistBTS-R98-ExpOTD } -- Indexes in SeqOfMsrAssistBTS-R98-ExpOTD refer to SeqOfMsrAssistBTS -- If the index exceeds the SegOfMsrAssistBTS range or if there is other -- inconsistencies between the BTS indices, the MS shall apply protocol -- error cause incorrectData SeqOfMsrAssistBTS-R98-ExpOTD ::= SEQUENCE (SIZE(1..15)) OF MsrAssistBTS-R98-ExpOTD -- This element completes MsrAssistBTS IE MsrAssistBTS-R98-ExpOTD ::= SEQUENCE { expectedOTD ExpectedOTD, expOTDUncertainty ExpOTDUncertainty } -- SystemInfoAssistData R98 extension SystemInfoAssistData-R98-ExpOTD ::= SEQUENCE { systemInfoAssistListR98-ExpOTD SeqOfSystemInfoAssistBTS-R98-ExpOTD } -- SeqOfSystemInfoAssistBTS-R98-ExpOTD index refer to SeqOfSystemInfoAssistBTS -- If the index exceeds the SegOfSystemInfoAssistBTS range or if there is other -- inconsistencies between the BTS indices, the MS shall apply protocol -- error cause incorrectData SeqOfSystemInfoAssistBTS-R98-ExpOTD ::= SEQUENCE (SIZE(1..32)) OF SystemInfoAssistBTS-R98-ExpOTD -- whether n.th is present or not ? SystemInfoAssistBTS-R98-ExpOTD ::= CHOICE { notPresent NULL, present AssistBTSData-R98-ExpOTD } -- This element completes AssistBTSData IE AssistBTSData-R98-ExpOTD ::= SEQUENCE { expectedOTD ExpectedOTD, expOTDuncertainty ExpOTDUncertainty -- Uncertainty of expected OTD } -- Expected OTD value between nbor base station and reference BTS -- at MS's current estimated location. ExpectedOTD ::= INTEGER (0..1250) -- The ExpectedOTD value 1250 shall not be encoded by the transmitting entity and -- shall be treated by the receiving entity as 0. -- Uncertainty of Exptected OTD in bits ExpOTDUncertainty ::= INTEGER(0..7) -- Release 98 extensions GPSReferenceTimeUncertainty ::= INTEGER (0 .. 127) -- Coding according to Annex GPSTimeAssistanceMeasurements ::= SEQUENCE { referenceFrameMSB INTEGER (0 .. 63), -- MSB of frame number gpsTowSubms INTEGER (0 .. 9999) OPTIONAL, -- in units of 100ns, for MS based AGPS deltaTow INTEGER (0 .. 127) OPTIONAL, -- for MS assisted AGPS gpsReferenceTimeUncertainty GPSReferenceTimeUncertainty OPTIONAL } Rel-98-MsrPosition-Rsp-Extension ::= SEQUENCE { -- First extension to Release 98 rel-98-Ext-MeasureInfo SEQUENCE { otd-MeasureInfo-R98-Ext OTD-MeasureInfo-R98-Ext OPTIONAL }, ..., timeAssistanceMeasurements GPSTimeAssistanceMeasurements OPTIONAL -- Further R98 extensions here } -- This is an addition to OTD-MeasureInfo element defined in original message, -- If OTD-MeasureInfo is absent, or if one or more OTD-MsrElementRest are present -- OTD-MeasureInfo-R98-Ext shall be absent. -- OTD-MeasureInfo-R98-Ext OTD-MeasureInfo-R98-Ext ::= SEQUENCE { -- Measurement info elements otdMsrFirstSets-R98-Ext OTD-MsrElementFirst-R98-Ext } -- OTD measurement information Ext for the first set only OTD-MsrElementFirst-R98-Ext ::= SEQUENCE { -- additional measured neighbors in OTD measurements otd-FirstSetMsrs-R98-Ext SeqOfOTD-FirstSetMsrs-R98-Ext OPTIONAL } SeqOfOTD-FirstSetMsrs-R98-Ext ::= SEQUENCE (SIZE(1..5)) OF OTD-FirstSetMsrs Rel-5-MsrPosition-Rsp-Extension ::= SEQUENCE { extended-reference Extended-reference OPTIONAL, -- The extended-reference shall be included by the MS if and only if previously -- received from the SMLC in a Measure Position Request. When included, the value sent -- by the MS shall equal the value received from the SMLC. -- extension to Release 5, for RRLP pseudo-segmentation here otd-MeasureInfo-5-Ext OTD-MeasureInfo-5-Ext OPTIONAL, ulPseudoSegInd UlPseudoSegInd OPTIONAL, -- Included when uplink RRLP -- Pseudo-segmentation is used, not included when no uplink pseudo-segmentation is used ... -- Possibly more extensions for Release 5 here later } Extended-reference ::= SEQUENCE { smlc-code INTEGER (0..63), transaction-ID INTEGER (0..262143) } OTD-MeasureInfo-5-Ext ::= SeqOfOTD-MsrElementRest -- if more than one measurement sets are present this element is repeated -- NumberOfSets - 1 (-1 = first set) combined in OTD-MeasureInfo-5-Ext and -- OTD-MeasureInfo (e.g. if NumberOfSets is 3, then one otdMsrRestSets may -- be sent in OTD-MeasureInfo-5-Ext and one in OTD-MeasureInfo) -- First part of Uplink RRLP Pseudo-segmentation indication, possibly more may be defined -- in the future for segmentation with more than two segments. UlPseudoSegInd ::= ENUMERATED { firstOfMany (0), secondOfMany(1) } Rel5-MsrPosition-Req-Extension ::= SEQUENCE { extended-reference Extended-reference, ... -- Possibly more extensions for Release 5 here later } Rel5-AssistanceData-Extension ::= SEQUENCE { extended-reference Extended-reference, ... -- Possibly more extensions for Release 5 here later } Rel-5-ProtocolError-Extension::= SEQUENCE { extended-reference Extended-reference OPTIONAL, -- The extended-reference shall be included by the MS if and only if previously -- received from the SMLC. -- When included, the value sent by the MS shall equal the value received from the SMLC. ... -- Possibly more extensions for Release 5 here later } -- Release 7 Extensions here Rel7-MsrPosition-Req-Extension ::= SEQUENCE { velocityRequested NULL OPTIONAL, ganssPositionMethod GANSSPositioningMethod OPTIONAL, ganss-AssistData GANSS-AssistData OPTIONAL, ganssCarrierPhaseMeasurementRequest NULL OPTIONAL, ganssTODGSMTimeAssociationMeasurementRequest NULL OPTIONAL, requiredResponseTime RequiredResponseTime OPTIONAL, ... -- Further Release 7 extentions here } -- additional satellite systems may be added in future versions of the protocol GANSSPositioningMethod ::= BIT STRING { gps (0), galileo (1)} (SIZE (2..16)) GANSS-AssistData ::= SEQUENCE { ganss-controlHeader GANSS-ControlHeader } GANSS-ControlHeader ::= SEQUENCE { ganssCommonAssistData GANSSCommonAssistData OPTIONAL, ganssGenericAssistDataList SeqOfGANSSGenericAssistDataElement OPTIONAL } -- GANSS Common Assistance Data Elements GANSSCommonAssistData ::= SEQUENCE { ganssReferenceTime GANSSReferenceTime OPTIONAL, ganssRefLocation GANSSRefLocation OPTIONAL, ganssIonosphericModel GANSSIonosphericModel OPTIONAL, ... } -- List of GANSS Generic Assistance Data Elements, up to 8 GANSS SeqOfGANSSGenericAssistDataElement ::= SEQUENCE (SIZE (1..8)) OF GANSSGenericAssistDataElement -- GANSS Generic Assistance Data Elements GANSSGenericAssistDataElement ::= SEQUENCE { ganssID INTEGER (0..7) OPTIONAL, -- Coding according to Annex ganssTimeModel SeqOfGANSSTimeModel OPTIONAL, ganssDiffCorrections GANSSDiffCorrections OPTIONAL, ganssNavigationModel GANSSNavModel OPTIONAL, ganssRealTimeIntegrity GANSSRealTimeIntegrity OPTIONAL, ganssDataBitAssist GANSSDataBitAssist OPTIONAL, ganssRefMeasurementAssist GANSSRefMeasurementAssist OPTIONAL, ganssAlmanacModel GANSSAlmanacModel OPTIONAL, ganssUTCModel GANSSUTCModel OPTIONAL, ... } -- GANSS COMMON ASSISTANCE DATA ELEMENTS -- GANSS Reference Time IE GANSSReferenceTime ::= SEQUENCE { ganssRefTimeInfo GANSSRefTimeInfo, ganssTOD-GSMTimeAssociation GANSSTOD-GSMTimeAssociation OPTIONAL } -- GANSS Reference Time includes GANSS TOD, GANSS Day, uncertainty GANSSRefTimeInfo ::= SEQUENCE { ganssDay INTEGER(0 .. 8191) OPTIONAL, ganssTOD GANSSTOD, ganssTODUncertainty GANSSTODUncertainty OPTIONAL, ganssTimeID INTEGER (0 .. 7) OPTIONAL } -- GANSS TOD integer seconds GANSSTOD ::= INTEGER (0 .. 86399) -- GANSS TOD uncertainty GANSSTODUncertainty ::= INTEGER (0 .. 127) -- Coding according to Annex -- GANSS TOD-GSM Time association GANSSTOD-GSMTimeAssociation ::= SEQUENCE { bcchCarrier BCCHCarrier, -- BCCH carrier bsic BSIC, -- BSIC frameNumber FrameNumber, timeSlot TimeSlot, bitNumber BitNumber, frameDrift FrameDrift OPTIONAL } -- Frame drift FrameDrift ::= INTEGER(-64 .. 63) -- GANSS Reference Location IE GANSSRefLocation ::= SEQUENCE { threeDLocation Ext-GeographicalInformation } -- GANSS Ionospheric Model IE -- GANSS Ionospheric Model consists of NeQuick model parameters and storm flags GANSSIonosphericModel ::= SEQUENCE { ganssIonoModel GANSSIonosphereModel, ganssIonoStormFlags GANSSIonoStormFlags OPTIONAL, ... } -- GANSS ionosphere model. Coding according to Annex GANSSIonosphereModel ::= SEQUENCE { ai0 INTEGER (0 .. 4095), ai1 INTEGER (0 .. 4095), ai2 INTEGER (0 .. 4095) } -- GANSS ionosphere storm flags GANSSIonoStormFlags ::= SEQUENCE { ionoStormFlag1 INTEGER (0 .. 1), ionoStormFlag2 INTEGER (0 .. 1), ionoStormFlag3 INTEGER (0 .. 1), ionoStormFlag4 INTEGER (0 .. 1), ionoStormFlag5 INTEGER (0 .. 1) } -- GANSS GENERIC ASSISTANCE DATA ELEMENTS -- GANSS Time Model IE consists of time offset and first and second order parameters to relate GNSS -- specific system time to selected time reference -- SeqOf GANSSTimeModel ::= SEQUENCE (SIZE(1..7)) OF GANSSTimeModelElement SeqOfGANSSTimeModel ::= SEQUENCE (SIZE(1..7)) OF GANSSTimeModelElement GANSSTimeModelElement ::= SEQUENCE { ganssTimeModelRefTime INTEGER(0 .. 65535), tA0 TA0, tA1 TA1 OPTIONAL, tA2 TA2 OPTIONAL, gnssTOID INTEGER (0 .. 7), weekNumber INTEGER (0 .. 8191) OPTIONAL } -- GANSS time model parameter A0 TA0 ::= INTEGER (-2147483648 .. 2147483647) -- GANSS time model parameter A1 TA1 ::= INTEGER (-8388608 .. 8388607) -- GANSS time model parameter A2 TA2 ::= INTEGER (-64 .. 63) -- DGANSS Corrections IE GANSSDiffCorrections ::= SEQUENCE { dganssRefTime INTEGER (0 .. 119), -- DGANSS reference time -- N_SGN_TYPE can be read from number of elements of sgnTypeList sgnTypeList SeqOfSgnTypeElement } SeqOfSgnTypeElement ::= SEQUENCE (SIZE (1..3)) OF SgnTypeElement -- max three signals per GNSS -- DGANSS signal type element, once per GNSS signal type included in DGANSS SgnTypeElement ::= SEQUENCE { ganssSignalID GANSSSignalID OPTIONAL, -- signal type identity ganssStatusHealth INTEGER (0 .. 7), -- N_SGN can be read from number of elements of dganssSgnList dganssSgnList SeqOfDGANSSSgnElement } GANSSSignalID ::= INTEGER (0 .. 3) -- Coding according to Annex SeqOfDGANSSSgnElement ::= SEQUENCE (SIZE (1..16)) OF DGANSSSgnElement -- number of correction for signals DGANSSSgnElement ::= SEQUENCE { svID SVID, -- Satellite identity --- Sequence number for GANSS Navigation Model that matches the DGANSS correction set iod INTEGER (0 .. 1023), -- User Differential Range Error udre INTEGER (0..3), -- Pseudo Range Correction, range is -- -655.04 - +655.04, pseudoRangeCor INTEGER (-2047..2047), -- Pseudo Range Rate Correction, range is -- -4.064 - +4.064, rangeRateCor INTEGER (-127..127) } SVID ::= INTEGER (0 .. 63) -- Coding according to Annex -- GANSS Navigation Model IE GANSSNavModel ::= SEQUENCE { nonBroadcastIndFlag INTEGER (0 .. 1), toeMSB INTEGER (0 .. 31) OPTIONAL, -- 5 MSB of toe and toc eMSB INTEGER (0 .. 127) OPTIONAL, sqrtAMBS INTEGER (0 .. 63) OPTIONAL, ganssSatelliteList SeqOfGANSSSatelliteElement } SeqOfGANSSSatelliteElement ::= SEQUENCE (SIZE(1..32)) OF GANSSSatelliteElement GANSSSatelliteElement ::= SEQUENCE { svID SVID, svHealth INTEGER (-7 .. 13), -- Coding according to Annex iod INTEGER (0 .. 1023), -- Coding according to Annex ganssClockModel GANSSClockModel, ganssOrbitModel GANSSOrbitModel, ... } -- GANSS orbit model for the GNSS satellite according to the choice GANSSOrbitModel ::= CHOICE { keplerianSet NavModel-KeplerianSet, ... } -- Navigation model in Keplerian parameters NavModel-KeplerianSet ::= SEQUENCE { keplerToeLSB INTEGER (0 .. 511), -- 9LSB are given in GANSSNavigationModel keplerW INTEGER (-2147483648..2147483647), keplerDeltaN INTEGER (-32768..32767), keplerM0 INTEGER (-2147483648..2147483647), keplerOmegaDot INTEGER (-8388608..8388607), keplerELSB INTEGER (0..33554431), keplerIDot INTEGER (-8192..8191), keplerAPowerHalfLSB INTEGER (0.. 67108863), keplerI0 INTEGER (-2147483648..2147483647), keplerOmega0 INTEGER (-2147483648..2147483647), keplerCrs INTEGER (-32768..32767), keplerCis INTEGER (-32768..32767), keplerCus INTEGER (-32768..32767), keplerCrc INTEGER (-32768..32767), keplerCic INTEGER (-32768..32767), keplerCuc INTEGER (-32768..32767) } -- GANSS clock model for the GNSS satellite according to the choice GANSSClockModel ::= CHOICE { standardClockModelList SeqOfStandardClockModelElement, ... } SeqOfStandardClockModelElement ::= SEQUENCE (SIZE(1..2)) OF StandardClockModelElement StandardClockModelElement ::= SEQUENCE { stanClockTocLSB INTEGER (0 .. 511), -- 9LSB of time of clock stanClockAF2 INTEGER (-2048 .. 2047), stanClockAF1 INTEGER (-131072 .. 131071), stanClockAF0 INTEGER (-134217728 .. 134217727), stanClockTgd INTEGER (-512 .. 511) OPTIONAL, stanModelID INTEGER (0 .. 1) OPTIONAL, ... } -- GANSS Real-Time Integrity IE GANSSRealTimeIntegrity ::= SEQUENCE { -- list of bad signals -- NBS can be read from number of elements in SeqOf-BadSignalSet ganssBadSignalList SeqOfBadSignalElement } SeqOfBadSignalElement ::= SEQUENCE (SIZE(1..16)) OF BadSignalElement BadSignalElement ::= SEQUENCE { badSVID SVID, -- Coding according to Annex badSignalID INTEGER (0 .. 3) OPTIONAL -- Coding according to Annex } -- GANSS Data Bit Assistance IE GANSSDataBitAssist ::= SEQUENCE { ganssTOD INTEGER (0 .. 59), svID SVID, ganssDataTypeID INTEGER (0 .. 2), -- Coding according to Annex -- list of navigation data bits -- N_BIT can be read from number of elements in SeqOf-DataBits ganssDataBits SeqOf-GANSSDataBits } SeqOf-GANSSDataBits ::= SEQUENCE (SIZE(1 .. 1024)) OF GANSSDataBit GANSSDataBit ::= INTEGER(0 .. 1) -- GANSS Reference Measurement Assistance IE -- Code and Doppler assistance from the network. GANSSRefMeasurementAssist ::= SEQUENCE { ganssSignalID INTEGER (0 .. 3) OPTIONAL, -- Coding according to Annex ganssRefMeasAssitList SeqOfGANSSRefMeasurementElement } SeqOfGANSSRefMeasurementElement ::= SEQUENCE (SIZE(1 .. 16)) OF GANSSRefMeasurementElement GANSSRefMeasurementElement ::= SEQUENCE { svID SVID, -- Doppler 0th order term, -- -1024 m/s to 1023.5 m/s with 0.5 m/s resolution) doppler0 INTEGER (-2048 .. 2047), -- Coding according to Annex additionalDoppler AdditionalDopplerFields OPTIONAL, codePhase INTEGER (0 .. 1022), -- Code Phase in ms intCodePhase INTEGER (0 .. 127), -- Integer Code Phase in ms codePhaseSearchWindow INTEGER (0 .. 31), -- Code Phase Search Window, see Annex additionalAngle AddionalAngleFields OPTIONAL, ... } AdditionalDopplerFields ::= SEQUENCE { -- Doppler 1st order term, -0.2 - +0.1 m/s2 doppler1 INTEGER (0..63), dopplerUncertainty INTEGER (0..4) } -- GANSS Almanac Model IE GANSSAlmanacModel ::= SEQUENCE { weekNumber INTEGER (0 .. 255), svIDMask SVIDMASK, toa INTEGER (0 .. 255) OPTIONAL, ioda INTEGER (0 .. 3) OPTIONAL, ganssAlmanacList SeqOfGANSSAlmanacElement } -- SV ID Mask, LSB for ID 1 and MSB for ID 36 SVIDMASK ::= BIT STRING (SIZE (1..36)) SeqOfGANSSAlmanacElement ::= SEQUENCE (SIZE(1 .. 36)) OF GANSSAlmanacElement -- GANSS Almanac Model GANSSAlmanacElement ::= CHOICE { keplerianAlmanacSet Almanac-KeplerianSet, ... } -- Almanac parameters according to Keplerian parameters Almanac-KeplerianSet ::= SEQUENCE { kepAlmanacE INTEGER (0 .. 2047), kepAlmanacDeltaI INTEGER (-1024 .. 1023), kepAlmanacOmegaDot INTEGER (-1024 .. 1023), kepSVHealth INTEGER (0 .. 15), -- Coding according to Annex kepAlmanacAPowerHalf INTEGER (-65536 .. 65535), kepAlmanacOmega0 INTEGER (-32768 .. 32767), kepAlmanacW INTEGER (-32768 .. 32767), kepAlmanacM0 INTEGER (-32768 .. 32767), kepAlmanacAF0 INTEGER (-8192 .. 8191), kepAlmanacAF1 INTEGER (-1024..1023) } -- GANSS Universal Time Coordinate Model GANSSUTCModel ::= SEQUENCE { ganssUtcA1 INTEGER (-8388608..8388607), ganssUtcA0 INTEGER (-2147483648..2147483647), ganssUtcTot INTEGER (0..255), ganssUtcWNt INTEGER (0..255), ganssUtcDeltaTls INTEGER (-128..127), ganssUtcWNlsf INTEGER (0..255), ganssUtcDN INTEGER (-128..127), ganssUtcDeltaTlsf INTEGER (-128..127) } --Required Measurement Request Response Time, range is 1 to 128 seconds. RequiredResponseTime ::= INTEGER (1..128) Rel-7-MsrPosition-Rsp-Extension ::= SEQUENCE { velEstimate VelocityEstimate OPTIONAL, -- Horizontal Velocity -- Horizontal with Vertical Velocity -- Horizontal Velocity with Uncertainty -- Horizontal with Vertical Velocity and Uncertainty ganssLocationInfo GANSSLocationInfo OPTIONAL, ganssMeasureInfo GANSSMeasureInfo OPTIONAL, ... -- Further Release 7 extensions here } -- GANSS Location Information contains location estimate, time stamp with uncertainty -- and optionally Reference Frame field GANSSLocationInfo ::= SEQUENCE { referenceFrame ReferenceFrame OPTIONAL, -- Reference Frame Number ganssTODm GANSSTODm OPTIONAL, -- GNSS TOD modulo ganssTODFrac INTEGER (0 .. 16384) OPTIONAL, -- Coding according to Annex ganssTODUncertainty GANSSTODUncertainty OPTIONAL, -- Coding according to Annex ganssTimeID INTEGER (0 .. 3) OPTIONAL, -- Coding according to Annex fixType FixType, posData PositionData, stationaryIndication INTEGER(0 .. 1) OPTIONAL, -- ‘0’ if moving or motion not known -- Possible shapes carried in posEstimate are -- ellipsoid point, -- ellipsoid point with uncertainty circle -- ellipsoid point with uncertainty ellipse -- ellipsoid point with altitude and uncertainty ellipsoid posEstimate Ext-GeographicalInformation, ... } PositionData ::= BIT STRING { e-otd(0), gps (1), galileo (2) } (SIZE (3..16)) -- GANSS TOD modulo 1 hour GANSSTODm ::= INTEGER (0 .. 3599999) ReferenceFrame ::= SEQUENCE { referenceFN INTEGER (0 .. 65535), -- Note that applicable range for referenceFN is 0 - 42431 referenceFNMSB INTEGER (0 .. 63) OPTIONAL -- MSB of Reference Frame Number } -- GANSS Measurement Information GANSSMeasureInfo ::= SEQUENCE { -- Measurement info elements -- user has to make sure that in this element is number of elements -- defined in reference BTS identity ganssMsrSetList SeqOfGANSS-MsrSetElement } SeqOfGANSS-MsrSetElement ::= SEQUENCE (SIZE(1..3)) OF GANSS-MsrSetElement -- GANSS measurement information 1-3 times in a message GANSS-MsrSetElement ::= SEQUENCE { referenceFrame ReferenceFrame OPTIONAL, -- Reference Frame Number ganssTODm GANSSTODm OPTIONAL, -- GANSS TOD modulo deltaGNASSTOD INTEGER (0 .. 127) OPTIONAL, ganssTODUncertainty GANSSTODUncertainty OPTIONAL, -- Coding accoring to Annex --N_SGN_TYPE can be read from number of elements of SeqOfGANSS-SgnTypeElement ganss-SgnTypeList SeqOfGANSS-SgnTypeElement } -- Measurements can be returned up to 6 different signal types SeqOfGANSS-SgnTypeElement ::= SEQUENCE (SIZE(1..6)) OF GANSS-SgnTypeElement GANSS-SgnTypeElement ::= SEQUENCE { ganssSignalID INTEGER (0 .. 15), -- Coding accroding to Annex --N_SGN can be read from number of elements of SeqOfGANSS-SgnElement ganss-SgnList SeqOfGANSS-SgnElement } -- Measurements can be returned up to 16 per signal types SeqOfGANSS-SgnElement ::= SEQUENCE (SIZE(1..16)) OF GANSS-SgnElement GANSS-SgnElement ::= SEQUENCE { svID SVID, cNo INTEGER (0 .. 63), mpathDet MpathIndic, -- Coding according to Annex carrierQualityInd INTEGER (0 .. 3) OPTIONAL, -- Coding according to Annex codePhase INTEGER (0 .. 2097151), integerCodePhase INTEGER (0 .. 63) OPTIONAL, codePhaseRMSError INTEGER (0..63), -- Coding accoring to Annex doppler INTEGER (-32768 .. 32767) OPTIONAL, adr INTEGER (0 .. 33554431) OPTIONAL } Rel7-AssistanceData-Extension ::= SEQUENCE { ganss-AssistData GANSS-AssistData OPTIONAL, ganssCarrierPhaseMeasurementRequest NULL OPTIONAL, ganssTODGSMTimeAssociationMeasurementRequest NULL OPTIONAL, ... -- Possibly more extensions for Release 7 here } Ext-GeographicalInformation ::= OCTET STRING (SIZE (1..maxExt-GeographicalInformation)) maxExt-GeographicalInformation INTEGER ::= 20 END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-init.asn0000644000175000017500000000253212576764164021450 0ustar carlescarlesSUPL-INIT DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLINIT; IMPORTS SLPAddress, QoP, PosMethod FROM ULP-Components; SUPLINIT ::= SEQUENCE { posMethod PosMethod, notification Notification OPTIONAL, sLPAddress SLPAddress OPTIONAL, qoP QoP OPTIONAL, sLPMode SLPMode, mAC MAC OPTIONAL, keyIdentity KeyIdentity OPTIONAL, ...} Notification ::= SEQUENCE { notificationType NotificationType, encodingType EncodingType OPTIONAL, requestorId OCTET STRING(SIZE (1..maxReqLength)) OPTIONAL, requestorIdType FormatIndicator OPTIONAL, clientName OCTET STRING(SIZE (1..maxClientLength)) OPTIONAL, clientNameType FormatIndicator OPTIONAL, ...} NotificationType ::= ENUMERATED { noNotificationNoVerification(0), notificationOnly(1), notificationAndVerficationAllowedNA(2), notificationAndVerficationDeniedNA(3), privacyOverride(4), ... } EncodingType ::= ENUMERATED {ucs2(0), gsmDefault(1), utf8(2), ... } maxReqLength INTEGER ::= 50 maxClientLength INTEGER ::= 50 FormatIndicator ::= ENUMERATED { logicalName(0), e-mailAddress(1), msisdn(2), url(3), sipUrl(4), min(5), mdn(6), imsPublicIdentity(7), ... } SLPMode ::= ENUMERATED {proxy(0), nonProxy(1)} MAC ::= BIT STRING(SIZE (64)) KeyIdentity ::= BIT STRING(SIZE (128)) END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-pos.asn0000644000175000017500000000057512576764164021313 0ustar carlescarlesSUPL-POS DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLPOS; IMPORTS Velocity FROM ULP-Components; SUPLPOS ::= SEQUENCE { posPayLoad PosPayLoad, velocity Velocity OPTIONAL, ...} PosPayLoad ::= CHOICE { tia801payload OCTET STRING(SIZE (1..8192)), rrcPayload OCTET STRING(SIZE (1..8192)), rrlpPayload OCTET STRING(SIZE (1..8192)), ...} END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-posinit.asn0000644000175000017500000000264612576764164022200 0ustar carlescarlesSUPL-POS-INIT DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLPOSINIT; IMPORTS SUPLPOS FROM SUPL-POS SETCapabilities FROM SUPL-START LocationId, Position, Ver FROM ULP-Components; SUPLPOSINIT ::= SEQUENCE { sETCapabilities SETCapabilities, requestedAssistData RequestedAssistData OPTIONAL, locationId LocationId, position Position OPTIONAL, sUPLPOS SUPLPOS OPTIONAL, ver Ver OPTIONAL, ...} RequestedAssistData ::= SEQUENCE { almanacRequested BOOLEAN, utcModelRequested BOOLEAN, ionosphericModelRequested BOOLEAN, dgpsCorrectionsRequested BOOLEAN, referenceLocationRequested BOOLEAN, referenceTimeRequested BOOLEAN, acquisitionAssistanceRequested BOOLEAN, realTimeIntegrityRequested BOOLEAN, navigationModelRequested BOOLEAN, navigationModelData XNavigationModel OPTIONAL, ...} -- name clash with RRLP stuff XNavigationModel ::= SEQUENCE { gpsWeek INTEGER(0..1023), gpsToe INTEGER(0..167), nSAT INTEGER(0..31), toeLimit INTEGER(0..10), satInfo SatelliteInfo OPTIONAL, ...} -- Further information on this fields can be found -- in 3GPP TS 44.031 and 49.031 SatelliteInfo ::= SEQUENCE (SIZE (1..31)) OF SatelliteInfoElement SatelliteInfoElement ::= SEQUENCE { satId INTEGER(0..63), iODE INTEGER(0..255), ...} END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-ulp.asn0000644000175000017500000000153612576764164021310 0ustar carlescarlesULP DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Version, SessionID FROM ULP-Components SUPLINIT FROM SUPL-INIT SUPLSTART FROM SUPL-START SUPLRESPONSE FROM SUPL-RESPONSE SUPLPOSINIT FROM SUPL-POS-INIT SUPLPOS FROM SUPL-POS SUPLEND FROM SUPL-END -- SUPLAUTHREQ -- FROM SUPL-AUTH-REQ -- SUPLAUTHRESP -- FROM SUPL-AUTH-RESP; ; -- general ULP PDU layout; ULP-PDU ::= SEQUENCE { length INTEGER(0..65535), version Version, sessionID SessionID, message UlpMessage} UlpMessage ::= CHOICE { msSUPLINIT SUPLINIT, msSUPLSTART SUPLSTART, msSUPLRESPONSE SUPLRESPONSE, msSUPLPOSINIT SUPLPOSINIT, msSUPLPOS SUPLPOS, msSUPLEND SUPLEND, -- msSUPLAUTHREQ SUPLAUTHREQ, msDUMMY2 DUMMY, -- msSUPLAUTHRESP SUPLAUTHRESP, msDUMMY3 DUMMY, ...} DUMMY ::= INTEGER END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-common.asn0000644000175000017500000002232412576764164021776 0ustar carlescarlesULP-Components DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Version, SessionID, IPAddress, SLPAddress, LocationId, Position, StatusCode, Velocity, QoP, PosMethod, Ver; -- protocol version expressed as x.y.z (e.g., 5.1.0) Version ::= SEQUENCE { maj INTEGER(0..255), min INTEGER(0..255), servind INTEGER(0..255)} SessionID ::= SEQUENCE { setSessionID SetSessionID OPTIONAL, -- the semantics of OPTIONAL applies to the encoding only. The parameter itself is MANDATORY. This is introduced only to minimize bandwidth for the SUPL INIT message. Since the setSessionID is allocated by the SET, there is no setSessionID to be transmitted in the SUPL INIT message. slpSessionID SlpSessionID OPTIONAL -- the semantics of OPTIONAL applies to the encoding only. The parameter itself is MANDATORY. This is introduced only to minimize bandwidth for the SUPL START message. Since the slpSessionID is allocated by the SLP, there is no slpSessionID to be transmitted in the SUPL START message.--} SetSessionID ::= SEQUENCE {sessionId INTEGER(0..65535), setId SETId} SETId ::= CHOICE { msisdn OCTET STRING(SIZE (8)), mdn OCTET STRING(SIZE (8)), min BIT STRING(SIZE (34)), -- coded according to TIA-553 imsi OCTET STRING(SIZE (8)), nai IA5String(SIZE (1..1000)), iPAddress IPAddress, ...} -- msisdn, mdn and imsi are a BCD (Binary Coded Decimal) string -- represent digits from 0 through 9, -- two digits per octet, each digit encoded 0000 to 1001 (0 to 9) -- bits 8765 of octet n encoding digit 2n -- bits 4321 of octet n encoding digit 2(n-1) +1 -- not used digits in the string shall be filled with 1111 SlpSessionID ::= SEQUENCE { sessionID OCTET STRING(SIZE (4)), slpId SLPAddress} IPAddress ::= CHOICE { ipv4Address OCTET STRING(SIZE (4)), ipv6Address OCTET STRING(SIZE (16))} SLPAddress ::= CHOICE {iPAddress IPAddress, fQDN FQDN, ...} FQDN ::= VisibleString(FROM ("a".."z" | "A".."Z" | "0".."9" | ".-"))(SIZE (1..255)) Ver ::= BIT STRING(SIZE (64)) LocationId ::= SEQUENCE {cellInfo CellInfo, status Status, ...} Status ::= ENUMERATED {stale(0), current(1), unknown(2), ... } CellInfo ::= CHOICE { gsmCell GsmCellInformation, wcdmaCell WcdmaCellInformation, cdmaCell CdmaCellInformation, ...} Position ::= SEQUENCE { timestamp UTCTime, -- shall include seconds and shall use UTC time. positionEstimate PositionEstimate, velocity Velocity OPTIONAL, ...} PositionEstimate ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, latitude INTEGER(0..8388607), longitude INTEGER(-8388608..8388607), uncertainty SEQUENCE {uncertaintySemiMajor INTEGER(0..127), uncertaintySemiMinor INTEGER(0..127), orientationMajorAxis INTEGER(0..180)} OPTIONAL, -- angle in degree between major axis and North confidence INTEGER(0..100) OPTIONAL, altitudeInfo AltitudeInfo OPTIONAL, ...} AltitudeInfo ::= SEQUENCE { altitudeDirection ENUMERATED {height, depth}, altitude INTEGER(0..32767), altUncertainty INTEGER(0..127), ...} -- based on 3GPP TS 23.032 CdmaCellInformation ::= SEQUENCE { refNID INTEGER(0..65535), -- Network Id refSID INTEGER(0..32767), -- System Id refBASEID INTEGER(0..65535), -- Base Station Id refBASELAT INTEGER(0..4194303), -- Base Station Latitude reBASELONG INTEGER(0..8388607), -- Base Station Longitude refREFPN INTEGER(0..511), -- Base Station PN Code refWeekNumber INTEGER(0..65535), -- GPS Week Number refSeconds INTEGER(0..4194303)-- GPS Seconds -- , ...} GsmCellInformation ::= SEQUENCE { refMCC INTEGER(0..999), -- Mobile Country Code refMNC INTEGER(0..999), -- Mobile Network Code refLAC INTEGER(0..65535), -- Location area code refCI INTEGER(0..65535), -- Cell identity nMR NMR OPTIONAL, tA INTEGER(0..255) OPTIONAL, --Timing Advance ...} WcdmaCellInformation ::= SEQUENCE { refMCC INTEGER(0..999), -- Mobile Country Code refMNC INTEGER(0..999), -- Mobile Network Code refUC INTEGER(0..268435455), -- Cell identity frequencyInfo FrequencyInfo OPTIONAL, primaryScramblingCode INTEGER(0..511) OPTIONAL, measuredResultsList MeasuredResultsList OPTIONAL, ...} FrequencyInfo ::= SEQUENCE { -- after asn1c gcc chokes with this being same as in CellMeasuredResults fmodeSpecificInfo CHOICE {fdd FrequencyInfoFDD, tdd FrequencyInfoTDD, ...}, ...} FrequencyInfoFDD ::= SEQUENCE { uarfcn-UL UARFCN OPTIONAL, uarfcn-DL UARFCN, ...} FrequencyInfoTDD ::= SEQUENCE {uarfcn-Nt UARFCN, ...} UARFCN ::= INTEGER(0..16383) NMR ::= SEQUENCE (SIZE (1..15)) OF NMRelement NMRelement ::= SEQUENCE { aRFCN INTEGER(0..1023), bSIC INTEGER(0..63), rxLev INTEGER(0..63), ...} MeasuredResultsList ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasuredResults MeasuredResults ::= SEQUENCE { frequencyInfo FrequencyInfo OPTIONAL, utra-CarrierRSSI UTRA-CarrierRSSI OPTIONAL, cellMeasuredResultsList CellMeasuredResultsList OPTIONAL} CellMeasuredResultsList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellMeasuredResults -- SPARE: UTRA-CarrierRSSI, Max = 76 -- Values above Max are spare UTRA-CarrierRSSI ::= INTEGER(0..127) CellMeasuredResults ::= SEQUENCE { cellIdentity INTEGER(0..268435455) OPTIONAL, modeSpecificInfo CHOICE {fdd SEQUENCE {primaryCPICH-Info PrimaryCPICH-Info, cpich-Ec-N0 CPICH-Ec-N0 OPTIONAL, cpich-RSCP CPICH-RSCP OPTIONAL, pathloss Pathloss OPTIONAL}, tdd SEQUENCE {cellParametersID CellParametersID, proposedTGSN TGSN OPTIONAL, primaryCCPCH-RSCP PrimaryCCPCH-RSCP OPTIONAL, pathloss Pathloss OPTIONAL, timeslotISCP-List TimeslotISCP-List OPTIONAL}}} CellParametersID ::= INTEGER(0..127) TGSN ::= INTEGER(0..14) PrimaryCCPCH-RSCP ::= INTEGER(0..127) -- SPARE: TimeslotISCP, Max = 91 -- Values above Max are spare TimeslotISCP ::= INTEGER(0..127) TimeslotISCP-List ::= SEQUENCE (SIZE (1..maxTS)) OF TimeslotISCP PrimaryCPICH-Info ::= SEQUENCE {primaryScramblingCode INTEGER(0..511)} -- SPARE: CPICH-Ec-No, Max = 49 -- Values above Max are spare CPICH-Ec-N0 ::= INTEGER(0..63) -- SPARE: CPICH- RSCP, data range from 0 to 91 and from 123 to 127. -- Values from 92 to 122 are spare -- the encoding of cpich-RSCP is (as per 25.331 V5.11.0) -- cpich-RSCP = 123 CPICH RSCP <-120 dBm -- cpich-RSCP = 124 CPICH RSCP < -119 dBm -- cpich-RSCP = 125 CPICH RSCP < -118 dBm -- cpich-RSCP = 126 CPICH RSCP < -117 dBm -- cpich-RSCP = 127 CPICH RSCP < -116 dBm -- cpich-RSCP = 0 CPICH RSCP < -115 dBm -- cpich-RSCP = 1 CPICH -- cpich-RSCP = 89 CPICH RSCP < -26 dBm -- cpich-RSCP = 90 CPICH RSCP < -25 dBm -- cpich-RSCP = 91 CPICH RSCP dBm CPICH-RSCP ::= INTEGER(0..127) -- SPARE: Pathloss, Max = 158 -- Values above Max are spare Pathloss ::= INTEGER(46..173) maxCellMeas INTEGER ::= 32 maxFreq INTEGER ::= 8 maxTS INTEGER ::= 14 QoP ::= SEQUENCE { horacc INTEGER(0..127), veracc INTEGER(0..127) OPTIONAL, -- as defined in 3GPP TS uncertainty.23 maxLocAge INTEGER(0..65535) OPTIONAL, delay INTEGER(0..7) OPTIONAL, -- as defined in 3GPP TS 44.031 ...} Velocity ::= CHOICE { -- velocity definition as per 23.032 horvel Horvel, horandvervel Horandvervel, horveluncert Horveluncert, horandveruncert Horandveruncert, ...} Horvel ::= SEQUENCE { bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), ...} Horandvervel ::= SEQUENCE { verdirect BIT STRING(SIZE (1)), bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), verspeed BIT STRING(SIZE (8)), ...} Horveluncert ::= SEQUENCE { bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), uncertspeed BIT STRING(SIZE (8)), ...} Horandveruncert ::= SEQUENCE { verdirect BIT STRING(SIZE (1)), bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), verspeed BIT STRING(SIZE (8)), horuncertspeed BIT STRING(SIZE (8)), veruncertspeed BIT STRING(SIZE (8)), ...} StatusCode ::= ENUMERATED { unspecified(0), systemFailure(1), unexpectedMessage(2), protocolError(3), dataMissing(4), unexpectedDataValue(5), posMethodFailure(6), posMethodMismatch(7), posProtocolMismatch(8), targetSETnotReachable(9), versionNotSupported(10), resourceShortage(11), invalidSessionId(12), nonProxyModeNotSupported(13), proxyModeNotSupported(14), positioningNotPermitted(15), authNetFailure(16), authSuplinitFailure(17), consentDeniedByUser(100), consentGrantedByUser(101), ... } PosMethod ::= ENUMERATED { agpsSETassisted(0), agpsSETbased(1), agpsSETassistedpref(2), agpsSETbasedpref(3), autonomousGPS(4), aFLT(5), eCID(6), eOTD(7), oTDOA(8), noPosition(9), ... } END gnss-sdr-0.0.6/src/core/libs/supl/asn/supl-end.asn0000644000175000017500000000040612576764164021251 0ustar carlescarlesSUPL-END DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLEND; IMPORTS StatusCode, Position, Ver FROM ULP-Components; SUPLEND ::= SEQUENCE { position Position OPTIONAL, statusCode StatusCode OPTIONAL, ver Ver OPTIONAL, ...} END gnss-sdr-0.0.6/src/core/libs/supl/asn/rrlp-messages.asn0000644000175000017500000000074712576764164022316 0ustar carlescarlesRRLP-Messages -- { RRLP-messages } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS MsrPosition-Req, MsrPosition-Rsp, AssistanceData, ProtocolError FROM RRLP-Components -- { RRLP-Components } ; PDU ::= SEQUENCE { referenceNumber INTEGER (0..7), component RRLP-Component } RRLP-Component ::= CHOICE { msrPositionReq MsrPosition-Req, msrPositionRsp MsrPosition-Rsp, assistanceData AssistanceData, assistanceDataAck NULL, protocolError ProtocolError, ... } END gnss-sdr-0.0.6/src/core/libs/supl/supl.c0000644000175000017500000006663412576764211017375 0ustar carlescarles/* ** SUPL library with some RRLP ** ** Copyright (c) 2007 Tatu Mannisto ** All rights reserved. ** Redistribution and modifications are permitted subject to BSD license. ** Modifified by Carles Fernandez ** to make use of the gnutls library. */ #include "supl.h" #include #include #include #include #include #include #include #include #include #define PARAM_GSM_CELL_CURRENT 1 #define PARAM_GSM_CELL_KNOWN 2 #define PARAM_WCDMA_CELL_CURRENT 4 #define OPTIONAL_MISSING ((void*)0) #ifdef SUPL_DEBUG static struct supl_debug_s { FILE *log; int verbose_rrlp, verbose_supl, debug; int sent,recv, out_msg, in_msg; } debug; #endif static int server_connect(char *server); static int pdu_make_ulp_start(supl_ctx_t *ctx, supl_ulp_t *pdu); static int pdu_make_ulp_pos_init(supl_ctx_t *ctx, supl_ulp_t *pdu); static int pdu_make_ulp_rrlp_ack(supl_ctx_t *ctx, supl_ulp_t *pdu, PDU_t *rrlp); static int supl_more_rrlp(PDU_t *rrlp); static int supl_response_harvest(supl_ctx_t *ctx, supl_ulp_t *pdu); int EXPORT supl_ulp_decode(supl_ulp_t *pdu) { ULP_PDU_t *ulp; asn_codec_ctx_t ctx; asn_dec_rval_t rval; ulp = calloc(1, sizeof(ULP_PDU_t)); pdu->pdu = ulp; ctx.max_stack_size = 0; rval = uper_decode_complete(&ctx, &asn_DEF_ULP_PDU, (void **)&ulp, pdu->buffer, pdu->size); if (rval.code == RC_OK) { return 0; } free(ulp); pdu->pdu = 0; return E_SUPL_DECODE; } int EXPORT supl_ulp_encode(supl_ulp_t *pdu) { asn_enc_rval_t ret; int pdu_len; ret = uper_encode_to_buffer(&asn_DEF_ULP_PDU, pdu->pdu, pdu->buffer, sizeof(pdu->buffer)); if (ret.encoded != -1) { memset(pdu->buffer, 0, sizeof(pdu->buffer)); pdu_len = (ret.encoded + 7) >> 3; ((ULP_PDU_t *)pdu->pdu)->length = pdu_len; ret = uper_encode_to_buffer(&asn_DEF_ULP_PDU, pdu->pdu, pdu->buffer, sizeof(pdu->buffer)); if (ret.encoded > 0) { int len = (ret.encoded + 7) >> 3; if (len == pdu_len) { pdu->size = pdu_len; return 0; } } } return E_SUPL_ENCODE; } void EXPORT supl_ulp_free(supl_ulp_t *pdu) { asn_DEF_ULP_PDU.free_struct(&asn_DEF_ULP_PDU, pdu->pdu, 0); } int EXPORT supl_ulp_send(supl_ctx_t *ctx, supl_ulp_t *pdu) { int err; #if SUPL_DEBUG if (debug.verbose_supl) { fprintf(debug.log, "Send %lu bytes\n", pdu->size); xer_fprint(debug.log, &asn_DEF_ULP_PDU, pdu->pdu); } #endif err = SSL_write(ctx->ssl, pdu->buffer, pdu->size); if (err <= 0) { #if SUPL_DEBUG if (debug.debug) fprintf(debug.log, "Error: SSL_write error: %s\n", strerror(errno)); #endif return E_SUPL_WRITE; } #ifdef SUPL_DEBUG debug.sent += pdu->size; debug.out_msg++; #endif return 0; } int EXPORT supl_ulp_recv(supl_ctx_t *ctx, supl_ulp_t *pdu) { int err; int n; asn_dec_rval_t rval; ULP_PDU_t *length; err = SSL_read(ctx->ssl, pdu->buffer, sizeof(pdu->buffer)); if (err <= 0) { #ifdef SUPL_DEBUG if (debug.debug) fprintf(debug.log, "Error: SSL_read error: %s\n", strerror(errno)); #endif return E_SUPL_READ; } n = err; length = calloc(1, sizeof(ULP_PDU_t)); // decode the very first bytes of the ULP_PDU message, just enough to the get message length rval = uper_decode_complete(0, &asn_DEF_ULP_PDU, (void **)&length, pdu->buffer, n < 6 ? n : 6); if (rval.code == RC_WMORE) { // read the missing data for (n = err; n < length->length; n += err) { #ifdef SUPL_DEBUG if (debug.debug) fprintf(debug.log, "SSL_read got %u bytes (total %lu)\n", n, length->length); #endif err = SSL_read(ctx->ssl, &pdu->buffer[n], sizeof(pdu->buffer)-n); if (err <= 0) { #ifdef SUPL_DEBUG if (debug.debug) fprintf(debug.log, "Error: SSL_read (again) error: %s\n", strerror(errno)); #endif return E_SUPL_READ; } } } asn_DEF_ULP_PDU.free_struct(&asn_DEF_ULP_PDU, length, 0); pdu->size = n; if (supl_ulp_decode(pdu)) { return E_SUPL_DECODE; } #ifdef SUPL_DEBUG if (debug.verbose_supl) { fprintf(debug.log, "Recv %lu bytes\n", pdu->size); xer_fprint(debug.log, &asn_DEF_ULP_PDU, pdu->pdu); } #endif #ifdef SUPL_DEBUG debug.recv += err; debug.in_msg++; #endif return 0; } int EXPORT supl_decode_rrlp(supl_ulp_t *ulp_pdu, PDU_t **ret_rrlp) { asn_dec_rval_t rval; OCTET_STRING_t *rrlp_pdu; PDU_t *rrlp; ULP_PDU_t *ulp; ulp = ulp_pdu->pdu; if (!(ulp->message.present == UlpMessage_PR_msSUPLPOS && ulp->message.choice.msSUPLPOS.posPayLoad.present == PosPayLoad_PR_rrlpPayload)) { return 0; } rrlp_pdu = &ulp->message.choice.msSUPLPOS.posPayLoad.choice.rrlpPayload; rrlp = calloc(1, sizeof(PDU_t)); rval = uper_decode_complete(0, &asn_DEF_PDU, (void **)&rrlp, rrlp_pdu->buf, rrlp_pdu->size); switch (rval.code) { case RC_OK: #ifdef SUPL_DEBUG if (rval.consumed != rrlp_pdu->size) { if (debug.debug) fprintf(debug.log, "Warning: %lu bytes left over in RRLP decoding\n", rval.consumed); } #endif *ret_rrlp = rrlp; return 0; case RC_WMORE: asn_DEF_PDU.free_struct(&asn_DEF_PDU, rrlp, 0); ret_rrlp = 0; return E_SUPL_DECODE_RRLP; default: asn_DEF_PDU.free_struct(&asn_DEF_PDU, rrlp, 0); ret_rrlp = 0; return E_SUPL_DECODE_RRLP; } return E_SUPL_INTERNAL; } int EXPORT supl_server_connect(supl_ctx_t *ctx, char *server) { int err; const SSL_METHOD *meth; SSLeay_add_ssl_algorithms(); // meth = TLSv1_client_method(); meth = SSLv23_client_method(); SSL_load_error_strings(); ctx->ssl_ctx = SSL_CTX_new(meth); if (!ctx->ssl_ctx) return E_SUPL_CONNECT; ctx->ssl = SSL_new(ctx->ssl_ctx); if (!ctx->ssl) return E_SUPL_CONNECT; if (server) { ctx->fd = server_connect(server); if (ctx->fd == -1) return E_SUPL_CONNECT; } SSL_set_fd(ctx->ssl, ctx->fd); err = SSL_connect(ctx->ssl); if (err == -1) return E_SUPL_CONNECT; #if 0 { X509 *s_cert = SSL_get_peer_certificate(ctx->ssl); FILE *fp = fopen("/tmp/s_cert.pem", "w"); if (fp) PEM_write_X509(fp, s_cert); fclose(fp); X509_free(s_cert); } #endif return 0; } void EXPORT supl_close(supl_ctx_t *ctx) { SSL_shutdown(ctx->ssl); SSL_free(ctx->ssl); SSL_CTX_free(ctx->ssl_ctx); close(ctx->fd); } static int server_connect(char *server) { int fd = -1; struct addrinfo *ailist, *aip; struct addrinfo hint; int err; memset(&hint, 0, sizeof(struct addrinfo)); hint.ai_socktype = SOCK_STREAM; err = getaddrinfo(server, SUPL_PORT, &hint, &ailist); if (err != 0) { return -1; } for (aip = ailist; aip; aip = aip->ai_next) { if ((fd = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) { err = errno; } if (connect(fd, aip->ai_addr, aip->ai_addrlen) != 0) { return -1; } break; } return fd; } static int pdu_make_ulp_start(supl_ctx_t *ctx, supl_ulp_t *pdu) { ULP_PDU_t *ulp; SetSessionID_t *session_id; int err; ulp = calloc(1, sizeof(ULP_PDU_t)); session_id = calloc(1, sizeof(SetSessionID_t)); ulp->length = 0; ulp->version.maj = 1; ulp->version.min = 0; ulp->version.servind = 0; session_id->sessionId = 1; // session_id->setId.present = SETId_PR_msisdn; // (void)OCTET_STRING_fromBuf(&session_id->setId.choice.msisdn, ctx->p.msisdn, 8); session_id->setId.present = SETId_PR_imsi; (void)OCTET_STRING_fromBuf(&session_id->setId.choice.imsi, ctx->p.msisdn, 8); ulp->sessionID.setSessionID = session_id; ulp->sessionID.slpSessionID = OPTIONAL_MISSING; ulp->message.present = UlpMessage_PR_msSUPLSTART; ulp->message.choice.msSUPLSTART.sETCapabilities.posTechnology.agpsSETBased = 1; // (void)asn_long2INTEGER(&ulp->message.choice.msSUPLSTART.sETCapabilities.prefMethod, PrefMethod_noPreference); (void)asn_long2INTEGER(&ulp->message.choice.msSUPLSTART.sETCapabilities.prefMethod, PrefMethod_agpsSETBasedPreferred); ulp->message.choice.msSUPLSTART.sETCapabilities.posProtocol.rrlp = 1; if (ctx->p.set & PARAM_GSM_CELL_CURRENT) { ulp->message.choice.msSUPLSTART.locationId.cellInfo.present = CellInfo_PR_gsmCell; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.gsmCell.refMCC = ctx->p.gsm.mcc; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.gsmCell.refMNC = ctx->p.gsm.mnc; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.gsmCell.refLAC = ctx->p.gsm.lac; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.gsmCell.refCI = ctx->p.gsm.ci; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.gsmCell.nMR = OPTIONAL_MISSING; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.gsmCell.tA = OPTIONAL_MISSING; } else if (ctx->p.set & PARAM_WCDMA_CELL_CURRENT) { ulp->message.choice.msSUPLSTART.locationId.cellInfo.present = CellInfo_PR_wcdmaCell; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.wcdmaCell.refMCC = ctx->p.wcdma.mcc; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.wcdmaCell.refMNC = ctx->p.wcdma.mnc; ulp->message.choice.msSUPLSTART.locationId.cellInfo.choice.wcdmaCell.refUC = ctx->p.wcdma.uc; } (void)asn_long2INTEGER(&ulp->message.choice.msSUPLSTART.locationId.status, Status_current); ulp->message.choice.msSUPLSTART.qoP = OPTIONAL_MISSING; pdu->pdu = ulp; err = supl_ulp_encode(pdu); if (err < 0) { asn_DEF_ULP_PDU.free_struct(&asn_DEF_ULP_PDU, ulp, 0); return err; } return 0; } // get slpSessionID from SUPLRESPONSE pdu if preset static int supl_response_harvest(supl_ctx_t *ctx, supl_ulp_t *pdu) { int ret; ULP_PDU_t *ulp = pdu->pdu; void *buf; ctx->slp_session_id.buf = 0; ret = uper_encode_to_new_buffer(&asn_DEF_SlpSessionID, 0, (void *)ulp->sessionID.slpSessionID, &buf); if (ret == -1) return -1; ctx->slp_session_id.buf = buf; ctx->slp_session_id.size = ret; return 0; } static int pdu_make_ulp_pos_init(supl_ctx_t *ctx, supl_ulp_t *pdu) { int err; ULP_PDU_t *ulp; SetSessionID_t *session_id; RequestedAssistData_t *req_adata; ulp = calloc(1, sizeof(ULP_PDU_t)); session_id = calloc(1, sizeof(SetSessionID_t)); req_adata = calloc(1, sizeof(RequestedAssistData_t)); ulp->length = 0; ulp->version.maj = 1; ulp->version.min = 0; ulp->version.servind = 0; session_id->sessionId = 1; // session_id->setId.present = SETId_PR_msisdn; // (void)OCTET_STRING_fromBuf(&session_id->setId.choice.msisdn, ctx->p.msisdn, 8); session_id->setId.present = SETId_PR_imsi; (void)OCTET_STRING_fromBuf(&session_id->setId.choice.imsi, ctx->p.msisdn, 8); ulp->sessionID.setSessionID = session_id; // ulp->sessionID.slpSessionID = OPTIONAL_MISSING; if (ctx->slp_session_id.buf) { (void)uper_decode_complete(0, &asn_DEF_SlpSessionID, (void **)&ulp->sessionID.slpSessionID, ctx->slp_session_id.buf, ctx->slp_session_id.size); } else { ulp->sessionID.slpSessionID = OPTIONAL_MISSING; } ulp->message.present = UlpMessage_PR_msSUPLPOSINIT; ulp->message.choice.msSUPLPOSINIT.sETCapabilities.posTechnology.agpsSETBased = 1; // (void)asn_long2INTEGER(&ulp->message.choice.msSUPLPOSINIT.sETCapabilities.prefMethod, PrefMethod_noPreference); (void)asn_long2INTEGER(&ulp->message.choice.msSUPLPOSINIT.sETCapabilities.prefMethod, PrefMethod_agpsSETBasedPreferred); ulp->message.choice.msSUPLPOSINIT.sETCapabilities.posProtocol.rrlp = 1; //GNSS-SDR mod // Use ctx->p.request to swith between a pre-defined set of assistence data request // reason: Some SUPL servers do not respond to Acquisition assistance depending on the status of other assistance flags switch (ctx->p.request) { case 0: //request almanac, time, and cell positions req_adata->acquisitionAssistanceRequested = 0; // 1 req_adata->navigationModelRequested = 0; // 1 req_adata->referenceTimeRequested = 1; req_adata->utcModelRequested = 1; //1 req_adata->ionosphericModelRequested = 1; // 1 req_adata->referenceLocationRequested = 1; req_adata->almanacRequested = 1; req_adata->realTimeIntegrityRequested = 1; // 1 break; case 1: // request Navigation Model (Ephemeris) req_adata->acquisitionAssistanceRequested = 0; // 1 req_adata->navigationModelRequested = 1; // 1 req_adata->referenceTimeRequested = 1; req_adata->utcModelRequested = 0; //1 req_adata->ionosphericModelRequested = 0; // 1 req_adata->referenceLocationRequested = 0; req_adata->almanacRequested = 0; req_adata->realTimeIntegrityRequested = 0; // 1 break; case 2: //request Acquisition assistance (Doppler assistance) req_adata->acquisitionAssistanceRequested = 1; // 1 req_adata->navigationModelRequested = 0; // 1 req_adata->referenceTimeRequested = 1; req_adata->utcModelRequested = 1; //1 req_adata->ionosphericModelRequested = 1; // 1 req_adata->referenceLocationRequested = 1; req_adata->almanacRequested = 1; req_adata->realTimeIntegrityRequested = 1; // 1 break; default: req_adata->acquisitionAssistanceRequested = 0; // 1 req_adata->navigationModelRequested = 0; // 1 req_adata->referenceTimeRequested = 1; req_adata->utcModelRequested = 1; //1 req_adata->ionosphericModelRequested = 1; // 1 req_adata->referenceLocationRequested = 1; req_adata->almanacRequested = 1; req_adata->realTimeIntegrityRequested = 1; // 1 break; } ulp->message.choice.msSUPLPOSINIT.requestedAssistData = req_adata; if (ctx->p.set & PARAM_GSM_CELL_CURRENT) { ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.present = CellInfo_PR_gsmCell; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.gsmCell.refMCC = ctx->p.gsm.mcc; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.gsmCell.refMNC = ctx->p.gsm.mnc; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.gsmCell.refLAC = ctx->p.gsm.lac; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.gsmCell.refCI = ctx->p.gsm.ci; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.gsmCell.nMR = OPTIONAL_MISSING; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.gsmCell.tA = OPTIONAL_MISSING; } else if (ctx->p.set & PARAM_WCDMA_CELL_CURRENT) { ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.present = CellInfo_PR_wcdmaCell; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.wcdmaCell.refMCC = ctx->p.wcdma.mcc; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.wcdmaCell.refMNC = ctx->p.wcdma.mnc; ulp->message.choice.msSUPLPOSINIT.locationId.cellInfo.choice.wcdmaCell.refUC = ctx->p.wcdma.uc; } if (ctx->p.set & PARAM_GSM_CELL_KNOWN) { Position_t *pos = calloc(1, sizeof(Position_t)); struct tm *tm; time_t t; (void)asn_long2INTEGER(&ulp->message.choice.msSUPLPOSINIT.locationId.status, Status_stale); t = time(0); tm = gmtime(&t); asn_UT2time(&pos->timestamp, tm ,1); (void)asn_long2INTEGER(&pos->positionEstimate.latitudeSign, latitudeSign_north); pos->positionEstimate.latitude = (1 << 23) / 90.0 * ctx->p.known.lat; pos->positionEstimate.longitude = (1 << 24) / 360.0 * ctx->p.known.lon; // TODO: set position estimate ulp->message.choice.msSUPLPOSINIT.position = pos; } else { (void)asn_long2INTEGER(&ulp->message.choice.msSUPLPOSINIT.locationId.status, Status_current); ulp->message.choice.msSUPLPOSINIT.position = OPTIONAL_MISSING; } ulp->message.choice.msSUPLPOSINIT.sUPLPOS = OPTIONAL_MISSING; ulp->message.choice.msSUPLPOSINIT.ver = OPTIONAL_MISSING; pdu->pdu = ulp; err = supl_ulp_encode(pdu); if (err < 0) { asn_DEF_ULP_PDU.free_struct(&asn_DEF_ULP_PDU, ulp, 0); return err; } return 0; } static int pdu_make_ulp_rrlp_ack(supl_ctx_t *ctx, supl_ulp_t *pdu, PDU_t *rrlp) { int err; PDU_t *rrlp_ack; ULP_PDU_t *ulp; SetSessionID_t *session_id; asn_enc_rval_t ret; int pdu_len; char buffer[1024]; rrlp_ack = calloc(1, sizeof(PDU_t)); /* create RRLP assistanceDataAck */ rrlp_ack->referenceNumber = rrlp->referenceNumber; rrlp_ack->component.present = RRLP_Component_PR_assistanceDataAck; ret = uper_encode_to_buffer(&asn_DEF_PDU, rrlp_ack, buffer, sizeof(buffer)); asn_DEF_ULP_PDU.free_struct(&asn_DEF_PDU, rrlp_ack, 0); if (ret.encoded == -1) { return E_SUPL_ENCODE_RRLP; } pdu_len = (ret.encoded + 7) >> 3; /* embedded it in SUPLPOS */ ulp = calloc(1, sizeof(ULP_PDU_t)); session_id = calloc(1, sizeof(SetSessionID_t)); ulp->length = 0; ulp->version.maj = 1; ulp->version.min = 0; ulp->version.servind = 0; session_id->sessionId = 1; // session_id->setId.present = SETId_PR_msisdn; // (void)OCTET_STRING_fromBuf(&session_id->setId.choice.msisdn, ctx->p.msisdn, 8); session_id->setId.present = SETId_PR_imsi; (void)OCTET_STRING_fromBuf(&session_id->setId.choice.imsi, ctx->p.msisdn, 8); ulp->sessionID.setSessionID = session_id; // ulp->sessionID.slpSessionID = OPTIONAL_MISSING; if (ctx->slp_session_id.buf) { (void)uper_decode_complete(0, &asn_DEF_SlpSessionID, (void **)&ulp->sessionID.slpSessionID, ctx->slp_session_id.buf, ctx->slp_session_id.size); } else { ulp->sessionID.slpSessionID = OPTIONAL_MISSING; } ulp->message.present = UlpMessage_PR_msSUPLPOS; ulp->message.choice.msSUPLPOS.posPayLoad.present = PosPayLoad_PR_rrlpPayload; (void)OCTET_STRING_fromBuf(&ulp->message.choice.msSUPLPOS.posPayLoad.choice.rrlpPayload, buffer, pdu_len); pdu->pdu = ulp; err = supl_ulp_encode(pdu); if (err < 0) { supl_ulp_free(pdu); return err; } return 0; } /* ** ** */ int EXPORT supl_collect_rrlp(supl_assist_t *assist, PDU_t *rrlp, struct timeval *t) { ControlHeader_t *hdr; if (rrlp->component.present != RRLP_Component_PR_assistanceData) return 0; if (!rrlp->component.choice.assistanceData.gps_AssistData) return 0; hdr = &rrlp->component.choice.assistanceData.gps_AssistData->controlHeader; if (hdr->referenceTime) { assist->set |= SUPL_RRLP_ASSIST_REFTIME; assist->time.gps_tow = hdr->referenceTime->gpsTime.gpsTOW23b; assist->time.gps_week = hdr->referenceTime->gpsTime.gpsWeek; memcpy(&assist->time.stamp, t, sizeof(struct timeval)); } if (hdr->refLocation) { OCTET_STRING_t *loc; loc = &hdr->refLocation->threeDLocation; if (loc->size == 14 && loc->buf[0] == 0x90) { double lat, lon; long l; /* from 3GPP TS 23.032 V4.0.0 (2001-04) */ l = (loc->buf[1] & 0x7f) << 16 | (loc->buf[2] << 8) | loc->buf[3]; if (loc->buf[1] & 0x80) l *= -1; lat = 90.0 / (1 << 23) * l; l = (loc->buf[4] << 16) | (loc->buf[5] << 8) | loc->buf[6]; lon = 360.0 / (1 << 24) * l; /* max of uncertainty ellipsoid axis */ /* uncert in meters = 10 * (1.1 ^ l - 1) */ /* l == 96 => 100 km uncertainty => not usable */ l = loc->buf[9]; if (loc->buf[10] > l) l = loc->buf[10]; assist->set |= SUPL_RRLP_ASSIST_REFLOC; assist->pos.lat = lat; assist->pos.lon = lon; assist->pos.uncertainty = l; } } if (hdr->acquisAssist) { int n; assist->acq_time = hdr->acquisAssist->timeRelation.gpsTOW; for (n = 0; n < hdr->acquisAssist->acquisList.list.count; n++) { struct AcquisElement *e = hdr->acquisAssist->acquisList.list.array[n]; int i = assist->cnt_acq++; assist->acq[i].prn = e->svid + 1; assist->acq[i].parts = 0; assist->acq[i].doppler0 = e->doppler0; if (e->addionalDoppler) { assist->acq[i].parts |= SUPL_ACQUIS_DOPPLER; assist->acq[i].doppler1 = e->addionalDoppler->doppler1; assist->acq[i].d_win = e->addionalDoppler->dopplerUncertainty; } assist->acq[i].code_ph = e->codePhase; assist->acq[i].code_ph_int = e->intCodePhase; assist->acq[i].bit_num = e->gpsBitNumber; assist->acq[i].code_ph_win = e->codePhaseSearchWindow; if (e->addionalAngle) { assist->acq[i].parts |= SUPL_ACQUIS_ANGLE; assist->acq[i].az = e->addionalAngle->azimuth; assist->acq[i].el = e->addionalAngle->elevation; } } } if (hdr->almanac) { int n; for (n = 0; n < hdr->almanac->almanacList.list.count; n++) { struct AlmanacElement *e = hdr->almanac->almanacList.list.array[n]; int i = assist->cnt_alm++; assist->alm[i].prn = e->satelliteID + 1; assist->alm[i].e = e->almanacE; assist->alm[i].toa = e->alamanacToa; // nice touch 3gpp assist->alm[i].Ksii = e->almanacKsii; assist->alm[i].OMEGA_dot = e->almanacOmegaDot; assist->alm[i].A_sqrt = e->almanacAPowerHalf; assist->alm[i].OMEGA_0 = e->almanacOmega0; assist->alm[i].w = e->almanacW; assist->alm[i].M0 = e->almanacM0; assist->alm[i].AF0 = e->almanacAF0; assist->alm[i].AF1 = e->almanacAF1; } } if (hdr->navigationModel) { UncompressedEphemeris_t *ue; int n; for (n = 0; n < hdr->navigationModel->navModelList.list.count; n++) { struct NavModelElement *e = hdr->navigationModel->navModelList.list.array[n]; int i = assist->cnt_eph++; assist->eph[i].prn = e->satelliteID + 1; /* what is the difference between these two */ ue = 0; if (e->satStatus.present == SatStatus_PR_newNaviModelUC) ue = &e->satStatus.choice.newNaviModelUC; if (e->satStatus.present == SatStatus_PR_newSatelliteAndModelUC) ue = &e->satStatus.choice.newSatelliteAndModelUC; if (ue) { #if 0 assist->eph_x[i].L2P = ue->ephemL2Pflag; assist->eph_x[i].fit = ue->ephemFitFlag; #endif assist->eph[i].delta_n = ue->ephemDeltaN; assist->eph[i].M0 = ue->ephemM0; #if 0 // this is needed for asn1c version 0.9.22 { long v; asn_INTEGER2long((INTEGER_t *)&ue->ephemE, &v); assist->eph[i].e = v; asn_INTEGER2long((INTEGER_t *)&ue->ephemAPowerHalf, &v); assist->eph[i].e = v; } #else assist->eph[i].e = ue->ephemE; assist->eph[i].A_sqrt = ue->ephemAPowerHalf; #endif assist->eph[i].OMEGA_0 = ue->ephemOmegaA0; assist->eph[i].i0 = ue->ephemI0; assist->eph[i].w = ue->ephemW; assist->eph[i].OMEGA_dot = ue->ephemOmegaADot; assist->eph[i].i_dot = ue->ephemIDot; assist->eph[i].Cuc = ue->ephemCuc; assist->eph[i].Cus = ue->ephemCus; assist->eph[i].Crc = ue->ephemCrc; assist->eph[i].Crs = ue->ephemCrs; assist->eph[i].Cic = ue->ephemCic; assist->eph[i].Cis = ue->ephemCis; assist->eph[i].toe = ue->ephemToe; assist->eph[i].IODC = ue->ephemIODC; assist->eph[i].toc = ue->ephemToc; assist->eph[i].AF0 = ue->ephemAF0; assist->eph[i].AF1 = ue->ephemAF1; assist->eph[i].AF2 = ue->ephemAF2; assist->eph[i].nav_model = 1; assist->eph[i].bits = ue->ephemCodeOnL2; assist->eph[i].ura = ue->ephemURA; assist->eph[i].health = ue->ephemSVhealth; assist->eph[i].AODA = ue->ephemAODA; assist->eph[i].tgd = ue->ephemTgd; } } } if (hdr->ionosphericModel) { assist->set |= SUPL_RRLP_ASSIST_IONO; assist->iono.a0 = hdr->ionosphericModel->alfa0; assist->iono.a1 = hdr->ionosphericModel->alfa1; assist->iono.a2 = hdr->ionosphericModel->alfa2; assist->iono.a3 = hdr->ionosphericModel->alfa3; //missed in original supl client assist->iono.b0 = hdr->ionosphericModel->beta0; assist->iono.b1 = hdr->ionosphericModel->beta1; assist->iono.b2 = hdr->ionosphericModel->beta2; assist->iono.b3 = hdr->ionosphericModel->beta3; } if (hdr->utcModel) { assist->set |= SUPL_RRLP_ASSIST_UTC; assist->utc.a0 = hdr->utcModel->utcA0; assist->utc.a1 = hdr->utcModel->utcA1; assist->utc.tot = hdr->utcModel->utcTot; assist->utc.wnt = hdr->utcModel->utcWNt; assist->utc.delta_tls = hdr->utcModel->utcDeltaTls; assist->utc.wnlsf = hdr->utcModel->utcWNlsf; assist->utc.dn = hdr->utcModel->utcDN; assist->utc.delta_tlsf = hdr->utcModel->utcDeltaTlsf; } return 1; } int EXPORT supl_ctx_new(supl_ctx_t *ctx) { memset(ctx, 0, sizeof(supl_ctx_t)); #ifdef SUPL_DEBUG memset(&debug, 0, sizeof(struct supl_debug_s)); #endif return 0; } int EXPORT supl_ctx_free(supl_ctx_t *ctx) { if (ctx->slp_session_id.buf) { free(ctx->slp_session_id.buf); ctx->slp_session_id.buf = 0; } return 0; } static int supl_more_rrlp(PDU_t *rrlp) { long value; return (rrlp->component.present == RRLP_Component_PR_assistanceData && rrlp->component.choice.assistanceData.moreAssDataToBeSent && asn_INTEGER2long((INTEGER_t *)rrlp->component.choice.assistanceData.moreAssDataToBeSent, &value) == 0 && value == MoreAssDataToBeSent_moreMessagesOnTheWay); } int EXPORT supl_get_assist(supl_ctx_t *ctx, char *server, supl_assist_t *assist) { supl_ulp_t ulp; // memcpy(ctx->p.msisdn, "\xde\xad\xbe\xef\xf0\x0b\xaa\x42", 8); memcpy(ctx->p.msisdn, "\xFF\xFF\x91\x94\x48\x45\x83\x98", 8); /* ** connect to server */ if (supl_server_connect(ctx, server) < 0) return E_SUPL_CONNECT; /* ** send SUPL_START */ if (pdu_make_ulp_start(ctx, &ulp) < 0) { return E_SUPL_ENCODE_START; } (void)supl_ulp_send(ctx, &ulp); supl_ulp_free(&ulp); /* ** should receive SUPL_RESPONSE back */ if (supl_ulp_recv(ctx, &ulp) < 0) { return E_SUPL_RECV_RESPONSE; } if (ulp.pdu->message.present != UlpMessage_PR_msSUPLRESPONSE) { supl_ulp_free(&ulp); return E_SUPL_SUPLRESPONSE; } // get and copy slpSessionID if present supl_response_harvest(ctx, &ulp); supl_ulp_free(&ulp); /* ** send SUPL_POS_INIT */ if (pdu_make_ulp_pos_init(ctx, &ulp) < 0) { return E_SUPL_ENCODE_POSINIT; } (void)supl_ulp_send(ctx, &ulp); /* ** should get SUPLPOS back - bounce back and forth until all messages have arrived */ memset(assist, 0, sizeof(supl_assist_t)); while (1) { struct timeval t; PDU_t *rrlp; supl_ulp_free(&ulp); /* record packet recv time */ gettimeofday(&t, 0); if (supl_ulp_recv(ctx, &ulp) < 0) { return E_SUPL_RECV_SUPLPOS; } if (ulp.pdu->message.present == UlpMessage_PR_msSUPLEND) { break; } if (ulp.pdu->message.present != UlpMessage_PR_msSUPLPOS) { supl_ulp_free(&ulp); return E_SUPL_SUPLPOS; } /* get the beef, the RRLP payload */ if (supl_decode_rrlp(&ulp, &rrlp) < 0) { supl_ulp_free(&ulp); return E_SUPL_DECODE_RRLP; } #ifdef SUPL_DEBUG if (debug.verbose_rrlp) { fprintf(debug.log, "Embedded RRLP message\n"); xer_fprint(debug.log, &asn_DEF_PDU, rrlp); } #endif /* remember important stuff from it */ supl_collect_rrlp(assist, rrlp, &t); if (!supl_more_rrlp(rrlp)) { asn_DEF_ULP_PDU.free_struct(&asn_DEF_PDU, rrlp, 0); break; } /* More data coming in, send SUPLPOS + RRLP ACK */ if (pdu_make_ulp_rrlp_ack(ctx, &ulp, rrlp) < 0) { return E_SUPL_RRLP_ACK; } supl_ulp_send(ctx, &ulp); asn_DEF_ULP_PDU.free_struct(&asn_DEF_PDU, rrlp, 0); } supl_ulp_free(&ulp); /* ** send SUPL_END (but who really cares) */ supl_close(ctx); return 0; } void EXPORT supl_set_gsm_cell(supl_ctx_t *ctx, int mcc, int mns, int lac, int ci) { ctx->p.set |= PARAM_GSM_CELL_CURRENT; ctx->p.gsm.mcc = mcc; ctx->p.gsm.mnc = mns; ctx->p.gsm.lac = lac; ctx->p.gsm.ci = ci; } void EXPORT supl_set_gsm_cell_known(supl_ctx_t *ctx, int mcc, int mns, int lac, int ci, double lat, double lon, int uncert) { ctx->p.set |= PARAM_GSM_CELL_KNOWN; ctx->p.known.mcc = mcc; ctx->p.known.mnc = mns; ctx->p.known.lac = lac; ctx->p.known.ci = ci; ctx->p.known.lat = lat; ctx->p.known.lon = lon; ctx->p.known.uncert = uncert; } void EXPORT supl_set_wcdma_cell(supl_ctx_t *ctx, int mcc, int mns, int uc) { ctx->p.set |= PARAM_WCDMA_CELL_CURRENT; ctx->p.wcdma.mcc = mcc; ctx->p.wcdma.mnc = mns; ctx->p.wcdma.uc = uc; } void EXPORT supl_request(supl_ctx_t *ctx, int request) { ctx->p.request = request; } void EXPORT supl_set_debug(FILE *log, int flags) { #ifdef SUPL_DEBUG debug.log = log; if (flags & SUPL_DEBUG_RRLP) debug.verbose_rrlp = 1; if (flags & SUPL_DEBUG_SUPL) debug.verbose_supl = 1; if (flags & SUPL_DEBUG_DEBUG) debug.debug = 1; #endif } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/0000755000175000017500000000000012576764164020000 5ustar carlescarlesgnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_decoder.c0000644000175000017500000001677012576764164022414 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ asn_dec_rval_t rval; \ rval.code = _code; \ if(opt_ctx) opt_ctx->step = step; /* Save context */ \ if(_code == RC_OK || opt_ctx) \ rval.consumed = consumed_myself; \ else \ rval.consumed = 0; /* Context-free */ \ return rval; \ } while(0) /* * The BER decoder of any type. */ asn_dec_rval_t ber_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, const void *ptr, size_t size) { asn_codec_ctx_t s_codec_ctx; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* * Invoke type-specific decoder. */ return type_descriptor->ber_decoder(opt_codec_ctx, type_descriptor, struct_ptr, /* Pointer to the destination structure */ ptr, size, /* Buffer and its size */ 0 /* Default tag mode is 0 */ ); } /* * Check the set of >> tags matches the definition. */ asn_dec_rval_t ber_check_tags(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, const void *ptr, size_t size, int tag_mode, int last_tag_form, ber_tlv_len_t *last_length, int *opt_tlv_form) { ssize_t consumed_myself = 0; ssize_t tag_len; ssize_t len_len; ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; ber_tlv_len_t limit_len = -1; int expect_00_terminators = 0; int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ int tagno; /* * Make sure we didn't exceed the maximum stack size. */ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) RETURN(RC_FAIL); /* * So what does all this implicit skip stuff mean? * Imagine two types, * A ::= [5] IMPLICIT T * B ::= [2] EXPLICIT T * Where T is defined as * T ::= [4] IMPLICIT SEQUENCE { ... } * * Let's say, we are starting to decode type A, given the * following TLV stream: <5> <0>. What does this mean? * It means that the type A contains type T which is, * in turn, empty. * Remember though, that we are still in A. We cannot * just pass control to the type T decoder. Why? Because * the type T decoder expects <4> <0>, not <5> <0>. * So, we must make sure we are going to receive <5> while * still in A, then pass control to the T decoder, indicating * that the tag <4> was implicitly skipped. The decoder of T * hence will be prepared to treat <4> as valid tag, and decode * it appropriately. */ tagno = step /* Continuing where left previously */ + (tag_mode==1?-1:0) ; ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", td->name, (long)size, tag_mode, step, tagno); /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ if(tag_mode == 0 && tagno == td->tags_count) { /* * This must be the _untagged_ ANY type, * which outermost tag isn't known in advance. * Fetch the tag and length separately. */ tag_len = ber_fetch_tag(ptr, size, &tlv_tag); switch(tag_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(ptr); len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } ASN_DEBUG("Advancing %ld in ANY case", (long)(tag_len + len_len)); ADVANCE(tag_len + len_len); } else { assert(tagno < td->tags_count); /* At least one loop */ } for((void)tagno; tagno < td->tags_count; tagno++, step++) { /* * Fetch and process T from TLV. */ tag_len = ber_fetch_tag(ptr, size, &tlv_tag); ASN_DEBUG("Fetching tag from {%p,%ld}: " "len %ld, step %d, tagno %d got %s", ptr, (long)size, (long)tag_len, step, tagno, ber_tlv_tag_string(tlv_tag)); switch(tag_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(ptr); /* * If {I}, don't check anything. * If {I,B,C}, check B and C unless we're at I. */ if(tag_mode != 0 && step == 0) { /* * We don't expect tag to match here. * It's just because we don't know how the tag * is supposed to look like. */ } else { assert(tagno >= 0); /* Guaranteed by the code above */ if(tlv_tag != td->tags[tagno]) { /* * Unexpected tag. Too bad. */ ASN_DEBUG("Expected: %s, " "expectation failed (tn=%d, tm=%d)", ber_tlv_tag_string(td->tags[tagno]), tagno, tag_mode ); RETURN(RC_FAIL); } } /* * Attention: if there are more tags expected, * ensure that the current tag is presented * in constructed form (it contains other tags!). * If this one is the last one, check that the tag form * matches the one given in descriptor. */ if(tagno < (td->tags_count - 1)) { if(tlv_constr == 0) { ASN_DEBUG("tlv_constr = %d, expfail", tlv_constr); RETURN(RC_FAIL); } } else { if(last_tag_form != tlv_constr && last_tag_form != -1) { ASN_DEBUG("last_tag_form %d != %d", last_tag_form, tlv_constr); RETURN(RC_FAIL); } } /* * Fetch and process L from TLV. */ len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); ASN_DEBUG("Fetchinig len = %ld", (long)len_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } /* * FIXME * As of today, the chain of tags * must either contain several indefinite length TLVs, * or several definite length ones. * No mixing is allowed. */ if(tlv_len == -1) { /* * Indefinite length. */ if(limit_len == -1) { expect_00_terminators++; } else { ASN_DEBUG("Unexpected indefinite length " "in a chain of definite lengths"); RETURN(RC_FAIL); } ADVANCE(tag_len + len_len); continue; } else { if(expect_00_terminators) { ASN_DEBUG("Unexpected definite length " "in a chain of indefinite lengths"); RETURN(RC_FAIL); } } /* * Check that multiple TLVs specify ever decreasing length, * which is consistent. */ if(limit_len == -1) { limit_len = tlv_len + tag_len + len_len; if(limit_len < 0) { /* Too great tlv_len value? */ RETURN(RC_FAIL); } } else if(limit_len != tlv_len + tag_len + len_len) { /* * Inner TLV specifies length which is inconsistent * with the outer TLV's length value. */ ASN_DEBUG("Outer TLV is %ld and inner is %ld", (long)limit_len, (long)tlv_len); RETURN(RC_FAIL); } ADVANCE(tag_len + len_len); limit_len -= (tag_len + len_len); if((ssize_t)size > limit_len) { /* * Make sure that we won't consume more bytes * from the parent frame than the inferred limit. */ size = limit_len; } } if(opt_tlv_form) *opt_tlv_form = tlv_constr; if(expect_00_terminators) *last_length = -expect_00_terminators; else *last_length = tlv_len; RETURN(RC_OK); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTRA-CarrierRSSI.c0000644000175000017500000001145412576764164023012 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "UTRA-CarrierRSSI.h" int UTRA_CarrierRSSI_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void UTRA_CarrierRSSI_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int UTRA_CarrierRSSI_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t UTRA_CarrierRSSI_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t UTRA_CarrierRSSI_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t UTRA_CarrierRSSI_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t UTRA_CarrierRSSI_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t UTRA_CarrierRSSI_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t UTRA_CarrierRSSI_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { UTRA_CarrierRSSI_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_UTRA_CarrierRSSI_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_UTRA_CarrierRSSI_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_UTRA_CarrierRSSI = { "UTRA-CarrierRSSI", "UTRA-CarrierRSSI", UTRA_CarrierRSSI_free, UTRA_CarrierRSSI_print, UTRA_CarrierRSSI_constraint, UTRA_CarrierRSSI_decode_ber, UTRA_CarrierRSSI_encode_der, UTRA_CarrierRSSI_decode_xer, UTRA_CarrierRSSI_encode_xer, UTRA_CarrierRSSI_decode_uper, UTRA_CarrierRSSI_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UTRA_CarrierRSSI_tags_1, sizeof(asn_DEF_UTRA_CarrierRSSI_tags_1) /sizeof(asn_DEF_UTRA_CarrierRSSI_tags_1[0]), /* 1 */ asn_DEF_UTRA_CarrierRSSI_tags_1, /* Same as above */ sizeof(asn_DEF_UTRA_CarrierRSSI_tags_1) /sizeof(asn_DEF_UTRA_CarrierRSSI_tags_1[0]), /* 1 */ &asn_PER_type_UTRA_CarrierRSSI_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_TYPE.h0000644000175000017500000001505612576764164022331 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This file contains the declaration structure called "ASN.1 Type Definition", * which holds all information necessary for encoding and decoding routines. * This structure even contains pointer to these encoding and decoding routines * for each defined ASN.1 type. */ #ifndef _CONSTR_TYPE_H_ #define _CONSTR_TYPE_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_TYPE_member_s; /* Forward declaration */ /* * This type provides the context information for various ASN.1 routines, * primarily ones doing decoding. A member _asn_ctx of this type must be * included into certain target language's structures, such as compound types. */ typedef struct asn_struct_ctx_s { short phase; /* Decoding phase */ short step; /* Elementary step of a phase */ int context; /* Other context information */ void *ptr; /* Decoder-specific stuff (stack elements) */ ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ } asn_struct_ctx_t; #include /* Basic Encoding Rules decoder */ #include /* Distinguished Encoding Rules encoder */ #include /* Decoder of XER (XML, text) */ #include /* Encoder into XER (XML, text) */ #include /* Packet Encoding Rules decoder */ #include /* Packet Encoding Rules encoder */ #include /* Subtype constraints support */ /* * Free the structure according to its specification. * If (free_contents_only) is set, the wrapper structure itself (struct_ptr) * will not be freed. (It may be useful in case the structure is allocated * statically or arranged on the stack, yet its elements are allocated * dynamically.) */ typedef void (asn_struct_free_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, int free_contents_only); #define ASN_STRUCT_FREE(asn_DEF, ptr) (asn_DEF).free_struct(&(asn_DEF),ptr,0) #define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ (asn_DEF).free_struct(&(asn_DEF),ptr,1) /* * Print the structure according to its specification. */ typedef int (asn_struct_print_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int level, /* Indentation level */ asn_app_consume_bytes_f *callback, void *app_key); /* * Return the outmost tag of the type. * If the type is untagged CHOICE, the dynamic operation is performed. * NOTE: This function pointer type is only useful internally. * Do not use it in your application. */ typedef ber_tlv_tag_t (asn_outmost_tag_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); /* The instance of the above function type; used internally. */ asn_outmost_tag_f asn_TYPE_outmost_tag; /* * The definitive description of the destination language's structure. */ typedef struct asn_TYPE_descriptor_s { char *name; /* A name of the ASN.1 type. "" in some cases. */ char *xml_tag; /* Name used in XML tag */ /* * Generalized functions for dealing with the specific type. * May be directly invoked by applications. */ asn_struct_free_f *free_struct; /* Free the structure */ asn_struct_print_f *print_struct; /* Human readable output */ asn_constr_check_f *check_constraints; /* Constraints validator */ ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ der_type_encoder_f *der_encoder; /* Canonical DER encoder */ xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ /*********************************************************************** * Internally useful members. Not to be used by applications directly. * **********************************************************************/ /* * Tags that are expected to occur. */ asn_outmost_tag_f *outmost_tag; /* */ ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ int tags_count; /* Number of tags which are expected */ ber_tlv_tag_t *all_tags;/* Every tag for BER/containment */ int all_tags_count; /* Number of tags */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ /* * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). */ struct asn_TYPE_member_s *elements; int elements_count; /* * Additional information describing the type, used by appropriate * functions above. */ void *specifics; } asn_TYPE_descriptor_t; /* * This type describes an element of the constructed type, * i.e. SEQUENCE, SET, CHOICE, etc. */ enum asn_TYPE_flags_e { ATF_NOFLAGS, ATF_POINTER = 0x01, /* Represented by the pointer */ ATF_OPEN_TYPE = 0x02 /* ANY type, without meaningful tag */ }; typedef struct asn_TYPE_member_s { enum asn_TYPE_flags_e flags; /* Element's presentation flags */ int optional; /* Following optional members, including current */ int memb_offset; /* Offset of the element */ ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ asn_TYPE_descriptor_t *type; /* Member type descriptor */ asn_constr_check_f *memb_constraints; /* Constraints validator */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ int (*default_value)(int setval, void **sptr); /* DEFAULT */ char *name; /* ASN.1 identifier of the element */ } asn_TYPE_member_t; /* * BER tag to element number mapping. */ typedef struct asn_TYPE_tag2member_s { ber_tlv_tag_t el_tag; /* Outmost tag of the member */ int el_no; /* Index of the associated member, base 0 */ int toff_first; /* First occurence of the el_tag, relative */ int toff_last; /* Last occurence of the el_tag, relatvie */ } asn_TYPE_tag2member_t; /* * This function is a wrapper around (td)->print_struct, which prints out * the contents of the target language's structure (struct_ptr) into the * file pointer (stream) in human readable form. * RETURN VALUES: * 0: The structure is printed. * -1: Problem dumping the structure. * (See also xer_fprint() in xer_encoder.h) */ int asn_fprint(FILE *stream, /* Destination stream descriptor */ asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ const void *struct_ptr); /* Structure to be printed */ #ifdef __cplusplus } #endif #endif /* _CONSTR_TYPE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SET_OF.h0000644000175000017500000000204612576764164022562 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SET_OF_H_ #define _CONSTR_SET_OF_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct asn_SET_OF_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ /* XER-specific stuff */ int as_XMLValueList; /* The member type must be encoded like this */ } asn_SET_OF_specifics_t; /* * A set specialized functions dealing with the SET OF type. */ asn_struct_free_f SET_OF_free; asn_struct_print_f SET_OF_print; asn_constr_check_f SET_OF_constraint; ber_type_decoder_f SET_OF_decode_ber; der_type_encoder_f SET_OF_encode_der; xer_type_decoder_f SET_OF_decode_xer; xer_type_encoder_f SET_OF_encode_xer; per_type_decoder_f SET_OF_decode_uper; per_type_encoder_f SET_OF_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SET_OF_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SatelliteInfoElement.c0000644000175000017500000000705512576764164024227 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #include "SatelliteInfoElement.h" static int memb_satId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_iODE_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_satId_constr_2 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_iODE_constr_3 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SatelliteInfoElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SatelliteInfoElement, satId), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_satId_constraint_1, &asn_PER_memb_satId_constr_2, 0, "satId" }, { ATF_NOFLAGS, 0, offsetof(struct SatelliteInfoElement, iODE), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_iODE_constraint_1, &asn_PER_memb_iODE_constr_3, 0, "iODE" }, }; static ber_tlv_tag_t asn_DEF_SatelliteInfoElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SatelliteInfoElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* satId at 50 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iODE at 51 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SatelliteInfoElement_specs_1 = { sizeof(struct SatelliteInfoElement), offsetof(struct SatelliteInfoElement, _asn_ctx), asn_MAP_SatelliteInfoElement_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SatelliteInfoElement = { "SatelliteInfoElement", "SatelliteInfoElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SatelliteInfoElement_tags_1, sizeof(asn_DEF_SatelliteInfoElement_tags_1) /sizeof(asn_DEF_SatelliteInfoElement_tags_1[0]), /* 1 */ asn_DEF_SatelliteInfoElement_tags_1, /* Same as above */ sizeof(asn_DEF_SatelliteInfoElement_tags_1) /sizeof(asn_DEF_SatelliteInfoElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SatelliteInfoElement_1, 2, /* Elements count */ &asn_SPC_SatelliteInfoElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_codecs_prim.h0000644000175000017500000000313512576764164023303 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_CODECS_PRIM_H #define ASN_CODECS_PRIM_H #include #ifdef __cplusplus extern "C" { #endif typedef struct ASN__PRIMITIVE_TYPE_s { uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ int size; /* Size of the buffer */ } ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ asn_struct_free_f ASN__PRIMITIVE_TYPE_free; ber_type_decoder_f ber_decode_primitive; der_type_encoder_f der_encode_primitive; /* * A callback specification for the xer_decode_primitive() function below. */ enum xer_pbd_rval { XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ XPBD_BODY_CONSUMED /* Body is recognized and consumed */ }; typedef enum xer_pbd_rval (xer_primitive_body_decoder_f) (asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, size_t chunk_size); /* * Specific function to decode simple primitive types. * Also see xer_decode_general() in xer_decoder.h */ asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, xer_primitive_body_decoder_f *prim_body_decoder ); #ifdef __cplusplus } #endif #endif /* ASN_CODECS_PRIM_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosTechnology.h0000644000175000017500000000156512576764164022755 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #ifndef _PosTechnology_H_ #define _PosTechnology_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* PosTechnology */ typedef struct PosTechnology { BOOLEAN_t agpsSETassisted; BOOLEAN_t agpsSETBased; BOOLEAN_t autonomousGPS; BOOLEAN_t aFLT; BOOLEAN_t eCID; BOOLEAN_t eOTD; BOOLEAN_t oTDOA; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PosTechnology_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PosTechnology; #ifdef __cplusplus } #endif #endif /* _PosTechnology_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SatelliteInfoElement.h0000644000175000017500000000146112576764164024227 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #ifndef _SatelliteInfoElement_H_ #define _SatelliteInfoElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* SatelliteInfoElement */ typedef struct SatelliteInfoElement { long satId; long iODE; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SatelliteInfoElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SatelliteInfoElement; #ifdef __cplusplus } #endif #endif /* _SatelliteInfoElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/XNavigationModel.c0000644000175000017500000001374212576764164023363 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #include "XNavigationModel.h" static int memb_gpsWeek_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_gpsToe_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 167)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_nSAT_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_toeLimit_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 10)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_gpsWeek_constr_2 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_gpsToe_constr_3 = { { APC_CONSTRAINED, 8, 8, 0, 167 } /* (0..167) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_nSAT_constr_4 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_toeLimit_constr_5 = { { APC_CONSTRAINED, 4, 4, 0, 10 } /* (0..10) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_XNavigationModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct XNavigationModel, gpsWeek), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gpsWeek_constraint_1, &asn_PER_memb_gpsWeek_constr_2, 0, "gpsWeek" }, { ATF_NOFLAGS, 0, offsetof(struct XNavigationModel, gpsToe), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gpsToe_constraint_1, &asn_PER_memb_gpsToe_constr_3, 0, "gpsToe" }, { ATF_NOFLAGS, 0, offsetof(struct XNavigationModel, nSAT), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_nSAT_constraint_1, &asn_PER_memb_nSAT_constr_4, 0, "nSAT" }, { ATF_NOFLAGS, 0, offsetof(struct XNavigationModel, toeLimit), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_toeLimit_constraint_1, &asn_PER_memb_toeLimit_constr_5, 0, "toeLimit" }, { ATF_POINTER, 1, offsetof(struct XNavigationModel, satInfo), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satInfo" }, }; static int asn_MAP_XNavigationModel_oms_1[] = { 4 }; static ber_tlv_tag_t asn_DEF_XNavigationModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_XNavigationModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gpsWeek at 38 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gpsToe at 39 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nSAT at 40 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* toeLimit at 41 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* satInfo at 42 */ }; static asn_SEQUENCE_specifics_t asn_SPC_XNavigationModel_specs_1 = { sizeof(struct XNavigationModel), offsetof(struct XNavigationModel, _asn_ctx), asn_MAP_XNavigationModel_tag2el_1, 5, /* Count of tags in the map */ asn_MAP_XNavigationModel_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 4, /* Start extensions */ 6 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_XNavigationModel = { "XNavigationModel", "XNavigationModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_XNavigationModel_tags_1, sizeof(asn_DEF_XNavigationModel_tags_1) /sizeof(asn_DEF_XNavigationModel_tags_1[0]), /* 1 */ asn_DEF_XNavigationModel_tags_1, /* Same as above */ sizeof(asn_DEF_XNavigationModel_tags_1) /sizeof(asn_DEF_XNavigationModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_XNavigationModel_1, 5, /* Elements count */ &asn_SPC_XNavigationModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/der_encoder.c0000644000175000017500000001164512576764164022424 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed); /* * The DER encoder of any type. */ asn_enc_rval_t der_encode(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, asn_app_consume_bytes_f *consume_bytes, void *app_key) { ASN_DEBUG("DER encoder invoked for %s", type_descriptor->name); /* * Invoke type-specific encoder. */ return type_descriptor->der_encoder(type_descriptor, struct_ptr, /* Pointer to the destination structure */ 0, 0, consume_bytes, app_key); } /* * Argument type and callback necessary for der_encode_to_buffer(). */ typedef struct enc_to_buf_arg { void *buffer; size_t left; } enc_to_buf_arg; static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { enc_to_buf_arg *arg = (enc_to_buf_arg *)key; if(arg->left < size) return -1; /* Data exceeds the available buffer size */ memcpy(arg->buffer, buffer, size); arg->buffer = ((char *)arg->buffer) + size; arg->left -= size; return 0; } /* * A variant of the der_encode() which encodes the data into the provided buffer */ asn_enc_rval_t der_encode_to_buffer(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, void *buffer, size_t buffer_size) { enc_to_buf_arg arg; asn_enc_rval_t ec; arg.buffer = buffer; arg.left = buffer_size; ec = type_descriptor->der_encoder(type_descriptor, struct_ptr, /* Pointer to the destination structure */ 0, 0, encode_to_buffer_cb, &arg); if(ec.encoded != -1) { assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); /* Return the encoded contents size */ } return ec; } /* * Write out leading TL[v] sequence according to the type definition. */ ssize_t der_write_tags(asn_TYPE_descriptor_t *sd, size_t struct_length, int tag_mode, int last_tag_form, ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ asn_app_consume_bytes_f *cb, void *app_key) { ber_tlv_tag_t *tags; /* Copy of tags stream */ int tags_count; /* Number of tags */ size_t overall_length; ssize_t *lens; int i; ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", sd->name, tag_mode, sd->tags_count, ber_tlv_tag_string(tag), tag_mode ?(sd->tags_count+1 -((tag_mode == -1) && sd->tags_count)) :sd->tags_count ); if(tag_mode) { /* * Instead of doing shaman dance like we do in ber_check_tags(), * allocate a small array on the stack * and initialize it appropriately. */ int stag_offset; tags = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t)); if(!tags) { /* Can fail on !x86 */ errno = ENOMEM; return -1; } tags_count = sd->tags_count + 1 /* EXPLICIT or IMPLICIT tag is given */ - ((tag_mode == -1) && sd->tags_count); /* Copy tags over */ tags[0] = tag; stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); for(i = 1; i < tags_count; i++) tags[i] = sd->tags[i + stag_offset]; } else { tags = sd->tags; tags_count = sd->tags_count; } /* No tags to write */ if(tags_count == 0) return 0; lens = (ssize_t *)alloca(tags_count * sizeof(lens[0])); if(!lens) { errno = ENOMEM; return -1; } /* * Array of tags is initialized. * Now, compute the size of the TLV pairs, from right to left. */ overall_length = struct_length; for(i = tags_count - 1; i >= 0; --i) { lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); if(lens[i] == -1) return -1; overall_length += lens[i]; lens[i] = overall_length - lens[i]; } if(!cb) return overall_length - struct_length; ASN_DEBUG("%s %s TL sequence (%d elements)", cb?"Encoding":"Estimating", sd->name, tags_count); /* * Encode the TL sequence for real. */ for(i = 0; i < tags_count; i++) { ssize_t len; int _constr; /* Check if this tag happens to be constructed */ _constr = (last_tag_form || i < (tags_count - 1)); len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); if(len == -1) return -1; } return overall_length - struct_length; } static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed) { uint8_t buf[32]; size_t size = 0; int buf_size = cb?sizeof(buf):0; ssize_t tmp; /* Serialize tag (T from TLV) into possibly zero-length buffer */ tmp = ber_tlv_tag_serialize(tag, buf, buf_size); if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; size += tmp; /* Serialize length (L from TLV) into possibly zero-length buffer */ tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); if(tmp == -1) return -1; size += tmp; if(size > sizeof(buf)) return -1; /* * If callback is specified, invoke it, and check its return value. */ if(cb) { if(constructed) *buf |= 0x20; if(cb(buf, size, app_key) < 0) return -1; } return size; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MeasuredResults.h0000644000175000017500000000202212576764164023274 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _MeasuredResults_H_ #define _MeasuredResults_H_ #include /* Including external dependencies */ #include "UTRA-CarrierRSSI.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct FrequencyInfo; struct CellMeasuredResultsList; /* MeasuredResults */ typedef struct MeasuredResults { struct FrequencyInfo *frequencyInfo /* OPTIONAL */; UTRA_CarrierRSSI_t *utra_CarrierRSSI /* OPTIONAL */; struct CellMeasuredResultsList *cellMeasuredResultsList /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MeasuredResults_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MeasuredResults; #ifdef __cplusplus } #endif /* Referred external types */ #include "FrequencyInfo.h" #include "CellMeasuredResultsList.h" #endif /* _MeasuredResults_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Velocity.c0000644000175000017500000000534012576764164021744 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Velocity.h" static asn_per_constraints_t asn_PER_type_Velocity_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Velocity_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Velocity, choice.horvel), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Horvel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "horvel" }, { ATF_NOFLAGS, 0, offsetof(struct Velocity, choice.horandvervel), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Horandvervel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "horandvervel" }, { ATF_NOFLAGS, 0, offsetof(struct Velocity, choice.horveluncert), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Horveluncert, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "horveluncert" }, { ATF_NOFLAGS, 0, offsetof(struct Velocity, choice.horandveruncert), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Horandveruncert, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "horandveruncert" }, }; static asn_TYPE_tag2member_t asn_MAP_Velocity_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* horvel at 226 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* horandvervel at 227 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* horveluncert at 228 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* horandveruncert at 229 */ }; static asn_CHOICE_specifics_t asn_SPC_Velocity_specs_1 = { sizeof(struct Velocity), offsetof(struct Velocity, _asn_ctx), offsetof(struct Velocity, present), sizeof(((struct Velocity *)0)->present), asn_MAP_Velocity_tag2el_1, 4, /* Count of tags in the map */ 0, 4 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_Velocity = { "Velocity", "Velocity", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_Velocity_constr_1, asn_MBR_Velocity_1, 4, /* Elements count */ &asn_SPC_Velocity_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Pathloss.c0000644000175000017500000001075712576764164021753 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Pathloss.h" int Pathloss_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 46 && value <= 173)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void Pathloss_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void Pathloss_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { Pathloss_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int Pathloss_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { Pathloss_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t Pathloss_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { Pathloss_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t Pathloss_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { Pathloss_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t Pathloss_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { Pathloss_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t Pathloss_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { Pathloss_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t Pathloss_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { Pathloss_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t Pathloss_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { Pathloss_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_Pathloss_constr_1 = { { APC_CONSTRAINED, 7, 7, 46, 173 } /* (46..173) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_Pathloss_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Pathloss = { "Pathloss", "Pathloss", Pathloss_free, Pathloss_print, Pathloss_constraint, Pathloss_decode_ber, Pathloss_encode_der, Pathloss_decode_xer, Pathloss_encode_xer, Pathloss_decode_uper, Pathloss_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Pathloss_tags_1, sizeof(asn_DEF_Pathloss_tags_1) /sizeof(asn_DEF_Pathloss_tags_1[0]), /* 1 */ asn_DEF_Pathloss_tags_1, /* Same as above */ sizeof(asn_DEF_Pathloss_tags_1) /sizeof(asn_DEF_Pathloss_tags_1[0]), /* 1 */ &asn_PER_type_Pathloss_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_tlv_tag.c0000644000175000017500000000615612576764164022444 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include ssize_t ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { ber_tlv_tag_t val; ber_tlv_tag_t tclass; size_t skipped; if(size == 0) return 0; val = *(const uint8_t *)ptr; tclass = (val >> 6); if((val &= 0x1F) != 0x1F) { /* * Simple form: everything encoded in a single octet. * Tag Class is encoded using two least significant bits. */ *tag_r = (val << 2) | tclass; return 1; } /* * Each octet contains 7 bits of useful information. * The MSB is 0 if it is the last octet of the tag. */ for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; ptr = ((const char *)ptr) + 1, skipped++) { unsigned int oct = *(const uint8_t *)ptr; if(oct & 0x80) { val = (val << 7) | (oct & 0x7F); /* * Make sure there are at least 9 bits spare * at the MS side of a value. */ if(val >> ((8 * sizeof(val)) - 9)) { /* * We would not be able to accomodate * any more tag bits. */ return -1; } } else { val = (val << 7) | oct; *tag_r = (val << 2) | tclass; return skipped; } } return 0; /* Want more */ } ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { char buf[sizeof("[APPLICATION ]") + 32]; ssize_t ret; ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); if(ret >= (ssize_t)sizeof(buf) || ret < 2) { errno = EPERM; return -1; } return fwrite(buf, 1, ret, f); } ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { char *type = 0; int ret; switch(tag & 0x3) { case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; case ASN_TAG_CLASS_CONTEXT: type = ""; break; case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; } ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ return ret; } char * ber_tlv_tag_string(ber_tlv_tag_t tag) { static char buf[sizeof("[APPLICATION ]") + 32]; (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); return buf; } size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { int tclass = BER_TAG_CLASS(tag); ber_tlv_tag_t tval = BER_TAG_VALUE(tag); uint8_t *buf = (uint8_t *)bufp; uint8_t *end; size_t required_size; size_t i; if(tval <= 30) { /* Encoded in 1 octet */ if(size) buf[0] = (tclass << 6) | tval; return 1; } else if(size) { *buf++ = (tclass << 6) | 0x1F; size--; } /* * Compute the size of the subsequent bytes. */ for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { if(tval >> i) required_size++; else break; } if(size < required_size) return required_size + 1; /* * Fill in the buffer, space permitting. */ end = buf + required_size - 1; for(i -= 7; buf < end; i -= 7, buf++) *buf = 0x80 | ((tval >> i) & 0x7F); *buf = (tval & 0x7F); /* Last octet without high bit */ return required_size + 1; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_tlv_tag.h0000644000175000017500000000345412576764164022447 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_TLV_TAG_H_ #define _BER_TLV_TAG_H_ #ifdef __cplusplus extern "C" { #endif enum asn_tag_class { ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ }; typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ /* * Tag class is encoded together with tag value for optimization purposes. */ #define BER_TAG_CLASS(tag) ((tag) & 0x3) #define BER_TAG_VALUE(tag) ((tag) >> 2) #define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) #define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) /* * Several functions for printing the TAG in the canonical form * (i.e. "[PRIVATE 0]"). * Return values correspond to their libc counterparts (if any). */ ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); char *ber_tlv_tag_string(ber_tlv_tag_t tag); /* * This function tries to fetch the tag from the input stream. * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering tag. * >0: Number of bytes used from bufptr. tag_r will contain the tag. */ ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); /* * This function serializes the tag (T from TLV) in BER format. * It always returns number of bytes necessary to represent the tag, * it is a caller's responsibility to check the return value * against the supplied buffer's size. */ size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); #ifdef __cplusplus } #endif #endif /* _BER_TLV_TAG_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ULP-PDU.h0000644000175000017500000000137512576764164021245 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP" * found in "../supl-ulp.asn" */ #ifndef _ULP_PDU_H_ #define _ULP_PDU_H_ #include /* Including external dependencies */ #include #include "Version.h" #include "SessionID.h" #include "UlpMessage.h" #include #ifdef __cplusplus extern "C" { #endif /* ULP-PDU */ typedef struct ULP_PDU { long length; Version_t version; SessionID_t sessionID; UlpMessage_t message; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ULP_PDU_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ULP_PDU; #ifdef __cplusplus } #endif #endif /* _ULP_PDU_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Position.c0000644000175000017500000000466212576764164021760 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Position.h" static asn_TYPE_member_t asn_MBR_Position_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Position, timestamp), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UTCTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timestamp" }, { ATF_NOFLAGS, 0, offsetof(struct Position, positionEstimate), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PositionEstimate, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "positionEstimate" }, { ATF_POINTER, 1, offsetof(struct Position, velocity), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_Velocity, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "velocity" }, }; static int asn_MAP_Position_oms_1[] = { 2 }; static ber_tlv_tag_t asn_DEF_Position_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Position_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timestamp at 67 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* positionEstimate at 68 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* velocity at 69 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Position_specs_1 = { sizeof(struct Position), offsetof(struct Position, _asn_ctx), asn_MAP_Position_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_Position_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Position = { "Position", "Position", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Position_tags_1, sizeof(asn_DEF_Position_tags_1) /sizeof(asn_DEF_Position_tags_1[0]), /* 1 */ asn_DEF_Position_tags_1, /* Same as above */ sizeof(asn_DEF_Position_tags_1) /sizeof(asn_DEF_Position_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Position_1, 3, /* Elements count */ &asn_SPC_Position_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/WcdmaCellInformation.h0000644000175000017500000000221612576764164024213 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _WcdmaCellInformation_H_ #define _WcdmaCellInformation_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct FrequencyInfo; struct MeasuredResultsList; /* WcdmaCellInformation */ typedef struct WcdmaCellInformation { long refMCC; long refMNC; long refUC; struct FrequencyInfo *frequencyInfo /* OPTIONAL */; long *primaryScramblingCode /* OPTIONAL */; struct MeasuredResultsList *measuredResultsList /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } WcdmaCellInformation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_WcdmaCellInformation; #ifdef __cplusplus } #endif /* Referred external types */ #include "FrequencyInfo.h" #include "MeasuredResultsList.h" #endif /* _WcdmaCellInformation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Position.h0000644000175000017500000000164512576764164021763 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Position_H_ #define _Position_H_ #include /* Including external dependencies */ #include #include "PositionEstimate.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Velocity; /* Position */ typedef struct Position { UTCTime_t timestamp; PositionEstimate_t positionEstimate; struct Velocity *velocity /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Position_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Position; #ifdef __cplusplus } #endif /* Referred external types */ #include "Velocity.h" #endif /* _Position_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CdmaCellInformation.c0000644000175000017500000002365712576764164024033 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CdmaCellInformation.h" static int memb_refNID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refSID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refBASEID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refBASELAT_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 4194303)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_reBASELONG_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refREFPN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 511)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refWeekNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refSeconds_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 4194303)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refNID_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refSID_constr_3 = { { APC_CONSTRAINED, 15, 15, 0, 32767 } /* (0..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refBASEID_constr_4 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refBASELAT_constr_5 = { { APC_CONSTRAINED, 22, -1, 0, 4194303 } /* (0..4194303) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_reBASELONG_constr_6 = { { APC_CONSTRAINED, 23, -1, 0, 8388607 } /* (0..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refREFPN_constr_7 = { { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refWeekNumber_constr_8 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refSeconds_constr_9 = { { APC_CONSTRAINED, 22, -1, 0, 4194303 } /* (0..4194303) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_CdmaCellInformation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refNID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refNID_constraint_1, &asn_PER_memb_refNID_constr_2, 0, "refNID" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refSID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refSID_constraint_1, &asn_PER_memb_refSID_constr_3, 0, "refSID" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refBASEID), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refBASEID_constraint_1, &asn_PER_memb_refBASEID_constr_4, 0, "refBASEID" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refBASELAT), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refBASELAT_constraint_1, &asn_PER_memb_refBASELAT_constr_5, 0, "refBASELAT" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, reBASELONG), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_reBASELONG_constraint_1, &asn_PER_memb_reBASELONG_constr_6, 0, "reBASELONG" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refREFPN), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refREFPN_constraint_1, &asn_PER_memb_refREFPN_constr_7, 0, "refREFPN" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refWeekNumber), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refWeekNumber_constraint_1, &asn_PER_memb_refWeekNumber_constr_8, 0, "refWeekNumber" }, { ATF_NOFLAGS, 0, offsetof(struct CdmaCellInformation, refSeconds), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refSeconds_constraint_1, &asn_PER_memb_refSeconds_constr_9, 0, "refSeconds" }, }; static ber_tlv_tag_t asn_DEF_CdmaCellInformation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_CdmaCellInformation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refNID at 92 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* refSID at 93 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* refBASEID at 94 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* refBASELAT at 95 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* reBASELONG at 96 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* refREFPN at 97 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* refWeekNumber at 98 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* refSeconds at 99 */ }; static asn_SEQUENCE_specifics_t asn_SPC_CdmaCellInformation_specs_1 = { sizeof(struct CdmaCellInformation), offsetof(struct CdmaCellInformation, _asn_ctx), asn_MAP_CdmaCellInformation_tag2el_1, 8, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 7, /* Start extensions */ 9 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_CdmaCellInformation = { "CdmaCellInformation", "CdmaCellInformation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CdmaCellInformation_tags_1, sizeof(asn_DEF_CdmaCellInformation_tags_1) /sizeof(asn_DEF_CdmaCellInformation_tags_1[0]), /* 1 */ asn_DEF_CdmaCellInformation_tags_1, /* Same as above */ sizeof(asn_DEF_CdmaCellInformation_tags_1) /sizeof(asn_DEF_CdmaCellInformation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_CdmaCellInformation_1, 8, /* Elements count */ &asn_SPC_CdmaCellInformation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellInfo.c0000644000175000017500000000454512576764164021647 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CellInfo.h" static asn_per_constraints_t asn_PER_type_CellInfo_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_CellInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct CellInfo, choice.gsmCell), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GsmCellInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gsmCell" }, { ATF_NOFLAGS, 0, offsetof(struct CellInfo, choice.wcdmaCell), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_WcdmaCellInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "wcdmaCell" }, { ATF_NOFLAGS, 0, offsetof(struct CellInfo, choice.cdmaCell), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CdmaCellInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "cdmaCell" }, }; static asn_TYPE_tag2member_t asn_MAP_CellInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gsmCell at 61 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* wcdmaCell at 62 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cdmaCell at 63 */ }; static asn_CHOICE_specifics_t asn_SPC_CellInfo_specs_1 = { sizeof(struct CellInfo), offsetof(struct CellInfo, _asn_ctx), offsetof(struct CellInfo, present), sizeof(((struct CellInfo *)0)->present), asn_MAP_CellInfo_tag2el_1, 3, /* Count of tags in the map */ 0, 3 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_CellInfo = { "CellInfo", "CellInfo", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_CellInfo_constr_1, asn_MBR_CellInfo_1, 3, /* Elements count */ &asn_SPC_CellInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity.c0000644000175000017500000001127612576764164022415 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "KeyIdentity.h" int KeyIdentity_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 128)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void KeyIdentity_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void KeyIdentity_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { KeyIdentity_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int KeyIdentity_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t KeyIdentity_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t KeyIdentity_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t KeyIdentity_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t KeyIdentity_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t KeyIdentity_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t KeyIdentity_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { KeyIdentity_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_KeyIdentity_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 128, 128 } /* (SIZE(128..128)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_KeyIdentity_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_KeyIdentity = { "KeyIdentity", "KeyIdentity", KeyIdentity_free, KeyIdentity_print, KeyIdentity_constraint, KeyIdentity_decode_ber, KeyIdentity_encode_der, KeyIdentity_decode_xer, KeyIdentity_encode_xer, KeyIdentity_decode_uper, KeyIdentity_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_KeyIdentity_tags_1, sizeof(asn_DEF_KeyIdentity_tags_1) /sizeof(asn_DEF_KeyIdentity_tags_1[0]), /* 1 */ asn_DEF_KeyIdentity_tags_1, /* Same as above */ sizeof(asn_DEF_KeyIdentity_tags_1) /sizeof(asn_DEF_KeyIdentity_tags_1[0]), /* 1 */ &asn_PER_type_KeyIdentity_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SetSessionID.c0000644000175000017500000000540012576764164022457 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "SetSessionID.h" static int memb_sessionId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_sessionId_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SetSessionID_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SetSessionID, sessionId), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_sessionId_constraint_1, &asn_PER_memb_sessionId_constr_2, 0, "sessionId" }, { ATF_NOFLAGS, 0, offsetof(struct SetSessionID, setId), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_SETId, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "setId" }, }; static ber_tlv_tag_t asn_DEF_SetSessionID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SetSessionID_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sessionId at 18 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setId at 19 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SetSessionID_specs_1 = { sizeof(struct SetSessionID), offsetof(struct SetSessionID, _asn_ctx), asn_MAP_SetSessionID_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SetSessionID = { "SetSessionID", "SetSessionID", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SetSessionID_tags_1, sizeof(asn_DEF_SetSessionID_tags_1) /sizeof(asn_DEF_SetSessionID_tags_1[0]), /* 1 */ asn_DEF_SetSessionID_tags_1, /* Same as above */ sizeof(asn_DEF_SetSessionID_tags_1) /sizeof(asn_DEF_SetSessionID_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SetSessionID_1, 2, /* Elements count */ &asn_SPC_SetSessionID_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SEQUENCE.c0000644000175000017500000010723612576764164022755 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #undef PHASE_OUT #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) #define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * Check whether we are inside the extensions group. */ #define IN_EXTENSION_GROUP(specs, memb_idx) \ ( ((memb_idx) > (specs)->ext_after) \ &&((memb_idx) < (specs)->ext_before)) /* * Tags are canonically sorted in the tag2element map. */ static int _t2e_cmp(const void *ap, const void *bp) { const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; int a_class = BER_TAG_CLASS(a->el_tag); int b_class = BER_TAG_CLASS(b->el_tag); if(a_class == b_class) { ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); if(a_value == b_value) { if(a->el_no > b->el_no) return 1; /* * Important: we do not check * for a->el_no <= b->el_no! */ return 0; } else if(a_value < b_value) return -1; else return 1; } else if(a_class < b_class) { return -1; } else { return 1; } } /* * The decoder of the SEQUENCE type. */ asn_dec_rval_t SEQUENCE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* SEQUENCE element's index */ ASN_DEBUG("Decoding %s as SEQUENCE", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, 1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) ctx->left += rval.consumed; /* ?Substracted below! */ ADVANCE(rval.consumed); NEXT_PHASE(ctx); ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", (long)ctx->left, (long)size); /* Fall through */ case 1: /* * PHASE 1. * From the place where we've left it previously, * try to decode the next member from the list of * this structure's elements. * (ctx->step) stores the member being processed * between invocations and the microphase {0,1} of parsing * that member: * step = ( * 2 + ). */ for(edx = (ctx->step >> 1); edx < td->elements_count; edx++, ctx->step = (ctx->step & ~1) + 2) { void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ ssize_t tag_len; /* Length of TLV's T */ int opt_edx_end; /* Next non-optional element */ int use_bsearch; int n; if(ctx->step & 1) goto microphase2; /* * MICROPHASE 1: Synchronize decoding. */ ASN_DEBUG("In %s SEQUENCE left %d, edx=%d flags=%d" " opt=%d ec=%d", td->name, (int)ctx->left, edx, elements[edx].flags, elements[edx].optional, td->elements_count); if(ctx->left == 0 /* No more stuff is expected */ && ( /* Explicit OPTIONAL specification reaches the end */ (edx + elements[edx].optional == td->elements_count) || /* All extensions are optional */ (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count) ) ) { ASN_DEBUG("End of SEQUENCE %s", td->name); /* * Found the legitimate end of the structure. */ PHASE_OUT(ctx); RETURN(RC_OK); } /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); ASN_DEBUG("Current tag in %s SEQUENCE for element %d " "(%s) is %s encoded in %d bytes, of frame %ld", td->name, edx, elements[edx].name, ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { ASN_DEBUG("edx = %d, opt = %d, ec=%d", edx, elements[edx].optional, td->elements_count); if((edx + elements[edx].optional == td->elements_count) || (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count)) { /* * Yeah, baby! Found the terminator * of the indefinite length structure. */ /* * Proceed to the canonical * finalization function. * No advancing is necessary. */ goto phase3; } } } /* * Find the next available type with this tag. */ use_bsearch = 0; opt_edx_end = edx + elements[edx].optional + 1; if(opt_edx_end > td->elements_count) opt_edx_end = td->elements_count; /* Cap */ else if(opt_edx_end - edx > 8) { /* Limit the scope of linear search... */ opt_edx_end = edx + 8; use_bsearch = 1; /* ... and resort to bsearch() */ } for(n = edx; n < opt_edx_end; n++) { if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { /* * Found element corresponding to the tag * being looked at. * Reposition over the right element. */ edx = n; ctx->step = 1 + 2 * edx; /* Remember! */ goto microphase2; } else if(elements[n].flags & ATF_OPEN_TYPE) { /* * This is the ANY type, which may bear * any flag whatsoever. */ edx = n; ctx->step = 1 + 2 * edx; /* Remember! */ goto microphase2; } else if(elements[n].tag == (ber_tlv_tag_t)-1) { use_bsearch = 1; break; } } if(use_bsearch) { /* * Resort to a binary search over * sorted array of tags. */ asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; key.el_no = edx; t2m = (asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _t2e_cmp); if(t2m) { asn_TYPE_tag2member_t *best = 0; asn_TYPE_tag2member_t *t2m_f, *t2m_l; int edx_max = edx + elements[edx].optional; /* * Rewind to the first element with that tag, * `cause bsearch() does not guarantee order. */ t2m_f = t2m + t2m->toff_first; t2m_l = t2m + t2m->toff_last; for(t2m = t2m_f; t2m <= t2m_l; t2m++) { if(t2m->el_no > edx_max) break; if(t2m->el_no < edx) continue; best = t2m; } if(best) { edx = best->el_no; ctx->step = 1 + 2 * edx; goto microphase2; } } n = opt_edx_end; } if(n == opt_edx_end) { /* * If tag is unknown, it may be either * an unknown (thus, incorrect) tag, * or an extension (...), * or an end of the indefinite-length structure. */ if(!IN_EXTENSION_GROUP(specs, edx + elements[edx].optional)) { ASN_DEBUG("Unexpected tag %s (at %d)", ber_tlv_tag_string(tlv_tag), edx); ASN_DEBUG("Expected tag %s (%s)%s", ber_tlv_tag_string(elements[edx].tag), elements[edx].name, elements[edx].optional ?" or alternatives":""); RETURN(RC_FAIL); } else { /* Skip this tag */ ssize_t skip; edx += elements[edx].optional; ASN_DEBUG("Skipping unexpected %s (at %d)", ber_tlv_tag_string(tlv_tag), edx); skip = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tag_len, LEFT - tag_len); ASN_DEBUG("Skip length %d in %s", (int)skip, td->name); switch(skip) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(skip + tag_len); ctx->step -= 2; edx--; continue; /* Try again with the next tag */ } } /* * MICROPHASE 2: Invoke the member-specific decoder. */ ctx->step |= 1; /* Confirm entering next microphase */ microphase2: ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); /* * Compute the position of the member inside a structure, * and also a type of containment (it may be contained * as pointer or using inline inclusion). */ if(elements[edx].flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); } else { /* * A pointer to a pointer * holding the start of the structure */ memb_ptr = (char *)st + elements[edx].memb_offset; memb_ptr2 = &memb_ptr; } /* * Invoke the member fetch routine according to member's type */ rval = elements[edx].type->ber_decoder(opt_codec_ctx, elements[edx].type, memb_ptr2, ptr, LEFT, elements[edx].tag_mode); ASN_DEBUG("In %s SEQUENCE decoded %d %s of %d " "in %d bytes rval.code %d, size=%d", td->name, edx, elements[edx].type->name, (int)LEFT, (int)rval.consumed, rval.code, (int)size); switch(rval.code) { case RC_OK: break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", (long)ctx->left, (long)size); /* Fall through */ case RC_FAIL: /* Fatal error */ RETURN(RC_FAIL); } /* switch(rval) */ ADVANCE(rval.consumed); } /* for(all structure members) */ phase3: ctx->phase = 3; case 3: /* 00 and other tags expected */ case 4: /* only 00's expected */ ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", td->name, (long)ctx->left, (long)size); /* * Skip everything until the end of the SEQUENCE. */ while(ctx->left) { ssize_t tl, ll; tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tl) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } /* * If expected <0><0>... */ if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Correctly finished with <0><0>. */ ADVANCE(2); ctx->left++; ctx->phase = 4; continue; } } if(!IN_EXTENSION_GROUP(specs, td->elements_count) || ctx->phase == 4) { ASN_DEBUG("Unexpected continuation " "of a non-extensible type " "%s (SEQUENCE): %s", td->name, ber_tlv_tag_string(tlv_tag)); RETURN(RC_FAIL); } ll = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tl, LEFT - tl); switch(ll) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(tl + ll); } PHASE_OUT(ctx); } RETURN(RC_OK); } /* * The DER encoder of the SEQUENCE type. */ asn_enc_rval_t SEQUENCE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { size_t computed_size = 0; asn_enc_rval_t erval; ssize_t ret; int edx; ASN_DEBUG("%s %s as SEQUENCE", cb?"Encoding":"Estimating", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Mandatory element is missing */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; ASN_DEBUG("Member %d %s estimated %ld bytes", edx, elm->name, (long)erval.encoded); } /* * Encode the TLV for the sequence itself. */ ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); if(ret == -1) _ASN_ENCODE_FAILED; erval.encoded = computed_size + ret; if(!cb) _ASN_ENCODED_OK(erval); /* * Encode all members. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; asn_enc_rval_t tmperval; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) continue; } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } tmperval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, cb, app_key); if(tmperval.encoded == -1) return tmperval; computed_size -= tmperval.encoded; ASN_DEBUG("Member %d %s of SEQUENCE %s encoded in %ld bytes", edx, elm->name, td->name, (long)tmperval.encoded); } if(computed_size != 0) /* * Encoded size is not equal to the computed size. */ _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(erval); } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * ... and parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value from a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* Element index */ int edx_end; /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. * Phase 3: Skipping unknown extensions. * Phase 4: PHASED OUT */ for(edx = ctx->step; ctx->phase <= 3;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ asn_TYPE_member_t *elm; int n; /* * Go inside the inner member of a sequence. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &td->elements[edx]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Invoke the inner type decoder, m.b. multiple times */ tmprval = elm->type->xer_decoder(opt_codec_ctx, elm->type, memb_ptr2, elm->name, buf_ptr, size); XER_ADVANCE(tmprval.consumed); if(tmprval.code != RC_OK) RETURN(tmprval.code); ctx->phase = 1; /* Back to body processing */ ctx->step = ++edx; ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", ctx->phase, ctx->step); /* Fall through */ } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", tcv, ctx->phase, xml_tag); /* Skip the extensions section */ if(ctx->phase == 3) { switch(xer_skip_unknown(tcv, &ctx->left)) { case -1: ctx->phase = 4; RETURN(RC_FAIL); case 0: XER_ADVANCE(ch_size); continue; case 1: XER_ADVANCE(ch_size); ctx->phase = 1; continue; case 2: ctx->phase = 1; break; } } switch(tcv) { case XCT_CLOSING: if(ctx->phase == 0) break; ctx->phase = 0; /* Fall through */ case XCT_BOTH: if(ctx->phase == 0) { if(edx >= td->elements_count || /* Explicit OPTIONAL specs reaches the end */ (edx + elements[edx].optional == td->elements_count) || /* All extensions are optional */ (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count) ) { XER_ADVANCE(ch_size); ctx->phase = 4; /* Phase out */ RETURN(RC_OK); } else { ASN_DEBUG("Premature end of XER SEQUENCE"); RETURN(RC_FAIL); } } /* Fall through */ case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%d", tcv, ctx->phase, edx); if(ctx->phase != 1) { break; /* Really unexpected */ } if(edx < td->elements_count) { /* * Search which member corresponds to this tag. */ edx_end = edx + elements[edx].optional + 1; if(edx_end > td->elements_count) edx_end = td->elements_count; for(n = edx; n < edx_end; n++) { elm = &td->elements[n]; tcv = xer_check_tag(buf_ptr, ch_size, elm->name); switch(tcv) { case XCT_BOTH: case XCT_OPENING: /* * Process this member. */ ctx->step = edx = n; ctx->phase = 2; break; case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: continue; default: n = edx_end; break; /* Phase out */ } break; } if(n != edx_end) continue; } else { ASN_DEBUG("Out of defined members: %d/%d", edx, td->elements_count); } /* It is expected extension */ if(IN_EXTENSION_GROUP(specs, edx + (edx < td->elements_count ? elements[edx].optional : 0))) { ASN_DEBUG("Got anticipated extension at %d", edx); /* * Check for (XCT_BOTH or XCT_UNKNOWN_BO) * By using a mask. Only record a pure * tags. */ if(tcv & XCT_CLOSING) { /* Found without body */ } else { ctx->left = 1; ctx->phase = 3; /* Skip ...'s */ } XER_ADVANCE(ch_size); continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", size>0?((const char *)buf_ptr)[0]:'.', size>1?((const char *)buf_ptr)[1]:'.', size>2?((const char *)buf_ptr)[2]:'.', size>3?((const char *)buf_ptr)[3]:'.', size>4?((const char *)buf_ptr)[4]:'.', size>5?((const char *)buf_ptr)[5]:'.'); break; } ctx->phase = 4; /* "Phase out" on hard failure */ RETURN(RC_FAIL); } asn_enc_rval_t SEQUENCE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; int xcan = (flags & XER_F_CANONICAL); int edx; if(!sptr) _ASN_ENCODE_FAILED; er.encoded = 0; for(edx = 0; edx < td->elements_count; edx++) { asn_enc_rval_t tmper; asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; const char *mname = elm->name; unsigned int mlen = strlen(mname); if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Mandatory element is missing */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); /* Print the member itself */ tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; _ASN_CALLBACK3("", 1); er.encoded += 5 + (2 * mlen) + tmper.encoded; } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } int SEQUENCE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { int edx; int ret; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* Dump preamble */ if(cb(td->name, strlen(td->name), app_key) < 0 || cb(" ::= {", 6, app_key) < 0) return -1; for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Print line */ /* Fall through */ } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } /* Indentation */ _i_INDENT(1); /* Print the member's name and stuff */ if(cb(elm->name, strlen(elm->name), app_key) < 0 || cb(": ", 2, app_key) < 0) return -1; /* Print the member itself */ ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, cb, app_key); if(ret) return ret; } ilevel--; _i_INDENT(1); return (cb("}", 1, app_key) < 0) ? -1 : 0; } void SEQUENCE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { int edx; if(!td || !sptr) return; ASN_DEBUG("Freeing %s as SEQUENCE", td->name); for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); } } if(!contents_only) { FREEMEM(sptr); } } int SEQUENCE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { int edx; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* * Iterate over structure members and check their validity. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; _ASN_CTFAIL(app_key, td, sptr, "%s: mandatory element %s absent (%s:%d)", td->name, elm->name, __FILE__, __LINE__); return -1; } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } if(elm->memb_constraints) { int ret = elm->memb_constraints(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; } else { int ret = elm->type->check_constraints(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; /* * Cannot inherit it earlier: * need to make sure we get the updated version. */ elm->memb_constraints = elm->type->check_constraints; } } return 0; } asn_dec_rval_t SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; void *st = *sptr; /* Target structure. */ int extpresent; /* Extension additions are present */ uint8_t *opres; /* Presence of optional root members */ asn_per_data_t opmd; asn_dec_rval_t rv; int edx; (void)constraints; if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) _ASN_DECODE_FAILED; if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) _ASN_DECODE_FAILED; } ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); /* Handle extensions */ if(specs->ext_before >= 0) { extpresent = per_get_few_bits(pd, 1); if(extpresent < 0) _ASN_DECODE_STARVED; } else { extpresent = 0; } /* Prepare a place and read-in the presence bitmap */ memset(&opmd, 0, sizeof(opmd)); if(specs->roms_count) { opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); if(!opres) _ASN_DECODE_FAILED; /* Get the presence map */ if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { FREEMEM(opres); _ASN_DECODE_STARVED; } opmd.buffer = opres; opmd.nbits = specs->roms_count; ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", td->name, specs->roms_count, *opres); } else { opres = 0; } /* * Get the sequence ROOT elements. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ if(IN_EXTENSION_GROUP(specs, edx)) continue; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Deal with optionality */ if(elm->optional) { int present = per_get_few_bits(&opmd, 1); ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", td->name, elm->name, present, (int)opmd.nboff, (int)opmd.nbits); if(present == 0) { /* This element is not present */ if(elm->default_value) { /* Fill-in DEFAULT */ if(elm->default_value(1, memb_ptr2)) { FREEMEM(opres); _ASN_DECODE_FAILED; } ASN_DEBUG("Filled-in default"); } /* The member is just not present */ continue; } /* Fall through */ } /* Fetch the member from the stream */ ASN_DEBUG("Decoding member %s in %s", elm->name, td->name); rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); if(rv.code != RC_OK) { ASN_DEBUG("Failed decode %s in %s", elm->name, td->name); FREEMEM(opres); return rv; } } /* Optionality map is not needed anymore */ FREEMEM(opres); /* * Deal with extensions. */ if(extpresent) { ssize_t bmlength; uint8_t *epres; /* Presence of extension members */ asn_per_data_t epmd; bmlength = uper_get_nslength(pd); if(bmlength < 0) _ASN_DECODE_STARVED; ASN_DEBUG("Extensions %d present in %s", bmlength, td->name); epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); if(!epres) _ASN_DECODE_STARVED; /* Get the extensions map */ if(per_get_many_bits(pd, epres, 0, bmlength)) _ASN_DECODE_STARVED; memset(&epmd, 0, sizeof(epmd)); epmd.buffer = epres; epmd.nbits = bmlength; ASN_DEBUG("Read in extensions bitmap for %s of %d bits (%x..)", td->name, bmlength, *epres); /* Go over extensions and read them in */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; if(!IN_EXTENSION_GROUP(specs, edx)) { ASN_DEBUG("%d is not extension", edx); continue; } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (void *)((char *)st + elm->memb_offset); memb_ptr2 = &memb_ptr; } present = per_get_few_bits(&epmd, 1); if(present <= 0) { if(present < 0) break; /* No more extensions */ continue; } ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); rv = uper_open_type_get(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); if(rv.code != RC_OK) { FREEMEM(epres); return rv; } } /* Skip over overflow extensions which aren't present * in this system's version of the protocol */ for(;;) { ASN_DEBUG("Getting overflow extensions"); switch(per_get_few_bits(&epmd, 1)) { case -1: break; case 0: continue; default: if(uper_open_type_skip(opt_codec_ctx, pd)) { FREEMEM(epres); _ASN_DECODE_STARVED; } } break; } FREEMEM(epres); } /* Fill DEFAULT members in extensions */ for(edx = specs->roms_count; edx < specs->roms_count + specs->aoms_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void **memb_ptr2; /* Pointer to member pointer */ if(!elm->default_value) continue; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); if(*memb_ptr2) continue; } else { continue; /* Extensions are all optionals */ } /* Set default value */ if(elm->default_value(1, memb_ptr2)) { _ASN_DECODE_FAILED; } } rv.consumed = 0; rv.code = RC_OK; return rv; } static int SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, asn_per_outp_t *po1, asn_per_outp_t *po2) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; int exts_present = 0; int exts_count = 0; int edx; if(specs->ext_before < 0) return 0; /* Find out which extensions are present */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; if(!IN_EXTENSION_GROUP(specs, edx)) { ASN_DEBUG("%s (@%d) is not extension", elm->type->name, edx); continue; } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); present = (*memb_ptr2 != 0); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; present = 1; } ASN_DEBUG("checking %s (@%d) present => %d", elm->type->name, edx, present); exts_count++; exts_present += present; /* Encode as presence marker */ if(po1 && per_put_few_bits(po1, present, 1)) return -1; /* Encode as open type field */ if(po2 && present && uper_open_type_put(elm->type, elm->per_constraints, *memb_ptr2, po2)) return -1; } return exts_present ? exts_count : 0; } asn_enc_rval_t SEQUENCE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_enc_rval_t er; int n_extensions; int edx; int i; (void)constraints; if(!sptr) _ASN_ENCODE_FAILED; er.encoded = 0; ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); /* * X.691#18.1 Whether structure is extensible * and whether to encode extensions */ if(specs->ext_before >= 0) { n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0); per_put_few_bits(po, n_extensions ? 1 : 0, 1); } else { n_extensions = 0; /* There are no extensions to encode */ } /* Encode a presence bitmap */ for(i = 0; i < specs->roms_count; i++) { asn_TYPE_member_t *elm; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; edx = specs->oms[i]; elm = &td->elements[edx]; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); present = (*memb_ptr2 != 0); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; present = 1; } /* Eliminate default values */ if(present && elm->default_value && elm->default_value(0, memb_ptr2) == 1) present = 0; ASN_DEBUG("Element %s %s %s->%s is %s", elm->flags & ATF_POINTER ? "ptr" : "inline", elm->default_value ? "def" : "wtv", td->name, elm->name, present ? "present" : "absent"); if(per_put_few_bits(po, present, 1)) _ASN_ENCODE_FAILED; } /* * Encode the sequence ROOT elements. */ ASN_DEBUG("ext_after = %d, ec = %d, eb = %d", specs->ext_after, td->elements_count, specs->ext_before); for(edx = 0; edx < ((specs->ext_after < 0) ? td->elements_count : specs->ext_before - 1); edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ if(IN_EXTENSION_GROUP(specs, edx)) continue; ASN_DEBUG("About to encode %s", elm->type->name); /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); if(!*memb_ptr2) { ASN_DEBUG("Element %s %d not present", elm->name, edx); if(elm->optional) continue; /* Mandatory element is missing */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; } /* Eliminate default values */ if(elm->default_value && elm->default_value(0, memb_ptr2) == 1) continue; ASN_DEBUG("Encoding %s->%s", td->name, elm->name); er = elm->type->uper_encoder(elm->type, elm->per_constraints, *memb_ptr2, po); if(er.encoded == -1) return er; } /* No extensions to encode */ if(!n_extensions) _ASN_ENCODED_OK(er); ASN_DEBUG("Length of %d bit-map", n_extensions); /* #18.8. Write down the presence bit-map length. */ if(uper_put_nslength(po, n_extensions)) _ASN_ENCODE_FAILED; ASN_DEBUG("Bit-map of %d elements", n_extensions); /* #18.7. Encoding the extensions presence bit-map. */ /* TODO: act upon NOTE in #18.7 for canonical PER */ if(SEQUENCE_handle_extensions(td, sptr, po, 0) != n_extensions) _ASN_ENCODE_FAILED; ASN_DEBUG("Writing %d extensions", n_extensions); /* #18.9. Encode extensions as open type fields. */ if(SEQUENCE_handle_extensions(td, sptr, 0, po) != n_extensions) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_codecs.h0000644000175000017500000000654512576764164022264 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _ASN_CODECS_H_ #define _ASN_CODECS_H_ #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * This structure defines a set of parameters that may be passed * to every ASN.1 encoder or decoder function. * WARNING: if max_stack_size member is set, and you are calling the * function pointers of the asn_TYPE_descriptor_t directly, * this structure must be ALLOCATED ON THE STACK! * If you can't always satisfy this requirement, use ber_decode(), * xer_decode() and uper_decode() functions instead. */ typedef struct asn_codec_ctx_s { /* * Limit the decoder routines to use no (much) more stack than a given * number of bytes. Most of decoders are stack-based, and this * would protect against stack overflows if the number of nested * encodings is high. * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, * and are safe from this kind of overflow. * A value from getrlimit(RLIMIT_STACK) may be used to initialize * this variable. Be careful in multithreaded environments, as the * stack size is rather limited. */ size_t max_stack_size; /* 0 disables stack bounds checking */ } asn_codec_ctx_t; /* * Type of the return value of the encoding functions (der_encode, xer_encode). */ typedef struct asn_enc_rval_s { /* * Number of bytes encoded. * -1 indicates failure to encode the structure. * In this case, the members below this one are meaningful. */ ssize_t encoded; /* * Members meaningful when (encoded == -1), for post mortem analysis. */ /* Type which cannot be encoded */ struct asn_TYPE_descriptor_s *failed_type; /* Pointer to the structure of that type */ void *structure_ptr; } asn_enc_rval_t; #define _ASN_ENCODE_FAILED do { \ asn_enc_rval_t tmp_error; \ tmp_error.encoded = -1; \ tmp_error.failed_type = td; \ tmp_error.structure_ptr = sptr; \ ASN_DEBUG("Failed to encode element %s", td->name); \ return tmp_error; \ } while(0) #define _ASN_ENCODED_OK(rval) do { \ rval.structure_ptr = 0; \ rval.failed_type = 0; \ return rval; \ } while(0) /* * Type of the return value of the decoding functions (ber_decode, xer_decode) * * Please note that the number of consumed bytes is ALWAYS meaningful, * even if code==RC_FAIL. This is to indicate the number of successfully * decoded bytes, hence providing a possibility to fail with more diagnostics * (i.e., print the offending remainder of the buffer). */ enum asn_dec_rval_code_e { RC_OK, /* Decoded successfully */ RC_WMORE, /* More data expected, call again */ RC_FAIL /* Failure to decode data */ }; typedef struct asn_dec_rval_s { enum asn_dec_rval_code_e code; /* Result code */ size_t consumed; /* Number of bytes consumed */ } asn_dec_rval_t; #define _ASN_DECODE_FAILED do { \ asn_dec_rval_t tmp_error; \ tmp_error.code = RC_FAIL; \ tmp_error.consumed = 0; \ ASN_DEBUG("Failed to decode element %s", td->name); \ return tmp_error; \ } while(0) #define _ASN_DECODE_STARVED do { \ asn_dec_rval_t tmp_error; \ tmp_error.code = RC_WMORE; \ tmp_error.consumed = 0; \ return tmp_error; \ } while(0) #ifdef __cplusplus } #endif #endif /* _ASN_CODECS_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/xer_encoder.h0000644000175000017500000000324112576764164022446 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_ENCODER_H_ #define _XER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ enum xer_encoder_flags_e { /* Mode of encoding */ XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ }; /* * The XER encoder of any type. May be invoked by the application. */ asn_enc_rval_t xer_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) * output into the chosen file pointer. * RETURN VALUES: * 0: The structure is printed. * -1: Problem printing the structure. * WARNING: No sensible errno value is returned. */ int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr); /* * Type of the generic XER encoder. */ typedef asn_enc_rval_t (xer_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ int ilevel, /* Level of indentation */ enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); #ifdef __cplusplus } #endif #endif /* _XER_ENCODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SLPMode.c0000644000175000017500000001141312576764164021407 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "SLPMode.h" int SLPMode_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void SLPMode_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void SLPMode_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { SLPMode_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int SLPMode_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { SLPMode_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t SLPMode_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { SLPMode_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t SLPMode_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { SLPMode_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t SLPMode_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { SLPMode_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t SLPMode_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { SLPMode_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t SLPMode_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { SLPMode_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t SLPMode_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { SLPMode_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_SLPMode_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_SLPMode_value2enum_1[] = { { 0, 5, "proxy" }, { 1, 8, "nonProxy" } }; static unsigned int asn_MAP_SLPMode_enum2value_1[] = { 1, /* nonProxy(1) */ 0 /* proxy(0) */ }; static asn_INTEGER_specifics_t asn_SPC_SLPMode_specs_1 = { asn_MAP_SLPMode_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_SLPMode_enum2value_1, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_SLPMode_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_SLPMode = { "SLPMode", "SLPMode", SLPMode_free, SLPMode_print, SLPMode_constraint, SLPMode_decode_ber, SLPMode_encode_der, SLPMode_decode_xer, SLPMode_encode_xer, SLPMode_decode_uper, SLPMode_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SLPMode_tags_1, sizeof(asn_DEF_SLPMode_tags_1) /sizeof(asn_DEF_SLPMode_tags_1[0]), /* 1 */ asn_DEF_SLPMode_tags_1, /* Same as above */ sizeof(asn_DEF_SLPMode_tags_1) /sizeof(asn_DEF_SLPMode_tags_1[0]), /* 1 */ &asn_PER_type_SLPMode_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_SLPMode_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrefMethod.h0000644000175000017500000000204412576764164022206 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #ifndef _PrefMethod_H_ #define _PrefMethod_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum PrefMethod { PrefMethod_agpsSETassistedPreferred = 0, PrefMethod_agpsSETBasedPreferred = 1, PrefMethod_noPreference = 2 } e_PrefMethod; /* PrefMethod */ typedef ENUMERATED_t PrefMethod_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PrefMethod; asn_struct_free_f PrefMethod_free; asn_struct_print_f PrefMethod_print; asn_constr_check_f PrefMethod_constraint; ber_type_decoder_f PrefMethod_decode_ber; der_type_encoder_f PrefMethod_encode_der; xer_type_decoder_f PrefMethod_decode_xer; xer_type_encoder_f PrefMethod_encode_xer; per_type_decoder_f PrefMethod_decode_uper; per_type_encoder_f PrefMethod_encode_uper; #ifdef __cplusplus } #endif #endif /* _PrefMethod_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Version.h0000644000175000017500000000123212576764164021574 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Version_H_ #define _Version_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Version */ typedef struct Version { long maj; long min; long servind; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Version_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Version; #ifdef __cplusplus } #endif #endif /* _Version_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/VisibleString.h0000644000175000017500000000077712576764164022750 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _VisibleString_H_ #define _VisibleString_H_ #include #ifdef __cplusplus extern "C" { #endif typedef OCTET_STRING_t VisibleString_t; /* Implemented via OCTET STRING */ extern asn_TYPE_descriptor_t asn_DEF_VisibleString; asn_constr_check_f VisibleString_constraint; #ifdef __cplusplus } #endif #endif /* _VisibleString_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosProtocol.c0000644000175000017500000000453712576764164022440 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #include "PosProtocol.h" static asn_TYPE_member_t asn_MBR_PosProtocol_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PosProtocol, tia801), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tia801" }, { ATF_NOFLAGS, 0, offsetof(struct PosProtocol, rrlp), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rrlp" }, { ATF_NOFLAGS, 0, offsetof(struct PosProtocol, rrc), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rrc" }, }; static ber_tlv_tag_t asn_DEF_PosProtocol_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_PosProtocol_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tia801 at 35 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rrlp at 36 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rrc at 37 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PosProtocol_specs_1 = { sizeof(struct PosProtocol), offsetof(struct PosProtocol, _asn_ctx), asn_MAP_PosProtocol_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PosProtocol = { "PosProtocol", "PosProtocol", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PosProtocol_tags_1, sizeof(asn_DEF_PosProtocol_tags_1) /sizeof(asn_DEF_PosProtocol_tags_1[0]), /* 1 */ asn_DEF_PosProtocol_tags_1, /* Same as above */ sizeof(asn_DEF_PosProtocol_tags_1) /sizeof(asn_DEF_PosProtocol_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PosProtocol_1, 3, /* Elements count */ &asn_SPC_PosProtocol_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_CHOICE.c0000644000175000017500000006764612576764164022511 0ustar carlescarles/* * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * See the definitions. */ static int _fetch_present_idx(const void *struct_ptr, int off, int size); static void _set_present_idx(void *sptr, int offset, int size, int pres); /* * Tags are canonically sorted in the tag to member table. */ static int _search4tag(const void *ap, const void *bp) { const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; int a_class = BER_TAG_CLASS(a->el_tag); int b_class = BER_TAG_CLASS(b->el_tag); if(a_class == b_class) { ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); if(a_value == b_value) return 0; else if(a_value < b_value) return -1; else return 1; } else if(a_class < b_class) { return -1; } else { return 1; } } /* * The decoder of the CHOICE type. */ asn_dec_rval_t CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ ssize_t tag_len; /* Length of TLV's T */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ ASN_DEBUG("Decoding %s as CHOICE", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ if(tag_mode || td->tags_count) { rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, -1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) { /* ?Substracted below! */ ctx->left += rval.consumed; } ADVANCE(rval.consumed); } else { ctx->left = -1; } NEXT_PHASE(ctx); ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", (long)ctx->left, (long)size); /* Fall through */ case 1: /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } do { asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; t2m = (asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _search4tag); if(t2m) { /* * Found the element corresponding to the tag. */ NEXT_PHASE(ctx); ctx->step = t2m->el_no; break; } else if(specs->ext_start == -1) { ASN_DEBUG("Unexpected tag %s " "in non-extensible CHOICE %s", ber_tlv_tag_string(tlv_tag), td->name); RETURN(RC_FAIL); } else { /* Skip this tag */ ssize_t skip; ASN_DEBUG("Skipping unknown tag %s", ber_tlv_tag_string(tlv_tag)); skip = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tag_len, LEFT - tag_len); switch(skip) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(skip + tag_len); RETURN(RC_OK); } } while(0); case 2: /* * PHASE 2. * Read in the element. */ do { asn_TYPE_member_t *elm;/* CHOICE's element */ void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &elements[ctx->step]; /* * Compute the position of the member inside a structure, * and also a type of containment (it may be contained * as pointer or using inline inclusion). */ if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { /* * A pointer to a pointer * holding the start of the structure */ memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Set presence to be able to free it properly at any time */ _set_present_idx(st, specs->pres_offset, specs->pres_size, ctx->step + 1); /* * Invoke the member fetch routine according to member's type */ rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, memb_ptr2, ptr, LEFT, elm->tag_mode); switch(rval.code) { case RC_OK: break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } RETURN(RC_FAIL); case RC_FAIL: /* Fatal error */ RETURN(rval.code); } /* switch(rval) */ ADVANCE(rval.consumed); } while(0); NEXT_PHASE(ctx); /* Fall through */ case 3: ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", td->name, (long)ctx->left, (long)size, tag_mode, td->tags_count); if(ctx->left > 0) { /* * The type must be fully decoded * by the CHOICE member-specific decoder. */ RETURN(RC_FAIL); } if(ctx->left == -1 && !(tag_mode || td->tags_count)) { /* * This is an untagged CHOICE. * It doesn't contain nothing * except for the member itself, including all its tags. * The decoding is completed. */ NEXT_PHASE(ctx); break; } /* * Read in the "end of data chunks"'s. */ while(ctx->left < 0) { ssize_t tl; tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tl) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } /* * Expected <0><0>... */ if(((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Correctly finished with <0><0>. */ ADVANCE(2); ctx->left++; continue; } } else { ASN_DEBUG("Unexpected continuation in %s", td->name); RETURN(RC_FAIL); } /* UNREACHABLE */ } NEXT_PHASE(ctx); case 4: /* No meaningful work here */ break; } RETURN(RC_OK); } asn_enc_rval_t CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elm; /* CHOICE element */ asn_enc_rval_t erval; void *memb_ptr; size_t computed_size = 0; int present; if(!sptr) _ASN_ENCODE_FAILED; ASN_DEBUG("%s %s as CHOICE", cb?"Encoding":"Estimating", td->name); present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); /* * If the structure was not initialized, it cannot be encoded: * can't deduce what to encode in the choice type. */ if(present <= 0 || present > td->elements_count) { if(present == 0 && td->elements_count == 0) { /* The CHOICE is empty?! */ erval.encoded = 0; _ASN_ENCODED_OK(erval); } _ASN_ENCODE_FAILED; } /* * Seek over the present member of the structure. */ elm = &td->elements[present-1]; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(memb_ptr == 0) { if(elm->optional) { erval.encoded = 0; _ASN_ENCODED_OK(erval); } /* Mandatory element absent */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } /* * If the CHOICE itself is tagged EXPLICIT: * T ::= [2] EXPLICIT CHOICE { ... } * Then emit the appropriate tags. */ if(tag_mode == 1 || td->tags_count) { /* * For this, we need to pre-compute the member. */ ssize_t ret; /* Encode member with its tag */ erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, 0, 0); if(erval.encoded == -1) return erval; /* Encode CHOICE with parent or my own tag */ ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, cb, app_key); if(ret == -1) _ASN_ENCODE_FAILED; computed_size += ret; } /* * Encode the single underlying member. */ erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, cb, app_key); if(erval.encoded == -1) return erval; ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", (long)erval.encoded, (long)computed_size); erval.encoded += computed_size; return erval; } ber_tlv_tag_t CHOICE_outmost_tag(asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; assert(tag_mode == 0); (void)tag_mode; assert(tag == 0); (void)tag; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); if(present > 0 || present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *) ((const char *)ptr + elm->memb_offset); } else { memb_ptr = (const void *) ((const char *)ptr + elm->memb_offset); } return asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); } else { return (ber_tlv_tag_t)-1; } } int CHOICE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) return 0; _ASN_CTFAIL(app_key, td, sptr, "%s: mandatory CHOICE element %s absent (%s:%d)", td->name, elm->name, __FILE__, __LINE__); return -1; } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } if(elm->memb_constraints) { return elm->memb_constraints(elm->type, memb_ptr, ctfailcb, app_key); } else { int ret = elm->type->check_constraints(elm->type, memb_ptr, ctfailcb, app_key); /* * Cannot inherit it eralier: * need to make sure we get the updated version. */ elm->memb_constraints = elm->type->check_constraints; return ret; } } else { _ASN_CTFAIL(app_key, td, sptr, "%s: no CHOICE element given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t CHOICE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value of a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* Element index */ /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); if(ctx->phase == 0 && !*xml_tag) ctx->phase = 1; /* Skip the outer tag checking phase */ /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. * Phase 3: Only waiting for closing tag. * Phase 4: Skipping unknown extensions. * Phase 5: PHASED OUT */ for(edx = ctx->step; ctx->phase <= 4;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ asn_TYPE_member_t *elm; /* * Go inside the member. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &td->elements[edx]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Start/Continue decoding the inner member */ tmprval = elm->type->xer_decoder(opt_codec_ctx, elm->type, memb_ptr2, elm->name, buf_ptr, size); XER_ADVANCE(tmprval.consumed); ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", elm->type->name, tmprval.code); if(tmprval.code != RC_OK) RETURN(tmprval.code); assert(_fetch_present_idx(st, specs->pres_offset, specs->pres_size) == 0); /* Record what we've got */ _set_present_idx(st, specs->pres_offset, specs->pres_size, edx + 1); ctx->phase = 3; /* Fall through */ } /* No need to wait for closing tag; special mode. */ if(ctx->phase == 3 && !*xml_tag) { ctx->phase = 5; /* Phase out */ RETURN(RC_OK); } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', xml_tag, tcv); /* Skip the extensions section */ if(ctx->phase == 4) { ASN_DEBUG("skip_unknown(%d, %ld)", tcv, (long)ctx->left); switch(xer_skip_unknown(tcv, &ctx->left)) { case -1: ctx->phase = 5; RETURN(RC_FAIL); continue; case 1: ctx->phase = 3; /* Fall through */ case 0: XER_ADVANCE(ch_size); continue; case 2: ctx->phase = 3; break; } } switch(tcv) { case XCT_BOTH: break; /* No CHOICE? */ case XCT_CLOSING: if(ctx->phase != 3) break; XER_ADVANCE(ch_size); ctx->phase = 5; /* Phase out */ RETURN(RC_OK); case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: if(ctx->phase != 1) break; /* Really unexpected */ /* * Search which inner member corresponds to this tag. */ for(edx = 0; edx < td->elements_count; edx++) { elm = &td->elements[edx]; tcv = xer_check_tag(buf_ptr,ch_size,elm->name); switch(tcv) { case XCT_BOTH: case XCT_OPENING: /* * Process this member. */ ctx->step = edx; ctx->phase = 2; break; case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: continue; default: edx = td->elements_count; break; /* Phase out */ } break; } if(edx != td->elements_count) continue; /* It is expected extension */ if(specs->ext_start != -1) { ASN_DEBUG("Got anticipated extension"); /* * Check for (XCT_BOTH or XCT_UNKNOWN_BO) * By using a mask. Only record a pure * tags. */ if(tcv & XCT_CLOSING) { /* Found without body */ ctx->phase = 3; /* Terminating */ } else { ctx->left = 1; ctx->phase = 4; /* Skip ...'s */ } XER_ADVANCE(ch_size); continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" " (ph=%d, tag=%s)", ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', td->name, ctx->phase, xml_tag); break; } ctx->phase = 5; /* Phase out, just in case */ RETURN(RC_FAIL); } asn_enc_rval_t CHOICE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs=(asn_CHOICE_specifics_t *)td->specifics; asn_enc_rval_t er; int present; if(!sptr) _ASN_ENCODE_FAILED; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); if(present <= 0 || present > td->elements_count) { _ASN_ENCODE_FAILED; } else { asn_enc_rval_t tmper; asn_TYPE_member_t *elm = &td->elements[present-1]; void *memb_ptr; const char *mname = elm->name; unsigned int mlen = strlen(mname); if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) _ASN_ENCODE_FAILED; } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } er.encoded = 0; if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; _ASN_CALLBACK3("", 1); er.encoded += 5 + (2 * mlen) + tmper.encoded; } if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } asn_dec_rval_t CHOICE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_dec_rval_t rv; asn_per_constraint_t *ct; asn_TYPE_member_t *elm; /* CHOICE's element */ void *memb_ptr; void **memb_ptr2; void *st = *sptr; int value; if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) _ASN_DECODE_FAILED; /* * Create the target structure if it is not present already. */ if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) _ASN_DECODE_FAILED; } if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ct = 0; if(ct && ct->flags & APC_EXTENSIBLE) { value = per_get_few_bits(pd, 1); if(value < 0) _ASN_DECODE_STARVED; if(value) ct = 0; /* Not restricted */ } if(ct && ct->range_bits >= 0) { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) _ASN_DECODE_STARVED; ASN_DEBUG("CHOICE %s got index %d in range %d", td->name, value, ct->range_bits); if(value > ct->upper_bound) _ASN_DECODE_FAILED; } else { if(specs->ext_start == -1) _ASN_DECODE_FAILED; value = uper_get_nsnnwn(pd); if(value < 0) _ASN_DECODE_STARVED; value += specs->ext_start; if(value >= td->elements_count) _ASN_DECODE_FAILED; } /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) value = specs->canonical_order[value]; /* Set presence to be able to free it later */ _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); elm = &td->elements[value]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); if(ct && ct->range_bits >= 0) { rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); } else { rv = uper_open_type_get(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); } if(rv.code != RC_OK) ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", elm->name, td->name, rv.code); return rv; } asn_enc_rval_t CHOICE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elm; /* CHOICE's element */ asn_per_constraint_t *ct; void *memb_ptr; int present; if(!sptr) _ASN_ENCODE_FAILED; ASN_DEBUG("Encoding %s as CHOICE", td->name); if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ct = 0; present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); /* * If the structure was not initialized properly, it cannot be encoded: * can't deduce what to encode in the choice type. */ if(present <= 0 || present > td->elements_count) _ASN_ENCODE_FAILED; else present--; /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) present = specs->canonical_order[present]; ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); if(ct && ct->range_bits >= 0) { if(present < ct->lower_bound || present > ct->upper_bound) { if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, 1, 1)) _ASN_ENCODE_FAILED; } else { _ASN_ENCODE_FAILED; } ct = 0; } } if(ct && ct->flags & APC_EXTENSIBLE) if(per_put_few_bits(po, 0, 1)) _ASN_ENCODE_FAILED; elm = &td->elements[present]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) _ASN_ENCODE_FAILED; } else { memb_ptr = (char *)sptr + elm->memb_offset; } if(ct && ct->range_bits >= 0) { if(per_put_few_bits(po, present, ct->range_bits)) _ASN_ENCODE_FAILED; return elm->type->uper_encoder(elm->type, elm->per_constraints, memb_ptr, po); } else { asn_enc_rval_t rval; if(specs->ext_start == -1) _ASN_ENCODE_FAILED; if(uper_put_nsnnwn(po, present - specs->ext_start)) _ASN_ENCODE_FAILED; if(uper_open_type_put(elm->type, elm->per_constraints, memb_ptr, po)) _ASN_ENCODE_FAILED; rval.encoded = 0; _ASN_ENCODED_OK(rval); } } int CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); /* * Print that element. */ if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } /* Print member's name and stuff */ if(0) { if(cb(elm->name, strlen(elm->name), app_key) < 0 || cb(": ", 2, app_key) < 0) return -1; } return elm->type->print_struct(elm->type, memb_ptr, ilevel, cb, app_key); } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void CHOICE_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!td || !ptr) return; ASN_DEBUG("Freeing %s as CHOICE", td->name); /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); /* * Free that element. */ if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)ptr + elm->memb_offset); if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } else { memb_ptr = (void *)((char *)ptr + elm->memb_offset); ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); } } if(!contents_only) { FREEMEM(ptr); } } /* * The following functions functions offer protection against -fshort-enums, * compatible with little- and big-endian machines. * If assertion is triggered, either disable -fshort-enums, or add an entry * here with the ->pres_size of your target stracture. * Unless the target structure is packed, the ".present" member * is guaranteed to be aligned properly. ASN.1 compiler itself does not * produce packed code. */ static int _fetch_present_idx(const void *struct_ptr, int pres_offset, int pres_size) { const void *present_ptr; int present; present_ptr = ((const char *)struct_ptr) + pres_offset; switch(pres_size) { case sizeof(int): present = *(const int *)present_ptr; break; case sizeof(short): present = *(const short *)present_ptr; break; case sizeof(char): present = *(const char *)present_ptr; break; default: /* ANSI C mandates enum to be equivalent to integer */ assert(pres_size != sizeof(int)); return 0; /* If not aborted, pass back safe value */ } return present; } static void _set_present_idx(void *struct_ptr, int pres_offset, int pres_size, int present) { void *present_ptr; present_ptr = ((char *)struct_ptr) + pres_offset; switch(pres_size) { case sizeof(int): *(int *)present_ptr = present; break; case sizeof(short): *(short *)present_ptr = present; break; case sizeof(char): *(char *)present_ptr = present; break; default: /* ANSI C mandates enum to be equivalent to integer */ assert(pres_size != sizeof(int)); } } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-RSCP.h0000644000175000017500000000157012576764164021547 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CPICH_RSCP_H_ #define _CPICH_RSCP_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* CPICH-RSCP */ typedef long CPICH_RSCP_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CPICH_RSCP; asn_struct_free_f CPICH_RSCP_free; asn_struct_print_f CPICH_RSCP_print; asn_constr_check_f CPICH_RSCP_constraint; ber_type_decoder_f CPICH_RSCP_decode_ber; der_type_encoder_f CPICH_RSCP_encode_der; xer_type_decoder_f CPICH_RSCP_decode_xer; xer_type_encoder_f CPICH_RSCP_encode_xer; per_type_decoder_f CPICH_RSCP_decode_uper; per_type_encoder_f CPICH_RSCP_encode_uper; #ifdef __cplusplus } #endif #endif /* _CPICH_RSCP_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UlpMessage.h0000644000175000017500000000270612576764164022223 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP" * found in "../supl-ulp.asn" */ #ifndef _UlpMessage_H_ #define _UlpMessage_H_ #include /* Including external dependencies */ #include "SUPLINIT.h" #include "SUPLSTART.h" #include "SUPLRESPONSE.h" #include "SUPLPOSINIT.h" #include "SUPLPOS.h" #include "SUPLEND.h" #include "DUMMY.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum UlpMessage_PR { UlpMessage_PR_NOTHING, /* No components present */ UlpMessage_PR_msSUPLINIT, UlpMessage_PR_msSUPLSTART, UlpMessage_PR_msSUPLRESPONSE, UlpMessage_PR_msSUPLPOSINIT, UlpMessage_PR_msSUPLPOS, UlpMessage_PR_msSUPLEND, UlpMessage_PR_msDUMMY2, UlpMessage_PR_msDUMMY3, /* Extensions may appear below */ } UlpMessage_PR; /* UlpMessage */ typedef struct UlpMessage { UlpMessage_PR present; union UlpMessage_u { SUPLINIT_t msSUPLINIT; SUPLSTART_t msSUPLSTART; SUPLRESPONSE_t msSUPLRESPONSE; SUPLPOSINIT_t msSUPLPOSINIT; SUPLPOS_t msSUPLPOS; SUPLEND_t msSUPLEND; DUMMY_t msDUMMY2; DUMMY_t msDUMMY3; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } UlpMessage_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_UlpMessage; #ifdef __cplusplus } #endif #endif /* _UlpMessage_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_encoder.h0000644000175000017500000000417712576764164022447 0ustar carlescarles/*- * Copyright (c) 2006, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_ENCODER_H_ #define _PER_ENCODER_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. * WARNING: This function returns the number of encoded bits in the .encoded * field of the return value. Use the following formula to convert to bytes: * bytes = ((.encoded + 7) / 8) */ asn_enc_rval_t uper_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ void *app_key /* Arbitrary callback argument */ ); /* * A variant of uper_encode() which encodes data into the existing buffer * WARNING: This function returns the number of encoded bits in the .encoded * field of the return value. */ asn_enc_rval_t uper_encode_to_buffer( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ void *buffer, /* Pre-allocated buffer */ size_t buffer_size /* Initial buffer size (max) */ ); /* * A variant of uper_encode_to_buffer() which allocates buffer itself. * Returns the number of bytes in the buffer or -1 in case of failure. * WARNING: This function produces a "Production of the complete encoding", * with length of at least one octet. Contrast this to precise bit-packing * encoding of uper_encode() and uper_encode_to_buffer(). */ ssize_t uper_encode_to_new_buffer( struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void *struct_ptr, /* Structure to be encoded */ void **buffer_r /* Buffer allocated and returned */ ); /* * Type of the generic PER encoder function. */ typedef asn_enc_rval_t (per_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void *struct_ptr, asn_per_outp_t *per_output ); #ifdef __cplusplus } #endif #endif /* _PER_ENCODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETAuthKey.h0000644000175000017500000000201012576764164022070 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-RESPONSE" * found in "../supl-response.asn" */ #ifndef _SETAuthKey_H_ #define _SETAuthKey_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SETAuthKey_PR { SETAuthKey_PR_NOTHING, /* No components present */ SETAuthKey_PR_shortKey, SETAuthKey_PR_longKey, /* Extensions may appear below */ } SETAuthKey_PR; /* SETAuthKey */ typedef struct SETAuthKey { SETAuthKey_PR present; union SETAuthKey_u { BIT_STRING_t shortKey; BIT_STRING_t longKey; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SETAuthKey_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SETAuthKey; #ifdef __cplusplus } #endif #endif /* _SETAuthKey_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SatelliteInfo.c0000644000175000017500000000321012576764164022702 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #include "SatelliteInfo.h" static asn_per_constraints_t asn_PER_type_SatelliteInfo_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 31 } /* (SIZE(1..31)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SatelliteInfo_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_SatelliteInfoElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SatelliteInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SatelliteInfo_specs_1 = { sizeof(struct SatelliteInfo), offsetof(struct SatelliteInfo, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SatelliteInfo = { "SatelliteInfo", "SatelliteInfo", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SatelliteInfo_tags_1, sizeof(asn_DEF_SatelliteInfo_tags_1) /sizeof(asn_DEF_SatelliteInfo_tags_1[0]), /* 1 */ asn_DEF_SatelliteInfo_tags_1, /* Same as above */ sizeof(asn_DEF_SatelliteInfo_tags_1) /sizeof(asn_DEF_SatelliteInfo_tags_1[0]), /* 1 */ &asn_PER_type_SatelliteInfo_constr_1, asn_MBR_SatelliteInfo_1, 1, /* Single element */ &asn_SPC_SatelliteInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SEQUENCE_OF.c0000644000175000017500000001240512576764164023332 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * The DER encoder of the SEQUENCE OF type. */ asn_enc_rval_t SEQUENCE_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(ptr); size_t computed_size = 0; ssize_t encoding_size = 0; asn_enc_rval_t erval; int edx; ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = elm->type->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; } /* * Encode the TLV for the sequence itself. */ encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); if(encoding_size == -1) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } computed_size += encoding_size; if(!cb) { erval.encoded = computed_size; _ASN_ENCODED_OK(erval); } ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); /* * Encode all members. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = elm->type->der_encoder(elm->type, memb_ptr, 0, elm->tag, cb, app_key); if(erval.encoded == -1) return erval; encoding_size += erval.encoded; } if(computed_size != (size_t)encoding_size) { /* * Encoded size is not equal to the computed size. */ erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; } else { erval.encoded = computed_size; erval.structure_ptr = 0; erval.failed_type = 0; } return erval; } asn_enc_rval_t SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr); const char *mname = specs->as_XMLValueList ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); unsigned int mlen = mname ? strlen(mname) : 0; int xcan = (flags & XER_F_CANONICAL); int i; if(!sptr) _ASN_ENCODE_FAILED; er.encoded = 0; for(i = 0; i < list->count; i++) { asn_enc_rval_t tmper; void *memb_ptr = list->array[i]; if(!memb_ptr) continue; if(mname) { if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); } tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; if(tmper.encoded == 0 && specs->as_XMLValueList) { const char *name = elm->type->xml_tag; size_t len = strlen(name); if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel + 1); _ASN_CALLBACK3("<", 1, name, len, "/>", 2); } if(mname) { _ASN_CALLBACK3("", 1); er.encoded += 5; } er.encoded += (2 * mlen) + tmper.encoded; } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } asn_enc_rval_t SEQUENCE_OF_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_anonymous_sequence_ *list; asn_per_constraint_t *ct; asn_enc_rval_t er; asn_TYPE_member_t *elm = td->elements; int seq; if(!sptr) _ASN_ENCODE_FAILED; list = _A_SEQUENCE_FROM_VOID(sptr); er.encoded = 0; ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); if(constraints) ct = &constraints->size; else if(td->per_constraints) ct = &td->per_constraints->size; else ct = 0; /* If extensible constraint, check if size is in root */ if(ct) { int not_in_root = (list->count < ct->lower_bound || list->count > ct->upper_bound); ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); if(ct->flags & APC_EXTENSIBLE) { /* Declare whether size is in extension root */ if(per_put_few_bits(po, not_in_root, 1)) _ASN_ENCODE_FAILED; if(not_in_root) ct = 0; } else if(not_in_root && ct->effective_bits >= 0) _ASN_ENCODE_FAILED; } if(ct && ct->effective_bits >= 0) { /* X.691, #19.5: No length determinant */ if(per_put_few_bits(po, list->count - ct->lower_bound, ct->effective_bits)) _ASN_ENCODE_FAILED; } for(seq = -1; seq < list->count;) { ssize_t mayEncode; if(seq < 0) seq = 0; if(ct && ct->effective_bits >= 0) { mayEncode = list->count; } else { mayEncode = uper_put_length(po, list->count - seq); if(mayEncode < 0) _ASN_ENCODE_FAILED; } while(mayEncode--) { void *memb_ptr = list->array[seq++]; if(!memb_ptr) _ASN_ENCODE_FAILED; er = elm->type->uper_encoder(elm->type, elm->per_constraints, memb_ptr, po); if(er.encoded == -1) _ASN_ENCODE_FAILED; } } _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SlpSessionID.c0000644000175000017500000000543412576764164022471 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "SlpSessionID.h" static int memb_sessionID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size == 4)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_sessionID_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SlpSessionID_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SlpSessionID, sessionID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_sessionID_constraint_1, &asn_PER_memb_sessionID_constr_2, 0, "sessionID" }, { ATF_NOFLAGS, 0, offsetof(struct SlpSessionID, slpId), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_SLPAddress, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "slpId" }, }; static ber_tlv_tag_t asn_DEF_SlpSessionID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SlpSessionID_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sessionID at 37 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* slpId at 38 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SlpSessionID_specs_1 = { sizeof(struct SlpSessionID), offsetof(struct SlpSessionID, _asn_ctx), asn_MAP_SlpSessionID_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SlpSessionID = { "SlpSessionID", "SlpSessionID", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SlpSessionID_tags_1, sizeof(asn_DEF_SlpSessionID_tags_1) /sizeof(asn_DEF_SlpSessionID_tags_1[0]), /* 1 */ asn_DEF_SlpSessionID_tags_1, /* Same as above */ sizeof(asn_DEF_SlpSessionID_tags_1) /sizeof(asn_DEF_SlpSessionID_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SlpSessionID_1, 2, /* Elements count */ &asn_SPC_SlpSessionID_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Pathloss.h0000644000175000017500000000153212576764164021747 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Pathloss_H_ #define _Pathloss_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Pathloss */ typedef long Pathloss_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Pathloss; asn_struct_free_f Pathloss_free; asn_struct_print_f Pathloss_print; asn_constr_check_f Pathloss_constraint; ber_type_decoder_f Pathloss_decode_ber; der_type_encoder_f Pathloss_encode_der; xer_type_decoder_f Pathloss_decode_xer; xer_type_encoder_f Pathloss_encode_xer; per_type_decoder_f Pathloss_decode_uper; per_type_encoder_f Pathloss_encode_uper; #ifdef __cplusplus } #endif #endif /* _Pathloss_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_encoder.c0000644000175000017500000000715612576764164022442 0ustar carlescarles#include #include #include static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key); asn_enc_rval_t uper_encode(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { return uper_encode_internal(td, 0, sptr, cb, app_key); } /* * Argument type and callback necessary for uper_encode_to_buffer(). */ typedef struct enc_to_buf_arg { void *buffer; size_t left; } enc_to_buf_arg; static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { enc_to_buf_arg *arg = (enc_to_buf_arg *)key; if(arg->left < size) return -1; /* Data exceeds the available buffer size */ memcpy(arg->buffer, buffer, size); arg->buffer = ((char *)arg->buffer) + size; arg->left -= size; return 0; } asn_enc_rval_t uper_encode_to_buffer(asn_TYPE_descriptor_t *td, void *sptr, void *buffer, size_t buffer_size) { enc_to_buf_arg key; key.buffer = buffer; key.left = buffer_size; if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); return uper_encode_internal(td, 0, sptr, encode_to_buffer_cb, &key); } typedef struct enc_dyn_arg { void *buffer; size_t length; size_t allocated; } enc_dyn_arg; static int encode_dyn_cb(const void *buffer, size_t size, void *key) { enc_dyn_arg *arg = key; if(arg->length + size >= arg->allocated) { void *p; arg->allocated = arg->allocated ? (arg->allocated << 2) : size; p = REALLOC(arg->buffer, arg->allocated); if(!p) { FREEMEM(arg->buffer); memset(arg, 0, sizeof(*arg)); return -1; } arg->buffer = p; } memcpy(((char *)arg->buffer) + arg->length, buffer, size); arg->length += size; return 0; } ssize_t uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, void **buffer_r) { asn_enc_rval_t er; enc_dyn_arg key; memset(&key, 0, sizeof(key)); er = uper_encode_internal(td, constraints, sptr, encode_dyn_cb, &key); switch(er.encoded) { case -1: FREEMEM(key.buffer); return -1; case 0: FREEMEM(key.buffer); key.buffer = MALLOC(1); if(key.buffer) { *(char *)key.buffer = '\0'; *buffer_r = key.buffer; return 1; } else { return -1; } default: *buffer_r = key.buffer; ASN_DEBUG("Complete encoded in %d bits", er.encoded); return ((er.encoded + 7) >> 3); } } /* * Internally useful functions. */ /* Flush partially filled buffer */ static int _uper_encode_flush_outp(asn_per_outp_t *po) { uint8_t *buf; if(po->nboff == 0 && po->buffer == po->tmpspace) return 0; buf = po->buffer + (po->nboff >> 3); /* Make sure we account for the last, partially filled */ if(po->nboff & 0x07) { buf[0] &= 0xff << (8 - (po->nboff & 0x07)); buf++; } return po->outper(po->tmpspace, buf - po->tmpspace, po->op_key); } static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { asn_per_outp_t po; asn_enc_rval_t er; /* * Invoke type-specific encoder. */ if(!td || !td->uper_encoder) _ASN_ENCODE_FAILED; /* PER is not compiled in */ po.buffer = po.tmpspace; po.nboff = 0; po.nbits = 8 * sizeof(po.tmpspace); po.outper = cb; po.op_key = app_key; po.flushed_bytes = 0; er = td->uper_encoder(td, constraints, sptr, &po); if(er.encoded != -1) { size_t bits_to_flush; bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; /* Set number of bits encoded to a firm value */ er.encoded = (po.flushed_bytes << 3) + bits_to_flush; if(_uper_encode_flush_outp(&po)) _ASN_ENCODE_FAILED; } return er; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TGSN.c0000644000175000017500000001051112576764164020715 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "TGSN.h" int TGSN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 14)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TGSN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TGSN_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TGSN_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TGSN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TGSN_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TGSN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TGSN_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TGSN_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TGSN_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TGSN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TGSN_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TGSN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TGSN_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TGSN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TGSN_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TGSN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TGSN_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TGSN_constr_1 = { { APC_CONSTRAINED, 4, 4, 0, 14 } /* (0..14) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TGSN_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TGSN = { "TGSN", "TGSN", TGSN_free, TGSN_print, TGSN_constraint, TGSN_decode_ber, TGSN_encode_der, TGSN_decode_xer, TGSN_encode_xer, TGSN_decode_uper, TGSN_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TGSN_tags_1, sizeof(asn_DEF_TGSN_tags_1) /sizeof(asn_DEF_TGSN_tags_1[0]), /* 1 */ asn_DEF_TGSN_tags_1, /* Same as above */ sizeof(asn_DEF_TGSN_tags_1) /sizeof(asn_DEF_TGSN_tags_1[0]), /* 1 */ &asn_PER_type_TGSN_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NotificationType.c0000644000175000017500000001307612576764164023443 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "NotificationType.h" int NotificationType_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void NotificationType_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void NotificationType_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { NotificationType_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int NotificationType_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { NotificationType_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t NotificationType_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { NotificationType_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t NotificationType_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { NotificationType_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t NotificationType_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { NotificationType_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t NotificationType_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { NotificationType_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t NotificationType_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { NotificationType_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t NotificationType_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { NotificationType_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_NotificationType_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_NotificationType_value2enum_1[] = { { 0, 28, "noNotificationNoVerification" }, { 1, 16, "notificationOnly" }, { 2, 35, "notificationAndVerficationAllowedNA" }, { 3, 34, "notificationAndVerficationDeniedNA" }, { 4, 15, "privacyOverride" } /* This list is extensible */ }; static unsigned int asn_MAP_NotificationType_enum2value_1[] = { 0, /* noNotificationNoVerification(0) */ 2, /* notificationAndVerficationAllowedNA(2) */ 3, /* notificationAndVerficationDeniedNA(3) */ 1, /* notificationOnly(1) */ 4 /* privacyOverride(4) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_NotificationType_specs_1 = { asn_MAP_NotificationType_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_NotificationType_enum2value_1, /* N => "tag"; sorted by N */ 5, /* Number of elements in the maps */ 6, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_NotificationType_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NotificationType = { "NotificationType", "NotificationType", NotificationType_free, NotificationType_print, NotificationType_constraint, NotificationType_decode_ber, NotificationType_encode_der, NotificationType_decode_xer, NotificationType_encode_xer, NotificationType_decode_uper, NotificationType_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NotificationType_tags_1, sizeof(asn_DEF_NotificationType_tags_1) /sizeof(asn_DEF_NotificationType_tags_1[0]), /* 1 */ asn_DEF_NotificationType_tags_1, /* Same as above */ sizeof(asn_DEF_NotificationType_tags_1) /sizeof(asn_DEF_NotificationType_tags_1[0]), /* 1 */ &asn_PER_type_NotificationType_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_NotificationType_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SessionID.h0000644000175000017500000000154412576764164022015 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _SessionID_H_ #define _SessionID_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SetSessionID; struct SlpSessionID; /* SessionID */ typedef struct SessionID { struct SetSessionID *setSessionID /* OPTIONAL */; struct SlpSessionID *slpSessionID /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SessionID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SessionID; #ifdef __cplusplus } #endif /* Referred external types */ #include "SetSessionID.h" #include "SlpSessionID.h" #endif /* _SessionID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PositionEstimate.c0000644000175000017500000003662112576764164023454 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "PositionEstimate.h" static int latitudeSign_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void latitudeSign_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } static void latitudeSign_2_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { latitudeSign_2_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } static int latitudeSign_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } static asn_dec_rval_t latitudeSign_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } static asn_enc_rval_t latitudeSign_2_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } static asn_dec_rval_t latitudeSign_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } static asn_enc_rval_t latitudeSign_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } static asn_dec_rval_t latitudeSign_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } static asn_enc_rval_t latitudeSign_2_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { latitudeSign_2_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static int memb_uncertaintySemiMajor_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_uncertaintySemiMinor_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_orientationMajorAxis_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 180)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_latitude_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_longitude_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_confidence_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 100)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_type_latitudeSign_constr_2 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_uncertaintySemiMajor_constr_8 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_uncertaintySemiMinor_constr_9 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_orientationMajorAxis_constr_10 = { { APC_CONSTRAINED, 8, 8, 0, 180 } /* (0..180) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_latitude_constr_5 = { { APC_CONSTRAINED, 23, -1, 0, 8388607 } /* (0..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_longitude_constr_6 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_confidence_constr_11 = { { APC_CONSTRAINED, 7, 7, 0, 100 } /* (0..100) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_latitudeSign_value2enum_2[] = { { 0, 5, "north" }, { 1, 5, "south" } }; static unsigned int asn_MAP_latitudeSign_enum2value_2[] = { 0, /* north(0) */ 1 /* south(1) */ }; static asn_INTEGER_specifics_t asn_SPC_latitudeSign_specs_2 = { asn_MAP_latitudeSign_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_latitudeSign_enum2value_2, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_latitudeSign_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_latitudeSign_2 = { "latitudeSign", "latitudeSign", latitudeSign_2_free, latitudeSign_2_print, latitudeSign_2_constraint, latitudeSign_2_decode_ber, latitudeSign_2_encode_der, latitudeSign_2_decode_xer, latitudeSign_2_encode_xer, latitudeSign_2_decode_uper, latitudeSign_2_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_latitudeSign_tags_2, sizeof(asn_DEF_latitudeSign_tags_2) /sizeof(asn_DEF_latitudeSign_tags_2[0]) - 1, /* 1 */ asn_DEF_latitudeSign_tags_2, /* Same as above */ sizeof(asn_DEF_latitudeSign_tags_2) /sizeof(asn_DEF_latitudeSign_tags_2[0]), /* 2 */ &asn_PER_type_latitudeSign_constr_2, 0, 0, /* Defined elsewhere */ &asn_SPC_latitudeSign_specs_2 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_uncertainty_7[] = { { ATF_NOFLAGS, 0, offsetof(struct uncertainty, uncertaintySemiMajor), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_uncertaintySemiMajor_constraint_7, &asn_PER_memb_uncertaintySemiMajor_constr_8, 0, "uncertaintySemiMajor" }, { ATF_NOFLAGS, 0, offsetof(struct uncertainty, uncertaintySemiMinor), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_uncertaintySemiMinor_constraint_7, &asn_PER_memb_uncertaintySemiMinor_constr_9, 0, "uncertaintySemiMinor" }, { ATF_NOFLAGS, 0, offsetof(struct uncertainty, orientationMajorAxis), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_orientationMajorAxis_constraint_7, &asn_PER_memb_orientationMajorAxis_constr_10, 0, "orientationMajorAxis" }, }; static ber_tlv_tag_t asn_DEF_uncertainty_tags_7[] = { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_uncertainty_tag2el_7[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uncertaintySemiMajor at 77 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uncertaintySemiMinor at 78 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* orientationMajorAxis at 79 */ }; static asn_SEQUENCE_specifics_t asn_SPC_uncertainty_specs_7 = { sizeof(struct uncertainty), offsetof(struct uncertainty, _asn_ctx), asn_MAP_uncertainty_tag2el_7, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_uncertainty_7 = { "uncertainty", "uncertainty", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_uncertainty_tags_7, sizeof(asn_DEF_uncertainty_tags_7) /sizeof(asn_DEF_uncertainty_tags_7[0]) - 1, /* 1 */ asn_DEF_uncertainty_tags_7, /* Same as above */ sizeof(asn_DEF_uncertainty_tags_7) /sizeof(asn_DEF_uncertainty_tags_7[0]), /* 2 */ 0, /* No PER visible constraints */ asn_MBR_uncertainty_7, 3, /* Elements count */ &asn_SPC_uncertainty_specs_7 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_PositionEstimate_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PositionEstimate, latitudeSign), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_latitudeSign_2, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "latitudeSign" }, { ATF_NOFLAGS, 0, offsetof(struct PositionEstimate, latitude), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_latitude_constraint_1, &asn_PER_memb_latitude_constr_5, 0, "latitude" }, { ATF_NOFLAGS, 0, offsetof(struct PositionEstimate, longitude), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_longitude_constraint_1, &asn_PER_memb_longitude_constr_6, 0, "longitude" }, { ATF_POINTER, 3, offsetof(struct PositionEstimate, uncertainty), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, &asn_DEF_uncertainty_7, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "uncertainty" }, { ATF_POINTER, 2, offsetof(struct PositionEstimate, confidence), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_confidence_constraint_1, &asn_PER_memb_confidence_constr_11, 0, "confidence" }, { ATF_POINTER, 1, offsetof(struct PositionEstimate, altitudeInfo), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AltitudeInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "altitudeInfo" }, }; static int asn_MAP_PositionEstimate_oms_1[] = { 3, 4, 5 }; static ber_tlv_tag_t asn_DEF_PositionEstimate_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_PositionEstimate_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* latitudeSign at 73 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* latitude at 74 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* longitude at 75 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uncertainty at 77 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* confidence at 81 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* altitudeInfo at 82 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PositionEstimate_specs_1 = { sizeof(struct PositionEstimate), offsetof(struct PositionEstimate, _asn_ctx), asn_MAP_PositionEstimate_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_PositionEstimate_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PositionEstimate = { "PositionEstimate", "PositionEstimate", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PositionEstimate_tags_1, sizeof(asn_DEF_PositionEstimate_tags_1) /sizeof(asn_DEF_PositionEstimate_tags_1[0]), /* 1 */ asn_DEF_PositionEstimate_tags_1, /* Same as above */ sizeof(asn_DEF_PositionEstimate_tags_1) /sizeof(asn_DEF_PositionEstimate_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PositionEstimate_1, 6, /* Elements count */ &asn_SPC_PositionEstimate_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_support.c0000644000175000017500000002312312576764164022527 0ustar carlescarles/* * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include char * per_data_string(asn_per_data_t *pd) { static char buf[2][32]; static int n; n = (n+1) % 2; snprintf(buf[n], sizeof(buf), "{m=%d span %+d[%d..%d] (%d)}", pd->moved, (((int)pd->buffer) & 0xf), pd->nboff, pd->nbits, pd->nbits - pd->nboff); return buf[n]; } void per_get_undo(asn_per_data_t *pd, int nbits) { if((ssize_t)pd->nboff < nbits) { assert((ssize_t)pd->nboff < nbits); } else { pd->nboff -= nbits; pd->moved -= nbits; } } /* * Extract a small number of bits (<= 31) from the specified PER data pointer. */ int32_t per_get_few_bits(asn_per_data_t *pd, int nbits) { size_t off; /* Next after last bit offset */ ssize_t nleft; /* Number of bits left in this stream */ uint32_t accum; const uint8_t *buf; if(nbits < 0) return -1; nleft = pd->nbits - pd->nboff; if(nbits > nleft) { int32_t tailv, vhead; if(!pd->refill || nbits > 31) return -1; /* Accumulate unused bytes before refill */ ASN_DEBUG("Obtain the rest %d bits (want %d)", nleft, nbits); tailv = per_get_few_bits(pd, nleft); if(tailv < 0) return -1; /* Refill (replace pd contents with new data) */ if(pd->refill(pd)) return -1; nbits -= nleft; vhead = per_get_few_bits(pd, nbits); /* Combine the rest of previous pd with the head of new one */ tailv = (tailv << nbits) | vhead; /* Could == -1 */ return tailv; } /* * Normalize position indicator. */ if(pd->nboff >= 8) { pd->buffer += (pd->nboff >> 3); pd->nbits -= (pd->nboff & ~0x07); pd->nboff &= 0x07; } pd->moved += nbits; pd->nboff += nbits; off = pd->nboff; buf = pd->buffer; /* * Extract specified number of bits. */ if(off <= 8) accum = nbits ? (buf[0]) >> (8 - off) : 0; else if(off <= 16) accum = ((buf[0] << 8) + buf[1]) >> (16 - off); else if(off <= 24) accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); else if(off <= 31) accum = ((buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + (buf[3])) >> (32 - off); else if(nbits <= 31) { asn_per_data_t tpd = *pd; /* Here are we with our 31-bits limit plus 1..7 bits offset. */ per_get_undo(&tpd, nbits); /* The number of available bits in the stream allow * for the following operations to take place without * invoking the ->refill() function */ accum = per_get_few_bits(&tpd, nbits - 24) << 24; accum |= per_get_few_bits(&tpd, 24); } else { per_get_undo(pd, nbits); return -1; } accum &= (((uint32_t)1 << nbits) - 1); ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+d[%d..%d]:%02x (%d) => 0x%x]", nbits, nleft, pd->moved, (((int)pd->buffer) & 0xf), pd->nboff, pd->nbits, pd->buffer[0], pd->nbits - pd->nboff, (int)accum); return accum; } /* * Extract a large number of bits from the specified PER data pointer. */ int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int alright, int nbits) { int32_t value; if(alright && (nbits & 7)) { /* Perform right alignment of a first few bits */ value = per_get_few_bits(pd, nbits & 0x07); if(value < 0) return -1; *dst++ = value; /* value is already right-aligned */ nbits &= ~7; } while(nbits) { if(nbits >= 24) { value = per_get_few_bits(pd, 24); if(value < 0) return -1; *(dst++) = value >> 16; *(dst++) = value >> 8; *(dst++) = value; nbits -= 24; } else { value = per_get_few_bits(pd, nbits); if(value < 0) return -1; if(nbits & 7) { /* implies left alignment */ value <<= 8 - (nbits & 7), nbits += 8 - (nbits & 7); if(nbits > 24) *dst++ = value >> 24; } if(nbits > 16) *dst++ = value >> 16; if(nbits > 8) *dst++ = value >> 8; *dst++ = value; break; } } return 0; } /* * Get the length "n" from the stream. */ ssize_t uper_get_length(asn_per_data_t *pd, int ebits, int *repeat) { ssize_t value; *repeat = 0; if(ebits >= 0) return per_get_few_bits(pd, ebits); value = per_get_few_bits(pd, 8); if(value < 0) return -1; if((value & 128) == 0) /* #10.9.3.6 */ return (value & 0x7F); if((value & 64) == 0) { /* #10.9.3.7 */ value = ((value & 63) << 8) | per_get_few_bits(pd, 8); if(value < 0) return -1; return value; } value &= 63; /* this is "m" from X.691, #10.9.3.8 */ if(value < 1 || value > 4) return -1; *repeat = 1; return (16384 * value); } /* * Get the normally small length "n". * This procedure used to decode length of extensions bit-maps * for SET and SEQUENCE types. */ ssize_t uper_get_nslength(asn_per_data_t *pd) { ssize_t length; ASN_DEBUG("Getting normally small length"); if(per_get_few_bits(pd, 1) == 0) { length = per_get_few_bits(pd, 6) + 1; if(length <= 0) return -1; ASN_DEBUG("l=%d", length); return length; } else { int repeat; length = uper_get_length(pd, -1, &repeat); if(length >= 0 && !repeat) return length; return -1; /* Error, or do not support >16K extensions */ } } /* * Get the normally small non-negative whole number. * X.691, #10.6 */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd) { ssize_t value; value = per_get_few_bits(pd, 7); if(value & 64) { /* implicit (value < 0) */ value &= 63; value <<= 2; value |= per_get_few_bits(pd, 2); if(value & 128) /* implicit (value < 0) */ return -1; if(value == 0) return 0; if(value >= 3) return -1; value = per_get_few_bits(pd, 8 * value); return value; } return value; } /* * Put the normally small non-negative whole number. * X.691, #10.6 */ int uper_put_nsnnwn(asn_per_outp_t *po, int n) { int bytes; if(n <= 63) { if(n < 0) return -1; return per_put_few_bits(po, n, 7); } if(n < 256) bytes = 1; else if(n < 65536) bytes = 2; else if(n < 256 * 65536) bytes = 3; else return -1; /* This is not a "normally small" value */ if(per_put_few_bits(po, bytes, 8)) return -1; return per_put_few_bits(po, n, 8 * bytes); } /* * Put a small number of bits (<= 31). */ int per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { size_t off; /* Next after last bit offset */ size_t omsk; /* Existing last byte meaningful bits mask */ uint8_t *buf; if(obits <= 0 || obits >= 32) return obits ? -1 : 0; ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", obits, (int)bits, po->buffer, po->nboff); /* * Normalize position indicator. */ if(po->nboff >= 8) { po->buffer += (po->nboff >> 3); po->nbits -= (po->nboff & ~0x07); po->nboff &= 0x07; } /* * Flush whole-bytes output, if necessary. */ if(po->nboff + obits > po->nbits) { int complete_bytes = (po->buffer - po->tmpspace); ASN_DEBUG("[PER output %d complete + %d]", complete_bytes, po->flushed_bytes); if(po->outper(po->tmpspace, complete_bytes, po->op_key) < 0) return -1; if(po->nboff) po->tmpspace[0] = po->buffer[0]; po->buffer = po->tmpspace; po->nbits = 8 * sizeof(po->tmpspace); po->flushed_bytes += complete_bytes; } /* * Now, due to sizeof(tmpspace), we are guaranteed large enough space. */ buf = po->buffer; omsk = ~((1 << (8 - po->nboff)) - 1); off = (po->nboff += obits); /* Clear data of debris before meaningful bits */ bits &= (((uint32_t)1 << obits) - 1); ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, (int)bits, (int)bits, po->nboff - obits, off, buf[0], omsk&0xff, buf[0] & omsk); if(off <= 8) /* Completely within 1 byte */ bits <<= (8 - off), buf[0] = (buf[0] & omsk) | bits; else if(off <= 16) bits <<= (16 - off), buf[0] = (buf[0] & omsk) | (bits >> 8), buf[1] = bits; else if(off <= 24) bits <<= (24 - off), buf[0] = (buf[0] & omsk) | (bits >> 16), buf[1] = bits >> 8, buf[2] = bits; else if(off <= 31) bits <<= (32 - off), buf[0] = (buf[0] & omsk) | (bits >> 24), buf[1] = bits >> 16, buf[2] = bits >> 8, buf[3] = bits; else { ASN_DEBUG("->[PER out split %d]", obits); per_put_few_bits(po, bits >> 8, 24); per_put_few_bits(po, bits, obits - 24); ASN_DEBUG("<-[PER out split %d]", obits); } ASN_DEBUG("[PER out %u/%x => %02x buf+%d]", (int)bits, (int)bits, buf[0], po->buffer - po->tmpspace); return 0; } /* * Output a large number of bits. */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int nbits) { while(nbits) { uint32_t value; if(nbits >= 24) { value = (src[0] << 16) | (src[1] << 8) | src[2]; src += 3; nbits -= 24; if(per_put_few_bits(po, value, 24)) return -1; } else { value = src[0]; if(nbits > 8) value = (value << 8) | src[1]; if(nbits > 16) value = (value << 8) | src[2]; if(nbits & 0x07) value >>= (8 - (nbits & 0x07)); if(per_put_few_bits(po, value, nbits)) return -1; break; } } return 0; } /* * Put the length "n" (or part of it) into the stream. */ ssize_t uper_put_length(asn_per_outp_t *po, size_t length) { if(length <= 127) /* #10.9.3.6 */ return per_put_few_bits(po, length, 8) ? -1 : (ssize_t)length; else if(length < 16384) /* #10.9.3.7 */ return per_put_few_bits(po, length|0x8000, 16) ? -1 : (ssize_t)length; length >>= 14; if(length > 4) length = 4; return per_put_few_bits(po, 0xC0 | length, 8) ? -1 : (ssize_t)(length << 14); } /* * Put the normally small length "n" into the stream. * This procedure used to encode length of extensions bit-maps * for SET and SEQUENCE types. */ int uper_put_nslength(asn_per_outp_t *po, size_t length) { if(length <= 64) { /* #10.9.3.4 */ if(length == 0) return -1; return per_put_few_bits(po, length-1, 7) ? -1 : 0; } else { if(uper_put_length(po, length) != (ssize_t)length) { /* This might happen in case of >16K extensions */ return -1; } } return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_TYPE.c0000644000175000017500000000334212576764164022317 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Version of the ASN.1 infrastructure shipped with compiler. */ int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } static asn_app_consume_bytes_f _print2fp; /* * Return the outmost tag of the type. */ ber_tlv_tag_t asn_TYPE_outmost_tag(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { if(tag_mode) return tag; if(type_descriptor->tags_count) return type_descriptor->tags[0]; return type_descriptor->outmost_tag(type_descriptor, struct_ptr, 0, 0); } /* * Print the target language's structure in human readable form. */ int asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr) { if(!stream) stream = stdout; if(!td || !struct_ptr) { errno = EINVAL; return -1; } /* Invoke type-specific printer */ if(td->print_struct(td, struct_ptr, 1, _print2fp, stream)) return -1; /* Terminate the output */ if(_print2fp("\n", 1, stream)) return -1; return fflush(stream); } /* Dump the data into the specified stdio stream */ static int _print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } /* * Some compilers do not support variable args macros. * This function is a replacement of ASN_DEBUG() macro. */ void ASN_DEBUG_f(const char *fmt, ...); void ASN_DEBUG_f(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCCPCH-RSCP.c0000644000175000017500000001152412576764164023100 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "PrimaryCCPCH-RSCP.h" int PrimaryCCPCH_RSCP_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void PrimaryCCPCH_RSCP_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int PrimaryCCPCH_RSCP_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t PrimaryCCPCH_RSCP_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t PrimaryCCPCH_RSCP_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t PrimaryCCPCH_RSCP_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t PrimaryCCPCH_RSCP_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t PrimaryCCPCH_RSCP_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t PrimaryCCPCH_RSCP_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { PrimaryCCPCH_RSCP_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_PrimaryCCPCH_RSCP_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_PrimaryCCPCH_RSCP_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_PrimaryCCPCH_RSCP = { "PrimaryCCPCH-RSCP", "PrimaryCCPCH-RSCP", PrimaryCCPCH_RSCP_free, PrimaryCCPCH_RSCP_print, PrimaryCCPCH_RSCP_constraint, PrimaryCCPCH_RSCP_decode_ber, PrimaryCCPCH_RSCP_encode_der, PrimaryCCPCH_RSCP_decode_xer, PrimaryCCPCH_RSCP_encode_xer, PrimaryCCPCH_RSCP_decode_uper, PrimaryCCPCH_RSCP_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PrimaryCCPCH_RSCP_tags_1, sizeof(asn_DEF_PrimaryCCPCH_RSCP_tags_1) /sizeof(asn_DEF_PrimaryCCPCH_RSCP_tags_1[0]), /* 1 */ asn_DEF_PrimaryCCPCH_RSCP_tags_1, /* Same as above */ sizeof(asn_DEF_PrimaryCCPCH_RSCP_tags_1) /sizeof(asn_DEF_PrimaryCCPCH_RSCP_tags_1[0]), /* 1 */ &asn_PER_type_PrimaryCCPCH_RSCP_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/INTEGER.h0000644000175000017500000000426712576764164021257 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _INTEGER_H_ #define _INTEGER_H_ #include #include #ifdef __cplusplus extern "C" { #endif typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; extern asn_TYPE_descriptor_t asn_DEF_INTEGER; /* Map with to integer value association */ typedef struct asn_INTEGER_enum_map_s { long nat_value; /* associated native integer value */ size_t enum_len; /* strlen("tag") */ const char *enum_name; /* "tag" */ } asn_INTEGER_enum_map_t; /* This type describes an enumeration for INTEGER and ENUMERATED types */ typedef struct asn_INTEGER_specifics_s { asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ unsigned int *enum2value; /* "tag" => N; sorted by tag */ int map_count; /* Elements in either map */ int extension; /* This map is extensible */ int strict_enumeration; /* Enumeration set is fixed */ int field_width; /* Size of native integer */ int field_unsigned; /* Signed=0, unsigned=1 */ } asn_INTEGER_specifics_t; asn_struct_print_f INTEGER_print; ber_type_decoder_f INTEGER_decode_ber; der_type_encoder_f INTEGER_encode_der; xer_type_decoder_f INTEGER_decode_xer; xer_type_encoder_f INTEGER_encode_xer; per_type_decoder_f INTEGER_decode_uper; per_type_encoder_f INTEGER_encode_uper; /*********************************** * Some handy conversion routines. * ***********************************/ /* * Returns 0 if it was possible to convert, -1 otherwise. * -1/EINVAL: Mandatory argument missing * -1/ERANGE: Value encoded is out of range for long representation * -1/ENOMEM: Memory allocation failed (in asn_long2INTEGER()). */ int asn_INTEGER2long(const INTEGER_t *i, long *l); int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); int asn_long2INTEGER(INTEGER_t *i, long l); int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); /* * Convert the integer value into the corresponding enumeration map entry. */ const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value); #ifdef __cplusplus } #endif #endif /* _INTEGER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NativeInteger.h0000644000175000017500000000210412576764164022712 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This type differs from the standard INTEGER in that it is modelled using * the fixed machine type (long, int, short), so it can hold only values of * limited length. There is no type (i.e., NativeInteger_t, any integer type * will do). * This type may be used when integer range is limited by subtype constraints. */ #ifndef _NativeInteger_H_ #define _NativeInteger_H_ #include #include #ifdef __cplusplus extern "C" { #endif extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; asn_struct_free_f NativeInteger_free; asn_struct_print_f NativeInteger_print; ber_type_decoder_f NativeInteger_decode_ber; der_type_encoder_f NativeInteger_encode_der; xer_type_decoder_f NativeInteger_decode_xer; xer_type_encoder_f NativeInteger_encode_xer; per_type_decoder_f NativeInteger_decode_uper; per_type_encoder_f NativeInteger_encode_uper; #ifdef __cplusplus } #endif #endif /* _NativeInteger_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Ver.h0000644000175000017500000000142412576764164020706 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Ver_H_ #define _Ver_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Ver */ typedef BIT_STRING_t Ver_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Ver; asn_struct_free_f Ver_free; asn_struct_print_f Ver_print; asn_constr_check_f Ver_constraint; ber_type_decoder_f Ver_decode_ber; der_type_encoder_f Ver_encode_der; xer_type_decoder_f Ver_decode_xer; xer_type_encoder_f Ver_encode_xer; per_type_decoder_f Ver_decode_uper; per_type_encoder_f Ver_encode_uper; #ifdef __cplusplus } #endif #endif /* _Ver_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLPOS.c0000644000175000017500000000403312576764164021311 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS" * found in "../supl-pos.asn" */ #include "SUPLPOS.h" static asn_TYPE_member_t asn_MBR_SUPLPOS_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SUPLPOS, posPayLoad), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_PosPayLoad, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posPayLoad" }, { ATF_POINTER, 1, offsetof(struct SUPLPOS, velocity), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_Velocity, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "velocity" }, }; static int asn_MAP_SUPLPOS_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_SUPLPOS_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SUPLPOS_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* posPayLoad at 10 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* velocity at 11 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SUPLPOS_specs_1 = { sizeof(struct SUPLPOS), offsetof(struct SUPLPOS, _asn_ctx), asn_MAP_SUPLPOS_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_SUPLPOS_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SUPLPOS = { "SUPLPOS", "SUPLPOS", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SUPLPOS_tags_1, sizeof(asn_DEF_SUPLPOS_tags_1) /sizeof(asn_DEF_SUPLPOS_tags_1[0]), /* 1 */ asn_DEF_SUPLPOS_tags_1, /* Same as above */ sizeof(asn_DEF_SUPLPOS_tags_1) /sizeof(asn_DEF_SUPLPOS_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SUPLPOS_1, 2, /* Elements count */ &asn_SPC_SUPLPOS_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_system.h0000644000175000017500000000643012576764164022341 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Miscellaneous system-dependent types. */ #ifndef _ASN_SYSTEM_H_ #define _ASN_SYSTEM_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* For snprintf(3) */ #include /* For *alloc(3) */ #include /* For memcpy(3) */ #include /* For size_t */ #include /* For LONG_MAX */ #include /* For va_start */ #include /* for offsetof and ptrdiff_t */ #ifdef WIN32 #include #define snprintf _snprintf #define vsnprintf _vsnprintf /* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ #define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ | (((l) << 16) & 0xff0000) \ | (((l) << 8) & 0xff00) \ | ((l) & 0xff)) #ifdef _MSC_VER /* MSVS.Net */ #ifndef __cplusplus #define inline __inline #endif #ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ #define ssize_t SSIZE_T typedef char int8_t; typedef short int16_t; typedef int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #endif /* ASSUMESTDTYPES */ #define WIN32_LEAN_AND_MEAN #include #include #define isnan _isnan #define finite _finite #define copysign _copysign #define ilogb _logb #else /* !_MSC_VER */ #include #endif /* _MSC_VER */ #else /* !WIN32 */ #if defined(__vxworks) #include #else /* !defined(__vxworks) */ #include /* C99 specifies this file */ /* * 1. Earlier FreeBSD version didn't have , * but was present. * 2. Sun Solaris requires for alloca(3), * but does not have . */ #if (!defined(__FreeBSD__) || !defined(_SYS_INTTYPES_H_)) #if defined(sun) #include /* For alloca(3) */ #include /* for finite(3) */ #elif defined(__hpux) #ifdef __GNUC__ #include /* For alloca(3) */ #else /* !__GNUC__ */ #define inline #endif /* __GNUC__ */ #else #include /* SUSv2+ and C99 specify this file, for uintXX_t */ #endif /* defined(sun) */ #endif #include /* for ntohl() */ #define sys_ntohl(foo) ntohl(foo) #endif /* defined(__vxworks) */ #endif /* WIN32 */ #if __GNUC__ >= 3 #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) #endif #ifndef GCC_NOTUSED #define GCC_NOTUSED __attribute__((unused)) #endif #else #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) /* nothing */ #endif #ifndef GCC_NOTUSED #define GCC_NOTUSED #endif #endif /* Figure out if thread safety is requested */ #if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) #define ASN_THREAD_SAFE #endif /* Thread safety */ #ifndef offsetof /* If not defined by */ #define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) #endif /* offsetof */ #ifndef MIN /* Suitable for comparing primitive types (integers) */ #if defined(__GNUC__) #define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ ((_a)<(_b)?(_a):(_b)); }) #else /* !__GNUC__ */ #define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ #endif /* __GNUC__ */ #endif /* MIN */ #endif /* _ASN_SYSTEM_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLRESPONSE.c0000644000175000017500000000557412576764164022121 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-RESPONSE" * found in "../supl-response.asn" */ #include "SUPLRESPONSE.h" static asn_TYPE_member_t asn_MBR_SUPLRESPONSE_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SUPLRESPONSE, posMethod), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PosMethod, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posMethod" }, { ATF_POINTER, 3, offsetof(struct SUPLRESPONSE, sLPAddress), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_SLPAddress, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sLPAddress" }, { ATF_POINTER, 2, offsetof(struct SUPLRESPONSE, sETAuthKey), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_SETAuthKey, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sETAuthKey" }, { ATF_POINTER, 1, offsetof(struct SUPLRESPONSE, keyIdentity4), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_KeyIdentity4, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "keyIdentity4" }, }; static int asn_MAP_SUPLRESPONSE_oms_1[] = { 1, 2, 3 }; static ber_tlv_tag_t asn_DEF_SUPLRESPONSE_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SUPLRESPONSE_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* posMethod at 10 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sLPAddress at 11 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sETAuthKey at 12 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* keyIdentity4 at 13 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SUPLRESPONSE_specs_1 = { sizeof(struct SUPLRESPONSE), offsetof(struct SUPLRESPONSE, _asn_ctx), asn_MAP_SUPLRESPONSE_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_SUPLRESPONSE_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 3, /* Start extensions */ 5 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SUPLRESPONSE = { "SUPLRESPONSE", "SUPLRESPONSE", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SUPLRESPONSE_tags_1, sizeof(asn_DEF_SUPLRESPONSE_tags_1) /sizeof(asn_DEF_SUPLRESPONSE_tags_1[0]), /* 1 */ asn_DEF_SUPLRESPONSE_tags_1, /* Same as above */ sizeof(asn_DEF_SUPLRESPONSE_tags_1) /sizeof(asn_DEF_SUPLRESPONSE_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SUPLRESPONSE_1, 4, /* Elements count */ &asn_SPC_SUPLRESPONSE_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLRESPONSE.h0000644000175000017500000000205312576764164022113 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-RESPONSE" * found in "../supl-response.asn" */ #ifndef _SUPLRESPONSE_H_ #define _SUPLRESPONSE_H_ #include /* Including external dependencies */ #include "PosMethod.h" #include "KeyIdentity4.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SLPAddress; struct SETAuthKey; /* SUPLRESPONSE */ typedef struct SUPLRESPONSE { PosMethod_t posMethod; struct SLPAddress *sLPAddress /* OPTIONAL */; struct SETAuthKey *sETAuthKey /* OPTIONAL */; KeyIdentity4_t *keyIdentity4 /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SUPLRESPONSE_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SUPLRESPONSE; #ifdef __cplusplus } #endif /* Referred external types */ #include "SLPAddress.h" #include "SETAuthKey.h" #endif /* _SUPLRESPONSE_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_SET_OF.h0000644000175000017500000000323312576764164022032 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_SET_OF_H #define ASN_SET_OF_H #ifdef __cplusplus extern "C" { #endif #define A_SET_OF(type) \ struct { \ type **array; \ int count; /* Meaningful size */ \ int size; /* Allocated size */ \ void (*free)(type *); \ } #define ASN_SET_ADD(headptr, ptr) \ asn_set_add((headptr), (ptr)) /******************************************* * Implementation of the SET OF structure. */ /* * Add another structure into the set by its pointer. * RETURN VALUES: * 0 for success and -1/errno for failure. */ int asn_set_add(void *asn_set_of_x, void *ptr); /* * Delete the element from the set by its number (base 0). * This is a constant-time operation. The order of elements before the * deleted ones is guaranteed, the order of elements after the deleted * one is NOT guaranteed. * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ void asn_set_del(void *asn_set_of_x, int number, int _do_free); /* * Empty the contents of the set. Will free the elements, if (*free) is given. * Will NOT free the set itself. */ void asn_set_empty(void *asn_set_of_x); /* * Cope with different conversions requirements to/from void in C and C++. * This is mostly useful for support library. */ typedef A_SET_OF(void) asn_anonymous_set_; #define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) #define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) #ifdef __cplusplus } #endif #endif /* ASN_SET_OF_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLSTART.h0000644000175000017500000000162712576764164021560 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #ifndef _SUPLSTART_H_ #define _SUPLSTART_H_ #include /* Including external dependencies */ #include "SETCapabilities.h" #include "LocationId.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct QoP; /* SUPLSTART */ typedef struct SUPLSTART { SETCapabilities_t sETCapabilities; LocationId_t locationId; struct QoP *qoP /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SUPLSTART_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SUPLSTART; #ifdef __cplusplus } #endif /* Referred external types */ #include "QoP.h" #endif /* _SUPLSTART_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/StatusCode.c0000644000175000017500000001432112576764164022223 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "StatusCode.h" int StatusCode_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void StatusCode_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void StatusCode_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { StatusCode_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int StatusCode_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { StatusCode_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t StatusCode_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { StatusCode_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t StatusCode_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { StatusCode_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t StatusCode_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { StatusCode_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t StatusCode_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { StatusCode_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t StatusCode_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { StatusCode_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t StatusCode_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { StatusCode_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_StatusCode_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 19 } /* (0..19,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_StatusCode_value2enum_1[] = { { 0, 11, "unspecified" }, { 1, 13, "systemFailure" }, { 2, 17, "unexpectedMessage" }, { 3, 13, "protocolError" }, { 4, 11, "dataMissing" }, { 5, 19, "unexpectedDataValue" }, { 6, 16, "posMethodFailure" }, { 7, 17, "posMethodMismatch" }, { 8, 19, "posProtocolMismatch" }, { 9, 21, "targetSETnotReachable" }, { 10, 19, "versionNotSupported" }, { 11, 16, "resourceShortage" }, { 12, 16, "invalidSessionId" }, { 13, 24, "nonProxyModeNotSupported" }, { 14, 21, "proxyModeNotSupported" }, { 15, 23, "positioningNotPermitted" }, { 16, 14, "authNetFailure" }, { 17, 19, "authSuplinitFailure" }, { 100, 19, "consentDeniedByUser" }, { 101, 20, "consentGrantedByUser" } /* This list is extensible */ }; static unsigned int asn_MAP_StatusCode_enum2value_1[] = { 16, /* authNetFailure(16) */ 17, /* authSuplinitFailure(17) */ 18, /* consentDeniedByUser(100) */ 19, /* consentGrantedByUser(101) */ 4, /* dataMissing(4) */ 12, /* invalidSessionId(12) */ 13, /* nonProxyModeNotSupported(13) */ 6, /* posMethodFailure(6) */ 7, /* posMethodMismatch(7) */ 8, /* posProtocolMismatch(8) */ 15, /* positioningNotPermitted(15) */ 3, /* protocolError(3) */ 14, /* proxyModeNotSupported(14) */ 11, /* resourceShortage(11) */ 1, /* systemFailure(1) */ 9, /* targetSETnotReachable(9) */ 5, /* unexpectedDataValue(5) */ 2, /* unexpectedMessage(2) */ 0, /* unspecified(0) */ 10 /* versionNotSupported(10) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_StatusCode_specs_1 = { asn_MAP_StatusCode_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_StatusCode_enum2value_1, /* N => "tag"; sorted by N */ 20, /* Number of elements in the maps */ 21, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_StatusCode_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_StatusCode = { "StatusCode", "StatusCode", StatusCode_free, StatusCode_print, StatusCode_constraint, StatusCode_decode_ber, StatusCode_encode_der, StatusCode_decode_xer, StatusCode_encode_xer, StatusCode_decode_uper, StatusCode_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_StatusCode_tags_1, sizeof(asn_DEF_StatusCode_tags_1) /sizeof(asn_DEF_StatusCode_tags_1[0]), /* 1 */ asn_DEF_StatusCode_tags_1, /* Same as above */ sizeof(asn_DEF_StatusCode_tags_1) /sizeof(asn_DEF_StatusCode_tags_1[0]), /* 1 */ &asn_PER_type_StatusCode_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_StatusCode_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosPayLoad.c0000644000175000017500000001120612576764164022157 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS" * found in "../supl-pos.asn" */ #include "PosPayLoad.h" static int memb_tia801payload_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 8192)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_rrcPayload_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 8192)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_rrlpPayload_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 8192)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_tia801payload_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 13, 13, 1, 8192 } /* (SIZE(1..8192)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_rrcPayload_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 13, 13, 1, 8192 } /* (SIZE(1..8192)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_rrlpPayload_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 13, 13, 1, 8192 } /* (SIZE(1..8192)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_type_PosPayLoad_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_PosPayLoad_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PosPayLoad, choice.tia801payload), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_tia801payload_constraint_1, &asn_PER_memb_tia801payload_constr_2, 0, "tia801payload" }, { ATF_NOFLAGS, 0, offsetof(struct PosPayLoad, choice.rrcPayload), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_rrcPayload_constraint_1, &asn_PER_memb_rrcPayload_constr_3, 0, "rrcPayload" }, { ATF_NOFLAGS, 0, offsetof(struct PosPayLoad, choice.rrlpPayload), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_rrlpPayload_constraint_1, &asn_PER_memb_rrlpPayload_constr_4, 0, "rrlpPayload" }, }; static asn_TYPE_tag2member_t asn_MAP_PosPayLoad_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tia801payload at 15 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rrcPayload at 16 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rrlpPayload at 17 */ }; static asn_CHOICE_specifics_t asn_SPC_PosPayLoad_specs_1 = { sizeof(struct PosPayLoad), offsetof(struct PosPayLoad, _asn_ctx), offsetof(struct PosPayLoad, present), sizeof(((struct PosPayLoad *)0)->present), asn_MAP_PosPayLoad_tag2el_1, 3, /* Count of tags in the map */ 0, 3 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_PosPayLoad = { "PosPayLoad", "PosPayLoad", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_PosPayLoad_constr_1, asn_MBR_PosPayLoad_1, 3, /* Elements count */ &asn_SPC_PosPayLoad_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Status.h0000644000175000017500000000173212576764164021437 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Status_H_ #define _Status_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum Status { Status_stale = 0, Status_current = 1, Status_unknown = 2 /* * Enumeration is extensible */ } e_Status; /* Status */ typedef ENUMERATED_t Status_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Status; asn_struct_free_f Status_free; asn_struct_print_f Status_print; asn_constr_check_f Status_constraint; ber_type_decoder_f Status_decode_ber; der_type_encoder_f Status_encode_der; xer_type_decoder_f Status_decode_xer; xer_type_encoder_f Status_encode_xer; per_type_decoder_f Status_decode_uper; per_type_encoder_f Status_encode_uper; #ifdef __cplusplus } #endif #endif /* _Status_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Ver.c0000644000175000017500000001060012576764164020675 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Ver.h" int Ver_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 64)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void Ver_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void Ver_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { Ver_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int Ver_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { Ver_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t Ver_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { Ver_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t Ver_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { Ver_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t Ver_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { Ver_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t Ver_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { Ver_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t Ver_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { Ver_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t Ver_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { Ver_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_Ver_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 64, 64 } /* (SIZE(64..64)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_Ver_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Ver = { "Ver", "Ver", Ver_free, Ver_print, Ver_constraint, Ver_decode_ber, Ver_encode_der, Ver_decode_xer, Ver_encode_xer, Ver_decode_uper, Ver_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Ver_tags_1, sizeof(asn_DEF_Ver_tags_1) /sizeof(asn_DEF_Ver_tags_1[0]), /* 1 */ asn_DEF_Ver_tags_1, /* Same as above */ sizeof(asn_DEF_Ver_tags_1) /sizeof(asn_DEF_Ver_tags_1[0]), /* 1 */ &asn_PER_type_Ver_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SLPAddress.h0000644000175000017500000000201512576764164022113 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _SLPAddress_H_ #define _SLPAddress_H_ #include /* Including external dependencies */ #include "IPAddress.h" #include "FQDN.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SLPAddress_PR { SLPAddress_PR_NOTHING, /* No components present */ SLPAddress_PR_iPAddress, SLPAddress_PR_fQDN, /* Extensions may appear below */ } SLPAddress_PR; /* SLPAddress */ typedef struct SLPAddress { SLPAddress_PR present; union SLPAddress_u { IPAddress_t iPAddress; FQDN_t fQDN; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SLPAddress_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SLPAddress; #ifdef __cplusplus } #endif #endif /* _SLPAddress_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/xer_support.h0000644000175000017500000000342412576764164022546 0ustar carlescarles/* * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_SUPPORT_H_ #define _XER_SUPPORT_H_ #include /* Platform-specific types */ #ifdef __cplusplus extern "C" { #endif /* * Types of data transferred to the application. */ typedef enum { PXML_TEXT, /* Plain text between XML tags. */ PXML_TAG, /* A tag, starting with '<'. */ PXML_COMMENT, /* An XML comment, including "". */ /* * The following chunk types are reported if the chunk * terminates the specified XML element. */ PXML_TAG_END, /* Tag ended */ PXML_COMMENT_END /* Comment ended */ } pxml_chunk_type_e; /* * Callback function that is called by the parser when parsed data is * available. The _opaque is the pointer to a field containing opaque user * data specified in pxml_create() call. The chunk type is _type and the text * data is the piece of buffer identified by _bufid (as supplied to * pxml_feed() call) starting at offset _offset and of _size bytes size. * The chunk is NOT '\0'-terminated. */ typedef int (pxml_callback_f)(pxml_chunk_type_e _type, const void *_chunk_data, size_t _chunk_size, void *_key); /* * Parse the given buffer as it were a chunk of XML data. * Invoke the specified callback each time the meaninful data is found. * This function returns number of bytes consumed from the bufer. * It will always be lesser than or equal to the specified _size. * The next invocation of this function must account the difference. */ ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, pxml_callback_f *cb, void *_key); #ifdef __cplusplus } #endif #endif /* _XER_SUPPORT_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/BOOLEAN.h0000644000175000017500000000157312576764164021236 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BOOLEAN_H_ #define _BOOLEAN_H_ #include #ifdef __cplusplus extern "C" { #endif /* * The underlying integer may contain various values, but everything * non-zero is capped to 0xff by the DER encoder. The BER decoder may * yield non-zero values different from 1, beware. */ typedef int BOOLEAN_t; extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; asn_struct_free_f BOOLEAN_free; asn_struct_print_f BOOLEAN_print; ber_type_decoder_f BOOLEAN_decode_ber; der_type_encoder_f BOOLEAN_encode_der; xer_type_decoder_f BOOLEAN_decode_xer; xer_type_encoder_f BOOLEAN_encode_xer; per_type_decoder_f BOOLEAN_decode_uper; per_type_encoder_f BOOLEAN_encode_uper; #ifdef __cplusplus } #endif #endif /* _BOOLEAN_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/DUMMY.h0000644000175000017500000000143612576764164021050 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP" * found in "../supl-ulp.asn" */ #ifndef _DUMMY_H_ #define _DUMMY_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* DUMMY */ typedef INTEGER_t DUMMY_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_DUMMY; asn_struct_free_f DUMMY_free; asn_struct_print_f DUMMY_print; asn_constr_check_f DUMMY_constraint; ber_type_decoder_f DUMMY_decode_ber; der_type_encoder_f DUMMY_encode_der; xer_type_decoder_f DUMMY_decode_xer; xer_type_encoder_f DUMMY_encode_xer; per_type_decoder_f DUMMY_decode_uper; per_type_encoder_f DUMMY_encode_uper; #ifdef __cplusplus } #endif #endif /* _DUMMY_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/xer_decoder.c0000644000175000017500000002101412576764164022425 0ustar carlescarles/* * Copyright (c) 2004, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* XER/XML parsing support */ /* * Decode the XER encoding of a given type. */ asn_dec_rval_t xer_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *buffer, size_t size) { asn_codec_ctx_t s_codec_ctx; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* * Invoke type-specific decoder. */ return td->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); } struct xer__cb_arg { pxml_chunk_type_e chunk_type; size_t chunk_size; const void *chunk_buf; int callback_not_invoked; }; static int xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { struct xer__cb_arg *arg = (struct xer__cb_arg *)key; arg->chunk_type = type; arg->chunk_size = _chunk_size; arg->chunk_buf = _chunk_data; arg->callback_not_invoked = 0; return -1; /* Terminate the XML parsing */ } /* * Fetch the next token from the XER/XML stream. */ ssize_t xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { struct xer__cb_arg arg; int new_stateContext = *stateContext; ssize_t ret; arg.callback_not_invoked = 1; ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); if(ret < 0) return -1; if(arg.callback_not_invoked) { assert(ret == 0); /* No data was consumed */ return 0; /* Try again with more data */ } else { assert(arg.chunk_size); assert(arg.chunk_buf == buffer); } /* * Translate the XML chunk types into more convenient ones. */ switch(arg.chunk_type) { case PXML_TEXT: *ch_type = PXER_TEXT; break; case PXML_TAG: return 0; /* Want more */ case PXML_TAG_END: *ch_type = PXER_TAG; break; case PXML_COMMENT: case PXML_COMMENT_END: *ch_type = PXER_COMMENT; break; } *stateContext = new_stateContext; return arg.chunk_size; } #define CSLASH 0x2f /* '/' */ #define LANGLE 0x3c /* '<' */ #define RANGLE 0x3e /* '>' */ xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { const char *buf = (const char *)buf_ptr; const char *end; xer_check_tag_e ct = XCT_OPENING; if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { if(size >= 2) ASN_DEBUG("Broken XML tag: \"%c...%c\"", buf[0], buf[size - 1]); return XCT_BROKEN; } /* * Determine the tag class. */ if(buf[1] == CSLASH) { buf += 2; /* advance past "" */ ct = XCT_CLOSING; if(size > 0 && buf[size-1] == CSLASH) return XCT_BROKEN; /* */ } else { buf++; /* advance past "<" */ size -= 2; /* strip "<" and ">" */ if(size > 0 && buf[size-1] == CSLASH) { ct = XCT_BOTH; size--; /* One more, for "/" */ } } /* Sometimes we don't care about the tag */ if(!need_tag || !*need_tag) return (xer_check_tag_e)(XCT__UNK__MASK | ct); /* * Determine the tag name. */ for(end = buf + size; buf < end; buf++, need_tag++) { int b = *buf, n = *need_tag; if(b != n) { if(n == 0) { switch(b) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* "": whitespace is normal */ return ct; } } return (xer_check_tag_e)(XCT__UNK__MASK | ct); } if(b == 0) return XCT_BROKEN; /* Embedded 0 in buf?! */ } if(*need_tag) return (xer_check_tag_e)(XCT__UNK__MASK | ct); return ct; } #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = (num_bytes); \ buf_ptr = ((const char *)buf_ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself; \ if(rval.code != RC_OK) \ ASN_DEBUG("Failed with %d", rval.code); \ return rval; \ } while(0) #define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ ssize_t converted_size = body_receiver \ (struct_key, chunk_buf, chunk_size, \ (size_t)chunk_size < size); \ if(converted_size == -1) RETURN(RC_FAIL); \ if(converted_size == 0 \ && size == (size_t)chunk_size) \ RETURN(RC_WMORE); \ chunk_size = converted_size; \ } while(0) #define XER_GOT_EMPTY() do { \ if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ RETURN(RC_FAIL); \ } while(0) /* * Generalized function for decoding the primitive values. */ asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx, /* Type decoder context */ void *struct_key, const char *xml_tag, /* Expected XML tag */ const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_key, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_key, const void *chunk_buf, size_t chunk_size, int have_more) ) { asn_dec_rval_t rval; ssize_t consumed_myself = 0; (void)opt_codec_ctx; /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. */ if(ctx->phase > 1) RETURN(RC_FAIL); for(;;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TEXT: if(ctx->phase == 0) { /* * We have to ignore whitespace here, * but in order to be forward compatible * with EXTENDED-XER (EMBED-VALUES, #25) * any text is just ignored here. */ } else { XER_GOT_BODY(buf_ptr, ch_size, size); } ADVANCE(ch_size); continue; case PXER_TAG: break; /* Check the rest down there */ } } assert(ch_type == PXER_TAG && size); tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); /* * Phase 0: * Expecting the opening tag * for the type being processed. * Phase 1: * Waiting for the closing XML tag. */ switch(tcv) { case XCT_BOTH: if(ctx->phase) break; /* Finished decoding of an empty element */ XER_GOT_EMPTY(); ADVANCE(ch_size); ctx->phase = 2; /* Phase out */ RETURN(RC_OK); case XCT_OPENING: if(ctx->phase) break; ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; case XCT_CLOSING: if(!ctx->phase) break; ADVANCE(ch_size); ctx->phase = 2; /* Phase out */ RETURN(RC_OK); case XCT_UNKNOWN_BO: /* * Certain tags in the body may be expected. */ if(opt_unexpected_tag_decoder && opt_unexpected_tag_decoder(struct_key, buf_ptr, ch_size) >= 0) { /* Tag's processed fine */ ADVANCE(ch_size); if(!ctx->phase) { /* We are not expecting * the closing tag anymore. */ ctx->phase = 2; /* Phase out */ RETURN(RC_OK); } continue; } /* Fall through */ default: break; /* Unexpected tag */ } ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); break; /* Dark and mysterious things have just happened */ } RETURN(RC_FAIL); } int xer_is_whitespace(const void *chunk_buf, size_t chunk_size) { const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; for(; p < pend; p++) { switch(*p) { /* X.693, #8.1.4 * HORISONTAL TAB (9) * LINE FEED (10) * CARRIAGE RETURN (13) * SPACE (32) */ case 0x09: case 0x0a: case 0x0d: case 0x20: break; default: return 0; } } return 1; /* All whitespace */ } /* * This is a vastly simplified, non-validating XML tree skipper. */ int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { assert(*depth > 0); switch(tcv) { case XCT_BOTH: case XCT_UNKNOWN_BO: /* These negate each other. */ return 0; case XCT_OPENING: case XCT_UNKNOWN_OP: ++(*depth); return 0; case XCT_CLOSING: case XCT_UNKNOWN_CL: if(--(*depth) == 0) return (tcv == XCT_CLOSING) ? 2 : 1; return 0; default: return -1; } } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTCTime.h0000644000175000017500000000161612576764164021427 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _UTCTime_H_ #define _UTCTime_H_ #include #ifdef __cplusplus extern "C" { #endif typedef OCTET_STRING_t UTCTime_t; /* Implemented via OCTET STRING */ extern asn_TYPE_descriptor_t asn_DEF_UTCTime; asn_struct_print_f UTCTime_print; asn_constr_check_f UTCTime_constraint; xer_type_encoder_f UTCTime_encode_xer; /*********************** * Some handy helpers. * ***********************/ struct tm; /* */ /* See asn_GT2time() in GeneralizedTime.h */ time_t asn_UT2time(const UTCTime_t *, struct tm *_optional_tm4fill, int as_gmt); /* See asn_time2GT() in GeneralizedTime.h */ UTCTime_t *asn_time2UT(UTCTime_t *__opt_ut, const struct tm *, int force_gmt); #ifdef __cplusplus } #endif #endif /* _UTCTime_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/BOOLEAN.c0000644000175000017500000001422312576764164021225 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * BOOLEAN basic type description. */ static ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { "BOOLEAN", "BOOLEAN", BOOLEAN_free, BOOLEAN_print, asn_generic_no_constraint, BOOLEAN_decode_ber, BOOLEAN_encode_der, BOOLEAN_decode_xer, BOOLEAN_encode_xer, BOOLEAN_decode_uper, /* Unaligned PER decoder */ BOOLEAN_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_BOOLEAN_tags, sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), asn_DEF_BOOLEAN_tags, /* Same as above */ sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Decode BOOLEAN type. */ asn_dec_rval_t BOOLEAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **bool_value, const void *buf_ptr, size_t size, int tag_mode) { BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; asn_dec_rval_t rval; ber_tlv_len_t length; ber_tlv_len_t lidx; if(st == NULL) { st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); if(st == NULL) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } } ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", td->name, tag_mode); /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("Boolean length is %d bytes", (int)length); buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } /* * Compute boolean value. */ for(*st = 0, lidx = 0; (lidx < length) && *st == 0; lidx++) { /* * Very simple approach: read bytes until the end or * value is already TRUE. * BOOLEAN is not supposed to contain meaningful data anyway. */ *st |= ((const uint8_t *)buf_ptr)[lidx]; } rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", (long)rval.consumed, (long)length, td->name, *st); return rval; } asn_enc_rval_t BOOLEAN_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; BOOLEAN_t *st = (BOOLEAN_t *)sptr; erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = sptr; return erval; } if(cb) { uint8_t bool_value; bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ if(cb(&bool_value, 1, app_key) < 0) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = sptr; return erval; } } erval.encoded += 1; _ASN_ENCODED_OK(erval); } /* * Decode the chunk of XML text encoding INTEGER. */ static enum xer_pbd_rval BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { BOOLEAN_t *st = (BOOLEAN_t *)sptr; const char *p = (const char *)chunk_buf; (void)td; if(chunk_size && p[0] == 0x3c /* '<' */) { switch(xer_check_tag(chunk_buf, chunk_size, "false")) { case XCT_BOTH: /* "" */ *st = 0; break; case XCT_UNKNOWN_BO: if(xer_check_tag(chunk_buf, chunk_size, "true") != XCT_BOTH) return XPBD_BROKEN_ENCODING; /* "" */ *st = 1; /* Or 0xff as in DER?.. */ break; default: return XPBD_BROKEN_ENCODING; } return XPBD_BODY_CONSUMED; } else { if(xer_is_whitespace(chunk_buf, chunk_size)) return XPBD_NOT_BODY_IGNORE; else return XPBD_BROKEN_ENCODING; } } asn_dec_rval_t BOOLEAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, BOOLEAN__xer_body_decode); } asn_enc_rval_t BOOLEAN_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; asn_enc_rval_t er; (void)ilevel; (void)flags; if(!st) _ASN_ENCODE_FAILED; if(*st) { _ASN_CALLBACK("", 7); er.encoded = 7; } else { _ASN_CALLBACK("", 8); er.encoded = 8; } _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } int BOOLEAN_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; const char *buf; size_t buflen; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st) { if(*st) { buf = "TRUE"; buflen = 4; } else { buf = "FALSE"; buflen = 5; } } else { buf = ""; buflen = 8; } return (cb(buf, buflen, app_key) < 0) ? -1 : 0; } void BOOLEAN_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(td && ptr && !contents_only) { FREEMEM(ptr); } } asn_dec_rval_t BOOLEAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; BOOLEAN_t *st = (BOOLEAN_t *)*sptr; (void)opt_codec_ctx; (void)constraints; if(!st) { st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); if(!st) _ASN_DECODE_FAILED; } /* * Extract a single bit */ switch(per_get_few_bits(pd, 1)) { case 1: *st = 1; break; case 0: *st = 0; break; case -1: default: _ASN_DECODE_STARVED; } ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); rv.code = RC_OK; rv.consumed = 1; return rv; } asn_enc_rval_t BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; asn_enc_rval_t er; (void)constraints; if(!st) _ASN_ENCODE_FAILED; per_put_few_bits(po, *st ? 1 : 0, 1); _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constraints.h0000644000175000017500000000365712576764164022533 0ustar carlescarles/*- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _ASN1_CONSTRAINTS_VALIDATOR_H_ #define _ASN1_CONSTRAINTS_VALIDATOR_H_ #include /* Platform-dependent types */ #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Validate the structure according to the ASN.1 constraints. * If errbuf and errlen are given, they shall be pointing to the appropriate * buffer space and its length before calling this function. Alternatively, * they could be passed as NULL's. If constraints validation fails, * errlen will contain the actual number of bytes taken from the errbuf * to encode an error message (properly 0-terminated). * * RETURN VALUES: * This function returns 0 in case all ASN.1 constraints are met * and -1 if one or more constraints were failed. */ int asn_check_constraints(struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, /* Target language's structure */ char *errbuf, /* Returned error description */ size_t *errlen /* Length of the error description */ ); /* * Generic type for constraint checking callback, * associated with every type descriptor. */ typedef int (asn_constr_check_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *optional_callback, /* Log the error */ void *optional_app_key /* Opaque key passed to a callback */ ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ /* * Invoke the callback with a complete error message. */ #define _ASN_CTFAIL if(ctfailcb) ctfailcb #ifdef __cplusplus } #endif #endif /* _ASN1_CONSTRAINTS_VALIDATOR_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETId.h0000644000175000017500000000223712576764164021065 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _SETId_H_ #define _SETId_H_ #include /* Including external dependencies */ #include #include #include #include "IPAddress.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SETId_PR { SETId_PR_NOTHING, /* No components present */ SETId_PR_msisdn, SETId_PR_mdn, SETId_PR_min, SETId_PR_imsi, SETId_PR_nai, SETId_PR_iPAddress, /* Extensions may appear below */ } SETId_PR; /* SETId */ typedef struct SETId { SETId_PR present; union SETId_u { OCTET_STRING_t msisdn; OCTET_STRING_t mdn; BIT_STRING_t min; OCTET_STRING_t imsi; IA5String_t nai; IPAddress_t iPAddress; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SETId_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SETId; #ifdef __cplusplus } #endif #endif /* _SETId_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IPAddress.c0000644000175000017500000000670712576764164021774 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "IPAddress.h" static int memb_ipv4Address_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size == 4)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ipv6Address_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size == 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ipv4Address_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ipv6Address_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_type_IPAddress_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_IPAddress_1[] = { { ATF_NOFLAGS, 0, offsetof(struct IPAddress, choice.ipv4Address), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_ipv4Address_constraint_1, &asn_PER_memb_ipv4Address_constr_2, 0, "ipv4Address" }, { ATF_NOFLAGS, 0, offsetof(struct IPAddress, choice.ipv6Address), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_ipv6Address_constraint_1, &asn_PER_memb_ipv6Address_constr_3, 0, "ipv6Address" }, }; static asn_TYPE_tag2member_t asn_MAP_IPAddress_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ipv4Address at 41 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ipv6Address at 42 */ }; static asn_CHOICE_specifics_t asn_SPC_IPAddress_specs_1 = { sizeof(struct IPAddress), offsetof(struct IPAddress, _asn_ctx), offsetof(struct IPAddress, present), sizeof(((struct IPAddress *)0)->present), asn_MAP_IPAddress_tag2el_1, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_IPAddress = { "IPAddress", "IPAddress", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_IPAddress_constr_1, asn_MBR_IPAddress_1, 2, /* Elements count */ &asn_SPC_IPAddress_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FrequencyInfoFDD.c0000644000175000017500000000435712576764164023250 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "FrequencyInfoFDD.h" static asn_TYPE_member_t asn_MBR_FrequencyInfoFDD_1[] = { { ATF_POINTER, 1, offsetof(struct FrequencyInfoFDD, uarfcn_UL), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UARFCN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "uarfcn-UL" }, { ATF_NOFLAGS, 0, offsetof(struct FrequencyInfoFDD, uarfcn_DL), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UARFCN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "uarfcn-DL" }, }; static int asn_MAP_FrequencyInfoFDD_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_FrequencyInfoFDD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_FrequencyInfoFDD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* uarfcn-UL at 128 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* uarfcn-DL at 129 */ }; static asn_SEQUENCE_specifics_t asn_SPC_FrequencyInfoFDD_specs_1 = { sizeof(struct FrequencyInfoFDD), offsetof(struct FrequencyInfoFDD, _asn_ctx), asn_MAP_FrequencyInfoFDD_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_FrequencyInfoFDD_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_FrequencyInfoFDD = { "FrequencyInfoFDD", "FrequencyInfoFDD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FrequencyInfoFDD_tags_1, sizeof(asn_DEF_FrequencyInfoFDD_tags_1) /sizeof(asn_DEF_FrequencyInfoFDD_tags_1[0]), /* 1 */ asn_DEF_FrequencyInfoFDD_tags_1, /* Same as above */ sizeof(asn_DEF_FrequencyInfoFDD_tags_1) /sizeof(asn_DEF_FrequencyInfoFDD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_FrequencyInfoFDD_1, 2, /* Elements count */ &asn_SPC_FrequencyInfoFDD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_opentype.c0000644000175000017500000002167312576764164022666 0ustar carlescarles/* * Copyright (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include typedef struct uper_ugot_key { asn_per_data_t oldpd; /* Old per data source */ size_t unclaimed; size_t ot_moved; /* Number of bits moved by OT processing */ int repeat; } uper_ugot_key; static int uper_ugot_refill(asn_per_data_t *pd); static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); int asn_debug_indent; /* * Encode an "open type field". * #10.1, #10.2 */ int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { void *buf; void *bptr; ssize_t size; size_t toGo; ASN_DEBUG("Open type put %s ...", td->name); size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); if(size <= 0) return -1; for(bptr = buf, toGo = size; toGo;) { ssize_t maySave = uper_put_length(po, toGo); if(maySave < 0) break; if(per_put_many_bits(po, bptr, maySave * 8)) break; bptr = (char *)bptr + maySave; toGo -= maySave; } FREEMEM(buf); if(toGo) return -1; ASN_DEBUG("Open type put %s of length %d + overhead (1byte?)", td->name, size); return 0; } static asn_dec_rval_t uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; ssize_t chunk_bytes; int repeat; uint8_t *buf = 0; size_t bufLen = 0; size_t bufSize = 0; asn_per_data_t spd; size_t padding; _ASN_STACK_OVERFLOW_CHECK(ctx); ASN_DEBUG("Getting open type %s...", td->name); do { chunk_bytes = uper_get_length(pd, -1, &repeat); if(chunk_bytes < 0) { FREEMEM(buf); _ASN_DECODE_STARVED; } if(bufLen + chunk_bytes > bufSize) { void *ptr; bufSize = chunk_bytes + (bufSize << 2); ptr = REALLOC(buf, bufSize); if(!ptr) { FREEMEM(buf); _ASN_DECODE_FAILED; } buf = ptr; } if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { FREEMEM(buf); _ASN_DECODE_STARVED; } bufLen += chunk_bytes; } while(repeat); ASN_DEBUG("Getting open type %s encoded in %d bytes", td->name, bufLen); memset(&spd, 0, sizeof(spd)); spd.buffer = buf; spd.nbits = bufLen << 3; asn_debug_indent += 4; rv = td->uper_decoder(ctx, td, constraints, sptr, &spd); asn_debug_indent -= 4; if(rv.code == RC_OK) { /* Check padding validity */ padding = spd.nbits - spd.nboff; if(padding < 8 && per_get_few_bits(&spd, padding) == 0) { /* Everything is cool */ FREEMEM(buf); return rv; } FREEMEM(buf); if(padding >= 8) { ASN_DEBUG("Too large padding %d in open type", padding); _ASN_DECODE_FAILED; } else { ASN_DEBUG("Non-zero padding"); _ASN_DECODE_FAILED; } } else { FREEMEM(buf); /* rv.code could be RC_WMORE, nonsense in this context */ rv.code = RC_FAIL; /* Noone would give us more */ } return rv; } static asn_dec_rval_t GCC_NOTUSED uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { uper_ugot_key arg; asn_dec_rval_t rv; ssize_t padding; _ASN_STACK_OVERFLOW_CHECK(ctx); ASN_DEBUG("Getting open type %s from %s", td->name, per_data_string(pd)); arg.oldpd = *pd; arg.unclaimed = 0; arg.ot_moved = 0; arg.repeat = 1; pd->refill = uper_ugot_refill; pd->refill_key = &arg; pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ pd->moved = 0; /* This now counts the open type size in bits */ asn_debug_indent += 4; rv = td->uper_decoder(ctx, td, constraints, sptr, pd); asn_debug_indent -= 4; #define UPDRESTOREPD do { \ /* buffer and nboff are valid, preserve them. */ \ pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ pd->refill = arg.oldpd.refill; \ pd->refill_key = arg.oldpd.refill_key; \ } while(0) if(rv.code != RC_OK) { UPDRESTOREPD; return rv; } ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d" , td->name, per_data_string(pd), per_data_string(&arg.oldpd), arg.unclaimed, arg.repeat); padding = pd->moved % 8; if(padding) { int32_t pvalue; if(padding > 7) { ASN_DEBUG("Too large padding %d in open type", padding); rv.code = RC_FAIL; UPDRESTOREPD; return rv; } padding = 8 - padding; ASN_DEBUG("Getting padding of %d bits", padding); pvalue = per_get_few_bits(pd, padding); switch(pvalue) { case -1: ASN_DEBUG("Padding skip failed"); UPDRESTOREPD; _ASN_DECODE_STARVED; case 0: break; default: ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", padding, (int)pvalue); UPDRESTOREPD; _ASN_DECODE_FAILED; } } if(pd->nboff != pd->nbits) { ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, per_data_string(pd), per_data_string(&arg.oldpd)); if(1) { UPDRESTOREPD; _ASN_DECODE_FAILED; } else { arg.unclaimed += pd->nbits - pd->nboff; } } /* Adjust pd back so it points to original data */ UPDRESTOREPD; /* Skip data not consumed by the decoder */ if(arg.unclaimed) ASN_DEBUG("Getting unclaimed %d", arg.unclaimed); if(arg.unclaimed) { switch(per_skip_bits(pd, arg.unclaimed)) { case -1: ASN_DEBUG("Claim of %d failed", arg.unclaimed); _ASN_DECODE_STARVED; case 0: ASN_DEBUG("Got claim of %d", arg.unclaimed); break; default: /* Padding must be blank */ ASN_DEBUG("Non-blank unconsumed padding"); _ASN_DECODE_FAILED; } arg.unclaimed = 0; } if(arg.repeat) { ASN_DEBUG("Not consumed the whole thing"); rv.code = RC_FAIL; return rv; } return rv; } asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); } int uper_open_type_skip(asn_codec_ctx_t *ctx, asn_per_data_t *pd) { asn_TYPE_descriptor_t s_td; asn_dec_rval_t rv; s_td.name = ""; s_td.uper_decoder = uper_sot_suck; rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); if(rv.code != RC_OK) return -1; else return 0; } /* * Internal functions. */ static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; (void)ctx; (void)td; (void)constraints; (void)sptr; while(per_get_few_bits(pd, 24) >= 0); rv.code = RC_OK; rv.consumed = pd->moved; return rv; } static int uper_ugot_refill(asn_per_data_t *pd) { uper_ugot_key *arg = pd->refill_key; ssize_t next_chunk_bytes, next_chunk_bits; ssize_t avail; asn_per_data_t *oldpd = &arg->oldpd; ASN_DEBUG("REFILLING pd->moved=%d, oldpd->moved=%d", pd->moved, oldpd->moved); /* Advance our position to where pd is */ oldpd->buffer = pd->buffer; oldpd->nboff = pd->nboff; oldpd->nbits -= pd->moved - arg->ot_moved; oldpd->moved += pd->moved - arg->ot_moved; arg->ot_moved = pd->moved; if(arg->unclaimed) { /* Refill the container */ if(per_get_few_bits(oldpd, 1)) return -1; if(oldpd->nboff == 0) { assert(0); return -1; } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff - 1; pd->nbits = oldpd->nbits; ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%d)", pd->moved); return 0; } if(!arg->repeat) { ASN_DEBUG("Want more but refill doesn't have it"); return -1; } next_chunk_bytes = uper_get_length(oldpd, -1, &arg->repeat); ASN_DEBUG("Open type LENGTH %d bytes at off %d, repeat %d", next_chunk_bytes, oldpd->moved, arg->repeat); if(next_chunk_bytes < 0) return -1; if(next_chunk_bytes == 0) { pd->refill = 0; /* No more refills, naturally */ assert(!arg->repeat); /* Implementation guarantee */ } next_chunk_bits = next_chunk_bytes << 3; avail = oldpd->nbits - oldpd->nboff; if(avail >= next_chunk_bits) { pd->nbits = oldpd->nboff + next_chunk_bits; arg->unclaimed = 0; ASN_DEBUG("!+Parent frame %d bits, alloting %d [%d..%d] (%d)", next_chunk_bits, oldpd->moved, oldpd->nboff, oldpd->nbits, oldpd->nbits - oldpd->nboff); } else { pd->nbits = oldpd->nbits; arg->unclaimed = next_chunk_bits - avail; ASN_DEBUG("!-Parent frame %d, require %d, will claim %d", avail, next_chunk_bits, arg->unclaimed); } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff; ASN_DEBUG("Refilled pd%s old%s", per_data_string(pd), per_data_string(oldpd)); return 0; } static int per_skip_bits(asn_per_data_t *pd, int skip_nbits) { int hasNonZeroBits = 0; while(skip_nbits > 0) { int skip; if(skip_nbits < skip) skip = skip_nbits; else skip = 24; skip_nbits -= skip; switch(per_get_few_bits(pd, skip)) { case -1: return -1; /* Starving */ case 0: continue; /* Skipped empty space */ default: hasNonZeroBits = 1; continue; } } return hasNonZeroBits; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/QoP.c0000644000175000017500000001251212576764164020644 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "QoP.h" static int memb_horacc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_veracc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_maxLocAge_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_delay_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_horacc_constr_2 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_veracc_constr_3 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_maxLocAge_constr_4 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_delay_constr_5 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_QoP_1[] = { { ATF_NOFLAGS, 0, offsetof(struct QoP, horacc), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_horacc_constraint_1, &asn_PER_memb_horacc_constr_2, 0, "horacc" }, { ATF_POINTER, 3, offsetof(struct QoP, veracc), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_veracc_constraint_1, &asn_PER_memb_veracc_constr_3, 0, "veracc" }, { ATF_POINTER, 2, offsetof(struct QoP, maxLocAge), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_maxLocAge_constraint_1, &asn_PER_memb_maxLocAge_constr_4, 0, "maxLocAge" }, { ATF_POINTER, 1, offsetof(struct QoP, delay), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_delay_constraint_1, &asn_PER_memb_delay_constr_5, 0, "delay" }, }; static int asn_MAP_QoP_oms_1[] = { 1, 2, 3 }; static ber_tlv_tag_t asn_DEF_QoP_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_QoP_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* horacc at 219 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* veracc at 220 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* maxLocAge at 221 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* delay at 222 */ }; static asn_SEQUENCE_specifics_t asn_SPC_QoP_specs_1 = { sizeof(struct QoP), offsetof(struct QoP, _asn_ctx), asn_MAP_QoP_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_QoP_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 3, /* Start extensions */ 5 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_QoP = { "QoP", "QoP", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_QoP_tags_1, sizeof(asn_DEF_QoP_tags_1) /sizeof(asn_DEF_QoP_tags_1[0]), /* 1 */ asn_DEF_QoP_tags_1, /* Same as above */ sizeof(asn_DEF_QoP_tags_1) /sizeof(asn_DEF_QoP_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_QoP_1, 4, /* Elements count */ &asn_SPC_QoP_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellMeasuredResults.c0000644000175000017500000002506312576764164024101 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CellMeasuredResults.h" static int memb_cellIdentity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 268435455)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_type_modeSpecificInfo_constr_3 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_cellIdentity_constr_2 = { { APC_CONSTRAINED, 28, -1, 0, 268435455 } /* (0..268435455) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_fdd_4[] = { { ATF_NOFLAGS, 0, offsetof(struct fdd, primaryCPICH_Info), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PrimaryCPICH_Info, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "primaryCPICH-Info" }, { ATF_POINTER, 3, offsetof(struct fdd, cpich_Ec_N0), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CPICH_Ec_N0, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "cpich-Ec-N0" }, { ATF_POINTER, 2, offsetof(struct fdd, cpich_RSCP), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CPICH_RSCP, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "cpich-RSCP" }, { ATF_POINTER, 1, offsetof(struct fdd, pathloss), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Pathloss, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "pathloss" }, }; static int asn_MAP_fdd_oms_4[] = { 1, 2, 3 }; static ber_tlv_tag_t asn_DEF_fdd_tags_4[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_fdd_tag2el_4[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* primaryCPICH-Info at 163 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cpich-Ec-N0 at 164 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cpich-RSCP at 165 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pathloss at 166 */ }; static asn_SEQUENCE_specifics_t asn_SPC_fdd_specs_4 = { sizeof(struct fdd), offsetof(struct fdd, _asn_ctx), asn_MAP_fdd_tag2el_4, 4, /* Count of tags in the map */ asn_MAP_fdd_oms_4, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_fdd_4 = { "fdd", "fdd", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_fdd_tags_4, sizeof(asn_DEF_fdd_tags_4) /sizeof(asn_DEF_fdd_tags_4[0]) - 1, /* 1 */ asn_DEF_fdd_tags_4, /* Same as above */ sizeof(asn_DEF_fdd_tags_4) /sizeof(asn_DEF_fdd_tags_4[0]), /* 2 */ 0, /* No PER visible constraints */ asn_MBR_fdd_4, 4, /* Elements count */ &asn_SPC_fdd_specs_4 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_tdd_9[] = { { ATF_NOFLAGS, 0, offsetof(struct tdd, cellParametersID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellParametersID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "cellParametersID" }, { ATF_POINTER, 4, offsetof(struct tdd, proposedTGSN), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TGSN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "proposedTGSN" }, { ATF_POINTER, 3, offsetof(struct tdd, primaryCCPCH_RSCP), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PrimaryCCPCH_RSCP, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "primaryCCPCH-RSCP" }, { ATF_POINTER, 2, offsetof(struct tdd, pathloss), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Pathloss, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "pathloss" }, { ATF_POINTER, 1, offsetof(struct tdd, timeslotISCP_List), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeslotISCP_List, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeslotISCP-List" }, }; static int asn_MAP_tdd_oms_9[] = { 1, 2, 3, 4 }; static ber_tlv_tag_t asn_DEF_tdd_tags_9[] = { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_tdd_tag2el_9[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellParametersID at 168 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* proposedTGSN at 169 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* primaryCCPCH-RSCP at 170 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pathloss at 171 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* timeslotISCP-List at 172 */ }; static asn_SEQUENCE_specifics_t asn_SPC_tdd_specs_9 = { sizeof(struct tdd), offsetof(struct tdd, _asn_ctx), asn_MAP_tdd_tag2el_9, 5, /* Count of tags in the map */ asn_MAP_tdd_oms_9, /* Optional members */ 4, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_tdd_9 = { "tdd", "tdd", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_tdd_tags_9, sizeof(asn_DEF_tdd_tags_9) /sizeof(asn_DEF_tdd_tags_9[0]) - 1, /* 1 */ asn_DEF_tdd_tags_9, /* Same as above */ sizeof(asn_DEF_tdd_tags_9) /sizeof(asn_DEF_tdd_tags_9[0]), /* 2 */ 0, /* No PER visible constraints */ asn_MBR_tdd_9, 5, /* Elements count */ &asn_SPC_tdd_specs_9 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_modeSpecificInfo_3[] = { { ATF_NOFLAGS, 0, offsetof(struct modeSpecificInfo, choice.fdd), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, &asn_DEF_fdd_4, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fdd" }, { ATF_NOFLAGS, 0, offsetof(struct modeSpecificInfo, choice.tdd), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, &asn_DEF_tdd_9, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tdd" }, }; static asn_TYPE_tag2member_t asn_MAP_modeSpecificInfo_tag2el_3[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd at 163 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd at 168 */ }; static asn_CHOICE_specifics_t asn_SPC_modeSpecificInfo_specs_3 = { sizeof(struct modeSpecificInfo), offsetof(struct modeSpecificInfo, _asn_ctx), offsetof(struct modeSpecificInfo, present), sizeof(((struct modeSpecificInfo *)0)->present), asn_MAP_modeSpecificInfo_tag2el_3, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_modeSpecificInfo_3 = { "modeSpecificInfo", "modeSpecificInfo", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_modeSpecificInfo_constr_3, asn_MBR_modeSpecificInfo_3, 2, /* Elements count */ &asn_SPC_modeSpecificInfo_specs_3 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_CellMeasuredResults_1[] = { { ATF_POINTER, 1, offsetof(struct CellMeasuredResults, cellIdentity), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_cellIdentity_constraint_1, &asn_PER_memb_cellIdentity_constr_2, 0, "cellIdentity" }, { ATF_NOFLAGS, 0, offsetof(struct CellMeasuredResults, modeSpecificInfo), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_modeSpecificInfo_3, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "modeSpecificInfo" }, }; static int asn_MAP_CellMeasuredResults_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_CellMeasuredResults_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_CellMeasuredResults_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdentity at 160 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* modeSpecificInfo at 166 */ }; static asn_SEQUENCE_specifics_t asn_SPC_CellMeasuredResults_specs_1 = { sizeof(struct CellMeasuredResults), offsetof(struct CellMeasuredResults, _asn_ctx), asn_MAP_CellMeasuredResults_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_CellMeasuredResults_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_CellMeasuredResults = { "CellMeasuredResults", "CellMeasuredResults", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CellMeasuredResults_tags_1, sizeof(asn_DEF_CellMeasuredResults_tags_1) /sizeof(asn_DEF_CellMeasuredResults_tags_1[0]), /* 1 */ asn_DEF_CellMeasuredResults_tags_1, /* Same as above */ sizeof(asn_DEF_CellMeasuredResults_tags_1) /sizeof(asn_DEF_CellMeasuredResults_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_CellMeasuredResults_1, 2, /* Elements count */ &asn_SPC_CellMeasuredResults_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_SEQUENCE_OF.c0000644000175000017500000000156012576764164022603 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include typedef A_SEQUENCE_OF(void) asn_sequence; void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { asn_sequence *as = (asn_sequence *)asn_sequence_of_x; if(as) { void *ptr; int n; if(number < 0 || number >= as->count) return; /* Nothing to delete */ if(_do_free && as->free) { ptr = as->array[number]; } else { ptr = 0; } /* * Shift all elements to the left to hide the gap. */ --as->count; for(n = number; n < as->count; n++) as->array[n] = as->array[n+1]; /* * Invoke the third-party function only when the state * of the parent structure is consistent. */ if(ptr) as->free(ptr); } } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SessionID.c0000644000175000017500000000415712576764164022013 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "SessionID.h" static asn_TYPE_member_t asn_MBR_SessionID_1[] = { { ATF_POINTER, 2, offsetof(struct SessionID, setSessionID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SetSessionID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "setSessionID" }, { ATF_POINTER, 1, offsetof(struct SessionID, slpSessionID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SlpSessionID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "slpSessionID" }, }; static int asn_MAP_SessionID_oms_1[] = { 0, 1 }; static ber_tlv_tag_t asn_DEF_SessionID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SessionID_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* setSessionID at 15 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* slpSessionID at 16 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SessionID_specs_1 = { sizeof(struct SessionID), offsetof(struct SessionID, _asn_ctx), asn_MAP_SessionID_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_SessionID_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SessionID = { "SessionID", "SessionID", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SessionID_tags_1, sizeof(asn_DEF_SessionID_tags_1) /sizeof(asn_DEF_SessionID_tags_1[0]), /* 1 */ asn_DEF_SessionID_tags_1, /* Same as above */ sizeof(asn_DEF_SessionID_tags_1) /sizeof(asn_DEF_SessionID_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SessionID_1, 2, /* Elements count */ &asn_SPC_SessionID_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/xer_support.c0000644000175000017500000001265512576764164022547 0ustar carlescarles/* * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include /* Parser states */ typedef enum { ST_TEXT, ST_TAG_START, ST_TAG_BODY, ST_TAG_QUOTE_WAIT, ST_TAG_QUOTED_STRING, ST_TAG_UNQUOTED_STRING, ST_COMMENT_WAIT_DASH1, /* ""[0] */ ST_COMMENT_CLO_RT /* "-->"[1] */ } pstate_e; static pxml_chunk_type_e final_chunk_type[] = { PXML_TEXT, PXML_TAG_END, PXML_COMMENT_END, PXML_TAG_END, PXML_COMMENT_END, }; static int _charclass[256] = { 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ }; #define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) #define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) #define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) /* Aliases for characters, ASCII/UTF-8 */ #define EXCLAM 0x21 /* '!' */ #define CQUOTE 0x22 /* '"' */ #define CDASH 0x2d /* '-' */ #define CSLASH 0x2f /* '/' */ #define LANGLE 0x3c /* '<' */ #define CEQUAL 0x3d /* '=' */ #define RANGLE 0x3e /* '>' */ #define CQUEST 0x3f /* '?' */ /* Invoke token callback */ #define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ int _ret; \ pstate_e ns = _ns; \ ssize_t _sz = (p - chunk_start) + _current_too; \ if (!_sz) { \ /* Shortcut */ \ state = _ns; \ break; \ } \ _ret = cb(type, chunk_start, _sz, key); \ if(_ret < _sz) { \ if(_current_too && _ret == -1) \ state = ns; \ goto finish; \ } \ chunk_start = p + _current_too; \ state = ns; \ } while(0) #define TOKEN_CB(_type, _ns, _current_too) \ TOKEN_CB_CALL(_type, _ns, _current_too, 0) #define TOKEN_CB_FINAL(_type, _ns, _current_too) \ TOKEN_CB_CALL(final_chunk_type[_type], _ns, _current_too, 1) /* * Parser itself */ ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { pstate_e state = (pstate_e)*stateContext; const char *chunk_start = (const char *)xmlbuf; const char *p = chunk_start; const char *end = p + size; for(; p < end; p++) { int C = *(const unsigned char *)p; switch(state) { case ST_TEXT: /* * Initial state: we're in the middle of some text, * or just have started. */ if (C == LANGLE) /* We're now in the tag, probably */ TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); break; case ST_TAG_START: if (ALPHA(C) || (C == CSLASH)) state = ST_TAG_BODY; else if (C == EXCLAM) state = ST_COMMENT_WAIT_DASH1; else /* * Not characters and not whitespace. * Must be something like "3 < 4". */ TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ break; case ST_TAG_BODY: switch(C) { case RANGLE: /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); break; case LANGLE: /* * The previous tag wasn't completed, but still * recognized as valid. (Mozilla-compatible) */ TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); break; case CEQUAL: state = ST_TAG_QUOTE_WAIT; break; } break; case ST_TAG_QUOTE_WAIT: /* * State after the equal sign ("=") in the tag. */ switch(C) { case CQUOTE: state = ST_TAG_QUOTED_STRING; break; case RANGLE: /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); break; default: if(!WHITESPACE(C)) /* Unquoted string value */ state = ST_TAG_UNQUOTED_STRING; } break; case ST_TAG_QUOTED_STRING: /* * Tag attribute's string value in quotes. */ if(C == CQUOTE) { /* Return back to the tag state */ state = ST_TAG_BODY; } break; case ST_TAG_UNQUOTED_STRING: if(C == RANGLE) { /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); } else if(WHITESPACE(C)) { /* Return back to the tag state */ state = ST_TAG_BODY; } break; case ST_COMMENT_WAIT_DASH1: if(C == CDASH) { state = ST_COMMENT_WAIT_DASH2; } else { /* Some ordinary tag. */ state = ST_TAG_BODY; } break; case ST_COMMENT_WAIT_DASH2: if(C == CDASH) { /* Seen "<--" */ state = ST_COMMENT; } else { /* Some ordinary tag */ state = ST_TAG_BODY; } break; case ST_COMMENT: if(C == CDASH) { state = ST_COMMENT_CLO_DASH2; } break; case ST_COMMENT_CLO_DASH2: if(C == CDASH) { state = ST_COMMENT_CLO_RT; } else { /* This is not an end of a comment */ state = ST_COMMENT; } break; case ST_COMMENT_CLO_RT: if(C == RANGLE) { TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); } else if(C == CDASH) { /* Maintain current state, still waiting for '>' */ } else { state = ST_COMMENT; } break; } /* switch(*ptr) */ } /* for() */ /* * Flush the partially processed chunk, state permitting. */ if(p - chunk_start) { switch (state) { case ST_COMMENT: TOKEN_CB(PXML_COMMENT, state, 0); break; case ST_TEXT: TOKEN_CB(PXML_TEXT, state, 0); break; default: break; /* a no-op */ } } finish: *stateContext = (int)state; return chunk_start - (const char *)xmlbuf; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellMeasuredResultsList.c0000644000175000017500000000350512576764164024732 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CellMeasuredResultsList.h" static asn_per_constraints_t asn_PER_type_CellMeasuredResultsList_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_CellMeasuredResultsList_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_CellMeasuredResults, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_CellMeasuredResultsList_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_CellMeasuredResultsList_specs_1 = { sizeof(struct CellMeasuredResultsList), offsetof(struct CellMeasuredResultsList, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_CellMeasuredResultsList = { "CellMeasuredResultsList", "CellMeasuredResultsList", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CellMeasuredResultsList_tags_1, sizeof(asn_DEF_CellMeasuredResultsList_tags_1) /sizeof(asn_DEF_CellMeasuredResultsList_tags_1[0]), /* 1 */ asn_DEF_CellMeasuredResultsList_tags_1, /* Same as above */ sizeof(asn_DEF_CellMeasuredResultsList_tags_1) /sizeof(asn_DEF_CellMeasuredResultsList_tags_1[0]), /* 1 */ &asn_PER_type_CellMeasuredResultsList_constr_1, asn_MBR_CellMeasuredResultsList_1, 1, /* Single element */ &asn_SPC_CellMeasuredResultsList_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLINIT.c0000644000175000017500000000740512576764164021421 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "SUPLINIT.h" static asn_TYPE_member_t asn_MBR_SUPLINIT_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SUPLINIT, posMethod), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PosMethod, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posMethod" }, { ATF_POINTER, 3, offsetof(struct SUPLINIT, notification), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Notification, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "notification" }, { ATF_POINTER, 2, offsetof(struct SUPLINIT, sLPAddress), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_SLPAddress, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sLPAddress" }, { ATF_POINTER, 1, offsetof(struct SUPLINIT, qoP), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_QoP, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "qoP" }, { ATF_NOFLAGS, 0, offsetof(struct SUPLINIT, sLPMode), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SLPMode, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sLPMode" }, { ATF_POINTER, 2, offsetof(struct SUPLINIT, mAC), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MAC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "mAC" }, { ATF_POINTER, 1, offsetof(struct SUPLINIT, keyIdentity), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_KeyIdentity, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "keyIdentity" }, }; static int asn_MAP_SUPLINIT_oms_1[] = { 1, 2, 3, 5, 6 }; static ber_tlv_tag_t asn_DEF_SUPLINIT_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SUPLINIT_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* posMethod at 10 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* notification at 11 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sLPAddress at 12 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* qoP at 13 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sLPMode at 14 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* mAC at 15 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* keyIdentity at 16 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SUPLINIT_specs_1 = { sizeof(struct SUPLINIT), offsetof(struct SUPLINIT, _asn_ctx), asn_MAP_SUPLINIT_tag2el_1, 7, /* Count of tags in the map */ asn_MAP_SUPLINIT_oms_1, /* Optional members */ 5, 0, /* Root/Additions */ 6, /* Start extensions */ 8 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SUPLINIT = { "SUPLINIT", "SUPLINIT", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SUPLINIT_tags_1, sizeof(asn_DEF_SUPLINIT_tags_1) /sizeof(asn_DEF_SUPLINIT_tags_1[0]), /* 1 */ asn_DEF_SUPLINIT_tags_1, /* Same as above */ sizeof(asn_DEF_SUPLINIT_tags_1) /sizeof(asn_DEF_SUPLINIT_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SUPLINIT_1, 7, /* Elements count */ &asn_SPC_SUPLINIT_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-Ec-N0.c0000644000175000017500000001114112576764164021570 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CPICH-Ec-N0.h" int CPICH_Ec_N0_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void CPICH_Ec_N0_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void CPICH_Ec_N0_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int CPICH_Ec_N0_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t CPICH_Ec_N0_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t CPICH_Ec_N0_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t CPICH_Ec_N0_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t CPICH_Ec_N0_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t CPICH_Ec_N0_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t CPICH_Ec_N0_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { CPICH_Ec_N0_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_CPICH_Ec_N0_constr_1 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_CPICH_Ec_N0_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_CPICH_Ec_N0 = { "CPICH-Ec-N0", "CPICH-Ec-N0", CPICH_Ec_N0_free, CPICH_Ec_N0_print, CPICH_Ec_N0_constraint, CPICH_Ec_N0_decode_ber, CPICH_Ec_N0_encode_der, CPICH_Ec_N0_decode_xer, CPICH_Ec_N0_encode_xer, CPICH_Ec_N0_decode_uper, CPICH_Ec_N0_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CPICH_Ec_N0_tags_1, sizeof(asn_DEF_CPICH_Ec_N0_tags_1) /sizeof(asn_DEF_CPICH_Ec_N0_tags_1[0]), /* 1 */ asn_DEF_CPICH_Ec_N0_tags_1, /* Same as above */ sizeof(asn_DEF_CPICH_Ec_N0_tags_1) /sizeof(asn_DEF_CPICH_Ec_N0_tags_1[0]), /* 1 */ &asn_PER_type_CPICH_Ec_N0_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horveluncert.c0000644000175000017500000001153712576764164022633 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Horveluncert.h" static int memb_bearing_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 9)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_horspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_uncertspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_bearing_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 9, 9 } /* (SIZE(9..9)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_horspeed_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_uncertspeed_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Horveluncert_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Horveluncert, bearing), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_bearing_constraint_1, &asn_PER_memb_bearing_constr_2, 0, "bearing" }, { ATF_NOFLAGS, 0, offsetof(struct Horveluncert, horspeed), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_horspeed_constraint_1, &asn_PER_memb_horspeed_constr_3, 0, "horspeed" }, { ATF_NOFLAGS, 0, offsetof(struct Horveluncert, uncertspeed), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_uncertspeed_constraint_1, &asn_PER_memb_uncertspeed_constr_4, 0, "uncertspeed" }, }; static ber_tlv_tag_t asn_DEF_Horveluncert_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Horveluncert_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bearing at 245 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* horspeed at 246 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* uncertspeed at 247 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Horveluncert_specs_1 = { sizeof(struct Horveluncert), offsetof(struct Horveluncert, _asn_ctx), asn_MAP_Horveluncert_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Horveluncert = { "Horveluncert", "Horveluncert", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Horveluncert_tags_1, sizeof(asn_DEF_Horveluncert_tags_1) /sizeof(asn_DEF_Horveluncert_tags_1[0]), /* 1 */ asn_DEF_Horveluncert_tags_1, /* Same as above */ sizeof(asn_DEF_Horveluncert_tags_1) /sizeof(asn_DEF_Horveluncert_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Horveluncert_1, 3, /* Elements count */ &asn_SPC_Horveluncert_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTCTime.c0000644000175000017500000001066112576764164021422 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include #ifdef __CYGWIN__ #include "/usr/include/time.h" #else #include #endif /* __CYGWIN__ */ #ifndef __ASN_INTERNAL_TEST_MODE__ /* * UTCTime basic type description. */ static ber_tlv_tag_t asn_DEF_UTCTime_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (23 << 2)), /* [UNIVERSAL 23] IMPLICIT ...*/ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ }; static asn_per_constraints_t asn_DEF_UTCTime_constraints = { { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ 0, 0 }; asn_TYPE_descriptor_t asn_DEF_UTCTime = { "UTCTime", "UTCTime", OCTET_STRING_free, UTCTime_print, UTCTime_constraint, OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ OCTET_STRING_decode_xer_utf8, UTCTime_encode_xer, OCTET_STRING_decode_uper, OCTET_STRING_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UTCTime_tags, sizeof(asn_DEF_UTCTime_tags) / sizeof(asn_DEF_UTCTime_tags[0]) - 2, asn_DEF_UTCTime_tags, sizeof(asn_DEF_UTCTime_tags) / sizeof(asn_DEF_UTCTime_tags[0]), &asn_DEF_UTCTime_constraints, 0, 0, /* No members */ 0 /* No specifics */ }; #endif /* __ASN_INTERNAL_TEST_MODE__ */ /* * Check that the time looks like the time. */ int UTCTime_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const UTCTime_t *st = (const UTCTime_t *)sptr; time_t tloc; errno = EPERM; /* Just an unlikely error code */ tloc = asn_UT2time(st, 0, 0); if(tloc == -1 && errno != EPERM) { _ASN_CTFAIL(app_key, td, sptr, "%s: Invalid time format: %s (%s:%d)", td->name, strerror(errno), __FILE__, __LINE__); return -1; } return 0; } #ifndef __ASN_INTERNAL_TEST_MODE__ asn_enc_rval_t UTCTime_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { if(flags & XER_F_CANONICAL) { asn_enc_rval_t rv; UTCTime_t *ut; struct tm tm; errno = EPERM; if(asn_UT2time((UTCTime_t *)sptr, &tm, 1) == -1 && errno != EPERM) _ASN_ENCODE_FAILED; /* Fractions are not allowed in UTCTime */ ut = asn_time2GT(0, 0, 1); if(!ut) _ASN_ENCODE_FAILED; rv = OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, cb, app_key); OCTET_STRING_free(&asn_DEF_UTCTime, ut, 0); return rv; } else { return OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, cb, app_key); } } #endif /* __ASN_INTERNAL_TEST_MODE__ */ int UTCTime_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const UTCTime_t *st = (const UTCTime_t *)sptr; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st && st->buf) { char buf[32]; struct tm tm; int ret; errno = EPERM; if(asn_UT2time(st, &tm, 1) == -1 && errno != EPERM) return (cb("", 11, app_key) < 0) ? -1 : 0; ret = snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d (GMT)", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); assert(ret > 0 && ret < (int)sizeof(buf)); return (cb(buf, ret, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } time_t asn_UT2time(const UTCTime_t *st, struct tm *_tm, int as_gmt) { char buf[24]; /* "AAMMJJhhmmss+hhmm" + cushion */ GeneralizedTime_t gt; if(!st || !st->buf || st->size < 11 || st->size >= ((int)sizeof(buf) - 2)) { errno = EINVAL; return -1; } gt.buf = (unsigned char *)buf; gt.size = st->size + 2; memcpy(gt.buf + 2, st->buf, st->size); if(st->buf[0] > 0x35) { /* 19xx */ gt.buf[0] = 0x31; gt.buf[1] = 0x39; } else { /* 20xx */ gt.buf[0] = 0x32; gt.buf[1] = 0x30; } return asn_GT2time(>, _tm, as_gmt); } UTCTime_t * asn_time2UT(UTCTime_t *opt_ut, const struct tm *tm, int force_gmt) { GeneralizedTime_t *gt = (GeneralizedTime_t *)opt_ut; gt = asn_time2GT(gt, tm, force_gmt); if(gt == 0) return 0; assert(gt->size >= 2); gt->size -= 2; memmove(gt->buf, gt->buf + 2, gt->size + 1); return (UTCTime_t *)gt; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SatelliteInfo.h0000644000175000017500000000151512576764164022715 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #ifndef _SatelliteInfo_H_ #define _SatelliteInfo_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SatelliteInfoElement; /* SatelliteInfo */ typedef struct SatelliteInfo { A_SEQUENCE_OF(struct SatelliteInfoElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SatelliteInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SatelliteInfo; #ifdef __cplusplus } #endif /* Referred external types */ #include "SatelliteInfoElement.h" #endif /* _SatelliteInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/DUMMY.c0000644000175000017500000000757712576764164021057 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP" * found in "../supl-ulp.asn" */ #include "DUMMY.h" int DUMMY_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_INTEGER.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using INTEGER, * so here we adjust the DEF accordingly. */ static void DUMMY_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_INTEGER.free_struct; td->print_struct = asn_DEF_INTEGER.print_struct; td->ber_decoder = asn_DEF_INTEGER.ber_decoder; td->der_encoder = asn_DEF_INTEGER.der_encoder; td->xer_decoder = asn_DEF_INTEGER.xer_decoder; td->xer_encoder = asn_DEF_INTEGER.xer_encoder; td->uper_decoder = asn_DEF_INTEGER.uper_decoder; td->uper_encoder = asn_DEF_INTEGER.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_INTEGER.per_constraints; td->elements = asn_DEF_INTEGER.elements; td->elements_count = asn_DEF_INTEGER.elements_count; td->specifics = asn_DEF_INTEGER.specifics; } void DUMMY_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { DUMMY_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int DUMMY_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { DUMMY_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t DUMMY_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { DUMMY_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t DUMMY_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { DUMMY_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t DUMMY_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { DUMMY_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t DUMMY_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { DUMMY_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t DUMMY_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { DUMMY_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t DUMMY_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { DUMMY_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static ber_tlv_tag_t asn_DEF_DUMMY_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_DUMMY = { "DUMMY", "DUMMY", DUMMY_free, DUMMY_print, DUMMY_constraint, DUMMY_decode_ber, DUMMY_encode_der, DUMMY_decode_xer, DUMMY_encode_xer, DUMMY_decode_uper, DUMMY_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_DUMMY_tags_1, sizeof(asn_DEF_DUMMY_tags_1) /sizeof(asn_DEF_DUMMY_tags_1[0]), /* 1 */ asn_DEF_DUMMY_tags_1, /* Same as above */ sizeof(asn_DEF_DUMMY_tags_1) /sizeof(asn_DEF_DUMMY_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Version.c0000644000175000017500000001043712576764164021576 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Version.h" static int memb_maj_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_min_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_servind_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_maj_constr_2 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_min_constr_3 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_servind_constr_4 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Version_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Version, maj), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_maj_constraint_1, &asn_PER_memb_maj_constr_2, 0, "maj" }, { ATF_NOFLAGS, 0, offsetof(struct Version, min), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_min_constraint_1, &asn_PER_memb_min_constr_3, 0, "min" }, { ATF_NOFLAGS, 0, offsetof(struct Version, servind), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_servind_constraint_1, &asn_PER_memb_servind_constr_4, 0, "servind" }, }; static ber_tlv_tag_t asn_DEF_Version_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Version_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* maj at 10 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* min at 11 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* servind at 12 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Version_specs_1 = { sizeof(struct Version), offsetof(struct Version, _asn_ctx), asn_MAP_Version_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Version = { "Version", "Version", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Version_tags_1, sizeof(asn_DEF_Version_tags_1) /sizeof(asn_DEF_Version_tags_1[0]), /* 1 */ asn_DEF_Version_tags_1, /* Same as above */ sizeof(asn_DEF_Version_tags_1) /sizeof(asn_DEF_Version_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Version_1, 3, /* Elements count */ &asn_SPC_Version_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLEND.h0000644000175000017500000000162312576764164021265 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-END" * found in "../supl-end.asn" */ #ifndef _SUPLEND_H_ #define _SUPLEND_H_ #include /* Including external dependencies */ #include "StatusCode.h" #include "Ver.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Position; /* SUPLEND */ typedef struct SUPLEND { struct Position *position /* OPTIONAL */; StatusCode_t *statusCode /* OPTIONAL */; Ver_t *ver /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SUPLEND_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SUPLEND; #ifdef __cplusplus } #endif /* Referred external types */ #include "Position.h" #endif /* _SUPLEND_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UARFCN.c0000644000175000017500000001064412576764164021127 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "UARFCN.h" int UARFCN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 16383)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void UARFCN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void UARFCN_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { UARFCN_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int UARFCN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { UARFCN_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t UARFCN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { UARFCN_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t UARFCN_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { UARFCN_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t UARFCN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { UARFCN_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t UARFCN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { UARFCN_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t UARFCN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { UARFCN_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t UARFCN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { UARFCN_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_UARFCN_constr_1 = { { APC_CONSTRAINED, 14, 14, 0, 16383 } /* (0..16383) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_UARFCN_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_UARFCN = { "UARFCN", "UARFCN", UARFCN_free, UARFCN_print, UARFCN_constraint, UARFCN_decode_ber, UARFCN_encode_der, UARFCN_decode_xer, UARFCN_encode_xer, UARFCN_decode_uper, UARFCN_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UARFCN_tags_1, sizeof(asn_DEF_UARFCN_tags_1) /sizeof(asn_DEF_UARFCN_tags_1[0]), /* 1 */ asn_DEF_UARFCN_tags_1, /* Same as above */ sizeof(asn_DEF_UARFCN_tags_1) /sizeof(asn_DEF_UARFCN_tags_1[0]), /* 1 */ &asn_PER_type_UARFCN_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCPICH-Info.h0000644000175000017500000000132612576764164023236 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _PrimaryCPICH_Info_H_ #define _PrimaryCPICH_Info_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* PrimaryCPICH-Info */ typedef struct PrimaryCPICH_Info { long primaryScramblingCode; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PrimaryCPICH_Info_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PrimaryCPICH_Info; #ifdef __cplusplus } #endif #endif /* _PrimaryCPICH_Info_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SET_OF.c0000644000175000017500000005577612576764164022577 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #undef PHASE_OUT #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) #define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * The decoder of the SET OF type. */ asn_dec_rval_t SET_OF_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; /* Single one */ /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ ASN_DEBUG("Decoding %s as SET OF", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, 1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) ctx->left += rval.consumed; /* ?Substracted below! */ ADVANCE(rval.consumed); ASN_DEBUG("Structure consumes %ld bytes, " "buffer %ld", (long)ctx->left, (long)size); NEXT_PHASE(ctx); /* Fall through */ case 1: /* * PHASE 1. * From the place where we've left it previously, * try to decode the next item. */ for(;; ctx->step = 0) { ssize_t tag_len; /* Length of TLV's T */ if(ctx->step & 1) goto microphase2; /* * MICROPHASE 1: Synchronize decoding. */ if(ctx->left == 0) { ASN_DEBUG("End of SET OF %s", td->name); /* * No more things to decode. * Exit out of here. */ PHASE_OUT(ctx); RETURN(RC_OK); } /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Found the terminator of the * indefinite length structure. */ break; } } /* Outmost tag may be unknown and cannot be fetched/compared */ if(elm->tag != (ber_tlv_tag_t)-1) { if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { /* * The new list member of expected type has arrived. */ } else { ASN_DEBUG("Unexpected tag %s fixed SET OF %s", ber_tlv_tag_string(tlv_tag), td->name); ASN_DEBUG("%s SET OF has tag %s", td->name, ber_tlv_tag_string(elm->tag)); RETURN(RC_FAIL); } } /* * MICROPHASE 2: Invoke the member-specific decoder. */ ctx->step |= 1; /* Confirm entering next microphase */ microphase2: /* * Invoke the member fetch routine according to member's type */ rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, &ctx->ptr, ptr, LEFT, 0); ASN_DEBUG("In %s SET OF %s code %d consumed %d", td->name, elm->type->name, rval.code, (int)rval.consumed); switch(rval.code) { case RC_OK: { asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); if(ASN_SET_ADD(list, ctx->ptr) != 0) RETURN(RC_FAIL); else ctx->ptr = 0; } break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } /* Fall through */ case RC_FAIL: /* Fatal error */ ASN_STRUCT_FREE(*elm->type, ctx->ptr); ctx->ptr = 0; RETURN(RC_FAIL); } /* switch(rval) */ ADVANCE(rval.consumed); } /* for(all list members) */ NEXT_PHASE(ctx); case 2: /* * Read in all "end of content" TLVs. */ while(ctx->left < 0) { if(LEFT < 2) { if(LEFT > 0 && ((const char *)ptr)[0] != 0) { /* Unexpected tag */ RETURN(RC_FAIL); } else { RETURN(RC_WMORE); } } if(((const char *)ptr)[0] == 0 && ((const char *)ptr)[1] == 0) { ADVANCE(2); ctx->left++; } else { RETURN(RC_FAIL); } } PHASE_OUT(ctx); } RETURN(RC_OK); } /* * Internally visible buffer holding a single encoded element. */ struct _el_buffer { uint8_t *buf; size_t length; size_t size; }; /* Append bytes to the above structure */ static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; if(el_buf->length + size > el_buf->size) return -1; memcpy(el_buf->buf + el_buf->length, buffer, size); el_buf->length += size; return 0; } static int _el_buf_cmp(const void *ap, const void *bp) { const struct _el_buffer *a = (const struct _el_buffer *)ap; const struct _el_buffer *b = (const struct _el_buffer *)bp; int ret; size_t common_len; if(a->length < b->length) common_len = a->length; else common_len = b->length; ret = memcmp(a->buf, b->buf, common_len); if(ret == 0) { if(a->length < b->length) ret = -1; else if(a->length > b->length) ret = 1; } return ret; } /* * The DER encoder of the SET OF type. */ asn_enc_rval_t SET_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_TYPE_descriptor_t *elm_type = elm->type; der_type_encoder_f *der_encoder = elm_type->der_encoder; asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); size_t computed_size = 0; ssize_t encoding_size = 0; struct _el_buffer *encoded_els; ssize_t eels_count = 0; size_t max_encoded_len = 1; asn_enc_rval_t erval; int ret; int edx; ASN_DEBUG("Estimating size for SET OF %s", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; /* Compute maximum encoding's size */ if(max_encoded_len < (size_t)erval.encoded) max_encoded_len = erval.encoded; } /* * Encode the TLV for the sequence itself. */ encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); if(encoding_size == -1) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } computed_size += encoding_size; if(!cb || list->count == 0) { erval.encoded = computed_size; _ASN_ENCODED_OK(erval); } /* * DER mandates dynamic sorting of the SET OF elements * according to their encodings. Build an array of the * encoded elements. */ encoded_els = (struct _el_buffer *)MALLOC( list->count * sizeof(encoded_els[0])); if(encoded_els == NULL) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } ASN_DEBUG("Encoding members of %s SET OF", td->name); /* * Encode all members. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; struct _el_buffer *encoded_el = &encoded_els[eels_count]; if(!memb_ptr) continue; /* * Prepare space for encoding. */ encoded_el->buf = (uint8_t *)MALLOC(max_encoded_len); if(encoded_el->buf) { encoded_el->length = 0; encoded_el->size = max_encoded_len; } else { for(edx--; edx >= 0; edx--) FREEMEM(encoded_els[edx].buf); FREEMEM(encoded_els); erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } /* * Encode the member into the prepared space. */ erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, _el_addbytes, encoded_el); if(erval.encoded == -1) { for(; edx >= 0; edx--) FREEMEM(encoded_els[edx].buf); FREEMEM(encoded_els); return erval; } encoding_size += erval.encoded; eels_count++; } /* * Sort the encoded elements according to their encoding. */ qsort(encoded_els, eels_count, sizeof(encoded_els[0]), _el_buf_cmp); /* * Report encoded elements to the application. * Dispose of temporary sorted members table. */ ret = 0; for(edx = 0; edx < eels_count; edx++) { struct _el_buffer *encoded_el = &encoded_els[edx]; /* Report encoded chunks to the application */ if(ret == 0 && cb(encoded_el->buf, encoded_el->length, app_key) < 0) ret = -1; FREEMEM(encoded_el->buf); } FREEMEM(encoded_els); if(ret || computed_size != (size_t)encoding_size) { /* * Standard callback failed, or * encoded size is not equal to the computed size. */ erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; } else { erval.encoded = computed_size; } _ASN_ENCODED_OK(erval); } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t SET_OF_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *element = td->elements; const char *elm_tag; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * ... and parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value from a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* Which tag is expected for the downstream */ if(specs->as_XMLValueList) { elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; } else { elm_tag = (*element->name) ? element->name : element->type->xml_tag; } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. */ for(; ctx->phase <= 2;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ /* * Go inside the inner member of a set. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; /* Invoke the inner type decoder, m.b. multiple times */ ASN_DEBUG("XER/SET OF element [%s]", elm_tag); tmprval = element->type->xer_decoder(opt_codec_ctx, element->type, &ctx->ptr, elm_tag, buf_ptr, size); if(tmprval.code == RC_OK) { asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); if(ASN_SET_ADD(list, ctx->ptr) != 0) RETURN(RC_FAIL); ctx->ptr = 0; XER_ADVANCE(tmprval.consumed); } else { XER_ADVANCE(tmprval.consumed); RETURN(tmprval.code); } ctx->phase = 1; /* Back to body processing */ ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); /* Fall through */ } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", tcv, ctx->phase, xml_tag); switch(tcv) { case XCT_CLOSING: if(ctx->phase == 0) break; ctx->phase = 0; /* Fall through */ case XCT_BOTH: if(ctx->phase == 0) { /* No more things to decode */ XER_ADVANCE(ch_size); ctx->phase = 3; /* Phase out */ RETURN(RC_OK); } /* Fall through */ case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); if(ctx->phase == 1) { /* * Process a single possible member. */ ctx->phase = 2; continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag in SET OF"); break; } ctx->phase = 3; /* "Phase out" on hard failure */ RETURN(RC_FAIL); } typedef struct xer_tmp_enc_s { void *buffer; size_t offset; size_t size; } xer_tmp_enc_t; static int SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; if(t->offset + size >= t->size) { size_t newsize = (t->size << 2) + size; void *p = REALLOC(t->buffer, newsize); if(!p) return -1; t->buffer = p; t->size = newsize; } memcpy((char *)t->buffer + t->offset, buffer, size); t->offset += size; return 0; } static int SET_OF_xer_order(const void *aptr, const void *bptr) { const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; size_t minlen = a->offset; int ret; if(b->offset < minlen) minlen = b->offset; /* Well-formed UTF-8 has this nice lexicographical property... */ ret = memcmp(a->buffer, b->buffer, minlen); if(ret != 0) return ret; if(a->offset == b->offset) return 0; if(a->offset == minlen) return -1; return 1; } asn_enc_rval_t SET_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; asn_anonymous_set_ *list = _A_SET_FROM_VOID(sptr); const char *mname = specs->as_XMLValueList ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); size_t mlen = mname ? strlen(mname) : 0; int xcan = (flags & XER_F_CANONICAL); xer_tmp_enc_t *encs = 0; size_t encs_count = 0; void *original_app_key = app_key; asn_app_consume_bytes_f *original_cb = cb; int i; if(!sptr) _ASN_ENCODE_FAILED; if(xcan) { encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); if(!encs) _ASN_ENCODE_FAILED; cb = SET_OF_encode_xer_callback; } er.encoded = 0; for(i = 0; i < list->count; i++) { asn_enc_rval_t tmper; void *memb_ptr = list->array[i]; if(!memb_ptr) continue; if(encs) { memset(&encs[encs_count], 0, sizeof(encs[0])); app_key = &encs[encs_count]; encs_count++; } if(mname) { if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); } if(!xcan && specs->as_XMLValueList == 1) _i_ASN_TEXT_INDENT(1, ilevel + 1); tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + (specs->as_XMLValueList != 2), flags, cb, app_key); if(tmper.encoded == -1) { td = tmper.failed_type; sptr = tmper.structure_ptr; goto cb_failed; } if(tmper.encoded == 0 && specs->as_XMLValueList) { const char *name = elm->type->xml_tag; size_t len = strlen(name); _ASN_CALLBACK3("<", 1, name, len, "/>", 2); } if(mname) { _ASN_CALLBACK3("", 1); er.encoded += 5; } er.encoded += (2 * mlen) + tmper.encoded; } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); if(encs) { xer_tmp_enc_t *enc = encs; xer_tmp_enc_t *end = encs + encs_count; ssize_t control_size = 0; cb = original_cb; app_key = original_app_key; qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); for(; enc < end; enc++) { _ASN_CALLBACK(enc->buffer, enc->offset); FREEMEM(enc->buffer); enc->buffer = 0; control_size += enc->offset; } assert(control_size == er.encoded); } goto cleanup; cb_failed: er.encoded = -1; er.failed_type = td; er.structure_ptr = sptr; cleanup: if(encs) { while(encs_count-- > 0) { if(encs[encs_count].buffer) FREEMEM(encs[encs_count].buffer); } FREEMEM(encs); } _ASN_ENCODED_OK(er); } int SET_OF_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); int ret; int i; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* Dump preamble */ if(cb(td->name, strlen(td->name), app_key) < 0 || cb(" ::= {", 6, app_key) < 0) return -1; for(i = 0; i < list->count; i++) { const void *memb_ptr = list->array[i]; if(!memb_ptr) continue; _i_INDENT(1); ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, cb, app_key); if(ret) return ret; } ilevel--; _i_INDENT(1); return (cb("}", 1, app_key) < 0) ? -1 : 0; } void SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(td && ptr) { asn_SET_OF_specifics_t *specs; asn_TYPE_member_t *elm = td->elements; asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); asn_struct_ctx_t *ctx; /* Decoder context */ int i; /* * Could not use set_of_empty() because of (*free) * incompatibility. */ for(i = 0; i < list->count; i++) { void *memb_ptr = list->array[i]; if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } list->count = 0; /* No meaningful elements left */ asn_set_empty(list); /* Remove (list->array) */ specs = (asn_SET_OF_specifics_t *)td->specifics; ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); if(ctx->ptr) { ASN_STRUCT_FREE(*elm->type, ctx->ptr); ctx->ptr = 0; } if(!contents_only) { FREEMEM(ptr); } } } int SET_OF_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_constr_check_f *constr; const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); int i; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } constr = elm->memb_constraints; if(!constr) constr = elm->type->check_constraints; /* * Iterate over the members of an array. * Validate each in turn, until one fails. */ for(i = 0; i < list->count; i++) { const void *memb_ptr = list->array[i]; int ret; if(!memb_ptr) continue; ret = constr(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; } /* * Cannot inherit it eralier: * need to make sure we get the updated version. */ if(!elm->memb_constraints) elm->memb_constraints = elm->type->check_constraints; return 0; } asn_dec_rval_t SET_OF_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; /* Single one */ void *st = *sptr; asn_anonymous_set_ *list; asn_per_constraint_t *ct; int repeat = 0; ssize_t nelems; if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) _ASN_DECODE_FAILED; /* * Create the target structure if it is not present already. */ if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) _ASN_DECODE_FAILED; } list = _A_SET_FROM_VOID(st); /* Figure out which constraints to use */ if(constraints) ct = &constraints->size; else if(td->per_constraints) ct = &td->per_constraints->size; else ct = 0; if(ct && ct->flags & APC_EXTENSIBLE) { int value = per_get_few_bits(pd, 1); if(value < 0) _ASN_DECODE_STARVED; if(value) ct = 0; /* Not restricted! */ } if(ct && ct->effective_bits >= 0) { /* X.691, #19.5: No length determinant */ nelems = per_get_few_bits(pd, ct->effective_bits); ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", (long)nelems, ct->lower_bound, td->name); if(nelems < 0) _ASN_DECODE_STARVED; nelems += ct->lower_bound; } else { nelems = -1; } do { int i; if(nelems < 0) { nelems = uper_get_length(pd, ct ? ct->effective_bits : -1, &repeat); ASN_DEBUG("Got to decode %d elements (eff %d)", (int)nelems, (int)ct ? ct->effective_bits : -1); if(nelems < 0) _ASN_DECODE_STARVED; } for(i = 0; i < nelems; i++) { void *ptr = 0; ASN_DEBUG("SET OF %s decoding", elm->type->name); rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, &ptr, pd); ASN_DEBUG("%s SET OF %s decoded %d, %p", td->name, elm->type->name, rv.code, ptr); if(rv.code == RC_OK) { if(ASN_SET_ADD(list, ptr) == 0) continue; ASN_DEBUG("Failed to add element into %s", td->name); /* Fall through */ rv.code = RC_FAIL; } else { ASN_DEBUG("Failed decoding %s of %s (SET OF)", elm->type->name, td->name); } if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); return rv; } nelems = -1; /* Allow uper_get_length() */ } while(repeat); ASN_DEBUG("Decoded %s as SET OF", td->name); rv.code = RC_OK; rv.consumed = 0; return rv; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosTechnology.c0000644000175000017500000000746312576764164022753 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #include "PosTechnology.h" static asn_TYPE_member_t asn_MBR_PosTechnology_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, agpsSETassisted), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "agpsSETassisted" }, { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, agpsSETBased), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "agpsSETBased" }, { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, autonomousGPS), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "autonomousGPS" }, { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, aFLT), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "aFLT" }, { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, eCID), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "eCID" }, { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, eOTD), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "eOTD" }, { ATF_NOFLAGS, 0, offsetof(struct PosTechnology, oTDOA), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "oTDOA" }, }; static ber_tlv_tag_t asn_DEF_PosTechnology_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_PosTechnology_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* agpsSETassisted at 22 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* agpsSETBased at 23 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* autonomousGPS at 24 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* aFLT at 25 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* eCID at 26 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* eOTD at 27 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* oTDOA at 28 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PosTechnology_specs_1 = { sizeof(struct PosTechnology), offsetof(struct PosTechnology, _asn_ctx), asn_MAP_PosTechnology_tag2el_1, 7, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 6, /* Start extensions */ 8 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PosTechnology = { "PosTechnology", "PosTechnology", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PosTechnology_tags_1, sizeof(asn_DEF_PosTechnology_tags_1) /sizeof(asn_DEF_PosTechnology_tags_1[0]), /* 1 */ asn_DEF_PosTechnology_tags_1, /* Same as above */ sizeof(asn_DEF_PosTechnology_tags_1) /sizeof(asn_DEF_PosTechnology_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PosTechnology_1, 7, /* Elements count */ &asn_SPC_PosTechnology_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_codecs_prim.c0000644000175000017500000001523112576764164023276 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Decode an always-primitive type. */ asn_dec_rval_t ber_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; asn_dec_rval_t rval; ber_tlv_len_t length; /* * If the structure is not there, allocate it. */ if(st == NULL) { st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); if(st == NULL) _ASN_DECODE_FAILED; *sptr = (void *)st; } ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", td->name, tag_mode); /* * Check tags and extract value length. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("%s length is %d bytes", td->name, (int)length); /* * Make sure we have this length. */ buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } st->size = (int)length; /* The following better be optimized away. */ if(sizeof(st->size) != sizeof(length) && (ber_tlv_len_t)st->size != length) { st->size = 0; _ASN_DECODE_FAILED; } st->buf = (uint8_t *)MALLOC(length + 1); if(!st->buf) { st->size = 0; _ASN_DECODE_FAILED; } memcpy(st->buf, buf_ptr, length); st->buf[length] = '\0'; /* Just in case */ rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s", (long)rval.consumed, (long)length, td->name); return rval; } /* * Encode an always-primitive type using DER. */ asn_enc_rval_t der_encode_primitive(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; ASN_DEBUG("%s %s as a primitive type (tm=%d)", cb?"Encoding":"Estimating", td->name, tag_mode); erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, cb, app_key); ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = sptr; return erval; } if(cb && st->buf) { if(cb(st->buf, st->size, app_key) < 0) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = sptr; return erval; } } else { assert(st->buf || st->size == 0); } erval.encoded += st->size; _ASN_ENCODED_OK(erval); } void ASN__PRIMITIVE_TYPE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; if(!td || !sptr) return; ASN_DEBUG("Freeing %s as a primitive type", td->name); if(st->buf) FREEMEM(st->buf); if(!contents_only) FREEMEM(st); } /* * Local internal type passed around as an argument. */ struct xdp_arg_s { asn_TYPE_descriptor_t *type_descriptor; void *struct_key; xer_primitive_body_decoder_f *prim_body_decoder; int decoded_something; int want_more; }; static int xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; if(arg->decoded_something) { if(xer_is_whitespace(chunk_buf, chunk_size)) return 0; /* Skip it. */ /* * Decoding was done once already. Prohibit doing it again. */ return -1; } bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { case XPBD_SYSTEM_FAILURE: case XPBD_DECODER_LIMIT: case XPBD_BROKEN_ENCODING: break; case XPBD_BODY_CONSUMED: /* Tag decoded successfully */ arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ return 0; } return -1; } static ssize_t xer_decode__body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; if(arg->decoded_something) { if(xer_is_whitespace(chunk_buf, chunk_size)) return chunk_size; /* * Decoding was done once already. Prohibit doing it again. */ return -1; } if(!have_more) { /* * If we've received something like "1", we can't really * tell whether it is really `1` or `123`, until we know * that there is no more data coming. * The have_more argument will be set to 1 once something * like this is available to the caller of this callback: * "1want_more = 1; return -1; } bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { case XPBD_SYSTEM_FAILURE: case XPBD_DECODER_LIMIT: case XPBD_BROKEN_ENCODING: break; case XPBD_BODY_CONSUMED: /* Tag decoded successfully */ arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ return chunk_size; } return -1; } asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, xer_primitive_body_decoder_f *prim_body_decoder ) { const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; asn_struct_ctx_t s_ctx; struct xdp_arg_s s_arg; asn_dec_rval_t rc; /* * Create the structure if does not exist. */ if(!*sptr) { *sptr = CALLOC(1, struct_size); if(!*sptr) _ASN_DECODE_FAILED; } memset(&s_ctx, 0, sizeof(s_ctx)); s_arg.type_descriptor = td; s_arg.struct_key = *sptr; s_arg.prim_body_decoder = prim_body_decoder; s_arg.decoded_something = 0; s_arg.want_more = 0; rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, xml_tag, buf_ptr, size, xer_decode__unexpected_tag, xer_decode__body); switch(rc.code) { case RC_OK: if(!s_arg.decoded_something) { char ch; ASN_DEBUG("Primitive body is not recognized, " "supplying empty one"); /* * Decoding opportunity has come and gone. * Where's the result? * Try to feed with empty body, see if it eats it. */ if(prim_body_decoder(s_arg.type_descriptor, s_arg.struct_key, &ch, 0) != XPBD_BODY_CONSUMED) { /* * This decoder does not like empty stuff. */ _ASN_DECODE_FAILED; } } break; case RC_WMORE: /* * Redo the whole thing later. * We don't have a context to save intermediate parsing state. */ rc.consumed = 0; break; case RC_FAIL: rc.consumed = 0; if(s_arg.want_more) rc.code = RC_WMORE; else _ASN_DECODE_FAILED; break; } return rc; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/EncodingType.h0000644000175000017500000000211212576764164022535 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _EncodingType_H_ #define _EncodingType_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum EncodingType { EncodingType_ucs2 = 0, EncodingType_gsmDefault = 1, EncodingType_utf8 = 2 /* * Enumeration is extensible */ } e_EncodingType; /* EncodingType */ typedef ENUMERATED_t EncodingType_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_EncodingType; asn_struct_free_f EncodingType_free; asn_struct_print_f EncodingType_print; asn_constr_check_f EncodingType_constraint; ber_type_decoder_f EncodingType_decode_ber; der_type_encoder_f EncodingType_encode_der; xer_type_decoder_f EncodingType_decode_xer; xer_type_encoder_f EncodingType_encode_xer; per_type_decoder_f EncodingType_decode_uper; per_type_encoder_f EncodingType_encode_uper; #ifdef __cplusplus } #endif #endif /* _EncodingType_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_SET_OF.c0000644000175000017500000000325212576764164022026 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Add another element into the set. */ int asn_set_add(void *asn_set_of_x, void *ptr) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as == 0 || ptr == 0) { errno = EINVAL; /* Invalid arguments */ return -1; } /* * Make sure there's enough space to insert an element. */ if(as->count == as->size) { int _newsize = as->size ? (as->size << 1) : 4; void *_new_arr; _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); if(_new_arr) { as->array = (void **)_new_arr; as->size = _newsize; } else { /* ENOMEM */ return -1; } } as->array[as->count++] = ptr; return 0; } void asn_set_del(void *asn_set_of_x, int number, int _do_free) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as) { void *ptr; if(number < 0 || number >= as->count) return; if(_do_free && as->free) { ptr = as->array[number]; } else { ptr = 0; } as->array[number] = as->array[--as->count]; /* * Invoke the third-party function only when the state * of the parent structure is consistent. */ if(ptr) as->free(ptr); } } /* * Free the contents of the set, do not free the set itself. */ void asn_set_empty(void *asn_set_of_x) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as) { if(as->array) { if(as->free) { while(as->count--) as->free(as->array[as->count]); } FREEMEM(as->array); as->array = 0; } as->count = 0; as->size = 0; } } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_tlv_length.c0000644000175000017500000000731012576764164023143 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r) { const uint8_t *buf = (const uint8_t *)bufptr; unsigned oct; if(size == 0) return 0; /* Want more */ oct = *(const uint8_t *)buf; if((oct & 0x80) == 0) { /* * Short definite length. */ *len_r = oct; /* & 0x7F */ return 1; } else { ber_tlv_len_t len; size_t skipped; if(_is_constructed && oct == 0x80) { *len_r = -1; /* Indefinite length */ return 1; } if(oct == 0xff) { /* Reserved in standard for future use. */ return -1; } oct &= 0x7F; /* Leave only the 7 LS bits */ for(len = 0, buf++, skipped = 1; oct && (++skipped <= size); buf++, oct--) { len = (len << 8) | *buf; if(len < 0 || (len >> ((8 * sizeof(len)) - 8) && oct > 1)) { /* * Too large length value. */ return -1; } } if(oct == 0) { ber_tlv_len_t lenplusepsilon = (size_t)len + 1024; /* * Here length may be very close or equal to 2G. * However, the arithmetics used in some decoders * may add some (small) quantities to the length, * to check the resulting value against some limits. * This may result in integer wrap-around, which * we try to avoid by checking it earlier here. */ if(lenplusepsilon < 0) { /* Too large length value */ return -1; } *len_r = len; return skipped; } return 0; /* Want more */ } } ssize_t ber_skip_length(asn_codec_ctx_t *opt_codec_ctx, int _is_constructed, const void *ptr, size_t size) { ber_tlv_len_t vlen; /* Length of V in TLV */ ssize_t tl; /* Length of L in TLV */ ssize_t ll; /* Length of L in TLV */ size_t skip; /* * Make sure we didn't exceed the maximum stack size. */ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) return -1; /* * Determine the size of L in TLV. */ ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); if(ll <= 0) return ll; /* * Definite length. */ if(vlen >= 0) { skip = ll + vlen; if(skip > size) return 0; /* Want more */ return skip; } /* * Indefinite length! */ ASN_DEBUG("Skipping indefinite length"); for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { ber_tlv_tag_t tag; /* Fetch the tag */ tl = ber_fetch_tag(ptr, size, &tag); if(tl <= 0) return tl; ll = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), ((const char *)ptr) + tl, size - tl); if(ll <= 0) return ll; skip += tl + ll; /* * This may be the end of the indefinite length structure, * two consecutive 0 octets. * Check if it is true. */ if(((const uint8_t *)ptr)[0] == 0 && ((const uint8_t *)ptr)[1] == 0) return skip; ptr = ((const char *)ptr) + tl + ll; size -= tl + ll; } /* UNREACHABLE */ } size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { size_t required_size; /* Size of len encoding */ uint8_t *buf = (uint8_t *)bufp; uint8_t *end; size_t i; if(len <= 127) { /* Encoded in 1 octet */ if(size) *buf = (uint8_t)len; return 1; } /* * Compute the size of the subsequent bytes. */ for(required_size = 1, i = 8; i < 8 * sizeof(len); i += 8) { if(len >> i) required_size++; else break; } if(size <= required_size) return required_size + 1; *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ /* * Produce the len encoding, space permitting. */ end = buf + required_size; for(i -= 8; buf < end; i -= 8, buf++) *buf = (uint8_t)(len >> i); return required_size + 1; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ULP-PDU.c0000644000175000017500000000646712576764164021247 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP" * found in "../supl-ulp.asn" */ #include "ULP-PDU.h" static int memb_length_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_length_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_ULP_PDU_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ULP_PDU, length), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_length_constraint_1, &asn_PER_memb_length_constr_2, 0, "length" }, { ATF_NOFLAGS, 0, offsetof(struct ULP_PDU, version), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Version, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "version" }, { ATF_NOFLAGS, 0, offsetof(struct ULP_PDU, sessionID), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SessionID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sessionID" }, { ATF_NOFLAGS, 0, offsetof(struct ULP_PDU, message), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_UlpMessage, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "message" }, }; static ber_tlv_tag_t asn_DEF_ULP_PDU_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ULP_PDU_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* length at 31 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* version at 32 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sessionID at 33 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* message at 34 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ULP_PDU_specs_1 = { sizeof(struct ULP_PDU), offsetof(struct ULP_PDU, _asn_ctx), asn_MAP_ULP_PDU_tag2el_1, 4, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ULP_PDU = { "ULP-PDU", "ULP-PDU", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ULP_PDU_tags_1, sizeof(asn_DEF_ULP_PDU_tags_1) /sizeof(asn_DEF_ULP_PDU_tags_1[0]), /* 1 */ asn_DEF_ULP_PDU_tags_1, /* Same as above */ sizeof(asn_DEF_ULP_PDU_tags_1) /sizeof(asn_DEF_ULP_PDU_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ULP_PDU_1, 4, /* Elements count */ &asn_SPC_ULP_PDU_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/StatusCode.h0000644000175000017500000000326112576764164022231 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _StatusCode_H_ #define _StatusCode_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum StatusCode { StatusCode_unspecified = 0, StatusCode_systemFailure = 1, StatusCode_unexpectedMessage = 2, StatusCode_protocolError = 3, StatusCode_dataMissing = 4, StatusCode_unexpectedDataValue = 5, StatusCode_posMethodFailure = 6, StatusCode_posMethodMismatch = 7, StatusCode_posProtocolMismatch = 8, StatusCode_targetSETnotReachable = 9, StatusCode_versionNotSupported = 10, StatusCode_resourceShortage = 11, StatusCode_invalidSessionId = 12, StatusCode_nonProxyModeNotSupported = 13, StatusCode_proxyModeNotSupported = 14, StatusCode_positioningNotPermitted = 15, StatusCode_authNetFailure = 16, StatusCode_authSuplinitFailure = 17, StatusCode_consentDeniedByUser = 100, StatusCode_consentGrantedByUser = 101 /* * Enumeration is extensible */ } e_StatusCode; /* StatusCode */ typedef ENUMERATED_t StatusCode_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_StatusCode; asn_struct_free_f StatusCode_free; asn_struct_print_f StatusCode_print; asn_constr_check_f StatusCode_constraint; ber_type_decoder_f StatusCode_decode_ber; der_type_encoder_f StatusCode_encode_der; xer_type_decoder_f StatusCode_decode_xer; xer_type_encoder_f StatusCode_encode_xer; per_type_decoder_f StatusCode_decode_uper; per_type_encoder_f StatusCode_encode_uper; #ifdef __cplusplus } #endif #endif /* _StatusCode_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NMRelement.c0000644000175000017500000001055012576764164022153 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "NMRelement.h" static int memb_aRFCN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_bSIC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_rxLev_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_aRFCN_constr_2 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_bSIC_constr_3 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_rxLev_constr_4 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_NMRelement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct NMRelement, aRFCN), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_aRFCN_constraint_1, &asn_PER_memb_aRFCN_constr_2, 0, "aRFCN" }, { ATF_NOFLAGS, 0, offsetof(struct NMRelement, bSIC), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_bSIC_constraint_1, &asn_PER_memb_bSIC_constr_3, 0, "bSIC" }, { ATF_NOFLAGS, 0, offsetof(struct NMRelement, rxLev), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_rxLev_constraint_1, &asn_PER_memb_rxLev_constr_4, 0, "rxLev" }, }; static ber_tlv_tag_t asn_DEF_NMRelement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_NMRelement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* aRFCN at 140 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bSIC at 141 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rxLev at 142 */ }; static asn_SEQUENCE_specifics_t asn_SPC_NMRelement_specs_1 = { sizeof(struct NMRelement), offsetof(struct NMRelement, _asn_ctx), asn_MAP_NMRelement_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_NMRelement = { "NMRelement", "NMRelement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NMRelement_tags_1, sizeof(asn_DEF_NMRelement_tags_1) /sizeof(asn_DEF_NMRelement_tags_1[0]), /* 1 */ asn_DEF_NMRelement_tags_1, /* Same as above */ sizeof(asn_DEF_NMRelement_tags_1) /sizeof(asn_DEF_NMRelement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_NMRelement_1, 3, /* Elements count */ &asn_SPC_NMRelement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SEQUENCE_OF.h0000644000175000017500000000164212576764164023340 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SEQUENCE_OF_H_ #define _CONSTR_SEQUENCE_OF_H_ #include #include /* Implemented using SET OF */ #ifdef __cplusplus extern "C" { #endif /* * A set specialized functions dealing with the SEQUENCE OF type. * Generally implemented using SET OF. */ #define SEQUENCE_OF_free SET_OF_free #define SEQUENCE_OF_print SET_OF_print #define SEQUENCE_OF_constraint SET_OF_constraint #define SEQUENCE_OF_decode_ber SET_OF_decode_ber #define SEQUENCE_OF_decode_xer SET_OF_decode_xer #define SEQUENCE_OF_decode_uper SET_OF_decode_uper der_type_encoder_f SEQUENCE_OF_encode_der; xer_type_encoder_f SEQUENCE_OF_encode_xer; per_type_encoder_f SEQUENCE_OF_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SET_OF_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horvel.h0000644000175000017500000000134212576764164021410 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Horvel_H_ #define _Horvel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Horvel */ typedef struct Horvel { BIT_STRING_t bearing; BIT_STRING_t horspeed; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Horvel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Horvel; #ifdef __cplusplus } #endif #endif /* _Horvel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FormatIndicator.c0000644000175000017500000001274112576764164023236 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "FormatIndicator.h" int FormatIndicator_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void FormatIndicator_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void FormatIndicator_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { FormatIndicator_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int FormatIndicator_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t FormatIndicator_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t FormatIndicator_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t FormatIndicator_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t FormatIndicator_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t FormatIndicator_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t FormatIndicator_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { FormatIndicator_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_FormatIndicator_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_FormatIndicator_value2enum_1[] = { { 0, 11, "logicalName" }, { 1, 13, "e-mailAddress" }, { 2, 6, "msisdn" }, { 3, 3, "url" }, { 4, 6, "sipUrl" }, { 5, 3, "min" }, { 6, 3, "mdn" }, { 7, 17, "imsPublicIdentity" } /* This list is extensible */ }; static unsigned int asn_MAP_FormatIndicator_enum2value_1[] = { 1, /* e-mailAddress(1) */ 7, /* imsPublicIdentity(7) */ 0, /* logicalName(0) */ 6, /* mdn(6) */ 5, /* min(5) */ 2, /* msisdn(2) */ 4, /* sipUrl(4) */ 3 /* url(3) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_FormatIndicator_specs_1 = { asn_MAP_FormatIndicator_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_FormatIndicator_enum2value_1, /* N => "tag"; sorted by N */ 8, /* Number of elements in the maps */ 9, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_FormatIndicator_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_FormatIndicator = { "FormatIndicator", "FormatIndicator", FormatIndicator_free, FormatIndicator_print, FormatIndicator_constraint, FormatIndicator_decode_ber, FormatIndicator_encode_der, FormatIndicator_decode_xer, FormatIndicator_encode_xer, FormatIndicator_decode_uper, FormatIndicator_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FormatIndicator_tags_1, sizeof(asn_DEF_FormatIndicator_tags_1) /sizeof(asn_DEF_FormatIndicator_tags_1[0]), /* 1 */ asn_DEF_FormatIndicator_tags_1, /* Same as above */ sizeof(asn_DEF_FormatIndicator_tags_1) /sizeof(asn_DEF_FormatIndicator_tags_1[0]), /* 1 */ &asn_PER_type_FormatIndicator_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_FormatIndicator_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandveruncert.h0000644000175000017500000000162212576764164023323 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Horandveruncert_H_ #define _Horandveruncert_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Horandveruncert */ typedef struct Horandveruncert { BIT_STRING_t verdirect; BIT_STRING_t bearing; BIT_STRING_t horspeed; BIT_STRING_t verspeed; BIT_STRING_t horuncertspeed; BIT_STRING_t veruncertspeed; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Horandveruncert_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Horandveruncert; #ifdef __cplusplus } #endif #endif /* _Horandveruncert_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_SEQUENCE_OF.h0000644000175000017500000000273512576764164022615 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_SEQUENCE_OF_H #define ASN_SEQUENCE_OF_H #include #ifdef __cplusplus extern "C" { #endif /* * SEQUENCE OF is the same as SET OF with a tiny difference: * the delete operation preserves the initial order of elements * and thus MAY operate in non-constant time. */ #define A_SEQUENCE_OF(type) A_SET_OF(type) #define ASN_SEQUENCE_ADD(headptr, ptr) \ asn_sequence_add((headptr), (ptr)) /*********************************************** * Implementation of the SEQUENCE OF structure. */ #define asn_sequence_add asn_set_add #define asn_sequence_empty asn_set_empty /* * Delete the element from the set by its number (base 0). * This is NOT a constant-time operation. * The order of elements is preserved. * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); /* * Cope with different conversions requirements to/from void in C and C++. * This is mostly useful for support library. */ typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; #define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) #define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) #ifdef __cplusplus } #endif #endif /* ASN_SEQUENCE_OF_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETCapabilities.h0000644000175000017500000000157012576764164023121 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #ifndef _SETCapabilities_H_ #define _SETCapabilities_H_ #include /* Including external dependencies */ #include "PosTechnology.h" #include "PrefMethod.h" #include "PosProtocol.h" #include #ifdef __cplusplus extern "C" { #endif /* SETCapabilities */ typedef struct SETCapabilities { PosTechnology_t posTechnology; PrefMethod_t prefMethod; PosProtocol_t posProtocol; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SETCapabilities_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SETCapabilities; #ifdef __cplusplus } #endif #endif /* _SETCapabilities_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosMethod.c0000644000175000017500000001254312576764164022053 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "PosMethod.h" int PosMethod_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void PosMethod_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void PosMethod_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { PosMethod_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int PosMethod_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { PosMethod_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t PosMethod_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { PosMethod_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t PosMethod_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { PosMethod_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t PosMethod_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { PosMethod_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t PosMethod_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { PosMethod_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t PosMethod_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { PosMethod_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t PosMethod_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { PosMethod_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_PosMethod_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 9 } /* (0..9,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_PosMethod_value2enum_1[] = { { 0, 15, "agpsSETassisted" }, { 1, 12, "agpsSETbased" }, { 2, 19, "agpsSETassistedpref" }, { 3, 16, "agpsSETbasedpref" }, { 4, 13, "autonomousGPS" }, { 5, 4, "aFLT" }, { 6, 4, "eCID" }, { 7, 4, "eOTD" }, { 8, 5, "oTDOA" }, { 9, 10, "noPosition" } /* This list is extensible */ }; static unsigned int asn_MAP_PosMethod_enum2value_1[] = { 5, /* aFLT(5) */ 0, /* agpsSETassisted(0) */ 2, /* agpsSETassistedpref(2) */ 1, /* agpsSETbased(1) */ 3, /* agpsSETbasedpref(3) */ 4, /* autonomousGPS(4) */ 6, /* eCID(6) */ 7, /* eOTD(7) */ 9, /* noPosition(9) */ 8 /* oTDOA(8) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_PosMethod_specs_1 = { asn_MAP_PosMethod_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_PosMethod_enum2value_1, /* N => "tag"; sorted by N */ 10, /* Number of elements in the maps */ 11, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_PosMethod_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_PosMethod = { "PosMethod", "PosMethod", PosMethod_free, PosMethod_print, PosMethod_constraint, PosMethod_decode_ber, PosMethod_encode_der, PosMethod_decode_xer, PosMethod_encode_xer, PosMethod_decode_uper, PosMethod_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PosMethod_tags_1, sizeof(asn_DEF_PosMethod_tags_1) /sizeof(asn_DEF_PosMethod_tags_1[0]), /* 1 */ asn_DEF_PosMethod_tags_1, /* Same as above */ sizeof(asn_DEF_PosMethod_tags_1) /sizeof(asn_DEF_PosMethod_tags_1[0]), /* 1 */ &asn_PER_type_PosMethod_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_PosMethod_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Notification.h0000644000175000017500000000210012576764164022570 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _Notification_H_ #define _Notification_H_ #include /* Including external dependencies */ #include "NotificationType.h" #include "EncodingType.h" #include #include "FormatIndicator.h" #include #ifdef __cplusplus extern "C" { #endif /* Notification */ typedef struct Notification { NotificationType_t notificationType; EncodingType_t *encodingType /* OPTIONAL */; OCTET_STRING_t *requestorId /* OPTIONAL */; FormatIndicator_t *requestorIdType /* OPTIONAL */; OCTET_STRING_t *clientName /* OPTIONAL */; FormatIndicator_t *clientNameType /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Notification_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Notification; #ifdef __cplusplus } #endif #endif /* _Notification_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GsmCellInformation.c0000644000175000017500000001601312576764164023701 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "GsmCellInformation.h" static int memb_refMCC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refMNC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refLAC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refCI_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_tA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refMCC_constr_2 = { { APC_CONSTRAINED, 10, 10, 0, 999 } /* (0..999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refMNC_constr_3 = { { APC_CONSTRAINED, 10, 10, 0, 999 } /* (0..999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refLAC_constr_4 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refCI_constr_5 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_tA_constr_7 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GsmCellInformation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GsmCellInformation, refMCC), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refMCC_constraint_1, &asn_PER_memb_refMCC_constr_2, 0, "refMCC" }, { ATF_NOFLAGS, 0, offsetof(struct GsmCellInformation, refMNC), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refMNC_constraint_1, &asn_PER_memb_refMNC_constr_3, 0, "refMNC" }, { ATF_NOFLAGS, 0, offsetof(struct GsmCellInformation, refLAC), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refLAC_constraint_1, &asn_PER_memb_refLAC_constr_4, 0, "refLAC" }, { ATF_NOFLAGS, 0, offsetof(struct GsmCellInformation, refCI), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refCI_constraint_1, &asn_PER_memb_refCI_constr_5, 0, "refCI" }, { ATF_POINTER, 2, offsetof(struct GsmCellInformation, nMR), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NMR, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "nMR" }, { ATF_POINTER, 1, offsetof(struct GsmCellInformation, tA), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_tA_constraint_1, &asn_PER_memb_tA_constr_7, 0, "tA" }, }; static int asn_MAP_GsmCellInformation_oms_1[] = { 4, 5 }; static ber_tlv_tag_t asn_DEF_GsmCellInformation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GsmCellInformation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refMCC at 103 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* refMNC at 104 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* refLAC at 105 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* refCI at 106 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* nMR at 107 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* tA at 108 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GsmCellInformation_specs_1 = { sizeof(struct GsmCellInformation), offsetof(struct GsmCellInformation, _asn_ctx), asn_MAP_GsmCellInformation_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_GsmCellInformation_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GsmCellInformation = { "GsmCellInformation", "GsmCellInformation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GsmCellInformation_tags_1, sizeof(asn_DEF_GsmCellInformation_tags_1) /sizeof(asn_DEF_GsmCellInformation_tags_1[0]), /* 1 */ asn_DEF_GsmCellInformation_tags_1, /* Same as above */ sizeof(asn_DEF_GsmCellInformation_tags_1) /sizeof(asn_DEF_GsmCellInformation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GsmCellInformation_1, 6, /* Elements count */ &asn_SPC_GsmCellInformation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FrequencyInfoFDD.h0000644000175000017500000000145612576764164023252 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _FrequencyInfoFDD_H_ #define _FrequencyInfoFDD_H_ #include /* Including external dependencies */ #include "UARFCN.h" #include #ifdef __cplusplus extern "C" { #endif /* FrequencyInfoFDD */ typedef struct FrequencyInfoFDD { UARFCN_t *uarfcn_UL /* OPTIONAL */; UARFCN_t uarfcn_DL; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } FrequencyInfoFDD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FrequencyInfoFDD; #ifdef __cplusplus } #endif #endif /* _FrequencyInfoFDD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_opentype.h0000644000175000017500000000123212576764164022660 0ustar carlescarles/* * Copyright (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_OPENTYPE_H_ #define _PER_OPENTYPE_H_ #ifdef __cplusplus extern "C" { #endif asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); int uper_open_type_skip(asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po); #ifdef __cplusplus } #endif #endif /* _PER_OPENTYPE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TimeslotISCP.c0000644000175000017500000001121412576764164022422 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "TimeslotISCP.h" int TimeslotISCP_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TimeslotISCP_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TimeslotISCP_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TimeslotISCP_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TimeslotISCP_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TimeslotISCP_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TimeslotISCP_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TimeslotISCP_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TimeslotISCP_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TimeslotISCP_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TimeslotISCP_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TimeslotISCP_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TimeslotISCP_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TimeslotISCP_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TimeslotISCP = { "TimeslotISCP", "TimeslotISCP", TimeslotISCP_free, TimeslotISCP_print, TimeslotISCP_constraint, TimeslotISCP_decode_ber, TimeslotISCP_encode_der, TimeslotISCP_decode_xer, TimeslotISCP_encode_xer, TimeslotISCP_decode_uper, TimeslotISCP_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TimeslotISCP_tags_1, sizeof(asn_DEF_TimeslotISCP_tags_1) /sizeof(asn_DEF_TimeslotISCP_tags_1[0]), /* 1 */ asn_DEF_TimeslotISCP_tags_1, /* Same as above */ sizeof(asn_DEF_TimeslotISCP_tags_1) /sizeof(asn_DEF_TimeslotISCP_tags_1[0]), /* 1 */ &asn_PER_type_TimeslotISCP_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NativeEnumerated.c0000644000175000017500000001342612576764164023412 0ustar carlescarles/*- * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Read the NativeInteger.h for the explanation wrt. differences between * INTEGER and NativeInteger. * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this * implementation deals with the standard (machine-specific) representation * of them instead of using the platform-independent buffer. */ #include #include /* * NativeEnumerated basic type description. */ static ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ "ENUMERATED", NativeInteger_free, NativeInteger_print, asn_generic_no_constraint, NativeInteger_decode_ber, NativeInteger_encode_der, NativeInteger_decode_xer, NativeEnumerated_encode_xer, NativeEnumerated_decode_uper, NativeEnumerated_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NativeEnumerated_tags, sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), asn_DEF_NativeEnumerated_tags, /* Same as above */ sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn_enc_rval_t NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; const long *native = (const long *)sptr; const asn_INTEGER_enum_map_t *el; (void)ilevel; (void)flags; if(!native) _ASN_ENCODE_FAILED; el = INTEGER_map_value2enum(specs, *native); if(el) { size_t srcsize = el->enum_len + 5; char *src = (char *)alloca(srcsize); er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name); assert(er.encoded > 0 && (size_t)er.encoded < srcsize); if(cb(src, er.encoded, app_key) < 0) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } else { ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); _ASN_ENCODE_FAILED; } } asn_dec_rval_t NativeEnumerated_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval = { RC_OK, 0 }; long *native = (long *)*sptr; asn_per_constraint_t *ct; long value; (void)opt_codec_ctx; if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else _ASN_DECODE_FAILED; /* Mandatory! */ if(!specs) _ASN_DECODE_FAILED; if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) _ASN_DECODE_FAILED; } ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); if(ct->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) _ASN_DECODE_STARVED; if(inext) ct = 0; } if(ct && ct->range_bits >= 0) { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) _ASN_DECODE_STARVED; if(value >= (specs->extension ? specs->extension - 1 : specs->map_count)) _ASN_DECODE_FAILED; } else { if(!specs->extension) _ASN_DECODE_FAILED; /* * X.691, #10.6: normally small non-negative whole number; */ value = uper_get_nsnnwn(pd); if(value < 0) _ASN_DECODE_STARVED; value += specs->extension - 1; if(value >= specs->map_count) _ASN_DECODE_FAILED; } *native = specs->value2enum[value].nat_value; ASN_DEBUG("Decoded %s = %ld", td->name, *native); return rval; } static int NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { const asn_INTEGER_enum_map_t *a = ap; const asn_INTEGER_enum_map_t *b = bp; if(a->nat_value == b->nat_value) return 0; if(a->nat_value < b->nat_value) return -1; return 1; } asn_enc_rval_t NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; long native, value; asn_per_constraint_t *ct; int inext = 0; asn_INTEGER_enum_map_t key; asn_INTEGER_enum_map_t *kf; if(!sptr) _ASN_ENCODE_FAILED; if(!specs) _ASN_ENCODE_FAILED; if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else _ASN_ENCODE_FAILED; /* Mandatory! */ ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); er.encoded = 0; native = *(long *)sptr; if(native < 0) _ASN_ENCODE_FAILED; key.nat_value = native; kf = bsearch(&key, specs->value2enum, specs->map_count, sizeof(key), NativeEnumerated__compar_value2enum); if(!kf) { ASN_DEBUG("No element corresponds to %ld", native); _ASN_ENCODE_FAILED; } value = kf - specs->value2enum; if(ct->range_bits >= 0) { int cmpWith = specs->extension ? specs->extension - 1 : specs->map_count; if(value >= cmpWith) inext = 1; } if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, inext, 1)) _ASN_ENCODE_FAILED; if(inext) ct = 0; } else if(inext) { _ASN_ENCODE_FAILED; } if(ct && ct->range_bits >= 0) { if(per_put_few_bits(po, value, ct->range_bits)) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } if(!specs->extension) _ASN_ENCODE_FAILED; /* * X.691, #10.6: normally small non-negative whole number; */ ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", value, specs->extension, inext, value - (inext ? (specs->extension - 1) : 0)); if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETId.c0000644000175000017500000001633212576764164021061 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "SETId.h" static int check_permitted_alphabet_6(const void *sptr) { /* The underlying type is IA5String */ const IA5String_t *st = (const IA5String_t *)sptr; const uint8_t *ch = st->buf; const uint8_t *end = ch + st->size; for(; ch < end; ch++) { uint8_t cv = *ch; if(!(cv <= 127)) return -1; } return 0; } static int memb_msisdn_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_mdn_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_min_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 34)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_imsi_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_nai_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const IA5String_t *st = (const IA5String_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 1000) && !check_permitted_alphabet_6(st)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_msisdn_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_mdn_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_min_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 34, 34 } /* (SIZE(34..34)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_imsi_constr_5 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_nai_constr_6 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_CONSTRAINED, 10, 10, 1, 1000 } /* (SIZE(1..1000)) */, 0, 0 /* No PER character map necessary */ }; static asn_per_constraints_t asn_PER_type_SETId_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SETId_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SETId, choice.msisdn), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_msisdn_constraint_1, &asn_PER_memb_msisdn_constr_2, 0, "msisdn" }, { ATF_NOFLAGS, 0, offsetof(struct SETId, choice.mdn), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_mdn_constraint_1, &asn_PER_memb_mdn_constr_3, 0, "mdn" }, { ATF_NOFLAGS, 0, offsetof(struct SETId, choice.min), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_min_constraint_1, &asn_PER_memb_min_constr_4, 0, "min" }, { ATF_NOFLAGS, 0, offsetof(struct SETId, choice.imsi), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_imsi_constraint_1, &asn_PER_memb_imsi_constr_5, 0, "imsi" }, { ATF_NOFLAGS, 0, offsetof(struct SETId, choice.nai), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_IA5String, memb_nai_constraint_1, &asn_PER_memb_nai_constr_6, 0, "nai" }, { ATF_NOFLAGS, 0, offsetof(struct SETId, choice.iPAddress), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_IPAddress, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "iPAddress" }, }; static asn_TYPE_tag2member_t asn_MAP_SETId_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* msisdn at 22 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mdn at 23 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* min at 24 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* imsi at 25 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* nai at 26 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iPAddress at 27 */ }; static asn_CHOICE_specifics_t asn_SPC_SETId_specs_1 = { sizeof(struct SETId), offsetof(struct SETId, _asn_ctx), offsetof(struct SETId, present), sizeof(((struct SETId *)0)->present), asn_MAP_SETId_tag2el_1, 6, /* Count of tags in the map */ 0, 6 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_SETId = { "SETId", "SETId", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_SETId_constr_1, asn_MBR_SETId_1, 6, /* Elements count */ &asn_SPC_SETId_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/OCTET_STRING.c0000644000175000017500000013323512576764164022117 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* for .bits_unused member */ #include /* * OCTET STRING basic type description. */ static ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; static asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = { sizeof(OCTET_STRING_t), offsetof(OCTET_STRING_t, _asn_ctx), ASN_OSUBV_STR }; static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { { APC_CONSTRAINED, 8, 8, 0, 255 }, { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, 0, 0 }; asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { "OCTET STRING", /* Canonical name */ "OCTET_STRING", /* XML tag name */ OCTET_STRING_free, OCTET_STRING_print, /* non-ascii stuff, generally */ asn_generic_no_constraint, OCTET_STRING_decode_ber, OCTET_STRING_encode_der, OCTET_STRING_decode_xer_hex, OCTET_STRING_encode_xer, OCTET_STRING_decode_uper, /* Unaligned PER decoder */ OCTET_STRING_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_OCTET_STRING_tags, sizeof(asn_DEF_OCTET_STRING_tags) / sizeof(asn_DEF_OCTET_STRING_tags[0]), asn_DEF_OCTET_STRING_tags, /* Same as above */ sizeof(asn_DEF_OCTET_STRING_tags) / sizeof(asn_DEF_OCTET_STRING_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ &asn_DEF_OCTET_STRING_specs }; #undef _CH_PHASE #undef NEXT_PHASE #undef PREV_PHASE #define _CH_PHASE(ctx, inc) do { \ if(ctx->phase == 0) \ ctx->context = 0; \ ctx->phase += inc; \ } while(0) #define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) #define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = (num_bytes); \ buf_ptr = ((const char *)buf_ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ asn_dec_rval_t tmprval; \ tmprval.code = _code; \ tmprval.consumed = consumed_myself; \ return tmprval; \ } while(0) #undef APPEND #define APPEND(bufptr, bufsize) do { \ size_t _bs = (bufsize); /* Append size */ \ size_t _ns = ctx->context; /* Allocated now */ \ size_t _es = st->size + _bs; /* Expected size */ \ /* int is really a typeof(st->size): */ \ if((int)_es < 0) RETURN(RC_FAIL); \ if(_ns <= _es) { \ void *ptr; \ /* Be nice and round to the memory allocator */ \ do { _ns = _ns ? _ns << 1 : 16; } \ while(_ns <= _es); \ /* int is really a typeof(st->size): */ \ if((int)_ns < 0) RETURN(RC_FAIL); \ ptr = REALLOC(st->buf, _ns); \ if(ptr) { \ st->buf = (uint8_t *)ptr; \ ctx->context = _ns; \ } else { \ RETURN(RC_FAIL); \ } \ ASN_DEBUG("Reallocating into %ld", (long)_ns); \ } \ memcpy(st->buf + st->size, bufptr, _bs); \ /* Convenient nul-termination */ \ st->buf[_es] = '\0'; \ st->size = _es; \ } while(0) /* * The main reason why ASN.1 is still alive is that too much time and effort * is necessary for learning it more or less adequately, thus creating a gut * necessity to demonstrate that aquired skill everywhere afterwards. * No, I am not going to explain what the following stuff is. */ struct _stack_el { ber_tlv_len_t left; /* What's left to read (or -1) */ ber_tlv_len_t got; /* What was actually processed */ int cont_level; /* Depth of subcontainment */ int want_nulls; /* Want null "end of content" octets? */ int bits_chopped; /* Flag in BIT STRING mode */ ber_tlv_tag_t tag; /* For debugging purposes */ struct _stack_el *prev; struct _stack_el *next; }; struct _stack { struct _stack_el *tail; struct _stack_el *cur_ptr; }; static struct _stack_el * OS__add_stack_el(struct _stack *st) { struct _stack_el *nel; /* * Reuse the old stack frame or allocate a new one. */ if(st->cur_ptr && st->cur_ptr->next) { nel = st->cur_ptr->next; nel->bits_chopped = 0; nel->got = 0; /* Retain the nel->cont_level, it's correct. */ } else { nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); if(nel == NULL) return NULL; if(st->tail) { /* Increase a subcontainment depth */ nel->cont_level = st->tail->cont_level + 1; st->tail->next = nel; } nel->prev = st->tail; st->tail = nel; } st->cur_ptr = nel; return nel; } static struct _stack * _new_stack() { return (struct _stack *)CALLOC(1, sizeof(struct _stack)); } /* * Decode OCTET STRING type. */ asn_dec_rval_t OCTET_STRING_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; BIT_STRING_t *st = (BIT_STRING_t *)*sptr; asn_dec_rval_t rval; asn_struct_ctx_t *ctx; ssize_t consumed_myself = 0; struct _stack *stck; /* Expectations stack structure */ struct _stack_el *sel = 0; /* Stack element */ int tlv_constr; enum asn_OS_Subvariant type_variant = specs->subvariant; ASN_DEBUG("Decoding %s as %s (frame %ld)", td->name, (type_variant == ASN_OSUBV_STR) ? "OCTET STRING" : "OS-SpecialCase", (long)size); /* * Create the string if does not exist. */ if(st == NULL) { st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); if(st == NULL) RETURN(RC_FAIL); } /* Restore parsing context */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); switch(ctx->phase) { case 0: /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, buf_ptr, size, tag_mode, -1, &ctx->left, &tlv_constr); if(rval.code != RC_OK) return rval; if(tlv_constr) { /* * Complex operation, requires stack of expectations. */ ctx->ptr = _new_stack(); if(ctx->ptr) { stck = (struct _stack *)ctx->ptr; } else { RETURN(RC_FAIL); } } else { /* * Jump into stackless primitive decoding. */ _CH_PHASE(ctx, 3); if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) APPEND(buf_ptr, rval.consumed); ADVANCE(rval.consumed); goto phase3; } NEXT_PHASE(ctx); /* Fall through */ case 1: phase1: /* * Fill the stack with expectations. */ stck = (struct _stack *)ctx->ptr; sel = stck->cur_ptr; do { ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; ber_tlv_tag_t expected_tag; ssize_t tl, ll, tlvl; /* This one works even if (sel->left == -1) */ ssize_t Left = ((!sel||(size_t)sel->left >= size) ?(ssize_t)size:sel->left); ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", sel, (long)(sel?sel->left:0), (long)(sel?sel->want_nulls:0), (long)(sel?sel->got:0) ); if(sel && sel->left <= 0 && sel->want_nulls == 0) { if(sel->prev) { struct _stack_el *prev = sel->prev; if(prev->left != -1) { if(prev->left < sel->got) RETURN(RC_FAIL); prev->left -= sel->got; } prev->got += sel->got; sel = stck->cur_ptr = prev; if(!sel) break; tlv_constr = 1; continue; } else { sel = stck->cur_ptr = 0; break; /* Nothing to wait */ } } tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", (long)size, (long)Left, sel?"":"!", (long)(sel?sel->left:0), (long)(sel?sel->want_nulls:0), (long)tl); switch(tl) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); ll = ber_fetch_length(tlv_constr, (const char *)buf_ptr + tl,Left - tl,&tlv_len); ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", ber_tlv_tag_string(tlv_tag), tlv_constr, (long)Left, (long)tl, (long)tlv_len, (long)ll); switch(ll) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } if(sel && sel->want_nulls && ((const uint8_t *)buf_ptr)[0] == 0 && ((const uint8_t *)buf_ptr)[1] == 0) { ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); if(type_variant == ASN_OSUBV_ANY && (tag_mode != 1 || sel->cont_level)) APPEND("\0\0", 2); ADVANCE(2); sel->got += 2; if(sel->left != -1) { sel->left -= 2; /* assert(sel->left >= 2) */ } sel->want_nulls--; if(sel->want_nulls == 0) { /* Move to the next expectation */ sel->left = 0; tlv_constr = 1; } continue; } /* * Set up expected tags, * depending on ASN.1 type being decoded. */ switch(type_variant) { case ASN_OSUBV_BIT: /* X.690: 8.6.4.1, NOTE 2 */ /* Fall through */ case ASN_OSUBV_STR: default: if(sel) { int level = sel->cont_level; if(level < td->all_tags_count) { expected_tag = td->all_tags[level]; break; } else if(td->all_tags_count) { expected_tag = td->all_tags [td->all_tags_count - 1]; break; } /* else, Fall through */ } /* Fall through */ case ASN_OSUBV_ANY: expected_tag = tlv_tag; break; } if(tlv_tag != expected_tag) { char buf[2][32]; ber_tlv_tag_snprint(tlv_tag, buf[0], sizeof(buf[0])); ber_tlv_tag_snprint(td->tags[td->tags_count-1], buf[1], sizeof(buf[1])); ASN_DEBUG("Tag does not match expectation: %s != %s", buf[0], buf[1]); RETURN(RC_FAIL); } tlvl = tl + ll; /* Combined length of T and L encoding */ if((tlv_len + tlvl) < 0) { /* tlv_len value is too big */ ASN_DEBUG("TLV encoding + length (%ld) is too big", (long)tlv_len); RETURN(RC_FAIL); } /* * Append a new expectation. */ sel = OS__add_stack_el(stck); if(!sel) RETURN(RC_FAIL); sel->tag = tlv_tag; sel->want_nulls = (tlv_len==-1); if(sel->prev && sel->prev->left != -1) { /* Check that the parent frame is big enough */ if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) RETURN(RC_FAIL); if(tlv_len == -1) sel->left = sel->prev->left - tlvl; else sel->left = tlv_len; } else { sel->left = tlv_len; } if(type_variant == ASN_OSUBV_ANY && (tag_mode != 1 || sel->cont_level)) APPEND(buf_ptr, tlvl); sel->got += tlvl; ADVANCE(tlvl); ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%d", (long)sel->got, (long)sel->left, sel->want_nulls, sel->cont_level); } while(tlv_constr); if(sel == NULL) { /* Finished operation, "phase out" */ ASN_DEBUG("Phase out"); _CH_PHASE(ctx, +3); break; } NEXT_PHASE(ctx); /* Fall through */ case 2: stck = (struct _stack *)ctx->ptr; sel = stck->cur_ptr; ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", (long)sel->left, (long)size, (long)sel->got, sel->want_nulls); { ber_tlv_len_t len; assert(sel->left >= 0); len = ((ber_tlv_len_t)size < sel->left) ? (ber_tlv_len_t)size : sel->left; if(len > 0) { if(type_variant == ASN_OSUBV_BIT && sel->bits_chopped == 0) { /* Put the unused-bits-octet away */ st->bits_unused = *(const uint8_t *)buf_ptr; APPEND(((const char *)buf_ptr+1), (len - 1)); sel->bits_chopped = 1; } else { APPEND(buf_ptr, len); } ADVANCE(len); sel->left -= len; sel->got += len; } if(sel->left) { ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", (long)sel->left, (long)size, sel->want_nulls); RETURN(RC_WMORE); } PREV_PHASE(ctx); goto phase1; } break; case 3: phase3: /* * Primitive form, no stack required. */ assert(ctx->left >= 0); if(size < (size_t)ctx->left) { if(!size) RETURN(RC_WMORE); if(type_variant == ASN_OSUBV_BIT && !ctx->context) { st->bits_unused = *(const uint8_t *)buf_ptr; ctx->left--; ADVANCE(1); } APPEND(buf_ptr, size); assert(ctx->context > 0); ctx->left -= size; ADVANCE(size); RETURN(RC_WMORE); } else { if(type_variant == ASN_OSUBV_BIT && !ctx->context && ctx->left) { st->bits_unused = *(const uint8_t *)buf_ptr; ctx->left--; ADVANCE(1); } APPEND(buf_ptr, ctx->left); ADVANCE(ctx->left); ctx->left = 0; NEXT_PHASE(ctx); } break; } if(sel) { ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", sel->prev, sel->want_nulls, (long)sel->left, (long)sel->got, (long)size); if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { RETURN(RC_WMORE); } } /* * BIT STRING-specific processing. */ if(type_variant == ASN_OSUBV_BIT && st->size) { /* Finalize BIT STRING: zero out unused bits. */ st->buf[st->size-1] &= 0xff << st->bits_unused; } ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", (long)consumed_myself, td->name, (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", (long)st->size); RETURN(RC_OK); } /* * Encode OCTET STRING type using DER. */ asn_enc_rval_t OCTET_STRING_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; BIT_STRING_t *st = (BIT_STRING_t *)sptr; enum asn_OS_Subvariant type_variant = specs->subvariant; int fix_last_byte = 0; ASN_DEBUG("%s %s as OCTET STRING", cb?"Estimating":"Encoding", td->name); /* * Write tags. */ if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { er.encoded = der_write_tags(td, (type_variant == ASN_OSUBV_BIT) + st->size, tag_mode, type_variant == ASN_OSUBV_ANY, tag, cb, app_key); if(er.encoded == -1) { er.failed_type = td; er.structure_ptr = sptr; return er; } } else { /* Disallow: [] IMPLICIT ANY */ assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); er.encoded = 0; } if(!cb) { er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; _ASN_ENCODED_OK(er); } /* * Prepare to deal with the last octet of BIT STRING. */ if(type_variant == ASN_OSUBV_BIT) { uint8_t b = st->bits_unused & 0x07; if(b && st->size) fix_last_byte = 1; _ASN_CALLBACK(&b, 1); er.encoded++; } /* Invoke callback for the main part of the buffer */ _ASN_CALLBACK(st->buf, st->size - fix_last_byte); /* The last octet should be stripped off the unused bits */ if(fix_last_byte) { uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); _ASN_CALLBACK(&b, 1); } er.encoded += st->size; _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } asn_enc_rval_t OCTET_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { static const char *h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; char scratch[16 * 3 + 4]; char *p = scratch; uint8_t *buf; uint8_t *end; size_t i; if(!st || (!st->buf && st->size)) _ASN_ENCODE_FAILED; er.encoded = 0; /* * Dump the contents of the buffer in hexadecimal. */ buf = st->buf; end = buf + st->size; if(flags & XER_F_CANONICAL) { char *scend = scratch + (sizeof(scratch) - 2); for(; buf < end; buf++) { if(p >= scend) { _ASN_CALLBACK(scratch, p - scratch); er.encoded += p - scratch; p = scratch; } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; } _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */ er.encoded += p - scratch; } else { for(i = 0; buf < end; buf++, i++) { if(!(i % 16) && (i || st->size > 16)) { _ASN_CALLBACK(scratch, p-scratch); er.encoded += (p-scratch); p = scratch; _i_ASN_TEXT_INDENT(1, ilevel); } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p - scratch) { p--; /* Remove the tail space */ _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */ er.encoded += p - scratch; if(st->size > 16) _i_ASN_TEXT_INDENT(1, ilevel-1); } } _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } static struct OCTET_STRING__xer_escape_table_s { char *string; int size; } OCTET_STRING__xer_escape_table[] = { #define OSXET(s) { s, sizeof(s) - 1 } OSXET("\074\156\165\154\057\076"), /* */ OSXET("\074\163\157\150\057\076"), /* */ OSXET("\074\163\164\170\057\076"), /* */ OSXET("\074\145\164\170\057\076"), /* */ OSXET("\074\145\157\164\057\076"), /* */ OSXET("\074\145\156\161\057\076"), /* */ OSXET("\074\141\143\153\057\076"), /* */ OSXET("\074\142\145\154\057\076"), /* */ OSXET("\074\142\163\057\076"), /* */ OSXET("\011"), /* \t */ OSXET("\012"), /* \n */ OSXET("\074\166\164\057\076"), /* */ OSXET("\074\146\146\057\076"), /* */ OSXET("\015"), /* \r */ OSXET("\074\163\157\057\076"), /* */ OSXET("\074\163\151\057\076"), /* */ OSXET("\074\144\154\145\057\076"), /* */ OSXET("\074\144\143\061\057\076"), /* */ OSXET("\074\144\143\062\057\076"), /* */ OSXET("\074\144\143\063\057\076"), /* */ OSXET("\074\144\143\064\057\076"), /* */ OSXET("\074\156\141\153\057\076"), /* */ OSXET("\074\163\171\156\057\076"), /* */ OSXET("\074\145\164\142\057\076"), /* */ OSXET("\074\143\141\156\057\076"), /* */ OSXET("\074\145\155\057\076"), /* */ OSXET("\074\163\165\142\057\076"), /* */ OSXET("\074\145\163\143\057\076"), /* */ OSXET("\074\151\163\064\057\076"), /* */ OSXET("\074\151\163\063\057\076"), /* */ OSXET("\074\151\163\062\057\076"), /* */ OSXET("\074\151\163\061\057\076"), /* */ { 0, 0 }, /* " " */ { 0, 0 }, /* ! */ { 0, 0 }, /* \" */ { 0, 0 }, /* # */ { 0, 0 }, /* $ */ { 0, 0 }, /* % */ OSXET("\046\141\155\160\073"), /* & */ { 0, 0 }, /* ' */ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ {0,0},{0,0},{0,0},{0,0}, /* 89:; */ OSXET("\046\154\164\073"), /* < */ { 0, 0 }, /* = */ OSXET("\046\147\164\073"), /* > */ }; static int OS__check_escaped_control_char(const void *buf, int size) { size_t i; /* * Inefficient algorithm which translates the escape sequences * defined above into characters. Returns -1 if not found. * TODO: replace by a faster algorithm (bsearch(), hash or * nested table lookups). */ for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { struct OCTET_STRING__xer_escape_table_s *el; el = &OCTET_STRING__xer_escape_table[i]; if(el->size == size && memcmp(buf, el->string, size) == 0) return i; } return -1; } static int OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { /* * This might be one of the escape sequences * for control characters. Check it out. * #11.15.5 */ int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); if(control_char >= 0) { OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; void *p = REALLOC(st->buf, st->size + 2); if(p) { st->buf = (uint8_t *)p; st->buf[st->size++] = control_char; st->buf[st->size] = '\0'; /* nul-termination */ return 0; } } return -1; /* No, it's not */ } asn_enc_rval_t OCTET_STRING_encode_xer_utf8(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; uint8_t *buf, *end; uint8_t *ss; /* Sequence start */ ssize_t encoded_len = 0; (void)ilevel; /* Unused argument */ (void)flags; /* Unused argument */ if(!st || (!st->buf && st->size)) _ASN_ENCODE_FAILED; buf = st->buf; end = buf + st->size; for(ss = buf; buf < end; buf++) { unsigned int ch = *buf; int s_len; /* Special encoding sequence length */ /* * Escape certain characters: X.680/11.15 */ if(ch < sizeof(OCTET_STRING__xer_escape_table) /sizeof(OCTET_STRING__xer_escape_table[0]) && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, app_key) < 0) _ASN_ENCODE_FAILED; encoded_len += (buf - ss) + s_len; ss = buf + 1; } } encoded_len += (buf - ss); if((buf - ss) && cb(ss, buf - ss, app_key) < 0) _ASN_ENCODE_FAILED; er.encoded = encoded_len; _ASN_ENCODED_OK(er); } /* * Convert from hexadecimal format (cstring): "AB CD EF" */ static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; const char *chunk_stop = (const char *)chunk_buf; const char *p = chunk_stop; const char *pend = p + chunk_size; unsigned int clv = 0; int half = 0; /* Half bit */ uint8_t *buf; /* Reallocate buffer according to high cap estimation */ ssize_t _ns = st->size + (chunk_size + 1) / 2; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; /* * If something like " a b c " appears here, the " a b":3 will be * converted, and the rest skipped. That is, unless buf_size is greater * than chunk_size, then it'll be equivalent to "ABC0". */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; switch(ch) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* Ignore whitespace */ continue; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ clv = (clv << 4) + (ch - 0x30); break; case 0x41: case 0x42: case 0x43: /* ABC */ case 0x44: case 0x45: case 0x46: /* DEF */ clv = (clv << 4) + (ch - 0x41 + 10); break; case 0x61: case 0x62: case 0x63: /* abc */ case 0x64: case 0x65: case 0x66: /* def */ clv = (clv << 4) + (ch - 0x61 + 10); break; default: *buf = 0; /* JIC */ return -1; } if(half++) { half = 0; *buf++ = clv; chunk_stop = p + 1; } } /* * Check partial decoding. */ if(half) { if(have_more) { /* * Partial specification is fine, * because no more more PXER_TEXT data is available. */ *buf++ = clv << 4; chunk_stop = p; } } else { chunk_stop = p; } st->size = buf - st->buf; /* Adjust the buffer size */ assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return (chunk_stop - (const char *)chunk_buf); /* Converted size */ } /* * Convert from binary format: "00101011101" */ static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { BIT_STRING_t *st = (BIT_STRING_t *)sptr; const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; int bits_unused = st->bits_unused & 0x7; uint8_t *buf; /* Reallocate buffer according to high cap estimation */ ssize_t _ns = st->size + (chunk_size + 7) / 8; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; (void)have_more; if(bits_unused == 0) bits_unused = 8; else if(st->size) buf--; /* * Convert series of 0 and 1 into the octet string. */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; switch(ch) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* Ignore whitespace */ break; case 0x30: case 0x31: if(bits_unused-- <= 0) { *++buf = 0; /* Clean the cell */ bits_unused = 7; } *buf |= (ch&1) << bits_unused; break; default: st->bits_unused = bits_unused; return -1; } } if(bits_unused == 8) { st->size = buf - st->buf; st->bits_unused = 0; } else { st->size = buf - st->buf + 1; st->bits_unused = bits_unused; } assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return chunk_size; /* Converted in full */ } /* * Something like strtod(), but with stricter rules. */ static int OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { int32_t val = 0; const char *p; for(p = buf; p < end; p++) { int ch = *p; /* Strange huge value */ if((val * base + base) < 0) return -1; switch(ch) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ val = val * base + (ch - 0x30); break; case 0x41: case 0x42: case 0x43: /* ABC */ case 0x44: case 0x45: case 0x46: /* DEF */ val = val * base + (ch - 0x41 + 10); break; case 0x61: case 0x62: case 0x63: /* abc */ case 0x64: case 0x65: case 0x66: /* def */ val = val * base + (ch - 0x61 + 10); break; case 0x3b: /* ';' */ *ret_value = val; return (p - buf) + 1; default: return -1; /* Character set error */ } } *ret_value = -1; return (p - buf); } /* * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" */ static ssize_t OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; uint8_t *buf; /* Reallocate buffer */ ssize_t _ns = st->size + chunk_size; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; /* * Convert series of 0 and 1 into the octet string. */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; int len; /* Length of the rest of the chunk */ if(ch != 0x26 /* '&' */) { *buf++ = ch; continue; /* That was easy... */ } /* * Process entity reference. */ len = chunk_size - (p - (const char *)chunk_buf); if(len == 1 /* "&" */) goto want_more; if(p[1] == 0x23 /* '#' */) { const char *pval; /* Pointer to start of digits */ int32_t val = 0; /* Entity reference value */ int base; if(len == 2 /* "&#" */) goto want_more; if(p[2] == 0x78 /* 'x' */) pval = p + 3, base = 16; else pval = p + 2, base = 10; len = OS__strtoent(base, pval, p + len, &val); if(len == -1) { /* Invalid charset. Just copy verbatim. */ *buf++ = ch; continue; } if(!len || pval[len-1] != 0x3b) goto want_more; assert(val > 0); p += (pval - p) + len - 1; /* Advance past entref */ if(val < 0x80) { *buf++ = (char)val; } else if(val < 0x800) { *buf++ = 0xc0 | ((val >> 6)); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x10000) { *buf++ = 0xe0 | ((val >> 12)); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x200000) { *buf++ = 0xf0 | ((val >> 18)); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x4000000) { *buf++ = 0xf8 | ((val >> 24)); *buf++ = 0x80 | ((val >> 18) & 0x3f); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else { *buf++ = 0xfc | ((val >> 30) & 0x1); *buf++ = 0x80 | ((val >> 24) & 0x3f); *buf++ = 0x80 | ((val >> 18) & 0x3f); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } } else { /* * Ugly, limited parsing of & > < */ char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); if(!sc) goto want_more; if((sc - p) == 4 && p[1] == 0x61 /* 'a' */ && p[2] == 0x6d /* 'm' */ && p[3] == 0x70 /* 'p' */) { *buf++ = 0x26; p = sc; continue; } if((sc - p) == 3) { if(p[1] == 0x6c) { *buf = 0x3c; /* '<' */ } else if(p[1] == 0x67) { *buf = 0x3e; /* '>' */ } else { /* Unsupported entity reference */ *buf++ = ch; continue; } if(p[2] != 0x74) { /* Unsupported entity reference */ *buf++ = ch; continue; } buf++; p = sc; continue; } /* Unsupported entity reference */ *buf++ = ch; } continue; want_more: if(have_more) { /* * We know that no more data (of the same type) * is coming. Copy the rest verbatim. */ *buf++ = ch; continue; } chunk_size = (p - (const char *)chunk_buf); /* Processing stalled: need more data */ break; } st->size = buf - st->buf; assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return chunk_size; /* Converted in full */ } /* * Decode OCTET STRING from the XML element's body. */ static asn_dec_rval_t OCTET_STRING__decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_ptr, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_ptr, const void *chunk_buf, size_t chunk_size, int have_more) ) { OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; asn_struct_ctx_t *ctx; /* Per-structure parser context */ asn_dec_rval_t rval; /* Return value from the decoder */ int st_allocated; /* * Create the string if does not exist. */ if(!st) { st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); *sptr = (void *)st; if(!st) goto sta_failed; st_allocated = 1; } else { st_allocated = 0; } if(!st->buf) { /* This is separate from above section */ st->buf = (uint8_t *)CALLOC(1, 1); if(!st->buf) { if(st_allocated) { *sptr = 0; goto stb_failed; } else { goto sta_failed; } } } /* Restore parsing context */ ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); stb_failed: FREEMEM(st); sta_failed: rval.code = RC_FAIL; rval.consumed = 0; return rval; } /* * Decode OCTET STRING from the hexadecimal data. */ asn_dec_rval_t OCTET_STRING_decode_xer_hex(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); } /* * Decode OCTET STRING from the binary (0/1) data. */ asn_dec_rval_t OCTET_STRING_decode_xer_binary(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, 0, OCTET_STRING__convert_binary); } /* * Decode OCTET STRING from the string (ASCII/UTF-8) data. */ asn_dec_rval_t OCTET_STRING_decode_xer_utf8(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, OCTET_STRING__handle_control_chars, OCTET_STRING__convert_entrefs); } static int OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, size_t units, unsigned int bpc, unsigned int unit_bits, long lb, long ub, asn_per_constraints_t *pc) { uint8_t *end = buf + units * bpc; ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", (int)units, lb, ub, unit_bits); /* X.691: 27.5.4 */ if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { /* Decode without translation */ lb = 0; } else if(pc && pc->code2value) { if(unit_bits > 16) return 1; /* FATAL: can't have constrained * UniversalString with more than * 16 million code points */ for(; buf < end; buf += bpc) { int value; int code = per_get_few_bits(po, unit_bits); if(code < 0) return -1; /* WMORE */ value = pc->code2value(code); if(value < 0) { ASN_DEBUG("Code %d (0x%02x) is" " not in map (%ld..%ld)", code, code, lb, ub); return 1; /* FATAL */ } switch(bpc) { case 1: *buf = value; break; case 2: buf[0] = value >> 8; buf[1] = value; break; case 4: buf[0] = value >> 24; buf[1] = value >> 16; buf[2] = value >> 8; buf[3] = value; break; } } return 0; } /* Shortcut the no-op copying to the aligned structure */ if(lb == 0 && (unit_bits == 8 * bpc)) { return per_get_many_bits(po, buf, 0, unit_bits * units); } for(; buf < end; buf += bpc) { int code = per_get_few_bits(po, unit_bits); int ch = code + lb; if(code < 0) return -1; /* WMORE */ if(ch > ub) { ASN_DEBUG("Code %d is out of range (%ld..%ld)", ch, lb, ub); return 1; /* FATAL */ } switch(bpc) { case 1: *buf = ch; break; case 2: buf[0] = ch >> 8; buf[1] = ch; break; case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; buf[2] = ch >> 8; buf[3] = ch; break; } } return 0; } static int OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, size_t units, unsigned int bpc, unsigned int unit_bits, long lb, long ub, asn_per_constraints_t *pc) { const uint8_t *end = buf + units * bpc; ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", (int)units, lb, ub, unit_bits, bpc); /* X.691: 27.5.4 */ if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { /* Encode as is */ lb = 0; } else if(pc && pc->value2code) { for(; buf < end; buf += bpc) { int code; uint32_t value; switch(bpc) { case 1: value = *(const uint8_t *)buf; break; case 2: value = (buf[0] << 8) | buf[1]; break; case 4: value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; break; default: return -1; } code = pc->value2code(value); if(code < 0) { ASN_DEBUG("Character %d (0x%02x) is" " not in map (%ld..%ld)", *buf, *buf, lb, ub); return -1; } if(per_put_few_bits(po, code, unit_bits)) return -1; } } /* Shortcut the no-op copying to the aligned structure */ if(lb == 0 && (unit_bits == 8 * bpc)) { return per_put_many_bits(po, buf, unit_bits * units); } for(ub -= lb; buf < end; buf += bpc) { int ch; uint32_t value; switch(bpc) { case 1: value = *(const uint8_t *)buf; break; case 2: value = (buf[0] << 8) | buf[1]; break; case 4: value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; break; default: return -1; } ch = value - lb; if(ch < 0 || ch > ub) { ASN_DEBUG("Character %d (0x%02x)" " is out of range (%ld..%ld)", *buf, *buf, lb, ub + lb); return -1; } if(per_put_few_bits(po, ch, unit_bits)) return -1; } return 0; } asn_dec_rval_t OCTET_STRING_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_per_constraints_t *pc = constraints ? constraints : td->per_constraints; asn_per_constraint_t *cval; asn_per_constraint_t *csiz; asn_dec_rval_t rval = { RC_OK, 0 }; BIT_STRING_t *st = (BIT_STRING_t *)*sptr; ssize_t consumed_myself = 0; int repeat; enum { OS__BPC_BIT = 0, OS__BPC_CHAR = 1, OS__BPC_U16 = 2, OS__BPC_U32 = 4 } bpc; /* Bytes per character */ unsigned int unit_bits; unsigned int canonical_unit_bits; (void)opt_codec_ctx; if(pc) { cval = &pc->value; csiz = &pc->size; } else { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; } switch(specs->subvariant) { default: case ASN_OSUBV_ANY: ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); RETURN(RC_FAIL); case ASN_OSUBV_BIT: canonical_unit_bits = unit_bits = 1; bpc = OS__BPC_BIT; break; case ASN_OSUBV_STR: canonical_unit_bits = unit_bits = 8; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_CHAR; break; case ASN_OSUBV_U16: canonical_unit_bits = unit_bits = 16; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U16; break; case ASN_OSUBV_U32: canonical_unit_bits = unit_bits = 32; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U32; break; } /* * Allocate the string. */ if(!st) { st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); if(!st) RETURN(RC_FAIL); } ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); if(csiz->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) RETURN(RC_WMORE); if(inext) { csiz = &asn_DEF_OCTET_STRING_constraints.size; cval = &asn_DEF_OCTET_STRING_constraints.value; unit_bits = canonical_unit_bits; } } if(csiz->effective_bits >= 0) { FREEMEM(st->buf); if(bpc) { st->size = csiz->upper_bound * bpc; } else { st->size = (csiz->upper_bound + 7) >> 3; } st->buf = (uint8_t *)MALLOC(st->size + 1); if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } } /* X.691, #16.5: zero-length encoding */ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ if(csiz->effective_bits == 0) { int ret; if(bpc) { ASN_DEBUG("Encoding OCTET STRING size %ld", csiz->upper_bound); ret = OCTET_STRING_per_get_characters(pd, st->buf, csiz->upper_bound, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); if(ret > 0) RETURN(RC_FAIL); } else { ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); ret = per_get_many_bits(pd, st->buf, 0, unit_bits * csiz->upper_bound); } if(ret < 0) RETURN(RC_WMORE); consumed_myself += unit_bits * csiz->upper_bound; st->buf[st->size] = 0; if(bpc == 0) { int ubs = (csiz->upper_bound & 0x7); st->bits_unused = ubs ? 8 - ubs : 0; } RETURN(RC_OK); } st->size = 0; do { ssize_t raw_len; ssize_t len_bytes; ssize_t len_bits; void *p; int ret; /* Get the PER length */ raw_len = uper_get_length(pd, csiz->effective_bits, &repeat); if(raw_len < 0) RETURN(RC_WMORE); raw_len += csiz->lower_bound; ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", (long)csiz->effective_bits, (long)raw_len, repeat ? "repeat" : "once", td->name); if(bpc) { len_bytes = raw_len * bpc; len_bits = len_bytes * unit_bits; } else { len_bits = raw_len; len_bytes = (len_bits + 7) >> 3; if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); /* len_bits be multiple of 16K if repeat is set */ } p = REALLOC(st->buf, st->size + len_bytes + 1); if(!p) RETURN(RC_FAIL); st->buf = (uint8_t *)p; if(bpc) { ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); if(ret > 0) RETURN(RC_FAIL); } else { ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); } if(ret < 0) RETURN(RC_WMORE); st->size += len_bytes; } while(repeat); st->buf[st->size] = 0; /* nul-terminate */ return rval; } asn_enc_rval_t OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_per_constraints_t *pc = constraints ? constraints : td->per_constraints; asn_per_constraint_t *cval; asn_per_constraint_t *csiz; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; asn_enc_rval_t er = { 0, 0, 0 }; int inext = 0; /* Lies not within extension root */ unsigned int unit_bits; unsigned int canonical_unit_bits; unsigned int sizeinunits; const uint8_t *buf; int ret; enum { OS__BPC_BIT = 0, OS__BPC_CHAR = 1, OS__BPC_U16 = 2, OS__BPC_U32 = 4 } bpc; /* Bytes per character */ int ct_extensible; if(!st || (!st->buf && st->size)) _ASN_ENCODE_FAILED; if(pc) { cval = &pc->value; csiz = &pc->size; } else { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; } ct_extensible = csiz->flags & APC_EXTENSIBLE; switch(specs->subvariant) { default: case ASN_OSUBV_ANY: _ASN_ENCODE_FAILED; case ASN_OSUBV_BIT: canonical_unit_bits = unit_bits = 1; bpc = OS__BPC_BIT; sizeinunits = st->size * 8 - (st->bits_unused & 0x07); ASN_DEBUG("BIT STRING of %d bytes, %d bits unused", sizeinunits, st->bits_unused); break; case ASN_OSUBV_STR: canonical_unit_bits = unit_bits = 8; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_CHAR; sizeinunits = st->size; break; case ASN_OSUBV_U16: canonical_unit_bits = unit_bits = 16; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U16; sizeinunits = st->size / 2; break; case ASN_OSUBV_U32: canonical_unit_bits = unit_bits = 32; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U32; sizeinunits = st->size / 4; break; } ASN_DEBUG("Encoding %s into %d units of %d bits" " (%ld..%ld, effective %d)%s", td->name, sizeinunits, unit_bits, csiz->lower_bound, csiz->upper_bound, csiz->effective_bits, ct_extensible ? " EXT" : ""); /* Figure out wheter size lies within PER visible constraint */ if(csiz->effective_bits >= 0) { if((int)sizeinunits < csiz->lower_bound || (int)sizeinunits > csiz->upper_bound) { if(ct_extensible) { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; unit_bits = canonical_unit_bits; inext = 1; } else _ASN_ENCODE_FAILED; } } else { inext = 0; } if(ct_extensible) { /* Declare whether length is [not] within extension root */ if(per_put_few_bits(po, inext, 1)) _ASN_ENCODE_FAILED; } /* X.691, #16.5: zero-length encoding */ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ if(csiz->effective_bits >= 0) { ASN_DEBUG("Encoding %d bytes (%ld), length in %d bits", st->size, sizeinunits - csiz->lower_bound, csiz->effective_bits); ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound, csiz->effective_bits); if(ret) _ASN_ENCODE_FAILED; if(bpc) { ret = OCTET_STRING_per_put_characters(po, st->buf, sizeinunits, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); } else { ret = per_put_many_bits(po, st->buf, sizeinunits * unit_bits); } if(ret) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } ASN_DEBUG("Encoding %d bytes", st->size); if(sizeinunits == 0) { if(uper_put_length(po, 0)) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } buf = st->buf; while(sizeinunits) { ssize_t maySave = uper_put_length(po, sizeinunits); if(maySave < 0) _ASN_ENCODE_FAILED; ASN_DEBUG("Encoding %ld of %ld", (long)maySave, (long)sizeinunits); if(bpc) { ret = OCTET_STRING_per_put_characters(po, buf, maySave, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); } else { ret = per_put_many_bits(po, buf, maySave * unit_bits); } if(ret) _ASN_ENCODE_FAILED; if(bpc) buf += maySave * bpc; else buf += maySave >> 3; sizeinunits -= maySave; assert(!(maySave & 0x07) || !sizeinunits); } _ASN_ENCODED_OK(er); } int OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { static const char *h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; char scratch[16 * 3 + 4]; char *p = scratch; uint8_t *buf; uint8_t *end; size_t i; (void)td; /* Unused argument */ if(!st || (!st->buf && st->size)) return (cb("", 8, app_key) < 0) ? -1 : 0; /* * Dump the contents of the buffer in hexadecimal. */ buf = st->buf; end = buf + st->size; for(i = 0; buf < end; buf++, i++) { if(!(i % 16) && (i || st->size > 16)) { if(cb(scratch, p - scratch, app_key) < 0) return -1; _i_INDENT(1); p = scratch; } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p > scratch) { p--; /* Remove the tail space */ if(cb(scratch, p - scratch, app_key) < 0) return -1; } return 0; } int OCTET_STRING_print_utf8(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st && (st->buf || !st->size)) { return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void OCTET_STRING_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_struct_ctx_t *ctx = (asn_struct_ctx_t *) ((char *)st + specs->ctx_offset); struct _stack *stck; if(!td || !st) return; ASN_DEBUG("Freeing %s as OCTET STRING", td->name); if(st->buf) { FREEMEM(st->buf); st->buf = 0; } /* * Remove decode-time stack. */ stck = (struct _stack *)ctx->ptr; if(stck) { while(stck->tail) { struct _stack_el *sel = stck->tail; stck->tail = sel->prev; FREEMEM(sel); } FREEMEM(stck); } if(!contents_only) { FREEMEM(st); } } /* * Conversion routines. */ int OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { void *buf; if(st == 0 || (str == 0 && len)) { errno = EINVAL; return -1; } /* * Clear the OCTET STRING. */ if(str == NULL) { FREEMEM(st->buf); st->buf = 0; st->size = 0; return 0; } /* Determine the original string size, if not explicitly given */ if(len < 0) len = strlen(str); /* Allocate and fill the memory */ buf = MALLOC(len + 1); if(buf == NULL) return -1; memcpy(buf, str, len); ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ FREEMEM(st->buf); st->buf = (uint8_t *)buf; st->size = len; return 0; } OCTET_STRING_t * OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; OCTET_STRING_t *st; st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); if(st && str && OCTET_STRING_fromBuf(st, str, len)) { FREEMEM(st); st = NULL; } return st; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandvervel.h0000644000175000017500000000147712576764164022621 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Horandvervel_H_ #define _Horandvervel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Horandvervel */ typedef struct Horandvervel { BIT_STRING_t verdirect; BIT_STRING_t bearing; BIT_STRING_t horspeed; BIT_STRING_t verspeed; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Horandvervel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Horandvervel; #ifdef __cplusplus } #endif #endif /* _Horandvervel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FrequencyInfoTDD.c0000644000175000017500000000345612576764164023265 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "FrequencyInfoTDD.h" static asn_TYPE_member_t asn_MBR_FrequencyInfoTDD_1[] = { { ATF_NOFLAGS, 0, offsetof(struct FrequencyInfoTDD, uarfcn_Nt), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UARFCN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "uarfcn-Nt" }, }; static ber_tlv_tag_t asn_DEF_FrequencyInfoTDD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_FrequencyInfoTDD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* uarfcn-Nt at 132 */ }; static asn_SEQUENCE_specifics_t asn_SPC_FrequencyInfoTDD_specs_1 = { sizeof(struct FrequencyInfoTDD), offsetof(struct FrequencyInfoTDD, _asn_ctx), asn_MAP_FrequencyInfoTDD_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 0, /* Start extensions */ 2 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_FrequencyInfoTDD = { "FrequencyInfoTDD", "FrequencyInfoTDD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FrequencyInfoTDD_tags_1, sizeof(asn_DEF_FrequencyInfoTDD_tags_1) /sizeof(asn_DEF_FrequencyInfoTDD_tags_1[0]), /* 1 */ asn_DEF_FrequencyInfoTDD_tags_1, /* Same as above */ sizeof(asn_DEF_FrequencyInfoTDD_tags_1) /sizeof(asn_DEF_FrequencyInfoTDD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_FrequencyInfoTDD_1, 1, /* Elements count */ &asn_SPC_FrequencyInfoTDD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NativeInteger.c0000644000175000017500000002077612576764164022724 0ustar carlescarles/*- * Copyright (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Read the NativeInteger.h for the explanation wrt. differences between * INTEGER and NativeInteger. * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this * implementation deals with the standard (machine-specific) representation * of them instead of using the platform-independent buffer. */ #include #include /* * NativeInteger basic type description. */ static ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeInteger = { "INTEGER", /* The ASN.1 type is still INTEGER */ "INTEGER", NativeInteger_free, NativeInteger_print, asn_generic_no_constraint, NativeInteger_decode_ber, NativeInteger_encode_der, NativeInteger_decode_xer, NativeInteger_encode_xer, NativeInteger_decode_uper, /* Unaligned PER decoder */ NativeInteger_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_NativeInteger_tags, sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), asn_DEF_NativeInteger_tags, /* Same as above */ sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Decode INTEGER type. */ asn_dec_rval_t NativeInteger_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **nint_ptr, const void *buf_ptr, size_t size, int tag_mode) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; long *native = (long *)*nint_ptr; asn_dec_rval_t rval; ber_tlv_len_t length; /* * If the structure is not there, allocate it. */ if(native == NULL) { native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); if(native == NULL) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } } ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", td->name, tag_mode); /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("%s length is %d bytes", td->name, (int)length); /* * Make sure we have this length. */ buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } /* * ASN.1 encoded INTEGER: buf_ptr, length * Fill the native, at the same time checking for overflow. * If overflow occured, return with RC_FAIL. */ { INTEGER_t tmp; union { const void *constbuf; void *nonconstbuf; } unconst_buf; long l; unconst_buf.constbuf = buf_ptr; tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; tmp.size = length; if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&tmp, &l) : asn_INTEGER2long(&tmp, &l)) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } *native = l; } rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", (long)rval.consumed, (long)length, td->name, (long)*native); return rval; } /* * Encode the NativeInteger using the standard INTEGER type DER encoder. */ asn_enc_rval_t NativeInteger_encode_der(asn_TYPE_descriptor_t *sd, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { unsigned long native = *(unsigned long *)ptr; /* Disable sign ext. */ asn_enc_rval_t erval; INTEGER_t tmp; #ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ tmp.buf = (uint8_t *)&native; tmp.size = sizeof(native); #else /* Works even if WORDS_BIGENDIAN is not set where should've been */ uint8_t buf[sizeof(native)]; uint8_t *p; /* Prepare a fake INTEGER */ for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) *p = (uint8_t)native; tmp.buf = buf; tmp.size = sizeof(buf); #endif /* WORDS_BIGENDIAN */ /* Encode fake INTEGER */ erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); if(erval.encoded == -1) { assert(erval.structure_ptr == &tmp); erval.structure_ptr = ptr; } return erval; } /* * Decode the chunk of XML text encoding INTEGER. */ asn_dec_rval_t NativeInteger_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval; INTEGER_t st; void *st_ptr = (void *)&st; long *native = (long *)*sptr; if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) _ASN_DECODE_FAILED; } memset(&st, 0, sizeof(st)); rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, opt_mname, buf_ptr, size); if(rval.code == RC_OK) { long l; if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&st, &l) : asn_INTEGER2long(&st, &l)) { rval.code = RC_FAIL; rval.consumed = 0; } else { *native = l; } } else { /* * Cannot restart from the middle; * there is no place to save state in the native type. * Request a continuation from the very beginning. */ rval.consumed = 0; } ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); return rval; } asn_enc_rval_t NativeInteger_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; char scratch[32]; /* Enough for 64-bit int */ asn_enc_rval_t er; const long *native = (const long *)sptr; (void)ilevel; (void)flags; if(!native) _ASN_ENCODE_FAILED; er.encoded = snprintf(scratch, sizeof(scratch), (specs && specs->field_unsigned) ? "%lu" : "%ld", *native); if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) || cb(scratch, er.encoded, app_key) < 0) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } asn_dec_rval_t NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval; long *native = (long *)*sptr; INTEGER_t tmpint; void *tmpintptr = &tmpint; (void)opt_codec_ctx; ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) _ASN_DECODE_FAILED; } memset(&tmpint, 0, sizeof tmpint); rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, &tmpintptr, pd); if(rval.code == RC_OK) { if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&tmpint, native) : asn_INTEGER2long(&tmpint, native)) rval.code = RC_FAIL; else ASN_DEBUG("NativeInteger %s got value %ld", td->name, *native); } ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); return rval; } asn_enc_rval_t NativeInteger_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; long native; INTEGER_t tmpint; if(!sptr) _ASN_ENCODE_FAILED; native = *(long *)sptr; ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); memset(&tmpint, 0, sizeof(tmpint)); if((specs&&specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) : asn_long2INTEGER(&tmpint, native)) _ASN_ENCODE_FAILED; er = INTEGER_encode_uper(td, constraints, &tmpint, po); ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); return er; } /* * INTEGER specific human-readable output. */ int NativeInteger_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; const long *native = (const long *)sptr; char scratch[32]; /* Enough for 64-bit int */ int ret; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(native) { ret = snprintf(scratch, sizeof(scratch), (specs && specs->field_unsigned) ? "%lu" : "%ld", *native); assert(ret > 0 && (size_t)ret < sizeof(scratch)); return (cb(scratch, ret, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void NativeInteger_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(!td || !ptr) return; ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", td->name, contents_only, ptr); if(!contents_only) { FREEMEM(ptr); } } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TimeslotISCP.h0000644000175000017500000000162612576764164022435 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _TimeslotISCP_H_ #define _TimeslotISCP_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TimeslotISCP */ typedef long TimeslotISCP_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TimeslotISCP; asn_struct_free_f TimeslotISCP_free; asn_struct_print_f TimeslotISCP_print; asn_constr_check_f TimeslotISCP_constraint; ber_type_decoder_f TimeslotISCP_decode_ber; der_type_encoder_f TimeslotISCP_encode_der; xer_type_decoder_f TimeslotISCP_decode_xer; xer_type_encoder_f TimeslotISCP_encode_xer; per_type_decoder_f TimeslotISCP_decode_uper; per_type_encoder_f TimeslotISCP_encode_uper; #ifdef __cplusplus } #endif #endif /* _TimeslotISCP_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellParametersID.c0000644000175000017500000001145412576764164023271 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CellParametersID.h" int CellParametersID_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void CellParametersID_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void CellParametersID_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { CellParametersID_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int CellParametersID_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t CellParametersID_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t CellParametersID_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t CellParametersID_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t CellParametersID_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t CellParametersID_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t CellParametersID_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { CellParametersID_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_CellParametersID_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_CellParametersID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_CellParametersID = { "CellParametersID", "CellParametersID", CellParametersID_free, CellParametersID_print, CellParametersID_constraint, CellParametersID_decode_ber, CellParametersID_encode_der, CellParametersID_decode_xer, CellParametersID_encode_xer, CellParametersID_decode_uper, CellParametersID_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CellParametersID_tags_1, sizeof(asn_DEF_CellParametersID_tags_1) /sizeof(asn_DEF_CellParametersID_tags_1[0]), /* 1 */ asn_DEF_CellParametersID_tags_1, /* Same as above */ sizeof(asn_DEF_CellParametersID_tags_1) /sizeof(asn_DEF_CellParametersID_tags_1[0]), /* 1 */ &asn_PER_type_CellParametersID_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Status.c0000644000175000017500000001154012576764164021430 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Status.h" int Status_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void Status_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void Status_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { Status_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int Status_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { Status_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t Status_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { Status_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t Status_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { Status_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t Status_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { Status_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t Status_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { Status_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t Status_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { Status_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t Status_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { Status_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_Status_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_Status_value2enum_1[] = { { 0, 5, "stale" }, { 1, 7, "current" }, { 2, 7, "unknown" } /* This list is extensible */ }; static unsigned int asn_MAP_Status_enum2value_1[] = { 1, /* current(1) */ 0, /* stale(0) */ 2 /* unknown(2) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_Status_specs_1 = { asn_MAP_Status_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_Status_enum2value_1, /* N => "tag"; sorted by N */ 3, /* Number of elements in the maps */ 4, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_Status_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Status = { "Status", "Status", Status_free, Status_print, Status_constraint, Status_decode_ber, Status_encode_der, Status_decode_xer, Status_encode_xer, Status_decode_uper, Status_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Status_tags_1, sizeof(asn_DEF_Status_tags_1) /sizeof(asn_DEF_Status_tags_1[0]), /* 1 */ asn_DEF_Status_tags_1, /* Same as above */ sizeof(asn_DEF_Status_tags_1) /sizeof(asn_DEF_Status_tags_1[0]), /* 1 */ &asn_PER_type_Status_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_Status_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/VisibleString.c0000644000175000017500000000427512576764164022740 0ustar carlescarles/*- * Copyright (c) 2003, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include /* * VisibleString basic type description. */ static ber_tlv_tag_t asn_DEF_VisibleString_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ }; static asn_per_constraints_t asn_DEF_VisibleString_constraints = { { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ 0, 0 }; asn_TYPE_descriptor_t asn_DEF_VisibleString = { "VisibleString", "VisibleString", OCTET_STRING_free, OCTET_STRING_print_utf8, /* ASCII subset */ VisibleString_constraint, OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ OCTET_STRING_encode_der, OCTET_STRING_decode_xer_utf8, OCTET_STRING_encode_xer_utf8, OCTET_STRING_decode_uper, OCTET_STRING_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_VisibleString_tags, sizeof(asn_DEF_VisibleString_tags) / sizeof(asn_DEF_VisibleString_tags[0]) - 1, asn_DEF_VisibleString_tags, sizeof(asn_DEF_VisibleString_tags) / sizeof(asn_DEF_VisibleString_tags[0]), &asn_DEF_VisibleString_constraints, 0, 0, /* No members */ 0 /* No specifics */ }; int VisibleString_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const VisibleString_t *st = (const VisibleString_t *)sptr; if(st && st->buf) { uint8_t *buf = st->buf; uint8_t *end = buf + st->size; /* * Check the alphabet of the VisibleString. * ISO646, ISOReg#6 * The alphabet is a subset of ASCII between the space * and "~" (tilde). */ for(; buf < end; buf++) { if(*buf < 0x20 || *buf > 0x7e) { _ASN_CTFAIL(app_key, td, sptr, "%s: value byte %ld (%d) " "not in VisibleString alphabet (%s:%d)", td->name, (long)((buf - st->buf) + 1), *buf, __FILE__, __LINE__); return -1; } } } else { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity4.h0000644000175000017500000000163412576764164022503 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-RESPONSE" * found in "../supl-response.asn" */ #ifndef _KeyIdentity4_H_ #define _KeyIdentity4_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* KeyIdentity4 */ typedef BIT_STRING_t KeyIdentity4_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_KeyIdentity4; asn_struct_free_f KeyIdentity4_free; asn_struct_print_f KeyIdentity4_print; asn_constr_check_f KeyIdentity4_constraint; ber_type_decoder_f KeyIdentity4_decode_ber; der_type_encoder_f KeyIdentity4_encode_der; xer_type_decoder_f KeyIdentity4_decode_xer; xer_type_encoder_f KeyIdentity4_encode_xer; per_type_decoder_f KeyIdentity4_decode_uper; per_type_encoder_f KeyIdentity4_encode_uper; #ifdef __cplusplus } #endif #endif /* _KeyIdentity4_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GsmCellInformation.h0000644000175000017500000000172612576764164023713 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _GsmCellInformation_H_ #define _GsmCellInformation_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct NMR; /* GsmCellInformation */ typedef struct GsmCellInformation { long refMCC; long refMNC; long refLAC; long refCI; struct NMR *nMR /* OPTIONAL */; long *tA /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GsmCellInformation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GsmCellInformation; #ifdef __cplusplus } #endif /* Referred external types */ #include "NMR.h" #endif /* _GsmCellInformation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/AltitudeInfo.c0000644000175000017500000002213712576764164022540 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "AltitudeInfo.h" static int altitudeDirection_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void altitudeDirection_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } static void altitudeDirection_2_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { altitudeDirection_2_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } static int altitudeDirection_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } static asn_dec_rval_t altitudeDirection_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } static asn_enc_rval_t altitudeDirection_2_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } static asn_dec_rval_t altitudeDirection_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } static asn_enc_rval_t altitudeDirection_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } static asn_dec_rval_t altitudeDirection_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } static asn_enc_rval_t altitudeDirection_2_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { altitudeDirection_2_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static int memb_altitude_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_altUncertainty_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_type_altitudeDirection_constr_2 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_altitude_constr_5 = { { APC_CONSTRAINED, 15, 15, 0, 32767 } /* (0..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_altUncertainty_constr_6 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_altitudeDirection_value2enum_2[] = { { 0, 6, "height" }, { 1, 5, "depth" } }; static unsigned int asn_MAP_altitudeDirection_enum2value_2[] = { 1, /* depth(1) */ 0 /* height(0) */ }; static asn_INTEGER_specifics_t asn_SPC_altitudeDirection_specs_2 = { asn_MAP_altitudeDirection_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_altitudeDirection_enum2value_2, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_altitudeDirection_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_altitudeDirection_2 = { "altitudeDirection", "altitudeDirection", altitudeDirection_2_free, altitudeDirection_2_print, altitudeDirection_2_constraint, altitudeDirection_2_decode_ber, altitudeDirection_2_encode_der, altitudeDirection_2_decode_xer, altitudeDirection_2_encode_xer, altitudeDirection_2_decode_uper, altitudeDirection_2_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_altitudeDirection_tags_2, sizeof(asn_DEF_altitudeDirection_tags_2) /sizeof(asn_DEF_altitudeDirection_tags_2[0]) - 1, /* 1 */ asn_DEF_altitudeDirection_tags_2, /* Same as above */ sizeof(asn_DEF_altitudeDirection_tags_2) /sizeof(asn_DEF_altitudeDirection_tags_2[0]), /* 2 */ &asn_PER_type_altitudeDirection_constr_2, 0, 0, /* Defined elsewhere */ &asn_SPC_altitudeDirection_specs_2 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_AltitudeInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AltitudeInfo, altitudeDirection), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_altitudeDirection_2, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "altitudeDirection" }, { ATF_NOFLAGS, 0, offsetof(struct AltitudeInfo, altitude), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_altitude_constraint_1, &asn_PER_memb_altitude_constr_5, 0, "altitude" }, { ATF_NOFLAGS, 0, offsetof(struct AltitudeInfo, altUncertainty), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_altUncertainty_constraint_1, &asn_PER_memb_altUncertainty_constr_6, 0, "altUncertainty" }, }; static ber_tlv_tag_t asn_DEF_AltitudeInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AltitudeInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* altitudeDirection at 86 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* altitude at 87 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* altUncertainty at 88 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AltitudeInfo_specs_1 = { sizeof(struct AltitudeInfo), offsetof(struct AltitudeInfo, _asn_ctx), asn_MAP_AltitudeInfo_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AltitudeInfo = { "AltitudeInfo", "AltitudeInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AltitudeInfo_tags_1, sizeof(asn_DEF_AltitudeInfo_tags_1) /sizeof(asn_DEF_AltitudeInfo_tags_1[0]), /* 1 */ asn_DEF_AltitudeInfo_tags_1, /* Same as above */ sizeof(asn_DEF_AltitudeInfo_tags_1) /sizeof(asn_DEF_AltitudeInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AltitudeInfo_1, 3, /* Elements count */ &asn_SPC_AltitudeInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NMR.c0000644000175000017500000000270012576764164020577 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "NMR.h" static asn_per_constraints_t asn_PER_type_NMR_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_NMR_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_NMRelement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_NMR_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_NMR_specs_1 = { sizeof(struct NMR), offsetof(struct NMR, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_NMR = { "NMR", "NMR", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NMR_tags_1, sizeof(asn_DEF_NMR_tags_1) /sizeof(asn_DEF_NMR_tags_1[0]), /* 1 */ asn_DEF_NMR_tags_1, /* Same as above */ sizeof(asn_DEF_NMR_tags_1) /sizeof(asn_DEF_NMR_tags_1[0]), /* 1 */ &asn_PER_type_NMR_constr_1, asn_MBR_NMR_1, 1, /* Single element */ &asn_SPC_NMR_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellMeasuredResultsList.h0000644000175000017500000000162012576764164024733 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CellMeasuredResultsList_H_ #define _CellMeasuredResultsList_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct CellMeasuredResults; /* CellMeasuredResultsList */ typedef struct CellMeasuredResultsList { A_SEQUENCE_OF(struct CellMeasuredResults) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } CellMeasuredResultsList_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CellMeasuredResultsList; #ifdef __cplusplus } #endif /* Referred external types */ #include "CellMeasuredResults.h" #endif /* _CellMeasuredResultsList_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/AltitudeInfo.h0000644000175000017500000000205512576764164022542 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _AltitudeInfo_H_ #define _AltitudeInfo_H_ #include /* Including external dependencies */ #include #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum altitudeDirection { altitudeDirection_height = 0, altitudeDirection_depth = 1 } e_altitudeDirection; /* AltitudeInfo */ typedef struct AltitudeInfo { ENUMERATED_t altitudeDirection; long altitude; long altUncertainty; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AltitudeInfo_t; /* Implementation */ /* extern asn_TYPE_descriptor_t asn_DEF_altitudeDirection_2; // (Use -fall-defs-global to expose) */ extern asn_TYPE_descriptor_t asn_DEF_AltitudeInfo; #ifdef __cplusplus } #endif #endif /* _AltitudeInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLSTART.c0000644000175000017500000000466312576764164021556 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #include "SUPLSTART.h" static asn_TYPE_member_t asn_MBR_SUPLSTART_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SUPLSTART, sETCapabilities), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SETCapabilities, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sETCapabilities" }, { ATF_NOFLAGS, 0, offsetof(struct SUPLSTART, locationId), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_LocationId, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "locationId" }, { ATF_POINTER, 1, offsetof(struct SUPLSTART, qoP), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_QoP, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "qoP" }, }; static int asn_MAP_SUPLSTART_oms_1[] = { 2 }; static ber_tlv_tag_t asn_DEF_SUPLSTART_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SUPLSTART_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sETCapabilities at 10 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* locationId at 11 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* qoP at 12 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SUPLSTART_specs_1 = { sizeof(struct SUPLSTART), offsetof(struct SUPLSTART, _asn_ctx), asn_MAP_SUPLSTART_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_SUPLSTART_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SUPLSTART = { "SUPLSTART", "SUPLSTART", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SUPLSTART_tags_1, sizeof(asn_DEF_SUPLSTART_tags_1) /sizeof(asn_DEF_SUPLSTART_tags_1[0]), /* 1 */ asn_DEF_SUPLSTART_tags_1, /* Same as above */ sizeof(asn_DEF_SUPLSTART_tags_1) /sizeof(asn_DEF_SUPLSTART_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SUPLSTART_1, 3, /* Elements count */ &asn_SPC_SUPLSTART_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellInfo.h0000644000175000017500000000220412576764164021642 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CellInfo_H_ #define _CellInfo_H_ #include /* Including external dependencies */ #include "GsmCellInformation.h" #include "WcdmaCellInformation.h" #include "CdmaCellInformation.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum CellInfo_PR { CellInfo_PR_NOTHING, /* No components present */ CellInfo_PR_gsmCell, CellInfo_PR_wcdmaCell, CellInfo_PR_cdmaCell, /* Extensions may appear below */ } CellInfo_PR; /* CellInfo */ typedef struct CellInfo { CellInfo_PR present; union CellInfo_u { GsmCellInformation_t gsmCell; WcdmaCellInformation_t wcdmaCell; CdmaCellInformation_t cdmaCell; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } CellInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CellInfo; #ifdef __cplusplus } #endif #endif /* _CellInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETCapabilities.c0000644000175000017500000000500312576764164023107 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #include "SETCapabilities.h" static asn_TYPE_member_t asn_MBR_SETCapabilities_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SETCapabilities, posTechnology), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PosTechnology, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posTechnology" }, { ATF_NOFLAGS, 0, offsetof(struct SETCapabilities, prefMethod), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PrefMethod, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "prefMethod" }, { ATF_NOFLAGS, 0, offsetof(struct SETCapabilities, posProtocol), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PosProtocol, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posProtocol" }, }; static ber_tlv_tag_t asn_DEF_SETCapabilities_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SETCapabilities_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* posTechnology at 16 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* prefMethod at 17 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* posProtocol at 18 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SETCapabilities_specs_1 = { sizeof(struct SETCapabilities), offsetof(struct SETCapabilities, _asn_ctx), asn_MAP_SETCapabilities_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SETCapabilities = { "SETCapabilities", "SETCapabilities", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SETCapabilities_tags_1, sizeof(asn_DEF_SETCapabilities_tags_1) /sizeof(asn_DEF_SETCapabilities_tags_1[0]), /* 1 */ asn_DEF_SETCapabilities_tags_1, /* Same as above */ sizeof(asn_DEF_SETCapabilities_tags_1) /sizeof(asn_DEF_SETCapabilities_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SETCapabilities_1, 3, /* Elements count */ &asn_SPC_SETCapabilities_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/INTEGER.c0000644000175000017500000005435412576764164021254 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* Encoder and decoder of a primitive type */ #include /* * INTEGER basic type description. */ static ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_INTEGER = { "INTEGER", "INTEGER", ASN__PRIMITIVE_TYPE_free, INTEGER_print, asn_generic_no_constraint, ber_decode_primitive, INTEGER_encode_der, INTEGER_decode_xer, INTEGER_encode_xer, INTEGER_decode_uper, /* Unaligned PER decoder */ INTEGER_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_INTEGER_tags, sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), asn_DEF_INTEGER_tags, /* Same as above */ sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Encode INTEGER type using DER. */ asn_enc_rval_t INTEGER_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { INTEGER_t *st = (INTEGER_t *)sptr; ASN_DEBUG("%s %s as INTEGER (tm=%d)", cb?"Encoding":"Estimating", td->name, tag_mode); /* * Canonicalize integer in the buffer. * (Remove too long sign extension, remove some first 0x00 bytes) */ if(st->buf) { uint8_t *buf = st->buf; uint8_t *end1 = buf + st->size - 1; int shift; /* Compute the number of superfluous leading bytes */ for(; buf < end1; buf++) { /* * If the contents octets of an integer value encoding * consist of more than one octet, then the bits of the * first octet and bit 8 of the second octet: * a) shall not all be ones; and * b) shall not all be zero. */ switch(*buf) { case 0x00: if((buf[1] & 0x80) == 0) continue; break; case 0xff: if((buf[1] & 0x80)) continue; break; } break; } /* Remove leading superfluous bytes from the integer */ shift = buf - st->buf; if(shift) { uint8_t *nb = st->buf; uint8_t *end; st->size -= shift; /* New size, minus bad bytes */ end = nb + st->size; for(; nb < end; nb++, buf++) *nb = *buf; } } /* if(1) */ return der_encode_primitive(td, sptr, tag_mode, tag, cb, app_key); } static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop); /* * INTEGER specific human-readable output. */ static ssize_t INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; char scratch[32]; /* Enough for 64-bit integer */ uint8_t *buf = st->buf; uint8_t *buf_end = st->buf + st->size; signed long accum; ssize_t wrote = 0; char *p; int ret; /* * Advance buf pointer until the start of the value's body. * This will make us able to process large integers using simple case, * when the actual value is small * (0x0000000000abcdef would yield a fine 0x00abcdef) */ /* Skip the insignificant leading bytes */ for(; buf < buf_end-1; buf++) { switch(*buf) { case 0x00: if((buf[1] & 0x80) == 0) continue; break; case 0xff: if((buf[1] & 0x80) != 0) continue; break; } break; } /* Simple case: the integer size is small */ if((size_t)(buf_end - buf) <= sizeof(accum)) { const asn_INTEGER_enum_map_t *el; size_t scrsize; char *scr; if(buf == buf_end) { accum = 0; } else { accum = (*buf & 0x80) ? -1 : 0; for(; buf < buf_end; buf++) accum = (accum << 8) | *buf; } el = INTEGER_map_value2enum(specs, accum); if(el) { scrsize = el->enum_len + 32; scr = (char *)alloca(scrsize); if(plainOrXER == 0) ret = snprintf(scr, scrsize, "%ld (%s)", accum, el->enum_name); else ret = snprintf(scr, scrsize, "<%s/>", el->enum_name); } else if(plainOrXER && specs && specs->strict_enumeration) { ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); errno = EPERM; return -1; } else { scrsize = sizeof(scratch); scr = scratch; ret = snprintf(scr, scrsize, (specs && specs->field_unsigned) ?"%lu":"%ld", accum); } assert(ret > 0 && (size_t)ret < scrsize); return (cb(scr, ret, app_key) < 0) ? -1 : ret; } else if(plainOrXER && specs && specs->strict_enumeration) { /* * Here and earlier, we cannot encode the ENUMERATED values * if there is no corresponding identifier. */ ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); errno = EPERM; return -1; } /* Output in the long xx:yy:zz... format */ /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ for(p = scratch; buf < buf_end; buf++) { static const char *h2c = "0123456789ABCDEF"; if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { /* Flush buffer */ if(cb(scratch, p - scratch, app_key) < 0) return -1; wrote += p - scratch; p = scratch; } *p++ = h2c[*buf >> 4]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x3a; /* ":" */ } if(p != scratch) p--; /* Remove the last ":" */ wrote += p - scratch; return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; } /* * INTEGER specific human-readable output. */ int INTEGER_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const INTEGER_t *st = (const INTEGER_t *)sptr; ssize_t ret; (void)td; (void)ilevel; if(!st || !st->buf) ret = cb("", 8, app_key); else ret = INTEGER__dump(td, st, cb, app_key, 0); return (ret < 0) ? -1 : 0; } struct e2v_key { const char *start; const char *stop; asn_INTEGER_enum_map_t *vemap; unsigned int *evmap; }; static int INTEGER__compar_enum2value(const void *kp, const void *am) { const struct e2v_key *key = (const struct e2v_key *)kp; const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; const char *ptr, *end, *name; /* Remap the element (sort by different criterion) */ el = key->vemap + key->evmap[el - key->vemap]; /* Compare strings */ for(ptr = key->start, end = key->stop, name = el->enum_name; ptr < end; ptr++, name++) { if(*ptr != *name) return *(const unsigned char *)ptr - *(const unsigned char *)name; } return name[0] ? -1 : 0; } static const asn_INTEGER_enum_map_t * INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop) { asn_INTEGER_enum_map_t *el_found; int count = specs ? specs->map_count : 0; struct e2v_key key; const char *lp; if(!count) return NULL; /* Guaranteed: assert(lstart < lstop); */ /* Figure out the tag name */ for(lstart++, lp = lstart; lp < lstop; lp++) { switch(*lp) { case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ case 0x2f: /* '/' */ case 0x3e: /* '>' */ break; default: continue; } break; } if(lp == lstop) return NULL; /* No tag found */ lstop = lp; key.start = lstart; key.stop = lstop; key.vemap = specs->value2enum; key.evmap = specs->enum2value; el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, specs->value2enum, count, sizeof(specs->value2enum[0]), INTEGER__compar_enum2value); if(el_found) { /* Remap enum2value into value2enum */ el_found = key.vemap + key.evmap[el_found - key.vemap]; } return el_found; } static int INTEGER__compar_value2enum(const void *kp, const void *am) { long a = *(const long *)kp; const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; long b = el->nat_value; if(a < b) return -1; else if(a == b) return 0; else return 1; } const asn_INTEGER_enum_map_t * INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value) { int count = specs ? specs->map_count : 0; if(!count) return 0; return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, count, sizeof(specs->value2enum[0]), INTEGER__compar_value2enum); } static int INTEGER_st_prealloc(INTEGER_t *st, int min_size) { void *p = MALLOC(min_size + 1); if(p) { void *b = st->buf; st->size = 0; st->buf = p; FREEMEM(b); return 0; } else { return -1; } } /* * Decode the chunk of XML text encoding INTEGER. */ static enum xer_pbd_rval INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { INTEGER_t *st = (INTEGER_t *)sptr; long sign = 1; long value; const char *lp; const char *lstart = (const char *)chunk_buf; const char *lstop = lstart + chunk_size; enum { ST_SKIPSPACE, ST_SKIPSPHEX, ST_WAITDIGITS, ST_DIGITS, ST_HEXDIGIT1, ST_HEXDIGIT2, ST_HEXCOLON, ST_EXTRASTUFF } state = ST_SKIPSPACE; if(chunk_size) ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", (long)chunk_size, *lstart, lstop[-1]); /* * We may have received a tag here. It will be processed inline. * Use strtoul()-like code and serialize the result. */ for(value = 0, lp = lstart; lp < lstop; lp++) { int lv = *lp; switch(lv) { case 0x09: case 0x0a: case 0x0d: case 0x20: switch(state) { case ST_SKIPSPACE: case ST_SKIPSPHEX: continue; case ST_HEXCOLON: if(xer_is_whitespace(lp, lstop - lp)) { lp = lstop - 1; continue; } break; default: break; } break; case 0x2d: /* '-' */ if(state == ST_SKIPSPACE) { sign = -1; state = ST_WAITDIGITS; continue; } break; case 0x2b: /* '+' */ if(state == ST_SKIPSPACE) { state = ST_WAITDIGITS; continue; } break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: switch(state) { case ST_DIGITS: break; case ST_SKIPSPHEX: /* Fall through */ case ST_HEXDIGIT1: value = (lv - 0x30) << 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: value += (lv - 0x30); state = ST_HEXCOLON; st->buf[st->size++] = (uint8_t)value; continue; case ST_HEXCOLON: return XPBD_BROKEN_ENCODING; default: state = ST_DIGITS; break; } { long new_value = value * 10; if(new_value / 10 != value) /* Overflow */ return XPBD_DECODER_LIMIT; value = new_value + (lv - 0x30); /* Check for two's complement overflow */ if(value < 0) { /* Check whether it is a LONG_MIN */ if(sign == -1 && (unsigned long)value == ~((unsigned long)-1 >> 1)) { sign = 1; } else { /* Overflow */ return XPBD_DECODER_LIMIT; } } } continue; case 0x3c: /* '<' */ if(state == ST_SKIPSPACE) { const asn_INTEGER_enum_map_t *el; el = INTEGER_map_enum2value( (asn_INTEGER_specifics_t *) td->specifics, lstart, lstop); if(el) { ASN_DEBUG("Found \"%s\" => %ld", el->enum_name, el->nat_value); state = ST_DIGITS; value = el->nat_value; lp = lstop - 1; continue; } ASN_DEBUG("Unknown identifier for INTEGER"); } return XPBD_BROKEN_ENCODING; case 0x3a: /* ':' */ if(state == ST_HEXCOLON) { /* This colon is expected */ state = ST_HEXDIGIT1; continue; } else if(state == ST_DIGITS) { /* The colon here means that we have * decoded the first two hexadecimal * places as a decimal value. * Switch decoding mode. */ ASN_DEBUG("INTEGER re-evaluate as hex form"); if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; lp = lstart - 1; continue; } else { ASN_DEBUG("state %d at %d", state, lp - lstart); break; } /* [A-Fa-f] */ case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: switch(state) { case ST_SKIPSPHEX: case ST_SKIPSPACE: /* Fall through */ case ST_HEXDIGIT1: value = lv - ((lv < 0x61) ? 0x41 : 0x61); value += 10; value <<= 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: value += lv - ((lv < 0x61) ? 0x41 : 0x61); value += 10; st->buf[st->size++] = (uint8_t)value; state = ST_HEXCOLON; continue; case ST_DIGITS: ASN_DEBUG("INTEGER re-evaluate as hex form"); if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; lp = lstart - 1; continue; default: break; } break; } /* Found extra non-numeric stuff */ ASN_DEBUG("Found non-numeric 0x%2x at %d", lv, lp - lstart); state = ST_EXTRASTUFF; break; } switch(state) { case ST_DIGITS: /* Everything is cool */ break; case ST_HEXCOLON: st->buf[st->size] = 0; /* Just in case termination */ return XPBD_BODY_CONSUMED; case ST_HEXDIGIT1: case ST_HEXDIGIT2: case ST_SKIPSPHEX: return XPBD_BROKEN_ENCODING; default: if(xer_is_whitespace(lp, lstop - lp)) { if(state != ST_EXTRASTUFF) return XPBD_NOT_BODY_IGNORE; break; } else { ASN_DEBUG("INTEGER: No useful digits (state %d)", state); return XPBD_BROKEN_ENCODING; /* No digits */ } break; } value *= sign; /* Change sign, if needed */ if(asn_long2INTEGER(st, value)) return XPBD_SYSTEM_FAILURE; return XPBD_BODY_CONSUMED; } asn_dec_rval_t INTEGER_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(INTEGER_t), opt_mname, buf_ptr, size, INTEGER__xer_body_decode); } asn_enc_rval_t INTEGER_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const INTEGER_t *st = (const INTEGER_t *)sptr; asn_enc_rval_t er; (void)ilevel; (void)flags; if(!st || !st->buf) _ASN_ENCODE_FAILED; er.encoded = INTEGER__dump(td, st, cb, app_key, 1); if(er.encoded < 0) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } asn_dec_rval_t INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval = { RC_OK, 0 }; INTEGER_t *st = (INTEGER_t *)*sptr; asn_per_constraint_t *ct; int repeat; (void)opt_codec_ctx; if(!st) { st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); if(!st) _ASN_DECODE_FAILED; } if(!constraints) constraints = td->per_constraints; ct = constraints ? &constraints->value : 0; if(ct && ct->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) _ASN_DECODE_STARVED; if(inext) ct = 0; } FREEMEM(st->buf); st->buf = 0; st->size = 0; if(ct) { if(ct->flags & APC_SEMI_CONSTRAINED) { st->buf = (uint8_t *)CALLOC(1, 2); if(!st->buf) _ASN_DECODE_FAILED; st->size = 1; } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { size_t size = (ct->range_bits + 7) >> 3; st->buf = (uint8_t *)MALLOC(1 + size + 1); if(!st->buf) _ASN_DECODE_FAILED; st->size = size; } } /* X.691, #12.2.2 */ if(ct && ct->flags != APC_UNCONSTRAINED) { /* #10.5.6 */ ASN_DEBUG("Integer with range %d bits", ct->range_bits); if(ct->range_bits >= 0) { long value; if(ct->range_bits == 32) { long lhalf; value = per_get_few_bits(pd, 16); if(value < 0) _ASN_DECODE_STARVED; lhalf = per_get_few_bits(pd, 16); if(lhalf < 0) _ASN_DECODE_STARVED; value = (value << 16) | lhalf; } else { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) _ASN_DECODE_STARVED; } ASN_DEBUG("Got value %ld + low %ld", value, ct->lower_bound); value += ct->lower_bound; if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(st, value) : asn_long2INTEGER(st, value)) _ASN_DECODE_FAILED; return rval; } } else { ASN_DEBUG("Decoding unconstrained integer %s", td->name); } /* X.691, #12.2.3, #12.2.4 */ do { ssize_t len; void *p; int ret; /* Get the PER length */ len = uper_get_length(pd, -1, &repeat); if(len < 0) _ASN_DECODE_STARVED; p = REALLOC(st->buf, st->size + len + 1); if(!p) _ASN_DECODE_FAILED; st->buf = (uint8_t *)p; ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); if(ret < 0) _ASN_DECODE_STARVED; st->size += len; } while(repeat); st->buf[st->size] = 0; /* JIC */ /* #12.2.3 */ if(ct && ct->lower_bound) { /* * TODO: replace by in-place arithmetics. */ long value; if(asn_INTEGER2long(st, &value)) _ASN_DECODE_FAILED; if(asn_long2INTEGER(st, value + ct->lower_bound)) _ASN_DECODE_FAILED; } return rval; } asn_enc_rval_t INTEGER_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; INTEGER_t *st = (INTEGER_t *)sptr; const uint8_t *buf; const uint8_t *end; asn_per_constraint_t *ct; long value = 0; if(!st || st->size == 0) _ASN_ENCODE_FAILED; if(!constraints) constraints = td->per_constraints; ct = constraints ? &constraints->value : 0; er.encoded = 0; if(ct) { int inext = 0; if(specs && specs->field_unsigned) { unsigned long uval; if(asn_INTEGER2ulong(st, &uval)) _ASN_ENCODE_FAILED; /* Check proper range */ if(ct->flags & APC_SEMI_CONSTRAINED) { if(uval < (unsigned long)ct->lower_bound) inext = 1; } else if(ct->range_bits >= 0) { if(uval < (unsigned long)ct->lower_bound || uval > (unsigned long)ct->upper_bound) inext = 1; } ASN_DEBUG("Value %lu (%02x/%d) lb %lu ub %lu %s", uval, st->buf[0], st->size, ct->lower_bound, ct->upper_bound, inext ? "ext" : "fix"); value = uval; } else { if(asn_INTEGER2long(st, &value)) _ASN_ENCODE_FAILED; /* Check proper range */ if(ct->flags & APC_SEMI_CONSTRAINED) { if(value < ct->lower_bound) inext = 1; } else if(ct->range_bits >= 0) { if(value < ct->lower_bound || value > ct->upper_bound) inext = 1; } ASN_DEBUG("Value %ld (%02x/%d) lb %ld ub %ld %s", value, st->buf[0], st->size, ct->lower_bound, ct->upper_bound, inext ? "ext" : "fix"); } if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, inext, 1)) _ASN_ENCODE_FAILED; if(inext) ct = 0; } else if(inext) { _ASN_ENCODE_FAILED; } } /* X.691, #12.2.2 */ if(ct && ct->range_bits >= 0) { /* #10.5.6 */ ASN_DEBUG("Encoding integer with range %d bits", ct->range_bits); if(ct->range_bits == 32) { /* TODO: extend to >32 bits */ long v = value - ct->lower_bound; if(per_put_few_bits(po, v >> 1, 31) || per_put_few_bits(po, v, 1)) _ASN_ENCODE_FAILED; } else { if(per_put_few_bits(po, value - ct->lower_bound, ct->range_bits)) _ASN_ENCODE_FAILED; } _ASN_ENCODED_OK(er); } if(ct && ct->lower_bound) { ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); /* TODO: adjust lower bound */ _ASN_ENCODE_FAILED; } for(buf = st->buf, end = st->buf + st->size; buf < end;) { ssize_t mayEncode = uper_put_length(po, end - buf); if(mayEncode < 0) _ASN_ENCODE_FAILED; if(per_put_many_bits(po, buf, 8 * mayEncode)) _ASN_ENCODE_FAILED; buf += mayEncode; } _ASN_ENCODED_OK(er); } int asn_INTEGER2long(const INTEGER_t *iptr, long *lptr) { uint8_t *b, *end; size_t size; long l; /* Sanity checking */ if(!iptr || !iptr->buf || !lptr) { errno = EINVAL; return -1; } /* Cache the begin/end of the buffer */ b = iptr->buf; /* Start of the INTEGER buffer */ size = iptr->size; end = b + size; /* Where to stop */ if(size > sizeof(long)) { uint8_t *end1 = end - 1; /* * Slightly more advanced processing, * able to >sizeof(long) bytes, * when the actual value is small * (0x0000000000abcdef would yield a fine 0x00abcdef) */ /* Skip out the insignificant leading bytes */ for(; b < end1; b++) { switch(*b) { case 0x00: if((b[1] & 0x80) == 0) continue; break; case 0xff: if((b[1] & 0x80) != 0) continue; break; } break; } size = end - b; if(size > sizeof(long)) { /* Still cannot fit the long */ errno = ERANGE; return -1; } } /* Shortcut processing of a corner case */ if(end == b) { *lptr = 0; return 0; } /* Perform the sign initialization */ /* Actually l = -(*b >> 7); gains nothing, yet unreadable! */ if((*b >> 7)) l = -1; else l = 0; /* Conversion engine */ for(; b < end; b++) l = (l << 8) | *b; *lptr = l; return 0; } int asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *lptr) { uint8_t *b, *end; unsigned long l; size_t size; if(!iptr || !iptr->buf || !lptr) { errno = EINVAL; return -1; } b = iptr->buf; size = iptr->size; end = b + size; /* If all extra leading bytes are zeroes, ignore them */ for(; size > sizeof(unsigned long); b++, size--) { if(*b) { /* Value won't fit unsigned long */ errno = ERANGE; return -1; } } /* Conversion engine */ for(l = 0; b < end; b++) l = (l << 8) | *b; *lptr = l; return 0; } int asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { uint8_t *buf; uint8_t *end; uint8_t *b; int shr; if(value <= LONG_MAX) return asn_long2INTEGER(st, value); buf = (uint8_t *)MALLOC(1 + sizeof(value)); if(!buf) return -1; end = buf + (sizeof(value) + 1); buf[0] = 0; for(b = buf + 1, shr = (sizeof(long)-1)*8; b < end; shr -= 8, b++) *b = (uint8_t)(value >> shr); if(st->buf) FREEMEM(st->buf); st->buf = buf; st->size = 1 + sizeof(value); return 0; } int asn_long2INTEGER(INTEGER_t *st, long value) { uint8_t *buf, *bp; uint8_t *p; uint8_t *pstart; uint8_t *pend1; int littleEndian = 1; /* Run-time detection */ int add; if(!st) { errno = EINVAL; return -1; } buf = (uint8_t *)MALLOC(sizeof(value)); if(!buf) return -1; if(*(char *)&littleEndian) { pstart = (uint8_t *)&value + sizeof(value) - 1; pend1 = (uint8_t *)&value; add = -1; } else { pstart = (uint8_t *)&value; pend1 = pstart + sizeof(value) - 1; add = 1; } /* * If the contents octet consists of more than one octet, * then bits of the first octet and bit 8 of the second octet: * a) shall not all be ones; and * b) shall not all be zero. */ for(p = pstart; p != pend1; p += add) { switch(*p) { case 0x00: if((*(p+add) & 0x80) == 0) continue; break; case 0xff: if((*(p+add) & 0x80)) continue; break; } break; } /* Copy the integer body */ for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) *bp++ = *p; if(st->buf) FREEMEM(st->buf); st->buf = buf; st->size = bp - buf; return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horvel.c0000644000175000017500000000706112576764164021407 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Horvel.h" static int memb_bearing_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 9)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_horspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_bearing_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 9, 9 } /* (SIZE(9..9)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_horspeed_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Horvel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Horvel, bearing), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_bearing_constraint_1, &asn_PER_memb_bearing_constr_2, 0, "bearing" }, { ATF_NOFLAGS, 0, offsetof(struct Horvel, horspeed), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_horspeed_constraint_1, &asn_PER_memb_horspeed_constr_3, 0, "horspeed" }, }; static ber_tlv_tag_t asn_DEF_Horvel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Horvel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bearing at 233 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* horspeed at 234 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Horvel_specs_1 = { sizeof(struct Horvel), offsetof(struct Horvel, _asn_ctx), asn_MAP_Horvel_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Horvel = { "Horvel", "Horvel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Horvel_tags_1, sizeof(asn_DEF_Horvel_tags_1) /sizeof(asn_DEF_Horvel_tags_1[0]), /* 1 */ asn_DEF_Horvel_tags_1, /* Same as above */ sizeof(asn_DEF_Horvel_tags_1) /sizeof(asn_DEF_Horvel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Horvel_1, 2, /* Elements count */ &asn_SPC_Horvel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLPOS.h0000644000175000017500000000152712576764164021323 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS" * found in "../supl-pos.asn" */ #ifndef _SUPLPOS_H_ #define _SUPLPOS_H_ #include /* Including external dependencies */ #include "PosPayLoad.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Velocity; /* SUPLPOS */ typedef struct SUPLPOS { PosPayLoad_t posPayLoad; struct Velocity *velocity /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SUPLPOS_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SUPLPOS; #ifdef __cplusplus } #endif /* Referred external types */ #include "Velocity.h" #endif /* _SUPLPOS_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandvervel.c0000644000175000017500000001375412576764164022615 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Horandvervel.h" static int memb_verdirect_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_bearing_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 9)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_horspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_verspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_verdirect_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_bearing_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 9, 9 } /* (SIZE(9..9)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_horspeed_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_verspeed_constr_5 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Horandvervel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Horandvervel, verdirect), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_verdirect_constraint_1, &asn_PER_memb_verdirect_constr_2, 0, "verdirect" }, { ATF_NOFLAGS, 0, offsetof(struct Horandvervel, bearing), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_bearing_constraint_1, &asn_PER_memb_bearing_constr_3, 0, "bearing" }, { ATF_NOFLAGS, 0, offsetof(struct Horandvervel, horspeed), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_horspeed_constraint_1, &asn_PER_memb_horspeed_constr_4, 0, "horspeed" }, { ATF_NOFLAGS, 0, offsetof(struct Horandvervel, verspeed), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_verspeed_constraint_1, &asn_PER_memb_verspeed_constr_5, 0, "verspeed" }, }; static ber_tlv_tag_t asn_DEF_Horandvervel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Horandvervel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* verdirect at 238 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bearing at 239 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* horspeed at 240 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* verspeed at 241 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Horandvervel_specs_1 = { sizeof(struct Horandvervel), offsetof(struct Horandvervel, _asn_ctx), asn_MAP_Horandvervel_tag2el_1, 4, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 3, /* Start extensions */ 5 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Horandvervel = { "Horandvervel", "Horandvervel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Horandvervel_tags_1, sizeof(asn_DEF_Horandvervel_tags_1) /sizeof(asn_DEF_Horandvervel_tags_1[0]), /* 1 */ asn_DEF_Horandvervel_tags_1, /* Same as above */ sizeof(asn_DEF_Horandvervel_tags_1) /sizeof(asn_DEF_Horandvervel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Horandvervel_1, 4, /* Elements count */ &asn_SPC_Horandvervel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horveluncert.h0000644000175000017500000000145012576764164022631 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Horveluncert_H_ #define _Horveluncert_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Horveluncert */ typedef struct Horveluncert { BIT_STRING_t bearing; BIT_STRING_t horspeed; BIT_STRING_t uncertspeed; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Horveluncert_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Horveluncert; #ifdef __cplusplus } #endif #endif /* _Horveluncert_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IA5String.h0000644000175000017500000000102212576764164021711 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _IA5String_H_ #define _IA5String_H_ #include #ifdef __cplusplus extern "C" { #endif typedef OCTET_STRING_t IA5String_t; /* Implemented via OCTET STRING */ /* * IA5String ASN.1 type definition. */ extern asn_TYPE_descriptor_t asn_DEF_IA5String; asn_constr_check_f IA5String_constraint; #ifdef __cplusplus } #endif #endif /* _IA5String_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrefMethod.c0000644000175000017500000001201712576764164022202 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #include "PrefMethod.h" int PrefMethod_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void PrefMethod_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void PrefMethod_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { PrefMethod_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int PrefMethod_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t PrefMethod_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t PrefMethod_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t PrefMethod_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t PrefMethod_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t PrefMethod_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t PrefMethod_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { PrefMethod_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_PrefMethod_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_PrefMethod_value2enum_1[] = { { 0, 24, "agpsSETassistedPreferred" }, { 1, 21, "agpsSETBasedPreferred" }, { 2, 12, "noPreference" } }; static unsigned int asn_MAP_PrefMethod_enum2value_1[] = { 1, /* agpsSETBasedPreferred(1) */ 0, /* agpsSETassistedPreferred(0) */ 2 /* noPreference(2) */ }; static asn_INTEGER_specifics_t asn_SPC_PrefMethod_specs_1 = { asn_MAP_PrefMethod_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_PrefMethod_enum2value_1, /* N => "tag"; sorted by N */ 3, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_PrefMethod_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_PrefMethod = { "PrefMethod", "PrefMethod", PrefMethod_free, PrefMethod_print, PrefMethod_constraint, PrefMethod_decode_ber, PrefMethod_encode_der, PrefMethod_decode_xer, PrefMethod_encode_xer, PrefMethod_decode_uper, PrefMethod_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PrefMethod_tags_1, sizeof(asn_DEF_PrefMethod_tags_1) /sizeof(asn_DEF_PrefMethod_tags_1[0]), /* 1 */ asn_DEF_PrefMethod_tags_1, /* Same as above */ sizeof(asn_DEF_PrefMethod_tags_1) /sizeof(asn_DEF_PrefMethod_tags_1[0]), /* 1 */ &asn_PER_type_PrefMethod_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_PrefMethod_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GeneralizedTime.c0000644000175000017500000003610612576764164023222 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #define _POSIX_PTHREAD_SEMANTICS /* for Sun */ #define _REENTRANT /* for Sun */ #include #include #include #ifdef __CYGWIN__ #include "/usr/include/time.h" #else #include #endif /* __CYGWIN__ */ #if defined(WIN32) #pragma message( "PLEASE STOP AND READ!") #pragma message( " localtime_r is implemented via localtime(), which may be not thread-safe.") #pragma message( " gmtime_r is implemented via gmtime(), which may be not thread-safe.") #pragma message( " ") #pragma message( " You must fix the code by inserting appropriate locking") #pragma message( " if you want to use asn_GT2time() or asn_UT2time().") #pragma message( "PLEASE STOP AND READ!") static struct tm *localtime_r(const time_t *tloc, struct tm *result) { struct tm *tm; if((tm = localtime(tloc))) return memcpy(result, tm, sizeof(struct tm)); return 0; } static struct tm *gmtime_r(const time_t *tloc, struct tm *result) { struct tm *tm; if((tm = gmtime(tloc))) return memcpy(result, tm, sizeof(struct tm)); return 0; } #define tzset() _tzset() #define putenv(c) _putenv(c) #define _EMULATE_TIMEGM #endif /* WIN32 */ #if defined(sun) || defined(_sun_) || defined(__solaris__) #define _EMULATE_TIMEGM #endif /* * Where to look for offset from GMT, Phase I. * Several platforms are known. */ #if defined(__FreeBSD__) \ || (defined(__GNUC__) && defined(__APPLE_CC__)) \ || (defined __GLIBC__ && __GLIBC__ >= 2) #undef HAVE_TM_GMTOFF #define HAVE_TM_GMTOFF #endif /* BSDs and newer glibc */ /* * Where to look for offset from GMT, Phase II. */ #ifdef HAVE_TM_GMTOFF #define GMTOFF(tm) ((tm).tm_gmtoff) #else /* HAVE_TM_GMTOFF */ #define GMTOFF(tm) (-timezone) #endif /* HAVE_TM_GMTOFF */ #if (defined(_EMULATE_TIMEGM) || !defined(HAVE_TM_GMTOFF)) #warning "PLEASE STOP AND READ!" #warning " timegm() is implemented via getenv(\"TZ\")/setenv(\"TZ\"), which may be not thread-safe." #warning " " #warning " You must fix the code by inserting appropriate locking" #warning " if you want to use asn_GT2time() or asn_UT2time()." #warning "PLEASE STOP AND READ!" #endif /* _EMULATE_TIMEGM */ /* * Override our GMTOFF decision for other known platforms. */ #ifdef __CYGWIN__ #undef GMTOFF static long GMTOFF(struct tm a){ struct tm *lt; time_t local_time, gmt_time; long zone; tzset(); gmt_time = time (NULL); lt = gmtime(&gmt_time); local_time = mktime(lt); return (gmt_time - local_time); } #define _EMULATE_TIMEGM #endif /* __CYGWIN__ */ #define ATZVARS do { \ char tzoldbuf[64]; \ char *tzold #define ATZSAVETZ do { \ tzold = getenv("TZ"); \ if(tzold) { \ size_t tzlen = strlen(tzold); \ if(tzlen < sizeof(tzoldbuf)) { \ tzold = memcpy(tzoldbuf, tzold, tzlen + 1); \ } else { \ char *dupptr = tzold; \ tzold = MALLOC(tzlen + 1); \ if(tzold) memcpy(tzold, dupptr, tzlen + 1); \ } \ setenv("TZ", "UTC", 1); \ } \ tzset(); \ } while(0) #define ATZOLDTZ do { \ if (tzold) { \ setenv("TZ", tzold, 1); \ *tzoldbuf = 0; \ if(tzold != tzoldbuf) \ FREEMEM(tzold); \ } else { \ unsetenv("TZ"); \ } \ tzset(); \ } while(0); } while(0); #ifdef _EMULATE_TIMEGM static time_t timegm(struct tm *tm) { time_t tloc; ATZVARS; ATZSAVETZ; tloc = mktime(tm); ATZOLDTZ; return tloc; } #endif /* _EMULATE_TIMEGM */ #ifndef __ASN_INTERNAL_TEST_MODE__ /* * GeneralizedTime basic type description. */ static ber_tlv_tag_t asn_DEF_GeneralizedTime_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (24 << 2)), /* [UNIVERSAL 24] IMPLICIT ...*/ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ }; static asn_per_constraints_t asn_DEF_GeneralizedTime_constraints = { { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ 0, 0 }; asn_TYPE_descriptor_t asn_DEF_GeneralizedTime = { "GeneralizedTime", "GeneralizedTime", OCTET_STRING_free, GeneralizedTime_print, GeneralizedTime_constraint, /* Check validity of time */ OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ GeneralizedTime_encode_der, OCTET_STRING_decode_xer_utf8, GeneralizedTime_encode_xer, OCTET_STRING_decode_uper, OCTET_STRING_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GeneralizedTime_tags, sizeof(asn_DEF_GeneralizedTime_tags) / sizeof(asn_DEF_GeneralizedTime_tags[0]) - 2, asn_DEF_GeneralizedTime_tags, sizeof(asn_DEF_GeneralizedTime_tags) / sizeof(asn_DEF_GeneralizedTime_tags[0]), &asn_DEF_GeneralizedTime_constraints, 0, 0, /* No members */ 0 /* No specifics */ }; #endif /* __ASN_INTERNAL_TEST_MODE__ */ /* * Check that the time looks like the time. */ int GeneralizedTime_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const GeneralizedTime_t *st = (const GeneralizedTime_t *)sptr; time_t tloc; errno = EPERM; /* Just an unlikely error code */ tloc = asn_GT2time(st, 0, 0); if(tloc == -1 && errno != EPERM) { _ASN_CTFAIL(app_key, td, sptr, "%s: Invalid time format: %s (%s:%d)", td->name, strerror(errno), __FILE__, __LINE__); return -1; } return 0; } asn_enc_rval_t GeneralizedTime_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GeneralizedTime_t *st = (GeneralizedTime_t *)sptr; asn_enc_rval_t erval; int fv, fd; /* seconds fraction value and number of digits */ struct tm tm; time_t tloc; /* * Encode as a canonical DER. */ errno = EPERM; tloc = asn_GT2time_frac(st, &fv, &fd, &tm, 1); /* Recognize time */ if(tloc == -1 && errno != EPERM) /* Failed to recognize time. Fail completely. */ _ASN_ENCODE_FAILED; st = asn_time2GT_frac(0, &tm, fv, fd, 1); /* Save time canonically */ if(!st) _ASN_ENCODE_FAILED; /* Memory allocation failure. */ erval = OCTET_STRING_encode_der(td, st, tag_mode, tag, cb, app_key); FREEMEM(st->buf); FREEMEM(st); return erval; } #ifndef __ASN_INTERNAL_TEST_MODE__ asn_enc_rval_t GeneralizedTime_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { if(flags & XER_F_CANONICAL) { GeneralizedTime_t *gt; asn_enc_rval_t rv; int fv, fd; /* fractional parts */ struct tm tm; errno = EPERM; if(asn_GT2time_frac((GeneralizedTime_t *)sptr, &fv, &fd, &tm, 1) == -1 && errno != EPERM) _ASN_ENCODE_FAILED; gt = asn_time2GT_frac(0, &tm, fv, fd, 1); if(!gt) _ASN_ENCODE_FAILED; rv = OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, cb, app_key); ASN_STRUCT_FREE(asn_DEF_GeneralizedTime, gt); return rv; } else { return OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, cb, app_key); } } #endif /* __ASN_INTERNAL_TEST_MODE__ */ int GeneralizedTime_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const GeneralizedTime_t *st = (const GeneralizedTime_t *)sptr; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st && st->buf) { char buf[32]; struct tm tm; int ret; errno = EPERM; if(asn_GT2time(st, &tm, 1) == -1 && errno != EPERM) return (cb("", 11, app_key) < 0) ? -1 : 0; ret = snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d (GMT)", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); assert(ret > 0 && ret < (int)sizeof(buf)); return (cb(buf, ret, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } time_t asn_GT2time(const GeneralizedTime_t *st, struct tm *ret_tm, int as_gmt) { return asn_GT2time_frac(st, 0, 0, ret_tm, as_gmt); } time_t asn_GT2time_prec(const GeneralizedTime_t *st, int *frac_value, int frac_digits, struct tm *ret_tm, int as_gmt) { time_t tloc; int fv, fd = 0; if(frac_value) tloc = asn_GT2time_frac(st, &fv, &fd, ret_tm, as_gmt); else return asn_GT2time_frac(st, 0, 0, ret_tm, as_gmt); if(fd == 0 || frac_digits <= 0) { *frac_value = 0; } else { while(fd > frac_digits) fv /= 10, fd--; while(fd < frac_digits) { int new_fv = fv * 10; if(new_fv / 10 != fv) { /* Too long precision request */ fv = 0; break; } fv = new_fv, fd++; } *frac_value = fv; } return tloc; } time_t asn_GT2time_frac(const GeneralizedTime_t *st, int *frac_value, int *frac_digits, struct tm *ret_tm, int as_gmt) { struct tm tm_s; uint8_t *buf; uint8_t *end; int gmtoff_h = 0; int gmtoff_m = 0; int gmtoff = 0; /* h + m */ int offset_specified = 0; int fvalue = 0; int fdigits = 0; time_t tloc; if(!st || !st->buf) { errno = EINVAL; return -1; } else { buf = st->buf; end = buf + st->size; } if(st->size < 10) { errno = EINVAL; return -1; } /* * Decode first 10 bytes: "AAAAMMJJhh" */ memset(&tm_s, 0, sizeof(tm_s)); #undef B2F #undef B2T #define B2F(var) do { \ unsigned ch = *buf; \ if(ch < 0x30 || ch > 0x39) { \ errno = EINVAL; \ return -1; \ } else { \ var = var * 10 + (ch - 0x30); \ buf++; \ } \ } while(0) #define B2T(var) B2F(tm_s.var) B2T(tm_year); /* 1: A */ B2T(tm_year); /* 2: A */ B2T(tm_year); /* 3: A */ B2T(tm_year); /* 4: A */ B2T(tm_mon); /* 5: M */ B2T(tm_mon); /* 6: M */ B2T(tm_mday); /* 7: J */ B2T(tm_mday); /* 8: J */ B2T(tm_hour); /* 9: h */ B2T(tm_hour); /* 0: h */ if(buf == end) goto local_finish; /* * Parse [mm[ss[(.|,)ffff]]] * ^^ */ switch(*buf) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: tm_s.tm_min = (*buf++) - 0x30; if(buf == end) { errno = EINVAL; return -1; } B2T(tm_min); break; case 0x2B: case 0x2D: /* +, - */ goto offset; case 0x5A: /* Z */ goto utc_finish; default: errno = EINVAL; return -1; } if(buf == end) goto local_finish; /* * Parse [mm[ss[(.|,)ffff]]] * ^^ */ switch(*buf) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: tm_s.tm_sec = (*buf++) - 0x30; if(buf == end) { errno = EINVAL; return -1; } B2T(tm_sec); break; case 0x2B: case 0x2D: /* +, - */ goto offset; case 0x5A: /* Z */ goto utc_finish; default: errno = EINVAL; return -1; } if(buf == end) goto local_finish; /* * Parse [mm[ss[(.|,)ffff]]] * ^ ^ */ switch(*buf) { case 0x2C: case 0x2E: /* (.|,) */ /* * Process fractions of seconds. */ for(buf++; buf < end; buf++) { int v = *buf; int new_fvalue; switch(v) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: new_fvalue = fvalue * 10 + (v - 0x30); if(new_fvalue / 10 != fvalue) { /* Not enough precision, ignore */ } else { fvalue = new_fvalue; fdigits++; } continue; default: break; } break; } } if(buf == end) goto local_finish; switch(*buf) { case 0x2B: case 0x2D: /* +, - */ goto offset; case 0x5A: /* Z */ goto utc_finish; default: errno = EINVAL; return -1; } offset: if(end - buf < 3) { errno = EINVAL; return -1; } buf++; B2F(gmtoff_h); B2F(gmtoff_h); if(buf[-3] == 0x2D) /* Negative */ gmtoff = -1; else gmtoff = 1; if((end - buf) == 2) { B2F(gmtoff_m); B2F(gmtoff_m); } else if(end != buf) { errno = EINVAL; return -1; } gmtoff = gmtoff * (3600 * gmtoff_h + 60 * gmtoff_m); /* Fall through */ utc_finish: offset_specified = 1; /* Fall through */ local_finish: /* * Validation. */ if((tm_s.tm_mon > 12 || tm_s.tm_mon < 1) || (tm_s.tm_mday > 31 || tm_s.tm_mday < 1) || (tm_s.tm_hour > 23) || (tm_s.tm_sec > 60) ) { errno = EINVAL; return -1; } /* Canonicalize */ tm_s.tm_mon -= 1; /* 0 - 11 */ tm_s.tm_year -= 1900; tm_s.tm_isdst = -1; tm_s.tm_sec -= gmtoff; /*** AT THIS POINT tm_s is either GMT or local (unknown) ****/ if(offset_specified) { tloc = timegm(&tm_s); } else { /* * Without an offset (or "Z"), * we can only guess that it is a local zone. * Interpret it in this fashion. */ tloc = mktime(&tm_s); } if(tloc == -1) { errno = EINVAL; return -1; } if(ret_tm) { if(as_gmt) { if(offset_specified) { *ret_tm = tm_s; } else { if(gmtime_r(&tloc, ret_tm) == 0) { errno = EINVAL; return -1; } } } else { if(localtime_r(&tloc, ret_tm) == 0) { errno = EINVAL; return -1; } } } /* Fractions of seconds */ if(frac_value) *frac_value = fvalue; if(frac_digits) *frac_digits = fdigits; return tloc; } GeneralizedTime_t * asn_time2GT(GeneralizedTime_t *opt_gt, const struct tm *tm, int force_gmt) { return asn_time2GT_frac(opt_gt, tm, 0, 0, force_gmt); } GeneralizedTime_t * asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, int frac_value, int frac_digits, int force_gmt) { struct tm tm_s; long gmtoff; const unsigned int buf_size = 4 + 2 + 2 /* yyyymmdd */ + 2 + 2 + 2 /* hhmmss */ + 1 + 6 /* .ffffff */ + 1 + 4 /* +hhmm */ + 1 /* '\0' */ ; char *buf; char *p; int size; /* Check arguments */ if(!tm) { errno = EINVAL; return 0; } /* Pre-allocate a buffer of sufficient yet small length */ buf = (char *)MALLOC(buf_size); if(!buf) return 0; gmtoff = GMTOFF(*tm); if(force_gmt && gmtoff) { tm_s = *tm; tm_s.tm_sec -= gmtoff; timegm(&tm_s); /* Fix the time */ tm = &tm_s; #ifdef HAVE_TM_GMTOFF assert(!GMTOFF(tm_s)); /* Will fix itself */ #else /* !HAVE_TM_GMTOFF */ gmtoff = 0; #endif } size = snprintf(buf, buf_size, "%04d%02d%02d%02d%02d%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec ); if(size != 14) { /* Could be assert(size == 14); */ FREEMEM(buf); errno = EINVAL; return 0; } p = buf + size; /* * Deal with fractions. */ if(frac_value > 0 && frac_digits > 0) { char *end = p + 1 + 6; /* '.' + maximum 6 digits */ char *z = p; long fbase; *z++ = '.'; /* Place bounds on precision */ while(frac_digits-- > 6) frac_value /= 10; /* emulate fbase = pow(10, frac_digits) */ for(fbase = 1; frac_digits--;) fbase *= 10; do { int digit = frac_value / fbase; if(digit > 9) { z = 0; break; } *z++ = digit + 0x30; frac_value %= fbase; fbase /= 10; } while(fbase > 0 && frac_value > 0 && z < end); if(z) { for(--z; *z == 0x30; --z); /* Strip zeroes */ p = z + (*z != '.'); size = p - buf; } } if(force_gmt) { *p++ = 0x5a; /* "Z" */ *p++ = 0; size++; } else { int ret; gmtoff %= 86400; ret = snprintf(p, buf_size - size, "%+03ld%02ld", gmtoff / 3600, labs(gmtoff % 3600) / 60); if(ret != 5) { FREEMEM(buf); errno = EINVAL; return 0; } size += ret; } if(opt_gt) { if(opt_gt->buf) FREEMEM(opt_gt->buf); } else { opt_gt = (GeneralizedTime_t *)CALLOC(1, sizeof *opt_gt); if(!opt_gt) { FREEMEM(buf); return 0; } } opt_gt->buf = (unsigned char *)buf; opt_gt->size = size; return opt_gt; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-RSCP.c0000644000175000017500000001107412576764164021542 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "CPICH-RSCP.h" int CPICH_RSCP_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void CPICH_RSCP_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void CPICH_RSCP_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int CPICH_RSCP_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t CPICH_RSCP_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t CPICH_RSCP_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t CPICH_RSCP_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t CPICH_RSCP_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t CPICH_RSCP_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t CPICH_RSCP_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { CPICH_RSCP_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_CPICH_RSCP_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_CPICH_RSCP_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_CPICH_RSCP = { "CPICH-RSCP", "CPICH-RSCP", CPICH_RSCP_free, CPICH_RSCP_print, CPICH_RSCP_constraint, CPICH_RSCP_decode_ber, CPICH_RSCP_encode_der, CPICH_RSCP_decode_xer, CPICH_RSCP_encode_xer, CPICH_RSCP_decode_uper, CPICH_RSCP_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CPICH_RSCP_tags_1, sizeof(asn_DEF_CPICH_RSCP_tags_1) /sizeof(asn_DEF_CPICH_RSCP_tags_1[0]), /* 1 */ asn_DEF_CPICH_RSCP_tags_1, /* Same as above */ sizeof(asn_DEF_CPICH_RSCP_tags_1) /sizeof(asn_DEF_CPICH_RSCP_tags_1[0]), /* 1 */ &asn_PER_type_CPICH_RSCP_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosMethod.h0000644000175000017500000000234012576764164022052 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _PosMethod_H_ #define _PosMethod_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum PosMethod { PosMethod_agpsSETassisted = 0, PosMethod_agpsSETbased = 1, PosMethod_agpsSETassistedpref = 2, PosMethod_agpsSETbasedpref = 3, PosMethod_autonomousGPS = 4, PosMethod_aFLT = 5, PosMethod_eCID = 6, PosMethod_eOTD = 7, PosMethod_oTDOA = 8, PosMethod_noPosition = 9 /* * Enumeration is extensible */ } e_PosMethod; /* PosMethod */ typedef ENUMERATED_t PosMethod_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PosMethod; asn_struct_free_f PosMethod_free; asn_struct_print_f PosMethod_print; asn_constr_check_f PosMethod_constraint; ber_type_decoder_f PosMethod_decode_ber; der_type_encoder_f PosMethod_encode_der; xer_type_decoder_f PosMethod_decode_xer; xer_type_encoder_f PosMethod_encode_xer; per_type_decoder_f PosMethod_decode_uper; per_type_encoder_f PosMethod_encode_uper; #ifdef __cplusplus } #endif #endif /* _PosMethod_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MeasuredResultsList.h0000644000175000017500000000155012576764164024135 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _MeasuredResultsList_H_ #define _MeasuredResultsList_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct MeasuredResults; /* MeasuredResultsList */ typedef struct MeasuredResultsList { A_SEQUENCE_OF(struct MeasuredResults) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MeasuredResultsList_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MeasuredResultsList; #ifdef __cplusplus } #endif /* Referred external types */ #include "MeasuredResults.h" #endif /* _MeasuredResultsList_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCPICH-Info.c0000644000175000017500000000513412576764164023232 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "PrimaryCPICH-Info.h" static int memb_primaryScramblingCode_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 511)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_primaryScramblingCode_constr_2 = { { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_PrimaryCPICH_Info_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PrimaryCPICH_Info, primaryScramblingCode), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_primaryScramblingCode_constraint_1, &asn_PER_memb_primaryScramblingCode_constr_2, 0, "primaryScramblingCode" }, }; static ber_tlv_tag_t asn_DEF_PrimaryCPICH_Info_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_PrimaryCPICH_Info_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* primaryScramblingCode at 186 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PrimaryCPICH_Info_specs_1 = { sizeof(struct PrimaryCPICH_Info), offsetof(struct PrimaryCPICH_Info, _asn_ctx), asn_MAP_PrimaryCPICH_Info_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PrimaryCPICH_Info = { "PrimaryCPICH-Info", "PrimaryCPICH-Info", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PrimaryCPICH_Info_tags_1, sizeof(asn_DEF_PrimaryCPICH_Info_tags_1) /sizeof(asn_DEF_PrimaryCPICH_Info_tags_1[0]), /* 1 */ asn_DEF_PrimaryCPICH_Info_tags_1, /* Same as above */ sizeof(asn_DEF_PrimaryCPICH_Info_tags_1) /sizeof(asn_DEF_PrimaryCPICH_Info_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PrimaryCPICH_Info_1, 1, /* Elements count */ &asn_SPC_PrimaryCPICH_Info_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UTRA-CarrierRSSI.h0000644000175000017500000000172212576764164023014 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _UTRA_CarrierRSSI_H_ #define _UTRA_CarrierRSSI_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* UTRA-CarrierRSSI */ typedef long UTRA_CarrierRSSI_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_UTRA_CarrierRSSI; asn_struct_free_f UTRA_CarrierRSSI_free; asn_struct_print_f UTRA_CarrierRSSI_print; asn_constr_check_f UTRA_CarrierRSSI_constraint; ber_type_decoder_f UTRA_CarrierRSSI_decode_ber; der_type_encoder_f UTRA_CarrierRSSI_encode_der; xer_type_decoder_f UTRA_CarrierRSSI_decode_xer; xer_type_encoder_f UTRA_CarrierRSSI_encode_xer; per_type_decoder_f UTRA_CarrierRSSI_decode_uper; per_type_encoder_f UTRA_CarrierRSSI_encode_uper; #ifdef __cplusplus } #endif #endif /* _UTRA_CarrierRSSI_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_application.h0000644000175000017500000000271612576764164023323 0ustar carlescarles/*- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Application-level ASN.1 callbacks. */ #ifndef _ASN_APPLICATION_H_ #define _ASN_APPLICATION_H_ #include "asn_system.h" /* for platform-dependent types */ #include "asn_codecs.h" /* for ASN.1 codecs specifics */ #ifdef __cplusplus extern "C" { #endif /* * Generic type of an application-defined callback to return various * types of data to the application. * EXPECTED RETURN VALUES: * -1: Failed to consume bytes. Abort the mission. * Non-negative return values indicate success, and ignored. */ typedef int (asn_app_consume_bytes_f)(const void *buffer, size_t size, void *application_specific_key); /* * A callback of this type is called whenever constraint validation fails * on some ASN.1 type. See "constraints.h" for more details on constraint * validation. * This callback specifies a descriptor of the ASN.1 type which failed * the constraint check, as well as human readable message on what * particular constraint has failed. */ typedef void (asn_app_constraint_failed_f)(void *application_specific_key, struct asn_TYPE_descriptor_s *type_descriptor_which_failed, const void *structure_which_failed_ptr, const char *error_message_format, ...) GCC_PRINTFLIKE(4, 5); #ifdef __cplusplus } #endif #include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ #endif /* _ASN_APPLICATION_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SLPMode.h0000644000175000017500000000165312576764164021421 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _SLPMode_H_ #define _SLPMode_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SLPMode { SLPMode_proxy = 0, SLPMode_nonProxy = 1 } e_SLPMode; /* SLPMode */ typedef ENUMERATED_t SLPMode_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SLPMode; asn_struct_free_f SLPMode_free; asn_struct_print_f SLPMode_print; asn_constr_check_f SLPMode_constraint; ber_type_decoder_f SLPMode_decode_ber; der_type_encoder_f SLPMode_encode_der; xer_type_decoder_f SLPMode_decode_xer; xer_type_encoder_f SLPMode_encode_xer; per_type_decoder_f SLPMode_decode_uper; per_type_encoder_f SLPMode_encode_uper; #ifdef __cplusplus } #endif #endif /* _SLPMode_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CdmaCellInformation.h0000644000175000017500000000163712576764164024032 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CdmaCellInformation_H_ #define _CdmaCellInformation_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* CdmaCellInformation */ typedef struct CdmaCellInformation { long refNID; long refSID; long refBASEID; long refBASELAT; long reBASELONG; long refREFPN; long refWeekNumber; long refSeconds; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } CdmaCellInformation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CdmaCellInformation; #ifdef __cplusplus } #endif #endif /* _CdmaCellInformation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SLPAddress.c0000644000175000017500000000377012576764164022117 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "SLPAddress.h" static asn_per_constraints_t asn_PER_type_SLPAddress_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SLPAddress_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SLPAddress, choice.iPAddress), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_IPAddress, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "iPAddress" }, { ATF_NOFLAGS, 0, offsetof(struct SLPAddress, choice.fQDN), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FQDN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fQDN" }, }; static asn_TYPE_tag2member_t asn_MAP_SLPAddress_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iPAddress at 44 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fQDN at 45 */ }; static asn_CHOICE_specifics_t asn_SPC_SLPAddress_specs_1 = { sizeof(struct SLPAddress), offsetof(struct SLPAddress, _asn_ctx), offsetof(struct SLPAddress, present), sizeof(((struct SLPAddress *)0)->present), asn_MAP_SLPAddress_tag2el_1, 2, /* Count of tags in the map */ 0, 2 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_SLPAddress = { "SLPAddress", "SLPAddress", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_SLPAddress_constr_1, asn_MBR_SLPAddress_1, 2, /* Elements count */ &asn_SPC_SLPAddress_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SetSessionID.h0000644000175000017500000000131312576764164022463 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _SetSessionID_H_ #define _SetSessionID_H_ #include /* Including external dependencies */ #include #include "SETId.h" #include #ifdef __cplusplus extern "C" { #endif /* SetSessionID */ typedef struct SetSessionID { long sessionId; SETId_t setId; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SetSessionID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SetSessionID; #ifdef __cplusplus } #endif #endif /* _SetSessionID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLINIT.h0000644000175000017500000000224112576764164021417 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _SUPLINIT_H_ #define _SUPLINIT_H_ #include /* Including external dependencies */ #include "PosMethod.h" #include "SLPMode.h" #include "MAC.h" #include "KeyIdentity.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Notification; struct SLPAddress; struct QoP; /* SUPLINIT */ typedef struct SUPLINIT { PosMethod_t posMethod; struct Notification *notification /* OPTIONAL */; struct SLPAddress *sLPAddress /* OPTIONAL */; struct QoP *qoP /* OPTIONAL */; SLPMode_t sLPMode; MAC_t *mAC /* OPTIONAL */; KeyIdentity_t *keyIdentity /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SUPLINIT_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SUPLINIT; #ifdef __cplusplus } #endif /* Referred external types */ #include "Notification.h" #include "SLPAddress.h" #include "QoP.h" #endif /* _SUPLINIT_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_SEQUENCE.h0000644000175000017500000000276412576764164022762 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SEQUENCE_H_ #define _CONSTR_SEQUENCE_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct asn_SEQUENCE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ /* * Tags to members mapping table (sorted). */ asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* * Optional members of the extensions root (roms) or additions (aoms). * Meaningful for PER. */ int *oms; /* Optional MemberS */ int roms_count; /* Root optional members count */ int aoms_count; /* Additions optional members count */ /* * Description of an extensions group. */ int ext_after; /* Extensions start after this member */ int ext_before; /* Extensions stop before this member */ } asn_SEQUENCE_specifics_t; /* * A set specialized functions dealing with the SEQUENCE type. */ asn_struct_free_f SEQUENCE_free; asn_struct_print_f SEQUENCE_print; asn_constr_check_f SEQUENCE_constraint; ber_type_decoder_f SEQUENCE_decode_ber; der_type_encoder_f SEQUENCE_encode_der; xer_type_decoder_f SEQUENCE_decode_xer; xer_type_encoder_f SEQUENCE_encode_xer; per_type_decoder_f SEQUENCE_decode_uper; per_type_encoder_f SEQUENCE_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SEQUENCE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NativeEnumerated.h0000644000175000017500000000160112576764164023407 0ustar carlescarles/*- * Copyright (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This type differs from the standard ENUMERATED in that it is modelled using * the fixed machine type (long, int, short), so it can hold only values of * limited length. There is no type (i.e., NativeEnumerated_t, any integer type * will do). * This type may be used when integer range is limited by subtype constraints. */ #ifndef _NativeEnumerated_H_ #define _NativeEnumerated_H_ #include #ifdef __cplusplus extern "C" { #endif extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; xer_type_encoder_f NativeEnumerated_encode_xer; per_type_decoder_f NativeEnumerated_decode_uper; per_type_encoder_f NativeEnumerated_encode_uper; #ifdef __cplusplus } #endif #endif /* _NativeEnumerated_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/BIT_STRING.h0000644000175000017500000000147012576764164021657 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BIT_STRING_H_ #define _BIT_STRING_H_ #include /* Some help from OCTET STRING */ #ifdef __cplusplus extern "C" { #endif typedef struct BIT_STRING_s { uint8_t *buf; /* BIT STRING body */ int size; /* Size of the above buffer */ int bits_unused;/* Unused trailing bits in the last octet (0..7) */ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ } BIT_STRING_t; extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; asn_struct_print_f BIT_STRING_print; /* Human-readable output */ asn_constr_check_f BIT_STRING_constraint; xer_type_encoder_f BIT_STRING_encode_xer; #ifdef __cplusplus } #endif #endif /* _BIT_STRING_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UlpMessage.c0000644000175000017500000001022012576764164022204 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP" * found in "../supl-ulp.asn" */ #include "UlpMessage.h" static asn_per_constraints_t asn_PER_type_UlpMessage_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_UlpMessage_1[] = { { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msSUPLINIT), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLINIT, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msSUPLINIT" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msSUPLSTART), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLSTART, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msSUPLSTART" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msSUPLRESPONSE), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLRESPONSE, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msSUPLRESPONSE" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msSUPLPOSINIT), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLPOSINIT, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msSUPLPOSINIT" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msSUPLPOS), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLPOS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msSUPLPOS" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msSUPLEND), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLEND, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msSUPLEND" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msDUMMY2), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_DUMMY, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msDUMMY2" }, { ATF_NOFLAGS, 0, offsetof(struct UlpMessage, choice.msDUMMY3), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_DUMMY, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msDUMMY3" }, }; static asn_TYPE_tag2member_t asn_MAP_UlpMessage_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* msSUPLINIT at 37 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* msSUPLSTART at 38 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* msSUPLRESPONSE at 39 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* msSUPLPOSINIT at 40 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* msSUPLPOS at 41 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* msSUPLEND at 42 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* msDUMMY2 at 44 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* msDUMMY3 at 46 */ }; static asn_CHOICE_specifics_t asn_SPC_UlpMessage_specs_1 = { sizeof(struct UlpMessage), offsetof(struct UlpMessage, _asn_ctx), offsetof(struct UlpMessage, present), sizeof(((struct UlpMessage *)0)->present), asn_MAP_UlpMessage_tag2el_1, 8, /* Count of tags in the map */ 0, 8 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_UlpMessage = { "UlpMessage", "UlpMessage", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_UlpMessage_constr_1, asn_MBR_UlpMessage_1, 8, /* Elements count */ &asn_SPC_UlpMessage_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FrequencyInfo.h0000644000175000017500000000256012576764164022731 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _FrequencyInfo_H_ #define _FrequencyInfo_H_ #include /* Including external dependencies */ #include "FrequencyInfoFDD.h" #include "FrequencyInfoTDD.h" #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum fmodeSpecificInfo_PR { fmodeSpecificInfo_PR_NOTHING, /* No components present */ fmodeSpecificInfo_PR_fdd, fmodeSpecificInfo_PR_tdd, /* Extensions may appear below */ } fmodeSpecificInfo_PR; /* FrequencyInfo */ typedef struct FrequencyInfo { struct fmodeSpecificInfo { fmodeSpecificInfo_PR present; union FrequencyInfo__fmodeSpecificInfo_u { FrequencyInfoFDD_t fdd; FrequencyInfoTDD_t tdd; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } fmodeSpecificInfo; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } FrequencyInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FrequencyInfo; #ifdef __cplusplus } #endif #endif /* _FrequencyInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosPayLoad.h0000644000175000017500000000211712576764164022165 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS" * found in "../supl-pos.asn" */ #ifndef _PosPayLoad_H_ #define _PosPayLoad_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum PosPayLoad_PR { PosPayLoad_PR_NOTHING, /* No components present */ PosPayLoad_PR_tia801payload, PosPayLoad_PR_rrcPayload, PosPayLoad_PR_rrlpPayload, /* Extensions may appear below */ } PosPayLoad_PR; /* PosPayLoad */ typedef struct PosPayLoad { PosPayLoad_PR present; union PosPayLoad_u { OCTET_STRING_t tia801payload; OCTET_STRING_t rrcPayload; OCTET_STRING_t rrlpPayload; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PosPayLoad_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PosPayLoad; #ifdef __cplusplus } #endif #endif /* _PosPayLoad_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/QoP.h0000644000175000017500000000141212576764164020646 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _QoP_H_ #define _QoP_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* QoP */ typedef struct QoP { long horacc; long *veracc /* OPTIONAL */; long *maxLocAge /* OPTIONAL */; long *delay /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } QoP_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_QoP; #ifdef __cplusplus } #endif #endif /* _QoP_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_support.h0000644000175000017500000000754112576764164022542 0ustar carlescarles/* * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_SUPPORT_H_ #define _PER_SUPPORT_H_ #include /* Platform-specific types */ #ifdef __cplusplus extern "C" { #endif /* * Pre-computed PER constraints. */ typedef struct asn_per_constraint_s { enum asn_per_constraint_flags { APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ APC_CONSTRAINED = 0x2, /* Fully constrained */ APC_EXTENSIBLE = 0x4 /* May have extension */ } flags; int range_bits; /* Full number of bits in the range */ int effective_bits; /* Effective bits */ long lower_bound; /* "lb" value */ long upper_bound; /* "ub" value */ } asn_per_constraint_t; typedef struct asn_per_constraints_s { asn_per_constraint_t value; asn_per_constraint_t size; int (*value2code)(unsigned int value); int (*code2value)(unsigned int code); } asn_per_constraints_t; /* * This structure describes a position inside an incoming PER bit stream. */ typedef struct asn_per_data_s { const uint8_t *buffer; /* Pointer to the octet stream */ size_t nboff; /* Bit offset to the meaningful bit */ size_t nbits; /* Number of bits in the stream */ size_t moved; /* Number of bits moved through this bit stream */ int (*refill)(struct asn_per_data_s *); void *refill_key; } asn_per_data_t; /* * Extract a small number of bits (<= 31) from the specified PER data pointer. * This function returns -1 if the specified number of bits could not be * extracted due to EOD or other conditions. */ int32_t per_get_few_bits(asn_per_data_t *per_data, int get_nbits); /* Undo the immediately preceeding "get_few_bits" operation */ void per_get_undo(asn_per_data_t *per_data, int get_nbits); /* * Extract a large number of bits from the specified PER data pointer. * This function returns -1 if the specified number of bits could not be * extracted due to EOD or other conditions. */ int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int right_align, int get_nbits); /* * Get the length "n" from the Unaligned PER stream. */ ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, int *repeat); /* * Get the normally small length "n". */ ssize_t uper_get_nslength(asn_per_data_t *pd); /* * Get the normally small non-negative whole number. */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd); /* Non-thread-safe debugging function, don't use it */ char *per_data_string(asn_per_data_t *pd); /* * This structure supports forming PER output. */ typedef struct asn_per_outp_s { uint8_t *buffer; /* Pointer into the (tmpspace) */ size_t nboff; /* Bit offset to the meaningful bit */ size_t nbits; /* Number of bits left in (tmpspace) */ uint8_t tmpspace[32]; /* Preliminary storage to hold data */ int (*outper)(const void *data, size_t size, void *op_key); void *op_key; /* Key for (outper) data callback */ size_t flushed_bytes; /* Bytes already flushed through (outper) */ } asn_per_outp_t; /* Output a small number of bits (<= 31) */ int per_put_few_bits(asn_per_outp_t *per_data, uint32_t bits, int obits); /* Output a large number of bits */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int put_nbits); /* * Put the length "n" to the Unaligned PER stream. * This function returns the number of units which may be flushed * in the next units saving iteration. */ ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length); /* * Put the normally small length "n" to the Unaligned PER stream. * Returns 0 or -1. */ int uper_put_nslength(asn_per_outp_t *po, size_t length); /* * Put the normally small non-negative whole number. */ int uper_put_nsnnwn(asn_per_outp_t *po, int n); #ifdef __cplusplus } #endif #endif /* _PER_SUPPORT_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity4.c0000644000175000017500000001135612576764164022500 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-RESPONSE" * found in "../supl-response.asn" */ #include "KeyIdentity4.h" int KeyIdentity4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 128)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void KeyIdentity4_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void KeyIdentity4_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { KeyIdentity4_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int KeyIdentity4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t KeyIdentity4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t KeyIdentity4_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t KeyIdentity4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t KeyIdentity4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t KeyIdentity4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t KeyIdentity4_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { KeyIdentity4_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_KeyIdentity4_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 128, 128 } /* (SIZE(128..128)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_KeyIdentity4_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_KeyIdentity4 = { "KeyIdentity4", "KeyIdentity4", KeyIdentity4_free, KeyIdentity4_print, KeyIdentity4_constraint, KeyIdentity4_decode_ber, KeyIdentity4_encode_der, KeyIdentity4_decode_xer, KeyIdentity4_encode_xer, KeyIdentity4_decode_uper, KeyIdentity4_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_KeyIdentity4_tags_1, sizeof(asn_DEF_KeyIdentity4_tags_1) /sizeof(asn_DEF_KeyIdentity4_tags_1[0]), /* 1 */ asn_DEF_KeyIdentity4_tags_1, /* Same as above */ sizeof(asn_DEF_KeyIdentity4_tags_1) /sizeof(asn_DEF_KeyIdentity4_tags_1[0]), /* 1 */ &asn_PER_type_KeyIdentity4_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TimeslotISCP-List.c0000644000175000017500000000331312576764164023334 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "TimeslotISCP-List.h" static asn_per_constraints_t asn_PER_type_TimeslotISCP_List_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 14 } /* (SIZE(1..14)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_TimeslotISCP_List_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, &asn_DEF_TimeslotISCP, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_TimeslotISCP_List_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_TimeslotISCP_List_specs_1 = { sizeof(struct TimeslotISCP_List), offsetof(struct TimeslotISCP_List, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_TimeslotISCP_List = { "TimeslotISCP-List", "TimeslotISCP-List", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TimeslotISCP_List_tags_1, sizeof(asn_DEF_TimeslotISCP_List_tags_1) /sizeof(asn_DEF_TimeslotISCP_List_tags_1[0]), /* 1 */ asn_DEF_TimeslotISCP_List_tags_1, /* Same as above */ sizeof(asn_DEF_TimeslotISCP_List_tags_1) /sizeof(asn_DEF_TimeslotISCP_List_tags_1[0]), /* 1 */ &asn_PER_type_TimeslotISCP_List_constr_1, asn_MBR_TimeslotISCP_List_1, 1, /* Single element */ &asn_SPC_TimeslotISCP_List_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FrequencyInfoTDD.h0000644000175000017500000000141112576764164023257 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _FrequencyInfoTDD_H_ #define _FrequencyInfoTDD_H_ #include /* Including external dependencies */ #include "UARFCN.h" #include #ifdef __cplusplus extern "C" { #endif /* FrequencyInfoTDD */ typedef struct FrequencyInfoTDD { UARFCN_t uarfcn_Nt; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } FrequencyInfoTDD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FrequencyInfoTDD; #ifdef __cplusplus } #endif #endif /* _FrequencyInfoTDD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PrimaryCCPCH-RSCP.h0000644000175000017500000000174112576764164023105 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _PrimaryCCPCH_RSCP_H_ #define _PrimaryCCPCH_RSCP_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* PrimaryCCPCH-RSCP */ typedef long PrimaryCCPCH_RSCP_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PrimaryCCPCH_RSCP; asn_struct_free_f PrimaryCCPCH_RSCP_free; asn_struct_print_f PrimaryCCPCH_RSCP_print; asn_constr_check_f PrimaryCCPCH_RSCP_constraint; ber_type_decoder_f PrimaryCCPCH_RSCP_decode_ber; der_type_encoder_f PrimaryCCPCH_RSCP_encode_der; xer_type_decoder_f PrimaryCCPCH_RSCP_decode_xer; xer_type_encoder_f PrimaryCCPCH_RSCP_encode_xer; per_type_decoder_f PrimaryCCPCH_RSCP_decode_uper; per_type_encoder_f PrimaryCCPCH_RSCP_encode_uper; #ifdef __cplusplus } #endif #endif /* _PrimaryCCPCH_RSCP_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TimeslotISCP-List.h0000644000175000017500000000137412576764164023346 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _TimeslotISCP_List_H_ #define _TimeslotISCP_List_H_ #include /* Including external dependencies */ #include "TimeslotISCP.h" #include #include #ifdef __cplusplus extern "C" { #endif /* TimeslotISCP-List */ typedef struct TimeslotISCP_List { A_SEQUENCE_OF(TimeslotISCP_t) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } TimeslotISCP_List_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TimeslotISCP_List; #ifdef __cplusplus } #endif #endif /* _TimeslotISCP_List_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/der_encoder.h0000644000175000017500000000363112576764164022425 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _DER_ENCODER_H_ #define _DER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * The DER encoder of any type. May be invoked by the application. * The ber_decode() function (ber_decoder.h) is an opposite of der_encode(). */ asn_enc_rval_t der_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* A variant of der_encode() which encodes data into the pre-allocated buffer */ asn_enc_rval_t der_encode_to_buffer( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ void *buffer, /* Pre-allocated buffer */ size_t buffer_size /* Initial buffer size (maximum) */ ); /* * Type of the generic DER encoder. */ typedef asn_enc_rval_t (der_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Write out leading TL[v] sequence according to the type definition. */ ssize_t der_write_tags( struct asn_TYPE_descriptor_s *type_descriptor, size_t struct_length, int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ int last_tag_form, /* {0,!0}: prim, constructed */ ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key ); #ifdef __cplusplus } #endif #endif /* _DER_ENCODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/TGSN.h0000644000175000017500000000143612576764164020730 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _TGSN_H_ #define _TGSN_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TGSN */ typedef long TGSN_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TGSN; asn_struct_free_f TGSN_free; asn_struct_print_f TGSN_print; asn_constr_check_f TGSN_constraint; ber_type_decoder_f TGSN_decode_ber; der_type_encoder_f TGSN_encode_der; xer_type_decoder_f TGSN_decode_xer; xer_type_encoder_f TGSN_encode_xer; per_type_decoder_f TGSN_decode_uper; per_type_encoder_f TGSN_encode_uper; #ifdef __cplusplus } #endif #endif /* _TGSN_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/EncodingType.c0000644000175000017500000001215412576764164022537 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "EncodingType.h" int EncodingType_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void EncodingType_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void EncodingType_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { EncodingType_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int EncodingType_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { EncodingType_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t EncodingType_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { EncodingType_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t EncodingType_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { EncodingType_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t EncodingType_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { EncodingType_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t EncodingType_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { EncodingType_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t EncodingType_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { EncodingType_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t EncodingType_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { EncodingType_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_EncodingType_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_EncodingType_value2enum_1[] = { { 0, 4, "ucs2" }, { 1, 10, "gsmDefault" }, { 2, 4, "utf8" } /* This list is extensible */ }; static unsigned int asn_MAP_EncodingType_enum2value_1[] = { 1, /* gsmDefault(1) */ 0, /* ucs2(0) */ 2 /* utf8(2) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_EncodingType_specs_1 = { asn_MAP_EncodingType_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_EncodingType_enum2value_1, /* N => "tag"; sorted by N */ 3, /* Number of elements in the maps */ 4, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_EncodingType_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_EncodingType = { "EncodingType", "EncodingType", EncodingType_free, EncodingType_print, EncodingType_constraint, EncodingType_decode_ber, EncodingType_encode_der, EncodingType_decode_xer, EncodingType_encode_xer, EncodingType_decode_uper, EncodingType_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_EncodingType_tags_1, sizeof(asn_DEF_EncodingType_tags_1) /sizeof(asn_DEF_EncodingType_tags_1[0]), /* 1 */ asn_DEF_EncodingType_tags_1, /* Same as above */ sizeof(asn_DEF_EncodingType_tags_1) /sizeof(asn_DEF_EncodingType_tags_1[0]), /* 1 */ &asn_PER_type_EncodingType_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_EncodingType_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Velocity.h0000644000175000017500000000227312576764164021753 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _Velocity_H_ #define _Velocity_H_ #include /* Including external dependencies */ #include "Horvel.h" #include "Horandvervel.h" #include "Horveluncert.h" #include "Horandveruncert.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum Velocity_PR { Velocity_PR_NOTHING, /* No components present */ Velocity_PR_horvel, Velocity_PR_horandvervel, Velocity_PR_horveluncert, Velocity_PR_horandveruncert, /* Extensions may appear below */ } Velocity_PR; /* Velocity */ typedef struct Velocity { Velocity_PR present; union Velocity_u { Horvel_t horvel; Horandvervel_t horandvervel; Horveluncert_t horveluncert; Horandveruncert_t horandveruncert; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Velocity_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Velocity; #ifdef __cplusplus } #endif #endif /* _Velocity_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CPICH-Ec-N0.h0000644000175000017500000000160712576764164021603 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CPICH_Ec_N0_H_ #define _CPICH_Ec_N0_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* CPICH-Ec-N0 */ typedef long CPICH_Ec_N0_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CPICH_Ec_N0; asn_struct_free_f CPICH_Ec_N0_free; asn_struct_print_f CPICH_Ec_N0_print; asn_constr_check_f CPICH_Ec_N0_constraint; ber_type_decoder_f CPICH_Ec_N0_decode_ber; der_type_encoder_f CPICH_Ec_N0_encode_der; xer_type_decoder_f CPICH_Ec_N0_decode_xer; xer_type_encoder_f CPICH_Ec_N0_encode_xer; per_type_decoder_f CPICH_Ec_N0_decode_uper; per_type_encoder_f CPICH_Ec_N0_encode_uper; #ifdef __cplusplus } #endif #endif /* _CPICH_Ec_N0_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_decoder.h0000644000175000017500000000377712576764164022424 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_DECODER_H_ #define _BER_DECODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_codec_ctx_s; /* Forward declaration */ /* * The BER decoder of any type. * This function may be invoked directly from the application. * The der_encode() function (der_encoder.h) is an opposite to ber_decode(). */ asn_dec_rval_t ber_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of that buffer */ ); /* * Type of generic function which decodes the byte stream into the structure. */ typedef asn_dec_rval_t (ber_type_decoder_f)( struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const void *buf_ptr, size_t size, int tag_mode); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Check that all tags correspond to the type definition (as given in head). * On return, last_length would contain either a non-negative length of the * value part of the last TLV, or the negative number of expected * "end of content" sequences. The number may only be negative if the * head->last_tag_form is non-zero. */ asn_dec_rval_t ber_check_tags( struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ struct asn_TYPE_descriptor_s *type_descriptor, asn_struct_ctx_t *opt_ctx, /* saved decoding context */ const void *ptr, size_t size, int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ int last_tag_form, /* {-1,0:1}: any, primitive, constr */ ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ ); #ifdef __cplusplus } #endif #endif /* _BER_DECODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/GeneralizedTime.h0000644000175000017500000000424112576764164023222 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _GeneralizedTime_H_ #define _GeneralizedTime_H_ #include #ifdef __cplusplus extern "C" { #endif typedef OCTET_STRING_t GeneralizedTime_t; /* Implemented via OCTET STRING */ extern asn_TYPE_descriptor_t asn_DEF_GeneralizedTime; asn_struct_print_f GeneralizedTime_print; asn_constr_check_f GeneralizedTime_constraint; der_type_encoder_f GeneralizedTime_encode_der; xer_type_encoder_f GeneralizedTime_encode_xer; /*********************** * Some handy helpers. * ***********************/ struct tm; /* */ /* * Convert a GeneralizedTime structure into time_t * and optionally into struct tm. * If as_gmt is given, the resulting _optional_tm4fill will have a GMT zone, * instead of default local one. * On error returns -1 and errno set to EINVAL */ time_t asn_GT2time(const GeneralizedTime_t *, struct tm *_optional_tm4fill, int as_gmt); /* A version of the above function also returning the fractions of seconds */ time_t asn_GT2time_frac(const GeneralizedTime_t *, int *frac_value, int *frac_digits, /* (value / (10 ^ digits)) */ struct tm *_optional_tm4fill, int as_gmt); /* * Another version returning fractions with defined precision * For example, parsing of the time ending with ".1" seconds * with frac_digits=3 (msec) would yield frac_value = 100. */ time_t asn_GT2time_prec(const GeneralizedTime_t *, int *frac_value, int frac_digits, struct tm *_optional_tm4fill, int as_gmt); /* * Convert a struct tm into GeneralizedTime. * If _optional_gt is not given, this function will try to allocate one. * If force_gmt is given, the resulting GeneralizedTime will be forced * into a GMT time zone (encoding ends with a "Z"). * On error, this function returns 0 and sets errno. */ GeneralizedTime_t *asn_time2GT(GeneralizedTime_t *_optional_gt, const struct tm *, int force_gmt); GeneralizedTime_t *asn_time2GT_frac(GeneralizedTime_t *_optional_gt, const struct tm *, int frac_value, int frac_digits, int force_gmt); #ifdef __cplusplus } #endif #endif /* _GeneralizedTime_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FQDN.h0000644000175000017500000000145112576764164020702 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _FQDN_H_ #define _FQDN_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* FQDN */ typedef VisibleString_t FQDN_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FQDN; asn_struct_free_f FQDN_free; asn_struct_print_f FQDN_print; asn_constr_check_f FQDN_constraint; ber_type_decoder_f FQDN_decode_ber; der_type_encoder_f FQDN_encode_der; xer_type_decoder_f FQDN_decode_xer; xer_type_encoder_f FQDN_encode_xer; per_type_decoder_f FQDN_decode_uper; per_type_encoder_f FQDN_encode_uper; #ifdef __cplusplus } #endif #endif /* _FQDN_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLEND.c0000644000175000017500000000455112576764164021263 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-END" * found in "../supl-end.asn" */ #include "SUPLEND.h" static asn_TYPE_member_t asn_MBR_SUPLEND_1[] = { { ATF_POINTER, 3, offsetof(struct SUPLEND, position), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Position, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "position" }, { ATF_POINTER, 2, offsetof(struct SUPLEND, statusCode), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_StatusCode, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "statusCode" }, { ATF_POINTER, 1, offsetof(struct SUPLEND, ver), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Ver, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ver" }, }; static int asn_MAP_SUPLEND_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_SUPLEND_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SUPLEND_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* position at 10 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* statusCode at 11 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ver at 12 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SUPLEND_specs_1 = { sizeof(struct SUPLEND), offsetof(struct SUPLEND, _asn_ctx), asn_MAP_SUPLEND_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_SUPLEND_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SUPLEND = { "SUPLEND", "SUPLEND", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SUPLEND_tags_1, sizeof(asn_DEF_SUPLEND_tags_1) /sizeof(asn_DEF_SUPLEND_tags_1[0]), /* 1 */ asn_DEF_SUPLEND_tags_1, /* Same as above */ sizeof(asn_DEF_SUPLEND_tags_1) /sizeof(asn_DEF_SUPLEND_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SUPLEND_1, 3, /* Elements count */ &asn_SPC_SUPLEND_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NMRelement.h0000644000175000017500000000137112576764164022161 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _NMRelement_H_ #define _NMRelement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* NMRelement */ typedef struct NMRelement { long aRFCN; long bSIC; long rxLev; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } NMRelement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NMRelement; #ifdef __cplusplus } #endif #endif /* _NMRelement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_decoder.h0000644000175000017500000000330012576764164022420 0ustar carlescarles/*- * Copyright (c) 2005, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_DECODER_H_ #define _PER_DECODER_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Unaligned PER decoder of a "complete encoding" as per X.691#10.1. * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. */ asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of data buffer */ ); /* * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. * WARNING: This call returns the number of BITS read from the stream. Beware. */ asn_dec_rval_t uper_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size, /* Size of data buffer */ int skip_bits, /* Number of unused leading bits, 0..7 */ int unused_bits /* Number of unused tailing bits, 0..7 */ ); /* * Type of the type-specific PER decoder function. */ typedef asn_dec_rval_t (per_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void **struct_ptr, asn_per_data_t *per_data ); #ifdef __cplusplus } #endif #endif /* _PER_DECODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PosProtocol.h0000644000175000017500000000140312576764164022432 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-START" * found in "../supl-start.asn" */ #ifndef _PosProtocol_H_ #define _PosProtocol_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* PosProtocol */ typedef struct PosProtocol { BOOLEAN_t tia801; BOOLEAN_t rrlp; BOOLEAN_t rrc; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PosProtocol_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PosProtocol; #ifdef __cplusplus } #endif #endif /* _PosProtocol_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/LocationId.c0000644000175000017500000000401312576764164022167 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "LocationId.h" static asn_TYPE_member_t asn_MBR_LocationId_1[] = { { ATF_NOFLAGS, 0, offsetof(struct LocationId, cellInfo), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_CellInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "cellInfo" }, { ATF_NOFLAGS, 0, offsetof(struct LocationId, status), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Status, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "status" }, }; static ber_tlv_tag_t asn_DEF_LocationId_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_LocationId_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellInfo at 53 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* status at 54 */ }; static asn_SEQUENCE_specifics_t asn_SPC_LocationId_specs_1 = { sizeof(struct LocationId), offsetof(struct LocationId, _asn_ctx), asn_MAP_LocationId_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_LocationId = { "LocationId", "LocationId", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_LocationId_tags_1, sizeof(asn_DEF_LocationId_tags_1) /sizeof(asn_DEF_LocationId_tags_1[0]), /* 1 */ asn_DEF_LocationId_tags_1, /* Same as above */ sizeof(asn_DEF_LocationId_tags_1) /sizeof(asn_DEF_LocationId_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_LocationId_1, 2, /* Elements count */ &asn_SPC_LocationId_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MAC.h0000644000175000017500000000141512576764164020552 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _MAC_H_ #define _MAC_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* MAC */ typedef BIT_STRING_t MAC_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MAC; asn_struct_free_f MAC_free; asn_struct_print_f MAC_print; asn_constr_check_f MAC_constraint; ber_type_decoder_f MAC_decode_ber; der_type_encoder_f MAC_encode_der; xer_type_decoder_f MAC_decode_xer; xer_type_encoder_f MAC_encode_xer; per_type_decoder_f MAC_decode_uper; per_type_encoder_f MAC_encode_uper; #ifdef __cplusplus } #endif #endif /* _MAC_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ENUMERATED.c0000644000175000017500000000412412576764164021576 0ustar carlescarles/*- * Copyright (c) 2003, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include /* Encoder and decoder of a primitive type */ /* * ENUMERATED basic type description. */ static ber_tlv_tag_t asn_DEF_ENUMERATED_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ENUMERATED = { "ENUMERATED", "ENUMERATED", ASN__PRIMITIVE_TYPE_free, INTEGER_print, /* Implemented in terms of INTEGER */ asn_generic_no_constraint, ber_decode_primitive, INTEGER_encode_der, /* Implemented in terms of INTEGER */ INTEGER_decode_xer, /* This is temporary! */ INTEGER_encode_xer, ENUMERATED_decode_uper, /* Unaligned PER decoder */ ENUMERATED_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_ENUMERATED_tags, sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), asn_DEF_ENUMERATED_tags, /* Same as above */ sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn_dec_rval_t ENUMERATED_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rval; ENUMERATED_t *st = (ENUMERATED_t *)*sptr; long value; void *vptr = &value; if(!st) { st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st))); if(!st) _ASN_DECODE_FAILED; } rval = NativeEnumerated_decode_uper(opt_codec_ctx, td, constraints, (void **)&vptr, pd); if(rval.code == RC_OK) if(asn_long2INTEGER(st, value)) rval.code = RC_FAIL; return rval; } asn_enc_rval_t ENUMERATED_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { ENUMERATED_t *st = (ENUMERATED_t *)sptr; long value; if(asn_INTEGER2long(st, &value)) _ASN_ENCODE_FAILED; return NativeEnumerated_encode_uper(td, constraints, &value, po); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellMeasuredResults.h0000644000175000017500000000413512576764164024103 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CellMeasuredResults_H_ #define _CellMeasuredResults_H_ #include /* Including external dependencies */ #include #include "PrimaryCPICH-Info.h" #include "CPICH-Ec-N0.h" #include "CPICH-RSCP.h" #include "Pathloss.h" #include #include "CellParametersID.h" #include "TGSN.h" #include "PrimaryCCPCH-RSCP.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum modeSpecificInfo_PR { modeSpecificInfo_PR_NOTHING, /* No components present */ modeSpecificInfo_PR_fdd, modeSpecificInfo_PR_tdd } modeSpecificInfo_PR; /* Forward declarations */ struct TimeslotISCP_List; /* CellMeasuredResults */ typedef struct CellMeasuredResults { long *cellIdentity /* OPTIONAL */; struct modeSpecificInfo { modeSpecificInfo_PR present; union CellMeasuredResults__modeSpecificInfo_u { struct fdd { PrimaryCPICH_Info_t primaryCPICH_Info; CPICH_Ec_N0_t *cpich_Ec_N0 /* OPTIONAL */; CPICH_RSCP_t *cpich_RSCP /* OPTIONAL */; Pathloss_t *pathloss /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } fdd; struct tdd { CellParametersID_t cellParametersID; TGSN_t *proposedTGSN /* OPTIONAL */; PrimaryCCPCH_RSCP_t *primaryCCPCH_RSCP /* OPTIONAL */; Pathloss_t *pathloss /* OPTIONAL */; struct TimeslotISCP_List *timeslotISCP_List /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } tdd; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } modeSpecificInfo; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } CellMeasuredResults_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CellMeasuredResults; #ifdef __cplusplus } #endif /* Referred external types */ #include "TimeslotISCP-List.h" #endif /* _CellMeasuredResults_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/CellParametersID.h0000644000175000017500000000172212576764164023273 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _CellParametersID_H_ #define _CellParametersID_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* CellParametersID */ typedef long CellParametersID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CellParametersID; asn_struct_free_f CellParametersID_free; asn_struct_print_f CellParametersID_print; asn_constr_check_f CellParametersID_constraint; ber_type_decoder_f CellParametersID_decode_ber; der_type_encoder_f CellParametersID_encode_der; xer_type_decoder_f CellParametersID_decode_xer; xer_type_encoder_f CellParametersID_encode_xer; per_type_decoder_f CellParametersID_decode_uper; per_type_encoder_f CellParametersID_encode_uper; #ifdef __cplusplus } #endif #endif /* _CellParametersID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLPOSINIT.c0000644000175000017500000000707112576764164022002 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #include "SUPLPOSINIT.h" static asn_TYPE_member_t asn_MBR_SUPLPOSINIT_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SUPLPOSINIT, sETCapabilities), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SETCapabilities, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sETCapabilities" }, { ATF_POINTER, 1, offsetof(struct SUPLPOSINIT, requestedAssistData), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RequestedAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "requestedAssistData" }, { ATF_NOFLAGS, 0, offsetof(struct SUPLPOSINIT, locationId), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_LocationId, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "locationId" }, { ATF_POINTER, 3, offsetof(struct SUPLPOSINIT, position), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Position, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "position" }, { ATF_POINTER, 2, offsetof(struct SUPLPOSINIT, sUPLPOS), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SUPLPOS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sUPLPOS" }, { ATF_POINTER, 1, offsetof(struct SUPLPOSINIT, ver), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Ver, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ver" }, }; static int asn_MAP_SUPLPOSINIT_oms_1[] = { 1, 3, 4, 5 }; static ber_tlv_tag_t asn_DEF_SUPLPOSINIT_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SUPLPOSINIT_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sETCapabilities at 15 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* requestedAssistData at 16 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* locationId at 17 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* position at 18 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sUPLPOS at 19 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* ver at 20 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SUPLPOSINIT_specs_1 = { sizeof(struct SUPLPOSINIT), offsetof(struct SUPLPOSINIT, _asn_ctx), asn_MAP_SUPLPOSINIT_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_SUPLPOSINIT_oms_1, /* Optional members */ 4, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SUPLPOSINIT = { "SUPLPOSINIT", "SUPLPOSINIT", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SUPLPOSINIT_tags_1, sizeof(asn_DEF_SUPLPOSINIT_tags_1) /sizeof(asn_DEF_SUPLPOSINIT_tags_1[0]), /* 1 */ asn_DEF_SUPLPOSINIT_tags_1, /* Same as above */ sizeof(asn_DEF_SUPLPOSINIT_tags_1) /sizeof(asn_DEF_SUPLPOSINIT_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SUPLPOSINIT_1, 6, /* Elements count */ &asn_SPC_SUPLPOSINIT_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FrequencyInfo.c0000644000175000017500000000742412576764164022730 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "FrequencyInfo.h" static asn_per_constraints_t asn_PER_type_fmodeSpecificInfo_constr_2 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_fmodeSpecificInfo_2[] = { { ATF_NOFLAGS, 0, offsetof(struct fmodeSpecificInfo, choice.fdd), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrequencyInfoFDD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fdd" }, { ATF_NOFLAGS, 0, offsetof(struct fmodeSpecificInfo, choice.tdd), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrequencyInfoTDD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tdd" }, }; static asn_TYPE_tag2member_t asn_MAP_fmodeSpecificInfo_tag2el_2[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd at 122 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd at 123 */ }; static asn_CHOICE_specifics_t asn_SPC_fmodeSpecificInfo_specs_2 = { sizeof(struct fmodeSpecificInfo), offsetof(struct fmodeSpecificInfo, _asn_ctx), offsetof(struct fmodeSpecificInfo, present), sizeof(((struct fmodeSpecificInfo *)0)->present), asn_MAP_fmodeSpecificInfo_tag2el_2, 2, /* Count of tags in the map */ 0, 2 /* Extensions start */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_fmodeSpecificInfo_2 = { "fmodeSpecificInfo", "fmodeSpecificInfo", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_fmodeSpecificInfo_constr_2, asn_MBR_fmodeSpecificInfo_2, 2, /* Elements count */ &asn_SPC_fmodeSpecificInfo_specs_2 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_FrequencyInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct FrequencyInfo, fmodeSpecificInfo), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_fmodeSpecificInfo_2, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fmodeSpecificInfo" }, }; static ber_tlv_tag_t asn_DEF_FrequencyInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_FrequencyInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* fmodeSpecificInfo at 122 */ }; static asn_SEQUENCE_specifics_t asn_SPC_FrequencyInfo_specs_1 = { sizeof(struct FrequencyInfo), offsetof(struct FrequencyInfo, _asn_ctx), asn_MAP_FrequencyInfo_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 0, /* Start extensions */ 2 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_FrequencyInfo = { "FrequencyInfo", "FrequencyInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FrequencyInfo_tags_1, sizeof(asn_DEF_FrequencyInfo_tags_1) /sizeof(asn_DEF_FrequencyInfo_tags_1[0]), /* 1 */ asn_DEF_FrequencyInfo_tags_1, /* Same as above */ sizeof(asn_DEF_FrequencyInfo_tags_1) /sizeof(asn_DEF_FrequencyInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_FrequencyInfo_1, 1, /* Elements count */ &asn_SPC_FrequencyInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IA5String.c0000644000175000017500000000406412576764164021715 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include /* * IA5String basic type description. */ static ber_tlv_tag_t asn_DEF_IA5String_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), /* [UNIVERSAL 22] IMPLICIT ...*/ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ }; static asn_per_constraints_t asn_DEF_IA5String_constraints = { { APC_CONSTRAINED, 7, 7, 0, 0x7f }, /* Value */ { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ 0, 0 }; asn_TYPE_descriptor_t asn_DEF_IA5String = { "IA5String", "IA5String", OCTET_STRING_free, OCTET_STRING_print_utf8, /* ASCII subset */ IA5String_constraint, /* Constraint on the alphabet */ OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ OCTET_STRING_encode_der, OCTET_STRING_decode_xer_utf8, OCTET_STRING_encode_xer_utf8, OCTET_STRING_decode_uper, OCTET_STRING_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_IA5String_tags, sizeof(asn_DEF_IA5String_tags) / sizeof(asn_DEF_IA5String_tags[0]) - 1, asn_DEF_IA5String_tags, sizeof(asn_DEF_IA5String_tags) / sizeof(asn_DEF_IA5String_tags[0]), &asn_DEF_IA5String_constraints, 0, 0, /* No members */ 0 /* No specifics */ }; int IA5String_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const IA5String_t *st = (const IA5String_t *)sptr; if(st && st->buf) { uint8_t *buf = st->buf; uint8_t *end = buf + st->size; /* * IA5String is generally equivalent to 7bit ASCII. * ISO/ITU-T T.50, 1963. */ for(; buf < end; buf++) { if(*buf > 0x7F) { _ASN_CTFAIL(app_key, td, sptr, "%s: value byte %ld out of range: " "%d > 127 (%s:%d)", td->name, (long)((buf - st->buf) + 1), *buf, __FILE__, __LINE__); return -1; } } } else { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MeasuredResults.c0000644000175000017500000000526312576764164023301 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "MeasuredResults.h" static asn_TYPE_member_t asn_MBR_MeasuredResults_1[] = { { ATF_POINTER, 3, offsetof(struct MeasuredResults, frequencyInfo), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrequencyInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "frequencyInfo" }, { ATF_POINTER, 2, offsetof(struct MeasuredResults, utra_CarrierRSSI), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UTRA_CarrierRSSI, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "utra-CarrierRSSI" }, { ATF_POINTER, 1, offsetof(struct MeasuredResults, cellMeasuredResultsList), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellMeasuredResultsList, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "cellMeasuredResultsList" }, }; static int asn_MAP_MeasuredResults_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_MeasuredResults_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MeasuredResults_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* frequencyInfo at 148 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* utra-CarrierRSSI at 149 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellMeasuredResultsList at 150 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MeasuredResults_specs_1 = { sizeof(struct MeasuredResults), offsetof(struct MeasuredResults, _asn_ctx), asn_MAP_MeasuredResults_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_MeasuredResults_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MeasuredResults = { "MeasuredResults", "MeasuredResults", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MeasuredResults_tags_1, sizeof(asn_DEF_MeasuredResults_tags_1) /sizeof(asn_DEF_MeasuredResults_tags_1[0]), /* 1 */ asn_DEF_MeasuredResults_tags_1, /* Same as above */ sizeof(asn_DEF_MeasuredResults_tags_1) /sizeof(asn_DEF_MeasuredResults_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MeasuredResults_1, 3, /* Elements count */ &asn_SPC_MeasuredResults_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MeasuredResultsList.c0000644000175000017500000000336312576764164024134 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "MeasuredResultsList.h" static asn_per_constraints_t asn_PER_type_MeasuredResultsList_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_MeasuredResultsList_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_MeasuredResults, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_MeasuredResultsList_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_MeasuredResultsList_specs_1 = { sizeof(struct MeasuredResultsList), offsetof(struct MeasuredResultsList, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_MeasuredResultsList = { "MeasuredResultsList", "MeasuredResultsList", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MeasuredResultsList_tags_1, sizeof(asn_DEF_MeasuredResultsList_tags_1) /sizeof(asn_DEF_MeasuredResultsList_tags_1[0]), /* 1 */ asn_DEF_MeasuredResultsList_tags_1, /* Same as above */ sizeof(asn_DEF_MeasuredResultsList_tags_1) /sizeof(asn_DEF_MeasuredResultsList_tags_1[0]), /* 1 */ &asn_PER_type_MeasuredResultsList_constr_1, asn_MBR_MeasuredResultsList_1, 1, /* Single element */ &asn_SPC_MeasuredResultsList_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NMR.h0000644000175000017500000000135112576764164020605 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _NMR_H_ #define _NMR_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct NMRelement; /* NMR */ typedef struct NMR { A_SEQUENCE_OF(struct NMRelement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } NMR_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NMR; #ifdef __cplusplus } #endif /* Referred external types */ #include "NMRelement.h" #endif /* _NMR_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/xer_encoder.c0000644000175000017500000000300512576764164022437 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * The XER encoder of any type. May be invoked by the application. */ asn_enc_rval_t xer_encode(asn_TYPE_descriptor_t *td, void *sptr, enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er, tmper; const char *mname; size_t mlen; int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; if(!td || !sptr) goto cb_failed; mname = td->xml_tag; mlen = strlen(mname); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); tmper = td->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); if(tmper.encoded == -1) return tmper; _ASN_CALLBACK3("\n", xcan); er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded; _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } /* * This is a helper function for xer_fprint, which directs all incoming data * into the provided file descriptor. */ static int xer__print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } int xer_fprint(FILE *stream, asn_TYPE_descriptor_t *td, void *sptr) { asn_enc_rval_t er; if(!stream) stream = stdout; if(!td || !sptr) return -1; er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); if(er.encoded == -1) return -1; return fflush(stream); } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/PositionEstimate.h0000644000175000017500000000267212576764164023460 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _PositionEstimate_H_ #define _PositionEstimate_H_ #include /* Including external dependencies */ #include #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum latitudeSign { latitudeSign_north = 0, latitudeSign_south = 1 } e_latitudeSign; /* Forward declarations */ struct AltitudeInfo; /* PositionEstimate */ typedef struct PositionEstimate { ENUMERATED_t latitudeSign; long latitude; long longitude; struct uncertainty { long uncertaintySemiMajor; long uncertaintySemiMinor; long orientationMajorAxis; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } *uncertainty; long *confidence /* OPTIONAL */; struct AltitudeInfo *altitudeInfo /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PositionEstimate_t; /* Implementation */ /* extern asn_TYPE_descriptor_t asn_DEF_latitudeSign_2; // (Use -fall-defs-global to expose) */ extern asn_TYPE_descriptor_t asn_DEF_PositionEstimate; #ifdef __cplusplus } #endif /* Referred external types */ #include "AltitudeInfo.h" #endif /* _PositionEstimate_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ber_tlv_length.h0000644000175000017500000000277512576764164023162 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_TLV_LENGTH_H_ #define _BER_TLV_LENGTH_H_ #ifdef __cplusplus extern "C" { #endif typedef ssize_t ber_tlv_len_t; /* * This function tries to fetch the length of the BER TLV value and place it * in *len_r. * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering length. * >0: Number of bytes used from bufptr. * On return with >0, len_r is constrained as -1..MAX, where -1 mean * that the value is of indefinite length. */ ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r); /* * This function expects bufptr to be positioned over L in TLV. * It returns number of bytes occupied by L and V together, suitable * for skipping. The function properly handles indefinite length. * RETURN VALUES: * Standard {-1,0,>0} convention. */ ssize_t ber_skip_length( struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ int _is_constructed, const void *bufptr, size_t size); /* * This function serializes the length (L from TLV) in DER format. * It always returns number of bytes necessary to represent the length, * it is a caller's responsibility to check the return value * against the supplied buffer's size. */ size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); #ifdef __cplusplus } #endif #endif /* _BER_TLV_LENGTH_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/MAC.c0000644000175000017500000001057112576764164020550 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "MAC.h" int MAC_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 64)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void MAC_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void MAC_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { MAC_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int MAC_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { MAC_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t MAC_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { MAC_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t MAC_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { MAC_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t MAC_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { MAC_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t MAC_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { MAC_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t MAC_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { MAC_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t MAC_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { MAC_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_MAC_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 64, 64 } /* (SIZE(64..64)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_MAC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MAC = { "MAC", "MAC", MAC_free, MAC_print, MAC_constraint, MAC_decode_ber, MAC_encode_der, MAC_decode_xer, MAC_encode_xer, MAC_decode_uper, MAC_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MAC_tags_1, sizeof(asn_DEF_MAC_tags_1) /sizeof(asn_DEF_MAC_tags_1[0]), /* 1 */ asn_DEF_MAC_tags_1, /* Same as above */ sizeof(asn_DEF_MAC_tags_1) /sizeof(asn_DEF_MAC_tags_1[0]), /* 1 */ &asn_PER_type_MAC_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SUPLPOSINIT.h0000644000175000017500000000226712576764164022011 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #ifndef _SUPLPOSINIT_H_ #define _SUPLPOSINIT_H_ #include /* Including external dependencies */ #include "SETCapabilities.h" #include "LocationId.h" #include "Ver.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct RequestedAssistData; struct Position; struct SUPLPOS; /* SUPLPOSINIT */ typedef struct SUPLPOSINIT { SETCapabilities_t sETCapabilities; struct RequestedAssistData *requestedAssistData /* OPTIONAL */; LocationId_t locationId; struct Position *position /* OPTIONAL */; struct SUPLPOS *sUPLPOS /* OPTIONAL */; Ver_t *ver /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SUPLPOSINIT_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SUPLPOSINIT; #ifdef __cplusplus } #endif /* Referred external types */ #include "RequestedAssistData.h" #include "Position.h" #include "SUPLPOS.h" #endif /* _SUPLPOSINIT_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/asn_internal.h0000644000175000017500000000671712576764164022641 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Declarations internally useful for the ASN.1 support code. */ #ifndef _ASN_INTERNAL_H_ #define _ASN_INTERNAL_H_ #include "asn_application.h" /* Application-visible API */ #ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ #include /* for assert() macro */ #endif #ifdef __cplusplus extern "C" { #endif /* Environment version might be used to avoid running with the old library */ #define ASN1C_ENVIRONMENT_VERSION 922 /* Compile-time version */ int get_asn1c_environment_version(void); /* Run-time version */ #define CALLOC(nmemb, size) calloc(nmemb, size) #define MALLOC(size) malloc(size) #define REALLOC(oldptr, size) realloc(oldptr, size) #define FREEMEM(ptr) free(ptr) /* * A macro for debugging the ASN.1 internals. * You may enable or override it. */ #ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ #if EMIT_ASN_DEBUG == 1 /* And it was asked to emit this code... */ #ifdef __GNUC__ #ifdef ASN_THREAD_SAFE #define asn_debug_indent 0 #else /* !ASN_THREAD_SAFE */ int asn_debug_indent; #endif /* ASN_THREAD_SAFE */ #define ASN_DEBUG(fmt, args...) do { \ int adi = asn_debug_indent; \ while(adi--) fprintf(stderr, " "); \ fprintf(stderr, fmt, ##args); \ fprintf(stderr, " (%s:%d)\n", \ __FILE__, __LINE__); \ } while(0) #else /* !__GNUC__ */ void ASN_DEBUG_f(const char *fmt, ...); #define ASN_DEBUG ASN_DEBUG_f #endif /* __GNUC__ */ #else /* EMIT_ASN_DEBUG != 1 */ static inline void ASN_DEBUG(const char *fmt, ...) { (void)fmt; } #endif /* EMIT_ASN_DEBUG */ #endif /* ASN_DEBUG */ /* * Invoke the application-supplied callback and fail, if something is wrong. */ #define __ASN_E_cbc(buf, size) (cb((buf), (size), app_key) < 0) #define _ASN_E_CALLBACK(foo) do { \ if(foo) goto cb_failed; \ } while(0) #define _ASN_CALLBACK(buf, size) \ _ASN_E_CALLBACK(__ASN_E_cbc(buf, size)) #define _ASN_CALLBACK2(buf1, size1, buf2, size2) \ _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) || __ASN_E_cbc(buf2, size2)) #define _ASN_CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) \ || __ASN_E_cbc(buf2, size2) \ || __ASN_E_cbc(buf3, size3)) #define _i_ASN_TEXT_INDENT(nl, level) do { \ int __level = (level); \ int __nl = ((nl) != 0); \ int __i; \ if(__nl) _ASN_CALLBACK("\n", 1); \ if(__level < 0) __level = 0; \ for(__i = 0; __i < __level; __i++) \ _ASN_CALLBACK(" ", 4); \ er.encoded += __nl + 4 * __level; \ } while(0) #define _i_INDENT(nl) do { \ int __i; \ if((nl) && cb("\n", 1, app_key) < 0) return -1; \ for(__i = 0; __i < ilevel; __i++) \ if(cb(" ", 4, app_key) < 0) return -1; \ } while(0) /* * Check stack against overflow, if limit is set. */ #define _ASN_DEFAULT_STACK_MAX (30000) static inline int _ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) { if(ctx && ctx->max_stack_size) { /* ctx MUST be allocated on the stack */ ptrdiff_t usedstack = ((char *)ctx - (char *)&ctx); if(usedstack > 0) usedstack = -usedstack; /* grows up! */ /* double negative required to avoid int wrap-around */ if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { ASN_DEBUG("Stack limit %ld reached", (long)ctx->max_stack_size); return -1; } } return 0; } #ifdef __cplusplus } #endif #endif /* _ASN_INTERNAL_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/BIT_STRING.c0000644000175000017500000001074012576764164021652 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * BIT STRING basic type description. */ static ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; static asn_OCTET_STRING_specifics_t asn_DEF_BIT_STRING_specs = { sizeof(BIT_STRING_t), offsetof(BIT_STRING_t, _asn_ctx), ASN_OSUBV_BIT }; asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { "BIT STRING", "BIT_STRING", OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ BIT_STRING_print, BIT_STRING_constraint, OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ OCTET_STRING_decode_xer_binary, BIT_STRING_encode_xer, OCTET_STRING_decode_uper, /* Unaligned PER decoder */ OCTET_STRING_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_BIT_STRING_tags, sizeof(asn_DEF_BIT_STRING_tags) / sizeof(asn_DEF_BIT_STRING_tags[0]), asn_DEF_BIT_STRING_tags, /* Same as above */ sizeof(asn_DEF_BIT_STRING_tags) / sizeof(asn_DEF_BIT_STRING_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ &asn_DEF_BIT_STRING_specs }; /* * BIT STRING generic constraint. */ int BIT_STRING_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; if(st && st->buf) { if((st->size == 0 && st->bits_unused) || st->bits_unused < 0 || st->bits_unused > 7) { _ASN_CTFAIL(app_key, td, sptr, "%s: invalid padding byte (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } else { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } return 0; } static char *_bit_pattern[16] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; asn_enc_rval_t BIT_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; char scratch[128]; char *p = scratch; char *scend = scratch + (sizeof(scratch) - 10); const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; int xcan = (flags & XER_F_CANONICAL); uint8_t *buf; uint8_t *end; if(!st || !st->buf) _ASN_ENCODE_FAILED; er.encoded = 0; buf = st->buf; end = buf + st->size - 1; /* Last byte is special */ /* * Binary dump */ for(; buf < end; buf++) { int v = *buf; int nline = xcan?0:(((buf - st->buf) % 8) == 0); if(p >= scend || nline) { er.encoded += p - scratch; _ASN_CALLBACK(scratch, p - scratch); p = scratch; if(nline) _i_ASN_TEXT_INDENT(1, ilevel); } memcpy(p + 0, _bit_pattern[v >> 4], 4); memcpy(p + 4, _bit_pattern[v & 0x0f], 4); p += 8; } if(!xcan && ((buf - st->buf) % 8) == 0) _i_ASN_TEXT_INDENT(1, ilevel); er.encoded += p - scratch; _ASN_CALLBACK(scratch, p - scratch); p = scratch; if(buf == end) { int v = *buf; int ubits = st->bits_unused; int i; for(i = 7; i >= ubits; i--) *p++ = (v & (1 << i)) ? 0x31 : 0x30; er.encoded += p - scratch; _ASN_CALLBACK(scratch, p - scratch); } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } /* * BIT STRING specific contents printer. */ int BIT_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { static const char *h2c = "0123456789ABCDEF"; char scratch[64]; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; uint8_t *buf; uint8_t *end; char *p = scratch; (void)td; /* Unused argument */ if(!st || !st->buf) return (cb("", 8, app_key) < 0) ? -1 : 0; ilevel++; buf = st->buf; end = buf + st->size; /* * Hexadecimal dump. */ for(; buf < end; buf++) { if((buf - st->buf) % 16 == 0 && (st->size > 16) && buf != st->buf) { _i_INDENT(1); /* Dump the string */ if(cb(scratch, p - scratch, app_key) < 0) return -1; p = scratch; } *p++ = h2c[*buf >> 4]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p > scratch) { p--; /* Eat the tailing space */ if((st->size > 16)) { _i_INDENT(1); } /* Dump the incomplete 16-bytes row */ if(cb(scratch, p - scratch, app_key) < 0) return -1; } return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Horandveruncert.c0000644000175000017500000002070112576764164023315 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "Horandveruncert.h" static int memb_verdirect_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_bearing_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 9)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_horspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_verspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_horuncertspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_veruncertspeed_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 8)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_verdirect_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_bearing_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 9, 9 } /* (SIZE(9..9)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_horspeed_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_verspeed_constr_5 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_horuncertspeed_constr_6 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_veruncertspeed_constr_7 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Horandveruncert_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Horandveruncert, verdirect), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_verdirect_constraint_1, &asn_PER_memb_verdirect_constr_2, 0, "verdirect" }, { ATF_NOFLAGS, 0, offsetof(struct Horandveruncert, bearing), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_bearing_constraint_1, &asn_PER_memb_bearing_constr_3, 0, "bearing" }, { ATF_NOFLAGS, 0, offsetof(struct Horandveruncert, horspeed), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_horspeed_constraint_1, &asn_PER_memb_horspeed_constr_4, 0, "horspeed" }, { ATF_NOFLAGS, 0, offsetof(struct Horandveruncert, verspeed), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_verspeed_constraint_1, &asn_PER_memb_verspeed_constr_5, 0, "verspeed" }, { ATF_NOFLAGS, 0, offsetof(struct Horandveruncert, horuncertspeed), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_horuncertspeed_constraint_1, &asn_PER_memb_horuncertspeed_constr_6, 0, "horuncertspeed" }, { ATF_NOFLAGS, 0, offsetof(struct Horandveruncert, veruncertspeed), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_veruncertspeed_constraint_1, &asn_PER_memb_veruncertspeed_constr_7, 0, "veruncertspeed" }, }; static ber_tlv_tag_t asn_DEF_Horandveruncert_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Horandveruncert_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* verdirect at 251 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bearing at 252 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* horspeed at 253 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* verspeed at 254 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* horuncertspeed at 255 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* veruncertspeed at 256 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Horandveruncert_specs_1 = { sizeof(struct Horandveruncert), offsetof(struct Horandveruncert, _asn_ctx), asn_MAP_Horandveruncert_tag2el_1, 6, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Horandveruncert = { "Horandveruncert", "Horandveruncert", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Horandveruncert_tags_1, sizeof(asn_DEF_Horandveruncert_tags_1) /sizeof(asn_DEF_Horandveruncert_tags_1[0]), /* 1 */ asn_DEF_Horandveruncert_tags_1, /* Same as above */ sizeof(asn_DEF_Horandveruncert_tags_1) /sizeof(asn_DEF_Horandveruncert_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Horandveruncert_1, 6, /* Elements count */ &asn_SPC_Horandveruncert_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/NotificationType.h0000644000175000017500000000247012576764164023444 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _NotificationType_H_ #define _NotificationType_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum NotificationType { NotificationType_noNotificationNoVerification = 0, NotificationType_notificationOnly = 1, NotificationType_notificationAndVerficationAllowedNA = 2, NotificationType_notificationAndVerficationDeniedNA = 3, NotificationType_privacyOverride = 4 /* * Enumeration is extensible */ } e_NotificationType; /* NotificationType */ typedef ENUMERATED_t NotificationType_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NotificationType; asn_struct_free_f NotificationType_free; asn_struct_print_f NotificationType_print; asn_constr_check_f NotificationType_constraint; ber_type_decoder_f NotificationType_decode_ber; der_type_encoder_f NotificationType_encode_der; xer_type_decoder_f NotificationType_decode_xer; xer_type_encoder_f NotificationType_encode_xer; per_type_decoder_f NotificationType_decode_uper; per_type_encoder_f NotificationType_encode_uper; #ifdef __cplusplus } #endif #endif /* _NotificationType_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/OCTET_STRING.h0000644000175000017500000000540312576764164022117 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _OCTET_STRING_H_ #define _OCTET_STRING_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct OCTET_STRING { uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ int size; /* Size of the buffer */ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ } OCTET_STRING_t; extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; asn_struct_free_f OCTET_STRING_free; asn_struct_print_f OCTET_STRING_print; asn_struct_print_f OCTET_STRING_print_utf8; ber_type_decoder_f OCTET_STRING_decode_ber; der_type_encoder_f OCTET_STRING_encode_der; xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ xer_type_encoder_f OCTET_STRING_encode_xer; xer_type_encoder_f OCTET_STRING_encode_xer_utf8; per_type_decoder_f OCTET_STRING_decode_uper; per_type_encoder_f OCTET_STRING_encode_uper; /****************************** * Handy conversion routines. * ******************************/ /* * This function clears the previous value of the OCTET STRING (if any) * and then allocates a new memory with the specified content (str/size). * If size = -1, the size of the original string will be determined * using strlen(str). * If str equals to NULL, the function will silently clear the * current contents of the OCTET STRING. * Returns 0 if it was possible to perform operation, -1 otherwise. */ int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); /* Handy conversion from the C string into the OCTET STRING. */ #define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) /* * Allocate and fill the new OCTET STRING and return a pointer to the newly * allocated object. NULL is permitted in str: the function will just allocate * empty OCTET STRING. */ OCTET_STRING_t *OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int size); /**************************** * Internally useful stuff. * ****************************/ typedef struct asn_OCTET_STRING_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the structure */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ enum asn_OS_Subvariant { ASN_OSUBV_ANY, /* The open type (ANY) */ ASN_OSUBV_BIT, /* BIT STRING */ ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ ASN_OSUBV_U16, /* 16-bit character (BMPString) */ ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ } subvariant; } asn_OCTET_STRING_specifics_t; #ifdef __cplusplus } #endif #endif /* _OCTET_STRING_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/RequestedAssistData.h0000644000175000017500000000241112576764164024071 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #ifndef _RequestedAssistData_H_ #define _RequestedAssistData_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct XNavigationModel; /* RequestedAssistData */ typedef struct RequestedAssistData { BOOLEAN_t almanacRequested; BOOLEAN_t utcModelRequested; BOOLEAN_t ionosphericModelRequested; BOOLEAN_t dgpsCorrectionsRequested; BOOLEAN_t referenceLocationRequested; BOOLEAN_t referenceTimeRequested; BOOLEAN_t acquisitionAssistanceRequested; BOOLEAN_t realTimeIntegrityRequested; BOOLEAN_t navigationModelRequested; struct XNavigationModel *navigationModelData /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } RequestedAssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RequestedAssistData; #ifdef __cplusplus } #endif /* Referred external types */ #include "XNavigationModel.h" #endif /* _RequestedAssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/RequestedAssistData.c0000644000175000017500000001306112576764164024067 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #include "RequestedAssistData.h" static asn_TYPE_member_t asn_MBR_RequestedAssistData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, almanacRequested), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "almanacRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, utcModelRequested), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "utcModelRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, ionosphericModelRequested), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ionosphericModelRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, dgpsCorrectionsRequested), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "dgpsCorrectionsRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, referenceLocationRequested), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceLocationRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, referenceTimeRequested), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceTimeRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, acquisitionAssistanceRequested), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "acquisitionAssistanceRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, realTimeIntegrityRequested), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "realTimeIntegrityRequested" }, { ATF_NOFLAGS, 0, offsetof(struct RequestedAssistData, navigationModelRequested), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "navigationModelRequested" }, { ATF_POINTER, 1, offsetof(struct RequestedAssistData, navigationModelData), (ASN_TAG_CLASS_CONTEXT | (9 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_XNavigationModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "navigationModelData" }, }; static int asn_MAP_RequestedAssistData_oms_1[] = { 9 }; static ber_tlv_tag_t asn_DEF_RequestedAssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_RequestedAssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* almanacRequested at 24 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* utcModelRequested at 25 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ionosphericModelRequested at 26 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dgpsCorrectionsRequested at 27 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* referenceLocationRequested at 28 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* referenceTimeRequested at 29 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* acquisitionAssistanceRequested at 30 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* realTimeIntegrityRequested at 31 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* navigationModelRequested at 32 */ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* navigationModelData at 33 */ }; static asn_SEQUENCE_specifics_t asn_SPC_RequestedAssistData_specs_1 = { sizeof(struct RequestedAssistData), offsetof(struct RequestedAssistData, _asn_ctx), asn_MAP_RequestedAssistData_tag2el_1, 10, /* Count of tags in the map */ asn_MAP_RequestedAssistData_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 9, /* Start extensions */ 11 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_RequestedAssistData = { "RequestedAssistData", "RequestedAssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RequestedAssistData_tags_1, sizeof(asn_DEF_RequestedAssistData_tags_1) /sizeof(asn_DEF_RequestedAssistData_tags_1[0]), /* 1 */ asn_DEF_RequestedAssistData_tags_1, /* Same as above */ sizeof(asn_DEF_RequestedAssistData_tags_1) /sizeof(asn_DEF_RequestedAssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_RequestedAssistData_1, 10, /* Elements count */ &asn_SPC_RequestedAssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/per_decoder.c0000644000175000017500000000475212576764164022427 0ustar carlescarles#include #include #include /* * Decode a "Production of a complete encoding", X.691#10.1. * The complete encoding contains at least one byte, and is an integral * multiple of 8 bytes. */ asn_dec_rval_t uper_decode_complete(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size) { asn_dec_rval_t rval; rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); if(rval.consumed) { /* * We've always given 8-aligned data, * so convert bits to integral bytes. */ rval.consumed += 7; rval.consumed >>= 3; } else if(rval.code == RC_OK) { if(size) { if(((uint8_t *)buffer)[0] == 0) { rval.consumed = 1; /* 1 byte */ } else { ASN_DEBUG("Expecting single zeroed byte"); rval.code = RC_FAIL; } } else { /* Must contain at least 8 bits. */ rval.code = RC_WMORE; } } return rval; } asn_dec_rval_t uper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size, int skip_bits, int unused_bits) { asn_codec_ctx_t s_codec_ctx; asn_dec_rval_t rval; asn_per_data_t pd; if(skip_bits < 0 || skip_bits > 7 || unused_bits < 0 || unused_bits > 7 || (unused_bits > 0 && !size)) _ASN_DECODE_FAILED; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* Fill in the position indicator */ memset(&pd, 0, sizeof(pd)); pd.buffer = (const uint8_t *)buffer; pd.nboff = skip_bits; pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ if(pd.nboff > pd.nbits) _ASN_DECODE_FAILED; /* * Invoke type-specific decoder. */ if(!td->uper_decoder) _ASN_DECODE_FAILED; /* PER is not compiled in */ rval = td->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); if(rval.code == RC_OK) { /* Return the number of consumed bits */ rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + pd.nboff - skip_bits; ASN_DEBUG("PER decoding consumed %d, counted %d", rval.consumed, pd.moved); assert(rval.consumed == pd.moved); } else { /* PER codec is not a restartable */ rval.consumed = 0; } return rval; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constr_CHOICE.h0000644000175000017500000000256612576764164022504 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_CHOICE_H_ #define _CONSTR_CHOICE_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct asn_CHOICE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_codec_ctx_t member */ int pres_offset; /* Identifier of the present member */ int pres_size; /* Size of the identifier (enum) */ /* * Tags to members mapping table. */ asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* Canonical ordering of CHOICE elements, for PER */ int *canonical_order; /* * Extensions-related stuff. */ int ext_start; /* First member of extensions, or -1 */ } asn_CHOICE_specifics_t; /* * A set specialized functions dealing with the CHOICE type. */ asn_struct_free_f CHOICE_free; asn_struct_print_f CHOICE_print; asn_constr_check_f CHOICE_constraint; ber_type_decoder_f CHOICE_decode_ber; der_type_encoder_f CHOICE_encode_der; xer_type_decoder_f CHOICE_decode_xer; xer_type_encoder_f CHOICE_encode_xer; per_type_decoder_f CHOICE_decode_uper; per_type_encoder_f CHOICE_encode_uper; asn_outmost_tag_f CHOICE_outmost_tag; #ifdef __cplusplus } #endif #endif /* _CONSTR_CHOICE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FormatIndicator.h0000644000175000017500000000244512576764164023243 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _FormatIndicator_H_ #define _FormatIndicator_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum FormatIndicator { FormatIndicator_logicalName = 0, FormatIndicator_e_mailAddress = 1, FormatIndicator_msisdn = 2, FormatIndicator_url = 3, FormatIndicator_sipUrl = 4, FormatIndicator_min = 5, FormatIndicator_mdn = 6, FormatIndicator_imsPublicIdentity = 7 /* * Enumeration is extensible */ } e_FormatIndicator; /* FormatIndicator */ typedef ENUMERATED_t FormatIndicator_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FormatIndicator; asn_struct_free_f FormatIndicator_free; asn_struct_print_f FormatIndicator_print; asn_constr_check_f FormatIndicator_constraint; ber_type_decoder_f FormatIndicator_decode_ber; der_type_encoder_f FormatIndicator_encode_der; xer_type_decoder_f FormatIndicator_decode_xer; xer_type_encoder_f FormatIndicator_encode_xer; per_type_decoder_f FormatIndicator_decode_uper; per_type_encoder_f FormatIndicator_encode_uper; #ifdef __cplusplus } #endif #endif /* _FormatIndicator_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/constraints.c0000644000175000017500000000425712576764164022523 0ustar carlescarles#include "asn_internal.h" #include "constraints.h" int asn_generic_no_constraint(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { (void)type_descriptor; /* Unused argument */ (void)struct_ptr; /* Unused argument */ (void)cb; /* Unused argument */ (void)key; /* Unused argument */ /* Nothing to check */ return 0; } int asn_generic_unknown_constraint(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { (void)type_descriptor; /* Unused argument */ (void)struct_ptr; /* Unused argument */ (void)cb; /* Unused argument */ (void)key; /* Unused argument */ /* Unknown how to check */ return 0; } struct errbufDesc { asn_TYPE_descriptor_t *failed_type; const void *failed_struct_ptr; char *errbuf; size_t errlen; }; static void _asn_i_ctfailcb(void *key, asn_TYPE_descriptor_t *td, const void *sptr, const char *fmt, ...) { struct errbufDesc *arg = key; va_list ap; ssize_t vlen; ssize_t maxlen; arg->failed_type = td; arg->failed_struct_ptr = sptr; maxlen = arg->errlen; if(maxlen <= 0) return; va_start(ap, fmt); vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); va_end(ap); if(vlen >= maxlen) { arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ arg->errlen = maxlen - 1; /* Not counting termination */ return; } else if(vlen >= 0) { arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ arg->errlen = vlen; /* Not counting termination */ } else { /* * The libc on this system is broken. */ vlen = sizeof("") - 1; maxlen--; arg->errlen = vlen < maxlen ? vlen : maxlen; memcpy(arg->errbuf, "", arg->errlen); arg->errbuf[arg->errlen] = 0; } return; } int asn_check_constraints(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, char *errbuf, size_t *errlen) { struct errbufDesc arg; int ret; arg.failed_type = 0; arg.failed_struct_ptr = 0; arg.errbuf = errbuf; arg.errlen = errlen ? *errlen : 0; ret = type_descriptor->check_constraints(type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); if(ret == -1 && errlen) *errlen = arg.errlen; return ret; } gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/UARFCN.h0000644000175000017500000000147412576764164021135 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _UARFCN_H_ #define _UARFCN_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* UARFCN */ typedef long UARFCN_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_UARFCN; asn_struct_free_f UARFCN_free; asn_struct_print_f UARFCN_print; asn_constr_check_f UARFCN_constraint; ber_type_decoder_f UARFCN_decode_ber; der_type_encoder_f UARFCN_encode_der; xer_type_decoder_f UARFCN_decode_xer; xer_type_encoder_f UARFCN_encode_xer; per_type_decoder_f UARFCN_decode_uper; per_type_encoder_f UARFCN_encode_uper; #ifdef __cplusplus } #endif #endif /* _UARFCN_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/WcdmaCellInformation.c0000644000175000017500000001516012576764164024210 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "WcdmaCellInformation.h" static int memb_refMCC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refMNC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_refUC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 268435455)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_primaryScramblingCode_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 511)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refMCC_constr_2 = { { APC_CONSTRAINED, 10, 10, 0, 999 } /* (0..999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refMNC_constr_3 = { { APC_CONSTRAINED, 10, 10, 0, 999 } /* (0..999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_refUC_constr_4 = { { APC_CONSTRAINED, 28, -1, 0, 268435455 } /* (0..268435455) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_primaryScramblingCode_constr_6 = { { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_WcdmaCellInformation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct WcdmaCellInformation, refMCC), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refMCC_constraint_1, &asn_PER_memb_refMCC_constr_2, 0, "refMCC" }, { ATF_NOFLAGS, 0, offsetof(struct WcdmaCellInformation, refMNC), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refMNC_constraint_1, &asn_PER_memb_refMNC_constr_3, 0, "refMNC" }, { ATF_NOFLAGS, 0, offsetof(struct WcdmaCellInformation, refUC), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refUC_constraint_1, &asn_PER_memb_refUC_constr_4, 0, "refUC" }, { ATF_POINTER, 3, offsetof(struct WcdmaCellInformation, frequencyInfo), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrequencyInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "frequencyInfo" }, { ATF_POINTER, 2, offsetof(struct WcdmaCellInformation, primaryScramblingCode), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_primaryScramblingCode_constraint_1, &asn_PER_memb_primaryScramblingCode_constr_6, 0, "primaryScramblingCode" }, { ATF_POINTER, 1, offsetof(struct WcdmaCellInformation, measuredResultsList), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MeasuredResultsList, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "measuredResultsList" }, }; static int asn_MAP_WcdmaCellInformation_oms_1[] = { 3, 4, 5 }; static ber_tlv_tag_t asn_DEF_WcdmaCellInformation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_WcdmaCellInformation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refMCC at 112 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* refMNC at 113 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* refUC at 114 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* frequencyInfo at 115 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* primaryScramblingCode at 116 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* measuredResultsList at 117 */ }; static asn_SEQUENCE_specifics_t asn_SPC_WcdmaCellInformation_specs_1 = { sizeof(struct WcdmaCellInformation), offsetof(struct WcdmaCellInformation, _asn_ctx), asn_MAP_WcdmaCellInformation_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_WcdmaCellInformation_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_WcdmaCellInformation = { "WcdmaCellInformation", "WcdmaCellInformation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_WcdmaCellInformation_tags_1, sizeof(asn_DEF_WcdmaCellInformation_tags_1) /sizeof(asn_DEF_WcdmaCellInformation_tags_1[0]), /* 1 */ asn_DEF_WcdmaCellInformation_tags_1, /* Same as above */ sizeof(asn_DEF_WcdmaCellInformation_tags_1) /sizeof(asn_DEF_WcdmaCellInformation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_WcdmaCellInformation_1, 6, /* Elements count */ &asn_SPC_WcdmaCellInformation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/Notification.c0000644000175000017500000001217212576764164022575 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #include "Notification.h" static int memb_requestorId_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 50)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_clientName_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 50)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_requestorId_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 50 } /* (SIZE(1..50)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_clientName_constr_6 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 50 } /* (SIZE(1..50)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Notification_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Notification, notificationType), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NotificationType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "notificationType" }, { ATF_POINTER, 5, offsetof(struct Notification, encodingType), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_EncodingType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "encodingType" }, { ATF_POINTER, 4, offsetof(struct Notification, requestorId), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_requestorId_constraint_1, &asn_PER_memb_requestorId_constr_4, 0, "requestorId" }, { ATF_POINTER, 3, offsetof(struct Notification, requestorIdType), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FormatIndicator, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "requestorIdType" }, { ATF_POINTER, 2, offsetof(struct Notification, clientName), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OCTET_STRING, memb_clientName_constraint_1, &asn_PER_memb_clientName_constr_6, 0, "clientName" }, { ATF_POINTER, 1, offsetof(struct Notification, clientNameType), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FormatIndicator, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "clientNameType" }, }; static int asn_MAP_Notification_oms_1[] = { 1, 2, 3, 4, 5 }; static ber_tlv_tag_t asn_DEF_Notification_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Notification_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* notificationType at 20 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* encodingType at 21 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* requestorId at 22 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* requestorIdType at 23 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* clientName at 24 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* clientNameType at 25 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Notification_specs_1 = { sizeof(struct Notification), offsetof(struct Notification, _asn_ctx), asn_MAP_Notification_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_Notification_oms_1, /* Optional members */ 5, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Notification = { "Notification", "Notification", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Notification_tags_1, sizeof(asn_DEF_Notification_tags_1) /sizeof(asn_DEF_Notification_tags_1[0]), /* 1 */ asn_DEF_Notification_tags_1, /* Same as above */ sizeof(asn_DEF_Notification_tags_1) /sizeof(asn_DEF_Notification_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Notification_1, 6, /* Elements count */ &asn_SPC_Notification_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/KeyIdentity.h0000644000175000017500000000160512576764164022415 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-INIT" * found in "../supl-init.asn" */ #ifndef _KeyIdentity_H_ #define _KeyIdentity_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* KeyIdentity */ typedef BIT_STRING_t KeyIdentity_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_KeyIdentity; asn_struct_free_f KeyIdentity_free; asn_struct_print_f KeyIdentity_print; asn_constr_check_f KeyIdentity_constraint; ber_type_decoder_f KeyIdentity_decode_ber; der_type_encoder_f KeyIdentity_encode_der; xer_type_decoder_f KeyIdentity_decode_xer; xer_type_encoder_f KeyIdentity_encode_xer; per_type_decoder_f KeyIdentity_decode_uper; per_type_encoder_f KeyIdentity_encode_uper; #ifdef __cplusplus } #endif #endif /* _KeyIdentity_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/IPAddress.h0000644000175000017500000000163212576764164021771 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _IPAddress_H_ #define _IPAddress_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum IPAddress_PR { IPAddress_PR_NOTHING, /* No components present */ IPAddress_PR_ipv4Address, IPAddress_PR_ipv6Address } IPAddress_PR; /* IPAddress */ typedef struct IPAddress { IPAddress_PR present; union IPAddress_u { OCTET_STRING_t ipv4Address; OCTET_STRING_t ipv6Address; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } IPAddress_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_IPAddress; #ifdef __cplusplus } #endif #endif /* _IPAddress_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/FQDN.c0000644000175000017500000001422712576764164020702 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #include "FQDN.h" static int permitted_alphabet_table_1[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, /* -. */ 3, 4, 5, 6, 7, 8, 9,10,11,12, 0, 0, 0, 0, 0, 0, /* 0123456789 */ 0,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27, /* ABCDEFGHIJKLMNO */ 28,29,30,31,32,33,34,35,36,37,38, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ 0,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53, /* abcdefghijklmno */ 54,55,56,57,58,59,60,61,62,63,64, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ }; static int permitted_alphabet_code2value_1[64] = { 45,46,48,49,50,51,52,53,54,55,56,57,65,66,67,68, 69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84, 85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106, 107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122, }; static int check_permitted_alphabet_1(const void *sptr) { int *table = permitted_alphabet_table_1; /* The underlying type is VisibleString */ const VisibleString_t *st = (const VisibleString_t *)sptr; const uint8_t *ch = st->buf; const uint8_t *end = ch + st->size; for(; ch < end; ch++) { uint8_t cv = *ch; if(!table[cv]) return -1; } return 0; } int FQDN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const VisibleString_t *st = (const VisibleString_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 255) && !check_permitted_alphabet_1(st)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int asn_PER_MAP_FQDN_1_v2c(unsigned int value) { if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) return -1; return permitted_alphabet_table_1[value] - 1; } static int asn_PER_MAP_FQDN_1_c2v(unsigned int code) { if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) return -1; return permitted_alphabet_code2value_1[code]; } /* * This type is implemented using VisibleString, * so here we adjust the DEF accordingly. */ static void FQDN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_VisibleString.free_struct; td->print_struct = asn_DEF_VisibleString.print_struct; td->ber_decoder = asn_DEF_VisibleString.ber_decoder; td->der_encoder = asn_DEF_VisibleString.der_encoder; td->xer_decoder = asn_DEF_VisibleString.xer_decoder; td->xer_encoder = asn_DEF_VisibleString.xer_encoder; td->uper_decoder = asn_DEF_VisibleString.uper_decoder; td->uper_encoder = asn_DEF_VisibleString.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_VisibleString.per_constraints; td->elements = asn_DEF_VisibleString.elements; td->elements_count = asn_DEF_VisibleString.elements_count; td->specifics = asn_DEF_VisibleString.specifics; } void FQDN_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { FQDN_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int FQDN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { FQDN_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t FQDN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { FQDN_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t FQDN_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { FQDN_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t FQDN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { FQDN_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t FQDN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { FQDN_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t FQDN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { FQDN_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t FQDN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { FQDN_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_FQDN_constr_1 = { { APC_CONSTRAINED, 6, 6, 45, 122 } /* (45..122) */, { APC_CONSTRAINED, 8, 8, 1, 255 } /* (SIZE(1..255)) */, asn_PER_MAP_FQDN_1_v2c, /* Value to PER code map */ asn_PER_MAP_FQDN_1_c2v /* PER code to value map */ }; static ber_tlv_tag_t asn_DEF_FQDN_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)) }; asn_TYPE_descriptor_t asn_DEF_FQDN = { "FQDN", "FQDN", FQDN_free, FQDN_print, FQDN_constraint, FQDN_decode_ber, FQDN_encode_der, FQDN_decode_xer, FQDN_encode_xer, FQDN_decode_uper, FQDN_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FQDN_tags_1, sizeof(asn_DEF_FQDN_tags_1) /sizeof(asn_DEF_FQDN_tags_1[0]), /* 1 */ asn_DEF_FQDN_tags_1, /* Same as above */ sizeof(asn_DEF_FQDN_tags_1) /sizeof(asn_DEF_FQDN_tags_1[0]), /* 1 */ &asn_PER_type_FQDN_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SETAuthKey.c0000644000175000017500000000720412576764164022075 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-RESPONSE" * found in "../supl-response.asn" */ #include "SETAuthKey.h" static int memb_shortKey_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 128)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_longKey_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size == 256)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_shortKey_constr_2 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 128, 128 } /* (SIZE(128..128)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_longKey_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 256, 256 } /* (SIZE(256..256)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_type_SETAuthKey_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SETAuthKey_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SETAuthKey, choice.shortKey), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_shortKey_constraint_1, &asn_PER_memb_shortKey_constr_2, 0, "shortKey" }, { ATF_NOFLAGS, 0, offsetof(struct SETAuthKey, choice.longKey), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, memb_longKey_constraint_1, &asn_PER_memb_longKey_constr_3, 0, "longKey" }, }; static asn_TYPE_tag2member_t asn_MAP_SETAuthKey_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* shortKey at 17 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* longKey at 18 */ }; static asn_CHOICE_specifics_t asn_SPC_SETAuthKey_specs_1 = { sizeof(struct SETAuthKey), offsetof(struct SETAuthKey, _asn_ctx), offsetof(struct SETAuthKey, present), sizeof(((struct SETAuthKey *)0)->present), asn_MAP_SETAuthKey_tag2el_1, 2, /* Count of tags in the map */ 0, 2 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_SETAuthKey = { "SETAuthKey", "SETAuthKey", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_SETAuthKey_constr_1, asn_MBR_SETAuthKey_1, 2, /* Elements count */ &asn_SPC_SETAuthKey_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/LocationId.h0000644000175000017500000000141112576764164022173 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _LocationId_H_ #define _LocationId_H_ #include /* Including external dependencies */ #include "CellInfo.h" #include "Status.h" #include #ifdef __cplusplus extern "C" { #endif /* LocationId */ typedef struct LocationId { CellInfo_t cellInfo; Status_t status; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } LocationId_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_LocationId; #ifdef __cplusplus } #endif #endif /* _LocationId_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/XNavigationModel.h0000644000175000017500000000172212576764164023363 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "SUPL-POS-INIT" * found in "../supl-posinit.asn" */ #ifndef _XNavigationModel_H_ #define _XNavigationModel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SatelliteInfo; /* XNavigationModel */ typedef struct XNavigationModel { long gpsWeek; long gpsToe; long nSAT; long toeLimit; struct SatelliteInfo *satInfo /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } XNavigationModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_XNavigationModel; #ifdef __cplusplus } #endif /* Referred external types */ #include "SatelliteInfo.h" #endif /* _XNavigationModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/xer_decoder.h0000644000175000017500000000641012576764164022435 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_DECODER_H_ #define _XER_DECODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * The XER decoder of any ASN.1 type. May be invoked by the application. */ asn_dec_rval_t xer_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of data buffer */ ); /* * Type of the type-specific XER decoder function. */ typedef asn_dec_rval_t (xer_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const char *opt_mname, /* Member name */ const void *buf_ptr, size_t size ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Generalized function for decoding the primitive values. * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 * and others. This function should not be used by applications, as its API * is subject to changes. */ asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx, /* Type decoder context */ void *struct_key, /* Treated as opaque pointer */ const char *xml_tag, /* Expected XML tag name */ const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_key, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_key, const void *chunk_buf, size_t chunk_size, int have_more) ); /* * Fetch the next XER (XML) token from the stream. * The function returns the number of bytes occupied by the chunk type, * returned in the _ch_type. The _ch_type is only set (and valid) when * the return value is greater than 0. */ typedef enum pxer_chunk_type { PXER_TAG, /* Complete XER tag */ PXER_TEXT, /* Plain text between XER tags */ PXER_COMMENT /* A comment, may be part of */ } pxer_chunk_type_e; ssize_t xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); /* * This function checks the buffer against the tag name is expected to occur. */ typedef enum xer_check_tag { XCT_BROKEN = 0, /* The tag is broken */ XCT_OPENING = 1, /* This is the tag */ XCT_CLOSING = 2, /* This is the tag */ XCT_BOTH = 3, /* This is the tag */ XCT__UNK__MASK = 4, /* Mask of everything unexpected */ XCT_UNKNOWN_OP = 5, /* Unexpected tag */ XCT_UNKNOWN_CL = 6, /* Unexpected tag */ XCT_UNKNOWN_BO = 7 /* Unexpected tag */ } xer_check_tag_e; xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag); /* * Check whether this buffer consists of entirely XER whitespace characters. * RETURN VALUES: * 1: Whitespace or empty string * 0: Non-whitespace */ int xer_is_whitespace(const void *chunk_buf, size_t chunk_size); /* * Skip the series of anticipated extensions. */ int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); #ifdef __cplusplus } #endif #endif /* _XER_DECODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/ENUMERATED.h0000644000175000017500000000102012576764164021573 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _ENUMERATED_H_ #define _ENUMERATED_H_ #include #ifdef __cplusplus extern "C" { #endif typedef INTEGER_t ENUMERATED_t; /* Implemented via INTEGER */ extern asn_TYPE_descriptor_t asn_DEF_ENUMERATED; per_type_decoder_f ENUMERATED_decode_uper; per_type_encoder_f ENUMERATED_encode_uper; #ifdef __cplusplus } #endif #endif /* _ENUMERATED_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-supl/SlpSessionID.h0000644000175000017500000000133612576764164022473 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "ULP-Components" * found in "../supl-common.asn" */ #ifndef _SlpSessionID_H_ #define _SlpSessionID_H_ #include /* Including external dependencies */ #include #include "SLPAddress.h" #include #ifdef __cplusplus extern "C" { #endif /* SlpSessionID */ typedef struct SlpSessionID { OCTET_STRING_t sessionID; SLPAddress_t slpId; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SlpSessionID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SlpSessionID; #ifdef __cplusplus } #endif #endif /* _SlpSessionID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/CMakeLists.txt0000644000175000017500000000611312576764211020770 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # file(GLOB ASN_RRLP_SOURCES "${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp/*.c") file(GLOB ASN_SUPL_SOURCES "${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl/*.c") set (SUPL_SOURCES supl.c ) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core/libs/supl ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl ${GNUTLS_INCLUDE_DIR} ) if(CMAKE_C_COMPILER_ID MATCHES "Clang") if(CMAKE_BUILD_TYPE MATCHES "Release") set(MY_C_FLAGS "${MY_C_FLAGS} -Wno-parentheses-equality") endif(CMAKE_BUILD_TYPE MATCHES "Release") endif(CMAKE_C_COMPILER_ID MATCHES "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_C_FLAGS}") find_library(GNUTLS_OPENSSL_LIBRARY NAMES gnutls-openssl libgnutls-openssl.so.27 HINTS /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 /opt/local/lib /usr/lib/x86_64-linux-gnu /usr/lib/aarch64-linux-gnu /usr/lib/arm-linux-gnueabihf /usr/lib/arm-linux-gnueabi /usr/lib/i386-linux-gnu ) if(NOT GNUTLS_OPENSSL_LIBRARY) message(STATUS "The OpenSSL implementation provided by the GnuTLS library has not been found.") if(OS_IS_LINUX) message("Please install it by doing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(FATAL_ERROR " sudo yum install libgnutls-openssl-devel") else(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") message(FATAL_ERROR " sudo apt-get install libgnutls-openssl-dev") endif(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") endif(OS_IS_LINUX) endif(NOT GNUTLS_OPENSSL_LIBRARY) add_library (supl_library STATIC ${ASN_RRLP_SOURCES} ${ASN_SUPL_SOURCES} ${SUPL_SOURCES}) target_link_libraries (supl_library ${GNUTLS_LIBRARIES} ${GNUTLS_OPENSSL_LIBRARY} gnss_system_parameters) set_target_properties(supl_library PROPERTIES LINKER_LANGUAGE C) gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/0000755000175000017500000000000012576764164017774 5ustar carlescarlesgnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceIdentityType.c0000644000175000017500000000650712576764164024422 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceIdentityType.h" static asn_per_constraints_t asn_PER_type_ReferenceIdentityType_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 4 } /* (0..4) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_ReferenceIdentityType_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ReferenceIdentityType, choice.bsicAndCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSICAndCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsicAndCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceIdentityType, choice.ci), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ci" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceIdentityType, choice.requestIndex), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RequestIndex, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "requestIndex" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceIdentityType, choice.systemInfoIndex), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SystemInfoIndex, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoIndex" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceIdentityType, choice.ciAndLAC), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellIDAndLAC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ciAndLAC" }, }; static asn_TYPE_tag2member_t asn_MAP_ReferenceIdentityType_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bsicAndCarrier at 294 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ci at 295 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* requestIndex at 296 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* systemInfoIndex at 297 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ciAndLAC at 301 */ }; static asn_CHOICE_specifics_t asn_SPC_ReferenceIdentityType_specs_1 = { sizeof(struct ReferenceIdentityType), offsetof(struct ReferenceIdentityType, _asn_ctx), offsetof(struct ReferenceIdentityType, present), sizeof(((struct ReferenceIdentityType *)0)->present), asn_MAP_ReferenceIdentityType_tag2el_1, 5, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_ReferenceIdentityType = { "ReferenceIdentityType", "ReferenceIdentityType", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_ReferenceIdentityType_constr_1, asn_MBR_ReferenceIdentityType_1, 5, /* Elements count */ &asn_SPC_ReferenceIdentityType_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSClockModel.h0000644000175000017500000000214012576764164022752 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSClockModel_H_ #define _GANSSClockModel_H_ #include /* Including external dependencies */ #include "SeqOfStandardClockModelElement.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum GANSSClockModel_PR { GANSSClockModel_PR_NOTHING, /* No components present */ GANSSClockModel_PR_standardClockModelList, /* Extensions may appear below */ } GANSSClockModel_PR; /* GANSSClockModel */ typedef struct GANSSClockModel { GANSSClockModel_PR present; union GANSSClockModel_u { SeqOfStandardClockModelElement_t standardClockModelList; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSClockModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSClockModel; #ifdef __cplusplus } #endif #endif /* _GANSSClockModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistData.c0000644000175000017500000000342012576764164022661 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MsrAssistData.h" static asn_TYPE_member_t asn_MBR_MsrAssistData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MsrAssistData, msrAssistList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfMsrAssistBTS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrAssistList" }, }; static ber_tlv_tag_t asn_DEF_MsrAssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MsrAssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* msrAssistList at 189 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MsrAssistData_specs_1 = { sizeof(struct MsrAssistData), offsetof(struct MsrAssistData, _asn_ctx), asn_MAP_MsrAssistData_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MsrAssistData = { "MsrAssistData", "MsrAssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MsrAssistData_tags_1, sizeof(asn_DEF_MsrAssistData_tags_1) /sizeof(asn_DEF_MsrAssistData_tags_1[0]), /* 1 */ asn_DEF_MsrAssistData_tags_1, /* Same as above */ sizeof(asn_DEF_MsrAssistData_tags_1) /sizeof(asn_DEF_MsrAssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MsrAssistData_1, 1, /* Elements count */ &asn_SPC_MsrAssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/DGPSCorrections.c0000644000175000017500000000752212576764164023116 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "DGPSCorrections.h" static int memb_gpsTOW_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 604799)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_status_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_gpsTOW_constr_2 = { { APC_CONSTRAINED, 20, -1, 0, 604799 } /* (0..604799) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_status_constr_3 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_DGPSCorrections_1[] = { { ATF_NOFLAGS, 0, offsetof(struct DGPSCorrections, gpsTOW), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gpsTOW_constraint_1, &asn_PER_memb_gpsTOW_constr_2, 0, "gpsTOW" }, { ATF_NOFLAGS, 0, offsetof(struct DGPSCorrections, status), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_status_constraint_1, &asn_PER_memb_status_constr_3, 0, "status" }, { ATF_NOFLAGS, 0, offsetof(struct DGPSCorrections, satList), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfSatElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satList" }, }; static ber_tlv_tag_t asn_DEF_DGPSCorrections_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_DGPSCorrections_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gpsTOW at 655 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* status at 656 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* satList at 659 */ }; static asn_SEQUENCE_specifics_t asn_SPC_DGPSCorrections_specs_1 = { sizeof(struct DGPSCorrections), offsetof(struct DGPSCorrections, _asn_ctx), asn_MAP_DGPSCorrections_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_DGPSCorrections = { "DGPSCorrections", "DGPSCorrections", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_DGPSCorrections_tags_1, sizeof(asn_DEF_DGPSCorrections_tags_1) /sizeof(asn_DEF_DGPSCorrections_tags_1[0]), /* 1 */ asn_DEF_DGPSCorrections_tags_1, /* Same as above */ sizeof(asn_DEF_DGPSCorrections_tags_1) /sizeof(asn_DEF_DGPSCorrections_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_DGPSCorrections_1, 3, /* Elements count */ &asn_SPC_DGPSCorrections_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo-5-Ext.c0000644000175000017500000001204012576764164023676 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MeasureInfo-5-Ext.h" int OTD_MeasureInfo_5_Ext_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* Determine the number of elements */ size = _A_CSEQUENCE_FROM_VOID(sptr)->count; if((size >= 1 && size <= 2)) { /* Perform validation of the inner elements */ return td->check_constraints(td, sptr, ctfailcb, app_key); } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using SeqOfOTD_MsrElementRest, * so here we adjust the DEF accordingly. */ static void OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_SeqOfOTD_MsrElementRest.free_struct; td->print_struct = asn_DEF_SeqOfOTD_MsrElementRest.print_struct; td->ber_decoder = asn_DEF_SeqOfOTD_MsrElementRest.ber_decoder; td->der_encoder = asn_DEF_SeqOfOTD_MsrElementRest.der_encoder; td->xer_decoder = asn_DEF_SeqOfOTD_MsrElementRest.xer_decoder; td->xer_encoder = asn_DEF_SeqOfOTD_MsrElementRest.xer_encoder; td->uper_decoder = asn_DEF_SeqOfOTD_MsrElementRest.uper_decoder; td->uper_encoder = asn_DEF_SeqOfOTD_MsrElementRest.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_SeqOfOTD_MsrElementRest.per_constraints; td->elements = asn_DEF_SeqOfOTD_MsrElementRest.elements; td->elements_count = asn_DEF_SeqOfOTD_MsrElementRest.elements_count; td->specifics = asn_DEF_SeqOfOTD_MsrElementRest.specifics; } void OTD_MeasureInfo_5_Ext_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int OTD_MeasureInfo_5_Ext_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t OTD_MeasureInfo_5_Ext_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t OTD_MeasureInfo_5_Ext_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t OTD_MeasureInfo_5_Ext_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t OTD_MeasureInfo_5_Ext_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t OTD_MeasureInfo_5_Ext_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t OTD_MeasureInfo_5_Ext_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { OTD_MeasureInfo_5_Ext_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static ber_tlv_tag_t asn_DEF_OTD_MeasureInfo_5_Ext_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; asn_TYPE_descriptor_t asn_DEF_OTD_MeasureInfo_5_Ext = { "OTD-MeasureInfo-5-Ext", "OTD-MeasureInfo-5-Ext", OTD_MeasureInfo_5_Ext_free, OTD_MeasureInfo_5_Ext_print, OTD_MeasureInfo_5_Ext_constraint, OTD_MeasureInfo_5_Ext_decode_ber, OTD_MeasureInfo_5_Ext_encode_der, OTD_MeasureInfo_5_Ext_decode_xer, OTD_MeasureInfo_5_Ext_encode_xer, OTD_MeasureInfo_5_Ext_decode_uper, OTD_MeasureInfo_5_Ext_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MeasureInfo_5_Ext_tags_1, sizeof(asn_DEF_OTD_MeasureInfo_5_Ext_tags_1) /sizeof(asn_DEF_OTD_MeasureInfo_5_Ext_tags_1[0]), /* 1 */ asn_DEF_OTD_MeasureInfo_5_Ext_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MeasureInfo_5_Ext_tags_1) /sizeof(asn_DEF_OTD_MeasureInfo_5_Ext_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* Defined elsewhere */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfStandardClockModelElement.h0000644000175000017500000000173012576764164026113 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfStandardClockModelElement_H_ #define _SeqOfStandardClockModelElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct StandardClockModelElement; /* SeqOfStandardClockModelElement */ typedef struct SeqOfStandardClockModelElement { A_SEQUENCE_OF(struct StandardClockModelElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfStandardClockModelElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfStandardClockModelElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "StandardClockModelElement.h" #endif /* _SeqOfStandardClockModelElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ber_decoder.c0000644000175000017500000001677012576764164022410 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ asn_dec_rval_t rval; \ rval.code = _code; \ if(opt_ctx) opt_ctx->step = step; /* Save context */ \ if(_code == RC_OK || opt_ctx) \ rval.consumed = consumed_myself; \ else \ rval.consumed = 0; /* Context-free */ \ return rval; \ } while(0) /* * The BER decoder of any type. */ asn_dec_rval_t ber_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, const void *ptr, size_t size) { asn_codec_ctx_t s_codec_ctx; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* * Invoke type-specific decoder. */ return type_descriptor->ber_decoder(opt_codec_ctx, type_descriptor, struct_ptr, /* Pointer to the destination structure */ ptr, size, /* Buffer and its size */ 0 /* Default tag mode is 0 */ ); } /* * Check the set of >> tags matches the definition. */ asn_dec_rval_t ber_check_tags(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, const void *ptr, size_t size, int tag_mode, int last_tag_form, ber_tlv_len_t *last_length, int *opt_tlv_form) { ssize_t consumed_myself = 0; ssize_t tag_len; ssize_t len_len; ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; ber_tlv_len_t limit_len = -1; int expect_00_terminators = 0; int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ int tagno; /* * Make sure we didn't exceed the maximum stack size. */ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) RETURN(RC_FAIL); /* * So what does all this implicit skip stuff mean? * Imagine two types, * A ::= [5] IMPLICIT T * B ::= [2] EXPLICIT T * Where T is defined as * T ::= [4] IMPLICIT SEQUENCE { ... } * * Let's say, we are starting to decode type A, given the * following TLV stream: <5> <0>. What does this mean? * It means that the type A contains type T which is, * in turn, empty. * Remember though, that we are still in A. We cannot * just pass control to the type T decoder. Why? Because * the type T decoder expects <4> <0>, not <5> <0>. * So, we must make sure we are going to receive <5> while * still in A, then pass control to the T decoder, indicating * that the tag <4> was implicitly skipped. The decoder of T * hence will be prepared to treat <4> as valid tag, and decode * it appropriately. */ tagno = step /* Continuing where left previously */ + (tag_mode==1?-1:0) ; ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", td->name, (long)size, tag_mode, step, tagno); /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ if(tag_mode == 0 && tagno == td->tags_count) { /* * This must be the _untagged_ ANY type, * which outermost tag isn't known in advance. * Fetch the tag and length separately. */ tag_len = ber_fetch_tag(ptr, size, &tlv_tag); switch(tag_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(ptr); len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } ASN_DEBUG("Advancing %ld in ANY case", (long)(tag_len + len_len)); ADVANCE(tag_len + len_len); } else { assert(tagno < td->tags_count); /* At least one loop */ } for((void)tagno; tagno < td->tags_count; tagno++, step++) { /* * Fetch and process T from TLV. */ tag_len = ber_fetch_tag(ptr, size, &tlv_tag); ASN_DEBUG("Fetching tag from {%p,%ld}: " "len %ld, step %d, tagno %d got %s", ptr, (long)size, (long)tag_len, step, tagno, ber_tlv_tag_string(tlv_tag)); switch(tag_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(ptr); /* * If {I}, don't check anything. * If {I,B,C}, check B and C unless we're at I. */ if(tag_mode != 0 && step == 0) { /* * We don't expect tag to match here. * It's just because we don't know how the tag * is supposed to look like. */ } else { assert(tagno >= 0); /* Guaranteed by the code above */ if(tlv_tag != td->tags[tagno]) { /* * Unexpected tag. Too bad. */ ASN_DEBUG("Expected: %s, " "expectation failed (tn=%d, tm=%d)", ber_tlv_tag_string(td->tags[tagno]), tagno, tag_mode ); RETURN(RC_FAIL); } } /* * Attention: if there are more tags expected, * ensure that the current tag is presented * in constructed form (it contains other tags!). * If this one is the last one, check that the tag form * matches the one given in descriptor. */ if(tagno < (td->tags_count - 1)) { if(tlv_constr == 0) { ASN_DEBUG("tlv_constr = %d, expfail", tlv_constr); RETURN(RC_FAIL); } } else { if(last_tag_form != tlv_constr && last_tag_form != -1) { ASN_DEBUG("last_tag_form %d != %d", last_tag_form, tlv_constr); RETURN(RC_FAIL); } } /* * Fetch and process L from TLV. */ len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); ASN_DEBUG("Fetchinig len = %ld", (long)len_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } /* * FIXME * As of today, the chain of tags * must either contain several indefinite length TLVs, * or several definite length ones. * No mixing is allowed. */ if(tlv_len == -1) { /* * Indefinite length. */ if(limit_len == -1) { expect_00_terminators++; } else { ASN_DEBUG("Unexpected indefinite length " "in a chain of definite lengths"); RETURN(RC_FAIL); } ADVANCE(tag_len + len_len); continue; } else { if(expect_00_terminators) { ASN_DEBUG("Unexpected definite length " "in a chain of indefinite lengths"); RETURN(RC_FAIL); } } /* * Check that multiple TLVs specify ever decreasing length, * which is consistent. */ if(limit_len == -1) { limit_len = tlv_len + tag_len + len_len; if(limit_len < 0) { /* Too great tlv_len value? */ RETURN(RC_FAIL); } } else if(limit_len != tlv_len + tag_len + len_len) { /* * Inner TLV specifies length which is inconsistent * with the outer TLV's length value. */ ASN_DEBUG("Outer TLV is %ld and inner is %ld", (long)limit_len, (long)tlv_len); RETURN(RC_FAIL); } ADVANCE(tag_len + len_len); limit_len -= (tag_len + len_len); if((ssize_t)size > limit_len) { /* * Make sure that we won't consume more bytes * from the parent frame than the inferred limit. */ size = limit_len; } } if(opt_tlv_form) *opt_tlv_form = tlv_constr; if(expect_00_terminators) *last_length = -expect_00_terminators; else *last_length = tlv_len; RETURN(RC_OK); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_TYPE.h0000644000175000017500000001505612576764164022325 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This file contains the declaration structure called "ASN.1 Type Definition", * which holds all information necessary for encoding and decoding routines. * This structure even contains pointer to these encoding and decoding routines * for each defined ASN.1 type. */ #ifndef _CONSTR_TYPE_H_ #define _CONSTR_TYPE_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_TYPE_member_s; /* Forward declaration */ /* * This type provides the context information for various ASN.1 routines, * primarily ones doing decoding. A member _asn_ctx of this type must be * included into certain target language's structures, such as compound types. */ typedef struct asn_struct_ctx_s { short phase; /* Decoding phase */ short step; /* Elementary step of a phase */ int context; /* Other context information */ void *ptr; /* Decoder-specific stuff (stack elements) */ ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ } asn_struct_ctx_t; #include /* Basic Encoding Rules decoder */ #include /* Distinguished Encoding Rules encoder */ #include /* Decoder of XER (XML, text) */ #include /* Encoder into XER (XML, text) */ #include /* Packet Encoding Rules decoder */ #include /* Packet Encoding Rules encoder */ #include /* Subtype constraints support */ /* * Free the structure according to its specification. * If (free_contents_only) is set, the wrapper structure itself (struct_ptr) * will not be freed. (It may be useful in case the structure is allocated * statically or arranged on the stack, yet its elements are allocated * dynamically.) */ typedef void (asn_struct_free_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, int free_contents_only); #define ASN_STRUCT_FREE(asn_DEF, ptr) (asn_DEF).free_struct(&(asn_DEF),ptr,0) #define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ (asn_DEF).free_struct(&(asn_DEF),ptr,1) /* * Print the structure according to its specification. */ typedef int (asn_struct_print_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int level, /* Indentation level */ asn_app_consume_bytes_f *callback, void *app_key); /* * Return the outmost tag of the type. * If the type is untagged CHOICE, the dynamic operation is performed. * NOTE: This function pointer type is only useful internally. * Do not use it in your application. */ typedef ber_tlv_tag_t (asn_outmost_tag_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); /* The instance of the above function type; used internally. */ asn_outmost_tag_f asn_TYPE_outmost_tag; /* * The definitive description of the destination language's structure. */ typedef struct asn_TYPE_descriptor_s { char *name; /* A name of the ASN.1 type. "" in some cases. */ char *xml_tag; /* Name used in XML tag */ /* * Generalized functions for dealing with the specific type. * May be directly invoked by applications. */ asn_struct_free_f *free_struct; /* Free the structure */ asn_struct_print_f *print_struct; /* Human readable output */ asn_constr_check_f *check_constraints; /* Constraints validator */ ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ der_type_encoder_f *der_encoder; /* Canonical DER encoder */ xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ /*********************************************************************** * Internally useful members. Not to be used by applications directly. * **********************************************************************/ /* * Tags that are expected to occur. */ asn_outmost_tag_f *outmost_tag; /* */ ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ int tags_count; /* Number of tags which are expected */ ber_tlv_tag_t *all_tags;/* Every tag for BER/containment */ int all_tags_count; /* Number of tags */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ /* * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). */ struct asn_TYPE_member_s *elements; int elements_count; /* * Additional information describing the type, used by appropriate * functions above. */ void *specifics; } asn_TYPE_descriptor_t; /* * This type describes an element of the constructed type, * i.e. SEQUENCE, SET, CHOICE, etc. */ enum asn_TYPE_flags_e { ATF_NOFLAGS, ATF_POINTER = 0x01, /* Represented by the pointer */ ATF_OPEN_TYPE = 0x02 /* ANY type, without meaningful tag */ }; typedef struct asn_TYPE_member_s { enum asn_TYPE_flags_e flags; /* Element's presentation flags */ int optional; /* Following optional members, including current */ int memb_offset; /* Offset of the element */ ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ asn_TYPE_descriptor_t *type; /* Member type descriptor */ asn_constr_check_f *memb_constraints; /* Constraints validator */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ int (*default_value)(int setval, void **sptr); /* DEFAULT */ char *name; /* ASN.1 identifier of the element */ } asn_TYPE_member_t; /* * BER tag to element number mapping. */ typedef struct asn_TYPE_tag2member_s { ber_tlv_tag_t el_tag; /* Outmost tag of the member */ int el_no; /* Index of the associated member, base 0 */ int toff_first; /* First occurence of the el_tag, relative */ int toff_last; /* Last occurence of the el_tag, relatvie */ } asn_TYPE_tag2member_t; /* * This function is a wrapper around (td)->print_struct, which prints out * the contents of the target language's structure (struct_ptr) into the * file pointer (stream) in human readable form. * RETURN VALUES: * 0: The structure is printed. * -1: Problem dumping the structure. * (See also xer_fprint() in xer_encoder.h) */ int asn_fprint(FILE *stream, /* Destination stream descriptor */ asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ const void *struct_ptr); /* Structure to be printed */ #ifdef __cplusplus } #endif #endif /* _CONSTR_TYPE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-7-MsrPosition-Rsp-Extension.c0000644000175000017500000000603612576764164026033 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel-7-MsrPosition-Rsp-Extension.h" static asn_TYPE_member_t asn_MBR_Rel_7_MsrPosition_Rsp_Extension_1[] = { { ATF_POINTER, 3, offsetof(struct Rel_7_MsrPosition_Rsp_Extension, velEstimate), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_VelocityEstimate, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "velEstimate" }, { ATF_POINTER, 2, offsetof(struct Rel_7_MsrPosition_Rsp_Extension, ganssLocationInfo), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSLocationInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssLocationInfo" }, { ATF_POINTER, 1, offsetof(struct Rel_7_MsrPosition_Rsp_Extension, ganssMeasureInfo), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSMeasureInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssMeasureInfo" }, }; static int asn_MAP_Rel_7_MsrPosition_Rsp_Extension_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel_7_MsrPosition_Rsp_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* velEstimate at 1397 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssLocationInfo at 1402 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ganssMeasureInfo at 1403 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel_7_MsrPosition_Rsp_Extension_specs_1 = { sizeof(struct Rel_7_MsrPosition_Rsp_Extension), offsetof(struct Rel_7_MsrPosition_Rsp_Extension, _asn_ctx), asn_MAP_Rel_7_MsrPosition_Rsp_Extension_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_Rel_7_MsrPosition_Rsp_Extension_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel_7_MsrPosition_Rsp_Extension = { "Rel-7-MsrPosition-Rsp-Extension", "Rel-7-MsrPosition-Rsp-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1, sizeof(asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1) /sizeof(asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1) /sizeof(asn_DEF_Rel_7_MsrPosition_Rsp_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel_7_MsrPosition_Rsp_Extension_1, 3, /* Elements count */ &asn_SPC_Rel_7_MsrPosition_Rsp_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_SET_OF.h0000644000175000017500000000204612576764164022556 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SET_OF_H_ #define _CONSTR_SET_OF_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct asn_SET_OF_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ /* XER-specific stuff */ int as_XMLValueList; /* The member type must be encoded like this */ } asn_SET_OF_specifics_t; /* * A set specialized functions dealing with the SET OF type. */ asn_struct_free_f SET_OF_free; asn_struct_print_f SET_OF_print; asn_constr_check_f SET_OF_constraint; ber_type_decoder_f SET_OF_decode_ber; der_type_encoder_f SET_OF_encode_der; xer_type_decoder_f SET_OF_decode_xer; xer_type_encoder_f SET_OF_encode_xer; per_type_decoder_f SET_OF_decode_uper; per_type_encoder_f SET_OF_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SET_OF_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PositionMethod.c0000644000175000017500000001217412576764164023112 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "PositionMethod.h" int PositionMethod_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void PositionMethod_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void PositionMethod_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { PositionMethod_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int PositionMethod_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t PositionMethod_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t PositionMethod_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t PositionMethod_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t PositionMethod_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t PositionMethod_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t PositionMethod_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { PositionMethod_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_PositionMethod_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_PositionMethod_value2enum_1[] = { { 0, 4, "eotd" }, { 1, 3, "gps" }, { 2, 9, "gpsOrEOTD" } }; static unsigned int asn_MAP_PositionMethod_enum2value_1[] = { 0, /* eotd(0) */ 1, /* gps(1) */ 2 /* gpsOrEOTD(2) */ }; static asn_INTEGER_specifics_t asn_SPC_PositionMethod_specs_1 = { asn_MAP_PositionMethod_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_PositionMethod_enum2value_1, /* N => "tag"; sorted by N */ 3, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_PositionMethod_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_PositionMethod = { "PositionMethod", "PositionMethod", PositionMethod_free, PositionMethod_print, PositionMethod_constraint, PositionMethod_decode_ber, PositionMethod_encode_der, PositionMethod_decode_xer, PositionMethod_encode_xer, PositionMethod_decode_uper, PositionMethod_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PositionMethod_tags_1, sizeof(asn_DEF_PositionMethod_tags_1) /sizeof(asn_DEF_PositionMethod_tags_1[0]), /* 1 */ asn_DEF_PositionMethod_tags_1, /* Same as above */ sizeof(asn_DEF_PositionMethod_tags_1) /sizeof(asn_DEF_PositionMethod_tags_1[0]), /* 1 */ &asn_PER_type_PositionMethod_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_PositionMethod_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMReservedBits.h0000644000175000017500000000171012576764164023122 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TLMReservedBits_H_ #define _TLMReservedBits_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TLMReservedBits */ typedef long TLMReservedBits_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TLMReservedBits; asn_struct_free_f TLMReservedBits_free; asn_struct_print_f TLMReservedBits_print; asn_constr_check_f TLMReservedBits_constraint; ber_type_decoder_f TLMReservedBits_decode_ber; der_type_encoder_f TLMReservedBits_encode_der; xer_type_decoder_f TLMReservedBits_decode_xer; xer_type_encoder_f TLMReservedBits_encode_xer; per_type_decoder_f TLMReservedBits_decode_uper; per_type_encoder_f TLMReservedBits_encode_uper; #ifdef __cplusplus } #endif #endif /* _TLMReservedBits_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_codecs_prim.h0000644000175000017500000000313512576764164023277 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_CODECS_PRIM_H #define ASN_CODECS_PRIM_H #include #ifdef __cplusplus extern "C" { #endif typedef struct ASN__PRIMITIVE_TYPE_s { uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ int size; /* Size of the buffer */ } ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ asn_struct_free_f ASN__PRIMITIVE_TYPE_free; ber_type_decoder_f ber_decode_primitive; der_type_encoder_f der_encode_primitive; /* * A callback specification for the xer_decode_primitive() function below. */ enum xer_pbd_rval { XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ XPBD_BODY_CONSUMED /* Body is recognized and consumed */ }; typedef enum xer_pbd_rval (xer_primitive_body_decoder_f) (asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, size_t chunk_size); /* * Specific function to decode simple primitive types. * Also see xer_decode_general() in xer_decoder.h */ asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, xer_primitive_body_decoder_f *prim_body_decoder ); #ifdef __cplusplus } #endif #endif /* ASN_CODECS_PRIM_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-FirstSetMsrs.c0000644000175000017500000001100012576764164023164 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-FirstSetMsrs.h" int OTD_FirstSetMsrs_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_OTD_MeasurementWithID.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using OTD_MeasurementWithID, * so here we adjust the DEF accordingly. */ static void OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_OTD_MeasurementWithID.free_struct; td->print_struct = asn_DEF_OTD_MeasurementWithID.print_struct; td->ber_decoder = asn_DEF_OTD_MeasurementWithID.ber_decoder; td->der_encoder = asn_DEF_OTD_MeasurementWithID.der_encoder; td->xer_decoder = asn_DEF_OTD_MeasurementWithID.xer_decoder; td->xer_encoder = asn_DEF_OTD_MeasurementWithID.xer_encoder; td->uper_decoder = asn_DEF_OTD_MeasurementWithID.uper_decoder; td->uper_encoder = asn_DEF_OTD_MeasurementWithID.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_OTD_MeasurementWithID.per_constraints; td->elements = asn_DEF_OTD_MeasurementWithID.elements; td->elements_count = asn_DEF_OTD_MeasurementWithID.elements_count; td->specifics = asn_DEF_OTD_MeasurementWithID.specifics; } void OTD_FirstSetMsrs_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int OTD_FirstSetMsrs_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t OTD_FirstSetMsrs_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t OTD_FirstSetMsrs_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t OTD_FirstSetMsrs_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t OTD_FirstSetMsrs_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t OTD_FirstSetMsrs_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t OTD_FirstSetMsrs_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { OTD_FirstSetMsrs_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static ber_tlv_tag_t asn_DEF_OTD_FirstSetMsrs_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; asn_TYPE_descriptor_t asn_DEF_OTD_FirstSetMsrs = { "OTD-FirstSetMsrs", "OTD-FirstSetMsrs", OTD_FirstSetMsrs_free, OTD_FirstSetMsrs_print, OTD_FirstSetMsrs_constraint, OTD_FirstSetMsrs_decode_ber, OTD_FirstSetMsrs_encode_der, OTD_FirstSetMsrs_decode_xer, OTD_FirstSetMsrs_encode_xer, OTD_FirstSetMsrs_decode_uper, OTD_FirstSetMsrs_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_FirstSetMsrs_tags_1, sizeof(asn_DEF_OTD_FirstSetMsrs_tags_1) /sizeof(asn_DEF_OTD_FirstSetMsrs_tags_1[0]), /* 1 */ asn_DEF_OTD_FirstSetMsrs_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_FirstSetMsrs_tags_1) /sizeof(asn_DEF_OTD_FirstSetMsrs_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* Defined elsewhere */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMReservedBits.c0000644000175000017500000001140312576764164023115 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TLMReservedBits.h" int TLMReservedBits_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TLMReservedBits_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TLMReservedBits_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TLMReservedBits_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TLMReservedBits_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TLMReservedBits_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TLMReservedBits_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TLMReservedBits_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TLMReservedBits_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TLMReservedBits_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TLMReservedBits_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TLMReservedBits_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TLMReservedBits_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TLMReservedBits_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TLMReservedBits = { "TLMReservedBits", "TLMReservedBits", TLMReservedBits_free, TLMReservedBits_print, TLMReservedBits_constraint, TLMReservedBits_decode_ber, TLMReservedBits_encode_der, TLMReservedBits_decode_xer, TLMReservedBits_encode_xer, TLMReservedBits_decode_uper, TLMReservedBits_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TLMReservedBits_tags_1, sizeof(asn_DEF_TLMReservedBits_tags_1) /sizeof(asn_DEF_TLMReservedBits_tags_1[0]), /* 1 */ asn_DEF_TLMReservedBits_tags_1, /* Same as above */ sizeof(asn_DEF_TLMReservedBits_tags_1) /sizeof(asn_DEF_TLMReservedBits_tags_1[0]), /* 1 */ &asn_PER_type_TLMReservedBits_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementFirst-R98-Ext.c0000644000175000017500000000430512576764164024767 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MsrElementFirst-R98-Ext.h" static asn_TYPE_member_t asn_MBR_OTD_MsrElementFirst_R98_Ext_1[] = { { ATF_POINTER, 1, offsetof(struct OTD_MsrElementFirst_R98_Ext, otd_FirstSetMsrs_R98_Ext), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otd-FirstSetMsrs-R98-Ext" }, }; static int asn_MAP_OTD_MsrElementFirst_R98_Ext_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_MsrElementFirst_R98_Ext_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* otd-FirstSetMsrs-R98-Ext at 979 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_MsrElementFirst_R98_Ext_specs_1 = { sizeof(struct OTD_MsrElementFirst_R98_Ext), offsetof(struct OTD_MsrElementFirst_R98_Ext, _asn_ctx), asn_MAP_OTD_MsrElementFirst_R98_Ext_tag2el_1, 1, /* Count of tags in the map */ asn_MAP_OTD_MsrElementFirst_R98_Ext_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MsrElementFirst_R98_Ext = { "OTD-MsrElementFirst-R98-Ext", "OTD-MsrElementFirst-R98-Ext", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1, sizeof(asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1) /sizeof(asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1[0]), /* 1 */ asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1) /sizeof(asn_DEF_OTD_MsrElementFirst_R98_Ext_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_MsrElementFirst_R98_Ext_1, 1, /* Elements count */ &asn_SPC_OTD_MsrElementFirst_R98_Ext_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSDiffCorrections.c0000644000175000017500000000574512576764164024032 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSDiffCorrections.h" static int memb_dganssRefTime_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 119)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_dganssRefTime_constr_2 = { { APC_CONSTRAINED, 7, 7, 0, 119 } /* (0..119) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSDiffCorrections_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSDiffCorrections, dganssRefTime), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_dganssRefTime_constraint_1, &asn_PER_memb_dganssRefTime_constr_2, 0, "dganssRefTime" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSDiffCorrections, sgnTypeList), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfSgnTypeElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "sgnTypeList" }, }; static ber_tlv_tag_t asn_DEF_GANSSDiffCorrections_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSDiffCorrections_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dganssRefTime at 1186 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sgnTypeList at 1190 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSDiffCorrections_specs_1 = { sizeof(struct GANSSDiffCorrections), offsetof(struct GANSSDiffCorrections, _asn_ctx), asn_MAP_GANSSDiffCorrections_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSDiffCorrections = { "GANSSDiffCorrections", "GANSSDiffCorrections", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSDiffCorrections_tags_1, sizeof(asn_DEF_GANSSDiffCorrections_tags_1) /sizeof(asn_DEF_GANSSDiffCorrections_tags_1[0]), /* 1 */ asn_DEF_GANSSDiffCorrections_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSDiffCorrections_tags_1) /sizeof(asn_DEF_GANSSDiffCorrections_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSDiffCorrections_1, 2, /* Elements count */ &asn_SPC_GANSSDiffCorrections_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatElement.h0000644000175000017500000000157012576764164022211 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SatElement_H_ #define _SatElement_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* SatElement */ typedef struct SatElement { SatelliteID_t satelliteID; long iode; long udre; long pseudoRangeCor; long rangeRateCor; long deltaPseudoRangeCor2; long deltaRangeRateCor2; long deltaPseudoRangeCor3; long deltaRangeRateCor3; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SatElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SatElement; #ifdef __cplusplus } #endif #endif /* _SatElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSRefMeasurementElement.c0000644000175000017500000000375112576764164026134 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSSRefMeasurementElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSSRefMeasurementElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSSRefMeasurementElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSSRefMeasurementElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSSRefMeasurementElement_specs_1 = { sizeof(struct SeqOfGANSSRefMeasurementElement), offsetof(struct SeqOfGANSSRefMeasurementElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSRefMeasurementElement = { "SeqOfGANSSRefMeasurementElement", "SeqOfGANSSRefMeasurementElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1, sizeof(asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSRefMeasurementElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSSRefMeasurementElement_constr_1, asn_MBR_SeqOfGANSSRefMeasurementElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSSRefMeasurementElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistBTS.c0000644000175000017500000000423512576764164024004 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SystemInfoAssistBTS.h" static asn_per_constraints_t asn_PER_type_SystemInfoAssistBTS_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SystemInfoAssistBTS_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SystemInfoAssistBTS, choice.notPresent), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "notPresent" }, { ATF_NOFLAGS, 0, offsetof(struct SystemInfoAssistBTS, choice.present), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AssistBTSData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "present" }, }; static asn_TYPE_tag2member_t asn_MAP_SystemInfoAssistBTS_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* notPresent at 223 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* present at 225 */ }; static asn_CHOICE_specifics_t asn_SPC_SystemInfoAssistBTS_specs_1 = { sizeof(struct SystemInfoAssistBTS), offsetof(struct SystemInfoAssistBTS, _asn_ctx), offsetof(struct SystemInfoAssistBTS, present), sizeof(((struct SystemInfoAssistBTS *)0)->present), asn_MAP_SystemInfoAssistBTS_tag2el_1, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistBTS = { "SystemInfoAssistBTS", "SystemInfoAssistBTS", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_SystemInfoAssistBTS_constr_1, asn_MBR_SystemInfoAssistBTS_1, 2, /* Elements count */ &asn_SPC_SystemInfoAssistBTS_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BSIC.c0000644000175000017500000001051612576764164020663 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "BSIC.h" int BSIC_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void BSIC_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void BSIC_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { BSIC_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int BSIC_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { BSIC_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t BSIC_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { BSIC_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t BSIC_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { BSIC_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t BSIC_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { BSIC_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t BSIC_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { BSIC_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t BSIC_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { BSIC_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t BSIC_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { BSIC_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_BSIC_constr_1 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_BSIC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BSIC = { "BSIC", "BSIC", BSIC_free, BSIC_print, BSIC_constraint, BSIC_decode_ber, BSIC_encode_der, BSIC_decode_xer, BSIC_encode_xer, BSIC_decode_uper, BSIC_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_BSIC_tags_1, sizeof(asn_DEF_BSIC_tags_1) /sizeof(asn_DEF_BSIC_tags_1[0]), /* 1 */ asn_DEF_BSIC_tags_1, /* Same as above */ sizeof(asn_DEF_BSIC_tags_1) /sizeof(asn_DEF_BSIC_tags_1[0]), /* 1 */ &asn_PER_type_BSIC_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UTCModel.h0000644000175000017500000000140012576764164021554 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _UTCModel_H_ #define _UTCModel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* UTCModel */ typedef struct UTCModel { long utcA1; long utcA0; long utcTot; long utcWNt; long utcDeltaTls; long utcWNlsf; long utcDN; long utcDeltaTlsf; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } UTCModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_UTCModel; #ifdef __cplusplus } #endif #endif /* _UTCModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfAcquisElement.c0000644000175000017500000000334512576764164023642 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfAcquisElement.h" static asn_per_constraints_t asn_PER_type_SeqOfAcquisElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfAcquisElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_AcquisElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfAcquisElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfAcquisElement_specs_1 = { sizeof(struct SeqOfAcquisElement), offsetof(struct SeqOfAcquisElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfAcquisElement = { "SeqOfAcquisElement", "SeqOfAcquisElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfAcquisElement_tags_1, sizeof(asn_DEF_SeqOfAcquisElement_tags_1) /sizeof(asn_DEF_SeqOfAcquisElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfAcquisElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfAcquisElement_tags_1) /sizeof(asn_DEF_SeqOfAcquisElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfAcquisElement_constr_1, asn_MBR_SeqOfAcquisElement_1, 1, /* Single element */ &asn_SPC_SeqOfAcquisElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BTSPosition.c0000644000175000017500000001124712576764164022322 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "BTSPosition.h" int BTSPosition_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const Ext_GeographicalInformation_t *st = (const Ext_GeographicalInformation_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 20)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using Ext_GeographicalInformation, * so here we adjust the DEF accordingly. */ static void BTSPosition_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_Ext_GeographicalInformation.free_struct; td->print_struct = asn_DEF_Ext_GeographicalInformation.print_struct; td->ber_decoder = asn_DEF_Ext_GeographicalInformation.ber_decoder; td->der_encoder = asn_DEF_Ext_GeographicalInformation.der_encoder; td->xer_decoder = asn_DEF_Ext_GeographicalInformation.xer_decoder; td->xer_encoder = asn_DEF_Ext_GeographicalInformation.xer_encoder; td->uper_decoder = asn_DEF_Ext_GeographicalInformation.uper_decoder; td->uper_encoder = asn_DEF_Ext_GeographicalInformation.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_Ext_GeographicalInformation.per_constraints; td->elements = asn_DEF_Ext_GeographicalInformation.elements; td->elements_count = asn_DEF_Ext_GeographicalInformation.elements_count; td->specifics = asn_DEF_Ext_GeographicalInformation.specifics; } void BTSPosition_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { BTSPosition_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int BTSPosition_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t BTSPosition_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t BTSPosition_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t BTSPosition_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t BTSPosition_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t BTSPosition_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t BTSPosition_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { BTSPosition_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static ber_tlv_tag_t asn_DEF_BTSPosition_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BTSPosition = { "BTSPosition", "BTSPosition", BTSPosition_free, BTSPosition_print, BTSPosition_constraint, BTSPosition_decode_ber, BTSPosition_encode_der, BTSPosition_decode_xer, BTSPosition_encode_xer, BTSPosition_decode_uper, BTSPosition_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_BTSPosition_tags_1, sizeof(asn_DEF_BTSPosition_tags_1) /sizeof(asn_DEF_BTSPosition_tags_1[0]), /* 1 */ asn_DEF_BTSPosition_tags_1, /* Same as above */ sizeof(asn_DEF_BTSPosition_tags_1) /sizeof(asn_DEF_BTSPosition_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW23b.c0000644000175000017500000001104612576764164021474 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSTOW23b.h" int GPSTOW23b_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7559999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GPSTOW23b_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GPSTOW23b_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GPSTOW23b_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GPSTOW23b_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GPSTOW23b_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GPSTOW23b_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GPSTOW23b_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GPSTOW23b_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GPSTOW23b_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GPSTOW23b_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GPSTOW23b_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GPSTOW23b_constr_1 = { { APC_CONSTRAINED, 23, -1, 0, 7559999 } /* (0..7559999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GPSTOW23b_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GPSTOW23b = { "GPSTOW23b", "GPSTOW23b", GPSTOW23b_free, GPSTOW23b_print, GPSTOW23b_constraint, GPSTOW23b_decode_ber, GPSTOW23b_encode_der, GPSTOW23b_decode_xer, GPSTOW23b_encode_xer, GPSTOW23b_decode_uper, GPSTOW23b_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSTOW23b_tags_1, sizeof(asn_DEF_GPSTOW23b_tags_1) /sizeof(asn_DEF_GPSTOW23b_tags_1[0]), /* 1 */ asn_DEF_GPSTOW23b_tags_1, /* Same as above */ sizeof(asn_DEF_GPSTOW23b_tags_1) /sizeof(asn_DEF_GPSTOW23b_tags_1[0]), /* 1 */ &asn_PER_type_GPSTOW23b_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CellIDAndLAC.c0000644000175000017500000000412412576764164022200 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "CellIDAndLAC.h" static asn_TYPE_member_t asn_MBR_CellIDAndLAC_1[] = { { ATF_NOFLAGS, 0, offsetof(struct CellIDAndLAC, referenceLAC), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_LAC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceLAC" }, { ATF_NOFLAGS, 0, offsetof(struct CellIDAndLAC, referenceCI), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceCI" }, }; static ber_tlv_tag_t asn_DEF_CellIDAndLAC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_CellIDAndLAC_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceLAC at 313 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* referenceCI at 315 */ }; static asn_SEQUENCE_specifics_t asn_SPC_CellIDAndLAC_specs_1 = { sizeof(struct CellIDAndLAC), offsetof(struct CellIDAndLAC, _asn_ctx), asn_MAP_CellIDAndLAC_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_CellIDAndLAC = { "CellIDAndLAC", "CellIDAndLAC", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CellIDAndLAC_tags_1, sizeof(asn_DEF_CellIDAndLAC_tags_1) /sizeof(asn_DEF_CellIDAndLAC_tags_1[0]), /* 1 */ asn_DEF_CellIDAndLAC_tags_1, /* Same as above */ sizeof(asn_DEF_CellIDAndLAC_tags_1) /sizeof(asn_DEF_CellIDAndLAC_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_CellIDAndLAC_1, 2, /* Elements count */ &asn_SPC_CellIDAndLAC_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FixType.c0000644000175000017500000001071212576764164021531 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "FixType.h" int FixType_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void FixType_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void FixType_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { FixType_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int FixType_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { FixType_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t FixType_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { FixType_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t FixType_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { FixType_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t FixType_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { FixType_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t FixType_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { FixType_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t FixType_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { FixType_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t FixType_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { FixType_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_FixType_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_FixType_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_FixType = { "FixType", "FixType", FixType_free, FixType_print, FixType_constraint, FixType_decode_ber, FixType_encode_der, FixType_decode_xer, FixType_encode_xer, FixType_decode_uper, FixType_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FixType_tags_1, sizeof(asn_DEF_FixType_tags_1) /sizeof(asn_DEF_FixType_tags_1[0]), /* 1 */ asn_DEF_FixType_tags_1, /* Same as above */ sizeof(asn_DEF_FixType_tags_1) /sizeof(asn_DEF_FixType_tags_1[0]), /* 1 */ &asn_PER_type_FixType_constr_1, 0, 0, /* Defined elsewhere */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlmanacElement.h0000644000175000017500000000170012576764164023011 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AlmanacElement_H_ #define _AlmanacElement_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* AlmanacElement */ typedef struct AlmanacElement { SatelliteID_t satelliteID; long almanacE; long alamanacToa; long almanacKsii; long almanacOmegaDot; long almanacSVhealth; long almanacAPowerHalf; long almanacOmega0; long almanacW; long almanacM0; long almanacAF0; long almanacAF1; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AlmanacElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AlmanacElement; #ifdef __cplusplus } #endif #endif /* _AlmanacElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSIonoStormFlags.h0000644000175000017500000000147612576764164023657 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSIonoStormFlags_H_ #define _GANSSIonoStormFlags_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* GANSSIonoStormFlags */ typedef struct GANSSIonoStormFlags { long ionoStormFlag1; long ionoStormFlag2; long ionoStormFlag3; long ionoStormFlag4; long ionoStormFlag5; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSIonoStormFlags_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSIonoStormFlags; #ifdef __cplusplus } #endif #endif /* _GANSSIonoStormFlags_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfReferenceIdentityType.h0000644000175000017500000000166012576764164025360 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfReferenceIdentityType_H_ #define _SeqOfReferenceIdentityType_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct ReferenceIdentityType; /* SeqOfReferenceIdentityType */ typedef struct SeqOfReferenceIdentityType { A_SEQUENCE_OF(struct ReferenceIdentityType) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfReferenceIdentityType_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfReferenceIdentityType; #ifdef __cplusplus } #endif /* Referred external types */ #include "ReferenceIdentityType.h" #endif /* _SeqOfReferenceIdentityType_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSgnTypeElement.c0000644000175000017500000000336712576764164024012 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfSgnTypeElement.h" static asn_per_constraints_t asn_PER_type_SeqOfSgnTypeElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfSgnTypeElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_SgnTypeElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfSgnTypeElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfSgnTypeElement_specs_1 = { sizeof(struct SeqOfSgnTypeElement), offsetof(struct SeqOfSgnTypeElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfSgnTypeElement = { "SeqOfSgnTypeElement", "SeqOfSgnTypeElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfSgnTypeElement_tags_1, sizeof(asn_DEF_SeqOfSgnTypeElement_tags_1) /sizeof(asn_DEF_SeqOfSgnTypeElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfSgnTypeElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfSgnTypeElement_tags_1) /sizeof(asn_DEF_SeqOfSgnTypeElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfSgnTypeElement_constr_1, asn_MBR_SeqOfSgnTypeElement_1, 1, /* Single element */ &asn_SPC_SeqOfSgnTypeElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MpathIndic.h0000644000175000017500000000203712576764164022167 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MpathIndic_H_ #define _MpathIndic_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum MpathIndic { MpathIndic_notMeasured = 0, MpathIndic_low = 1, MpathIndic_medium = 2, MpathIndic_high = 3 } e_MpathIndic; /* MpathIndic */ typedef ENUMERATED_t MpathIndic_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MpathIndic; asn_struct_free_f MpathIndic_free; asn_struct_print_f MpathIndic_print; asn_constr_check_f MpathIndic_constraint; ber_type_decoder_f MpathIndic_decode_ber; der_type_encoder_f MpathIndic_encode_der; xer_type_decoder_f MpathIndic_decode_xer; xer_type_encoder_f MpathIndic_encode_xer; per_type_decoder_f MpathIndic_decode_uper; per_type_encoder_f MpathIndic_encode_uper; #ifdef __cplusplus } #endif #endif /* _MpathIndic_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BitNumber.h0000644000175000017500000000155612576764164022043 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _BitNumber_H_ #define _BitNumber_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* BitNumber */ typedef long BitNumber_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_BitNumber; asn_struct_free_f BitNumber_free; asn_struct_print_f BitNumber_print; asn_constr_check_f BitNumber_constraint; ber_type_decoder_f BitNumber_decode_ber; der_type_encoder_f BitNumber_encode_der; xer_type_decoder_f BitNumber_decode_xer; xer_type_encoder_f BitNumber_encode_xer; per_type_decoder_f BitNumber_decode_uper; per_type_encoder_f BitNumber_encode_uper; #ifdef __cplusplus } #endif #endif /* _BitNumber_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EphemerisSubframe1Reserved.c0000644000175000017500000001362512576764164025336 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "EphemerisSubframe1Reserved.h" static int memb_reserved1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_reserved2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 16777215)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_reserved3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 16777215)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_reserved4_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_reserved1_constr_2 = { { APC_CONSTRAINED, 23, -1, 0, 8388607 } /* (0..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_reserved2_constr_3 = { { APC_CONSTRAINED, 24, -1, 0, 16777215 } /* (0..16777215) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_reserved3_constr_4 = { { APC_CONSTRAINED, 24, -1, 0, 16777215 } /* (0..16777215) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_reserved4_constr_5 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_EphemerisSubframe1Reserved_1[] = { { ATF_NOFLAGS, 0, offsetof(struct EphemerisSubframe1Reserved, reserved1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_reserved1_constraint_1, &asn_PER_memb_reserved1_constr_2, 0, "reserved1" }, { ATF_NOFLAGS, 0, offsetof(struct EphemerisSubframe1Reserved, reserved2), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_reserved2_constraint_1, &asn_PER_memb_reserved2_constr_3, 0, "reserved2" }, { ATF_NOFLAGS, 0, offsetof(struct EphemerisSubframe1Reserved, reserved3), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_reserved3_constraint_1, &asn_PER_memb_reserved3_constr_4, 0, "reserved3" }, { ATF_NOFLAGS, 0, offsetof(struct EphemerisSubframe1Reserved, reserved4), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_reserved4_constraint_1, &asn_PER_memb_reserved4_constr_5, 0, "reserved4" }, }; static ber_tlv_tag_t asn_DEF_EphemerisSubframe1Reserved_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_EphemerisSubframe1Reserved_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reserved1 at 755 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reserved2 at 756 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reserved3 at 757 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* reserved4 at 758 */ }; static asn_SEQUENCE_specifics_t asn_SPC_EphemerisSubframe1Reserved_specs_1 = { sizeof(struct EphemerisSubframe1Reserved), offsetof(struct EphemerisSubframe1Reserved, _asn_ctx), asn_MAP_EphemerisSubframe1Reserved_tag2el_1, 4, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_EphemerisSubframe1Reserved = { "EphemerisSubframe1Reserved", "EphemerisSubframe1Reserved", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_EphemerisSubframe1Reserved_tags_1, sizeof(asn_DEF_EphemerisSubframe1Reserved_tags_1) /sizeof(asn_DEF_EphemerisSubframe1Reserved_tags_1[0]), /* 1 */ asn_DEF_EphemerisSubframe1Reserved_tags_1, /* Same as above */ sizeof(asn_DEF_EphemerisSubframe1Reserved_tags_1) /sizeof(asn_DEF_EphemerisSubframe1Reserved_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_EphemerisSubframe1Reserved_1, 4, /* Elements count */ &asn_SPC_EphemerisSubframe1Reserved_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceAssistData.h0000644000175000017500000000161312576764164024025 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceAssistData_H_ #define _ReferenceAssistData_H_ #include /* Including external dependencies */ #include "BCCHCarrier.h" #include "BSIC.h" #include "TimeSlotScheme.h" #include "BTSPosition.h" #include #ifdef __cplusplus extern "C" { #endif /* ReferenceAssistData */ typedef struct ReferenceAssistData { BCCHCarrier_t bcchCarrier; BSIC_t bsic; TimeSlotScheme_t timeSlotScheme; BTSPosition_t *btsPosition /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ReferenceAssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceAssistData; #ifdef __cplusplus } #endif #endif /* _ReferenceAssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UTCModel.c0000644000175000017500000002314612576764164021562 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "UTCModel.h" static int memb_utcA1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcA0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcTot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcWNt_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcDeltaTls_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcWNlsf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcDN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_utcDeltaTlsf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_utcA1_constr_2 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcA0_constr_3 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcTot_constr_4 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcWNt_constr_5 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcDeltaTls_constr_6 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcWNlsf_constr_7 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcDN_constr_8 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_utcDeltaTlsf_constr_9 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_UTCModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcA1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcA1_constraint_1, &asn_PER_memb_utcA1_constr_2, 0, "utcA1" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcA0), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcA0_constraint_1, &asn_PER_memb_utcA0_constr_3, 0, "utcA0" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcTot), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcTot_constraint_1, &asn_PER_memb_utcTot_constr_4, 0, "utcTot" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcWNt), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcWNt_constraint_1, &asn_PER_memb_utcWNt_constr_5, 0, "utcWNt" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcDeltaTls), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcDeltaTls_constraint_1, &asn_PER_memb_utcDeltaTls_constr_6, 0, "utcDeltaTls" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcWNlsf), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcWNlsf_constraint_1, &asn_PER_memb_utcWNlsf_constr_7, 0, "utcWNlsf" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcDN), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcDN_constraint_1, &asn_PER_memb_utcDN_constr_8, 0, "utcDN" }, { ATF_NOFLAGS, 0, offsetof(struct UTCModel, utcDeltaTlsf), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_utcDeltaTlsf_constraint_1, &asn_PER_memb_utcDeltaTlsf_constr_9, 0, "utcDeltaTlsf" }, }; static ber_tlv_tag_t asn_DEF_UTCModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_UTCModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* utcA1 at 775 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* utcA0 at 776 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* utcTot at 777 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* utcWNt at 778 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* utcDeltaTls at 779 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* utcWNlsf at 780 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* utcDN at 781 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* utcDeltaTlsf at 782 */ }; static asn_SEQUENCE_specifics_t asn_SPC_UTCModel_specs_1 = { sizeof(struct UTCModel), offsetof(struct UTCModel, _asn_ctx), asn_MAP_UTCModel_tag2el_1, 8, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_UTCModel = { "UTCModel", "UTCModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UTCModel_tags_1, sizeof(asn_DEF_UTCModel_tags_1) /sizeof(asn_DEF_UTCModel_tags_1[0]), /* 1 */ asn_DEF_UTCModel_tags_1, /* Same as above */ sizeof(asn_DEF_UTCModel_tags_1) /sizeof(asn_DEF_UTCModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_UTCModel_1, 8, /* Elements count */ &asn_SPC_UTCModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGPS-MsrSetElement.h0000644000175000017500000000161012576764164024257 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGPS_MsrSetElement_H_ #define _SeqOfGPS_MsrSetElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GPS_MsrSetElement; /* SeqOfGPS-MsrSetElement */ typedef struct SeqOfGPS_MsrSetElement { A_SEQUENCE_OF(struct GPS_MsrSetElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGPS_MsrSetElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGPS_MsrSetElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GPS-MsrSetElement.h" #endif /* _SeqOfGPS_MsrSetElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultiFrameCarrier.c0000644000175000017500000000433312576764164023520 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MultiFrameCarrier.h" static asn_TYPE_member_t asn_MBR_MultiFrameCarrier_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MultiFrameCarrier, bcchCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BCCHCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bcchCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct MultiFrameCarrier, multiFrameOffset), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MultiFrameOffset, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "multiFrameOffset" }, }; static ber_tlv_tag_t asn_DEF_MultiFrameCarrier_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MultiFrameCarrier_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bcchCarrier at 411 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* multiFrameOffset at 413 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MultiFrameCarrier_specs_1 = { sizeof(struct MultiFrameCarrier), offsetof(struct MultiFrameCarrier, _asn_ctx), asn_MAP_MultiFrameCarrier_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MultiFrameCarrier = { "MultiFrameCarrier", "MultiFrameCarrier", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MultiFrameCarrier_tags_1, sizeof(asn_DEF_MultiFrameCarrier_tags_1) /sizeof(asn_DEF_MultiFrameCarrier_tags_1[0]), /* 1 */ asn_DEF_MultiFrameCarrier_tags_1, /* Same as above */ sizeof(asn_DEF_MultiFrameCarrier_tags_1) /sizeof(asn_DEF_MultiFrameCarrier_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MultiFrameCarrier_1, 2, /* Elements count */ &asn_SPC_MultiFrameCarrier_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOf-BadSatelliteSet.c0000644000175000017500000000343312576764164024167 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOf-BadSatelliteSet.h" static asn_per_constraints_t asn_PER_type_SeqOf_BadSatelliteSet_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOf_BadSatelliteSet_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOf_BadSatelliteSet_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOf_BadSatelliteSet_specs_1 = { sizeof(struct SeqOf_BadSatelliteSet), offsetof(struct SeqOf_BadSatelliteSet, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOf_BadSatelliteSet = { "SeqOf-BadSatelliteSet", "SeqOf-BadSatelliteSet", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOf_BadSatelliteSet_tags_1, sizeof(asn_DEF_SeqOf_BadSatelliteSet_tags_1) /sizeof(asn_DEF_SeqOf_BadSatelliteSet_tags_1[0]), /* 1 */ asn_DEF_SeqOf_BadSatelliteSet_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOf_BadSatelliteSet_tags_1) /sizeof(asn_DEF_SeqOf_BadSatelliteSet_tags_1[0]), /* 1 */ &asn_PER_type_SeqOf_BadSatelliteSet_constr_1, asn_MBR_SeqOf_BadSatelliteSet_1, 1, /* Single element */ &asn_SPC_SeqOf_BadSatelliteSet_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalAngleFields.c0000644000175000017500000000711412576764164023754 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AddionalAngleFields.h" static int memb_azimuth_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_elevation_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_azimuth_constr_2 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_elevation_constr_3 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_AddionalAngleFields_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AddionalAngleFields, azimuth), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_azimuth_constraint_1, &asn_PER_memb_azimuth_constr_2, 0, "azimuth" }, { ATF_NOFLAGS, 0, offsetof(struct AddionalAngleFields, elevation), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_elevation_constraint_1, &asn_PER_memb_elevation_constr_3, 0, "elevation" }, }; static ber_tlv_tag_t asn_DEF_AddionalAngleFields_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AddionalAngleFields_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* azimuth at 858 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* elevation at 860 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AddionalAngleFields_specs_1 = { sizeof(struct AddionalAngleFields), offsetof(struct AddionalAngleFields, _asn_ctx), asn_MAP_AddionalAngleFields_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AddionalAngleFields = { "AddionalAngleFields", "AddionalAngleFields", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AddionalAngleFields_tags_1, sizeof(asn_DEF_AddionalAngleFields_tags_1) /sizeof(asn_DEF_AddionalAngleFields_tags_1[0]), /* 1 */ asn_DEF_AddionalAngleFields_tags_1, /* Same as above */ sizeof(asn_DEF_AddionalAngleFields_tags_1) /sizeof(asn_DEF_AddionalAngleFields_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AddionalAngleFields_1, 2, /* Elements count */ &asn_SPC_AddionalAngleFields_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ErrorCodes.h0000644000175000017500000000226612576764164022222 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ErrorCodes_H_ #define _ErrorCodes_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum ErrorCodes { ErrorCodes_unDefined = 0, ErrorCodes_missingComponet = 1, ErrorCodes_incorrectData = 2, ErrorCodes_missingIEorComponentElement = 3, ErrorCodes_messageTooShort = 4, ErrorCodes_unknowReferenceNumber = 5 /* * Enumeration is extensible */ } e_ErrorCodes; /* ErrorCodes */ typedef ENUMERATED_t ErrorCodes_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ErrorCodes; asn_struct_free_f ErrorCodes_free; asn_struct_print_f ErrorCodes_print; asn_constr_check_f ErrorCodes_constraint; ber_type_decoder_f ErrorCodes_decode_ber; der_type_encoder_f ErrorCodes_encode_der; xer_type_decoder_f ErrorCodes_decode_xer; xer_type_encoder_f ErrorCodes_encode_xer; per_type_decoder_f ErrorCodes_decode_uper; per_type_encoder_f ErrorCodes_encode_uper; #ifdef __cplusplus } #endif #endif /* _ErrorCodes_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BSIC.h0000644000175000017500000000144312576764164020667 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _BSIC_H_ #define _BSIC_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* BSIC */ typedef long BSIC_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_BSIC; asn_struct_free_f BSIC_free; asn_struct_print_f BSIC_print; asn_constr_check_f BSIC_constraint; ber_type_decoder_f BSIC_decode_ber; der_type_encoder_f BSIC_encode_der; xer_type_decoder_f BSIC_decode_xer; xer_type_encoder_f BSIC_encode_xer; per_type_decoder_f BSIC_decode_uper; per_type_encoder_f BSIC_encode_uper; #ifdef __cplusplus } #endif #endif /* _BSIC_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalAngleFields.h0000644000175000017500000000135512576764164023762 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AddionalAngleFields_H_ #define _AddionalAngleFields_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* AddionalAngleFields */ typedef struct AddionalAngleFields { long azimuth; long elevation; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AddionalAngleFields_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AddionalAngleFields; #ifdef __cplusplus } #endif #endif /* _AddionalAngleFields_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MeasureResponseTime.c0000644000175000017500000001164312576764164024104 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MeasureResponseTime.h" int MeasureResponseTime_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void MeasureResponseTime_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void MeasureResponseTime_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int MeasureResponseTime_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t MeasureResponseTime_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t MeasureResponseTime_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t MeasureResponseTime_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t MeasureResponseTime_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t MeasureResponseTime_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t MeasureResponseTime_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { MeasureResponseTime_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_MeasureResponseTime_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_MeasureResponseTime_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MeasureResponseTime = { "MeasureResponseTime", "MeasureResponseTime", MeasureResponseTime_free, MeasureResponseTime_print, MeasureResponseTime_constraint, MeasureResponseTime_decode_ber, MeasureResponseTime_encode_der, MeasureResponseTime_decode_xer, MeasureResponseTime_encode_xer, MeasureResponseTime_decode_uper, MeasureResponseTime_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MeasureResponseTime_tags_1, sizeof(asn_DEF_MeasureResponseTime_tags_1) /sizeof(asn_DEF_MeasureResponseTime_tags_1[0]), /* 1 */ asn_DEF_MeasureResponseTime_tags_1, /* Same as above */ sizeof(asn_DEF_MeasureResponseTime_tags_1) /sizeof(asn_DEF_MeasureResponseTime_tags_1[0]), /* 1 */ &asn_PER_type_MeasureResponseTime_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Ext-GeographicalInformation.c0000644000175000017500000001241412576764164025473 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Ext-GeographicalInformation.h" int Ext_GeographicalInformation_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 20)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using OCTET_STRING, * so here we adjust the DEF accordingly. */ static void Ext_GeographicalInformation_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_OCTET_STRING.free_struct; td->print_struct = asn_DEF_OCTET_STRING.print_struct; td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; td->elements = asn_DEF_OCTET_STRING.elements; td->elements_count = asn_DEF_OCTET_STRING.elements_count; td->specifics = asn_DEF_OCTET_STRING.specifics; } void Ext_GeographicalInformation_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int Ext_GeographicalInformation_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t Ext_GeographicalInformation_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t Ext_GeographicalInformation_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t Ext_GeographicalInformation_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t Ext_GeographicalInformation_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t Ext_GeographicalInformation_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t Ext_GeographicalInformation_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { Ext_GeographicalInformation_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_Ext_GeographicalInformation_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 20 } /* (SIZE(1..20)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_Ext_GeographicalInformation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Ext_GeographicalInformation = { "Ext-GeographicalInformation", "Ext-GeographicalInformation", Ext_GeographicalInformation_free, Ext_GeographicalInformation_print, Ext_GeographicalInformation_constraint, Ext_GeographicalInformation_decode_ber, Ext_GeographicalInformation_encode_der, Ext_GeographicalInformation_decode_xer, Ext_GeographicalInformation_encode_xer, Ext_GeographicalInformation_decode_uper, Ext_GeographicalInformation_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Ext_GeographicalInformation_tags_1, sizeof(asn_DEF_Ext_GeographicalInformation_tags_1) /sizeof(asn_DEF_Ext_GeographicalInformation_tags_1[0]), /* 1 */ asn_DEF_Ext_GeographicalInformation_tags_1, /* Same as above */ sizeof(asn_DEF_Ext_GeographicalInformation_tags_1) /sizeof(asn_DEF_Ext_GeographicalInformation_tags_1[0]), /* 1 */ &asn_PER_type_Ext_GeographicalInformation_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-MsrElementRest.c0000644000175000017500000000350712576764164024440 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfOTD-MsrElementRest.h" static asn_per_constraints_t asn_PER_type_SeqOfOTD_MsrElementRest_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfOTD_MsrElementRest_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_OTD_MsrElementRest, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfOTD_MsrElementRest_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfOTD_MsrElementRest_specs_1 = { sizeof(struct SeqOfOTD_MsrElementRest), offsetof(struct SeqOfOTD_MsrElementRest, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_MsrElementRest = { "SeqOfOTD-MsrElementRest", "SeqOfOTD-MsrElementRest", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfOTD_MsrElementRest_tags_1, sizeof(asn_DEF_SeqOfOTD_MsrElementRest_tags_1) /sizeof(asn_DEF_SeqOfOTD_MsrElementRest_tags_1[0]), /* 1 */ asn_DEF_SeqOfOTD_MsrElementRest_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfOTD_MsrElementRest_tags_1) /sizeof(asn_DEF_SeqOfOTD_MsrElementRest_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfOTD_MsrElementRest_constr_1, asn_MBR_SeqOfOTD_MsrElementRest_1, 1, /* Single element */ &asn_SPC_SeqOfOTD_MsrElementRest_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/der_encoder.c0000644000175000017500000001164512576764164022420 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed); /* * The DER encoder of any type. */ asn_enc_rval_t der_encode(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, asn_app_consume_bytes_f *consume_bytes, void *app_key) { ASN_DEBUG("DER encoder invoked for %s", type_descriptor->name); /* * Invoke type-specific encoder. */ return type_descriptor->der_encoder(type_descriptor, struct_ptr, /* Pointer to the destination structure */ 0, 0, consume_bytes, app_key); } /* * Argument type and callback necessary for der_encode_to_buffer(). */ typedef struct enc_to_buf_arg { void *buffer; size_t left; } enc_to_buf_arg; static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { enc_to_buf_arg *arg = (enc_to_buf_arg *)key; if(arg->left < size) return -1; /* Data exceeds the available buffer size */ memcpy(arg->buffer, buffer, size); arg->buffer = ((char *)arg->buffer) + size; arg->left -= size; return 0; } /* * A variant of the der_encode() which encodes the data into the provided buffer */ asn_enc_rval_t der_encode_to_buffer(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, void *buffer, size_t buffer_size) { enc_to_buf_arg arg; asn_enc_rval_t ec; arg.buffer = buffer; arg.left = buffer_size; ec = type_descriptor->der_encoder(type_descriptor, struct_ptr, /* Pointer to the destination structure */ 0, 0, encode_to_buffer_cb, &arg); if(ec.encoded != -1) { assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); /* Return the encoded contents size */ } return ec; } /* * Write out leading TL[v] sequence according to the type definition. */ ssize_t der_write_tags(asn_TYPE_descriptor_t *sd, size_t struct_length, int tag_mode, int last_tag_form, ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ asn_app_consume_bytes_f *cb, void *app_key) { ber_tlv_tag_t *tags; /* Copy of tags stream */ int tags_count; /* Number of tags */ size_t overall_length; ssize_t *lens; int i; ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", sd->name, tag_mode, sd->tags_count, ber_tlv_tag_string(tag), tag_mode ?(sd->tags_count+1 -((tag_mode == -1) && sd->tags_count)) :sd->tags_count ); if(tag_mode) { /* * Instead of doing shaman dance like we do in ber_check_tags(), * allocate a small array on the stack * and initialize it appropriately. */ int stag_offset; tags = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t)); if(!tags) { /* Can fail on !x86 */ errno = ENOMEM; return -1; } tags_count = sd->tags_count + 1 /* EXPLICIT or IMPLICIT tag is given */ - ((tag_mode == -1) && sd->tags_count); /* Copy tags over */ tags[0] = tag; stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); for(i = 1; i < tags_count; i++) tags[i] = sd->tags[i + stag_offset]; } else { tags = sd->tags; tags_count = sd->tags_count; } /* No tags to write */ if(tags_count == 0) return 0; lens = (ssize_t *)alloca(tags_count * sizeof(lens[0])); if(!lens) { errno = ENOMEM; return -1; } /* * Array of tags is initialized. * Now, compute the size of the TLV pairs, from right to left. */ overall_length = struct_length; for(i = tags_count - 1; i >= 0; --i) { lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); if(lens[i] == -1) return -1; overall_length += lens[i]; lens[i] = overall_length - lens[i]; } if(!cb) return overall_length - struct_length; ASN_DEBUG("%s %s TL sequence (%d elements)", cb?"Encoding":"Estimating", sd->name, tags_count); /* * Encode the TL sequence for real. */ for(i = 0; i < tags_count; i++) { ssize_t len; int _constr; /* Check if this tag happens to be constructed */ _constr = (last_tag_form || i < (tags_count - 1)); len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); if(len == -1) return -1; } return overall_length - struct_length; } static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed) { uint8_t buf[32]; size_t size = 0; int buf_size = cb?sizeof(buf):0; ssize_t tmp; /* Serialize tag (T from TLV) into possibly zero-length buffer */ tmp = ber_tlv_tag_serialize(tag, buf, buf_size); if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; size += tmp; /* Serialize length (L from TLV) into possibly zero-length buffer */ tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); if(tmp == -1) return -1; size += tmp; if(size > sizeof(buf)) return -1; /* * If callback is specified, invoke it, and check its return value. */ if(cb) { if(constructed) *buf |= 0x20; if(cb(buf, size, app_key) < 0) return -1; } return size; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AccuracyOpt.c0000644000175000017500000000344012576764164022356 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AccuracyOpt.h" static asn_TYPE_member_t asn_MBR_AccuracyOpt_1[] = { { ATF_POINTER, 1, offsetof(struct AccuracyOpt, accuracy), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Accuracy, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "accuracy" }, }; static int asn_MAP_AccuracyOpt_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_AccuracyOpt_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AccuracyOpt_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* accuracy at 125 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AccuracyOpt_specs_1 = { sizeof(struct AccuracyOpt), offsetof(struct AccuracyOpt, _asn_ctx), asn_MAP_AccuracyOpt_tag2el_1, 1, /* Count of tags in the map */ asn_MAP_AccuracyOpt_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AccuracyOpt = { "AccuracyOpt", "AccuracyOpt", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AccuracyOpt_tags_1, sizeof(asn_DEF_AccuracyOpt_tags_1) /sizeof(asn_DEF_AccuracyOpt_tags_1[0]), /* 1 */ asn_DEF_AccuracyOpt_tags_1, /* Same as above */ sizeof(asn_DEF_AccuracyOpt_tags_1) /sizeof(asn_DEF_AccuracyOpt_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AccuracyOpt_1, 1, /* Elements count */ &asn_SPC_AccuracyOpt_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTimeModelElement.c0000644000175000017500000001361512576764164024133 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSTimeModelElement.h" static int memb_ganssTimeModelRefTime_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_gnssTOID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_weekNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 8191)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssTimeModelRefTime_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_gnssTOID_constr_6 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_weekNumber_constr_7 = { { APC_CONSTRAINED, 13, 13, 0, 8191 } /* (0..8191) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSTimeModelElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSTimeModelElement, ganssTimeModelRefTime), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssTimeModelRefTime_constraint_1, &asn_PER_memb_ganssTimeModelRefTime_constr_2, 0, "ganssTimeModelRefTime" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSTimeModelElement, tA0), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TA0, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tA0" }, { ATF_POINTER, 2, offsetof(struct GANSSTimeModelElement, tA1), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TA1, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tA1" }, { ATF_POINTER, 1, offsetof(struct GANSSTimeModelElement, tA2), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TA2, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tA2" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSTimeModelElement, gnssTOID), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gnssTOID_constraint_1, &asn_PER_memb_gnssTOID_constr_6, 0, "gnssTOID" }, { ATF_POINTER, 1, offsetof(struct GANSSTimeModelElement, weekNumber), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_weekNumber_constraint_1, &asn_PER_memb_weekNumber_constr_7, 0, "weekNumber" }, }; static int asn_MAP_GANSSTimeModelElement_oms_1[] = { 2, 3, 5 }; static ber_tlv_tag_t asn_DEF_GANSSTimeModelElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSTimeModelElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssTimeModelRefTime at 1167 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tA0 at 1168 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tA1 at 1169 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* tA2 at 1170 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* gnssTOID at 1171 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* weekNumber at 1172 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSTimeModelElement_specs_1 = { sizeof(struct GANSSTimeModelElement), offsetof(struct GANSSTimeModelElement, _asn_ctx), asn_MAP_GANSSTimeModelElement_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_GANSSTimeModelElement_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSTimeModelElement = { "GANSSTimeModelElement", "GANSSTimeModelElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSTimeModelElement_tags_1, sizeof(asn_DEF_GANSSTimeModelElement_tags_1) /sizeof(asn_DEF_GANSSTimeModelElement_tags_1[0]), /* 1 */ asn_DEF_GANSSTimeModelElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSTimeModelElement_tags_1) /sizeof(asn_DEF_GANSSTimeModelElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSTimeModelElement_1, 6, /* Elements count */ &asn_SPC_GANSSTimeModelElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSS-SgnElement.c0000644000175000017500000000344112576764164024012 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSS-SgnElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSS_SgnElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSS_SgnElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSS_SgnElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSS_SgnElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSS_SgnElement_specs_1 = { sizeof(struct SeqOfGANSS_SgnElement), offsetof(struct SeqOfGANSS_SgnElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSS_SgnElement = { "SeqOfGANSS-SgnElement", "SeqOfGANSS-SgnElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSS_SgnElement_tags_1, sizeof(asn_DEF_SeqOfGANSS_SgnElement_tags_1) /sizeof(asn_DEF_SeqOfGANSS_SgnElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSS_SgnElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSS_SgnElement_tags_1) /sizeof(asn_DEF_SeqOfGANSS_SgnElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSS_SgnElement_constr_1, asn_MBR_SeqOfGANSS_SgnElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSS_SgnElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ber_tlv_tag.c0000644000175000017500000000615612576764164022440 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include ssize_t ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { ber_tlv_tag_t val; ber_tlv_tag_t tclass; size_t skipped; if(size == 0) return 0; val = *(const uint8_t *)ptr; tclass = (val >> 6); if((val &= 0x1F) != 0x1F) { /* * Simple form: everything encoded in a single octet. * Tag Class is encoded using two least significant bits. */ *tag_r = (val << 2) | tclass; return 1; } /* * Each octet contains 7 bits of useful information. * The MSB is 0 if it is the last octet of the tag. */ for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; ptr = ((const char *)ptr) + 1, skipped++) { unsigned int oct = *(const uint8_t *)ptr; if(oct & 0x80) { val = (val << 7) | (oct & 0x7F); /* * Make sure there are at least 9 bits spare * at the MS side of a value. */ if(val >> ((8 * sizeof(val)) - 9)) { /* * We would not be able to accomodate * any more tag bits. */ return -1; } } else { val = (val << 7) | oct; *tag_r = (val << 2) | tclass; return skipped; } } return 0; /* Want more */ } ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { char buf[sizeof("[APPLICATION ]") + 32]; ssize_t ret; ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); if(ret >= (ssize_t)sizeof(buf) || ret < 2) { errno = EPERM; return -1; } return fwrite(buf, 1, ret, f); } ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { char *type = 0; int ret; switch(tag & 0x3) { case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; case ASN_TAG_CLASS_CONTEXT: type = ""; break; case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; } ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ return ret; } char * ber_tlv_tag_string(ber_tlv_tag_t tag) { static char buf[sizeof("[APPLICATION ]") + 32]; (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); return buf; } size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { int tclass = BER_TAG_CLASS(tag); ber_tlv_tag_t tval = BER_TAG_VALUE(tag); uint8_t *buf = (uint8_t *)bufp; uint8_t *end; size_t required_size; size_t i; if(tval <= 30) { /* Encoded in 1 octet */ if(size) buf[0] = (tclass << 6) | tval; return 1; } else if(size) { *buf++ = (tclass << 6) | 0x1F; size--; } /* * Compute the size of the subsequent bytes. */ for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { if(tval >> i) required_size++; else break; } if(size < required_size) return required_size + 1; /* * Fill in the buffer, space permitting. */ end = buf + required_size - 1; for(i -= 7; buf < end; i -= 7, buf++) *buf = 0x80 | ((tval >> i) & 0x7F); *buf = (tval & 0x7F); /* Last octet without high bit */ return required_size + 1; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NavModelElement.c0000644000175000017500000000422512576764164023162 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "NavModelElement.h" static asn_TYPE_member_t asn_MBR_NavModelElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct NavModelElement, satelliteID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satelliteID" }, { ATF_NOFLAGS, 0, offsetof(struct NavModelElement, satStatus), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_SatStatus, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satStatus" }, }; static ber_tlv_tag_t asn_DEF_NavModelElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_NavModelElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* satelliteID at 703 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* satStatus at 705 */ }; static asn_SEQUENCE_specifics_t asn_SPC_NavModelElement_specs_1 = { sizeof(struct NavModelElement), offsetof(struct NavModelElement, _asn_ctx), asn_MAP_NavModelElement_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_NavModelElement = { "NavModelElement", "NavModelElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NavModelElement_tags_1, sizeof(asn_DEF_NavModelElement_tags_1) /sizeof(asn_DEF_NavModelElement_tags_1[0]), /* 1 */ asn_DEF_NavModelElement_tags_1, /* Same as above */ sizeof(asn_DEF_NavModelElement_tags_1) /sizeof(asn_DEF_NavModelElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_NavModelElement_1, 2, /* Elements count */ &asn_SPC_NavModelElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatelliteID.h0000644000175000017500000000161412576764164022312 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SatelliteID_H_ #define _SatelliteID_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* SatelliteID */ typedef long SatelliteID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SatelliteID; asn_struct_free_f SatelliteID_free; asn_struct_print_f SatelliteID_print; asn_constr_check_f SatelliteID_constraint; ber_type_decoder_f SatelliteID_decode_ber; der_type_encoder_f SatelliteID_encode_der; xer_type_decoder_f SatelliteID_decode_xer; xer_type_encoder_f SatelliteID_encode_xer; per_type_decoder_f SatelliteID_decode_uper; per_type_encoder_f SatelliteID_encode_uper; #ifdef __cplusplus } #endif #endif /* _SatelliteID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PositionData.h0000644000175000017500000000205412576764164022544 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _PositionData_H_ #define _PositionData_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum PositionData { PositionData_e_otd = 0, PositionData_gps = 1, PositionData_galileo = 2 } e_PositionData; /* PositionData */ typedef BIT_STRING_t PositionData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PositionData; asn_struct_free_f PositionData_free; asn_struct_print_f PositionData_print; asn_constr_check_f PositionData_constraint; ber_type_decoder_f PositionData_decode_ber; der_type_encoder_f PositionData_encode_der; xer_type_decoder_f PositionData_decode_xer; xer_type_encoder_f PositionData_encode_xer; per_type_decoder_f PositionData_decode_uper; per_type_encoder_f PositionData_encode_uper; #ifdef __cplusplus } #endif #endif /* _PositionData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ber_tlv_tag.h0000644000175000017500000000345412576764164022443 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_TLV_TAG_H_ #define _BER_TLV_TAG_H_ #ifdef __cplusplus extern "C" { #endif enum asn_tag_class { ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ }; typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ /* * Tag class is encoded together with tag value for optimization purposes. */ #define BER_TAG_CLASS(tag) ((tag) & 0x3) #define BER_TAG_VALUE(tag) ((tag) >> 2) #define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) #define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) /* * Several functions for printing the TAG in the canonical form * (i.e. "[PRIVATE 0]"). * Return values correspond to their libc counterparts (if any). */ ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); char *ber_tlv_tag_string(ber_tlv_tag_t tag); /* * This function tries to fetch the tag from the input stream. * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering tag. * >0: Number of bytes used from bufptr. tag_r will contain the tag. */ ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); /* * This function serializes the tag (T from TLV) in BER format. * It always returns number of bytes necessary to represent the tag, * it is a caller's responsibility to check the return value * against the supplied buffer's size. */ size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); #ifdef __cplusplus } #endif #endif /* _BER_TLV_TAG_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementFirst.c0000644000175000017500000001247212576764164023655 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MsrElementFirst.h" static int memb_refFrameNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 42431)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_taCorrection_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 960)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refFrameNumber_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 42431 } /* (0..42431) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_taCorrection_constr_6 = { { APC_CONSTRAINED, 10, 10, 0, 960 } /* (0..960) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_OTD_MsrElementFirst_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrElementFirst, refFrameNumber), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refFrameNumber_constraint_1, &asn_PER_memb_refFrameNumber_constr_2, 0, "refFrameNumber" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrElementFirst, referenceTimeSlot), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ModuloTimeSlot, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceTimeSlot" }, { ATF_POINTER, 1, offsetof(struct OTD_MsrElementFirst, toaMeasurementsOfRef), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TOA_MeasurementsOfRef, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "toaMeasurementsOfRef" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrElementFirst, stdResolution), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_StdResolution, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "stdResolution" }, { ATF_POINTER, 2, offsetof(struct OTD_MsrElementFirst, taCorrection), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_taCorrection_constraint_1, &asn_PER_memb_taCorrection_constr_6, 0, "taCorrection" }, { ATF_POINTER, 1, offsetof(struct OTD_MsrElementFirst, otd_FirstSetMsrs), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfOTD_FirstSetMsrs, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otd-FirstSetMsrs" }, }; static int asn_MAP_OTD_MsrElementFirst_oms_1[] = { 2, 4, 5 }; static ber_tlv_tag_t asn_DEF_OTD_MsrElementFirst_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_MsrElementFirst_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refFrameNumber at 334 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* referenceTimeSlot at 335 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* toaMeasurementsOfRef at 336 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* stdResolution at 337 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* taCorrection at 338 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* otd-FirstSetMsrs at 341 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_MsrElementFirst_specs_1 = { sizeof(struct OTD_MsrElementFirst), offsetof(struct OTD_MsrElementFirst, _asn_ctx), asn_MAP_OTD_MsrElementFirst_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_OTD_MsrElementFirst_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MsrElementFirst = { "OTD-MsrElementFirst", "OTD-MsrElementFirst", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MsrElementFirst_tags_1, sizeof(asn_DEF_OTD_MsrElementFirst_tags_1) /sizeof(asn_DEF_OTD_MsrElementFirst_tags_1[0]), /* 1 */ asn_DEF_OTD_MsrElementFirst_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MsrElementFirst_tags_1) /sizeof(asn_DEF_OTD_MsrElementFirst_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_MsrElementFirst_1, 6, /* Elements count */ &asn_SPC_OTD_MsrElementFirst_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-5-ProtocolError-Extension.c0000644000175000017500000000432312576764164025611 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel-5-ProtocolError-Extension.h" static asn_TYPE_member_t asn_MBR_Rel_5_ProtocolError_Extension_1[] = { { ATF_POINTER, 1, offsetof(struct Rel_5_ProtocolError_Extension, extended_reference), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Extended_reference, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extended-reference" }, }; static int asn_MAP_Rel_5_ProtocolError_Extension_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_Rel_5_ProtocolError_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel_5_ProtocolError_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* extended-reference at 1030 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel_5_ProtocolError_Extension_specs_1 = { sizeof(struct Rel_5_ProtocolError_Extension), offsetof(struct Rel_5_ProtocolError_Extension, _asn_ctx), asn_MAP_Rel_5_ProtocolError_Extension_tag2el_1, 1, /* Count of tags in the map */ asn_MAP_Rel_5_ProtocolError_Extension_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 0, /* Start extensions */ 2 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel_5_ProtocolError_Extension = { "Rel-5-ProtocolError-Extension", "Rel-5-ProtocolError-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel_5_ProtocolError_Extension_tags_1, sizeof(asn_DEF_Rel_5_ProtocolError_Extension_tags_1) /sizeof(asn_DEF_Rel_5_ProtocolError_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel_5_ProtocolError_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel_5_ProtocolError_Extension_tags_1) /sizeof(asn_DEF_Rel_5_ProtocolError_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel_5_ProtocolError_Extension_1, 1, /* Elements count */ &asn_SPC_Rel_5_ProtocolError_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSUTCModel.c0000644000175000017500000002401512576764164022352 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSUTCModel.h" static int memb_ganssUtcA1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcA0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcTot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcWNt_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcDeltaTls_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcWNlsf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcDN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssUtcDeltaTlsf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssUtcA1_constr_2 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcA0_constr_3 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcTot_constr_4 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcWNt_constr_5 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcDeltaTls_constr_6 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcWNlsf_constr_7 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcDN_constr_8 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssUtcDeltaTlsf_constr_9 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSUTCModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcA1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcA1_constraint_1, &asn_PER_memb_ganssUtcA1_constr_2, 0, "ganssUtcA1" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcA0), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcA0_constraint_1, &asn_PER_memb_ganssUtcA0_constr_3, 0, "ganssUtcA0" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcTot), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcTot_constraint_1, &asn_PER_memb_ganssUtcTot_constr_4, 0, "ganssUtcTot" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcWNt), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcWNt_constraint_1, &asn_PER_memb_ganssUtcWNt_constr_5, 0, "ganssUtcWNt" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcDeltaTls), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcDeltaTls_constraint_1, &asn_PER_memb_ganssUtcDeltaTls_constr_6, 0, "ganssUtcDeltaTls" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcWNlsf), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcWNlsf_constraint_1, &asn_PER_memb_ganssUtcWNlsf_constr_7, 0, "ganssUtcWNlsf" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcDN), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcDN_constraint_1, &asn_PER_memb_ganssUtcDN_constr_8, 0, "ganssUtcDN" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSUTCModel, ganssUtcDeltaTlsf), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssUtcDeltaTlsf_constraint_1, &asn_PER_memb_ganssUtcDeltaTlsf_constr_9, 0, "ganssUtcDeltaTlsf" }, }; static ber_tlv_tag_t asn_DEF_GANSSUTCModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSUTCModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssUtcA1 at 1382 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssUtcA0 at 1383 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ganssUtcTot at 1384 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ganssUtcWNt at 1385 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ganssUtcDeltaTls at 1386 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ganssUtcWNlsf at 1387 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ganssUtcDN at 1388 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* ganssUtcDeltaTlsf at 1389 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSUTCModel_specs_1 = { sizeof(struct GANSSUTCModel), offsetof(struct GANSSUTCModel, _asn_ctx), asn_MAP_GANSSUTCModel_tag2el_1, 8, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSUTCModel = { "GANSSUTCModel", "GANSSUTCModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSUTCModel_tags_1, sizeof(asn_DEF_GANSSUTCModel_tags_1) /sizeof(asn_DEF_GANSSUTCModel_tags_1[0]), /* 1 */ asn_DEF_GANSSUTCModel_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSUTCModel_tags_1) /sizeof(asn_DEF_GANSSUTCModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSUTCModel_1, 8, /* Elements count */ &asn_SPC_GANSSUTCModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSIonosphericModel.c0000644000175000017500000000466112576764164024206 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSIonosphericModel.h" static asn_TYPE_member_t asn_MBR_GANSSIonosphericModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSIonosphericModel, ganssIonoModel), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSIonosphereModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssIonoModel" }, { ATF_POINTER, 1, offsetof(struct GANSSIonosphericModel, ganssIonoStormFlags), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSIonoStormFlags, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssIonoStormFlags" }, }; static int asn_MAP_GANSSIonosphericModel_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_GANSSIonosphericModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSIonosphericModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssIonoModel at 1138 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ganssIonoStormFlags at 1139 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSIonosphericModel_specs_1 = { sizeof(struct GANSSIonosphericModel), offsetof(struct GANSSIonosphericModel, _asn_ctx), asn_MAP_GANSSIonosphericModel_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_GANSSIonosphericModel_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSIonosphericModel = { "GANSSIonosphericModel", "GANSSIonosphericModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSIonosphericModel_tags_1, sizeof(asn_DEF_GANSSIonosphericModel_tags_1) /sizeof(asn_DEF_GANSSIonosphericModel_tags_1[0]), /* 1 */ asn_DEF_GANSSIonosphericModel_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSIonosphericModel_tags_1) /sizeof(asn_DEF_GANSSIonosphericModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSIonosphericModel_1, 2, /* Elements count */ &asn_SPC_GANSSIonosphericModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSRefMeasurementElement.h0000644000175000017500000000174212576764164026137 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSSRefMeasurementElement_H_ #define _SeqOfGANSSRefMeasurementElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSRefMeasurementElement; /* SeqOfGANSSRefMeasurementElement */ typedef struct SeqOfGANSSRefMeasurementElement { A_SEQUENCE_OF(struct GANSSRefMeasurementElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSSRefMeasurementElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSRefMeasurementElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSRefMeasurementElement.h" #endif /* _SeqOfGANSSRefMeasurementElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTimeAssistanceMeasurements.c0000644000175000017500000001274712576764164026032 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSTimeAssistanceMeasurements.h" static int memb_referenceFrameMSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_gpsTowSubms_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 9999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_deltaTow_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_referenceFrameMSB_constr_2 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_gpsTowSubms_constr_3 = { { APC_CONSTRAINED, 14, 14, 0, 9999 } /* (0..9999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_deltaTow_constr_4 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GPSTimeAssistanceMeasurements_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GPSTimeAssistanceMeasurements, referenceFrameMSB), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_referenceFrameMSB_constraint_1, &asn_PER_memb_referenceFrameMSB_constr_2, 0, "referenceFrameMSB" }, { ATF_POINTER, 3, offsetof(struct GPSTimeAssistanceMeasurements, gpsTowSubms), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gpsTowSubms_constraint_1, &asn_PER_memb_gpsTowSubms_constr_3, 0, "gpsTowSubms" }, { ATF_POINTER, 2, offsetof(struct GPSTimeAssistanceMeasurements, deltaTow), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_deltaTow_constraint_1, &asn_PER_memb_deltaTow_constr_4, 0, "deltaTow" }, { ATF_POINTER, 1, offsetof(struct GPSTimeAssistanceMeasurements, gpsReferenceTimeUncertainty), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSReferenceTimeUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsReferenceTimeUncertainty" }, }; static int asn_MAP_GPSTimeAssistanceMeasurements_oms_1[] = { 1, 2, 3 }; static ber_tlv_tag_t asn_DEF_GPSTimeAssistanceMeasurements_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPSTimeAssistanceMeasurements_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceFrameMSB at 950 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gpsTowSubms at 951 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deltaTow at 952 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* gpsReferenceTimeUncertainty at 953 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPSTimeAssistanceMeasurements_specs_1 = { sizeof(struct GPSTimeAssistanceMeasurements), offsetof(struct GPSTimeAssistanceMeasurements, _asn_ctx), asn_MAP_GPSTimeAssistanceMeasurements_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_GPSTimeAssistanceMeasurements_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPSTimeAssistanceMeasurements = { "GPSTimeAssistanceMeasurements", "GPSTimeAssistanceMeasurements", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSTimeAssistanceMeasurements_tags_1, sizeof(asn_DEF_GPSTimeAssistanceMeasurements_tags_1) /sizeof(asn_DEF_GPSTimeAssistanceMeasurements_tags_1[0]), /* 1 */ asn_DEF_GPSTimeAssistanceMeasurements_tags_1, /* Same as above */ sizeof(asn_DEF_GPSTimeAssistanceMeasurements_tags_1) /sizeof(asn_DEF_GPSTimeAssistanceMeasurements_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPSTimeAssistanceMeasurements_1, 4, /* Elements count */ &asn_SPC_GPSTimeAssistanceMeasurements_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrElement.c0000644000175000017500000001654412576764164022654 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPS-MsrElement.h" static int memb_cNo_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_doppler_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_wholeChips_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1022)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_fracChips_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1024)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_pseuRangeRMSErr_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_cNo_constr_3 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_doppler_constr_4 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_wholeChips_constr_5 = { { APC_CONSTRAINED, 10, 10, 0, 1022 } /* (0..1022) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_fracChips_constr_6 = { { APC_CONSTRAINED, 11, 11, 0, 1024 } /* (0..1024) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_pseuRangeRMSErr_constr_8 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GPS_MsrElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, satelliteID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satelliteID" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, cNo), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_cNo_constraint_1, &asn_PER_memb_cNo_constr_3, 0, "cNo" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, doppler), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_doppler_constraint_1, &asn_PER_memb_doppler_constr_4, 0, "doppler" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, wholeChips), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_wholeChips_constraint_1, &asn_PER_memb_wholeChips_constr_5, 0, "wholeChips" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, fracChips), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_fracChips_constraint_1, &asn_PER_memb_fracChips_constr_6, 0, "fracChips" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, mpathIndic), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MpathIndic, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "mpathIndic" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrElement, pseuRangeRMSErr), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_pseuRangeRMSErr_constraint_1, &asn_PER_memb_pseuRangeRMSErr_constr_8, 0, "pseuRangeRMSErr" }, }; static ber_tlv_tag_t asn_DEF_GPS_MsrElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPS_MsrElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* satelliteID at 466 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cNo at 467 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* doppler at 468 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* wholeChips at 469 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fracChips at 470 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* mpathIndic at 474 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* pseuRangeRMSErr at 475 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPS_MsrElement_specs_1 = { sizeof(struct GPS_MsrElement), offsetof(struct GPS_MsrElement, _asn_ctx), asn_MAP_GPS_MsrElement_tag2el_1, 7, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPS_MsrElement = { "GPS-MsrElement", "GPS-MsrElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPS_MsrElement_tags_1, sizeof(asn_DEF_GPS_MsrElement_tags_1) /sizeof(asn_DEF_GPS_MsrElement_tags_1[0]), /* 1 */ asn_DEF_GPS_MsrElement_tags_1, /* Same as above */ sizeof(asn_DEF_GPS_MsrElement_tags_1) /sizeof(asn_DEF_GPS_MsrElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPS_MsrElement_1, 7, /* Elements count */ &asn_SPC_GPS_MsrElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistData-R98-ExpOTD.h0000644000175000017500000000157512576764164025717 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SystemInfoAssistData_R98_ExpOTD_H_ #define _SystemInfoAssistData_R98_ExpOTD_H_ #include /* Including external dependencies */ #include "SeqOfSystemInfoAssistBTS-R98-ExpOTD.h" #include #ifdef __cplusplus extern "C" { #endif /* SystemInfoAssistData-R98-ExpOTD */ typedef struct SystemInfoAssistData_R98_ExpOTD { SeqOfSystemInfoAssistBTS_R98_ExpOTD_t systemInfoAssistListR98_ExpOTD; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SystemInfoAssistData_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistData_R98_ExpOTD; #ifdef __cplusplus } #endif #endif /* _SystemInfoAssistData_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultipleSets.c0000644000175000017500000000773312576764164022604 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MultipleSets.h" static int memb_nbrOfSets_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 2 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_nbrOfReferenceBTSs_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 1 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_nbrOfSets_constr_2 = { { APC_CONSTRAINED, 1, 1, 2, 3 } /* (2..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_nbrOfReferenceBTSs_constr_3 = { { APC_CONSTRAINED, 2, 2, 1, 3 } /* (1..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_MultipleSets_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MultipleSets, nbrOfSets), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_nbrOfSets_constraint_1, &asn_PER_memb_nbrOfSets_constr_2, 0, "nbrOfSets" }, { ATF_NOFLAGS, 0, offsetof(struct MultipleSets, nbrOfReferenceBTSs), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_nbrOfReferenceBTSs_constraint_1, &asn_PER_memb_nbrOfReferenceBTSs_constr_3, 0, "nbrOfReferenceBTSs" }, { ATF_POINTER, 1, offsetof(struct MultipleSets, referenceRelation), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceRelation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceRelation" }, }; static int asn_MAP_MultipleSets_oms_1[] = { 2 }; static ber_tlv_tag_t asn_DEF_MultipleSets_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MultipleSets_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nbrOfSets at 267 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nbrOfReferenceBTSs at 270 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* referenceRelation at 274 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MultipleSets_specs_1 = { sizeof(struct MultipleSets), offsetof(struct MultipleSets, _asn_ctx), asn_MAP_MultipleSets_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_MultipleSets_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MultipleSets = { "MultipleSets", "MultipleSets", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MultipleSets_tags_1, sizeof(asn_DEF_MultipleSets_tags_1) /sizeof(asn_DEF_MultipleSets_tags_1[0]), /* 1 */ asn_DEF_MultipleSets_tags_1, /* Same as above */ sizeof(asn_DEF_MultipleSets_tags_1) /sizeof(asn_DEF_MultipleSets_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MultipleSets_1, 3, /* Elements count */ &asn_SPC_MultipleSets_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PositionData.c0000644000175000017500000001137712576764164022547 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "PositionData.h" int PositionData_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size >= 3 && size <= 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void PositionData_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void PositionData_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { PositionData_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int PositionData_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { PositionData_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t PositionData_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { PositionData_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t PositionData_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { PositionData_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t PositionData_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { PositionData_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t PositionData_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { PositionData_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t PositionData_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { PositionData_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t PositionData_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { PositionData_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_PositionData_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 3, 16 } /* (SIZE(3..16)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_PositionData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_PositionData = { "PositionData", "PositionData", PositionData_free, PositionData_print, PositionData_constraint, PositionData_decode_ber, PositionData_encode_der, PositionData_decode_xer, PositionData_encode_xer, PositionData_decode_uper, PositionData_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PositionData_tags_1, sizeof(asn_DEF_PositionData_tags_1) /sizeof(asn_DEF_PositionData_tags_1[0]), /* 1 */ asn_DEF_PositionData_tags_1, /* Same as above */ sizeof(asn_DEF_PositionData_tags_1) /sizeof(asn_DEF_PositionData_tags_1[0]), /* 1 */ &asn_PER_type_PositionData_constr_1, 0, 0, /* Defined elsewhere */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistData.c0000644000175000017500000000367012576764164024227 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SystemInfoAssistData.h" static asn_TYPE_member_t asn_MBR_SystemInfoAssistData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SystemInfoAssistData, systemInfoAssistList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfSystemInfoAssistBTS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoAssistList" }, }; static ber_tlv_tag_t asn_DEF_SystemInfoAssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SystemInfoAssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* systemInfoAssistList at 218 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SystemInfoAssistData_specs_1 = { sizeof(struct SystemInfoAssistData), offsetof(struct SystemInfoAssistData, _asn_ctx), asn_MAP_SystemInfoAssistData_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistData = { "SystemInfoAssistData", "SystemInfoAssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SystemInfoAssistData_tags_1, sizeof(asn_DEF_SystemInfoAssistData_tags_1) /sizeof(asn_DEF_SystemInfoAssistData_tags_1[0]), /* 1 */ asn_DEF_SystemInfoAssistData_tags_1, /* Same as above */ sizeof(asn_DEF_SystemInfoAssistData_tags_1) /sizeof(asn_DEF_SystemInfoAssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SystemInfoAssistData_1, 1, /* Elements count */ &asn_SPC_SystemInfoAssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfNavModelElement.h0000644000175000017500000000156412576764164024130 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfNavModelElement_H_ #define _SeqOfNavModelElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct NavModelElement; /* SeqOfNavModelElement */ typedef struct SeqOfNavModelElement { A_SEQUENCE_OF(struct NavModelElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfNavModelElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfNavModelElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "NavModelElement.h" #endif /* _SeqOfNavModelElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Extended-reference.c0000644000175000017500000000717112576764164023642 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Extended-reference.h" static int memb_smlc_code_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_transaction_ID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 262143)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_smlc_code_constr_2 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_transaction_ID_constr_3 = { { APC_CONSTRAINED, 18, -1, 0, 262143 } /* (0..262143) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Extended_reference_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Extended_reference, smlc_code), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_smlc_code_constraint_1, &asn_PER_memb_smlc_code_constr_2, 0, "smlc-code" }, { ATF_NOFLAGS, 0, offsetof(struct Extended_reference, transaction_ID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_transaction_ID_constraint_1, &asn_PER_memb_transaction_ID_constr_3, 0, "transaction-ID" }, }; static ber_tlv_tag_t asn_DEF_Extended_reference_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Extended_reference_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* smlc-code at 999 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* transaction-ID at 1000 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Extended_reference_specs_1 = { sizeof(struct Extended_reference), offsetof(struct Extended_reference, _asn_ctx), asn_MAP_Extended_reference_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Extended_reference = { "Extended-reference", "Extended-reference", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Extended_reference_tags_1, sizeof(asn_DEF_Extended_reference_tags_1) /sizeof(asn_DEF_Extended_reference_tags_1[0]), /* 1 */ asn_DEF_Extended_reference_tags_1, /* Same as above */ sizeof(asn_DEF_Extended_reference_tags_1) /sizeof(asn_DEF_Extended_reference_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Extended_reference_1, 2, /* Elements count */ &asn_SPC_Extended_reference_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel7-AssistanceData-Extension.c0000644000175000017500000000615612576764164025620 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel7-AssistanceData-Extension.h" static asn_TYPE_member_t asn_MBR_Rel7_AssistanceData_Extension_1[] = { { ATF_POINTER, 3, offsetof(struct Rel7_AssistanceData_Extension, ganss_AssistData), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSS_AssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganss-AssistData" }, { ATF_POINTER, 2, offsetof(struct Rel7_AssistanceData_Extension, ganssCarrierPhaseMeasurementRequest), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssCarrierPhaseMeasurementRequest" }, { ATF_POINTER, 1, offsetof(struct Rel7_AssistanceData_Extension, ganssTODGSMTimeAssociationMeasurementRequest), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODGSMTimeAssociationMeasurementRequest" }, }; static int asn_MAP_Rel7_AssistanceData_Extension_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_Rel7_AssistanceData_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel7_AssistanceData_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganss-AssistData at 1491 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssCarrierPhaseMeasurementRequest at 1492 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ganssTODGSMTimeAssociationMeasurementRequest at 1493 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel7_AssistanceData_Extension_specs_1 = { sizeof(struct Rel7_AssistanceData_Extension), offsetof(struct Rel7_AssistanceData_Extension, _asn_ctx), asn_MAP_Rel7_AssistanceData_Extension_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_Rel7_AssistanceData_Extension_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel7_AssistanceData_Extension = { "Rel7-AssistanceData-Extension", "Rel7-AssistanceData-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel7_AssistanceData_Extension_tags_1, sizeof(asn_DEF_Rel7_AssistanceData_Extension_tags_1) /sizeof(asn_DEF_Rel7_AssistanceData_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel7_AssistanceData_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel7_AssistanceData_Extension_tags_1) /sizeof(asn_DEF_Rel7_AssistanceData_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel7_AssistanceData_Extension_1, 3, /* Elements count */ &asn_SPC_Rel7_AssistanceData_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_SEQUENCE.c0000644000175000017500000010723612576764164022751 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #undef PHASE_OUT #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) #define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * Check whether we are inside the extensions group. */ #define IN_EXTENSION_GROUP(specs, memb_idx) \ ( ((memb_idx) > (specs)->ext_after) \ &&((memb_idx) < (specs)->ext_before)) /* * Tags are canonically sorted in the tag2element map. */ static int _t2e_cmp(const void *ap, const void *bp) { const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; int a_class = BER_TAG_CLASS(a->el_tag); int b_class = BER_TAG_CLASS(b->el_tag); if(a_class == b_class) { ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); if(a_value == b_value) { if(a->el_no > b->el_no) return 1; /* * Important: we do not check * for a->el_no <= b->el_no! */ return 0; } else if(a_value < b_value) return -1; else return 1; } else if(a_class < b_class) { return -1; } else { return 1; } } /* * The decoder of the SEQUENCE type. */ asn_dec_rval_t SEQUENCE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* SEQUENCE element's index */ ASN_DEBUG("Decoding %s as SEQUENCE", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, 1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) ctx->left += rval.consumed; /* ?Substracted below! */ ADVANCE(rval.consumed); NEXT_PHASE(ctx); ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", (long)ctx->left, (long)size); /* Fall through */ case 1: /* * PHASE 1. * From the place where we've left it previously, * try to decode the next member from the list of * this structure's elements. * (ctx->step) stores the member being processed * between invocations and the microphase {0,1} of parsing * that member: * step = ( * 2 + ). */ for(edx = (ctx->step >> 1); edx < td->elements_count; edx++, ctx->step = (ctx->step & ~1) + 2) { void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ ssize_t tag_len; /* Length of TLV's T */ int opt_edx_end; /* Next non-optional element */ int use_bsearch; int n; if(ctx->step & 1) goto microphase2; /* * MICROPHASE 1: Synchronize decoding. */ ASN_DEBUG("In %s SEQUENCE left %d, edx=%d flags=%d" " opt=%d ec=%d", td->name, (int)ctx->left, edx, elements[edx].flags, elements[edx].optional, td->elements_count); if(ctx->left == 0 /* No more stuff is expected */ && ( /* Explicit OPTIONAL specification reaches the end */ (edx + elements[edx].optional == td->elements_count) || /* All extensions are optional */ (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count) ) ) { ASN_DEBUG("End of SEQUENCE %s", td->name); /* * Found the legitimate end of the structure. */ PHASE_OUT(ctx); RETURN(RC_OK); } /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); ASN_DEBUG("Current tag in %s SEQUENCE for element %d " "(%s) is %s encoded in %d bytes, of frame %ld", td->name, edx, elements[edx].name, ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { ASN_DEBUG("edx = %d, opt = %d, ec=%d", edx, elements[edx].optional, td->elements_count); if((edx + elements[edx].optional == td->elements_count) || (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count)) { /* * Yeah, baby! Found the terminator * of the indefinite length structure. */ /* * Proceed to the canonical * finalization function. * No advancing is necessary. */ goto phase3; } } } /* * Find the next available type with this tag. */ use_bsearch = 0; opt_edx_end = edx + elements[edx].optional + 1; if(opt_edx_end > td->elements_count) opt_edx_end = td->elements_count; /* Cap */ else if(opt_edx_end - edx > 8) { /* Limit the scope of linear search... */ opt_edx_end = edx + 8; use_bsearch = 1; /* ... and resort to bsearch() */ } for(n = edx; n < opt_edx_end; n++) { if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { /* * Found element corresponding to the tag * being looked at. * Reposition over the right element. */ edx = n; ctx->step = 1 + 2 * edx; /* Remember! */ goto microphase2; } else if(elements[n].flags & ATF_OPEN_TYPE) { /* * This is the ANY type, which may bear * any flag whatsoever. */ edx = n; ctx->step = 1 + 2 * edx; /* Remember! */ goto microphase2; } else if(elements[n].tag == (ber_tlv_tag_t)-1) { use_bsearch = 1; break; } } if(use_bsearch) { /* * Resort to a binary search over * sorted array of tags. */ asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; key.el_no = edx; t2m = (asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _t2e_cmp); if(t2m) { asn_TYPE_tag2member_t *best = 0; asn_TYPE_tag2member_t *t2m_f, *t2m_l; int edx_max = edx + elements[edx].optional; /* * Rewind to the first element with that tag, * `cause bsearch() does not guarantee order. */ t2m_f = t2m + t2m->toff_first; t2m_l = t2m + t2m->toff_last; for(t2m = t2m_f; t2m <= t2m_l; t2m++) { if(t2m->el_no > edx_max) break; if(t2m->el_no < edx) continue; best = t2m; } if(best) { edx = best->el_no; ctx->step = 1 + 2 * edx; goto microphase2; } } n = opt_edx_end; } if(n == opt_edx_end) { /* * If tag is unknown, it may be either * an unknown (thus, incorrect) tag, * or an extension (...), * or an end of the indefinite-length structure. */ if(!IN_EXTENSION_GROUP(specs, edx + elements[edx].optional)) { ASN_DEBUG("Unexpected tag %s (at %d)", ber_tlv_tag_string(tlv_tag), edx); ASN_DEBUG("Expected tag %s (%s)%s", ber_tlv_tag_string(elements[edx].tag), elements[edx].name, elements[edx].optional ?" or alternatives":""); RETURN(RC_FAIL); } else { /* Skip this tag */ ssize_t skip; edx += elements[edx].optional; ASN_DEBUG("Skipping unexpected %s (at %d)", ber_tlv_tag_string(tlv_tag), edx); skip = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tag_len, LEFT - tag_len); ASN_DEBUG("Skip length %d in %s", (int)skip, td->name); switch(skip) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(skip + tag_len); ctx->step -= 2; edx--; continue; /* Try again with the next tag */ } } /* * MICROPHASE 2: Invoke the member-specific decoder. */ ctx->step |= 1; /* Confirm entering next microphase */ microphase2: ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); /* * Compute the position of the member inside a structure, * and also a type of containment (it may be contained * as pointer or using inline inclusion). */ if(elements[edx].flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); } else { /* * A pointer to a pointer * holding the start of the structure */ memb_ptr = (char *)st + elements[edx].memb_offset; memb_ptr2 = &memb_ptr; } /* * Invoke the member fetch routine according to member's type */ rval = elements[edx].type->ber_decoder(opt_codec_ctx, elements[edx].type, memb_ptr2, ptr, LEFT, elements[edx].tag_mode); ASN_DEBUG("In %s SEQUENCE decoded %d %s of %d " "in %d bytes rval.code %d, size=%d", td->name, edx, elements[edx].type->name, (int)LEFT, (int)rval.consumed, rval.code, (int)size); switch(rval.code) { case RC_OK: break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", (long)ctx->left, (long)size); /* Fall through */ case RC_FAIL: /* Fatal error */ RETURN(RC_FAIL); } /* switch(rval) */ ADVANCE(rval.consumed); } /* for(all structure members) */ phase3: ctx->phase = 3; case 3: /* 00 and other tags expected */ case 4: /* only 00's expected */ ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", td->name, (long)ctx->left, (long)size); /* * Skip everything until the end of the SEQUENCE. */ while(ctx->left) { ssize_t tl, ll; tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tl) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } /* * If expected <0><0>... */ if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Correctly finished with <0><0>. */ ADVANCE(2); ctx->left++; ctx->phase = 4; continue; } } if(!IN_EXTENSION_GROUP(specs, td->elements_count) || ctx->phase == 4) { ASN_DEBUG("Unexpected continuation " "of a non-extensible type " "%s (SEQUENCE): %s", td->name, ber_tlv_tag_string(tlv_tag)); RETURN(RC_FAIL); } ll = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tl, LEFT - tl); switch(ll) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(tl + ll); } PHASE_OUT(ctx); } RETURN(RC_OK); } /* * The DER encoder of the SEQUENCE type. */ asn_enc_rval_t SEQUENCE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { size_t computed_size = 0; asn_enc_rval_t erval; ssize_t ret; int edx; ASN_DEBUG("%s %s as SEQUENCE", cb?"Encoding":"Estimating", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Mandatory element is missing */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; ASN_DEBUG("Member %d %s estimated %ld bytes", edx, elm->name, (long)erval.encoded); } /* * Encode the TLV for the sequence itself. */ ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); if(ret == -1) _ASN_ENCODE_FAILED; erval.encoded = computed_size + ret; if(!cb) _ASN_ENCODED_OK(erval); /* * Encode all members. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; asn_enc_rval_t tmperval; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) continue; } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } tmperval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, cb, app_key); if(tmperval.encoded == -1) return tmperval; computed_size -= tmperval.encoded; ASN_DEBUG("Member %d %s of SEQUENCE %s encoded in %ld bytes", edx, elm->name, td->name, (long)tmperval.encoded); } if(computed_size != 0) /* * Encoded size is not equal to the computed size. */ _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(erval); } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * ... and parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value from a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* Element index */ int edx_end; /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. * Phase 3: Skipping unknown extensions. * Phase 4: PHASED OUT */ for(edx = ctx->step; ctx->phase <= 3;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ asn_TYPE_member_t *elm; int n; /* * Go inside the inner member of a sequence. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &td->elements[edx]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Invoke the inner type decoder, m.b. multiple times */ tmprval = elm->type->xer_decoder(opt_codec_ctx, elm->type, memb_ptr2, elm->name, buf_ptr, size); XER_ADVANCE(tmprval.consumed); if(tmprval.code != RC_OK) RETURN(tmprval.code); ctx->phase = 1; /* Back to body processing */ ctx->step = ++edx; ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", ctx->phase, ctx->step); /* Fall through */ } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", tcv, ctx->phase, xml_tag); /* Skip the extensions section */ if(ctx->phase == 3) { switch(xer_skip_unknown(tcv, &ctx->left)) { case -1: ctx->phase = 4; RETURN(RC_FAIL); case 0: XER_ADVANCE(ch_size); continue; case 1: XER_ADVANCE(ch_size); ctx->phase = 1; continue; case 2: ctx->phase = 1; break; } } switch(tcv) { case XCT_CLOSING: if(ctx->phase == 0) break; ctx->phase = 0; /* Fall through */ case XCT_BOTH: if(ctx->phase == 0) { if(edx >= td->elements_count || /* Explicit OPTIONAL specs reaches the end */ (edx + elements[edx].optional == td->elements_count) || /* All extensions are optional */ (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count) ) { XER_ADVANCE(ch_size); ctx->phase = 4; /* Phase out */ RETURN(RC_OK); } else { ASN_DEBUG("Premature end of XER SEQUENCE"); RETURN(RC_FAIL); } } /* Fall through */ case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%d", tcv, ctx->phase, edx); if(ctx->phase != 1) { break; /* Really unexpected */ } if(edx < td->elements_count) { /* * Search which member corresponds to this tag. */ edx_end = edx + elements[edx].optional + 1; if(edx_end > td->elements_count) edx_end = td->elements_count; for(n = edx; n < edx_end; n++) { elm = &td->elements[n]; tcv = xer_check_tag(buf_ptr, ch_size, elm->name); switch(tcv) { case XCT_BOTH: case XCT_OPENING: /* * Process this member. */ ctx->step = edx = n; ctx->phase = 2; break; case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: continue; default: n = edx_end; break; /* Phase out */ } break; } if(n != edx_end) continue; } else { ASN_DEBUG("Out of defined members: %d/%d", edx, td->elements_count); } /* It is expected extension */ if(IN_EXTENSION_GROUP(specs, edx + (edx < td->elements_count ? elements[edx].optional : 0))) { ASN_DEBUG("Got anticipated extension at %d", edx); /* * Check for (XCT_BOTH or XCT_UNKNOWN_BO) * By using a mask. Only record a pure * tags. */ if(tcv & XCT_CLOSING) { /* Found without body */ } else { ctx->left = 1; ctx->phase = 3; /* Skip ...'s */ } XER_ADVANCE(ch_size); continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", size>0?((const char *)buf_ptr)[0]:'.', size>1?((const char *)buf_ptr)[1]:'.', size>2?((const char *)buf_ptr)[2]:'.', size>3?((const char *)buf_ptr)[3]:'.', size>4?((const char *)buf_ptr)[4]:'.', size>5?((const char *)buf_ptr)[5]:'.'); break; } ctx->phase = 4; /* "Phase out" on hard failure */ RETURN(RC_FAIL); } asn_enc_rval_t SEQUENCE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; int xcan = (flags & XER_F_CANONICAL); int edx; if(!sptr) _ASN_ENCODE_FAILED; er.encoded = 0; for(edx = 0; edx < td->elements_count; edx++) { asn_enc_rval_t tmper; asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; const char *mname = elm->name; unsigned int mlen = strlen(mname); if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Mandatory element is missing */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); /* Print the member itself */ tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; _ASN_CALLBACK3("", 1); er.encoded += 5 + (2 * mlen) + tmper.encoded; } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } int SEQUENCE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { int edx; int ret; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* Dump preamble */ if(cb(td->name, strlen(td->name), app_key) < 0 || cb(" ::= {", 6, app_key) < 0) return -1; for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Print line */ /* Fall through */ } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } /* Indentation */ _i_INDENT(1); /* Print the member's name and stuff */ if(cb(elm->name, strlen(elm->name), app_key) < 0 || cb(": ", 2, app_key) < 0) return -1; /* Print the member itself */ ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, cb, app_key); if(ret) return ret; } ilevel--; _i_INDENT(1); return (cb("}", 1, app_key) < 0) ? -1 : 0; } void SEQUENCE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { int edx; if(!td || !sptr) return; ASN_DEBUG("Freeing %s as SEQUENCE", td->name); for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); } } if(!contents_only) { FREEMEM(sptr); } } int SEQUENCE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { int edx; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* * Iterate over structure members and check their validity. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; _ASN_CTFAIL(app_key, td, sptr, "%s: mandatory element %s absent (%s:%d)", td->name, elm->name, __FILE__, __LINE__); return -1; } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } if(elm->memb_constraints) { int ret = elm->memb_constraints(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; } else { int ret = elm->type->check_constraints(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; /* * Cannot inherit it earlier: * need to make sure we get the updated version. */ elm->memb_constraints = elm->type->check_constraints; } } return 0; } asn_dec_rval_t SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; void *st = *sptr; /* Target structure. */ int extpresent; /* Extension additions are present */ uint8_t *opres; /* Presence of optional root members */ asn_per_data_t opmd; asn_dec_rval_t rv; int edx; (void)constraints; if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) _ASN_DECODE_FAILED; if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) _ASN_DECODE_FAILED; } ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); /* Handle extensions */ if(specs->ext_before >= 0) { extpresent = per_get_few_bits(pd, 1); if(extpresent < 0) _ASN_DECODE_STARVED; } else { extpresent = 0; } /* Prepare a place and read-in the presence bitmap */ memset(&opmd, 0, sizeof(opmd)); if(specs->roms_count) { opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); if(!opres) _ASN_DECODE_FAILED; /* Get the presence map */ if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { FREEMEM(opres); _ASN_DECODE_STARVED; } opmd.buffer = opres; opmd.nbits = specs->roms_count; ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", td->name, specs->roms_count, *opres); } else { opres = 0; } /* * Get the sequence ROOT elements. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ if(IN_EXTENSION_GROUP(specs, edx)) continue; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Deal with optionality */ if(elm->optional) { int present = per_get_few_bits(&opmd, 1); ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", td->name, elm->name, present, (int)opmd.nboff, (int)opmd.nbits); if(present == 0) { /* This element is not present */ if(elm->default_value) { /* Fill-in DEFAULT */ if(elm->default_value(1, memb_ptr2)) { FREEMEM(opres); _ASN_DECODE_FAILED; } ASN_DEBUG("Filled-in default"); } /* The member is just not present */ continue; } /* Fall through */ } /* Fetch the member from the stream */ ASN_DEBUG("Decoding member %s in %s", elm->name, td->name); rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); if(rv.code != RC_OK) { ASN_DEBUG("Failed decode %s in %s", elm->name, td->name); FREEMEM(opres); return rv; } } /* Optionality map is not needed anymore */ FREEMEM(opres); /* * Deal with extensions. */ if(extpresent) { ssize_t bmlength; uint8_t *epres; /* Presence of extension members */ asn_per_data_t epmd; bmlength = uper_get_nslength(pd); if(bmlength < 0) _ASN_DECODE_STARVED; ASN_DEBUG("Extensions %d present in %s", bmlength, td->name); epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); if(!epres) _ASN_DECODE_STARVED; /* Get the extensions map */ if(per_get_many_bits(pd, epres, 0, bmlength)) _ASN_DECODE_STARVED; memset(&epmd, 0, sizeof(epmd)); epmd.buffer = epres; epmd.nbits = bmlength; ASN_DEBUG("Read in extensions bitmap for %s of %d bits (%x..)", td->name, bmlength, *epres); /* Go over extensions and read them in */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; if(!IN_EXTENSION_GROUP(specs, edx)) { ASN_DEBUG("%d is not extension", edx); continue; } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (void *)((char *)st + elm->memb_offset); memb_ptr2 = &memb_ptr; } present = per_get_few_bits(&epmd, 1); if(present <= 0) { if(present < 0) break; /* No more extensions */ continue; } ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); rv = uper_open_type_get(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); if(rv.code != RC_OK) { FREEMEM(epres); return rv; } } /* Skip over overflow extensions which aren't present * in this system's version of the protocol */ for(;;) { ASN_DEBUG("Getting overflow extensions"); switch(per_get_few_bits(&epmd, 1)) { case -1: break; case 0: continue; default: if(uper_open_type_skip(opt_codec_ctx, pd)) { FREEMEM(epres); _ASN_DECODE_STARVED; } } break; } FREEMEM(epres); } /* Fill DEFAULT members in extensions */ for(edx = specs->roms_count; edx < specs->roms_count + specs->aoms_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void **memb_ptr2; /* Pointer to member pointer */ if(!elm->default_value) continue; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); if(*memb_ptr2) continue; } else { continue; /* Extensions are all optionals */ } /* Set default value */ if(elm->default_value(1, memb_ptr2)) { _ASN_DECODE_FAILED; } } rv.consumed = 0; rv.code = RC_OK; return rv; } static int SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, asn_per_outp_t *po1, asn_per_outp_t *po2) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; int exts_present = 0; int exts_count = 0; int edx; if(specs->ext_before < 0) return 0; /* Find out which extensions are present */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; if(!IN_EXTENSION_GROUP(specs, edx)) { ASN_DEBUG("%s (@%d) is not extension", elm->type->name, edx); continue; } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); present = (*memb_ptr2 != 0); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; present = 1; } ASN_DEBUG("checking %s (@%d) present => %d", elm->type->name, edx, present); exts_count++; exts_present += present; /* Encode as presence marker */ if(po1 && per_put_few_bits(po1, present, 1)) return -1; /* Encode as open type field */ if(po2 && present && uper_open_type_put(elm->type, elm->per_constraints, *memb_ptr2, po2)) return -1; } return exts_present ? exts_count : 0; } asn_enc_rval_t SEQUENCE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_enc_rval_t er; int n_extensions; int edx; int i; (void)constraints; if(!sptr) _ASN_ENCODE_FAILED; er.encoded = 0; ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); /* * X.691#18.1 Whether structure is extensible * and whether to encode extensions */ if(specs->ext_before >= 0) { n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0); per_put_few_bits(po, n_extensions ? 1 : 0, 1); } else { n_extensions = 0; /* There are no extensions to encode */ } /* Encode a presence bitmap */ for(i = 0; i < specs->roms_count; i++) { asn_TYPE_member_t *elm; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; edx = specs->oms[i]; elm = &td->elements[edx]; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); present = (*memb_ptr2 != 0); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; present = 1; } /* Eliminate default values */ if(present && elm->default_value && elm->default_value(0, memb_ptr2) == 1) present = 0; ASN_DEBUG("Element %s %s %s->%s is %s", elm->flags & ATF_POINTER ? "ptr" : "inline", elm->default_value ? "def" : "wtv", td->name, elm->name, present ? "present" : "absent"); if(per_put_few_bits(po, present, 1)) _ASN_ENCODE_FAILED; } /* * Encode the sequence ROOT elements. */ ASN_DEBUG("ext_after = %d, ec = %d, eb = %d", specs->ext_after, td->elements_count, specs->ext_before); for(edx = 0; edx < ((specs->ext_after < 0) ? td->elements_count : specs->ext_before - 1); edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ if(IN_EXTENSION_GROUP(specs, edx)) continue; ASN_DEBUG("About to encode %s", elm->type->name); /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); if(!*memb_ptr2) { ASN_DEBUG("Element %s %d not present", elm->name, edx); if(elm->optional) continue; /* Mandatory element is missing */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; } /* Eliminate default values */ if(elm->default_value && elm->default_value(0, memb_ptr2) == 1) continue; ASN_DEBUG("Encoding %s->%s", td->name, elm->name); er = elm->type->uper_encoder(elm->type, elm->per_constraints, *memb_ptr2, po); if(er.encoded == -1) return er; } /* No extensions to encode */ if(!n_extensions) _ASN_ENCODED_OK(er); ASN_DEBUG("Length of %d bit-map", n_extensions); /* #18.8. Write down the presence bit-map length. */ if(uper_put_nslength(po, n_extensions)) _ASN_ENCODE_FAILED; ASN_DEBUG("Bit-map of %d elements", n_extensions); /* #18.7. Encoding the extensions presence bit-map. */ /* TODO: act upon NOTE in #18.7 for canonical PER */ if(SEQUENCE_handle_extensions(td, sptr, po, 0) != n_extensions) _ASN_ENCODE_FAILED; ASN_DEBUG("Writing %d extensions", n_extensions); /* #18.9. Encode extensions as open type fields. */ if(SEQUENCE_handle_extensions(td, sptr, 0, po) != n_extensions) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTOD.h0000644000175000017500000000153712576764164021375 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSTOD_H_ #define _GANSSTOD_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GANSSTOD */ typedef long GANSSTOD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSTOD; asn_struct_free_f GANSSTOD_free; asn_struct_print_f GANSSTOD_print; asn_constr_check_f GANSSTOD_constraint; ber_type_decoder_f GANSSTOD_decode_ber; der_type_encoder_f GANSSTOD_encode_der; xer_type_decoder_f GANSSTOD_decode_xer; xer_type_encoder_f GANSSTOD_encode_xer; per_type_decoder_f GANSSTOD_decode_uper; per_type_encoder_f GANSSTOD_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSTOD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_codecs.h0000644000175000017500000000654512576764164022260 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _ASN_CODECS_H_ #define _ASN_CODECS_H_ #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * This structure defines a set of parameters that may be passed * to every ASN.1 encoder or decoder function. * WARNING: if max_stack_size member is set, and you are calling the * function pointers of the asn_TYPE_descriptor_t directly, * this structure must be ALLOCATED ON THE STACK! * If you can't always satisfy this requirement, use ber_decode(), * xer_decode() and uper_decode() functions instead. */ typedef struct asn_codec_ctx_s { /* * Limit the decoder routines to use no (much) more stack than a given * number of bytes. Most of decoders are stack-based, and this * would protect against stack overflows if the number of nested * encodings is high. * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, * and are safe from this kind of overflow. * A value from getrlimit(RLIMIT_STACK) may be used to initialize * this variable. Be careful in multithreaded environments, as the * stack size is rather limited. */ size_t max_stack_size; /* 0 disables stack bounds checking */ } asn_codec_ctx_t; /* * Type of the return value of the encoding functions (der_encode, xer_encode). */ typedef struct asn_enc_rval_s { /* * Number of bytes encoded. * -1 indicates failure to encode the structure. * In this case, the members below this one are meaningful. */ ssize_t encoded; /* * Members meaningful when (encoded == -1), for post mortem analysis. */ /* Type which cannot be encoded */ struct asn_TYPE_descriptor_s *failed_type; /* Pointer to the structure of that type */ void *structure_ptr; } asn_enc_rval_t; #define _ASN_ENCODE_FAILED do { \ asn_enc_rval_t tmp_error; \ tmp_error.encoded = -1; \ tmp_error.failed_type = td; \ tmp_error.structure_ptr = sptr; \ ASN_DEBUG("Failed to encode element %s", td->name); \ return tmp_error; \ } while(0) #define _ASN_ENCODED_OK(rval) do { \ rval.structure_ptr = 0; \ rval.failed_type = 0; \ return rval; \ } while(0) /* * Type of the return value of the decoding functions (ber_decode, xer_decode) * * Please note that the number of consumed bytes is ALWAYS meaningful, * even if code==RC_FAIL. This is to indicate the number of successfully * decoded bytes, hence providing a possibility to fail with more diagnostics * (i.e., print the offending remainder of the buffer). */ enum asn_dec_rval_code_e { RC_OK, /* Decoded successfully */ RC_WMORE, /* More data expected, call again */ RC_FAIL /* Failure to decode data */ }; typedef struct asn_dec_rval_s { enum asn_dec_rval_code_e code; /* Result code */ size_t consumed; /* Number of bytes consumed */ } asn_dec_rval_t; #define _ASN_DECODE_FAILED do { \ asn_dec_rval_t tmp_error; \ tmp_error.code = RC_FAIL; \ tmp_error.consumed = 0; \ ASN_DEBUG("Failed to decode element %s", td->name); \ return tmp_error; \ } while(0) #define _ASN_DECODE_STARVED do { \ asn_dec_rval_t tmp_error; \ tmp_error.code = RC_WMORE; \ tmp_error.consumed = 0; \ return tmp_error; \ } while(0) #ifdef __cplusplus } #endif #endif /* _ASN_CODECS_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SVIDMASK.c0000644000175000017500000001113012576764164021355 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SVIDMASK.h" int SVIDMASK_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size >= 1 && size <= 36)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void SVIDMASK_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void SVIDMASK_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { SVIDMASK_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int SVIDMASK_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t SVIDMASK_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t SVIDMASK_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t SVIDMASK_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t SVIDMASK_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t SVIDMASK_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t SVIDMASK_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { SVIDMASK_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_SVIDMASK_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 36 } /* (SIZE(1..36)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_SVIDMASK_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_SVIDMASK = { "SVIDMASK", "SVIDMASK", SVIDMASK_free, SVIDMASK_print, SVIDMASK_constraint, SVIDMASK_decode_ber, SVIDMASK_encode_der, SVIDMASK_decode_xer, SVIDMASK_encode_xer, SVIDMASK_decode_uper, SVIDMASK_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SVIDMASK_tags_1, sizeof(asn_DEF_SVIDMASK_tags_1) /sizeof(asn_DEF_SVIDMASK_tags_1[0]), /* 1 */ asn_DEF_SVIDMASK_tags_1, /* Same as above */ sizeof(asn_DEF_SVIDMASK_tags_1) /sizeof(asn_DEF_SVIDMASK_tags_1[0]), /* 1 */ &asn_PER_type_SVIDMASK_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/xer_encoder.h0000644000175000017500000000324112576764164022442 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_ENCODER_H_ #define _XER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ enum xer_encoder_flags_e { /* Mode of encoding */ XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ }; /* * The XER encoder of any type. May be invoked by the application. */ asn_enc_rval_t xer_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) * output into the chosen file pointer. * RETURN VALUES: * 0: The structure is printed. * -1: Problem printing the structure. * WARNING: No sensible errno value is returned. */ int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr); /* * Type of the generic XER encoder. */ typedef asn_enc_rval_t (xer_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ int ilevel, /* Level of indentation */ enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); #ifdef __cplusplus } #endif #endif /* _XER_ENCODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAlmanacModel.c0000644000175000017500000001256312576764164023260 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSAlmanacModel.h" static int memb_weekNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_toa_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ioda_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_weekNumber_constr_2 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_toa_constr_4 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ioda_constr_5 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSAlmanacModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSAlmanacModel, weekNumber), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_weekNumber_constraint_1, &asn_PER_memb_weekNumber_constr_2, 0, "weekNumber" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSAlmanacModel, svIDMask), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVIDMASK, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svIDMask" }, { ATF_POINTER, 2, offsetof(struct GANSSAlmanacModel, toa), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_toa_constraint_1, &asn_PER_memb_toa_constr_4, 0, "toa" }, { ATF_POINTER, 1, offsetof(struct GANSSAlmanacModel, ioda), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ioda_constraint_1, &asn_PER_memb_ioda_constr_5, 0, "ioda" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSAlmanacModel, ganssAlmanacList), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSSAlmanacElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssAlmanacList" }, }; static int asn_MAP_GANSSAlmanacModel_oms_1[] = { 2, 3 }; static ber_tlv_tag_t asn_DEF_GANSSAlmanacModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSAlmanacModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* weekNumber at 1348 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* svIDMask at 1349 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* toa at 1350 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ioda at 1351 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ganssAlmanacList at 1353 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSAlmanacModel_specs_1 = { sizeof(struct GANSSAlmanacModel), offsetof(struct GANSSAlmanacModel, _asn_ctx), asn_MAP_GANSSAlmanacModel_tag2el_1, 5, /* Count of tags in the map */ asn_MAP_GANSSAlmanacModel_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSAlmanacModel = { "GANSSAlmanacModel", "GANSSAlmanacModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSAlmanacModel_tags_1, sizeof(asn_DEF_GANSSAlmanacModel_tags_1) /sizeof(asn_DEF_GANSSAlmanacModel_tags_1[0]), /* 1 */ asn_DEF_GANSSAlmanacModel_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSAlmanacModel_tags_1) /sizeof(asn_DEF_GANSSAlmanacModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSAlmanacModel_1, 5, /* Elements count */ &asn_SPC_GANSSAlmanacModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSPositioningMethod.c0000644000175000017500000001221712576764164024402 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSPositioningMethod.h" int GANSSPositioningMethod_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } if(st->size > 0) { /* Size in bits */ size = 8 * st->size - (st->bits_unused & 0x07); } else { size = 0; } if((size >= 2 && size <= 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ static void GANSSPositioningMethod_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BIT_STRING.per_constraints; td->elements = asn_DEF_BIT_STRING.elements; td->elements_count = asn_DEF_BIT_STRING.elements_count; td->specifics = asn_DEF_BIT_STRING.specifics; } void GANSSPositioningMethod_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSPositioningMethod_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSPositioningMethod_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSPositioningMethod_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSPositioningMethod_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSPositioningMethod_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSPositioningMethod_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSPositioningMethod_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSPositioningMethod_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSPositioningMethod_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 2, 16 } /* (SIZE(2..16)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSPositioningMethod_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSPositioningMethod = { "GANSSPositioningMethod", "GANSSPositioningMethod", GANSSPositioningMethod_free, GANSSPositioningMethod_print, GANSSPositioningMethod_constraint, GANSSPositioningMethod_decode_ber, GANSSPositioningMethod_encode_der, GANSSPositioningMethod_decode_xer, GANSSPositioningMethod_encode_xer, GANSSPositioningMethod_decode_uper, GANSSPositioningMethod_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSPositioningMethod_tags_1, sizeof(asn_DEF_GANSSPositioningMethod_tags_1) /sizeof(asn_DEF_GANSSPositioningMethod_tags_1[0]), /* 1 */ asn_DEF_GANSSPositioningMethod_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSPositioningMethod_tags_1) /sizeof(asn_DEF_GANSSPositioningMethod_tags_1[0]), /* 1 */ &asn_PER_type_GANSSPositioningMethod_constr_1, 0, 0, /* Defined elsewhere */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NavigationModel.c0000644000175000017500000000347012576764164023224 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "NavigationModel.h" static asn_TYPE_member_t asn_MBR_NavigationModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct NavigationModel, navModelList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfNavModelElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "navModelList" }, }; static ber_tlv_tag_t asn_DEF_NavigationModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_NavigationModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* navModelList at 697 */ }; static asn_SEQUENCE_specifics_t asn_SPC_NavigationModel_specs_1 = { sizeof(struct NavigationModel), offsetof(struct NavigationModel, _asn_ctx), asn_MAP_NavigationModel_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_NavigationModel = { "NavigationModel", "NavigationModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NavigationModel_tags_1, sizeof(asn_DEF_NavigationModel_tags_1) /sizeof(asn_DEF_NavigationModel_tags_1[0]), /* 1 */ asn_DEF_NavigationModel_tags_1, /* Same as above */ sizeof(asn_DEF_NavigationModel_tags_1) /sizeof(asn_DEF_NavigationModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_NavigationModel_1, 1, /* Elements count */ &asn_SPC_NavigationModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalDopplerFields.h0000644000175000017500000000140512576764164024335 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AddionalDopplerFields_H_ #define _AddionalDopplerFields_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* AddionalDopplerFields */ typedef struct AddionalDopplerFields { long doppler1; long dopplerUncertainty; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AddionalDopplerFields_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AddionalDopplerFields; #ifdef __cplusplus } #endif #endif /* _AddionalDopplerFields_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatelliteID.c0000644000175000017500000001114612576764164022306 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SatelliteID.h" int SatelliteID_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void SatelliteID_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void SatelliteID_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { SatelliteID_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int SatelliteID_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t SatelliteID_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t SatelliteID_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t SatelliteID_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t SatelliteID_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t SatelliteID_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t SatelliteID_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { SatelliteID_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_SatelliteID_constr_1 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_SatelliteID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_SatelliteID = { "SatelliteID", "SatelliteID", SatelliteID_free, SatelliteID_print, SatelliteID_constraint, SatelliteID_decode_ber, SatelliteID_encode_der, SatelliteID_decode_xer, SatelliteID_encode_xer, SatelliteID_decode_uper, SatelliteID_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SatelliteID_tags_1, sizeof(asn_DEF_SatelliteID_tags_1) /sizeof(asn_DEF_SatelliteID_tags_1[0]), /* 1 */ asn_DEF_SatelliteID_tags_1, /* Same as above */ sizeof(asn_DEF_SatelliteID_tags_1) /sizeof(asn_DEF_SatelliteID_tags_1[0]), /* 1 */ &asn_PER_type_SatelliteID_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSSignalID.h0000644000175000017500000000165212576764164022377 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSSignalID_H_ #define _GANSSSignalID_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GANSSSignalID */ typedef long GANSSSignalID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSSignalID; asn_struct_free_f GANSSSignalID_free; asn_struct_print_f GANSSSignalID_print; asn_constr_check_f GANSSSignalID_constraint; ber_type_decoder_f GANSSSignalID_decode_ber; der_type_encoder_f GANSSSignalID_encode_der; xer_type_decoder_f GANSSSignalID_decode_xer; xer_type_encoder_f GANSSSignalID_encode_xer; per_type_decoder_f GANSSSignalID_decode_uper; per_type_encoder_f GANSSSignalID_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSSignalID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultiFrameCarrier.h0000644000175000017500000000143512576764164023525 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MultiFrameCarrier_H_ #define _MultiFrameCarrier_H_ #include /* Including external dependencies */ #include "BCCHCarrier.h" #include "MultiFrameOffset.h" #include #ifdef __cplusplus extern "C" { #endif /* MultiFrameCarrier */ typedef struct MultiFrameCarrier { BCCHCarrier_t bcchCarrier; MultiFrameOffset_t multiFrameOffset; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MultiFrameCarrier_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MultiFrameCarrier; #ifdef __cplusplus } #endif #endif /* _MultiFrameCarrier_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EnvironmentCharacter.h0000644000175000017500000000237612576764164024276 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _EnvironmentCharacter_H_ #define _EnvironmentCharacter_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum EnvironmentCharacter { EnvironmentCharacter_badArea = 0, EnvironmentCharacter_notBadArea = 1, EnvironmentCharacter_mixedArea = 2 /* * Enumeration is extensible */ } e_EnvironmentCharacter; /* EnvironmentCharacter */ typedef ENUMERATED_t EnvironmentCharacter_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_EnvironmentCharacter; asn_struct_free_f EnvironmentCharacter_free; asn_struct_print_f EnvironmentCharacter_print; asn_constr_check_f EnvironmentCharacter_constraint; ber_type_decoder_f EnvironmentCharacter_decode_ber; der_type_encoder_f EnvironmentCharacter_encode_der; xer_type_decoder_f EnvironmentCharacter_decode_xer; xer_type_encoder_f EnvironmentCharacter_encode_xer; per_type_decoder_f EnvironmentCharacter_decode_uper; per_type_encoder_f EnvironmentCharacter_encode_uper; #ifdef __cplusplus } #endif #endif /* _EnvironmentCharacter_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfDGANSSSgnElement.h0000644000175000017500000000157612576764164024055 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfDGANSSSgnElement_H_ #define _SeqOfDGANSSSgnElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct DGANSSSgnElement; /* SeqOfDGANSSSgnElement */ typedef struct SeqOfDGANSSSgnElement { A_SEQUENCE_OF(struct DGANSSSgnElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfDGANSSSgnElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfDGANSSSgnElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "DGANSSSgnElement.h" #endif /* _SeqOfDGANSSSgnElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CellIDAndLAC.h0000644000175000017500000000132212576764164022202 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _CellIDAndLAC_H_ #define _CellIDAndLAC_H_ #include /* Including external dependencies */ #include "LAC.h" #include "CellID.h" #include #ifdef __cplusplus extern "C" { #endif /* CellIDAndLAC */ typedef struct CellIDAndLAC { LAC_t referenceLAC; CellID_t referenceCI; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } CellIDAndLAC_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CellIDAndLAC; #ifdef __cplusplus } #endif #endif /* _CellIDAndLAC_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel98-AssistanceData-Extension.h0000644000175000017500000000226712576764164025716 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel98_AssistanceData_Extension_H_ #define _Rel98_AssistanceData_Extension_H_ #include /* Including external dependencies */ #include #include "GPSReferenceTimeUncertainty.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Rel98_Ext_ExpOTD; /* Rel98-AssistanceData-Extension */ typedef struct Rel98_AssistanceData_Extension { struct Rel98_Ext_ExpOTD *rel98_Ext_ExpOTD /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ NULL_t *gpsTimeAssistanceMeasurementRequest /* OPTIONAL */; GPSReferenceTimeUncertainty_t *gpsReferenceTimeUncertainty /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel98_AssistanceData_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel98_AssistanceData_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "Rel98-Ext-ExpOTD.h" #endif /* _Rel98_AssistanceData_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo.c0000644000175000017500000000443612576764164023010 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MeasureInfo.h" static asn_TYPE_member_t asn_MBR_OTD_MeasureInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_MeasureInfo, otdMsrFirstSets), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_MsrElementFirst, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otdMsrFirstSets" }, { ATF_POINTER, 1, offsetof(struct OTD_MeasureInfo, otdMsrRestSets), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfOTD_MsrElementRest, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otdMsrRestSets" }, }; static int asn_MAP_OTD_MeasureInfo_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_OTD_MeasureInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_MeasureInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* otdMsrFirstSets at 323 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* otdMsrRestSets at 327 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_MeasureInfo_specs_1 = { sizeof(struct OTD_MeasureInfo), offsetof(struct OTD_MeasureInfo, _asn_ctx), asn_MAP_OTD_MeasureInfo_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_OTD_MeasureInfo_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MeasureInfo = { "OTD-MeasureInfo", "OTD-MeasureInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MeasureInfo_tags_1, sizeof(asn_DEF_OTD_MeasureInfo_tags_1) /sizeof(asn_DEF_OTD_MeasureInfo_tags_1[0]), /* 1 */ asn_DEF_OTD_MeasureInfo_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MeasureInfo_tags_1) /sizeof(asn_DEF_OTD_MeasureInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_MeasureInfo_1, 2, /* Elements count */ &asn_SPC_OTD_MeasureInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SgnTypeElement.h0000644000175000017500000000153112576764164023050 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SgnTypeElement_H_ #define _SgnTypeElement_H_ #include /* Including external dependencies */ #include "GANSSSignalID.h" #include #include "SeqOfDGANSSSgnElement.h" #include #ifdef __cplusplus extern "C" { #endif /* SgnTypeElement */ typedef struct SgnTypeElement { GANSSSignalID_t *ganssSignalID /* OPTIONAL */; long ganssStatusHealth; SeqOfDGANSSSgnElement_t dganssSgnList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SgnTypeElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SgnTypeElement; #ifdef __cplusplus } #endif #endif /* _SgnTypeElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOWAssist.c0000644000175000017500000000317112576764164022354 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSTOWAssist.h" static asn_per_constraints_t asn_PER_type_GPSTOWAssist_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 12 } /* (SIZE(1..12)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GPSTOWAssist_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GPSTOWAssistElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_GPSTOWAssist_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_GPSTOWAssist_specs_1 = { sizeof(struct GPSTOWAssist), offsetof(struct GPSTOWAssist, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_GPSTOWAssist = { "GPSTOWAssist", "GPSTOWAssist", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSTOWAssist_tags_1, sizeof(asn_DEF_GPSTOWAssist_tags_1) /sizeof(asn_DEF_GPSTOWAssist_tags_1[0]), /* 1 */ asn_DEF_GPSTOWAssist_tags_1, /* Same as above */ sizeof(asn_DEF_GPSTOWAssist_tags_1) /sizeof(asn_DEF_GPSTOWAssist_tags_1[0]), /* 1 */ &asn_PER_type_GPSTOWAssist_constr_1, asn_MBR_GPSTOWAssist_1, 1, /* Single element */ &asn_SPC_GPSTOWAssist_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrPosition-Rsp.c0000644000175000017500000001204212576764164023167 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MsrPosition-Rsp.h" static asn_TYPE_member_t asn_MBR_MsrPosition_Rsp_1[] = { { ATF_POINTER, 9, offsetof(struct MsrPosition_Rsp, multipleSets), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MultipleSets, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "multipleSets" }, { ATF_POINTER, 8, offsetof(struct MsrPosition_Rsp, referenceIdentity), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceIdentity, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceIdentity" }, { ATF_POINTER, 7, offsetof(struct MsrPosition_Rsp, otd_MeasureInfo), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_MeasureInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otd-MeasureInfo" }, { ATF_POINTER, 6, offsetof(struct MsrPosition_Rsp, locationInfo), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_LocationInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "locationInfo" }, { ATF_POINTER, 5, offsetof(struct MsrPosition_Rsp, gps_MeasureInfo), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPS_MeasureInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gps-MeasureInfo" }, { ATF_POINTER, 4, offsetof(struct MsrPosition_Rsp, locationError), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_LocationError, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "locationError" }, { ATF_POINTER, 3, offsetof(struct MsrPosition_Rsp, extensionContainer), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExtensionContainer, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extensionContainer" }, { ATF_POINTER, 2, offsetof(struct MsrPosition_Rsp, rel_98_MsrPosition_Rsp_Extension), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel_98_MsrPosition_Rsp_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel-98-MsrPosition-Rsp-Extension" }, { ATF_POINTER, 1, offsetof(struct MsrPosition_Rsp, rel_5_MsrPosition_Rsp_Extension), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel_5_MsrPosition_Rsp_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel-5-MsrPosition-Rsp-Extension" }, }; static int asn_MAP_MsrPosition_Rsp_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; static ber_tlv_tag_t asn_DEF_MsrPosition_Rsp_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MsrPosition_Rsp_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* multipleSets at 51 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* referenceIdentity at 52 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* otd-MeasureInfo at 53 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* locationInfo at 54 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* gps-MeasureInfo at 55 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* locationError at 56 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* extensionContainer at 57 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* rel-98-MsrPosition-Rsp-Extension at 61 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* rel-5-MsrPosition-Rsp-Extension at 63 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MsrPosition_Rsp_specs_1 = { sizeof(struct MsrPosition_Rsp), offsetof(struct MsrPosition_Rsp, _asn_ctx), asn_MAP_MsrPosition_Rsp_tag2el_1, 9, /* Count of tags in the map */ asn_MAP_MsrPosition_Rsp_oms_1, /* Optional members */ 7, 2, /* Root/Additions */ 6, /* Start extensions */ 10 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MsrPosition_Rsp = { "MsrPosition-Rsp", "MsrPosition-Rsp", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MsrPosition_Rsp_tags_1, sizeof(asn_DEF_MsrPosition_Rsp_tags_1) /sizeof(asn_DEF_MsrPosition_Rsp_tags_1[0]), /* 1 */ asn_DEF_MsrPosition_Rsp_tags_1, /* Same as above */ sizeof(asn_DEF_MsrPosition_Rsp_tags_1) /sizeof(asn_DEF_MsrPosition_Rsp_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MsrPosition_Rsp_1, 9, /* Elements count */ &asn_SPC_MsrPosition_Rsp_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-7-MsrPosition-Rsp-Extension.h0000644000175000017500000000227712576764164026043 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel_7_MsrPosition_Rsp_Extension_H_ #define _Rel_7_MsrPosition_Rsp_Extension_H_ #include /* Including external dependencies */ #include "VelocityEstimate.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSLocationInfo; struct GANSSMeasureInfo; /* Rel-7-MsrPosition-Rsp-Extension */ typedef struct Rel_7_MsrPosition_Rsp_Extension { VelocityEstimate_t *velEstimate /* OPTIONAL */; struct GANSSLocationInfo *ganssLocationInfo /* OPTIONAL */; struct GANSSMeasureInfo *ganssMeasureInfo /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel_7_MsrPosition_Rsp_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel_7_MsrPosition_Rsp_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSLocationInfo.h" #include "GANSSMeasureInfo.h" #endif /* _Rel_7_MsrPosition_Rsp_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/StdResolution.c0000644000175000017500000001126312576764164022761 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "StdResolution.h" int StdResolution_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void StdResolution_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void StdResolution_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { StdResolution_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int StdResolution_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { StdResolution_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t StdResolution_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { StdResolution_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t StdResolution_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { StdResolution_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t StdResolution_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { StdResolution_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t StdResolution_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { StdResolution_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t StdResolution_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { StdResolution_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t StdResolution_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { StdResolution_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_StdResolution_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_StdResolution_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_StdResolution = { "StdResolution", "StdResolution", StdResolution_free, StdResolution_print, StdResolution_constraint, StdResolution_decode_ber, StdResolution_encode_der, StdResolution_decode_xer, StdResolution_encode_xer, StdResolution_decode_uper, StdResolution_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_StdResolution_tags_1, sizeof(asn_DEF_StdResolution_tags_1) /sizeof(asn_DEF_StdResolution_tags_1[0]), /* 1 */ asn_DEF_StdResolution_tags_1, /* Same as above */ sizeof(asn_DEF_StdResolution_tags_1) /sizeof(asn_DEF_StdResolution_tags_1[0]), /* 1 */ &asn_PER_type_StdResolution_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AssistanceData.h0000644000175000017500000000335012576764164023035 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AssistanceData_H_ #define _AssistanceData_H_ #include /* Including external dependencies */ #include "MoreAssDataToBeSent.h" #include "ExtensionContainer.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct ReferenceAssistData; struct MsrAssistData; struct SystemInfoAssistData; struct GPS_AssistData; struct Rel98_AssistanceData_Extension; struct Rel5_AssistanceData_Extension; /* AssistanceData */ typedef struct AssistanceData { struct ReferenceAssistData *referenceAssistData /* OPTIONAL */; struct MsrAssistData *msrAssistData /* OPTIONAL */; struct SystemInfoAssistData *systemInfoAssistData /* OPTIONAL */; struct GPS_AssistData *gps_AssistData /* OPTIONAL */; MoreAssDataToBeSent_t *moreAssDataToBeSent /* OPTIONAL */; ExtensionContainer_t *extensionContainer /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ struct Rel98_AssistanceData_Extension *rel98_AssistanceData_Extension /* OPTIONAL */; struct Rel5_AssistanceData_Extension *rel5_AssistanceData_Extension /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AssistanceData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AssistanceData; #ifdef __cplusplus } #endif /* Referred external types */ #include "ReferenceAssistData.h" #include "MsrAssistData.h" #include "SystemInfoAssistData.h" #include "GPS-AssistData.h" #include "Rel98-AssistanceData-Extension.h" #include "Rel5-AssistanceData-Extension.h" #endif /* _AssistanceData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/DGANSSSgnElement.h0000644000175000017500000000143412576764164023110 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _DGANSSSgnElement_H_ #define _DGANSSSgnElement_H_ #include /* Including external dependencies */ #include "SVID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* DGANSSSgnElement */ typedef struct DGANSSSgnElement { SVID_t svID; long iod; long udre; long pseudoRangeCor; long rangeRateCor; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } DGANSSSgnElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_DGANSSSgnElement; #ifdef __cplusplus } #endif #endif /* _DGANSSSgnElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/VelocityEstimate.h0000644000175000017500000000172612576764164023445 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _VelocityEstimate_H_ #define _VelocityEstimate_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* VelocityEstimate */ typedef INTEGER_t VelocityEstimate_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_VelocityEstimate; asn_struct_free_f VelocityEstimate_free; asn_struct_print_f VelocityEstimate_print; asn_constr_check_f VelocityEstimate_constraint; ber_type_decoder_f VelocityEstimate_decode_ber; der_type_encoder_f VelocityEstimate_encode_der; xer_type_decoder_f VelocityEstimate_decode_xer; xer_type_encoder_f VelocityEstimate_encode_xer; per_type_decoder_f VelocityEstimate_decode_uper; per_type_encoder_f VelocityEstimate_encode_uper; #ifdef __cplusplus } #endif #endif /* _VelocityEstimate_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_CHOICE.c0000644000175000017500000006764612576764164022505 0ustar carlescarles/* * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * See the definitions. */ static int _fetch_present_idx(const void *struct_ptr, int off, int size); static void _set_present_idx(void *sptr, int offset, int size, int pres); /* * Tags are canonically sorted in the tag to member table. */ static int _search4tag(const void *ap, const void *bp) { const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; int a_class = BER_TAG_CLASS(a->el_tag); int b_class = BER_TAG_CLASS(b->el_tag); if(a_class == b_class) { ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); if(a_value == b_value) return 0; else if(a_value < b_value) return -1; else return 1; } else if(a_class < b_class) { return -1; } else { return 1; } } /* * The decoder of the CHOICE type. */ asn_dec_rval_t CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ ssize_t tag_len; /* Length of TLV's T */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ ASN_DEBUG("Decoding %s as CHOICE", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ if(tag_mode || td->tags_count) { rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, -1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) { /* ?Substracted below! */ ctx->left += rval.consumed; } ADVANCE(rval.consumed); } else { ctx->left = -1; } NEXT_PHASE(ctx); ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", (long)ctx->left, (long)size); /* Fall through */ case 1: /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } do { asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; t2m = (asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _search4tag); if(t2m) { /* * Found the element corresponding to the tag. */ NEXT_PHASE(ctx); ctx->step = t2m->el_no; break; } else if(specs->ext_start == -1) { ASN_DEBUG("Unexpected tag %s " "in non-extensible CHOICE %s", ber_tlv_tag_string(tlv_tag), td->name); RETURN(RC_FAIL); } else { /* Skip this tag */ ssize_t skip; ASN_DEBUG("Skipping unknown tag %s", ber_tlv_tag_string(tlv_tag)); skip = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tag_len, LEFT - tag_len); switch(skip) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(skip + tag_len); RETURN(RC_OK); } } while(0); case 2: /* * PHASE 2. * Read in the element. */ do { asn_TYPE_member_t *elm;/* CHOICE's element */ void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &elements[ctx->step]; /* * Compute the position of the member inside a structure, * and also a type of containment (it may be contained * as pointer or using inline inclusion). */ if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { /* * A pointer to a pointer * holding the start of the structure */ memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Set presence to be able to free it properly at any time */ _set_present_idx(st, specs->pres_offset, specs->pres_size, ctx->step + 1); /* * Invoke the member fetch routine according to member's type */ rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, memb_ptr2, ptr, LEFT, elm->tag_mode); switch(rval.code) { case RC_OK: break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } RETURN(RC_FAIL); case RC_FAIL: /* Fatal error */ RETURN(rval.code); } /* switch(rval) */ ADVANCE(rval.consumed); } while(0); NEXT_PHASE(ctx); /* Fall through */ case 3: ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", td->name, (long)ctx->left, (long)size, tag_mode, td->tags_count); if(ctx->left > 0) { /* * The type must be fully decoded * by the CHOICE member-specific decoder. */ RETURN(RC_FAIL); } if(ctx->left == -1 && !(tag_mode || td->tags_count)) { /* * This is an untagged CHOICE. * It doesn't contain nothing * except for the member itself, including all its tags. * The decoding is completed. */ NEXT_PHASE(ctx); break; } /* * Read in the "end of data chunks"'s. */ while(ctx->left < 0) { ssize_t tl; tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tl) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } /* * Expected <0><0>... */ if(((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Correctly finished with <0><0>. */ ADVANCE(2); ctx->left++; continue; } } else { ASN_DEBUG("Unexpected continuation in %s", td->name); RETURN(RC_FAIL); } /* UNREACHABLE */ } NEXT_PHASE(ctx); case 4: /* No meaningful work here */ break; } RETURN(RC_OK); } asn_enc_rval_t CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elm; /* CHOICE element */ asn_enc_rval_t erval; void *memb_ptr; size_t computed_size = 0; int present; if(!sptr) _ASN_ENCODE_FAILED; ASN_DEBUG("%s %s as CHOICE", cb?"Encoding":"Estimating", td->name); present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); /* * If the structure was not initialized, it cannot be encoded: * can't deduce what to encode in the choice type. */ if(present <= 0 || present > td->elements_count) { if(present == 0 && td->elements_count == 0) { /* The CHOICE is empty?! */ erval.encoded = 0; _ASN_ENCODED_OK(erval); } _ASN_ENCODE_FAILED; } /* * Seek over the present member of the structure. */ elm = &td->elements[present-1]; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(memb_ptr == 0) { if(elm->optional) { erval.encoded = 0; _ASN_ENCODED_OK(erval); } /* Mandatory element absent */ _ASN_ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } /* * If the CHOICE itself is tagged EXPLICIT: * T ::= [2] EXPLICIT CHOICE { ... } * Then emit the appropriate tags. */ if(tag_mode == 1 || td->tags_count) { /* * For this, we need to pre-compute the member. */ ssize_t ret; /* Encode member with its tag */ erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, 0, 0); if(erval.encoded == -1) return erval; /* Encode CHOICE with parent or my own tag */ ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, cb, app_key); if(ret == -1) _ASN_ENCODE_FAILED; computed_size += ret; } /* * Encode the single underlying member. */ erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, cb, app_key); if(erval.encoded == -1) return erval; ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", (long)erval.encoded, (long)computed_size); erval.encoded += computed_size; return erval; } ber_tlv_tag_t CHOICE_outmost_tag(asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; assert(tag_mode == 0); (void)tag_mode; assert(tag == 0); (void)tag; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); if(present > 0 || present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *) ((const char *)ptr + elm->memb_offset); } else { memb_ptr = (const void *) ((const char *)ptr + elm->memb_offset); } return asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); } else { return (ber_tlv_tag_t)-1; } } int CHOICE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) return 0; _ASN_CTFAIL(app_key, td, sptr, "%s: mandatory CHOICE element %s absent (%s:%d)", td->name, elm->name, __FILE__, __LINE__); return -1; } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } if(elm->memb_constraints) { return elm->memb_constraints(elm->type, memb_ptr, ctfailcb, app_key); } else { int ret = elm->type->check_constraints(elm->type, memb_ptr, ctfailcb, app_key); /* * Cannot inherit it eralier: * need to make sure we get the updated version. */ elm->memb_constraints = elm->type->check_constraints; return ret; } } else { _ASN_CTFAIL(app_key, td, sptr, "%s: no CHOICE element given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t CHOICE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value of a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* Element index */ /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); if(ctx->phase == 0 && !*xml_tag) ctx->phase = 1; /* Skip the outer tag checking phase */ /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. * Phase 3: Only waiting for closing tag. * Phase 4: Skipping unknown extensions. * Phase 5: PHASED OUT */ for(edx = ctx->step; ctx->phase <= 4;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ asn_TYPE_member_t *elm; /* * Go inside the member. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &td->elements[edx]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Start/Continue decoding the inner member */ tmprval = elm->type->xer_decoder(opt_codec_ctx, elm->type, memb_ptr2, elm->name, buf_ptr, size); XER_ADVANCE(tmprval.consumed); ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", elm->type->name, tmprval.code); if(tmprval.code != RC_OK) RETURN(tmprval.code); assert(_fetch_present_idx(st, specs->pres_offset, specs->pres_size) == 0); /* Record what we've got */ _set_present_idx(st, specs->pres_offset, specs->pres_size, edx + 1); ctx->phase = 3; /* Fall through */ } /* No need to wait for closing tag; special mode. */ if(ctx->phase == 3 && !*xml_tag) { ctx->phase = 5; /* Phase out */ RETURN(RC_OK); } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', xml_tag, tcv); /* Skip the extensions section */ if(ctx->phase == 4) { ASN_DEBUG("skip_unknown(%d, %ld)", tcv, (long)ctx->left); switch(xer_skip_unknown(tcv, &ctx->left)) { case -1: ctx->phase = 5; RETURN(RC_FAIL); continue; case 1: ctx->phase = 3; /* Fall through */ case 0: XER_ADVANCE(ch_size); continue; case 2: ctx->phase = 3; break; } } switch(tcv) { case XCT_BOTH: break; /* No CHOICE? */ case XCT_CLOSING: if(ctx->phase != 3) break; XER_ADVANCE(ch_size); ctx->phase = 5; /* Phase out */ RETURN(RC_OK); case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: if(ctx->phase != 1) break; /* Really unexpected */ /* * Search which inner member corresponds to this tag. */ for(edx = 0; edx < td->elements_count; edx++) { elm = &td->elements[edx]; tcv = xer_check_tag(buf_ptr,ch_size,elm->name); switch(tcv) { case XCT_BOTH: case XCT_OPENING: /* * Process this member. */ ctx->step = edx; ctx->phase = 2; break; case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: continue; default: edx = td->elements_count; break; /* Phase out */ } break; } if(edx != td->elements_count) continue; /* It is expected extension */ if(specs->ext_start != -1) { ASN_DEBUG("Got anticipated extension"); /* * Check for (XCT_BOTH or XCT_UNKNOWN_BO) * By using a mask. Only record a pure * tags. */ if(tcv & XCT_CLOSING) { /* Found without body */ ctx->phase = 3; /* Terminating */ } else { ctx->left = 1; ctx->phase = 4; /* Skip ...'s */ } XER_ADVANCE(ch_size); continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" " (ph=%d, tag=%s)", ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', td->name, ctx->phase, xml_tag); break; } ctx->phase = 5; /* Phase out, just in case */ RETURN(RC_FAIL); } asn_enc_rval_t CHOICE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs=(asn_CHOICE_specifics_t *)td->specifics; asn_enc_rval_t er; int present; if(!sptr) _ASN_ENCODE_FAILED; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); if(present <= 0 || present > td->elements_count) { _ASN_ENCODE_FAILED; } else { asn_enc_rval_t tmper; asn_TYPE_member_t *elm = &td->elements[present-1]; void *memb_ptr; const char *mname = elm->name; unsigned int mlen = strlen(mname); if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) _ASN_ENCODE_FAILED; } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } er.encoded = 0; if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; _ASN_CALLBACK3("", 1); er.encoded += 5 + (2 * mlen) + tmper.encoded; } if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } asn_dec_rval_t CHOICE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_dec_rval_t rv; asn_per_constraint_t *ct; asn_TYPE_member_t *elm; /* CHOICE's element */ void *memb_ptr; void **memb_ptr2; void *st = *sptr; int value; if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) _ASN_DECODE_FAILED; /* * Create the target structure if it is not present already. */ if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) _ASN_DECODE_FAILED; } if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ct = 0; if(ct && ct->flags & APC_EXTENSIBLE) { value = per_get_few_bits(pd, 1); if(value < 0) _ASN_DECODE_STARVED; if(value) ct = 0; /* Not restricted */ } if(ct && ct->range_bits >= 0) { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) _ASN_DECODE_STARVED; ASN_DEBUG("CHOICE %s got index %d in range %d", td->name, value, ct->range_bits); if(value > ct->upper_bound) _ASN_DECODE_FAILED; } else { if(specs->ext_start == -1) _ASN_DECODE_FAILED; value = uper_get_nsnnwn(pd); if(value < 0) _ASN_DECODE_STARVED; value += specs->ext_start; if(value >= td->elements_count) _ASN_DECODE_FAILED; } /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) value = specs->canonical_order[value]; /* Set presence to be able to free it later */ _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); elm = &td->elements[value]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); if(ct && ct->range_bits >= 0) { rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); } else { rv = uper_open_type_get(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); } if(rv.code != RC_OK) ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", elm->name, td->name, rv.code); return rv; } asn_enc_rval_t CHOICE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elm; /* CHOICE's element */ asn_per_constraint_t *ct; void *memb_ptr; int present; if(!sptr) _ASN_ENCODE_FAILED; ASN_DEBUG("Encoding %s as CHOICE", td->name); if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ct = 0; present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); /* * If the structure was not initialized properly, it cannot be encoded: * can't deduce what to encode in the choice type. */ if(present <= 0 || present > td->elements_count) _ASN_ENCODE_FAILED; else present--; /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) present = specs->canonical_order[present]; ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); if(ct && ct->range_bits >= 0) { if(present < ct->lower_bound || present > ct->upper_bound) { if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, 1, 1)) _ASN_ENCODE_FAILED; } else { _ASN_ENCODE_FAILED; } ct = 0; } } if(ct && ct->flags & APC_EXTENSIBLE) if(per_put_few_bits(po, 0, 1)) _ASN_ENCODE_FAILED; elm = &td->elements[present]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) _ASN_ENCODE_FAILED; } else { memb_ptr = (char *)sptr + elm->memb_offset; } if(ct && ct->range_bits >= 0) { if(per_put_few_bits(po, present, ct->range_bits)) _ASN_ENCODE_FAILED; return elm->type->uper_encoder(elm->type, elm->per_constraints, memb_ptr, po); } else { asn_enc_rval_t rval; if(specs->ext_start == -1) _ASN_ENCODE_FAILED; if(uper_put_nsnnwn(po, present - specs->ext_start)) _ASN_ENCODE_FAILED; if(uper_open_type_put(elm->type, elm->per_constraints, memb_ptr, po)) _ASN_ENCODE_FAILED; rval.encoded = 0; _ASN_ENCODED_OK(rval); } } int CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); /* * Print that element. */ if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } /* Print member's name and stuff */ if(0) { if(cb(elm->name, strlen(elm->name), app_key) < 0 || cb(": ", 2, app_key) < 0) return -1; } return elm->type->print_struct(elm->type, memb_ptr, ilevel, cb, app_key); } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void CHOICE_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!td || !ptr) return; ASN_DEBUG("Freeing %s as CHOICE", td->name); /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); /* * Free that element. */ if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)ptr + elm->memb_offset); if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } else { memb_ptr = (void *)((char *)ptr + elm->memb_offset); ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); } } if(!contents_only) { FREEMEM(ptr); } } /* * The following functions functions offer protection against -fshort-enums, * compatible with little- and big-endian machines. * If assertion is triggered, either disable -fshort-enums, or add an entry * here with the ->pres_size of your target stracture. * Unless the target structure is packed, the ".present" member * is guaranteed to be aligned properly. ASN.1 compiler itself does not * produce packed code. */ static int _fetch_present_idx(const void *struct_ptr, int pres_offset, int pres_size) { const void *present_ptr; int present; present_ptr = ((const char *)struct_ptr) + pres_offset; switch(pres_size) { case sizeof(int): present = *(const int *)present_ptr; break; case sizeof(short): present = *(const short *)present_ptr; break; case sizeof(char): present = *(const char *)present_ptr; break; default: /* ANSI C mandates enum to be equivalent to integer */ assert(pres_size != sizeof(int)); return 0; /* If not aborted, pass back safe value */ } return present; } static void _set_present_idx(void *struct_ptr, int pres_offset, int pres_size, int present) { void *present_ptr; present_ptr = ((char *)struct_ptr) + pres_offset; switch(pres_size) { case sizeof(int): *(int *)present_ptr = present; break; case sizeof(short): *(short *)present_ptr = present; break; case sizeof(char): *(char *)present_ptr = present; break; default: /* ANSI C mandates enum to be equivalent to integer */ assert(pres_size != sizeof(int)); } } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeRelation.c0000644000175000017500000000421712576764164022540 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TimeRelation.h" static asn_TYPE_member_t asn_MBR_TimeRelation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct TimeRelation, gpsTOW), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSTOW23b, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTOW" }, { ATF_POINTER, 1, offsetof(struct TimeRelation, gsmTime), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GSMTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gsmTime" }, }; static int asn_MAP_TimeRelation_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_TimeRelation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_TimeRelation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gpsTOW at 828 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gsmTime at 829 */ }; static asn_SEQUENCE_specifics_t asn_SPC_TimeRelation_specs_1 = { sizeof(struct TimeRelation), offsetof(struct TimeRelation, _asn_ctx), asn_MAP_TimeRelation_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_TimeRelation_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_TimeRelation = { "TimeRelation", "TimeRelation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TimeRelation_tags_1, sizeof(asn_DEF_TimeRelation_tags_1) /sizeof(asn_DEF_TimeRelation_tags_1[0]), /* 1 */ asn_DEF_TimeRelation_tags_1, /* Same as above */ sizeof(asn_DEF_TimeRelation_tags_1) /sizeof(asn_DEF_TimeRelation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_TimeRelation_1, 2, /* Elements count */ &asn_SPC_TimeRelation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOf-GANSSDataBits.h0000644000175000017500000000141712576764164023452 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOf_GANSSDataBits_H_ #define _SeqOf_GANSSDataBits_H_ #include /* Including external dependencies */ #include "GANSSDataBit.h" #include #include #ifdef __cplusplus extern "C" { #endif /* SeqOf-GANSSDataBits */ typedef struct SeqOf_GANSSDataBits { A_SEQUENCE_OF(GANSSDataBit_t) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOf_GANSSDataBits_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOf_GANSSDataBits; #ifdef __cplusplus } #endif #endif /* _SeqOf_GANSSDataBits_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfReferenceIdentityType.c0000644000175000017500000000356612576764164025362 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfReferenceIdentityType.h" static asn_per_constraints_t asn_PER_type_SeqOfReferenceIdentityType_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfReferenceIdentityType_1[] = { { ATF_POINTER, 0, 0, -1 /* Ambiguous tag (CHOICE?) */, 0, &asn_DEF_ReferenceIdentityType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfReferenceIdentityType_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfReferenceIdentityType_specs_1 = { sizeof(struct SeqOfReferenceIdentityType), offsetof(struct SeqOfReferenceIdentityType, _asn_ctx), 2, /* XER encoding is XMLValueList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfReferenceIdentityType = { "SeqOfReferenceIdentityType", "SeqOfReferenceIdentityType", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfReferenceIdentityType_tags_1, sizeof(asn_DEF_SeqOfReferenceIdentityType_tags_1) /sizeof(asn_DEF_SeqOfReferenceIdentityType_tags_1[0]), /* 1 */ asn_DEF_SeqOfReferenceIdentityType_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfReferenceIdentityType_tags_1) /sizeof(asn_DEF_SeqOfReferenceIdentityType_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfReferenceIdentityType_constr_1, asn_MBR_SeqOfReferenceIdentityType_1, 1, /* Single element */ &asn_SPC_SeqOfReferenceIdentityType_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrSetElement.h0000644000175000017500000000152012576764164023321 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPS_MsrSetElement_H_ #define _GPS_MsrSetElement_H_ #include /* Including external dependencies */ #include #include "GPSTOW24b.h" #include "SeqOfGPS-MsrElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GPS-MsrSetElement */ typedef struct GPS_MsrSetElement { long *refFrame /* OPTIONAL */; GPSTOW24b_t gpsTOW; SeqOfGPS_MsrElement_t gps_msrList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPS_MsrSetElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPS_MsrSetElement; #ifdef __cplusplus } #endif #endif /* _GPS_MsrSetElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_encoder.h0000644000175000017500000000417712576764164022443 0ustar carlescarles/*- * Copyright (c) 2006, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_ENCODER_H_ #define _PER_ENCODER_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. * WARNING: This function returns the number of encoded bits in the .encoded * field of the return value. Use the following formula to convert to bytes: * bytes = ((.encoded + 7) / 8) */ asn_enc_rval_t uper_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ void *app_key /* Arbitrary callback argument */ ); /* * A variant of uper_encode() which encodes data into the existing buffer * WARNING: This function returns the number of encoded bits in the .encoded * field of the return value. */ asn_enc_rval_t uper_encode_to_buffer( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ void *buffer, /* Pre-allocated buffer */ size_t buffer_size /* Initial buffer size (max) */ ); /* * A variant of uper_encode_to_buffer() which allocates buffer itself. * Returns the number of bytes in the buffer or -1 in case of failure. * WARNING: This function produces a "Production of the complete encoding", * with length of at least one octet. Contrast this to precise bit-packing * encoding of uper_encode() and uper_encode_to_buffer(). */ ssize_t uper_encode_to_new_buffer( struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void *struct_ptr, /* Structure to be encoded */ void **buffer_r /* Buffer allocated and returned */ ); /* * Type of the generic PER encoder function. */ typedef asn_enc_rval_t (per_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void *struct_ptr, asn_per_outp_t *per_output ); #ifdef __cplusplus } #endif #endif /* _PER_ENCODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EOTDQuality.h0000644000175000017500000000127712576764164022260 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _EOTDQuality_H_ #define _EOTDQuality_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* EOTDQuality */ typedef struct EOTDQuality { long nbrOfMeasurements; long stdOfEOTD; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } EOTDQuality_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_EOTDQuality; #ifdef __cplusplus } #endif #endif /* _EOTDQuality_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelativeAlt.h0000644000175000017500000000161412576764164022363 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RelativeAlt_H_ #define _RelativeAlt_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* RelativeAlt */ typedef long RelativeAlt_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RelativeAlt; asn_struct_free_f RelativeAlt_free; asn_struct_print_f RelativeAlt_print; asn_constr_check_f RelativeAlt_constraint; ber_type_decoder_f RelativeAlt_decode_ber; der_type_encoder_f RelativeAlt_encode_der; xer_type_decoder_f RelativeAlt_decode_xer; xer_type_encoder_f RelativeAlt_encode_xer; per_type_decoder_f RelativeAlt_decode_uper; per_type_encoder_f RelativeAlt_encode_uper; #ifdef __cplusplus } #endif #endif /* _RelativeAlt_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRealTimeIntegrity.c0000644000175000017500000000373012576764164024340 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSRealTimeIntegrity.h" static asn_TYPE_member_t asn_MBR_GANSSRealTimeIntegrity_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSRealTimeIntegrity, ganssBadSignalList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfBadSignalElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssBadSignalList" }, }; static ber_tlv_tag_t asn_DEF_GANSSRealTimeIntegrity_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSRealTimeIntegrity_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ganssBadSignalList at 1295 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSRealTimeIntegrity_specs_1 = { sizeof(struct GANSSRealTimeIntegrity), offsetof(struct GANSSRealTimeIntegrity, _asn_ctx), asn_MAP_GANSSRealTimeIntegrity_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSRealTimeIntegrity = { "GANSSRealTimeIntegrity", "GANSSRealTimeIntegrity", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSRealTimeIntegrity_tags_1, sizeof(asn_DEF_GANSSRealTimeIntegrity_tags_1) /sizeof(asn_DEF_GANSSRealTimeIntegrity_tags_1[0]), /* 1 */ asn_DEF_GANSSRealTimeIntegrity_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSRealTimeIntegrity_tags_1) /sizeof(asn_DEF_GANSSRealTimeIntegrity_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSRealTimeIntegrity_1, 1, /* Elements count */ &asn_SPC_GANSSRealTimeIntegrity_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AntiSpoofFlag.c0000644000175000017500000001126312576764164022637 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AntiSpoofFlag.h" int AntiSpoofFlag_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void AntiSpoofFlag_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void AntiSpoofFlag_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int AntiSpoofFlag_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t AntiSpoofFlag_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t AntiSpoofFlag_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t AntiSpoofFlag_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t AntiSpoofFlag_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t AntiSpoofFlag_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t AntiSpoofFlag_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { AntiSpoofFlag_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_AntiSpoofFlag_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_AntiSpoofFlag_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_AntiSpoofFlag = { "AntiSpoofFlag", "AntiSpoofFlag", AntiSpoofFlag_free, AntiSpoofFlag_print, AntiSpoofFlag_constraint, AntiSpoofFlag_decode_ber, AntiSpoofFlag_encode_der, AntiSpoofFlag_decode_xer, AntiSpoofFlag_encode_xer, AntiSpoofFlag_decode_uper, AntiSpoofFlag_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AntiSpoofFlag_tags_1, sizeof(asn_DEF_AntiSpoofFlag_tags_1) /sizeof(asn_DEF_AntiSpoofFlag_tags_1[0]), /* 1 */ asn_DEF_AntiSpoofFlag_tags_1, /* Same as above */ sizeof(asn_DEF_AntiSpoofFlag_tags_1) /sizeof(asn_DEF_AntiSpoofFlag_tags_1[0]), /* 1 */ &asn_PER_type_AntiSpoofFlag_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_SEQUENCE_OF.c0000644000175000017500000001240512576764164023326 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * The DER encoder of the SEQUENCE OF type. */ asn_enc_rval_t SEQUENCE_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(ptr); size_t computed_size = 0; ssize_t encoding_size = 0; asn_enc_rval_t erval; int edx; ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = elm->type->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; } /* * Encode the TLV for the sequence itself. */ encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); if(encoding_size == -1) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } computed_size += encoding_size; if(!cb) { erval.encoded = computed_size; _ASN_ENCODED_OK(erval); } ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); /* * Encode all members. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = elm->type->der_encoder(elm->type, memb_ptr, 0, elm->tag, cb, app_key); if(erval.encoded == -1) return erval; encoding_size += erval.encoded; } if(computed_size != (size_t)encoding_size) { /* * Encoded size is not equal to the computed size. */ erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; } else { erval.encoded = computed_size; erval.structure_ptr = 0; erval.failed_type = 0; } return erval; } asn_enc_rval_t SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr); const char *mname = specs->as_XMLValueList ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); unsigned int mlen = mname ? strlen(mname) : 0; int xcan = (flags & XER_F_CANONICAL); int i; if(!sptr) _ASN_ENCODE_FAILED; er.encoded = 0; for(i = 0; i < list->count; i++) { asn_enc_rval_t tmper; void *memb_ptr = list->array[i]; if(!memb_ptr) continue; if(mname) { if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); } tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; if(tmper.encoded == 0 && specs->as_XMLValueList) { const char *name = elm->type->xml_tag; size_t len = strlen(name); if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel + 1); _ASN_CALLBACK3("<", 1, name, len, "/>", 2); } if(mname) { _ASN_CALLBACK3("", 1); er.encoded += 5; } er.encoded += (2 * mlen) + tmper.encoded; } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } asn_enc_rval_t SEQUENCE_OF_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_anonymous_sequence_ *list; asn_per_constraint_t *ct; asn_enc_rval_t er; asn_TYPE_member_t *elm = td->elements; int seq; if(!sptr) _ASN_ENCODE_FAILED; list = _A_SEQUENCE_FROM_VOID(sptr); er.encoded = 0; ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); if(constraints) ct = &constraints->size; else if(td->per_constraints) ct = &td->per_constraints->size; else ct = 0; /* If extensible constraint, check if size is in root */ if(ct) { int not_in_root = (list->count < ct->lower_bound || list->count > ct->upper_bound); ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); if(ct->flags & APC_EXTENSIBLE) { /* Declare whether size is in extension root */ if(per_put_few_bits(po, not_in_root, 1)) _ASN_ENCODE_FAILED; if(not_in_root) ct = 0; } else if(not_in_root && ct->effective_bits >= 0) _ASN_ENCODE_FAILED; } if(ct && ct->effective_bits >= 0) { /* X.691, #19.5: No length determinant */ if(per_put_few_bits(po, list->count - ct->lower_bound, ct->effective_bits)) _ASN_ENCODE_FAILED; } for(seq = -1; seq < list->count;) { ssize_t mayEncode; if(seq < 0) seq = 0; if(ct && ct->effective_bits >= 0) { mayEncode = list->count; } else { mayEncode = uper_put_length(po, list->count - seq); if(mayEncode < 0) _ASN_ENCODE_FAILED; } while(mayEncode--) { void *memb_ptr = list->array[seq++]; if(!memb_ptr) _ASN_ENCODE_FAILED; er = elm->type->uper_encoder(elm->type, elm->per_constraints, memb_ptr, po); if(er.encoded == -1) _ASN_ENCODE_FAILED; } } _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOWAssistElement.h0000644000175000017500000000166212576764164023676 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSTOWAssistElement_H_ #define _GPSTOWAssistElement_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include "TLMWord.h" #include "AntiSpoofFlag.h" #include "AlertFlag.h" #include "TLMReservedBits.h" #include #ifdef __cplusplus extern "C" { #endif /* GPSTOWAssistElement */ typedef struct GPSTOWAssistElement { SatelliteID_t satelliteID; TLMWord_t tlmWord; AntiSpoofFlag_t antiSpoof; AlertFlag_t alert; TLMReservedBits_t tlmRsvdBits; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPSTOWAssistElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSTOWAssistElement; #ifdef __cplusplus } #endif #endif /* _GPSTOWAssistElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AcquisAssist.h0000644000175000017500000000137312576764164022565 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AcquisAssist_H_ #define _AcquisAssist_H_ #include /* Including external dependencies */ #include "TimeRelation.h" #include "SeqOfAcquisElement.h" #include #ifdef __cplusplus extern "C" { #endif /* AcquisAssist */ typedef struct AcquisAssist { TimeRelation_t timeRelation; SeqOfAcquisElement_t acquisList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AcquisAssist_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AcquisAssist; #ifdef __cplusplus } #endif #endif /* _AcquisAssist_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo-R98-Ext.c0000644000175000017500000000400012576764164024111 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MeasureInfo-R98-Ext.h" static asn_TYPE_member_t asn_MBR_OTD_MeasureInfo_R98_Ext_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_MeasureInfo_R98_Ext, otdMsrFirstSets_R98_Ext), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_MsrElementFirst_R98_Ext, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otdMsrFirstSets-R98-Ext" }, }; static ber_tlv_tag_t asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_MeasureInfo_R98_Ext_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* otdMsrFirstSets-R98-Ext at 974 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_MeasureInfo_R98_Ext_specs_1 = { sizeof(struct OTD_MeasureInfo_R98_Ext), offsetof(struct OTD_MeasureInfo_R98_Ext, _asn_ctx), asn_MAP_OTD_MeasureInfo_R98_Ext_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MeasureInfo_R98_Ext = { "OTD-MeasureInfo-R98-Ext", "OTD-MeasureInfo-R98-Ext", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1, sizeof(asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1) /sizeof(asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1[0]), /* 1 */ asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1) /sizeof(asn_DEF_OTD_MeasureInfo_R98_Ext_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_MeasureInfo_R98_Ext_1, 1, /* Elements count */ &asn_SPC_OTD_MeasureInfo_R98_Ext_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefMeasurementAssist.h0000644000175000017500000000160212576764164025051 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSRefMeasurementAssist_H_ #define _GANSSRefMeasurementAssist_H_ #include /* Including external dependencies */ #include #include "SeqOfGANSSRefMeasurementElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSRefMeasurementAssist */ typedef struct GANSSRefMeasurementAssist { long *ganssSignalID /* OPTIONAL */; SeqOfGANSSRefMeasurementElement_t ganssRefMeasAssitList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSRefMeasurementAssist_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSRefMeasurementAssist; #ifdef __cplusplus } #endif #endif /* _GANSSRefMeasurementAssist_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_encoder.c0000644000175000017500000000715612576764164022436 0ustar carlescarles#include #include #include static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key); asn_enc_rval_t uper_encode(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { return uper_encode_internal(td, 0, sptr, cb, app_key); } /* * Argument type and callback necessary for uper_encode_to_buffer(). */ typedef struct enc_to_buf_arg { void *buffer; size_t left; } enc_to_buf_arg; static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { enc_to_buf_arg *arg = (enc_to_buf_arg *)key; if(arg->left < size) return -1; /* Data exceeds the available buffer size */ memcpy(arg->buffer, buffer, size); arg->buffer = ((char *)arg->buffer) + size; arg->left -= size; return 0; } asn_enc_rval_t uper_encode_to_buffer(asn_TYPE_descriptor_t *td, void *sptr, void *buffer, size_t buffer_size) { enc_to_buf_arg key; key.buffer = buffer; key.left = buffer_size; if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); return uper_encode_internal(td, 0, sptr, encode_to_buffer_cb, &key); } typedef struct enc_dyn_arg { void *buffer; size_t length; size_t allocated; } enc_dyn_arg; static int encode_dyn_cb(const void *buffer, size_t size, void *key) { enc_dyn_arg *arg = key; if(arg->length + size >= arg->allocated) { void *p; arg->allocated = arg->allocated ? (arg->allocated << 2) : size; p = REALLOC(arg->buffer, arg->allocated); if(!p) { FREEMEM(arg->buffer); memset(arg, 0, sizeof(*arg)); return -1; } arg->buffer = p; } memcpy(((char *)arg->buffer) + arg->length, buffer, size); arg->length += size; return 0; } ssize_t uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, void **buffer_r) { asn_enc_rval_t er; enc_dyn_arg key; memset(&key, 0, sizeof(key)); er = uper_encode_internal(td, constraints, sptr, encode_dyn_cb, &key); switch(er.encoded) { case -1: FREEMEM(key.buffer); return -1; case 0: FREEMEM(key.buffer); key.buffer = MALLOC(1); if(key.buffer) { *(char *)key.buffer = '\0'; *buffer_r = key.buffer; return 1; } else { return -1; } default: *buffer_r = key.buffer; ASN_DEBUG("Complete encoded in %d bits", er.encoded); return ((er.encoded + 7) >> 3); } } /* * Internally useful functions. */ /* Flush partially filled buffer */ static int _uper_encode_flush_outp(asn_per_outp_t *po) { uint8_t *buf; if(po->nboff == 0 && po->buffer == po->tmpspace) return 0; buf = po->buffer + (po->nboff >> 3); /* Make sure we account for the last, partially filled */ if(po->nboff & 0x07) { buf[0] &= 0xff << (8 - (po->nboff & 0x07)); buf++; } return po->outper(po->tmpspace, buf - po->tmpspace, po->op_key); } static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { asn_per_outp_t po; asn_enc_rval_t er; /* * Invoke type-specific encoder. */ if(!td || !td->uper_encoder) _ASN_ENCODE_FAILED; /* PER is not compiled in */ po.buffer = po.tmpspace; po.nboff = 0; po.nbits = 8 * sizeof(po.tmpspace); po.outper = cb; po.op_key = app_key; po.flushed_bytes = 0; er = td->uper_encoder(td, constraints, sptr, &po); if(er.encoded != -1) { size_t bits_to_flush; bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; /* Set number of bits encoded to a firm value */ er.encoded = (po.flushed_bytes << 3) + bits_to_flush; if(_uper_encode_flush_outp(&po)) _ASN_ENCODE_FAILED; } return er; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAlmanacModel.h0000644000175000017500000000161112576764164023255 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSAlmanacModel_H_ #define _GANSSAlmanacModel_H_ #include /* Including external dependencies */ #include #include "SVIDMASK.h" #include "SeqOfGANSSAlmanacElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSAlmanacModel */ typedef struct GANSSAlmanacModel { long weekNumber; SVIDMASK_t svIDMask; long *toa /* OPTIONAL */; long *ioda /* OPTIONAL */; SeqOfGANSSAlmanacElement_t ganssAlmanacList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSAlmanacModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSAlmanacModel; #ifdef __cplusplus } #endif #endif /* _GANSSAlmanacModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpectedOTD.h0000644000175000017500000000161412576764164022257 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ExpectedOTD_H_ #define _ExpectedOTD_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* ExpectedOTD */ typedef long ExpectedOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ExpectedOTD; asn_struct_free_f ExpectedOTD_free; asn_struct_print_f ExpectedOTD_print; asn_constr_check_f ExpectedOTD_constraint; ber_type_decoder_f ExpectedOTD_decode_ber; der_type_encoder_f ExpectedOTD_encode_der; xer_type_decoder_f ExpectedOTD_decode_xer; xer_type_encoder_f ExpectedOTD_encode_xer; per_type_decoder_f ExpectedOTD_decode_uper; per_type_encoder_f ExpectedOTD_encode_uper; #ifdef __cplusplus } #endif #endif /* _ExpectedOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/VelocityEstimate.c0000644000175000017500000001046412576764164023437 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "VelocityEstimate.h" int VelocityEstimate_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_INTEGER.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using INTEGER, * so here we adjust the DEF accordingly. */ static void VelocityEstimate_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_INTEGER.free_struct; td->print_struct = asn_DEF_INTEGER.print_struct; td->ber_decoder = asn_DEF_INTEGER.ber_decoder; td->der_encoder = asn_DEF_INTEGER.der_encoder; td->xer_decoder = asn_DEF_INTEGER.xer_decoder; td->xer_encoder = asn_DEF_INTEGER.xer_encoder; td->uper_decoder = asn_DEF_INTEGER.uper_decoder; td->uper_encoder = asn_DEF_INTEGER.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_INTEGER.per_constraints; td->elements = asn_DEF_INTEGER.elements; td->elements_count = asn_DEF_INTEGER.elements_count; td->specifics = asn_DEF_INTEGER.specifics; } void VelocityEstimate_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { VelocityEstimate_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int VelocityEstimate_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t VelocityEstimate_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t VelocityEstimate_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t VelocityEstimate_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t VelocityEstimate_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t VelocityEstimate_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t VelocityEstimate_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { VelocityEstimate_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static ber_tlv_tag_t asn_DEF_VelocityEstimate_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_VelocityEstimate = { "VelocityEstimate", "VelocityEstimate", VelocityEstimate_free, VelocityEstimate_print, VelocityEstimate_constraint, VelocityEstimate_decode_ber, VelocityEstimate_encode_der, VelocityEstimate_decode_xer, VelocityEstimate_encode_xer, VelocityEstimate_decode_uper, VelocityEstimate_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_VelocityEstimate_tags_1, sizeof(asn_DEF_VelocityEstimate_tags_1) /sizeof(asn_DEF_VelocityEstimate_tags_1[0]), /* 1 */ asn_DEF_VelocityEstimate_tags_1, /* Same as above */ sizeof(asn_DEF_VelocityEstimate_tags_1) /sizeof(asn_DEF_VelocityEstimate_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AccuracyOpt.h0000644000175000017500000000126412576764164022365 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AccuracyOpt_H_ #define _AccuracyOpt_H_ #include /* Including external dependencies */ #include "Accuracy.h" #include #ifdef __cplusplus extern "C" { #endif /* AccuracyOpt */ typedef struct AccuracyOpt { Accuracy_t *accuracy /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AccuracyOpt_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AccuracyOpt; #ifdef __cplusplus } #endif #endif /* _AccuracyOpt_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FrameNumber.c0000644000175000017500000001116612576764164022350 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "FrameNumber.h" int FrameNumber_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 2097151)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void FrameNumber_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void FrameNumber_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { FrameNumber_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int FrameNumber_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t FrameNumber_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t FrameNumber_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t FrameNumber_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t FrameNumber_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t FrameNumber_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t FrameNumber_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { FrameNumber_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_FrameNumber_constr_1 = { { APC_CONSTRAINED, 21, -1, 0, 2097151 } /* (0..2097151) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_FrameNumber_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_FrameNumber = { "FrameNumber", "FrameNumber", FrameNumber_free, FrameNumber_print, FrameNumber_constraint, FrameNumber_decode_ber, FrameNumber_encode_der, FrameNumber_decode_xer, FrameNumber_encode_xer, FrameNumber_decode_uper, FrameNumber_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FrameNumber_tags_1, sizeof(asn_DEF_FrameNumber_tags_1) /sizeof(asn_DEF_FrameNumber_tags_1[0]), /* 1 */ asn_DEF_FrameNumber_tags_1, /* Same as above */ sizeof(asn_DEF_FrameNumber_tags_1) /sizeof(asn_DEF_FrameNumber_tags_1[0]), /* 1 */ &asn_PER_type_FrameNumber_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MoreAssDataToBeSent.c0000644000175000017500000001255312576764164023715 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MoreAssDataToBeSent.h" int MoreAssDataToBeSent_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void MoreAssDataToBeSent_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void MoreAssDataToBeSent_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int MoreAssDataToBeSent_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t MoreAssDataToBeSent_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t MoreAssDataToBeSent_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t MoreAssDataToBeSent_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t MoreAssDataToBeSent_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t MoreAssDataToBeSent_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t MoreAssDataToBeSent_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { MoreAssDataToBeSent_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_MoreAssDataToBeSent_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_MoreAssDataToBeSent_value2enum_1[] = { { 0, 14, "noMoreMessages" }, { 1, 20, "moreMessagesOnTheWay" } }; static unsigned int asn_MAP_MoreAssDataToBeSent_enum2value_1[] = { 1, /* moreMessagesOnTheWay(1) */ 0 /* noMoreMessages(0) */ }; static asn_INTEGER_specifics_t asn_SPC_MoreAssDataToBeSent_specs_1 = { asn_MAP_MoreAssDataToBeSent_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_MoreAssDataToBeSent_enum2value_1, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_MoreAssDataToBeSent_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MoreAssDataToBeSent = { "MoreAssDataToBeSent", "MoreAssDataToBeSent", MoreAssDataToBeSent_free, MoreAssDataToBeSent_print, MoreAssDataToBeSent_constraint, MoreAssDataToBeSent_decode_ber, MoreAssDataToBeSent_encode_der, MoreAssDataToBeSent_decode_xer, MoreAssDataToBeSent_encode_xer, MoreAssDataToBeSent_decode_uper, MoreAssDataToBeSent_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MoreAssDataToBeSent_tags_1, sizeof(asn_DEF_MoreAssDataToBeSent_tags_1) /sizeof(asn_DEF_MoreAssDataToBeSent_tags_1[0]), /* 1 */ asn_DEF_MoreAssDataToBeSent_tags_1, /* Same as above */ sizeof(asn_DEF_MoreAssDataToBeSent_tags_1) /sizeof(asn_DEF_MoreAssDataToBeSent_tags_1[0]), /* 1 */ &asn_PER_type_MoreAssDataToBeSent_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_MoreAssDataToBeSent_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel7-MsrPosition-Req-Extension.h0000644000175000017500000000256612576764164025752 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel7_MsrPosition_Req_Extension_H_ #define _Rel7_MsrPosition_Req_Extension_H_ #include /* Including external dependencies */ #include #include "GANSSPositioningMethod.h" #include "RequiredResponseTime.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSS_AssistData; /* Rel7-MsrPosition-Req-Extension */ typedef struct Rel7_MsrPosition_Req_Extension { NULL_t *velocityRequested /* OPTIONAL */; GANSSPositioningMethod_t *ganssPositionMethod /* OPTIONAL */; struct GANSS_AssistData *ganss_AssistData /* OPTIONAL */; NULL_t *ganssCarrierPhaseMeasurementRequest /* OPTIONAL */; NULL_t *ganssTODGSMTimeAssociationMeasurementRequest /* OPTIONAL */; RequiredResponseTime_t *requiredResponseTime /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel7_MsrPosition_Req_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel7_MsrPosition_Req_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSS-AssistData.h" #endif /* _Rel7_MsrPosition_Req_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MeasureResponseTime.h0000644000175000017500000000200412576764164024100 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MeasureResponseTime_H_ #define _MeasureResponseTime_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* MeasureResponseTime */ typedef long MeasureResponseTime_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MeasureResponseTime; asn_struct_free_f MeasureResponseTime_free; asn_struct_print_f MeasureResponseTime_print; asn_constr_check_f MeasureResponseTime_constraint; ber_type_decoder_f MeasureResponseTime_decode_ber; der_type_encoder_f MeasureResponseTime_encode_der; xer_type_decoder_f MeasureResponseTime_decode_xer; xer_type_encoder_f MeasureResponseTime_encode_xer; per_type_decoder_f MeasureResponseTime_decode_uper; per_type_encoder_f MeasureResponseTime_encode_uper; #ifdef __cplusplus } #endif #endif /* _MeasureResponseTime_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BadSignalElement.c0000644000175000017500000000567412576764164023312 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "BadSignalElement.h" static int memb_badSignalID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_badSignalID_constr_3 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_BadSignalElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct BadSignalElement, badSVID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "badSVID" }, { ATF_POINTER, 1, offsetof(struct BadSignalElement, badSignalID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_badSignalID_constraint_1, &asn_PER_memb_badSignalID_constr_3, 0, "badSignalID" }, }; static int asn_MAP_BadSignalElement_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_BadSignalElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_BadSignalElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* badSVID at 1300 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* badSignalID at 1301 */ }; static asn_SEQUENCE_specifics_t asn_SPC_BadSignalElement_specs_1 = { sizeof(struct BadSignalElement), offsetof(struct BadSignalElement, _asn_ctx), asn_MAP_BadSignalElement_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_BadSignalElement_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_BadSignalElement = { "BadSignalElement", "BadSignalElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_BadSignalElement_tags_1, sizeof(asn_DEF_BadSignalElement_tags_1) /sizeof(asn_DEF_BadSignalElement_tags_1[0]), /* 1 */ asn_DEF_BadSignalElement_tags_1, /* Same as above */ sizeof(asn_DEF_BadSignalElement_tags_1) /sizeof(asn_DEF_BadSignalElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_BadSignalElement_1, 2, /* Elements count */ &asn_SPC_BadSignalElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSMeasureInfo.c0000644000175000017500000000353212576764164023154 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSMeasureInfo.h" static asn_TYPE_member_t asn_MBR_GANSSMeasureInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSMeasureInfo, ganssMsrSetList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSS_MsrSetElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssMsrSetList" }, }; static ber_tlv_tag_t asn_DEF_GANSSMeasureInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSMeasureInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ganssMsrSetList at 1451 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSMeasureInfo_specs_1 = { sizeof(struct GANSSMeasureInfo), offsetof(struct GANSSMeasureInfo, _asn_ctx), asn_MAP_GANSSMeasureInfo_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSMeasureInfo = { "GANSSMeasureInfo", "GANSSMeasureInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSMeasureInfo_tags_1, sizeof(asn_DEF_GANSSMeasureInfo_tags_1) /sizeof(asn_DEF_GANSSMeasureInfo_tags_1[0]), /* 1 */ asn_DEF_GANSSMeasureInfo_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSMeasureInfo_tags_1) /sizeof(asn_DEF_GANSSMeasureInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSMeasureInfo_1, 1, /* Elements count */ &asn_SPC_GANSSMeasureInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BSICAndCarrier.c0000644000175000017500000000414012576764164022612 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "BSICAndCarrier.h" static asn_TYPE_member_t asn_MBR_BSICAndCarrier_1[] = { { ATF_NOFLAGS, 0, offsetof(struct BSICAndCarrier, carrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BCCHCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "carrier" }, { ATF_NOFLAGS, 0, offsetof(struct BSICAndCarrier, bsic), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSIC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsic" }, }; static ber_tlv_tag_t asn_DEF_BSICAndCarrier_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_BSICAndCarrier_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrier at 304 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* bsic at 306 */ }; static asn_SEQUENCE_specifics_t asn_SPC_BSICAndCarrier_specs_1 = { sizeof(struct BSICAndCarrier), offsetof(struct BSICAndCarrier, _asn_ctx), asn_MAP_BSICAndCarrier_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_BSICAndCarrier = { "BSICAndCarrier", "BSICAndCarrier", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_BSICAndCarrier_tags_1, sizeof(asn_DEF_BSICAndCarrier_tags_1) /sizeof(asn_DEF_BSICAndCarrier_tags_1[0]), /* 1 */ asn_DEF_BSICAndCarrier_tags_1, /* Same as above */ sizeof(asn_DEF_BSICAndCarrier_tags_1) /sizeof(asn_DEF_BSICAndCarrier_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_BSICAndCarrier_1, 2, /* Elements count */ &asn_SPC_BSICAndCarrier_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_support.c0000644000175000017500000002312312576764164022523 0ustar carlescarles/* * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include char * per_data_string(asn_per_data_t *pd) { static char buf[2][32]; static int n; n = (n+1) % 2; snprintf(buf[n], sizeof(buf), "{m=%d span %+d[%d..%d] (%d)}", pd->moved, (((int)pd->buffer) & 0xf), pd->nboff, pd->nbits, pd->nbits - pd->nboff); return buf[n]; } void per_get_undo(asn_per_data_t *pd, int nbits) { if((ssize_t)pd->nboff < nbits) { assert((ssize_t)pd->nboff < nbits); } else { pd->nboff -= nbits; pd->moved -= nbits; } } /* * Extract a small number of bits (<= 31) from the specified PER data pointer. */ int32_t per_get_few_bits(asn_per_data_t *pd, int nbits) { size_t off; /* Next after last bit offset */ ssize_t nleft; /* Number of bits left in this stream */ uint32_t accum; const uint8_t *buf; if(nbits < 0) return -1; nleft = pd->nbits - pd->nboff; if(nbits > nleft) { int32_t tailv, vhead; if(!pd->refill || nbits > 31) return -1; /* Accumulate unused bytes before refill */ ASN_DEBUG("Obtain the rest %d bits (want %d)", nleft, nbits); tailv = per_get_few_bits(pd, nleft); if(tailv < 0) return -1; /* Refill (replace pd contents with new data) */ if(pd->refill(pd)) return -1; nbits -= nleft; vhead = per_get_few_bits(pd, nbits); /* Combine the rest of previous pd with the head of new one */ tailv = (tailv << nbits) | vhead; /* Could == -1 */ return tailv; } /* * Normalize position indicator. */ if(pd->nboff >= 8) { pd->buffer += (pd->nboff >> 3); pd->nbits -= (pd->nboff & ~0x07); pd->nboff &= 0x07; } pd->moved += nbits; pd->nboff += nbits; off = pd->nboff; buf = pd->buffer; /* * Extract specified number of bits. */ if(off <= 8) accum = nbits ? (buf[0]) >> (8 - off) : 0; else if(off <= 16) accum = ((buf[0] << 8) + buf[1]) >> (16 - off); else if(off <= 24) accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); else if(off <= 31) accum = ((buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + (buf[3])) >> (32 - off); else if(nbits <= 31) { asn_per_data_t tpd = *pd; /* Here are we with our 31-bits limit plus 1..7 bits offset. */ per_get_undo(&tpd, nbits); /* The number of available bits in the stream allow * for the following operations to take place without * invoking the ->refill() function */ accum = per_get_few_bits(&tpd, nbits - 24) << 24; accum |= per_get_few_bits(&tpd, 24); } else { per_get_undo(pd, nbits); return -1; } accum &= (((uint32_t)1 << nbits) - 1); ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+d[%d..%d]:%02x (%d) => 0x%x]", nbits, nleft, pd->moved, (((int)pd->buffer) & 0xf), pd->nboff, pd->nbits, pd->buffer[0], pd->nbits - pd->nboff, (int)accum); return accum; } /* * Extract a large number of bits from the specified PER data pointer. */ int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int alright, int nbits) { int32_t value; if(alright && (nbits & 7)) { /* Perform right alignment of a first few bits */ value = per_get_few_bits(pd, nbits & 0x07); if(value < 0) return -1; *dst++ = value; /* value is already right-aligned */ nbits &= ~7; } while(nbits) { if(nbits >= 24) { value = per_get_few_bits(pd, 24); if(value < 0) return -1; *(dst++) = value >> 16; *(dst++) = value >> 8; *(dst++) = value; nbits -= 24; } else { value = per_get_few_bits(pd, nbits); if(value < 0) return -1; if(nbits & 7) { /* implies left alignment */ value <<= 8 - (nbits & 7), nbits += 8 - (nbits & 7); if(nbits > 24) *dst++ = value >> 24; } if(nbits > 16) *dst++ = value >> 16; if(nbits > 8) *dst++ = value >> 8; *dst++ = value; break; } } return 0; } /* * Get the length "n" from the stream. */ ssize_t uper_get_length(asn_per_data_t *pd, int ebits, int *repeat) { ssize_t value; *repeat = 0; if(ebits >= 0) return per_get_few_bits(pd, ebits); value = per_get_few_bits(pd, 8); if(value < 0) return -1; if((value & 128) == 0) /* #10.9.3.6 */ return (value & 0x7F); if((value & 64) == 0) { /* #10.9.3.7 */ value = ((value & 63) << 8) | per_get_few_bits(pd, 8); if(value < 0) return -1; return value; } value &= 63; /* this is "m" from X.691, #10.9.3.8 */ if(value < 1 || value > 4) return -1; *repeat = 1; return (16384 * value); } /* * Get the normally small length "n". * This procedure used to decode length of extensions bit-maps * for SET and SEQUENCE types. */ ssize_t uper_get_nslength(asn_per_data_t *pd) { ssize_t length; ASN_DEBUG("Getting normally small length"); if(per_get_few_bits(pd, 1) == 0) { length = per_get_few_bits(pd, 6) + 1; if(length <= 0) return -1; ASN_DEBUG("l=%d", length); return length; } else { int repeat; length = uper_get_length(pd, -1, &repeat); if(length >= 0 && !repeat) return length; return -1; /* Error, or do not support >16K extensions */ } } /* * Get the normally small non-negative whole number. * X.691, #10.6 */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd) { ssize_t value; value = per_get_few_bits(pd, 7); if(value & 64) { /* implicit (value < 0) */ value &= 63; value <<= 2; value |= per_get_few_bits(pd, 2); if(value & 128) /* implicit (value < 0) */ return -1; if(value == 0) return 0; if(value >= 3) return -1; value = per_get_few_bits(pd, 8 * value); return value; } return value; } /* * Put the normally small non-negative whole number. * X.691, #10.6 */ int uper_put_nsnnwn(asn_per_outp_t *po, int n) { int bytes; if(n <= 63) { if(n < 0) return -1; return per_put_few_bits(po, n, 7); } if(n < 256) bytes = 1; else if(n < 65536) bytes = 2; else if(n < 256 * 65536) bytes = 3; else return -1; /* This is not a "normally small" value */ if(per_put_few_bits(po, bytes, 8)) return -1; return per_put_few_bits(po, n, 8 * bytes); } /* * Put a small number of bits (<= 31). */ int per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { size_t off; /* Next after last bit offset */ size_t omsk; /* Existing last byte meaningful bits mask */ uint8_t *buf; if(obits <= 0 || obits >= 32) return obits ? -1 : 0; ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", obits, (int)bits, po->buffer, po->nboff); /* * Normalize position indicator. */ if(po->nboff >= 8) { po->buffer += (po->nboff >> 3); po->nbits -= (po->nboff & ~0x07); po->nboff &= 0x07; } /* * Flush whole-bytes output, if necessary. */ if(po->nboff + obits > po->nbits) { int complete_bytes = (po->buffer - po->tmpspace); ASN_DEBUG("[PER output %d complete + %d]", complete_bytes, po->flushed_bytes); if(po->outper(po->tmpspace, complete_bytes, po->op_key) < 0) return -1; if(po->nboff) po->tmpspace[0] = po->buffer[0]; po->buffer = po->tmpspace; po->nbits = 8 * sizeof(po->tmpspace); po->flushed_bytes += complete_bytes; } /* * Now, due to sizeof(tmpspace), we are guaranteed large enough space. */ buf = po->buffer; omsk = ~((1 << (8 - po->nboff)) - 1); off = (po->nboff += obits); /* Clear data of debris before meaningful bits */ bits &= (((uint32_t)1 << obits) - 1); ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, (int)bits, (int)bits, po->nboff - obits, off, buf[0], omsk&0xff, buf[0] & omsk); if(off <= 8) /* Completely within 1 byte */ bits <<= (8 - off), buf[0] = (buf[0] & omsk) | bits; else if(off <= 16) bits <<= (16 - off), buf[0] = (buf[0] & omsk) | (bits >> 8), buf[1] = bits; else if(off <= 24) bits <<= (24 - off), buf[0] = (buf[0] & omsk) | (bits >> 16), buf[1] = bits >> 8, buf[2] = bits; else if(off <= 31) bits <<= (32 - off), buf[0] = (buf[0] & omsk) | (bits >> 24), buf[1] = bits >> 16, buf[2] = bits >> 8, buf[3] = bits; else { ASN_DEBUG("->[PER out split %d]", obits); per_put_few_bits(po, bits >> 8, 24); per_put_few_bits(po, bits, obits - 24); ASN_DEBUG("<-[PER out split %d]", obits); } ASN_DEBUG("[PER out %u/%x => %02x buf+%d]", (int)bits, (int)bits, buf[0], po->buffer - po->tmpspace); return 0; } /* * Output a large number of bits. */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int nbits) { while(nbits) { uint32_t value; if(nbits >= 24) { value = (src[0] << 16) | (src[1] << 8) | src[2]; src += 3; nbits -= 24; if(per_put_few_bits(po, value, 24)) return -1; } else { value = src[0]; if(nbits > 8) value = (value << 8) | src[1]; if(nbits > 16) value = (value << 8) | src[2]; if(nbits & 0x07) value >>= (8 - (nbits & 0x07)); if(per_put_few_bits(po, value, nbits)) return -1; break; } } return 0; } /* * Put the length "n" (or part of it) into the stream. */ ssize_t uper_put_length(asn_per_outp_t *po, size_t length) { if(length <= 127) /* #10.9.3.6 */ return per_put_few_bits(po, length, 8) ? -1 : (ssize_t)length; else if(length < 16384) /* #10.9.3.7 */ return per_put_few_bits(po, length|0x8000, 16) ? -1 : (ssize_t)length; length >>= 14; if(length > 4) length = 4; return per_put_few_bits(po, 0xC0 | length, 8) ? -1 : (ssize_t)(length << 14); } /* * Put the normally small length "n" into the stream. * This procedure used to encode length of extensions bit-maps * for SET and SEQUENCE types. */ int uper_put_nslength(asn_per_outp_t *po, size_t length) { if(length <= 64) { /* #10.9.3.4 */ if(length == 0) return -1; return per_put_few_bits(po, length-1, 7) ? -1 : 0; } else { if(uper_put_length(po, length) != (ssize_t)length) { /* This might happen in case of >16K extensions */ return -1; } } return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_TYPE.c0000644000175000017500000000334212576764164022313 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Version of the ASN.1 infrastructure shipped with compiler. */ int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } static asn_app_consume_bytes_f _print2fp; /* * Return the outmost tag of the type. */ ber_tlv_tag_t asn_TYPE_outmost_tag(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { if(tag_mode) return tag; if(type_descriptor->tags_count) return type_descriptor->tags[0]; return type_descriptor->outmost_tag(type_descriptor, struct_ptr, 0, 0); } /* * Print the target language's structure in human readable form. */ int asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr) { if(!stream) stream = stdout; if(!td || !struct_ptr) { errno = EINVAL; return -1; } /* Invoke type-specific printer */ if(td->print_struct(td, struct_ptr, 1, _print2fp, stream)) return -1; /* Terminate the output */ if(_print2fp("\n", 1, stream)) return -1; return fflush(stream); } /* Dump the data into the specified stdio stream */ static int _print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } /* * Some compilers do not support variable args macros. * This function is a replacement of ASN_DEBUG() macro. */ void ASN_DEBUG_f(const char *fmt, ...); void ASN_DEBUG_f(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTOD-GSMTimeAssociation.h0000644000175000017500000000202412576764164025025 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSTOD_GSMTimeAssociation_H_ #define _GANSSTOD_GSMTimeAssociation_H_ #include /* Including external dependencies */ #include "BCCHCarrier.h" #include "BSIC.h" #include "FrameNumber.h" #include "TimeSlot.h" #include "BitNumber.h" #include "FrameDrift.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSTOD-GSMTimeAssociation */ typedef struct GANSSTOD_GSMTimeAssociation { BCCHCarrier_t bcchCarrier; BSIC_t bsic; FrameNumber_t frameNumber; TimeSlot_t timeSlot; BitNumber_t bitNumber; FrameDrift_t *frameDrift /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSTOD_GSMTimeAssociation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSTOD_GSMTimeAssociation; #ifdef __cplusplus } #endif #endif /* _GANSSTOD_GSMTimeAssociation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistData.h0000644000175000017500000000131212576764164022664 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MsrAssistData_H_ #define _MsrAssistData_H_ #include /* Including external dependencies */ #include "SeqOfMsrAssistBTS.h" #include #ifdef __cplusplus extern "C" { #endif /* MsrAssistData */ typedef struct MsrAssistData { SeqOfMsrAssistBTS_t msrAssistList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MsrAssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MsrAssistData; #ifdef __cplusplus } #endif #endif /* _MsrAssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AdditionalDopplerFields.h0000644000175000017500000000142312576764164024672 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AdditionalDopplerFields_H_ #define _AdditionalDopplerFields_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* AdditionalDopplerFields */ typedef struct AdditionalDopplerFields { long doppler1; long dopplerUncertainty; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AdditionalDopplerFields_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AdditionalDopplerFields; #ifdef __cplusplus } #endif #endif /* _AdditionalDopplerFields_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTDValue.h0000644000175000017500000000153712576764164021576 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTDValue_H_ #define _OTDValue_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* OTDValue */ typedef long OTDValue_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTDValue; asn_struct_free_f OTDValue_free; asn_struct_print_f OTDValue_print; asn_constr_check_f OTDValue_constraint; ber_type_decoder_f OTDValue_decode_ber; der_type_encoder_f OTDValue_encode_der; xer_type_decoder_f OTDValue_decode_xer; xer_type_encoder_f OTDValue_encode_xer; per_type_decoder_f OTDValue_decode_uper; per_type_encoder_f OTDValue_encode_uper; #ifdef __cplusplus } #endif #endif /* _OTDValue_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/INTEGER.h0000644000175000017500000000426712576764164021253 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _INTEGER_H_ #define _INTEGER_H_ #include #include #ifdef __cplusplus extern "C" { #endif typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; extern asn_TYPE_descriptor_t asn_DEF_INTEGER; /* Map with to integer value association */ typedef struct asn_INTEGER_enum_map_s { long nat_value; /* associated native integer value */ size_t enum_len; /* strlen("tag") */ const char *enum_name; /* "tag" */ } asn_INTEGER_enum_map_t; /* This type describes an enumeration for INTEGER and ENUMERATED types */ typedef struct asn_INTEGER_specifics_s { asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ unsigned int *enum2value; /* "tag" => N; sorted by tag */ int map_count; /* Elements in either map */ int extension; /* This map is extensible */ int strict_enumeration; /* Enumeration set is fixed */ int field_width; /* Size of native integer */ int field_unsigned; /* Signed=0, unsigned=1 */ } asn_INTEGER_specifics_t; asn_struct_print_f INTEGER_print; ber_type_decoder_f INTEGER_decode_ber; der_type_encoder_f INTEGER_encode_der; xer_type_decoder_f INTEGER_decode_xer; xer_type_encoder_f INTEGER_encode_xer; per_type_decoder_f INTEGER_decode_uper; per_type_encoder_f INTEGER_encode_uper; /*********************************** * Some handy conversion routines. * ***********************************/ /* * Returns 0 if it was possible to convert, -1 otherwise. * -1/EINVAL: Mandatory argument missing * -1/ERANGE: Value encoded is out of range for long representation * -1/ENOMEM: Memory allocation failed (in asn_long2INTEGER()). */ int asn_INTEGER2long(const INTEGER_t *i, long *l); int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); int asn_long2INTEGER(INTEGER_t *i, long l); int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); /* * Convert the integer value into the corresponding enumeration map entry. */ const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value); #ifdef __cplusplus } #endif #endif /* _INTEGER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NativeInteger.h0000644000175000017500000000210412576764164022706 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This type differs from the standard INTEGER in that it is modelled using * the fixed machine type (long, int, short), so it can hold only values of * limited length. There is no type (i.e., NativeInteger_t, any integer type * will do). * This type may be used when integer range is limited by subtype constraints. */ #ifndef _NativeInteger_H_ #define _NativeInteger_H_ #include #include #ifdef __cplusplus extern "C" { #endif extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; asn_struct_free_f NativeInteger_free; asn_struct_print_f NativeInteger_print; ber_type_decoder_f NativeInteger_decode_ber; der_type_encoder_f NativeInteger_encode_der; xer_type_decoder_f NativeInteger_decode_xer; xer_type_encoder_f NativeInteger_encode_xer; per_type_decoder_f NativeInteger_decode_uper; per_type_encoder_f NativeInteger_encode_uper; #ifdef __cplusplus } #endif #endif /* _NativeInteger_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSPositioningMethod.h0000644000175000017500000000232112576764164024402 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSPositioningMethod_H_ #define _GANSSPositioningMethod_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum GANSSPositioningMethod { GANSSPositioningMethod_gps = 0, GANSSPositioningMethod_galileo = 1 } e_GANSSPositioningMethod; /* GANSSPositioningMethod */ typedef BIT_STRING_t GANSSPositioningMethod_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSPositioningMethod; asn_struct_free_f GANSSPositioningMethod_free; asn_struct_print_f GANSSPositioningMethod_print; asn_constr_check_f GANSSPositioningMethod_constraint; ber_type_decoder_f GANSSPositioningMethod_decode_ber; der_type_encoder_f GANSSPositioningMethod_encode_der; xer_type_decoder_f GANSSPositioningMethod_decode_xer; xer_type_encoder_f GANSSPositioningMethod_encode_xer; per_type_decoder_f GANSSPositioningMethod_decode_uper; per_type_encoder_f GANSSPositioningMethod_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSPositioningMethod_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasurementWithID.c0000644000175000017500000000602712576764164024127 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MeasurementWithID.h" static asn_TYPE_member_t asn_MBR_OTD_MeasurementWithID_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_MeasurementWithID, neighborIdentity), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_NeighborIdentity, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "neighborIdentity" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MeasurementWithID, nborTimeSlot), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ModuloTimeSlot, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "nborTimeSlot" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MeasurementWithID, eotdQuality), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_EOTDQuality, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "eotdQuality" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MeasurementWithID, otdValue), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTDValue, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otdValue" }, }; static ber_tlv_tag_t asn_DEF_OTD_MeasurementWithID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_MeasurementWithID_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* neighborIdentity at 386 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nborTimeSlot at 387 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eotdQuality at 388 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* otdValue at 390 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_MeasurementWithID_specs_1 = { sizeof(struct OTD_MeasurementWithID), offsetof(struct OTD_MeasurementWithID, _asn_ctx), asn_MAP_OTD_MeasurementWithID_tag2el_1, 4, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MeasurementWithID = { "OTD-MeasurementWithID", "OTD-MeasurementWithID", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MeasurementWithID_tags_1, sizeof(asn_DEF_OTD_MeasurementWithID_tags_1) /sizeof(asn_DEF_OTD_MeasurementWithID_tags_1[0]), /* 1 */ asn_DEF_OTD_MeasurementWithID_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MeasurementWithID_tags_1) /sizeof(asn_DEF_OTD_MeasurementWithID_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_MeasurementWithID_1, 4, /* Elements count */ &asn_SPC_OTD_MeasurementWithID_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TA0.h0000644000175000017500000000142412576764164020532 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TA0_H_ #define _TA0_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TA0 */ typedef long TA0_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TA0; asn_struct_free_f TA0_free; asn_struct_print_f TA0_print; asn_constr_check_f TA0_constraint; ber_type_decoder_f TA0_decode_ber; der_type_encoder_f TA0_encode_der; xer_type_decoder_f TA0_decode_xer; xer_type_encoder_f TA0_encode_xer; per_type_decoder_f TA0_decode_uper; per_type_encoder_f TA0_encode_uper; #ifdef __cplusplus } #endif #endif /* _TA0_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeSlot.h0000644000175000017500000000153712576764164021713 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TimeSlot_H_ #define _TimeSlot_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TimeSlot */ typedef long TimeSlot_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TimeSlot; asn_struct_free_f TimeSlot_free; asn_struct_print_f TimeSlot_print; asn_constr_check_f TimeSlot_constraint; ber_type_decoder_f TimeSlot_decode_ber; der_type_encoder_f TimeSlot_encode_der; xer_type_decoder_f TimeSlot_decode_xer; xer_type_encoder_f TimeSlot_encode_xer; per_type_decoder_f TimeSlot_decode_uper; per_type_encoder_f TimeSlot_encode_uper; #ifdef __cplusplus } #endif #endif /* _TimeSlot_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceFrame.h0000644000175000017500000000134212576764164023016 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceFrame_H_ #define _ReferenceFrame_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* ReferenceFrame */ typedef struct ReferenceFrame { long referenceFN; long *referenceFNMSB /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ReferenceFrame_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceFrame; #ifdef __cplusplus } #endif #endif /* _ReferenceFrame_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceTime.h0000644000175000017500000000163312576764164022665 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceTime_H_ #define _ReferenceTime_H_ #include /* Including external dependencies */ #include "GPSTime.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GSMTime; struct GPSTOWAssist; /* ReferenceTime */ typedef struct ReferenceTime { GPSTime_t gpsTime; struct GSMTime *gsmTime /* OPTIONAL */; struct GPSTOWAssist *gpsTowAssist /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ReferenceTime_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceTime; #ifdef __cplusplus } #endif /* Referred external types */ #include "GSMTime.h" #include "GPSTOWAssist.h" #endif /* _ReferenceTime_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-AssistData.h0000644000175000017500000000135112576764164023056 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSS_AssistData_H_ #define _GANSS_AssistData_H_ #include /* Including external dependencies */ #include "GANSS-ControlHeader.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSS-AssistData */ typedef struct GANSS_AssistData { GANSS_ControlHeader_t ganss_controlHeader; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSS_AssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSS_AssistData; #ifdef __cplusplus } #endif #endif /* _GANSS_AssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-5-MsrPosition-Rsp-Extension.c0000644000175000017500000000607212576764164026031 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel-5-MsrPosition-Rsp-Extension.h" static asn_TYPE_member_t asn_MBR_Rel_5_MsrPosition_Rsp_Extension_1[] = { { ATF_POINTER, 3, offsetof(struct Rel_5_MsrPosition_Rsp_Extension, extended_reference), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Extended_reference, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extended-reference" }, { ATF_POINTER, 2, offsetof(struct Rel_5_MsrPosition_Rsp_Extension, otd_MeasureInfo_5_Ext), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_MeasureInfo_5_Ext, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otd-MeasureInfo-5-Ext" }, { ATF_POINTER, 1, offsetof(struct Rel_5_MsrPosition_Rsp_Extension, ulPseudoSegInd), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UlPseudoSegInd, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ulPseudoSegInd" }, }; static int asn_MAP_Rel_5_MsrPosition_Rsp_Extension_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel_5_MsrPosition_Rsp_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* extended-reference at 985 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* otd-MeasureInfo-5-Ext at 991 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ulPseudoSegInd at 992 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel_5_MsrPosition_Rsp_Extension_specs_1 = { sizeof(struct Rel_5_MsrPosition_Rsp_Extension), offsetof(struct Rel_5_MsrPosition_Rsp_Extension, _asn_ctx), asn_MAP_Rel_5_MsrPosition_Rsp_Extension_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_Rel_5_MsrPosition_Rsp_Extension_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel_5_MsrPosition_Rsp_Extension = { "Rel-5-MsrPosition-Rsp-Extension", "Rel-5-MsrPosition-Rsp-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1, sizeof(asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1) /sizeof(asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1) /sizeof(asn_DEF_Rel_5_MsrPosition_Rsp_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel_5_MsrPosition_Rsp_Extension_1, 3, /* Elements count */ &asn_SPC_Rel_5_MsrPosition_Rsp_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefTimeInfo.h0000644000175000017500000000160312576764164023110 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSRefTimeInfo_H_ #define _GANSSRefTimeInfo_H_ #include /* Including external dependencies */ #include #include "GANSSTOD.h" #include "GANSSTODUncertainty.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSRefTimeInfo */ typedef struct GANSSRefTimeInfo { long *ganssDay /* OPTIONAL */; GANSSTOD_t ganssTOD; GANSSTODUncertainty_t *ganssTODUncertainty /* OPTIONAL */; long *ganssTimeID /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSRefTimeInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSRefTimeInfo; #ifdef __cplusplus } #endif #endif /* _GANSSRefTimeInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TA1.c0000644000175000017500000001051212576764164020524 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TA1.h" int TA1_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TA1_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TA1_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TA1_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TA1_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TA1_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TA1_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TA1_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TA1_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TA1_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TA1_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TA1_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TA1_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TA1_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TA1_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TA1_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TA1_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TA1_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TA1_constr_1 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TA1_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TA1 = { "TA1", "TA1", TA1_free, TA1_print, TA1_constraint, TA1_decode_ber, TA1_encode_der, TA1_decode_xer, TA1_encode_xer, TA1_decode_uper, TA1_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TA1_tags_1, sizeof(asn_DEF_TA1_tags_1) /sizeof(asn_DEF_TA1_tags_1[0]), /* 1 */ asn_DEF_TA1_tags_1, /* Same as above */ sizeof(asn_DEF_TA1_tags_1) /sizeof(asn_DEF_TA1_tags_1[0]), /* 1 */ &asn_PER_type_TA1_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfBadSignalElement.c0000644000175000017500000000344112576764164024236 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfBadSignalElement.h" static asn_per_constraints_t asn_PER_type_SeqOfBadSignalElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfBadSignalElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_BadSignalElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfBadSignalElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfBadSignalElement_specs_1 = { sizeof(struct SeqOfBadSignalElement), offsetof(struct SeqOfBadSignalElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfBadSignalElement = { "SeqOfBadSignalElement", "SeqOfBadSignalElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfBadSignalElement_tags_1, sizeof(asn_DEF_SeqOfBadSignalElement_tags_1) /sizeof(asn_DEF_SeqOfBadSignalElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfBadSignalElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfBadSignalElement_tags_1) /sizeof(asn_DEF_SeqOfBadSignalElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfBadSignalElement_constr_1, asn_MBR_SeqOfBadSignalElement_1, 1, /* Single element */ &asn_SPC_SeqOfBadSignalElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGPS-MsrElement.c0000644000175000017500000000337112576764164023604 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGPS-MsrElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGPS_MsrElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGPS_MsrElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GPS_MsrElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGPS_MsrElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGPS_MsrElement_specs_1 = { sizeof(struct SeqOfGPS_MsrElement), offsetof(struct SeqOfGPS_MsrElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGPS_MsrElement = { "SeqOfGPS-MsrElement", "SeqOfGPS-MsrElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGPS_MsrElement_tags_1, sizeof(asn_DEF_SeqOfGPS_MsrElement_tags_1) /sizeof(asn_DEF_SeqOfGPS_MsrElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGPS_MsrElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGPS_MsrElement_tags_1) /sizeof(asn_DEF_SeqOfGPS_MsrElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGPS_MsrElement_constr_1, asn_MBR_SeqOfGPS_MsrElement_1, 1, /* Single element */ &asn_SPC_SeqOfGPS_MsrElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistData-R98-ExpOTD.c0000644000175000017500000000427512576764164025712 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SystemInfoAssistData-R98-ExpOTD.h" static asn_TYPE_member_t asn_MBR_SystemInfoAssistData_R98_ExpOTD_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SystemInfoAssistData_R98_ExpOTD, systemInfoAssistListR98_ExpOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoAssistListR98-ExpOTD" }, }; static ber_tlv_tag_t asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SystemInfoAssistData_R98_ExpOTD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* systemInfoAssistListR98-ExpOTD at 917 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SystemInfoAssistData_R98_ExpOTD_specs_1 = { sizeof(struct SystemInfoAssistData_R98_ExpOTD), offsetof(struct SystemInfoAssistData_R98_ExpOTD, _asn_ctx), asn_MAP_SystemInfoAssistData_R98_ExpOTD_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistData_R98_ExpOTD = { "SystemInfoAssistData-R98-ExpOTD", "SystemInfoAssistData-R98-ExpOTD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1, sizeof(asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1) /sizeof(asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1) /sizeof(asn_DEF_SystemInfoAssistData_R98_ExpOTD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SystemInfoAssistData_R98_ExpOTD_1, 1, /* Elements count */ &asn_SPC_SystemInfoAssistData_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_system.h0000644000175000017500000000643012576764164022335 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Miscellaneous system-dependent types. */ #ifndef _ASN_SYSTEM_H_ #define _ASN_SYSTEM_H_ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* For snprintf(3) */ #include /* For *alloc(3) */ #include /* For memcpy(3) */ #include /* For size_t */ #include /* For LONG_MAX */ #include /* For va_start */ #include /* for offsetof and ptrdiff_t */ #ifdef WIN32 #include #define snprintf _snprintf #define vsnprintf _vsnprintf /* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ #define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ | (((l) << 16) & 0xff0000) \ | (((l) << 8) & 0xff00) \ | ((l) & 0xff)) #ifdef _MSC_VER /* MSVS.Net */ #ifndef __cplusplus #define inline __inline #endif #ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ #define ssize_t SSIZE_T typedef char int8_t; typedef short int16_t; typedef int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #endif /* ASSUMESTDTYPES */ #define WIN32_LEAN_AND_MEAN #include #include #define isnan _isnan #define finite _finite #define copysign _copysign #define ilogb _logb #else /* !_MSC_VER */ #include #endif /* _MSC_VER */ #else /* !WIN32 */ #if defined(__vxworks) #include #else /* !defined(__vxworks) */ #include /* C99 specifies this file */ /* * 1. Earlier FreeBSD version didn't have , * but was present. * 2. Sun Solaris requires for alloca(3), * but does not have . */ #if (!defined(__FreeBSD__) || !defined(_SYS_INTTYPES_H_)) #if defined(sun) #include /* For alloca(3) */ #include /* for finite(3) */ #elif defined(__hpux) #ifdef __GNUC__ #include /* For alloca(3) */ #else /* !__GNUC__ */ #define inline #endif /* __GNUC__ */ #else #include /* SUSv2+ and C99 specify this file, for uintXX_t */ #endif /* defined(sun) */ #endif #include /* for ntohl() */ #define sys_ntohl(foo) ntohl(foo) #endif /* defined(__vxworks) */ #endif /* WIN32 */ #if __GNUC__ >= 3 #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) #endif #ifndef GCC_NOTUSED #define GCC_NOTUSED __attribute__((unused)) #endif #else #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) /* nothing */ #endif #ifndef GCC_NOTUSED #define GCC_NOTUSED #endif #endif /* Figure out if thread safety is requested */ #if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) #define ASN_THREAD_SAFE #endif /* Thread safety */ #ifndef offsetof /* If not defined by */ #define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) #endif /* offsetof */ #ifndef MIN /* Suitable for comparing primitive types (integers) */ #if defined(__GNUC__) #define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ ((_a)<(_b)?(_a):(_b)); }) #else /* !__GNUC__ */ #define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ #endif /* __GNUC__ */ #endif /* MIN */ #endif /* _ASN_SYSTEM_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSReferenceTime.c0000644000175000017500000000462012576764164023453 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSReferenceTime.h" static asn_TYPE_member_t asn_MBR_GANSSReferenceTime_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSReferenceTime, ganssRefTimeInfo), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSRefTimeInfo, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssRefTimeInfo" }, { ATF_POINTER, 1, offsetof(struct GANSSReferenceTime, ganssTOD_GSMTimeAssociation), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTOD_GSMTimeAssociation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTOD-GSMTimeAssociation" }, }; static int asn_MAP_GANSSReferenceTime_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_GANSSReferenceTime_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSReferenceTime_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssRefTimeInfo at 1098 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ganssTOD-GSMTimeAssociation at 1099 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSReferenceTime_specs_1 = { sizeof(struct GANSSReferenceTime), offsetof(struct GANSSReferenceTime, _asn_ctx), asn_MAP_GANSSReferenceTime_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_GANSSReferenceTime_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSReferenceTime = { "GANSSReferenceTime", "GANSSReferenceTime", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSReferenceTime_tags_1, sizeof(asn_DEF_GANSSReferenceTime_tags_1) /sizeof(asn_DEF_GANSSReferenceTime_tags_1[0]), /* 1 */ asn_DEF_GANSSReferenceTime_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSReferenceTime_tags_1) /sizeof(asn_DEF_GANSSReferenceTime_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSReferenceTime_1, 2, /* Elements count */ &asn_SPC_GANSSReferenceTime_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel7-MsrPosition-Req-Extension.c0000644000175000017500000001054412576764164025740 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel7-MsrPosition-Req-Extension.h" static asn_TYPE_member_t asn_MBR_Rel7_MsrPosition_Req_Extension_1[] = { { ATF_POINTER, 6, offsetof(struct Rel7_MsrPosition_Req_Extension, velocityRequested), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "velocityRequested" }, { ATF_POINTER, 5, offsetof(struct Rel7_MsrPosition_Req_Extension, ganssPositionMethod), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSPositioningMethod, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssPositionMethod" }, { ATF_POINTER, 4, offsetof(struct Rel7_MsrPosition_Req_Extension, ganss_AssistData), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSS_AssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganss-AssistData" }, { ATF_POINTER, 3, offsetof(struct Rel7_MsrPosition_Req_Extension, ganssCarrierPhaseMeasurementRequest), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssCarrierPhaseMeasurementRequest" }, { ATF_POINTER, 2, offsetof(struct Rel7_MsrPosition_Req_Extension, ganssTODGSMTimeAssociationMeasurementRequest), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODGSMTimeAssociationMeasurementRequest" }, { ATF_POINTER, 1, offsetof(struct Rel7_MsrPosition_Req_Extension, requiredResponseTime), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RequiredResponseTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "requiredResponseTime" }, }; static int asn_MAP_Rel7_MsrPosition_Req_Extension_oms_1[] = { 0, 1, 2, 3, 4, 5 }; static ber_tlv_tag_t asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel7_MsrPosition_Req_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* velocityRequested at 1045 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssPositionMethod at 1046 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ganss-AssistData at 1047 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ganssCarrierPhaseMeasurementRequest at 1048 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ganssTODGSMTimeAssociationMeasurementRequest at 1049 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* requiredResponseTime at 1050 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel7_MsrPosition_Req_Extension_specs_1 = { sizeof(struct Rel7_MsrPosition_Req_Extension), offsetof(struct Rel7_MsrPosition_Req_Extension, _asn_ctx), asn_MAP_Rel7_MsrPosition_Req_Extension_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_Rel7_MsrPosition_Req_Extension_oms_1, /* Optional members */ 6, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel7_MsrPosition_Req_Extension = { "Rel7-MsrPosition-Req-Extension", "Rel7-MsrPosition-Req-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1, sizeof(asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1) /sizeof(asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1) /sizeof(asn_DEF_Rel7_MsrPosition_Req_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel7_MsrPosition_Req_Extension_1, 6, /* Elements count */ &asn_SPC_Rel7_MsrPosition_Req_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMWord.c0000644000175000017500000001072112576764164021431 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TLMWord.h" int TLMWord_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 16383)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TLMWord_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TLMWord_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TLMWord_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TLMWord_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TLMWord_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TLMWord_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TLMWord_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TLMWord_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TLMWord_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TLMWord_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TLMWord_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TLMWord_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TLMWord_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TLMWord_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TLMWord_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TLMWord_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TLMWord_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TLMWord_constr_1 = { { APC_CONSTRAINED, 14, 14, 0, 16383 } /* (0..16383) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TLMWord_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TLMWord = { "TLMWord", "TLMWord", TLMWord_free, TLMWord_print, TLMWord_constraint, TLMWord_decode_ber, TLMWord_encode_der, TLMWord_decode_xer, TLMWord_encode_xer, TLMWord_decode_uper, TLMWord_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TLMWord_tags_1, sizeof(asn_DEF_TLMWord_tags_1) /sizeof(asn_DEF_TLMWord_tags_1[0]), /* 1 */ asn_DEF_TLMWord_tags_1, /* Same as above */ sizeof(asn_DEF_TLMWord_tags_1) /sizeof(asn_DEF_TLMWord_tags_1[0]), /* 1 */ &asn_PER_type_TLMWord_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceIdentity.h0000644000175000017500000000136512576764164023562 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceIdentity_H_ #define _ReferenceIdentity_H_ #include /* Including external dependencies */ #include "SeqOfReferenceIdentityType.h" #include #ifdef __cplusplus extern "C" { #endif /* ReferenceIdentity */ typedef struct ReferenceIdentity { SeqOfReferenceIdentityType_t refBTSList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ReferenceIdentity_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceIdentity; #ifdef __cplusplus } #endif #endif /* _ReferenceIdentity_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_SET_OF.h0000644000175000017500000000323312576764164022026 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_SET_OF_H #define ASN_SET_OF_H #ifdef __cplusplus extern "C" { #endif #define A_SET_OF(type) \ struct { \ type **array; \ int count; /* Meaningful size */ \ int size; /* Allocated size */ \ void (*free)(type *); \ } #define ASN_SET_ADD(headptr, ptr) \ asn_set_add((headptr), (ptr)) /******************************************* * Implementation of the SET OF structure. */ /* * Add another structure into the set by its pointer. * RETURN VALUES: * 0 for success and -1/errno for failure. */ int asn_set_add(void *asn_set_of_x, void *ptr); /* * Delete the element from the set by its number (base 0). * This is a constant-time operation. The order of elements before the * deleted ones is guaranteed, the order of elements after the deleted * one is NOT guaranteed. * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ void asn_set_del(void *asn_set_of_x, int number, int _do_free); /* * Empty the contents of the set. Will free the elements, if (*free) is given. * Will NOT free the set itself. */ void asn_set_empty(void *asn_set_of_x); /* * Cope with different conversions requirements to/from void in C and C++. * This is mostly useful for support library. */ typedef A_SET_OF(void) asn_anonymous_set_; #define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) #define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) #ifdef __cplusplus } #endif #endif /* ASN_SET_OF_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-FirstSetMsrs-R98-Ext.h0000644000175000017500000000170012576764164025253 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfOTD_FirstSetMsrs_R98_Ext_H_ #define _SeqOfOTD_FirstSetMsrs_R98_Ext_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct OTD_MeasurementWithID; /* SeqOfOTD-FirstSetMsrs-R98-Ext */ typedef struct SeqOfOTD_FirstSetMsrs_R98_Ext { A_SEQUENCE_OF(struct OTD_MeasurementWithID) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfOTD_FirstSetMsrs_R98_Ext_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext; #ifdef __cplusplus } #endif /* Referred external types */ #include "OTD-FirstSetMsrs.h" #endif /* _SeqOfOTD_FirstSetMsrs_R98_Ext_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceFrame.c0000644000175000017500000000721012576764164023011 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceFrame.h" static int memb_referenceFN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_referenceFNMSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_referenceFN_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_referenceFNMSB_constr_3 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_ReferenceFrame_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ReferenceFrame, referenceFN), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_referenceFN_constraint_1, &asn_PER_memb_referenceFN_constr_2, 0, "referenceFN" }, { ATF_POINTER, 1, offsetof(struct ReferenceFrame, referenceFNMSB), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_referenceFNMSB_constraint_1, &asn_PER_memb_referenceFNMSB_constr_3, 0, "referenceFNMSB" }, }; static int asn_MAP_ReferenceFrame_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_ReferenceFrame_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ReferenceFrame_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceFN at 1438 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* referenceFNMSB at 1440 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ReferenceFrame_specs_1 = { sizeof(struct ReferenceFrame), offsetof(struct ReferenceFrame, _asn_ctx), asn_MAP_ReferenceFrame_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_ReferenceFrame_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ReferenceFrame = { "ReferenceFrame", "ReferenceFrame", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ReferenceFrame_tags_1, sizeof(asn_DEF_ReferenceFrame_tags_1) /sizeof(asn_DEF_ReferenceFrame_tags_1[0]), /* 1 */ asn_DEF_ReferenceFrame_tags_1, /* Same as above */ sizeof(asn_DEF_ReferenceFrame_tags_1) /sizeof(asn_DEF_ReferenceFrame_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ReferenceFrame_1, 2, /* Elements count */ &asn_SPC_ReferenceFrame_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpOTDUncertainty.h0000644000175000017500000000174612576764164023506 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ExpOTDUncertainty_H_ #define _ExpOTDUncertainty_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* ExpOTDUncertainty */ typedef long ExpOTDUncertainty_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ExpOTDUncertainty; asn_struct_free_f ExpOTDUncertainty_free; asn_struct_print_f ExpOTDUncertainty_print; asn_constr_check_f ExpOTDUncertainty_constraint; ber_type_decoder_f ExpOTDUncertainty_decode_ber; der_type_encoder_f ExpOTDUncertainty_encode_der; xer_type_decoder_f ExpOTDUncertainty_decode_xer; xer_type_encoder_f ExpOTDUncertainty_encode_xer; per_type_decoder_f ExpOTDUncertainty_decode_uper; per_type_encoder_f ExpOTDUncertainty_encode_uper; #ifdef __cplusplus } #endif #endif /* _ExpOTDUncertainty_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlertFlag.c0000644000175000017500000001102312576764164021776 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AlertFlag.h" int AlertFlag_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void AlertFlag_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void AlertFlag_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { AlertFlag_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int AlertFlag_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t AlertFlag_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t AlertFlag_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t AlertFlag_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t AlertFlag_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t AlertFlag_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t AlertFlag_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { AlertFlag_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_AlertFlag_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_AlertFlag_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_AlertFlag = { "AlertFlag", "AlertFlag", AlertFlag_free, AlertFlag_print, AlertFlag_constraint, AlertFlag_decode_ber, AlertFlag_encode_der, AlertFlag_decode_xer, AlertFlag_encode_xer, AlertFlag_decode_uper, AlertFlag_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AlertFlag_tags_1, sizeof(asn_DEF_AlertFlag_tags_1) /sizeof(asn_DEF_AlertFlag_tags_1[0]), /* 1 */ asn_DEF_AlertFlag_tags_1, /* Same as above */ sizeof(asn_DEF_AlertFlag_tags_1) /sizeof(asn_DEF_AlertFlag_tags_1[0]), /* 1 */ &asn_PER_type_AlertFlag_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ModuloTimeSlot.c0000644000175000017500000001133312576764164023061 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ModuloTimeSlot.h" int ModuloTimeSlot_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void ModuloTimeSlot_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void ModuloTimeSlot_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int ModuloTimeSlot_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t ModuloTimeSlot_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t ModuloTimeSlot_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t ModuloTimeSlot_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t ModuloTimeSlot_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t ModuloTimeSlot_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t ModuloTimeSlot_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ModuloTimeSlot_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_ModuloTimeSlot_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_ModuloTimeSlot_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ModuloTimeSlot = { "ModuloTimeSlot", "ModuloTimeSlot", ModuloTimeSlot_free, ModuloTimeSlot_print, ModuloTimeSlot_constraint, ModuloTimeSlot_decode_ber, ModuloTimeSlot_encode_der, ModuloTimeSlot_decode_xer, ModuloTimeSlot_encode_xer, ModuloTimeSlot_decode_uper, ModuloTimeSlot_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ModuloTimeSlot_tags_1, sizeof(asn_DEF_ModuloTimeSlot_tags_1) /sizeof(asn_DEF_ModuloTimeSlot_tags_1[0]), /* 1 */ asn_DEF_ModuloTimeSlot_tags_1, /* Same as above */ sizeof(asn_DEF_ModuloTimeSlot_tags_1) /sizeof(asn_DEF_ModuloTimeSlot_tags_1[0]), /* 1 */ &asn_PER_type_ModuloTimeSlot_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AssistanceData.c0000644000175000017500000001126112576764164023030 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AssistanceData.h" static asn_TYPE_member_t asn_MBR_AssistanceData_1[] = { { ATF_POINTER, 8, offsetof(struct AssistanceData, referenceAssistData), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceAssistData" }, { ATF_POINTER, 7, offsetof(struct AssistanceData, msrAssistData), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MsrAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrAssistData" }, { ATF_POINTER, 6, offsetof(struct AssistanceData, systemInfoAssistData), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SystemInfoAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoAssistData" }, { ATF_POINTER, 5, offsetof(struct AssistanceData, gps_AssistData), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPS_AssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gps-AssistData" }, { ATF_POINTER, 4, offsetof(struct AssistanceData, moreAssDataToBeSent), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MoreAssDataToBeSent, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "moreAssDataToBeSent" }, { ATF_POINTER, 3, offsetof(struct AssistanceData, extensionContainer), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExtensionContainer, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extensionContainer" }, { ATF_POINTER, 2, offsetof(struct AssistanceData, rel98_AssistanceData_Extension), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel98_AssistanceData_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel98-AssistanceData-Extension" }, { ATF_POINTER, 1, offsetof(struct AssistanceData, rel5_AssistanceData_Extension), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel5_AssistanceData_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel5-AssistanceData-Extension" }, }; static int asn_MAP_AssistanceData_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; static ber_tlv_tag_t asn_DEF_AssistanceData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AssistanceData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceAssistData at 75 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* msrAssistData at 76 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* systemInfoAssistData at 77 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* gps-AssistData at 78 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* moreAssDataToBeSent at 79 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* extensionContainer at 83 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rel98-AssistanceData-Extension at 86 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* rel5-AssistanceData-Extension at 87 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AssistanceData_specs_1 = { sizeof(struct AssistanceData), offsetof(struct AssistanceData, _asn_ctx), asn_MAP_AssistanceData_tag2el_1, 8, /* Count of tags in the map */ asn_MAP_AssistanceData_oms_1, /* Optional members */ 6, 2, /* Root/Additions */ 5, /* Start extensions */ 9 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AssistanceData = { "AssistanceData", "AssistanceData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AssistanceData_tags_1, sizeof(asn_DEF_AssistanceData_tags_1) /sizeof(asn_DEF_AssistanceData_tags_1[0]), /* 1 */ asn_DEF_AssistanceData_tags_1, /* Same as above */ sizeof(asn_DEF_AssistanceData_tags_1) /sizeof(asn_DEF_AssistanceData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AssistanceData_1, 8, /* Elements count */ &asn_SPC_AssistanceData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOWAssistElement.c0000644000175000017500000000645412576764164023675 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSTOWAssistElement.h" static asn_TYPE_member_t asn_MBR_GPSTOWAssistElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GPSTOWAssistElement, satelliteID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satelliteID" }, { ATF_NOFLAGS, 0, offsetof(struct GPSTOWAssistElement, tlmWord), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TLMWord, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tlmWord" }, { ATF_NOFLAGS, 0, offsetof(struct GPSTOWAssistElement, antiSpoof), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AntiSpoofFlag, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "antiSpoof" }, { ATF_NOFLAGS, 0, offsetof(struct GPSTOWAssistElement, alert), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AlertFlag, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "alert" }, { ATF_NOFLAGS, 0, offsetof(struct GPSTOWAssistElement, tlmRsvdBits), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TLMReservedBits, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "tlmRsvdBits" }, }; static ber_tlv_tag_t asn_DEF_GPSTOWAssistElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPSTOWAssistElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* satelliteID at 610 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tlmWord at 611 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* antiSpoof at 612 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* alert at 613 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* tlmRsvdBits at 615 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPSTOWAssistElement_specs_1 = { sizeof(struct GPSTOWAssistElement), offsetof(struct GPSTOWAssistElement, _asn_ctx), asn_MAP_GPSTOWAssistElement_tag2el_1, 5, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPSTOWAssistElement = { "GPSTOWAssistElement", "GPSTOWAssistElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSTOWAssistElement_tags_1, sizeof(asn_DEF_GPSTOWAssistElement_tags_1) /sizeof(asn_DEF_GPSTOWAssistElement_tags_1[0]), /* 1 */ asn_DEF_GPSTOWAssistElement_tags_1, /* Same as above */ sizeof(asn_DEF_GPSTOWAssistElement_tags_1) /sizeof(asn_DEF_GPSTOWAssistElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPSTOWAssistElement_1, 5, /* Elements count */ &asn_SPC_GPSTOWAssistElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistBTS-R98-ExpOTD.c0000644000175000017500000000453512576764164024131 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MsrAssistBTS-R98-ExpOTD.h" static asn_TYPE_member_t asn_MBR_MsrAssistBTS_R98_ExpOTD_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS_R98_ExpOTD, expectedOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExpectedOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "expectedOTD" }, { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS_R98_ExpOTD, expOTDUncertainty), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExpOTDUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "expOTDUncertainty" }, }; static ber_tlv_tag_t asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MsrAssistBTS_R98_ExpOTD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* expectedOTD at 910 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* expOTDUncertainty at 912 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MsrAssistBTS_R98_ExpOTD_specs_1 = { sizeof(struct MsrAssistBTS_R98_ExpOTD), offsetof(struct MsrAssistBTS_R98_ExpOTD, _asn_ctx), asn_MAP_MsrAssistBTS_R98_ExpOTD_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MsrAssistBTS_R98_ExpOTD = { "MsrAssistBTS-R98-ExpOTD", "MsrAssistBTS-R98-ExpOTD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1, sizeof(asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1) /sizeof(asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1) /sizeof(asn_DEF_MsrAssistBTS_R98_ExpOTD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MsrAssistBTS_R98_ExpOTD_1, 2, /* Elements count */ &asn_SPC_MsrAssistBTS_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-SgnElement.h0000644000175000017500000000171312576764164023061 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSS_SgnElement_H_ #define _GANSS_SgnElement_H_ #include /* Including external dependencies */ #include "SVID.h" #include #include "MpathIndic.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSS-SgnElement */ typedef struct GANSS_SgnElement { SVID_t svID; long cNo; MpathIndic_t mpathDet; long *carrierQualityInd /* OPTIONAL */; long codePhase; long *integerCodePhase /* OPTIONAL */; long codePhaseRMSError; long *doppler /* OPTIONAL */; long *adr /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSS_SgnElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSS_SgnElement; #ifdef __cplusplus } #endif #endif /* _GANSS_SgnElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExtensionContainer.h0000644000175000017500000000176412576764164023774 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ExtensionContainer_H_ #define _ExtensionContainer_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* ExtensionContainer */ typedef INTEGER_t ExtensionContainer_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ExtensionContainer; asn_struct_free_f ExtensionContainer_free; asn_struct_print_f ExtensionContainer_print; asn_constr_check_f ExtensionContainer_constraint; ber_type_decoder_f ExtensionContainer_decode_ber; der_type_encoder_f ExtensionContainer_encode_der; xer_type_decoder_f ExtensionContainer_decode_xer; xer_type_encoder_f ExtensionContainer_encode_xer; per_type_decoder_f ExtensionContainer_decode_uper; per_type_encoder_f ExtensionContainer_encode_uper; #ifdef __cplusplus } #endif #endif /* _ExtensionContainer_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-AssistData.h0000644000175000017500000000131112576764164022630 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPS_AssistData_H_ #define _GPS_AssistData_H_ #include /* Including external dependencies */ #include "ControlHeader.h" #include #ifdef __cplusplus extern "C" { #endif /* GPS-AssistData */ typedef struct GPS_AssistData { ControlHeader_t controlHeader; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPS_AssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPS_AssistData; #ifdef __cplusplus } #endif #endif /* _GPS_AssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTime.c0000644000175000017500000000373512576764164021420 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSTime.h" static asn_TYPE_member_t asn_MBR_GPSTime_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GPSTime, gpsTOW23b), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSTOW23b, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTOW23b" }, { ATF_NOFLAGS, 0, offsetof(struct GPSTime, gpsWeek), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSWeek, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsWeek" }, }; static ber_tlv_tag_t asn_DEF_GPSTime_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPSTime_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gpsTOW23b at 594 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gpsWeek at 596 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPSTime_specs_1 = { sizeof(struct GPSTime), offsetof(struct GPSTime, _asn_ctx), asn_MAP_GPSTime_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPSTime = { "GPSTime", "GPSTime", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSTime_tags_1, sizeof(asn_DEF_GPSTime_tags_1) /sizeof(asn_DEF_GPSTime_tags_1[0]), /* 1 */ asn_DEF_GPSTime_tags_1, /* Same as above */ sizeof(asn_DEF_GPSTime_tags_1) /sizeof(asn_DEF_GPSTime_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPSTime_1, 2, /* Elements count */ &asn_SPC_GPSTime_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AdditionalAssistanceData.h0000644000175000017500000000205212576764164025024 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AdditionalAssistanceData_H_ #define _AdditionalAssistanceData_H_ #include /* Including external dependencies */ #include "GPSAssistanceData.h" #include "ExtensionContainer.h" #include "GANSSAssistanceData.h" #include #ifdef __cplusplus extern "C" { #endif /* AdditionalAssistanceData */ typedef struct AdditionalAssistanceData { GPSAssistanceData_t *gpsAssistanceData /* OPTIONAL */; ExtensionContainer_t *extensionContainer /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ GANSSAssistanceData_t *ganssAssistanceData /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AdditionalAssistanceData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AdditionalAssistanceData; #ifdef __cplusplus } #endif #endif /* _AdditionalAssistanceData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BCCHCarrier.h0000644000175000017500000000161412576764164022156 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _BCCHCarrier_H_ #define _BCCHCarrier_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* BCCHCarrier */ typedef long BCCHCarrier_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_BCCHCarrier; asn_struct_free_f BCCHCarrier_free; asn_struct_print_f BCCHCarrier_print; asn_constr_check_f BCCHCarrier_constraint; ber_type_decoder_f BCCHCarrier_decode_ber; der_type_encoder_f BCCHCarrier_encode_der; xer_type_decoder_f BCCHCarrier_decode_xer; xer_type_encoder_f BCCHCarrier_encode_xer; per_type_decoder_f BCCHCarrier_decode_uper; per_type_encoder_f BCCHCarrier_encode_uper; #ifdef __cplusplus } #endif #endif /* _BCCHCarrier_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/xer_support.h0000644000175000017500000000342412576764164022542 0ustar carlescarles/* * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_SUPPORT_H_ #define _XER_SUPPORT_H_ #include /* Platform-specific types */ #ifdef __cplusplus extern "C" { #endif /* * Types of data transferred to the application. */ typedef enum { PXML_TEXT, /* Plain text between XML tags. */ PXML_TAG, /* A tag, starting with '<'. */ PXML_COMMENT, /* An XML comment, including "". */ /* * The following chunk types are reported if the chunk * terminates the specified XML element. */ PXML_TAG_END, /* Tag ended */ PXML_COMMENT_END /* Comment ended */ } pxml_chunk_type_e; /* * Callback function that is called by the parser when parsed data is * available. The _opaque is the pointer to a field containing opaque user * data specified in pxml_create() call. The chunk type is _type and the text * data is the piece of buffer identified by _bufid (as supplied to * pxml_feed() call) starting at offset _offset and of _size bytes size. * The chunk is NOT '\0'-terminated. */ typedef int (pxml_callback_f)(pxml_chunk_type_e _type, const void *_chunk_data, size_t _chunk_size, void *_key); /* * Parse the given buffer as it were a chunk of XML data. * Invoke the specified callback each time the meaninful data is found. * This function returns number of bytes consumed from the bufer. * It will always be lesser than or equal to the specified _size. * The next invocation of this function must account the difference. */ ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, pxml_callback_f *cb, void *_key); #ifdef __cplusplus } #endif #endif /* _XER_SUPPORT_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSDataBit.c0000644000175000017500000001121312576764164022242 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSDataBit.h" int GANSSDataBit_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GANSSDataBit_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GANSSDataBit_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSDataBit_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSDataBit_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSDataBit_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSDataBit_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSDataBit_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSDataBit_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSDataBit_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSDataBit_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSDataBit_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSDataBit_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSDataBit_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSDataBit = { "GANSSDataBit", "GANSSDataBit", GANSSDataBit_free, GANSSDataBit_print, GANSSDataBit_constraint, GANSSDataBit_decode_ber, GANSSDataBit_encode_der, GANSSDataBit_decode_xer, GANSSDataBit_encode_xer, GANSSDataBit_decode_uper, GANSSDataBit_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSDataBit_tags_1, sizeof(asn_DEF_GANSSDataBit_tags_1) /sizeof(asn_DEF_GANSSDataBit_tags_1[0]), /* 1 */ asn_DEF_GANSSDataBit_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSDataBit_tags_1) /sizeof(asn_DEF_GANSSDataBit_tags_1[0]), /* 1 */ &asn_PER_type_GANSSDataBit_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BOOLEAN.h0000644000175000017500000000157312576764164021232 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BOOLEAN_H_ #define _BOOLEAN_H_ #include #ifdef __cplusplus extern "C" { #endif /* * The underlying integer may contain various values, but everything * non-zero is capped to 0xff by the DER encoder. The BER decoder may * yield non-zero values different from 1, beware. */ typedef int BOOLEAN_t; extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; asn_struct_free_f BOOLEAN_free; asn_struct_print_f BOOLEAN_print; ber_type_decoder_f BOOLEAN_decode_ber; der_type_encoder_f BOOLEAN_encode_der; xer_type_decoder_f BOOLEAN_decode_xer; xer_type_encoder_f BOOLEAN_encode_xer; per_type_decoder_f BOOLEAN_decode_uper; per_type_encoder_f BOOLEAN_encode_uper; #ifdef __cplusplus } #endif #endif /* _BOOLEAN_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrPosition-Req.c0000644000175000017500000001130712576764164023155 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MsrPosition-Req.h" static asn_TYPE_member_t asn_MBR_MsrPosition_Req_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MsrPosition_Req, positionInstruct), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PositionInstruct, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "positionInstruct" }, { ATF_POINTER, 7, offsetof(struct MsrPosition_Req, referenceAssistData), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceAssistData" }, { ATF_POINTER, 6, offsetof(struct MsrPosition_Req, msrAssistData), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MsrAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrAssistData" }, { ATF_POINTER, 5, offsetof(struct MsrPosition_Req, systemInfoAssistData), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SystemInfoAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoAssistData" }, { ATF_POINTER, 4, offsetof(struct MsrPosition_Req, gps_AssistData), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPS_AssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gps-AssistData" }, { ATF_POINTER, 3, offsetof(struct MsrPosition_Req, extensionContainer), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExtensionContainer, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extensionContainer" }, { ATF_POINTER, 2, offsetof(struct MsrPosition_Req, rel98_MsrPosition_Req_extension), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel98_MsrPosition_Req_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel98-MsrPosition-Req-extension" }, { ATF_POINTER, 1, offsetof(struct MsrPosition_Req, rel5_MsrPosition_Req_extension), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel5_MsrPosition_Req_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel5-MsrPosition-Req-extension" }, }; static int asn_MAP_MsrPosition_Req_oms_1[] = { 1, 2, 3, 4, 5, 6, 7 }; static ber_tlv_tag_t asn_DEF_MsrPosition_Req_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MsrPosition_Req_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* positionInstruct at 31 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* referenceAssistData at 32 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* msrAssistData at 33 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* systemInfoAssistData at 34 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* gps-AssistData at 35 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* extensionContainer at 36 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rel98-MsrPosition-Req-extension at 39 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* rel5-MsrPosition-Req-extension at 41 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MsrPosition_Req_specs_1 = { sizeof(struct MsrPosition_Req), offsetof(struct MsrPosition_Req, _asn_ctx), asn_MAP_MsrPosition_Req_tag2el_1, 8, /* Count of tags in the map */ asn_MAP_MsrPosition_Req_oms_1, /* Optional members */ 5, 2, /* Root/Additions */ 5, /* Start extensions */ 9 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MsrPosition_Req = { "MsrPosition-Req", "MsrPosition-Req", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MsrPosition_Req_tags_1, sizeof(asn_DEF_MsrPosition_Req_tags_1) /sizeof(asn_DEF_MsrPosition_Req_tags_1[0]), /* 1 */ asn_DEF_MsrPosition_Req_tags_1, /* Same as above */ sizeof(asn_DEF_MsrPosition_Req_tags_1) /sizeof(asn_DEF_MsrPosition_Req_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MsrPosition_Req_1, 8, /* Elements count */ &asn_SPC_MsrPosition_Req_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/xer_decoder.c0000644000175000017500000002101412576764164022421 0ustar carlescarles/* * Copyright (c) 2004, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* XER/XML parsing support */ /* * Decode the XER encoding of a given type. */ asn_dec_rval_t xer_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *buffer, size_t size) { asn_codec_ctx_t s_codec_ctx; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* * Invoke type-specific decoder. */ return td->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); } struct xer__cb_arg { pxml_chunk_type_e chunk_type; size_t chunk_size; const void *chunk_buf; int callback_not_invoked; }; static int xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { struct xer__cb_arg *arg = (struct xer__cb_arg *)key; arg->chunk_type = type; arg->chunk_size = _chunk_size; arg->chunk_buf = _chunk_data; arg->callback_not_invoked = 0; return -1; /* Terminate the XML parsing */ } /* * Fetch the next token from the XER/XML stream. */ ssize_t xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { struct xer__cb_arg arg; int new_stateContext = *stateContext; ssize_t ret; arg.callback_not_invoked = 1; ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); if(ret < 0) return -1; if(arg.callback_not_invoked) { assert(ret == 0); /* No data was consumed */ return 0; /* Try again with more data */ } else { assert(arg.chunk_size); assert(arg.chunk_buf == buffer); } /* * Translate the XML chunk types into more convenient ones. */ switch(arg.chunk_type) { case PXML_TEXT: *ch_type = PXER_TEXT; break; case PXML_TAG: return 0; /* Want more */ case PXML_TAG_END: *ch_type = PXER_TAG; break; case PXML_COMMENT: case PXML_COMMENT_END: *ch_type = PXER_COMMENT; break; } *stateContext = new_stateContext; return arg.chunk_size; } #define CSLASH 0x2f /* '/' */ #define LANGLE 0x3c /* '<' */ #define RANGLE 0x3e /* '>' */ xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { const char *buf = (const char *)buf_ptr; const char *end; xer_check_tag_e ct = XCT_OPENING; if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { if(size >= 2) ASN_DEBUG("Broken XML tag: \"%c...%c\"", buf[0], buf[size - 1]); return XCT_BROKEN; } /* * Determine the tag class. */ if(buf[1] == CSLASH) { buf += 2; /* advance past "" */ ct = XCT_CLOSING; if(size > 0 && buf[size-1] == CSLASH) return XCT_BROKEN; /* */ } else { buf++; /* advance past "<" */ size -= 2; /* strip "<" and ">" */ if(size > 0 && buf[size-1] == CSLASH) { ct = XCT_BOTH; size--; /* One more, for "/" */ } } /* Sometimes we don't care about the tag */ if(!need_tag || !*need_tag) return (xer_check_tag_e)(XCT__UNK__MASK | ct); /* * Determine the tag name. */ for(end = buf + size; buf < end; buf++, need_tag++) { int b = *buf, n = *need_tag; if(b != n) { if(n == 0) { switch(b) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* "": whitespace is normal */ return ct; } } return (xer_check_tag_e)(XCT__UNK__MASK | ct); } if(b == 0) return XCT_BROKEN; /* Embedded 0 in buf?! */ } if(*need_tag) return (xer_check_tag_e)(XCT__UNK__MASK | ct); return ct; } #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = (num_bytes); \ buf_ptr = ((const char *)buf_ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself; \ if(rval.code != RC_OK) \ ASN_DEBUG("Failed with %d", rval.code); \ return rval; \ } while(0) #define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ ssize_t converted_size = body_receiver \ (struct_key, chunk_buf, chunk_size, \ (size_t)chunk_size < size); \ if(converted_size == -1) RETURN(RC_FAIL); \ if(converted_size == 0 \ && size == (size_t)chunk_size) \ RETURN(RC_WMORE); \ chunk_size = converted_size; \ } while(0) #define XER_GOT_EMPTY() do { \ if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ RETURN(RC_FAIL); \ } while(0) /* * Generalized function for decoding the primitive values. */ asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx, /* Type decoder context */ void *struct_key, const char *xml_tag, /* Expected XML tag */ const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_key, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_key, const void *chunk_buf, size_t chunk_size, int have_more) ) { asn_dec_rval_t rval; ssize_t consumed_myself = 0; (void)opt_codec_ctx; /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. */ if(ctx->phase > 1) RETURN(RC_FAIL); for(;;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TEXT: if(ctx->phase == 0) { /* * We have to ignore whitespace here, * but in order to be forward compatible * with EXTENDED-XER (EMBED-VALUES, #25) * any text is just ignored here. */ } else { XER_GOT_BODY(buf_ptr, ch_size, size); } ADVANCE(ch_size); continue; case PXER_TAG: break; /* Check the rest down there */ } } assert(ch_type == PXER_TAG && size); tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); /* * Phase 0: * Expecting the opening tag * for the type being processed. * Phase 1: * Waiting for the closing XML tag. */ switch(tcv) { case XCT_BOTH: if(ctx->phase) break; /* Finished decoding of an empty element */ XER_GOT_EMPTY(); ADVANCE(ch_size); ctx->phase = 2; /* Phase out */ RETURN(RC_OK); case XCT_OPENING: if(ctx->phase) break; ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; case XCT_CLOSING: if(!ctx->phase) break; ADVANCE(ch_size); ctx->phase = 2; /* Phase out */ RETURN(RC_OK); case XCT_UNKNOWN_BO: /* * Certain tags in the body may be expected. */ if(opt_unexpected_tag_decoder && opt_unexpected_tag_decoder(struct_key, buf_ptr, ch_size) >= 0) { /* Tag's processed fine */ ADVANCE(ch_size); if(!ctx->phase) { /* We are not expecting * the closing tag anymore. */ ctx->phase = 2; /* Phase out */ RETURN(RC_OK); } continue; } /* Fall through */ default: break; /* Unexpected tag */ } ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); break; /* Dark and mysterious things have just happened */ } RETURN(RC_FAIL); } int xer_is_whitespace(const void *chunk_buf, size_t chunk_size) { const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; for(; p < pend; p++) { switch(*p) { /* X.693, #8.1.4 * HORISONTAL TAB (9) * LINE FEED (10) * CARRIAGE RETURN (13) * SPACE (32) */ case 0x09: case 0x0a: case 0x0d: case 0x20: break; default: return 0; } } return 1; /* All whitespace */ } /* * This is a vastly simplified, non-validating XML tree skipper. */ int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { assert(*depth > 0); switch(tcv) { case XCT_BOTH: case XCT_UNKNOWN_BO: /* These negate each other. */ return 0; case XCT_OPENING: case XCT_UNKNOWN_OP: ++(*depth); return 0; case XCT_CLOSING: case XCT_UNKNOWN_CL: if(--(*depth) == 0) return (tcv == XCT_CLOSING) ? 2 : 1; return 0; default: return -1; } } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AntiSpoofFlag.h0000644000175000017500000000165212576764164022645 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AntiSpoofFlag_H_ #define _AntiSpoofFlag_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* AntiSpoofFlag */ typedef long AntiSpoofFlag_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AntiSpoofFlag; asn_struct_free_f AntiSpoofFlag_free; asn_struct_print_f AntiSpoofFlag_print; asn_constr_check_f AntiSpoofFlag_constraint; ber_type_decoder_f AntiSpoofFlag_decode_ber; der_type_encoder_f AntiSpoofFlag_encode_der; xer_type_decoder_f AntiSpoofFlag_decode_xer; xer_type_encoder_f AntiSpoofFlag_encode_xer; per_type_decoder_f AntiSpoofFlag_decode_uper; per_type_encoder_f AntiSpoofFlag_encode_uper; #ifdef __cplusplus } #endif #endif /* _AntiSpoofFlag_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel98-MsrPosition-Req-Extension.c0000644000175000017500000000617712576764164026041 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel98-MsrPosition-Req-Extension.h" static asn_TYPE_member_t asn_MBR_Rel98_MsrPosition_Req_Extension_1[] = { { ATF_POINTER, 3, offsetof(struct Rel98_MsrPosition_Req_Extension, rel98_Ext_ExpOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel98_Ext_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel98-Ext-ExpOTD" }, { ATF_POINTER, 2, offsetof(struct Rel98_MsrPosition_Req_Extension, gpsTimeAssistanceMeasurementRequest), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTimeAssistanceMeasurementRequest" }, { ATF_POINTER, 1, offsetof(struct Rel98_MsrPosition_Req_Extension, gpsReferenceTimeUncertainty), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSReferenceTimeUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsReferenceTimeUncertainty" }, }; static int asn_MAP_Rel98_MsrPosition_Req_Extension_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel98_MsrPosition_Req_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rel98-Ext-ExpOTD at 871 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gpsTimeAssistanceMeasurementRequest at 873 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gpsReferenceTimeUncertainty at 874 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel98_MsrPosition_Req_Extension_specs_1 = { sizeof(struct Rel98_MsrPosition_Req_Extension), offsetof(struct Rel98_MsrPosition_Req_Extension, _asn_ctx), asn_MAP_Rel98_MsrPosition_Req_Extension_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_Rel98_MsrPosition_Req_Extension_oms_1, /* Optional members */ 1, 2, /* Root/Additions */ 0, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel98_MsrPosition_Req_Extension = { "Rel98-MsrPosition-Req-Extension", "Rel98-MsrPosition-Req-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1, sizeof(asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1) /sizeof(asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1) /sizeof(asn_DEF_Rel98_MsrPosition_Req_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel98_MsrPosition_Req_Extension_1, 3, /* Elements count */ &asn_SPC_Rel98_MsrPosition_Req_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo-5-Ext.h0000644000175000017500000000210112576764164023700 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MeasureInfo_5_Ext_H_ #define _OTD_MeasureInfo_5_Ext_H_ #include /* Including external dependencies */ #include "SeqOfOTD-MsrElementRest.h" #ifdef __cplusplus extern "C" { #endif /* OTD-MeasureInfo-5-Ext */ typedef SeqOfOTD_MsrElementRest_t OTD_MeasureInfo_5_Ext_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MeasureInfo_5_Ext; asn_struct_free_f OTD_MeasureInfo_5_Ext_free; asn_struct_print_f OTD_MeasureInfo_5_Ext_print; asn_constr_check_f OTD_MeasureInfo_5_Ext_constraint; ber_type_decoder_f OTD_MeasureInfo_5_Ext_decode_ber; der_type_encoder_f OTD_MeasureInfo_5_Ext_encode_der; xer_type_decoder_f OTD_MeasureInfo_5_Ext_decode_xer; xer_type_encoder_f OTD_MeasureInfo_5_Ext_encode_xer; per_type_decoder_f OTD_MeasureInfo_5_Ext_decode_uper; per_type_encoder_f OTD_MeasureInfo_5_Ext_encode_uper; #ifdef __cplusplus } #endif #endif /* _OTD_MeasureInfo_5_Ext_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocationInfo.h0000644000175000017500000000151112576764164022527 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _LocationInfo_H_ #define _LocationInfo_H_ #include /* Including external dependencies */ #include #include "FixType.h" #include "Ext-GeographicalInformation.h" #include #ifdef __cplusplus extern "C" { #endif /* LocationInfo */ typedef struct LocationInfo { long refFrame; long *gpsTOW /* OPTIONAL */; FixType_t fixType; Ext_GeographicalInformation_t posEstimate; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } LocationInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_LocationInfo; #ifdef __cplusplus } #endif #endif /* _LocationInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SVID.c0000644000175000017500000001051612576764164020710 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SVID.h" int SVID_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void SVID_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void SVID_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { SVID_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int SVID_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { SVID_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t SVID_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { SVID_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t SVID_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { SVID_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t SVID_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { SVID_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t SVID_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { SVID_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t SVID_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { SVID_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t SVID_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { SVID_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_SVID_constr_1 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_SVID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_SVID = { "SVID", "SVID", SVID_free, SVID_print, SVID_constraint, SVID_decode_ber, SVID_encode_der, SVID_decode_xer, SVID_encode_xer, SVID_decode_uper, SVID_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SVID_tags_1, sizeof(asn_DEF_SVID_tags_1) /sizeof(asn_DEF_SVID_tags_1[0]), /* 1 */ asn_DEF_SVID_tags_1, /* Same as above */ sizeof(asn_DEF_SVID_tags_1) /sizeof(asn_DEF_SVID_tags_1[0]), /* 1 */ &asn_PER_type_SVID_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BOOLEAN.c0000644000175000017500000001422312576764164021221 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * BOOLEAN basic type description. */ static ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { "BOOLEAN", "BOOLEAN", BOOLEAN_free, BOOLEAN_print, asn_generic_no_constraint, BOOLEAN_decode_ber, BOOLEAN_encode_der, BOOLEAN_decode_xer, BOOLEAN_encode_xer, BOOLEAN_decode_uper, /* Unaligned PER decoder */ BOOLEAN_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_BOOLEAN_tags, sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), asn_DEF_BOOLEAN_tags, /* Same as above */ sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Decode BOOLEAN type. */ asn_dec_rval_t BOOLEAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **bool_value, const void *buf_ptr, size_t size, int tag_mode) { BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; asn_dec_rval_t rval; ber_tlv_len_t length; ber_tlv_len_t lidx; if(st == NULL) { st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); if(st == NULL) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } } ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", td->name, tag_mode); /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("Boolean length is %d bytes", (int)length); buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } /* * Compute boolean value. */ for(*st = 0, lidx = 0; (lidx < length) && *st == 0; lidx++) { /* * Very simple approach: read bytes until the end or * value is already TRUE. * BOOLEAN is not supposed to contain meaningful data anyway. */ *st |= ((const uint8_t *)buf_ptr)[lidx]; } rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", (long)rval.consumed, (long)length, td->name, *st); return rval; } asn_enc_rval_t BOOLEAN_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; BOOLEAN_t *st = (BOOLEAN_t *)sptr; erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = sptr; return erval; } if(cb) { uint8_t bool_value; bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ if(cb(&bool_value, 1, app_key) < 0) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = sptr; return erval; } } erval.encoded += 1; _ASN_ENCODED_OK(erval); } /* * Decode the chunk of XML text encoding INTEGER. */ static enum xer_pbd_rval BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { BOOLEAN_t *st = (BOOLEAN_t *)sptr; const char *p = (const char *)chunk_buf; (void)td; if(chunk_size && p[0] == 0x3c /* '<' */) { switch(xer_check_tag(chunk_buf, chunk_size, "false")) { case XCT_BOTH: /* "" */ *st = 0; break; case XCT_UNKNOWN_BO: if(xer_check_tag(chunk_buf, chunk_size, "true") != XCT_BOTH) return XPBD_BROKEN_ENCODING; /* "" */ *st = 1; /* Or 0xff as in DER?.. */ break; default: return XPBD_BROKEN_ENCODING; } return XPBD_BODY_CONSUMED; } else { if(xer_is_whitespace(chunk_buf, chunk_size)) return XPBD_NOT_BODY_IGNORE; else return XPBD_BROKEN_ENCODING; } } asn_dec_rval_t BOOLEAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, BOOLEAN__xer_body_decode); } asn_enc_rval_t BOOLEAN_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; asn_enc_rval_t er; (void)ilevel; (void)flags; if(!st) _ASN_ENCODE_FAILED; if(*st) { _ASN_CALLBACK("", 7); er.encoded = 7; } else { _ASN_CALLBACK("", 8); er.encoded = 8; } _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } int BOOLEAN_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; const char *buf; size_t buflen; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st) { if(*st) { buf = "TRUE"; buflen = 4; } else { buf = "FALSE"; buflen = 5; } } else { buf = ""; buflen = 8; } return (cb(buf, buflen, app_key) < 0) ? -1 : 0; } void BOOLEAN_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(td && ptr && !contents_only) { FREEMEM(ptr); } } asn_dec_rval_t BOOLEAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; BOOLEAN_t *st = (BOOLEAN_t *)*sptr; (void)opt_codec_ctx; (void)constraints; if(!st) { st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); if(!st) _ASN_DECODE_FAILED; } /* * Extract a single bit */ switch(per_get_few_bits(pd, 1)) { case 1: *st = 1; break; case 0: *st = 0; break; case -1: default: _ASN_DECODE_STARVED; } ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); rv.code = RC_OK; rv.consumed = 1; return rv; } asn_enc_rval_t BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; asn_enc_rval_t er; (void)constraints; if(!st) _ASN_ENCODE_FAILED; per_put_few_bits(po, *st ? 1 : 0, 1); _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constraints.h0000644000175000017500000000365712576764164022527 0ustar carlescarles/*- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _ASN1_CONSTRAINTS_VALIDATOR_H_ #define _ASN1_CONSTRAINTS_VALIDATOR_H_ #include /* Platform-dependent types */ #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Validate the structure according to the ASN.1 constraints. * If errbuf and errlen are given, they shall be pointing to the appropriate * buffer space and its length before calling this function. Alternatively, * they could be passed as NULL's. If constraints validation fails, * errlen will contain the actual number of bytes taken from the errbuf * to encode an error message (properly 0-terminated). * * RETURN VALUES: * This function returns 0 in case all ASN.1 constraints are met * and -1 if one or more constraints were failed. */ int asn_check_constraints(struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, /* Target language's structure */ char *errbuf, /* Returned error description */ size_t *errlen /* Length of the error description */ ); /* * Generic type for constraint checking callback, * associated with every type descriptor. */ typedef int (asn_constr_check_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *optional_callback, /* Log the error */ void *optional_app_key /* Opaque key passed to a callback */ ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ /* * Invoke the callback with a complete error message. */ #define _ASN_CTFAIL if(ctfailcb) ctfailcb #ifdef __cplusplus } #endif #endif /* _ASN1_CONSTRAINTS_VALIDATOR_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceAssistData.c0000644000175000017500000000605312576764164024023 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceAssistData.h" static asn_TYPE_member_t asn_MBR_ReferenceAssistData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ReferenceAssistData, bcchCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BCCHCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bcchCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceAssistData, bsic), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSIC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsic" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceAssistData, timeSlotScheme), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeSlotScheme, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeSlotScheme" }, { ATF_POINTER, 1, offsetof(struct ReferenceAssistData, btsPosition), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BTSPosition, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "btsPosition" }, }; static int asn_MAP_ReferenceAssistData_oms_1[] = { 3 }; static ber_tlv_tag_t asn_DEF_ReferenceAssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ReferenceAssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bcchCarrier at 157 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bsic at 158 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* timeSlotScheme at 159 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* btsPosition at 160 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ReferenceAssistData_specs_1 = { sizeof(struct ReferenceAssistData), offsetof(struct ReferenceAssistData, _asn_ctx), asn_MAP_ReferenceAssistData_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_ReferenceAssistData_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ReferenceAssistData = { "ReferenceAssistData", "ReferenceAssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ReferenceAssistData_tags_1, sizeof(asn_DEF_ReferenceAssistData_tags_1) /sizeof(asn_DEF_ReferenceAssistData_tags_1[0]), /* 1 */ asn_DEF_ReferenceAssistData_tags_1, /* Same as above */ sizeof(asn_DEF_ReferenceAssistData_tags_1) /sizeof(asn_DEF_ReferenceAssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ReferenceAssistData_1, 4, /* Elements count */ &asn_SPC_ReferenceAssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NULL.c0000644000175000017500000000651512576764164020721 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include /* Implemented in terms of BOOLEAN type */ /* * NULL basic type description. */ static ber_tlv_tag_t asn_DEF_NULL_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NULL = { "NULL", "NULL", BOOLEAN_free, NULL_print, asn_generic_no_constraint, BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */ NULL_encode_der, /* Special handling of DER encoding */ NULL_decode_xer, NULL_encode_xer, NULL_decode_uper, /* Unaligned PER decoder */ NULL_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_NULL_tags, sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), asn_DEF_NULL_tags, /* Same as above */ sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn_enc_rval_t NULL_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = ptr; } _ASN_ENCODED_OK(erval); } asn_enc_rval_t NULL_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; (void)td; (void)sptr; (void)ilevel; (void)flags; (void)cb; (void)app_key; /* XMLNullValue is empty */ er.encoded = 0; _ASN_ENCODED_OK(er); } static enum xer_pbd_rval NULL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { (void)td; (void)sptr; if(xer_is_whitespace(chunk_buf, chunk_size)) return XPBD_BODY_CONSUMED; else return XPBD_BROKEN_ENCODING; } asn_dec_rval_t NULL_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(NULL_t), opt_mname, buf_ptr, size, NULL__xer_body_decode); } int NULL_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(sptr) { return (cb("", 9, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } asn_dec_rval_t NULL_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; (void)opt_codec_ctx; (void)td; (void)constraints; (void)pd; if(!*sptr) { *sptr = MALLOC(sizeof(NULL_t)); if(*sptr) { *(NULL_t *)*sptr = 0; } else { _ASN_DECODE_FAILED; } } /* * NULL type does not have content octets. */ rv.code = RC_OK; rv.consumed = 0; return rv; } asn_enc_rval_t NULL_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_enc_rval_t er; (void)td; (void)constraints; (void)sptr; (void)po; er.encoded = 0; _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfMsrAssistBTS.c0000644000175000017500000000332112576764164023376 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfMsrAssistBTS.h" static asn_per_constraints_t asn_PER_type_SeqOfMsrAssistBTS_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfMsrAssistBTS_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_MsrAssistBTS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfMsrAssistBTS_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfMsrAssistBTS_specs_1 = { sizeof(struct SeqOfMsrAssistBTS), offsetof(struct SeqOfMsrAssistBTS, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfMsrAssistBTS = { "SeqOfMsrAssistBTS", "SeqOfMsrAssistBTS", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfMsrAssistBTS_tags_1, sizeof(asn_DEF_SeqOfMsrAssistBTS_tags_1) /sizeof(asn_DEF_SeqOfMsrAssistBTS_tags_1[0]), /* 1 */ asn_DEF_SeqOfMsrAssistBTS_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfMsrAssistBTS_tags_1) /sizeof(asn_DEF_SeqOfMsrAssistBTS_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfMsrAssistBTS_constr_1, asn_MBR_SeqOfMsrAssistBTS_1, 1, /* Single element */ &asn_SPC_SeqOfMsrAssistBTS_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_opentype.c0000644000175000017500000002167312576764164022662 0ustar carlescarles/* * Copyright (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include typedef struct uper_ugot_key { asn_per_data_t oldpd; /* Old per data source */ size_t unclaimed; size_t ot_moved; /* Number of bits moved by OT processing */ int repeat; } uper_ugot_key; static int uper_ugot_refill(asn_per_data_t *pd); static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); int asn_debug_indent; /* * Encode an "open type field". * #10.1, #10.2 */ int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { void *buf; void *bptr; ssize_t size; size_t toGo; ASN_DEBUG("Open type put %s ...", td->name); size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); if(size <= 0) return -1; for(bptr = buf, toGo = size; toGo;) { ssize_t maySave = uper_put_length(po, toGo); if(maySave < 0) break; if(per_put_many_bits(po, bptr, maySave * 8)) break; bptr = (char *)bptr + maySave; toGo -= maySave; } FREEMEM(buf); if(toGo) return -1; ASN_DEBUG("Open type put %s of length %d + overhead (1byte?)", td->name, size); return 0; } static asn_dec_rval_t uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; ssize_t chunk_bytes; int repeat; uint8_t *buf = 0; size_t bufLen = 0; size_t bufSize = 0; asn_per_data_t spd; size_t padding; _ASN_STACK_OVERFLOW_CHECK(ctx); ASN_DEBUG("Getting open type %s...", td->name); do { chunk_bytes = uper_get_length(pd, -1, &repeat); if(chunk_bytes < 0) { FREEMEM(buf); _ASN_DECODE_STARVED; } if(bufLen + chunk_bytes > bufSize) { void *ptr; bufSize = chunk_bytes + (bufSize << 2); ptr = REALLOC(buf, bufSize); if(!ptr) { FREEMEM(buf); _ASN_DECODE_FAILED; } buf = ptr; } if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { FREEMEM(buf); _ASN_DECODE_STARVED; } bufLen += chunk_bytes; } while(repeat); ASN_DEBUG("Getting open type %s encoded in %d bytes", td->name, bufLen); memset(&spd, 0, sizeof(spd)); spd.buffer = buf; spd.nbits = bufLen << 3; asn_debug_indent += 4; rv = td->uper_decoder(ctx, td, constraints, sptr, &spd); asn_debug_indent -= 4; if(rv.code == RC_OK) { /* Check padding validity */ padding = spd.nbits - spd.nboff; if(padding < 8 && per_get_few_bits(&spd, padding) == 0) { /* Everything is cool */ FREEMEM(buf); return rv; } FREEMEM(buf); if(padding >= 8) { ASN_DEBUG("Too large padding %d in open type", padding); _ASN_DECODE_FAILED; } else { ASN_DEBUG("Non-zero padding"); _ASN_DECODE_FAILED; } } else { FREEMEM(buf); /* rv.code could be RC_WMORE, nonsense in this context */ rv.code = RC_FAIL; /* Noone would give us more */ } return rv; } static asn_dec_rval_t GCC_NOTUSED uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { uper_ugot_key arg; asn_dec_rval_t rv; ssize_t padding; _ASN_STACK_OVERFLOW_CHECK(ctx); ASN_DEBUG("Getting open type %s from %s", td->name, per_data_string(pd)); arg.oldpd = *pd; arg.unclaimed = 0; arg.ot_moved = 0; arg.repeat = 1; pd->refill = uper_ugot_refill; pd->refill_key = &arg; pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ pd->moved = 0; /* This now counts the open type size in bits */ asn_debug_indent += 4; rv = td->uper_decoder(ctx, td, constraints, sptr, pd); asn_debug_indent -= 4; #define UPDRESTOREPD do { \ /* buffer and nboff are valid, preserve them. */ \ pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ pd->refill = arg.oldpd.refill; \ pd->refill_key = arg.oldpd.refill_key; \ } while(0) if(rv.code != RC_OK) { UPDRESTOREPD; return rv; } ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d" , td->name, per_data_string(pd), per_data_string(&arg.oldpd), arg.unclaimed, arg.repeat); padding = pd->moved % 8; if(padding) { int32_t pvalue; if(padding > 7) { ASN_DEBUG("Too large padding %d in open type", padding); rv.code = RC_FAIL; UPDRESTOREPD; return rv; } padding = 8 - padding; ASN_DEBUG("Getting padding of %d bits", padding); pvalue = per_get_few_bits(pd, padding); switch(pvalue) { case -1: ASN_DEBUG("Padding skip failed"); UPDRESTOREPD; _ASN_DECODE_STARVED; case 0: break; default: ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", padding, (int)pvalue); UPDRESTOREPD; _ASN_DECODE_FAILED; } } if(pd->nboff != pd->nbits) { ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, per_data_string(pd), per_data_string(&arg.oldpd)); if(1) { UPDRESTOREPD; _ASN_DECODE_FAILED; } else { arg.unclaimed += pd->nbits - pd->nboff; } } /* Adjust pd back so it points to original data */ UPDRESTOREPD; /* Skip data not consumed by the decoder */ if(arg.unclaimed) ASN_DEBUG("Getting unclaimed %d", arg.unclaimed); if(arg.unclaimed) { switch(per_skip_bits(pd, arg.unclaimed)) { case -1: ASN_DEBUG("Claim of %d failed", arg.unclaimed); _ASN_DECODE_STARVED; case 0: ASN_DEBUG("Got claim of %d", arg.unclaimed); break; default: /* Padding must be blank */ ASN_DEBUG("Non-blank unconsumed padding"); _ASN_DECODE_FAILED; } arg.unclaimed = 0; } if(arg.repeat) { ASN_DEBUG("Not consumed the whole thing"); rv.code = RC_FAIL; return rv; } return rv; } asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); } int uper_open_type_skip(asn_codec_ctx_t *ctx, asn_per_data_t *pd) { asn_TYPE_descriptor_t s_td; asn_dec_rval_t rv; s_td.name = ""; s_td.uper_decoder = uper_sot_suck; rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); if(rv.code != RC_OK) return -1; else return 0; } /* * Internal functions. */ static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; (void)ctx; (void)td; (void)constraints; (void)sptr; while(per_get_few_bits(pd, 24) >= 0); rv.code = RC_OK; rv.consumed = pd->moved; return rv; } static int uper_ugot_refill(asn_per_data_t *pd) { uper_ugot_key *arg = pd->refill_key; ssize_t next_chunk_bytes, next_chunk_bits; ssize_t avail; asn_per_data_t *oldpd = &arg->oldpd; ASN_DEBUG("REFILLING pd->moved=%d, oldpd->moved=%d", pd->moved, oldpd->moved); /* Advance our position to where pd is */ oldpd->buffer = pd->buffer; oldpd->nboff = pd->nboff; oldpd->nbits -= pd->moved - arg->ot_moved; oldpd->moved += pd->moved - arg->ot_moved; arg->ot_moved = pd->moved; if(arg->unclaimed) { /* Refill the container */ if(per_get_few_bits(oldpd, 1)) return -1; if(oldpd->nboff == 0) { assert(0); return -1; } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff - 1; pd->nbits = oldpd->nbits; ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%d)", pd->moved); return 0; } if(!arg->repeat) { ASN_DEBUG("Want more but refill doesn't have it"); return -1; } next_chunk_bytes = uper_get_length(oldpd, -1, &arg->repeat); ASN_DEBUG("Open type LENGTH %d bytes at off %d, repeat %d", next_chunk_bytes, oldpd->moved, arg->repeat); if(next_chunk_bytes < 0) return -1; if(next_chunk_bytes == 0) { pd->refill = 0; /* No more refills, naturally */ assert(!arg->repeat); /* Implementation guarantee */ } next_chunk_bits = next_chunk_bytes << 3; avail = oldpd->nbits - oldpd->nboff; if(avail >= next_chunk_bits) { pd->nbits = oldpd->nboff + next_chunk_bits; arg->unclaimed = 0; ASN_DEBUG("!+Parent frame %d bits, alloting %d [%d..%d] (%d)", next_chunk_bits, oldpd->moved, oldpd->nboff, oldpd->nbits, oldpd->nbits - oldpd->nboff); } else { pd->nbits = oldpd->nbits; arg->unclaimed = next_chunk_bits - avail; ASN_DEBUG("!-Parent frame %d, require %d, will claim %d", avail, next_chunk_bits, arg->unclaimed); } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff; ASN_DEBUG("Refilled pd%s old%s", per_data_string(pd), per_data_string(oldpd)); return 0; } static int per_skip_bits(asn_per_data_t *pd, int skip_nbits) { int hasNonZeroBits = 0; while(skip_nbits > 0) { int skip; if(skip_nbits < skip) skip = skip_nbits; else skip = 24; skip_nbits -= skip; switch(per_get_few_bits(pd, skip)) { case -1: return -1; /* Starving */ case 0: continue; /* Skipped empty space */ default: hasNonZeroBits = 1; continue; } } return hasNonZeroBits; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpectedOTD.c0000644000175000017500000001115612576764164022254 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ExpectedOTD.h" int ExpectedOTD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1250)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void ExpectedOTD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void ExpectedOTD_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ExpectedOTD_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int ExpectedOTD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t ExpectedOTD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t ExpectedOTD_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t ExpectedOTD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t ExpectedOTD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t ExpectedOTD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t ExpectedOTD_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ExpectedOTD_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_ExpectedOTD_constr_1 = { { APC_CONSTRAINED, 11, 11, 0, 1250 } /* (0..1250) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_ExpectedOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ExpectedOTD = { "ExpectedOTD", "ExpectedOTD", ExpectedOTD_free, ExpectedOTD_print, ExpectedOTD_constraint, ExpectedOTD_decode_ber, ExpectedOTD_encode_der, ExpectedOTD_decode_xer, ExpectedOTD_encode_xer, ExpectedOTD_decode_uper, ExpectedOTD_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ExpectedOTD_tags_1, sizeof(asn_DEF_ExpectedOTD_tags_1) /sizeof(asn_DEF_ExpectedOTD_tags_1[0]), /* 1 */ asn_DEF_ExpectedOTD_tags_1, /* Same as above */ sizeof(asn_DEF_ExpectedOTD_tags_1) /sizeof(asn_DEF_ExpectedOTD_tags_1[0]), /* 1 */ &asn_PER_type_ExpectedOTD_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-ControlHeader.c0000644000175000017500000000470212576764164023545 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSS-ControlHeader.h" static asn_TYPE_member_t asn_MBR_GANSS_ControlHeader_1[] = { { ATF_POINTER, 2, offsetof(struct GANSS_ControlHeader, ganssCommonAssistData), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSCommonAssistData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssCommonAssistData" }, { ATF_POINTER, 1, offsetof(struct GANSS_ControlHeader, ganssGenericAssistDataList), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSSGenericAssistDataElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssGenericAssistDataList" }, }; static int asn_MAP_GANSS_ControlHeader_oms_1[] = { 0, 1 }; static ber_tlv_tag_t asn_DEF_GANSS_ControlHeader_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSS_ControlHeader_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssCommonAssistData at 1065 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ganssGenericAssistDataList at 1066 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSS_ControlHeader_specs_1 = { sizeof(struct GANSS_ControlHeader), offsetof(struct GANSS_ControlHeader, _asn_ctx), asn_MAP_GANSS_ControlHeader_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_GANSS_ControlHeader_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSS_ControlHeader = { "GANSS-ControlHeader", "GANSS-ControlHeader", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSS_ControlHeader_tags_1, sizeof(asn_DEF_GANSS_ControlHeader_tags_1) /sizeof(asn_DEF_GANSS_ControlHeader_tags_1[0]), /* 1 */ asn_DEF_GANSS_ControlHeader_tags_1, /* Same as above */ sizeof(asn_DEF_GANSS_ControlHeader_tags_1) /sizeof(asn_DEF_GANSS_ControlHeader_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSS_ControlHeader_1, 2, /* Elements count */ &asn_SPC_GANSS_ControlHeader_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfAlmanacElement.c0000644000175000017500000000337112576764164023750 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfAlmanacElement.h" static asn_per_constraints_t asn_PER_type_SeqOfAlmanacElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfAlmanacElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_AlmanacElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfAlmanacElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfAlmanacElement_specs_1 = { sizeof(struct SeqOfAlmanacElement), offsetof(struct SeqOfAlmanacElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfAlmanacElement = { "SeqOfAlmanacElement", "SeqOfAlmanacElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfAlmanacElement_tags_1, sizeof(asn_DEF_SeqOfAlmanacElement_tags_1) /sizeof(asn_DEF_SeqOfAlmanacElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfAlmanacElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfAlmanacElement_tags_1) /sizeof(asn_DEF_SeqOfAlmanacElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfAlmanacElement_constr_1, asn_MBR_SeqOfAlmanacElement_1, 1, /* Single element */ &asn_SPC_SeqOfAlmanacElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/StdResolution.h0000644000175000017500000000165212576764164022767 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _StdResolution_H_ #define _StdResolution_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* StdResolution */ typedef long StdResolution_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_StdResolution; asn_struct_free_f StdResolution_free; asn_struct_print_f StdResolution_print; asn_constr_check_f StdResolution_constraint; ber_type_decoder_f StdResolution_decode_ber; der_type_encoder_f StdResolution_encode_der; xer_type_decoder_f StdResolution_decode_xer; xer_type_encoder_f StdResolution_encode_xer; per_type_decoder_f StdResolution_decode_uper; per_type_encoder_f StdResolution_encode_uper; #ifdef __cplusplus } #endif #endif /* _StdResolution_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_SEQUENCE_OF.c0000644000175000017500000000156012576764164022577 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include typedef A_SEQUENCE_OF(void) asn_sequence; void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { asn_sequence *as = (asn_sequence *)asn_sequence_of_x; if(as) { void *ptr; int n; if(number < 0 || number >= as->count) return; /* Nothing to delete */ if(_do_free && as->free) { ptr = as->array[number]; } else { ptr = 0; } /* * Shift all elements to the left to hide the gap. */ --as->count; for(n = number; n < as->count; n++) as->array[n] = as->array[n+1]; /* * Invoke the third-party function only when the state * of the parent structure is consistent. */ if(ptr) as->free(ptr); } } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-MsrElementRest.h0000644000175000017500000000162212576764164024441 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfOTD_MsrElementRest_H_ #define _SeqOfOTD_MsrElementRest_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct OTD_MsrElementRest; /* SeqOfOTD-MsrElementRest */ typedef struct SeqOfOTD_MsrElementRest { A_SEQUENCE_OF(struct OTD_MsrElementRest) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfOTD_MsrElementRest_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_MsrElementRest; #ifdef __cplusplus } #endif /* Referred external types */ #include "OTD-MsrElementRest.h" #endif /* _SeqOfOTD_MsrElementRest_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSDiffCorrections.h0000644000175000017500000000145612576764164024032 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSDiffCorrections_H_ #define _GANSSDiffCorrections_H_ #include /* Including external dependencies */ #include #include "SeqOfSgnTypeElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSDiffCorrections */ typedef struct GANSSDiffCorrections { long dganssRefTime; SeqOfSgnTypeElement_t sgnTypeList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSDiffCorrections_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSDiffCorrections; #ifdef __cplusplus } #endif #endif /* _GANSSDiffCorrections_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelDistance.c0000644000175000017500000001120412576764164022333 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RelDistance.h" int RelDistance_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -200000 && value <= 200000)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void RelDistance_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void RelDistance_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { RelDistance_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int RelDistance_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { RelDistance_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t RelDistance_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { RelDistance_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t RelDistance_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { RelDistance_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t RelDistance_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { RelDistance_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t RelDistance_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { RelDistance_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t RelDistance_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { RelDistance_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t RelDistance_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { RelDistance_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_RelDistance_constr_1 = { { APC_CONSTRAINED, 19, -1, -200000, 200000 } /* (-200000..200000) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_RelDistance_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_RelDistance = { "RelDistance", "RelDistance", RelDistance_free, RelDistance_print, RelDistance_constraint, RelDistance_decode_ber, RelDistance_encode_der, RelDistance_decode_xer, RelDistance_encode_xer, RelDistance_decode_uper, RelDistance_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RelDistance_tags_1, sizeof(asn_DEF_RelDistance_tags_1) /sizeof(asn_DEF_RelDistance_tags_1[0]), /* 1 */ asn_DEF_RelDistance_tags_1, /* Same as above */ sizeof(asn_DEF_RelDistance_tags_1) /sizeof(asn_DEF_RelDistance_tags_1[0]), /* 1 */ &asn_PER_type_RelDistance_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FrameDrift.h0000644000175000017500000000157512576764164022200 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _FrameDrift_H_ #define _FrameDrift_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* FrameDrift */ typedef long FrameDrift_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FrameDrift; asn_struct_free_f FrameDrift_free; asn_struct_print_f FrameDrift_print; asn_constr_check_f FrameDrift_constraint; ber_type_decoder_f FrameDrift_decode_ber; der_type_encoder_f FrameDrift_encode_der; xer_type_decoder_f FrameDrift_decode_xer; xer_type_encoder_f FrameDrift_encode_xer; per_type_decoder_f FrameDrift_decode_uper; per_type_encoder_f FrameDrift_encode_uper; #ifdef __cplusplus } #endif #endif /* _FrameDrift_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/xer_support.c0000644000175000017500000001265512576764164022543 0ustar carlescarles/* * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include /* Parser states */ typedef enum { ST_TEXT, ST_TAG_START, ST_TAG_BODY, ST_TAG_QUOTE_WAIT, ST_TAG_QUOTED_STRING, ST_TAG_UNQUOTED_STRING, ST_COMMENT_WAIT_DASH1, /* ""[0] */ ST_COMMENT_CLO_RT /* "-->"[1] */ } pstate_e; static pxml_chunk_type_e final_chunk_type[] = { PXML_TEXT, PXML_TAG_END, PXML_COMMENT_END, PXML_TAG_END, PXML_COMMENT_END, }; static int _charclass[256] = { 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ }; #define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) #define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) #define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) /* Aliases for characters, ASCII/UTF-8 */ #define EXCLAM 0x21 /* '!' */ #define CQUOTE 0x22 /* '"' */ #define CDASH 0x2d /* '-' */ #define CSLASH 0x2f /* '/' */ #define LANGLE 0x3c /* '<' */ #define CEQUAL 0x3d /* '=' */ #define RANGLE 0x3e /* '>' */ #define CQUEST 0x3f /* '?' */ /* Invoke token callback */ #define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ int _ret; \ pstate_e ns = _ns; \ ssize_t _sz = (p - chunk_start) + _current_too; \ if (!_sz) { \ /* Shortcut */ \ state = _ns; \ break; \ } \ _ret = cb(type, chunk_start, _sz, key); \ if(_ret < _sz) { \ if(_current_too && _ret == -1) \ state = ns; \ goto finish; \ } \ chunk_start = p + _current_too; \ state = ns; \ } while(0) #define TOKEN_CB(_type, _ns, _current_too) \ TOKEN_CB_CALL(_type, _ns, _current_too, 0) #define TOKEN_CB_FINAL(_type, _ns, _current_too) \ TOKEN_CB_CALL(final_chunk_type[_type], _ns, _current_too, 1) /* * Parser itself */ ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { pstate_e state = (pstate_e)*stateContext; const char *chunk_start = (const char *)xmlbuf; const char *p = chunk_start; const char *end = p + size; for(; p < end; p++) { int C = *(const unsigned char *)p; switch(state) { case ST_TEXT: /* * Initial state: we're in the middle of some text, * or just have started. */ if (C == LANGLE) /* We're now in the tag, probably */ TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); break; case ST_TAG_START: if (ALPHA(C) || (C == CSLASH)) state = ST_TAG_BODY; else if (C == EXCLAM) state = ST_COMMENT_WAIT_DASH1; else /* * Not characters and not whitespace. * Must be something like "3 < 4". */ TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ break; case ST_TAG_BODY: switch(C) { case RANGLE: /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); break; case LANGLE: /* * The previous tag wasn't completed, but still * recognized as valid. (Mozilla-compatible) */ TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); break; case CEQUAL: state = ST_TAG_QUOTE_WAIT; break; } break; case ST_TAG_QUOTE_WAIT: /* * State after the equal sign ("=") in the tag. */ switch(C) { case CQUOTE: state = ST_TAG_QUOTED_STRING; break; case RANGLE: /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); break; default: if(!WHITESPACE(C)) /* Unquoted string value */ state = ST_TAG_UNQUOTED_STRING; } break; case ST_TAG_QUOTED_STRING: /* * Tag attribute's string value in quotes. */ if(C == CQUOTE) { /* Return back to the tag state */ state = ST_TAG_BODY; } break; case ST_TAG_UNQUOTED_STRING: if(C == RANGLE) { /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); } else if(WHITESPACE(C)) { /* Return back to the tag state */ state = ST_TAG_BODY; } break; case ST_COMMENT_WAIT_DASH1: if(C == CDASH) { state = ST_COMMENT_WAIT_DASH2; } else { /* Some ordinary tag. */ state = ST_TAG_BODY; } break; case ST_COMMENT_WAIT_DASH2: if(C == CDASH) { /* Seen "<--" */ state = ST_COMMENT; } else { /* Some ordinary tag */ state = ST_TAG_BODY; } break; case ST_COMMENT: if(C == CDASH) { state = ST_COMMENT_CLO_DASH2; } break; case ST_COMMENT_CLO_DASH2: if(C == CDASH) { state = ST_COMMENT_CLO_RT; } else { /* This is not an end of a comment */ state = ST_COMMENT; } break; case ST_COMMENT_CLO_RT: if(C == RANGLE) { TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); } else if(C == CDASH) { /* Maintain current state, still waiting for '>' */ } else { state = ST_COMMENT; } break; } /* switch(*ptr) */ } /* for() */ /* * Flush the partially processed chunk, state permitting. */ if(p - chunk_start) { switch (state) { case ST_COMMENT: TOKEN_CB(PXML_COMMENT, state, 0); break; case ST_TEXT: TOKEN_CB(PXML_TEXT, state, 0); break; default: break; /* a no-op */ } } finish: *stateContext = (int)state; return chunk_start - (const char *)xmlbuf; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NavModel-KeplerianSet.h0000644000175000017500000000201712576764164024236 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _NavModel_KeplerianSet_H_ #define _NavModel_KeplerianSet_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* NavModel-KeplerianSet */ typedef struct NavModel_KeplerianSet { long keplerToeLSB; long keplerW; long keplerDeltaN; long keplerM0; long keplerOmegaDot; long keplerELSB; long keplerIDot; long keplerAPowerHalfLSB; long keplerI0; long keplerOmega0; long keplerCrs; long keplerCis; long keplerCus; long keplerCrc; long keplerCic; long keplerCuc; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } NavModel_KeplerianSet_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NavModel_KeplerianSet; #ifdef __cplusplus } #endif #endif /* _NavModel_KeplerianSet_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UseMultipleSets.h0000644000175000017500000000212412576764164023253 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _UseMultipleSets_H_ #define _UseMultipleSets_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum UseMultipleSets { UseMultipleSets_multipleSets = 0, UseMultipleSets_oneSet = 1 } e_UseMultipleSets; /* UseMultipleSets */ typedef ENUMERATED_t UseMultipleSets_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_UseMultipleSets; asn_struct_free_f UseMultipleSets_free; asn_struct_print_f UseMultipleSets_print; asn_constr_check_f UseMultipleSets_constraint; ber_type_decoder_f UseMultipleSets_decode_ber; der_type_encoder_f UseMultipleSets_encode_der; xer_type_decoder_f UseMultipleSets_decode_xer; xer_type_encoder_f UseMultipleSets_encode_xer; per_type_decoder_f UseMultipleSets_decode_uper; per_type_encoder_f UseMultipleSets_encode_uper; #ifdef __cplusplus } #endif #endif /* _UseMultipleSets_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSAssistanceData.c0000644000175000017500000001157412576764164023411 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSAssistanceData.h" int GPSAssistanceData_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 40)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using OCTET_STRING, * so here we adjust the DEF accordingly. */ static void GPSAssistanceData_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_OCTET_STRING.free_struct; td->print_struct = asn_DEF_OCTET_STRING.print_struct; td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; td->elements = asn_DEF_OCTET_STRING.elements; td->elements_count = asn_DEF_OCTET_STRING.elements_count; td->specifics = asn_DEF_OCTET_STRING.specifics; } void GPSAssistanceData_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GPSAssistanceData_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GPSAssistanceData_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GPSAssistanceData_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GPSAssistanceData_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GPSAssistanceData_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GPSAssistanceData_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GPSAssistanceData_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GPSAssistanceData_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GPSAssistanceData_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 40 } /* (SIZE(1..40)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GPSAssistanceData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GPSAssistanceData = { "GPSAssistanceData", "GPSAssistanceData", GPSAssistanceData_free, GPSAssistanceData_print, GPSAssistanceData_constraint, GPSAssistanceData_decode_ber, GPSAssistanceData_encode_der, GPSAssistanceData_decode_xer, GPSAssistanceData_encode_xer, GPSAssistanceData_decode_uper, GPSAssistanceData_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSAssistanceData_tags_1, sizeof(asn_DEF_GPSAssistanceData_tags_1) /sizeof(asn_DEF_GPSAssistanceData_tags_1[0]), /* 1 */ asn_DEF_GPSAssistanceData_tags_1, /* Same as above */ sizeof(asn_DEF_GPSAssistanceData_tags_1) /sizeof(asn_DEF_GPSAssistanceData_tags_1[0]), /* 1 */ &asn_PER_type_GPSAssistanceData_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSatElement.c0000644000175000017500000000325112576764164023140 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfSatElement.h" static asn_per_constraints_t asn_PER_type_SeqOfSatElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfSatElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_SatElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfSatElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfSatElement_specs_1 = { sizeof(struct SeqOfSatElement), offsetof(struct SeqOfSatElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfSatElement = { "SeqOfSatElement", "SeqOfSatElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfSatElement_tags_1, sizeof(asn_DEF_SeqOfSatElement_tags_1) /sizeof(asn_DEF_SeqOfSatElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfSatElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfSatElement_tags_1) /sizeof(asn_DEF_SeqOfSatElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfSatElement_constr_1, asn_MBR_SeqOfSatElement_1, 1, /* Single element */ &asn_SPC_SeqOfSatElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-FirstSetMsrs.h0000644000175000017500000000176212576764164023207 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_FirstSetMsrs_H_ #define _OTD_FirstSetMsrs_H_ #include /* Including external dependencies */ #include "OTD-MeasurementWithID.h" #ifdef __cplusplus extern "C" { #endif /* OTD-FirstSetMsrs */ typedef OTD_MeasurementWithID_t OTD_FirstSetMsrs_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_FirstSetMsrs; asn_struct_free_f OTD_FirstSetMsrs_free; asn_struct_print_f OTD_FirstSetMsrs_print; asn_constr_check_f OTD_FirstSetMsrs_constraint; ber_type_decoder_f OTD_FirstSetMsrs_decode_ber; der_type_encoder_f OTD_FirstSetMsrs_encode_der; xer_type_decoder_f OTD_FirstSetMsrs_decode_xer; xer_type_encoder_f OTD_FirstSetMsrs_encode_xer; per_type_decoder_f OTD_FirstSetMsrs_decode_uper; per_type_encoder_f OTD_FirstSetMsrs_encode_uper; #ifdef __cplusplus } #endif #endif /* _OTD_FirstSetMsrs_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RefLocation.h0000644000175000017500000000132112576764164022347 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RefLocation_H_ #define _RefLocation_H_ #include /* Including external dependencies */ #include "Ext-GeographicalInformation.h" #include #ifdef __cplusplus extern "C" { #endif /* RefLocation */ typedef struct RefLocation { Ext_GeographicalInformation_t threeDLocation; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } RefLocation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RefLocation; #ifdef __cplusplus } #endif #endif /* _RefLocation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel98-Ext-ExpOTD.h0000644000175000017500000000202612576764164022707 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel98_Ext_ExpOTD_H_ #define _Rel98_Ext_ExpOTD_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct MsrAssistData_R98_ExpOTD; struct SystemInfoAssistData_R98_ExpOTD; /* Rel98-Ext-ExpOTD */ typedef struct Rel98_Ext_ExpOTD { struct MsrAssistData_R98_ExpOTD *msrAssistData_R98_ExpOTD /* OPTIONAL */; struct SystemInfoAssistData_R98_ExpOTD *systemInfoAssistData_R98_ExpOTD /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel98_Ext_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel98_Ext_ExpOTD; #ifdef __cplusplus } #endif /* Referred external types */ #include "MsrAssistData-R98-ExpOTD.h" #include "SystemInfoAssistData-R98-ExpOTD.h" #endif /* _Rel98_Ext_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/StandardClockModelElement.c0000644000175000017500000002041412576764164025150 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "StandardClockModelElement.h" static int memb_stanClockTocLSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 511)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stanClockAF2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -2048 && value <= 2047)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stanClockAF1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -131072 && value <= 131071)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stanClockAF0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -134217728 && value <= 134217727)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stanClockTgd_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -512 && value <= 511)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stanModelID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_stanClockTocLSB_constr_2 = { { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stanClockAF2_constr_3 = { { APC_CONSTRAINED, 12, 12, -2048, 2047 } /* (-2048..2047) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stanClockAF1_constr_4 = { { APC_CONSTRAINED, 18, -1, -131072, 131071 } /* (-131072..131071) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stanClockAF0_constr_5 = { { APC_CONSTRAINED, 28, -1, -134217728, 134217727 } /* (-134217728..134217727) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stanClockTgd_constr_6 = { { APC_CONSTRAINED, 10, 10, -512, 511 } /* (-512..511) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stanModelID_constr_7 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_StandardClockModelElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct StandardClockModelElement, stanClockTocLSB), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stanClockTocLSB_constraint_1, &asn_PER_memb_stanClockTocLSB_constr_2, 0, "stanClockTocLSB" }, { ATF_NOFLAGS, 0, offsetof(struct StandardClockModelElement, stanClockAF2), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stanClockAF2_constraint_1, &asn_PER_memb_stanClockAF2_constr_3, 0, "stanClockAF2" }, { ATF_NOFLAGS, 0, offsetof(struct StandardClockModelElement, stanClockAF1), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stanClockAF1_constraint_1, &asn_PER_memb_stanClockAF1_constr_4, 0, "stanClockAF1" }, { ATF_NOFLAGS, 0, offsetof(struct StandardClockModelElement, stanClockAF0), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stanClockAF0_constraint_1, &asn_PER_memb_stanClockAF0_constr_5, 0, "stanClockAF0" }, { ATF_POINTER, 2, offsetof(struct StandardClockModelElement, stanClockTgd), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stanClockTgd_constraint_1, &asn_PER_memb_stanClockTgd_constr_6, 0, "stanClockTgd" }, { ATF_POINTER, 1, offsetof(struct StandardClockModelElement, stanModelID), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stanModelID_constraint_1, &asn_PER_memb_stanModelID_constr_7, 0, "stanModelID" }, }; static int asn_MAP_StandardClockModelElement_oms_1[] = { 4, 5 }; static ber_tlv_tag_t asn_DEF_StandardClockModelElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_StandardClockModelElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* stanClockTocLSB at 1281 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* stanClockAF2 at 1282 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* stanClockAF1 at 1283 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* stanClockAF0 at 1284 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* stanClockTgd at 1285 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* stanModelID at 1286 */ }; static asn_SEQUENCE_specifics_t asn_SPC_StandardClockModelElement_specs_1 = { sizeof(struct StandardClockModelElement), offsetof(struct StandardClockModelElement, _asn_ctx), asn_MAP_StandardClockModelElement_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_StandardClockModelElement_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ 5, /* Start extensions */ 7 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_StandardClockModelElement = { "StandardClockModelElement", "StandardClockModelElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_StandardClockModelElement_tags_1, sizeof(asn_DEF_StandardClockModelElement_tags_1) /sizeof(asn_DEF_StandardClockModelElement_tags_1[0]), /* 1 */ asn_DEF_StandardClockModelElement_tags_1, /* Same as above */ sizeof(asn_DEF_StandardClockModelElement_tags_1) /sizeof(asn_DEF_StandardClockModelElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_StandardClockModelElement_1, 6, /* Elements count */ &asn_SPC_StandardClockModelElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_SET_OF.c0000644000175000017500000005577612576764164022573 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #undef PHASE_OUT #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) #define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * The decoder of the SET OF type. */ asn_dec_rval_t SET_OF_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; /* Single one */ /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ ASN_DEBUG("Decoding %s as SET OF", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, 1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) ctx->left += rval.consumed; /* ?Substracted below! */ ADVANCE(rval.consumed); ASN_DEBUG("Structure consumes %ld bytes, " "buffer %ld", (long)ctx->left, (long)size); NEXT_PHASE(ctx); /* Fall through */ case 1: /* * PHASE 1. * From the place where we've left it previously, * try to decode the next item. */ for(;; ctx->step = 0) { ssize_t tag_len; /* Length of TLV's T */ if(ctx->step & 1) goto microphase2; /* * MICROPHASE 1: Synchronize decoding. */ if(ctx->left == 0) { ASN_DEBUG("End of SET OF %s", td->name); /* * No more things to decode. * Exit out of here. */ PHASE_OUT(ctx); RETURN(RC_OK); } /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Found the terminator of the * indefinite length structure. */ break; } } /* Outmost tag may be unknown and cannot be fetched/compared */ if(elm->tag != (ber_tlv_tag_t)-1) { if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { /* * The new list member of expected type has arrived. */ } else { ASN_DEBUG("Unexpected tag %s fixed SET OF %s", ber_tlv_tag_string(tlv_tag), td->name); ASN_DEBUG("%s SET OF has tag %s", td->name, ber_tlv_tag_string(elm->tag)); RETURN(RC_FAIL); } } /* * MICROPHASE 2: Invoke the member-specific decoder. */ ctx->step |= 1; /* Confirm entering next microphase */ microphase2: /* * Invoke the member fetch routine according to member's type */ rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, &ctx->ptr, ptr, LEFT, 0); ASN_DEBUG("In %s SET OF %s code %d consumed %d", td->name, elm->type->name, rval.code, (int)rval.consumed); switch(rval.code) { case RC_OK: { asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); if(ASN_SET_ADD(list, ctx->ptr) != 0) RETURN(RC_FAIL); else ctx->ptr = 0; } break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } /* Fall through */ case RC_FAIL: /* Fatal error */ ASN_STRUCT_FREE(*elm->type, ctx->ptr); ctx->ptr = 0; RETURN(RC_FAIL); } /* switch(rval) */ ADVANCE(rval.consumed); } /* for(all list members) */ NEXT_PHASE(ctx); case 2: /* * Read in all "end of content" TLVs. */ while(ctx->left < 0) { if(LEFT < 2) { if(LEFT > 0 && ((const char *)ptr)[0] != 0) { /* Unexpected tag */ RETURN(RC_FAIL); } else { RETURN(RC_WMORE); } } if(((const char *)ptr)[0] == 0 && ((const char *)ptr)[1] == 0) { ADVANCE(2); ctx->left++; } else { RETURN(RC_FAIL); } } PHASE_OUT(ctx); } RETURN(RC_OK); } /* * Internally visible buffer holding a single encoded element. */ struct _el_buffer { uint8_t *buf; size_t length; size_t size; }; /* Append bytes to the above structure */ static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; if(el_buf->length + size > el_buf->size) return -1; memcpy(el_buf->buf + el_buf->length, buffer, size); el_buf->length += size; return 0; } static int _el_buf_cmp(const void *ap, const void *bp) { const struct _el_buffer *a = (const struct _el_buffer *)ap; const struct _el_buffer *b = (const struct _el_buffer *)bp; int ret; size_t common_len; if(a->length < b->length) common_len = a->length; else common_len = b->length; ret = memcmp(a->buf, b->buf, common_len); if(ret == 0) { if(a->length < b->length) ret = -1; else if(a->length > b->length) ret = 1; } return ret; } /* * The DER encoder of the SET OF type. */ asn_enc_rval_t SET_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_TYPE_descriptor_t *elm_type = elm->type; der_type_encoder_f *der_encoder = elm_type->der_encoder; asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); size_t computed_size = 0; ssize_t encoding_size = 0; struct _el_buffer *encoded_els; ssize_t eels_count = 0; size_t max_encoded_len = 1; asn_enc_rval_t erval; int ret; int edx; ASN_DEBUG("Estimating size for SET OF %s", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; /* Compute maximum encoding's size */ if(max_encoded_len < (size_t)erval.encoded) max_encoded_len = erval.encoded; } /* * Encode the TLV for the sequence itself. */ encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); if(encoding_size == -1) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } computed_size += encoding_size; if(!cb || list->count == 0) { erval.encoded = computed_size; _ASN_ENCODED_OK(erval); } /* * DER mandates dynamic sorting of the SET OF elements * according to their encodings. Build an array of the * encoded elements. */ encoded_els = (struct _el_buffer *)MALLOC( list->count * sizeof(encoded_els[0])); if(encoded_els == NULL) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } ASN_DEBUG("Encoding members of %s SET OF", td->name); /* * Encode all members. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; struct _el_buffer *encoded_el = &encoded_els[eels_count]; if(!memb_ptr) continue; /* * Prepare space for encoding. */ encoded_el->buf = (uint8_t *)MALLOC(max_encoded_len); if(encoded_el->buf) { encoded_el->length = 0; encoded_el->size = max_encoded_len; } else { for(edx--; edx >= 0; edx--) FREEMEM(encoded_els[edx].buf); FREEMEM(encoded_els); erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } /* * Encode the member into the prepared space. */ erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, _el_addbytes, encoded_el); if(erval.encoded == -1) { for(; edx >= 0; edx--) FREEMEM(encoded_els[edx].buf); FREEMEM(encoded_els); return erval; } encoding_size += erval.encoded; eels_count++; } /* * Sort the encoded elements according to their encoding. */ qsort(encoded_els, eels_count, sizeof(encoded_els[0]), _el_buf_cmp); /* * Report encoded elements to the application. * Dispose of temporary sorted members table. */ ret = 0; for(edx = 0; edx < eels_count; edx++) { struct _el_buffer *encoded_el = &encoded_els[edx]; /* Report encoded chunks to the application */ if(ret == 0 && cb(encoded_el->buf, encoded_el->length, app_key) < 0) ret = -1; FREEMEM(encoded_el->buf); } FREEMEM(encoded_els); if(ret || computed_size != (size_t)encoding_size) { /* * Standard callback failed, or * encoded size is not equal to the computed size. */ erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; } else { erval.encoded = computed_size; } _ASN_ENCODED_OK(erval); } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t SET_OF_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *element = td->elements; const char *elm_tag; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * ... and parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value from a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* Which tag is expected for the downstream */ if(specs->as_XMLValueList) { elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; } else { elm_tag = (*element->name) ? element->name : element->type->xml_tag; } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. */ for(; ctx->phase <= 2;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ /* * Go inside the inner member of a set. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; /* Invoke the inner type decoder, m.b. multiple times */ ASN_DEBUG("XER/SET OF element [%s]", elm_tag); tmprval = element->type->xer_decoder(opt_codec_ctx, element->type, &ctx->ptr, elm_tag, buf_ptr, size); if(tmprval.code == RC_OK) { asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); if(ASN_SET_ADD(list, ctx->ptr) != 0) RETURN(RC_FAIL); ctx->ptr = 0; XER_ADVANCE(tmprval.consumed); } else { XER_ADVANCE(tmprval.consumed); RETURN(tmprval.code); } ctx->phase = 1; /* Back to body processing */ ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); /* Fall through */ } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); switch(ch_size) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); default: switch(ch_type) { case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", tcv, ctx->phase, xml_tag); switch(tcv) { case XCT_CLOSING: if(ctx->phase == 0) break; ctx->phase = 0; /* Fall through */ case XCT_BOTH: if(ctx->phase == 0) { /* No more things to decode */ XER_ADVANCE(ch_size); ctx->phase = 3; /* Phase out */ RETURN(RC_OK); } /* Fall through */ case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); if(ctx->phase == 1) { /* * Process a single possible member. */ ctx->phase = 2; continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag in SET OF"); break; } ctx->phase = 3; /* "Phase out" on hard failure */ RETURN(RC_FAIL); } typedef struct xer_tmp_enc_s { void *buffer; size_t offset; size_t size; } xer_tmp_enc_t; static int SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; if(t->offset + size >= t->size) { size_t newsize = (t->size << 2) + size; void *p = REALLOC(t->buffer, newsize); if(!p) return -1; t->buffer = p; t->size = newsize; } memcpy((char *)t->buffer + t->offset, buffer, size); t->offset += size; return 0; } static int SET_OF_xer_order(const void *aptr, const void *bptr) { const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; size_t minlen = a->offset; int ret; if(b->offset < minlen) minlen = b->offset; /* Well-formed UTF-8 has this nice lexicographical property... */ ret = memcmp(a->buffer, b->buffer, minlen); if(ret != 0) return ret; if(a->offset == b->offset) return 0; if(a->offset == minlen) return -1; return 1; } asn_enc_rval_t SET_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; asn_anonymous_set_ *list = _A_SET_FROM_VOID(sptr); const char *mname = specs->as_XMLValueList ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); size_t mlen = mname ? strlen(mname) : 0; int xcan = (flags & XER_F_CANONICAL); xer_tmp_enc_t *encs = 0; size_t encs_count = 0; void *original_app_key = app_key; asn_app_consume_bytes_f *original_cb = cb; int i; if(!sptr) _ASN_ENCODE_FAILED; if(xcan) { encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); if(!encs) _ASN_ENCODE_FAILED; cb = SET_OF_encode_xer_callback; } er.encoded = 0; for(i = 0; i < list->count; i++) { asn_enc_rval_t tmper; void *memb_ptr = list->array[i]; if(!memb_ptr) continue; if(encs) { memset(&encs[encs_count], 0, sizeof(encs[0])); app_key = &encs[encs_count]; encs_count++; } if(mname) { if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); } if(!xcan && specs->as_XMLValueList == 1) _i_ASN_TEXT_INDENT(1, ilevel + 1); tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + (specs->as_XMLValueList != 2), flags, cb, app_key); if(tmper.encoded == -1) { td = tmper.failed_type; sptr = tmper.structure_ptr; goto cb_failed; } if(tmper.encoded == 0 && specs->as_XMLValueList) { const char *name = elm->type->xml_tag; size_t len = strlen(name); _ASN_CALLBACK3("<", 1, name, len, "/>", 2); } if(mname) { _ASN_CALLBACK3("", 1); er.encoded += 5; } er.encoded += (2 * mlen) + tmper.encoded; } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); if(encs) { xer_tmp_enc_t *enc = encs; xer_tmp_enc_t *end = encs + encs_count; ssize_t control_size = 0; cb = original_cb; app_key = original_app_key; qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); for(; enc < end; enc++) { _ASN_CALLBACK(enc->buffer, enc->offset); FREEMEM(enc->buffer); enc->buffer = 0; control_size += enc->offset; } assert(control_size == er.encoded); } goto cleanup; cb_failed: er.encoded = -1; er.failed_type = td; er.structure_ptr = sptr; cleanup: if(encs) { while(encs_count-- > 0) { if(encs[encs_count].buffer) FREEMEM(encs[encs_count].buffer); } FREEMEM(encs); } _ASN_ENCODED_OK(er); } int SET_OF_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); int ret; int i; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* Dump preamble */ if(cb(td->name, strlen(td->name), app_key) < 0 || cb(" ::= {", 6, app_key) < 0) return -1; for(i = 0; i < list->count; i++) { const void *memb_ptr = list->array[i]; if(!memb_ptr) continue; _i_INDENT(1); ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, cb, app_key); if(ret) return ret; } ilevel--; _i_INDENT(1); return (cb("}", 1, app_key) < 0) ? -1 : 0; } void SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(td && ptr) { asn_SET_OF_specifics_t *specs; asn_TYPE_member_t *elm = td->elements; asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); asn_struct_ctx_t *ctx; /* Decoder context */ int i; /* * Could not use set_of_empty() because of (*free) * incompatibility. */ for(i = 0; i < list->count; i++) { void *memb_ptr = list->array[i]; if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } list->count = 0; /* No meaningful elements left */ asn_set_empty(list); /* Remove (list->array) */ specs = (asn_SET_OF_specifics_t *)td->specifics; ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); if(ctx->ptr) { ASN_STRUCT_FREE(*elm->type, ctx->ptr); ctx->ptr = 0; } if(!contents_only) { FREEMEM(ptr); } } } int SET_OF_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_constr_check_f *constr; const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); int i; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } constr = elm->memb_constraints; if(!constr) constr = elm->type->check_constraints; /* * Iterate over the members of an array. * Validate each in turn, until one fails. */ for(i = 0; i < list->count; i++) { const void *memb_ptr = list->array[i]; int ret; if(!memb_ptr) continue; ret = constr(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; } /* * Cannot inherit it eralier: * need to make sure we get the updated version. */ if(!elm->memb_constraints) elm->memb_constraints = elm->type->check_constraints; return 0; } asn_dec_rval_t SET_OF_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; /* Single one */ void *st = *sptr; asn_anonymous_set_ *list; asn_per_constraint_t *ct; int repeat = 0; ssize_t nelems; if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) _ASN_DECODE_FAILED; /* * Create the target structure if it is not present already. */ if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) _ASN_DECODE_FAILED; } list = _A_SET_FROM_VOID(st); /* Figure out which constraints to use */ if(constraints) ct = &constraints->size; else if(td->per_constraints) ct = &td->per_constraints->size; else ct = 0; if(ct && ct->flags & APC_EXTENSIBLE) { int value = per_get_few_bits(pd, 1); if(value < 0) _ASN_DECODE_STARVED; if(value) ct = 0; /* Not restricted! */ } if(ct && ct->effective_bits >= 0) { /* X.691, #19.5: No length determinant */ nelems = per_get_few_bits(pd, ct->effective_bits); ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", (long)nelems, ct->lower_bound, td->name); if(nelems < 0) _ASN_DECODE_STARVED; nelems += ct->lower_bound; } else { nelems = -1; } do { int i; if(nelems < 0) { nelems = uper_get_length(pd, ct ? ct->effective_bits : -1, &repeat); ASN_DEBUG("Got to decode %d elements (eff %d)", (int)nelems, (int)ct ? ct->effective_bits : -1); if(nelems < 0) _ASN_DECODE_STARVED; } for(i = 0; i < nelems; i++) { void *ptr = 0; ASN_DEBUG("SET OF %s decoding", elm->type->name); rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, &ptr, pd); ASN_DEBUG("%s SET OF %s decoded %d, %p", td->name, elm->type->name, rv.code, ptr); if(rv.code == RC_OK) { if(ASN_SET_ADD(list, ptr) == 0) continue; ASN_DEBUG("Failed to add element into %s", td->name); /* Fall through */ rv.code = RC_FAIL; } else { ASN_DEBUG("Failed decoding %s of %s (SET OF)", elm->type->name, td->name); } if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); return rv; } nelems = -1; /* Allow uper_get_length() */ } while(repeat); ASN_DEBUG("Decoded %s as SET OF", td->name); rv.code = RC_OK; rv.consumed = 0; return rv; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TOA-MeasurementsOfRef.c0000644000175000017500000000445712576764164024165 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TOA-MeasurementsOfRef.h" static asn_TYPE_member_t asn_MBR_TOA_MeasurementsOfRef_1[] = { { ATF_NOFLAGS, 0, offsetof(struct TOA_MeasurementsOfRef, refQuality), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RefQuality, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "refQuality" }, { ATF_NOFLAGS, 0, offsetof(struct TOA_MeasurementsOfRef, numOfMeasurements), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NumOfMeasurements, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "numOfMeasurements" }, }; static ber_tlv_tag_t asn_DEF_TOA_MeasurementsOfRef_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_TOA_MeasurementsOfRef_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refQuality at 360 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* numOfMeasurements at 362 */ }; static asn_SEQUENCE_specifics_t asn_SPC_TOA_MeasurementsOfRef_specs_1 = { sizeof(struct TOA_MeasurementsOfRef), offsetof(struct TOA_MeasurementsOfRef, _asn_ctx), asn_MAP_TOA_MeasurementsOfRef_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_TOA_MeasurementsOfRef = { "TOA-MeasurementsOfRef", "TOA-MeasurementsOfRef", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TOA_MeasurementsOfRef_tags_1, sizeof(asn_DEF_TOA_MeasurementsOfRef_tags_1) /sizeof(asn_DEF_TOA_MeasurementsOfRef_tags_1[0]), /* 1 */ asn_DEF_TOA_MeasurementsOfRef_tags_1, /* Same as above */ sizeof(asn_DEF_TOA_MeasurementsOfRef_tags_1) /sizeof(asn_DEF_TOA_MeasurementsOfRef_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_TOA_MeasurementsOfRef_1, 2, /* Elements count */ &asn_SPC_TOA_MeasurementsOfRef_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceIdentityType.h0000644000175000017500000000256712576764164024431 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceIdentityType_H_ #define _ReferenceIdentityType_H_ #include /* Including external dependencies */ #include "BSICAndCarrier.h" #include "CellID.h" #include "RequestIndex.h" #include "SystemInfoIndex.h" #include "CellIDAndLAC.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum ReferenceIdentityType_PR { ReferenceIdentityType_PR_NOTHING, /* No components present */ ReferenceIdentityType_PR_bsicAndCarrier, ReferenceIdentityType_PR_ci, ReferenceIdentityType_PR_requestIndex, ReferenceIdentityType_PR_systemInfoIndex, ReferenceIdentityType_PR_ciAndLAC } ReferenceIdentityType_PR; /* ReferenceIdentityType */ typedef struct ReferenceIdentityType { ReferenceIdentityType_PR present; union ReferenceIdentityType_u { BSICAndCarrier_t bsicAndCarrier; CellID_t ci; RequestIndex_t requestIndex; SystemInfoIndex_t systemInfoIndex; CellIDAndLAC_t ciAndLAC; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ReferenceIdentityType_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceIdentityType; #ifdef __cplusplus } #endif #endif /* _ReferenceIdentityType_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-SgnElement.c0000644000175000017500000002321212576764164023052 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSS-SgnElement.h" static int memb_cNo_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_carrierQualityInd_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_codePhase_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 2097151)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_integerCodePhase_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_codePhaseRMSError_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_doppler_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_adr_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 33554431)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_cNo_constr_3 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_carrierQualityInd_constr_5 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_codePhase_constr_6 = { { APC_CONSTRAINED, 21, -1, 0, 2097151 } /* (0..2097151) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_integerCodePhase_constr_7 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_codePhaseRMSError_constr_8 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_doppler_constr_9 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_adr_constr_10 = { { APC_CONSTRAINED, 25, -1, 0, 33554431 } /* (0..33554431) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSS_SgnElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnElement, svID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnElement, cNo), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_cNo_constraint_1, &asn_PER_memb_cNo_constr_3, 0, "cNo" }, { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnElement, mpathDet), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MpathIndic, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "mpathDet" }, { ATF_POINTER, 1, offsetof(struct GANSS_SgnElement, carrierQualityInd), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_carrierQualityInd_constraint_1, &asn_PER_memb_carrierQualityInd_constr_5, 0, "carrierQualityInd" }, { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnElement, codePhase), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_codePhase_constraint_1, &asn_PER_memb_codePhase_constr_6, 0, "codePhase" }, { ATF_POINTER, 1, offsetof(struct GANSS_SgnElement, integerCodePhase), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_integerCodePhase_constraint_1, &asn_PER_memb_integerCodePhase_constr_7, 0, "integerCodePhase" }, { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnElement, codePhaseRMSError), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_codePhaseRMSError_constraint_1, &asn_PER_memb_codePhaseRMSError_constr_8, 0, "codePhaseRMSError" }, { ATF_POINTER, 2, offsetof(struct GANSS_SgnElement, doppler), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_doppler_constraint_1, &asn_PER_memb_doppler_constr_9, 0, "doppler" }, { ATF_POINTER, 1, offsetof(struct GANSS_SgnElement, adr), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_adr_constraint_1, &asn_PER_memb_adr_constr_10, 0, "adr" }, }; static int asn_MAP_GANSS_SgnElement_oms_1[] = { 3, 5, 7, 8 }; static ber_tlv_tag_t asn_DEF_GANSS_SgnElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSS_SgnElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* svID at 1479 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cNo at 1480 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mpathDet at 1481 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* carrierQualityInd at 1482 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* codePhase at 1483 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* integerCodePhase at 1484 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* codePhaseRMSError at 1485 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* doppler at 1486 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* adr at 1487 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSS_SgnElement_specs_1 = { sizeof(struct GANSS_SgnElement), offsetof(struct GANSS_SgnElement, _asn_ctx), asn_MAP_GANSS_SgnElement_tag2el_1, 9, /* Count of tags in the map */ asn_MAP_GANSS_SgnElement_oms_1, /* Optional members */ 4, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSS_SgnElement = { "GANSS-SgnElement", "GANSS-SgnElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSS_SgnElement_tags_1, sizeof(asn_DEF_GANSS_SgnElement_tags_1) /sizeof(asn_DEF_GANSS_SgnElement_tags_1[0]), /* 1 */ asn_DEF_GANSS_SgnElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSS_SgnElement_tags_1) /sizeof(asn_DEF_GANSS_SgnElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSS_SgnElement_1, 9, /* Elements count */ &asn_SPC_GANSS_SgnElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceWGS84.h0000644000175000017500000000145012576764164022600 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceWGS84_H_ #define _ReferenceWGS84_H_ #include /* Including external dependencies */ #include "RelDistance.h" #include "RelativeAlt.h" #include #ifdef __cplusplus extern "C" { #endif /* ReferenceWGS84 */ typedef struct ReferenceWGS84 { RelDistance_t relativeNorth; RelDistance_t relativeEast; RelativeAlt_t *relativeAlt /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ReferenceWGS84_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceWGS84; #ifdef __cplusplus } #endif #endif /* _ReferenceWGS84_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSgnTypeElement.h0000644000175000017500000000155212576764164024011 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfSgnTypeElement_H_ #define _SeqOfSgnTypeElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SgnTypeElement; /* SeqOfSgnTypeElement */ typedef struct SeqOfSgnTypeElement { A_SEQUENCE_OF(struct SgnTypeElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfSgnTypeElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfSgnTypeElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "SgnTypeElement.h" #endif /* _SeqOfSgnTypeElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlmanacElement.c0000644000175000017500000003316612576764164023017 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AlmanacElement.h" static int memb_almanacE_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_alamanacToa_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacKsii_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacOmegaDot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacSVhealth_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacAPowerHalf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 16777215)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacOmega0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacW_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacM0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacAF0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -1024 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_almanacAF1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -1024 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_almanacE_constr_3 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_alamanacToa_constr_4 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacKsii_constr_5 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacOmegaDot_constr_6 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacSVhealth_constr_7 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacAPowerHalf_constr_8 = { { APC_CONSTRAINED, 24, -1, 0, 16777215 } /* (0..16777215) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacOmega0_constr_9 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacW_constr_10 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacM0_constr_11 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacAF0_constr_12 = { { APC_CONSTRAINED, 11, 11, -1024, 1023 } /* (-1024..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_almanacAF1_constr_13 = { { APC_CONSTRAINED, 11, 11, -1024, 1023 } /* (-1024..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_AlmanacElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, satelliteID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satelliteID" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacE), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacE_constraint_1, &asn_PER_memb_almanacE_constr_3, 0, "almanacE" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, alamanacToa), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_alamanacToa_constraint_1, &asn_PER_memb_alamanacToa_constr_4, 0, "alamanacToa" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacKsii), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacKsii_constraint_1, &asn_PER_memb_almanacKsii_constr_5, 0, "almanacKsii" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacOmegaDot), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacOmegaDot_constraint_1, &asn_PER_memb_almanacOmegaDot_constr_6, 0, "almanacOmegaDot" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacSVhealth), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacSVhealth_constraint_1, &asn_PER_memb_almanacSVhealth_constr_7, 0, "almanacSVhealth" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacAPowerHalf), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacAPowerHalf_constraint_1, &asn_PER_memb_almanacAPowerHalf_constr_8, 0, "almanacAPowerHalf" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacOmega0), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacOmega0_constraint_1, &asn_PER_memb_almanacOmega0_constr_9, 0, "almanacOmega0" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacW), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacW_constraint_1, &asn_PER_memb_almanacW_constr_10, 0, "almanacW" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacM0), (ASN_TAG_CLASS_CONTEXT | (9 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacM0_constraint_1, &asn_PER_memb_almanacM0_constr_11, 0, "almanacM0" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacAF0), (ASN_TAG_CLASS_CONTEXT | (10 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacAF0_constraint_1, &asn_PER_memb_almanacAF0_constr_12, 0, "almanacAF0" }, { ATF_NOFLAGS, 0, offsetof(struct AlmanacElement, almanacAF1), (ASN_TAG_CLASS_CONTEXT | (11 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_almanacAF1_constraint_1, &asn_PER_memb_almanacAF1_constr_13, 0, "almanacAF1" }, }; static ber_tlv_tag_t asn_DEF_AlmanacElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AlmanacElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* satelliteID at 799 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* almanacE at 800 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* alamanacToa at 801 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* almanacKsii at 802 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* almanacOmegaDot at 803 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* almanacSVhealth at 804 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* almanacAPowerHalf at 805 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* almanacOmega0 at 806 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* almanacW at 807 */ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* almanacM0 at 808 */ { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* almanacAF0 at 809 */ { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 } /* almanacAF1 at 810 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AlmanacElement_specs_1 = { sizeof(struct AlmanacElement), offsetof(struct AlmanacElement, _asn_ctx), asn_MAP_AlmanacElement_tag2el_1, 12, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AlmanacElement = { "AlmanacElement", "AlmanacElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AlmanacElement_tags_1, sizeof(asn_DEF_AlmanacElement_tags_1) /sizeof(asn_DEF_AlmanacElement_tags_1[0]), /* 1 */ asn_DEF_AlmanacElement_tags_1, /* Same as above */ sizeof(asn_DEF_AlmanacElement_tags_1) /sizeof(asn_DEF_AlmanacElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AlmanacElement_1, 12, /* Elements count */ &asn_SPC_AlmanacElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Ext-GeographicalInformation.h0000644000175000017500000000220512576764164025475 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Ext_GeographicalInformation_H_ #define _Ext_GeographicalInformation_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Ext-GeographicalInformation */ typedef OCTET_STRING_t Ext_GeographicalInformation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Ext_GeographicalInformation; asn_struct_free_f Ext_GeographicalInformation_free; asn_struct_print_f Ext_GeographicalInformation_print; asn_constr_check_f Ext_GeographicalInformation_constraint; ber_type_decoder_f Ext_GeographicalInformation_decode_ber; der_type_encoder_f Ext_GeographicalInformation_encode_der; xer_type_decoder_f Ext_GeographicalInformation_decode_xer; xer_type_encoder_f Ext_GeographicalInformation_encode_xer; per_type_decoder_f Ext_GeographicalInformation_decode_uper; per_type_encoder_f Ext_GeographicalInformation_encode_uper; #ifdef __cplusplus } #endif #endif /* _Ext_GeographicalInformation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSS-SgnTypeElement.c0000644000175000017500000000355712576764164024664 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSS-SgnTypeElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSS_SgnTypeElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 1, 6 } /* (SIZE(1..6)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSS_SgnTypeElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSS_SgnTypeElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSS_SgnTypeElement_specs_1 = { sizeof(struct SeqOfGANSS_SgnTypeElement), offsetof(struct SeqOfGANSS_SgnTypeElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSS_SgnTypeElement = { "SeqOfGANSS-SgnTypeElement", "SeqOfGANSS-SgnTypeElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1, sizeof(asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1) /sizeof(asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1) /sizeof(asn_DEF_SeqOfGANSS_SgnTypeElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSS_SgnTypeElement_constr_1, asn_MBR_SeqOfGANSS_SgnTypeElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSS_SgnTypeElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AssistBTSData.h0000644000175000017500000000201112576764164022550 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AssistBTSData_H_ #define _AssistBTSData_H_ #include /* Including external dependencies */ #include "BSIC.h" #include "MultiFrameOffset.h" #include "TimeSlotScheme.h" #include "RoughRTD.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct CalcAssistanceBTS; /* AssistBTSData */ typedef struct AssistBTSData { BSIC_t bsic; MultiFrameOffset_t multiFrameOffset; TimeSlotScheme_t timeSlotScheme; RoughRTD_t roughRTD; struct CalcAssistanceBTS *calcAssistanceBTS /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AssistBTSData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AssistBTSData; #ifdef __cplusplus } #endif /* Referred external types */ #include "CalcAssistanceBTS.h" #endif /* _AssistBTSData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTOD.c0000644000175000017500000001077012576764164021367 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSTOD.h" int GANSSTOD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 86399)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GANSSTOD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GANSSTOD_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSTOD_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSTOD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSTOD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSTOD_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSTOD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSTOD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSTOD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSTOD_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSTOD_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSTOD_constr_1 = { { APC_CONSTRAINED, 17, -1, 0, 86399 } /* (0..86399) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSTOD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSTOD = { "GANSSTOD", "GANSSTOD", GANSSTOD_free, GANSSTOD_print, GANSSTOD_constraint, GANSSTOD_decode_ber, GANSSTOD_encode_der, GANSSTOD_decode_xer, GANSSTOD_encode_xer, GANSSTOD_decode_uper, GANSSTOD_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSTOD_tags_1, sizeof(asn_DEF_GANSSTOD_tags_1) /sizeof(asn_DEF_GANSSTOD_tags_1[0]), /* 1 */ asn_DEF_GANSSTOD_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSTOD_tags_1) /sizeof(asn_DEF_GANSSTOD_tags_1[0]), /* 1 */ &asn_PER_type_GANSSTOD_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-AssistData.c0000644000175000017500000000344012576764164022630 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPS-AssistData.h" static asn_TYPE_member_t asn_MBR_GPS_AssistData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GPS_AssistData, controlHeader), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ControlHeader, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "controlHeader" }, }; static ber_tlv_tag_t asn_DEF_GPS_AssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPS_AssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* controlHeader at 556 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPS_AssistData_specs_1 = { sizeof(struct GPS_AssistData), offsetof(struct GPS_AssistData, _asn_ctx), asn_MAP_GPS_AssistData_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPS_AssistData = { "GPS-AssistData", "GPS-AssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPS_AssistData_tags_1, sizeof(asn_DEF_GPS_AssistData_tags_1) /sizeof(asn_DEF_GPS_AssistData_tags_1[0]), /* 1 */ asn_DEF_GPS_AssistData_tags_1, /* Same as above */ sizeof(asn_DEF_GPS_AssistData_tags_1) /sizeof(asn_DEF_GPS_AssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPS_AssistData_1, 1, /* Elements count */ &asn_SPC_GPS_AssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_codecs_prim.c0000644000175000017500000001523112576764164023272 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Decode an always-primitive type. */ asn_dec_rval_t ber_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; asn_dec_rval_t rval; ber_tlv_len_t length; /* * If the structure is not there, allocate it. */ if(st == NULL) { st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); if(st == NULL) _ASN_DECODE_FAILED; *sptr = (void *)st; } ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", td->name, tag_mode); /* * Check tags and extract value length. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("%s length is %d bytes", td->name, (int)length); /* * Make sure we have this length. */ buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } st->size = (int)length; /* The following better be optimized away. */ if(sizeof(st->size) != sizeof(length) && (ber_tlv_len_t)st->size != length) { st->size = 0; _ASN_DECODE_FAILED; } st->buf = (uint8_t *)MALLOC(length + 1); if(!st->buf) { st->size = 0; _ASN_DECODE_FAILED; } memcpy(st->buf, buf_ptr, length); st->buf[length] = '\0'; /* Just in case */ rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s", (long)rval.consumed, (long)length, td->name); return rval; } /* * Encode an always-primitive type using DER. */ asn_enc_rval_t der_encode_primitive(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; ASN_DEBUG("%s %s as a primitive type (tm=%d)", cb?"Encoding":"Estimating", td->name, tag_mode); erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, cb, app_key); ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = sptr; return erval; } if(cb && st->buf) { if(cb(st->buf, st->size, app_key) < 0) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = sptr; return erval; } } else { assert(st->buf || st->size == 0); } erval.encoded += st->size; _ASN_ENCODED_OK(erval); } void ASN__PRIMITIVE_TYPE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; if(!td || !sptr) return; ASN_DEBUG("Freeing %s as a primitive type", td->name); if(st->buf) FREEMEM(st->buf); if(!contents_only) FREEMEM(st); } /* * Local internal type passed around as an argument. */ struct xdp_arg_s { asn_TYPE_descriptor_t *type_descriptor; void *struct_key; xer_primitive_body_decoder_f *prim_body_decoder; int decoded_something; int want_more; }; static int xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; if(arg->decoded_something) { if(xer_is_whitespace(chunk_buf, chunk_size)) return 0; /* Skip it. */ /* * Decoding was done once already. Prohibit doing it again. */ return -1; } bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { case XPBD_SYSTEM_FAILURE: case XPBD_DECODER_LIMIT: case XPBD_BROKEN_ENCODING: break; case XPBD_BODY_CONSUMED: /* Tag decoded successfully */ arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ return 0; } return -1; } static ssize_t xer_decode__body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; if(arg->decoded_something) { if(xer_is_whitespace(chunk_buf, chunk_size)) return chunk_size; /* * Decoding was done once already. Prohibit doing it again. */ return -1; } if(!have_more) { /* * If we've received something like "1", we can't really * tell whether it is really `1` or `123`, until we know * that there is no more data coming. * The have_more argument will be set to 1 once something * like this is available to the caller of this callback: * "1want_more = 1; return -1; } bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { case XPBD_SYSTEM_FAILURE: case XPBD_DECODER_LIMIT: case XPBD_BROKEN_ENCODING: break; case XPBD_BODY_CONSUMED: /* Tag decoded successfully */ arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ return chunk_size; } return -1; } asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, xer_primitive_body_decoder_f *prim_body_decoder ) { const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; asn_struct_ctx_t s_ctx; struct xdp_arg_s s_arg; asn_dec_rval_t rc; /* * Create the structure if does not exist. */ if(!*sptr) { *sptr = CALLOC(1, struct_size); if(!*sptr) _ASN_DECODE_FAILED; } memset(&s_ctx, 0, sizeof(s_ctx)); s_arg.type_descriptor = td; s_arg.struct_key = *sptr; s_arg.prim_body_decoder = prim_body_decoder; s_arg.decoded_something = 0; s_arg.want_more = 0; rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, xml_tag, buf_ptr, size, xer_decode__unexpected_tag, xer_decode__body); switch(rc.code) { case RC_OK: if(!s_arg.decoded_something) { char ch; ASN_DEBUG("Primitive body is not recognized, " "supplying empty one"); /* * Decoding opportunity has come and gone. * Where's the result? * Try to feed with empty body, see if it eats it. */ if(prim_body_decoder(s_arg.type_descriptor, s_arg.struct_key, &ch, 0) != XPBD_BODY_CONSUMED) { /* * This decoder does not like empty stuff. */ _ASN_DECODE_FAILED; } } break; case RC_WMORE: /* * Redo the whole thing later. * We don't have a context to save intermediate parsing state. */ rc.consumed = 0; break; case RC_FAIL: rc.consumed = 0; if(s_arg.want_more) rc.code = RC_WMORE; else _ASN_DECODE_FAILED; break; } return rc; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BadSignalElement.h0000644000175000017500000000137512576764164023311 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _BadSignalElement_H_ #define _BadSignalElement_H_ #include /* Including external dependencies */ #include "SVID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* BadSignalElement */ typedef struct BadSignalElement { SVID_t badSVID; long *badSignalID /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } BadSignalElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_BadSignalElement; #ifdef __cplusplus } #endif #endif /* _BadSignalElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW23b.h0000644000175000017500000000155612576764164021506 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSTOW23b_H_ #define _GPSTOW23b_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GPSTOW23b */ typedef long GPSTOW23b_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSTOW23b; asn_struct_free_f GPSTOW23b_free; asn_struct_print_f GPSTOW23b_print; asn_constr_check_f GPSTOW23b_constraint; ber_type_decoder_f GPSTOW23b_decode_ber; der_type_encoder_f GPSTOW23b_encode_der; xer_type_decoder_f GPSTOW23b_decode_xer; xer_type_encoder_f GPSTOW23b_encode_xer; per_type_decoder_f GPSTOW23b_decode_uper; per_type_encoder_f GPSTOW23b_encode_uper; #ifdef __cplusplus } #endif #endif /* _GPSTOW23b_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW24b.c0000644000175000017500000001105112576764164021471 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSTOW24b.h" int GPSTOW24b_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 14399999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GPSTOW24b_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GPSTOW24b_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GPSTOW24b_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GPSTOW24b_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GPSTOW24b_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GPSTOW24b_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GPSTOW24b_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GPSTOW24b_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GPSTOW24b_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GPSTOW24b_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GPSTOW24b_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GPSTOW24b_constr_1 = { { APC_CONSTRAINED, 24, -1, 0, 14399999 } /* (0..14399999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GPSTOW24b_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GPSTOW24b = { "GPSTOW24b", "GPSTOW24b", GPSTOW24b_free, GPSTOW24b_print, GPSTOW24b_constraint, GPSTOW24b_decode_ber, GPSTOW24b_encode_der, GPSTOW24b_decode_xer, GPSTOW24b_encode_xer, GPSTOW24b_decode_uper, GPSTOW24b_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSTOW24b_tags_1, sizeof(asn_DEF_GPSTOW24b_tags_1) /sizeof(asn_DEF_GPSTOW24b_tags_1[0]), /* 1 */ asn_DEF_GPSTOW24b_tags_1, /* Same as above */ sizeof(asn_DEF_GPSTOW24b_tags_1) /sizeof(asn_DEF_GPSTOW24b_tags_1[0]), /* 1 */ &asn_PER_type_GPSTOW24b_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSGenericAssistDataElement.h0000644000175000017500000000362212576764164025613 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSGenericAssistDataElement_H_ #define _GANSSGenericAssistDataElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SeqOfGANSSTimeModel; struct GANSSDiffCorrections; struct GANSSNavModel; struct GANSSRealTimeIntegrity; struct GANSSDataBitAssist; struct GANSSRefMeasurementAssist; struct GANSSAlmanacModel; struct GANSSUTCModel; /* GANSSGenericAssistDataElement */ typedef struct GANSSGenericAssistDataElement { long *ganssID /* OPTIONAL */; struct SeqOfGANSSTimeModel *ganssTimeModel /* OPTIONAL */; struct GANSSDiffCorrections *ganssDiffCorrections /* OPTIONAL */; struct GANSSNavModel *ganssNavigationModel /* OPTIONAL */; struct GANSSRealTimeIntegrity *ganssRealTimeIntegrity /* OPTIONAL */; struct GANSSDataBitAssist *ganssDataBitAssist /* OPTIONAL */; struct GANSSRefMeasurementAssist *ganssRefMeasurementAssist /* OPTIONAL */; struct GANSSAlmanacModel *ganssAlmanacModel /* OPTIONAL */; struct GANSSUTCModel *ganssUTCModel /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSGenericAssistDataElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSGenericAssistDataElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "SeqOfGANSSTimeModel.h" #include "GANSSDiffCorrections.h" #include "GANSSNavModel.h" #include "GANSSRealTimeIntegrity.h" #include "GANSSDataBitAssist.h" #include "GANSSRefMeasurementAssist.h" #include "GANSSAlmanacModel.h" #include "GANSSUTCModel.h" #endif /* _GANSSGenericAssistDataElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-5-ProtocolError-Extension.h0000644000175000017500000000176412576764164025624 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel_5_ProtocolError_Extension_H_ #define _Rel_5_ProtocolError_Extension_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Extended_reference; /* Rel-5-ProtocolError-Extension */ typedef struct Rel_5_ProtocolError_Extension { struct Extended_reference *extended_reference /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel_5_ProtocolError_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel_5_ProtocolError_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "Extended-reference.h" #endif /* _Rel_5_ProtocolError_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_SET_OF.c0000644000175000017500000000325212576764164022022 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Add another element into the set. */ int asn_set_add(void *asn_set_of_x, void *ptr) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as == 0 || ptr == 0) { errno = EINVAL; /* Invalid arguments */ return -1; } /* * Make sure there's enough space to insert an element. */ if(as->count == as->size) { int _newsize = as->size ? (as->size << 1) : 4; void *_new_arr; _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); if(_new_arr) { as->array = (void **)_new_arr; as->size = _newsize; } else { /* ENOMEM */ return -1; } } as->array[as->count++] = ptr; return 0; } void asn_set_del(void *asn_set_of_x, int number, int _do_free) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as) { void *ptr; if(number < 0 || number >= as->count) return; if(_do_free && as->free) { ptr = as->array[number]; } else { ptr = 0; } as->array[number] = as->array[--as->count]; /* * Invoke the third-party function only when the state * of the parent structure is consistent. */ if(ptr) as->free(ptr); } } /* * Free the contents of the set, do not free the set itself. */ void asn_set_empty(void *asn_set_of_x) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as) { if(as->array) { if(as->free) { while(as->count--) as->free(as->array[as->count]); } FREEMEM(as->array); as->array = 0; } as->count = 0; as->size = 0; } } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ber_tlv_length.c0000644000175000017500000000731012576764164023137 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r) { const uint8_t *buf = (const uint8_t *)bufptr; unsigned oct; if(size == 0) return 0; /* Want more */ oct = *(const uint8_t *)buf; if((oct & 0x80) == 0) { /* * Short definite length. */ *len_r = oct; /* & 0x7F */ return 1; } else { ber_tlv_len_t len; size_t skipped; if(_is_constructed && oct == 0x80) { *len_r = -1; /* Indefinite length */ return 1; } if(oct == 0xff) { /* Reserved in standard for future use. */ return -1; } oct &= 0x7F; /* Leave only the 7 LS bits */ for(len = 0, buf++, skipped = 1; oct && (++skipped <= size); buf++, oct--) { len = (len << 8) | *buf; if(len < 0 || (len >> ((8 * sizeof(len)) - 8) && oct > 1)) { /* * Too large length value. */ return -1; } } if(oct == 0) { ber_tlv_len_t lenplusepsilon = (size_t)len + 1024; /* * Here length may be very close or equal to 2G. * However, the arithmetics used in some decoders * may add some (small) quantities to the length, * to check the resulting value against some limits. * This may result in integer wrap-around, which * we try to avoid by checking it earlier here. */ if(lenplusepsilon < 0) { /* Too large length value */ return -1; } *len_r = len; return skipped; } return 0; /* Want more */ } } ssize_t ber_skip_length(asn_codec_ctx_t *opt_codec_ctx, int _is_constructed, const void *ptr, size_t size) { ber_tlv_len_t vlen; /* Length of V in TLV */ ssize_t tl; /* Length of L in TLV */ ssize_t ll; /* Length of L in TLV */ size_t skip; /* * Make sure we didn't exceed the maximum stack size. */ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) return -1; /* * Determine the size of L in TLV. */ ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); if(ll <= 0) return ll; /* * Definite length. */ if(vlen >= 0) { skip = ll + vlen; if(skip > size) return 0; /* Want more */ return skip; } /* * Indefinite length! */ ASN_DEBUG("Skipping indefinite length"); for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { ber_tlv_tag_t tag; /* Fetch the tag */ tl = ber_fetch_tag(ptr, size, &tag); if(tl <= 0) return tl; ll = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), ((const char *)ptr) + tl, size - tl); if(ll <= 0) return ll; skip += tl + ll; /* * This may be the end of the indefinite length structure, * two consecutive 0 octets. * Check if it is true. */ if(((const uint8_t *)ptr)[0] == 0 && ((const uint8_t *)ptr)[1] == 0) return skip; ptr = ((const char *)ptr) + tl + ll; size -= tl + ll; } /* UNREACHABLE */ } size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { size_t required_size; /* Size of len encoding */ uint8_t *buf = (uint8_t *)bufp; uint8_t *end; size_t i; if(len <= 127) { /* Encoded in 1 octet */ if(size) *buf = (uint8_t)len; return 1; } /* * Compute the size of the subsequent bytes. */ for(required_size = 1, i = 8; i < 8 * sizeof(len); i += 8) { if(len >> i) required_size++; else break; } if(size <= required_size) return required_size + 1; *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ /* * Produce the len encoding, space permitting. */ end = buf + required_size; for(i -= 8; buf < end; i -= 8, buf++) *buf = (uint8_t)(len >> i); return required_size + 1; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel5-AssistanceData-Extension.c0000644000175000017500000000413712576764164025613 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel5-AssistanceData-Extension.h" static asn_TYPE_member_t asn_MBR_Rel5_AssistanceData_Extension_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Rel5_AssistanceData_Extension, extended_reference), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Extended_reference, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extended-reference" }, }; static ber_tlv_tag_t asn_DEF_Rel5_AssistanceData_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel5_AssistanceData_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* extended-reference at 1023 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel5_AssistanceData_Extension_specs_1 = { sizeof(struct Rel5_AssistanceData_Extension), offsetof(struct Rel5_AssistanceData_Extension, _asn_ctx), asn_MAP_Rel5_AssistanceData_Extension_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 0, /* Start extensions */ 2 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel5_AssistanceData_Extension = { "Rel5-AssistanceData-Extension", "Rel5-AssistanceData-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel5_AssistanceData_Extension_tags_1, sizeof(asn_DEF_Rel5_AssistanceData_Extension_tags_1) /sizeof(asn_DEF_Rel5_AssistanceData_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel5_AssistanceData_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel5_AssistanceData_Extension_tags_1) /sizeof(asn_DEF_Rel5_AssistanceData_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel5_AssistanceData_Extension_1, 1, /* Elements count */ &asn_SPC_Rel5_AssistanceData_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrsOfOtherSets.c0000644000175000017500000000434012576764164023637 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MsrsOfOtherSets.h" static asn_per_constraints_t asn_PER_type_OTD_MsrsOfOtherSets_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_OTD_MsrsOfOtherSets_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrsOfOtherSets, choice.identityNotPresent), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_Measurement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "identityNotPresent" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrsOfOtherSets, choice.identityPresent), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_MeasurementWithID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "identityPresent" }, }; static asn_TYPE_tag2member_t asn_MAP_OTD_MsrsOfOtherSets_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* identityNotPresent at 372 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* identityPresent at 374 */ }; static asn_CHOICE_specifics_t asn_SPC_OTD_MsrsOfOtherSets_specs_1 = { sizeof(struct OTD_MsrsOfOtherSets), offsetof(struct OTD_MsrsOfOtherSets, _asn_ctx), offsetof(struct OTD_MsrsOfOtherSets, present), sizeof(((struct OTD_MsrsOfOtherSets *)0)->present), asn_MAP_OTD_MsrsOfOtherSets_tag2el_1, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MsrsOfOtherSets = { "OTD-MsrsOfOtherSets", "OTD-MsrsOfOtherSets", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_OTD_MsrsOfOtherSets_constr_1, asn_MBR_OTD_MsrsOfOtherSets_1, 2, /* Elements count */ &asn_SPC_OTD_MsrsOfOtherSets_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MeasureInfo.h0000644000175000017500000000134212576764164023011 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPS_MeasureInfo_H_ #define _GPS_MeasureInfo_H_ #include /* Including external dependencies */ #include "SeqOfGPS-MsrSetElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GPS-MeasureInfo */ typedef struct GPS_MeasureInfo { SeqOfGPS_MsrSetElement_t gpsMsrSetList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPS_MeasureInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPS_MeasureInfo; #ifdef __cplusplus } #endif #endif /* _GPS_MeasureInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ModuloTimeSlot.h0000644000175000017500000000167112576764164023072 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ModuloTimeSlot_H_ #define _ModuloTimeSlot_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* ModuloTimeSlot */ typedef long ModuloTimeSlot_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ModuloTimeSlot; asn_struct_free_f ModuloTimeSlot_free; asn_struct_print_f ModuloTimeSlot_print; asn_constr_check_f ModuloTimeSlot_constraint; ber_type_decoder_f ModuloTimeSlot_decode_ber; der_type_encoder_f ModuloTimeSlot_encode_der; xer_type_decoder_f ModuloTimeSlot_decode_xer; xer_type_encoder_f ModuloTimeSlot_encode_xer; per_type_decoder_f ModuloTimeSlot_decode_uper; per_type_encoder_f ModuloTimeSlot_encode_uper; #ifdef __cplusplus } #endif #endif /* _ModuloTimeSlot_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel5-MsrPosition-Req-Extension.h0000644000175000017500000000162112576764164025737 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel5_MsrPosition_Req_Extension_H_ #define _Rel5_MsrPosition_Req_Extension_H_ #include /* Including external dependencies */ #include "Extended-reference.h" #include #ifdef __cplusplus extern "C" { #endif /* Rel5-MsrPosition-Req-Extension */ typedef struct Rel5_MsrPosition_Req_Extension { Extended_reference_t extended_reference; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel5_MsrPosition_Req_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel5_MsrPosition_Req_Extension; #ifdef __cplusplus } #endif #endif /* _Rel5_MsrPosition_Req_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrsOfOtherSets.h0000644000175000017500000000216312576764164023645 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MsrsOfOtherSets_H_ #define _OTD_MsrsOfOtherSets_H_ #include /* Including external dependencies */ #include "OTD-Measurement.h" #include "OTD-MeasurementWithID.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum OTD_MsrsOfOtherSets_PR { OTD_MsrsOfOtherSets_PR_NOTHING, /* No components present */ OTD_MsrsOfOtherSets_PR_identityNotPresent, OTD_MsrsOfOtherSets_PR_identityPresent } OTD_MsrsOfOtherSets_PR; /* OTD-MsrsOfOtherSets */ typedef struct OTD_MsrsOfOtherSets { OTD_MsrsOfOtherSets_PR present; union OTD_MsrsOfOtherSets_u { OTD_Measurement_t identityNotPresent; OTD_MeasurementWithID_t identityPresent; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MsrsOfOtherSets_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MsrsOfOtherSets; #ifdef __cplusplus } #endif #endif /* _OTD_MsrsOfOtherSets_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/IonosphericModel.h0000644000175000017500000000144612576764164023415 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _IonosphericModel_H_ #define _IonosphericModel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* IonosphericModel */ typedef struct IonosphericModel { long alfa0; long alfa1; long alfa2; long alfa3; long beta0; long beta1; long beta2; long beta3; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } IonosphericModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_IonosphericModel; #ifdef __cplusplus } #endif #endif /* _IonosphericModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSSatelliteElement.c0000644000175000017500000000360512576764164025136 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSSSatelliteElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSSSatelliteElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSSSatelliteElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSSSatelliteElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSSSatelliteElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSSSatelliteElement_specs_1 = { sizeof(struct SeqOfGANSSSatelliteElement), offsetof(struct SeqOfGANSSSatelliteElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSSatelliteElement = { "SeqOfGANSSSatelliteElement", "SeqOfGANSSSatelliteElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSSSatelliteElement_tags_1, sizeof(asn_DEF_SeqOfGANSSSatelliteElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSSatelliteElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSSSatelliteElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSSSatelliteElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSSatelliteElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSSSatelliteElement_constr_1, asn_MBR_SeqOfGANSSSatelliteElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSSSatelliteElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSSatelliteElement.c0000644000175000017500000001131412576764164024174 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSSatelliteElement.h" static int memb_svHealth_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -7 && value <= 13)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_iod_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_svHealth_constr_3 = { { APC_CONSTRAINED, 5, 5, -7, 13 } /* (-7..13) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_iod_constr_4 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSSatelliteElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSSatelliteElement, svID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSSatelliteElement, svHealth), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_svHealth_constraint_1, &asn_PER_memb_svHealth_constr_3, 0, "svHealth" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSSatelliteElement, iod), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_iod_constraint_1, &asn_PER_memb_iod_constr_4, 0, "iod" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSSatelliteElement, ganssClockModel), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_GANSSClockModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssClockModel" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSSatelliteElement, ganssOrbitModel), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_GANSSOrbitModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssOrbitModel" }, }; static ber_tlv_tag_t asn_DEF_GANSSSatelliteElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSSatelliteElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* svID at 1238 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* svHealth at 1239 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* iod at 1240 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ganssClockModel at 1241 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ganssOrbitModel at 1242 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSSatelliteElement_specs_1 = { sizeof(struct GANSSSatelliteElement), offsetof(struct GANSSSatelliteElement, _asn_ctx), asn_MAP_GANSSSatelliteElement_tag2el_1, 5, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 4, /* Start extensions */ 6 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSSatelliteElement = { "GANSSSatelliteElement", "GANSSSatelliteElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSSatelliteElement_tags_1, sizeof(asn_DEF_GANSSSatelliteElement_tags_1) /sizeof(asn_DEF_GANSSSatelliteElement_tags_1[0]), /* 1 */ asn_DEF_GANSSSatelliteElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSSatelliteElement_tags_1) /sizeof(asn_DEF_GANSSSatelliteElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSSatelliteElement_1, 5, /* Elements count */ &asn_SPC_GANSSSatelliteElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_SEQUENCE_OF.h0000644000175000017500000000164212576764164023334 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SEQUENCE_OF_H_ #define _CONSTR_SEQUENCE_OF_H_ #include #include /* Implemented using SET OF */ #ifdef __cplusplus extern "C" { #endif /* * A set specialized functions dealing with the SEQUENCE OF type. * Generally implemented using SET OF. */ #define SEQUENCE_OF_free SET_OF_free #define SEQUENCE_OF_print SET_OF_print #define SEQUENCE_OF_constraint SET_OF_constraint #define SEQUENCE_OF_decode_ber SET_OF_decode_ber #define SEQUENCE_OF_decode_xer SET_OF_decode_xer #define SEQUENCE_OF_decode_uper SET_OF_decode_uper der_type_encoder_f SEQUENCE_OF_encode_der; xer_type_encoder_f SEQUENCE_OF_encode_xer; per_type_encoder_f SEQUENCE_OF_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SET_OF_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSUTCModel.h0000644000175000017500000000151312576764164022355 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSUTCModel_H_ #define _GANSSUTCModel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* GANSSUTCModel */ typedef struct GANSSUTCModel { long ganssUtcA1; long ganssUtcA0; long ganssUtcTot; long ganssUtcWNt; long ganssUtcDeltaTls; long ganssUtcWNlsf; long ganssUtcDN; long ganssUtcDeltaTlsf; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSUTCModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSUTCModel; #ifdef __cplusplus } #endif #endif /* _GANSSUTCModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RefQuality.c0000644000175000017500000001107612576764164022232 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RefQuality.h" int RefQuality_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void RefQuality_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void RefQuality_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { RefQuality_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int RefQuality_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { RefQuality_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t RefQuality_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { RefQuality_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t RefQuality_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { RefQuality_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t RefQuality_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { RefQuality_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t RefQuality_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { RefQuality_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t RefQuality_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { RefQuality_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t RefQuality_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { RefQuality_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_RefQuality_constr_1 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_RefQuality_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_RefQuality = { "RefQuality", "RefQuality", RefQuality_free, RefQuality_print, RefQuality_constraint, RefQuality_decode_ber, RefQuality_encode_der, RefQuality_decode_xer, RefQuality_encode_xer, RefQuality_decode_uper, RefQuality_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RefQuality_tags_1, sizeof(asn_DEF_RefQuality_tags_1) /sizeof(asn_DEF_RefQuality_tags_1[0]), /* 1 */ asn_DEF_RefQuality_tags_1, /* Same as above */ sizeof(asn_DEF_RefQuality_tags_1) /sizeof(asn_DEF_RefQuality_tags_1[0]), /* 1 */ &asn_PER_type_RefQuality_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSGenericAssistDataElement.c0000644000175000017500000000404312576764164026542 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSSGenericAssistDataElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSSGenericAssistDataElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSSGenericAssistDataElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSSGenericAssistDataElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSSGenericAssistDataElement_specs_1 = { sizeof(struct SeqOfGANSSGenericAssistDataElement), offsetof(struct SeqOfGANSSGenericAssistDataElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSGenericAssistDataElement = { "SeqOfGANSSGenericAssistDataElement", "SeqOfGANSSGenericAssistDataElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1, sizeof(asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSGenericAssistDataElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSSGenericAssistDataElement_constr_1, asn_MBR_SeqOfGANSSGenericAssistDataElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSSGenericAssistDataElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSS-MsrSetElement.c0000644000175000017500000000353312576764164024502 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSS-MsrSetElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSS_MsrSetElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSS_MsrSetElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSS_MsrSetElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSS_MsrSetElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSS_MsrSetElement_specs_1 = { sizeof(struct SeqOfGANSS_MsrSetElement), offsetof(struct SeqOfGANSS_MsrSetElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSS_MsrSetElement = { "SeqOfGANSS-MsrSetElement", "SeqOfGANSS-MsrSetElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSS_MsrSetElement_tags_1, sizeof(asn_DEF_SeqOfGANSS_MsrSetElement_tags_1) /sizeof(asn_DEF_SeqOfGANSS_MsrSetElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSS_MsrSetElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSS_MsrSetElement_tags_1) /sizeof(asn_DEF_SeqOfGANSS_MsrSetElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSS_MsrSetElement_constr_1, asn_MBR_SeqOfGANSS_MsrSetElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSS_MsrSetElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatElement.c0000644000175000017500000002442612576764164022211 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SatElement.h" static int memb_iode_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 239)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_udre_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_pseudoRangeCor_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -2047 && value <= 2047)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_rangeRateCor_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -127 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_deltaPseudoRangeCor2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -127 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_deltaRangeRateCor2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -7 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_deltaPseudoRangeCor3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -127 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_deltaRangeRateCor3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -7 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_iode_constr_3 = { { APC_CONSTRAINED, 8, 8, 0, 239 } /* (0..239) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_udre_constr_4 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_pseudoRangeCor_constr_5 = { { APC_CONSTRAINED, 12, 12, -2047, 2047 } /* (-2047..2047) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_rangeRateCor_constr_6 = { { APC_CONSTRAINED, 8, 8, -127, 127 } /* (-127..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_deltaPseudoRangeCor2_constr_7 = { { APC_CONSTRAINED, 8, 8, -127, 127 } /* (-127..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_deltaRangeRateCor2_constr_8 = { { APC_CONSTRAINED, 4, 4, -7, 7 } /* (-7..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_deltaPseudoRangeCor3_constr_9 = { { APC_CONSTRAINED, 8, 8, -127, 127 } /* (-127..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_deltaRangeRateCor3_constr_10 = { { APC_CONSTRAINED, 4, 4, -7, 7 } /* (-7..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SatElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SatElement, satelliteID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "satelliteID" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, iode), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_iode_constraint_1, &asn_PER_memb_iode_constr_3, 0, "iode" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, udre), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_udre_constraint_1, &asn_PER_memb_udre_constr_4, 0, "udre" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, pseudoRangeCor), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_pseudoRangeCor_constraint_1, &asn_PER_memb_pseudoRangeCor_constr_5, 0, "pseudoRangeCor" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, rangeRateCor), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_rangeRateCor_constraint_1, &asn_PER_memb_rangeRateCor_constr_6, 0, "rangeRateCor" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, deltaPseudoRangeCor2), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_deltaPseudoRangeCor2_constraint_1, &asn_PER_memb_deltaPseudoRangeCor2_constr_7, 0, "deltaPseudoRangeCor2" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, deltaRangeRateCor2), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_deltaRangeRateCor2_constraint_1, &asn_PER_memb_deltaRangeRateCor2_constr_8, 0, "deltaRangeRateCor2" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, deltaPseudoRangeCor3), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_deltaPseudoRangeCor3_constraint_1, &asn_PER_memb_deltaPseudoRangeCor3_constr_9, 0, "deltaPseudoRangeCor3" }, { ATF_NOFLAGS, 0, offsetof(struct SatElement, deltaRangeRateCor3), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_deltaRangeRateCor3_constraint_1, &asn_PER_memb_deltaRangeRateCor3_constr_10, 0, "deltaRangeRateCor3" }, }; static ber_tlv_tag_t asn_DEF_SatElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SatElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* satelliteID at 664 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iode at 667 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* udre at 669 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pseudoRangeCor at 673 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* rangeRateCor at 677 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* deltaPseudoRangeCor2 at 680 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* deltaRangeRateCor2 at 683 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* deltaPseudoRangeCor3 at 686 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* deltaRangeRateCor3 at 689 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SatElement_specs_1 = { sizeof(struct SatElement), offsetof(struct SatElement, _asn_ctx), asn_MAP_SatElement_tag2el_1, 9, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SatElement = { "SatElement", "SatElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SatElement_tags_1, sizeof(asn_DEF_SatElement_tags_1) /sizeof(asn_DEF_SatElement_tags_1[0]), /* 1 */ asn_DEF_SatElement_tags_1, /* Same as above */ sizeof(asn_DEF_SatElement_tags_1) /sizeof(asn_DEF_SatElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SatElement_1, 9, /* Elements count */ &asn_SPC_SatElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSS-SgnTypeElement.h0000644000175000017500000000164612576764164024666 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSS_SgnTypeElement_H_ #define _SeqOfGANSS_SgnTypeElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSS_SgnTypeElement; /* SeqOfGANSS-SgnTypeElement */ typedef struct SeqOfGANSS_SgnTypeElement { A_SEQUENCE_OF(struct GANSS_SgnTypeElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSS_SgnTypeElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSS_SgnTypeElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSS-SgnTypeElement.h" #endif /* _SeqOfGANSS_SgnTypeElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTODUncertainty.h0000644000175000017500000000200412576764164023611 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSTODUncertainty_H_ #define _GANSSTODUncertainty_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GANSSTODUncertainty */ typedef long GANSSTODUncertainty_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSTODUncertainty; asn_struct_free_f GANSSTODUncertainty_free; asn_struct_print_f GANSSTODUncertainty_print; asn_constr_check_f GANSSTODUncertainty_constraint; ber_type_decoder_f GANSSTODUncertainty_decode_ber; der_type_encoder_f GANSSTODUncertainty_encode_der; xer_type_decoder_f GANSSTODUncertainty_decode_xer; xer_type_encoder_f GANSSTODUncertainty_encode_xer; per_type_decoder_f GANSSTODUncertainty_decode_uper; per_type_encoder_f GANSSTODUncertainty_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSTODUncertainty_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSLocationInfo.c0000644000175000017500000001601712576764164023325 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSLocationInfo.h" static int memb_ganssTODFrac_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 16384)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssTimeID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stationaryIndication_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssTODFrac_constr_4 = { { APC_CONSTRAINED, 15, 15, 0, 16384 } /* (0..16384) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssTimeID_constr_6 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stationaryIndication_constr_9 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSLocationInfo_1[] = { { ATF_POINTER, 5, offsetof(struct GANSSLocationInfo, referenceFrame), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceFrame, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceFrame" }, { ATF_POINTER, 4, offsetof(struct GANSSLocationInfo, ganssTODm), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTODm, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODm" }, { ATF_POINTER, 3, offsetof(struct GANSSLocationInfo, ganssTODFrac), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssTODFrac_constraint_1, &asn_PER_memb_ganssTODFrac_constr_4, 0, "ganssTODFrac" }, { ATF_POINTER, 2, offsetof(struct GANSSLocationInfo, ganssTODUncertainty), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTODUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODUncertainty" }, { ATF_POINTER, 1, offsetof(struct GANSSLocationInfo, ganssTimeID), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssTimeID_constraint_1, &asn_PER_memb_ganssTimeID_constr_6, 0, "ganssTimeID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSLocationInfo, fixType), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FixType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fixType" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSLocationInfo, posData), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PositionData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posData" }, { ATF_POINTER, 1, offsetof(struct GANSSLocationInfo, stationaryIndication), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stationaryIndication_constraint_1, &asn_PER_memb_stationaryIndication_constr_9, 0, "stationaryIndication" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSLocationInfo, posEstimate), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Ext_GeographicalInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posEstimate" }, }; static int asn_MAP_GANSSLocationInfo_oms_1[] = { 0, 1, 2, 3, 4, 7 }; static ber_tlv_tag_t asn_DEF_GANSSLocationInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSLocationInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceFrame at 1411 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssTODm at 1412 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ganssTODFrac at 1413 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ganssTODUncertainty at 1414 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ganssTimeID at 1415 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* fixType at 1416 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* posData at 1417 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* stationaryIndication at 1418 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* posEstimate at 1424 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSLocationInfo_specs_1 = { sizeof(struct GANSSLocationInfo), offsetof(struct GANSSLocationInfo, _asn_ctx), asn_MAP_GANSSLocationInfo_tag2el_1, 9, /* Count of tags in the map */ asn_MAP_GANSSLocationInfo_oms_1, /* Optional members */ 6, 0, /* Root/Additions */ 8, /* Start extensions */ 10 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSLocationInfo = { "GANSSLocationInfo", "GANSSLocationInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSLocationInfo_tags_1, sizeof(asn_DEF_GANSSLocationInfo_tags_1) /sizeof(asn_DEF_GANSSLocationInfo_tags_1[0]), /* 1 */ asn_DEF_GANSSLocationInfo_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSLocationInfo_tags_1) /sizeof(asn_DEF_GANSSLocationInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSLocationInfo_1, 9, /* Elements count */ &asn_SPC_GANSSLocationInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceRelation.c0000644000175000017500000001251712576764164023542 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceRelation.h" int ReferenceRelation_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void ReferenceRelation_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void ReferenceRelation_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ReferenceRelation_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int ReferenceRelation_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t ReferenceRelation_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t ReferenceRelation_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t ReferenceRelation_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t ReferenceRelation_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t ReferenceRelation_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t ReferenceRelation_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ReferenceRelation_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_ReferenceRelation_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_ReferenceRelation_value2enum_1[] = { { 0, 17, "secondBTSThirdSet" }, { 1, 18, "secondBTSSecondSet" }, { 2, 16, "firstBTSFirstSet" } }; static unsigned int asn_MAP_ReferenceRelation_enum2value_1[] = { 2, /* firstBTSFirstSet(2) */ 1, /* secondBTSSecondSet(1) */ 0 /* secondBTSThirdSet(0) */ }; static asn_INTEGER_specifics_t asn_SPC_ReferenceRelation_specs_1 = { asn_MAP_ReferenceRelation_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_ReferenceRelation_enum2value_1, /* N => "tag"; sorted by N */ 3, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_ReferenceRelation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ReferenceRelation = { "ReferenceRelation", "ReferenceRelation", ReferenceRelation_free, ReferenceRelation_print, ReferenceRelation_constraint, ReferenceRelation_decode_ber, ReferenceRelation_encode_der, ReferenceRelation_decode_xer, ReferenceRelation_encode_xer, ReferenceRelation_decode_uper, ReferenceRelation_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ReferenceRelation_tags_1, sizeof(asn_DEF_ReferenceRelation_tags_1) /sizeof(asn_DEF_ReferenceRelation_tags_1[0]), /* 1 */ asn_DEF_ReferenceRelation_tags_1, /* Same as above */ sizeof(asn_DEF_ReferenceRelation_tags_1) /sizeof(asn_DEF_ReferenceRelation_tags_1[0]), /* 1 */ &asn_PER_type_ReferenceRelation_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_ReferenceRelation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_SEQUENCE_OF.h0000644000175000017500000000273512576764164022611 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_SEQUENCE_OF_H #define ASN_SEQUENCE_OF_H #include #ifdef __cplusplus extern "C" { #endif /* * SEQUENCE OF is the same as SET OF with a tiny difference: * the delete operation preserves the initial order of elements * and thus MAY operate in non-constant time. */ #define A_SEQUENCE_OF(type) A_SET_OF(type) #define ASN_SEQUENCE_ADD(headptr, ptr) \ asn_sequence_add((headptr), (ptr)) /*********************************************** * Implementation of the SEQUENCE OF structure. */ #define asn_sequence_add asn_set_add #define asn_sequence_empty asn_set_empty /* * Delete the element from the set by its number (base 0). * This is NOT a constant-time operation. * The order of elements is preserved. * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); /* * Cope with different conversions requirements to/from void in C and C++. * This is mostly useful for support library. */ typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; #define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) #define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) #ifdef __cplusplus } #endif #endif /* ASN_SEQUENCE_OF_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo.h0000644000175000017500000000163612576764164023014 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MeasureInfo_H_ #define _OTD_MeasureInfo_H_ #include /* Including external dependencies */ #include "OTD-MsrElementFirst.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SeqOfOTD_MsrElementRest; /* OTD-MeasureInfo */ typedef struct OTD_MeasureInfo { OTD_MsrElementFirst_t otdMsrFirstSets; struct SeqOfOTD_MsrElementRest *otdMsrRestSets /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MeasureInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MeasureInfo; #ifdef __cplusplus } #endif /* Referred external types */ #include "SeqOfOTD-MsrElementRest.h" #endif /* _OTD_MeasureInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-SgnTypeElement.h0000644000175000017500000000146412576764164023726 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSS_SgnTypeElement_H_ #define _GANSS_SgnTypeElement_H_ #include /* Including external dependencies */ #include #include "SeqOfGANSS-SgnElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSS-SgnTypeElement */ typedef struct GANSS_SgnTypeElement { long ganssSignalID; SeqOfGANSS_SgnElement_t ganss_SgnList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSS_SgnTypeElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSS_SgnTypeElement; #ifdef __cplusplus } #endif #endif /* _GANSS_SgnTypeElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSIonosphereModel.c0000644000175000017500000001107312576764164024032 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSIonosphereModel.h" static int memb_ai0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 4095)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ai1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 4095)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ai2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 4095)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ai0_constr_2 = { { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ai1_constr_3 = { { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ai2_constr_4 = { { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSIonosphereModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSIonosphereModel, ai0), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ai0_constraint_1, &asn_PER_memb_ai0_constr_2, 0, "ai0" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSIonosphereModel, ai1), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ai1_constraint_1, &asn_PER_memb_ai1_constr_3, 0, "ai1" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSIonosphereModel, ai2), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ai2_constraint_1, &asn_PER_memb_ai2_constr_4, 0, "ai2" }, }; static ber_tlv_tag_t asn_DEF_GANSSIonosphereModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSIonosphereModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ai0 at 1145 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ai1 at 1146 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ai2 at 1147 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSIonosphereModel_specs_1 = { sizeof(struct GANSSIonosphereModel), offsetof(struct GANSSIonosphereModel, _asn_ctx), asn_MAP_GANSSIonosphereModel_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSIonosphereModel = { "GANSSIonosphereModel", "GANSSIonosphereModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSIonosphereModel_tags_1, sizeof(asn_DEF_GANSSIonosphereModel_tags_1) /sizeof(asn_DEF_GANSSIonosphereModel_tags_1[0]), /* 1 */ asn_DEF_GANSSIonosphereModel_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSIonosphereModel_tags_1) /sizeof(asn_DEF_GANSSIonosphereModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSIonosphereModel_1, 3, /* Elements count */ &asn_SPC_GANSSIonosphereModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSS-SgnElement.h0000644000175000017500000000157612576764164024026 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSS_SgnElement_H_ #define _SeqOfGANSS_SgnElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSS_SgnElement; /* SeqOfGANSS-SgnElement */ typedef struct SeqOfGANSS_SgnElement { A_SEQUENCE_OF(struct GANSS_SgnElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSS_SgnElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSS_SgnElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSS-SgnElement.h" #endif /* _SeqOfGANSS_SgnElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTOD-GSMTimeAssociation.c0000644000175000017500000000771712576764164025036 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSTOD-GSMTimeAssociation.h" static asn_TYPE_member_t asn_MBR_GANSSTOD_GSMTimeAssociation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSTOD_GSMTimeAssociation, bcchCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BCCHCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bcchCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSTOD_GSMTimeAssociation, bsic), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSIC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsic" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSTOD_GSMTimeAssociation, frameNumber), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrameNumber, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "frameNumber" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSTOD_GSMTimeAssociation, timeSlot), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeSlot, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeSlot" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSTOD_GSMTimeAssociation, bitNumber), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BitNumber, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bitNumber" }, { ATF_POINTER, 1, offsetof(struct GANSSTOD_GSMTimeAssociation, frameDrift), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrameDrift, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "frameDrift" }, }; static int asn_MAP_GANSSTOD_GSMTimeAssociation_oms_1[] = { 5 }; static ber_tlv_tag_t asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSTOD_GSMTimeAssociation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bcchCarrier at 1118 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bsic at 1119 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* frameNumber at 1120 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* timeSlot at 1121 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* bitNumber at 1122 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* frameDrift at 1123 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSTOD_GSMTimeAssociation_specs_1 = { sizeof(struct GANSSTOD_GSMTimeAssociation), offsetof(struct GANSSTOD_GSMTimeAssociation, _asn_ctx), asn_MAP_GANSSTOD_GSMTimeAssociation_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_GANSSTOD_GSMTimeAssociation_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSTOD_GSMTimeAssociation = { "GANSSTOD-GSMTimeAssociation", "GANSSTOD-GSMTimeAssociation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1, sizeof(asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1) /sizeof(asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1[0]), /* 1 */ asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1) /sizeof(asn_DEF_GANSSTOD_GSMTimeAssociation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSTOD_GSMTimeAssociation_1, 6, /* Elements count */ &asn_SPC_GANSSTOD_GSMTimeAssociation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TLMWord.h0000644000175000017500000000152012576764164021433 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TLMWord_H_ #define _TLMWord_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TLMWord */ typedef long TLMWord_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TLMWord; asn_struct_free_f TLMWord_free; asn_struct_print_f TLMWord_print; asn_constr_check_f TLMWord_constraint; ber_type_decoder_f TLMWord_decode_ber; der_type_encoder_f TLMWord_encode_der; xer_type_decoder_f TLMWord_decode_xer; xer_type_encoder_f TLMWord_encode_xer; per_type_decoder_f TLMWord_decode_uper; per_type_encoder_f TLMWord_encode_uper; #ifdef __cplusplus } #endif #endif /* _TLMWord_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceIdentity.c0000644000175000017500000000354012576764164023552 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceIdentity.h" static asn_TYPE_member_t asn_MBR_ReferenceIdentity_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ReferenceIdentity, refBTSList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfReferenceIdentityType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "refBTSList" }, }; static ber_tlv_tag_t asn_DEF_ReferenceIdentity_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ReferenceIdentity_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* refBTSList at 289 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ReferenceIdentity_specs_1 = { sizeof(struct ReferenceIdentity), offsetof(struct ReferenceIdentity, _asn_ctx), asn_MAP_ReferenceIdentity_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ReferenceIdentity = { "ReferenceIdentity", "ReferenceIdentity", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ReferenceIdentity_tags_1, sizeof(asn_DEF_ReferenceIdentity_tags_1) /sizeof(asn_DEF_ReferenceIdentity_tags_1[0]), /* 1 */ asn_DEF_ReferenceIdentity_tags_1, /* Same as above */ sizeof(asn_DEF_ReferenceIdentity_tags_1) /sizeof(asn_DEF_ReferenceIdentity_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ReferenceIdentity_1, 1, /* Elements count */ &asn_SPC_ReferenceIdentity_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSDataBitAssist.c0000644000175000017500000001050612576764164023435 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSDataBitAssist.h" static int memb_ganssTOD_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 59)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssDataTypeID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 2)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssTOD_constr_2 = { { APC_CONSTRAINED, 6, 6, 0, 59 } /* (0..59) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssDataTypeID_constr_4 = { { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSDataBitAssist_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSDataBitAssist, ganssTOD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssTOD_constraint_1, &asn_PER_memb_ganssTOD_constr_2, 0, "ganssTOD" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSDataBitAssist, svID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSDataBitAssist, ganssDataTypeID), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssDataTypeID_constraint_1, &asn_PER_memb_ganssDataTypeID_constr_4, 0, "ganssDataTypeID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSDataBitAssist, ganssDataBits), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOf_GANSSDataBits, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssDataBits" }, }; static ber_tlv_tag_t asn_DEF_GANSSDataBitAssist_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSDataBitAssist_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssTOD at 1307 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* svID at 1308 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ganssDataTypeID at 1309 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ganssDataBits at 1313 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSDataBitAssist_specs_1 = { sizeof(struct GANSSDataBitAssist), offsetof(struct GANSSDataBitAssist, _asn_ctx), asn_MAP_GANSSDataBitAssist_tag2el_1, 4, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSDataBitAssist = { "GANSSDataBitAssist", "GANSSDataBitAssist", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSDataBitAssist_tags_1, sizeof(asn_DEF_GANSSDataBitAssist_tags_1) /sizeof(asn_DEF_GANSSDataBitAssist_tags_1[0]), /* 1 */ asn_DEF_GANSSDataBitAssist_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSDataBitAssist_tags_1) /sizeof(asn_DEF_GANSSDataBitAssist_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSDataBitAssist_1, 4, /* Elements count */ &asn_SPC_GANSSDataBitAssist_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/converter-sample.c0000644000175000017500000005370612576764164023441 0ustar carlescarles/* * Generic converter template for a selected ASN.1 type. * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * * To compile with your own ASN.1 type, please redefine the PDU as shown: * * cc -DPDU=MyCustomType -o myDecoder.o -c converter-sample.c */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* for atoi(3) */ #include /* for getopt(3) */ #include /* for strerror(3) */ #include /* for EX_* exit codes */ #include /* for errno */ #include #include /* for _ASN_DEFAULT_STACK_MAX */ /* Convert "Type" defined by -DPDU into "asn_DEF_Type" */ #define ASN_DEF_PDU(t) asn_DEF_ ## t #define DEF_PDU_Type(t) ASN_DEF_PDU(t) #define PDU_Type DEF_PDU_Type(PDU) extern asn_TYPE_descriptor_t PDU_Type; /* ASN.1 type to be decoded */ #ifdef ASN_PDU_COLLECTION /* Generated by asn1c: -pdu=... */ extern asn_TYPE_descriptor_t *asn_pdu_collection[]; #endif /* * Open file and parse its contens. */ static void *data_decode_from_file(asn_TYPE_descriptor_t *asnTypeOfPDU, FILE *file, const char *name, ssize_t suggested_bufsize, int first_pdu); static int write_out(const void *buffer, size_t size, void *key); static FILE *argument_to_file(char *av[], int idx); static char *argument_to_name(char *av[], int idx); int opt_debug; /* -d (or -dd) */ static int opt_check; /* -c (constraints checking) */ static int opt_stack; /* -s (maximum stack size) */ static int opt_nopad; /* -per-nopad (PER input is not padded) */ static int opt_onepdu; /* -1 (decode single PDU) */ /* Input data format selector */ static enum input_format { INP_BER, /* -iber: BER input */ INP_XER, /* -ixer: XER input */ INP_PER /* -iper: Unaligned PER input */ } iform; /* -i */ /* Output data format selector */ static enum output_format { OUT_XER, /* -oxer: XER (XML) output */ OUT_DER, /* -oder: DER (BER) output */ OUT_PER, /* -oper: Unaligned PER output */ OUT_TEXT, /* -otext: semi-structured text */ OUT_NULL /* -onull: No pretty-printing */ } oform; /* -o */ #ifdef JUNKTEST /* Enable -J */ #define JUNKOPT "J:" static double opt_jprob; /* Junk bit probability */ static int junk_failures; static void junk_bytes_with_probability(uint8_t *, size_t, double prob); #else #define JUNKOPT #endif /* Debug output function */ static inline void DEBUG(const char *fmt, ...) { va_list ap; if(!opt_debug) return; fprintf(stderr, "AD: "); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); fprintf(stderr, "\n"); } int main(int ac, char *av[]) { static asn_TYPE_descriptor_t *pduType = &PDU_Type; ssize_t suggested_bufsize = 8192; /* close or equal to stdio buffer */ int number_of_iterations = 1; int num; int ch; /* Figure out if Unaligned PER needs to be default */ if(pduType->uper_decoder) iform = INP_PER; /* * Pocess the command-line argments. */ while((ch = getopt(ac, av, "i:o:1b:cdn:p:hs:" JUNKOPT)) != -1) switch(ch) { case 'i': if(optarg[0] == 'b') { iform = INP_BER; break; } if(optarg[0] == 'x') { iform = INP_XER; break; } if(pduType->uper_decoder && optarg[0] == 'p') { iform = INP_PER; break; } fprintf(stderr, "-i: '%s': improper format selector\n", optarg); exit(EX_UNAVAILABLE); case 'o': if(optarg[0] == 'd') { oform = OUT_DER; break; } if(pduType->uper_encoder && optarg[0] == 'p') { oform = OUT_PER; break; } if(optarg[0] == 'x') { oform = OUT_XER; break; } if(optarg[0] == 't') { oform = OUT_TEXT; break; } if(optarg[0] == 'n') { oform = OUT_NULL; break; } fprintf(stderr, "-o: '%s': improper format selector\n", optarg); exit(EX_UNAVAILABLE); case '1': opt_onepdu = 1; break; case 'b': suggested_bufsize = atoi(optarg); if(suggested_bufsize < 1 || suggested_bufsize > 16 * 1024 * 1024) { fprintf(stderr, "-b %s: Improper buffer size (1..16M)\n", optarg); exit(EX_UNAVAILABLE); } break; case 'c': opt_check = 1; break; case 'd': opt_debug++; /* Double -dd means ASN.1 debug */ break; case 'n': number_of_iterations = atoi(optarg); if(number_of_iterations < 1) { fprintf(stderr, "-n %s: Improper iterations count\n", optarg); exit(EX_UNAVAILABLE); } break; case 'p': if(strcmp(optarg, "er-nopad") == 0) { opt_nopad = 1; break; } #ifdef ASN_PDU_COLLECTION if(strcmp(optarg, "list") == 0) { asn_TYPE_descriptor_t **pdu = asn_pdu_collection; fprintf(stderr, "Available PDU types:\n"); for(; *pdu; pdu++) printf("%s\n", (*pdu)->name); exit(0); } else if(optarg[0] >= 'A' && optarg[0] <= 'Z') { asn_TYPE_descriptor_t **pdu = asn_pdu_collection; while(*pdu && strcmp((*pdu)->name, optarg)) pdu++; if(*pdu) { pduType = *pdu; break; } fprintf(stderr, "-p %s: Unrecognized PDU\n", optarg); } #endif /* ASN_PDU_COLLECTION */ fprintf(stderr, "-p %s: Unrecognized option\n", optarg); exit(EX_UNAVAILABLE); case 's': opt_stack = atoi(optarg); if(opt_stack < 0) { fprintf(stderr, "-s %s: Non-negative value expected\n", optarg); exit(EX_UNAVAILABLE); } break; #ifdef JUNKTEST case 'J': opt_jprob = strtod(optarg, 0); if(opt_jprob <= 0.0 || opt_jprob > 1.0) { fprintf(stderr, "-J %s: Probability range 0..1 expected \n", optarg); exit(EX_UNAVAILABLE); } break; #endif /* JUNKTEST */ case 'h': default: #ifdef ASN_CONVERTER_TITLE #define _AXS(x) #x #define _ASX(x) _AXS(x) fprintf(stderr, "%s\n", _ASX(ASN_CONVERTER_TITLE)); #endif fprintf(stderr, "Usage: %s [options] ...\n", av[0]); fprintf(stderr, "Where options are:\n"); if(pduType->uper_decoder) fprintf(stderr, " -iper Input is in Unaligned PER (Packed Encoding Rules) (DEFAULT)\n"); fprintf(stderr, " -iber Input is in BER (Basic Encoding Rules)%s\n", iform == INP_PER ? "" : " (DEFAULT)"); fprintf(stderr, " -ixer Input is in XER (XML Encoding Rules)\n"); if(pduType->uper_encoder) fprintf(stderr, " -oper Output in Unaligned PER (Packed Encoding Rules)\n"); fprintf(stderr, " -oder Output in DER (Distinguished Encoding Rules)\n" " -oxer Output in XER (XML Encoding Rules) (DEFAULT)\n" " -otext Output in plain semi-structured text (dump)\n" " -onull Verify (decode) input, but do not output\n"); if(pduType->uper_decoder) fprintf(stderr, " -per-nopad Assume PER PDUs are not padded (-iper)\n"); #ifdef ASN_PDU_COLLECTION fprintf(stderr, " -p Specify PDU type to decode\n" " -p list List available PDUs\n"); #endif /* ASN_PDU_COLLECTION */ fprintf(stderr, " -1 Decode only the first PDU in file\n" " -b Set the i/o buffer size (default is %ld)\n" " -c Check ASN.1 constraints after decoding\n" " -d Enable debugging (-dd is even better)\n" " -n Process files times\n" " -s Set the stack usage limit (default is %d)\n" #ifdef JUNKTEST " -J Set random junk test bit garbaging probability\n" #endif , (long)suggested_bufsize, _ASN_DEFAULT_STACK_MAX); exit(EX_USAGE); } ac -= optind; av += optind; if(ac < 1) { fprintf(stderr, "%s: No input files specified. " "Try '-h' for more information\n", av[-optind]); exit(EX_USAGE); } setvbuf(stdout, 0, _IOLBF, 0); for(num = 0; num < number_of_iterations; num++) { int ac_i; /* * Process all files in turn. */ for(ac_i = 0; ac_i < ac; ac_i++) { asn_enc_rval_t erv; void *structure; /* Decoded structure */ FILE *file = argument_to_file(av, ac_i); char *name = argument_to_name(av, ac_i); int first_pdu; for(first_pdu = 1; first_pdu || !opt_onepdu; first_pdu = 0) { /* * Decode the encoded structure from file. */ structure = data_decode_from_file(pduType, file, name, suggested_bufsize, first_pdu); if(!structure) { if(errno) { /* Error message is already printed */ exit(EX_DATAERR); } else { /* EOF */ break; } } /* Check ASN.1 constraints */ if(opt_check) { char errbuf[128]; size_t errlen = sizeof(errbuf); if(asn_check_constraints(pduType, structure, errbuf, &errlen)) { fprintf(stderr, "%s: ASN.1 constraint " "check failed: %s\n", name, errbuf); exit(EX_DATAERR); } } switch(oform) { case OUT_NULL: #ifdef JUNKTEST if(opt_jprob == 0.0) #endif fprintf(stderr, "%s: decoded successfully\n", name); break; case OUT_TEXT: /* -otext */ asn_fprint(stdout, pduType, structure); break; case OUT_XER: /* -oxer */ if(xer_fprint(stdout, pduType, structure)) { fprintf(stderr, "%s: Cannot convert %s into XML\n", name, pduType->name); exit(EX_UNAVAILABLE); } break; case OUT_DER: erv = der_encode(pduType, structure, write_out, stdout); if(erv.encoded < 0) { fprintf(stderr, "%s: Cannot convert %s into DER\n", name, pduType->name); exit(EX_UNAVAILABLE); } DEBUG("Encoded in %ld bytes of DER", (long)erv.encoded); break; case OUT_PER: erv = uper_encode(pduType, structure, write_out, stdout); if(erv.encoded < 0) { fprintf(stderr, "%s: Cannot convert %s into Unaligned PER\n", name, pduType->name); exit(EX_UNAVAILABLE); } DEBUG("Encoded in %ld bits of UPER", (long)erv.encoded); break; } ASN_STRUCT_FREE(*pduType, structure); } if(file && file != stdin) fclose(file); } } #ifdef JUNKTEST if(opt_jprob > 0.0) { fprintf(stderr, "Junked %f OK (%d/%d)\n", opt_jprob, junk_failures, number_of_iterations); } #endif /* JUNKTEST */ return 0; } static struct dynamic_buffer { uint8_t *data; /* Pointer to the data bytes */ size_t offset; /* Offset from the start */ size_t length; /* Length of meaningful contents */ size_t unbits; /* Unused bits in the last byte */ size_t allocated; /* Allocated memory for data */ int nreallocs; /* Number of data reallocations */ off_t bytes_shifted; /* Number of bytes ever shifted */ } DynamicBuffer; static void buffer_dump() { uint8_t *p = DynamicBuffer.data + DynamicBuffer.offset; uint8_t *e = p + DynamicBuffer.length - (DynamicBuffer.unbits ? 1 : 0); if(!opt_debug) return; DEBUG("Buffer: { d=%p, o=%ld, l=%ld, u=%ld, a=%ld, s=%ld }", DynamicBuffer.data, (long)DynamicBuffer.offset, (long)DynamicBuffer.length, (long)DynamicBuffer.unbits, (long)DynamicBuffer.allocated, (long)DynamicBuffer.bytes_shifted); for(; p < e; p++) { fprintf(stderr, " %c%c%c%c%c%c%c%c", ((*p >> 7) & 1) ? '1' : '0', ((*p >> 6) & 1) ? '1' : '0', ((*p >> 5) & 1) ? '1' : '0', ((*p >> 4) & 1) ? '1' : '0', ((*p >> 3) & 1) ? '1' : '0', ((*p >> 2) & 1) ? '1' : '0', ((*p >> 1) & 1) ? '1' : '0', ((*p >> 0) & 1) ? '1' : '0'); } if(DynamicBuffer.unbits) { unsigned int shift; fprintf(stderr, " "); for(shift = 7; shift >= DynamicBuffer.unbits; shift--) fprintf(stderr, "%c", ((*p >> shift) & 1) ? '1' : '0'); fprintf(stderr, " %ld:%ld\n", (long)DynamicBuffer.length - 1, (long)8 - DynamicBuffer.unbits); } else { fprintf(stderr, " %d\n", DynamicBuffer.length); } } /* * Move the buffer content left N bits, possibly joining it with * preceeding content. */ static void buffer_shift_left(size_t offset, int bits) { uint8_t *ptr = DynamicBuffer.data + DynamicBuffer.offset + offset; uint8_t *end = DynamicBuffer.data + DynamicBuffer.offset + DynamicBuffer.length - 1; if(!bits) return; DEBUG("Shifting left %d bits off %ld (o=%ld, u=%ld, l=%ld)", bits, (long)offset, (long)DynamicBuffer.offset, (long)DynamicBuffer.unbits, (long)DynamicBuffer.length); if(offset) { int right; right = ptr[0] >> (8 - bits); DEBUG("oleft: %c%c%c%c%c%c%c%c", ((ptr[-1] >> 7) & 1) ? '1' : '0', ((ptr[-1] >> 6) & 1) ? '1' : '0', ((ptr[-1] >> 5) & 1) ? '1' : '0', ((ptr[-1] >> 4) & 1) ? '1' : '0', ((ptr[-1] >> 3) & 1) ? '1' : '0', ((ptr[-1] >> 2) & 1) ? '1' : '0', ((ptr[-1] >> 1) & 1) ? '1' : '0', ((ptr[-1] >> 0) & 1) ? '1' : '0'); DEBUG("oriht: %c%c%c%c%c%c%c%c", ((ptr[0] >> 7) & 1) ? '1' : '0', ((ptr[0] >> 6) & 1) ? '1' : '0', ((ptr[0] >> 5) & 1) ? '1' : '0', ((ptr[0] >> 4) & 1) ? '1' : '0', ((ptr[0] >> 3) & 1) ? '1' : '0', ((ptr[0] >> 2) & 1) ? '1' : '0', ((ptr[0] >> 1) & 1) ? '1' : '0', ((ptr[0] >> 0) & 1) ? '1' : '0'); DEBUG("mriht: %c%c%c%c%c%c%c%c", ((right >> 7) & 1) ? '1' : '0', ((right >> 6) & 1) ? '1' : '0', ((right >> 5) & 1) ? '1' : '0', ((right >> 4) & 1) ? '1' : '0', ((right >> 3) & 1) ? '1' : '0', ((right >> 2) & 1) ? '1' : '0', ((right >> 1) & 1) ? '1' : '0', ((right >> 0) & 1) ? '1' : '0'); ptr[-1] = (ptr[-1] & (0xff << bits)) | right; DEBUG("after: %c%c%c%c%c%c%c%c", ((ptr[-1] >> 7) & 1) ? '1' : '0', ((ptr[-1] >> 6) & 1) ? '1' : '0', ((ptr[-1] >> 5) & 1) ? '1' : '0', ((ptr[-1] >> 4) & 1) ? '1' : '0', ((ptr[-1] >> 3) & 1) ? '1' : '0', ((ptr[-1] >> 2) & 1) ? '1' : '0', ((ptr[-1] >> 1) & 1) ? '1' : '0', ((ptr[-1] >> 0) & 1) ? '1' : '0'); } buffer_dump(); for(; ptr < end; ptr++) { int right = ptr[1] >> (8 - bits); *ptr = (*ptr << bits) | right; } *ptr <<= bits; DEBUG("Unbits [%d=>", (int)DynamicBuffer.unbits); if(DynamicBuffer.unbits == 0) { DynamicBuffer.unbits += bits; } else { DynamicBuffer.unbits += bits; if(DynamicBuffer.unbits > 7) { DynamicBuffer.unbits -= 8; DynamicBuffer.length--; DynamicBuffer.bytes_shifted++; } } DEBUG("Unbits =>%d]", (int)DynamicBuffer.unbits); buffer_dump(); DEBUG("Shifted. Now (o=%ld, u=%ld l=%ld)", (long)DynamicBuffer.offset, (long)DynamicBuffer.unbits, (long)DynamicBuffer.length); } /* * Ensure that the buffer contains at least this amount of free space. */ static void add_bytes_to_buffer(const void *data2add, size_t bytes) { if(bytes == 0) return; DEBUG("=> add_bytes(%ld) { o=%ld l=%ld u=%ld, s=%ld }", (long)bytes, (long)DynamicBuffer.offset, (long)DynamicBuffer.length, (long)DynamicBuffer.unbits, (long)DynamicBuffer.allocated); if(DynamicBuffer.allocated >= (DynamicBuffer.offset + DynamicBuffer.length + bytes)) { DEBUG("\tNo buffer reallocation is necessary"); } else if(bytes <= DynamicBuffer.offset) { DEBUG("\tContents shifted by %ld", DynamicBuffer.offset); /* Shift the buffer contents */ memmove(DynamicBuffer.data, DynamicBuffer.data + DynamicBuffer.offset, DynamicBuffer.length); DynamicBuffer.bytes_shifted += DynamicBuffer.offset; DynamicBuffer.offset = 0; } else { size_t newsize = (DynamicBuffer.allocated << 2) + bytes; void *p = MALLOC(newsize); if(!p) { perror("malloc()"); exit(EX_OSERR); } memcpy(p, DynamicBuffer.data + DynamicBuffer.offset, DynamicBuffer.length); FREEMEM(DynamicBuffer.data); DynamicBuffer.data = (uint8_t *)p; DynamicBuffer.offset = 0; DynamicBuffer.allocated = newsize; DynamicBuffer.nreallocs++; DEBUG("\tBuffer reallocated to %ld (%d time)", newsize, DynamicBuffer.nreallocs); } memcpy(DynamicBuffer.data + DynamicBuffer.offset + DynamicBuffer.length, data2add, bytes); DynamicBuffer.length += bytes; if(DynamicBuffer.unbits) { int bits = DynamicBuffer.unbits; DynamicBuffer.unbits = 0; buffer_shift_left(DynamicBuffer.length - bytes, bits); } DEBUG("<= add_bytes(%ld) { o=%ld l=%ld u=%ld, s=%ld }", (long)bytes, (long)DynamicBuffer.offset, (long)DynamicBuffer.length, (long)DynamicBuffer.unbits, (long)DynamicBuffer.allocated); } static void * data_decode_from_file(asn_TYPE_descriptor_t *pduType, FILE *file, const char *name, ssize_t suggested_bufsize, int on_first_pdu) { static uint8_t *fbuf; static ssize_t fbuf_size; static asn_codec_ctx_t s_codec_ctx; asn_codec_ctx_t *opt_codec_ctx = 0; void *structure = 0; asn_dec_rval_t rval; size_t old_offset; size_t new_offset; int tolerate_eof; size_t rd; if(!file) { fprintf(stderr, "%s: %s\n", name, strerror(errno)); errno = EINVAL; return 0; } if(opt_stack) { s_codec_ctx.max_stack_size = opt_stack; opt_codec_ctx = &s_codec_ctx; } DEBUG("Processing %s", name); /* prepare the file buffer */ if(fbuf_size != suggested_bufsize) { fbuf = (uint8_t *)REALLOC(fbuf, suggested_bufsize); if(!fbuf) { perror("realloc()"); exit(EX_OSERR); } fbuf_size = suggested_bufsize; } if(on_first_pdu) { DynamicBuffer.offset = 0; DynamicBuffer.length = 0; DynamicBuffer.unbits = 0; DynamicBuffer.allocated = 0; DynamicBuffer.bytes_shifted = 0; DynamicBuffer.nreallocs = 0; } old_offset = DynamicBuffer.bytes_shifted + DynamicBuffer.offset; /* Pretend immediate EOF */ rval.code = RC_WMORE; rval.consumed = 0; for(tolerate_eof = 1; /* Allow EOF first time buffer is non-empty */ (rd = fread(fbuf, 1, fbuf_size, file)) || feof(file) == 0 || (tolerate_eof && DynamicBuffer.length) ;) { int ecbits = 0; /* Extra consumed bits in case of PER */ uint8_t *i_bptr; size_t i_size; /* * Copy the data over, or use the original buffer. */ if(DynamicBuffer.allocated) { /* Append new data into the existing dynamic buffer */ add_bytes_to_buffer(fbuf, rd); i_bptr = DynamicBuffer.data + DynamicBuffer.offset; i_size = DynamicBuffer.length; } else { i_bptr = fbuf; i_size = rd; } DEBUG("Decoding %ld bytes", (long)i_size); #ifdef JUNKTEST junk_bytes_with_probability(i_bptr, i_size, opt_jprob); #endif switch(iform) { case INP_BER: rval = ber_decode(opt_codec_ctx, pduType, (void **)&structure, i_bptr, i_size); break; case INP_XER: rval = xer_decode(opt_codec_ctx, pduType, (void **)&structure, i_bptr, i_size); break; case INP_PER: if(opt_nopad) rval = uper_decode(opt_codec_ctx, pduType, (void **)&structure, i_bptr, i_size, 0, DynamicBuffer.unbits); else rval = uper_decode_complete(opt_codec_ctx, pduType, (void **)&structure, i_bptr, i_size); switch(rval.code) { case RC_OK: /* Fall through */ case RC_FAIL: if(opt_nopad) { /* uper_decode() returns bits! */ /* Extra bits */ ecbits = rval.consumed % 8; /* Convert into bytes! */ rval.consumed /= 8; } break; case RC_WMORE: /* PER does not support restartability */ ASN_STRUCT_FREE(*pduType, structure); structure = 0; rval.consumed = 0; /* Continue accumulating data */ break; } break; } DEBUG("decode(%ld) consumed %ld+%db (%ld), code %d", (long)DynamicBuffer.length, (long)rval.consumed, ecbits, (long)i_size, rval.code); if(DynamicBuffer.allocated == 0) { /* * Flush remainder into the intermediate buffer. */ if(rval.code != RC_FAIL && rval.consumed < rd) { add_bytes_to_buffer(fbuf + rval.consumed, rd - rval.consumed); buffer_shift_left(0, ecbits); DynamicBuffer.bytes_shifted = rval.consumed; rval.consumed = 0; ecbits = 0; } } /* * Adjust position inside the source buffer. */ if(DynamicBuffer.allocated) { DynamicBuffer.offset += rval.consumed; DynamicBuffer.length -= rval.consumed; } else { DynamicBuffer.bytes_shifted += rval.consumed; } switch(rval.code) { case RC_OK: if(ecbits) buffer_shift_left(0, ecbits); DEBUG("RC_OK, finishing up with %ld+%d", (long)rval.consumed, ecbits); return structure; case RC_WMORE: DEBUG("RC_WMORE, continuing read=%ld, cons=%ld " " with %ld..%ld-%ld..%ld", (long)rd, (long)rval.consumed, (long)DynamicBuffer.offset, (long)DynamicBuffer.length, (long)DynamicBuffer.unbits, (long)DynamicBuffer.allocated); if(!rd) tolerate_eof--; continue; case RC_FAIL: break; } break; } DEBUG("Clean up partially decoded structure"); ASN_STRUCT_FREE(*pduType, structure); new_offset = DynamicBuffer.bytes_shifted + DynamicBuffer.offset; /* * Print a message and return failure only if not EOF, * unless this is our first PDU (empty file). */ if(on_first_pdu || DynamicBuffer.length || new_offset - old_offset > ((iform == INP_XER)?sizeof("\r\n")-1:0) ) { #ifdef JUNKTEST /* * Nothing's wrong with being unable to decode junk. * Simulate EOF. */ if(opt_jprob != 0.0) { junk_failures++; errno = 0; return 0; } #endif DEBUG("ofp %d, no=%ld, oo=%ld, dbl=%ld", on_first_pdu, (long)new_offset, (long)old_offset, (long)DynamicBuffer.length); fprintf(stderr, "%s: " "Decode failed past byte %ld: %s\n", name, (long)new_offset, (rval.code == RC_WMORE) ? "Unexpected end of input" : "Input processing error"); #ifndef ENOMSG #define ENOMSG EINVAL #endif #ifndef EBADMSG #define EBADMSG EINVAL #endif errno = (rval.code == RC_WMORE) ? ENOMSG : EBADMSG; } else { /* Got EOF after a few successful PDUs */ errno = 0; } return 0; } /* Dump the buffer out to the specified FILE */ static int write_out(const void *buffer, size_t size, void *key) { FILE *fp = (FILE *)key; return (fwrite(buffer, 1, size, fp) == size) ? 0 : -1; } static int argument_is_stdin(char *av[], int idx) { if(strcmp(av[idx], "-")) { return 0; /* Certainly not */ } else { /* This might be , unless `./program -- -` */ if(strcmp(av[-1], "--")) return 1; else return 0; } } static FILE *argument_to_file(char *av[], int idx) { return argument_is_stdin(av, idx) ? stdin : fopen(av[idx], "r"); } static char *argument_to_name(char *av[], int idx) { return argument_is_stdin(av, idx) ? "standard input" : av[idx]; } #ifdef JUNKTEST /* * Fill bytes with some garbage with specified probability (more or less). */ static void junk_bytes_with_probability(uint8_t *buf, size_t size, double prob) { static int junkmode; uint8_t *ptr; uint8_t *end; if(opt_jprob <= 0.0) return; for(ptr = buf, end = ptr + size; ptr < end; ptr++) { int byte = *ptr; if(junkmode++ & 1) { if((((double)random() / RAND_MAX) < prob)) byte = random() & 0xff; } else { #define BPROB(b) ((((double)random() / RAND_MAX) < prob) ? b : 0) byte ^= BPROB(0x80); byte ^= BPROB(0x40); byte ^= BPROB(0x20); byte ^= BPROB(0x10); byte ^= BPROB(0x08); byte ^= BPROB(0x04); byte ^= BPROB(0x02); byte ^= BPROB(0x01); } if(byte != *ptr) { DEBUG("Junk buf[%d] %02x -> %02x", ptr - buf, *ptr, byte); *ptr = byte; } } } #endif /* JUNKTEST */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ControlHeader.h0000644000175000017500000000312712576764164022701 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ControlHeader_H_ #define _ControlHeader_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct ReferenceTime; struct RefLocation; struct DGPSCorrections; struct NavigationModel; struct IonosphericModel; struct UTCModel; struct Almanac; struct AcquisAssist; struct SeqOf_BadSatelliteSet; /* ControlHeader */ typedef struct ControlHeader { struct ReferenceTime *referenceTime /* OPTIONAL */; struct RefLocation *refLocation /* OPTIONAL */; struct DGPSCorrections *dgpsCorrections /* OPTIONAL */; struct NavigationModel *navigationModel /* OPTIONAL */; struct IonosphericModel *ionosphericModel /* OPTIONAL */; struct UTCModel *utcModel /* OPTIONAL */; struct Almanac *almanac /* OPTIONAL */; struct AcquisAssist *acquisAssist /* OPTIONAL */; struct SeqOf_BadSatelliteSet *realTimeIntegrity /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ControlHeader_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ControlHeader; #ifdef __cplusplus } #endif /* Referred external types */ #include "ReferenceTime.h" #include "RefLocation.h" #include "DGPSCorrections.h" #include "NavigationModel.h" #include "IonosphericModel.h" #include "UTCModel.h" #include "Almanac.h" #include "AcquisAssist.h" #include "SeqOf-BadSatelliteSet.h" #endif /* _ControlHeader_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfMsrAssistBTS.h0000644000175000017500000000152612576764164023410 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfMsrAssistBTS_H_ #define _SeqOfMsrAssistBTS_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct MsrAssistBTS; /* SeqOfMsrAssistBTS */ typedef struct SeqOfMsrAssistBTS { A_SEQUENCE_OF(struct MsrAssistBTS) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfMsrAssistBTS_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfMsrAssistBTS; #ifdef __cplusplus } #endif /* Referred external types */ #include "MsrAssistBTS.h" #endif /* _SeqOfMsrAssistBTS_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RequiredResponseTime.c0000644000175000017500000001172112576764164024260 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RequiredResponseTime.h" int RequiredResponseTime_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 1 && value <= 128)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void RequiredResponseTime_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void RequiredResponseTime_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int RequiredResponseTime_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t RequiredResponseTime_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t RequiredResponseTime_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t RequiredResponseTime_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t RequiredResponseTime_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t RequiredResponseTime_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t RequiredResponseTime_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { RequiredResponseTime_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_RequiredResponseTime_constr_1 = { { APC_CONSTRAINED, 7, 7, 1, 128 } /* (1..128) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_RequiredResponseTime_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_RequiredResponseTime = { "RequiredResponseTime", "RequiredResponseTime", RequiredResponseTime_free, RequiredResponseTime_print, RequiredResponseTime_constraint, RequiredResponseTime_decode_ber, RequiredResponseTime_encode_der, RequiredResponseTime_decode_xer, RequiredResponseTime_encode_xer, RequiredResponseTime_decode_uper, RequiredResponseTime_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RequiredResponseTime_tags_1, sizeof(asn_DEF_RequiredResponseTime_tags_1) /sizeof(asn_DEF_RequiredResponseTime_tags_1[0]), /* 1 */ asn_DEF_RequiredResponseTime_tags_1, /* Same as above */ sizeof(asn_DEF_RequiredResponseTime_tags_1) /sizeof(asn_DEF_RequiredResponseTime_tags_1[0]), /* 1 */ &asn_PER_type_RequiredResponseTime_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatStatus.h0000644000175000017500000000223712576764164022104 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SatStatus_H_ #define _SatStatus_H_ #include /* Including external dependencies */ #include "UncompressedEphemeris.h" #include #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SatStatus_PR { SatStatus_PR_NOTHING, /* No components present */ SatStatus_PR_newSatelliteAndModelUC, SatStatus_PR_oldSatelliteAndModel, SatStatus_PR_newNaviModelUC, /* Extensions may appear below */ } SatStatus_PR; /* SatStatus */ typedef struct SatStatus { SatStatus_PR present; union SatStatus_u { UncompressedEphemeris_t newSatelliteAndModelUC; NULL_t oldSatelliteAndModel; UncompressedEphemeris_t newNaviModelUC; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SatStatus_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SatStatus; #ifdef __cplusplus } #endif #endif /* _SatStatus_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LAC.c0000644000175000017500000001046112576764164020541 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "LAC.h" int LAC_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void LAC_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void LAC_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { LAC_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int LAC_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { LAC_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t LAC_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { LAC_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t LAC_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { LAC_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t LAC_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { LAC_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t LAC_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { LAC_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t LAC_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { LAC_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t LAC_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { LAC_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_LAC_constr_1 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_LAC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_LAC = { "LAC", "LAC", LAC_free, LAC_print, LAC_constraint, LAC_decode_ber, LAC_encode_der, LAC_decode_xer, LAC_encode_xer, LAC_decode_uper, LAC_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_LAC_tags_1, sizeof(asn_DEF_LAC_tags_1) /sizeof(asn_DEF_LAC_tags_1[0]), /* 1 */ asn_DEF_LAC_tags_1, /* Same as above */ sizeof(asn_DEF_LAC_tags_1) /sizeof(asn_DEF_LAC_tags_1[0]), /* 1 */ &asn_PER_type_LAC_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RRLP-Component.c0000644000175000017500000000640012576764164022657 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Messages" * found in "../rrlp-messages.asn" */ #include "RRLP-Component.h" static asn_per_constraints_t asn_PER_type_RRLP_Component_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_RRLP_Component_1[] = { { ATF_NOFLAGS, 0, offsetof(struct RRLP_Component, choice.msrPositionReq), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MsrPosition_Req, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrPositionReq" }, { ATF_NOFLAGS, 0, offsetof(struct RRLP_Component, choice.msrPositionRsp), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MsrPosition_Rsp, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrPositionRsp" }, { ATF_NOFLAGS, 0, offsetof(struct RRLP_Component, choice.assistanceData), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AssistanceData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "assistanceData" }, { ATF_NOFLAGS, 0, offsetof(struct RRLP_Component, choice.assistanceDataAck), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "assistanceDataAck" }, { ATF_NOFLAGS, 0, offsetof(struct RRLP_Component, choice.protocolError), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ProtocolError, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "protocolError" }, }; static asn_TYPE_tag2member_t asn_MAP_RRLP_Component_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* msrPositionReq at 21 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* msrPositionRsp at 22 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* assistanceData at 23 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* assistanceDataAck at 24 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* protocolError at 25 */ }; static asn_CHOICE_specifics_t asn_SPC_RRLP_Component_specs_1 = { sizeof(struct RRLP_Component), offsetof(struct RRLP_Component, _asn_ctx), offsetof(struct RRLP_Component, present), sizeof(((struct RRLP_Component *)0)->present), asn_MAP_RRLP_Component_tag2el_1, 5, /* Count of tags in the map */ 0, 5 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_RRLP_Component = { "RRLP-Component", "RRLP-Component", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_RRLP_Component_constr_1, asn_MBR_RRLP_Component_1, 5, /* Elements count */ &asn_SPC_RRLP_Component_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_opentype.h0000644000175000017500000000123212576764164022654 0ustar carlescarles/* * Copyright (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_OPENTYPE_H_ #define _PER_OPENTYPE_H_ #ifdef __cplusplus extern "C" { #endif asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); int uper_open_type_skip(asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po); #ifdef __cplusplus } #endif #endif /* _PER_OPENTYPE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSatElement.h0000644000175000017500000000150212576764164023142 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfSatElement_H_ #define _SeqOfSatElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SatElement; /* SeqOfSatElement */ typedef struct SeqOfSatElement { A_SEQUENCE_OF(struct SatElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfSatElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfSatElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "SatElement.h" #endif /* _SeqOfSatElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UseMultipleSets.c0000644000175000017500000001222212576764164023246 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "UseMultipleSets.h" int UseMultipleSets_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void UseMultipleSets_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void UseMultipleSets_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { UseMultipleSets_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int UseMultipleSets_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t UseMultipleSets_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t UseMultipleSets_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t UseMultipleSets_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t UseMultipleSets_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t UseMultipleSets_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t UseMultipleSets_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { UseMultipleSets_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_UseMultipleSets_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_UseMultipleSets_value2enum_1[] = { { 0, 12, "multipleSets" }, { 1, 6, "oneSet" } }; static unsigned int asn_MAP_UseMultipleSets_enum2value_1[] = { 0, /* multipleSets(0) */ 1 /* oneSet(1) */ }; static asn_INTEGER_specifics_t asn_SPC_UseMultipleSets_specs_1 = { asn_MAP_UseMultipleSets_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_UseMultipleSets_enum2value_1, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_UseMultipleSets_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_UseMultipleSets = { "UseMultipleSets", "UseMultipleSets", UseMultipleSets_free, UseMultipleSets_print, UseMultipleSets_constraint, UseMultipleSets_decode_ber, UseMultipleSets_encode_der, UseMultipleSets_decode_xer, UseMultipleSets_encode_xer, UseMultipleSets_decode_uper, UseMultipleSets_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UseMultipleSets_tags_1, sizeof(asn_DEF_UseMultipleSets_tags_1) /sizeof(asn_DEF_UseMultipleSets_tags_1[0]), /* 1 */ asn_DEF_UseMultipleSets_tags_1, /* Same as above */ sizeof(asn_DEF_UseMultipleSets_tags_1) /sizeof(asn_DEF_UseMultipleSets_tags_1[0]), /* 1 */ &asn_PER_type_UseMultipleSets_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_UseMultipleSets_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FrameNumber.h0000644000175000017500000000161412576764164022352 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _FrameNumber_H_ #define _FrameNumber_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* FrameNumber */ typedef long FrameNumber_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FrameNumber; asn_struct_free_f FrameNumber_free; asn_struct_print_f FrameNumber_print; asn_constr_check_f FrameNumber_constraint; ber_type_decoder_f FrameNumber_decode_ber; der_type_encoder_f FrameNumber_encode_der; xer_type_decoder_f FrameNumber_decode_xer; xer_type_encoder_f FrameNumber_encode_xer; per_type_decoder_f FrameNumber_decode_uper; per_type_encoder_f FrameNumber_encode_uper; #ifdef __cplusplus } #endif #endif /* _FrameNumber_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Almanac.h0000644000175000017500000000132112576764164021476 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Almanac_H_ #define _Almanac_H_ #include /* Including external dependencies */ #include #include "SeqOfAlmanacElement.h" #include #ifdef __cplusplus extern "C" { #endif /* Almanac */ typedef struct Almanac { long alamanacWNa; SeqOfAlmanacElement_t almanacList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Almanac_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Almanac; #ifdef __cplusplus } #endif #endif /* _Almanac_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistBTS.c0000644000175000017500000000717012576764164022446 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MsrAssistBTS.h" static asn_TYPE_member_t asn_MBR_MsrAssistBTS_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS, bcchCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BCCHCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bcchCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS, bsic), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSIC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsic" }, { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS, multiFrameOffset), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MultiFrameOffset, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "multiFrameOffset" }, { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS, timeSlotScheme), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeSlotScheme, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeSlotScheme" }, { ATF_NOFLAGS, 0, offsetof(struct MsrAssistBTS, roughRTD), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RoughRTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "roughRTD" }, { ATF_POINTER, 1, offsetof(struct MsrAssistBTS, calcAssistanceBTS), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CalcAssistanceBTS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "calcAssistanceBTS" }, }; static int asn_MAP_MsrAssistBTS_oms_1[] = { 5 }; static ber_tlv_tag_t asn_DEF_MsrAssistBTS_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MsrAssistBTS_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bcchCarrier at 193 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bsic at 194 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* multiFrameOffset at 195 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* timeSlotScheme at 196 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* roughRTD at 197 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* calcAssistanceBTS at 200 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MsrAssistBTS_specs_1 = { sizeof(struct MsrAssistBTS), offsetof(struct MsrAssistBTS, _asn_ctx), asn_MAP_MsrAssistBTS_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_MsrAssistBTS_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MsrAssistBTS = { "MsrAssistBTS", "MsrAssistBTS", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MsrAssistBTS_tags_1, sizeof(asn_DEF_MsrAssistBTS_tags_1) /sizeof(asn_DEF_MsrAssistBTS_tags_1[0]), /* 1 */ asn_DEF_MsrAssistBTS_tags_1, /* Same as above */ sizeof(asn_DEF_MsrAssistBTS_tags_1) /sizeof(asn_DEF_MsrAssistBTS_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MsrAssistBTS_1, 6, /* Elements count */ &asn_SPC_MsrAssistBTS_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PositionInstruct.h0000644000175000017500000000177512576764164023517 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _PositionInstruct_H_ #define _PositionInstruct_H_ #include /* Including external dependencies */ #include "MethodType.h" #include "PositionMethod.h" #include "MeasureResponseTime.h" #include "UseMultipleSets.h" #include "EnvironmentCharacter.h" #include #ifdef __cplusplus extern "C" { #endif /* PositionInstruct */ typedef struct PositionInstruct { MethodType_t methodType; PositionMethod_t positionMethod; MeasureResponseTime_t measureResponseTime; UseMultipleSets_t useMultipleSets; EnvironmentCharacter_t *environmentCharacter /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PositionInstruct_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PositionInstruct; #ifdef __cplusplus } #endif #endif /* _PositionInstruct_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfAlmanacElement.h0000644000175000017500000000155212576764164023754 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfAlmanacElement_H_ #define _SeqOfAlmanacElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct AlmanacElement; /* SeqOfAlmanacElement */ typedef struct SeqOfAlmanacElement { A_SEQUENCE_OF(struct AlmanacElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfAlmanacElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfAlmanacElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "AlmanacElement.h" #endif /* _SeqOfAlmanacElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExtensionContainer.c0000644000175000017500000001060012576764164023754 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ExtensionContainer.h" int ExtensionContainer_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_INTEGER.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using INTEGER, * so here we adjust the DEF accordingly. */ static void ExtensionContainer_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_INTEGER.free_struct; td->print_struct = asn_DEF_INTEGER.print_struct; td->ber_decoder = asn_DEF_INTEGER.ber_decoder; td->der_encoder = asn_DEF_INTEGER.der_encoder; td->xer_decoder = asn_DEF_INTEGER.xer_decoder; td->xer_encoder = asn_DEF_INTEGER.xer_encoder; td->uper_decoder = asn_DEF_INTEGER.uper_decoder; td->uper_encoder = asn_DEF_INTEGER.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_INTEGER.per_constraints; td->elements = asn_DEF_INTEGER.elements; td->elements_count = asn_DEF_INTEGER.elements_count; td->specifics = asn_DEF_INTEGER.specifics; } void ExtensionContainer_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ExtensionContainer_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int ExtensionContainer_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t ExtensionContainer_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t ExtensionContainer_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t ExtensionContainer_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t ExtensionContainer_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t ExtensionContainer_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t ExtensionContainer_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ExtensionContainer_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static ber_tlv_tag_t asn_DEF_ExtensionContainer_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ExtensionContainer = { "ExtensionContainer", "ExtensionContainer", ExtensionContainer_free, ExtensionContainer_print, ExtensionContainer_constraint, ExtensionContainer_decode_ber, ExtensionContainer_encode_der, ExtensionContainer_decode_xer, ExtensionContainer_encode_xer, ExtensionContainer_decode_uper, ExtensionContainer_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ExtensionContainer_tags_1, sizeof(asn_DEF_ExtensionContainer_tags_1) /sizeof(asn_DEF_ExtensionContainer_tags_1[0]), /* 1 */ asn_DEF_ExtensionContainer_tags_1, /* Same as above */ sizeof(asn_DEF_ExtensionContainer_tags_1) /sizeof(asn_DEF_ExtensionContainer_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfBadSignalElement.h0000644000175000017500000000157612576764164024252 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfBadSignalElement_H_ #define _SeqOfBadSignalElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct BadSignalElement; /* SeqOfBadSignalElement */ typedef struct SeqOfBadSignalElement { A_SEQUENCE_OF(struct BadSignalElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfBadSignalElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfBadSignalElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "BadSignalElement.h" #endif /* _SeqOfBadSignalElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PositionInstruct.c0000644000175000017500000000667612576764164023517 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "PositionInstruct.h" static asn_TYPE_member_t asn_MBR_PositionInstruct_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PositionInstruct, methodType), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_MethodType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "methodType" }, { ATF_NOFLAGS, 0, offsetof(struct PositionInstruct, positionMethod), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PositionMethod, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "positionMethod" }, { ATF_NOFLAGS, 0, offsetof(struct PositionInstruct, measureResponseTime), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MeasureResponseTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "measureResponseTime" }, { ATF_NOFLAGS, 0, offsetof(struct PositionInstruct, useMultipleSets), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UseMultipleSets, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "useMultipleSets" }, { ATF_POINTER, 1, offsetof(struct PositionInstruct, environmentCharacter), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_EnvironmentCharacter, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "environmentCharacter" }, }; static int asn_MAP_PositionInstruct_oms_1[] = { 4 }; static ber_tlv_tag_t asn_DEF_PositionInstruct_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_PositionInstruct_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* methodType at 108 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* positionMethod at 109 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measureResponseTime at 110 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* useMultipleSets at 111 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* environmentCharacter at 112 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PositionInstruct_specs_1 = { sizeof(struct PositionInstruct), offsetof(struct PositionInstruct, _asn_ctx), asn_MAP_PositionInstruct_tag2el_1, 5, /* Count of tags in the map */ asn_MAP_PositionInstruct_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PositionInstruct = { "PositionInstruct", "PositionInstruct", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PositionInstruct_tags_1, sizeof(asn_DEF_PositionInstruct_tags_1) /sizeof(asn_DEF_PositionInstruct_tags_1[0]), /* 1 */ asn_DEF_PositionInstruct_tags_1, /* Same as above */ sizeof(asn_DEF_PositionInstruct_tags_1) /sizeof(asn_DEF_PositionInstruct_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PositionInstruct_1, 5, /* Elements count */ &asn_SPC_PositionInstruct_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSSignalID.c0000644000175000017500000001126312576764164022371 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSSignalID.h" int GANSSSignalID_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GANSSSignalID_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GANSSSignalID_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSSignalID_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSSignalID_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSSignalID_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSSignalID_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSSignalID_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSSignalID_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSSignalID_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSSignalID_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSSignalID_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSSignalID_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSSignalID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSSignalID = { "GANSSSignalID", "GANSSSignalID", GANSSSignalID_free, GANSSSignalID_print, GANSSSignalID_constraint, GANSSSignalID_decode_ber, GANSSSignalID_encode_der, GANSSSignalID_decode_xer, GANSSSignalID_encode_xer, GANSSSignalID_decode_uper, GANSSSignalID_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSSignalID_tags_1, sizeof(asn_DEF_GANSSSignalID_tags_1) /sizeof(asn_DEF_GANSSSignalID_tags_1[0]), /* 1 */ asn_DEF_GANSSSignalID_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSSignalID_tags_1) /sizeof(asn_DEF_GANSSSignalID_tags_1[0]), /* 1 */ &asn_PER_type_GANSSSignalID_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SVID.h0000644000175000017500000000144312576764164020714 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SVID_H_ #define _SVID_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* SVID */ typedef long SVID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SVID; asn_struct_free_f SVID_free; asn_struct_print_f SVID_print; asn_constr_check_f SVID_constraint; ber_type_decoder_f SVID_decode_ber; der_type_encoder_f SVID_encode_der; xer_type_decoder_f SVID_decode_xer; xer_type_encoder_f SVID_encode_xer; per_type_decoder_f SVID_decode_uper; per_type_encoder_f SVID_encode_uper; #ifdef __cplusplus } #endif #endif /* _SVID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NumOfMeasurements.c0000644000175000017500000001152312576764164023557 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "NumOfMeasurements.h" int NumOfMeasurements_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void NumOfMeasurements_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void NumOfMeasurements_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int NumOfMeasurements_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t NumOfMeasurements_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t NumOfMeasurements_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t NumOfMeasurements_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t NumOfMeasurements_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t NumOfMeasurements_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t NumOfMeasurements_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { NumOfMeasurements_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_NumOfMeasurements_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_NumOfMeasurements_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NumOfMeasurements = { "NumOfMeasurements", "NumOfMeasurements", NumOfMeasurements_free, NumOfMeasurements_print, NumOfMeasurements_constraint, NumOfMeasurements_decode_ber, NumOfMeasurements_encode_der, NumOfMeasurements_decode_xer, NumOfMeasurements_encode_xer, NumOfMeasurements_decode_uper, NumOfMeasurements_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NumOfMeasurements_tags_1, sizeof(asn_DEF_NumOfMeasurements_tags_1) /sizeof(asn_DEF_NumOfMeasurements_tags_1[0]), /* 1 */ asn_DEF_NumOfMeasurements_tags_1, /* Same as above */ sizeof(asn_DEF_NumOfMeasurements_tags_1) /sizeof(asn_DEF_NumOfMeasurements_tags_1[0]), /* 1 */ &asn_PER_type_NumOfMeasurements_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AssistBTSData-R98-ExpOTD.h0000644000175000017500000000152112576764164024236 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AssistBTSData_R98_ExpOTD_H_ #define _AssistBTSData_R98_ExpOTD_H_ #include /* Including external dependencies */ #include "ExpectedOTD.h" #include "ExpOTDUncertainty.h" #include #ifdef __cplusplus extern "C" { #endif /* AssistBTSData-R98-ExpOTD */ typedef struct AssistBTSData_R98_ExpOTD { ExpectedOTD_t expectedOTD; ExpOTDUncertainty_t expOTDuncertainty; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AssistBTSData_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AssistBTSData_R98_ExpOTD; #ifdef __cplusplus } #endif #endif /* _AssistBTSData_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NativeEnumerated.c0000644000175000017500000001342612576764164023406 0ustar carlescarles/*- * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Read the NativeInteger.h for the explanation wrt. differences between * INTEGER and NativeInteger. * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this * implementation deals with the standard (machine-specific) representation * of them instead of using the platform-independent buffer. */ #include #include /* * NativeEnumerated basic type description. */ static ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ "ENUMERATED", NativeInteger_free, NativeInteger_print, asn_generic_no_constraint, NativeInteger_decode_ber, NativeInteger_encode_der, NativeInteger_decode_xer, NativeEnumerated_encode_xer, NativeEnumerated_decode_uper, NativeEnumerated_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NativeEnumerated_tags, sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), asn_DEF_NativeEnumerated_tags, /* Same as above */ sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn_enc_rval_t NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; const long *native = (const long *)sptr; const asn_INTEGER_enum_map_t *el; (void)ilevel; (void)flags; if(!native) _ASN_ENCODE_FAILED; el = INTEGER_map_value2enum(specs, *native); if(el) { size_t srcsize = el->enum_len + 5; char *src = (char *)alloca(srcsize); er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name); assert(er.encoded > 0 && (size_t)er.encoded < srcsize); if(cb(src, er.encoded, app_key) < 0) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } else { ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); _ASN_ENCODE_FAILED; } } asn_dec_rval_t NativeEnumerated_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval = { RC_OK, 0 }; long *native = (long *)*sptr; asn_per_constraint_t *ct; long value; (void)opt_codec_ctx; if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else _ASN_DECODE_FAILED; /* Mandatory! */ if(!specs) _ASN_DECODE_FAILED; if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) _ASN_DECODE_FAILED; } ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); if(ct->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) _ASN_DECODE_STARVED; if(inext) ct = 0; } if(ct && ct->range_bits >= 0) { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) _ASN_DECODE_STARVED; if(value >= (specs->extension ? specs->extension - 1 : specs->map_count)) _ASN_DECODE_FAILED; } else { if(!specs->extension) _ASN_DECODE_FAILED; /* * X.691, #10.6: normally small non-negative whole number; */ value = uper_get_nsnnwn(pd); if(value < 0) _ASN_DECODE_STARVED; value += specs->extension - 1; if(value >= specs->map_count) _ASN_DECODE_FAILED; } *native = specs->value2enum[value].nat_value; ASN_DEBUG("Decoded %s = %ld", td->name, *native); return rval; } static int NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { const asn_INTEGER_enum_map_t *a = ap; const asn_INTEGER_enum_map_t *b = bp; if(a->nat_value == b->nat_value) return 0; if(a->nat_value < b->nat_value) return -1; return 1; } asn_enc_rval_t NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; long native, value; asn_per_constraint_t *ct; int inext = 0; asn_INTEGER_enum_map_t key; asn_INTEGER_enum_map_t *kf; if(!sptr) _ASN_ENCODE_FAILED; if(!specs) _ASN_ENCODE_FAILED; if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else _ASN_ENCODE_FAILED; /* Mandatory! */ ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); er.encoded = 0; native = *(long *)sptr; if(native < 0) _ASN_ENCODE_FAILED; key.nat_value = native; kf = bsearch(&key, specs->value2enum, specs->map_count, sizeof(key), NativeEnumerated__compar_value2enum); if(!kf) { ASN_DEBUG("No element corresponds to %ld", native); _ASN_ENCODE_FAILED; } value = kf - specs->value2enum; if(ct->range_bits >= 0) { int cmpWith = specs->extension ? specs->extension - 1 : specs->map_count; if(value >= cmpWith) inext = 1; } if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, inext, 1)) _ASN_ENCODE_FAILED; if(inext) ct = 0; } else if(inext) { _ASN_ENCODE_FAILED; } if(ct && ct->range_bits >= 0) { if(per_put_few_bits(po, value, ct->range_bits)) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } if(!specs->extension) _ASN_ENCODE_FAILED; /* * X.691, #10.6: normally small non-negative whole number; */ ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", value, specs->extension, inext, value - (inext ? (specs->extension - 1) : 0)); if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefMeasurementAssist.c0000644000175000017500000000633612576764164025055 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSRefMeasurementAssist.h" static int memb_ganssSignalID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssSignalID_constr_2 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSRefMeasurementAssist_1[] = { { ATF_POINTER, 1, offsetof(struct GANSSRefMeasurementAssist, ganssSignalID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssSignalID_constraint_1, &asn_PER_memb_ganssSignalID_constr_2, 0, "ganssSignalID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSRefMeasurementAssist, ganssRefMeasAssitList), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSSRefMeasurementElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssRefMeasAssitList" }, }; static int asn_MAP_GANSSRefMeasurementAssist_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_GANSSRefMeasurementAssist_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSRefMeasurementAssist_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssSignalID at 1321 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ganssRefMeasAssitList at 1323 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSRefMeasurementAssist_specs_1 = { sizeof(struct GANSSRefMeasurementAssist), offsetof(struct GANSSRefMeasurementAssist, _asn_ctx), asn_MAP_GANSSRefMeasurementAssist_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_GANSSRefMeasurementAssist_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSRefMeasurementAssist = { "GANSSRefMeasurementAssist", "GANSSRefMeasurementAssist", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSRefMeasurementAssist_tags_1, sizeof(asn_DEF_GANSSRefMeasurementAssist_tags_1) /sizeof(asn_DEF_GANSSRefMeasurementAssist_tags_1[0]), /* 1 */ asn_DEF_GANSSRefMeasurementAssist_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSRefMeasurementAssist_tags_1) /sizeof(asn_DEF_GANSSRefMeasurementAssist_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSRefMeasurementAssist_1, 2, /* Elements count */ &asn_SPC_GANSSRefMeasurementAssist_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UlPseudoSegInd.h0000644000175000017500000000210612576764164022776 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _UlPseudoSegInd_H_ #define _UlPseudoSegInd_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum UlPseudoSegInd { UlPseudoSegInd_firstOfMany = 0, UlPseudoSegInd_secondOfMany = 1 } e_UlPseudoSegInd; /* UlPseudoSegInd */ typedef ENUMERATED_t UlPseudoSegInd_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_UlPseudoSegInd; asn_struct_free_f UlPseudoSegInd_free; asn_struct_print_f UlPseudoSegInd_print; asn_constr_check_f UlPseudoSegInd_constraint; ber_type_decoder_f UlPseudoSegInd_decode_ber; der_type_encoder_f UlPseudoSegInd_encode_der; xer_type_decoder_f UlPseudoSegInd_decode_xer; xer_type_encoder_f UlPseudoSegInd_encode_xer; per_type_decoder_f UlPseudoSegInd_decode_uper; per_type_encoder_f UlPseudoSegInd_encode_uper; #ifdef __cplusplus } #endif #endif /* _UlPseudoSegInd_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RequiredResponseTime.h0000644000175000017500000000202312576764164024260 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RequiredResponseTime_H_ #define _RequiredResponseTime_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* RequiredResponseTime */ typedef long RequiredResponseTime_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RequiredResponseTime; asn_struct_free_f RequiredResponseTime_free; asn_struct_print_f RequiredResponseTime_print; asn_constr_check_f RequiredResponseTime_constraint; ber_type_decoder_f RequiredResponseTime_decode_ber; der_type_encoder_f RequiredResponseTime_encode_der; xer_type_decoder_f RequiredResponseTime_decode_xer; xer_type_encoder_f RequiredResponseTime_encode_xer; per_type_decoder_f RequiredResponseTime_decode_uper; per_type_encoder_f RequiredResponseTime_encode_uper; #ifdef __cplusplus } #endif #endif /* _RequiredResponseTime_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-MsrsOfOtherSets.h0000644000175000017500000000163412576764164024605 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfOTD_MsrsOfOtherSets_H_ #define _SeqOfOTD_MsrsOfOtherSets_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct OTD_MsrsOfOtherSets; /* SeqOfOTD-MsrsOfOtherSets */ typedef struct SeqOfOTD_MsrsOfOtherSets { A_SEQUENCE_OF(struct OTD_MsrsOfOtherSets) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfOTD_MsrsOfOtherSets_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_MsrsOfOtherSets; #ifdef __cplusplus } #endif /* Referred external types */ #include "OTD-MsrsOfOtherSets.h" #endif /* _SeqOfOTD_MsrsOfOtherSets_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OCTET_STRING.c0000644000175000017500000013323512576764164022113 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* for .bits_unused member */ #include /* * OCTET STRING basic type description. */ static ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; static asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = { sizeof(OCTET_STRING_t), offsetof(OCTET_STRING_t, _asn_ctx), ASN_OSUBV_STR }; static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { { APC_CONSTRAINED, 8, 8, 0, 255 }, { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, 0, 0 }; asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { "OCTET STRING", /* Canonical name */ "OCTET_STRING", /* XML tag name */ OCTET_STRING_free, OCTET_STRING_print, /* non-ascii stuff, generally */ asn_generic_no_constraint, OCTET_STRING_decode_ber, OCTET_STRING_encode_der, OCTET_STRING_decode_xer_hex, OCTET_STRING_encode_xer, OCTET_STRING_decode_uper, /* Unaligned PER decoder */ OCTET_STRING_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_OCTET_STRING_tags, sizeof(asn_DEF_OCTET_STRING_tags) / sizeof(asn_DEF_OCTET_STRING_tags[0]), asn_DEF_OCTET_STRING_tags, /* Same as above */ sizeof(asn_DEF_OCTET_STRING_tags) / sizeof(asn_DEF_OCTET_STRING_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ &asn_DEF_OCTET_STRING_specs }; #undef _CH_PHASE #undef NEXT_PHASE #undef PREV_PHASE #define _CH_PHASE(ctx, inc) do { \ if(ctx->phase == 0) \ ctx->context = 0; \ ctx->phase += inc; \ } while(0) #define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) #define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = (num_bytes); \ buf_ptr = ((const char *)buf_ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ asn_dec_rval_t tmprval; \ tmprval.code = _code; \ tmprval.consumed = consumed_myself; \ return tmprval; \ } while(0) #undef APPEND #define APPEND(bufptr, bufsize) do { \ size_t _bs = (bufsize); /* Append size */ \ size_t _ns = ctx->context; /* Allocated now */ \ size_t _es = st->size + _bs; /* Expected size */ \ /* int is really a typeof(st->size): */ \ if((int)_es < 0) RETURN(RC_FAIL); \ if(_ns <= _es) { \ void *ptr; \ /* Be nice and round to the memory allocator */ \ do { _ns = _ns ? _ns << 1 : 16; } \ while(_ns <= _es); \ /* int is really a typeof(st->size): */ \ if((int)_ns < 0) RETURN(RC_FAIL); \ ptr = REALLOC(st->buf, _ns); \ if(ptr) { \ st->buf = (uint8_t *)ptr; \ ctx->context = _ns; \ } else { \ RETURN(RC_FAIL); \ } \ ASN_DEBUG("Reallocating into %ld", (long)_ns); \ } \ memcpy(st->buf + st->size, bufptr, _bs); \ /* Convenient nul-termination */ \ st->buf[_es] = '\0'; \ st->size = _es; \ } while(0) /* * The main reason why ASN.1 is still alive is that too much time and effort * is necessary for learning it more or less adequately, thus creating a gut * necessity to demonstrate that aquired skill everywhere afterwards. * No, I am not going to explain what the following stuff is. */ struct _stack_el { ber_tlv_len_t left; /* What's left to read (or -1) */ ber_tlv_len_t got; /* What was actually processed */ int cont_level; /* Depth of subcontainment */ int want_nulls; /* Want null "end of content" octets? */ int bits_chopped; /* Flag in BIT STRING mode */ ber_tlv_tag_t tag; /* For debugging purposes */ struct _stack_el *prev; struct _stack_el *next; }; struct _stack { struct _stack_el *tail; struct _stack_el *cur_ptr; }; static struct _stack_el * OS__add_stack_el(struct _stack *st) { struct _stack_el *nel; /* * Reuse the old stack frame or allocate a new one. */ if(st->cur_ptr && st->cur_ptr->next) { nel = st->cur_ptr->next; nel->bits_chopped = 0; nel->got = 0; /* Retain the nel->cont_level, it's correct. */ } else { nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); if(nel == NULL) return NULL; if(st->tail) { /* Increase a subcontainment depth */ nel->cont_level = st->tail->cont_level + 1; st->tail->next = nel; } nel->prev = st->tail; st->tail = nel; } st->cur_ptr = nel; return nel; } static struct _stack * _new_stack() { return (struct _stack *)CALLOC(1, sizeof(struct _stack)); } /* * Decode OCTET STRING type. */ asn_dec_rval_t OCTET_STRING_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; BIT_STRING_t *st = (BIT_STRING_t *)*sptr; asn_dec_rval_t rval; asn_struct_ctx_t *ctx; ssize_t consumed_myself = 0; struct _stack *stck; /* Expectations stack structure */ struct _stack_el *sel = 0; /* Stack element */ int tlv_constr; enum asn_OS_Subvariant type_variant = specs->subvariant; ASN_DEBUG("Decoding %s as %s (frame %ld)", td->name, (type_variant == ASN_OSUBV_STR) ? "OCTET STRING" : "OS-SpecialCase", (long)size); /* * Create the string if does not exist. */ if(st == NULL) { st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); if(st == NULL) RETURN(RC_FAIL); } /* Restore parsing context */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); switch(ctx->phase) { case 0: /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, buf_ptr, size, tag_mode, -1, &ctx->left, &tlv_constr); if(rval.code != RC_OK) return rval; if(tlv_constr) { /* * Complex operation, requires stack of expectations. */ ctx->ptr = _new_stack(); if(ctx->ptr) { stck = (struct _stack *)ctx->ptr; } else { RETURN(RC_FAIL); } } else { /* * Jump into stackless primitive decoding. */ _CH_PHASE(ctx, 3); if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) APPEND(buf_ptr, rval.consumed); ADVANCE(rval.consumed); goto phase3; } NEXT_PHASE(ctx); /* Fall through */ case 1: phase1: /* * Fill the stack with expectations. */ stck = (struct _stack *)ctx->ptr; sel = stck->cur_ptr; do { ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; ber_tlv_tag_t expected_tag; ssize_t tl, ll, tlvl; /* This one works even if (sel->left == -1) */ ssize_t Left = ((!sel||(size_t)sel->left >= size) ?(ssize_t)size:sel->left); ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", sel, (long)(sel?sel->left:0), (long)(sel?sel->want_nulls:0), (long)(sel?sel->got:0) ); if(sel && sel->left <= 0 && sel->want_nulls == 0) { if(sel->prev) { struct _stack_el *prev = sel->prev; if(prev->left != -1) { if(prev->left < sel->got) RETURN(RC_FAIL); prev->left -= sel->got; } prev->got += sel->got; sel = stck->cur_ptr = prev; if(!sel) break; tlv_constr = 1; continue; } else { sel = stck->cur_ptr = 0; break; /* Nothing to wait */ } } tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", (long)size, (long)Left, sel?"":"!", (long)(sel?sel->left:0), (long)(sel?sel->want_nulls:0), (long)tl); switch(tl) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); ll = ber_fetch_length(tlv_constr, (const char *)buf_ptr + tl,Left - tl,&tlv_len); ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", ber_tlv_tag_string(tlv_tag), tlv_constr, (long)Left, (long)tl, (long)tlv_len, (long)ll); switch(ll) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } if(sel && sel->want_nulls && ((const uint8_t *)buf_ptr)[0] == 0 && ((const uint8_t *)buf_ptr)[1] == 0) { ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); if(type_variant == ASN_OSUBV_ANY && (tag_mode != 1 || sel->cont_level)) APPEND("\0\0", 2); ADVANCE(2); sel->got += 2; if(sel->left != -1) { sel->left -= 2; /* assert(sel->left >= 2) */ } sel->want_nulls--; if(sel->want_nulls == 0) { /* Move to the next expectation */ sel->left = 0; tlv_constr = 1; } continue; } /* * Set up expected tags, * depending on ASN.1 type being decoded. */ switch(type_variant) { case ASN_OSUBV_BIT: /* X.690: 8.6.4.1, NOTE 2 */ /* Fall through */ case ASN_OSUBV_STR: default: if(sel) { int level = sel->cont_level; if(level < td->all_tags_count) { expected_tag = td->all_tags[level]; break; } else if(td->all_tags_count) { expected_tag = td->all_tags [td->all_tags_count - 1]; break; } /* else, Fall through */ } /* Fall through */ case ASN_OSUBV_ANY: expected_tag = tlv_tag; break; } if(tlv_tag != expected_tag) { char buf[2][32]; ber_tlv_tag_snprint(tlv_tag, buf[0], sizeof(buf[0])); ber_tlv_tag_snprint(td->tags[td->tags_count-1], buf[1], sizeof(buf[1])); ASN_DEBUG("Tag does not match expectation: %s != %s", buf[0], buf[1]); RETURN(RC_FAIL); } tlvl = tl + ll; /* Combined length of T and L encoding */ if((tlv_len + tlvl) < 0) { /* tlv_len value is too big */ ASN_DEBUG("TLV encoding + length (%ld) is too big", (long)tlv_len); RETURN(RC_FAIL); } /* * Append a new expectation. */ sel = OS__add_stack_el(stck); if(!sel) RETURN(RC_FAIL); sel->tag = tlv_tag; sel->want_nulls = (tlv_len==-1); if(sel->prev && sel->prev->left != -1) { /* Check that the parent frame is big enough */ if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) RETURN(RC_FAIL); if(tlv_len == -1) sel->left = sel->prev->left - tlvl; else sel->left = tlv_len; } else { sel->left = tlv_len; } if(type_variant == ASN_OSUBV_ANY && (tag_mode != 1 || sel->cont_level)) APPEND(buf_ptr, tlvl); sel->got += tlvl; ADVANCE(tlvl); ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%d", (long)sel->got, (long)sel->left, sel->want_nulls, sel->cont_level); } while(tlv_constr); if(sel == NULL) { /* Finished operation, "phase out" */ ASN_DEBUG("Phase out"); _CH_PHASE(ctx, +3); break; } NEXT_PHASE(ctx); /* Fall through */ case 2: stck = (struct _stack *)ctx->ptr; sel = stck->cur_ptr; ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", (long)sel->left, (long)size, (long)sel->got, sel->want_nulls); { ber_tlv_len_t len; assert(sel->left >= 0); len = ((ber_tlv_len_t)size < sel->left) ? (ber_tlv_len_t)size : sel->left; if(len > 0) { if(type_variant == ASN_OSUBV_BIT && sel->bits_chopped == 0) { /* Put the unused-bits-octet away */ st->bits_unused = *(const uint8_t *)buf_ptr; APPEND(((const char *)buf_ptr+1), (len - 1)); sel->bits_chopped = 1; } else { APPEND(buf_ptr, len); } ADVANCE(len); sel->left -= len; sel->got += len; } if(sel->left) { ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", (long)sel->left, (long)size, sel->want_nulls); RETURN(RC_WMORE); } PREV_PHASE(ctx); goto phase1; } break; case 3: phase3: /* * Primitive form, no stack required. */ assert(ctx->left >= 0); if(size < (size_t)ctx->left) { if(!size) RETURN(RC_WMORE); if(type_variant == ASN_OSUBV_BIT && !ctx->context) { st->bits_unused = *(const uint8_t *)buf_ptr; ctx->left--; ADVANCE(1); } APPEND(buf_ptr, size); assert(ctx->context > 0); ctx->left -= size; ADVANCE(size); RETURN(RC_WMORE); } else { if(type_variant == ASN_OSUBV_BIT && !ctx->context && ctx->left) { st->bits_unused = *(const uint8_t *)buf_ptr; ctx->left--; ADVANCE(1); } APPEND(buf_ptr, ctx->left); ADVANCE(ctx->left); ctx->left = 0; NEXT_PHASE(ctx); } break; } if(sel) { ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", sel->prev, sel->want_nulls, (long)sel->left, (long)sel->got, (long)size); if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { RETURN(RC_WMORE); } } /* * BIT STRING-specific processing. */ if(type_variant == ASN_OSUBV_BIT && st->size) { /* Finalize BIT STRING: zero out unused bits. */ st->buf[st->size-1] &= 0xff << st->bits_unused; } ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", (long)consumed_myself, td->name, (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", (long)st->size); RETURN(RC_OK); } /* * Encode OCTET STRING type using DER. */ asn_enc_rval_t OCTET_STRING_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; BIT_STRING_t *st = (BIT_STRING_t *)sptr; enum asn_OS_Subvariant type_variant = specs->subvariant; int fix_last_byte = 0; ASN_DEBUG("%s %s as OCTET STRING", cb?"Estimating":"Encoding", td->name); /* * Write tags. */ if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { er.encoded = der_write_tags(td, (type_variant == ASN_OSUBV_BIT) + st->size, tag_mode, type_variant == ASN_OSUBV_ANY, tag, cb, app_key); if(er.encoded == -1) { er.failed_type = td; er.structure_ptr = sptr; return er; } } else { /* Disallow: [] IMPLICIT ANY */ assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); er.encoded = 0; } if(!cb) { er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; _ASN_ENCODED_OK(er); } /* * Prepare to deal with the last octet of BIT STRING. */ if(type_variant == ASN_OSUBV_BIT) { uint8_t b = st->bits_unused & 0x07; if(b && st->size) fix_last_byte = 1; _ASN_CALLBACK(&b, 1); er.encoded++; } /* Invoke callback for the main part of the buffer */ _ASN_CALLBACK(st->buf, st->size - fix_last_byte); /* The last octet should be stripped off the unused bits */ if(fix_last_byte) { uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); _ASN_CALLBACK(&b, 1); } er.encoded += st->size; _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } asn_enc_rval_t OCTET_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { static const char *h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; char scratch[16 * 3 + 4]; char *p = scratch; uint8_t *buf; uint8_t *end; size_t i; if(!st || (!st->buf && st->size)) _ASN_ENCODE_FAILED; er.encoded = 0; /* * Dump the contents of the buffer in hexadecimal. */ buf = st->buf; end = buf + st->size; if(flags & XER_F_CANONICAL) { char *scend = scratch + (sizeof(scratch) - 2); for(; buf < end; buf++) { if(p >= scend) { _ASN_CALLBACK(scratch, p - scratch); er.encoded += p - scratch; p = scratch; } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; } _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */ er.encoded += p - scratch; } else { for(i = 0; buf < end; buf++, i++) { if(!(i % 16) && (i || st->size > 16)) { _ASN_CALLBACK(scratch, p-scratch); er.encoded += (p-scratch); p = scratch; _i_ASN_TEXT_INDENT(1, ilevel); } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p - scratch) { p--; /* Remove the tail space */ _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */ er.encoded += p - scratch; if(st->size > 16) _i_ASN_TEXT_INDENT(1, ilevel-1); } } _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } static struct OCTET_STRING__xer_escape_table_s { char *string; int size; } OCTET_STRING__xer_escape_table[] = { #define OSXET(s) { s, sizeof(s) - 1 } OSXET("\074\156\165\154\057\076"), /* */ OSXET("\074\163\157\150\057\076"), /* */ OSXET("\074\163\164\170\057\076"), /* */ OSXET("\074\145\164\170\057\076"), /* */ OSXET("\074\145\157\164\057\076"), /* */ OSXET("\074\145\156\161\057\076"), /* */ OSXET("\074\141\143\153\057\076"), /* */ OSXET("\074\142\145\154\057\076"), /* */ OSXET("\074\142\163\057\076"), /* */ OSXET("\011"), /* \t */ OSXET("\012"), /* \n */ OSXET("\074\166\164\057\076"), /* */ OSXET("\074\146\146\057\076"), /* */ OSXET("\015"), /* \r */ OSXET("\074\163\157\057\076"), /* */ OSXET("\074\163\151\057\076"), /* */ OSXET("\074\144\154\145\057\076"), /* */ OSXET("\074\144\143\061\057\076"), /* */ OSXET("\074\144\143\062\057\076"), /* */ OSXET("\074\144\143\063\057\076"), /* */ OSXET("\074\144\143\064\057\076"), /* */ OSXET("\074\156\141\153\057\076"), /* */ OSXET("\074\163\171\156\057\076"), /* */ OSXET("\074\145\164\142\057\076"), /* */ OSXET("\074\143\141\156\057\076"), /* */ OSXET("\074\145\155\057\076"), /* */ OSXET("\074\163\165\142\057\076"), /* */ OSXET("\074\145\163\143\057\076"), /* */ OSXET("\074\151\163\064\057\076"), /* */ OSXET("\074\151\163\063\057\076"), /* */ OSXET("\074\151\163\062\057\076"), /* */ OSXET("\074\151\163\061\057\076"), /* */ { 0, 0 }, /* " " */ { 0, 0 }, /* ! */ { 0, 0 }, /* \" */ { 0, 0 }, /* # */ { 0, 0 }, /* $ */ { 0, 0 }, /* % */ OSXET("\046\141\155\160\073"), /* & */ { 0, 0 }, /* ' */ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ {0,0},{0,0},{0,0},{0,0}, /* 89:; */ OSXET("\046\154\164\073"), /* < */ { 0, 0 }, /* = */ OSXET("\046\147\164\073"), /* > */ }; static int OS__check_escaped_control_char(const void *buf, int size) { size_t i; /* * Inefficient algorithm which translates the escape sequences * defined above into characters. Returns -1 if not found. * TODO: replace by a faster algorithm (bsearch(), hash or * nested table lookups). */ for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { struct OCTET_STRING__xer_escape_table_s *el; el = &OCTET_STRING__xer_escape_table[i]; if(el->size == size && memcmp(buf, el->string, size) == 0) return i; } return -1; } static int OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { /* * This might be one of the escape sequences * for control characters. Check it out. * #11.15.5 */ int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); if(control_char >= 0) { OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; void *p = REALLOC(st->buf, st->size + 2); if(p) { st->buf = (uint8_t *)p; st->buf[st->size++] = control_char; st->buf[st->size] = '\0'; /* nul-termination */ return 0; } } return -1; /* No, it's not */ } asn_enc_rval_t OCTET_STRING_encode_xer_utf8(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; uint8_t *buf, *end; uint8_t *ss; /* Sequence start */ ssize_t encoded_len = 0; (void)ilevel; /* Unused argument */ (void)flags; /* Unused argument */ if(!st || (!st->buf && st->size)) _ASN_ENCODE_FAILED; buf = st->buf; end = buf + st->size; for(ss = buf; buf < end; buf++) { unsigned int ch = *buf; int s_len; /* Special encoding sequence length */ /* * Escape certain characters: X.680/11.15 */ if(ch < sizeof(OCTET_STRING__xer_escape_table) /sizeof(OCTET_STRING__xer_escape_table[0]) && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, app_key) < 0) _ASN_ENCODE_FAILED; encoded_len += (buf - ss) + s_len; ss = buf + 1; } } encoded_len += (buf - ss); if((buf - ss) && cb(ss, buf - ss, app_key) < 0) _ASN_ENCODE_FAILED; er.encoded = encoded_len; _ASN_ENCODED_OK(er); } /* * Convert from hexadecimal format (cstring): "AB CD EF" */ static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; const char *chunk_stop = (const char *)chunk_buf; const char *p = chunk_stop; const char *pend = p + chunk_size; unsigned int clv = 0; int half = 0; /* Half bit */ uint8_t *buf; /* Reallocate buffer according to high cap estimation */ ssize_t _ns = st->size + (chunk_size + 1) / 2; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; /* * If something like " a b c " appears here, the " a b":3 will be * converted, and the rest skipped. That is, unless buf_size is greater * than chunk_size, then it'll be equivalent to "ABC0". */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; switch(ch) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* Ignore whitespace */ continue; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ clv = (clv << 4) + (ch - 0x30); break; case 0x41: case 0x42: case 0x43: /* ABC */ case 0x44: case 0x45: case 0x46: /* DEF */ clv = (clv << 4) + (ch - 0x41 + 10); break; case 0x61: case 0x62: case 0x63: /* abc */ case 0x64: case 0x65: case 0x66: /* def */ clv = (clv << 4) + (ch - 0x61 + 10); break; default: *buf = 0; /* JIC */ return -1; } if(half++) { half = 0; *buf++ = clv; chunk_stop = p + 1; } } /* * Check partial decoding. */ if(half) { if(have_more) { /* * Partial specification is fine, * because no more more PXER_TEXT data is available. */ *buf++ = clv << 4; chunk_stop = p; } } else { chunk_stop = p; } st->size = buf - st->buf; /* Adjust the buffer size */ assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return (chunk_stop - (const char *)chunk_buf); /* Converted size */ } /* * Convert from binary format: "00101011101" */ static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { BIT_STRING_t *st = (BIT_STRING_t *)sptr; const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; int bits_unused = st->bits_unused & 0x7; uint8_t *buf; /* Reallocate buffer according to high cap estimation */ ssize_t _ns = st->size + (chunk_size + 7) / 8; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; (void)have_more; if(bits_unused == 0) bits_unused = 8; else if(st->size) buf--; /* * Convert series of 0 and 1 into the octet string. */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; switch(ch) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* Ignore whitespace */ break; case 0x30: case 0x31: if(bits_unused-- <= 0) { *++buf = 0; /* Clean the cell */ bits_unused = 7; } *buf |= (ch&1) << bits_unused; break; default: st->bits_unused = bits_unused; return -1; } } if(bits_unused == 8) { st->size = buf - st->buf; st->bits_unused = 0; } else { st->size = buf - st->buf + 1; st->bits_unused = bits_unused; } assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return chunk_size; /* Converted in full */ } /* * Something like strtod(), but with stricter rules. */ static int OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { int32_t val = 0; const char *p; for(p = buf; p < end; p++) { int ch = *p; /* Strange huge value */ if((val * base + base) < 0) return -1; switch(ch) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ val = val * base + (ch - 0x30); break; case 0x41: case 0x42: case 0x43: /* ABC */ case 0x44: case 0x45: case 0x46: /* DEF */ val = val * base + (ch - 0x41 + 10); break; case 0x61: case 0x62: case 0x63: /* abc */ case 0x64: case 0x65: case 0x66: /* def */ val = val * base + (ch - 0x61 + 10); break; case 0x3b: /* ';' */ *ret_value = val; return (p - buf) + 1; default: return -1; /* Character set error */ } } *ret_value = -1; return (p - buf); } /* * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" */ static ssize_t OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; uint8_t *buf; /* Reallocate buffer */ ssize_t _ns = st->size + chunk_size; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; /* * Convert series of 0 and 1 into the octet string. */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; int len; /* Length of the rest of the chunk */ if(ch != 0x26 /* '&' */) { *buf++ = ch; continue; /* That was easy... */ } /* * Process entity reference. */ len = chunk_size - (p - (const char *)chunk_buf); if(len == 1 /* "&" */) goto want_more; if(p[1] == 0x23 /* '#' */) { const char *pval; /* Pointer to start of digits */ int32_t val = 0; /* Entity reference value */ int base; if(len == 2 /* "&#" */) goto want_more; if(p[2] == 0x78 /* 'x' */) pval = p + 3, base = 16; else pval = p + 2, base = 10; len = OS__strtoent(base, pval, p + len, &val); if(len == -1) { /* Invalid charset. Just copy verbatim. */ *buf++ = ch; continue; } if(!len || pval[len-1] != 0x3b) goto want_more; assert(val > 0); p += (pval - p) + len - 1; /* Advance past entref */ if(val < 0x80) { *buf++ = (char)val; } else if(val < 0x800) { *buf++ = 0xc0 | ((val >> 6)); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x10000) { *buf++ = 0xe0 | ((val >> 12)); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x200000) { *buf++ = 0xf0 | ((val >> 18)); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x4000000) { *buf++ = 0xf8 | ((val >> 24)); *buf++ = 0x80 | ((val >> 18) & 0x3f); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else { *buf++ = 0xfc | ((val >> 30) & 0x1); *buf++ = 0x80 | ((val >> 24) & 0x3f); *buf++ = 0x80 | ((val >> 18) & 0x3f); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } } else { /* * Ugly, limited parsing of & > < */ char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); if(!sc) goto want_more; if((sc - p) == 4 && p[1] == 0x61 /* 'a' */ && p[2] == 0x6d /* 'm' */ && p[3] == 0x70 /* 'p' */) { *buf++ = 0x26; p = sc; continue; } if((sc - p) == 3) { if(p[1] == 0x6c) { *buf = 0x3c; /* '<' */ } else if(p[1] == 0x67) { *buf = 0x3e; /* '>' */ } else { /* Unsupported entity reference */ *buf++ = ch; continue; } if(p[2] != 0x74) { /* Unsupported entity reference */ *buf++ = ch; continue; } buf++; p = sc; continue; } /* Unsupported entity reference */ *buf++ = ch; } continue; want_more: if(have_more) { /* * We know that no more data (of the same type) * is coming. Copy the rest verbatim. */ *buf++ = ch; continue; } chunk_size = (p - (const char *)chunk_buf); /* Processing stalled: need more data */ break; } st->size = buf - st->buf; assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return chunk_size; /* Converted in full */ } /* * Decode OCTET STRING from the XML element's body. */ static asn_dec_rval_t OCTET_STRING__decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_ptr, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_ptr, const void *chunk_buf, size_t chunk_size, int have_more) ) { OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; asn_struct_ctx_t *ctx; /* Per-structure parser context */ asn_dec_rval_t rval; /* Return value from the decoder */ int st_allocated; /* * Create the string if does not exist. */ if(!st) { st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); *sptr = (void *)st; if(!st) goto sta_failed; st_allocated = 1; } else { st_allocated = 0; } if(!st->buf) { /* This is separate from above section */ st->buf = (uint8_t *)CALLOC(1, 1); if(!st->buf) { if(st_allocated) { *sptr = 0; goto stb_failed; } else { goto sta_failed; } } } /* Restore parsing context */ ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); stb_failed: FREEMEM(st); sta_failed: rval.code = RC_FAIL; rval.consumed = 0; return rval; } /* * Decode OCTET STRING from the hexadecimal data. */ asn_dec_rval_t OCTET_STRING_decode_xer_hex(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); } /* * Decode OCTET STRING from the binary (0/1) data. */ asn_dec_rval_t OCTET_STRING_decode_xer_binary(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, 0, OCTET_STRING__convert_binary); } /* * Decode OCTET STRING from the string (ASCII/UTF-8) data. */ asn_dec_rval_t OCTET_STRING_decode_xer_utf8(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, OCTET_STRING__handle_control_chars, OCTET_STRING__convert_entrefs); } static int OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, size_t units, unsigned int bpc, unsigned int unit_bits, long lb, long ub, asn_per_constraints_t *pc) { uint8_t *end = buf + units * bpc; ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", (int)units, lb, ub, unit_bits); /* X.691: 27.5.4 */ if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { /* Decode without translation */ lb = 0; } else if(pc && pc->code2value) { if(unit_bits > 16) return 1; /* FATAL: can't have constrained * UniversalString with more than * 16 million code points */ for(; buf < end; buf += bpc) { int value; int code = per_get_few_bits(po, unit_bits); if(code < 0) return -1; /* WMORE */ value = pc->code2value(code); if(value < 0) { ASN_DEBUG("Code %d (0x%02x) is" " not in map (%ld..%ld)", code, code, lb, ub); return 1; /* FATAL */ } switch(bpc) { case 1: *buf = value; break; case 2: buf[0] = value >> 8; buf[1] = value; break; case 4: buf[0] = value >> 24; buf[1] = value >> 16; buf[2] = value >> 8; buf[3] = value; break; } } return 0; } /* Shortcut the no-op copying to the aligned structure */ if(lb == 0 && (unit_bits == 8 * bpc)) { return per_get_many_bits(po, buf, 0, unit_bits * units); } for(; buf < end; buf += bpc) { int code = per_get_few_bits(po, unit_bits); int ch = code + lb; if(code < 0) return -1; /* WMORE */ if(ch > ub) { ASN_DEBUG("Code %d is out of range (%ld..%ld)", ch, lb, ub); return 1; /* FATAL */ } switch(bpc) { case 1: *buf = ch; break; case 2: buf[0] = ch >> 8; buf[1] = ch; break; case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; buf[2] = ch >> 8; buf[3] = ch; break; } } return 0; } static int OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, size_t units, unsigned int bpc, unsigned int unit_bits, long lb, long ub, asn_per_constraints_t *pc) { const uint8_t *end = buf + units * bpc; ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", (int)units, lb, ub, unit_bits, bpc); /* X.691: 27.5.4 */ if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { /* Encode as is */ lb = 0; } else if(pc && pc->value2code) { for(; buf < end; buf += bpc) { int code; uint32_t value; switch(bpc) { case 1: value = *(const uint8_t *)buf; break; case 2: value = (buf[0] << 8) | buf[1]; break; case 4: value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; break; default: return -1; } code = pc->value2code(value); if(code < 0) { ASN_DEBUG("Character %d (0x%02x) is" " not in map (%ld..%ld)", *buf, *buf, lb, ub); return -1; } if(per_put_few_bits(po, code, unit_bits)) return -1; } } /* Shortcut the no-op copying to the aligned structure */ if(lb == 0 && (unit_bits == 8 * bpc)) { return per_put_many_bits(po, buf, unit_bits * units); } for(ub -= lb; buf < end; buf += bpc) { int ch; uint32_t value; switch(bpc) { case 1: value = *(const uint8_t *)buf; break; case 2: value = (buf[0] << 8) | buf[1]; break; case 4: value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; break; default: return -1; } ch = value - lb; if(ch < 0 || ch > ub) { ASN_DEBUG("Character %d (0x%02x)" " is out of range (%ld..%ld)", *buf, *buf, lb, ub + lb); return -1; } if(per_put_few_bits(po, ch, unit_bits)) return -1; } return 0; } asn_dec_rval_t OCTET_STRING_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_per_constraints_t *pc = constraints ? constraints : td->per_constraints; asn_per_constraint_t *cval; asn_per_constraint_t *csiz; asn_dec_rval_t rval = { RC_OK, 0 }; BIT_STRING_t *st = (BIT_STRING_t *)*sptr; ssize_t consumed_myself = 0; int repeat; enum { OS__BPC_BIT = 0, OS__BPC_CHAR = 1, OS__BPC_U16 = 2, OS__BPC_U32 = 4 } bpc; /* Bytes per character */ unsigned int unit_bits; unsigned int canonical_unit_bits; (void)opt_codec_ctx; if(pc) { cval = &pc->value; csiz = &pc->size; } else { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; } switch(specs->subvariant) { default: case ASN_OSUBV_ANY: ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); RETURN(RC_FAIL); case ASN_OSUBV_BIT: canonical_unit_bits = unit_bits = 1; bpc = OS__BPC_BIT; break; case ASN_OSUBV_STR: canonical_unit_bits = unit_bits = 8; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_CHAR; break; case ASN_OSUBV_U16: canonical_unit_bits = unit_bits = 16; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U16; break; case ASN_OSUBV_U32: canonical_unit_bits = unit_bits = 32; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U32; break; } /* * Allocate the string. */ if(!st) { st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); if(!st) RETURN(RC_FAIL); } ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); if(csiz->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) RETURN(RC_WMORE); if(inext) { csiz = &asn_DEF_OCTET_STRING_constraints.size; cval = &asn_DEF_OCTET_STRING_constraints.value; unit_bits = canonical_unit_bits; } } if(csiz->effective_bits >= 0) { FREEMEM(st->buf); if(bpc) { st->size = csiz->upper_bound * bpc; } else { st->size = (csiz->upper_bound + 7) >> 3; } st->buf = (uint8_t *)MALLOC(st->size + 1); if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } } /* X.691, #16.5: zero-length encoding */ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ if(csiz->effective_bits == 0) { int ret; if(bpc) { ASN_DEBUG("Encoding OCTET STRING size %ld", csiz->upper_bound); ret = OCTET_STRING_per_get_characters(pd, st->buf, csiz->upper_bound, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); if(ret > 0) RETURN(RC_FAIL); } else { ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); ret = per_get_many_bits(pd, st->buf, 0, unit_bits * csiz->upper_bound); } if(ret < 0) RETURN(RC_WMORE); consumed_myself += unit_bits * csiz->upper_bound; st->buf[st->size] = 0; if(bpc == 0) { int ubs = (csiz->upper_bound & 0x7); st->bits_unused = ubs ? 8 - ubs : 0; } RETURN(RC_OK); } st->size = 0; do { ssize_t raw_len; ssize_t len_bytes; ssize_t len_bits; void *p; int ret; /* Get the PER length */ raw_len = uper_get_length(pd, csiz->effective_bits, &repeat); if(raw_len < 0) RETURN(RC_WMORE); raw_len += csiz->lower_bound; ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", (long)csiz->effective_bits, (long)raw_len, repeat ? "repeat" : "once", td->name); if(bpc) { len_bytes = raw_len * bpc; len_bits = len_bytes * unit_bits; } else { len_bits = raw_len; len_bytes = (len_bits + 7) >> 3; if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); /* len_bits be multiple of 16K if repeat is set */ } p = REALLOC(st->buf, st->size + len_bytes + 1); if(!p) RETURN(RC_FAIL); st->buf = (uint8_t *)p; if(bpc) { ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); if(ret > 0) RETURN(RC_FAIL); } else { ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); } if(ret < 0) RETURN(RC_WMORE); st->size += len_bytes; } while(repeat); st->buf[st->size] = 0; /* nul-terminate */ return rval; } asn_enc_rval_t OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_per_constraints_t *pc = constraints ? constraints : td->per_constraints; asn_per_constraint_t *cval; asn_per_constraint_t *csiz; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; asn_enc_rval_t er = { 0, 0, 0 }; int inext = 0; /* Lies not within extension root */ unsigned int unit_bits; unsigned int canonical_unit_bits; unsigned int sizeinunits; const uint8_t *buf; int ret; enum { OS__BPC_BIT = 0, OS__BPC_CHAR = 1, OS__BPC_U16 = 2, OS__BPC_U32 = 4 } bpc; /* Bytes per character */ int ct_extensible; if(!st || (!st->buf && st->size)) _ASN_ENCODE_FAILED; if(pc) { cval = &pc->value; csiz = &pc->size; } else { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; } ct_extensible = csiz->flags & APC_EXTENSIBLE; switch(specs->subvariant) { default: case ASN_OSUBV_ANY: _ASN_ENCODE_FAILED; case ASN_OSUBV_BIT: canonical_unit_bits = unit_bits = 1; bpc = OS__BPC_BIT; sizeinunits = st->size * 8 - (st->bits_unused & 0x07); ASN_DEBUG("BIT STRING of %d bytes, %d bits unused", sizeinunits, st->bits_unused); break; case ASN_OSUBV_STR: canonical_unit_bits = unit_bits = 8; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_CHAR; sizeinunits = st->size; break; case ASN_OSUBV_U16: canonical_unit_bits = unit_bits = 16; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U16; sizeinunits = st->size / 2; break; case ASN_OSUBV_U32: canonical_unit_bits = unit_bits = 32; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U32; sizeinunits = st->size / 4; break; } ASN_DEBUG("Encoding %s into %d units of %d bits" " (%ld..%ld, effective %d)%s", td->name, sizeinunits, unit_bits, csiz->lower_bound, csiz->upper_bound, csiz->effective_bits, ct_extensible ? " EXT" : ""); /* Figure out wheter size lies within PER visible constraint */ if(csiz->effective_bits >= 0) { if((int)sizeinunits < csiz->lower_bound || (int)sizeinunits > csiz->upper_bound) { if(ct_extensible) { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; unit_bits = canonical_unit_bits; inext = 1; } else _ASN_ENCODE_FAILED; } } else { inext = 0; } if(ct_extensible) { /* Declare whether length is [not] within extension root */ if(per_put_few_bits(po, inext, 1)) _ASN_ENCODE_FAILED; } /* X.691, #16.5: zero-length encoding */ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ if(csiz->effective_bits >= 0) { ASN_DEBUG("Encoding %d bytes (%ld), length in %d bits", st->size, sizeinunits - csiz->lower_bound, csiz->effective_bits); ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound, csiz->effective_bits); if(ret) _ASN_ENCODE_FAILED; if(bpc) { ret = OCTET_STRING_per_put_characters(po, st->buf, sizeinunits, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); } else { ret = per_put_many_bits(po, st->buf, sizeinunits * unit_bits); } if(ret) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } ASN_DEBUG("Encoding %d bytes", st->size); if(sizeinunits == 0) { if(uper_put_length(po, 0)) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } buf = st->buf; while(sizeinunits) { ssize_t maySave = uper_put_length(po, sizeinunits); if(maySave < 0) _ASN_ENCODE_FAILED; ASN_DEBUG("Encoding %ld of %ld", (long)maySave, (long)sizeinunits); if(bpc) { ret = OCTET_STRING_per_put_characters(po, buf, maySave, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); } else { ret = per_put_many_bits(po, buf, maySave * unit_bits); } if(ret) _ASN_ENCODE_FAILED; if(bpc) buf += maySave * bpc; else buf += maySave >> 3; sizeinunits -= maySave; assert(!(maySave & 0x07) || !sizeinunits); } _ASN_ENCODED_OK(er); } int OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { static const char *h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; char scratch[16 * 3 + 4]; char *p = scratch; uint8_t *buf; uint8_t *end; size_t i; (void)td; /* Unused argument */ if(!st || (!st->buf && st->size)) return (cb("", 8, app_key) < 0) ? -1 : 0; /* * Dump the contents of the buffer in hexadecimal. */ buf = st->buf; end = buf + st->size; for(i = 0; buf < end; buf++, i++) { if(!(i % 16) && (i || st->size > 16)) { if(cb(scratch, p - scratch, app_key) < 0) return -1; _i_INDENT(1); p = scratch; } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p > scratch) { p--; /* Remove the tail space */ if(cb(scratch, p - scratch, app_key) < 0) return -1; } return 0; } int OCTET_STRING_print_utf8(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st && (st->buf || !st->size)) { return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void OCTET_STRING_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_struct_ctx_t *ctx = (asn_struct_ctx_t *) ((char *)st + specs->ctx_offset); struct _stack *stck; if(!td || !st) return; ASN_DEBUG("Freeing %s as OCTET STRING", td->name); if(st->buf) { FREEMEM(st->buf); st->buf = 0; } /* * Remove decode-time stack. */ stck = (struct _stack *)ctx->ptr; if(stck) { while(stck->tail) { struct _stack_el *sel = stck->tail; stck->tail = sel->prev; FREEMEM(sel); } FREEMEM(stck); } if(!contents_only) { FREEMEM(st); } } /* * Conversion routines. */ int OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { void *buf; if(st == 0 || (str == 0 && len)) { errno = EINVAL; return -1; } /* * Clear the OCTET STRING. */ if(str == NULL) { FREEMEM(st->buf); st->buf = 0; st->size = 0; return 0; } /* Determine the original string size, if not explicitly given */ if(len < 0) len = strlen(str); /* Allocate and fill the memory */ buf = MALLOC(len + 1); if(buf == NULL) return -1; memcpy(buf, str, len); ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ FREEMEM(st->buf); st->buf = (uint8_t *)buf; st->size = len; return 0; } OCTET_STRING_t * OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; OCTET_STRING_t *st; st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); if(st && str && OCTET_STRING_fromBuf(st, str, len)) { FREEMEM(st); st = NULL; } return st; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NavigationModel.h0000644000175000017500000000133512576764164023227 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _NavigationModel_H_ #define _NavigationModel_H_ #include /* Including external dependencies */ #include "SeqOfNavModelElement.h" #include #ifdef __cplusplus extern "C" { #endif /* NavigationModel */ typedef struct NavigationModel { SeqOfNavModelElement_t navModelList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } NavigationModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NavigationModel; #ifdef __cplusplus } #endif #endif /* _NavigationModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MoreAssDataToBeSent.h0000644000175000017500000000226012576764164023714 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MoreAssDataToBeSent_H_ #define _MoreAssDataToBeSent_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum MoreAssDataToBeSent { MoreAssDataToBeSent_noMoreMessages = 0, MoreAssDataToBeSent_moreMessagesOnTheWay = 1 } e_MoreAssDataToBeSent; /* MoreAssDataToBeSent */ typedef ENUMERATED_t MoreAssDataToBeSent_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MoreAssDataToBeSent; asn_struct_free_f MoreAssDataToBeSent_free; asn_struct_print_f MoreAssDataToBeSent_print; asn_constr_check_f MoreAssDataToBeSent_constraint; ber_type_decoder_f MoreAssDataToBeSent_decode_ber; der_type_encoder_f MoreAssDataToBeSent_encode_der; xer_type_decoder_f MoreAssDataToBeSent_decode_xer; xer_type_encoder_f MoreAssDataToBeSent_encode_xer; per_type_decoder_f MoreAssDataToBeSent_decode_uper; per_type_encoder_f MoreAssDataToBeSent_encode_uper; #ifdef __cplusplus } #endif #endif /* _MoreAssDataToBeSent_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UncompressedEphemeris.h0000644000175000017500000000277612576764164024472 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _UncompressedEphemeris_H_ #define _UncompressedEphemeris_H_ #include /* Including external dependencies */ #include #include "EphemerisSubframe1Reserved.h" #include #ifdef __cplusplus extern "C" { #endif /* UncompressedEphemeris */ typedef struct UncompressedEphemeris { long ephemCodeOnL2; long ephemURA; long ephemSVhealth; long ephemIODC; long ephemL2Pflag; EphemerisSubframe1Reserved_t ephemSF1Rsvd; long ephemTgd; long ephemToc; long ephemAF2; long ephemAF1; long ephemAF0; long ephemCrs; long ephemDeltaN; long ephemM0; long ephemCuc; unsigned long ephemE; long ephemCus; unsigned long ephemAPowerHalf; long ephemToe; long ephemFitFlag; long ephemAODA; long ephemCic; long ephemOmegaA0; long ephemCis; long ephemI0; long ephemCrc; long ephemW; long ephemOmegaADot; long ephemIDot; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } UncompressedEphemeris_t; /* Implementation */ /* extern asn_TYPE_descriptor_t asn_DEF_ephemE_17; // (Use -fall-defs-global to expose) */ /* extern asn_TYPE_descriptor_t asn_DEF_ephemAPowerHalf_19; // (Use -fall-defs-global to expose) */ extern asn_TYPE_descriptor_t asn_DEF_UncompressedEphemeris; #ifdef __cplusplus } #endif #endif /* _UncompressedEphemeris_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTODm.c0000644000175000017500000001104612576764164021541 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSTODm.h" int GANSSTODm_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3599999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GANSSTODm_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GANSSTODm_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSTODm_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSTODm_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSTODm_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSTODm_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSTODm_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSTODm_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSTODm_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSTODm_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSTODm_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSTODm_constr_1 = { { APC_CONSTRAINED, 22, -1, 0, 3599999 } /* (0..3599999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSTODm_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSTODm = { "GANSSTODm", "GANSSTODm", GANSSTODm_free, GANSSTODm_print, GANSSTODm_constraint, GANSSTODm_decode_ber, GANSSTODm_encode_der, GANSSTODm_decode_xer, GANSSTODm_encode_xer, GANSSTODm_decode_uper, GANSSTODm_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSTODm_tags_1, sizeof(asn_DEF_GANSSTODm_tags_1) /sizeof(asn_DEF_GANSSTODm_tags_1[0]), /* 1 */ asn_DEF_GANSSTODm_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSTODm_tags_1) /sizeof(asn_DEF_GANSSTODm_tags_1[0]), /* 1 */ &asn_PER_type_GANSSTODm_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NativeInteger.c0000644000175000017500000002077612576764164022720 0ustar carlescarles/*- * Copyright (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Read the NativeInteger.h for the explanation wrt. differences between * INTEGER and NativeInteger. * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this * implementation deals with the standard (machine-specific) representation * of them instead of using the platform-independent buffer. */ #include #include /* * NativeInteger basic type description. */ static ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeInteger = { "INTEGER", /* The ASN.1 type is still INTEGER */ "INTEGER", NativeInteger_free, NativeInteger_print, asn_generic_no_constraint, NativeInteger_decode_ber, NativeInteger_encode_der, NativeInteger_decode_xer, NativeInteger_encode_xer, NativeInteger_decode_uper, /* Unaligned PER decoder */ NativeInteger_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_NativeInteger_tags, sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), asn_DEF_NativeInteger_tags, /* Same as above */ sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Decode INTEGER type. */ asn_dec_rval_t NativeInteger_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **nint_ptr, const void *buf_ptr, size_t size, int tag_mode) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; long *native = (long *)*nint_ptr; asn_dec_rval_t rval; ber_tlv_len_t length; /* * If the structure is not there, allocate it. */ if(native == NULL) { native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); if(native == NULL) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } } ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", td->name, tag_mode); /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("%s length is %d bytes", td->name, (int)length); /* * Make sure we have this length. */ buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } /* * ASN.1 encoded INTEGER: buf_ptr, length * Fill the native, at the same time checking for overflow. * If overflow occured, return with RC_FAIL. */ { INTEGER_t tmp; union { const void *constbuf; void *nonconstbuf; } unconst_buf; long l; unconst_buf.constbuf = buf_ptr; tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; tmp.size = length; if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&tmp, &l) : asn_INTEGER2long(&tmp, &l)) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } *native = l; } rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", (long)rval.consumed, (long)length, td->name, (long)*native); return rval; } /* * Encode the NativeInteger using the standard INTEGER type DER encoder. */ asn_enc_rval_t NativeInteger_encode_der(asn_TYPE_descriptor_t *sd, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { unsigned long native = *(unsigned long *)ptr; /* Disable sign ext. */ asn_enc_rval_t erval; INTEGER_t tmp; #ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ tmp.buf = (uint8_t *)&native; tmp.size = sizeof(native); #else /* Works even if WORDS_BIGENDIAN is not set where should've been */ uint8_t buf[sizeof(native)]; uint8_t *p; /* Prepare a fake INTEGER */ for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) *p = (uint8_t)native; tmp.buf = buf; tmp.size = sizeof(buf); #endif /* WORDS_BIGENDIAN */ /* Encode fake INTEGER */ erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); if(erval.encoded == -1) { assert(erval.structure_ptr == &tmp); erval.structure_ptr = ptr; } return erval; } /* * Decode the chunk of XML text encoding INTEGER. */ asn_dec_rval_t NativeInteger_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval; INTEGER_t st; void *st_ptr = (void *)&st; long *native = (long *)*sptr; if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) _ASN_DECODE_FAILED; } memset(&st, 0, sizeof(st)); rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, opt_mname, buf_ptr, size); if(rval.code == RC_OK) { long l; if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&st, &l) : asn_INTEGER2long(&st, &l)) { rval.code = RC_FAIL; rval.consumed = 0; } else { *native = l; } } else { /* * Cannot restart from the middle; * there is no place to save state in the native type. * Request a continuation from the very beginning. */ rval.consumed = 0; } ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); return rval; } asn_enc_rval_t NativeInteger_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; char scratch[32]; /* Enough for 64-bit int */ asn_enc_rval_t er; const long *native = (const long *)sptr; (void)ilevel; (void)flags; if(!native) _ASN_ENCODE_FAILED; er.encoded = snprintf(scratch, sizeof(scratch), (specs && specs->field_unsigned) ? "%lu" : "%ld", *native); if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) || cb(scratch, er.encoded, app_key) < 0) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } asn_dec_rval_t NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval; long *native = (long *)*sptr; INTEGER_t tmpint; void *tmpintptr = &tmpint; (void)opt_codec_ctx; ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) _ASN_DECODE_FAILED; } memset(&tmpint, 0, sizeof tmpint); rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, &tmpintptr, pd); if(rval.code == RC_OK) { if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&tmpint, native) : asn_INTEGER2long(&tmpint, native)) rval.code = RC_FAIL; else ASN_DEBUG("NativeInteger %s got value %ld", td->name, *native); } ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); return rval; } asn_enc_rval_t NativeInteger_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; long native; INTEGER_t tmpint; if(!sptr) _ASN_ENCODE_FAILED; native = *(long *)sptr; ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); memset(&tmpint, 0, sizeof(tmpint)); if((specs&&specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) : asn_long2INTEGER(&tmpint, native)) _ASN_ENCODE_FAILED; er = INTEGER_encode_uper(td, constraints, &tmpint, po); ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); return er; } /* * INTEGER specific human-readable output. */ int NativeInteger_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; const long *native = (const long *)sptr; char scratch[32]; /* Enough for 64-bit int */ int ret; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(native) { ret = snprintf(scratch, sizeof(scratch), (specs && specs->field_unsigned) ? "%lu" : "%ld", *native); assert(ret > 0 && (size_t)ret < sizeof(scratch)); return (cb(scratch, ret, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void NativeInteger_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(!td || !ptr) return; ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", td->name, contents_only, ptr); if(!contents_only) { FREEMEM(ptr); } } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistData-R98-ExpOTD.c0000644000175000017500000000403012576764164024340 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MsrAssistData-R98-ExpOTD.h" static asn_TYPE_member_t asn_MBR_MsrAssistData_R98_ExpOTD_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MsrAssistData_R98_ExpOTD, msrAssistList_R98_ExpOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrAssistList-R98-ExpOTD" }, }; static ber_tlv_tag_t asn_DEF_MsrAssistData_R98_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_MsrAssistData_R98_ExpOTD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* msrAssistList-R98-ExpOTD at 900 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MsrAssistData_R98_ExpOTD_specs_1 = { sizeof(struct MsrAssistData_R98_ExpOTD), offsetof(struct MsrAssistData_R98_ExpOTD, _asn_ctx), asn_MAP_MsrAssistData_R98_ExpOTD_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_MsrAssistData_R98_ExpOTD = { "MsrAssistData-R98-ExpOTD", "MsrAssistData-R98-ExpOTD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MsrAssistData_R98_ExpOTD_tags_1, sizeof(asn_DEF_MsrAssistData_R98_ExpOTD_tags_1) /sizeof(asn_DEF_MsrAssistData_R98_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_MsrAssistData_R98_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_MsrAssistData_R98_ExpOTD_tags_1) /sizeof(asn_DEF_MsrAssistData_R98_ExpOTD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_MsrAssistData_R98_ExpOTD_1, 1, /* Elements count */ &asn_SPC_MsrAssistData_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTODm.h0000644000175000017500000000155612576764164021553 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSTODm_H_ #define _GANSSTODm_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GANSSTODm */ typedef long GANSSTODm_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSTODm; asn_struct_free_f GANSSTODm_free; asn_struct_print_f GANSSTODm_print; asn_constr_check_f GANSSTODm_constraint; ber_type_decoder_f GANSSTODm_decode_ber; der_type_encoder_f GANSSTODm_encode_der; xer_type_decoder_f GANSSTODm_decode_xer; xer_type_encoder_f GANSSTODm_encode_xer; per_type_decoder_f GANSSTODm_decode_uper; per_type_encoder_f GANSSTODm_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSTODm_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AdditionalDopplerFields.c0000644000175000017500000000735012576764164024672 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AdditionalDopplerFields.h" static int memb_doppler1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_dopplerUncertainty_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 4)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_doppler1_constr_2 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_dopplerUncertainty_constr_3 = { { APC_CONSTRAINED, 3, 3, 0, 4 } /* (0..4) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_AdditionalDopplerFields_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AdditionalDopplerFields, doppler1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_doppler1_constraint_1, &asn_PER_memb_doppler1_constr_2, 0, "doppler1" }, { ATF_NOFLAGS, 0, offsetof(struct AdditionalDopplerFields, dopplerUncertainty), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_dopplerUncertainty_constraint_1, &asn_PER_memb_dopplerUncertainty_constr_3, 0, "dopplerUncertainty" }, }; static ber_tlv_tag_t asn_DEF_AdditionalDopplerFields_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AdditionalDopplerFields_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* doppler1 at 1342 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dopplerUncertainty at 1343 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AdditionalDopplerFields_specs_1 = { sizeof(struct AdditionalDopplerFields), offsetof(struct AdditionalDopplerFields, _asn_ctx), asn_MAP_AdditionalDopplerFields_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AdditionalDopplerFields = { "AdditionalDopplerFields", "AdditionalDopplerFields", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AdditionalDopplerFields_tags_1, sizeof(asn_DEF_AdditionalDopplerFields_tags_1) /sizeof(asn_DEF_AdditionalDopplerFields_tags_1[0]), /* 1 */ asn_DEF_AdditionalDopplerFields_tags_1, /* Same as above */ sizeof(asn_DEF_AdditionalDopplerFields_tags_1) /sizeof(asn_DEF_AdditionalDopplerFields_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AdditionalDopplerFields_1, 2, /* Elements count */ &asn_SPC_AdditionalDopplerFields_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSOrbitModel.h0000644000175000017500000000207212576764164023002 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSOrbitModel_H_ #define _GANSSOrbitModel_H_ #include /* Including external dependencies */ #include "NavModel-KeplerianSet.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum GANSSOrbitModel_PR { GANSSOrbitModel_PR_NOTHING, /* No components present */ GANSSOrbitModel_PR_keplerianSet, /* Extensions may appear below */ } GANSSOrbitModel_PR; /* GANSSOrbitModel */ typedef struct GANSSOrbitModel { GANSSOrbitModel_PR present; union GANSSOrbitModel_u { NavModel_KeplerianSet_t keplerianSet; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSOrbitModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSOrbitModel; #ifdef __cplusplus } #endif #endif /* _GANSSOrbitModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-AssistData.c0000644000175000017500000000354112576764164023054 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSS-AssistData.h" static asn_TYPE_member_t asn_MBR_GANSS_AssistData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSS_AssistData, ganss_controlHeader), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSS_ControlHeader, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganss-controlHeader" }, }; static ber_tlv_tag_t asn_DEF_GANSS_AssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSS_AssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ganss-controlHeader at 1062 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSS_AssistData_specs_1 = { sizeof(struct GANSS_AssistData), offsetof(struct GANSS_AssistData, _asn_ctx), asn_MAP_GANSS_AssistData_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSS_AssistData = { "GANSS-AssistData", "GANSS-AssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSS_AssistData_tags_1, sizeof(asn_DEF_GANSS_AssistData_tags_1) /sizeof(asn_DEF_GANSS_AssistData_tags_1[0]), /* 1 */ asn_DEF_GANSS_AssistData_tags_1, /* Same as above */ sizeof(asn_DEF_GANSS_AssistData_tags_1) /sizeof(asn_DEF_GANSS_AssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSS_AssistData_1, 1, /* Elements count */ &asn_SPC_GANSS_AssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGPS-MsrElement.h0000644000175000017500000000155212576764164023610 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGPS_MsrElement_H_ #define _SeqOfGPS_MsrElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GPS_MsrElement; /* SeqOfGPS-MsrElement */ typedef struct SeqOfGPS_MsrElement { A_SEQUENCE_OF(struct GPS_MsrElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGPS_MsrElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGPS_MsrElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GPS-MsrElement.h" #endif /* _SeqOfGPS_MsrElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfMsrAssistBTS-R98-ExpOTD.c0000644000175000017500000000365512576764164025071 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfMsrAssistBTS-R98-ExpOTD.h" static asn_per_constraints_t asn_PER_type_SeqOfMsrAssistBTS_R98_ExpOTD_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfMsrAssistBTS_R98_ExpOTD_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_MsrAssistBTS_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfMsrAssistBTS_R98_ExpOTD_specs_1 = { sizeof(struct SeqOfMsrAssistBTS_R98_ExpOTD), offsetof(struct SeqOfMsrAssistBTS_R98_ExpOTD, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD = { "SeqOfMsrAssistBTS-R98-ExpOTD", "SeqOfMsrAssistBTS-R98-ExpOTD", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1, sizeof(asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1) /sizeof(asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1) /sizeof(asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfMsrAssistBTS_R98_ExpOTD_constr_1, asn_MBR_SeqOfMsrAssistBTS_R98_ExpOTD_1, 1, /* Single element */ &asn_SPC_SeqOfMsrAssistBTS_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel5-AssistanceData-Extension.h0000644000175000017500000000161212576764164025613 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel5_AssistanceData_Extension_H_ #define _Rel5_AssistanceData_Extension_H_ #include /* Including external dependencies */ #include "Extended-reference.h" #include #ifdef __cplusplus extern "C" { #endif /* Rel5-AssistanceData-Extension */ typedef struct Rel5_AssistanceData_Extension { Extended_reference_t extended_reference; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel5_AssistanceData_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel5_AssistanceData_Extension; #ifdef __cplusplus } #endif #endif /* _Rel5_AssistanceData_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NULL.h0000644000175000017500000000131112576764164020713 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_TYPE_NULL_H #define ASN_TYPE_NULL_H #include #ifdef __cplusplus extern "C" { #endif /* * The value of the NULL type is meaningless: see BOOLEAN if you want to * carry true/false semantics. */ typedef int NULL_t; extern asn_TYPE_descriptor_t asn_DEF_NULL; asn_struct_print_f NULL_print; der_type_encoder_f NULL_encode_der; xer_type_decoder_f NULL_decode_xer; xer_type_encoder_f NULL_encode_xer; per_type_decoder_f NULL_decode_uper; per_type_encoder_f NULL_encode_uper; #ifdef __cplusplus } #endif #endif /* NULL_H */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-FirstSetMsrs.h0000644000175000017500000000161012576764164024135 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfOTD_FirstSetMsrs_H_ #define _SeqOfOTD_FirstSetMsrs_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct OTD_MeasurementWithID; /* SeqOfOTD-FirstSetMsrs */ typedef struct SeqOfOTD_FirstSetMsrs { A_SEQUENCE_OF(struct OTD_MeasurementWithID) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfOTD_FirstSetMsrs_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_FirstSetMsrs; #ifdef __cplusplus } #endif /* Referred external types */ #include "OTD-FirstSetMsrs.h" #endif /* _SeqOfOTD_FirstSetMsrs_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MethodType.h0000644000175000017500000000204712576764164022232 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MethodType_H_ #define _MethodType_H_ #include /* Including external dependencies */ #include "AccuracyOpt.h" #include "Accuracy.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum MethodType_PR { MethodType_PR_NOTHING, /* No components present */ MethodType_PR_msAssisted, MethodType_PR_msBased, MethodType_PR_msBasedPref, MethodType_PR_msAssistedPref } MethodType_PR; /* MethodType */ typedef struct MethodType { MethodType_PR present; union MethodType_u { AccuracyOpt_t msAssisted; Accuracy_t msBased; Accuracy_t msBasedPref; Accuracy_t msAssistedPref; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MethodType_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MethodType; #ifdef __cplusplus } #endif #endif /* _MethodType_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAlmanacElement.c0000644000175000017500000000355312576764164023610 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSAlmanacElement.h" static asn_per_constraints_t asn_PER_type_GANSSAlmanacElement_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSAlmanacElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSAlmanacElement, choice.keplerianAlmanacSet), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Almanac_KeplerianSet, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "keplerianAlmanacSet" }, }; static asn_TYPE_tag2member_t asn_MAP_GANSSAlmanacElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* keplerianAlmanacSet at 1362 */ }; static asn_CHOICE_specifics_t asn_SPC_GANSSAlmanacElement_specs_1 = { sizeof(struct GANSSAlmanacElement), offsetof(struct GANSSAlmanacElement, _asn_ctx), offsetof(struct GANSSAlmanacElement, present), sizeof(((struct GANSSAlmanacElement *)0)->present), asn_MAP_GANSSAlmanacElement_tag2el_1, 1, /* Count of tags in the map */ 0, 1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_GANSSAlmanacElement = { "GANSSAlmanacElement", "GANSSAlmanacElement", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_GANSSAlmanacElement_constr_1, asn_MBR_GANSSAlmanacElement_1, 1, /* Elements count */ &asn_SPC_GANSSAlmanacElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefMeasurementElement.c0000644000175000017500000001632412576764164025176 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSRefMeasurementElement.h" static int memb_doppler0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -2048 && value <= 2047)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_codePhase_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1022)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_intCodePhase_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_codePhaseSearchWindow_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_doppler0_constr_3 = { { APC_CONSTRAINED, 12, 12, -2048, 2047 } /* (-2048..2047) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_codePhase_constr_5 = { { APC_CONSTRAINED, 10, 10, 0, 1022 } /* (0..1022) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_intCodePhase_constr_6 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_codePhaseSearchWindow_constr_7 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSRefMeasurementElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSRefMeasurementElement, svID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSRefMeasurementElement, doppler0), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_doppler0_constraint_1, &asn_PER_memb_doppler0_constr_3, 0, "doppler0" }, { ATF_POINTER, 1, offsetof(struct GANSSRefMeasurementElement, additionalDoppler), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AdditionalDopplerFields, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "additionalDoppler" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSRefMeasurementElement, codePhase), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_codePhase_constraint_1, &asn_PER_memb_codePhase_constr_5, 0, "codePhase" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSRefMeasurementElement, intCodePhase), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_intCodePhase_constraint_1, &asn_PER_memb_intCodePhase_constr_6, 0, "intCodePhase" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSRefMeasurementElement, codePhaseSearchWindow), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_codePhaseSearchWindow_constraint_1, &asn_PER_memb_codePhaseSearchWindow_constr_7, 0, "codePhaseSearchWindow" }, { ATF_POINTER, 1, offsetof(struct GANSSRefMeasurementElement, additionalAngle), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AddionalAngleFields, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "additionalAngle" }, }; static int asn_MAP_GANSSRefMeasurementElement_oms_1[] = { 2, 6 }; static ber_tlv_tag_t asn_DEF_GANSSRefMeasurementElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSRefMeasurementElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* svID at 1328 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* doppler0 at 1331 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* additionalDoppler at 1332 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* codePhase at 1333 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* intCodePhase at 1334 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* codePhaseSearchWindow at 1335 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* additionalAngle at 1336 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSRefMeasurementElement_specs_1 = { sizeof(struct GANSSRefMeasurementElement), offsetof(struct GANSSRefMeasurementElement, _asn_ctx), asn_MAP_GANSSRefMeasurementElement_tag2el_1, 7, /* Count of tags in the map */ asn_MAP_GANSSRefMeasurementElement_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ 6, /* Start extensions */ 8 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSRefMeasurementElement = { "GANSSRefMeasurementElement", "GANSSRefMeasurementElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSRefMeasurementElement_tags_1, sizeof(asn_DEF_GANSSRefMeasurementElement_tags_1) /sizeof(asn_DEF_GANSSRefMeasurementElement_tags_1[0]), /* 1 */ asn_DEF_GANSSRefMeasurementElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSRefMeasurementElement_tags_1) /sizeof(asn_DEF_GANSSRefMeasurementElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSRefMeasurementElement_1, 7, /* Elements count */ &asn_SPC_GANSSRefMeasurementElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-5-MsrPosition-Rsp-Extension.h0000644000175000017500000000233212576764164026031 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel_5_MsrPosition_Rsp_Extension_H_ #define _Rel_5_MsrPosition_Rsp_Extension_H_ #include /* Including external dependencies */ #include "UlPseudoSegInd.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Extended_reference; struct SeqOfOTD_MsrElementRest; /* Rel-5-MsrPosition-Rsp-Extension */ typedef struct Rel_5_MsrPosition_Rsp_Extension { struct Extended_reference *extended_reference /* OPTIONAL */; struct SeqOfOTD_MsrElementRest *otd_MeasureInfo_5_Ext /* OPTIONAL */; UlPseudoSegInd_t *ulPseudoSegInd /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel_5_MsrPosition_Rsp_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel_5_MsrPosition_Rsp_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "Extended-reference.h" #include "OTD-MeasureInfo-5-Ext.h" #endif /* _Rel_5_MsrPosition_Rsp_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ProtocolError.h0000644000175000017500000000207512576764164022764 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ProtocolError_H_ #define _ProtocolError_H_ #include /* Including external dependencies */ #include "ErrorCodes.h" #include "ExtensionContainer.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Rel_5_ProtocolError_Extension; /* ProtocolError */ typedef struct ProtocolError { ErrorCodes_t errorCause; ExtensionContainer_t *extensionContainer /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ struct Rel_5_ProtocolError_Extension *rel_5_ProtocolError_Extension /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } ProtocolError_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ProtocolError; #ifdef __cplusplus } #endif /* Referred external types */ #include "Rel-5-ProtocolError-Extension.h" #endif /* _ProtocolError_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistData.h0000644000175000017500000000142012576764164024223 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SystemInfoAssistData_H_ #define _SystemInfoAssistData_H_ #include /* Including external dependencies */ #include "SeqOfSystemInfoAssistBTS.h" #include #ifdef __cplusplus extern "C" { #endif /* SystemInfoAssistData */ typedef struct SystemInfoAssistData { SeqOfSystemInfoAssistBTS_t systemInfoAssistList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SystemInfoAssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistData; #ifdef __cplusplus } #endif #endif /* _SystemInfoAssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Almanac-KeplerianSet.h0000644000175000017500000000167112576764164024072 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Almanac_KeplerianSet_H_ #define _Almanac_KeplerianSet_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Almanac-KeplerianSet */ typedef struct Almanac_KeplerianSet { long kepAlmanacE; long kepAlmanacDeltaI; long kepAlmanacOmegaDot; long kepSVHealth; long kepAlmanacAPowerHalf; long kepAlmanacOmega0; long kepAlmanacW; long kepAlmanacM0; long kepAlmanacAF0; long kepAlmanacAF1; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Almanac_KeplerianSet_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Almanac_KeplerianSet; #ifdef __cplusplus } #endif #endif /* _Almanac_KeplerianSet_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-ControlHeader.h0000644000175000017500000000204312576764164023546 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSS_ControlHeader_H_ #define _GANSS_ControlHeader_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSCommonAssistData; struct SeqOfGANSSGenericAssistDataElement; /* GANSS-ControlHeader */ typedef struct GANSS_ControlHeader { struct GANSSCommonAssistData *ganssCommonAssistData /* OPTIONAL */; struct SeqOfGANSSGenericAssistDataElement *ganssGenericAssistDataList /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSS_ControlHeader_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSS_ControlHeader; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSCommonAssistData.h" #include "SeqOfGANSSGenericAssistDataElement.h" #endif /* _GANSS_ControlHeader_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceRelation.h0000644000175000017500000000226412576764164023545 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _ReferenceRelation_H_ #define _ReferenceRelation_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum ReferenceRelation { ReferenceRelation_secondBTSThirdSet = 0, ReferenceRelation_secondBTSSecondSet = 1, ReferenceRelation_firstBTSFirstSet = 2 } e_ReferenceRelation; /* ReferenceRelation */ typedef ENUMERATED_t ReferenceRelation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_ReferenceRelation; asn_struct_free_f ReferenceRelation_free; asn_struct_print_f ReferenceRelation_print; asn_constr_check_f ReferenceRelation_constraint; ber_type_decoder_f ReferenceRelation_decode_ber; der_type_encoder_f ReferenceRelation_encode_der; xer_type_decoder_f ReferenceRelation_decode_xer; xer_type_encoder_f ReferenceRelation_encode_xer; per_type_decoder_f ReferenceRelation_decode_uper; per_type_encoder_f ReferenceRelation_encode_uper; #ifdef __cplusplus } #endif #endif /* _ReferenceRelation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AcquisElement.h0000644000175000017500000000215612576764164022710 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AcquisElement_H_ #define _AcquisElement_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct AddionalDopplerFields; struct AddionalAngleFields; /* AcquisElement */ typedef struct AcquisElement { SatelliteID_t svid; long doppler0; struct AddionalDopplerFields *addionalDoppler /* OPTIONAL */; long codePhase; long intCodePhase; long gpsBitNumber; long codePhaseSearchWindow; struct AddionalAngleFields *addionalAngle /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } AcquisElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AcquisElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "AddionalDopplerFields.h" #include "AddionalAngleFields.h" #endif /* _AcquisElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocationError.c0000644000175000017500000000440512576764164022725 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "LocationError.h" static asn_TYPE_member_t asn_MBR_LocationError_1[] = { { ATF_NOFLAGS, 0, offsetof(struct LocationError, locErrorReason), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_LocErrorReason, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "locErrorReason" }, { ATF_POINTER, 1, offsetof(struct LocationError, additionalAssistanceData), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AdditionalAssistanceData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "additionalAssistanceData" }, }; static int asn_MAP_LocationError_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_LocationError_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_LocationError_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* locErrorReason at 488 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* additionalAssistanceData at 489 */ }; static asn_SEQUENCE_specifics_t asn_SPC_LocationError_specs_1 = { sizeof(struct LocationError), offsetof(struct LocationError, _asn_ctx), asn_MAP_LocationError_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_LocationError_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ 1, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_LocationError = { "LocationError", "LocationError", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_LocationError_tags_1, sizeof(asn_DEF_LocationError_tags_1) /sizeof(asn_DEF_LocationError_tags_1[0]), /* 1 */ asn_DEF_LocationError_tags_1, /* Same as above */ sizeof(asn_DEF_LocationError_tags_1) /sizeof(asn_DEF_LocationError_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_LocationError_1, 2, /* Elements count */ &asn_SPC_LocationError_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeRelation.h0000644000175000017500000000146512576764164022547 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TimeRelation_H_ #define _TimeRelation_H_ #include /* Including external dependencies */ #include "GPSTOW23b.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GSMTime; /* TimeRelation */ typedef struct TimeRelation { GPSTOW23b_t gpsTOW; struct GSMTime *gsmTime /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } TimeRelation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TimeRelation; #ifdef __cplusplus } #endif /* Referred external types */ #include "GSMTime.h" #endif /* _TimeRelation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfNavModelElement.c0000644000175000017500000000341512576764164024120 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfNavModelElement.h" static asn_per_constraints_t asn_PER_type_SeqOfNavModelElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfNavModelElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_NavModelElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfNavModelElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfNavModelElement_specs_1 = { sizeof(struct SeqOfNavModelElement), offsetof(struct SeqOfNavModelElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfNavModelElement = { "SeqOfNavModelElement", "SeqOfNavModelElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfNavModelElement_tags_1, sizeof(asn_DEF_SeqOfNavModelElement_tags_1) /sizeof(asn_DEF_SeqOfNavModelElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfNavModelElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfNavModelElement_tags_1) /sizeof(asn_DEF_SeqOfNavModelElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfNavModelElement_constr_1, asn_MBR_SeqOfNavModelElement_1, 1, /* Single element */ &asn_SPC_SeqOfNavModelElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultiFrameOffset.h0000644000175000017500000000172712576764164023370 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MultiFrameOffset_H_ #define _MultiFrameOffset_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* MultiFrameOffset */ typedef long MultiFrameOffset_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MultiFrameOffset; asn_struct_free_f MultiFrameOffset_free; asn_struct_print_f MultiFrameOffset_print; asn_constr_check_f MultiFrameOffset_constraint; ber_type_decoder_f MultiFrameOffset_decode_ber; der_type_encoder_f MultiFrameOffset_encode_der; xer_type_decoder_f MultiFrameOffset_decode_xer; xer_type_encoder_f MultiFrameOffset_encode_xer; per_type_decoder_f MultiFrameOffset_decode_uper; per_type_encoder_f MultiFrameOffset_encode_uper; #ifdef __cplusplus } #endif #endif /* _MultiFrameOffset_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistBTS.h0000644000175000017500000000205512576764164024007 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SystemInfoAssistBTS_H_ #define _SystemInfoAssistBTS_H_ #include /* Including external dependencies */ #include #include "AssistBTSData.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SystemInfoAssistBTS_PR { SystemInfoAssistBTS_PR_NOTHING, /* No components present */ SystemInfoAssistBTS_PR_notPresent, SystemInfoAssistBTS_PR_present } SystemInfoAssistBTS_PR; /* SystemInfoAssistBTS */ typedef struct SystemInfoAssistBTS { SystemInfoAssistBTS_PR present; union SystemInfoAssistBTS_u { NULL_t notPresent; AssistBTSData_t present; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SystemInfoAssistBTS_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistBTS; #ifdef __cplusplus } #endif #endif /* _SystemInfoAssistBTS_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-Measurement.h0000644000175000017500000000146412576764164023063 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_Measurement_H_ #define _OTD_Measurement_H_ #include /* Including external dependencies */ #include "ModuloTimeSlot.h" #include "EOTDQuality.h" #include "OTDValue.h" #include #ifdef __cplusplus extern "C" { #endif /* OTD-Measurement */ typedef struct OTD_Measurement { ModuloTimeSlot_t nborTimeSlot; EOTDQuality_t eotdQuality; OTDValue_t otdValue; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_Measurement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_Measurement; #ifdef __cplusplus } #endif #endif /* _OTD_Measurement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/INTEGER.c0000644000175000017500000005435412576764164021250 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* Encoder and decoder of a primitive type */ #include /* * INTEGER basic type description. */ static ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_INTEGER = { "INTEGER", "INTEGER", ASN__PRIMITIVE_TYPE_free, INTEGER_print, asn_generic_no_constraint, ber_decode_primitive, INTEGER_encode_der, INTEGER_decode_xer, INTEGER_encode_xer, INTEGER_decode_uper, /* Unaligned PER decoder */ INTEGER_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_INTEGER_tags, sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), asn_DEF_INTEGER_tags, /* Same as above */ sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Encode INTEGER type using DER. */ asn_enc_rval_t INTEGER_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { INTEGER_t *st = (INTEGER_t *)sptr; ASN_DEBUG("%s %s as INTEGER (tm=%d)", cb?"Encoding":"Estimating", td->name, tag_mode); /* * Canonicalize integer in the buffer. * (Remove too long sign extension, remove some first 0x00 bytes) */ if(st->buf) { uint8_t *buf = st->buf; uint8_t *end1 = buf + st->size - 1; int shift; /* Compute the number of superfluous leading bytes */ for(; buf < end1; buf++) { /* * If the contents octets of an integer value encoding * consist of more than one octet, then the bits of the * first octet and bit 8 of the second octet: * a) shall not all be ones; and * b) shall not all be zero. */ switch(*buf) { case 0x00: if((buf[1] & 0x80) == 0) continue; break; case 0xff: if((buf[1] & 0x80)) continue; break; } break; } /* Remove leading superfluous bytes from the integer */ shift = buf - st->buf; if(shift) { uint8_t *nb = st->buf; uint8_t *end; st->size -= shift; /* New size, minus bad bytes */ end = nb + st->size; for(; nb < end; nb++, buf++) *nb = *buf; } } /* if(1) */ return der_encode_primitive(td, sptr, tag_mode, tag, cb, app_key); } static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop); /* * INTEGER specific human-readable output. */ static ssize_t INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; char scratch[32]; /* Enough for 64-bit integer */ uint8_t *buf = st->buf; uint8_t *buf_end = st->buf + st->size; signed long accum; ssize_t wrote = 0; char *p; int ret; /* * Advance buf pointer until the start of the value's body. * This will make us able to process large integers using simple case, * when the actual value is small * (0x0000000000abcdef would yield a fine 0x00abcdef) */ /* Skip the insignificant leading bytes */ for(; buf < buf_end-1; buf++) { switch(*buf) { case 0x00: if((buf[1] & 0x80) == 0) continue; break; case 0xff: if((buf[1] & 0x80) != 0) continue; break; } break; } /* Simple case: the integer size is small */ if((size_t)(buf_end - buf) <= sizeof(accum)) { const asn_INTEGER_enum_map_t *el; size_t scrsize; char *scr; if(buf == buf_end) { accum = 0; } else { accum = (*buf & 0x80) ? -1 : 0; for(; buf < buf_end; buf++) accum = (accum << 8) | *buf; } el = INTEGER_map_value2enum(specs, accum); if(el) { scrsize = el->enum_len + 32; scr = (char *)alloca(scrsize); if(plainOrXER == 0) ret = snprintf(scr, scrsize, "%ld (%s)", accum, el->enum_name); else ret = snprintf(scr, scrsize, "<%s/>", el->enum_name); } else if(plainOrXER && specs && specs->strict_enumeration) { ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); errno = EPERM; return -1; } else { scrsize = sizeof(scratch); scr = scratch; ret = snprintf(scr, scrsize, (specs && specs->field_unsigned) ?"%lu":"%ld", accum); } assert(ret > 0 && (size_t)ret < scrsize); return (cb(scr, ret, app_key) < 0) ? -1 : ret; } else if(plainOrXER && specs && specs->strict_enumeration) { /* * Here and earlier, we cannot encode the ENUMERATED values * if there is no corresponding identifier. */ ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); errno = EPERM; return -1; } /* Output in the long xx:yy:zz... format */ /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ for(p = scratch; buf < buf_end; buf++) { static const char *h2c = "0123456789ABCDEF"; if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { /* Flush buffer */ if(cb(scratch, p - scratch, app_key) < 0) return -1; wrote += p - scratch; p = scratch; } *p++ = h2c[*buf >> 4]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x3a; /* ":" */ } if(p != scratch) p--; /* Remove the last ":" */ wrote += p - scratch; return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; } /* * INTEGER specific human-readable output. */ int INTEGER_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const INTEGER_t *st = (const INTEGER_t *)sptr; ssize_t ret; (void)td; (void)ilevel; if(!st || !st->buf) ret = cb("", 8, app_key); else ret = INTEGER__dump(td, st, cb, app_key, 0); return (ret < 0) ? -1 : 0; } struct e2v_key { const char *start; const char *stop; asn_INTEGER_enum_map_t *vemap; unsigned int *evmap; }; static int INTEGER__compar_enum2value(const void *kp, const void *am) { const struct e2v_key *key = (const struct e2v_key *)kp; const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; const char *ptr, *end, *name; /* Remap the element (sort by different criterion) */ el = key->vemap + key->evmap[el - key->vemap]; /* Compare strings */ for(ptr = key->start, end = key->stop, name = el->enum_name; ptr < end; ptr++, name++) { if(*ptr != *name) return *(const unsigned char *)ptr - *(const unsigned char *)name; } return name[0] ? -1 : 0; } static const asn_INTEGER_enum_map_t * INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop) { asn_INTEGER_enum_map_t *el_found; int count = specs ? specs->map_count : 0; struct e2v_key key; const char *lp; if(!count) return NULL; /* Guaranteed: assert(lstart < lstop); */ /* Figure out the tag name */ for(lstart++, lp = lstart; lp < lstop; lp++) { switch(*lp) { case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ case 0x2f: /* '/' */ case 0x3e: /* '>' */ break; default: continue; } break; } if(lp == lstop) return NULL; /* No tag found */ lstop = lp; key.start = lstart; key.stop = lstop; key.vemap = specs->value2enum; key.evmap = specs->enum2value; el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, specs->value2enum, count, sizeof(specs->value2enum[0]), INTEGER__compar_enum2value); if(el_found) { /* Remap enum2value into value2enum */ el_found = key.vemap + key.evmap[el_found - key.vemap]; } return el_found; } static int INTEGER__compar_value2enum(const void *kp, const void *am) { long a = *(const long *)kp; const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; long b = el->nat_value; if(a < b) return -1; else if(a == b) return 0; else return 1; } const asn_INTEGER_enum_map_t * INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value) { int count = specs ? specs->map_count : 0; if(!count) return 0; return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, count, sizeof(specs->value2enum[0]), INTEGER__compar_value2enum); } static int INTEGER_st_prealloc(INTEGER_t *st, int min_size) { void *p = MALLOC(min_size + 1); if(p) { void *b = st->buf; st->size = 0; st->buf = p; FREEMEM(b); return 0; } else { return -1; } } /* * Decode the chunk of XML text encoding INTEGER. */ static enum xer_pbd_rval INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { INTEGER_t *st = (INTEGER_t *)sptr; long sign = 1; long value; const char *lp; const char *lstart = (const char *)chunk_buf; const char *lstop = lstart + chunk_size; enum { ST_SKIPSPACE, ST_SKIPSPHEX, ST_WAITDIGITS, ST_DIGITS, ST_HEXDIGIT1, ST_HEXDIGIT2, ST_HEXCOLON, ST_EXTRASTUFF } state = ST_SKIPSPACE; if(chunk_size) ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", (long)chunk_size, *lstart, lstop[-1]); /* * We may have received a tag here. It will be processed inline. * Use strtoul()-like code and serialize the result. */ for(value = 0, lp = lstart; lp < lstop; lp++) { int lv = *lp; switch(lv) { case 0x09: case 0x0a: case 0x0d: case 0x20: switch(state) { case ST_SKIPSPACE: case ST_SKIPSPHEX: continue; case ST_HEXCOLON: if(xer_is_whitespace(lp, lstop - lp)) { lp = lstop - 1; continue; } break; default: break; } break; case 0x2d: /* '-' */ if(state == ST_SKIPSPACE) { sign = -1; state = ST_WAITDIGITS; continue; } break; case 0x2b: /* '+' */ if(state == ST_SKIPSPACE) { state = ST_WAITDIGITS; continue; } break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: switch(state) { case ST_DIGITS: break; case ST_SKIPSPHEX: /* Fall through */ case ST_HEXDIGIT1: value = (lv - 0x30) << 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: value += (lv - 0x30); state = ST_HEXCOLON; st->buf[st->size++] = (uint8_t)value; continue; case ST_HEXCOLON: return XPBD_BROKEN_ENCODING; default: state = ST_DIGITS; break; } { long new_value = value * 10; if(new_value / 10 != value) /* Overflow */ return XPBD_DECODER_LIMIT; value = new_value + (lv - 0x30); /* Check for two's complement overflow */ if(value < 0) { /* Check whether it is a LONG_MIN */ if(sign == -1 && (unsigned long)value == ~((unsigned long)-1 >> 1)) { sign = 1; } else { /* Overflow */ return XPBD_DECODER_LIMIT; } } } continue; case 0x3c: /* '<' */ if(state == ST_SKIPSPACE) { const asn_INTEGER_enum_map_t *el; el = INTEGER_map_enum2value( (asn_INTEGER_specifics_t *) td->specifics, lstart, lstop); if(el) { ASN_DEBUG("Found \"%s\" => %ld", el->enum_name, el->nat_value); state = ST_DIGITS; value = el->nat_value; lp = lstop - 1; continue; } ASN_DEBUG("Unknown identifier for INTEGER"); } return XPBD_BROKEN_ENCODING; case 0x3a: /* ':' */ if(state == ST_HEXCOLON) { /* This colon is expected */ state = ST_HEXDIGIT1; continue; } else if(state == ST_DIGITS) { /* The colon here means that we have * decoded the first two hexadecimal * places as a decimal value. * Switch decoding mode. */ ASN_DEBUG("INTEGER re-evaluate as hex form"); if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; lp = lstart - 1; continue; } else { ASN_DEBUG("state %d at %d", state, lp - lstart); break; } /* [A-Fa-f] */ case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: switch(state) { case ST_SKIPSPHEX: case ST_SKIPSPACE: /* Fall through */ case ST_HEXDIGIT1: value = lv - ((lv < 0x61) ? 0x41 : 0x61); value += 10; value <<= 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: value += lv - ((lv < 0x61) ? 0x41 : 0x61); value += 10; st->buf[st->size++] = (uint8_t)value; state = ST_HEXCOLON; continue; case ST_DIGITS: ASN_DEBUG("INTEGER re-evaluate as hex form"); if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; lp = lstart - 1; continue; default: break; } break; } /* Found extra non-numeric stuff */ ASN_DEBUG("Found non-numeric 0x%2x at %d", lv, lp - lstart); state = ST_EXTRASTUFF; break; } switch(state) { case ST_DIGITS: /* Everything is cool */ break; case ST_HEXCOLON: st->buf[st->size] = 0; /* Just in case termination */ return XPBD_BODY_CONSUMED; case ST_HEXDIGIT1: case ST_HEXDIGIT2: case ST_SKIPSPHEX: return XPBD_BROKEN_ENCODING; default: if(xer_is_whitespace(lp, lstop - lp)) { if(state != ST_EXTRASTUFF) return XPBD_NOT_BODY_IGNORE; break; } else { ASN_DEBUG("INTEGER: No useful digits (state %d)", state); return XPBD_BROKEN_ENCODING; /* No digits */ } break; } value *= sign; /* Change sign, if needed */ if(asn_long2INTEGER(st, value)) return XPBD_SYSTEM_FAILURE; return XPBD_BODY_CONSUMED; } asn_dec_rval_t INTEGER_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(INTEGER_t), opt_mname, buf_ptr, size, INTEGER__xer_body_decode); } asn_enc_rval_t INTEGER_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const INTEGER_t *st = (const INTEGER_t *)sptr; asn_enc_rval_t er; (void)ilevel; (void)flags; if(!st || !st->buf) _ASN_ENCODE_FAILED; er.encoded = INTEGER__dump(td, st, cb, app_key, 1); if(er.encoded < 0) _ASN_ENCODE_FAILED; _ASN_ENCODED_OK(er); } asn_dec_rval_t INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval = { RC_OK, 0 }; INTEGER_t *st = (INTEGER_t *)*sptr; asn_per_constraint_t *ct; int repeat; (void)opt_codec_ctx; if(!st) { st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); if(!st) _ASN_DECODE_FAILED; } if(!constraints) constraints = td->per_constraints; ct = constraints ? &constraints->value : 0; if(ct && ct->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) _ASN_DECODE_STARVED; if(inext) ct = 0; } FREEMEM(st->buf); st->buf = 0; st->size = 0; if(ct) { if(ct->flags & APC_SEMI_CONSTRAINED) { st->buf = (uint8_t *)CALLOC(1, 2); if(!st->buf) _ASN_DECODE_FAILED; st->size = 1; } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { size_t size = (ct->range_bits + 7) >> 3; st->buf = (uint8_t *)MALLOC(1 + size + 1); if(!st->buf) _ASN_DECODE_FAILED; st->size = size; } } /* X.691, #12.2.2 */ if(ct && ct->flags != APC_UNCONSTRAINED) { /* #10.5.6 */ ASN_DEBUG("Integer with range %d bits", ct->range_bits); if(ct->range_bits >= 0) { long value; if(ct->range_bits == 32) { long lhalf; value = per_get_few_bits(pd, 16); if(value < 0) _ASN_DECODE_STARVED; lhalf = per_get_few_bits(pd, 16); if(lhalf < 0) _ASN_DECODE_STARVED; value = (value << 16) | lhalf; } else { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) _ASN_DECODE_STARVED; } ASN_DEBUG("Got value %ld + low %ld", value, ct->lower_bound); value += ct->lower_bound; if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(st, value) : asn_long2INTEGER(st, value)) _ASN_DECODE_FAILED; return rval; } } else { ASN_DEBUG("Decoding unconstrained integer %s", td->name); } /* X.691, #12.2.3, #12.2.4 */ do { ssize_t len; void *p; int ret; /* Get the PER length */ len = uper_get_length(pd, -1, &repeat); if(len < 0) _ASN_DECODE_STARVED; p = REALLOC(st->buf, st->size + len + 1); if(!p) _ASN_DECODE_FAILED; st->buf = (uint8_t *)p; ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); if(ret < 0) _ASN_DECODE_STARVED; st->size += len; } while(repeat); st->buf[st->size] = 0; /* JIC */ /* #12.2.3 */ if(ct && ct->lower_bound) { /* * TODO: replace by in-place arithmetics. */ long value; if(asn_INTEGER2long(st, &value)) _ASN_DECODE_FAILED; if(asn_long2INTEGER(st, value + ct->lower_bound)) _ASN_DECODE_FAILED; } return rval; } asn_enc_rval_t INTEGER_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; INTEGER_t *st = (INTEGER_t *)sptr; const uint8_t *buf; const uint8_t *end; asn_per_constraint_t *ct; long value = 0; if(!st || st->size == 0) _ASN_ENCODE_FAILED; if(!constraints) constraints = td->per_constraints; ct = constraints ? &constraints->value : 0; er.encoded = 0; if(ct) { int inext = 0; if(specs && specs->field_unsigned) { unsigned long uval; if(asn_INTEGER2ulong(st, &uval)) _ASN_ENCODE_FAILED; /* Check proper range */ if(ct->flags & APC_SEMI_CONSTRAINED) { if(uval < (unsigned long)ct->lower_bound) inext = 1; } else if(ct->range_bits >= 0) { if(uval < (unsigned long)ct->lower_bound || uval > (unsigned long)ct->upper_bound) inext = 1; } ASN_DEBUG("Value %lu (%02x/%d) lb %lu ub %lu %s", uval, st->buf[0], st->size, ct->lower_bound, ct->upper_bound, inext ? "ext" : "fix"); value = uval; } else { if(asn_INTEGER2long(st, &value)) _ASN_ENCODE_FAILED; /* Check proper range */ if(ct->flags & APC_SEMI_CONSTRAINED) { if(value < ct->lower_bound) inext = 1; } else if(ct->range_bits >= 0) { if(value < ct->lower_bound || value > ct->upper_bound) inext = 1; } ASN_DEBUG("Value %ld (%02x/%d) lb %ld ub %ld %s", value, st->buf[0], st->size, ct->lower_bound, ct->upper_bound, inext ? "ext" : "fix"); } if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, inext, 1)) _ASN_ENCODE_FAILED; if(inext) ct = 0; } else if(inext) { _ASN_ENCODE_FAILED; } } /* X.691, #12.2.2 */ if(ct && ct->range_bits >= 0) { /* #10.5.6 */ ASN_DEBUG("Encoding integer with range %d bits", ct->range_bits); if(ct->range_bits == 32) { /* TODO: extend to >32 bits */ long v = value - ct->lower_bound; if(per_put_few_bits(po, v >> 1, 31) || per_put_few_bits(po, v, 1)) _ASN_ENCODE_FAILED; } else { if(per_put_few_bits(po, value - ct->lower_bound, ct->range_bits)) _ASN_ENCODE_FAILED; } _ASN_ENCODED_OK(er); } if(ct && ct->lower_bound) { ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); /* TODO: adjust lower bound */ _ASN_ENCODE_FAILED; } for(buf = st->buf, end = st->buf + st->size; buf < end;) { ssize_t mayEncode = uper_put_length(po, end - buf); if(mayEncode < 0) _ASN_ENCODE_FAILED; if(per_put_many_bits(po, buf, 8 * mayEncode)) _ASN_ENCODE_FAILED; buf += mayEncode; } _ASN_ENCODED_OK(er); } int asn_INTEGER2long(const INTEGER_t *iptr, long *lptr) { uint8_t *b, *end; size_t size; long l; /* Sanity checking */ if(!iptr || !iptr->buf || !lptr) { errno = EINVAL; return -1; } /* Cache the begin/end of the buffer */ b = iptr->buf; /* Start of the INTEGER buffer */ size = iptr->size; end = b + size; /* Where to stop */ if(size > sizeof(long)) { uint8_t *end1 = end - 1; /* * Slightly more advanced processing, * able to >sizeof(long) bytes, * when the actual value is small * (0x0000000000abcdef would yield a fine 0x00abcdef) */ /* Skip out the insignificant leading bytes */ for(; b < end1; b++) { switch(*b) { case 0x00: if((b[1] & 0x80) == 0) continue; break; case 0xff: if((b[1] & 0x80) != 0) continue; break; } break; } size = end - b; if(size > sizeof(long)) { /* Still cannot fit the long */ errno = ERANGE; return -1; } } /* Shortcut processing of a corner case */ if(end == b) { *lptr = 0; return 0; } /* Perform the sign initialization */ /* Actually l = -(*b >> 7); gains nothing, yet unreadable! */ if((*b >> 7)) l = -1; else l = 0; /* Conversion engine */ for(; b < end; b++) l = (l << 8) | *b; *lptr = l; return 0; } int asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *lptr) { uint8_t *b, *end; unsigned long l; size_t size; if(!iptr || !iptr->buf || !lptr) { errno = EINVAL; return -1; } b = iptr->buf; size = iptr->size; end = b + size; /* If all extra leading bytes are zeroes, ignore them */ for(; size > sizeof(unsigned long); b++, size--) { if(*b) { /* Value won't fit unsigned long */ errno = ERANGE; return -1; } } /* Conversion engine */ for(l = 0; b < end; b++) l = (l << 8) | *b; *lptr = l; return 0; } int asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { uint8_t *buf; uint8_t *end; uint8_t *b; int shr; if(value <= LONG_MAX) return asn_long2INTEGER(st, value); buf = (uint8_t *)MALLOC(1 + sizeof(value)); if(!buf) return -1; end = buf + (sizeof(value) + 1); buf[0] = 0; for(b = buf + 1, shr = (sizeof(long)-1)*8; b < end; shr -= 8, b++) *b = (uint8_t)(value >> shr); if(st->buf) FREEMEM(st->buf); st->buf = buf; st->size = 1 + sizeof(value); return 0; } int asn_long2INTEGER(INTEGER_t *st, long value) { uint8_t *buf, *bp; uint8_t *p; uint8_t *pstart; uint8_t *pend1; int littleEndian = 1; /* Run-time detection */ int add; if(!st) { errno = EINVAL; return -1; } buf = (uint8_t *)MALLOC(sizeof(value)); if(!buf) return -1; if(*(char *)&littleEndian) { pstart = (uint8_t *)&value + sizeof(value) - 1; pend1 = (uint8_t *)&value; add = -1; } else { pstart = (uint8_t *)&value; pend1 = pstart + sizeof(value) - 1; add = 1; } /* * If the contents octet consists of more than one octet, * then bits of the first octet and bit 8 of the second octet: * a) shall not all be ones; and * b) shall not all be zero. */ for(p = pstart; p != pend1; p += add) { switch(*p) { case 0x00: if((*(p+add) & 0x80) == 0) continue; break; case 0xff: if((*(p+add) & 0x80)) continue; break; } break; } /* Copy the integer body */ for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) *bp++ = *p; if(st->buf) FREEMEM(st->buf); st->buf = buf; st->size = bp - buf; return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel5-MsrPosition-Req-Extension.c0000644000175000017500000000416312576764164025736 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel5-MsrPosition-Req-Extension.h" static asn_TYPE_member_t asn_MBR_Rel5_MsrPosition_Req_Extension_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Rel5_MsrPosition_Req_Extension, extended_reference), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Extended_reference, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extended-reference" }, }; static ber_tlv_tag_t asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel5_MsrPosition_Req_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* extended-reference at 1017 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel5_MsrPosition_Req_Extension_specs_1 = { sizeof(struct Rel5_MsrPosition_Req_Extension), offsetof(struct Rel5_MsrPosition_Req_Extension, _asn_ctx), asn_MAP_Rel5_MsrPosition_Req_Extension_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ 0, /* Start extensions */ 2 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel5_MsrPosition_Req_Extension = { "Rel5-MsrPosition-Req-Extension", "Rel5-MsrPosition-Req-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1, sizeof(asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1) /sizeof(asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1) /sizeof(asn_DEF_Rel5_MsrPosition_Req_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel5_MsrPosition_Req_Extension_1, 1, /* Elements count */ &asn_SPC_Rel5_MsrPosition_Req_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasurementWithID.h0000644000175000017500000000164312576764164024133 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MeasurementWithID_H_ #define _OTD_MeasurementWithID_H_ #include /* Including external dependencies */ #include "NeighborIdentity.h" #include "ModuloTimeSlot.h" #include "EOTDQuality.h" #include "OTDValue.h" #include #ifdef __cplusplus extern "C" { #endif /* OTD-MeasurementWithID */ typedef struct OTD_MeasurementWithID { NeighborIdentity_t neighborIdentity; ModuloTimeSlot_t nborTimeSlot; EOTDQuality_t eotdQuality; OTDValue_t otdValue; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MeasurementWithID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MeasurementWithID; #ifdef __cplusplus } #endif #endif /* _OTD_MeasurementWithID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSystemInfoAssistBTS.c0000644000175000017500000000352012576764164024736 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfSystemInfoAssistBTS.h" static asn_per_constraints_t asn_PER_type_SeqOfSystemInfoAssistBTS_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfSystemInfoAssistBTS_1[] = { { ATF_POINTER, 0, 0, -1 /* Ambiguous tag (CHOICE?) */, 0, &asn_DEF_SystemInfoAssistBTS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfSystemInfoAssistBTS_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfSystemInfoAssistBTS_specs_1 = { sizeof(struct SeqOfSystemInfoAssistBTS), offsetof(struct SeqOfSystemInfoAssistBTS, _asn_ctx), 2, /* XER encoding is XMLValueList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfSystemInfoAssistBTS = { "SeqOfSystemInfoAssistBTS", "SeqOfSystemInfoAssistBTS", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfSystemInfoAssistBTS_tags_1, sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_tags_1) /sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_tags_1[0]), /* 1 */ asn_DEF_SeqOfSystemInfoAssistBTS_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_tags_1) /sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfSystemInfoAssistBTS_constr_1, asn_MBR_SeqOfSystemInfoAssistBTS_1, 1, /* Single element */ &asn_SPC_SeqOfSystemInfoAssistBTS_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MethodType.c0000644000175000017500000000534612576764164022232 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MethodType.h" static asn_per_constraints_t asn_PER_type_MethodType_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_MethodType_1[] = { { ATF_NOFLAGS, 0, offsetof(struct MethodType, choice.msAssisted), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AccuracyOpt, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msAssisted" }, { ATF_NOFLAGS, 0, offsetof(struct MethodType, choice.msBased), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Accuracy, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msBased" }, { ATF_NOFLAGS, 0, offsetof(struct MethodType, choice.msBasedPref), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Accuracy, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msBasedPref" }, { ATF_NOFLAGS, 0, offsetof(struct MethodType, choice.msAssistedPref), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Accuracy, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msAssistedPref" }, }; static asn_TYPE_tag2member_t asn_MAP_MethodType_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* msAssisted at 117 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* msBased at 118 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* msBasedPref at 119 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* msAssistedPref at 121 */ }; static asn_CHOICE_specifics_t asn_SPC_MethodType_specs_1 = { sizeof(struct MethodType), offsetof(struct MethodType, _asn_ctx), offsetof(struct MethodType, present), sizeof(((struct MethodType *)0)->present), asn_MAP_MethodType_tag2el_1, 4, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_MethodType = { "MethodType", "MethodType", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_MethodType_constr_1, asn_MBR_MethodType_1, 4, /* Elements count */ &asn_SPC_MethodType_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceTime.c0000644000175000017500000000503512576764164022660 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceTime.h" static asn_TYPE_member_t asn_MBR_ReferenceTime_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ReferenceTime, gpsTime), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTime" }, { ATF_POINTER, 2, offsetof(struct ReferenceTime, gsmTime), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GSMTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gsmTime" }, { ATF_POINTER, 1, offsetof(struct ReferenceTime, gpsTowAssist), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSTOWAssist, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTowAssist" }, }; static int asn_MAP_ReferenceTime_oms_1[] = { 1, 2 }; static ber_tlv_tag_t asn_DEF_ReferenceTime_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ReferenceTime_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gpsTime at 586 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gsmTime at 587 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gpsTowAssist at 588 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ReferenceTime_specs_1 = { sizeof(struct ReferenceTime), offsetof(struct ReferenceTime, _asn_ctx), asn_MAP_ReferenceTime_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_ReferenceTime_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ReferenceTime = { "ReferenceTime", "ReferenceTime", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ReferenceTime_tags_1, sizeof(asn_DEF_ReferenceTime_tags_1) /sizeof(asn_DEF_ReferenceTime_tags_1[0]), /* 1 */ asn_DEF_ReferenceTime_tags_1, /* Same as above */ sizeof(asn_DEF_ReferenceTime_tags_1) /sizeof(asn_DEF_ReferenceTime_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ReferenceTime_1, 3, /* Elements count */ &asn_SPC_ReferenceTime_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSReferenceTimeUncertainty.h0000644000175000017500000000217412576764164025466 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSReferenceTimeUncertainty_H_ #define _GPSReferenceTimeUncertainty_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GPSReferenceTimeUncertainty */ typedef long GPSReferenceTimeUncertainty_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSReferenceTimeUncertainty; asn_struct_free_f GPSReferenceTimeUncertainty_free; asn_struct_print_f GPSReferenceTimeUncertainty_print; asn_constr_check_f GPSReferenceTimeUncertainty_constraint; ber_type_decoder_f GPSReferenceTimeUncertainty_decode_ber; der_type_encoder_f GPSReferenceTimeUncertainty_encode_der; xer_type_decoder_f GPSReferenceTimeUncertainty_decode_xer; xer_type_encoder_f GPSReferenceTimeUncertainty_encode_xer; per_type_decoder_f GPSReferenceTimeUncertainty_decode_uper; per_type_encoder_f GPSReferenceTimeUncertainty_encode_uper; #ifdef __cplusplus } #endif #endif /* _GPSReferenceTimeUncertainty_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefLocation.c0000644000175000017500000000353212576764164023144 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSRefLocation.h" static asn_TYPE_member_t asn_MBR_GANSSRefLocation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSRefLocation, threeDLocation), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Ext_GeographicalInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "threeDLocation" }, }; static ber_tlv_tag_t asn_DEF_GANSSRefLocation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSRefLocation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* threeDLocation at 1132 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSRefLocation_specs_1 = { sizeof(struct GANSSRefLocation), offsetof(struct GANSSRefLocation, _asn_ctx), asn_MAP_GANSSRefLocation_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSRefLocation = { "GANSSRefLocation", "GANSSRefLocation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSRefLocation_tags_1, sizeof(asn_DEF_GANSSRefLocation_tags_1) /sizeof(asn_DEF_GANSSRefLocation_tags_1[0]), /* 1 */ asn_DEF_GANSSRefLocation_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSRefLocation_tags_1) /sizeof(asn_DEF_GANSSRefLocation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSRefLocation_1, 1, /* Elements count */ &asn_SPC_GANSSRefLocation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSMeasureInfo.h0000644000175000017500000000135712576764164023164 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSMeasureInfo_H_ #define _GANSSMeasureInfo_H_ #include /* Including external dependencies */ #include "SeqOfGANSS-MsrSetElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSMeasureInfo */ typedef struct GANSSMeasureInfo { SeqOfGANSS_MsrSetElement_t ganssMsrSetList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSMeasureInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSMeasureInfo; #ifdef __cplusplus } #endif #endif /* _GANSSMeasureInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TA1.h0000644000175000017500000000142412576764164020533 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TA1_H_ #define _TA1_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TA1 */ typedef long TA1_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TA1; asn_struct_free_f TA1_free; asn_struct_print_f TA1_print; asn_constr_check_f TA1_constraint; ber_type_decoder_f TA1_decode_ber; der_type_encoder_f TA1_encode_der; xer_type_decoder_f TA1_decode_xer; xer_type_encoder_f TA1_encode_xer; per_type_decoder_f TA1_decode_uper; per_type_encoder_f TA1_encode_uper; #ifdef __cplusplus } #endif #endif /* _TA1_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BTSPosition.h0000644000175000017500000000166312576764164022330 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _BTSPosition_H_ #define _BTSPosition_H_ #include /* Including external dependencies */ #include "Ext-GeographicalInformation.h" #ifdef __cplusplus extern "C" { #endif /* BTSPosition */ typedef Ext_GeographicalInformation_t BTSPosition_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_BTSPosition; asn_struct_free_f BTSPosition_free; asn_struct_print_f BTSPosition_print; asn_constr_check_f BTSPosition_constraint; ber_type_decoder_f BTSPosition_decode_ber; der_type_encoder_f BTSPosition_encode_der; xer_type_decoder_f BTSPosition_decode_xer; xer_type_encoder_f BTSPosition_encode_xer; per_type_decoder_f BTSPosition_decode_uper; per_type_encoder_f BTSPosition_encode_uper; #ifdef __cplusplus } #endif #endif /* _BTSPosition_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GSMTime.c0000644000175000017500000000600012576764164021401 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GSMTime.h" static asn_TYPE_member_t asn_MBR_GSMTime_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GSMTime, bcchCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BCCHCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bcchCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct GSMTime, bsic), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSIC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsic" }, { ATF_NOFLAGS, 0, offsetof(struct GSMTime, frameNumber), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FrameNumber, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "frameNumber" }, { ATF_NOFLAGS, 0, offsetof(struct GSMTime, timeSlot), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeSlot, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeSlot" }, { ATF_NOFLAGS, 0, offsetof(struct GSMTime, bitNumber), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BitNumber, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bitNumber" }, }; static ber_tlv_tag_t asn_DEF_GSMTime_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GSMTime_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bcchCarrier at 630 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bsic at 631 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* frameNumber at 632 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* timeSlot at 633 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* bitNumber at 635 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GSMTime_specs_1 = { sizeof(struct GSMTime), offsetof(struct GSMTime, _asn_ctx), asn_MAP_GSMTime_tag2el_1, 5, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GSMTime = { "GSMTime", "GSMTime", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GSMTime_tags_1, sizeof(asn_DEF_GSMTime_tags_1) /sizeof(asn_DEF_GSMTime_tags_1[0]), /* 1 */ asn_DEF_GSMTime_tags_1, /* Same as above */ sizeof(asn_DEF_GSMTime_tags_1) /sizeof(asn_DEF_GSMTime_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GSMTime_1, 5, /* Elements count */ &asn_SPC_GSMTime_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGPS-MsrSetElement.c0000644000175000017500000000346312576764164024262 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGPS-MsrSetElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGPS_MsrSetElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGPS_MsrSetElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GPS_MsrSetElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGPS_MsrSetElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGPS_MsrSetElement_specs_1 = { sizeof(struct SeqOfGPS_MsrSetElement), offsetof(struct SeqOfGPS_MsrSetElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGPS_MsrSetElement = { "SeqOfGPS-MsrSetElement", "SeqOfGPS-MsrSetElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGPS_MsrSetElement_tags_1, sizeof(asn_DEF_SeqOfGPS_MsrSetElement_tags_1) /sizeof(asn_DEF_SeqOfGPS_MsrSetElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGPS_MsrSetElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGPS_MsrSetElement_tags_1) /sizeof(asn_DEF_SeqOfGPS_MsrSetElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGPS_MsrSetElement_constr_1, asn_MBR_SeqOfGPS_MsrSetElement_1, 1, /* Single element */ &asn_SPC_SeqOfGPS_MsrSetElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ReferenceWGS84.c0000644000175000017500000000512712576764164022600 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ReferenceWGS84.h" static asn_TYPE_member_t asn_MBR_ReferenceWGS84_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ReferenceWGS84, relativeNorth), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RelDistance, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "relativeNorth" }, { ATF_NOFLAGS, 0, offsetof(struct ReferenceWGS84, relativeEast), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RelDistance, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "relativeEast" }, { ATF_POINTER, 1, offsetof(struct ReferenceWGS84, relativeAlt), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RelativeAlt, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "relativeAlt" }, }; static int asn_MAP_ReferenceWGS84_oms_1[] = { 2 }; static ber_tlv_tag_t asn_DEF_ReferenceWGS84_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ReferenceWGS84_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* relativeNorth at 247 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* relativeEast at 248 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* relativeAlt at 250 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ReferenceWGS84_specs_1 = { sizeof(struct ReferenceWGS84), offsetof(struct ReferenceWGS84, _asn_ctx), asn_MAP_ReferenceWGS84_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_ReferenceWGS84_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ReferenceWGS84 = { "ReferenceWGS84", "ReferenceWGS84", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ReferenceWGS84_tags_1, sizeof(asn_DEF_ReferenceWGS84_tags_1) /sizeof(asn_DEF_ReferenceWGS84_tags_1[0]), /* 1 */ asn_DEF_ReferenceWGS84_tags_1, /* Same as above */ sizeof(asn_DEF_ReferenceWGS84_tags_1) /sizeof(asn_DEF_ReferenceWGS84_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ReferenceWGS84_1, 3, /* Elements count */ &asn_SPC_ReferenceWGS84_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSOrbitModel.c0000644000175000017500000000342312576764164022776 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSOrbitModel.h" static asn_per_constraints_t asn_PER_type_GANSSOrbitModel_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSOrbitModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSOrbitModel, choice.keplerianSet), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NavModel_KeplerianSet, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "keplerianSet" }, }; static asn_TYPE_tag2member_t asn_MAP_GANSSOrbitModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* keplerianSet at 1248 */ }; static asn_CHOICE_specifics_t asn_SPC_GANSSOrbitModel_specs_1 = { sizeof(struct GANSSOrbitModel), offsetof(struct GANSSOrbitModel, _asn_ctx), offsetof(struct GANSSOrbitModel, present), sizeof(((struct GANSSOrbitModel *)0)->present), asn_MAP_GANSSOrbitModel_tag2el_1, 1, /* Count of tags in the map */ 0, 1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_GANSSOrbitModel = { "GANSSOrbitModel", "GANSSOrbitModel", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_GANSSOrbitModel_constr_1, asn_MBR_GANSSOrbitModel_1, 1, /* Elements count */ &asn_SPC_GANSSOrbitModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSystemInfoAssistBTS-R98-ExpOTD.c0000644000175000017500000000405412576764164026422 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfSystemInfoAssistBTS-R98-ExpOTD.h" static asn_per_constraints_t asn_PER_type_SeqOfSystemInfoAssistBTS_R98_ExpOTD_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfSystemInfoAssistBTS_R98_ExpOTD_1[] = { { ATF_POINTER, 0, 0, -1 /* Ambiguous tag (CHOICE?) */, 0, &asn_DEF_SystemInfoAssistBTS_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfSystemInfoAssistBTS_R98_ExpOTD_specs_1 = { sizeof(struct SeqOfSystemInfoAssistBTS_R98_ExpOTD), offsetof(struct SeqOfSystemInfoAssistBTS_R98_ExpOTD, _asn_ctx), 2, /* XER encoding is XMLValueList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD = { "SeqOfSystemInfoAssistBTS-R98-ExpOTD", "SeqOfSystemInfoAssistBTS-R98-ExpOTD", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1, sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1) /sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1) /sizeof(asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfSystemInfoAssistBTS_R98_ExpOTD_constr_1, asn_MBR_SeqOfSystemInfoAssistBTS_R98_ExpOTD_1, 1, /* Single element */ &asn_SPC_SeqOfSystemInfoAssistBTS_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrPosition-Req.h0000644000175000017500000000333712576764164023166 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MsrPosition_Req_H_ #define _MsrPosition_Req_H_ #include /* Including external dependencies */ #include "PositionInstruct.h" #include "ExtensionContainer.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct ReferenceAssistData; struct MsrAssistData; struct SystemInfoAssistData; struct GPS_AssistData; struct Rel98_MsrPosition_Req_Extension; struct Rel5_MsrPosition_Req_Extension; /* MsrPosition-Req */ typedef struct MsrPosition_Req { PositionInstruct_t positionInstruct; struct ReferenceAssistData *referenceAssistData /* OPTIONAL */; struct MsrAssistData *msrAssistData /* OPTIONAL */; struct SystemInfoAssistData *systemInfoAssistData /* OPTIONAL */; struct GPS_AssistData *gps_AssistData /* OPTIONAL */; ExtensionContainer_t *extensionContainer /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ struct Rel98_MsrPosition_Req_Extension *rel98_MsrPosition_Req_extension /* OPTIONAL */; struct Rel5_MsrPosition_Req_Extension *rel5_MsrPosition_Req_extension /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MsrPosition_Req_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MsrPosition_Req; #ifdef __cplusplus } #endif /* Referred external types */ #include "ReferenceAssistData.h" #include "MsrAssistData.h" #include "SystemInfoAssistData.h" #include "GPS-AssistData.h" #include "Rel98-MsrPosition-Req-Extension.h" #include "Rel5-MsrPosition-Req-Extension.h" #endif /* _MsrPosition_Req_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementRest.h0000644000175000017500000000231212576764164023500 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MsrElementRest_H_ #define _OTD_MsrElementRest_H_ #include /* Including external dependencies */ #include #include "ModuloTimeSlot.h" #include "StdResolution.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct TOA_MeasurementsOfRef; struct SeqOfOTD_MsrsOfOtherSets; /* OTD-MsrElementRest */ typedef struct OTD_MsrElementRest { long refFrameNumber; ModuloTimeSlot_t referenceTimeSlot; struct TOA_MeasurementsOfRef *toaMeasurementsOfRef /* OPTIONAL */; StdResolution_t stdResolution; long *taCorrection /* OPTIONAL */; struct SeqOfOTD_MsrsOfOtherSets *otd_MsrsOfOtherSets /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MsrElementRest_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MsrElementRest; #ifdef __cplusplus } #endif /* Referred external types */ #include "TOA-MeasurementsOfRef.h" #include "SeqOfOTD-MsrsOfOtherSets.h" #endif /* _OTD_MsrElementRest_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOf-BadSatelliteSet.h0000644000175000017500000000143312576764164024172 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOf_BadSatelliteSet_H_ #define _SeqOf_BadSatelliteSet_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* SeqOf-BadSatelliteSet */ typedef struct SeqOf_BadSatelliteSet { A_SEQUENCE_OF(SatelliteID_t) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOf_BadSatelliteSet_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOf_BadSatelliteSet; #ifdef __cplusplus } #endif #endif /* _SeqOf_BadSatelliteSet_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistBTS-R98-ExpOTD.h0000644000175000017500000000233512576764164025471 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SystemInfoAssistBTS_R98_ExpOTD_H_ #define _SystemInfoAssistBTS_R98_ExpOTD_H_ #include /* Including external dependencies */ #include #include "AssistBTSData-R98-ExpOTD.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum SystemInfoAssistBTS_R98_ExpOTD_PR { SystemInfoAssistBTS_R98_ExpOTD_PR_NOTHING, /* No components present */ SystemInfoAssistBTS_R98_ExpOTD_PR_notPresent, SystemInfoAssistBTS_R98_ExpOTD_PR_present } SystemInfoAssistBTS_R98_ExpOTD_PR; /* SystemInfoAssistBTS-R98-ExpOTD */ typedef struct SystemInfoAssistBTS_R98_ExpOTD { SystemInfoAssistBTS_R98_ExpOTD_PR present; union SystemInfoAssistBTS_R98_ExpOTD_u { NULL_t notPresent; AssistBTSData_R98_ExpOTD_t present; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SystemInfoAssistBTS_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistBTS_R98_ExpOTD; #ifdef __cplusplus } #endif #endif /* _SystemInfoAssistBTS_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSystemInfoAssistBTS.h0000644000175000017500000000163412576764164024747 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfSystemInfoAssistBTS_H_ #define _SeqOfSystemInfoAssistBTS_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SystemInfoAssistBTS; /* SeqOfSystemInfoAssistBTS */ typedef struct SeqOfSystemInfoAssistBTS { A_SEQUENCE_OF(struct SystemInfoAssistBTS) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfSystemInfoAssistBTS_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfSystemInfoAssistBTS; #ifdef __cplusplus } #endif /* Referred external types */ #include "SystemInfoAssistBTS.h" #endif /* _SeqOfSystemInfoAssistBTS_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-FirstSetMsrs.c0000644000175000017500000000344112576764164024134 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfOTD-FirstSetMsrs.h" static asn_per_constraints_t asn_PER_type_SeqOfOTD_FirstSetMsrs_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 10 } /* (SIZE(1..10)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfOTD_FirstSetMsrs_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_OTD_FirstSetMsrs, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfOTD_FirstSetMsrs_specs_1 = { sizeof(struct SeqOfOTD_FirstSetMsrs), offsetof(struct SeqOfOTD_FirstSetMsrs, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_FirstSetMsrs = { "SeqOfOTD-FirstSetMsrs", "SeqOfOTD-FirstSetMsrs", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1, sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1) /sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1[0]), /* 1 */ asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1) /sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfOTD_FirstSetMsrs_constr_1, asn_MBR_SeqOfOTD_FirstSetMsrs_1, 1, /* Single element */ &asn_SPC_SeqOfOTD_FirstSetMsrs_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ExpOTDUncertainty.c0000644000175000017500000001152312576764164023473 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ExpOTDUncertainty.h" int ExpOTDUncertainty_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void ExpOTDUncertainty_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void ExpOTDUncertainty_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int ExpOTDUncertainty_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t ExpOTDUncertainty_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t ExpOTDUncertainty_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t ExpOTDUncertainty_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t ExpOTDUncertainty_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t ExpOTDUncertainty_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t ExpOTDUncertainty_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ExpOTDUncertainty_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_ExpOTDUncertainty_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_ExpOTDUncertainty_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ExpOTDUncertainty = { "ExpOTDUncertainty", "ExpOTDUncertainty", ExpOTDUncertainty_free, ExpOTDUncertainty_print, ExpOTDUncertainty_constraint, ExpOTDUncertainty_decode_ber, ExpOTDUncertainty_encode_der, ExpOTDUncertainty_decode_xer, ExpOTDUncertainty_encode_xer, ExpOTDUncertainty_decode_uper, ExpOTDUncertainty_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ExpOTDUncertainty_tags_1, sizeof(asn_DEF_ExpOTDUncertainty_tags_1) /sizeof(asn_DEF_ExpOTDUncertainty_tags_1[0]), /* 1 */ asn_DEF_ExpOTDUncertainty_tags_1, /* Same as above */ sizeof(asn_DEF_ExpOTDUncertainty_tags_1) /sizeof(asn_DEF_ExpOTDUncertainty_tags_1[0]), /* 1 */ &asn_PER_type_ExpOTDUncertainty_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CalcAssistanceBTS.h0000644000175000017500000000141312576764164023375 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _CalcAssistanceBTS_H_ #define _CalcAssistanceBTS_H_ #include /* Including external dependencies */ #include "FineRTD.h" #include "ReferenceWGS84.h" #include #ifdef __cplusplus extern "C" { #endif /* CalcAssistanceBTS */ typedef struct CalcAssistanceBTS { FineRTD_t fineRTD; ReferenceWGS84_t referenceWGS84; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } CalcAssistanceBTS_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CalcAssistanceBTS; #ifdef __cplusplus } #endif #endif /* _CalcAssistanceBTS_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NavModel-KeplerianSet.c0000644000175000017500000004575212576764164024246 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "NavModel-KeplerianSet.h" static int memb_keplerToeLSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 511)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerW_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerDeltaN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerM0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerOmegaDot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerELSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 33554431)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerIDot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8192 && value <= 8191)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerAPowerHalfLSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 67108863)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerI0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerOmega0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerCrs_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerCis_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerCus_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerCrc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerCic_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_keplerCuc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_keplerToeLSB_constr_2 = { { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerW_constr_3 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerDeltaN_constr_4 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerM0_constr_5 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerOmegaDot_constr_6 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerELSB_constr_7 = { { APC_CONSTRAINED, 25, -1, 0, 33554431 } /* (0..33554431) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerIDot_constr_8 = { { APC_CONSTRAINED, 14, 14, -8192, 8191 } /* (-8192..8191) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerAPowerHalfLSB_constr_9 = { { APC_CONSTRAINED, 26, -1, 0, 67108863 } /* (0..67108863) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerI0_constr_10 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerOmega0_constr_11 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerCrs_constr_12 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerCis_constr_13 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerCus_constr_14 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerCrc_constr_15 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerCic_constr_16 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_keplerCuc_constr_17 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_NavModel_KeplerianSet_1[] = { { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerToeLSB), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerToeLSB_constraint_1, &asn_PER_memb_keplerToeLSB_constr_2, 0, "keplerToeLSB" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerW), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerW_constraint_1, &asn_PER_memb_keplerW_constr_3, 0, "keplerW" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerDeltaN), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerDeltaN_constraint_1, &asn_PER_memb_keplerDeltaN_constr_4, 0, "keplerDeltaN" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerM0), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerM0_constraint_1, &asn_PER_memb_keplerM0_constr_5, 0, "keplerM0" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerOmegaDot), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerOmegaDot_constraint_1, &asn_PER_memb_keplerOmegaDot_constr_6, 0, "keplerOmegaDot" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerELSB), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerELSB_constraint_1, &asn_PER_memb_keplerELSB_constr_7, 0, "keplerELSB" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerIDot), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerIDot_constraint_1, &asn_PER_memb_keplerIDot_constr_8, 0, "keplerIDot" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerAPowerHalfLSB), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerAPowerHalfLSB_constraint_1, &asn_PER_memb_keplerAPowerHalfLSB_constr_9, 0, "keplerAPowerHalfLSB" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerI0), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerI0_constraint_1, &asn_PER_memb_keplerI0_constr_10, 0, "keplerI0" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerOmega0), (ASN_TAG_CLASS_CONTEXT | (9 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerOmega0_constraint_1, &asn_PER_memb_keplerOmega0_constr_11, 0, "keplerOmega0" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerCrs), (ASN_TAG_CLASS_CONTEXT | (10 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerCrs_constraint_1, &asn_PER_memb_keplerCrs_constr_12, 0, "keplerCrs" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerCis), (ASN_TAG_CLASS_CONTEXT | (11 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerCis_constraint_1, &asn_PER_memb_keplerCis_constr_13, 0, "keplerCis" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerCus), (ASN_TAG_CLASS_CONTEXT | (12 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerCus_constraint_1, &asn_PER_memb_keplerCus_constr_14, 0, "keplerCus" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerCrc), (ASN_TAG_CLASS_CONTEXT | (13 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerCrc_constraint_1, &asn_PER_memb_keplerCrc_constr_15, 0, "keplerCrc" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerCic), (ASN_TAG_CLASS_CONTEXT | (14 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerCic_constraint_1, &asn_PER_memb_keplerCic_constr_16, 0, "keplerCic" }, { ATF_NOFLAGS, 0, offsetof(struct NavModel_KeplerianSet, keplerCuc), (ASN_TAG_CLASS_CONTEXT | (15 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_keplerCuc_constraint_1, &asn_PER_memb_keplerCuc_constr_17, 0, "keplerCuc" }, }; static ber_tlv_tag_t asn_DEF_NavModel_KeplerianSet_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_NavModel_KeplerianSet_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* keplerToeLSB at 1254 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* keplerW at 1255 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* keplerDeltaN at 1256 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* keplerM0 at 1257 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* keplerOmegaDot at 1258 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* keplerELSB at 1259 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* keplerIDot at 1260 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* keplerAPowerHalfLSB at 1261 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* keplerI0 at 1262 */ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* keplerOmega0 at 1263 */ { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* keplerCrs at 1264 */ { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* keplerCis at 1265 */ { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* keplerCus at 1266 */ { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* keplerCrc at 1267 */ { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* keplerCic at 1268 */ { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 } /* keplerCuc at 1269 */ }; static asn_SEQUENCE_specifics_t asn_SPC_NavModel_KeplerianSet_specs_1 = { sizeof(struct NavModel_KeplerianSet), offsetof(struct NavModel_KeplerianSet, _asn_ctx), asn_MAP_NavModel_KeplerianSet_tag2el_1, 16, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_NavModel_KeplerianSet = { "NavModel-KeplerianSet", "NavModel-KeplerianSet", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NavModel_KeplerianSet_tags_1, sizeof(asn_DEF_NavModel_KeplerianSet_tags_1) /sizeof(asn_DEF_NavModel_KeplerianSet_tags_1[0]), /* 1 */ asn_DEF_NavModel_KeplerianSet_tags_1, /* Same as above */ sizeof(asn_DEF_NavModel_KeplerianSet_tags_1) /sizeof(asn_DEF_NavModel_KeplerianSet_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_NavModel_KeplerianSet_1, 16, /* Elements count */ &asn_SPC_NavModel_KeplerianSet_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/IonosphericModel.c0000644000175000017500000002320612576764164023406 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "IonosphericModel.h" static int memb_alfa0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_alfa1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_alfa2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_alfa3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_beta0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_beta1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_beta2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_beta3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_alfa0_constr_2 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_alfa1_constr_3 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_alfa2_constr_4 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_alfa3_constr_5 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_beta0_constr_6 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_beta1_constr_7 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_beta2_constr_8 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_beta3_constr_9 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_IonosphericModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, alfa0), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_alfa0_constraint_1, &asn_PER_memb_alfa0_constr_2, 0, "alfa0" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, alfa1), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_alfa1_constraint_1, &asn_PER_memb_alfa1_constr_3, 0, "alfa1" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, alfa2), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_alfa2_constraint_1, &asn_PER_memb_alfa2_constr_4, 0, "alfa2" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, alfa3), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_alfa3_constraint_1, &asn_PER_memb_alfa3_constr_5, 0, "alfa3" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, beta0), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_beta0_constraint_1, &asn_PER_memb_beta0_constr_6, 0, "beta0" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, beta1), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_beta1_constraint_1, &asn_PER_memb_beta1_constr_7, 0, "beta1" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, beta2), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_beta2_constraint_1, &asn_PER_memb_beta2_constr_8, 0, "beta2" }, { ATF_NOFLAGS, 0, offsetof(struct IonosphericModel, beta3), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_beta3_constraint_1, &asn_PER_memb_beta3_constr_9, 0, "beta3" }, }; static ber_tlv_tag_t asn_DEF_IonosphericModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_IonosphericModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* alfa0 at 763 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* alfa1 at 764 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* alfa2 at 765 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* alfa3 at 766 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* beta0 at 767 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* beta1 at 768 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* beta2 at 769 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* beta3 at 770 */ }; static asn_SEQUENCE_specifics_t asn_SPC_IonosphericModel_specs_1 = { sizeof(struct IonosphericModel), offsetof(struct IonosphericModel, _asn_ctx), asn_MAP_IonosphericModel_tag2el_1, 8, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_IonosphericModel = { "IonosphericModel", "IonosphericModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_IonosphericModel_tags_1, sizeof(asn_DEF_IonosphericModel_tags_1) /sizeof(asn_DEF_IonosphericModel_tags_1[0]), /* 1 */ asn_DEF_IonosphericModel_tags_1, /* Same as above */ sizeof(asn_DEF_IonosphericModel_tags_1) /sizeof(asn_DEF_IonosphericModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_IonosphericModel_1, 8, /* Elements count */ &asn_SPC_IonosphericModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AssistBTSData-R98-ExpOTD.c0000644000175000017500000000456212576764164024241 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AssistBTSData-R98-ExpOTD.h" static asn_TYPE_member_t asn_MBR_AssistBTSData_R98_ExpOTD_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AssistBTSData_R98_ExpOTD, expectedOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExpectedOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "expectedOTD" }, { ATF_NOFLAGS, 0, offsetof(struct AssistBTSData_R98_ExpOTD, expOTDuncertainty), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExpOTDUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "expOTDuncertainty" }, }; static ber_tlv_tag_t asn_DEF_AssistBTSData_R98_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AssistBTSData_R98_ExpOTD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* expectedOTD at 933 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* expOTDuncertainty at 935 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AssistBTSData_R98_ExpOTD_specs_1 = { sizeof(struct AssistBTSData_R98_ExpOTD), offsetof(struct AssistBTSData_R98_ExpOTD, _asn_ctx), asn_MAP_AssistBTSData_R98_ExpOTD_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AssistBTSData_R98_ExpOTD = { "AssistBTSData-R98-ExpOTD", "AssistBTSData-R98-ExpOTD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AssistBTSData_R98_ExpOTD_tags_1, sizeof(asn_DEF_AssistBTSData_R98_ExpOTD_tags_1) /sizeof(asn_DEF_AssistBTSData_R98_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_AssistBTSData_R98_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_AssistBTSData_R98_ExpOTD_tags_1) /sizeof(asn_DEF_AssistBTSData_R98_ExpOTD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AssistBTSData_R98_ExpOTD_1, 2, /* Elements count */ &asn_SPC_AssistBTSData_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSDataBit.h0000644000175000017500000000163312576764164022254 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSDataBit_H_ #define _GANSSDataBit_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GANSSDataBit */ typedef long GANSSDataBit_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSDataBit; asn_struct_free_f GANSSDataBit_free; asn_struct_print_f GANSSDataBit_print; asn_constr_check_f GANSSDataBit_constraint; ber_type_decoder_f GANSSDataBit_decode_ber; der_type_encoder_f GANSSDataBit_encode_der; xer_type_decoder_f GANSSDataBit_decode_xer; xer_type_encoder_f GANSSDataBit_encode_xer; per_type_decoder_f GANSSDataBit_decode_uper; per_type_encoder_f GANSSDataBit_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSDataBit_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelativeAlt.c0000644000175000017500000001117112576764164022355 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RelativeAlt.h" int RelativeAlt_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -4000 && value <= 4000)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void RelativeAlt_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void RelativeAlt_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { RelativeAlt_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int RelativeAlt_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t RelativeAlt_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t RelativeAlt_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t RelativeAlt_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t RelativeAlt_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t RelativeAlt_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t RelativeAlt_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { RelativeAlt_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_RelativeAlt_constr_1 = { { APC_CONSTRAINED, 13, 13, -4000, 4000 } /* (-4000..4000) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_RelativeAlt_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_RelativeAlt = { "RelativeAlt", "RelativeAlt", RelativeAlt_free, RelativeAlt_print, RelativeAlt_constraint, RelativeAlt_decode_ber, RelativeAlt_encode_der, RelativeAlt_decode_xer, RelativeAlt_encode_xer, RelativeAlt_decode_uper, RelativeAlt_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RelativeAlt_tags_1, sizeof(asn_DEF_RelativeAlt_tags_1) /sizeof(asn_DEF_RelativeAlt_tags_1[0]), /* 1 */ asn_DEF_RelativeAlt_tags_1, /* Same as above */ sizeof(asn_DEF_RelativeAlt_tags_1) /sizeof(asn_DEF_RelativeAlt_tags_1[0]), /* 1 */ &asn_PER_type_RelativeAlt_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistBTS-R98-ExpOTD.h0000644000175000017500000000151212576764164024126 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MsrAssistBTS_R98_ExpOTD_H_ #define _MsrAssistBTS_R98_ExpOTD_H_ #include /* Including external dependencies */ #include "ExpectedOTD.h" #include "ExpOTDUncertainty.h" #include #ifdef __cplusplus extern "C" { #endif /* MsrAssistBTS-R98-ExpOTD */ typedef struct MsrAssistBTS_R98_ExpOTD { ExpectedOTD_t expectedOTD; ExpOTDUncertainty_t expOTDUncertainty; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MsrAssistBTS_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MsrAssistBTS_R98_ExpOTD; #ifdef __cplusplus } #endif #endif /* _MsrAssistBTS_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeSlot.c0000644000175000017500000001075312576764164021706 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TimeSlot.h" int TimeSlot_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TimeSlot_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TimeSlot_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TimeSlot_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TimeSlot_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TimeSlot_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TimeSlot_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TimeSlot_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TimeSlot_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TimeSlot_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TimeSlot_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TimeSlot_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TimeSlot_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TimeSlot_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TimeSlot = { "TimeSlot", "TimeSlot", TimeSlot_free, TimeSlot_print, TimeSlot_constraint, TimeSlot_decode_ber, TimeSlot_encode_der, TimeSlot_decode_xer, TimeSlot_encode_xer, TimeSlot_decode_uper, TimeSlot_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TimeSlot_tags_1, sizeof(asn_DEF_TimeSlot_tags_1) /sizeof(asn_DEF_TimeSlot_tags_1[0]), /* 1 */ asn_DEF_TimeSlot_tags_1, /* Same as above */ sizeof(asn_DEF_TimeSlot_tags_1) /sizeof(asn_DEF_TimeSlot_tags_1[0]), /* 1 */ &asn_PER_type_TimeSlot_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocationInfo.c0000644000175000017500000001037212576764164022527 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "LocationInfo.h" static int memb_refFrame_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_gpsTOW_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 14399999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refFrame_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_gpsTOW_constr_3 = { { APC_CONSTRAINED, 24, -1, 0, 14399999 } /* (0..14399999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_LocationInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct LocationInfo, refFrame), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refFrame_constraint_1, &asn_PER_memb_refFrame_constr_2, 0, "refFrame" }, { ATF_POINTER, 1, offsetof(struct LocationInfo, gpsTOW), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gpsTOW_constraint_1, &asn_PER_memb_gpsTOW_constr_3, 0, "gpsTOW" }, { ATF_NOFLAGS, 0, offsetof(struct LocationInfo, fixType), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FixType, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fixType" }, { ATF_NOFLAGS, 0, offsetof(struct LocationInfo, posEstimate), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Ext_GeographicalInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "posEstimate" }, }; static int asn_MAP_LocationInfo_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_LocationInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_LocationInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refFrame at 420 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gpsTOW at 423 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* fixType at 424 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* posEstimate at 432 */ }; static asn_SEQUENCE_specifics_t asn_SPC_LocationInfo_specs_1 = { sizeof(struct LocationInfo), offsetof(struct LocationInfo, _asn_ctx), asn_MAP_LocationInfo_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_LocationInfo_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_LocationInfo = { "LocationInfo", "LocationInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_LocationInfo_tags_1, sizeof(asn_DEF_LocationInfo_tags_1) /sizeof(asn_DEF_LocationInfo_tags_1[0]), /* 1 */ asn_DEF_LocationInfo_tags_1, /* Same as above */ sizeof(asn_DEF_LocationInfo_tags_1) /sizeof(asn_DEF_LocationInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_LocationInfo_1, 4, /* Elements count */ &asn_SPC_LocationInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CellID.h0000644000175000017500000000150112576764164021236 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _CellID_H_ #define _CellID_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* CellID */ typedef long CellID_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_CellID; asn_struct_free_f CellID_free; asn_struct_print_f CellID_print; asn_constr_check_f CellID_constraint; ber_type_decoder_f CellID_decode_ber; der_type_encoder_f CellID_encode_der; xer_type_decoder_f CellID_decode_xer; xer_type_encoder_f CellID_encode_xer; per_type_decoder_f CellID_decode_uper; per_type_encoder_f CellID_encode_uper; #ifdef __cplusplus } #endif #endif /* _CellID_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_application.h0000644000175000017500000000271612576764164023317 0ustar carlescarles/*- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Application-level ASN.1 callbacks. */ #ifndef _ASN_APPLICATION_H_ #define _ASN_APPLICATION_H_ #include "asn_system.h" /* for platform-dependent types */ #include "asn_codecs.h" /* for ASN.1 codecs specifics */ #ifdef __cplusplus extern "C" { #endif /* * Generic type of an application-defined callback to return various * types of data to the application. * EXPECTED RETURN VALUES: * -1: Failed to consume bytes. Abort the mission. * Non-negative return values indicate success, and ignored. */ typedef int (asn_app_consume_bytes_f)(const void *buffer, size_t size, void *application_specific_key); /* * A callback of this type is called whenever constraint validation fails * on some ASN.1 type. See "constraints.h" for more details on constraint * validation. * This callback specifies a descriptor of the ASN.1 type which failed * the constraint check, as well as human readable message on what * particular constraint has failed. */ typedef void (asn_app_constraint_failed_f)(void *application_specific_key, struct asn_TYPE_descriptor_s *type_descriptor_which_failed, const void *structure_which_failed_ptr, const char *error_message_format, ...) GCC_PRINTFLIKE(4, 5); #ifdef __cplusplus } #endif #include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ #endif /* _ASN_APPLICATION_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FixType.h0000644000175000017500000000166512576764164021545 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _FixType_H_ #define _FixType_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum FixType { FixType_twoDFix = 0, FixType_threeDFix = 1 } e_FixType; /* FixType */ typedef long FixType_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FixType; asn_struct_free_f FixType_free; asn_struct_print_f FixType_print; asn_constr_check_f FixType_constraint; ber_type_decoder_f FixType_decode_ber; der_type_encoder_f FixType_encode_der; xer_type_decoder_f FixType_decode_xer; xer_type_encoder_f FixType_encode_xer; per_type_decoder_f FixType_decode_uper; per_type_encoder_f FixType_encode_uper; #ifdef __cplusplus } #endif #endif /* _FixType_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RRLP-Component.h0000644000175000017500000000263512576764164022672 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Messages" * found in "../rrlp-messages.asn" */ #ifndef _RRLP_Component_H_ #define _RRLP_Component_H_ #include /* Including external dependencies */ #include "MsrPosition-Req.h" #include "MsrPosition-Rsp.h" #include "AssistanceData.h" #include #include "ProtocolError.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum RRLP_Component_PR { RRLP_Component_PR_NOTHING, /* No components present */ RRLP_Component_PR_msrPositionReq, RRLP_Component_PR_msrPositionRsp, RRLP_Component_PR_assistanceData, RRLP_Component_PR_assistanceDataAck, RRLP_Component_PR_protocolError, /* Extensions may appear below */ } RRLP_Component_PR; /* RRLP-Component */ typedef struct RRLP_Component { RRLP_Component_PR present; union RRLP_Component_u { MsrPosition_Req_t msrPositionReq; MsrPosition_Rsp_t msrPositionRsp; AssistanceData_t assistanceData; NULL_t assistanceDataAck; ProtocolError_t protocolError; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } RRLP_Component_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RRLP_Component; #ifdef __cplusplus } #endif #endif /* _RRLP_Component_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RequestIndex.h0000644000175000017500000000163312576764164022570 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RequestIndex_H_ #define _RequestIndex_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* RequestIndex */ typedef long RequestIndex_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RequestIndex; asn_struct_free_f RequestIndex_free; asn_struct_print_f RequestIndex_print; asn_constr_check_f RequestIndex_constraint; ber_type_decoder_f RequestIndex_decode_ber; der_type_encoder_f RequestIndex_encode_der; xer_type_decoder_f RequestIndex_decode_xer; xer_type_encoder_f RequestIndex_encode_xer; per_type_decoder_f RequestIndex_decode_uper; per_type_encoder_f RequestIndex_encode_uper; #ifdef __cplusplus } #endif #endif /* _RequestIndex_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ErrorCodes.c0000644000175000017500000001243312576764164022212 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ErrorCodes.h" int ErrorCodes_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void ErrorCodes_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void ErrorCodes_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ErrorCodes_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int ErrorCodes_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t ErrorCodes_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t ErrorCodes_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t ErrorCodes_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t ErrorCodes_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t ErrorCodes_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t ErrorCodes_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ErrorCodes_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_ErrorCodes_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_ErrorCodes_value2enum_1[] = { { 0, 9, "unDefined" }, { 1, 15, "missingComponet" }, { 2, 13, "incorrectData" }, { 3, 27, "missingIEorComponentElement" }, { 4, 15, "messageTooShort" }, { 5, 21, "unknowReferenceNumber" } /* This list is extensible */ }; static unsigned int asn_MAP_ErrorCodes_enum2value_1[] = { 2, /* incorrectData(2) */ 4, /* messageTooShort(4) */ 1, /* missingComponet(1) */ 3, /* missingIEorComponentElement(3) */ 0, /* unDefined(0) */ 5 /* unknowReferenceNumber(5) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_ErrorCodes_specs_1 = { asn_MAP_ErrorCodes_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_ErrorCodes_enum2value_1, /* N => "tag"; sorted by N */ 6, /* Number of elements in the maps */ 7, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_ErrorCodes_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ErrorCodes = { "ErrorCodes", "ErrorCodes", ErrorCodes_free, ErrorCodes_print, ErrorCodes_constraint, ErrorCodes_decode_ber, ErrorCodes_encode_der, ErrorCodes_decode_xer, ErrorCodes_encode_xer, ErrorCodes_decode_uper, ErrorCodes_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ErrorCodes_tags_1, sizeof(asn_DEF_ErrorCodes_tags_1) /sizeof(asn_DEF_ErrorCodes_tags_1[0]), /* 1 */ asn_DEF_ErrorCodes_tags_1, /* Same as above */ sizeof(asn_DEF_ErrorCodes_tags_1) /sizeof(asn_DEF_ErrorCodes_tags_1[0]), /* 1 */ &asn_PER_type_ErrorCodes_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_ErrorCodes_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSDataBitAssist.h0000644000175000017500000000152612576764164023444 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSDataBitAssist_H_ #define _GANSSDataBitAssist_H_ #include /* Including external dependencies */ #include #include "SVID.h" #include "SeqOf-GANSSDataBits.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSDataBitAssist */ typedef struct GANSSDataBitAssist { long ganssTOD; SVID_t svID; long ganssDataTypeID; SeqOf_GANSSDataBits_t ganssDataBits; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSDataBitAssist_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSDataBitAssist; #ifdef __cplusplus } #endif #endif /* _GANSSDataBitAssist_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FrameDrift.c0000644000175000017500000001110312576764164022157 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "FrameDrift.h" int FrameDrift_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -64 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void FrameDrift_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void FrameDrift_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { FrameDrift_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int FrameDrift_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t FrameDrift_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t FrameDrift_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t FrameDrift_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t FrameDrift_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t FrameDrift_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t FrameDrift_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { FrameDrift_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_FrameDrift_constr_1 = { { APC_CONSTRAINED, 7, 7, -64, 63 } /* (-64..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_FrameDrift_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_FrameDrift = { "FrameDrift", "FrameDrift", FrameDrift_free, FrameDrift_print, FrameDrift_constraint, FrameDrift_decode_ber, FrameDrift_encode_der, FrameDrift_decode_xer, FrameDrift_encode_xer, FrameDrift_decode_uper, FrameDrift_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FrameDrift_tags_1, sizeof(asn_DEF_FrameDrift_tags_1) /sizeof(asn_DEF_FrameDrift_tags_1[0]), /* 1 */ asn_DEF_FrameDrift_tags_1, /* Same as above */ sizeof(asn_DEF_FrameDrift_tags_1) /sizeof(asn_DEF_FrameDrift_tags_1[0]), /* 1 */ &asn_PER_type_FrameDrift_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOW24b.h0000644000175000017500000000155612576764164021507 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSTOW24b_H_ #define _GPSTOW24b_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GPSTOW24b */ typedef long GPSTOW24b_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSTOW24b; asn_struct_free_f GPSTOW24b_free; asn_struct_print_f GPSTOW24b_print; asn_constr_check_f GPSTOW24b_constraint; ber_type_decoder_f GPSTOW24b_decode_ber; der_type_encoder_f GPSTOW24b_encode_der; xer_type_decoder_f GPSTOW24b_decode_xer; xer_type_encoder_f GPSTOW24b_encode_xer; per_type_decoder_f GPSTOW24b_decode_uper; per_type_encoder_f GPSTOW24b_encode_uper; #ifdef __cplusplus } #endif #endif /* _GPSTOW24b_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BCCHCarrier.c0000644000175000017500000001115612576764164022153 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "BCCHCarrier.h" int BCCHCarrier_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void BCCHCarrier_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void BCCHCarrier_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { BCCHCarrier_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int BCCHCarrier_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t BCCHCarrier_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t BCCHCarrier_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t BCCHCarrier_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t BCCHCarrier_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t BCCHCarrier_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t BCCHCarrier_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { BCCHCarrier_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_BCCHCarrier_constr_1 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_BCCHCarrier_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BCCHCarrier = { "BCCHCarrier", "BCCHCarrier", BCCHCarrier_free, BCCHCarrier_print, BCCHCarrier_constraint, BCCHCarrier_decode_ber, BCCHCarrier_encode_der, BCCHCarrier_decode_xer, BCCHCarrier_encode_xer, BCCHCarrier_decode_uper, BCCHCarrier_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_BCCHCarrier_tags_1, sizeof(asn_DEF_BCCHCarrier_tags_1) /sizeof(asn_DEF_BCCHCarrier_tags_1[0]), /* 1 */ asn_DEF_BCCHCarrier_tags_1, /* Same as above */ sizeof(asn_DEF_BCCHCarrier_tags_1) /sizeof(asn_DEF_BCCHCarrier_tags_1[0]), /* 1 */ &asn_PER_type_BCCHCarrier_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSSatelliteElement.h0000644000175000017500000000166012576764164025142 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSSSatelliteElement_H_ #define _SeqOfGANSSSatelliteElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSSatelliteElement; /* SeqOfGANSSSatelliteElement */ typedef struct SeqOfGANSSSatelliteElement { A_SEQUENCE_OF(struct GANSSSatelliteElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSSSatelliteElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSSatelliteElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSSatelliteElement.h" #endif /* _SeqOfGANSSSatelliteElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-Measurement.c0000644000175000017500000000501012576764164023045 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-Measurement.h" static asn_TYPE_member_t asn_MBR_OTD_Measurement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_Measurement, nborTimeSlot), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ModuloTimeSlot, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "nborTimeSlot" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_Measurement, eotdQuality), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_EOTDQuality, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "eotdQuality" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_Measurement, otdValue), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTDValue, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otdValue" }, }; static ber_tlv_tag_t asn_DEF_OTD_Measurement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_Measurement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nborTimeSlot at 379 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eotdQuality at 380 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* otdValue at 382 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_Measurement_specs_1 = { sizeof(struct OTD_Measurement), offsetof(struct OTD_Measurement, _asn_ctx), asn_MAP_OTD_Measurement_tag2el_1, 3, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_Measurement = { "OTD-Measurement", "OTD-Measurement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_Measurement_tags_1, sizeof(asn_DEF_OTD_Measurement_tags_1) /sizeof(asn_DEF_OTD_Measurement_tags_1[0]), /* 1 */ asn_DEF_OTD_Measurement_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_Measurement_tags_1) /sizeof(asn_DEF_OTD_Measurement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_Measurement_1, 3, /* Elements count */ &asn_SPC_OTD_Measurement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoIndex.c0000644000175000017500000001140612576764164023232 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SystemInfoIndex.h" int SystemInfoIndex_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 1 && value <= 32)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void SystemInfoIndex_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void SystemInfoIndex_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int SystemInfoIndex_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t SystemInfoIndex_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t SystemInfoIndex_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t SystemInfoIndex_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t SystemInfoIndex_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t SystemInfoIndex_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t SystemInfoIndex_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { SystemInfoIndex_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_SystemInfoIndex_constr_1 = { { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_SystemInfoIndex_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_SystemInfoIndex = { "SystemInfoIndex", "SystemInfoIndex", SystemInfoIndex_free, SystemInfoIndex_print, SystemInfoIndex_constraint, SystemInfoIndex_decode_ber, SystemInfoIndex_encode_der, SystemInfoIndex_decode_xer, SystemInfoIndex_encode_xer, SystemInfoIndex_decode_uper, SystemInfoIndex_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SystemInfoIndex_tags_1, sizeof(asn_DEF_SystemInfoIndex_tags_1) /sizeof(asn_DEF_SystemInfoIndex_tags_1[0]), /* 1 */ asn_DEF_SystemInfoIndex_tags_1, /* Same as above */ sizeof(asn_DEF_SystemInfoIndex_tags_1) /sizeof(asn_DEF_SystemInfoIndex_tags_1[0]), /* 1 */ &asn_PER_type_SystemInfoIndex_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LAC.h0000644000175000017500000000142412576764164020545 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _LAC_H_ #define _LAC_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* LAC */ typedef long LAC_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_LAC; asn_struct_free_f LAC_free; asn_struct_print_f LAC_print; asn_constr_check_f LAC_constraint; ber_type_decoder_f LAC_decode_ber; der_type_encoder_f LAC_encode_der; xer_type_decoder_f LAC_decode_xer; xer_type_encoder_f LAC_encode_xer; per_type_decoder_f LAC_decode_uper; per_type_encoder_f LAC_encode_uper; #ifdef __cplusplus } #endif #endif /* _LAC_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSNavModel.c0000644000175000017500000001404212576764164022442 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSNavModel.h" static int memb_nonBroadcastIndFlag_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_toeMSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_eMSB_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_sqrtAMBS_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_nonBroadcastIndFlag_constr_2 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_toeMSB_constr_3 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_eMSB_constr_4 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_sqrtAMBS_constr_5 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSNavModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSNavModel, nonBroadcastIndFlag), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_nonBroadcastIndFlag_constraint_1, &asn_PER_memb_nonBroadcastIndFlag_constr_2, 0, "nonBroadcastIndFlag" }, { ATF_POINTER, 3, offsetof(struct GANSSNavModel, toeMSB), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_toeMSB_constraint_1, &asn_PER_memb_toeMSB_constr_3, 0, "toeMSB" }, { ATF_POINTER, 2, offsetof(struct GANSSNavModel, eMSB), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_eMSB_constraint_1, &asn_PER_memb_eMSB_constr_4, 0, "eMSB" }, { ATF_POINTER, 1, offsetof(struct GANSSNavModel, sqrtAMBS), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_sqrtAMBS_constraint_1, &asn_PER_memb_sqrtAMBS_constr_5, 0, "sqrtAMBS" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSNavModel, ganssSatelliteList), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSSSatelliteElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssSatelliteList" }, }; static int asn_MAP_GANSSNavModel_oms_1[] = { 1, 2, 3 }; static ber_tlv_tag_t asn_DEF_GANSSNavModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSNavModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nonBroadcastIndFlag at 1228 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* toeMSB at 1229 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eMSB at 1230 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sqrtAMBS at 1231 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ganssSatelliteList at 1233 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSNavModel_specs_1 = { sizeof(struct GANSSNavModel), offsetof(struct GANSSNavModel, _asn_ctx), asn_MAP_GANSSNavModel_tag2el_1, 5, /* Count of tags in the map */ asn_MAP_GANSSNavModel_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSNavModel = { "GANSSNavModel", "GANSSNavModel", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSNavModel_tags_1, sizeof(asn_DEF_GANSSNavModel_tags_1) /sizeof(asn_DEF_GANSSNavModel_tags_1[0]), /* 1 */ asn_DEF_GANSSNavModel_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSNavModel_tags_1) /sizeof(asn_DEF_GANSSNavModel_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSNavModel_1, 5, /* Elements count */ &asn_SPC_GANSSNavModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfAcquisElement.h0000644000175000017500000000154012576764164023642 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfAcquisElement_H_ #define _SeqOfAcquisElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct AcquisElement; /* SeqOfAcquisElement */ typedef struct SeqOfAcquisElement { A_SEQUENCE_OF(struct AcquisElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfAcquisElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfAcquisElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "AcquisElement.h" #endif /* _SeqOfAcquisElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel7-AssistanceData-Extension.h0000644000175000017500000000220112576764164025610 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel7_AssistanceData_Extension_H_ #define _Rel7_AssistanceData_Extension_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSS_AssistData; /* Rel7-AssistanceData-Extension */ typedef struct Rel7_AssistanceData_Extension { struct GANSS_AssistData *ganss_AssistData /* OPTIONAL */; NULL_t *ganssCarrierPhaseMeasurementRequest /* OPTIONAL */; NULL_t *ganssTODGSMTimeAssociationMeasurementRequest /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel7_AssistanceData_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel7_AssistanceData_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSS-AssistData.h" #endif /* _Rel7_AssistanceData_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSGenericAssistDataElement.c0000644000175000017500000001414712576764164025612 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSGenericAssistDataElement.h" static int memb_ganssID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssID_constr_2 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSGenericAssistDataElement_1[] = { { ATF_POINTER, 9, offsetof(struct GANSSGenericAssistDataElement, ganssID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssID_constraint_1, &asn_PER_memb_ganssID_constr_2, 0, "ganssID" }, { ATF_POINTER, 8, offsetof(struct GANSSGenericAssistDataElement, ganssTimeModel), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSSTimeModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTimeModel" }, { ATF_POINTER, 7, offsetof(struct GANSSGenericAssistDataElement, ganssDiffCorrections), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSDiffCorrections, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssDiffCorrections" }, { ATF_POINTER, 6, offsetof(struct GANSSGenericAssistDataElement, ganssNavigationModel), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSNavModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssNavigationModel" }, { ATF_POINTER, 5, offsetof(struct GANSSGenericAssistDataElement, ganssRealTimeIntegrity), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSRealTimeIntegrity, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssRealTimeIntegrity" }, { ATF_POINTER, 4, offsetof(struct GANSSGenericAssistDataElement, ganssDataBitAssist), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSDataBitAssist, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssDataBitAssist" }, { ATF_POINTER, 3, offsetof(struct GANSSGenericAssistDataElement, ganssRefMeasurementAssist), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSRefMeasurementAssist, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssRefMeasurementAssist" }, { ATF_POINTER, 2, offsetof(struct GANSSGenericAssistDataElement, ganssAlmanacModel), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSAlmanacModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssAlmanacModel" }, { ATF_POINTER, 1, offsetof(struct GANSSGenericAssistDataElement, ganssUTCModel), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSUTCModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssUTCModel" }, }; static int asn_MAP_GANSSGenericAssistDataElement_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; static ber_tlv_tag_t asn_DEF_GANSSGenericAssistDataElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSGenericAssistDataElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssID at 1082 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssTimeModel at 1083 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ganssDiffCorrections at 1084 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ganssNavigationModel at 1085 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ganssRealTimeIntegrity at 1086 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ganssDataBitAssist at 1087 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ganssRefMeasurementAssist at 1088 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ganssAlmanacModel at 1089 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* ganssUTCModel at 1090 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSGenericAssistDataElement_specs_1 = { sizeof(struct GANSSGenericAssistDataElement), offsetof(struct GANSSGenericAssistDataElement, _asn_ctx), asn_MAP_GANSSGenericAssistDataElement_tag2el_1, 9, /* Count of tags in the map */ asn_MAP_GANSSGenericAssistDataElement_oms_1, /* Optional members */ 9, 0, /* Root/Additions */ 8, /* Start extensions */ 10 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSGenericAssistDataElement = { "GANSSGenericAssistDataElement", "GANSSGenericAssistDataElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSGenericAssistDataElement_tags_1, sizeof(asn_DEF_GANSSGenericAssistDataElement_tags_1) /sizeof(asn_DEF_GANSSGenericAssistDataElement_tags_1[0]), /* 1 */ asn_DEF_GANSSGenericAssistDataElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSGenericAssistDataElement_tags_1) /sizeof(asn_DEF_GANSSGenericAssistDataElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSGenericAssistDataElement_1, 9, /* Elements count */ &asn_SPC_GANSSGenericAssistDataElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-MsrsOfOtherSets.c0000644000175000017500000000352012576764164024574 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfOTD-MsrsOfOtherSets.h" static asn_per_constraints_t asn_PER_type_SeqOfOTD_MsrsOfOtherSets_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 10 } /* (SIZE(1..10)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfOTD_MsrsOfOtherSets_1[] = { { ATF_POINTER, 0, 0, -1 /* Ambiguous tag (CHOICE?) */, 0, &asn_DEF_OTD_MsrsOfOtherSets, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfOTD_MsrsOfOtherSets_specs_1 = { sizeof(struct SeqOfOTD_MsrsOfOtherSets), offsetof(struct SeqOfOTD_MsrsOfOtherSets, _asn_ctx), 2, /* XER encoding is XMLValueList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_MsrsOfOtherSets = { "SeqOfOTD-MsrsOfOtherSets", "SeqOfOTD-MsrsOfOtherSets", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1, sizeof(asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1) /sizeof(asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1[0]), /* 1 */ asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1) /sizeof(asn_DEF_SeqOfOTD_MsrsOfOtherSets_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfOTD_MsrsOfOtherSets_constr_1, asn_MBR_SeqOfOTD_MsrsOfOtherSets_1, 1, /* Single element */ &asn_SPC_SeqOfOTD_MsrsOfOtherSets_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTODUncertainty.c0000644000175000017500000001165112576764164023614 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSTODUncertainty.h" int GANSSTODUncertainty_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GANSSTODUncertainty_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GANSSTODUncertainty_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSTODUncertainty_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSTODUncertainty_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSTODUncertainty_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSTODUncertainty_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSTODUncertainty_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSTODUncertainty_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSTODUncertainty_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSTODUncertainty_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSTODUncertainty_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSTODUncertainty_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSTODUncertainty = { "GANSSTODUncertainty", "GANSSTODUncertainty", GANSSTODUncertainty_free, GANSSTODUncertainty_print, GANSSTODUncertainty_constraint, GANSSTODUncertainty_decode_ber, GANSSTODUncertainty_encode_der, GANSSTODUncertainty_decode_xer, GANSSTODUncertainty_encode_xer, GANSSTODUncertainty_decode_uper, GANSSTODUncertainty_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSTODUncertainty_tags_1, sizeof(asn_DEF_GANSSTODUncertainty_tags_1) /sizeof(asn_DEF_GANSSTODUncertainty_tags_1[0]), /* 1 */ asn_DEF_GANSSTODUncertainty_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSTODUncertainty_tags_1) /sizeof(asn_DEF_GANSSTODUncertainty_tags_1[0]), /* 1 */ &asn_PER_type_GANSSTODUncertainty_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocationError.h0000644000175000017500000000173312576764164022733 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _LocationError_H_ #define _LocationError_H_ #include /* Including external dependencies */ #include "LocErrorReason.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct AdditionalAssistanceData; /* LocationError */ typedef struct LocationError { LocErrorReason_t locErrorReason; struct AdditionalAssistanceData *additionalAssistanceData /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } LocationError_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_LocationError; #ifdef __cplusplus } #endif /* Referred external types */ #include "AdditionalAssistanceData.h" #endif /* _LocationError_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSAlmanacElement.c0000644000175000017500000000352012576764164024540 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSSAlmanacElement.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSSAlmanacElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 36 } /* (SIZE(1..36)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSSAlmanacElement_1[] = { { ATF_POINTER, 0, 0, -1 /* Ambiguous tag (CHOICE?) */, 0, &asn_DEF_GANSSAlmanacElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSSAlmanacElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSSAlmanacElement_specs_1 = { sizeof(struct SeqOfGANSSAlmanacElement), offsetof(struct SeqOfGANSSAlmanacElement, _asn_ctx), 2, /* XER encoding is XMLValueList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSAlmanacElement = { "SeqOfGANSSAlmanacElement", "SeqOfGANSSAlmanacElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSSAlmanacElement_tags_1, sizeof(asn_DEF_SeqOfGANSSAlmanacElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSAlmanacElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSSAlmanacElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSSAlmanacElement_tags_1) /sizeof(asn_DEF_SeqOfGANSSAlmanacElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSSAlmanacElement_constr_1, asn_MBR_SeqOfGANSSAlmanacElement_1, 1, /* Single element */ &asn_SPC_SeqOfGANSSAlmanacElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfStandardClockModelElement.c0000644000175000017500000000372312576764164026112 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfStandardClockModelElement.h" static asn_per_constraints_t asn_PER_type_SeqOfStandardClockModelElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfStandardClockModelElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_StandardClockModelElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfStandardClockModelElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfStandardClockModelElement_specs_1 = { sizeof(struct SeqOfStandardClockModelElement), offsetof(struct SeqOfStandardClockModelElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfStandardClockModelElement = { "SeqOfStandardClockModelElement", "SeqOfStandardClockModelElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfStandardClockModelElement_tags_1, sizeof(asn_DEF_SeqOfStandardClockModelElement_tags_1) /sizeof(asn_DEF_SeqOfStandardClockModelElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfStandardClockModelElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfStandardClockModelElement_tags_1) /sizeof(asn_DEF_SeqOfStandardClockModelElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfStandardClockModelElement_constr_1, asn_MBR_SeqOfStandardClockModelElement_1, 1, /* Single element */ &asn_SPC_SeqOfStandardClockModelElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_SEQUENCE.h0000644000175000017500000000276412576764164022756 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SEQUENCE_H_ #define _CONSTR_SEQUENCE_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct asn_SEQUENCE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ /* * Tags to members mapping table (sorted). */ asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* * Optional members of the extensions root (roms) or additions (aoms). * Meaningful for PER. */ int *oms; /* Optional MemberS */ int roms_count; /* Root optional members count */ int aoms_count; /* Additions optional members count */ /* * Description of an extensions group. */ int ext_after; /* Extensions start after this member */ int ext_before; /* Extensions stop before this member */ } asn_SEQUENCE_specifics_t; /* * A set specialized functions dealing with the SEQUENCE type. */ asn_struct_free_f SEQUENCE_free; asn_struct_print_f SEQUENCE_print; asn_constr_check_f SEQUENCE_constraint; ber_type_decoder_f SEQUENCE_decode_ber; der_type_encoder_f SEQUENCE_encode_der; xer_type_decoder_f SEQUENCE_decode_xer; xer_type_encoder_f SEQUENCE_encode_xer; per_type_decoder_f SEQUENCE_decode_uper; per_type_encoder_f SEQUENCE_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SEQUENCE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSAlmanacElement.h0000644000175000017500000000163412576764164024551 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSSAlmanacElement_H_ #define _SeqOfGANSSAlmanacElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSAlmanacElement; /* SeqOfGANSSAlmanacElement */ typedef struct SeqOfGANSSAlmanacElement { A_SEQUENCE_OF(struct GANSSAlmanacElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSSAlmanacElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSAlmanacElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSAlmanacElement.h" #endif /* _SeqOfGANSSAlmanacElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NativeEnumerated.h0000644000175000017500000000160112576764164023403 0ustar carlescarles/*- * Copyright (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This type differs from the standard ENUMERATED in that it is modelled using * the fixed machine type (long, int, short), so it can hold only values of * limited length. There is no type (i.e., NativeEnumerated_t, any integer type * will do). * This type may be used when integer range is limited by subtype constraints. */ #ifndef _NativeEnumerated_H_ #define _NativeEnumerated_H_ #include #ifdef __cplusplus extern "C" { #endif extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; xer_type_encoder_f NativeEnumerated_encode_xer; per_type_decoder_f NativeEnumerated_decode_uper; per_type_encoder_f NativeEnumerated_encode_uper; #ifdef __cplusplus } #endif #endif /* _NativeEnumerated_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BIT_STRING.h0000644000175000017500000000147012576764164021653 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BIT_STRING_H_ #define _BIT_STRING_H_ #include /* Some help from OCTET STRING */ #ifdef __cplusplus extern "C" { #endif typedef struct BIT_STRING_s { uint8_t *buf; /* BIT STRING body */ int size; /* Size of the above buffer */ int bits_unused;/* Unused trailing bits in the last octet (0..7) */ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ } BIT_STRING_t; extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; asn_struct_print_f BIT_STRING_print; /* Human-readable output */ asn_constr_check_f BIT_STRING_constraint; xer_type_encoder_f BIT_STRING_encode_xer; #ifdef __cplusplus } #endif #endif /* _BIT_STRING_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSWeek.h0000644000175000017500000000152012576764164021410 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSWeek_H_ #define _GPSWeek_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GPSWeek */ typedef long GPSWeek_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSWeek; asn_struct_free_f GPSWeek_free; asn_struct_print_f GPSWeek_print; asn_constr_check_f GPSWeek_constraint; ber_type_decoder_f GPSWeek_decode_ber; der_type_encoder_f GPSWeek_encode_der; xer_type_decoder_f GPSWeek_decode_xer; xer_type_encoder_f GPSWeek_encode_xer; per_type_decoder_f GPSWeek_decode_uper; per_type_encoder_f GPSWeek_encode_uper; #ifdef __cplusplus } #endif #endif /* _GPSWeek_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSSatelliteElement.h0000644000175000017500000000174412576764164024207 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSSatelliteElement_H_ #define _GANSSSatelliteElement_H_ #include /* Including external dependencies */ #include "SVID.h" #include #include "GANSSClockModel.h" #include "GANSSOrbitModel.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSSatelliteElement */ typedef struct GANSSSatelliteElement { SVID_t svID; long svHealth; long iod; GANSSClockModel_t ganssClockModel; GANSSOrbitModel_t ganssOrbitModel; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSSatelliteElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSSatelliteElement; #ifdef __cplusplus } #endif #endif /* _GANSSSatelliteElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistBTS.h0000644000175000017500000000207012576764164022445 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MsrAssistBTS_H_ #define _MsrAssistBTS_H_ #include /* Including external dependencies */ #include "BCCHCarrier.h" #include "BSIC.h" #include "MultiFrameOffset.h" #include "TimeSlotScheme.h" #include "RoughRTD.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct CalcAssistanceBTS; /* MsrAssistBTS */ typedef struct MsrAssistBTS { BCCHCarrier_t bcchCarrier; BSIC_t bsic; MultiFrameOffset_t multiFrameOffset; TimeSlotScheme_t timeSlotScheme; RoughRTD_t roughRTD; struct CalcAssistanceBTS *calcAssistanceBTS /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MsrAssistBTS_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MsrAssistBTS; #ifdef __cplusplus } #endif /* Referred external types */ #include "CalcAssistanceBTS.h" #endif /* _MsrAssistBTS_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RoughRTD.h0000644000175000017500000000153712576764164021611 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RoughRTD_H_ #define _RoughRTD_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* RoughRTD */ typedef long RoughRTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RoughRTD; asn_struct_free_f RoughRTD_free; asn_struct_print_f RoughRTD_print; asn_constr_check_f RoughRTD_constraint; ber_type_decoder_f RoughRTD_decode_ber; der_type_encoder_f RoughRTD_encode_der; xer_type_decoder_f RoughRTD_decode_xer; xer_type_encoder_f RoughRTD_encode_xer; per_type_decoder_f RoughRTD_decode_uper; per_type_encoder_f RoughRTD_encode_uper; #ifdef __cplusplus } #endif #endif /* _RoughRTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MpathIndic.c0000644000175000017500000001176212576764164022167 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MpathIndic.h" int MpathIndic_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void MpathIndic_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void MpathIndic_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { MpathIndic_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int MpathIndic_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t MpathIndic_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t MpathIndic_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t MpathIndic_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t MpathIndic_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t MpathIndic_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t MpathIndic_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { MpathIndic_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_MpathIndic_constr_1 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_MpathIndic_value2enum_1[] = { { 0, 11, "notMeasured" }, { 1, 3, "low" }, { 2, 6, "medium" }, { 3, 4, "high" } }; static unsigned int asn_MAP_MpathIndic_enum2value_1[] = { 3, /* high(3) */ 1, /* low(1) */ 2, /* medium(2) */ 0 /* notMeasured(0) */ }; static asn_INTEGER_specifics_t asn_SPC_MpathIndic_specs_1 = { asn_MAP_MpathIndic_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_MpathIndic_enum2value_1, /* N => "tag"; sorted by N */ 4, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_MpathIndic_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MpathIndic = { "MpathIndic", "MpathIndic", MpathIndic_free, MpathIndic_print, MpathIndic_constraint, MpathIndic_decode_ber, MpathIndic_encode_der, MpathIndic_decode_xer, MpathIndic_encode_xer, MpathIndic_decode_uper, MpathIndic_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MpathIndic_tags_1, sizeof(asn_DEF_MpathIndic_tags_1) /sizeof(asn_DEF_MpathIndic_tags_1[0]), /* 1 */ asn_DEF_MpathIndic_tags_1, /* Same as above */ sizeof(asn_DEF_MpathIndic_tags_1) /sizeof(asn_DEF_MpathIndic_tags_1[0]), /* 1 */ &asn_PER_type_MpathIndic_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_MpathIndic_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel98-AssistanceData-Extension.c0000644000175000017500000000614712576764164025712 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel98-AssistanceData-Extension.h" static asn_TYPE_member_t asn_MBR_Rel98_AssistanceData_Extension_1[] = { { ATF_POINTER, 3, offsetof(struct Rel98_AssistanceData_Extension, rel98_Ext_ExpOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel98_Ext_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel98-Ext-ExpOTD" }, { ATF_POINTER, 2, offsetof(struct Rel98_AssistanceData_Extension, gpsTimeAssistanceMeasurementRequest), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTimeAssistanceMeasurementRequest" }, { ATF_POINTER, 1, offsetof(struct Rel98_AssistanceData_Extension, gpsReferenceTimeUncertainty), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSReferenceTimeUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsReferenceTimeUncertainty" }, }; static int asn_MAP_Rel98_AssistanceData_Extension_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_Rel98_AssistanceData_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel98_AssistanceData_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rel98-Ext-ExpOTD at 879 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gpsTimeAssistanceMeasurementRequest at 881 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gpsReferenceTimeUncertainty at 882 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel98_AssistanceData_Extension_specs_1 = { sizeof(struct Rel98_AssistanceData_Extension), offsetof(struct Rel98_AssistanceData_Extension, _asn_ctx), asn_MAP_Rel98_AssistanceData_Extension_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_Rel98_AssistanceData_Extension_oms_1, /* Optional members */ 1, 2, /* Root/Additions */ 0, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel98_AssistanceData_Extension = { "Rel98-AssistanceData-Extension", "Rel98-AssistanceData-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel98_AssistanceData_Extension_tags_1, sizeof(asn_DEF_Rel98_AssistanceData_Extension_tags_1) /sizeof(asn_DEF_Rel98_AssistanceData_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel98_AssistanceData_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel98_AssistanceData_Extension_tags_1) /sizeof(asn_DEF_Rel98_AssistanceData_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel98_AssistanceData_Extension_1, 3, /* Elements count */ &asn_SPC_Rel98_AssistanceData_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-98-MsrPosition-Rsp-Extension.h0000644000175000017500000000252212576764164026126 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel_98_MsrPosition_Rsp_Extension_H_ #define _Rel_98_MsrPosition_Rsp_Extension_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GPSTimeAssistanceMeasurements; struct OTD_MeasureInfo_R98_Ext; /* Rel-98-MsrPosition-Rsp-Extension */ typedef struct Rel_98_MsrPosition_Rsp_Extension { struct rel_98_Ext_MeasureInfo { struct OTD_MeasureInfo_R98_Ext *otd_MeasureInfo_R98_Ext /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } rel_98_Ext_MeasureInfo; /* * This type is extensible, * possible extensions are below. */ struct GPSTimeAssistanceMeasurements *timeAssistanceMeasurements /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel_98_MsrPosition_Rsp_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel_98_MsrPosition_Rsp_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "GPSTimeAssistanceMeasurements.h" #include "OTD-MeasureInfo-R98-Ext.h" #endif /* _Rel_98_MsrPosition_Rsp_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EphemerisSubframe1Reserved.h0000644000175000017500000000150412576764164025334 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _EphemerisSubframe1Reserved_H_ #define _EphemerisSubframe1Reserved_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* EphemerisSubframe1Reserved */ typedef struct EphemerisSubframe1Reserved { long reserved1; long reserved2; long reserved3; long reserved4; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } EphemerisSubframe1Reserved_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_EphemerisSubframe1Reserved; #ifdef __cplusplus } #endif #endif /* _EphemerisSubframe1Reserved_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_support.h0000644000175000017500000000754112576764164022536 0ustar carlescarles/* * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_SUPPORT_H_ #define _PER_SUPPORT_H_ #include /* Platform-specific types */ #ifdef __cplusplus extern "C" { #endif /* * Pre-computed PER constraints. */ typedef struct asn_per_constraint_s { enum asn_per_constraint_flags { APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ APC_CONSTRAINED = 0x2, /* Fully constrained */ APC_EXTENSIBLE = 0x4 /* May have extension */ } flags; int range_bits; /* Full number of bits in the range */ int effective_bits; /* Effective bits */ long lower_bound; /* "lb" value */ long upper_bound; /* "ub" value */ } asn_per_constraint_t; typedef struct asn_per_constraints_s { asn_per_constraint_t value; asn_per_constraint_t size; int (*value2code)(unsigned int value); int (*code2value)(unsigned int code); } asn_per_constraints_t; /* * This structure describes a position inside an incoming PER bit stream. */ typedef struct asn_per_data_s { const uint8_t *buffer; /* Pointer to the octet stream */ size_t nboff; /* Bit offset to the meaningful bit */ size_t nbits; /* Number of bits in the stream */ size_t moved; /* Number of bits moved through this bit stream */ int (*refill)(struct asn_per_data_s *); void *refill_key; } asn_per_data_t; /* * Extract a small number of bits (<= 31) from the specified PER data pointer. * This function returns -1 if the specified number of bits could not be * extracted due to EOD or other conditions. */ int32_t per_get_few_bits(asn_per_data_t *per_data, int get_nbits); /* Undo the immediately preceeding "get_few_bits" operation */ void per_get_undo(asn_per_data_t *per_data, int get_nbits); /* * Extract a large number of bits from the specified PER data pointer. * This function returns -1 if the specified number of bits could not be * extracted due to EOD or other conditions. */ int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int right_align, int get_nbits); /* * Get the length "n" from the Unaligned PER stream. */ ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, int *repeat); /* * Get the normally small length "n". */ ssize_t uper_get_nslength(asn_per_data_t *pd); /* * Get the normally small non-negative whole number. */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd); /* Non-thread-safe debugging function, don't use it */ char *per_data_string(asn_per_data_t *pd); /* * This structure supports forming PER output. */ typedef struct asn_per_outp_s { uint8_t *buffer; /* Pointer into the (tmpspace) */ size_t nboff; /* Bit offset to the meaningful bit */ size_t nbits; /* Number of bits left in (tmpspace) */ uint8_t tmpspace[32]; /* Preliminary storage to hold data */ int (*outper)(const void *data, size_t size, void *op_key); void *op_key; /* Key for (outper) data callback */ size_t flushed_bytes; /* Bytes already flushed through (outper) */ } asn_per_outp_t; /* Output a small number of bits (<= 31) */ int per_put_few_bits(asn_per_outp_t *per_data, uint32_t bits, int obits); /* Output a large number of bits */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int put_nbits); /* * Put the length "n" to the Unaligned PER stream. * This function returns the number of units which may be flushed * in the next units saving iteration. */ ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length); /* * Put the normally small length "n" to the Unaligned PER stream. * Returns 0 or -1. */ int uper_put_nslength(asn_per_outp_t *po, size_t length); /* * Put the normally small non-negative whole number. */ int uper_put_nsnnwn(asn_per_outp_t *po, int n); #ifdef __cplusplus } #endif #endif /* _PER_SUPPORT_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSTimeModel.h0000644000175000017500000000157712576764164023570 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSSTimeModel_H_ #define _SeqOfGANSSTimeModel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSTimeModelElement; /* SeqOfGANSSTimeModel */ typedef struct SeqOfGANSSTimeModel { A_SEQUENCE_OF(struct GANSSTimeModelElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSSTimeModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSTimeModel; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSTimeModelElement.h" #endif /* _SeqOfGANSSTimeModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAlmanacElement.h0000644000175000017500000000217212576764164023611 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSAlmanacElement_H_ #define _GANSSAlmanacElement_H_ #include /* Including external dependencies */ #include "Almanac-KeplerianSet.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum GANSSAlmanacElement_PR { GANSSAlmanacElement_PR_NOTHING, /* No components present */ GANSSAlmanacElement_PR_keplerianAlmanacSet, /* Extensions may appear below */ } GANSSAlmanacElement_PR; /* GANSSAlmanacElement */ typedef struct GANSSAlmanacElement { GANSSAlmanacElement_PR present; union GANSSAlmanacElement_u { Almanac_KeplerianSet_t keplerianAlmanacSet; /* * This type is extensible, * possible extensions are below. */ } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSAlmanacElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSAlmanacElement; #ifdef __cplusplus } #endif #endif /* _GANSSAlmanacElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SVIDMASK.h0000644000175000017500000000154412576764164021372 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SVIDMASK_H_ #define _SVIDMASK_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* SVIDMASK */ typedef BIT_STRING_t SVIDMASK_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SVIDMASK; asn_struct_free_f SVIDMASK_free; asn_struct_print_f SVIDMASK_print; asn_constr_check_f SVIDMASK_constraint; ber_type_decoder_f SVIDMASK_decode_ber; der_type_encoder_f SVIDMASK_encode_der; xer_type_decoder_f SVIDMASK_decode_xer; xer_type_encoder_f SVIDMASK_encode_xer; per_type_decoder_f SVIDMASK_decode_uper; per_type_encoder_f SVIDMASK_encode_uper; #ifdef __cplusplus } #endif #endif /* _SVIDMASK_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Accuracy.h0000644000175000017500000000153712576764164021705 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Accuracy_H_ #define _Accuracy_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Accuracy */ typedef long Accuracy_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Accuracy; asn_struct_free_f Accuracy_free; asn_struct_print_f Accuracy_print; asn_constr_check_f Accuracy_constraint; ber_type_decoder_f Accuracy_decode_ber; der_type_encoder_f Accuracy_encode_der; xer_type_decoder_f Accuracy_decode_xer; xer_type_encoder_f Accuracy_encode_xer; per_type_decoder_f Accuracy_decode_uper; per_type_encoder_f Accuracy_encode_uper; #ifdef __cplusplus } #endif #endif /* _Accuracy_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAssistanceData.h0000644000175000017500000000201512576764164023626 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSAssistanceData_H_ #define _GANSSAssistanceData_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GANSSAssistanceData */ typedef OCTET_STRING_t GANSSAssistanceData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSAssistanceData; asn_struct_free_f GANSSAssistanceData_free; asn_struct_print_f GANSSAssistanceData_print; asn_constr_check_f GANSSAssistanceData_constraint; ber_type_decoder_f GANSSAssistanceData_decode_ber; der_type_encoder_f GANSSAssistanceData_encode_der; xer_type_decoder_f GANSSAssistanceData_decode_xer; xer_type_encoder_f GANSSAssistanceData_encode_xer; per_type_decoder_f GANSSAssistanceData_decode_uper; per_type_encoder_f GANSSAssistanceData_encode_uper; #ifdef __cplusplus } #endif #endif /* _GANSSAssistanceData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSIonoStormFlags.c0000644000175000017500000001560312576764164023647 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSIonoStormFlags.h" static int memb_ionoStormFlag1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ionoStormFlag2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ionoStormFlag3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ionoStormFlag4_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ionoStormFlag5_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ionoStormFlag1_constr_2 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ionoStormFlag2_constr_3 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ionoStormFlag3_constr_4 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ionoStormFlag4_constr_5 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ionoStormFlag5_constr_6 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSIonoStormFlags_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSIonoStormFlags, ionoStormFlag1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ionoStormFlag1_constraint_1, &asn_PER_memb_ionoStormFlag1_constr_2, 0, "ionoStormFlag1" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSIonoStormFlags, ionoStormFlag2), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ionoStormFlag2_constraint_1, &asn_PER_memb_ionoStormFlag2_constr_3, 0, "ionoStormFlag2" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSIonoStormFlags, ionoStormFlag3), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ionoStormFlag3_constraint_1, &asn_PER_memb_ionoStormFlag3_constr_4, 0, "ionoStormFlag3" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSIonoStormFlags, ionoStormFlag4), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ionoStormFlag4_constraint_1, &asn_PER_memb_ionoStormFlag4_constr_5, 0, "ionoStormFlag4" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSIonoStormFlags, ionoStormFlag5), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ionoStormFlag5_constraint_1, &asn_PER_memb_ionoStormFlag5_constr_6, 0, "ionoStormFlag5" }, }; static ber_tlv_tag_t asn_DEF_GANSSIonoStormFlags_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSIonoStormFlags_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ionoStormFlag1 at 1152 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ionoStormFlag2 at 1153 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ionoStormFlag3 at 1154 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ionoStormFlag4 at 1155 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ionoStormFlag5 at 1156 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSIonoStormFlags_specs_1 = { sizeof(struct GANSSIonoStormFlags), offsetof(struct GANSSIonoStormFlags, _asn_ctx), asn_MAP_GANSSIonoStormFlags_tag2el_1, 5, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSIonoStormFlags = { "GANSSIonoStormFlags", "GANSSIonoStormFlags", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSIonoStormFlags_tags_1, sizeof(asn_DEF_GANSSIonoStormFlags_tags_1) /sizeof(asn_DEF_GANSSIonoStormFlags_tags_1[0]), /* 1 */ asn_DEF_GANSSIonoStormFlags_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSIonoStormFlags_tags_1) /sizeof(asn_DEF_GANSSIonoStormFlags_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSIonoStormFlags_1, 5, /* Elements count */ &asn_SPC_GANSSIonoStormFlags_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfMsrAssistBTS-R98-ExpOTD.h0000644000175000017500000000170412576764164025067 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfMsrAssistBTS_R98_ExpOTD_H_ #define _SeqOfMsrAssistBTS_R98_ExpOTD_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct MsrAssistBTS_R98_ExpOTD; /* SeqOfMsrAssistBTS-R98-ExpOTD */ typedef struct SeqOfMsrAssistBTS_R98_ExpOTD { A_SEQUENCE_OF(struct MsrAssistBTS_R98_ExpOTD) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfMsrAssistBTS_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfMsrAssistBTS_R98_ExpOTD; #ifdef __cplusplus } #endif /* Referred external types */ #include "MsrAssistBTS-R98-ExpOTD.h" #endif /* _SeqOfMsrAssistBTS_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FineRTD.c0000644000175000017500000001071112576764164021373 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "FineRTD.h" int FineRTD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void FineRTD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void FineRTD_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { FineRTD_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int FineRTD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { FineRTD_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t FineRTD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { FineRTD_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t FineRTD_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { FineRTD_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t FineRTD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { FineRTD_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t FineRTD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { FineRTD_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t FineRTD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { FineRTD_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t FineRTD_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { FineRTD_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_FineRTD_constr_1 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_FineRTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_FineRTD = { "FineRTD", "FineRTD", FineRTD_free, FineRTD_print, FineRTD_constraint, FineRTD_decode_ber, FineRTD_encode_der, FineRTD_decode_xer, FineRTD_encode_xer, FineRTD_decode_uper, FineRTD_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_FineRTD_tags_1, sizeof(asn_DEF_FineRTD_tags_1) /sizeof(asn_DEF_FineRTD_tags_1[0]), /* 1 */ asn_DEF_FineRTD_tags_1, /* Same as above */ sizeof(asn_DEF_FineRTD_tags_1) /sizeof(asn_DEF_FineRTD_tags_1[0]), /* 1 */ &asn_PER_type_FineRTD_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AcquisElement.c0000644000175000017500000001762012576764164022705 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AcquisElement.h" static int memb_doppler0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -2048 && value <= 2047)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_codePhase_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1022)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_intCodePhase_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 19)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_gpsBitNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_codePhaseSearchWindow_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 15)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_doppler0_constr_3 = { { APC_CONSTRAINED, 12, 12, -2048, 2047 } /* (-2048..2047) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_codePhase_constr_5 = { { APC_CONSTRAINED, 10, 10, 0, 1022 } /* (0..1022) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_intCodePhase_constr_6 = { { APC_CONSTRAINED, 5, 5, 0, 19 } /* (0..19) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_gpsBitNumber_constr_7 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_codePhaseSearchWindow_constr_8 = { { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_AcquisElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AcquisElement, svid), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SatelliteID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svid" }, { ATF_NOFLAGS, 0, offsetof(struct AcquisElement, doppler0), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_doppler0_constraint_1, &asn_PER_memb_doppler0_constr_3, 0, "doppler0" }, { ATF_POINTER, 1, offsetof(struct AcquisElement, addionalDoppler), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AddionalDopplerFields, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "addionalDoppler" }, { ATF_NOFLAGS, 0, offsetof(struct AcquisElement, codePhase), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_codePhase_constraint_1, &asn_PER_memb_codePhase_constr_5, 0, "codePhase" }, { ATF_NOFLAGS, 0, offsetof(struct AcquisElement, intCodePhase), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_intCodePhase_constraint_1, &asn_PER_memb_intCodePhase_constr_6, 0, "intCodePhase" }, { ATF_NOFLAGS, 0, offsetof(struct AcquisElement, gpsBitNumber), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_gpsBitNumber_constraint_1, &asn_PER_memb_gpsBitNumber_constr_7, 0, "gpsBitNumber" }, { ATF_NOFLAGS, 0, offsetof(struct AcquisElement, codePhaseSearchWindow), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_codePhaseSearchWindow_constraint_1, &asn_PER_memb_codePhaseSearchWindow_constr_8, 0, "codePhaseSearchWindow" }, { ATF_POINTER, 1, offsetof(struct AcquisElement, addionalAngle), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AddionalAngleFields, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "addionalAngle" }, }; static int asn_MAP_AcquisElement_oms_1[] = { 2, 7 }; static ber_tlv_tag_t asn_DEF_AcquisElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AcquisElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* svid at 834 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* doppler0 at 838 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* addionalDoppler at 839 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* codePhase at 840 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* intCodePhase at 841 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* gpsBitNumber at 842 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* codePhaseSearchWindow at 843 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* addionalAngle at 844 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AcquisElement_specs_1 = { sizeof(struct AcquisElement), offsetof(struct AcquisElement, _asn_ctx), asn_MAP_AcquisElement_tag2el_1, 8, /* Count of tags in the map */ asn_MAP_AcquisElement_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AcquisElement = { "AcquisElement", "AcquisElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AcquisElement_tags_1, sizeof(asn_DEF_AcquisElement_tags_1) /sizeof(asn_DEF_AcquisElement_tags_1[0]), /* 1 */ asn_DEF_AcquisElement_tags_1, /* Same as above */ sizeof(asn_DEF_AcquisElement_tags_1) /sizeof(asn_DEF_AcquisElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AcquisElement_1, 8, /* Elements count */ &asn_SPC_AcquisElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSAssistanceData.c0000644000175000017500000001171412576764164023627 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSAssistanceData.h" int GANSSAssistanceData_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 40)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using OCTET_STRING, * so here we adjust the DEF accordingly. */ static void GANSSAssistanceData_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_OCTET_STRING.free_struct; td->print_struct = asn_DEF_OCTET_STRING.print_struct; td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; td->elements = asn_DEF_OCTET_STRING.elements; td->elements_count = asn_DEF_OCTET_STRING.elements_count; td->specifics = asn_DEF_OCTET_STRING.specifics; } void GANSSAssistanceData_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GANSSAssistanceData_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GANSSAssistanceData_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GANSSAssistanceData_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GANSSAssistanceData_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GANSSAssistanceData_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GANSSAssistanceData_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GANSSAssistanceData_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GANSSAssistanceData_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GANSSAssistanceData_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 40 } /* (SIZE(1..40)) */, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GANSSAssistanceData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GANSSAssistanceData = { "GANSSAssistanceData", "GANSSAssistanceData", GANSSAssistanceData_free, GANSSAssistanceData_print, GANSSAssistanceData_constraint, GANSSAssistanceData_decode_ber, GANSSAssistanceData_encode_der, GANSSAssistanceData_decode_xer, GANSSAssistanceData_encode_xer, GANSSAssistanceData_decode_uper, GANSSAssistanceData_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSAssistanceData_tags_1, sizeof(asn_DEF_GANSSAssistanceData_tags_1) /sizeof(asn_DEF_GANSSAssistanceData_tags_1[0]), /* 1 */ asn_DEF_GANSSAssistanceData_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSAssistanceData_tags_1) /sizeof(asn_DEF_GANSSAssistanceData_tags_1[0]), /* 1 */ &asn_PER_type_GANSSAssistanceData_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoAssistBTS-R98-ExpOTD.c0000644000175000017500000000455612576764164025473 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SystemInfoAssistBTS-R98-ExpOTD.h" static asn_per_constraints_t asn_PER_type_SystemInfoAssistBTS_R98_ExpOTD_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SystemInfoAssistBTS_R98_ExpOTD_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SystemInfoAssistBTS_R98_ExpOTD, choice.notPresent), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "notPresent" }, { ATF_NOFLAGS, 0, offsetof(struct SystemInfoAssistBTS_R98_ExpOTD, choice.present), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AssistBTSData_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "present" }, }; static asn_TYPE_tag2member_t asn_MAP_SystemInfoAssistBTS_R98_ExpOTD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* notPresent at 927 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* present at 929 */ }; static asn_CHOICE_specifics_t asn_SPC_SystemInfoAssistBTS_R98_ExpOTD_specs_1 = { sizeof(struct SystemInfoAssistBTS_R98_ExpOTD), offsetof(struct SystemInfoAssistBTS_R98_ExpOTD, _asn_ctx), offsetof(struct SystemInfoAssistBTS_R98_ExpOTD, present), sizeof(((struct SystemInfoAssistBTS_R98_ExpOTD *)0)->present), asn_MAP_SystemInfoAssistBTS_R98_ExpOTD_tag2el_1, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_SystemInfoAssistBTS_R98_ExpOTD = { "SystemInfoAssistBTS-R98-ExpOTD", "SystemInfoAssistBTS-R98-ExpOTD", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_SystemInfoAssistBTS_R98_ExpOTD_constr_1, asn_MBR_SystemInfoAssistBTS_R98_ExpOTD_1, 2, /* Elements count */ &asn_SPC_SystemInfoAssistBTS_R98_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NeighborIdentity.h0000644000175000017500000000262312576764164023417 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _NeighborIdentity_H_ #define _NeighborIdentity_H_ #include /* Including external dependencies */ #include "BSICAndCarrier.h" #include "CellID.h" #include "MultiFrameCarrier.h" #include "RequestIndex.h" #include "SystemInfoIndex.h" #include "CellIDAndLAC.h" #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum NeighborIdentity_PR { NeighborIdentity_PR_NOTHING, /* No components present */ NeighborIdentity_PR_bsicAndCarrier, NeighborIdentity_PR_ci, NeighborIdentity_PR_multiFrameCarrier, NeighborIdentity_PR_requestIndex, NeighborIdentity_PR_systemInfoIndex, NeighborIdentity_PR_ciAndLAC } NeighborIdentity_PR; /* NeighborIdentity */ typedef struct NeighborIdentity { NeighborIdentity_PR present; union NeighborIdentity_u { BSICAndCarrier_t bsicAndCarrier; CellID_t ci; MultiFrameCarrier_t multiFrameCarrier; RequestIndex_t requestIndex; SystemInfoIndex_t systemInfoIndex; CellIDAndLAC_t ciAndLAC; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } NeighborIdentity_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NeighborIdentity; #ifdef __cplusplus } #endif #endif /* _NeighborIdentity_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/der_encoder.h0000644000175000017500000000363112576764164022421 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _DER_ENCODER_H_ #define _DER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * The DER encoder of any type. May be invoked by the application. * The ber_decode() function (ber_decoder.h) is an opposite of der_encode(). */ asn_enc_rval_t der_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* A variant of der_encode() which encodes data into the pre-allocated buffer */ asn_enc_rval_t der_encode_to_buffer( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ void *buffer, /* Pre-allocated buffer */ size_t buffer_size /* Initial buffer size (maximum) */ ); /* * Type of the generic DER encoder. */ typedef asn_enc_rval_t (der_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Write out leading TL[v] sequence according to the type definition. */ ssize_t der_write_tags( struct asn_TYPE_descriptor_s *type_descriptor, size_t struct_length, int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ int last_tag_form, /* {0,!0}: prim, constructed */ ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key ); #ifdef __cplusplus } #endif #endif /* _DER_ENCODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/StandardClockModelElement.h0000644000175000017500000000173412576764164025161 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _StandardClockModelElement_H_ #define _StandardClockModelElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* StandardClockModelElement */ typedef struct StandardClockModelElement { long stanClockTocLSB; long stanClockAF2; long stanClockAF1; long stanClockAF0; long *stanClockTgd /* OPTIONAL */; long *stanModelID /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } StandardClockModelElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_StandardClockModelElement; #ifdef __cplusplus } #endif #endif /* _StandardClockModelElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-MsrSetElement.h0000644000175000017500000000221112576764164023541 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSS_MsrSetElement_H_ #define _GANSS_MsrSetElement_H_ #include /* Including external dependencies */ #include "GANSSTODm.h" #include #include "GANSSTODUncertainty.h" #include "SeqOfGANSS-SgnTypeElement.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct ReferenceFrame; /* GANSS-MsrSetElement */ typedef struct GANSS_MsrSetElement { struct ReferenceFrame *referenceFrame /* OPTIONAL */; GANSSTODm_t *ganssTODm /* OPTIONAL */; long *deltaGNASSTOD /* OPTIONAL */; GANSSTODUncertainty_t *ganssTODUncertainty /* OPTIONAL */; SeqOfGANSS_SgnTypeElement_t ganss_SgnTypeList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSS_MsrSetElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSS_MsrSetElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "ReferenceFrame.h" #endif /* _GANSS_MsrSetElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrSetElement.c0000644000175000017500000000650712576764164023326 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPS-MsrSetElement.h" static int memb_refFrame_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refFrame_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GPS_MsrSetElement_1[] = { { ATF_POINTER, 1, offsetof(struct GPS_MsrSetElement, refFrame), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refFrame_constraint_1, &asn_PER_memb_refFrame_constr_2, 0, "refFrame" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrSetElement, gpsTOW), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSTOW24b, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsTOW" }, { ATF_NOFLAGS, 0, offsetof(struct GPS_MsrSetElement, gps_msrList), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGPS_MsrElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gps-msrList" }, }; static int asn_MAP_GPS_MsrSetElement_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_GPS_MsrSetElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPS_MsrSetElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refFrame at 450 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gpsTOW at 451 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gps-msrList at 457 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPS_MsrSetElement_specs_1 = { sizeof(struct GPS_MsrSetElement), offsetof(struct GPS_MsrSetElement, _asn_ctx), asn_MAP_GPS_MsrSetElement_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_GPS_MsrSetElement_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPS_MsrSetElement = { "GPS-MsrSetElement", "GPS-MsrSetElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPS_MsrSetElement_tags_1, sizeof(asn_DEF_GPS_MsrSetElement_tags_1) /sizeof(asn_DEF_GPS_MsrSetElement_tags_1[0]), /* 1 */ asn_DEF_GPS_MsrSetElement_tags_1, /* Same as above */ sizeof(asn_DEF_GPS_MsrSetElement_tags_1) /sizeof(asn_DEF_GPS_MsrSetElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPS_MsrSetElement_1, 3, /* Elements count */ &asn_SPC_GPS_MsrSetElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TOA-MeasurementsOfRef.h0000644000175000017500000000147112576764164024163 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TOA_MeasurementsOfRef_H_ #define _TOA_MeasurementsOfRef_H_ #include /* Including external dependencies */ #include "RefQuality.h" #include "NumOfMeasurements.h" #include #ifdef __cplusplus extern "C" { #endif /* TOA-MeasurementsOfRef */ typedef struct TOA_MeasurementsOfRef { RefQuality_t refQuality; NumOfMeasurements_t numOfMeasurements; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } TOA_MeasurementsOfRef_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TOA_MeasurementsOfRef; #ifdef __cplusplus } #endif #endif /* _TOA_MeasurementsOfRef_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeSlotScheme.h0000644000175000017500000000210712576764164023032 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TimeSlotScheme_H_ #define _TimeSlotScheme_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum TimeSlotScheme { TimeSlotScheme_equalLength = 0, TimeSlotScheme_variousLength = 1 } e_TimeSlotScheme; /* TimeSlotScheme */ typedef ENUMERATED_t TimeSlotScheme_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TimeSlotScheme; asn_struct_free_f TimeSlotScheme_free; asn_struct_print_f TimeSlotScheme_print; asn_constr_check_f TimeSlotScheme_constraint; ber_type_decoder_f TimeSlotScheme_decode_ber; der_type_encoder_f TimeSlotScheme_encode_der; xer_type_decoder_f TimeSlotScheme_decode_xer; xer_type_encoder_f TimeSlotScheme_encode_xer; per_type_decoder_f TimeSlotScheme_decode_uper; per_type_encoder_f TimeSlotScheme_encode_uper; #ifdef __cplusplus } #endif #endif /* _TimeSlotScheme_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SgnTypeElement.c0000644000175000017500000000652412576764164023052 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SgnTypeElement.h" static int memb_ganssStatusHealth_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssStatusHealth_constr_3 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SgnTypeElement_1[] = { { ATF_POINTER, 1, offsetof(struct SgnTypeElement, ganssSignalID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSSignalID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssSignalID" }, { ATF_NOFLAGS, 0, offsetof(struct SgnTypeElement, ganssStatusHealth), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssStatusHealth_constraint_1, &asn_PER_memb_ganssStatusHealth_constr_3, 0, "ganssStatusHealth" }, { ATF_NOFLAGS, 0, offsetof(struct SgnTypeElement, dganssSgnList), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfDGANSSSgnElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "dganssSgnList" }, }; static int asn_MAP_SgnTypeElement_oms_1[] = { 0 }; static ber_tlv_tag_t asn_DEF_SgnTypeElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_SgnTypeElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssSignalID at 1196 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssStatusHealth at 1197 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* dganssSgnList at 1200 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SgnTypeElement_specs_1 = { sizeof(struct SgnTypeElement), offsetof(struct SgnTypeElement, _asn_ctx), asn_MAP_SgnTypeElement_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_SgnTypeElement_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_SgnTypeElement = { "SgnTypeElement", "SgnTypeElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SgnTypeElement_tags_1, sizeof(asn_DEF_SgnTypeElement_tags_1) /sizeof(asn_DEF_SgnTypeElement_tags_1[0]), /* 1 */ asn_DEF_SgnTypeElement_tags_1, /* Same as above */ sizeof(asn_DEF_SgnTypeElement_tags_1) /sizeof(asn_DEF_SgnTypeElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_SgnTypeElement_1, 3, /* Elements count */ &asn_SPC_SgnTypeElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ber_decoder.h0000644000175000017500000000377712576764164022420 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_DECODER_H_ #define _BER_DECODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_codec_ctx_s; /* Forward declaration */ /* * The BER decoder of any type. * This function may be invoked directly from the application. * The der_encode() function (der_encoder.h) is an opposite to ber_decode(). */ asn_dec_rval_t ber_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of that buffer */ ); /* * Type of generic function which decodes the byte stream into the structure. */ typedef asn_dec_rval_t (ber_type_decoder_f)( struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const void *buf_ptr, size_t size, int tag_mode); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Check that all tags correspond to the type definition (as given in head). * On return, last_length would contain either a non-negative length of the * value part of the last TLV, or the negative number of expected * "end of content" sequences. The number may only be negative if the * head->last_tag_form is non-zero. */ asn_dec_rval_t ber_check_tags( struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ struct asn_TYPE_descriptor_s *type_descriptor, asn_struct_ctx_t *opt_ctx, /* saved decoding context */ const void *ptr, size_t size, int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ int last_tag_form, /* {-1,0:1}: any, primitive, constr */ ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ ); #ifdef __cplusplus } #endif #endif /* _BER_DECODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TA2.h0000644000175000017500000000142412576764164020534 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _TA2_H_ #define _TA2_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* TA2 */ typedef long TA2_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_TA2; asn_struct_free_f TA2_free; asn_struct_print_f TA2_print; asn_constr_check_f TA2_constraint; ber_type_decoder_f TA2_decode_ber; der_type_encoder_f TA2_encode_der; xer_type_decoder_f TA2_decode_xer; xer_type_encoder_f TA2_encode_xer; per_type_decoder_f TA2_decode_uper; per_type_encoder_f TA2_encode_uper; #ifdef __cplusplus } #endif #endif /* _TA2_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UlPseudoSegInd.c0000644000175000017500000001215712576764164023000 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "UlPseudoSegInd.h" int UlPseudoSegInd_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void UlPseudoSegInd_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void UlPseudoSegInd_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int UlPseudoSegInd_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t UlPseudoSegInd_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t UlPseudoSegInd_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t UlPseudoSegInd_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t UlPseudoSegInd_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t UlPseudoSegInd_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t UlPseudoSegInd_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { UlPseudoSegInd_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_UlPseudoSegInd_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_UlPseudoSegInd_value2enum_1[] = { { 0, 11, "firstOfMany" }, { 1, 12, "secondOfMany" } }; static unsigned int asn_MAP_UlPseudoSegInd_enum2value_1[] = { 0, /* firstOfMany(0) */ 1 /* secondOfMany(1) */ }; static asn_INTEGER_specifics_t asn_SPC_UlPseudoSegInd_specs_1 = { asn_MAP_UlPseudoSegInd_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_UlPseudoSegInd_enum2value_1, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_UlPseudoSegInd_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_UlPseudoSegInd = { "UlPseudoSegInd", "UlPseudoSegInd", UlPseudoSegInd_free, UlPseudoSegInd_print, UlPseudoSegInd_constraint, UlPseudoSegInd_decode_ber, UlPseudoSegInd_encode_der, UlPseudoSegInd_decode_xer, UlPseudoSegInd_encode_xer, UlPseudoSegInd_decode_uper, UlPseudoSegInd_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UlPseudoSegInd_tags_1, sizeof(asn_DEF_UlPseudoSegInd_tags_1) /sizeof(asn_DEF_UlPseudoSegInd_tags_1[0]), /* 1 */ asn_DEF_UlPseudoSegInd_tags_1, /* Same as above */ sizeof(asn_DEF_UlPseudoSegInd_tags_1) /sizeof(asn_DEF_UlPseudoSegInd_tags_1[0]), /* 1 */ &asn_PER_type_UlPseudoSegInd_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_UlPseudoSegInd_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RelDistance.h0000644000175000017500000000161412576764164022344 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RelDistance_H_ #define _RelDistance_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* RelDistance */ typedef long RelDistance_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RelDistance; asn_struct_free_f RelDistance_free; asn_struct_print_f RelDistance_print; asn_constr_check_f RelDistance_constraint; ber_type_decoder_f RelDistance_decode_ber; der_type_encoder_f RelDistance_encode_der; xer_type_decoder_f RelDistance_decode_xer; xer_type_encoder_f RelDistance_encode_xer; per_type_decoder_f RelDistance_decode_uper; per_type_encoder_f RelDistance_encode_uper; #ifdef __cplusplus } #endif #endif /* _RelDistance_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RequestIndex.c0000644000175000017500000001121612576764164022561 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RequestIndex.h" int RequestIndex_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 1 && value <= 16)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void RequestIndex_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void RequestIndex_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { RequestIndex_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int RequestIndex_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t RequestIndex_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t RequestIndex_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t RequestIndex_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t RequestIndex_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t RequestIndex_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t RequestIndex_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { RequestIndex_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_RequestIndex_constr_1 = { { APC_CONSTRAINED, 4, 4, 1, 16 } /* (1..16) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_RequestIndex_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_RequestIndex = { "RequestIndex", "RequestIndex", RequestIndex_free, RequestIndex_print, RequestIndex_constraint, RequestIndex_decode_ber, RequestIndex_encode_der, RequestIndex_decode_xer, RequestIndex_encode_xer, RequestIndex_decode_uper, RequestIndex_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RequestIndex_tags_1, sizeof(asn_DEF_RequestIndex_tags_1) /sizeof(asn_DEF_RequestIndex_tags_1[0]), /* 1 */ asn_DEF_RequestIndex_tags_1, /* Same as above */ sizeof(asn_DEF_RequestIndex_tags_1) /sizeof(asn_DEF_RequestIndex_tags_1[0]), /* 1 */ &asn_PER_type_RequestIndex_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefLocation.h0000644000175000017500000000136412576764164023152 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSRefLocation_H_ #define _GANSSRefLocation_H_ #include /* Including external dependencies */ #include "Ext-GeographicalInformation.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSRefLocation */ typedef struct GANSSRefLocation { Ext_GeographicalInformation_t threeDLocation; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSRefLocation_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSRefLocation; #ifdef __cplusplus } #endif #endif /* _GANSSRefLocation_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Extended-reference.h0000644000175000017500000000135512576764164023645 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Extended_reference_H_ #define _Extended_reference_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Extended-reference */ typedef struct Extended_reference { long smlc_code; long transaction_ID; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Extended_reference_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Extended_reference; #ifdef __cplusplus } #endif #endif /* _Extended_reference_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfOTD-FirstSetMsrs-R98-Ext.c0000644000175000017500000000366712576764164025264 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfOTD-FirstSetMsrs-R98-Ext.h" static asn_per_constraints_t asn_PER_type_SeqOfOTD_FirstSetMsrs_R98_Ext_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 1, 5 } /* (SIZE(1..5)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfOTD_FirstSetMsrs_R98_Ext_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_OTD_FirstSetMsrs, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfOTD_FirstSetMsrs_R98_Ext_specs_1 = { sizeof(struct SeqOfOTD_FirstSetMsrs_R98_Ext), offsetof(struct SeqOfOTD_FirstSetMsrs_R98_Ext, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext = { "SeqOfOTD-FirstSetMsrs-R98-Ext", "SeqOfOTD-FirstSetMsrs-R98-Ext", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1, sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1) /sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1[0]), /* 1 */ asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1) /sizeof(asn_DEF_SeqOfOTD_FirstSetMsrs_R98_Ext_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfOTD_FirstSetMsrs_R98_Ext_constr_1, asn_MBR_SeqOfOTD_FirstSetMsrs_R98_Ext_1, 1, /* Single element */ &asn_SPC_SeqOfOTD_FirstSetMsrs_R98_Ext_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocErrorReason.h0000644000175000017500000000315012576764164023043 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _LocErrorReason_H_ #define _LocErrorReason_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum LocErrorReason { LocErrorReason_unDefined = 0, LocErrorReason_notEnoughBTSs = 1, LocErrorReason_notEnoughSats = 2, LocErrorReason_eotdLocCalAssDataMissing = 3, LocErrorReason_eotdAssDataMissing = 4, LocErrorReason_gpsLocCalAssDataMissing = 5, LocErrorReason_gpsAssDataMissing = 6, LocErrorReason_methodNotSupported = 7, LocErrorReason_notProcessed = 8, LocErrorReason_refBTSForGPSNotServingBTS = 9, LocErrorReason_refBTSForEOTDNotServingBTS = 10, /* * Enumeration is extensible */ LocErrorReason_notEnoughGANSSSats = 11, LocErrorReason_ganssAssDataMissing = 12, LocErrorReason_refBTSForGANSSNotServingBTS = 13 } e_LocErrorReason; /* LocErrorReason */ typedef ENUMERATED_t LocErrorReason_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_LocErrorReason; asn_struct_free_f LocErrorReason_free; asn_struct_print_f LocErrorReason_print; asn_constr_check_f LocErrorReason_constraint; ber_type_decoder_f LocErrorReason_decode_ber; der_type_encoder_f LocErrorReason_encode_der; xer_type_decoder_f LocErrorReason_decode_xer; xer_type_encoder_f LocErrorReason_encode_xer; per_type_decoder_f LocErrorReason_decode_uper; per_type_encoder_f LocErrorReason_encode_uper; #ifdef __cplusplus } #endif #endif /* _LocErrorReason_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTimeAssistanceMeasurements.h0000644000175000017500000000174312576764164026031 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSTimeAssistanceMeasurements_H_ #define _GPSTimeAssistanceMeasurements_H_ #include /* Including external dependencies */ #include #include "GPSReferenceTimeUncertainty.h" #include #ifdef __cplusplus extern "C" { #endif /* GPSTimeAssistanceMeasurements */ typedef struct GPSTimeAssistanceMeasurements { long referenceFrameMSB; long *gpsTowSubms /* OPTIONAL */; long *deltaTow /* OPTIONAL */; GPSReferenceTimeUncertainty_t *gpsReferenceTimeUncertainty /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPSTimeAssistanceMeasurements_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSTimeAssistanceMeasurements; #ifdef __cplusplus } #endif #endif /* _GPSTimeAssistanceMeasurements_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_decoder.h0000644000175000017500000000330012576764164022414 0ustar carlescarles/*- * Copyright (c) 2005, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_DECODER_H_ #define _PER_DECODER_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Unaligned PER decoder of a "complete encoding" as per X.691#10.1. * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. */ asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of data buffer */ ); /* * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. * WARNING: This call returns the number of BITS read from the stream. Beware. */ asn_dec_rval_t uper_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size, /* Size of data buffer */ int skip_bits, /* Number of unused leading bits, 0..7 */ int unused_bits /* Number of unused tailing bits, 0..7 */ ); /* * Type of the type-specific PER decoder function. */ typedef asn_dec_rval_t (per_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void **struct_ptr, asn_per_data_t *per_data ); #ifdef __cplusplus } #endif #endif /* _PER_DECODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ControlHeader.c0000644000175000017500000001145012576764164022672 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ControlHeader.h" static asn_TYPE_member_t asn_MBR_ControlHeader_1[] = { { ATF_POINTER, 9, offsetof(struct ControlHeader, referenceTime), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceTime" }, { ATF_POINTER, 8, offsetof(struct ControlHeader, refLocation), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RefLocation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "refLocation" }, { ATF_POINTER, 7, offsetof(struct ControlHeader, dgpsCorrections), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_DGPSCorrections, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "dgpsCorrections" }, { ATF_POINTER, 6, offsetof(struct ControlHeader, navigationModel), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NavigationModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "navigationModel" }, { ATF_POINTER, 5, offsetof(struct ControlHeader, ionosphericModel), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_IonosphericModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ionosphericModel" }, { ATF_POINTER, 4, offsetof(struct ControlHeader, utcModel), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UTCModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "utcModel" }, { ATF_POINTER, 3, offsetof(struct ControlHeader, almanac), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Almanac, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "almanac" }, { ATF_POINTER, 2, offsetof(struct ControlHeader, acquisAssist), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_AcquisAssist, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "acquisAssist" }, { ATF_POINTER, 1, offsetof(struct ControlHeader, realTimeIntegrity), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOf_BadSatelliteSet, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "realTimeIntegrity" }, }; static int asn_MAP_ControlHeader_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; static ber_tlv_tag_t asn_DEF_ControlHeader_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ControlHeader_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceTime at 574 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* refLocation at 575 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dgpsCorrections at 576 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* navigationModel at 577 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ionosphericModel at 578 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* utcModel at 579 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* almanac at 580 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* acquisAssist at 581 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* realTimeIntegrity at 582 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ControlHeader_specs_1 = { sizeof(struct ControlHeader), offsetof(struct ControlHeader, _asn_ctx), asn_MAP_ControlHeader_tag2el_1, 9, /* Count of tags in the map */ asn_MAP_ControlHeader_oms_1, /* Optional members */ 9, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ControlHeader = { "ControlHeader", "ControlHeader", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ControlHeader_tags_1, sizeof(asn_DEF_ControlHeader_tags_1) /sizeof(asn_DEF_ControlHeader_tags_1[0]), /* 1 */ asn_DEF_ControlHeader_tags_1, /* Same as above */ sizeof(asn_DEF_ControlHeader_tags_1) /sizeof(asn_DEF_ControlHeader_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ControlHeader_1, 9, /* Elements count */ &asn_SPC_ControlHeader_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSTimeModel.c0000644000175000017500000000337612576764164023562 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfGANSSTimeModel.h" static asn_per_constraints_t asn_PER_type_SeqOfGANSSTimeModel_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 1, 7 } /* (SIZE(1..7)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfGANSSTimeModel_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_GANSSTimeModelElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfGANSSTimeModel_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfGANSSTimeModel_specs_1 = { sizeof(struct SeqOfGANSSTimeModel), offsetof(struct SeqOfGANSSTimeModel, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSTimeModel = { "SeqOfGANSSTimeModel", "SeqOfGANSSTimeModel", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfGANSSTimeModel_tags_1, sizeof(asn_DEF_SeqOfGANSSTimeModel_tags_1) /sizeof(asn_DEF_SeqOfGANSSTimeModel_tags_1[0]), /* 1 */ asn_DEF_SeqOfGANSSTimeModel_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfGANSSTimeModel_tags_1) /sizeof(asn_DEF_SeqOfGANSSTimeModel_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfGANSSTimeModel_constr_1, asn_MBR_SeqOfGANSSTimeModel_1, 1, /* Single element */ &asn_SPC_SeqOfGANSSTimeModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ENUMERATED.c0000644000175000017500000000412412576764164021572 0ustar carlescarles/*- * Copyright (c) 2003, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include /* Encoder and decoder of a primitive type */ /* * ENUMERATED basic type description. */ static ber_tlv_tag_t asn_DEF_ENUMERATED_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_ENUMERATED = { "ENUMERATED", "ENUMERATED", ASN__PRIMITIVE_TYPE_free, INTEGER_print, /* Implemented in terms of INTEGER */ asn_generic_no_constraint, ber_decode_primitive, INTEGER_encode_der, /* Implemented in terms of INTEGER */ INTEGER_decode_xer, /* This is temporary! */ INTEGER_encode_xer, ENUMERATED_decode_uper, /* Unaligned PER decoder */ ENUMERATED_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_ENUMERATED_tags, sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), asn_DEF_ENUMERATED_tags, /* Same as above */ sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn_dec_rval_t ENUMERATED_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rval; ENUMERATED_t *st = (ENUMERATED_t *)*sptr; long value; void *vptr = &value; if(!st) { st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st))); if(!st) _ASN_DECODE_FAILED; } rval = NativeEnumerated_decode_uper(opt_codec_ctx, td, constraints, (void **)&vptr, pd); if(rval.code == RC_OK) if(asn_long2INTEGER(st, value)) rval.code = RC_FAIL; return rval; } asn_enc_rval_t ENUMERATED_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { ENUMERATED_t *st = (ENUMERATED_t *)sptr; long value; if(asn_INTEGER2long(st, &value)) _ASN_ENCODE_FAILED; return NativeEnumerated_encode_uper(td, constraints, &value, po); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PDU.h0000644000175000017500000000125112576764164020574 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Messages" * found in "../rrlp-messages.asn" */ #ifndef _PDU_H_ #define _PDU_H_ #include /* Including external dependencies */ #include #include "RRLP-Component.h" #include #ifdef __cplusplus extern "C" { #endif /* PDU */ typedef struct PDU { long referenceNumber; RRLP_Component_t component; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PDU_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PDU; #ifdef __cplusplus } #endif #endif /* _PDU_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOf-GANSSDataBits.c0000644000175000017500000000337412576764164023451 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOf-GANSSDataBits.h" static asn_per_constraints_t asn_PER_type_SeqOf_GANSSDataBits_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 10, 10, 1, 1024 } /* (SIZE(1..1024)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOf_GANSSDataBits_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, &asn_DEF_GANSSDataBit, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOf_GANSSDataBits_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOf_GANSSDataBits_specs_1 = { sizeof(struct SeqOf_GANSSDataBits), offsetof(struct SeqOf_GANSSDataBits, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOf_GANSSDataBits = { "SeqOf-GANSSDataBits", "SeqOf-GANSSDataBits", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOf_GANSSDataBits_tags_1, sizeof(asn_DEF_SeqOf_GANSSDataBits_tags_1) /sizeof(asn_DEF_SeqOf_GANSSDataBits_tags_1[0]), /* 1 */ asn_DEF_SeqOf_GANSSDataBits_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOf_GANSSDataBits_tags_1) /sizeof(asn_DEF_SeqOf_GANSSDataBits_tags_1[0]), /* 1 */ &asn_PER_type_SeqOf_GANSSDataBits_constr_1, asn_MBR_SeqOf_GANSSDataBits_1, 1, /* Single element */ &asn_SPC_SeqOf_GANSSDataBits_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementFirst.h0000644000175000017500000000230512576764164023654 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MsrElementFirst_H_ #define _OTD_MsrElementFirst_H_ #include /* Including external dependencies */ #include #include "ModuloTimeSlot.h" #include "StdResolution.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct TOA_MeasurementsOfRef; struct SeqOfOTD_FirstSetMsrs; /* OTD-MsrElementFirst */ typedef struct OTD_MsrElementFirst { long refFrameNumber; ModuloTimeSlot_t referenceTimeSlot; struct TOA_MeasurementsOfRef *toaMeasurementsOfRef /* OPTIONAL */; StdResolution_t stdResolution; long *taCorrection /* OPTIONAL */; struct SeqOfOTD_FirstSetMsrs *otd_FirstSetMsrs /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MsrElementFirst_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MsrElementFirst; #ifdef __cplusplus } #endif /* Referred external types */ #include "TOA-MeasurementsOfRef.h" #include "SeqOfOTD-FirstSetMsrs.h" #endif /* _OTD_MsrElementFirst_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NeighborIdentity.c0000644000175000017500000000715712576764164023421 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "NeighborIdentity.h" static asn_per_constraints_t asn_PER_type_NeighborIdentity_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_NeighborIdentity_1[] = { { ATF_NOFLAGS, 0, offsetof(struct NeighborIdentity, choice.bsicAndCarrier), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSICAndCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsicAndCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct NeighborIdentity, choice.ci), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ci" }, { ATF_NOFLAGS, 0, offsetof(struct NeighborIdentity, choice.multiFrameCarrier), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MultiFrameCarrier, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "multiFrameCarrier" }, { ATF_NOFLAGS, 0, offsetof(struct NeighborIdentity, choice.requestIndex), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RequestIndex, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "requestIndex" }, { ATF_NOFLAGS, 0, offsetof(struct NeighborIdentity, choice.systemInfoIndex), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SystemInfoIndex, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoIndex" }, { ATF_NOFLAGS, 0, offsetof(struct NeighborIdentity, choice.ciAndLAC), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellIDAndLAC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ciAndLAC" }, }; static asn_TYPE_tag2member_t asn_MAP_NeighborIdentity_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bsicAndCarrier at 398 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ci at 399 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* multiFrameCarrier at 400 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* requestIndex at 401 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* systemInfoIndex at 402 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* ciAndLAC at 407 */ }; static asn_CHOICE_specifics_t asn_SPC_NeighborIdentity_specs_1 = { sizeof(struct NeighborIdentity), offsetof(struct NeighborIdentity, _asn_ctx), offsetof(struct NeighborIdentity, present), sizeof(((struct NeighborIdentity *)0)->present), asn_MAP_NeighborIdentity_tag2el_1, 6, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_NeighborIdentity = { "NeighborIdentity", "NeighborIdentity", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_NeighborIdentity_constr_1, asn_MBR_NeighborIdentity_1, 6, /* Elements count */ &asn_SPC_NeighborIdentity_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSClockModel.c0000644000175000017500000000347212576764164022756 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSClockModel.h" static asn_per_constraints_t asn_PER_type_GANSSClockModel_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSClockModel_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSSClockModel, choice.standardClockModelList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfStandardClockModelElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "standardClockModelList" }, }; static asn_TYPE_tag2member_t asn_MAP_GANSSClockModel_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* standardClockModelList at 1274 */ }; static asn_CHOICE_specifics_t asn_SPC_GANSSClockModel_specs_1 = { sizeof(struct GANSSClockModel), offsetof(struct GANSSClockModel, _asn_ctx), offsetof(struct GANSSClockModel, present), sizeof(((struct GANSSClockModel *)0)->present), asn_MAP_GANSSClockModel_tag2el_1, 1, /* Count of tags in the map */ 0, 1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_GANSSClockModel = { "GANSSClockModel", "GANSSClockModel", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_GANSSClockModel_constr_1, asn_MBR_GANSSClockModel_1, 1, /* Elements count */ &asn_SPC_GANSSClockModel_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefTimeInfo.c0000644000175000017500000001060612576764164023106 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSRefTimeInfo.h" static int memb_ganssDay_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 8191)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ganssTimeID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssDay_constr_2 = { { APC_CONSTRAINED, 13, 13, 0, 8191 } /* (0..8191) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ganssTimeID_constr_5 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSSRefTimeInfo_1[] = { { ATF_POINTER, 1, offsetof(struct GANSSRefTimeInfo, ganssDay), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssDay_constraint_1, &asn_PER_memb_ganssDay_constr_2, 0, "ganssDay" }, { ATF_NOFLAGS, 0, offsetof(struct GANSSRefTimeInfo, ganssTOD), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTOD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTOD" }, { ATF_POINTER, 2, offsetof(struct GANSSRefTimeInfo, ganssTODUncertainty), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTODUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODUncertainty" }, { ATF_POINTER, 1, offsetof(struct GANSSRefTimeInfo, ganssTimeID), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssTimeID_constraint_1, &asn_PER_memb_ganssTimeID_constr_5, 0, "ganssTimeID" }, }; static int asn_MAP_GANSSRefTimeInfo_oms_1[] = { 0, 2, 3 }; static ber_tlv_tag_t asn_DEF_GANSSRefTimeInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSRefTimeInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssDay at 1104 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssTOD at 1105 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ganssTODUncertainty at 1106 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ganssTimeID at 1107 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSRefTimeInfo_specs_1 = { sizeof(struct GANSSRefTimeInfo), offsetof(struct GANSSRefTimeInfo, _asn_ctx), asn_MAP_GANSSRefTimeInfo_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_GANSSRefTimeInfo_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSRefTimeInfo = { "GANSSRefTimeInfo", "GANSSRefTimeInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSRefTimeInfo_tags_1, sizeof(asn_DEF_GANSSRefTimeInfo_tags_1) /sizeof(asn_DEF_GANSSRefTimeInfo_tags_1[0]), /* 1 */ asn_DEF_GANSSRefTimeInfo_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSRefTimeInfo_tags_1) /sizeof(asn_DEF_GANSSRefTimeInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSRefTimeInfo_1, 4, /* Elements count */ &asn_SPC_GANSSRefTimeInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/xer_encoder.c0000644000175000017500000000300512576764164022433 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * The XER encoder of any type. May be invoked by the application. */ asn_enc_rval_t xer_encode(asn_TYPE_descriptor_t *td, void *sptr, enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er, tmper; const char *mname; size_t mlen; int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; if(!td || !sptr) goto cb_failed; mname = td->xml_tag; mlen = strlen(mname); _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); tmper = td->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); if(tmper.encoded == -1) return tmper; _ASN_CALLBACK3("\n", xcan); er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded; _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } /* * This is a helper function for xer_fprint, which directs all incoming data * into the provided file descriptor. */ static int xer__print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } int xer_fprint(FILE *stream, asn_TYPE_descriptor_t *td, void *sptr) { asn_enc_rval_t er; if(!stream) stream = stdout; if(!td || !sptr) return -1; er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); if(er.encoded == -1) return -1; return fflush(stream); } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSLocationInfo.h0000644000175000017500000000255612576764164023335 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSLocationInfo_H_ #define _GANSSLocationInfo_H_ #include /* Including external dependencies */ #include "GANSSTODm.h" #include #include "GANSSTODUncertainty.h" #include "FixType.h" #include "PositionData.h" #include "Ext-GeographicalInformation.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct ReferenceFrame; /* GANSSLocationInfo */ typedef struct GANSSLocationInfo { struct ReferenceFrame *referenceFrame /* OPTIONAL */; GANSSTODm_t *ganssTODm /* OPTIONAL */; long *ganssTODFrac /* OPTIONAL */; GANSSTODUncertainty_t *ganssTODUncertainty /* OPTIONAL */; long *ganssTimeID /* OPTIONAL */; FixType_t fixType; PositionData_t posData; long *stationaryIndication /* OPTIONAL */; Ext_GeographicalInformation_t posEstimate; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSLocationInfo_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSLocationInfo; #ifdef __cplusplus } #endif /* Referred external types */ #include "ReferenceFrame.h" #endif /* _GANSSLocationInfo_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ProtocolError.c0000644000175000017500000000522512576764164022757 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "ProtocolError.h" static asn_TYPE_member_t asn_MBR_ProtocolError_1[] = { { ATF_NOFLAGS, 0, offsetof(struct ProtocolError, errorCause), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ErrorCodes, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "errorCause" }, { ATF_POINTER, 2, offsetof(struct ProtocolError, extensionContainer), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExtensionContainer, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extensionContainer" }, { ATF_POINTER, 1, offsetof(struct ProtocolError, rel_5_ProtocolError_Extension), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Rel_5_ProtocolError_Extension, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel-5-ProtocolError-Extension" }, }; static int asn_MAP_ProtocolError_oms_1[] = { 1, 2 }; static ber_tlv_tag_t asn_DEF_ProtocolError_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_ProtocolError_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* errorCause at 96 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* extensionContainer at 97 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rel-5-ProtocolError-Extension at 100 */ }; static asn_SEQUENCE_specifics_t asn_SPC_ProtocolError_specs_1 = { sizeof(struct ProtocolError), offsetof(struct ProtocolError, _asn_ctx), asn_MAP_ProtocolError_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_ProtocolError_oms_1, /* Optional members */ 1, 1, /* Root/Additions */ 1, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_ProtocolError = { "ProtocolError", "ProtocolError", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ProtocolError_tags_1, sizeof(asn_DEF_ProtocolError_tags_1) /sizeof(asn_DEF_ProtocolError_tags_1[0]), /* 1 */ asn_DEF_ProtocolError_tags_1, /* Same as above */ sizeof(asn_DEF_ProtocolError_tags_1) /sizeof(asn_DEF_ProtocolError_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_ProtocolError_1, 3, /* Elements count */ &asn_SPC_ProtocolError_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultiFrameOffset.c0000644000175000017500000001145612576764164023363 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "MultiFrameOffset.h" int MultiFrameOffset_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 51)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void MultiFrameOffset_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void MultiFrameOffset_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int MultiFrameOffset_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t MultiFrameOffset_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t MultiFrameOffset_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t MultiFrameOffset_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t MultiFrameOffset_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t MultiFrameOffset_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t MultiFrameOffset_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { MultiFrameOffset_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_MultiFrameOffset_constr_1 = { { APC_CONSTRAINED, 6, 6, 0, 51 } /* (0..51) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_MultiFrameOffset_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MultiFrameOffset = { "MultiFrameOffset", "MultiFrameOffset", MultiFrameOffset_free, MultiFrameOffset_print, MultiFrameOffset_constraint, MultiFrameOffset_decode_ber, MultiFrameOffset_encode_der, MultiFrameOffset_decode_xer, MultiFrameOffset_encode_xer, MultiFrameOffset_decode_uper, MultiFrameOffset_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_MultiFrameOffset_tags_1, sizeof(asn_DEF_MultiFrameOffset_tags_1) /sizeof(asn_DEF_MultiFrameOffset_tags_1[0]), /* 1 */ asn_DEF_MultiFrameOffset_tags_1, /* Same as above */ sizeof(asn_DEF_MultiFrameOffset_tags_1) /sizeof(asn_DEF_MultiFrameOffset_tags_1[0]), /* 1 */ &asn_PER_type_MultiFrameOffset_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AdditionalAssistanceData.c0000644000175000017500000000562612576764164025031 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AdditionalAssistanceData.h" static asn_TYPE_member_t asn_MBR_AdditionalAssistanceData_1[] = { { ATF_POINTER, 3, offsetof(struct AdditionalAssistanceData, gpsAssistanceData), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSAssistanceData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsAssistanceData" }, { ATF_POINTER, 2, offsetof(struct AdditionalAssistanceData, extensionContainer), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ExtensionContainer, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "extensionContainer" }, { ATF_POINTER, 1, offsetof(struct AdditionalAssistanceData, ganssAssistanceData), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSAssistanceData, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssAssistanceData" }, }; static int asn_MAP_AdditionalAssistanceData_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_AdditionalAssistanceData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AdditionalAssistanceData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gpsAssistanceData at 520 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* extensionContainer at 521 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ganssAssistanceData at 523 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AdditionalAssistanceData_specs_1 = { sizeof(struct AdditionalAssistanceData), offsetof(struct AdditionalAssistanceData, _asn_ctx), asn_MAP_AdditionalAssistanceData_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_AdditionalAssistanceData_oms_1, /* Optional members */ 2, 1, /* Root/Additions */ 1, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AdditionalAssistanceData = { "AdditionalAssistanceData", "AdditionalAssistanceData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AdditionalAssistanceData_tags_1, sizeof(asn_DEF_AdditionalAssistanceData_tags_1) /sizeof(asn_DEF_AdditionalAssistanceData_tags_1[0]), /* 1 */ asn_DEF_AdditionalAssistanceData_tags_1, /* Same as above */ sizeof(asn_DEF_AdditionalAssistanceData_tags_1) /sizeof(asn_DEF_AdditionalAssistanceData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AdditionalAssistanceData_1, 3, /* Elements count */ &asn_SPC_AdditionalAssistanceData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PDU.c0000644000175000017500000000516512576764164020577 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Messages" * found in "../rrlp-messages.asn" */ #include "PDU.h" static int memb_referenceNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_referenceNumber_constr_2 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_PDU_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PDU, referenceNumber), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_referenceNumber_constraint_1, &asn_PER_memb_referenceNumber_constr_2, 0, "referenceNumber" }, { ATF_NOFLAGS, 0, offsetof(struct PDU, component), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_RRLP_Component, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "component" }, }; static ber_tlv_tag_t asn_DEF_PDU_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_PDU_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceNumber at 16 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* component at 18 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PDU_specs_1 = { sizeof(struct PDU), offsetof(struct PDU, _asn_ctx), asn_MAP_PDU_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PDU = { "PDU", "PDU", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PDU_tags_1, sizeof(asn_DEF_PDU_tags_1) /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */ asn_DEF_PDU_tags_1, /* Same as above */ sizeof(asn_DEF_PDU_tags_1) /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PDU_1, 2, /* Elements count */ &asn_SPC_PDU_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SystemInfoIndex.h0000644000175000017500000000171012576764164023234 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SystemInfoIndex_H_ #define _SystemInfoIndex_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* SystemInfoIndex */ typedef long SystemInfoIndex_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SystemInfoIndex; asn_struct_free_f SystemInfoIndex_free; asn_struct_print_f SystemInfoIndex_print; asn_constr_check_f SystemInfoIndex_constraint; ber_type_decoder_f SystemInfoIndex_decode_ber; der_type_encoder_f SystemInfoIndex_encode_der; xer_type_decoder_f SystemInfoIndex_decode_xer; xer_type_encoder_f SystemInfoIndex_encode_xer; per_type_decoder_f SystemInfoIndex_decode_uper; per_type_encoder_f SystemInfoIndex_encode_uper; #ifdef __cplusplus } #endif #endif /* _SystemInfoIndex_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTime.h0000644000175000017500000000126612576764164021422 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSTime_H_ #define _GPSTime_H_ #include /* Including external dependencies */ #include "GPSTOW23b.h" #include "GPSWeek.h" #include #ifdef __cplusplus extern "C" { #endif /* GPSTime */ typedef struct GPSTime { GPSTOW23b_t gpsTOW23b; GPSWeek_t gpsWeek; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPSTime_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSTime; #ifdef __cplusplus } #endif #endif /* _GPSTime_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AcquisAssist.c0000644000175000017500000000414612576764164022561 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AcquisAssist.h" static asn_TYPE_member_t asn_MBR_AcquisAssist_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AcquisAssist, timeRelation), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeRelation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeRelation" }, { ATF_NOFLAGS, 0, offsetof(struct AcquisAssist, acquisList), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfAcquisElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "acquisList" }, }; static ber_tlv_tag_t asn_DEF_AcquisAssist_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AcquisAssist_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* timeRelation at 817 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* acquisList at 822 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AcquisAssist_specs_1 = { sizeof(struct AcquisAssist), offsetof(struct AcquisAssist, _asn_ctx), asn_MAP_AcquisAssist_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AcquisAssist = { "AcquisAssist", "AcquisAssist", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AcquisAssist_tags_1, sizeof(asn_DEF_AcquisAssist_tags_1) /sizeof(asn_DEF_AcquisAssist_tags_1[0]), /* 1 */ asn_DEF_AcquisAssist_tags_1, /* Same as above */ sizeof(asn_DEF_AcquisAssist_tags_1) /sizeof(asn_DEF_AcquisAssist_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AcquisAssist_1, 2, /* Elements count */ &asn_SPC_AcquisAssist_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/UncompressedEphemeris.c0000644000175000017500000012210012576764164024445 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "UncompressedEphemeris.h" static int ephemE_17_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { unsigned long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const unsigned long *)sptr; /* Constraint check succeeded */ return 0; } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void ephemE_17_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */ } static void ephemE_17_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ephemE_17_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } static int ephemE_17_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ephemE_17_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } static asn_dec_rval_t ephemE_17_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ephemE_17_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } static asn_enc_rval_t ephemE_17_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ephemE_17_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } static asn_dec_rval_t ephemE_17_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ephemE_17_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } static asn_enc_rval_t ephemE_17_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ephemE_17_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } static asn_dec_rval_t ephemE_17_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ephemE_17_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } static asn_enc_rval_t ephemE_17_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ephemE_17_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static int ephemAPowerHalf_19_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { unsigned long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const unsigned long *)sptr; /* Constraint check succeeded */ return 0; } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void ephemAPowerHalf_19_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */ } static void ephemAPowerHalf_19_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } static int ephemAPowerHalf_19_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } static asn_dec_rval_t ephemAPowerHalf_19_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } static asn_enc_rval_t ephemAPowerHalf_19_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } static asn_dec_rval_t ephemAPowerHalf_19_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } static asn_enc_rval_t ephemAPowerHalf_19_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } static asn_dec_rval_t ephemAPowerHalf_19_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } static asn_enc_rval_t ephemAPowerHalf_19_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { ephemAPowerHalf_19_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static int memb_ephemCodeOnL2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemURA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 15)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemSVhealth_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemIODC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemL2Pflag_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemTgd_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemToc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 37799)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemAF2_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -128 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemAF1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemAF0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -2097152 && value <= 2097151)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemCrs_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemDeltaN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemM0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemCuc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemE_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { unsigned long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const unsigned long *)sptr; /* Constraint check succeeded */ return 0; } static int memb_ephemCus_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemAPowerHalf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { unsigned long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const unsigned long *)sptr; /* Constraint check succeeded */ return 0; } static int memb_ephemToe_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 37799)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemFitFlag_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemAODA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemCic_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemOmegaA0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemCis_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemI0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemCrc_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemW_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemOmegaADot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8388608 && value <= 8388607)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_ephemIDot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8192 && value <= 8191)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_type_ephemE_constr_17 = { { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_type_ephemAPowerHalf_constr_19 = { { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCodeOnL2_constr_2 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemURA_constr_3 = { { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemSVhealth_constr_4 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemIODC_constr_5 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemL2Pflag_constr_6 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemTgd_constr_8 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemToc_constr_9 = { { APC_CONSTRAINED, 16, 16, 0, 37799 } /* (0..37799) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemAF2_constr_10 = { { APC_CONSTRAINED, 8, 8, -128, 127 } /* (-128..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemAF1_constr_11 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemAF0_constr_12 = { { APC_CONSTRAINED, 22, -1, -2097152, 2097151 } /* (-2097152..2097151) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCrs_constr_13 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemDeltaN_constr_14 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemM0_constr_15 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCuc_constr_16 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemE_constr_17 = { { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCus_constr_18 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemAPowerHalf_constr_19 = { { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemToe_constr_20 = { { APC_CONSTRAINED, 16, 16, 0, 37799 } /* (0..37799) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemFitFlag_constr_21 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemAODA_constr_22 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCic_constr_23 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemOmegaA0_constr_24 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCis_constr_25 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemI0_constr_26 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemCrc_constr_27 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemW_constr_28 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemOmegaADot_constr_29 = { { APC_CONSTRAINED, 24, -1, -8388608, 8388607 } /* (-8388608..8388607) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_ephemIDot_constr_30 = { { APC_CONSTRAINED, 14, 14, -8192, 8191 } /* (-8192..8191) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_specifics_t asn_SPC_ephemE_specs_17 = { 0, 0, 0, 0, 0, 0, /* Native long size */ 1 /* Unsigned representation */ }; static ber_tlv_tag_t asn_DEF_ephemE_tags_17[] = { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_ephemE_17 = { "ephemE", "ephemE", ephemE_17_free, ephemE_17_print, ephemE_17_constraint, ephemE_17_decode_ber, ephemE_17_encode_der, ephemE_17_decode_xer, ephemE_17_encode_xer, ephemE_17_decode_uper, ephemE_17_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ephemE_tags_17, sizeof(asn_DEF_ephemE_tags_17) /sizeof(asn_DEF_ephemE_tags_17[0]) - 1, /* 1 */ asn_DEF_ephemE_tags_17, /* Same as above */ sizeof(asn_DEF_ephemE_tags_17) /sizeof(asn_DEF_ephemE_tags_17[0]), /* 2 */ &asn_PER_type_ephemE_constr_17, 0, 0, /* No members */ &asn_SPC_ephemE_specs_17 /* Additional specs */ }; static asn_INTEGER_specifics_t asn_SPC_ephemAPowerHalf_specs_19 = { 0, 0, 0, 0, 0, 0, /* Native long size */ 1 /* Unsigned representation */ }; static ber_tlv_tag_t asn_DEF_ephemAPowerHalf_tags_19[] = { (ASN_TAG_CLASS_CONTEXT | (17 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_ephemAPowerHalf_19 = { "ephemAPowerHalf", "ephemAPowerHalf", ephemAPowerHalf_19_free, ephemAPowerHalf_19_print, ephemAPowerHalf_19_constraint, ephemAPowerHalf_19_decode_ber, ephemAPowerHalf_19_encode_der, ephemAPowerHalf_19_decode_xer, ephemAPowerHalf_19_encode_xer, ephemAPowerHalf_19_decode_uper, ephemAPowerHalf_19_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_ephemAPowerHalf_tags_19, sizeof(asn_DEF_ephemAPowerHalf_tags_19) /sizeof(asn_DEF_ephemAPowerHalf_tags_19[0]) - 1, /* 1 */ asn_DEF_ephemAPowerHalf_tags_19, /* Same as above */ sizeof(asn_DEF_ephemAPowerHalf_tags_19) /sizeof(asn_DEF_ephemAPowerHalf_tags_19[0]), /* 2 */ &asn_PER_type_ephemAPowerHalf_constr_19, 0, 0, /* No members */ &asn_SPC_ephemAPowerHalf_specs_19 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_UncompressedEphemeris_1[] = { { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCodeOnL2), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCodeOnL2_constraint_1, &asn_PER_memb_ephemCodeOnL2_constr_2, 0, "ephemCodeOnL2" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemURA), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemURA_constraint_1, &asn_PER_memb_ephemURA_constr_3, 0, "ephemURA" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemSVhealth), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemSVhealth_constraint_1, &asn_PER_memb_ephemSVhealth_constr_4, 0, "ephemSVhealth" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemIODC), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemIODC_constraint_1, &asn_PER_memb_ephemIODC_constr_5, 0, "ephemIODC" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemL2Pflag), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemL2Pflag_constraint_1, &asn_PER_memb_ephemL2Pflag_constr_6, 0, "ephemL2Pflag" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemSF1Rsvd), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_EphemerisSubframe1Reserved, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ephemSF1Rsvd" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemTgd), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemTgd_constraint_1, &asn_PER_memb_ephemTgd_constr_8, 0, "ephemTgd" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemToc), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemToc_constraint_1, &asn_PER_memb_ephemToc_constr_9, 0, "ephemToc" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemAF2), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemAF2_constraint_1, &asn_PER_memb_ephemAF2_constr_10, 0, "ephemAF2" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemAF1), (ASN_TAG_CLASS_CONTEXT | (9 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemAF1_constraint_1, &asn_PER_memb_ephemAF1_constr_11, 0, "ephemAF1" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemAF0), (ASN_TAG_CLASS_CONTEXT | (10 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemAF0_constraint_1, &asn_PER_memb_ephemAF0_constr_12, 0, "ephemAF0" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCrs), (ASN_TAG_CLASS_CONTEXT | (11 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCrs_constraint_1, &asn_PER_memb_ephemCrs_constr_13, 0, "ephemCrs" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemDeltaN), (ASN_TAG_CLASS_CONTEXT | (12 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemDeltaN_constraint_1, &asn_PER_memb_ephemDeltaN_constr_14, 0, "ephemDeltaN" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemM0), (ASN_TAG_CLASS_CONTEXT | (13 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemM0_constraint_1, &asn_PER_memb_ephemM0_constr_15, 0, "ephemM0" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCuc), (ASN_TAG_CLASS_CONTEXT | (14 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCuc_constraint_1, &asn_PER_memb_ephemCuc_constr_16, 0, "ephemCuc" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemE), (ASN_TAG_CLASS_CONTEXT | (15 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ephemE_17, memb_ephemE_constraint_1, &asn_PER_memb_ephemE_constr_17, 0, "ephemE" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCus), (ASN_TAG_CLASS_CONTEXT | (16 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCus_constraint_1, &asn_PER_memb_ephemCus_constr_18, 0, "ephemCus" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemAPowerHalf), (ASN_TAG_CLASS_CONTEXT | (17 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ephemAPowerHalf_19, memb_ephemAPowerHalf_constraint_1, &asn_PER_memb_ephemAPowerHalf_constr_19, 0, "ephemAPowerHalf" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemToe), (ASN_TAG_CLASS_CONTEXT | (18 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemToe_constraint_1, &asn_PER_memb_ephemToe_constr_20, 0, "ephemToe" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemFitFlag), (ASN_TAG_CLASS_CONTEXT | (19 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemFitFlag_constraint_1, &asn_PER_memb_ephemFitFlag_constr_21, 0, "ephemFitFlag" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemAODA), (ASN_TAG_CLASS_CONTEXT | (20 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemAODA_constraint_1, &asn_PER_memb_ephemAODA_constr_22, 0, "ephemAODA" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCic), (ASN_TAG_CLASS_CONTEXT | (21 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCic_constraint_1, &asn_PER_memb_ephemCic_constr_23, 0, "ephemCic" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemOmegaA0), (ASN_TAG_CLASS_CONTEXT | (22 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemOmegaA0_constraint_1, &asn_PER_memb_ephemOmegaA0_constr_24, 0, "ephemOmegaA0" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCis), (ASN_TAG_CLASS_CONTEXT | (23 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCis_constraint_1, &asn_PER_memb_ephemCis_constr_25, 0, "ephemCis" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemI0), (ASN_TAG_CLASS_CONTEXT | (24 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemI0_constraint_1, &asn_PER_memb_ephemI0_constr_26, 0, "ephemI0" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemCrc), (ASN_TAG_CLASS_CONTEXT | (25 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemCrc_constraint_1, &asn_PER_memb_ephemCrc_constr_27, 0, "ephemCrc" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemW), (ASN_TAG_CLASS_CONTEXT | (26 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemW_constraint_1, &asn_PER_memb_ephemW_constr_28, 0, "ephemW" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemOmegaADot), (ASN_TAG_CLASS_CONTEXT | (27 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemOmegaADot_constraint_1, &asn_PER_memb_ephemOmegaADot_constr_29, 0, "ephemOmegaADot" }, { ATF_NOFLAGS, 0, offsetof(struct UncompressedEphemeris, ephemIDot), (ASN_TAG_CLASS_CONTEXT | (28 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ephemIDot_constraint_1, &asn_PER_memb_ephemIDot_constr_30, 0, "ephemIDot" }, }; static ber_tlv_tag_t asn_DEF_UncompressedEphemeris_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_UncompressedEphemeris_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ephemCodeOnL2 at 722 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ephemURA at 723 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ephemSVhealth at 724 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ephemIODC at 725 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ephemL2Pflag at 726 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ephemSF1Rsvd at 727 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ephemTgd at 728 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ephemToc at 729 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* ephemAF2 at 730 */ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* ephemAF1 at 731 */ { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* ephemAF0 at 732 */ { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* ephemCrs at 733 */ { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* ephemDeltaN at 734 */ { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* ephemM0 at 735 */ { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* ephemCuc at 736 */ { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 }, /* ephemE at 737 */ { (ASN_TAG_CLASS_CONTEXT | (16 << 2)), 16, 0, 0 }, /* ephemCus at 738 */ { (ASN_TAG_CLASS_CONTEXT | (17 << 2)), 17, 0, 0 }, /* ephemAPowerHalf at 739 */ { (ASN_TAG_CLASS_CONTEXT | (18 << 2)), 18, 0, 0 }, /* ephemToe at 740 */ { (ASN_TAG_CLASS_CONTEXT | (19 << 2)), 19, 0, 0 }, /* ephemFitFlag at 741 */ { (ASN_TAG_CLASS_CONTEXT | (20 << 2)), 20, 0, 0 }, /* ephemAODA at 742 */ { (ASN_TAG_CLASS_CONTEXT | (21 << 2)), 21, 0, 0 }, /* ephemCic at 743 */ { (ASN_TAG_CLASS_CONTEXT | (22 << 2)), 22, 0, 0 }, /* ephemOmegaA0 at 744 */ { (ASN_TAG_CLASS_CONTEXT | (23 << 2)), 23, 0, 0 }, /* ephemCis at 745 */ { (ASN_TAG_CLASS_CONTEXT | (24 << 2)), 24, 0, 0 }, /* ephemI0 at 746 */ { (ASN_TAG_CLASS_CONTEXT | (25 << 2)), 25, 0, 0 }, /* ephemCrc at 747 */ { (ASN_TAG_CLASS_CONTEXT | (26 << 2)), 26, 0, 0 }, /* ephemW at 748 */ { (ASN_TAG_CLASS_CONTEXT | (27 << 2)), 27, 0, 0 }, /* ephemOmegaADot at 749 */ { (ASN_TAG_CLASS_CONTEXT | (28 << 2)), 28, 0, 0 } /* ephemIDot at 750 */ }; static asn_SEQUENCE_specifics_t asn_SPC_UncompressedEphemeris_specs_1 = { sizeof(struct UncompressedEphemeris), offsetof(struct UncompressedEphemeris, _asn_ctx), asn_MAP_UncompressedEphemeris_tag2el_1, 29, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_UncompressedEphemeris = { "UncompressedEphemeris", "UncompressedEphemeris", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_UncompressedEphemeris_tags_1, sizeof(asn_DEF_UncompressedEphemeris_tags_1) /sizeof(asn_DEF_UncompressedEphemeris_tags_1[0]), /* 1 */ asn_DEF_UncompressedEphemeris_tags_1, /* Same as above */ sizeof(asn_DEF_UncompressedEphemeris_tags_1) /sizeof(asn_DEF_UncompressedEphemeris_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_UncompressedEphemeris_1, 29, /* Elements count */ &asn_SPC_UncompressedEphemeris_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ber_tlv_length.h0000644000175000017500000000277512576764164023156 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_TLV_LENGTH_H_ #define _BER_TLV_LENGTH_H_ #ifdef __cplusplus extern "C" { #endif typedef ssize_t ber_tlv_len_t; /* * This function tries to fetch the length of the BER TLV value and place it * in *len_r. * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering length. * >0: Number of bytes used from bufptr. * On return with >0, len_r is constrained as -1..MAX, where -1 mean * that the value is of indefinite length. */ ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r); /* * This function expects bufptr to be positioned over L in TLV. * It returns number of bytes occupied by L and V together, suitable * for skipping. The function properly handles indefinite length. * RETURN VALUES: * Standard {-1,0,>0} convention. */ ssize_t ber_skip_length( struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ int _is_constructed, const void *bufptr, size_t size); /* * This function serializes the length (L from TLV) in DER format. * It always returns number of bytes necessary to represent the length, * it is a caller's responsibility to check the return value * against the supplied buffer's size. */ size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); #ifdef __cplusplus } #endif #endif /* _BER_TLV_LENGTH_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EnvironmentCharacter.c0000644000175000017500000001277012576764164024270 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "EnvironmentCharacter.h" int EnvironmentCharacter_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void EnvironmentCharacter_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void EnvironmentCharacter_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int EnvironmentCharacter_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t EnvironmentCharacter_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t EnvironmentCharacter_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t EnvironmentCharacter_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t EnvironmentCharacter_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t EnvironmentCharacter_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t EnvironmentCharacter_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { EnvironmentCharacter_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_EnvironmentCharacter_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_EnvironmentCharacter_value2enum_1[] = { { 0, 7, "badArea" }, { 1, 10, "notBadArea" }, { 2, 9, "mixedArea" } /* This list is extensible */ }; static unsigned int asn_MAP_EnvironmentCharacter_enum2value_1[] = { 0, /* badArea(0) */ 2, /* mixedArea(2) */ 1 /* notBadArea(1) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_EnvironmentCharacter_specs_1 = { asn_MAP_EnvironmentCharacter_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_EnvironmentCharacter_enum2value_1, /* N => "tag"; sorted by N */ 3, /* Number of elements in the maps */ 4, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_EnvironmentCharacter_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_EnvironmentCharacter = { "EnvironmentCharacter", "EnvironmentCharacter", EnvironmentCharacter_free, EnvironmentCharacter_print, EnvironmentCharacter_constraint, EnvironmentCharacter_decode_ber, EnvironmentCharacter_encode_der, EnvironmentCharacter_decode_xer, EnvironmentCharacter_encode_xer, EnvironmentCharacter_decode_uper, EnvironmentCharacter_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_EnvironmentCharacter_tags_1, sizeof(asn_DEF_EnvironmentCharacter_tags_1) /sizeof(asn_DEF_EnvironmentCharacter_tags_1[0]), /* 1 */ asn_DEF_EnvironmentCharacter_tags_1, /* Same as above */ sizeof(asn_DEF_EnvironmentCharacter_tags_1) /sizeof(asn_DEF_EnvironmentCharacter_tags_1[0]), /* 1 */ &asn_PER_type_EnvironmentCharacter_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_EnvironmentCharacter_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrAssistData-R98-ExpOTD.h0000644000175000017500000000147012576764164024352 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MsrAssistData_R98_ExpOTD_H_ #define _MsrAssistData_R98_ExpOTD_H_ #include /* Including external dependencies */ #include "SeqOfMsrAssistBTS-R98-ExpOTD.h" #include #ifdef __cplusplus extern "C" { #endif /* MsrAssistData-R98-ExpOTD */ typedef struct MsrAssistData_R98_ExpOTD { SeqOfMsrAssistBTS_R98_ExpOTD_t msrAssistList_R98_ExpOTD; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MsrAssistData_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MsrAssistData_R98_ExpOTD; #ifdef __cplusplus } #endif #endif /* _MsrAssistData_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MeasureInfo.c0000644000175000017500000000347512576764164023015 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPS-MeasureInfo.h" static asn_TYPE_member_t asn_MBR_GPS_MeasureInfo_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GPS_MeasureInfo, gpsMsrSetList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGPS_MsrSetElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "gpsMsrSetList" }, }; static ber_tlv_tag_t asn_DEF_GPS_MeasureInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GPS_MeasureInfo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gpsMsrSetList at 445 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GPS_MeasureInfo_specs_1 = { sizeof(struct GPS_MeasureInfo), offsetof(struct GPS_MeasureInfo, _asn_ctx), asn_MAP_GPS_MeasureInfo_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GPS_MeasureInfo = { "GPS-MeasureInfo", "GPS-MeasureInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPS_MeasureInfo_tags_1, sizeof(asn_DEF_GPS_MeasureInfo_tags_1) /sizeof(asn_DEF_GPS_MeasureInfo_tags_1[0]), /* 1 */ asn_DEF_GPS_MeasureInfo_tags_1, /* Same as above */ sizeof(asn_DEF_GPS_MeasureInfo_tags_1) /sizeof(asn_DEF_GPS_MeasureInfo_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GPS_MeasureInfo_1, 1, /* Elements count */ &asn_SPC_GPS_MeasureInfo_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSAssistanceData.h0000644000175000017500000000175712576764164023420 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSAssistanceData_H_ #define _GPSAssistanceData_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* GPSAssistanceData */ typedef OCTET_STRING_t GPSAssistanceData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSAssistanceData; asn_struct_free_f GPSAssistanceData_free; asn_struct_print_f GPSAssistanceData_print; asn_constr_check_f GPSAssistanceData_constraint; ber_type_decoder_f GPSAssistanceData_decode_ber; der_type_encoder_f GPSAssistanceData_encode_der; xer_type_decoder_f GPSAssistanceData_decode_xer; xer_type_encoder_f GPSAssistanceData_encode_xer; per_type_decoder_f GPSAssistanceData_decode_uper; per_type_encoder_f GPSAssistanceData_encode_uper; #ifdef __cplusplus } #endif #endif /* _GPSAssistanceData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/DGANSSSgnElement.c0000644000175000017500000001372712576764164023113 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "DGANSSSgnElement.h" static int memb_iod_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_udre_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 3)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_pseudoRangeCor_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -2047 && value <= 2047)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_rangeRateCor_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -127 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_iod_constr_3 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_udre_constr_4 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_pseudoRangeCor_constr_5 = { { APC_CONSTRAINED, 12, 12, -2047, 2047 } /* (-2047..2047) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_rangeRateCor_constr_6 = { { APC_CONSTRAINED, 8, 8, -127, 127 } /* (-127..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_DGANSSSgnElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct DGANSSSgnElement, svID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SVID, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "svID" }, { ATF_NOFLAGS, 0, offsetof(struct DGANSSSgnElement, iod), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_iod_constraint_1, &asn_PER_memb_iod_constr_3, 0, "iod" }, { ATF_NOFLAGS, 0, offsetof(struct DGANSSSgnElement, udre), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_udre_constraint_1, &asn_PER_memb_udre_constr_4, 0, "udre" }, { ATF_NOFLAGS, 0, offsetof(struct DGANSSSgnElement, pseudoRangeCor), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_pseudoRangeCor_constraint_1, &asn_PER_memb_pseudoRangeCor_constr_5, 0, "pseudoRangeCor" }, { ATF_NOFLAGS, 0, offsetof(struct DGANSSSgnElement, rangeRateCor), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_rangeRateCor_constraint_1, &asn_PER_memb_rangeRateCor_constr_6, 0, "rangeRateCor" }, }; static ber_tlv_tag_t asn_DEF_DGANSSSgnElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_DGANSSSgnElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* svID at 1207 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iod at 1210 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* udre at 1213 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pseudoRangeCor at 1217 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* rangeRateCor at 1221 */ }; static asn_SEQUENCE_specifics_t asn_SPC_DGANSSSgnElement_specs_1 = { sizeof(struct DGANSSSgnElement), offsetof(struct DGANSSSgnElement, _asn_ctx), asn_MAP_DGANSSSgnElement_tag2el_1, 5, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_DGANSSSgnElement = { "DGANSSSgnElement", "DGANSSSgnElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_DGANSSSgnElement_tags_1, sizeof(asn_DEF_DGANSSSgnElement_tags_1) /sizeof(asn_DEF_DGANSSSgnElement_tags_1[0]), /* 1 */ asn_DEF_DGANSSSgnElement_tags_1, /* Same as above */ sizeof(asn_DEF_DGANSSSgnElement_tags_1) /sizeof(asn_DEF_DGANSSSgnElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_DGANSSSgnElement_1, 5, /* Elements count */ &asn_SPC_DGANSSSgnElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MsrPosition-Rsp.h0000644000175000017500000000351612576764164023202 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MsrPosition_Rsp_H_ #define _MsrPosition_Rsp_H_ #include /* Including external dependencies */ #include "ExtensionContainer.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct MultipleSets; struct ReferenceIdentity; struct OTD_MeasureInfo; struct LocationInfo; struct GPS_MeasureInfo; struct LocationError; struct Rel_98_MsrPosition_Rsp_Extension; struct Rel_5_MsrPosition_Rsp_Extension; /* MsrPosition-Rsp */ typedef struct MsrPosition_Rsp { struct MultipleSets *multipleSets /* OPTIONAL */; struct ReferenceIdentity *referenceIdentity /* OPTIONAL */; struct OTD_MeasureInfo *otd_MeasureInfo /* OPTIONAL */; struct LocationInfo *locationInfo /* OPTIONAL */; struct GPS_MeasureInfo *gps_MeasureInfo /* OPTIONAL */; struct LocationError *locationError /* OPTIONAL */; ExtensionContainer_t *extensionContainer /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ struct Rel_98_MsrPosition_Rsp_Extension *rel_98_MsrPosition_Rsp_Extension /* OPTIONAL */; struct Rel_5_MsrPosition_Rsp_Extension *rel_5_MsrPosition_Rsp_Extension /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MsrPosition_Rsp_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MsrPosition_Rsp; #ifdef __cplusplus } #endif /* Referred external types */ #include "MultipleSets.h" #include "ReferenceIdentity.h" #include "OTD-MeasureInfo.h" #include "LocationInfo.h" #include "GPS-MeasureInfo.h" #include "LocationError.h" #include "Rel-98-MsrPosition-Rsp-Extension.h" #include "Rel-5-MsrPosition-Rsp-Extension.h" #endif /* _MsrPosition_Rsp_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/asn_internal.h0000644000175000017500000000671712576764164022635 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Declarations internally useful for the ASN.1 support code. */ #ifndef _ASN_INTERNAL_H_ #define _ASN_INTERNAL_H_ #include "asn_application.h" /* Application-visible API */ #ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ #include /* for assert() macro */ #endif #ifdef __cplusplus extern "C" { #endif /* Environment version might be used to avoid running with the old library */ #define ASN1C_ENVIRONMENT_VERSION 922 /* Compile-time version */ int get_asn1c_environment_version(void); /* Run-time version */ #define CALLOC(nmemb, size) calloc(nmemb, size) #define MALLOC(size) malloc(size) #define REALLOC(oldptr, size) realloc(oldptr, size) #define FREEMEM(ptr) free(ptr) /* * A macro for debugging the ASN.1 internals. * You may enable or override it. */ #ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ #if EMIT_ASN_DEBUG == 1 /* And it was asked to emit this code... */ #ifdef __GNUC__ #ifdef ASN_THREAD_SAFE #define asn_debug_indent 0 #else /* !ASN_THREAD_SAFE */ int asn_debug_indent; #endif /* ASN_THREAD_SAFE */ #define ASN_DEBUG(fmt, args...) do { \ int adi = asn_debug_indent; \ while(adi--) fprintf(stderr, " "); \ fprintf(stderr, fmt, ##args); \ fprintf(stderr, " (%s:%d)\n", \ __FILE__, __LINE__); \ } while(0) #else /* !__GNUC__ */ void ASN_DEBUG_f(const char *fmt, ...); #define ASN_DEBUG ASN_DEBUG_f #endif /* __GNUC__ */ #else /* EMIT_ASN_DEBUG != 1 */ static inline void ASN_DEBUG(const char *fmt, ...) { (void)fmt; } #endif /* EMIT_ASN_DEBUG */ #endif /* ASN_DEBUG */ /* * Invoke the application-supplied callback and fail, if something is wrong. */ #define __ASN_E_cbc(buf, size) (cb((buf), (size), app_key) < 0) #define _ASN_E_CALLBACK(foo) do { \ if(foo) goto cb_failed; \ } while(0) #define _ASN_CALLBACK(buf, size) \ _ASN_E_CALLBACK(__ASN_E_cbc(buf, size)) #define _ASN_CALLBACK2(buf1, size1, buf2, size2) \ _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) || __ASN_E_cbc(buf2, size2)) #define _ASN_CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) \ || __ASN_E_cbc(buf2, size2) \ || __ASN_E_cbc(buf3, size3)) #define _i_ASN_TEXT_INDENT(nl, level) do { \ int __level = (level); \ int __nl = ((nl) != 0); \ int __i; \ if(__nl) _ASN_CALLBACK("\n", 1); \ if(__level < 0) __level = 0; \ for(__i = 0; __i < __level; __i++) \ _ASN_CALLBACK(" ", 4); \ er.encoded += __nl + 4 * __level; \ } while(0) #define _i_INDENT(nl) do { \ int __i; \ if((nl) && cb("\n", 1, app_key) < 0) return -1; \ for(__i = 0; __i < ilevel; __i++) \ if(cb(" ", 4, app_key) < 0) return -1; \ } while(0) /* * Check stack against overflow, if limit is set. */ #define _ASN_DEFAULT_STACK_MAX (30000) static inline int _ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) { if(ctx && ctx->max_stack_size) { /* ctx MUST be allocated on the stack */ ptrdiff_t usedstack = ((char *)ctx - (char *)&ctx); if(usedstack > 0) usedstack = -usedstack; /* grows up! */ /* double negative required to avoid int wrap-around */ if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { ASN_DEBUG("Stack limit %ld reached", (long)ctx->max_stack_size); return -1; } } return 0; } #ifdef __cplusplus } #endif #endif /* _ASN_INTERNAL_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Almanac-KeplerianSet.c0000644000175000017500000003077612576764164024075 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Almanac-KeplerianSet.h" static int memb_kepAlmanacE_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 2047)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacDeltaI_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -1024 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacOmegaDot_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -1024 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepSVHealth_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 15)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacAPowerHalf_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -65536 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacOmega0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacW_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacM0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -32768 && value <= 32767)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacAF0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -8192 && value <= 8191)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_kepAlmanacAF1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -1024 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_kepAlmanacE_constr_2 = { { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacDeltaI_constr_3 = { { APC_CONSTRAINED, 11, 11, -1024, 1023 } /* (-1024..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacOmegaDot_constr_4 = { { APC_CONSTRAINED, 11, 11, -1024, 1023 } /* (-1024..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepSVHealth_constr_5 = { { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacAPowerHalf_constr_6 = { { APC_CONSTRAINED, 17, -1, -65536, 65535 } /* (-65536..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacOmega0_constr_7 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacW_constr_8 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacM0_constr_9 = { { APC_CONSTRAINED, 16, 16, -32768, 32767 } /* (-32768..32767) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacAF0_constr_10 = { { APC_CONSTRAINED, 14, 14, -8192, 8191 } /* (-8192..8191) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_kepAlmanacAF1_constr_11 = { { APC_CONSTRAINED, 11, 11, -1024, 1023 } /* (-1024..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Almanac_KeplerianSet_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacE), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacE_constraint_1, &asn_PER_memb_kepAlmanacE_constr_2, 0, "kepAlmanacE" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacDeltaI), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacDeltaI_constraint_1, &asn_PER_memb_kepAlmanacDeltaI_constr_3, 0, "kepAlmanacDeltaI" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacOmegaDot), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacOmegaDot_constraint_1, &asn_PER_memb_kepAlmanacOmegaDot_constr_4, 0, "kepAlmanacOmegaDot" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepSVHealth), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepSVHealth_constraint_1, &asn_PER_memb_kepSVHealth_constr_5, 0, "kepSVHealth" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacAPowerHalf), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacAPowerHalf_constraint_1, &asn_PER_memb_kepAlmanacAPowerHalf_constr_6, 0, "kepAlmanacAPowerHalf" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacOmega0), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacOmega0_constraint_1, &asn_PER_memb_kepAlmanacOmega0_constr_7, 0, "kepAlmanacOmega0" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacW), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacW_constraint_1, &asn_PER_memb_kepAlmanacW_constr_8, 0, "kepAlmanacW" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacM0), (ASN_TAG_CLASS_CONTEXT | (7 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacM0_constraint_1, &asn_PER_memb_kepAlmanacM0_constr_9, 0, "kepAlmanacM0" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacAF0), (ASN_TAG_CLASS_CONTEXT | (8 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacAF0_constraint_1, &asn_PER_memb_kepAlmanacAF0_constr_10, 0, "kepAlmanacAF0" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac_KeplerianSet, kepAlmanacAF1), (ASN_TAG_CLASS_CONTEXT | (9 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_kepAlmanacAF1_constraint_1, &asn_PER_memb_kepAlmanacAF1_constr_11, 0, "kepAlmanacAF1" }, }; static ber_tlv_tag_t asn_DEF_Almanac_KeplerianSet_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Almanac_KeplerianSet_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* kepAlmanacE at 1368 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* kepAlmanacDeltaI at 1369 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* kepAlmanacOmegaDot at 1370 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* kepSVHealth at 1371 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* kepAlmanacAPowerHalf at 1372 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* kepAlmanacOmega0 at 1373 */ { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* kepAlmanacW at 1374 */ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* kepAlmanacM0 at 1375 */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* kepAlmanacAF0 at 1376 */ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* kepAlmanacAF1 at 1377 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Almanac_KeplerianSet_specs_1 = { sizeof(struct Almanac_KeplerianSet), offsetof(struct Almanac_KeplerianSet, _asn_ctx), asn_MAP_Almanac_KeplerianSet_tag2el_1, 10, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Almanac_KeplerianSet = { "Almanac-KeplerianSet", "Almanac-KeplerianSet", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Almanac_KeplerianSet_tags_1, sizeof(asn_DEF_Almanac_KeplerianSet_tags_1) /sizeof(asn_DEF_Almanac_KeplerianSet_tags_1[0]), /* 1 */ asn_DEF_Almanac_KeplerianSet_tags_1, /* Same as above */ sizeof(asn_DEF_Almanac_KeplerianSet_tags_1) /sizeof(asn_DEF_Almanac_KeplerianSet_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Almanac_KeplerianSet_1, 10, /* Elements count */ &asn_SPC_Almanac_KeplerianSet_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BIT_STRING.c0000644000175000017500000001074012576764164021646 0ustar carlescarles/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * BIT STRING basic type description. */ static ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; static asn_OCTET_STRING_specifics_t asn_DEF_BIT_STRING_specs = { sizeof(BIT_STRING_t), offsetof(BIT_STRING_t, _asn_ctx), ASN_OSUBV_BIT }; asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { "BIT STRING", "BIT_STRING", OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ BIT_STRING_print, BIT_STRING_constraint, OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ OCTET_STRING_decode_xer_binary, BIT_STRING_encode_xer, OCTET_STRING_decode_uper, /* Unaligned PER decoder */ OCTET_STRING_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_BIT_STRING_tags, sizeof(asn_DEF_BIT_STRING_tags) / sizeof(asn_DEF_BIT_STRING_tags[0]), asn_DEF_BIT_STRING_tags, /* Same as above */ sizeof(asn_DEF_BIT_STRING_tags) / sizeof(asn_DEF_BIT_STRING_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ &asn_DEF_BIT_STRING_specs }; /* * BIT STRING generic constraint. */ int BIT_STRING_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; if(st && st->buf) { if((st->size == 0 && st->bits_unused) || st->bits_unused < 0 || st->bits_unused > 7) { _ASN_CTFAIL(app_key, td, sptr, "%s: invalid padding byte (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } else { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } return 0; } static char *_bit_pattern[16] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; asn_enc_rval_t BIT_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; char scratch[128]; char *p = scratch; char *scend = scratch + (sizeof(scratch) - 10); const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; int xcan = (flags & XER_F_CANONICAL); uint8_t *buf; uint8_t *end; if(!st || !st->buf) _ASN_ENCODE_FAILED; er.encoded = 0; buf = st->buf; end = buf + st->size - 1; /* Last byte is special */ /* * Binary dump */ for(; buf < end; buf++) { int v = *buf; int nline = xcan?0:(((buf - st->buf) % 8) == 0); if(p >= scend || nline) { er.encoded += p - scratch; _ASN_CALLBACK(scratch, p - scratch); p = scratch; if(nline) _i_ASN_TEXT_INDENT(1, ilevel); } memcpy(p + 0, _bit_pattern[v >> 4], 4); memcpy(p + 4, _bit_pattern[v & 0x0f], 4); p += 8; } if(!xcan && ((buf - st->buf) % 8) == 0) _i_ASN_TEXT_INDENT(1, ilevel); er.encoded += p - scratch; _ASN_CALLBACK(scratch, p - scratch); p = scratch; if(buf == end) { int v = *buf; int ubits = st->bits_unused; int i; for(i = 7; i >= ubits; i--) *p++ = (v & (1 << i)) ? 0x31 : 0x30; er.encoded += p - scratch; _ASN_CALLBACK(scratch, p - scratch); } if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); _ASN_ENCODED_OK(er); cb_failed: _ASN_ENCODE_FAILED; } /* * BIT STRING specific contents printer. */ int BIT_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { static const char *h2c = "0123456789ABCDEF"; char scratch[64]; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; uint8_t *buf; uint8_t *end; char *p = scratch; (void)td; /* Unused argument */ if(!st || !st->buf) return (cb("", 8, app_key) < 0) ? -1 : 0; ilevel++; buf = st->buf; end = buf + st->size; /* * Hexadecimal dump. */ for(; buf < end; buf++) { if((buf - st->buf) % 16 == 0 && (st->size > 16) && buf != st->buf) { _i_INDENT(1); /* Dump the string */ if(cb(scratch, p - scratch, app_key) < 0) return -1; p = scratch; } *p++ = h2c[*buf >> 4]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p > scratch) { p--; /* Eat the tailing space */ if((st->size > 16)) { _i_INDENT(1); } /* Dump the incomplete 16-bytes row */ if(cb(scratch, p - scratch, app_key) < 0) return -1; } return 0; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-SgnTypeElement.c0000644000175000017500000000575212576764164023725 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSS-SgnTypeElement.h" static int memb_ganssSignalID_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 15)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_ganssSignalID_constr_2 = { { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSS_SgnTypeElement_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnTypeElement, ganssSignalID), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_ganssSignalID_constraint_1, &asn_PER_memb_ganssSignalID_constr_2, 0, "ganssSignalID" }, { ATF_NOFLAGS, 0, offsetof(struct GANSS_SgnTypeElement, ganss_SgnList), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSS_SgnElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganss-SgnList" }, }; static ber_tlv_tag_t asn_DEF_GANSS_SgnTypeElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSS_SgnTypeElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssSignalID at 1469 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ganss-SgnList at 1472 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSS_SgnTypeElement_specs_1 = { sizeof(struct GANSS_SgnTypeElement), offsetof(struct GANSS_SgnTypeElement, _asn_ctx), asn_MAP_GANSS_SgnTypeElement_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSS_SgnTypeElement = { "GANSS-SgnTypeElement", "GANSS-SgnTypeElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSS_SgnTypeElement_tags_1, sizeof(asn_DEF_GANSS_SgnTypeElement_tags_1) /sizeof(asn_DEF_GANSS_SgnTypeElement_tags_1[0]), /* 1 */ asn_DEF_GANSS_SgnTypeElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSS_SgnTypeElement_tags_1) /sizeof(asn_DEF_GANSS_SgnTypeElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSS_SgnTypeElement_1, 2, /* Elements count */ &asn_SPC_GANSS_SgnTypeElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OCTET_STRING.h0000644000175000017500000000540312576764164022113 0ustar carlescarles/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _OCTET_STRING_H_ #define _OCTET_STRING_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct OCTET_STRING { uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ int size; /* Size of the buffer */ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ } OCTET_STRING_t; extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; asn_struct_free_f OCTET_STRING_free; asn_struct_print_f OCTET_STRING_print; asn_struct_print_f OCTET_STRING_print_utf8; ber_type_decoder_f OCTET_STRING_decode_ber; der_type_encoder_f OCTET_STRING_encode_der; xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ xer_type_encoder_f OCTET_STRING_encode_xer; xer_type_encoder_f OCTET_STRING_encode_xer_utf8; per_type_decoder_f OCTET_STRING_decode_uper; per_type_encoder_f OCTET_STRING_encode_uper; /****************************** * Handy conversion routines. * ******************************/ /* * This function clears the previous value of the OCTET STRING (if any) * and then allocates a new memory with the specified content (str/size). * If size = -1, the size of the original string will be determined * using strlen(str). * If str equals to NULL, the function will silently clear the * current contents of the OCTET STRING. * Returns 0 if it was possible to perform operation, -1 otherwise. */ int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); /* Handy conversion from the C string into the OCTET STRING. */ #define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) /* * Allocate and fill the new OCTET STRING and return a pointer to the newly * allocated object. NULL is permitted in str: the function will just allocate * empty OCTET STRING. */ OCTET_STRING_t *OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int size); /**************************** * Internally useful stuff. * ****************************/ typedef struct asn_OCTET_STRING_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the structure */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ enum asn_OS_Subvariant { ASN_OSUBV_ANY, /* The open type (ANY) */ ASN_OSUBV_BIT, /* BIT STRING */ ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ ASN_OSUBV_U16, /* 16-bit character (BMPString) */ ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ } subvariant; } asn_OCTET_STRING_specifics_t; #ifdef __cplusplus } #endif #endif /* _OCTET_STRING_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSReferenceTime.h0000644000175000017500000000170712576764164023463 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSReferenceTime_H_ #define _GANSSReferenceTime_H_ #include /* Including external dependencies */ #include "GANSSRefTimeInfo.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSTOD_GSMTimeAssociation; /* GANSSReferenceTime */ typedef struct GANSSReferenceTime { GANSSRefTimeInfo_t ganssRefTimeInfo; struct GANSSTOD_GSMTimeAssociation *ganssTOD_GSMTimeAssociation /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSReferenceTime_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSReferenceTime; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSTOD-GSMTimeAssociation.h" #endif /* _GANSSReferenceTime_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TimeSlotScheme.c0000644000175000017500000001216112576764164023026 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TimeSlotScheme.h" int TimeSlotScheme_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void TimeSlotScheme_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void TimeSlotScheme_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TimeSlotScheme_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TimeSlotScheme_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TimeSlotScheme_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TimeSlotScheme_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TimeSlotScheme_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TimeSlotScheme_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TimeSlotScheme_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TimeSlotScheme_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TimeSlotScheme_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_TimeSlotScheme_value2enum_1[] = { { 0, 11, "equalLength" }, { 1, 13, "variousLength" } }; static unsigned int asn_MAP_TimeSlotScheme_enum2value_1[] = { 0, /* equalLength(0) */ 1 /* variousLength(1) */ }; static asn_INTEGER_specifics_t asn_SPC_TimeSlotScheme_specs_1 = { asn_MAP_TimeSlotScheme_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_TimeSlotScheme_enum2value_1, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ 0, /* Enumeration is not extensible */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_TimeSlotScheme_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TimeSlotScheme = { "TimeSlotScheme", "TimeSlotScheme", TimeSlotScheme_free, TimeSlotScheme_print, TimeSlotScheme_constraint, TimeSlotScheme_decode_ber, TimeSlotScheme_encode_der, TimeSlotScheme_decode_xer, TimeSlotScheme_encode_xer, TimeSlotScheme_decode_uper, TimeSlotScheme_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TimeSlotScheme_tags_1, sizeof(asn_DEF_TimeSlotScheme_tags_1) /sizeof(asn_DEF_TimeSlotScheme_tags_1[0]), /* 1 */ asn_DEF_TimeSlotScheme_tags_1, /* Same as above */ sizeof(asn_DEF_TimeSlotScheme_tags_1) /sizeof(asn_DEF_TimeSlotScheme_tags_1[0]), /* 1 */ &asn_PER_type_TimeSlotScheme_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_TimeSlotScheme_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AlertFlag.h0000644000175000017500000000155612576764164022015 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _AlertFlag_H_ #define _AlertFlag_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* AlertFlag */ typedef long AlertFlag_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_AlertFlag; asn_struct_free_f AlertFlag_free; asn_struct_print_f AlertFlag_print; asn_constr_check_f AlertFlag_constraint; ber_type_decoder_f AlertFlag_decode_ber; der_type_encoder_f AlertFlag_encode_der; xer_type_decoder_f AlertFlag_decode_xer; xer_type_encoder_f AlertFlag_encode_xer; per_type_decoder_f AlertFlag_decode_uper; per_type_encoder_f AlertFlag_encode_uper; #ifdef __cplusplus } #endif #endif /* _AlertFlag_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRealTimeIntegrity.h0000644000175000017500000000142612576764164024345 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSRealTimeIntegrity_H_ #define _GANSSRealTimeIntegrity_H_ #include /* Including external dependencies */ #include "SeqOfBadSignalElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSRealTimeIntegrity */ typedef struct GANSSRealTimeIntegrity { SeqOfBadSignalElement_t ganssBadSignalList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSRealTimeIntegrity_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSRealTimeIntegrity; #ifdef __cplusplus } #endif #endif /* _GANSSRealTimeIntegrity_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSNavModel.h0000644000175000017500000000156212576764164022452 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSNavModel_H_ #define _GANSSNavModel_H_ #include /* Including external dependencies */ #include #include "SeqOfGANSSSatelliteElement.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSNavModel */ typedef struct GANSSNavModel { long nonBroadcastIndFlag; long *toeMSB /* OPTIONAL */; long *eMSB /* OPTIONAL */; long *sqrtAMBS /* OPTIONAL */; SeqOfGANSSSatelliteElement_t ganssSatelliteList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSNavModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSNavModel; #ifdef __cplusplus } #endif #endif /* _GANSSNavModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfDGANSSSgnElement.c0000644000175000017500000000344112576764164024041 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SeqOfDGANSSSgnElement.h" static asn_per_constraints_t asn_PER_type_SeqOfDGANSSSgnElement_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SeqOfDGANSSSgnElement_1[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, &asn_DEF_DGANSSSgnElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static ber_tlv_tag_t asn_DEF_SeqOfDGANSSSgnElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SeqOfDGANSSSgnElement_specs_1 = { sizeof(struct SeqOfDGANSSSgnElement), offsetof(struct SeqOfDGANSSSgnElement, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; asn_TYPE_descriptor_t asn_DEF_SeqOfDGANSSSgnElement = { "SeqOfDGANSSSgnElement", "SeqOfDGANSSSgnElement", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_SeqOfDGANSSSgnElement_tags_1, sizeof(asn_DEF_SeqOfDGANSSSgnElement_tags_1) /sizeof(asn_DEF_SeqOfDGANSSSgnElement_tags_1[0]), /* 1 */ asn_DEF_SeqOfDGANSSSgnElement_tags_1, /* Same as above */ sizeof(asn_DEF_SeqOfDGANSSSgnElement_tags_1) /sizeof(asn_DEF_SeqOfDGANSSSgnElement_tags_1[0]), /* 1 */ &asn_PER_type_SeqOfDGANSSSgnElement_constr_1, asn_MBR_SeqOfDGANSSSgnElement_1, 1, /* Single element */ &asn_SPC_SeqOfDGANSSSgnElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/FineRTD.h0000644000175000017500000000152012576764164021376 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _FineRTD_H_ #define _FineRTD_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* FineRTD */ typedef long FineRTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_FineRTD; asn_struct_free_f FineRTD_free; asn_struct_print_f FineRTD_print; asn_constr_check_f FineRTD_constraint; ber_type_decoder_f FineRTD_decode_ber; der_type_encoder_f FineRTD_encode_der; xer_type_decoder_f FineRTD_decode_xer; xer_type_encoder_f FineRTD_encode_xer; per_type_decoder_f FineRTD_decode_uper; per_type_encoder_f FineRTD_encode_uper; #ifdef __cplusplus } #endif #endif /* _FineRTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSS-MsrSetElement.h0000644000175000017500000000163412576764164024507 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSS_MsrSetElement_H_ #define _SeqOfGANSS_MsrSetElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSS_MsrSetElement; /* SeqOfGANSS-MsrSetElement */ typedef struct SeqOfGANSS_MsrSetElement { A_SEQUENCE_OF(struct GANSS_MsrSetElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSS_MsrSetElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSS_MsrSetElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSS-MsrSetElement.h" #endif /* _SeqOfGANSS_MsrSetElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/per_decoder.c0000644000175000017500000000475212576764164022423 0ustar carlescarles#include #include #include /* * Decode a "Production of a complete encoding", X.691#10.1. * The complete encoding contains at least one byte, and is an integral * multiple of 8 bytes. */ asn_dec_rval_t uper_decode_complete(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size) { asn_dec_rval_t rval; rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); if(rval.consumed) { /* * We've always given 8-aligned data, * so convert bits to integral bytes. */ rval.consumed += 7; rval.consumed >>= 3; } else if(rval.code == RC_OK) { if(size) { if(((uint8_t *)buffer)[0] == 0) { rval.consumed = 1; /* 1 byte */ } else { ASN_DEBUG("Expecting single zeroed byte"); rval.code = RC_FAIL; } } else { /* Must contain at least 8 bits. */ rval.code = RC_WMORE; } } return rval; } asn_dec_rval_t uper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size, int skip_bits, int unused_bits) { asn_codec_ctx_t s_codec_ctx; asn_dec_rval_t rval; asn_per_data_t pd; if(skip_bits < 0 || skip_bits > 7 || unused_bits < 0 || unused_bits > 7 || (unused_bits > 0 && !size)) _ASN_DECODE_FAILED; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* Fill in the position indicator */ memset(&pd, 0, sizeof(pd)); pd.buffer = (const uint8_t *)buffer; pd.nboff = skip_bits; pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ if(pd.nboff > pd.nbits) _ASN_DECODE_FAILED; /* * Invoke type-specific decoder. */ if(!td->uper_decoder) _ASN_DECODE_FAILED; /* PER is not compiled in */ rval = td->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); if(rval.code == RC_OK) { /* Return the number of consumed bits */ rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + pd.nboff - skip_bits; ASN_DEBUG("PER decoding consumed %d, counted %d", rval.consumed, pd.moved); assert(rval.consumed == pd.moved); } else { /* PER codec is not a restartable */ rval.consumed = 0; } return rval; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CalcAssistanceBTS.c0000644000175000017500000000430312576764164023371 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "CalcAssistanceBTS.h" static asn_TYPE_member_t asn_MBR_CalcAssistanceBTS_1[] = { { ATF_NOFLAGS, 0, offsetof(struct CalcAssistanceBTS, fineRTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_FineRTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "fineRTD" }, { ATF_NOFLAGS, 0, offsetof(struct CalcAssistanceBTS, referenceWGS84), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceWGS84, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceWGS84" }, }; static ber_tlv_tag_t asn_DEF_CalcAssistanceBTS_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_CalcAssistanceBTS_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fineRTD at 241 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* referenceWGS84 at 243 */ }; static asn_SEQUENCE_specifics_t asn_SPC_CalcAssistanceBTS_specs_1 = { sizeof(struct CalcAssistanceBTS), offsetof(struct CalcAssistanceBTS, _asn_ctx), asn_MAP_CalcAssistanceBTS_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_CalcAssistanceBTS = { "CalcAssistanceBTS", "CalcAssistanceBTS", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CalcAssistanceBTS_tags_1, sizeof(asn_DEF_CalcAssistanceBTS_tags_1) /sizeof(asn_DEF_CalcAssistanceBTS_tags_1[0]), /* 1 */ asn_DEF_CalcAssistanceBTS_tags_1, /* Same as above */ sizeof(asn_DEF_CalcAssistanceBTS_tags_1) /sizeof(asn_DEF_CalcAssistanceBTS_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_CalcAssistanceBTS_1, 2, /* Elements count */ &asn_SPC_CalcAssistanceBTS_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/LocErrorReason.c0000644000175000017500000001402712576764164023043 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "LocErrorReason.h" int LocErrorReason_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_ENUMERATED.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using ENUMERATED, * so here we adjust the DEF accordingly. */ static void LocErrorReason_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_ENUMERATED.free_struct; td->print_struct = asn_DEF_ENUMERATED.print_struct; td->ber_decoder = asn_DEF_ENUMERATED.ber_decoder; td->der_encoder = asn_DEF_ENUMERATED.der_encoder; td->xer_decoder = asn_DEF_ENUMERATED.xer_decoder; td->xer_encoder = asn_DEF_ENUMERATED.xer_encoder; td->uper_decoder = asn_DEF_ENUMERATED.uper_decoder; td->uper_encoder = asn_DEF_ENUMERATED.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_ENUMERATED.per_constraints; td->elements = asn_DEF_ENUMERATED.elements; td->elements_count = asn_DEF_ENUMERATED.elements_count; /* td->specifics = asn_DEF_ENUMERATED.specifics; // Defined explicitly */ } void LocErrorReason_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { LocErrorReason_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int LocErrorReason_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t LocErrorReason_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t LocErrorReason_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t LocErrorReason_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t LocErrorReason_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t LocErrorReason_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t LocErrorReason_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { LocErrorReason_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_LocErrorReason_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 10 } /* (0..10,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_INTEGER_enum_map_t asn_MAP_LocErrorReason_value2enum_1[] = { { 0, 9, "unDefined" }, { 1, 13, "notEnoughBTSs" }, { 2, 13, "notEnoughSats" }, { 3, 24, "eotdLocCalAssDataMissing" }, { 4, 18, "eotdAssDataMissing" }, { 5, 23, "gpsLocCalAssDataMissing" }, { 6, 17, "gpsAssDataMissing" }, { 7, 18, "methodNotSupported" }, { 8, 12, "notProcessed" }, { 9, 25, "refBTSForGPSNotServingBTS" }, { 10, 26, "refBTSForEOTDNotServingBTS" }, { 11, 18, "notEnoughGANSSSats" }, { 12, 19, "ganssAssDataMissing" }, { 13, 27, "refBTSForGANSSNotServingBTS" } /* This list is extensible */ }; static unsigned int asn_MAP_LocErrorReason_enum2value_1[] = { 4, /* eotdAssDataMissing(4) */ 3, /* eotdLocCalAssDataMissing(3) */ 12, /* ganssAssDataMissing(12) */ 6, /* gpsAssDataMissing(6) */ 5, /* gpsLocCalAssDataMissing(5) */ 7, /* methodNotSupported(7) */ 1, /* notEnoughBTSs(1) */ 11, /* notEnoughGANSSSats(11) */ 2, /* notEnoughSats(2) */ 8, /* notProcessed(8) */ 10, /* refBTSForEOTDNotServingBTS(10) */ 13, /* refBTSForGANSSNotServingBTS(13) */ 9, /* refBTSForGPSNotServingBTS(9) */ 0 /* unDefined(0) */ /* This list is extensible */ }; static asn_INTEGER_specifics_t asn_SPC_LocErrorReason_specs_1 = { asn_MAP_LocErrorReason_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_LocErrorReason_enum2value_1, /* N => "tag"; sorted by N */ 14, /* Number of elements in the maps */ 12, /* Extensions before this member */ 1, /* Strict enumeration */ 0, /* Native long size */ 0 }; static ber_tlv_tag_t asn_DEF_LocErrorReason_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_LocErrorReason = { "LocErrorReason", "LocErrorReason", LocErrorReason_free, LocErrorReason_print, LocErrorReason_constraint, LocErrorReason_decode_ber, LocErrorReason_encode_der, LocErrorReason_decode_xer, LocErrorReason_encode_xer, LocErrorReason_decode_uper, LocErrorReason_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_LocErrorReason_tags_1, sizeof(asn_DEF_LocErrorReason_tags_1) /sizeof(asn_DEF_LocErrorReason_tags_1[0]), /* 1 */ asn_DEF_LocErrorReason_tags_1, /* Same as above */ sizeof(asn_DEF_LocErrorReason_tags_1) /sizeof(asn_DEF_LocErrorReason_tags_1[0]), /* 1 */ &asn_PER_type_LocErrorReason_constr_1, 0, 0, /* Defined elsewhere */ &asn_SPC_LocErrorReason_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSCommonAssistData.c0000644000175000017500000000552512576764164024154 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSSCommonAssistData.h" static asn_TYPE_member_t asn_MBR_GANSSCommonAssistData_1[] = { { ATF_POINTER, 3, offsetof(struct GANSSCommonAssistData, ganssReferenceTime), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSReferenceTime, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssReferenceTime" }, { ATF_POINTER, 2, offsetof(struct GANSSCommonAssistData, ganssRefLocation), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSRefLocation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssRefLocation" }, { ATF_POINTER, 1, offsetof(struct GANSSCommonAssistData, ganssIonosphericModel), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSIonosphericModel, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssIonosphericModel" }, }; static int asn_MAP_GANSSCommonAssistData_oms_1[] = { 0, 1, 2 }; static ber_tlv_tag_t asn_DEF_GANSSCommonAssistData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSSCommonAssistData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ganssReferenceTime at 1071 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssRefLocation at 1072 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ganssIonosphericModel at 1073 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSSCommonAssistData_specs_1 = { sizeof(struct GANSSCommonAssistData), offsetof(struct GANSSCommonAssistData, _asn_ctx), asn_MAP_GANSSCommonAssistData_tag2el_1, 3, /* Count of tags in the map */ asn_MAP_GANSSCommonAssistData_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ 2, /* Start extensions */ 4 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSSCommonAssistData = { "GANSSCommonAssistData", "GANSSCommonAssistData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSSCommonAssistData_tags_1, sizeof(asn_DEF_GANSSCommonAssistData_tags_1) /sizeof(asn_DEF_GANSSCommonAssistData_tags_1[0]), /* 1 */ asn_DEF_GANSSCommonAssistData_tags_1, /* Same as above */ sizeof(asn_DEF_GANSSCommonAssistData_tags_1) /sizeof(asn_DEF_GANSSCommonAssistData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSSCommonAssistData_1, 3, /* Elements count */ &asn_SPC_GANSSCommonAssistData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constr_CHOICE.h0000644000175000017500000000256612576764164022500 0ustar carlescarles/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_CHOICE_H_ #define _CONSTR_CHOICE_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct asn_CHOICE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_codec_ctx_t member */ int pres_offset; /* Identifier of the present member */ int pres_size; /* Size of the identifier (enum) */ /* * Tags to members mapping table. */ asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* Canonical ordering of CHOICE elements, for PER */ int *canonical_order; /* * Extensions-related stuff. */ int ext_start; /* First member of extensions, or -1 */ } asn_CHOICE_specifics_t; /* * A set specialized functions dealing with the CHOICE type. */ asn_struct_free_f CHOICE_free; asn_struct_print_f CHOICE_print; asn_constr_check_f CHOICE_constraint; ber_type_decoder_f CHOICE_decode_ber; der_type_encoder_f CHOICE_encode_der; xer_type_decoder_f CHOICE_decode_xer; xer_type_encoder_f CHOICE_encode_xer; per_type_decoder_f CHOICE_decode_uper; per_type_encoder_f CHOICE_encode_uper; asn_outmost_tag_f CHOICE_outmost_tag; #ifdef __cplusplus } #endif #endif /* _CONSTR_CHOICE_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/DGPSCorrections.h0000644000175000017500000000140712576764164023117 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _DGPSCorrections_H_ #define _DGPSCorrections_H_ #include /* Including external dependencies */ #include #include "SeqOfSatElement.h" #include #ifdef __cplusplus extern "C" { #endif /* DGPSCorrections */ typedef struct DGPSCorrections { long gpsTOW; long status; SeqOfSatElement_t satList; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } DGPSCorrections_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_DGPSCorrections; #ifdef __cplusplus } #endif #endif /* _DGPSCorrections_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/CellID.c0000644000175000017500000001065112576764164021237 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "CellID.h" int CellID_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 65535)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void CellID_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void CellID_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { CellID_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int CellID_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { CellID_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t CellID_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { CellID_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t CellID_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { CellID_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t CellID_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { CellID_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t CellID_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { CellID_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t CellID_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { CellID_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t CellID_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { CellID_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_CellID_constr_1 = { { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_CellID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_CellID = { "CellID", "CellID", CellID_free, CellID_print, CellID_constraint, CellID_decode_ber, CellID_encode_der, CellID_decode_xer, CellID_encode_xer, CellID_decode_uper, CellID_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_CellID_tags_1, sizeof(asn_DEF_CellID_tags_1) /sizeof(asn_DEF_CellID_tags_1[0]), /* 1 */ asn_DEF_CellID_tags_1, /* Same as above */ sizeof(asn_DEF_CellID_tags_1) /sizeof(asn_DEF_CellID_tags_1[0]), /* 1 */ &asn_PER_type_CellID_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RefLocation.c0000644000175000017500000000336512576764164022354 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RefLocation.h" static asn_TYPE_member_t asn_MBR_RefLocation_1[] = { { ATF_NOFLAGS, 0, offsetof(struct RefLocation, threeDLocation), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Ext_GeographicalInformation, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "threeDLocation" }, }; static ber_tlv_tag_t asn_DEF_RefLocation_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_RefLocation_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* threeDLocation at 650 */ }; static asn_SEQUENCE_specifics_t asn_SPC_RefLocation_specs_1 = { sizeof(struct RefLocation), offsetof(struct RefLocation, _asn_ctx), asn_MAP_RefLocation_tag2el_1, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_RefLocation = { "RefLocation", "RefLocation", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RefLocation_tags_1, sizeof(asn_DEF_RefLocation_tags_1) /sizeof(asn_DEF_RefLocation_tags_1[0]), /* 1 */ asn_DEF_RefLocation_tags_1, /* Same as above */ sizeof(asn_DEF_RefLocation_tags_1) /sizeof(asn_DEF_RefLocation_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_RefLocation_1, 1, /* Elements count */ &asn_SPC_RefLocation_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTDValue.c0000644000175000017500000001077112576764164021571 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTDValue.h" int OTDValue_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 39999)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void OTDValue_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void OTDValue_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { OTDValue_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int OTDValue_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { OTDValue_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t OTDValue_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { OTDValue_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t OTDValue_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { OTDValue_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t OTDValue_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { OTDValue_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t OTDValue_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { OTDValue_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t OTDValue_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { OTDValue_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t OTDValue_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { OTDValue_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_OTDValue_constr_1 = { { APC_CONSTRAINED, 16, 16, 0, 39999 } /* (0..39999) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_OTDValue_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_OTDValue = { "OTDValue", "OTDValue", OTDValue_free, OTDValue_print, OTDValue_constraint, OTDValue_decode_ber, OTDValue_encode_der, OTDValue_decode_xer, OTDValue_encode_xer, OTDValue_decode_uper, OTDValue_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTDValue_tags_1, sizeof(asn_DEF_OTDValue_tags_1) /sizeof(asn_DEF_OTDValue_tags_1[0]), /* 1 */ asn_DEF_OTDValue_tags_1, /* Same as above */ sizeof(asn_DEF_OTDValue_tags_1) /sizeof(asn_DEF_OTDValue_tags_1[0]), /* 1 */ &asn_PER_type_OTDValue_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSWeek.c0000644000175000017500000001071612576764164021412 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSWeek.h" int GPSWeek_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1023)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GPSWeek_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GPSWeek_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GPSWeek_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GPSWeek_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GPSWeek_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GPSWeek_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GPSWeek_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GPSWeek_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GPSWeek_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GPSWeek_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GPSWeek_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GPSWeek_constr_1 = { { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GPSWeek_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GPSWeek = { "GPSWeek", "GPSWeek", GPSWeek_free, GPSWeek_print, GPSWeek_constraint, GPSWeek_decode_ber, GPSWeek_encode_der, GPSWeek_decode_xer, GPSWeek_encode_xer, GPSWeek_decode_uper, GPSWeek_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSWeek_tags_1, sizeof(asn_DEF_GPSWeek_tags_1) /sizeof(asn_DEF_GPSWeek_tags_1[0]), /* 1 */ asn_DEF_GPSWeek_tags_1, /* Same as above */ sizeof(asn_DEF_GPSWeek_tags_1) /sizeof(asn_DEF_GPSWeek_tags_1[0]), /* 1 */ &asn_PER_type_GPSWeek_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AddionalDopplerFields.c0000644000175000017500000000727412576764164024342 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AddionalDopplerFields.h" static int memb_doppler1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_dopplerUncertainty_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_doppler1_constr_2 = { { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_dopplerUncertainty_constr_3 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_AddionalDopplerFields_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AddionalDopplerFields, doppler1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_doppler1_constraint_1, &asn_PER_memb_doppler1_constr_2, 0, "doppler1" }, { ATF_NOFLAGS, 0, offsetof(struct AddionalDopplerFields, dopplerUncertainty), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_dopplerUncertainty_constraint_1, &asn_PER_memb_dopplerUncertainty_constr_3, 0, "dopplerUncertainty" }, }; static ber_tlv_tag_t asn_DEF_AddionalDopplerFields_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AddionalDopplerFields_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* doppler1 at 850 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dopplerUncertainty at 851 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AddionalDopplerFields_specs_1 = { sizeof(struct AddionalDopplerFields), offsetof(struct AddionalDopplerFields, _asn_ctx), asn_MAP_AddionalDopplerFields_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AddionalDopplerFields = { "AddionalDopplerFields", "AddionalDopplerFields", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AddionalDopplerFields_tags_1, sizeof(asn_DEF_AddionalDopplerFields_tags_1) /sizeof(asn_DEF_AddionalDopplerFields_tags_1[0]), /* 1 */ asn_DEF_AddionalDopplerFields_tags_1, /* Same as above */ sizeof(asn_DEF_AddionalDopplerFields_tags_1) /sizeof(asn_DEF_AddionalDopplerFields_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AddionalDopplerFields_1, 2, /* Elements count */ &asn_SPC_AddionalDopplerFields_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BSICAndCarrier.h0000644000175000017500000000134012576764164022616 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _BSICAndCarrier_H_ #define _BSICAndCarrier_H_ #include /* Including external dependencies */ #include "BCCHCarrier.h" #include "BSIC.h" #include #ifdef __cplusplus extern "C" { #endif /* BSICAndCarrier */ typedef struct BSICAndCarrier { BCCHCarrier_t carrier; BSIC_t bsic; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } BSICAndCarrier_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_BSICAndCarrier; #ifdef __cplusplus } #endif #endif /* _BSICAndCarrier_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSTOWAssist.h0000644000175000017500000000151012576764164022354 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPSTOWAssist_H_ #define _GPSTOWAssist_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GPSTOWAssistElement; /* GPSTOWAssist */ typedef struct GPSTOWAssist { A_SEQUENCE_OF(struct GPSTOWAssistElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPSTOWAssist_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPSTOWAssist; #ifdef __cplusplus } #endif /* Referred external types */ #include "GPSTOWAssistElement.h" #endif /* _GPSTOWAssist_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NavModelElement.h0000644000175000017500000000137212576764164023167 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _NavModelElement_H_ #define _NavModelElement_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include "SatStatus.h" #include #ifdef __cplusplus extern "C" { #endif /* NavModelElement */ typedef struct NavModelElement { SatelliteID_t satelliteID; SatStatus_t satStatus; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } NavModelElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NavModelElement; #ifdef __cplusplus } #endif #endif /* _NavModelElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/EOTDQuality.c0000644000175000017500000000675212576764164022256 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "EOTDQuality.h" static int memb_nbrOfMeasurements_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 7)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_stdOfEOTD_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 31)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_nbrOfMeasurements_constr_2 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_stdOfEOTD_constr_3 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_EOTDQuality_1[] = { { ATF_NOFLAGS, 0, offsetof(struct EOTDQuality, nbrOfMeasurements), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_nbrOfMeasurements_constraint_1, &asn_PER_memb_nbrOfMeasurements_constr_2, 0, "nbrOfMeasurements" }, { ATF_NOFLAGS, 0, offsetof(struct EOTDQuality, stdOfEOTD), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_stdOfEOTD_constraint_1, &asn_PER_memb_stdOfEOTD_constr_3, 0, "stdOfEOTD" }, }; static ber_tlv_tag_t asn_DEF_EOTDQuality_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_EOTDQuality_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nbrOfMeasurements at 393 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* stdOfEOTD at 394 */ }; static asn_SEQUENCE_specifics_t asn_SPC_EOTDQuality_specs_1 = { sizeof(struct EOTDQuality), offsetof(struct EOTDQuality, _asn_ctx), asn_MAP_EOTDQuality_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_EOTDQuality = { "EOTDQuality", "EOTDQuality", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_EOTDQuality_tags_1, sizeof(asn_DEF_EOTDQuality_tags_1) /sizeof(asn_DEF_EOTDQuality_tags_1[0]), /* 1 */ asn_DEF_EOTDQuality_tags_1, /* Same as above */ sizeof(asn_DEF_EOTDQuality_tags_1) /sizeof(asn_DEF_EOTDQuality_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_EOTDQuality_1, 2, /* Elements count */ &asn_SPC_EOTDQuality_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel-98-MsrPosition-Rsp-Extension.c0000644000175000017500000001126612576764164026126 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel-98-MsrPosition-Rsp-Extension.h" static asn_TYPE_member_t asn_MBR_rel_98_Ext_MeasureInfo_2[] = { { ATF_POINTER, 1, offsetof(struct rel_98_Ext_MeasureInfo, otd_MeasureInfo_R98_Ext), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_OTD_MeasureInfo_R98_Ext, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otd-MeasureInfo-R98-Ext" }, }; static int asn_MAP_rel_98_Ext_MeasureInfo_oms_2[] = { 0 }; static ber_tlv_tag_t asn_DEF_rel_98_Ext_MeasureInfo_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_rel_98_Ext_MeasureInfo_tag2el_2[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* otd-MeasureInfo-R98-Ext at 960 */ }; static asn_SEQUENCE_specifics_t asn_SPC_rel_98_Ext_MeasureInfo_specs_2 = { sizeof(struct rel_98_Ext_MeasureInfo), offsetof(struct rel_98_Ext_MeasureInfo, _asn_ctx), asn_MAP_rel_98_Ext_MeasureInfo_tag2el_2, 1, /* Count of tags in the map */ asn_MAP_rel_98_Ext_MeasureInfo_oms_2, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_rel_98_Ext_MeasureInfo_2 = { "rel-98-Ext-MeasureInfo", "rel-98-Ext-MeasureInfo", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_rel_98_Ext_MeasureInfo_tags_2, sizeof(asn_DEF_rel_98_Ext_MeasureInfo_tags_2) /sizeof(asn_DEF_rel_98_Ext_MeasureInfo_tags_2[0]) - 1, /* 1 */ asn_DEF_rel_98_Ext_MeasureInfo_tags_2, /* Same as above */ sizeof(asn_DEF_rel_98_Ext_MeasureInfo_tags_2) /sizeof(asn_DEF_rel_98_Ext_MeasureInfo_tags_2[0]), /* 2 */ 0, /* No PER visible constraints */ asn_MBR_rel_98_Ext_MeasureInfo_2, 1, /* Elements count */ &asn_SPC_rel_98_Ext_MeasureInfo_specs_2 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_Rel_98_MsrPosition_Rsp_Extension_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Rel_98_MsrPosition_Rsp_Extension, rel_98_Ext_MeasureInfo), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, &asn_DEF_rel_98_Ext_MeasureInfo_2, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "rel-98-Ext-MeasureInfo" }, { ATF_POINTER, 1, offsetof(struct Rel_98_MsrPosition_Rsp_Extension, timeAssistanceMeasurements), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GPSTimeAssistanceMeasurements, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeAssistanceMeasurements" }, }; static int asn_MAP_Rel_98_MsrPosition_Rsp_Extension_oms_1[] = { 1 }; static ber_tlv_tag_t asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel_98_MsrPosition_Rsp_Extension_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rel-98-Ext-MeasureInfo at 960 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* timeAssistanceMeasurements at 963 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel_98_MsrPosition_Rsp_Extension_specs_1 = { sizeof(struct Rel_98_MsrPosition_Rsp_Extension), offsetof(struct Rel_98_MsrPosition_Rsp_Extension, _asn_ctx), asn_MAP_Rel_98_MsrPosition_Rsp_Extension_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_Rel_98_MsrPosition_Rsp_Extension_oms_1, /* Optional members */ 0, 1, /* Root/Additions */ 0, /* Start extensions */ 3 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel_98_MsrPosition_Rsp_Extension = { "Rel-98-MsrPosition-Rsp-Extension", "Rel-98-MsrPosition-Rsp-Extension", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1, sizeof(asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1) /sizeof(asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1[0]), /* 1 */ asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1, /* Same as above */ sizeof(asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1) /sizeof(asn_DEF_Rel_98_MsrPosition_Rsp_Extension_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel_98_MsrPosition_Rsp_Extension_1, 2, /* Elements count */ &asn_SPC_Rel_98_MsrPosition_Rsp_Extension_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementFirst-R98-Ext.h0000644000175000017500000000170412576764164024774 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MsrElementFirst_R98_Ext_H_ #define _OTD_MsrElementFirst_R98_Ext_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SeqOfOTD_FirstSetMsrs_R98_Ext; /* OTD-MsrElementFirst-R98-Ext */ typedef struct OTD_MsrElementFirst_R98_Ext { struct SeqOfOTD_FirstSetMsrs_R98_Ext *otd_FirstSetMsrs_R98_Ext /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MsrElementFirst_R98_Ext_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MsrElementFirst_R98_Ext; #ifdef __cplusplus } #endif /* Referred external types */ #include "SeqOfOTD-FirstSetMsrs-R98-Ext.h" #endif /* _OTD_MsrElementFirst_R98_Ext_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSS-MsrSetElement.c0000644000175000017500000001032712576764164023543 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GANSS-MsrSetElement.h" static int memb_deltaGNASSTOD_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_deltaGNASSTOD_constr_4 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_GANSS_MsrSetElement_1[] = { { ATF_POINTER, 4, offsetof(struct GANSS_MsrSetElement, referenceFrame), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ReferenceFrame, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceFrame" }, { ATF_POINTER, 3, offsetof(struct GANSS_MsrSetElement, ganssTODm), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTODm, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODm" }, { ATF_POINTER, 2, offsetof(struct GANSS_MsrSetElement, deltaGNASSTOD), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_deltaGNASSTOD_constraint_1, &asn_PER_memb_deltaGNASSTOD_constr_4, 0, "deltaGNASSTOD" }, { ATF_POINTER, 1, offsetof(struct GANSS_MsrSetElement, ganssTODUncertainty), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_GANSSTODUncertainty, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganssTODUncertainty" }, { ATF_NOFLAGS, 0, offsetof(struct GANSS_MsrSetElement, ganss_SgnTypeList), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfGANSS_SgnTypeElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "ganss-SgnTypeList" }, }; static int asn_MAP_GANSS_MsrSetElement_oms_1[] = { 0, 1, 2, 3 }; static ber_tlv_tag_t asn_DEF_GANSS_MsrSetElement_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_GANSS_MsrSetElement_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceFrame at 1456 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ganssTODm at 1457 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deltaGNASSTOD at 1458 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ganssTODUncertainty at 1459 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* ganss-SgnTypeList at 1463 */ }; static asn_SEQUENCE_specifics_t asn_SPC_GANSS_MsrSetElement_specs_1 = { sizeof(struct GANSS_MsrSetElement), offsetof(struct GANSS_MsrSetElement, _asn_ctx), asn_MAP_GANSS_MsrSetElement_tag2el_1, 5, /* Count of tags in the map */ asn_MAP_GANSS_MsrSetElement_oms_1, /* Optional members */ 4, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_GANSS_MsrSetElement = { "GANSS-MsrSetElement", "GANSS-MsrSetElement", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GANSS_MsrSetElement_tags_1, sizeof(asn_DEF_GANSS_MsrSetElement_tags_1) /sizeof(asn_DEF_GANSS_MsrSetElement_tags_1[0]), /* 1 */ asn_DEF_GANSS_MsrSetElement_tags_1, /* Same as above */ sizeof(asn_DEF_GANSS_MsrSetElement_tags_1) /sizeof(asn_DEF_GANSS_MsrSetElement_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_GANSS_MsrSetElement_1, 5, /* Elements count */ &asn_SPC_GANSS_MsrSetElement_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/constraints.c0000644000175000017500000000425712576764164022517 0ustar carlescarles#include "asn_internal.h" #include "constraints.h" int asn_generic_no_constraint(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { (void)type_descriptor; /* Unused argument */ (void)struct_ptr; /* Unused argument */ (void)cb; /* Unused argument */ (void)key; /* Unused argument */ /* Nothing to check */ return 0; } int asn_generic_unknown_constraint(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { (void)type_descriptor; /* Unused argument */ (void)struct_ptr; /* Unused argument */ (void)cb; /* Unused argument */ (void)key; /* Unused argument */ /* Unknown how to check */ return 0; } struct errbufDesc { asn_TYPE_descriptor_t *failed_type; const void *failed_struct_ptr; char *errbuf; size_t errlen; }; static void _asn_i_ctfailcb(void *key, asn_TYPE_descriptor_t *td, const void *sptr, const char *fmt, ...) { struct errbufDesc *arg = key; va_list ap; ssize_t vlen; ssize_t maxlen; arg->failed_type = td; arg->failed_struct_ptr = sptr; maxlen = arg->errlen; if(maxlen <= 0) return; va_start(ap, fmt); vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); va_end(ap); if(vlen >= maxlen) { arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ arg->errlen = maxlen - 1; /* Not counting termination */ return; } else if(vlen >= 0) { arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ arg->errlen = vlen; /* Not counting termination */ } else { /* * The libc on this system is broken. */ vlen = sizeof("") - 1; maxlen--; arg->errlen = vlen < maxlen ? vlen : maxlen; memcpy(arg->errbuf, "", arg->errlen); arg->errbuf[arg->errlen] = 0; } return; } int asn_check_constraints(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, char *errbuf, size_t *errlen) { struct errbufDesc arg; int ret; arg.failed_type = 0; arg.failed_struct_ptr = 0; arg.errbuf = errbuf; arg.errlen = errlen ? *errlen : 0; ret = type_descriptor->check_constraints(type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); if(ret == -1 && errlen) *errlen = arg.errlen; return ret; } gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SatStatus.c0000644000175000017500000000472512576764164022103 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "SatStatus.h" static asn_per_constraints_t asn_PER_type_SatStatus_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_SatStatus_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SatStatus, choice.newSatelliteAndModelUC), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UncompressedEphemeris, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "newSatelliteAndModelUC" }, { ATF_NOFLAGS, 0, offsetof(struct SatStatus, choice.oldSatelliteAndModel), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NULL, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "oldSatelliteAndModel" }, { ATF_NOFLAGS, 0, offsetof(struct SatStatus, choice.newNaviModelUC), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_UncompressedEphemeris, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "newNaviModelUC" }, }; static asn_TYPE_tag2member_t asn_MAP_SatStatus_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* newSatelliteAndModelUC at 710 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* oldSatelliteAndModel at 713 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* newNaviModelUC at 716 */ }; static asn_CHOICE_specifics_t asn_SPC_SatStatus_specs_1 = { sizeof(struct SatStatus), offsetof(struct SatStatus, _asn_ctx), offsetof(struct SatStatus, present), sizeof(((struct SatStatus *)0)->present), asn_MAP_SatStatus_tag2el_1, 3, /* Count of tags in the map */ 0, 3 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_SatStatus = { "SatStatus", "SatStatus", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_SatStatus_constr_1, asn_MBR_SatStatus_1, 3, /* Elements count */ &asn_SPC_SatStatus_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel98-MsrPosition-Req-Extension.h0000644000175000017500000000227612576764164026042 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _Rel98_MsrPosition_Req_Extension_H_ #define _Rel98_MsrPosition_Req_Extension_H_ #include /* Including external dependencies */ #include #include "GPSReferenceTimeUncertainty.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct Rel98_Ext_ExpOTD; /* Rel98-MsrPosition-Req-Extension */ typedef struct Rel98_MsrPosition_Req_Extension { struct Rel98_Ext_ExpOTD *rel98_Ext_ExpOTD /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ NULL_t *gpsTimeAssistanceMeasurementRequest /* OPTIONAL */; GPSReferenceTimeUncertainty_t *gpsReferenceTimeUncertainty /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } Rel98_MsrPosition_Req_Extension_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Rel98_MsrPosition_Req_Extension; #ifdef __cplusplus } #endif /* Referred external types */ #include "Rel98-Ext-ExpOTD.h" #endif /* _Rel98_MsrPosition_Req_Extension_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/BitNumber.c0000644000175000017500000001103112576764164022023 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "BitNumber.h" int BitNumber_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 156)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void BitNumber_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void BitNumber_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { BitNumber_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int BitNumber_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { BitNumber_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t BitNumber_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { BitNumber_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t BitNumber_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { BitNumber_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t BitNumber_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { BitNumber_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t BitNumber_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { BitNumber_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t BitNumber_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { BitNumber_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t BitNumber_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { BitNumber_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_BitNumber_constr_1 = { { APC_CONSTRAINED, 8, 8, 0, 156 } /* (0..156) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_BitNumber_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BitNumber = { "BitNumber", "BitNumber", BitNumber_free, BitNumber_print, BitNumber_constraint, BitNumber_decode_ber, BitNumber_encode_der, BitNumber_decode_xer, BitNumber_encode_xer, BitNumber_decode_uper, BitNumber_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_BitNumber_tags_1, sizeof(asn_DEF_BitNumber_tags_1) /sizeof(asn_DEF_BitNumber_tags_1[0]), /* 1 */ asn_DEF_BitNumber_tags_1, /* Same as above */ sizeof(asn_DEF_BitNumber_tags_1) /sizeof(asn_DEF_BitNumber_tags_1[0]), /* 1 */ &asn_PER_type_BitNumber_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GSMTime.h0000644000175000017500000000150612576764164021414 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GSMTime_H_ #define _GSMTime_H_ #include /* Including external dependencies */ #include "BCCHCarrier.h" #include "BSIC.h" #include "FrameNumber.h" #include "TimeSlot.h" #include "BitNumber.h" #include #ifdef __cplusplus extern "C" { #endif /* GSMTime */ typedef struct GSMTime { BCCHCarrier_t bcchCarrier; BSIC_t bsic; FrameNumber_t frameNumber; TimeSlot_t timeSlot; BitNumber_t bitNumber; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GSMTime_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GSMTime; #ifdef __cplusplus } #endif #endif /* _GSMTime_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MeasureInfo-R98-Ext.h0000644000175000017500000000145612576764164024132 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _OTD_MeasureInfo_R98_Ext_H_ #define _OTD_MeasureInfo_R98_Ext_H_ #include /* Including external dependencies */ #include "OTD-MsrElementFirst-R98-Ext.h" #include #ifdef __cplusplus extern "C" { #endif /* OTD-MeasureInfo-R98-Ext */ typedef struct OTD_MeasureInfo_R98_Ext { OTD_MsrElementFirst_R98_Ext_t otdMsrFirstSets_R98_Ext; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } OTD_MeasureInfo_R98_Ext_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_OTD_MeasureInfo_R98_Ext; #ifdef __cplusplus } #endif #endif /* _OTD_MeasureInfo_R98_Ext_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPS-MsrElement.h0000644000175000017500000000155212576764164022652 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GPS_MsrElement_H_ #define _GPS_MsrElement_H_ #include /* Including external dependencies */ #include "SatelliteID.h" #include #include "MpathIndic.h" #include #ifdef __cplusplus extern "C" { #endif /* GPS-MsrElement */ typedef struct GPS_MsrElement { SatelliteID_t satelliteID; long cNo; long doppler; long wholeChips; long fracChips; MpathIndic_t mpathIndic; long pseuRangeRMSErr; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GPS_MsrElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GPS_MsrElement; #ifdef __cplusplus } #endif #endif /* _GPS_MsrElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSTimeModelElement.h0000644000175000017500000000164212576764164024135 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSTimeModelElement_H_ #define _GANSSTimeModelElement_H_ #include /* Including external dependencies */ #include #include "TA0.h" #include "TA1.h" #include "TA2.h" #include #ifdef __cplusplus extern "C" { #endif /* GANSSTimeModelElement */ typedef struct GANSSTimeModelElement { long ganssTimeModelRefTime; TA0_t tA0; TA1_t *tA1 /* OPTIONAL */; TA2_t *tA2 /* OPTIONAL */; long gnssTOID; long *weekNumber /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSTimeModelElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSTimeModelElement; #ifdef __cplusplus } #endif #endif /* _GANSSTimeModelElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Almanac.c0000644000175000017500000000530412576764164021476 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Almanac.h" static int memb_alamanacWNa_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 255)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_alamanacWNa_constr_2 = { { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_Almanac_1[] = { { ATF_NOFLAGS, 0, offsetof(struct Almanac, alamanacWNa), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_alamanacWNa_constraint_1, &asn_PER_memb_alamanacWNa_constr_2, 0, "alamanacWNa" }, { ATF_NOFLAGS, 0, offsetof(struct Almanac, almanacList), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfAlmanacElement, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "almanacList" }, }; static ber_tlv_tag_t asn_DEF_Almanac_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Almanac_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* alamanacWNa at 789 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* almanacList at 794 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Almanac_specs_1 = { sizeof(struct Almanac), offsetof(struct Almanac, _asn_ctx), asn_MAP_Almanac_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Almanac = { "Almanac", "Almanac", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Almanac_tags_1, sizeof(asn_DEF_Almanac_tags_1) /sizeof(asn_DEF_Almanac_tags_1[0]), /* 1 */ asn_DEF_Almanac_tags_1, /* Same as above */ sizeof(asn_DEF_Almanac_tags_1) /sizeof(asn_DEF_Almanac_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Almanac_1, 2, /* Elements count */ &asn_SPC_Almanac_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/AssistBTSData.c0000644000175000017500000000644412576764164022561 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "AssistBTSData.h" static asn_TYPE_member_t asn_MBR_AssistBTSData_1[] = { { ATF_NOFLAGS, 0, offsetof(struct AssistBTSData, bsic), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BSIC, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "bsic" }, { ATF_NOFLAGS, 0, offsetof(struct AssistBTSData, multiFrameOffset), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MultiFrameOffset, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "multiFrameOffset" }, { ATF_NOFLAGS, 0, offsetof(struct AssistBTSData, timeSlotScheme), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TimeSlotScheme, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "timeSlotScheme" }, { ATF_NOFLAGS, 0, offsetof(struct AssistBTSData, roughRTD), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RoughRTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "roughRTD" }, { ATF_POINTER, 1, offsetof(struct AssistBTSData, calcAssistanceBTS), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CalcAssistanceBTS, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "calcAssistanceBTS" }, }; static int asn_MAP_AssistBTSData_oms_1[] = { 4 }; static ber_tlv_tag_t asn_DEF_AssistBTSData_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_AssistBTSData_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bsic at 229 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* multiFrameOffset at 230 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* timeSlotScheme at 231 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* roughRTD at 232 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* calcAssistanceBTS at 235 */ }; static asn_SEQUENCE_specifics_t asn_SPC_AssistBTSData_specs_1 = { sizeof(struct AssistBTSData), offsetof(struct AssistBTSData, _asn_ctx), asn_MAP_AssistBTSData_tag2el_1, 5, /* Count of tags in the map */ asn_MAP_AssistBTSData_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_AssistBTSData = { "AssistBTSData", "AssistBTSData", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_AssistBTSData_tags_1, sizeof(asn_DEF_AssistBTSData_tags_1) /sizeof(asn_DEF_AssistBTSData_tags_1[0]), /* 1 */ asn_DEF_AssistBTSData_tags_1, /* Same as above */ sizeof(asn_DEF_AssistBTSData_tags_1) /sizeof(asn_DEF_AssistBTSData_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_AssistBTSData_1, 5, /* Elements count */ &asn_SPC_AssistBTSData_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RefQuality.h0000644000175000017500000000157512576764164022242 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _RefQuality_H_ #define _RefQuality_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* RefQuality */ typedef long RefQuality_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_RefQuality; asn_struct_free_f RefQuality_free; asn_struct_print_f RefQuality_print; asn_constr_check_f RefQuality_constraint; ber_type_decoder_f RefQuality_decode_ber; der_type_encoder_f RefQuality_encode_der; xer_type_decoder_f RefQuality_decode_xer; xer_type_encoder_f RefQuality_encode_xer; per_type_decoder_f RefQuality_decode_uper; per_type_encoder_f RefQuality_encode_uper; #ifdef __cplusplus } #endif #endif /* _RefQuality_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TA0.c0000644000175000017500000001055212576764164020527 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TA0.h" int TA0_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TA0_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TA0_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TA0_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TA0_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TA0_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TA0_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TA0_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TA0_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TA0_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TA0_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TA0_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TA0_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TA0_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TA0_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TA0_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TA0_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TA0_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TA0_constr_1 = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TA0_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TA0 = { "TA0", "TA0", TA0_free, TA0_print, TA0_constraint, TA0_decode_ber, TA0_encode_der, TA0_decode_xer, TA0_encode_xer, TA0_decode_uper, TA0_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TA0_tags_1, sizeof(asn_DEF_TA0_tags_1) /sizeof(asn_DEF_TA0_tags_1[0]), /* 1 */ asn_DEF_TA0_tags_1, /* Same as above */ sizeof(asn_DEF_TA0_tags_1) /sizeof(asn_DEF_TA0_tags_1[0]), /* 1 */ &asn_PER_type_TA0_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSRefMeasurementElement.h0000644000175000017500000000237112576764164025200 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSRefMeasurementElement_H_ #define _GANSSRefMeasurementElement_H_ #include /* Including external dependencies */ #include "SVID.h" #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct AdditionalDopplerFields; struct AddionalAngleFields; /* GANSSRefMeasurementElement */ typedef struct GANSSRefMeasurementElement { SVID_t svID; long doppler0; struct AdditionalDopplerFields *additionalDoppler /* OPTIONAL */; long codePhase; long intCodePhase; long codePhaseSearchWindow; struct AddionalAngleFields *additionalAngle /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSRefMeasurementElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSRefMeasurementElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "AdditionalDopplerFields.h" #include "AddionalAngleFields.h" #endif /* _GANSSRefMeasurementElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GPSReferenceTimeUncertainty.c0000644000175000017500000001235112576764164025457 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "GPSReferenceTimeUncertainty.h" int GPSReferenceTimeUncertainty_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void GPSReferenceTimeUncertainty_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int GPSReferenceTimeUncertainty_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t GPSReferenceTimeUncertainty_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t GPSReferenceTimeUncertainty_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t GPSReferenceTimeUncertainty_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t GPSReferenceTimeUncertainty_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t GPSReferenceTimeUncertainty_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t GPSReferenceTimeUncertainty_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { GPSReferenceTimeUncertainty_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_GPSReferenceTimeUncertainty_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_GPSReferenceTimeUncertainty_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_GPSReferenceTimeUncertainty = { "GPSReferenceTimeUncertainty", "GPSReferenceTimeUncertainty", GPSReferenceTimeUncertainty_free, GPSReferenceTimeUncertainty_print, GPSReferenceTimeUncertainty_constraint, GPSReferenceTimeUncertainty_decode_ber, GPSReferenceTimeUncertainty_encode_der, GPSReferenceTimeUncertainty_decode_xer, GPSReferenceTimeUncertainty_encode_xer, GPSReferenceTimeUncertainty_decode_uper, GPSReferenceTimeUncertainty_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_GPSReferenceTimeUncertainty_tags_1, sizeof(asn_DEF_GPSReferenceTimeUncertainty_tags_1) /sizeof(asn_DEF_GPSReferenceTimeUncertainty_tags_1[0]), /* 1 */ asn_DEF_GPSReferenceTimeUncertainty_tags_1, /* Same as above */ sizeof(asn_DEF_GPSReferenceTimeUncertainty_tags_1) /sizeof(asn_DEF_GPSReferenceTimeUncertainty_tags_1[0]), /* 1 */ &asn_PER_type_GPSReferenceTimeUncertainty_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfSystemInfoAssistBTS-R98-ExpOTD.h0000644000175000017500000000201212576764164026417 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfSystemInfoAssistBTS_R98_ExpOTD_H_ #define _SeqOfSystemInfoAssistBTS_R98_ExpOTD_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct SystemInfoAssistBTS_R98_ExpOTD; /* SeqOfSystemInfoAssistBTS-R98-ExpOTD */ typedef struct SeqOfSystemInfoAssistBTS_R98_ExpOTD { A_SEQUENCE_OF(struct SystemInfoAssistBTS_R98_ExpOTD) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfSystemInfoAssistBTS_R98_ExpOTD_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfSystemInfoAssistBTS_R98_ExpOTD; #ifdef __cplusplus } #endif /* Referred external types */ #include "SystemInfoAssistBTS-R98-ExpOTD.h" #endif /* _SeqOfSystemInfoAssistBTS_R98_ExpOTD_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Rel98-Ext-ExpOTD.c0000644000175000017500000000462312576764164022707 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Rel98-Ext-ExpOTD.h" static asn_TYPE_member_t asn_MBR_Rel98_Ext_ExpOTD_1[] = { { ATF_POINTER, 2, offsetof(struct Rel98_Ext_ExpOTD, msrAssistData_R98_ExpOTD), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_MsrAssistData_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "msrAssistData-R98-ExpOTD" }, { ATF_POINTER, 1, offsetof(struct Rel98_Ext_ExpOTD, systemInfoAssistData_R98_ExpOTD), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SystemInfoAssistData_R98_ExpOTD, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "systemInfoAssistData-R98-ExpOTD" }, }; static int asn_MAP_Rel98_Ext_ExpOTD_oms_1[] = { 0, 1 }; static ber_tlv_tag_t asn_DEF_Rel98_Ext_ExpOTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_Rel98_Ext_ExpOTD_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* msrAssistData-R98-ExpOTD at 890 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* systemInfoAssistData-R98-ExpOTD at 894 */ }; static asn_SEQUENCE_specifics_t asn_SPC_Rel98_Ext_ExpOTD_specs_1 = { sizeof(struct Rel98_Ext_ExpOTD), offsetof(struct Rel98_Ext_ExpOTD, _asn_ctx), asn_MAP_Rel98_Ext_ExpOTD_tag2el_1, 2, /* Count of tags in the map */ asn_MAP_Rel98_Ext_ExpOTD_oms_1, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_Rel98_Ext_ExpOTD = { "Rel98-Ext-ExpOTD", "Rel98-Ext-ExpOTD", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Rel98_Ext_ExpOTD_tags_1, sizeof(asn_DEF_Rel98_Ext_ExpOTD_tags_1) /sizeof(asn_DEF_Rel98_Ext_ExpOTD_tags_1[0]), /* 1 */ asn_DEF_Rel98_Ext_ExpOTD_tags_1, /* Same as above */ sizeof(asn_DEF_Rel98_Ext_ExpOTD_tags_1) /sizeof(asn_DEF_Rel98_Ext_ExpOTD_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_Rel98_Ext_ExpOTD_1, 2, /* Elements count */ &asn_SPC_Rel98_Ext_ExpOTD_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/SeqOfGANSSGenericAssistDataElement.h0000644000175000017500000000200012576764164026536 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _SeqOfGANSSGenericAssistDataElement_H_ #define _SeqOfGANSSGenericAssistDataElement_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSGenericAssistDataElement; /* SeqOfGANSSGenericAssistDataElement */ typedef struct SeqOfGANSSGenericAssistDataElement { A_SEQUENCE_OF(struct GANSSGenericAssistDataElement) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } SeqOfGANSSGenericAssistDataElement_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SeqOfGANSSGenericAssistDataElement; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSGenericAssistDataElement.h" #endif /* _SeqOfGANSSGenericAssistDataElement_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/OTD-MsrElementRest.c0000644000175000017500000001245312576764164023502 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "OTD-MsrElementRest.h" static int memb_refFrameNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 42431)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_taCorrection_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 960)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_memb_refFrameNumber_constr_2 = { { APC_CONSTRAINED, 16, 16, 0, 42431 } /* (0..42431) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_taCorrection_constr_6 = { { APC_CONSTRAINED, 10, 10, 0, 960 } /* (0..960) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_OTD_MsrElementRest_1[] = { { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrElementRest, refFrameNumber), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_refFrameNumber_constraint_1, &asn_PER_memb_refFrameNumber_constr_2, 0, "refFrameNumber" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrElementRest, referenceTimeSlot), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_ModuloTimeSlot, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "referenceTimeSlot" }, { ATF_POINTER, 1, offsetof(struct OTD_MsrElementRest, toaMeasurementsOfRef), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TOA_MeasurementsOfRef, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "toaMeasurementsOfRef" }, { ATF_NOFLAGS, 0, offsetof(struct OTD_MsrElementRest, stdResolution), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_StdResolution, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "stdResolution" }, { ATF_POINTER, 2, offsetof(struct OTD_MsrElementRest, taCorrection), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_taCorrection_constraint_1, &asn_PER_memb_taCorrection_constr_6, 0, "taCorrection" }, { ATF_POINTER, 1, offsetof(struct OTD_MsrElementRest, otd_MsrsOfOtherSets), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_SeqOfOTD_MsrsOfOtherSets, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "otd-MsrsOfOtherSets" }, }; static int asn_MAP_OTD_MsrElementRest_oms_1[] = { 2, 4, 5 }; static ber_tlv_tag_t asn_DEF_OTD_MsrElementRest_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_TYPE_tag2member_t asn_MAP_OTD_MsrElementRest_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* refFrameNumber at 347 */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* referenceTimeSlot at 348 */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* toaMeasurementsOfRef at 349 */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* stdResolution at 350 */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* taCorrection at 351 */ { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* otd-MsrsOfOtherSets at 354 */ }; static asn_SEQUENCE_specifics_t asn_SPC_OTD_MsrElementRest_specs_1 = { sizeof(struct OTD_MsrElementRest), offsetof(struct OTD_MsrElementRest, _asn_ctx), asn_MAP_OTD_MsrElementRest_tag2el_1, 6, /* Count of tags in the map */ asn_MAP_OTD_MsrElementRest_oms_1, /* Optional members */ 3, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_OTD_MsrElementRest = { "OTD-MsrElementRest", "OTD-MsrElementRest", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_OTD_MsrElementRest_tags_1, sizeof(asn_DEF_OTD_MsrElementRest_tags_1) /sizeof(asn_DEF_OTD_MsrElementRest_tags_1[0]), /* 1 */ asn_DEF_OTD_MsrElementRest_tags_1, /* Same as above */ sizeof(asn_DEF_OTD_MsrElementRest_tags_1) /sizeof(asn_DEF_OTD_MsrElementRest_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_OTD_MsrElementRest_1, 6, /* Elements count */ &asn_SPC_OTD_MsrElementRest_specs_1 /* Additional specs */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/MultipleSets.h0000644000175000017500000000143612576764164022603 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _MultipleSets_H_ #define _MultipleSets_H_ #include /* Including external dependencies */ #include #include "ReferenceRelation.h" #include #ifdef __cplusplus extern "C" { #endif /* MultipleSets */ typedef struct MultipleSets { long nbrOfSets; long nbrOfReferenceBTSs; ReferenceRelation_t *referenceRelation /* OPTIONAL */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } MultipleSets_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_MultipleSets; #ifdef __cplusplus } #endif #endif /* _MultipleSets_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSIonosphericModel.h0000644000175000017500000000201312576764164024200 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSIonosphericModel_H_ #define _GANSSIonosphericModel_H_ #include /* Including external dependencies */ #include "GANSSIonosphereModel.h" #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSIonoStormFlags; /* GANSSIonosphericModel */ typedef struct GANSSIonosphericModel { GANSSIonosphereModel_t ganssIonoModel; struct GANSSIonoStormFlags *ganssIonoStormFlags /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSIonosphericModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSIonosphericModel; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSIonoStormFlags.h" #endif /* _GANSSIonosphericModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/Accuracy.c0000644000175000017500000001076112576764164021677 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "Accuracy.h" int Accuracy_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 127)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void Accuracy_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void Accuracy_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { Accuracy_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int Accuracy_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { Accuracy_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t Accuracy_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { Accuracy_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t Accuracy_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { Accuracy_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t Accuracy_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { Accuracy_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t Accuracy_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { Accuracy_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t Accuracy_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { Accuracy_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t Accuracy_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { Accuracy_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_Accuracy_constr_1 = { { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_Accuracy_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Accuracy = { "Accuracy", "Accuracy", Accuracy_free, Accuracy_print, Accuracy_constraint, Accuracy_decode_ber, Accuracy_encode_der, Accuracy_decode_xer, Accuracy_encode_xer, Accuracy_decode_uper, Accuracy_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_Accuracy_tags_1, sizeof(asn_DEF_Accuracy_tags_1) /sizeof(asn_DEF_Accuracy_tags_1[0]), /* 1 */ asn_DEF_Accuracy_tags_1, /* Same as above */ sizeof(asn_DEF_Accuracy_tags_1) /sizeof(asn_DEF_Accuracy_tags_1[0]), /* 1 */ &asn_PER_type_Accuracy_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/xer_decoder.h0000644000175000017500000000641012576764164022431 0ustar carlescarles/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_DECODER_H_ #define _XER_DECODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * The XER decoder of any ASN.1 type. May be invoked by the application. */ asn_dec_rval_t xer_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of data buffer */ ); /* * Type of the type-specific XER decoder function. */ typedef asn_dec_rval_t (xer_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const char *opt_mname, /* Member name */ const void *buf_ptr, size_t size ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Generalized function for decoding the primitive values. * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 * and others. This function should not be used by applications, as its API * is subject to changes. */ asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx, /* Type decoder context */ void *struct_key, /* Treated as opaque pointer */ const char *xml_tag, /* Expected XML tag name */ const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_key, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_key, const void *chunk_buf, size_t chunk_size, int have_more) ); /* * Fetch the next XER (XML) token from the stream. * The function returns the number of bytes occupied by the chunk type, * returned in the _ch_type. The _ch_type is only set (and valid) when * the return value is greater than 0. */ typedef enum pxer_chunk_type { PXER_TAG, /* Complete XER tag */ PXER_TEXT, /* Plain text between XER tags */ PXER_COMMENT /* A comment, may be part of */ } pxer_chunk_type_e; ssize_t xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); /* * This function checks the buffer against the tag name is expected to occur. */ typedef enum xer_check_tag { XCT_BROKEN = 0, /* The tag is broken */ XCT_OPENING = 1, /* This is the tag */ XCT_CLOSING = 2, /* This is the tag */ XCT_BOTH = 3, /* This is the tag */ XCT__UNK__MASK = 4, /* Mask of everything unexpected */ XCT_UNKNOWN_OP = 5, /* Unexpected tag */ XCT_UNKNOWN_CL = 6, /* Unexpected tag */ XCT_UNKNOWN_BO = 7 /* Unexpected tag */ } xer_check_tag_e; xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag); /* * Check whether this buffer consists of entirely XER whitespace characters. * RETURN VALUES: * 1: Whitespace or empty string * 0: Non-whitespace */ int xer_is_whitespace(const void *chunk_buf, size_t chunk_size); /* * Skip the series of anticipated extensions. */ int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); #ifdef __cplusplus } #endif #endif /* _XER_DECODER_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/RoughRTD.c0000644000175000017500000001076612576764164021610 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "RoughRTD.h" int RoughRTD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= 0 && value <= 1250)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void RoughRTD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void RoughRTD_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { RoughRTD_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int RoughRTD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t RoughRTD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t RoughRTD_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t RoughRTD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t RoughRTD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t RoughRTD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t RoughRTD_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { RoughRTD_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_RoughRTD_constr_1 = { { APC_CONSTRAINED, 11, 11, 0, 1250 } /* (0..1250) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_RoughRTD_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_RoughRTD = { "RoughRTD", "RoughRTD", RoughRTD_free, RoughRTD_print, RoughRTD_constraint, RoughRTD_decode_ber, RoughRTD_encode_der, RoughRTD_decode_xer, RoughRTD_encode_xer, RoughRTD_decode_uper, RoughRTD_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_RoughRTD_tags_1, sizeof(asn_DEF_RoughRTD_tags_1) /sizeof(asn_DEF_RoughRTD_tags_1[0]), /* 1 */ asn_DEF_RoughRTD_tags_1, /* Same as above */ sizeof(asn_DEF_RoughRTD_tags_1) /sizeof(asn_DEF_RoughRTD_tags_1[0]), /* 1 */ &asn_PER_type_RoughRTD_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSCommonAssistData.h0000644000175000017500000000226412576764164024156 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSCommonAssistData_H_ #define _GANSSCommonAssistData_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct GANSSReferenceTime; struct GANSSRefLocation; struct GANSSIonosphericModel; /* GANSSCommonAssistData */ typedef struct GANSSCommonAssistData { struct GANSSReferenceTime *ganssReferenceTime /* OPTIONAL */; struct GANSSRefLocation *ganssRefLocation /* OPTIONAL */; struct GANSSIonosphericModel *ganssIonosphericModel /* OPTIONAL */; /* * This type is extensible, * possible extensions are below. */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSCommonAssistData_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSCommonAssistData; #ifdef __cplusplus } #endif /* Referred external types */ #include "GANSSReferenceTime.h" #include "GANSSRefLocation.h" #include "GANSSIonosphericModel.h" #endif /* _GANSSCommonAssistData_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/NumOfMeasurements.h0000644000175000017500000000174612576764164023572 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _NumOfMeasurements_H_ #define _NumOfMeasurements_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* NumOfMeasurements */ typedef long NumOfMeasurements_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_NumOfMeasurements; asn_struct_free_f NumOfMeasurements_free; asn_struct_print_f NumOfMeasurements_print; asn_constr_check_f NumOfMeasurements_constraint; ber_type_decoder_f NumOfMeasurements_decode_ber; der_type_encoder_f NumOfMeasurements_encode_der; xer_type_decoder_f NumOfMeasurements_decode_xer; xer_type_encoder_f NumOfMeasurements_encode_xer; per_type_decoder_f NumOfMeasurements_decode_uper; per_type_encoder_f NumOfMeasurements_encode_uper; #ifdef __cplusplus } #endif #endif /* _NumOfMeasurements_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/TA2.c0000644000175000017500000001045312576764164020531 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #include "TA2.h" int TA2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { _ASN_CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -64 && value <= 63)) { /* Constraint check succeeded */ return 0; } else { _ASN_CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void TA2_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void TA2_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { TA2_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int TA2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { TA2_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t TA2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { TA2_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t TA2_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { TA2_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t TA2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { TA2_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t TA2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { TA2_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t TA2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { TA2_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t TA2_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { TA2_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_TA2_constr_1 = { { APC_CONSTRAINED, 7, 7, -64, 63 } /* (-64..63) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static ber_tlv_tag_t asn_DEF_TA2_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TA2 = { "TA2", "TA2", TA2_free, TA2_print, TA2_constraint, TA2_decode_ber, TA2_encode_der, TA2_decode_xer, TA2_encode_xer, TA2_decode_uper, TA2_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_TA2_tags_1, sizeof(asn_DEF_TA2_tags_1) /sizeof(asn_DEF_TA2_tags_1[0]), /* 1 */ asn_DEF_TA2_tags_1, /* Same as above */ sizeof(asn_DEF_TA2_tags_1) /sizeof(asn_DEF_TA2_tags_1[0]), /* 1 */ &asn_PER_type_TA2_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/ENUMERATED.h0000644000175000017500000000102012576764164021567 0ustar carlescarles/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _ENUMERATED_H_ #define _ENUMERATED_H_ #include #ifdef __cplusplus extern "C" { #endif typedef INTEGER_t ENUMERATED_t; /* Implemented via INTEGER */ extern asn_TYPE_descriptor_t asn_DEF_ENUMERATED; per_type_decoder_f ENUMERATED_decode_uper; per_type_encoder_f ENUMERATED_encode_uper; #ifdef __cplusplus } #endif #endif /* _ENUMERATED_H_ */ gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/PositionMethod.h0000644000175000017500000000212512576764164023112 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _PositionMethod_H_ #define _PositionMethod_H_ #include /* Including external dependencies */ #include #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum PositionMethod { PositionMethod_eotd = 0, PositionMethod_gps = 1, PositionMethod_gpsOrEOTD = 2 } e_PositionMethod; /* PositionMethod */ typedef ENUMERATED_t PositionMethod_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PositionMethod; asn_struct_free_f PositionMethod_free; asn_struct_print_f PositionMethod_print; asn_constr_check_f PositionMethod_constraint; ber_type_decoder_f PositionMethod_decode_ber; der_type_encoder_f PositionMethod_encode_der; xer_type_decoder_f PositionMethod_decode_xer; xer_type_encoder_f PositionMethod_encode_xer; per_type_decoder_f PositionMethod_decode_uper; per_type_encoder_f PositionMethod_encode_uper; #ifdef __cplusplus } #endif #endif /* _PositionMethod_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/asn-rrlp/GANSSIonosphereModel.h0000644000175000017500000000136612576764164024043 0ustar carlescarles/* * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "RRLP-Components" * found in "../rrlp-components.asn" */ #ifndef _GANSSIonosphereModel_H_ #define _GANSSIonosphereModel_H_ #include /* Including external dependencies */ #include #include #ifdef __cplusplus extern "C" { #endif /* GANSSIonosphereModel */ typedef struct GANSSIonosphereModel { long ai0; long ai1; long ai2; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } GANSSIonosphereModel_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_GANSSIonosphereModel; #ifdef __cplusplus } #endif #endif /* _GANSSIonosphereModel_H_ */ #include gnss-sdr-0.0.6/src/core/libs/supl/supl.h0000644000175000017500000001217412576764211017370 0ustar carlescarles/* ** SUPL library ** ** Copyright (c) 2007 Tatu Mannisto ** All rights reserved. ** Redistribution and modifications are permitted subject to BSD license. ** Modifified by Carles Fernandez ** to make use of the gnutls library. ** */ #ifndef SUPL_H #define SUPL_H #ifdef USE_EXPORT #define EXPORT __attribute__((visibility("default"))) #else #define EXPORT #endif #include #include #include #include #include #include #include #define SUPL_PORT "7275" /* error messages */ #define E_SUPL_CONNECT (-1) #define E_SUPL_ENCODE_START (-2) #define E_SUPL_RECV_RESPONSE (-3) #define E_SUPL_SUPLRESPONSE (-4) #define E_SUPL_ENCODE_POSINIT (-5) #define E_SUPL_RECV_SUPLPOS (-6) #define E_SUPL_SUPLPOS (-7) #define E_SUPL_DECODE_RRLP (-8) #define E_SUPL_RRLP_ACK (-9) #define E_SUPL_ENCODE (-10) #define E_SUPL_WRITE (-11) #define E_SUPL_READ (-12) #define E_SUPL_INTERNAL (-13) #define E_SUPL_DECODE (-14) #define E_SUPL_ENCODE_RRLP (-15) /* diagnostic & debug values */ #define SUPL_DEBUG_RRLP 1 #define SUPL_DEBUG_SUPL 2 #define SUPL_DEBUG_DEBUG 4 /* flags for additional assistance requests */ #define SUPL_REQUEST_ALMANAC 1 /* flags for collected assist data elements */ #define SUPL_RRLP_ASSIST_REFTIME (1) #define SUPL_RRLP_ASSIST_REFLOC (2) #define SUPL_RRLP_ASSIST_IONO (4) #define SUPL_RRLP_ASSIST_EPHEMERIS (8) #define SUPL_RRLP_ASSIST_UTC (16) #define SUPL_ACQUIS_DOPPLER (1) #define SUPL_ACQUIS_ANGLE (2) #define MAX_EPHEMERIS 32 struct supl_acquis_s { u_int8_t prn; u_int8_t parts; int16_t doppler0; int8_t doppler1; u_int8_t d_win; u_int16_t code_ph; u_int8_t code_ph_int; u_int8_t bit_num; u_int16_t code_ph_win; u_int8_t az; u_int8_t el; u_int8_t fill[2]; }; struct supl_almanac_s { u_int8_t prn; u_int16_t e; u_int8_t toa; int16_t Ksii; int16_t OMEGA_dot; u_int32_t A_sqrt; int32_t OMEGA_0; int32_t w; int32_t M0; int16_t AF0; int16_t AF1; // int32_t health; }; struct supl_ephemeris_s { u_int8_t prn; u_int8_t fill1; u_int16_t delta_n; int32_t M0; u_int32_t e; u_int32_t A_sqrt; int32_t OMEGA_0; int32_t i0; int32_t w; int32_t OMEGA_dot; int16_t i_dot; int16_t Cuc; int16_t Cus; int16_t Crc; int16_t Crs; int16_t Cic; int16_t Cis; u_int16_t toe; u_int16_t IODC; u_int16_t toc; int32_t AF0; int16_t AF1; int8_t AF2; u_int8_t nav_model; /* nav model */ u_int8_t bits; u_int8_t ura; u_int8_t health; char reserved[11]; int8_t tgd; u_int8_t AODA; }; struct supl_ionospheric_s { int8_t a0, a1, a2,a3, b0, b1, b2, b3; }; struct supl_utc_s { int32_t a0; int32_t a1; int8_t delta_tls; u_int8_t tot; u_int8_t wnt; u_int8_t wnlsf; u_int8_t dn; u_int8_t delta_tlsf; u_int8_t fill[8]; }; typedef struct supl_rrlp_ctx_s { int set; struct { long gps_tow, gps_week; struct timeval stamp; } time; struct { int uncertainty; double lat, lon; /* of the base station */ } pos; struct supl_ionospheric_s iono; struct supl_utc_s utc; int cnt_eph; struct supl_ephemeris_s eph[MAX_EPHEMERIS]; int cnt_alm; int alm_week; struct supl_almanac_s alm[MAX_EPHEMERIS]; int cnt_acq; int acq_time; struct supl_acquis_s acq[MAX_EPHEMERIS]; } supl_assist_t; typedef struct supl_param_s { int set; int request; struct { int mcc, mnc, lac, ci; } gsm; struct { int mcc, mnc, uc; } wcdma; struct { int mcc, mnc, lac, ci; double lat, lon; int uncert; } known; char msisdn[8]; } supl_param_t; typedef struct supl_ctx_s { supl_param_t p; int fd; SSL *ssl; SSL_CTX *ssl_ctx; struct { void *buf; size_t size; } slp_session_id; } supl_ctx_t; int supl_ctx_new(supl_ctx_t *ctx); int supl_ctx_free(supl_ctx_t *ctx); void supl_set_gsm_cell(supl_ctx_t *ctx, int mcc, int mns, int lac, int ci); void supl_set_wcdma_cell(supl_ctx_t *ctx, int mcc, int mns, int uc); void supl_set_gsm_cell_known(supl_ctx_t *ctx, int mcc, int mns, int lac, int ci, double lat, double lon, int uncert); void supl_set_server(supl_ctx_t *ctx, char *server); void supl_set_fd(supl_ctx_t *ctx, int fd); void supl_request(supl_ctx_t *ctx, int flags); int supl_get_assist(supl_ctx_t *ctx, char *server, supl_assist_t *assist); void supl_set_debug(FILE *log, int flags); /* ** stuff above should be enough for supl client implementation */ typedef void (*supl_debug_cb)(char format, ...); typedef struct supl_ulp_s { ULP_PDU_t *pdu; size_t size; unsigned char buffer[8192]; } supl_ulp_t; typedef struct supl_rrlp_s { PDU_t *pdu; size_t size; unsigned char buffer[8192]; } supl_rrlp_t; void supl_ulp_free(supl_ulp_t *pdu); int supl_ulp_encode(supl_ulp_t *pdu); int supl_ulp_decode(supl_ulp_t *pdu); int supl_decode_rrlp(supl_ulp_t *pdu, PDU_t **rrlp); int supl_collect_rrlp(supl_assist_t *assist, PDU_t *rrlp, struct timeval *t); int supl_server_connect(supl_ctx_t *ctx, char *server); void supl_close(supl_ctx_t *ctx); int supl_ulp_send(supl_ctx_t *ctx, supl_ulp_t *pdu); int supl_ulp_recv(supl_ctx_t *ctx, supl_ulp_t *pdu); #endif gnss-sdr-0.0.6/src/core/libs/INIReader.h0000644000175000017500000000733212576764164017173 0ustar carlescarles/*! * \file INIReader.h * \brief This class reads an INI file into easy-to-access name/value pairs. * \author Brush Technologies, 2009. * * inih (INI Not Invented Here) is a simple .INI file parser written in C++. * It's only a couple of pages of code, and it was designed to be small * and simple, so it's good for embedded systems. To use it, just give * ini_parse() an INI file, and it will call a callback for every * name=value pair parsed, giving you strings for the section, name, * and value. It's done this way because it works well on low-memory * embedded systems, but also because it makes for a KISS implementation. * * ------------------------------------------------------------------------- * inih and INIReader are released under the New BSD license: * * Copyright (c) 2009, Brush Technology * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Brush Technology 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 BRUSH TECHNOLOGY ''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 BRUSH TECHNOLOGY 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. * * Go to the project home page for more info: * * http://code.google.com/p/inih/ * ------------------------------------------------------------------------- */ #ifndef __INIREADER_H__ #define __INIREADER_H__ #include #include /*! * \brief Read an INI file into easy-to-access name/value pairs. (Note that I've gone * for simplicity here rather than speed, but it should be pretty decent.) */ class INIReader { public: //! Construct INIReader and parse given filename. See ini.h for more info about the parsing. INIReader(std::string filename); //! Return the result of ini_parse(), i.e., 0 on success, line number of first error on parse error, or -1 on file open error. int ParseError(); //! Get a string value from INI file, returning default_value if not found. std::string Get(std::string section, std::string name, std::string default_value); //! Get an integer (long) value from INI file, returning default_value if not found. long GetInteger(std::string section, std::string name, long default_value); private: int _error; std::map _values; static std::string MakeKey(std::string section, std::string name); static int ValueHandler(void* user, const char* section, const char* name, const char* value); }; #endif // __INIREADER_H__ gnss-sdr-0.0.6/src/core/libs/ini.h0000644000175000017500000001031012576764164016176 0ustar carlescarles/*! * \file ini.h * \brief This function parses an INI file into easy-to-access name/value pairs. * \author Brush Technologies, 2009. * * inih (INI Not Invented Here) is a simple .INI file parser written in C++. * It's only a couple of pages of code, and it was designed to be small * and simple, so it's good for embedded systems. To use it, just give * ini_parse() an INI file, and it will call a callback for every * name=value pair parsed, giving you strings for the section, name, * and value. It's done this way because it works well on low-memory * embedded systems, but also because it makes for a KISS implementation. * Parse given INI-style file. May have [section]s, name=value pairs * (whitespace stripped), and comments starting with ';' (semicolon). * Section is "" if name=value pair parsed before any section heading. * For each name=value pair parsed, call handler function with given user * pointer as well as section, name, and value (data only valid for duration * of handler call). Handler should return nonzero on success, zero on error. * Returns 0 on success, line number of first error on parse error, or -1 on * file open error * * ------------------------------------------------------------------------- * inih and INIReader are released under the New BSD license: * * Copyright (c) 2009, Brush Technology * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Brush Technology 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 BRUSH TECHNOLOGY ''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 BRUSH TECHNOLOGY 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. * * Go to the project home page for more info: * * http://code.google.com/p/inih/ * ------------------------------------------------------------------------- */ #ifndef __INI_H__ #define __INI_H__ /* Make this header file easier to include in C++ code */ #ifdef __cplusplus extern "C" { #endif /* Parse given INI-style file. May have [section]s, name=value pairs (whitespace stripped), and comments starting with ';' (semicolon). Section is "" if name=value pair parsed before any section heading. For each name=value pair parsed, call handler function with given user pointer as well as section, name, and value (data only valid for duration of handler call). Handler should return nonzero on success, zero on error. Returns 0 on success, line number of first error on parse error, or -1 on file open error. */ int ini_parse(const char* filename, int (*handler)(void* user, const char* section, const char* name, const char* value), void* user); /* Nonzero to allow multi-line value parsing, in the style of Python's ConfigParser. If allowed, ini_parse() will call the handler with the same name for each subsequent line parsed. */ #ifndef INI_ALLOW_MULTILINE #define INI_ALLOW_MULTILINE 1 #endif #ifdef __cplusplus } #endif #endif /* __INI_H__ */ gnss-sdr-0.0.6/src/core/libs/string_converter.h0000644000175000017500000000364412576764164021030 0ustar carlescarles/*! * \file string_converter.h * \brief Interface of a class that interprets the contents of a string * and converts it into different types. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_STRING_CONVERTER_H_ #define GNSS_SDR_STRING_CONVERTER_H_ #include /*! * \brief Class that interprets the contents of a string * and converts it into different types. */ class StringConverter { public: StringConverter(); virtual ~StringConverter(); bool convert(const std::string& value, bool default_value); long convert(const std::string& value, long default_value); int convert(const std::string& value, int default_value); unsigned int convert(const std::string& value, unsigned int default_value); float convert(const std::string& value, float default_value); double convert(const std::string& value, double default_value); }; #endif /*GNSS_SDR_STRING_CONVERTER_H_*/ gnss-sdr-0.0.6/src/core/libs/ini.cc0000644000175000017500000001462112576764164016345 0ustar carlescarles/*! * \file ini.cc * \brief This function parses an INI file into easy-to-access name/value pairs. * \author Brush Technologies, 2009. * * inih (INI Not Invented Here) is a simple .INI file parser written in C++. * It's only a couple of pages of code, and it was designed to be small * and simple, so it's good for embedded systems. To use it, just give * ini_parse() an INI file, and it will call a callback for every * name=value pair parsed, giving you strings for the section, name, * and value. It's done this way because it works well on low-memory * embedded systems, but also because it makes for a KISS implementation. * Parse given INI-style file. May have [section]s, name=value pairs * (whitespace stripped), and comments starting with ';' (semicolon). * Section is "" if name=value pair parsed before any section heading. * For each name=value pair parsed, call handler function with given user * pointer as well as section, name, and value (data only valid for duration * of handler call). Handler should return nonzero on success, zero on error. * Returns 0 on success, line number of first error on parse error, or -1 on * file open error * * ------------------------------------------------------------------------- * inih and INIReader are released under the New BSD license: * * Copyright (c) 2009, Brush Technology * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Brush Technology 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 BRUSH TECHNOLOGY ''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 BRUSH TECHNOLOGY 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. * * Go to the project home page for more info: * * http://code.google.com/p/inih/ * ------------------------------------------------------------------------- */ #include #include #include #include "ini.h" #define MAX_LINE 200 #define MAX_SECTION 50 #define MAX_NAME 50 /* Strip whitespace chars off end of given string, in place. Return s. */ static char* rstrip(char* s) { char* p = s + strlen(s); while (p > s && isspace(*--p)) *p = '\0'; return s; } /* Return pointer to first non-whitespace char in given string. */ static char* lskip(const char* s) { while (*s && isspace(*s)) s++; return (char*)s; } /* Return pointer to first char c or ';' in given string, or pointer to null at end of string if neither found. */ static char* find_char_or_comment(const char* s, char c) { while (*s && *s != c && *s != ';') s++; return (char*)s; } /* Version of strncpy that ensures dest (size bytes) is null-terminated. */ static char* strncpy0(char* dest, const char* src, size_t size) { strncpy(dest, src, size); dest[size - 1] = '\0'; return dest; } /* See documentation in header file. */ int ini_parse(const char* filename, int (*handler)(void*, const char*, const char*, const char*), void* user) { /* Uses a fair bit of stack (use heap instead if you need to) */ char line[MAX_LINE]; char section[MAX_SECTION] = ""; char prev_name[MAX_NAME] = ""; FILE* file; char* start; char* end; char* name; char* value; int lineno = 0; int error = 0; file = fopen(filename, "r"); if (!file) return -1; /* Scan through file line by line */ while (fgets(line, sizeof(line), file) != NULL) { lineno++; start = lskip(rstrip(line)); #if INI_ALLOW_MULTILINE if (*prev_name && *start && start > line) { /* Non-black line with leading whitespace, treat as continuation of previous name's value (as per Python ConfigParser). */ if (!handler(user, section, prev_name, start) && !error) error = lineno; } else #endif if (*start == '[') { /* A "[section]" line */ end = find_char_or_comment(start + 1, ']'); if (*end == ']') { *end = '\0'; strncpy0(section, start + 1, sizeof(section)); *prev_name = '\0'; } else if (!error) { /* No ']' found on section line */ error = lineno; } } else if (*start && *start != ';') { /* Not a comment, must be a name=value pair */ end = find_char_or_comment(start, '='); if (*end == '=') { *end = '\0'; name = rstrip(start); value = lskip(end + 1); end = find_char_or_comment(value, ';'); if (*end == ';') *end = '\0'; rstrip(value); /* Valid name=value pair found, call handler */ strncpy0(prev_name, name, sizeof(prev_name)); if (!handler(user, section, name, value) && !error) error = lineno; } else if (!error) { /* No '=' found on name=value line */ error = lineno; } } } fclose(file); return error; } gnss-sdr-0.0.6/src/core/libs/gnss_sdr_supl_client.h0000644000175000017500000001236012576764164021651 0ustar carlescarles/*! * \file gnss_sdr_supl_client.h * \brief class that implements a C++ interface to external Secure User Location Protocol (SUPL) client library. * \author Javier Arribas, 2013. jarribas(at)cttc.es * * TODO: put here supl.c author info * class that implements a C++ interface to external Secure User Location Protocol (SUPL) client library. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SUPL_CLIENT_H_ #define GNSS_SDR_SUPL_CLIENT_H_ #include #include #include #include #include #include #include #include extern "C" { #include "supl.h" } #include "GPS_L1_CA.h" #include "gps_ephemeris.h" #include "gps_iono.h" #include "gps_almanac.h" #include "gps_utc_model.h" #include "gps_acq_assist.h" #include "gps_ref_time.h" #include "gps_ref_location.h" /*! * \brief class that implements a C++ interface to external Secure User Location Protocol (SUPL) client library.. */ class gnss_sdr_supl_client { private: // GSM CELL INFO int mcc; int mns; int lac; int ci; // assistance protocol structure supl_ctx_t ctx; // assistance data supl_assist_t assist; public: // SUPL SERVER INFO std::string server_name; int server_port; int request; // ephemeris map std::map gps_ephemeris_map; // almanac map std::map gps_almanac_map; // ionospheric model Gps_Iono gps_iono; // reference time Gps_Ref_Time gps_time; // UTC model Gps_Utc_Model gps_utc; // reference location Gps_Ref_Location gps_ref_loc; // Acquisition Assistance map std::map gps_acq_map; /* * \brief Initiates the TCP SSL SUPL connection to the SUPL server and request assistance data using the provided GSM Base station parameters * \param i_mcc Current network MCC (Mobile country code), 3 digits. * \param i_mns Current network MNC (Mobile Network code), 2 or 3 digits. * \param i_lac Current network LAC (Location area code),16 bits, 1-65520 are valid values. * \param i_ci Cell Identity (16 bits, 0-65535 are valid values). * \return Error code -> 0 no errors. */ int get_assistance(int i_mcc, int i_mns, int i_lac, int i_ci); /* * \brief Read the received SUPL data and stores it into the corresponding class members (gps_ephemeris_map, gps_almanac_map, gps_iono, gps_time, gps_utc, gps_acq_map, and gps_ref_loc) * */ void read_supl_data(); /*! * \brief Read ephemeris map from XML file */ bool load_ephemeris_xml(const std::string file_name); /*! * \brief Save ephemeris map to XML file. */ bool save_ephemeris_map_xml(const std::string file_name, std::map eph_map); /*! * \brief Read utc model from XML file */ bool load_utc_xml(const std::string file_name); /*! * \brief Save utc model map to XML file * To be called by ControlThread::gps_utc_model_data_write_to_XML() */ bool save_utc_map_xml(const std::string file_name, std::map utc_map); /*! * \brief Read iono from XML file */ bool load_iono_xml(const std::string file_name); /*! * \brief Save iono map to XML file */ bool save_iono_map_xml(const std::string file_name, std::map iono_map); /*! * \brief Read ref time from XML file */ bool load_ref_time_xml(const std::string file_name); /*! * \brief Save ref time map to XML file */ bool save_ref_time_map_xml(const std::string file_name, std::map ref_time_map); /*! * \brief Read ref location from XML file */ bool load_ref_location_xml(const std::string file_name); /*! * \brief Save ref location map to XML file */ bool save_ref_location_map_xml(std::string file_name, std::map ref_location_map); /* * Prints SUPL data to std::cout. Use it for debug purposes only. */ void print_assistance(); gnss_sdr_supl_client(); ~gnss_sdr_supl_client(); }; #endif gnss-sdr-0.0.6/src/core/libs/string_converter.cc0000644000175000017500000000616112576764164021163 0ustar carlescarles/*! * \file string_converter.cc * \brief Implementation of a class that interprets the contents of a string * and converts it into different types. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "string_converter.h" #include #include StringConverter::StringConverter() {} StringConverter::~StringConverter() {} bool StringConverter::convert(const std::string& value, bool default_value) { if(value.compare("true") == 0) { return true; } else if(value.compare("false") == 0) { return false; } else { return default_value; } } long StringConverter::convert(const std::string& value, long default_value) { std::stringstream stream(value); long result; stream >> result; if(stream.fail()) { return default_value; } else { return result; } } int StringConverter::convert(const std::string& value, int default_value) { std::stringstream stream(value); int result; stream >> result; if(stream.fail()) { return default_value; } else { return result; } } unsigned int StringConverter::convert(const std::string& value, unsigned int default_value) { std::stringstream stream(value); unsigned int result; stream >> result; if(stream.fail()) { return default_value; } else { return result; } } float StringConverter::convert(const std::string& value, float default_value) { std::stringstream stream(value); float result; stream >> result; if(stream.fail()) { return default_value; } else { return result; } } double StringConverter::convert(const std::string& value, double default_value) { std::stringstream stream(value); double result; stream >> result; if(stream.fail()) { return default_value; } else { return result; } } gnss-sdr-0.0.6/src/core/receiver/0000755000175000017500000000000012576764164016126 5ustar carlescarlesgnss-sdr-0.0.6/src/core/receiver/file_configuration.h0000644000175000017500000000611312576764164022146 0ustar carlescarles/*! * \file file_configuration.h * \brief A ConfigurationInterface that reads the configuration from a file. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * This implementation has a text file as the source for the values of the parameters. * The file is in the INI format, containing sections and pairs of names and values. * For more information about the INI format, see http://en.wikipedia.org/wiki/INI_file * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_FILE_CONFIGURATION_H_ #define GNSS_SDR_FILE_CONFIGURATION_H_ #include "configuration_interface.h" #include #include class INIReader; class StringConverter; class InMemoryConfiguration; /*! * \brief This class is an implementation of the interface ConfigurationInterface * * Derived from ConfigurationInterface, this class implements an interface * to a configuration file. This implementation has a text file as the source * for the values of the parameters. * The file is in the INI format, containing sections and pairs of names and values. * For more information about the INI format, see http://en.wikipedia.org/wiki/INI_file */ class FileConfiguration : public ConfigurationInterface { public: FileConfiguration(std::string filename); FileConfiguration(); //! Virtual destructor ~FileConfiguration(); std::string property(std::string property_name, std::string default_value); bool property(std::string property_name, bool default_value); long property(std::string property_name, long default_value); int property(std::string property_name, int default_value); unsigned int property(std::string property_name, unsigned int default_value); float property(std::string property_name, float default_value); double property(std::string property_name, double default_value); void set_property(std::string property_name, std::string value); private: void init(); std::string filename_; std::shared_ptr ini_reader_; std::shared_ptr overrided_; std::unique_ptr converter_; int error_; }; #endif /*GNSS_SDR_FILE_CONFIGURATION_H_*/ gnss-sdr-0.0.6/src/core/receiver/gnss_block_factory.cc0000644000175000017500000022157212576764164022321 0ustar carlescarles/*! * \file gnss_block_factory.cc * \brief This class implements a factory that returns instances of GNSS blocks. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * * This class encapsulates the complexity behind the instantiation * of GNSS blocks. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_block_factory.h" #include #include #include #include #include #include "configuration_interface.h" #include "gnss_block_interface.h" #include "pass_through.h" #include "file_signal_source.h" #include "nsr_file_signal_source.h" #include "two_bit_cpx_file_signal_source.h" #include "spir_file_signal_source.h" #include "rtl_tcp_signal_source.h" #include "null_sink_output_filter.h" #include "file_output_filter.h" #include "channel.h" #include "signal_conditioner.h" #include "array_signal_conditioner.h" #include "byte_to_short.h" #include "ibyte_to_cbyte.h" #include "ibyte_to_complex.h" #include "ishort_to_cshort.h" #include "ishort_to_complex.h" #include "direct_resampler_conditioner.h" #include "fir_filter.h" #include "freq_xlating_fir_filter.h" #include "beamformer_filter.h" #include "gps_l1_ca_pcps_acquisition.h" #include "gps_l2_m_pcps_acquisition.h" #include "gps_l1_ca_pcps_multithread_acquisition.h" #include "gps_l1_ca_pcps_tong_acquisition.h" #include "gps_l1_ca_pcps_assisted_acquisition.h" #include "gps_l1_ca_pcps_acquisition_fine_doppler.h" #include "gps_l1_ca_pcps_quicksync_acquisition.h" #include "galileo_e1_pcps_ambiguous_acquisition.h" #include "galileo_e1_pcps_8ms_ambiguous_acquisition.h" #include "galileo_e1_pcps_tong_ambiguous_acquisition.h" #include "galileo_e1_pcps_cccwsr_ambiguous_acquisition.h" #include "galileo_e1_pcps_quicksync_ambiguous_acquisition.h" #include "galileo_e5a_noncoherent_iq_acquisition_caf.h" #include "gps_l1_ca_dll_pll_tracking.h" #include "gps_l1_ca_dll_pll_optim_tracking.h" #include "gps_l1_ca_dll_fll_pll_tracking.h" #include "gps_l1_ca_tcp_connector_tracking.h" #include "galileo_e1_dll_pll_veml_tracking.h" #include "galileo_volk_e1_dll_pll_veml_tracking.h" #include "galileo_e1_tcp_connector_tracking.h" #include "galileo_e5a_dll_pll_tracking.h" #include "gps_l2_m_dll_pll_tracking.h" #include "gps_l1_ca_telemetry_decoder.h" #include "gps_l2_m_telemetry_decoder.h" #include "galileo_e1b_telemetry_decoder.h" #include "galileo_e5a_telemetry_decoder.h" #include "sbas_l1_telemetry_decoder.h" #include "gps_l1_ca_observables.h" #include "galileo_e1_observables.h" #include "hybrid_observables.h" #include "mixed_observables.h" #include "gps_l1_ca_pvt.h" #include "galileo_e1_pvt.h" #include "hybrid_pvt.h" #if OPENCL_BLOCKS #include "gps_l1_ca_pcps_opencl_acquisition.h" #endif #if GN3S_DRIVER #include "gn3s_signal_source.h" #endif #if RAW_ARRAY_DRIVER #include "raw_array_signal_source.h" #endif #if OSMOSDR_DRIVER #include "osmosdr_signal_source.h" #endif #if UHD_DRIVER #include "uhd_signal_source.h" #endif #if FLEXIBAND_DRIVER #include "flexiband_signal_source.h" #endif #if CUDA_GPU_ACCEL #include "gps_l1_ca_dll_pll_tracking_gpu.h" #endif using google::LogMessage; GNSSBlockFactory::GNSSBlockFactory() {} GNSSBlockFactory::~GNSSBlockFactory() {} std::unique_ptr GNSSBlockFactory::GetSignalSource( std::shared_ptr configuration, boost::shared_ptr queue, int ID) { std::string default_implementation = "File_Signal_Source"; std::string role = "SignalSource"; //backwards compatibility for old conf files if (ID != -1) { role = "SignalSource" + boost::lexical_cast(ID); } std::string implementation = configuration->property(role + ".implementation", default_implementation); LOG(INFO) << "Getting SignalSource with implementation " << implementation; return GetBlock(configuration, role, implementation, 0, 1, queue); } std::unique_ptr GNSSBlockFactory::GetSignalConditioner( std::shared_ptr configuration, boost::shared_ptr queue, int ID) { std::string default_implementation = "Pass_Through"; //backwards compatibility for old conf files std::string role_conditioner = "SignalConditioner" ; std::string role_datatypeadapter = "DataTypeAdapter"; std::string role_inputfilter = "InputFilter"; std::string role_resampler = "Resampler"; if (ID != -1) { role_conditioner = "SignalConditioner" + boost::lexical_cast(ID); role_datatypeadapter = "DataTypeAdapter" + boost::lexical_cast(ID); role_inputfilter = "InputFilter" + boost::lexical_cast(ID); role_resampler = "Resampler" + boost::lexical_cast(ID); } std::string signal_conditioner = configuration->property( role_conditioner + ".implementation", default_implementation); std::string data_type_adapter; std::string input_filter; std::string resampler; if(signal_conditioner.compare("Pass_Through") == 0) { data_type_adapter = "Pass_Through"; input_filter = "Pass_Through"; resampler = "Pass_Through"; } else { data_type_adapter = configuration->property( role_datatypeadapter + ".implementation", default_implementation); input_filter = configuration->property( role_inputfilter + ".implementation", default_implementation); resampler = configuration->property( role_resampler + ".implementation", default_implementation); } LOG(INFO) << "Getting SignalConditioner with DataTypeAdapter implementation: " << data_type_adapter << ", InputFilter implementation: " << input_filter << ", and Resampler implementation: " << resampler; if(signal_conditioner.compare("Array_Signal_Conditioner") == 0) { //instantiate the array version std::unique_ptr conditioner_(new ArraySignalConditioner(configuration.get(), GetBlock(configuration, role_datatypeadapter, data_type_adapter, 1, 1, queue).release(), GetBlock( configuration,role_inputfilter, input_filter, 1, 1, queue).release(), GetBlock(configuration,role_resampler, resampler, 1, 1, queue).release(), role_conditioner, "Signal_Conditioner", queue)); return conditioner_; } else { //single-antenna version std::unique_ptr conditioner_(new SignalConditioner(configuration.get(), GetBlock(configuration, role_datatypeadapter, data_type_adapter, 1, 1, queue).release(), GetBlock( configuration,role_inputfilter, input_filter, 1, 1, queue).release(), GetBlock(configuration,role_resampler, resampler, 1, 1, queue).release(), role_conditioner, "Signal_Conditioner", queue)); return conditioner_; } } std::unique_ptr GNSSBlockFactory::GetObservables(std::shared_ptr configuration, boost::shared_ptr queue) { std::string default_implementation = "GPS_L1_CA_Observables"; std::string implementation = configuration->property("Observables.implementation", default_implementation); LOG(INFO) << "Getting Observables with implementation " << implementation; unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED if(Galileo_channels == 0) { Galileo_channels = configuration->property("Channels_1B.count", 0); } Galileo_channels += configuration->property("Channels_5X.count", 0); unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED if(GPS_channels == 0) { GPS_channels = configuration->property("Channels_1C.count", 0); } GPS_channels += configuration->property("Channels_2S.count", 0); return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels, Galileo_channels + GPS_channels, queue); } std::unique_ptr GNSSBlockFactory::GetPVT(std::shared_ptr configuration, boost::shared_ptr queue) { std::string default_implementation = "Pass_Through"; std::string implementation = configuration->property("PVT.implementation", default_implementation); LOG(INFO) << "Getting PVT with implementation " << implementation; unsigned int Galileo_channels = configuration->property("Channels_Galileo.count", 0); // DEPRECATED if(Galileo_channels == 0) { Galileo_channels = configuration->property("Channels_1B.count", 0); } Galileo_channels += configuration->property("Channels_5X.count", 0); unsigned int GPS_channels = configuration->property("Channels_GPS.count", 0); // DEPRECATED if(GPS_channels == 0) { GPS_channels = configuration->property("Channels_1C.count", 0); } GPS_channels += configuration->property("Channels_2S.count", 0); return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels, 1, queue); } std::unique_ptr GNSSBlockFactory::GetOutputFilter(std::shared_ptr configuration, boost::shared_ptr queue) { std::string default_implementation = "Null_Sink_Output_Filter"; std::string implementation = configuration->property("OutputFilter.implementation", default_implementation); LOG(INFO) << "Getting OutputFilter with implementation " << implementation; return GetBlock(configuration, "OutputFilter", implementation, 1, 0, queue); } //********* GPS CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_GPS( std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue) { LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; std::string aux = configuration->property("Acquisition_GPS" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix1; if(aux.compare("W") != 0) { appendix1 = boost::lexical_cast(channel); } else { appendix1 = ""; } aux = configuration->property("Tracking_GPS" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix2; if(aux.compare("W") != 0) { appendix2 = boost::lexical_cast(channel); } else { appendix2 = ""; } aux = configuration->property("TelemetryDecoder_GPS" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix3; if(aux.compare("W") != 0) { appendix3 = boost::lexical_cast(channel); } else { appendix3 = ""; } std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_GPS" + appendix1, acq, 1, 0, queue); std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_GPS" + appendix2, trk, 1, 1, queue); std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_GPS" + appendix3, tlm, 1, 1, queue); std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), acq_.release(), trk_.release(), tlm_.release(), "Channel", "GPS" + appendix1, queue)); return channel_; } //********* GPS L1 C/A CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_1C( std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue) { LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; std::string aux = configuration->property("Acquisition_1C" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix1; if(aux.compare("W") != 0) { appendix1 = boost::lexical_cast(channel); } else { appendix1 = ""; } aux = configuration->property("Tracking_1C" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix2; if(aux.compare("W") != 0) { appendix2 = boost::lexical_cast(channel); } else { appendix2 = ""; } aux = configuration->property("TelemetryDecoder_1C" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix3; if(aux.compare("W") != 0) { appendix3 = boost::lexical_cast(channel); } else { appendix3 = ""; } std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_1C" + appendix1, acq, 1, 0, queue); std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_1C"+ appendix2, trk, 1, 1, queue); std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_1C" + appendix3, tlm, 1, 1, queue); std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), acq_.release(), trk_.release(), tlm_.release(), "Channel", "1C" + appendix1, queue)); return channel_; } //********* GPS L2C (M) CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_2S( std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue) { LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; std::string aux = configuration->property("Acquisition_2S" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix1; if(aux.compare("W") != 0) { appendix1 = boost::lexical_cast(channel); } else { appendix1 = ""; } aux = configuration->property("Tracking_2S" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix2; if(aux.compare("W") != 0) { appendix2 = boost::lexical_cast(channel); } else { appendix2 = ""; } aux = configuration->property("TelemetryDecoder_2S" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix3; if(aux.compare("W") != 0) { appendix3 = boost::lexical_cast(channel); } else { appendix3 = ""; } std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_2S" + appendix1 , acq, 1, 0, queue); std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_2S" + appendix2, trk, 1, 1, queue); std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_2S" + appendix3, tlm, 1, 1, queue); std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), acq_.release(), trk_.release(), tlm_.release(), "Channel", "2S" + appendix1, queue)); return channel_; } //********* GALILEO CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_Galileo( std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue) { std::stringstream stream; stream << channel; std::string id = stream.str(); LOG(INFO) << "Instantiating Channel " << id << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; std::string aux = configuration->property("Acquisition_Galileo" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix1; if(aux.compare("W") != 0) { appendix1 = boost::lexical_cast(channel); } else { appendix1 = ""; } aux = configuration->property("Tracking_Galileo" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix2; if(aux.compare("W") != 0) { appendix2 = boost::lexical_cast(channel); } else { appendix2 = ""; } aux = configuration->property("TelemetryDecoder_Galileo" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix3; if(aux.compare("W") != 0) { appendix3 = boost::lexical_cast(channel); } else { appendix3 = ""; } std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_Galileo" + appendix1, acq, 1, 0, queue); std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_Galileo" + appendix2, trk, 1, 1, queue); std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_Galileo" + appendix3, tlm, 1, 1, queue); std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), acq_.release(), trk_.release(), tlm_.release(), "Channel", "Galileo", queue)); return channel_; } //********* GALILEO E1 B CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_1B( std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue) { std::stringstream stream; stream << channel; std::string id = stream.str(); LOG(INFO) << "Instantiating Channel " << id << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; std::string aux = configuration->property("Acquisition_1B" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix1; if(aux.compare("W") != 0) { appendix1 = boost::lexical_cast(channel); } else { appendix1 = ""; } aux = configuration->property("Tracking_1B" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix2; if(aux.compare("W") != 0) { appendix2 = boost::lexical_cast(channel); } else { appendix2 = ""; } aux = configuration->property("TelemetryDecoder_1B" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix3; if(aux.compare("W") != 0) { appendix3 = boost::lexical_cast(channel); } else { appendix3 = ""; } std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_1B" + appendix1, acq, 1, 0, queue); std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_1B" + appendix2, trk, 1, 1, queue); std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_1B" + appendix3, tlm, 1, 1, queue); std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), acq_.release(), trk_.release(), tlm_.release(), "Channel", "1B" + appendix1, queue)); return channel_; } //********* GALILEO E5a CHANNEL ***************** std::unique_ptr GNSSBlockFactory::GetChannel_5X( std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue) { std::stringstream stream; stream << channel; std::string id = stream.str(); LOG(INFO) << "Instantiating Channel " << id << " with Acquisition Implementation: " << acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm; std::string aux = configuration->property("Acquisition_5X" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix1; if(aux.compare("W") != 0) { appendix1 = boost::lexical_cast(channel); } else { appendix1 = ""; } aux = configuration->property("Tracking_5X" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix2; if(aux.compare("W") != 0) { appendix2 = boost::lexical_cast(channel); } else { appendix2 = ""; } aux = configuration->property("TelemetryDecoder_5X" + boost::lexical_cast(channel) + ".implementation", std::string("W")); std::string appendix3; if(aux.compare("W") != 0) { appendix3 = boost::lexical_cast(channel); } else { appendix3 = ""; } std::unique_ptr pass_through_ = GetBlock(configuration, "Channel", "Pass_Through", 1, 1, queue); std::unique_ptr acq_ = GetAcqBlock(configuration, "Acquisition_5X" + appendix1, acq, 1, 0, queue); std::unique_ptr trk_ = GetTrkBlock(configuration, "Tracking_5X" + appendix2, trk, 1, 1, queue); std::unique_ptr tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_5X" + appendix3, tlm, 1, 1, queue); std::unique_ptr channel_(new Channel(configuration.get(), channel, pass_through_.release(), acq_.release(), trk_.release(), tlm_.release(), "Channel", "5X" + appendix1, queue)); return channel_; } std::unique_ptr>> GNSSBlockFactory::GetChannels( std::shared_ptr configuration, boost::shared_ptr queue) { std::string default_implementation = "Pass_Through"; unsigned int channel_count; std::string tracking_implementation; std::string telemetry_decoder_implementation; std::string acquisition_implementation; unsigned int total_channels = configuration->property("Channels_GPS.count", 0) + configuration->property("Channels_1C.count", 0) + configuration->property("Channels_2S.count", 0) + configuration->property("Channels_Galileo.count", 0) + configuration->property("Channels_1B.count", 0) + configuration->property("Channels_5X.count", 0); std::unique_ptr>> channels(new std::vector>(total_channels)); unsigned int channel_absolute_id = 0; //**************** GPS L1 C/A CHANNELS ********************** channel_count = configuration->property("Channels_GPS.count", 0); // DEPRECATED if (channel_count == 0) { channel_count = configuration->property("Channels_1C.count", 0); } LOG(INFO) << "Getting " << channel_count << " GPS L1 C/A channels"; tracking_implementation = configuration->property("Tracking_GPS.implementation", default_implementation); if (tracking_implementation.compare(default_implementation) == 0) { tracking_implementation = configuration->property("Tracking_1C.implementation", default_implementation); } telemetry_decoder_implementation = configuration->property("TelemetryDecoder_GPS.implementation", default_implementation); if (telemetry_decoder_implementation.compare(default_implementation) == 0) { telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation); } acquisition_implementation = configuration->property("Acquisition_GPS.implementation", default_implementation); if (acquisition_implementation.compare(default_implementation) == 0) { acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation); } bool apply_; std::string s; for (unsigned int i = 0; i < total_channels; i++) { apply_ = false; if( total_channels == channel_count ) { apply_ = true; } // Search for specific implementation of that particular channel in config file //(i.e. Acquisition_GPS0.implementation=xxxx) DEPRECATED s = configuration->property("Channel" + boost::lexical_cast(i) + ".signal", configuration->property("Channel.signal", std::string("W"))); if( s.compare("1C") == 0 ) { apply_ = true; } std::string acquisition_implementation_specific = configuration->property( "Acquisition_GPS" + boost::lexical_cast(i) + ".implementation", default_implementation); //(i.e. Acquisition_1C0.implementation=xxxx) if(acquisition_implementation_specific.compare(default_implementation) == 0) { acquisition_implementation_specific = configuration->property( "Acquisition_1C" + boost::lexical_cast(i) + ".implementation", default_implementation); } if(acquisition_implementation_specific.compare(default_implementation) != 0) { acquisition_implementation = acquisition_implementation_specific; apply_ = true; } //(i.e. Tracking_GPS0.implementation=xxxx) DEPRECATED std::string tracking_implementation_specific = configuration->property( "Tracking_GPS" + boost::lexical_cast(i) + ".implementation", default_implementation); //(i.e. Tracking_1C0.implementation=xxxx) if(tracking_implementation_specific.compare(default_implementation) == 0) { tracking_implementation_specific = configuration->property( "Tracking_1C" + boost::lexical_cast(i) + ".implementation", default_implementation); } if(tracking_implementation_specific.compare(default_implementation) != 0) { tracking_implementation = tracking_implementation_specific; apply_ = true; } //(i.e. TelemetryDecoder_GPS0.implementation=xxxx) DEPRECATED std::string telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_GPS" + boost::lexical_cast(i) + ".implementation", default_implementation); //(i.e. TelemetryDecoder_1C0.implementation=xxxx) if(telemetry_decoder_implementation_specific.compare(default_implementation) == 0) { telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_1C" + boost::lexical_cast(i) + ".implementation", default_implementation); } if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0) { telemetry_decoder_implementation = telemetry_decoder_implementation_specific; apply_ = true; } // Push back the channel to the vector of channels, if apply. if((configuration->property("Channels_GPS.count", 0) > 0) and apply_) { channels->at(i) = std::move(GetChannel_GPS(configuration, acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); channel_absolute_id++; } if((configuration->property("Channels_1C.count", 0) > 0) and apply_) { channels->at(i) = std::move(GetChannel_1C(configuration, acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); channel_absolute_id++; } } //**************** GPS L2C (M) CHANNELS ********************** channel_count = configuration->property("Channels_2S.count", 0); LOG(INFO) << "Getting " << channel_count << " GPS L2C (M) channels"; tracking_implementation = configuration->property("Tracking_2S.implementation", default_implementation); telemetry_decoder_implementation = configuration->property("TelemetryDecoder_2S.implementation", default_implementation); acquisition_implementation = configuration->property("Acquisition_2S.implementation", default_implementation); for (unsigned int i = 0; i < total_channels; i++) { apply_ = false; if( total_channels == channel_count ) { apply_ = true; } // Search for specific implementation of that particular channel in config file //(i.e. Acquisition_2S0.implementation=xxxx) s = configuration->property("Channel" + boost::lexical_cast(i) + ".signal", configuration->property("Channel.signal", std::string("W"))); if( s.compare("2S") == 0 ) { apply_ = true; } std::string acquisition_implementation_specific = configuration->property( "Acquisition_2S" + boost::lexical_cast(i) + ".implementation", default_implementation); if(acquisition_implementation_specific.compare(default_implementation) != 0) { acquisition_implementation = acquisition_implementation_specific; apply_ = true; } //(i.e. Tracking_2S0.implementation=xxxx) std::string tracking_implementation_specific = configuration->property( "Tracking_2S" + boost::lexical_cast(i) + ".implementation", default_implementation); if(tracking_implementation_specific.compare(default_implementation) != 0) { tracking_implementation = tracking_implementation_specific; apply_ = true; } //(i.e. TelemetryDecoder_1C0.implementation=xxxx) std::string telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_2S" + boost::lexical_cast(i) + ".implementation", default_implementation); if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0) { telemetry_decoder_implementation = telemetry_decoder_implementation_specific; apply_ = true; } // Push back the channel to the vector of channels, if apply. if((channel_count > 0) and apply_) { channels->at(i) = std::move(GetChannel_2S(configuration, acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); channel_absolute_id++; } } //**************** GALILEO E1 B (I/NAV OS) ********************** channel_count = configuration->property("Channels_Galileo.count", 0); // DEPRECATED if (channel_count == 0) { channel_count = configuration->property("Channels_1B.count", 0); } LOG(INFO) << "Getting " << channel_count << " Galileo E1 B (I/NAV OS) channels"; tracking_implementation = configuration->property("Tracking_Galileo.implementation", default_implementation); // DEPRECATED if (tracking_implementation.compare(default_implementation) == 0) { tracking_implementation = configuration->property("Tracking_1B.implementation", std::string("W")); } telemetry_decoder_implementation = configuration->property("TelemetryDecoder_Galileo.implementation", default_implementation); // DEPRECATED if (telemetry_decoder_implementation.compare(default_implementation) == 0) { telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", std::string("W")); } acquisition_implementation = configuration->property("Acquisition_Galileo.implementation", default_implementation); // DEPRECATED if (acquisition_implementation.compare(default_implementation) == 0) { acquisition_implementation = configuration->property("Acquisition_1B.implementation", std::string("W")); } for (unsigned int i = 0; i < total_channels; i++) { apply_ = false; if( total_channels == channel_count ) { apply_ = true; } // Search for specific implementation of that particular channel in config file //(i.e. Acquisition_Galileo0.implementation=xxxx) DEPRECATED s = configuration->property("Channel" + boost::lexical_cast(i) + ".signal", configuration->property("Channel.signal", std::string("W"))); if( s.compare("1B") == 0 ) { apply_ = true; } std::string acquisition_implementation_specific = configuration->property( "Acquisition_Galileo" + boost::lexical_cast(i) + ".implementation", default_implementation); //(i.e. Acquisition_1B0.implementation=xxxx) if(acquisition_implementation_specific.compare(default_implementation) == 0) { acquisition_implementation_specific = configuration->property( "Acquisition_1B" + boost::lexical_cast(i) + ".implementation", default_implementation); } if(acquisition_implementation_specific.compare(default_implementation) != 0) { acquisition_implementation = acquisition_implementation_specific; apply_ = true; } //(i.e. Tracking_Galileo0.implementation=xxxx) DEPRECATED std::string tracking_implementation_specific = configuration->property( "Tracking_Galileo" + boost::lexical_cast(i) + ".implementation", default_implementation); //(i.e. Tracking_1B0.implementation=xxxx) if(tracking_implementation_specific.compare(default_implementation) == 0) { tracking_implementation_specific = configuration->property( "Tracking_1B" + boost::lexical_cast(i) + ".implementation", default_implementation); } if(tracking_implementation_specific.compare(default_implementation) != 0) { tracking_implementation = tracking_implementation_specific; apply_ = true; } //(i.e. TelemetryDecoder_Galileo0.implementation=xxxx) DEPRECATED std::string telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_Galileo" + boost::lexical_cast(i) + ".implementation", default_implementation); //(i.e. TelemetryDecoder_1B0.implementation=xxxx) if(telemetry_decoder_implementation_specific.compare(default_implementation) == 0) { telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_1B" + boost::lexical_cast(i) + ".implementation", default_implementation); } if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0) { telemetry_decoder_implementation = telemetry_decoder_implementation_specific; apply_ = true; } // Push back the channel to the vector of channels, if apply. if((configuration->property("Channels_Galileo.count", 0) > 0) and apply_) { channels->at(i) = std::move(GetChannel_Galileo(configuration, acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); channel_absolute_id++; } if((configuration->property("Channels_1B.count", 0) > 0) and apply_) { channels->at(i) = std::move(GetChannel_1B(configuration, acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); channel_absolute_id++; } } //**************** GALILEO E5a I (F/NAV OS) CHANNELS ********************** channel_count = configuration->property("Channels_5X.count", 0); LOG(INFO) << "Getting " << channel_count << " GALILEO E5a I (F/NAV OS) channels"; tracking_implementation = configuration->property("Tracking_5X.implementation", default_implementation); telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation); acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation); for (unsigned int i = 0; i < total_channels; i++) { apply_ = false; if( total_channels == channel_count ) { apply_ = true; } // Search for specific implementation of that particular channel in config file //(i.e. Acquisition_5X0.implementation=xxxx) s = configuration->property("Channel" + boost::lexical_cast(i) + ".signal", configuration->property("Channel.signal", std::string("W"))); if( s.compare("5X") == 0 ) { apply_ = true; } std::string acquisition_implementation_specific = configuration->property( "Acquisition_5X" + boost::lexical_cast(i) + ".implementation", default_implementation); if(acquisition_implementation_specific.compare(default_implementation) != 0) { acquisition_implementation = acquisition_implementation_specific; apply_ = true; } //(i.e. Tracking_5X0.implementation=xxxx) std::string tracking_implementation_specific = configuration->property( "Tracking_5X" + boost::lexical_cast(i) + ".implementation", default_implementation); if(tracking_implementation_specific.compare(default_implementation) != 0) { tracking_implementation = tracking_implementation_specific; apply_ = true; } //(i.e. TelemetryDecoder_5X0.implementation=xxxx) std::string telemetry_decoder_implementation_specific = configuration->property( "TelemetryDecoder_5X" + boost::lexical_cast(i) + ".implementation", default_implementation); if(telemetry_decoder_implementation_specific.compare(default_implementation) != 0) { telemetry_decoder_implementation = telemetry_decoder_implementation_specific; apply_ = true; } // Push back the channel to the vector of channels, if apply. if((channel_count > 0) and apply_) { channels->at(i) = std::move(GetChannel_5X(configuration, acquisition_implementation, tracking_implementation, telemetry_decoder_implementation, i, queue)); channel_absolute_id++; } } return channels; } /* * Returns the block with the required configuration and implementation * * PLEASE ADD YOUR NEW BLOCK HERE!! * * IMPORTANT NOTE: Acquisition, Tracking and telemetry blocks are only included here for testing purposes. * To be included in a channel they must be also be included in GetAcqBlock(), GetTrkBlock() and GetTlmBlock() * (see below) */ std::unique_ptr GNSSBlockFactory::GetBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) { std::unique_ptr block; //PASS THROUGH ---------------------------------------------------------------- if (implementation.compare("Pass_Through") == 0) { std::unique_ptr block_(new Pass_Through(configuration.get(), role, in_streams, out_streams)); block = std::move(block_); } // SIGNAL SOURCES ------------------------------------------------------------- else if (implementation.compare("File_Signal_Source") == 0) { try { std::unique_ptr block_(new FileSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } catch (const std::exception &e) { std::cout << "GNSS-SDR program ended." << std::endl; exit(1); } } else if (implementation.compare("Nsr_File_Signal_Source") == 0) { try { std::unique_ptr block_(new NsrFileSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } catch (const std::exception &e) { std::cout << "GNSS-SDR program ended." << std::endl; exit(1); } } #if MODERN_GNURADIO else if (implementation.compare("Two_Bit_Cpx_File_Signal_Source") == 0) { try { std::unique_ptr block_(new TwoBitCpxFileSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } catch (const std::exception &e) { std::cout << "GNSS-SDR program ended." << std::endl; exit(1); } } #endif else if (implementation.compare("Spir_File_Signal_Source") == 0) { try { std::unique_ptr block_(new SpirFileSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } catch (const std::exception &e) { std::cout << "GNSS-SDR program ended." << std::endl; exit(1); } } else if (implementation.compare("RtlTcp_Signal_Source") == 0) { try { std::unique_ptr block_(new RtlTcpSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } catch (const std::exception &e) { std::cout << "GNSS-SDR program ended." << std::endl; exit(1); } } #if UHD_DRIVER else if (implementation.compare("UHD_Signal_Source") == 0) { std::unique_ptr block_(new UhdSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif #if GN3S_DRIVER else if (implementation.compare("GN3S_Signal_Source") == 0) { std::unique_ptr block_(new Gn3sSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif #if RAW_ARRAY_DRIVER else if (implementation.compare("Raw_Array_Signal_Source") == 0) { std::unique_ptr block_(new RawArraySignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif #if OSMOSDR_DRIVER else if (implementation.compare("Osmosdr_Signal_Source") == 0) { std::unique_ptr block_(new OsmosdrSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif #if FLEXIBAND_DRIVER else if (implementation.compare("Flexiband_Signal_Source") == 0) { std::unique_ptr block_(new FlexibandSignalSource(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif // DATA TYPE ADAPTER ----------------------------------------------------------- else if (implementation.compare("Byte_To_Short") == 0) { std::unique_ptrblock_(new ByteToShort(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Ibyte_To_Cbyte") == 0) { std::unique_ptrblock_(new IbyteToCbyte(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Ibyte_To_Complex") == 0) { std::unique_ptrblock_(new IbyteToComplex(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Ishort_To_Cshort") == 0) { std::unique_ptrblock_(new IshortToCshort(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Ishort_To_Complex") == 0) { std::unique_ptrblock_(new IshortToComplex(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } // INPUT FILTER ---------------------------------------------------------------- else if (implementation.compare("Fir_Filter") == 0) { std::unique_ptr block_(new FirFilter(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Freq_Xlating_Fir_Filter") == 0) { std::unique_ptr block_(new FreqXlatingFirFilter(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Beamformer_Filter") == 0) { std::unique_ptr block_(new BeamformerFilter(configuration.get(), role, in_streams, out_streams)); block = std::move(block_); } // RESAMPLER ------------------------------------------------------------------- else if (implementation.compare("Direct_Resampler") == 0) { std::unique_ptr block_(new DirectResamplerConditioner(configuration.get(), role, in_streams, out_streams)); block = std::move(block_); } // ACQUISITION BLOCKS --------------------------------------------------------- else if (implementation.compare("GPS_L1_CA_PCPS_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_Assisted_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsAssistedAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_Tong_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsTongAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_Multithread_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsMultithreadAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #if OPENCL_BLOCKS else if (implementation.compare("GPS_L1_CA_PCPS_OpenCl_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsOpenClAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif else if (implementation.compare("GPS_L1_CA_PCPS_Acquisition_Fine_Doppler") == 0) { std::unique_ptr block_(new GpsL1CaPcpsAcquisitionFineDoppler(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_QuickSync_Acquisition") == 0) { std::unique_ptr block_( new GpsL1CaPcpsQuickSyncAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1PcpsAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_8ms_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1Pcps8msAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_Tong_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1PcpsTongAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1PcpsCccwsrAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E5a_Noncoherent_IQ_Acquisition_CAF") == 0) { std::unique_ptr block_(new GalileoE5aNoncoherentIQAcquisitionCaf(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition") == 0) { std::unique_ptr block_( new GalileoE1PcpsQuickSyncAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } // TRACKING BLOCKS ------------------------------------------------------------- else if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaDllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_DLL_PLL_Optim_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaDllPllOptimTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_DLL_FLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaDllFllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_TCP_CONNECTOR_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaTcpConnectorTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_DLL_PLL_VEML_Tracking") == 0) { std::unique_ptr block_(new GalileoE1DllPllVemlTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_volk_E1_DLL_PLL_VEML_Tracking") == 0) { std::unique_ptr block_(new GalileoVolkE1DllPllVemlTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_TCP_CONNECTOR_Tracking") == 0) { std::unique_ptr block_(new GalileoE1TcpConnectorTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E5a_DLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GalileoE5aDllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } // TELEMETRY DECODERS ---------------------------------------------------------- else if (implementation.compare("GPS_L1_CA_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GpsL1CaTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1B_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GalileoE1BTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("SBAS_L1_Telemetry_Decoder") == 0) { std::unique_ptr block_(new SbasL1TelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E5a_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GalileoE5aTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } // OBSERVABLES ----------------------------------------------------------------- else if (implementation.compare("GPS_L1_CA_Observables") == 0) { std::unique_ptr block_(new GpsL1CaObservables(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1B_Observables") == 0) { std::unique_ptr block_(new GalileoE1Observables(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Hybrid_Observables") == 0) { std::unique_ptr block_(new HybridObservables(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Mixed_Observables") == 0) { std::unique_ptr block_(new MixedObservables(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } // PVT ------------------------------------------------------------------------- else if (implementation.compare("GPS_L1_CA_PVT") == 0) { std::unique_ptr block_(new GpsL1CaPvt(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GALILEO_E1_PVT") == 0) { std::unique_ptr block_(new GalileoE1Pvt(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Hybrid_PVT") == 0) { std::unique_ptr block_(new HybridPvt(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } // OUTPUT FILTERS -------------------------------------------------------------- else if (implementation.compare("Null_Sink_Output_Filter") == 0) { std::unique_ptr block_(new NullSinkOutputFilter(configuration.get(), role, in_streams, out_streams)); block = std::move(block_); } else if (implementation.compare("File_Output_Filter") == 0) { std::unique_ptr block_(new FileOutputFilter(configuration.get(), role, in_streams, out_streams)); block = std::move(block_); } else { // Log fatal. This causes execution to stop. LOG(ERROR) << role<<"."< GNSSBlockFactory::GetAcqBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) { std::unique_ptr block; // ACQUISITION BLOCKS --------------------------------------------------------- if (implementation.compare("GPS_L1_CA_PCPS_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_Assisted_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsAssistedAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_Tong_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsTongAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_Multithread_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsMultithreadAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #if OPENCL_BLOCKS else if (implementation.compare("GPS_L1_CA_PCPS_OpenCl_Acquisition") == 0) { std::unique_ptr block_(new GpsL1CaPcpsOpenClAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif else if (implementation.compare("GPS_L1_CA_PCPS_Acquisition_Fine_Doppler") == 0) { std::unique_ptr block_(new GpsL1CaPcpsAcquisitionFineDoppler(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_PCPS_QuickSync_Acquisition") == 0) { std::unique_ptr block_( new GpsL1CaPcpsQuickSyncAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L2_M_PCPS_Acquisition") == 0) { std::unique_ptr block_(new GpsL2MPcpsAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1PcpsAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_8ms_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1Pcps8msAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_Tong_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1PcpsTongAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_CCCWSR_Ambiguous_Acquisition") == 0) { std::unique_ptr block_(new GalileoE1PcpsCccwsrAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition") == 0) { std::unique_ptr block_( new GalileoE1PcpsQuickSyncAmbiguousAcquisition(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E5a_Noncoherent_IQ_Acquisition_CAF") == 0) { std::unique_ptr block_(new GalileoE5aNoncoherentIQAcquisitionCaf(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else { // Log fatal. This causes execution to stop. LOG(ERROR) << role << "." << implementation << ": Undefined implementation for block"; } return std::move(block); } std::unique_ptr GNSSBlockFactory::GetTrkBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) { std::unique_ptr block; // TRACKING BLOCKS ------------------------------------------------------------- if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaDllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_DLL_PLL_Optim_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaDllPllOptimTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_DLL_FLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaDllFllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L1_CA_TCP_CONNECTOR_Tracking") == 0) { std::unique_ptr block_(new GpsL1CaTcpConnectorTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_DLL_PLL_VEML_Tracking") == 0) { std::unique_ptr block_(new GalileoE1DllPllVemlTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_Volk_E1_DLL_PLL_VEML_Tracking") == 0) { std::unique_ptr block_(new GalileoVolkE1DllPllVemlTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1_TCP_CONNECTOR_Tracking") == 0) { std::unique_ptr block_(new GalileoE1TcpConnectorTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E5a_DLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GalileoE5aDllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_volk_E1_DLL_PLL_VEML_Tracking") == 0) { std::unique_ptr block_(new GalileoVolkE1DllPllVemlTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L2_M_DLL_PLL_Tracking") == 0) { std::unique_ptr block_(new GpsL2MDllPllTracking(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #if CUDA_GPU_ACCEL else if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking_GPU") == 0) { std::unique_ptr block_(new GpsL1CaDllPllTrackingGPU(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } #endif else { // Log fatal. This causes execution to stop. LOG(ERROR) << role<<"."< GNSSBlockFactory::GetTlmBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue) { std::unique_ptr block; // TELEMETRY DECODERS ---------------------------------------------------------- if (implementation.compare("GPS_L1_CA_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GpsL1CaTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E1B_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GalileoE1BTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("SBAS_L1_Telemetry_Decoder") == 0) { std::unique_ptr block_(new SbasL1TelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("Galileo_E5a_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GalileoE5aTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else if (implementation.compare("GPS_L2_M_Telemetry_Decoder") == 0) { std::unique_ptr block_(new GpsL2MTelemetryDecoder(configuration.get(), role, in_streams, out_streams, queue)); block = std::move(block_); } else { // Log fatal. This causes execution to stop. LOG(ERROR) << role<<"."<. * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CONCURRENT_MAP_H #define GNSS_SDR_CONCURRENT_MAP_H #include #include #include template /*! * \brief This class implements a thread-safe std::map * */ class concurrent_map { typedef typename std::map::iterator Data_iterator; // iterator is scope dependent private: std::map the_map; boost::mutex the_mutex; public: void write(int key, Data const& data) { boost::mutex::scoped_lock lock(the_mutex); Data_iterator data_iter; data_iter = the_map.find(key); if (data_iter != the_map.end()) { data_iter->second = data; // update } else { the_map.insert(std::pair(key, data)); // insert SILENTLY fails if the item already exists in the map! } lock.unlock(); } std::map get_map_copy() { boost::mutex::scoped_lock lock(the_mutex); std::map map_aux = the_map; lock.unlock(); return map_aux; } size_t size() { boost::mutex::scoped_lock lock(the_mutex); size_t size_ = the_map.size(); lock.unlock(); return size_; } bool read(int key, Data& p_data) { boost::mutex::scoped_lock lock(the_mutex); Data_iterator data_iter; data_iter = the_map.find(key); if (data_iter != the_map.end()) { p_data = data_iter->second; lock.unlock(); return true; } else { lock.unlock(); return false; } } }; #endif gnss-sdr-0.0.6/src/core/receiver/control_message_factory.h0000644000175000017500000000401612576764164023213 0ustar carlescarles/*! * \file control_message_factory.h * \brief Interface of a factory for control messages. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_ #define GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_ #include #include #include //! Message described by who sent it and what it says typedef struct ControlMessage_ { unsigned int who; unsigned int what; } ControlMessage ; /*! * \brief This class implements a factory for Control Messages. * * It encapsulates the complexity behind getting Queue Messages and associated Control Messages */ class ControlMessageFactory { public: //! Constructor ControlMessageFactory(); //! Virtual destructor virtual ~ControlMessageFactory(); boost::shared_ptr GetQueueMessage(unsigned int who, unsigned int what); std::shared_ptr>> GetControlMessages(gr::message::sptr queue_message); }; #endif /*GNSS_SDR_CONTROL_MESSAGE_FACTORY_H_*/ gnss-sdr-0.0.6/src/core/receiver/CMakeLists.txt0000644000175000017500000001276212576764164020676 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(GNSS_RECEIVER_SOURCES control_thread.cc control_message_factory.cc file_configuration.cc gnss_block_factory.cc gnss_flowgraph.cc in_memory_configuration.cc ) if(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) add_definitions(-DMODERN_GNURADIO=1) endif(PC_GNURADIO_RUNTIME_VERSION VERSION_GREATER 3.7.3) if(ENABLE_CUDA) add_definitions(-DCUDA_GPU_ACCEL=1) set(OPT_RECEIVER_INCLUDE_DIRS ${OPT_RECEIVER_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS}) endif(ENABLE_CUDA) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/system_parameters ${CMAKE_SOURCE_DIR}/src/core/interfaces ${CMAKE_SOURCE_DIR}/src/core/libs ${CMAKE_SOURCE_DIR}/src/core/libs/supl ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-rrlp ${CMAKE_SOURCE_DIR}/src/core/libs/supl/asn-supl ${CMAKE_SOURCE_DIR}/src/algorithms/libs ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/libs ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/signal_source/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/output_filter/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/channel/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/channel/libs ${CMAKE_SOURCE_DIR}/src/algorithms/conditioner/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/data_type_adapter/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/data_type_adapter/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/resampler/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/input_filter/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/tracking/libs ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/telemetry_decoder/libs ${CMAKE_SOURCE_DIR}/src/algorithms/observables/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/observables/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs ${ARMADILLO_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} ${OPT_RECEIVER_INCLUDE_DIRS} ) if(Boost_VERSION LESS 105000) add_definitions(-DOLD_BOOST=1) endif(Boost_VERSION LESS 105000) if(ENABLE_GN3S) add_definitions(-DGN3S_DRIVER=1) endif(ENABLE_GN3S) if(ENABLE_ARRAY) add_definitions(-DRAW_ARRAY_DRIVER=1) endif(ENABLE_ARRAY) if(ENABLE_FLEXIBAND) add_definitions(-DFLEXIBAND_DRIVER=1) endif(ENABLE_FLEXIBAND) if(ENABLE_OSMOSDR) add_definitions(-DOSMOSDR_DRIVER=1) endif(ENABLE_OSMOSDR) if(ENABLE_UHD) add_definitions(-DUHD_DRIVER=1) endif(ENABLE_UHD) #Enable OpenCL if found in the system if(OPENCL_FOUND) message(STATUS "Adding processing blocks implemented using OpenCL" ) add_definitions(-DOPENCL_BLOCKS=1) else(OPENCL_FOUND) add_definitions(-DOPENCL_BLOCKS=0) endif(OPENCL_FOUND) add_definitions(-DGNSSSDR_INSTALL_DIR="${CMAKE_INSTALL_PREFIX}") file(GLOB GNSS_RECEIVER_HEADERS "*.h") file(GLOB GNSS_RECEIVER_INTERFACE_HEADERS "../interfaces/*.h") add_library(gnss_rx ${GNSS_RECEIVER_SOURCES} ${GNSS_RECEIVER_HEADERS} ${GNSS_RECEIVER_INTERFACE_HEADERS}) source_group(Headers FILES ${GNSS_RECEIVER_HEADERS} ${GNSS_RECEIVER_INTERFACE_HEADERS}) target_link_libraries(gnss_rx ${Boost_LIBRARIES} ${ARMADILLO_LIBRARIES} ${GNURADIO_RUNTIME_LIBRARIES} ${GNURADIO_BLOCKS_LIBRARIES} ${GNURADIO_FFT_LIBRARIES} ${GNURADIO_FILTER_LIBRARIES} gnss_system_parameters gnss_sp_libs signal_source_adapters datatype_adapters input_filter_adapters conditioner_adapters resampler_adapters acq_adapters tracking_lib tracking_adapters channel_adapters telemetry_decoder_adapters obs_adapters pvt_adapters pvt_lib out_adapters rx_core_lib ) gnss-sdr-0.0.6/src/core/receiver/control_thread.h0000644000175000017500000001635712576764164021322 0ustar carlescarles/*! * \file control_thread.h * \brief Interface of the receiver control plane * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * GNSS Receiver Control Plane: connects the flowgraph, starts running it, * and while it does not stop, reads the control messages generated by the blocks, * processes them, and applies the corresponding actions. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CONTROL_THREAD_H_ #define GNSS_SDR_CONTROL_THREAD_H_ #include #include #include #include #include "control_message_factory.h" #include "gnss_sdr_supl_client.h" class GNSSFlowgraph; class ConfigurationInterface; /*! * \brief This class represents the main thread of the application, so the name is ControlThread. * This is the GNSS Receiver Control Plane: it connects the flowgraph, starts running it, * and while it does not stop, reads the control messages generated by the blocks, * processes them, and applies the corresponding actions. */ class ControlThread { public: /*! * \brief Default constructor */ ControlThread(); /*! * \brief Constructor that initializes the class with parameters * * \param[in] configuration Pointer to a ConfigurationInterface */ ControlThread(std::shared_ptr configuration); //! \brief Destructor ~ControlThread(); /*! \brief Runs the control thread * * This is the main loop that reads and process the control messages: * * - Connect the GNSS receiver flowgraph; * * - Start the GNSS receiver flowgraph; * * while (flowgraph_->running() && !stop_){ * * - Read control messages and process them; } */ void run(); /*! * \brief Sets the control_queue * * \param[in] boost::shared_ptr control_queue */ void set_control_queue(boost::shared_ptr control_queue); unsigned int processed_control_messages() { return processed_control_messages_; } unsigned int applied_actions() { return applied_actions_; } /*! * \brief Instantiates a flowgraph * * \return Returns a smart pointer to a flowgraph object */ std::shared_ptr flowgraph() { return flowgraph_; } private: //SUPL assistance classes gnss_sdr_supl_client supl_client_acquisition_; gnss_sdr_supl_client supl_client_ephemeris_; int supl_mcc; // Current network MCC (Mobile country code), 3 digits. int supl_mns; // Current network MNC (Mobile Network code), 2 or 3 digits. int supl_lac; // Current network LAC (Location area code),16 bits, 1-65520 are valid values. int supl_ci; // Cell Identity (16 bits, 0-65535 are valid values). void init(); // Read {ephemeris, iono, utc, ref loc, ref time} assistance from a local XML file previously recorded bool read_assistance_from_XML(); // Save {ephemeris, iono, utc, ref loc, ref time} assistance to a local XML file bool save_assistance_to_XML(); void read_control_messages(); void process_control_messages(); /* * Blocking function that reads the GPS ephemeris queue and updates the shared ephemeris map, accessible from the PVT block */ void gps_ephemeris_data_collector(); /* * Blocking function that reads the UTC model queue and updates the shared map, accessible from the PVT block */ void gps_utc_model_data_collector(); /* * \brief Blocking function that reads the ref location queue and updates the shared map */ void gps_ref_location_data_collector(); /* * \brief Blocking function that reads the ref time queue and updates the shared map */ void gps_ref_time_data_collector(); /* * Blocking function that reads the iono model queue and updates the shared map, accessible from the PVT block */ void gps_iono_data_collector(); /* * Blocking function that reads the GPS assistance queue */ void gps_acq_assist_data_collector(); /* * Blocking function that reads the Galileo ephemeris queue and updates the shared ephemeris map, accessible from the PVT block */ void galileo_ephemeris_data_collector(); /* * Blocking function that reads the UTC model queue and updates the shared map, accessible from the PVT block */ void galileo_utc_model_data_collector(); /* * Blocking function that reads the iono data queue and updates the shared map, accessible from the PVT block */ void galileo_iono_data_collector(); /* * Blocking function that reads the galileo_almanac queue and updates the shared map, accessible from the PVT block */ void galileo_almanac_data_collector(); void apply_action(unsigned int what); std::shared_ptr flowgraph_; std::shared_ptr configuration_; boost::shared_ptr control_queue_; std::shared_ptr control_message_factory_; std::shared_ptr>> control_messages_; bool stop_; bool delete_configuration_; unsigned int processed_control_messages_; unsigned int applied_actions_; boost::thread keyboard_thread_; boost::thread gps_ephemeris_data_collector_thread_; boost::thread gps_iono_data_collector_thread_; boost::thread gps_utc_model_data_collector_thread_; boost::thread gps_acq_assist_data_collector_thread_; boost::thread gps_ref_location_data_collector_thread_; boost::thread gps_ref_time_data_collector_thread_; boost::thread galileo_ephemeris_data_collector_thread_; boost::thread galileo_utc_model_data_collector_thread_; boost::thread galileo_iono_data_collector_thread_; boost::thread galileo_almanac_data_collector_thread_; void keyboard_listener(); // default filename for assistance data const std::string eph_default_xml_filename = "./gps_ephemeris.xml"; const std::string utc_default_xml_filename = "./gps_utc_model.xml"; const std::string iono_default_xml_filename = "./gps_iono.xml"; const std::string ref_time_default_xml_filename = "./gps_ref_time.xml"; const std::string ref_location_default_xml_filename = "./gps_ref_location.xml"; }; #endif /*GNSS_SDR_CONTROL_THREAD_H_*/ gnss-sdr-0.0.6/src/core/receiver/in_memory_configuration.cc0000644000175000017500000000637012576764164023370 0ustar carlescarles/*! * \file in_memory_configuration.cc * \brief This implementation accepts configuration parameters upon instantiation and * it is intended to be used in unit testing. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "in_memory_configuration.h" #include #include #include "string_converter.h" InMemoryConfiguration::InMemoryConfiguration() {} InMemoryConfiguration::~InMemoryConfiguration() { properties_.clear(); } std::string InMemoryConfiguration::property(std::string property_name, std::string default_value) { std::map::iterator iter = properties_.find(property_name); if(iter != properties_.end()) { return iter->second; } else { return default_value; } } bool InMemoryConfiguration::property(std::string property_name, bool default_value) { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } long InMemoryConfiguration::property(std::string property_name, long default_value) { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } int InMemoryConfiguration::property(std::string property_name, int default_value) { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } unsigned int InMemoryConfiguration::property(std::string property_name, unsigned int default_value) { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } float InMemoryConfiguration::property(std::string property_name, float default_value) { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } double InMemoryConfiguration::property(std::string property_name, double default_value) { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } void InMemoryConfiguration::set_property(std::string property_name, std::string value) { properties_.insert(std::make_pair(property_name, value)); } bool InMemoryConfiguration::is_present(std::string property_name) { return (properties_.find(property_name) != properties_.end()); } gnss-sdr-0.0.6/src/core/receiver/gnss_flowgraph.cc0000644000175000017500000007055312576764164021472 0ustar carlescarles/*! * \file gnss_flowgraph.cc * \brief Implementation of a GNSS receiver flowgraph * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * Detailed description of the file here if needed. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_flowgraph.h" #include "unistd.h" #include #include #include #include #include #include "configuration_interface.h" #include "gnss_block_interface.h" #include "channel_interface.h" #include "gnss_block_factory.h" #define GNSS_SDR_ARRAY_SIGNAL_CONDITIONER_CHANNELS 8 using google::LogMessage; GNSSFlowgraph::GNSSFlowgraph(std::shared_ptr configuration, boost::shared_ptr queue) { connected_ = false; running_ = false; configuration_ = configuration; queue_ = queue; init(); } GNSSFlowgraph::~GNSSFlowgraph() {} void GNSSFlowgraph::start() { if (running_) { LOG(WARNING) << "Already running"; return; } try { top_block_->start(); } catch (std::exception& e) { LOG(WARNING) << "Unable to start flowgraph"; LOG(ERROR) << e.what(); return; } running_ = true; } void GNSSFlowgraph::stop() { for (unsigned int i = 0; i < channels_count_; i++) { channels_.at(i)->stop(); LOG(INFO) << "Channel " << i << " in state " << channels_state_[i]; } LOG(INFO) << "Threads finished. Return to main program."; top_block_->stop(); running_ = false; } void GNSSFlowgraph::connect() { /* Connects the blocks in the flowgraph * * Signal Source > Signal conditioner >> Channels >> Observables >> PVT > Output filter */ LOG(INFO) << "Connecting flowgraph"; if (connected_) { LOG(WARNING) << "flowgraph already connected"; return; } for (int i = 0; i < sources_count_; i++) { try { sig_source_.at(i)->connect(top_block_); } catch (std::exception& e) { LOG(INFO) << "Can't connect signal source block " << i << " internally"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } } // Signal Source > Signal conditioner > for (unsigned int i = 0; i < sig_conditioner_.size(); i++) { try { sig_conditioner_.at(i)->connect(top_block_); } catch (std::exception& e) { LOG(INFO) << "Can't connect signal conditioner block " << i << " internally"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } } for (unsigned int i = 0; i < channels_count_; i++) { try { channels_.at(i)->connect(top_block_); } catch (std::exception& e) { LOG(WARNING) << "Can't connect channel " << i << " internally"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } } try { observables_->connect(top_block_); } catch (std::exception& e) { LOG(WARNING) << "Can't connect observables block internally"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } // Signal Source > Signal conditioner >> Channels >> Observables > PVT try { pvt_->connect(top_block_); } catch (std::exception& e) { LOG(WARNING) << "Can't connect PVT block internally"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } // Signal Source > Signal conditioner >> Channels >> Observables > PVT > Output Filter try { output_filter_->connect(top_block_); } catch (std::exception& e) { LOG(WARNING) << "Can't connect output filter block internally"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } DLOG(INFO) << "blocks connected internally"; // Signal Source (i) > Signal conditioner (i) > int RF_Channels = 0; int signal_conditioner_ID = 0; for (int i = 0; i < sources_count_; i++) { try { //TODO: Remove this array implementation and create generic multistream connector //(if a signal source has more than 1 stream, then connect it to the multistream signal conditioner) if(sig_source_.at(i)->implementation().compare("Raw_Array_Signal_Source") == 0) { //Multichannel Array std::cout << "ARRAY MODE" << std::endl; for (int j = 0; j < GNSS_SDR_ARRAY_SIGNAL_CONDITIONER_CHANNELS; j++) { std::cout << "connecting ch " << j << std::endl; top_block_->connect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(i)->get_left_block(), j); } } else { //TODO: Create a class interface for SignalSources, derived from GNSSBlockInterface. //Include GetRFChannels in the interface to avoid read config parameters here //read the number of RF channels for each front-end RF_Channels = configuration_->property(sig_source_.at(i)->role() + ".RF_channels", 1); for (int j = 0; j < RF_Channels; j++) { //Connect the multichannel signal source to multiple signal conditioners // GNURADIO max_streams=-1 means infinite ports! LOG(INFO) << "sig_source_.at(i)->get_right_block()->output_signature()->max_streams()=" << sig_source_.at(i)->get_right_block()->output_signature()->max_streams(); LOG(INFO) << "sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()=" << sig_conditioner_.at(signal_conditioner_ID)->get_left_block()->input_signature()->max_streams(); if (sig_source_.at(i)->get_right_block()->output_signature()->max_streams() > 1) { LOG(INFO) << "connecting sig_source_ " << i << " stream " << j << " to conditioner " << j; top_block_->connect(sig_source_.at(i)->get_right_block(), j, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0); } else { if (j == 0) { // RF_channel 0 backward compatibility with single channel sources LOG(INFO) << "connecting sig_source_ " << i << " stream " << 0 << " to conditioner " << j; top_block_->connect(sig_source_.at(i)->get_right_block(), 0, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0); } else { // Multiple channel sources using multiple output blocks of single channel (requires RF_channel selector in call) LOG(INFO) << "connecting sig_source_ " << i << " stream " << j << " to conditioner " << j; top_block_->connect(sig_source_.at(i)->get_right_block(j), 0, sig_conditioner_.at(signal_conditioner_ID)->get_left_block(), 0); } } signal_conditioner_ID++; } } } catch (std::exception& e) { LOG(WARNING) << "Can't connect signal source " << i << " to signal conditioner " << i; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } } DLOG(INFO) << "Signal source connected to signal conditioner"; // Signal conditioner (selected_signal_source) >> channels (i) (dependent of their associated SignalSource_ID) int selected_signal_conditioner_ID; for (unsigned int i = 0; i < channels_count_; i++) { selected_signal_conditioner_ID = configuration_->property("Channel" + boost::lexical_cast(i) + ".RF_channel_ID", 0); try { top_block_->connect(sig_conditioner_.at(selected_signal_conditioner_ID)->get_right_block(), 0, channels_.at(i)->get_left_block(), 0); } catch (std::exception& e) { LOG(WARNING) << "Can't connect signal conditioner " << selected_signal_conditioner_ID << " to channel " << i; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } DLOG(INFO) << "signal conditioner " << selected_signal_conditioner_ID << " connected to channel " << i; // Signal Source > Signal conditioner >> Channels >> Observables try { top_block_->connect(channels_.at(i)->get_right_block(), 0, observables_->get_left_block(), i); } catch (std::exception& e) { LOG(WARNING) << "Can't connect channel " << i << " to observables"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } std::string default_signal = configuration_->property("Channel.signal", std::string("1C")); std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast(i) + ".signal", default_signal)); while (gnss_signal.compare(available_GNSS_signals_.front().get_signal_str()) != 0 ) { available_GNSS_signals_.push_back(available_GNSS_signals_.front()); available_GNSS_signals_.pop_front(); } channels_.at(i)->set_signal(available_GNSS_signals_.front()); LOG(INFO) << "Channel " << i << " assigned to " << available_GNSS_signals_.front(); available_GNSS_signals_.pop_front(); channels_.at(i)->start(); if (channels_state_[i] == 1) { channels_.at(i)->start_acquisition(); LOG(INFO) << "Channel " << i << " connected to observables and ready for acquisition"; } else { LOG(INFO) << "Channel " << i << " connected to observables in standby mode"; } } /* * Connect the observables output of each channel to the PVT block */ try { for (unsigned int i = 0; i < channels_count_; i++) { top_block_->connect(observables_->get_right_block(), i, pvt_->get_left_block(), i); } } catch (std::exception& e) { LOG(WARNING) << "Can't connect observables to PVT"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } try { top_block_->connect(pvt_->get_right_block(), 0, output_filter_->get_left_block(), 0); } catch (std::exception& e) { LOG(WARNING) << "Can't connect PVT to output filter"; LOG(ERROR) << e.what(); top_block_->disconnect_all(); return; } DLOG(INFO) << "PVT connected to output filter"; connected_ = true; LOG(INFO) << "Flowgraph connected"; top_block_->dump(); } void GNSSFlowgraph::wait() { if (!running_) { LOG(WARNING) << "Can't apply wait. Flowgraph is not running"; return; } top_block_->wait(); DLOG(INFO) << "Flowgraph finished calculations"; running_ = false; } /* * Applies an action to the flowgraph * * \param[in] who Who generated the action * \param[in] what What is the action 0: acquisition failed */ void GNSSFlowgraph::apply_action(unsigned int who, unsigned int what) { DLOG(INFO) << "received " << what << " from " << who; switch (what) { case 0: LOG(INFO) << "Channel " << who << " ACQ FAILED satellite " << channels_.at(who)->get_signal().get_satellite() << ", Signal " << channels_.at(who)->get_signal().get_signal_str(); available_GNSS_signals_.push_back(channels_.at(who)->get_signal()); //TODO: Optimize the channel and signal matching! while ( channels_.at(who)->get_signal().get_signal_str().compare(available_GNSS_signals_.front().get_signal_str()) != 0 ) { available_GNSS_signals_.push_back(available_GNSS_signals_.front()); available_GNSS_signals_.pop_front(); } channels_.at(who)->set_signal(available_GNSS_signals_.front()); available_GNSS_signals_.pop_front(); channels_.at(who)->start_acquisition(); break; // TODO: Tracking messages case 1: LOG(INFO) << "Channel " << who << " ACQ SUCCESS satellite " << channels_.at(who)->get_signal().get_satellite(); channels_state_[who] = 2; acq_channels_count_--; if (acq_channels_count_ < max_acq_channels_) { for (unsigned int i = 0; i < channels_count_; i++) { if (channels_state_[i] == 0) { channels_state_[i] = 1; acq_channels_count_++; channels_.at(i)->start_acquisition(); break; } DLOG(INFO) << "Channel " << i << " in state " << channels_state_[i]; } } break; case 2: LOG(INFO) << "Channel " << who << " TRK FAILED satellite " << channels_.at(who)->get_signal().get_satellite(); if (acq_channels_count_ < max_acq_channels_) { channels_state_[who] = 1; acq_channels_count_++; channels_.at(who)->start_acquisition(); } else { channels_state_[who] = 0; channels_.at(who)->standby(); } // for (unsigned int i = 0; i < channels_count_; i++) // { // LOG(INFO) << "Channel " << i << " in state " << channels_state_[i] << std::endl; // } break; default: break; } DLOG(INFO) << "Number of available signals: " << available_GNSS_signals_.size(); } void GNSSFlowgraph::set_configuration(std::shared_ptr configuration) { if (running_) { LOG(WARNING) << "Unable to update configuration while flowgraph running"; return; } if (connected_) { LOG(WARNING) << "Unable to update configuration while flowgraph connected"; } configuration_ = configuration; } void GNSSFlowgraph::init() { /* * Instantiates the receiver blocks */ std::shared_ptr block_factory_ = std::make_shared(); // 1. read the number of RF front-ends available (one file_source per RF front-end) sources_count_ = configuration_->property("Receiver.sources_count", 1); int RF_Channels = 0; int signal_conditioner_ID = 0; if (sources_count_ > 1) { for (int i = 0; i < sources_count_; i++) { std::cout << "Creating source " << i << std::endl; sig_source_.push_back(block_factory_->GetSignalSource(configuration_, queue_, i)); //TODO: Create a class interface for SignalSources, derived from GNSSBlockInterface. //Include GetRFChannels in the interface to avoid read config parameters here //read the number of RF channels for each front-end RF_Channels = configuration_->property(sig_source_.at(i)->role() + ".RF_channels", 1); std::cout << "RF Channels " << RF_Channels << std::endl; for (int j = 0; j < RF_Channels; j++) { sig_conditioner_.push_back(block_factory_->GetSignalConditioner(configuration_, queue_, signal_conditioner_ID)); signal_conditioner_ID++; } } } else { //backwards compatibility for old config files sig_source_.push_back(block_factory_->GetSignalSource(configuration_, queue_, -1)); //TODO: Create a class interface for SignalSources, derived from GNSSBlockInterface. //Include GetRFChannels in the interface to avoid read config parameters here //read the number of RF channels for each front-end RF_Channels = configuration_->property(sig_source_.at(0)->role() + ".RF_channels", 0); if (RF_Channels != 0) { for (int j = 0; j < RF_Channels; j++) { sig_conditioner_.push_back(block_factory_->GetSignalConditioner(configuration_, queue_, signal_conditioner_ID)); signal_conditioner_ID++; } } else { //old config file, single signal source and single channel, not specified sig_conditioner_.push_back(block_factory_->GetSignalConditioner(configuration_, queue_, -1)); } } observables_ = block_factory_->GetObservables(configuration_, queue_); pvt_ = block_factory_->GetPVT(configuration_, queue_); output_filter_ = block_factory_->GetOutputFilter(configuration_, queue_); std::shared_ptr>> channels = block_factory_->GetChannels(configuration_, queue_); channels_count_ = channels->size(); for (unsigned int i = 0; i < channels_count_; i++) { std::shared_ptr chan_ = std::move(channels->at(i)); channels_.push_back(std::dynamic_pointer_cast(chan_)); } top_block_ = gr::make_top_block("GNSSFlowgraph"); // fill the available_GNSS_signals_ queue with the satellites ID's to be searched by the acquisition set_signals_list(); set_channels_state(); applied_actions_ = 0; DLOG(INFO) << "Blocks instantiated. " << channels_count_ << " channels."; } void GNSSFlowgraph::set_signals_list() { /* * Sets a sequential list of GNSS satellites */ std::set::iterator available_gnss_prn_iter; /* * \TODO Describe GNSS satellites more nicely, with RINEX notation * See http://igscb.jpl.nasa.gov/igscb/data/format/rinex301.pdf (page 5) */ /* * Read GNSS-SDR default GNSS system and signal */ std::string default_system = configuration_->property("Channel.system", std::string("")); // DEPRECATED std::string default_signal = configuration_->property("Channel.signal", std::string("")); unsigned int total_channels = configuration_->property("Channels_GPS.count", 0) + configuration_->property("Channels_1C.count", 0) + configuration_->property("Channels_2S.count", 0) + configuration_->property("Channels_Galileo.count", 0) + configuration_->property("Channels_1B.count", 0) + configuration_->property("Channels_5X.count", 0); /* * Loop to create the list of GNSS Signals * To add signals from other systems, add another loop 'for' */ std::set available_gps_prn = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; std::set available_sbas_prn = {120, 124, 126}; std::set available_galileo_prn = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36}; if ((configuration_->property("Channels_1C.count", 0) > 0) or (default_system.find(std::string("GPS")) != std::string::npos) or (default_signal.compare("1C") == 0) or (configuration_->property("Channels_GPS.count", 0) > 0) ) { /* * Loop to create GPS L1 C/A signals */ for (available_gnss_prn_iter = available_gps_prn.begin(); available_gnss_prn_iter != available_gps_prn.end(); available_gnss_prn_iter++) { available_GNSS_signals_.push_back(Gnss_Signal(Gnss_Satellite(std::string("GPS"), *available_gnss_prn_iter), std::string("1C"))); } } if ((configuration_->property("Channels_2S.count", 0) > 0) or (default_system.find(std::string("GPS L2C M")) != std::string::npos) ) { /* * Loop to create GPS L2C M signals */ for (available_gnss_prn_iter = available_gps_prn.begin(); available_gnss_prn_iter != available_gps_prn.end(); available_gnss_prn_iter++) { available_GNSS_signals_.push_back(Gnss_Signal(Gnss_Satellite(std::string("GPS"), *available_gnss_prn_iter), std::string("2S"))); } } if ((configuration_->property("Channels_SBAS.count", 0) > 0) or default_system.find(std::string("SBAS")) != std::string::npos) { /* * Loop to create SBAS L1 C/A signals */ for (available_gnss_prn_iter = available_sbas_prn.begin(); available_gnss_prn_iter != available_sbas_prn.end(); available_gnss_prn_iter++) { available_GNSS_signals_.push_back(Gnss_Signal(Gnss_Satellite(std::string("SBAS"), *available_gnss_prn_iter), std::string("1C"))); } } if ((configuration_->property("Channels_1B.count", 0) > 0) or (default_system.find(std::string("Galileo")) != std::string::npos) or (default_signal.compare("1B") == 0) or (configuration_->property("Channels_Galileo.count", 0) > 0)) { /* * Loop to create the list of Galileo E1 B signals */ for (available_gnss_prn_iter = available_galileo_prn.begin(); available_gnss_prn_iter != available_galileo_prn.end(); available_gnss_prn_iter++) { available_GNSS_signals_.push_back(Gnss_Signal(Gnss_Satellite(std::string("Galileo"), *available_gnss_prn_iter), std::string("1B"))); } } if ((configuration_->property("Channels_5X.count", 0) > 0) ) { /* * Loop to create the list of Galileo E1 B signals */ for (available_gnss_prn_iter = available_galileo_prn.begin(); available_gnss_prn_iter != available_galileo_prn.end(); available_gnss_prn_iter++) { available_GNSS_signals_.push_back(Gnss_Signal(Gnss_Satellite(std::string("Galileo"), *available_gnss_prn_iter), std::string("5X"))); } } /* * Ordering the list of signals from configuration file */ std::list::iterator gnss_it = available_GNSS_signals_.begin(); // Preassignation if not defined at ChannelX.signal=1C ...? In what order? for (unsigned int i = 0; i < total_channels; i++) { std::string gnss_signal = (configuration_->property("Channel" + boost::lexical_cast(i) + ".signal", default_signal)); std::string gnss_system; if((gnss_signal.compare("1C") == 0) or (gnss_signal.compare("2S") == 0) ) gnss_system = "GPS"; if((gnss_signal.compare("1B") == 0) or (gnss_signal.compare("5X") == 0) ) gnss_system = "Galileo"; LOG(INFO) << "Channel " << i << " system " << gnss_system << ", signal " << gnss_signal; unsigned int sat = configuration_->property("Channel" + boost::lexical_cast(i) + ".satellite", 0); if (((sat == 0) || (sat == gnss_it->get_satellite().get_PRN())) and ( gnss_it->get_signal_str().compare(gnss_signal) == 0 ) ) // 0 = not PRN in configuration file { gnss_it++; } else { Gnss_Signal signal_value = Gnss_Signal(Gnss_Satellite(gnss_system, gnss_it->get_satellite().get_PRN()), gnss_signal); available_GNSS_signals_.remove(signal_value); available_GNSS_signals_.insert(gnss_it, signal_value); } } // **** FOR DEBUGGING THE LIST OF GNSS SIGNALS **** // std::cout << "default_system=" << default_system << std::endl; // std::cout << "default_signal=" << default_signal << std::endl; // std::list::iterator available_gnss_list_iter; // for (available_gnss_list_iter = available_GNSS_signals_.begin(); available_gnss_list_iter // != available_GNSS_signals_.end(); available_gnss_list_iter++) // { // std::cout << *available_gnss_list_iter << std::endl; // } } void GNSSFlowgraph::set_channels_state() { max_acq_channels_ = (configuration_->property("Channels.in_acquisition", channels_count_)); if (max_acq_channels_ > channels_count_) { max_acq_channels_ = channels_count_; LOG(WARNING) << "Channels_in_acquisition is bigger than number of channels. Variable acq_channels_count_ is set to " << channels_count_; } channels_state_.reserve(channels_count_); for (unsigned int i = 0; i < channels_count_; i++) { if (i < max_acq_channels_) { channels_state_.push_back(1); } else channels_state_.push_back(0); DLOG(INFO) << "Channel " << i << " in state " << channels_state_[i]; } acq_channels_count_ = max_acq_channels_; DLOG(INFO) << acq_channels_count_ << " channels in acquisition state"; } gnss-sdr-0.0.6/src/core/receiver/control_thread.cc0000644000175000017500000012365212576764164021455 0ustar carlescarles/*! * \file control_thread.cc * \brief This class implements the receiver control plane * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * GNSS Receiver Control Plane: connects the flowgraph, starts running it, * and while it does not stop, reads the control messages generated by the blocks, * process them, and apply the corresponding actions. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "control_thread.h" #include #include #include #include #include #include #include #include #include #include "gps_ephemeris.h" #include "gps_iono.h" #include "gps_utc_model.h" #include "gps_almanac.h" #include "galileo_ephemeris.h" #include "galileo_iono.h" #include "galileo_utc_model.h" #include "galileo_almanac.h" #include "concurrent_queue.h" #include "concurrent_map.h" #include "gnss_flowgraph.h" #include "file_configuration.h" #include "control_message_factory.h" extern concurrent_map global_gps_ephemeris_map; extern concurrent_map global_gps_iono_map; extern concurrent_map global_gps_utc_model_map; extern concurrent_map global_gps_almanac_map; extern concurrent_map global_gps_acq_assist_map; extern concurrent_map global_gps_ref_time_map; extern concurrent_map global_gps_ref_location_map; extern concurrent_queue global_gps_ephemeris_queue; extern concurrent_queue global_gps_iono_queue; extern concurrent_queue global_gps_utc_model_queue; extern concurrent_queue global_gps_almanac_queue; extern concurrent_queue global_gps_acq_assist_queue; extern concurrent_queue global_gps_ref_location_queue; extern concurrent_queue global_gps_ref_time_queue; extern concurrent_map global_galileo_ephemeris_map; extern concurrent_map global_galileo_iono_map; extern concurrent_map global_galileo_utc_model_map; extern concurrent_map global_galileo_almanac_map; //extern concurrent_map global_gps_acq_assist_map; extern concurrent_queue global_galileo_ephemeris_queue; extern concurrent_queue global_galileo_iono_queue; extern concurrent_queue global_galileo_utc_model_queue; extern concurrent_queue global_galileo_almanac_queue; //extern concurrent_queue global_gps_acq_assist_queue; using google::LogMessage; DEFINE_string(config_file, std::string(GNSSSDR_INSTALL_DIR "/share/gnss-sdr/conf/default.conf"), "File containing the configuration parameters"); ControlThread::ControlThread() { configuration_ = std::make_shared(FLAGS_config_file); delete_configuration_ = false; init(); } ControlThread::ControlThread(std::shared_ptr configuration) { configuration_ = configuration; delete_configuration_ = false; init(); } ControlThread::~ControlThread() { // save navigation data to files if (save_assistance_to_XML() == true) {} } /* * Runs the control thread that manages the receiver control plane * * This is the main loop that reads and process the control messages * 1- Connect the GNSS receiver flowgraph * 2- Start the GNSS receiver flowgraph * while (flowgraph_->running() && !stop)_{ * 3- Read control messages and process them } */ void ControlThread::run() { // Connect the flowgraph flowgraph_->connect(); if (flowgraph_->connected()) { LOG(INFO) << "Flowgraph connected"; } else { LOG(ERROR) << "Unable to connect flowgraph"; return; } // Start the flowgraph flowgraph_->start(); if (flowgraph_->running()) { LOG(INFO) << "Flowgraph started"; } else { LOG(ERROR) << "Unable to start flowgraph"; return; } // start the keyboard_listener thread keyboard_thread_ = boost::thread(&ControlThread::keyboard_listener, this); //start the GNSS SV data collector thread gps_ephemeris_data_collector_thread_ = boost::thread(&ControlThread::gps_ephemeris_data_collector, this); gps_iono_data_collector_thread_ = boost::thread(&ControlThread::gps_iono_data_collector, this); gps_utc_model_data_collector_thread_ = boost::thread(&ControlThread::gps_utc_model_data_collector, this); gps_acq_assist_data_collector_thread_= boost::thread(&ControlThread::gps_acq_assist_data_collector, this); gps_ref_location_data_collector_thread_ = boost::thread(&ControlThread::gps_ref_location_data_collector, this); gps_ref_time_data_collector_thread_ = boost::thread(&ControlThread::gps_ref_time_data_collector, this); galileo_ephemeris_data_collector_thread_ = boost::thread(&ControlThread::galileo_ephemeris_data_collector, this); galileo_iono_data_collector_thread_ = boost::thread(&ControlThread::galileo_iono_data_collector, this); galileo_almanac_data_collector_thread_ = boost::thread(&ControlThread::galileo_almanac_data_collector, this); galileo_utc_model_data_collector_thread_ = boost::thread(&ControlThread::galileo_utc_model_data_collector, this); // Main loop to read and process the control messages while (flowgraph_->running() && !stop_) { //TODO re-enable the blocking read messages functions and fork the process read_control_messages(); if (control_messages_ != 0) process_control_messages(); } std::cout << "Stopping GNSS-SDR, please wait!" << std::endl; flowgraph_->stop(); #ifdef OLD_BOOST // Join GPS threads gps_ephemeris_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); gps_iono_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); gps_utc_model_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); gps_acq_assist_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); gps_ref_location_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); gps_ref_time_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); //Join Galileo threads galileo_ephemeris_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); galileo_iono_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); galileo_almanac_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); galileo_utc_model_data_collector_thread_.timed_join(boost::posix_time::seconds(1)); //Join keyboard threads keyboard_thread_.timed_join(boost::posix_time::seconds(1)); #endif #ifndef OLD_BOOST // Join GPS threads gps_ephemeris_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); gps_iono_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); gps_utc_model_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); gps_acq_assist_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); gps_ref_location_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); gps_ref_time_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); //Join Galileo threads galileo_ephemeris_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); galileo_iono_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); galileo_almanac_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); galileo_utc_model_data_collector_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); //Join keyboard threads keyboard_thread_.try_join_until(boost::chrono::steady_clock::now() + boost::chrono::milliseconds(50)); #endif LOG(INFO) << "Flowgraph stopped"; } void ControlThread::set_control_queue(boost::shared_ptr control_queue) { if (flowgraph_->running()) { LOG(WARNING) << "Unable to set control queue while flowgraph is running"; return; } control_queue_ = control_queue; } /* * Returns true if reading was successful */ bool ControlThread::read_assistance_from_XML() { // return variable (true == succeeded) bool ret = false; // getting names from the config file, if available std::string eph_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename); std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename); std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename); std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename); std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename); std::cout << "SUPL: Try read GPS ephemeris from XML file " << eph_xml_filename << std::endl; if (supl_client_ephemeris_.load_ephemeris_xml(eph_xml_filename) == true) { std::map::iterator gps_eph_iter; for(gps_eph_iter = supl_client_ephemeris_.gps_ephemeris_map.begin(); gps_eph_iter != supl_client_ephemeris_.gps_ephemeris_map.end(); gps_eph_iter++) { std::cout << "SUPL: Read XML Ephemeris for GPS SV " << gps_eph_iter->first << std::endl; global_gps_ephemeris_queue.push(gps_eph_iter->second); } ret = true; } else { std::cout << "ERROR: SUPL client error reading XML" << std::endl; std::cout << "Disabling SUPL assistance..." << std::endl; } // Only look for {utc, iono, ref time, ref location} if SUPL is enabled bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false); if (enable_gps_supl_assistance == true) { // Try to read UTC model from XML if (supl_client_acquisition_.load_utc_xml(utc_xml_filename) == true) { LOG(INFO) << "SUPL: Read XML UTC model"; global_gps_utc_model_queue.push(supl_client_acquisition_.gps_utc); } else { LOG(INFO) << "SUPL: couldn't read UTC model XML"; } // Try to read Iono model from XML if (supl_client_acquisition_.load_iono_xml(iono_xml_filename) == true) { LOG(INFO) << "SUPL: Read XML IONO model"; global_gps_iono_queue.push(supl_client_acquisition_.gps_iono); } else { LOG(INFO) << "SUPL: couldn't read IONO model XML"; } // Try to read Ref Time from XML if (supl_client_acquisition_.load_ref_time_xml(ref_time_xml_filename) == true) { LOG(INFO) << "SUPL: Read XML Ref Time"; global_gps_ref_time_queue.push(supl_client_acquisition_.gps_time); } else { LOG(INFO) << "SUPL: couldn't read Ref Time XML"; } // Try to read Ref Location from XML if (supl_client_acquisition_.load_ref_location_xml(ref_location_xml_filename) == true) { LOG(INFO) << "SUPL: Read XML Ref Location"; global_gps_ref_location_queue.push(supl_client_acquisition_.gps_ref_loc); } else { LOG(INFO) << "SUPL: couldn't read Ref Location XML"; } } return ret; } // Returns true if reading was successful bool ControlThread::save_assistance_to_XML() { // return variable (true == succeeded) bool ret = false; // getting names from the config file, if available std::string eph_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename); std::string utc_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_utc_model.xml", utc_default_xml_filename); std::string iono_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_iono_xml", iono_default_xml_filename); std::string ref_time_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_time_xml", ref_time_default_xml_filename); std::string ref_location_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ref_location_xml", ref_location_default_xml_filename); LOG(INFO) << "SUPL: Try to save GPS ephemeris to XML file " << eph_xml_filename; std::map eph_copy = global_gps_ephemeris_map.get_map_copy(); if (supl_client_ephemeris_.save_ephemeris_map_xml(eph_xml_filename, eph_copy) == true) { LOG(INFO) << "SUPL: Successfully saved ephemeris XML file"; ret = true; } else { LOG(INFO) << "SUPL: Error while trying to save ephemeris XML file. Maybe an empty map?"; ret = false; } // Only try to save {utc, iono, ref time, ref location} if SUPL is enabled bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false); if (enable_gps_supl_assistance == true) { // try to save utc model xml file std::map utc_copy = global_gps_utc_model_map.get_map_copy(); if (supl_client_acquisition_.save_utc_map_xml(utc_xml_filename, utc_copy) == true) { LOG(INFO) << "SUPL: Successfully saved UTC Model XML file"; //ret = true; } else { LOG(INFO) << "SUPL: Error while trying to save utc XML file"; //ret = false; } // try to save iono model xml file std::map iono_copy = global_gps_iono_map.get_map_copy(); if (supl_client_acquisition_.save_iono_map_xml(iono_xml_filename, iono_copy) == true) { LOG(INFO) << "SUPL: Successfully saved IONO Model XML file"; //ret = true; } else { LOG(INFO) << "SUPL: Error while trying to save iono XML file"; //ret = false; } // try to save ref time xml file std::map ref_time_copy = global_gps_ref_time_map.get_map_copy(); if (supl_client_acquisition_.save_ref_time_map_xml(ref_time_xml_filename, ref_time_copy) == true) { LOG(INFO) << "SUPL: Successfully saved Ref Time XML file"; //ret = true; } else { LOG(INFO) << "SUPL: Error while trying to save ref time XML file"; //ref = false; } // try to save ref location xml file std::map ref_location_copy = global_gps_ref_location_map.get_map_copy(); if (supl_client_acquisition_.save_ref_location_map_xml(ref_location_xml_filename, ref_location_copy) == true) { LOG(INFO) << "SUPL: Successfully saved Ref Location XML file"; //ref = true; } else { LOG(INFO) << "SUPL: Error while trying to save ref location XML file"; //ret = false; } } return ret; } void ControlThread::init() { // Instantiates a control queue, a GNSS flowgraph, and a control message factory control_queue_ = gr::msg_queue::make(0); flowgraph_ = std::make_shared(configuration_, control_queue_); control_message_factory_ = std::make_shared(); stop_ = false; processed_control_messages_ = 0; applied_actions_ = 0; //######### GNSS Assistance ################################# // GNSS Assistance configuration bool enable_gps_supl_assistance = configuration_->property("GNSS-SDR.SUPL_gps_enabled", false); if (enable_gps_supl_assistance == true) //SUPL SERVER TEST. Not operational yet! { std::cout << "SUPL RRLP GPS assistance enabled!" << std::endl; std::string default_acq_server = "supl.nokia.com"; std::string default_eph_server = "supl.google.com"; supl_client_ephemeris_.server_name = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_server", default_acq_server); supl_client_acquisition_.server_name = configuration_->property("GNSS-SDR.SUPL_gps_acquisition_server", default_eph_server); supl_client_ephemeris_.server_port = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_port", 7275); supl_client_acquisition_.server_port = configuration_->property("GNSS-SDR.SUPL_gps_acquisition_port", 7275); supl_mcc = configuration_->property("GNSS-SDR.SUPL_MCC", 244); supl_mns = configuration_->property("GNSS-SDR.SUPL_MNS", 5); std::string default_lac = "0x59e2"; std::string default_ci = "0x31b0"; try { supl_lac = boost::lexical_cast(configuration_->property("GNSS-SDR.SUPL_LAC", default_lac)); } catch(boost::bad_lexical_cast &) { supl_lac = 0x59e2; } try { supl_ci = boost::lexical_cast(configuration_->property("GNSS-SDR.SUPL_CI", default_ci)); } catch(boost::bad_lexical_cast &) { supl_ci = 0x31b0; } bool SUPL_read_gps_assistance_xml = configuration_->property("GNSS-SDR.SUPL_read_gps_assistance_xml", false); if (SUPL_read_gps_assistance_xml == true) { // read assistance from file if (read_assistance_from_XML()) {} } else { // Request ephemeris from SUPL server int error; supl_client_ephemeris_.request = 1; std::cout << "SUPL: Try to read GPS ephemeris from SUPL server.." << std::endl; error = supl_client_ephemeris_.get_assistance(supl_mcc, supl_mns, supl_lac, supl_ci); if (error == 0) { std::map::iterator gps_eph_iter; for(gps_eph_iter = supl_client_ephemeris_.gps_ephemeris_map.begin(); gps_eph_iter != supl_client_ephemeris_.gps_ephemeris_map.end(); gps_eph_iter++) { std::cout << "SUPL: Received Ephemeris for GPS SV " << gps_eph_iter->first << std::endl; global_gps_ephemeris_map.write(gps_eph_iter->second.i_satellite_PRN, gps_eph_iter->second); } //Save ephemeris to XML file std::string eph_xml_filename = configuration_->property("GNSS-SDR.SUPL_gps_ephemeris_xml", eph_default_xml_filename); if (supl_client_ephemeris_.save_ephemeris_map_xml(eph_xml_filename, supl_client_ephemeris_.gps_ephemeris_map) == true) { std::cout << "SUPL: XML Ephemeris file created" << std::endl; } else { std::cout << "SUPL: Failed to create XML Ephemeris file" << std::endl; } } else { std::cout << "ERROR: SUPL client for Ephemeris returned " << error << std::endl; std::cout << "Please check internet connection and SUPL server configuration" << error << std::endl; std::cout << "Trying to read ephemeris from XML file" << std::endl; if (read_assistance_from_XML() == false) { std::cout << "ERROR: Could not read Ephemeris file: Disabling SUPL assistance.." << std::endl; } } // Request almanac , IONO and UTC Model supl_client_ephemeris_.request = 0; std::cout << "SUPL: Try read Almanac, Iono, Utc Model, Ref Time and Ref Location from SUPL server..." << std::endl; error = supl_client_ephemeris_.get_assistance(supl_mcc, supl_mns, supl_lac, supl_ci); if (error == 0) { std::map::iterator gps_alm_iter; for(gps_alm_iter = supl_client_ephemeris_.gps_almanac_map.begin(); gps_alm_iter != supl_client_ephemeris_.gps_almanac_map.end(); gps_alm_iter++) { std::cout << "SUPL: Received Almanac for GPS SV " << gps_alm_iter->first << std::endl; global_gps_almanac_queue.push(gps_alm_iter->second); } if (supl_client_ephemeris_.gps_iono.valid == true) { std::cout << "SUPL: Received GPS Iono" << std::endl; global_gps_iono_map.write(0, supl_client_ephemeris_.gps_iono); } if (supl_client_ephemeris_.gps_utc.valid == true) { std::cout << "SUPL: Received GPS UTC Model" << std::endl; global_gps_utc_model_map.write(0, supl_client_ephemeris_.gps_utc); } } else { std::cout << "ERROR: SUPL client for Almanac returned " << error << std::endl; std::cout << "Please check internet connection and SUPL server configuration" << error << std::endl; std::cout << "Disabling SUPL assistance.." << std::endl; } // Request acquisition assistance supl_client_acquisition_.request = 2; std::cout << "SUPL: Try read Acquisition assistance from SUPL server.." << std::endl; error = supl_client_acquisition_.get_assistance(supl_mcc, supl_mns, supl_lac, supl_ci); if (error == 0) { std::map::iterator gps_acq_iter; for(gps_acq_iter = supl_client_acquisition_.gps_acq_map.begin(); gps_acq_iter != supl_client_acquisition_.gps_acq_map.end(); gps_acq_iter++) { std::cout << "SUPL: Received Acquisition assistance for GPS SV " << gps_acq_iter->first << std::endl; global_gps_acq_assist_map.write(gps_acq_iter->second.i_satellite_PRN, gps_acq_iter->second); } if (supl_client_acquisition_.gps_ref_loc.valid == true) { std::cout << "SUPL: Received Ref Location (Acquisition Assistance)" << std::endl; global_gps_ref_location_map.write(0, supl_client_acquisition_.gps_ref_loc); } if (supl_client_acquisition_.gps_time.valid == true) { std::cout << "SUPL: Received Ref Time (Acquisition Assistance)" << std::endl; global_gps_ref_time_map.write(0, supl_client_acquisition_.gps_time); } } else { std::cout << "ERROR: SUPL client for Acquisition assistance returned " << error << std::endl; std::cout << "Please check internet connection and SUPL server configuration" << error << std::endl; std::cout << "Disabling SUPL assistance.." << std::endl; } } } } void ControlThread::read_control_messages() { DLOG(INFO) << "Reading control messages from queue"; boost::shared_ptr queue_message = control_queue_->delete_head(); if (queue_message != 0) { control_messages_ = control_message_factory_->GetControlMessages(queue_message); } else { control_messages_->clear(); } } // Apply the corresponding control actions // TODO: May be it is better to move the apply_action state machine to the control_thread void ControlThread::process_control_messages() { for (unsigned int i = 0; i < control_messages_->size(); i++) { if (stop_) break; if (control_messages_->at(i)->who == 200) { apply_action(control_messages_->at(i)->what); } else { flowgraph_->apply_action(control_messages_->at(i)->who, control_messages_->at(i)->what); } processed_control_messages_++; } control_messages_->clear(); DLOG(INFO) << "Processed all control messages"; } void ControlThread::apply_action(unsigned int what) { switch (what) { case 0: DLOG(INFO) << "Received action STOP"; stop_ = true; applied_actions_++; break; default: DLOG(INFO) << "Unrecognized action."; break; } } void ControlThread::gps_acq_assist_data_collector() { // ############ 1.bis READ EPHEMERIS/UTC_MODE/IONO QUEUE #################### Gps_Acq_Assist gps_acq; Gps_Acq_Assist gps_acq_old; while(stop_ == false) { global_gps_acq_assist_queue.wait_and_pop(gps_acq); // DEBUG MESSAGE std::cout << "Acquisition assistance record has arrived from SAT ID " << gps_acq.i_satellite_PRN << " with Doppler " << gps_acq.d_Doppler0 << " [Hz] "<< std::endl; // insert new acq record to the global ephemeris map if (global_gps_acq_assist_map.read(gps_acq.i_satellite_PRN,gps_acq_old)) { std::cout << "Acquisition assistance record updated" << std::endl; global_gps_acq_assist_map.write(gps_acq.i_satellite_PRN, gps_acq); } else { // insert new acq record LOG(INFO) << "New acq assist record inserted"; global_gps_acq_assist_map.write(gps_acq.i_satellite_PRN, gps_acq); } } } void ControlThread::gps_ephemeris_data_collector() { // ############ 1.bis READ EPHEMERIS/UTC_MODE/IONO QUEUE #################### Gps_Ephemeris gps_eph; Gps_Ephemeris gps_eph_old; while(stop_ == false) { global_gps_ephemeris_queue.wait_and_pop(gps_eph); // DEBUG MESSAGE LOG(INFO) << "Ephemeris record has arrived from SAT ID " << gps_eph.i_satellite_PRN << " (Block " << gps_eph.satelliteBlock[gps_eph.i_satellite_PRN] << ")"; // insert new ephemeris record to the global ephemeris map if (global_gps_ephemeris_map.read(gps_eph.i_satellite_PRN, gps_eph_old)) { // Check the EPHEMERIS timestamp. If it is newer, then update the ephemeris if (gps_eph.i_GPS_week > gps_eph_old.i_GPS_week) { std::cout << "Ephemeris record updated (GPS week=" << gps_eph.i_GPS_week << std::endl; global_gps_ephemeris_map.write(gps_eph.i_satellite_PRN, gps_eph); } else { if (gps_eph.d_Toe > gps_eph_old.d_Toe) { LOG(INFO) << "Ephemeris record updated (Toe=" << gps_eph.d_Toe; global_gps_ephemeris_map.write(gps_eph.i_satellite_PRN, gps_eph); } else { LOG(INFO) << "Not updating the existing ephemeris"; } } } else { // insert new ephemeris record LOG(INFO) << "New Ephemeris record inserted with Toe=" << gps_eph.d_Toe<<" and GPS Week=" << gps_eph.i_GPS_week; global_gps_ephemeris_map.write(gps_eph.i_satellite_PRN, gps_eph); } } } void ControlThread::galileo_ephemeris_data_collector() { // ############ 1.bis READ EPHEMERIS/UTC_MODE/IONO QUEUE #################### Galileo_Ephemeris galileo_eph; Galileo_Ephemeris galileo_eph_old; while(stop_ == false) { global_galileo_ephemeris_queue.wait_and_pop(galileo_eph); // DEBUG MESSAGE std::cout << "Galileo Ephemeris record has arrived from SAT ID " << galileo_eph.SV_ID_PRN_4 << std::endl; // insert new ephemeris record to the global ephemeris map if (global_galileo_ephemeris_map.read(galileo_eph.SV_ID_PRN_4, galileo_eph_old)) { // Check the EPHEMERIS timestamp. If it is newer, then update the ephemeris if (galileo_eph.WN_5 > galileo_eph_old.WN_5) //further check because it is not clear when IOD is reset { LOG(INFO) << "Galileo Ephemeris record in global map updated -- GALILEO Week Number =" << galileo_eph.WN_5; global_galileo_ephemeris_map.write(galileo_eph.SV_ID_PRN_4,galileo_eph); } else { if (galileo_eph.IOD_ephemeris > galileo_eph_old.IOD_ephemeris) { LOG(INFO) << "Galileo Ephemeris record updated in global map-- IOD_ephemeris =" << galileo_eph.IOD_ephemeris; global_galileo_ephemeris_map.write(galileo_eph.SV_ID_PRN_4, galileo_eph); LOG(INFO) << "IOD_ephemeris OLD: " << galileo_eph_old.IOD_ephemeris; LOG(INFO) << "satellite: " << galileo_eph.SV_ID_PRN_4; } else { LOG(INFO) << "Not updating the existing Galileo ephemeris, IOD is not changing"; } } } else { // insert new ephemeris record LOG(INFO) << "Galileo New Ephemeris record inserted in global map with TOW =" << galileo_eph.TOW_5 << ", GALILEO Week Number =" << galileo_eph.WN_5 << " and Ephemeris IOD = " << galileo_eph.IOD_ephemeris; global_galileo_ephemeris_map.write(galileo_eph.SV_ID_PRN_4, galileo_eph); } } } void ControlThread::gps_iono_data_collector() { // ############ 1.bis READ EPHEMERIS/UTC_MODE/IONO QUEUE #################### Gps_Iono gps_iono; while(stop_ == false) { global_gps_iono_queue.wait_and_pop(gps_iono); LOG(INFO) << "New IONO record has arrived "; // there is no timestamp for the iono data, new entries must always be added global_gps_iono_map.write(0, gps_iono); } } void ControlThread::galileo_almanac_data_collector() { // ############ 1.bis READ ALMANAC QUEUE #################### Galileo_Almanac galileo_almanac; while(stop_ == false) { global_galileo_almanac_queue.wait_and_pop(galileo_almanac); LOG(INFO) << "New galileo_almanac record has arrived "; // there is no timestamp for the galileo_almanac data, new entries must always be added global_galileo_almanac_map.write(0, galileo_almanac); } } void ControlThread::galileo_iono_data_collector() { Galileo_Iono galileo_iono; Galileo_Iono galileo_iono_old; while(stop_ == false) { global_galileo_iono_queue.wait_and_pop(galileo_iono); // DEBUG MESSAGE LOG(INFO) << "Iono record has arrived"; // insert new Iono record to the global Iono map if (global_galileo_iono_map.read(0, galileo_iono_old)) { // Check the Iono timestamp from UTC page (page 6). If it is newer, then update the Iono parameters if (galileo_iono.WN_5 > galileo_iono_old.WN_5) { LOG(INFO) << "IONO record updated in global map--new GALILEO UTC-IONO Week Number"; global_galileo_iono_map.write(0, galileo_iono); } else { if (galileo_iono.TOW_5 > galileo_iono_old.TOW_5) { LOG(INFO) << "IONO record updated in global map--new GALILEO UTC-IONO time of Week"; global_galileo_iono_map.write(0, galileo_iono); //std::cout << "GALILEO IONO time of Week old: " << galileo_iono_old.t0t_6< galileo_utc_old.WNot_6) //further check because it is not clear when IOD is reset { DLOG(INFO) << "UTC record updated --new GALILEO UTC Week Number =" << galileo_utc.WNot_6; global_galileo_utc_model_map.write(0, galileo_utc); } else { if (galileo_utc.t0t_6 > galileo_utc_old.t0t_6) { DLOG(INFO) << "UTC record updated --new GALILEO UTC time of Week =" << galileo_utc.t0t_6; global_galileo_utc_model_map.write(0, galileo_utc); } else { LOG(INFO) << "Not updating the existing UTC in global map, timestamp is not changing"; } } } else { // insert new ephemeris record LOG(INFO) << "New UTC record inserted in global map"; global_galileo_utc_model_map.write(0, galileo_utc); } } } void ControlThread::keyboard_listener() { bool read_keys = true; char c = '0'; while(read_keys) { std::cin.get(c); if (c == 'q') { std::cout << "Quit keystroke order received, stopping GNSS-SDR !!" << std::endl; std::unique_ptr cmf(new ControlMessageFactory()); if (control_queue_ != gr::msg_queue::sptr()) { control_queue_->handle(cmf->GetQueueMessage(200, 0)); } read_keys = false; } } } gnss-sdr-0.0.6/src/core/receiver/gnss_flowgraph.h0000644000175000017500000001042312576764164021322 0ustar carlescarles/*! * \file gnss_flowgraph.h * \brief Interface of a GNSS receiver flowgraph. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2011. luis(at)epsilon-formacion.com * Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * It contains a signal source, * a signal conditioner, a set of channels, a pvt and an output filter. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_FLOWGRAPH_H_ #define GNSS_SDR_GNSS_FLOWGRAPH_H_ #include #include #include #include #include #include #include #include "GPS_L1_CA.h" #include "gnss_signal.h" class GNSSBlockInterface; class ChannelInterface; class ConfigurationInterface; class GNSSBlockFactory; /*! \brief This class represents a GNSS flowgraph. * * It contains a signal source, * a signal conditioner, a set of channels, a PVT and an output filter. */ class GNSSFlowgraph { public: /*! * \brief Constructor that initializes the receiver flowgraph */ GNSSFlowgraph(std::shared_ptr configuration, boost::shared_ptr queue); /*! * \brief Virtual destructor */ virtual ~GNSSFlowgraph(); //! \brief Start the flowgraph void start(); //! \brief Stop the flowgraph void stop(); /*! * \brief Connects the defined blocks in the flowgraph * * Signal Source > Signal conditioner > Channels >> Observables >> PVT > Output filter */ void connect(); void wait(); /*! * \brief Applies an action to the flowgraph * * \param[in] who Who generated the action * \param[in] what What is the action 0: acquisition failed */ void apply_action(unsigned int who, unsigned int what); void set_configuration(std::shared_ptr configuration); unsigned int applied_actions() { return applied_actions_; } bool connected() { return connected_; } bool running() { return running_; } private: void init(); // Populates the SV PRN list available for acquisition and tracking void set_signals_list(); void set_channels_state(); // Initializes the channels state (start acquisition or keep standby) // using the configuration parameters (number of channels and max channels in acquisition) bool connected_; bool running_; int sources_count_; unsigned int channels_count_; unsigned int acq_channels_count_; unsigned int max_acq_channels_; unsigned int applied_actions_; std::string config_file_; std::shared_ptr configuration_; std::shared_ptr block_factory_; std::vector> sig_source_; std::vector> sig_conditioner_; std::shared_ptr observables_; std::shared_ptr pvt_; std::shared_ptr output_filter_; std::vector> channels_; gr::top_block_sptr top_block_; boost::shared_ptr queue_; std::list available_GNSS_signals_; std::vector channels_state_; }; #endif /*GNSS_SDR_GNSS_FLOWGRAPH_H_*/ gnss-sdr-0.0.6/src/core/receiver/in_memory_configuration.h0000644000175000017500000000511212576764164023223 0ustar carlescarles/*! * \file in_memory_configuration.h * \brief A ConfigurationInterface for testing purposes. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * This implementation accepts configuration parameters upon instantiation and * it is intended to be used in unit testing. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_IN_MEMORY_CONFIGURATION_H_ #define GNSS_SDR_IN_MEMORY_CONFIGURATION_H_ #include #include #include #include "configuration_interface.h" class StringConverter; /*! * \brief This class is an implementation of the interface ConfigurationInterface. * * This implementation accepts configuration parameters upon instantiation and * it is intended to be used in unit testing. */ class InMemoryConfiguration : public ConfigurationInterface { public: InMemoryConfiguration(); virtual ~InMemoryConfiguration(); std::string property(std::string property_name, std::string default_value); bool property(std::string property_name, bool default_value); long property(std::string property_name, long default_value); int property(std::string property_name, int default_value); unsigned int property(std::string property_name, unsigned int default_value); float property(std::string property_name, float default_value); double property(std::string property_name, double default_value); void set_property(std::string property_name, std::string value); bool is_present(std::string property_name); private: std::map properties_; std::unique_ptr converter_; }; #endif /*GNSS_SDR_IN_MEMORY_CONFIGURATION_H_*/ gnss-sdr-0.0.6/src/core/receiver/gnss_block_factory.h0000644000175000017500000001313212576764164022152 0ustar carlescarles/*! * \file gnss_block_factory.h * \brief Interface of a factory that returns smart pointers to GNSS blocks. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * Luis Esteve, 2011. luis(at)epsilon-formacion.com * Javier Arribas, 2011. jarribas(at)cttc.es * Carles Fernandez-Prades, 2014. cfernandez(at)cttc.es * * This class encapsulates the complexity behind the instantiation * of GNSS blocks. * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_BLOCK_FACTORY_H_ #define GNSS_SDR_BLOCK_FACTORY_H_ #include #include #include #include class ConfigurationInterface; class GNSSBlockInterface; class AcquisitionInterface; class TrackingInterface; class TelemetryDecoderInterface; /*! * \brief Class that produces all kinds of GNSS blocks */ class GNSSBlockFactory { public: GNSSBlockFactory(); virtual ~GNSSBlockFactory(); std::unique_ptr GetSignalSource(std::shared_ptr configuration, boost::shared_ptr queue, int ID = -1); std::unique_ptr GetSignalConditioner(std::shared_ptr configuration, boost::shared_ptr queue, int ID = -1); std::unique_ptr GetPVT(std::shared_ptr configuration, boost::shared_ptr queue); std::unique_ptr GetObservables(std::shared_ptr configuration, boost::shared_ptr queue); std::unique_ptr GetOutputFilter(std::shared_ptr configuration, boost::shared_ptr queue); std::unique_ptr>> GetChannels(std::shared_ptr configuration, boost::shared_ptr queue); /* * \brief Returns the block with the required configuration and implementation */ std::unique_ptr GetBlock(std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); private: // DEPRECATED std::unique_ptr GetChannel_GPS(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); std::unique_ptr GetChannel_1C(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); std::unique_ptr GetChannel_2S(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); //DEPRECATED std::unique_ptr GetChannel_Galileo(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); std::unique_ptr GetChannel_1B(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); std::unique_ptr GetChannel_5X(std::shared_ptr configuration, std::string acq, std::string trk, std::string tlm, int channel, boost::shared_ptr queue); std::unique_ptr GetAcqBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, gr::msg_queue::sptr queue); std::unique_ptr GetTrkBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); std::unique_ptr GetTlmBlock( std::shared_ptr configuration, std::string role, std::string implementation, unsigned int in_streams, unsigned int out_streams, boost::shared_ptr queue); }; #endif /*GNSS_SDR_BLOCK_FACTORY_H_*/ gnss-sdr-0.0.6/src/core/receiver/control_message_factory.cc0000644000175000017500000000565512576764164023363 0ustar carlescarles/*! * \file control_message_factory.cc * \brief Implementation of a Control Message Factory * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "control_message_factory.h" #include using google::LogMessage; // Constructor ControlMessageFactory::ControlMessageFactory() {} // Destructor ControlMessageFactory::~ControlMessageFactory() {} boost::shared_ptr ControlMessageFactory::GetQueueMessage(unsigned int who, unsigned int what) { std::shared_ptr control_message = std::make_shared(); control_message->who = who; control_message->what = what; boost::shared_ptr queue_message = gr::message::make(0, 0, 0, sizeof(ControlMessage)); memcpy(queue_message->msg(), control_message.get(), sizeof(ControlMessage)); return queue_message; } std::shared_ptr>> ControlMessageFactory::GetControlMessages(boost::shared_ptr queue_message) { std::shared_ptr>> control_messages = std::make_shared>>(); unsigned int control_messages_count = queue_message->length() / sizeof(ControlMessage); if(queue_message->length() % sizeof(ControlMessage) != 0) { LOG(WARNING) << "Queue message has size " << queue_message->length() << ", which is not" << " multiple of control message size " << sizeof(ControlMessage); LOG(WARNING) << "Ignoring this queue message to prevent unexpected results."; return control_messages; } for(unsigned int i = 0; i < control_messages_count; i++) { control_messages->push_back(std::make_shared()); memcpy(control_messages->at(i).get(), queue_message->msg() + (i*sizeof(ControlMessage)), sizeof(ControlMessage)); } return control_messages; } gnss-sdr-0.0.6/src/core/receiver/control_message.h0000644000175000017500000000303612576764164021465 0ustar carlescarles/*! * \file control_message.h * \brief Interface for the different control messages. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CONTROL_MESSAGE_H_ #define GNSS_SDR_CONTROL_MESSAGE_H_ /*! * \brief This class defines the different Control Messages */ class ControlMessage { public: static unsigned int const ack_success = 0; static unsigned int const ack_failed = 1; static unsigned int const trk_failed = 2; static unsigned int const channel_init = 3; }; #endif /*GNSS_SDR_CONTROL_MESSAGE_H_*/ gnss-sdr-0.0.6/src/core/receiver/file_configuration.cc0000644000175000017500000001240212576764164022302 0ustar carlescarles/*! * \file file_configuration.cc * \brief Implementation of the interface ConfigurationInterface that reads the * configuration from a file. * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com * * This implementation has a text file as the source for the values of the parameters. * The file is in the INI format, containing sections and pairs of names and values. * For more information about the INI format, see http://en.wikipedia.org/wiki/INI_file * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "file_configuration.h" #include #include #include "INIReader.h" #include "string_converter.h" #include "in_memory_configuration.h" using google::LogMessage; FileConfiguration::FileConfiguration(std::string filename) { filename_ = filename; init(); } FileConfiguration::FileConfiguration() { filename_ = "./default_config_file.txt"; init(); } FileConfiguration::~FileConfiguration() { LOG(INFO) << "Destructor called"; } std::string FileConfiguration::property(std::string property_name, std::string default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { return ini_reader_->Get("GNSS-SDR", property_name, default_value); } } bool FileConfiguration::property(std::string property_name, bool default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } } long FileConfiguration::property(std::string property_name, long default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } } int FileConfiguration::property(std::string property_name, int default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } } unsigned int FileConfiguration::property(std::string property_name, unsigned int default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } } float FileConfiguration::property(std::string property_name, float default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } } double FileConfiguration::property(std::string property_name, double default_value) { if(overrided_->is_present(property_name)) { return overrided_->property(property_name, default_value); } else { std::string empty = ""; return converter_->convert(property(property_name, empty), default_value); } } void FileConfiguration::set_property(std::string property_name, std::string value) { overrided_->set_property(property_name, value); } void FileConfiguration::init() { std::unique_ptr converter_(new StringConverter); overrided_ = std::make_shared(); ini_reader_ = std::make_shared(filename_); error_ = ini_reader_->ParseError(); if(error_ == 0) { DLOG(INFO) << "Configuration file " << filename_ << " opened with no errors"; } else if(error_ > 0) { LOG(WARNING) << "Configuration file " << filename_ << " contains errors in line " << error_; } else { LOG(WARNING) << "Unable to open configuration file " << filename_; } } gnss-sdr-0.0.6/src/core/receiver/concurrent_queue.h0000644000175000017500000000511312576764164021665 0ustar carlescarles/*! * \file concurrent_queue.h * \brief Interface of a thread-safe std::queue * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_CONCURRENT_QUEUE_H #define GNSS_SDR_CONCURRENT_QUEUE_H #include #include template /*! * \brief This class implements a thread-safe std::queue * * Thread-safe object queue which uses the library * boost_thread to perform MUTEX based on the code available at * http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html */ class concurrent_queue { private: std::queue the_queue; mutable boost::mutex the_mutex; boost::condition_variable the_condition_variable; public: void push(Data const& data) { boost::mutex::scoped_lock lock(the_mutex); the_queue.push(data); lock.unlock(); the_condition_variable.notify_one(); } bool empty() const { boost::mutex::scoped_lock lock(the_mutex); return the_queue.empty(); } bool try_pop(Data& popped_value) { boost::mutex::scoped_lock lock(the_mutex); if(the_queue.empty()) { return false; } popped_value = the_queue.front(); the_queue.pop(); return true; } void wait_and_pop(Data& popped_value) { boost::mutex::scoped_lock lock(the_mutex); while(the_queue.empty()) { the_condition_variable.wait(lock); } popped_value = the_queue.front(); the_queue.pop(); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/0000755000175000017500000000000012576764164020071 5ustar carlescarlesgnss-sdr-0.0.6/src/core/system_parameters/sbas_telemetry_data.cc0000644000175000017500000011311612576764164024416 0ustar carlescarles/*! * \file sbas_telemetry_data.cc * \brief Implementation of the SBAS telemetry parser based on SBAS RTKLIB functions * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include #include #include #include "sbas_telemetry_data.h" #include "sbas_ionospheric_correction.h" #include "sbas_satellite_correction.h" #include "sbas_ephemeris.h" // logging levels #define EVENT 2 // logs important events which don't occur every update() call #define FLOW 3 // logs the function calls of block processing functions #define DETAIL 4 Sbas_Telemetry_Data::Sbas_Telemetry_Data() { fp_trace = nullptr; // file pointer of trace level_trace = 0; // level of trace tick_trace = 0; // tick time at traceopen (ms) raw_msg_queue = nullptr; iono_queue = nullptr; sat_corr_queue = nullptr; ephemeris_queue = nullptr; d_nav.sbssat.iodp = -1; // make sure that in any case iodp is not equal to the received one prn_mask_changed(); // invalidate all satellite corrections for(size_t band = 0; band < sizeof(d_nav.sbsion)/sizeof(sbsion_t); band++) { d_nav.sbsion[band].iodi = -1; // make sure that in any case iodi is not equal to the received one igp_mask_changed(band); } } void Sbas_Telemetry_Data::set_raw_msg_queue(concurrent_queue *raw_msg_queue) { this->raw_msg_queue = raw_msg_queue; } void Sbas_Telemetry_Data::set_iono_queue(concurrent_queue *iono_queue) { this->iono_queue = iono_queue; } void Sbas_Telemetry_Data::set_sat_corr_queue(concurrent_queue *sat_corr_queue) { this->sat_corr_queue = sat_corr_queue; } void Sbas_Telemetry_Data::set_ephemeris_queue(concurrent_queue *ephemeris_queue) { this->ephemeris_queue = ephemeris_queue; } Sbas_Telemetry_Data::~Sbas_Telemetry_Data() { } int Sbas_Telemetry_Data::update(Sbas_Raw_Msg sbas_raw_msg) { VLOG(FLOW) << "<> Sbas_Telemetry_Data.update():"; int parsing_result; // if GPS time from MT12 is known (automatically handled by relate()): // express the rx time in terms of GPS time sbas_raw_msg.relate(mt12_time_ref); int mt = sbas_raw_msg.get_msg_type(); // update internal state if(mt == 12) parsing_result = decode_mt12(sbas_raw_msg); //else if(mt == 9) parsing_result = parse_mt9(sbas_raw_msg); else { // use RTKLIB to parse the message -> updates d_nav structure sbsmsg_t sbas_raw_msg_rtklib; std::vector msg_bytes = sbas_raw_msg.get_msg(); // cast raw message to RTKLIB raw message struct sbas_raw_msg_rtklib.prn = sbas_raw_msg.get_prn(); //sbas_raw_msg_rtklib.tow = sbas_raw_msg.get_tow(); //sbas_raw_msg_rtklib.week = sbas_raw_msg.get_week(); sbas_raw_msg_rtklib.sample_stamp = sbas_raw_msg.get_sample_stamp(); for (std::vector::const_iterator it = msg_bytes.begin(); it != msg_bytes.end() - 3; ++it) { int i = it - msg_bytes.begin(); sbas_raw_msg_rtklib.msg[i] = *it; } parsing_result = sbsupdatecorr(&sbas_raw_msg_rtklib, &d_nav); VLOG(FLOW) << "<> RTKLIB parsing result: " << parsing_result; } // update gnss-sdr correction data sets from RTKLIB d_nav structure, emit SBAS data into queues switch (parsing_result) { case -1: VLOG(FLOW) << "message parsing problem for MT" << sbas_raw_msg.get_msg_type(); break; case 2: case 3: case 4: case 5: case 6: case 7: case 24: case 25: updated_satellite_corrections(); break; case 18: break; // new iono band mask received -> dont update iono corrections because delays are not case 26: received_iono_correction(); break; case 9: /*updated_sbas_ephemeris(sbas_raw_msg);*/ break; default: break; } // send it to raw message queue if(raw_msg_queue != nullptr) raw_msg_queue->push(sbas_raw_msg); return parsing_result; } unsigned int getbitu(const unsigned char *buff, int pos, int len); int getbits(const unsigned char *buff, int pos, int len); int Sbas_Telemetry_Data::decode_mt12(Sbas_Raw_Msg sbas_raw_msg) { const double rx_delay = 38000.0/300000.0; // estimated sbas signal geosat to ground signal travel time unsigned char * msg = sbas_raw_msg.get_msg().data(); uint32_t gps_tow = getbitu(msg, 121, 20); uint32_t gps_week = getbitu(msg, 141, 10) + 1024; // consider last gps time week overflow double gps_tow_rx = double(gps_tow) + rx_delay; mt12_time_ref = Sbas_Time_Relation(sbas_raw_msg.get_sample_stamp(), gps_week, gps_tow_rx); VLOG(FLOW) << "<> extracted GPS time from MT12: gps_tow=" << gps_tow << " gps_week=" << gps_week; return 12; } void Sbas_Telemetry_Data::updated_sbas_ephemeris(Sbas_Raw_Msg msg) { VLOG(FLOW) << "<> updated_sbas_ephemeris():" << std::endl; Sbas_Ephemeris seph; int satidx = msg.get_prn() - MINPRNSBS; seph_t seph_rtklib = d_nav.seph[satidx]; // copy data seph.i_prn = msg.get_prn(); seph.i_t0 = seph_rtklib.t0; seph.d_tof = seph_rtklib.tof; seph.i_sv_ura = seph_rtklib.sva; seph.b_sv_do_not_use = seph_rtklib.svh; memcpy(seph.d_pos, seph_rtklib.pos, sizeof(seph.d_pos)); memcpy(seph.d_vel, seph_rtklib.vel, sizeof(seph.d_vel)); memcpy(seph.d_acc, seph_rtklib.acc, sizeof(seph.d_acc)); seph.d_af0 = seph_rtklib.af0; seph.d_af1 = seph_rtklib.af1; // print ephemeris for debugging purposes std::stringstream ss; seph.print(ss); VLOG(FLOW) << ss.str(); if(ephemeris_queue != nullptr) ephemeris_queue->push(seph); } void Sbas_Telemetry_Data::received_iono_correction() { VLOG(FLOW) << "<> received_iono_correction():"; std::stringstream ss; Sbas_Ionosphere_Correction iono_corr; for (size_t i_band = 0; i_band < sizeof(d_nav.sbsion)/sizeof(sbsion_t); i_band++) { ss << "<> band=" << i_band << " nigp=" << d_nav.sbsion[i_band].nigp << std::endl; ss << "<> -> valid igps:"; Igp_Band igp_band; for (int i_igp = 0; i_igp < d_nav.sbsion[i_band].nigp; i_igp++) { if(d_nav.sbsion[i_band].igp[i_igp].valid) { // consider only valid IGPs, i.e, such ones which got updated at least once since instantiating sbas_telemtry_data ss << " " << i_igp; Igp igp; igp.t0 = d_nav.sbsion[i_band].igp[i_igp].t0; igp.d_latitude = d_nav.sbsion[i_band].igp[i_igp].lat; igp.d_longitude = d_nav.sbsion[i_band].igp[i_igp].lon; igp.d_give = d_nav.sbsion[i_band].igp[i_igp].give; igp.d_delay = d_nav.sbsion[i_band].igp[i_igp].delay; igp_band.d_igps.push_back(igp); } } ss << std::endl; iono_corr.d_bands.push_back(igp_band); } VLOG(DETAIL) << ss.str(); ss.str(""); iono_corr.print(ss); VLOG(EVENT) << ss.str(); // send to SBAS ionospheric correction queue if(iono_queue != nullptr) iono_queue->push(iono_corr); } // helper for comparing two POD structures with undefined padding between members // not guaranteed to work always properly -> don't use it for critical tasks template inline bool are_equal(const Struct &s1, const Struct &s2) { const size_t struct_size = sizeof(Struct); bool is_equal = true; bool is_equal_manual = true; std::stringstream ss; Struct *s1_; Struct *s2_; // reserve zero initialised memory s1_ = (Struct*) calloc (1, struct_size); s2_ = (Struct*) calloc (1, struct_size); // use assignment constructor which doesn't copy paddings *s1_ = s1; *s2_ = s2; // compare struct memory byte-wise is_equal_manual = true; ss.str(); ss << "\n<> compare objects of size=" << sizeof(Struct) << " (memcmp says is_equal=" << is_equal << ") :" << std::endl; for (size_t i = 0; i < sizeof(Struct); ++i) { char byte1 = ((char *)s1_)[i]; char byte2 = ((char *)s2_)[i]; if(byte1 != byte2) is_equal_manual = false; ss << "<> s1=" << std::hex << std::setw(4) << std::setfill('0'); ss << (short)byte1; ss << " s2=" << std::hex << std::setw(4) << std::setfill('0'); ss << (short)byte2; ss << " equal=" << is_equal_manual; ss << std::endl; } free(s1_); free(s2_); return is_equal_manual; } void Sbas_Telemetry_Data::updated_satellite_corrections() { VLOG(FLOW) << "<> updated_satellite_corrections():"; // for each satellite in the RTKLIB structure for (int i_sat = 0; i_sat < d_nav.sbssat.nsat; i_sat++) { std::stringstream ss; ss << "<> sat=" << d_nav.sbssat.sat[i_sat].sat << " fastcorr.valid=" << d_nav.sbssat.sat[i_sat].fcorr.valid << " lcorr.valid=" << d_nav.sbssat.sat[i_sat].lcorr.valid; if(is_rtklib_sat_correction_valid(i_sat)) // check if ever updated by a received message { int prn = d_nav.sbssat.sat[i_sat].sat; // get fast correction from RTKLIB structure sbsfcorr_t fcorr_rtklib = d_nav.sbssat.sat[i_sat].fcorr; Fast_Correction fcorr; fcorr.d_tof = Sbas_Time(fcorr_rtklib.t0, mt12_time_ref); fcorr.d_prc = fcorr_rtklib.prc; fcorr.d_rrc = fcorr_rtklib.rrc; fcorr.d_dt = fcorr_rtklib.dt; fcorr.d_udre = fcorr_rtklib.udre; // UDRE fcorr.d_ai = fcorr_rtklib.ai; fcorr.d_tlat = d_nav.sbssat.tlat; // get long term correction from RTKLIB structure sbslcorr_t lcorr_rtklib = d_nav.sbssat.sat[i_sat].lcorr; Long_Term_Correction lcorr; lcorr.d_trx = lcorr_rtklib.trx; lcorr.i_tapp = lcorr_rtklib.tapp; lcorr.i_vel = lcorr_rtklib.vel; lcorr.d_iode = lcorr_rtklib.iode; memcpy(lcorr.d_dpos, lcorr_rtklib.dpos, sizeof(lcorr.d_dpos)); memcpy(lcorr.d_dvel, lcorr_rtklib.dvel, sizeof(lcorr.d_dvel)); lcorr.d_daf0 = lcorr_rtklib.daf0; lcorr.d_daf1= lcorr_rtklib.daf1; bool fast_correction_updated = false; bool long_term_correction_updated = false; // check if fast corrections got updated std::map::iterator it_old_fcorr = emitted_fast_corrections.find(prn); if(it_old_fcorr == emitted_fast_corrections.end() || !are_equal < Fast_Correction>(fcorr, it_old_fcorr->second )) { // got updated ss << " fast_correction_updated=" << true; //ss << " not_found=" << (it_old_fcorr == emitted_fast_corrections.end()); //ss << " not_equal=" << (!are_equal(fcorr, it_old_fcorr->second )); fast_correction_updated = true; emitted_fast_corrections[prn] = fcorr; } // check if long term corrections got updated std::map::iterator it_old_lcorr = emitted_long_term_corrections.find(prn); if(it_old_lcorr == emitted_long_term_corrections.end() || !are_equal < Long_Term_Correction>(lcorr, it_old_lcorr->second )) { // got updated ss << " long_term_correction_updated=" << true; //ss << " not_found=" << (it_old_lcorr == emitted_long_term_corrections.end()); //ss << " not_equal=" << (!are_equal(lcorr, it_old_lcorr->second )); long_term_correction_updated = true; emitted_long_term_corrections[prn] = lcorr; } Sbas_Satellite_Correction sbas_satelite_correction; sbas_satelite_correction.d_prn = prn; sbas_satelite_correction.d_fast_correction = fcorr; sbas_satelite_correction.d_long_term_correction = lcorr; if(fast_correction_updated) { ss << std::endl; sbas_satelite_correction.print_fast_correction(ss << " "); } if(long_term_correction_updated) { ss << std::endl; sbas_satelite_correction.print_long_term_correction(ss << " "); } if(fast_correction_updated || long_term_correction_updated) { if(sat_corr_queue != nullptr) sat_corr_queue->push(sbas_satelite_correction); } } VLOG(FLOW) << ss.str(); ss.str(""); } } const double Sbas_Telemetry_Data::gpst0[] = {1980, 1, 6, 0, 0, 0}; /* gps time reference */ /* debug trace function -----------------------------------------------------*/ void Sbas_Telemetry_Data::trace(int level, const char *format, ...) { va_list ap; char str[1000]; va_start(ap, format); vsprintf(str, format, ap); va_end(ap); VLOG(FLOW) << "<> " << std::string(str); } /* satellite system+prn/slot number to satellite number ------------------------ * convert satellite system+prn/slot number to satellite number * args : int sys I satellite system (SYS_GPS,SYS_GLO,...) * int prn I satellite prn/slot number * return : satellite number (0:error) *-----------------------------------------------------------------------------*/ int Sbas_Telemetry_Data::satno(int sys, int prn) { if (prn <= 0) return 0; switch (sys) { case SYS_GPS: if (prn < MINPRNGPS || MAXPRNGPS < prn) return 0; return prn - MINPRNGPS + 1; case SYS_GLO: if (prn < MINPRNGLO || MAXPRNGLO < prn) return 0; return NSATGPS + prn - MINPRNGLO + 1; case SYS_GAL: if (prn < MINPRNGAL || MAXPRNGAL < prn) return 0; return NSATGPS + NSATGLO + prn - MINPRNGAL + 1; case SYS_QZS: if (prn < MINPRNQZS || MAXPRNQZS < prn) return 0; return NSATGPS + NSATGLO + NSATGAL + prn - MINPRNQZS + 1; case SYS_CMP: if (prn < MINPRNCMP || MAXPRNCMP < prn) return 0; return NSATGPS + NSATGLO + NSATGAL + NSATQZS + prn - MINPRNCMP + 1; case SYS_SBS: if (prn < MINPRNSBS || MAXPRNSBS < prn) return 0; return NSATGPS + NSATGLO + NSATGAL + NSATQZS + NSATCMP + prn - MINPRNSBS + 1; } return 0; } /*! * \brief Extracts unsigned/signed bits from byte data * params : unsigned char *buff I byte data * int pos I bit position from start of data (bits) * int len I bit length (bits) (len<=32) * return : extracted unsigned/signed bits */ unsigned int Sbas_Telemetry_Data::getbitu(const unsigned char *buff, int pos, int len) { unsigned int bits = 0; int i; for (i = pos; i < pos + len; i++) bits = (bits << 1) + ((buff[i/8] >> (7 - i % 8)) & 1u); return bits; } int Sbas_Telemetry_Data::getbits(const unsigned char *buff, int pos, int len) { unsigned int bits = getbitu(buff,pos,len); if (len <= 0 || 32 <= len || !(bits & (1u << (len - 1)))) return (int)bits; return (int)(bits|(~0u << len)); /* extend sign */ } /* convert calendar day/time to time ------------------------------------------- * convert calendar day/time to gtime_t struct * args : double *ep I day/time {year,month,day,hour,min,sec} * return : gtime_t struct * notes : proper in 1970-2037 or 1970-2099 (64bit time_t) *-----------------------------------------------------------------------------*/ Sbas_Telemetry_Data::gtime_t Sbas_Telemetry_Data::epoch2time(const double *ep) { const int doy[]={1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}; gtime_t time = {0}; int days, sec, year = (int)ep[0], mon = (int)ep[1], day = (int)ep[2]; if (year < 1970 || 2099 < year || mon < 1 || 12 < mon) return time; /* leap year if year%4==0 in 1901-2099 */ days = (year - 1970)*365 + (year - 1969)/4 + doy[mon - 1] + day - 2 + (year % 4 == 0 && mon >= 3 ? 1 : 0); sec = (int)floor(ep[5]); time.time = (time_t)days*86400 + (int)ep[3]*3600 + (int)ep[4]*60 + sec; time.sec = ep[5] - sec; return time; } /* time difference ------------------------------------------------------------- * difference between gtime_t structs * args : gtime_t t1,t2 I gtime_t structs * return : time difference (t1-t2) (s) *-----------------------------------------------------------------------------*/ double Sbas_Telemetry_Data::timediff(gtime_t t1, gtime_t t2) { return difftime(t1.time, t2.time) + t1.sec - t2.sec; } /* gps time to time ------------------------------------------------------------ * convert week and tow in gps time to gtime_t struct * args : int week I week number in gps time * double sec I time of week in gps time (s) * return : gtime_t struct *-----------------------------------------------------------------------------*/ Sbas_Telemetry_Data::gtime_t Sbas_Telemetry_Data::gpst2time(int week, double sec) { gtime_t t = epoch2time(gpst0); if (sec < -1E9 || 1E9 < sec) sec = 0.0; t.time += 86400*7*week + (int)sec; t.sec = sec - (int)sec; return t; } /* sbas igp definition -------------------------------------------------------*/ const short Sbas_Telemetry_Data::x1[] = {-75,-65,-55,-50,-45,-40,-35,-30,-25,-20,-15,-10,- 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 65, 75, 85}, Sbas_Telemetry_Data::x2[] = {-55,-50,-45,-40,-35,-30,-25,-20,-15,-10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55}, Sbas_Telemetry_Data::x3[] = {-75,-65,-55,-50,-45,-40,-35,-30,-25,-20,-15,-10,- 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 65, 75}, Sbas_Telemetry_Data::x4[] = {-85,-75,-65,-55,-50,-45,-40,-35,-30,-25,-20,-15,-10,- 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 65, 75}, Sbas_Telemetry_Data::x5[] = {-180,-175,-170,-165,-160,-155,-150,-145,-140,-135,-130,-125,-120,-115, -110,-105,-100,- 95,- 90,- 85,- 80,- 75,- 70,- 65,- 60,- 55,- 50,- 45, - 40,- 35,- 30,- 25,- 20,- 15,- 10,- 5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175}, Sbas_Telemetry_Data::x6[] = {-180,-170,-160,-150,-140,-130,-120,-110,-100,- 90,- 80,- 70,- 60,- 50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170}, Sbas_Telemetry_Data::x7[] = {-180,-150,-120,- 90,- 60,- 30, 0, 30, 60, 90, 120, 150}, Sbas_Telemetry_Data::x8[] = {-170,-140,-110,- 80,- 50,- 20, 10, 40, 70, 100, 130, 160}; const Sbas_Telemetry_Data::sbsigpband_t Sbas_Telemetry_Data::igpband1[9][8] = { /* band 0-8 */ {{-180,x1, 1, 28},{-175,x2, 29, 51},{-170,x3, 52, 78},{-165,x2, 79,101}, {-160,x3,102,128},{-155,x2,129,151},{-150,x3,152,178},{-145,x2,179,201}}, {{-140,x4, 1, 28},{-135,x2, 29, 51},{-130,x3, 52, 78},{-125,x2, 79,101}, {-120,x3,102,128},{-115,x2,129,151},{-110,x3,152,178},{-105,x2,179,201}}, {{-100,x3, 1, 27},{- 95,x2, 28, 50},{- 90,x1, 51, 78},{- 85,x2, 79,101}, {- 80,x3,102,128},{- 75,x2,129,151},{- 70,x3,152,178},{- 65,x2,179,201}}, {{- 60,x3, 1, 27},{- 55,x2, 28, 50},{- 50,x4, 51, 78},{- 45,x2, 79,101}, {- 40,x3,102,128},{- 35,x2,129,151},{- 30,x3,152,178},{- 25,x2,179,201}}, {{- 20,x3, 1, 27},{- 15,x2, 28, 50},{- 10,x3, 51, 77},{- 5,x2, 78,100}, { 0,x1,101,128},{ 5,x2,129,151},{ 10,x3,152,178},{ 15,x2,179,201}}, {{ 20,x3, 1, 27},{ 25,x2, 28, 50},{ 30,x3, 51, 77},{ 35,x2, 78,100}, { 40,x4,101,128},{ 45,x2,129,151},{ 50,x3,152,178},{ 55,x2,179,201}}, {{ 60,x3, 1, 27},{ 65,x2, 28, 50},{ 70,x3, 51, 77},{ 75,x2, 78,100}, { 80,x3,101,127},{ 85,x2,128,150},{ 90,x1,151,178},{ 95,x2,179,201}}, {{ 100,x3, 1, 27},{ 105,x2, 28, 50},{ 110,x3, 51, 77},{ 115,x2, 78,100}, { 120,x3,101,127},{ 125,x2,128,150},{ 130,x4,151,178},{ 135,x2,179,201}}, {{ 140,x3, 1, 27},{ 145,x2, 28, 50},{ 150,x3, 51, 77},{ 155,x2, 78,100}, { 160,x3,101,127},{ 165,x2,128,150},{ 170,x3,151,177},{ 175,x2,178,200}} }; const Sbas_Telemetry_Data::sbsigpband_t Sbas_Telemetry_Data::igpband2[2][5] = { /* band 9-10 */ {{ 60,x5, 1, 72},{ 65,x6, 73,108},{ 70,x6,109,144},{ 75,x6,145,180}, { 85,x7,181,192}}, {{- 60,x5, 1, 72},{- 65,x6, 73,108},{- 70,x6,109,144},{- 75,x6,145,180}, {- 85,x8,181,192}} }; /* decode type 1: prn masks --------------------------------------------------*/ int Sbas_Telemetry_Data::decode_sbstype1(const sbsmsg_t *msg, sbssat_t *sbssat) { int i, n, sat; // see figure A-6: i corresponds to bit number (and for the GPS satellites is identically to the PRN), n to the PRN mask number trace(4, "decode_sbstype1:"); for (i = 1, n = 0; i <= 210 && n < MAXSAT; i++) { if (getbitu(msg->msg, 13 + i, 1)) { if (i <= 37) sat = satno(SYS_GPS, i); /* 0 - 37: gps */ else if (i <= 61) sat = satno(SYS_GLO, i - 37); /* 38 - 61: glonass */ else if (i <= 119) sat = 0; /* 62 - 119: future gnss */ else if (i <= 138) sat = satno(SYS_SBS, i); /* 120 - 138: geo/waas */ else if (i <= 182) sat = 0; /* 139 - 182: reserved */ else if (i <= 192) sat = satno(SYS_SBS, i + 10); /* 183 - 192: qzss ref [2] */ else if (i <= 202) sat = satno(SYS_QZS, i); /* 193 - 202: qzss ref [2] */ else sat = 0; /* 203 - : reserved */ sbssat->sat[n++].sat = sat; } } // TODO consider the use of the old prn mask in the transition phase such that old data sets still can be used int new_iodp = getbitu(msg->msg, 224, 2); if (sbssat->iodp != new_iodp) prn_mask_changed(); // invalidate all satellite corrections sbssat->iodp = new_iodp; sbssat->nsat = n; trace(5, "decode_sbstype1: nprn=%d iodp=%d", n, sbssat->iodp); return 1; } /* decode type 2-5,0: fast corrections ---------------------------------------*/ int Sbas_Telemetry_Data::decode_sbstype2(const sbsmsg_t *msg, sbssat_t *sbssat) { int i, j, iodf, type, udrei; double prc, dt; double t0_past; trace(4,"decode_sbstype2:"); if (sbssat->iodp != (int)getbitu(msg->msg, 16, 2)) return 0; type = getbitu(msg->msg, 8, 6); iodf = getbitu(msg->msg, 14, 2); for (i=0; i<13; i++) { if ((j = 13*((type == 0 ? 2 : type) - 2) + i) >= sbssat->nsat) break; udrei = getbitu(msg->msg, 174 + 4*i, 4); t0_past = sbssat->sat[j].fcorr.t0; prc = sbssat->sat[j].fcorr.prc; sbssat->sat[j].fcorr.t0 = msg->sample_stamp; sbssat->sat[j].fcorr.prc = getbits(msg->msg, 18 + i*12, 12)*0.125f; sbssat->sat[j].fcorr.udre = udrei + 1; dt = sbssat->sat[j].fcorr.t0 - t0_past; if (!sbssat->sat[j].fcorr.valid || dt <= 0.0 || 18.0 < dt || sbssat->sat[j].fcorr.ai == 0) { sbssat->sat[j].fcorr.rrc = 0.0; sbssat->sat[j].fcorr.dt = 0.0; } else { sbssat->sat[j].fcorr.rrc = (sbssat->sat[j].fcorr.prc - prc)/dt; sbssat->sat[j].fcorr.dt = dt; } sbssat->sat[j].fcorr.valid = true; sbssat->sat[j].fcorr.iodf = iodf; } trace(5, "decode_sbstype2: type=%d iodf=%d", type, iodf); return 1; } /* decode type 6: integrity info ---------------------------------------------*/ int Sbas_Telemetry_Data::decode_sbstype6(const sbsmsg_t *msg, sbssat_t *sbssat) { int i, iodf[4], udrei; trace(4, "decode_sbstype6:"); if(sbssat->iodp < 0) return 0; for (i=0; i<4; i++) { iodf[i] = getbitu(msg->msg, 14 + i*2, 2); } for (i=0; i < sbssat->nsat && i < MAXSAT; i++) { if (!sbssat->sat[i].fcorr.valid || sbssat->sat[i].fcorr.iodf != iodf[i/13]) continue; udrei = getbitu(msg->msg, 22 + i*4, 4); sbssat->sat[i].fcorr.udre = udrei + 1; } trace(5, "decode_sbstype6: iodf=%d %d %d %d", iodf[0], iodf[1], iodf[2], iodf[3]); return 1; } /* decode type 7: fast correction degradation factor -------------------------*/ int Sbas_Telemetry_Data::decode_sbstype7(const sbsmsg_t *msg, sbssat_t *sbssat) { int i; trace(4,"decode_sbstype7"); if (sbssat->iodp != (int)getbitu(msg->msg, 18, 2)) return 0; sbssat->tlat = getbitu(msg->msg, 14, 4); for (i=0; i < sbssat->nsat && i < MAXSAT; i++) { sbssat->sat[i].fcorr.ai = getbitu(msg->msg, 22 + i*4, 4); } return 1; } /* decode type 9: geo navigation message -------------------------------------*/ int Sbas_Telemetry_Data::decode_sbstype9(const sbsmsg_t *msg, nav_t *nav) { seph_t seph; int i; int sat; trace(4,"decode_sbstype9:"); if (!(sat = satno(SYS_SBS, msg->prn))) { trace(2, "invalid prn in sbas type 9: prn=%3d", msg->prn); return 0; } /*t=(int)getbitu(msg->msg,22,13)*16-(int)msg->tow%86400; if (t<=-43200) t+=86400; else if (t> 43200) t-=86400;*/ //seph.t0 =gpst2time(msg->week,msg->tow+t); seph.sat = sat; seph.t0 = getbitu(msg->msg, 22, 13)*16; seph.tof = msg->sample_stamp; seph.sva = getbitu(msg->msg, 35, 4); seph.svh = seph.sva == 15 ? 1 : 0; /* unhealthy if ura==15 */ seph.pos[0] = getbits(msg->msg, 39, 30)*0.08; seph.pos[1] = getbits(msg->msg, 69, 30)*0.08; seph.pos[2] = getbits(msg->msg, 99, 25)*0.4; seph.vel[0] = getbits(msg->msg, 124, 17)*0.000625; seph.vel[1] = getbits(msg->msg, 141, 17)*0.000625; seph.vel[2] = getbits(msg->msg, 158, 18)*0.004; seph.acc[0] = getbits(msg->msg, 176, 10)*0.0000125; seph.acc[1] = getbits(msg->msg, 186, 10)*0.0000125; seph.acc[2] = getbits(msg->msg, 196, 10)*0.0000625; seph.af0 = getbits(msg->msg, 206, 12)*P2_31; seph.af1 = getbits(msg->msg, 218, 8)*P2_39/2.0; i = msg->prn-MINPRNSBS; if (std::abs(nav->seph[i].t0 - seph.t0) < 1E-3) { /* not change */ VLOG(FLOW) << "<> no change in ephemeris -> won't parse"; return 0; } nav->seph[NSATSBS + i] = nav->seph[i]; /* previous */ nav->seph[i] = seph; /* current */ trace(5, "decode_sbstype9: prn=%d", msg->prn); return 1; } /* decode type 18: ionospheric grid point masks ------------------------------*/ int Sbas_Telemetry_Data::decode_sbstype18(const sbsmsg_t *msg, sbsion_t *sbsion) { const sbsigpband_t *p; int i, j, n, m, band = getbitu(msg->msg, 18, 4); trace(4, "decode_sbstype18:"); if (0 <= band && band <= 8) {p = igpband1[band]; m = 8;} else if (9 <= band && band <= 10) {p = igpband2[band - 9]; m = 5;} else return 0; short iodi_new = (short)getbitu(msg->msg, 22, 2); if(sbsion[band].iodi != iodi_new) { // IGP mask changed -> invalidate all IGPs in this band igp_mask_changed(band); } sbsion[band].iodi = iodi_new; for (i=1, n=0; i <= 201; i++) { if (!getbitu(msg->msg, 23 + i, 1)) continue; for (j = 0; j < m; j++) { if (i < p[j].bits || p[j].bite < i) continue; sbsion[band].igp[n].lat = band <= 8 ? p[j].y[i - p[j].bits] : p[j].x; sbsion[band].igp[n++].lon = band <= 8 ? p[j].x : p[j].y[i - p[j].bits]; break; } } sbsion[band].nigp = n; trace(5, "decode_sbstype18: band=%d nigp=%d", band, n); return 1; } /* decode half long term correction (vel code=0) -----------------------------*/ int Sbas_Telemetry_Data::decode_longcorr0(const sbsmsg_t *msg, int p, sbssat_t *sbssat) { int i, n = getbitu(msg->msg, p, 6); trace(4, "decode_longcorr0:"); if (n == 0 || n > MAXSAT) return 0; sbssat->sat[n - 1].lcorr.iode = getbitu(msg->msg, p + 6, 8); for (i = 0; i < 3; i++) { sbssat->sat[n - 1].lcorr.dpos[i] = getbits(msg->msg, p + 14 + 9*i, 9)*0.125; sbssat->sat[n - 1].lcorr.dvel[i] = 0.0; } sbssat->sat[n - 1].lcorr.daf0 = getbits(msg->msg, p + 41, 10)*P2_31; sbssat->sat[n - 1].lcorr.daf1 = 0.0; //sbssat->sat[n-1].lcorr.t0=gpst2time(msg->week,msg->tow); sbssat->sat[n - 1].lcorr.trx = msg->sample_stamp; // vel=0 -> time of applicability is reception time sbssat->sat[n - 1].lcorr.tapp = 0; sbssat->sat[n - 1].lcorr.valid = true; trace(5, "decode_longcorr0:sat=%2d", sbssat->sat[n - 1].sat); return 1; } /* decode half long term correction (vel code=1) -----------------------------*/ int Sbas_Telemetry_Data::decode_longcorr1(const sbsmsg_t *msg, int p, sbssat_t *sbssat) { int i; int n = getbitu(msg->msg, p, 6); trace(4,"decode_longcorr1:"); if (n == 0 || n > MAXSAT) return 0; sbssat->sat[n - 1].lcorr.iode = getbitu(msg->msg, p + 6, 8); for (i=0; i<3; i++) { sbssat->sat[n - 1].lcorr.dpos[i] = getbits(msg->msg, p + 14 + i*11, 11)*0.125; sbssat->sat[n - 1].lcorr.dvel[i] = getbits(msg->msg, p + 58 + i*8, 8)*P2_11; } sbssat->sat[n - 1].lcorr.daf0 = getbits(msg->msg, p + 47, 11)*P2_31; sbssat->sat[n - 1].lcorr.daf1 = getbits(msg->msg, p + 82, 8)*P2_39; // vel=1 -> time of applicability is sent in message, needs to be corrected for rollover which can not be done here, since the absolute gps time is unknown. see IS-GPS-200G pdf page 116 for correction /*t=(int)getbitu(msg->msg,p+90,13)*16-(int)msg->tow%86400; if (t<=-43200) t+=86400; else if (t> 43200) t-=86400; sbssat->sat[n-1].lcorr.t0=gpst2time(msg->week,msg->tow+t);*/ sbssat->sat[n - 1].lcorr.trx = msg->sample_stamp; sbssat->sat[n - 1].lcorr.tapp = (int)getbitu(msg->msg, p + 90, 13)*16; sbssat->sat[n - 1].lcorr.vel = 1; sbssat->sat[n - 1].lcorr.valid = true; trace(5, "decode_longcorr1: sat=%2d", sbssat->sat[n - 1].sat); return 1; } /* decode half long term correction ------------------------------------------*/ int Sbas_Telemetry_Data::decode_longcorrh(const sbsmsg_t *msg, int p, sbssat_t *sbssat) { trace(4,"decode_longcorrh:"); if (getbitu(msg->msg, p, 1) == 0 ) { /* vel code=0 */ if (sbssat->iodp == (int)getbitu(msg->msg, p + 103, 2)) { return decode_longcorr0(msg, p + 1, sbssat) && decode_longcorr0(msg, p + 52, sbssat); } } else if (sbssat->iodp == (int)getbitu(msg->msg, p + 104, 2)) { return decode_longcorr1(msg, p + 1, sbssat); } return 0; } /* decode type 24: mixed fast/long term correction ---------------------------*/ int Sbas_Telemetry_Data::decode_sbstype24(const sbsmsg_t *msg, sbssat_t *sbssat) { int i, j, iodf, blk, udre; trace(4, "decode_sbstype24:"); if (sbssat->iodp != (int)getbitu(msg->msg, 110, 2)) return 0; /* check IODP */ blk = getbitu(msg->msg, 112, 2); iodf =getbitu(msg->msg, 114, 2); for (i=0; i<6; i++) { if ((j = 13*blk+i) >= sbssat->nsat) break; udre = getbitu(msg->msg, 86 + 4*i, 4); //sbssat->sat[j].fcorr.t0 =gpst2time(msg->week,msg->tow); sbssat->sat[j].fcorr.t0 = msg->sample_stamp; sbssat->sat[j].fcorr.prc = getbits(msg->msg, 14 + i*12, 12)*0.125f; sbssat->sat[j].fcorr.udre = udre + 1; sbssat->sat[j].fcorr.iodf = iodf; } return decode_longcorrh(msg, 120, sbssat); } /* decode type 25: long term satellite error correction ----------------------*/ int Sbas_Telemetry_Data::decode_sbstype25(const sbsmsg_t *msg, sbssat_t *sbssat) { trace(4,"decode_sbstype25:"); return decode_longcorrh(msg, 14, sbssat) && decode_longcorrh(msg, 120, sbssat); } /* decode type 26: ionospheric delay corrections -----------------------------*/ int Sbas_Telemetry_Data::decode_sbstype26(const sbsmsg_t *msg, sbsion_t *sbsion) { int i, j, block, delay, give, band = getbitu(msg->msg, 14, 4); trace(4, "decode_sbstype26:"); if (band > MAXBAND || sbsion[band].iodi != (int)getbitu(msg->msg, 217, 2)) return 0; block = getbitu(msg->msg, 18, 4); for (i = 0; i < 15; i++) { if ((j = block*15 + i) >= sbsion[band].nigp) continue; give = getbitu(msg->msg, 2 + i*13 + 9, 4); delay = getbitu(msg->msg, 22 + i*13, 9); //sbsion[band].igp[j].t0=gpst2time(msg->week,msg->tow); sbsion[band].igp[j].t0 = msg->sample_stamp; sbsion[band].igp[j].valid = true; sbsion[band].igp[j].delay = delay == 0x1FF ? 0.0f : delay*0.125f; sbsion[band].igp[j].give = give; if(sbsion[band].igp[j].give > 15) sbsion[band].igp[j].give = 15; // give is not higher than 15, but to be sure } trace(5, "decode_sbstype26: band=%d block=%d", band, block); return 1; } /* update sbas corrections ----------------------------------------------------- * update sbas correction parameters in navigation data with a sbas message * args : sbsmg_t *msg I sbas message * nav_t *nav IO navigation data * return : message type (-1: error or not supported type) * notes : nav->seph must point to seph[NSATSBS*2] (array of seph_t) * seph[prn-MINPRNSBS+1] : sat prn current epehmeris * seph[prn-MINPRNSBS+1+MAXPRNSBS]: sat prn previous epehmeris *-----------------------------------------------------------------------------*/ int Sbas_Telemetry_Data::sbsupdatecorr(const sbsmsg_t *msg, nav_t *nav) { int type = getbitu(msg->msg, 8, 6), stat = -1; trace(3,"sbsupdatecorr: type=%d",type); //if (msg->week==0) return -1; switch (type) { case 0: stat = decode_sbstype2(msg, &nav->sbssat); break; case 1: stat = decode_sbstype1(msg, &nav->sbssat); break; case 2: case 3: case 4: case 5: stat = decode_sbstype2(msg, &nav->sbssat); break; case 6: stat = decode_sbstype6(msg, &nav->sbssat); break; case 7: stat = decode_sbstype7(msg, &nav->sbssat); break; case 9: stat = decode_sbstype9(msg, nav); break; case 10: trace(2, "unsupported sbas message: type=%d", type); break; case 12: trace(2, "unsupported sbas message: type=%d", type); break; case 17: trace(2, "unsupported sbas message: type=%d", type); break; case 18: stat = decode_sbstype18(msg, nav ->sbsion); break; case 24: stat = decode_sbstype24(msg, &nav->sbssat); break; case 25: stat = decode_sbstype25(msg, &nav->sbssat); break; case 26: stat = decode_sbstype26(msg, nav ->sbsion); break; case 63: break; /* null message */ default: trace(2, "Unsupported SBAS message: type=%d", type); break; } return stat ? type : -1; } void Sbas_Telemetry_Data::prn_mask_changed() { d_nav.sbssat.tlat = -1; // for each satellite in the RTKLIB structure for (int i_sat = 0; i_sat < d_nav.sbssat.nsat; i_sat++) { d_nav.sbssat.sat[i_sat].fcorr.valid = false; d_nav.sbssat.sat[i_sat].lcorr.valid = false; } } bool Sbas_Telemetry_Data::is_rtklib_sat_correction_valid(int sat) { return d_nav.sbssat.tlat > -1 && d_nav.sbssat.sat[sat].fcorr.valid && d_nav.sbssat.sat[sat].lcorr.valid; } void Sbas_Telemetry_Data::igp_mask_changed(int band) { for(int i_igp = 0; i_igp < d_nav.sbsion[band].nigp; i_igp++) d_nav.sbsion[band].igp[i_igp].valid = false; } gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_navigation_message.h0000644000175000017500000001075412576764164025774 0ustar carlescarles/*! * \file gps_cnav_navigation_message.h * \brief Interface of a GPS CNAV Data message decoder * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_Gps_CNAV_Navigation_Message_H_ #define GNSS_SDR_Gps_CNAV_Navigation_Message_H_ #include "stdint.h" #include #include #include #include #include #include #include #include #include #include "GPS_L2C.h" #include "gps_cnav_ephemeris.h" #include "gps_cnav_iono.h" #include "gps_cnav_utc_model.h" //TODO: Create GPS CNAV almanac //#include "gps_almanac.h" /*! * \brief This class decodes a GPS CNAV Data message as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_CNAV_Navigation_Message { private: unsigned long int read_navigation_unsigned(std::bitset bits, const std::vector> parameter); signed long int read_navigation_signed(std::bitset bits, const std::vector> parameter); bool read_navigation_bool(std::bitset bits, const std::vector> parameter); void print_gps_word_bytes(unsigned int GPS_word); Gps_CNAV_Ephemeris ephemeris_record; Gps_CNAV_Iono iono_record; Gps_CNAV_Utc_Model utc_model_record; public: double d_TOW; bool b_flag_ephemeris_1; bool b_flag_ephemeris_2; bool b_flag_iono_valid; //!< If set, it indicates that the ionospheric parameters are filled (page 18 has arrived and decoded) std::map satelliteBlock; //!< Map that stores to which block the PRN belongs http://www.navcen.uscg.gov/?Do=constellationStatus // satellite positions double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). // satellite identification info int i_channel_ID; unsigned int i_satellite_PRN; // Satellite velocity double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] // public functions void reset(); void decode_page(std::vector data); /*! * \brief Obtain a GPS SV Ephemeris class filled with current SV data */ Gps_CNAV_Ephemeris get_ephemeris(); /*! * \brief Check if we have a new iono record stored in the galileo navigation class */ bool have_new_iono(); /*! * \brief Obtain a GPS ionospheric correction parameters class filled with current SV data */ Gps_CNAV_Iono get_iono(); /*! * \brief Obtain a GPS UTC model parameters class filled with current SV data */ Gps_CNAV_Utc_Model get_utc_model(); /*! * \brief Check if we have a new ephemeris stored in the galileo navigation class */ bool have_new_ephemeris(); /*! * Default constructor */ Gps_CNAV_Navigation_Message(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_iono.h0000644000175000017500000000643712576764164023100 0ustar carlescarles/*! * \file gps_cnav_iono.h * \brief Interface of a GPS CNAV IONOSPHERIC MODEL storage * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_CNAV_IONO_H_ #define GNSS_SDR_GPS_CNAV_IONO_H_ #include "GPS_L2C.h" #include "boost/assign.hpp" #include /*! * \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_CNAV_Iono { public: bool valid; //!< Valid flag // Ionospheric parameters double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s] double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle] double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2] double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3] double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s] double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle] double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2] double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3] Gps_CNAV_Iono(); //!< Default constructor template /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("d_alpha0",d_alpha0); archive & make_nvp("d_alpha1",d_alpha1); archive & make_nvp("d_alpha2",d_alpha2); archive & make_nvp("d_alpha3",d_alpha3); archive & make_nvp("d_beta0",d_beta0); archive & make_nvp("d_beta1",d_beta1); archive & make_nvp("d_beta2",d_beta2); archive & make_nvp("d_beta3",d_beta3); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_acq_assist.h0000644000175000017500000000457312576764164023256 0ustar carlescarles/*! * \file gps_acq_assist.h * \brief Interface of a GPS RRLL ACQUISITION ASSISTACE storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_ACQ_ASSIST_H_ #define GNSS_SDR_GPS_ACQ_ASSIST_H_ #include "GPS_L1_CA.h" /*! * \brief This class is a storage for the GPS GSM RRLL acquisition assistance data as described in * Digital cellular telecommunications system (Phase 2+); * Location Services (LCS); * Mobile Station (MS) - Serving Mobile Location Centre (SMLC) * Radio Resource LCS Protocol (RRLP) * (3GPP TS 44.031 version 5.12.0 Release 5) */ class Gps_Acq_Assist { public: unsigned int i_satellite_PRN; //!< SV PRN NUMBER double d_TOW; //!< Time Of Week assigned to the acquisition data double d_Doppler0; //!< Doppler (0 order term) [Hz] double d_Doppler1; //!< Doppler (1 order term) [Hz] double dopplerUncertainty; //!< Doppler Uncertainty [Hz] double Code_Phase; //!< Code phase [chips] double Code_Phase_int; //!< Integer Code Phase [1 C/A code period] double GPS_Bit_Number; //!< GPS Bit Number double Code_Phase_window; //!< Code Phase search window [chips] double Azimuth; //!< Satellite Azimuth [deg] double Elevation; //!< Satellite Elevation [deg] /*! * Default constructor */ Gps_Acq_Assist(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_ephemeris.cc0000644000175000017500000002154612576764164023242 0ustar carlescarles/*! * \file gps_ephemeris.cc * \brief Interface of a GPS EPHEMERIS storage and orbital model functions * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_ephemeris.h" Gps_Ephemeris::Gps_Ephemeris() { i_satellite_PRN = 0; d_TOW = 0; d_Crs = 0; d_Delta_n = 0; d_M_0 = 0; d_Cuc = 0; d_e_eccentricity = 0; d_Cus = 0; d_sqrt_A = 0; d_Toe = 0; d_Toc = 0; d_Cic = 0; d_OMEGA0 = 0; d_Cis = 0; d_i_0 = 0; d_Crc = 0; d_OMEGA = 0; d_OMEGA_DOT = 0; d_IDOT = 0; i_code_on_L2 = 0; i_GPS_week = 0; b_L2_P_data_flag = false; i_SV_accuracy = 0; i_SV_health = 0; d_IODE_SF2 = 0; d_IODE_SF3 = 0; d_TGD = 0; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] d_IODC = 0; // Issue of Data, Clock i_AODO = 0; // Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] b_fit_interval_flag = false; // indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. d_spare1 = 0; d_spare2 = 0; d_A_f0 = 0; // Coefficient 0 of code phase offset model [s] d_A_f1 = 0; // Coefficient 1 of code phase offset model [s/s] d_A_f2 = 0; // Coefficient 2 of code phase offset model [s/s^2] b_integrity_status_flag = false; b_alert_flag = false; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. b_antispoofing_flag = false; // If true, the AntiSpoofing mode is ON in that SV //Plane A (info from http://www.navcen.uscg.gov/?Do=constellationStatus) satelliteBlock[9] = "IIA"; satelliteBlock[31] = "IIR-M"; satelliteBlock[8] = "IIA"; satelliteBlock[7] = "IIR-M"; satelliteBlock[27] = "IIA"; //Plane B satelliteBlock[16] = "IIR"; satelliteBlock[25] = "IIF"; satelliteBlock[28] = "IIR"; satelliteBlock[12] = "IIR-M"; satelliteBlock[30] = "IIA"; //Plane C satelliteBlock[29] = "IIR-M"; satelliteBlock[3] = "IIA"; satelliteBlock[19] = "IIR"; satelliteBlock[17] = "IIR-M"; satelliteBlock[6] = "IIA"; //Plane D satelliteBlock[2] = "IIR"; satelliteBlock[1] = "IIF"; satelliteBlock[21] = "IIR"; satelliteBlock[4] = "IIA"; satelliteBlock[11] = "IIR"; satelliteBlock[24] = "IIA"; // Decommissioned from active service on 04 Nov 2011 //Plane E satelliteBlock[20] = "IIR"; satelliteBlock[22] = "IIR"; satelliteBlock[5] = "IIR-M"; satelliteBlock[18] = "IIR"; satelliteBlock[32] = "IIA"; satelliteBlock[10] = "IIA"; //Plane F satelliteBlock[14] = "IIR"; satelliteBlock[15] = "IIR-M"; satelliteBlock[13] = "IIR"; satelliteBlock[23] = "IIR"; satelliteBlock[26] = "IIA"; d_satClkDrift = 0.0; d_dtr = 0.0; d_satpos_X = 0.0; d_satpos_Y = 0.0; d_satpos_Z = 0.0; d_satvel_X = 0.0; d_satvel_Y = 0.0; d_satvel_Z = 0.0; } double Gps_Ephemeris::check_t(double time) { double corrTime; double half_week = 302400.0; // seconds corrTime = time; if (time > half_week) { corrTime = time - 2.0 * half_week; } else if (time < -half_week) { corrTime = time + 2.0 * half_week; } return corrTime; } // 20.3.3.3.3.1 User Algorithm for SV Clock Correction. double Gps_Ephemeris::sv_clock_drift(double transmitTime) { double dt; dt = check_t(transmitTime - d_Toc); d_satClkDrift = d_A_f0 + d_A_f1 * dt + d_A_f2 * (dt * dt) + sv_clock_relativistic_term(transmitTime); return d_satClkDrift; } // compute the relativistic correction term double Gps_Ephemeris::sv_clock_relativistic_term(double transmitTime) { double tk; double a; double n; double n0; double E; double E_old; double dE; double M; // Restore semi-major axis a = d_sqrt_A * d_sqrt_A; // Time from ephemeris reference epoch tk = check_t(transmitTime - d_Toe); // Computed mean motion n0 = sqrt(GM / (a * a * a)); // Corrected mean motion n = n0 + d_Delta_n; // Mean anomaly M = d_M_0 + n * tk; // Reduce mean anomaly to between 0 and 2pi M = fmod((M + 2.0 * GPS_PI), (2.0 * GPS_PI)); // Initial guess of eccentric anomaly E = M; // --- Iteratively compute eccentric anomaly ---------------------------- for (int ii = 1; ii < 20; ii++) { E_old = E; E = M + d_e_eccentricity * sin(E); dE = fmod(E - E_old, 2.0 * GPS_PI); if (fabs(dE) < 1e-12) { //Necessary precision is reached, exit from the loop break; } } // Compute relativistic correction term d_dtr = F * d_e_eccentricity * d_sqrt_A * sin(E); return d_dtr; } void Gps_Ephemeris::satellitePosition(double transmitTime) { double tk; double a; double n; double n0; double M; double E; double E_old; double dE; double nu; double phi; double u; double r; double i; double Omega; // Find satellite's position ---------------------------------------------- // Restore semi-major axis a = d_sqrt_A*d_sqrt_A; // Time from ephemeris reference epoch tk = check_t(transmitTime - d_Toe); // Computed mean motion n0 = sqrt(GM / (a*a*a)); // Corrected mean motion n = n0 + d_Delta_n; // Mean anomaly M = d_M_0 + n * tk; // Reduce mean anomaly to between 0 and 2pi M = fmod((M + 2*GPS_PI), (2*GPS_PI)); // Initial guess of eccentric anomaly E = M; // --- Iteratively compute eccentric anomaly ---------------------------- for (int ii = 1; ii<20; ii++) { E_old = E; E = M + d_e_eccentricity * sin(E); dE = fmod(E - E_old, 2*GPS_PI); if (fabs(dE) < 1e-12) { //Necessary precision is reached, exit from the loop break; } } // Compute the true anomaly double tmp_Y = sqrt(1.0 - d_e_eccentricity * d_e_eccentricity) * sin(E); double tmp_X = cos(E) - d_e_eccentricity; nu = atan2(tmp_Y, tmp_X); // Compute angle phi (argument of Latitude) phi = nu + d_OMEGA; // Reduce phi to between 0 and 2*pi rad phi = fmod((phi), (2*GPS_PI)); // Correct argument of latitude u = phi + d_Cuc * cos(2*phi) + d_Cus * sin(2*phi); // Correct radius r = a * (1 - d_e_eccentricity*cos(E)) + d_Crc * cos(2*phi) + d_Crs * sin(2*phi); // Correct inclination i = d_i_0 + d_IDOT * tk + d_Cic * cos(2*phi) + d_Cis * sin(2*phi); // Compute the angle between the ascending node and the Greenwich meridian Omega = d_OMEGA0 + (d_OMEGA_DOT - OMEGA_EARTH_DOT)*tk - OMEGA_EARTH_DOT * d_Toe; // Reduce to between 0 and 2*pi rad Omega = fmod((Omega + 2*GPS_PI), (2*GPS_PI)); // --- Compute satellite coordinates in Earth-fixed coordinates d_satpos_X = cos(u) * r * cos(Omega) - sin(u) * r * cos(i) * sin(Omega); d_satpos_Y = cos(u) * r * sin(Omega) + sin(u) * r * cos(i) * cos(Omega); d_satpos_Z = sin(u) * r * sin(i); // Satellite's velocity. Can be useful for Vector Tracking loops double Omega_dot = d_OMEGA_DOT - OMEGA_EARTH_DOT; d_satvel_X = - Omega_dot * (cos(u) * r + sin(u) * r * cos(i)) + d_satpos_X * cos(Omega) - d_satpos_Y * cos(i) * sin(Omega); d_satvel_Y = Omega_dot * (cos(u) * r * cos(Omega) - sin(u) * r * cos(i) * sin(Omega)) + d_satpos_X * sin(Omega) + d_satpos_Y * cos(i) * cos(Omega); d_satvel_Z = d_satpos_Y * sin(i); } gnss-sdr-0.0.6/src/core/system_parameters/gps_almanac.h0000644000175000017500000000445512576764164022517 0ustar carlescarles/*! * \file gps_almanac.h * \brief Interface of a GPS ALMANAC storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_ALMANAC_H_ #define GNSS_SDR_GPS_ALMANAC_H_ #include "GPS_L1_CA.h" /*! * \brief This class is a storage for the GPS SV ALMANAC data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_Almanac { public: unsigned int i_satellite_PRN; //!< SV PRN NUMBER double d_Delta_i; double d_Toa; //!< Almanac data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_e_eccentricity; //!< Eccentricity [dimensionless] double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)] double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] int i_SV_health; // SV Health double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] /*! * Default constructor */ Gps_Almanac(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_utc_model.h0000644000175000017500000000663712576764164023102 0ustar carlescarles/*! * \file gps_utc_model.h * \brief Interface of a GPS UTC MODEL storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_UTC_MODEL_H_ #define GNSS_SDR_GPS_UTC_MODEL_H_ #include "GPS_L1_CA.h" #include "boost/assign.hpp" #include /*! * \brief This class is a storage for the GPS UTC MODEL data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_Utc_Model { public: bool valid; // UTC parameters double d_A1; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s/s] double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s] double d_t_OT; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200E) [s] int i_WN_T; //!< UTC reference week number [weeks] double d_DeltaT_LS; //!< delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac. int i_WN_LSF; //!< Week number at the end of which the leap second becomes effective [weeks] int i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days] double d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s] /*! * Default constructor */ Gps_Utc_Model(); template /* * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("valid",valid); archive & make_nvp("d_A1",d_A1); archive & make_nvp("d_A0",d_A0); archive & make_nvp("d_t_OT",d_t_OT); archive & make_nvp("i_WN_T",i_WN_T); archive & make_nvp("d_DeltaT_LS",d_DeltaT_LS); archive & make_nvp("i_WN_LSF",i_WN_LSF); archive & make_nvp("i_DN",i_DN); archive & make_nvp("d_DeltaT_LSF",d_DeltaT_LSF); } /*! * \brief Computes the Coordinated Universal Time (UTC) and * returns it in [s] (IS-GPS-200E, 20.3.3.5.2.4) */ double utc_time(double gpstime_corrected, int i_GPS_week); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/GPS_L2C.h0000644000175000017500000002371712576764164021345 0ustar carlescarles/*! * \file GPS_L2C.h * \brief Defines system parameters for GPS L2C signal * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L2C_H_ #define GNSS_SDR_GPS_L2C_H_ #include #include #include #include // std::pair #include "gnss_satellite.h" #include "MATH_CONSTANTS.h" // Physical constants const double GPS_L2_C_m_s = 299792458.0; //!< The speed of light, [m/s] const double GPS_L2_C_m_ms = 299792.4580; //!< The speed of light, [m/ms] const double GPS_L2_PI = 3.1415926535898; //!< Pi as defined in IS-GPS-200E const double GPS_L2_TWO_PI = 6.283185307179586;//!< 2Pi as defined in IS-GPS-200E const double GPS_L2_OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Earth rotation rate, [rad/s] const double GPS_L2_GM = 3.986005e14; //!< Universal gravitational constant times the mass of the Earth, [m^3/s^2] const double GPS_L2_F = -4.442807633e-10; //!< Constant, [s/(m)^(1/2)] // carrier and code frequencies const double GPS_L2_FREQ_HZ = 1.2276e9; //!< L2 [Hz] const double GPS_L2_M_CODE_RATE_HZ = 0.5115e6; //!< GPS L2 M code rate [chips/s] const int GPS_L2_M_CODE_LENGTH_CHIPS = 10230; //!< GPS L2 M code length [chips] const double GPS_L2_M_PERIOD = 0.02; //!< GPS L2 M code period [seconds] const double GPS_L2_L_CODE_RATE_HZ = 0.5115e6; //!< GPS L2 L code rate [chips/s] const int GPS_L2_L_CODE_LENGTH_CHIPS = 767250; //!< GPS L2 L code length [chips] const double GPS_L2_L_PERIOD = 1.5; //!< GPS L2 L code period [seconds] const int32_t GPS_L2C_M_INIT_REG[115] = {0742417664, 0756014035,0002747144,0066265724, // 1:4 0601403471, 0703232733, 0124510070, 0617316361, // 5:8 0047541621, 0733031046, 0713512145, 0024437606, 0021264003, 0230655351, 0001314400, 0222021506, 0540264026, 0205521705, 0064022144, 0120161274, 0044023533, 0724744327, 0045743577, 0741201660, 0700274134, 0010247261, 0713433445, 0737324162, 0311627434, 0710452007, 0722462133, 0050172213, 0500653703, 0755077436, 0136717361, 0756675453, 0435506112, 0771353753, 0226107701, 0022025110, 0402466344, 0752566114, 0702011164, 0041216771, 0047457275, 0266333164, 0713167356, 0060546335, 0355173035, 0617201036, 0157465571, 0767360553, 0023127030, 0431343777, 0747317317, 0045706125, 0002744276, 0060036467, 0217744147, 0603340174,//57:60 0326616775, 0063240065, 0111460621, //61:63 0604055104, 0157065232, 0013305707, 0603552017,//159:162 0230461355, 0603653437, 0652346475, 0743107103, 0401521277, 0167335110, 0014013575, 0362051132, 0617753265, 0216363634, 0755561123, 0365304033, 0625025543, 0054420334, 0415473671, 0662364360, 0373446602, 0417564100, 0000526452, 0226631300, 0113752074, 0706134401, 0041352546, 0664630154, 0276524255, 0714720530, 0714051771, 0044526647, 0207164322, 0262120161, 0204244652, 0202133131, 0714351204, 0657127260, 0130567507, 0670517677, 0607275514, 0045413633, 0212645405, 0613700455, 0706202440, 0705056276, 0020373522, 0746013617, 0132720621, 0434015513, 0566721727, 0140633660}; // CNAV GPS NAVIGATION MESSAGE STRUCTURE // NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200E Appendix III) #define GPS_CNAV_PREAMBLE {1, 0, 0, 0, 1, 0, 1, 1} const int GPS_L2_CNAV_DATA_PAGE_BITS = 300; //!< GPS L2 CNAV page length, including preamble and CRC [bits] const int GPS_L2_SYMBOLS_PER_BIT = 2; const int GPS_L2_SAMPLES_PER_SYMBOL = 1; const int GPS_L2_CNAV_DATA_PAGE_DURATION_S = 12; const int GPS_L2_CNAV_DATA_PAGE_BITS_EXTENDED_BYTES = 304; //!< GPS L2 CNAV page length, including preamble and CRC [bits] // common to all messages const std::vector > CNAV_PRN( { {9,6} } ); const std::vector > CNAV_MSG_TYPE( { {15,6} } ); const std::vector > CNAV_TOW( { {21,17} } ); //GPS Time Of Week in seconds const double CNAV_TOW_LSB = 6.0; const std::vector > CNAV_ALERT_FLAG( { {38,1} } ); // MESSAGE TYPE 10 (Ephemeris 1) const std::vector > CNAV_WN({{39,13}}); const std::vector > CNAV_HEALTH({{52,3}}); const std::vector > CNAV_TOP1({{55,11}}); const double CNAV_TOP1_LSB = 300.0; const std::vector > CNAV_URA({{66,5}}); const std::vector > CNAV_TOE1({{71,11}}); const double CNAV_TOE1_LSB = 300.0; const std::vector > CNAV_DELTA_A({{82,26}}); //Relative to AREF = 26,559,710 meters const double CNAV_DELTA_A_LSB = TWO_N9; const std::vector > CNAV_A_DOT({{108,25}}); const double CNAV_A_DOT_LSB = TWO_N21; const std::vector > CNAV_DELTA_N0({{133,17}}); const double CNAV_DELTA_N0_LSB = TWO_N44; const std::vector > CNAV_DELTA_N0_DOT({{150,23}}); const double CNAV_DELTA_N0_DOT_LSB = TWO_N57; const std::vector > CNAV_M0({{173,33}}); const double CNAV_M0_LSB = TWO_N32; const std::vector > CNAV_E_ECCENTRICITY({{206,33}}); const double CNAV_E_ECCENTRICITY_LSB = TWO_N34; const std::vector > CNAV_OMEGA({{239,33}}); const double CNAV_OMEGA_LSB = TWO_N32; const std::vector > CNAV_INTEGRITY_FLAG({{272,1}}); const std::vector > CNAV_L2_PHASING_FLAG({{273,1}}); // MESSAGE TYPE 11 (Ephemeris 2) const std::vector > CNAV_TOE2({{39,11}}); const double CNAV_TOE2_LSB = 300.0; const std::vector > CNAV_OMEGA0({{50,33}}); const double CNAV_OMEGA0_LSB = TWO_N32; const std::vector > CNAV_I0({{83,33}}); const double CNAV_I0_LSB = TWO_N32; const std::vector > CNAV_DELTA_OMEGA_DOT({{116,17}}); //Relative to REF = -2.6 x 10-9 semi-circles/second. const double CNAV_DELTA_OMEGA_DOT_LSB = TWO_N44; const std::vector > CNAV_I0_DOT({{133,15}}); const double CNAV_I0_DOT_LSB = TWO_N44; const std::vector > CNAV_CIS({{148,16}}); const double CNAV_CIS_LSB = TWO_N30; const std::vector > CNAV_CIC({{164,16}}); const double CNAV_CIC_LSB = TWO_N30; const std::vector > CNAV_CRS({{180,24}}); const double CNAV_CRS_LSB = TWO_N8; const std::vector > CNAV_CRC({{204,24}}); const double CNAV_CRC_LSB = TWO_N8; const std::vector > CNAV_CUS({{228,21}}); const double CNAV_CUS_LSB = TWO_N30; const std::vector > CNAV_CUC({{249,21}}); const double CNAV_CUC_LSB = TWO_N30; // MESSAGE TYPE 30 (CLOCK, IONO, GRUP DELAY) const std::vector > CNAV_TOP2({{39,11}}); const double CNAV_TOP2_LSB = 300.0; const std::vector > CNAV_URA_NED0({{50,5}}); const std::vector > CNAV_URA_NED1({{55,3}}); const std::vector > CNAV_URA_NED2({{58,3}}); const std::vector > CNAV_TOC({{61,11}}); const double CNAV_TOC_LSB = 300.0; const std::vector > CNAV_AF0({{72,26}}); const double CNAV_AF0_LSB = TWO_N60; const std::vector > CNAV_AF1({{98,20}}); const double CNAV_AF1_LSB = TWO_N48; const std::vector > CNAV_AF2({{118,10}}); const double CNAV_AF2_LSB = TWO_N35; const std::vector > CNAV_TGD({{128,13}}); const double CNAV_TGD_LSB = TWO_N35; const std::vector > CNAV_ISCL1({{141,13}}); const double CNAV_ISCL1_LSB = TWO_N35; const std::vector > CNAV_ISCL2({{154,13}}); const double CNAV_ISCL2_LSB = TWO_N35; const std::vector > CNAV_ISCL5I({{167,13}}); const double CNAV_ISCL5I_LSB = TWO_N35; const std::vector > CNAV_ISCL5Q({{180,13}}); const double CNAV_ISCL5Q_LSB = TWO_N35; //Ionospheric parameters const std::vector > CNAV_ALPHA0({{193,8}}); const double CNAV_ALPHA0_LSB = TWO_N30; const std::vector > CNAV_ALPHA1({{201,8}}); const double CNAV_ALPHA1_LSB = TWO_N27; const std::vector > CNAV_ALPHA2({{209,8}}); const double CNAV_ALPHA2_LSB = TWO_N24; const std::vector > CNAV_ALPHA3({{217,8}}); const double CNAV_ALPHA3_LSB = TWO_N24; const std::vector > CNAV_BETA0({{225,8}}); const double CNAV_BETA0_LSB = TWO_P11; const std::vector > CNAV_BETA1({{233,8}}); const double CNAV_BETA1_LSB = TWO_P14; const std::vector > CNAV_BETA2({{241,8}}); const double CNAV_BETA2_LSB = TWO_P16; const std::vector > CNAV_BETA3({{249,8}}); const double CNAV_BETA3_LSB = TWO_P16; const std::vector > CNAV_WNOP({{257,8}}); // TODO: Add more frames (Almanac, etc...) #endif /* GNSS_SDR_GPS_L2C_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gnss_signal.h0000644000175000017500000000412412576764164022552 0ustar carlescarles/*! * \file gnss_signal.h * \brief Implementation of the Gnss_Signal class * \author * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2012. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_SIGNAL_H_ #define GNSS_SDR_GNSS_SIGNAL_H_ #include "gnss_satellite.h" #include /*! * \brief This class represents a GNSS signal. * * It contains information about the space vehicle and the specific signal. */ class Gnss_Signal { private: Gnss_Satellite satellite; std::string signal; public: Gnss_Signal(); Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_); ~Gnss_Signal(); std::string get_signal_str() const; //!< Get the satellite signal {"1C" for GPS L1 C/A, "2S" for GPS L2C (M), "1B" for Galileo E1B, "5X" for Galileo E5a} Gnss_Satellite get_satellite() const; //!< Get the Gnss_Satellite associated to the signal friend bool operator== (const Gnss_Signal &, const Gnss_Signal &); //!< operator== for comparison friend std::ostream& operator<<(std::ostream &, const Gnss_Signal &); //!< operator<< for pretty printing }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_ref_time.h0000644000175000017500000000412212576764164022704 0ustar carlescarles/*! * \file gps_ref_time.h * \brief Interface of a GPS REFERENCE TIME storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_REF_TIME_H_ #define GNSS_SDR_GPS_REF_TIME_H_ #include "GPS_L1_CA.h" #include "boost/assign.hpp" #include /*! * \brief Interface of a GPS REFERENCE TIME storage * */ class Gps_Ref_Time { public: bool valid; double d_TOW; double d_Week; double d_tv_sec; double d_tv_usec; /*! * Default constructor */ Gps_Ref_Time(); template /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ref time data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("valid", valid); archive & make_nvp("d_TOW", d_TOW); archive & make_nvp("d_Week", d_Week); archive & make_nvp("d_tv_sec", d_tv_sec); archive & make_nvp("d_tv_usec", d_tv_usec); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_navigation_message.h0000644000175000017500000003035412576764164024763 0ustar carlescarles/*! * \file gps_navigation_message.h * \brief Interface of a GPS NAV Data message decoder * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_NAVIGATION_MESSAGE_H_ #define GNSS_SDR_GPS_NAVIGATION_MESSAGE_H_ #include #include #include #include #include #include #include #include #include "boost/assign.hpp" #include "GPS_L1_CA.h" #include "gps_ephemeris.h" #include "gps_iono.h" #include "gps_almanac.h" #include "gps_utc_model.h" #include "GPS_L1_CA.h" /*! * \brief This class decodes a GPS NAV Data message as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_Navigation_Message { private: unsigned long int read_navigation_unsigned(std::bitset bits, const std::vector> parameter); signed long int read_navigation_signed(std::bitset bits, const std::vector> parameter); bool read_navigation_bool(std::bitset bits, const std::vector> parameter); void print_gps_word_bytes(unsigned int GPS_word); /* * Accounts for the beginning or end of week crossover * * See paragraph 20.3.3.3.3.1 (IS-GPS-200E) * \param[in] - time in seconds * \param[out] - corrected time, in seconds */ double check_t(double time); public: bool b_valid_ephemeris_set_flag; // flag indicating that this ephemeris set have passed the validation check //broadcast orbit 1 double d_TOW; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] double d_TOW_SF1; //!< Time of GPS Week from HOW word of Subframe 1 [s] double d_TOW_SF2; //!< Time of GPS Week from HOW word of Subframe 2 [s] double d_TOW_SF3; //!< Time of GPS Week from HOW word of Subframe 3 [s] double d_TOW_SF4; //!< Time of GPS Week from HOW word of Subframe 4 [s] double d_TOW_SF5; //!< Time of GPS Week from HOW word of Subframe 5 [s] double d_IODE_SF2; double d_IODE_SF3; double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] //broadcast orbit 2 double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_e_eccentricity; //!< Eccentricity [dimensionless] double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)] //broadcast orbit 3 double d_Toe; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] double d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] double d_Cis; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] //broadcast orbit 4 double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] //broadcast orbit 5 double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] int i_code_on_L2; //!< If 1, P code ON in L2; if 2, C/A code ON in L2; int i_GPS_week; //!< GPS week number, aka WN [week] bool b_L2_P_data_flag; //!< When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel //broadcast orbit 6 int i_SV_accuracy; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200E) int i_SV_health; double d_TGD; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] double d_IODC; //!< Issue of Data, Clock //broadcast orbit 7 int i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] bool b_fit_interval_flag;//!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. double d_spare1; double d_spare2; double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] // Almanac double d_Toa; //!< Almanac reference time [s] int i_WN_A; //!< Modulo 256 of the GPS week number to which the almanac reference time (d_Toa) is referenced std::map almanacHealth; //!< Map that stores the health information stored in the almanac std::map satelliteBlock; //!< Map that stores to which block the PRN belongs http://www.navcen.uscg.gov/?Do=constellationStatus // Flags /*! \brief If true, enhanced level of integrity assurance. * * If false, indicates that the conveying signal is provided with the legacy level of integrity assurance. * That is, the probability that the instantaneous URE of the conveying signal exceeds 4.42 times the upper bound * value of the current broadcast URA index, for more than 5.2 seconds, without an accompanying alert, is less * than 1E-5 per hour. If true, indicates that the conveying signal is provided with an enhanced level of * integrity assurance. That is, the probability that the instantaneous URE of the conveying signal exceeds 5.73 * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * accompanying alert, is less than 1E-8 per hour. */ bool b_integrity_status_flag; bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV // clock terms //double d_master_clock; // GPS transmission time double d_satClkCorr; // GPS clock error double d_dtr; // relativistic clock correction term double d_satClkDrift; // satellite positions double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). // satellite identification info int i_channel_ID; unsigned int i_satellite_PRN; // time synchro double d_subframe_timestamp_ms; //[ms] // Ionospheric parameters bool flag_iono_valid; //!< If set, it indicates that the ionospheric parameters are filled (page 18 has arrived and decoded) double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s] double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle] double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2] double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3] double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s] double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle] double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2] double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3] // UTC parameters bool flag_utc_model_valid; //!< If set, it indicates that the UTC model parameters are filled double d_A1; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s/s] double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s] double d_t_OT; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200E) [s] int i_WN_T; //!< UTC reference week number [weeks] double d_DeltaT_LS; //!< delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac. int i_WN_LSF; //!< Week number at the end of which the leap second becomes effective [weeks] int i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days] double d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s] // Satellite velocity double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] // public functions void reset(); /*! * \brief Obtain a GPS SV Ephemeris class filled with current SV data */ Gps_Ephemeris get_ephemeris(); /*! * \brief Obtain a GPS ionospheric correction parameters class filled with current SV data */ Gps_Iono get_iono(); /*! * \brief Obtain a GPS UTC model parameters class filled with current SV data */ Gps_Utc_Model get_utc_model(); /*! * \brief Decodes the GPS NAV message */ int subframe_decoder(char *subframe); /*! * \brief Computes the position of the satellite * * Implementation of Table 20-IV (IS-GPS-200E) */ void satellitePosition(double transmitTime); /*! * \brief Sets (\a d_satClkCorr) according to the User Algorithm for SV Clock Correction * and returns the corrected clock (IS-GPS-200E, 20.3.3.3.3.1) */ double sv_clock_correction(double transmitTime); /*! * \brief Computes the Coordinated Universal Time (UTC) and * returns it in [s] (IS-GPS-200E, 20.3.3.5.2.4) */ double utc_time(const double gpstime_corrected) const; bool satellite_validation(); /*! * Default constructor */ Gps_Navigation_Message(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/galileo_fnav_message.cc0000644000175000017500000007522512576764164024545 0ustar carlescarles/*! * \file galileo_fnav_message.h * \brief Implementation of a Galileo F/NAV Data message * as described in Galileo OS SIS ICD Issue 1.1 (Sept. 2010) * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_fnav_message.h" #include #include // for boost::crc_basic, boost::crc_optimal #include #include #include #include #include typedef boost::crc_optimal<24, 0x1864CFBu, 0x0, 0x0, false, false> CRC_Galileo_FNAV_type; void Galileo_Fnav_Message::reset() { flag_CRC_test = false; flag_all_ephemeris = false; //!< Flag indicating that all words containing ephemeris have been received flag_ephemeris_1 = false; //!< Flag indicating that ephemeris 1/3 (word 2) have been received flag_ephemeris_2 = false; //!< Flag indicating that ephemeris 2/3 (word 3) have been received flag_ephemeris_3 = false; //!< Flag indicating that ephemeris 3/3 (word 4) have been received flag_iono_and_GST = false; //!< Flag indicating that ionospheric and GST parameters (word 1) have been received flag_TOW_1 = false; flag_TOW_2 = false; flag_TOW_3 = false; flag_TOW_4 = false; flag_TOW_set = false; //!< it is true when page 1,2,3 or 4 arrives flag_utc_model = false; //!< Flag indicating that utc model parameters (word 4) have been received flag_all_almanac = false; //!< Flag indicating that all almanac have been received flag_almanac_1 = false; //!< Flag indicating that almanac 1/2 (word 5) have been received flag_almanac_2 = false; //!< Flag indicating that almanac 2/2 (word 6) have been received IOD_ephemeris = 0; page_type = 0; /* WORD 1 SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal * health and Data validity status*/ FNAV_SV_ID_PRN_1 = 0; FNAV_IODnav_1 = 0; FNAV_t0c_1 = 0; FNAV_af0_1 = 0; FNAV_af1_1 = 0; FNAV_af2_1 = 0; FNAV_SISA_1 = 0; FNAV_ai0_1 = 0; FNAV_ai1_1 = 0; FNAV_ai2_1 = 0; FNAV_region1_1 = 0; FNAV_region2_1 = 0; FNAV_region3_1 = 0; FNAV_region4_1 = 0; FNAV_region5_1 = 0; FNAV_BGD_1 = 0; FNAV_E5ahs_1 = 0; FNAV_WN_1 = 0; FNAV_TOW_1 = 0; FNAV_E5advs_1 = 0; // WORD 2 Ephemeris (1/3) and GST FNAV_IODnav_2 = 0; FNAV_M0_2 = 0; FNAV_omegadot_2 = 0; FNAV_e_2 = 0; FNAV_a12_2 = 0; FNAV_omega0_2 = 0; FNAV_idot_2 = 0; FNAV_WN_2 = 0; FNAV_TOW_2 = 0; // WORD 3 Ephemeris (2/3) and GST FNAV_IODnav_3 = 0; FNAV_i0_3 = 0; FNAV_w_3 = 0; FNAV_deltan_3 = 0; FNAV_Cuc_3 = 0; FNAV_Cus_3 = 0; FNAV_Crc_3 = 0; FNAV_Crs_3 = 0; FNAV_t0e_3 = 0; FNAV_WN_3 = 0; FNAV_TOW_3 = 0; /* WORD 4 Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW. Note that the clock is repeated in this page type*/ FNAV_IODnav_4 = 0; FNAV_Cic_4 = 0; FNAV_Cis_4 = 0; FNAV_A0_4 = 0; FNAV_A1_4 = 0; FNAV_deltatls_4 = 0; FNAV_t0t_4 = 0; FNAV_WNot_4 = 0; FNAV_WNlsf_4 = 0; FNAV_DN_4 = 0; FNAV_deltatlsf_4 = 0; FNAV_t0g_4 = 0; FNAV_A0g_4 = 0; FNAV_A1g_4 = 0; FNAV_WN0g_4 = 0; FNAV_TOW_4 = 0; // WORD 5 Almanac (SVID1 and SVID2(1/2)), Week Number and almanac reference time FNAV_IODa_5 = 0; FNAV_WNa_5 = 0; FNAV_t0a_5 = 0; FNAV_SVID1_5 = 0; FNAV_Deltaa12_1_5 = 0; FNAV_e_1_5 = 0; FNAV_w_1_5 = 0; FNAV_deltai_1_5 = 0; FNAV_Omega0_1_5 = 0; FNAV_Omegadot_1_5 = 0; FNAV_M0_1_5 = 0; FNAV_af0_1_5 = 0; FNAV_af1_1_5 = 0; FNAV_E5ahs_1_5 = 0; FNAV_SVID2_5 = 0; FNAV_Deltaa12_2_5 = 0; FNAV_e_2_5 = 0; FNAV_w_2_5 = 0; FNAV_deltai_2_5 = 0; // WORD 6 Almanac (SVID2(2/2) and SVID3) FNAV_IODa_6 = 0; FNAV_Omega0_2_6 = 0; FNAV_Omegadot_2_6 = 0; FNAV_M0_2_6 = 0; FNAV_af0_2_6 = 0; FNAV_af1_2_6 = 0; FNAV_E5ahs_2_6 = 0; FNAV_SVID3_6 = 0; FNAV_Deltaa12_3_6 = 0; FNAV_e_3_6 = 0; FNAV_w_3_6 = 0; FNAV_deltai_3_6 = 0; FNAV_Omega0_3_6 = 0; FNAV_Omegadot_3_6 = 0; FNAV_M0_3_6 = 0; FNAV_af0_3_6 = 0; FNAV_af1_3_6 = 0; FNAV_E5ahs_3_6 = 0; } Galileo_Fnav_Message::Galileo_Fnav_Message() { reset(); } //int Galileo_Fnav_Message::toInt(std::string bitString) //{ // int tempInt; // int num=0; // int sLength = bitString.length(); // for(int i=0; i Word_for_CRC_bits(message_word); std::bitset<24> checksum(CRC_data); if (_CRC_test(Word_for_CRC_bits, checksum.to_ulong()) == true) { flag_CRC_test = true; // CRC correct: Decode word decode_page(message_word); } else { flag_CRC_test = false; } } bool Galileo_Fnav_Message::_CRC_test(std::bitset bits, boost::uint32_t checksum) { CRC_Galileo_FNAV_type CRC_Galileo; boost::uint32_t crc_computed; // Galileo FNAV frame for CRC is not an integer multiple of bytes // it needs to be filled with zeroes at the start of the frame. // This operation is done in the transformation from bits to bytes // using boost::dynamic_bitset. // ToDo: Use boost::dynamic_bitset for all the bitset operations in this class boost::dynamic_bitset frame_bits(std::string(bits.to_string())); std::vector bytes; boost::to_block_range(frame_bits, std::back_inserter(bytes)); std::reverse(bytes.begin(), bytes.end()); CRC_Galileo.process_bytes( bytes.data(), GALILEO_FNAV_DATA_FRAME_BYTES ); crc_computed = CRC_Galileo.checksum(); if (checksum == crc_computed) { return true; } else { return false; } } void Galileo_Fnav_Message::decode_page(std::string data) { std::bitset data_bits(data); page_type = read_navigation_unsigned(data_bits, FNAV_PAGE_TYPE_bit); switch(page_type) { case 1: // SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal health and Data validity status FNAV_SV_ID_PRN_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_SV_ID_PRN_1_bit)); FNAV_IODnav_1 =static_cast(read_navigation_unsigned(data_bits, FNAV_IODnav_1_bit)); FNAV_t0c_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_t0c_1_bit)); FNAV_t0c_1 *= FNAV_t0c_1_LSB; FNAV_af0_1 = static_cast(read_navigation_signed(data_bits, FNAV_af0_1_bit)); FNAV_af0_1 *= FNAV_af0_1_LSB; FNAV_af1_1 = static_cast(read_navigation_signed(data_bits, FNAV_af1_1_bit)); FNAV_af1_1 *= FNAV_af1_1_LSB; FNAV_af2_1 = static_cast(read_navigation_signed(data_bits, FNAV_af2_1_bit)); FNAV_af2_1 *= FNAV_af2_1_LSB; FNAV_SISA_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_SISA_1_bit)); FNAV_ai0_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_ai0_1_bit)); FNAV_ai0_1 *= FNAV_ai0_1_LSB; FNAV_ai1_1 = static_cast(read_navigation_signed(data_bits, FNAV_ai1_1_bit)); FNAV_ai1_1 *= FNAV_ai1_1_LSB; FNAV_ai2_1 = static_cast(read_navigation_signed(data_bits, FNAV_ai2_1_bit)); FNAV_ai2_1 *= FNAV_ai2_1_LSB; FNAV_region1_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_region1_1_bit)); FNAV_region2_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_region2_1_bit)); FNAV_region3_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_region3_1_bit)); FNAV_region4_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_region4_1_bit)); FNAV_region5_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_region5_1_bit)); FNAV_BGD_1 = static_cast(read_navigation_signed(data_bits, FNAV_BGD_1_bit)); FNAV_BGD_1 *= FNAV_BGD_1_LSB; FNAV_E5ahs_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_E5ahs_1_bit)); FNAV_WN_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_WN_1_bit)); FNAV_TOW_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_TOW_1_bit)); FNAV_E5advs_1 = static_cast(read_navigation_unsigned(data_bits, FNAV_E5advs_1_bit)); flag_TOW_1 = true; flag_TOW_set = true; flag_iono_and_GST = true; //set to false externally break; case 2: // Ephemeris (1/3) and GST FNAV_IODnav_2 = static_cast(read_navigation_unsigned(data_bits, FNAV_IODnav_2_bit)); FNAV_M0_2 = static_cast(read_navigation_unsigned(data_bits, FNAV_M0_2_bit)); FNAV_M0_2 *= FNAV_M0_2_LSB; FNAV_omegadot_2 = static_cast(read_navigation_signed(data_bits, FNAV_omegadot_2_bit)); FNAV_omegadot_2 *= FNAV_omegadot_2_LSB; FNAV_e_2 = static_cast(read_navigation_unsigned(data_bits, FNAV_e_2_bit)); FNAV_e_2 *= FNAV_e_2_LSB; FNAV_a12_2 = static_cast(read_navigation_unsigned(data_bits, FNAV_a12_2_bit)); FNAV_a12_2 *= FNAV_a12_2_LSB; FNAV_omega0_2 = static_cast(read_navigation_signed(data_bits, FNAV_omega0_2_bit)); FNAV_omega0_2 *= FNAV_omega0_2_LSB; FNAV_idot_2 = static_cast(read_navigation_signed(data_bits, FNAV_idot_2_bit)); FNAV_idot_2 *= FNAV_idot_2_LSB; FNAV_WN_2 = static_cast(read_navigation_unsigned(data_bits, FNAV_WN_2_bit)); FNAV_TOW_2 = static_cast(read_navigation_unsigned(data_bits, FNAV_TOW_2_bit)); flag_TOW_2 = true; flag_TOW_set = true; flag_ephemeris_1 = true; break; case 3: // Ephemeris (2/3) and GST FNAV_IODnav_3 = static_cast(read_navigation_unsigned(data_bits, FNAV_IODnav_3_bit)); FNAV_i0_3 = static_cast(read_navigation_signed(data_bits, FNAV_i0_3_bit)); FNAV_i0_3 *= FNAV_i0_3_LSB; FNAV_w_3=static_cast(read_navigation_signed(data_bits, FNAV_w_3_bit)); FNAV_w_3 *= FNAV_w_3_LSB; FNAV_deltan_3 = static_cast(read_navigation_unsigned(data_bits, FNAV_deltan_3_bit)); FNAV_deltan_3 *= FNAV_deltan_3_LSB; FNAV_Cuc_3 = static_cast(read_navigation_signed(data_bits, FNAV_Cuc_3_bit)); FNAV_Cuc_3 *= FNAV_Cuc_3_LSB; FNAV_Cus_3 = static_cast(read_navigation_signed(data_bits, FNAV_Cus_3_bit)); FNAV_Cus_3 *= FNAV_Cus_3_LSB; FNAV_Crc_3 = static_cast(read_navigation_signed(data_bits, FNAV_Crc_3_bit)); FNAV_Crc_3 *= FNAV_Crc_3_LSB; FNAV_Crs_3 = static_cast(read_navigation_signed(data_bits, FNAV_Crs_3_bit)); FNAV_Crs_3 *= FNAV_Crs_3_LSB; FNAV_t0e_3 = static_cast(read_navigation_unsigned(data_bits, FNAV_t0e_3_bit)); FNAV_t0e_3 *= FNAV_t0e_3_LSB; FNAV_WN_3 = static_cast(read_navigation_unsigned(data_bits, FNAV_WN_3_bit)); FNAV_TOW_3 = static_cast(read_navigation_unsigned(data_bits, FNAV_TOW_3_bit)); flag_TOW_3 = true; flag_TOW_set = true; flag_ephemeris_2 = true; break; case 4: // Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW FNAV_IODnav_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_IODnav_4_bit)); FNAV_Cic_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_Cic_4_bit)); FNAV_Cic_4 *= FNAV_Cic_4_LSB; FNAV_Cis_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_Cis_4_bit)); FNAV_Cis_4 *= FNAV_Cis_4_LSB; FNAV_A0_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_A0_4_bit)); FNAV_A0_4 *= FNAV_A0_4_LSB; FNAV_A1_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_A1_4_bit)); FNAV_A1_4 *= FNAV_A1_4_LSB; FNAV_deltatls_4 = static_cast(read_navigation_signed(data_bits, FNAV_deltatls_4_bit)); FNAV_t0t_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_t0t_4_bit)); FNAV_t0t_4 *= FNAV_t0t_4_LSB; FNAV_WNot_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_WNot_4_bit)); FNAV_WNlsf_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_WNlsf_4_bit)); FNAV_DN_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_DN_4_bit)); FNAV_deltatlsf_4 = static_cast(read_navigation_signed(data_bits, FNAV_deltatlsf_4_bit)); FNAV_t0g_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_t0g_4_bit)); FNAV_t0g_4 *= FNAV_t0g_4_LSB; FNAV_A0g_4 = static_cast(read_navigation_signed(data_bits, FNAV_A0g_4_bit)); FNAV_A0g_4 *= FNAV_A0g_4_LSB; FNAV_A1g_4 = static_cast(read_navigation_signed(data_bits, FNAV_A1g_4_bit)); FNAV_A1g_4 *= FNAV_A1g_4_LSB; FNAV_WN0g_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_WN0g_4_bit)); FNAV_TOW_4 = static_cast(read_navigation_unsigned(data_bits, FNAV_TOW_4_bit)); flag_TOW_4 = true; flag_TOW_set = true; flag_ephemeris_3 = true; flag_utc_model = true; //set to false externally break; case 5: // Almanac (SVID1 and SVID2(1/2)), Week Number and almanac reference time FNAV_IODa_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_IODa_5_bit)); FNAV_WNa_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_WNa_5_bit)); FNAV_t0a_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_t0a_5_bit)); FNAV_t0a_5 *= FNAV_t0a_5_LSB; FNAV_SVID1_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_SVID1_5_bit)); FNAV_Deltaa12_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_Deltaa12_1_5_bit)); FNAV_Deltaa12_1_5 *= FNAV_Deltaa12_5_LSB; FNAV_e_1_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_e_1_5_bit)); FNAV_e_1_5 *= FNAV_e_5_LSB; FNAV_w_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_w_1_5_bit)); FNAV_w_1_5 *= FNAV_w_5_LSB; FNAV_deltai_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_deltai_1_5_bit)); FNAV_deltai_1_5 *= FNAV_deltai_5_LSB; FNAV_Omega0_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_Omega0_1_5_bit)); FNAV_Omega0_1_5 *= FNAV_Omega0_5_LSB; FNAV_Omegadot_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_Omegadot_1_5_bit)); FNAV_Omegadot_1_5 *= FNAV_Omegadot_5_LSB; FNAV_M0_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_M0_1_5_bit)); FNAV_M0_1_5 *= FNAV_M0_5_LSB; FNAV_af0_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_af0_1_5_bit)); FNAV_af0_1_5 *= FNAV_af0_5_LSB; FNAV_af1_1_5 = static_cast(read_navigation_signed(data_bits, FNAV_af1_1_5_bit)); FNAV_af1_1_5 *= FNAV_af1_5_LSB; FNAV_E5ahs_1_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_E5ahs_1_5_bit)); FNAV_SVID2_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_SVID2_5_bit)); FNAV_Deltaa12_2_5 = static_cast(read_navigation_signed(data_bits, FNAV_Deltaa12_2_5_bit)); FNAV_Deltaa12_2_5 *= FNAV_Deltaa12_5_LSB; FNAV_e_2_5 = static_cast(read_navigation_unsigned(data_bits, FNAV_e_2_5_bit)); FNAV_e_2_5 *= FNAV_e_5_LSB; FNAV_w_2_5 = static_cast(read_navigation_signed(data_bits, FNAV_w_2_5_bit)); FNAV_w_2_5 *= FNAV_w_5_LSB; FNAV_deltai_2_5 = static_cast(read_navigation_signed(data_bits, FNAV_deltai_2_5_bit)); FNAV_deltai_2_5 *= FNAV_deltai_5_LSB; //TODO check this // Omega0_2 must be decoded when the two pieces are joined omega0_1 = data.substr(210, 4); //omega_flag=true; // //FNAV_Omega012_2_5=static_cast(read_navigation_signed(data_bits, FNAV_Omega012_2_5_bit); flag_almanac_1 = true; break; case 6: // Almanac (SVID2(2/2) and SVID3) FNAV_IODa_6 = static_cast(read_navigation_unsigned(data_bits, FNAV_IODa_6_bit)); /* Don't worry about omega pieces. If page 5 has not been received, all_ephemeris * flag will be set to false and the data won't be recorded.*/ std::string omega0_2 = data.substr(10, 12); std::string Omega0 = omega0_1 + omega0_2; std::bitset omega_bits(Omega0); const std::vector> om_bit({{0, 12}}); FNAV_Omega0_2_6 = static_cast(read_navigation_signed(omega_bits, om_bit)); FNAV_Omega0_2_6 *= FNAV_Omega0_5_LSB; // FNAV_Omegadot_2_6 = static_cast(read_navigation_signed(data_bits, FNAV_Omegadot_2_6_bit)); FNAV_Omegadot_2_6 *= FNAV_Omegadot_5_LSB; FNAV_M0_2_6 = static_cast(read_navigation_signed(data_bits, FNAV_M0_2_6_bit)); FNAV_M0_2_6 *= FNAV_M0_5_LSB; FNAV_af0_2_6 = static_cast(read_navigation_signed(data_bits, FNAV_af0_2_6_bit)); FNAV_af0_2_6 *= FNAV_af0_5_LSB; FNAV_af1_2_6 = static_cast(read_navigation_signed(data_bits, FNAV_af1_2_6_bit)); FNAV_af1_2_6 *= FNAV_af1_5_LSB; FNAV_E5ahs_2_6 = static_cast(read_navigation_unsigned(data_bits, FNAV_E5ahs_2_6_bit)); FNAV_SVID3_6 = static_cast(read_navigation_unsigned(data_bits, FNAV_SVID3_6_bit)); FNAV_Deltaa12_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_Deltaa12_3_6_bit)); FNAV_Deltaa12_3_6 *= FNAV_Deltaa12_5_LSB; FNAV_e_3_6 = static_cast(read_navigation_unsigned(data_bits, FNAV_e_3_6_bit)); FNAV_e_3_6 *= FNAV_e_5_LSB; FNAV_w_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_w_3_6_bit)); FNAV_w_3_6 *= FNAV_w_5_LSB; FNAV_deltai_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_deltai_3_6_bit)); FNAV_deltai_3_6 *= FNAV_deltai_5_LSB; FNAV_Omega0_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_Omega0_3_6_bit)); FNAV_Omega0_3_6 *= FNAV_Omega0_5_LSB; FNAV_Omegadot_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_Omegadot_3_6_bit)); FNAV_Omegadot_3_6 *= FNAV_Omegadot_5_LSB; FNAV_M0_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_M0_3_6_bit)); FNAV_M0_3_6 *= FNAV_M0_5_LSB; FNAV_af0_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_af0_3_6_bit)); FNAV_af0_3_6 *= FNAV_af0_5_LSB; FNAV_af1_3_6 = static_cast(read_navigation_signed(data_bits, FNAV_af1_3_6_bit)); FNAV_af1_3_6 *= FNAV_af1_5_LSB; FNAV_E5ahs_3_6 = static_cast(read_navigation_unsigned(data_bits, FNAV_E5ahs_3_6_bit)); flag_almanac_2 = true; break; } } unsigned long int Galileo_Fnav_Message::read_navigation_unsigned(std::bitset bits, const std::vector> parameter) { unsigned long int value = 0; int num_of_slices = parameter.size(); for (int i=0; i bits, const std::vector> parameter) { signed long int value = 0; int num_of_slices = parameter.size(); // Discriminate between 64 bits and 32 bits compiler int long_int_size_bytes = sizeof(signed long int); if (long_int_size_bytes == 8) // if a long int takes 8 bytes, we are in a 64 bits system { // read the MSB and perform the sign extension if (bits[GALILEO_FNAV_DATA_FRAME_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFFFFFFFFFF; //64 bits variable } else { value &= 0; } for (int i=0; i. * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_ALMANAC_H_ #define GNSS_SDR_GALILEO_ALMANAC_H_ /*! * \brief This class is a storage for the GALILEO ALMANAC data as described in GALILEO ICD * * See http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf paragraph 5.1.10 */ class Galileo_Almanac { public: /*Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number*/ int IOD_a_7; double WN_a_7; double t0a_7; int SVID1_7; double DELTA_A_7; double e_7; double omega_7; double delta_i_7; double Omega0_7; double Omega_dot_7; double M0_7; /*Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)*/ int IOD_a_8; double af0_8; double af1_8; double E5b_HS_8; double E1B_HS_8; double E5a_HS_8; int SVID2_8; double DELTA_A_8; double e_8; double omega_8; double delta_i_8; double Omega0_8; double Omega_dot_8; /*Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)*/ int IOD_a_9; double WN_a_9; double t0a_9; double M0_9; double af0_9; double af1_9; double E5b_HS_9; double E1B_HS_9; double E5a_HS_9; int SVID3_9; double DELTA_A_9; double e_9; double omega_9; double delta_i_9; /*Word type 10: Almanac for SVID3 (2/2)*/ int IOD_a_10; double Omega0_10; double Omega_dot_10; double M0_10; double af0_10; double af1_10; double E5b_HS_10; double E1B_HS_10; double E5a_HS_10; /*GPS to Galileo GST conversion parameters*/ double A_0G_10; double A_1G_10; double t_0G_10; double WN_0G_10; Galileo_Almanac(); //!< Default constructor }; #endif gnss-sdr-0.0.6/src/core/system_parameters/sbas_ephemeris.h0000644000175000017500000000400012576764164023225 0ustar carlescarles/*! * \file sbas_ephemeris.h * \brief Interface of a SBAS REFERENCE LOCATION storage * \author Daniel Fehr, 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SBAS_EPHEMERIS_H_ #define GNSS_SDR_SBAS_EPHEMERIS_H_ /*! * \brief This class stores SBAS SV ephemeris data * */ class Sbas_Ephemeris { public: void print(std::ostream &out); int i_prn; //!< PRN number //gtime_t t0; // reference epoch time (GPST) int i_t0; //gtime_t tof; // time of message frame (GPST) double d_tof; int i_sv_ura; //!< SV accuracy (URA index), not standardized bool b_sv_do_not_use; //!< Health status (false:do not use / true:usable) double d_pos[3]; //!< Satellite position (m) (ECEF) double d_vel[3]; //!< Satellite velocity (m/s) (ECEF) double d_acc[3]; //!< Satellite acceleration (m/s^2) (ECEF) double d_af0; //!< Satellite clock-offset (s) double d_af1; //!< Satellite drift (s/s) }; #endif /* GNSS_SDR_SBAS_EPHEMERIS_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/CMakeLists.txt0000644000175000017500000000351112576764164022631 0ustar carlescarles# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # set(SYSTEM_PARAMETERS_SOURCES gnss_satellite.cc gnss_signal.cc gps_navigation_message.cc gps_ephemeris.cc gps_iono.cc gps_almanac.cc gps_utc_model.cc gps_acq_assist.cc gps_ref_time.cc gps_ref_location.cc galileo_utc_model.cc galileo_ephemeris.cc galileo_almanac.cc galileo_iono.cc galileo_navigation_message.cc sbas_ephemeris.cc sbas_ionospheric_correction.cc sbas_satellite_correction.cc sbas_telemetry_data.cc galileo_fnav_message.cc gps_cnav_ephemeris.cc gps_cnav_navigation_message.cc gps_cnav_iono.cc gps_cnav_utc_model.cc ) include_directories( $(CMAKE_CURRENT_SOURCE_DIR) ${CMAKE_SOURCE_DIR}/src/core/receiver ${GLOG_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ) link_directories(${Boost_LIBRARY_DIR}) file(GLOB SYSTEM_PARAMETERS_HEADERS "*.h") add_library(gnss_system_parameters ${SYSTEM_PARAMETERS_SOURCES} ${SYSTEM_PARAMETERS_HEADERS}) source_group(Headers FILES ${SYSTEM_PARAMETERS_HEADERS}) add_dependencies(gnss_system_parameters glog-${glog_RELEASE}) target_link_libraries(gnss_system_parameters ${Boost_LIBRARIES}) gnss-sdr-0.0.6/src/core/system_parameters/gnss_signal.cc0000644000175000017500000000412112576764164022705 0ustar carlescarles/*! * \file gnss_satellite.cc * \brief Implementation of the Gnss_Signal class * \author * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2012. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_signal.h" Gnss_Signal::Gnss_Signal() { this->signal = ""; } Gnss_Signal::Gnss_Signal(const Gnss_Satellite& satellite_, const std::string& signal_) { this->satellite = satellite_; this->signal = signal_; } Gnss_Signal::~Gnss_Signal() {} std::string Gnss_Signal::get_signal_str() const { return this->signal; } Gnss_Satellite Gnss_Signal::get_satellite() const { return this->satellite; } std::ostream& operator<<(std::ostream &out, const Gnss_Signal &sig) // output { out << sig.get_satellite() << " Signal " << sig.get_signal_str(); return out; } bool operator==(const Gnss_Signal &sig1, const Gnss_Signal &sig2) { bool equal = false; if (sig1.get_satellite() == sig2.get_satellite()) { if (sig1.get_signal_str().compare(sig1.get_signal_str())) { equal = true; } } return equal; } gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_iono.cc0000644000175000017500000000267012576764164023231 0ustar carlescarles/*! * \file gps_cnav_iono.cc * \brief Interface of a GPS CNAV IONOSPHERIC MODEL storage * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_cnav_iono.h" Gps_CNAV_Iono::Gps_CNAV_Iono() { valid = false; d_alpha0 = 0.0; d_alpha1 = 0.0; d_alpha2 = 0.0; d_alpha3 = 0.0; d_beta0 = 0.0; d_beta1 = 0.0; d_beta2 = 0.0; d_beta3 = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/gnss_satellite.cc0000644000175000017500000003763712576764164023440 0ustar carlescarles/*! * \file gnss_satellite.cc * \brief Implementation of the Gnss_Satellite class * \author Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gnss_satellite.h" #include Gnss_Satellite::Gnss_Satellite() { Gnss_Satellite::reset(); } Gnss_Satellite::Gnss_Satellite(const std::string& system_, unsigned int PRN_) { Gnss_Satellite::reset(); Gnss_Satellite::set_system(system_); Gnss_Satellite::set_PRN(PRN_); Gnss_Satellite::set_block(system_, PRN_); } Gnss_Satellite::~Gnss_Satellite() {} void Gnss_Satellite::reset() { system_set = {"GPS", "GLONASS", "SBAS", "Galileo", "Beidou"}; satelliteSystem["GPS"] = "G"; satelliteSystem["GLONASS"] = "R"; satelliteSystem["SBAS"] = "S"; satelliteSystem["Galileo"] = "E"; satelliteSystem["Beidou"] = "C"; PRN = 0; system = std::string(""); block = std::string(""); rf_link = 0; } std::ostream& operator<<(std::ostream &out, const Gnss_Satellite &sat) // output { //std::string psystem = sat::get_system() out << sat.get_system() << " PRN " << sat.get_PRN() << " (Block " << sat.get_block() << ")"; return out; } bool operator== (const Gnss_Satellite &sat1, const Gnss_Satellite &sat2) { bool equal = false; if (sat1.get_system().compare(sat2.get_system()) == 0) { if (sat1.get_PRN() == (sat2.get_PRN())) { equal = true; } } return equal; } /* Gnss_Satellite& Gnss_Satellite::operator=(const Gnss_Satellite &rhs) { // Only do assignment if RHS is a different object from this. if (this != &rhs) { // Deallocate, allocate new space, copy values... const std::string system_ = rhs.get_system(); const unsigned int PRN_ = rhs.get_PRN(); const std::string block_ = rhs.get_block(); // const signed int rf_link_ = 0; this->set_system(system_); this->set_PRN(PRN_); this->set_block(system_, PRN_); //this.rf_link = rf_link_; } return *this; }*/ void Gnss_Satellite::set_system(const std::string& system_) { // Set the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"} std::set::iterator it = system_set.find(system_); if(it != system_set.end()) { system = system_; } else { DLOG(INFO) << "System " << system_ << " is not defined {GPS, GLONASS, SBAS, Galileo, Beidou}. Initialization?"; system = std::string(""); } } void Gnss_Satellite::set_PRN(unsigned int PRN_) { // Set satellite's PRN if (system.compare("") == 0) { DLOG(INFO) << "Trying to define PRN while system is not defined"; PRN = 0; } if (system.compare("GPS") == 0) { if (PRN_ < 1 or PRN_ > 32) { DLOG(INFO) << "This PRN is not defined"; PRN = 0; } else { PRN = PRN_; } } else if (system.compare("Glonass") == 0) { if (PRN_ < 1 or PRN_ > 24) { DLOG(INFO) << "This PRN is not defined"; PRN = 0; } else { PRN = PRN_; } } else if (system.compare("SBAS") == 0) { if (PRN_ == 122){ PRN = PRN_; } // WAAS Inmarsat 3F4 (AOR-W) else if (PRN_ == 134){ PRN = PRN_; } // WAAS Inmarsat 3F3 (POR) else if (PRN_ == 120){ PRN = PRN_; } // EGNOS AOR-E Broadcast satellite http://www.egnos-pro.esa.int/index.html else if (PRN_ == 124){ PRN = PRN_; } // EGNOS ESA ARTEMIS used for EGNOS Operations else if (PRN_ == 126){ PRN = PRN_; } // EGNOS IOR-W currently used by Industry to perform various tests on the system. else { DLOG(INFO) << "This PRN is not defined"; PRN = 0; } } else if (system.compare("Galileo") == 0) { if (PRN_ < 1 or PRN_ > 36) { DLOG(INFO) << "This PRN is not defined"; PRN = 0; } else { PRN = PRN_; } } else { DLOG(INFO) << "System " << system << " is not defined"; PRN = 0; } } unsigned int Gnss_Satellite::get_PRN() const { // Get satellite's PRN unsigned int PRN_; PRN_ = PRN; return PRN_; } std::string Gnss_Satellite::get_system() const { // Get the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Beidou"} std::string system_; system_ = system; return system_; } std::string Gnss_Satellite::get_system_short() const { // Get the satellite system {"G", "R", "S", "E", "C"} return satelliteSystem.at(system); } std::string Gnss_Satellite::get_block() const { // Get the satellite block std::string block_; block_ = block; return block_; } std::string Gnss_Satellite::what_block(const std::string& system_, unsigned int PRN_) { std::string block_ = "Unknown"; if (system_.compare("GPS") == 0) { switch ( PRN_ ) { // info from http://www.navcen.uscg.gov/?Do=constellationStatus case 1 : block_ = std::string("IIF"); //Plane D break; case 2 : block_ = std::string("IIR"); //Plane D break; case 3 : block_ = std::string("IIF"); //Plane E break; case 4 : block_ = std::string("IIA"); //Plane D break; case 5 : block_ = std::string("IIR-M"); //Plane E break; case 6 : block_ = std::string("IIF"); //Plane D break; case 7 : block_ = std::string("IIR-M"); //Plane A break; case 8 : block_ = std::string("IIA*"); // Decommissed break; case 9 : block_ = std::string("IIF"); //Plane F break; case 10 : block_ = std::string("IIA"); //Plane E break; case 11 : block_ = std::string("IIR"); //Plane D break; case 12 : block_ = std::string("IIR-M"); //Plane B break; case 13 : block_ = std::string("IIR"); //Plane F break; case 14 : block_ = std::string("IIR"); //Plane F break; case 15 : block_ = std::string("IIR-M"); //Plane F break; case 16 : block_ = std::string("IIR"); //Plane B break; case 17 : block_ = std::string("IIR-M"); //Plane C break; case 18 : block_ = std::string("IIR"); //Plane E break; case 19 : block_ = std::string("IIR"); //Plane D break; case 20 : block_ = std::string("IIR"); //Plane B break; case 21 : block_ = std::string("IIR"); //Plane D break; case 22 : block_ = std::string("IIR"); //Plane E break; case 23 : block_ = std::string("IIR"); //Plane F break; case 24 : block_ = std::string("IIF"); //Plane A break; case 25 : block_ = std::string("IIF"); //Plane B break; case 26 : block_ = std::string("IIF"); //Plane B break; case 27 : block_ = std::string("IIF"); //Plane C break; case 28 : block_ = std::string("IIR"); //Plane B break; case 29 : block_ = std::string("IIR-M"); //Plane C break; case 30 : block_ = std::string("IIF"); //Plane A break; case 31 : block_ = std::string("IIR-M"); //Plane A break; case 32 : block_ = std::string("IIA"); //Plane E break; default : block_ = std::string("Unknown"); } } if (system_.compare("Glonass") == 0) { switch ( PRN_ ) { // info from http://www.sdcm.ru/smglo/grupglo?version=eng&site=extern // See also http://www.glonass-center.ru/en/GLONASS/ case 1 : block_ = std::string("1"); //Plane 1 rf_link = 1; break; case 2 : block_ = std::string("-4"); //Plane 1 rf_link = -4; break; case 3 : block_ = std::string("5"); //Plane 1 rf_link = 5; break; case 4 : block_ = std::string("6"); //Plane 1 rf_link = 6; break; case 5 : block_ = std::string("1"); //Plane 1 rf_link = 1; break; case 6 : block_ = std::string("-4"); //Plane 1 rf_link = -4; break; case 7 : block_ = std::string("5"); //Plane 1 rf_link = 5; break; case 8 : block_ = std::string("6"); //Plane 1 rf_link = 6; break; case 9 : block_ = std::string("-2"); //Plane 2 rf_link = -2; break; case 10 : block_ = std::string("-7"); //Plane 2 rf_link = -7; break; case 11 : block_ = std::string("0"); //Plane 2 rf_link = 0; break; case 12 : block_ = std::string("-1"); //Plane 2 rf_link = -1; break; case 13 : block_ = std::string("-2"); //Plane 2 rf_link = -2; break; case 14 : block_ = std::string("-7"); //Plane 2 rf_link = -7; break; case 15 : block_ = std::string("0"); //Plane 2 rf_link = 0; break; case 16 : block_ = std::string("-1"); //Plane 2 rf_link = -1; break; case 17 : block_ = std::string("4"); //Plane 3 rf_link = 4; break; case 18 : block_ = std::string("-3"); //Plane 3 rf_link = -3; break; case 19 : block_ = std::string("3"); //Plane 3 rf_link = 3; break; case 20 : block_ = std::string("2"); //Plane 3 rf_link = 2; break; case 21 : block_ = std::string("4"); //Plane 3 rf_link = 4; break; case 22 : block_ = std::string("-3"); //Plane 3 rf_link = -3; break; case 23 : block_ = std::string("3"); //Plane 3 rf_link = 3; break; case 24 : block_ = std::string("2"); //Plane 3 rf_link = 2; break; default : block_ = std::string("Unknown"); } } if (system_.compare("SBAS") == 0) { switch ( PRN_ ) { case 122 : block_ = std::string("WAAS"); // WAAS Inmarsat 3F4 (AOR-W) break; case 134 : block_ = std::string("WAAS"); // WAAS Inmarsat 3F3 (POR) break; case 120 : block_ = std::string("EGNOS"); // EGNOS AOR-E Broadcast satellite http://www.egnos-pro.esa.int/index.html break; case 124 : block_ = std::string("EGNOS"); // EGNOS ESA ARTEMIS used for EGNOS Operations break; case 126 : block_ = std::string("EGNOS"); // EGNOS IOR-W currently used by Industry to perform various tests on the system. break; default: block_ = std::string("Unknown"); } } if (system_.compare("Galileo") == 0) { // Check http://en.wikipedia.org/wiki/List_of_Galileo_satellites switch ( PRN_ ) { case 11 : block_ = std::string("IOV-PFM"); // PFM, the ProtoFlight Model (GSAT0101), launched from French Guiana at 10:30 GMT on October 21, 2011 break; case 12 : block_ = std::string("IOV-FM2"); // Galileo In-Orbit Validation (IOV) satellite FM2 (Flight Model 2) also known as GSAT0102, from French Guiana at 10:30 GMT on October 21, 2011 break; case 19 : block_ = std::string("IOV-FM3"); // Galileo In-Orbit Validation (IOV) satellite FM3 (Flight Model 3), launched on October 12, 2012 break; case 20 : block_ = std::string("IOV-FM4"); // Galileo In-Orbit Validation (IOV) satellite FM4 (Flight Model 4), launched on October 12, 2012. Unavailable. break; case 18 : block_ = std::string("FOC-FM1"); // Galileo Full Operational Capability (FOC) satellite FM1, launched into incorrect orbit on August 22, 2014. break; case 14 : block_ = std::string("FOC-FM2"); // Galileo Full Operational Capability (FOC) satellite FM2, launched into incorrect orbit on August 22, 2014. break; case 26 : block_ = std::string("FOC-FM3"); // Galileo Full Operational Capability (FOC) satellite FM3, launched on March 27, 2015. break; case 22 : block_ = std::string("FOC-FM4"); // Galileo Full Operational Capability (FOC) satellite FM4, launched on March 27, 2015. break; default: block_ = std::string("Unknown(Simulated)"); } } return block_; } void Gnss_Satellite::set_block(const std::string& system_, unsigned int PRN_) { block = what_block(system_, PRN_); } gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_utc_model.h0000644000175000017500000000635512576764164024106 0ustar carlescarles/*! * \file gps_utc_model.h * \brief Interface of a GPS UTC MODEL storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_CNAV_UTC_MODEL_H_ #define GNSS_SDR_GPS_CNAV_UTC_MODEL_H_ #include "GPS_L2C.h" #include "boost/assign.hpp" #include /*! * \brief This class is a storage for the GPS UTC MODEL data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_CNAV_Utc_Model { public: bool valid; // UTC parameters double d_A1; //!< 1st order term of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s/s] double d_A0; //!< Constant of a model that relates GPS and UTC time (ref. 20.3.3.5.2.4 IS-GPS-200E) [s] double d_t_OT; //!< Reference time for UTC data (reference 20.3.4.5 and 20.3.3.5.2.4 IS-GPS-200E) [s] int i_WN_T; //!< UTC reference week number [weeks] double d_DeltaT_LS; //!< delta time due to leap seconds [s]. Number of leap seconds since 6-Jan-1980 as transmitted by the GPS almanac. int i_WN_LSF; //!< Week number at the end of which the leap second becomes effective [weeks] int i_DN; //!< Day number (DN) at the end of which the leap second becomes effective [days] double d_DeltaT_LSF; //!< Scheduled future or recent past (relative to NAV message upload) value of the delta time due to leap seconds [s] /*! * Default constructor */ Gps_CNAV_Utc_Model(); template /* * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("valid",valid); archive & make_nvp("d_A1",d_A1); archive & make_nvp("d_A0",d_A0); archive & make_nvp("d_t_OT",d_t_OT); archive & make_nvp("i_WN_T",i_WN_T); archive & make_nvp("d_DeltaT_LS",d_DeltaT_LS); archive & make_nvp("i_WN_LSF",i_WN_LSF); archive & make_nvp("i_DN",i_DN); archive & make_nvp("d_DeltaT_LSF",d_DeltaT_LSF); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/galileo_iono.cc0000644000175000017500000000356212576764164023046 0ustar carlescarles/*! * \file galileo_iono.cc * \brief Interface of a GPS IONOSPHERIC MODEL storage * * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_iono.h" Galileo_Iono::Galileo_Iono() { /* Ionospheric correction */ ai0_5 = 0; // Effective Ionisation Level 1st order parameter [sfu] ai1_5 = 0; // Effective Ionisation Level 2st order parameter [sfu/degree] ai2_5 = 0; // Effective Ionisation Level 3st order parameter [sfu/degree] /* Ionospheric disturbance flag */ Region1_flag_5 = false; // Ionospheric Disturbance Flag for region 1 Region2_flag_5 = false; // Ionospheric Disturbance Flag for region 2 Region3_flag_5 = false; // Ionospheric Disturbance Flag for region 3 Region4_flag_5 = false; // Ionospheric Disturbance Flag for region 4 Region5_flag_5 = false; // Ionospheric Disturbance Flag for region 5 TOW_5 = 0; WN_5 = 0; } gnss-sdr-0.0.6/src/core/system_parameters/galileo_almanac.cc0000644000175000017500000000471112576764164023473 0ustar carlescarles/*! * \file galileo_almanac.cc * \brief Implementation of a Galileo ALMANAC storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_almanac.h" Galileo_Almanac::Galileo_Almanac() { /*Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number*/ IOD_a_7 = 0; WN_a_7 = 0.0; t0a_7 = 0.0; SVID1_7 = 0; DELTA_A_7 = 0.0; e_7 = 0.0; omega_7 = 0.0; delta_i_7 = 0.0; Omega0_7 = 0.0; Omega_dot_7 = 0.0; M0_7 = 0.0; /*Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)*/ IOD_a_8 = 0; af0_8 = 0.0; af1_8 = 0.0; E5b_HS_8 = 0.0; E1B_HS_8 = 0.0; E5a_HS_8 = 0.0; SVID2_8 = 0; DELTA_A_8 = 0.0; e_8 = 0.0; omega_8 = 0.0; delta_i_8 = 0.0; Omega0_8 = 0.0; Omega_dot_8 = 0.0; /*Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)*/ IOD_a_9 = 0; WN_a_9 = 0.0; t0a_9 = 0.0; M0_9 = 0.0; af0_9 = 0.0; af1_9 = 0.0; E5b_HS_9 = 0.0; E1B_HS_9 = 0.0; E5a_HS_9 = 0.0; SVID3_9 = 0; DELTA_A_9 = 0.0; e_9 = 0.0; omega_9 = 0.0; delta_i_9 = 0.0; /*Word type 10: Almanac for SVID3 (2/2)*/ IOD_a_10 = 0; Omega0_10 = 0.0; Omega_dot_10 = 0.0; M0_10 = 0.0; af0_10 = 0.0; af1_10 = 0.0; E5b_HS_10 = 0.0; E1B_HS_10 = 0.0; E5a_HS_10 = 0.0; /*GPS to Galileo GST conversion parameters*/ A_0G_10 = 0.0; A_1G_10 = 0.0; t_0G_10 = 0.0; WN_0G_10 = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/sbas_ionospheric_correction.h0000644000175000017500000001755312576764164026036 0ustar carlescarles/*! * \file sbas_ionospheric_correction.h * \brief Interface of the SBAS ionosphere correction set based on SBAS RTKLIB functions * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef SBAS_IONOSPHERIC_CORRECTION_H_ #define SBAS_IONOSPHERIC_CORRECTION_H_ #include #include #include #include #include #include #include #include /*! * \brief Struct that represents a Ionospheric Grid Point (IGP) */ struct Igp { public: //bool d_valid; // valid==true indicates that the IGP can be used for corrections. it is set to false when a new IGP mask (MT18) has been received but no corresponding delays (MT26) double t0; // time of reception, time of correction int d_latitude; int d_longitude; int d_give; double d_delay; private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & t0; ar & d_latitude; ar & d_longitude; ar & d_give; ar & d_delay; } }; /*! * \brief Struct that represents the band of a Ionospheric Grid Point (IGP) */ struct Igp_Band { //int d_iodi; //int d_nigp; // number if IGPs in this band (defined by IGP mask from MT18) std::vector d_igps; private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & d_igps; } }; /*! * \brief Class that handles valid SBAS ionospheric correction for GPS */ class Sbas_Ionosphere_Correction { private: /* Inner product of vectors * params : double *a,*b I vector a,b (n x 1) * int n I size of vector a,b * return : a'*b */ double dot(const double *a, const double *b, int n); /* Multiply matrix */ void matmul(const char *tr, int n, int k, int m, double alpha, const double *A, const double *B, double beta, double *C); /* EFEC to local coordinate transfomartion matrix * Compute ecef to local coordinate transfomartion matrix * params : double *pos I geodetic position {lat,lon} (rad) * double *E O ecef to local coord transformation matrix (3x3) * return : none * notes : matrix stored by column-major order (fortran convention) */ void xyz2enu(const double *pos, double *E); /* Transforms ECEF vector into local tangential coordinates * params : double *pos I geodetic position {lat,lon} (rad) * double *r I vector in ecef coordinate {x,y,z} * double *e O vector in local tangental coordinate {e,n,u} * return : none */ void ecef2enu(const double *pos, const double *r, double *e); /* Compute satellite azimuth/elevation angle * params : double *pos I geodetic position {lat,lon,h} (rad,m) * double *e I receiver-to-satellilte unit vevtor (ecef) * double *azel IO azimuth/elevation {az,el} (rad) (NULL: no output) * (0.0 <= azel[0] < 2*pi, -pi/2 <= azel[1] <= pi/2) * return : elevation angle (rad) */ double satazel(const double *pos, const double *e, double *azel); /* Debug trace functions */ void trace(int level, const char *format, ...); /* time difference ------------------------------------------------------------- * difference between gtime_t structs * args : gtime_t t1,t2 I gtime_t structs * return : time difference (t1-t2) (s) *-----------------------------------------------------------------------------*/ //double timediff(gtime_t t1, gtime_t t2); /* Compute Ionospheric Pierce Point (IPP) position and slant factor * params : double *pos I receiver position {lat,lon,h} (rad,m) * double *azel I azimuth/elevation angle {az,el} (rad) * double re I earth radius (km) * double hion I altitude of ionosphere (km) * double *posp O pierce point position {lat,lon,h} (rad,m) * return : slant factor * notes : see ref [2], only valid on the earth surface * fixing bug on ref [2] A.4.4.10.1 A-22,23 *-----------------------------------------------------------------------------*/ double ionppp(const double *pos, const double *azel, double re, double hion, double *posp); /* Variance of ionosphere correction (give = GIVEI + 1) */ double varicorr(int give); /* Search igps */ void searchigp(const double *pos, const Igp **igp, double *x, double *y); /* Compute sbas ionospheric delay correction * params : long sample_stamp I sample stamp of observable on which the correction will be applied * sbsion_t *ion I ionospheric correction data (implicit) * double *pos I receiver position {lat,lon,height} (rad/m) * double *azel I satellite azimuth/elavation angle (rad) * double *delay O slant ionospheric delay (L1) (m) * double *var O variance of ionospheric delay (m^2) * return : status (1:ok, 0:no correction) * notes : before calling the function, sbas ionosphere correction parameters * in navigation data (nav->sbsion) must be set by callig * sbsupdatecorr() */ int sbsioncorr(const double sample_stamp, const double *pos, const double *azel, double *delay, double *var); friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version){ar & d_bands;} public: std::vector d_bands; void print(std::ostream &out); /*! * \brief Computes SBAS ionospheric delay correction. * * \param[out] delay Slant ionospheric delay (L1) (m) * \param[out] var Variance of ionospheric delay (m^2) * \param[in] sample_stamp Sample stamp of observable on which the correction will be applied * \param[in] longitude_d Receiver's longitude in terms of WGS84 (degree) * \param[in] latitude_d Receiver's latitude in terms of WGS84 (degree) * \param[in] azimuth_d Satellite azimuth/elavation angle (rad). Azimuth is the angle of * the satellite from the user's location measured clockwise from north * \param[in] elevation_d Elevation is the angle of the satellite from the user's location measured * with respect to the local-tangent-plane */ bool apply(double sample_stamp, double latitude_d, double longitude_d, double azimut_d, double evaluation_d, double &delay, double &var); }; #endif /* SBAS_IONOSPHERIC_CORRECTION_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_navigation_message.cc0000644000175000017500000003642712576764164026137 0ustar carlescarles/*! * \file gps_cnav_navigation_message.cc * \brief Implementation of a GPS CNAV Data message decoder as described in IS-GPS-200H * * See http://www.gps.gov/technical/icwg/IS-GPS-200H.pdf Appendix III * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_cnav_navigation_message.h" #include #include #include "gnss_satellite.h" void Gps_CNAV_Navigation_Message::reset() { b_flag_ephemeris_1 = false; b_flag_ephemeris_2 = false; b_flag_iono_valid = false; // satellite positions d_satpos_X = 0; d_satpos_Y = 0; d_satpos_Z = 0; // info i_channel_ID = 0; i_satellite_PRN = 0; // Satellite velocity d_satvel_X = 0; d_satvel_Y = 0; d_satvel_Z = 0; d_TOW = 0.0; } Gps_CNAV_Navigation_Message::Gps_CNAV_Navigation_Message() { reset(); Gnss_Satellite gnss_satellite_ = Gnss_Satellite(); for(unsigned int prn_ = 1; prn_ < 33; prn_++) { satelliteBlock[prn_] = gnss_satellite_.what_block("GPS", prn_); } b_flag_iono_valid = false; } void Gps_CNAV_Navigation_Message::print_gps_word_bytes(unsigned int GPS_word) { std::cout << " Word ="; std::cout << std::bitset<32>(GPS_word); std::cout << std::endl; } bool Gps_CNAV_Navigation_Message::read_navigation_bool(std::bitset bits, const std::vector> parameter) { bool value; if (bits[GPS_L2_CNAV_DATA_PAGE_BITS - parameter[0].first] == 1) { value = true; } else { value = false; } return value; } unsigned long int Gps_CNAV_Navigation_Message::read_navigation_unsigned(std::bitset bits, const std::vector> parameter) { unsigned long int value = 0; int num_of_slices = parameter.size(); for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left if (bits[GPS_L2_CNAV_DATA_PAGE_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } return value; } signed long int Gps_CNAV_Navigation_Message::read_navigation_signed(std::bitset bits, const std::vector> parameter) { signed long int value = 0; int num_of_slices = parameter.size(); // Discriminate between 64 bits and 32 bits compiler int long_int_size_bytes = sizeof(signed long int); if (long_int_size_bytes == 8) // if a long int takes 8 bytes, we are in a 64 bits system { // read the MSB and perform the sign extension if (bits[GPS_L2_CNAV_DATA_PAGE_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFFFFFFFFFF; //64 bits variable } else { value &= 0; } for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left value &= 0xFFFFFFFFFFFFFFFE; //reset the corresponding bit (for the 64 bits variable) if (bits[GPS_L2_CNAV_DATA_PAGE_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } } else // we assume we are in a 32 bits system { // read the MSB and perform the sign extension if (bits[GPS_L2_CNAV_DATA_PAGE_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFF; } else { value &= 0; } for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left value &= 0xFFFFFFFE; //reset the corresponding bit if (bits[GPS_L2_CNAV_DATA_PAGE_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } } return value; } void Gps_CNAV_Navigation_Message::decode_page(std::vector data) { std::bitset data_bits; try { for(int i = 0; i < GPS_L2_CNAV_DATA_PAGE_BITS; i++) { data_bits[i] = static_cast(data[GPS_L2_CNAV_DATA_PAGE_BITS - i - 1]); } } catch(std::exception &e) { std::cout << "Exception converting to bitset " << e.what() << std::endl; return; } int PRN; int page_type; bool alert_flag; // common to all messages PRN = static_cast(read_navigation_unsigned(data_bits, CNAV_PRN)); ephemeris_record.i_satellite_PRN = PRN; d_TOW = static_cast(read_navigation_unsigned(data_bits, CNAV_TOW)); d_TOW = d_TOW * CNAV_TOW_LSB; ephemeris_record.d_TOW = d_TOW; alert_flag = static_cast(read_navigation_bool(data_bits, CNAV_ALERT_FLAG)); ephemeris_record.b_alert_flag = alert_flag; page_type = static_cast(read_navigation_unsigned(data_bits, CNAV_MSG_TYPE)); std::cout << "PRN=" << PRN << " TOW=" << d_TOW << " alert_flag=" << alert_flag << " page_type= " << page_type << std::endl; switch(page_type) { case 10: // Ephemeris 1/2 ephemeris_record.i_GPS_week = static_cast(read_navigation_unsigned(data_bits, CNAV_WN)); ephemeris_record.i_signal_health = static_cast(read_navigation_unsigned(data_bits, CNAV_HEALTH)); ephemeris_record.d_Top = static_cast(read_navigation_unsigned(data_bits, CNAV_TOP1)); ephemeris_record.d_Top = ephemeris_record.d_Top * CNAV_TOP1_LSB; ephemeris_record.d_URA0 = static_cast(read_navigation_signed(data_bits, CNAV_URA)); ephemeris_record.d_Toe1 = static_cast(read_navigation_unsigned(data_bits, CNAV_TOE1)); ephemeris_record.d_Toe1 = ephemeris_record.d_Toe1 * CNAV_TOE1_LSB; ephemeris_record.d_DELTA_A = static_cast(read_navigation_signed(data_bits, CNAV_DELTA_A)); ephemeris_record.d_DELTA_A = ephemeris_record.d_DELTA_A * CNAV_DELTA_A_LSB; ephemeris_record.d_A_DOT = static_cast(read_navigation_signed(data_bits, CNAV_A_DOT)); ephemeris_record.d_A_DOT = ephemeris_record.d_A_DOT * CNAV_A_DOT_LSB; ephemeris_record.d_Delta_n = static_cast(read_navigation_signed(data_bits, CNAV_DELTA_N0)); ephemeris_record.d_Delta_n = ephemeris_record.d_Delta_n * CNAV_DELTA_N0_LSB; ephemeris_record.d_DELTA_DOT_N = static_cast(read_navigation_signed(data_bits, CNAV_DELTA_N0_DOT)); ephemeris_record.d_DELTA_DOT_N = ephemeris_record.d_DELTA_DOT_N * CNAV_DELTA_N0_DOT_LSB; ephemeris_record.d_M_0 = static_cast(read_navigation_signed(data_bits, CNAV_M0)); ephemeris_record.d_M_0 = ephemeris_record.d_M_0 * CNAV_M0_LSB; ephemeris_record.d_e_eccentricity = static_cast(read_navigation_signed(data_bits, CNAV_E_ECCENTRICITY)); ephemeris_record.d_e_eccentricity = ephemeris_record.d_e_eccentricity * CNAV_E_ECCENTRICITY_LSB; ephemeris_record.d_OMEGA = static_cast(read_navigation_signed(data_bits, CNAV_OMEGA)); ephemeris_record.d_OMEGA = ephemeris_record.d_OMEGA * CNAV_OMEGA_LSB; ephemeris_record.b_integrity_status_flag = static_cast(read_navigation_bool(data_bits, CNAV_INTEGRITY_FLAG)); ephemeris_record.b_l2c_phasing_flag = static_cast(read_navigation_bool(data_bits, CNAV_L2_PHASING_FLAG)); b_flag_ephemeris_1 = true; break; case 11: // Ephemeris 2/2 ephemeris_record.d_Toe2 = static_cast(read_navigation_unsigned(data_bits, CNAV_TOE2)); ephemeris_record.d_Toe2 = ephemeris_record.d_Toe2 * CNAV_TOE2_LSB; ephemeris_record.d_OMEGA0 = static_cast(read_navigation_signed(data_bits, CNAV_OMEGA0)); ephemeris_record.d_OMEGA0 = ephemeris_record.d_OMEGA0 * CNAV_OMEGA0_LSB; ephemeris_record.d_DELTA_OMEGA_DOT = static_cast(read_navigation_signed(data_bits, CNAV_DELTA_OMEGA_DOT)); ephemeris_record.d_DELTA_OMEGA_DOT = ephemeris_record.d_DELTA_OMEGA_DOT * CNAV_DELTA_OMEGA_DOT_LSB; ephemeris_record.d_i_0 = static_cast(read_navigation_signed(data_bits, CNAV_I0)); ephemeris_record.d_i_0 = ephemeris_record.d_i_0 * CNAV_I0_LSB; ephemeris_record.d_IDOT = static_cast(read_navigation_signed(data_bits, CNAV_I0_DOT)); ephemeris_record.d_IDOT = ephemeris_record.d_IDOT * CNAV_I0_DOT_LSB; ephemeris_record.d_Cis = static_cast(read_navigation_signed(data_bits, CNAV_CIS)); ephemeris_record.d_Cis = ephemeris_record.d_Cis * CNAV_CIS_LSB; ephemeris_record.d_Cic = static_cast(read_navigation_signed(data_bits, CNAV_CIC)); ephemeris_record.d_Cic = ephemeris_record.d_Cic * CNAV_CIC_LSB; ephemeris_record.d_Crs = static_cast(read_navigation_signed(data_bits, CNAV_CRS)); ephemeris_record.d_Crs = ephemeris_record.d_Crs * CNAV_CRS_LSB; ephemeris_record.d_Crc = static_cast(read_navigation_signed(data_bits, CNAV_CRC)); ephemeris_record.d_Cic = ephemeris_record.d_Cic * CNAV_CRC_LSB; ephemeris_record.d_Cus = static_cast(read_navigation_signed(data_bits, CNAV_CUS)); ephemeris_record.d_Cus = ephemeris_record.d_Cus * CNAV_CUS_LSB; ephemeris_record.d_Cuc = static_cast(read_navigation_signed(data_bits, CNAV_CUC)); ephemeris_record.d_Cuc = ephemeris_record.d_Cuc * CNAV_CUS_LSB; b_flag_ephemeris_2 = true; break; case 30: // (CLOCK, IONO, GRUP DELAY) //clock ephemeris_record.d_Toc = static_cast(read_navigation_unsigned(data_bits, CNAV_TOC)); ephemeris_record.d_Toc = ephemeris_record.d_Toc * CNAV_TOC_LSB; ephemeris_record.d_URA0 = static_cast(read_navigation_signed(data_bits, CNAV_URA_NED0)); ephemeris_record.d_URA1 = static_cast(read_navigation_unsigned(data_bits, CNAV_URA_NED1)); ephemeris_record.d_URA2 = static_cast(read_navigation_unsigned(data_bits, CNAV_URA_NED2)); ephemeris_record.d_A_f0 = static_cast(read_navigation_signed(data_bits, CNAV_AF0)); ephemeris_record.d_A_f0 = ephemeris_record.d_A_f0 * CNAV_AF0_LSB; ephemeris_record.d_A_f1 = static_cast(read_navigation_signed(data_bits, CNAV_AF1)); ephemeris_record.d_A_f1 = ephemeris_record.d_A_f1 * CNAV_AF1_LSB; ephemeris_record.d_A_f2 = static_cast(read_navigation_signed(data_bits, CNAV_AF2)); ephemeris_record.d_A_f2 = ephemeris_record.d_A_f2 * CNAV_AF2_LSB; //group delays ephemeris_record.d_TGD = static_cast(read_navigation_signed(data_bits, CNAV_TGD)); ephemeris_record.d_TGD = ephemeris_record.d_TGD * CNAV_TGD_LSB; ephemeris_record.d_ISCL1 = static_cast(read_navigation_signed(data_bits, CNAV_ISCL1)); ephemeris_record.d_ISCL1 = ephemeris_record.d_ISCL1 * CNAV_ISCL1_LSB; ephemeris_record.d_ISCL2 = static_cast(read_navigation_signed(data_bits, CNAV_ISCL2)); ephemeris_record.d_ISCL2 = ephemeris_record.d_ISCL2 * CNAV_ISCL2_LSB; ephemeris_record.d_ISCL5I = static_cast(read_navigation_signed(data_bits, CNAV_ISCL5I)); ephemeris_record.d_ISCL5I = ephemeris_record.d_ISCL5I * CNAV_ISCL5I_LSB; ephemeris_record.d_ISCL5Q = static_cast(read_navigation_signed(data_bits, CNAV_ISCL5Q)); ephemeris_record.d_ISCL5Q = ephemeris_record.d_ISCL5Q * CNAV_ISCL5Q_LSB; //iono iono_record.d_alpha0 = static_cast(read_navigation_signed(data_bits, CNAV_ALPHA0)); iono_record.d_alpha0 = iono_record.d_alpha0 * CNAV_ALPHA0_LSB; iono_record.d_alpha1 = static_cast(read_navigation_signed(data_bits, CNAV_ALPHA1)); iono_record.d_alpha1 = iono_record.d_alpha1 * CNAV_ALPHA1_LSB; iono_record.d_alpha2 = static_cast(read_navigation_signed(data_bits, CNAV_ALPHA2)); iono_record.d_alpha2 = iono_record.d_alpha2 * CNAV_ALPHA2_LSB; iono_record.d_alpha3 = static_cast(read_navigation_signed(data_bits, CNAV_ALPHA3)); iono_record.d_alpha3 = iono_record.d_alpha3 * CNAV_ALPHA3_LSB; iono_record.d_beta0 = static_cast(read_navigation_signed(data_bits, CNAV_BETA0)); iono_record.d_beta0 = iono_record.d_beta0 * CNAV_BETA0_LSB; iono_record.d_beta1 = static_cast(read_navigation_signed(data_bits, CNAV_BETA1)); iono_record.d_beta1 = iono_record.d_beta1 * CNAV_BETA1_LSB; iono_record.d_beta2 = static_cast(read_navigation_signed(data_bits, CNAV_BETA2)); iono_record.d_beta2 = iono_record.d_beta2 * CNAV_BETA2_LSB; iono_record.d_beta3 = static_cast(read_navigation_signed(data_bits, CNAV_BETA3)); iono_record.d_beta3 = iono_record.d_beta3 * CNAV_BETA3_LSB; b_flag_iono_valid = true; break; default: break; } } bool Gps_CNAV_Navigation_Message::have_new_ephemeris() //Check if we have a new ephemeris stored in the galileo navigation class { if (b_flag_ephemeris_1 == true and b_flag_ephemeris_2 == true) { if (ephemeris_record.d_Toe1 == ephemeris_record.d_Toe2) { //if all ephemeris pages have the same TOE, then they belong to the same block // std::cout << "Ephemeris (1, 2) have been received and belong to the same batch" << std::endl; b_flag_ephemeris_1 = false;// clear the flag b_flag_ephemeris_2 = false;// clear the flag return true; } else { return false; } } else { return false; } } Gps_CNAV_Ephemeris Gps_CNAV_Navigation_Message::get_ephemeris() { return ephemeris_record; } bool Gps_CNAV_Navigation_Message::have_new_iono() //Check if we have a new iono data stored in the galileo navigation class { if (b_flag_iono_valid == true) { b_flag_iono_valid = false;// clear the flag return true; } else { return false; } } Gps_CNAV_Iono Gps_CNAV_Navigation_Message::get_iono() { return iono_record; } Gps_CNAV_Utc_Model Gps_CNAV_Navigation_Message::get_utc_model() { return utc_model_record; } gnss-sdr-0.0.6/src/core/system_parameters/gps_almanac.cc0000644000175000017500000000275312576764164022654 0ustar carlescarles/*! * \file gps_almanac.cc * \brief Interface of a GPS ALMANAC storage * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_almanac.h" Gps_Almanac::Gps_Almanac() { i_satellite_PRN = 0; d_Delta_i = 0.0; d_Toa = 0.0; d_M_0 = 0.0; d_e_eccentricity = 0.0; d_sqrt_A = 0.0; d_OMEGA0 = 0.0; d_OMEGA = 0.0; d_OMEGA_DOT = 0.0; i_SV_health = 0; d_A_f0 = 0.0; d_A_f1 = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/galileo_navigation_message.cc0000644000175000017500000013001712576764164025741 0ustar carlescarles/*! * \file galileo_navigation_message.cc * \brief Implementation of a Galileo I/NAV Data message * as described in Galileo OS SIS ICD Issue 1.1 (Sept. 2010) * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_navigation_message.h" #include #include // for boost::crc_basic, boost::crc_optimal #include #include #include #include #include typedef boost::crc_optimal<24, 0x1864CFBu, 0x0, 0x0, false, false> CRC_Galileo_INAV_type; void Galileo_Navigation_Message::reset() { flag_even_word = 0; Page_type_time_stamp = 0; flag_CRC_test = false; flag_all_ephemeris = false; // flag indicating that all words containing ephemeris have been received flag_ephemeris_1 = false; // flag indicating that ephemeris 1/4 (word 1) have been received flag_ephemeris_2 = false; // flag indicating that ephemeris 2/4 (word 2) have been received flag_ephemeris_3 = false; // flag indicating that ephemeris 3/4 (word 3) have been received flag_ephemeris_4 = false; // flag indicating that ephemeris 4/4 (word 4) have been received flag_iono_and_GST = false; // flag indicating that ionospheric parameters (word 5) have been received flag_utc_model = false; // flag indicating that utc model parameters (word 6) have been received flag_all_almanac = false; // flag indicating that all almanac have been received flag_almanac_1 = false; // flag indicating that almanac 1/4 (word 7) have been received flag_almanac_2 = false; // flag indicating that almanac 2/4 (word 8) have been received flag_almanac_3 = false; // flag indicating that almanac 3/4 (word 9) have been received flag_almanac_4 = false; // flag indicating that almanac 4/4 (word 10) have been received flag_TOW_5 = 0; flag_TOW_set = false; flag_GGTO = false; flag_GGTO_1 = false; flag_GGTO_2 = false; flag_GGTO_3 = false; flag_GGTO_4 = false; IOD_ephemeris = 0; /*Word type 1: Ephemeris (1/4)*/ IOD_nav_1 = 0; t0e_1 = 0; M0_1 = 0; e_1 = 0; A_1 = 0; /*Word type 2: Ephemeris (2/4)*/ IOD_nav_2 = 0; // IOD_nav page 2 OMEGA_0_2 = 0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] i_0_2 = 0; // Inclination angle at reference time [semi-circles] omega_2 = 0; // Argument of perigee [semi-circles] iDot_2 = 0; // Rate of inclination angle [semi-circles/sec] /*Word type 3: Ephemeris (3/4) and SISA*/ IOD_nav_3 = 0; // OMEGA_dot_3 = 0; // Rate of right ascension [semi-circles/sec] delta_n_3 = 0; // Mean motion difference from computed value [semi-circles/sec] C_uc_3 = 0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] C_us_3 = 0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] C_rc_3 = 0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] C_rs_3 = 0; // Amplitude of the sine harmonic correction term to the orbit radius [meters] SISA_3 = 0; // /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ IOD_nav_4 = 0; // SV_ID_PRN_4 = 0; // C_ic_4 = 0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] C_is_4 = 0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] /*Clock correction parameters*/ t0c_4 = 0; // af0_4 = 0; // af1_4 = 0; // af2_4 = 0; // spare_4 = 0; /*Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/ /*Ionospheric correction*/ /*Az*/ ai0_5 = 0; // ai1_5 = 0; // ai2_5 = 0; // /*Ionospheric disturbance flag*/ Region1_flag_5 = 0; // Region1_flag_5; Region2_flag_5 = 0; // Region3_flag_5 = 0; // Region4_flag_5 = 0; // Region5_flag_5 = 0; // BGD_E1E5a_5 = 0; // BGD_E1E5b_5 = 0; // E5b_HS_5 = 0; E1B_HS_5 = 0; E5b_DVS_5 = 0; // E1B_DVS_5 = 0; // /*GST*/ WN_5 = 0; TOW_5 = 0; spare_5 = 0; /*Word type 6: GST-UTC conversion parameters*/ A0_6 = 0; A1_6 = 0; Delta_tLS_6 = 0; t0t_6 = 0; WNot_6 = 0; WN_LSF_6 = 0; DN_6 = 0; Delta_tLSF_6 = 0; TOW_6 = 0; /*Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number*/ IOD_a_7 = 0; WN_a_7 = 0; t0a_7 = 0; SVID1_7 = 0; DELTA_A_7 = 0; e_7 = 0; omega_7 = 0; delta_i_7 = 0; Omega0_7 = 0; Omega_dot_7 = 0; M0_7 = 0; /*Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)*/ IOD_a_8 = 0; af0_8 = 0; af1_8 = 0; E5b_HS_8 = 0; E1B_HS_8 = 0; SVID2_8 = 0; DELTA_A_8 = 0; e_8 = 0; omega_8 = 0; delta_i_8 = 0; Omega0_8 = 0; Omega_dot_8 = 0; /*Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)*/ IOD_a_9 = 0; WN_a_9 = 0; t0a_9 = 0; M0_9 = 0; af0_9 = 0; af1_9 = 0; E5b_HS_9 = 0; E1B_HS_9 = 0; SVID3_9 = 0; DELTA_A_9 = 0; e_9 = 0; omega_9 = 0; delta_i_9 = 0; /*Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters*/ IOD_a_10 = 0; Omega0_10 = 0; Omega_dot_10 = 0; M0_10 = 0; af0_10 = 0; af1_10 = 0; E5b_HS_10 = 0; E1B_HS_10 = 0; //GST-GPS A_0G_10 = 0; A_1G_10 = 0; t_0G_10 = 0; WN_0G_10 = 0; /*Word type 0: I/NAV Spare Word*/ Time_0 = 0; WN_0 = 0; TOW_0 = 0; flag_TOW_6 = false; Galileo_satClkDrift = 0.0; Galileo_dtr = 0.0; // satellite positions galileo_satpos_X = 0.0; galileo_satpos_Y = 0.0; galileo_satpos_Z = 0.0; // Satellite velocity galileo_satvel_X = 0.0; galileo_satvel_Y = 0.0; galileo_satvel_Z = 0.0; } Galileo_Navigation_Message::Galileo_Navigation_Message() { reset(); } bool Galileo_Navigation_Message::CRC_test(std::bitset bits,boost::uint32_t checksum) { CRC_Galileo_INAV_type CRC_Galileo; boost::uint32_t crc_computed; // Galileo INAV frame for CRC is not an integer multiple of bytes // it needs to be filled with zeroes at the start of the frame. // This operation is done in the transformation from bits to bytes // using boost::dynamic_bitset. // ToDo: Use boost::dynamic_bitset for all the bitset operations in this class boost::dynamic_bitset frame_bits(std::string(bits.to_string())); std::vector bytes; boost::to_block_range(frame_bits, std::back_inserter(bytes)); std::reverse(bytes.begin(),bytes.end()); CRC_Galileo.process_bytes( bytes.data(), GALILEO_DATA_FRAME_BYTES ); crc_computed = CRC_Galileo.checksum(); if (checksum == crc_computed) { return true; } else { return false; } } unsigned long int Galileo_Navigation_Message::read_navigation_unsigned(std::bitset bits, const std::vector > parameter) { unsigned long int value = 0; int num_of_slices = parameter.size(); for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left if (bits[GALILEO_DATA_JK_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } return value; } unsigned long int Galileo_Navigation_Message::read_page_type_unsigned(std::bitset bits, const std::vector > parameter) { unsigned long int value = 0; int num_of_slices = parameter.size(); for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left if (bits[GALILEO_PAGE_TYPE_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } return value; } signed long int Galileo_Navigation_Message::read_navigation_signed(std::bitset bits, const std::vector > parameter) { signed long int value = 0; int num_of_slices = parameter.size(); // Discriminate between 64 bits and 32 bits compiler int long_int_size_bytes = sizeof(signed long int); if (long_int_size_bytes == 8) // if a long int takes 8 bytes, we are in a 64 bits system { // read the MSB and perform the sign extension if (bits[GALILEO_DATA_JK_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFFFFFFFFFF; //64 bits variable } else { value &= 0; } for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left value &= 0xFFFFFFFFFFFFFFFE; //reset the corresponding bit (for the 64 bits variable) if (bits[GALILEO_DATA_JK_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } } else // we assume we are in a 32 bits system { // read the MSB and perform the sign extension if (bits[GALILEO_DATA_JK_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFF; } else { value &= 0; } for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left value &= 0xFFFFFFFE; //reset the corresponding bit if (bits[GALILEO_DATA_JK_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } } return value; } bool Galileo_Navigation_Message::read_navigation_bool(std::bitset bits, const std::vector > parameter) { bool value; if (bits[GALILEO_DATA_JK_BITS - parameter[0].first] == 1) { value = true; } else { value = false; } return value; } void Galileo_Navigation_Message::split_page(std::string page_string, int flag_even_word) { // ToDo: Clean all the tests and create an independent google test code for the telemetry decoder. //char correct_tail[7]="011110"; //the viterbi decoder output change the tail to this value (why?) //char correct_tail[7]="000000"; int Page_type = 0; //std::cout << "Start decoding Galileo I/NAV " << std::endl; if(page_string.at(0) == '1')// if page is odd { //std::cout<< "page_string.at(0) split page="< TLM_word_for_CRC_bits(TLM_word_for_CRC); std::bitset<24> checksum(CRC_data); //if (Tail_odd.compare(correct_tail) != 0) // std::cout << "Tail odd is not correct!" << std::endl; //else std::cout<<"Tail odd is correct!"< page_type_bits (page_number_bits); // from string to bitset Page_type = static_cast(read_page_type_unsigned(page_type_bits, type)); Page_type_time_stamp = Page_type; std::string Data_jk_ephemeris = Data_k + Data_j; page_jk_decoder(Data_jk_ephemeris.c_str()); } else { // Wrong CRC... discard frame flag_CRC_test = false; } } // end of CRC checksum control } // end if (page_string.at(0)=='1') else { page_Even = page_string.substr (0,114); std::string tail_Even = page_string.substr (114,6); //std::cout << "tail_even_string: " << tail_Even < data_jk_bits (data_jk_string); //DLOG(INFO) << "Data_jk_bits (bitset) "<< endl << data_jk_bits << endl; page_number = static_cast(read_navigation_unsigned(data_jk_bits, PAGE_TYPE_bit)); LOG(INFO) << "Page number = " << page_number; switch (page_number) { case 1: /*Word type 1: Ephemeris (1/4)*/ IOD_nav_1 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_nav_1_bit)); DLOG(INFO) << "IOD_nav_1= " << IOD_nav_1; t0e_1 = static_cast(read_navigation_unsigned(data_jk_bits, T0E_1_bit)); t0e_1 = t0e_1 * t0e_1_LSB; DLOG(INFO) << "t0e_1= " << t0e_1; M0_1 = static_cast(read_navigation_signed(data_jk_bits, M0_1_bit)); M0_1 = M0_1 * M0_1_LSB; DLOG(INFO) << "M0_1= " << M0_1; e_1 = static_cast(read_navigation_unsigned(data_jk_bits, e_1_bit)); e_1 = e_1 * e_1_LSB; DLOG(INFO) << "e_1= " << e_1; A_1 = static_cast(read_navigation_unsigned(data_jk_bits, A_1_bit)); A_1 = A_1 * A_1_LSB_gal; DLOG(INFO) << "A_1= " << A_1; flag_ephemeris_1 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 2: /*Word type 2: Ephemeris (2/4)*/ IOD_nav_2 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_nav_2_bit)); DLOG(INFO) << "IOD_nav_2= " << IOD_nav_2; OMEGA_0_2 = static_cast(read_navigation_signed(data_jk_bits, OMEGA_0_2_bit)); OMEGA_0_2 = OMEGA_0_2 * OMEGA_0_2_LSB; DLOG(INFO) << "OMEGA_0_2= " << OMEGA_0_2 ; i_0_2 = static_cast(read_navigation_signed(data_jk_bits, i_0_2_bit)); i_0_2 = i_0_2 * i_0_2_LSB; DLOG(INFO) << "i_0_2= " << i_0_2 ; omega_2 = static_cast(read_navigation_signed(data_jk_bits, omega_2_bit)); omega_2 = omega_2 * omega_2_LSB; DLOG(INFO) << "omega_2= " << omega_2; iDot_2 = static_cast(read_navigation_signed(data_jk_bits, iDot_2_bit)); iDot_2 = iDot_2 * iDot_2_LSB; DLOG(INFO) << "iDot_2= " << iDot_2; flag_ephemeris_2 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 3: /*Word type 3: Ephemeris (3/4) and SISA*/ IOD_nav_3 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_nav_3_bit)); DLOG(INFO) << "IOD_nav_3= " << IOD_nav_3 ; OMEGA_dot_3 = static_cast(read_navigation_signed(data_jk_bits, OMEGA_dot_3_bit)); OMEGA_dot_3 = OMEGA_dot_3 * OMEGA_dot_3_LSB; DLOG(INFO) <<"OMEGA_dot_3= " << OMEGA_dot_3 ; delta_n_3 = static_cast(read_navigation_signed(data_jk_bits, delta_n_3_bit)); delta_n_3 = delta_n_3 * delta_n_3_LSB; DLOG(INFO) << "delta_n_3= " << delta_n_3 ; C_uc_3 = static_cast(read_navigation_signed(data_jk_bits, C_uc_3_bit)); C_uc_3 = C_uc_3 * C_uc_3_LSB; DLOG(INFO) << "C_uc_3= " << C_uc_3; C_us_3 = static_cast(read_navigation_signed(data_jk_bits, C_us_3_bit)); C_us_3 = C_us_3 * C_us_3_LSB; DLOG(INFO) << "C_us_3= " << C_us_3; C_rc_3 = static_cast(read_navigation_signed(data_jk_bits, C_rc_3_bit)); C_rc_3 = C_rc_3 * C_rc_3_LSB; DLOG(INFO) << "C_rc_3= " << C_rc_3; C_rs_3 = static_cast(read_navigation_signed(data_jk_bits, C_rs_3_bit)); C_rs_3 = C_rs_3 * C_rs_3_LSB; DLOG(INFO) << "C_rs_3= " << C_rs_3; SISA_3 = static_cast(read_navigation_unsigned(data_jk_bits, SISA_3_bit)); DLOG(INFO) << "SISA_3= " << SISA_3; flag_ephemeris_3 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 4: /* Word type 4: Ephemeris (4/4) and Clock correction parameters*/ IOD_nav_4 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_nav_4_bit)); DLOG(INFO) << "IOD_nav_4= " << IOD_nav_4 ; SV_ID_PRN_4 = static_cast(read_navigation_unsigned(data_jk_bits, SV_ID_PRN_4_bit)); DLOG(INFO) << "SV_ID_PRN_4= " << SV_ID_PRN_4 ; C_ic_4 = static_cast(read_navigation_signed(data_jk_bits, C_ic_4_bit)); C_ic_4 = C_ic_4 * C_ic_4_LSB; DLOG(INFO) << "C_ic_4= " << C_ic_4; C_is_4 = static_cast(read_navigation_signed(data_jk_bits, C_is_4_bit)); C_is_4 = C_is_4 * C_is_4_LSB; DLOG(INFO) << "C_is_4= " << C_is_4; /*Clock correction parameters*/ t0c_4 = static_cast(read_navigation_unsigned(data_jk_bits, t0c_4_bit)); t0c_4 = t0c_4 * t0c_4_LSB; DLOG(INFO) << "t0c_4= " << t0c_4; af0_4 = static_cast(read_navigation_signed(data_jk_bits, af0_4_bit)); af0_4 = af0_4 * af0_4_LSB; DLOG(INFO) << "af0_4 = " << af0_4; af1_4 = static_cast(read_navigation_signed(data_jk_bits, af1_4_bit)); af1_4 = af1_4 * af1_4_LSB; DLOG(INFO) << "af1_4 = " << af1_4; af2_4 = static_cast(read_navigation_signed(data_jk_bits, af2_4_bit)); af2_4 = af2_4 * af2_4_LSB; DLOG(INFO) << "af2_4 = " << af2_4; spare_4 = static_cast(read_navigation_unsigned(data_jk_bits, spare_4_bit)); DLOG(INFO) << "spare_4 = " << spare_4; flag_ephemeris_4 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 5: /*Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/ /*Ionospheric correction*/ /*Az*/ ai0_5 = static_cast(read_navigation_unsigned(data_jk_bits, ai0_5_bit)); ai0_5 = ai0_5 * ai0_5_LSB; DLOG(INFO) << "ai0_5= " << ai0_5; ai1_5 = static_cast(read_navigation_signed(data_jk_bits, ai1_5_bit)); ai1_5 = ai1_5 * ai1_5_LSB; DLOG(INFO) << "ai1_5= " << ai1_5; ai2_5 = static_cast(read_navigation_signed(data_jk_bits, ai2_5_bit)); ai2_5 = ai2_5 * ai2_5_LSB; DLOG(INFO) << "ai2_5= " << ai2_5; /*Ionospheric disturbance flag*/ Region1_flag_5 = static_cast(read_navigation_bool(data_jk_bits, Region1_5_bit)); DLOG(INFO) << "Region1_flag_5= " << Region1_flag_5; Region2_flag_5 = static_cast(read_navigation_bool(data_jk_bits, Region2_5_bit)); DLOG(INFO) << "Region2_flag_5= " << Region2_flag_5; Region3_flag_5 = static_cast(read_navigation_bool(data_jk_bits, Region3_5_bit)); DLOG(INFO) << "Region3_flag_5= " << Region3_flag_5; Region4_flag_5 = static_cast(read_navigation_bool(data_jk_bits, Region4_5_bit)); DLOG(INFO) << "Region4_flag_5= " << Region4_flag_5; Region5_flag_5 = static_cast(read_navigation_bool(data_jk_bits, Region5_5_bit)); DLOG(INFO) << "Region5_flag_5= " << Region5_flag_5; BGD_E1E5a_5 = static_cast(read_navigation_signed(data_jk_bits, BGD_E1E5a_5_bit)); BGD_E1E5a_5 = BGD_E1E5a_5 * BGD_E1E5a_5_LSB; DLOG(INFO) << "BGD_E1E5a_5= " << BGD_E1E5a_5; BGD_E1E5b_5 = static_cast(read_navigation_signed(data_jk_bits, BGD_E1E5b_5_bit)); BGD_E1E5b_5 = BGD_E1E5b_5 * BGD_E1E5b_5_LSB; DLOG(INFO) << "BGD_E1E5b_5= " << BGD_E1E5b_5; E5b_HS_5 = static_cast(read_navigation_unsigned(data_jk_bits, E5b_HS_5_bit)); DLOG(INFO) << "E5b_HS_5= " << E5b_HS_5; E1B_HS_5 = static_cast(read_navigation_unsigned(data_jk_bits, E1B_HS_5_bit)); DLOG(INFO) << "E1B_HS_5= " << E1B_HS_5; E5b_DVS_5 = static_cast(read_navigation_unsigned(data_jk_bits, E5b_DVS_5_bit)); DLOG(INFO) << "E5b_DVS_5= " << E5b_DVS_5; E1B_DVS_5 = static_cast(read_navigation_unsigned(data_jk_bits, E1B_DVS_5_bit)); DLOG(INFO) << "E1B_DVS_5= " << E1B_DVS_5; /*GST*/ WN_5 = static_cast(read_navigation_unsigned(data_jk_bits, WN_5_bit)); DLOG(INFO) << "WN_5= " << WN_5; TOW_5 = static_cast(read_navigation_unsigned(data_jk_bits, TOW_5_bit)); DLOG(INFO) << "TOW_5= " << TOW_5; flag_TOW_5 = true; //set to false externally spare_5 = static_cast(read_navigation_unsigned(data_jk_bits, spare_5_bit)); DLOG(INFO) << "spare_5= " << spare_5; flag_iono_and_GST = true; //set to false externally flag_TOW_set = true; //set to false externally DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 6: /*Word type 6: GST-UTC conversion parameters*/ A0_6 = static_cast(read_navigation_signed(data_jk_bits, A0_6_bit)); A0_6 = A0_6 * A0_6_LSB; DLOG(INFO) << "A0_6= " << A0_6; A1_6 = static_cast(read_navigation_signed(data_jk_bits, A1_6_bit)); A1_6 = A1_6 * A1_6_LSB; DLOG(INFO) << "A1_6= " << A1_6; Delta_tLS_6 = static_cast(read_navigation_signed(data_jk_bits, Delta_tLS_6_bit)); DLOG(INFO) << "Delta_tLS_6= " << Delta_tLS_6; t0t_6 = static_cast(read_navigation_unsigned(data_jk_bits, t0t_6_bit)); t0t_6 = t0t_6 * t0t_6_LSB; DLOG(INFO) << "t0t_6= " << t0t_6; WNot_6 = static_cast(read_navigation_unsigned(data_jk_bits, WNot_6_bit)); DLOG(INFO) << "WNot_6= " << WNot_6; WN_LSF_6 = static_cast(read_navigation_unsigned(data_jk_bits, WN_LSF_6_bit)); DLOG(INFO) << "WN_LSF_6= " << WN_LSF_6; DN_6 = static_cast(read_navigation_unsigned(data_jk_bits, DN_6_bit)); DLOG(INFO) << "DN_6= " << DN_6; Delta_tLSF_6 = static_cast(read_navigation_signed(data_jk_bits, Delta_tLSF_6_bit)); DLOG(INFO) << "Delta_tLSF_6= " << Delta_tLSF_6; TOW_6 = static_cast(read_navigation_unsigned(data_jk_bits, TOW_6_bit)); DLOG(INFO) << "TOW_6= " << TOW_6; flag_TOW_6 = true; //set to false externally flag_utc_model = true; //set to false externally flag_TOW_set = true; //set to false externally DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 7: /*Word type 7: Almanac for SVID1 (1/2), almanac reference time and almanac reference week number*/ IOD_a_7 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_a_7_bit)); DLOG(INFO) << "IOD_a_7= " << IOD_a_7; WN_a_7 = static_cast(read_navigation_unsigned(data_jk_bits, WN_a_7_bit)); DLOG(INFO) << "WN_a_7= " << WN_a_7; t0a_7 = static_cast(read_navigation_unsigned(data_jk_bits, t0a_7_bit)); t0a_7 = t0a_7 * t0a_7_LSB; DLOG(INFO) << "t0a_7= " << t0a_7; SVID1_7 = static_cast(read_navigation_unsigned(data_jk_bits, SVID1_7_bit)); DLOG(INFO) << "SVID1_7= " << SVID1_7; DELTA_A_7 = static_cast(read_navigation_signed(data_jk_bits, DELTA_A_7_bit)); DELTA_A_7 = DELTA_A_7 * DELTA_A_7_LSB; DLOG(INFO) << "DELTA_A_7= " << DELTA_A_7; e_7 = static_cast(read_navigation_unsigned(data_jk_bits, e_7_bit)); e_7 = e_7 * e_7_LSB; DLOG(INFO) << "e_7= " << e_7; omega_7 = static_cast(read_navigation_signed(data_jk_bits, omega_7_bit)); omega_7 = omega_7 * omega_7_LSB; DLOG(INFO) << "omega_7= " << omega_7; delta_i_7 = static_cast(read_navigation_signed(data_jk_bits, delta_i_7_bit)); delta_i_7 = delta_i_7 * delta_i_7_LSB; DLOG(INFO) << "delta_i_7= " << delta_i_7; Omega0_7 = static_cast(read_navigation_signed(data_jk_bits, Omega0_7_bit)); Omega0_7 = Omega0_7 * Omega0_7_LSB; DLOG(INFO) << "Omega0_7= " << Omega0_7; Omega_dot_7 = static_cast(read_navigation_signed(data_jk_bits, Omega_dot_7_bit)); Omega_dot_7 = Omega_dot_7 * Omega_dot_7_LSB; DLOG(INFO) << "Omega_dot_7= " << Omega_dot_7; M0_7 = static_cast(read_navigation_signed(data_jk_bits, M0_7_bit)); M0_7 = M0_7 * M0_7_LSB; DLOG(INFO) << "M0_7= " << M0_7; flag_almanac_1 = true; DLOG(INFO) << "flag_tow_set"<< flag_TOW_set; break; case 8: /*Word type 8: Almanac for SVID1 (2/2) and SVID2 (1/2)*/ IOD_a_8 = static_cast(read_navigation_signed(data_jk_bits, IOD_a_8_bit)); DLOG(INFO) << "IOD_a_8= " << IOD_a_8; af0_8 = static_cast(read_navigation_signed(data_jk_bits, af0_8_bit)); af0_8 = af0_8 * af0_8_LSB; DLOG(INFO) << "af0_8= " << af0_8; af1_8 = static_cast(read_navigation_signed(data_jk_bits, af1_8_bit)); af1_8 = af1_8 * af1_8_LSB; DLOG(INFO) << "af1_8= " << af1_8; E5b_HS_8 = static_cast(read_navigation_unsigned(data_jk_bits, E5b_HS_8_bit)); DLOG(INFO) << "E5b_HS_8= " << E5b_HS_8; E1B_HS_8 = static_cast(read_navigation_unsigned(data_jk_bits, E1B_HS_8_bit)); DLOG(INFO) << "E1B_HS_8= " << E1B_HS_8; SVID2_8 = static_cast(read_navigation_unsigned(data_jk_bits, SVID2_8_bit)); DLOG(INFO) << "SVID2_8= " << SVID2_8; DELTA_A_8 = static_cast(read_navigation_signed(data_jk_bits, DELTA_A_8_bit)); DELTA_A_8 = DELTA_A_8 * DELTA_A_8_LSB; DLOG(INFO) << "DELTA_A_8= " << DELTA_A_8; e_8 = static_cast(read_navigation_unsigned(data_jk_bits, e_8_bit)); e_8 = e_8 * e_8_LSB; DLOG(INFO) << "e_8= " << e_8; omega_8 = static_cast(read_navigation_signed(data_jk_bits, omega_8_bit)); omega_8 = omega_8 * omega_8_LSB; DLOG(INFO) << "omega_8= " << omega_8; delta_i_8 = static_cast(read_navigation_signed(data_jk_bits, delta_i_8_bit)); delta_i_8 = delta_i_8 * delta_i_8_LSB; DLOG(INFO) << "delta_i_8= " << delta_i_8; Omega0_8 = static_cast(read_navigation_signed(data_jk_bits, Omega0_8_bit)); Omega0_8 = Omega0_8 * Omega0_8_LSB; DLOG(INFO) << "Omega0_8= " << Omega0_8; Omega_dot_8 = static_cast(read_navigation_signed(data_jk_bits, Omega_dot_8_bit)); Omega_dot_8 = Omega_dot_8 * Omega_dot_8_LSB; DLOG(INFO) << "Omega_dot_8= " << Omega_dot_8; flag_almanac_2 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 9: /*Word type 9: Almanac for SVID2 (2/2) and SVID3 (1/2)*/ IOD_a_9 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_a_9_bit)); DLOG(INFO) << "IOD_a_9= " << IOD_a_9; WN_a_9 = static_cast(read_navigation_unsigned(data_jk_bits, WN_a_9_bit)); DLOG(INFO) << "WN_a_9= " << WN_a_9; t0a_9 = static_cast(read_navigation_unsigned(data_jk_bits, t0a_9_bit)); t0a_9 = t0a_9 * t0a_9_LSB; DLOG(INFO) << "t0a_9= " << t0a_9; M0_9 = static_cast(read_navigation_signed(data_jk_bits, M0_9_bit)); M0_9 = M0_9 * M0_9_LSB; DLOG(INFO) << "M0_9= " << M0_9; af0_9 = static_cast(read_navigation_signed(data_jk_bits, af0_9_bit)); af0_9 = af0_9 * af0_9_LSB; DLOG(INFO) << "af0_9= " << af0_9; af1_9 = static_cast(read_navigation_signed(data_jk_bits, af1_9_bit)); af1_9 = af1_9 * af1_9_LSB; DLOG(INFO) << "af1_9= " << af1_9; E1B_HS_9 = static_cast(read_navigation_unsigned(data_jk_bits, E1B_HS_9_bit)); DLOG(INFO) << "E1B_HS_9= " << E1B_HS_9; E1B_HS_9 = static_cast(read_navigation_unsigned(data_jk_bits, E1B_HS_9_bit)); DLOG(INFO) << "E1B_HS_9= " << E1B_HS_9; SVID3_9 = static_cast(read_navigation_unsigned(data_jk_bits,SVID3_9_bit)); DLOG(INFO) << "SVID3_9= " << SVID3_9; DELTA_A_9 = static_cast(read_navigation_signed(data_jk_bits, DELTA_A_9_bit)); DELTA_A_9 = DELTA_A_9 * DELTA_A_9_LSB; DLOG(INFO) << "DELTA_A_9= " << DELTA_A_9; e_9 = static_cast(read_navigation_unsigned(data_jk_bits, e_9_bit)); e_9 = e_9 * e_9_LSB; DLOG(INFO) << "e_9= " << e_9; omega_9 = static_cast(read_navigation_signed(data_jk_bits, omega_9_bit)); omega_9 = omega_9 * omega_9_LSB; DLOG(INFO) << "omega_9= " << omega_9; delta_i_9 = static_cast(read_navigation_signed(data_jk_bits, delta_i_9_bit)); delta_i_9 = delta_i_9 * delta_i_9_LSB; DLOG(INFO) << "delta_i_9= " << delta_i_9; flag_almanac_3 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 10: /*Word type 10: Almanac for SVID3 (2/2) and GST-GPS conversion parameters*/ IOD_a_10 = static_cast(read_navigation_unsigned(data_jk_bits, IOD_a_10_bit)); DLOG(INFO) << "IOD_a_10= " << IOD_a_10; Omega0_10 = static_cast(read_navigation_signed(data_jk_bits, Omega0_10_bit)); Omega0_10 = Omega0_10 * Omega0_10_LSB; DLOG(INFO) << "Omega0_10= " << Omega0_10; Omega_dot_10 = static_cast(read_navigation_signed(data_jk_bits, Omega_dot_10_bit)); Omega_dot_10 = Omega_dot_10 * Omega_dot_10_LSB; DLOG(INFO) << "Omega_dot_10= " << Omega_dot_10 ; M0_10 = static_cast(read_navigation_signed(data_jk_bits, M0_10_bit)); M0_10 = M0_10 * M0_10_LSB; DLOG(INFO) << "M0_10= " << M0_10; af0_10 = static_cast(read_navigation_signed(data_jk_bits, af0_10_bit)); af0_10 = af0_10 * af0_10_LSB; DLOG(INFO) << "af0_10= " << af0_10; af1_10 = static_cast(read_navigation_signed(data_jk_bits, af1_10_bit)); af1_10 = af1_10 * af1_10_LSB; DLOG(INFO) << "af1_10= " << af1_10; E5b_HS_10 = static_cast(read_navigation_unsigned(data_jk_bits, E5b_HS_10_bit)); DLOG(INFO) << "E5b_HS_10= " << E5b_HS_10; E1B_HS_10 = static_cast(read_navigation_unsigned(data_jk_bits, E1B_HS_10_bit)); DLOG(INFO) << "E1B_HS_10= " << E1B_HS_10; A_0G_10 = static_cast(read_navigation_signed(data_jk_bits, A_0G_10_bit)); A_0G_10 = A_0G_10 * A_0G_10_LSB; flag_GGTO_1=true; DLOG(INFO) << "A_0G_10= " << A_0G_10; A_1G_10 = static_cast(read_navigation_signed(data_jk_bits, A_1G_10_bit)); A_1G_10 = A_1G_10 * A_1G_10_LSB; flag_GGTO_2=true; DLOG(INFO) << "A_1G_10= " << A_1G_10; t_0G_10 = static_cast(read_navigation_unsigned(data_jk_bits, t_0G_10_bit)); t_0G_10 = t_0G_10 * t_0G_10_LSB; flag_GGTO_3=true; DLOG(INFO) << "t_0G_10= " << t_0G_10; WN_0G_10 = static_cast(read_navigation_unsigned(data_jk_bits, WN_0G_10_bit)); flag_GGTO_4=true; DLOG(INFO) << "WN_0G_10= " << WN_0G_10; flag_almanac_4 = true; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; case 0: /*Word type 0: I/NAV Spare Word*/ Time_0 = static_cast(read_navigation_unsigned(data_jk_bits, Time_0_bit)); DLOG(INFO) << "Time_0= " << Time_0; WN_0 = static_cast(read_navigation_unsigned(data_jk_bits, WN_0_bit)); DLOG(INFO) << "WN_0= " << WN_0; TOW_0 = static_cast(read_navigation_unsigned(data_jk_bits, TOW_0_bit)); DLOG(INFO) << "TOW_0= " << TOW_0; DLOG(INFO) << "flag_tow_set" << flag_TOW_set; break; } return page_number; } gnss-sdr-0.0.6/src/core/system_parameters/sbas_satellite_correction.h0000644000175000017500000001057612576764164025500 0ustar carlescarles/*! * \file sbas_satellite_correction.h * \brief Interface of the SBAS satellite correction set based on SBAS RTKLIB functions * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SBAS_SATELLITE_CORRECTION_H_ #define GNSS_SDR_SBAS_SATELLITE_CORRECTION_H_ #include "sbas_time.h" struct Fast_Correction { Sbas_Time d_tof; // for fast corrections the time of applicability (tof) is defined as the time when the corresponding message was send double d_prc; double d_rrc; double d_dt; int d_udre; // UDRE int d_ai; int d_tlat; }; struct Long_Term_Correction { double d_trx; //!< Time when message was received int i_tapp; //!< Time of applicability (only valid if vel=1, equals the sent t0) int i_vel; //!< Use velocity corrections if vel=1 int d_iode; double d_dpos[3]; //!< position correction double d_dvel[3]; //!< velocity correction double d_daf0; //!< clock offset correction double d_daf1; //!< clock drift correction }; /*! * \brief Valid long and fast term SBAS corrections for one SV */ class Sbas_Satellite_Correction { public: int d_prn; Fast_Correction d_fast_correction; Long_Term_Correction d_long_term_correction; void print(std::ostream &out); void print_fast_correction(std::ostream &out); void print_long_term_correction(std::ostream &out); int apply_fast(double sample_stamp, double &pr, double &var); int apply_long_term_sv_pos(double sample_stamp, double sv_pos[], double &var); int apply_long_term_sv_clk(double sample_stamp, double &dts, double &var); bool alarm(); private: /* debug trace functions -----------------------------------------------------*/ void trace(int level, const char *format, ...); /* variance of fast correction (udre=UDRE+1) ---------------------------------*/ double varfcorr(int udre); /* fast correction degradation -----------------------------------------------*/ double degfcorr(int ai); /* long term correction ------------------------------------------------------*/ int sbslongcorr(double time_stamp, double *drs, double *ddts); /* fast correction -----------------------------------------------------------*/ int sbsfastcorr(double time_stamp, double *prc, double *var); /* sbas satellite ephemeris and clock correction ------------------------------- * correct satellite position and clock bias with sbas satellite corrections * args : long time_stamp I reception time stamp * double *rs IO sat position and corrected {x,y,z} (ecef) (m) * double *dts IO sat clock bias and corrected (s) * double *var O sat position and clock variance (m^2) * return : status (1:ok,0:no correction) * notes : before calling the function, sbas satellite correction parameters * in navigation data (nav->sbssat) must be set by callig * sbsupdatecorr(). * satellite clock correction include long-term correction and fast * correction. * sbas clock correction is usually based on L1C/A code. TGD or DCB has * to be considered for other codes *-----------------------------------------------------------------------------*/ int sbssatcorr(double time_stamp, double *rs, double *dts, double *var); }; #endif /* GNSS_SDR_SBAS_SATELLITE_CORRECTION_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_utc_model.cc0000644000175000017500000000256512576764164024243 0ustar carlescarles/* * \file gps_cnav_utc_model.h * \brief Interface of a GPS CNAV UTC MODEL storage * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_cnav_utc_model.h" #include Gps_CNAV_Utc_Model::Gps_CNAV_Utc_Model() { valid = false; d_A1 = 0; d_A0 = 0; d_t_OT = 0; i_WN_T = 0; d_DeltaT_LS = 0; i_WN_LSF = 0; i_DN = 0; d_DeltaT_LSF = 0; } gnss-sdr-0.0.6/src/core/system_parameters/sbas_ionospheric_correction.cc0000644000175000017500000004355012576764164026170 0ustar carlescarles/*! * \file sbas_ionospheric_correction.cc * \brief Implementation of the SBAS ionosphere correction set based on SBAS RTKLIB functions * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "sbas_ionospheric_correction.h" #include #include #include #include #include #include #include enum V_Log_Level {EVENT = 2, // logs important events which don't occur every update() call FLOW = 3, // logs the function calls of block processing functions MORE = 4}; // very detailed stuff void Sbas_Ionosphere_Correction::print(std::ostream &out) { for(std::vector::const_iterator it_band = d_bands.begin(); it_band != d_bands.end(); ++it_band) { int band = it_band - d_bands.begin(); out << "<> Band" << band << ":" << std::endl; for(std::vector::const_iterator it_igp = it_band->d_igps.begin(); it_igp != it_band->d_igps.end(); ++it_igp) { int igp = it_igp-it_band->d_igps.begin(); out << "<> -IGP" << igp << ":"; //std::cout << " valid=" << it_igp->d_valid; out << " t0=" << it_igp->t0; out << " lat=" << it_igp->d_latitude; out << " lon=" << it_igp->d_longitude; out << " give=" << it_igp->d_give; out << " delay=" << it_igp->d_delay; out << std::endl; } } } /* Applies SBAS ionosphric delay correction * \param[out] delay Slant ionospheric delay (L1) (m) * \param[out] var Variance of ionospheric delay (m^2) * \param[in] sample_stamp Sample stamp of observable on which the correction will be applied * \param[in] longitude_d Receiver's longitude in terms of WGS84 (degree) * \param[in] latitude_d Receiver's latitude in terms of WGS84 (degree) * \param[in] azimuth_d Satellite azimuth/elavation angle (rad). Azimuth is the angle of * the satellite from the users location measured clockwise from north * \param[in] elevation_d Elevation is the angle of the satellite from the user's location measured * with respect to the local-tangent-plane */ bool Sbas_Ionosphere_Correction::apply(double sample_stamp, double latitude_d, double longitude_d, double azimut_d, double elevation_d, double &delay, double &var) { const double GPS_PI = 3.1415926535898; //!< Pi as defined in IS-GPS-200E int result; double pos[3]; double azel[2]; // convert receiver position from degrees to rad pos[0] = latitude_d * GPS_PI / 180.0; pos[1] = longitude_d * GPS_PI / 180.0; pos[2] = 0; // is not used by sbsioncorr, for ionocorrection is a fixed earth radius assumed // convert satellite azimut and elevation from degrees to rad , use topocent to obtain it in pvt block azel[0] = azimut_d * GPS_PI / 180.0; azel[1] = elevation_d * GPS_PI / 180.0; result = sbsioncorr(sample_stamp, pos, azel, &delay, &var); return (bool)result; } /* geometric distance ---------------------------------------------------------- * compute geometric distance and receiver-to-satellite unit vector * args : double *rs I satellilte position (ecef at transmission) (m) * double *rr I receiver position (ecef at reception) (m) * double *e O line-of-sight vector (ecef) * return : geometric distance (m) (0>:error/no satellite position) * notes : distance includes sagnac effect correction *-----------------------------------------------------------------------------*/ //extern double geodist(const double *rs, const double *rr, double *e) //{ // double r; // int i; // // if (norm(rs,3)= 0) c += a[n]*b[n]; return c; } /* multiply matrix -----------------------------------------------------------*/ void Sbas_Ionosphere_Correction::matmul(const char *tr, int n, int k, int m, double alpha, const double *A, const double *B, double beta, double *C) { double d; int i, j, x, f = tr[0] == 'N' ? (tr[1] == 'N' ? 1 : 2) : (tr[1] == 'N' ? 3 : 4); for (i = 0; i < n; i++) for (j = 0; j < k; j++) { d = 0.0; switch (f) { case 1: for (x = 0; x < m; x++) d += A[i + x*n]*B[x + j*m]; break; case 2: for (x = 0; x < m; x++) d += A[i + x*n]*B[j + x*k]; break; case 3: for (x = 0; x < m; x++) d += A[x + i*m]*B[x + j*m]; break; case 4: for (x = 0; x < m; x++) d += A[x + i*m]*B[j + x*k]; break; } if (beta == 0.0) { C[i + j*n] = alpha*d; } else { C[i + j*n] = alpha*d + beta*C[i + j*n]; } } } /* ecef to local coordinate transfromation matrix ------------------------------ * compute ecef to local coordinate transfromation matrix * args : double *pos I geodetic position {lat,lon} (rad) * double *E O ecef to local coord transformation matrix (3x3) * return : none * notes : matrix stored by column-major order (fortran convention) *-----------------------------------------------------------------------------*/ void Sbas_Ionosphere_Correction::xyz2enu(const double *pos, double *E) { double sinp = sin(pos[0]), cosp = cos(pos[0]), sinl = sin(pos[1]), cosl = cos(pos[1]); E[0] = -sinl; E[3] = cosl; E[6] = 0.0; E[1] = -sinp*cosl; E[4] = -sinp*sinl; E[7] = cosp; E[2] = cosp*cosl; E[5] = cosp*sinl; E[8] = sinp; } /* transform ecef vector to local tangential coordinate ------------------------- * transform ecef vector to local tangential coordinate * args : double *pos I geodetic position {lat,lon} (rad) * double *r I vector in ecef coordinate {x,y,z} * double *e O vector in local tangental coordinate {e,n,u} * return : none *-----------------------------------------------------------------------------*/ void Sbas_Ionosphere_Correction::ecef2enu(const double *pos, const double *r, double *e) { double E[9]; xyz2enu(pos, E); matmul("NN", 3, 1, 3, 1.0, E, r, 0.0, e); } const double PI = 3.1415926535897932; /* pi */ /* satellite azimuth/elevation angle ------------------------------------------- * compute satellite azimuth/elevation angle * args : double *pos I geodetic position {lat,lon,h} (rad,m) * double *e I receiver-to-satellilte unit vevtor (ecef) * double *azel IO azimuth/elevation {az,el} (rad) (NULL: no output) * (0.0<=azel[0]<2*pi,-pi/2<=azel[1]<=pi/2) * return : elevation angle (rad) *-----------------------------------------------------------------------------*/ double Sbas_Ionosphere_Correction::satazel(const double *pos, const double *e, double *azel) { const double RE_WGS84 = 6378137.0; /* earth semimajor axis (WGS84) (m) */ double az = 0.0, el = PI/2.0, enu[3]; if (pos[2] > -RE_WGS84) { ecef2enu(pos, e, enu); az = dot(enu, enu, 2) < 1E-12 ? 0.0 : atan2(enu[0], enu[1]); if (az < 0.0) az += 2*PI; el = asin(enu[2]); } if (azel) { azel[0] = az; azel[1] = el; } return el; } /* debug trace function -----------------------------------------------------*/ void Sbas_Ionosphere_Correction::trace(int level, const char *format, ...) { va_list ap; char str[1000]; va_start(ap,format); vsprintf(str,format,ap); va_end(ap); VLOG(FLOW) << "<> " << std::string(str); } /* ionospheric pierce point position ------------------------------------------- * compute ionospheric pierce point (ipp) position and slant factor * args : double *pos I receiver position {lat,lon,h} (rad,m) * double *azel I azimuth/elevation angle {az,el} (rad) * double re I earth radius (km) * double hion I altitude of ionosphere (km) * double *posp O pierce point position {lat,lon,h} (rad,m) * return : slant factor * notes : see ref [2], only valid on the earth surface * fixing bug on ref [2] A.4.4.10.1 A-22,23 *-----------------------------------------------------------------------------*/ double Sbas_Ionosphere_Correction::ionppp(const double *pos, const double *azel, double re, double hion, double *posp) { double cosaz, rp, ap, sinap, tanap; const double D2R = (PI/180.0); /* deg to rad */ rp = re/(re + hion)*cos(azel[1]); ap = PI/2.0 - azel[1] - asin(rp); sinap = sin(ap); tanap = tan(ap); cosaz = cos(azel[0]); posp[0] = asin(sin(pos[0])*cos(ap) + cos(pos[0])*sinap*cosaz); if ((pos[0] > 70.0*D2R && tanap*cosaz > tan(PI/2.0 - pos[0])) || (pos[0] < -70.0*D2R && - tanap*cosaz > tan(PI/2.0 + pos[0]))) { posp[1] = pos[1] + PI - asin(sinap*sin(azel[0])/cos(posp[0])); } else { posp[1] = pos[1] + asin(sinap*sin(azel[0])/cos(posp[0])); } return 1.0 / sqrt(1.0 - rp*rp); } /* variance of ionosphere correction (give=GIVEI) --------------------------*/ double Sbas_Ionosphere_Correction::varicorr(int give) { const double var[15]={ 0.0084, 0.0333, 0.0749, 0.1331, 0.2079, 0.2994, 0.4075, 0.5322, 0.6735, 0.8315, 1.1974, 1.8709, 3.326, 20.787, 187.0826 }; return 0 <= give && give < 15 ? var[give]:0.0; } /* search igps ---------------------------------------------------------------*/ void Sbas_Ionosphere_Correction::searchigp(const double *pos, const Igp **igp, double *x, double *y) { int i; int latp[2]; int lonp[4]; const double R2D = (180.0/PI); /* rad to deg */ double lat = pos[0]*R2D; double lon = pos[1]*R2D; trace(4,"searchigp: pos=%.3f %.3f",pos[0]*R2D, pos[1]*R2D); // round the pierce point position to the next IGP grid point if (lon >= 180.0) lon -= 360.0; if (-55.0 <= lat && lat < 55.0) { latp[0] = (int)floor(lat/5.0)*5; latp[1] = latp[0] + 5; lonp[0] = lonp[1] = (int)floor(lon/5.0)*5; lonp[2] = lonp[3] = lonp[0] + 5; *x = (lon - lonp[0])/5.0; *y = (lat - latp[0])/5.0; } else { latp[0] = (int)floor((lat-5.0)/10.0)*10+5; latp[1] = latp[0] + 10; lonp[0] = lonp[1] = (int)floor(lon/10.0)*10; lonp[2] = lonp[3] = lonp[0] + 10; *x = (lon - lonp[0])/10.0; *y = (lat - latp[0])/10.0; if (75.0 <= lat && lat < 85.0) { lonp[1] = (int)floor(lon/90.0)*90; lonp[3] = lonp[1] + 90; } else if (-85.0 <= lat && lat < -75.0) { lonp[0] = (int)floor((lon - 50.0)/90.0)*90 + 40; lonp[2] = lonp[0] + 90; } else if (lat >= 85.0) { for (i = 0; i < 4; i++) lonp[i] = (int)floor(lon/90.0)*90; } else if (lat <- 85.0) { for (i = 0; i < 4; i++) lonp[i] = (int)floor((lon - 50.0)/90.0)*90 + 40; } } for (i = 0; i < 4; i++) if (lonp[i] == 180) lonp[i] = -180; // find the correction data for the grid points in latp[] and lonp[] // iterate over bands for (std::vector::const_iterator band_it = this->d_bands.begin(); band_it != d_bands.end(); ++band_it) { //VLOG(MORE) << "band=" << band_it-d_bands.begin() << std::endl; // iterate over IGPs in band_it for (std::vector::const_iterator igp_it = band_it->d_igps.begin(); igp_it != band_it->d_igps.end(); ++igp_it) { std::stringstream ss; int give = igp_it->d_give; ss << "IGP: give=" << give; if(give < 15) // test if valid correction data is sent for current IGP { int lat = igp_it->d_latitude; int lon = igp_it->d_longitude; ss << " lat=" << lat << " lon=" << lon; if (lat == latp[0] && lon == lonp[0]) igp[0] = igp_it.base(); else if (lat == latp[1] && lon == lonp[1]) igp[1] = igp_it.base(); else if (lat == latp[0] && lon == lonp[2]) igp[2] = igp_it.base(); else if (lat == latp[1] && lon == lonp[3]) igp[3] = igp_it.base(); } //VLOG(MORE) << ss.str(); } } //VLOG(MORE) << "igp[0:3]={" << igp[0] << "," << igp[1] << "," << igp[2] << "," << igp[3] << "}"; } /* sbas ionospheric delay correction ------------------------------------------- * compute sbas ionosphric delay correction * args : long sample_stamp I sample stamp of observable on which the correction will be applied * sbsion_t *ion I ionospheric correction data (implicit) * double *pos I receiver position {lat,lon,height} (rad/m) * double *azel I satellite azimuth/elavation angle (rad) * double *delay O slant ionospheric delay (L1) (m) * double *var O variance of ionospheric delay (m^2) * return : status (1:ok, 0:no correction) * notes : before calling the function, sbas ionosphere correction parameters * in navigation data (nav->sbsion) must be set by calling * sbsupdatecorr() *-----------------------------------------------------------------------------*/ int Sbas_Ionosphere_Correction::sbsioncorr(const double sample_stamp, const double *pos, const double *azel, double *delay, double *var) { const double re = 6378.1363; const double hion = 350.0; int err = 0; double fp; double posp[2]; double x = 0.0; double y = 0.0; double t; double w[4] = {0}; const Igp *igp[4] = {0}; /* {ws,wn,es,en} */ const double R2D = (180.0/PI); /* rad to deg */ trace(4, "sbsioncorr: pos=%.3f %.3f azel=%.3f %.3f", pos[0]*R2D, pos[1]*R2D, azel[0]*R2D, azel[1]*R2D); *delay = *var = 0.0; if (pos[2] < -100.0 || azel[1] <= 0) return 1; /* ipp (ionospheric pierce point) position */ fp = ionppp(pos, azel, re, hion, posp); /* search igps around ipp */ searchigp(posp, igp, &x, &y); VLOG(FLOW) << "<> SBAS iono correction:" << " igp[0]=" << igp[0] << " igp[1]=" << igp[1] << " igp[2]=" << igp[2] << " igp[3]=" << igp[3] << " x=" << x << " y=" << y; /* weight of igps */ if (igp[0] && igp[1] && igp[2] && igp[3]) { w[0] = (1.0 - x)*(1.0 - y); w[1] = (1.0 - x)*y; w[2] = x*(1.0 - y); w[3] = x*y; } else if (igp[0] && igp[1] && igp[2]) { w[1] = y; w[2] = x; if ((w[0] = 1.0 - w[1] - w[2]) < 0.0) err = 1; } else if (igp[0] && igp[2] && igp[3]) { w[0] = 1.0 - x; w[3] = y; if ((w[2] = 1.0 - w[0] -w[3]) < 0.0) err = 1; } else if (igp[0] && igp[1] && igp[3]) { w[0] = 1.0 - y; w[3] = x; if ((w[1] = 1.0 - w[0] - w[3]) < 0.0) err = 1; } else if (igp[1]&&igp[2]&&igp[3]) { w[1] = 1.0 - x; w[2] = 1.0 - y; if ((w[3] = 1.0 - w[1] - w[2]) < 0.0) err = 1; } else err = 1; if (err) { trace(2, "no sbas iono correction: lat=%3.0f lon=%4.0f", posp[0]*R2D, posp[1]*R2D); return 0; } for (int i = 0; i <4 ; i++) { if (!igp[i]) continue; t = (sample_stamp - igp[i]->t0); // time diff between now and reception of the igp data in seconds *delay += w[i]*igp[i]->d_delay; *var += w[i] * varicorr(igp[i]->d_give) * 9E-8 * fabs(t); } *delay *= fp; *var *= fp*fp; trace(5, "sbsioncorr: dion=%7.2f sig=%7.2f", *delay, sqrt(*var)); return 1; } gnss-sdr-0.0.6/src/core/system_parameters/MATH_CONSTANTS.h0000644000175000017500000001075512576764164022437 0ustar carlescarles/*! * \file MATH_CONSTANTS.h * \brief Defines useful mathematical constants and their scaled versions * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_MATH_CONSTANTS_H_ #define GNSS_SDR_MATH_CONSTANTS_H_ /* Constants for scaling the ephemeris found in the data message the format is the following: TWO_N5 -> 2^-5, TWO_P4 -> 2^4, PI_TWO_N43 -> Pi*2^-43, etc etc Additionally some of the PI*2^N terms are used in the tracking stuff TWO_PX ==> 2^X TWO_NX ==> 2^-X PI_TWO_NX ==> Pi*2^-X PI_TWO_PX ==> Pi*2^X ONE_PI_TWO_PX = (1/Pi)*2^X */ const double TWO_P4 = (16); //!< 2^4 const double TWO_P11 = (2048); //!< 2^11 const double TWO_P12 = (4096); //!< 2^12 const double TWO_P14 = (16384); //!< 2^14 const double TWO_P16 = (65536); //!< 2^16 const double TWO_P19 = (524288); //!< 2^19 const double TWO_P31 = (2147483648.0); //!< 2^31 const double TWO_P32 = (4294967296.0); //!< 2^32 this is too big for an int so add the x.0 const double TWO_P56 = (7.205759403792794e+016); //!< 2^56 const double TWO_P57 = (1.441151880758559e+017); //!< 2^57 const double TWO_N2 = (0.25); //!< 2^-2 const double TWO_N5 = (0.03125); //!< 2^-5 const double TWO_N8 = (0.00390625); //!< 2^-8 const double TWO_N9 = (0.001953125); //!< 2^-9 const double TWO_N11 = (4.882812500000000e-004); //!< 2^-11 const double TWO_N14 = (0.00006103515625); //!< 2^-14 const double TWO_N15 = (0.00003051757813); //!< 2^-15 const double TWO_N16 = (0.0000152587890625); //!< 2^-16 const double TWO_N19 = (1.907348632812500e-006); //!< 2^-19 const double TWO_N20 = (9.536743164062500e-007); //!< 2^-20 const double TWO_N21 = (4.768371582031250e-007); //!< 2^-21 const double TWO_N24 = (5.960464477539063e-008); //!< 2^-24 const double TWO_N25 = (2.980232238769531e-008); //!< 2^-25 const double TWO_N27 = (7.450580596923828e-009); //!< 2^-27 const double TWO_N29 = (1.862645149230957e-009); //!< 2^-29 const double TWO_N30 = (9.313225746154785e-010); //!< 2^-30 const double TWO_N31 = (4.656612873077393e-010); //!< 2^-31 const double TWO_N32 = (2.328306436538696e-010); //!< 2^-32 const double TWO_N33 = (1.164153218269348e-010); //!< 2^-33 const double TWO_N34 = (5.82076609134674e-011); //!< 2^-34 const double TWO_N35 = (2.91038304567337e-011); //!< 2^-35 const double TWO_N38 = (3.637978807091713e-012); //!< 2^-38 const double TWO_N43 = (1.136868377216160e-013); //!< 2^-43 const double TWO_N44 = (5.684341886080802e-14); //!< 2^-44 const double TWO_N46 = (1.4210854715202e-014); //!< 2^-46 const double TWO_N48 = (3.552713678800501e-15); //!< 2^-46 const double TWO_N50 = (8.881784197001252e-016); //!< 2^-50 const double TWO_N51 = (4.44089209850063e-016); //!< 2^-51 const double TWO_N55 = (2.775557561562891e-017); //!< 2^-55 const double TWO_N57 = (6.938893903907228e-18); //!< 2^-57 const double TWO_N59 = (1.73472347597681e-018); //!< 2^-59 const double TWO_N60 = (8.673617379884036e-19); //!< 2^-60 const double PI_TWO_N19 = (5.992112452678286e-006); //!< Pi*2^-19 const double PI_TWO_N43 = (3.571577341960839e-013); //!< Pi*2^-43 const double PI_TWO_N31 = (1.462918079267160e-009); //!< Pi*2^-31 const double PI_TWO_N38 = (1.142904749427469e-011); //!< Pi*2^-38 const double PI_TWO_N23 = (3.745070282923929e-007); //!< Pi*2^-23 #endif /* GNSS_SDR_MATH_CONSTANTS_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gps_acq_assist.cc0000644000175000017500000000302512576764164023403 0ustar carlescarles/*! * \file gps_acq_assist.cc * \brief Interface of a GPS RRLL ACQUISITION ASSISTACE storage * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_acq_assist.h" Gps_Acq_Assist::Gps_Acq_Assist() { i_satellite_PRN = 0; d_TOW = 0.0; d_Doppler0 = 0.0; d_Doppler1 = 0.0; dopplerUncertainty = 0.0; Code_Phase = 0.0; Code_Phase_int = 0.0; GPS_Bit_Number = 0.0; Code_Phase_window = 0.0; Azimuth = 0.0; Elevation = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/galileo_utc_model.cc0000644000175000017500000001061112576764164024046 0ustar carlescarles/* * \file galileo_utc_model.h * \brief Interface of a Galileo UTC MODEL storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_utc_model.h" #include Galileo_Utc_Model::Galileo_Utc_Model() { //valid = false; /*Word type 6: GST-UTC conversion parameters*/ A0_6 = 0; A1_6 = 0; Delta_tLS_6 = 0; t0t_6 = 0; WNot_6 = 0; WN_LSF_6 = 0; DN_6 = 0; Delta_tLSF_6 = 0; flag_utc_model = false; } double Galileo_Utc_Model::GST_to_UTC_time(double t_e, int WN) { double t_Utc; double t_Utc_daytime; double Delta_t_Utc = 0; // Determine if the effectivity time of the leap second event is in the past int weeksToLeapSecondEvent = WN_LSF_6 - (WN % 256); if ((weeksToLeapSecondEvent) >= 0) // is not in the past { //Detect if the effectivity time and user's time is within six hours = 6 * 60 *60 = 21600 s int secondOfLeapSecondEvent = DN_6 * 24 * 60 * 60; if (std::abs(t_e - secondOfLeapSecondEvent) > 21600) { /* 5.1.7a GST->UTC case a * Whenever the leap second adjusted time indicated by the WN_LSF and the DN values * is not in the past (relative to the user's present time), and the user's * present time does not fall in the time span which starts at six hours prior * to the effective time and ends at six hours after the effective time, * the GST/Utc relationship is given by */ Delta_t_Utc = Delta_tLS_6 + A0_6 + A1_6 * (t_e - t0t_6 + 604800 * static_cast((WN % 256) - WNot_6)); t_Utc_daytime = fmod(t_e - Delta_t_Utc, 86400); } else { /* 5.1.7b GST->UTC case b * Whenever the user's current time falls within the time span of six hours * prior to the leap second adjustment to six hours after the adjustment time, , * the effective time is computed according to the following equations: */ Delta_t_Utc = Delta_tLS_6 + A0_6 + A1_6 * (t_e - t0t_6 + 604800 * static_cast((WN % 256) - WNot_6)); double W = fmod(t_e - Delta_t_Utc - 43200, 86400) + 43200; t_Utc_daytime = fmod(W, 86400 + Delta_tLSF_6 - Delta_tLS_6); //implement something to handle a leap second event! } } else // the effectivity time is in the past { /* 5.1.7c GST->UTC case c * Whenever the leap second adjustment time, as indicated by the WN_LSF and DN values, * is in the past (relative to the user's current time) and the user's present time does not * fall in the time span which starts six hours prior to the leap second adjustment time and * ends six hours after the adjustment time, the effective time is computed according to * the following equation: */ Delta_t_Utc = Delta_tLSF_6 + A0_6 + A1_6 * (t_e - t0t_6 + 604800 * static_cast((WN % 256) - WNot_6)); t_Utc_daytime = fmod(t_e - Delta_t_Utc, 86400); } double secondsOfWeekBeforeToday = 86400 * floor(t_e / 86400); t_Utc = secondsOfWeekBeforeToday + t_Utc_daytime; return t_Utc; } gnss-sdr-0.0.6/src/core/system_parameters/gps_ref_location.h0000644000175000017500000000411212576764164023555 0ustar carlescarles/*! * \file gps_ref_location.h * \brief Interface of a GPS REFERENCE LOCATION storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_REF_LOCATION_H_ #define GNSS_SDR_GPS_REF_LOCATION_H_ #include "GPS_L1_CA.h" #include "boost/assign.hpp" #include /*! * \brief Interface of a GPS REFERENCE LOCATION storage * */ class Gps_Ref_Location { public: bool valid; double lat; double lon; double uncertainty; /*! * Default constructor */ Gps_Ref_Location(); template /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the Ref location on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("valid", valid); archive & make_nvp("lat", lat); archive & make_nvp("lon", lon); archive & make_nvp("uncertainty", uncertainty); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_ref_location.cc0000644000175000017500000000242412576764164023717 0ustar carlescarles/*! * \file gps_ref_location.cc * \brief Interface of a GPS REFERENCE LOCATION storage * * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_ref_location.h" Gps_Ref_Location::Gps_Ref_Location() { valid = false; lat = 0.0; lon = 0.0; uncertainty = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/GPS_L1_CA.h0000644000175000017500000002527212576764164021602 0ustar carlescarles/*! * \file GPS_L1_CA.h * \brief Defines system parameters for GPS L1 C/A signal and NAV data * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_L1_CA_H_ #define GNSS_SDR_GPS_L1_CA_H_ #include #include #include // std::pair #include #include "MATH_CONSTANTS.h" // Physical constants const double GPS_C_m_s = 299792458.0; //!< The speed of light, [m/s] const double GPS_C_m_ms = 299792.4580; //!< The speed of light, [m/ms] const double GPS_PI = 3.1415926535898; //!< Pi as defined in IS-GPS-200E const double GPS_TWO_PI = 6.283185307179586;//!< 2Pi as defined in IS-GPS-200E const double OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Earth rotation rate, [rad/s] const double GM = 3.986005e14; //!< Universal gravitational constant times the mass of the Earth, [m^3/s^2] const double F = -4.442807633e-10; //!< Constant, [s/(m)^(1/2)] // carrier and code frequencies const double GPS_L1_FREQ_HZ = 1.57542e9; //!< L1 [Hz] const double GPS_L1_CA_CODE_RATE_HZ = 1.023e6; //!< GPS L1 C/A code rate [chips/s] const double GPS_L1_CA_CODE_LENGTH_CHIPS = 1023.0; //!< GPS L1 C/A code length [chips] const double GPS_L1_CA_CODE_PERIOD = 0.001; //!< GPS L1 C/A code period [seconds] /*! * \brief Maximum Time-Of-Arrival (TOA) difference between satellites for a receiver operated on Earth surface is 20 ms * * According to the GPS orbit model described in [1] Pag. 32. * It should be taken into account to set the buffer size for the PRN start timestamp in the pseudoranges block. * [1] J. Bao-Yen Tsui, Fundamentals of Global Positioning System Receivers. A Software Approach, John Wiley & Sons, * Inc., Hoboken, NJ, 2nd edition, 2005. */ const double MAX_TOA_DELAY_MS = 20; //#define NAVIGATION_SOLUTION_RATE_MS 1000 // this cannot go here const double GPS_STARTOFFSET_ms = 68.802; //[ms] Initial sign. travel time (this cannot go here) // NAVIGATION MESSAGE DEMODULATION AND DECODING #define GPS_PREAMBLE {1, 0, 0, 0, 1, 0, 1, 1} const int GPS_CA_PREAMBLE_LENGTH_BITS = 8; const int GPS_CA_TELEMETRY_RATE_BITS_SECOND = 50; //!< NAV message bit rate [bits/s] const int GPS_CA_TELEMETRY_RATE_SYMBOLS_SECOND = GPS_CA_TELEMETRY_RATE_BITS_SECOND*20; //!< NAV message bit rate [symbols/s] const int GPS_WORD_LENGTH = 4; //!< CRC + GPS WORD (-2 -1 0 ... 29) Bits = 4 bytes const int GPS_SUBFRAME_LENGTH = 40; //!< GPS_WORD_LENGTH x 10 = 40 bytes const int GPS_SUBFRAME_BITS = 300; //!< Number of bits per subframe in the NAV message [bits] const int GPS_SUBFRAME_SECONDS = 6; //!< Subframe duration [seconds] const int GPS_WORD_BITS = 30; //!< Number of bits per word in the NAV message [bits] // GPS NAVIGATION MESSAGE STRUCTURE // NAVIGATION MESSAGE FIELDS POSITIONS (from IS-GPS-200E Appendix II) // SUBFRAME 1-5 (TLM and HOW) const std::vector > TOW( { {31,17} } ); const std::vector > INTEGRITY_STATUS_FLAG({{23,1}}); const std::vector > ALERT_FLAG({{48,1}}); const std::vector > ANTI_SPOOFING_FLAG({{49,1}}); const std::vector > SUBFRAME_ID({{50,3}}); // SUBFRAME 1 const std::vector> GPS_WEEK({{61,10}}); const std::vector> CA_OR_P_ON_L2({{71,2}}); //* const std::vector> SV_ACCURACY({{73,4}}); const std::vector> SV_HEALTH ({{77,6}}); const std::vector> L2_P_DATA_FLAG ({{91,1}}); const std::vector> T_GD({{197,8}}); const double T_GD_LSB = TWO_N31; const std::vector> IODC({{83,2},{211,8}}); const std::vector> T_OC({{219,16}}); const double T_OC_LSB = TWO_P4; const std::vector> A_F2({{241,8}}); const double A_F2_LSB = TWO_N55; const std::vector> A_F1({{249,16}}); const double A_F1_LSB = TWO_N43; const std::vector> A_F0({{271,22}}); const double A_F0_LSB = TWO_N31; // SUBFRAME 2 const std::vector> IODE_SF2({{61,8}}); const std::vector> C_RS({{69,16}}); const double C_RS_LSB = TWO_N5; const std::vector> DELTA_N({{91,16}}); const double DELTA_N_LSB = PI_TWO_N43; const std::vector> M_0({{107,8},{121,24}}); const double M_0_LSB = PI_TWO_N31; const std::vector> C_UC({{151,16}}); const double C_UC_LSB = TWO_N29; const std::vector> E({{167,8},{181,24}}); const double E_LSB = TWO_N33; const std::vector> C_US({{211,16}}); const double C_US_LSB = TWO_N29; const std::vector> SQRT_A({{227,8},{241,24}}); const double SQRT_A_LSB = TWO_N19; const std::vector> T_OE({{271,16}}); const double T_OE_LSB = TWO_P4; const std::vector> FIT_INTERVAL_FLAG({{271,1}}); const std::vector> AODO({{272,5}}); const int AODO_LSB = 900; // SUBFRAME 3 const std::vector> C_IC({{61,16}}); const double C_IC_LSB = TWO_N29; const std::vector> OMEGA_0({{77,8},{91,24}}); const double OMEGA_0_LSB = PI_TWO_N31; const std::vector> C_IS({{121,16}}); const double C_IS_LSB = TWO_N29; const std::vector> I_0({{137,8},{151,24}}); const double I_0_LSB = PI_TWO_N31; const std::vector> C_RC({{181,16}}); const double C_RC_LSB = TWO_N5; const std::vector> OMEGA({{197,8},{211,24}}); const double OMEGA_LSB = PI_TWO_N31; const std::vector> OMEGA_DOT({{241,24}}); const double OMEGA_DOT_LSB = PI_TWO_N43; const std::vector> IODE_SF3({{271,8}}); const std::vector> I_DOT({{279,14}}); const double I_DOT_LSB = PI_TWO_N43; // SUBFRAME 4-5 const std::vector> SV_DATA_ID({{61,2}}); const std::vector> SV_PAGE({{63,6}}); // SUBFRAME 4 //! \todo read all pages of subframe 4 // Page 18 - Ionospheric and UTC data const std::vector> ALPHA_0({{69,8}}); const double ALPHA_0_LSB = TWO_N30; const std::vector> ALPHA_1({{77,8}}); const double ALPHA_1_LSB = TWO_N27; const std::vector> ALPHA_2({{91,8}}); const double ALPHA_2_LSB = TWO_N24; const std::vector> ALPHA_3({{99,8}}); const double ALPHA_3_LSB = TWO_N24; const std::vector> BETA_0({{107,8}}); const double BETA_0_LSB = TWO_P11; const std::vector> BETA_1({{121,8}}); const double BETA_1_LSB = TWO_P14; const std::vector> BETA_2({{129,8}}); const double BETA_2_LSB = TWO_P16; const std::vector> BETA_3({{137,8}}); const double BETA_3_LSB = TWO_P16; const std::vector> A_1({{151,24}}); const double A_1_LSB = TWO_N50; const std::vector> A_0({{181,24},{211,8}}); const double A_0_LSB = TWO_N30; const std::vector> T_OT({{219,8}}); const double T_OT_LSB = TWO_P12; const std::vector> WN_T({{227,8}}); const double WN_T_LSB = 1; const std::vector> DELTAT_LS({{241,8}}); const double DELTAT_LS_LSB = 1; const std::vector> WN_LSF({{249,8}}); const double WN_LSF_LSB = 1; const std::vector> DN({{257,8}}); const double DN_LSB = 1; const std::vector> DELTAT_LSF({{271,8}}); const double DELTAT_LSF_LSB = 1; // Page 25 - Antispoofing, SV config and SV health (PRN 25 -32) const std::vector> HEALTH_SV25({{229,6}}); const std::vector> HEALTH_SV26({{241,6}}); const std::vector> HEALTH_SV27({{247,6}}); const std::vector> HEALTH_SV28({{253,6}}); const std::vector> HEALTH_SV29({{259,6}}); const std::vector> HEALTH_SV30({{271,6}}); const std::vector> HEALTH_SV31({{277,6}}); const std::vector> HEALTH_SV32({{283,6}}); // SUBFRAME 5 //! \todo read all pages of subframe 5 // page 25 - Health (PRN 1 - 24) const std::vector> T_OA({{69,8}}); const double T_OA_LSB = TWO_P12; const std::vector> WN_A({{77,8}}); const std::vector> HEALTH_SV1({{91,6}}); const std::vector> HEALTH_SV2({{97,6}}); const std::vector> HEALTH_SV3({{103,6}}); const std::vector> HEALTH_SV4({{109,6}}); const std::vector> HEALTH_SV5({{121,6}}); const std::vector> HEALTH_SV6({{127,6}}); const std::vector> HEALTH_SV7({{133,6}}); const std::vector> HEALTH_SV8({{139,6}}); const std::vector> HEALTH_SV9({{151,6}}); const std::vector> HEALTH_SV10({{157,6}}); const std::vector> HEALTH_SV11({{163,6}}); const std::vector> HEALTH_SV12({{169,6}}); const std::vector> HEALTH_SV13({{181,6}}); const std::vector> HEALTH_SV14({{187,6}}); const std::vector> HEALTH_SV15({{193,6}}); const std::vector> HEALTH_SV16({{199,6}}); const std::vector> HEALTH_SV17({{211,6}}); const std::vector> HEALTH_SV18({{217,6}}); const std::vector> HEALTH_SV19({{223,6}}); const std::vector> HEALTH_SV20({{229,6}}); const std::vector> HEALTH_SV21({{241,6}}); const std::vector> HEALTH_SV22({{247,6}}); const std::vector> HEALTH_SV23({{253,6}}); const std::vector> HEALTH_SV24({{259,6}}); #endif /* GNSS_SDR_GPS_L1_CA_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gps_iono.cc0000644000175000017500000000263712576764164022225 0ustar carlescarles/*! * \file gps_iono.cc * \brief Interface of a GPS IONOSPHERIC MODEL storage * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_iono.h" Gps_Iono::Gps_Iono() { valid = false; d_alpha0 = 0.0; d_alpha1 = 0.0; d_alpha2 = 0.0; d_alpha3 = 0.0; d_beta0 = 0.0; d_beta1 = 0.0; d_beta2 = 0.0; d_beta3 = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/sbas_time.h0000644000175000017500000001347112576764164022216 0ustar carlescarles/*! * \file sbas_time.h * \brief Interface and implementation of classes to handle and relate sample stamp and GPS time based time scales * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SBAS_TIME_H_ #define GNSS_SDR_SBAS_TIME_H_ #include #include #include #define EVENT 2 // logs important events which don't occur every update() call #define FLOW 3 // logs the function calls of block processing functions class Sbas_Time_Relation { public: Sbas_Time_Relation() { i_gps_week = 0; d_delta_sec = 0; b_valid = false; VLOG(FLOW) << "<> new invalid time relation: i_gps_week=" << i_gps_week << " d_delta_sec=" << d_delta_sec; } Sbas_Time_Relation(double time_stamp_sec, int gps_week, double gps_sec) { i_gps_week = gps_week; d_delta_sec = gps_sec - time_stamp_sec; b_valid = true; VLOG(FLOW) << "<> new time relation: i_gps_week=" << i_gps_week << " d_delta_sec=" << d_delta_sec; } bool to_gps_time(double time_stamp_sec, int &gps_week, double &gps_sec) { int delta_weeks = int(trunc(time_stamp_sec + d_delta_sec))/604800; gps_sec = time_stamp_sec + d_delta_sec - delta_weeks*604800; gps_week = i_gps_week + delta_weeks; VLOG(FLOW) << "<> to gps time: time_stamp_sec=" << time_stamp_sec << " gps_week=" << gps_week << " gps_sec=" << gps_sec; return b_valid; } bool to_sample_stamp(int gps_week, double gps_sec, double &time_stamp_sec) { time_stamp_sec = (gps_sec - d_delta_sec) + (gps_week - i_gps_week)*604800; VLOG(FLOW) << "<> to gps time: gps_week=" << gps_week << " gps_sec=" << gps_sec << " time_stamp_sec=" << time_stamp_sec; return b_valid; } bool is_valid() { return b_valid; } private: int i_gps_week; double d_delta_sec; bool b_valid; }; /*! * \brief Sbas_Time relates the relative sample stamp time scale with the absolute GPS time scale. * There are three different states for a Sbas_Time object: * - only relative time (sample stamp) is known * - only absolute time (gps time) is known * - absolute and relative time and their relation is known */ class Sbas_Time { public: enum Sbas_Time_State {RELATIVE, /*ABSOLUTE,*/ RELATED, UNDEFINED}; Sbas_Time() { e_state = UNDEFINED; i_gps_week = 0; d_gps_sec = 0; d_time_stamp_sec = 0; } Sbas_Time(double time_stamp_sec) { d_time_stamp_sec = time_stamp_sec; i_gps_week = 0; d_gps_sec = 0; e_state = RELATIVE; } /* Sbas_Time(int gps_week, double gps_sec) { i_gps_week = gps_week; d_gps_sec = gps_sec; d_time_stamp_sec = 0; e_state = ABSOLUTE; }*/ Sbas_Time(double time_stamp_sec, Sbas_Time_Relation relation) { if(relation.is_valid()) { // construct a RELATED object d_time_stamp_sec = time_stamp_sec; relation.to_gps_time(d_time_stamp_sec, i_gps_week, d_gps_sec); e_state = RELATED; } else { // construct a RELATIVE object *this = Sbas_Time(time_stamp_sec); VLOG(FLOW) << "<> create RELATIVE time (invalid relation): time_stamp_sec=" << time_stamp_sec; } } /*Sbas_Time(int gps_week, double gps_sec, Sbas_Time_Relation relation) { i_gps_week = gps_week; d_gps_sec = gps_sec; relation.to_sample_stamp(gps_week, gps_sec, d_time_stamp_sec); e_state = RELATED; }*/ void relate(Sbas_Time_Relation sbas_time_realtion) { switch (e_state) { case RELATIVE: *this = Sbas_Time(d_time_stamp_sec, sbas_time_realtion); break; //case ABSOLUTE: return Sbas_Time(i_gps_week, d_gps_sec, sbas_time_realtion); break; case RELATED: LOG(INFO) << "Relating an already related Sbas_Time object is not possible"; break; case UNDEFINED: std::cerr << "Sbas_Time object state undefined" << std::endl; break; default: std::cerr << "Sbas_Time object state not known" << std::endl; break; } return; } double get_time_stamp() { return d_time_stamp_sec; //return (e_state == RELATIVE || e_state == RELATED); } bool get_gps_time(int &gps_week, double &gps_sec) { gps_week = i_gps_week; gps_sec = d_gps_sec; return (/*e_state == ABSOLUTE ||*/ e_state == RELATED); } bool is_only_relativ() { return e_state == RELATIVE; } //bool is_only_absolute() {return e_state == ABSOLUTE;} bool is_related() { return e_state == RELATED; } Sbas_Time_State get_state() { return e_state; } private: Sbas_Time_State e_state; double d_time_stamp_sec; int i_gps_week; double d_gps_sec; }; #endif /* GNSS_SDR_SBAS_TIME_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gnss_satellite.h0000644000175000017500000000610112576764164023260 0ustar carlescarles/*! * \file gnss_satellite.h * \brief Interface of the Gnss_Satellite class * \author Carles Fernandez-Prades, 2012. cfernandez(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_SATELLITE_H_ #define GNSS_SDR_GNSS_SATELLITE_H_ #include #include #include #include /*! * \brief This class represents a GNSS satellite. * * It contains information about the space vehicles currently operational * of GPS, Glonass, SBAS and Galileo constellations. */ class Gnss_Satellite { public: Gnss_Satellite(); //!< Default Constructor. Gnss_Satellite(const std::string& system_, unsigned int PRN_); //!< Concrete GNSS satellite Constructor. ~Gnss_Satellite(); //!< Default Destructor. unsigned int get_PRN() const; //!< Gets satellite's PRN std::string get_system() const; //!< Gets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Beidou"} std::string get_system_short() const; //!< Gets the satellite system {"G", "R", "SBAS", "E", "C"} std::string get_block() const; //!< Gets the satellite block. If GPS, returns {"IIA", "IIR", "IIR-M", "IIF"} std::string what_block(const std::string& system_, unsigned int PRN_); //!< Gets the block of a given satellite friend bool operator== (const Gnss_Satellite &, const Gnss_Satellite &); //!< operator== for comparison friend std::ostream& operator<<(std::ostream &, const Gnss_Satellite &); //!< operator<< for pretty printing //Gnss_Satellite& operator=(const Gnss_Satellite &); private: unsigned int PRN; std::string system; std::map satelliteSystem; std::string block; signed int rf_link; void set_system(const std::string& system); // Sets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Beidou"}. void set_PRN(unsigned int PRN); // Sets satellite's PRN void set_block(const std::string& system_, unsigned int PRN_ ); std::set system_set; // = {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}; void reset(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/galileo_ephemeris.h0000644000175000017500000001565612576764164023734 0ustar carlescarles/*! * \file galileo_ephemeris.h * \brief Interface of a Galileo EPHEMERIS storage * \author Javier Arribas, 2013. jarribas(at)cttc.es, * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_EPHEMERIS_H_ #define GNSS_SDR_GALILEO_EPHEMERIS_H_ #include #include #include #include #include "Galileo_E1.h" /*! * \brief This class is a storage and orbital model functions for the Galileo SV ephemeris data as described in Galileo ICD paragraph 5.1.1 * (See http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf ) * */ class Galileo_Ephemeris { public: /* Galileo ephemeris are 16 parameters and here are reported following the ICD order, paragraph 5.1.1. The number in the name after underscore (_1, _2, _3 and so on) refers to the page were we can find that parameter */ bool flag_all_ephemeris; int IOD_ephemeris; int IOD_nav_1; int SV_ID_PRN_4; double M0_1; //!< Mean anomaly at reference time [semi-circles] double delta_n_3; //!< Mean motion difference from computed value [semi-circles/sec] double e_1; //!< Eccentricity double A_1; //!< Square root of the semi-major axis [metres^1/2] double OMEGA_0_2; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] double i_0_2; //!< Inclination angle at reference time [semi-circles] double omega_2; //!< Argument of perigee [semi-circles] double OMEGA_dot_3; //!< Rate of right ascension [semi-circles/sec] double iDot_2; //!< Rate of inclination angle [semi-circles/sec] double C_uc_3; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] double C_us_3; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] double C_rc_3; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] double C_rs_3; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] double C_ic_4; //!< Amplitude of the cosine harmonic correction term to the angle of inclination [radians] double C_is_4; //!< Amplitude of the sine harmonic correction term to the angle of inclination [radians] double t0e_1; //!< Ephemeris reference time [s] /*Clock correction parameters*/ double t0c_4; //!< Clock correction data reference Time of Week [sec] double af0_4; //!< SV clock bias correction coefficient [s] double af1_4; //!< SV clock drift correction coefficient [s/s] double af2_4; //!< SV clock drift rate correction coefficient [s/s^2] /*GST*/ //Not belong to ephemeris set (page 1 to 4) double WN_5; //!< Week number double TOW_5; //!< Time of Week double Galileo_satClkDrift; double Galileo_dtr; //!< relativistic clock correction term // SV status double SISA_3; double E5b_HS_5; //!< E5b Signal Health Status double E1B_HS_5; //!< E1B Signal Health Status double E5b_DVS_5; //!< E5b Data Validity Status double E1B_DVS_5; //!< E1B Data Validity Status double BGD_E1E5a_5; //!< E1-E5a Broadcast Group Delay [s] double BGD_E1E5b_5; //!< E1-E5b Broadcast Group Delay [s] // satellite positions double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). // Satellite velocity double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] unsigned int i_satellite_PRN; //!< SV PRN NUMBER void satellitePosition(double transmitTime); //!< Computes the ECEF SV coordinates and ECEF velocity double Galileo_System_Time(double WN, double TOW); //!< Galileo System Time (GST), ICD paragraph 5.1.2 double sv_clock_drift(double transmitTime); //!< Satellite Time Correction Algorithm, ICD 5.1.4 double sv_clock_relativistic_term(double transmitTime); //!< Satellite Time Correction Algorithm, ICD 5.1.4 Galileo_Ephemeris(); template /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; archive & make_nvp("i_satellite_PRN",i_satellite_PRN); archive & make_nvp("M0_1", M0_1); archive & make_nvp("e_1", e_1); archive & make_nvp("A_1", A_1); archive & make_nvp("OMEGA_0_2", OMEGA_0_2); archive & make_nvp("i_0_2", i_0_2); archive & make_nvp("omega_2", omega_2); archive & make_nvp("OMEGA_dot_3", OMEGA_dot_3); archive & make_nvp("iDot_2", iDot_2); archive & make_nvp("C_uc_3", C_uc_3); archive & make_nvp("C_us_3", C_us_3); archive & make_nvp("C_rc_3", C_rc_3); archive & make_nvp("C_rs_3", C_rs_3); archive & make_nvp("C_ic_4", C_ic_4); archive & make_nvp("C_is_4", C_is_4); archive & make_nvp("t0e_1", t0e_1); archive & make_nvp("t0c_4", t0c_4); archive & make_nvp("af0_4", af0_4); archive & make_nvp("af1_4", af1_4); archive & make_nvp("af2_4", af2_4); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_navigation_message.cc0000644000175000017500000010261012576764164025114 0ustar carlescarles/*! * \file gps_navigation_message.cc * \brief Implementation of a GPS NAV Data message decoder as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2011. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_navigation_message.h" #include #include "boost/date_time/posix_time/posix_time.hpp" void Gps_Navigation_Message::reset() { b_valid_ephemeris_set_flag = false; d_TOW = 0; d_TOW_SF1 = 0; d_TOW_SF2 = 0; d_TOW_SF3 = 0; d_TOW_SF4 = 0; d_TOW_SF5 = 0; d_IODE_SF2 = 0; d_IODE_SF3 = 0; d_Crs = 0; d_Delta_n = 0; d_M_0 = 0; d_Cuc = 0; d_e_eccentricity = 0; d_Cus = 0; d_sqrt_A = 0; d_Toe = 0; d_Toc = 0; d_Cic = 0; d_OMEGA0 = 0; d_Cis = 0; d_i_0 = 0; d_Crc = 0; d_OMEGA = 0; d_OMEGA_DOT = 0; d_IDOT = 0; i_code_on_L2 = 0; i_GPS_week = 0; b_L2_P_data_flag = false; i_SV_accuracy = 0; i_SV_health = 0; d_TGD = 0; d_IODC = -1; i_AODO = 0; b_fit_interval_flag = false; d_spare1 = 0; d_spare2 = 0; d_A_f0 = 0; d_A_f1 = 0; d_A_f2 = 0; //clock terms //d_master_clock=0; d_dtr = 0; d_satClkCorr = 0; d_satClkDrift = 0; // satellite positions d_satpos_X = 0; d_satpos_Y = 0; d_satpos_Z = 0; // info i_channel_ID = 0; i_satellite_PRN = 0; // time synchro d_subframe_timestamp_ms = 0; // flags b_alert_flag = false; b_integrity_status_flag = false; b_antispoofing_flag = false; // Ionosphere and UTC flag_iono_valid = false; flag_utc_model_valid = false; d_alpha0 = 0; d_alpha1 = 0; d_alpha2 = 0; d_alpha3 = 0; d_beta0 = 0; d_beta1 = 0; d_beta2 = 0; d_beta3 = 0; d_A1 = 0; d_A0 = 0; d_t_OT = 0; i_WN_T = 0; d_DeltaT_LS = 0; i_WN_LSF = 0; i_DN = 0; d_DeltaT_LSF= 0; //Almanac d_Toa = 0; i_WN_A = 0; for (int i=1; i < 32; i++ ) { almanacHealth[i] = 0; } // Satellite velocity d_satvel_X = 0; d_satvel_Y = 0; d_satvel_Z = 0; //Plane A (info from http://www.navcen.uscg.gov/?Do=constellationStatus) satelliteBlock[9] = "IIA"; satelliteBlock[31] = "IIR-M"; satelliteBlock[8] = "IIA"; satelliteBlock[7] = "IIR-M"; satelliteBlock[27] = "IIA"; //Plane B satelliteBlock[16] = "IIR"; satelliteBlock[25] = "IIF"; satelliteBlock[28] = "IIR"; satelliteBlock[12] = "IIR-M"; satelliteBlock[30] = "IIA"; //Plane C satelliteBlock[29] = "IIR-M"; satelliteBlock[3] = "IIA"; satelliteBlock[19] = "IIR"; satelliteBlock[17] = "IIR-M"; satelliteBlock[6] = "IIA"; //Plane D satelliteBlock[2] = "IIR"; satelliteBlock[1] = "IIF"; satelliteBlock[21] = "IIR"; satelliteBlock[4] = "IIA"; satelliteBlock[11] = "IIR"; satelliteBlock[24] = "IIA"; // Decommissioned from active service on 04 Nov 2011 //Plane E satelliteBlock[20] = "IIR"; satelliteBlock[22] = "IIR"; satelliteBlock[5] = "IIR-M"; satelliteBlock[18] = "IIR"; satelliteBlock[32] = "IIA"; satelliteBlock[10] = "IIA"; //Plane F satelliteBlock[14] = "IIR"; satelliteBlock[15] = "IIR-M"; satelliteBlock[13] = "IIR"; satelliteBlock[23] = "IIR"; satelliteBlock[26] = "IIA"; } Gps_Navigation_Message::Gps_Navigation_Message() { reset(); } void Gps_Navigation_Message::print_gps_word_bytes(unsigned int GPS_word) { std::cout << " Word ="; std::cout << std::bitset<32>(GPS_word); std::cout << std::endl; } bool Gps_Navigation_Message::read_navigation_bool(std::bitset bits, const std::vector> parameter) { bool value; if (bits[GPS_SUBFRAME_BITS - parameter[0].first] == 1) { value = true; } else { value = false; } return value; } unsigned long int Gps_Navigation_Message::read_navigation_unsigned(std::bitset bits, const std::vector> parameter) { unsigned long int value = 0; int num_of_slices = parameter.size(); for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left if (bits[GPS_SUBFRAME_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } return value; } signed long int Gps_Navigation_Message::read_navigation_signed(std::bitset bits, const std::vector> parameter) { signed long int value = 0; int num_of_slices = parameter.size(); // Discriminate between 64 bits and 32 bits compiler int long_int_size_bytes = sizeof(signed long int); if (long_int_size_bytes == 8) // if a long int takes 8 bytes, we are in a 64 bits system { // read the MSB and perform the sign extension if (bits[GPS_SUBFRAME_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFFFFFFFFFF; //64 bits variable } else { value &= 0; } for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left value &= 0xFFFFFFFFFFFFFFFE; //reset the corresponding bit (for the 64 bits variable) if (bits[GPS_SUBFRAME_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } } else // we assume we are in a 32 bits system { // read the MSB and perform the sign extension if (bits[GPS_SUBFRAME_BITS - parameter[0].first] == 1) { value ^= 0xFFFFFFFF; } else { value &= 0; } for (int i = 0; i < num_of_slices; i++) { for (int j = 0; j < parameter[i].second; j++) { value <<= 1; //shift left value &= 0xFFFFFFFE; //reset the corresponding bit if (bits[GPS_SUBFRAME_BITS - parameter[i].first - j] == 1) { value += 1; // insert the bit } } } } return value; } double Gps_Navigation_Message::check_t(double time) { double corrTime; double half_week = 302400; // seconds corrTime = time; if (time > half_week) { corrTime = time - 2 * half_week; } else if (time < -half_week) { corrTime = time + 2 * half_week; } return corrTime; } // 20.3.3.3.3.1 User Algorithm for SV Clock Correction. double Gps_Navigation_Message::sv_clock_correction(double transmitTime) { double dt; dt = check_t(transmitTime - d_Toc); d_satClkCorr = (d_A_f2 * dt + d_A_f1) * dt + d_A_f0 + d_dtr; double correctedTime = transmitTime - d_satClkCorr; return correctedTime; } void Gps_Navigation_Message::satellitePosition(double transmitTime) { double tk; double a; double n; double n0; double M; double E; double E_old; double dE; double nu; double phi; double u; double r; double i; double Omega; // Find satellite's position ---------------------------------------------- // Restore semi-major axis a = d_sqrt_A * d_sqrt_A; // Time from ephemeris reference epoch tk = check_t(transmitTime - d_Toe); // Computed mean motion n0 = sqrt(GM / (a * a * a)); // Corrected mean motion n = n0 + d_Delta_n; // Mean anomaly M = d_M_0 + n * tk; // Reduce mean anomaly to between 0 and 2pi M = fmod((M + 2 * GPS_PI), (2 * GPS_PI)); // Initial guess of eccentric anomaly E = M; // --- Iteratively compute eccentric anomaly ---------------------------- for (int ii = 1; ii < 20; ii++) { E_old = E; E = M + d_e_eccentricity * sin(E); dE = fmod(E - E_old, 2 * GPS_PI); if (fabs(dE) < 1e-12) { //Necessary precision is reached, exit from the loop break; } } // Compute relativistic correction term d_dtr = F * d_e_eccentricity * d_sqrt_A * sin(E); // Compute the true anomaly double tmp_Y = sqrt(1.0 - d_e_eccentricity * d_e_eccentricity) * sin(E); double tmp_X = cos(E) - d_e_eccentricity; nu = atan2(tmp_Y, tmp_X); // Compute angle phi (argument of Latitude) phi = nu + d_OMEGA; // Reduce phi to between 0 and 2*pi rad phi = fmod((phi), (2 * GPS_PI)); // Correct argument of latitude u = phi + d_Cuc * cos(2 * phi) + d_Cus * sin(2 * phi); // Correct radius r = a * (1 - d_e_eccentricity * cos(E)) + d_Crc * cos(2 * phi) + d_Crs * sin(2 * phi); // Correct inclination i = d_i_0 + d_IDOT * tk + d_Cic * cos(2 * phi) + d_Cis * sin(2 * phi); // Compute the angle between the ascending node and the Greenwich meridian Omega = d_OMEGA0 + (d_OMEGA_DOT - OMEGA_EARTH_DOT) * tk - OMEGA_EARTH_DOT * d_Toe; // Reduce to between 0 and 2*pi rad Omega = fmod((Omega + 2 * GPS_PI), (2 * GPS_PI)); // --- Compute satellite coordinates in Earth-fixed coordinates d_satpos_X = cos(u) * r * cos(Omega) - sin(u) * r * cos(i) * sin(Omega); d_satpos_Y = cos(u) * r * sin(Omega) + sin(u) * r * cos(i) * cos(Omega); d_satpos_Z = sin(u) * r * sin(i); // Satellite's velocity. Can be useful for Vector Tracking loops double Omega_dot = d_OMEGA_DOT - OMEGA_EARTH_DOT; d_satvel_X = - Omega_dot * (cos(u) * r + sin(u) * r * cos(i)) + d_satpos_X * cos(Omega) - d_satpos_Y * cos(i) * sin(Omega); d_satvel_Y = Omega_dot * (cos(u) * r * cos(Omega) - sin(u) * r * cos(i) * sin(Omega)) + d_satpos_X * sin(Omega) + d_satpos_Y * cos(i) * cos(Omega); d_satvel_Z = d_satpos_Y * sin(i); } int Gps_Navigation_Message::subframe_decoder(char *subframe) { int subframe_ID = 0; //double tmp_TOW; unsigned int gps_word; // UNPACK BYTES TO BITS AND REMOVE THE CRC REDUNDANCE std::bitset subframe_bits; std::bitset word_bits; for (int i = 0; i < 10; i++) { memcpy(&gps_word, &subframe[i * 4], sizeof(char) * 4); word_bits = std::bitset<(GPS_WORD_BITS + 2) > (gps_word); for (int j = 0; j < GPS_WORD_BITS; j++) { subframe_bits[GPS_WORD_BITS * (9 - i) + j] = word_bits[j]; } } subframe_ID = static_cast(read_navigation_unsigned(subframe_bits, SUBFRAME_ID)); // Decode all 5 sub-frames switch (subframe_ID) { //--- Decode the sub-frame id ------------------------------------------ // ICD (IS-GPS-200E Appendix II). http://www.losangeles.af.mil/shared/media/document/AFD-100813-045.pdf case 1: //--- It is subframe 1 ------------------------------------- // Compute the time of week (TOW) of the first sub-frames in the array ==== // Also correct the TOW. The transmitted TOW is actual TOW of the next // subframe and we need the TOW of the first subframe in this data block // (the variable subframe at this point contains bits of the last subframe). //TOW = bin2dec(subframe(31:47)) * 6 - 30; d_TOW_SF1 = static_cast(read_navigation_unsigned(subframe_bits, TOW)); //we are in the first subframe (the transmitted TOW is the start time of the next subframe) ! d_TOW_SF1 = d_TOW_SF1 * 6; d_TOW = d_TOW_SF1 - 6; // Set transmission time b_integrity_status_flag = read_navigation_bool(subframe_bits, INTEGRITY_STATUS_FLAG); b_alert_flag = read_navigation_bool(subframe_bits, ALERT_FLAG); b_antispoofing_flag = read_navigation_bool(subframe_bits, ANTI_SPOOFING_FLAG); i_GPS_week = static_cast(read_navigation_unsigned(subframe_bits, GPS_WEEK)); i_SV_accuracy = static_cast(read_navigation_unsigned(subframe_bits, SV_ACCURACY)); // (20.3.3.3.1.3) i_SV_health = static_cast(read_navigation_unsigned(subframe_bits, SV_HEALTH)); b_L2_P_data_flag = read_navigation_bool(subframe_bits, L2_P_DATA_FLAG); // i_code_on_L2 = static_cast(read_navigation_unsigned(subframe_bits, CA_OR_P_ON_L2)); d_TGD = static_cast(read_navigation_signed(subframe_bits, T_GD)); d_TGD = d_TGD * T_GD_LSB; d_IODC = static_cast(read_navigation_unsigned(subframe_bits, IODC)); d_Toc = static_cast(read_navigation_unsigned(subframe_bits, T_OC)); d_Toc = d_Toc * T_OC_LSB; d_A_f0 = static_cast(read_navigation_signed(subframe_bits, A_F0)); d_A_f0 = d_A_f0 * A_F0_LSB; d_A_f1 = static_cast(read_navigation_signed(subframe_bits, A_F1)); d_A_f1 = d_A_f1 * A_F1_LSB; d_A_f2 = static_cast(read_navigation_signed(subframe_bits, A_F2)); d_A_f2 = d_A_f2 * A_F2_LSB; break; case 2: //--- It is subframe 2 ------------------- d_TOW_SF2 = static_cast(read_navigation_unsigned(subframe_bits, TOW)); d_TOW_SF2 = d_TOW_SF2 * 6; d_TOW = d_TOW_SF2 - 6; // Set transmission time b_integrity_status_flag = read_navigation_bool(subframe_bits, INTEGRITY_STATUS_FLAG); b_alert_flag = read_navigation_bool(subframe_bits, ALERT_FLAG); b_antispoofing_flag = read_navigation_bool(subframe_bits, ANTI_SPOOFING_FLAG); d_IODE_SF2 = static_cast(read_navigation_unsigned(subframe_bits, IODE_SF2)); d_Crs = static_cast(read_navigation_signed(subframe_bits, C_RS)); d_Crs = d_Crs * C_RS_LSB; d_Delta_n = static_cast(read_navigation_signed(subframe_bits, DELTA_N)); d_Delta_n = d_Delta_n * DELTA_N_LSB; d_M_0 = static_cast(read_navigation_signed(subframe_bits, M_0)); d_M_0 = d_M_0 * M_0_LSB; d_Cuc = static_cast(read_navigation_signed(subframe_bits, C_UC)); d_Cuc = d_Cuc * C_UC_LSB; d_e_eccentricity = static_cast(read_navigation_unsigned(subframe_bits, E)); d_e_eccentricity = d_e_eccentricity * E_LSB; d_Cus = static_cast(read_navigation_signed(subframe_bits, C_US)); d_Cus = d_Cus * C_US_LSB; d_sqrt_A = static_cast(read_navigation_unsigned(subframe_bits, SQRT_A)); d_sqrt_A = d_sqrt_A * SQRT_A_LSB; d_Toe = static_cast(read_navigation_unsigned(subframe_bits, T_OE)); d_Toe = d_Toe * T_OE_LSB; b_fit_interval_flag = read_navigation_bool(subframe_bits, FIT_INTERVAL_FLAG); i_AODO = static_cast(read_navigation_unsigned(subframe_bits, AODO)); i_AODO = i_AODO * AODO_LSB; break; case 3: // --- It is subframe 3 ------------------------------------- d_TOW_SF3 = static_cast(read_navigation_unsigned(subframe_bits, TOW)); d_TOW_SF3 = d_TOW_SF3 * 6; d_TOW = d_TOW_SF3 - 6; // Set transmission time b_integrity_status_flag = read_navigation_bool(subframe_bits, INTEGRITY_STATUS_FLAG); b_alert_flag = read_navigation_bool(subframe_bits, ALERT_FLAG); b_antispoofing_flag = read_navigation_bool(subframe_bits, ANTI_SPOOFING_FLAG); d_Cic = static_cast(read_navigation_signed(subframe_bits, C_IC)); d_Cic = d_Cic * C_IC_LSB; d_OMEGA0 = static_cast(read_navigation_signed(subframe_bits, OMEGA_0)); d_OMEGA0 = d_OMEGA0 * OMEGA_0_LSB; d_Cis = static_cast(read_navigation_signed(subframe_bits, C_IS)); d_Cis = d_Cis * C_IS_LSB; d_i_0 = static_cast(read_navigation_signed(subframe_bits, I_0)); d_i_0 = d_i_0 * I_0_LSB; d_Crc = static_cast(read_navigation_signed(subframe_bits, C_RC)); d_Crc = d_Crc * C_RC_LSB; d_OMEGA = static_cast(read_navigation_signed(subframe_bits, OMEGA)); d_OMEGA = d_OMEGA * OMEGA_LSB; d_OMEGA_DOT = static_cast(read_navigation_signed(subframe_bits, OMEGA_DOT)); d_OMEGA_DOT = d_OMEGA_DOT * OMEGA_DOT_LSB; d_IODE_SF3 = static_cast(read_navigation_unsigned(subframe_bits, IODE_SF3)); d_IDOT = static_cast(read_navigation_signed(subframe_bits, I_DOT)); d_IDOT = d_IDOT * I_DOT_LSB; break; case 4: // --- It is subframe 4 ---------- Almanac, ionospheric model, UTC parameters, SV health (PRN: 25-32) int SV_data_ID; int SV_page; d_TOW_SF4 = static_cast(read_navigation_unsigned(subframe_bits, TOW)); d_TOW_SF4 = d_TOW_SF4 * 6; d_TOW = d_TOW_SF4 - 6; // Set transmission time b_integrity_status_flag = read_navigation_bool(subframe_bits, INTEGRITY_STATUS_FLAG); b_alert_flag = read_navigation_bool(subframe_bits, ALERT_FLAG); b_antispoofing_flag = read_navigation_bool(subframe_bits, ANTI_SPOOFING_FLAG); SV_data_ID = static_cast(read_navigation_unsigned(subframe_bits, SV_DATA_ID)); SV_page = static_cast(read_navigation_unsigned(subframe_bits, SV_PAGE)); if (SV_page > 24 && SV_page < 33) // Page 4 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200H, page 110) { //! \TODO read almanac if(SV_data_ID){} } if (SV_page == 52) // Page 13 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200H, page 110) { //! \TODO read Estimated Range Deviation (ERD) values } if (SV_page == 56) // Page 18 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200H, page 110) { // Page 18 - Ionospheric and UTC data d_alpha0 = static_cast(read_navigation_signed(subframe_bits, ALPHA_0)); d_alpha0 = d_alpha0 * ALPHA_0_LSB; d_alpha1 = static_cast(read_navigation_signed(subframe_bits, ALPHA_1)); d_alpha1 = d_alpha1 * ALPHA_1_LSB; d_alpha2 = static_cast(read_navigation_signed(subframe_bits, ALPHA_2)); d_alpha2 = d_alpha2 * ALPHA_2_LSB; d_alpha3 = static_cast(read_navigation_signed(subframe_bits, ALPHA_3)); d_alpha3 = d_alpha3 * ALPHA_3_LSB; d_beta0 = static_cast(read_navigation_signed(subframe_bits, BETA_0)); d_beta0 = d_beta0 * BETA_0_LSB; d_beta1 = static_cast(read_navigation_signed(subframe_bits, BETA_1)); d_beta1 = d_beta1 * BETA_1_LSB; d_beta2 = static_cast(read_navigation_signed(subframe_bits, BETA_2)); d_beta2 = d_beta2 * BETA_2_LSB; d_beta3 = static_cast(read_navigation_signed(subframe_bits, BETA_3)); d_beta3 = d_beta3 * BETA_3_LSB; d_A1 = static_cast(read_navigation_signed(subframe_bits, A_1)); d_A1 = d_A1 * A_1_LSB; d_A0 = static_cast(read_navigation_signed(subframe_bits, A_0)); d_A0 = d_A0 * A_0_LSB; d_t_OT = static_cast(read_navigation_unsigned(subframe_bits, T_OT)); d_t_OT = d_t_OT * T_OT_LSB; i_WN_T = static_cast(read_navigation_unsigned(subframe_bits, WN_T)); d_DeltaT_LS = static_cast(read_navigation_signed(subframe_bits, DELTAT_LS)); i_WN_LSF = static_cast(read_navigation_unsigned(subframe_bits, WN_LSF)); i_DN = static_cast(read_navigation_unsigned(subframe_bits, DN)); // Right-justified ? d_DeltaT_LSF = static_cast(read_navigation_signed(subframe_bits, DELTAT_LSF)); flag_iono_valid = true; flag_utc_model_valid = true; } if (SV_page == 57) { // Reserved } if (SV_page == 63) // Page 25 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200H, page 110) { // Page 25 Anti-Spoofing, SV config and almanac health (PRN: 25-32) //! \TODO Read Anti-Spoofing, SV config almanacHealth[25] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV25)); almanacHealth[26] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV26)); almanacHealth[27] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV27)); almanacHealth[28] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV28)); almanacHealth[29] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV29)); almanacHealth[30] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV30)); almanacHealth[31] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV31)); almanacHealth[32] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV32)); } break; case 5://--- It is subframe 5 -----------------almanac health (PRN: 1-24) and Almanac reference week number and time. int SV_data_ID_5; int SV_page_5; d_TOW_SF5 = static_cast(read_navigation_unsigned(subframe_bits, TOW)); d_TOW_SF5 = d_TOW_SF5 * 6; d_TOW = d_TOW_SF5 - 6; // Set transmission time b_integrity_status_flag = read_navigation_bool(subframe_bits, INTEGRITY_STATUS_FLAG); b_alert_flag = read_navigation_bool(subframe_bits, ALERT_FLAG); b_antispoofing_flag = read_navigation_bool(subframe_bits, ANTI_SPOOFING_FLAG); SV_data_ID_5 = static_cast(read_navigation_unsigned(subframe_bits, SV_DATA_ID)); SV_page_5 = static_cast(read_navigation_unsigned(subframe_bits, SV_PAGE)); if (SV_page_5 < 25) { //! \TODO read almanac if(SV_data_ID_5){} } if (SV_page_5 == 51) // Page 25 (from Table 20-V. Data IDs and SV IDs in Subframes 4 and 5, IS-GPS-200H, page 110) { d_Toa = static_cast(read_navigation_unsigned(subframe_bits, T_OA)); d_Toa = d_Toa * T_OA_LSB; i_WN_A = static_cast(read_navigation_unsigned(subframe_bits, WN_A)); almanacHealth[1] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV1)); almanacHealth[2] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV2)); almanacHealth[3] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV3)); almanacHealth[4] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV4)); almanacHealth[5] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV5)); almanacHealth[6] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV6)); almanacHealth[7] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV7)); almanacHealth[8] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV8)); almanacHealth[9] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV9)); almanacHealth[10] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV10)); almanacHealth[11] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV11)); almanacHealth[12] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV12)); almanacHealth[13] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV13)); almanacHealth[14] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV14)); almanacHealth[15] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV15)); almanacHealth[16] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV16)); almanacHealth[17] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV17)); almanacHealth[18] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV18)); almanacHealth[19] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV19)); almanacHealth[20] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV20)); almanacHealth[21] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV21)); almanacHealth[22] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV22)); almanacHealth[23] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV23)); almanacHealth[24] = static_cast(read_navigation_unsigned(subframe_bits, HEALTH_SV24)); } break; default: break; } // switch subframeID ... return subframe_ID; } double Gps_Navigation_Message::utc_time(const double gpstime_corrected) const { double t_utc; double t_utc_daytime; double Delta_t_UTC = d_DeltaT_LS + d_A0 + d_A1 * (gpstime_corrected - d_t_OT + 604800 * static_cast((i_GPS_week - i_WN_T))); // Determine if the effectivity time of the leap second event is in the past int weeksToLeapSecondEvent = i_WN_LSF - i_GPS_week; if ((weeksToLeapSecondEvent) >= 0) // is not in the past { //Detect if the effectivity time and user's time is within six hours = 6 * 60 *60 = 21600 s int secondOfLeapSecondEvent = i_DN * 24 * 60 * 60; if (weeksToLeapSecondEvent > 0) { t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } else //we are in the same week than the leap second event { if (std::abs(gpstime_corrected - secondOfLeapSecondEvent) > 21600) { /* 20.3.3.5.2.4a * Whenever the effectivity time indicated by the WN_LSF and the DN values * is not in the past (relative to the user's present time), and the user's * present time does not fall in the time span which starts at six hours prior * to the effectivity time and ends at six hours after the effectivity time, * the UTC/GPS-time relationship is given by */ t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } else { /* 20.3.3.5.2.4b * Whenever the user's current time falls within the time span of six hours * prior to the effectivity time to six hours after the effectivity time, * proper accommodation of the leap second event with a possible week number * transition is provided by the following expression for UTC: */ int W = fmod(gpstime_corrected - Delta_t_UTC - 43200, 86400) + 43200; t_utc_daytime = fmod(W, 86400 + d_DeltaT_LSF - d_DeltaT_LS); //implement something to handle a leap second event! } if ( (gpstime_corrected - secondOfLeapSecondEvent) > 21600) { Delta_t_UTC = d_DeltaT_LSF + d_A0 + d_A1 * (gpstime_corrected - d_t_OT + 604800 * static_cast((i_GPS_week - i_WN_T))); t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } } } else // the effectivity time is in the past { /* 20.3.3.5.2.4c * Whenever the effectivity time of the leap second event, as indicated by the * WNLSF and DN values, is in the "past" (relative to the user's current time), * and the user�s current time does not fall in the time span as given above * in 20.3.3.5.2.4b,*/ Delta_t_UTC = d_DeltaT_LSF + d_A0 + d_A1 * (gpstime_corrected - d_t_OT + 604800 * static_cast((i_GPS_week - i_WN_T))); t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } double secondsOfWeekBeforeToday = 43200 * floor(gpstime_corrected / 43200); t_utc = secondsOfWeekBeforeToday + t_utc_daytime; return t_utc; } Gps_Ephemeris Gps_Navigation_Message::get_ephemeris() { Gps_Ephemeris ephemeris; ephemeris.i_satellite_PRN = i_satellite_PRN; ephemeris.d_TOW = d_TOW; ephemeris.d_Crs = d_Crs; ephemeris.d_Delta_n = d_Delta_n; ephemeris.d_M_0 = d_M_0; ephemeris.d_Cuc = d_Cuc; ephemeris.d_e_eccentricity = d_e_eccentricity; ephemeris.d_Cus = d_Cus; ephemeris.d_sqrt_A = d_sqrt_A; ephemeris.d_Toe = d_Toe; ephemeris.d_Toc = d_Toc; ephemeris.d_Cic = d_Cic; ephemeris.d_OMEGA0 = d_OMEGA0; ephemeris.d_Cis = d_Cis; ephemeris.d_i_0 = d_i_0; ephemeris.d_Crc = d_Crc; ephemeris.d_OMEGA = d_OMEGA; ephemeris.d_OMEGA_DOT = d_OMEGA_DOT; ephemeris.d_IDOT = d_IDOT; ephemeris.i_code_on_L2 = i_code_on_L2; ephemeris.i_GPS_week = i_GPS_week; ephemeris.b_L2_P_data_flag = b_L2_P_data_flag; ephemeris.i_SV_accuracy = i_SV_accuracy; ephemeris.i_SV_health = i_SV_health; ephemeris.d_TGD = d_TGD; ephemeris.d_IODC = d_IODC; ephemeris.d_IODE_SF2 = d_IODE_SF2; ephemeris.d_IODE_SF3 = d_IODE_SF3; ephemeris.i_AODO = i_AODO; ephemeris.b_fit_interval_flag = b_fit_interval_flag; ephemeris.d_spare1 = d_spare1; ephemeris.d_spare2 = d_spare2; ephemeris.d_A_f0 = d_A_f0; ephemeris.d_A_f1 = d_A_f1; ephemeris.d_A_f2 = d_A_f2; ephemeris.b_integrity_status_flag = b_integrity_status_flag; ephemeris.b_alert_flag = b_alert_flag; ephemeris.b_antispoofing_flag = b_antispoofing_flag; ephemeris.d_satClkDrift = d_satClkDrift; ephemeris.d_dtr = d_dtr; ephemeris.d_satpos_X = d_satpos_X; ephemeris.d_satpos_Y = d_satpos_Y; ephemeris.d_satpos_Z = d_satpos_Z; ephemeris.d_satvel_X = d_satvel_X; ephemeris.d_satvel_Y = d_satvel_Y; ephemeris.d_satvel_Z = d_satvel_Z; return ephemeris; } Gps_Iono Gps_Navigation_Message::get_iono() { Gps_Iono iono; iono.d_alpha0 = d_alpha0; iono.d_alpha1 = d_alpha1; iono.d_alpha2 = d_alpha2; iono.d_alpha3 = d_alpha3; iono.d_beta0 = d_beta0; iono.d_beta1 = d_beta1; iono.d_beta2 = d_beta2; iono.d_beta3 = d_beta3; iono.valid = flag_iono_valid; //WARNING: We clear flag_utc_model_valid in order to not re-send the same information to the ionospheric parameters queue flag_iono_valid = false; return iono; } Gps_Utc_Model Gps_Navigation_Message::get_utc_model() { Gps_Utc_Model utc_model; utc_model.valid = flag_utc_model_valid; // UTC parameters utc_model.d_A1 = d_A1; utc_model.d_A0 = d_A0; utc_model.d_t_OT = d_t_OT; utc_model.i_WN_T = i_WN_T; utc_model.d_DeltaT_LS = d_DeltaT_LS; utc_model.i_WN_LSF = i_WN_LSF; utc_model.i_DN = i_DN; utc_model.d_DeltaT_LSF = d_DeltaT_LSF; // warning: We clear flag_utc_model_valid in order to not re-send the same information to the ionospheric parameters queue flag_utc_model_valid = false; return utc_model; } bool Gps_Navigation_Message::satellite_validation() { bool flag_data_valid = false; b_valid_ephemeris_set_flag = false; // First Step: // check Issue Of Ephemeris Data (IODE IODC..) to find a possible interrupted reception // and check if the data have been filled (!=0) if (d_TOW_SF1 != 0 and d_TOW_SF2 != 0 and d_TOW_SF3 != 0) { if (d_IODE_SF2 == d_IODE_SF3 and d_IODC == d_IODE_SF2 and d_IODC!= -1) { flag_data_valid = true; b_valid_ephemeris_set_flag = true; } } return flag_data_valid; } gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_ephemeris.h0000644000175000017500000002405512576764164024111 0ustar carlescarles/*! * \file gps_cnav_ephemeris.h * \brief Interface of a GPS CNAV EPHEMERIS storage * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_CNAV_EPHEMERIS_H_ #define GNSS_SDR_GPS_CNAV_EPHEMERIS_H_ #include #include #include #include "boost/assign.hpp" #include #include "GPS_L2C.h" /*! * \brief This class is a storage and orbital model functions for the GPS SV ephemeris data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_CNAV_Ephemeris { private: public: unsigned int i_satellite_PRN; // SV PRN NUMBER //Message Types 10 and 11 Parameters (1 of 2) int i_GPS_week; //!< GPS week number, aka WN [week] int i_URA; //!< ED Accuracy Index int i_signal_health; //!< Signal health (L1/L2/L5) double d_Top; //!< Data predict time of week double d_DELTA_A; //!< Semi-major axis difference at reference time double d_A_DOT; //!< Change rate in semi-major axis double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_DELTA_DOT_N; //!< Rate of mean motion difference from computed value double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_e_eccentricity; //!< Eccentricity double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-cicles] double d_Toe1; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] double d_Toe2; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] double d_DELTA_OMEGA_DOT; //!< Rate of Right Ascension difference [semi-circles/s] double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] double d_Cis; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] //Clock Correction and Accuracy Parameters double d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] double d_URA0; //! /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("i_satellite_PRN", i_satellite_PRN); // SV PRN NUMBER archive & make_nvp("d_TOW", d_TOW); //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] archive & make_nvp("d_Crs", d_Crs); //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] archive & make_nvp("d_M_0", d_M_0); //!< Mean Anomaly at Reference Time [semi-circles] archive & make_nvp("d_Cuc", d_Cuc); //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] archive & make_nvp("d_e_eccentricity", d_e_eccentricity); //!< Eccentricity [dimensionless] archive & make_nvp("d_Cus", d_Cus); //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] archive & make_nvp("d_Toe1", d_Toe1); //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] archive & make_nvp("d_Toe2", d_Toe2); //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] archive & make_nvp("d_Toc", d_Toc); //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] archive & make_nvp("d_Cic", d_Cic); //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] archive & make_nvp("d_OMEGA0", d_OMEGA0); //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] archive & make_nvp("d_Cis", d_Cis); //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] archive & make_nvp("d_i_0", d_i_0); //!< Inclination Angle at Reference Time [semi-circles] archive & make_nvp("d_Crc", d_Crc); //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] archive & make_nvp("d_OMEGA", d_OMEGA); //!< Argument of Perigee [semi-cicles] archive & make_nvp("d_IDOT", d_IDOT); //!< Rate of Inclination Angle [semi-circles/s] archive & make_nvp("i_GPS_week", i_GPS_week); //!< GPS week number, aka WN [week] archive & make_nvp("d_TGD", d_TGD); //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] archive & make_nvp("d_A_f0", d_A_f0); //!< Coefficient 0 of code phase offset model [s] archive & make_nvp("d_A_f1", d_A_f1); //!< Coefficient 1 of code phase offset model [s/s] archive & make_nvp("d_A_f2", d_A_f2); //!< Coefficient 2 of code phase offset model [s/s^2] archive & make_nvp("b_integrity_status_flag", b_integrity_status_flag); archive & make_nvp("b_alert_flag", b_alert_flag); //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. archive & make_nvp("b_antispoofing_flag", b_antispoofing_flag); //!< If true, the AntiSpoofing mode is ON in that SV } /*! * Default constructor */ Gps_CNAV_Ephemeris(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/galileo_navigation_message.h0000644000175000017500000003041412576764164025603 0ustar carlescarles/*! * \file galileo_navigation_message.h * \brief Implementation of a Galileo I/NAV Data message * as described in Galileo OS SIS ICD Issue 1.1 (Sept. 2010) * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_NAVIGATION_MESSAGE_H_ #define GNSS_SDR_GALILEO_NAVIGATION_MESSAGE_H_ #include #include #include #include #include #include #include #include // for boost::uint16_t #include #include #include "galileo_ephemeris.h" #include "galileo_iono.h" #include "galileo_almanac.h" #include "galileo_utc_model.h" /*! * \brief This class handles the Galileo I/NAV Data message, as described in the * Galileo Open Service Signal in Space Interface Control Document (OS SIS ICD), Issue 1.1 (Sept 2010). * See http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf */ class Galileo_Navigation_Message { private: bool CRC_test(std::bitset bits, boost::uint32_t checksum); bool read_navigation_bool(std::bitset bits, const std::vector > parameter); //void print_galileo_word_bytes(unsigned int GPS_word); unsigned long int read_navigation_unsigned(std::bitset bits, const std::vector< std::pair > parameter); unsigned long int read_page_type_unsigned(std::bitset bits, const std::vector< std::pair > parameter); signed long int read_navigation_signed(std::bitset bits, const std::vector > parameter); public: int Page_type_time_stamp; int flag_even_word; std::string page_Even; bool flag_CRC_test; bool flag_all_ephemeris; //!< Flag indicating that all words containing ephemeris have been received bool flag_ephemeris_1; //!< Flag indicating that ephemeris 1/4 (word 1) have been received bool flag_ephemeris_2; //!< Flag indicating that ephemeris 2/4 (word 2) have been received bool flag_ephemeris_3; //!< Flag indicating that ephemeris 3/4 (word 3) have been received bool flag_ephemeris_4; //!< Flag indicating that ephemeris 4/4 (word 4) have been received bool flag_iono_and_GST; //!< Flag indicating that ionospheric and GST parameters (word 5) have been received bool flag_TOW_5; bool flag_TOW_6; bool flag_TOW_set; //!< it is true when page 5 or page 6 arrives bool flag_utc_model; //!< Flag indicating that utc model parameters (word 6) have been received bool flag_all_almanac; //!< Flag indicating that all almanac have been received bool flag_almanac_1; //!< Flag indicating that almanac 1/4 (word 7) have been received bool flag_almanac_2; //!< Flag indicating that almanac 2/4 (word 8) have been received bool flag_almanac_3; //!< Flag indicating that almanac 3/4 (word 9) have been received bool flag_almanac_4; //!< Flag indicating that almanac 4/4 (word 10) have been received int IOD_ephemeris; bool flag_GGTO; bool flag_GGTO_1; bool flag_GGTO_2; bool flag_GGTO_3; bool flag_GGTO_4; /*Word type 1: Ephemeris (1/4)*/ int IOD_nav_1; //!< IOD_nav page 1 double t0e_1; //!< Ephemeris reference time [s] double M0_1; //!< Mean anomaly at reference time [semi-circles] double e_1; //!< Eccentricity double A_1; //!< Square root of the semi-major axis [metres^1/2] /*Word type 2: Ephemeris (2/4)*/ int IOD_nav_2; //!< IOD_nav page 2 double OMEGA_0_2; //!< Longitude of ascending node of orbital plane at weekly epoch [semi-circles] double i_0_2; //!< Inclination angle at reference time [semi-circles] double omega_2; //!< Argument of perigee [semi-circles] double iDot_2; //!< Rate of inclination angle [semi-circles/sec] /*Word type 3: Ephemeris (3/4) and SISA*/ int IOD_nav_3; // double OMEGA_dot_3; //!< Rate of right ascension [semi-circles/sec] double delta_n_3; //!< Mean motion difference from computed value [semi-circles/sec] double C_uc_3; //!< Amplitude of the cosine harmonic correction term to the argument of latitude [radians] double C_us_3; //!< Amplitude of the sine harmonic correction term to the argument of latitude [radians] double C_rc_3; //!< Amplitude of the cosine harmonic correction term to the orbit radius [meters] double C_rs_3; //!< Amplitude of the sine harmonic correction term to the orbit radius [meters] double SISA_3; /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ int IOD_nav_4; // int SV_ID_PRN_4; // double C_ic_4; //!. * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_EPHEMERIS_H_ #define GNSS_SDR_GPS_EPHEMERIS_H_ #include #include #include #include "boost/assign.hpp" #include #include "GPS_L1_CA.h" /*! * \brief This class is a storage and orbital model functions for the GPS SV ephemeris data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_Ephemeris { private: /* * Accounts for the beginning or end of week crossover * * See paragraph 20.3.3.3.3.1 (IS-GPS-200E) * \param[in] - time in seconds * \param[out] - corrected time, in seconds */ double check_t(double time); public: unsigned int i_satellite_PRN; // SV PRN NUMBER double d_TOW; //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] double d_Crs; //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] double d_Delta_n; //!< Mean Motion Difference From Computed Value [semi-circles/s] double d_M_0; //!< Mean Anomaly at Reference Time [semi-circles] double d_Cuc; //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] double d_e_eccentricity; //!< Eccentricity [dimensionless] double d_Cus; //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] double d_sqrt_A; //!< Square Root of the Semi-Major Axis [sqrt(m)] double d_Toe; //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] double d_Toc; //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] double d_Cic; //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] double d_OMEGA0; //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] double d_Cis; //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] double d_i_0; //!< Inclination Angle at Reference Time [semi-circles] double d_Crc; //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] double d_OMEGA; //!< Argument of Perigee [semi-cicles] double d_OMEGA_DOT; //!< Rate of Right Ascension [semi-circles/s] double d_IDOT; //!< Rate of Inclination Angle [semi-circles/s] int i_code_on_L2; //!< If 1, P code ON in L2; if 2, C/A code ON in L2; int i_GPS_week; //!< GPS week number, aka WN [week] bool b_L2_P_data_flag; //!< When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel int i_SV_accuracy; //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200E) int i_SV_health; double d_TGD; //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] double d_IODC; //!< Issue of Data, Clock double d_IODE_SF2; //!< Issue of Data, Ephemeris (IODE), subframe 2 double d_IODE_SF3; //!< Issue of Data, Ephemeris(IODE), subframe 3 int i_AODO; //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] bool b_fit_interval_flag;//!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. double d_spare1; double d_spare2; double d_A_f0; //!< Coefficient 0 of code phase offset model [s] double d_A_f1; //!< Coefficient 1 of code phase offset model [s/s] double d_A_f2; //!< Coefficient 2 of code phase offset model [s/s^2] // Flags /*! \brief If true, enhanced level of integrity assurance. * * If false, indicates that the conveying signal is provided with the legacy level of integrity assurance. * That is, the probability that the instantaneous URE of the conveying signal exceeds 4.42 times the upper bound * value of the current broadcast URA index, for more than 5.2 seconds, without an accompanying alert, is less * than 1E-5 per hour. If true, indicates that the conveying signal is provided with an enhanced level of * integrity assurance. That is, the probability that the instantaneous URE of the conveying signal exceeds 5.73 * times the upper bound value of the current broadcast URA index, for more than 5.2 seconds, without an * accompanying alert, is less than 1E-8 per hour. */ bool b_integrity_status_flag; bool b_alert_flag; //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. bool b_antispoofing_flag; //!< If true, the AntiSpoofing mode is ON in that SV // clock terms derived from ephemeris data double d_satClkDrift; //!< GPS clock error double d_dtr; //!< relativistic clock correction term // satellite positions double d_satpos_X; //!< Earth-fixed coordinate x of the satellite [m]. Intersection of the IERS Reference Meridian (IRM) and the plane passing through the origin and normal to the Z-axis. double d_satpos_Y; //!< Earth-fixed coordinate y of the satellite [m]. Completes a right-handed, Earth-Centered, Earth-Fixed orthogonal coordinate system. double d_satpos_Z; //!< Earth-fixed coordinate z of the satellite [m]. The direction of the IERS (International Earth Rotation and Reference Systems Service) Reference Pole (IRP). // Satellite velocity double d_satvel_X; //!< Earth-fixed velocity coordinate x of the satellite [m] double d_satvel_Y; //!< Earth-fixed velocity coordinate y of the satellite [m] double d_satvel_Z; //!< Earth-fixed velocity coordinate z of the satellite [m] std::map satelliteBlock; //!< Map that stores to which block the PRN belongs http://www.navcen.uscg.gov/?Do=constellationStatus template /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("i_satellite_PRN", i_satellite_PRN); // SV PRN NUMBER archive & make_nvp("d_TOW", d_TOW); //!< Time of GPS Week of the ephemeris set (taken from subframes TOW) [s] archive & make_nvp("d_IODE_SF2", d_IODE_SF2); archive & make_nvp("d_IODE_SF3", d_IODE_SF3); archive & make_nvp("d_Crs", d_Crs); //!< Amplitude of the Sine Harmonic Correction Term to the Orbit Radius [m] archive & make_nvp("d_Delta_n", d_Delta_n); //!< Mean Motion Difference From Computed Value [semi-circles/s] archive & make_nvp("d_M_0", d_M_0); //!< Mean Anomaly at Reference Time [semi-circles] archive & make_nvp("d_Cuc", d_Cuc); //!< Amplitude of the Cosine Harmonic Correction Term to the Argument of Latitude [rad] archive & make_nvp("d_e_eccentricity", d_e_eccentricity); //!< Eccentricity [dimensionless] archive & make_nvp("d_Cus", d_Cus); //!< Amplitude of the Sine Harmonic Correction Term to the Argument of Latitude [rad] archive & make_nvp("d_sqrt_A", d_sqrt_A); //!< Square Root of the Semi-Major Axis [sqrt(m)] archive & make_nvp("d_Toe", d_Toe); //!< Ephemeris data reference time of week (Ref. 20.3.3.4.3 IS-GPS-200E) [s] archive & make_nvp("d_Toc", d_Toe); //!< clock data reference time (Ref. 20.3.3.3.3.1 IS-GPS-200E) [s] archive & make_nvp("d_Cic", d_Cic); //!< Amplitude of the Cosine Harmonic Correction Term to the Angle of Inclination [rad] archive & make_nvp("d_OMEGA0", d_OMEGA0); //!< Longitude of Ascending Node of Orbit Plane at Weekly Epoch [semi-circles] archive & make_nvp("d_Cis", d_Cis); //!< Amplitude of the Sine Harmonic Correction Term to the Angle of Inclination [rad] archive & make_nvp("d_i_0", d_i_0); //!< Inclination Angle at Reference Time [semi-circles] archive & make_nvp("d_Crc", d_Crc); //!< Amplitude of the Cosine Harmonic Correction Term to the Orbit Radius [m] archive & make_nvp("d_OMEGA", d_OMEGA); //!< Argument of Perigee [semi-cicles] archive & make_nvp("d_OMEGA_DOT", d_OMEGA_DOT); //!< Rate of Right Ascension [semi-circles/s] archive & make_nvp("d_IDOT", d_IDOT); //!< Rate of Inclination Angle [semi-circles/s] archive & make_nvp("i_code_on_L2", i_code_on_L2); //!< If 1, P code ON in L2; if 2, C/A code ON in L2; archive & make_nvp("i_GPS_week", i_GPS_week); //!< GPS week number, aka WN [week] archive & make_nvp("b_L2_P_data_flag", b_L2_P_data_flag); //!< When true, indicates that the NAV data stream was commanded OFF on the P-code of the L2 channel archive & make_nvp("i_SV_accuracy", i_SV_accuracy); //!< User Range Accuracy (URA) index of the SV (reference paragraph 6.2.1) for the standard positioning service user (Ref 20.3.3.3.1.3 IS-GPS-200E) archive & make_nvp("i_SV_health", i_SV_health); archive & make_nvp("d_TGD", d_TGD); //!< Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] archive & make_nvp("d_IODC", d_IODC); //!< Issue of Data, Clock archive & make_nvp("i_AODO", i_AODO); //!< Age of Data Offset (AODO) term for the navigation message correction table (NMCT) contained in subframe 4 (reference paragraph 20.3.3.5.1.9) [s] archive & make_nvp("b_fit_interval_flag", b_fit_interval_flag);//!< indicates the curve-fit interval used by the CS (Block II/IIA/IIR/IIR-M/IIF) and SS (Block IIIA) in determining the ephemeris parameters, as follows: 0 = 4 hours, 1 = greater than 4 hours. archive & make_nvp("d_spare1", d_spare1); archive & make_nvp("d_spare2", d_spare2); archive & make_nvp("d_A_f0", d_A_f0); //!< Coefficient 0 of code phase offset model [s] archive & make_nvp("d_A_f1", d_A_f1); //!< Coefficient 1 of code phase offset model [s/s] archive & make_nvp("d_A_f2", d_A_f2); //!< Coefficient 2 of code phase offset model [s/s^2] archive & make_nvp("b_integrity_status_flag", b_integrity_status_flag); archive & make_nvp("b_alert_flag", b_alert_flag); //!< If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. archive & make_nvp("b_antispoofing_flag", b_antispoofing_flag); //!< If true, the AntiSpoofing mode is ON in that SV } /*! * \brief Compute the ECEF SV coordinates and ECEF velocity * Implementation of Table 20-IV (IS-GPS-200E) */ void satellitePosition(double transmitTime); /*! * \brief Sets (\a d_satClkDrift)and returns the clock drift in seconds according to the User Algorithm for SV Clock Correction * (IS-GPS-200E, 20.3.3.3.3.1) */ double sv_clock_drift(double transmitTime); /*! * \brief Sets (\a d_dtr) and returns the clock relativistic correction term in seconds according to the User Algorithm for SV Clock Correction * (IS-GPS-200E, 20.3.3.3.3.1) */ double sv_clock_relativistic_term(double transmitTime); /*! * Default constructor */ Gps_Ephemeris(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_iono.h0000644000175000017500000000640312576764164022062 0ustar carlescarles/*! * \file gps_iono.h * \brief Interface of a GPS IONOSPHERIC MODEL storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GPS_IONO_H_ #define GNSS_SDR_GPS_IONO_H_ #include "GPS_L1_CA.h" #include "boost/assign.hpp" #include /*! * \brief This class is a storage for the GPS IONOSPHERIC data as described in IS-GPS-200E * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II */ class Gps_Iono { public: bool valid; //!< Valid flag // Ionospheric parameters double d_alpha0; //!< Coefficient 0 of a cubic equation representing the amplitude of the vertical delay [s] double d_alpha1; //!< Coefficient 1 of a cubic equation representing the amplitude of the vertical delay [s/semi-circle] double d_alpha2; //!< Coefficient 2 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^2] double d_alpha3; //!< Coefficient 3 of a cubic equation representing the amplitude of the vertical delay [s(semi-circle)^3] double d_beta0; //!< Coefficient 0 of a cubic equation representing the period of the model [s] double d_beta1; //!< Coefficient 1 of a cubic equation representing the period of the model [s/semi-circle] double d_beta2; //!< Coefficient 2 of a cubic equation representing the period of the model [s(semi-circle)^2] double d_beta3; //!< Coefficient 3 of a cubic equation representing the period of the model [s(semi-circle)^3] Gps_Iono(); //!< Default constructor template /*! * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the ephemeris data on disk file. */ void serialize(Archive& archive, const unsigned int version) { using boost::serialization::make_nvp; if(version){}; archive & make_nvp("d_alpha0",d_alpha0); archive & make_nvp("d_alpha1",d_alpha1); archive & make_nvp("d_alpha2",d_alpha2); archive & make_nvp("d_alpha3",d_alpha3); archive & make_nvp("d_beta0",d_beta0); archive & make_nvp("d_beta1",d_beta1); archive & make_nvp("d_beta2",d_beta2); archive & make_nvp("d_beta3",d_beta3); } }; #endif gnss-sdr-0.0.6/src/core/system_parameters/Galileo_E5a.h0000644000175000017500000102542412576764164022320 0ustar carlescarles/* * \file Galileo_E5a.h * \brief Defines system parameters for Galileo E5a signal and NAV data * \author Marc Sales, 2014. marcsales92@gmail.com * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E5A_H_ #define GNSS_SDR_GALILEO_E5A_H_ #include #include #include #include #include // std::pair #include "MATH_CONSTANTS.h" // Physical constants already defined in E1 // Carrier and code frequencies const double Galileo_E5a_FREQ_HZ = 1.176450e9; //!< Galileo E5a carrier frequency [Hz] const double Galileo_E5a_CODE_CHIP_RATE_HZ = 1.023e7; //!< Galileo E5a code rate [chips/s] const double Galileo_E5a_I_TIERED_CODE_PERIOD = 0.020; //!< Galileo E5a-I tiered code period [s] const double Galileo_E5a_Q_TIERED_CODE_PERIOD = 0.100; //!< Galileo E5a-Q tiered code period [s] const int Galileo_E5a_CODE_LENGTH_CHIPS = 10230; //!< Galileo E5a primary code length [chips] const int Galileo_E5a_I_SECONDARY_CODE_LENGTH = 20; //!< Galileo E5a-I secondary code length [chips] const int Galileo_E5a_Q_SECONDARY_CODE_LENGTH = 100; //!< Galileo E5a-Q secondary code length [chips] const double GALILEO_E5a_CODE_PERIOD = 0.001; const int Galileo_E5a_SYMBOL_RATE_BPS = 50; //!< Galileo E5a symbol rate [bits/second] const int Galileo_E5a_NUMBER_OF_CODES = 50; // F/NAV message structure const int GALILEO_FNAV_PREAMBLE_LENGTH_BITS = 12; const std::string GALILEO_FNAV_PREAMBLE = {"101101110000"}; const int GALILEO_FNAV_CODES_PER_SYMBOL = 20; // (chip rate/ code length)/telemetry bps const int GALILEO_FNAV_CODES_PER_PREAMBLE = 240; // bits preamble * codes/symbol const int GALILEO_FNAV_SYMBOLS_PER_PAGE = 500; //Total symbols per page including preamble. See Galileo ICD 4.2.2 const int GALILEO_FNAV_SECONDS_PER_PAGE = 10; const int GALILEO_FNAV_CODES_PER_PAGE = 10000; // symbols * codes/symbol, where code stands for primary code const int GALILEO_FNAV_INTERLEAVER_ROWS = 8; const int GALILEO_FNAV_INTERLEAVER_COLS = 61; const int GALILEO_FNAV_PAGE_TYPE_BITS = 6; const int GALILEO_FNAV_DATA_FRAME_BITS = 214; const int GALILEO_FNAV_DATA_FRAME_BYTES = 27; const std::vector> FNAV_PAGE_TYPE_bit({{1,6}}); /* WORD 1 iono corrections. FNAV (Galileo E5a message)*/ const std::vector> FNAV_SV_ID_PRN_1_bit({{6,6}}); const std::vector> FNAV_IODnav_1_bit({{12,10}}); const std::vector> FNAV_t0c_1_bit({{22,14}}); const double FNAV_t0c_1_LSB = 60; const std::vector> FNAV_af0_1_bit({{36,31}}); const double FNAV_af0_1_LSB = TWO_N34; const std::vector> FNAV_af1_1_bit({{67,21}}); const double FNAV_af1_1_LSB = TWO_N46; const std::vector> FNAV_af2_1_bit({{88,6}}); const double FNAV_af2_1_LSB = TWO_N59; const std::vector> FNAV_SISA_1_bit({{94,8}}); const std::vector> FNAV_ai0_1_bit({{102,11}}); const double FNAV_ai0_1_LSB = TWO_N2; const std::vector> FNAV_ai1_1_bit({{113,11}}); const double FNAV_ai1_1_LSB = TWO_N8; const std::vector> FNAV_ai2_1_bit({{124,14}}); const double FNAV_ai2_1_LSB = TWO_N15; const std::vector> FNAV_region1_1_bit({{138,1}}); const std::vector> FNAV_region2_1_bit({{139,1}}); const std::vector> FNAV_region3_1_bit({{140,1}}); const std::vector> FNAV_region4_1_bit({{141,1}}); const std::vector> FNAV_region5_1_bit({{142,1}}); const std::vector> FNAV_BGD_1_bit({{143,10}}); const double FNAV_BGD_1_LSB = TWO_N32; const std::vector> FNAV_E5ahs_1_bit({{153,2}}); const std::vector> FNAV_WN_1_bit({{155,12}}); const std::vector> FNAV_TOW_1_bit({{167,20}}); const std::vector> FNAV_E5advs_1_bit({{187,1}}); // WORD 2 Ephemeris (1/3) const std::vector> FNAV_IODnav_2_bit({{6,10}}); const std::vector> FNAV_M0_2_bit({{16,32}}); const double FNAV_M0_2_LSB = PI_TWO_N31; const std::vector> FNAV_omegadot_2_bit({{48,24}}); const double FNAV_omegadot_2_LSB = PI_TWO_N43; const std::vector> FNAV_e_2_bit({{72,32}}); const double FNAV_e_2_LSB = TWO_N33; const std::vector> FNAV_a12_2_bit({{104,32}}); const double FNAV_a12_2_LSB = TWO_N19; const std::vector> FNAV_omega0_2_bit({{136,32}}); const double FNAV_omega0_2_LSB = PI_TWO_N31; const std::vector> FNAV_idot_2_bit({{168,14}}); const double FNAV_idot_2_LSB = PI_TWO_N43; const std::vector> FNAV_WN_2_bit({{182,12}}); const std::vector> FNAV_TOW_2_bit({{194,20}}); // WORD 3 Ephemeris (2/3) const std::vector> FNAV_IODnav_3_bit({{6,10}}); const std::vector> FNAV_i0_3_bit({{16,32}}); const double FNAV_i0_3_LSB = PI_TWO_N31; const std::vector> FNAV_w_3_bit({{48,32}}); const double FNAV_w_3_LSB = PI_TWO_N31; const std::vector> FNAV_deltan_3_bit({{80,16}}); const double FNAV_deltan_3_LSB = PI_TWO_N43; const std::vector> FNAV_Cuc_3_bit({{96,16}}); const double FNAV_Cuc_3_LSB = TWO_N29; const std::vector> FNAV_Cus_3_bit({{112,16}}); const double FNAV_Cus_3_LSB = TWO_N29; const std::vector> FNAV_Crc_3_bit({{128,16}}); const double FNAV_Crc_3_LSB = TWO_N5; const std::vector> FNAV_Crs_3_bit({{144,16}}); const double FNAV_Crs_3_LSB = TWO_N5; const std::vector> FNAV_t0e_3_bit({{160,14}}); const double FNAV_t0e_3_LSB = 60; const std::vector> FNAV_WN_3_bit({{174,12}}); const std::vector> FNAV_TOW_3_bit({{186,20}}); // WORD 4 Ephemeris (3/3) const std::vector> FNAV_IODnav_4_bit({{6,10}}); const std::vector> FNAV_Cic_4_bit({{16,16}}); const double FNAV_Cic_4_LSB = TWO_N29; const std::vector> FNAV_Cis_4_bit({{32,16}}); const double FNAV_Cis_4_LSB = TWO_N29; const std::vector> FNAV_A0_4_bit({{48,32}}); const double FNAV_A0_4_LSB = TWO_N30; const std::vector> FNAV_A1_4_bit({{80,24}}); const double FNAV_A1_4_LSB = TWO_N50; const std::vector> FNAV_deltatls_4_bit({{104,8}}); const std::vector> FNAV_t0t_4_bit({{112,8}}); const double FNAV_t0t_4_LSB = 3600; const std::vector> FNAV_WNot_4_bit({{120,8}}); const std::vector> FNAV_WNlsf_4_bit({{128,8}}); const std::vector> FNAV_DN_4_bit({{136,3}}); const std::vector> FNAV_deltatlsf_4_bit({{139,8}}); const std::vector> FNAV_t0g_4_bit({{147,8}}); const double FNAV_t0g_4_LSB = 3600; const std::vector> FNAV_A0g_4_bit({{155,16}}); const double FNAV_A0g_4_LSB = TWO_N35; const std::vector> FNAV_A1g_4_bit({{171,12}}); const double FNAV_A1g_4_LSB = TWO_N51; const std::vector> FNAV_WN0g_4_bit({{183,6}}); const std::vector> FNAV_TOW_4_bit({{189,20}}); // WORD 5 Almanac SVID1 SVID2(1/2) const std::vector> FNAV_IODa_5_bit({{6,4}}); const std::vector> FNAV_WNa_5_bit({{10,2}}); const std::vector> FNAV_t0a_5_bit({{12,10}}); const double FNAV_t0a_5_LSB = 600; const std::vector> FNAV_SVID1_5_bit({{22,6}}); const std::vector> FNAV_Deltaa12_1_5_bit({{28,13}}); const double FNAV_Deltaa12_5_LSB = TWO_N9; const std::vector> FNAV_e_1_5_bit({{41,11}}); const double FNAV_e_5_LSB = TWO_N16; const std::vector> FNAV_w_1_5_bit({{52,16}}); const double FNAV_w_5_LSB = TWO_N15; const std::vector> FNAV_deltai_1_5_bit({{68,11}}); const double FNAV_deltai_5_LSB = TWO_N14; const std::vector> FNAV_Omega0_1_5_bit({{79,16}}); const double FNAV_Omega0_5_LSB = TWO_N15; const std::vector> FNAV_Omegadot_1_5_bit({{95,11}}); const double FNAV_Omegadot_5_LSB = TWO_N33; const std::vector> FNAV_M0_1_5_bit({{106,16}}); const double FNAV_M0_5_LSB = TWO_N15; const std::vector> FNAV_af0_1_5_bit({{122,16}}); const double FNAV_af0_5_LSB = TWO_N19; const std::vector> FNAV_af1_1_5_bit({{138,13}}); const double FNAV_af1_5_LSB = TWO_N38; const std::vector> FNAV_E5ahs_1_5_bit({{151,2}}); const std::vector> FNAV_SVID2_5_bit({{153,6}}); const std::vector> FNAV_Deltaa12_2_5_bit({{159,13}}); const std::vector> FNAV_e_2_5_bit({{172,11}}); const std::vector> FNAV_w_2_5_bit({{183,16}}); const std::vector> FNAV_deltai_2_5_bit({{199,11}}); //const std::vector> FNAV_Omega012_2_5_bit({{210,4}}); // WORD 6 Almanac SVID2(1/2) SVID3 const std::vector> FNAV_IODa_6_bit({{6,4}}); //const std::vector> FNAV_Omega022_2_6_bit({{10,12}}); const std::vector> FNAV_Omegadot_2_6_bit({{22,11}}); const std::vector> FNAV_M0_2_6_bit({{33,16}}); const std::vector> FNAV_af0_2_6_bit({{49,16}}); const std::vector> FNAV_af1_2_6_bit({{65,13}}); const std::vector> FNAV_E5ahs_2_6_bit({{78,2}}); const std::vector> FNAV_SVID3_6_bit({{80,6}}); const std::vector> FNAV_Deltaa12_3_6_bit({{86,13}}); const std::vector> FNAV_e_3_6_bit({{99,11}}); const std::vector> FNAV_w_3_6_bit({{110,16}}); const std::vector> FNAV_deltai_3_6_bit({{126,11}}); const std::vector> FNAV_Omega0_3_6_bit({{137,16}}); const std::vector> FNAV_Omegadot_3_6_bit({{153,11}}); const std::vector> FNAV_M0_3_6_bit({{164,16}}); const std::vector> FNAV_af0_3_6_bit({{180,16}}); const std::vector> FNAV_af1_3_6_bit({{196,13}}); const std::vector> FNAV_E5ahs_3_6_bit({{209,2}}); // Galileo E5a-I primary codes const std::string Galileo_E5a_I_PRIMARY_CODE[Galileo_E5a_NUMBER_OF_CODES] = { "3CEA9DA7B07B13A6CC0AE53DAD1EE2A0FCC70009338C08AC0EE457F76A1690815C3C940AB722487CC8F3D1F4C428828E7FD2A21230E42A3BBDF1E792165F644D0E0335F95EBDC93D6005CC0C680DB7B0E1B8C4946B7974319F9816141DB9E01011E4F20DA8F1B8E15A6F618CF599C3F5C1A1B276D51318ED4119BCE0ACD0332F3DD8F88EC5215AB311C51FF4987DA93B09A43BA84CF08032F6CB28F43043C54586811D870AD6FA27AA63785345C8BCDD3DA26A0134738BC7E08461D5409FF0B791D8574CE797FC5EF7821055028CB4AF92AE1088F8806CD55F0E5FDFCD8D74ED801B2B44AD5D79D1924D41DDC6AB2070B5360CB64CCF487FE517420348CC39BF50BDF78BE7DA91542FEAB689457B3EE69E43C75FADC303F31032FD96B7DC70A88C3B7BAC7322B285D9CFB3A93AC8B890165F23848FAD8477DBDD3D0AA4CB3CD73A48000B6D134DA2DA70B56E590A101AEE78864DA0C64A7BCC6B37CD6F31E9AFF10CA4D47630752D253944632DF6EC60AECDCD223F29399CDA3B74D1DFA5471277EE6C814464A8C55D3C0B83B36B6AC9FA90CE876ACDF65E3EA3FD61D309EB71ED29A3D510B2F4C0B6D6C5B57EC9060CFBE48389DCB17CBB2284E7F578565B91503B06F49CF3E8534870AEB6AD9707265A9A1E6E2E5E6DF6DAA367239A96EF5B02C19A4543D537EB4D9D73966C09E9B52B4706F57B3E0987885EB84DEA26F7823D895F62015188ED38C04CC6714F797FDB0BC713E3D0208462F9A68E3872A167BF1BF9791AEE8BB73CF527C50975B55C4E5C2F2E95B677F833ECC878D1764839608CC1108A75EE9E58FFCFE4CB52884E7AF15EE0632E0729DA1CF5B7A227028CFE1E08F8B881E1A743D52DD27BED33DE0EE75DC031B4864CF192DFEAF64F726D73321363A233F81C57232432D2B0A5A4C44F4320847A9C143F378F204185D2B571482FE45D6BCA152E6EA7223BFC6DCE06CEF90CE9114623EAB9B1EC789B2051B4AB711DABF5B16FCD970F437B8860313B4F1F14D384EE3976B7E55D2FDCB7E1BD9BE18B722E37C853ADC7E1CC2870A02881F95B78487780E1D1C296415109CF07AB63D0782A9F451CBEB3E8B919917AEDBCA8A8E563AD3784639793E0F25CC9CC62240FA04B2F141E71BF5C84EAC56431159556B8BCE077A51469A87737D3D6F06D97DD479FCC35129F4499C19EF98BDCEA9D4941B3756CDE1997C3AFCAE62B6D9E23341E11CD05A7FFF52F5814011A84D737E1264109006BEF5F19E3C6A9C7521B44741A8282755A8F0DC2FA0E1F6CA4FB34D8CD5FAA27E18808868725B9634376137C1BBC46934F83958112D03082DDD6148F353BD1DD24B9F8FD7AD89C40DA0A92A8DBE3608038CD56FFC4ACA35241D76FAC4CAE1211AAD9D73D51C81C59BCE05F71C345730D3A2C670F8F533A950EF24B00EFE6A3F1354694ABCC6FD9EC4E74DDE1F287AD4F847A297ECCCC39AF029EFCDDDB19932D906B9CEDFCBE0D422CEE305DD05E407340F28EEEA866664D60AF293A45D5D6D5C0000B05F79463DB513ED488DE7BD4EC9EACFEF973B23CE4E9539EFCB797456CF5FD1EC54FDCEE80B39063C48B91A5C2D2BEBC81B9B46D0AD6503BE5AACED2BA5EBE81F630B4E07510356E8229F7FC5EA532B8729CDB819E066A15379AC6942CD4BC5E97C6791E098105C323A3A3DA3880D5EE5562ABBA2BDC9906F4486B51ACF8AA4405E9D7A63DB9E3058782DD9AF3995FFB3D34AEF98234A0B3DC62C339325B60706C068F0198BD8FA658396D06931B069155217690C7F88FD230CDB38E3E48530BD47722FC", "9D8CF144C4B667345D44F765622A956CAC4E097AB1CAB05CFBCC6BB68C709503AD9DB09C09C983D46A04A05B6F7EB26DB4D46F868C10E112828B1AEDB3C0074BE0DE3C9B7821BABB4F8B8E24F69869CCD981B09A783BF6A95F39ECFAF25DED6B16F89EA09D3A8413CCEBB545651B363DD385D12BB72420440C40E804FA27DE029A1E08629BAAB598C035DC58FDD309844F3BEBDE40FCC231F38605DED06572ADD85DC51D3D8B89B4480143D0B75283522354330E5CCF4DE1A6E68047D5B8D45D835A891F2D40C9DB8A76CEB1D18FE2BC38D080A8D97064CC87D692DF21184ABFDDA7642D0BD6F3209D06B4AE7600F7DDDB71DA751120599117ECCE645FD109CCA2EC7DB98F4177F14DB854FEB314B5D7CDC3385AD203464EADEAFF4AD08DFEF3D21240BFB8EFCAAC1356C72A0F5C61BE03CD2A21A7D756FA9003D562FC4A49A6BE788EC8D80054ACA881DFFF72C2966EECD09F185EDD11218C6696DB14E05FFF3644D11E508F4F1E9C5AB3074FB1C3FB21092A1C8D5AE05688FA4A9226C3C30D0BC3981933DC8648240F8CB67085F53AC5295428DC8447A1E5A46C2BA86796982C4C6CC647FD8079BC4024BB69E2B226E6F3D0F8A90B4D36DA2AED4C6BB60D318AA7479FDC2031143C67CB4381C27072E12935001524C7BECEDAA9954BCC2AA218E9EC2C95498FD8DF655C015896D9ED42CE7F91CBBA2CC4A7920038EBB5F5CE638F969F8B179E72AE252BE7E826E5CB53C2E85AAF1E1F1AD8D534F78A681928818AC3154651FFC583DEB0A6A1F40B98771ACC528AAF80D210ADAF83597869968D499ADE9A19BAF341E8CBA20F0E1473BDD898C24C7A5466F9924EC7EE992A2086AF295BEE1F6D0F8843D91180BF2C981C11FD978B23B6BAF7786BD526B458B76A87C31D7C52DFA43F3D362C8EEFFFB3FE5FB3F6E5F34B1FEC7EF1031146F3F609B32677F148F7DEBCF3526BB45582436A3092408193D6312626E46ECFA96FEAD12A234CACE10FAF9DE75EE2D238088146328E10E9ECDBB0B018ECDF2725415CF5A06AAB857403BBF6CBFC350903A982864827988BC805A3484A31FECF7A40D4FE251BC7E487613B9D3A48D3C7DAEFDC49C4B7E625F868DB53A798515A61050978552699EF2A5BF2F13BDD444EADC9B60B479FDD4633EB4C1062AA78BEF06692DED203819D3160310FD7F2343732156A9CBCB0B50BA9A8F93E339B702670E54BFA6DB2E2E773202C690FB71EB03671AB0B1B02B2F189BD99061ADD23F75F4914067AE638C9A29DD3661C28AE272CE692CBDE6AE880FBCF272E548342372CBAF6370C7E3AE9648341CE7310BE1C534B5702B0611AF65868F840B6B7613FDAEA21DEFB4F2024487023B02B8B58C9E9F27AA787EE775249EFC40913CBBD69C38538F239B203815F00F7B9CB30DC79E6A0C3E069D109E4A1BAEEE36D354C3D0121F1342F1F4AC504A68D69DEC158D54B04BE8164B48F31BC0827A0379C5237070B6F963741AD9ED4F3865698FB8233D7F49ED4E0EEF3AD927CBAF4FAE183252BC56AE4CDE3E329B1D9C87C6C11429B15B8EE589213CFAC208A12AA01B4F1F7CC35CD0AEAE217471B3DAC1C279F353DC61994FC45FEDBBE0005D8EC729385645864EF98A3A417E62F1EACA7E60D4E773BB2E4024D62830F103A7988733DD7BBCF3AB0CD0049006FE2F7EB3821724BEC37EAE44681A9699A025D212724CD98CA3415FE2BD09FADC02F1501FA38A6083427B662DDCBD0460E12A09072698EC8966C47B8A640AC79C1B7722E78A6C28680F4BB77BBA477BE0A6FAB959B9753217C5708", "45D1C8FF162EE106CC87C3EBF6A837930F8CC797EC7A446E8A213ABD239582350636B19B5BE428A9C13F980B7AF5CD7F32630AFE8693CDF0EC0BC2C84F2472F5B86576E8C43136C14717A24705953D392BAC96C1055B782C7941D82FEA357E5FDEFF772FB9F3DF248455CADEAC4CBA2EBA9C91184006D1680E000D59E4BC8FBE2C2F7CC2E78BFA5B60EB292F244E6CF497D5A287432F2520B31B9D9FEC1210923299EDFF043CE077195509E92372F5959AAB4666AE486DEFA400D81463C388CD05C677BFD4953D2627105B0A776960FEE916C75D53981D30DC689581B7E8E0723D65949662ECFAA6FCC9F0CE8892E367721718F906207663F9AD450AE98D75DF004080FC15DC2CD7A1DCE013A0E547ADDC29A397ECB9E7FA02035327AC40240E2091098708D424563AB7C5867F3F2D78EE3EF5B658FDDBD49435060CA2EA3D559CDE957B7E48B98DB41CF875F7B3D9EBDF6547B4EDD98DF4B747B0793152FA8CC07C6D9EE5A2002464566D86466C2EDE54A2BF4BBE823049E57364C127A14BFE1B88ECF70EFB81EB831BBF50F6AE124E5F6A775F3F2620E91D489CCF24811C0890EF905E9E2ACD399E13DC81333A54BDD295B872EB74E412E2FB654A9874854FBC3A68C73434C5FC5CED27534B2B13C316205FF4E432FAFC13A7B5B7A7FFA9FEEDB5AE69036F8F2955DA124CE5856E8C53F24E609F7D3386DC5212B2E78B5AA23B59D45FE98AA08E9CFAA9D52ED260A36AF07522C047ED43808A39D7019E444EDF84D885A9AC84092A0F6BFED562F3E0D79FB5CF62F98E67EF219FA3F5AEB7D4E344642D3D4B1A7EEA18464F6CE8D4CB3181D9EBF6F4122751B54D0D7F3FC470A91B547148AAB1CA0DF59872120190640555A7561B0F2C11280768F74B1A56674FD5480B0F510491431810D99CECBC6DB85888BACBE2B020FB8B3D78039773229714156494EAEC3A2D0A59E718F72205747D69C05DDF1C678E2E154A1F84EF0CA2E24DC4A6A996F0850A396D2432596EAE84AEC0935B8C25D5C65B52A32722F01D281C4F753EE03EB10020E9FA02462CA303DA39560669637532D381EB78AE5EC0F6DBF6273EC979442E6243F65FC51F26C6C9554C6C0E3EFF33BC4EAB6A27CAB9383BE7DDDE4218C4998033B47919503E1C9A789711EBEAAD6C0298B3DC563F54D28675260F6D896F1B8D4FD0001C429210398E9544B3DAA12C31F7EE82EF4D2234E26F873610B76756DDACD24B6132BCFFE735FE75513ED527DD04D7DC6D24059F85706679DCD1474A9DB9571426BE17E6DEBA58B33B708567697F471CA8B78E8FA73B0E18CB6F88BF9E4F442F0FC21FAB89305484828F18B65F9D373A6A2B380D73F5924F80DA234C1DD87416D025E4E663C96F287B0C83DC92C2164D81830781B715209FD11A65E64962D805389BAAA91DFBB990D3511E506A8EC101131C5B7284252F861D047DB2C2027DBAAD487ABFE429CA21CBEA7671350618E441F4D62F2D579CAE29D97023A8873869B553293D9F54D4A929E252AF132325A6E3BCBF7B36D0DAFA1E56A39A5D801FD0D5A41111017BF62AAF8346C7D424FE007C32B437ADE60AAA9540AA5078FE6C3C3CCEA53EE863086646C976FE6C79434A0AA4F53B2E9E2C3B4CF9C9C4015391E27CDFF5C1FCCCC00BBF5B99715A1265F591E294D530DB14DFD485AD34BBCEA32E5B5D0EED15F88BF5D96D058E6D70BB1A232597E35A625E5E8C2EF5E7031A71F70309019A0591BA0A50E87C839498255A3602C0FAE53166BE5E49E29D24AEC47002B698F80FC49E718B66A8959259ACC540", "7A0133D5CC3754D6B259A2CC4EC0298111D098CDFB40549E5C40B36A2846CB4B256672BA189CD3A05293BB36B167508A7BECA3110BFF339BA06340585DE8EDA03AD244A77F54B7931610B6F9C5C54D688A0526A9B52605BD7D7BB01A63F3D1565CF78ED904BBE4AFA4A290EADFE9DC156E59BAC162A818B6CDF38D2BC715144D44A1578BFC727423777784D15ACFE80FACAB61F9E58B5D3FFDDB065A00C5D49DF0237EA6C488D7758F1A689DC59DBFF78261016A7C723FE52FFE571F5876FE0ED50FB00A90BB82B27BCAF5A67374284844E06BB1B2D84B1D20228F5C2208CA7E8EEC2E95027B09372A309223A15C132543FF3A89B7AFBA56AA7A8DBE70E0805D3A54191CC6884D75ED0FC00C06D9D488B0F4816E12D6C2A4324EF742AC8FF885E42100849DA05E3B7C451D43ADBEDDFDD13076CD8D22BDA101F665B5878E321A009B970D1F4C48503CE35365543B3F36786802E5C53FDD756C595784E4F130904044660784ECD9C9161477F5BCEFC98987540AD1E86CABD3EC7823D83877605FFC79820F1381DA29282C3C5B3443B6A67973F0622EA5DAA14FA239542EB140082F242958B39014486E5D5632C62C3EC8BE0E09E038C0ABD52B1322E0F7407FA53AE8D761858136CB371AED5E6FC9D32CADC8F870EE833B7120BC0278D9A05554D90DBEB24ED6F5A8861698D48B4BF7AFE7763C1401572643E246DC65853996B0480D38DB7302364409357137DCD0B416561B9511BA43CA34341FEF7954C28B2D9FF96EA110E0818309C32AD306DA077CC911299FAD6396C872F3F6AF7871395D7E67879EFED929E4C05AB4C09E8BB396048150A4161D7944CBD99C94DD16CD8E0D8BB73768B17EC02C0D4206AF623037D6F4257DAB4C07B4A6C0B4D2E0C9923FBADE3DFF7FDAB45F4E6BC5A895FAE4F5BB9EA247F2D4446E260F7988C452203EEA1DFA64DEC2DCC090BB3ABE13F6A8718F8DA2BE551407B59B8EF1806A65526B6B872CB8922BB929F09341554A71E69B41B60987FE3A5E7E3424D947455083A827FFE27FB5BC5365C80998DE01CCDB66213575FB61B3E6F877D0E2E4EFDE4467D9F07B6A28148FE2FD6EDC9202F55FC855D0DF8C49E244C40CC3D95FC06C6778D397461BD157F4A0FFD915799820D55F52C96AEC0CC5A3E7A2151A845EECEE78B82ED9A217E326CF6C49F7D31C4D8ACAFD827E6ABB760150203448C000819E7E0B6E424C43A5500164CF128D686B4810D9838480604A891792987FDC549D87F95BCA120AB84FCCD8C9F93F988C87E79599F3C1952BC0F7773BDFFC50B19BDF8E3D8F52D887E45B643297650044E80124BEA0ED60FEC4449BB3BBE394CDF7CC7AA39BC1A5023044F6A843186C01EE1BF5834EB5401AF7905FC04447AE00DAC50B051B432F831FE5AAA7506160CFD7D4639C489ECA447F4F993AF0503CE5EF68A837FCF85B85993ECC55A9A3673F8F2C5CB8D3DD4C60E8421E3417EA958EF87E0764B061A39C32ABD5E0E3A712B54B0A3E2D351A0E00F4E901521C63C1F4ED829F6E259A1F720FDE96EA9CBB8F7BD7485531A81A49CDEFCE725493A04B5EAAF7411DEACDE5A95AB6C2AA7BE3269F6AE4D166D8A5FD5264B135FF8361FF75B2FF22A61905A349C6B2C1DB2BD7B385B8FBDCB2768C7926F138D5F8107111563CE527322AC42E6BD42485668106B8CE91F157E0C94448869F7AABA255821DF981CD5298D40378FB0E33A3DF8A037BC21F0AE268E69F7CF61E7E117BB463EDE3C7D2EF95987C66AC3E5C7D79C44A7590BFCF998683701DAD7B98731DBCB455E61428", "64D4236F326627BC08E9B2B96C1A9E5BA2631DCCA3F7A5B63736E4EA8074056DCD6BF0E5D6DB8845D9271C0D706F972AF22E652E3B2A7CC482B125EF8BE005F25D5109F6F9DD84DF966E2E0B8950FE1C01E2DF15205EC48BECEFB32511DCC39678F9DB08ED0EFF64C7B5DAED1DFD202F63B6EDBCFB7E4FBB431718BBFA2B65594D78D3983B0457DDDB350AF2C1B9743AB9EFC260A78C3144622C50D528B7D47DDE46FB9DA33D1E7DE6D5829258C2F02D54085AD0121A1BC8339A2847F6F161CB6EEFC5E3FFB12E6C77E5FE10E0D4B02E58142DBE5BF900B7B64EA79D520A35506AF4987E67BCC80D00FF467A0889A14B85B4745888B09DF7B4D3316D9B4A9B17C4CEDFCB0A55E2AAC53B538705673B2A2EE4ABA914E20ECAED730E3D5E272A65A74C366177A711095624A679C9300FEC18E20E65DA3645F23AABEF7EB7C7FF49B289FD2F44661F6F5F689B6E06EFCC99F8A5EAF558E10F2236E002F7D97C316698D6833792C456F812A339166E9FB3B3F61734B98AD2DC9A484A14A6025114D072B68C47DDE97322E213F5D6A93762A45C4C73C7832BB31209C4B1F0094BD24BA23CA9378FB893AB078FA3BC4763704EB6A0C8EC965690CA5B858DAFE623AB88ED39154F46B9030462DEC9070DA9DC34063C1CAB3FB84D60337F1D6D95D1A173650C96128D3C036D0B72B4D2A298186CCA8E1F386E1F70C0716F0BE370A6B325CDFDEAD3CC67E021E9D4C839230708DCCB062096F32C4DBE3C4876A7D1A26072673A6CABDD8D65A5E91CC5E973F00FA67619F749930F9D40B767E434D0955D47FC17BB37E4B7CCE63B1D666AF5D67FCE5FE5469D3DF6B6855F9C308DDFDF6733FA7B8511B25193C27925F3619F5F836014A64A2C8B783A50C6B3001001D621CEC582FA4E52C2B916A418F49ECFDB5ABCA40E1A8D38FE400FC2D0C185009E85546A92E829DC1AD2A7AC3DD23EB77F3D80015BDA4135B1194B10ECFC87C1102B3D366C5460D20D83E778142F1A4EDFDECF3D0BC448CE24A49C609B035A99B64FABF071C58DF592BBC625359BC23A565F4BB077DCF879E14ACE87F709D276982A3D10B23A9538A6A3DEEBBF0B712DB4C16B0FF508F3E4AF4AA759738302D24C6D13037DC81B0394FE785FD14A322BC00ED95E0E9D527FE5316748DD893DB03D5C4149D471DE98C386A2E9DCFF05181E837A1814D54C9CA708CB5E7A10B0FF4F540338BE403E4B9713015A99260795DF5832CCE8D5F763C68BDA51133AF1D012C283E8F4B1DDBB4EE8C351C4AF86FB436571F53B2E80AC04BE26EA617EFA9C5578FBBD81DD1809EC5BCA5DF4A85B24970EBD88D9856B2136616F85A338771BEE80F20F6E5652FAD00F49F3C349061DE3052841992EAA04CE15DB6C48888BD3CC5EF4D6CEBF00431CCB7C5289D79E67FC6CF2DA88AB60CB65D0F687455A535C33547553966D197BAD9778542F6CC7182289AED366ED1CDB0C5EC1E9C0F0E21D4D2B8D01EF4BA394E0C6B05B8EF42D81F773D3D251D6264CA23DA5CA2D4884544FDB81A243974FEECB416D0748449BA0CDC69E56D666FCD24D9BD7C322CBC038CEC658B5253227D87C527473F34BBA3E2FC18784F864233FF8528A874A8503840AAD03B63F79FEAA6C07E4467C4A04366ACD35E32A142DD76A23417EDBB8004944A1E51880CAA97937493EA5BD5A41298863A71D33156CDB942C166748DF66B80ECAD27675A673C8692805B42E97F1B28DCC9BCB58FDF8BE55E2034E73E444A225DDDCA5B46BEBA51AE98A27990F622B32B2C337046E459B173D94BBE5FDAE31FFD4", "23300D5D80ECA6A471DE5CBA1D29B7010240D95FE341A62FF8175ECAA9566011AEDE6EDA0EF2CFFA7BFF9F4C9AB2C97F6554BB182B23F2772090FE7C4ACB8BE7427E7A8535DA3A670341D88CFE694D1CF40156E9B0557EA317A0B3E21F3A629D1CA971482B1A54697BBC2020BBACBBB9D1E67DC33F52C4B446A36D4331FB02F19BF1A647D05714450E591C65853176A04DD561E0933CF3F24A2E4707C44FE29C5D7706723FF53ADDDC67A67C23769CA32876F0CF31D233D352FF6A7277E5A3A7578A6F2A76456C0AA876680CDF2702B114E02D22D9F59077B9DB2ABFED673158EFAE4C23A75FC8BE701D973169AA7015297BDCAD4870D4F152DC556A06BBBBAEDFFCE40E6BA4F0FEB154F32D8E1492F74EE7085937600EE176ABFD6B8638E983EAD26C63805B98745BA290813CB65CCE33DF6B98240E571DEC4BFB2430C4B8FEC23C1BD5C3E87E0E746BA8A7722A6A660C5095FEA8E1C4978B966F487376DF42C9668E5D3102F123FDCE7B8D80E8BC84AF0D91E9355FF6F7482BA74E0BBA7DACE85BC053F31074151566334B4DDA37C6C51BB947811F284B671FE53FC464CC30DDE59A3D9CAD26822183E96D2F4BE60905B94BB8B167B734A0F0B26AD0E5083A34E68A620151966D073293E5D430D0726C0FE35BA3F1F44D851D374ABD80E826DD84A665165B3B82D540CDED9EF60CE48E87802F16F5DD89163AEC8E9C523E9F99AACCC6F00126C4C8663A7D64D919EC41ACA337379496D0CC876199A86404CE5844F8E2CACFB00A985B92B7A393CE464DB19E0B5FD65BA92D8EC1164CB1ECD994F82396F6A52BE2B66C8780A5AEFC0293EE437E7FBF9BF8880B61C8313C3865561A4287BFCABABB90B3A11F6AA57C2B2A6047F1316AFE1DFE540C4F1D5270F3EE3E023E202AA530211DC51F8C2E87636C14EC8300271A6454A924A8093716756F79780D94DC6863C24C80A405D6F52DEE81810EB850C1F60732AB24209773F66B2D2AEDEDAD6FFF60902910D4858B0F706414F5779590F2DA7C249E5DC1484EC40EDBB01920A5175CB9D74EFF957A61FE3E08DD7C5DED5B299C03299F25E39B161E1DC1C586E39D0BAF38C09C2EC0B22589AC489C3199EA4E66611C45A68A7254D292C78C3978C381F297D7DCD8C0F7646E7AB6DCF155B67F10C3F915F9B3AD96C21379993D8C5D6957847EA81B3BB4BB0863F0CED12F5CC48A4325CDA65268110C1C156F845951AF3C3C90280F8883CE0236FF02DB0CB07721261432C7E0D479F859D8EB7C433F67721B06E001498656578F0E3CEF2A6B941519885BBBB03F33DEEA07802226AEBA473CFEA6EB894F45D1BB937ADF5180F5FE22857CE0EB75D251B02D89E5502560A0B6B012C191DE9D62FD28CF503375F2A1FA9EFE0E42DA81A6EB3A6DBA299726EACC6F3BE91ED51A25EAD5F3E7067720F7D4BB72F8BE2DF978C46E1DFB4B0EA17BFCEFEBBFE40C66ED1F288BE08D6CD0B097C7ED1205E43F8FFB7086120FD153C47272188799D0F4554E9A4131C6B1460077A99E8198B3717AFE5E7C95D3F49B3779EFF9E935FA63A6F881F039436EBDCA2EBE6FE00109B658BA5555BAAA4A401D1FFCBCE0369798BB3BF8B54FCEAA5FE25F31AA02208B0F070270F9E043BAEEDAD4432B1C2DAC9F7B4CDCB52965EC43C2E99764AD2613BCBE468C9477E64B8BDCB64CFCE01C06EB66A15FB034D1AAA507AFB6842AF66AC8C18807E98884C6A780805720718A3A4D1A7B094846C55B0808736199CF4EC3F66B713259CC715B22B92AFB1599B7AD539B188E99B39F9A92987D0ED15C94", "91CEF241899B4DD47BF31F3BBEF20F5BF13D9A98D3F133AE61F3E4A87A299A6B115B96DA6B2811414D204A49EDA0E1A763E1EAFB78CE05C181DD0947CD50276A10D62543A0ECBA57DAB5DC794AD7006A520B419533CE8519F4EE4194B58B2E36F9E9705266B6E304D1DBC6B73491045548637449E5C657B263CBD9577AD8DB7D5A5BB5DF43A869FF91BB8706D4E81A4F8243C214D9884104675F2BCB426CD785A28F4856E363E1ECC974325487DC40E7304D3D7CADA5DCCA6E60F4457DA181A39801D35F20E1DFA05BC09E7699FA289A87EAB311BA8700AEC0F90950E5FF740DAE7EAE7FCAE8B0D9FB82ABD25BF46FAA635F570C22A76C52F9733D5BE64BA67AEB5D826288D03D8A23C5BD3FD6DBA68082B7815044E24859865ED557C7DE8F866823CD4716E573BFF30067F0931D0AFED0146D55B0B2A3D6C57481D94F61279DC4D2C6DCA1CEE27DF24426E55AB4FFB87068AC8AA6F286151356CEB29D993B4FB26192319C373A1F0F58FF5949783E71671FB58A683DC1CFE166FE1AEFEC8A41C5FC06A31F4EFFFA3EB7C388E1BF99667A5D2697F7132409641AA812EE84EA8735BB46E5069A7BF1B2618B56ACB97C368AA7BDE1BE0F0BF286B6D08B42702F1EDEF408BC529B4158824F673B30E3D3247FA59DCB83D004459CC5EF87BD6C7D188FD91A2A7FFDB008244F8618ED46A73323E9C7F9D5A83298F8C81702FB4523AFEA589D4CC269BD226D04689F132F766770FF23C832EB5695713AB99B74035540031AD1D9D9047D72B1910BC320A65A9F63A40C02FAFE217BA0C51FFE24E96DACE57C1318351038FBB81E76EA34853484E7ECEB672A4180A3D24B6C692747E9D306DD0AF275EC0581A30AC2E80EC73B04B1EF83160FD88DC43406CD715EAB1677F1422FCAB85D1D1EAC64F698B9ED69FC9F2B5519AF9153D5AB722339434C780886B81DC2878B27177B4616450BC1DE99C49C965DC9257BC78ACA052E998493A0CBF7B6AC86EDBC2627E43E7521A9DE7824DFA7DE19AEEA5892685D50EB10128B3D14F3C670F639AF6F2B2F6168A1E551A65781A418ED697E6AB3CF91EA2470995A401B08380CA58B9439DDA7BDB7A92E91016567D57D57D5D0DC4D8E3C1490CA1BEC03FDE065C7B7F34DBC40BF704149A0573C55A0EE4C415533829EEE71BD8C392FD622572DE009044E937AEEDF672886CF4A36ECFE7B0F8BA9CD9EBDEAEC40BD74AD34CCD2C7DD07F7AA64EBF4DA9C8810C05F55619B808127CCA00D171BFEA3E1EC0895A22218DF1A0514FE5D16DC416D9FFEEA8EA3BC9FC650F678EB731E70A6110E138E059371D5A10BEF6420A0C8BD45F836B7D310E732BDD0FE57D93A6934317FD8E2449BA0F0C6E1B36821B62D1F80B9CB6A5B407B6755977C06BB2C3CEED0B14D4D73A3554FAA54EF2C350C388B230B30148605035E4F481A769564E2814A160A67E6F0DFFA7814D0C12772C0496737C52016A93C6753C82FA896BDFF3BCC72105D6EA5B52B3810004DDEDC266F1C90CACF49BA7DB5016A4E485F06355441CA204F7D589F2A3159541F991682E6AEAC0C7359B3282A04B2DC69BB0AD6CF49C48343C8A769D3EFBE8D0814E72934F7CDE698061EC68FAAB39016B96BDC5363D2B53363A548E6476647C10F55611469828564C189430D351CA01D2F1029CA3CE1D2853E8E595D46C9C3EE9F7D3EB9C72A25F7B2138063A0F9186FF41CA9C579DA61772FD60408668A877CCF6B65FC2B88935822A6DDABB97D19F7455A9725A8DF2B8E6B28D83ACDACC66F02370575831490B8D8838D4E56AF36ADF8", "AA82DC5072A45A21B7880DEA3E2691FCC22EFF3AC815A2576A7F480ADA6F8426EADB4A96A17EB949BC049A646D46926F0D69E0B3E1911D2CE652FF4D9CBFCFDC30065FF4F779DF896D38587B297BE8E224EFB1DFD04BC2D22832B2955A250B7D0448AD9C0A76DE7C33A4E2B5DA1B3A868852B7F04D848EA6495BE8D2501BB47F24E8DC4B254DC56BB5A4760DF62BDB229F3DF0E0C06274A63A28D11F928AE2DEA72A9974E3C55CE261943F78B771CAE7B5B98642A01DBC06111B137774898F0F113A4DB23BC240BFF147568493FCF0C3D767D3548A1C0EF7AA4B6B2DF566C3E94BF9A183264F63E4FBA58B517FC46C4F0017F8D763A54D044C644D6326677A425F0F5A2A7C8796B9C9F8CD0FC49A1F035BB6662C0CCC0E9508AF8D2B834B929D80096F9BFC922BBF1BFC6F101317EC08ECC1DB52404B30B153F43C266D3E64FC496CFBBD350668B2AB3B596B5E0F0A00757E0D4A771F5A386AE86F5105C1718F7E93CF00F588C722509A03597B95512CFC705F08D3B4D5A3E23C56EB461A719A955AFD3EDC8329BC97E3EC6BAB24D97E16A724ED2D4C02B2371FA3ACAF49175A441C3FDE53C2DDA440C18BDB8A6F27805F944EAA7991D404CA74544E2F3A669DCC4052B6770AAD9EE29A6EF7791C6DF93054D07A2B3CB2327B0EBE7D983624639961AC4C3CEC2A84DBB3A10A830DCAABA9600DED87FD5CBAF4D5F1DB357ED42374175257474BAC200AC1B6A5B87D2FB2092458F51185C380B8BFF682C5BA1D2CBF8BC02E5D485FD811797AED167DE6ACA66B927363D12EA405D75A2E9182B1FD30ABA700C5683611A24EC5DC453F523EAEA44C6E06261A98346328ED9E86CA8F7EA79EEC551F36836272127A45984EE165BEF8AED80D26DC45E34E1794F56C1265DD92B4078FD2AF2F13981C08FE27C55C3C9238BBDE193A956E3F834445D949CAD84D3FF0FCD511C6C598735D5B3B07BDD7D437ADED3ABD6EC3171F3735883C9F511A06F4C6C7D0B137DD0D57869B8FB1375FBFCF9C3D08CDCB12B8D01614AA3C965550E5862AF49B04410D25BA4BE86FA6B0B9D9142461AD3CB4BD6D902EFA49632A78F1463619E1309CC89452C2B453BF9F08A714D67ED90972C62C0468CE17006F9B60138D28DA6362670BA3048CD8D099AF193619AA8384A1758FDF4A04CE56ABE464A66E913DB7BBBFF7EB2ADBD47E6347D7054CCA13000DE13F550C6263AA4135A2E16F1A2A58BEF962113C209CF58CE514FB51EC162D05A4DF832697E544037CA18E62A267D81D539F879F50C654E74BA21B47FFA5C704FAD2147EB3DD8617DE98B3ED4859B605310A777F3DD161F4038486F0872AF55FA3610EE0D68C1D51E0F91EF7D9AF4ED01BFF53FDA16BA3197A518BAC0F82F8895A2BDD9FF4C3035379E870C49DA1AF18B3668792B6640E687BB71F13DF1650C4E1A2CC487C247D1D1356EE16DB8F97363465614E9E63F36C853FB63C12963A8A5D98B52BE8DB31F0954B35C3C749A62C2B34A690803FA66087015506225181C5D6FC101D1494C3A7961ACFB4D9B905323DAADABA1DCD2DDC1F9CBFED7D726E602578CFDC1519925F8DBF9AC5FB4E4CA723BB264B5D106B6206574C46C1A49309C22E1935904942C36148F764B59F10A5CBA0C9397F5798E200A606EFC75DEEA1FFB10A85398E5BFBBC6AA3619A0F611E591245D03B6ADC0C50440A1B1C236ADBA933B2BF84D2C60C807E9F52436904BC62B813FFF8B9C824819C760D0BD636B10572C781B112CC0C603A260AB87986B0280FB913A9E0BCCDEE347F0C744BF8299A9099B8", "F2A17D19ECA96F67ADACC0D83FDCF235F07832E8E78A44A53F9C4CD09C3F88DB226701963147EE0E1AD0F549E11BBA70053A105BD62C40DA810BA37BA72D999CC4FF9BA4D01FCFC670E0D7819871D06C4935C10B85594CB7202F037B25F85141A580AE1CB3E0CA91AD73C6947D2492B8FD2F889B1421E04FF0FB7866218A491D9EF6A35DCACC12CE098EC575C697F5F8D1BF9178B3B36C999EADFFB5CB3A41DB672165CF73A7874FF68B3B901C4E9B8112EF4FF9B9308742ED678DF30E2F7C40BF922099C1A95BE0C231E9F8332EBEEFD99C6DDEF25CA5EBB2985A9689912616815AEA022BFBB87353B8B799D64280A6922CB09044ECAFA51037AC2FCB11516E9E286F64B4CE3E30A55191F24AB53F2E10E5A8920FFBAED77FD4C476E9AEC751763D68409ED9BF7F435E53D401CAD787A50033BB8547C910D90DE100FDF6B904A1F529830E3A51919299FD4476F02C3600AD5D42E3E154AEDCD1C99C1C5B531FE179860EC1EAC69EA0381CD4DCDE8716F94D6510F10FD1915864BA968440CCA6D0D5AD8983C421079B033B56FC34481B9F27188F829F91DD73F27BE8E0456B0F75DBEF40A3C67F274F6A50CDBFFF9798F8DBF1A6CE7158B577550E40639D38861A3CC4E060C9E5BC1F0D3760FA9A89C2CF0A23505F4A642F5EB0A055B96843198CE20133DFE022AFEE043191007276427DC82E877BDE27E20D65DFF8232E9E4DD786C23D4E8B5E84637A22AE5562651BA45369947C159B641710C98494ACAD48B4AD6AD9828897437AFACEE442DF2330669D5F2C6A9893E08507ADBF104C62F6B4D568C5381B28D5162EF0FBECF396E7C622B54A7864F9B31CCB396A0DF82AB86D950B4657237FB769122BE6B783ECE3F798AF68E354C521C77735EDB97D580CC80877ED702231CE2F8B73262AE39EF94E84736949292E065515D40A16BAB13EB9437D30AEC44AD8C67E3AFCE9AB377753BDC481E8E79EB10F89A7C4F7AA24E6FA48A36DD1CFC02CF3FF6DFD0CC1C4030C312532A70B60F678FF2B3586D77DDE74167CFFA62C12F7D0086A6FA59B36C6A025DEA1EA0BFA9861BEFEBEC6B2601DF225E29F36AC97EBDDB21D7E8206E1EC42F3B9CB314E7AE6464D54ABD53D090DE83B466FAF5384E0FAAA6E67F2FBD6A72E00D9274C9B5C768DB4AA4281F25EB2DC6BBE0EA85CE1CD31B32BD1971D6AA20B6C68D66426F09C0C1128A679AF06CAD490DCE3A2DB50181278BC40DF9E094D1D09B281CD1EF1C369E5927407E04918BD21315E12583D7D845933AEF186DAF8B6609C3CA9452857DD2112E86227422491DC7821D7E41DF759BABE6ADD11A4C771CF16469F86262D169F221D97DAC9686B6DA29568B4A2D2579C76CBF948C321F5158EB3FF5F6D4D6D68FA255C81F62A8DD605507D0C6C9D82E6AD258B32DE4AB6FF8FCC4A8C237E270B9673C208E56AA6F4796867762399FC8549DBD232B2CD0F9957A8A24FCEC6E8B3DCCBC67085C542A134F3E80A3CCE8D3DBEF0528432F2BAB2F5DC89D6015BE7F24B2B1F378EE75222EF125A5645AE37AFE6ABDF84CCC3026507BAD9CD8C2EB4020E7763E0F85164734C851532FFE705C111CCB7D738BA8C0D29C5A0A50250D0BE53353A6C407D4F7EDD62F271F099528CCB520E5B6B5695D3FBE628FF65D67CC0D1B766149B9C89D3C770AA133FAE2BF3C9846B30C46584E9F93A8216627CFAD84C37AAD7986B8D69F83392FF8F98C828F8B136633A09718D375327B98A0CF8B7736D229499A52D91D19CBB896A5BF4131691682741797A25FFFE6AC60E30C79385DC778C90", "3D84AE0F7756BCB2518300DB110A07EC46869AC35F1B02650A36C3CA0350356E2808B84A0D9A8A648F920B7D48AFBBF6CA9A37F673DE2B6FB15B189FBBF2444BDE8808118595AA995AE0DF53F5146B011A0AF5B7FCB4B3D3EC074F2DF15CC9708EC50EBEEAFE06F7A0235A50E2DF7F6C023B53819AEA87318C4E67C4742FDEACF57DC539FBD5BA01F64CB45322212C707923303D96E58EB95F7392292885391283DD9477218697698AD6D83AA96B06D68F58FC2B8FD9D61E75337C6815BBFA8B76833FE1856B714ACCB6FB1B5E957DD385658AC760AC5811E3BC079DDF2CE30BDC21AB8D2C7B56D2F6B384FECDE4EB0206A6C00282950C1B72B3E464570364A919812E86BBFD0E1CB2DC98D6FF42617355F2131F72A11F50618CF21A4C4961083FC6BFAB63F544677428BB9F10FE341B947C41AAC1B367E338CC2AA08D6CAD1067F02654794571FA4AA11E211F5E75D194197BE4AF6543009C40EA86F74AEADAAB134CA9E35D79F7CD062B53BE2AD86FA7C2E30D9222A494A25044153420AEB6C8FFC4E0D4C514B8D9F5DD922D8EA387003409539D0B40210B05C9209B008D3E47E8F84C376F46001FFE463F21A92E34D3345751E8E94205EA06FAC16292B8C6D4FA028867AD4C4E8DE0D51BB7AED59547707CFBC2CF3A9235C29EE3A3873B96FB75DD50E758CB2C7196BDC09336A97756DAB994C46D5BBB87F9D80008D09C603A68022BADB1D2F6B98B6B76CB3C0EDAEA07A23065B93DAD67BC59C9BDEF7BDCDEF39D9AC04C9CE8F6DB4A925F77BBF8150AD478E3C6D7D32512ED75BFBCB82C66D505CD8BC5A5679014B355BDC66F365BE9AAF15B76C0CFC0B51E53F86BB4763F0302B448E84B9792F34442743E2D979C5133514D4BB1DE5E8AF938C4CF158336D04B6723F9422161805D5EB059E55C86D0C461399073A705FD6E919D1760B2D6860D65665B486DC0AAD8F7B3ADA9BD681D7FAE4185350BAA543E9F8671F1B4BAEB6D18674516033B2E2E4E427521C290A6E44E1EAF9974BBB360FEA3535CF46D68193C0E208AE5B2F85C2049C906725C92F598E6C0B67DC5F8B7C48CD411E107F4860CFB3C4229A44694ADE0E31A4FD70AE5702C0A7710678763B035C5C6B4B9214D507313F5ED85C444B98278B40446C861057AB9B897638DE4739088FC28A577CBD52A3910885276A2DC8DA99EC74D30DF707BFC60663C869DA4C47BBF4D64A789425C5C894EC2B512C3296D0070DE4942113FFC0B13D03515F2B4EC07A0E3BB7AAF08DE24779F9EEBE26CE7C316EAF47396E538672BB646E1B2016356A407B8828DC25D8F8A8296B4F855290131734C94CB92CBA5689574CE95B60988C42558DAD978F36D67BDDDAA92FEF21282683EBF6D59763384781EB4D3431DF5BB909ADACB397D36D55D2ADEE537D7B1B942F3A815917A388B12285689B40C3B45C04A591672A2B957F924F1CF6049B96A38E304B8641DF6A079614C9F9984FD9C9F0A82ED6E440164AC484252B45147929A58B069E663663CEDF0FA44FD67580BFD23BF77C61B95B533107A25684FDBAA4C1285AB568C9FAB387C6FDDFD5EBDF5AF1CE094C59630E19F621CDED14E3847BDE9B0EEC64C159F23C779C4B80163554900393CD7F1B885F92F183839CDAD7801DC7FCFD08B7E08D23BE21BC80F8655A2F3BD0C483B2C1D23D447682CCD9CE098AECFD7BA7C48F5BDEAC8397220A7852077A8D7933FD353C25E37DAA473E996A5920DEDB80C26DE4FC3AFBD6ACEA16DD3208C9384021D9B1FC1C884319B59276D48D8BF5A0A37D84B8C579EE0D9BC", "446D385D09A3464D1ABDC6D6CCB015280BBE7DCF00078634371D7F327322DD720E8DBD7B8CD97FB9505A118B469762ACA10C4E135ED782FC905EF30F9FBA82F11AE679431F270351F70F0508BA998AD9A71D2BE05F55348B275A0E537C63699C96DD8AB8E0645CA2606E35805F66CE586C81B4A65E2EF036697A18DA49C36CB22404497577107924DC02FD87072490D7EC8D5B376D0C3370F9753E0E7C781952C03D844490370D6853FCA49E12139805C24FE9C9914E3CF91464D332C934570DCD5D1C3C609C6984E28C9BFCBA3669B75452478DA4099CFE0F6311FF782D1D0123A120F657CB536A3810984871B69D25913C305117A7E51D199A56387C2777E349748B9C2C40DECC03DE7235F7237CF43FD421039743CA72361DFEF2491953A3C3F0091FE3EE064B838BD73E9E6EDF8FD90235CDB374892BFC42759792E5636D031795C0DCC70D7DB86C161FE7059CE17B6926FE5D024D6B1B9DD5608839DF85C7802F5655525B633BDAD0803CE14649095C0A7F870F66888C072C410E0E0854238BA7FB259901CAFE3570D398B621518193BBDD75258BCB53AF2789EC66DBE2311DACDC1F9CDB6DBD4BCDCD15F9C2E77E0D2736CD191D2B83389A71B1804A0FB5F2480E38343CA48EC6D1830BA3466E53FC51C4EF05F4D10711A78AB215650462E9A26D9301EFDF15A3CD5EEE14DDAFEFA45171BA3A757CD6FAA5887A5D5A98045BEC7FEB331D01A997282910B6B946CADF0AEA57973520EF0561B233BCF798805B3B048751EA086FA71BCAAE15F8BEB837CD2974EB3E54D3B6D3F99A51F88313FB64218610CD1831E2E6E18EADCFCBE72BE5818B4AE4F3780BAA7D8C4A55DAFC10ACA3EE7AB7D1337506C485C83EB0C41748C668705B4D41D926221D33C31BE7D56B42BAC7E9240FE4C2287B5B41FE88F9B9E19970D0E4569DBFF167EC42BAA2566676EB055B69D159358D23DABFFC86A917490B4942A220038CDADBE24C335DEB895F3472F0D22778BC79B169D1EDA9FD18B31DA66F0246359DB3EBA36269EC5F92E5A1A89560C7DEEFA121A7035EC2501C553854724C5176AE60F87004F6FAEA907B91D1C58837C9FE25BD9C32F66257BD78169B1A4B8ADEBA72B5699D4C2D14F67BB347EC8A96B04278AD9F97A9B40DBB56E7593CF4B3C905108F10968F0AE6A2E7F1D214FC7B45637A256ADA5EEB70E03C02DA2ABF86C36E581A31032DFFEF4343C3E59EC7A2A715E9C199DAFD3BF8C9B43C1D016DCD33E2590A20EC8B657C08E5C0C0BB4F159A07206504780715A252D1F4F5DC65ACCC43E3CDC255123A77792685C9B68AF281863AC89ADBD5F778733E95050ACF781FFA386B3EBCD633D6E8E6D4A42EA85F005AA80A4597D40738A8E8823FE3C84B10CEF044E9651E45D1ECDF59C537AACA58D2BE42655259DFE6CFFFBDAED252254B732EDC93B4D610C50DC81B576C5A5C5BBCAC0BAFD7BDD7771EF1A19C29D7A82E448AFA07E7FAA8651C11D1BD550DDC69F4C9C6A44435034D80B47B512155E5141378A94CD277D4BE11B2A383B1539AC9731079624E81D3A3404F5325F5D2EFBC0929F510529C84B1BC3E7C08F661640E55AC49452C00256BEB49B7A52DA23EFFD85B8C303C6EEDD2202768ECABBFBEE87FBF1DAA992C8439602B1645C462D3297DDA1AD941617B508E481A28D1540212CB281B5388A3691A26AD7D3CEF52FEEE9F59F477EC98AFCFE38034B762B9D4B5DF3BB312758C4238EFFF94BD16D9C39655CF07263CD6DBA96D1C0EA425610C1FC81061FAAC5C0F8E6AA9591EDE2FAA1AAB8F76EE18", "C514F282EE4B5E02A90A2AE126DA52A9FF5274735ECAFA74CB36D607EF299E0227E94B6CC2B78B1F71D6B5FB8BB4C78C09B3A6E3ED6CD590AD526F74CBF869085F2BD3A9DF66D7DA9DD06FC6748D8FBB78D98A4D860B362BEC6295F34A6A16A58BB21C9632F8B3A64370B7A7547E329B39BCC82D17B82F6E4ADB514444F62AA800C97B748D73B0168ACF2FA898C262820F8981713D00CEB8453E3E9E452F5EF41452A9C8CD1F1260000C4CA9AF4E6E629B13DFF203187C0DEDA08315AF24181015D2E68D6AA4E7E938FC4FA9A8B80CBF49E3A9F27953A05FC7609146EE39F09FF485015168636D1F452FF311D4D8749C31AC8420865A87A707E540D7FDF0D25F63C7F3AC906E048281BFEA46263B4350BAFA8B5A27E0CFB23DE145622BC2FE34DCF4E1B4DCBF60ECD5426C27B3559B73A59CB1B71587C685542F5E6DF9FE3C5E75A8E9600E89217343D29C67A7AE80F9A8589D82AAE7B2A1B8D6546D3CE2482DDABCE7FFD3BEB2F1009297A77503E7155ABD4692F1244A49AB32628947A681388AD75A750AB92C81ADFBCED0AF166326FADAE6B79070473D67A8FCEBA7F21BBA932168CEC2A754247CA324081900636D87D001A605C4E5C31AEAA44A8DB9693617566726C7120AD15D96D917F5ADD0D86A5A9CDD7527644EED58A9BED014D9F4C0F62FCAD8D7D5DA2899D57C5510EF15B7482CB3E087493959AA12D73D55E194E48CD128FBA2788829AB4A86C325D60227074EA55BEB601128D5FF42371E74972B802D3117E1F2AF2018177D4E994903996DC365D3B52582AF2085EE5919DA7E84A2F3A200F4F6E76F11CC95F87BD2EE5935CDA0D52D9EE6FBA6D59E80427EEF4B80372091C65E059B566C38A6B3664974396BD0383A35EED0494C2BDDC167725C4160AFA58D408978D5A345EB03A55127C6BFB08FC0B4EF7037482EA724D9D121E26F2249C0C7A927946A846A67FB7C565E86C8C59A49265ECC4927A8FC88873DDEAEF6F8B629BAA1819807F38AFAC501EC9F206346581174A037B1D7EA56628C660E17BA0A97F2E189299A7844FEDC562BE678B0606CE18493F717559365F66201AA598C68F99A8F28AFD74AAB0E3619BC342AE9F36D3811EEB52C8DF6544C96B679CF434B9C64FCA0F43DA73B9BC8FEBD609678F5E691AA706E3586176ACDC25652BCB68D98417D3FEE12B23724EBDF496D6AC3B35EF706EAC11BB0090066F3C421C3E298B00821C90DDADE472331B9B2CA1F1E53E6D68BFB059EE0811EB7E7FDBEF394E3E35E59BCC4B63FA8E09851843F28CD941F9A97E5B72C8DCB9D32F37B79DFDD1B9D7C22C10E6F65DF07DBC7734430B811BCDD450A10F491B1E0DA3746868622E457774D0BCB1B29F9C1CB161DEFAE78354B7F718D18F07ED6672665D35562D6F05A2B3666B667A7C57D2617711F27DEC15D0A4079519D0ACC6B3591EBF0A61A12C42A6820CBA755C07FC531610C4192A0BE9BF241BBC5ADF758FAA4DE47C6B766AFAD728BB1D2C672EE0969303E42AF789FB295E766E90319D98F0618C1B4B8BD31CD2C5EBABEADA30C6E43D03F380F4C2B9C3AEA20BC89B852BFCD042AD3C9440AB395E9E251DA758D317E39792973083B20B79BA36A14057E1DFFADCF903B10F8D3D4D35222E4584D520D6FF675D3EBE9FB43ED1B79252648A5E0C2552E388AA3D1168790A09854F1151A94DB4E5AAF1C941FA61B196D869B16051B75F56AC1BC769C6E7A7EC173264A2E56BDE4BB9952A422855D65AF1C209D561F8210FFD7C2FD6A540BE788BE3D2822D49DBD2C6B33299604A835F07A34", "0C0184CC1854C2013817663EBD9E23F3B78DB8009E761F1B38C2DA2036F26819D2DC68AC38C18FC15EB00BDBF5A11316C7B6075BF9DEAE9B0A651527DB3E3B3039BA01398B3923A2C40DC4706A0BC186D2F8FFB124EDE35E8C427FB6FF05A3C2ECB81E275D1AE370AFDFB6F731E27F4B22B877B1990FE479239526C655796BBB8545051527ED0E532E0440048912C64D0913227C2F6657B8B80FDA076E49B7E3DBA1D0E23C9D7F43280A324DF16BEE2A87B87C21692FEACBC3348C9186DC6C0BCB7C1DBEC60AFCF4F1D76FD3D45A24ACFAEB8E7C95145D07427CD67003019AB57DC233D566BB9A20AB82ED4130D9B4C0FAA6F2EFEDC8977498315FED436F67F3B170877040265EBA49415B1B2904C8277A11598432B973AA63F628456AF2320D3478FE669E2835C00D13EEC7B6ABC6BB94F1677C9A05B2D0CB87ED3E529AE1D2E3354B1E30C6634E10AB3BB0F39815049DD5321B11B80CF1D1F1426A413D0D11FAE969F3BA266F4F7B60684224A6279380D08D46FFBA2E1D684416405A02A2AB2E260ADB23498AF716EE58B03C8CC442DE0EA201C4DE39FA7038EA4E0E1544BB08F149F57F03FA910E09C27303038EDCA21A618A54DA87CA747763EE6D4D1DD4912AB7E3BBFC999939F82563B944CFC5F4460D41A47573DA92CBB28439BCDDBEBFF16491C404B356E5889D33A034680F8648F2CBB1888FEAFC410FD5A3C8ED85B90EC875D7D4466904F5D4A4048D8DAD848313232B80FEBAA09D4D86F70045C0C2499A93610DD088A6263DE5AD71067B9B3C82E20658AE98677889BDFEC65C2574E4AB7C9059F1C13CBEC17EC630F9E5B891DCDE1E81552738D4C8612F3BEBD570EB39B24EC94A153465D1326765D9B8F23D7E4AE3F2782F6F9738C189D0D20C4DFCCCD37D9A510250F0941423CB9055C7BFED84520AB119FF921CF81CBC6967E9CE1D759E5F4481ACCC5881F9328093B63ACB7D04404D8C0FAE8747D39A270399000CB690CDE17A46E81DC5CCED183BB863FD7A535CCBC592C25B059496C45DAD179B83EE02543B5EF93213E10E2BDD480F7C7D007CA2988942F65E46B886EBCEF05498C655048C4B32A081A059A28DCF4D84AAA586F0291F322B25D186FCB5ED2DE7AF7EBE58CD8314CF846AA39C67E2F284162524A14BD2765642B31F31EF4704548C13D5F5A132E983203EEB91795BCA934BA7EB26DAA5450745333446D2B86ADE99788476A3417DB7FE9E53F4906CAECBBA984657969B4592F9213612AE6812C215D5C6E28BC89BB76B9CCC937BA4D4C6368CD4C491BDF41B242BD8FCF9DE2D35907F08AB80BE71EF90F84BFDBC6777A020DC97BCA1E963050FF991A4F0E1E468813AE1CCF05B819012377334AD6B5A41A87A7D7C4F0AAD241FF7D3AFFFF40D7E6D5E62F9884B63E23C3A8B96260A6E9E3BCEC001D487E3E75DF4D35959633BE719FE592C4659970C0B67596E9CDA4EE3B05237C02CF2E36FFDB7CAE37F0BE993FAC46DA6F56B15FA74EB4511AEC2C861C2A9253259268A9BB95468FB02867394AA8D83EEB6464A65CD15DAB6A696FABAC4661F439F377560F3D2F3B668A7648BA4017DB5083BDD0D76B0DE99FBC06D7938D7D2F0566D3DDD036CF6A5E336359F0896B9B1E3B685D963A0EA70CAC175574C5AD41E20EA1332CF103BDE6B1C3B3F117C21E8FE7450866C5036C244856B5FAC176671270EF7225BE7CC36D24498C92E5306C2870FA7839DB1D7646A62AE0623EEF3199E8DBE32020B71F23FEF2F2BF3C9E0EBF0FDC629D97837B97D76C99398EAB044AFEEBD5BFBC35FD4", "8767E0FD01FC0DFEFA6640DA0B47AB5B2B2CFD25C8943FDAE6AF46C3898AA1FD2E2DD0FE19D1A9BD0353A16ED03C448B7005D56D108FF2035E948E3C4FB8F0F928A5797D491389AC431F271DD1C8FDDA2B1FE623D410190FA81F74E042C0BE9F97F99120DDF442D5A4ECD1EC9789DBDFA8C8E577E0AC5A1BA7DD6D5A474CAC3C2C04E71A14DD2244A30D64B17E4C9B081EA8AF0175D7D0A6E039B6A289EFEEAA20763B1F106667745EE2795CC588721BFBCA6D659D81192A02FF2CE11CC878CDCE73CAC9B92A972CC9340ABA7A03C3384ECD28301103F347D35FCC9B12B85FFF170894F7D104F34D95B56A23C486CD9E7520EF8CC0BD928EACCFDC5D230D77EB9B19EE274113E1F8BFA79FCA93EF54B86900859BA6688FD29444E03E2F14033F076FF2F23711129099051C59E0126A907B57905A021F024D98736C3F5D1AA11C25F32319546F91DCFD4940FDC7C4428CE78A998694E6B19AA3CFF470AE4582666D350ACB02CFECD0E9EC39D1607912B892479EF94CC67797F443EE6BA4008F46C0E61C3819C5F82DE7A7802E62E7050C8AC506186878F08ADCA8A7674DC3D0D156060AB7BB08511D2F8DB46EAB9B46AF359135030A9EB46A6137A9419D97C7069147BF5065712B1F03BB8B328CBD1E583F59B662B64C0F06ECEC8B71AA2213EC29F8968E0F3093AD04E739F01DF51C644FD4CB65AEFC7073018DDAA81185627B613242260CA7A9270FDBAC3EBEF62865D0341B5392DD5FEA4827D60D5AD1C9AF0739CF5BFE0F658E72C436BFABEFCC403B87AD4B64F3143DBAE1D2CC25130E65D72ADECA1A8FDE09EDFD723072D538792F50A067BA78D7E4749F0344AB1AC1CC0E8EFA1A42515877C4539EDE35556D444516474628BE9D8B29DE428BEFA12EF99C985F1EED4F937BA4794776C63033C03EE356991607473835A50718E473D036F3C522A9DE2E49FEC2E686F17A5023FB7E82E94B26A4AC6236E0B656A938BD7A8575D734F53CA419836110DF78197D7DE4D45B6589CC31F5057759B8402F43ED9A423A7D69DB02EB9357B1E51207161E08FFEC8FE286722159C570ED4AF63EB554BBA582404C0E978CEAEC1CC1404CD15BA22EE6D8C98C4278C1714695927C2389D74BBAC72C2516AF1E5D0C52066A656170091B68A7E4C8399ADE63605E9DA1727C189C541A404B7335DA27843A32E470FB4DED8EB5EFCFD30BF15AAF37D7CFF4B545DD09DE3E7C8D0E77427B3C0764608912616E5DA2A3B885688F25E83DC8D632BC00015C2C8E6923A3D9E7C7344CDE87D6F0DEECA2006F644F7BDFA0A524759B2B16313501A1CB8D4D762D3E9D9C8D32154F69F0DBABEBD26AEDA947485FE0B40D1D7731D7F4E41D1EA5FC645DE31CD850273B6EF9C374CC8E8149960B349BA16FBDFAADFF12E86EF05AA38B6B17EEF7B55D27D7CE27FEC916DF99F0715F1DDFB93C7E1130EDFA44663CF19F4008D5CACA48262C1E8209D0C353ACD72A542B93EF18EC7E15FD4C9B1633161D94B285FE8CFAC30FBB1E140E9561A35715AF982370AB4DDF25BC30850E5F0509297289C0045BD3B3912843A9B0BB88CB7E961639849B8A0A75E3E903182F0CC6C7ECAD4A38081BEB18DA72EF9F9439DA7DB2B4D59AF6CB71808E604E56E1D4BFEF627226FC28875888BD486D0C8052068D12BBEC6B27E9DCDD73DBC93D33EE66AB63936C2273525A517280FB4BC33A724D20BB7D988B938018EAC4738D03D583A71C16671B87CD60BD6FDD101BF2AD07492A794FB8696E84CF24B9707D7706F0AEED606C3A7FB5B1DF7FCF86E65F6DEAA4", "CB8EFFE09FE09C622B34574E74D4B061C284F96FB7937481FA7C204F449BE9B2DB0957E428D177C5525C67BD75D75989EE98D97C4D0DEB5E72E2B0DD62E66EDBEF0D22D2EA97D42A3374B9B659804F1EEB01D7743DD9AEADDEF356C7C4FE94077411DE58DFA5035271015AF65FD1D78C0F17632C10EA02C537706A7C14E3A1D7124FCC11F579333A68A1AF70BD3E86F7B1D13A3B4EBCDE343F36A2B226DC53A0E1A084EE966272EE852A349D7A5606F1AFDBD81B8C3CB556DAE83D6A34ED4F9C06BBFFCD5953C51814FE0F4CF5A697EEF5559886D92F811004C04FB399E06DFA845DEF183160BEF8546F6E8995E403FE0E464008646330CEC4B4149DC464F229A47E0CD9F89C83A28FBD0C1E758D380C2A7C17A487191A46C04C23F7906418B69E2527F3293588952919D220EDC36BD9687C7347AEEEFC8CD24E91299900AE4ACF018FA2829E215CB13CDDECC918DC85BBFA317FEF7D2FFA9E3A30D9D1F1B9DFA0AD0D641E800850B43D7E0B187F2ACFA74FC5DBC99471A7511B838BEBD6E2744C3AA9AA9D46060C83FFF803C148C35209F840AC23D60FD046B461CC2D776AF51612DD166E1450B8A998052EBB25D1C8F426391A8571C88C2012A8940CB0B4DB3223CCB39021D20142FB5039A6ACB250994AD7A99B1A43494EFFBD8D3692F213B46C6CE9AF3477BD6061398CB19C099F27F48F4F785E9E741988412F070F39727FB8B74071E007210D939B0EC5D6148A5931D38A030374E5C0B575AE27D49DF49A77245BE310E49262C56A616C757A80C5989F27962303825EAA3AA014A4C9C9E5B3CF93F1A031F82D6A0C877277EC41356D1BE2154F03D807940A1CB2848A6A23B905BDE9A907F7C20E333586389014126765CBA8D5C8951CE09DF085B5F18A24E1E5D638651687CD2A2F75CBAF738F65A8B24E7C67E64FFD9CB8A34A473F11996E3663607A49EF663C4D87A0F65D92067132B5EF3CFCFA9B49FF66CB6E363BC1C7EAAC392605200A5EE704D1E754CBD1C9CDAB75355BCA41DC129722F855215220092CF6248609DE9EDC5603562F5C82B5414BA305CEFA60020E1CD93FC756241FE7A20CB4B550D980A7266E7B23B6FFCFFC4461F925A14EF6584B02005E1D795ECFEF93312B3369C52A8A2ABF99AB5255E8E09C05AC722F37A5E95AE46B226C7319411750562DBD0296F0CD1326055577BEAAF270E75F4433D5312038854C30AB23BD51F1246EC46599FEC1B628137A73A702606112CF61CEA7C3977BCA6701C8E5F63132C15EFF01CA1EDFA5CCA8FC0E3FAD392F21972F857B53F62CAF3BDB75D556E6857067015E11C5E217F5D1C1AB1D603571F9EDDE04499E23D39DCAAEF16263A5EBAB9BEAD8F61B0ED942EF261E0ACD309A903E73AC4E4569A65FE6490F6DD6842812DF61CD858D9AB54D3456C89CFEDF2621426E3F9D13FB94177104F6EB4E30B018C01F78CB4FA9C89F453B87FA7D4716B96B0BD2DC532D4AA7D8FB9D264B095BCE39BA017E8BB90D600DD2C58647B9D95F63783B4B90BDB83A175E5201784AE000A493A387E16F5F0C5CAEBF62A360A6A927B3FE4CBFD310A3163BFFF1836FBF9770583FA4F88E5A6E7BE5796145890A41FAE8BD1839110EC05C325012E19C69C3868C7507D04458C074DB3440A0E018A23CDD32ED35E7A28DC8AA8BD63C8CD0A9F4876B56C04D5D3D5CE52A0601ABE2AD3CF3106CFEA6D761335F420EE3D277DA358DF4F6813D543424653B256E325346F677EB7F69B2FAF9536DE80E8EB018D978484509804D600783708D48C4F7100E0AF891BDFC75352C", "93EBCDC22C36C3BDC8B579B31AD5F5C9B2B08218BCCD1B29829A365DF4A8D5259753381B6786877A5250DCE6A2B182734E363B39560D3DF44E88CD6394324765087DD1A77B3D8121CBA61F665F9B719E75B740BD930D6FEF316325B8B3A2FDD93AC488714AD9AB525248EF60B2649B70DDE6849BED793264062B38EE74270CC190C6A86AC4E106781BB3D09F0A6D7AA4DDBB0116D3452CE041BFF4247819FD8D78304088355D8DE741B1A6461C74A4832ACF4D4004BFB22F6C9BB397D7CADC6FC05AB74919CA346F9A54DBDA80F8E1303A1D43239C5DE043C2AC21E182CF49BEF9BCFC109BC884E41FE2D8669915701992200BCB938A745FB0994E6AD01187C4A24212DA421A178E42216287DB1F6A25E8370E4209E09057E16253BF477A061399AD1B3FE985D6A10D8B05FD94B67F878649862D68F285EC0BFC06B7006589A590AE7B116EFEFC871010993F4768197473BF22AD54B2A8FDB0BBF2B181A2A1CB9FF0D0989F2F68B339A8D8B27FE1781F3DD6F7CB972D73E3DD702FCD0CC3CBDF66A6237460E3B2F45DE273D2BCADB96C118DCC19F7C1E703BCBAA04DA5370A5CB3B78112B8E95B63328B43C51557AD84B3564749C2802B52EB33458394747C176E119E1774BC905119312963401C1DEE02964DC9F1D836069CFBB9B33791C908ADCC717B08FE3C0AE98C0D5DC0C22876595AF95A02AB33BCE3502A92E532E72D0E3455A3D7EE796B3CD5D61DB902B8C0057F2D47F2655E95DF55DA562F632A4F9A2CA8B1D2DB8F5745A71318C37043D3EB08F9950D06C1301F9E9FAF4EF560B238BEC483DF0E017E3CB27A251156221F183F3E9B0581838D04BEB5DFD9EFC26B979BCAC7DF631F1ECCB777E2617EE7386C8BE9834D26B96D80074BBEFE8CBBD203299AFAE8E6F90273B92182CE7EDCA9154E0A33AF9981B8CEC94E6A7C78C4716B47790EAFC771C3DFDE276E4E617CC0DA50F05099B9BF587127D1D18D5F892E0090C8D033F21E7382738F1EAACFBA493D776821DBDFCCBC24B1D5F877B157AE6BF6D307AE9BA54CD053E68594505D038747A7D8450EC3CB4F2E980C5D97A2AFB31147906CFD3E9000BF166EACA8D16A532BCF69526FB4B86B1F71D2C5F38958EB11F9ACC438CCE14E88A11DC431CE4E20B99DF0ABDD2B5AF358260A64012F4A408C6840D365AB95167B54FD479E8527B5FF662161F75FBA7CF790DBAA51613DE7C52A2A94E4AB78E051F32D10233161A4EBD8682389D091B5C4509171650ABA574F1FE954698268450E11D2FB52C1AB3E4DF426D26DC6D5319FB762CCCDD552F4B1BF4E82AD1F78606C644185AE87827F022C9508805472136DC48E71D1C45944413485EC1CC72BC092D6F9990148E12C2A3FFB3D8C9F91C18CC9086F176733A83F2CC9BAFFBBD810A99B66DC3B399891B2045BA402749B55E7E363F5D062427A9BFA8B599367F1D07A38DA16074F75A4E095A528C26DE4083B044055F73D207A6571196263D8BF5A53B7679791BDE49E869F0F58431829396A34415CDF4CB986281840BC48857361281CB4BADF8FF5B86ADC76FD3A812D7641C5FC88A21F137A6980B42FD3858E2A057BD4D3FF57A5ED3F5C41C71C70036E1762C0079DEDE282175072A073A90AB83C9DB447AC07E6BF99DB04BF276FD876F4E4816B0294333BF3403DACA2077BCAC3889B55E76D62F58DE7D1C49816D03DA2D492D1F3CDB2B6B186439CBBFAABB645E9745F404538BE8FC4C698765A3C67D01CB54D404D2A2E78098FC334F0A375EB41C3031F57FF9A773612445AD3D98BD09C949616D4", "5D55CEF58C74B4C681E813564F1903FDB56BE053280D438BBE5E2480CF279CE47FBAFD179E270D838F764C2E7F496AEA9C0800056F2E0456EAA7E59CB20432B65875455975AB37186D6B06FC7D0BEE743CB974DF92B19F4D2EEE82F36598F8E400DCAACA4EEB110ABE352D3A0F58DEFF8D51DBDCE5C23E84D1166FFEE5428541ACA407B9578E4295C3F79F9376384B630D25F11271C6234B9AA9C1B4C8015AC2C73CF768B9EC30C61BBFEAE1426F72FFBC995A834C9D4FB8350C301133F123313370C33FCFD711D1847CFA84E782F4B39762A02F9476D5F45237A29E3E269D16DAD60033E0907D5431C1CE36D37BD388024A020B612E1DE42492A3759AB82AB393237F4A1AFEB8217D2733916B7B610342C0D182C17BFBD4556B071D82E6C6E554F2127654C15671FA1A843347BDFBF9498C7B5E7636318C3EDBAF7BC4BCE123698A05538DD5D42F01970A41A75F0A46E61520911D86A39D892700AA23A033EDC836EBC17CD2EA274252F53A4BFFD5CAD88F8066744C737B364A0DD0B5FFD96787F7D18357DF728FB66B212DD4DACAF7218292216808E7B81E3514BDA947E436A301C4181CE53A298250835AB98DC89D0A3D6240C57C699A5BC31EC4CBF8C111149CF6802942256520BC7FA22968556E2B390E63C9DB7D0AB79939924ABF068BC3D44264D607F088A38FA67F8E25933091BD3EB0A3590F3E62E63CC6C66AF66128F7C3F97B76E62F1AB82F24D8C147FB2C8BE207FBAD7E5CD355230EFD48DC9FDAA4FD1C970781674E901D35D7C651EEFEE2356F825ACD348FF0FF590E8CBFA0332F77A063581E6F19F53CDF1BFE952585E93EA13A83BBAD06070850EC824397A9FF13227F4C60D65B67AF810EF1BF5D5EA95A5512F95AECAEFA25BFBB24CBE6785E91A4874E81E465AB91B1F2E990F37AB145645F2681B47592990CA78264DF8902620E796D4DA9A260D1BA67DF9BB0292561FACCB2478AD7F7D7CAB3DF179897596604F2B0F1E3F10CF842C311F49C6B5EFD5D73DFEFF59127384D3B4D855F8C412E949E3A941782C186413946DF8AE33C9640704CB0D930C12F5FA1C4CEC5883CDA699E294019562948AB028548FA974D6C56AD667023F9C417F067810C4C7E4A712FC3417A92C075423A57C208AF683DDD695AAAA5F027CE535412DFE0029B292D32B2366DF978294FD263DAF8C6A6F7CC895BEB1437CA189C2AD9B6FD5BAC06DDC3D075DF55BAA6E75865CE375DBAE862EEB7A51D0DDB5DFE03234CC8F14EA99110DE78A3463546C6CCE5F7C623028134968C59E247E642CE17D8933B6701DB7952FBCDC6CAF7F2FD24A241D82D8BB1C0F5D55BF55E57BE4AFEB4200C1C57938F4A6B1BE9AA02FA86AA811577BCF1D6BE545D6F12046735AE963DC7FDAA9A2F7270B8BB37B3BCEF7C73F59013041B6CF9FE10FAAA86DE369E868FEE7A37F62E2E9CB1409DFF11FBB09A76AEEAD0F8E443582319F6F74ED0AA3229BB7A50043636E881BD139EB7442FA35F5DE1D6CC227B921A1343E34030D2F1F361D7651C487282C907577765161DB781C49655A5F87BBCB68D08C04290B4A2A94B61BD0C7CFA41821B7F5641B899E90DA026290FDCFA4FB956414523041E14ABD7B1AC7CDAA1148A03B6EA17C49503F01707BD3373EACFD4E248BA0F8D4B845251BAA35D41DB186E10464F6FCCD2CAFC9CB06FFE9DC97FF41E07084B00B7B31FADE0E093C8968D1CEEF9810986821F1741F11A71F5F20C809F54852307FBF33A6C33C6A230EC7CB2CC6C44A3A53AFA49477037E55BE691ABDF6D4A852799453930A4", "B19B7C4DE003906A0001E0DEEF57CFDD2B50514CDD6F57FAA2859061678DB9F8B5AAC67442D8B737F635DC297E3A46C34735AE4D2C607B06964D1FE264B7786B8B0604781D4814E2A81F3A0250D4EDDB77C121B962D0E7109A738630557F5AD47F95A0971A58704CB5B53AC378781B48D67FE5D5349440261C58C26D9370DF37255CFE845F7B0F735CAACF4921CC9D55B3431C6C888787D7C2B436C9DCF1DB94FF0D510BCF15DF0DE42AAC7640741B4893C960FADDCE4261E6284681BDBFB0F471C864FD560DFD87DDFEB4EE7A1267E285BBF2966F6A8BB408A105034220F2565E38F6A15A45B7FFA82DA63965BF44A182FB4672E90BA7933A0120A449323340D0368CF057DF299A8CF60035170D197104B394CA9F2A05983980A1BD93CF3AF8799E613BCEF26234DB2550A15BD53FFA306D3F616D78A6204AD1D50FF4F9972B0CFEB48B76516155791C14E0C9E18457900CE13F672882BF423400D2E6FF94CB16BF3071F44CF2DFE8317A9B761FDC8FDE90D7D05827521B070492AEAC90187EE48D93374B463C3381C7D80178F54C676479BC92470FEA7069CBA95BFDAF099A994AB8244CA786E7767B8400464BD08D5C560D61F27A96E3886A4E821E0087E7A56F96DC6F6E85F1FDFB5C82FD7BD48B63EA794BDE01439FE4C3D7F08864263A0A8B1C1ADAA5DDE86B99EB2A619A12A1A76A39D8B1F04AB55B67D15C7878651BA1F6621658757B890DB0D2BB533BA1C6A5E3226DB4FEE7D561842EFCB5B459598CF5AD3F98217CA720B6781E83C2297C96F4F51CBBBEFA708AD4B3F682FA0C67C82A5F5797030E0724AE9715A911CEE347E80F774EC780DF7E2279924F67ADF9D07FE4F56DE99E06B58099E1104DCE62CCA82D100D90BAF44F26F19ED7AEDEAE609C04C530CFBEBDD161A2C324A382FC8234D405BF900F0B6CE895F9BD534A6474680A7D63C0CF7B4AF1D1E93958CFC02FB379AC09B205708A68D11683B9282564C06290F5E6B57E3E7A75D30C9E21DF8F27F85E1FF347B32105A000BC613006BD7FA6D845C8E6D4053FF012D0D85F99737D045871BE017D672C8FDEB16F944E3020BA7FF0351A303A0D3280D71CBDE42F55657671A79CA30A7A33E744E74B34D27453654DCC8E87911B3701FBC27CD16C4D9D6C29D1BB9AFCCDAB28DB6C2B42C5D6BC1D1386AB26669985B626BD54791930CED4A13716BC9AF8F4DC37A04184FCF711EFF515B92C943E53879B5098BCC4E87B98000BD0BA2E1CA3C7A97AC95C1AD145EBA3950B154888272A0ED49289157091DB2C55D43AE77FA3384BCE92E5840459B405237E194B6F5788F16B217D8BF7539EF8809FC7AE1BA931DBDB2A7D15F139EF4FDA60F02FFF9462777647D675309AAB8201B5FCC1ED7AE066FC0E4F32D260DD9406BCEFE7DC5DFB38D66CFA08E5CEDBA636EFC23B3CB7AC38FF7C390542C9814A86D2D8F676720B7E2FD93217F916F10FF34A1AF34E3B8563319E92A3BAEE34258B4DD63FBFED854E08B1A2F4B560FFC40AA1048F081E66748E05EC3EA02837272FBD9CBF1A658B86B19B7DFC63436185D02C6411142291645692A92E3EA6A113B5436B0BB78990942146956795DFE003A4AB6D9ED875FE7E5B895EBD69C43BB7317CA5C97BCAEA97CFC6068431B24673FEA931EC1DC1A3F72625AD531CD89CBEB0E07F47B26971059FEEAE3986E23286D13BADEA3585D73F1092E41AD041D59120D3D25FD3BB0AAABABA738049C91B22649E715F3710EA51C41C1705C4F1FFB1DCEC85F0EE704240EA8A20526DC01C7C8389B21DA979B99FBF44", "5805FC5E7042027201F3517AB8BA6F5C3BFB0BC7657337ECCC99CA480BA9C3D36033336AFAC0BE172AF430A98D8462D46453E935805E594C18C0EBF735D90D5027067006193854E7DB6424688BD715A7BE72EAF93C2F763F3BC340EF4BCF90B03AF20C28A59F72114F693848289873BE3869590A64658C0A3938A414BDE86BE8DBC25165217B1605EB0402FED48DC09139751DC1DCFF532CBF599E9AA13F3A72142E05A1D8E47A4044269A0B414976670094C9785811628718C6FE5201221A5822E29DAD564B6EECF025DE7783B7842DEA40D4F72D083D112C608C596F25E09EA85BC6CBDEA39300774301C1C36790D7D9C0B59741F6B53E16BCABF8120112C81D70F30E44561EBF3A3A4571F207305BB3A292C46C46E285C246EE9A7442F869711F52D921EF379DF7CFEC4CE64BAE4D7AE7DBA3CAF47EFCEEE78B477C02550D1DABE4FF4EC67A38A705F60706D948C017E333B645C0D80AAC1CEA393CF3ECF711CA3D59ADD7CA02DB6C5E3F259B4ABC138D24C47A650EFB96AAAE93E69F08077D0CF38B230F199C3B353229C529278DB1F5846086BC8F5F54F9631423105673FE92799FFBE5DE6ED167658BA5DB5AAAF921926FFC27956758CAE8B2367E3C5C5C6CC81DA875AEBC8F3460275C4EE6EF43570B4F571994C7690DFDA3DE311F2FB77057732B19E6FFC96221DE1DAAF9B8CCC21609160457365877519D2B332FA3A85B9801EF435D04DAEC3643CBB5413A036CC1AA0968A40F4EB5A76D2D0C3DFCC53C97BB3896E855957B1941FEF59048562171F6241AF278F6D6B580B4C94C5CED65CBC0F810D46E864C2B567BEC920F6D1DE42CDF32300805E6022EF184B43C1733F809F98B129C937930B984F5539F574AE144EDAF7BABBF379EF1A1AE69B7B4FF9212BA817A4F223FA8B182FEA231E7029F80DB126641725C36AB4AE950725435561C6FE37F960E37927585026B8ADD92E4ACA3B4500F0CBE078680D16DBB90ADF6A127FBC7F791B4F93D5463F8C71EEC1EBDEECA881FBDF3D2940C2EA0F8E4DEA1074EB5C0C9EB34534C9C3992E988DAF8979FD8AA90F540F028708BC6D0EBBFC00FA946DEE5E9D01CC272A4FE61E5B86FF1347340FE64F650996F65E5702A61FB53EADCD457A5ED66DCFE1B019A79104842C51B60142267392DC51F86F69367C25B999B3153C1B7895298B6B1B43EFCD8CEC3694F90BBF1A417C48E5CC4983782F874A7C64E05BBF462220950DA9E8F56BA324002E91D934469225E57309C7F562407DB900267553B85C4314A63351F20D57DED0B3D210269B09B976C07878C324F74758D9D507A4CCEB4AA30CC9CD05CEF32F1174C7B0F7AF93875F66E3A7B12F163920825885CBE5092CB7728A1B74B2F3FA9A01264214761DC5101BB0C18D65BF972A3587F95B3E13F52EB6D1F334B15220ADA5A59497558EAA0F4ED358A995F7444B633FEB900EFD9528B51FD82F5AA30699900D3EA3F3644E4FE3F6F2900ED45DFD997FA905D91521CD9C898AF4CE09B6EE00A15057C17DF4C656E00DD876529CD75A169977962DF3F6E4CB6950BCA37A79C98F108AA7B02AA488AA4ECE05F702B468C20C81630F51F884AD74A76491DA378DDB8290ECB8F5879F019BFB416BAF1D9361126F3514557403415F286C8E77C0BCE4FDF0F4EAA96D19F22F189971155F749EC19687657B245D392BDDA62935A44BF6C82E0AF3593BE06745099F06DC4A66C0768F17916AA360988D5E578D169CA84AD1A36B12CA4929223BCC52AA9B47FB138E999CD6423D1171AD3BF87B5D405A174B0398A689DB4", "F99EA1599DA410098772B05B5D7F9AFD485A04CA036BAA9C71AD5DAA3EA5F1C757BC83F3C0028DCB93DDEFFD157EFC2CB29C0F8146D6704D34091EAF1EAA29AB915E652309491F0BDE632172914C132CB9A533E97F89F567A7A9B0776B400FDBEE71B49AAAEAD156753F5BF564CACE2C1285C4E65B5D8B2803A11B22350ADF79645AB6E458B1C9E2031C4D4D6361F77B53329C3530F6EF727225DE668A960FEE1F6D7588BC126D0E2AD23C2ACDED06AA2331E9D0E7F99234A391926F0DBE610C600964E89BE1842CB1F1551D5CDD4AE3FE45B628E9A990C872622C9257BE40A8A124FFD6B135BDD2EBAC05E2DDE5B7DCC13C76C27C8A3E778063F3DBB3488CC52836E92A89641F4559F377273FD51FC45550C727689CA4D5CEBB26263F4268502658F40D4EC2BBC0DFD0E41F16A399F02711BCFA96C2456EB8A77FBEB852726B0DE4F927C13CCB329F8B9BDD760D1DD299863BABF42EA7D7F6204BF13F7355610527A38E89F66D3D73522B421AF013197D649D64EAD17F6A6BC8148D9989E786AAA94FA19077292015EF7CABA4B1545CA9CA20E5A816D6EFF7FCA31FDFABC611253FEE80FF0D75518001C2DD6C604387C2656E1362A3EFC1AB85461A5B55C6374733FB6B17090E6EC1186EDCE2C49EAFE84B139C66A2E8308CF2370095B0129B6CE7FF6E17D14F79258BB3E555EDDEF12E634A5AF748BA40735B90BA1E7DE7EA00D2F4A8B3BED32BFAC17D10050B420DA32EB6D14035CEEA1B7951592AD75FB751FCCF190452FA88AEF45080161C5544AF80FB0FF93C62B02B2E5D1966F77760D446F2625C3FFC91A07A5E852BE406F1638B521579FF299227769DC4B88A805E168F08ABE606B5D745433584BEED712453785B1C01D2B9F1020BDB7EF11936F0BC449EF26DBC2D5FB35A2131BE9C0DE2746DDB6D0356294D0E09076C9A77A076F6B659B7B4F54A06BE2F353A3A0EDC6A5123598DF9BA1CA852A5D1FA16877A78D88F0B367E6C4471758F0663A7498CB1C8F13B03F0E2A941DA89C717A15143F4ECF594B0DE2E43B657DD87E4BF536ECAF3820127B1FBBCC0BF2E53B9E0E1CF10191BA9B43D4D33FAA379B1B543C593F1BD5CC05E0B7511E8D4925BBFC5923AB0E2FA90D05ED580F56071A62A334408D3C454C892328AE1DAF16CBD530ADA7B858DA3763BACBC989F056EE1D46192CFF6DDD7F066D2EEDCEE5BC6B72551245EF8D10389984D3B3455A7B9664475CF6B837D72D42E49BA2F61298DE9BCC707209D7F1E56BCECE1B21FDE69293D2560B8940223E0AE966459C249751A2BAB98323F184532F4D6FA396D5C0AA2A4A41C75C638DC3DA5822AD7D3D7D51FE0811ED3673D875039D3625362D7D00356E8461FBFFC49FE1B0624F6D30D550FE1F5FE4211341B9D57D210237902BB7C62514AD872C1CA87976809717817AECE1E224733079478A5DDF5F2A067DDE111A3FF911D0B511A6AEE16046039B229C00D6D10317F66E1202449DF20CF28BBAB4112948C65DD7342D09059EE2701B36E2ACAA6A9948F818B61B9A3155729EEA670D4AEDD6F0AC314DB12E0DA62FBA01D419F7C48B09BEED87F7292FB0315A597CCCB7B51AF776509818A73A0BED7A656AEBD7ACA2646605797940CB737548E83653E204B6A7A5AFE2EF16EBBFD73484314C5699EC8D24E899BAA0E202F37E3C8D8B5F75ED34417E608EEE4B26B453C07DFC6E62FAC215B6122CB14A07739E86FCF816398DD49970AE8A216BDD8C4C478647A8D07EE8BBCE6631C22920474154B3C83942C842A728EDCE7466565D9A6BB030CE684", "B23CE558D0DE0D584768E83A066B9BF6A12C78D173AA3262866339B86EB8A8D5208159C5873CB29E9C4C0BE918CE4E8DA85C85E070CAC29850CDE48E2DC5E0609F419CFA46EF650B9022273AF14BD9EA28FA856B7BCB580D8949C1F732F87EB34BC1257205BCB6820FDF3BD1E7B9C99E114B3C7607D01235E111E3AB1F30E8A9311F0F30B601C833FB0D8C4D76AC1B02F85E93D4C3D0205F735E20223410CCF56317B6A12D07F3BCD42D2023BA0676A00E7268733C41C8C7DED2555FBD2BE09584B3063BE41BFE93340955788603F1D52190B35FFB8148CEC733CFC1BA49F609ECD3C4512A99308043F3C377EB65870535388376C2C748D18A748F5828B3362666C49F803828B4A019F26D6A9362726E32B650A85523484C4BB2ACFCABD16E754EECE0466D1B370175C37C8CE9DE236FC58ADFAB4FAEAAA12E048BF40CE084467C8835A1E209D2CD67C5BF01E0D62CC78A12130F5EF2E3CFCDEDF86D489C4C5D9AB99484CDD469F2F8EE5E14BE43B9EACB92E72237FB54F9615627EEEB193EFF888AA0A908327C61C50D20C613C933D736F6C3D7F60969A5D3770275081365BA8A57DF600F10A1652167AE3E18AD3715532B7C4BAD97980DFB0C4F69D9137EC7B21BC72AF16F0BEC30B94A4A5C2F55074ABC6233CDF4D8D347F4FA942944D9B2539D0211B24E2C7FCB56BA877371AD7701ED087269DD643C4B62E4B40D3F6572C0730E465C5ADE50FDDD11BD30C07EFF35AA6218D0B73B22095D320448E0671E1CA59BFD52A517A50932A06C4897BA6F7E7038A39C92C20F6DB18D6F6AFB3563D10BDF48BC194B79FEA6861F1CB9756281E969968B65161D3980C4CBD036467850EDE9397321913D57C1EBD7743A44A12E8C85F8D2D1EFE2A8754B5ED0E93EE9649C53F28129130DEEE66E58181787137B262E1EB3FDFEE0604ED1AFC798B198044DD5D0A3E87A754C7EBF0852953ACF3371BBFA0FD5979901252EFF69473FC5655709EA193DCA2A2BA63D706C84F49802684F80C576706FCF1BCEB2892B9179A72B7CD886AF36C7D3ED09270A4077C481736BB69A333AB4BD864AEC1EFA944A591608A2469C85AA6431C47F657AA9C2043F373A69323E735B56BC8177E1E37AB03BAE93A7B304EA1C5C52B244FC265EBD674FA7F1647E29CED527FCBC93CA7A56A4E771D7D2E576C40B2EC736DDBB4FD7411168C5C568C446D1E454249E6F7529AD83215EDB62F57D25272F351CB2C40965B1DB65EF5835923EC2D2FC7D8AD56B67980A3DBB77E6C4415F54F3FC00A790DBCF39A2FB699A20FC634F1B1C177C37898A81D7693B21020C6B592E5A6359AE395A841B434B675F1C30A9CDD0ECF987ABC2406178EB2DE941393AB4F96BCD43626978AEA548173413EC9DEAE7B53B175AFAAC5A1E02D6EF7E27AC41268C1FD8DD83D1AC55ED45D087083C0D136048B7F61EADB94C88CBA5503000A90F91A39A8C9E2DED567F7FA0DF605AD7870189600B941B99240A15310E7B3FCCF5ABDDB56D50CECC06B4303BA39EFCAB2F7E9F5CC8F542E96034145115AFE3788DE0A4985EE1929D4935EF975E760DF7FED8A257718DFDC5A0B4B87024C59DCC6FEF6F2715582023C3C80EAADBC7AA8712FFAF80CF5E159CF5418A1CB50845C97A7F19DF3CC5FA344562DFDD819DD736E9ECEB7BD57AF324256934CE6DB0CF295AA0ADC5931D339027CCCDE1441891067DEA40F69F6EE07187F9B78DDF6D59CE02EC3BA6DD68F06851B10AFE9672EF84020CD53ECA25B3D5E527405AAADF60593A8080373A387111EA898499F096FF46FC58", "8515E8CF42FC33A8CEECBD6E1B65BE307A5BFEA9CA59FC51A382C24CCCF012C38DFAD3FF3DCA3180934DD6AA52D828439F1052A959DE23BDDC3EA3F2E8CD70F7A765F77549BDE6CF8E444762DE51CBA3431439D1F1E42F1773FCA2F90E48126A000E69C0964B1955F586CDE1895419083322FB4E6528F61768F8BE4CDCB37FE9D02B27193A0BD79D15F3CC9AC6DDDDC82B02201BEAB86D13EA560F7EB5328AC0B534C52BB9D266F291425EF1607A19AECB9AD681815EC4FD1888BF5449421D92E473C21BD44F2C419A0B3E0603EE3C5C82E56466C5A76B76F81A6C394BA693991A5808334EFF1E996AA1B1394A4DAAE00995F02E9518053FC744BA391214DF2464DB9F01A5A53870173B3E8FB6B9B698A8DEE80745D7F71B70B811867D3513197B32115882348FC704B2AF8BD6FB3BCCE30361C1198B84865162734719D88BB62B7431FA39D452E0A1B0A7E45534BF76B6AEC48DC25B7487FEB4B5FFA9C56CC7C83E39AC196987747D664943A600B106F0C3D6B2D0D4425073EAAF89AB33BF6AD76B151CAC32A670A2B03BA31FBDB48B949D3074CD9F56D39553708CB0EF2BC96170E2FCAA3CB2811EF1C67FEF6FE85CD450FEA37A04A07EA732A696EAE8E76D497F5C350CDF72F8970FAD94C03909F67FC895785D5DB6C3A68641D68895AC8544C6A1096DC4CCD45A68BFED7ED86961B5E035E61E9C126319A7B3C1468457C423C4A4E2DD1D42BB90C8BDE2A162F999A8C3A99BE998B9DB7A14C101CE78F08857ADD9A96059DC22592B90488D77D6F0A6D459CA65FC947D742714A42277A79745C73CB157BB825E65872D9BEF5066C444229ED1A097AF6B0308DF2793A2284F911C764BD1158742EF4109CD8AE6111DCF8A40BE03409FA6C430829D0C9BA28B466916C67311F8BAEA2D8CD2DF9C95094E4FC6D43F4491AC5FFBF05BA6B7DB9D7FE4A6DFC386D136B1710DA5F30E67C8DE97A981895476B8E4E0DB5E1AE630C8034F949AA4095DC81EAA0F645B0B440138AA7C5C7C5FAF3B57E1504A5FE477CD61A355D9AA66C39FF89E2DDCBC1862E19102205A9F343FAEA71D4C67192D4D5A1AB08BFADAF6753244BE5B14B1F911700B4A947D53645DCE170401135D0D7E968F03A9B19D2ABBDC94BEE623FB64C1DFC4AD9040197C319A79391016D6D44B8EBAAD5B2F1AAEA58AEFA21B5B3D9ECB66B3B70626AB31CEE5CA759499073B4FDD96457392E58C0EC871B95C7B77F74B81C4CF5B1B243BD35F4D540C1CE878E80AAFC635D363B9D72DFCDAFF62FA8339BAFF4DE1EB3E146DB93E7E444403E0D4290AF501C841B66302A345F5541B1C797D630B5B7E788A793192CE1F362B22B91A837184106D852391A241A903E3BECD192C4FE52586BA4044C4FBDB20B711D2624B6CC13E0C5EF62F2B2E00CA516991C7572732DB94DB809FA0535D2E8376685506186170E3702903A6D08996BDE20F74BEAD391245680A029FB439FFB96EB829F0BFE58A6446B00B4E1894BE1B5017F706156072E2DCFAB25A3BED2DB310DA1A7262ACF24A65F41FADAE3F81A32077BB9CB64AADCC2F92B95EE56F20CCBA24DEC9F5F75B36EF1A101D0F3FF6D730DC199869F8F26DEFC6F51451BFEA2C0EE77CB17422E2790A8B29573405F112EDD704E3F46C7CD8ACF0E495C6BA9ED448B0B89A9997850F09A813FB23788681D3CC04996E931CB00A879E2FFA1BA6A63F9D3BBFC20405244B0F838A040F125AC2B4999A197A2D53DEF8CB167FB7E37DA3862CE3ECB57B081DCFD98894E45C6019B9229315108E37DCFC57C9F80201486AEC", "4368224792A5CD4ACD64D6956A334DB4614EE5EF8F98EDE0B4A5CD3D06819A4858EE0037DE64ED93BCC7FDB47E90409638B3789BBC63134308B972765565651902A9CAF4F310E93BB08EF1E4B325D414DB5DD7CBF660A880642A27378A7427F2627BAB3444149181C54E9D3FB7967DE33BED89AAC255A47482835D17E329ACF3F08F23AA1DDEB730D9602243A6894989EE2D900FF6AC0579864C2361EA56CBCE2F39A75A12100670AF3FF1A36E98D1931D17CA68D8D031CC527EF7FFFB35AD6E046F4AF1B2B3F66210D978F8607039BBA99AFBC6A499A5A948C5C59055A140293CA97306BFFCEE37CE77C114478D0F73D1C8C9954780830D56878EB786967DDBC71951ECF815CC4266D66F84195CA1AE0375E90017FA5C66DB8329D668BE6C0BFD85742088B7A3256A3277AE2A1F4E72BBB82BB2A59B08FC59FE5F24EAD5DF43D95917A144B4DC6587C893314D5C2C427EA92D02E6922FB0B60ACA646092E0D4A127799FEE4B76587F26AC1EB89BE0BA46F2A212ACF50D93D3345AFE72AEDA1A0F855C45AFE14161E22DA3E223CAD6B47E591896F4283F10C4073AB524CF5D0ED88F979458BB928F1C179E2C5914B4CC52CC000383D154830A54332D4C0E652F98B91BC086370B04CCB1AACA56C9A33B9F0A65C33467BF45C74905B67607B83FEDA063857AC4E326B4293483C8841572174CC8A384014945F5C3072C5575A5BE322E3F2FE3A7E30F3F21118FDDAF23645A40E0A359A3572153F5C3ADBE1BBC4EBA5E063E9F73510C5D1D4326D3D7A20384724279C3B4795C68BA332EA706E8127672E41DE4BF1E8B5EA60B39CAE2C3B7B21A225115BAE051FB0401A69A7FC56AE4B7E31CE2CD575D82C8279E8B8499EEDFC134503E6798056324B17B8AB045FFDC2A35B190B39FF212C17C36537A1F99F2EC3A4CE693DCEC7DA80861FC6F3D064B82CE5581F9781289A085A300CCEFB6E80A86D961408250846A374ED00F5379F446FE6E551F608AC3D71346B738C75DCDF63E19EA79AFCADD5E1E07E2F7C0AC709F6428FEA1DCDD835E3F56B026CD8DC9D4629AFDA9015295C2CE55DFD9C83223821682B5AF876B1CE156343A0F4C1655448FEDBC992602BED5DA4B299B86EE2F86D02C757CB5696B32D60357B21F9DAAA06EB3BE2E9117D2C99DFBB5328B3636F41A06A020E3CB47851891AC3825369C037B0C0D8412204FC3D5FA9585F3218F01295375A09463AEC65F591A594551E19DD00D5738086A31712AE9FA7BABD4E9C10E9F4DA82C12EB2F3319E852B96E61EAD2F85BB6765DAF874FC8AF42746F14B8FA489DFAA9540B4D0470CB31F99B10C335F672C2E06E8A2378B9DD28E8F56BC7A4C017327404C79F1E8E67BCAEB5C4C793C176F0A3C1833007FC44103DCC6E273C9FD1909AEF1656E2B5756B7F4D69F4F2EA576228DD794777BEB2F34296691A1FC38AE44FE60A44AD894CE92DB77FC0246C779C13E8AA16648843BA68CFC5E4E02FB564B0ADF3163C5E167C275A8C15E58659E2F70A3AF792565422D3327CCE25C9D488EF3C32B195066BD27DBD44EF1A20AC6AA22250BC0592AEC734477E1112DC3913F6B7CE323FD1F7B3F8299B8C9BBAC23487F735070AFD5C3627506D4C96B0A1427F7EFC07EFCC62DDC5455A77B57D3FD0B8CAD30A346F8C34F42D87827FAFADD54264A323907A89334C0E7F98AFC9060D7767BC9D8D261BC0BF64FCA389BB192A9B4B00CB566D254CB0226FA17F3BF21E2926CA52CE5DDC401E74A92C7989552CA66675A9BB9E9C198BCFFC488BE1DD5E47DEDD94015BE09B44", "30F77B7E7E40E42A52452A26283CF3A29B02DE3398DE5179773F2CCA4978059495B9DB13069B00107462C0034064A024DF3AD33C063F9608783E79E38F706B92AB117029EBD6156CB5D278149875B95AFBE877A21AC3128BD6D0B11D31DE7A2BF7CCB68911309BBD2215F592D56AF0F700D962E49E4C6D089548C7587B0598374C3D7BE80F7F20D6855AA28A27AF668A8AD3552CFDE3CE0B35DCEFD5240C8FAAB89D013D0DDF5B66E60328AE32BF4EDB8021E43762E96E5999CF23BF2457B1CD75D1457D4926E7C2A324BCFF70A7CF59047DF3F08EAF2922CAE6A7BE1BBFA3BDDFB864AC965B7FF093CFE74B53DB332B411962DA01D4E6C62CE6731E893574A097328CA7606ECF373CC987F98C31AD74EB4A863084266869D28C07F9C5B5F10385EE44E463324A81D523DFCFBABEF20F3F71FDA33B7EC1B2A35A98F01D13693CECFF23E00CBDBA2A2D09C8A86A819E82D781AE88B9F207889EDA1EBC54CADE6A69A564ABF48F950FFBE7A86243C544A78362D9BFB6CCDF20CEDE386B9E3F8D7EE0E4A58596F095AC1B99E4F787472A734252D6C00B177FD2B99A85D49B9C0F32D728F7D9BA4DF96D1BF6C365F5F4EED7D38727B339A223263B58560ECA6778069DFCE48703AAD1BFAD59CE298C6BB464552408946265B1E19C1FFEE000771814FB5E4688140E1333B270F05EC9345E8BDFA7B412F295AE3DD4DBF33D6D2D62582887D4CBB9EB55F5FE3C1BC32DC689548B66893356704968C143AD3CC2E48BDC154620ECADF336E218FF1B22521D183EB2D13B15A15D39A42A25B46F1AEC07A14CB805AC382DAC8CF96829B8F1D241CF5CDE5D849DEB242295D7870432EBB642A45A6C6F1C2786B88C883B9B47343E822978155D079AD9F6C8CD4A21479B32B2112EB0121C3C74E7C23284812F74A2B413B9A18D6372AA3E09BB04A262E7FCFB6FABBB074C7C603C89FF607F83DA32DA50F2A19C38BA0965BEDC7A961966895E17A20A4D8028FAF7B6947A1964601DA45643C5FCECEBDEAAAA83EA5420F2984CB606E9F3191EF323D644635EDD801130893D84DFB19E661E04188C6CE596DD38C11D1CE5DE1EDE0D15D8FC427842085D300E6801CDE02768E44BAFBB302684FD945C9AC722561B0EDA92E8D845EEB99F6FB1889328C74D6D9CC6DAB59D55463A613AF33226660C0C034B896075D9EC2F51165A754A7D2393E15955BE327587943ECC1F3BB97180E751941728B94948B6648D2C606D66B9BA1898FA28EFA38A413B066D715F7DC5F0C755B6A3126AFCB606EC6B12E332FD71E386ACDDD1DEEF1533D6386AE5994BFD857380874B14ED836D9DED47DE4760ABB05E80DC622C8D7882CD74B2720884DA747BAC3ED9A6EFA2287D5F7D6AC7821E79C79EAFE7A68D2543D7CDDEDB63A13FBA4B894A6D0B3E14C44876364C9FCF93DC066CE953E89851A49B6EDB38661C9316C82ED902EEB894321C84331F6646A5C1AFEF832F38AFEAB89D181D3DD1338DAA236BE0E87A6381D00845CCFCF4DBEC3D41F8AE1E6F39167A499945DAFE77601147EB29804A8B98E7EEB31DE20C84E9148BCCB15CD02D1E3B519EE0A2E4F70F57A69281E651B189C08D575D52E997E3A435B4CC86F938BC79EF4961CD03DF8B92A8C507DFB2DE4D5EB0ECAC2F3D712A46CD3EE01B8D4DCB845D23E53A2E01DF3FFA100078F7B2467A45BBB4A18D14E0CFCD089433959F07F6F60F651DD7FD9828069D340D048FC079E4F8B92824D54322611A3698FAF181008DB5E3E327EDC431A8F6E481484BD5A429D0F5DC55AEA8A18F719A7865B0", "A7D629A25F82015CD70688CC461244E4AABDCBF2CFFC2D73A3247F4264101FEFBD5759FFB83E8ABE9EF5B6662DA3CF7196385C05D0E5BD50C71D3CED424AB805AD632F2C1930868ABEDF493BB4E3A9DE538D8E35146320EB9F5B71C40E6F32E9243E6A25F503B68EB484ECB73C436930F30E2776D17A2E5F9CAF157F368E0FD9C26A9E9AE30A30E15DDD8A56482C85B46F973D000292CFCF0021577E5DCE8220353E23DD8507D0F561BBCD96F6FAA451E9C595E00CE0F99C8C40359B103D621CE0C837A3D1598D814BE6E22B7A509DBF1ABD2EA60955364791A5910414646F9928B5676ED590F41BD128A55549170211A0630BF5C5BEFEA204896C7FBB40F0C72E40DF19C95F3A0ACD641834E5BCBD26E91315DA34708E2025E0B7D38F9513945DE44AEE57077C8CC32C707D9A39BF098E4928420B3FDE8C74F39F81790D827A628B8F2776251F51095C1193B2FFEE8C93F49DF6D4E3C2E1BDA52F7356394BD5A675543493E04D602F332761AA1D57DF3EF8213E4E9B8D4BF6C8BE8BCCF661507C394CC9D5E9DD4D81DEAEB6D638FB9225247818710E4724111F522610075AE757AB5ECF6FF32CF087DEC9A04A7DAD8C613B22F2AFD31466574AA87CF0B8545B38C53A8F4597D5F1BB6837AF26114D72C609B624252722DD867572D449ED7C170F99D4ECB995B76C8DBD14F50F3DEA077FBE4F838A03AF1DA6757C70C5F3394092D7EADB1E0A859A8487F70D9F7EE523AFCA08DAA5F8E9260D63330773FB7EBE01373C3719129E483DE3D132697EC4C108654256315A38D7060C6F52B4A444EF33E87946C2537A3FB3B5FACBB0F3292C7F2498F0A11509FD9678CC7C678D4623DC07D8F218E4B65F2EB844D24D696A31483E1EDD1063AED60D7A110F7992E3E46F8C7D5CB1AF02D598440D79D649AA415E5F3ED033A8FDCADF8DBAC48F9905BACB37E31ABB0174CC08A9584E25B94423BF395E097E2D0B7ED76B55C6231F180D1A7BD969F6B874B9255138A1C3A2847EBA159C7EA281433A39D2F88D724B6350E846B365BE838F25B904E7B02B12ABE543961D33D991D0DA93310CDDA1EF551D7B6A02765DCF0D870C2BBF578BF8457CA1B599D0FE445B1E9C39E9C8756EDAAC6A10F62C84F60A27268FC5B436A323AC5BF4A9ACFC55510558C5A354D96A5D74F69687385C123C497543EC14C40117ABE46C22FE54DC4D2D6F4823A7F3DBFD3A1FEED428B90945B8F6B2C9A162F9C0287C758603E2C7845A11DDFC37B815A62A1A665C3FC003DC9F064CD5D950DEE02F48505CBE1A1E515E6516E926FF6DC0123E1E4F94587F1F1568DFBACC3728BDC1D153196CD91D9F6DA84ED6B70D0DBA7E7DB4A71B224E5122328D1DCDB9FAA98E88E9823A49E7560DF822D67C908E9AFF7D429E84350163E49AFA4015337532B6E928BE2001CA202C5D975A3E54808AF8E110575AD5FCA28185B2A7D8A3019B97AFBA933BE2F9CD5F279266EBEF52E0B92114AACC30237B712FE53DB1B8596CA72DC82BEA99DF8FE845D390B8DE1C00F24D0D9C619651FB16A280102CA8BD7FC3F7868E4649C636064F4D0EB06D06595A0023E6C5D32654EAB9C8EB011186A32C3E5DB9BA6489895FD50A26CDF1BC27D599F7A8BD1922B30187E0DDC54AD369CC61E958661C4FA76054C2C6658AECAD7D0AE23A9F36DB1B0E1141ED6A1084A8EBF8975325A1DE4A679BBD0E022BC35A07B40C52FA1B0BCDFE17BB6EAD099088963D7937CFA5B51ACCF722FE4F9DF99DADA8CB05C17B6A6AE884F1C7DA09049027D6EA570BAA064736219CE1DBEA7DB0", "9BFAC777848D427BC9D39876B843378E100DDB87ED269AA91097FA433CA7EEC7D6210E7F100C449876F83439E3E494941D8CFB3E11ED7AF04EDFFAD2729FF75A8FB14A9BCF386ED8D95C046A326A9A92D3F316C758F6939F14BC88789B17F3DFB5AA691A872CA44E908AB966D5F672FB90196D71136ED26591404202AF5858D44C8E0B0ADE3441F554040E458F5AA64AC3D5B32399E453FA1565F4E71FC9EE5BAAC97552AD75D0154FDE48AD914F6D59800A7FEF91BFB6465A296E217E554631FCAC48FB7FDE1244F00697C2155A3161169225109AF5AE218D51D70BFD452433BED94FAFA5920B35353013BE2CD0C32B8AACDFAC6C6B4CCCC2C222AE845FD76630E963CA22F5214033FEDEE3296112F9C127865137CE6182BBF09D1489A1DFFA82D9B391A5AFAE6C80414698703EF03BA42893786FB10C9DBD21E7292E197A2959D605EC466CD202BB4E7BB1E9D5B9B3F07F55FD8637314E3D68C763CBE79982FCCC0147AE6D4C96F7A1C251BC35D8EE3A4F6FDD9CEBF771878B80E3AE481619D80B7BB7EFCFA9C20F11A0FE18505299EF1BB195EC7A93263420D183BD89335411CDD66B4809BEB30AC649CF76552A6F08E9D77C2E9C5AE05FE469705E2E6F44485395C054F401DC6CB9F581E52978BD93CD927D47472DC52D81960F98D60A061C5ACBF9F5E4434B31BC3C55CCD71CC2F2DA6385A3D040DE8B8D5F5CAABB6FC301FE3D5DEB95A00F01772505201B33464F2BB1D45A2F55EC907E86803A94F9340960A5E99C727517C520D338A41320E7E8BAAD6C4470300DB904B1848AC84F67F67C6BDD6AB71E2531C5C662AA9DCC2E84634A5ACA48C5A5CD1CDA454C6689E2484274EB1A2D1CE2D94876F4978987331D16AFBA205E1D81CF287E5E59A6DE000FFFC99E50B0B124E718CAC8FB51A708B42C0FE669894383C01D020E45B301DB2FE85B177FCDD1A688264A0327614A4483BFB689DAA49E8F59BD2D3943BA06F39119D46E5DCD0DEF78BA40798384BEB03292F231A62F7B6E456F3542425599B2BCF96978626543266E8AC0426B3C4346AEAA1E2FE20B54F70273A5DEB9BDF92B8B4DE940C48963DDC569FEA89B4A6940B7644E33D105C5BDC61C3EB7D823D4CF3FA0AC7196D6004CF6654BB4E4602974FBFCF6E74FB58A83540254EAAA4ACFF41C5E1481B2C38E7084B944684B21B7C661F92A28508F449D8ADE8881D40AF4A161A08C5846C78FC5C562CBD36ACB83284223B2891F73947804B6AD40BB99A4E7D9ED1912448C99E5B572760E53DFC434D06DCCA06DDAD3BA09DE063378A98943EFA0CD3E75B1B860E8D1350CB920BD6FBE30D437B96290F49E37BEBCD2FF9F8A4BAC7CF8F4571DAA9E788A3A411AE231D369D35055EA48D03AF54D968EB71F7BD14E51A1E617F81B492FBC3AF3761C601CF108DEA9E198BD1B576F94DB9A15975CA55D356C209E5CE1D8329A5D353223AE3C5C9BC55468AD4C2756BB54B6FC66FCC3B0BBA3962EFB4ABA17B1B08B01C296A578D5AD63F605BAB75C90924AD456D53CB72436F3A2086EE61D7C3479E0381A52715292DCB8CD2833720572A40CFF97928D4EB54265F3110714C360A0479AE7D51126C5CCAC09372AE7139C20C46AE13E4C41E89AE12097C6A198A979DCE9FCBEC5D1AF9D9189059E5E317B77B6E98C29F38E29A35FCC3BEBE3ED0267C5503BAB0FDC46C7D89766475F2676C80CBA71110F815A84CA7EF91ACBA63AF7933056DDA345D527DCB5549C9CCBD5B201BF9D0C82683A8865DBB4DDD057002025D088B7121C118B3A6C901BFF83DC1114", "18A25B1D741562F456B84CF500F138FBB34AE1D18E9BD6FBAD05D0AFA14BD1FFD10334E6AF3ACC7AC2698BA10465ED5EC26B13265E5ECD1C79359095F36B1B5333EF87E78FC44571ECC00F294243FE64C4BD7833FED71F3B6471ABDDBBBF4C374519D24DEB11A8D2EBDEFB8D2CB3BF517AD92CA598040D0F5F8E5607CD879C75E15755087EFF796EF432073AB647C9DCED072FCC9DC74D78326EEC1BDC9CD3272180E38DF556715CD1D37DEB8B6BA06B81F01C26A3E97B9475B688D32BB642EBBAFC4406B7625944603FC085B38E5E4C9ACF0D0F92A65EC9BAEC8AFD9A1C7805854B19EF516BCF65125603F131084CD13BA6E72201B13C1897D0ACCB8C4266884F3439F6833D22C08A68CA0EB7B636D866182E6F42B35EE9E255F3FD30014F4EF3484EF31FB1D17A6FC0913DCC1443439494BDA221336D05CEF0FF168A9C54830066A6E986672EB92B2CA01C7ECABD5B5B40049B2161F8F52445FC27379B0706866AF20800C521BD0DCAD90E8F4367929A9D21F1921049FBFFCB2BFFB69B27A2A4FC9E48256CE24302A57B69B04D6E51469D5D7C7E41DB6113693322E1DAD218FCBBFD47892E8BFDC28FE1461AFC769286C6F75165CF945E5CD3C9322955261922B6C00CA2C006070EF26141BD8B44798110A9F20E86C52CE88D6FAE122FD7208C9216011D7D91750A800576F575B8EDDA2545B3D60310D61F7351CA1C82C90E18641FCD747FE901351524B9D0B92CCBE86067EE5F126FF4B2C582B280CC1549CB3A18D5D9FD25A09A67DB83A8F3F7DABFAA3C09CDF00C6F16D722EBCE259723B97017885B70CEBBC1C164E1A5361738B1F3FA426D077AA97AFC56F4F147D3EC04E52AF0CC518AB4CE8B3ED66A1EDEA49E904B81DF00EEABBB5EA8437C18C0282EA1AEE445331C5B0414C2E3CEE637933753B30FBD2160E93C3E7956BC032FF839B81179DC5C41CC81E6B8A74EDADE4F6EA0FC2077D3AFEE342D75DDEC1539F5C00F640A56EBA718A77A88E2E8070AB9663037AD66D9B6314C268806C2856E233D37BA73E61B8CE393F9DE86DF5C76610766DAF68A8DADD37C3146F59115E8AC18330977D7BBF677C755B79C902A50DC457FEC314323927BFD45DD4A5AB7AF351228986F3B03E51581C8A8D5E4F8C24ED9E14FDB5D0D6BD2A6F563D66A31247D4EA17CF6C158BE7FDA81DBA14B9A1549D5092658BEE5542BCFD42C8DB540447AA13F208223DE36AEE06BCC2F280333D81964ED05A275EEF56C21F0BE0EAD9D6A8F2C70660C0CB04AF6D84E0D18D3EF56504CB18EA259BDA23AC1D8CAB42BC340448283D9CEF770872F3B94FE85A23CD9A864F76FA82EB637086D12244DBBB9E7B2951D3B0B6C345E513883F261D3EE312A31017BA33A08586F58084A8087144CDF634517F42AEDF185D53366FF728C0E7C0748A776F3932CA874D3C2C48B30D01A5F579DDB1A038AE1E20D986515309A13B369F644A856C995C2F6942B7E6BB624A0DF34FBF31CD9F96C486E530A2F3FF8A43D7DDD578D72B1E93338EAACC244650F8BB37AA9CDF721B1EDC334755B63CD34AAA832725A883333A4AF4ECE71416146A4F05232968680AD41C89872E14AE1CE2FA65B7A3BC099FE265173B0B7159662259FA64FB70902BA09988A30697F110B892D7D6C763EF80D6E904A2CE47BECED5E98AB2A3BB70A73D6AF7175BABF8CF8F38F2AADE3BAFBBEADF208415A2C2FD4A1ACC3140E185A2534AFFE6C01EB30FF0137503349EEDC1F9BB263C18F427E2B119BFC692D5FF44421208E8AF146FDE964C2DEC3E1C9D5699ED01A7D78", "69A39F2889ADC98D94B5C678A3D3D8736BC17256367EEE3FE8EF5AC6453A0691D894F1F3202CE84EA8BA5A341D1733C6BD0150CE9C0019168E67768B33B64DD4C9F0E2BCCCF2FF7E370C2BDE4F403C270F36937119950121A840913CC1D663F32F01B665840EC9E09E5A9C345EE001F84B2C1154359BC066D29E0405941476C5B7B11CFF124F5324D4D090E2BC49C3E8D83122DA9268FF58B523EAAAE4493217609FDD5A5C510038CF383B65FFC7671119556702F630404C0BC686975E853C86AB392D25C853964693AA7F4A63BEC12BF51762DB46295D2062FFF24000E4F9FDD21972D747ED2F37DBBA2D6DECE1009222EE06B846FB7D49E8014DACFAECBEF2560CCF5E06EAD04B113D1F8E341F200DD8CDB3F36AB99B566B16A84F8C040ED8827F0E9F0D4FA340B0ECCC98F5CA4B05A990F3B410CAEBAFB409E985A722E4C442F59AF3ECEB1AF0B148A3E8B958D9F6C0E45BA4EC8553332DF170872E60967E106BD27AAE4A6C15D391C1B4DF7D77357B4D4E8B29FC874947A75CDB1A1ACE512C5CD08405F2D9F21D50197DC151B5E5A735F759628BCB5A70B5CC9855A39188FBBA8E6BA0F5B6538ACCAF394A809C68F810441BB81CE71F7DBB2A11D3905225DC9B1F0F0D8B7E5268020039E03FD97D42204E503EF98C26B5D9DCCF5424573775E536C4AA26BF4B0351530857B8F640495377E9A08AE82F227BA487FA1D945EC233EB1B42C18FEC4BEC651D4CE1313C9574976F092A5E52D1B37B5D4B33800F5C3803BC6ED2759AE3F6888E7120D3AC2F24729A08B2B4C8D44EF807987C156DD3ED871B0A6217E9783A78BFE56C819F2C8FFC2D2D83945FE846833E5ADE3F840B53EE67E5D13BF0B7031B6C1D004D274F43C1982C43FB58011389D2C7E9111B8ADDD89C37756F1E4C4A931D828ADC3597429AF3A00C0C9A71A44A62F922102CABA479BDDF25A088BEFDF630E2AED4351A90B9567FB6DB5FECD6F168966DB2EB6161DA84479DBED9090026C3CACC19B91EF5680A40073FEAFCAE161E3A2F0DAC9C0A5A7AA31D93B425D5B5A7BF6D38FE797FB53793EED791C82DDFBB2D224455349F26F147FE0D59747AB091585DAE61A32B04DCEF19D907C1159FF69443843248D75E772B558E7AA0FFAE2A9D2B6B1E9F34B79DABBC98B2FAB34F76FEEC635E6E756F7724106D08F296019FDEC94FA7B7CBFD780F2C0B75B1D88EA0D5885237F4D09F03B2E8E1A98879656AA33AB23583DAFF96D8FCEF548302F323A8BA959710A78A803185D88A9C971D9491613E5BA2044D0B640FECF219CEFE377445E5256FD687A15C9F66475C0270C9C1A7189507E881DC6FD5B31FFF9949342586E24C7827F260CDAE356F874CC7C913ABCB40E892E495CD4388AFB84AADB45069F37ABF7DF966CBB8EC86C0CA5A86E79350DA5D6BC2B23EEB51B9C9C352FD9D3FFAE368891D8FD4E2861B8002BB16DA0C4A96E6A9B8D8FF553CA1E6D85B16F996FAB677FE58608BF58AC1AFA9482CA957B03924945B4260A4147625EE657C7763B4C9F4C00466394DB4F222DDC16B72C579FB80B3861D6B4364007FE856DD8D498F3732AF3A7041A2D71498ACB3793C250CEA60DE84FCD0C227A08F903A0B5ADC936FBDB7BC6AB8F7AF002266C8740AC3D75B0628EF6A05C0481CB283E3645F7D8A0ED7415EECD52E4BF70F00ADB11BAEB947F03140446AF31C2BD41F1D34D75FEAE64B91C6007CABC91A07DFE8AD753CE183C611178B8F63B822F03AFBD41AEF17F6A1D58F341D172D4682F38FED397FB01B396352C37397991D2E1473784900B4", "39B27D6129F6C84173251B68B742EACD5A1BBD49DA6A4DE039831B66B054A9BB13299EE828282F1779AAB7FDFD82F4CC3296E9777A03C64AC4F08DC8882A9454B301264284F7226A4AABABBDC8336CA2BD1EC6517A9F54A776446C5A12FEAE387629FE5A66188C671C80A6C83B08322C2068ABBBC03261AAB8280F4E36507788CDAC4D3F0817327FC0D19B0BCA35D89819A9DC2D5C0CED08A87AF8DDD99304505EA08855CDB514357F8A9A7F3F4D062705E7B26632CA617F640F4D99417CE5C90D432D6B8955DE269460B9DB3C08432FB7BA08F5A658DD79DA8E9AE5B0751152847EA6ADA78D0BB4A8BD9F6E221990CEAF771B5AF603F463D2369DF9BF556A1CE60D1EA6172BD05EDCD166255810C1FEFE029EF21147DFE8EDD5B333F6C7274997E1BC61F253AA375B9CC6B5B64BE8DE11CA00C9530DDB1F218870611D4037BBB88F257614EB7F2A6FF395376C5DAEE4E83C5D11BD6600DEDA47D1CAD95B11E5BCE680D2F18CF92353A11840DB88C38B363BE8813E8004D2BC1DBF95E86C64E060F735C404E8945EAA3DB31A27C63AD818D96EDC6B0111CEE3B3E9F0E1B7DAAB22364FC1B36D25ACF77630DBD1E3CDB194FF8B8D1BE8ADABCF4D0760BF5CD406E982E0F743AFA2C4B333152A74177DD79E64566BF34A10515AC0E050CA135D7357E1F94F1653E9EFB0FBA0BEA1C2B09D6378E4E33EB98B5DB2A2DDA5D9F29CC68766AACBA09DE25B338BEE82700203628ACBDD4B828B34856910D0F2230260FF41EC371D08BE96EE2E821A1F3F328B631B53BECA81BBC74A92F608F2B040548BB5E805EAAB46815793F1D01D121D2E347ABF1FE62B4E00E31C8DAA01202340219430E88938D859D62B709D43934265B9DA9DBDA01537F54B439111126613FFF46ED0A39B2B19C22B8776618B065E15A515B752E1846F51F8469CE32FA076F47A5C49541A19D54CD63512DDE1126D7850B4300610E066AD53E094F26DDB40980B47D632DA9B4524EE5473B521A8F79A4B84CAE714B65E30824068305858CE9F39BB2EB06821C3C07EF2E030DA4BB3DC2D7A29A69DED7EF7B03825C663F5EF44B9A1A174ACFBB164FFFFF0419E13A8DDD108FCA9B2A8CF1A5A2E0471046FCFE32555E72D857ADFBC123B190B48CFC91CE8F0BF86CE2B439DCD3AF6F2CB26EEBF393FFB34290D2B7EC33FEE285547BDCC922312D36D9D25AE5DCB0A03EB0B603A6F75A5EE878266221C9B606B185250231E4B5C8B9470E5BAAA9859A963A51B83ECC111DA4779F012AC23AD2E2DF2965A39E52BD684A0E8D2406A173465B57BA6DC095298DD716BFE30E42CFDB0F2202D56E97772E3D64F1CA9B628B6EF2217A837165A1BA1A8612638C8387EC3854AC557C326CE88DA10F9DA027B204CFE634A695F2B59BC57F987C613131DF2F0F6A5F6081C96098DC03F82B3691AE9E4F14C32324CE495FC94EFCD1CBA88842223DDA27999E0B1762C581162FD1839352E8FB7E4FC143E8D3C774BE9BFD7BA4C3091A04D08EFCAA98B5D3AEBD1FBC65BF1CD7BEE784B58A877D8AE9DA9B3D459521A53010D42242DA0181F661F7CFECC2E74BF3C8E959D84F91904F4F8DE602B214A2E3C42B93BF904058FDBC37528D467E323039F101209D60C56BCEA60BF9C3714A05437A978F3601FA625B31562B5C9B5DE2C6B84F560FE35296E2715D905BCA71BAF6B577E7A03CA4A5DC816E79E21C9B688B0857887A25AB624E2233FE8C9A80C6FFE9AE77108F44A72AAE91885BA9541939A34519C457C41964D4FBD492E11B2890BE2BE0E069D274621FABEE60934", "4545989EE35583C07E91C0FF1F5FD605F39D51A0485105A71ECAF9C7EC0748F7FE5FB5C4E90F1A59B1E31F74912BA831BCB9C95A315008F4C7C72D8AFF51DD09D9E4738E72C325B128E03F7D90915066AFC3FDDE335EBC4EB34895FB9807731EE6E123A28E815E5927BC9FEB02AA960308978D8DB5E131A22CD601D88069D145D4366FAF97FD7B71F4B39AB73A97C715BEE20A175931D7108AC1FCEF63CBE82D9CFA3569883A448220CD92C433ADD11A52F72303BB4A5D1DCBDCDEF605913D8D424F513EB8920EB864641B5833A39839822AB8ED011762756D6E16540D544B5CC8D9F8B671F19DE2BF7ED74CDF8EC9592CF1FF61095D0749A6404BE49AEB7434C75379DC02A87D213FDD6E0E6DA751657D7D221BC5EFFC8211F6C86B0F77096A81B1F60F51C23A5D525C3411DFF07CD5FCD54A60FE7AEA7E4C182885B2EF08BDE99995121FCDD5DDB0335DAC07DE1AEDBC9E988D7D90CD81D30E6C8E598BE6743D2853D975F236E6AED206846FE8F6AC9FF72C585606FDF6C25F5CBEC0C47567F389D5F317DA01F4A801FA2E2CA60344EAC2CCDEF9274608D8EA0A0D6323A1510FBE7BDF1EB8C0F580DBD3BAD17B268BB6E232B109504CFA3DBA305C7F273F8FBB7D8880303492CBED0B8AE374ACDF582A945A1B1D2000E71FCA445CAB59EDA8977E5595734A508495F2A742E30A006D383FBB6F83BFF1D0DA35805B6CC6A54BD1A7C3BFE81DCBF47021D6813B0E28000AEAA0654D085A9D5A0F0E0BEF802AFCEACE79FAB3F85E09E968BBED03B00AD50D079D9290F7E18904ACA46A2F0472E64CD16429547DA8A35CB1D9D532D4223483E7CDCDDD9E406B4920EFDD2E134B169A1DFC3F2AE54C3CE78A121F9F46F5D7BA6BFDD9CA25FEDAF0B2AD447902DAB3282AA9339C235FFD874C5E893E7E171CA838678C05936F9C9F794300DFBE63AA842A3B9541B07EF486C4823EF1EC56ADDA3143B89052D624EBCA9DC5A3A68E19F7E50E4DD71F4B111B24459EA8FB211053AC3CEE16F0D2C75B68E6F264A4E2874DFA99D6C6B3330B634A65D1B3617AFD7C32981D73C8607996F107211A7F37C6D6FD1D72B56432D66A8CE99E30E16847E549E54E7A3EFDEDD39741A55E94B1B735238093F856D8690A813E0ABCDB630747EC7A9D4729A6E0A70F001F5867E9AF613E9A0494BBBAA59CD1D75C83265E494530711F18313B0643890492BD13B49296827D7444876A98DBF99A6FDCFAF7883E02FD4ABFAD610FDD2BC8306377EDBEDA3EFE03041101A489051431B91BECD6E9DAA5633C8E99839DFE70F4C156FC2B1D27ED307757E0335EAA699C3FBC43CF47E520CA1404054F38D13CFE0339D87FC1440504AFE91AF4088820F7A1D8128ABA53DAD634250CB0C467592C27D1DDF7C64E7E5308567375FF73C02951DAE125866C53F845852C5008A69DEECA708E5A621FFC81C3C932319D15E867AFB67B1B1E07B261ECB56A013C441A7DB94523F103E93D95A7A0FD95141A6342922D1A7130ED95F4B1FED18F3FC61315A1FF0CFA66382BF10DD284AA4B54B80FC2415CB8AF7F3E686AD0664C21EE9F20070F99A8A44A5D51D8CB4BA010659C3070EB3374DAF2168562D89FEFB10100670663E71D029C2B09107611C41B202B0815DA2071256988918DCE69B35F46B8AA4F11DE63CE565AAA1172D7CAC8296B9334FAEA08D3BFFB34264D3487ACAE3C9781C1664E800732C387F9D65C152948FACFABD175C0FBA3B45F9892F8E98F2BAAC48E304EC9CB9D2A41487751B8E37F3B58F66710EA2A2CE02354B85E56EF7AEBE52388", "F2BC6298F0B96E3B736B5A6EFF22ED079C8AE2FF586E0F4D53ADFB17300D11CA7B8C2E79C0877970ADD0579DD90187CB8095278FEA5F4BD3D9123D300100AE63635463FB5019926B9B53BA7CC826A14EC4B5AA5E9B6C72685B4517A4564028FB6D5584994F8999F9AE7E59D4327FD95C2A45E83A63E9D9F04B554C8906E0E2095448F75DDB68C8057F54630BAFEF06232F7609282B1EC5D0AECFA93E8A7EF3E6FFED7F6E4A2EB8B82D22C5B9AA7B8617DC13B69386742C09C2055AE5C2E71E73EE0DDF1D23E4928D7120B8C171A4F4421DDDEE6229656295430B936F6AE18254A11612B9ECAED23869178CF6B1E6ED7430958039A7DA988C1DA03E0DF5E1D8EACB7C726A9108E5472329280184861ACFEB110ADAB5ED03ACF5EE7E806AB0C850AB7E2256F817883394177AC0E0EF5B74E27CF6B315D0F134B282EE527E32A762C1AD06991C733A7F2E23776B01EAD68363A361F28F381F6190635A6BB38CA9461749E8E3117CE4F767007E2C38FC0EFFA4AAA693664F30A5704D369C9BEE225890021DF8450EF25B28CC123EB178D113B07B99ADC4AA47FE0078EF3D750B2E600B09353CCCC8BACFF198EDD2B3C551C212D005CF33763875B3753E14B14F96847142410DAD4046C9C8340946D922B6EB6CF2D2BF3ADA92A492D2C43397716A4BFEACA01BF2051E029D5C664E4D9C3B7248A9142092DC25FD0DE44275AFFE90848463E7E68A7DC4ECDBD5325AEA355E111929BF700179AEBAE60E26AB2C6ADC3967AA55FC9A2BB1CAC49098C16CF85C569E2E4A146568C41C815C76629061A483AC30DD27ABAA1469C1AC6C527BBBA5BE8BB0541358FEAB34B1E3EDD7E37EAF307AC213055FCF44E65882CCC9A12AFE5F7FFFEF4262C19AC072C291ED636C3FB1D36D7B99F77E93A5DC2848B01595D8DD3C7DCB95075AC52168897126055E8EA8D1028AF2718DCDA34496ED6FD1D86B49BA42F77A714D65D594965A748EBE83501D963F7B8D3EF55804B4FD5462D12571B77384E3D23C77ADDBE7F4BF667CECE0717C7156623AA6FAED9C1D2ED3C46403F750951AD8BD192FCB1A7FF95A590D085E7A733DB1CA0A821631245100FF92A5B1F63F53A6D831EE041966571EBA5914D81F838FC3CC5C449BC39709A489CF31B7CB91ABDE6FC8BA6E4D41E048D5C59377EF4DE7BBFA2406C6F400232E6B502A10802B420A11316D93638A926FD0BE4A368A223FF767B11ED73E6DD1AFDA6508D4CA6EF3517CD3362CD1604CEC574DD35FABF6D5004208146C93BF179ECAE54D9794FD13C34053FEAE2E7286C964BF2B2371D9BA8AE3F0114BC138EB3C304102846E65E7908B40358BEF9F290038FC645979951AD82D98106440CFE2261C5BDB6BED587C19EBABC54469D6ECA9D9DD59A92DB30868297CECC90AA8228E28C4D1B074881B939C60D8A4530A193290C5E5399FADEBDFC42CEC5FC2738DB18FFE9FB20B7D443FA3F1FEEF91E65279460D27F6308B6B0F8B450452DA56E81D37851E8D589F9B0822ED525BAC86575FCBA54E67BEE4512A7F215820E1885F79A5406772A8241FF96533C644B1B5200FDDF4CD1F270E6EEC77324DEF0150183CBDE7D042C33DC0C27AC6F17D670D379AA778E6EF48D41DCB6C9F0F7C5E57BD0A7875D4B2D8E31AEBAA58AAF78947683E373AD517DEF236B037F29C2A09AA4D596609B7AB761FC8D7F566A6BC8840CA626BD36B1D50AF74342BE0B54475D0AE3E30CAE146306AA540E0D63AC325252DD66D5DF50AF7C1D3A651E5A145192E1F05FD31AD2F37719B62DBBFDEB84EDFE0D64490", "9DDBC6F5221BD70BDA886C59D62F7A95BEB41276DC3B5B505D883DCC478B697388421D5C217C8DD2E56A4130A28BBD7176163980EB820899CF74F3074DD7E74A77B54677A35EEEAE93C32D44EC4D2E4196366E40FD0C2A4741575ECFB8FC927142229E63FAEA97C51E12809FFD336BCFDDEA3FC03A1FE99EA685DAAB6F27DA6BACACD5D432352FC6FCC323EA9BC72FAF2569A7C6D55E1260DF0963EDD6CD3CCF97A033F74201E4390F64F06F89080C830986F8D6E90AFED3BE6A54202A59ECCEF101E5DB790E997918DDBFA1B160D472490F3CCC2B0E1C10AEC61ACC1F36BB6A8735AA86C50D2AC986721C003A2A8F1056BB9910F5A8D62D358DDB31589280BD14319C27A13D847D84C02A039B869B52669DDAD47CBEE6892E2A881A020867405FC1756DF2AAF2E5706A16F53E1E459BCDC430C26403F60B979A4D74F78CCD34E48321E67A8B896A162C873CFDEE8D58BE234C34FA20FAD472F0EB570F5B2BDABEDEA0D0483176163E20E47EBF51262B19442016EE5867BD3345DAA7CADFB2BFBF14B4EAF986951B024D876150CD64B7B0A188CA79B122F274FFB39F1EF88D5B9D36437AE8BA43770DD69E3994F8CD673EC3E1F0A51E798271AA7793CACD7E53E27A325193A9B9FA33ADA3BDBDB9A916DC8BC6188C3D4C38848E3506E38621DB57C2B0FA80BE5CA34C295159163F23ADC249BFB1ACD94FF0A42054C1A2C304F3C515B8B44F2AB1A760E784B95D9FFA905EB5541D14D5F12B4489403645A15F004828AC8FD3D8B44C5C070E8A64BA086462E5CD447C58E0D96130E9BA3400CD7AC266AF3E3D33DF214D3E98C6B7585C552979738879552FC758F04B122889E81B887B653FD7D4A8A5CCECFB0850B58CFD4BE990FAE223803EAE972D0C65A97960421D3FF5B2B75079AEB42A92E0D0EC2F04967C91CCB84FE6E39B6B136CB64424686DC6CDC4AC39C26BFCE81478AB6429D4E9B4877EFFC8740FCB5D9968ACF8D69C771E9E48CB542BA5BBF0327A4C55CC83E466D6DE0E639A54576D85A44F305958A325CE98A45E2C227AA9E85BED652F3EA5CD31AB99E299930F5AE92B12E10D597F69272ACC8185C1E83412A67CCA39DB06A77329475A3A87A1D4586B191E2E8E7C3EC39171CE6E775E7B369C8EED0B2E74A7233CDB5905F6AAC099820A227B6FA0FE5057CDCE6C8175F4CF27D70EE76CC0D769A324AD66D013A3F699C7F024C22C03B353177C3D721EC56E472AD6B383A653FFCD078774C728258146BD8D928B209C0A6A8CC60069F160D33F673C139534362B58E065F7D1176FE95F4A6DB7CC75FAA408C4FB09B7026DD640BB08945B364646D9154D00CDF5BBE432390607904BC3D70A0207F696152CE6FC5A0BD79625E437197B929203CF028384558071B625E0F8801EC1B13F6DF17EB8135687F08071DFC3BB06C8EB4ED296C821CFDDB7F2779B0B913E623ACA6E3C5FF023C58EAAB547BF1A67EA020F317658E1328FC845F65464D2E06ABB63F678A94614E3EFE281E41ECD6C85FE10ACE427FB1960BDF06630B20CF0401F450D71D3FCF0C477682FE342F5511DE926AA24E776CB9C798058A7576E1F76ABFD2C86B8C741230D6D95ADE980ADEA22547B88E607AAA8C3462FA34114DFA46046848CB10482314D1240516AA7EC7160215A54F69EBC39FE4CC97EF710BB7E8B55F9AC158B7F9C87B738FD993D2F0E35E4E9969FE5FC4B301BFCBA8A28D7150602ABE7635A2FB48AC65EA29B829DAE037D8711127F80CE85BE003B4F94E958E493D7C2236DF970D7DFE8495CE083E79B777D44F96C6C", "D7554B01374AB97EE1246C2DA82B0AD5BBC76968B6E058A821418E0707D596E2A7E3AD9AFE623D18812F269C1D347A732BECE58260D2E8F1399AE5BB928716865B902611DA70761A4C3DB3EB0D332E58E081C08D4AF96B1A85DD68CE15A8EAA5B95F73CBA9975924F8F9A3CB57249A6A904A33F6471ED4F389168702EDA2054B4A523B6CE189B26C50900913CBC7693C4E447CAC4CA7B783106698CBB78F5E793284F27E182CE12BC792935FE38CEAA7F659967111AC2607C8316FD3CFF111DC5C2D58502555AA589010F9DE4F735D456CB9F0896FEB163984710BCA11C5D78D9ACE6CC9E2EAA70B177A9D33D8C59245FF9773AC181548BC82C751D59A350C65C895AA79E9B57FBFA2D17F53EFBE0C490B43C3369B71DE45B9AD67C88B2A8F1AEA2F5D871970FE9D4C6D63F81647DEA310F76DE6C050729DA4575087E3AE8F6804128FDA47C1867A6FB5065C4186C47D1199BEDED29D26BF9825676FFD9A98BF91E3921A07EFC949D7473CBF04E6647390E33CF765BBF73714E0AD38C4D1EFBC3BC4144CC9AEEBA0B9B4843F910A7F9CFDD347F6DC1017C010DF0EED1A71958CC5BB8D50BBEC164E186B6572FD09715C29611A3A5162496968C1DFBC1B6A8A4E617922D152FAF2B08BA40E47AA0E9F30515C9AFC74A5C2D87828BAE5243BB7988DED81731126E4C7E9609863929F943930FC72D0F3A4784990E08145485CA0FBCD69BAB2391C82E75BC2CB2DCAF0E94A3717B6A157070C77A8A3B5DD1E30AAB09F5368F46F66575599C04296982E6AE8F8C334ED24CC58449CAB0B7660E0F2BB9D96BE515245DF9654EAFB5060D21291DB8A2D820BF372E795957D59ADED6A72C265D19C852312BFDACCA65431B9AF4DA6AD56B97E9FDA9AE4650C9165037F353D9BE92322B4383C30404706D102F15D8D39B21D22E0B23FFB0AA0F58F477DEBC4F130BF501C765295A54913A7A0190FC907BF2420B329B97F30FA65A7429E7D71E572E1BE0AB0793B606F480A1526085637BBF89CABDBD9D19D808F230AE48505CDA9ADE68FDC826682BC406D4A7575EE913B60769C3BE4D81A073C05FE2BD6D7A1C3B52FD2F22875BE856CE0F6D7A3AEA1897FCDF951DF4A86184E717B4077A25D37935A82E073373ABBA58B0F5F744CE52284D96200CD90F0A7B4A03869A93C9371B7F946EAF2EDF35ADCE873407C7BEF0A750CEE48BE3A33CC47979648FBC5EA7E79DBC725C3901D4D05BC5B804007BD46E48B424665763F028E3777FC1A00F588D9A26F68DC7ADEEAF8214B747B409395016A05D8C72FC3E838DBF7C5A222D03699897E5606433CA760C6D67C8BECAE0FA8C312C9875AE26D61FCBD3A320829B615FED0587E4225E4B62264C9B37D2D2B45FDDCEFC060257960DF6A1AA2AC0544FC333914D192A1629061730213B1455E6FD7A712A08122C8BAD77EAB9CB9687AF97A3AFC02B8F413930DFEC10DB37C385B5643E91F3345C73EF353453F34A5EADC8EB41CB098E9243E57258AE608C9FE7BBEAC524B21A0734D8EE51EB30DD6974B87FDF3B0B1E1DB01FEF13061E4B072DAF927C99BDBB7691069E2493E86239A69BA33AF82998CC1D7B368A4343BC63EACEED280415FFF40B0B61221D7D1C098C6391E5C888228045494F86644F34AFB1B191BFCFD1A29C678956DB16D0BBEE458AC6DDBF00E738198C093170FB37F3F141619E65502AC57E9042CABC72372E5FAB9DFF5E42A00EB023E44B4E536706FD63BFEBCE1C0DD59E465A61DABF566EE7216973ABFF5D34A5A62518E12E8352C61BED9348E5826290EC0F84C", "4251265EB325D261D721A84F62224701C9F564298EFE0C2516330F7AA43CC3D7090581B74C69218D74C8C6563FE276F24F39BB7998CBFB9C49EC649106DFA51E45498DF0F347DE8A562341DB34E94F286F583832E49AB38C09DBCC3B2C307188A980574461CB3C41EDFB933938F89C88F61886B60097F272E511B49CAED645190E98C3AB8AB5CDDC021F76567AC1EAE9F4F8D782B91BDBA3037BFF8FF43879FB6598D84046CA06B3C8EFE275BC61E449853F979AD6BFDF27DF453E2551F09FC1916F4E9884012BD4B946E2A65C86C609CF8EDDEDCECBE9B1DD6715C1792E261A3A013D64F00118DDB1FDAC9900E8BCCCEF9246446D5248D5E3423D859E1AA9BC38F8697F8A4EA08632983F268BF7D0BE639ADFCE6625E00229FD510A41AEE418C3AB85F5D2256D8EA4E9AE47316BE6DCF792537F28514B99BD76D098C8B4CA16DE1A9ED0F2693DFBA9B460BD842452BF563B03874DCCCD3E18B76AA3E352978473A2E02C6398438A35639457DBA7316577B0863762FC177010E0FA0F7537420C0443D8D7F51AEE4F40A67E249D678E77F17503A0A6DBEC3C60FAD140DA592082C334E3B1D021E34104A9A724FB6EE3B5A22CE5D3BB9C5E896956B4C6F7B1F51A74A56A7232E027F706EBB999708BA8ECBF42F44E41EF63A7627C60E5E75C678B5B3F7846CBBECC9A1B6EF78D7912AFF0EA56B7E25C31784DF9D63398FEF53F6193554C4D8B7A96C170A89961D2654B9A663B39C76401A439CAEC482BF44F20DD12140D47D0580DDA48EA905D409BAF5BCADBB8394333B97C0FD9501AA4B4BCEB3F041520422530A09A9B24EC04206CE907A33D0A18CD5C1640CFEF970623B1AB2B7EA5342B6F38C717416C17545D27C21A8F37AC2B98991395D3D170FB2D03C6B152915DDF9CAA12B5EB19E45FAC4CFD4ABA726A723237A6488773C05D0D38D38D920C6E8F2D3476B06B40094463CDAF380026BC36B8EF3DED6A01CA89E015A0B75BDFB97D859C620D329C9B26B1DBE3A3C92D8510B060ADF4151AFEED125ABC0D6FD3FA9F7F3C67B6BAF14A672977F2052A84F0437027956AAED010F63471C5848781BEF8F2BAB9F8CB0DB00253E2C6FD30D2A0794FCEC489376261CDD407B4ACECA129D87FFA0C76E28B9483034A40F84EA21E06C37BBEF2987AC16E77E021D29CBBDF077A912B89CEF82FF0EA59F7FDA55EE99F4602B5437CE71B4183BF28BE79327483898C39D09DCAC59C3CE32333BEF4B0720B30944B9998A01CB3C135D53B4A76FCDAD1C321D39D4466F0BF95710FC975ABCA1181070A4A5741624CE9AB0FEF27A5BB1805BF295861D0208BEBE7DF92EEFA7FB123B6AD42541C1A1057DA2560469A680E3664B1455D6851E6C8DC8C4940281AFF025B2BAD2CBB53D1670641EBDE2AE91E71F7F69AFD0C1A0225351CB1290EE40F81560A52463FB04E1364F9F3E5C454C311240EDA5C6AD78A094A73DDC1463E19A8E12419DE4966A1F12872E566F178E256F257FD1890DAE6F84DE013C2490B57DC1DED2E705C0134E889EECBE5575587EDFC240DE938C6D2D9CE543D5BA3A4A3EADE1A6A5F0CFF996311F72B3C6761414E34342C3D1A48F5D3011D7BC7F936E8E086581AC256DC6A376F9C4ABAF87FFAAD67BAC64401F4D976129EFD57102A84E63DDFEF60CF13EAF8973881FEDEBFF8D4B356B2A03EE9FFBDFA99F77EF7251C11EB1D2514D5E657697EFC47FC42CF10FFA7F09765E2EC39E0A99E4FEEBD410BF4AFE51855341279F7E47DFF0066602618ED5BF70B2F6D002805F41E991C68D64ADEAB7374F25B60", "E0DAFB980D888AA2580DB37930D1942D6D088FDC706871A90D887B5F2CA6B21911BBB8BFEE1376F48428238607AF7CF82C3B3C9223746BA9A5F01523B20889ED8F139EA3D505D55D766BD056416193CACA6D5D6175C16C38BF44D7F89D4A5E3406C7944AD05D86C310E1EC78E0C8AD80FA0DB202AB1768AD446AC7FEC60B30D741114B45857FA5223E64AF32476319F16DE15C04F34F4730AB31F4F6BB13252D706F0B3BD5860BEB864618353CE62469E25CF4AED50D8BDE9633CF18F76AB1EA5552614D4AC3848A0CFFFDFD51F17A4E744533DC52979D7012AE53E9B08C4980AF8876ED2FD8A6F174B3AF651517BDDA1965264F1CCF0EEC8E3A9969D1359C5C9FD20CAD8698F3E28ACE77001F563BF456B5A46FC747E5D7EFED93314F7AA87CFA60405F968A4F9774E30E2266938BB19E9265FB71BE0D40FE6BF14FE02E36FE10FF110D63E02145C78B73217EED9DD87F70077E4229572E6547DD71828C773E46462E30B497F9F5F99D723D657E17A288DC98724B11AE87B7E56D33386A7FDEE0698353CD46409FE8D2236958B166B1C697BB8A42946D66E390A045775A6FE7DEE4BE260490B69C56476B894383091C827D02E960D9359E8D3E151F50EB87FABAEE8ACC6E325B36674D9C7CE249B879B3FDC6AF95E92FAE53047BC211757FD12564EDDA4DDB6AE8C94DD3305C21970E90BE05ABBAF912ACC52C77714F87C2B059A9E21005D8903A604D82EC22192C46CEB63C588A219CBF755B5D44CC0E918CA6705156CB497FAABFF63745C826FE16F65582D4820141DEBE3B949C29EEC6D99C2A4EF34DC878DD82D0FE6D5ACA302ADFB897DAE78EB0BD28A938D6FD5A3535CADEDD7C521E45AF4BA92FD40DDB009E35C21254A6DB959698303D56B59D8F319F18E688F9A20DAC8058E0496E0E46BD01880F3C78EEFE98A511768919116A288CD3CD28098BF5D4719EB64D548A6D791F1A9A9A3E9B08E7184AEFE60A3D7D7179CE47562E9133068789BBE0297FDA2B2D6F4248B288CD899BF3231EB360ED45F769C0167284319D2C2B11375C2B18E5B67594CF499A6AF2687E0C1AAF09F4161F3AA8369BDBA68AB022459A2DA9DEEA13E509AF3A68D011998D9C30BEBEBD04BC9983F36FA549BFF3E3D323722B2136AFCE0A2CC8E593B370C7B48635926B9575A77AD7C0DA18E94FF1C8FABFB57B25981288E1771465360E2D619272CF3F56268B7EE130FD07DE29215FBD5D0A72B73081869F60CB149A1E4871150778A2229F3C886200E0DC2C76AE049231FD3171E49FF44BDADE185883198D21629CE0AB252C7451398E0D411CB01A66BC5B141CB150BA9CFA9F9F46339625E1D5127998302AFD19D5B2D85F3F0B2B354C7CFAACA3D4E7C7B7DF44E22EC2C226178DDD480DF7787EB28F0285B1F973DC47B094491DDDC12BF1CAEB99E0E13781FE8A64DCB0A05A30763A055A6ADFE5434D7694A0F6A0366B5D74E73227F3D503E6B989C5BBF9E6D81EDA7C46D890FB2C5CB439C5B49FE16A9BEB14B12B08C47713331E8932D4AF6B85444E3F848C5AFDC095E984449F0D126EF711F8B43831755BC0FAE8D9FC79E894CEC183DC24B1E3C81FAF6A546E464AF8C0307263680CEAD9ED6E80217F98CA82458BEE59D2A4FA76BD7D4425E0C77164A50A2933972108661820C75EB51C8A0ABDDDEB30F31F2E575AB9DB723DD084656691096B72193C52053EBB8B72C6B30C49185166FC39F3D9F3497606D15E8D696CDC256DCBDB6D01DD2C33C0249D6069788DEC09802630597C13EB1AE152E8E84F6A4BF60BB09E049EEC", "EF79F2E35DA357E9C076B00C6ACE7C50F865830698571E999E544F5025A99C36BCB025B7967846306FADCA22B8BED499BC9A80EFA7BDBDB83B15DC6D48AC4E3978D528DCE0A3E11C3E62B619EBA0C853EDB0EFA1DCE9EFB2E024FFC0B59A8AEC329FAAF418DF9BF70A250F2F6409A9FC0153161F6E8713005E53154DDBE15242AD801C216A1E5CE207757BFFBED75EE4C96CA0C3CF448966540EB434C68E9A4CCF3C5907DA216BA664B073D73B0779204EBCAEB55446AC6E2C40B8BDC666D4C9D33B7C644F867BCD8962274630191EADAEE7248398B9F02744AC5D4DEBDAB2D6D9F8D6C6392683FC1A795F70134E790718D56DB6D424725DF8AE7E11F02D684DA78ACB4B9C311806D082C1FADE4B31B8A6DC0E5F16618C47E03E8D78DDCCC6ED869F77CD39926945466369CC2371D3B51F58DFC6471D742C9C82B1B7A2B1B1BFAD15FEBE592AC0F41B19C126D923BF5944408506ACED28FBED161902EC5FF19CEED25D18F47A76860777A3D86B3E0BA7446C3F1EBDA88F8A8E182CC0938384842D42F41E0042C53C645DC87C88429E06BA9906A7A3C1F6A76671D69703496324406C7FDB20B9C3CE9BC273A743DCECC0016BDF85D82112DBD4C49E2A6A5DCA22738750EB8DD6AF15B27A0601970AD12660A51C560E5CD44B55960AA266A88B82E761B53A8B42E7332EF2FCCE093BCB06FD18D916FA10F4E9891B103DDE5D808963E6F71AE7479A5D0BFCDB8A2B2086308CFB7813EF6B7B5304225C2E9690E47CBFCD534570933541E8DC99227986C0CDE40924D64710A7FE28D248E667E18197B44D83FF1A0691E9049611AA1E04A1DB06595EC32A9B91C46F50096553C0B5716D2EA9C9E3D373C787783B50F28948EF96D21FB323CB69FBA26E8C869C745FF08AC0C71D2B656E42928D09AB4274C307FBB04AE41FE847721D95FDA55510893DF24F56522EE537F609FD54E4DAB4E98E9F3F8E8243C5D056B4CF6F2330408514C6CA22DBC79BE374E2B34B3E9A9B689B9375035F5E32013587C402C14997741654DF70FF5F74C0DC26D82AE7F036731AAE15D596E426EE2E7383EB540A48EF41FE2172F1565AD79202A016EF31255DBA5DE29C8C77B4704EF177C97DD507360FD01B44D612DCB18D7B5650032B1E768851C84EF794F833F9D5D198603224016D3FEA90F3C65DA465418750A69C43050A738A7EC4D415CC0B404B475936F8F675D49C67B875BD8BE2B2D65E05C49EDFE72163CF3F3BCAD87D8E956101964A1C1345F3978E144303FD1AEFA4675F521BBA59F0EF43DE19418993F444C1F75BEA24B295CDB73A51510B8B4B59DD20829466409444D4FF428B3B94164666A642FC2A187FDD7ADFE75E813BF64DE664B131F58B9CD825A19AC360F4F83E43FFBE0923494D978B1B2ECEEF07F2387E03B1D933008C0131A9ABB08DE1EADEF78291141D285EADFE1228554733CD927E9740D39EC9F539FAB960EA829552CFC36CD8BFD9092C821CE4FB4F29115BF533A56D7663CE9FAF2B9DA374B6E1CE5528A5B11ACB9FBE818BF4C41787F5E4FF4D517D46D2234B77F20ED3928BB38A32BBA350A66540E19B586C47EBB9EBF4E4A671CB41DA55BFBE5B39C025BF8F11A786D60C9DA6EE5299B17C0135689AC9D880B594EC51BB52398E78AC7DC2439D0C4BE7BBFB7F044661C9CD8D6D7EB16AFB943589C6210882557C65034BD7D044C6E957722C93537473E2EF1AF5A6D05D7404E274D2DA8B83F6D2AFF9EAA55D122F69F469927EB682977715FB1617B36368C22FD6A2A7B10412E9F202C6FC9BA1D7789311D0", "18085D480B93B422C6BB24B09E05556F8298FCA307341877435D2D76B9DA1A1932F20D2903A63A0856D9C431FA3C4C591D606E0043B0C6BF277971588390BCAFFC01E14C6256290E1A01EB7BDC98611EB4E40BF72B04C21526D4139E3E75A13DC25C0691B67F24B195F57923684BAAF94C7E3CFF4830FB5E828B8F7A8692C1A0CFBB9FD3F021D3FCF12C7497021178A2AB8D3256E8606374D6D0E7FE11BB1F313BE2BDD4D977780C1A2053F6CB0F60F89671AE59C178FE33900FD11B4DEC25C698CE0FD4E451D6A3CEB4E41BDF08F05F556B4394858983D515266F25703C17B48B1AA13056ADB2AF9A865A0FD30BC4BAC0D7B1D185AA2903D1956DDA3D5541873EFE487E08E83613428B64D2A499BCF3783466079714FDC3D0B04ECDCED5C89F77F5E6E6F1141D47EE7A3C32382A89F512F9C9BD96AB24EBD4F77B911D8B8206CEE29ADC1E055B7BDFFEFF94AAFA750B857EC6FFCA693787C0E2817554717CE5DD5568DB1AE585B9BEED0C6E228FF47C43FD7565D3D5664BEBD73F97DCF73D8EBBA3FA092BF6EF21730EB909327313FE1493BFB44397567DFA30BDD7D090245057098AF775CE977528E91D9C3976A4D478A5695482E4EBC1FCB2F7FCF6E5F9B08BA8C7DF12E6F77C3B0362B1132F9209AC1D69579D5E9815535FF72820BE1414020694A3E2DE53BBE7DDB582C70455BCD18AA0A4E0A8BBD718217C616129F236487194B266F95E644D1FA79532D7AC13CD9C839BE14AD4BEC179923EFAC48965A8C915812C0F0886C11ABB0D2DD58FEE6AB2549AF9380B8699F3EBB0F96D295C22B940044819D7FBF2364610893457DDECED6113D1B14BDDDA8077BB32E70D19733CB795BC8964FD9788ED317B5E433CDFAC3CE3E0EA2A8359671F2ABF49946217358E92828AE32E6CE645C3C0E4D1CB64E5C8532DA7FC179CC7ACA241AE496D821EF7FB9E8D878B746C50DEB281604830360C8ABA336D1E8F444FD46A74F6B1A0F1F61EEC42C1DA2B6D88CD1AE94B3208866BD1757B1ACC09BC155DE4690A97D0244B819C0A66785EC764276BF39FCD6A1A172C777F2E9A44817D1B6B3C09AEB4436A3B115605A850AA9D11BE2E660F2B214C45B00134604EE395A77BAB321298ADE920BE3050CD2D7BAC4931C3E3687BC4FD7E2EFB536E26404E9950C928A3CFA8A11BE42D15EA8DB2037154F79C67860844D04DF51F5F21E90B8A16E7504947B90B655744758D97886E4860FBDF28FDE80B8F32C94D09F4F827F34E8FCE92B576A8809738D6227C9A31A43CEB3EDE56BF7306DC6F208D6229CC3E5C4B49AC54486ABA7F0079EDDBCA82C3C77F41C58A88C4ECF4DBEA754DFB3424BC3106A9FF280E8C6A7D086FA06C44ED23A82E23A03D3FD4CF62DE1AAF3A95747CB5CBCEEDA5B1929C13DF6CFDBA6A94A62AD3035C8CBEFA10AD9D37389B2EB90822E10B422BC165A3BA86F37C0A5B96D0EABCAA331FBF2806C65B376665A434A6D59B3BC9C339F4437F4598D0D6C62812A2083C32359B938D78390F9B4F86E42F297405069D350F86B089ADE021C1599FAA2460EF5904A6E25708032540A7747BB254679454A7B38C7491BDCC835033A76514869ADCFE268FE49CF38A9B844A97214E1E1ACE873FE051FAF282664552DC98618E35DBA4AD9B1FBE50700726091534091C631B54C944C28D97DA0961F8E4106408017CF1EC86456BCC1F4EE7118D0691F0F327A0436D3145E5FBF8FAC33E5179094FDB03D9DA0D9A2EEDDC221A21189B68EE1A94B13F062F21472DB5466B266562E2186FE01D028CD4AB5B6AC9F048D8", "D50CD8EB871C5F371648DC07E20BE84263CD676282D56EA5374E21B52752DBE416DB787BCE232226568621ED792A9135A59849451A4A4D8A1DCF3C804AF966881FE5156FB761B3736F4282240FC0BBE72F51F0122D96B3755109E7CDFC70F9DD04C58B4A51C00B4FC0EF252B05ED76440C97DABA04079C121351CD43BCDDD4AA2D2495B49B908A9AF815DEE1405C3CE9CEC7D5BA9919621E8C4E920E08061D228038F73F8E5DD66BAB806D2DD953C6FA5360487957912249DE009655658BE8CACF00E6E0621739648A7A75EA06E93946987E62EDC270B266BBBCEF61D7CC63013AD797589A7CA62B65D4127E701BC95D45C74DBCBFF498D3F87CBD1B288D6012EC392B901A3DDFF16EF1E1685EA1F92B1F32DFED2F9076EF9CB1ADD8B04953E5509B24C48977FFEE6044B8C5B80F9DED6FA7110C3A2EA42EEE8A83F4A28FE78B27E84AAE7B3FABA56C1A4D2414E0341C69C40A43D65E16583A151826F7C7CC0CF0A5999A1016BE6912F067913AEFB525EE41F1B9C82881054E9624C03DECE74976228B119974BC546F823A597C7486DD594F1FEB2B6D0330918936DCBC12E3752A7072C5FD7B145571DC4A22C770E00F24B8C91E27F2C727FB049D04BCA813948D2F7B531C906F2018F51C9EF8B7642C0F1CC06AD338BEDE17683E0BD2A90D4D4746189F792952037E4918D2D6E61C1C8A8B6C437075ABC38913C250BBE6EDDA5CD24B630AB8FE9123B08D5E8FB8B71BC95BDA4AF1A71D5E54BE98B16D7D3083AB1649CBBBF44B3D5DC33B77DC1171A66F6F40E75EB86801EAA36E02D138093F28ECC6DA4CE4B128DAFB8D49A17C683FFAA8E6910B8BB7B832B3A3D0765DE2ECDA9D7BFF0A822F5FD389A04B660F832687CD67F7E1E1C3F5257C6FEB27B763AC7327DE8FDB989413B6D002FDFFB1DE5A80F1C5E39F06E6D716A69ABEF37B2DA9783FC494574689948DB51F78C8812E09367E6C8D70F5FC4139C64B96C71ED851D171AFA69D2A646ABA85279B7D3D31D268A2E8A272C91902F12C49D07D74E82728AD61BBABDA333DE7138A976A2267DCAB1A02E19B0685F64B608E3DA41108D54A07D4BDD24D79D293830C04209C98F037283BAEC00B1923CF404E1F21584F515F9D59B53FA9B4774FA8D3B34B7C66907BA127A095CD8CBB23375CB188CF9DF22CFB4CEC528C581DB63598DDD9A53438409D72507D2CEB5BD45DB5C760415A5E3B3A909EEDA73B7FE122DF04CB1E9F29E7A5A7385F632AEF63771A4CA2164B9B3FAC3C13911DBE9668D1127DB02A94CDCE2C8C7B66F0C21601781552B384DF0FA002DE08892D0881174CA1F6DE80B98BAE545237C5CEF9E1655F9EF8F8293D644CB47963734197F1976600CF2767A59FD56B9B67659168ECD57C485E5726C150DEC6C302456AFD4F12B2F2D1F36B03E100E109827726020BDBA970A6B768C580E34116DD0011299B4DEAAB8B04DE1DCC5FFCCBE57254CA79743D6B00D119CBB2C0B0BBB2FB8FB0B0EC97204E1720F99D16A3257846D09BF8EAE02DB21FCABF03CB0989FB4D99B6D71D5E64C6FCACCABDE63B223A91D1278D676839E1A5CE6C5EE05AB4F10EEC511C366DBFD7AA1E139AF671CBEDB3160A775E5214C862E95C3A7993E508D8F8B7ABD68213A531B5C648C537FA2674346FA0B3AB43A7B58B4F83B36D58C506C188DAF72381DE53F83AD4D9E6C6B1F5D689AE24CD158BB2898F06AA28C8FFAB1703871A6A6FE41ABB6B8B9188C90EEF88E7DA3338F119770B31167E3AB541371FF7F98A2D59D3557438DEAD71C96B97F3839F5E28DA6227E5B4", "0447B9C85642F3F8BEBD1CC7AB0D0E4D07CAFA93A26C75970C8B40443506AF8BB671F30867FE4225F576026F79010AED56CE915AD9AC001447CDCB7CC3846B0E291DE0E9E443984E0ABF7C1C1D2F6D073B0B77116A21C3C0B7F360439D11D2DE370CFF8FF73FFFBABFE4D52BCE58CB32612870B0EA23CDA21E3B6E851B063BC76FBF7BC394A7D3805D45616C6A313C887D2FDC51F065F8F3C05ABCF70F31EA5746A513D2DB3F4F3C61006F19420AA82107AF855649EA5D90ED0A8540D0A2CEC685D18EC8F4508A7D092E52DB2117C233A7BB542B61C26BB92491A88942A506ED60354EC1963ACC189A248E37C9367F3F6FE065EDF6A1205BC80B267C1062BE20950617FE0EB59BF8F1E69982F3E89E7EF85F3319A22A22B8BAA491BE76AC7257A2DF631A98477544E3E57C7D63616D22789968CA5E929B507AC394B6772096CC70B69ACDBADF900D055881FDD209AEF54CE6966767C07EB7A2B40A3410C3417D114FC9E293DA7262171325D8179262B2BF041F5A977E2D648900295B14950EDF245C7EEB663F8292625F804BB839BE3A5510036F7A50288C69F94434A03466701BF1313020A4DC4F87D272FB9D1B7676C195C0B7B4D3C2CC6B20D5C2066C7DE5DFB5C9FAD43D80FA43BA917F200A73F258BF21ED8BF3E39F69E501AB3EB115C9414C82C52CE91F6CAEF4A163E288A6FBAD4FA83477909FBC972E2EE2A5379456105E8EA02F92B0D8F79588E2282D1970C3A033F738011BF273EA65912D3ED09398A7F851BA2D6141F97843E90F5C66B38D71D70DB9D93FAEB07FE1AF5783D71CF50931C282CA8B483D1F2E5DC5AD5FF2B06C4355E46768AE5014A22E7CA26267A1E6CBFAB24C8C436535F23D419819D6D458551EE78AEA4779574BF86DE7960969B0635F0B2996F955D863E078DBF8689C142736BD5177DBFEA3CA8C58871B1FCCBFDFD67BB12AF82C3B8F935CCC507D510CAB63B831721E0ED9C258BA7A3FE245D42DDA1AD8A962847D7C724DD2418F72508FAC194EC43D17533AE522187B44D71B6E993F2CEFC6349141094C8CF935D90F2F238728D29E1F5AA09B46FA7CB651F688A8A06AB97FD2363486F61D3F42B9C015652A53B3CD66372849FD2EBA05CFB5AA28520B01FCBD9C835F98D15FE01C84D7FFBBA4B2DB93E44E4341AE95B8AAA4D59CB88F7E192E89954E22B1B8157FB0B89E3E1E3862BD4C2799F2D8C621064EC9BA1EC30E0F7F5FFD7013A7E1C102DBF01698322992EB05978A5A2878756BEABEDC660DA2D5370A98CA2C0A4C65141EA273EB787B2E7AF646DEF7DA77A93E45C37E69B474D04FBDC3B5982D8492FFC37FDE42385DDFE97A73B8575C1305A0B9AC0B0CE061A423556B6FDADB67D0A5BBA7435929D658FB0869BFFBE5D2FEC96051FE03CB7B0D944304C2D433459A97C43268E43951D4C1708C702FB9C0A0C6D82876057F4D043B21A92FA6D034B1DF5C2B463107AAA814C79022D96D1BD9D33DE5A1FF9E435D9607575856CE4DF5F1E9E90FEF5ACC4AAFBDBE0F982DBFE78C5ABE1D9C85E0452AAD7836D39591411B382BCCE72CA1702A20C9DF384F5BD539F53CEE8B9977AFB705D1D28680D1733BAF5F298282846EFA26B0DD7514422C0EF9088F796B38C15EDF6C8D88009B10CD0D6B4B2FD93679712BEFFC4D1F7A3898AD0CDC61D2FCDC360C66FDFE0AFF0E8A7B26359606CD4F47D28DE115261E6F98F323FBDF3E3046BCC2ACA0831D2BB4DDF1EF443632A229CFE6BBA5179079DC7FA50C56BE7FE5FEA0C5AD09D891895508722861E9EE8568F59616890C6370", "8DE87744B81A0E21A62CD72148FC3782AB560CE136DC3A07F2D2E143EA0DD2ADAB9FF8AB39B2A3E8858DA593B6EF6C46BB5CFD252F6DE446D9165406B3DD18CAFCCE3DC7A6E6200D8F7591169A6AB9DB6665FB72140A416EF30B75EBABB6C284E73809DE2A3A26C7F4F188FEE0B401E9EFF6DA22EF3DBE0FAA6DDFFB5D8C265D1A1855CF7019D8659062AD7A705362D1510ED5013B96D6EE803E7C6418B05828243496753E8616F4075A08346038E3F3549C0AB1E761790E818C2B531F06805D92FE53D45B9A6FA5E30E3D6A2F467AECA07D29E1E9123247C69220E2B9D4501EE42E5BDAD07F0D092B33A938B8FC0EB7E435713E3E428E87DB24AC570E4EF64840A1B4D43C5026C80F321E537755366B16FAFF2423908FB74E9A5B08F0C1064815472AF48240F1C374F2AAF8ADE55117E0FB1D08AA40C4D8AEF35CE6A91E54A89BBE55BF5E78ED5F66B2FA1E8936342656C63263D4E7ABD70F7899DAC9A315E9508AE65287C6660A7D7F3FF408CD06F3B19E1238E6D5EF040B3E54F4469BEC17198AF3F78F660C6753157603138BC98AA9F01FE79036D4564A7396725E57F875FCDA4EAF80C5E2815862AD52340571A571B331CC8122C13CC58403B22B61BD404C6D94C36FEF187C712B524BAE9EF150A71CE32366AE536B5B94ECFA351EF0DE77E729C42BBB32C7D35F9A5BB29D2D84BFC91F510F9A1C907540AE3A80CB7023AE0635EA5C2EA0548D9D14CE4BDE142436521ED1637C7B7CF6CC1DA5F826B800AC6FFFB83509A81ACE30FD969495313F9E18CE4D8A2E1D5F9C7DA14A0A9D4C4D49BF00B622B6AA07FEBFF0A8B274C297C0B4AD1CBD64BB4941543FB63D9E15059E0C0FD250753B2AA664A677780C39A013E1AA6B8F786D677755ADA03E51ED55F936FFA1ABD0430DA8750575C37D1EEADEC5E17148DB9FA202F8748B0611EBB5015F1D26C0D810F1AA5A40D73C32C269EBA5CDA134267231FC3783D3D4CC639E567681275F423439A29118C6A0C1B07D08416537D4707E9CA3FCD3494F64B69E2AE9EDD0079CD428CEB8A00BE0FC9A791FE2DCFC10D7F813315E964828A4DCC2A2D42EB313CCF192F32AA9A17C984E0D3CF3A0BD86E0B751B30C096F5F0B08A0BC439294D2BE2CB387648F8119D8820D39F17C6AEC976A0B8C89C76D12AFF73059B49EE856B2591E8D2E817DC43793F20B2AFBBD49FD9A05F5B4CB69165420AB96F26A46861AD9423F7DAE8829FD392799EF967E1270563BCF3D46025CDBBAFD15DC23F33EE5B621DF6A12263CC0A506A5E9AB191F896D13382B3BC2D536442A62B09F3C2C2252D0BE377CFBD59097259ED243EFB36C9AC0AB01B3AADD502DAACCE17A49CC82FC9ADF67B4EDE81D9355CD8295DE21468FAAA25036B2DB6E24A3AF3E5FE59324867658EAD5198C47D362EF64B71179D107DA748F00400F15167E84B62588F6D81FA4B68A59A24BB3D27167D0720718BD24EE556FB72113FCBD37831251DCD538F6815382E119355CF3490DF0AD552ECAE0D00462C10CBA4011E95C7FEC968AF6E39E1FD15D1026879202C57E2CF7AB02B08B15373C13435D8A55ED6B9BDD98FCD5B4539428D90A2C73D37DB112D2025EC8A4AC8EB82C51C46FACE88AC0E1F161705801C781EA07F6914122E5DD6BFFA3812EE44E314BC09B785B344584AA8522B63FB34BAD2122F9FEE1245E6DC837DB032387EFF5036A021C8112CDF03BEEFD89EEFE1BB88A132CAE9E1E9EED3A855B364F2A4A2F81086172FEBC64614BC04D11E74AF00F54AF6B5D85EE4773644C3FA768532B1821EC6E5C", "0D1FA0561DE4DECF411AB73FF48D0810AA2149FE5F3C22E62E06C02F60189AB5690A991CB88DFA5C4FBED745FCFD63BE3ECD9CC599E35B5FA31AA11C62F3A33796A64EDD0B64F2E51E75C2481D3EC9DDF07DADB71448BB336C0DA9DBCD897F777E3C9DD97C7EBB08827C19316F61420D96F3D94EC395F8BF88F5927C71397F6C24901914826B1BE26E14FE93EED37141109CCD00C92772B96D9EFD74B3EAD3903854801B22DC3F98232023E1F9CDFD4B4C952A6D268DF9FD3FA83C707941F8F1ACDC195AD66E7AF48D7B06C62F3204E8D03D2C92920C589CC56A5C2B0A1F10401BBF747B60B9D2179BF9CD7DDF50B10823372CC4E24005D73B4C5AB918F22918B16D98F15C365FE69786C1ADE9FAD71516E389938D5D38420FC79F82C6C0AB1C6D93D1896FE8A2BEBA134C138EB1FB00115E50A8A676B9D9939E7375F4B7D62D449EB341B0C03EE3FB18564DA3CF64261055594E0F8D322EAA9B56B5328574AB323C4376464F3C27786DF7026BFD6C7757BAEDE7887217A2D3EA22AF7D6809BFE4985EDB32ED503C6034FECE55F4379920C73A515C7390B3405ABCC54F51F686903D5354468AC566D5A03C5AB536934A6CE698E06B9E2C815B15B4F8A1857FE7C0B5486759B150F48AE9745AFBCE856830078EFD7F4CB4A463587B7DDACC79FC9FBD9C2A0351D91DDF27A65CC79005DD24F1C26252BEB8C3F1D69DF79D386401EC5AD57BF2129D1E828D6D57CABEA84C7F77B16B919653C12AA7F770741E4AC11F0AD08507C3E7C4716F14F14C548A88DC4047EA96CF96BC0CF786EF7D02424314BC846682109A2F80044B51B12A0350DB9FE06E72581EE874665B9680EC118C86DB575F9E5F687CF35DB3CA83475051AFDABDC974B2991B47BEB4CB967E3CF20D2B7CA2BB50825EE33FBD7C6E87095DE8E36CA6143F673A8C18882D89F22C08971CC709F1518169123EE59EF50846C95C313F14F9472D4CCB8EB71301488901F27E895B5D44420F91D123E3EF5527121B9B0C9536CC3D4E5EA03F63BA8FED0FDF593AABC3E768962DA165CCACE066ED7D6E46DAE97EA08789C36BD3CA6888229D15714302A39EE4F39DB0751F0E99877237524ED8EAC5F7EE2CC40A69408DC43E2AD88A661D7E443D7E99A14484E3011A41912E2AD4F6B7D62D8D9F3332F79A5FE1E16E8064C91DE56B1F89A9A3A220165872128771745D086DD3F8DDB2C35AAF3DC6DA70684DF270ED50D188FAE62CE4C98B9019D308772EF036F9FB2775137377CE61529A40E03B388CFDA3BAD55FD62D7ECAC2A72FB68068BE08383CC36FB66CC252A0412CFB3C993803C038A1828E8893DB453D47C5727CF8BF80850346063AF4976610F984ACCA00BB5963D5DFD018E0790F4A6B14A9B5FB9517783EC1F16773C49A744D8576F7957D4CD4C4E35D1BD580FC76E2632D47661A6838344CCF6476BB793FB12F92143524E5A01DD5294B6528C5A18B24B0B75D017C4DB3663BCD561AA8F27E510A7C031ABD3708385B03294E3BD1A695C573701B9D4F60232DF767439E252B7DB10D4E3FACAC8C2E8D16F9500828826EA807C2C7C48C0EE8457E757854C1540EFE9BDCE7C09AF5BE09AEA54A4BB0D2A328092F3B8741A128D4BF588384A3848A5E4F55DACFA64F7FE081366330D16589991C52A1BB782364AE969E8A21260518662B00EDB117278170CA2C0D186B173F93879F6F702E03DE768CFEA1E39FF8453C7B3AB46E83FC90FC56D0EC0847DF16A4BF1ECBFE29D94CCBD49DABDCC5FB81B62A2CDE7D2DA3E67042944F33A007096DE5C79133C7F4", "C9FCF7D2DCE0A2341FBEAAFA64F6A50A93F3FAE3B55EB70ABF51A4C001E15A8C78DE54E50CCAEFF8C2421079F7333541018D5EB8045C3AE0F0489D13C593EED560CDACDAEA39BB49FE2FD9C956197967830A0886182D98B5051080DE887638F2E3E626B8941A58D2206B46FB410C155B94FD7D15956EAEC9F855B96A8F1C7202EE600C12DBAFC6E3DE5F075B05AFC037847BB521D1D3638135591B6E1A0137CA74E27ADA3FD673684A8A1330DFA46D449F8B63FF90E36881C09FAEDF61672AC32CBBF71F34367E7547C13BF08C4B688A397DD4D00D8B19212F85EF11C0FEA19C890D73DCAE9B532CAB7BB5931B2F648072F35FAA31C6A77FAF3F72F9F57D5AE65BBC7DFF1C2A5A2A2721AD5B50DBDA2CEBA27A3864A6628F24B0D24FC2450890E278C4599C1015C2B4AE61F2DB2A3A85F02882DCB57A7A471B5F8E51DDC284E0C1869D41EF25E260EDC53AF55BE8217FEADE6C74B9C0EAE7C3417156D671577E05A63E03052663F420B70E99DE068971C5CB8D9055864460D6B2C269E4E5D2585BB7A08E28B15851C6E8438EBC1272D517A076C08631A9890F4FB627D05B91ED2164355D7F20B32498E4773FFFD17F3B15E7F2BAF5EBDC98E617A7437BCF94B0EA1B2FD6F98F8BE6D64F769FEA28A5FED9DBF4B3700BFA8C0495772A14254D7AD9525B6ECDC028C43EEEBF91D2B17C9ADDC071CCC83EFC6401A22846500E0CCD3D4E5184A05AECBD92808AD2DA42C57621C66142784692D4F28662A2B37DA4D3CAE332A97D465D3E492ACC964AED603058CB6BA6972C83C2906CFCC813C0603B775E2DE8BC946DAFA510532CEFF2B2FC5E1F25540FA07B577003D67F8A3C63E9BC2B89EC7AEDD8C2E91CA426398BEC4D98FB6233832BCAB8F10E5DE6668F7DF8FE10AC0EA63B7D46837EE4D1D203D54615042203552430DB97C24FE0088334BA154FB2157DD2D12715ABC6D329A819A1A664727F40CC26204949926E78B0BB8947FDA9026813FCF19795F8BFF2F56DB70DB7EA9280A6C504134A1B653D336101A9C166883599477DB557406FAD495BA31B488D9EDEB783759EDA32968AE4B4B96A14C9DA960ECEF511D4102E1EC27E17AF2746DFEA54F42D2133281ECA9F5CA87F8A2DE4C937B5F9526591A583DD3211F78871BBEDDE79206F946B9CEC6EBD0DA4A25AF259E4B3EC2195578C74B7DF87963BF561D7F4C6755D4DB0F288341D5E525B15F2BDA314DA38D2B2C7CD7D64F6DE35EE782A076333941FC3505AEB1FA5783C6C2553D73AFD6AF896A5C2E1C15EDDC408B6D9D7EE2E7E9F706C2A6CDE36A41BFF88960612C46996A9E7D43511302F925351240B5B77A7183C45A1B66C8FCD34EB6EBF5F5FFEAC8441BD1103D2151689BFCF8D4E29B9C39B1BE4972186B099C2C35572DB1BE2A28D751D6857B7E4EF181B786C2A6FFA30A5D6E2E1120E7B1F313302ADD1012E43EC24E5E5B5D03950E009272452ADEB9DB626FF38F335A520B12CD981636BCFB882FC06B440E348512E6ACF980A1ECF360E33DCADFFF5A2B413DD214D5AD1070E88B63FC9765295BBC92C557F3AAAB6AEB293249761F95EE4338243D35AF883AC33832155AC758ED05AA1BFFF0E9FD58E03384704DA5A9237F1AAF52E12C821BB0F54C0820AF8124AE6D0F4BFECDA6500995B2B61ECB0628BFE2A9E6A05DC94A781137522E85A3BEF28B76E49B27BD05C113C9B3A9AB1285BFD926D65BCCD5CC3837490B21527A1E94544C4ACED0352BC84D378625E3655F74B039CD681D98579A190AB2B89104C83F46235757D2D22FEEF59A250B564", "48116D6CCE73D8BD1E1F45D9676B031D9B0E65684FB88A83D791CE8F5278D33EA9D3A6ADF04F29AE93123376D1CEF52F27E875EC0024A888E688EE2A21A4AAD0448103569C8A7CB2FB072E3D0D09115AD8A1C234F7765E77042156AACC4D4A8AC697E41B71F436ABA09C91E9E4F2C5B573CB1D0B291F915BF922FC75E6FC6AE332B42D7E51BA8EFB1CCA66EC849099834E48C7F79BC16C79B0C87A8EAC8F88D30EEE8FC0EEF8C89520E2602A7226BFAC0E8B30A117B718875687F81A6125D09EB3BD2B2F5209C386DEC5AFF7DA0FF5454FF0451F825E5AC55680EC7DEC56E72CAB953E5B822E0A1D95F3F948E95DA7078C850C43AF46B4EFEEAD6AF807CCFEB1B61CFCEFB770D1923B41BB354C81F340CFD851EDFD537C373CB9F29303A988635C5CD37AFA576D6E8A8C2B7C56DE2FD49E5DB970B50E04436B1F8B22A6DCEE3BC27EE1885CEEA23E12541554EB2EFE615A140831DE6C555804432CAC0A73DC2EE5CEC8ED139ABCA4D17B22BCBE60F05F5D7F526ECB29A51ED6ABB4DE4A2865AD1AEA64041EB0F505BE3CB8F351BA21A8D941902BA565039EFEEAFB87DC6DECEC1C091ACE228931A147C491C11169AC87884D5EE9DF128C98A084CC6EA0A50D494FF8E0B902A9EAA4B4F9D3BB2BA1FFD3DCC93C45133B9008E2B188F57A82B5DC01862D35F633CD6CC3FC12BD6F3A20C1EEE1F9018E41027788950DF09C4B482837677B33B15CE24EFE6797291C0DE291AC04F04AF975703BEFD3CB8E59C1496E547285E3F7A29F99C5F210327CB328B8A3094DB7C27CF7FA077791160A2287F44F92BA6F5346E48D4D4AE6C2C7185926526719537AAD530EEB3B0B4CD718C7BA38BDBA21671ECCE0AB4044B797B7D10797EB1BAA024B76D0B82BF25C94655545227B46DB2A038F87301BCBECE0C99A98AA5BCB648DE58B6CD59AC6471462BF5985C595B00A4DDF2948A84203890E2989D8DFC9864392E7E75262DF1CB78C1E2872CFCD22D561F8788F42A0323CDF3EE1588EFF2F7BEDACF5AF710CC7C6F9957D992A7FE39DB696DA414AC36CBDC99AF050023597734D94C2A8FCBF41D6004C21E4F4357C19ED09488797CA012F4BEF8F1743E396236E708D96A7DAAB07FE03D5483319241CB35F66F66D99D981DB4427C4C84A9EA24AEE4F7C4E023E0ED2FEDF59FEB6D8AC0FE87DD42580F7B0CC6339752230A69BE83AE13FC12AD4719D45CAEAC6E8695F6F403A0713ED37DC120B80DE82F7AC4991B4B9DADB31A304E16D03251CA140659CBF99E891DCBB764293A967DE1E96848B8F225D2F9D28EC2F428AFEBFB57AB79B126E6FC3D66102E3813347D7CDA5499F6AA5BA6AB5EA6F3A82D730EDF3FF74B9BC0F954BED21E77146A5591941962C49F6B2BEBD060A9C82D8FC780FB3AED527D40CC426988F042841250B4A85A3F3501FA3436103313C3C4CDEA772B6C840DB866B9730798B69D6AE12D24E4DDF31FA9B4C8DECF6CBCEA2E8A0F9CC67CCDCB64523725972D81ED2E6562283DE99297458452B94467B83F3111CBFF61006814CCB6550D19A1EC026996695D46C31BFA9BD371CCDF1B512C61CE7BDFBE419B477DAB1E7E1D012DA4BDB05F4C4CD39511D5071C0982F68D9C6F558D22940D541A3C67003D05306FFC070C2131832F737872114566ADF3074F7F6274AEF9B894D0AAD5ED60998A0363B92D841F4A441C39965FC1479E93C99B083CDE6CD6CB9E26D49E16B969A357E28A61B444AB0FA665B853FC89B64E02BB02C5273CC948B00041701459408C95E4BE49EDC7CB605BD2DF31C3C8BB2AA9FC780", "840BCC55474C2F66B7E16C6F527695D367F70F570B13C1ACB546D8439A1AE06F362C224FBD86441D82430A345B8458EB666BC93739E3D679754117C95100E8F00879B891C9E03788543C415AA964C3F861916BD7C141777A93B374943CC4CEDF928AEA3EB72F412DD8256227D7D7244E876955B13FB2EAD1C3980AF6F8F36B3E71FE3B189F8DC22C55E3720DA11C6AC4328DCF670CF948123FC7280D6891EEB356C195D2A79326299A684F5D68DC0ACF00B780CDCEFCD7CBE4140FB5B6DF896883D3C6FFC42BAA41E6A75713F8861C18A833C688C2BF6EED7F0CE66242B8196C7C254F9D48FD56AE5ADA9105A5C4AF28D0042E059A90979C6439BF6D498991CF64C68080B9B5392CC9FCA4397647A9AAC42C3810FA33BCF31C89A641D1078A0822D93EB773F418B9B3B20D5FEEE1067766AC561525F88F8F097BED0CBFF5BC498CDFC9A5B9D20F4D4A03CA190563CE543B2EAFD8DC6E4A5885DEA120DA7D157D00EB1329E500D41C7E6BD603E95BFAE227A9B613A71C7BEFC8449B668C59147E1DD5411CBD967CBBD46A9DDD76C547506A54A8245532FF9AA5312607F1AB99F4F9BCF85D93B58D76C5583856595AF5CA1AAC07C945400B35885071802620855E18E0A3B1EE92BB95241EFCAD82B3435BBB8916C4866471BD5715882F6BE508C7648A59B2AA91A69F60C78482197C04B31759054FFDAA254A143021E37874DE407690B9ECF8DB99CC16B004116F51DC7853370BD3538E14A0F02E7BF74D66FF898AEE93BF0697EB6E8E62B95C6C525A03E1A89CC2F56BAC591FA81BF6A1B3B9F1259F13AB45F2E9B0D93DA7B4984A9C71272CA261CC4EE4A44FBA4CD03C75D216672C18A60183A52B28796B356EC498F4926D833D94007E92EC190E9713354C7506BEA6B7B5DB2BE659E2A5BA92D00C01611347F67971478F2C71648E33F99EF201367CA3AC8814DE0F83B0BAFF34A192349C5DE87453167820C0EB0AC8349ECA683111776980FEBDC993314278B37B289B528DB319CF59B09B83342C71FD5E9F13EDF4F18783FF328BC67A03F1F62FD1A4631AFD76363DB1A79CD1EA95FD43934955AE211E00EF5AFC114BE00EAE2A7AB63042992E086810E61AEE3CE5CB0FE75C04969485899D552AD4B006D543BEB93C1E8578168C66667D62CBCB56F98DFBA248EECD891F9936382087F2AAD6F83FFE25E77F8BAB9C62675D4024E9BDCA5581126BD1ED6035994029BB54615E593D4CA81B31A5AE8CBEF8E1A81C32698FB7B4A339A7E4E575460F79C4F4C5F57F9E8DB459177067869E03E2E1681004EBBF62B4F60A9EFFE47921AD22C7236F25438AF46885E120825509D1E28652361EAC64AF1806317416E5550A39AA8DAE2C6B970D44F4F38D571F67E304AA57BA435C4E06CC97C848422216BA778B2736C30200527960A66D63280AF7DC691F9D0540AA47F0D26416B46A6D53B0B93F1B7C3D4DA8BF8AD2FE410ADDE00B0372E9E830C09B206A08D968AF2F716DD04D220E619FDE28FE70286E7EB9C2068F7A37413BD9E65F1B59C331D45AE914731A564D33875A0939A2185348C197CD14DAC59C5E2BEF09876353FB16D849EE67A774B05C51AA2480F18DE40051654DD2C7B9E3B753FEE5696B10BE40BFFE89487DA1E8B1C2000D53B2A98B4DE6C9DAF07F0B4DB72834361E520E45F5E958FE0760F229C16CCFE0BDBF07E186B28AA69231DDA8378DD6338A94D23541B9D8B63B85962C6304E1ACE2B56A3E433F7E9B2A88FBAD5FC71703231D38DFA8C378E15B6503A3B9959E1759EECCBFF14AA09E6BB8F2CC", "152004D3334E877FE21F773408369872718CDEE15BD489D97F606779A9A38398524E6560260980FABCF179ED91D699D52592AFB3269FFB8DED36AFE7DC79DB773DBA560E3ADF8E12FB8A08EB56BFC4692BEA05AA288012B580E43BE085CE583E9C9DC18A9D32567EA950D8165A2F8A443E7AB5E79F687690A8D8D92FBF877C5B84D26E6FCB3671073BD808A7E908130A845C95A2F5E360645611B4B55B03169CC1F50AE2FFFAAF50FED8CB782BF3C67775B613CF82A2D102199E49A329496C0FA24AAF6370A3636EAFEB992C663C308AD181DC308D81FFD713505916300732FB1F8DCE238CC4104D26C588F28FE7EE4F2B8C2024357D52C7AA29D339249086CB2202DC1C847210EAEBD3F06A39642711B4608638564B0DD2BFDF38CD79CC1CFCE1226CA835E6EE19E4089A6F18E7ECC3597CAD3FFFE13A5F77A58C2B079DA25B928396FFAEE81FBD9C6243CE0EB0872A187E6CF99F16B1511672821D11EF88884964BAC6686C2A7732035493FB9765B7A51E845C1C79FABD99438FD84C09642FBC7CF1740DEB012AD050F5E8FF03E859E85C51D2E87AC41185C67C33820EFFCF2D79D384B11B44A806ABB8247AF36E3972222C805EB9854D9FCCDC7E58A101A5239E60CF4836C38A6ADE67686E6487547933859D46D046BFC15AE95B8D0A42A57C401EBE78ABF495EB390B8922C97270C790C2FAB9849ADE48EA8F4F7C6996F6DB661500199BCFE1EAFA1ECCFAB1F674E0BEB1D03319E73126D7191A64A80FCBBB06B1CFB718275BDDB571E8F53FAF81DBBC0522263FCDFB537B3BE9078F2AD449423152BB9DCCEEE97003D1988540FAE39CAB62593A9EC909489415EEF4229358229BDDD45CC35EBDBA088C4BA097BB0E28814BF5048F4F64E6A587B0BDAAA8A1B3E3E69D3D7B6782FC42474773C61DE12B4C6F183F9E625E337EFDC97A79A5D2C0C939FA668F440688F7A3E0E28A33D36D331069294DBA8BF768010AD93A224E28964A780304F59B7994D972832728249934B5347580C16BCDBE9F84EB34EA7F7645635437B0F5422E3DA99EC2D53B22B1A55BC783CE86CC6B1BE7B11F837CF2BD09A514B12ED7CF0AFC2F70F1D6D08288524263B1129135D664A48B0596C4E880E4E01BA3889014C07ED1B7F172AB4F4A69FC8C04F0ACE8AD1329A4FB594E9EA30EFEF31BBE418CB5515CFF8A375CBE58515B32E799E8449101093A053EC99F9CF78122FA2D36DDFBD258EC81D7B4D18BF882663CBF24D2A35A93C00AE8EA81A3B0E8040C1E259515156D67DC76602924BA51507C4994221A3B1CAD674BECB11574212EBCCFDCAF6AFEE288BCE11B7FFF1D7191AB329B04A237F75B204634676932FB0842E2AB888E7D5A4A6B7F77EA04ABF4B9A567E5DA5267F35CBBC928B5F607E9C08359F0031A934152D77E65C937181C92EF4CF17F6EA45171DEBAB545755795097766318CB132ACD96CDD65777F41BA127CF251A4E9B3348927757A42AD8FA83F6CE7342D935CB54984E45886D888627F0228E50082B85E8E9DDBECAAF049C25C4D7B2EA919716271500D81EDF574C5AE91E5F0FAD7585EF69C5051473AF913F887B31BD730F67B4A44081BBD567B57C061AF465237374E0BF4753F3C6CA28D45220CCA3EE6F07F93A29982EB5AAD70763ACBFBE55015D1C52B64954D4855ABCC319DDCAEE75CDFE3B3C31C329A77C76131F18F3C3904B3EA4E691C03C32CA5E7A1F9460760231473115B5AB7E159013C96AE4885566065883CA3B9661C6773B77819BC68755D529FCE05E80E08A5097EB37BDDC1AF9BDFCD0A04", "0D4897E7FB496EF0C6D62C034088E7E9B8DB52F232CDC9EA88429655ABE366C54CD534DC9038F45AC0D0362E31086CA2FC0FCAC3FE71B2D4EEE548F69CE4433601CD3431D01BA6F0C23D612807EB8E50BFCA736D917F67DD72631BEE8728006D2AE69D1A1BAEA8DE50852CEBF7491FFF989C37A54EAE31652230A0D3E4397B051222C4A22BF481BC52E2012188C7576A7ACE81185C85A2E841119B47B5429DF277A976F15D5652156445905EC797729A6647E1B593484ACF2724E81786A0C062DE87759E82202A561FD077D64FDD3226A1E290F660722040EC7AD4383431E195412DBAD0AE620BFE808D65D3937AC9C5AEFD6FA106C88A6B192D4FEC1FB1A06907B0796F724AAC6A5EFEBF50C168F990BDBD6B1D23E098858C07E8D2144532AFE040E45B25AD9AF7D92F9DCCBFF3DF25DF574A4B65A219289407EB63FF7152BF1E651C6F124BE32545B50E8E2CE37F1042A68A62AB70D9DB540D2B39293E008EBAA632B85EF1052FDA17A07B9B1D89A76FF7E7EDEB7090496855B29A9174780D504F7228F8B7436F4676F51975BCA614554FE6B3F946F5E0D1016371F9CEED4521477CE8E9CD0668643686D8482CEC0BB4D6A9E8678B1835F0952E2700FE0C85A8683DA91638D81A85231CA4C7B55C0C0DA57DE5E6553F22290CE7EE72867285D096C0FC16A60A664C6BAB048939FF9DA476024235DDDBF7F264C90ED44E953C4AC0FB50362FB2CB4C4FC2097F07B71772000D2C2A5DBDF0B6FB83B1BBD70CE9D6A8BF1F924AAC4DAEB6AADD891A8974C9BF46FC6038F6B77D6AC0D6107AE6AF5B93B186253AFFFD8CD21835097C4B764F3E0B2447776549D5045E4346FCD3B7880F1B3BA794ADD6B7F291D3534DF034F822D0A41DB2AF9F1E51F212D5631D2525B1804A75B50D8372B6A1C200B81AC1122AA3C13D7463C383FD123DF4029BDAF6C227B3C4B54F75C5315FE139F6A0A3E2E819D3062B3309E2630EE4A64D1E3DBF23B489B96E198BA98D8D3347217A5FDE4DE453012E8564BAEFBE3939E59C0A725A75CEDE373501F9103011FE0EAA40C583AC73C92F47BD528600C42E0029FB3A4F03A3CCE87E5AAF4FCCB47EA8BC62E0F542DBD455F7163A2A8803583896E3C803C0D01846EBD8BB1B3FD396A7C7BC3F72A9D0503C44FE30E5E77E0FC8B373EE931CBF4A9867406BC91972B946B9ADE62415CE2FFC71C2E64DEB7E6205D635977C778BC40C11E36BFC22A17FE641346C74DADD255D329AEFC2CE5B4AC5B195FE2DB453F1B41B3334D5C480BBF10FDE88C722091ABC85667F2B52A3505A142E4D1546CC41E154B345E8456B9CD0E241D70EB4876A70623DFF3FF43A8D66EF60488A7860485A8E518AF4A7056CD02C72E1BAEA3944781642A36932ABFAEE3B88B57B213F9B358CC3F05154DF8D2132A74DF27556DB6C5E45256481C09D18DA604CB91E6AB7AA29C0C1009A406F1B3AAE268564E04B07E4E9128FF02513AB8A8665BFE1E352F46DBDE7870EE027A6E84560014659888EB6AACF993D7C9F9FBC2974CAE290059802F5D224520CE445C404A2ECC57CE6FD5961EB20DC12D436F0B93614CFC844B476D449416F54459BAD09F886CE3C1C307A91E62FC736051E6F6F8F5AD3372398458299EFDC1809997FAAAFDE14B15566B381714E3522F629A5ED9DDA1EF4B9D4498DD55F8B0A48ABB2F9B1FCBD991B5465108147BB6125FFEA6B6D479DB6A9983A51C041375B39FE6546AB5B5E089DD7E228D5AB17127A3A1E3AE82A31E952E660F72A1F399ADEB4E1E11C390BB8652F2F7B6D05E9F4B6FC90", "AF6D254288BF564C4663014C7A70EB3739D28F1F17B8627FDF714E85B48EEFEB1FD456546328BF2E2EED112992AF78911A89E1248AEBF1F79906EA91D41CAFC6E541D2BB40A7050C5AE4B66547C9DDA88590AB8B0A4B01B5F8216447A310D1E52C155F92659835F1086D381F1F2995138856DEC6FF59380FD6C1B6EEA6E4061930CEF7217701DDFE17742721794DE824377392AF3D949ED9B0455C58F7395DE0FDA5485E310E8457A4270D603BA5AD1854811530FB7178525F4BB1E5DFF89F6FFE0C83C3E47E244D8F3F8AAD8374E3FDF996060E18D2A5397192823681CE6DA561816C0EEC0C0600732A37731ED13948439E8961BE44D32A3097C1AA5E19876ACD21DF812265181774580A8C04ED4FD1DE2FD5A1DFF9DCDF4D97C448BF9A4DACC22D4A55F588C87CCF5C9E178A8FFA032A454908BBE41E13D829FA98C066A7736577CDEFC6D5441656D0AC95C872861BCE0A28C2ED6E9420D4D167F37F96087F9E761F38B882CD41521DE8E2C40564C0E001EDBC04982669B82F05CD0411A6BADDCB704B545FCB19A286BFFAF0FB6DC889BCE75C5763BE1D70DCAD1D39F395A75E637E0663F3D5A855F53F700AF5F82124E72CC2A4E41A4B43FCBA41E55298A1B799368BD5F9B507FB11E8BD2D80FE517A5FA935006064278CDDC5EED43B7C2D309BECCCBB2C0AE3B8D09509315933E2DF91304B1DD3777EC9FA2415F7D18A96CD08095A30F7EB9BC12F8739E409EE7DC062703CB3EA591531F47F5D1C0431E9F1883C3BA249492EE619719C8B3BDFC1DECF7E3C4CE4CE032FB2882247D1D54566E3819464837C248D35647D273A87F8BE667760D26A7EA1FFA682A931A4D35F7407FBBBAD725BEA62449623AADE97A2789F2F8642F1CE12A06C93861DE9D27C5ACE0E4ECE40B58664176113ED6437B8AC8B4059653EA30F71A023544BFFA685343E278129DA12EEAADBDD5AB0E2CCA0B840E87AF0D0E859449893276B9B5894EB0C57C3222E01E7538FF7E91807C10CDB465A12CCD358151D96856C6143C9F8D25AF8E8086C83D4CAE37BD660D15C0C0707691E8366C4AFE6DC0AE1BFECEF9BEF46CFEA3356A3155E027D1C921ECB852BA4B8FE8E0C8C00829CEE4049A21A1C3424D2BE532B735232D12B81C3C9E5B02294701E6BCBC8607F2AFCFB2DD9B1142B4D261418C1B239B0B22451D7D3AC64636B0C7F96B41D7E775C1CFA2E277C957F0D59BD1FB02226A462533850E99E917E310A684E81634F3876D6AB32CB5B8FAE9E82224BD2A17A7C72CDACDC6B3438A083A6B0DB9FD91E05BF4C83A36916EF35C5D4871E94B1671493FDBC497BFA30328DD24D340A07A960828A855FA95EE33FE4FCD15B14B7929D338611239AC34CFDA6503E4DD9570EC339CFDC8D1C3D3536F5176901D012BABB133EBB4560484344E044F86A77C21183C82BB2B6632CF69F5A661C98EFDE5529F8FB965DCC6AF185CA8CDB4D01C5E8902966B063B8D1724AD18DAE495AD47416B61321DEEBF782EF7A6ADE3CD0D5B9ECA84DB5D50C2E5C7D8B8DB9E0F398376CDE3D7E8DC46F0D77D38D6CF6055D6D074CBA92A27C6F9018CAE87C97F1B3ACCEE495ED9DCE46DF4FA5255DB2C7F2669F5201058E90F7567672162E17D5B6D028C6AD23F2AEBA32061E6B33EA86915FAFA2344CC58162C032CE837D5C32F5993013314BD261DE6EBB35B94B8F690C5624A8CF5509BF50D3AF5FDAD77311B6D6F9398213AC1A267CAA0F52A262DA4F85F5ADC79947D2C5128B8E0B0C41B9FDEEF6AEC228EF97762CDBDB78273C16C39E446576D54A4FD0", "4B7593A9ED7897766CACD515D3A55959FF99C1CE28A745DEC1D8F2565F24F4A1E14E9083AFF510F106D982A2911197338499CBE38CDF3D99463B13EE26B47D26A62CE45EAAA04A3E70850D5F23470FB94C42D3235D5FF9E6C37CEE8C93591CB69E0735B03EB262CE6BE6F0144DFD66BC089B36D66287EA588C78E39D9B6907EFE85C1211612952CF13C369C2AB3D921E4630ACC75F2AE99014776B26CD1F296F736A4616FF662D5C6E18C4EDA6D1791A71BE969556FF11E1192D3941F8020D2C731403ACD856A3AEE6ED7F23023BAD7BF138C702B6449E2601042D7990ADB988B650AE202F3433CF26EE132A7CB13650E86A6DBA6F7FA53B2354DEBF1268734D7120F721E18FEED2F93C268A2D3EA012F3D7F68DB0B18A5CDEBE13CE4A05683947DD985D4AED1E192FBD2719755846C9B758FC8FF28B9999D07E634645064C2C9DB4CFE50BB8A030B60F43AFBD588EC17102F614D3029FA811457568D7726C651C062391A2EC2843A95A3A48AF58A898BB65FB852F73E9A82C6AA9D406D80C072A3B426D8EBF261BF7AE0E9DC0C6DE9F4BEE880D775783F910AF19DFD8EC2656213FB9B74EEBD8E1BF860E4650D446683B7794086ECE1E2AA723024C219E3DCB371624C6D721BB60C797003D89096BA0F489D1CA60C57AD907BFC8E97F4E057B6D709414FB0A302D3057FB4635F70BB6A32CFD842DCD8D9C9D45FE082B3746951A862EA870D903382C138425DF936A505120D93FABB8F523C1D3946B85425FB338CA7DC4B2FB6512F0C8A67FA47A416284EAA943E1A9C0607A02D27F55F1DF2EB6090F94B64076FC2D3D3B3694DA5C7EB2A180DEA14AEC21156E1110DF75616685FD53C72252FB87E7D19EF5AE8D9E129D0984A06520C789DE22CBF6E2271801691E0C3CC672F6865A41559910D0279AB9E0112E66B2A1C2B22B6679CF70E3FF870084562ADB36F532E64D44C7264E44D488076F7714A1089526118D4655FFE16B02D803AC2601493CEC3AB27878CE95ED3F321913217DE12B8E5E8FB75A85707EAF6F1FF08CC86B91632ABC7CDC42D1C5D0F2F49D5F412B4AD0C5C46CFA74643C9333C5F3558DC3ABDBCBE23A3573146D648D540116136F3F29E42FF07E26C1504E47FCAD1FDAE63357E421E46440424921404ED02FD4BFA2FDE68CBE6CE49E4E120C141013DF5C0BDF776EE36FD5899C0FC057DAE2C9DAEF6D37BF8E85258BB36B54ED8374BDDD49B6AC2C8BF3105A194F76DD512336EAAFC7BD2054AF6A9606517DE03AF445CCA5FA65307D2E116E42A3676EB6033AA17D76A87F52D144CE25E3A8DAFD3E044289C4600BFAA9CCD963D14A19C5911C3DE649439440D11A21154EF25649F7DA295E0FDAE8C48351BC005C011A10D201B3062492A7CC933AB5D854B26232B7091CD0B7AA3135F28E3AE75E267C223C5E03B60FAC1BF78123C5AF76719191CB6BA277A5BE81E64117AB344D92837B6D600F36702F4BB4532C5EB1C9BAD8A111C540F52A225DACFAB37641898B1FF770A523F8BC8BB0DADB59235DE055810396F1993539A9CAAB622389607DCDFDD51FB67CBE89F0F868DB4D27A7A38542A076D158919DCB621BD325F23AA0DF694C444206FD42192FE7F9A05743CD54D8F111676AC35A3230E372A5A6D7E213C4584EEA1A4993067FD28DF6690BE9D3E94AC06BCF89BF1AA47496F8F6A18524187BE80D59A4E80193CFD757B706AD483A916AFBE2A56E0A69F3B1BBF9F4B239D05C6C556A8D22B00E9BB1FDAA620D949ECDE86EAA299BE93A7884C99FA782F2BB3BEEE86046489B3B8A5930", "71BB1B2E833793D854F8A9A81E6A6947057B9571F2BA99380DDB25D878D6B48F09ED7DBFACE92B6B82F413E038128F6128AF3BC467E9A4DF2861DAAC674B6D948A10F28F7D43657FEE26577AF438A2F4422186930702EBC6C9173E661D59CE7594DF95B861F9D12EB060FCD3BA43159C9A1BDC1EF13E04893E411267331588CF4831978469FF569C1A738C54001BB5CF4FABD289075A165EDE0A58F6CF6D215D306A7840CBECD0E87E3AD186F7A67A967373551E13D2956E5C578A7F5BD50E2D570F9B914848D46A640913EBED2E2ABFB86916BC34EEB3E8A671AD771F6D3780B6FEC143E26F53B02977255314BAE9A2CD9E5BA2B49C73226FDC724A859F8BAD3A9FACA1B0E5F2DFE7E1E45DB6D4BE2B76535A817F94594A4541C01BB62AA83A690B6D84FC13B632972C61D940F2C9D32837413AF8E42045ECA3072CD044B2183400CE63C418879D13FD281A8D0835256DDD2BC3C9750C1D44CF1037FD7264B7716398FCF1D31CFFD0B7C52C6370E4CE6FC163B40436490A757465B20B8890C3B5C0AFB971ABFD01796569E3BC73C13D1E4B1FBC1CDCE59D21B6B110272E5770C589603FE67779A49AD0EC66910A2BF4D8C8ECC18A32EF92F502126A5DC3DE618233B9914A9608B2F17E5161115D9A3BEF1D5701A9D465A1437DE24371C9179800CB5728A7F3D734A2A706BC64D356BDF591389970B6CC139AC510A98E3C75F20120450CE45373AAEA6A279BBD17221BCD32ECF82C11B4C1CEE0A44792CF56978D3D2399F7ECDE9F8D9217F8BA22770E210D0F1AA852178B872E296762873765A73DEC08873C04ED69C995C5751B97DEC23B94CA674FE3F66211317B074D8203EC530A20B6E6DD21AB55895BEE1CBD0876183D652F4A0D2EFC95749F8F192F860BEA534598FD709B396C209CEAE4D9190980733E7E98C8ABE52A53C68D86053B56BA6FCAB5C827292D729CB8BFD1FC8CAFCDE15E4527B604018F28AA16C1E913F55461AF87C9A7BE1A742002E52B3A14EC30B259DDE7BB892CEAF77D25B7670B339B334878F697C00CE6740117AE7C67DF3F8A7BEAC89D4872682C47F368F835AFD7ECF0D8471AD01468B7BBB0A974EC469A8F79ECF8D379DC13685D2A8F6F19CE102C3DE34B11422AFB42E894C8D00F606296DABA7123FCE039ED27324D60E853BA94DC638454088281335D437A954333FF1A8D08E2A4D25CB3BA0D08BF6625E25EAD3C1EBFA2666AA49550578D3763ECDCE81303B53F18B00C8900AF4E0532C5ECBC94513DD9F50BE511CFE4D3DDBB3F112AE148DB062B2EADDB901CDA6AB6BF59D37F356AB34AF97D3DAAAA417642E87C9B95AA546C682ED641214605F82A4F486C9C72576106F76D7152615EC8E77187D4485071CFC6B0AE44880442790696E057A3AE20C860691353B3F6BEC5F1C2DA07563B423BC01E0334099571158A432441256D7C409B7B6EF26442075ED17E2BE37F8EBC049CFBE0FA89CDA7A58DD32C417B34E899FBE86E2FAB8D30846DA17144A6A66AAE1C24FCFABDA5B573FD2D6337226B5E49BB031B4D2B455B6DB871076F67AC03C3A73CEC01BD0B1EC42ABD177127E62A66FE8E475B982B4490F0877466EEFC7317A703C5C07937340ED4B53E5DE5325197FA31B8C8E05AA2222064EE5D7C06D4A1EB53151F75C94A2E259688CA0716548465C5C255D81FF10BACC2C13098ED8CF7F5B15193EE14FB5D258E95EDCC93E9796FA823892C705A5771D561787C12592D269D657FBB71F021F365B7453D50C35F748FB2B7F36DF28769B81EF12A26A237FB0239C173559540", "53DA0E7B84741AA9E225483630169ACBCC03EB8CDA28B7BDA685C756D66B14488A2D0AEF7E6CB2D80F2726327257B7284B93EA1B56AB80FAE668C04FA49FCD658D896A997685E1EDB4DDF85456B37F32FC8CDE50882EF0F09BE4ED4AB9A425806A49E8347A42A50B38FA8D1DA2FD2C9438618B6701DEE159060C186D50170F24F38E07B185E3272EAEA4A0A7CA41A69C69E9D95E271287D3AB8284146A58440EA131A7F47D73CB2BCF40FE3A58E1B998C2E5EF9CEEC8EA2F8467BB7757C03A99FC8F014EE933A7080CD46625A2A7A251B7A37E4208956A8C9BD35E6F8674BC06FCAA5DD04A2558C9665C7985014D3AD95ED256FAFA358962EF5BB26AE2FCE899392DF858F99303E2417BCA7672E991FEB891F5DFCA2D461148367C5C0DE1460BF557194533DAF01A5E8E0E43D57B825AF7EEFF163DAA23B9F95C063A26B3D213459D885AA96023715CD21DFA2A2250F7610B78A77123443BD06EFB7DC85D1F16D0019D2937C3DEC4DE6389485ABB21642B6E41ADD43CE96F228C08DF6288A647EC2FE96032B6DCD651FF950B72964EE08FC2030272E3F601DB7F7E770E655389CA6CFA2F9B87CE76FB0E0CDCA4EEE5E80FC756BE46CC09F84BDB34ADA2AFC024ABDE0066ED939F8EBC236CB3F577C1BFD741F9D101A038EC86AB0A85462BAFB2E484D6722499A6310FA449D979030B2A21206D44225800BE2228FA00AE6D92C8DA652E1B003BD2734D30557B735CC2A591E090394DB791245C22B4D29E706476593B6F90C694C5B87BBB0FA2C479E292A768A9687A713336A21D1199186F852C41F586E9BBC64004D8BB6814BFE739834C99923177AAF87B926D56A7AFC0879C027332A60951C84E9314380A5A78E1196D094F15D856AA36742825D2B397156BCAD8ABE7291FB41DB4365AAE49CA82CA066D3B4366D3122ABBC00F05559DAFEBA9F98361DDAEF068D60B18265E7184C4D6BC9C3619CFF5C758090FF6398CCCEB78176D2A8A2A4B9854C4ACF5CB614DC1CA0E15E7E85442241D48FD3D6E851A5D3947FA769560928948FA26FA16EFBD2159994BD92B3D6B0C62818C91D4724413A7F40B2A2D67F4FC97B5DF6A7E3CEC03158E201D6643F402D3DD6995A42900D46C2881198CAD28A27489F5116ECEC3E38D999B2020E0C381DB3B8230811270D75950D9BB61548802DBBCB68ED8C7BCCB50D606BE400BECF873498621E66ABD2AA179B3E90E055C3719CE2FE047F815B95B065BA086B467AF4124E276F8CEAD000BCA5499D36217B250009A7B43E81CB3F8B1A3238EE436FE61F2F942796DBCBE570BB4FC783B35C3CA31BDD432B33AD75B08107253E8F910EFE0D0B5453A8A055D884892278688B3ECA612452B590AF38DBDD9A7070C5610E7A3CA6C91D24438E7F45E7A2A330F164AEDFFF1789D5E875EEF121298DB79C77278ABFEC3FE3DF843C46F40E847272EB2669BABA808C38E31F13516D5066AF4DFCDE6EDB2FF0B0A4CE9FA9B4101F6F144B02384868617CD39175852E065473D6F566CD18D7403FFD24DD33ADDB52C7CC22167E49102C46DC369A92CE2D2FCB81B4D1F14B7CD2F80A65D8FBD20FDAA23219873ACB8CF934E68D6F8FED6B41193CFAB1F44CE4BFC7C67DE1E8804B47DFD7E8AE281E19846AEB6FF94AE7E7CF6FFAB46242843811E6C5BDB78157C76DF4F92FD3653D7FA5978316EB055059C6A2B6306C957418860A88F63355E76D96F4727128D9B3EB98501AF5B093F2C314F98EA2CDB89468E1BD51138CBF25E8B911C26B97DCCA47F1A1D6C1CD415A5079A756B8A8715DD3164", }; // Galileo E5a-Q primary codes const std::string Galileo_E5a_Q_PRIMARY_CODE[Galileo_E5a_NUMBER_OF_CODES] = { "515537AD5E5F4216C16046FB0AC50DCDBE5CEE7E3CBB51B6ABB4E87A407B90E0EFD49DE1DE5ED29184E7FF0DC31F75FBB94F46FF6586B36C7771E5A68D060A965ACCF8D640C6B6E4530FDF19DD2491BCAB69ACBCFD3EC7281CCC31253A471B652E21C4CB0B43613EC542266460F0A6199B436BEFD95572DEBEE920A915FD854D17FFD0DF8C74E23B21B28493A0927709709B07C65878C43B69DC501E9D0AA21061ECF173876CAE708C764435832D9D6FCFE62DDF2543016D6325A56D9BF1007886E62E8A832BC32063CB0717D723C5E8C5F0C0EB3960577D364C93060B64EE04A539B7601CC3113E0AEC53CF21AFAD0154DC5CCECF038474E0F4004A65B1EE2801F81968B88C3D35E87CBB126C02D770CC3D32A552883D351DEF47847391484F80646728221F993921BFC14126EE3D9527DE607152724C6D2DD305D3FEA0AAAEDF6509A2FE3248494A54FDA8E3CE7E6BBCE234E4686BA5A19724BA2CB78CFE71A6AF45532EFB286C5BB47BC3C1EEF4E4A8C757786AE974F30A86CD60EBCBFDF5502AA8F643819CBA4301E731ADBA1345B61C0B444FE7B817EA86F8DD749C451AE7D24A68D914F26C918238953E8AE61CC8553213DD6856C7863F9F6BAB1B4C84B225911E7B92BFFC12AC211B2B2CD905877FE976E07057963D47C437FE47D89648053F81AC39E8FD2F3A726866F6693E503CB6F0C3F0AA9B3EE2EA3BCDB16D726E1C6D8B073AA15F64EB68D53B1F8CDAC19C7AC33361226E81F1C793BF188755A3FE1BAC38B91ABBD4F077F7A28983EAFADC346CB941D49492625893453B364D07FE06FE42B160C16FE0462AB6366FFDEE54DC9CE4DCCA21E4E4AE5E92C872D1E4EC6FF6D3063C98A5AA5EE72481A0BDF15152E2A5425AB722101474D0E1EC8401273EA1BE1DAF7403190A94305BD1C7DFBE1F35F65D5CB97E82B7A297047507FFA0012FB73360FB8719C174E78A989A96E60A9184B3F3A8188DE100AB361921D38E8142859C8F0F7D441DB1B2E9687BBD1086643987C83DEE0BE8CED4C83BCC82B62B45311CE4F13ABC55BF5EB1ECDF15F5A07F8B2C42F07FACE0E299E87727E2D534FEBF7B9C3894CC3E2E4127A294B9FA2A671273B174DBB81D247CD2846116500A072DC3962C65FFECD0C0B46DC2AF52882058259C26FDE50BEB319AEECFA1FABA34C069680B9EBAA9D96EEBD7EA30E748213E1283396A2AFC63527624641D4E1F1022A973B1898BD4CEF4D712B49371A51D60E08F42ED1EA90AC49EEFBCC53E7F9E899DD1AA4056F11462DF1A4C81620A73C831CEB897430A22252B901EC3D6F3DF58EF26422F796EA31AA4E0E9CE5B4A9C312A22305E298FEB3B3628283D405EDF726937327D90C542434BA3B60684584A9DB244839D2ACBCD7EF147A541E35687B5B8F5F07764973112D20D1ED75DC31F6A938542B42EFAAEE0F11B0583AA4925C3132356200E8D6BDB3127B975F4115A7A8A1C471836E3C5450B501A24D4A1308BB319AA827222B550F253F64B6F7D2322C6A2D3012FEC265A66A60102A3340CBDAB900DFDB36693D41DAD8DDB8875F8C3BE76AD5355DD81D67AAEBFFFE9458E522BE0312E60F63DD92F25C0D7CF82F223AEC0BD7456752CBD5151FEB5368F8857EAFAA90E8C7499B75D46EC4CA20BA8A24C90C016B5BD2CD7864828C6140E98EDB9509AD1194F56D49675D077DE92CD481B469E3A37F7DF0D5392DA4CE4CB282530F1C73482CC0926B877B00B0CE49FAD21E4C26194C7E950E0078F3854EF88755E08E9380165C584A3DBF1ECEF6A31B224FC321326B93797BFE8", "D67539AFB80711A0BA3CD67D963BAD346BA813D35A2EEA104D36AAAB863C656A07AD61BA60598C07744D32ED01EFCE928346C09EAAC2D392E5655F0FEBC486815AE30A38014DD8520F73CCBB71D9D42636328A50998A2A3BED3E4B34D0DCD65B94807064E2EF0C420898DB96E3B99EA9A0AD91C63857DEAEDDA5E644E62212B23D72FEDBBAA78C6581C677B10689C4AF387626DAC55F4EBE1893D52D28D20EA365702448A64A0C553ED337C3BB911DDAE2A91727299D8064BEC880183064574B5E3631E70A0590210143F4079C572BD5E2F7634C2D53B1FB1DABE79C484799E7075EFF98F033F5B2EC66C373825335D883911CEC9CFBBE2E38129B7E03D9646A7E513D5069043BC62AF4C524F12D8F98D8C9DAC5D8642DFFF48CF6737AFBBCBE965925F55F03BBD5123C9DB47AAC780301DE91FBED3C01D03E6464C2C2915BFA187A4BD93E20C24574FB91F0358CBE0921DCC8D6B7E9976763A1D2158511861EFF5D1C0B71F608E7ADE91D9DCFF5640B55BC9BD1BB322C879C7EB5C06EB2601D06241D09CFB1BC1695DFA55FA044E0E2E4BC86EFBF6A55740C4640512DDD6CA069940BC0FE1738FD376C68BA8AF7CCBA7D89F7966B29355538836372EF418D149EBF3AC104919D91BCA2F13E79A7CF7684A4DC0AC556A2843E041A71F97C94B859FE009659F593EFFEBAA6F6C1C57A5BF22752613AFB26379C42AC25804AEDAE22D63B230FCB858F496B8EA6F37104D0890525DBDE06AD988BA0287B0938572F14A98EC9E60E973FD693DB1F2AFF671AB03FB12B729D0867938DF6B60EC69790C992C6C33A531FE56D0ECC1465F65E3E57FC9E45F0F65A1061CE6D3190B6C1B8708A8A5A47222369AE889D26499CDE8F0548B8D7071F2D4DF6C0F2418BE449552327981CB0B54F792F29A71E30DE257CE1B3A7553A22275E4C8B9FAC3B8D4E9912BB22B0A899E7337513C7ACBEDA15FAD3D6919FDDD941CA659D78B74FD39E2E2F622691B89CA82FFE602DB2578A20D4665184456F32DF4DD6CBC412EC7C6914CA427CEE02F6D9810AAE1406DD68ED3869BD8E3947A2B3A803E875FF82005D853E3F43A6BF936030744C34C8B71B7722BE0AD3F475E531C9249A42671D5F3A5C77C4C28DE29AE953EBFB572578B17B636F8365FC755C22871E7D53A1F1561C92909305C9FD36AAF79E8844B63370B800B25CC1355211D9919B830A988926829F808DD2C66400279E6AC14F8EECBBE8B6E9ABFA3BDBB38A49535F64F719EF48C5FE6B2738DC6F71AACD70274FD40A29BFCAA594AC3E7D0C3C522E406BA6392444C9F362339E8FF34BE330911DC7EB11A47FF3A62A46CDE961A40CD5B24020909E5B034F45FE96CB156FFE8E2FDBC12A7C12D60D24BFBE596544E4F03AF26F086A5A667496B7DF302E4DCFC568C7ABD665EA7EAD8A7F5A000DAD9F43E68C4D8A14742E050769B3CB270E3856D7E8F4E827046D3E55A52F0E02C883881914DE87AE3C24D93E61A94919B40398D3EABB1B5142431AB919208A9785962D05061EDC951C83C73FBF6AE8DD6FF839E631C9FCF6635FA053DBCF932E359F83FBB3EE310281569741E3A8975FAAD1E573E0EC3207F6DBCDB8CC90DCA1CE517C8DFC1D31AE4841F87A5157792738DAEE7C29240DAE26C6C3E9D8A899D2271B0C374BD2EE846C6625E31B2F8379A96F601323039D281608A01A1844E5D1D20CF1D92C52107CDA71BB3B7EC4DEA958CFD7A79F71868116CD1DD2B2E66BB94D1373B733F324BE489DA51BE72B01A8572880AE1E61650B839D03B0192D290D5B36A9CF93B304", "58B2E58A13D4D5F84F37A389E6B01DFA66DBC6A25338B2884EF08056BF0A9124DA29254AA79CDF1B0944DDED4BC7FE683EF7A3C7A1C359E61E959471E30F9D534F43EEF274AC6535C616ADC7455BFBFF43ABF268F7C995CE020CEC73BDBD04007562F2710498AD1A324F25A6233B2DF2D9A429F1C39943E45F934986D1979D293F90CFBEBE01665C98C0D72D09A382348136980B31F5D4696B85C3F42D5C445996804159CD4C4CE7547C4A3FB718AB62D9E9826D05C44C6BD21D708CABB01F46514F29FBE7352866EDBFABD0ADBB6093E1A519D0E11E27737239A07866752B6D864686AF1E308481C53C635046C0756E8008D3CD26DB970C5D6EF8CB9DE6BC4339EE9F88EA45D11B74A1525E2F1B9F91567A78E403F7ECD47A99E95C098870B928E1B0DAA984CCECA13C6857F350E808BBF66AB4EDFB0F369F6F009268D19DEEB377F7D0C4ED6414EF6D23A0A5F37A25AAD3CD62C2115CB70409049CF0CE6D4DBCC5C96767614C6FAF73E9A76C7550BB970AB3D3ACE0C07FAA9F36F1935DFCD5228427BBEB5FC7A2F951D9210A5BC32ACCA7E78AFD5FD460CE2A79348714E5542BF2D453680B070E85F3244E8A6B4EB6ED49F803E60B8A383C8BE6283B1C4DF79E0C4A23D5DAFCB26DFC5DF1D1520FB6CDA23A05A1513F751EBD0143C2B9F5494BAA74F9F95F189C5767C6F5623559D9F20CC9B9C9ADFE285FA4E1BBDA481A52ABAB36A5393370091A49A59B968CFAE89BEAF33BCA5C2A9BCC1758CEEFC2D0A175C8A5CAD5C7E3FA706C2FEA55F4971A7B8A0C5D1F22A26D7DA9A70603AC34566E4929AE78C8F1926239950EC0A6E1B37D919E24431E53FB08B2F7DCDCA2EF4177BD7D2F81BFC784FBEA0471831CDCBB9E11D60C53D0E062E8BB8D98B8EE5A40960EBE10FA642751B96E1407B38A024DC64D5C2005E71198EF394673A4A0097187D2475CF27B3EAA7955AD9F412A89B36AFB27FDF7FE699B2CC8C03F7FA40549178DF8A3C1A39441EAE869BBC89D583ECB18E310885F33B95B719045CA6955720CA75D5CF0B29E5F1B9E9EAC5EC92980B2D37EF6509CCA6E67544A8116494AC7EB9032E1E8CDB053B5AC0F60DE59BBFB78E3491D50C7ADED95042A8885FE284E90C04FFC0370B92B68379B2E7D52392A42FEB26B2419CC64412BFFC036C01109B9EAEC5FAF485F0D61C37A703EAD02127611F9D25E4EC515CABE21247156F0779CAB57C35581646BB71E87941AB5D06FB3C06C423E9E83E0C07E611C89CB000344AF49498EF5C30305DDC8958F45A45E1218837269DEEDBB0AE51D2AD8B41BE425EB7AB798856911B6F0DC721756A8154B9D1CCD61092D16A3E9E1CD5E1D7C2C45D236C9B21A0ED64AD4C0660FE42FC0B543A34FB545B0D88D42F696D53BF54A1A259486846E81B44C16EF146310AEFB3933BA9F9D4497E74AFE1449D69105B9F295DB24B4563C3FC0166CB70F104B3360BC0998EFEBABC6276F570F7679865036DB59B51AD2F91C0CCD3BCF5C07492765D480494AB5B87E83FD04B75A35F88656D3329AA5FD550DBF493B0CD2C19DEBE4358661C72A71FB17C812F75BEB61302AAAA1F757288C1D8626461F4162A2EC6296B3CCABE21B4F0695F2D2CB02B86035251FC9C5F2FB5BBF28237417DC56471629B3B4C25AFEDC4C9CD108ADAD9DB1330AB680E4998C5B3D99BCE8F08156B630A63EF36A51C813CE22A6B178683EDA389ACF58653582BC2AE8170ADEC4BE03C04CBA603C0E4572A74BD9599A8442E894EB504F7703F2353A8A3525EC5535E750303AC07E08D952755F97AF236014", "3059141DB31B84555DDC1C5F40372C50BEF6E82B433D87603BB7803FDE8FFD74DE06809357F11C1D6ABF02D4DB8EBE1D5ABE7F30C91A451EE3C1AA36735FAB9185C785F05D28BD470D433ED4ADDF36406487CA1710ACAB57EA0DD577A49C841F5E78B70FDE90BC1087E79E27E53A4B131C06BF33843BFEBDC0C2A207510590E52158C0855C40146AFCB75DEEEB872ADC5E77CD1DD6A66EA96CC223B3295C136E2766ECE9F2CB807C68C84FD04E0A5179D58473860962083DA8D68B70DB95C0EB91679CF5E1BA468786725EDFB179A2C5E7C28B396A53D89A98C7B79867E240176A9DF9FB0BECCC22A526B617CB8FC2B05A8DE411C8C5F9BE682459B487B26643FA894F9B3C97282EAE397A03DD15F07FBDF7432DD95D29E6D50CE95860BEC2649E482F40F7B83A13135A7C71D83ABA44A363C864BCD78050AC69A8DC0A9E601859087DBD49AA01A75053792F74D9A8EE726608D1F009D06363F6E5A463BC362178918737C5F3E71EBF130691A2048F07F3F8CDAB70C9D0F7B9A1180046076E1B894AFC620244B30A571DF359C7D60969A9436F05417DB5759B2D3ABDF6A238B5B5DCA8A0E4C27F7078DBB6600FC0105463E745A321884A4F6C5963B188919EC24C460F1B9CB9C063B2CD1FD5F49C06AC2E61EEA55056A6ED08B6C7C750E30EE66508FF243FE1B5C494E8EAEE5467AA0ADEA834523C536855D3BF5ACFFFC0802365B3889C31910A5E63B9457E46B4B7E29189F1BC21E7950BF9FB44BF5D76078D8602FFD986E1A1F1A74C677BD8811FC6992F39384CB3F9B2C91F381DC01D4E79D2E66E6D76796728E0C48F71817ED182759D8B10F7B5D361D7138CAFBECA3234B9F2F4A76FB00DEC05D67FA8E7217E488688CF87D59AB4FE7B13C793C1A1711C401B49C381F76B5CE120BDFDF30A858DE62A3F4331E4A3CC167030829906935FAC167A7327B5FC0527E014801A27FE0F2D40EC13C66235EFED070979576DA7268D1871E8487C4DFFC62D27B83488A73FDDEE1470832EAEFF621CE8E126267A47EC00773922BE480C7F26C8E4785D886BF8E6518DF13DA86BB2925A432D479E8B8FA9F92442891F71AC7C05C0BB0E4396158A492BD49E42AB4C4737A952D6B2B2780EAA73DEE13037D659A43DE1A8F0E525D7F96FDD1629FE51560F77E4A1CFE903DF0891B39F50B71E0F84965413DB34B1EE95CC1B6728AC3D1924B34D1BAD4A4E4F7D98D1B938C567B6F3C95770068775F78EFA147ACC619AFD0B6D8C66034C21B2991419217256D88F265922FD49B4BB38D2955305A8D01D01758B01134196C525315726D9BB6D77917A57F2C46A05DE91A3FF80DD2B5AAAD899D679EB55341FAC6D5C2E9C6B703806E342B2C11CF84B394BFDFCA378B26C7E0CD23C8A87B7CBEF6828D9E023B2B7060A0FEEE0D29CE59B379A02AAB7DFCC41A35CB9A94408A321BF78A54D2D4DB0E170101798F6622D8087A2022A993E85DEB5CBF0F4DC2A047877EEC9DD145471D57015DD59A37BA60C9BE39A4AFB92289562601BCE8102C83292E2ED842470D715D34F11981BCCB81ACB443FA732F792C5F11B7DA5D1BCDD84EB80820EB2BA3813F5E6EC5300E622DD81B1FDE8C786387864D78246A432CE245E0883745D9A1DE9D68253CCBFE7C00EA908E452DD3B9669F1E6812E40D9E2C423180BCA98F4591307CF8B8E98B7F828989CA7F3F0BEEA4D408898364C6DC160C94B89D879B1D07286EAA3FFBC6CD7FFE5700304AF3FC049098590DD7F6D4770ED66FF60DB2909C2DC6DC67ACFDB7CDEEF1B714BFE4CA04F2D5172137C", "4427106DF31EF72E43B6C75CB84BE5E375B6B6D4D21226D0FD689E8F14EBB81372B93F5455ACE6C168345234B378500BE6612FC10536607E85B884AEC780550F2A26FBF0445E0AE9C0F4CB95F01BBC76652A9E6FC457D6BA425EA8B9457A6F3C0AD2A0FE7BDD1C1CB19A9F1A8815D84EB5843AECA4DD005378111E9AFBA9C3CFD808C0C3CF2B39B1962EA44B0848452778168F7F60034A68E5980EB63B94E50D170C680FD6345F12CF30E9089A7C0A422661DB7B1BCF2480238AD043FA1D0DADEE998F7CD69FF04BC336BBD5985315D4E1CC78558D4E235CD7E05015A5734896597F16E65E45E0C819CB0B895A38883ABE4F439D10195D88366CD14F45947716AAFD770C27FAF6374CDEB53B118277906F7E61C583E8C7CE3FE733541882C511936076DBCF65094E37FE2FF54E0977595077EA26E03711FE9054E2D31AE7F99939B415F46C05BB55BA7BC4F31F337D624A94C9629526ED51A9B93B1B3C5551F9B92A30759D7A40025E98E50128232A706CF6C3F6734D00571F91307EFDBC9718D78B3B792909C1C56BB8526CF5B229D4DB47E61D962538BBB17E6CE8CFB7854EFEB5591CDFD5DD8BB22FCA50E4D97BFC4C36E2573C0B495FEC9830FAC229976FB651B82DBA34173F5635875B1460A023CDA65333138C89DC81275F7F3446472F5F8C5F93AB130009F5B797D9ED536ADF5A42ABF6345B1457D5C96CFCBFFBA56CF124E78FEBF8A8BCDFFA97831A589D177AD260499130EECF8247FA5C44B3C0C19AFE6BBB0A7B87080E14F3C3457C8424557BD9078DEC09A3A6704E1D77049A1A4431E423B28B9476EAB6292CA1B3B4B43E18EF929EFFCDD574417B15A4DC1269E593F884DF5D492A464AC3F2436B8C691B88658180E53228AD83C4FB843F8571D42A9BDEF37EC4926DCEE5002A12144600C9CE7AFE483F3A64E480CD09F8CAFEABC9710E01A8120E84BE5861D75705A8D18F02756D8FA78392F1C89D05F37CB9F768289B8CA99E22E86F8200770D6DD2D76951A45F73C0730162C363886282524436D029786E7CFA2EFBCD3D05169D362DC8BD472AB376C12097443080F3C83AF1EF7339D8FCB85FA098BBCB5EC3645A03902B758DB263A21C8CC4874F96D672EB192BC1A183A1B271BC1D6429CEAA8208F5CB240F451A71B6F884537ACD49471010ACDF28887F6A02A04E738CF9FB5B00E0C474C460EED1F791F4EAB3F9AEC225B40CCE223D23D07CF0B60846C111A07A86448B9CF119754935E8C350752CC60AACB55C71F4D5F5F2BDC3E412039D336ABC6F3D46EB0D1C2080CF260EE77F5C73A35C23396E2324998B7DD375537DD35B5F27C3B545492F682C4B89F13F65FC4F72539E4A7763BF4AE2443FE0A2F683A86274672FB9581668CD2B075C274B242536087C4DA1E69D0712161B868ABE86C98468FE43A42DD2AE30089ED92B7A750C73B19A6D70FBC0AC08299EE2A9BC94652B35D5B2D679220D34D3372AD756F842861470CC3A3F2BEE75112B138613A40FA585E449FADD6353A09363EB6025D4B81F9F224817FC2DEEAE01D797AA8A0F8C945FC69D5891355C28ACAB8997A0518C8F4465953819113914A7CB472EABDD1A8D943A82FA41315D006E54AEA4CAB21601A2ECF6CA0521579A6A92DFB6B77BEC6D5A05B0A72F16B0328C860FAB66A1D6113B7098FE50F3B09C2306D0B9D00987B351CB2BE099A7AA7EB7AA691A4E2D243DD7D0D864CF80A4D2FACBEC3C1CB222883CED667477D189100A5677CC3FF0DF31D1119D5F31ED2120E5DAAFB99E8F36E77B3B078C47B3D527DFD6521D7C", "593CF84751C21D591BB62FA0B0AB65E993408A016415D6296E0F080FA9149A4C31D8B2EA68CD7209E2FB0B4BCCF654B013D92AD7A4F6B1935995FD106663CD5760E63702196F63563DC994570C1B8E9B0A7705002ED56D335632ABE3ED8BC6CAF109F0588040DFD167DC364EA7F692D5F59C5616A6A7DA0C5EAA4D9FF017820225D5B164B6106CE9307B56EB08C563F123A05A4C93488DF63A6E4274BF5188475E8F7ABB8C3E7A8323F689DD93B043BD98BC948A567E8C6C95FD3788ABE728F7B7E299C460F9B35A59BA4429BF417B9F8C54F2DC475A7109B9C25C0843AA86ADAEF388A9915E65EA08C96C4C84022368E79A3A466B247EE6A37918CA0A8DC6AFE291CB9D360D727B6E7415D360AC414BD34DA40A1D995EE1303896465D52707A4F31A30C7B7DF936391435A5FD3F06E336CDA36E473E3D990A6F04FB5E6340581AE86D8EF81B9BA68979058BCFA1363D3F711D33EE9E3A8402A14AFEBF339BA7C34FA4EA2004FFD09129667646A79B6322CF00E1B46C1418557E0E62E106901176CA771979F4B6B299BEEFEF7B847F4E3ED99F56D44F5C73F00488E1DD862BFFE5290DBA737FAFA0C9D95C8307A10DD309C177BFC46A9F6D3BC86F598DC1AC69B070B9AF1CA2824F456E73747A0CED38631F9AC222914825CC3898F04F6AC09B01EF4CB09A63C9436625E2D0AC3C433A31D86948CE34663E5462652980B3B57C0920EB63879E28CA9565BEADC47F29C43F1718CE34CA5717D7AC2CEB6758A16F6D769CC277BDB483808CCA3A6DB99D1018888BB6A49D325891B5D6B4B77B18A5A4133AFD5E8AFA4542710483B52E3D51D8A4FB77D2458C4FBE2DEC1F6DD8C0FDD8FABE2130297D0606F07B305B2CEDB39204E2B8F8507ABD49C0FEFAD0332F8ED98736FEF5AE4FAF8515CD638E28F1555F54D7A64FB38D0B47734D0AEB8B55A792259427613733F237FC57DFC1AD49930D9844C9F44C3D6265BE3102D93E2B62D3B0D7760F613B1F5F5176E0C5EAE47970D30D211403477894B8D66D03CB3AE8992E16D52F6B2073DED09D504B36289644241EFD21018C570A2CEE6D59667F274CBA5733E41BE3370DFA47464AF850B14DCC32BCF1A5A8385314E8B38B2A642AA90B8A5647DF9B32B83D3B4B2AAA54472BFE84EF7DF68ABD0236DE171E5AEDE1770F63823EC143B30FFC69ECC464CD755F5AFD2B51AB5F05B74E96F6108810CDA94F99DF828EDE147BE061FEA46CF6A84CAC720717733A17677BF620C4963DD1A08512CDB6A96DD3ADA995D84A934C9825FA3B588D916CE1898F6C2F75B75481383B27204C343CCCE41E10DFAFBB42BC6BCCFBF7BA4C460147814014F9470ECC8B99D677EEC872172B72E5839D263F55B9FC91AE6143FCD1BC3AEDB12312ED10647E011A020B27C69E35CBA94623960543DB08D67B8CFD06760450A067E3F868386975793AF43AC4D0F3773AFF6C2CEFC8310C0701CB934098D842604E38370182BF05A401C38B6CFBD19CD7D4BA186A595ABAA48B8740DC321FC031D76F82B4F5FD6949AA101D70A702E18D8C2BC1283C2E2CB138699D507FAEC5B6A092E5AECB0AD9BF2E59F175DACE05DC18E485B04DDB963426A117CA0B761EF485B234971B6F681CE3CC5CE58A9BDAD9267E5C075D1BCEE2C88637E2A10AD441E9B1CF4A324B77C6623F4DF9FC6C4AACE068F66017BC82D562722FC93B02489DFBB5560BF60F57B736212DD8A0533071D10ABFCB4EEAD5AD9E36E856C8ADE0B9C4F6F5116EED43A39AF8FFCFA01BD558D7575AF0E36F2AFF74E29435778F4BA57A5D90", "214AD702A657F5A17A601D77E0F4C6A67B7B8C074514548FF89A781CF2E0B5225D95A944D1048338FF3AF206D331DBCB3F5E9E89C7E592A2295CB783F416C4160FCFD26983ADDDAC52BBFDD6A7125BA4426715F82AD9815F30B2DDA972A2E814D6BD231D453858749D65EE1B4C2025F61EFDF8E12E50A3719899C611682E7B2AE0CC85294542DDC04140ADDCCD5DCA315C22E5ACB196531A3B0071DC787C2753C3069F5D302A9FCF99B71317FF2749749C6E00B73F382983E1C91BC8115FEAEFF083434DEC7E8A22ECF2D1CDFC7B7ACB80FE0DD1EAF7510F694961E09882E50994169BF60C47B95BF37B5D6F13CFE48A9405637F87C157863C58E479488278B918DDF041214BCEE2ADEEF4242F55DE971E1A7F2EC566B362F89DABF163A690C8A8B808ABC1217C7D49933E30272A08689F7519B35FF8C1CE0F338D0B75332D163A5DCDE714B821AD3B8393A1740B6BE4AAC6008EBBBA30B8E5FA2253DDCF16B3F87B4FA47C1D36AC86E2FC39DE8BAFA79E7D58A3A6CD83FE09448EAB6020BF121234B23A72BB7DC02A2E235BB5DE3B2AA97D3931CB800165B93851EC81A1B4B7781F23E5C946F035026888C3D8C31170787F78333FFF8ECD8835AB5E9D165A8B1D97B19936940EC4C74D115A34120EAC800E8D680B36D9E29180BEAF5B3CFCC3913EE7FFDC37AC881C441F79A39F4A4161F3B403564F654B0E7D8D5415DEB9A6E11F845314421CC59C6A90826974B4CC477C280ADF4FBEB368BD848AF7F91D12E9BF4AD3E9587DCD7A280DEE9A7F2B6F2D2EBFF7EC9454173B748D2D90A6AA650D3BB97701EAD27D6AA1D05B817603EF1026E643C8816F183AECE863968664E01D6AC58C2A10AFB51B1A19A5B7BDBAD77D651B78C141AE70B074B9EF74BED349E58CF8A80A910F6DF8887202317BA36950F3B7EBAD45E6E940921043476B0FBC136EB397DB44445706F032FC47C454BA08DDBB8E71D1E7D9045655E1039C3C3D199EBA21596335BB04078DB6B39A4452662D282C7AC9B76D92E112B0027B711151C56A6459FFC70BFFC86941736EEF705E8DF5197B4D3AADCB31E421A90FD5179D9C3EA3EBC8FD7E9F4C29D736076723E2D4146EC325CFD616F6B0B70AE0DE179FA8F33A2536DBCAFAA2BC0A9740BBF41134655EA16438BAA5F8FC96256A6F9999CB1C57B69087C0612FEF4E6CF0BE5D1FB77258AF418EE0B90E8AF3DC38B7A15FF6B8D2BB739FE7D0099AA4694781E581A8F7A49BFCD102B7880E97B89880FC41D0890C33481B01D9BA991BD41B8D6501D34E0A401474CF89D089F3F6A189ED80C3006515CEB7F9DEA85D0766D2989B88280FD46F7BDC7C32C2294B2A1FD435102C2D92E85A03775CAF11D05F2367B57F651C7586FCD32FE920B1B94EB431AD2497E75F4E3C408A0FEF89907C6C830FA14402B1103DA4607F3DFAD625AEBC235D2392954B8D3BAE8A6D02CAE6D12EFC73EB46EC56E13D2729787CBB5C64910347AEE384972A5716B5DEDB99FCDDD5660E9453900DC1AF1B76D151C00E8E4BAD38E84830EDE92CC3099861C92BDBB59D8DE31AD9F4B889D480FC8DC70382E8494E1A25D2140740A5F327D51D0D3CA4259F1CF5DA3474FE28270C9B4E7F8A714F7C69D1F65B48D7C9C69A39CC58E2C77D7A750CC0B0E5D54B2F3450B66994DB524F15AF77CEBACD3CC611B2C95F6C93EDFEB652A70748DF1788E6FA2D45AF171C1AB59B0B2A160C075AA4A92272BC0F22631A24EC94C5D38664B08B46DC96B448C351C77F81051881055ACE0F364C80372EEE5BE7C660C7406B03C8F5345A04", "435EA61E7DE31409D04501BDF0CFA57A84C1387E0684538E8BB651C7CF4EFD6113EAF9383BFEFDEE4C702FD5A070FAA3DC7D644CB3D96C8FF65F18C88C43A2E66EB78FDD1EA91E9CB519CDA9EE1806F0F10653F3AACE782810776AF25C9CE1C580C381D00B95CB02AF3F9892B4D918FEEBB01E7E730079266C4FF0AF0EC305D3A168197158B5A0D4B1C1FBE4FCFBA947A5CD2E5324D0C4182069C6F328465EC2900B468E145C0F41D724D65547808BED468256EEBD76431E715A4ADAC80D5314ECDD03177AD9175EEA9D9149128DE8715534A648069F5EB9ADDE486029C69C81B1ACECE89FC468887962AE2C063C5EC7B594D88E56F2F3FA4A20963F3BC730E74923BC2DCAED6EF38412E9094326930D2D2E3A0FFAB2217E9059A88882E2AFD3E62FA4DFCB5B084D0CE53655539BD0931BC063CBD4E660A0B1BD9C7D6CF2836C947CEF2C07B859686424B57FFDD0DB6C34DEF824D835918505F36755C298A09F935A2F95328248B5E923E55AA4C91BBB0733E4940A34AF5226C21EEE9B0E0C3D15397A4D8C069B94C2C38F61FEA2077AEBC1F7C5E0875B9A7F2041BAEACE95807EE05A366016B6E0FA2E7E722BA34D3654DFECEE78DCAE199BB44E164E61729CC7A924CA6C7A6C061C6DA0936B4C70A02223EDA01D7B8C0D2E012F998C3B94D1387B6CC65DDA36360ED765F0A23EA562626E12145EB2FAC0F49BB0DD7D1ED3E9B2860DE1C54FEE8D60EF56D4382497C36181E864F92A95E76CC516E2E1396E2B0D880ED6CD14D2410C9BCA159F57DC9B763ED7CAB73F9EA5D42F4BEF91977C114900CB0F249B10DE8F4FBE220181D4FDB5D836AD2FB70F06869DD7F197F121FF748ADD6DF6C48ED9910F51BD7528DB60FC5A42CC0B72DCA6FA66B617F12FB2A9530247B1709DFA7729A6C9FF5B13D073FD7165033C45B5B7C7C66045D1735979132C49CA4442986760CF8F0FDEC0C0BD5E992641075C76168B8316057A993F513536FC917BFB783C28B2D4878D120889945FEBAB84BFE4840C61012043E96910A374CE33B45F461B5492E2F96F0EF91E42D7DC755F37117852C4FA99B106F5CB5C70BE5055ECEA5DF90B517B08252DAD6F20013FAD50F47A1682CEB37AA0DB64E4B699E126CEA7034969FC5468D19455A1F2BA4011AE5CFFC2544329E268326345C9970756F8712E7793301E9D3C92787FD10B7637F5511E27A16B8DDC21C116F13B0F27FA2E5B6DE60837F011937A986C00A4D9551D37E994DCA480493DCD5C4DE6F40D0E25349284131B9E0B3B6B9BEF6B9DB6DDBED89CA329D9F3B032E2C05BA9999CB02D7896258E3C4504643DBF49A155F96A69148A51F243CFCC3B2BEA7E8BD534308E752C675CF478A231CA99C2EE402EB5DD5BE2AF5F4FAAC783141BE8D2A3BA44156A3D1EE98763108B9EF4670B25569DFF3568FE0E183938FB150FB79F7F28D51C8CE40089C06D6A09F25845B50E64AD231B367C280883CB7FFCDD5E4C044BAFE6C0915A0C52BB14876088267EB84A01B9931C03DC799995B6969E65CCEC63697F1F0E146B75EB6987550C23DF2793FBA8F04D019C31AF4AA747F3BCF00D6FC86CAA707F1F27DCBE598B18ADD6BA048B2B174FFFCD20F93DD2F8E860885A15CBC2F06CB10537C205E143ADDAD33CE8CE5E6EB22C6A917172BF962080290AD6FB88A91C7B63B64047BBCB60309C01F15271CAAA73AD93DCF99400BEE17F6F771AFD156CF28B788586A18C21739AE5BFDF8F6B8FC94A9CF1EAB0399F9FB53FE70FE5E4278AB909B2A00F5A181F67CA7F7E046209A2394C5583CEF4", "C1A7D5578EE6929147D34AB5B29B97864F46686736A0966EE7298963AE27040F4598E0AEA235B562DE84BB1943891101155AFF6D185D9F66E5F9DD037B048914D7C1B55505455D08DB2E0C58716AA4C4E779EB7348D486F445CB8BF499DA3054F087ED95C2561770335DBA67F1EDEAC600071AB5918ABEAD7E55C5C6E609896ACE2426C47941C1FBDBC4804D8FF4C9290E8ED35C967D65837D6E2B153A3DD843712AA34BE1FD7CE0D829B04DDAF036D9D16063E28F627491C1C37018FBD1EA3D33899BEDE421C1910C2957C13B8CC4B8A06C8D3B2264E8E1B8FB5811622A9986B4B6F673994F6F5FA072ED8A8564C2AD450CF801C9992779F292994A98800AB12A9EF07F777F441F19FED6314404A9949218B2ED4E239EE677D8D1425D0547CBA99C1333FCB1620A8D11DA5CEFC51DEF5B3C4862E17A6BE3C194F88B7BBCED98325D638877757ACD448C0A970D63603B58E3F4B8A361D36EFCB6AAFF2858E14B1830F0FFFC4C5CB08BFC21FB091045B9A7F8DC0FAA02A62D1FDF7178B5DC90D2111A64CFAB0D83680196B21D75EB91A5B3E2568C7E8A6EDC65048C88EB34F6494CB697E44F895012AFCD7AA86DF341CB9C63A7EEE8E5F95E3D60213BC23C5A83CFFAD4225BC731F07B34FCA550DE26E0D6DA29F03A1D9C4233D9A0633D31AC5F55A11C1208C8B85306CAD41EDDE3FF5EC3A61194E724EE2D6A4C94FCDA217BD7C7FB328A9CEA8064D94FC66049B56AA1DB9F977216AB4242D0EFA59AD18540F1430A6F4EBEC5CA7EA81EE4BFC6E77F9EB6352B71275D450843304F073AA82D77EE5602B43DB62B9A733320A67B2727B21B705B86D5DC1459B5EB688D37236FD37A7163E78E8425C589DC600609DF3E9F36F9094D06C60731527B8ADF58A95E40C1390FF657D418D675F528B3B665FB5F3C56504DF40C1D3EAB6F3CB85F5C7954587F87744775382517B4C652B4259571A8AD219A6517E2D6D3212AC1684404DE7CF71478BEF7819DA24B09A11DDAD5717CC63995BF83DDA735C3A50F6B164F26D6A79E3B20A1488DE2AB44347694DB8EDD3D957B6B5510C4A266E514164D23F1594D84487757EE6F4353BD06CA7F90912AAF5188F217FCC11A62198E2DB04A016D36A583891D346C0D84241027DDE80090356ADEE1AAFE7CCDFF983FD7F8827BE286280BE118FD9FCAB26A10D19BCC63A9AD9D202036193CDA36321A5FA7252D0E65FC0D8E588D70C3B629D830CD1DE2798309A6B6113FC2A16B341BCA4271B5994ED767F2064FCA7DA335BD1D6B21F54CFA0DDCD47E2A38CA924DF85D2DA869F6DEA8FDDDBD20728A21034355728DDB4287FF0EB5A9DC113A71F7C69899EE76BE7D186B39C7C868E78C03E923FF199246908FEB48AE45261B3F7A8D6E4FD0C280545A9E3A578916364196E483F57EC37439B0FC9FC37C5CF56E21A5CAE0B70D25B928EEEE456F19821DBB974781C646E860EB3DDA8EF8577CB0E3B9E96245E14CF4E51A5D11F7AD9A77B932467808FF55E588455F810CD50367DB1621469AEE8BA6FCD52C75BB027521C530A918F9D646C69EF8DEA1F7B14354815F11E0187F01F677E2A0FBF78ECA2B1E51E898E26CE55693ABC8812F4CB4C10B9BBDF385C6AF0B340DF8DD2E957D877DC1AEC30D4A6195F40F09B4CF4010E810C764EBB57891652C156DD20584E427902DBE82AAA3CFA728059D31C36253649FDC00CCD29517AF2FFF4F5050B0FCBB73B2888C989761A7F0551375E4D3C54E0C9F8A4679E640A73476BCC6587195A82CF5E6F550B0A85D57A97E3E5D0B9A194EEC3E41C0", "F0E94A299789538824A90801AE02D93A78EA914B9A8F10FEA2D2A7D0812009C732665D48F6DD58CEE4CFC72513CBADCFE171F837E79B8776B392B2224C02766D0468E513D0BD1BFE6ADD6C04374604503A3EC8539CC707110D18FCDC8E000EC1A3DD03F7008D37C1FA02E419FD4FC7A6C81157E07E353F3C4882C2AEF4A0CCE1F7A5CB5EC753528152C521A2ACF7548F19862EC31D8783BEF406EB7F756E41CAC3FBAEB9A901F9268E78E06ED5D6CB19BF4606C9DB660C03A9D5B06BC235DD7936ADD74268577256F72C7F36CFD7D4D09D3726F1908BB3277AFA69C7166EA2F4CC9387B13AAA8131D9F21A5D97C13C7DABEBCE61D72556466093EE0F87E9EAA9CB42245E1BF55157013C4350F38596CD26D2819F98698CE98F5D4023BDB3C974B0E61FC6E6604CB1707BB22FF5689F3DB3AD4831BFFD3F93C702E0DDBEBCAF626FC2655447134570B7150E030A3524A6979579296CEE062D18CFAFFC4474490DA81268B27B60E9E9BAC2A9B7D2E2377A2006AA5C439C263E8F9EE360B42E217646F7C44EBBA6D9E3B98AD20B1BF7CB8CDFC62CA7AB139BC2DD1C85A837F51AC9BF08B3F36CEF176A03F358E2E37EB5DECD0DD2D544E58D203910613EB14744E914F92C5E9274FAB025CB6D8AF16EE03FC86AE3947F7A30FD8C1EA23EC7EDAED4054174E4E6DE048C563B1832F8839927ED3EA54B19BA41CC144C8D8A6D8FB66032BA6F4E16DC81C98D37129B3458C2F2A6517694FD8816E8C71E00D77189768C423702612D9863FC2DC1C4593809C74D0AA881DD7477BC584376DC6C177347EE17F3E17B524D0DFB315196035FE6AEE83675494E23BF2433310D4C72E84DC82BDCA9B791D5BFD620212172AB2562B5C36DCA28C5CB8078CF41F2BDFAEE651B04243326DCE0C51ED88699CFAE4DA3B478DBDB92DCFC8D2EDC4472691173B6C5B9E5E116C30DFFDCE7B0381E8E1013CB392056E3BC7442B2A2EBB631ACB65DE639B3CFD8EF3918531480A35314F3F23F9AA6CA41A9B8F6D08F6C589DD2584B6B8285230808EDBCBB99C0E918D4E73AE7B397328502F2D47078CA2FC0BBACBFC9D9E491EFA2A2DBD69D82E0D829F74D5ADEF4100E6195CF3D7AAD2041078AACAB8A8EA62FA42C6AAB6203D92794F77D4E30B84BD16518A9A0BD0AE4B372A537BEDE43B31A6FC1A58F9B43AABD485C55E630FFF8A4359DCD52552B8A090DFD5CEFD972551714E5F0A2A16442345B33DD9D232AC8431EBFBCC5D5165D12961D1E954D01C0379B5489AC0DC0357667325AA864D44269799DB710BC6A25D90AE8E0C9368BE911C91D68A49815850B4B29708BAD74B4BF3590E6488655622DAF3A7B52356C804487133223337679B33E583B622EF873962E8FE259DA8F5DF61748B6799A14ECC763A1B54542D67E57BB73E411AC023907E54BA0EA8B7F20E55739BEBD7F83E408238B73249CE69FD2DD593565141FDAF12BFAD3A43670935354ADA4067DF0AE4150AF306AAD3071EC4DC0AEDE6F568DCDDBABEC98E4D17AA99F8E881600D35B25CDBDBE5DE184180A9C35EE8B42F6890E068700F06E4829A742FFEBBB214D17BA925B5C0B41244DB5BC7AF49D9A24B2C135131E553CEDB2CF4E6E2EAB840AB37788323024123853A19CC04F6E344A175A4BF1A16776B7F84A17501DE4A594BC515E788FD0AA08ED4BA3602838A6D1D485B1CB80BD24D97905A9A7E2DE71A9A4CA32689C46AA9EE52A9EA985C85C9289ED1577B577C444FC73FD1BC3DE03F9FEFC10E6A17553A7E3FEA6D57AB71E2379C9C5F8904EC43E57D5FB119CDC", "A8C2390D6C3F0B9D01B9794A4207DE3F62F00A4D1188C727B2910153D9BC6337AA46D2D79D09DB7656C0B28654F1FBAC5C3DAA8A75B16BEB5FAD8A256E38EFD232E007A741028319EBA4A6DBD0AE1C1F8989246476AD4090F9F4F560D0CD72815FF6AAC29C8674B1D366120EB3213300E99DF390B3169A1CE03D2A5E471B9B8DCAA957259311B97817088B486CB680047359440DD39386DC2BC24AD2AC30436A08C335199F08861F93177640074A241D9C5884EED07EF0C0FCE8CCE08BA30221150C9EDC6562344CD3E14D3735B41DE2CBFAF4DE0F6D417299FEB38146625F3C70D8872103FDC6970D9D37D1CAE92375F81B26566A78A02139CFD83415BFAA5D328674797DE51E4AD9B3B9E1F9BD18A0FCA255CA8AE7E9E192ECAE5C60E9F5D578E59F7F7074A12FA75F9388CAC0A148CE9223681A93D62A679254AC2F41CDD871BD73BBC6C4E0CC9DA67633B61BFEE815F4E15ABDF639899DE105A5F4D74CCDA3EED32219BB447EA5C6411CEDB351DD76CF11456EA762C2F300671A12DD6ED8EE9AEFB4D0BD86D0CF35AEABC9B9E7822478A6DFEBB887DA0E2D3ED4C010E5031C4332FED83480C21ECF904B65925C4CF64595F20D072C7C6AF12DD3C76C682833CC6296DBDC73DC8C979004DE4ECD749BA45D9748DA728AF757FF5422B862223146AF86AD4AC4D4F407DC2025B8166E2CD64C8E1543E046ED91AB1AA5524E88AB6851752AE5A2F02F933DB3CB7EF48775017E000386805EFEB8CDCEEBABE613A87E0C554F99DF0C8FDE49FE73DFFD48379299FFCF738EE21B9AA1AE4DCE7BAB98A356241545B6F7D186AB544F77CB61B6492BE1F02C4B77DCD5083DE4319D1A1B792961D11D552F8AFA649EB5D2AD64227524722B0CC97260A8B3B6493B00D258A570CB238D3C2511C0582DCB478F878528B8A88A5B33F9FA6C41302DD1BFAC664C692001F7F7D207A8850D6FAF22ED887589405739EA5B5B9812BAE617889A225FB2E6F9EAF77D3B3758F9ECB89637D1FB20C428AE3420C3679B834EFB0F89A389FFD72D7420F2435D118045FF7B7361FFDA0BBB6934F81AD8513A626CC25D9A5E2A5FD1C51229E2D5FF803B8983B672E92A1FD72C16520531C694F44C9C99BC3385A610239F6963E0BB66ECDF4CA29E1C175E414A5D3F9E9F495F2D03A073965643186C46EE9BDB41876A41ECDA224719F5C76AFA6E955061805F023498AAE965184ADD6F6BA1DFE0BBEFC3D1EDCD40D8F55BB518C9B45CEDC95682B24F2818795CBE5D8E504F0885863C750524D9D238E4110AEAEE095E1C545C2989BD7E0BC0BE8AB750A7D319AE69CB080DA562F7DAA7068F38B14AD7282E041835B58E2A48A340F993D10FF4F805280C183A3FB45555B8D54EC145CB7B9BEE71D7BA652FC533ACE1BC8D621F7257422B363A5AD2798FB0E6E536854F2BD25914AA0B6DBEF1E2EF71FC7890E20FBCBDAF751CCB0DD16098D96FF22961B6141257AEAECACA339750950F6895107355F04F9BB3EEAAB3A9024E4CB79B19ED7947EDE79958B669077E6BE182020536F7F234AB2332C2F2790DD96F5816AE3FB5F2CCD72C6D177845DD0CACB44128F6EE6B1C2F673A8A50842E13C8FF0087CF71B8BA0715637A40021998652FEAEAF5719ADB71EEAAFC8093E525602599278B35600C743AEB41EA78CB0427D0894158DD4ED564C4742033324C58B01C15822B97C9634FC8F320C0B103F0A904D98C9AC529FA799B30F8B2C0888E47A3BACDAAE5A3DE6DF39A693A9AB3D95E7C973C7125C0F7D8C59B37EC924D7B9737724DD92818360F2C", "2EB63BA5756AF5865AE33947E311A5EED4A0CD056442E19888A2B8302ED8017085DD5D137A3769058F0AE0476AB202CAD822D6A781291C537120F316E90D2C3CAD13381EDBAD35505A5B7DDC41E46771F460E501B9BE17DF8D4DFFF631C365AAEBDCB7D5CFF7010BE2EBEAA0B99820E0BF3D290CF27DDACF397A5E4922EEB7D8BDFDEC96B87F8202BD409F31A200515EB6A05E25A5FA504093F1D82A83A777F5389B5C90E66C369BB654598CBF3F258E9E14DAE819837A86EA775A05EC829B4889B816154A2B7882EC7FF71BA7CDAFF873B5CA4F35011DCDED8C0CAAD101F7BDCE1CBE67E081D98EFAB71490AD12AB7BD9B4CB9331B6B04D6DA2C12311F96E01AEBBB350BBC7311E8AFC9A6F42CD541ED40E2D7BAB44BF7F1E4465CA942A0E8767A38D89D0231BB897A995627EFF71B3E4483ADDCAED084B402A3CB23D5F91872BAA49AB361281454AADA57AC838AE2B34B799A1B46595AAA02A9738019EC3644C63BFDC72F72CFC35D48D83B831E6EF397474C43CF665D64DC0376A437CC768862A92C941B9BCB8FABC6804C03BEF7BD2C5EEE4609870803A5E9BB2FBC42028C5619C3706F773426CEC39D096FAD267BF5E6C7C7510B0D1948FAC573C5716EB4D6AC6EEC492B347497B47C0D18C77E7C264E9A04A4C3DEB83B1101E40A0A8653D9495D4A7C13A5BFF3C6956E668DFA999926231811F3AE84195B65213FFB824478911230719E8EAF206DD99C7CD7D3D7661E9F39250793C1391033EA99A0E31D8CF83997ACA08C43B47240BF1E5E9D1D741CD9E6D3F5DC2043C9D3D68A2A689615D39014B75FB53B4866488C4B37B68B5DC5F9B9D6AB9AF190789CD610E939960ACF607A488964C33DF0091FA4EE86654142083F68436D9700B3B50949C0D97098D969BA25622C2EC15FBE7D7C7B78C1C49F671672971E38996C2D77A024919FC1A87BB9BFEFC951EB75326CE48D3837068F31B9592DDD8505AFF1E0E31911D1F4E311CB1B81DD8A03D68A5EC075D8ED7D69A1D595E7AAA70928DE93B979438315A4B98EABDC8B5E932257AAF79A9CCC74E6FF88C02C33217FCB3FA8DD72AFA1E549B9E5CF6099E2DABA07C91BD3BA6A9A4936556FFDAD89D5F080DD7F818EBC8ADAFB3D51D8BA7B48209AAFEAC184E1A869FC88BDF92E77C6D4B8B983F4B93A52C473F1BF27B4D7514DBA522ACA79463A0B9C2E0D9A2D47DB238AB9E2A1636B9AA825272F2B9C8D36D64614A4CCE2EF31B67682F328B46D31FAA31DF874FA15799B5D53E143C9E9127AF358BA1B43A9418FFDE00CB16D32AA137FC7A5A1CFC2070FDA112DE600F3C05BA0F50F8AE1703AA2CB64135C29FA621385C803673A4D77195B4B74E554B043FC07B106533D0B41F7D882FF3702692709A64052C4AAE51CDF8B733A92D86D507B6FF4CFF5F3BAE4D0D9F3F90AFFD774591E6E14539CAF99C833D2A1D9A12F7E9CB1CF74FCB353D11E22B8216FB91564DDA8F1D2C9865080422DF0E0D8AA47577F31A7682B54E36BC8344D5F5F725C819D3DD3A948F4E6F6C893491127267145DF1B286C18C4F3EFEF0BB61541883E413EC3EC3BBF99D83E3919501A3CD59341BDED35BC39B655D61686555CBAD7A1B033C2E326887249E6E30AB12E43793DD1B72EBE858B40ADF4400A59363BC56063115492E114688F47447132D606F2B99DB9CA4083A91E35AED045C513EAFB7A3F0040848C1DDEC0FB3C2CFF717BC4CA36C425EC3CA9BC51B3B3C1885FD8B4182AA22AD38CCF8FE3990DA75CDF5712B358BE866A6435329677CED89571C3877F9ACD0D3E66884", "8F0A4621BCBCE418BF2A77BD47D671191216B230C276A0D081C4F79AEF839857586F9DBA52B4E35AEF22D86FBA66DAFE801C686F03342849B5C3A492280950C7F3B725DB4BD6984A6389CEC1AB86F29D653781EED847D7E69C99320F8584700E662070E9C43957F4DDAB28DD2427415FEC6F1503551D972DCF11BC4EC3B3FE745DA7F717F35832B8CE373A00AE6572D8DFBD7720E00517C50E2B634B6BC3942F9A8C035AC80161CDB45AFDD7E9C473F8EEB4F1FEE7A677E820874F03B546464939F3EFDDA157C9F478988F3ABF39BEC02B722C559CEAF997A13AF66BCC0BBB4DA7B68EB6C6E8498129A95D021B7C3A072683593C2990627FEDC52F66F3A16A8064018E6618BE5D7C63BC622DDD4A15A33EE19E4161A50EA38CF6626D5A088FBC5721F567145CCE30C66DE60CAD79D31B703B129D27627BB5AAFBD9BC7D43944B9B0D255D8F338C7CB7EC56D121C3F4E61FC0D46CB0E036262FC182E8F266741842DE923D276CED79D4A25FF7AB3D2571B1B589E01583371BC8D8196A1C991BEB90F7FE71B99EF9E100375D3E767637B2BB1FC907846C53550DC4E6C7B8AD7FFB9DBB65ACB30C9644FE9D59A74B0E81A5BA068CBAEC9D6B362BA05202260B1E86EBB67BAE2D74F60B7E1C0B510BCE4EDD8D71E342D5465A8032E87617790ADE2770D0DEB1ED26D62A863D030C781D2FB02490718A5B55D1BF6B3BD1E3B3C163361B2F13E616FFC87C1BDAA7D7C88A331511ACE5A45CB94DBA557EC47A670BFFE839069A546FEB7183C27697A56B65AD762735782FA009350ED52819C23AEAD72A7150DE845B899669EA37B4A12D63BA7D6DFDCA495A0957BDCCEE6BE11B8B296358E92E60A2317CF4B7542CDDFBADFD18C88F5AA4984614A113E992DEAA18FA172C998EE6FC8E936E69953EDDAA3FD233182C7B986DF90386B3661C649EB0F9A7E65B90572132408929968CDC39D18020C6D81A3665639CD2A3612FB2135A6E057F0F68B10D3CC1C35DDA2600AD1C0A6FCC0C5DD0D82F6218F2C1F8F5B714C47636CF68D5361D97DD1367681116F2A2A045894A85F5FAF1BAA27F93A3B8809404181040C24156433B3B87467B27D7C3ECE44EB763D14356D6EBC7542E21863700505B8A10D4B4B6E9D2A4C2EEC9653BBC0D9FC68DCB53AE7C8B6CF3120C921B824765E7641A3E9CDDA804CF341012964EACBF55D6430673B83C12CDC53100DD8BD6B18A56B5AB68D83EA484F48D4641B94AA2816BF06EC1D1285C11AD060735509367FDD0E300413911442846DB240612C1389CD4554DC8D7D7C7E4D4B79145D4684F1FB75759E2D506F9DFE7632CC553B945D91FE0F9A829AD6A9A18817B09B986B18FECD615414A0FD6B6070B15F2484AE8B3EC3DA36D7F8007A7BE336B749104C2695327A49D34741D76752DC943897B29C9651EA3C034BC4B8E1F380A9FB0F9D2C23B627D9DD8317894AA754B8998573F025A024F43E03EE86A1EF583CE02DC7EC2BF2A8EF9A3C7743DE2E6DE38D72B5E33BC5CDFCD12184C9664EE7A3F4FBE9498F59107BF8B6DF69DBD6732AA8013FF8B4525EA9E40FF6F96FDEA2AEC03311D6E8908D426293E369D52F818233FAE1C2BA2657B38FB82E7864CE1177D5E21EBC8AB773EE928EBC4A7EE9F4A9CD2D9F15146C08E4BE0A77CE272A98AEA05A6DC18D5B856EF1B402F9851BC84DC95FCE71320D2A5540D40BEF67EE2709147EAF3C3D5BABB0B21090BA4C94CF7242982BE35925F691847A7C296B973EF2172F83AC9ED5E0A0C91AA697305F79A3FC6A8EA4E7D1DA88A81D4DDBC1F604BB0", "896DD4C837F11BF155D4605D46411A63FECDCD64D7AAE873E1DE22DD62CC2F8982EAAA66BCAA8DE8DA687910A03200FE437BB87CD5E6D17C6F5B8CCFDA073F29183A1E12917C5D78CC1CCEC5C2B04040D39E1E74867B21192EFF2629AEEE22427EB5D2399515D892EEAD80934668BCA906109F6ED85AF29E702FE6C112992CBF851232A4C140BE6CA9C8DB383D1729B41BE939704297BCB41E4B8C7DA5B24B93FE7E7D2214287145A764D3263C9EE136457A2A270EBD03408ECB657B78CB8C0A5C1767521D75A8E12D9FCCB3CE8F6321B55C50A6102381E95C12644549A0E5AF29183316016B89F6797BD89BA8F1E932F4C91C0460F35EAE32F46D42D66F639A87C25AC6E9B9C4E475B7A4A94F10EE0C1043159CA71BA3FB4F794E766C5A7C6F7B85088CE1A2584D4A765D7888F1496ABE23ACA42FC001E2D30B3959AD7BD941916E27DA648833EC82004AA0937723CAEC0A8E7FE3C6742DF8E1CA797F13FCC4A07BA75874FDB6A66014C0EC688C5F5E0D1ACE231B32A1A14A2503155D412BDA98FBEB450D35797BDF96264D141EEAC77550408F6A63993DF3F89D1EDC90DD0885227C273546C2D86D3513AC3241AAF96C137B69970E273B73EEFBF8668B9946CBD118CD1977445F87557DA03668D4F3A6B5DE6D0088982F6C5DCF082207A99B376B155FDCBA8A5E47F2CA4A50D48DDFBE05F8C1D28A080147FE9FE04FD49C370DD9E4861D8E553A22B7DF7324C51C20F10BCFC18EB59BE931C69232419F5E037333B52FCE4A138617B08767506B793A430CB3EA0A4D9A2CCCF813625FBD2F471C39DEB2DFD0792F3374A980FA4B208185332FC68798DEA1728054F28771E0AC3FC065645B3E996EA729DC6A29CC23F872BABE6A84911B1B6C256C38C0A62331EB66E2F8B9A77ED79E323B4A96728F0ECAC851C3E9C15F2863CE6839D3752F4F206C72EF0BD60F087315E6AD3C7C836FA3C5CA6BF2B72D877E33C17EBEE283EFD62F395637E784A84A3E4EA174BB501D2CC216306673B06433A05ED052860666A3C3D7E7D7C991911A56100A31048BB81FF71110697C941CD0ADB08705A5A73CE66AA87008B08B51DABBBC3FCE66B11135844BCD8CCDF4D010D7B135AC764B678CF307154B5A96D1541B75FBA65D7A0D5C2BA2D1DA48BF0EFB9BEFB5141AA6D30A59695EF7FFAE250AB52DF0969FCC349E1C7B8D90099EF0410A861FB05E37D7156991FC65542B3495CCE223CCBD383DD4432113B817B0AC4000F9EEC55EB377CF48B0F51B8D02359449CBAAFD6AB69E3616D6A3806BF67069F2572D1AA0E7DE28042DCA01533E1C381449E22A68D901424498DEA67F0EE80FAB6FEEC56BE01950969550F01D62ADD52396E927962F209B262674D2F079D0E48D1C994864BA90CC4CCF3CEA06A5995072904CCD97313E82D3CF76F24E3B3946D11FFF45319DDFEE619D2B5D777795567A44767F12B41D84A4BF738A2C6AFC0DA08356DFAC343EF090176425CDDEBD1264871CB7AD526D9B4E469E866817A1ABC9973C598B1724C8C3185DA3C999636074C27320694F0BA758B0842D2D3EC93DA9A9CD3F65B321E378D95F003C744EBD7BCCD4712B6FBFD084D9EEF0C84C70651E3AD999D64BCFB5E8F7D9582C290CE59176072A5157B1CEBB5684D47271ED482B9FEB7FDDE78B424988E88627FB1299AB8B96CAA72239BE6930BBA4396118041D6F3CE51CEAD81DA54CFDC8BBEB0F6C8E9FAEF93E2C404D543A0F0026C291CE992CD71BCB0C6E9C459143D995C92A4A1C9A6AFD36E1CA87E1F8EEBD30EC9D209BB3F6410018", "0245F1FF6639D3C45134190F729CD06608426830011170C357160EAF351BB00AAA61F254B939D89335881D5D15F3DAFAE92ADAB2B59DB7D3EBFF526D9A6F44E1D8DD779753433A9A32A541A798805AD307787C1832385D8B11DE57BC3ABA2A81B70AA2221C8C9247EFB3A40943D8A0677F1D4E6F9149D97D6D83173FD3D3114293D628AB97AA4CC0121E2A88BD5B5C290AE7E5EE4BCBCC1CE73017E3C58FBE575701C919ADE5E94208789CC2BCC330719F022C1F79880B1BAC4E377D486ED467BC58B13F2FF97454BF1B4F4DEFEB3B5998FFFF604EA0BCAFE859CABA133AF969827887AC252B9D21D8AEC49A0D77FC83B4D9A2930732E9A22B7B823E302E469B52537DB5341AA0979642F4505151AED71B690430AFBDB09A8454183A23F86F598719B86D1E3FCCB72DD6599C9895CF6AC28FC5B1D4A821A6F9DD9BB7AA63DCDA1678AD816D96B919E47D0D0E95756BFDDC71AE430C4F71E521701452709B6E670306A20C2F60F84D6009DF6D749C5E02D3DD5495DBCCBE9326D7D302E2A56032F4CA5C82A107E06A867D09A2E5DE7DB9C250E25B5279A4867657AACAE0E3D601DD3BE26C936BF527CA9EEBF3B247F75487A01694C7595619FE6E90AD78BEA799B0BB0C126ACF3DE54F805725CA01879BA5B8412D4FD3D3CBBB37AFA955CF90248CC521B0FBD0214A8D4C9E4A41705714C8DF5EBFBBF2FBDAB93707B0D779357E3DBBB20D5CCAE707BA7BC5D21D4C23D72AA231E83880867FFF3A6B587EDBF5485C516239028271B5462F78E3B226B057F01DE2D348C7D08108B990DE8484E839EDAA174B3CA0DD6D1338513B3D1E4ACABF9C14A9E03CB373D039645B6447D7853257F74665CE10EAF27DC1640C0AF88FF4C207994AA23EFA97D1CE707AB08E4A615C580E3AB971D64371715CF0BCB8421D8178D708E4D3DB24B2AD3143E2176B4BE37DBD8812116E134DC9B72E35E8811F7F404485ADD7321D3DFDCED23BC8209A9DAAA198307EF1BC0E204CA42D7274EBFA74C88251398D6E479D53C5C6E7528BEA5BEDC8677F6F5A81A07BF7CE58E4AC38387824300D14FFF131A54390711F95E03CA59DFECE3EA4696643A16874F98B76F6D280F7328AFADC455C51712BA748D33741998838D33F65F0166BD4D9788B129CF7F9F0802758631E5A718A5058C63B0D38D9E6877778FB8CD8BB7AF099ED442C52DDE7D3C0746BBCB8595C35C815E80C71E98425FDC629C7F8084BA2556CEC31E707408BA6FD7A2F0AB83286A93E565FDAA34B7344474EF48FE5C99017887C8086AE4C8916914142151550B0222C5FF617817EF86920F1FC00B9D9E5BD95C6047731373DB142398EB7E5F1B29EFDBE41ED1E9BE725C2748EAA2F7A1471AAB6C15BC4596B6C6CEA5CB3C9F1E57179F96B3C3017C2244B179C384ACB93557170F4E0CD387D1D3428A7030B4276F8D3FD38074E9348033E3BB3B4A05B3366064C68E0B25F36C2E45FB0AD4606CF5A6B8FEAD45CD9790BF5BA1B0AEB5C67196C05D637E878F6D3108B36ED2CBC007F6BDBC7D74362085D651ECFDAE47FFB069ACCC7C55B726C0C6ADCE2760DD3509649DC58189CD7195B11245D76F64DF2D61B07E0C172313F39961BBC410E4000C7F7BCC52593AB7915D5B5B3E746CE8F15AFD2AFEA8200687BD1E0D767ED297347A1B0634A4F006033322F787FD901E7F2492E1B491D4F5B901FF12CA88B2B2B2982D7EEC9DEC4538F8E946172AC82CD468812EB9E7062AED4075AF0A587A92E9BD971637B3222CDE1A8965DE1EF2CD4A36F2B7457D27CD328016FD2D92B0560", "EB01608B4B6324D02441F4094E82D3DC8ED644FD9D7FE96DC544276D7E02568453EBE375974990442B96B85A9DCF163A5974EE96274A6AAA9EEB0C83AF9A2E27C4A4174EE1D4A4035782AEF83774E93F67A5A7B91E7C8E05611BA6747FA9F83A788DA50C9D4EFA17BCABB0361E055CE6D07DADE204EF601AF3D1C7A54AE1011C2AD46C27FC060A27073781A221D182D4AF531D3056401D61024A29FBB0030B8340E91AE3A32468CA48183567199F34A76209F7846ACEE0B5DE327B3A381087204DBB6FF40E1463CC7BD38311DDB99FBD05BDAF3B84D9E64958F67421CFA09903400DC87E212FA320DB95DF83AD6A6E247E92151AEA0638D3755A6B409E5853E1A7FEB54FEC711D75AB9CAB21DDB34D7115174E01E9F0A3E650F852666D06A2A8E133C872FE9034BF9A61E29CC319255B09E40096B6D15809FCE4C8993A056E4133BA1FC05933B643B5D476D3987E7BD372412852D439D38600BE4A7F22BE1777CD86F70F05DF3B260B41DED95653243419C5BD9B6288697460A0FF7C0E2928D707BBA41E46D1AE11BF3751852DA1516941BF67E5C1775383A7F88CBA065BABD2235C155FC69D3C11F5658B019B089A9B3A983A2D2533BFF7694FC271597C42EF35F8AEF804E18AA37E3F42E49D23FB9171A312A562BBC9B093D92D45EB6A1A8A665257D596174E1FC44E117397AA7C4C77FC1BB176C8284DBF4558B5259FA69836B68322705CF783121E3C4513EC11B76329F1310731CEBD2CC8B7F49AE8D87BCAC07B1CEBABE872B5F83D71FD10F300F9FA30F4054C476F86EE75AC68F1F80E352D3F9753233E53F67C3917C26F4B0E8A61AC0299FEBEF95D9A46BBEC9F5C16B5EF127EA18BFA609B99B0B362036F4AE14D11BD7EC8ED2B02C8BCAEE2CFE409899E06DA304E23305DB1AC0A7746A72746C24E6D073F1FFFD3BFAEF300299C8009043FA392DE2054F237A098EA5FF0E537105F25B7D85355A44FAE707B0A3D1D6B30356CF1BD6EA3BE57B3A6147B943D1C96C4E2C871DB1AB64D9359F1F3D15F9DE5F45FE8E03269EBB9759AC78F47DA7B913F09402EE65271859D623908D464B1B5E59E4580BE30E01C553DCC79B190A809C71D8204A735350C75C3361EF3C89C07B84270502BAB82FF089793838B13B3041A17AB396C09C4BEF716329318B95C7C4779889956961F8D2200C163C86F45C1FBA0567C8615F4E815AE8CE2E05589C006B4560D66A67495C2B99E3A951500FECF953D9FA7FB5843F102FE0F82E72867A65C09318A52D4634A3FA28B032B92160CB2E7D6ED156586D071B8CB147D139212BC47774CE580E80791C14FE49DE7688B3A99E966A9F869B0A7421062F18705AD23AC238B52E6D80F43DCF2B43F66965F6075469E0E789B40687D104DDB5CE5A12C0B741EDBF1A3E57BDACC92265D592FDD63703E534B78DBE9F13CA04B9920EB740FB220E01DC176C09CA51EB905E32398E739C6A39C02043042C5FFBDC9BF959D56842DB894FC108AFCA51039A9B28D19D67127856E29FBA3812F764D31AD4E2FBA5F00A828F85087B4A5ACF24CFA79A3B60C954DCE40BA6BFAAE4466C88A60293AB46FA2FEEFA2E3B0DAF0CD72B0CF914848AE6A9BC26F6578D08E896479879D3469E0CF39E3EA6508A412853C83BD33D0B993678FA08DF14AB40F41CEF0E7A4B992DAE6F884E193B10E5136DE079BF85936D3B5A586323B08FAF8A39B24ADDC2D7E1EAE1F2F90A39F26B130F060ADED352AF085F9169C4E21093FB2256C4E17416F57D29CD37CDE3BBEC8CBAB280DB69643C86696C3A6D3517150", "ED28B364884EDCF3082EBC5FCD11FA0B0823DBD808FA19BFCDFB42BB1BE2B73D5D1434C95DD48DF1ACDFD7DD17C741A387F18E7D78B2A9A894266167897AF1C8FED13D463B6BACDD81BCC2F3BFB17D2DFC0D43DD04FEFE39C801C8917D52BFE8D2E6F8C0C5159E0185805BF9DF91194AC97F6448B9189028D50B274848B429AD4DE45194ABC458485617B59FC5B1F1606DB20283A73F41A6B36731F6F9E978B276B33B5DEA3BF87282D21F63787BEB1F6FCD3B21004E6FA79330A3345F2C01C8CD1FE661FF9AB5B484B3260F2332FDB00216DA42D2840D3180B6521B01281E6D0F09664675531EED14A5C1794F3ED1FE634EF3D6E9D1B6F4871A45A83DB56FE2BBC52FCBC1E05FDCA884F98DEB436A9A238E086FB339E1A7AFE8E04A5110737F021C89EC5DCA1168E5CCAF92A04C950154F6209CDD01B287FC360B93E2A5661E7809FF1BDF3F71B40BA756411894B340CBAFF9E0EDC8292E7C316ADF4F3B827F1B82A406B53AAD8D2D660FD0CD2D6A6C693A73511FBBB97612A8CD3F0E177EE38D46100E64C4C540C834DD87E062DA2C6C3BE8A0BBC46D2070FB8D9E1DC396423D2BD1DD22F1F4FEE0E24F48CAD9241990B5F48A50B3B178A9C1CA71F71321226E98D1F79DD7F3CB75E0B0C16915E34A92750BE9EA173C276421CD0E54319ADB0C4E5ACB4BD599842E5028F613067083522F0D2A891BFDB190855B9BF36A7F2EC81EA89AE11A37B6B89126DA7C51A4BD0C902D0DDA55A4286E36835D2EE95EB46AE7D6B919C05D42E543D96D22CD241A8E6985A18F29184586E6A7C10D4A955D0A1983EEBEDC5A9FDE306FC366F77A25CFC10E5B8732D8F40D068224177288E9A13408F06AEC841C2E8612E6C794DE216A2B758C676022D4C0B99A4A54166CA1153F43FF66AC03F183DC30E9C83E6EC3BA33F63F262F39838E5C044625B4CB1DBEB7ED957B8F7CCCA6C63B837ED93B2C260F276175F2F95B235D4D1DC0C9014192D72CFE014094F29A0AB8F0A9BE896067D74BE5489F7ABFBD7EF442579875CB1795669991438C0B6FF13E06D5BA805DD2D0DD06731ECA45FC8CB9D7CE568921A60E68E31F31392EB82A39982BDFE8D953DE2CE0AEFFBF0243E43ED202FD6FF9E075A90684FED84A4334A8E709979FD5B60BCD60D41907D1FC5D927F9CCAFF2DE85AE1350C8EF8D68EAE38EBD0DA0D252F0B5C82E1C3EF78CADF92CC78BD990B06461BD77B78635C406B4109FE58850D2A97A6C23CAA18B9AEA535D344E41E783B767A439DE0762A23D18244E76D3219A10100264EEFCA45F19022EFEE72B856FC34E59ADF6DFC78D31C8690CECFA45321AEE33DFD40943B158BCBEA764C3579FD5A06BE297D363994E6B959338A3B48F14A3C58CDAF1D91EA1711FB39CF78F04E72B293B80847516DA41D5024CEBFCBB399393E59FC4C89BA310377AF576105CDEB4F6DA314E990B1513BE9DF738AD35B1460DA23326D2FBD86722DEA5D37CE5E34C11408C01E1881BCDA250C7FCAEBA9DF85AA08FC9503546A55F2B4D6A7D0FAB2F50CA8667C7456DF6972273B62A0DAF38BBC7D38B5B62F2F1EA8476F300D0116598725C0903B0323779E02977F33AA8C45C2933B412490EC17FFC2AB2B4130CE8FED8D34419FD15971EEA5759EEAF9F3E8FB4FBB26615B4286AB4C2AC57A6E4BC80DDB396043251DBAE26ADB03767DC9EE4ED3E0FC7D74C58175BC1F393F0CE5D16589879C6D53645B861B079B298E056E4539B2E2E70920D3A273398B4E9247771B8A23B276DA9A06945DCF343E7A4C9E7B06960A1F624A75B1B48AF0", "CB9F5B3A549646C4555D2FBDAF2A79F9921C54C6FEA316D7713D64FD790325A87A30DEDBDF0ADE3B7BEA52A0E319A57084A79DD706228989642E78BF51B7F1246BEF6F1B8724C57B0A3633FCF4440E9D57DAEEB343283D642710266386DED8FFCFD68B32949FAC691E66FE9B8D736EBCA6F4551B39E79557154E9AF590B6F5CA1C6A0ACA82FF4B839B6F9C555CC57255F96B2C963536E48EC9B5BCBD270110EAF7C64AD9DAB53BC791CB111189117A34A74B4F23A8573A59886BF974528D17B31CA9B6A6B7EF7F923B8915B640C599D2453941CD16633383F36F9849C0165D94698D793A58A7869AAC8B4C007CB9E43D8DD100E9504B1942CEABBA733A242599D5B8C60AA42F4C8BE7F040877DA2648D083A2272A46A90D215D96DB2FF1ACA6CE24A2936C18B7A283615E8E6B729602D018174276E2ADCBC869C43879B6BD0CF22CC0601F7491862971F65D3E0BB2474549FA18964B14D9EF81429F08383F77E8880E858B3F350076B709046284A4BF500A6C7D9D694F03ADC9753852285075197FE5F30F5FEA91C7740AF38CBF5B984ED852C99FD27113F690CA7BD5CA46DCA330A7E30E7AA3AEE8CB62251DDDD62DDCC29C94D79759357FD92855279A8516ED0B07D8F2CF6509DEB6C180AFFE120B1C06A4DFB1CB76B9DF3113B08BE85A50BF76480D2FE05E75A4F77909E0D146EDF0D751A1099EB2BD019525048BA145C7E0B3FEBE21A13A41A9BACED48E1A4ED32A57FA061243EE840ECA69191B1BCDC0358A86DDC98920C45F1FD193D529C85B33E0135DCF2B81C7FEED32E07A2431755F3EF3EA685577A6884041C6600CCAEE0E4182CF54EEC1B078D74A18D8C81E0678A7D1309E494938083786C67436FE55FA955D3281F7F6C145B7C769D9019AE1B8666834B51AE95BEE2A8D606825C7609FD3F24057425B27D01573FF353771BD47902A9BBC41B2016086A3F9E366F96DA8AE3C62123DF05113980D8FDEAC5B2C828D44C69F2D1420BF8E7913E59FCB88845A7FA6A84AA296875CA6D2FA21A4FDF8E75B5CDF0E1C0D84FEE983A469FEC80F02923695640FA0858E9B91812DD4D91AF0DFD97655C7FDC60EFEB19DB5AD7D7D0A5F93FC88A2AC1205D1BB60DB2F3BCE203C802752350B5E8240B6FEF4A38D8F35AE5868498DCCF1BA047DC56D67F15E3C3807BD5638A9494DDC268378DDED39A910A6C7A59E6738DC68D1A531C7EFA68BE06AD20BAC86BC36083E45AB0A314ADAAB741C6E24A530B3E3FE318E4A1B3827057F944918664A96277528D185E821093D392012803ADB63A4DDB14983E844392542F2C5A978F1911A2720E201FBB862AE98C3CCDA720A244B5B58AE601C1ED814B0753FCE5F51E7ED797AAA98FCC833EA272D86A238524C07349F5DD0BA4A2F6281B2EC2D29EB546EF52F07B832053AA433A7E8BF81C6C9F562B603421787BCFF621A69ECA5CF07CE8512BEF945DC744AF403B9DF0FDD48AFFF264D4AAEDBD8702863B5A345A733328466B22FFEB20906543639F0F6F85F3F7DBBD28034019F4D517676C5D8C8CABD4118768B10158D83BFF569D3B71F30AB57B8337C50674E2290C950E9D48D6527E885A0F7CF580717CF467759CA0D41CD03A91B75648DFCEC5C5BDCEFC2EB2007AEF2F01651A328DE030546933C1BF88F34AF14D0C1F0F37FC8FF4E015DA5D25D4A1D52EEC44DA8E832F01BB1D9FF6D067021D4703E8F2D511E73ADCE564EB53A048864D191F21C759F0B629E0053845D7049900924832DB7831CCB80B36644BF23EC71847286C959BF54C6CF9EF075B1EB7F43898", "576592F533BF0DC0AC52CA27BF57894E407D8A264496F2196DEA6B4706CFDB4E108E07FD18F5B2253EC3BF1914BEA0E7B8EAC0EAD4C6A3D2E0162411811F8579262AB9F3411327C320D27C7DAEC764EC5277EDFC2635ED39B0C497365B8C3633626E66D83DBFFD8E24BDBBF09A97061D7F530F69D929DEB7AB12488951D753EFF9F8C8DA17F3F4B17ABB9A1955F40A4EDE9D058E6F48BF1B5533D91B55D333CE4AE379E124CFD375D82DD97B682D80704EFA3DDE799DC6F7D5E55B72A99DF2A89159CAC16B47F297A467358EC67A2EC72A01007C47D757DFE274893BB0E141337105C46B159B08A0414A7EF8DE0806F90B5C5A9362E837191DA4573B473C6E4354E62C5667F75721370F036BD6CA025A49C15BF63A8B30AA5DA01CCF9746222F2113AF119DA4370DCE98ABEA322483C127CFC4AB990496CB53BA7D20255E63368FFDA40BB7022A1FC115B91ADE56B2711DDBBDDB9FB00C5FBE928F3121420288CC9001F865D44ABB4D78B3A1F2BF6B1B2C251AB1075A65A233C4472A460FBC76ECF191313D700F73BAE29795EF9A5FBD0DDB5E2E04DD172C85E15CB0A63EFC2A4E317C5FF01965FEB3BCC81CBADFB201C670F4C8AAEE2E7E75F1AC4E4AE0B826FA9F87B300188546E42F3F142AF19A4F91192741ACA71EBF29A6E1BB0D00A4534095A8B9885267F27DB9B676009631114A2EFF9B2D4C10111195F0C178D2634EDE70B4C0C87613CC9344BF2F62E9BCB42C4CECE15AA61A0C7915E51A5645609620695B4D0C913337DEEFD9195CC9545A8B1AFEBFE5F21BBDFA2F140A4D146ACC25B8332861C2EA55BA75086FD948BD27923BD2590C62389CFBE89498C82279258D11689613C21CA8F1788C4926EADE381C9CDB41D09563890433AC4BF9421475EE42AE5735D1CD10653713BD62299F66F793FA095B2E04EEA1CF59EFA731143D5849032DA833E1660A95117A2ED97DBF4D22FC0BEC0B5CB8EC32B63BA18B63F737F3ED775B6D91E052FCDBC0C33A6F4498082542B039A26BCB25CFB1B23088D9BAB9DB12CD18BF2AE73C78792BA9096AF766114337FBC06CD63BA8D1C0A5E5C6BBF5AEAC38D6B4EC2922B8ABC930F58CFAF2C65C43422193F4AEB436C05AE3213CD19F58CC7623886525FDB77DAF08CEDBD5D48233D63F1D6BDA7DAD15E817775DB4C9DFE754F4AEB2A94DE6F883961DF23801A645906BEEF9128F3F6C9FDB57E6D7B5EB46326C4C39F2C0694230CC28852D54281417C4D24470B9EBB625AD1D144B4889D23EC975CAB65A855CDA704128A61CC7C50C5ACFD6355570E07CE55578E4453CEF4582C368E585CE0F08BF786CDC2C0158E1A10971AB769872C52DAEA5D7C8947A2B6300815B42125A7B8773E6E8C79239D32D7AF37CB9D4E8688CEDCD71A213795B0C1BD5ADB0AA337989ED3E4E65DAA164C26946978C9468EAF74617C47EE4328C51F41418F2D35BD33D47A9A1ADBB7C4F5A968946A7A900C293C65648C3127EF62D58BA9995B19B10D931C07D67164B2E685FB840A019EF4752602DC9317714D89F6D9318256EDBAF002C40D5721525AC0D2BD2B4FC64138F0FCC5EE648E84AB6908C1AF71408D51D31F7587F1BC8E19D1C045D8921B447CFA9287AD03B4EDFC3FB85C7792CB2C479BD5A14B72EB8D3077CC511B0A7364C80C32F11CD1EDB4B3A0806BBE9D7765B091E04F46620C23DB801A46C544A935FEE00F0A07927171D37D3FDAD3DFA81C40CE60F93EB65E667FE032A79DB745EBCD7EDE57FD51B647CE25624444199EE2D9647FAAF9F43554433B25CE78098BB33CF24", "A888113D9682BAFE58B278C036FC2EF41CF8C156C39D67C378E4E0EEBE750656D67250F8447C420E6EAEF139A11EC90B1B50CB582E5089694A4BFD843602382C022085141A7B8AA1DC5F68469A2C2AB04BBE91EBEDAFA2A19CF0538AE9D47421C3F98084073F340F0292B8946452251630987DDA49E56A79F1562C1EF57134F036A5DE932B2AF9ED5D24D28463DA55F4E7C29045DE9CFFC4372F7A6AEBDCBF35DFF2D952D90BD4650FDB3BD68F25B65A7876B65C5AFFE8B9CB06CF91B88A588136C80D9CD361AD83F25B6D1E17D161817E64CB06262AFED0417DF26B9B3C0AAB0A06B1310A7375352C46A410E167366AD768559A6DC618B416395F432C0CAAA8D10F88E9765F36B196B37EEF1F1C13C4AC08150C9E4CE45D9B1663FA317263672875E0BB5CFFAE2A132A6B431AA7099E47E7FC8349D04EFF0B84C3E8A743572C4B1EF38F760656E49FB1A4DF4E2D1F6B24090EC675D299B32FC5EBDE40BBC2B1DD44CC01D1935F1FC084749DF9713DE41365D8CC9AE5041D60967B25E16FF1941A9A7336DC2D46DF5AB88C14A4BDEF077EACFB1F08B834AAECFC75B5E3C1BBAFD3EBC73E187D862411AB97D694B2E557C47E5093FC15780805518758B4C5B548306F92B559DC58475464C6DCC18D2B3905FE5F60B4530F87716107A1A4EB40090C23527895582B02141386A726FFA11E9930B6099B22816DEEA2626E60F4B17C5E175A852A2E174D59FE8219C190D0D6C50C14A3C5215BB193FA56209CA4D14AB2DB5CEAC2B3B20CEE6DA1F798B681D2DADE8DD13674B9156E5C3C4AA09B1932CF69D62621DEEF990AD264996069B01E6F7A21F2E5996251D09FD955CCA7DAA902FA7D46E03AABD4FFC5A1A873711FBDFDEA0935C399A0178CF2516FD03746B86B5A80576A34119373EA7F059A0EDA3F0D18CF33ED63DC27C8157E0C43C537E86FD37E58EB5ABEB5524FE8E19B2298B9DF539C7C31FF0F7AE96A56FD3806B81088DC13224131998DF42066802ADC2A08AF6F69D36A7B9B518430C5532D3AEFB20BE0BD1BF4B2C968AA78331C614EE51B8E677B19A98E30756B39BB6A1AEF0E91915BC91D98E86FFE7584BA6ED8D6D51A132EBC124C056FBB9363B8610EB3D7A77A3E581C02E7D25184ECE47A688E718922E4672CA9567BBA9BAEC81CD8DE7FBB8CA04D20B51C850DA2A4AA63E87FFB27AC89D18FAC40AAFB21331AEDABFC3545333E57C73CB7D6B601B7180E4489269001A6786415F4D1ACD8EBC3CCD8E78F6577A9E107ECBA3EF5EFA242F80202C1EDAD26D9FDB8F43F70D250D899EAAC973042149B8F0BF7327D72A49222B5C403645BFDF3FBAF78F2AAC71B9FB582346CA456EC183867409C18E11A1BBFE6FF5B681B0F893778C87A9BE8A67E196919945F4F22D70FF5D85C55D23893E7EFD9D685C41B28B118EFC905C450A9E91112C5CEA2475EBD07DBEF0A125C298F467377E2BF8D4BBCCA25A2DCC4AC83AF877E1FC820D09F31888802B3226FB0129AB9E47FA65BAC527CE74BADAF59F95CAFCB6EFBDAC889EE8075CF7C71518535DA63E7BC9DC5668417123CF11DAB1070B050DEA01F46BD86E59C5B3175EC1C0C1244E0E7B5B6FB5D26979393E430C7B79893E3BF819380D206438174038764B7196DC0FD94D4A9CB8382CEED4490C43C19061D2BECABCDF386F1512EF3D635601E8E9CDECE9A452A0E6C6AE0D6BBBF3AFE226A46AB3285531C7AA9E0FCFDE0D9A557F20E9802139A7C8EC2B2872CBA3AAE87F0BC6DA226BE4AA5681B114E080A399BF7480E8583DF2505AEEE32E45C4112FC48", "DD364986DCF106EED4C8705C1A9FDDF9480D337BE5C61AA3F661C6968AA01E3E454698FFADF366C73599B987DE85005C9743A2416E637E4BBB67FFC4D35F26B7539C33256EDBF680939CC8986F5BF32D2ECE4905A4F6A1727BE1131771954856A1C66A402FDD0DB86B51E9C02E6BB136465FC4253C8D98FED1582EF8AD22828B6A35580FD58A0038A9D97FE2F661F312658041839969752C4ED321D4EC8229C5753F399029B0BD5F065D5A19CB4548C86CCC1F3A9873FFB9E4F421D033E4EEDD4ADBAF302E24371EA97D817AA33C72708C1EDAECBDE7C06AE0C95D8237517666D0FB43B2434BC50EC2BC8DF1E3CB46099BAEB869B251E79E9B175B75FF62F408A5FCAA4F6DEC90F97B926272389696B5E38D26B946E0575907C358DB17D046D58D061683E07F1B075C10934FC4260043AAC28928DC877D27DB9BAE618910564EC3EDE3C402E86BC3981203CB7DCB9940C37D948556A57A11488D1332B05F4E5757D470A22D0B86C88DC456CE014B673CF5FEECAAF26F4662C9B243F46969025692E445ABF375AECBAE50EC9E48AD25EE1D1D0C16624CC5BCD1BEA8C8FFE3579C50B732625A381002115A1D69DAFF5844731F41AFCDE42CCF1A13FC98A64FB9769F03CA631B1C3ADA6A98F40343BFEDCD80966652292B60DE83385FFEA9CBCBFF51450C768EC8C4FF6FDF2F76FDA7D5886148168CE2BF693BE0179DE250D41DAA80553488D4DDB01FF97329E94C7DB33005B498FA8408E13FD5BBFE079F6E40EC5C8B735EBF9914B932A82441D9D5136C662294956CB52939F4F7E335A3B9749CC1B9F374AAC89C9AD1E718BC469CA21D2CA467F5DED54C402BA0CEA000DCC878822EE3E1D329CE76E421305178FDB31F5DAC177838197C5B46A4F96721139695EBBCF39F04BC1BDBEAB567E8FD812C355CF72785CDB3A6909F801BD2F448B3EA0C7F96D09DBE4EFFB1CAAF2A47FE6BB830FDB937CC5ED2B485AA6B85DA799C1266562DF181005A345C62BF94004C1B8D85AC06D114C8F2C5E2D569C709251EB929237C76E9CCFB9CB39206BE3C391FCF5E814E42AC2BE1576B9F0664B20F03BDA1F6431D1D1CD4C0783CDAA2A7AD32281A06B2BEC53EF1568840277EA4341F5570388045526AB214B477EA23023C13F4327DD0C84CD1744677091B21D8F95F38A8904EC5D6542AD6E3A68B355D688B1F6CA50DB7181272B3D564B1DE41C14575217FEE44E5B631CA49995EC2CA787EEC4533657FFDDE7370329C9BCC301B8785F7A307F1D06F88F21F5BD19F94827C128F799A9C354A021146985256B3D3E8BE46AF6E370EE193BDA3494E0FCC7AA287C3A5B93B638AAF9BAEA46288DDF690A464017765FC2F769A5A930FD3E5A5F399B2F972EC286E81062B6BA85FC04DBBBC05B9971799225E2F0867B55CBCDCDD3B85D6D56C6948B03E91080FBCE3B2C5438491050BD2E81C41D5C2F6790AB1F327D2C7023FD891F8D6E13D6F69E7AB1604692F21ECC7794F028A8306657D72B5858301F5296A5FFDCBEC4863D0503749E9B483E4760AFC05682304EB17D67E016553FE9108895DF3EA98890172D795009AB414E4539C47200C56828919DBC1AFFE040FB3319A068264607CE51D387B9291B7483CE1C38C1F059AA86B68BC7F852D21BF759A56557AF5B4E8CAD60356AE1D9D11AB49CFB9F627DFB1AF5BF8A6D85A775B66767616FEFEF6488C383F5ABAD4E06DF0B6C82BD2582B284BC1D4B27168525C69FFE8117FCC38FE758B2DF09E38DCB1688789B2AF3A050142E50787EBF2098C229E6965FE134593AE47AF7FC4", "B59F424CE3388B73A01C7279251C7854C664803D834EBE840CF3851B922071026DC17B967F06E8467AD73F8F70440CF20178BD31F8CC315AD8B3D213029D08746BA9FC70AAFFAFE2F393D0339BBF28FC15B8581667E9B43E0A1534AB70BDE8954B30AFCD4BF10B91B8BE2AEDD6489D590E0947B6155A1E0B4E7DBB7D5DF08A340FE33DEF34330EC77E65B57FEBD4745B0A07CB8BCEF0ABA92E387E2C2F80230818DB1F70F65F872A2C5580A6C39B9EF600C797FF0C61641100903B5243D847C7243EADCB69F69D75F4B1D921C72A4B5B67D11B78F84BD9682963E075C76350BC301641E76BFAA23EFF0FDA33B1A41729AF935C09C1E5257F84A4AA0AA3A54525BDF1E3A51EDDA6A35A2C2B6DA82E5C7FC989475D99585A9DCB66325B98C20BD7550871BF66979BA3D58562C1125EFF230FDC77A3BE8A7A8CAEE2F83C62688E0EE5D72D4C858624C7362A57B7C0065670DD8776D1E97F67CDAE4110E53E78BC17793CD34F11089AF317407B5F43E26424A752DA5AD58470FB8FDC193D2B28FD4620C879BD22A24DE4EFCE4FC46D7A5A4350136F43D21698AEF1B4C318156D574E93BDEAC252675BB1F1819B651D08E637538DC14505779521CBA1C5695CE7C5F9BFA3A7E68E14ECDE399144E6D514CBEA519FFD2C677310214DF222CD79C9B9F763060C48D8FC4E02DBCF0D6396F6A28BED4ADB4F69FA44BF6F52E7516E77CAA981712F10E94DAE683DF1CD858492A6B7C1FDC92B3A8A4B121B1C8B8791E18062548BDD31DC544FD94DA7BD77A0BD18B3940760A3746ECAEFEDBB6B99562E836421F24C2F2A99F686DCF9C57E910748031521E359D21A69933D3B3173D520E7B8810035140A9F30DECF99A117B8C81990473378C58D1313E29A9824034B86D46BDF15479E8273BBFC4710958348B17C8EB8EBF8581AA9D1032AD591B7AB62B3E2DE12F36BF0ED71CB0DB342D5233243F466291DAFFD75971427F37549BC74CC8EA2C9D61C55FF4EEF46EC74F37E30AE9227F9A346A5A379A386E4706FC6DADCC80FC7CAAF6164673DF6B7505C1CF8C1A2C262F13A65CF1DA6D3CD277494735E5E0B4366804A816373AA0A33F3FB3566D9811D26380EF7E049F004E5540E3A984793553B866E364BF3ADE51ADEF86D37A9392B6D0D518C0F07F80E9BCF795C540BCF8BE8AE72C0A0A67160F296E30A0F5727391F82DF95DBF2376B82EE6DD6C87C05CA191AB8F32671C4E404734D6626DA299682D9A49788A7D961B737282CF16DBCB233124C5EF4800E1F25316763BDD92F090088218C071E91EF2D76D80BD05D23C6C06EE975279B0505CA18623A33A4D94EA882A6C0C5510986D537B49BAE93E363833A8571F91C47F022A6E05FC7673149128E3876AB6F423CA96A7F0F4D5AC1682DFC05BD4D3ED478218D40A42A894DAD908A587A83299D9CA685C4E25155760F53B27EC3F3E722E46E63BA2CA0D353C60DBF985F3E10893A0BC01539FBE6126215B090F1355D211E833BC019C7BB351B1A51E5286A178F70DB39D3A8DB65E510A0A93FD717FF30BB586B8FF49D62ABD56F0AA4B01D2A8E6A3BFEA54FF1D36C8ABA385D0974C7F29B25BF12B1036E4926F0E70E6CDC93233E211693F7B315C15594790BFF888ECE21352C8FDF906DEB1085408C877A98BC5B145BB1D0945E33409EB01E243D386492BD62847AA67D4EAEF5E8B84468F70457470C1FA15BBB44AE4D77BC401BC4128654B52B2B8CA48721DBB267EFA7F0B2ADAEF8C2BE9516A42BD2FC2C7AFB8D0D71FBB8A6D7034892078F4FE50A3B63105B31451A7910", "FF81F6EFB1CF3169B63C2F2544105BE42B20467E1FF2E4204601A486928A77571247AD40EF058003E423521B4196118088D773BD1694CC83C02219F5E16C31BBC7350A023E4FE0720DCA713444B455DA085653B539A555F37AEE9357BF538E3EA6A2C3B2BD30EFC32665B597A611EE9DDBDA9A9857FFA648CBB75677DAB55EE8528DB18C4A188C693A9DA0D7DD736401DA333DDA13F572D4652D23F9016CE9D39605B5E2F341F487980331D88511836C7560B9F3E8DF6FF4CDB7F74459BA199E081FA49BA205B368B4D519B2D0ABF92405409EDF1DF280A04F398758E5511B6E6325CE00C57186A0938974207E0059B2B8BC81156E2FC0A76E84C5BBADF4FDFABA379E6F960DFF5DB82FA306535F0A8C4D925246DF1D9B8C7A711554E9087A5FDEDD656CAE74357FC6AAE8EA0C72B74BDA7BD4898C6FC7BC50367FEDE6D5261B0B72E171043C89C8C2149D01466B226F6A1F3F3FF378E34A3956C660F0FC8022E15EA68DE5DAC57BC370B30F9DDCA6404C5A152831230DA9EC3662DE701767953AE8DDB9918598844202DC2AB41A0ED711D640F3C60A8CC69BD8D9340A32330F9D27E7A023CC99D173BFE6CA4F0604FF6E5B4C59EC2E1BD4FAEB3321F755B2494343BB6E647210041A1B96A02B7755EFB6B482B3C7122EEF9242FD64D0D7BE24D320FD33ED0D4DF2756BDB13BBFB622E7E928676D228DC395DC32465E0E3480B7ED2EDDE04101E9C0F8020D48F3D43A0F756622A3DD866B966B7B0BFC1F40B1D460D6A54A45ECCF5AFC93DAF8541FCC62A5FDBE907D2DA6397B3F7B535DD8E30D400610971E4960859DFBD4A441F209021E9E4B05D3EA0C80A738F0C4EE9B03492692C543968122FE39BE1F2E5D682C1FB8549B12D6F32AD5938FAF63C5F490EAFCDA9D7DB70681B5650081B098D0BEC87013C70F890666AE984C5FD92F6939419AB0C1E981FF6EB03B1A48D708438A8F6AF81515D8C42E0DA5E13DC07D22A0CE018105BA075A696BAB7CAF420A65E38EA1961B61ECA43AA0085BF2BA6244EDCB56EAC6DED736712045911D7724E9DDED1C05DC7205580FDF52143C07960AFAC71528C1B87BFD9D21EA5DA5F9649AB037CEFA5713647DBA70A2D0456A24AFB0B55B8C859F9C9617E83E12C0D963397DDCA09CB16E22A47EAD91206E8F3D925444AB85D76DE73A43AA45BD3B0412FBDF254CF273E5F20F6BD0D938E30ECDF159120BFB28FEFC0FEA1DB898D5D1E674452DA86C9AD4AAAAFA07AC6A304CEAADA8AC82870313BBD56E746E7C9C183EF5B53BFB5A374B955D053D1CD7E8EE25108BBB8F2A60663375832213D1B9064C9F12CA77835ADFE28D1A5E1E65FDBA45147F052948A507180EF21052D5FBAC2B3F4E46DBC4ECC7DE08D6FB3B6162432B25EEDA07911CDF4E98A219603E19FCAA8142621F546C898181E1761AE7907F624A5D01E36612F06ACAA157BBC316E9AA7568E359803A408B0C36B4593DA1B4D4D6D1E6AC290C90D19635394E10F0BE0B51165777517AF168F38B702DB2BB43ECB3DA55D9CF9E8166D99B971137F6845653B8CFBFADB778E16A8F64BEF8DBFC6DD4F6F9093FE629C99585D59445ABC30DCAD609903A26C181FDF481642043066E5B0561F13934247D19975F136C0E0F4CD41ED3F8E22739FE2D88358CAED503D7C36FE755ED34B9EF871F2323AB593A0AA8BFDA8DD3D86304E206E5B4FAA6B905751EAAB46FB576C3AAC9387E38A02A6AF8EC72BC953C4831FED1337EA65241E4D94F90A0E99018DA735E1CD4C835AD9F301A618395C8FD4C982CB5282256F8A4894", "CE812897E0C0F7BA13D73227DA8D57F576A25F233384DAC16B5F3AA455222CF8B1C3F0C69F6E1EA86C6BE0DF818820D7611EC41F6078EEA4461C336D02847EC3C5644B85EBA26B68C5927D67E36BD381F8100B6BA90852D529419EBC8118A5354706D2CC769C2402E517A86809687BA7E0B1940A88F0B2586484EB7D1B63E119D489A41691D0C1A88543D43D8962D17FCB8E91A6CBE2635F4D0814A8C9A4DCD7767CE7D62E8BF17117A6650E3E8933DABD4CCBA43F40ECDC46EFC541CAEF6271E87BE92E63DFB7C2E5B7D7D2ABCD56A0A19E3C9F75894860A850029ADA36F990DAAAAC5AF56B157475EB18943D7CCB8D99CD14813A27036ED1F4DE3234BE28FBA413046A26113124B5FEA24F4074E991E163AC879520669ABE6B1A0203FAD6E4082CD5ECE201A86EC87676E350021FB2A1E04AE9B19A03152F8244542B4D21B4173D05F159EDCE12BA12A5767363794DEF4D390F56208EAA7680AB527C2035B065DD58AC8182BD5660DF75511EE1E0F407F4EA72AB3FCB028C82D8FA3003B034EFF4DC1C179029C452BC4B4D75AD02CE9E393C15872F8D130AFFAAE9A95640EC68771EBE628C42DA59AE4AC2E9156534430D00164E3D2D28665BD2DE6AC1482EE3475F7E00F41078B672835B435711C560166CB4DF17B56884C8A66DCE5D4B42AE675335EF457AC20E4BE7FC32FEAAF7EF4CAD795ABA7F9A20C6703E7DADA30B63CD6CC214114242C81A9614712271CC05867595D9938ED557007713F36D1A44AD2285A564C9B242AF6BE9979F7C474385680FD574D9D33B8E2DBC1318EA71977FF83E8977B93BE3EAB2401A136E021DA182B1AE68007FB36067507FF6900AFC4743A9A8503B7A2CEE04A1BDBE9D661691E5E8C6E5568D16F70C15D156F45DC41199A9C67FAAA36D8CF67672717ED0124E996CE855392F5A8BD24EBCD644AE0CD5B1AD2711200130AA4F8D3B4599AE660A56EB6E192709CFB8890510CFB0195D7FE794B9EDBCCB25ABE6F3B6AAECF3FCAB9ADD6D270D3D5B934C46C8D6800CFCF99617AAB8192C28AB627EB0D6234F7C68F0F4241662A9F062B361FE89E92BF9254F823E4164AE54661C2991A56C4AF8884DEDCB20EAA02D3097F2D5BC45FAD616F2DE3F37FE2DA9CAC838ECB3BF649AB6CCC38675126381561D546B37C743241297476497184A861ED1FCC75BD508915AF39752866B39F1BF00799F3B254C6710D15F5F79E29766E3EB75B93CEEAD0F3D454A3A0A4B9B88534AA91B604424CA1F9801F7F16E0A5489CEA18CCF76537CE33481328C83F3205B59AB1BAC1467C56A28DA696DF2B08CD380049C5E0FABC6AC8C5C50F9481161C1D60B0976FF459B2C11679DF8239AF63C1379997A8CDD47954DA1A9ED1606A3D1D2700A2B9B0C9FEED839E011D52752CE543ED224E5241340CFE1219A1A0117E033F48B262A6C83FB13BAEBF036C2ADD4ACC5D1CD9C5C334F4EE7D964851D9A5B7CF5A38B3C1CCD6DFDB5D1AE3FEAEDFEB72A25C7CA779DC4602FA0E6D8C4B35900F634130D48BDB8291B7BA751256EF38FD6FF0D5662C1691B825714442F5B633B30514058C778C78BBD6A70A2096CC9A375AA99CE11E8FE4388ED8D403EFDA3E604EA77820D4D7A1FE7C51B73F286520D56DF828B659FC636DE3DEC09FFBEC46FC143D943A09634A91194D77F0A70DAED26ABD3F6B51457EEC61F9AB544F544B21A1284F0E70D75DAED0B9D0FD864CC73236CB64EFC7C696882B1B408B6B02F35EFC4B5DCAAFC600330C59B1338DC593BC22C86A1C4F16D72E7BD622A3561F60362F3612580", "DCD55CF8406A7CC9BA0A5224797D74777689C4FBC0D202DEA8B9773A0F20DB0438BEFD40A996EB2E3F49CBE2E475DEEF73F112FF742269A701AB43D8E47EF94DA4056086D86B1FAD636D89929C60238133A5B61DC4B7F8DFC765CF0C8C7206F3E0DD3DA13407CA75EA20F172AC38C42ACADC946B3B18BBB30DF871905777CFE0D3BE5363574D2545D0214D6A43E2D34B50D7FF7D9F2DAE7053736B71FAAECFC2C355C1DA645A995981E1D617BDDD14EB9AB230D10085DA1AE55D1C9E55C225997D128CC2393D6E5BE9F1BDE1543DCAE918B38AFD5FAE6031E105BA12EA4162F7E24572688C54291A61635C9DA26BB367348473D4DD4AEF9A5C4E8A6512AB149D62F625D8D45576FAA4CE28E5C3D52D293A0D5C48821E1F5CDAD7257C97B3C1A6DD83A4ABB55F780D09964D4B3940D36B6709D00094B89F319E1C2CBBB3EC33A6F0398880B8079E6A39DE697D76803B04C230EE980765604929D60733BBB6382B4CA4B13AD3FC48AC9F944B97133C5AE6C3B9D295A760D786DDBFF346C873C2DCF3D2591926116A318F63835783A33A17C452AA6C620284BA99DEAF023972082AD2B370CF3016F0739103A518B25AE8D59BB017C8199ECCAF3E908F9F144C778E0F5F47FA06FE8A22E3B2CE3493EAA8745478D653F8D3711F832D9212D060A7F0B0B62AB9A3C9BF012B61A9B5E6DBAF4B48D9031250419627E96076925AF95E2B238E8CD227A0F3D8C9C3BC68D5990952D6CB62803B8D193FB06120BCA9B195E92B995B86B92C455A6145D3F77898E457E1B938183E1D76FF61C163057A4D70697507BE020CC28BE6527CE306A5D2506B86152B5E3B954D5A660C79CDAABB2EEF0D135C0D4AACC7FC3EB5A3575D95070B168FCEF4F9B36FC3D55B84DDBEF10DF6BA659F70CB2AB82FA001D51ED0F040F9DAD4129C324BE8B44316C0E3E15B27C2A8D54A948585834C2DBD40337B61F58F3AB99B3303D56EC1D30ED82F29CF6A68208B07DA120AC4073F102F4D796E38628D344384551810998F6211A082BA225A1B7D63C9A3E8703DD945BE1D979677FEBE715396988A873B88EBCB10209E4DAFF939776AD14C5DC90BBE9C1A57581A145BE0D4BB47CF50721EFECCB50C96E824DF93D675B1A1B4D920CB1EE82B0369094DD84FAB4A3FA94F152F87525ED6D17A800EDB1BAA6C13A2EDB5C9B7C5A82AE5824AE9BA63156EDF78517AE2B357C1A1E8EF6CB12DA415A914FB69FA633527B8A1659292D079B580DEC210231BCA77465BC6A9516F2917226957DDDD9787313FA599BC2BDD14DEC9DCAF0F2520318A85C55DF40881FF65E4AC21F2C9EA3CC06651309E1F89982D45FD6EB5BD588B647A80D27433EF85080A7AB2FFDBFC7D2B54B215E7D27A333D4942CD23D53142F04976093CC0344C19F9CB3A5A4D522E26B7E2C1C85C1ABAE1B4A360945A46D097A1F3676A80E3BB9CBED0BD363CB70C2B250EA053B183CFD1EDF2F6A211CE618F70EA1AB535E96CDD0B2FAB7CB7F0396B6DEB59745C1BDBCD452FFD70C95E45B88325A82CF07EFEAD7176FAF04C8C3E0CC4458540BED99ABB9F52AFBE48E42C636DD076A37C07C8E4EB6830FAC011936EC047F6D5B5857AAF90F80B5D33B502A116828BD27E30B3A69F351E22D943A482BC6BC41BE7BF941F3AA7BF85A2BA5C38FC930680FDE5A4E174AEC4156A755E7650CE488620D6CC62BF9D085FE1782EADB11541A5C19C9061734513316B9CA608A6E48D333A110B57BA5128E9331E6266174B85F7B7D1DB264361B1C6C044A8274A7C8DB19C253BF8DAB819E85130E920", "79E4509D63EC15D4930F17DB3EF8E9ADCDE82C9F2308A0C9F77359575876D90A9CE5ABBBFFE09B8E145F35C7E91B141F66F74B3BA923D9ECF863A8A455086DAADC247872C953476A85772079783A6F37C964AB1788479175F7B4E9651C7DD5EDA94F8BCFA57B3542788FE9547E0A444D249976333F99710930CED2E93B1526A02BFCCCE416F0CFAA631B878BF23E41F95770315F1E169EF22B9DAF0E2F269E06B03B125CC6F20D2AA9A13B98CE23FE3A7FBC70CD05496ABD89ABA5BF58FBD8D88EB9653963F0452CA43CB964F7B145020D637905E8D26E8CCCE4EF892BC48381303161644FCAA1DB9C4775E8F0A6367F1A842C3101C9F94730F6724257F2EE1657CC93950C9C1F20832DCC11E0001AB347781F21DDCD4786234C908772B553D7BDF4795FE69D7D55E950D4C6E2A76C44995CCA5C9CD539ED235CC55DF6A004C1BCA852C2813DD17F333CF67711EB8A5DA439D73271272D0D62B34DD457C7412A26FE2F4F23E5F5AE8C2F91DDF86B7048A40872AB7C728B20DF7AE2A0E8E52B00899C565E68390DFC83344DBEB7257CF8031664FD93DB65738013BA234035F11B611DEA4F74B1000724B2682EDA9639C11F4F4580683DDCA2D9159F637976293FDF76AE2AC7EB5203766009577DF87D9DB654ACD64229495A5B4A94AB3AD8237B9CFA2B5AB6B7239A5146C777C4A3CCA9E1573D96A7C1B333F11D284AEB55DBABE6B4F12A421FF7BD442AB6B8A7FC33A2087886328B33037EA78D9A7015ADA2C8F463AC1FEA8FF3EA886823063992176C31152573C10516BE386CDF81A6568D8E3BA2FF195B23903C95B16277BD60D238F309A7DD6BDB4ACF4541A56DF5D3D4BA4078E58641C0453B1BC8DAAF6F1DB28836D6FBA3474D69870E07997DF4541BDA5C62291A3360F5C5840752A25CFE366186F7E4E21DA0704266B5C14ADC1541E463917D5DA677945574F800BF47FA028E82200F9E53C48C887355D9E3CE5FB778341A356423D00B18D3048C92A80279C2785AECAE9EA57F828766D6F953AACF93FBE8A4C32C7FC9843F466141DD018CBD05ED8A16E27B43C5C0EE16045D39CDCC7E4A27EF636408E968B4C99C895CE77288C819701EE7184DFCE889328E4CD2D8BA7BE5A1DAE50E36D562BF2441B56242EF9C4EE63022F88F0F77E6094AD7DA93F672C06B6BF4ED5523D1DBE7D8F13892BF90DFFD5D2A3BD0E9B56EEF03E560BB28650D873116C0CDD00148C90CFCECB6BE9C4BDD7603B5CE9FC458431C00B1D704702B552D847D0C89265D842FF6599A150854848B730AB33CCF2BA6533638860BA564540C6678061CD97BE3D00B103314894AF13999FCBDECAFB5A895671DD1ECDD95C0C94A250B014CBB657ABE3028C8D6CE436FAD8FB7BDD12AA2DA32FA6435889F1B8C16EA8488FD6AFDC7AFBF5358A31B23E0C05E315B60F180986BA17E26621D92CB639A0B815E65D140BA8A68F99BD42A2F428345AD3037274E515684EEEF018BA41A7B0138D7FF2C0B838823192FDEED577028052EE73D65E92812E4C33FA3CDC11234F47F702AD81F3829ACF1910B9D00167A3541372DB79996FC8F4B15F2A56B272B7DCBC4B074A36543B12B3A5396B0635068B62F81A56E33B40516A376D4ECF7BEA4F8ADBEAEACBDBE23F5F311A39D90D0B11BCAD30609F6CB4A657CC620CF8F727E30F77618E5870F72EDA78EB89399236F7F5432560049262E29A2979F832F2B57CEB25BBC2405A3098CBCD3CA0CDF631B37440A47D316F4860597AF78E5ACEA13E8B8B5420210D7BF54B1F07A433E7A2B193D7EEFDB2288", "B63460020483CDBB47DB98D8D720FAD57072D41EDB5FF2A2CF65DFB70ABF3524003842F7BCF9D36F8E187F86B864C5FE0181E5E3D33AE11A50E67F56DE93387F5CA7D1641CED92F7195F2ABCC7B32C6C7BD8AE561E36A6359BA6171726A2F9B00C7655C7E346310C6EBE10D2D470BD5BB7B4C88378DBE2352AA45EDD728F42A3DF3B5E80BB6B6BF55CD663203437F575F769CACE66809FD25933204387F8C51E0A6B2C4C6113DD45D31AD7567C9B924D5B10F124F6C1CAF3458B3B84E9E42DBA9AC879E2D711ED8681207374CCD299FDB7D7004678D56FFFE0CD34B4858CC0CF4F611D8EB5B47768D69AA69BB1875E9C397EE9453D37D4983359393A02941E772F912708085F2FC7211DB358EA5D4E00263E14A1CA3430A6E6FBCBA94CBC8281C356B4114B0E0B67B3265D3E1B9A64B1D4BA5501CC0F6E19F56A7B3B1BDEFD8018340ADF7640C58FB26ACE46B788FCA44BF228A737B02F160B0462846DBED0792B27FC6B55757BE01FEAD3655FA9E992485E2B29321816B04C2BF079BA5CD01CD7DC0CC8CFA471FAEC74C95041B7C62DC9BDFD11FBD4D3B7173A3A92044C793EDB6AF4DCF760D38D3D412B3B292C74E08EF4B4515B99A0D4A167D9103C3E776E213AC2C1614B432A8A7D243B0EB5E7AE82118DE996BB55329F49ED4A7EE738350B565F50CCC313DF274EA203757B372D542D451DB960DD8D7F0C5E532AFBA105C7963A39426732E2E30C68317C4CBB3C10802C5104923E9EAEC89C6F421B8EA3D5039D5175F1EA854971407C7B260BF57FA912DF3829BA91BEFC9A7A88E5A289366A88E7E6C5C4D4781D583CC15C827A4FC753F66C81B5095D51F3069AF2E3BCBF01362F118690C35D3E6B5C0F41F4A4964226E4646DBD948FE2D1AE837C0C0062F77A40DD02371EA4B69BFD02803AC3AB972CF450F59FFDE724F79DDB7D534D261A44DC4BED2A47E78289BEE615218D1F861896AE5B07729568508B0E35F82BAD9387B52E2243E456C2DAC3F82176E4859A8288FB8E2B86FFF4BEEF93D9F677CCACA1E760D045F28C819A44F5F678E61585B74D49B1F12A9B28D4056CEFB98845385FCA12A6AB0C86DAB01C7E8BF5D77618F797288706F18DD71B33F909CDB15A63047D0EC462BCC02AA7E6D4D4D5C3D0C5FA2C03502EC51D781E8CDBB63A2578CDD9116701F7840D6A268DB082223F3D42376C5D796557BDC568791BB3A5BB6A9F501837CAF0ABEFBCBB500868EBE0FA0184ABFB927A414A87BC3A1903DDFBAC369B77B5C9FA203C7F6CBAA7BA826867CBD37AFD20E32DBCDCBBE7C12E3974BA0133B9ACE768AD4652C3FFB01D7E2F4EA026D543B2292419B10DB09C47C110005D667EED5D066D4634175B58F4BEA53CC39F2D1A9623B7C9AF2ED29A37891F2BE24418746A233743BD340256801EE39E7C05932AA41B56F7DF4E479A365BA224E94D72A395741D3D8135208C96AF089FE2FAB29B9D7DDB02D149275727E12A2358F4CAF9DEF137397AAB54DF78F5CEB17CA323B696C3267A4D2A944C65B2E8F542A2F0AC3DA7A9D6F2AF073FDED7424942B700AABA291FB8672DF10AFDD154218C0B0088E84486EDA5F21615C06770A2607E93A2ABA60B864505434ACC6B6BB15BD00C3881E59F0B481653BE10929E7EAF4A90BC181DF76434C08F3ED37D862038232AE6A5C56F36F98574029AF4B4A280693551082BEE4CB6DD4B55E00AC4954F2A01129861DD2A70FC30FCD9073FD2F45B31CEF9724E673032D0C87B2A9FE7706040293B6DFC3A3197AA58A53997BE5A2A763B027D5E14152774E3FFB8", "6D562B96C4DB6F8783C945E358693B3D99B7D8E77AD50B7FE9F5176AF257ACF63E037ECE9FC071CBA13080A08E1116AE09151BED458CD8BC9DFFE5744E0CD2365293B365A01D30E894F8616AFDB6115663FA15522C8CFED9E6644DAA1AE776E0BB2912CF584AD1DB53E90043B1F93D67D51B1B10179F0FED6EEB52A127BE857341CB5A223864C02E4AE3F3902C90BACAFBDE2A42D73DBE88577F871D9C2EB9885C7CEF0443EE4A1C449951B24764CCBE716487F2EBE474ED6DAA65E393F1AE17E52B75EAFC245A161AA30CC8250631DEDD2B233D202CDFD1C3DB64FEEB2F515F2568DD7C11DDCCFCDD77B9D1182A29AD5813791DD9987BA735082F8A669F38DDD84EE7C09334AC732849119D769DB8CD79375D1C8EB4E051777A057A4738FC4E06ABC70F8FBA6B52948F91FAC2F2E248F0C417E2E727C60872F905DB2CCDCF15B2363696424BA5B62E98D5E4B51ADAF38DC97144CA32BB6DF129EAB07313059C725051883475E30B25C8CEDC63BB517319ACDC1E0ED86D5BC5790F11CD2F4B2CD882345706A4CA5863C0395C3159AC3D7FF8F7B5F7B59907CCFAA53EDE296087B04FFDDB0B221B3DCD1A6C64A591729A039C230CA52C94ED2C3118794876F7478E7968F962004F01E8FD0546207A64C09A2292376F77D7789CE2CF04995C7EFDEC91B5F13EFF915E9158F6202D6A7B0B97BB1FB121FF99AB12F56732E9049A2C33597A308A47FBEEE3F530E357BA6B7C98D58114D89C0E9599C6B17BF409B3B63FCF67DE29FDEE152711B63C02F919FEEE1A31636E36ABB4F9BA607020529814E06AB2D8E4FDE4D6C1A0D709ACDD7E442B1EB65643FE7D9E8D89906915AA868E9DB2E070CE6511EDA0506A19A731C0DFE149788BCC155B829D52E2921430566F9DB82DB062023BA5FF61FD26F8209421EE8C2C22FAC9F58059D223B4659A23BE538BEE894015F8E137849280668B971AD628CC57ECB49701EA1F0CE2D07B2D7D8406FB1D2E010A51C02F6F8F04F38703326711B85ABF70D46D947A42855B7F13B79D39D222A3578D6336C9B8A69A12DD38184EBF9DCF787C0D7611AB4176294C239B60351B62309E5DBC92BE0C0EE1422D9074905131757F70343CA00ACF2CF9DE239D8C794AC868565FF9900A1B9D187580884D509642AB4F6331A89FCBDB367067712B7B4A7A32E266D7FE571E4474FEB5DE28CC0D480D4AD11D0CF6B599A56925D68C1B076CC57612290221AAA0F91C8F7D21EAB354310250A224BC0455C760F62B2981ED68F7E10619AEF954B79D0D0DCF039DF951BA2245DEC02E71968009ED5364774644E995DCB33A41D53B3C9C1BE952449CA8E671E15EA888789CCDFCDCC91E0ED093CBFF538909886E27972C9D262F5E1A481B8F483BFB311D1595F51FE1AC8CB43EBC92C0D17868986B6F2BA8127BF95E159776570E273393FEFE203FB079780E675BD62F475CC0D1DF76CCA50B5145565C3615498DEF9B7BD37887BC6988A9853B4E639C1BFB61E32954D1166156F944C722444C29AF577C12F567E568BB1BB44A9D0783F126D6A079345C3842AD6240F1740585102F558C5DB6C22A057EC2D902CBFED926BA5F9C298E6F9118B9D2B446A47E4DB2F4F1CC30E75B6A1B67FDA687E672E7136AED3E02F8CC346F520E5929526B6E9126450E708D30168D1A60B41D19949AA4BA5CB7A691DB90A7B5040B01518FDDB6035454280BEF79E019FB96D899FD97BA47D0A7EBB39A11A84036659598294B0B9A905CE2E0CBA0E3AFAC85FEF2CD3446057ED5DF2FC389D411CC3128A8DD23188F830D90", "3A9010CF2726ED13F833686B6C7796E87CEEAF4A99B40BE702CF35774B6BBE4EDF528C39A8FCB1B04AB9D25FE6666535391A45D5DA45D8073F705184427C3C5C4225F66F041151A22423A1F5516C744FDA91305B2B70BC11569416ED456BCBE6C1A47A5805B464EF6A645682D88D75E7FCB458BA2F9C44E14589D2805A904AF02FD3693DE69D0CAC00E058B26277018C3339EDA876CF820AD6C99149BF76A8C47ABF795EEF76D55862F4A88B26A73385589048B2E22C542461AA9CBB41DA58C7A5A32047B9F85426119402E531B023E3C8C1EFC7AF70D3D553B50408AB568E4D2EF96E5FAD8BD3EDF830FF2B12829E97C5C57927E69A438737B1920553F2B921E62A3E25331BD3BBBF99C9FE1912E0A84B15EECAD16B03D059876B7B02908C7A7DDCCC51E01213B4829D21C9FE65AE129F3B58B51798C604C9A2D2BDF7376FBB50732D9694E199DC532623309CA43D837EBCE0EE9F3943BF57F9ECAB4D939B2AE599FF5CF5370C9B56B7B9800A651FA64F854962A6D84E1270EFE2A481D399DD3F35C9C43605FB03315259989C4F2EB41B83C62DC2F7EA15B315126D227A0CED8B626022F9F665B49B8C32A10BBCEB0AC7FA80335A255076BEEA7E5BEA0472531B22E07A6579F9726600E661B389A221D2A6D2AE9E0059D24874BA5AEF82B1B53734F0835FAC5732FF0AED0F092E06EA84B3B5191BE3D226A41A6BC39AE3064A789A8DD9CED68FC3B902249622576D4086D63B924CB0C309F75F1FE9A62071FD2629E927A3ECCF3B575961221C5C1E76D2D6F1D330028F262E671905340C7621150074C49D9D3D64563E4E6C8B3221EBDFAD5A369E25DCB2C95A1E19D05B4ECB8E605BBF49623F6C62383A4ABF25FF823CB5F924ACF6D6173BEB850C46E0CCF6AFA873096046B7CE53271A33D18BBEBD6452D1874E312B9DD2035E511FA43BCBDF3E3A9EA8C602EFF6051AC0062232BF8A2C1AAAE76F0C12ACF4A290AC376A0DFA55BCECCDDFC1702D38F74BCC3FDB3160C3F52518EF2B1E14CE9CF22AE5E4CF2DFD531057EC85896708C8BB9D810B7D258AE975D678F19139A760F5609F57E2558E1AC0B6AACA4636017083D25190CECF73D29E2F7B44393D274074A68570B720EE6CEA533AD788F9A7F127BDA09D43F96AB9863B5365C9361A9EADA698F5A616D5EA0EB9F83B0647698DAFFE659979F5A5F086FC8B59D53C737E2D38EBB4F74C5CC6429B526FEFC9D1426969AB14DBD3F54BEBF25A5A8846874562CB282B2BECBECEDAF015F41037486297B30C905572211F80727CEF292CB2DB118157E666B190809A10B177BC63158505BAB5C915D37626EF7CB011041B08B03FA92A40EC3E39BF9B4D7279A5D1E4CF38377BE6C00EE12CFB4549C036E75240D3DF9FF92B50954F461BC25BD155AF84316A1752B9F1834AC4DA1B1B5A4C84992141CCFB0CC6AC5672753F4877403FC3F4A52848786C976B18CE968509A4014F3C69A77F9CB4915A1E389C1EA74A05DC08B6A6BB1BE755365F1E96E06FCFDBC7210099601912F55F639C9C96F28460CFC392C855CB2D3986989FF85A0DC7889AA2F6AEBD3E1AA196F97A3C3A0FBB33ACD3BBEDFEE06606DDAC5DA26290149E6361E8BEEE7F2400588F3FF853EC85B5F5742DE3547F362B0A094D6F935DB0A2B5D1480DB2CEFB9D665887F6030358AB9E5B26DE8955B188C39D6B146063FA59D1BA260796A2DE8CDDE8560915F07087E84589340103CCF7E1B75AD5BFD209A99C429A52E8D4FE96EEB9A32A4CD24A7940B446003E1F8296EAC6653659CCC3C85E01F7A154", "59CD72F81F8FA04AACD73E9C815A312E8C02F1C1769FDA17C16350D9EBD4F8D10F248035EAFFB4FD67933279518E3BE9E1807288A9D63A6504F3A31E7DF322AA1B2A9ED3C23717C0C5B134D2758666CD04C2FA8C1EF5C1E58870C5EE1378619851845BA80DADBC37A764BA17E6DF285BB3DDFE31A56D4BAAB0FA622B8D3D24B7F91034D2F773FE578C874FAF5204F3DDB90B8533906AE05834BE67263447FB4485BA069EAACB68806028CFDAA8FC6DAC6383837F9A059EBD1529A92F98F44D55AC06083D6B751FF8F9FC5A6444C1A7D346025AD4B67EA12439242FC02D228CE537AC9044F6D193E0592684FAA4D259DFB00F5F98DCA9FAE4C0D5F0427C6936E501148C56EAD1817A81DA30989D0D9C85BF8D9972FFE67AE3DEB2A8959D63B3C3E7737A1851EDC8B313D75AA7838C6F7750280FFA6321CC9228ACC596431D72AC0302582CA56C6172599F30D0CA04E71F3FD7A03D467E37A8320CC0FE3AC72099CEF7C4265F7F18E2980168DACF9C058E39EC9FFE1EEBDCEA5F78D63BB18BF054465179401346D4CF8927580B9E0370B2D27E4C6BD4687CF0D4348B04BECE8424A42B2CECC668DF9809F580BBB3F3D59BFD96DC8C2E57EF5D2989D6DA54C04B15F85EFF639253DA3301FB6E6F92264FE48968C2C2CA6D40C54C327E0673BF769CF116DFD70CE374BC447AA1B121827E5BA510E387974B19B050D9909185A514BCD8CD374EFE2089290D3DF46D088D74F556A8E5F36B08AB17E54143B6FC374BEDD6FF88AE74E71C72297A31E13D1F668DDB455DF00DC91DBBDB2E96ACDB811ADF7E4C1C460D8FF1FB03BCF95EC489446A8DFC5D2220E58CC298FBB7A9B8EB33B61F6461D77CEBF9C36BBA32B34998B7B9B7950E7E98857371003F40279FC2623F716B808912651E55A04F9418989047331C454D2AB04FAA192938209261029FB3C070FA056D2AD52BF9C7A0535FE2868888BA55CB9389E358CEEC68D7A0E5505FF0DE4263C6E47406EEE83E8C797BF58EF49F2F8BB4EB3656A2636A5EC604A4990001190A8A7965A36BBB41019EE19C8EB45C10173B513F617B9688D7102ED82E60DDCD080233A7B3B43B641A3282C4AF6D3F01BE30DD78AA184B9D565F7B1F927EDE214E363A18547263412EBE35E939942C4B5EFE81E439B325902EDD4D2AC06340296D00DD5F0908F5C8AD88049D88282D0F2DEC28D133E1D4736869C352A7CD87D8A56687CC25D5517A62F0CA5A023E8709F181A0D96F1154B3D7517EC5B076B7C59DE90A223B96AF93F94B11EA0EB08A280379BE028DC494C296BC46659CF9C26A3F8BBB47E063AA4EBCBC9873CCA2866865CF45076E6E642B8E3BF9F4A3F9F057DCE71D4D5F3B621D8791CA5333398ADB31486D22F608E9A8745B9548EADDA654F1D4BC042DFF9B3C21B15AEBC37050864E4275D5C36F301D533552D119039242BCA25DFABB524C971821B2C0EEA602A4C02C6487DD113DA4DC5ADD7BBBC325CFC896C942682945A1BE921FF71E6D76FA1E3345589B53C549BD5056FA01BD688D0A9011497C0DFDEC20210BC7F8B713C46A100A396A9ABD9A2BB94E5455793BFA28E39E130645973C30FDCDE52F6C272576291F0130474DC2E3C30EAD54818E9F531A538028DD40FE01D993DFCFF82679DC3C66850528A173FBB534843AB540E21C7731C65044D697B42694A1654B3572FE321F61E98EA22171580F5DB90C997D0C9C7CF44D174E8D24F500832C158278CF62BBFC6DFC46AEE5DD3F8906A5770C3BB6CC3B731243974A76C0BCACD9EFE37E52CD9751894A68AE3596E0", "C0211AF7A94B37632C667AE5097F8B5992917210A515C3E48276A363A6F5696AFEF5B3919689CC8F21E077310FDFC5A58D6BD428B8FFC678299FD053E7C016EF3A154A41DE5FD3C3BC5070ED6EC8F16170C880F82EB0B7EDED047436E8FCD4E2290F450963133226D17D7BB99C71097978CEFE496032EC8C6E73B99B05A33C4F5373BB73CA93F7128A9818197E6FD2BD88451A4D8905214157C4259228DEB5F8B216FFB206E4EE1025D3E16987FB6064147D3E99CEED73112F62D513C8B6F19B582D0F6794B307E8AF97354573C758AA95AB0A926386E7D288D74F9C6B0E2C71EAEBB36422C2120511F5F3D2B308674AE355B1FA1E72DA55098AAE3C70CB1B85C902C103056E00EBB70D37F08FA4D90E860C74E841F4E99957B3097ABE602E65F07B8787DA172E8E9ABF9ACDCCDFF6FEE2F902082BDD49547EFD95B54C3B8F6C6D243D07F16819E03189F0A3F3E0D05B3AF3EC92CA08846FC909E809CE9C30F1F3AC6FECED9043245A00590CBBD83EFC41C9EE3CBD0E328426F821ECA32E0E84A8B64F200DFAA5F01B262F4E816A90AA33A2984AB8E269B8CCF61E65094FBB7D10E11F9E1022CD97F17011DA53455B24E4ECD0793486C1E6D4E3BEA94E6DC9C710CFFF30CCD48E43076D763957260D1ED4F7C41EFA0B7F78BFAB7A9274E932013E605246C36CA1FFA003A4B24DAED61D15327BCA1067ACE961E718DD5E57667F5F33411D17BE093A9D7C6675097FC551014545727BA3F19C5D5D23A0922B11C4BADBF285A17EE96C916238C1E1DE8A0D28FB79E72EAF5AC37710B4E6550CEECA2F22697DA18F858507CCB95BB7F25A0056FFA55EE9564782C6042686195BF56901D4ABB3398C557CD47D30EEB344B532E77566887693CFAE50CE8C0BBAA204465FF33456ECFBB1B4DE4F8D6E2F3E8A84E90410EE3A79ABB47D40F4691CEF37E0BDBE1BE386098181EE36051EFFEEB0F5898738E400D44ADA4B3348315E0BE88C4C43E8CF95CE8D56EEAEADE754A09F170D3ACC44DB101037E001DCFBE2C52DC32D040BC27C1A55C9EF5D65FE418F3B761284C461606ACC84D36B9A7A3C9353723BEEEC80CF75D84DA7B2533F844E81EB8835289487CC7EA4EB277A4BA4BD50B59953E3DF3EBB2BB69D7E148792DF55D429B2DAE9B40B00FB14A948F2797B7488EBBBEB4B11880F7D3062D3C0561D7F6FE715C3BA6BC703BAC33C29DD87EBB84C178BA09961F2C10D8CCA42BFC3977EA66D039FC24CBD2A7B3316EF37C0D0F98D3CB8D5E4708B4287FEE6B656F1E300260D5643E9AC323A7F0527A7B98174AFD3277D35D6EC63865BD4E816351B8492474116E2426A3298606039280AEB595293D18EEC671E1E139EFC7936CAE3056F9698BFE95568D050F281F17F2CD65B62B98BF36DE469474F440E27073613A121370C606D5729DDFA12C8C400D0364251D850D90804ABF000ACE57AB195F6EE24163E8C443C8AEB641AACABE70675ECF22A5B9DAB6DDF0078EC89F2354C27D296411041432AF390DC71CC6141B52C54FC778B5BCD31B55EDDEB62EE364983E97BBB65EE98863AFFD2310B482AFCC28A2FE9C7D8E3ED24D20FFAD1F5B0AADB344C77F89FB88BB2FDCD64A77203BC331FC23BF78E284ACE3016FF570E3AF32ACDD5BD5E7B59115950CE804C231AB1AB80276842FAF80A576C9A3148F527596252E2F9F76FD6B4C03EFCE924A4740EDED98B290FF138926811607CC553FFAD5ACE0FC24D7FA1D7F3701A8E0D7F614941C9FB9215389CC5EF6D3CAC193EB15798CB1FF2950E2E0EA96A6B9E672CC343A7FA9C", "28EB964EC60708D60D921BCA637AF0F0E19E127E0E563EEB30DB02F8FBF2848CEC8E351077A8294AD441049000D2A3BD101B691C2F1DF3741B8BE7DC57592C2D09C9F368010B4B3922A8A622887C37E959C9AC31DBE89C9EC9FFC26EFDD9C49362E3400E660928BDD7F67C6E45614ADFFB96622390AACC03F1186D18BD11333AF0348125A92EBB40370A32F5E383ED858F6720D43633A9A3E3559A0ACF5FCC326DF117AA495759FC12398B2E060F8C6DA823F3E58E1158B81AFEDE50B89F956D4F63619332928B4CDF5A16E0536FE7426518B1C50FBBEB4EF3830D77924BE1DB002BF2B0A9A8CD6FDF3BE7D7D1D7A3EB4E8CEFF8BEB9E2CEA9BCA74349D67413E7D05DEC014D1E6990062F0C4CF1E4720D45E23719D748D0C9BE3C3CA444E357F181E44EE841E35CB5207C3F993CF224A4A90EF5E3610254EEC4C2F2EAEFE041E1791518F93BE9080634AD5594B98C6D0161BAD23EF1403FEE6FF846D344BF0B42A65762804A33F00F12D769B3C58F123E14B4001CC631049F6E35013DF92AA50F89E71E78879A9B428341A738CA001E4233652802FC16AE2377C9C0B5650805205D31445EA0AC0F82A109E5F7C0758EBD5C737CF48D3D5D44816504D972CD2FBBF0AE566B8247F81E404D7DAB5A939AAE51375154A3125345C061CD479F8D7D9EB21C6ACD971F75D8430FAE557DE7A669C59E35DAC4E7686C53C34AF64A5AB7F6B5ADF48585417DBA3584D4552C241DEC336E5EBA84C4D295148B29FE824D3934F4D2A8EA2D27D29255988396A5C350421E2C2BD89B5D18155B20260DAED20E3DFF52F2E84E6D6CC2C040FA3D0B8726C63778A601CF95BCFD381FA520F95146292B8D854C5F057440833E78057D13FFFEEF4418E97986A064AC8DB74A001BCBF8B8E26CE9C68BACFCF4895C956666F92B5EADD27FF6FB032207FCD2100FE0DDEAAE8A860F89BDE341E59671BB0368B1C68B44B131139A44BB37EAB251A0339A79D358D73281325A594E2156E981C519419D925F0D6C8661F7C294D91F527454AE82EFF98344A6E39B2BB3E36431255E33DAA31B75E961FB306792510924C3E9B89150691BDDFB275B9128677DFEAFC89E6562FA245DEECEE2E788EFCD06C4BE744CA97693CC1AD7F0EE4C633D706AD278A46A8DBF2DAA0CCB69806912F8C081BF192ED7D17EC222392B6E84D6CD88FE66DB10B1EFB9CC7F3E4F3719338B8D6BBE47644009743829F288A194EB3F6F21FE7D7FF55F8FBFD1312AA603CBB0C011CEA377E6E2AD1541C5BF55AB73777BDC20DE77F701E7DF26728A44D881EC44E905608CEAFEDB670A261F2109DBFF79CE13E98A3519A9A86F3E01B7C3EBE2F01C657EE017F0740328B97392C6824FDF4D5820458F0DC9E999A4F878D09493D249D0B43268D44135C966B05AC8A69518BA5AA10423615DD3BD8B6E38D37D4E7ABAD0F8752A64736EB4D6656F6C3A6C6E1595AE0ADB31ADACFD6B4146F4496E739C4DC98835CE4C5E2F1FA899D4B896B02CE97822E90CABF5850321487D0C9DF07772031F1A438E9D63374373958DD9708C6BC38C3028C2C7DBC7B2A5A0CE8EBF87A72EA394FBC0046B62D60CFCC4256930BE65B22305C750B2A7483CBE0B3FC0824A011D274FCC289B8EEB9ADC5505426D8618369E0135FCA2FFF5456E480109952CFBBDA22758E14643AB48F11AB4F4EB475CEA238C6493166BF384B1DED53072D897E368C8BF8239DE53290766A4727CBBAB88691400E9FB9CD53442B91B5D421323A24571DBAB65B7EA7015775B6C8DE25247D0E7BF3DB7F2506B4384B328", "D7554B01374AB97EE1246C2DA82B0AD5BBC76968B6E058A821418E0707D596E2A7E3AD9AFE623D18812F269C1D347A732BECE58260D2E8F1399AE5BB928716865B902611DA70761A4C3DB3EB0D332E58E081C08D4AF96B1A85DD68CE15A8EAA5B95F73CBA9975924F8F9A3CB57249A6A904A33F6471ED4F389168702EDA2054B4A523B6CE189B26C50900913CBC7693C4E447CAC4CA7B783106698CBB78F5E793284F27E182CE12BC792935FE38CEAA7F659967111AC2607C8316FD3CFF111DC5C2D58502555AA589010F9DE4F735D456CB9F0896FEB163984710BCA11C5D78D9ACE6CC9E2EAA70B177A9D33D8C59245FF9773AC181548BC82C751D59A350C65C895AA79E9B57FBFA2D17F53EFBE0C490B43C3369B71DE45B9AD67C88B2A8F1AEA2F5D871970FE9D4C6D63F81647DEA310F76DE6C050729DA4575087E3AE8F6804128FDA47C1867A6FB5065C4186C47D1199BEDED29D26BF9825676FFD9A98BF91E3921A07EFC949D7473CBF04E6647390E33CF765BBF73714E0AD38C4D1EFBC3BC4144CC9AEEBA0B9B4843F910A7F9CFDD347F6DC1017C010DF0EED1A71958CC5BB8D50BBEC164E186B6572FD09715C29611A3A5162496968C1DFBC1B6A8A4E617922D152FAF2B08BA40E47AA0E9F30515C9AFC74A5C2D87828BAE5243BB7988DED81731126E4C7E9609863929F943930FC72D0F3A4784990E08145485CA0FBCD69BAB2391C82E75BC2CB2DCAF0E94A3717B6A157070C77A8A3B5DD1E30AAB09F5368F46F66575599C04296982E6AE8F8C334ED24CC58449CAB0B7660E0F2BB9D96BE515245DF9654EAFB5060D21291DB8A2D820BF372E795957D59ADED6A72C265D19C852312BFDACCA65431B9AF4DA6AD56B97E9FDA9AE4650C9165037F353D9BE92322B4383C30404706D102F15D8D39B21D22E0B23FFB0AA0F58F477DEBC4F130BF501C765295A54913A7A0190FC907BF2420B329B97F30FA65A7429E7D71E572E1BE0AB0793B606F480A1526085637BBF89CABDBD9D19D808F230AE48505CDA9ADE68FDC826682BC406D4A7575EE913B60769C3BE4D81A073C05FE2BD6D7A1C3B52FD2F22875BE856CE0F6D7A3AEA1897FCDF951DF4A86184E717B4077A25D37935A82E073373ABBA58B0F5F744CE52284D96200CD90F0A7B4A03869A93C9371B7F946EAF2EDF35ADCE873407C7BEF0A750CEE48BE3A33CC47979648FBC5EA7E79DBC725C3901D4D05BC5B804007BD46E48B424665763F028E3777FC1A00F588D9A26F68DC7ADEEAF8214B747B409395016A05D8C72FC3E838DBF7C5A222D03699897E5606433CA760C6D67C8BECAE0FA8C312C9875AE26D61FCBD3A320829B615FED0587E4225E4B62264C9B37D2D2B45FDDCEFC060257960DF6A1AA2AC0544FC333914D192A1629061730213B1455E6FD7A712A08122C8BAD77EAB9CB9687AF97A3AFC02B8F413930DFEC10DB37C385B5643E91F3345C73EF353453F34A5EADC8EB41CB098E9243E57258AE608C9FE7BBEAC524B21A0734D8EE51EB30DD6974B87FDF3B0B1E1DB01FEF13061E4B072DAF927C99BDBB7691069E2493E86239A69BA33AF82998CC1D7B368A4343BC63EACEED280415FFF40B0B61221D7D1C098C6391E5C888228045494F86644F34AFB1B191BFCFD1A29C678956DB16D0BBEE458AC6DDBF00E738198C093170FB37F3F141619E65502AC57E9042CABC72372E5FAB9DFF5E42A00EB023E44B4E536706FD63BFEBCE1C0DD59E465A61DABF566EE7216973ABFF5D34A5A62518E12E8352C61BED9348E5826290EC0F84C", "4251265EB325D261D721A84F62224701C9F564298EFE0C2516330F7AA43CC3D7090581B74C69218D74C8C6563FE276F24F39BB7998CBFB9C49EC649106DFA51E45498DF0F347DE8A562341DB34E94F286F583832E49AB38C09DBCC3B2C307188A980574461CB3C41EDFB933938F89C88F61886B60097F272E511B49CAED645190E98C3AB8AB5CDDC021F76567AC1EAE9F4F8D782B91BDBA3037BFF8FF43879FB6598D84046CA06B3C8EFE275BC61E449853F979AD6BFDF27DF453E2551F09FC1916F4E9884012BD4B946E2A65C86C609CF8EDDEDCECBE9B1DD6715C1792E261A3A013D64F00118DDB1FDAC9900E8BCCCEF9246446D5248D5E3423D859E1AA9BC38F8697F8A4EA08632983F268BF7D0BE639ADFCE6625E00229FD510A41AEE418C3AB85F5D2256D8EA4E9AE47316BE6DCF792537F28514B99BD76D098C8B4CA16DE1A9ED0F2693DFBA9B460BD842452BF563B03874DCCCD3E18B76AA3E352978473A2E02C6398438A35639457DBA7316577B0863762FC177010E0FA0F7537420C0443D8D7F51AEE4F40A67E249D678E77F17503A0A6DBEC3C60FAD140DA592082C334E3B1D021E34104A9A724FB6EE3B5A22CE5D3BB9C5E896956B4C6F7B1F51A74A56A7232E027F706EBB999708BA8ECBF42F44E41EF63A7627C60E5E75C678B5B3F7846CBBECC9A1B6EF78D7912AFF0EA56B7E25C31784DF9D63398FEF53F6193554C4D8B7A96C170A89961D2654B9A663B39C76401A439CAEC482BF44F20DD12140D47D0580DDA48EA905D409BAF5BCADBB8394333B97C0FD9501AA4B4BCEB3F041520422530A09A9B24EC04206CE907A33D0A18CD5C1640CFEF970623B1AB2B7EA5342B6F38C717416C17545D27C21A8F37AC2B98991395D3D170FB2D03C6B152915DDF9CAA12B5EB19E45FAC4CFD4ABA726A723237A6488773C05D0D38D38D920C6E8F2D3476B06B40094463CDAF380026BC36B8EF3DED6A01CA89E015A0B75BDFB97D859C620D329C9B26B1DBE3A3C92D8510B060ADF4151AFEED125ABC0D6FD3FA9F7F3C67B6BAF14A672977F2052A84F0437027956AAED010F63471C5848781BEF8F2BAB9F8CB0DB00253E2C6FD30D2A0794FCEC489376261CDD407B4ACECA129D87FFA0C76E28B9483034A40F84EA21E06C37BBEF2987AC16E77E021D29CBBDF077A912B89CEF82FF0EA59F7FDA55EE99F4602B5437CE71B4183BF28BE79327483898C39D09DCAC59C3CE32333BEF4B0720B30944B9998A01CB3C135D53B4A76FCDAD1C321D39D4466F0BF95710FC975ABCA1181070A4A5741624CE9AB0FEF27A5BB1805BF295861D0208BEBE7DF92EEFA7FB123B6AD42541C1A1057DA2560469A680E3664B1455D6851E6C8DC8C4940281AFF025B2BAD2CBB53D1670641EBDE2AE91E71F7F69AFD0C1A0225351CB1290EE40F81560A52463FB04E1364F9F3E5C454C311240EDA5C6AD78A094A73DDC1463E19A8E12419DE4966A1F12872E566F178E256F257FD1890DAE6F84DE013C2490B57DC1DED2E705C0134E889EECBE5575587EDFC240DE938C6D2D9CE543D5BA3A4A3EADE1A6A5F0CFF996311F72B3C6761414E34342C3D1A48F5D3011D7BC7F936E8E086581AC256DC6A376F9C4ABAF87FFAAD67BAC64401F4D976129EFD57102A84E63DDFEF60CF13EAF8973881FEDEBFF8D4B356B2A03EE9FFBDFA99F77EF7251C11EB1D2514D5E657697EFC47FC42CF10FFA7F09765E2EC39E0A99E4FEEBD410BF4AFE51855341279F7E47DFF0066602618ED5BF70B2F6D002805F41E991C68D64ADEAB7374F25B60", "E0DAFB980D888AA2580DB37930D1942D6D088FDC706871A90D887B5F2CA6B21911BBB8BFEE1376F48428238607AF7CF82C3B3C9223746BA9A5F01523B20889ED8F139EA3D505D55D766BD056416193CACA6D5D6175C16C38BF44D7F89D4A5E3406C7944AD05D86C310E1EC78E0C8AD80FA0DB202AB1768AD446AC7FEC60B30D741114B45857FA5223E64AF32476319F16DE15C04F34F4730AB31F4F6BB13252D706F0B3BD5860BEB864618353CE62469E25CF4AED50D8BDE9633CF18F76AB1EA5552614D4AC3848A0CFFFDFD51F17A4E744533DC52979D7012AE53E9B08C4980AF8876ED2FD8A6F174B3AF651517BDDA1965264F1CCF0EEC8E3A9969D1359C5C9FD20CAD8698F3E28ACE77001F563BF456B5A46FC747E5D7EFED93314F7AA87CFA60405F968A4F9774E30E2266938BB19E9265FB71BE0D40FE6BF14FE02E36FE10FF110D63E02145C78B73217EED9DD87F70077E4229572E6547DD71828C773E46462E30B497F9F5F99D723D657E17A288DC98724B11AE87B7E56D33386A7FDEE0698353CD46409FE8D2236958B166B1C697BB8A42946D66E390A045775A6FE7DEE4BE260490B69C56476B894383091C827D02E960D9359E8D3E151F50EB87FABAEE8ACC6E325B36674D9C7CE249B879B3FDC6AF95E92FAE53047BC211757FD12564EDDA4DDB6AE8C94DD3305C21970E90BE05ABBAF912ACC52C77714F87C2B059A9E21005D8903A604D82EC22192C46CEB63C588A219CBF755B5D44CC0E918CA6705156CB497FAABFF63745C826FE16F65582D4820141DEBE3B949C29EEC6D99C2A4EF34DC878DD82D0FE6D5ACA302ADFB897DAE78EB0BD28A938D6FD5A3535CADEDD7C521E45AF4BA92FD40DDB009E35C21254A6DB959698303D56B59D8F319F18E688F9A20DAC8058E0496E0E46BD01880F3C78EEFE98A511768919116A288CD3CD28098BF5D4719EB64D548A6D791F1A9A9A3E9B08E7184AEFE60A3D7D7179CE47562E9133068789BBE0297FDA2B2D6F4248B288CD899BF3231EB360ED45F769C0167284319D2C2B11375C2B18E5B67594CF499A6AF2687E0C1AAF09F4161F3AA8369BDBA68AB022459A2DA9DEEA13E509AF3A68D011998D9C30BEBEBD04BC9983F36FA549BFF3E3D323722B2136AFCE0A2CC8E593B370C7B48635926B9575A77AD7C0DA18E94FF1C8FABFB57B25981288E1771465360E2D619272CF3F56268B7EE130FD07DE29215FBD5D0A72B73081869F60CB149A1E4871150778A2229F3C886200E0DC2C76AE049231FD3171E49FF44BDADE185883198D21629CE0AB252C7451398E0D411CB01A66BC5B141CB150BA9CFA9F9F46339625E1D5127998302AFD19D5B2D85F3F0B2B354C7CFAACA3D4E7C7B7DF44E22EC2C226178DDD480DF7787EB28F0285B1F973DC47B094491DDDC12BF1CAEB99E0E13781FE8A64DCB0A05A30763A055A6ADFE5434D7694A0F6A0366B5D74E73227F3D503E6B989C5BBF9E6D81EDA7C46D890FB2C5CB439C5B49FE16A9BEB14B12B08C47713331E8932D4AF6B85444E3F848C5AFDC095E984449F0D126EF711F8B43831755BC0FAE8D9FC79E894CEC183DC24B1E3C81FAF6A546E464AF8C0307263680CEAD9ED6E80217F98CA82458BEE59D2A4FA76BD7D4425E0C77164A50A2933972108661820C75EB51C8A0ABDDDEB30F31F2E575AB9DB723DD084656691096B72193C52053EBB8B72C6B30C49185166FC39F3D9F3497606D15E8D696CDC256DCBDB6D01DD2C33C0249D6069788DEC09802630597C13EB1AE152E8E84F6A4BF60BB09E049EEC", "EF79F2E35DA357E9C076B00C6ACE7C50F865830698571E999E544F5025A99C36BCB025B7967846306FADCA22B8BED499BC9A80EFA7BDBDB83B15DC6D48AC4E3978D528DCE0A3E11C3E62B619EBA0C853EDB0EFA1DCE9EFB2E024FFC0B59A8AEC329FAAF418DF9BF70A250F2F6409A9FC0153161F6E8713005E53154DDBE15242AD801C216A1E5CE207757BFFBED75EE4C96CA0C3CF448966540EB434C68E9A4CCF3C5907DA216BA664B073D73B0779204EBCAEB55446AC6E2C40B8BDC666D4C9D33B7C644F867BCD8962274630191EADAEE7248398B9F02744AC5D4DEBDAB2D6D9F8D6C6392683FC1A795F70134E790718D56DB6D424725DF8AE7E11F02D684DA78ACB4B9C311806D082C1FADE4B31B8A6DC0E5F16618C47E03E8D78DDCCC6ED869F77CD39926945466369CC2371D3B51F58DFC6471D742C9C82B1B7A2B1B1BFAD15FEBE592AC0F41B19C126D923BF5944408506ACED28FBED161902EC5FF19CEED25D18F47A76860777A3D86B3E0BA7446C3F1EBDA88F8A8E182CC0938384842D42F41E0042C53C645DC87C88429E06BA9906A7A3C1F6A76671D69703496324406C7FDB20B9C3CE9BC273A743DCECC0016BDF85D82112DBD4C49E2A6A5DCA22738750EB8DD6AF15B27A0601970AD12660A51C560E5CD44B55960AA266A88B82E761B53A8B42E7332EF2FCCE093BCB06FD18D916FA10F4E9891B103DDE5D808963E6F71AE7479A5D0BFCDB8A2B2086308CFB7813EF6B7B5304225C2E9690E47CBFCD534570933541E8DC99227986C0CDE40924D64710A7FE28D248E667E18197B44D83FF1A0691E9049611AA1E04A1DB06595EC32A9B91C46F50096553C0B5716D2EA9C9E3D373C787783B50F28948EF96D21FB323CB69FBA26E8C869C745FF08AC0C71D2B656E42928D09AB4274C307FBB04AE41FE847721D95FDA55510893DF24F56522EE537F609FD54E4DAB4E98E9F3F8E8243C5D056B4CF6F2330408514C6CA22DBC79BE374E2B34B3E9A9B689B9375035F5E32013587C402C14997741654DF70FF5F74C0DC26D82AE7F036731AAE15D596E426EE2E7383EB540A48EF41FE2172F1565AD79202A016EF31255DBA5DE29C8C77B4704EF177C97DD507360FD01B44D612DCB18D7B5650032B1E768851C84EF794F833F9D5D198603224016D3FEA90F3C65DA465418750A69C43050A738A7EC4D415CC0B404B475936F8F675D49C67B875BD8BE2B2D65E05C49EDFE72163CF3F3BCAD87D8E956101964A1C1345F3978E144303FD1AEFA4675F521BBA59F0EF43DE19418993F444C1F75BEA24B295CDB73A51510B8B4B59DD20829466409444D4FF428B3B94164666A642FC2A187FDD7ADFE75E813BF64DE664B131F58B9CD825A19AC360F4F83E43FFBE0923494D978B1B2ECEEF07F2387E03B1D933008C0131A9ABB08DE1EADEF78291141D285EADFE1228554733CD927E9740D39EC9F539FAB960EA829552CFC36CD8BFD9092C821CE4FB4F29115BF533A56D7663CE9FAF2B9DA374B6E1CE5528A5B11ACB9FBE818BF4C41787F5E4FF4D517D46D2234B77F20ED3928BB38A32BBA350A66540E19B586C47EBB9EBF4E4A671CB41DA55BFBE5B39C025BF8F11A786D60C9DA6EE5299B17C0135689AC9D880B594EC51BB52398E78AC7DC2439D0C4BE7BBFB7F044661C9CD8D6D7EB16AFB943589C6210882557C65034BD7D044C6E957722C93537473E2EF1AF5A6D05D7404E274D2DA8B83F6D2AFF9EAA55D122F69F469927EB682977715FB1617B36368C22FD6A2A7B10412E9F202C6FC9BA1D7789311D0", "18085D480B93B422C6BB24B09E05556F8298FCA307341877435D2D76B9DA1A1932F20D2903A63A0856D9C431FA3C4C591D606E0043B0C6BF277971588390BCAFFC01E14C6256290E1A01EB7BDC98611EB4E40BF72B04C21526D4139E3E75A13DC25C0691B67F24B195F57923684BAAF94C7E3CFF4830FB5E828B8F7A8692C1A0CFBB9FD3F021D3FCF12C7497021178A2AB8D3256E8606374D6D0E7FE11BB1F313BE2BDD4D977780C1A2053F6CB0F60F89671AE59C178FE33900FD11B4DEC25C698CE0FD4E451D6A3CEB4E41BDF08F05F556B4394858983D515266F25703C17B48B1AA13056ADB2AF9A865A0FD30BC4BAC0D7B1D185AA2903D1956DDA3D5541873EFE487E08E83613428B64D2A499BCF3783466079714FDC3D0B04ECDCED5C89F77F5E6E6F1141D47EE7A3C32382A89F512F9C9BD96AB24EBD4F77B911D8B8206CEE29ADC1E055B7BDFFEFF94AAFA750B857EC6FFCA693787C0E2817554717CE5DD5568DB1AE585B9BEED0C6E228FF47C43FD7565D3D5664BEBD73F97DCF73D8EBBA3FA092BF6EF21730EB909327313FE1493BFB44397567DFA30BDD7D090245057098AF775CE977528E91D9C3976A4D478A5695482E4EBC1FCB2F7FCF6E5F9B08BA8C7DF12E6F77C3B0362B1132F9209AC1D69579D5E9815535FF72820BE1414020694A3E2DE53BBE7DDB582C70455BCD18AA0A4E0A8BBD718217C616129F236487194B266F95E644D1FA79532D7AC13CD9C839BE14AD4BEC179923EFAC48965A8C915812C0F0886C11ABB0D2DD58FEE6AB2549AF9380B8699F3EBB0F96D295C22B940044819D7FBF2364610893457DDECED6113D1B14BDDDA8077BB32E70D19733CB795BC8964FD9788ED317B5E433CDFAC3CE3E0EA2A8359671F2ABF49946217358E92828AE32E6CE645C3C0E4D1CB64E5C8532DA7FC179CC7ACA241AE496D821EF7FB9E8D878B746C50DEB281604830360C8ABA336D1E8F444FD46A74F6B1A0F1F61EEC42C1DA2B6D88CD1AE94B3208866BD1757B1ACC09BC155DE4690A97D0244B819C0A66785EC764276BF39FCD6A1A172C777F2E9A44817D1B6B3C09AEB4436A3B115605A850AA9D11BE2E660F2B214C45B00134604EE395A77BAB321298ADE920BE3050CD2D7BAC4931C3E3687BC4FD7E2EFB536E26404E9950C928A3CFA8A11BE42D15EA8DB2037154F79C67860844D04DF51F5F21E90B8A16E7504947B90B655744758D97886E4860FBDF28FDE80B8F32C94D09F4F827F34E8FCE92B576A8809738D6227C9A31A43CEB3EDE56BF7306DC6F208D6229CC3E5C4B49AC54486ABA7F0079EDDBCA82C3C77F41C58A88C4ECF4DBEA754DFB3424BC3106A9FF280E8C6A7D086FA06C44ED23A82E23A03D3FD4CF62DE1AAF3A95747CB5CBCEEDA5B1929C13DF6CFDBA6A94A62AD3035C8CBEFA10AD9D37389B2EB90822E10B422BC165A3BA86F37C0A5B96D0EABCAA331FBF2806C65B376665A434A6D59B3BC9C339F4437F4598D0D6C62812A2083C32359B938D78390F9B4F86E42F297405069D350F86B089ADE021C1599FAA2460EF5904A6E25708032540A7747BB254679454A7B38C7491BDCC835033A76514869ADCFE268FE49CF38A9B844A97214E1E1ACE873FE051FAF282664552DC98618E35DBA4AD9B1FBE50700726091534091C631B54C944C28D97DA0961F8E4106408017CF1EC86456BCC1F4EE7118D0691F0F327A0436D3145E5FBF8FAC33E5179094FDB03D9DA0D9A2EEDDC221A21189B68EE1A94B13F062F21472DB5466B266562E2186FE01D028CD4AB5B6AC9F048D8", "D50CD8EB871C5F371648DC07E20BE84263CD676282D56EA5374E21B52752DBE416DB787BCE232226568621ED792A9135A59849451A4A4D8A1DCF3C804AF966881FE5156FB761B3736F4282240FC0BBE72F51F0122D96B3755109E7CDFC70F9DD04C58B4A51C00B4FC0EF252B05ED76440C97DABA04079C121351CD43BCDDD4AA2D2495B49B908A9AF815DEE1405C3CE9CEC7D5BA9919621E8C4E920E08061D228038F73F8E5DD66BAB806D2DD953C6FA5360487957912249DE009655658BE8CACF00E6E0621739648A7A75EA06E93946987E62EDC270B266BBBCEF61D7CC63013AD797589A7CA62B65D4127E701BC95D45C74DBCBFF498D3F87CBD1B288D6012EC392B901A3DDFF16EF1E1685EA1F92B1F32DFED2F9076EF9CB1ADD8B04953E5509B24C48977FFEE6044B8C5B80F9DED6FA7110C3A2EA42EEE8A83F4A28FE78B27E84AAE7B3FABA56C1A4D2414E0341C69C40A43D65E16583A151826F7C7CC0CF0A5999A1016BE6912F067913AEFB525EE41F1B9C82881054E9624C03DECE74976228B119974BC546F823A597C7486DD594F1FEB2B6D0330918936DCBC12E3752A7072C5FD7B145571DC4A22C770E00F24B8C91E27F2C727FB049D04BCA813948D2F7B531C906F2018F51C9EF8B7642C0F1CC06AD338BEDE17683E0BD2A90D4D4746189F792952037E4918D2D6E61C1C8A8B6C437075ABC38913C250BBE6EDDA5CD24B630AB8FE9123B08D5E8FB8B71BC95BDA4AF1A71D5E54BE98B16D7D3083AB1649CBBBF44B3D5DC33B77DC1171A66F6F40E75EB86801EAA36E02D138093F28ECC6DA4CE4B128DAFB8D49A17C683FFAA8E6910B8BB7B832B3A3D0765DE2ECDA9D7BFF0A822F5FD389A04B660F832687CD67F7E1E1C3F5257C6FEB27B763AC7327DE8FDB989413B6D002FDFFB1DE5A80F1C5E39F06E6D716A69ABEF37B2DA9783FC494574689948DB51F78C8812E09367E6C8D70F5FC4139C64B96C71ED851D171AFA69D2A646ABA85279B7D3D31D268A2E8A272C91902F12C49D07D74E82728AD61BBABDA333DE7138A976A2267DCAB1A02E19B0685F64B608E3DA41108D54A07D4BDD24D79D293830C04209C98F037283BAEC00B1923CF404E1F21584F515F9D59B53FA9B4774FA8D3B34B7C66907BA127A095CD8CBB23375CB188CF9DF22CFB4CEC528C581DB63598DDD9A53438409D72507D2CEB5BD45DB5C760415A5E3B3A909EEDA73B7FE122DF04CB1E9F29E7A5A7385F632AEF63771A4CA2164B9B3FAC3C13911DBE9668D1127DB02A94CDCE2C8C7B66F0C21601781552B384DF0FA002DE08892D0881174CA1F6DE80B98BAE545237C5CEF9E1655F9EF8F8293D644CB47963734197F1976600CF2767A59FD56B9B67659168ECD57C485E5726C150DEC6C302456AFD4F12B2F2D1F36B03E100E109827726020BDBA970A6B768C580E34116DD0011299B4DEAAB8B04DE1DCC5FFCCBE57254CA79743D6B00D119CBB2C0B0BBB2FB8FB0B0EC97204E1720F99D16A3257846D09BF8EAE02DB21FCABF03CB0989FB4D99B6D71D5E64C6FCACCABDE63B223A91D1278D676839E1A5CE6C5EE05AB4F10EEC511C366DBFD7AA1E139AF671CBEDB3160A775E5214C862E95C3A7993E508D8F8B7ABD68213A531B5C648C537FA2674346FA0B3AB43A7B58B4F83B36D58C506C188DAF72381DE53F83AD4D9E6C6B1F5D689AE24CD158BB2898F06AA28C8FFAB1703871A6A6FE41ABB6B8B9188C90EEF88E7DA3338F119770B31167E3AB541371FF7F98A2D59D3557438DEAD71C96B97F3839F5E28DA6227E5B4", "0447B9C85642F3F8BEBD1CC7AB0D0E4D07CAFA93A26C75970C8B40443506AF8BB671F30867FE4225F576026F79010AED56CE915AD9AC001447CDCB7CC3846B0E291DE0E9E443984E0ABF7C1C1D2F6D073B0B77116A21C3C0B7F360439D11D2DE370CFF8FF73FFFBABFE4D52BCE58CB32612870B0EA23CDA21E3B6E851B063BC76FBF7BC394A7D3805D45616C6A313C887D2FDC51F065F8F3C05ABCF70F31EA5746A513D2DB3F4F3C61006F19420AA82107AF855649EA5D90ED0A8540D0A2CEC685D18EC8F4508A7D092E52DB2117C233A7BB542B61C26BB92491A88942A506ED60354EC1963ACC189A248E37C9367F3F6FE065EDF6A1205BC80B267C1062BE20950617FE0EB59BF8F1E69982F3E89E7EF85F3319A22A22B8BAA491BE76AC7257A2DF631A98477544E3E57C7D63616D22789968CA5E929B507AC394B6772096CC70B69ACDBADF900D055881FDD209AEF54CE6966767C07EB7A2B40A3410C3417D114FC9E293DA7262171325D8179262B2BF041F5A977E2D648900295B14950EDF245C7EEB663F8292625F804BB839BE3A5510036F7A50288C69F94434A03466701BF1313020A4DC4F87D272FB9D1B7676C195C0B7B4D3C2CC6B20D5C2066C7DE5DFB5C9FAD43D80FA43BA917F200A73F258BF21ED8BF3E39F69E501AB3EB115C9414C82C52CE91F6CAEF4A163E288A6FBAD4FA83477909FBC972E2EE2A5379456105E8EA02F92B0D8F79588E2282D1970C3A033F738011BF273EA65912D3ED09398A7F851BA2D6141F97843E90F5C66B38D71D70DB9D93FAEB07FE1AF5783D71CF50931C282CA8B483D1F2E5DC5AD5FF2B06C4355E46768AE5014A22E7CA26267A1E6CBFAB24C8C436535F23D419819D6D458551EE78AEA4779574BF86DE7960969B0635F0B2996F955D863E078DBF8689C142736BD5177DBFEA3CA8C58871B1FCCBFDFD67BB12AF82C3B8F935CCC507D510CAB63B831721E0ED9C258BA7A3FE245D42DDA1AD8A962847D7C724DD2418F72508FAC194EC43D17533AE522187B44D71B6E993F2CEFC6349141094C8CF935D90F2F238728D29E1F5AA09B46FA7CB651F688A8A06AB97FD2363486F61D3F42B9C015652A53B3CD66372849FD2EBA05CFB5AA28520B01FCBD9C835F98D15FE01C84D7FFBBA4B2DB93E44E4341AE95B8AAA4D59CB88F7E192E89954E22B1B8157FB0B89E3E1E3862BD4C2799F2D8C621064EC9BA1EC30E0F7F5FFD7013A7E1C102DBF01698322992EB05978A5A2878756BEABEDC660DA2D5370A98CA2C0A4C65141EA273EB787B2E7AF646DEF7DA77A93E45C37E69B474D04FBDC3B5982D8492FFC37FDE42385DDFE97A73B8575C1305A0B9AC0B0CE061A423556B6FDADB67D0A5BBA7435929D658FB0869BFFBE5D2FEC96051FE03CB7B0D944304C2D433459A97C43268E43951D4C1708C702FB9C0A0C6D82876057F4D043B21A92FA6D034B1DF5C2B463107AAA814C79022D96D1BD9D33DE5A1FF9E435D9607575856CE4DF5F1E9E90FEF5ACC4AAFBDBE0F982DBFE78C5ABE1D9C85E0452AAD7836D39591411B382BCCE72CA1702A20C9DF384F5BD539F53CEE8B9977AFB705D1D28680D1733BAF5F298282846EFA26B0DD7514422C0EF9088F796B38C15EDF6C8D88009B10CD0D6B4B2FD93679712BEFFC4D1F7A3898AD0CDC61D2FCDC360C66FDFE0AFF0E8A7B26359606CD4F47D28DE115261E6F98F323FBDF3E3046BCC2ACA0831D2BB4DDF1EF443632A229CFE6BBA5179079DC7FA50C56BE7FE5FEA0C5AD09D891895508722861E9EE8568F59616890C6370", "8DE87744B81A0E21A62CD72148FC3782AB560CE136DC3A07F2D2E143EA0DD2ADAB9FF8AB39B2A3E8858DA593B6EF6C46BB5CFD252F6DE446D9165406B3DD18CAFCCE3DC7A6E6200D8F7591169A6AB9DB6665FB72140A416EF30B75EBABB6C284E73809DE2A3A26C7F4F188FEE0B401E9EFF6DA22EF3DBE0FAA6DDFFB5D8C265D1A1855CF7019D8659062AD7A705362D1510ED5013B96D6EE803E7C6418B05828243496753E8616F4075A08346038E3F3549C0AB1E761790E818C2B531F06805D92FE53D45B9A6FA5E30E3D6A2F467AECA07D29E1E9123247C69220E2B9D4501EE42E5BDAD07F0D092B33A938B8FC0EB7E435713E3E428E87DB24AC570E4EF64840A1B4D43C5026C80F321E537755366B16FAFF2423908FB74E9A5B08F0C1064815472AF48240F1C374F2AAF8ADE55117E0FB1D08AA40C4D8AEF35CE6A91E54A89BBE55BF5E78ED5F66B2FA1E8936342656C63263D4E7ABD70F7899DAC9A315E9508AE65287C6660A7D7F3FF408CD06F3B19E1238E6D5EF040B3E54F4469BEC17198AF3F78F660C6753157603138BC98AA9F01FE79036D4564A7396725E57F875FCDA4EAF80C5E2815862AD52340571A571B331CC8122C13CC58403B22B61BD404C6D94C36FEF187C712B524BAE9EF150A71CE32366AE536B5B94ECFA351EF0DE77E729C42BBB32C7D35F9A5BB29D2D84BFC91F510F9A1C907540AE3A80CB7023AE0635EA5C2EA0548D9D14CE4BDE142436521ED1637C7B7CF6CC1DA5F826B800AC6FFFB83509A81ACE30FD969495313F9E18CE4D8A2E1D5F9C7DA14A0A9D4C4D49BF00B622B6AA07FEBFF0A8B274C297C0B4AD1CBD64BB4941543FB63D9E15059E0C0FD250753B2AA664A677780C39A013E1AA6B8F786D677755ADA03E51ED55F936FFA1ABD0430DA8750575C37D1EEADEC5E17148DB9FA202F8748B0611EBB5015F1D26C0D810F1AA5A40D73C32C269EBA5CDA134267231FC3783D3D4CC639E567681275F423439A29118C6A0C1B07D08416537D4707E9CA3FCD3494F64B69E2AE9EDD0079CD428CEB8A00BE0FC9A791FE2DCFC10D7F813315E964828A4DCC2A2D42EB313CCF192F32AA9A17C984E0D3CF3A0BD86E0B751B30C096F5F0B08A0BC439294D2BE2CB387648F8119D8820D39F17C6AEC976A0B8C89C76D12AFF73059B49EE856B2591E8D2E817DC43793F20B2AFBBD49FD9A05F5B4CB69165420AB96F26A46861AD9423F7DAE8829FD392799EF967E1270563BCF3D46025CDBBAFD15DC23F33EE5B621DF6A12263CC0A506A5E9AB191F896D13382B3BC2D536442A62B09F3C2C2252D0BE377CFBD59097259ED243EFB36C9AC0AB01B3AADD502DAACCE17A49CC82FC9ADF67B4EDE81D9355CD8295DE21468FAAA25036B2DB6E24A3AF3E5FE59324867658EAD5198C47D362EF64B71179D107DA748F00400F15167E84B62588F6D81FA4B68A59A24BB3D27167D0720718BD24EE556FB72113FCBD37831251DCD538F6815382E119355CF3490DF0AD552ECAE0D00462C10CBA4011E95C7FEC968AF6E39E1FD15D1026879202C57E2CF7AB02B08B15373C13435D8A55ED6B9BDD98FCD5B4539428D90A2C73D37DB112D2025EC8A4AC8EB82C51C46FACE88AC0E1F161705801C781EA07F6914122E5DD6BFFA3812EE44E314BC09B785B344584AA8522B63FB34BAD2122F9FEE1245E6DC837DB032387EFF5036A021C8112CDF03BEEFD89EEFE1BB88A132CAE9E1E9EED3A855B364F2A4A2F81086172FEBC64614BC04D11E74AF00F54AF6B5D85EE4773644C3FA768532B1821EC6E5C", "0D1FA0561DE4DECF411AB73FF48D0810AA2149FE5F3C22E62E06C02F60189AB5690A991CB88DFA5C4FBED745FCFD63BE3ECD9CC599E35B5FA31AA11C62F3A33796A64EDD0B64F2E51E75C2481D3EC9DDF07DADB71448BB336C0DA9DBCD897F777E3C9DD97C7EBB08827C19316F61420D96F3D94EC395F8BF88F5927C71397F6C24901914826B1BE26E14FE93EED37141109CCD00C92772B96D9EFD74B3EAD3903854801B22DC3F98232023E1F9CDFD4B4C952A6D268DF9FD3FA83C707941F8F1ACDC195AD66E7AF48D7B06C62F3204E8D03D2C92920C589CC56A5C2B0A1F10401BBF747B60B9D2179BF9CD7DDF50B10823372CC4E24005D73B4C5AB918F22918B16D98F15C365FE69786C1ADE9FAD71516E389938D5D38420FC79F82C6C0AB1C6D93D1896FE8A2BEBA134C138EB1FB00115E50A8A676B9D9939E7375F4B7D62D449EB341B0C03EE3FB18564DA3CF64261055594E0F8D322EAA9B56B5328574AB323C4376464F3C27786DF7026BFD6C7757BAEDE7887217A2D3EA22AF7D6809BFE4985EDB32ED503C6034FECE55F4379920C73A515C7390B3405ABCC54F51F686903D5354468AC566D5A03C5AB536934A6CE698E06B9E2C815B15B4F8A1857FE7C0B5486759B150F48AE9745AFBCE856830078EFD7F4CB4A463587B7DDACC79FC9FBD9C2A0351D91DDF27A65CC79005DD24F1C26252BEB8C3F1D69DF79D386401EC5AD57BF2129D1E828D6D57CABEA84C7F77B16B919653C12AA7F770741E4AC11F0AD08507C3E7C4716F14F14C548A88DC4047EA96CF96BC0CF786EF7D02424314BC846682109A2F80044B51B12A0350DB9FE06E72581EE874665B9680EC118C86DB575F9E5F687CF35DB3CA83475051AFDABDC974B2991B47BEB4CB967E3CF20D2B7CA2BB50825EE33FBD7C6E87095DE8E36CA6143F673A8C18882D89F22C08971CC709F1518169123EE59EF50846C95C313F14F9472D4CCB8EB71301488901F27E895B5D44420F91D123E3EF5527121B9B0C9536CC3D4E5EA03F63BA8FED0FDF593AABC3E768962DA165CCACE066ED7D6E46DAE97EA08789C36BD3CA6888229D15714302A39EE4F39DB0751F0E99877237524ED8EAC5F7EE2CC40A69408DC43E2AD88A661D7E443D7E99A14484E3011A41912E2AD4F6B7D62D8D9F3332F79A5FE1E16E8064C91DE56B1F89A9A3A220165872128771745D086DD3F8DDB2C35AAF3DC6DA70684DF270ED50D188FAE62CE4C98B9019D308772EF036F9FB2775137377CE61529A40E03B388CFDA3BAD55FD62D7ECAC2A72FB68068BE08383CC36FB66CC252A0412CFB3C993803C038A1828E8893DB453D47C5727CF8BF80850346063AF4976610F984ACCA00BB5963D5DFD018E0790F4A6B14A9B5FB9517783EC1F16773C49A744D8576F7957D4CD4C4E35D1BD580FC76E2632D47661A6838344CCF6476BB793FB12F92143524E5A01DD5294B6528C5A18B24B0B75D017C4DB3663BCD561AA8F27E510A7C031ABD3708385B03294E3BD1A695C573701B9D4F60232DF767439E252B7DB10D4E3FACAC8C2E8D16F9500828826EA807C2C7C48C0EE8457E757854C1540EFE9BDCE7C09AF5BE09AEA54A4BB0D2A328092F3B8741A128D4BF588384A3848A5E4F55DACFA64F7FE081366330D16589991C52A1BB782364AE969E8A21260518662B00EDB117278170CA2C0D186B173F93879F6F702E03DE768CFEA1E39FF8453C7B3AB46E83FC90FC56D0EC0847DF16A4BF1ECBFE29D94CCBD49DABDCC5FB81B62A2CDE7D2DA3E67042944F33A007096DE5C79133C7F4", "C9FCF7D2DCE0A2341FBEAAFA64F6A50A93F3FAE3B55EB70ABF51A4C001E15A8C78DE54E50CCAEFF8C2421079F7333541018D5EB8045C3AE0F0489D13C593EED560CDACDAEA39BB49FE2FD9C956197967830A0886182D98B5051080DE887638F2E3E626B8941A58D2206B46FB410C155B94FD7D15956EAEC9F855B96A8F1C7202EE600C12DBAFC6E3DE5F075B05AFC037847BB521D1D3638135591B6E1A0137CA74E27ADA3FD673684A8A1330DFA46D449F8B63FF90E36881C09FAEDF61672AC32CBBF71F34367E7547C13BF08C4B688A397DD4D00D8B19212F85EF11C0FEA19C890D73DCAE9B532CAB7BB5931B2F648072F35FAA31C6A77FAF3F72F9F57D5AE65BBC7DFF1C2A5A2A2721AD5B50DBDA2CEBA27A3864A6628F24B0D24FC2450890E278C4599C1015C2B4AE61F2DB2A3A85F02882DCB57A7A471B5F8E51DDC284E0C1869D41EF25E260EDC53AF55BE8217FEADE6C74B9C0EAE7C3417156D671577E05A63E03052663F420B70E99DE068971C5CB8D9055864460D6B2C269E4E5D2585BB7A08E28B15851C6E8438EBC1272D517A076C08631A9890F4FB627D05B91ED2164355D7F20B32498E4773FFFD17F3B15E7F2BAF5EBDC98E617A7437BCF94B0EA1B2FD6F98F8BE6D64F769FEA28A5FED9DBF4B3700BFA8C0495772A14254D7AD9525B6ECDC028C43EEEBF91D2B17C9ADDC071CCC83EFC6401A22846500E0CCD3D4E5184A05AECBD92808AD2DA42C57621C66142784692D4F28662A2B37DA4D3CAE332A97D465D3E492ACC964AED603058CB6BA6972C83C2906CFCC813C0603B775E2DE8BC946DAFA510532CEFF2B2FC5E1F25540FA07B577003D67F8A3C63E9BC2B89EC7AEDD8C2E91CA426398BEC4D98FB6233832BCAB8F10E5DE6668F7DF8FE10AC0EA63B7D46837EE4D1D203D54615042203552430DB97C24FE0088334BA154FB2157DD2D12715ABC6D329A819A1A664727F40CC26204949926E78B0BB8947FDA9026813FCF19795F8BFF2F56DB70DB7EA9280A6C504134A1B653D336101A9C166883599477DB557406FAD495BA31B488D9EDEB783759EDA32968AE4B4B96A14C9DA960ECEF511D4102E1EC27E17AF2746DFEA54F42D2133281ECA9F5CA87F8A2DE4C937B5F9526591A583DD3211F78871BBEDDE79206F946B9CEC6EBD0DA4A25AF259E4B3EC2195578C74B7DF87963BF561D7F4C6755D4DB0F288341D5E525B15F2BDA314DA38D2B2C7CD7D64F6DE35EE782A076333941FC3505AEB1FA5783C6C2553D73AFD6AF896A5C2E1C15EDDC408B6D9D7EE2E7E9F706C2A6CDE36A41BFF88960612C46996A9E7D43511302F925351240B5B77A7183C45A1B66C8FCD34EB6EBF5F5FFEAC8441BD1103D2151689BFCF8D4E29B9C39B1BE4972186B099C2C35572DB1BE2A28D751D6857B7E4EF181B786C2A6FFA30A5D6E2E1120E7B1F313302ADD1012E43EC24E5E5B5D03950E009272452ADEB9DB626FF38F335A520B12CD981636BCFB882FC06B440E348512E6ACF980A1ECF360E33DCADFFF5A2B413DD214D5AD1070E88B63FC9765295BBC92C557F3AAAB6AEB293249761F95EE4338243D35AF883AC33832155AC758ED05AA1BFFF0E9FD58E03384704DA5A9237F1AAF52E12C821BB0F54C0820AF8124AE6D0F4BFECDA6500995B2B61ECB0628BFE2A9E6A05DC94A781137522E85A3BEF28B76E49B27BD05C113C9B3A9AB1285BFD926D65BCCD5CC3837490B21527A1E94544C4ACED0352BC84D378625E3655F74B039CD681D98579A190AB2B89104C83F46235757D2D22FEEF59A250B564", "48116D6CCE73D8BD1E1F45D9676B031D9B0E65684FB88A83D791CE8F5278D33EA9D3A6ADF04F29AE93123376D1CEF52F27E875EC0024A888E688EE2A21A4AAD0448103569C8A7CB2FB072E3D0D09115AD8A1C234F7765E77042156AACC4D4A8AC697E41B71F436ABA09C91E9E4F2C5B573CB1D0B291F915BF922FC75E6FC6AE332B42D7E51BA8EFB1CCA66EC849099834E48C7F79BC16C79B0C87A8EAC8F88D30EEE8FC0EEF8C89520E2602A7226BFAC0E8B30A117B718875687F81A6125D09EB3BD2B2F5209C386DEC5AFF7DA0FF5454FF0451F825E5AC55680EC7DEC56E72CAB953E5B822E0A1D95F3F948E95DA7078C850C43AF46B4EFEEAD6AF807CCFEB1B61CFCEFB770D1923B41BB354C81F340CFD851EDFD537C373CB9F29303A988635C5CD37AFA576D6E8A8C2B7C56DE2FD49E5DB970B50E04436B1F8B22A6DCEE3BC27EE1885CEEA23E12541554EB2EFE615A140831DE6C555804432CAC0A73DC2EE5CEC8ED139ABCA4D17B22BCBE60F05F5D7F526ECB29A51ED6ABB4DE4A2865AD1AEA64041EB0F505BE3CB8F351BA21A8D941902BA565039EFEEAFB87DC6DECEC1C091ACE228931A147C491C11169AC87884D5EE9DF128C98A084CC6EA0A50D494FF8E0B902A9EAA4B4F9D3BB2BA1FFD3DCC93C45133B9008E2B188F57A82B5DC01862D35F633CD6CC3FC12BD6F3A20C1EEE1F9018E41027788950DF09C4B482837677B33B15CE24EFE6797291C0DE291AC04F04AF975703BEFD3CB8E59C1496E547285E3F7A29F99C5F210327CB328B8A3094DB7C27CF7FA077791160A2287F44F92BA6F5346E48D4D4AE6C2C7185926526719537AAD530EEB3B0B4CD718C7BA38BDBA21671ECCE0AB4044B797B7D10797EB1BAA024B76D0B82BF25C94655545227B46DB2A038F87301BCBECE0C99A98AA5BCB648DE58B6CD59AC6471462BF5985C595B00A4DDF2948A84203890E2989D8DFC9864392E7E75262DF1CB78C1E2872CFCD22D561F8788F42A0323CDF3EE1588EFF2F7BEDACF5AF710CC7C6F9957D992A7FE39DB696DA414AC36CBDC99AF050023597734D94C2A8FCBF41D6004C21E4F4357C19ED09488797CA012F4BEF8F1743E396236E708D96A7DAAB07FE03D5483319241CB35F66F66D99D981DB4427C4C84A9EA24AEE4F7C4E023E0ED2FEDF59FEB6D8AC0FE87DD42580F7B0CC6339752230A69BE83AE13FC12AD4719D45CAEAC6E8695F6F403A0713ED37DC120B80DE82F7AC4991B4B9DADB31A304E16D03251CA140659CBF99E891DCBB764293A967DE1E96848B8F225D2F9D28EC2F428AFEBFB57AB79B126E6FC3D66102E3813347D7CDA5499F6AA5BA6AB5EA6F3A82D730EDF3FF74B9BC0F954BED21E77146A5591941962C49F6B2BEBD060A9C82D8FC780FB3AED527D40CC426988F042841250B4A85A3F3501FA3436103313C3C4CDEA772B6C840DB866B9730798B69D6AE12D24E4DDF31FA9B4C8DECF6CBCEA2E8A0F9CC67CCDCB64523725972D81ED2E6562283DE99297458452B94467B83F3111CBFF61006814CCB6550D19A1EC026996695D46C31BFA9BD371CCDF1B512C61CE7BDFBE419B477DAB1E7E1D012DA4BDB05F4C4CD39511D5071C0982F68D9C6F558D22940D541A3C67003D05306FFC070C2131832F737872114566ADF3074F7F6274AEF9B894D0AAD5ED60998A0363B92D841F4A441C39965FC1479E93C99B083CDE6CD6CB9E26D49E16B969A357E28A61B444AB0FA665B853FC89B64E02BB02C5273CC948B00041701459408C95E4BE49EDC7CB605BD2DF31C3C8BB2AA9FC780", "840BCC55474C2F66B7E16C6F527695D367F70F570B13C1ACB546D8439A1AE06F362C224FBD86441D82430A345B8458EB666BC93739E3D679754117C95100E8F00879B891C9E03788543C415AA964C3F861916BD7C141777A93B374943CC4CEDF928AEA3EB72F412DD8256227D7D7244E876955B13FB2EAD1C3980AF6F8F36B3E71FE3B189F8DC22C55E3720DA11C6AC4328DCF670CF948123FC7280D6891EEB356C195D2A79326299A684F5D68DC0ACF00B780CDCEFCD7CBE4140FB5B6DF896883D3C6FFC42BAA41E6A75713F8861C18A833C688C2BF6EED7F0CE66242B8196C7C254F9D48FD56AE5ADA9105A5C4AF28D0042E059A90979C6439BF6D498991CF64C68080B9B5392CC9FCA4397647A9AAC42C3810FA33BCF31C89A641D1078A0822D93EB773F418B9B3B20D5FEEE1067766AC561525F88F8F097BED0CBFF5BC498CDFC9A5B9D20F4D4A03CA190563CE543B2EAFD8DC6E4A5885DEA120DA7D157D00EB1329E500D41C7E6BD603E95BFAE227A9B613A71C7BEFC8449B668C59147E1DD5411CBD967CBBD46A9DDD76C547506A54A8245532FF9AA5312607F1AB99F4F9BCF85D93B58D76C5583856595AF5CA1AAC07C945400B35885071802620855E18E0A3B1EE92BB95241EFCAD82B3435BBB8916C4866471BD5715882F6BE508C7648A59B2AA91A69F60C78482197C04B31759054FFDAA254A143021E37874DE407690B9ECF8DB99CC16B004116F51DC7853370BD3538E14A0F02E7BF74D66FF898AEE93BF0697EB6E8E62B95C6C525A03E1A89CC2F56BAC591FA81BF6A1B3B9F1259F13AB45F2E9B0D93DA7B4984A9C71272CA261CC4EE4A44FBA4CD03C75D216672C18A60183A52B28796B356EC498F4926D833D94007E92EC190E9713354C7506BEA6B7B5DB2BE659E2A5BA92D00C01611347F67971478F2C71648E33F99EF201367CA3AC8814DE0F83B0BAFF34A192349C5DE87453167820C0EB0AC8349ECA683111776980FEBDC993314278B37B289B528DB319CF59B09B83342C71FD5E9F13EDF4F18783FF328BC67A03F1F62FD1A4631AFD76363DB1A79CD1EA95FD43934955AE211E00EF5AFC114BE00EAE2A7AB63042992E086810E61AEE3CE5CB0FE75C04969485899D552AD4B006D543BEB93C1E8578168C66667D62CBCB56F98DFBA248EECD891F9936382087F2AAD6F83FFE25E77F8BAB9C62675D4024E9BDCA5581126BD1ED6035994029BB54615E593D4CA81B31A5AE8CBEF8E1A81C32698FB7B4A339A7E4E575460F79C4F4C5F57F9E8DB459177067869E03E2E1681004EBBF62B4F60A9EFFE47921AD22C7236F25438AF46885E120825509D1E28652361EAC64AF1806317416E5550A39AA8DAE2C6B970D44F4F38D571F67E304AA57BA435C4E06CC97C848422216BA778B2736C30200527960A66D63280AF7DC691F9D0540AA47F0D26416B46A6D53B0B93F1B7C3D4DA8BF8AD2FE410ADDE00B0372E9E830C09B206A08D968AF2F716DD04D220E619FDE28FE70286E7EB9C2068F7A37413BD9E65F1B59C331D45AE914731A564D33875A0939A2185348C197CD14DAC59C5E2BEF09876353FB16D849EE67A774B05C51AA2480F18DE40051654DD2C7B9E3B753FEE5696B10BE40BFFE89487DA1E8B1C2000D53B2A98B4DE6C9DAF07F0B4DB72834361E520E45F5E958FE0760F229C16CCFE0BDBF07E186B28AA69231DDA8378DD6338A94D23541B9D8B63B85962C6304E1ACE2B56A3E433F7E9B2A88FBAD5FC71703231D38DFA8C378E15B6503A3B9959E1759EECCBFF14AA09E6BB8F2CC", "152004D3334E877FE21F773408369872718CDEE15BD489D97F606779A9A38398524E6560260980FABCF179ED91D699D52592AFB3269FFB8DED36AFE7DC79DB773DBA560E3ADF8E12FB8A08EB56BFC4692BEA05AA288012B580E43BE085CE583E9C9DC18A9D32567EA950D8165A2F8A443E7AB5E79F687690A8D8D92FBF877C5B84D26E6FCB3671073BD808A7E908130A845C95A2F5E360645611B4B55B03169CC1F50AE2FFFAAF50FED8CB782BF3C67775B613CF82A2D102199E49A329496C0FA24AAF6370A3636EAFEB992C663C308AD181DC308D81FFD713505916300732FB1F8DCE238CC4104D26C588F28FE7EE4F2B8C2024357D52C7AA29D339249086CB2202DC1C847210EAEBD3F06A39642711B4608638564B0DD2BFDF38CD79CC1CFCE1226CA835E6EE19E4089A6F18E7ECC3597CAD3FFFE13A5F77A58C2B079DA25B928396FFAEE81FBD9C6243CE0EB0872A187E6CF99F16B1511672821D11EF88884964BAC6686C2A7732035493FB9765B7A51E845C1C79FABD99438FD84C09642FBC7CF1740DEB012AD050F5E8FF03E859E85C51D2E87AC41185C67C33820EFFCF2D79D384B11B44A806ABB8247AF36E3972222C805EB9854D9FCCDC7E58A101A5239E60CF4836C38A6ADE67686E6487547933859D46D046BFC15AE95B8D0A42A57C401EBE78ABF495EB390B8922C97270C790C2FAB9849ADE48EA8F4F7C6996F6DB661500199BCFE1EAFA1ECCFAB1F674E0BEB1D03319E73126D7191A64A80FCBBB06B1CFB718275BDDB571E8F53FAF81DBBC0522263FCDFB537B3BE9078F2AD449423152BB9DCCEEE97003D1988540FAE39CAB62593A9EC909489415EEF4229358229BDDD45CC35EBDBA088C4BA097BB0E28814BF5048F4F64E6A587B0BDAAA8A1B3E3E69D3D7B6782FC42474773C61DE12B4C6F183F9E625E337EFDC97A79A5D2C0C939FA668F440688F7A3E0E28A33D36D331069294DBA8BF768010AD93A224E28964A780304F59B7994D972832728249934B5347580C16BCDBE9F84EB34EA7F7645635437B0F5422E3DA99EC2D53B22B1A55BC783CE86CC6B1BE7B11F837CF2BD09A514B12ED7CF0AFC2F70F1D6D08288524263B1129135D664A48B0596C4E880E4E01BA3889014C07ED1B7F172AB4F4A69FC8C04F0ACE8AD1329A4FB594E9EA30EFEF31BBE418CB5515CFF8A375CBE58515B32E799E8449101093A053EC99F9CF78122FA2D36DDFBD258EC81D7B4D18BF882663CBF24D2A35A93C00AE8EA81A3B0E8040C1E259515156D67DC76602924BA51507C4994221A3B1CAD674BECB11574212EBCCFDCAF6AFEE288BCE11B7FFF1D7191AB329B04A237F75B204634676932FB0842E2AB888E7D5A4A6B7F77EA04ABF4B9A567E5DA5267F35CBBC928B5F607E9C08359F0031A934152D77E65C937181C92EF4CF17F6EA45171DEBAB545755795097766318CB132ACD96CDD65777F41BA127CF251A4E9B3348927757A42AD8FA83F6CE7342D935CB54984E45886D888627F0228E50082B85E8E9DDBECAAF049C25C4D7B2EA919716271500D81EDF574C5AE91E5F0FAD7585EF69C5051473AF913F887B31BD730F67B4A44081BBD567B57C061AF465237374E0BF4753F3C6CA28D45220CCA3EE6F07F93A29982EB5AAD70763ACBFBE55015D1C52B64954D4855ABCC319DDCAEE75CDFE3B3C31C329A77C76131F18F3C3904B3EA4E691C03C32CA5E7A1F9460760231473115B5AB7E159013C96AE4885566065883CA3B9661C6773B77819BC68755D529FCE05E80E08A5097EB37BDDC1AF9BDFCD0A04", "0D4897E7FB496EF0C6D62C034088E7E9B8DB52F232CDC9EA88429655ABE366C54CD534DC9038F45AC0D0362E31086CA2FC0FCAC3FE71B2D4EEE548F69CE4433601CD3431D01BA6F0C23D612807EB8E50BFCA736D917F67DD72631BEE8728006D2AE69D1A1BAEA8DE50852CEBF7491FFF989C37A54EAE31652230A0D3E4397B051222C4A22BF481BC52E2012188C7576A7ACE81185C85A2E841119B47B5429DF277A976F15D5652156445905EC797729A6647E1B593484ACF2724E81786A0C062DE87759E82202A561FD077D64FDD3226A1E290F660722040EC7AD4383431E195412DBAD0AE620BFE808D65D3937AC9C5AEFD6FA106C88A6B192D4FEC1FB1A06907B0796F724AAC6A5EFEBF50C168F990BDBD6B1D23E098858C07E8D2144532AFE040E45B25AD9AF7D92F9DCCBFF3DF25DF574A4B65A219289407EB63FF7152BF1E651C6F124BE32545B50E8E2CE37F1042A68A62AB70D9DB540D2B39293E008EBAA632B85EF1052FDA17A07B9B1D89A76FF7E7EDEB7090496855B29A9174780D504F7228F8B7436F4676F51975BCA614554FE6B3F946F5E0D1016371F9CEED4521477CE8E9CD0668643686D8482CEC0BB4D6A9E8678B1835F0952E2700FE0C85A8683DA91638D81A85231CA4C7B55C0C0DA57DE5E6553F22290CE7EE72867285D096C0FC16A60A664C6BAB048939FF9DA476024235DDDBF7F264C90ED44E953C4AC0FB50362FB2CB4C4FC2097F07B71772000D2C2A5DBDF0B6FB83B1BBD70CE9D6A8BF1F924AAC4DAEB6AADD891A8974C9BF46FC6038F6B77D6AC0D6107AE6AF5B93B186253AFFFD8CD21835097C4B764F3E0B2447776549D5045E4346FCD3B7880F1B3BA794ADD6B7F291D3534DF034F822D0A41DB2AF9F1E51F212D5631D2525B1804A75B50D8372B6A1C200B81AC1122AA3C13D7463C383FD123DF4029BDAF6C227B3C4B54F75C5315FE139F6A0A3E2E819D3062B3309E2630EE4A64D1E3DBF23B489B96E198BA98D8D3347217A5FDE4DE453012E8564BAEFBE3939E59C0A725A75CEDE373501F9103011FE0EAA40C583AC73C92F47BD528600C42E0029FB3A4F03A3CCE87E5AAF4FCCB47EA8BC62E0F542DBD455F7163A2A8803583896E3C803C0D01846EBD8BB1B3FD396A7C7BC3F72A9D0503C44FE30E5E77E0FC8B373EE931CBF4A9867406BC91972B946B9ADE62415CE2FFC71C2E64DEB7E6205D635977C778BC40C11E36BFC22A17FE641346C74DADD255D329AEFC2CE5B4AC5B195FE2DB453F1B41B3334D5C480BBF10FDE88C722091ABC85667F2B52A3505A142E4D1546CC41E154B345E8456B9CD0E241D70EB4876A70623DFF3FF43A8D66EF60488A7860485A8E518AF4A7056CD02C72E1BAEA3944781642A36932ABFAEE3B88B57B213F9B358CC3F05154DF8D2132A74DF27556DB6C5E45256481C09D18DA604CB91E6AB7AA29C0C1009A406F1B3AAE268564E04B07E4E9128FF02513AB8A8665BFE1E352F46DBDE7870EE027A6E84560014659888EB6AACF993D7C9F9FBC2974CAE290059802F5D224520CE445C404A2ECC57CE6FD5961EB20DC12D436F0B93614CFC844B476D449416F54459BAD09F886CE3C1C307A91E62FC736051E6F6F8F5AD3372398458299EFDC1809997FAAAFDE14B15566B381714E3522F629A5ED9DDA1EF4B9D4498DD55F8B0A48ABB2F9B1FCBD991B5465108147BB6125FFEA6B6D479DB6A9983A51C041375B39FE6546AB5B5E089DD7E228D5AB17127A3A1E3AE82A31E952E660F72A1F399ADEB4E1E11C390BB8652F2F7B6D05E9F4B6FC90", "AF6D254288BF564C4663014C7A70EB3739D28F1F17B8627FDF714E85B48EEFEB1FD456546328BF2E2EED112992AF78911A89E1248AEBF1F79906EA91D41CAFC6E541D2BB40A7050C5AE4B66547C9DDA88590AB8B0A4B01B5F8216447A310D1E52C155F92659835F1086D381F1F2995138856DEC6FF59380FD6C1B6EEA6E4061930CEF7217701DDFE17742721794DE824377392AF3D949ED9B0455C58F7395DE0FDA5485E310E8457A4270D603BA5AD1854811530FB7178525F4BB1E5DFF89F6FFE0C83C3E47E244D8F3F8AAD8374E3FDF996060E18D2A5397192823681CE6DA561816C0EEC0C0600732A37731ED13948439E8961BE44D32A3097C1AA5E19876ACD21DF812265181774580A8C04ED4FD1DE2FD5A1DFF9DCDF4D97C448BF9A4DACC22D4A55F588C87CCF5C9E178A8FFA032A454908BBE41E13D829FA98C066A7736577CDEFC6D5441656D0AC95C872861BCE0A28C2ED6E9420D4D167F37F96087F9E761F38B882CD41521DE8E2C40564C0E001EDBC04982669B82F05CD0411A6BADDCB704B545FCB19A286BFFAF0FB6DC889BCE75C5763BE1D70DCAD1D39F395A75E637E0663F3D5A855F53F700AF5F82124E72CC2A4E41A4B43FCBA41E55298A1B799368BD5F9B507FB11E8BD2D80FE517A5FA935006064278CDDC5EED43B7C2D309BECCCBB2C0AE3B8D09509315933E2DF91304B1DD3777EC9FA2415F7D18A96CD08095A30F7EB9BC12F8739E409EE7DC062703CB3EA591531F47F5D1C0431E9F1883C3BA249492EE619719C8B3BDFC1DECF7E3C4CE4CE032FB2882247D1D54566E3819464837C248D35647D273A87F8BE667760D26A7EA1FFA682A931A4D35F7407FBBBAD725BEA62449623AADE97A2789F2F8642F1CE12A06C93861DE9D27C5ACE0E4ECE40B58664176113ED6437B8AC8B4059653EA30F71A023544BFFA685343E278129DA12EEAADBDD5AB0E2CCA0B840E87AF0D0E859449893276B9B5894EB0C57C3222E01E7538FF7E91807C10CDB465A12CCD358151D96856C6143C9F8D25AF8E8086C83D4CAE37BD660D15C0C0707691E8366C4AFE6DC0AE1BFECEF9BEF46CFEA3356A3155E027D1C921ECB852BA4B8FE8E0C8C00829CEE4049A21A1C3424D2BE532B735232D12B81C3C9E5B02294701E6BCBC8607F2AFCFB2DD9B1142B4D261418C1B239B0B22451D7D3AC64636B0C7F96B41D7E775C1CFA2E277C957F0D59BD1FB02226A462533850E99E917E310A684E81634F3876D6AB32CB5B8FAE9E82224BD2A17A7C72CDACDC6B3438A083A6B0DB9FD91E05BF4C83A36916EF35C5D4871E94B1671493FDBC497BFA30328DD24D340A07A960828A855FA95EE33FE4FCD15B14B7929D338611239AC34CFDA6503E4DD9570EC339CFDC8D1C3D3536F5176901D012BABB133EBB4560484344E044F86A77C21183C82BB2B6632CF69F5A661C98EFDE5529F8FB965DCC6AF185CA8CDB4D01C5E8902966B063B8D1724AD18DAE495AD47416B61321DEEBF782EF7A6ADE3CD0D5B9ECA84DB5D50C2E5C7D8B8DB9E0F398376CDE3D7E8DC46F0D77D38D6CF6055D6D074CBA92A27C6F9018CAE87C97F1B3ACCEE495ED9DCE46DF4FA5255DB2C7F2669F5201058E90F7567672162E17D5B6D028C6AD23F2AEBA32061E6B33EA86915FAFA2344CC58162C032CE837D5C32F5993013314BD261DE6EBB35B94B8F690C5624A8CF5509BF50D3AF5FDAD77311B6D6F9398213AC1A267CAA0F52A262DA4F85F5ADC79947D2C5128B8E0B0C41B9FDEEF6AEC228EF97762CDBDB78273C16C39E446576D54A4FD0", "4B7593A9ED7897766CACD515D3A55959FF99C1CE28A745DEC1D8F2565F24F4A1E14E9083AFF510F106D982A2911197338499CBE38CDF3D99463B13EE26B47D26A62CE45EAAA04A3E70850D5F23470FB94C42D3235D5FF9E6C37CEE8C93591CB69E0735B03EB262CE6BE6F0144DFD66BC089B36D66287EA588C78E39D9B6907EFE85C1211612952CF13C369C2AB3D921E4630ACC75F2AE99014776B26CD1F296F736A4616FF662D5C6E18C4EDA6D1791A71BE969556FF11E1192D3941F8020D2C731403ACD856A3AEE6ED7F23023BAD7BF138C702B6449E2601042D7990ADB988B650AE202F3433CF26EE132A7CB13650E86A6DBA6F7FA53B2354DEBF1268734D7120F721E18FEED2F93C268A2D3EA012F3D7F68DB0B18A5CDEBE13CE4A05683947DD985D4AED1E192FBD2719755846C9B758FC8FF28B9999D07E634645064C2C9DB4CFE50BB8A030B60F43AFBD588EC17102F614D3029FA811457568D7726C651C062391A2EC2843A95A3A48AF58A898BB65FB852F73E9A82C6AA9D406D80C072A3B426D8EBF261BF7AE0E9DC0C6DE9F4BEE880D775783F910AF19DFD8EC2656213FB9B74EEBD8E1BF860E4650D446683B7794086ECE1E2AA723024C219E3DCB371624C6D721BB60C797003D89096BA0F489D1CA60C57AD907BFC8E97F4E057B6D709414FB0A302D3057FB4635F70BB6A32CFD842DCD8D9C9D45FE082B3746951A862EA870D903382C138425DF936A505120D93FABB8F523C1D3946B85425FB338CA7DC4B2FB6512F0C8A67FA47A416284EAA943E1A9C0607A02D27F55F1DF2EB6090F94B64076FC2D3D3B3694DA5C7EB2A180DEA14AEC21156E1110DF75616685FD53C72252FB87E7D19EF5AE8D9E129D0984A06520C789DE22CBF6E2271801691E0C3CC672F6865A41559910D0279AB9E0112E66B2A1C2B22B6679CF70E3FF870084562ADB36F532E64D44C7264E44D488076F7714A1089526118D4655FFE16B02D803AC2601493CEC3AB27878CE95ED3F321913217DE12B8E5E8FB75A85707EAF6F1FF08CC86B91632ABC7CDC42D1C5D0F2F49D5F412B4AD0C5C46CFA74643C9333C5F3558DC3ABDBCBE23A3573146D648D540116136F3F29E42FF07E26C1504E47FCAD1FDAE63357E421E46440424921404ED02FD4BFA2FDE68CBE6CE49E4E120C141013DF5C0BDF776EE36FD5899C0FC057DAE2C9DAEF6D37BF8E85258BB36B54ED8374BDDD49B6AC2C8BF3105A194F76DD512336EAAFC7BD2054AF6A9606517DE03AF445CCA5FA65307D2E116E42A3676EB6033AA17D76A87F52D144CE25E3A8DAFD3E044289C4600BFAA9CCD963D14A19C5911C3DE649439440D11A21154EF25649F7DA295E0FDAE8C48351BC005C011A10D201B3062492A7CC933AB5D854B26232B7091CD0B7AA3135F28E3AE75E267C223C5E03B60FAC1BF78123C5AF76719191CB6BA277A5BE81E64117AB344D92837B6D600F36702F4BB4532C5EB1C9BAD8A111C540F52A225DACFAB37641898B1FF770A523F8BC8BB0DADB59235DE055810396F1993539A9CAAB622389607DCDFDD51FB67CBE89F0F868DB4D27A7A38542A076D158919DCB621BD325F23AA0DF694C444206FD42192FE7F9A05743CD54D8F111676AC35A3230E372A5A6D7E213C4584EEA1A4993067FD28DF6690BE9D3E94AC06BCF89BF1AA47496F8F6A18524187BE80D59A4E80193CFD757B706AD483A916AFBE2A56E0A69F3B1BBF9F4B239D05C6C556A8D22B00E9BB1FDAA620D949ECDE86EAA299BE93A7884C99FA782F2BB3BEEE86046489B3B8A5930", "71BB1B2E833793D854F8A9A81E6A6947057B9571F2BA99380DDB25D878D6B48F09ED7DBFACE92B6B82F413E038128F6128AF3BC467E9A4DF2861DAAC674B6D948A10F28F7D43657FEE26577AF438A2F4422186930702EBC6C9173E661D59CE7594DF95B861F9D12EB060FCD3BA43159C9A1BDC1EF13E04893E411267331588CF4831978469FF569C1A738C54001BB5CF4FABD289075A165EDE0A58F6CF6D215D306A7840CBECD0E87E3AD186F7A67A967373551E13D2956E5C578A7F5BD50E2D570F9B914848D46A640913EBED2E2ABFB86916BC34EEB3E8A671AD771F6D3780B6FEC143E26F53B02977255314BAE9A2CD9E5BA2B49C73226FDC724A859F8BAD3A9FACA1B0E5F2DFE7E1E45DB6D4BE2B76535A817F94594A4541C01BB62AA83A690B6D84FC13B632972C61D940F2C9D32837413AF8E42045ECA3072CD044B2183400CE63C418879D13FD281A8D0835256DDD2BC3C9750C1D44CF1037FD7264B7716398FCF1D31CFFD0B7C52C6370E4CE6FC163B40436490A757465B20B8890C3B5C0AFB971ABFD01796569E3BC73C13D1E4B1FBC1CDCE59D21B6B110272E5770C589603FE67779A49AD0EC66910A2BF4D8C8ECC18A32EF92F502126A5DC3DE618233B9914A9608B2F17E5161115D9A3BEF1D5701A9D465A1437DE24371C9179800CB5728A7F3D734A2A706BC64D356BDF591389970B6CC139AC510A98E3C75F20120450CE45373AAEA6A279BBD17221BCD32ECF82C11B4C1CEE0A44792CF56978D3D2399F7ECDE9F8D9217F8BA22770E210D0F1AA852178B872E296762873765A73DEC08873C04ED69C995C5751B97DEC23B94CA674FE3F66211317B074D8203EC530A20B6E6DD21AB55895BEE1CBD0876183D652F4A0D2EFC95749F8F192F860BEA534598FD709B396C209CEAE4D9190980733E7E98C8ABE52A53C68D86053B56BA6FCAB5C827292D729CB8BFD1FC8CAFCDE15E4527B604018F28AA16C1E913F55461AF87C9A7BE1A742002E52B3A14EC30B259DDE7BB892CEAF77D25B7670B339B334878F697C00CE6740117AE7C67DF3F8A7BEAC89D4872682C47F368F835AFD7ECF0D8471AD01468B7BBB0A974EC469A8F79ECF8D379DC13685D2A8F6F19CE102C3DE34B11422AFB42E894C8D00F606296DABA7123FCE039ED27324D60E853BA94DC638454088281335D437A954333FF1A8D08E2A4D25CB3BA0D08BF6625E25EAD3C1EBFA2666AA49550578D3763ECDCE81303B53F18B00C8900AF4E0532C5ECBC94513DD9F50BE511CFE4D3DDBB3F112AE148DB062B2EADDB901CDA6AB6BF59D37F356AB34AF97D3DAAAA417642E87C9B95AA546C682ED641214605F82A4F486C9C72576106F76D7152615EC8E77187D4485071CFC6B0AE44880442790696E057A3AE20C860691353B3F6BEC5F1C2DA07563B423BC01E0334099571158A432441256D7C409B7B6EF26442075ED17E2BE37F8EBC049CFBE0FA89CDA7A58DD32C417B34E899FBE86E2FAB8D30846DA17144A6A66AAE1C24FCFABDA5B573FD2D6337226B5E49BB031B4D2B455B6DB871076F67AC03C3A73CEC01BD0B1EC42ABD177127E62A66FE8E475B982B4490F0877466EEFC7317A703C5C07937340ED4B53E5DE5325197FA31B8C8E05AA2222064EE5D7C06D4A1EB53151F75C94A2E259688CA0716548465C5C255D81FF10BACC2C13098ED8CF7F5B15193EE14FB5D258E95EDCC93E9796FA823892C705A5771D561787C12592D269D657FBB71F021F365B7453D50C35F748FB2B7F36DF28769B81EF12A26A237FB0239C173559540", "53DA0E7B84741AA9E225483630169ACBCC03EB8CDA28B7BDA685C756D66B14488A2D0AEF7E6CB2D80F2726327257B7284B93EA1B56AB80FAE668C04FA49FCD658D896A997685E1EDB4DDF85456B37F32FC8CDE50882EF0F09BE4ED4AB9A425806A49E8347A42A50B38FA8D1DA2FD2C9438618B6701DEE159060C186D50170F24F38E07B185E3272EAEA4A0A7CA41A69C69E9D95E271287D3AB8284146A58440EA131A7F47D73CB2BCF40FE3A58E1B998C2E5EF9CEEC8EA2F8467BB7757C03A99FC8F014EE933A7080CD46625A2A7A251B7A37E4208956A8C9BD35E6F8674BC06FCAA5DD04A2558C9665C7985014D3AD95ED256FAFA358962EF5BB26AE2FCE899392DF858F99303E2417BCA7672E991FEB891F5DFCA2D461148367C5C0DE1460BF557194533DAF01A5E8E0E43D57B825AF7EEFF163DAA23B9F95C063A26B3D213459D885AA96023715CD21DFA2A2250F7610B78A77123443BD06EFB7DC85D1F16D0019D2937C3DEC4DE6389485ABB21642B6E41ADD43CE96F228C08DF6288A647EC2FE96032B6DCD651FF950B72964EE08FC2030272E3F601DB7F7E770E655389CA6CFA2F9B87CE76FB0E0CDCA4EEE5E80FC756BE46CC09F84BDB34ADA2AFC024ABDE0066ED939F8EBC236CB3F577C1BFD741F9D101A038EC86AB0A85462BAFB2E484D6722499A6310FA449D979030B2A21206D44225800BE2228FA00AE6D92C8DA652E1B003BD2734D30557B735CC2A591E090394DB791245C22B4D29E706476593B6F90C694C5B87BBB0FA2C479E292A768A9687A713336A21D1199186F852C41F586E9BBC64004D8BB6814BFE739834C99923177AAF87B926D56A7AFC0879C027332A60951C84E9314380A5A78E1196D094F15D856AA36742825D2B397156BCAD8ABE7291FB41DB4365AAE49CA82CA066D3B4366D3122ABBC00F05559DAFEBA9F98361DDAEF068D60B18265E7184C4D6BC9C3619CFF5C758090FF6398CCCEB78176D2A8A2A4B9854C4ACF5CB614DC1CA0E15E7E85442241D48FD3D6E851A5D3947FA769560928948FA26FA16EFBD2159994BD92B3D6B0C62818C91D4724413A7F40B2A2D67F4FC97B5DF6A7E3CEC03158E201D6643F402D3DD6995A42900D46C2881198CAD28A27489F5116ECEC3E38D999B2020E0C381DB3B8230811270D75950D9BB61548802DBBCB68ED8C7BCCB50D606BE400BECF873498621E66ABD2AA179B3E90E055C3719CE2FE047F815B95B065BA086B467AF4124E276F8CEAD000BCA5499D36217B250009A7B43E81CB3F8B1A3238EE436FE61F2F942796DBCBE570BB4FC783B35C3CA31BDD432B33AD75B08107253E8F910EFE0D0B5453A8A055D884892278688B3ECA612452B590AF38DBDD9A7070C5610E7A3CA6C91D24438E7F45E7A2A330F164AEDFFF1789D5E875EEF121298DB79C77278ABFEC3FE3DF843C46F40E847272EB2669BABA808C38E31F13516D5066AF4DFCDE6EDB2FF0B0A4CE9FA9B4101F6F144B02384868617CD39175852E065473D6F566CD18D7403FFD24DD33ADDB52C7CC22167E49102C46DC369A92CE2D2FCB81B4D1F14B7CD2F80A65D8FBD20FDAA23219873ACB8CF934E68D6F8FED6B41193CFAB1F44CE4BFC7C67DE1E8804B47DFD7E8AE281E19846AEB6FF94AE7E7CF6FFAB46242843811E6C5BDB78157C76DF4F92FD3653D7FA5978316EB055059C6A2B6306C957418860A88F63355E76D96F4727128D9B3EB98501AF5B093F2C314F98EA2CDB89468E1BD51138CBF25E8B911C26B97DCCA47F1A1D6C1CD415A5079A756B8A8715DD3164", }; // Galileo E5a-I secondary code const std::string Galileo_E5a_I_SECONDARY_CODE = "10000100001011101001"; // Galileo E5a-Q secondary codes const std::string Galileo_E5a_Q_SECONDARY_CODE[Galileo_E5a_NUMBER_OF_CODES] = { "1000001111110110111101101001110110001111011011100001010101000001000111111011100011001001101100011100", "0110011001010101100010111101001111001110000011000111011110010010111010000011001101010000010100100101", "0101100110100000001001011010100111000001101011110000011001010001101101110111100110101000001110000001", "1101001110100011001001100100000001111000001011110111101100011000111001001101111101110101010010110111", "1011100100011111110010101101011101110110000011000010000110001111101001011001001101001000101010010011", "1011101011000111011111101001001100111010011101111001000101000000111100001001010011111011111110011000", "0101001101110111100001011101111000101000000010010010011111000110101101011000101110100110011101110110", "1110111111001010101101001011011001011111001110000101001100011110110010100010001000100101011111100010", "0111100111111000110010101110100000111000010001110101111010100101010110000100101111101111110010011011", "1100101001010001011100001111111010100011101010000001000011101100011000000110101101100110010010010100", "0001111111000011001001000001000001100101001010100010110001001001101111011000010001011110010101100111", "1111111000001010100110100111101011111101101011000100010011100100001011001011100101011101001001100001", "1011000000110000011000101101110000101011011100011001100101011101010110101101100010110111110110111110", "1111011011000011100110001001100100111111010110011000111000101101111101000010001101011101001111010101", "0001101110110010111110111000101101011011111100100100001110010101110000101110111100111100010110100001", "0010111110010010000001101000011111010010001110001100110001110000010001101110111101101010111111001001", "0011010000010110001110001000011011111100010011101101011111110010101010010010111011111101101110111000", "0110011010101000011100101100111001000111100000110011111110110010110111111101010101100010010110101101", "1001100111010101101001110000000101100010110010010010000010100100101110111001110111100001110010101000", "1000000111010111000110111101011011100000011010011010011110101100110010111110110111000110011011001010", "1010011001010100010100100100000001110100101010011110011001111000000011011011100111010011111011000110", "1100001100111001011010100001000000011011111011011010111101100010001111001111110001011011101100110111", "1100001111010100101010110010000100011101111100110110111100100001000100011111001000010100000111001101", "0011110111111111001001011110101011100111011000010111001110010010011001011010111100010100010111000001", "1001100101001001000010011110000001110101011111010111000011001101111000111000100100010000001010110101", "1011100100111000010100110101010100100010110100010001100111110100000011000010010111111101101011101100", "1100011100011010101101010100100111000000010010010001010100110111000000100110101100111001000010110111", "0000110011011011100011001001111001111011010100111111010101011111010110110000101000000101100101111011", "0110000111000101111110100010010100101111000110101111100000010001010001000111011001100100100101001111", "0110001001100000001001110111011110001111110100111100011010111011010010111010101001111010010110011101", "1110011101000101010000010010111111110101001111011110101111010000001111110001110010011010011000110011", "0011010110010010101011000000100000111111001100010111010111111010011100100100011000111001000010011000", "0101001000101000010011011001010000011100001111011100101011110010011100100001110111011011000111111101", "0111001110110011110110001111000010101101010101011101111101001111111010000001010011101101100010010000", "1001010010111111000101101100100000111011110101110100011000101111011001001001100011100000001010000010", "1010100011000011110111100001101011000110011010000000100010011011000010110100010110110011010101111001", "0010001011010110111000101010011101101000111001011111001101011111111111001000111000000001011110010110", "0010010100110001000010100000011001100111010111101011001001110001111100101010000010011110101000011101", "1001111101111001100100111100011000100001110101001011111011001000000110100000010100110101011100000011", "1101011000101001100110011110101011001111000111001001100100001000001111000000101101001010010000010111", "1111011001100101101001111110101001000100000110111010101001001110101000001101000000010000011110001100", "0100011011110011110100110000010000111111001001001100110111101010101111010110111101111001010101000011", "1110001011100011111010000010010101000110000101101011110110010110110011101111110010100110010100011010", "1110010101001000001000110001101010000010111110011010000000011010000110011101101101011110000110110010", "0010011001011100011111111001000010100001011011110100100111101101111000101010101001110000011011001000", "0011011001001010001110101001111010110000111100000100100000011101101000000001100110011101011111101010", "1001100000010000101001111010100010011000100101100001001001100011101000001111011101001001111101010110", }; #endif /* GNSS_SDR_GALILEO_E5A_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/galileo_fnav_message.h0000644000175000017500000001651112576764164024400 0ustar carlescarles/*! * \file galileo_fnav_message.h * \brief Implementation of a Galileo F/NAV Data message * as described in Galileo OS SIS ICD Issue 1.1 (Sept. 2010) * \author Marc Sales, 2014. marcsales92(at)gmail.com * \based on work from: *
      *
    • Javier Arribas, 2011. jarribas(at)cttc.es *
    * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_FNAV_MESSAGE_H_ #define GNSS_SDR_GALILEO_FNAV_MESSAGE_H_ #include #include #include #include #include #include #include #include // for boost::uint16_t #include #include #include "galileo_ephemeris.h" #include "galileo_iono.h" #include "galileo_almanac.h" #include "galileo_utc_model.h" #include "Galileo_E5a.h" /*! * \brief This class handles the Galileo F/NAV Data message, as described in the * Galileo Open Service Signal in Space Interface Control Document (OS SIS ICD), Issue 1.1 (Sept 2010). * See http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf */ class Galileo_Fnav_Message { public: // void Galileo_Fnav_Message::split_page(std::string page_string); // void Galileo_Fnav_Message::reset(); // bool Galileo_Fnav_Message::have_new_ephemeris(); // bool Galileo_Fnav_Message::have_new_iono_and_GST(); // bool Galileo_Fnav_Message::have_new_utc_model(); // bool Galileo_Fnav_Message::have_new_almanac(); // Galileo_Ephemeris Galileo_Fnav_Message::get_ephemeris(); // Galileo_Iono Galileo_Fnav_Message::get_iono(); // Galileo_Utc_Model Galileo_Fnav_Message::get_utc_model(); // Galileo_Almanac Galileo_Fnav_Message::get_almanac(); // void split_page(std::string page_string); void reset(); bool have_new_ephemeris(); bool have_new_iono_and_GST(); bool have_new_utc_model(); bool have_new_almanac(); Galileo_Ephemeris get_ephemeris(); Galileo_Iono get_iono(); Galileo_Utc_Model get_utc_model(); Galileo_Almanac get_almanac(); Galileo_Fnav_Message(); bool flag_CRC_test; bool flag_all_ephemeris; //!< Flag indicating that all words containing ephemeris have been received bool flag_ephemeris_1; //!< Flag indicating that ephemeris 1/3 (word 2) have been received bool flag_ephemeris_2; //!< Flag indicating that ephemeris 2/3 (word 3) have been received bool flag_ephemeris_3; //!< Flag indicating that ephemeris 3/3 (word 4) have been received bool flag_iono_and_GST; //!< Flag indicating that ionospheric and GST parameters (word 1) have been received bool flag_TOW_1; bool flag_TOW_2; bool flag_TOW_3; bool flag_TOW_4; bool flag_TOW_set; //!< it is true when page 1,2,3 or 4 arrives bool flag_utc_model; //!< Flag indicating that utc model parameters (word 4) have been received bool flag_all_almanac; //!< Flag indicating that all almanac have been received bool flag_almanac_1; //!< Flag indicating that almanac 1/2 (word 5) have been received bool flag_almanac_2; //!< Flag indicating that almanac 2/2 (word 6) have been received int IOD_ephemeris; int page_type; /* WORD 1 SVID, Clock correction, SISA, Ionospheric correction, BGD, GST, Signal * health and Data validity status*/ int FNAV_SV_ID_PRN_1; int FNAV_IODnav_1; double FNAV_t0c_1; double FNAV_af0_1; double FNAV_af1_1; double FNAV_af2_1; double FNAV_SISA_1; double FNAV_ai0_1; double FNAV_ai1_1; double FNAV_ai2_1; bool FNAV_region1_1; bool FNAV_region2_1; bool FNAV_region3_1; bool FNAV_region4_1; bool FNAV_region5_1; double FNAV_BGD_1; double FNAV_E5ahs_1; double FNAV_WN_1; double FNAV_TOW_1; double FNAV_E5advs_1; // WORD 2 Ephemeris (1/3) and GST int FNAV_IODnav_2; double FNAV_M0_2; double FNAV_omegadot_2; double FNAV_e_2; double FNAV_a12_2; double FNAV_omega0_2; double FNAV_idot_2; double FNAV_WN_2; double FNAV_TOW_2; // WORD 3 Ephemeris (2/3) and GST int FNAV_IODnav_3; double FNAV_i0_3; double FNAV_w_3; double FNAV_deltan_3; double FNAV_Cuc_3; double FNAV_Cus_3; double FNAV_Crc_3; double FNAV_Crs_3; double FNAV_t0e_3; double FNAV_WN_3; double FNAV_TOW_3; /* WORD 4 Ephemeris (3/3), GST-UTC conversion, GST-GPS conversion and TOW. Note that the clock is repeated in this page type*/ int FNAV_IODnav_4; double FNAV_Cic_4; double FNAV_Cis_4; double FNAV_A0_4; double FNAV_A1_4; double FNAV_deltatls_4; double FNAV_t0t_4; double FNAV_WNot_4; double FNAV_WNlsf_4; double FNAV_DN_4; double FNAV_deltatlsf_4; double FNAV_t0g_4; double FNAV_A0g_4; double FNAV_A1g_4; double FNAV_WN0g_4; double FNAV_TOW_4; // WORD 5 Almanac (SVID1 and SVID2(1/2)), Week Number and almanac reference time int FNAV_IODa_5; double FNAV_WNa_5; double FNAV_t0a_5; int FNAV_SVID1_5; double FNAV_Deltaa12_1_5; double FNAV_e_1_5; double FNAV_w_1_5; double FNAV_deltai_1_5; double FNAV_Omega0_1_5; double FNAV_Omegadot_1_5; double FNAV_M0_1_5; double FNAV_af0_1_5; double FNAV_af1_1_5; double FNAV_E5ahs_1_5; int FNAV_SVID2_5; double FNAV_Deltaa12_2_5; double FNAV_e_2_5; double FNAV_w_2_5; double FNAV_deltai_2_5; // WORD 6 Almanac (SVID2(2/2) and SVID3) int FNAV_IODa_6; double FNAV_Omega0_2_6; double FNAV_Omegadot_2_6; double FNAV_M0_2_6; double FNAV_af0_2_6; double FNAV_af1_2_6; double FNAV_E5ahs_2_6; int FNAV_SVID3_6; double FNAV_Deltaa12_3_6; double FNAV_e_3_6; double FNAV_w_3_6; double FNAV_deltai_3_6; double FNAV_Omega0_3_6; double FNAV_Omegadot_3_6; double FNAV_M0_3_6; double FNAV_af0_3_6; double FNAV_af1_3_6; double FNAV_E5ahs_3_6; private: bool _CRC_test(std::bitset bits,boost::uint32_t checksum); void decode_page(std::string data); unsigned long int read_navigation_unsigned(std::bitset bits, const std::vector> parameter); signed long int read_navigation_signed(std::bitset bits, const std::vector> parameter); std::string omega0_1; //std::string omega0_2; //bool omega_flag; }; #endif /* GNSS_SDR_GALILEO_FNAV_MESSAGE_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/gnss_synchro.h0000644000175000017500000000637212576764164022771 0ustar carlescarles/*! * \file gnss_synchro.h * \brief Interface of the Gnss_Synchro class * \author * Luis Esteve, 2012. luis(at)epsilon-formacion.com * Javier Arribas, 2012. jarribas(at)cttc.es * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GNSS_SYNCHRO_H_ #define GNSS_SDR_GNSS_SYNCHRO_H_ #include "gnss_signal.h" /*! * \brief This is the class that contains the information that is shared * by the processing blocks. */ class Gnss_Synchro { public: // Satellite and signal info char System; //!< Set by Channel::set_signal(Gnss_Signal gnss_signal) char Signal[3]; //!< Set by Channel::set_signal(Gnss_Signal gnss_signal) unsigned int PRN; //!< Set by Channel::set_signal(Gnss_Signal gnss_signal) int Channel_ID; //!< Set by Channel constructor // Acquisition double Acq_delay_samples; //!< Set by Acquisition processing block double Acq_doppler_hz; //!< Set by Acquisition processing block unsigned long int Acq_samplestamp_samples; //!< Set by Acquisition processing block bool Flag_valid_acquisition; //Tracking double Prompt_I; //!< Set by Tracking processing block double Prompt_Q; //!< Set by Tracking processing block double CN0_dB_hz; //!< Set by Tracking processing block double Carrier_Doppler_hz; //!< Set by Tracking processing block double Carrier_phase_rads; //!< Set by Tracking processing block double Code_phase_secs; //!< Set by Tracking processing block double Tracking_timestamp_secs; //!< Set by Tracking processing block bool Flag_valid_tracking; //Telemetry Decoder double Prn_timestamp_ms; //!< Set by Telemetry Decoder processing block double Prn_timestamp_at_preamble_ms; //!< Set by Telemetry Decoder processing block bool Flag_valid_word; //!< Set by Telemetry Decoder processing block bool Flag_preamble; //!< Set by Telemetry Decoder processing block double d_TOW; //!< Set by Telemetry Decoder processing block double d_TOW_at_current_symbol; double d_TOW_hybrid_at_current_symbol; //Galileo TOW is expressed in the GPS time scale (it will be the same for any other constellation) // Pseudorange double Pseudorange_m; bool Flag_valid_pseudorange; }; #endif gnss-sdr-0.0.6/src/core/system_parameters/gps_utc_model.cc0000644000175000017500000001167612576764164023237 0ustar carlescarles/* * \file gps_utc_model.h * \brief Interface of a GPS UTC MODEL storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_utc_model.h" #include Gps_Utc_Model::Gps_Utc_Model() { valid = false; d_A1 = 0; d_A0 = 0; d_t_OT = 0; i_WN_T = 0; d_DeltaT_LS = 0; i_WN_LSF = 0; i_DN = 0; d_DeltaT_LSF = 0; } double Gps_Utc_Model::utc_time(double gpstime_corrected, int i_GPS_week) { double t_utc; double t_utc_daytime; double Delta_t_UTC = d_DeltaT_LS + d_A0 + d_A1 * (gpstime_corrected - d_t_OT + 604800 * static_cast(i_GPS_week - i_WN_T)); // Determine if the effectivity time of the leap second event is in the past int weeksToLeapSecondEvent = i_WN_LSF - i_GPS_week; if (weeksToLeapSecondEvent >= 0) // is not in the past { //Detect if the effectivity time and user's time is within six hours = 6 * 60 *60 = 21600 s int secondOfLeapSecondEvent = i_DN * 24 * 60 * 60; if (weeksToLeapSecondEvent > 0) { t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } else //we are in the same week than the leap second event { if (std::abs(gpstime_corrected - secondOfLeapSecondEvent) > 21600) { /* 20.3.3.5.2.4a * Whenever the effectivity time indicated by the WN_LSF and the DN values * is not in the past (relative to the user's present time), and the user's * present time does not fall in the time span which starts at six hours prior * to the effectivity time and ends at six hours after the effectivity time, * the UTC/GPS-time relationship is given by */ t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } else { /* 20.3.3.5.2.4b * Whenever the user's current time falls within the time span of six hours * prior to the effectivity time to six hours after the effectivity time, * proper accommodation of the leap second event with a possible week number * transition is provided by the following expression for UTC: */ int W = fmod(gpstime_corrected - Delta_t_UTC - 43200, 86400) + 43200; t_utc_daytime = fmod(W, 86400 + d_DeltaT_LSF - d_DeltaT_LS); //implement something to handle a leap second event! } if ( (gpstime_corrected - secondOfLeapSecondEvent) > 21600) { Delta_t_UTC = d_DeltaT_LSF + d_A0 + d_A1 * (gpstime_corrected - d_t_OT + 604800 * static_cast(i_GPS_week - i_WN_T)); t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } } } else // the effectivity time is in the past { /* 20.3.3.5.2.4c * Whenever the effectivity time of the leap second event, as indicated by the * WNLSF and DN values, is in the "past" (relative to the user's current time), * and the user�s current time does not fall in the time span as given above * in 20.3.3.5.2.4b,*/ Delta_t_UTC = d_DeltaT_LSF + d_A0 + d_A1 * (gpstime_corrected - d_t_OT + 604800 * static_cast(i_GPS_week - i_WN_T)); t_utc_daytime = fmod(gpstime_corrected - Delta_t_UTC, 86400); } double secondsOfWeekBeforeToday = 86400 * floor(gpstime_corrected / 86400); t_utc = secondsOfWeekBeforeToday + t_utc_daytime; return t_utc; } gnss-sdr-0.0.6/src/core/system_parameters/sbas_ephemeris.cc0000644000175000017500000000344112576764164023373 0ustar carlescarles/* * \file sbas_ephemeris.cc * \brief Implementation of a SBAS REFERENCE LOCATION storage * * \author Daniel Fehr, 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include #include #include #include "sbas_ephemeris.h" void Sbas_Ephemeris::print(std::ostream &out) { out << "<> PRN" << i_prn << ":"; out << " d_t0=" << i_t0; out << " d_tof=" << d_tof; out << " i_sv_ura=" << i_sv_ura; out << " b_sv_do_not_use=" << b_sv_do_not_use; out << " d_pos=(x=" << d_pos[0] << ", y=" << d_pos[1] << ", z=" << d_pos[2] << ")"; out << " d_vel=(x=" << d_vel[0] << ", y=" << d_vel[1] << ", z=" << d_vel[2] << ")"; out << " d_acc=(x=" << d_acc[0] << ", y=" << d_acc[1] << ", z=" << d_acc[2] << ")"; out << " d_af0=" << d_af0; out << " d_af1=" << d_af1; } gnss-sdr-0.0.6/src/core/system_parameters/gps_cnav_ephemeris.cc0000644000175000017500000000541312576764164024244 0ustar carlescarles/*! * \file gps_cnav_ephemeris.cc * \brief Interface of a GPS CNAV EPHEMERIS storage and orbital model functions * * See http://www.gps.gov/technical/icwg/IS-GPS-200E.pdf Appendix II * \author Javier Arribas, 2015. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_cnav_ephemeris.h" Gps_CNAV_Ephemeris::Gps_CNAV_Ephemeris() { i_satellite_PRN = 0; d_Toe1 = -1; d_Toe2 = -1; d_TOW = 0; d_Crs = 0; d_M_0 = 0; d_Cuc = 0; d_e_eccentricity = 0; d_Cus = 0; d_Toe1 = 0; d_Toe2 = 0; d_Toc = 0; d_Cic = 0; d_OMEGA0 = 0; d_Cis = 0; d_i_0 = 0; d_Crc = 0; d_OMEGA = 0; d_IDOT = 0; i_GPS_week = 0; d_TGD = 0; // Estimated Group Delay Differential: L1-L2 correction term only for the benefit of "L1 P(Y)" or "L2 P(Y)" s users [s] d_A_f0 = 0; // Coefficient 0 of code phase offset model [s] d_A_f1 = 0; // Coefficient 1 of code phase offset model [s/s] d_A_f2 = 0; // Coefficient 2 of code phase offset model [s/s^2] b_integrity_status_flag = false; b_alert_flag = false; // If true, indicates that the SV URA may be worse than indicated in d_SV_accuracy, use that SV at our own risk. b_antispoofing_flag = false; // If true, the AntiSpoofing mode is ON in that SV d_satClkDrift = 0.0; d_dtr = 0.0; d_satpos_X = 0.0; d_satpos_Y = 0.0; d_satpos_Z = 0.0; d_satvel_X = 0.0; d_satvel_Y = 0.0; d_satvel_Z = 0.0; i_URA = 0; i_signal_health = 0; d_Top = 0.0; d_DELTA_A = 0.0; d_A_DOT = 0.0; d_Delta_n = 0.0; d_DELTA_DOT_N = 0.0; d_DELTA_OMEGA_DOT = 0.0; d_URA0 = 0.0; d_URA1 = 0.0; d_URA2 = 0.0; d_ISCL1 = 0.0; d_ISCL2 = 0.0; d_ISCL5I = 0.0; d_ISCL5Q = 0.0; b_l2c_phasing_flag = false; } gnss-sdr-0.0.6/src/core/system_parameters/gps_ref_time.cc0000644000175000017500000000242712576764164023050 0ustar carlescarles/*! * \file gps_ref_time.cc * \brief Interface of a GPS REFERENCE TIME storage * * \author Javier Arribas, 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "gps_ref_time.h" Gps_Ref_Time::Gps_Ref_Time() { valid = false; d_TOW = 0.0; d_Week = 0.0; d_tv_sec = 0.0; d_tv_usec = 0.0; } gnss-sdr-0.0.6/src/core/system_parameters/galileo_iono.h0000644000175000017500000000462412576764164022710 0ustar carlescarles/*! * \file galileo_iono.h * \brief Interface of a Galileo Ionospheric Model storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_IONO_H_ #define GNSS_SDR_GALILEO_IONO_H_ /*! * \brief This class is a storage for the GALILEO IONOSPHERIC data as described in Galileo ICD paragraph 5.1.6 * * See http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf */ class Galileo_Iono { public: /*Ionospheric correction*/ double ai0_5; //!< Effective Ionisation Level 1st order parameter [sfu] double ai1_5; //!< Effective Ionisation Level 2st order parameter [sfu/degree] double ai2_5; //!< Effective Ionisation Level 3st order parameter [sfu/degree] /*Ionospheric disturbance flag*/ bool Region1_flag_5; //!< Ionospheric Disturbance Flag for region 1 bool Region2_flag_5; //!< Ionospheric Disturbance Flag for region 2 bool Region3_flag_5; //!< Ionospheric Disturbance Flag for region 3 bool Region4_flag_5; //!< Ionospheric Disturbance Flag for region 4 bool Region5_flag_5; //!< Ionospheric Disturbance Flag for region 5 /*from page 5 (UTC) to have a timestamp*/ double TOW_5; //!< UTC data reference Time of Week [s] double WN_5; //!< UTC data reference Week number [week] /*! * Default constructor */ Galileo_Iono(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/Galileo_E1.h0000644000175000017500000034333012576764164022151 0ustar carlescarles/*! * \file Galileo_E1.h * \brief Defines system parameters for Galileo E1 signal and NAV data * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * \author Javier Arribas 2013. jarribas(at)cttc.es * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_E1_H_ #define GNSS_SDR_GALILEO_E1_H_ #include #include #include #include #include // std::pair #include "MATH_CONSTANTS.h" // Physical constants const double GALILEO_PI = 3.1415926535898; //!< Pi as defined in GALILEO ICD const double GALILEO_GM = 3.986004418e14; //!< Geocentric gravitational constant[m^3/s^2] const double GALILEO_OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Mean angular velocity of the Earth [rad/s] const double GALILEO_C_m_s = 299792458.0; //!< The speed of light, [m/s] const double GALILEO_C_m_ms = 299792.4580; //!< The speed of light, [m/ms] const double GALILEO_F = -4.442807309e-10; //!< Constant, [s/(m)^(1/2)] // carrier and code frequencies const double Galileo_E1_FREQ_HZ = 1.57542e9; //!< Galileo E1 carrier frequency [Hz] const double Galileo_E1_CODE_CHIP_RATE_HZ = 1.023e6; //!< Galileo E1 code rate [chips/s] const double Galileo_E1_CODE_PERIOD = 0.004; //!< Galileo E1 code period [s] const double Galileo_E1_SUB_CARRIER_A_RATE_HZ = 1.023e6; //!< Galileo E1 sub-carrier 'a' rate [Hz] const double Galileo_E1_SUB_CARRIER_B_RATE_HZ = 6.138e6; //!< Galileo E1 sub-carrier 'b' rate [Hz] const double Galileo_E1_B_CODE_LENGTH_CHIPS = 4092.0; //!< Galileo E1-B code length [chips] const double Galileo_E1_B_SYMBOL_RATE_BPS = 250.0; //!< Galileo E1-B symbol rate [bits/second] const double Galileo_E1_C_SECONDARY_CODE_LENGTH = 25.0; //!< Galileo E1-C secondary code length [chips] const int Galileo_E1_NUMBER_OF_CODES = 50; const double GALILEO_STARTOFFSET_ms = 68.802; //[ms] Initial sign. travel time (this cannot go here) // Galileo INAV Telemetry structure #define GALILEO_INAV_PREAMBLE {0, 1, 0, 1, 1, 0, 0, 0, 0, 0} const int GALILEO_INAV_PREAMBLE_LENGTH_BITS = 10; const int GALILEO_INAV_PREAMBLE_PERIOD_SYMBOLS = 250; const int GALILEO_INAV_PAGE_PART_SYMBOLS = 250; //!< Each Galileo INAV pages are composed of two parts (even and odd) each of 250 symbols, including preamble. See Galileo ICD 4.3.2 const int GALILEO_INAV_PAGE_SYMBOLS = 500; //!< The complete Galileo INAV page length const int GALILEO_INAV_PAGE_PART_SECONDS = 1; // a page part last 1 sec const int GALILEO_INAV_PAGE_SECONDS = 2; // a full page last 2 sec const int GALILEO_INAV_INTERLEAVER_ROWS = 8; const int GALILEO_INAV_INTERLEAVER_COLS = 30; const int GALILEO_TELEMETRY_RATE_BITS_SECOND = 250; //bps const int GALILEO_PAGE_TYPE_BITS = 6; const int GALILEO_DATA_JK_BITS = 128; const int GALILEO_DATA_FRAME_BITS = 196; const int GALILEO_DATA_FRAME_BYTES = 25; //const double GALIELO_E1_CODE_PERIOD = 0.004; const double GALILEO_E1_CODE_PERIOD = 0.004; const std::vector> type({{1,6}}); const std::vector> PAGE_TYPE_bit({{1,6}});; /*Page 1 - Word type 1: Ephemeris (1/4)*/ const std::vector> IOD_nav_1_bit({{7,10}}); const std::vector> T0E_1_bit({{17,14}}); const double t0e_1_LSB = 60; const std::vector> M0_1_bit({{31,32}}); const double M0_1_LSB = PI_TWO_N31; const std::vector> e_1_bit({{63,32}}); const double e_1_LSB = TWO_N33; const std::vector> A_1_bit({{95,32}}); const double A_1_LSB_gal = TWO_N19; //last two bits are reserved /*Page 2 - Word type 2: Ephemeris (2/4)*/ const std::vector> IOD_nav_2_bit({{7,10}}); const std::vector> OMEGA_0_2_bit({{17,32}}); const double OMEGA_0_2_LSB = PI_TWO_N31; const std::vector> i_0_2_bit({{49,32}}); const double i_0_2_LSB = PI_TWO_N31; const std::vector> omega_2_bit({{81,32}}); const double omega_2_LSB = PI_TWO_N31; const std::vector> iDot_2_bit({{113,14}}); const double iDot_2_LSB = PI_TWO_N43; //last two bits are reserved /*Word type 3: Ephemeris (3/4) and SISA*/ const std::vector> IOD_nav_3_bit({{7,10}}); const std::vector> OMEGA_dot_3_bit({{17,24}}); const double OMEGA_dot_3_LSB = PI_TWO_N43; const std::vector> delta_n_3_bit({{41,16}}); const double delta_n_3_LSB = PI_TWO_N43; const std::vector> C_uc_3_bit({{57,16}}); const double C_uc_3_LSB = TWO_N29; const std::vector> C_us_3_bit({{73,16}}); const double C_us_3_LSB = TWO_N29; const std::vector> C_rc_3_bit({{89,16}}); const double C_rc_3_LSB = TWO_N5; const std::vector> C_rs_3_bit({{105,16}}); const double C_rs_3_LSB = TWO_N5; const std::vector> SISA_3_bit({{121,8}}); /*Word type 4: Ephemeris (4/4) and Clock correction parameters*/ const std::vector> IOD_nav_4_bit({{7,10}}); const std::vector> SV_ID_PRN_4_bit({{17,6}}); const std::vector> C_ic_4_bit({{23,16}}); const double C_ic_4_LSB = TWO_N29; const std::vector> C_is_4_bit({{39,16}}); const double C_is_4_LSB = TWO_N29; const std::vector> t0c_4_bit({{55,14}}); // const double t0c_4_LSB = 60; const std::vector> af0_4_bit({{69,31}}); // const double af0_4_LSB = TWO_N34; const std::vector> af1_4_bit({{100,21}}); // const double af1_4_LSB = TWO_N46; const std::vector> af2_4_bit({{121,6}}); const double af2_4_LSB = TWO_N59; const std::vector> spare_4_bit({{121,6}}); //last two bits are reserved /*Word type 5: Ionospheric correction, BGD, signal health and data validity status and GST*/ /*Ionospheric correction*/ /*Az*/ const std::vector> ai0_5_bit({{7,11}}); // const double ai0_5_LSB = TWO_N2; const std::vector> ai1_5_bit({{18,11}}); // const double ai1_5_LSB = TWO_N8; const std::vector> ai2_5_bit({{29,14}}); // const double ai2_5_LSB = TWO_N15; /*Ionospheric disturbance flag*/ const std::vector> Region1_5_bit({{43,1}}); // const std::vector> Region2_5_bit({{44,1}}); // const std::vector> Region3_5_bit({{45,1}}); // const std::vector> Region4_5_bit({{46,1}}); // const std::vector> Region5_5_bit({{47,1}}); // const std::vector> BGD_E1E5a_5_bit({{48,10}}); // const double BGD_E1E5a_5_LSB = TWO_N32; const std::vector> BGD_E1E5b_5_bit({{58,10}}); // const double BGD_E1E5b_5_LSB = TWO_N32; const std::vector> E5b_HS_5_bit({{68,2}}); // const std::vector> E1B_HS_5_bit({{70,2}}); // const std::vector> E5b_DVS_5_bit({{72,1}}); // const std::vector> E1B_DVS_5_bit({{73,1}}); // /*GST*/ const std::vector> WN_5_bit({{74,12}}); const std::vector> TOW_5_bit({{86,20}}); const std::vector> spare_5_bit({{106,23}}); /* Page 6 */ const std::vector> A0_6_bit({{7,32}}); const double A0_6_LSB = TWO_N30; const std::vector> A1_6_bit({{39,24}}); const double A1_6_LSB = TWO_N50; const std::vector> Delta_tLS_6_bit({{63,8}}); const std::vector> t0t_6_bit({{71,8}}); const double t0t_6_LSB = 3600; const std::vector> WNot_6_bit({{79,8}}); const std::vector> WN_LSF_6_bit({{86,8}}); const std::vector> DN_6_bit({{95,3}}); const std::vector> Delta_tLSF_6_bit({{97,8}}); const std::vector> TOW_6_bit({{106,20}}); /* Page 7 */ const std::vector> IOD_a_7_bit({{7,4}}); const std::vector> WN_a_7_bit({{11,2}}); const std::vector> t0a_7_bit({{13,10}}); const double t0a_7_LSB = 600; const std::vector> SVID1_7_bit({{23,6}}); const std::vector> DELTA_A_7_bit({{29,13}}); const double DELTA_A_7_LSB = TWO_N9; const std::vector> e_7_bit({{42,11}}); const double e_7_LSB = TWO_N16; const std::vector> omega_7_bit({{53,16}}); const double omega_7_LSB = TWO_N15; const std::vector> delta_i_7_bit({{69,11}}); const double delta_i_7_LSB = TWO_N14; const std::vector> Omega0_7_bit({{80,16}}); const double Omega0_7_LSB = TWO_N15; const std::vector> Omega_dot_7_bit({{96,11}}); const double Omega_dot_7_LSB = TWO_N33; const std::vector> M0_7_bit({{107,16}}); const double M0_7_LSB = TWO_N15; /* Page 8 */ const std::vector> IOD_a_8_bit({{7,4}}); const std::vector> af0_8_bit({{11,16}}); const double af0_8_LSB = TWO_N19; const std::vector> af1_8_bit({{27,13}}); const double af1_8_LSB = TWO_N38; const std::vector> E5b_HS_8_bit({{40,2}}); const std::vector> E1B_HS_8_bit({{42,2}}); const std::vector> SVID2_8_bit({{44,6}}); const std::vector> DELTA_A_8_bit({{50,13}}); const double DELTA_A_8_LSB = TWO_N9; const std::vector> e_8_bit({{63,11}}); const double e_8_LSB = TWO_N16; const std::vector> omega_8_bit({{74,16}}); const double omega_8_LSB = TWO_N15; const std::vector> delta_i_8_bit({{90,11}}); const double delta_i_8_LSB = TWO_N14; const std::vector> Omega0_8_bit({{101,16}}); const double Omega0_8_LSB = TWO_N15; const std::vector> Omega_dot_8_bit({{117,11}}); const double Omega_dot_8_LSB = TWO_N33; /* Page 9 */ const std::vector> IOD_a_9_bit({{7,4}}); const std::vector> WN_a_9_bit({{11,2}}); const std::vector> t0a_9_bit({{13,10}}); const double t0a_9_LSB = 600; const std::vector> M0_9_bit({{23,16}}); const double M0_9_LSB = TWO_N15; const std::vector> af0_9_bit({{39,16}}); const double af0_9_LSB = TWO_N19; const std::vector> af1_9_bit({{55,13}}); const double af1_9_LSB = TWO_N38; const std::vector> E5b_HS_9_bit({{68,2}}); const std::vector> E1B_HS_9_bit({{70,2}}); const std::vector> SVID3_9_bit({{72,6}}); const std::vector> DELTA_A_9_bit({{78,13}}); const double DELTA_A_9_LSB = TWO_N9; const std::vector> e_9_bit({{91,11}}); const double e_9_LSB = TWO_N16; const std::vector> omega_9_bit({{102,16}}); const double omega_9_LSB = TWO_N15; const std::vector> delta_i_9_bit({{118,11}}); const double delta_i_9_LSB = TWO_N14; /* Page 10 */ const std::vector> IOD_a_10_bit({{7,4}}); const std::vector> Omega0_10_bit({{11,16}}); const double Omega0_10_LSB = TWO_N15; const std::vector> Omega_dot_10_bit({{27,11}}); const double Omega_dot_10_LSB = TWO_N33; const std::vector> M0_10_bit({{38,16}}); const double M0_10_LSB = TWO_N15; const std::vector> af0_10_bit({{54,16}}); const double af0_10_LSB = TWO_N19; const std::vector> af1_10_bit({{70,13}}); const double af1_10_LSB = TWO_N38; const std::vector> E5b_HS_10_bit({{83,2}}); const std::vector> E1B_HS_10_bit({{85,2}}); const std::vector> A_0G_10_bit({{87,16}}); const double A_0G_10_LSB = TWO_N35; const std::vector> A_1G_10_bit({{103,12}}); const double A_1G_10_LSB = TWO_N51; const std::vector> t_0G_10_bit({{115,8}}); const double t_0G_10_LSB = 3600; const std::vector> WN_0G_10_bit({{123,6}}); /* Page 0 */ const std::vector> Time_0_bit({{7,2}}); const std::vector> WN_0_bit({{97,12}}); const std::vector> TOW_0_bit({{109,20}}); // Galileo E1 primary codes const std::string Galileo_E1_B_PRIMARY_CODE[Galileo_E1_NUMBER_OF_CODES] = { "F5D710130573541B9DBD4FD9E9B20A0D59D144C54BC7935539D2E75810FB51E494093A0A19DD79C70C5A98E5657AA578097777E86BCC4651CC72F2F974DC766E07AEA3D0B557EF42FF57E6A58E805358CE9257669133B18F80FDBDFB38C5524C7FB1DE079842482990DF58F72321D9201F8979EAB159B2679C9E95AA6D53456C0DF75C2B4316D1E2309216882854253A1FA60CA2C94ECE013E2A8C943341E7D9E5A8464B3AD407E0AE465C3E3DD1BE60A8C3D50F831536401E776BE02A6042FC4A27AF653F0CFC4D4D013F115310788D68CAEAD3ECCCC5330587EB3C22A1459FC8E6FCCE9CDE849A5205E70C6D66D125814D698DD0EEBFEAE52CC65C5C84EEDF207379000E169D318426516AC5D1C31F2E18A65E07AE6E33FDD724B13098B3A444688389EFBBB5EEAB588742BB083B679D42FB26FF77919EAB21DE0389D9997498F967AE05AF0F4C7E177416E18C4D5E6987ED3590690AD127D872F14A8F4903A12329732A9768F82F295BEE391879293E3A97D51435A7F03ED7FBE275F102A83202DC3DE94AF4C712E9D006D182693E9632933E6EB773880CF147B922E74539E4582F79E39723B4C80E42EDCE4C08A8D02221BAE6D17734817D5B531C0D3C1AE723911F3FFF6AAC02E97FEA69E376AF4761E6451CA61FDB2F9187642EFCD63A09AAB680770C1593EEDD4FF4293BFFD6DD2C3367E85B14A654C834B6699421A", "96B856A629F581D1344FEF597835FE60434625D077ECF0D95FBE1155EA0431979E5AFF544AF591A332FDAEF98AB1EDD847A73F3AF15AAEE7E9A05C9D82C59EC325EF4CF264B8ADF2A8E8BA459354CB4B415CC50BF239ADBC31B3A9C87B0843CF3B9E6D646BA43F866276B053826F3A2334CC5E2EFB9F8F195B382E75EEA63F58A06B3F82A3B5C77C1800FD9498F803E524435B321210BB84690BED0BBBE16D363B3A90656A73720E27008852FB7DACC8284411B177728D9527C560859084A395A6F11A96AD9DB6B43E00642B000ED12BFD967868EAB1108552CD4FC89FBC408ACE7678C381EC91DD000319124EB5D5EF52C4CAC9AADEE2FA045C16CE492D7F43743CA77924C78696FCBF2F9F7F36D8E623752200C6FCBBD71ABBB6877F3C5D6E6740AB0389458A6B66440858B2D383244E853646FE2714211DEA9E6196252815BB704A20BFE556AC474F8998944E0CABBBE21A6400B87BFDCF937D12B2821D59298AF4AD378F0F42BD8C41693B8D993CF37C8B478F3BB5D33AD2A9FA24AD7B8FA895FDBC04964192F7BA3FF74E0E3A435B5DFE042E3115CACF29624C0645E9C917534A2EBC1F5665E4E1B1BC56208DBCD8A27CCB6474D5D0E20CA4072C960E5ACE41BDA3770DF3B681F2B318F6F8E1CB17C2857350FB6009AED665E13B2780D79217F73FAC7A8A48048DB0FB8A8A5007CDDC9A7B2DA8257C99F1CB605A18204", "E57DE19A3E4A8C122FCB1DD6584B3D2DAE364D800F9C5A9E957B38F624CBD3ACC58FA3ED070B5E44857CCB813FBC0BB83B5D157C6C562422E5963CC4DD753C45B0264F8E136A0F1774D77A543E44D51EF8C6B9408B6E3B5CEE1347A94F13ECDC94DC764976E5A50B4CB0AE7557553B47EDFE03EC2CD32EA8D125A341E1EDFC77E75330D6E7B23DC838EBCE7E5567F5B8C80C3D15E7404B4E10F0BEB0C69626A814AF91334199864FC77E0FF548DC2A6FA6A71C3C0561F2B085CC05E8512E27B9DBA60B93D114B87935776C8E9A67905C429D48BF3AB1B0A56FAFBFD5D9C8D8C8A9E5918BFF273CF5E8664FF2B90314BDBFDAD5AB8C22A0E45C104ECE75EA43FE9BDCE306A5A28AE464628163D249D8056005F1A900951808CC8620F81768153436F741667A8E271DD986C7A1E5046FCC74C7CEBBF9A1296D6CF0B2FF85BE412D87214BB368DFF462AD649D7324A117252311C664D33E4DAFBD830FBCEB6EFBDD7391D4BADA7A775FD1949D981F619655DB3C22BAC34E5AE41222905C0C7E80D6EA28471EC0468756531C09A471EDBE200472E78F1701FEE96E5769A9893C0F11E7906B064442E06E21ED8B0D70AF288690C532A2D03B373E1E0085F62F7AAA658B569C5184E3DDC40ECAA88B887118601691892F9F55E2DE79E49DFF11D434C2BA3AA6447522A7C99DC215CAD2ED0114ED62CBDAE9D315E48AE14D2014B7F8E", "C0FC4C72A12023BA7093C86775DF3D2F42C7CEDE616876340BE4301361B9DC9DFF4F1DEC6A62E165927BDE4F809E969AAD085437496BB95904719820F4CA8ABBA0B84C34B06DD7E268BA10E386FA7DB9FCFCDAF2B6AFBA46A8A299153B4E11582FBA7F28F0A0F9DE41830AB33335062C57D81DC361EDFE491939100FC827F36273760043D1C35B74E36C6C4DBE1D307847D55AC07D8B212C2DBA632A86AB15BD0FAFFA43070644C7E50623195A3796AA8E8D6E4E964FA0E4488A500B9063FBBFB1204A0E33C6CF2879AC2BA7C86CAB57E3E8A497836194E65C5C39B950F1AFC3B58E850A5EC39F4190D55351D16529CD52B36DF4A2DC68EE202BB758CF19C54B0E1461D547B5D06C2F9DC09C2B15458C3140860E4C6F3FE4F417FDFCEDE00F71212EE137E6669E569A7845470CA564F85CB4772808D65D2B48D409B709BD7AC5F7E28AA804CE9DAC3ABB5A5B768C6A184B5A974E933F2C1772FF64AB26BA2D5A165744E314EFB2238AC4858A8B82723DAE8865478EAA261F35DD4D98A9C07ACB0B822AFF1AD3E739CB214CE737196FEF2DD0B0D45BAC423935670BCF71C2EC04CCB98943786173C309E75A02BB78A788A5E6F8A8F407E57B8403841A9E1FCB3A7AB80D1F6529770E52C173E2C47EDED4400D5E665E325ED845C9E8D0E66FDA16B17D61EDBB336F22688C3F0FB040A55F33B65FA9F3D45F5B22C445CBF9DEB22", "EA9596357B343DFC31D5875CC0E94117A33651472E476D3892D8112EB6CB6E0151D409C5A514DCDA38A773C58F18B590EF9017B6EDF0192AB7EB29DD6E1E7E7390C13E9B10209D5775F3B066F7B2DBB7307FB44F726DD2F368A5FDBE75BA7248762E1EC7E4589DF1A353A16D6B3CAC1C9ACDB89890ED2C4F44AFEFC763DB51D102230C37E1ED0943CD6F4176B2F5C19119588911ACF81A7A29320AD579C1BFAED1A70DEE1B87037138ADE411E0BB92F5B3148DFA11F2F84CA6C019124B922837503AA9823A97E443A66378D5CB3130A7EC9B05670E85D095D5E6F603092C632E51FD9013FE7FB9F08448FD09F1219A4744CDAF82BF9C60039C8185C7E9559FCE301C6D3F46A2E514AAD44D3889C8CB4ED7439BF47019194F2644363770F8BBD0AE92B6F5F43CBBB503A885239DA636903D4C264B3FF09AB77E3FDBA7EFC63E0792B6D5183759E57D8A694CDB133B4A9E301CEEEB978050AD9A9E410091AD29E389829E2F24BE1E3B24F4540C4A6533EBA72E8AD540BAAE43A0CB82F971F3A51DD77FE9E1956E2EE7553E050A1D10B99552DDD5B68F2E2859712835BD2AD6B08881753B4833FB04740E3364D2CD4921B939393E7EA91B854FA1E5A8EE79FF0A83F111F78435481D462E0E1CBC0C921D190A435A1BA755E4B7021244FC5E3F0630F2A1F439C02AE619393E5624834B05ED7DEDE5F0AFC7A40899424E75D4EE792", "90E92279CD4F60D98F6E8FCB3E9263DB60FAB146A835AAC2E96B3BE3FF07119032DEE0521C731117E90C2943B389DD6B65C5E21C34F86F5A7ADE04072DFD1479EA36528D340736B0FED4F6207BE9F6CFC971D5EA11781AC2DA25DBEEB6B903EF8BB0AC0CD2E29F94B8CB67874A7B7441045758E09EA061181A50E0AB7BCCF801554E0644780BC137436E3FB7784C182856A790D6943BB53DB40D13D6A2F7B83A5C521073883B90FB8DB1C0F954D132943C09156A09984B822079FB8FD09BC07C1D6336C7CEAE8CC3162760B9838CA6A38FD0044FDF099E416D57BF9F33A551043F34EBF9BAA90901E62D2D981065F977852072F692535DDE24EE8946387B4E5B0FEFEBD75552C1FC325A608A78079A9AC864F2F30010A3304CB16A26AF98D9BFD3B8D128541190B2BBEE275A6F53B9BC5108306985ECBB983B56E34F18B48A12AEAB88271F4F780CFDFA83E05E35C12464F4350597CCAE9B4498F5A5454DCC3218D3336763674934ADCBCB5EA52891EB240C362248226DE64899BE30735F6495E94AA61ABEF62B803C57FDD045B724ED1966B6E7DFDFCA5B36F7B0FACEDAC62DE8E10B12DFC84B1A9CEB407BDE63CDB5208ABBE5E066AAF262187E94502B1701B2CC8681CB616773DA2B7AF49443CFF528F45DD7F25959836771908C2519171CAED2BCDCFCEA46301E7D99A5AF7199155772E92BAD85F35EDB656F0999EE828", "A91F570102961D62CA6CB55144AFCCEAF3910F3336DCB029CDCBA164ADA72732771B6ECD1C58E49F468A2BFD23E1B996DABABBAF5AB3A4C74926187B5833006F8BEF7F9CD0F05A2A0B9BD9073C4C3976E8660CE7BF81634CF0B31C3DDD806A6A0C15BC552B83A86789CC675A6D137BE27BC86DF68FEC5D268119EB9E965260FE1F5C56AEF60A8622CDA8C42F24CBA7F5B07A7416917277323314AFD3ECD10F74BEE7B22DC760EFA7F935FC9963411353782547FAEED32E69A4FB5756C1A73CCDFFEDE50F4B2D9B5D2ED5C59C9A52D80CD27B989B8DAA14C569E763C08FD42358CD064B2DE0526607C9536D75E1617EC80615EF5EE2314FAC29907B61B61F8696CB80B14B3A0148EEBC825C91150A08A23FC7B38B5982AA02A18BF6E91B3A1F2EEF360F682A34AB36CAFCAD556841073F219910F7BC2F07CE45E98F77F50475DF9EDFE2DC9E3D7280193D61AB5076A14887E9D9193C3B83C5773BDECA067CA1BC3D4561C3A8B4E30072A6269B529760CA1B5FE9D3DB2B5D1202CE8B18E9E2E80FAFF47108168D3C7EB3C940B1A35A1D1B968A5A9DC0686DD8336E498C240F20871600FF995B9E33169DCFCFCB58E75C94D82F843C60A7118F0D7B40064A8A4176C5158E86AF0BE4C1D5D73D1C051132A85CC0628486AFD660502A515D6353B674B1D4E61750C13E8A3AD48FE1F89F201C288A8F443867C2BAC23C706EE7A2D2C", "C6E00978E351164532EEA256ECBE0D4F8FCE02A276BD19666DE93936F7A242FC4C7E879791314B043ABF1D5F9B0036ED22AA92028C800C4D62BD6640431170EA77311865074D670AF2847AA47CB94584A793FA82F51574BD7C62BF14386F14A3D7DBD129FDE64EAD67EB35D5E13FF214D7D163B770D4A77A62D02D88C0FCF3FA5EC306EB7F85539105FA2CE5F53D182E58FBBC1C57CFBCD2D2F7FC8A067D6FA0BC834DAB8F370B0971BF6D068CD4D3A32C11C6598DEBBAEA046528C5EF762828CC84D003847069FA18743A809A004431E83924B8FDF0AC78699B905ACCFF82E83FDAFEC8648DF64042FC9438B261B73F0541498ACAD67D702AB631BECEF8680D33CE8F4F0CE29B95132591A350DD68B36734B97D4B3E84A76497F702312F2A8370DCF26A7C3C8EB91DD8699C48F551750712683E0397083714A6CAC3457C0FA70BB3A036C6E0BEF24E6B20BA5565B351C2EFD56BD9455FF7728BE07A097208E73DE4CD0CB4E215B4642365123CDEA419B28459D50E864B762554E7C1D7CAF73DA7D40EDEF5D824A2FE1A6CA473B07370932A8A5D441DEE3C9A60DB68E27A9D3E9C8229B44E5B434C6D18A8CADB6D17BC4614DEBEAD670C73132CE2F999C8716D1098C69277E8ECAC546EF8002E5182E25F31A354DF112E97F8733DD20893B430CD7130E69ED4A0FE4D6C2E4FA479001E42EBC9F36E5DFD3E0BE35A64B89745E", "821BBB3FB91E50253A9E71AC379ED57AEF394C2CC59587B2D0337CE74002EEAD17AB5D504BCA68BDAE9061C3DBAE2985EBE292B9BEC9D3542015225F44ED3C2C3FFB036A515BF33DA1690F3438FD225A5034106C5F4BCC43301EEC2245D73F63038E2A7D9B8CF95A9FD813FFA071FFDE423E0CE737969578BEB909764A8D6DAA9E15A4FA0867831652C0F6E9AAA39A63F0AEEF62A433476CC7380460ECFB8B7F3B2FE8C4C42A3EF1CDB808FC9747FB4F044B3B47A4EDFCC9463ABB72C55399B2F79EE5FEDA270D6358B27F8466969DE4A5F2E6A5F2C4CF0813C09F468DC97FC0E5DD057A8A0355767B698F8A79BF0350C4200413A15E6591DE70A1B502E19FF515C3DF36935974A4764895B9E3CA2626BD39B7ADB780AAF7E2E914E804CA923089A51F3876649C73CA3C2623A8C95D11EF4B3F941E9772EBA1F47212C666F03F01509FF699F74EDE27182B6E98AF49D1BAACB41A328A8C34D6E8AA3553DA3962B27B041495F269328B6BFB4A385CBB118953F3F009920EC4C8590003290DD60AC89177BB8C4BF753CE723AECA392B8D9E5E9E4113DD062F294A77B6EA9A0477E697C04C787CE78A92C704409D37D37B6B392128698D0D8D4CA101EB38B92F467F0D86EFD8759A14162CAB55F8C457E82392790A5BDDC8DD2663944F880C95EC02FE5363B064623994EE5D4396C0E44DE2A3D225830BA6160270BCD110A942B0", "92A0DEABA9875D4AFAF99A24C1D5F10EBBE6DEF9CAE5B0C85B2A0417C1CC5D1A5F71CD8F8A4B013C3F012C0A19EE4A23106CAB8662C5A2A93A971D0B6E487FC05BAF5C355A9520C9148584CFED3EDD0F38696E161E64378C831C586D9178A0CE289A67F33AE68C02A3CD138FA09DF1CAD01EFADFC8BF6F5407B79B18D09C82804736752D08A1FE09EB35F544E9F797EA36DB493BA947AA82513EB1615A356B5AA4308B0B4183E070EB494D628159D2D4BC3CB110AB0CCB2E9E73B5B7EB567187621E72D99F1FB78565917B28464A5F29DD8D6F98B6ED703040A44B0ACD97F15049E009E8533FDB0B6DB2F2582E6BBF81D7B0EADC8F402508F6B8531AD13FD1C55978A8A70DF4E053DD475132D348AE27581370EC14A3E0F96E0D70DA4946DEEC0760011404FDC5B436CA7419D05895F5E0EAEEBC88C74947733BE9919F18CE702887A6C4DF7C19279B82FB646090822DA9CD9C7653F6B931A337A28F7A4A01DE0CC0744F22961045F8EF8D4B30B07E5EDF5FA944EDCFB9841A9088AE82444FCB6E90B0E9C567A80E8C42EC713D78132F37AD1D2592C31C93D2EAEFF38AD94E5C0D94F949F47B88B03BC1EA4E5EC9C7D9DF19ED208B8E44FFDEB0B625F633C7DB1C826AA9E1C1309E5B14A0DDDB79714DFDCB52221CEAD7E8A140DF7806F127156478AFBEE922B8ECF322D66B48BEC434299BBB36B3BD9030467B7F2EBBDF358", "AFA7FBAC93326D0C36A388831B99DF4D527BCE7C9070F7B46B5FFCDEB07384801AE5F86A89934DE23DFE2C1AD117797D4FA1BBA6175823B41166DBE9D126F17B3761E2C352AB396A5A9CCEA42A5E9EA1BE3497C0A5BA9121DB97F64159AAC78E62D7DEFF3BF4CF73F8CFBE045C9D39E41D5D208DCC4B47CA27E900C3CD8FD1408DC5E0F5114F2FE65817D37CD1452C4967ACAA2119FB8D60E5E2FD8A820D0AADD88B94D40435C095568AE6394D3B97C835BA868A83083316C49C75D36EFDD85165BE74A4F2B2D21295EBCE085D9C4A4758FDD9CF71B97FDF34B7B63A5E9691DBDAB834D87D5B52CA9A53032FFE821398616EA92625C2DB633E37911987083A3B49A86FC562FB1264A75643A5FB6E97162E16ACCE353227FE61A859E094C2359BC4645946AD12AE5C39C70F59EA7B597A9B3372C23AA578146781A61163C92816627DD9C4BF1788087821F9F5D41B75A0F251B06BBD3E29ABD41E72A1D48323D24E2AD6F11C2D49678CC04FCF6B0EFD33BE6DDCD444F5CA02FE158112631F782CA7B0C5F3607ED807495BF8E82C5EA51A922FE28C8168D9844859E7A3EE3038C5D1D4BB4B13406C340894DF46406836739E31D01082BC84489592DA0E985630CEC40702A36DDC301B3AE1E8101786FEDBF752F9E175287C239C18FC25795BCB479DEF59C58C373313C02A1BC5F16355E2B50EFB58855670868728B902653ED80", "943CAEB680AA3E630755DF32F406F403D7AF5E48A710274D3887A7AAC8EA6744B889F2E0CD2033DEC0B434A9591254A0AA68C5C9BF11D35765E86B437497D84E5DCBBC0C0C580CE9BC50EC6382AD74DB02C2C233B7BB07517D48056226C505ABF2DD244F6BBAA23313D570558B065E42327768078EFDB53DC465DA038E3B216D990EE951B3E13D3C1CD559998F77BCDCD2B9522B6F1DC5E12C912EAEF574AFD69C251F9B2532501AB9F4B3B2223D0F8920BD562B0D358A14AB0D196DF6337D1C96CDB47AFEC6F81DED4B5773864DA32FCCD06B9AC53C122B2C6327E6E5EFE227DE4893FF15BBB2257FAEA836E99676EE32BF6FC14D4F56EA191B8A3870374A0867C49EB0015D1C6D07B87A36BFDD1DCEF20EA7B80D997CBE2D83EB5630F2EE6F73B0D50700C89E4F32438F5541360683DF11DA6E7A3C1E7DB2A87800D9245BF04278C990A8DC9CD86DEF39CBC6D4BC00FF13BBE132F9D86681A8913BE787CFC69C35304824788716D52DC74CEA399E06DE6241780447C74DA8E947134D8B2FAA9648D6D5F34C9D60AE5973B5BB0187796D589C8FDDD7675671F28C04AC1038D09251980683CB712F694D7C5B0D5B1DE86CD10EAC4EA04A55BA8803D78249BEF516D38067890105A23212E72879FA267A8B4F0455A81F17CFD3E5DDC55E5D4FE00F83E18626C676DAF00E6AAFCC23D209DEE0B0FC6C2AE4DE161D13017ADB5D8", "E5E70E7837D094416558C044D758383EDF5755C80921218ABE76E51FB93249E211A38FE6D07A7DFD2263E6E3D8DA0F921A06A606B804DE7AC3FD097E5F96EFCC0F544D623FD6F43FB88CEA7C341E901CD47A7E24AB141E998FE41CA87CD6CE8C1870D9ABB6503BF7E8B659084BAF2237DFC94F35C9884C7F44B87120BFCB298696E613C1656AC4899781A94869EC603B4D38665337CA8593AAC83AD8BECE10302E4B4694237E96CCD3AD9CD5F8EC039A1D1A4210716371404C5C3FF375CB3A33559B1C1A239F2E442C8EB033501BB290434BE73489F716965393989422CF4D57E5B4F3C76AF3C5E8999E61805134B9D7C40BFB59D0D0FD30F98567E66D6148D6AA64F74A22C50AE49D6B1ECC6BB5A002ABF38FF2E2436766B86BDDE7D95DD6E02AB0FF06E7BC22CEC98D55AA2BC4D7B91C36B2FF9F525A74423498D548318509320FCCBCA582A6C2996AF6538422FF0DF060C0BC7356B0850A139AC3914338127B786F4BC58CEB6064DA881376A147DFF53C6700BD13316A5874A75D7B9713DF54FBB393BAFAAD7F7B0710C049A0B6A8B76A9956BF6185BA39D9C347D179FBB97D4FED68F47DB5AC8E0D40122EA51C4A1F88D23153DF651A180C2AD456ABD7F851B65B220A72BA48FAD0436332E4EE7EDC554B7D75481EE05C3D3453D760E9099DD27B324DD84C0C0C4DEC4C674D25284B16410F959FBD09D9DF09CE875601E", "BFDBC82ACB4FBCD5A90C5967EB2FED597A02607F426002128AF4B38942C85AF4472B3CBF3B183F240E049B251713740A31117F108936631FD0F11C5F79325BD6677A2C2B242965AEFC147D93358730AA782491209CBE600976F56030753CC979C240A196647CD9EAB1DD0380E59BC7905EF740C3411AD9DD72027D0D3DD6DEB0F5F3C18F6D6F7BC59B758E7E262937B4599B38567C147ED2689BA2CF23736CAF55B6925827E2B70E47D3813C94C85298BD6B49C97B5D0221BE9E3164B6FA3D95AECF53AF170966090F19A69E75F188BD2556B4E8FA7DC4AC6C34F54297C06C2A96DD1C45B42E6175B5E8784568F7FEF0B6C124C5019CB577B374941E8515CCFC21F46D188BDD2C2284C688879A5BEC50CCB97FAEE1F75580577498D509D3DE161BE216C873B29E178CE17DCACC5E9E2224D05ECC842FBEAB82A75AAA20769FD81131CFB69D5E35409273CA106FFB27F63FF997CB500F161F6DD3A8BFA5719F004EC17860152D3290951678A131E4F3D3AB34CFFCAB2967ED9D8F1BB987950306BD28751D2AEAB05F071B08574EFCA01E5386E04F727BF413A8279E9392EFB64D9AEE00877C76C81EBC861E2B484A2D35E592A131726CAE61BC010B954721A82C968CC6F384D9BBB99B4E87846D10B94EE31F64846A5834DF73A67A267B894B1C06242D750F15F3E1E850A11CB2E2B16155008F91493AB3BC77CF9BE56F9DB20", "D64F3D1CB54CDB9143D9E701BD313779C09DA064D9A85674CCB53B0C5B4446C122098961D5EFFD6A85537486D5EB26B5E18FFBFB8E6EF16C2DD2C02EC7C07DB15CE33015A636E225F744C963BF0653A89A48F1AF04819E273A3AE1F5538AD574D553C5A0DEF47B552957037BCA921970C76DDEF74BA083ED55363760A6780612C075964B083B4F674EA0012FD1DF09F0445CE75A698852098206868AD8241E3B319FA8D2D86DE6E7631DF1AEB571F9676323E0627307F6D8F569536A758DE5EDAAEDF80F4335E3AFCAD07F70AAD5CD08CCA1E71B84D4D97931F924AC0010C0811972ACAA414B89FFF7917E653BB31E9CDFC72595066C662CDB9BBC96152D46BF4E8C15A8D34809C4B9D79871BDF0B63FA294F2D667624F6E0210CD40C92F1C033C3D8BF089EF85C4F571CA727C71B23128A9B0FFD70CEA93C316FC4D69D79B089107F292E03425B2552AF5AA18FDB9AF86EA1972B66B1276B09119437E4DFB8F8E3972D91A93816EBD7D8D715CB47EFA742938B0B49FA27A291B0DEA1DF0B8F878332103F45A99936896181E51FF65C6995F57C2C54B8002DEFF54B0EB3131EE7D61030C33B5502C49CF398FEC4B7615D16FCEA3E8EA12BFB311D426331A06606CA5A066707C4AF8D1048F1CA6065FBE506D06C6C00D5D250E227265551867A6816F05155FCBDE24D4AD115BDA98AFE08B12A1F32E7C2ADA801FFB78BA05726", "9D6AD9889EA02FC9A58949290975DB0F512EB37C8156CC9F1242B9E45F22CC1D6ED1CBCB6CB245811CE729261641FDF7A8F389BAFD7311B8BD689E02409F6E8C5202F466349EA466E5398B29C8CB126D9600D89697A07A6900FE8D95951903DAA3419839C2D9E35E9F4EABC04C9006EA585F544C7163A33D7E78DE28256B7B8978FE018CB529F7F79BBF66DC4F0DECE80AE3C2CD479D78C4480E4DE2F06C70E5FEBDFB4ECAEDC2E7BD891AD6C91A7C2446F1B13B340B7160782F6CC5B45F9787CF1B0985202DDF02EC552A6DC41325FD8D31A4316C13C56F7157134F66E1D103CC3AA7EB951C92094EB4409E6E7BC494434FAD80999D46D824A5A57390599052025F7DA4838F7D16A8DACDAFA06D175546FADD1E3F7975265230F6C01B9C1FB1B7AB1F2FDD43A5778E3C88FBEA70575CA26D94D249670E4D9FF28EC67D15829776D7BC6754D2A2BB01554E5FF0C3FAD8A1CB546E8AD5E5314103D086D14ABD30EA95DDC591C13D96C1CC3F60FD18D216B67181B6324AC09A97C0C45E50EE8380ED42F6E0430639373E7760C708248EE7D74830E9594114879748883F247D056B2BA94A0FC54CECF6F5C6AB4DCB7CFC8C224F40D886427504233DDBEDCE160DEFDFFD69EE2B75746D9CF71676DC453FD01C315ACA96373ED387B040BDEBA7FF3CE00D915F90AE6E1796971F8052160154E8986913AD7BA291188EC49A60BE27C", "B5184F7D580935ACFF18201CE8B5D54CD0A1CACF102FBC8AADF391C4CA5807BAEEF4E5E47F7459E74485E48E0C42D27CADE6970714FD97C08F9592FDD387C859FC12C1CCCFC3EBF510D66FBD8C448C25A322CC5887F94A55D48ECA362C690F24833C3B032A047D12BDA2ADC6824A1F6EA9320BED27968E9CFBDEC60D041EF538F1740C0519003FAA89CD4224293167E05344998FD396EEF618E8F547990BC06A8B76D0FD6FAC13284601AB7191CEB813C46C45CE7B3FC09EDF08DAFE136BFBDD63E6CE7E4BCBB16C5DA68AC71A1298FD27363349A261C2F2CA8CB799E8604ADF70092BDBD6A04CB80568776A537AD1711891B251C74E42FCB095B23EEF70F167E8B4856BB7F92E3A43C79FF4437262DD70BAF9B16CBF5F10D1AD7559AB0F8CEE1B9FAD058E84FCC342D9F0D9FBE4207D40E281416506242CA1B8DAB28DE88D2D00BA21AA7FDDC25940CB29F02811F8DC6850A6A87D72CA9F3476A73649FB4A254B1204CC1261E7D512BFE7B0D0091AD5CB0FBBB765FB5AFDFAB0D701941DA54832FE8253BC0CF61924BCA2CA231A196C7C32A350AC9A5FA2884D8571FEEEDB7D29632E71898BB62B5E4E0104F73AA6A9C6B8CDA816872805D75ECA64F961641077B259C9D39E2F3CCD9FCFB1E6B6E2692EA34336A967E587F32E49B961B91311198A204D11874B4BEBC6C04DDB5B82D5B741D3CEDC03A56A2017B3D2C4FBBD4", "CFDD6B78AEB21CDCD6AF8C349F6DF8FF8B96BC8246A672A16E45B5D0AB7D992570EC45A534B77F204039FE200D4C5E7C78FE24941F578097B216177D8AD4E1844B2E52D843256D0BE8504CF2D5B639E2CD501A6FE39B8AA7DB7DEA924B38692E43195DB7E5F25E25152DF0FB7E0D4EF63F99CD95F699E16576702B651C29583645070011B2A1F88C947BAE7C94D48EB07A132DB38D4FE2B77EEAFB31AFB442710BD0AE4E6102DA69A454517B6F148D97DBFBAC7305979B5D74D7D7568A0CA56CA89F23D8330261025CC741F9D7A4BDB356B544C68C89CCC2C125F5C71E18C4EA102343AE4A44F6FC695810E6F28C86BF53F4C8B8AAE46DF6006B1679EBEA790266D4D02A2095074ADA634EE60C7070285C316E1F191BC5A88B80D673F144D65B870A65FC93D8B4BB29B80FD58F9FE95F5994878308CAC5394781E4D5A3F5EA2A8ED834EE5BD31D2058C843F22EB778C4C25144193DAA65F9B57AEC4A344713E9EDF913F3CD29196B42E71BB182AC3B1A60AFDBF1112A86A20BFC1D28D3E0DBBABF38E8F12651C207C951654FE8C4CECB6C6F93EC46456DAFFD7320DEC8D08F2F712CEB4D82407D61CC47B333F69310C06EE1FB5ED84F83945F05D4A87CF5A68D78B5536880DE3443E804040E599BC5837E22150C93CC1E5E711F9B889C78C6FF882D80857EF41ABC5F12E99105E6C894EC0B796E0A645780341CBD039E8C6EE", "ABA759AE16B9D8778FAC203FADF48015331D6499B8CD74BD71ABEBD3E53ED90625E3057EA47BE587600F308D38743A686EF6FA189A4D86E4A35EB798FD2307345FBD10FA701265F6417603365FCC4CE7635924428167115BA372294C27A23CE6C27C506603C5A6618A2B3344BAC50AB7FDC29D36BCBDFCE0D48D088EFD8EA1DE492C543093C30AB7694627C01B334CE3368AEB4BB3267EBB1096450BDFC2571977D7EF78D6E288FCE0388A041838EC2031248F5FD659C70180634A1DC7196C8D9111C75B51C50F854CEC63DEBF9FFE1AB9406735EC3187276DE7CA2FAD4287027956C93B8E84B7C0C3A9C3F7E82B3DB35EB6D2CEBDFE0708FEDD764C839954F2CC9044B652D0A01D28BD6B9D3DD9740CAE39AA52597FFC1227FAD8B78EAFFC31BE94A632A1AA7A60AA5A9E090DA2B62F6DBDFDC50DF6EBE1D9949619FE9B2302248D6C801DD2D6C01FF8206A93C0AD22C6990C4EECA7D4BDF36C3246A5D2D2B3982C608E6AD6BDD85C92682EBDC9E4117F8B7F841239C2A5AD7977E11E4E9CA73A55859EADF7C9C2F1B28A6B4AC7202019230063331FC5586756CEA1F8478173A0A4964D00C1AC099590152125A4D01592C54DC2555E1BA34C7AC039394D1979AEA2BF7B2B2A8CB9D62E89132CE9E3B325F023AC6E8117CE57AD4B271EFB0C172FBFF8FA6A17A490B67CA7B15F865A8AEEF37651A622390E82AFD418C7AFD48", "CEA29601B96AD3A831646922000BBFF02C014A9136D9A151A0E61A51F9FC2EC0C3A8F4C83E64BDE569A33B4CD653C1345B7CBEA3B3AC0411B6145727B1DBF6066ABCE9DAA8B0DE58ADC2510C02C2619A542A139FA3EF7A03AD3467345D9573C107A13E7FCD43C0D51DB5EC1A09D409DA75462F9C71F0C9E36C2742C279C910F07CFC5CF7F98AD48D67232A2DF29A66B78209557357A4BC91922D4195DA9533CD3501F388AF6EE2BB3AD08BC7D53015059988F5B9BF7824D066DCBDC61CA588DCCF0EBDE4A96632DBA22CA0D770C61A1DD66EDA882D02C5FA284798E12296E89C45906D315EFDBA816FD869DF869A65DD8BA4E0B13C441EEB052EF3D0FD436E4AC68EFC749E0CF4C7E15599D5514E136ABD134BA638A02E9EC1FE66CC9ACBCE5082C8734196BADC21F4DA7621D9FA725362C411127836A26CB44CB3851D53C599B94A5E67862665D7092C43D9B4AD3FE20B8AFACCEDE920F440F3BF5552CFAFAD04A7D7E0A9CEA18D497282D44778FB7D5072832C0B77C4C51F4DCFD7AC07DC7A9863DB8A38F1C003CB852F6119BE801AD12B8BC7393B00640F125C734447DB2FD8B02F7F7FC7A23B84FB80F9CC08E3EF888634FFB6F51ECEE9B20A89941FBF2B49314DBDD67CB7A1B5BD8D629FA327AF2CBB47B5419A0A8CB807D30152FA560690DBAC49D6B043D5BC9D51E82C3B1CF4ED69E997050C65197F3D93E21CBE91E", "D358BFC8C6AD1DC94E71D1F5D05589424275875AF8CDA2ABCC6404D6FCB7A2E0A74C68024827E02621C10CD5FB149FBA373AE32DFFF275CF386C3D7A04E3FE10B6F1A6F4782B4823242F29672E847CCE760BA005D6852A3459E7576A254B10A9A78A9F8112BEA39BA65898CFED1179D68211D98E6950ED06399E39433ACD898E2F6C87F5FB9D99518EF36429D447B0EF0C5B7D834ACFA388578BDF60D4B1FB5A0CEE7D1D613BB9B99E36DC9636E70A543BA6BF0B3A448DBDF80469494239D4B7C4979D82E80C08EF36EA67560C86665D458040CE31BA009BCDC30CCBAC50259E4485E570F190613CB010563F6BD24C2F1CF73F6A6844AB8350D23BBC3D1361E73DCE94AF83697BB817BA366C9855A754EFC2F007D99A964125682E6F5CF7FBBF687D221B5A0FD844477A2F87D5370F4469F76073A93AEF7812275FD4F70B2040C12A83ADE5E5D862684D119DCA0F75AE2B56C794968A68566291B731579A1055A84F083B3072B7BD5AC9D520F64F0829B592875613BDD81C11622B331289C98501B01EE1D813C0E97CF36878260F80BF88071D258B9DE02F3F90B4C12BB56CBC731550B5EFDE6D97A1283EEFE61CD6E5DF312D0F0153A32DD65B143EC6A3F2B64E2B8FFB47EAE46BD92A6EB9ACBDD11A2D730D027A3EDEADBA5965198FD59BBC8574B680B96AD48586E5B17625251BF4374E28C6AB956C6818183FDC119499E", "FE69433233B6067B0EACF1F47BD3AAD9783FA30F684110D1152459233896479D08A976B853E4B7B52A34511239961048B7C1B9009095327C86F2EA291FAC1734ED2596EF19D04528F3D8F2A3430A0C19DA6A70A37DB6DC034BA0053B57ACB9E7C00ED9BD6AC11339EA169D9D54E6739B051AF40EE79A1034D6294261E1AFFCD61B9CA5016C56B2D1172D9B2A7283E4EE0A06C8149E5A2DAA263A5D2429C2B1FCE75C41887DD02E056EF8724645FEC6FE7FC1EF180529B1E894773CF3E2E1D938EFE9CD824D91454116797F5A84746537FED5F0EBF0583C8508EA0745B4989954EBC4F215BE3D515687BCDD5DFDAB9814358B07038E0CB869A8C34F916FC67773191679C60A15A0A399E224D0B0168439386C0AEE8F5EF77185AC847A66D934CB0ED6A3467C3B386BA7F115877F36B49E111DE49E409468F343A98974F4EF1EEEDD282F73013EC2727518DB46C6751A58AE3E0D5F9D2B966D4465BC5595BC31B2712AE1E1BF9915CC0E02CA7240EBB9A045F959E77DFCDADAB6248D58B47BBEF3C775DEFD629A2EED15201A21ADCA470B1AD3084924FABCDAB6B12FA6201E2A239AE8F1BCD7CC39FEC62587E58C84AAC15935D45261E3AFEB60016AFA0902DB98DCFE586513FF70EF4E3F47773635D475754A158FACC9C470921FB0186BD6EEDEFCBEE9C803118851F82CACBF8C0A544B0562E2E27286CEA5FBAF83AA5C1F97A", "C7386F9FF39FDDBFEB223AD8B856EA2E7F3AFEDE197A61F183FF7DF2FD6DE208E71E6E1063FB3774B696913524F7488EFC2CA54E8B653EF5BCB7A8F4994E312DCEE99A316C2ABF3FDF85B8FA9BBD4366ABBD7B3D3D433C14710A95EBB3D0FCDA2D37A443D62A8361DA78ACA781CEC04542D01DE7B6C6D14CDD4EA709264251D46C42AAF404094286DA5BFF8E81FA2F8C54B172821054F4CED82287F29EA3D3AA798C9CF5C5A909B9FBA641A8D9E310248B0F9A1375CE4DAA98EB62286B4EF4DFC58B877A73D017B17AFD7F1F58D3D2CAD3B7AF2F06699B08B88FB4EB70D2511190158BB4928ED1735C94400980144EF9ED06E06074E2F29325C1AA316A46E8E617B3CE916CFCF05A389052DE120498341EE26A27A3D757AAE763046B8CBC841350292F06AFF97C9707CE5561F5C119E2FF6C137094F62573EB80DC13862797C3319158DDD465FBC033CAD81BFBBBB54D9467599D751B9980A9AE8BFC6715C5EA74859E6A10DB369D5DF83A92655A9A5908228B33B36F55DE563005B886EB324CEC4160F0D18938E9FE41D39234C29E13B814DDCD13CA6450774800924B0848735C5DE076F66EDC973FC83B13938811CD9887371470AC5DD985481185F1191EA8C1D3A7DC65E1E82E2318D0FF0C9AF65EA1515DDC536C5A8BD0AF481789838DA54A39BA56D014E12242600AC78D28ADAC3FFD3600E896445868064D1D2ACF22E", "BF5202D3599D2DDAAE5F526B6B6AC469D4BA0D0BA5D79B1DB89173320F0EB68F5D9DA495AA0981F8022426F68519B548B19B5F8CF068A6CA1442AF77C83B7D8649DC281BF438F9576F7A719A902A860B9ECE9AE9C14B98859B282010A5DC90DCE612AFEFD44E0E9E7666A461AE50C2656BC036648B826CA9C3C7C53B30976335B097C19390716A41FD437A2098BCFA2B2975F1EAE5BDBB8192024C20136D2542FD89FB8F2F94C08F765109279BC4E511787496233F15F52D7C3BC3E98A6DC39AFA1818B9533EDE72FDAF021E2C9B7D6C74E49B849F372B1A131F4C532DBE3B63635E0E1334C87DDB6F3D73883D2B43E87CF19E40D6B404E581E807E6EC1A94F5261C7F7EFD4CF043C90A1A7E97465022ABAA1DC21588FD285E7158FD9B67EC5FE7C9E84029E961E045EB5227E4726154F4F057FA337BB20DDA25D11632A7995B810764084EBDE01AF07372EA82FBAFE0434401FCFE05CE8FE3C20C01ACF4E9B8EAF4D50C73D5C42A95526CDC8313DBCA6ECEACB457D9673565A1CC0AAE23FD6261A8943E8FB84CCEC676601A4B302A9CACDEC8998EDC847A53B3CB0E12C8B4A7897D5680CB14A3D11BDBF4826C3938EBEEFA0075B6494CC714D3C0DDA2F5F783CF23AD2D2545C899867C1115BF4A4F559F63E68098955550BFA1EF7771598EF86A08C0C634B291674BB77615121BF0838DA96D6E7C53BFE6A58A382FD9721CC", "BF8903A3918B3FDC06CAB4EF675F7BE3962CD7E3C6ED643386EE533C3B24A3D94D2EA2CFB83F0A346FF2875DB07BA647492D47A807E7FD9717CF12BC97B3C1BE1361E598850B39D50CF7BE700507863BC4BBF26620FAC11D97128049BD96C5E09DC8FF3F62655D660FE66D31AB0B0F6D4F8420E3D2E633C571D7FE2AF1CB4E3BEE95E092B00EFD2796A3DEF376F75B7EFCBB141337D81AE52939D87956C41B1E42C1CCA4317D31AB4F53DC9502A3DC774E05E1ED5008CD931DDDB98DFA69960A6ACD45B60895C4FBA2BDAE8BC7DB8C821697558B1E0A3111F156738409FD180C5A4A33B24C5EE4991B84133CE9AC089724D62DA9D9827A2A04FC103652F216A0895E78A96086270814C2699F475CEFD6359428D8C505BBE8C1A96D2793802219144CA6B3EDB455929B39A3E9F3AB74D685608CE3F301FE38202ADFEF529CCFF46AF36DC24956A7CD07CEBA55AA4C89F7913A8A4B844FD8F152C8A823CB9888E3BFEA97D7E4AAFA07125DA4F51D974A5DAFF0045BCE5B868177A91BD932963451EE2673A85AA8B7D493BDF25BCC2F64AEC3150D8C40C835AB4F5D0B7F259DF099BD6FA9F5CB198B61018B1448035CCD34E7E7A2138F437490026050BBE3CE2D4CF4F4F095CB97548E5731A338CB3903519D6B13A029727F047A7D00904A556C883745410360FC878F77707A716D549ACD6A70A18F9EE0AA8A6EE2080608E10AC", "F58CDE0EFE2356F429B0F2F9A7869A4142A6173188DD75B570F1D1ECD282E4AFBAD11370C5B4CCF3C98535D27D73C0111F11A84711F732441EAECAB684F2F0D7FD4FC4070749574922A906E84B3350CDE5957DC388FDA23BF45F05951A393DA253EAF691940897B57ACE655E9630F09856E76958D6BF7B830E0CB8182AE226F39D48036C867BEFA7E7ADBAD17C1AB45297C757DA4AFFBAE677B05677D60DE1D975A4F3D7EB3461B424B67B61025AAC257A69FF720CB9DAC007C50C69A7ACDBBCE210BAD4DC2E629A039D98E7EA037A5C344B5CAEDCDA035F28677A41D55A0E3E6E480CCB12B8F17062A983F4E651B4F7CB217FD06BE46747CD5418C0C81916465A4F5660152B3E4781DA8040D4246F9BC47366BF663CF9DA3BB247D9238873CCDC6FC62D1D8F669EFBA42527112FF4072262F7E65AEAC328871DDF47588A0A0DD13A4139F4145822A5917F624B881BFC354F37B6D59C566823F629A21C973324F7167BC39FBD2C121D2A849308D13DA1A28948EB59F7DE97E364223E17A30119BBC7F43E21E7DC3093F7505055ADAB4654194A77C1CCB61898840125455A275A8F071273D8C13934915D379CC603657D99CE4075C1F1DCAB60B6BD62ABA1A10B5402A59706798002EF30ADED2F354E38CE0B57900FDAD31E7F684E53D097B4313DB552EA66F6D337F29594470D3DC0BC6CD361831251004DD3C5357BC0BECFE", "D9086F7C272AA317C64C00AF43C924DB5DAC97F8EE3ED2296252FC4756FCE6928BB009D4488B9BAB757411BBA52BA6F61AF1181CC7BBA94257593FA1BD26D52AD5014C3F1A1832FC4F7445C8BBB77C8FD31C88F0C5D4736D49DCDFBEEF2B8301E31185793BFF87CFD9E6F7E084D343AB98BA3518A87A5F915BC0D76B01AF7DC1CE45F1C5280BD39D3E3D94D0A0286F8BD9FA942849664E08F2BE0B93C6E3B89061193FADA0FA9485F62CA87F3E68E204186EF1187642D651162E4D8E7DA049F462362D8C94539CAAD09AE4768C96ED6C2CAB8025EBB6901CBB26865E1F19FA1B193D47ECE390B881233578950175C85B928582D5B439EEF2F56A8C7EA09278E47741051223AC182456C4FA04D025BDB33FA10C48C70EC91BC709E3CB0FA3E01DCE5FE5ECB9018130A8DE5D0583EDD68EA2EF227A612748B2F785A30A01014BD479DEC6256C8AD88470F79DE0E1432CAE448DD7049E5B7D4DF3C978F65E708CA3759AAB9D329C11FAD71204E1E92322E3EA1BBDD9D034E2A23ACAFA21CF490AA5E2E419197DBE990667BCF277ED61B264632F694392EF52F0A27C38E478257AEC8D2542938BF0713EBE60779C95A0EEC8F32A5202A849CEE8CE0F99702F595AEA839531D4CFB5F5A6166B06EB64387552A1F9BC6BB97B9B99D19C3D2E1E8E9B305D525E7413496E40FF50CF77D4D4E2D41B1D5929848FB2F1FDDA5A39DEA0546", "AE4E3B30560A50DA55AB3E59FFF512844A2700D2D763D85D5C3FD8CFEFACD4D023BD926D3EF2E55EB1B3831F2276EB07E5C07B44FD7D79333699BED0804B678915FE0F092DA9A62F69CB020DA21932F9FDF9AF332E1B400C6B7E7880508E840D62FBA07E827A23A2575AE68E15AC444A1CE35DF3C3F7CA49DEF2966DF3BA89C8E90ED5E2421A6407F2EC51A3E92A3608FCBD6AD9FF9E5C7817E79A0C09FE9014F7AC291448263E4346CBC4BAA6EABFB59B4526B654070084F52B864F9769181DC6EA91B576956397CE55CCDDBE41F94E5DC366E775C86ADB1C807B66D08696A2BEE45B90E8736469A371F05929D9D9FD34980DE08E00BDE2CD0EAB6AF2165D76519F8F2D894AC70740D2372B37407BDA4D943EDF1CBD35CCE4D81340CC97751C568731C009DF65571F28B7F58106AE67279E83C3A0C130DE0C5B6C99117099548661D290C4CAF3BC60EF719E2F7B210FCD4381C33904AFDF96DC3A6557B42B6EE895B4D604F5F8985F454C51E32B2C874E90926CBC58D044D483D6D2A7C26C7AC4D190531F79993D07B2E830FEB99BFDB00AE8C008DB1B762F3F4A81D41295FDDA37F3056B1110D4F0CF385F9FCC7E14C34F6752A2FB17F5CD3FC4AF0D51E4A0AF7D28DB0D4D651156189209480054F8287266B1CB26C9E8CACAA0BE5A69C696300025D160F9DA29F9EC79838941459B7B8164AAD95577A0C532EC2EDB35250", "9CF0CC00B5788DD743A5F33D87E8FA5733B72EDBCD61AA4B8D0B81213DB52E7EF17AE90934F5EC0711ADD19E881CC330F696179C1BA464FFE6D7B04EEC383A4106BE5892C5DD1BD719AB3739A909A384FACA455E6AF96600AC6FF809788700DD2AB93DD228483759BD903EC002D4C1278808B764F018E3B740EFD821A61F5BEA2948A653041FB31F6D5D0DE0A045DA366E44112C820FD7FA966B2CCFD5A6816AF84DC0A3EEB8F9D2F0A912586F91D50B1AE3D930A680A8FB7435B6875ED2E599B87598A7C20245296C4965E2E0CF372B6ED1219BA68CB646D3E73D52665AAF2E3D1C4DE8D264578299B166FA0E148281C877FA9B14818759CBF7FF575307E80B73933599D94EAD2FB1C08A30006330BF0AC1F1C0A4EE6B07F9F3381AD7E2E469E8DA9C2D22CFC0A208B58924D2F994AFC0268EFE206E0A9EB79BB51CA26FB49013B9A17017E0C08F9FFC6C319BB1B5AE41771443BC670EEB91D7769F9890A9B80F52CB0167EAAF850FAF2A52B74ABB1792E7CEFF68C0D38B01F244AC0CC0EF0731E3BDDCDAB89DF376973A7ED5D4264EE82C334671FCD39ECD6E2CF869493914F332767BBE461707166A9164776D29F5EC9291F505AF291254D7319AA594B5F397D5BDF00BB840C4DDCB425F4325ED8AB77E57BECA3441B89414616671692EA88A89D2690A4B5FE958F990BD84A3884A60FADD5DA57EDF01865F85829195460", "B85B6E754CC8F6805A8A19DA104418D9C134C8B0DBCFD5DAAF5A71BC047A73BEDBC192A453674BC624959BB76E44C5B34244D4736ED3F0F3C9658FEC0DA5437E01E128795EDD7593D636CD73FC1780B37A381502633CCF2EFDA0BBB494C1D0FC7F602DF8C282F55E3828E81A92458EB16B74835040D8A9C8F2DDF180A617B0592344B4373E1B526C9706B843B0CED4D25D7324C6FDD0F33133C00443638E6249061C56A116CEC7822F4512AFAEE52CE8F94D8547F72612EA8C7D160C65FA3BCC92BE01493706EC4E5F203F0BF85C52F417BAF8AF490E50133505685CE63AC5B173E07D8DABB2D439C6DC18B41B9CF37D02C92AB5C2F27EC83AB6B2DDCB7ABCEA30A95BBC39E9FD0CBB28118823F7D0342F1EB7B45FA6BB3A50223D0D7B14E975E7658352BC9288B48AF1346955F4551F2ECA47D423EFC63D20681057E5EF234D061A5E6E234ED01F3DF223A0E8B4DEDDC552C7DC3ECF663D5011FC907EB4A7CF746AB9E07C2929B7427DFE9E00B0A1308881912635A72EA99927F343EBAD32436A9B8EB1934AC29E79BB80AB3ED9F5CE39D1E43C251564654365DA43FB8A0FBA27F2328D82445A1EAAED67B92716147E859064AC326A42DC7880DE82FA782AFFF9C59FBDCE088746F8CEDBA288BC8C2C4B458782CC9BE63A86168B671BE99A09F2217B7BB2A7BC88651C1BCE8A0B89316ABFE72B22722273AF570974D8EDEE4", "DD40DD438251E401FC926CC6968393415D52D521A5BB34D4272D6BC7B5431062B35112CA709C0680CBB18EEE053AAD62B2391C9E9D580562541A453ED936CE8E88DFA61A88CA3BEE66CFFF801785CCE863ED9C36A04D2DC8742A81CA55127B44314AB4E687ED921B4881CB363AFB3CCE7EB774E3205D4591939ED7D3C0C508A31786421F49669E120F01D35D467B40F85F2454F13F591F3B830937421B5C8A6C20EA878971AEC941FD99CEA92FEE00E5DC2264987DBC549EFF3E4A26AF0CAD7421C4256D107A3E8908F67450960E4E41FD7E2E84F754BAC81C8F5F1D6F650DEB3E6EFF6059836643209E3880D7BDA701869208D8E4BC8D0614066414DB3F93D6EA187950285F55BB7A1B026EA4BFCAB4671B07704828D5CBF9730EFC99E68E91F1FE9664DFA73297F2D6BD9497DE04982C9FF3730BB6FC3EA2053B3F45DC7FB587BA19B3C6B7E780EA5F25B45BB727174D4CD3B401FE1906360BF0B15DB13B62752F82EC62226AABC83C1C26376F8366BB849DDB65958AD969B25654DEF1841518993033AF47EABEE3CAAA936F19E28A205F3CDDB5CAC649DB6A90483ACB63A24EA46D397508EEB5DA94E9C883EB0451D036E28CC303D52B1BB31FFF582605F340D449508959ED1FE2FF0BD22FDF77F9680D6B5647D59E7E6A003AF0C6A95092F0DE43D1252EA6DE00F288BCCE3ED9CE273DCB4F3BA7E8D17353B8ECA24F03A", "FE38B1ACA366B4C15F3FDD4DF0E0274FBEFDA0042BB203A4F6627ED9E29F405379B2F2DDC0F3B02A0CA70A9499F3CE82B87603FAA347B7052CB5D13D9DE84C114EF3B8F62418FB1F3E374B997127667FD6BCA2E2F9DBC04ECA9D908CD37C62F08EEA6F44B3FDC149465AA8037D65A6C8B9B8B3D5E9A40578E5EA3AE1209BA49E5E2AC615C59A2D71AC1605B98E39A5E66A890754C7D1C07E06DE78632587BADAF7FAAB0A529AB791095DB0A708B691E9D81F2CEA8F07B05495528B9FD56F77A4C8209DB972FAADD9791BA59F47C06F241F50C0619FC04F8456339E0AF331310FA4DCCBEA0E5DC2795CA6B3ADD0174AE4B30AC0428320ACEAFF68F73ED11DC1BC9F0237BDC75F7F48BE518EB3305CF2BB898B329716FC9ECF7E99B510B3309808735FD0A77B15731C233998F9ECEF46E2CAA6E6EDC8D05B943ABD17027A80D636E535038FAE44D60AAEC5406A372D62479192FA84D844520C6774CC589FEE16A3A5549495D968AABAABFE4DB94F5AE0C54E603D6DA5C3056769A064890533EA8EA1E5D1CD410CC8DD4B1D7E0F5F787232439AA4B3911C5DC792ECB873E8105A1AA61C627BE57E809C6863073E1E19AD8B987DE97D88A817FB43ADBB7751E36D1F0E7B70B3759D6EA8F2350D10AF38C331E22703B2B5103C908E1D35A8E814E45BAE81DCA0530FC3525CD640548245C259738E749E195B006081A18C45475F906", "961408BD52EA1C6A9F340D9109B2388CC358BBA2D35BB6AB672A9C16F3AF968BE4613BA6B13D115B896BE71CFEC4A4AFC0BF5D2BB1B5DC19405F40E60FDF361E6CC362CDC28B75B8C30B468D3BBB77F3FC62869FBB635A3F7AEA63420CF1B80A4B3813B2240B83ECE999808E1394DA2881DE2DE62C870EC163AD8D81495DBE2C7383B78E19AC506AED9F3BD1280A77F2D9C55600BFA258E76761391145D45F74253C6E14BAE16179884F0F0EEF8150A445BE1B5AA4FEDC2198CC39763A3DB473C1CC4263CE2DD587447DDA6BD0A496E8DF60859CFCDAFED2EEC5B1E77E68F449ECF129AA17395BA39392EB610DF45134571BBCBB26162C83FFE77D188160EBCF598EF6F092881612A04BA9F4215D429BB521E737F6C3048B5D95B20AC37F79AA99A12CD0469268228463C317A1F31E63E4754890F20B4516D179342A76201402BC0DB2AD091A70B4232473343FE9E0002E59044C5F3B6E3D7368DB7E7F9F42E7A4A1942B1161552C5C84390197A54079F570B57E8EA8A30659FF5A61048142E4368D5542B968966E54DBF91D3970B9A3A278B951D6F914246FA5CCCC20DE53713D4830AA86D758ADA7A8747FCD455B2C320FF9E5E7FE1CCCFD6F7928884FC0B35F34118B4E7E6F6A5D6E3FB4E3DF90CEEBCEEF9D7D595A4C456C373C5356EF0DB0E6F8D61E413F80E4C32532BAA39170AAE2FC606B7206C379C4155031AF918", "E03A069F63220109A77232F2BAF29D345737AAFED2E5E8D5C846B937277DC88392DB2D55073CE063F5FFC5717BB89B481B8C86EC01808A85ADD78517CE12DF776CD3F02D948BA795215599CFCCD9B4FE56DD681A59C71D24946225171DC18E47BFA9068302BA428929790EE62306C5FC8C10E71F6F372105C9421A563A4DA704E01FFD71E46B28C6EE1B7CDF95BCA6A794E8CFCB6BCA6AFBB67DED5C1267A12A4752176C3C1E6C2F665194C7F11C1CE6CC8481A5A966719B57124CA33D8EC9862AE5485788106562A0BEBD3980AFC4469BB1FD1653678192B3022E26CE8788C68F202D506DF098D49EBAFF7741CA96A02BD68BFC4FDBE24D34770FBBF8EAD9647C911B2E6AA705F0236301162CD2B41B88BDCFC2A79EC54698276126D6EC0213931609985224BF515AD3221FB5E8A1C4CECD51DB4AFF612157ABA6640866DC6D3602C446B8C6EAEF359BC8703D5EF9FE8EC7F5F2685C53924C6F1F71519E0AB589EEFB393A12C06B906402FE0A2FBD793272BC101D3B57F10A52C172E505B74F2A00BD5D2F7C7EA2883908434C125969A62F1B09F42E578BE22C08E88B11767D97C4C0CBD2BBD98508AFD591EB0B0C846A95FB72159E561F9D87DB446E9A19AF378B6DB4DCCB49FF8DB547B3040FFD0171B87245CF73A0747287B6FA1F1E4AE99518E8C53DBEEA942AFEF75B69E4790D75CC8A5181C609BEFAB641E28C07082", "D8D7DD9242E54C6DCDB2A717A6F33226A94D5794FA0BDC401F4ED842A5CFA4AAB462F703239F684DB9B95E5101A5DC6067C7062AED9259CDB2067BC815C157A7E150F8557C3A54DDDAE94E5C569A1E09C383A062B601F920EF4D957F4BCA8E329123BD6FDC3B731361864CC139EBE3C68FED0F40FB127D9D1DC071DFA1552ABC6703494A632AA1314984A2D4B7A8BB32C555B79DEE013A66745AE15E8E5E4E129E44A119203425F2ABF1F03CE9CB33C0BDC3285ADFAAF4D7B51EC31F02D1E654BB10F0CD97EC3E389CAA34398166B4D5C9FCBC6E957FFEC9CEE4071F90EE2926FACC8FDE884CC6FF1F6EF1D3CC681FB44E45C5CF681AAD13226DFE19E22CE81265F3088D193EDB098988B2640EBD8D9D66708E1E9880DC41A72FD3D64792B14AA18C13E371CA17FB46B21DA9C59FFA2FD075852D42E2A578744792EC02F9A35F869912BBB44DCC648CE6075DBDF457A9AA891488A5450FC719778739AF323E87F9633E621B404F70614F77C65697E71F281675C843C523740AB66756E4DA784F555B5B4D797A06A0AFD35A69DEEA6E948B9B3C2A62D7B1D56832D9CCF56F2680A5A0A3037F4E0252413FB86520F2815C8824975634C0889A486963A2C874638559E14F780A7F3E2318B88B2C2010174150AFD4BECE2C5FF2D37BC2FF791F4A3136E19C373FCF03E471DFCCED19471182A93E91ED3EA68C402234AB2B00ECF62", "87F0D84B811E4635AE8023B74306DE789ADDF1CABAF5F47885CF7F9A33F2C533093A339EB0D5E05C0763A215459CFF0D31CA92573EF2074CE2B6A11FDD6BAA3C6FA100D23A9AA413BAAFDA22F746CF74562F9DB0EF2F7CDF266142F177681CF2EF388E2E9AA012459ECCA332B779E48CA44E536082D59C3951ECA42F66B600D2621BF5F3584B59DC0DB76EC66ED7D00E943BFDE703E7D5050A8F263366948253B3576311CE88B463791DFA6F401ABDCFD7FA44B158AA97EF1CFD7A8802662A633EED958052DEDB12A6FB353BF2224ECC2322937DE3D39DCF82650B18FC0BC2BCB8CC456141C9F3FB09A0906AC1EB77E50E8D260041E4B3FF4BF3A53F7EB62E0FC503E8E38F185AF795F67FCE17665AEE29BD0D5521024A70B61446CA4CD2B3DC274FBE72A9AE29EF67A2217D6CC81BD8831B5160E4E81238B379B657FFB49023B040B6D504B287F684A0A0C07304E6BFA21E8D0A7629BA32F3F2BC9A33DEE2EAC1A2C22462EA0D24162543945B78FB6E26B86E12621588735B32A4F9A50157F20BDB7A4B6D151B3F28B40A03CFEB3CCA635261ADA2295B74947F1B1D676F6C014AB362C1F5AEBB439DB137D034D00591235B6F8D11C735A0C1964B29D3002D5243374628FB488A04EF245E64F598EB6ACBDE8B87F2FC5D1ACD105460C26BC6E1C7DCEC2E92E33F722E0A613A86356343EB111D0B166AFEC5C7A44B81A607A24", "DDEC47E0FE3E2F4205206CD673EC66D7435E8BD4A523A8681ED77F51453B904E4468C70C2224C5F1D01A1C5ACA89BCD72673F82955FACFDDC4DA499EFD8D18A2BCC5035B0C69D095AE0EF1AFDC389B6253BD6FC83D3C37E809EE732A87D065207684332CBB9BB0519CFF51B553B3689246EC1EA42E236773A5AC4A7BCD37381615F78A41E5B181AF5C502E22FE79436D6EEC07F7FFAA739356CD9544C7DDBC42C56BB1C965441903962703986C93C6F8135A8EC42A89DCB46E754EF5B5250E1171398FD31793594831B0775F2A39E63FAD99929A0F257ADF332C078B0B7E209229ADA46D69512FF2DE930F962B8F81EEFCFDD358FEF8E4DA0D49F39C43AE9D99D8052FCD60305FF4D9FD4CAAA3FA6BF258B867E3F266F1BCC77390D02132E370AC79B34FB37F12D102985950FA5FD53D3D4783DA5B284494EBFAB51DE6CE259E27712A0EB4D78EFD6573A03D629F29166B902795FC8DF59050C9FA48584F0EB69293C7FACEA8972098E1367D183C0B91C3550852AEE6721A84341612E820CA4F53C71A51774134923FA00FAFD84811C07620917C1966F6A26A032B125D76BFA149FD66EBD18F7536285CF94A8A750680D6BE0F4A4E7F2433018796A358CE465E7507F186752EA2FFB01941902129936F7B18321902780E2C6A5EA7D3607227D6315C570815BD0E808EAE242B554824ABAF30614CC72B74E647D5B5A6306632E", "DB29CD5101A3FB7A651BAB94E0CEF2BF737BBEBF0F755AA42F1C0B2E6A2E00422458CD8E2244576F139E811B2469E1B8F10FD95A988FCF872607A9B5CF81EB5875C427515D8D6D4FC58F3C69A92AB4932ED3D1CE6191E648276AD746F12A0D7B1ACE96B80CD2C3B99BD1094ED29F7020121076A6E6D5D750C39633B00F3DCB4793A27B4838C492EFCFDF94D955ED33814C954FFE8B8D29A81C3C62BB2E95ECB393F06EBAB479494628027CD02E59F1AA32F78C53142137965E662DF4B3EEB0B92A6FEBDC91F8B31D41E2EF69ACDE1CFF2AB49E2A4B12C275A20439E30C690D14D4F661C81308F11EFA3D014009D80D794D9F2C8B51E2E6C83686DBB07D1790F56D7C8EE495657BDC081A63B1353F4C4CA74CC0D02CFD7BE60E063A33D1A4D9050A9100F0E181704799357532DE152CA54FFC089E8DF80F29DFA14C19C9D6B7855482622504F95A8948A5DD640EE88B87CA98F8248DF148AE4F992BC7D1FEB3BE07E70F22CC052D92FB263337528C41ABA642C6B1C6F8883B21ACDC69196733FFB684451D188107C1DD219AB8B0AE5F49628A1CE32FDBA4B8CF02F38513E37542D020F4BAFE03EAFD7DCCAAEE9E28258322E43DD47DA3AD625DC2795ADBBBB9FE061917573936E31DE6355023F8D74500D2D032B7A53630F37FFA80567BA36F771C4ACD71D76DE528FF47E8281ABCD325E4C4620D0B73B2BE2787A7F6F485492", "E8F24D8DFB54C5BF909CA2CC5496AEA76E583D2D865259C356E64E76793290BB00E7029A146E1E90DC0C45356E13EF59D60F20F080A0FEA743FC1C222AAEFA3E55876F2C9E6F7BD29C09AE32E80B15DBA0E6B594E951EAA3BFD166DFCC17AFD2621EAE6539C74FD776BB998C24C30EDB3A8B6814DE088E7E6B7CE9A64EEE9ED8C9D987A21A3BF35A9D59171DD456D8D0D7D1BEB3F37D4A31812BE00077F0F0064DA56EF9C4D36D1D3CAB4D1D4C024665BBE1DC227DD29E1CF814EA65B64DE60ECA4AB9B19F937DF15914F3CA577EB3A6A0A2C8ADDA53DE536721FFFD519FC5E7CD9A3BF4F030B1EB638D6A0F8C4E24085012D758414211585EF6E0DB8C670064885B67256BB6AD7E12E380C5E25BF58EB1731E935899C1FD2B20008CF87529AA3E714BFFA86D8B66AA94811A43ABD868A7711C4FFB339C01D72D4974ED53E7DDACCD36B5F459DDC05E9D475D3E2AE383F6FFC9C2A0D1791B4675DA843303C96A98ECA88B54735293C4E1906AF30221EE71AB58F3E38271608DA6AC0A488C0850DD86F8B6588C91589632EB781637C14D9D24B57ABFC301790B3C11C1B2938845F08F7280388E0B9D5A9682A6FD40374542634590F336E42D8FDD92F3F6C82BE4D3B953CCDAC984F6C94D8F2FF70BDFBA63C922060C322FE34188FF70A37648C362BB68B06D74A2012050FC007F276A54882A8A04DCE014655AE43E448639F56", "FE35174BF6B56B67D39271D92AE0DC2B64FE31AAE8D1135BD8FD308D7E281F3ECE84784423A48C1362B5852719023F8861E861AD8B22219259E357EB9CD8505A66EF7CCEB53636B47D38A2AF5506E1FD72D3E30A29EF897C5C44A271EE562D67B279806E8A5DCD78DE538D8121CAF4C217F8A969AEA50D6FAC68066277242B1979F1A6B3051CE5B9949A11719F556EBEF844C808E5C1AFCE5E312C53AA9DDBFAF7280A7FB8502D2C7D1B91614157AE0C6C962F868D05D0463131DC841169946B732F8000E686467BD5D8086CC249693FF9794374266BD6A5C8AFEC65C66A834012365D60179450C58FAFE724B8B9E99C33900A86649B04CD54351D6C4CC7068B28F070417CC9C4430390493BEA50799FCBCD7A13BF75947C597B3D7AD486E3AF99CDD743B6230BC473DA35E6D05FDD17F7CB8D04A2B00EFBAA30946EDA96BED467A45EBA54578D9001637702F1DBAFAD16D2608C475B8DC7994DAB93FB34DF2237E4A13D0C04A6CACD42FA9463674AF8ABA97CF511A82E8E61F8330004E165D753323F4AFFE598E4D108DD8EA8EFA45693A2F9EC8335C756393585E052FE5D150A58F058CF8C3C720F37112DCBC6324877E87541F06C968C46FF846CB512EFE65CC401174BBD1C977694ED7BD1702EBD2D1EF23BB56D0D0C1EC2D90A27CC63F0A09D83F8B0A5ECC181D5D4265911BEE77EB1DCB4780B53CE74DC7A42252F3FE", "8FC54C96AC76BECE7284BB32C63FCCABED194E82FBBCFBDFDC6AD09AF95DCE6A5D6E13CC06B247E38253D359A6C0EEE00A660BC3BE6FB217B9B554C90186711B1E85117DF0CA17463E132333B8469ADF72C3BC6F218A96697E172CE2E6D6F4E70EEC2A0CB48F0A2E7991B1B90A85088CD2C59E3C9AE7FD939592C14AFE9A13829DD97E345D1AF92AB46BF196DF906BBCAE16F5A58A4D99C7D586869C81E182352C210E3B1EE822F4A95DD0BB3B285632978B18FC1CC29BD58C2152FD3BE73482DE1A6A79C3929DDA1D20B6E99E25A666AB20CD371A85DD20BF0A76C5A81041EC943A89A94AA64C5207B3166441FFFBDF4AA28A2A88173F280F3A2838A98667775F597D0368DC0BC53C1AB8B7670EE23E0ECA08CB09FCA68FE2153F01FCB7061CA1B6AEDCD815D611FF71868F50855054085AA1B7CA3309581532D658C7D2D6069C3B44E0E3CDE45222DD9EB40C369762CDDAC6D9A6923FE0EA7DFA1DF73BFF8B60EFDDB8863538A38528803F3EC27E09C87A2D0E160C2480F7D2003DA331FD5C7FE05B582DC9AFB114D2AD2F822922067F1FDB3261078F33879C497035003171165FB139F79BC508AB9D3250D1B53508410A01C35B53179076D9F46C5BE1A26DEAA2F9F71F442FD7D19D34979F6ADF96BECF1124551D4806E7136551291352748DD2D58443978C3DEA5ED0544E6596769A760B476B9CE7BB09543991EADFAD8", "BA63AF12FA5F7D03F714CA9AFBF19375D2A7E31EEF4A9E10C7C2F8650552A6CD22FDE0E012D46CEBC773C87729C7E746FA4C0361099D4876701C0B2A16EA2B5A6B750CDCEB573DC711F95CEF06B8DF516CA2F9BE6387550F22502E53A772436F324569B25BBACCC781D30DE25B806D369AD1EB1D1137EFACD0BE765DF4D06E177D3E3F13E9A3165F269244FE8B130E9066B23474418A5191ED481BC8974074336E71BEB02B1BC34CC620BDBC24CDA8BCEBE068416E5F5B5A263A51CB3F6589F77D4E607939F7A0FA637858B96189A014B5688A9DA32FE2ABFC31FB00401DE475BA07265B3FD1890ED0FDA487D7C616E099B4EF4E47C9F9114E6BF8CC757C92C02C46546130ECF7CD44160F55A72831692A5E69146086C43A5F043BD1184965E2A6B154BD7B8BFB3B4B28C081B0F349900492C703913885428A82A8D2EF1240414CC0B6D56D969BA1A121D9D61584C6A880D533AB58B94C85F07732B5EBEE7FC87FF3AA279ED703858957A1C1501D71DC5420C24BB2D570F7589F0AC5B6EAA87AF68442FBB38EF693D2200E73DC73F58CFCBBE43FFCBF76DB4241FC4A7B131F29C8BC0F77C95843D2FD2DE39E3D4D44237DB39994380C5F1A1A3AFD927F6B736D585112920296B90CE31D58BCAAF8CCBCBF15BB36199B48F00F308F7E8264D039D6DAA6E848CECDD1544323C9654232F45689076B7C4B1123AE0FF152124E930", "F2CE3D09E701F60716A413AF06E14E6FB7BBC29DCCD8273A083B00D429B57EBE9FD5270EC0C299D243A9FF0FF73DE19977EC16C2772C6B7FF88F83481924C921F49EEE41121DC79B7C23295EFA50292B11C7D45D66BCFADC3C3A390E03E13CCCD51309BD4061782273CE5D0E1BD3E11271A3C52654D2B846B5600D3E68D2C234807BBC32F1A350839500DEB6D387AECBFF5344606CD04BE3614262F068FBD256B2855EABD5A7C0AB5C28D5719C844F2A6FFC500628CDBCE869D2F090E588B57B796029A84E2319FB6E59960553B62BD30DE99AA7ACF508168EEED8DAB9996041BDD78BAA2A1CAAD2EF366F4A3244DCAA3F06EC9A24572CC80C3CF44B557CDCF6279165414066D6B700DAEA8D361034D9DE455A55E55CBE39898B65651FE709506D1A1FF67585D0D3E1B2C5EB599704B3925CEFDA45C33D92C9ED9F0C45B7A80706E6629594F66A0F74A4A767493B73B23AF323D519B0D05EEC62C6123A0829CF612DEDFB7F275A55F1629DC64D2F77125A1BDFD7B9C213C51DD9FFD83DEF42E87AD4E0F9E5ABBAA6B120E131F9E5A3097F7EC766539C733522FEB0F02604613CA1190024CC1C3297E7CDC3C514F8C3787943EE8CE457B516677437B2212A19629A0A04B0DAB8258A17B28F52BCE915A680152225304301FD2BB1BA2A557B3E3CFE6553CABBF79A47FEC31DA590308D156C3537B97116224F3E21EA3841A505E", "AB2F844287488AB6B0F47218F2A4C54E6BE79A80F1209CD747FD88A575EBB11F2F0756E2C263E753D9388876E159EF3BBF99448D0865173572F4B6A03FB72244334E4E861E0495AAEF15276379F8DD88AF9313096805D5596446B48EF1F1BF2ABEDDABCB1FFC98ED408846D85732F807196C9CC9B283EA4E0D78681C73CB6AF89E5C361476F84E979814F30C0AB03E97156015A493E091EC5D854E8B08328581D80091564C25D6A714407D6B591F17D376953F18308B8BC12EAB5B5C9FC11AFEF293109785CCE29C978955CAE2601A1DBAA274B72CC18CF27FE077A0123258A1B879E1ABF84458BB10652CF7310278C7FA11BDC5D00DB65E5D6A13D77FBF9D02DD0574DC7AE3849C7C47820126FC99B9766920516AD1D63E7EAA366005714D6C1695E731E88D43A38B615407A99B32A101C4D417D5E36B886C26EA1CBA9FAB0C040468781897145489121EE47BB2FBD6A064CB325AF5CECE5D5A4BD590C70C7A9B068D318247D8FE16A3609C94A8D431E9872E26A3CDB19DD971971AE1FBEB2FB76F7A71AFC5815CF7871BB5EFE3BD0C49BAC441ACD9CE1DA4AFBDB972659D13775AE77F843259EED57A62CEA93FC449EEE1EFFD9AA2D36D8FDBC06A95A6AC9B067468F1D813F2DB95D3456063D5B23395824385D5C68D3F869C4F639962D599AEB26FE2D5148A51579EF385D31E744450E11307F0C803C70ECCA93F831EBFC", "9B1066F98BA2299266D8C1351E6945D7EAA658BCEA46D5AB353C2CE48D01E915E740DC90E9CC487126AF9FA722A335FA1A8D11C2719F07CCA23B1DC5E5B9AB198077177BAE0B5F35C14666FF32926AE0239F21811921C77FFB56F7B218A353F8EA67448F61ECA318196B1186514D27416EE2F61764940A70300B69EBD02719191ACAD969B1075EDD09EAE26F883AC99DED1AE9355C2F30CC656934C0175E824E76947F83D791CE7A2960FEF547CD3BA94CA064659D1F68C0DA8C13AFACC07F3D5A653F259DD141E2ECE9B6D25F67CD38AF3F802CCE332049DCDAE1504061C2437C7D3BF4E15D88185D4114E96BFF7EC673A7AF8AFD53C979C89FEFACDDF873686D892DEF5FB67877734CD981C16684320AF392A464C7216FC5C8B22BC29C8430151FACC94AA1513A08E1FF2F6A965F68E368245510B975595EFDA4E80B7FAE432FCE9737962974905F367FF637121237B2A404C42A5A9318DC5ED9CFBBC2EA9C17A6CA37BBD98F8771CFA7EF58B1EEE40BA2D6C2031EBDE4AF0590AAE8FD10B2BC02A254C97726521E4D4D4D9FFB74FA5D06F8AA0BD43631FAAFFCBF01FCA87C9360C5E6A62A4B025B894E2C30F9003D29B642335DB0A3F2A3436A917B61776F96292A06A6B4DACE4F6F0EE0232E1C206427A0386075BF50D6074006D45E3A3CAB085431032AC20D2690F0435D257D3E2C93FAE49D75FF0F320CB4D348C6288", "8A7F8C99EA79E1B2118E3B203F72FD8921BAA5C336B006ED66AC7181575D66ADE21D00FC8C7DCCA7DC9E430D1D086F2922487B5B025AD38750B4F60993368D829CC361B600ABA990E570370AFFF9BF171610F2A0B0B93A0A3AC54244073A0E816DD691BF1B0041BDC165125A14C621E01C8F069C3E05F48FB77E66A998C27A87FEAF07B5912B303A98AE5796F1B5D4E2EF52F38E68F0EC5786C19ED93612D7152BCF0CA1A3044898F9347FCA8370CE6E4A0510750DF6A42C1C35FDBD91BD2A26A60FB229CC35FC45525D12A092505D901A4F9E1E8D42D25C41B8FDBA13AFED8BC5566D4F3BA13A779D7BAAC1E25B6710D7718B73A641F23E1D22CBDED3B7BC3AF7D92B2DA1CF874D908CD8590C80F1D5055CB8228AD964DE099A4D037202C65D197A35D8A268D8A3BFFFAB39B93615DA295A09AB979AF925D895CB60B5DC5580055BC4347F0DDCB1090DAEF46C8ADD1009A5126362B0B4F1FFDDAB4A00AD8290EB84F76AA345DD73FFF7733035026E3CC1D99428CA68ADEB8CBE98E4A630F99F4F33E8AB66895AE7435D2E84EAC95CF19E9B440373EC0B4D4B2CFAD672C7FE1FE8CE5F34F55B016F8B115FAD6CC7B53DA7555E67672FBF6BDE324AA09FA18F13D9FF1041A12B04F30304774B07659F397554E66CA589D9D9F1F262CF659F718CA7F443B8331BDEA8C3980045562D909EA44E917FF5D47812A0390139B2A87D0", "80B35D641CF6EEF705D51DAACE1EA5EE92057FD497B0D937C7CE9A546BB32DE580F8E434D644F191798A518785BFB9471AAA5D03700CB0B7B2635A6A14750F03DA4FCCB1B363C254A5294DD8E7943E4CDDA318C4B92B57B14EB0F8EB250686CE129BBB2B18EBE7FF53C9DA9C0B664C527A3C69D905CC6FAAE8BEBA7D83294C1656DA4B8308968EE49DDDC2D0C71A17B02053027D7DB8F4E77E3AD1C80FFDBD37938876B671D80E99F5F1C7BAEF50B7E05CC0CAB8979A3A2A852A7018673292CDBCECAABC74B839FD3C084682357A5414E431C1F25E34850FBC779285854FC6AFDCFB7B7749E0DFFF5F93A8AC146C873B407F2CD6CCB461312AE35DEE8D6D51347B0824156DDD60762807A5C132C0667FBBCA7489058C47A156B2A50CA5C24B894C1EE7C44B87179176905B7657A8E95AF7F2EA6C6D2A12384CAC9E6D14253DC5C31BB8FDD2462581C109D2DAF72238E4B63F436DFD7DD5571548D2206BCB8B837D8CE8C9C3B3066E46A1655E3D84AF42DE1051DDDEF438821E0F0C1EDBFE148356D707036B269C19C4CEF4C4BB4048364E2A3886E38B42EFA15F22CC8F92D802EAF3FFAF9BF45247DB76C03E99F662884DC2A29EE488023BF0EBD46539DAC307410846B25280349106CBAADFD658A066C3664E35C4C696726140275AF7611D2369ADB8258EBD2279DD24DBFE002377B9A3C1B120890A6FDF20597417F88F15C", "ED6621A6BAAF64578BD988D08FA8D3D2873C87C38AD7EB38C0922FF3F7E59F0A8DE00744698939D42D459E6105ADD3C77E9FC4911F572B3856C9AF6C15ACE704F026C6B2FC8BDCD9D84022DC10C47E11E934BEB7E1DCE8B6A2BAECD384D810BC3AE587E7EDE57CDEA908DDB020885624BE042DE0ACCDE1511CE38AFB6C9DD812FEC339B8137D88108F07035A3869CDCFCB9402CF96B9E331297B644DB13DFA88F60605E067B9F35607D2D75573E0913F8080EF603AC4B7133D836B84F32F48534237CC559ACABA53A96885D297CBB572BAB1C3275F7CC7A3AAD10F29E727B28BC29B038F4003F8C93FEDC88C63D72609A5330F36F4986CD9536812676A89305C6CE58D4C49C088B5E273F2AF77A8D31D1B8574B9DF02CAD4930D7A7F76C067E7160ECD1A845FC6A3B508708C279A2C94F29108FCE34A63E5D5554FB530522394BCA00508DDAE6039ED9F47609781CC60F6E211BDF29E6F44ECC873DD24F1D37E49D7BB7D6279FA7B9D08B5FA8F9364EF6D4C8D129A5A97A8BBF17DBD5E64C4A31426881687BB79285B09290DE61AE40C295CB1BF3C8AF756E88068A777ACCE3C4B6E78C62AC1E8EAEBEED0AF3153983214D7459AA8E254633B52E5C0ABF4647B906AC50A62543710EE92B335A7162B540AC70F2B2F49FEA892BD72DBFC5F7A35C3AE56636AF2887BE680FA63768C27040E888202F700007DE648482F5307C56", "914BDB196CD56E3B7D7D3F1D7A5E4B0A1389578F111449DC2DF643E6E29F688227C3C07033C2A3818342B229F63C229FAC11EE1AB6F0FCE8608E03B46DC983318DF15FD8DBF2970EB342BE2E534BB0455BE58290A48FC60973553E94C4CB53566CE0250D9FCF055936523A8ABFC9287DB9DDEC54710859DF62829D2B6A100358EB64E6219451868D6BBC2AE4DCEA0C0E338B26B748D4A1A34AC16233046CB7D346D0D79A3CCDD4CDCB435B9B3075AEBEDB4C0F18C5DC006F5C208D882308510C75E729D08C779CA99D5A685E78D5628094AD137BAA635B7FC0F492C48A9CDBE63209C8231455012EB3E830B5B2A79ACD8FEA8016243EBC85BF5D6F46A48FE013D2B3B789BC5F743200BCDE03995BB2B6A640CFB099788E380B4E01D75409A8D8B3887DF2B1CD34960091653EEA6C52EDD745B9363BFFF666891D9C8BF511C3C07D38F49DA2892DCCEC81E1722F6EACB3214E3335C93E6141AB94E5EC31BABF8108F6BEBC3E60B1BFE37579B4D5DC8B77A347940CC1F6BFB5B46097B1EEEC4C354159BB3475E05FAB6BDE5672014D9489CB70DDF537F7209BB9EBF1FC6B8B94564AAAD5ADDD83CE6E51EFCF73DC6080D738C4FF1CBC87ED420A0B92FA459AD7BE58789F0A191D149F88173184A22874DF6D39DC1BCD4413648B178ECB03F8358547A68DE7B672BE9BA1FFC8BA392F8A58ED2806155C00F86B7669BEE4220D420", "97051FC67ACA30E8AEE73D3A8CF38BB13524D4E0EBD9BE68398C7C16227CABB1D0B0A0ABE7B6384ABA02905BA0C3C7363599D059C7B4C99DB165CD14FA12FA7912449CA7DD5E346D8010C85A757382270DAD15BA3CE36A76EF55F81A1E80BF366B37FE3A88EC722028C25E234E624040450A99CD808F942568AA7133981D72E7F2928894670AD5399482DF1B90E7E64062F830B736C79C30F36281495C76699CD48404673FA334F042F9E0E67DD7F3853BF71ABEAF6A9A5546855E840CE42B224D8F6490C6CE5FC02EBAF4FFC390107058F54CD635D4A7F2878099C1EF495750E6921BE2F39AD808C4210F287319F811A254CEF8CF153FC50AB2F3D694A530949E5F578D075DB96DDCF2BB90ED3DE09D9CA8E08662FD8982741DE1CE0A6B64C3D3D5004B5C04B2B0DFD976A20FACC94D1762D41EE03B40D2CF367612812EF4CC41D1BFE9CEB51AE3A22AF1BE7B85A057D3048D0E73FA0FDAF1119EFD76F0A41BE63128B22D64A5553E9549D411483BBCA1483EF30CF6A6D317AD2C7973EFA6D4C1121F703D2F48FCDA3177AD450D75D2A28D2C244AEA13F0E60AEED8ACBAB444D400DF5E280DB799B2D9A984DF1E2567D39D1DE58EF78CA6B4D8BC172B07DCB02D156CA96EEFAC69E556CFCE0AAB617C7FBB8C34871C1D35E74B7BD307D3F2E424C7A9AD676A1A69E0FE735EA50887A1DFAE6CA2FE4460FC7EF323ADE493020" }; const std::string Galileo_E1_C_PRIMARY_CODE[Galileo_E1_NUMBER_OF_CODES] = { "B39340CA1C817D81EF4FAE4E95BF3504A7709089FB48560E9E3EF802180E85EB2194E05902C6C4C52021FEB7EC64FD416BCEBC8E39D64A4B5EE345291911AB8204A888C25B1CD3D9342A56C538636D3EAB957037D09E879AE5F3A39834FBB84A3D8D5090D7814246B62E9CA68533D2EC403B4FB9488467FF9758B0D15A8CEF89187A1D5897880040B6C3C5244E85A2AD14BCF2F5ABC44A7B1D4A87E8BDA05766218773ED4F70F8D1D07CBB1E8CA6298E64EE6DC5886D37495BA2EDB3E0B0B68AD9F300310B88898DDEEFD484538C31A9BCAA76ECAD0C16607D32189058B0862EE9D70CEA9D304755CE8037BA4C46C2573181748A212E4B2BDD04F9BC240518273DC17CBAFF21A03E9120FA7DCA18D56DD1D9A7E510C90CF219104385F531F2EFAFD185ECB6B911F9B7809D98D86F15516FFDDBE9BD1CF8662EB777C3F94EA3F962D7B79449FAAD39935429E92CAE5637E9BCF4E94D413D27934952409AB536BE4055AFBC4330CD1E4B5509EFE5F8EFC9ECBE9EF377DE7E37C479BB9D3EE7745E4609B0A6D2C5D92EB3C9E2278C1F2221FF907596AA5E096ACF8990EBA907E43AD320F8019CB6355A2BA8670EE5A4F463E8E56F8F1D3E7F4922510FB668E32C4CF23AD8496399638B095B47833E0CBB34977EB3E4242EAF870D86660D6A73F83E45D6E8A41EDCA3815079649544597C5C43B6C93FEBAD5700D22EDAF431FD340", "A64F94BB47BD4033C76D4924305907EC1F618B43C7535F3CFC093E5AF5DDD5C4339F3BB6D835B5C2C2053CD3D5693368D4E1A7CAC59425D1FD96809C67285CFD3FC05B01053CB0773221D7205778022F487BF99D1650566BE287FD7AE882AA8E8F52E5D4E3C0C2F971C9FF70AA378691EBD8ADE45CF213822D09FD05243F9726F6C69893845E57C37A7643E16B770E26F431FF69D437271905D270EB85D8D229D7D87662121F0BEEB1E895ED9589A9CF5833408A04197AC9025D8570AD9B75DB7E192EA0A089504996E9DC652975D83633619CFF80667D8B519536B3475248BA8213C8A4C66DE69B4B3774BF9142425C57F34A27B1E288119E3FFCC6AF6A21087F9394F09DDFBD42F32D059B8CD4104A519BA640765D5CDE490E62F10E695FBFD33CBC9D2208A532C8EC25DA28B8CC1B6850AB43D9B5C00B6E74B7A148791AB07B328D347058C7E6233E18C5ED172C9F9E9ACF29D913E2A1614BFC0893D4967ED033B2B9AE6B51F908F1CED57C14FEEA85CD4D9711216BE7F79FA6721B7DCCA033C80127AC6E5FCF58EB4005EC24CB4886D787355362D5E7031B9B2AC2A86D730AD734181E723A811FF510A4DF868001973FE83288D78E6F9B9441DAF5BE2974A2848FD917C3BCD346A431922246EC852E4AAD467E60C15D61DD3BF4A207BB57DB45DCADEFE3210BE74B9DACC918A394469F2E2C95AD1E211947948FE24F5E4", "FD1F6976002C39C87187C44E3D224ED4DF0B67750105944C651A5E57798F168A136AC0FB5979C4E847A82B20A2E6C45DB42EF2B930A80D3257BCCC53EDA966F5DCD9AD47CFB226EED9B62A874E9F6404D4087798A1005F4131171D3A47907A3CD602B83DABE094D2CB031867DF4595F3ED59FD8C4D76EDEEE59E422CE5C7D0A5F720BE94FA24DF05F758348EADD5EFE9197C6BB2292E2B14DB8C6DB24AA94C5FF0F5106D2B566058D32C58B63A150784F7B02478D9973DD4CFD2E84059AE0F4F1320754B7EE83F04A51C67EFFC2EB1C301C0C58DBAEBE95474E3484A76500103C14C40BB0B7D3A04D8BDABB605C1EF9FD4A6564934DEC50BD5878243AEE80F9796EED70CE1B1E8B55725DF76472D12D4A7A487989F42E6705818B1F7E149E97153A7B05A82FA3FBE51763E61171A4E12931472E94CCBA74CC09483DF93623FC60945070FDDF3A00B561650427E4BD64D675B1EB398B35EF057A66FD0B48EDBABBDCD57C32ABAE46F5CDD0CB1FCF17765258236F3DE40BD5D0A3C5C978D81DEB07367AB20B2CAA9834B9576161C4F20FB9C184A01DC9021A4E92B71333354E05BBEA9015E5AC4C66312E8B79F0B92279AC7EF1936BCC30802B83DB3D113BEF64452CAD7ACF6674FDA44023A661019841A101BE80FDA4E3210AE774E433A9ABD97F2755259AECE21F7A8C3B1A3D471F874D2EEC85B9B21BC0C2E2EC9016F847C6", "EE38BAF6F61704B01509B5210A0534E4702F93190C392E749869B5572BB7AC4D7120E2BECD6618CD376C4C1B4965F7D9D73400824E88A5C7B5B66BA88C3E0065F9628A9AC6B91A1882192FC553E3140349934D20698C9F291B5370948AF6CC90C837B9F3607F13CAFD492CEF1723376E6A5B813A56301B88A8799519CB7646F33F91C44CDBE7F768D7DD9B323A5002D2F784C4101AF90D6E4C5ADE7D085C79E827D43E10DF63AC70BCDF13DCE0471B487C5ECB752B9C3E20F75DBD243790C91355ADFD7199081BFEA03D80E82445EC2831FB5014B85EFC2A52748A8ABFAC1BA3904E178DFBAB26C1750228C9A031104F58BB3B91905EDB9EADF7B0F6DF22ACEB0DE944E277809D77507D18EAEDAA1767697398421115D04AB2EBFC466E99F0AA540482A49C6AC8FF95E3F962734B03EF39873A93B70470B46FFFDFDC15C89F8FE2F4637B59F9BF9C5752D9F8AE7EA75D1EAF1C22CA27E5D5C9499624105D61BE2A691F9194D277414532A5E6C63875F7F20DD13C6EE73B0C3568392B14A5042843926472ABA343D2C427792199B543BE1D43A178FAA7ECF53B98AB7528D8E1B8B82C52D973CA0427636505837F94284E8D6B4F496FC5A48B7958D4681DA00651B8A7BC56EC859C071E4396A05F33588B8087EFE9635E565E6B5A8A70DA70F50ECAD1A85E6E36FF07B4FB3B9119EDE0B611CFA91D9D4C58C1F4815B07B9EB1DE", "CD37D0FB0043D03444A939E93676B9DAF5F2D19A2615E3D97D624E62ACAC8098099FDB9A5A2F4B3ACF20F75B6807A5A3F157C2C0F479158F4A10FB4972855F3AE2FDCBDEEC00A4D470AADF5F5E571818AD6E872D897E2DDC402006965ADF16582B1E06B1861BF7D0C7E7BA491C79E86224AF6B246317F725FA74DD8376D63D7993FE2F2BBBB2F1DA9238C6F3FFCAEC50FF61E645FADEB6E03F883892C42CCCF904708B123C9271A670D4DCFCD602951D12F5213937CA2C05ADDE9EE3908E99AAE8DA31951C36D36D671CD7BF15DF60B707F00BF6EBBE5476926D015628A85758BFF35C4AC540F39E761B2ED3CA9116E8680E28BC387058E0F69345CC6AB3AD160E9F2BC4D6047A1934E15D3D7A242A296333C09296981BBF3B8577E4B8ED2A3624866111F6638F8955431195B60C5C089F9897DDF0D34A3DC627CE337AC8128C28B63A394908E4C083BCC4522DB8CE5720C45EF76B2716225E53405FCAAAA72AC198226575D5225195F106C1249E4B87AC05287A3ABE6C51A2A41E07F56ECDC46E989A8568D35669B525A6FFCA90DC91D3013967F6A5F4C022FFCC17751B68FB0D8F16FC9229851DFDCC060838F923BD44C1AD70A993E8EBAC1667DA80F91B66F8F5B375D35275188E3C7702C2312CEAC5B20D67BB34400401BDF1DBFE79DFA0EB73F173A04807215DA5CE8E1D28F2126424C3DB44ADCD7A961260FDBCAB31E", "CAA02DD19DB9C721EB35AB7D64B8A387796427242698A47D832C3F1AD4DDA0B5926FFCE9319EEEDA1565ECB0FA1EEDB424414120AAE8CFD0BE88D4D248899A0BCE31F9BEE7A4DC4DB3C3B10444FAD6ADCCE28F0EDF7B808536ACF5EB05AADAE92693EE02C9512B3EEF000844BA35E24620A2E8935354B8432C07C8FD615534BCFD0D8E3B572BF2CF06AD343997590FE8B244A32BBE69125B5D7C5E513A493724EEA8DA6CB0FFF3ACF1C5085A8120694CBC40FAE1A6326FD71487CC3BE7C10A34315CDFFA8C618B68EA93D330945586B080381F0076351B888087F56B969E6D6A311AE03CC79FF6861E715C9DA9AEE751F1220661581C75DCEC0515A1C9259B9CF8E944CEC4B1754E5809E985D6F43FE45710893242ADE0D3B84F1E1942B7A95648611595FED13F546CA11DB8E5A55A3C3C78C3793C6689E1B3AFB5F67526A480DF923A586A779F94A09CF963594FF4B0A387876EBB3E8FAB888C97F6773E7F0317B038E47DD7D109545BB07263B1AA84284B86E47FFB9784A171D101E7B0A6D38BCAE7E63D827C999BF551728FFC642EE690B01D486CB6EBEEB9D5C888112589EA5CBC9BDF49E675965223416D6DA02D2333BFD4614706BF13373973207C849A0DE41EBA137FDF79A1EB25D74E30CF60B577C2787DF04740BA8CADE3F9DA55D3F0084F02809E37543239E0A71E99751EEB21CB3B41488244193A4868CBA9276", "FB227530F82BD527E648619E532D7646A5ABBD15DB91A6E7033DFECCC65D095A3D83AB77EDD2F3FEC52659CB3AD1BEB009D7A1C9BFB544291EC1C67B75DD6DAB06E70C32C714983139DE4A41EE07B4F3C03BF566558484F19A3BB674B6795F0D8537BC31BC8D7A38B2FF1B2EC8B78539B2251D0E385DE484B05A411477681A3AE7527AC98BC2943AF1CF7F09ACF2DDE4530AE896BDE1266FE916E833A1C0CAA2B2D2F5985AD47B2D0D1D3AFB6E50D4B3DA7DEEC4385E6CA8FE22760F92807AC55556AAF7973E8016ADFD43A3919088B768351B1057498D2D668D7C1E8C63438055FDF7D36C5E7DF02FCAFCBD9291A2149E7B429B3202D329E47CED51EA5771772E308C5BEBA7B934597540D83DBEC6C3BC61A96EA4CB2D7530D9D760AA9403338CD95B829F17547C5A90D161F7B8CE0037EBF403C91C0D0C70C589BA87CAE8DF26CF14281E235A686CCD10E2D520A76265C4C2780EDFD0705E89EFE3C953FE760DE45A8CF1F2D3F36DE3164D5BC2CF32204228ADD7C182EC55F1158AFA9358BE179C722ADAF1D0BF1306A0B56218857FC5C21001499F61E273442281E585B3E6DCE148AA97B6622B23BDAECF983BF186F1B34962764758AC3C20C84036061D49CA33B3C3FCDF03F47F7E53B940DBB6E1E4A26702A118E525A9A0EC229085C925D133750ED0B200CB28A113289DE143D1D5839D2AF8B0525E0027F34FF32106A", "9E5DA18A19514CCC849E9697AE4BD1B317BB34927D0461A96A7AF4A5D6C13107FFB9DE38C5E8CB7C5682827F57D94ED2E77D36F9F1CB05E4C2C62B1DE254C7B1CB236FC4ED70BF8DD1F43AC773C16A37392B895F8B157578C477C85E53FA7CA58BE70D9187AF5F7A18D5A1E5642335E46C2F8F4691AEEE6A9692E21B9668E2C083D9F45C2DB3E991588BA87A0A23808732EE39E8B3C876BE79227C782F07EE3FB3086AF913D71D71910A0F56D62B5DE5E224F7856A42A4A1B2AFE380827BE86E381FCE486FD08A91B22BD91D09615F417E178C5593E41B0917E075133960AD28B4DD4096D1E84BEF1363098DDE92C29CD508C40BA7E785F46C1E0DC72E729D394911DA919EA6F94D14567FFADC61CEB8DCA2821B1CF048477E2433E9DC718DE618EDEEF302CDCB5DE472656D6687DC41EA34C2BB4DF1CA08DCB933BE3EF4B419158BA0B68AE82A64ADD58559214FD88A4CB34D99F646310697DA982C2FD4EE069DC1CB102125C34A89AB20F17B6EF648A834627320410FF6881C7919AE4E71CBAE5F8200E523934D84BFA897C44B89B9BC6BC0129F7F97EE0EC049BA1AFD67D00CD624A75FF5A30514399BE4801CED057B498B9DBBF0EB9944295D5B6AE968C4B8BBD2B9A9E17A3039C5FA35A0D30AA54CA426C58353943DDDD3FD185895C0DAEE950455FC131F520B46AE118C7406D0A72BE6127C5307730AD441B6FC3D1E0", "8589F8396F5B1C54CAF2B17D4C152CEF347E66EC7903C878F2823D4ADB9E7CCFAFEBB926B7EEB4AE1BECA339A027CE8EF997957532FA871F356E0326ECE0BCE3399F81179BF78C5C7D135018ABC340C0BE58D3063DD7CDA4C1918A0187BACF830C8B6900D43B62E04DF6E831CFEFA13BDB5E873A527F24327C95DB4BBDB65C81A20F959F828F5DAE4DC13E5CAC7417EE089401FB497ABE10144E28EA383E61D4A9B63B618AA7CEA4588B2911EC581F506062B05E7BEF723A5A465C9FBE70E313753BDE3102845A79A206BF7D996F49A21752D534B73EE83B48C1A225F85F5103DDB9B6B8380F61AAF26E5CA643EB62EAF58AFEE0D3494E4F7A4F642A3454F4F56A406A264148FF5DAC9DF5F151C12E89ED9D4FDCC04EC5F0022DF8CBAF3CBC67CED2853FB4F8C5894C96CD00550950E7EA2A26C80A72DF533270A0E23EDBAA4D0BE935D62CC885E1CCE653D66C51E49C43952042E1B2D043BDA1CFFC1E98A3F806EB587A4EC9AE299BD838C68B9BBF7C420C12B23AA2793FA0248C932A91BCDD641DCB38F0B2D7187D8986928DF4602B381BA13B263291134628FC91C8EDE92594B39650B877D9A91DAAA05295457DFB2C5D8207BBCDFE16AC5B93600E33BC970B38E18808B1A732889320352B524B109560136E605D32784CA01F8B11D077C81EAD6B7A5741C82D76CEEF764FD07E361D531B75106AF1572AD1375B2BBAB68", "A3E17A4CAD2ABE76E32D18501899F8D60D293BB1AC3ADB64F81148AF56741790F87F8B7A2D9A6E7645EA50B75514C394508884CBF9E320B24D41D8246EB3C163B9101240776C312DB63C33889E3C1218435850471C454486DF7FF4D2DC0AAA14980F394CC8EB7B828A60C53A2FEC3315BEAEB30045B3E65006C6EBB23B47A8A069EAD45E32E771B9C467B4359EBB681AB48C891ABB796544169178203BCC4BC6B4A278DCEFACE5E9385C059346A23DCCA001FC9E47CFEED4BCBDD947B12A3F7E5FF8B9372D9497EE1A508D8BD3392BF3CFAD58F0191B18F6A300FF9CB8D914FDF37B48BF24C2C5CA76ABDFCCF833D51D48FC90E06E7B972944BCBAD169232A8429B6100BA562F7F3C55A625A1870A7C7D7BC9BD4C4783278CD95D07F89E8010E78876547F9AEC44322B0029A922B2922634ECCF2BBB47BF87909C494049550F1E6D03BB5354DEA7E777F499D2D6239BFA5C1CFA536F8CB16F4DB9EAD96F83A4AD34AE2C6893ECD6994C89E7F4FE426D95A18F93B88CB357996B8E5A34C43533EDB1F28A8162FCBEF03704FCCCD80C32874F345D34E81EE813DF5CC9B9C299362F8443AABE91BD0EAB9746E431804B6129FD32916303A570323FA121F7AEB2829F2A50A82CACCF6D273FFBD7AC6FFC5807771D216F50742F7091946F91460115989C87E8BBBC8402B4C8B95C102CAB53843D581FA9F16C0ECCE8944E5FC4BF4C", "9D7B1CF0029261D65AE1F021DAFA81CF1673C9E0B47FF2C37D1B1AF46E7A91BC5E529C8F93EE3BC74E92B2743AAB1EDE16A6523B5B8A591C617C1FD0150E63F3B7EF0494162437B0FD555A83A3BDB519B3BB209EF7924D6BCDE5992BA6248690442E72CD5EB64B4C3D3F7DA339108A18B61AD88ABE87BB7C85A3A352D7B882FD683B2637A17A2D9CB0B7F41456DCFA66D62913F145600BAAEEE7EFA5071C3C9E6FDD0A6779A737071FA6965978CBC89776386B108DD7216FCE962FA87A26B29FE0E732309C0124B0C1E99E5642E5EAE670005B078C097D16C58B8923633C18FDB0E8FF8C4610B789387ACB5A2DD0B6AE7E0DF43A6A9E8C3B89C7E5D628D59759C58D07E0687812AEDAEEDBC63B4FEE8524D10E4B467696957E6791C1E94B13CADCD0ED60752C2DB1B65E035EA72F89FC679138D3609FD2A30E4DD1A946418253C67AA69B07EBB95D4973F562CE3773430007A6DB77271D5F2B342CC5E76E115178F9C7B1600554F5C794961BAE81A5E9B621BA17851008BED9B556E461A553FE9BE00A40891750E4EA4B475216283B530CB8D479DC70B026E07889229F6017552AB9E01EDE6703FD1E2D59AF0B71E0F1DC9A42ACC5823324BEFC52CA0DCD25FE8B10C999152AA3676A30602D3506F78751477033DB7AB1A2EDC21A6FE51273B6B2890088703CEFE74F9EA89881896E5BE124B1FC9430B92F0C0568F5A068A80", "F23088E3EAA0A6BA04D0633AAFE85203E8B1829223FA6B730F6DEE6799B521F2E8323B8793D0F7F2BB9305B3EF4F5B4F1CB822836E4D92C8E4928A851BCE688329DECA6F7285DCC85195E5BDA3B503B8AEE6F1CD7FBB158444E7DE8BF6A9A3CDA311787755A827BCAD3DA5621908EA913C0316B9B52BFB07ADADEFF17D3766BB450DD71328A0353B09DC24DE93CF83A2E5F98BA9D612187B601157D6B140E675228B58C9398618C3BF0D11A226E489366102B9C35A916653F0DB36711ACBA5F32B327F5789F3EF48A338E4676F4BC2C6A1308597171903D2AA299CE7E523C2ABE4B15AA4FC48954187E0097583EB099419047244B4931326E5923B6313DE08423DB00866374ABBF5C31A00542CB97CDFB8F71046AA2A6DBFD7E1A71C068ED70E8D7C3268EA3E0EEF2262BD7991B6C59FF471F73A4E85F4FA015E164F9C15FE0AA5F4772BF2D62B26D3EAA25CE83EAEC5EB3577CA83A68168FB64C40A7A155905CBA6E64159E55EBC928D125E55165C639F545B0071EE3CF1A3F58B4994BB4BF50C2B24F2E06E4ADC90BC1C0954A257D88444347AAECF136C15242633463DCF984BB6736666E38F1A45150B1B7D1C31DE06EB9C2F4097E9D9B4D21EBC9F3A918000DE2449DCB3F5FDDC3C773A645DF560F7E013E847E2356D33EFF1E215782638F58034B09F4739F98915BFB0B1DC124681492F58021670D03CBF5E8F962351E", "EB07F9EDF03596ADC2A3B7EB6DB1CFC911E9A4C42336A57309F7B6C3389282E557D94BCC71827D7C5737B1C530D2A087E3F507242F3DA5BD1BBCA4DF8B78BEEC1DBF7EBB2EA1CF1DFA79E60785BAFA23658490C9A64AC61C45779DFAFC6C55CB5C9FE457BF47E45A3FEF092E178ED4495C0357B459E95AAC82132FF1C8044F4EC84EB882DC195D9CE996B1CCF523098E9E1A57C37C2E2D0ACB0EAA34B0B56FE5A0747130B1E75AA923F6F94C0D024A7FCD22E7A4ED8B201966C417AE864420767AB3223BFF56C64D4F8F557DD950F7C50D9A39AB2C742CE686C8F92B35711904C600A9D4D3DD83F3DF1ED7DB8042C76B0B7D5D9BCD6E0B5524184BF99D8D0B4F14967FA48A93A2F44E2275ED7E59F3991EFB0CBF2E26AC1F8D9A41AAE4563179254BA37028867E68C8179454B8B71FAB49DBD1F889104CFB64C8121151364BDB64BAF854B0DA22B8620BD7EE3D4302A88A115F8BFBA649CAA9EE7EF5BC95CFAB26503A9D26033370A4EF3CB8A5D094C63305A833387B4F8371C6FE1987514BB458C571E6CB5DF5FC900631652D3FA4444F8F1F0312204340FDB2092F709FDC51D2680753131ABC33712B4F1067EA1CC87C40B281E69209EDEC42C22A88950E9C1CE8130DA9291897BF2D8D1D106911743E7A9DA36220FA90A02A34EB0B28543217839374EBE79F40B3B612236C902E4CD05CE2E1C07F3DA10E2AEE8E387494E", "E9D537A821DEDE526B441BA4252785779B54DE76F82747F8607B8952DF990F268C039CC792883B1C76C297D81C6C0CF17DA8BA2C71110B16741728725839D33B5942BC0A5614A3650675FDA5D70F29154A429A42819D6EDE324C64596F93E84CC9B2C9DA3717AA6DFFCD03B75AC96543020A9F2024620353E1364E4320FD44933799FFF083E73F5D20B83BF77EC2247964ECE442C3213DE99026F8FAF0E96302EC60067EA38C5CA0CD989475205FA38869E349FC7F79EB81F8457CA3D1A875A8D166C96EBAF1F39C88815E2258EA1A14943298DA39EB9B738AAA4E0035F9567A0A9D572785594496316D56EB3D39E1F3F243D4F16111E194FC537A635FAEB2FB4401CAA9EE0091CF3CB28B366CB5446A6D3B10AB86B4B1A0714D107FCCBBD50EAE520D56A1161E03849192F5096346FBE5150B6D04025A564A43A3D22BD4B7E10DD4061CE20FA2ECDD36F66BAAD7EA96CDBAA0F063B814707718F47278F8570F77F3B15799D0E354CCA50DAA38C31C746B17482297D9C089FF379454FCCCB8730D89B1462AD95426370AC37DE50B775B952663B97AFBC403F6F729BB9CC1D21DD89EE78AF09DF8558F7E68B3711A7D9075DD4754174802F52CB9683FFE746471C7E543FF388D024327D1866CC5CA6775C58A14D70A3ECCD3EFAB52F9AE6CCE146766A8419FB546E39EB604F43B15AB88C72741F8C7D0A7FE2F462D360676D6E", "D79D916241BBE52B61BE8210A02543F75A47032E9C0CC128524A675E94D8F79A69B6842B0C5CFF5C1AC98D2085299BDBAEA67A41C724CA36B6275A80D377DC3A6EB4C8D0B6B88241334A95300B53FFB546163D2889D7C85F1D1397924F126DA76085BEF131A65C7DDF60DDF4086BD33B44D25025D689FF41E0C256EA12F4353D9E722EE37907AA8BED0A5A606333A031AC6B9A16614250916759B72FE6C1828BC6C1966C9EBCD51413A77F41F808BCA2534AC49DB1D32D37878DF5CC0BEFCC099C56CAF50D8B92E7CE616AA026EA1D81DC7ABC17C4705F9B57A0F99FA749F30F93DFA982A083EAE6582C8461A11ABA74B11663ED7D66EB4F8DE14F090EB1CA6D8D81CB6B063A391FD354DCEAF7DB71C277D0E92B4B463873DCBEFFB698BDCA17F80845EFD5F0FF150ADDC9D7797E21E4279B54BDD4B7C9D403D9FA6101604B79AC377780A5461499714082942313CF74AD1147CD10571A31D82871B6B3A055D50C6CDA4BDDF3871F41EFDAEBE8ABB995344DB6366E35C6E506907AD7FC76632F99124A58A32C86360FD6DDBF50324D86694518AC44F1FA19662C0EF0C0860811B5B976A96EC2A1449E53A7E4A07923E9F85794F228E441D92903922E5783F2FA21C677251B6B8DB02AC2E242C0C8652E0C17C9E3858E52DE78DC712B2DD5D2AF9A42DB2E2BEB3FB6E0FFF13DB9A1E02C8F84FCEF3F7C4D2DDC09F2A2813E8C2", "F8E2DACDD88277D482951555C657B3E3C5DB79E5A43500F7A2C8B30C854DBE611FAC1087FA03D439AC4635D39211E234B82A91248DEE5D4FE67A02D5AE25C676E64C4843E419EBB3C4D81FB606B9CA0836F8207CD19D106C0E287EFD8F8DB5C1A3A22886C2765FED26B5189153657B7C47D5590F11C6340067B800669B05A0849BCD2005DFEE6DF95833C9E94328D72F931D69CFBB2BDA81AC83DD660B3B17D2BA4023491DED324FC4F22510ECA4A5194B1245F4F3FE334DA9C1E6BF83A3FB30897BE54C688D2A7C5845F425866F25DD0A9852BA6DAAF8437DD80BCC72B3E258A906DE079A2D33EC5C5F6927503BA13158305DFFD3F86345524394151AA557D6242060F276BB6BB25586F632942ACF5E0883CD3F8393688F360323A000B82BD89414E9C807994B0234D730BC6D7CD0A2BF75D9F510786E83EE98D4CACF20EFF86EE9C38B8D52455D8A694B689F0D9A632E7A6AC6675E190A12ADD716D2C6322657B878FA97267C1BA4631584356768EBBD1F13FD2F37EBDCD1DF96FB943942E8A5188666235B455BE2F770C9759A8F070971CBA49789744FD2F64DC4DC6E003B3F9BEC7617C7EEDF6BACA94D374400499CA6813C90A03DFE2C537261DA93A1C0F6D8BA93D1EB5FB17255DF28B78737582FD675D056A4C474A71CA8EF0D77BAEBE5637711AEA3FF2B014700448C3D74E3DF264D773360F45CCC3342987169C9A", "94741D7F05B0CA50908E6BC14801A28E353551F01769451B1482FAD0043D5C72331246D9AC3344F0FA2E28FD00E86B38F5E0452F46CA111E92D01B37E966455DF1374883DB8B055C4DF25B42182280F86D0D825C096018D2949B4BFCEB7BB2C8A5BFA2C79E27F11A7F9B43A50AF928D81FA95CEC86A114222B99786072311025672AB04B2593C5AF50100B71D052AE268FBA992BF7868E58EFCD07A24D2111774A36115C1C527B5192EA955722EAE849EF83817FE8595C96EA2D76FECF6476D89F65A262D94B3F5E89A5DE8B1A7333EFCDFDED17FE1CCADEBA0D1E7B73E67491B413A862E34A308D5C211787E6ED8683C6E1DDEB8EE2D281166C03E7A72D7D7BD8B878D07D2216C21B855CCDA76B7B75DD1B2CB876E59F91F040D42B97050043499DCFFC65AF803E2F7455C9669DD9896FE1F62227936DF905835A644D31130A39479DE75B4DC4361E41202D51D50E0E4B4B218AF7F5CAF264DCD060C296E777DF1EED6AE8147E9B6CA73184C345FBDD89DE4A999C42AB4681D9EA3B86DD75031A33DCDC807F8FB14EE0CE61B16068AF01CCE7378C9D965943476AD21A469D8B0CAE15BA8FE04971FE1EC61D3AAD3386DF71B33FD0B4F324F3DA518F0CC0353182B3D76CF4EF5AB150FB9E74C28234CB3D907AC81CB6D3B99D510B481E1F0423D6F4987F5517ABBBEEC07F46AECEBA5F15D91AEB0FE91490E91F739D465225C", "839A01464B473A64A3D1EA24EB363EAAA590F4BD0E4492FEC4E3D4DB5883E4873BBA17595FF48134893F16F5C4A43659C46484A268C3303B2DC345E8C98FBBA6D06946F997074AE15680EC9423D6464585D98804B3541662E183F6540503BEC204749D58E3DB9ECF11C80CD3A38F8D66FFE6CC8A003BDD35F547E5039DE9A21F70A8A07B2DD89B68E43B42C2E021A11909817C543F839E6862268E38DCE712B4D49C39A5035F3D6BA19AE028AE70CCF557720794FEF6442999E740CD6AFE6235F165515FDC24AB6F578DB2549C8065E008577FCF8B8DD8A3BA679BABBC9A747A4E2DABD91501424E4191097E689A741EB6644A771CABDBFE6B74ED3ED171DF8DE641C1D42213B9D0F8CAD1E11FF63670F5587F1FB7FF92276AB48F31751E7A591AF4F0966F3909883EE6015639671BDC3D1378750F66F5DD165912CFF1A54ED463905404EB7D3412EE2B0F0D9E6B99EC81678ABCD1789BD8F1D72D3DF8754A16DC2106B83B325807E27BCBD22A25DAC32F27EACAB6A4CB6CBA4CC90D5302BE5E9827B7AB48BB696B2902975C48B3A4BA4630B14E0FD8A050B0718C2829371BEC597387172B0B3192EF958BD1F7977EF9A3A6C80D53BC961315F97B714253B9731A017BE2CA1D43024F75E26BBE989C4D514D01538956FE4B90BE17B3407B55BD08BA50FA807D0E448B7CAC65EB3FF856772A933F0C5F3E6F41E051015C6F9B8", "BDA2B72F0BB0265269F198207FB061DA29DE43E30847E7C062A581A7EB53491EA51B51EDD36F991D15AF89AB53198537988350FD5FDF8E003019BE115840B9BA55C238C3CBC72C0E24E25090A3D6A59BEA9FED0FAC9EAD40451A95649638FE0BB0F8FFE61AF5B9A8AB84BE84C65EA1E12E9F6650ADB59A824E608E80D1FC3AC19F418169B3879CC946165511D5AA280AE644AF360C42F7A3EEDF27E368E46480E3353E67F536E02B33505341BAF3941069567B723D7C125C8F066F9A6255436AAFDCAA8C554FDAFB0A9AAD91F1263DC62EF91A748FFB29F57E325D65A38ECB4F2851923DC6E9B7296064148A9BA2D938116266C597D9E1F11A46BE0EF526225BE750F0F3E5B0AEB7DC2140FA3A48B7238D0F5A872000782CB6F7751443EC6A1B7FA1ED02B9ABCD1C1DE4FC85E9B405C7851913C60F85582B1529276AD475AE52BD8115B6E73A53506E7A0244E1C29BCEF4CF20CFDF883392BB3990BE2A11B3213B68EC4A166C77D724CFAEBDC34C45ED09848A994BCE1FF6A9BB80C7F5CA8FD44D3FDF8DEC8BA6552C234EF8DC52382D52D2B01BB23404FC453725C7C9269A785FE09C712D4ADE7072B66295CA0C6405D9859E134FBBD3737F2956DD1D718A9F8242CE95BDB1E49F265EBF19976BC46E29F7DE0EE5C89A43AF2E107588A46E1B6762E6F8E48B8FC4F4FF93EC60938B8E5C3719022C750C4309FC62ADA4E9028", "D240216C5C4A70742CAA03AE910E8859C92E5A90A352CB8B45847BAC7793E1F75720D44919E896AD4581E1FD83986FF235C9834BEECAA1556794BE49033E79D4CCDB4DC67C5200E8B6A3EE891E700B348CBF092E4D3FA5E648B620E34E491D7B628A1FE7E2C45586B6577E50788687F0858C10F78F371B25C712ED2760C3D605D4ED4F052E8B66FC308D3ADD4A9B86F00CE4257EED085EAE95FBB1E113FCB42CE12BB6076178A20903C55DA570EF8A25BA7AC8B7E134B8D4E35AB172CA33CC97294A5E7E579B9361B92B49B63BB1982740015DFEC16882989C917F50D5FDD9166FE1001F3282D3C54A28AC7FD773CCC0634AF7CDF225F94107C169D2F2BB757EEB55933CCE0FF116D7FFBA992F9A075A2439CCB369D5B5DE460CADC9F8C81D98E71651AEBFC2A918C551082D85F75675CDC8CCA1D3E486CFFB3B025D27C8D67C451FDFCF59C3BFA163EB791152390E9488C604B9B8116C329453A98F7A104527BC677411034CC49686108E569B7595E1DDC85918D90BBCB337855860D6E4718C0679DAB6982D23FCB6648E8561F44BCF9B052D8B58384523BC592C9B7F824B96AD1A39AEBD2232D6D34DC171E8FBF933900960F207B55597759D23E1E794507586114228A2FC100CC200D2B862DF3F26E6D1C9370373FE165C326D8C29FD2F0B3071AFD5215781BFB589F605263FF065B7A5CA3F6AA9DE3FD8BF5589BDE3526", "8E7752C52805DD0A723D61F0BBE0122DF576A42B5AFDF9F196A766C9B3BFE296DC16A892FAECEEDD8256D2B1AE6BFE5437D4A2691803043B59862B30D68E4FF94A0700D735CFE967299724DA9D680200C898EED1C785E7B8CEB14F1DCDC73FC625F9678B407603587220C2FDFE0A47E82ADF36C26F942797D608BA6B38A3AD1A967315E1F2D665B27D51E350F075531A179DB2EED55547EA61761CD2B3962FCB347279117D1C7A7574B49FFE0991AF572A2B0C962A8A79800CFD524AAF9E6401C44569600F41F04422DB891D25B9F714713086BBFD0FB268E66A4FB10C0ABEEB31D0FBFBA20B0E4FFF404051596FC6F6C8093AD01807FA52041CD33007B205D15D47AF733966411A36F4C7B846D0BE049ADC21B89EA4CE0FBA414C005E66F36FACF3C43B474D47DAD78AC114D0171C031DFBE4A15FE1A22603CD79B6BB448B67A4DEDC97262F7B869C54F385F3682C744ED5AD6C0B6E16793920E6B45A024010896D5FECFA111CC9F0C34E728B32F2C4D45B8AA69B621AB9AC3D9D79B38BF205E8D0D19FAC44A76B9F5644526E06858F76B3EE2D74AEB1971D6B6E68B83773399AC32203164564B102B26C370A9FEC673C285AE0D1D3DF239D48B6492B89846EBED4618AEC940DC62AF4C3FF0D56FC9FBE23EE3B0A4890BA2665A88E9F40C4B6A770F9630234ED10A3A7FF3C5BCCBA836F3EDC8B821AB18D4B1D51D9962C328", "E682E9D8E92A7837823C9B7714D267F9CE290E9FA6CC0A8432D3F7507DAF6CF681246AA4C2323C6B53BCC6E53B31F49742EE5F4E6F79DC36727E98B06D0300ED21F0CF5F2B51D8304A51D0B498F4BFA39C0049B8117DAD334D4B2E37676EC42DFE0EED63B3726872CCF9A10223A8A4563BE8AC266E0697004921DCCEEA5DD80C62567FDEBF2AFDF030192831A6FD871F63D5DADA4B270AA9EC0ACE47E75BD19018CB809B548D4F2C24831C384DD2B807852F596BD4FE32CAB3A16899D0B100E9F96D06AACB8DA8D51DB0B0F600F3B614461F5238188B5EDA68EA753B6ACC58569E841BAF92CEE04E6E2626B1FBD01B9B67D1311B1C3D67427298E2D193F0647EA17D16FD7FD6A40A1BDBB320A1F5FC64B97759AF4EA92AAEB759B5DD30A726E9B8EAFA372FBD83CBFF0000CA75F219A95D6A3CDE38B8DFA9281609A20EE39B73FEBDF6A155359476D073E7153BC918C1191C9BAAF0E0F161384DAD8AFC31A3FC1E9EAFA495E22D18C05194EB85298AB0F042E447DD627904B73E6E505712DF010531C88E695F6510C78B443C731D7FDCD62EB7C4015AB5D530BD09CE5229FA4DC5642AF176C39D60FE070DF635CC5435136C7BB9C4DC83B0D382B9BB636A6C2B3838542904D53B862585FE6EC8960A9A77783D17B2D90506F5D60998602AE5430E86025C8864883CECD7CE51B49CC2953A2A41D7EF8027F1A83815BBEF6F6B2", "F6BD4204243CBA14DAA15A256FBCD138B5D875E28BCC0BA36855E648434CD04F49935C3D074DD5BA2EB82AB14E82C30991A1159E990D1D36DAF794853A23C499AB6B3DC02A89F014310372813643F786BF19D3FA8C463EE50D9FA87107E91C461AD2E5DF2FC99630D2005894CB7698123111FAFC0C5BC9D1E8E84FCCA5179A6C9AFE3E369222D66854F90D2668A57FDEE00C300AEA4E88F03F05C4D7695B206DE9F7E1D429E5E6B65DFE05D4C861F4E7844DDB9062C0B6DB46B27AD0368992F54A44829DD11A05AB97BA8AD854E428B87F20C4E5E4BB1FF3803809A81F2E4C109572006729A5E490E0AA40BA55F4391C9FB758EFA79B97E6D413BCB02D33A00DA6705BFBADED66CFC21291C494B7C3293810012ECC61415E609DD97AAFFDEB795DE36026B4602DD546A1AD937F1A6DEACD3393F5530C48A7974E2882CB327AE600C05A535BDE5D15AC524859582EEE2D62194B73E01643359E7B2625F3EB9FE7137514ED549A3196FFCBC8072B4F6C18CC67AAFA0ED6029A805EF0987E2F27A3260F849C68F3EF91DAA9E579AA16FDA698CC18AE8706E28C6D84CB3F593273D763C2969933D8EFA564E8C06C427809E6A5A6F76DE7C8B07FF4EDDF6CF2B7595066DFB15F5C6F3839DEE642FC86BC1F3AED7ED2E65B665198AA034817DBBBE0FE30E662B2161276CBD969FDA05AFD6D6A570C1E3CF7E324634441983F257E2BA", "A9366308475F2D8D0C2D451C4A65A01EE58A0AF19B791D97382EC59A52616C7480B86EB1D0A83E93224B0DF73DE1D7EE6D51088F3B20B7937E6C0144E0DACA6324F0C8E5F9D93A8CBA1045E5B509D7DF98619FDDFDD7892C3082D69008D9D3ED6C9C1367D9DB7C04621D7CDD8A5A2599EE45B87A82F8CE8D60293E7A71D11700CA9AF117D630C5D8B876A9DCE519BD653114448C68B265813C608435B96CD642A420A15FBAB467692931BCA74F1F9D23F5BFDDC5B8651139B5A73F04FEF3DA64B7BD56E49235069EE5E8A136B921051F1D1C7D5993E6EEEEA2D58583152ADCD87AA89CF5962BC8341EF99CEB3682A2D0686602CE140ABC2FDF79A778A9D75AFFDBBA00C0BD6A8A8AFF9B5D1F30C8373572C81BD9594890102F46B5A393ED126C36AEF6A66E231A246FDFCBD3DED198ABC54CF357ABC67AC83680C048932D7C902AB7DB16952B3C95DF4E845B46A362FFE1A27CD1388483FFA41AA563933371C0180848F9E3C03AFC1F00D6ABA29A953327A4E3D9FAD4616C8546C9AF89FB4D08D4256923B736A8F68FEA5A097E0640C16E0F7F942E6A6F5CBA76BB00D81C606C7FED908789A63F01F9B5FC7B7BE434E85A0A44B2070BE71AB2BA0132D9D7B32E2D2FE229619F85643E75B4141D355386D1A09F45738455BC21607086C7BBCD4B73F87DD83E905BCE8FC6C5BF1824E904C4F5C26518B2FEBF8EB06B22437270C", "92D87BF3F54B0445C05E508E80F9CBC0502F0897D717CA232004362F394A023BFBFE3322C1D331AFC6454FC756FB48768693FD5C46DDB40DCBF14C726C24ED67D8F3EB613BA80B0E39CF0747DF62D258613640D881E085C377DE1C3D149C8359407C2C6ABC0D2718A2D42439A8E7B38CD7DCED72AE750B2BE88D0069FBE94BD69A9A4B4AD42FEC5E651A31F86B90DC2FEBAA6FA6E5F6368B620C1750278DF393F7C5035D47897FC05FBC419A61330135F24365F13D653D77CA2930DBB05A3815FE83F75BB1BD8B2DE12A2FAADCD1ED62329C55B87FB32CC8F3B42D888981B4192480D1F57CEB0C55897BDA6B9C0ACE1E7E4595E30C7368306243208444FCF4574C47B07725B25EC2E28F4C50B744B3860B361DDDD22D949AA94EBA4F97606FCAD91394B6FC0E634BD15E099E697403B2AE84CDF5DBDF36D91FB82C0BC12B984FEE83CA9E97C194CADF8382CECAAF49EB3BD446F660F94C188C074CC312E186BEE0F6585535B050C226659A94B4C4974DA32CDFF30DBEB4DEA588C6F490F7432DA5FA2408BBC931EAF60EADD7B891A61C157147B8DDE7A45F909BD20D5B12009783DE410940245FE4E91ACCF72942E486AE773CD665912173EA29875A1722F8658C414CD08CBFDFE1DD356E167A9D7B20BF7441562EE816435A78BAE7E5A5EB4DA6AAAC36F594C93E2851D76B6A18B0B03B30CD38B97E38109C494C557643D58", "BAA2716F115D72D2037841EF9138D19833C7C5FF40F058A960826E690315577710EFE64BB37691564B3B0B6C577DA603CC3ACDFE1785541AAD23904758A5A13BDB018E7169D479A1FAA031CA72FA6D6AE9613D6B2F82AB07500B49DF535F86A76350C140F9CD25295D6BC2F38C5D13C99540E2363862F06DDCC486D884999BCB840BCCAF2AB84F5906B9AA0F77D6432F6531558392641C52FEAF9D8ED86BF0158134129F34ECD0768BC02ED442254515A74999C6B8052A1FC797F5720738C69DD9B3FFABDDC8515CD279B246EA7C67754920038C5A4C8D301119CEB95FAB2765DE39DDA84180CEBAAFBF4976118A8373FF6BBFC7FEBC3CFEAB1DA69DD3DB9E428C594950FD51F4D98A393BAB96001461F2765834ED70C60BC56406CFCB3E784C59B91C19783E67CE6C86713C43DCDA9512B2E7173AFC2EF9A172C9CFDDD3000D7A981440AD994C39DAE6FC0B645BA0FD49ECAA19E572ED0FAC748EC837A7D6F28A8D004402F71CA209BB9403B21E29836C5FE897268DE0736E985F9631DFDD1AC59D5411E684BE082F41108E33D2B92B2D45ED70FA52EA2D6DE121EB9F9C886DA479464A9DFD9970A406491E334372D7B78936095A7459BFAFF0E9090C2C6B6D62624A79334F879A5C92C685B50F75F04BA664EC95893FF40D62EEB24DCDD288729D0C297DF5ABB83C77FC11D0EA3EF18E3BC7C2C065CAC51390C610B591D24", "98CDFCBAD056240E180F347C00912F2D9ABEBCF5464D410BE6A50404B830F744D78F7D97180404FB3BCCC2288B7991810B2562C4D509200CE1F9C4DF6DCA4C600D9ED49C9C1456141C7B71513E728D41970ACDB6C15B4A4E327B9A87ADA73D1D46EB0A21F2F5481C3B42931C51B780FA526C29B98E6B9C714B20049F7A05252CBB84B8E36026DB2379C9632A0843436ECB72D15EA2950ACDE18DBDC6DFB01BF08F7E191EC885F11D1D8B7BC96E9836B395108F6854545082A694D5974CC36C8A658349186C1BA892DAA85D3F156BFBE94C73BCD815E7652C38E178AAF02014F0E6F23A4E7EF689EBF3ABDCCDD40E2DECED316F07E20716927C8F7B203D51D957EE6EAB062B99ACA0D28E0AB50B516CD92CBB9BA90333E73D58DE0B4B633D81EC93D15EBCCC813EE63D63BD18517F4FE85C37469574B8122FB91388123E1D5E805166FB7157494F8559F90A4FA3DE9E71DA6FA7CCC6086E638BDD4FD3E4487506ACCF84F1E1678D714B86FAAD57A6B76E085CFAC30DE469BE32E2D203C63B43F073DD24F4A1E039B941E7A97F8BB28B516217455268B6EFBB0E1745C23D6D12A8CD13E5D242F562F56FE92496342000A731BF3DB0A7D3110705DFD0D8DEFB85665B77347CEFC8629F3757304F6129DA9845F6509FE3D32DE9FA86EA4FA9BF86FF7CC8E726C0FA9F93F889C467642C5E944501BEF8ED59793AF8804A9951B4B88", "906F6C5A1D3BD03A03802EEF5937E214E87B5E2F0182BA2C258F44B516EC66EACB705E06EA6DFDB56600B8463A421DB03A51460091D7FE889E6DAE32EC19190E7211F08D37846CEE7364B6ECC07C1740CE990141C4DC4CB0AC9F25CAFCA6BC9111102EABA250ADFD505201FFF638B31A77CCE7A1ECB273F9C8ED84EC2F403C1191596A53EAD823421EC47DC5E78F3BD1339532C97E4EAA024CCC906EBFB870C1467C3D845A178EB07C11BE8D57E4EDEA7ADEF162923E9521451B871DF6E357DCEEA7F62022106F647DD8A23074AC10AA632C56DC32B34A4A184FACC64E5D1E8FD69269660543EEA2FD584117A3EBCF6268352F0212ABCE7CD28A93C9AF76722FB5A71FF9E5AC4579A2BA32B91818CDCB62C77A6A8EB1F4C34132EB463812B329B6B22108AC36E71F38338AE3A52C632796E45189632B73FDC0BD37A457204757261B7CFC01E06BC767A57A5FA7CFE43794F65398A94B4EF09D6DC2A8691BD0CB018BBE7B66E0C37BAA4723247AF3424BDE22614A9A581A7982E8C2323178BD2D46E6912A2FB2D2531819A180689D7F2C9B5C5AFC2DCF1C7FAEB1927EB79A72EB1203BB0FF17DAAF27D66022195890BBDDA786CF1C36ABFD96BC36FA1D2A5A0CC3D7EEE1A1050CA840209903CB9FF429C7EE9DF9CBC2BAB84CF28FAEF5BB45AE9588970A28B6BD9ADF8DF134C1FAB0DE274B5C7452C4836A573A26A0B4C14B74", "C6D5046A5000ECDB54C872F2DC494F2DEB88430007C9BE8EC39FFB148F00F7861D8277589AC839AAD30AF7D7A2E0F9EE8217A39C521311E9BD59A71BC6663A7738669D6D3BB28124A80ABDF905DFE2C9539CCF0C8FA39EF84E9633D63BE0C32F3B2AA9FCDC18AC38C3C00924E9D54977BDAE61410F997038BE066DA6C945D8258B7DD133EECBA836A7A6A2907C431C522619D466430E6ACF15030F7FBA4F3D6BB545CAD85678E81898D2DE358CFF3951C8184066B18930DDA867890871AF6F4133B492FC894DBE4AA5F1E44BD361C4560ABBCD3101B4AA4E065FD60308795DDAEBADBB604A3D58776006CD074389AF49A0EF09586410015C7DE4FEFEEBEA6262B23571B93BEE15CDA2BBA60B6CC72A7DC9C80C81C9A25FE3D149C7A8BB2F704BE11177F92E2CEF0BBD12C0766D691CCF093D456AFEA411A8FE5F1C1A44F31017760F0D0CC3B271FB15F56D9F51A594C34FDFF8F8ADC91584ED8D7E1B6DAB27B2BE1BBDC4486FB1C822F23704BB2EF4B521E02E42FDCABF69588B0B9D92AAA73116D26E8E9E48DE94F6267414AC845467597B4C1F2A9A8E1E82C0A1C05955022CDF87386098EAFC5BF1A040716A89BE53A36B143376927028A561BBC07AFAF42494DF5BC0D95170D853DCCCCB22FD36B7947712EB369077D02BF85B0A4F57757ED80B247E521AC640D1B1CE30F93DEBBE2389D364A8B7971A51AFA4F557A8E12", "FDCF36E6C842D2ABCCE9D8783D0D7A7EB74992EACEEF6C618AC7DED4E457B1A708BE2C82B28A9563F4A088FF7DB146B16B47A900DF49A4F3FA8EDAAFCA09F408B025D04EB673E105E0F55959B7951CF0E999CDF68EA9B32333DBFE0516D272111CBBD9933CA8AD8AA6025E5F9A062D8305344CAFC3CA391BD8DEBDC58F7FDBC041B349900E397609C71E4EA3A9D8407C63E8A6BBEEAEFC92E9C939147920E48E35DAC6D123DA46E4F0838FD732E43FE4EEF6BD68D5AF0C9BA3A0CB28233743B291D4E10054F695DC10A847E661F39C4C133289B07ACA8B544EE3E2EC288CB18C40CD9A8E48A93378FD50E077EFBC21996424B539A397B3D2A6C7DE58112CF55E82E8FF10F75571A15DC248E6B77CBB91D8BF2D53E5C4E9A85C7EB8FB690F74BE029CE1B569EFACFC16872C5008820FC6A7D12AB43E08B4AFF57DE6B43B613DF8480ACA556E29D792C6C81CB1CB54A67245C571A04965267BA0F9CD3FA0950B9A5B393B4A230A41E455267CD396F42285F0E49C5AFA0B53EC7B60C1C317EDA3FAE4B1713A80D4EBAD32FC685C13649C4806D6FD887A24A4F7AE801405EF28F058B37112A680F9E9AD0456314E9F490393CA25775797E4CCF9184FF0C6A237AFFA8DE1B84C420A6183B1D49D6F2AC1E673E7FDE161A8159DCEB00D85F032EE76E3931C459CE935DFE4AD6C6110591EE58496B82A16630E82320B9510880BE4E72", "94964FC9F66389FE3880283C4250E6E19F195DFEBD2104FC0959E084308BC9CFDC6E5ED1C4B48B4ECAEB4FDE5F215FBED85A6CD4D1C1466E68A4CF21AEF29F77933549A3A6FF7ACD8AB6E6C689F1E8DF0AD8AB289D5C33023DF90B21A26320CE8C1CEB2C099FC1DB58737665855DCD20D587E176483E33EF14C80AA4760F751EE5B28460811E5110FEC3D689AE2A6E91D0A3F1E22623E88571F4DAC895AA428D42634EC142E56D0D57CE68D7949BE13AF234229E546E9D66D5C58E510BF3EAC7B73309BE16DCE6E2280AA80247D9EDEDD20E06295C9876B412B786CF7E5F1073792158131AFA002FE7750A17015A9C2580646A9A0D2A3F0243AF1AB4FEFB3D028504553AF9C5C34D1A4A2FE3B8DD8BF8CEADA82AE63C319BD7981D97155AA2F105D724A8C09310D5C316877062152419A006ABF56AADED74DF0DF325D666C31DF51F194CFEB331E7DAF00410372999D2D05B023B2C3067E6CE4A472FED3B8BE1C15C24DFBF4956A5B670FFCF128E5A23039764BE39CBE55636B83674060B3CCF5EF9A7B7EAB0813ADEE82E271C422FB78A9820007753B1E62BF4CCC074F7796D5B2008FE6542DC0C77ECA3810120ABE9F90BE5934E8EAE365D02B3D2DF4EA4A827E033263B113EEE5823DD3912FB31E3C4B46B274D7115F34CDA793DB6AD2CD8BCAF4B13B832AB605BE42B2877EE2E66B411668EA29A7DBA5BD969B9F152638", "9B8071D96E7D361B2462CA93748DE4D31746972DAE582AD4F70A188CB40C2E6E418288B6A713ED4B647013B3EC31C9EA6217DE55D016A1977A0B285224129CDC59A9E54F3E5094258F11C0C995F60785614E560764312CD86C6969B3274236EE602EFAE392C015E4C3972D6FA2A47AB48D5C5F6836AFA54F28CCC03BB4DAA0A1DC0DCA3FD3F2B15FB2ADD907D3BF7719D1D9A8284A47C30F32712A8CD440148B8DFDB851FFD25ECA2864150B832F8B5DC3A7C701371785A66285601E96D285FF88947804AA4D88665B3E15760CDE327FBD21393042BAF62FDCE6EC41955E877ECAC331D594ED40547AFED34D410714CE57FCB4F01C8826519ACB85F447306C86BD1BA8189E0621DD09451E8F341AE47E7FCF1FD2DE2AF78E0AFA27A4B6DD51A0710FC1FC4A5998234EDAA1D4CF0786B779F637EE1A72058774C1B4BF5E125DEBB4230645ECF87E3C6FDC91E1D14397FA72686784815D9654839AE8FA43864709EE0F4A336E3C399CA20B2E652E2AB17719F9253F772EB7A9E8838FED4EBCD0F8CD977583BDCEEBBD925676F56AAB0C36F3DD915F6691A30D60D523216FB233CBBEDE7FDFBA827450E595AB51237F9E77058E40F862D3A5A96E4AA3DA74503812EDEFA501E526DB6B4C642222D7F33B06D9CD0023471DF5730CF8E2BEE834D108A25729C1C1484C207ECEB0E4598965EAB5216D4E7C30577A89FB8BEC0B118F4", "E43093167F77AAA20EF9F4AB7D715CD0E86542A0523BDF0256BCCFB1FA987A6565F808C03C71E6343EF41D2ED4C4FDBBB1AB1D617BBBDB776F07B000922FCBB3718F5FF326A7BBF4BDF148206411E86506FE5CEB8EC0F7AAD1DAE3BB46482F5E85D3B46DDF93F4BA19DF9DFD700C35DC038CF4E499A058995AF06BEE8535631966751A85571271E6877BE6216AFF16AA2B9046F1AB9126E1DCADBF40C4B390D23379D52C80C10CA05079D1F05CA294EAF7E2C66B884DDBB52DC85A45FFABB2BA6EB95869689486DDDE372DCCDFCB408496E647F33575BB99FF1699219D00D2608AEA1A47CF52DD21A3CEB3F043AAEB40EB27F042D276227C09CC8201304C55D254AC228FF309FE8DB74C85430FCF9441EF1B51A1192703B140CE3703E5848477FB0BBC2E82DC38702D4C6A78A41729B7EC86F9890EAD369DE4F25EAD61DB0B5B0ED764EC84FDAB904FAD9DBEDEBBE89F338DF52F7A6FAC8EA1D76001846802B328E8D1F110219BD6BB51214814026BFD6E32627B696C7990F53591CC811A9A09A1154A50585B882DE0B404D7B5846DBDC8C66E4AA0C7B90B08CC96A5CF2352A6592BCA536359C863D639CDA60FD23326619A9014FD878EBFF3E73E4424B045CBD506ED744D3243725EF9491D6165D332FB12985022A71C7DD4E3F942AF5CDF2396F6C346088EAE89535E1B21DA8F7B2E1E12DC8A37738310248808B9973041E", "F5B9B9204186466AF61609CC856B6B2B33D6F526EF1E4BE4DCAA1E1055F033072B3801B642700249C024414B3217D160513E5A804B3AE8425852CF5FB9F51D2601F9BFF9F5E4512A45ED8F615A6671315590DEC31720387533A4E090646F17244EB571DBD6E6A10890FF19809D935A5E88228D424FF2E54B1A37576C059A756290BAAEA5E36AC977526339CDFF915A763B2CD0657F3A3D385A5D92466A44980AD8A1B4E1593DC177E2447ADB53B1EAE15A91BD6703E46F01AE91D6C316C1DB983688576B3B2BAB280FF196D5BF545755097249C517E1271202E3856475A3C95324F827961DD7A827709DA2924B21949B6BF032675D80FD120180F6850BFC385E72399F840B80E5525EE70B89E1C524D580390D487D0CD31AF3CA5691067BDBE8E2E91E0099F59700CDFCFDF8B3ACBEBCB61DB23A28E80C3E463D9E53328C37EF8FF0D4FCBD287932C8197DF57EEBC9DDB29E2046C7FC14970F9F37CED37D8BB0958155192C8595E2A9369944DAF58FCC1D9E1987DC4FA77ACB256A65DA78B733178FED14DA3E3E41DB808849132EB05E48BCA03ED499A314C857FF7C7C1FC8BD2478635396BD7F252ED984C102E23F55450F57ADC7EAC50A57B78BF4F988565A172E878638ADB1D992703D0BB742605EB76E3C85319F567D71B9F2E40251EEB936B323DE98496229B1F8A996AE4F6C0C2FBB3B2244F3BC57EB3FD067F535102", "A7F21431EF8C75A1E9723B1FBB602EB4B92BE5FC8DE70183659A45A31EDDC46643ED1287A69DC876634231D3AF95F2D02FC9C0C7BBBB12319CBDBFDF6CBF94E47A05204AB14A490C6FBABCF329B5B0EFD8C2FA28845764510624398BFDED1B250003FBA61A67D2127550FF07A6FAE2CB5B8FEB23D289FA235BB4959F8845B25405A75A30E7D05D7BDEB721BFD4A998DAA6F1A54712901551E30D618DC80FADF7CB7863EADB7EEE708F1050AB0510A956C3C7706756B6CEAF611F02656C3CACBFD9E4507AC2B4B78D0EB0BF757496C84C7260CA972F0F45A393A89AC2BD70F15E629473D61FFA29BA18A468D8D4B1F72DDFF99608AC9E6A6D6A9231F24388991E80FBE6A9269AD6D31182E79235A0E33CFEE9E3526FC068A9253789407AF8CAECE14BC337FCE02333B63224A61E913367CB36641A74E2DB2892C4E939A50127DBEFED7456F7E61454FA5016A6B75E6133B0417C2860B2F640ED8EE62D5100EA172BBF8FB02E2022D29DF33C25654C96F8FB2305B72A92105E027444EE0F27769946A67E58D9A26AD01483FCA4BCDA4C00A8119E355CE733474349DC8311AE9853A064931FD68D598B02E0724A13FF63D88416FD5D03A962B5D8F79586E696C484D7F287773851831EBF33B0158F51C89C493C116157D20DE66F3990061135F5CBC46862BCFDA5EB0322793BD6AE188698A2E1DEDDF71702B6CB01EC2BDF85680", "FB2C4002173D1E1581890C14672C1F232E8A1332655108F24F78E53638EFECA3DAD18D19FBB1E91C6AA4761017DB37FA76F70BBBC4C8E8015384DC9E9EF14C6AE60DE55974D448DB8C36B030DD55DF5EC6F6C56DA8CB9BBAACF6784628B669913A7B291632730C11710D7E181401FB535FE8A9A0B81578CE54123A6C3897496375CD7C60BB4E05AD16BDD4CB8F652448E3020EDF4D51FF5EBB9FA93A740AE779419002994348358CD7827A63BABCD7C4501CF8ACD77A2200059DFF5B180AFFBF3CE52133C7451CD108AF9CC8FA32428AE9ABC55D89E1931E6607160BF96015901DC097B56299F9F358DBBE921FBD7D0DB43C9C5BF97468813C0AC632D35C858D8384C32EBDEE933C9037EC36D2322F54FB0D3CF305801DE42B4EBCB5F83F3D3FCC1AF56910B7A547F50F851079B6D0D262676145C27DB362AF383037FFAD5E3B26BD2095143B361F82425734842E2153C5F428D89DBA45EF59BD9DF1FE1BA941F172A685F08C18B76B6A8FDC86EED2867A57AF48E00467993864EF70D80CE5550C5EDF085E94435ECA89F6513D23A56235739534C777C17BC6DC7BF6E04BDAA9B0C94C4D7AF1368C6B4B9D3C97D25A26B05703EBC4D1F8869C5DDA359D189F4A3E548D53731FB429F3536880CAD9FE13F70DB0A080B949C3636611CBFF0F644ABA8B56D2C6E988B3392A7452A8C8E52F2288560331A78F4CF021D2A41B2ECB6", "CB7A566070A06E759017D62CF78A429913370E6498BCDC038C1D3079A0A3E6FD4FDCC851DCBEA9EB3A7D266479F75C40452A282CB406E9A2581372BE2FFBAF6E7F3359EAA594631CEF876FD62DEFBB3B816EC98A1F72B55F6023B572A51F320CD7ABF489AA905CE2274729C0EE0F677A04D7449A489BD02704CA65BCD8B753B689CB90C87C73FB4A45219DCD817E9AB584EFF049EA711CD3E24CE41423FEE6F258A65CA8EC3A00D45371EC5B846CF1549CB5CA4FF14B696140D3483DDC7801BFE6CFEFB9189B5C7AC3DB9C0709F630D80F361442BBD22636B00530EEF21D96D4A12CCF85E0124939B025CF35A0A5F1B4C2FA5B5DFCB3772CBFEC1F0C1C824B5CC22BA8FB2DC92164FCBC60333EBF920A14599F1E8EFD4E8CB0257134947331D820595BF5630EDF00814C32994039B47E8784C29D0D1C5B5D219A9F55FC14CC18DACBE6A79698A8073276A424BA9A6606DFF369CCF5F9F4AEC9605F6E44807507B36A4918FDAC448E3134106683EBA80A2D97E12EC2BC1EBBCBADBDC631CE7D61BB9DDF143C3EEA4E36EAAEAFC001849812A7CDE3EBC194A51EA2A9A2AA15A0A4F29C2FFD8B2CB4ADEE99B59553BB2398273C04329A5C884989D417C131D68E9B505594C9B9CF1C13AABF05093A9E4224D71B54C6F61F1255E25FF7527E47768FBD51523F42915133E02CD7E404147E7AAE95BE651BFBBD65E29130D0CA31C2A", "D90A7D104DEF06F51CA5FE107C115C130B8823C423423608DEE00E0C2E6C202B60C5D20BCC9CDC18767D89E5E7857BABC9531C21B08436AC14C5B34EB986E5521369BC3D9B1FCD07C99240FD0DA306C69303B310B8F78D2BF97D6E9E88843234D73214431F6BAEFE5109AFDA22C4C348A469370BBF9B0A81CF27ED919A0A48DA3E9061113C56659F7561175A608B7FB37A76EB9E5ABA5F4A6B485EA5D097482A28F4EF7DE785D31DDEBFE41DFF7C51CA2B64A0D2A7A70269FDE399FF7628202289EA97141F995FF51DB5AF7C9C5CA76F0AFB4981D021FEA9EE6A49ECCCD18AF290B6C231265247DECE33B3E165FDE4FCF82EA84A4A8AE3FA90972D96DB68550AEF21FCE82E0FC75FCDE33C2B6F659A873AF09067D94B068DCEEDCA4D392BE5077587785CB6A1F1947841F483BE5080E85B49F1073D4778A39239266DB2A24B57B5F51B1F021D05C634D66DAD081D1668EF0520424581E5E0B62ED085D005F169950F971E1493A49A60A595342AACBA236EB16D5EF94E749889E50656D98F94EEF205445AC027387AE1363696185E24749EB67518B89057899548BABE29F3487D273C54EE2BE6254C7F3ED3D3B22FA3FC94791A7BC7C499A391179368D9B1F0DDC325F55022F5AB7B91142E2880BAC761D154C11F2C58F4A42E8B3DBCFD44777F08A74676DFB7039F24C9A4C4620726FE12849C9D3C15293A3DF7F4870DCCF56", "9D238D97CE04FEC0D292181D145EA0EFA727DBB7BADDCC60357762D262DD7D7A3BB0189E05BE490018ABBB61B154F94A4FA81985E774019CCCE4B8ECE9858C0C2BDFFD7923B3354A2144ACCC5C9DA34E50299EBF68E9BA0A269760386E5531F8964F8024ACC99E7AC3F40BFA9D94ECA1B14A1B173A06867100C57883FE7333C079C5871A8A7603395A87387EFB92A77C5812EF548CBC3B9178E874E45DFA8796BA6FECB5D81687EDC0AD5F804FF36A9CDDC58A5F991A2A0BA999F86E663715CC79A439DEC44C394ECF1F14801D8F9F292A648D29D2E910032F224ECE51D0708E4ED6D3E65FC788A2C1D286750F4B6D768CBF1B6EDE8524C2A7457A82404A491DB5EC868E6B95B02167A0C4E785290156943FA091F28234C4CAAB586F8095895FD21582E0356BC15EC7CEE893E70902CE4D01217474E0226FFF30CB78597726C74B95732E44D03A626F1D1DBA7785F55859B71C2DAFCF71D99EB99FFEF4877518C579D2623FF6EB326B8D6C7674826984CCAF98CE41724183952EAD69F05F44750F3B857EA01475555FD25A828BE1DBEF5E8B1C1237779E9E69D35E7BA9ADA124CBE710490280B64B2DC5EA2C41D6644012A18B369E3CA2FD93A254C493506C54FA6CB4DFE24E0B5035230F2BDE6FF21101164F322B4B066ECBCA3BB4F3C476B41BD02D8948E555AF74EA13228F07A1BEDBF95FA7E16F2BDC5D178E74FE5A1A0", "8DD8032BC8D741905EDAE449212146878D8FA15AB037E41C36D21B0064D65BEBB74A18F4370C80DB44EE93C2AB06DCC6C6FE7DEA83F270C9FB52CE00BDBF546348F0E6285A35A32A47512823DD6E22FB7949071D4B58B46241544AB97B0F6023C70AFCFF0C7541B4B9E1FC6B3C3C55500251665D964871B9D1247B3A9728AE02FF47368053B1DE928B6A8D01ED3BCB18A3180EFC9700871F480959137CA1480C3640547497ED7CDB4912ADE1385F9F35B6D27BE64E362BD71E0981BE952B00AA20DC57465DA89B87BBE07F27454FB24B3B86766F95A5A5B4EAECA2620C3BF87C0654E6561398F27F96178EB1062E42F6E6AE0A669FC6C7170F217C850E822B4E70C9033A375BBCF6D62D11B3DAF7DA976D4A9D955B924E7F0A19CE77A53EDD424ADFDEE8558F06887E82A936193AD5E508938DD3FBFE02DFEBD98C2272DEAAD8AD3B0FC86C3637A6CE694DD95E4FD55F433E151D35DD4C930177CA66322001110B9BD0B89A096C8C3A3431C100E39E3D2E65504A770F4EB2F19E9D8FCCAF15B8E58DFB52A0B88406A48A036193F3EA9F8ED2322FC69CEAEB9E2DD6AC627DCF4CB109EA05AB5DCEA5F92902F3E7BD457C240C958FCA7B17F2EDA1248961C9C827E99BE0A3D60B3E27E42B1FF696DD58E48C7B832D8FE95529B9C8F075E67294C1B1060EC6736DB73FEF7407B320D850B049D80F9F4D536361038C4BAEAD92F24", "C10051089B11B578F56E6C24FAB973C5D1B4A2F937E4A402FFCC45267F4A3F4CF4EED3DFF530838A570000F7E523D1B97FF798A3C6E12F9704126A9B6FDF606031E4D8E1AE39A470FE929124FC95961B85A5A6E10A79CBA60F54F37D4DCCB13FA3B0A3A1729184C59036428532E3DDB3F7B8D373DC08842EBC2ABBFDEB5B73B2F9B7E83C81D5D0EB3037A32AC0E5B6CDCC7CD84B9289BE16106D1D019D47209AFD8DA78EFA0F9108377C187B170CD53F366B17899EB41903FA1627AA245C07EEA5D6DA78039B3C4C1D70DD28870A40EE3A048D8209C4088A0847D6859513E01E0F4172C383D64F0B307D721C01495070336A753A75E1CA433FA973BB131E558FACC298C0A6E934E9F717E19EBCEA11EDF3736D4EAF593A8E5AC8EDFFE4D2B17B613E024B41AAD19BC0A27A1E9BE9D25344D4350596B9B0A48AA014191511B26E61A9753D8A38C4E3BECAC93E67CAB5696888C06B9099E9AE856486436FDD1AF1C193057AD1DFBBB14AF772F7D9B00F37A6DC9E805A8DFD9D53A161885E5C2C2A6DED0C54D00A8E0704877DA2F1EB6F6D8EB93B5604A4E2545D454C3D4F0D606AC192E170D44E85E2ADC91E54F56906909024DEDB6F9050BF3D3928D9AE23D9C42576AE4DAD1336F47519EDE436C3B1829CD2C5A0AF63476C7928B32F5E51826D844A1DF765C5578F9C2E5F79024BFDA96FB3199A3C7B47D3755FAF376761B4E", "9C6674915677A62A7AFD4FCB27B45F8E6DDDD08980B7DBE1131E6E2425C5ADBEE8474E93A8A2D4E495B195A6B83F2CF6472A36E690928362B9A1FA994A9FEB7BCBA7FDCB771F59FB434ED289CCEABDAFAE29113389EB98D6F17E5508D5976E11BC8A1E93AF9F7B1C81686265930B4D334568E3F29E1C2F58A62572A610016C1C1C1C9E1D0EB3FEB2B3A210C59EB3980C44BC656FA7C5E05A4472D4255B40B8A1604FE39D8B5026A976310648D5C84CEBC87A8BF6545DC843A3A0B64DC4CCAF2D2203122DDD75BA42E096844899A35A899FDFD72C26E3392EA03351DC78BB9F62F51D913F8008DB00969C64003773FB2014FAF97E794A45792495BD52D7BE7ACA47FF2BF570CF88303377092B5B6BFF3B01D38A53E8A68B0D81FC2D1D375EB27C7AEEDD70679E8DDBA6DE656442ED951478FB96A979B4A9091F344EF39AF23DAA886C6FBAA8611C61686332C630690109E2869D18EE7A2C21B22921B9E3DE40BF063E370FF64E7AFE160B7EBFC4AF6AEDA043042552F5F36C2CABD339FE1442242EAD931D1B83968D1A31A7E32A0838401DBB9C1034D56ADCAF5942462EF63440FD70F91520137A50372D0D125A6285F7D715FD9225D03A109E1FC5EB547303CD7708F88FEED2814607171930436B249924714E8D8E024C24B3C0C9E40127DECE1AD966C3F9DF01793864615F291B73F73D27B624ACBEAD3D371B8D4FDA823C0", "A1B9E8AB6C44A3610768CC17E3B899CEDDB44B746319EC50BA7E006EA0F3C09E9D67EF8A20154B2F93EC265B800503BC72831800CE0C9FB6CCADC8327A840F69DDF29BE212BEFE4AB1810026FF786D9D3A88B29745EB61131FB47B385F83CA211B4A2BC0449F7ECE43B2DDAC94C10955FF2E078AF573FFA7349907571AF501FA6A2FCF24E4B5676F8213475351C0398748FBD60A5EE8A1128C0998E57D076A201453EA7C70B1F171E7D084F444311C9829CAD03E0C2330D7E8D39DB6B7901C30787FF123CFBAD4E974A5F6412FB1BC927FD65CAD1F3AA4ED52E2D84AF6257EF311222467DE179E89438524116D8E0A4A94C19A4D66D0AE0FC535D69C4953C2E43136AC07D6A5774D59DEF1471B4097146C2124DF83D36678FBD7BEA6E258D826645DD88AC9A7EA5E05FB49F2CB29EA9081323FFB2A00F3915D1F36675BA1C9AAA3B166D9FB2529150D3573E502668E33DFA5BE95AA6C2F1F106D69218839BA590406B4FE4A03C4B16E29E6BC31335234BCA55D34955880B702F08203198EB7BAE381B231FAFE513F24C8BA9E58798F35465C2679DD5BA8B16EEDAFB04E5A807B9BE6EE4B3AD77609D2B9E0985BB23397BBDE08F4D0B21494A3129857E37D13862C1FF77A57AC663C206A92F8358E6C05FDE1A9D68131BC04B76F6865E8DF5C48F9424CD9AB6FEFB3B49BA8D32C923CDB8602C5367AA9ECAE48AEE6A276CF25C", "ED1196222AA470CB4FC8A0B7D2C785EB45D232E06453B77DB76F60E5F7BAA0FAE80467EC8C656FC27FFDE8BFAADD2368B41AFF69460495923942ACF85C09EF01BCED0076960E5CDB1D36061933C1B6037548D27932CDF969FD5A910D5564F3A6BAF896A2A69F40EDA76E813AA261530F686042235A39A76081F58D952662894E6E648BA72098D840235EC4A2B963F8E74B52F2D0088DACA7EDF48115618DBBABC698C04AAAC0632475BEE65BB26A4EAA08F0209B75EB259B826724F580209F8B991808411F823819CC5F42A9FC1F0CEDBDC54C046EB1D1658FFF7252908B09F8C1D82E5F6D605F0B17B25506FAF91D4B3D4EBCB7A705E5BCB2A6FB409ABE4B1B0B47630F1AB0B40A3455181678573F82A7C139F072659D80671961D614D9F7DA72914BD5D6F417EBC152595972FDFAE876176923CF1F2F745A6FC27E134CEBC2D9AD5CC733F619C1B296026B7C4717D2086D91765D83AB76605050B810C542819BBB7CD87EA2305AB4A567B2C500D9913B7C6046F748DEECFE3C3AF829EF97E03799EA50F7C9EB38990F0D466498C091C3ABAA18453B173F0AA3A486DFAFEEE68E7998EA30E5C1349F2A54AE753963CEF58332A114F964B83B4E446A44147B11FFC60DA25B5FA705F34725B1388B17E99018236BD646DC714F8B7CD3BF2648063B2D3FB713AB94D82ED81D571D5BB4D3E5F2F067E2F2C90E8B6857E6A651B8E", "EBE597534C0A6FEE9CE6AD10A80D2DFD160D7DE7A20154F62AFD7C3187D51D09DA39A958432CDCCBD83FCE19131E65A30DE99DB796D93D0944223D960BA233798323D368DDBD407D51B80350976951AE0E50CF409279301939624C741D20D5CDBF4BC3ABC8723E267BE75707024F6398CC6D32A7BCD0989555E0EE49C1A2354D1E961CA9910A5169ADFA71D56745181E0CF13469D8F3C6020637B8118ED8421A680FD4D515DF6B31C39ACFA36B601027AFBC861493D34ACEACFB501DF9A311B7EB9D38D7107E6B5ECBE74FD35CC8BC8319DF9F1948653C94C868DC24AB8D7E650D8F70A3D1D878558AC9BFA50D425604037F3DA323192654F1296C8320AF934AF60DACAD7F9630EA4ED0A635678213F6D09D73A2544C779596990DA42079C23581E22F541E6A3B6D3FA383597A8BDD7CA42930816D74FE8B12F92CBB9303CA5FA12BF5FE954FA7B53E0D88B79BE263B4B55B42A7672F5C4F7E6E2DB4C02AFD6034B7371E01215CED3F73AB8E3419D7447781AE5DEB4F4547C5549E9B0AD59940C162790650344E5ACAB33A187A58E29C9032963F088C044ABE73A855FF1FC93AB8DC258E419777311B7997EA95D32CF1F0140CAB9E6707E73E4FE575E0752816122C39B8D12F34ED6771EAEE192D830797DBE97A0BFD00E39CA382D44F080BB4F8FF6FAAFF2A82744C6E14D3036E00EC2ED5C9D184ECCA300030D7BD77B27DA", "A56990B45E9AA5F9523D563D53E854A47629A4183E85CA1995BB374EE5601BDBCE5C7407999D28FF0F1B3EC7A463D3C941C57B7EB71E6262DA3A7136627814EA6D28C8D16E91680B0D961AAFACE2CA4099F986CD45A2AB387E39497B13678447480514B4008F0FA3B95AD7D2B4751C680F0C7D3651F9621E1355CEC76F10468ED33DE4C7D7D68B786B7F0006C604BCF893739FFE6AE56AD5AAD07D5BE76DE1CD581B10EDFEC9DF65AF925C4C1289837BE1854A62FCCEECCC4E2AB47B4864C467F5E4C276047501EABE444E051DEA933863E0FCB2356CC0C3817BA59B2E0AD78BBFEF4C3E4C35343331CD81C7F4C428B0418DFA4D6FF655BC50AF49C9A5E8A67BC265A3F30800B93E42C0E66F117E6C59C85BA5E273234EC7212C7B7AC3D87FC0E0EC5FBAE6654461F24BBDF9A063FD0E3F98741C5622ACC8BC008EB0E3F3D57680F12E52FB94CD957EFDD49BF512D9131757161A73DD9650E3561FB31509A908D3EA8DBD1C3AA95AC32E6960E0D17A218A25784332A88E85303DEBE117BEFEDF46882995AEBD704AEAE032668AEC6B8E5BD28D3F110C9F8C1DCA8FACFDC1188A073037796555DC4FAA26ACB9F51B545D32C224424BAC3DAB20D3C08D784E9FEDB47547C25671C269A62163742B55AB4CF9406D2C5047F92C76356F0B90221E019B31890C0B8FCFD04E6B5D06114B967D1358797238D5B14D824C8F0BD7B8BD0", "D85AAA53F2DE2946EB0CA09DEBB6CB61D91D27C8907B90C89E20C01F681D33BF0DC70B6C79F19E4DB64793505A0E055C33D1E07B7F5AE09F7EFF0C8CEBE80C84373804A48A945CA406D3A1B17CA787DA265C1D8FC735CB098C1AB37A0452F1A287B8E19E3A57E59EF8F2E6CCE2F0AA7772955977982B1F6880AE8717520753636591BA36E351310E98ABB77E26E2CA5BF267935FC38DE173CA20C3A964B56924A5E82A9E36D005EDE6680D543C021C7A9F53DB69BFA3201880B7797E90D31011AFA17BAE836505F5B337C23A07D6AF167258C314C3001291DD9FC565F6B7FB74D99C1B42B496422B3D3E1A564769C2306E40264641EC14724301795B4D54F5FF8D6C4AB3645B56C1D0FFE9B977FC5017E2A53392E7458BAA308C343AAFF5B46B808BDA1FE5C284299A9EEEFC755132F9D3B475E2FCD6BA84917C601B5E8340B5A68148A33563E40AC5A1E49BD8D5FA77BEB6B99E6F4F68A10ECA112475531E7C1942AB9504B8F76EA7BCCAE4A19EF859FD6B6753F07BDD9A19421A2A0B8F27643B2311FAD7978F4366C41BD9F609486FC6EC7CE833A00D7A48AD816412BD201F40C93D136ABB8E329DDB816D1F59A1F3124D6314C64C9B640E4D5BB201CDB4490A65C73228E78055AD6632D81709AA443EBF29A4607A504DD5CBC0D271FE595677B8E6A5E29E23D171D50B878D0D3F9416657E3997D077677B87399A6D1936E", "A0E629454DE594F7693888C9ADB907F83EC6818D6FC0019B70077BF1B0E3C2CB16A263BE145EA8129FED6BD98F3D9120BAD28379EC8E36DEC69C59B37BD6C2B65D172C70C69C23E29A6143121AEB9E6A9AB46C3DBC3979BC876F4357F6BAA5A0CB33C3AFF1654FE547D5D760E8CE095A9B324E15CEC1596BB7E0D56433D8908EA69925A5CCDCF01702811AD1103F237D36C5F12A3CD938A61EF76A3387340499E4EF1855F892F57AC39AB419F1A397CD43FE7F4C5E609ADF3A2A8E401FFAC870985826CA0DE211996A3549A203B798A5162E98FFC8B5CC2CFA68D618AE80D399D8DFE0FE4AA81ED9B586EA89F646D5C0AA8B107506C7F86879419D0F717E8F70C5A9DC2C3F122CB52F3B691087EF5971C27086512F1890494ABA38B1619969F8846B8876B95C56142F5B171502FA44ACD0299E82FC94EBCD4CDDBE1F5DF978871128F79C1758BB512D5C3BDE59A89786CF4E4716F0515F45A1CA31B06B23E4883F99EE0488848EB0A60FA14AABBD41EC5421D0C162590FEFFEBB4DD0300221471DE8DC0C87DB3F1D54DB11744F8A7115DCA0595F6CD99B74A6FB10C0D14E430F8B40E3E7105C89B2C8F12B37A8879AD9BEAD49AFA1BD56569713CCDA3FB634C3011D51A8DCF84437251A7B19EB61FCE5DF6E2278784722BABE384BA5424646FA23F6D10CE23DC5E0D8D512E7C5C094B1627D6285B57EDF38A7DB1BD57B72044", "CD7AAC98501F29507EA4E0183E8A40D2E5117E47BB5D18D01A3732DE4C821DFE86521CBEA7DB29BE1148BD544ECC681689BCD1B41EAF755310B7659342F8EE11CB41550CC30E566E192796B66C1A83C0B28BACCFA6C393043A0A2CB89712BC1CCB174DE58E66896AF39C1CEED1E05B0435F8CF6FD920D100F51584FE24879987399481DBF27DDB6286B6353919E552E669290CE02AB4CD5113D7F484229F379C7332767EC69E4336439B05DE1C1E3563DD303A4F580BFF20A40E49CB0822F715ED0221EBCDB5DBAD751124B1715E82F37488265135B6C8BBCF4F801ECC4D3525FF189493AD4EFF0C042B070C4CA8FB1FDF43D79F06A6E4E3D35D7B07D4B728D5DC54EEDACBBBA1EDDCDC07ADF7DFCFEF835E44DF1FF66DAF2A7BAEBE218AC3B15E183044D6A8A89B3C101B40BED97ED5DF93BBC1B84931D56B8C822A6D058AC74CFA4C85D8B456698E82D5B7574C17B041E5F4BEED09F75012355CBC322B822C63F10C18A8F279E9A0E18E1FEF183D23E13894E31F6D046956FE8A647558228F6D4D6910151EC03937876B6ED7A078D33DAEB3F2239353BB8181E62B286BBC41588DE10F478A5CE5B508F205A41820356767B0A0ED4B8DB9EFE348362E9A90D6C30218B295B338B51C09239D02FC8A1E7DAAAB60AC37F5E67CFC88EEF69567B5C81A03B449F4ED38B9D295A36AA3503173F6F6F66D93CE72D753076040FACDE", "ADDCEDB50E907D20E826E6E8A0D30C20C74B2DF204EA784BAE9F618CAE33A3C937729DF9CB10BA2A4C33E0182A37200C0CC509729D828B8A2A20F283AC4F9306596684EA3FB5492A4C9F2DB459E7531C9F9C0950E7D9E93B3EE5912AE7E39AC8F4EC14B18F24E325003F477E347C5AC1B67CDB11AF3BBBBCD0AC3703024B5767AA67A208254F798684BFD1D3EACD757EEC77254950A146620400DB95E694574F739A991EBA771EBBDFF1056BB39A77DBE0636A032E17141332F951C57C6C90F348F165E3ABDD60D429D5D6BEC7E3E3463806F819EB2D212B3528A5EDE51F235AD100A35E890955F8A1DC51FDCB53EABCA2540997DD054C1F5B29462995B876B44D085904E55E1B838BEF600A992EB49CE078DF75AF3D0F137685AC0D07F0BE1EB87B63A41E74DDE869C8A683BDE60AF5D77FF18F7137495BCEFD0ED28F62F9C3E25D332B5F861D999FCDC0B4851A984A4DBB53401FD40351ADA4335C702BCC8D900C737507B990BDDBE91D201E3A0946DC968D43FD10D04B0B76667FF5B4291C2124B0124C6B710A6D1BCFAEB016B9DEEB0F7A4FE044CA4EA0CCD84B7682617C3A545071EC295B0663B3F577D562DE1D9DD80DE6A1EFD6D5991EB5246F1597B86D0E9A90CF6DB0EB2B8E7BAE9431E567F01AA98502C773742246467ABF911A91A51F6C1B9E0C3233DC1A37D17DB91A5F0F661B0EB5886964456C7818601BD0C" }; const std::string Galileo_E1_C_SECONDARY_CODE = "0011100000001010110110010"; #endif /* GNSS_SDR_GALILEO_E1_H_ */ gnss-sdr-0.0.6/src/core/system_parameters/galileo_ephemeris.cc0000644000175000017500000002414512576764164024063 0ustar carlescarles/*! * \file galileo_ephemeris.cc * \brief Interface of a Galileo EPHEMERIS storage and orbital model functions * \author Javier Arribas, 2013. jarribas(at)cttc.es * \author Mara Branzanti 2013. mara.branzanti(at)gmail.com * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "galileo_ephemeris.h" Galileo_Ephemeris::Galileo_Ephemeris() { flag_all_ephemeris = false; IOD_ephemeris = 0; IOD_nav_1 = 0; SV_ID_PRN_4 = 0; M0_1 = 0; // Mean anomaly at reference time [semi-circles] delta_n_3 = 0; // Mean motion difference from computed value [semi-circles/sec] e_1 = 0; // Eccentricity A_1 = 0; // Square root of the semi-major axis [metres^1/2] OMEGA_0_2 = 0; // Longitude of ascending node of orbital plane at weekly epoch [semi-circles] i_0_2 = 0; // Inclination angle at reference time [semi-circles] omega_2 = 0; // Argument of perigee [semi-circles] OMEGA_dot_3 = 0; // Rate of right ascension [semi-circles/sec] iDot_2 = 0; // Rate of inclination angle [semi-circles/sec] C_uc_3 = 0; // Amplitude of the cosine harmonic correction term to the argument of latitude [radians] C_us_3 = 0; // Amplitude of the sine harmonic correction term to the argument of latitude [radians] C_rc_3 = 0; // Amplitude of the cosine harmonic correction term to the orbit radius [meters] C_rs_3 = 0; // Amplitude of the sine harmonic correction term to the orbit radius [meters] C_ic_4 = 0; // Amplitude of the cosine harmonic correction term to the angle of inclination [radians] C_is_4 = 0; // Amplitude of the sine harmonic correction term to the angle of inclination [radians] t0e_1 = 0; // Ephemeris reference time [s] /*Clock correction parameters*/ t0c_4 = 0; // Clock correction data reference Time of Week [sec] af0_4 = 0; // SV clock bias correction coefficient [s] af1_4 = 0; // SV clock drift correction coefficient [s/s] af2_4 = 0; // SV clock drift rate correction coefficient [s/s^2] /*GST*/ WN_5 = 0; TOW_5 = 0; // SV status SISA_3 = 0; E5b_HS_5 = 0; E1B_HS_5 = 0; E5b_DVS_5 = 0; E1B_DVS_5 = 0; BGD_E1E5a_5 = 0; // E1-E5a Broadcast Group Delay [s] BGD_E1E5b_5 = 0; // E1-E5b Broadcast Group Delay [s] Galileo_satClkDrift = 0.0; Galileo_dtr = 0.0; // satellite positions d_satpos_X = 0.0; d_satpos_Y = 0.0; d_satpos_Z = 0.0; // Satellite velocity d_satvel_X = 0.0; d_satvel_Y = 0.0; d_satvel_Z = 0.0; i_satellite_PRN = 0; } double Galileo_Ephemeris::Galileo_System_Time(double WN, double TOW) { /* GALIELO SYSTEM TIME, ICD 5.1.2 * input parameter: * WN: The Week Number is an integer counter that gives the sequential week number from the origin of the Galileo time. It covers 4096 weeks (about 78 years). Then the counter is reset to zero to cover additional period modulo 4096 TOW: The Time of Week is defined as the number of seconds that have occurred since the transition from the previous week. The TOW covers an entire week from 0 to 604799 seconds and is reset to zero at the end of each week WN and TOW are received in page 5 output: t: it is the transmitted time in Galileo System Time (expressed in seconds) The GST start epoch shall be 00:00 UT on Sunday 22nd August 1999 (midnight between 21st and 22nd August). At the start epoch, GST shall be ahead of UTC by thirteen (13) leap seconds. Since the next leap second was inserted at 01.01.2006, this implies that as of 01.01.2006 GST is ahead of UTC by fourteen (14) leap seconds. The epoch denoted in the navigation messages by TOW and WN will be measured relative to the leading edge of the first chip of the first code sequence of the first page symbol. The transmission timing of the navigation message provided through the TOW is synchronised to each satellite’s version of Galileo System Time (GST). * */ double t = 0; double sec_in_day = 86400; double day_in_week = 7; t = WN*sec_in_day*day_in_week + TOW; // second from the origin of the Galileo time return t; } double Galileo_Ephemeris::sv_clock_drift(double transmitTime) { // Satellite Time Correction Algorithm, ICD 5.1.4 double dt; dt = transmitTime - t0c_4; Galileo_satClkDrift = af0_4 + af1_4 * dt + af2_4 * (dt * dt) + sv_clock_relativistic_term(transmitTime); //+Galileo_dtr; return Galileo_satClkDrift; } // compute the relativistic correction term double Galileo_Ephemeris::sv_clock_relativistic_term(double transmitTime) // Satellite Time Correction Algorithm, ICD 5.1.4 { double tk; double a; double n; double n0; double E; double E_old; double dE; double M; // Restore semi-major axis a = A_1*A_1; n0 = sqrt(GALILEO_GM / (a*a*a)); // Time from ephemeris reference epoch //t = WN_5*86400*7 + TOW_5; //WN_5*86400*7 are the second from the origin of the Galileo time tk = transmitTime - t0e_1; // Corrected mean motion n = n0 + delta_n_3; // Mean anomaly M = M0_1 + n * tk; // Reduce mean anomaly to between 0 and 2pi M = fmod((M + 2*GALILEO_PI), (2*GALILEO_PI)); // Initial guess of eccentric anomaly E = M; // --- Iteratively compute eccentric anomaly ---------------------------- for (int ii = 1; ii < 20; ii++) { E_old = E; E = M + e_1 * sin(E); dE = fmod(E - E_old, 2*GALILEO_PI); if (fabs(dE) < 1e-12) { //Necessary precision is reached, exit from the loop break; } } // Compute relativistic correction term Galileo_dtr = GALILEO_F * e_1* A_1 * sin(E); return Galileo_dtr; } void Galileo_Ephemeris::satellitePosition(double transmitTime) { // when this function in used, the input must be the transmitted time (t) in second computed by Galileo_System_Time (above function) double tk; // Time from ephemeris reference epoch double a; // Semi-major axis double n; // Corrected mean motion double n0; // Computed mean motion double M; // Mean anomaly double E; // Eccentric Anomaly (to be solved by iteration) double E_old; double dE; double nu; // True anomaly double phi; // Argument of Latitude double u; // Correct argument of latitude double r; // Correct radius double i; double Omega; // Find Galileo satellite's position ---------------------------------------------- // Restore semi-major axis a = A_1*A_1; // Computed mean motion n0 = sqrt(GALILEO_GM / (a*a*a)); // Time from ephemeris reference epoch tk = transmitTime - t0e_1; // Corrected mean motion n = n0 + delta_n_3; // Mean anomaly M = M0_1 + n * tk; // Reduce mean anomaly to between 0 and 2pi M = fmod((M + 2* GALILEO_PI), (2* GALILEO_PI)); // Initial guess of eccentric anomaly E = M; // --- Iteratively compute eccentric anomaly ---------------------------- for (int ii = 1; ii<20; ii++) { E_old = E; E = M + e_1 * sin(E); dE = fmod(E - E_old, 2*GALILEO_PI); if (fabs(dE) < 1e-12) { //Necessary precision is reached, exit from the loop break; } } // Compute the true anomaly double tmp_Y = sqrt(1.0 - e_1 * e_1) * sin(E); double tmp_X = cos(E) - e_1; nu = atan2(tmp_Y, tmp_X); // Compute angle phi (argument of Latitude) phi = nu + omega_2; // Reduce phi to between 0 and 2*pi rad phi = fmod((phi), (2*GALILEO_PI)); // Correct argument of latitude u = phi + C_uc_3 * cos(2*phi) + C_us_3 * sin(2*phi); // Correct radius r = a * (1 - e_1*cos(E)) + C_rc_3 * cos(2*phi) + C_rs_3 * sin(2*phi); // Correct inclination i = i_0_2 + iDot_2 * tk + C_ic_4 * cos(2*phi) + C_is_4 * sin(2*phi); // Compute the angle between the ascending node and the Greenwich meridian Omega = OMEGA_0_2 + (OMEGA_dot_3 - GALILEO_OMEGA_EARTH_DOT)*tk - GALILEO_OMEGA_EARTH_DOT * t0e_1; // Reduce to between 0 and 2*pi rad Omega = fmod((Omega + 2*GALILEO_PI), (2*GALILEO_PI)); // --- Compute satellite coordinates in Earth-fixed coordinates d_satpos_X = cos(u) * r * cos(Omega) - sin(u) * r * cos(i) * sin(Omega); d_satpos_Y = cos(u) * r * sin(Omega) + sin(u) * r * cos(i) * cos(Omega); // ********NOTE: in GALILEO ICD this expression is not correct because it has minus (- sin(u) * r * cos(i) * cos(Omega)) instead of plus d_satpos_Z = sin(u) * r * sin(i); // Satellite's velocity. Can be useful for Vector Tracking loops double Omega_dot = OMEGA_dot_3 - GALILEO_OMEGA_EARTH_DOT; d_satvel_X = - Omega_dot * (cos(u) * r + sin(u) * r * cos(i)) + d_satpos_X * cos(Omega) - d_satpos_Y * cos(i) * sin(Omega); d_satvel_Y = Omega_dot * (cos(u) * r * cos(Omega) - sin(u) * r * cos(i) * sin(Omega)) + d_satpos_X * sin(Omega) + d_satpos_Y * cos(i) * cos(Omega); d_satvel_Z = d_satpos_Y * sin(i); } gnss-sdr-0.0.6/src/core/system_parameters/sbas_telemetry_data.h0000644000175000017500000005274312576764164024270 0ustar carlescarles/*! * \file sbas_telemetry_data.h * \brief Interface of the SBAS telemetry parser based on SBAS RTKLIB functions * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_SBAS_TELEMETRY_DATA_H_ #define GNSS_SDR_SBAS_TELEMETRY_DATA_H_ #include #include #include #include #include #include #include #include "boost/assign.hpp" #include "concurrent_queue.h" #include "sbas_time.h" class Sbas_Ionosphere_Correction; class Sbas_Satellite_Correction; struct Fast_Correction; struct Long_Term_Correction; class Sbas_Ephemeris; /*! * \brief Represents a raw SBAS message of 250cbits + 6 bits padding * (8b preamble + 6b message type + 212b data + 24b CRC + 6b zero padding) */ class Sbas_Raw_Msg { public: Sbas_Raw_Msg(){ rx_time = Sbas_Time(0); i_prn = -1; }; Sbas_Raw_Msg(double sample_stamp, int prn, const std::vector msg) : rx_time(sample_stamp), i_prn(prn), d_msg(msg) {} double get_sample_stamp() { return rx_time.get_time_stamp(); } //!< Time of reception sample stamp (first sample of preample) void relate(Sbas_Time_Relation time_relation) { rx_time.relate(time_relation); } Sbas_Time get_rx_time_obj() const { return rx_time; } int get_prn() const { return i_prn; } std::vector get_msg() const { return d_msg; } int get_preamble() { return d_msg[0]; } int get_msg_type() const { return d_msg[1] >> 2; } int get_crc() { unsigned char crc_last_byte = (d_msg[30] << 2) && (d_msg[31] >> 6); unsigned char crc_middle_byte = (d_msg[29] << 2) && (d_msg[30] >> 6); unsigned char crc_first_byte = (d_msg[28] << 2) && (d_msg[29] >> 6); return ((unsigned int)(crc_first_byte) << 16) && ((unsigned int)(crc_middle_byte) << 8) && crc_last_byte; } private: Sbas_Time rx_time; int i_prn; /* SBAS satellite PRN number */ std::vector d_msg; /* SBAS message (226 bit) padded by 0 */ }; /* * \brief Holds an updated set of the telemetry data received from SBAS */ class Sbas_Telemetry_Data { public: int update(Sbas_Raw_Msg sbas_raw_msg); void set_raw_msg_queue(concurrent_queue *raw_msg_queue); void set_iono_queue(concurrent_queue *iono_queue); void set_sat_corr_queue(concurrent_queue *sat_corr_queue); void set_ephemeris_queue(concurrent_queue *ephemeris_queue); /*! * Default constructor */ Sbas_Telemetry_Data(); /*! * Default deconstructor */ ~Sbas_Telemetry_Data(); private: std::map emitted_fast_corrections; std::map emitted_long_term_corrections; Sbas_Time_Relation mt12_time_ref; concurrent_queue *raw_msg_queue; concurrent_queue *iono_queue; concurrent_queue *sat_corr_queue; concurrent_queue *ephemeris_queue; int decode_mt12(Sbas_Raw_Msg sbas_raw_msg); void updated_sbas_ephemeris(Sbas_Raw_Msg msg); void received_iono_correction(); void updated_satellite_corrections(); /////// rtklib.h #define SYS_NONE 0x00 /* navigation system: none */ #define SYS_GPS 0x01 /* navigation system: GPS */ #define SYS_SBS 0x02 /* navigation system: SBAS */ #define SYS_GLO 0x04 /* navigation system: GLONASS */ #define SYS_GAL 0x08 /* navigation system: Galileo */ #define SYS_QZS 0x10 /* navigation system: QZSS */ #define SYS_CMP 0x20 /* navigation system: BeiDou */ #define SYS_ALL 0xFF /* navigation system: all */ #define TSYS_GPS 0 /* time system: GPS time */ #define TSYS_UTC 1 /* time system: UTC */ #define TSYS_GLO 2 /* time system: GLONASS time */ #define TSYS_GAL 3 /* time system: Galileo time */ #define TSYS_QZS 4 /* time system: QZSS time */ #define TSYS_CMP 5 /* time system: BeiDou time */ #ifndef NFREQ #define NFREQ 3 /* number of carrier frequencies */ #endif #define NFREQGLO 2 /* number of carrier frequencies of GLONASS */ #ifndef NEXOBS #define NEXOBS 0 /* number of extended obs codes */ #endif #define MINPRNGPS 1 /* min satellite PRN number of GPS */ #define MAXPRNGPS 32 /* max satellite PRN number of GPS */ #define NSATGPS (MAXPRNGPS-MINPRNGPS+1) /* number of GPS satellites */ #define NSYSGPS 1 #ifdef ENAGLO #define MINPRNGLO 1 /* min satellite slot number of GLONASS */ #define MAXPRNGLO 24 /* max satellite slot number of GLONASS */ #define NSATGLO (MAXPRNGLO-MINPRNGLO+1) /* number of GLONASS satellites */ #define NSYSGLO 1 #else #define MINPRNGLO 0 #define MAXPRNGLO 0 #define NSATGLO 0 #define NSYSGLO 0 #endif #ifdef ENAGAL #define MINPRNGAL 1 /* min satellite PRN number of Galileo */ #define MAXPRNGAL 27 /* max satellite PRN number of Galileo */ #define NSATGAL (MAXPRNGAL-MINPRNGAL+1) /* number of Galileo satellites */ #define NSYSGAL 1 #else #define MINPRNGAL 0 #define MAXPRNGAL 0 #define NSATGAL 0 #define NSYSGAL 0 #endif #ifdef ENAQZS #define MINPRNQZS 193 /* min satellite PRN number of QZSS */ #define MAXPRNQZS 195 /* max satellite PRN number of QZSS */ #define MINPRNQZS_S 183 /* min satellite PRN number of QZSS SAIF */ #define MAXPRNQZS_S 185 /* max satellite PRN number of QZSS SAIF */ #define NSATQZS (MAXPRNQZS-MINPRNQZS+1) /* number of QZSS satellites */ #define NSYSQZS 1 #else #define MINPRNQZS 0 #define MAXPRNQZS 0 #define NSATQZS 0 #define NSYSQZS 0 #endif #ifdef ENACMP #define MINPRNCMP 1 /* min satellite sat number of BeiDou */ #define MAXPRNCMP 35 /* max satellite sat number of BeiDou */ #define NSATCMP (MAXPRNCMP-MINPRNCMP+1) /* number of BeiDou satellites */ #define NSYSCMP 1 #else #define MINPRNCMP 0 #define MAXPRNCMP 0 #define NSATCMP 0 #define NSYSCMP 0 #endif #define NSYS (NSYSGPS+NSYSGLO+NSYSGAL+NSYSQZS+NSYSCMP) /* number of systems */ #define MINPRNSBS 120 /* min satellite PRN number of SBAS */ #define MAXPRNSBS 142 /* max satellite PRN number of SBAS */ #define NSATSBS (MAXPRNSBS-MINPRNSBS+1) /* number of SBAS satellites */ #define MAXSAT (NSATGPS+NSATGLO+NSATGAL+NSATQZS+NSATCMP+NSATSBS) /* max satellite number (1 to MAXSAT) */ #ifndef MAXOBS #define MAXOBS 64 /* max number of obs in an epoch */ #endif #define MAXRCV 64 /* max receiver number (1 to MAXRCV) */ #define MAXOBSTYPE 64 /* max number of obs type in RINEX */ #define DTTOL 0.005 /* tolerance of time difference (s) */ #if 0 #define MAXDTOE 10800.0 /* max time difference to ephem Toe (s) for GPS */ #else #define MAXDTOE 7200.0 /* max time difference to ephem Toe (s) for GPS */ #endif #define MAXDTOE_GLO 1800.0 /* max time difference to GLONASS Toe (s) */ #define MAXDTOE_SBS 360.0 /* max time difference to SBAS Toe (s) */ #define MAXDTOE_S 86400.0 /* max time difference to ephem toe (s) for other */ #define MAXGDOP 300.0 /* max GDOP */ //#define MAXSBSAGEF 30.0 /* max age of SBAS fast correction (s) */ //#define MAXSBSAGEL 1800.0 /* max age of SBAS long term corr (s) */ //#define MAXSBSURA 8 /* max URA of SBAS satellite */ #define MAXBAND 10 /* max SBAS band of IGP */ #define MAXNIGP 201 /* max number of IGP in SBAS band */ //#define MAXNGEO 4 /* max number of GEO satellites */ #define P2_11 4.882812500000000E-04 /* 2^-11 */ #define P2_31 4.656612873077393E-10 /* 2^-31 */ #define P2_39 1.818989403545856E-12 /* 2^-39 */ /* type definitions ----------------------------------------------------------*/ typedef struct { /* time struct */ time_t time; /* time (s) expressed by standard time_t */ double sec; /* fraction of second under 1 s */ } gtime_t; typedef struct { /* SBAS message type */ //int week,tow; /* receiption time */ double sample_stamp; int prn; /* SBAS satellite PRN number */ unsigned char msg[29]; /* SBAS message (226bit) padded by 0 */ } sbsmsg_t; typedef struct { /* SBAS messages type */ int n,nmax; /* number of SBAS messages/allocated */ sbsmsg_t *msgs; /* SBAS messages */ } sbs_t; typedef struct { /* SBAS fast correction type */ //gtime_t t0; /* time of applicability (TOF) */ double t0; bool valid; double prc; /* pseudorange correction (PRC) (m) */ double rrc; /* range-rate correction (RRC) (m/s) */ double dt; /* range-rate correction delta-time (s) */ int iodf; /* IODF (issue of date fast corr) */ short udre; /* UDRE+1 */ short ai; /* degradation factor indicator */ } sbsfcorr_t; typedef struct { /* SBAS long term satellite error correction type */ //gtime_t t0; /* correction time */ double trx; /* time when message was received */ int tapp; /* time of applicability (when vel=1 sent as t0) */ int vel; /* use velocity if vel=1 */ bool valid; int iode; /* IODE (issue of date ephemeris) */ double dpos[3]; /* delta position (m) (ecef) */ double dvel[3]; /* delta velocity (m/s) (ecef) */ double daf0,daf1; /* delta clock-offset/drift (s,s/s) */ } sbslcorr_t; typedef struct { /* SBAS satellite correction type */ int sat; /* satellite number */ sbsfcorr_t fcorr; /* fast correction */ sbslcorr_t lcorr; /* long term correction */ } sbssatp_t; typedef struct { /* SBAS satellite corrections type */ int iodp; /* IODP (issue of date mask) */ int nsat; /* number of satellites */ int tlat; /* system latency (s) */ sbssatp_t sat[MAXSAT]; /* satellite correction */ } sbssat_t; typedef struct { /* SBAS ionospheric correction type */ //gtime_t t0; /* correction time */ double t0; bool valid; short lat,lon; /* latitude/longitude (deg) */ short give; /* GIVI+1 */ float delay; /* vertical delay estimate (m) */ } sbsigp_t; typedef struct { /* IGP band type */ short x; /* longitude/latitude (deg) */ const short *y; /* latitudes/longitudes (deg) */ unsigned char bits; /* IGP mask start bit */ unsigned char bite; /* IGP mask end bit */ } sbsigpband_t; typedef struct { /* SBAS ionospheric corrections type */ int iodi; /* IODI (issue of date ionos corr) */ int nigp; /* number of igps */ sbsigp_t igp[MAXNIGP]; /* ionospheric correction */ } sbsion_t; /* * indicators */ typedef struct { /* SBAS ephemeris type */ int sat = 0; /* satellite number */ //gtime_t t0; /* reference epoch time (GPST) */ int t0 = 0; //gtime_t tof; /* time of message frame (GPST) */ double tof = 0; int sva = 0; /* SV accuracy (URA index) */ int svh = 0; /* SV health (0:ok) */ double pos[3] = {0, 0, 0}; /* satellite position (m) (ecef) */ double vel[3] = {0, 0, 0}; /* satellite velocity (m/s) (ecef) */ double acc[3] = {0, 0, 0}; /* satellite acceleration (m/s^2) (ecef) */ double af0 = 0; double af1 = 0; /* satellite clock-offset/drift (s,s/s) */ } seph_t; typedef struct { /* navigation data type */ //int n,nmax; /* number of broadcast ephemeris */ //int ng,ngmax; /* number of glonass ephemeris */ //int ns,nsmax; /* number of sbas ephemeris */ //int ne,nemax; /* number of precise ephemeris */ //int nc,ncmax; /* number of precise clock */ //int na,namax; /* number of almanac data */ //int nt,ntmax; /* number of tec grid data */ //int nn,nnmax; /* number of stec grid data */ //eph_t *eph; /* GPS/QZS/GAL ephemeris */ //geph_t *geph; /* GLONASS ephemeris */ seph_t seph[2*NSATSBS]; /* SBAS ephemeris */ // peph_t *peph; /* precise ephemeris */ // pclk_t *pclk; /* precise clock */ // alm_t *alm; /* almanac data */ // tec_t *tec; /* tec grid data */ // stec_t *stec; /* stec grid data */ // erp_t erp; /* earth rotation parameters */ //double utc_gps[4]; /* GPS delta-UTC parameters {A0,A1,T,W} */ //double utc_glo[4]; /* GLONASS UTC GPS time parameters */ //double utc_gal[4]; /* Galileo UTC GPS time parameters */ //double utc_qzs[4]; /* QZS UTC GPS time parameters */ //double utc_cmp[4]; /* BeiDou UTC parameters */ //double utc_sbs[4]; /* SBAS UTC parameters */ //double ion_gps[8]; /* GPS iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ //double ion_gal[4]; /* Galileo iono model parameters {ai0,ai1,ai2,0} */ //double ion_qzs[8]; /* QZSS iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ //double ion_cmp[8]; /* BeiDou iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ //int leaps; /* leap seconds (s) */ //double lam[MAXSAT][NFREQ]; /* carrier wave lengths (m) */ //double cbias[MAXSAT][3]; /* code bias (0:p1-p2,1:p1-c1,2:p2-c2) (m) */ //double wlbias[MAXSAT]; /* wide-lane bias (cycle) */ //double glo_cpbias[4]; /* glonass code-phase bias {1C,1P,2C,2P} (m) */ //char glo_fcn[MAXPRNGLO+1]; /* glonass frequency channel number + 8 */ // pcv_t pcvs[MAXSAT]; /* satellite antenna pcv */ sbssat_t sbssat; /* SBAS satellite corrections */ sbsion_t sbsion[MAXBAND+1]; /* SBAS ionosphere corrections */ // dgps_t dgps[MAXSAT]; /* DGPS corrections */ // ssr_t ssr[MAXSAT]; /* SSR corrections */ // lexeph_t lexeph[MAXSAT]; /* LEX ephemeris */ // lexion_t lexion; /* LEX ionosphere correction */ } nav_t; //// common static const double gpst0[]; /* gps time reference */ /* debug trace functions -----------------------------------------------------*/ FILE *fp_trace; /* file pointer of trace */ int level_trace; /* level of trace */ unsigned int tick_trace; /* tick time at traceopen (ms) */ void trace(int level, const char *format, ...); /* satellite system+prn/slot number to satellite number ------------------------ * convert satellite system+prn/slot number to satellite number * args : int sys I satellite system (SYS_GPS,SYS_GLO,...) * int prn I satellite prn/slot number * return : satellite number (0:error) *-----------------------------------------------------------------------------*/ int satno(int sys, int prn); /* extract unsigned/signed bits ------------------------------------------------ * extract unsigned/signed bits from byte data * args : unsigned char *buff I byte data * int pos I bit position from start of data (bits) * int len I bit length (bits) (len<=32) * return : extracted unsigned/signed bits *-----------------------------------------------------------------------------*/ unsigned int getbitu(const unsigned char *buff, int pos, int len); int getbits(const unsigned char *buff, int pos, int len); /* convert calendar day/time to time ------------------------------------------- * convert calendar day/time to gtime_t struct * args : double *ep I day/time {year,month,day,hour,min,sec} * return : gtime_t struct * notes : proper in 1970-2037 or 1970-2099 (64bit time_t) *-----------------------------------------------------------------------------*/ gtime_t epoch2time(const double *ep); /* time difference ------------------------------------------------------------- * difference between gtime_t structs * args : gtime_t t1,t2 I gtime_t structs * return : time difference (t1-t2) (s) *-----------------------------------------------------------------------------*/ double timediff(gtime_t t1, gtime_t t2); /* gps time to time ------------------------------------------------------------ * convert week and tow in gps time to gtime_t struct * args : int week I week number in gps time * double sec I time of week in gps time (s) * return : gtime_t struct *-----------------------------------------------------------------------------*/ gtime_t gpst2time(int week, double sec); ////// sbas.c /* sbas igp definition -------------------------------------------------------*/ static const short x1[], x2[], x3[], x4[], x5[], x6[], x7[], x8[]; static const sbsigpband_t igpband1[9][8]; /* band 0-8 */ static const sbsigpband_t igpband2[2][5]; /* band 9-10 */ /* decode type 1: prn masks --------------------------------------------------*/ int decode_sbstype1(const sbsmsg_t *msg, sbssat_t *sbssat); /* decode type 2-5,0: fast corrections ---------------------------------------*/ int decode_sbstype2(const sbsmsg_t *msg, sbssat_t *sbssat); /* decode type 6: integrity info ---------------------------------------------*/ int decode_sbstype6(const sbsmsg_t *msg, sbssat_t *sbssat); /* decode type 7: fast correction degradation factor -------------------------*/ int decode_sbstype7(const sbsmsg_t *msg, sbssat_t *sbssat); /* decode type 9: geo navigation message -------------------------------------*/ int decode_sbstype9(const sbsmsg_t *msg, nav_t *nav); /* decode type 18: ionospheric grid point masks ------------------------------*/ int decode_sbstype18(const sbsmsg_t *msg, sbsion_t *sbsion); /* decode half long term correction (vel code=0) -----------------------------*/ int decode_longcorr0(const sbsmsg_t *msg, int p, sbssat_t *sbssat); /* decode half long term correction (vel code=1) -----------------------------*/ int decode_longcorr1(const sbsmsg_t *msg, int p, sbssat_t *sbssat); /* decode half long term correction ------------------------------------------*/ int decode_longcorrh(const sbsmsg_t *msg, int p, sbssat_t *sbssat); /* decode type 24: mixed fast/long term correction ---------------------------*/ int decode_sbstype24(const sbsmsg_t *msg, sbssat_t *sbssat); /* decode type 25: long term satellite error correction ----------------------*/ int decode_sbstype25(const sbsmsg_t *msg, sbssat_t *sbssat); /* decode type 26: ionospheric deley corrections -----------------------------*/ int decode_sbstype26(const sbsmsg_t *msg, sbsion_t *sbsion); /* update sbas corrections ----------------------------------------------------- * update sbas correction parameters in navigation data with a sbas message * args : sbsmg_t *msg I sbas message * nav_t *nav IO navigation data * return : message type (-1: error or not supported type) * notes : nav->seph must point to seph[NSATSBS*2] (array of seph_t) * seph[prn-MINPRNSBS+1] : sat prn current epehmeris * seph[prn-MINPRNSBS+1+MAXPRNSBS]: sat prn previous epehmeris *-----------------------------------------------------------------------------*/ int sbsupdatecorr(const sbsmsg_t *msg, nav_t *nav); void prn_mask_changed(); bool is_rtklib_sat_correction_valid(int sat); void igp_mask_changed(int band); // RTKLIB SBAS telemetry data representation nav_t d_nav; }; #endif gnss-sdr-0.0.6/src/core/system_parameters/galileo_utc_model.h0000644000175000017500000000377012576764164023720 0ustar carlescarles/*! * \file galileo_utc_model.h * \brief Interface of a Galileo UTC MODEL storage * \author Javier Arribas, 2013. jarribas(at)cttc.es * * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #ifndef GNSS_SDR_GALILEO_UTC_MODEL_H_ #define GNSS_SDR_GALILEO_UTC_MODEL_H_ #include "Galileo_E1.h" /*! * \brief This class is a storage for the GALILEO UTC MODEL data as described in Galileo ICD * http://ec.europa.eu/enterprise/policies/satnav/galileo/files/galileo-os-sis-icd-issue1-revision1_en.pdf * paragraph 5.1.7 */ class Galileo_Utc_Model { public: /*Word type 6: GST-UTC conversion parameters*/ double A0_6; double A1_6; double Delta_tLS_6; double t0t_6; //!< UTC data reference Time of Week [s] double WNot_6; //!< UTC data reference Week number [week] double WN_LSF_6; double DN_6; double Delta_tLSF_6; bool flag_utc_model; //double TOW_6; double GST_to_UTC_time(double t_e, int WN); //!< GST-UTC Conversion Algorithm and Parameters /*! * Default constructor */ Galileo_Utc_Model(); }; #endif gnss-sdr-0.0.6/src/core/system_parameters/sbas_satellite_correction.cc0000644000175000017500000002500112576764164025623 0ustar carlescarles/*! * \file sbas_satellite_correction.cc * \brief Implementation of the SBAS satellite correction set based on SBAS RTKLIB functions * \author Daniel Fehr 2013. daniel.co(at)bluewin.ch * * ------------------------------------------------------------------------- * * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors) * * GNSS-SDR is a software defined Global Navigation * Satellite Systems receiver * * This file is part of GNSS-SDR. * * GNSS-SDR is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GNSS-SDR is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNSS-SDR. If not, see . * * ------------------------------------------------------------------------- */ #include "sbas_satellite_correction.h" #include #include #include #include #include #define EVENT 2 // logs important events which don't occur every update() call #define FLOW 3 // logs the function calls of block processing functions #define CLIGHT 299792458.0 /* speed of light (m/s) */ #define MAXSBSAGEF 30.0 /* max age of SBAS fast correction (s) */ #define MAXSBSAGEL 1800.0 /* max age of SBAS long term corr (s) */ void Sbas_Satellite_Correction::print(std::ostream &out) { out << "<> Sbas satellite corrections for PRN" << d_prn << ":" << std::endl; print_fast_correction(out); print_long_term_correction(out); } void Sbas_Satellite_Correction::print_fast_correction(std::ostream &out) { Fast_Correction fcorr = d_fast_correction; out << "<> Fast PRN" << d_prn << ":"; if(fcorr.d_tof.is_related()) { int gps_week; double gps_sec; fcorr.d_tof.get_gps_time(gps_week, gps_sec); out << " d_t0=(week=" << gps_week << ",sec=" << gps_sec << ")"; } else { out << " d_t0=" << fcorr.d_tof.get_time_stamp(); } out << " d_prc=" << fcorr.d_prc; out << " d_rrc=" << fcorr.d_rrc; out << " d_dt=" << fcorr.d_dt; out << " d_udre=" << fcorr.d_udre; out << " d_ai=" << fcorr.d_ai; out << " d_tlat=" << fcorr.d_tlat; } void Sbas_Satellite_Correction::print_long_term_correction(std::ostream &out) { Long_Term_Correction lcorr = d_long_term_correction; out << "<> Long PRN" << d_prn << ":"; out << " d_trx=" << lcorr.d_trx; out << " i_tapp=" << lcorr.i_tapp; out << " i_vel=" << lcorr.i_vel; double *p = lcorr.d_dpos; out << " d_dpos=(x=" << p[0] << ", y=" << p[1] << ", z=" << p[2] << ")" ; double *v = lcorr.d_dvel; out << " d_dvel=(x=" << v[0] << ", y=" << v[1] << ", z=" << v[2] << ")" ; out << " d_daf0=" << lcorr.d_daf0; out << " d_daf1=" << lcorr.d_daf1; } int Sbas_Satellite_Correction::apply_fast(double sample_stamp, double &pr, double &var) { int result; double prc = 0; // pseudo range correction result = sbsfastcorr(sample_stamp, &prc, &var); pr += prc; VLOG(FLOW) << "<> fast correction applied: sample_stamp=" << sample_stamp << " prc=" << prc << " corr. pr=" << pr; return result; } int Sbas_Satellite_Correction::apply_long_term_sv_pos(double sample_stamp, double sv_pos[], double &var) { int result; double drs[3] = {0}; double ddts = 0; result = sbslongcorr(sample_stamp, drs, &ddts); for (int i = 0; i < 3; i++) sv_pos[i] += drs[i]; VLOG(FLOW) << "<> long term sv pos correction applied: sample_stamp=" << sample_stamp << " drs=(x=" << drs[0] << " y=" << drs[1] << " z=" << drs[2] << ")"; return result; } int Sbas_Satellite_Correction::apply_long_term_sv_clk(double sample_stamp, double &dts, double &var) { int result; double drs[3] = {0}; double ddts = 0; result = sbslongcorr(sample_stamp, drs, &ddts); dts += ddts; VLOG(FLOW) << "<> long term sv clock correction correction applied: sample_stamp=" << sample_stamp << " ddts=" << ddts; return result; } bool Sbas_Satellite_Correction::alarm() { return this->d_fast_correction.d_udre == 16; } /* debug trace function -----------------------------------------------------*/ void Sbas_Satellite_Correction::trace(int level, const char *format, ...) { va_list ap; char str[1000]; va_start(ap,format); vsprintf(str,format,ap); va_end(ap); VLOG(FLOW) << "<> " << std::string(str); } /* variance of fast correction (udre=UDRE+1) ---------------------------------*/ double Sbas_Satellite_Correction::varfcorr(int udre) { const double var[14] = { 0.052, 0.0924, 0.1444, 0.283, 0.4678, 0.8315, 1.2992, 1.8709, 2.5465, 3.326, 5.1968, 20.7870, 230.9661, 2078.695 }; return 0 < udre && udre <= 14 ? var[udre - 1] : 0.0; } /* fast correction degradation -----------------------------------------------*/ double Sbas_Satellite_Correction::degfcorr(int ai) { const double degf[16] = { 0.00000, 0.00005, 0.00009, 0.00012, 0.00015, 0.00020, 0.00030, 0.00045, 0.00060, 0.00090, 0.00150, 0.00210, 0.00270, 0.00330, 0.00460, 0.00580 }; return 0 < ai && ai <= 15 ? degf[ai] : 0.0058; } /* long term correction ------------------------------------------------------*/ int Sbas_Satellite_Correction::sbslongcorr(double time_stamp, double *drs, double *ddts) { double t = 0.0; int i; Long_Term_Correction lcorr = d_long_term_correction; trace(3, "sbslongcorr: prn=%2d", this->d_prn); // if (p->sat!=sat||p->lcorr.t0.time==0) continue; // compute time of applicability if(d_long_term_correction.i_vel == 1) { // time of applicability is the one sent, i.e., tapp // TODO: adapt for vel==1 case // t = tow-d_long_term_correction.i_tapp; // vel=1 -> time of applicability is sent in message, needs to be corrected for rollover which can not be done here, since the absolute gps time is unknown. see IS-GPS-200G pdf page 116 for correction /* t = (int)getbitu(msg->msg, p + 90, 13)*16 - (int)msg->tow%86400; if (t <= -43200) t += 86400; else if (t > 43200) t -= 86400; sbssat->sat[n-1].lcorr.t0 = gpst2time(msg->week, msg->tow + t);*/ } else { // time of applicability is time of reception t = time_stamp - lcorr.d_trx; // should not have any impact if vel==0 since d_dvel and d_daf1 are zero, is only used to check outdating } //t=time_stamp-lcorr.d_t0; if (fabs(t) > MAXSBSAGEL) { trace(2,"sbas long-term correction expired: sat=%2d time_stamp=%5.0f", d_prn, time_stamp); return 0; } // sv position correction for (i=0; i<3; i++) drs[i] = lcorr.d_dpos[i] + lcorr.d_dvel[i]*t; // sv clock correction correction *ddts = lcorr.d_daf0 + lcorr.d_daf1*t; trace(5, "sbslongcorr: sat=%2d drs=%7.2f%7.2f%7.2f ddts=%7.2f", d_prn, drs[0], drs[1], drs[2], *ddts * CLIGHT); return 1; /* if sbas satellite without correction, no correction applied */ //if (satsys(sat,NULL)==SYS_SBS) return 1; //trace(2,"no sbas long-term correction: %s sat=%2d\n",time_str(time,0),sat); //return 0; } /* fast correction -----------------------------------------------------------*/ int Sbas_Satellite_Correction::sbsfastcorr(double time_stamp, double *prc, double *var) #define RRCENA { double t; Fast_Correction fcorr = d_fast_correction; trace(3, "sbsfastcorr: sat=%2d", this->d_prn); //if (p->fcorr.t0.time==0) break; // time==0is only true if t0 hasn't been initialised -> it checks if the correction is valid t = (time_stamp - fcorr.d_tof.get_time_stamp()) + fcorr.d_tlat; // delta t between now and tof /* expire age of correction? */ if (fabs(t) > MAXSBSAGEF) { trace(2, "no sbas fast correction (expired): time_stamp=%f prn=%2d", time_stamp, d_prn); return 0; } /* UDRE==14 (not monitored)? */ else if(fcorr.d_udre == 15) { trace(2,"no sbas fast correction (not monitored): time_stamp=%f prn=%2d", time_stamp, d_prn); return 0; } else if(fcorr.d_udre == 16) { trace(2,"SV is marked as unhealthy: time_stamp=%f prn=%2d", time_stamp, d_prn); return 0; } *prc = fcorr.d_prc; #ifdef RRCENA if (fcorr.d_ai > 0 && fabs(t) <= 8.0*fcorr.d_dt) { *prc += fcorr.d_rrc*t; } #endif *var = varfcorr(fcorr.d_udre) + degfcorr(fcorr.d_ai) * t * t / 2.0; trace(5, "sbsfastcorr: sat=%3d prc=%7.2f sig=%7.2f t=%5.0f", d_prn, *prc, sqrt(*var), t); return 1; } /* sbas satellite ephemeris and clock correction ------------------------------- * correct satellite position and clock bias with sbas satellite corrections * args : long time_stamp I reception time stamp * double *rs IO sat position and corrected {x,y,z} (ecef) (m) * double *dts IO sat clock bias and corrected (s) * double *var O sat position and clock variance (m^2) * return : status (1:ok,0:no correction) * notes : before calling the function, sbas satellite correction parameters * in navigation data (nav->sbssat) must be set by callig * sbsupdatecorr(). * satellite clock correction include long-term correction and fast * correction. * sbas clock correction is usually based on L1C/A code. TGD or DCB has * to be considered for other codes *-----------------------------------------------------------------------------*/ int Sbas_Satellite_Correction::sbssatcorr(double time_stamp, double *rs, double *dts, double *var) { double drs[3] = {0}, dclk = 0.0, prc = 0.0; int i; trace(3,"sbssatcorr : sat=%2d",d_prn); /* sbas long term corrections */ if (!sbslongcorr(time_stamp, drs, &dclk)) { return 0; } /* sbas fast corrections */ if (!sbsfastcorr(time_stamp, &prc, var)) { return 0; } for (i = 0; i < 3; i++) rs[i] += drs[i]; dts[0] += dclk + prc/CLIGHT; trace(5, "sbssatcorr: sat=%2d drs=%6.3f %6.3f %6.3f dclk=%.3f %.3f var=%.3f", d_prn, drs[0], drs[1], drs[2], dclk,prc/CLIGHT, *var); return 1; }
  • # DNN+pXo^~m^{5>aN†7_$T;:)83G55#f1, hcz0HA^N.FdֵlZ -bmANSXՐY33&NM1 d͊b]"1*#P2.o3D#&ɂdQY躌:ڽ:B>N8kK.3n8nFNWgQg/9\NRSܨͪQ\ܓ'9s2xPY\.g&PO$%3# Dc,[hD'`6oEREjk###:LzF&I$8vXz H$JYRp%9:|0nh$i RRpXb,2hjlW>xz|L!>|mO>RU]ad-.9C6L!pxRihhČJL$aՊT˰ð<( C:VZcoi#௣Eٻ@^-gƃKܻO9$ˆԅlYE wBT iU#ፅdS)s DQ4ն2{_RSGd}(-Y3IE'nǣX(نæപHH!L@([ bN~:lԟv1DA4jG[Ylf겴駟t:cҤI1nnj]r%13dba޼y 0'|/lhhh<@s@ ]:X,̜9~O>3f 1M?~;4͊FaI!g4h(L[h~_ EU$݉j}{2`v;d禰f ƏZFyظiI^^!{*wT6d2҉S[[ ⱧѳW `trx<466NJBd?h_Z[f,VK/` bb\.t]GQUl6+"E"457v# H$ aIncx}Eݻ 4˶Y~={vaQy4T-MؕPh\t4FۈaD=;Qf,l3i@yBt'yRVvIM2 *aQAdEŒȱxh+I14 l&NJ"@vN b{o2̏JzBf.ŅT Avp2t! Ea61B)lذܬl INubZQUL''#?@ښd$A]]~l' 0(cHImMRXj[䜳Ϥwa3g¥_b :QexHMMg(쁢(Ģ1Z9qx[WC,tbZPUUchzf 5X ->nUiўtF۫HS!ʎώ21=z a#S D|ېU%5idžysM*ǐ% E6`bL<6f`*V, dE4!-]"K\ֶNnwJIdLTґPф05iRw|ZlvSѬv0bEuY,?׋ddd_S'%bjkf-a'm&*vbuL2_իW3j(>?^m[r܉'i QYYICCcǏ#aמlX)S&؄aaЄaLII,;w"- C$NJt?`4t5R@0KP@;XߜF,Gik3هu;g}'~+u}mT?x+g D="LŶ&jGEkߧIv%2e&ϊʊDU>2 B44>AFz 6FLa2w i鹌^LIq>׳lJXj1aoգ, ‚ˑASc= p:454`123i Y"H476ҳg>U =~zMHr8$ɤ5DWqepZ<"k- Bry yn{x{Yc׎ BTURc(B(1\=6f8F Yf2 s3Qijj(*:@`|!Q2r "D&cFcH~]Zl\vW_~elPG3)0;)5իصl ɱCRP,4lJ,p INC`JXl26J'VjvО@MFxR41h8J4.x୻ʥ/I$E䀄BpرDv 2(**f}_b!95l6tҷNrYWFAHx N7G$+;{5]&TX{G/b(BRd}[-6ҌX`[&ύN0B%D8A7bX- i`* 8?MX-2Rm_0F #=*S G"dee (Pq:X-vm yy[H,L=A2Pd MSi6qgƍqŋ1pzg_TIg c Uk'5> OYq9Hbtpp% ]a6v$lf->K`KUfzLf`wp8ݙ8!4M ~o mIvVb8ӧ ZL^N:%E,^籣bP#ɒKh61ppoM/@ԅ( nkafQY{{<9K)1zt Y C[ 7ղ9EӊâbT)[! jmSpYcm:$å"lYd)dLYAQd0"(wzXh$Չe2rR[ 7ݏaBA3$4S4F$ܜDOI)B&:DIkmHr<,K 5H#Av<{u^G{r܉,3?+K@qiIg!y}$P&حL9Hd)a$3|$sSӌj2Hʿ_7b(F Ѓh! Dl"Yܯ7;L 翽ye:p2 HNvXzR $T$G&ώ@80 X,H$YB``w9QTHuzt0b@RShi2ibz=j",&PY:z Mdfe jE  ,+!dŊMӷo-Z«iXϿ\_sPI(w>wsq+,dbQ$+(Fʠ"A?S'QCmg^5Yw(*̦gQvJNVN7N`يZj\J1;cѨCV(%ʲy5`b(f=tnL jG)e7I2&#ǔޠIXmZ%VHW( ]7:55XjH$)EAA 5}AٽgH8bh&ңGvj iB8nE%(((`bGHۂ,˄C4Cm6Uf޽ ??ƆNN/paJTYD kѻor 3w<JvOtDdSg{sֹOjh{iDYq YI7H-'9p8LkYh pڷ:C&rN\'@Ӆӕn-nwlA:I$bFZ|~Xx%6lBVTO̹3e]$4$ŋ;vl{2 UU!XTLقFܩ,>!h d%jD3I$R6`H(Ղap9MvvMeZ¡޻_n84-82S0c8[5N=fA]?ul,1?;aW`b'}x8#hjlQTX*٩GSc5z=.W'gR*| +N^N69iP;#?1 &АP0N^͹4 J?4X%;\Jˆ&iC3 j"_[+4L=E1eX,JUU-X}Z,~.'&d` i VVA'ښZNv;*(-CC]#5u |~n^iݱg2{zJ HvP=ڇgo=I!:j N3۟'9w._û@#ֿ+}r-1(MSqwq2t4SeaWy7n_ɒu{#78{ZygUeݖ]\s4>_c Ow9YgXO7v>&N_8Gnv~x8(pj #eI{}[SC^(vW5p#&OCoGdVN9Vr#l3ZiR<e%ƕLV̪ݭvBmxM~zT#w ?zΙ(8B{ [I$c9I Ihݘ,˝BNsEQ:8N #nۤ( X EQX,b$aǎ!HII!##T.WY6P_@Aӧeee 4 }q)+Ḡ#-@f)!&H:U#ݕȡ)+f 43j0]$[!*Tl۰k=NgoC[~\yk|[+`gx˄Z]8Wf}EXzgiO( s:II,r+ǯ=Υ5L;[t͵07`HI7gq+C=,L].6~{'ᬳb)3+J{ "FOߛYzidWrg?\Ic[~+ G^KNa~\|ީTVs WuŗME?]{ I8(9/eٟ39 tH̚@-Erj][ZZzqd2VShkʋO桧b<#ln& oP_Հ7ou+O>{yoeW[H1>oGOge~z7?̃ZVabFFxM|u"v>,MUs @l.;%oc8Oj?$mrfZ U$5vMR~p`f;1Gў"N$RvGے$u(Jg201MPd*,+] AZDA@dIFIgpx N%_x͆3IA$Lӈ[kuƝJTEAuh+H͎ b ѣGc&˖-KHk0i6:dY"!YH@4#1Q͢`]U1LTIBY|wPDK1ӆaF!dbu47 -4KGpL`!dfx~ Ixr$ $_:Pa (}ܳˉn%++N91L$YJS6N%)NFyon=׿sm͛9#w=؁9LVBKx2v$!|u渉&DݞQc,`O9Pr3ҫyG6<Yo{;zxzo\LaRN<{0 9g\.=!O=|7G6WOE6ְd *vWWȨcNjOWaM-={g⡇Um3wcM`A𽷰S|X\_PWWϩn_,XL0D%VӃIP_F8xiĢa,\hzxozƍ?3‡|JmQÇo_Hi~_-]JvA!e]Ӂ:>'IXaŽ>u v꽻5v<{lc隍dQ^ړײljvVV1a!2~lkl|֬[OZn!#wV[Bz!TLŞ9T7+.dkE%}mƙ O"_]usIdBpЀ !Z]~j] ً È;#'4&X U:fEG>-NG{JL_ 7,Yرcq:& "@D1$$YF:Yں"==~Pث9SQǯɐP,2aj\qd^v_FHU\dVK'?T)M%?5sarQcxi*p|AV}ᓎ8/,CKy-<~q;`^,bgB~{+weILÑԾ}]>y'j6z)ҳ2Y3bJ}&o$`C")ѢDÃДSIc*?uG}/~5XǼۛЫ|m}Ε|'Po52hlt\T[?j2sk/:<8V._ƌ7N1t#1˦¸ƛ 9xt#EShC1dن?;;úu먮fO>+dǎ0a.&LL $Tg}NZv.1_&[8S9帣[y[1GMg_e%}˙0r\oۙvQw3sBAÆKڼ4xQXYz'OWa 5c455g |>ڈD"B!bUbXsUo~?Riݱ( ,w~)~Ϸ߄,deeqG{ey܀saёݻjjjbݺutF=(**#c?p?.֭[7W_}Ν;ٿ>}0dzAvv6yyy˕XjO׃Â_ӷ_9^5ǟR1c9qjPQQA jtΒ_x/\Lna '~k#-=kא]P¥N_gΝʂs2P"yyz٧$Gykva6Jdy5QKJ}֮[ՕFpi'S[g!#'փj犫=AjzM5hl 25o> f-YEGcǎ ذr}5 9SO9]e%b.lw?N>,J2*gSGw wu7MfGEGǣ,Z| -NƱGN~6d.9Tމ/Π_v}[QXɧMyt~~^!6m?>cʕ.eϧQ^^NVVŤcZl?[{ 6߶lw8{a?}ρ}sߏW_&RbncZq\p8ʢ񘒒BRR"봴yfڵkٻw/߿n 5)vIUN;wd]Qρ2շsX,h;>)xߟ9[{8aL/>{n|+V7۳t&$I$]ϴL CbƌO~{L=(Mׇ{-[p10zhF 7 7<\O  0asNqd LbcXIgv4%D:?P@ @8Lkk+{졪 ׋瑒Bvv6YYY1qDƏOqqtr:b,N-ӑEO;KKXn=#N: իWX= mUlٺOFӏ.owzֆMq "K2v .#6Gφ8^ګ.Wp;`^ ]VNZJ%\sof)k[)ΉۖDA~9QLVR -O??{5^ze''4 :4O<^z)VbȐ!@ $@'~?-b֬YZ(L::??u]&.NKRsKS8hb$2?O~^~e***xBp\8 $@ ]wŽKAA- qadD=L.0tYUPo710 $0U$n M!-x[]vYrgRNAAAA2III]2 {:3ygw++t;OӥLnnnϟ߭K.[{lr}Q:|:>uvkcVnҥ]| 0[]?xrv[rÇVnϞ=]ܱcG2SLV7ܭܳ>Odžuis…:yyu+7k֬z 9<+9eʔn֬Yӥneޭx[{[t+ݢƍ9Cuv+/w+WZZO_|d%\ҭO?mlu)x=O+VV)ҭ38[_HOOqΜ9X< .[3gv+cZzww6O>.e yq01D@ vKB$ 7W7.y•>m ?W_|OxfňaSKUo@BÛB=D";ϴihjj[~=O8FfǎTWWwԳgOrss )7mD(̐*XVbNNbQWjj*lrm6꺔ݻ7YYYuFظqc6V+eee8NjjjRWzz:}% !tuV+))!//`0YMD"mv::ضm[(--% "Iv͛7ܥ\^! iHM6:۴lɡߏ$Il6lҥM>}F(lsƍ٦墼3i墲.mѫW6- 7n@YYnH$jyi<ѣGw M(++i]̤O>AN'۶mxd)//ks Iuu5;wRWvv6yfZZZ\}J(b ظqcIh4y޽{OII @3zƍ;,//pFlxN'eee]۩fqq1rC$6mL|}g]p:l߾(**MM6rnĶmۺrnuΉw 0شip;w:(6m"~񘕕E>}:By655D4RL۝??Q#bDpqO?^=0,شq-,UXL]M$*&YitgZn>>EzZc{ }& u&jkkD"۷Fb@Fp'9&Ύ;^4M ̲-#Mf#55dTUjZ 33f8cx9#ػwo9]xhhh`Q0O@;NKs`i6B(!T\M DtAzj* iHIMf㦶z@ $ Hȑ#q_;YF 4LPUdIDV`"BB2H`"~pǻRHRwDD #!/d8LWVx@oIu#@ mLD$LCGHUrI'p0ӉDvnqZ4q$!IdCeXJ\Hy|}쑀NLב Bt̀ شi.۶m#PPP@VVdggArr2nMp8l.1\&s`o.#AfPZa N Fjkk;WVV"2 bʔ)=SU__ۓJ-q0r-wӪfۏpQPZ¾m$=;NO?EҞr5PsyWпfT }y ɖm˟oaK_ ݚ͟x5m膙 $@?s!u@(LѬ_+k֬HMI!#5 g9ٹ-֐']"x%I$(HIB YIKE50P4 ՂNaڝ芆aQBٱuXwz(͂"[% EtD41I&וA6{oq%sUWs 7OTl6G/?'x"999(¾}0  HOO'==dRSSIJJjv~:k(ڍPH @ut]VFD"ax^illd߾}455ufdda}YRSSYp!pMY_ÄO#sݏz/2{$9v*waj<r'WWCMan mbf <xE^zA.[Ojj* | Lއ*%M W^<#}lذd!f0cقȠ_M :)M!%}xji[Ec]=>o+5u4Ԍ aD4iG~N.I$ {ҳ42RӰ-?̓q+KX2SijLR7BD1 Ţ*[o/ƭCia602HA0f>)XvTقJ`)v EaEl6+N*3ڝ'it=ӌ!'r9r$\X0>ݻw  B`ߡPp8L$<曙$7Svd˱X,l6v;. pt:ȠKH$B  FTVV2g6oa}<=| θeqٲn3}?|ezVnΔ#gAsםSŸIq"L@s=>r0nǘ|$;.poC<*g>Pb &@ ޗj>h2DjHLmC#q2Є,,$U[׳eFpG{D4Ղ(HIN´kM# -,[2:jٻ{7@@os rӻgoIIM&33̴t33HO$;;T\NiR!IR;!nrka& 2yx >!" lasQeD`_^!,ѻ"44yPp$7fȏJTFE#bQdEA,ʉKQ|Ckq3(H /iry1ydzE8U,Ux<\x@ܫ~ҤITWW'n~ $@? H}0v *M 8nΜ yKc0|d2R;4Ϻ/row~ 1#B5ڝSdRH縫.$ɞFm(EAd后jь"YE  ZǐZ6SW{`I52i\z;|"L8Jzb"q/t6Yǟ|FawtPsһ zg9x%}+/ysdke-x2r9|$M~Q i$*+;+9=zsGϲuw yyihKggNn $@ $]X,?8H'S26 *6a릍' e29'ÙqZv&X5hALfmIG6n<5 x8ؑΩW_+=ʍo7\͹\ΰr/LMeȱ2HqusM İVhal祡qrF z %Rʞ_iSJa܎XrZYlڠ3l8 8l0 Ni[˛5^UEp>ek;w9ϦrB9|Zjٵm5\9q|GXUo3O?zwgr sIO>9k94nN;vϤみ?3fղżӼև(z*+m6.]ꍛj&> N ={b]Ki>H$B,4 YAKK B~^;89 ?3=LC uqv]X`aqwww @ h2=]Qݝ%oHOOuWխ{}yub`)δi纶ۧi&pH$aOl1Ms,V ``0(`0} R۷?FMӈ4tl{N=1>ީ۟S(pۻwt]cX}뺽ЧuujN{nmc89q{ڥ}v4m '{mmm;mX,aԵKm3.{fR.;{ƶ̴v?Km ;|fRS=3;j;:3ۻN;Xvo/S$v(Jd{Q\\̲e8ymw^yu7-\vk,xVl给_qx_ƛq_N  0*,KEvxA00C 'I#̄(]l䎳gq^sؐ'ٷ˽kOeBz)YOH-@@lÿ"GG}pv)Jozձ6ZUE_ϫ=[6iC3@/Cv}{-`bH]v琶3'x,&(<#hjd 5ד X[Z0-Qh^y* 9QUEQQd ]hndx=cQb(l78 IģX dAS5u4Z.%dI"9ȣе8rQd)Lk[B[>~?^x!CmCQx<\wu3ߏڕ)ǟ|HNO->%ٖ>޶ۧݾ\*~{3u#}c{ۧ?}m61n R۷gvOS6윶wvv]f?纪vѽ6H=,,^owec>->qLήts)Smvܶ](۽3qg;mS /_{ic%4-HtV^ͭwȑ#3gNZ=9e%\2z,ձ&nQ淟auBi~tR!F׼RB,ig9w]Nv_/S'vyL9X8O$ֈ:L2sxOx{=rfr{oQg0-ĸiKXhr7rn&P\2'$ C`u*5x {sP1^$Dd\BELw#hyΞ_o ya$b:!<!Z1'CT9 컷ǏwsOGCTOSإ;AA4%,z|K:|('z=4-T,ZFee%{.'NN`}ISVh߁9TUrQYY;C~83]W`WXAAAas p"h UUi:9x]NZdPevͲ?p[$$% SCc}=RRT@Ֆ͘B^N6@_V&xhh'#CIvtFgt'R 85h?U 񞒯lsoN8궻i8zEqqNsۗ\ve4Ws٧3xLu&v8]v9zZq+nJ 2D C3']1 K,<*&G'`Ei bqLSGV @<dtӴ'd,)H!jXH$JȢ(H亊Ә?IǫҚPFt]O)xҾMrz#''vJ޽ikk6UUihhr3;VVV(ӧdee1pp 5^~ t+rK9K﴿-'ađ,Hc}*`f B,,Ĉ!Ō'F"!pp0@,O[H8D5FCoAc1B umt:.]0rc¤p<}|/8n\?i E ;e-70W^~\~! x77Rq)WYddxEvFgtƯݺu;7^Nؑc[T~RFH)cT477sgpB^xKE `Сyۋl̙?Oii)\r yyy;󑕕әz\y|W|2ɩJYYY.(֢*h㯨੧'VO>;=g_N?;S7e@[;Ͼ'Eϑ#))/Ǔʨn'eG1p-   DBb0`-#GHc$1bFB S+ "b% q9frerpNY>>nNՁ$3;|NTXdzq3?uiO/rN=ߧLɓ۷/MMMNO>aDz,x&NK'dYf͚53iG#a{V)FTp8]8@~^.-ש!H2@@bn{^ظ%[3PhhZ6-$+$b1:ngtFgĖ*b48M$D"OvvvDު}q[_7noEoF8,JˉB.akF~~~Bj#b.x$>7_5 ".Չtxdfdqq:|. (\n.*EA~>n ,0 IRe4mxEI"H Ӵקwzs<\{}RF{7g!J%5,ى'Amu-= <|4-VLQC9eyQ 3A؄$++<_N{7̳'WYM&f~Wߟo}Yb耞~ۿ9yk9y/cO BkkS`٪h°#k螟]wEqoKF DSk’.v=4oүwwb?nEOI:u^~yToǟtGvMs?nϾGzytA.fI#keS}waKWн|gϞ=:t(;x`TLD7 =%+2j,[Jt%C1ww4 *Ņy|̙̚5LCZêU )**icCׂllYXX.~i~G j+BRa/{a0t+<|2$KcY䅻鼣8P[r¾CfϹ³OW9xh瞦!o>q'cF |spocK] yxŷyLJ 3?A ڭzD).⓷^/IK7{L̄IqS]~:7^s/"~LOOWӻ(1Ɛe0[sNd d8ef?P[.qzGFFwO?`РAD"NgMop\ѵ3:3~WѥK|I_KV$I`Q___ƍҥ ---BBA '+scOC+x㕧y[bHI69]ݣ+ꫯ(//gĉ;,H$hllɀwGE*mYVzv}>aKMRpA?'CELDQ.&MȿnYc&X[^8ͧpyyLBy$q$C&/lًPc.Of3QԅO=7nt(mi9']u/7s0݋8qsx8l/ U"ƨ(Dö@KK3o(,Z=zryOx72nxѻ;O]mUU[*m,OɘSh=4yE>LJҺpzfpоuwgxyYNq}9%e<[R@8`,`͗=fo%:[~,9} Fe>\tEp J;zh,Y¼yhkka)5v?v$ KfFdm/VVnF׍?3:.|^oZ5 ͥP(!ByGi%|3#kso߰)1Xr1cMd>5 ۍ鱕[ozykl;;oEؿ%8i 0^|UQRRt0g<zQn>T,, aAW#TD [usa5g2y$N9v K- aE UPB΢?Ilذ=z駟{EkUUU_~TV\IAA?x՛3ϼXs>Q:,okya]~QPPkF8SOݡ쮊RnVrss9SvLf>/H /'Pd Ӵ3 ᵳMVBam8wq^x!ֲy뭷f„ ;IZff&~:wyS*@T39i !y E_0<֮^%i@Iyi1bž %Q@2~ @%uEv)-wC{` K^Ɍ3kȲřg&\@, (יm@V^f;ējtdpb{wf3jD;팎rPꫯ{)++plj躞f HI0ж8mS(J ^SBE Bdee2vXDQL[~i?41) ﷶ8TQ#3j`)n'3!n?ݹkEQ~be֙;i Rq W^g_~ˠ(r+p\x8z#Xe՜8ÙIgQ2r,^0 Ys6ڗ{4zk15\Oz7 ܰ7L{g޿$ǦM8KYr%pD"A0Lh$Vlvy<ΐ#KL<EQ޽;gqF:^7w7Qq͛=z4gϦtۿ/iv05; MN!roE=Kbl^em/VH[EHmÚ l{R&I?}Nt:ii-VTTZB!;zw/Lpt:;tԏKx;'}>yᮻ>汧`ӊe ҍ?~n͞Bo?'_q4ƿe-*{(eղⓙzn#M =2+ qS[<&DzxeC'wצ;ޙMo#Uжi&Ea#77 _ (**pT]qݸ\tVղf(BӴK$Iqӧl޼X,ݬlVV~!999L2ea8rss;/.Lm*C4:_̝N,EI$+$+ R'w[ƥ0e6;xJ`,QLo l `vහnbYI2֊A,LL#Ul˲]:U_#Hhq\7OA7Ug^zqmFӶƿ44#Fp8:T)w;˻r뭷tgtRahA" G&}F|6|{nM3ƠŬOc:Xjޞ ny442c3_T‘L$X+A^%2W{ˡ eωcY㎻ޞwW$"z!"4_,**?{cSOemiV@:˻m@󑑑A,cΜ9\s-+<+V۽Cۯ_?~&LҥK8p`E ygbUU1-UVR "`u)ޞW#"&`Px^4D7t!IdRKH'OADH&Br6vDMfiLTnЍt4Yl>&01-3QS~mӶ%K2mM>Y,3Y-B^JOzB!ȲrϕY(***m+2'0 Gs z1cCΪw]'mA0̩>IS&z6lƍF_ѩ+Fyyyy;1rHwa/ʣ(Nn];X+yA;o&24G! D-+%0M0`XMcc3malذK0e%-a-,$+6kskf]@gl+B=$&[;;IN9$DA@%D+ )i{Q AQx<Ջn`4g&3ĭwۇ=h:S?zs=L6mʧ~J=޽{'n``}tV;qATɗr 'p#gw=|*_7#3imP49c滙WbĐꚂܳ?`2@W^M]` N vfL"'ǥ3bB>~ Þ{Iaa!(iZ9-墶Ͱ$IiW6EQe9Rn:>sYj 6 EQ~ =ʸqz;-Z B2m4 |ݳ)A{)JɌ^ UQ񷴱pr/YFkx@WQR@VApJVJ-VΫ$v4z1WJ[;Sm&ngS βv7 SmiV7 dfz:b7FnFq-B4@4L$KDlqv$,,4ðsR%30#eG5 ;g^/ /'s' MD7~QGȻ/f͢eu١֋YQd3pIc7y8 'M˾[oBU|r bEf-{‘ɉ]:MHtƟ*be׿6 iiioFZZZhmmM RiiꦲYYY瓓C^^]veڴii@[SS]wݵDP(b;5 jjjgϞ\{1'k"0uƟ& kV qX"+]*eQYMTնq8]N2Hi A3 ]:aD4 :\￟}ݗ]Eb"wU$)#UUh;5u\|G*S} \s8\^N؋698[L\~ޘ@aQYYCbbެ 1z[('7\-3dgfS[]=7ܙ撓nI2Ù@ǒL|mVm_{&i[Y ZYd(uY$" , @YTq( B::>D3gҷo_ng"]KyǞ ^NެM6uo[59.8j*+Ü$8ǽ2(@a/gA>snx}Mm䄃o˹rOy{8l-+7)U 2r13C;["e ɶԙ(JIΒ )|XҥKilldӦM8EQ?>999 JYd3o %rC 4raϣ0aTIw?c69Egؚi7=YW>WeԀ>du+qEOfd5W&BMy%H={hŎv}aѢEuٴi%%%Ջ#G@SSgϦX,ҥK1blٲm@E 5[rRheɢ?`Z?>6LC  ӷoO+khpaiN"(PMEyi>˗oAYK"lе[˗/`q@(D$Mtͮ 4^[G I1-#c:* &t9%I"@%0 4DDH`U,Y`QDP$na!"jnCu^ۻVmH2E*-< fk'HrnD!9Nr-2I]fh ĤF$8eyI~"z Mp+괶b. ,[Syg^>Lz';G??xe9X$a>.|K} CϹϭO{W⿱coWS]%_> [?Xː=#Q2=3ۍ\qO{^Ai H|JLJt>[;S6l-]IVȑ'%SN8ӎ'i)_o8$ _7d Z?Yr8lڴ UU)))I/o=z[n`ٲei9źu8dJ*4MZ[[YjUZΐTUUyӧO.E[[mjE-$Y2JL8eʉ,Xfh8E On $!"zN1˫a26 J Ee_1v0.^I(`'?rײ% Q2Pڥcxp,Scd2ϒ6`$ II$3a 0 QE HYil{_[B7qVbф(`hQ#ΔRڥ K qt݃#Nϗ;5 ;Y4*#i,ڳl2gƭ7aYB` ` ,) bQIcԈ񨯯gƌ_CRRR(GAAA.Ti%F Db/"e54q?:yW$"!ZAeAvAMx8먩ZF>=.-:^{ttܵwP3Iqt(ic;':3:ch>)Xp7ob8*m~ Gx]@ѪfNNO<ҕ.Ć$٫¿ݶoܶ醉n6نiNQ(w}@P[Ȑރp46PW_.X`H;hKI5krK|bkH4̧yњ`"J2ѥKynF/0MTUDl,erk[jsXu4&H"fr-&"aȶk6B-ӰUܪ¬g܌2dϤ><{S8I eԆiaZ޿`n^+MV*kzT!H~R=+AdPW׊UL$"ʞ[:SNࡇ%);rH]`& C07FO4*F_kXRD<$#R݃ƣXHbf~1]74ӁGwFgt ,ˢlF)IiRUu'b12}>,"Aq D"]0(((F222~ UUñS兵kײ{sG2lذ?uK.MGM;}yo{Ȩ@qa!e]Jlټ&2 FdDBFt$Tk#me}+odz ZBK{a($"i 3a`ȶ㙡$)anbbR֖L Ad00t ED0QlG3 ð l_NJva"('tzML LEq\1dxE\NB NHi.vdzYh)kVpڀ]3<>WIHd=)YfYn"%e39i!N,ˍE"tu֬AD"( )I˅e 5 2i\W"I"Z"Awuuk?FOzz݋>BxmkdS\@m]"%s{NEg6QSS΁Ѐcر <$ɖFq4M0}jyMeEr7ndΜ9,YX,ȑ#ywe!Q^^NAA & B)#BZ4q*֓Vϗϼy~X$i*$jRe-ۃӦ?Bu[Š=P [7#nDK$阢"XWݮNq-k5X{w_.D,KA4$D~~;;_ČD +*;27Dѫ'}#H |Ɔ Ӵ%;L~<p0E[?ײl`!b0L[Vl Q/`I $؅evVΦ"˘I5H~f^))+GvK5JW dl_Xá L,B-dx,2221 6A4DQrb&a tF(鈢HMM -~\x4LɀhP($]FJ^[&arp8~$I/TooǗa=aXfnߏL_i^HDKK $qRXX|׼K,YM6QYYᠤq\i]X4 ôH]]XRH~8p {999|޶j=---L2EQvMt:illdݺuqFAwW%RLST༓gYj1%c'GliS( ,c$(p5ەPɇk3Èı2L4k!Zׯ$axPg ꤮&viaH ӕM!-[=sn=1ߕcN) R7nGeM=uT_͆KL1i T-,tdKX"+Y  KܗN[I&! jC-XŠek,?0 <>/I!f 8 0MO?I.H & C󦄡Y5%uFD*+i%T%Zc:NQA$,hhXg]lڴ MvI7ҰxbJJJp8 @qq1s'N䨣q-rssOYp!W\qw*..ԋ~"#^֭\vv i<3x`JJJ6lp`FiߙRLHȲ@QDQ$S]]˩fҥqN?ZMN&vU,..fp \}Ji~x.,\̽ϼGo4dH,@P$LH#Z I T-YPT#véh45 P͕l|MNvϟŖ-0EKfjL)+* P,šu0(aFqivHV5!=fs "$Dl I+?owAu.f%tpFN1 A5 MQD˴7(*iNEIm.ӁqE'{a-Lk:OƑeQi %7@eӑVzeٖ$C@$e)9lmHv$]\Dd6:٪Xpd!H U dIL[F=,X^J[[\pt0M\NVxeyyy_?nӉCOF4 _ua]= W_}E}}=̝;,~?ݺu\n7^geR^@&jkkY~=K,!9s8蠃l%Kvѣk<ED?KB?hTodt ^KiN "vKXN$ 7i [q@ WE>H `"Y環 yg2q4a™Xaho$QJLä$BIa-liw|dL]Z@Ro0tn̝E![%EJԤwxq'ݐj IP& `sh%IJk꺞;l aRcv1Q%:Wz4(v4%AJ4m0n2Uf%&[[-HkyHbYi nI1I#DCJyѶFf>3[t8S^wu]U0u-JKKAgЁ|I[mTU$-^Ohqhm6U\{h'2dB h;KCrEGKUeiBk*8b8\3:7˲t֍?x%7ͩg틅瞝I}m3L""^g@EvF1t"aA`L&&?A3 ,^:cvš{[_f"9 F{R'41- YRɣ{awFPEaTbA̝{%X2W fJ;4Ȳ BH;udJc6{{?̳4'ۛ!}hF~E>MCᮻO>޵{b N=T*++6m'x" y)y ./ÆdڴXzGii&FE/x+箻xksp?OG/f#UJ!}iw\ŵFNnzztI8b/(ҍVrɇuGS +ygױ6rNWZQ6IcpiGf>q4 Juuv릅NYYY-KELL'tR[HmK;o]}#BILQ\˸o`:s@0nd r*ǟq>u"-M mOe@ @VVcX( H͛7&7kY:"-m nm6LiI.TZ8"!xZjfHRFTC)*̡"3 Ґ$x#Ey2<$>Y2d qnlXشO$T4Yq3Vt9/>]ѵk7m5uM*}3ȡ^\Mfqvg 45I˝ugc},V^MMM ."MMM2,շQ^^|g[oe͚5{(-- /3<_|awq@mm-a$2Ceza?V% ˹lشy61pWdy;Pf<_Kk݉iq(}27Vw]I1S{ON@ cV<2&uD$batMg|tagOL·`pٿΥn"C+7/>%w#n |dYK.Q\\̔)Sׯ&Lrmx@ a806Pֻ; Ͼ@)\MsillDУ||YdNB׉ L 5˳M? V!Wr1kwd Evу^AK:M-PuDaWd S* fbȐ! 2dtX{w 0f|I}*7k7 mA:vXcEwyɓw}$_Z|= 92I:rd9Zst|pw4=*ygߓY jpŏS 7x'=\Wkrڅ2|Tяyl\2Z8}}jjYu肃k,OB lGt LYr%p̋/k`,3~iTUVo#aPYY󓊔ÇGQ|TWWsp'מXtk3@F U@`ݖ:ЭʑGdcU#/5PK$c'3iϞ<_V,+84K &d")dtf)+n>;8?pZ[[2+,%qGlY 5&}_Nq =9}9껱ޤP1(=,9q},z Xv)7H>LrK| Q:) YGEE.4M'//綵:̟? 8mmUQe-,[1ct--,?.ADbwki,onJO=\`* $uzۻ?48S V.az+r oa:cFac O>!/ /8n]Tnq=wL&t&tr) zU}q 9_W+ dȶ*F7BaQ.NM mjλe,>kWiDќw)TWm$;+ƍm x5JX:{,cY%%ar~SUV2o#33aÆpunժU\x.=e=τMEgU!;{ك7ƛ XL٫;d٢_'S-Ǔ% HrB-ʠwA)K7C)%d!Yn QBĴXEô@n[Ai-BL _Ť), + |SaPSٳijlFVv 70gH]:*k& m$Hr:҉gupl!)g]:*FJaA>Xm+x ۀNCSaڒa;eOˣ>,\'DKv" ǰ~\q+, )[Ubg+2e"h|>sΥK.L8q7miiɀvfa+ uII”43 ̜~`":e)rt+CY;ݻl 'E"*J 5nF[F`ZO8@/&W0דM)^]wj)OfFޜ,rKPR`F"HDkچV..ȝE0JvV&bȒaXXMJ;aGdbSRm%QQ #IN.;MۺeX6,KKiک}!yNEi"MDuecYQ$H cB2ogs***Xf DbIDuu5dddꫯf̙x^:(6n\b8z-ƍǰa8餓ҙବ,-Z+%\_J! @.8%CwG>p;p2~x~3f~ Ś u$ z]OhxUu(( DPU뮻.YfΝ˺uhjj9EAUUTUow2y0 D"A"@44MCUU ѣzb&hHvvNWdY&LssN{.=w( 82YqfE]8Ex]N,'^$!BXO >:?`SPVP׳7zrJq:TIɔP$gJQ \,LT,AS_1 ݯ1a!=zfE]B3`b&bv9%4ɢO>TtGYYl,KIn-U~д>_^ZPҥːe"v_D""+I3--tC%% SD46ښFVDQ4m;4I"`aN/ng&eچ,Iբ( x<Ct.'Y>MtZNcS q:EU$ID [oa=ôiزe/iѣGSPXWJsc3ʯQfnhẁHĉD"qg*477#NWn2DQ⏄-,Fy e (//GUUVvDtl>88HƎD @E233%L[}?0.p'kW-{7ワ u|Ilڴ)=!>|8Ç&uM%?Z 7W<FVQ躎 77!qi&MXU`+3iH%H#˹d8+et'?+y\&KUn%$ְt۴J$DA"Yʜ-fVAN=i]bVܼr$Q5i&ev3{O G擛 Va2)KP]%߼AOsqccM1 K}C+[6# *"2`"}n5fͻ +*Xnx3Ȳ,1Q?d CgXI0p``Fq8 ,$;;DB#S\\`¡0~|>yx[RV̠6,_zŋt9ck$!$05dYATU!ХK4M0 $rq:DrrsH$䒛K,%??QH$4r,x<ת2>,ˬ['2gA浪,DvicߊHݍiJʩ~'l#I]*KN%ˣгP6ng}yG<+`ԩуMΧuiPmY:cc8ݾ4=y~X(l>g$3|00x1} Nxw8Sꪫˍ X4Փ,$՝)R~%_y (5I*G5W< 1#='n:. p*O\v#slq(͑g@cO#Ödկ Tu1~x";{a7P\\Lvv6R(wƯ>_&w}xnlʊ|"&LW_MeeegA#33375jZap8~C]9]LRQB79C(FaQNzW5_kC(5ݺ=e+fXDdA^/ , PRRB,C$ )++:YQm'v5{'erO[ ㎣)**baO_ڝ\7Ue_Λ7r&OCۯ_?~&LҥK8p.>vln( 7N^@}=Z8LZ_3wl\G,* +N )N;Řs!%ngLKl˦mZ` 2Dj%JC{q>;؇C_r=Y/>3i>HN|Z%z'P0YtRl)f8ql_"a7nFMrK U'7;" ؼAYEJ&@+y]4@Ex|3G {xaT˩3rHϟ=ȑ#9tҭ[vyvZkX>1Y}-EYJ(>Iw[;#⮃0lM[6r[әkt0^Ai؛Ԅ111hHOmO^/]1~II Çg\|Ō5 ɨQ۷/MMmHyy6+iv0yIi_< wLG5]ymAUel=O=\ [('hrس) nOÁ)~7|Cmm-reeeb1bRUdkL;bͰY 1!ހ>-B;wZC:U<im3%ȪP(+ k֬q 0X,Bvv| C'ټoblSd3Y44rUgy1c:S޻>ԩٲ~J㑅$D"qv=FuukA/6Ӎ+3yyydffRRRB=͒n-9}$ħmϋ>/?Af 9d: ߇ٟȉgyr}9G_/t= o=A>1b贿󇩋dq'qSgvJ ?zAiX!=O-2riX3xO>-[qX̧!S}$z9ڊ`$R 履~Jff&ÇaZvv6s᫯/xn.cƌB|)'7٥<\VWf:BA;#"en8vNL`[9ӫOW;p7Uߖ^Da,COx3\B X&5hmQEdd A~qx(bX7q=x<E([w~R#|f~2ŋrigڊ >`_I1Lp$B<C[I$4P\R|2 +4 > J%l/h uUu.c7Fc>STڋp h&eLs#r:Dѡ`&tZꖅ:l$ݠKy9?wqE%Dr [)Eُ$dff UAy{(B8J0:˖aͪy"$t=SWbIАh2Ae̓O>sƌL:SO=}ݗn[ZZʭJnn.zEQDef͚aߟ[n'2O,"qe3O_t M8}ɬw_bPlA_?4Mz?ڗgny_&0?>z6`YL>zE~A>W6T6H$g >QFRWWGs  RE{g҇|>x7&.̖_/?KÖyYoesYj)+C[ڇzR_qsMw1l3(j̛3W૏A=8eQ{(w`;M0=IGaGq ,`Ŋ7 6x5jPk .(bv恣?G$xљ/d˖VMۍk9aRlܹ <̹l/:9̧((Hi82,_y^{^4 B\Σ%I?rBc Kv"GmAB! (;~vʐ!C9rsZ2Ћ\`rC))؍=QQ3Luc#Etrf:&&"Ɍv*J~F#;DatN>$ re(L=\ rYb>Dv @a[oi-(H@F ¬p3ztVeIȒT 4hmAT"8,Lh%66Zn/vSY+V0qވCULܼ,dִu{|~Z[2Ez ; E$KBD~Z5 \./^_Ǟә Xr9(v/*B[l% ˰LMVěh=zSTTNC8|d/r N'+ ̄ ?MӐZEUUgsgu!xmmxL7l !a," rL2Ν آ;4~v&DD3fLzkÆ ,\w=9:Z.={HhZ7> {o@ HEEuuu)$k׮￧_~qDz gagO$k<8n|(s7s7aD$m#F7e-r<74?@.x~V!g>{r2f\!L;^\B=&ճGL80Jbҹ5W- (+J_+0уjcܸq\.^:\K@M$7eȐrF"36[L)n]1,EvY۟8aܙ93g<9YffL)ۛio4|tN ,'jwв0a=5x AU=!p:%g@6R ` "ͧЧ_iʮB4N'UUU<<58@UEkm6c)t ~W.i$-#u0 ZM2Vדj! $IimmF"gР!l۶#ǔb6 Mf0zRYtҼ-J2!gt]ƴ҄"ADBqHd$%C* d]C$$FTU&b;T:Tb;8"(,!Lu6pHCuӸy7Cbn.x<}K.*_e۩l2f<tw +,NFA0̠Qem3q: 6mJv+6Hg۰ |EEOAG.pOD2L;ޑGG4& O$p8XA;qg٤Յ Q^>JT`æUC=LNrB!9eeϗ_Bux<躎(IxhcO_:!czx-˃?97\|%p;\w떄8r<^tg׼[zę2K萠j$'lIR}]LddY4h'N$=&Ľ7~~iM[rL+0R]8 <0eǞäдq!^ o<8:A;쁳lPmWcܤC?~寿/o/̞=6wnFV1ԯpߞ^K(HCClCH$pkܱ kIUynVmy lx2D(LSSLɓ'SXXHgg'D"\HDL8$Z,B7'$&(SEj $H_ޠ~`$n5P?)\.GVPitx! zy7̚5k;v,wqկXb'NܯP9t9L=dyw+ްÒ 1Lj0L˰py@,t2mXޗi"I"<T2멪,D457+~$dŮ* YoNu;1 Ņ+SB(@躆(tuɦjU ptځV"),w >y,{ ha֬yQiO~tvL"'URR~s24h M.ri(UU0 H$'EIi͈dq<$.JF\p$N# zz 09A7-DBN v ai *vxV;̙Gp N8dlVCU*+HD#D`SSF$Y"QA |X,ƪUX~=}nk&Lc=!CsbsSkNeNʼnhp/,Id3)a)bӅgp.b0WF'вp8ѵ LߞKb hl,d2qSO=E0os%`;kJH{Q]0nW9T/X&DQZPD↿$ zH<'\adi\?l<I"۟C$Θ٧UKS4-yAveȋ.U :BȲee1 ck1vX,o_|N2HV t-d=x>p-3'o>O6!IvU&FEI4hlYɷW~ LӠ4?bfN"w$勍HE,4 >Q4P$QW*6fsKR%PPidm zw8{5j---8aPYYI[[_\zIp+]KHDzRPVX6%Θ{5]&V~$ #2mq]?#OH$0 N;-6qD"a VM`xw5Na5zi\K? D7}Ww.F̌I YGW((yiSN9L&رcF(;DHi88iRV4+dwEL6swR__z}:ih ώ "X&rNݘWnTt= {@@QS2i$^&MD]]~?,,G:;;Q"TXAd( EQI%"RIJk$t'O躎$q|E"%pN\.)݅ *1MHQqܤRiŁ( hH\nL@7"n,!'b*]q! ) \NT2K'DA˨#ET<5R¶5=yṭlM2E M1[+2F`&A͸g+%fP- I:21zvivb%WqEIDP+7{U}w}f}~Η H-/M_ka477S^QdO>_iΓ_$IbڵvIdN{E !]t`J=!G{ M,Ñ(N-DW9W)ك>d-byIC'}x^e`fx42Sv-ʒa<DڹnÁˏgE @{{;yyi2tr*t* hIڷA&۶n垾뉦 nj[GJ۱clD>}:~ >iGmm-ӧO?  FظCAr睿fѨ͐|kp:m{yN=$ 㡪~2qDۂ,{+%Es {E=@&SRZ?7;XL#D&N~;_+mzeyj%.I61-,D'BIhDr;hmipeudQObÖMlYhҲmWR/fH]!>V C[}oKf@|qg`Y7o[ @ʜ9s۫t2(Z>040R@3fbY@vw| `/ X< ibh@,kYEUxt܊ 0ifUquD?r`>OkX]|hko'Lȉn@5Mg؈>%r@X,ƤIx|҄(:H~T$0Mⱇoyfۤ~T}~Dg=!H;Ȥj>qNJ(*,`[6V, x(((WAs#^0eޱsyorǝ`uuiipRRX]wᧀO`iGfE_b(M*k9IPRXK[$]SH4э,)^VγˮMqO@kNr9U~d-Vx[ŷ[60(`WrMdNzwν^7#y3+ㅷJ0-9x2`p-kI8#Hv]>riD;i:7T3x.j8`y}'ﺺ:?p뭷fƎ_-1hHtsZv1y+/+5b:e ss-X#Ht, z""Ʉ(s;g~6,4 F-]X9C A0`I;b!`bYVװy}75@.evb$LQTr+2)`BLfl O,@GM6q=gȑ#wl,iL0"2l14k3_T۲,Q_E&B^8HxJQg[,2lH! 9Dd2tdwu/] SX6YhQq(ÍDOmWLf(?A@O2NPM+Rbh$Au  hڲQu3fTB Eeغnu*F9) (i;̉3'ڶ`sM߈"Ξzڎ!wL+Q[ygJQ4OjvƒH,)pG_ʤ (!ݰY_q2M UЍ,if? `sCiX\QE,(p=hhh;G!P0@^&a֬YTVVҡcRVXK,ÊQ8(yZKRZXK*@DY@vrWgHRƍ(o?;`3#ڶ?s,UR`ӿW n%PF~ïIup͙x?C]4/kqҙ͗ͦ%O#7_=oB4yE˲(.ٷ*ȳ):GfJߺl"xXv-tƍ9Xz5e1a„0n.Gr~v|`_ܯ؟xmq( .IRp:rsr+8]J?kqIT$&\.~w +u}ٳUR\.ǚG]62ZDrO#,NSzZ:7*O΄/{P: p _@`ۺ?yز~o=lڰ@а~%CJ$i?k>HWFE"Xt47\mVD )+YB#nO/G`^6,rNtB<$l'AvI$2oA[Fcʤ| 82h$(ʸG~o W>EIg^Nwi`!8r+jDtvexw;HiO}̟?˲hllR&2˖-ʽNkd:[er mۯէ44RQ2mmkT>l?~0?Cn^}%W7_R#S^>+e1i8ϾVthR1Ο-F?&Kc{x?fC$:",||?-w"_8jB<.#awѼ-AIlʱYeu~rTނa嗗~}w_ߋ\|D | 2Qz]&H/@lB. ӏ/$cv$E%2)8htɦ4aQ Yز;L_b2lwl8k?@U`jYI7Rl^ie'ᄏK/D&d9$RQX 8Ky9 dD"̜9dzt7Kss3o67nNܴ;銮 7`ܹ :t/t9氋x߱y%2Z꠺ޱd#kl+$3>OM@>ҽnWSəg`޼Qxo=|0}Ml,ho'DӮ`y;s32^߼]# ])%Lu,uSN{Ǘ7oxW-f^yWϬs9xFJ)X Tݿ;'/x(߽c8̙uFOqoSrYh dݼRL˜@2aoA3wl"<FM;CL:{Q"i/93?(ga-hŰIqY֯X-c0EN&CP(εߙi]~%>⤇>|9͟j^T*Ld2$ ~EݣH¿E;m5Ըߎ7nDbەqFn֯_?x?W5nHzQSvgǷl^v$_b;`xNrNPǭP<LDQ"/ے.X /l6ˍ7Ȍ3Ep8L&ؠ4 FË o%*茖dܰ,]W>Ul)@Pr>.sii$IaL?R:Rcrӽgah]ɷ~v@Y%@g}ж?75 0-XKb&-~Y8pe铸- ~go{ }.$ҁ`0(n6A)}7YOu_OFv|*jwPZyw|ٻQW s=k6lCNƒWѸb"pu!`V "Hs vM ɼV5PS? 9hjS/~_+|(Im#:_܊);EEQ(,,ܥJ(g.Ook{#?t'nvL](䡜(F94 ^<bl3g;+84sk[ykOv<w4}N !N}cc?{?BzV?[7NtiRT'SI~PU纓& ɘ˲fL2! 1qQ$31s$m?@{S~߼u *A:8{@]G:I&=tB"b2b񣵡7 ֳ)~ Tmv޳emt^y7bLi0[7b!yFs`q} .u,™'gAP,}e¿u CӼy%_9ǜ}8߽u됤, ܽw/ ?EiirwpYgpm1bl삩)%ˈ>)ٳ_x)--etwwt5kpꩧ8x{TՑ;Z2|A@l+aE,`a )r?kk(!۰Ae9YcBl%  @ײx " p%,IaZ}9g&IW@x?oHt+Ȳ €tٴᤓN`-XfrJ`O?KL4|eâUOsq?$I|Fҩ\AeD4}p@@m6FA8=dҩ=j[6BudO_V:|d\,3<]kٴq=5ջ$II;PŘ%V혲cوn6oތi\]nۇL@|IQc<+:`" Ѣ_ yeu]7p:`o(ltELް!4-,LFIy6 ,KBŒ̭ЏcW_>^鉴1v,ቫ9qRALG8H:C۸s;ÜrxKX3QW+BJXl9b$& e?YM8s磧r$?XK,`?>r I Exe7u eҤƌσEh+,A>py;mŏ,ydo{9hjJsy-B,R[Ǎ?cj>1z~1#/KUȥ?ۇv9"lF ǯ~S>ՖEiEEEx^4mǪ^ࡇ|$yiʘ ZH\Q*Ȃ(l"BѵQ Je^+),,r`nl99anɒ_$@ʱde6C+hyPl7$X=A´TYW1m!DQBQ%zDDAB׍>T6Km 0=Q袢 n;p Cm;y-O/,&&R^P].dy )Z B$c `!#b>U Hc""B@vݤ+C)2)$B!&z԰EEqdY0Ұxbjkk'i 'CxKǿ9hd }ʙϮP#O\͗5Hgl8ѣ LSWI2p$>\좫}tHq1wr?jCjo^ý@&Mg|1);A_™JIsDڡ9tO?cP|N; +ǭ; 2#gDW蓕"d2\Nfy2'ymz|"6&ҩ'HB]Uf̘.p8̒%K $0}H NL KQ4t8U:4|p= <\ -ZLÆswK7\tb#Jw6 %Mgmwh*8h']S4jc""YF.{5A^y{wra/ɐQ OE\d) _"eTo~ Sp:N|M:(Fo2uC|?u| t9tJ kq[1L](UO~[Zmg[9xX#@`_ DUDvns u`i:F(~'L,F j 4cXHz"R*H$5jdC5poo!@qZ`#6P,42: =#P%DMT"c[ R>Ux-N#Ht X2ec@qGe,엊 I$Q0,cl襪 m툢HYy)٬̦OE=LӠifZI]4qN$ ,KQDDDaBDU%u,B3 $ IuDl-j3-΋e#]_ͷzs\-9lt$mm^vV~ ,3G ncU,`Y^,4CM7r)sZӲH5ʺ:nz֠q3 WjkC48~LQDzgq1AgqwyW7oއ<`݌(t6XP)'E1q2kx]+&{*\ d~wu?5ӎH .v:1PH`"#T3.e˖vlURR’%K8(hmڴi퓢]y2i̩sòLrD]$O%+-eY|¿pS5r噿e[|q8ܬYs]K:{B;μ;x*5fQ#Ct55~-k $ hZU-ꡡu". %qja[)IJLbThD2LZKRIS|A`| Gs'sͿW>no_p%_{#(߻Ÿ@Xwx4.Aw9[9u$CQVVƙgIWW.yA1! Qԑd A0$ѲF664HHl&$30~YJOVV-uNr;< ym!d,>'$QoۻOQʱ9)}> B 2m} vA("" MV.ݢl!MHѰmxC N4?5x`jkky?HaQU f@BUVL5LġjKDe@D (N .@L[3d``QUR[+c2%Q:%D& ǻ 6k gwZ.mo-v \O?t:::غu+Ѽ-"0k,TUπfls^8T:v"@sF.<ںp]Gs1g#iތ$~=mtFJ&V3jpi?@n yw2f+eJTQg?.IՇBAjkoބ d[2M]Qֺ ÇCuM{`_ng6ڭ $T&at |rJP=AXVBg t]eţsݽ~/3+ppJ=.:<OZÇ S1f~4{w\444`YNmG':(֭[ѣD@DH` " HҚ:TC%PZ$^Ւby/aB bN%!EA@m=ZL//W={Mu@ N@4MD. 9A1DPDӉfhVe0<)A\ΰ(J-kj ;#Z&eas "LH89o!-"Q}2 #I6O: &#piL'Ü \E߸{J$՗[xlY7L6aryn ̑;MprK'nJby~VeBQwM|RR_Z|JM vxq AWg۶mHGwv CD2$lه9cS{V3gQ:>Ui(~zӬoX 8 Oֽ (;liR!I]=ʪ`M Or?AVj8HpO{1tw(e%~YiCړ($RaL"|kkYE*b!67/c̐yL1pT&'3Z* d-&WY\715ȊIθ~.~:M]`r?@a 3 - ?NI7!}g2*++)**ڭ년kXe;- TA@0,#lk؆'e@l.Qqچt Jp8eZ(B&E@ UI$i!l`i-@&K#DT*E:L&De^^],_I"cy-7pS3o6: "/tX2sd>s%P\ Exȿ"DK; ke@X4$xb|S]]kG{ $ ^Ii^e*ez0s 8tdBs7]pHr<^>Db!QC\J!Ճ]:--YLA`L/|[{,>&9d>Dؠ[ñr*wܜu46|0AP RWWǐ!C˻}W2ڃ[|;Y濼Ụ(Jt3z$CeB*+ϲq~S7bz!-s:֟ϗeY<@wOZ@)O"a>vl%W|Ģ=7 'zw|cETk˲ Y9g}5h;-E2#RgќLY@:fҞ۽B*F:8TQKGt](Ɯp8PDv=I&1m4z Z`aXʈN A7xEI$z2b0i!IveQ#nȊd4M#ÁDɀz74qmvZKC0MÖ,,]GM0,ErWl@%>7DU9gn@?m*nO!nR7E3s{30%4-'&|,-Ț dr("J:d{ɓ'sWyܫd|;{s+$3P^bPz(BQ$>JW<Ts}~_9[5<.XL8+QV֫m3Wp꡾e(Q!3_+VY2_V3`ٖ{ڧ-/ mDew- DLIeW:OQKPVWW5]O&;;;3f wz&h h:KCIJ ,DT*:$d:B$Dq8z]($ڞ=l߃ D<1tQIeۍ[ $Iq 4*i?9W31+,Nx$D<@EgW Yd40 K7 '܉vpTٌm&Ț$a:"v(Sm@,+Hv*i;}\.^1j qUh_]|'(līSO,@:0O)L΍ C) Oy{YmjGqU#'C o$)#-XO %,]}:g_(HcGS5!$#I38N')``jToۍhfiފ],f(,}*;+E~LID,@e.S]Ym#6+L I1 l6I6Z5PdU:d =YRIEC>te){Ed2DQU"0Dσ(˹b=#+JΦB7>{bՉhۀ9k0Uqmr}7;wg&)4My^~T_dĈ1#L>b8U7J:ٺ΍t90=:\U'Mqbk,Z4Xp2f2ݑR؇+C(TWWsI'S(;?:e+r7 ~,Z+egsG8֙>J~ط90EJw{D&``jYIw΢?ʋ8v%D?HDQQ|[Caxںry_~9mmm|46ĒT2%(XKtԱ} )GJGl EEEwq{$EFo[~_b &N8?ۥZ2#I:lJjeuDn"X2`YČN~%e#'ƚek&uV Ljl⨣E` Z.)ǥrbCvNв&dH5jKQTlFCtL&㥩`(ȐA&t,.p"[81]TWaL>-&i}7>FAUҕ0jHB0YM.me AA E@7AW1)0̙C&aĈ 2r)e/5 h4J2oWlƌȲ3ыRji:2qCgR-к>s1i0v cCU\$QR~gEQ"JǨ*9󮥼h0m[yHgʙ4FJ"! '"oYVQ %5d$x^i&t$Q"mٕ=,\C&q̴ 5W8Sq!%{(}>L%މ~!5khZL\]>xꦺl$ɏx>Ҵvsڼ:֯__ 1?jA[Y21\ W!k+YW֣D :ZZZeñ,.k;fx >?!QQzp4۹FR$錄ZXʲ`Zp$%# l{+ɸ1 e)dYکID6E,Щ=n$x j;y&dŁ Xh;Y֐/ \n7h ,]CL9UUX$81-EQzlIEQ(+/E;4hOS4@24>^8K'݅Du(XH((hF8Ő<![ill_?p^xۅ%; Q(\$ K<%ڎ`jOt:͠A(++ۭCfWWGofԨQ ;ECR0$;-@4D2`8= KY KTIdŚ]kHȂL\,%ԦQdJ$ caqĜrr^}KBNƀdz8DtIⰹs9t<+dkG" ]iilA$24e5CQXOl۴RI$L4hM @Z[6sG;4D0IcIDIFT[ײPn=ĂH2 *F*4-,C4{wop=|&lu]pAp8+5#G) u@*$U'Phz ҙKFdST ehx*Kut&N24u>N\i`#28 %Ț y x!dhx2D"݁ J$ލ8)K({ol$%ь >WkcXFA0rkpRΓDJǜo!'4$ZHD_ARgѴ4Le4_9/bJ "::J1CfRcP(ܹsQUp8 6ӧ  ٬NwO rp:$ M7vAELZ-%JDIIJLL 4"h:FE(J*(vB6xPYUҰPŶH^JS0 QddhnbYvD Yp8ܫk6kZ喍z(,BDudQBE[= /Q, i(Z\ %+dŞ1[i8{Os=褧verJihh砷7w&MgZ0qD׬vST${3-hڌeZxKriTIMHJGH iY-4#A1Lh;Ń)/dqźX-տaX|Ehc̐T CZt6NV qt(J, X_9TYRɰ4uN?dd*,d kÔ,?Z{- F SZ?Qsˆ46j;^#d q)CcXdR[ӏ"{+XrT$"O 6|.JDj=fRVV7~nLr8CL+` LĴ .dY&K >24 4EI%ô,5''fSZ64,N Lt ,˒0,^eLl`Ac#M[&HV/3#h[` :3o8i;YXHKIAEd)8r4jd s^@_9(..tT]׉D"_zCǃ(^!MlYZ䯤_Ʉsl6Lpn?(wns#D7=6ҙnj2"R }帜^gmQ~{bb m-Mm] ŀEkW,+HK&0TQ䯠A~RLj,)X2;Ԍ*;?)a+'Ct7YN#$h[ ~u޺R: \Fv o?= rqE"$I;ԈU[˲(-wgttL9]XSq` GGp *'*IlQGw"hꀔ # `nV\fذa9r$w}wޘiժU?~ ~xmW 'xNfO?M}}=ӧOf.Mz(#_~O1~O10*Vف%%LG艶}VL˰[lN_3> ) WrD[[ӳ zV#)p(.7YV[dYAe(T+@m(JSZX2$L c8U7=ѶU`:ZN+9 RC&쑔(ԇuնyvT$:$`ʘ;ED$g.Ӱu Y8dG"1qr&+H 8DB. cA$OT1nҼB{֕\t#OAĔ]Nza-)W1z435[0\> GpI :ĆA&21T)@qEQYYɓw x?贶? qƭʉ'̴i\uUw}?~L&ìY!,"$))ف%UqT=Ȓnh$3Q(mcDZlmQÇ,$PMi)#=%av1q(N2X[[VF[p+x7.B^WuQ[1@ &i 7=nfpcD݈޻)TM $ 0iѤwbg{ |"|-C 1bpgFGKAnp^S)sT,%Ջ3-qfk'xh 8ʋOytK: c]Fyh괤$Jc]Hy2.,4o`m#X% JX)۩~b6mӀ#fSnH;E9!TT%M*U.lBZ'7ҁShI]@f|JC 2)vI&I D>w!E\Q3S~`Ֆ]*.,Qƒ,IA%SG$3qL1@Ԓ$b& H eb8 0 KRA1>Zuc^LD-`d( fj9"wtvg}6MM}a$I FYYn Zv;kb18T8 ,ˢ7y}z{֖,Yرc3fv@{ >ز0~jv*.jF8Dف";$%W;`/FH:' #I C. J%7BIi$=_HWGpWJ3|d*(Tp]d2,u/p⬯Un1CA2o4ݜe\gREʜ"i1C-QW"NsWq"*TnWLPY0с3cmCbNch—BYX1~F(?WG"ӇzcYe+ Xee _:J6]O5VD=cI=g@KVLڶ钊/)6u$Y8PQ-@Kμ4L‚ѽb W!@5`׎``d/sj)C@\3̙3曹k˹KYz~i>sG( Hd9Nشid?|;]ށq3<`ԨQףi~uZ[x1%%%Lw#OD*B*0W-7q/iS$YZoH72],|hIKīFTѶD("%u,8iWb3˴:%YxƤ.) ~tjqΎf\檠);NsK2EjaAVPExDHJ#Չ^;מԆ:,.׾FCC]\1&t$n_i"ݩ4TVVsq7|fHb~bҥ93׮˗s5F׿ΤI4)..p 3 N_̚A3yfӿ8DYRp:= FId ׳z2 տKcFJ1zFaIfbd44ظ}oxp֮zJ6DN4 zmx*z˛?2q~62Z4gq$;Ϫ,N#{=뢶ƸORS~ ²WvӒ0YP`G 5Ie&-h*Td ,MKT45ց.$IB*y-a;`VRR ~$Yfa>~c2ٽ۳M2a$.Rb,餲MBWWxh4JWWaSit]8NÞP2eeex<eeeTWWSYYIqq1 F&ɹxXd cPel6;0 ށ8c~/ %\=X>0  ;ITH3s9a O[VlYEEM7) 1q\& mSD(+U=Ex݅N<ͬC΢QNX$ئ$Y}워v-f1\#ͤұNoxYw3GF7{m&}l]oXHtwKh.tat E\tGZylKDT:F2aЙ$ґ/<> :7?} g] N%ƭ?+¥w^'K| 713}ޒ!|z&NfD磳,lee%tP(]n*BUU?|Ν,(,y?t]G|zCW$dY!9͒ڪ*aEEE[;(1$ FEIInUX`<UUU\ Pi!,{A@$5l^ +qygT.rIx 1אΆQpV."\(Fb % Na}cEu:cԩDс>$85exhXOe06n[B(چ$)'WlX*'# bYՒ<-δ9ce-|93uޑs^9 &>/; i8d;Y]Cwrb/Y)..fڴituuqg3j(Nѣ)**>^5M}4-J0,h UUD I$iLgI&b$S).UuPeRIeQXX}CUUN;4T^>|8:<?Y0Mֶv$A'\sґǑIdxq#O1J:{1gyYmfr6XwmWŒg.t/6B2m?)T KF~ EKO ĻT^+,X-SLwC"wcZ-tn""n+Cu*Nف%3B B4h":˹$غfU?λviǞ:20c~ʗq8!d !u?_݊(|>2 H?π0o<|>~94Ӄ sr?Y;DBAףٴ|a#QߕbpP]dqon`Es~p=u~p_ԳL&СCd2|Аy̙gj-|W9xꩧ 5Mp] H.(ģ1|iKO<~[ċ=R2:wVʱShJH;t{y RR0vL-UqڽUu1v x7q@',`E&b*8R\PMO^.b#8zڅty腛9^;֮-Hg "THcOg4fcdw\]>8Ͼu/k֮bp8**G1e1hѴ el^&> l' 3waV`5bn\|x^m^zτ# %;:bug[az9/Wr BwƼ1oQFx^~avF'¤#N嶟R40tֹq:PN7fcS7@ [5?`h0CJ\D}&ɐf@Gnx|L8x|n*#F3?9r 5x B7MH,exŜ> 6,g\|ɥd|Xh,C*_1eh? n:AןX9d-['S[QӫȶaX( ˾b>h".L&pSTT40<2Z⡬_DCJ ɒӀ8wְ;m(4x%%LӠ+ԈeY:cQ](هͳoK*3SBwI<_ ESz±JPhPdk)W1nFޞڲ,d8KO(Ȍ鳸ԟt"ҙD>:G̸,h$H GF"]x `QY<\PO'X Z$+INܕÙ:5®7vI:S1 GU GH$3 mC:D#a:,ZtBN5zS)zpBjjj5kXlg6%.gs x $ ް~c&;_ f|8~[)(.L=^u6>_}daI2k6mb䔑;Pf2c, T)SꫯpB`p%0 @Hg GUp;6pظSxqX3Bz{oɁ(JhZ%/ lC/ח?Ʒp?CH=;,qeNKIsn6Jx=m@y`^Z ?=:N{j±.Bd~&aMy71n~EuB_9=zFN f1|L"WimjfɫoQ1| =_8,N:pȔ$l6KCC@AOOD®0 'صg[ Ģ; J B^RXXeY4662u)DQ$Jdv:7x`~anvn7Æ 'd&;LQfQ[̙5ۮ!a $P+WPWWGqQE <4tCQS]ͿyB9xVZ̋RQ]cOP-D,Lu@@!jkkٲe },w]%Ib͚5SVV6 M6<I.s#3'4MMK1̽[v0q:<@2W~n:<#| 7r7q_'Jǹg1MhAZFm쿛lk[ͰdIʋo~ϑS@8IG϶}p/]?i:Tb׊ [֮ؠ읗_P(+Pd9`6z'J"x7oN8袋innr!tH$Wex<\.N' lMHӤR)dt:1 #OH$hnnγX)Svb1b@cW^cc+/gĉHAAg}6]Țի8TUղ~ }jj-͍XL&kY{ \˨C6bn43oI„)*&O*J<%l۷@ -Bf _O?~:8illWUU{=MƠA@HfbVq SǞ@(ƥT&ݳT˲p:@<FZ# @Wm|?=JOoɳ̣G4޵נ?HYRT1v$31 Is ^W!?ڋlk_ndeYl-7ϻGfCk/nٴ˂(IEsK ȵG}tETU9U%_LLV4mkޞŘ8q",j墲׻ⶁyFn# vZcK5U4nko;W\ez: swyq_"o17De.X4j;u]nU]Pw7cLW ?bw{Y,l޼#G4 ~L6ɰC)mK;d&޺7:{@et#K,DU$=|kf */ث$ruKy[3s)WHE>Ÿ.˦Dݔ !9T=6*3f2>p.3g4u/lURRO<%'yG}}:}M$NN=u"&NK/YA B7 ,Ӣ7L,Q% oA*~ 7"hQ#r~Im`$IynI8skyy٧׾ӎ===ttt|r,bdY6l@}}=TEl2bٲe,ZT*E}}=7oF4/^eY,_zzzxxwI$466vZt]gѢEڵkimm%{xb8ͬ^0Xhn:mF"o{DhmmeʕɢEflܸq6-_Xr%eh"2 7ofd2-ZeYXvBK.`ɒ%$Iٸq#lEa&+WH$?%KhnnfݺuhWx<ŋm ô۴xbt]gÆ l۶d2{4[lɷw˗/k}d2,\0_v`ɒ%b]D:wi4'26o޼]Eqz{C}7l%f׽o%Kaƍ444NuŊtttzʝS9r 1|2zl޶56`Y+Wh4ʒ%K=ªU0 #׬YCSSviҥaYbvmڴiNS0suV6mD&aMl.l!{KWw-[+uswX>\xyZ[[F{N֬Yt]gڵ455H$mzFziׯa6uwwʕ+ŋ֭[I,\wޙؒL&ٶm[| whjjʷiUvK,ɷiժUۍ6lT*~wulٲ%zϱTjs~_b͚5{M|NC,+ PY0m)ljֱr{olaIt p`i (<#}|k~Db(*_SLRXXHww7@t:]נ`0HAALf6co_<oTTTDOO>/ vw_{{drkJ,+_{w:ȲL,,˼ABCjG\8knBqX=b iݽr$PRRBOOUuQVmxo_t M|;xÑgvv<HUco `vqb*.쨪u}N3ߗz穷>(Ǒ)'P]2T:OCwIGaDa=jo~@0OzF1sCo}MqE_>;#A_17sLJx`|)S`{=TUEogcD}1z>gmRn{^7?qnÇswszjƍx#F`<3hb5M $ D:̛{ 09Cl ?p޵֎$5(~q2KW-勹׿* 9t}( (2(?C e;8uvT,"UUU|8N|ɼvek /'nd9x%8T7z\00>ʈiԔoǺ8U/c ;?SкƎ5w ҇ڲo]~HDQQGqz(> 7oDڕf)//gҤI̛7-[}^Y:|An&֯_ϨQ~"O W@-r1gNyGxg6d0u*&Gy҆㧺v0E2=nj^} "r'}ULv½0{pā(Z y6q تGLI#bxݿpk9lI4wn`ˆ{+R &/'JM}xEQs=ϸ+{keRdx^xKX>vWU\ljZJ4WaIeESUp8O479v 0\qPRR2pQ>G +2MӰeLLOEއl!VJ~v9vdA4lM&8ف":JvԶm OFsк[QQ6HE,>w-_pw*Æ 7ߤ!k֬tJ~!vjJՈblݺL̐o3f |oӦM`׮]\|XE<gD"f̘mXhapĄ aѢEZPB{W?aW8G(soaHF(A~v[Wuӯy1 P:RgÎ p #IgY_<;98H۪2iv)cd ab0E_OmVt/k_i|7+9lǘS5{` ̓ P)570iԱ+-U5D^"a 0csiCۛ D@ ѣ4i')›AuQH)Yr%Ce׮]N 77;v0`^~e ZZZq]wQVVF"@4gzjnV^MMM  7+gk!EQhnn{aĉnn7}a}裏f̙TTTvQ^zq90|TUMk{H濿 dqKxSۼ?˚.CMe%)/HQnvԮmO9P$ 8rI$9ҡ`Ͽ]s1z!he'ygp1^ޏbY~798ēEI9'rϗđ_}&IIpߕRgK_!U"CT:DlP&ܳE@HJmv,)ƈDb=H} }ӫ'oV:*gܹsy^{ H\.^/{/\.-[g̘1lٲ^{r6lʕ+4h.˗~9uv9 `#[oljڵ+Wrmu8ݻ9sxBлwo}]ENj$8s1㭅ÒOP^TwBvKs{ d_ڶj;v ku2i8e/7t(+3so+ Ӯ xAB!&>ū_'!Gf~ӧ/#??M6e:GoeK!jK IlJ:w,P!%TR$VJ@L]&pi@7Lr!04[njV0  6*8ݔrlp@$tD|5m"H!LUQpnds=Y] B}DDZlҒ4I&?dHٽ3<^[1jq {^z뮻X,FQQ̘13fPUU?UUR9c=ֽsd磏>"+++-(((Ca}IItcG}4>~%]tyי5kVzB&OɓyYr%'p;v`Μ9̚5+_)^eKG W(o/z_SLKC~ǎ㏙:u*z(ov:nOh6ma8hI\uϾ2t8Rn 7gTE{h51e)lܹGZD! ٸ+n8!n@y棫m;A^gY!#.̶m[U *PZ8#&_̮JHn}.<^yE_cwƯQ?NlݺSrgd7][0r-%#̌CM(#vQ$l*,F+U(FDbq"c:م;pعx1"ݿɤ*QA]$a:*.(*I4b &0-?㣏>f a6JK<#IŘm.2퉮)8cH&.~ UUqCEMӪI}~Q54[)M3!2t?@k`uE4i&1?Oyw(((㬳Jos%+tTWJIUU7p?O_{<J\=usف"۫Qus 7|ûA(ϛFߊ>T)&'%> }Cik[؎Eq^?׬䑗w,ƴhc^~#f3i1;9m/1t7en{kRL)լm t4uGknEftZ+2c@$H"H"0S/@V*RE":#joP<WCW%q3Ni-%i%@q0eJ7h~/Ix׬"t]kj] m&Yz7ec[q'm&RL~0"ѷo|$YLaaaz"韤- &:QmxL{裏FJݻ9r$;vtMMMlڴ ˲2eJ; E(bŊtb'9dOqUV}F$JD#H$XlY9sp-#'XL~v9 WƝK;JgS߼Gn\CЛg7OPZ0ݍym$Q"t" |>|KBLd"_ ږ*(=Eތ98QW)DOwdDZb#adETM"@@(˲kcuE%K+M(E2i☠(q-W}*u;qQ #lTaG6/Z?BOK*24imn0/A}Z_SREU(tt1ClBUtFM{kࠪ3i]עN[[PAQPP@<Z MI}(ȃfAgP&h@^E%E +֒#& !I[/@b0u+wbQ tصm3\DG)*-EՏhn0VRʣV^^~]ٰa;v_~i7~x*"Gy$-&S. _}t{{;xO~~~??. /<-Xx1r r1w\NAg4in|0Mv{~k^;8;w.~BJnFJɬSӋ:Vm?{gJҊc1"o.cO#`%,D p$À@m#6 ym es)*W5x\%KɽbL;tFA^WòR(ѨID*)[/xZ;;(!fǜz-\x{Sۇʾ2z! juw &kQPPoɯk %tL~h8FKSx:R D,)e TE\  '$xMQF~w189#8_sC?|lvܧEe%7u!}ՂKS8_#<Nʰa8묳8ꨣ(--ꫯ iL:]BtRZ[[ B̟?9sr`M7|={v^x< |'}L4_~0:t(^z)>(sƍlaر`?k[:j1p Ouk3I$!hu.RBIAI^xdy'>-1Ǝ*d6;-l^QO1q}v=[iL=?౗wr]S_9xֻEQJQeotM{y(6|M[ChB" ӏcdS׾n[(͇CQn>!DzmxECgUdpDZE2$7o0žz)M?juAA+D!O0<:.p5 tu!t:m2@J=c;~YAliHé9q$nl]v `4o&ZHC}L9p]t*m]uK̙>a `&>0֖v*47aqq(BTWfXj-۶"͗^c)%7|3h*3//Eyy9?8>*nEN:;;5j*Eb 8918N8z-vjCYYmt9E(7oCSuzo.*HM]c5=0N*F3MU]{ >ʱTkbŒzV||_Ia,.YϪqB׷M KF<>UnB],|guk[),EuB-Lp*ډiul۽[2qLp:mutD3 =֯_QG5\CQQQC2P@sl&f+1H+#2zA\v%tulݺ"w P['fjJ6Hbw;UM% yiG߆~Xm۫ٺuk7p9GٿEESs;6m{x<\4 ۲ڵ ]0dH,0܂Rٯv2+ dٽߚ˲e˨i$3 fgzimm㠩0~_-ZA&֌夢R6(L_MQR GAqE*n7 t;vPWݼ?0 ?h4ٽغe3>A^q:YΠ lZv;Zxc`y`0inEQD[30һXqhq`AL?rj8\tqLg ]aKs xN9m8;H4n!^'t ҃O>9moo緿-/"y饗xW(--MGD~RNYY ,_~[K/;vpaO2qD^}Uo?.]ʅ^Hnn.#Fwߥ"׿2uTrrr|<B!Ν9xw)//gܸq{ϫhmme߻kH"QT@W+T+0yv!3NǖE`6 Ǒ]FG['V#Ètĩ B弟ǣ_4HG8mK~:$$'Gtڛ x=~5Gp( @W4Jw-Ǒ֎$>N,:Cx3!b(`ۨX i&t#i矽Ï{WE.<"IҎh vPT BvO]NS|ف\v52WU0( ĀᓸS9Y<~֮M7]E±'^@uU Bg}ƎJW%m4C(ORmf%lY&p%3`Ӗm,_3iv#G3]: V;܌.@B49+8Mmlذw\ZyMiKm:ZhHgB˗u'"=zlD[꿈7DX8*ڸ[lӡvGzژ.B*4uﻫKm¥!D*QAcc#gO?㥗^R)N8.oΓO>_w=ٯ;w=DxOGÇ/h4ʼy8q"y ''kϢ:sB b$ދx< :Z{=T_EC Zlk[H %xtJJ $PsZ6W 2gpwR\\ f Q0$ Et;(,Ȣ''ŀ޶,C!h@M52Ҭ4-f;8BM[k;O?6/--.by^duDAB!ɂ#A5v3J hjm1ntW\y6Vg ,t[m 6M흼+pY;"9tf6Q]OB=SWLH"G< ^.nU nĎ$P"H dSod2U.[LA)(qP2ymZVVEEEO-oRJ4M۫&}OdĶ.EFRD/[o>saeN?tn77x#va_?N; Mm_YgEee%uuu|m9G}GyG}^z Ƿe9.7Q)RnW2^~x27Cx -( )HpE;w1|ZC\^˯c=Ӧm ݅(8J2Z*ꥀtT,jga[1dzDO]RRƥjض+UQR V~K.>u%KVҳ94iթewM+7Wb]fÆ7??xOavpˢcF$,HPMSC(Ruat͠p0]~a׃>Ȕ)S]娜rIlA[<Xr,cЈ}RnC= j*s>#}Y(`SN9e7I!zʾ {㩬dɒ%Os7#3gɬY(..歷ޢN:;wҷo߽1.:^.ۮ+(z4։km8.9}&93e'|h<^'@Ҵ.Us,l޲ma(͵~ W0=/e;,ᥩCdĊ8w$5x..Z>Rw17\y!.ƺp{]$۫1" *]%D]RP$]d4<~r3:{!77:N<OJ?cDzx⿻-g}볞vivi_!>(~;'x"BN=T~R^^?׏C= &PXXȊ+իWO?4_~9xgyc=+ߐA|*i֖!klҲm}o9F$N< {:{5U5{-,|+/p]wk`츺MMCA}}5y~֮}~Bk{+huREqy, qP*99tĻpF7Cző\tl.X±8;14ılb1 x--9t5kdy2BLTʉ'C/D̢ ?{Jx饷pv!%I7a hBcb |*C_Iq7oK,!ܜIb7cOow7}m'?RuӧOgӦMTTT0k,<@L^زe sca;|G]6M.ٮ s==܃bѢE?1Z;"&D)MRI$6ֶ^_MKK-#GӚد $ w_K>/HH(Ʃ2T ` H6Rͼr5P< XMgg*AFS5lJ4-ˠ+Jec:9c돼|\3a$̞ hlT]bVTc9T'fEH$cn7IEEI;tWSch EB˸_0z>L _3Ymݺd2IusL73|>3^{5bdeeqꩧRTTDNN< J3]PGmh 2vtt o~ zs5BIZ ؎ץQ^^yD"惷^a[U G/~ep|p~qgܺ ӱPPA,`mc;l?^s~wǶ'mr F-7_T@8aQɔMŲ, E2dAy᧩GQGl޼_..t9P+17T$H\tl,'C2dTUjOy%54SI{s9^do^{4/;<@*nƌo— _pgnL&|ߟ@ tJ ׇ"^$6RX8x..R>v^CmM#gy Ww~p~$u;k8̟w@ uE HSK#/^ 9Wlؾ}LV^&@n ;H$x^ lܴ .:0Vbx6XcgPG"DQU|>?mbu|4pd"TC"IHEY:||"1lG5Cw^|vzAAƩ^7o02!H+<OFϛA?2f^yF *{ygN Hl]qpA01|@~{3a FRIޚ>9rvVoO>GkO‹ ϣX2x|,YΚe 3i WbQwPS@,76A. à,?~X,~Xn N:e&7^{'?>~1MsG^< /O <Eupd*ZM`鯯ڽQ#+39xOd4tÇfբeыCeF6lwv 8*.̙UUzқAsX墰08Y8;nwd2$8D(6u 1Vfsr) ?> *SV1یK3ian9oJgW9K2Pv܁XXN6瞟Ù/ㆰ{w+;7rʙgr¿H&hmE* b1-ݧa#rhoNX=|G 0?a,A5W1bHTx82ucm3ivDijҩ<V\α'D}c#yylܴOmVQ>[[ocgA]C(nQI>eTXt=A4e5K<ŋWk4cdg{;p6d(B8b&!B49`!Wm7^Wmz*3 <@v--U0t]QvlJKKN %N2Fu)("u7\R+ ϋ'f?`̙3{={v:2o۶1H{1MH$Bcc#msg?^Ș}bPR| K#fͿq/^r.MP˶Yf5ջp{ODشa=@{7_C[}O>z3h"-]#>mwaCSPGCc-r8H)UtL;U bm\zѵ@6n, 9XdͲJ: H\X7]OqQ)}&6ow|D3~s>ӊӴu=W~Fxlsyg[iۈ!f6JV233ig֬Y ~wΝ\vep ?п~_qwgQTTDWW׏J~~>C aĉl޼{Ѷp8̮]2 %:;;)//3ϤYVVƐ!CgƌlذGu68fEhi~}|g SĺWRT\D;nx"A$CѠp 塽 LJۧqǀc̄vtF ݷe%ٹSWۀ؎dw$nt,_ .+u=UB5n>zG#fp?j6 ҏKeWN EG # j>Fˇ q&//}۟.Eu`Ё䕔Ps_guHdT{.Ed>}"4d=W=۶0-@{{;DUUq]KJI)=Ze{ Ba4MK[T奢{˲P%AJ$oPe]]]DѽU8Ckkks۶qdgguX,FGGG:a6ٸA<OYύ~}ٶMkkk=˲|D_wH&{/ם`0pP(SKK mϓ"''gc&Iy1PU5/)%---b17cömx<w<~1ϻD"zD"%4srr2:;;bw\1gEQ:;;\uߏF466+9Cnn.o;ƾ<y @[xط E!??smo{<h&=YEkkke w4vXƎ˸qkx~\uUi!A8FDJ(Xvrǣ:PIܖň#Z彙jw˟+1|~V;(RP!'\2LӦMc׮]455 z?J_dڴitttXfW4ZS__O4Ŷmꪫx+o MӾ1a 2H$BVV| x^TTTj*:::p"?x~馛hnnra&}1mۆ#3<_6x sMaҤI]v}QN94g_9f]]`&qvm{mFE!Я_$L4N K.Jy^vM8NE]ēO>v\r w}?}8y׿5W_}5h5g`Æ Gqq17ofڴi|0˖-k￟>\.D!d^n馯oFzeeeùk׮o;~Aּ+f.c֭Bo=,ʾ\0j(.\H[[ < <;Gy$hhhs磪k矦&eQPPo~ozIKJJ0Ms~ Iv~;{")ewYR6 T=Y)˯ګ2w #|lvֳ|Z,[_rUGa WNebnNG1LBuLJ~͹g>L:g}5WZW_"3{x+G[𥼼ɓ'g9l; FXJoL0 ww 6miL1\/G_m++ۛf ]|m** R:{E6R' :hH )SB!TG"( H@JmݪB>G #@I(zO:Ӛ/#m E*J~AJ)RAU!%R[H=LB#%8(w򄾝brP6nՅ[Q5MWqu5XC7@Htp..'3y88|l)ƌb|lڸ`ˏo׬a,nw r#1i~4?:K;q9 I^tŒT.cqLl۲Ǒ(@S5eL i8I|ۚ߰jn:S(1nE! MXb=q{\@QFVe" %%k۷R]NdS̄y2 ~׶ F{Cd( X~u5T`q,[͛gxW-' !WycǎcTUB4TEt!em4uv{8a?(VA1+mYTTr0+o`Mx=^&MH0Ųm4yUӔFC{ֶ(ضDQF 8"I X˅4q'Q"n`$ 2*c"Ub(IQAWUv"$B8ܼ P<~ЧO)Y>T>6mp`*bEy ??MsKX*mmǡ!,_Ӧᄐ$QMCErVeK ǜ kҋ83Dv쬦m'`6%ģIJ8؎^E8cXI+|2Ѕ㓕;X{( KÁ&2O.>] E3ۧf} ]}A ]8([ϯUg3f Es[+L@m}3Gs1Tz33OdoŞ{tGct$ׯGu^eW-n,H$BQq)C-5ttx0\tK8MWP1c! rAICC%]eYn5a -DeQܯ.Cۦ)<1X(KgUx.Ng.-_9OG[; >#gcXr%۶me(U3zHLb{rQayL;`*~ |>CGg@A,X)%3rYR9dп\n\n i$!|>BK3PHd""4?yLY947t+o0]M &g&sԬ< YYHgvje<譸tk.?w^{/+PW'f4 8H ݥD$m4M%WT҇$qv4Eٸ ;, ᥩ%^ s<44ݻ]m01^ 8456\̘y$@_q%l'w,ĥGVLKs&M;dfA=IN=$Y5kV !4-/L ~p{d0YYA <6R`:µ*$IlqmxPP²-b(7HT߇iH3JTXD SH0/.7V֯f‚d'?0y#a{EV@Ӌ`PӻMnA@: Cئ%- $h Oˑ'x4 ܊ yFG iEj^L)7v}&;˃GLz 9yVI [vؘOǓ@J dtԨEi ǥҞ%C|.h .^3eJJsվx8 8)-L3厠m#1 3qN><,[!ͥ @knF˸1cif1oBjˋ 1mh$F8_߾4}>;@8cRQƈٴsJJrWsGqQQ،RGJJ*JIg ZI05;2bbU[)𻨯o%j}`ٰ-;[B0 :碋.bKU-?5xFH,N ]\LNʀ_L|iY'3keA_ݓڶ8{avI$6! G0$++~E{Cz4|r`,TE̊lJFUwΚI{S+Wlr >XB4jut+"An~ ӷ9A‘.:Ed =o6xDN ,YO?%\֭b@_cxwd\tŸ hmmGJJLE|ȴzfO8vLvlBc} ͝aj >O[*f ~_[ṣ\eD$+ˮv֛)KxGOeغx!En.ɶ-5$wDL 2kѓUo&@۶y{Yz5`OQQc6---l޼V֭[ŋ`ڴi~{eYiBc%Aw@D1r1툢ZK~$i*K_>444s0Cз"+itgS4I{h ;bk BgAD! H Jǥ7bd' "bPR !"$h@>>JI8!: p!Sm)9(@HLe9oS7nz4-tkAQ$R8D*R^U]tl!%$5%CU6LD:IR-7^ٝr"IZ!4UKu:H$BrHf>p*$;??>$M@iy>m-!&/mX|~=?AqStsנW_V6a-(bٴ9G:C9P;nMq!DT$&_H4I&_kSAd vɓYv-/X|W{zrB^kkkyO~¬YxGO' ~(hkmjVzϜVN9$֬_ź-[=(vlƭۙu vn/ȈÙ1s M\+9>s:?ZƏ˩']G9n$n頛&F1L).l/YaN"GEKH҃P%'[RכHTUrFU%HSI;E{V* \3EH&@4YV#%6)BA)I*\# e7JAtnH?|W|+[v bh*xLEQSjǤtpm'hinb˺ kXv&|a[]l~R>X#'WXݕ}ͧ0ODwoGzri(9ϠjFCFi^>[͑gST[fz o ر{3lN8B]mT؎aj9b &LbՌ-Р=&\* 6vIBI,LFȋ:h?±.ꫫib9Y9'~ch((|8e:.A8҉PuB P$T4T]'a&q.Tm[)H B*8ݶcBIr EG"KY&&m'}HeXʽ|IeӼGDHC*,M-)`;+"`.ْ XĒq!P5{4QIIY{u1Fcwϼ,W\vkcd ΦOxoe5ee%(]*-D-/n3Ve:t&յDcŚm4uAaéީPGL?͍-<ܫ̘2ISPd`^um 2;wҕ,_ʩ=UdgQ\ЏF'_'bڐRF(+TvHE{T#?۠}躻:;1Z:)aD:Z(.,_ɇ~ 3Bj*@@OԶ&s/ks{Hq2R\uUL>}*d}(M !^â?r VT]A]8#BEEE`:G.!l0U  2})[R)&RHj-eT4@HҬP$']QIT#-u=4T&|F#/yaObO{w7d"dG,#KYghͧǫɓ'SRRG}~IlѨŽz$uLiXJ' vp8 :]A8h.rV%D҇ဲ׾!TDwUA: H%_$*z׎$MȾ׃eGPl8- [(tVʔTtUʔA.rH t<EFXh d"pZ 33w@jp'oI0w~+@ϟ@(jDJgmwe*̭4o^ˎ*.UU\t8aYKdyGx%f ut" ۶16 Bt$8c;` 9@jA& & x5 PPkgRx~ꛛq4|vnOPB,icYqb;q $Sp*$P\}п_ڻXb^dڂ?>B ]VCӧϷ~L>گ-o!dEFT'2jѡljl̮J~~_r-쵏22t7d>pn (݀ |Uy!if@NX*v#t[ڣ_KY{~OxQ={+O.pv=tkBTe4PqkI! {='hG:H.{q,*HLU]s [Q5ASD8qikkgwMrNw/Wt47E v2Hܞ&iV77<On›Ad?>'NqlڴW_}zZ oYgk›p͝ug\8uWu+Q%B!ܓRd pI4W|!U(# #x2d5%%؎:_Zv'*ɺb`d|y)RTcێ]dLSk#:`xD;!1QQqSZn+Pf  bF4T$v Me LL R*T g~<;ÃRTXHBqI]]x}^|>e񤢺voܸGڼ\{}PT?ω?XAMo@\c ]X U UX8( uTSl@&Iw(Q7HPP$R:r$~P{+>&sc6ف8Rz1AJUqR%M6H Jƺ@J4UWtr 7~7[U9JKPTPW*|*MdqD;c8ES5vSe#2^xoLgd5B4i^ۮ^l铮~tuuQUUÿ;?=h)}޽{ssڵkLeYi?^UUפWYT,YH$°aH$8aq'jO212څ $R(B,EEL CE$ z d ګ;0jc6%:%㴀'Ėq<b$w$hD H-UJ$HOiH"6-'Mk1}v)QCUv"|F6Nc…#%vwW44M'm@(l,,@ah&VT#45zLlhϛMcc=fg@xT8BStu"  eZcB{{;& N \l;ՋJ^}U^}U.bB̛7H$#LzhS\ 7`+*FGtDGc%:ڌn 0L#$$,R `iwa: L?s<4X8b"@ڤD E*l+Nj 8z6nـpR LG:l۶׍*|8I w'Ij.a'"4v)6,Bz}pGoU ZqErQݵkr .$1avIWW{*ٶ]ױ, 4m-..0 !///N$,Y?tt;KVVr\s a&t?Z;۳吏zQF OII uuux^8G}4_x7hD"JKK{/,nwf`f)`{w6(7ɐNKG@G8Ȥ $l`pM4wmCt#B-T"IpsJEpg#$0$$ڮ !*46c^[ e0mӶpn<4Ww1pBh.VQ{0L+@:"m&KGT$AiBXĶUtZXJWCi|6g [hظ`vòL`x=H>I.*n`GCM).ű-܎]seodM D:zH$ҳ!=gΝ~ƍGeeezx]Ӌ'xaÆ(D{{{Zv%S ^d=لI,cN[[B۷/999޽m۶awuW]u};`̙{-VXի1M}2m4 UJ' nwo HG-¶m\.d2S oD7j8DVףZ(t6,A͛ٴ CZah^l$X߇ b8e^ӌC<GJ_GEZDpcET(@Mdӫ۱1 }f˖͘F0-"voĚ1UmaV:)6Cx3 )LGŞȩ8L6-4yYt)L/H1-N[\"x/VpS]¤OP)?;Cx3 /7/!rӧORiӦvZ {{,%B&$$Bq O.v5Ќ$U8X TPuPc.3HI^, hCba.% D1!dAm7ޯ޽;!=. h4J[[/'|2ռL8]Yh~?mCֳo˕TrBWWW: ^/={~Cvዄ7ۍ8bm2 8RN1#iHT]! 64$!(JdC6JK{#iδEKBj6`geӱrvU, ۩ nE0qS[U"{jxrMwR}^(QZ<^A>vc&d|*X )%>x<XHG;2UD*fHU^z  Hia&H  DGö[T! 2|#{JZZZ,+]@Ǐ{̘1~3ϰeعs'>#LOr̎;(++KG{HiOoOT=qJWW 5'F7o7 mH&O3lg( 04&ٔS ;jb8^D4Nn n܅XMĊQ>Yeҥe5BҴ9_R!JAa>]wMRʔn E %:82v+)T%nCLU5Lխְ<&m.E86e`SxrIb ] `t]mj,54g(6ض? 2 )z /)34--Y, ,68tvvrGPWWGMM |͌5rG3tP^/X~=Gq ,`hFnnn:m{&A4Ų,n7>CGGc]?O\.\.3 (TTz|xɄ(>:"t(1J1cq:jP1gf|r+=΄%|sU4tEP<ի&q *JFsc n{-ґȞH!~pax44j u-l\t] 8!(8؎cṳ Rb])-Qv`NR -6iË)U';BA=HiߛW[9 2$SUU"xGKK ;w$L)**C[[_I$L0u֑G,㥗^"//aÆ1b;8rrrرc~:wh_|;wW^aL&inn1eLdƍ㡦fD"[,Qz45A,Elm8F6PBAQ).mK u֩[GwRe|-!8HGEJFr9x Rv~hE @H2u* XNBV-YEKUw*mk,DZ ]Y.FPZ_ow ˖[AUPSl"D볉妶0?ƍ$;+5 ](jJRǑ{=lH,p 21GG8P] G---TWW~#<իW86l`˖-Wk￟QF1tPF]wE8N'=:^q4-]M4$p44h{. ,:P(]aMUU ph4m(o;_5jTfX BlCD: bi!QeHik]sYSpj$EG:pgP.R\ғֳi*`tbx|cwUTgrFV aQehTkQnjպZ VU+ZpAP("A&d]g;{MX};';3̙3w<9H^ OBCӴ5FPI >?c&\H$;9T1~1 IK`0#;6蠵Mӈb5?0?cremҁC T) @ȒCo-+!ATE4m,SGǔ%l TH"Slt$,2 Nf$PL o B@@LM(=KHHę* X}zѻO/ DU,,;Z鬊yuUQ%3Ad#l-j4̈"c&ю,z~9';zD~e}35x]p!Y簾&ݛ{鰴wUZBLjs(B<Ge&MDuu5̱r999hacV$ZZZعs'~8O< "L[69. H0w`{ ZO"}z;͟غJaDʰMHe[5ݝSdǬx/(i$v<(* -IJOb.TG9No7aG5\h'ze[4G[=m475OsS 5>ll`cU$<L&M($Ja[vF7۲-$q"L&4գ b6a@UI M~p"E^؏ш'!Ր,I! Nvvx… .Ӑ:֦îx<kz43fZAUՌޞxfL0X,F$!c7oFQZZZﺶk=Ui_.I# rzv3Ѧhx5#jю9yt hH ֑$Bm(@R%tGQE"J%b,)#F02^41,8@2P$3/C0vT!>jfO2JYY1%_@"jw1986&JxBeYEU<gΨ5'mbK&CJfMѰm=[16XflJKuk Ya.y*ϘNͶ_Xn--##\ׅ .=^] G43}Kttt2خpd2Skv\@W%D{ nK0gq'O\dY&Hd9 f6mĖ-[صkѫW7d2?`}gp@d$̽UT[Jv~994ڋ'%+'DS}@@޽Dr CرBTK]sQ<;Q\\HMIa)a^1MIinnxHS AV0L4G "c[R>MAæCoCIYijZhKQZH4Kg}N<BɄdP:7YE\ׅ .Ec74.2/^x^;8nFY>L$c9getDb!'nEɬ%8*vގm… H`m 7C=c=9>fq۶;v,˗/dr D*bǎ477g]w=`}=iCO>xh4R)۩'P(D]]æMfڴi@7˲2鐽^/555s9;\wu,Z'Gep~ۅOL%ll,naib[nJ0c$R 4 ik@(AJM(d*XI KObYqV;q#FNҒGlKNf݊$0 &J1$%I~~%GM-6}^QΠKL=K2ڎm|bmtꞡ"aszlg-hL (݇@ˏ ݶƽ?0s0t3ۚz:U)A uG +n#U&0 @(5x]p]~Z}YN:$ NG}}?9wygƸH<'H$2T׳gJKKQ={dp 3իW3a@FgŊ+ >pR=Bn&\wux3*[/<>laFҗ5sDC AߗMݧ4mA x! {x{oϧ}Wl%'lJ |߇mm*Ü|B=MjWY3y,X(̌7FLx5O9J7ݻٸq#7nd˖-@>EQDQ$IFIRI]=$GWOʁ.JZ=rLc&I0Md2-P_~ 0!C0tPp/@zI#F0vX K'[e]B}06mGf޼yqjjj3f ׯ3`f7헍-_8tJٍsl6@zL¤Iضm[RQ__Ϻu2hD^^ڵVnff͚O>F:&MD]]@FA"mwO!dS$D$Usbq$H%u^ Ja&$׃x$y}UdLHD"D |^ĢIrs;OOPVRmGTD,-$KDٱ}P,,r͡a#S\*3rH***=z4'OF$ Ju=r/@ IFikkcժU|lݺ."&Oh.g4@ ̦aUU3ִ!yf֮]ˬYXj3g^N`Ŋ̚5u֑E0pw HdƠtp\Wet[\\eYݻw 1IH&dggSUU3h4H)ݻٶmcƌa…vam,{eܸqݒA ~?P0 _7Ml]1NƵa1M챉'訋 I AŧQ4=2*Ht(^F?G,TUhޔϫdLˤ8A#9E:omo~0hoĶlGAJ(¶*wfOs!aweT,I$z1tS#;tz~-GGز1 @0IL&Y[ȨIaq%ܵƦF<RٽE4]]O`Iϵk~֮]˚5k9r$:;vՋ<((( ضs˲2߁xtH}ax2REir$&iii۷ge~kp-0 <$ѫW/ؾ};%%%,m ߢ":,N>d=z4 $e<כw ȬD5Hk (R)mۖ9ǁƧ!Bnn.e:::hhh SQQό3fz$%KpgdNJ*bԩrWx7(((ѹZ–XJT1MLTEQaZx<:F*$ P1 ( :а Ild:$n%5}o`O"XF m" $" Ѱw i& JeضH{H&SD1ma&q4yuc++2!H` 3 N\rz@7 <U(*M!H\\BUo#qIlX1}F|>Yt OB$FKN8hGM6Mvɺu' rCRTU dXAG,ittD)-+CUdRudD#( "Kd={ STΝ;d君4 iJ$H&cNiq1~7I4aΓO=E<wo  pyqpB8∌6mdWjL`~3Z[[Yp!>Gʢ6,ˢ!&L`̘1f2S]]֭[%avri|*IRFQBQ|>_f_He0ҧO***fbQ_K}c=㣺cQ g]JzοudI"Z-fH`!?l^|ig]˴J<}ɮ|0eTɩVow|7ʦ7bԑwݻ}g,+u8aL`#Q>__x^["/. tM+qUW1g6oLEEE7oWmZb+mX~<vm7 {N^^3fOe ,_ֿ$`z-,Yrz]w=蘺I}2vPBÎJh6 e,DFEd& ma"P; $zP$Dl Y!*]"H=c-Q<!kO~<Ɔ'5VijdqWހW0-0( ݃Q; ]Ǜae45'\1U;g7B&O, H+dn6FE߰˯Oe֬Y,~f9y-i!}喹94_x>w0Ͼ5Wqs_ lg3''_޷nF$'jVVVh"&M-E]۵LWa?~ 7o/E q/()v bTnٹMa/}rX|7ݱqǝ SiW ο_?]⊫">mW\we۶m=zT?seed7pׁ ;Zx(GGd|0) T  xT<@ˑu&}B I !l Ia[6?gaszԂFӼc1RzD"2l%L$EжK$;w7cjl"(d3 z' ‘4U4BYA͡0(--wضrby%:"ͻQ\T[Ȳ +9J4 ^x,NII1i؈i؝YdiJd"V(+~Wܟ?^x;vCmI1tݙ-0u[Dt΀:GyBy' \qv[BڋΌtR #JG7owu:u,ǟA?ό3xg82UUU~lr@CC#gL?hMBض'KHtQ6Dzbjڎ&GQ$pxMNm# D#~;X"T%I"a g@犎,J(iXx4dĶl$U`[Q>;oҜ/@<86l䣎gY dG%!;BrU7_ŀ>e3HĢ2.\"lU?A]'im2$ ; 2YW4Mb7oCwk À V*VXgI=H$|͛jWVVRQQ|<x4Au s .-U/\}mNP=R;wv;%M lOYi1mqLãJ#7-5x*2P{!?~6x`8~H$ 鯋tks2vX^{z|ZqJ .un|9Z[[Ջnm--2٣;'! alYgOg!`$t |VoQQd. zn|fϞ2t y .sgYaܸq4662tP:,VX)S(++cTWWxbE2~:֭cѢEL>G}SN9!?N…cjOm6n݊wޔPPP@QQdeec/LB4Ǭk캌N6k0mq8Xvٻw/L~~>TVVb.\#Y ΦiivCu:3-DQu˺*:Xh_[xp7M43jiX]B}]p_zٹs'F,/$W@A*iCk̮A%^p8LNNPR)((؍Rv?MIs:Cz"~/o: dN41 G24M~1*MQ<O&[WJiϾtbǃ먪,XM؅o LH. BdZc/{gJwJ2!gcݜp'3Od=y7߯<,WɃ7tTWVT?zJ+O(7 $ {X/[O>Q3.d ߖrڔ) x%:&JyӓI$Uã:cDGJJˉXдe3~K88n/uN;[v%:BD .\p V1W@"//OtZL⦻o"ѳ`1㴩]qXb')~Qybg}xɅ{E(70wEQg6q @L;TQxoF3gP#qkE*>+Zvg|tDYߛ 1"qM.y+aC3)nj~ !ќ2  o%~l):Rs~)ٗ]!w4F8̳Q ^z-On'.~ xiT\9s-y=gq NHTv'+'K8m~|:Sw @{[nǟtؼ>p… .xmu.ӏ>Ƙ{uTrsyw (@kS M>;ҿ68;!'o`F{04vۣ#?YvVl=|ZZZ;0vJԟ!#Pz0lGUWy)_vgp'U'M˯`ocۭ;rawG5Hn3k Gc n)/so.Qrf~Cqi.{a C\w͜rTf(l3q!/~)ؼ2~pOݠ5?bPЕ8q…`H!}~%1zvE<诼l@'YË/U0 wrJJz9-g{Dr/M M;F^S}F^~M3q#l۲+W2`(V\I~Q9}KYr%\PN1w?HL't$.g3ٹ>ݗKz m~#QS6$'Ve),f)0{\U_y㏝ifʕ +1MI`xW¼j5!M3d鲥TWW瑐Cy7ϭx6|̑dʕz!ظa-oZ ᬋY~QXr%= aPRο|^zl-LuNɷFix?d\޲$g>_'@z¶X%N9tջb纷 9[]mB7!LK{]~A4 ܚio)d".Pkgz8m A$ {"-mYե?څanK,~ֶH$(_s:9B,]ub3)jd K4vH>v؉' !SNw.xK{$tIǢbfk]t… R:ņE֚]#HDX DD2Oo 9nso0,B;xwyyj$I"P,y" l[=+Uaomz~̻L$Iꦻ(-,bٲe`=ECm'^)G;ebRzt*z!I{s=y,| /Z̓} _DV<\_2nhO$IIޥ`;A{&Yg$IbwyV|%fΜy? h[_zh{;˖-cwkO>p~3=zW0 I>`mSAQUtcʂH3 ⺛`~#̻*~+>^_$I Ü9s8֏jk… .%9jeCYYdee!<Ϸf$*.Rz eX_":m6k6\8 8)$Pz9|Z4;̜9nz FyA945qMX4?͏y*&m^\</ߋ%c: 2h+iwzZ~ '78 Jˣ-D r{%/ b$NOGsvy[;74:툶[6afJB^ysHi*sLEE$a7Xذ~l6~&6]kE/-UbD"eiE;Hbqלd(Zk~wBb'zذM>IDbnǞ~%sm[1@jB[;vQ "a ܽNt/~s}}2P EIϞ1>.waXJqqEqE]Sv[!DWu#QyA?{w޷}y- w,BH̆_bs}+ď?x#7_G=4[u;﹝7!!Zd7W܇r3?~+,yLB9/m߯s=RS5=rzk᲋/w/׽_LCgk1?>~6oɯ 6UmZֽYY^6ጝL0yv̹<`.vT*{>u4~!xK7|k>p'NC{S6G=3.[M(<Z̕?}6茡5[ Zwce@漳{~4}<$h=>Y)>xqϣRۤ>w2n Gh7 pÏJQi9p_Q6#aét(=L-(\*++  H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڌP 0  1Q)/7Ke,w܇&r(>|xJKD;* */R+T*s. ˒l8m#維!ܦF;sK6ZL9d9$3liN>"H%10 E8S8D@Q uOr F& `َCD1Z6E10u){EXC{! v-hTSH*4mB.(_}V*s%H>*i7}@D97Un00Wt7DH d2V2N/D] kklAgv~>N5DUN6{}&5EQ 80۟}!4 JaaG7MmR"~_}5;$9ȳ @)elf!Nc: s4X/OSm3k 'Jw[_EAp!ah+8 !,K$kĔVUӑRZyQZoWO0?h‚Z; DtƉ 1n9NJzls=7:7%c0iHy6d2q[e8ձ)}}=6"I56mj "no?e/As ]hXUH1mѝΎGW fM Xw,8цr,#oy$Dr[JbIeo{fIZ몿q$ZxamxD-瘟v;Ih] ̩[_n&J;`k^vu邼afUfOJ ǜ a7V%sy yOE@ZB,RҴbS=/80<$ .ΤTV /"MX4:hmYFQ|*$G"iFr ,㐧cԶ)qR*8F ~RDQD|$IV{ "׮N:wb m.wsqq USޠS~ !G c%M h'߶C1..n N& |?7D'JI.I ?,Na=7aVZo4)F{ۦL&#XP#fC?LpeYOETm}Aڦ9iΆKǶEQ,i`0,cly(h; ]\]7&`̧d!U<onn$'v VI4 [;B*ATdحVh0r:ƞ\TΠ{A=ߚqM$J>*2&I6ώaTF~uxi,W*;Sl:AcR((;1>B"yժS6d$|qD<>(Q0Iߎnn㶚&뺮%6==Mbkپ_Gg^/ /2q\2/@NGO_acGɐ _AJ`jmF$Tt<ltB\d2tP5a_>;mf4ǎ!ض f, nh:RKGc3KBH (OfmuU _m}|P1'|UMkYvm^KɚUև2"M(qdb`_Ë 社*oגvVg9߰-vaT@s1oIjr0t9ül мTk[Q߿]OLgXjC.1E"VRLTZPiVim6z RT8)+Jm6R0=asPGԮ(D9Wof<6$E)Od<~fggŇ1&|f| [5W{* Α_~_[(~+p'C.8.˵;v d2 9F@C xEᇧN[=yIXlWU"~ܛonoo?~8}g_H%ʃPjZZjP`C$ ' *8R]]]jLiV,)%sss/ol%=zeoYȒeE @ģ, A{ H{jW;;ߌX51}m)J"fUb,$I  # wndX{ I-9mN'Qpm@#pL%I'PBDZ MdoBn,<ٳ2xYٌƍ`(Q4VݩT I[⠪wz&+LJWWImdKKP`_o )7F6z®7n ./-Aj'!ѐ(777c{ xos:Jᴚbo $,㮚t胇!&Itux2 HE!]|J}LRŻEFFGMn8 ʋwhv؀b TU7]\\$ρө|>Onihh0(SbżC+{ʋa#Ux BxjJ ()M߿ov͑*Y1who5(FG+降)SO5b/|uJoz𪕄bLd221X${6֒OYuWh.vy?|P!F.3SiZ!qsS54^|*Ny=EUB&5uFf|VGDQj" lb2jĕU&`J=gу(n(^OCTf*r<@5Ȳ\p3Hc{MBQiC`P&q8T* Ԅ$I$IՊ#rgGy${7Y RiՈύaCGaYX\^Z"y-/ze v}5l~},hds9,O hZtK#P6qI l~uPB=pkw @`1Zoz3>j`9{J*>Ы&aғaR" . B},Uۜ[!g2@8oj2. `e4Z{sdO٩gB>RS\s"G|`v 5$kצgfƂA4lnpIs_ oY[_lTc؋>=w+_%4obmDiL\㼻KAy[iÁ04p~ah0.fUU5ﵶemiΔ}񨊢x磏~"w,Y4 N nꬑzk``m}":1 ~KLJ-ӗ/]۟[(``dJW,.//A" BMMk8R%ù [l,#3=3Ctg|y>HeTAp2hooGw}*B+rC(bYLvm4ȏZ[6m^8deG juʕoVWaDbqk$dj\<Datzb a53&+˲AAlRCbWExW-;խ0 cLy%)'4ZrztCv ;:7; PFzU(8g!O%I>{m h$BjQU/QhEѸ8yA"w,meZQ q@*碰<2Ļh~mt=6*)i:`lJ(Oxf@;RR<`P^VhmJ|_)HIeDV]̙37ިzVHI8ƧOu75544l MWon$IENDB`gnss-sdr-0.0.6/docs/doxygen/images/gnss-sdr_logo_round.png0000644000175000017500000001547112576764164023162 0ustar carlescarlesPNG  IHDRHAEN pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FdIDATxڌA PDahΡ"$O``KtVn^ ?fq`QuQ׾ l^Uy4m^)yVf+89pmSҲ,ע>K0Hr"N%ÑÇ}FVFP}6nk PZZ555c``WTDYW[kial&"\$ſnjb!1@E=,W@ [p,X<VH#ݳXCЬ|̵m{k!!M 6ڄ뎯gYXI {[=RU$YG[ykFm`.uQ+4yHTg4/`h:K"6\Wz"$ ?~..*/+CSMCM 뵫W8CRQA~~޽ ɓ޾yWyyytG) S"'=tGFGG_KSF0"!ye[[ې100<LRJKH_HPbbb"#ܷoW,[}9cI135gjd(g83CvV;;ìY%$I{;_~-^dϞ=ׯ][z9888~#߿)G}ꕄ<33ϟ?. `aa1c NN' Μ>,X^^,r1y99}=={TP@ׯ_pΎ& 5PZ@h@HH |||o߼a``066~YXXXYY߼}+Zʼyx))X@IAȽwa&s@rraUŋ"#?|o^ 1?xYZJjϞ=YHgNݻw/rͷ"x; l۶M^NS$3ظqႏ=Zf S;[[iu0۷oK/##4܌^EA@G@WBcǎ]8?5 nflh(&**$ `ceffj)",y&b !l۷oUUTdeKK_z{Ҽs߼~]VZ*++,۱}f+!.P_,"/'ߋ,۳g9s]MaDd0k yl߿&OW47740ڵs'I&IJȞw޽ O 9x ##uII))dN?~8v8ӧRde+`}9YYHC~!-%cb16:–ꂰ=*!.211UOOϨHb-ڳ{cccM`U덍0 m(ݯ{,/|AXP  ,-%%$|m###ÇYXX>~ ;{KJI112b;JAPP߿޽MLH```ŋCBC=+W0LH=]ݎ?|PRBBEYYYQq,;E9w_o-Z$j1C4[ CpMlgg'|@__EY~1JeeTo_^NAlT?+R #m:ZZ˖-de--4ڹS [ⳬ9**$%$LMuEÆL+-QUȭ[mݪԄUHΙ#'+?4q-MMEHlDNV> ffeĔIdedLQ*9y*ʢ""{w(F b""*JJ 'h -Zɓ勡A\||PpnZ6j^`ڃ:x9wZoh"H&lvhhhppp{{{}}F7ߐ BQ$&T*WewefxqjjZfg1CUeeLt40+3GG"`W:;ccb@Dhu2 .ڷrPEtv[B BbG/3áo׼y xw掠% p S$&9?\~UV`irr^+B!a,"4>>>..B(1LGD޽?l9JKKa!3gXUe%yB.\ǃ i;v|RLٞ/Hx\*Ɏ T Cs?ziKs3q Y`<,/]11Aj:;;Zf.qo\.b2m$+7DrRZ-3#t[N$gO`fX e8d2^RՒ-[Hhjj*..zΞ5-v%sfАH=˵:Ep^^^vnsz{`zRBlظӃ:ݨ8~mXb؞=P( FVK{+)yVѶ)mwܹW J}v{+)۷"#er9Fh4:ͦP(TKNShZ Ƿ ͛Aլ?nl gR׮‚p+Yv bIlѣݑhuuȥRkll\ͬ8i|> 1L"z^Eaʊ Ax x֏wUXPdgONMz`ؚaJ \@(l&Nt8sKp+9),DLJzr82LwRb2r? C%%?}-knsK:V[; '$6mЦVom~Ơ$N86mQݻwbMպPׇ"bӁ'O8Nt@-rrrLjmmt\qIsK 0=U١VG(Ȥ˗/76L[gҗ\tI"P IIbCQJKL ơC0(]/p #啼F<$J߹3g4-oI$>_,u}} OHME0_Tt޽ʼhT LRL&6lܸ~z*JRi4Bqfkffe2111/:ajXFFF#{~v _ q  g_{ % kc.ȓhIENDB`gnss-sdr-0.0.6/docs/doxygen/images/ClassHierarchy.png0000644000175000017500000035347012576764164022103 0ustar carlescarlesPNG  IHDR dj AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYsgR9iTXtXML:com.adobe.xmp 150 150 5 1 2 H @IDATxE'^ʥJ*I$@(1E `Pl||*6@E}`A@@)K@RH~wio>rw2Ww3;3p@ @ @ T+ "@ @ C @ @ @ PaRaPGF@ @ @  H@ @ @ 00#@ @ @ $@ @ @ TTԑQ @ @ } @ @ * `@* (@ @ C /N*@VZM@ PRLPc+&P,@ @ (`@' f$$"Tgg0<(u;.o$NP줿?Q/I2/fJd8Ʒt4?ԷsP&]@ P6bۿ;V&L uԱw%%&* GJh{ F63&p4x]瑈n4|N[ Qj`삨,x@>w^ dĈ6@ `@@Kڵk'#G|#H@zujK)VbW8Cޙթ][t#ǥA:]y=h!~IP#ߑ.(NP??lqn,r##$OxޟWϤ_z+*Lzԭ xW<͸VO5jH~iydРAҼy3ճɣV@ P sNٷo|N;1"HUEv#{~7sD5 '};mFՓ|eނI/G *KJ:4ↇRp7WA}e׮]ƀԠGU@ 6@UsEPڽ{}*%Wll-K ed6ҵucPNf.=j`v3g\X+vZ-ȄdO^{~u*|ӻ\>4WK~RtF&,,glf-֖_[.iu$%[7+:4-(ӓ-\f.E??ݯwxuԛ\mwٻr-ehU֖2muΫJZ*ZE:alcT;֞1g~yszڶ[zm$F#y8H4H~8pW1HgB5*@H@h4'ZQ®[`%fszU*1zFЦ\svwi߫}4cIVmi\RrdN6ѷ4wcu 6U0r`{ˣwf1sԯWTn-}5:V.-]fLKzA!';sKfF]ij] 6C μU}ez֪ SiI&񲺽l,ݸKՕ[~:V& RC 2-yGLScˆfYe Ll%qR,,5%nwJfzrJҹu٥e{o&iٴImxȺ{%Sݧ+oiZޝUmbN~[UBC%&'mS4{2ۤ0Cwz gk@ @H@f>dW HO7\#`UFCSU0ޕ_NhHw͐K T0Bo*HONZ&٪j'47Ϊ5C'Y.Ӕ ߸msb;9wh>HDf,,oY'3Vn5v-;i=gV˄jOfԗo''g`\{YUqj>vV(`sfw\o2L5I}b p6cu]cZy */^iR$oj?&eɘYk#}$˕xxJc:h $/`YMX. iP<ya*SSGV,b 4խC+F@ H! 5@RUpp#%`qwWf54VIɺ>k #(~kLȘ[հ Vȅj#1|PSqKI}OlX.j3e6cXv)#q>%u4-ӭثd٤EjC_uzWP&ᢡXn'~d麝SZfd&4U)YԺ*J>EN0{rSJ|9J|1L7e^p-Zku a< L`\ baap \\{ޠjU/N[mҩ۶ùf!ҷ]c>RSyPk|2s3LŹ{=qP7%[ջTd5ƸtW){4-c@4 @ ʁ@0 nP:4N٪ v exVf_-fTt|`ז2]Y--AzãWHVA)']6vتLoM۠+BxխmU&/oҰ15Pw9P ul@cEH 24>]*IQI n-/W9†!CkyL,Ļ,EjXwj >!JN\ @| T}*eZTiLfe`a* ֺCxuJpHz .mUhܐTb@ @0 i_QTA<*l_<}*yP wonARƩCŤ{X:W&jx~2)s%j?BJr45\٧RFXU>:mЈGԞBsf#Y*D62fr髥2(3cNتavٹ}CeNVfxM_tStVդהwV~٣Zk9A& *endw#*31OM8A:/߾WլJ_U֩ٚtRI:*VQ;L5>ߢ` MaB` {N-VN*״W\569'Wi7af9g 鑷3KVS%5J> @ @0 nX8+V@xѢHǗUwzEUP3'SNa6EUZ趹I /)ոu-ܥzE&u /VޙR7U}fvN>-~s@25.e`_:6H20;I՚Z7D)5~WCF=9g@[P5,'On/mgVlv"ʙhTK+eұy9CeP%gtnbe&=,3vNצuB;KjSK.Yj[򊖵;lnsɐ m#nf2'#eo#"/%t.DfLooOu@w u:@ Pyup!4`[o !ٮΔCmj ۉ p*`0c6ɌJ5<23 غ8V5mWi6(%[~05(x{SLEwd>q.n4<#Pzm[XtJ7i>j !)FZ1A ]7JPҥw% s0% O#솅Qcqd>H/F8`nS6҃r6 #Fe12j@F "79!'e…&)"ZxUQLčPrYaҦwRIA)?U':qH'1f{8X9.BϏ򤧛Itt=0 L@ dR^J(j@D ;mUƍeݺu@<ٰalicrHH3G b` -M76 +@ P^ 4H~̠t@ ,&j[1`@ 1l @H@6vuAmx}Lڈ%@ 8Fs֭[9n tF@ E "v0 |󫿏k  _I{}Aǫܥɗv@e@ b5p@ TFKW~ǐ"ǯu+L^] @G FL@ @3NY;S1\NNݹ$77מ=k @ Pj[1@ @ PbΝo˚5kl ڵk_~2gѣ_^{=:ter)մbf @ qR<*g>ٳe̙2d6mmVqg?+K,1cҧOcHx%{)SHΝ%333^Pיdz+i>@! HkӨQ 0۷o^ve>2p@{Gl@lbI >\7nl~%e|g=%'3) @ Pf>lKm6A ;:g!3ȨQ5k`1l0@ XxTp.pH KK2S}vKI&R~}cn?ϣ} @D ٮQ@ A4jիWK-cǎҿ-+VDx7uTc `7yd1b4hvJ !,$av-ZdLMҼyskرu 'Hvdf{cKg<@ To j@)@C390xS.]*؁\tEҥK3HG-ꫯ6`Btiŝ_ l2ygO|#&y!O>ii^s5V^z~G夓Nʗ$"p@ `@G @#S6bƌպukxwyVHA6ol $aL¤I )£>իW/9E>}}r-fBDyn3wޓYg%ƍ;C>Ʌ^hd @ Pq0)N߿_&N('0 0V]wuѣG/~ >&H>Ν+_|K_nݺRvz哟IRH_IS0x'mIӟdiD+~_X@ P7qT0#0n U`,vb_|Qع \rl4Jx!8$imݺU^)a{_k- x Cɷ-9󍁹̏Q ñ֭*F]@ ,b?ĚQ@ F?gNZ*U~řZ2( d, QM68-%##Ø>@[ICvj&0@~ș$~:{sY.@# Hqr52dI'} E!KӦM-Luϟz)@ u={?00'{Zk *Dk[O\|> [ R$.-* y׬Y3ٽ{w;!wKAw@ `@]}e} >Q'{vAf=1*oL6؋@1``' 6q׿w}WN=Tԧ>%&Lʼn}k4`Ƨojmx`dD*\jFifXY0??CݕIG-A 岇@ P K/5dr0 fرCG^uӳ/&$BqGC 9f̟?ߌQB cs$8TrrrTPv!H3N:: LJ>!rJiٲ`;ؖ4=;.!Ŏ (a =ğ@ j٧ZW|*&ʠ+y9crWA >=~\@ ()[>H?`0(:tg1)L?o q! &C:Aھ/|`5jٛdeeÔM/'/HE`ZH"@  )v.(=YWE$@ G؅ _xꧫ7!8@60*pyncꥨP^xoc:dg]Ҙ9sI@.;j`Gr 7cG Q@  @ @W@ T%G/C IFAXK: c 3vlvښ;vone4QSDU@ @0 )@ P81_&+;ka;n`Ď;>@ jԜ@ Pf8 :<[#F@ Pf>R#L 8QXbɰ)= @ `@*E @ 3qq4?* UWثⰎ@ HG$,q9@"b/a1@ @ >"e2J: @ 8R Йŷd,wub+@ PHPc  `@٢wUV *\L/@B )(qĬ,ٻwo3*@uC "Z^zv ' }2M@ j"/cm=p@e~cL2*t$y뭷kԓ} U `@`jިQ#G>"uVINDgdtyğ@ jp ?_ads91LСCe3q!F5@ r&]MtݻwMΝ;mLNzLLL99!~)9J]  0Hb^(PI:!D{U 5kdܹf7c&My6"_zgRuǟxí[tb'y6*@0 Gi,&<&N&D&R? | ɞ={dƍұcGx$E /F/jdED rA;% rɴ% .-1l} 8S~uȐҥKڵ,[-[XکS'iӦ0-ZVZK b.ƅ7[IT5j@-4RFNT`,p=]䡇Uo}[, ÉlcP L#%0۷oLK!ڡ@%(6mU~q좪w c"S21;l3TY6ôtW)37_,m۶0{ &@ !)F1c DO܌3'?1v4 z֧yF(^veNW7BrLAV5k&_qU ^zʅ^hcg U*~8unw@ !.As2!:h"wc+ur 0&%KXLJ\W^xA^|EG $L"֭7xyYRKa/ĸ2n8ѣ󱤪γ۴:?ۯ|+f?_,2WM `@ْ qڴiocPaJK?^{5[ F_t'1K>#=\93Mmr.q!QY^+}nM6lPi 2l|av`~~3cp@ `@ѶI=ѣG}`*[lNMW:(;v\~Pϗ~)H-I,A_0a~69LZ `($yvbW=veBI[_Uq,Vdׁ{?|A~`^џ@ P=ve fE&?O_ZX%%#ނ W+qXW#F0̋3ɓ3ײE/>j{a`X-y,RTck`@N8cnI"[UdB`@8u2{o=;cR[>j@F BڟI Zͅin#Hy͛7d`4ISѼoa,&~8v%4hIxvpCm<nݺGg?nF9ScBq#T@Ϟ=]qbx u}~;:ujRJT(J @" H!`20?;o(39J:Nee KBpgyF.";ČIVv(A8Al/O ޮj#!zsb'?)cnjyɸ2eL'8/_b{fg(>T8eU9믿nQ{O~_Y}/6ԍ 'pǪB'@DNA(j LɏA!8@0Ct%$9Az*=-~c`cXb 3qDgIJw$gϞ-9}1wwy4bɇMr0)Ix򗿴q u:F?a;m;|  ;gq-0`w]2 oec+@Ƅdƒq?&Gt?q(j0*uY6V]ƀV: p>x K #y%ȑ#VݑxZEb#~Tpz5g$a5$D"O>|߰t=yXX]=|ABa6w\c<X@ )+fcTetq]F%؅Џ\/?,aj9 xΰfeoel(S `@h(qHEXy`6V|Qς`ðf|$'FX/'@q?nKHܞBp3,=l;OƂZG A6 3mCHJt9zP&dVXag!Xx10%0'%qE?'c jXlfsA8WQʨtY?.sG-@ TMjDVl;' ػ-yYAZ`3fIJ pO> [p}1F漇H9 ˆ#,D ¬CxM idy睶+?NH^#j۶mIȦ_7r$z;wi0u}~} 2' 0b^]6AK),x@ P9 H1%9aÙ Pwg*'] /{y^T.P_+̱ќyp_80JT۶mL2l0^ S;[ԲώP= Fp…  86*uG+;bs=gjvaFEMQ@ )fJv_c"1)rZ4pCh*W^pq-8ZXwbSБ(cquי4Ԭ&oڴi7L8X{W=6esO|T0sًC[yW(@ hRh^y&8'8U[D'32pG?g<ߤ8_};v{o8y$^jp` o8>++v5>ovN[Ds* B]Fajjws^ȍ7h6wַ\zLp- x_ cC I[Jpl'9ٳE&+EFj HMš2"W+Cc` YAR$ m0$"@xs¸k2f5p@ PmĎ4~z'JYu2K0*H@YHĕ*Tlwn6l'CV0h~ [n3q;V #$!)}*=/̯54D%_!*.dE] TDga~ܱ~06) .1߮;+_|fk^!d'v ˷7u p`h/| NYvZdU+Ӓ1>O<L3JKi[N+n&qt•ڀ9fpxl*} `\mx>~0?C]x1"Ty!}% \^E~Yhwy6Y'Ǧ 5/ҏ~||_}׶ 4'M$rNVG #!/ε+O H15@U,!XsK2 T΀C!؁<©Ċ`|m,ZqWأa+\ %CEvκ۾}{""tȫl8tP p"p8 ˉ0t=[_2 Ipx7ME0<>0.1էvU&SN5TAV˖-_]6nX :=m;̙3mn*qB0XaHRtn͛']Aݹ?ǵlHD8eSVRt)N%M'Ǘk׮xD֑1V0NkѢpW7nEHܪ 4mp}" ͥVWm Q,9FWP6@y|ld3ϔ|~q_t{p`]IEug~Qw" 2N0xҼwP+#NDZD:kOsg`qKw]U;.G"a[n ;0UիWwř<;vw[Az{6,i׮4nX֮]k*|{6q,q⋗|X}^8|pi޼mO'[je[t#ko@1޿ڿݡsЙ b5#X Ž|"H2 we@rb!l6mT6WT ɮ.{̚55kXa1Q@H؄&Æ SO=UI~̨G~r7ۆHƌcF6rqر @_YH} HMY @ԎD\!hTL V.`@*|ԩDZ2JRrr;y4Sg̘c,pT ||'8l]m608F`@2׼?3MAX 4Fn0vg>;K/Mǒ  %\"7p 0a<#c] w!?|SO uz2zhQ?CE4 VMSAë1rI3 a0TP;?PtLG NJ`lo[.b#xQ>uV+ҾB ;?aL V0۶m|#~կ~U^xSo*ܗ%D$G}YyYtQLkŊv4e#{vy!T:BRDHg LED r@rH:,t *'mҷsΊɼKآO?$aA j"w+&_q& |$#C#d0cC󸧉3 q͵|@VC].bm;S8e W9$]LۺرcG 9 zdl Av H!k{ʕ+󷭤-$+Md!!\֕x7RHB`BX`:P" >WßxmT`&\tO?я䢋.K6mdfֹk*# 馛o|r>vZR! H!Gon j!Qu9! H9[d!|*eäϷ}L% f j~駟n眠s&$-!R?l;_/y #yX67Fma 8?F!u?i*\/;Zw FW1JUP@JŰƈXTP@EyaRHsQ[:4Ah>pc Ha^)JŐ}ȑ#mL|r2^s5FԠsLP0pU͝룲*ywW.]M0l [a` pHQxf:9j?`LtstI']@>Fuj6(oX)at Q+Vq* J*GHμS曈8~$*ׯ7uƦX )}{8C͕w8G|[2t0PCEFve廀 W4=_r~'fH?o'q}(ğx ~,g=z9<Ƶh saQtRv0r Eyg. hcm~1D2DE |"/,j\RI|;ǘ;</\Aۃկ~eCfG-ma{Ԡe<8U e]fKCedo˖u":v-j0goZG'GwI~KO"ğBp`BVeIΞ=;,"@B`B-B+U3=-ory Jx{$'[;A޽{w;}sBH0UշԴ 'v+x[pYQ]I$*NEw~VsA~U@IDAT]),yUd9=~OpPV$ ]TAkY@G,̈LEp*(Ȧ,r~8*/BIQe>c W ] ~g[|'')#cE5!Nc@ (|C0"e0 im4N$qxh Cj|Ip` 3'Ƿd#wı [E7M[]P0aRڛq8q!s_'? 発qdb}zj^`ppx8KBdFǥOx~J۶Z)j%ҶCaO8zw>6{gO.>.'&yOx9 9 {X{?=a>= ~}ȗڵkeJ#?85Xcng|]Pp#{Ogff7~1C`s`@b$6$ ,%9#rb2fEo4#u{8cX>1Q rB>s? fe2[Dzb""]|+lFOIU*#t8CH::x]maK mPTu줌0ǧԡiPrM,Ѹg飪Y؄4l.Q&SefJm Z[*J ƘWEZIٌpu&6" T SOekT?QFҰaC#Ɲ~ ‰W0Ǣ E@*ӟԌc\.xfAG)6hN2lɾO{&x뭷vHz0R =:w,ЇIrGah2!aL_y iLS@K;9^q9 WCC1 D(T .{XǷd:L8ώoIIRTDPٰagEY/0+ChD]`| T(c'*TƎV;dMdJBvJD&Ȋ)U+4Sc*XizWVtyߚ2OMd lI֭R) %j2+Ř`ڋ"k|TP-ҏ{G*g3O`x5}^xԨ/_.O=`T8\lٲE^{5SB +g 5.(*@u )CĠ#@}) d؍BNs0=xNvYgYX+ϛo8l1vX뮻l"d؈epfv\❒g"Ps5| %I+ +V܇X-ȕV3ѥÓZŖf^z/~ Gė,*QmaBpO]ՔålWUND @ U*WA]+R CFse<,h:O_4PFiF)+\%(J5?Ocnً199Wu0$]t1Bk_#[LRF-tj0@9 F3@#Er1/0FH'p;[[6_M> Q3#=ҡ>^?iS^)R .pt z9XlƀeuVhb!흳"r* &qp&&#[6bJƯpxcoZԲ83h v*]E74pǷ0tsuDJ%谗AM/险6kSW `|+t?/O^6n<;33AscnРA/PoO:6LjIuCJB91aPtưF ##Lz=)j8#Į`[0r7?@f@͚5VC_DdT(8pF{T``sɟh+AjLA@\ve~b0+[*Qy^"qq+~a S Gv &.% 0:&?"! =zHPEqɆ{xI:09\5j+2ys ̯:d}F> $*dYa]Uڎv6➁Wڧva`L [ ڹV(7aYѢp*_I۠+[-p|H>{9;_(kI]au>e'*"<ن~WwnMeio߲n'O^nw__#߻?sMwdU{<]O{A11?!֫⦆H!a`.v&~izL+N''t1HF.?>+R1 աcb@`Ύv ma}1:mIeo6H@0~T7mXǭd?A;s0E-&qF w^Jz7K~t<w#.=@O:WM}A z ǽiwV<%Xd/gv$H6|Wt9R(.~(FTItM,ʈe;v_+adZes Qj3MY _a L;$bw0}˕}?mv"-)*k`pZD󶣟v3ÕtGa1e<`6ǒc~AƱqKO|c2QtmUQ}|x,gaL/|<9%f@&0DG4.v v ϥ/|HDO=#RRD Je㘰 12Ø&4e0 3U߿ē UyN=8!4oHz[PWXyR%˗WNj';Oz#ǒvdh6 ׊xlkwLs,82{C;&lJc]vk;.0y2]*a8NYSz^\;/beY-  A#\y#Pjq &032#:B6{PxWZ0KRY j\]C,cρBgL SP/bKĒ8MJSIMZh ?&\k O_!}NDZǟI<ُ JX138a 7`{C? jX'3A$ Xwt8 xY[A;909F\,h(,Z{_RVT WM9qd%S|eBFȩ۬_NS?;(ޟ0r%q1?SAaK̀P?YcbgbrfRfHF@`ޱ'wtXMvv-e@=}Tݔ$kn9oP{iޤ~Nɕ.%RYqe{OVGWrsu9x*=.J,O,ɜ+"6?*i\y>{rsҍdd6ҧSztܓ'1\݁=S֖]9{)YҴa]NRO%b0N2 ZVn#WEկ+iId,֣֧M~MeNI#,-9X=Foq33 SmmMj&+,OO/̵y^i=}aVM-/=mQ9+l7Rۯ3E;;Kf -/y8޼K2b|o ;IY0pA2J$ǺLv+)k5mPWk[wf I:sJudv:&\p; y:ﯖM:N􁔺c-x,o|~33Rߔi^}OT,9yl/Noyi_[~`|Ri.#^:S3G|ې#cnvKg #@g؟I ]m?-j>m7FOk"u h@o5c2MZ%i)R⸁ز)ʪ*+壐߼See%b/"ϑ8;#6^6^z/~Xse=2]cPuVq}ժ '^-ɖ3խ{hE-I<$a= S*č{cv|G8N\ K}šIz '3m^fWP<#/#B8+f!ԓ퍪 %üO/!C}5=U3\vjJE*=wT/=-ϯ+qƱ)(\qߑGTxEkE[^-{?eԹۤ{E| !/墾|_|'?u4-vrmwPVpm9ƠyPɟޗ{ߑvuvhIA率n D=/a@_΢ay`ʥfay]=j4o`Ȥ k#7)}JUTZM[HyQޤzU?ܹUjM2ews%å]_K̀0`_w l6+GtU=G2vL^V3ՕL]_alޣX"'uo!mtGdmJvɦ溺Zߴ#WzwNZCUY˷H3%R_nSwp bm2ov#tn&[7q=pT*_2|[v]ҳ,޸[6jWB69Yْ @MR +Knٺ*zNU_:[nZ.u\ub;Ò~ 0n@c|?z/ D-h$(,{m"6zݩmem-Q)r͗oq2{UjTޭ1omm;QӣLHɏھ.V);vc||jH[ޭ✍2X jdT]~=SڷwվZ*U,/kniXTG6ȑE@xC%`T5S 1[&۾{Ő:>-ݰKkKzBBJc**ۤc/eݬE}CV3oOC_m9\/iLp-<;s[e*-!%r+w+.GDNzԩ0 z<ƎӦɕ:Ks>#}|aw+'.\USS[x}ګ/~Ez51㉟IS`}UۧPr| R]B/?dӥQߐ~Fڪ'`ԺT'bNMzUec?$c8E\n li!v^Oiu NFWw'/lj7/|A}o1{RYnIѩkMU­ҴNUӿDާؽDJ\5B}6}~5q"li˶:"`fិ]po(;-' ]+A0k}~=01KUc -\!3ǭi;%[Qsq謕18 c3o0h(&e)]yL7oiT b6rJyN۠ΣSjؕ}=6daB~Mh/`?1}BtW2|OC?W&Qlg*CY/+^mIYm3~tfmwz b'yw5#龪Su }s:`WB۲ڎ뙺xW _Go`**|:7=+傉zhjiPp)(Wuv^gfSKZuyyiUQ&wu_jD*_Sɶ=uԅ'굁HކHߙ2y/ys稴ʒ?.yk͘A޻Rޱs,\N_ץK7oNgg˴)St6Wd@Ar)ʄlZnnҢ8[o)ZgsUYPѸݴRzjcY{wOjaDJ,)e3mS@$8&R&ql=!Jߣ3{gJ]j2iL\MWrt|o+]]l!:D:"e+QuzrU[t5BO3/=mH0D(꠪1\7MLviX &:&'̄˧1w֮Pj#rqՇƩl׶]h a0x)ajgh.8M_&c@æUD ?eղ^㑧i%OR+b8u2e 'TvUiը~ ͖xBxnܶ[\]nIZ& 0c5T'j?g3|*~?,$PŪZEwj*W;-5ZsI+`i8EVB/__&S>،`6if}İ]2^ҋTVUX$&~4fe U7jp9k@[(j?[l" ^h`}`l٠*u>P;u7+ XxL @LCީ~s3\&:W(юjqWH}B{uR),%ki#"ӱ6jthr\6I.$JTxdԓAm*筗Gt^aIYKLaLRDkJ"W*֟voܘ%S~uf|.&~,yef(մfl-keRZF *SYsTV뗿DN7aUO>v0B U0X3qA siXWhyLB$ /$<]{I86 xAyђ*Se4dlÒzuutqJTOU:uv)}MjeTZj/Ude:sE߯.H(OBj;].zRjOZ=Gqs=(PZVI*ei[nq:l)XTY!tD'S&NÐz j `ue.X(=PQ-֗:%au\zkZ>ʪVQRfd q^WɸJ U5u%&MJ,VDgxvJUJlmT η1C&)谱*̵%~C+gusMX:|\z[onm(4:mXt5 .R=eЙqFI{KԱ)vl\HݼsX%# R S=up2>(n> erq2eҞϟ;~]86S Ba[|Q~rzOaSͼZPf/- ᆰF Yգ\iE iec+ڞ1*$`aT >8 {esB-UYh~"=bp?Dfh׋qkBe/eDYM ->-Ƨ{8p!,#Vf.01 L, pi%L;-r!4aDqK` 8mLkM`⺿4gUВ_&KU_9 !hǿPxxZwŨ{ KAw~0tɝwi1$ 4fW1\a19_&r~c3-)uoON*&)CiCóh<-ڳ1 uwu!pz'>ySu +dkC0,P(h/Upu^( ti>uQ.R !1e !ig41dG18dg,sB',@,\i &qt"\cb_%)|Ph?}5o ^zCL[̂j7\;ߎkSWgqi0 .x :O)Jd@&hBfxa,*<,W_YX~־Og YW1WjԓctVA&FS2DՑXdu[) 5LѐJˮ@ H9F0@@dZ|6gB2Y/ aG%k!ݻ%GXfuк޾mm0h{1ҠHn;E^r -Jkf^@#-f94PuE7= Zj'XpCƍwXS kwV#YYX4d#11ch -o#kj=@3.ńY Y՗\He5g~:|k_ zKxg;zT1Ǐ O=~J]h>rbޝ Ew~2BE&! Na(sh"b<+e?+ƄTtv8Yr7mе1CBQZI/{C>9d}% [cn:9β< 5eZVA :Ĥ~3b~4kw{b\[^Q=JÔ]C\`$f2r (dPZLZE shGh 1`R Wiu ҋg)⬑=5bk-.c" ֎b`^k!+Sw6I( L D4bq)S>0lQo4U5)#zj9^#KԾ{eUŕk_Z`j0(Ѻoj@{oP,! յO)03._Xy+' T?vt1ʰhϢх.`؆-hq)B9kkJRg Cff?sƦ k[L=;_D/9qD/s0Xn=$ps@ꗎ[ʀ cWb>ĴYPêrjKOJV+Q=TY2]&@L>ۍUGU.UbW$zUs$MU_, lB! i|bynԎە;?,k% S?`ʪycd)!K ; G%KQgBG \Gtn/Ч^̓/*ga4"awhOeqbDݖXmc '3 YYؠQСJUP//^+%whߣZjgy8QUÖjZ.*@(닡bpu4A&n>$_Eo`YWj5VP?ş1 M/E*b F~,>݃GCƀj&+;t>^ /!p*YbAI)i5Fb[iXWj0'ޛ9,`% 0``( 3cDNdl;]iziL x~3,1A°& ?K"бG,ҭ g(x%yLLFrm,Mh.3_4ɞ{&+`w #cuZ&IaJNYhbʽ}7KD~Ɣu3wD@.~gЇ;ЗbX,^1[v7ƍ' N:Q/k ׵2m@DI0T%?5m >ל!b ;0Wh3)w7j]3q@_:*c܃% :Y*a=`}Ol Mz+GJk,4܏kU+'Ҹ L8kQgTYX agXX\Ҧ=_ܽ*EkF} /d-)\wnXNHs@@ǂ-2VߘY _KbG-0ڥۘ(0p,bvhP2RRl_{C8}iq+FzXmt, 0;(O2x (lݺ%අ@~]8}OXebd,WP (_xN1 '~%J!ѡ MvkZ9?|@P=+{زuKiؾEhAdža0svO7mOdd$5O\[n 0P10<gi4l|Ŀۛ5{ c樥Kz[hOIKڃOܖ6mx]}*vi bDccLn i? _{d~^nz5^Aܭ99fe6{θ?nww`d?%2'nN;w>[8Y-(F%<Р7f|?(XL3 :J. eh:% $a,M#L,8ޓ'ZK yE#1|dqm[{M UC,$KPu X|晬սYFɯiZ<ljsp}2:F={s$vye9*ӟ5qo2t|,Qv?py9 yVYYLx^nF?׸Od&U ec`|B@Դ{Wmt|m֚jyB UMz5)a,FPĘ;h<ݵkV%.W;vld tjWXAX|Uq#{Aǖ-[jZ#}tFڹs=-$T 9 f'"-dw[)VJŲ`itZv#7\Av2&ЎVϊ.%@DB+Ѽssh+Aok(hp%ruZqsa4C:*ϵ^V^"X|{1%p2[T^'4̩–iEOQ,GggIVU j_vXFs MO1ޮe! ̖,̵p@ŋ 6ZAWLsiF*BB xUu|ӏX“i_b;.̜ٛp Џagidd&eFZrzM+ R.:q9#vYRL&K00.7p=TKL|o%nL?JT,}~fcuŪM;f[Jzߨ,UjcrU 'hU0NqGf TՍVJ'%kg9$h]6^x4e%wUG}ͽ0P@-0n_Z{p7m*Ruڦl5h`t,]؄]t %HVX! +/%zc% wl)hvJaIh.Ⱦkm6 ,Re6{bK3o|+UV&ٻbO"/^d"Smۦ!vT}ꀮ[]&۷T] $ .8׮ʻ #a>9{A?z@%Aܱ5pzH鋵[v_c04re1[I92Ϫ0zNZ>Yg+1vfGi/*KOUqMl=};~p Or*Dq{._'GgW󷵟h. SiW޹̔\8vOÊ@J@\_mEx{ڦvL(zӎ=ڮ7˲.ش1 >Wi+^>rR3E hS6|NW ^㖤t3zՓ4cm%|qAGkߒ}k'X&>OR橻Ok2eUwJˌۙ?+ (`şSV"лk{(,F+2:hv@\L> {lÒp}#L9>YE:~k@ ;v1aΝ:¸h`R Gz-/yW+vR N߾%NysB(ҒB[ d%Ha:kvZ •ڰ X㜥'*-Zk Vl 'Kx 0Y91n>Z'6#\ih-w6rTSzs-bu#eDMpm)U%6E["٤o6b}Æ fCɞ%?+\-Y ܳo^l ֨ :վݵ-%k&;ИUXwj ,RD$%U7V`Ye_݆%ّ}sfxR=&!j+PrXrX IlILc_6T[)Yy\,5wVm ˵Gl5Ųn(/hzri'[T/w.fx>$ щUGЗ6Be,sZ&#ٮex羽Z6SooҫۅK؄i,WV|/xc:ёU&M0hƘIJٿ%y9/cat6kEK(VbA+pAy[ʕ js5tVVϣJ^ 3, :߱;;B,5R{۰ 4bCAZm4Ut}XRǒlEX.K$`,QᧀjZQS;g > $᤭,0R@hQK$Lt"4h4,GcgW oh9aśm|&UAݯa\KzMj=46ojҞ'.>4ަ)c>B"52?G) u3Uo3aWhM;mc <Ĭ4uO@OF [RmҘl8W5JN]IQeψ^ƶ 姗WZb37voK(<^<8ZyC}׿;G=ZjnU紕?6|F62G ;$is X Y{1g>pZk^k7;^Z-+o z'o wAjm NQܦ1m2hJ;_\vq{ڰwX%aW$f\_@ ǡ o3 v=Om6E^b ŴٹRGzm\H|J+?kB`GljCmHPd/ǴSѽ[[%k%G>,MZyLWhA/hN.6М12;B~M6h `@nM%m~^?h߮{hi /\u6ݧPM'Wֆ ڝjmu7M.ZrbE 0N":[뱛9K:&i6<֦\Gxv-N3'F ,@LO&I>"&  "ߟ>X*{^5ա&b/8wx|<igs%Suj(iJ$1Kud}v|>Wˤ}WyoDS ֊Xyq(!^m( ӤA4A()DL5b\a(ڰ+cubD ؉M%7 ?mmW;:[Lon0&f >w~^C m_8Udv~iڡHL6̧sh) ;i 3cԟ٤o6 o(`>hlX 6döI u%~vv#VG cĔwx(aOR, =~D.B7יś<ZEv=O}AUG0:٫Mh^}67LK@fGz2!vU47|xBVmCyaj+dPJv$(ܝ;x%^U -X4r")KyUs: Ao.^MƧӴ  WO x:㔒T_T,`͡vX ؽ.pppڈm~#рFeaV0ˁ!A >:0֚WMωyݨ dmТ*$ty0sWT.UL/-h#hTvzw0s8i<&Er^|g=Tuܩ`4q.h|t *P[;gc":`' 0JL t V+94Dc9T:4[{"ߕr-uܱ,mbVsۖa\ak/i*) M̸t Gm'pD>Bj; !~у!q 5azA4nm#۪STNо'9hwn;&O!GPa Mx]+f %8mݗnҬ_i \FŎX 4AͭM҆Y,|#lH6kkkn"g;23VӶKpRi\~Rգ]`wt\IORɲUJp"[}U_`>oTJ43͡E1,! Z?cZ:zO9jG4lED3_VJ~F_Ae Y-|+b5Ps0=G6I*):snD)SOiw$_ rFр<4{xDɀp@ ԷƑ]ܢ&;nb,KhtLL>:<#a_(+>+6'+QP!\PK+  1: c"mtB0Jip@EJ?v&^e4~dn=Ƚ81Li/xtW1 ԣwvVқ:8O0(AA0?G3Y״a3zr@ODZ<35 r#pCR;=:CQt4]r / sPu15_g,L?݊Kc11w Hnռ9=Ғ- o-2x;=x!Wr|<c6ڜP+ xz'D4ŊcC0E1^IՋP&+J=]@Qi<8d+'PAgO (`1ვ?G&䣃oV pji^irsʛA!,s@2NP&`%545cmA H,;@ɗ54`mearY-͹@HޔkZ'2ՋvǡU]+|F] @G6H7HnzH`yזnkMu<#wZ^" )L,$Zq:20Xn}Oˏ`_]vjCѷ%7/8BsB[`(W 07ɵܤ}Ekc! Z` #cJyQܭph[ Տ6;=Θgl 'ԏnP,0 Rg.1+ }M -P;1`'7MfwfuS@ t_>hK.gVϞ<о?2w rĢ<@nU毷Xg`Y.d{l_8ǚ˗Q^>Hz[% mx5'fx5:%JnJWxCKc-g?\ `RAs*c\XW[y.;2ůj7מQQs<4v4f"%5< H -McU߶r*~"\E+.DM{GXwaH{;7? Db"A~x66StX:o55ML'ʤ{*0ݵEhk| 쭉dXN;1wq?M~0+fWWw(,2fuīj]W6Qt%Ւ)v.-%[p,b٥#ÓyFV$4x> S[=F_]7O]RًdO,"ڴ7ݤUpz[O*'ܭ~4$01\%@qaww&ɋ2t WnW?iHdřZ-mj !\8}&PU'/`cwr(KKI;Q`#) e٦o)?icKaW?_F*û?k1+Nf !ޫ8]b9@!C%{Xcox 9abn}JQꨠN85XCrdNm2v\ux(`1M;?搓Kb=D.L//C0`4\p`x\jGq,XW&*Vq{#%+jK8">O2jdaɒ%_ GnGט>,Ao% m)}[c{κ1 G2d:_og]t7V-kYB9Sǝ&gjnbE 4feRfEMjYWOLNY,VZsr:k/5D2ň0i@e=Y{hf侃踞0YP _f e6A+ hjL &A|n/p߯mq*'=hM] cjvBkܫs\ ^wVJLju,bybYeVAx5jNhe/GsǖB(K3/})~, {s{V'P{v&d!JzO׏MJړgIo' g ܢE f."ȃGʝ#*ثĽM+iaW03 OVL:G@ⶥx+Ƥ3*/C?@˭^@qu&1FA(ވłZYz(m@[~8M%Lwc;D7T%~:ũqKZklpp[H֓Ʃm]|Dm}zLԮuN&8A s̉l`]# "rqjW8v ĬOW GQ@cS;]E 9@Lr;U^S93h7ڦRpe͛7^ ߃Knܸ1,]4L<9L6x r  k}ڇhO,ScI;RVu̝@:o^,nK R&RLfvFkL0910hC[_ yC >s fh@{Z& (^}q>ϑhSpu%ܟ:E)r#x6]r( " 2 ZaFh\ 8%&98.9o&;Kr\5y5qk1&zɲˈˆ;aÆ y$ݣ>je#`t4|\ ]yA\徽#2ֻ5R%e+_sc#i| I=(hJ:.~:RZ;0<@Xba/ GS ~~TIǤd&\GU셤L+ĠI~É'hmg |8 d4H'"G<=[鑞WkesA/$&+2_K+ͮgPGė^z)s=6AݻW}ns8apvXNx$|铞`9ktՕ&|#\hQXfMf~vUKzԭ[7R'>^468{0o޼~7 'N X  p0@;6MT1^xD ե=u@(БSOXGd]y'(32T^'df4铴ɃM?ѡ}@[LvOy=/_lbe|s$$CӴ1S隮 ݕ8|cDH'w&M 'M%^˦),S{_ԧ?e}U]e2y衇… .z{NV%}]AMg[g+yymik|<#OР3uM5I㘖˭`{@Qg4rxV肴4meec7s΃>JJJ޷o_['} Sv.;"i3t1hظ`aW'Sk2a>ܹsgl~@7yA\@~/{GWZZjEhY_ifi T74 mw11.jZ|QZt5]Wejz<~m۶O|"|]vm0/᯦u4~ݐs痷z+|+_1nI}p?¼ ze+@+ <@T*eG|aBgY'`/uАڀ<O9MUxq\sMy;4=KQU2mɾTj؝m8TU 񽧴ǽگ1=THhs.:z ΢A+sڜ"r5׮]k+0Faر5 }px ,_<w/0O.cKN~:e*7Gԓ~yW G ІqMo߾a„ }k׿pꩧҼGMj?>JO~bQF5q񧎷[;'uN'a0JO/Z&MիWzK.52?l-cƌ s /U?& 8嘯F4~ ͎o/iuX;q+=ں_ݬ |R~``[<?y8_G8'\y}|ҼuS6:{gq>GɅQZdn+SaX*%Y~a`U;B.m_[M nOiqk9VVc?\CkHi)ժVM!ݦݷr,cMB=cǵZ, "džZyyGE5t>4>s4CO>cc{2Xz3peZ07!\|šy2urKxy 0hSEkG܇VN#FS6ooox})<8c~iY+-7ƌcI{}Wo O$+ZG}W]weZÇ`SaM |{&U]σCɕww[W^y%q^}vvDLޘ@dr)749ϟ8( wwɏ7W޵y/.?'4O?=|aU`u6"4bzСV qyٖ|6yъ6vgA6멥Yk#:0yXVhJwv&4 gggRZ6 e8M~ -ʵVf_T O&I]BvP/GKʝ+҃(0BA 6>㏇N:"y.໤wr7S{vpwr{1!tei ^:m f^tW8/F}뭷땻EOK.)n:;3ykp'B9B~;Ә-@)41sOq}:O??ȵO9(an3຀սk^x tL>hau4vqzNmS|ߏ^{\^@~_=-,(̙3Ǵu , ]8Ϻԗ庮M~-6y* K]„!a߻m3Nvީ\}x䍵aav5|:`RIxePgjs[z'Y7zjȓ)(e \vB/DuWք5Sav@}͎r.!yj0cl{rkkVm sGqYB@g<5 si{o+aEyuuGoIqӐmS8/c!m骫 ?Ϭ=@spx`o;Ook% x u:[@/rrH @UWݞ0jp& &Lc.bC&,)U0Rٍ "i"ISu=d9GI`ԺEX+ ez -ihO /\|QlO:,Qx]v؅ W-:Ovv>g9akIik6i2W6Y&=d߾bz+ ʸ`.&PB[ǥ`Ÿ8@kӦM&v@ѿ=mw-&앻_lEg0nupE;ǷTk.SmTgYhrh̗LbGNX'`'=_+b1h0X3Av 490? W]~ 2!>4hGq@τ e):n~o&k_~/[#4uaBdǻX|6m` O{/Lx@B|#a8ڿ͏2?[xxVcU\y4g4b[jU\)+qOG10ô@0 898ÄڥƤ@tR40LLď\p>& $Y_}ն rZ|[$li4ȋ4C& aǯL<0ss+{A &1y"S>u]PH[Bp@k_t&|,hxZ?icV~_h,KH^XpYA4_{!e i0|'30t!X׸| 8! &$%~(c͚5BV&G;>(3wQ]9Q5-h0^Ъ37 1}`Q%|Ơ^-88>ڇ}:%d#|@/Ŏ(>ZwV"AL$KY7GУqa kligY\:UCc>iZgecn# .i#fO>t KRz>>.ye} Z0?sˠS-ǵ A A׵3<9gݨ0 ʀqG3- !LNhɐXa`lhHY5O0Zh2|a-!ea=FCVyƌ%I';({3I4L t|3&v/#„-D 0`ǟ Nh1"03iyF/k,,W/}KVtf:d^,Ahik(by7D[p% tqG< hqiL|0կ~4 2,  COfCx dQB &B 'mz0{[Y1 w|M~LXuY{lP"w*>Z*]u KI -[*{\tHp{Kk%Fuz[W3rЃT6_Lhrm۟cY`>@@ fܠ/y_e~=T2ccϯ kOe''EgMj<\3^vO_bNqv:sLSw0Fh\𶜭vKi1KO]p |;oSx#:0ȧ%-sc oHLD?3T!:wjw;+ R}Rp40T5C`'{\R&8W3²˭b3\0d*LhOCK͇U>fȌ~X{'@IDAT4&wwFtd018-H@>*8%W /&i8"x;[&=:S `(gŚBnmm .nQhV7B揁o֬YF $ (`֮]pJ}>1KCo(*q/!2pI.Eô 4pB{ !$#ݵMkFä6&:~F)Ӣl3gG=/ 8yeM&mdy;=pyVҁ+h6OVw^UOhXy*ƌCL$8!U.4 c}:~ׄy_᛼jLdBOd\,w>{,ȥXAFXȮgyvu04BJ0<3ϼRkgc(-QR3ϳn59RM#>>'Mu^}ϝUI`^cK.2#r͹7&<3ŮB 2L)2/Q_!ĉCˤƝ9[M- |M:>WyL?.5::0t%+nWt|%-i[ >Lyp]68!wLXFhWf=CMRj1ӷM mB@ȥ |qoCV< ٸ$u~~q܂9B0pJ''0Z0k! TxzPJ{g>/,eACCKt> E`|15 ?U-fmϪ#6_ɩ&}{0g{|{Jb/S+H0a"/sṗW ={Fy&f,ao~eJQy2Nm fk7\i׸\1.y5^>K/@B؞{}5 JbPSHٴ}N]\\"pC_]t Wow^|1|WJxJG׼}!}CCx:)0QѨq3Bɮק9NC&[&u{9SM>Lm.A`m\'RO: #LL)D\'(s_*"\hm7ˍ"LЖO~2Bp]ol@݋mcip>2hrXBߡ`mC,(%Bp1`7 fFUQܫ}O*0۳YsGґ''pL f \b ),RX2ø7 p 3B=̗O?#{]sl⇨3Sjƀ5t}x^\gghX #Ds4SP\ո@ Ɣ-E0?h CS  BChZQs&]_%##aA;i{>!FqLh҉ݡIGsMVA{x̉ i .hzpD fx?L_sqkX B<$hzWLVvú3E-z\K.}]%:yW'#G'(6H{sM}NC^a-GZwHPg _o{1 n"81ce6!l#35+Xsq/~aVgn׆{b3\ox@sDs71&B90\0hvg`..f+E/Ђ  @0 Ӓk~mL =n F5Y  :.Ev$- X TU~̈́:uC]*8a&/ЀV~Eo3 =c8}Y}AÆ[Da;#L'}c EBKB;r˯/-x|N۹?s2i$?t~C j0% 0 #ミiPMxG;RJt(I3B*"S8(7J}/vQ)`1~ƹ_Ra0ФB X-6xyeF \2)0W ?hX:`g0Q'K0Jh |c 8b&dD"H]m -y@7w DR9~k_5 ra`pk~X?z(aRV6VB"0o4r#45X?X0 G0߰,2&"#L{*n3Z0`bas+R+}瘏~x9(り5^!xGY\;y>Phn*0p1.ȾIǀhc zDZ*i3q`fg:&wI>9={фn .Lsh&"Tha`/ L]ac{>YPޡaC2K`*1o8p3bp9- <0u"qb†&}֬Y6 B u_.8cXc@یW1'*MOC0Ma˭E,'?<! ɓ G\>jw~" }U- ^XڐzfQ׼ތ;hq+#_YT8r`H_*ܿq7/_\!( (f4;\tE|b]Q\1Qp1"l B_$@ߢ,VD·0p1@1HuߤHtYF2%5 3>X$`J XG+ Iޙo Dy|sA+Y@XLb0bMI4!Xd4zqbhNT"0R\YѤILe_s6i\hSG7.w2|Vbs# 3yJXYn]'cAƙcs@ 3 \ eL -nj?{+1{:s ,急%ʊ+‹_ I?[@~`.c #  T·M_e/ =Z)sNc ?"->( ,0DaLjĈ҂-5F -I^q}l:8^9B+Rpdߏ{]gyYLR0)xVA Bh@bpXc_{f>~ha23QhN?,M`θkWnɄDЀB/zG,/IQn4yX/'&Fѽ{q]0JH?,/K'0Rvco9^c?Ns [L+s WaMA"DVo!>X]Gܸy ̻ S]>I{\=O˄ 6n"0&f$jܸS!u<܆:R5^/Y;ԿHz=k+;M5紀B_M@O.@|^S<?f??׎\e֦~q/_|ne*#?9&hU?9>]W!O/2Y =, 8V:ɨm^oČƊm8 X$@0A3( (4׉;# aK "dc=!/," a%7,1(wcV0,kmpQ@|~}Wuyz^{e,iLO?+0P@(qS'%0E.f>:wc8)O|cP;=Mq^~~(a/%?0<=Rpyy7݇U.{j'uɷiOޯ=hcxɮO.|U6ݺ^7PSN> BXl繿ik:IX$bqX8r@ІcMڰrBq=}t484 +AJ6 "(kMߓg൱9\yե?}Gj~r ͏57{,0:LBM^]*:Nrսy\^KP\nh;DuͣEҏwLp]%,3 ]ӟj[nhuW~Ϸ{}8ylzYNfpI#G峙_Ks=Qb` H>L0Bx x<6E 9DpqmpWY" a:P8vzS{b▇'!3iF rẶ>4=?6#4>b WkXfu@ ` w%Y(%fq١pS/L&8C[s)*++ 7lU'VGՕTg*Wk'"`f͚Uɝ|a$ q0Ԧ\=!zu]GZy.9[`q Nvv\y9?uA 6c\sa=  _i1er$ 7+,(4ą\.d2ƮZXD-#1@5X)9߃$7x [Zs2lmTvvF)@ Tkӿϥ$@21f&"h=s&vR|+; oΈ+ܯ;prs; NX6C@N !!{51-vbNu͛d8lvwMY{8ınq6Ŧ Bw=ң$ܫ{u=C߽@G`mm(|.!P'7;˂[&+)~ XȲ0e`l.;^f3,}/@am];]DW[[&NHe6w;.vV゗N;DH79Б3UWn6|ժU)fl fJ48EW^ip|qIF+XC=sUZGy0F<8@0Myj;Ъŝh'N# & L:,a@q,M/<̻w‡]BV]- 1wM'ڏ#[o5ȡx \7.@?a(,` 7t'M"L\E o^[_6<@0Xg'BYRco6TžGPv*@D 7){v0ý„c-2.ɝD&tEd9>bX|Ke{\-C\Ă?SA:AQijoT sN"4 -蜫1a=M7HY C 9fA dLi +,8ڛ+4r7+8{;=>.;ĀD,F{w{1F,v9cޤULRnO%~6q8#^8I_ ! X ƀ   |衇dɒ%Dnr.L؟A= ¹"Z4:'8937kNjSsp`Am# ȉ1@!`ތPÂ{̜93 jc] U ,az_˜Ŵᕡ椭 #Hja3LPԱNuRO}*|o. ]? .}9x_}.!m-Ԯ i¨{pG `΀ćSrbE ÌJ LN&`›r[Xڀ,#]Súu?<{S5͉JX;@KR3 ANA?a8AU+WS%\"nf卞_Gxg@ѩ8iCC~??6N5VB#~E2o}+n"ʸ5|2>c!ڎhLkj8ʤ#5?;#Xǵ+\ŭv}DsK%<pҊ@t`-*'Z/^8]s0^pJȇީwU#,9G ޞ& 5agA>,sCK4QtZI2σ#8 MG|/8" _'A݄v>ue_JnG 8[l#зK/45pߣgPz'#L!sѾ g'{,_qt%%%F_r0FE; 0>qڵkslԜLy8@"pa#[ H o#؂si,9" avZW"0d; qE4™s3nw+ cNO+>qGu0v98@n!xC<8N42 I . tSu4&C~ >L*Fu!c>hs='<3lAϟPK &1)p;؂975|j?Et6{#8]7]րnV3 zwr"y8N޲e6.`:X!›7t̚5+eP(D%}WgYe25~8 _ }9,8#Ăsp$>,#  #!]~1,#b}NaT؃`O@%lv%΃#8#QR磎r"΀pTžaPgƜeuq#893񾲞sj#Nl:r6ry;G]k|9NH;΀4A v)Gpx7^< H:EG mQL.iGp҇K@xtj@Z]&xM"&LpGɅmt8U@*XMx#8@ͮxu$^<#V`@|L@~՜#8@Wí3 1$L! Hƀ4#8#΀[6:Ii* zpGp҅s/5CtJ@p b;!DєGpxp#3 _@5)Gpp&$>LKg@ F&LpG =8/΀ċSsҊ3  x|<pG6ɶ7q@p6Gpt!\! H|X:%G -DT}lU;GpSO΀{^0|$^M&WMwGp g@u{g΀4΀4ßGp҃Ͽ H|X:%G #0 3 MX#8# 8 oDp#:rGS7>\Kd4̤ H~8#΀[6:|&:rGpg@ y\g@O#8A7tJ@F8zhFɅJPrƇ3 a ` HFr^#8#+΀ sҏ@3Q{nx#8#8/ɛDJ@x Y>y#8E7a H|X:%G #OMX#8@z0PO΀{^0΀4<4aw#8@ H)o#Dę΀pG S΀ćSr2@QQ3 y%#5;ѹ'΀q2K@8#8޹_Ezr<"x#8@z P?΀;8}}.#8@n Hn'o#Ј`5B!΀4aw#8A?1u#!P8#gBExtj@p&a@\/ sGH>Ƈ3 a *XM0 V~8#r H:/NH;I@bpGpg@ ynLH|9pG m 3 y½3M$ I&~8#//Ps$~L#dc@2TW8#81 H : G ; ĝ7rG p#x߽3 #G0 G XsGpCT|Sg@)9A !`AA=z4|2W8#8FNC!`"|gB q$ ΀~uGH6~u$޸7p+lhhp HsHpG FL+FyO 83 MoI Gpt!|o|:N>6A H~8#΀[6:rGWO9?NH.n-xzsLpG ~o<ć3 a!R&Qr<;Gpxhn>Ss$߾='v6 'GpH\:Np2@ 3g^#8y`OپnU;GphTtRt$o_w<o <=4şGpF~=8Gx\ǎD9$8##&7>PKd P3)ތ}"Gp@;/NH;|4<#8@8/΀ċSsҊ5\ #GFCXB8 WS'{cc]굓dslxWԙe.g@2t(QMƝ֋:@!o6<$6[M :^]+^<#|3ф91ޏ8߻woӫW@gO_D~g@F$^<#v25ঽ#1T`{L'd|߿_yټysXtWXX(j.),-EEСCL߅9sٳ`t ΀ YL ihvHB>/Nv7>9eR__;X=yDa .B)cV[dfTгgUY}ʃ>(˖-/~R^^tύs}:u:G"]Wj1cvm2l0ihhZ'6ơcǎh1=.ƣҐwE2*((ɓ'sٷo_`@8>LN:۞ƷmrN@w`N㒍q<#E"$EEECGXxfsر>rT3BQDA2ۍη>"C(r{!LEاOe莆c&D=mޣEnOqL ,!>_Llh ~G H^`PxbLȀo.WAƗ['tTMUB]*JFbc\U^޺_>h25=|H>h[)DۧUpUH!W/jCĭq% d޽RWW|WL/΀ċSs2K!Yp0c 8C >EvM%}z;OԬVo'ZU%WM#Kum$v8,%a_{AjoQ-l&ը;t1qbphT; vXHqQa`4(:]Ԥ_Q[G IHj2%$0!xcU7玒3&G^gު c2m*ҏe {FIJi^3F 7/Wʄ# N_SݍYFNTV K"wmͿS$us '`={' մqHB88 oحQ0H+t ?#͌p&8 U)Q;H eZğo4 7'&oxWG1+iG{ n^JБHjU OTL [ +t%֪dVV̑wv/(PlzɪWd(+ J5RH#`QTi:jUJx%W*W?E=kzXdo3 -Xt9/t3l k\;2&|̋ ,)KH-}c^iꩅWw6:iU<U+[(#vwP^ҝmL2X.%'ԨS ix] ^TXtר䭪טƗɔA/kkڴa KݧWc|m01> R"h>`Q(P g!g*@xpbgn8sh5d!2WǨb7Uȑ*IUQ"1r@ s&le`zi%CT"7ga*e& 6}3oxƶ:^b _:t?||nF9A༘#0+6mfnOtrJE@U+X^z !艿-+a≡w>)5@&XDV8=9{ѕ*5Q+^"Ak2')!tЌ92:9f#@IDATtЏfXh TGnT Gpܡ2G':WFT.gzgYV]%u ՛#ҌzUm@Zw*xiCnUÝ3q9eҔ!'Cү#^i)ʸFdf"Sh5uϪJRʃ+uy@SX uTdv+s\g@ө9iG ]``bn}ǒ9L֝=&Gҟ\[%EsX$ r /KDwQ:Ge}vew#ԏntE(V I~0E f&hLJIԇGp#$HTY:qa#20ܱd(y ͂Aݓf;U%2l"8%=ARbՑWSoWQ=դ#Sebj0o-kO"TຳLUSkD: ~$uQjBjux{} i0ZmtESvmGCrOGbQ.Ezyز뀼eT7ʄO;B3ǔJ[SwG;;&]Z/u5zo ]xϠz*V""Hmd3,®7h~bUi%/J:hȐ ֿxI0"!&$"8 l6Ut@?y6cTu6h p ׿Q#,.Y$?x9_p]Kϧkӻ|B :?NH64.s@._''J*Nx̲iu=_]aun{)O(1B`]| 9}C6dTWO0rބ]\LXLėdt&0HO:QWW-ʸptEULHOԇLM*FIOc&ҩzV?[]k)XH鴕ݻJ.kDj{yHM^^)+Wem]>녭Fz%ajۍ--1>YNGy 73TNP!SJ@55n>-[nĕEҍF[m$O\cKﻥ8 'ʓtg׮]_JJJ䢋.ӧ˰a»}ጜ`zNuJ`pfΘt00Uj=?׸e/Ҋ:Ϛ^1$)x#}̝w=prk)H ,Sp 3EYԪN6Z(ma^UL(&}Aa=lS (Y8"2IFÇ{J, lі&:[JƓV8miƤrNԇtO4IY-[&O?{2w\9d„ 11i7i~>G;"M)vf NlJ-YvheJR9qÂU=7eVwes)Cl-e GvICO!3TzݣjXHg^S惕a䔡m+keFMsO?n z.9$؁jupnȜʬ VD  ߅sw_WDvN OXڳ3y%&ηU3vuLHGB4<  ii"& }@8 Izm1rT g !o4 N!w!<'zu]R\'+3r%ԩSCuɣ>Y۷O.\( [nx@N̙# , {ʟgZTT$2c 9C}{eҿ'ʢEzK,5kȀByv/B8p`PCxꩧW_ :i )++ m|套^>}4#"V'xB1pqFyGBfΓ)StNyv3 85{,ēN34`Ig},z=Z:f/ڵkA򥥥+kwȑ#V\>|P^:4uNy姞z3&WVVҥK1gϖLJ;w/=HLy賈uЧcx{ m{SN ;v}乼\fΜJg˖-c~4+V KhB ]ll:Ce.sJ O}HŭnW\<\T˅g[jMf=kD.V!Ϯ{io#[5A;f`70xk)#`dx2.@Jf+34uHܽ|g\whܽJ.TEݲVW*+OJ28}TQz$0P!ԅ/[xtEaWl¼ uv]rҍ@t!K9v1Es[#0%滦>?,y JkC DI l!)H]R3I:z`Ģ,YY< y ,XQ#Ea͕,I'thP7 B>K'v1gO L|NΔ!h%J&ʲh'\P4,P Z= cꄹ уbnm.۷tOMt`i]0f6?ԉ6lQ hwx7{3$ :=ŷ1 gtixe.˗/I">\JD`~B+a7uN000ЃCW^] Dy/iqwG?r뭷|g}f#,_ד/6HBJ&z}zګkt xdraPY4s?,H-ڢNbL# Ce28SX,^{he'O3;v6塾="5QKUT֠–8\EzaJu*sJHPa]ܵ` VI ꧣ@uV a샾^&ӵ3 }zo9 lӼœI IA4 H$Y-K">Drxbב3 QB¬*mmB=4ԭghiaBС;cq{UWu]bcOK!C 7RreŭYh_|ᓚtI |RϚ5KX$Sj-YƏ/v[NG>Ӊx-C5BkZ~|Z `/|:h< tM%j f۶m) C=~Qz麷7gkTEK[eO\"Sbb_~JKxPCV[ g;uڽ х>jQ؍@c20!DA`a WA2\RaInh7ÞrR豣GPiHV.7Tׇ6?Vu}̱ΟmSWیɧ~΀ Y DduӉ.m5K& =aRȖ3GMe"W4T[&CrMUCdj$ZQjSxZe!9C ,$`0ȃVW3o7kYrUsb&oKgzMZ,oSک"U^*,\cfSonqScT1mpȶ}k G,$BIByC'zZa5V@Zx!0Mc$MU`8Hqzk$8OznSݞW[sW[FY*dѾRӡnҸ .9G m bǩ7cǧI2TM&Qݬ_ۼW6 ^0dq2'0v*Mߣ_ S虣Kezb$Nܣ GWUph!z{u]f!0UCWըMXgRU}ԴΙjQƥU皺g x|v[_}8;dcZJOTqg.'>[7]NKX˚]n_@8%7Ax+[;c-d q2'6y#nzcECtJcCti zeN`G[-/n}D0,RCH-IR{(yqrݩY]QY]:gxPma'nJɝ˳u}Z!}sM `XD/Yxp%z5w|\!_H$y=8@0~xd6OƂ橉'$!sʝޔ߿M?尞A6~qFr8JTƿ0MN}wi,#[{GG(ri#6WoV;ՃKJo(c j>Xua28AUAz2Y0 u?@m4lB|gFؔl8'64M{S˚{JGTwB8MxYm\+ѳF)}M]lljm}miB'ރ#d~l6BS͏Ď??^$~ɉA@! e6Pf҄@P04"a !u铵4mIK>$ز0cGCs5ު; TbMmcjkutm/ZvG]NIgA֮QL.U hW ge0//0RPI~5Y܂) 7xEm*g ,PaU 8kȒ =xQ+fdfW}}E^ij=Z0BObFzaתw1**oZeNS*rQ mKk*E}LmR ڽT闫z+i!T^)~>*RN޿u5SUFgcsUWTY=ɃsRf dq lY31_Rip /;&%2\vKfg@b1I]8iB-3U2OАgn.^sbI;t1a*Kj5JrE;aGOIviuoFc'V=CΠ)yǫr6%%vui } n }ݻ#<"\sMȄp2?[?YуOճ&*Ye1rP|lSuo~yuLм '{Tm'lQU 2wo_.O* ӯ_ ^5PhC\=\*<*[478=g!⼐^TC[˯4 C]Q{zҀ/T*C[j- '$u6TݪvvAaW+򜛴O=C9iJϚ2Hva?{zTh=+UOoO\0N庩Je\6\*Tr+H&``3 Dg@)9iGA¸+cm6y7-S[RC4>zn;D'8u;**6e=yymtRhFS[l|׫'-[v[4;@f :M%N&e} ?bڨҠvZ\.u.`yD|]< Y5~eTWIiQO9e9*~|tBd0lM]nY+_]|Ri g-T J.Tfu2K7@UF =9r$HRSSAJ^pB $‰M]%U:Y[nHƪ0HUFG:~U_ Cʬ`ˁReU=j.ԉgCmk{m<8.ިz3^wL.ӼE!8 V{~ESzx,R> U1B>$CQѶ|s>R0QG*m*^lR < ]p$+^7h,0#@5}zf؁#\#`8G7\% 癢J`U$$T*PIS2u>ch2 #s-~*Ac@($:PT@i TIYc_Ve2.54H4&~>Bh\UAid+N<M]8!0=B0r8%j}IφZ2sF%pRw {#V'3 'B,C ];LpX'#:t$3آ]V#3g ϵRQQTƆ.UUU~z9SdȐ!f͚A}~c3L,N^pN zxj͡ƃIa_9AH7*u Dթ#7^dҠT"٘7v՝jPnaGکJLߡgUpi"t. ^"baU+z47jh/Fd}.o)f–1vUڪ*RՌ!Zra%zGaPB%G½F~2]mE@,PB2qzݯlYj1M+c*5ҦE xyF;,/W[j20 'j8^g-]=e`8LjrսjJ-QpYdr5W']]QZSԎc .7jς7C Sa +>{<~ja.+SG4fAol.ڛeOld*4g?sH${7@@t&u::J%W\ԗPCM638C^|Ő~9ȬYdٲeA d3<q߿?0Aykq'k{󝈎;TW^l!ڣ@J o)T[Ȃmg/T$ Tzc/$ccA:cGc ww`ߏ UX1o:K@: tY\ S%moiv|@Ig}V`6f̘!ƍ *Xe1)aO޽{T&M$=L:UCvRSnsQC ʡCȑ#eڴi.'fQp @ .ҥKo?T8GH%t5Ϳ?0s r\2&pFkecUũM,`z$ )Kfy!0\'P؞$($ S,6* V.LԕhV V'&/a}f$O`3 O3ڞUށn>ф>ص:]v" H wڴ ')F,9ncQra\5*LHD0@߭Fgyf yeΝ2}Ջ6&gR>=j[0;<@`\&O,gϖCs='vP /X,X.6Qݸ1qz@wFz20 0][Mӧ]3vdnt&Bb8ѼԦ禔lroذKjʻY΀t؄鞚؛4!W0a|~T$0#_r F ʒ^]]-;vh\0@ O{lJ~˺u뮓s|#y뭷yp6^?ypڏxxAz~ #7Ͱ1dߗLLכeg@2tL|0H &X=ܠի哟dJqxDcL:ݰbw9|vF8yGy$X uYr 7ȸqB3#@@+"0 0ViLn0& m!y饗Bwyg0׻Rwg}vP #_| _y~g1@> {_c~/Ё:2V_kEɵ7{2`B`QN]\$8``eCLPҗ$??iP/)x;>)S¹>׿ w-o{ۂ ե^lHn*v,ZH6o,7t|'|'XdI؍A[_$$믿^Ə¬|CG00!(ϤWL_'oI!M6>x:&Yo4o(k-ئ۷M ܂-E1iuXh)?TM-D`Æ@ JKݖf30 t۔hxp/XT `nF*JlpgBKY8SC^q`(:CmņI r6>E:K@:v2M"]9Z2qpJ,1&L6QÐZL-\ '$(m!v ?{u]A2ؠr-ַ%7‰Qꫯ H[L BGh7w3 T.y&N~=PP /9;S~[>SAy1bY|qqꩧ4?,8@g64O=Z(XQD o~mFmbLCK[#Or6*lQ6,"Px͎!   ~_). L}uWGǖ48` ~T$/rYjUXd#(** .,[ΫЅ+,mÄ̙3'8@b 9㍥۸@{`sp!S:?O 0`ƘǘHz0Zu8P %X`D0l3' g@gr&&t0ZwzPnW-vxŹ s27 vPB=#Hб6lXpLxB Lg}{_eRvBO;PxFbypx@ʁ'kHPV, f"?`XSE9k~E*$HY6nԝ`}JV)RqWʯ~0f`ӁDϐ!C/{Hbk&j6x , tND 40f"`#@Ntbڛ".D :DօX$.??ɮ]s{0LJIaQ",N`~Xaǒ]J&ԋ* h,Z[D#H`6`Lɢ(dK 8`N 2^GGՊ 2.p62R7L {FR>H^l 80h 3ƍ6koc4Cۡc4 03O9"R'R  6xR;pvl@IO>z/,:,.q>_U y,4Ѕ.]lbnm6U ;KSTjS,v 1p6~)^$N&w n -@pN$H|ɠ"?l*`B; ~B`F)X $ł= @!@1l8F@3I.$3` ~ԃʕ+3k֬F8VIA*F vh~u7NYY611FO@5,ґ`F=aKn~ bb"tPQcB*-  E胇!osoPX.g@:r |,L+ ^‚=%,>0.eX=5mdBgwFo$&LLxa"g ,lr;"}*x.l <exU AaϤEӉO}&0e3)(tQQf6} ea[ đny,+Gh`lDB=x ~Z|߷C<8NL2YO٩N^G~ eR}'k_ZT,W1ܛ1 Las  3acămD g8KңyBqB~CE}j-[[RҎe45I'`upO5o,?cϖ'Jhq[gcϤ/\٘G$Qƅ|ڇaܾܞ-i Os䒅͋IWwAe]EcΎ$vЫf'ѓ656կʘ1cHR -0aÍSl&T!8E\ؑ`Lj684@9կ# =EU7IGHov8X4O4&5&ڃyRSZOcD س[~=1`!Gd&I&#gA%L,N,F/^ܸNxBU#:Zх逹oԩsCL ]|{y~嗃'|ʂo7 ]7[f퉶16-O4>{h6%+ve q9V# H:EG m0@H 83:Z9Khbce?xu ABr=4z6& 'Zp:ڇ[K8>jG8y #Qmk#`M͝cKF3imۉ2O*w6{>G WhZBOwXyNG`哎Aƍ}cu)t9]01bDųG8y`4n Mh$7|\20 FO>)0  sbGPk3 -ⱎ@V"` ֨s .0>mڴ@8;&3M'i*w@~#`(\paHΓ-[4JE nwGhYw! HN#`fܻ0eg1gipɉN#~{95o#Q8o3ewv@IDATw]C`ŕJthGK9ߑ,3 Y"@{H &xi:r3}!'g,G@ z~S`.mL2~uڋ/ H<8:G #0dJ6Q9`B]l4#8@5E1Z|j>vZB ι%3;}vr}&WߠpG W77 H|X:%G c 1"GpG@U 8΀ĉr2̇3 ګpGpc#΀rGpG_|tJ@% i+pGp4" HuҎ@]t!tGp S<#8Լ#Ѕ Gp;N>f jpGpbFur@p Hv#8@s\9}rzyG p HU:#8@,8 N|dkpG@xsj#  ^#v{?!-G(΀dn6F'QҎ#6`v%;D#>ǻ c%.G.G"<ؚ#Gpp+o6ڵ@VݨFfj_4ƾ;% ש;iA '̴tى:#Јc BKʳ>+sΕɓ'믿.'N]vIϞ=o߾E&L slٲEy2e{ү_tfژ@*!I47iEJ)qg@nu_|{8'ˎ;SOڵkeСgϞ@&f塇*4hPȿa5kU[c4ړ#LzZE"E2|f3AI媢Ĝj3 9@8#O$l}}}r5J {%wu\tErYgÇe2sL_~Yv)s̑#G4t6gAs܂%P_Ld"uD E&/vH2#M0Utpm{p$\[SS fi N>}wA IKiiixYl&uan\S?)!"<* Qfc=z6TG?]kgO$ǵ5ɘ$f_{ժm3 y3 y뎀#wHuu e]*++cLCmm߿_żBɊ+dٲeA /ۑжEIQQQz>ztүLdQ `5*ʌ 7Br{ڟezJqqq _ܭQYY8$GHx8p` `SLU)_"vmٷ[z,:GңlҘ@' cPD*鱯JJWOP&-0"/|΀t7qGp5\TƎ+<U,6o,SN jW[n >}z@ jL;/\.Ҡ u!i7) . mE"g6]RtѮ5KDj Ʉ3E&)#C./[֙DG*R%$lRjLtO~$fRcwnY|uN==LSkذ᪶vD{TT#u*ڡH,4n*Ǻ_1eI*YپAz<=9V 96f("voSD>_*-!;_'@ 9w=b: دl]hsmݶ1G!` Hwp ]?3r-/˰0_dIp˕|֭o=xƂQxᇃ/TzַmW#7I$˲& L w!$ɦf7MdS7lzJHJ轃۸.w[r"7;O#]?$WYVcw=u>sL9wˇ>!c$pC|;rˇ?a{}YoƐ裏eIg_+ 3Q^WvՅ2%yBTթ_|[>aȇnU˲Kd~(իw_YdFql׶VUY٪Ҧ *o+?+.d"SdxD*KW>K*_*qTrT*QYI? Ko?/o?/yTȸebٛAE*(E~|T>g!!43)XHZKE ; FL*$H4P6lل@M7dR-2}r1җdLGvvI,JM _rueom F<{܌xcB>c660._LU/fB޵u<'N jPձf=$24!'Fr,}gLTi0eC'|Hx֬^#99Bf!1cٯJ+[3T.IPڟW6Rg,}2x&OJ̿KJeUڱXZ韕^}iVN[_W/%U3JU^W2Pi)]"Tv̒)WjBx'.[RXFM@ @ Ѐ`  }l/Xc l2c,P"`(N۷B/~ԕG25KՌ)Vm*xž_XBMnUIå^jvUvlKS׺ۭMKꪫ&r)w1 dv>Õh,)]"9}DUe}|C7a(:u4 /eN;]^x9"C U[`V~%QM*{7_SUR9j7%uU..;/uޞhHPRxFmqEI3}=F@ 427ol{^cBӃ` }pm ^0`'s;s̑K."Mu]gPkpC\좊E^KOWF4/[TuOŶL~ȕL/SoRvjG1FZyys)s>;Yrg)V=)jպ5Te<)Ndr 7A7/\Ճ Q]ԺjEG* ѻQdCUfDT,Mgy-x+_Q5mE9@wR{ HEiwI׾ufK~"2|eD >@U4i)Rt3Bl2Co<\{ВL0Q:E߿`sg]TkHօzִiӟt^l׶mLJR+/0@ؐ<@鳇w}hE>Uaګdu'SFdU/Y ɏ2Wgdw"T*JdtSխVmSWÉvOͫ`@@ -v|_JeU-/v?&y9sX}ԣp]A7jV3=jW';B -_*HZ뮻?ov$(Ƙ=@AF 6Yt9rχEVi]|\URVꢝƊ>G*aP"''SaTHnbB1^ ®4%L mJIu,63T3LEmD6Zqz !K>@v!+UURM)+O:fdv=4ĬI4han Fh FCbmW0 QXS,1~zy\Y|peHkUFn^7*N) Hکd SYJ+:wݚӳgTcj_AqHJji̕1 Fzn=B{€]ռ;r9r̢D p䄿  s#T#qjP, vsU0/gM@qﰅ7saV8io~Ay oӧuNZC6*amHEOZJ&*N՚.S p< ҪNJQի-1o}je0,h09CMuR) yPQ'hT 'y6mB#rϫ2-[_0Gw^떫qںoRKVkmr020,C;&71@ @`Q"d> I/T,rsi4/>Ҕ3&=ggjK#`%nd7!j!mB^tty!gU&#GH/OB],#P{` Eyl;}$!upڬ⺾ D\-!^&|g}@tg=xɴ޾QkqM`@ [ >!.@ .}|LOԎP{Bu=nYB՗%%yQӑ,d}2_ǥ?{>iɼs#9c`@[ @ @Q"B3" C C2x\L@0 _<@A`R@sFq95EӘtry:}sl.醫;:Z @ DMn\JaVٚ#Mr&ϯǻn% HKxf@ F@ c[p8_Y6b3AJm, t~. !x0[k,؜s09:4RZH_I/4,o~Sz A8EO=جI.1tZ~̘1C $}㷑6dzciHmrE@ @ 8.cgCps;gYbE^):&S9Se„ ҵkWcB',Ni ʱ` H{AQ pHu@sD欬,1bݹsg7fa<j}F!}WӦM%K؉Ia$peˬMae^ߴ6d}ӓ&M3nH!X#G~E@ 89q;//~ՠX\'0G~܉+˖-[})`!\ wՊ!?^Ə WֵGەJ4׹aͺqGʄr ?((C@sDsN皛k.xc?k`@~ڵmk;$XmZO{K_kaE2n #Jw_93jI;ʛH&~ڵRSܸqc5x`@K2}1vZ *ұלDZ5@sEYi*c\sywyyWqB*ҘCy~)߹;%".Iz _y)ٶG;̶),dǞJ)ٴK vжL<ڱCG# )b!}{n 7Lt(;q7  a޽ժWIhLjՋo-m:`_Sy@ *Cp`ν̑"۩ܤk/7lͳ=yrV=6ؗ` Tr@W52n5UZqذژ̤/JCH@鋍nHvRǺ; 2QMjTM&aaުc/Z]E!3TsJM4~x.[L٦9ZϪ;-mTҽtrlNy FjzNozh#΅kʤ%_qlPo#f[Eso%Z~C6ڽ}_-C]u:jx @ .`"|Rѥ2*u(Z#OTZ!4Tx:u`Ym4TczZsCY[Wj>r&uf8wUZ=UiUő پ Ss?j^~iA;]`4`@ Ҏ/5v;V ,0Ȥ|ԿHԞVo1Ggy~^,֝\f,O],U2GuEGjի˷mW6O^\%_`jBMr׌u?'ӼlZ,u-g:Q݂bzw1qSӋûK@ CE>kFwWOUs'2U'sBRj\QW\6aNo9;SGBm5X|JC>>Yʻ^ 2_7v+u@I-0@ 4Rc?dK̇yzh6wztR+jSSDHo`u5մ`@ = NHBdRUrNU)njJLlnj\aQ6i0`5(WG@Li.INO;eLSmey)T[t|@ ' ڪAE;ϓz>P:UWU1Ur^&Uӝ0ST1-FCOu")De\v򘕨iQy*I^i-n Q<{>{aH,P{ jĆCtlEQn710}'ʓo=3Jf:dTL*d.z_Ok]~lPiFa&6fBkҀzz⹳F8OO*u7XIFlt.lsT~*svJsު~9ҿ KJ%O>Tx>{d9;OհtjT_5{ہ+PG*6?{̐j,w\-8M=Q?m$9ך'=2K"NcFԂOy 1wtS6Y(^CHsmM7'u4t}d:¨$FJd^[Nz:=xkKd ʤd:iu%ʕ+SNҽ{ڦ 臨53xf,ڨʙEztp]V#˘νL:@Ox|MT:<\N6kqitsy6S6S j֤WXu%2ev&_T6'Ç)]z$TL߽hz}F^/ZJ1 N`Vi \y ƧNƏTUtdbG(=d`^E!: µe2+'T s肚RMXcƚ6gM̑%'J6thvk9w^Gm~Dm}!LKSg^69^_j?Pmq(w:tPGB#yCmqz-YvtQv%2|pώeݺuҮ];;41++K}6/^X֬YcA?!C|VXa&-...]XzIIZ\}}ϗnݺUqF }{n0r<锣}=ztO_y7v@JϤS?}Rk\W/ޠ ;t`鼟-[TN;!P|@\׮]s}$|M;>NCfgg[:}tSy:A#xy0~~<{:􂏧,x~۞3߳c@:<:t3u$i#@Y!$2\==q8T;+S?[nEN;4yG?GL"'t邷7F"4mGeY57ne!\EU3 dgl:^AZ *X˾F;.OVoh<5w¡%2^%*hTjo&d+ 7!âgzv'K@X4OWwFo(`=w͒W2LulPTwTjxςao!@rf`K<ίnY\'e"a EUh#3vO}Mi Mf<=ߒ%KdٲeEKرYlٳgu:sߜk?[eeeAnlg6ƍ:1LdmxfAo̙39 ѣG#s޼yKNN&zXcH, ?a7R5\S̀S4_uUD{カPfʗ]vGaOY_|pڴirԩSꫯ:Y8},4zyy'ȘSN9E&x0>-[0lpYfwav۶ma ~Fu|wI:LCիW[Ygedž%#\r%f?O 3i7p-7Iy0C=ÇzH?~aDep<àz뭆}#FM7$'Y̙#, X;qfFr}.6K.~~@駟.'N#6+K[IwOW3ys1f#gya /`O]h;e-}WO~081z7ްxV;gH9 31-\C`HXh; ɘF;{;W~C+4{L/'Ohۦ?Q_H,uY˂|gU S0u:X@xn'gKʈPY9LOe,=1%(h#]eUzt֤@(|Y{#hSsT]迸L֨Dbg|]VI #WNcjOveVo5OO_"gqgdj}$S;uSL C LllqfU 땥&]Y*+S_m*-9]]SI?CINYլP}&/'Y~ uC6Lx]js 鼫!PFi[t袃ݬ_nVy`>CN>@ĘS TmBRY Zu!X6,iTJX<yH㢢"ԖN6YI`’L]2yxH_`xꩧ֖l '=Ptv&O]wT{ ҤO~u:"h~%XBUa+;DjVWS[#L>uZ| $GzcM>pGdRu5=hh@*KO^jûd.ڗ(S 2'B+y8zt89+_t.So2 ԫdΕldh:zj;+SBԸQ3' \Vg Kl=uhJzr ^'d}<'feW' FHO[ݳ.{&ВO$s]H}W&˧Q_Cu4$w:56UۯthHLJ Ok˓tj 2G^[;4p~ @IDAT YUCC2l0P4Zo8~T "TIs"= U^YmeJEN߽O[byC;uz՚<8_eQ+ \e,֖ujG2@ 7 UoR$T-nAat1:VǓf9RܒtDf/o/fI@:F v곗Odor4Wh8tefwT A/ueK`0AJ^`qxߩnt0hV$&x0j:Иwٯ~m\4"_wkt'G|a&ƙF;NNߩb[De?:1[)R=l*i>aDW}1D W>8HEF*Y:wZsQ@麑ݪ'Im!#jP҄o:xW)ID3< /Xεz sXl9\7Ii\M_#-E…zsͣU{.u"M3=y`^׎]SRWwhn:ݪWW@R6}n2OIƪnt9@2N+$Uu|.rv;i_*逷M|hfe\ SFyt\RZ=omZ>˷oqzS؜7@  >~J2x4WAI/)PUWDM]KSӘr讪(W7pN 2H?ó6Xh\XU7ytBoa:87Xx(6/SCxCya2JL6"gL:r)XjvJ?e4<`BZb㥚1=di,-am`>kV9YdU셕\H92^j?K_:upڽY…;Rng(PK;ۿK@AvݨB/.j~k ݖʈ]DtB[|@ pMϩEg6͐L<.ng,ݪgRxcz4Ѽp$.C23* Y'"e.t$[?9anWQqEnff,AIDFU31E?{\Ѩ:}H@ .N-kWjzcyc{)#bX-W,7F2,ԑ\=)Q U5WCK<4;TѝLOa3\u|) RmxR}I8.U|rbpV  sɅ2LVHXOgv<<uU=nTSNgQV؂0qxGNːkh:]*!uRPIj<1'S[5xW:^4ӊSq9_]BH y鬒['toIq=PQ9ca]~EW @ PfqWWJj\z>PҾbgz1g_^*S"-zѼnbW[^g 5oUi&yҸGPӀ@řQ=$pq'=[ǃNury'WJhlJ>暗,#` p# ^>_|<,[G<虭.U'yrДG:60B=<=y8!@ 8]suzj \Xc越0 8Jl GT 4xMPKvF{Fxxz4Zʸ@j%iZ9E~SmO?{y|~ƀ}kTj{M^HDRD*J+m*&~Mn4!F*F0t}Ie׮]ՃAX#?rhm!50}qV+e}:r=yu=~Ble9@b3WUqեp($##nI@,|Nޓ9*-x$.ޤh_7ʬYOo[ρ@  \tSTz*H.vPI|^q3?oVs2F]c"wJY`Ysj#!@BՇ_3?Jr'^,Wm.VB?vcL~]rn$͛i[%)+c0AbR?vڧt퇙K63O;r oYb=۩E7==CXE:*c񚖁&%g2G^r 36wV<ȳHNҺxC+մbu5 H#yAF#™Eryy̞=[JKuٽڨYh촐/ExjN;Wʔ [MHLБ2ek6KS'SfH11RoNg҈#IOOϟ[{]jڷhJփϵ]]vRVV& .4@ @20H1p?o9C.2B~S<}ySϲ:K& \gn0r*:8y?=_ dÃ{սVMrÇ٘.{9\xHwt:6Dm++ d22F](Uʄ2O.*6\0=?LTqkj9TA];@Dڗo,X'_U ͊GgWYo_]#7)v2;%e3e3BX2dsJ o4!F*FΝ;P>ʰapׇKxbw:H3Ai' պudm۶j&D@ 4t͈aDk;hl-xxd};O/WU]jס;8\<:Ci'_Z&/yV[0 @([~sP^RV!҃wOQ'0֌p*yLyf|S7v~]̞cƊ2y; +Ki)z˴qj;gg#Լgh7pbJKQF\UiƳ Z^O?o*Zl+F˹{eҋTջk%K%Bxyוb@R877"%hHX۷llQ߱cMECҜΖ޽5^so@ r@R{ZK.Q)"䥽.m/O ႾJP"RSToJRrF K&\` N@zMUrMԟ8 fշ맫VhvPyVPi鬶zh뛣EsF> -+OE5 dL *uRW0 ='۴_~@d-إ@ˍ~6IUTi֭o d/={Hqq=\SCvhsjxf pcr32gрMdHPQgUfg[)QU*YԣƤkrU}nm,ǶFOoJWUimV'mhz1Vy!`&Sl<*3C٪JEA`F` JH窝gO-#C/rE1ԯv/ ΠBKuzQlT"]sdH*i/!H81ॉE1 ~~E܉Z$;͓|ɓ'KEE٪ 2Dϟ/{6%KԩSk׮zG_RuۨCa"@ -9K}ߢҊVU *M۩jO viV{GXcGl)}2sUJz*TT#u8IsJ&fRmߥ=dҊm!:({u^j$1l^ZQ=kW'4m/IZإj]˺^m(ݹO^ҳ s;eQ;d{lPzSd׎7hCU\(k\߱h\#i@XLHo Grx7夓Nի~\x&AApiq7{ <(Cp-y=|";!@ G@XSr5P8տug4a.3Gp@u] qBJ74eY>[Ezv9I*8WA]-[v{y^qA),^\?$'%6h|5F*Cβ+pu}mg꒩^S+FE;Jrїuz}#vJ`^zNRrT%{Gv3Mqݐ[_L*EAjt|5@f`D52BNm*[^S!)/¼ϵwqrE@K,`N:D?cB`<-Zd$2}tYt||Н1u<8M.)k]etZ9@q !JX)]9/܈-][ N›zw,YN:߯leH/w8_ 7QU{+>0v *bu9Uu*B׷{Vu}n;&EO*{5ZQz<5*uȖwKg; ssr230U1@z[`O~ };ufƆ͑}riO[N ^mޢv c$:yO_y?;b?:tNJ+dӦMciӦo߾k̙ '鯍dhFPjW^fwX& @ h>tW猀g $AQxJR),?=|\qդK&sڢxؑxHod%㚞79eޯAzf@+yOҟ^'; EEE#bЇ@- u+aDpm;bc̙#%%%2zh@\x%$cfg5F2Ef_c׾5wkm>ҧO9s&OK;@ &>70G?2 ;QɹX{x&MCեZZubM&U4S`Yj?qёՅw*C #4=P 9rz8ݍIw\Nxtz8hU-ȁVHMTbUg(K9}[UY/sWF-[駞;飼 䨡@"a:rss%7ocHv-1!x+ $'=Rnݺd} ]h /@Fe!^zI&Nhk׮7x&33Թl2g>cLS/Y^yӟdL<` E@L^|Iq -N|GjOV^^.?O-抴;S#3K.*}.Ș 낗oZ@ 4/s= hrv _r%vc0|pxڍ7hi|B;ɀ; nv؍> o5ʌБz\ve 0]p2w\c F?|6l---/}KrM7SOqHI`rSZjI}CĨGO}JoȘ1cL*DG+B@ '5EH03_.E{ħMd}'IW]ݦ7p)5GZ2qC&=vY >XT ]D@9 yf2\HJ0h H=TW\iG0nG*4w @^7gq!t+/Os$sYl~=z 0 N#4YtxEd E$l\y`/̡8=A:u;c k\7q/bʐoЀl H)]K?HJ ]믷 8Pbk CC^}U;{i`Ǣ"7W6}gLUW]egvCh=;2Nސ4$(3PL/hѺ·-aq4B?;?Ms1z0c΀D00 =cL[o%9\I:xE5f8stl=C!tǽϥu!{a`pK;H8u0-`! ٺuű?a~뺬X:߁@  _3G8$0HFC`^$9HXSk֬y7/G/-}IJY>?Qϯ\Y& &<[nE]>gc-UdP)ynm ;I!}M[<`10زSŁBxɢ~D}{m{FDsAd~$B @BzjSk- 8Cal+؂a {.n|Ć`A=00H)m܆D~@ubXWP+/iL{s̿0Rh a>L?C?ssL nQ?<*ɴC BZdzsM AO]~1 ^H/ wx0 q6oخ?HZh=yO bvpH^arhIS]ҒN_@ MB2c>gM5j ,yM5*T0D99xX$?L rr*LS'H*H.SKfZna7 }e?y u&8,IW\abo3O# =hBꃄO~MQ'  g8dM:y5$ Fߚ>(A4ĺȚ8LLwW!vYM%TSO.F\?*m )bw vT`ELK,1cuhd@ д`g^`AYv|BW}6z$wsgB=/`*GA`T&1G||eBy 6n3 QO9 l2VgPсޓF[i… Mjs&m0e=93q N0 > j\_c,·]_Wfkҡca B$ t. 8~@I e 7)UR Fxbg VeK @G(-F,'XX" ;d:0y`L`~xqI / @T'fNseL|%ۅr@!aA*[E}5絇 H yͦ x8vq@p݄iuw,ZH^z%cP`r#ct&t5@y ܑܔW9,ɴey&y׹ $Oy<>'ҟ=%]kV4-@ Pq x.NvӉC' =OzP+$$āK% ^xfx m^ +5@ !0d#ג0 %kC 9C|rOOK\2y?{N,6!CB԰cけ!E:k:}@ tHcOګ-1bxh x!6|J78@ @C  Ѷ "<>06U|'!ʸk@p|@ `J 44(ooD&;AxJHL` W,_ag8捈 %@(k5ai//H?6P9W98|jۈP?l`' ێW@ kc2?4F`@ >prF#,X /z[QQyԢvǾ~[@ g2\zgp!0O?mg_pp{gdɓ'[^ĵ  Hy4@ҿ1+X uH?`8UB(@ ppN$eJٵkg?˄ b>8Aﯱ4 HcyAG#b8++څA5B!3-X ^5@ ;e˖UϣNGAAk6{W+€0fו-`@Z{^ւ/|_R=D9„ӒQE 't6`$L{ꕌVZU+1"ZWN"OH>}r?Qc ' gB\m>z}ז@0 -]GO@,N$@ i0o&&954[cemD@ @ @ᰎ@ @ @0 -'@ @  @0 u@ @ xi? @ @ h8i8@ @ @# H @ @ @! Ha-@ @ -`@ZO @ @ `@h)@ @ h@ @ @ ppXGK@ @ 4K*++OzrܼhӼ @ @ 8LdddX{"Oq\i_-`@ZkN@ @ p|pړZ2.y_W~/@0 F@ @ 8_^^yiݺzꩲj*ʒmJIIGfϞ-6m38C233^{Zz1]R/jY^l@ @ Ojyyy'nu.=px~x?V%6 @ @ 8${-[ĉGk.{hWlYl [~i۷1'>}L4$#7xC&O\]3 zHFd4-syy̛7OfΜ)+WVZñfy뭷dR\\lѣG3D-ߍ3D:!!21g%tU$M^O2~%^8g<+0!UuAZ`@ ɨ'@ /N:U^~e޽nUPP fTdڴisN Q@:F y|Qɽk%~:/K\q] '9վZ/+YHvHLe8Z"^;L[o(OFt%YOd|J( IJQ-I櫾O#Y:ORXFM@ @ Ro1ێY`I4`4ڵk''t}` :u;*4_hBEQUhYQQQRlrqFƑAQeGh7hQFD-$$yoNfBԐPo99{ &),,4"tL֮]k6l)~gHNke oacƌX&M\BkQqo_þ6{l]v.ΆOohV~,=ӬhG;#̽VڴimH̩;/^5ndEE=}eț+t4Ypj8pu"^g[ lE"cYf=- DHeK'{V/(knwo>ʝi 5Q@"PHݽ{ iӦys]wu^wԩѳgO۹s1|jܸq~o^zQqΤ~ >^u{G:h;wm߾E>kveyC=zySO=ewu~Kynvh!B`܏a\rP||6ٶw^?<6p`9zm͘/1򛿛dyyV1br۴q 2ޝ?_xo&/Z5hm;w ,;-ǣ1 +U[azh BTB'-l~zM֦en ~NAvP?K Lu%" " " u@soݥx'NC߾}}QNwcԨQ.J@g-bzr",}.xWyü~m{'a3ga]~.&.].ay7| ]0LF Q@BcfJ\ہ=f;e66۵ +4 WYl;|6?n!v9OjosC1ҠA5HH:dQL$3 Ip[%EG-zc}jiiٷ ;k`YY䯜դ Xܦ%ɬ)F-gafF[bvD@D@D@D@ |ѽ`ëƍoѢ/)mذa~ bK2oEwuGa]o; \hx}.!p?i$0yg ፡`W_}5\{XSB `ի>5b)Vv~k~euk.rHvFm1 ¢r3)~3ɦ^zx⟇;4gC:eim;ZZ9myyE3FC% :=/nєKqWfsYbq\ke.2w|m4yEO76ljoχ˃D|>P 7 D@D@D@D.⟍aW`c7]IQ`pB:Xģ1Lp+f1׃euly" atTG vt>B誫3g+t1ap??>+rA2;#FY%Kx,5mGEVw<((%]6>. *-.i~;f~$c珵8ƍ2"۶1{X7P@$ℝŋp1ꥹ/wxiry}[ķ#Jo?^5Ҋ@eXmE?qAss X0ލxubvZ<05mn ?z exffA~E;[Ibջ@5c=aSfͲxn&[="cs ႛℍ!۰v/ҙͪ[5USI~3ޘ3Ӂ[.D8XB,r87 b)$sê<۽;9!Upu2p4֭]ՃDĹ'/Q4r|q:~Eδx}0٢ۍߘP'蠈A5MY "+]R|76G†]!9IM$U" " " "p* (5k.tӄ U^z%w23B<8\C(d h_ׄI .DK.Ę:f]qpzKsr$* &6VbE@FQ@1һ_< }̙{\x7GyN3[<n~ȽO"$l/ܗp0Ԍ+-=bssO~6(N" (rv.9l &1`; [%/C4"'Xjw΄=ť> M5)㗃(K^W t&y&" " " " O =xwlȑ\0|OۢEOF"qg0\1q'=9!LZg: w8 Y<Ϭwrlşķp=HA NRr[ lAP./¬tСP)Xռy{_'5|/>֡:2lC X|>KQm;7=Jz}k6KuF#}63(=p +>TlŇmpxh)@p OGf83í7g<~,;ǶiӪ`@FVQY 5񡽖،7ɵè IDAT#,~e ~s`ⅴ܏/xӗXǢ[2s,hO~9a@D@D@D@.½w>ynDP" ;vʕ+= SfEgn7ftKB?&'ەW^iSL??o EO:%tGNw7VzlĉgXh89~5;bXmF0;vHD;S1*7]vp;%C d |^4iŹto;,-;gt=g[4zEG=ҳ,Ay%*xd3PkEaIO uMc.HJ}6J⣆H Uw" " " "PpwsC1߃ 2; Vڳg믽t.ʠAj]0G/>E%vYJ ]`]~g׹a!߹X"b SADɂ8*.癭<NcZh̡tgzQn.BHEU.]3yc2m0➼肜 !c%tR{]*VC; ;# Q`2$2"v{vN!մx/(8;"$Ѿdt?Ňj" " " "  8CݹHfçxps|QP(qN1qe1VbR; (2z!>}Wbs9XϧYx g îB3ಛsy{ټ'> Ϲ++|07,)AU,̋It?(($vfhٲˆñb$l1QA1#!5 Hfȯ9tF( SQW WaLkbdRqB3C!&pMFyy.9lr@j:D ~rWj•bV?bM6GOE EEj Q`ߥK:tG[Wcԩ0 -ڿ}Տ0'p4ۛmƬaf UJi#d;Y|b-Ym?+qO!a ~.s Q V:]~ҤhA_@qe &/*Yaa_ܟ$JKG X\^\ e(!G$9AT)GD@D@D@ B V/10;z ^6w?w,<`-V^ ,駟LlIaX^\!gŇ߁7si2=N(@XZ/90d) %y)¼x-^%ռyw1:װQP%Jw2 )Zi[cnR̕%ǁhf;HKD}1țȉӽ" " " "  8x΅k;|O " d  X |?9*ashũ*V~^pBR.5 (ϸVV;W{5bXzmM,RՇNB"=UTp 5;Gh?c>)*s B8ST_koꮔW{@ǸQptJD@D@D@2.¾\H8xa cL? Er?VӃ rS|݉~Cb|)! ;^ }" " " "p =8 ?s O]S;MǸ옧$@G'E@D@D@Dv*w U‹=cMPxر-:T$@CM)J pO{VZvStښ_ w_f3h_i *Ht@D@D@D@& 6l;m"Tn{L87 CtX-cw 5#@a999=s09WIohZ8 pQv{kH)NMb7nlY؁9! 4yiuOGcs&86v6 T I"S$ϻ討ӖHSD@D@D@D@DH;OD@D@D@D@D@DD@D@D@D@D@jHփD@D@D@D@D@$@7 " " " " "Pk$@j $" " " " " Z# Rk    ZCHo@D@D@D@D@DHj=HD@D@D@D@DLIsIENDB`gnss-sdr-0.0.6/docs/doxygen/Doxyfile.generic0000644000175000017500000021223012576764164020331 0ustar carlescarles# Doxyfile 1.7.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "GNSS-SDR" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 0.0.1 # Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "An Open Source GNSS Software Defined Receiver" # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = ./docs/doxygen/images/gnss-sdr_logo_round.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ./docs # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even if there is only one candidate or it is obvious which candidate to choose by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = src docs/doxygen/other # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = ./docs/doxygen/images/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [0,1..20]) # that doxygen will group on one line in the generated HTML documentation. # Note that a value of 0 will completely suppress the enum values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called Helvetica to the output # directory and reference it in all dot files that doxygen generates. # When you want a differently looking font you can specify the font name # using DOT_FONTNAME. You need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, svg, gif or svg. # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gnss-sdr-0.0.6/docs/doxygen/other/0000755000175000017500000000000012576764164016331 5ustar carlescarlesgnss-sdr-0.0.6/docs/doxygen/other/reference_docs.dox0000644000175000017500000003551112576764164022020 0ustar carlescarles# Copyright (C) 2012-2013 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # /*! \page reference_docs Reference Documents \section icd Interface Control Documents \subsection gps GPS All the current GPS Interface Control Documents can be downloaded from GPS.gov, the official U.S. Government webpage for GPS. \li GPS L1 and L2C: Global Positioning System Directorate, Interface Specification IS-GPS-200 Revision H. September, 2013. \li GPS L1C (available with first Block III launch): Global Positioning System Directorate, Interface Specification IS-GPS-800 Revision D. September, 2013. \li GPS L5 (first Block IIF satellite launched on May, 2010): Global Positioning System Directorate, Interface Specification IS-GPS-705 Revision D. September, 2013. \subsection glonass GLONASS Official GLONASS webpage: Information-analytical centre official website. \li Standard Accuracy (ST) signals at L1 and L2: Russian Institute of Space Device Engineering, Global Navigation Satellite System GLONASS. Interface Control Document. Navigational radiosignal in bands L1, L2. Edition 5.1, Moscow, Russia, 2008 \subsection galileo Galileo Check the Galileo website of the European Commission and the Galileo website of the European Space Agency. There is a website with Galileo constellation status information from the International GNSS Service. \li Galileo E5, E6, and E1: European GNSS (Galileo) Open Service. Signal In Space Interface Control Document. Ref: OS SIS ICD, Issue 1.1, European Commission, Sept. 2010. The European Commission is granting free access to the technical information on the future Galileo open service signal, i.e. the specifications manufacturers and developers need to process data received from satellites. This document informs receiver manufacturers, application developers and service providers on how to use the future Galileo system and what they can expect in terms of performance. \subsection beidou BeiDou Official webpage at beidou.gov.cn \li BeiDou Navigation Satellite System Signal In Space Interface Control Document. Open Service Signal (Version 2.0). China Satellite Navigation Office, December 2013. \li BeiDou Navigation Satellite System Open Service Performance Standard. (Version 1.0). China Satellite Navigation Office, December 2013. \subsection sbas Satellite Based Augmentation Systems (SBAS) \li Minimum Operational Performance Standards for Global Positioning System/Wide Area Augmentation System Airborne Equipment, DO-229D, RTCA, Washington, DC, Dec. 13, 2006. The 'RTCA MOPS DO229D - appendix A' is the reference standard for WAAS/EGNOS application development. RTCA is an advisory committee of the US federal government, and issues standards for civil airborne equipment, among other duties. One such standard is MOPS 229D (Minimum Operational Performance Standards for Global Positioning System/Wide Area Augmentation System Airborne Equipment version D), which describes the implementation of satellite-based augmentation services (SBAS) for receivers designed for civil aviation use. An annex to DO229D contains the specifications for the SBAS signal and message. The RTCA provides regular updates to these standards. MOPS 229D is available for a fee from the RTCA website. \li Global Positioning System Wide Area Augmentation System (WAAS) Performance Standard, 1st Edition, Department of Transportation and Federal Aviation Administration, Oct. 31, 2008. This document defines the levels of performance the U.S. Government makes available to users of the GPS SPS augmented by the Wide Area Augmentation System. \li EGNOS Open Service (OS) Service Definition Document. Ref: EGN-SDD OS, Revision 2.1, European GNSS Agency (GSA), Dec. 19, 2014. This is a complementary document to the RTCA DO229D, mentioned above. It describes the scope of services provided by the EGNOS Open Service to be used by end-users or Application Specific Service Providers. It details the general conditions relating to the use of the EGNOS service, a technical description of the Signal-in-Space (SIS), the reference receiver, environmental conditions, the service performance achieved and aspects relating to service provision. \li EGNOS Safety of Life Service Definition Document. Ref: EGN-SDD SoL, Revision 2.1, European GNSS Agency (GSA), Dec. 19, 2014. The EGNOS Safety of Life (SoL) Service is provided openly and is freely accessible without any direct charge and is tailored to safety-critical transport applications in various domains, in particular for aviation applications. The service is thus compliant with the aviation APV-I (Approach with Vertical Guidance) requirements, as defined by ICAO in Annex 10, but may support also applications in other SoL domains. \li EGNOS Data Access Service (EDAS) Service Definition Document, Rf: EGN-SDD EDAS, V2.1, European GNSS Agency (GSA), Dec. 19, 2014. More information about EGNOS can be found through the EGNOS Portal. \section standards Other Standards \subsection rinex RINEX The final output of a navigation receiver is usually its position, speed or other related physical quantities. However, the calculation of those quantities are based on a series of measurements from one or more satellite constellations. Although receivers calculate positions in real time, in many cases it is interesting to store intermediate measures for later post-processing. RINEX is the standard format that allows the management and disposal of the measures generated by a receiver, as well as their off-line processing by a multitude of applications. \li The most common version at present is RINEX: The Receiver Independent Exchange Format Version 2.11, which enables storage of measurements from pseudorange, carrier-phase and Doppler systems for GPS or GLONASS, along with data from EGNOS and WAAS satellite based augmentation systems (SBAS). \li The most recent version is RINEX: The Receiver Independent Exchange Format Version 3.01 published in June, 2009. It includes Galileo and improves the handling of multi-constellation data files. \li There is also available the RINEX Extensions to Handle Clock Information, published in September, 2010. \subsection nmea NMEA The National Marine Electronics Association released the NMEA 0183 Interface Standard, which defines electrical signal requirements, data transmission protocol and time, and specific sentence formats for a 4800-baud serial data bus. The standard is available for purchase. \subsection kml KML KML is an XML language focused on geographic visualization, including annotation of maps and images. Geographic visualization includes not only the presentation of graphical data on the globe, but also the control of the user's navigation in the sense of where to go and where to look. Google submitted KML (formerly Keyhole Markup Language) to the Open Geospatial Consortium (OGC) to be evolved within the OGC consensus process with the following goal: KML Version 2.2 has been adopted as an OGC implementation standard. \li Open Geospatial Consortium, Inc., OGC KML Version 2.2.0, April 2008. \subsection cxx C++ Standards In 1998, the C++ standards committee (the ISO/IEC JTC1/SC22/WG21 working group) standardized C++ and published the international standard ISO/IEC 14882:1998 (informally known as C++98). A technical corrigendum was approved in 2003, and the standard was published again as the ISO/IEC 14882:2003. Published ISO and IEC standards can be purchased from a member body of ISO or IEC. Free copies of the C++ standard Committee Drafts were made public before the official standard was released. In 2005, a technical report, called the Library Technical Report 1 (often known as TR1 for short), was released. While not an official part of the standard, it specified a number of extensions to the standard library, which were expected to be included in the next version of C++. The linked document is officially a draft, but that is due only to procedural issues; the content did not change. Scott Meyers provides more TR1 information. Some ISO/IEC standards are publicly available, for instance: ISO/IEC TR 18015:2006 Technical Report on C++ Performance. The standard for the next version of the language (previously known as C++0x) was finally published with the name of C++11 in September, 2011, as the ISO/IEC 14882:2011 Standard. GCC, the GNU Compiler Collection, provides partial C++11 support. Bjarne Stroustrup maintains a C++11 FAQ. \li The most recent public draft of the Standard for Programming Language C++ was published in Feb. 2011. \subsection protocols Positioning protocols in wireless communication networks Cellular industry location standards first appeared in the late 1990s, with the 3rd generation partnership project (3GPP) radio resource location services protocol (RRLP) technical specification 44.031 positioning protocol for GSM networks. Today, RRLP is the de facto standardized protocol to carry GNSS assistance data to GNSS-enabled mobile devices, and the term "3GPP specification" now covers all GSM (including GPRS and EDGE), W-CDMA and LTE (including LTE-A) specifications. Precisely, the label "LTE-A" is applied to networks compliant with LTE Release 10 and beyond, which fulfill the requirements issued by the International Telecommunication Union Radiocommunication Sector (ITU-R) in the global standard for international mobile telecommunications (IMT Advanced, also referred to as 4G) access technologies. Control plane protocols: \li Radio Resource LCS Protocol (RRLP): 3GPP Technical Specification 44.031. \li LTE Positioning Protocol (LPP): 3GPP Technical Specification 36.355. User plane protocols: \li Open Mobile Alliance (OMA), Secure User Plane Location Architecture Version 1 (SUPL 1.0), June 2007. \li Open Mobile Alliance (OMA), Secure User Plane Location Architecture Version 2 (SUPL 2.0), April 2012. LTE Release 9 introduced extension hooks in LPP messages, so that the bodies external to 3GPP could extend the LPP feature set. OMA LPP extensions (LPPe), supported in SUPL 3.0, build on top of the 3GPP LPP reusing its procedures and data types. Check the OMA Location Working Group (WG) webpage for updated information about LPP Extensions (LPPe) Specification. \li The OMA Mobile Location Protocol (MLP) V3.1 is an application-level protocol for getting the position of mobile stations (mobile phones, wireless personal digital assistants, etc.) independent of underlying network technology. The MLP serves as the interface between a Location Server and a Location Services (LCS) Client. This specification defines the core set of operations that a Location Server should be able to perform. */gnss-sdr-0.0.6/docs/doxygen/other/signal_model.dox0000644000175000017500000006245712576764164021520 0ustar carlescarles# Copyright (C) 2012-2013 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # /*! \page the_signal_model Signal model \section gnss_signal_model GNSS signal model This page describes signals transmitted by GNSS space vehicles. Signal models are mathematical representations of the electromagnetic waves that are exciting the receiver's antenna. The current induced by those waves is then amplified, filtered and downconverted to a suitable frequency (can be at some intermediate frequency or directly to baseband), and then converted to 0s and 1s by the Analog-to-Digital Converter (ADC). That is the job of the Radio Frequency front-end, which at its output delivers a stream of digital samples. Those samples constitute the input of a software receiver, so for GNSS-SDR the signal models described below can be seen as the rules of the game. GNSS' space vehicles are modern versions of lighthouses, but with better visibility. Each satellite is a reference point, and if we know our distance to several reference points, we can compute our location, just as mariners do when they see a couple of lighthouses. For each in-view satellite \f$i\f$ of system \f$s\f$, we can write: \f{equation}{\label{eq:pseudorange} \rho_i = \sqrt{ \left(x^{\text{Tx}}_i - x \right)^2 + \left(y^{\text{Tx}}_i - y \right)^2 + \left(z^{\text{Tx}}_i - z \right)^2}+c\Delta t^{(s)}+\sigma_{e}, \f} where \f$\left(x^{\text{Tx}}_i, y^{\text{Tx}}_i, z^{\text{Tx}}_i\right)\f$ is the satellite's position (known from the navigation message), \f$(x,y,z)\f$ the receiver's position, and \f$\sigma_e\f$ gathers other sources of error. Since the receiver needs to estimate its own 3D position (three spatial unknowns) and its clock deviation with respect to the satellites' time basis, at least \f$3+N_s\f$ satellites must be seen by the receiver at the same time, where \f$N_s\f$ is the number of different navigation systems available (in-view) at a given time. Each received satellite signal, once synchronized and demodulated at the receiver, defines one equation such as the one defined above, forming a set of nonlinear equations that can be solved algebraically by means of the Bancroft algorithm or numerically, resorting to multidimensional Newton-Raphson and weighted least square methods. When a priori information is added we resort to Bayesian estimation, a problem that can be solved recursively by a Kalman filter or any of its variants. The problem can be further expanded by adding other unknowns (for instance, parameters of ionospheric and tropospheric models), sources of information from other systems, mapping information, and even motion models of the receiver. In the design of multi-constellation GNSS receivers, the vector of unknowns can also include the receiver clock offset with respect to each system in order to take advantage of a higher number of in-view satellites and using them jointly in the navigation solution, therefore increasing accuracy. The analytic representation of a signal received from a GNSS satellite can be generically expressed as \f{equation}{\label{eq:analytic} r(t)=\alpha(t) s_{T} \left(t-\tau(t)\right)e^{-j2 \pi f_d(t) }e^{j 2 \pi f_c t}+n(t)~, \f} where \f$\alpha(t)\f$ is the amplitude, \f$s_{T}(t)\f$ is the complex baseband transmitted signal, \f$\tau(t)\f$ is the time-varying delay, \f$f_d(t)=f_c \tau(t)\f$ is the Doppler shift, \f$f_c\f$ is the carrier frequency, and \f$n(t)\f$ is a noise term. These signals arrive to the Earth's surface at extremely low power (e.g. \f$-158.5\f$ dBW for GPS L1 C/A-code, \f$-157\f$ dBW for Galileo E1), well below the noise floor. In order to estimate its distances to satellites, the receiver must correlate time-aligned replicas of the corresponding pseudorandom code with the incoming signal, in a process called despreading that provides processing gain only to the signal of interest. After a coarse and fine estimation stages of the synchronization parameters (usually known as acquisition and tracking, respectively), signal processing output is in form of observables: i) the pseudorange (code) measurement, equivalent to the difference of the time of reception (expressed in the time frame of the receiver) and the time of transmission (expressed in the time frame of the satellite) of a distinct satellite signal; and optionally ii) the carrier-phase measurement, actually being a measurement on the beat frequency between the received carrier of the satellite signal and a receiver-generated reference frequency. Carrier phase measurements are ambiguous, in the sense that the integer number of carrier wavelengths between satellite and the receiver's antenna is unknown. Techniques such as Least-square AMBiguity Decorrelation Approach (LAMBDA) or Multi Carrier Ambiguity Resolution (MCAR) can be applied to resolve such ambiguity and provide an accurate estimation of the distance between the satellite and the receiver. Then, depending on the required accuracy, the navigation solution can range from pseudorange-only, computationally low demanding, and limited accuracy least squares methods to sophisticated combinations of code and phase observables at different frequencies for high demanding applications such as surveying, geodesy, and geophysics. Next sections provide brief descriptions of the space segment of different GNSSs and their broadcast signal structures accessible by civilians. \subsection gps_signal Global Positioning System (GPS) signal in space The Global Positioning System (GPS) is a space-based radio-navigation system owned by the United States Government (USG) and operated by the United States Air Force (USAF). GPS provides positioning and timing services to military and civilian users on a continuous, worldwide basis. Two GPS services are provided: the Precise Positioning Service (PPS), available primarily to the military of the United States and its allies, and the Standard Positioning Service (SPS) open to civilian users. \li GPS L1. Defined at Interface Specification IS-GPS-200 Revision F, this band is centered at \f$f_{\text{GPS L1}}=1575.42\f$ MHz. The complex baseband transmitted signal can be written as \f{equation}{ s^{\text{(GPS L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~, \f} with \f{align}{ e_{L1I}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{NAV}}\Big[ [l]_{204600}\Big] \oplus C_{\text{P(Y)}}\Big[ |l|_{L_{\text{P(Y)}}} \Big] p(t - lT_{c,\text{P(Y)}})~,\label{eq:L1CAI}\\ e_{L1Q}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{NAV}}\Big[ [l]_{20460} \Big] \oplus C_{\text{C/A}} \Big[ |l|_{1023} \Big] p(t - lT_{c,\text{C/A}})~,\label{eq:L1CA} \f} where \f$\oplus\f$ is the exclusive-or operation (modulo-2 addition), \f$|l|_{L}\f$ means \f$l\f$ modulo \f$L\f$, \f$[l]_{L}\f$ means the integer part of \f$\frac{l}{L}\f$, \f$D_{\text{NAV}}\f$ is the GPS navigation message bit sequence, transmitted at \f$50\f$ bps, \f$T_{c,\text{P(Y)}}=\frac{1}{10.23}\f$ \f$\mu\f$s, \f$T_{c,\text{C/A}}=\frac{1}{1.023}\f$ \f$\mu\f$s, \f$L_{\text{P(Y)}}=6.1871 \cdot 10^{12}\f$, and \f$p(t)\f$ is a rectangular pulse of a chip-period duration centered at \f$t=0\f$ and filtered at the transmitter. According to the chip rate, the binary phase-shift keying modulations in the equations above are denoted as BPSK(10) and BPSK(1), respectively. The precision P codes (named Y codes whenever the anti-spoofing mode is activated, encrypting the code and thus denying non-U.S. military users) are sequences of \f$7\f$ days in length. Regarding the modernization plans for GPS, it is worthwhile to mention that there is a new civilian-use signal planned, called L1C and defined at Interface Specification IS-GPS-800 Revision B, to be broadcast on the same L1 frequency that currently contains the C/A signal. The L1C will be available with first Block III launch, currently scheduled for 2013. The implementation will provide C/A code to ensure backward compatibility. \li GPS L2C. Defined at Interface Specification IS-GPS-200 Revision F, is only available on Block IIR-M and subsequent satellite blocks. Centered at \f$f_{\text{GPS L2}}=1227.60\f$ MHz, the signal structure is the same than in (\ref{eq:GPSL1}), with the precision code in the In-phase component, just as in (\ref{eq:L1CAI}) but with an optional presence of the navigation message \f$D_{\text{NAV}}\f$. For the Quadrature-phase component, three options are defined: \f{align}{ e_{L2CQ}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{CNAV}} \Big[ [l]_{10230} \Big] \oplus \left( C_{\text{CL}} \Big[ |l|_{L_{\text{CL}}} \Big] p_{\text{\tiny{1/2}}} \left( t - lT_{c,L2C} \right) + \right.\\ {} &+ \left. C_{\text{CM}} \Big[ |l|_{L_{\text{CM}}} \Big] p_{\text{\tiny{1/2}}}\left(t - \left(l+\frac{3}{4}\right)T_{c,L2C}\right) \right),\\ e_{L2CQ}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{NAV}} \Big[ [l]_{20460} \Big] \oplus C_{\text{C/A}} \Big[ |l|_{1023} \Big] p \left(t - lT_{c,\text{C/A}}\right) \text{, or}\\ e_{L2CQ}(t)=& \sum_{l=-\infty}^{\infty}C_{\text{C/A}} \Big[ |l|_{1023} \Big] p(t - lT_{c,\text{C/A}})~, \f} where \f$T_{c,L2C}=\frac{1}{511.5}\f$ ms and \f$p_{\text{\tiny{1/2}}}(t)\f$ is a rectangular pulse of half chip-period duration, thus time-multiplexing both codes. The civilian long code \f$C_{\text{CL}}\f$ is \f$L_{\text{CL}}=767250\f$ chips long, repeating every \f$1.5\f$ s, while the civilian moderate code \f$C_{\text{CM}}\f$ is \f$L_{\text{CL}}=10230\f$ chips long and its repeats every \f$20\f$ ms. The CNAV data is an upgraded version of the original NAV navigation message, containing higher precision representation and nominally more accurate data than the NAV data. It is transmitted at \f$25\f$ bps with forward error correction (FEC) encoding, resulting in \f$50\f$ sps. \li GPS L5. The GPS L5 link, defined at Interface Specification IS-GPS-705 Revision B, is only available in Block IIF (first satellite launched on May, 2010) and subsequent satellite blocks. Centered at \f$f_{\text{GPS L5}}=1176.45\f$ MHz, this signal in space can be written as: \f{equation}{ s^{\text{(GPS L5)}}_{T}(t)=e_{L5I}(t) +j e_{L5Q}(t)~, \f} \f{align}{ e_{L5I}(t) =& \sum_{m=-\infty}^{+\infty} C_{nh_{10}} \Big[ |m|_{10}\Big] \oplus \ D_{\text{CNAV}}\Big[ [m]_{10}\Big] \oplus \\ \nonumber {} & \oplus \sum_{l=1}^{102300} C_{L5I}\Big[|l|_{10230}\Big] p(t - m T_{c,nh} - lT_{c,L5}) ~, \\ \nonumber e_{L5Q}(t) =& \sum_{m=-\infty}^{+\infty} C_{nh_{20}} \Big[ |m|_{20}\Big] \oplus \sum_{l=1}^{102300}C_{L5Q}\Big[|l|_{10230}\Big] \cdot \\ {} & \cdot p(t - m T_{c,nh} - lT_{c,L5})~, \f} where \f$T_{c,nh}=1\f$ ms and \f$T_{c,L5}=\frac{1}{10.23}\f$ \f$\mu\f$s, thus defining a BPSK(10) modulation. Both L5I and L5Q contain synchronization sequences. \end{itemize} \subsection glonass_signal GLONASS signal in space The nominal baseline constellation of the Russian Federation's Global Navigation Satellite System (GLONASS) comprises \f$24\f$ GLONASS-M satellites that are uniformly deployed in three roughly circular orbital planes at an inclination of \f$64.8^o\f$ to the equator. The altitude of the orbit is \f$19,100\f$ km. The orbit period of each satellite is \f$11\f$ hours, \f$15\f$ minutes, and \f$45\f$ seconds. The orbital planes are separated by \f$120^o\f$ right ascension of the ascending node. Eight satellites are equally spaced in each plane with \f$45^o\f$ argument of latitude. Moreover, the orbital planes have an argument of latitude displacement of \f$15^o\f$ relative to each other. GLONASS civil signal-in-space is defined at Interface Control Document. Navigational radiosignal in bands L1, L2. Edition 5.1. This system makes use of a frequency-division multiple access (FDMA) signal structure, transmitting in two bands: \f$f^{(k)}_{GLO L1}=1602+k \cdot 0.5625\f$ MHz and \f$f^{(k)}_{GLO L2}=1246+k \cdot 0.4375\f$ MHz, where \f$k\in \left\{ -7,-6,\cdots,5,6\right\}\f$ is the channel number. Satellites in opposite points of an orbit plane transmit signals on equal frequencies, as these satellites will never be in view simultaneously by a ground-based user. \li GLONASS L1. Two kind of signals are transmitted: a standard precision (SP) and an obfuscated high precision (HP) signal. The complex baseband transmitted signal can be written as \f{equation}{ s^{\text{(GLO L1)}}_{T}(t)=e_{L1I}(t) + j e_{L1Q}(t)~, \f} with BPSK(5) and BPSK(0.5) modulations: \f{align}{ e_{L1I}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{GNAV}}\Big[ [l]_{102200}\Big] \oplus C_{\text{HP}} \Big[ |l|_{L_{\text{HP}}} \Big] p(t - lT_{c,\text{HP}})~,\\ e_{L1Q}(t) =& \sum_{l=-\infty}^{\infty} D_{\text{GNAV}}\Big[ [l]_{10220} \Big] \oplus C_{\text{SP}} \Big[ |l|_{511} \Big] p(t - lT_{c,\text{SP}})~, \f} where \f$T_{c,\text{HP}}=\frac{1}{5.11}\f$ \f$\mu\f$s, \f$T_{c,\text{SP}}=\frac{1}{0.511}\f$ \f$\mu\f$s, and \f$L_{\text{HP}}=3.3554\cdot 10^7\f$. The navigation message \f$D_{\text{GNAV}}\f$ is transmitted at \f$50\f$ bps. Details of its content and structure, as well as the generation of the \f$C_{\text{SP}}\f$ code, can be found at the ICD. The usage of the HP signal should be agreed with the Russian Federation Defense Ministry, and no more details have been disclosed. \li GLONASS L2. Beginning with the second generation of satellites, called GLONASS-M and first launched in 2001, a second civil signal is available using the same SP code than the one in the L1 band. The use of FDMA techniques, in which the same code is used to broadcast navigation signals on different frequencies, and the placement of civil GLONASS transmissions on frequencies close to \f$1600\f$ MHz, well above the GPS L1 band, have complicated the design of combined GLONASS/GPS receivers, particularly low-cost equipment for mass-market applications. Future plans of modernization are intended to increase compatibility and interoperability with other GNSS, and include the addition of a code-division multiple access (CDMA) structure, and possibly binary offset carrier (BOC) modulation, beginning with the third civil signal in the L3 band (\f$1197.648 - 1212.255\f$ MHz). Russia is implementing the new signals on the next-generation GLONASS-K satellites, with a first prototype successfully launched into orbit on February 26, 2011. \subsection galileo_signal Galileo signal in space The nominal Galileo constellation comprises a total of \f$27\f$ operational satellites (plus \f$3\f$ active spares), that are evenly distributed among three orbital planes inclined at \f$56^o\f$ relative to the equator. There are nine operational satellites per orbital plane, occupying evenly distributed orbital slots. Three additional spare satellites (one per orbital plane) complement the nominal constellation configuration. The Galileo satellites are placed in quasi-circular Earth orbits with a nominal semi-major axis of about \f$30,000\f$ km and an approximate revolution period of \f$14\f$ hours. The Control segment full infrastructure will be composed of \f$30-40\f$ sensor stations, \f$3\f$ control centers, \f$9\f$ Mission Uplink stations, and \f$5\f$ TT\&C stations. Galileo's Open Service is defined at Signal In Space Interface Control Document. Ref: OS SIS ICD, Issue 1.1, where the following signal structures are specified: \li Galileo E1. This band, centered at \f$f_{\text{Gal E1}}=1575.420\f$ MHz and with a reference bandwidth of \f$24.5520\f$ MHz, uses the so-called composite binary offset carrier CBOC(6,1,\f$\frac{1}{11}\f$) modulation, defined in baseband as: \f{align}{ s^{\text{(Gal E1)}}_{T}(t)=&\frac{1}{\sqrt{2}} \Big( e_{E1B}(t)\left( \alpha sc_A(t)+ \beta sc_B(t) \right)+ \\ {}& - e_{E1C}(t) \left( \alpha sc_A(t)- \beta sc_B(t) \right) \Big)~,\label{eq:CBOC} \f} where the subcarriers \f$sc(t)\f$ are defined as \f{align}{ sc_A(t)=& \; \text{sign}\Big(\sin(2\pi f_{s,E1A}t) \Big)~,\\ sc_B(t)=& \; \text{sign} \Big( \sin( 2 \pi f_{s, E1B}t) \Big)~, \f} and \f$f_{s,E1A}=1.023\f$ MHz, \f$f_{s, E1B}=6.138\f$ MHz are the subcarrier rates, \f$\alpha=\sqrt{\frac{10}{11}}\f$, and \f$\beta=\sqrt{\frac{1}{11}}\f$. Channel B contains the I/NAV type of navigation message, \f$D_{\text{I/NAV}}\f$, intended for Safety-of-Life (SoL) services: \f{align}{ e_{E1B}(t) &= \sum_{l=-\infty}^{+\infty} D_{\text{I/NAV}} \Big[ [l]_{4092}\Big] \oplus C_{E1B}\Big[|l|_{4092}\Big] p(t - lT_{c,E1B}). \f} In case of channel \f$C\f$, it is a pilot (dataless) channel with a secondary code, forming a tiered code: \f{align}{ \nonumber e_{E1C}(t)&= \sum_{m=-\infty}^{+\infty}C_{E1Cs}\Big[|m|_{25}\Big] \oplus \sum_{l=1}^{4092}C_{E1Cp}\Big[ l \Big] \cdot \\ {}& \; \; \cdot p(t-mT_{c,E1Cs}-lT_{c,E1Cp})~,\label{eq:E1C} \f} with \f$T_{c,E1B}=T_{c,E1Cp}=\frac{1}{1.023}\f$ \f$\mu\f$s and \f$T_{c,E1Cs}=4\f$ ms. The \f$C_{E1B}\f$ and \f$C_{E1Cp}\f$ primary codes are pseudorandom memory code sequences defined at Annex C.7 and C.8 of OS SIS ICD. The binary sequence of the secondary code \f$C_{E1Cs}\f$ is 0011100000001010110110010. This band also contains another component, Galileo E1A, intended for the Public Regulated Service (PRS). It uses a BOC(15,2.5) modulation with cosine-shaped subcarrier \f$f_{s,E1A}=15.345\f$ MHz and \f$T_{c, E1A}=\frac{1}{2.5575}\f$ \f$\mu\f$s. The PRS spreading codes and the structure of the navigation message have not been made public. \li Galileo E6. Intended for the Commercial Service and centered at \f$f_{\text{Gal E6}}=1278.750\f$ MHz, this band provides pilot and data components \f{equation}{ s_{T}^{\text{(Gal E6)}}(t) = \frac{1}{\sqrt{2}}\left(e_{E6B}(t)-e_{E6C}(t)\right){~}, \f} \f{align}{ \nonumber e_{E6B}(t) =& \sum_{m=-\infty}^{+\infty} D_{\text{C/NAV}} \Big[ [l]_{5115}\Big] \oplus C_{E6B}\Big[|l|_{L_{E6B}}\Big] \cdot \\ {}& \cdot p(t - lT_{c,E6}),\\ \nonumber e_{E6C}(t) =& \sum_{m=-\infty}^{+\infty}C_{E6Cs}\Big[|m|_{100}\Big] \oplus \sum_{l=1}^{L_{E6C}}C_{E6Cp}\Big[ l \Big] \cdot \\ {}& \cdot p(t-mT_{c,E6s} -lT_{c,E6p}), \f} where \f$D_{\text{C/NAV}}\f$ is the C/NAV navigation data stream, which is modulated with the encrypted ranging code \f$C_{E6B}\f$ with chip period \f$T_{c,E6}=\frac{1}{5.115}\f$ \f$\mu\f$s, thus being a BPSK(5) modulation. Codes \f$C_{E6B}\f$ and primary codes \f$C_{E6Cs}\f$ and their respective lengths, \f$L_{E6B}\f$ and \f$L_{E6C}\f$, have not been published. The secondary codes for the pilot component, \f$C_{E6Cs}\f$, are available at the OS SIS ICD. The receiver reference bandwidth for this signal is \f$40.920\f$ MHz. This band also contains another component, Galileo E6A, intended for PRS. \li Galileo E5. Centered at \f$f_{\text{Gal E5}}=1191.795\f$ MHz and with a total bandwidth of \f$51.150\f$ MHz, its signal structure deserves some analysis. The AltBOC modulation can be generically expressed as \f{equation}{\label{AltBOC} s^{\text{AltBOC}}(t)=x_1(t)v^{*}(t)+x_2(t)v(t)~, \f} where \f$v(t)=\frac{1}{\sqrt{2}}\left( \text{sign}\left( \cos (2 \pi f_s t)\right)+j \text{sign}\left( \sin (2 \pi f_s t)\right)\right)\f$ is the single side-band subcarrier, \f$f_s\f$ is the subcarrier frequency, \f$(\cdot)^{*}\f$ stands for the conjugate operation, and \f$x_1(t)\f$ and \f$x_2(t)\f$ are QPSK signals. The resulting waveform does not exhibit constant envelope. In case of Galileo, the need for high efficiency of the satellites' onboard High Power Amplifier (HPA) has pushed a modification on the signal in order to make it envelope-constant and thus use the HPA at saturation. This can be done by adding some inter-modulation products to the expression above, coming up with the following definition: \f{align}{ \nonumber s^{\text{(Gal E5)}}_{T}(t)= & e_{E5a}(t) ssc_s^{*}(t)+ e_{E5b}(t) ssc_s(t) + \\ {} & +\bar{e}_{E5a}(t)ssc_p^{*}(t)+\bar{e}_{E5b}(t)ssc_p(t)~,\label{GalE5} \f} where the single and product side-band signal subcarriers are \f{align}{ ssc_s(t)=& sc_s(t) +jsc_s\left(t-\frac{T_s}{4}\right) ~,\label{sscs}\\ ssc_p(t)=& sc_p(t) +jsc_p\left(t-\frac{T_s}{4}\right) ~,\label{sscp} \f} and \f{align}{ e_{E5a}(t)=&e_{E5aI}(t)+je_{E5aQ}(t),\label{E5a}\\ e_{E5b}(t)=&e_{E5bI}(t)+je_{E5bQ}(t),\\ \bar{e}_{E5a}(t)&=\bar{e}_{E5aI}(t)+j\bar{e}_{E5aQ}(t),\\ \bar{e}_{E5b}(t)&=\bar{e}_{E5bI}(t)+j\bar{e}_{E5bQ}(t),\\ \bar{e}_{E5aI}(t)=& e_{E5aQ}(t)e_{E5bI}(t)e_{E5bQ}(t),\\ \bar{e}_{E5aQ}(t)=& e_{E5aI}(t)e_{E5bI}(t)e_{E5bQ}(t),\\ \bar{e}_{E5bI}(t)=& e_{E5bQ}(t)e_{E5aI}(t)e_{E5aQ}(t),\\ \bar{e}_{E5bQ}(t)=&e_{E5bI}(t)e_{E5aI}(t)e_{E5aQ}(t). \f} The signal components are defined as \f{align}{ e_{E5aI}(t)=& \sum_{m=-\infty}^{+\infty}C_{E5aIs}\Big[|m|_{20}\Big] \oplus \sum_{l=1}^{10230}C_{E5aIp}\Big[ l \Big] \oplus \\ {}& \oplus D_{\text{F/NAV}} \Big[ [l]_{204600}\Big] p(t-mT_{c,E5s}-lT_{c,E5p}),\\ e_{E5aQ}(t)=& \sum_{m=-\infty}^{+\infty}C_{E5aQs}\Big[|m|_{100}\Big] \oplus \sum_{l=1}^{10230}C_{E5aQp}\Big[ l \Big] \cdot \\ {}& \cdot p(t-mT_{c,E5s}-lT_{c,E5p}),\\ e_{E5bI}(t)=& \sum_{m=-\infty}^{+\infty}C_{E5bIs}\Big[|m|_{4}\Big] \oplus \sum_{l=1}^{10230}C_{E5aIp}\Big[ l \Big] \oplus \\ {}& \oplus D_{\text{I/NAV}} \Big[ [l]_{40920}\Big] p(t-mT_{c,E5s}-lT_{c,E5p}),\\ e_{E5bQ}(t)=& \sum_{m=-\infty}^{+\infty}C_{E5bQs}\Big[|m|_{100}\Big] \oplus \sum_{l=1}^{10230}C_{E5bQp}\Big[ l \Big] \cdot \\ {}& \cdot p(t-mT_{c,E5s}-lT_{c,E5p}), \f} where \f$T_{c,E5s}=1 \f$ ms and \f$T_{c,E5p}=\frac{1}{10.23}\f$ \f$\mu\f$s. Channel A contains the F/NAV type of navigation message, \f$D_{\text{F/NAV}}\f$, intended for the Open Service. The I/NAV message structures for the E5bI and E1B signals use the same page layout. Only page sequencing is different, with page swapping between both components in order to allow a fast reception of data by a dual frequency receiver. The single subcarrier \f$sc_s(t)\f$ and the product subcarrier \f$sc_p(t)\f$ are defined as: \f{align}{ sc_s(t)=& \frac{\sqrt{2}}{4}\text{sign} \left( \cos \left( 2 \pi f_s t - \frac{\pi}{4}\right) \right)+\\ \nonumber {}&+ \frac{1}{2}\text{sign} \Big( \cos \left( 2 \pi f_s t \right) \Big)+\\ {} &+\frac{\sqrt{2}}{4}\text{sign} \left( \cos \left( 2 \pi f_s t + \frac{\pi}{4}\right) \right)~, \f} \f{align}{ sc_p(t)=& -\frac{\sqrt{2}}{4}\text{sign} \left( \cos \left( 2 \pi f_s t - \frac{\pi}{4}\right) \right)+\\ \nonumber {}&+ \frac{1}{2}\text{sign} \Big( \cos \left( 2 \pi f_s t \right) \Big)+\\ {} &-\frac{\sqrt{2}}{4}\text{sign} \left( \cos \left( 2 \pi f_s t + \frac{\pi}{4}\right) \right)~, \f} with a subcarrier frequency of \f$f_s=15.345\f$ MHz, thus defining an AltBOC(15,10) modulation. The QPSK(10) signal \f$e_{E5a}(t)\f$ defined above is shifted to \f$f_{\text{Gal E5a}}\doteq f_{\text{Gal E5}}-f_s=1176.450\f$ MHz, while \f$e_{E5b}(t)\f$ is shifted to \f$f_{\text{Gal E5b}}\doteq f_{\text{Gal E5}}+f_s=1207.140\f$ MHz. Thus, we can bandpass filter around \f$f_{\text{Gal E5a}}\f$ and get a good approximation of a QPSK(10) signal, with very low energy components of \f$e_{E5b}(t)\f$, \f$ \bar{e}_{E5a}(t)\f$, and \f$ \bar{e}_{E5b}(t)\f$: \f{equation}{ s_{T}^{\text{(Gal E5a)}}(t) \simeq e_{E5aI}(t)+je_{E5aQ}(t). \f} The same applies to \f$e_{E5b}(t)\f$, allowing an independent reception of two QPSK(10) signals and thus requiring considerably less bandwidth than the processing of the whole E5 band. \subsection reference_paper Reference This text is an except of the following paper: \li C. Fernández-Prades, L. Lo Presti, E. Falleti, Satellite Radiolocalization From GPS to GNSS and Beyond: Novel Technologies and Applications for Civil Mass-Market. Proceedings of the IEEE. Vol 99, No. 11, pp. 1882-1904. November, 2011. DOI: 10.1109/JPROC.2011.2158032 */gnss-sdr-0.0.6/docs/doxygen/other/main_page.dox0000644000175000017500000012422712576764164020775 0ustar carlescarles# Copyright (C) 2012-2014 (see AUTHORS file for a list of contributors) # # This file is part of GNSS-SDR. # # GNSS-SDR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GNSS-SDR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNSS-SDR. If not, see . # /*! \mainpage \image html gnss-sdr_logo.png \image latex gnss-sdr_logo.png "GNSS-SDR logo" width=2.5cm Welcome to GNSS-SDR! GNSS-SDR is an open-source GNSS software receiver freely available to the research community. This project provides a common framework for GNSS signal processing which can operate in a variety of computer platforms. This tool is intended to foster collaboration, increase awareness, and reduce development costs in the field of GNSS receiver design and customized use of GNSS signals. For details about GNSS-SDR and using it, please see the main project page or browse the code at the Sourceforge project page. You could be also interested in subscribing to the mailing list. \section toc Contents \li \ref overview \li \ref build \li \ref using_gnss-sdr \li \ref control_plane \li \ref signal_processing \li \ref license \li \ref publications \li \ref now_what More details on GNSS-SDR signal processing blocks: \li \ref signal_source \li \ref signal_conditioner \li \ref channel